diff --git a/contrib/extract_translations/extract_translations.erl b/contrib/extract_translations/extract_translations.erl index 488357ba6..90f4ac519 100644 --- a/contrib/extract_translations/extract_translations.erl +++ b/contrib/extract_translations/extract_translations.erl @@ -281,14 +281,14 @@ build_additional_translators(List) -> List). print_translation(File, Line, Str, StrT) -> - {ok, StrQ, _} = regexp:gsub(Str, "\"", "\\\""), - {ok, StrTQ, _} = regexp:gsub(StrT, "\"", "\\\""), + StrQ = ejabberd_regexp:greplace(Str, "\\\"", "\\\\\""), + StrTQ = ejabberd_regexp:greplace(StrT, "\\\"", "\\\\\""), io:format("#: ~s:~p~nmsgid \"~s\"~nmsgstr \"~s\"~n~n", [File, Line, StrQ, StrTQ]). print_translation_obsolete(Str, StrT) -> File = "unknown.erl", Line = 1, - {ok, StrQ, _} = regexp:gsub(Str, "\"", "\\\""), - {ok, StrTQ, _} = regexp:gsub(StrT, "\"", "\\\""), + StrQ = ejabberd_regexp:greplace(Str, "\\\"", "\\\\\""), + StrTQ = ejabberd_regexp:greplace(StrT, "\\\"", "\\\\\""), io:format("#: ~s:~p~n#~~ msgid \"~s\"~n#~~ msgstr \"~s\"~n~n", [File, Line, StrQ, StrTQ]). diff --git a/doc/dev.html b/doc/dev.html index b86448c56..f54c522c0 100644 --- a/doc/dev.html +++ b/doc/dev.html @@ -2,7 +2,7 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> -Ejabberd 2.1.x Developers Guide +<TITLE>Ejabberd 2.1.11 Developers Guide @@ -49,7 +49,7 @@ TD P{margin:0px;}

-

Ejabberd 2.1.x Developers Guide

Alexey Shchepin
+

Ejabberd 2.1.11 Developers Guide

Alexey Shchepin
mailto:alexey@sevcom.net
xmpp:aleksey@jabber.ru

diff --git a/doc/features.html b/doc/features.html index 503ac0d3f..f6db139b6 100644 --- a/doc/features.html +++ b/doc/features.html @@ -2,7 +2,7 @@ "http://www.w3.org/TR/REC-html40/loose.dtd"> -Ejabberd 2.1.x Feature Sheet +<TITLE>Ejabberd 2.1.11 Feature Sheet @@ -50,7 +50,7 @@ SPAN{width:20%; float:right; text-align:left; margin-left:auto;}

-

Ejabberd 2.1.x Feature Sheet

Sander Devrieze
+

Ejabberd 2.1.11 Feature Sheet

Sander Devrieze
mailto:s.devrieze@pandora.be
xmpp:sander@devrieze.dyndns.org

diff --git a/doc/guide.html b/doc/guide.html index eaf999532..a9fe50e12 100644 --- a/doc/guide.html +++ b/doc/guide.html @@ -6,7 +6,7 @@ - ejabberd 2.1.x + ejabberd 2.1.11 Installation and Operation Guide @@ -76,7 +76,7 @@ BLOCKQUOTE.figure DIV.center DIV.center HR{display:none;}


- +
ejabberd 2.1.x
ejabberd 2.1.11
 
Installation and Operation Guide

@@ -109,7 +109,7 @@ BLOCKQUOTE.figure DIV.center DIV.center HR{display:none;}
  • 2.4.7  Specific Notes for Sun Solaris
  • 2.4.8  Specific Notes for Microsoft Windows
  • -
  • 2.5  Create a XMPP Account for Administration +
  • 2.5  Create an XMPP Account for Administration
  • 2.6  Upgrading ejabberd
  • Chapter 3  Configuring ejabberd @@ -348,7 +348,7 @@ as long as your system have all the dependencies.

  • GCC
  • Libexpat 1.95 or higher -
  • Erlang/OTP R10B-9 or higher. The recommended versions are R12B-5 and R13B04. +
  • Erlang/OTP R10B-9 or higher. The recommended versions are R13B04 and R14B04. Don’t use R14A or R14B because they have a bug.
  • OpenSSL 0.9.8 or higher, for STARTTLS, SASL and SSL encryption.
  • Zlib 1.2.3 or higher, for Stream Compression support (XEP-0138). Optional. @@ -513,16 +513,16 @@ variable. nmake -f Makefile.win32
  • Edit the file ejabberd\src\ejabberd.cfg and run
    werl -s ejabberd -name ejabberd
    -
  • -

    2.5  Create a XMPP Account for Administration

    You need a XMPP account and grant him administrative privileges +

    +

    2.5  Create an XMPP Account for Administration

    You need an XMPP account and grant him administrative privileges to enter the ejabberd Web Admin:

    1. -Register a XMPP account on your ejabberd server, for example admin1@example.org. -There are two ways to register a XMPP account: +Register an XMPP account on your ejabberd server, for example admin1@example.org. +There are two ways to register an XMPP account:
      1. Using ejabberdctl (see section 4.1):
        ejabberdctl register admin1 example.org FgT5bk3
        -
      2. Using a XMPP client and In-Band Registration (see section 3.3.19). +
      3. Using an XMPP client and In-Band Registration (see section 3.3.19).
    2. Edit the ejabberd configuration file to give administration rights to the XMPP account you created:
      {acl, admin, {user, "admin1", "example.org"}}.
      @@ -695,7 +695,7 @@ Handles STUN Binding requests as defined in
        Options: certfile
       
      ejabberd_http
      Handles incoming HTTP connections.
      - Options: captcha, certfile, http_bind, http_poll, + Options: captcha, certfile, default_host, http_bind, http_poll, request_handlers, tls, trusted_proxies, web_admin

      Options

      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 3.1.8).

      {certfile, Path}
      Full path to a file containing the default SSL certificate. To define a certificate file specific for a given domain, use the global option domain_certfile. +
      {default_host, undefined|HostName}
      +If the HTTP request received by ejabberd contains the HTTP header Host +with an ambiguous virtual host that doesn’t match any one defined in ejabberd (see 3.1.1), +then this configured HostName is set as the request Host. +The default value of this option is: undefined.
      {hosts, [Hostname, ...], [HostOption, ...]}
      The external Jabber component that connects to this ejabberd_service can serve one or more hostnames. @@ -1059,7 +1064,11 @@ The possible values match exactly the three possibilities described in XMPP Core: section 7.7.2.2. The default value is closeold. If the client uses old Jabber Non-SASL authentication (XEP-0078), -then this option is not respected, and the action performed is closeold.

      +then this option is not respected, and the action performed is closeold.

      The 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: +

      {fqdn, undefined|FqdnString}.

      Internal

      ejabberd uses its internal Mnesia database as the default authentication method. The value internal will enable the internal authentication method.

      The option {auth_password_format, plain|scram} @@ -1340,7 +1349,7 @@ using ImageMagick’s Convert program.

      The configurable options are:

      {captcha_cmd, Path}
      Full path to a script that generates the image. -The default value is an empty string: "" +The default value disables the feature: undefined
      {captcha_host, ProtocolHostPort}
      ProtocolHostPort is a string with the host, and optionally the Protocol and Port number. It must identify where ejabberd listens for CAPTCHA requests. @@ -1950,7 +1959,10 @@ all entries end with a comma: + + + @@ -1958,10 +1970,12 @@ all entries end with a comma: + - + + @@ -1980,6 +1994,8 @@ all entries end with a comma: + + @@ -1989,6 +2005,7 @@ all entries end with a comma: +
      ModuleFeatureDependencies
      mod_adhocAd-Hoc Commands (XEP-0050) 
      mod_announceManage announcementsrecommends mod_adhoc
      mod_announce_odbcManage announcementsrecommends mod_adhoc
        supported DB (*)
      mod_blockingSimple Communications Blocking (XEP-0191)mod_privacy
      mod_blocking_odbcSimple Communications Blocking (XEP-0191)mod_privacy_odbc
      mod_capsEntity Capabilities (XEP-0115) 
      mod_configureServer configuration using Ad-Hocmod_adhoc
      mod_discoService Discovery (XEP-0030) 
      mod_http_bindXMPP over Bosh service (HTTP Binding) 
      mod_http_fileserverSmall HTTP file server 
      mod_ircIRC transport 
      mod_irc_odbcIRC transportsupported DB (*)
      mod_lastLast Activity (XEP-0012) 
      mod_last_odbcLast Activity (XEP-0012)supported DB (*)
      mod_mucMulti-User Chat (XEP-0045) 
      mod_muc_logMulti-User Chat room loggingmod_muc
      mod_muc_odbcMulti-User Chat (XEP-0045)supported DB (*)
      mod_muc_logMulti-User Chat room loggingmod_muc or mod_muc_odbc
      mod_offlineOffline message storage (XEP-0160) 
      mod_offline_odbcOffline message storage (XEP-0160)supported DB (*)
      mod_pingXMPP Ping and periodic keepalives (XEP-0199) 
      mod_service_logCopy user messages to logger service 
      mod_shared_rosterShared roster managementmod_roster or
        mod_roster_odbc
      mod_shared_roster_odbcShared roster managementsupported DB (*) and
        mod_roster or mod_roster_odbc
      mod_shared_roster_ldapLDAP Shared roster managementmod_roster or
        mod_roster_odbc
      mod_sicServer IP Check (XEP-0279) 
      mod_vcard_ldapvcard-temp (XEP-0054)LDAP server
      mod_vcard_odbcvcard-temp (XEP-0054)supported DB (*)
      mod_vcard_xupdatevCard-Based Avatars (XEP-0153)mod_vcard or mod_vcard_odbc
      mod_vcard_xupdate_odbcvCard-Based Avatars (XEP-0153)mod_vcard or mod_vcard_odbc
      mod_versionSoftware Version (XEP-0092) 

    • @@ -2010,10 +2027,16 @@ Last connection date and time: Use mod_last_odbc instead of
    • Offline messages: Use mod_offline_odbc instead of mod_offline.
    • Rosters: Use mod_roster_odbc instead of mod_roster. +
    • Shared Rosters: Use mod_shared_roster_odbc instead of mod_shared_roster.
    • Users’ VCARD: Use mod_vcard_odbc instead of mod_vcard. +
    • vCard-Based Avatars: Use mod_vcard_xupdate_odbc instead of mod_vcard_xupdate.
    • Private XML storage: Use mod_private_odbc instead of mod_private.
    • User rules for blocking communications: Use mod_privacy_odbc instead of mod_privacy. +
    • Simple Communications Blocking: Use mod_blocking_odbc instead of mod_blocking.
    • Pub-Sub nodes, items and subscriptions: Use mod_pubsub_odbc instead of mod_pubsub. +
    • Multi-user chats: Use mod_muc_odbc instead of mod_muc. +
    • Manage announcements: Use mod_announce_odbc instead of mod_announce. +
    • IRC transport: Use mod_irc_odbc instead of mod_irc.

    You can find more contributed modules on the ejabberd website. Please remember that these contributions might not work or @@ -2526,7 +2549,7 @@ discarded. A good value for this option is 4 seconds.

    {default_room_options, [ {OptionName, OptionValue}, ...]}
    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 -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:
    {allow_change_subj, true|false}
    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 is only useful if Roster Versioning is enabled. This option is disabled by default. -Important: if you use mod_shared_roster or mod_shared_roster_ldap, +Important: if you use mod_shared_roster, mod_shared_roster_odbc or mod_shared_roster_ldap, you must disable this option.

    This example configuration enables Roster Versioning with storage of current id:

    {modules,
    @@ -4146,7 +4169,7 @@ the environment variable EJABBERD_DOC_PATH.
     See section 4.1.2.

    4.4  Ad-hoc Commands

    If you enable mod_configure and mod_adhoc, you can perform several administrative tasks in ejabberd -with a XMPP client. +with an XMPP client. The client must support Ad-Hoc Commands (XEP-0050), and you must login in the XMPP server with an account with proper privileges.

    @@ -4467,6 +4490,7 @@ Alexey Shchepin (xmpp:aleksey@jabber.ru
  • Badlop (xmpp:badlop@jabberes.org)
  • Evgeniy Khramtsov (xmpp:xram@jabber.ru)
  • Florian Zumbiehl (xmpp:florz@florz.de) +
  • Ludovic Bocquet (xmpp:lbocquet@jabber.org)
  • Marcin Owsiany (xmpp:marcin.owsiany@gmail.com)
  • Michael Grigutsch (xmpp:migri@jabber.i-pobox.net)
  • Mickael Remond (xmpp:mremond@process-one.net) diff --git a/doc/guide.tex b/doc/guide.tex index 4da4f977d..e0adca8ab 100644 --- a/doc/guide.tex +++ b/doc/guide.tex @@ -66,7 +66,9 @@ \newcommand{\module}[1]{\texttt{#1}} \newcommand{\modadhoc}{\module{mod\_adhoc}} \newcommand{\modannounce}{\module{mod\_announce}} +\newcommand{\modannounceodbc}{\module{mod\_announce\_odbc}} \newcommand{\modblocking}{\module{mod\_blocking}} +\newcommand{\modblockingodbc}{\module{mod\_blocking\_odbc}} \newcommand{\modcaps}{\module{mod\_caps}} \newcommand{\modconfigure}{\module{mod\_configure}} \newcommand{\moddisco}{\module{mod\_disco}} @@ -74,9 +76,11 @@ \newcommand{\modhttpbind}{\module{mod\_http\_bind}} \newcommand{\modhttpfileserver}{\module{mod\_http\_fileserver}} \newcommand{\modirc}{\module{mod\_irc}} +\newcommand{\modircodbc}{\module{mod\_irc\_odbc}} \newcommand{\modlast}{\module{mod\_last}} \newcommand{\modlastodbc}{\module{mod\_last\_odbc}} \newcommand{\modmuc}{\module{mod\_muc}} +\newcommand{\modmucodbc}{\module{mod\_muc\_odbc}} \newcommand{\modmuclog}{\module{mod\_muc\_log}} \newcommand{\modoffline}{\module{mod\_offline}} \newcommand{\modofflineodbc}{\module{mod\_offline\_odbc}} @@ -95,6 +99,7 @@ \newcommand{\modrosterodbc}{\module{mod\_roster\_odbc}} \newcommand{\modservicelog}{\module{mod\_service\_log}} \newcommand{\modsharedroster}{\module{mod\_shared\_roster}} +\newcommand{\modsharedrosterodbc}{\module{mod\_shared\_roster\_odbc}} \newcommand{\modsharedrosterldap}{\module{mod\_shared\_roster\_ldap}} \newcommand{\modsic}{\module{mod\_sic}} \newcommand{\modstats}{\module{mod\_stats}} @@ -103,6 +108,7 @@ \newcommand{\modvcardldap}{\module{mod\_vcard\_ldap}} \newcommand{\modvcardodbc}{\module{mod\_vcard\_odbc}} \newcommand{\modvcardxupdate}{\module{mod\_vcard\_xupdate}} +\newcommand{\modvcardxupdateodbc}{\module{mod\_vcard\_xupdate\_odbc}} \newcommand{\modversion}{\module{mod\_version}} %% Contributed modules @@ -1234,6 +1240,12 @@ The default value is \term{closeold}. If the client uses old Jabber Non-SASL authentication (\xepref{0078}), 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} \ind{internal authentication}\ind{Mnesia} @@ -2581,7 +2593,10 @@ The following table lists all modules included in \ejabberd{}. \hline \hline \modadhoc{} & Ad-Hoc Commands (\xepref{0050}) & \\ \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 \modblockingodbc{} & Simple Communications Blocking (\xepref{0191}) & \modprivacyodbc{} \\ \hline \modcaps{} & Entity Capabilities (\xepref{0115}) & \\ \hline \modconfigure{} & Server configuration using Ad-Hoc & \modadhoc{} \\ \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{modhttpfileserver}{\modhttpfileserver{}} & Small HTTP file server & \\ \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}{\modlastodbc{}} & Last Activity (\xepref{0012}) & supported DB (*) \\ \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}{\modofflineodbc{}} & Offline message storage (\xepref{0160}) & supported DB (*) \\ \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{modsharedroster}{\modsharedroster{}} & Shared roster management & \modroster{} or \\ & & \modrosterodbc\\ + \hline \ahrefloc{modsharedroster}{\modsharedrosterodbc{}} & Shared roster management & supported DB (*) and\\ + & & \modroster{} or \modrosterodbc\\ \hline \ahrefloc{modsharedrosterldap}{\modsharedrosterldap{}} & LDAP Shared roster management & \modroster{} or \\ & & \modrosterodbc\\ \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{modvcard}{\modvcardodbc{}} & vcard-temp (\xepref{0054}) & supported DB (*) \\ \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 \end{tabular} @@ -2650,10 +2670,16 @@ database for the following data: \item Offline messages: Use \term{mod\_offline\_odbc} instead of \term{mod\_offline}. \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 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 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 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} You can find more @@ -4052,7 +4078,7 @@ Options: This option does not affect the client in any way. This option is only useful if Roster Versioning is enabled. 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. \end{description} diff --git a/doc/release_notes_2.1.11.txt b/doc/release_notes_2.1.11.txt new file mode 100644 index 000000000..44d15f0b2 --- /dev/null +++ b/doc/release_notes_2.1.11.txt @@ -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/ diff --git a/doc/version.tex b/doc/version.tex index 905ac86f2..f39b1406c 100644 --- a/doc/version.tex +++ b/doc/version.tex @@ -1,2 +1,2 @@ % ejabberd version (automatically generated). -\newcommand{\version}{2.1.x} +\newcommand{\version}{2.1.11} diff --git a/src/Makefile.win32 b/src/Makefile.win32 index 1fe4c6ecf..8a1192fce 100644 --- a/src/Makefile.win32 +++ b/src/Makefile.win32 @@ -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 $(DLL) : $(OBJECT) - $(LD) $(LD_FLAGS) -out:$(DLL) $(OBJECT) + $(LD) $(LD_FLAGS) -out:$@ $< $(OBJECT) : $(SOURCE) - $(CC) $(CC_FLAGS) -c -Fo$(OBJECT) $(SOURCE) + $(CC) $(CC_FLAGS) -c -Fo$@ $< diff --git a/src/acl.erl b/src/acl.erl index 835577863..dd7c441de 100644 --- a/src/acl.erl +++ b/src/acl.erl @@ -181,9 +181,11 @@ match_acl(ACL, JID, Host) -> lists:member(Server, ?MYHOSTS))) andalso is_regexp_match(User, UR); {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} -> - 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} -> (S == Server) andalso is_regexp_match(User, UR); @@ -238,4 +240,10 @@ is_regexp_match(String, RegExp) -> is_glob_match(String, 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. diff --git a/src/cache_tab.erl b/src/cache_tab.erl index b867b7a21..e74062543 100644 --- a/src/cache_tab.erl +++ b/src/cache_tab.erl @@ -380,7 +380,12 @@ do_setopts(#state{procs_num = N} = State, Opts) -> shrink_size = ShrinkSize}. 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) -> N = erlang:phash2(Term, get_proc_num()) + 1, diff --git a/src/cyrsasl_digest.erl b/src/cyrsasl_digest.erl index 99c8e2a0e..134a86daf 100644 --- a/src/cyrsasl_digest.erl +++ b/src/cyrsasl_digest.erl @@ -37,9 +37,11 @@ -behaviour(cyrsasl). -record(state, {step, nonce, username, authzid, get_password, check_password, auth_module, - host}). + host, hostfqdn}). 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). stop() -> @@ -49,6 +51,7 @@ mech_new(Host, GetPassword, _CheckPassword, CheckPasswordDigest) -> {ok, #state{step = 1, nonce = randoms:get_string(), host = Host, + hostfqdn = get_local_fqdn(), get_password = GetPassword, check_password = CheckPasswordDigest}}. @@ -64,10 +67,11 @@ mech_step(#state{step = 3, nonce = Nonce} = State, ClientIn) -> KeyVals -> DigestURI = xml:get_attr_s("digest-uri", 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 -> ?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}; true -> AuthzId = xml:get_attr_s("authzid", KeyVals), @@ -154,21 +158,35 @@ parse4([], Key, Val, Ts) -> %% however ejabberd doesn't allow that. %% If the service (for example jabber.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 -%% In that case, ejabberd only checks the service name, not the host. -is_digesturi_valid(DigestURICase, JabberHost) -> +%% then acceptable digest-uris would be: +%% xmpp/server3.example.org/jabber.example.org, xmpp/server3.example.org and +%% 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), case catch string:tokens(DigestURI, "/") of - ["xmpp", Host] when Host == JabberHost -> + ["xmpp", Host] when (Host == JabberDomain) or (Host == JabberFQDN) -> true; - ["xmpp", _Host, ServName] when ServName == JabberHost -> + ["xmpp", Host, ServName] when (ServName == JabberDomain) and (Host == JabberFQDN) -> true; _ -> false 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) -> D + 48; diff --git a/src/ejabberd.app b/src/ejabberd.app index 1534a2dbd..44581b43f 100644 --- a/src/ejabberd.app +++ b/src/ejabberd.app @@ -2,7 +2,7 @@ {application, ejabberd, [{description, "ejabberd"}, - {vsn, "2.2.10"}, + {vsn, "2.2.11"}, {modules, [acl, adhoc, configure, diff --git a/src/ejabberd.cfg.example b/src/ejabberd.cfg.example index 57eab41bd..a4068ad96 100644 --- a/src/ejabberd.cfg.example +++ b/src/ejabberd.cfg.example @@ -222,6 +222,9 @@ %% Store the plain passwords or hashed for SCRAM: %%{auth_password_format, plain}. %%{auth_password_format, scram}. +%% +%% Define the FQDN if ejabberd doesn't detect it: +%%{fqdn, "server3.example.com"}. %% %% Authentication using external script diff --git a/src/ejabberd_admin.erl b/src/ejabberd_admin.erl index 22f86b373..980d85aed 100644 --- a/src/ejabberd_admin.erl +++ b/src/ejabberd_admin.erl @@ -88,6 +88,10 @@ commands() -> args = [], result = {res, rescode}}, #ejabberd_commands{name = stop_kindly, tags = [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, args = [{delay, integer}, {announcement, string}], result = {res, rescode}}, @@ -316,7 +320,7 @@ stop_kindly(DelaySeconds, AnnouncementText) -> - TimestampStart, io:format("[~p/~p ~ps] ~s... ", [NumberThis, NumberLast, SecondsDiff, Desc]), - Result = apply(Mod, Func, Args), + Result = (catch apply(Mod, Func, Args)), io:format("~p~n", [Result]), NumberThis+1 end, diff --git a/src/ejabberd_captcha.erl b/src/ejabberd_captcha.erl index 6d7e8ba52..56d62e09c 100644 --- a/src/ejabberd_captcha.erl +++ b/src/ejabberd_captcha.erl @@ -270,7 +270,7 @@ process(_Handlers, #request{method='POST', q=Q, lang=Lang, path=[_, Id]}) -> Form = {xmlelement, "p", [], [{xmlcdata, - translate:translate(Lang, "The captcha is valid.") + translate:translate(Lang, "The CAPTCHA is valid.") }]}, ejabberd_web:make_xhtml([Form]); captcha_non_valid -> diff --git a/src/ejabberd_config.erl b/src/ejabberd_config.erl index e738334fd..d61a2c5dc 100644 --- a/src/ejabberd_config.erl +++ b/src/ejabberd_config.erl @@ -381,6 +381,9 @@ process_term(Term, State) -> State; {hosts, _Hosts} -> State; + {fqdn, HostFQDN} -> + ?DEBUG("FQDN set to: ~p", [HostFQDN]), + add_option(fqdn, HostFQDN, State); {host_config, Host, Terms} -> lists:foldl(fun(T, S) -> process_host_term(T, Host, S) end, State, Terms); diff --git a/src/ejabberd_listener.erl b/src/ejabberd_listener.erl index 6d824d85c..6b1e526f5 100644 --- a/src/ejabberd_listener.erl +++ b/src/ejabberd_listener.erl @@ -294,8 +294,8 @@ accept(ListenSocket, Module, Opts, Interval) -> CallMod:start(strip_frontend(Module), gen_tcp, Socket, Opts), accept(ListenSocket, Module, Opts, NewInterval); {error, Reason} -> - ?INFO_MSG("(~w) Failed TCP accept: ~w", - [ListenSocket, Reason]), + ?ERROR_MSG("(~w) Failed TCP accept: ~w", + [ListenSocket, Reason]), accept(ListenSocket, Module, Opts, NewInterval) end. diff --git a/src/ejabberd_update.erl b/src/ejabberd_update.erl index a878e9be4..7572d3da4 100644 --- a/src/ejabberd_update.erl +++ b/src/ejabberd_update.erl @@ -69,6 +69,7 @@ update(ModulesToUpdate) -> %% OTP R14B03 and older provided release_handler_1:eval_script/3 %% 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) -> case lists:member({eval_script, 5}, release_handler_1:module_info(exports)) of true -> @@ -143,6 +144,8 @@ build_script(Dir, UpdatedBeams) -> [{ejabberd, "", filename:join(Dir, "..")}]), case Check of 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("low level script: ~p~n", [LowLevelScript]), ?DEBUG("check: ~p~n", [Check]); diff --git a/src/ejabberd_zlib/Makefile.win32 b/src/ejabberd_zlib/Makefile.win32 index c13383fa8..0041df83c 100644 --- a/src/ejabberd_zlib/Makefile.win32 +++ b/src/ejabberd_zlib/Makefile.win32 @@ -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 $(DLL) : $(OBJECT) - $(LD) $(LD_FLAGS) -out:$(DLL) $(OBJECT) + $(LD) $(LD_FLAGS) -out:$@ $< $(OBJECT) : $(SOURCE) - $(CC) $(CC_FLAGS) -c -Fo$(OBJECT) $(SOURCE) + $(CC) $(CC_FLAGS) -c -Fo$@ $< diff --git a/src/ejd2odbc.erl b/src/ejd2odbc.erl index 8daea9c6c..a2331137e 100644 --- a/src/ejd2odbc.erl +++ b/src/ejd2odbc.erl @@ -34,15 +34,26 @@ export_last/2, export_vcard/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("jlib.hrl"). -include("mod_roster.hrl"). +-include("mod_privacy.hrl"). -record(offline_msg, {us, timestamp, expire, from, to, packet}). -record(last_activity, {us, timestamp, status}). -record(vcard, {us, vcard}). +-record(vcard_xupdate, {us, hash}). -record(vcard_search, {us, user, luser, fn, lfn, @@ -58,6 +69,13 @@ orgunit, lorgunit }). -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). @@ -250,6 +268,20 @@ export_vcard_search(Server, Output) -> [] 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_common( Server, private_storage, Output, @@ -265,6 +297,167 @@ export_private_storage(Server, Output) -> [] 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 %%%---------------------------------------------------------------------- @@ -363,3 +556,8 @@ groups_to_string(#roster{usj = {User, _Server, JID}, "'", Username, "'," "'", SJID, "'," "'", ejabberd_odbc:escape(Group), "')"] || Group <- Groups]. + +get_id() -> + ID = get(id), + put(id, ID+1), + ID+1. diff --git a/src/eldap/eldap.erl b/src/eldap/eldap.erl index 354ab297e..265845e90 100644 --- a/src/eldap/eldap.erl +++ b/src/eldap/eldap.erl @@ -439,6 +439,7 @@ init([]) -> end; init({Hosts, Port, Rootdn, Passwd, Opts}) -> catch ssl:start(), + %% ssl:seed was removed in OTP R14B04, newer Dialyzer will complain catch ssl:seed(randoms:get_string()), Encrypt = case proplists:get_value(encrypt, Opts) of tls -> tls; diff --git a/src/mod_announce_odbc.erl b/src/mod_announce_odbc.erl new file mode 100644 index 000000000..101f8aae2 --- /dev/null +++ b/src/mod_announce_odbc.erl @@ -0,0 +1,885 @@ +%%%---------------------------------------------------------------------- +%%% File : mod_announce_odbc.erl +%%% Author : Alexey Shchepin +%%% Purpose : Manage announce messages +%%% Created : 11 Aug 2003 by Alexey Shchepin +%%% +%%% +%%% 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 + %% 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 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). diff --git a/src/mod_blocking_odbc.erl b/src/mod_blocking_odbc.erl new file mode 100644 index 000000000..016e7945e --- /dev/null +++ b/src/mod_blocking_odbc.erl @@ -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 +%%% +%%% +%%% 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. diff --git a/src/mod_caps.erl b/src/mod_caps.erl index b28ff56a9..c56ebc2eb 100644 --- a/src/mod_caps.erl +++ b/src/mod_caps.erl @@ -381,6 +381,10 @@ feature_request(Host, From, Caps, [SubNode | Tail] = SubNodes) -> [{"xmlns", ?NS_DISCO_INFO}, {"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) -> feature_response( IQReply, Host, From, Caps, SubNodes) @@ -411,19 +415,11 @@ feature_response(#iq{type = result, caps_features, BinaryNode, BinaryFeatures, caps_write_fun(BinaryNode, BinaryFeatures)); false -> - %% We cache current timestamp and will probe the client - %% after BAD_HASH_LIFETIME seconds. - cache_tab:insert(caps_features, BinaryNode, now_ts(), - caps_write_fun(BinaryNode, now_ts())) + ok end, feature_request(Host, From, Caps, SubNodes); -feature_response(_IQResult, Host, From, Caps, [SubNode | SubNodes]) -> - %% 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_response(_IQResult, Host, From, Caps, [_SubNode | SubNodes]) -> + %% We got type=error or invalid type=result stanza or timeout. feature_request(Host, From, Caps, SubNodes). node_to_binary(Node, SubNode) -> diff --git a/src/mod_irc/Makefile.win32 b/src/mod_irc/Makefile.win32 index 9c22f43f1..70b71e7d6 100644 --- a/src/mod_irc/Makefile.win32 +++ b/src/mod_irc/Makefile.win32 @@ -4,7 +4,7 @@ include ..\Makefile.inc EFLAGS = -I .. -pz .. 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 OBJECT = iconv_erl.o @@ -25,6 +25,9 @@ $(OUTDIR)\iconv.beam : iconv.erl $(OUTDIR)\mod_irc.beam : 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 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 $(DLL) : $(OBJECT) - $(LD) $(LD_FLAGS) -out:$(DLL) $(OBJECT) + $(LD) $(LD_FLAGS) -out:$@ $< $(OBJECT) : $(SOURCE) - $(CC) $(CC_FLAGS) -c -Fo$(OBJECT) $(SOURCE) + $(CC) $(CC_FLAGS) -c -Fo$@ $< diff --git a/src/mod_irc/mod_irc.erl b/src/mod_irc/mod_irc.erl index d924deca2..f616a92fd 100644 --- a/src/mod_irc/mod_irc.erl +++ b/src/mod_irc/mod_irc.erl @@ -348,7 +348,8 @@ do_route1(Host, ServerHost, From, To, Packet) -> end, {ok, Pid} = mod_irc_connection:start( From, Host, ServerHost, Server, - ConnectionUsername, Encoding, Port, Password), + ConnectionUsername, Encoding, Port, + Password, ?MODULE), ets:insert( irc_connection, #irc_connection{jid_server_host = {From, Server, Host}, diff --git a/src/mod_irc/mod_irc_connection.erl b/src/mod_irc/mod_irc_connection.erl index 5e6725831..fcb5297ca 100644 --- a/src/mod_irc/mod_irc_connection.erl +++ b/src/mod_irc/mod_irc_connection.erl @@ -30,7 +30,7 @@ -behaviour(gen_fsm). %% 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 -export([init/1, @@ -51,7 +51,7 @@ -record(state, {socket, encoding, port, password, queue, user, host, server, nick, channels = dict:new(), - nickchannel, + nickchannel, mod, inbuf = "", outbuf = ""}). %-define(DBGFSM, true). @@ -65,13 +65,13 @@ %%%---------------------------------------------------------------------- %%% 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: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) -> - gen_fsm:start_link(?MODULE, [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, Mod], ?FSMOPTS). %%%---------------------------------------------------------------------- @@ -85,9 +85,10 @@ start_link(From, Host, Server, Username, Encoding, Port, Password) -> %% ignore | %% {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), {ok, open_socket, #state{queue = queue:new(), + mod = Mod, encoding = Encoding, port = Port, password = Password, @@ -205,6 +206,31 @@ code_change(_OldVsn, StateName, StateData, _Extra) -> StateData#state{outbuf = StateData#state.outbuf ++ S} 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 %% Returns: {next_state, NextStateName, NextStateData} | @@ -212,7 +238,7 @@ code_change(_OldVsn, StateName, StateData, _Extra) -> %% {stop, Reason, NewStateData} %%---------------------------------------------------------------------- handle_info({route_chan, Channel, Resource, - {xmlelement, "presence", Attrs, _Els}}, + {xmlelement, "presence", Attrs, _Els} = Presence}, StateName, StateData) -> NewStateData = case xml:get_attr_s("type", Attrs) of @@ -246,7 +272,12 @@ handle_info({route_chan, Channel, Resource, true -> 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 = dict:store(Channel, ?SETS:new(), S1#state.channels)} @@ -651,9 +682,9 @@ terminate(_Reason, _StateName, FullStateData) -> [{xmlcdata, "Server Connect Failed"}]}, FullStateData} end, - mod_irc:closed_connection(StateData#state.host, - StateData#state.user, - StateData#state.server), + (FullStateData#state.mod):closed_connection(StateData#state.host, + StateData#state.user, + StateData#state.server), bounce_messages("Server Connect Failed"), lists:foreach( fun(Chan) -> diff --git a/src/mod_irc/mod_irc_odbc.erl b/src/mod_irc/mod_irc_odbc.erl new file mode 100644 index 000000000..ab0fafe14 --- /dev/null +++ b/src/mod_irc/mod_irc_odbc.erl @@ -0,0 +1,1033 @@ +%%%---------------------------------------------------------------------- +%%% File : mod_irc_odbc.erl +%%% Author : Alexey Shchepin +%%% Purpose : IRC transport +%%% Created : 15 Feb 2003 by Alexey Shchepin +%%% +%%% +%%% 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_irc_odbc). +-author('alexey@process-one.net'). + +-behaviour(gen_server). +-behaviour(gen_mod). + +%% API +-export([start_link/2, + start/2, + stop/1, + closed_connection/3, + get_connection_params/3]). + +%% 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"). +-include("adhoc.hrl"). + +-define(DEFAULT_IRC_ENCODING, "iso8859-1"). +-define(DEFAULT_IRC_PORT, 6667). +-define(POSSIBLE_ENCODINGS, ["koi8-r", "iso8859-1", "iso8859-2", "utf-8", "utf-8+latin-1"]). + +-record(irc_connection, {jid_server_host, pid}). + +-record(state, {host, server_host, access}). + +-define(PROCNAME, ejabberd_mod_irc). + +%%==================================================================== +%% 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). + +%%==================================================================== +%% gen_server callbacks +%%==================================================================== + +%%-------------------------------------------------------------------- +%% Function: init(Args) -> {ok, State} | +%% {ok, State, Timeout} | +%% ignore | +%% {stop, Reason} +%% Description: Initiates the server +%%-------------------------------------------------------------------- +init([Host, Opts]) -> + iconv:start(), + MyHost = gen_mod:get_opt_host(Host, Opts, "irc.@HOST@"), + Access = gen_mod:get_opt(access, Opts, all), + catch ets:new(irc_connection, [named_table, + public, + {keypos, #irc_connection.jid_server_host}]), + ejabberd_router:register_route(MyHost), + {ok, #state{host = MyHost, + server_host = Host, + access = Access}}. + +%%-------------------------------------------------------------------- +%% 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}. + +%%-------------------------------------------------------------------- +%% 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} = State) -> + case catch do_route(Host, ServerHost, Access, From, To, Packet) of + {'EXIT', Reason} -> + ?ERROR_MSG("~p", [Reason]); + _ -> + ok + end, + {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_irc_sup), + ChildSpec = + {Proc, + {ejabberd_tmp_sup, start_link, + [Proc, mod_irc_connection]}, + permanent, + infinity, + supervisor, + [ejabberd_tmp_sup]}, + supervisor:start_child(ejabberd_sup, ChildSpec). + +stop_supervisor(Host) -> + Proc = gen_mod:get_module_proc(Host, ejabberd_mod_irc_sup), + supervisor:terminate_child(ejabberd_sup, Proc), + supervisor:delete_child(ejabberd_sup, Proc). + +do_route(Host, ServerHost, Access, From, To, Packet) -> + case acl:match_rule(ServerHost, Access, From) of + allow -> + do_route1(Host, ServerHost, From, To, Packet); + _ -> + {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(To, From, Err) + end. + +do_route1(Host, ServerHost, From, To, Packet) -> + #jid{user = ChanServ, resource = Resource} = To, + {xmlelement, _Name, _Attrs, _Els} = Packet, + case ChanServ of + "" -> + case Resource of + "" -> + case jlib:iq_query_info(Packet) of + #iq{type = get, xmlns = ?NS_DISCO_INFO = XMLNS, + sub_el = SubEl, lang = Lang} = IQ -> + Node = xml:get_tag_attr_s("node", SubEl), + Info = ejabberd_hooks:run_fold( + disco_info, ServerHost, [], + [ServerHost, ?MODULE, "", ""]), + case iq_disco(ServerHost, Node, Lang) of + [] -> + Res = IQ#iq{type = result, + sub_el = [{xmlelement, "query", + [{"xmlns", XMLNS}], + []}]}, + ejabberd_router:route(To, + From, + jlib:iq_to_xml(Res)); + DiscoInfo -> + Res = IQ#iq{type = result, + sub_el = [{xmlelement, "query", + [{"xmlns", XMLNS}], + DiscoInfo ++ Info}]}, + ejabberd_router:route(To, + From, + jlib:iq_to_xml(Res)) + end; + #iq{type = get, xmlns = ?NS_DISCO_ITEMS = XMLNS, + sub_el = SubEl, lang = Lang} = IQ -> + Node = xml:get_tag_attr_s("node", SubEl), + case Node of + [] -> + ResIQ = IQ#iq{type = result, + sub_el = [{xmlelement, "query", + [{"xmlns", XMLNS}], + []}]}, + Res = jlib:iq_to_xml(ResIQ); + "join" -> + ResIQ = IQ#iq{type = result, + sub_el = [{xmlelement, "query", + [{"xmlns", XMLNS}], + []}]}, + Res = jlib:iq_to_xml(ResIQ); + "register" -> + ResIQ = IQ#iq{type = result, + sub_el = [{xmlelement, "query", + [{"xmlns", XMLNS}], + []}]}, + Res = jlib:iq_to_xml(ResIQ); + ?NS_COMMANDS -> + ResIQ = IQ#iq{type = result, + sub_el = [{xmlelement, "query", + [{"xmlns", XMLNS}, + {"node", Node}], + command_items(ServerHost, + Host, Lang)}]}, + Res = jlib:iq_to_xml(ResIQ); + _ -> + Res = jlib:make_error_reply( + Packet, ?ERR_ITEM_NOT_FOUND) + end, + ejabberd_router:route(To, + From, + Res); + #iq{xmlns = ?NS_REGISTER} = IQ -> + process_register(ServerHost, Host, From, To, IQ); + #iq{type = get, xmlns = ?NS_VCARD = XMLNS, + lang = Lang} = 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 = set, xmlns = ?NS_COMMANDS, + lang = _Lang, sub_el = SubEl} = IQ -> + Request = adhoc:parse_request(IQ), + case lists:keysearch(Request#adhoc_request.node, + 1, commands(ServerHost)) of + {value, {_, _, Function}} -> + case catch Function(From, To, Request) of + {'EXIT', Reason} -> + ?ERROR_MSG("~p~nfor ad-hoc handler of ~p", + [Reason, {From, To, IQ}]), + Res = IQ#iq{type = error, sub_el = [SubEl, + ?ERR_INTERNAL_SERVER_ERROR]}; + ignore -> + Res = ignore; + {error, Error} -> + Res = IQ#iq{type = error, sub_el = [SubEl, Error]}; + Command -> + Res = IQ#iq{type = result, sub_el = [Command]} + end, + if Res /= ignore -> + ejabberd_router:route(To, From, jlib:iq_to_xml(Res)); + true -> + ok + end; + _ -> + Err = jlib:make_error_reply( + Packet, ?ERR_ITEM_NOT_FOUND), + ejabberd_router:route(To, From, Err) + end; + #iq{} = _IQ -> + Err = jlib:make_error_reply( + Packet, ?ERR_FEATURE_NOT_IMPLEMENTED), + ejabberd_router:route(To, From, Err); + _ -> + ok + end; + _ -> + Err = jlib:make_error_reply(Packet, ?ERR_BAD_REQUEST), + ejabberd_router:route(To, From, Err) + end; + _ -> + case string:tokens(ChanServ, "%") of + [[_ | _] = Channel, [_ | _] = Server] -> + case ets:lookup(irc_connection, {From, Server, Host}) of + [] -> + ?DEBUG("open new connection~n", []), + {Username, Encoding, Port, Password} = get_connection_params( + Host, ServerHost, From, Server), + ConnectionUsername = + case Packet of + %% If the user tries to join a + %% chatroom, the packet for sure + %% contains the desired username. + {xmlelement, "presence", _, _} -> + Resource; + %% Otherwise, there is no firm + %% conclusion from the packet. + %% Better to use the configured + %% username (which defaults to the + %% username part of the JID). + _ -> + Username + end, + {ok, Pid} = mod_irc_connection:start( + From, Host, ServerHost, Server, + ConnectionUsername, Encoding, Port, + Password, ?MODULE), + ets:insert( + irc_connection, + #irc_connection{jid_server_host = {From, Server, Host}, + pid = Pid}), + mod_irc_connection:route_chan( + Pid, Channel, Resource, Packet), + ok; + [R] -> + Pid = R#irc_connection.pid, + ?DEBUG("send to process ~p~n", + [Pid]), + mod_irc_connection:route_chan( + Pid, Channel, Resource, Packet), + ok + end; + _ -> + case string:tokens(ChanServ, "!") of + [[_ | _] = Nick, [_ | _] = Server] -> + case ets:lookup(irc_connection, {From, Server, Host}) of + [] -> + Err = jlib:make_error_reply( + Packet, ?ERR_SERVICE_UNAVAILABLE), + ejabberd_router:route(To, From, Err); + [R] -> + Pid = R#irc_connection.pid, + ?DEBUG("send to process ~p~n", + [Pid]), + mod_irc_connection:route_nick( + Pid, Nick, Packet), + ok + end; + _ -> + Err = jlib:make_error_reply( + Packet, ?ERR_BAD_REQUEST), + ejabberd_router:route(To, From, Err) + end + end + end. + + +closed_connection(Host, From, Server) -> + ets:delete(irc_connection, {From, Server, Host}). + + +iq_disco(_ServerHost, [], Lang) -> + [{xmlelement, "identity", + [{"category", "conference"}, + {"type", "irc"}, + {"name", translate:translate(Lang, "IRC Transport")}], []}, + {xmlelement, "feature", [{"var", ?NS_DISCO_INFO}], []}, + {xmlelement, "feature", [{"var", ?NS_MUC}], []}, + {xmlelement, "feature", [{"var", ?NS_REGISTER}], []}, + {xmlelement, "feature", [{"var", ?NS_VCARD}], []}, + {xmlelement, "feature", [{"var", ?NS_COMMANDS}], []}]; +iq_disco(ServerHost, Node, Lang) -> + case lists:keysearch(Node, 1, commands(ServerHost)) of + {value, {_, Name, _}} -> + [{xmlelement, "identity", + [{"category", "automation"}, + {"type", "command-node"}, + {"name", translate:translate(Lang, Name)}], []}, + {xmlelement, "feature", + [{"var", ?NS_COMMANDS}], []}, + {xmlelement, "feature", + [{"var", ?NS_XDATA}], []}]; + _ -> + [] + end. + +iq_get_vcard(Lang) -> + [{xmlelement, "FN", [], + [{xmlcdata, "ejabberd/mod_irc"}]}, + {xmlelement, "URL", [], + [{xmlcdata, ?EJABBERD_URI}]}, + {xmlelement, "DESC", [], + [{xmlcdata, translate:translate(Lang, "ejabberd IRC module") ++ + "\nCopyright (c) 2003-2012 ProcessOne"}]}]. + +command_items(ServerHost, Host, Lang) -> + lists:map(fun({Node, Name, _Function}) + -> {xmlelement, "item", + [{"jid", Host}, + {"node", Node}, + {"name", translate:translate(Lang, Name)}], []} + end, commands(ServerHost)). + +commands(ServerHost) -> + [{"join", "Join channel", fun adhoc_join/3}, + {"register", "Configure username, encoding, port and password", + fun(From, To, Request) -> + adhoc_register(ServerHost, From, To, Request) + end}]. + +process_register(ServerHost, Host, From, To, #iq{} = IQ) -> + case catch process_irc_register(ServerHost, Host, From, To, IQ) of + {'EXIT', Reason} -> + ?ERROR_MSG("~p", [Reason]); + ResIQ -> + if + ResIQ /= ignore -> + ejabberd_router:route(To, From, + jlib:iq_to_xml(ResIQ)); + true -> + ok + end + end. + +find_xdata_el({xmlelement, _Name, _Attrs, SubEls}) -> + find_xdata_el1(SubEls). + +find_xdata_el1([]) -> + false; + +find_xdata_el1([{xmlelement, Name, Attrs, SubEls} | Els]) -> + case xml:get_attr_s("xmlns", Attrs) of + ?NS_XDATA -> + {xmlelement, Name, Attrs, SubEls}; + _ -> + find_xdata_el1(Els) + end; + +find_xdata_el1([_ | Els]) -> + find_xdata_el1(Els). + +process_irc_register(ServerHost, Host, From, _To, + #iq{type = Type, xmlns = XMLNS, + lang = Lang, sub_el = SubEl} = IQ) -> + case Type of + set -> + XDataEl = find_xdata_el(SubEl), + case XDataEl of + false -> + IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ACCEPTABLE]}; + {xmlelement, _Name, Attrs, _SubEls} -> + case xml:get_attr_s("type", Attrs) of + "cancel" -> + IQ#iq{type = result, + sub_el = [{xmlelement, "query", + [{"xmlns", XMLNS}], []}]}; + "submit" -> + XData = jlib:parse_xdata_submit(XDataEl), + case XData of + invalid -> + IQ#iq{type = error, + sub_el = [SubEl, ?ERR_BAD_REQUEST]}; + _ -> + Node = string:tokens( + xml:get_tag_attr_s("node", SubEl), + "/"), + case set_form( + ServerHost, Host, From, + Node, Lang, XData) of + {result, Res} -> + IQ#iq{type = result, + sub_el = [{xmlelement, "query", + [{"xmlns", XMLNS}], + Res + }]}; + {error, Error} -> + IQ#iq{type = error, + sub_el = [SubEl, Error]} + end + end; + _ -> + IQ#iq{type = error, + sub_el = [SubEl, ?ERR_BAD_REQUEST]} + end + end; + get -> + Node = + string:tokens(xml:get_tag_attr_s("node", SubEl), "/"), + case get_form(ServerHost, Host, From, Node, Lang) of + {result, Res} -> + IQ#iq{type = result, + sub_el = [{xmlelement, "query", + [{"xmlns", XMLNS}], + Res + }]}; + {error, Error} -> + IQ#iq{type = error, + sub_el = [SubEl, Error]} + end + end. + + + +get_form(ServerHost, Host, From, [], Lang) -> + #jid{user = User, server = Server} = From, + LServer = jlib:nameprep(ServerHost), + SJID = ejabberd_odbc:escape( + jlib:jid_to_string( + jlib:jid_tolower( + jlib:jid_remove_resource(From)))), + SHost = ejabberd_odbc:escape(Host), + DefaultEncoding = get_default_encoding(Host), + Customs = + case catch ejabberd_odbc:sql_query( + LServer, + ["select data from irc_custom where " + "jid='", SJID, "' and host='", SHost, "';"]) of + {selected, ["data"], [{SData}]} -> + Data = ejabberd_odbc:decode_term(SData), + {xml:get_attr_s(username, Data), + xml:get_attr_s(connections_params, Data)}; + {'EXIT', _} -> + {error, ?ERR_INTERNAL_SERVER_ERROR}; + {selected, _, _} -> + {User, []} + end, + case Customs of + {error, _Error} -> + Customs; + {Username, ConnectionsParams} -> + {result, + [{xmlelement, "instructions", [], + [{xmlcdata, + translate:translate( + Lang, + "You need an x:data capable client " + "to configure mod_irc settings")}]}, + {xmlelement, "x", [{"xmlns", ?NS_XDATA}], + [{xmlelement, "title", [], + [{xmlcdata, + translate:translate( + Lang, + "Registration in mod_irc for ") ++ User ++ "@" ++ Server}]}, + {xmlelement, "instructions", [], + [{xmlcdata, + translate:translate( + Lang, + "Enter username, encodings, ports and passwords you wish to use for " + "connecting to IRC servers")}]}, + {xmlelement, "field", [{"type", "text-single"}, + {"label", + translate:translate( + Lang, "IRC Username")}, + {"var", "username"}], + [{xmlelement, "value", [], [{xmlcdata, Username}]}]}, + {xmlelement, "field", [{"type", "fixed"}], + [{xmlelement, "value", [], + [{xmlcdata, + lists:flatten( + io_lib:format( + translate:translate( + Lang, + "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."), + [DefaultEncoding, ?DEFAULT_IRC_PORT]))}]}]}, + {xmlelement, "field", [{"type", "fixed"}], + [{xmlelement, "value", [], + [{xmlcdata, + translate:translate( + Lang, + "Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, " + "{\"vendetta.fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." + )}]}]}, + {xmlelement, "field", [{"type", "text-multi"}, + {"label", + translate:translate(Lang, "Connections parameters")}, + {"var", "connections_params"}], + lists:map( + fun(S) -> + {xmlelement, "value", [], [{xmlcdata, S}]} + end, + string:tokens( + lists:flatten( + io_lib:format("~p.", [ConnectionsParams])), + "\n")) + } + ]}]} + end; + +get_form(_ServerHost, _Host, _, _, _Lang) -> + {error, ?ERR_SERVICE_UNAVAILABLE}. + + + + +set_form(ServerHost, Host, From, [], _Lang, XData) -> + LServer = jlib:nameprep(ServerHost), + SJID = ejabberd_odbc:escape( + jlib:jid_to_string( + jlib:jid_tolower( + jlib:jid_remove_resource(From)))), + SHost = ejabberd_odbc:escape(Host), + case {lists:keysearch("username", 1, XData), + lists:keysearch("connections_params", 1, XData)} of + {{value, {_, [Username]}}, {value, {_, Strings}}} -> + EncString = lists:foldl(fun(S, Res) -> + Res ++ S ++ "\n" + end, "", Strings), + case erl_scan:string(EncString) of + {ok, Tokens, _} -> + case erl_parse:parse_term(Tokens) of + {ok, ConnectionsParams} -> + SData = ejabberd_odbc:encode_term( + [{username, + Username}, + {connections_params, + ConnectionsParams}]), + case ejabberd_odbc:sql_transaction( + LServer, + fun() -> + odbc_queries:update_t( + "irc_custom", + ["jid", "host", "data"], + [SJID, SHost, SData], + ["jid='", SJID, + "' and host='", + SHost, "'"]), + ok + end) of + {atomic, _} -> + {result, []}; + _ -> + {error, ?ERR_NOT_ACCEPTABLE} + end; + _ -> + {error, ?ERR_NOT_ACCEPTABLE} + end; + _ -> + {error, ?ERR_NOT_ACCEPTABLE} + end; + _ -> + {error, ?ERR_NOT_ACCEPTABLE} + end; + + +set_form(_ServerHost, _Host, _, _, _Lang, _XData) -> + {error, ?ERR_SERVICE_UNAVAILABLE}. + + +%% Host = "irc.example.com" +%% ServerHost = "example.com" +get_connection_params(Host, From, IRCServer) -> + [_ | HostTail] = string:tokens(Host, "."), + ServerHost = string:join(HostTail, "."), + get_connection_params(Host, ServerHost, From, IRCServer). + +get_default_encoding(ServerHost) -> + Result = gen_mod:get_module_opt( + ServerHost, ?MODULE, default_encoding, + ?DEFAULT_IRC_ENCODING), + ?INFO_MSG("The default_encoding configured for host ~p is: ~p~n", [ServerHost, Result]), + Result. + +get_connection_params(Host, ServerHost, From, IRCServer) -> + #jid{user = User, server = _Server} = From, + LServer = jlib:nameprep(ServerHost), + SJID = ejabberd_odbc:escape( + jlib:jid_to_string( + jlib:jid_tolower( + jlib:jid_remove_resource(From)))), + SHost = ejabberd_odbc:escape(Host), + DefaultEncoding = get_default_encoding(ServerHost), + case catch ejabberd_odbc:sql_query( + LServer, + ["select data from irc_custom where " + "jid='", SJID, "' and host='", SHost, "';"]) of + {'EXIT', _Reason} -> + {User, DefaultEncoding, ?DEFAULT_IRC_PORT, ""}; + {selected, ["data"], []} -> + {User, DefaultEncoding, ?DEFAULT_IRC_PORT, ""}; + {selected, ["data"], [{SData}]} -> + Data = ejabberd_odbc:decode_term(SData), + Username = xml:get_attr_s(username, Data), + {NewUsername, NewEncoding, NewPort, NewPassword} = + case lists:keysearch( + IRCServer, 1, + xml:get_attr_s(connections_params, Data)) of + {value, {_, Encoding, Port, Password}} -> + {Username, Encoding, Port, Password}; + {value, {_, Encoding, Port}} -> + {Username, Encoding, Port, ""}; + {value, {_, Encoding}} -> + {Username, Encoding, ?DEFAULT_IRC_PORT, ""}; + _ -> + {Username, DefaultEncoding, ?DEFAULT_IRC_PORT, ""} + end, + {NewUsername, + NewEncoding, + if + NewPort >= 0 andalso NewPort =< 65535 -> + NewPort; + true -> + ?DEFAULT_IRC_PORT + end, + NewPassword} + end. + +adhoc_join(_From, _To, #adhoc_request{action = "cancel"} = Request) -> + adhoc:produce_response(Request, + #adhoc_response{status = canceled}); +adhoc_join(From, To, #adhoc_request{lang = Lang, + node = _Node, + action = _Action, + xdata = XData} = Request) -> + %% Access control has already been taken care of in do_route. + if XData == false -> + Form = + {xmlelement, "x", + [{"xmlns", ?NS_XDATA}, + {"type", "form"}], + [{xmlelement, "title", [], [{xmlcdata, translate:translate(Lang, "Join IRC channel")}]}, + {xmlelement, "field", + [{"var", "channel"}, + {"type", "text-single"}, + {"label", translate:translate(Lang, "IRC channel (don't put the first #)")}], + [{xmlelement, "required", [], []}]}, + {xmlelement, "field", + [{"var", "server"}, + {"type", "text-single"}, + {"label", translate:translate(Lang, "IRC server")}], + [{xmlelement, "required", [], []}]}]}, + adhoc:produce_response(Request, + #adhoc_response{status = executing, + elements = [Form]}); + true -> + case jlib:parse_xdata_submit(XData) of + invalid -> + {error, ?ERR_BAD_REQUEST}; + Fields -> + Channel = case lists:keysearch("channel", 1, Fields) of + {value, {"channel", C}} -> + C; + _ -> + false + end, + Server = case lists:keysearch("server", 1, Fields) of + {value, {"server", S}} -> + S; + _ -> + false + end, + if Channel /= false, + Server /= false -> + RoomJID = Channel ++ "%" ++ Server ++ "@" ++ To#jid.server, + Invite = {xmlelement, "message", [], + [{xmlelement, "x", + [{"xmlns", ?NS_MUC_USER}], + [{xmlelement, "invite", + [{"from", jlib:jid_to_string(From)}], + [{xmlelement, "reason", [], + [{xmlcdata, + translate:translate(Lang, + "Join the IRC channel here.")}]}]}]}, + {xmlelement, "x", + [{"xmlns", ?NS_XCONFERENCE}], + [{xmlcdata, translate:translate(Lang, + "Join the IRC channel here.")}]}, + {xmlelement, "body", [], + [{xmlcdata, io_lib:format( + translate:translate(Lang, + "Join the IRC channel in this Jabber ID: ~s"), + [RoomJID])}]}]}, + ejabberd_router:route(jlib:string_to_jid(RoomJID), From, Invite), + adhoc:produce_response(Request, #adhoc_response{status = completed}); + true -> + {error, ?ERR_BAD_REQUEST} + end + end + end. + +adhoc_register(_ServerHost, _From, _To, #adhoc_request{action = "cancel"} = Request) -> + adhoc:produce_response(Request, + #adhoc_response{status = canceled}); +adhoc_register(ServerHost, From, To, #adhoc_request{lang = Lang, + node = _Node, + xdata = XData, + action = Action} = Request) -> + #jid{user = User} = From, + #jid{lserver = Host} = To, + LServer = jlib:nameprep(ServerHost), + SHost = ejabberd_odbc:escape(Host), + SJID = ejabberd_odbc:escape( + jlib:jid_to_string( + jlib:jid_tolower( + jlib:jid_remove_resource(From)))), + %% Generate form for setting username and encodings. If the user + %% hasn't begun to fill out the form, generate an initial form + %% based on current values. + if XData == false -> + case catch ejabberd_odbc:sql_query( + LServer, + ["select data from irc_custom where " + "jid='", SJID, "' and host='", SHost, "';"]) of + {'EXIT', _Reason} -> + Username = User, + ConnectionsParams = []; + {selected, ["data"], []} -> + Username = User, + ConnectionsParams = []; + {selected, ["data"], [{Data1}]} -> + Data = ejabberd_odbc:decode_term(Data1), + Username = xml:get_attr_s(username, Data), + ConnectionsParams = xml:get_attr_s(connections_params, Data) + end, + Error = false; + true -> + case jlib:parse_xdata_submit(XData) of + invalid -> + Error = {error, ?ERR_BAD_REQUEST}, + Username = false, + ConnectionsParams = false; + Fields -> + Username = case lists:keysearch("username", 1, Fields) of + {value, {"username", U}} -> + U; + _ -> + User + end, + ConnectionsParams = parse_connections_params(Fields), + Error = false + end + end, + + if Error /= false -> + Error; + Action == "complete" -> + SData = ejabberd_odbc:encode_term( + [{username, Username}, + {connections_params, ConnectionsParams}]), + case catch ejabberd_odbc:sql_transaction( + LServer, + fun() -> + odbc_queries:update_t( + "irc_custom", + ["jid", "host", "data"], + [SJID, SHost, SData], + ["jid='", SJID, + "' and host='", SHost, "'"]), + ok + end) of + {atomic, ok} -> + adhoc:produce_response(Request, #adhoc_response{status = completed}); + _ -> + {error, ?ERR_INTERNAL_SERVER_ERROR} + end; + true -> + Form = generate_adhoc_register_form(Lang, Username, ConnectionsParams), + adhoc:produce_response(Request, + #adhoc_response{status = executing, + elements = [Form], + actions = ["next", "complete"]}) + end. + +generate_adhoc_register_form(Lang, Username, ConnectionsParams) -> + {xmlelement, "x", + [{"xmlns", ?NS_XDATA}, + {"type", "form"}], + [{xmlelement, "title", [], [{xmlcdata, translate:translate(Lang, "IRC settings")}]}, + {xmlelement, "instructions", [], + [{xmlcdata, + translate:translate( + Lang, + "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.")}]}, + {xmlelement, "field", + [{"var", "username"}, + {"type", "text-single"}, + {"label", translate:translate(Lang, "IRC username")}], + [{xmlelement, "required", [], []}, + {xmlelement, "value", [], [{xmlcdata, Username}]}]}] ++ + generate_connection_params_fields(Lang, ConnectionsParams, 1, [])}. + +generate_connection_params_fields(Lang, [], Number, Acc) -> + Field = generate_connection_params_field(Lang, "", "", -1, "", Number), + lists:reverse(Field ++ Acc); + +generate_connection_params_fields(Lang, [ConnectionParams | ConnectionsParams], Number, Acc) -> + case ConnectionParams of + {Server, Encoding, Port, Password} -> + Field = generate_connection_params_field(Lang, Server, Encoding, Port, Password, Number), + generate_connection_params_fields(Lang, ConnectionsParams, Number + 1, Field ++ Acc); + {Server, Encoding, Port} -> + Field = generate_connection_params_field(Lang, Server, Encoding, Port, [], Number), + generate_connection_params_fields(Lang, ConnectionsParams, Number + 1, Field ++ Acc); + {Server, Encoding} -> + Field = generate_connection_params_field(Lang, Server, Encoding, [], [], Number), + generate_connection_params_fields(Lang, ConnectionsParams, Number + 1, Field ++ Acc); + _ -> + [] + end. + +generate_connection_params_field(Lang, Server, Encoding, Port, Password, Number) -> + EncodingUsed = case Encoding of + [] -> + get_default_encoding(Server); + _ -> + Encoding + end, + PortUsedInt = if + Port >= 0 andalso Port =< 65535 -> + Port; + true -> + ?DEFAULT_IRC_PORT + end, + PortUsed = integer_to_list(PortUsedInt), + PasswordUsed = case Password of + [] -> + ""; + _ -> + Password + end, + NumberString = integer_to_list(Number), + %% Fields are in reverse order, as they will be reversed again later. + [{xmlelement, "field", + [{"var", "password" ++ NumberString}, + {"type", "text-single"}, + {"label", io_lib:format(translate:translate(Lang, "Password ~b"), [Number])}], + [{xmlelement, "value", [], [{xmlcdata, PasswordUsed}]}]}, + {xmlelement, "field", + [{"var", "port" ++ NumberString}, + {"type", "text-single"}, + {"label", io_lib:format(translate:translate(Lang, "Port ~b"), [Number])}], + [{xmlelement, "value", [], [{xmlcdata, PortUsed}]}]}, + {xmlelement, "field", + [{"var", "encoding" ++ NumberString}, + {"type", "list-single"}, + {"label", io_lib:format(translate:translate(Lang, "Encoding for server ~b"), [Number])}], + [{xmlelement, "value", [], [{xmlcdata, EncodingUsed}]} | + lists:map(fun(E) -> + {xmlelement, "option", [{"label", E}], + [{xmlelement, "value", [], [{xmlcdata, E}]}]} + end, ?POSSIBLE_ENCODINGS)]}, + {xmlelement, "field", + [{"var", "server" ++ NumberString}, + {"type", "text-single"}, + {"label", io_lib:format(translate:translate(Lang, "Server ~b"), [Number])}], + [{xmlelement, "value", [], [{xmlcdata, Server}]}]}]. + +parse_connections_params(Fields) -> + %% Find all fields staring with serverN, encodingN, portN and passwordN for any values + %% of N, and generate lists of {"N", Value}. + Servers = lists:sort( + [{lists:nthtail(6, Var), lists:flatten(Value)} || {Var, Value} <- Fields, + lists:prefix("server", Var)]), + Encodings = lists:sort( + [{lists:nthtail(8, Var), lists:flatten(Value)} || {Var, Value} <- Fields, + lists:prefix("encoding", Var)]), + + Ports = lists:sort( + [{lists:nthtail(4, Var), lists:flatten(Value)} || {Var, Value} <- Fields, + lists:prefix("port", Var)]), + + Passwords = lists:sort( + [{lists:nthtail(8, Var), lists:flatten(Value)} || {Var, Value} <- Fields, + lists:prefix("password", Var)]), + + %% Now sort the lists, and find the corresponding pairs. + parse_connections_params(Servers, Encodings, Ports, Passwords). + +retrieve_connections_params(ConnectionParams, ServerN) -> + case ConnectionParams of + [{ConnectionParamN, ConnectionParam} | ConnectionParamsTail] -> + if + ServerN == ConnectionParamN -> + {ConnectionParam, ConnectionParamsTail}; + ServerN < ConnectionParamN -> + {[], [{ConnectionParamN, ConnectionParam} | ConnectionParamsTail]}; + ServerN > ConnectionParamN -> + {[], ConnectionParamsTail} + end; + _ -> + {[], []} + end. + +parse_connections_params([], _, _, _) -> + []; +parse_connections_params(_, [], [], []) -> + []; + +parse_connections_params([{ServerN, Server} | Servers], Encodings, Ports, Passwords) -> + %% Try to match matches of servers, ports, passwords and encodings, no matter what fields + %% the client might have left out. + {NewEncoding, NewEncodings} = retrieve_connections_params(Encodings, ServerN), + {NewPort, NewPorts} = retrieve_connections_params(Ports, ServerN), + {NewPassword, NewPasswords} = retrieve_connections_params(Passwords, ServerN), + [{Server, NewEncoding, NewPort, NewPassword} | parse_connections_params(Servers, NewEncodings, NewPorts, NewPasswords)]. diff --git a/src/mod_muc/Makefile.win32 b/src/mod_muc/Makefile.win32 index 5107b1069..27b81925e 100644 --- a/src/mod_muc/Makefile.win32 +++ b/src/mod_muc/Makefile.win32 @@ -4,7 +4,7 @@ include ..\Makefile.inc EFLAGS = -I .. -pz .. 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) @@ -14,6 +14,9 @@ CLEAN : $(OUTDIR)\mod_muc.beam : 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 erlc -W $(EFLAGS) -o $(OUTDIR) mod_muc_log.erl diff --git a/src/mod_muc/mod_muc.erl b/src/mod_muc/mod_muc.erl index 893e5a26e..9a6b36187 100644 --- a/src/mod_muc/mod_muc.erl +++ b/src/mod_muc/mod_muc.erl @@ -1,1165 +1,1166 @@ -%%%---------------------------------------------------------------------- -%%% File : mod_muc.erl -%%% Author : Alexey Shchepin -%%% Purpose : MUC support (XEP-0045) -%%% Created : 19 Mar 2003 by Alexey Shchepin -%%% -%%% -%%% 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). --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/3, - restore_room/2, - forget_room/2, - create_room/5, - process_iq_disco_items/4, - broadcast_service_message/2, - register_room/3, - node_up/1, - node_down/1, - migrate/3, - get_vh_rooms/1, - is_broadcasted/1, - can_use_nick/3, - moderate_room_history/2, - persist_recent_messages/1]). - -%% 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_room, {name_host, opts}). --record(muc_online_room, {name_host, pid}). --record(muc_registered, {us_host, nick}). - --record(state, {host, - server_host, - access, - history_size, - persist_history, - 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) -> - %% if compiled with no transient supervisor, we need to manually shutdown - %% the rooms to give them a chance to store persistent messages to DB - Rooms = shutdown_rooms(Host), - stop_supervisor(Host), - Proc = gen_mod:get_module_proc(Host, ?PROCNAME), - gen_server:call(Proc, stop), - supervisor:delete_child(ejabberd_sup, Proc), - {wait, Rooms}. %%wait for rooms shutdown before stopping ejabberd - -shutdown_rooms(Host) -> - MyHost = gen_mod:get_module_opt_host(Host, mod_muc, "conference.@HOST@"), - Rooms = mnesia:dirty_select(muc_online_room, - [{#muc_online_room{name_host = '$1', pid = '$2'}, - [{'==', {element, 2, '$1'}, MyHost}], - ['$2']}]), - [Pid ! 'shutdown' || Pid <- Rooms], - Rooms. - -%% Returns {RoomsPersisted, MessagesPersisted} -persist_recent_messages(Host) -> - MyHost = gen_mod:get_module_opt_host(Host, mod_muc, "conference.@HOST@"), - Rooms = mnesia:dirty_select(muc_online_room, - [{#muc_online_room{name_host = '$1', pid = '$2'}, - [{'==', {element, 2, '$1'}, MyHost}], - ['$2']}]), - lists:foldl(fun(Pid, {NRooms, Messages}) -> - case mod_muc_room:persist_recent_messages(Pid) of - {ok, {persisted, N}} -> {NRooms +1, Messages +N}; - {ok, not_persistent} -> {NRooms, Messages} - end end, {0, 0}, Rooms). - -moderate_room_history(RoomStr, Nick) -> - Room = jlib:string_to_jid(RoomStr), - Name = Room#jid.luser, - Host = Room#jid.lserver, - case mnesia:dirty_read(muc_online_room, {Name, Host}) of - [] -> - {error, not_found}; - [R] -> - Pid = R#muc_online_room.pid, - mod_muc_room:moderate_room_history(Pid, Nick) - end. - -%% 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:stop was called, and each room is being terminated -%% In this case, the mod_muc 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), - RoomHost = gen_mod:get_module_opt_host(Host, ?MODULE, "conference.@HOST@"), - Node = get_node({Name, RoomHost}), - gen_server:call({Proc, Node}, {create, Name, From, Nick, Opts}). - -store_room(Host, Name, Opts) -> - F = fun() -> - mnesia:write(#muc_room{name_host = {Name, Host}, - opts = Opts}) - end, - mnesia:transaction(F). - -restore_room(Host, Name) -> - case catch mnesia:dirty_read(muc_room, {Name, Host}) of - [#muc_room{opts = Opts}] -> - Opts; - _ -> - error - end. - -forget_room(Host, Name) -> - F = fun() -> - mnesia:delete({muc_room, {Name, Host}}) - end, - mnesia:transaction(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(_Host, _JID, "") -> - false; -can_use_nick(Host, JID, Nick) -> - {LUser, LServer, _} = jlib:jid_tolower(JID), - LUS = {LUser, LServer}, - case catch mnesia:dirty_select( - muc_registered, - [{#muc_registered{us_host = '$1', - nick = Nick, - _ = '_'}, - [{'==', {element, 2, '$1'}, Host}], - ['$_']}]) of - {'EXIT', _Reason} -> - true; - [] -> - true; - [#muc_registered{us_host = {U, _Host}}] -> - U == LUS - end. - -migrate(_Node, _UpOrDown, After) -> - Rs = mnesia:dirty_select( - muc_online_room, - [{#muc_online_room{name_host = '$1', pid = '$2', _ = '_'}, - [], - ['$$']}]), - lists:foreach( - fun([NameHost, Pid]) -> - case get_node(NameHost) of - Node when Node /= node() -> - mod_muc_room:migrate(Pid, Node, random:uniform(After)); - _ -> - ok - end - end, Rs). - -node_up(_Node) -> - copy_rooms(mnesia:dirty_first(muc_online_room)). - -node_down(Node) when Node == node() -> - copy_rooms(mnesia:dirty_first(muc_online_room)); -node_down(_) -> - ok. - -copy_rooms('$end_of_table') -> - ok; -copy_rooms(Key) -> - case mnesia:dirty_read(muc_online_room, Key) of - [#muc_online_room{name_host = NameHost} = Room] -> - case get_node_new(NameHost) of - Node when node() /= Node -> - rpc:cast(Node, mnesia, dirty_write, [Room]); - _ -> - ok - end; - _ -> - ok - end, - copy_rooms(mnesia:dirty_next(muc_online_room, Key)). - -%%==================================================================== -%% gen_server callbacks -%%==================================================================== - -%%-------------------------------------------------------------------- -%% Function: init(Args) -> {ok, State} | -%% {ok, State, Timeout} | -%% ignore | -%% {stop, Reason} -%% Description: Initiates the server -%%-------------------------------------------------------------------- -init([Host, Opts]) -> - update_muc_online_table(), - mnesia:create_table(muc_room, - [{disc_copies, [node()]}, - {attributes, record_info(fields, muc_room)}]), - mnesia:create_table(muc_registered, - [{disc_copies, [node()]}, - {attributes, record_info(fields, muc_registered)}]), - mnesia:create_table(muc_online_room, - [{ram_copies, [node()]}, - {local_content, true}, - {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@"), - update_tables(MyHost), - mnesia:add_table_index(muc_registered, nick), - 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), - PersistHistory = gen_mod:get_opt(persist_history, Opts, false), - DefRoomOpts = gen_mod:get_opt(default_room_options, Opts, []), - RoomShaper = gen_mod:get_opt(room_shaper, Opts, none), - ejabberd_router:register_route(MyHost), - ejabberd_hooks:add(node_up, ?MODULE, node_up, 100), - ejabberd_hooks:add(node_down, ?MODULE, node_down, 100), - ejabberd_hooks:add(node_hash_update, ?MODULE, migrate, 100), - load_permanent_rooms(MyHost, Host, - {Access, AccessCreate, AccessAdmin, AccessPersistent}, - HistorySize, - PersistHistory, - RoomShaper), - {ok, #state{host = MyHost, - server_host = Host, - access = {Access, AccessCreate, AccessAdmin, AccessPersistent}, - default_room_opts = DefRoomOpts, - history_size = HistorySize, - persist_history = PersistHistory, - 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, - persist_history = PersistHistory, - 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, PersistHistory, - RoomShaper, From, - Nick, NewOpts), - 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, - persist_history = PersistHistory, - room_shaper = RoomShaper} = State) -> - {U, S, _} = jlib:jid_tolower(To), - case get_node({U, S}) of - Node when Node == node() -> - case catch do_route(Host, ServerHost, Access, HistorySize, PersistHistory, - RoomShaper, From, To, Packet, DefRoomOpts) of - {'EXIT', Reason} -> - ?ERROR_MSG("~p", [Reason]); - _ -> - ok - end; - Node -> - Proc = gen_mod:get_module_proc(ServerHost, ?PROCNAME), - {Proc, Node} ! {route, From, To, Packet} - 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:async_dirty(F), - case get_node_new(RoomHost) of - Node when Node /= node() -> - rpc:cast(Node, mnesia, dirty_delete_object, - [#muc_online_room{name_host = RoomHost, - pid = Pid}]); - _ -> - ok - end, - {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_hooks:delete(node_up, ?MODULE, node_up, 100), - ejabberd_hooks:delete(node_down, ?MODULE, node_down, 100), - ejabberd_hooks:delete(node_hash_update, ?MODULE, migrate, 100), - 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, PersistHistory, 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, PersistHistory, 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, PersistHistory, 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( - 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(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 -> - case start_new_room( - Host, ServerHost, Access, - Room, HistorySize, PersistHistory, - RoomShaper, From, - Nick, DefRoomOpts) of - {ok, Pid} -> - mod_muc_room:route(Pid, From, Nick, Packet), - register_room(Host, Room, Pid), - ok; - _Err -> - Err = jlib:make_error_reply( - Packet, ?ERR_INTERNAL_SERVER_ERROR), - ejabberd_router:route(To, From, Err) - end; - 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, mod_muc, - max_room_id, infinite)); - _ -> - false - end. - - -load_permanent_rooms(Host, ServerHost, Access, HistorySize, PersistHistory, RoomShaper) -> - case catch mnesia:dirty_select( - muc_room, [{#muc_room{name_host = {'_', Host}, _ = '_'}, - [], - ['$_']}]) of - {'EXIT', Reason} -> - ?ERROR_MSG("~p", [Reason]), - ok; - Rs -> - lists:foreach( - fun(R) -> - {Room, Host} = R#muc_room.name_host, - case get_node({Room, Host}) of - Node when Node == node() -> - case mnesia:dirty_read(muc_online_room, {Room, Host}) of - [] -> - case get_room_state_if_broadcasted( - {Room, Host}) of - {ok, RoomState} -> - mod_muc_room:start( - normal_state, RoomState); - error -> - {ok, Pid} = mod_muc_room:start( - Host, - ServerHost, - Access, - Room, - HistorySize, - PersistHistory, - RoomShaper, - R#muc_room.opts), - register_room(Host, Room, Pid) - end; - _ -> - ok - end; - _ -> - ok - end - end, Rs) - end. - -start_new_room(Host, ServerHost, Access, Room, - HistorySize, PersistHistory, RoomShaper, From, - Nick, DefRoomOpts) -> - case get_room_state_if_broadcasted({Room, Host}) of - {ok, RoomState} -> - ?DEBUG("MUC: restore room '~s' from other node~n", [Room]), - mod_muc_room:start(normal_state, RoomState); - error -> - case mnesia:dirty_read(muc_room, {Room, Host}) of - [] -> - ?DEBUG("MUC: open new room '~s'~n", [Room]), - mod_muc_room:start(Host, ServerHost, Access, - Room, HistorySize, PersistHistory, - RoomShaper, From, - Nick, DefRoomOpts); - [#muc_room{opts = Opts}|_] -> - ?DEBUG("MUC: restore room '~s'~n", [Room]), - mod_muc_room:start(Host, ServerHost, Access, - Room, HistorySize, PersistHistory, - RoomShaper, Opts) - end - end. - -register_room(Host, Room, Pid) -> - F = fun() -> - mnesia:write(#muc_online_room{name_host = {Room, Host}, - pid = Pid}) - end, - mnesia:async_dirty(F), - case get_node_new({Room, Host}) of - Node when Node /= node() -> - %% New node has just been added. But we may miss MUC records - %% copy procedure, so we copy the MUC record manually just - %% to make sure - rpc:cast(Node, mnesia, dirty_write, - [#muc_online_room{name_host = {Room, Host}, - pid = Pid}]), - case get_node({Room, Host}) of - Node when node() /= Node -> - %% Migration to new node has completed, and seems like - %% we missed it, so we migrate the MUC room pid manually. - %% It is not a problem if we have already got migration - %% notification: dups are just ignored by the MUC room pid. - mod_muc_room:migrate(Pid, Node, 0); - _ -> - ok - end; - _ -> - ok - end. - -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_all_nodes(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 = get_vh_rooms_all_nodes(Host), - Count = erlang:length(AllRooms), - L = get_vh_rooms_direction(Direction, I, Index, AllRooms), - 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. - -get_vh_rooms_direction(_Direction, _I, Index, AllRooms) when Index =/= undefined -> - AllRooms; -get_vh_rooms_direction(aft, I, _Index, AllRooms) -> - {_Before, After} = - lists:splitwith( - fun(#muc_online_room{name_host = {Na, _}}) -> - Na < I end, AllRooms), - case After of - [] -> []; - [#muc_online_room{name_host = {I, _Host}} | AfterTail] -> AfterTail; - _ -> After - end; -get_vh_rooms_direction(before, I, _Index, AllRooms) when I =/= []-> - {Before, _} = - lists:splitwith( - fun(#muc_online_room{name_host = {Na, _}}) -> - Na < I end, AllRooms), - Before; -get_vh_rooms_direction(_Direction, _I, _Index, AllRooms) -> - AllRooms. - -%% @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(Host, From, Lang) -> - {LUser, LServer, _} = jlib:jid_tolower(From), - LUS = {LUser, LServer}, - {Nick, Registered} = - case catch mnesia:dirty_read(muc_registered, {LUS, Host}) of - {'EXIT', _Reason} -> - {"", []}; - [] -> - {"", []}; - [#muc_registered{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(Host, From, Nick, Lang) -> - {LUser, LServer, _} = jlib:jid_tolower(From), - LUS = {LUser, LServer}, - F = fun() -> - case Nick of - "" -> - mnesia:delete({muc_registered, {LUS, Host}}), - ok; - _ -> - Allow = - case mnesia:select( - muc_registered, - [{#muc_registered{us_host = '$1', - nick = Nick, - _ = '_'}, - [{'==', {element, 2, '$1'}, Host}], - ['$_']}]) of - [] -> - true; - [#muc_registered{us_host = {U, _Host}}] -> - U == LUS - end, - if - Allow -> - mnesia:write( - #muc_registered{us_host = {LUS, Host}, - nick = Nick}), - ok; - true -> - false - end - end - end, - case mnesia:transaction(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(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(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(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_all_nodes(Host)). - -get_vh_rooms_all_nodes(Host) -> - Rooms = lists:foldl( - fun(Node, Acc) when Node == node() -> - get_vh_rooms(Host) ++ Acc; - (Node, Acc) -> - case catch rpc:call(Node, ?MODULE, get_vh_rooms, - [Host], 5000) of - Res when is_list(Res) -> - Res ++ Acc; - _ -> - Acc - end - end, [], get_nodes(Host)), - lists:ukeysort(#muc_online_room.name_host, Rooms). - -get_vh_rooms(Host) -> - mnesia:dirty_select(muc_online_room, - [{#muc_online_room{name_host = '$1', _ = '_'}, - [{'==', {element, 2, '$1'}, Host}], - ['$_']}]). - -update_tables(Host) -> - update_muc_room_table(Host), - update_muc_registered_table(Host). - -update_muc_online_table() -> - case catch mnesia:table_info(muc_online_room, local_content) of - false -> - mnesia:delete_table(muc_online_room); - _ -> - ok - end. - -update_muc_room_table(Host) -> - Fields = record_info(fields, muc_room), - case mnesia:table_info(muc_room, attributes) of - Fields -> - ok; - [name, opts] -> - ?INFO_MSG("Converting muc_room table from " - "{name, opts} format", []), - {atomic, ok} = mnesia:create_table( - mod_muc_tmp_table, - [{disc_only_copies, [node()]}, - {type, bag}, - {local_content, true}, - {record_name, muc_room}, - {attributes, record_info(fields, muc_room)}]), - mnesia:transform_table(muc_room, ignore, Fields), - F1 = fun() -> - mnesia:write_lock_table(mod_muc_tmp_table), - mnesia:foldl( - fun(#muc_room{name_host = Name} = R, _) -> - mnesia:dirty_write( - mod_muc_tmp_table, - R#muc_room{name_host = {Name, Host}}) - end, ok, muc_room) - end, - mnesia:transaction(F1), - mnesia:clear_table(muc_room), - F2 = fun() -> - mnesia:write_lock_table(muc_room), - mnesia:foldl( - fun(R, _) -> - mnesia:dirty_write(R) - end, ok, mod_muc_tmp_table) - end, - mnesia:transaction(F2), - mnesia:delete_table(mod_muc_tmp_table); - _ -> - ?INFO_MSG("Recreating muc_room table", []), - mnesia:transform_table(muc_room, ignore, Fields) - end. - - -update_muc_registered_table(Host) -> - Fields = record_info(fields, muc_registered), - case mnesia:table_info(muc_registered, attributes) of - Fields -> - ok; - [user, nick] -> - ?INFO_MSG("Converting muc_registered table from " - "{user, nick} format", []), - {atomic, ok} = mnesia:create_table( - mod_muc_tmp_table, - [{disc_only_copies, [node()]}, - {type, bag}, - {local_content, true}, - {record_name, muc_registered}, - {attributes, record_info(fields, muc_registered)}]), - mnesia:del_table_index(muc_registered, nick), - mnesia:transform_table(muc_registered, ignore, Fields), - F1 = fun() -> - mnesia:write_lock_table(mod_muc_tmp_table), - mnesia:foldl( - fun(#muc_registered{us_host = US} = R, _) -> - mnesia:dirty_write( - mod_muc_tmp_table, - R#muc_registered{us_host = {US, Host}}) - end, ok, muc_registered) - end, - mnesia:transaction(F1), - mnesia:clear_table(muc_registered), - F2 = fun() -> - mnesia:write_lock_table(muc_registered), - mnesia:foldl( - fun(R, _) -> - mnesia:dirty_write(R) - end, ok, mod_muc_tmp_table) - end, - mnesia:transaction(F2), - mnesia:delete_table(mod_muc_tmp_table); - _ -> - ?INFO_MSG("Recreating muc_registered table", []), - mnesia:transform_table(muc_registered, ignore, Fields) - end. - -is_broadcasted(RoomHost) -> - case ejabberd_config:get_local_option({domain_balancing, RoomHost}) of - broadcast -> - true; - _ -> - false - end. - -get_node({_, RoomHost} = Key) -> - case is_broadcasted(RoomHost) of - true -> - node(); - false -> - ejabberd_cluster:get_node(Key) - end; -get_node(RoomHost) -> - get_node({"", RoomHost}). - -get_node_new({_, RoomHost} = Key) -> - case is_broadcasted(RoomHost) of - true -> - node(); - false -> - ejabberd_cluster:get_node_new(Key) - end; -get_node_new(RoomHost) -> - get_node_new({"", RoomHost}). - -get_nodes(RoomHost) -> - case is_broadcasted(RoomHost) of - true -> - [node()]; - false -> - ejabberd_cluster:get_nodes() - end. - -get_room_state_if_broadcasted({Room, Host}) -> - case is_broadcasted(Host) of - true -> - lists:foldl( - fun(_, {ok, StateData}) -> - {ok, StateData}; - (Node, _) when Node /= node() -> - case catch rpc:call( - Node, mnesia, dirty_read, - [muc_online_room, {Room, Host}], 5000) of - [#muc_online_room{pid = Pid}] -> - case catch gen_fsm:sync_send_all_state_event( - Pid, get_state, 5000) of - {ok, StateData} -> - {ok, StateData}; - _ -> - error - end; - _ -> - error - end; - (_, Acc) -> - Acc - end, error, ejabberd_cluster:get_nodes()); - false -> - error - end. +%%%---------------------------------------------------------------------- +%%% File : mod_muc.erl +%%% Author : Alexey Shchepin +%%% Purpose : MUC support (XEP-0045) +%%% Created : 19 Mar 2003 by Alexey Shchepin +%%% +%%% +%%% 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). +-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, + register_room/3, + node_up/1, + node_down/1, + migrate/3, + get_vh_rooms/1, + is_broadcasted/1, + moderate_room_history/2, + persist_recent_messages/1, + 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_room, {name_host, opts}). +-record(muc_online_room, {name_host, pid}). +-record(muc_registered, {us_host, nick}). + +-record(state, {host, + server_host, + access, + history_size, + persist_history, + 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) -> + %% if compiled with no transient supervisor, we need to manually shutdown + %% the rooms to give them a chance to store persistent messages to DB + Rooms = shutdown_rooms(Host), + stop_supervisor(Host), + Proc = gen_mod:get_module_proc(Host, ?PROCNAME), + gen_server:call(Proc, stop), + supervisor:delete_child(ejabberd_sup, Proc), + {wait, Rooms}. %%wait for rooms shutdown before stopping ejabberd + +shutdown_rooms(Host) -> + MyHost = gen_mod:get_module_opt_host(Host, mod_muc, "conference.@HOST@"), + Rooms = mnesia:dirty_select(muc_online_room, + [{#muc_online_room{name_host = '$1', pid = '$2'}, + [{'==', {element, 2, '$1'}, MyHost}], + ['$2']}]), + [Pid ! 'shutdown' || Pid <- Rooms], + Rooms. + +%% Returns {RoomsPersisted, MessagesPersisted} +persist_recent_messages(Host) -> + MyHost = gen_mod:get_module_opt_host(Host, mod_muc, "conference.@HOST@"), + Rooms = mnesia:dirty_select(muc_online_room, + [{#muc_online_room{name_host = '$1', pid = '$2'}, + [{'==', {element, 2, '$1'}, MyHost}], + ['$2']}]), + lists:foldl(fun(Pid, {NRooms, Messages}) -> + case mod_muc_room:persist_recent_messages(Pid) of + {ok, {persisted, N}} -> {NRooms +1, Messages +N}; + {ok, not_persistent} -> {NRooms, Messages} + end end, {0, 0}, Rooms). + +moderate_room_history(RoomStr, Nick) -> + Room = jlib:string_to_jid(RoomStr), + Name = Room#jid.luser, + Host = Room#jid.lserver, + case mnesia:dirty_read(muc_online_room, {Name, Host}) of + [] -> + {error, not_found}; + [R] -> + Pid = R#muc_online_room.pid, + mod_muc_room:moderate_room_history(Pid, Nick) + end. + +%% 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:stop was called, and each room is being terminated +%% In this case, the mod_muc 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), + RoomHost = gen_mod:get_module_opt_host(Host, ?MODULE, "conference.@HOST@"), + Node = get_node({Name, RoomHost}), + gen_server:call({Proc, Node}, {create, Name, From, Nick, Opts}). + +store_room(_ServerHost, Host, Name, Opts) -> + F = fun() -> + mnesia:write(#muc_room{name_host = {Name, Host}, + opts = Opts}) + end, + mnesia:transaction(F). + +restore_room(_ServerHost, Host, Name) -> + case catch mnesia:dirty_read(muc_room, {Name, Host}) of + [#muc_room{opts = Opts}] -> + Opts; + _ -> + error + end. + +forget_room(_ServerHost, Host, Name) -> + F = fun() -> + mnesia:delete({muc_room, {Name, Host}}) + end, + mnesia:transaction(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) -> + {LUser, LServer, _} = jlib:jid_tolower(JID), + LUS = {LUser, LServer}, + case catch mnesia:dirty_select( + muc_registered, + [{#muc_registered{us_host = '$1', + nick = Nick, + _ = '_'}, + [{'==', {element, 2, '$1'}, Host}], + ['$_']}]) of + {'EXIT', _Reason} -> + true; + [] -> + true; + [#muc_registered{us_host = {U, _Host}}] -> + U == LUS + end. + +migrate(_Node, _UpOrDown, After) -> + Rs = mnesia:dirty_select( + muc_online_room, + [{#muc_online_room{name_host = '$1', pid = '$2', _ = '_'}, + [], + ['$$']}]), + lists:foreach( + fun([NameHost, Pid]) -> + case get_node(NameHost) of + Node when Node /= node() -> + mod_muc_room:migrate(Pid, Node, random:uniform(After)); + _ -> + ok + end + end, Rs). + +node_up(_Node) -> + copy_rooms(mnesia:dirty_first(muc_online_room)). + +node_down(Node) when Node == node() -> + copy_rooms(mnesia:dirty_first(muc_online_room)); +node_down(_) -> + ok. + +copy_rooms('$end_of_table') -> + ok; +copy_rooms(Key) -> + case mnesia:dirty_read(muc_online_room, Key) of + [#muc_online_room{name_host = NameHost} = Room] -> + case get_node_new(NameHost) of + Node when node() /= Node -> + rpc:cast(Node, mnesia, dirty_write, [Room]); + _ -> + ok + end; + _ -> + ok + end, + copy_rooms(mnesia:dirty_next(muc_online_room, Key)). + +%%==================================================================== +%% gen_server callbacks +%%==================================================================== + +%%-------------------------------------------------------------------- +%% Function: init(Args) -> {ok, State} | +%% {ok, State, Timeout} | +%% ignore | +%% {stop, Reason} +%% Description: Initiates the server +%%-------------------------------------------------------------------- +init([Host, Opts]) -> + update_muc_online_table(), + mnesia:create_table(muc_room, + [{disc_copies, [node()]}, + {attributes, record_info(fields, muc_room)}]), + mnesia:create_table(muc_registered, + [{disc_copies, [node()]}, + {attributes, record_info(fields, muc_registered)}]), + mnesia:create_table(muc_online_room, + [{ram_copies, [node()]}, + {local_content, true}, + {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@"), + update_tables(MyHost), + mnesia:add_table_index(muc_registered, nick), + 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), + PersistHistory = gen_mod:get_opt(persist_history, Opts, false), + DefRoomOpts = gen_mod:get_opt(default_room_options, Opts, []), + RoomShaper = gen_mod:get_opt(room_shaper, Opts, none), + ejabberd_router:register_route(MyHost), + ejabberd_hooks:add(node_up, ?MODULE, node_up, 100), + ejabberd_hooks:add(node_down, ?MODULE, node_down, 100), + ejabberd_hooks:add(node_hash_update, ?MODULE, migrate, 100), + load_permanent_rooms(MyHost, Host, + {Access, AccessCreate, AccessAdmin, AccessPersistent}, + HistorySize, + PersistHistory, + RoomShaper), + {ok, #state{host = MyHost, + server_host = Host, + access = {Access, AccessCreate, AccessAdmin, AccessPersistent}, + default_room_opts = DefRoomOpts, + history_size = HistorySize, + persist_history = PersistHistory, + 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, + persist_history = PersistHistory, + 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, PersistHistory, + 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, + persist_history = PersistHistory, + room_shaper = RoomShaper} = State) -> + {U, S, _} = jlib:jid_tolower(To), + case get_node({U, S}) of + Node when Node == node() -> + case catch do_route(Host, ServerHost, Access, HistorySize, PersistHistory, + RoomShaper, From, To, Packet, DefRoomOpts) of + {'EXIT', Reason} -> + ?ERROR_MSG("~p", [Reason]); + _ -> + ok + end; + Node -> + Proc = gen_mod:get_module_proc(ServerHost, ?PROCNAME), + {Proc, Node} ! {route, From, To, Packet} + 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:async_dirty(F), + case get_node_new(RoomHost) of + Node when Node /= node() -> + rpc:cast(Node, mnesia, dirty_delete_object, + [#muc_online_room{name_host = RoomHost, + pid = Pid}]); + _ -> + ok + end, + {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_hooks:delete(node_up, ?MODULE, node_up, 100), + ejabberd_hooks:delete(node_down, ?MODULE, node_down, 100), + ejabberd_hooks:delete(node_hash_update, ?MODULE, migrate, 100), + 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, PersistHistory, 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, PersistHistory, 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, PersistHistory, 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( + 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(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 -> + case start_new_room( + Host, ServerHost, Access, + Room, HistorySize, PersistHistory, + RoomShaper, From, + Nick, DefRoomOpts) of + {ok, Pid} -> + mod_muc_room:route(Pid, From, Nick, Packet), + register_room(Host, Room, Pid), + ok; + _Err -> + Err = jlib:make_error_reply( + Packet, ?ERR_INTERNAL_SERVER_ERROR), + ejabberd_router:route(To, From, Err) + end; + 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, PersistHistory, RoomShaper) -> + case catch mnesia:dirty_select( + muc_room, [{#muc_room{name_host = {'_', Host}, _ = '_'}, + [], + ['$_']}]) of + {'EXIT', Reason} -> + ?ERROR_MSG("~p", [Reason]), + ok; + Rs -> + lists:foreach( + fun(R) -> + {Room, Host} = R#muc_room.name_host, + case get_node({Room, Host}) of + Node when Node == node() -> + case mnesia:dirty_read(muc_online_room, {Room, Host}) of + [] -> + case get_room_state_if_broadcasted( + {Room, Host}) of + {ok, RoomState} -> + mod_muc_room:start( + normal_state, RoomState); + error -> + {ok, Pid} = mod_muc_room:start( + Host, + ServerHost, + Access, + Room, + HistorySize, + PersistHistory, + RoomShaper, + R#muc_room.opts, + ?MODULE), + register_room(Host, Room, Pid) + end; + _ -> + ok + end; + _ -> + ok + end + end, Rs) + end. + +start_new_room(Host, ServerHost, Access, Room, + HistorySize, PersistHistory, RoomShaper, From, + Nick, DefRoomOpts) -> + case get_room_state_if_broadcasted({Room, Host}) of + {ok, RoomState} -> + ?DEBUG("MUC: restore room '~s' from other node~n", [Room]), + mod_muc_room:start(normal_state, RoomState); + error -> + case mnesia:dirty_read(muc_room, {Room, Host}) of + [] -> + ?DEBUG("MUC: open new room '~s'~n", [Room]), + mod_muc_room:start(Host, ServerHost, Access, + Room, HistorySize, PersistHistory, + RoomShaper, From, + Nick, DefRoomOpts, ?MODULE); + [#muc_room{opts = Opts}|_] -> + ?DEBUG("MUC: restore room '~s'~n", [Room]), + mod_muc_room:start(Host, ServerHost, Access, + Room, HistorySize, PersistHistory, + RoomShaper, Opts, ?MODULE) + end + end. + +register_room(Host, Room, Pid) -> + F = fun() -> + mnesia:write(#muc_online_room{name_host = {Room, Host}, + pid = Pid}) + end, + mnesia:async_dirty(F), + case get_node_new({Room, Host}) of + Node when Node /= node() -> + %% New node has just been added. But we may miss MUC records + %% copy procedure, so we copy the MUC record manually just + %% to make sure + rpc:cast(Node, mnesia, dirty_write, + [#muc_online_room{name_host = {Room, Host}, + pid = Pid}]), + case get_node({Room, Host}) of + Node when node() /= Node -> + %% Migration to new node has completed, and seems like + %% we missed it, so we migrate the MUC room pid manually. + %% It is not a problem if we have already got migration + %% notification: dups are just ignored by the MUC room pid. + mod_muc_room:migrate(Pid, Node, 0); + _ -> + ok + end; + _ -> + ok + end. + +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_all_nodes(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 = get_vh_rooms_all_nodes(Host), + Count = erlang:length(AllRooms), + L = get_vh_rooms_direction(Direction, I, Index, AllRooms), + 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. + +get_vh_rooms_direction(_Direction, _I, Index, AllRooms) when Index =/= undefined -> + AllRooms; +get_vh_rooms_direction(aft, I, _Index, AllRooms) -> + {_Before, After} = + lists:splitwith( + fun(#muc_online_room{name_host = {Na, _}}) -> + Na < I end, AllRooms), + case After of + [] -> []; + [#muc_online_room{name_host = {I, _Host}} | AfterTail] -> AfterTail; + _ -> After + end; +get_vh_rooms_direction(before, I, _Index, AllRooms) when I =/= []-> + {Before, _} = + lists:splitwith( + fun(#muc_online_room{name_host = {Na, _}}) -> + Na < I end, AllRooms), + Before; +get_vh_rooms_direction(_Direction, _I, _Index, AllRooms) -> + AllRooms. + +%% @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(Host, From, Lang) -> + {LUser, LServer, _} = jlib:jid_tolower(From), + LUS = {LUser, LServer}, + {Nick, Registered} = + case catch mnesia:dirty_read(muc_registered, {LUS, Host}) of + {'EXIT', _Reason} -> + {"", []}; + [] -> + {"", []}; + [#muc_registered{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(Host, From, Nick, Lang) -> + {LUser, LServer, _} = jlib:jid_tolower(From), + LUS = {LUser, LServer}, + F = fun() -> + case Nick of + "" -> + mnesia:delete({muc_registered, {LUS, Host}}), + ok; + _ -> + Allow = + case mnesia:select( + muc_registered, + [{#muc_registered{us_host = '$1', + nick = Nick, + _ = '_'}, + [{'==', {element, 2, '$1'}, Host}], + ['$_']}]) of + [] -> + true; + [#muc_registered{us_host = {U, _Host}}] -> + U == LUS + end, + if + Allow -> + mnesia:write( + #muc_registered{us_host = {LUS, Host}, + nick = Nick}), + ok; + true -> + false + end + end + end, + case mnesia:transaction(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(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(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(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_all_nodes(Host)). + +get_vh_rooms_all_nodes(Host) -> + Rooms = lists:foldl( + fun(Node, Acc) when Node == node() -> + get_vh_rooms(Host) ++ Acc; + (Node, Acc) -> + case catch rpc:call(Node, ?MODULE, get_vh_rooms, + [Host], 5000) of + Res when is_list(Res) -> + Res ++ Acc; + _ -> + Acc + end + end, [], get_nodes(Host)), + lists:ukeysort(#muc_online_room.name_host, Rooms). + +get_vh_rooms(Host) -> + mnesia:dirty_select(muc_online_room, + [{#muc_online_room{name_host = '$1', _ = '_'}, + [{'==', {element, 2, '$1'}, Host}], + ['$_']}]). + +update_tables(Host) -> + update_muc_room_table(Host), + update_muc_registered_table(Host). + +update_muc_online_table() -> + case catch mnesia:table_info(muc_online_room, local_content) of + false -> + mnesia:delete_table(muc_online_room); + _ -> + ok + end. + +update_muc_room_table(Host) -> + Fields = record_info(fields, muc_room), + case mnesia:table_info(muc_room, attributes) of + Fields -> + ok; + [name, opts] -> + ?INFO_MSG("Converting muc_room table from " + "{name, opts} format", []), + {atomic, ok} = mnesia:create_table( + mod_muc_tmp_table, + [{disc_only_copies, [node()]}, + {type, bag}, + {local_content, true}, + {record_name, muc_room}, + {attributes, record_info(fields, muc_room)}]), + mnesia:transform_table(muc_room, ignore, Fields), + F1 = fun() -> + mnesia:write_lock_table(mod_muc_tmp_table), + mnesia:foldl( + fun(#muc_room{name_host = Name} = R, _) -> + mnesia:dirty_write( + mod_muc_tmp_table, + R#muc_room{name_host = {Name, Host}}) + end, ok, muc_room) + end, + mnesia:transaction(F1), + mnesia:clear_table(muc_room), + F2 = fun() -> + mnesia:write_lock_table(muc_room), + mnesia:foldl( + fun(R, _) -> + mnesia:dirty_write(R) + end, ok, mod_muc_tmp_table) + end, + mnesia:transaction(F2), + mnesia:delete_table(mod_muc_tmp_table); + _ -> + ?INFO_MSG("Recreating muc_room table", []), + mnesia:transform_table(muc_room, ignore, Fields) + end. + + +update_muc_registered_table(Host) -> + Fields = record_info(fields, muc_registered), + case mnesia:table_info(muc_registered, attributes) of + Fields -> + ok; + [user, nick] -> + ?INFO_MSG("Converting muc_registered table from " + "{user, nick} format", []), + {atomic, ok} = mnesia:create_table( + mod_muc_tmp_table, + [{disc_only_copies, [node()]}, + {type, bag}, + {local_content, true}, + {record_name, muc_registered}, + {attributes, record_info(fields, muc_registered)}]), + mnesia:del_table_index(muc_registered, nick), + mnesia:transform_table(muc_registered, ignore, Fields), + F1 = fun() -> + mnesia:write_lock_table(mod_muc_tmp_table), + mnesia:foldl( + fun(#muc_registered{us_host = US} = R, _) -> + mnesia:dirty_write( + mod_muc_tmp_table, + R#muc_registered{us_host = {US, Host}}) + end, ok, muc_registered) + end, + mnesia:transaction(F1), + mnesia:clear_table(muc_registered), + F2 = fun() -> + mnesia:write_lock_table(muc_registered), + mnesia:foldl( + fun(R, _) -> + mnesia:dirty_write(R) + end, ok, mod_muc_tmp_table) + end, + mnesia:transaction(F2), + mnesia:delete_table(mod_muc_tmp_table); + _ -> + ?INFO_MSG("Recreating muc_registered table", []), + mnesia:transform_table(muc_registered, ignore, Fields) + end. + +is_broadcasted(RoomHost) -> + case ejabberd_config:get_local_option({domain_balancing, RoomHost}) of + broadcast -> + true; + _ -> + false + end. + +get_node({_, RoomHost} = Key) -> + case is_broadcasted(RoomHost) of + true -> + node(); + false -> + ejabberd_cluster:get_node(Key) + end; +get_node(RoomHost) -> + get_node({"", RoomHost}). + +get_node_new({_, RoomHost} = Key) -> + case is_broadcasted(RoomHost) of + true -> + node(); + false -> + ejabberd_cluster:get_node_new(Key) + end; +get_node_new(RoomHost) -> + get_node_new({"", RoomHost}). + +get_nodes(RoomHost) -> + case is_broadcasted(RoomHost) of + true -> + [node()]; + false -> + ejabberd_cluster:get_nodes() + end. + +get_room_state_if_broadcasted({Room, Host}) -> + case is_broadcasted(Host) of + true -> + lists:foldl( + fun(_, {ok, StateData}) -> + {ok, StateData}; + (Node, _) when Node /= node() -> + case catch rpc:call( + Node, mnesia, dirty_read, + [muc_online_room, {Room, Host}], 5000) of + [#muc_online_room{pid = Pid}] -> + case catch gen_fsm:sync_send_all_state_event( + Pid, get_state, 5000) of + {ok, StateData} -> + {ok, StateData}; + _ -> + error + end; + _ -> + error + end; + (_, Acc) -> + Acc + end, error, ejabberd_cluster:get_nodes()); + false -> + error + end. diff --git a/src/mod_muc/mod_muc_odbc.erl b/src/mod_muc/mod_muc_odbc.erl new file mode 100644 index 000000000..47dc4c9ef --- /dev/null +++ b/src/mod_muc/mod_muc_odbc.erl @@ -0,0 +1,875 @@ +%%%---------------------------------------------------------------------- +%%% File : mod_muc_odbc.erl +%%% Author : Alexey Shchepin +%%% Purpose : MUC support (XEP-0045) +%%% Created : 19 Mar 2003 by Alexey Shchepin +%%% +%%% +%%% 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). diff --git a/src/mod_muc/mod_muc_room.erl b/src/mod_muc/mod_muc_room.erl index 0de2ebcc8..79b9c70ac 100644 --- a/src/mod_muc/mod_muc_room.erl +++ b/src/mod_muc/mod_muc_room.erl @@ -1,4212 +1,4226 @@ -%%%---------------------------------------------------------------------- -%%% File : mod_muc_room.erl -%%% Author : Alexey Shchepin -%%% Purpose : MUC room stuff -%%% Created : 19 Mar 2003 by Alexey Shchepin -%%% -%%% -%%% 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_room). --author('alexey@process-one.net'). - --define(GEN_FSM, p1_fsm). - --behaviour(?GEN_FSM). - - -%% External exports --export([start_link/10, - start_link/8, - start_link/2, - start/10, - start/8, - start/2, - migrate/3, - route/4, - moderate_room_history/2, - persist_recent_messages/1]). - -%% gen_fsm callbacks --export([init/1, - normal_state/2, - handle_event/3, - handle_sync_event/4, - handle_info/3, - terminate/3, - print_state/1, - code_change/4]). - --include("ejabberd.hrl"). --include("jlib.hrl"). --include("mod_muc_room.hrl"). - --define(MAX_USERS_DEFAULT_LIST, - [5, 10, 20, 30, 50, 100, 200, 500, 1000, 2000, 5000]). - -%-define(DBGFSM, true). - --ifdef(DBGFSM). --define(FSMOPTS, [{debug, [trace]}]). --else. --define(FSMOPTS, []). --endif. - -%% Module start with or without supervisor: --ifdef(NO_TRANSIENT_SUPERVISORS). --define(SUPERVISOR_START(Args), - ?GEN_FSM:start(?MODULE, Args, ?FSMOPTS)). --else. --define(SUPERVISOR_START(Args), - Supervisor = gen_mod:get_module_proc(ServerHost, ejabberd_mod_muc_sup), - supervisor:start_child(Supervisor, Args)). --endif. - -%%%---------------------------------------------------------------------- -%%% API -%%%---------------------------------------------------------------------- -start(Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper, - Creator, Nick, DefRoomOpts) -> - ?SUPERVISOR_START([Host, ServerHost, Access, Room, HistorySize, PersistHistory, - RoomShaper, Creator, Nick, DefRoomOpts]). - -start(Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper, Opts) -> - Supervisor = gen_mod:get_module_proc(ServerHost, ejabberd_mod_muc_sup), - supervisor:start_child( - Supervisor, [Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper, - Opts]). - -start(StateName, StateData) -> - ServerHost = StateData#state.server_host, - ?SUPERVISOR_START([StateName, StateData]). - -start_link(Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper, - Creator, Nick, DefRoomOpts) -> - ?GEN_FSM:start_link(?MODULE, [Host, ServerHost, Access, Room, HistorySize, PersistHistory, - RoomShaper, Creator, Nick, DefRoomOpts], - ?FSMOPTS). - -start_link(Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper, Opts) -> - ?GEN_FSM:start_link(?MODULE, [Host, ServerHost, Access, Room, HistorySize, PersistHistory, - RoomShaper, Opts], - ?FSMOPTS). - -start_link(StateName, StateData) -> - ?GEN_FSM:start_link(?MODULE, [StateName, StateData], ?FSMOPTS). - -migrate(FsmRef, Node, After) -> - erlang:send_after(After, FsmRef, {migrate, Node}). - -moderate_room_history(FsmRef, Nick) -> - ?GEN_FSM:sync_send_all_state_event(FsmRef, {moderate_room_history, Nick}). - -persist_recent_messages(FsmRef) -> - ?GEN_FSM:sync_send_all_state_event(FsmRef, persist_recent_messages). -%%%---------------------------------------------------------------------- -%%% Callback functions from gen_fsm -%%%---------------------------------------------------------------------- - -%%---------------------------------------------------------------------- -%% Func: init/1 -%% Returns: {ok, StateName, StateData} | -%% {ok, StateName, StateData, Timeout} | -%% ignore | -%% {stop, StopReason} -%%---------------------------------------------------------------------- -init([Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper, Creator, _Nick, DefRoomOpts]) -> - process_flag(trap_exit, true), - Shaper = shaper:new(RoomShaper), - State = set_affiliation(Creator, owner, - #state{host = Host, - server_host = ServerHost, - access = Access, - room = Room, - history = lqueue_new(HistorySize), - persist_history = PersistHistory, - jid = jlib:make_jid(Room, Host, ""), - just_created = true, - room_shaper = Shaper}), - State1 = set_opts(DefRoomOpts, State), - %% this will trigger a write of the muc to disc if it is persistent. - %% we need to do this because otherwise if muc are persistent by default, - %% but never configured in any way by the client, we were never - %% storing it on disc to be recreated on startup. - if - (State1#state.config)#config.persistent -> - mod_muc:store_room(State1#state.host, State1#state.room, make_opts(State1)); - true -> - ok - end, - ?INFO_MSG("Created MUC room ~s@~s by ~s", - [Room, Host, jlib:jid_to_string(Creator)]), - add_to_log(room_existence, created, State1), - add_to_log(room_existence, started, State1), - {ok, normal_state, State1}; -init([Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper, Opts]) -> - process_flag(trap_exit, true), - Shaper = shaper:new(RoomShaper), - State = set_opts(Opts, #state{host = Host, - server_host = ServerHost, - access = Access, - room = Room, - history = load_history(ServerHost, Room, PersistHistory, lqueue_new(HistorySize)), - persist_history = PersistHistory, - jid = jlib:make_jid(Room, Host, ""), - room_shaper = Shaper}), - add_to_log(room_existence, started, State), - {ok, normal_state, State}; -init([StateName, #state{room = Room, host = Host} = StateData]) -> - process_flag(trap_exit, true), - mod_muc:register_room(Host, Room, self()), - {ok, StateName, StateData}. - -%%---------------------------------------------------------------------- -%% Func: StateName/2 -%% Returns: {next_state, NextStateName, NextStateData} | -%% {next_state, NextStateName, NextStateData, Timeout} | -%% {stop, Reason, NewStateData} -%%---------------------------------------------------------------------- -normal_state({route, From, "", - {xmlelement, "message", Attrs, Els} = Packet}, - StateData) -> - Lang = xml:get_attr_s("xml:lang", Attrs), - case is_user_online(From, StateData) orelse - is_user_allowed_message_nonparticipant(From, StateData) of - true -> - case xml:get_attr_s("type", Attrs) of - "groupchat" -> - Activity = get_user_activity(From, StateData), - Now = now_to_usec(now()), - MinMessageInterval = - trunc(gen_mod:get_module_opt( - StateData#state.server_host, - mod_muc, min_message_interval, 0) * 1000000), - Size = element_size(Packet), - {MessageShaper, MessageShaperInterval} = - shaper:update(Activity#activity.message_shaper, Size), - if - Activity#activity.message /= undefined -> - ErrText = "Traffic rate limit is exceeded", - Err = jlib:make_error_reply( - Packet, ?ERRT_RESOURCE_CONSTRAINT(Lang, ErrText)), - route_stanza( - StateData#state.jid, - From, Err), - {next_state, normal_state, StateData}; - Now >= Activity#activity.message_time + MinMessageInterval, - MessageShaperInterval == 0 -> - {RoomShaper, RoomShaperInterval} = - shaper:update(StateData#state.room_shaper, Size), - RoomQueueEmpty = queue:is_empty( - StateData#state.room_queue), - if - RoomShaperInterval == 0, - RoomQueueEmpty -> - NewActivity = Activity#activity{ - message_time = Now, - message_shaper = MessageShaper}, - StateData1 = - store_user_activity( - From, NewActivity, StateData), - StateData2 = - StateData1#state{ - room_shaper = RoomShaper}, - process_groupchat_message(From, Packet, StateData2); - true -> - StateData1 = - if - RoomQueueEmpty -> - erlang:send_after( - RoomShaperInterval, self(), - process_room_queue), - StateData#state{ - room_shaper = RoomShaper}; - true -> - StateData - end, - NewActivity = Activity#activity{ - message_time = Now, - message_shaper = MessageShaper, - message = Packet}, - RoomQueue = queue:in( - {message, From}, - StateData#state.room_queue), - StateData2 = - store_user_activity( - From, NewActivity, StateData1), - StateData3 = - StateData2#state{ - room_queue = RoomQueue}, - {next_state, normal_state, StateData3} - end; - true -> - MessageInterval = - (Activity#activity.message_time + - MinMessageInterval - Now) div 1000, - Interval = lists:max([MessageInterval, - MessageShaperInterval]), - erlang:send_after( - Interval, self(), {process_user_message, From}), - NewActivity = Activity#activity{ - message = Packet, - message_shaper = MessageShaper}, - StateData1 = - store_user_activity( - From, NewActivity, StateData), - {next_state, normal_state, StateData1} - end; - "error" -> - case is_user_online(From, StateData) of - true -> - ErrorText = "This participant is kicked from the room because " - "he sent an error message", - NewState = expulse_participant(Packet, From, StateData, - translate:translate(Lang, ErrorText)), - {next_state, normal_state, NewState}; - _ -> - {next_state, normal_state, StateData} - end; - "chat" -> - ErrText = "It is not allowed to send private messages to the conference", - Err = jlib:make_error_reply( - Packet, ?ERRT_NOT_ACCEPTABLE(Lang, ErrText)), - route_stanza( - StateData#state.jid, - From, Err), - {next_state, normal_state, StateData}; - Type when (Type == "") or (Type == "normal") -> - IsInvitation = is_invitation(Els), - IsVoiceRequest = is_voice_request(Els) - and is_visitor(From, StateData), - IsVoiceApprovement = is_voice_approvement(Els) - and not is_visitor(From, StateData), - if IsInvitation -> - case catch check_invitation(From, Els, Lang, StateData) of - {error, Error} -> - Err = jlib:make_error_reply( - Packet, Error), - route_stanza( - StateData#state.jid, - From, Err), - {next_state, normal_state, StateData}; - IJID -> - Config = StateData#state.config, - case Config#config.members_only of - true -> - case get_affiliation(IJID, StateData) of - none -> - NSD = set_affiliation( - IJID, - member, - StateData), - case (NSD#state.config)#config.persistent of - true -> - mod_muc:store_room( - NSD#state.host, - NSD#state.room, - make_opts(NSD)); - _ -> - ok - end, - {next_state, normal_state, NSD}; - _ -> - {next_state, normal_state, - StateData} - end; - false -> - {next_state, normal_state, StateData} - end - end; - IsVoiceRequest -> - NewStateData = - case (StateData#state.config)#config.allow_voice_requests of - true -> - MinInterval = (StateData#state.config) - #config.voice_request_min_interval, - BareFrom = jlib:jid_remove_resource( - jlib:jid_tolower(From)), - NowPriority = -now_to_usec(now()), - CleanPriority = - NowPriority + MinInterval*1000000, - Times = clean_treap( - StateData#state.last_voice_request_time, - CleanPriority), - case treap:lookup(BareFrom, Times) of - error -> - Times1 = treap:insert( - BareFrom, - NowPriority, - true, Times), - NSD = StateData#state{ - last_voice_request_time = - Times1}, - send_voice_request(From, NSD), - NSD; - {ok, _, _} -> - ErrText = "Please, wait for " - "a while before sending " - "new voice request", - Err = jlib:make_error_reply( - Packet, - ?ERRT_NOT_ACCEPTABLE( - Lang, ErrText)), - route_stanza( - StateData#state.jid, - From, Err), - StateData#state{ - last_voice_request_time = - Times} - end; - false -> - ErrText = "Voice requests are " - "disabled in this conference", - Err = jlib:make_error_reply( - Packet, - ?ERRT_FORBIDDEN( - Lang, ErrText)), - route_stanza( - StateData#state.jid, From, Err), - StateData - end, - {next_state, normal_state, NewStateData}; - IsVoiceApprovement -> - NewStateData = - case is_moderator(From, StateData) of - true -> - case extract_jid_from_voice_approvement(Els) of - error -> - ErrText = "Failed to extract " - "JID from your voice " - "request approvement", - Err = jlib:make_error_reply( - Packet, - ?ERRT_BAD_REQUEST( - Lang, ErrText)), - route_stanza( - StateData#state.jid, - From, Err), - StateData; - {ok, TargetJid} -> - case is_visitor( - TargetJid, StateData) of - true -> - Reason = [], - NSD = set_role( - TargetJid, - participant, - StateData), - catch send_new_presence( - TargetJid, - Reason, NSD), - NSD; - _ -> - StateData - end - end; - _ -> - ErrText = "Only moderators can " - "approve voice requests", - Err = jlib:make_error_reply( - Packet, - ?ERRT_NOT_ALLOWED( - Lang, ErrText)), - route_stanza( - StateData#state.jid, From, Err), - StateData - end, - {next_state, normal_state, NewStateData}; - true -> - {next_state, normal_state, StateData} - end; - _ -> - ErrText = "Improper message type", - Err = jlib:make_error_reply( - Packet, ?ERRT_NOT_ACCEPTABLE(Lang, ErrText)), - route_stanza( - StateData#state.jid, - From, Err), - {next_state, normal_state, StateData} - end; - _ -> - case xml:get_attr_s("type", Attrs) of - "error" -> - ok; - _ -> - handle_roommessage_from_nonparticipant(Packet, Lang, StateData, From) - end, - {next_state, normal_state, StateData} - end; - -normal_state({route, From, "", - {xmlelement, "iq", _Attrs, _Els} = Packet}, - StateData) -> - case jlib:iq_query_info(Packet) of - #iq{type = Type, xmlns = XMLNS, lang = Lang, sub_el = SubEl} = IQ when - (XMLNS == ?NS_MUC_ADMIN) or - (XMLNS == ?NS_MUC_OWNER) or - (XMLNS == ?NS_DISCO_INFO) or - (XMLNS == ?NS_DISCO_ITEMS) or - (XMLNS == ?NS_CAPTCHA) -> - Res1 = case XMLNS of - ?NS_MUC_ADMIN -> - process_iq_admin(From, Type, Lang, SubEl, StateData); - ?NS_MUC_OWNER -> - process_iq_owner(From, Type, Lang, SubEl, StateData); - ?NS_DISCO_INFO -> - process_iq_disco_info(From, Type, Lang, StateData); - ?NS_DISCO_ITEMS -> - process_iq_disco_items(From, Type, Lang, StateData); - ?NS_CAPTCHA -> - process_iq_captcha(From, Type, Lang, SubEl, StateData) - end, - {IQRes, NewStateData} = - case Res1 of - {result, Res, SD} -> - {IQ#iq{type = result, - sub_el = [{xmlelement, "query", - [{"xmlns", XMLNS}], - Res - }]}, - SD}; - {error, Error} -> - {IQ#iq{type = error, - sub_el = [SubEl, Error]}, - StateData} - end, - route_stanza(StateData#state.jid, - From, - jlib:iq_to_xml(IQRes)), - case NewStateData of - stop -> - {stop, normal, StateData}; - _ -> - {next_state, normal_state, NewStateData} - end; - reply -> - {next_state, normal_state, StateData}; - _ -> - Err = jlib:make_error_reply( - Packet, ?ERR_FEATURE_NOT_IMPLEMENTED), - route_stanza(StateData#state.jid, From, Err), - {next_state, normal_state, StateData} - end; - -normal_state({route, From, Nick, - {xmlelement, "presence", _Attrs, _Els} = Packet}, - StateData) -> - Activity = get_user_activity(From, StateData), - Now = now_to_usec(now()), - MinPresenceInterval = - trunc(gen_mod:get_module_opt( - StateData#state.server_host, - mod_muc, min_presence_interval, 0) * 1000000), - if - (Now >= Activity#activity.presence_time + MinPresenceInterval) and - (Activity#activity.presence == undefined) -> - NewActivity = Activity#activity{presence_time = Now}, - StateData1 = store_user_activity(From, NewActivity, StateData), - process_presence(From, Nick, Packet, StateData1); - true -> - if - Activity#activity.presence == undefined -> - Interval = (Activity#activity.presence_time + - MinPresenceInterval - Now) div 1000, - erlang:send_after( - Interval, self(), {process_user_presence, From}); - true -> - ok - end, - NewActivity = Activity#activity{presence = {Nick, Packet}}, - StateData1 = store_user_activity(From, NewActivity, StateData), - {next_state, normal_state, StateData1} - end; - -normal_state({route, From, ToNick, - {xmlelement, "message", Attrs, _} = Packet}, - StateData) -> - Type = xml:get_attr_s("type", Attrs), - Lang = xml:get_attr_s("xml:lang", Attrs), - case decide_fate_message(Type, Packet, From, StateData) of - {expulse_sender, Reason} -> - ?DEBUG(Reason, []), - ErrorText = "This participant is kicked from the room because " - "he sent an error message to another participant", - NewState = expulse_participant(Packet, From, StateData, - translate:translate(Lang, ErrorText)), - {next_state, normal_state, NewState}; - forget_message -> - {next_state, normal_state, StateData}; - continue_delivery -> - case {(StateData#state.config)#config.allow_private_messages, - is_user_online(From, StateData)} of - {true, true} -> - case Type of - "groupchat" -> - ErrText = "It is not allowed to send private " - "messages of type \"groupchat\"", - Err = jlib:make_error_reply( - Packet, ?ERRT_BAD_REQUEST(Lang, ErrText)), - route_stanza( - jlib:jid_replace_resource( - StateData#state.jid, - ToNick), - From, Err); - _ -> - case find_jids_by_nick(ToNick, StateData) of - false -> - ErrText = "Recipient is not in the conference room", - Err = jlib:make_error_reply( - Packet, ?ERRT_ITEM_NOT_FOUND(Lang, ErrText)), - route_stanza( - jlib:jid_replace_resource( - StateData#state.jid, - ToNick), - From, Err); - ToJIDs -> - SrcIsVisitor = is_visitor(From, StateData), - DstIsModerator = is_moderator(hd(ToJIDs), StateData), - PmFromVisitors = (StateData#state.config)#config.allow_private_messages_from_visitors, - if SrcIsVisitor == false; - PmFromVisitors == anyone; - (PmFromVisitors == moderators) and (DstIsModerator) -> - {ok, #user{nick = FromNick}} = - ?DICT:find(jlib:jid_tolower(From), - StateData#state.users), - FromNickJID = jlib:jid_replace_resource(StateData#state.jid, FromNick), - [route_stanza(FromNickJID, ToJID, Packet) || ToJID <- ToJIDs]; - true -> - ErrText = "It is not allowed to send private messages", - Err = jlib:make_error_reply( - Packet, ?ERRT_FORBIDDEN(Lang, ErrText)), - route_stanza( - jlib:jid_replace_resource( - StateData#state.jid, - ToNick), - From, Err) - end - end - end; - {true, false} -> - ErrText = "Only occupants are allowed to send messages to the conference", - Err = jlib:make_error_reply( - Packet, ?ERRT_NOT_ACCEPTABLE(Lang, ErrText)), - route_stanza( - jlib:jid_replace_resource( - StateData#state.jid, - ToNick), - From, Err); - {false, _} -> - ErrText = "It is not allowed to send private messages", - Err = jlib:make_error_reply( - Packet, ?ERRT_FORBIDDEN(Lang, ErrText)), - route_stanza( - jlib:jid_replace_resource( - StateData#state.jid, - ToNick), - From, Err) - end, - {next_state, normal_state, StateData} - end; - -normal_state({route, From, ToNick, - {xmlelement, "iq", Attrs, _Els} = Packet}, - StateData) -> - Lang = xml:get_attr_s("xml:lang", Attrs), - StanzaId = xml:get_attr_s("id", Attrs), - case {(StateData#state.config)#config.allow_query_users, - is_user_online_iq(StanzaId, From, StateData)} of - {true, {true, NewId, FromFull}} -> - case find_jid_by_nick(ToNick, StateData) of - false -> - case jlib:iq_query_info(Packet) of - reply -> - ok; - _ -> - ErrText = "Recipient is not in the conference room", - Err = jlib:make_error_reply( - Packet, ?ERRT_ITEM_NOT_FOUND(Lang, ErrText)), - route_stanza( - jlib:jid_replace_resource( - StateData#state.jid, ToNick), - From, Err) - end; - ToJID -> - {ok, #user{nick = FromNick}} = - ?DICT:find(jlib:jid_tolower(FromFull), - StateData#state.users), - {ToJID2, Packet2} = handle_iq_vcard(FromFull, ToJID, - StanzaId, NewId,Packet), - route_stanza( - jlib:jid_replace_resource(StateData#state.jid, FromNick), - ToJID2, Packet2) - end; - {_, {false, _, _}} -> - case jlib:iq_query_info(Packet) of - reply -> - ok; - _ -> - ErrText = "Only occupants are allowed to send queries to the conference", - Err = jlib:make_error_reply( - Packet, ?ERRT_NOT_ACCEPTABLE(Lang, ErrText)), - route_stanza( - jlib:jid_replace_resource(StateData#state.jid, ToNick), - From, Err) - end; - _ -> - case jlib:iq_query_info(Packet) of - reply -> - ok; - _ -> - ErrText = "Queries to the conference members are not allowed in this room", - Err = jlib:make_error_reply( - Packet, ?ERRT_NOT_ALLOWED(Lang, ErrText)), - route_stanza( - jlib:jid_replace_resource(StateData#state.jid, ToNick), - From, Err) - end - end, - {next_state, normal_state, StateData}; - -normal_state(_Event, StateData) -> - {next_state, normal_state, StateData}. - - - -%%---------------------------------------------------------------------- -%% Func: handle_event/3 -%% Returns: {next_state, NextStateName, NextStateData} | -%% {next_state, NextStateName, NextStateData, Timeout} | -%% {stop, Reason, NewStateData} -%%---------------------------------------------------------------------- -handle_event({service_message, Msg}, _StateName, StateData) -> - MessagePkt = {xmlelement, "message", - [{"type", "groupchat"}], - [{xmlelement, "body", [], [{xmlcdata, Msg}]}]}, - lists:foreach( - fun({_LJID, Info}) -> - route_stanza( - StateData#state.jid, - Info#user.jid, - MessagePkt) - end, - ?DICT:to_list(StateData#state.users)), - NSD = add_message_to_history("", - StateData#state.jid, - MessagePkt, - StateData), - {next_state, normal_state, NSD}; - -handle_event({destroy, Reason}, _StateName, StateData) -> - {result, [], stop} = - destroy_room( - {xmlelement, "destroy", - [{"xmlns", ?NS_MUC_OWNER}], - case Reason of - none -> []; - _Else -> - [{xmlelement, "reason", - [], [{xmlcdata, Reason}]}] - end}, StateData), - ?INFO_MSG("Destroyed MUC room ~s with reason: ~p", - [jlib:jid_to_string(StateData#state.jid), Reason]), - add_to_log(room_existence, destroyed, StateData), - {stop, shutdown, StateData}; -handle_event(destroy, StateName, StateData) -> - ?INFO_MSG("Destroyed MUC room ~s", - [jlib:jid_to_string(StateData#state.jid)]), - handle_event({destroy, none}, StateName, StateData); - -handle_event({set_affiliations, Affiliations}, StateName, StateData) -> - {next_state, StateName, StateData#state{affiliations = Affiliations}}; - -handle_event(_Event, StateName, StateData) -> - {next_state, StateName, StateData}. - -%%---------------------------------------------------------------------- -%% Func: handle_sync_event/4 -%% Returns: {next_state, NextStateName, NextStateData} | -%% {next_state, NextStateName, NextStateData, Timeout} | -%% {reply, Reply, NextStateName, NextStateData} | -%% {reply, Reply, NextStateName, NextStateData, Timeout} | -%% {stop, Reason, NewStateData} | -%% {stop, Reason, Reply, NewStateData} -%%---------------------------------------------------------------------- -handle_sync_event({moderate_room_history, Nick}, _From, StateName, #state{history = History} = StateData) -> - NewHistory = lqueue_filter(fun({FromNick, _TSPacket, _HaveSubject, _Timestamp, _Size}) -> - FromNick /= Nick - end, History), - Moderated = History#lqueue.len - NewHistory#lqueue.len, - {reply, {ok, integer_to_list(Moderated)}, StateName, StateData#state{history = NewHistory}}; - -handle_sync_event(persist_recent_messages, _From, StateName, StateData) -> - {reply, persist_muc_history(StateData), StateName, StateData}; - -handle_sync_event({get_disco_item, JID, Lang}, _From, StateName, StateData) -> - Reply = get_roomdesc_reply(JID, StateData, - get_roomdesc_tail(StateData, Lang)), - {reply, Reply, StateName, StateData}; -handle_sync_event(get_config, _From, StateName, StateData) -> - {reply, {ok, StateData#state.config}, StateName, StateData}; -handle_sync_event(get_state, _From, StateName, StateData) -> - {reply, {ok, StateData}, StateName, StateData}; -handle_sync_event({change_config, Config}, _From, StateName, StateData) -> - {result, [], NSD} = change_config(Config, StateData), - {reply, {ok, NSD#state.config}, StateName, NSD}; -handle_sync_event({change_state, NewStateData}, _From, StateName, _StateData) -> - {reply, {ok, NewStateData}, StateName, NewStateData}; -handle_sync_event(_Event, _From, StateName, StateData) -> - Reply = ok, - {reply, Reply, StateName, StateData}. - -code_change(_OldVsn, StateName, StateData, _Extra) -> - {ok, StateName, StateData}. - -print_state(StateData) -> - StateData. - -%%---------------------------------------------------------------------- -%% Func: handle_info/3 -%% Returns: {next_state, NextStateName, NextStateData} | -%% {next_state, NextStateName, NextStateData, Timeout} | -%% {stop, Reason, NewStateData} -%%---------------------------------------------------------------------- -handle_info({process_user_presence, From}, normal_state = _StateName, StateData) -> - RoomQueueEmpty = queue:is_empty(StateData#state.room_queue), - RoomQueue = queue:in({presence, From}, StateData#state.room_queue), - StateData1 = StateData#state{room_queue = RoomQueue}, - if - RoomQueueEmpty -> - StateData2 = prepare_room_queue(StateData1), - {next_state, normal_state, StateData2}; - true -> - {next_state, normal_state, StateData1} - end; -handle_info({process_user_message, From}, normal_state = _StateName, StateData) -> - RoomQueueEmpty = queue:is_empty(StateData#state.room_queue), - RoomQueue = queue:in({message, From}, StateData#state.room_queue), - StateData1 = StateData#state{room_queue = RoomQueue}, - if - RoomQueueEmpty -> - StateData2 = prepare_room_queue(StateData1), - {next_state, normal_state, StateData2}; - true -> - {next_state, normal_state, StateData1} - end; -handle_info(process_room_queue, normal_state = StateName, StateData) -> - case queue:out(StateData#state.room_queue) of - {{value, {message, From}}, RoomQueue} -> - Activity = get_user_activity(From, StateData), - Packet = Activity#activity.message, - NewActivity = Activity#activity{message = undefined}, - StateData1 = - store_user_activity( - From, NewActivity, StateData), - StateData2 = - StateData1#state{ - room_queue = RoomQueue}, - StateData3 = prepare_room_queue(StateData2), - process_groupchat_message(From, Packet, StateData3); - {{value, {presence, From}}, RoomQueue} -> - Activity = get_user_activity(From, StateData), - {Nick, Packet} = Activity#activity.presence, - NewActivity = Activity#activity{presence = undefined}, - StateData1 = - store_user_activity( - From, NewActivity, StateData), - StateData2 = - StateData1#state{ - room_queue = RoomQueue}, - StateData3 = prepare_room_queue(StateData2), - process_presence(From, Nick, Packet, StateData3); - {empty, _} -> - {next_state, StateName, StateData} - end; -handle_info({captcha_succeed, From}, normal_state, StateData) -> - NewState = case ?DICT:find(From, StateData#state.robots) of - {ok, {Nick, Packet}} -> - Robots = ?DICT:store(From, passed, StateData#state.robots), - add_new_user(From, Nick, Packet, StateData#state{robots=Robots}); - _ -> - StateData - end, - {next_state, normal_state, NewState}; -handle_info({captcha_failed, From}, normal_state, StateData) -> - NewState = case ?DICT:find(From, StateData#state.robots) of - {ok, {Nick, Packet}} -> - Robots = ?DICT:erase(From, StateData#state.robots), - Err = jlib:make_error_reply( - Packet, ?ERR_NOT_AUTHORIZED), - route_stanza( % TODO: s/Nick/""/ - jlib:jid_replace_resource( - StateData#state.jid, Nick), - From, Err), - StateData#state{robots=Robots}; - _ -> - StateData - end, - {next_state, normal_state, NewState}; -handle_info({migrate, Node}, StateName, StateData) -> - if Node /= node() -> - {migrate, StateData, - {Node, ?MODULE, start, [StateName, StateData]}, 0}; - true -> - {next_state, StateName, StateData} - end; -handle_info('shutdown', _StateName, StateData) -> - {stop, 'shutdown', StateData}; -handle_info(_Info, StateName, StateData) -> - {next_state, StateName, StateData}. - -%%---------------------------------------------------------------------- -%% Func: terminate/3 -%% Purpose: Shutdown the fsm -%% Returns: any -%%---------------------------------------------------------------------- -terminate({migrated, Clone}, _StateName, StateData) -> - ?INFO_MSG("Migrating room ~s@~s to ~p on node ~p", - [StateData#state.room, StateData#state.host, - Clone, node(Clone)]), - mod_muc:room_destroyed(StateData#state.host, StateData#state.room, - self(), StateData#state.server_host), - ok; -terminate(Reason, _StateName, StateData) -> - ?INFO_MSG("Stopping MUC room ~s@~s", - [StateData#state.room, StateData#state.host]), - ReasonT = case Reason of - shutdown -> "You are being removed from the room because" - " of a system shutdown"; - _ -> "Room terminates" - end, - ItemAttrs = [{"affiliation", "none"}, {"role", "none"}], - ReasonEl = {xmlelement, "reason", [], [{xmlcdata, ReasonT}]}, - Packet = {xmlelement, "presence", [{"type", "unavailable"}], - [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], - [{xmlelement, "item", ItemAttrs, [ReasonEl]}, - {xmlelement, "status", [{"code", "332"}], []} - ]}]}, - ?DICT:fold( - fun(LJID, Info, _) -> - Nick = Info#user.nick, - case Reason of - shutdown -> - route_stanza( - jlib:jid_replace_resource(StateData#state.jid, Nick), - Info#user.jid, - Packet); - _ -> ok - end, - tab_remove_online_user(LJID, StateData) - end, [], StateData#state.users), - add_to_log(room_existence, stopped, StateData), - if - Reason == 'shutdown' -> - persist_muc_history(StateData); - true -> - ok - end, - - mod_muc:room_destroyed(StateData#state.host, StateData#state.room, self(), - StateData#state.server_host), - ok. - -%%%---------------------------------------------------------------------- -%%% Internal functions -%%%---------------------------------------------------------------------- - -load_history(_Host, _Room, false, Queue) -> - Queue; -load_history(Host, Room, true, Queue) -> - ?INFO_MSG("Loading history for room ~s on host ~s", [Room, Host]), - case odbc_queries:load_roomhistory(Host, ejabberd_odbc:escape(Room)) of - {selected, ["nick", "packet", "have_subject", "timestamp", "size"], Items} -> - ?DEBUG("Found ~p messages on history for ~s", [length(Items), Room]), - lists:foldl(fun(I, Q) -> - {Nick, XML, HS, Ts, Size} = I, - Item = {Nick, - xml_stream:parse_element(XML), - HS /= "0", - calendar:gregorian_seconds_to_datetime(list_to_integer(Ts)), - list_to_integer(Size)}, - lqueue_in(Item, Q) - end, Queue, Items); - _ -> - Queue - end. - - -persist_muc_history(#state{room = Room, server_host = Server, config = #config{persistent = true} ,persist_history = true, history = Q}) -> - ?INFO_MSG("Persisting history for room ~s on host ~s", [Room, Server]), - Queries = lists:map(fun({FromNick, Packet, HaveSubject, Timestamp, Size}) -> - odbc_queries:add_roomhistory_sql( - ejabberd_odbc:escape(Room), - ejabberd_odbc:escape(FromNick), - ejabberd_odbc:escape(xml:element_to_binary(Packet)), - atom_to_list(HaveSubject), - integer_to_list(calendar:datetime_to_gregorian_seconds(Timestamp)), - integer_to_list(Size)) - end, lqueue_to_list(Q)), - odbc_queries:clear_and_add_roomhistory(Server,ejabberd_odbc:escape(Room), Queries), - {ok, {persisted, length(Queries)}}; - %% en mod_muc, cuando se levantan los muc persistentes, si se crea, y el flag persist_history esta en true, - %% se levantan los mensajes persistentes tb. - -persist_muc_history(_) -> - {ok, not_persistent}. - -route(Pid, From, ToNick, Packet) -> - ?GEN_FSM:send_event(Pid, {route, From, ToNick, Packet}). - -process_groupchat_message(From, {xmlelement, "message", Attrs, _Els} = Packet, - StateData) -> - Lang = xml:get_attr_s("xml:lang", Attrs), - case is_user_online(From, StateData) orelse - is_user_allowed_message_nonparticipant(From, StateData) of - true -> - {FromNick, Role} = get_participant_data(From, StateData), - if - (Role == moderator) or (Role == participant) - or ((StateData#state.config)#config.moderated == false) -> - {NewStateData1, IsAllowed} = - case check_subject(Packet) of - false -> - {StateData, true}; - Subject -> - case can_change_subject(Role, - StateData) of - true -> - NSD = - StateData#state{ - subject = Subject, - subject_author = - FromNick}, - case (NSD#state.config)#config.persistent of - true -> - mod_muc:store_room( - NSD#state.host, - NSD#state.room, - make_opts(NSD)); - _ -> - ok - end, - {NSD, true}; - _ -> - {StateData, false} - end - end, - case IsAllowed of - true -> - lists:foreach( - fun({_LJID, Info}) -> - route_stanza( - jlib:jid_replace_resource( - StateData#state.jid, - FromNick), - Info#user.jid, - Packet) - end, - ?DICT:to_list(StateData#state.users)), - NewStateData2 = - add_message_to_history(FromNick, - From, - Packet, - NewStateData1), - {next_state, normal_state, NewStateData2}; - _ -> - Err = - case (StateData#state.config)#config.allow_change_subj of - true -> - ?ERRT_FORBIDDEN( - Lang, - "Only moderators and participants " - "are allowed to change the subject in this room"); - _ -> - ?ERRT_FORBIDDEN( - Lang, - "Only moderators " - "are allowed to change the subject in this room") - end, - route_stanza( - StateData#state.jid, - From, - jlib:make_error_reply(Packet, Err)), - {next_state, normal_state, StateData} - end; - true -> - ErrText = "Visitors are not allowed to send messages to all occupants", - Err = jlib:make_error_reply( - Packet, ?ERRT_FORBIDDEN(Lang, ErrText)), - route_stanza( - StateData#state.jid, - From, Err), - {next_state, normal_state, StateData} - end; - false -> - ErrText = "Only occupants are allowed to send messages to the conference", - Err = jlib:make_error_reply( - Packet, ?ERRT_NOT_ACCEPTABLE(Lang, ErrText)), - route_stanza(StateData#state.jid, From, Err), - {next_state, normal_state, StateData} - end. - -%% @doc Check if this non participant can send message to room. -%% -%% XEP-0045 v1.23: -%% 7.9 Sending a Message to All Occupants -%% an implementation MAY allow users with certain privileges -%% (e.g., a room owner, room admin, or service-level admin) -%% to send messages to the room even if those users are not occupants. -is_user_allowed_message_nonparticipant(JID, StateData) -> - case get_service_affiliation(JID, StateData) of - owner -> - true; - _ -> false - end. - -%% @doc Get information of this participant, or default values. -%% If the JID is not a participant, return values for a service message. -get_participant_data(From, StateData) -> - case ?DICT:find(jlib:jid_tolower(From), StateData#state.users) of - {ok, #user{nick = FromNick, role = Role}} -> - {FromNick, Role}; - error -> - {"", moderator} - end. - - -process_presence(From, Nick, {xmlelement, "presence", Attrs, _Els} = Packet, - StateData) -> - Type = xml:get_attr_s("type", Attrs), - Lang = xml:get_attr_s("xml:lang", Attrs), - StateData1 = - case Type of - "unavailable" -> - case is_user_online(From, StateData) of - true -> - NewPacket = case {(StateData#state.config)#config.allow_visitor_status, - is_visitor(From, StateData)} of - {false, true} -> - strip_status(Packet); - _ -> - Packet - end, - NewState = - add_user_presence_un(From, NewPacket, StateData), - case ?DICT:find(Nick, StateData#state.nicks) of - {ok, [_, _ | _]} -> ok; - _ -> send_new_presence(From, NewState) - end, - Reason = case xml:get_subtag(NewPacket, "status") of - false -> ""; - Status_el -> xml:get_tag_cdata(Status_el) - end, - remove_online_user(From, NewState, Reason); - _ -> - StateData - end; - "error" -> - case is_user_online(From, StateData) of - true -> - ErrorText = "This participant is kicked from the room because " - "he sent an error presence", - expulse_participant(Packet, From, StateData, - translate:translate(Lang, ErrorText)); - _ -> - StateData - end; - "" -> - case is_user_online(From, StateData) of - true -> - case is_nick_change(From, Nick, StateData) of - true -> - case {nick_collision(From, Nick, StateData), - mod_muc:can_use_nick( - StateData#state.host, From, Nick), - {(StateData#state.config)#config.allow_visitor_nickchange, - is_visitor(From, StateData)}} of - {_, _, {false, true}} -> - ErrText = "Visitors are not allowed to change their nicknames in this room", - Err = jlib:make_error_reply( - Packet, - ?ERRT_NOT_ALLOWED(Lang, ErrText)), - route_stanza( - % TODO: s/Nick/""/ - jlib:jid_replace_resource( - StateData#state.jid, - Nick), - From, Err), - StateData; - {true, _, _} -> - Lang = xml:get_attr_s("xml:lang", Attrs), - ErrText = "That nickname is already in use by another occupant", - Err = jlib:make_error_reply( - Packet, - ?ERRT_CONFLICT(Lang, ErrText)), - route_stanza( - jlib:jid_replace_resource( - StateData#state.jid, - Nick), % TODO: s/Nick/""/ - From, Err), - StateData; - {_, false, _} -> - ErrText = "That nickname is registered by another person", - Err = jlib:make_error_reply( - Packet, - ?ERRT_CONFLICT(Lang, ErrText)), - route_stanza( - % TODO: s/Nick/""/ - jlib:jid_replace_resource( - StateData#state.jid, - Nick), - From, Err), - StateData; - _ -> - change_nick(From, Nick, StateData) - end; - _NotNickChange -> - Stanza = case {(StateData#state.config)#config.allow_visitor_status, - is_visitor(From, StateData)} of - {false, true} -> - strip_status(Packet); - _Allowed -> - Packet - end, - NewState = add_user_presence(From, Stanza, StateData), - send_new_presence(From, NewState), - NewState - end; - _ -> - add_new_user(From, Nick, Packet, StateData) - end; - _ -> - StateData - end, - case (not (StateData1#state.config)#config.persistent) andalso - (?DICT:to_list(StateData1#state.users) == []) of - true -> - ?INFO_MSG("Destroyed MUC room ~s because it's temporary and empty", - [jlib:jid_to_string(StateData#state.jid)]), - add_to_log(room_existence, destroyed, StateData), - {stop, normal, StateData1}; - _ -> - {next_state, normal_state, StateData1} - end. - -is_user_online(JID, StateData) -> - LJID = jlib:jid_tolower(JID), - ?DICT:is_key(LJID, StateData#state.users). - -%% Check if the user is occupant of the room, or at least is an admin or owner. -is_occupant_or_admin(JID, StateData) -> - FAffiliation = get_affiliation(JID, StateData), - FRole = get_role(JID, StateData), - case (FRole /= none) orelse - (FAffiliation == admin) orelse - (FAffiliation == owner) of - true -> - true; - _ -> - false - end. - -%%% -%%% Handle IQ queries of vCard -%%% -is_user_online_iq(StanzaId, JID, StateData) when JID#jid.lresource /= "" -> - {is_user_online(JID, StateData), StanzaId, JID}; -is_user_online_iq(StanzaId, JID, StateData) when JID#jid.lresource == "" -> - try stanzaid_unpack(StanzaId) of - {OriginalId, Resource} -> - JIDWithResource = jlib:jid_replace_resource(JID, Resource), - {is_user_online(JIDWithResource, StateData), - OriginalId, JIDWithResource} - catch - _:_ -> - {is_user_online(JID, StateData), StanzaId, JID} - end. - -handle_iq_vcard(FromFull, ToJID, StanzaId, NewId, Packet) -> - ToBareJID = jlib:jid_remove_resource(ToJID), - IQ = jlib:iq_query_info(Packet), - handle_iq_vcard2(FromFull, ToJID, ToBareJID, StanzaId, NewId, IQ, Packet). -handle_iq_vcard2(_FromFull, ToJID, ToBareJID, StanzaId, _NewId, - #iq{type = get, xmlns = ?NS_VCARD}, Packet) - when ToBareJID /= ToJID -> - {ToBareJID, change_stanzaid(StanzaId, ToJID, Packet)}; -handle_iq_vcard2(_FromFull, ToJID, _ToBareJID, _StanzaId, NewId, _IQ, Packet) -> - {ToJID, change_stanzaid(NewId, Packet)}. - -stanzaid_pack(OriginalId, Resource) -> - "berd"++base64:encode_to_string("ejab\0" ++ OriginalId ++ "\0" ++ Resource). -stanzaid_unpack("berd"++StanzaIdBase64) -> - StanzaId = base64:decode_to_string(StanzaIdBase64), - ["ejab", OriginalId, Resource] = string:tokens(StanzaId, "\0"), - {OriginalId, Resource}. - -change_stanzaid(NewId, Packet) -> - {xmlelement, Name, Attrs, Els} = jlib:remove_attr("id", Packet), - {xmlelement, Name, [{"id", NewId} | Attrs], Els}. -change_stanzaid(PreviousId, ToJID, Packet) -> - NewId = stanzaid_pack(PreviousId, ToJID#jid.lresource), - change_stanzaid(NewId, Packet). -%%% -%%% - -role_to_list(Role) -> - case Role of - moderator -> "moderator"; - participant -> "participant"; - visitor -> "visitor"; - none -> "none" - end. - -affiliation_to_list(Affiliation) -> - case Affiliation of - owner -> "owner"; - admin -> "admin"; - member -> "member"; - outcast -> "outcast"; - none -> "none" - end. - -list_to_role(Role) -> - case Role of - "moderator" -> moderator; - "participant" -> participant; - "visitor" -> visitor; - "none" -> none - end. - -list_to_affiliation(Affiliation) -> - case Affiliation of - "owner" -> owner; - "admin" -> admin; - "member" -> member; - "outcast" -> outcast; - "none" -> none - end. - -%% Decide the fate of the message and its sender -%% Returns: continue_delivery | forget_message | {expulse_sender, Reason} -decide_fate_message("error", Packet, From, StateData) -> - %% Make a preliminary decision - PD = case check_error_kick(Packet) of - %% If this is an error stanza and its condition matches a criteria - true -> - Reason = io_lib:format("This participant is considered a ghost and is expulsed: ~s", - [jlib:jid_to_string(From)]), - {expulse_sender, Reason}; - false -> - continue_delivery - end, - case PD of - {expulse_sender, R} -> - case is_user_online(From, StateData) of - true -> - {expulse_sender, R}; - false -> - forget_message - end; - Other -> - Other - end; - -decide_fate_message(_, _, _, _) -> - continue_delivery. - -%% Check if the elements of this error stanza indicate -%% that the sender is a dead participant. -%% If so, return true to kick the participant. -check_error_kick(Packet) -> - case get_error_condition(Packet) of - "gone" -> true; - "internal-server-error" -> true; - "item-not-found" -> true; - "jid-malformed" -> true; - "recipient-unavailable" -> true; - "redirect" -> true; - "remote-server-not-found" -> true; - "remote-server-timeout" -> true; - "service-unavailable" -> true; - _ -> false - end. - -get_error_condition(Packet) -> - case catch get_error_condition2(Packet) of - {condition, ErrorCondition} -> - ErrorCondition; - {'EXIT', _} -> - "badformed error stanza" - end. -get_error_condition2(Packet) -> - {xmlelement, _, _, EEls} = xml:get_subtag(Packet, "error"), - [Condition] = [Name || {xmlelement, Name, [{"xmlns", ?NS_STANZAS}], []} <- EEls], - {condition, Condition}. - -expulse_participant(Packet, From, StateData, Reason1) -> - ErrorCondition = get_error_condition(Packet), - Reason2 = io_lib:format(Reason1 ++ ": " ++ "~s", [ErrorCondition]), - NewState = add_user_presence_un( - From, - {xmlelement, "presence", - [{"type", "unavailable"}], - [{xmlelement, "status", [], - [{xmlcdata, Reason2}] - }]}, - StateData), - send_new_presence(From, NewState), - remove_online_user(From, NewState). - - -set_affiliation(JID, Affiliation, StateData) -> - set_affiliation(JID, Affiliation, StateData, ""). - -set_affiliation(JID, Affiliation, StateData, Reason) -> - LJID = jlib:jid_remove_resource(jlib:jid_tolower(JID)), - Affiliations = case Affiliation of - none -> - ?DICT:erase(LJID, - StateData#state.affiliations); - _ -> - ?DICT:store(LJID, - {Affiliation, Reason}, - StateData#state.affiliations) - end, - StateData#state{affiliations = Affiliations}. - -get_affiliation(JID, StateData) -> - {_AccessRoute, _AccessCreate, AccessAdmin, _AccessPersistent} = StateData#state.access, - Res = - case acl:match_rule(StateData#state.server_host, AccessAdmin, JID) of - allow -> - owner; - _ -> - LJID = jlib:jid_tolower(JID), - case ?DICT:find(LJID, StateData#state.affiliations) of - {ok, Affiliation} -> - Affiliation; - _ -> - LJID1 = jlib:jid_remove_resource(LJID), - case ?DICT:find(LJID1, StateData#state.affiliations) of - {ok, Affiliation} -> - Affiliation; - _ -> - LJID2 = setelement(1, LJID, ""), - case ?DICT:find(LJID2, StateData#state.affiliations) of - {ok, Affiliation} -> - Affiliation; - _ -> - LJID3 = jlib:jid_remove_resource(LJID2), - case ?DICT:find(LJID3, StateData#state.affiliations) of - {ok, Affiliation} -> - Affiliation; - _ -> - none - end - end - end - end - end, - case Res of - {A, _Reason} -> - A; - _ -> - Res - end. - -get_service_affiliation(JID, StateData) -> - {_AccessRoute, _AccessCreate, AccessAdmin, _AccessPersistent} = - StateData#state.access, - case acl:match_rule(StateData#state.server_host, AccessAdmin, JID) of - allow -> - owner; - _ -> - none - end. - -set_role(JID, Role, StateData) -> - LJID = jlib:jid_tolower(JID), - LJIDs = case LJID of - {U, S, ""} -> - ?DICT:fold( - fun(J, _, Js) -> - case J of - {U, S, _} -> - [J | Js]; - _ -> - Js - end - end, [], StateData#state.users); - _ -> - case ?DICT:is_key(LJID, StateData#state.users) of - true -> - [LJID]; - _ -> - [] - end - end, - {Users, Nicks} - = case Role of - none -> - lists:foldl(fun(J, {Us, Ns}) -> - NewNs = - case ?DICT:find(J, Us) of - {ok, #user{nick = Nick}} -> - ?DICT:erase(Nick, Ns); - _ -> - Ns - end, - {?DICT:erase(J, Us), NewNs} - end, - {StateData#state.users, StateData#state.nicks}, - LJIDs); - _ -> - {lists:foldl(fun(J, Us) -> - {ok, User} = ?DICT:find(J, Us), - ?DICT:store(J, - User#user{role = Role}, - Us) - end, StateData#state.users, LJIDs), - StateData#state.nicks} - end, - StateData#state{users = Users, nicks = Nicks}. - -get_role(JID, StateData) -> - LJID = jlib:jid_tolower(JID), - case ?DICT:find(LJID, StateData#state.users) of - {ok, #user{role = Role}} -> - Role; - _ -> - none - end. - -get_default_role(Affiliation, StateData) -> - case Affiliation of - owner -> moderator; - admin -> moderator; - member -> participant; - outcast -> none; - none -> - case (StateData#state.config)#config.members_only of - true -> - none; - _ -> - case (StateData#state.config)#config.members_by_default of - true -> - participant; - _ -> - visitor - end - end - end. - -is_visitor(Jid, StateData) -> - get_role(Jid, StateData) =:= visitor. - -is_moderator(Jid, StateData) -> - get_role(Jid, StateData) =:= moderator. - -get_max_users(StateData) -> - MaxUsers = (StateData#state.config)#config.max_users, - ServiceMaxUsers = get_service_max_users(StateData), - if - MaxUsers =< ServiceMaxUsers -> MaxUsers; - true -> ServiceMaxUsers - end. - -get_service_max_users(StateData) -> - gen_mod:get_module_opt(StateData#state.server_host, - mod_muc, max_users, ?MAX_USERS_DEFAULT). - -get_max_users_admin_threshold(StateData) -> - gen_mod:get_module_opt(StateData#state.server_host, - mod_muc, max_users_admin_threshold, 5). - -get_user_activity(JID, StateData) -> - case treap:lookup(jlib:jid_tolower(JID), - StateData#state.activity) of - {ok, _P, A} -> A; - error -> - MessageShaper = - shaper:new(gen_mod:get_module_opt( - StateData#state.server_host, - mod_muc, user_message_shaper, none)), - PresenceShaper = - shaper:new(gen_mod:get_module_opt( - StateData#state.server_host, - mod_muc, user_presence_shaper, none)), - #activity{message_shaper = MessageShaper, - presence_shaper = PresenceShaper} - end. - -store_user_activity(JID, UserActivity, StateData) -> - MinMessageInterval = - gen_mod:get_module_opt( - StateData#state.server_host, - mod_muc, min_message_interval, 0), - MinPresenceInterval = - gen_mod:get_module_opt( - StateData#state.server_host, - mod_muc, min_presence_interval, 0), - Key = jlib:jid_tolower(JID), - Now = now_to_usec(now()), - Activity1 = clean_treap(StateData#state.activity, {1, -Now}), - Activity = - case treap:lookup(Key, Activity1) of - {ok, _P, _A} -> - treap:delete(Key, Activity1); - error -> - Activity1 - end, - StateData1 = - case (MinMessageInterval == 0) andalso - (MinPresenceInterval == 0) andalso - (UserActivity#activity.message_shaper == none) andalso - (UserActivity#activity.presence_shaper == none) andalso - (UserActivity#activity.message == undefined) andalso - (UserActivity#activity.presence == undefined) of - true -> - StateData#state{activity = Activity}; - false -> - case (UserActivity#activity.message == undefined) andalso - (UserActivity#activity.presence == undefined) of - true -> - {_, MessageShaperInterval} = - shaper:update(UserActivity#activity.message_shaper, - 100000), - {_, PresenceShaperInterval} = - shaper:update(UserActivity#activity.presence_shaper, - 100000), - Delay = lists:max([MessageShaperInterval, - PresenceShaperInterval, - MinMessageInterval * 1000, - MinPresenceInterval * 1000]) * 1000, - Priority = {1, -(Now + Delay)}, - StateData#state{ - activity = treap:insert( - Key, - Priority, - UserActivity, - Activity)}; - false -> - Priority = {0, 0}, - StateData#state{ - activity = treap:insert( - Key, - Priority, - UserActivity, - Activity)} - end - end, - StateData1. - -clean_treap(Treap, CleanPriority) -> - case treap:is_empty(Treap) of - true -> - Treap; - false -> - {_Key, Priority, _Value} = treap:get_root(Treap), - if - Priority > CleanPriority -> - clean_treap(treap:delete_root(Treap), CleanPriority); - true -> - Treap - end - end. - - -prepare_room_queue(StateData) -> - case queue:out(StateData#state.room_queue) of - {{value, {message, From}}, _RoomQueue} -> - Activity = get_user_activity(From, StateData), - Packet = Activity#activity.message, - Size = element_size(Packet), - {RoomShaper, RoomShaperInterval} = - shaper:update(StateData#state.room_shaper, Size), - erlang:send_after( - RoomShaperInterval, self(), - process_room_queue), - StateData#state{ - room_shaper = RoomShaper}; - {{value, {presence, From}}, _RoomQueue} -> - Activity = get_user_activity(From, StateData), - {_Nick, Packet} = Activity#activity.presence, - Size = element_size(Packet), - {RoomShaper, RoomShaperInterval} = - shaper:update(StateData#state.room_shaper, Size), - erlang:send_after( - RoomShaperInterval, self(), - process_room_queue), - StateData#state{ - room_shaper = RoomShaper}; - {empty, _} -> - StateData - end. - - -add_online_user(JID, Nick, Role, StateData) -> - LJID = jlib:jid_tolower(JID), - Users = ?DICT:store(LJID, - #user{jid = JID, - nick = Nick, - role = Role}, - StateData#state.users), - add_to_log(join, Nick, StateData), - Nicks = ?DICT:update(Nick, - fun(Entry) -> - case lists:member(LJID, Entry) of - true -> - Entry; - false -> - [LJID|Entry] - end - end, - [LJID], - StateData#state.nicks), - tab_add_online_user(JID, StateData), - StateData#state{users = Users, nicks = Nicks}. - -remove_online_user(JID, StateData) -> - remove_online_user(JID, StateData, ""). - -remove_online_user(JID, StateData, Reason) -> - LJID = jlib:jid_tolower(JID), - {ok, #user{nick = Nick}} = - ?DICT:find(LJID, StateData#state.users), - add_to_log(leave, {Nick, Reason}, StateData), - tab_remove_online_user(JID, StateData), - Users = ?DICT:erase(LJID, StateData#state.users), - Nicks = case ?DICT:find(Nick, StateData#state.nicks) of - {ok, [LJID]} -> - ?DICT:erase(Nick, StateData#state.nicks); - {ok, U} -> - ?DICT:store(Nick, U -- [LJID], StateData#state.nicks); - error -> - StateData#state.nicks - end, - StateData#state{users = Users, nicks = Nicks}. - - -filter_presence({xmlelement, "presence", Attrs, Els}) -> - FEls = lists:filter( - fun(El) -> - case El of - {xmlcdata, _} -> - false; - {xmlelement, _Name1, Attrs1, _Els1} -> - XMLNS = xml:get_attr_s("xmlns", Attrs1), - case XMLNS of - ?NS_MUC ++ _ -> - false; - _ -> - true - end - end - end, Els), - {xmlelement, "presence", Attrs, FEls}. - -strip_status({xmlelement, "presence", Attrs, Els}) -> - FEls = lists:filter( - fun({xmlelement, "status", _Attrs1, _Els1}) -> - false; - (_) -> true - end, Els), - {xmlelement, "presence", Attrs, FEls}. - -add_user_presence(JID, Presence, StateData) -> - LJID = jlib:jid_tolower(JID), - FPresence = filter_presence(Presence), - Users = - ?DICT:update( - LJID, - fun(#user{} = User) -> - User#user{last_presence = FPresence} - end, StateData#state.users), - StateData#state{users = Users}. - -add_user_presence_un(JID, Presence, StateData) -> - LJID = jlib:jid_tolower(JID), - FPresence = filter_presence(Presence), - Users = - ?DICT:update( - LJID, - fun(#user{} = User) -> - User#user{last_presence = FPresence, - role = none} - end, StateData#state.users), - StateData#state{users = Users}. - - -%% Find and return a list of the full JIDs of the users of Nick. -%% Return jid record. -find_jids_by_nick(Nick, StateData) -> - case ?DICT:find(Nick, StateData#state.nicks) of - {ok, [User]} -> - [jlib:make_jid(User)]; - {ok, Users} -> - [jlib:make_jid(LJID) || LJID <- Users]; - error -> - false - end. - -%% Find and return the full JID of the user of Nick with -%% highest-priority presence. Return jid record. -find_jid_by_nick(Nick, StateData) -> - case ?DICT:find(Nick, StateData#state.nicks) of - {ok, [User]} -> - jlib:make_jid(User); - {ok, [FirstUser|Users]} -> - #user{last_presence = FirstPresence} = - ?DICT:fetch(FirstUser, StateData#state.users), - {LJID, _} = - lists:foldl(fun(Compare, {HighestUser, HighestPresence}) -> - #user{last_presence = P1} = - ?DICT:fetch(Compare, StateData#state.users), - case higher_presence(P1, HighestPresence) of - true -> - {Compare, P1}; - false -> - {HighestUser, HighestPresence} - end - end, {FirstUser, FirstPresence}, Users), - jlib:make_jid(LJID); - error -> - false - end. - -higher_presence(Pres1, Pres2) -> - Pri1 = get_priority_from_presence(Pres1), - Pri2 = get_priority_from_presence(Pres2), - Pri1 > Pri2. - -get_priority_from_presence(PresencePacket) -> - case xml:get_subtag(PresencePacket, "priority") of - false -> - 0; - SubEl -> - case catch list_to_integer(xml:get_tag_cdata(SubEl)) of - P when is_integer(P) -> - P; - _ -> - 0 - end - end. - -find_nick_by_jid(Jid, StateData) -> - [{_, #user{nick = Nick}}] = lists:filter( - fun({_, #user{jid = FJid}}) -> FJid == Jid end, - ?DICT:to_list(StateData#state.users)), - Nick. - -is_nick_change(JID, Nick, StateData) -> - LJID = jlib:jid_tolower(JID), - case Nick of - "" -> - false; - _ -> - {ok, #user{nick = OldNick}} = - ?DICT:find(LJID, StateData#state.users), - Nick /= OldNick - end. - -nick_collision(User, Nick, StateData) -> - UserOfNick = find_jid_by_nick(Nick, StateData), - %% if nick is not used, or is used by another resource of the same - %% user, it's ok. - UserOfNick /= false andalso - jlib:jid_remove_resource(jlib:jid_tolower(UserOfNick)) /= - jlib:jid_remove_resource(jlib:jid_tolower(User)). - -add_new_user(From, Nick, {xmlelement, _, Attrs, Els} = Packet, StateData) -> - Lang = xml:get_attr_s("xml:lang", Attrs), - MaxUsers = get_max_users(StateData), - MaxAdminUsers = MaxUsers + get_max_users_admin_threshold(StateData), - NUsers = dict:fold(fun(_, _, Acc) -> Acc + 1 end, 0, - StateData#state.users), - Affiliation = get_affiliation(From, StateData), - ServiceAffiliation = get_service_affiliation(From, StateData), - NConferences = tab_count_user(From), - MaxConferences = gen_mod:get_module_opt( - StateData#state.server_host, - mod_muc, max_user_conferences, 10), - Collision = nick_collision(From, Nick, StateData), - case {(ServiceAffiliation == owner orelse - ((Affiliation == admin orelse Affiliation == owner) andalso - NUsers < MaxAdminUsers) orelse - NUsers < MaxUsers) andalso - NConferences < MaxConferences, - Collision, - mod_muc:can_use_nick(StateData#state.host, From, Nick), - get_default_role(Affiliation, StateData)} of - {false, _, _, _} -> - % max user reached and user is not admin or owner - Err = jlib:make_error_reply( - Packet, - ?ERR_SERVICE_UNAVAILABLE), - route_stanza( % TODO: s/Nick/""/ - jlib:jid_replace_resource(StateData#state.jid, Nick), - From, Err), - StateData; - {_, _, _, none} -> - Err = jlib:make_error_reply( - Packet, - case Affiliation of - outcast -> - ErrText = "You have been banned from this room", - ?ERRT_FORBIDDEN(Lang, ErrText); - _ -> - ErrText = "Membership is required to enter this room", - ?ERRT_REGISTRATION_REQUIRED(Lang, ErrText) - end), - route_stanza( % TODO: s/Nick/""/ - jlib:jid_replace_resource(StateData#state.jid, Nick), - From, Err), - StateData; - {_, true, _, _} -> - ErrText = "That nickname is already in use by another occupant", - Err = jlib:make_error_reply(Packet, ?ERRT_CONFLICT(Lang, ErrText)), - route_stanza( - % TODO: s/Nick/""/ - jlib:jid_replace_resource(StateData#state.jid, Nick), - From, Err), - StateData; - {_, _, false, _} -> - ErrText = "That nickname is registered by another person", - Err = jlib:make_error_reply(Packet, ?ERRT_CONFLICT(Lang, ErrText)), - route_stanza( - % TODO: s/Nick/""/ - jlib:jid_replace_resource(StateData#state.jid, Nick), - From, Err), - StateData; - {_, _, _, Role} -> - case check_password(ServiceAffiliation, Affiliation, - Els, From, StateData) of - true -> - NewState = - add_user_presence( - From, Packet, - add_online_user(From, Nick, Role, StateData)), - if not (NewState#state.config)#config.anonymous -> - WPacket = {xmlelement, "message", [{"type", "groupchat"}], - [{xmlelement, "body", [], - [{xmlcdata, translate:translate( - Lang, - "This room is not anonymous")}]}, - {xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], - [{xmlelement, "status", [{"code", "100"}], []}]}]}, - route_stanza( - StateData#state.jid, - From, WPacket); - true -> - ok - end, - send_existing_presences(From, NewState), - send_new_presence(From, NewState), - Shift = count_stanza_shift(Nick, Els, NewState), - case send_history(From, Shift, NewState) of - true -> - ok; - _ -> - send_subject(From, Lang, StateData) - end, - case NewState#state.just_created of - true -> - NewState#state{just_created = false}; - false -> - Robots = ?DICT:erase(From, StateData#state.robots), - NewState#state{robots = Robots} - end; - nopass -> - ErrText = "A password is required to enter this room", - Err = jlib:make_error_reply( - Packet, ?ERRT_NOT_AUTHORIZED(Lang, ErrText)), - route_stanza( % TODO: s/Nick/""/ - jlib:jid_replace_resource( - StateData#state.jid, Nick), - From, Err), - StateData; - captcha_required -> - SID = xml:get_attr_s("id", Attrs), - RoomJID = StateData#state.jid, - To = jlib:jid_replace_resource(RoomJID, Nick), - Limiter = {From#jid.luser, From#jid.lserver}, - case ejabberd_captcha:create_captcha( - SID, RoomJID, To, Lang, Limiter, From) of - {ok, ID, CaptchaEls} -> - MsgPkt = {xmlelement, "message", [{"id", ID}], CaptchaEls}, - Robots = ?DICT:store(From, - {Nick, Packet}, StateData#state.robots), - route_stanza(RoomJID, From, MsgPkt), - StateData#state{robots = Robots}; - {error, limit} -> - ErrText = "Too many CAPTCHA requests", - Err = jlib:make_error_reply( - Packet, ?ERRT_RESOURCE_CONSTRAINT(Lang, ErrText)), - route_stanza( % TODO: s/Nick/""/ - jlib:jid_replace_resource( - StateData#state.jid, Nick), - From, Err), - StateData; - _ -> - ErrText = "Unable to generate a captcha", - Err = jlib:make_error_reply( - Packet, ?ERRT_INTERNAL_SERVER_ERROR(Lang, ErrText)), - route_stanza( % TODO: s/Nick/""/ - jlib:jid_replace_resource( - StateData#state.jid, Nick), - From, Err), - StateData - end; - _ -> - ErrText = "Incorrect password", - Err = jlib:make_error_reply( - Packet, ?ERRT_NOT_AUTHORIZED(Lang, ErrText)), - route_stanza( % TODO: s/Nick/""/ - jlib:jid_replace_resource( - StateData#state.jid, Nick), - From, Err), - StateData - end - end. - -check_password(owner, _Affiliation, _Els, _From, _StateData) -> - %% Don't check pass if user is owner in MUC service (access_admin option) - true; -check_password(_ServiceAffiliation, Affiliation, Els, From, StateData) -> - case (StateData#state.config)#config.password_protected of - false -> - check_captcha(Affiliation, From, StateData); - true -> - Pass = extract_password(Els), - case Pass of - false -> - nopass; - _ -> - case (StateData#state.config)#config.password of - Pass -> - true; - _ -> - false - end - end - end. - -check_captcha(Affiliation, From, StateData) -> - case (StateData#state.config)#config.captcha_protected - andalso ejabberd_captcha:is_feature_available() of - true when Affiliation == none -> - case ?DICT:find(From, StateData#state.robots) of - {ok, passed} -> - true; - _ -> - WList = (StateData#state.config)#config.captcha_whitelist, - #jid{luser = U, lserver = S, lresource = R} = From, - case ?SETS:is_element({U, S, R}, WList) of - true -> - true; - false -> - case ?SETS:is_element({U, S, ""}, WList) of - true -> - true; - false -> - case ?SETS:is_element({"", S, ""}, WList) of - true -> - true; - false -> - captcha_required - end - end - end - end; - _ -> - true - end. - -extract_password([]) -> - false; -extract_password([{xmlelement, _Name, Attrs, _SubEls} = El | Els]) -> - case xml:get_attr_s("xmlns", Attrs) of - ?NS_MUC -> - case xml:get_subtag(El, "password") of - false -> - false; - SubEl -> - xml:get_tag_cdata(SubEl) - end; - _ -> - extract_password(Els) - end; -extract_password([_ | Els]) -> - extract_password(Els). - -count_stanza_shift(Nick, Els, StateData) -> - HL = lqueue_to_list(StateData#state.history), - Since = extract_history(Els, "since"), - Shift0 = case Since of - false -> - 0; - _ -> - Sin = calendar:datetime_to_gregorian_seconds(Since), - count_seconds_shift(Sin, HL) - end, - Seconds = extract_history(Els, "seconds"), - Shift1 = case Seconds of - false -> - 0; - _ -> - Sec = calendar:datetime_to_gregorian_seconds( - calendar:now_to_universal_time(now())) - Seconds, - count_seconds_shift(Sec, HL) - end, - MaxStanzas = extract_history(Els, "maxstanzas"), - Shift2 = case MaxStanzas of - false -> - 0; - _ -> - count_maxstanzas_shift(MaxStanzas, HL) - end, - MaxChars = extract_history(Els, "maxchars"), - Shift3 = case MaxChars of - false -> - 0; - _ -> - count_maxchars_shift(Nick, MaxChars, HL) - end, - lists:max([Shift0, Shift1, Shift2, Shift3]). - -count_seconds_shift(Seconds, HistoryList) -> - lists:sum( - lists:map( - fun({_Nick, _Packet, _HaveSubject, TimeStamp, _Size}) -> - T = calendar:datetime_to_gregorian_seconds(TimeStamp), - if - T < Seconds -> - 1; - true -> - 0 - end - end, HistoryList)). - -count_maxstanzas_shift(MaxStanzas, HistoryList) -> - S = length(HistoryList) - MaxStanzas, - if - S =< 0 -> - 0; - true -> - S - end. - -count_maxchars_shift(Nick, MaxSize, HistoryList) -> - NLen = string:len(Nick) + 1, - Sizes = lists:map( - fun({_Nick, _Packet, _HaveSubject, _TimeStamp, Size}) -> - Size + NLen - end, HistoryList), - calc_shift(MaxSize, Sizes). - -calc_shift(MaxSize, Sizes) -> - Total = lists:sum(Sizes), - calc_shift(MaxSize, Total, 0, Sizes). - -calc_shift(_MaxSize, _Size, Shift, []) -> - Shift; -calc_shift(MaxSize, Size, Shift, [S | TSizes]) -> - if - MaxSize >= Size -> - Shift; - true -> - calc_shift(MaxSize, Size - S, Shift + 1, TSizes) - end. - -extract_history([], _Type) -> - false; -extract_history([{xmlelement, _Name, Attrs, _SubEls} = El | Els], Type) -> - case xml:get_attr_s("xmlns", Attrs) of - ?NS_MUC -> - AttrVal = xml:get_path_s(El, - [{elem, "history"}, {attr, Type}]), - case Type of - "since" -> - case jlib:datetime_string_to_timestamp(AttrVal) of - undefined -> - false; - TS -> - calendar:now_to_universal_time(TS) - end; - _ -> - case catch list_to_integer(AttrVal) of - IntVal when is_integer(IntVal) and (IntVal >= 0) -> - IntVal; - _ -> - false - end - end; - _ -> - extract_history(Els, Type) - end; -extract_history([_ | Els], Type) -> - extract_history(Els, Type). - - -send_update_presence(JID, StateData) -> - send_update_presence(JID, "", StateData). - -send_update_presence(JID, Reason, StateData) -> - LJID = jlib:jid_tolower(JID), - LJIDs = case LJID of - {U, S, ""} -> - ?DICT:fold( - fun(J, _, Js) -> - case J of - {U, S, _} -> - [J | Js]; - _ -> - Js - end - end, [], StateData#state.users); - _ -> - case ?DICT:is_key(LJID, StateData#state.users) of - true -> - [LJID]; - _ -> - [] - end - end, - lists:foreach(fun(J) -> - send_new_presence(J, Reason, StateData) - end, LJIDs). - -send_new_presence(NJID, StateData) -> - send_new_presence(NJID, "", StateData). - -send_new_presence(NJID, Reason, StateData) -> - %% First, find the nick associated with this JID. - #user{nick = Nick} = ?DICT:fetch(jlib:jid_tolower(NJID), StateData#state.users), - %% Then find the JID using this nick with highest priority. - LJID = find_jid_by_nick(Nick, StateData), - %% Then we get the presence data we're supposed to send. - {ok, #user{jid = RealJID, - role = Role, - last_presence = Presence}} = - ?DICT:find(jlib:jid_tolower(LJID), StateData#state.users), - Affiliation = get_affiliation(LJID, StateData), - SAffiliation = affiliation_to_list(Affiliation), - SRole = role_to_list(Role), - lists:foreach( - fun({_LJID, Info}) -> - ItemAttrs = - case (Info#user.role == moderator) orelse - ((StateData#state.config)#config.anonymous == false) of - true -> - [{"jid", jlib:jid_to_string(RealJID)}, - {"affiliation", SAffiliation}, - {"role", SRole}]; - _ -> - [{"affiliation", SAffiliation}, - {"role", SRole}] - end, - ItemEls = case Reason of - "" -> - []; - _ -> - [{xmlelement, "reason", [], - [{xmlcdata, Reason}]}] - end, - Status = case StateData#state.just_created of - true -> - [{xmlelement, "status", [{"code", "201"}], []}]; - false -> - [] - end, - Status2 = case ((StateData#state.config)#config.anonymous==false) - andalso (NJID == Info#user.jid) of - true -> - [{xmlelement, "status", [{"code", "100"}], []} - | Status]; - false -> - Status - end, - Status3 = case NJID == Info#user.jid of - true -> - [{xmlelement, "status", [{"code", "110"}], []} - | Status2]; - false -> - Status2 - end, - Packet = xml:append_subtags( - Presence, - [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], - [{xmlelement, "item", ItemAttrs, ItemEls} | Status3]}]), - route_stanza( - jlib:jid_replace_resource(StateData#state.jid, Nick), - Info#user.jid, - Packet) - end, ?DICT:to_list(StateData#state.users)). - - -send_existing_presences(ToJID, StateData) -> - LToJID = jlib:jid_tolower(ToJID), - {ok, #user{jid = RealToJID, - role = Role}} = - ?DICT:find(LToJID, StateData#state.users), - lists:foreach( - fun({FromNick, _Users}) -> - LJID = find_jid_by_nick(FromNick, StateData), - #user{jid = FromJID, - role = FromRole, - last_presence = Presence - } = ?DICT:fetch(jlib:jid_tolower(LJID), StateData#state.users), - case RealToJID of - FromJID -> - ok; - _ -> - FromAffiliation = get_affiliation(LJID, StateData), - ItemAttrs = - case (Role == moderator) orelse - ((StateData#state.config)#config.anonymous == - false) of - true -> - [{"jid", jlib:jid_to_string(FromJID)}, - {"affiliation", - affiliation_to_list(FromAffiliation)}, - {"role", role_to_list(FromRole)}]; - _ -> - [{"affiliation", - affiliation_to_list(FromAffiliation)}, - {"role", role_to_list(FromRole)}] - end, - Packet = xml:append_subtags( - Presence, - [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], - [{xmlelement, "item", ItemAttrs, []}]}]), - route_stanza( - jlib:jid_replace_resource( - StateData#state.jid, FromNick), - RealToJID, - Packet) - end - end, ?DICT:to_list(StateData#state.nicks)). - - -now_to_usec({MSec, Sec, USec}) -> - (MSec*1000000 + Sec)*1000000 + USec. - - -change_nick(JID, Nick, StateData) -> - LJID = jlib:jid_tolower(JID), - {ok, #user{nick = OldNick}} = - ?DICT:find(LJID, StateData#state.users), - Users = - ?DICT:update( - LJID, - fun(#user{} = User) -> - User#user{nick = Nick} - end, StateData#state.users), - OldNickUsers = ?DICT:fetch(OldNick, StateData#state.nicks), - NewNickUsers = case ?DICT:find(Nick, StateData#state.nicks) of - {ok, U} -> U; - error -> [] - end, - %% Send unavailable presence from the old nick if it's no longer - %% used. - SendOldUnavailable = length(OldNickUsers) == 1, - %% If we send unavailable presence from the old nick, we should - %% probably send presence from the new nick, in order not to - %% confuse clients. Otherwise, do it only if the new nick was - %% unused. - SendNewAvailable = SendOldUnavailable orelse - NewNickUsers == [], - Nicks = - case OldNickUsers of - [LJID] -> - ?DICT:store(Nick, [LJID|NewNickUsers], - ?DICT:erase(OldNick, StateData#state.nicks)); - [_|_] -> - ?DICT:store(Nick, [LJID|NewNickUsers], - ?DICT:store(OldNick, OldNickUsers -- [LJID], - StateData#state.nicks)) - end, - NewStateData = StateData#state{users = Users, nicks = Nicks}, - send_nick_changing(JID, OldNick, NewStateData, SendOldUnavailable, SendNewAvailable), - add_to_log(nickchange, {OldNick, Nick}, StateData), - NewStateData. - -send_nick_changing(JID, OldNick, StateData, - SendOldUnavailable, SendNewAvailable) -> - {ok, #user{jid = RealJID, - nick = Nick, - role = Role, - last_presence = Presence}} = - ?DICT:find(jlib:jid_tolower(JID), StateData#state.users), - Affiliation = get_affiliation(JID, StateData), - SAffiliation = affiliation_to_list(Affiliation), - SRole = role_to_list(Role), - lists:foreach( - fun({_LJID, Info}) -> - ItemAttrs1 = - case (Info#user.role == moderator) orelse - ((StateData#state.config)#config.anonymous == false) of - true -> - [{"jid", jlib:jid_to_string(RealJID)}, - {"affiliation", SAffiliation}, - {"role", SRole}, - {"nick", Nick}]; - _ -> - [{"affiliation", SAffiliation}, - {"role", SRole}, - {"nick", Nick}] - end, - ItemAttrs2 = - case (Info#user.role == moderator) orelse - ((StateData#state.config)#config.anonymous == false) of - true -> - [{"jid", jlib:jid_to_string(RealJID)}, - {"affiliation", SAffiliation}, - {"role", SRole}]; - _ -> - [{"affiliation", SAffiliation}, - {"role", SRole}] - end, - Packet1 = - {xmlelement, "presence", [{"type", "unavailable"}], - [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], - [{xmlelement, "item", ItemAttrs1, []}, - {xmlelement, "status", [{"code", "303"}], []}]}]}, - Packet2 = xml:append_subtags( - Presence, - [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], - [{xmlelement, "item", ItemAttrs2, []}]}]), - if SendOldUnavailable -> - route_stanza( - jlib:jid_replace_resource(StateData#state.jid, OldNick), - Info#user.jid, - Packet1); - true -> - ok - end, - if SendNewAvailable -> - route_stanza( - jlib:jid_replace_resource(StateData#state.jid, Nick), - Info#user.jid, - Packet2); - true -> - ok - end - end, ?DICT:to_list(StateData#state.users)). - - -lqueue_new(Max) -> - #lqueue{queue = queue:new(), - len = 0, - max = Max}. - -%% If the message queue limit is set to 0, do not store messages. -lqueue_in(_Item, LQ = #lqueue{max = 0}) -> - LQ; -%% Otherwise, rotate messages in the queue store. -lqueue_in(Item, #lqueue{queue = Q1, len = Len, max = Max}) -> - Q2 = queue:in(Item, Q1), - if - Len >= Max -> - Q3 = lqueue_cut(Q2, Len - Max + 1), - #lqueue{queue = Q3, len = Max, max = Max}; - true -> - #lqueue{queue = Q2, len = Len + 1, max = Max} - end. - -lqueue_cut(Q, 0) -> - Q; -lqueue_cut(Q, N) -> - {_, Q1} = queue:out(Q), - lqueue_cut(Q1, N - 1). - -lqueue_to_list(#lqueue{queue = Q1}) -> - queue:to_list(Q1). - -lqueue_filter(F, #lqueue{queue = Q1} = LQ) -> - Q2 = queue:filter(F, Q1), - LQ#lqueue{queue = Q2, len = queue:len(Q2)}. - -add_message_to_history(FromNick, FromJID, Packet, StateData) -> - HaveSubject = case xml:get_subtag(Packet, "subject") of - false -> - false; - _ -> - true - end, - TimeStamp = calendar:now_to_universal_time(now()), - %% Chatroom history is stored as XMPP packets, so - %% the decision to include the original sender's JID or not is based on the - %% chatroom configuration when the message was originally sent. - %% Also, if the chatroom is anonymous, even moderators will not get the real JID - SenderJid = case ((StateData#state.config)#config.anonymous) of - true -> StateData#state.jid; - false -> FromJID - end, - TSPacket = xml:append_subtags(Packet, - [jlib:timestamp_to_xml(TimeStamp, utc, SenderJid, ""), - %% TODO: Delete the next line once XEP-0091 is Obsolete - jlib:timestamp_to_xml(TimeStamp)]), - SPacket = jlib:replace_from_to( - jlib:jid_replace_resource(StateData#state.jid, FromNick), - StateData#state.jid, - TSPacket), - Size = element_size(SPacket), - Q1 = lqueue_in({FromNick, TSPacket, HaveSubject, TimeStamp, Size}, - StateData#state.history), - add_to_log(text, {FromNick, Packet}, StateData), - StateData#state{history = Q1}. - -send_history(JID, Shift, StateData) -> - lists:foldl( - fun({Nick, Packet, HaveSubject, _TimeStamp, _Size}, B) -> - route_stanza( - jlib:jid_replace_resource(StateData#state.jid, Nick), - JID, - Packet), - B or HaveSubject - end, false, lists:nthtail(Shift, lqueue_to_list(StateData#state.history))). - - -send_subject(JID, Lang, StateData) -> - case StateData#state.subject_author of - "" -> - ok; - Nick -> - Subject = StateData#state.subject, - Packet = {xmlelement, "message", [{"type", "groupchat"}], - [{xmlelement, "subject", [], [{xmlcdata, Subject}]}, - {xmlelement, "body", [], - [{xmlcdata, - Nick ++ - translate:translate(Lang, - " has set the subject to: ") ++ - Subject}]}]}, - route_stanza( - StateData#state.jid, - JID, - Packet) - end. - -check_subject(Packet) -> - case xml:get_subtag(Packet, "subject") of - false -> - false; - SubjEl -> - xml:get_tag_cdata(SubjEl) - end. - -can_change_subject(Role, StateData) -> - case (StateData#state.config)#config.allow_change_subj of - true -> - (Role == moderator) orelse (Role == participant); - _ -> - Role == moderator - end. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Admin stuff - -process_iq_admin(From, set, Lang, SubEl, StateData) -> - {xmlelement, _, _, Items} = SubEl, - process_admin_items_set(From, Items, Lang, StateData); - -process_iq_admin(From, get, Lang, SubEl, StateData) -> - case xml:get_subtag(SubEl, "item") of - false -> - {error, ?ERR_BAD_REQUEST}; - Item -> - FAffiliation = get_affiliation(From, StateData), - FRole = get_role(From, StateData), - case xml:get_tag_attr("role", Item) of - false -> - case xml:get_tag_attr("affiliation", Item) of - false -> - {error, ?ERR_BAD_REQUEST}; - {value, StrAffiliation} -> - case catch list_to_affiliation(StrAffiliation) of - {'EXIT', _} -> - {error, ?ERR_BAD_REQUEST}; - SAffiliation -> - if - (FAffiliation == owner) or - (FAffiliation == admin) -> - Items = items_with_affiliation( - SAffiliation, StateData), - {result, Items, StateData}; - true -> - ErrText = "Administrator privileges required", - {error, ?ERRT_FORBIDDEN(Lang, ErrText)} - end - end - end; - {value, StrRole} -> - case catch list_to_role(StrRole) of - {'EXIT', _} -> - {error, ?ERR_BAD_REQUEST}; - SRole -> - if - FRole == moderator -> - Items = items_with_role(SRole, StateData), - {result, Items, StateData}; - true -> - ErrText = "Moderator privileges required", - {error, ?ERRT_FORBIDDEN(Lang, ErrText)} - end - end - end - end. - - -items_with_role(SRole, StateData) -> - lists:map( - fun({_, U}) -> - user_to_item(U, StateData) - end, search_role(SRole, StateData)). - -items_with_affiliation(SAffiliation, StateData) -> - lists:map( - fun({JID, {Affiliation, Reason}}) -> - {xmlelement, "item", - [{"affiliation", affiliation_to_list(Affiliation)}, - {"jid", jlib:jid_to_string(JID)}], - [{xmlelement, "reason", [], [{xmlcdata, Reason}]}]}; - ({JID, Affiliation}) -> - {xmlelement, "item", - [{"affiliation", affiliation_to_list(Affiliation)}, - {"jid", jlib:jid_to_string(JID)}], - []} - end, search_affiliation(SAffiliation, StateData)). - -user_to_item(#user{role = Role, - nick = Nick, - jid = JID - }, StateData) -> - Affiliation = get_affiliation(JID, StateData), - {xmlelement, "item", - [{"role", role_to_list(Role)}, - {"affiliation", affiliation_to_list(Affiliation)}, - {"nick", Nick}, - {"jid", jlib:jid_to_string(JID)}], - []}. - -search_role(Role, StateData) -> - lists:filter( - fun({_, #user{role = R}}) -> - Role == R - end, ?DICT:to_list(StateData#state.users)). - -search_affiliation(Affiliation, StateData) -> - lists:filter( - fun({_, A}) -> - case A of - {A1, _Reason} -> - Affiliation == A1; - _ -> - Affiliation == A - end - end, ?DICT:to_list(StateData#state.affiliations)). - - -process_admin_items_set(UJID, Items, Lang, StateData) -> - UAffiliation = get_affiliation(UJID, StateData), - URole = get_role(UJID, StateData), - case find_changed_items(UJID, UAffiliation, URole, Items, Lang, StateData, []) of - {result, Res} -> - ?INFO_MSG("Processing MUC admin query from ~s in room ~s:~n ~p", - [jlib:jid_to_string(UJID), jlib:jid_to_string(StateData#state.jid), Res]), - NSD = - lists:foldl( - fun(E, SD) -> - case catch ( - case E of - {JID, affiliation, owner, _} - when (JID#jid.luser == "") -> - %% If the provided JID does not have username, - %% forget the affiliation completely - SD; - {JID, role, none, Reason} -> - catch send_kickban_presence( - JID, Reason, "307", SD), - set_role(JID, none, SD); - {JID, affiliation, none, Reason} -> - case (SD#state.config)#config.members_only of - true -> - catch send_kickban_presence( - JID, Reason, "321", none, SD), - SD1 = set_affiliation(JID, none, SD), - set_role(JID, none, SD1); - _ -> - SD1 = set_affiliation(JID, none, SD), - send_update_presence(JID, SD1), - SD1 - end; - {JID, affiliation, outcast, Reason} -> - catch send_kickban_presence( - JID, Reason, "301", outcast, SD), - set_affiliation( - JID, outcast, - set_role(JID, none, SD), Reason); - {JID, affiliation, A, Reason} when - (A == admin) or (A == owner) -> - SD1 = set_affiliation(JID, A, SD, Reason), - SD2 = set_role(JID, moderator, SD1), - send_update_presence(JID, Reason, SD2), - SD2; - {JID, affiliation, member, Reason} -> - SD1 = set_affiliation( - JID, member, SD, Reason), - SD2 = set_role(JID, participant, SD1), - send_update_presence(JID, Reason, SD2), - SD2; - {JID, role, Role, Reason} -> - SD1 = set_role(JID, Role, SD), - catch send_new_presence(JID, Reason, SD1), - SD1; - {JID, affiliation, A, _Reason} -> - SD1 = set_affiliation(JID, A, SD), - send_update_presence(JID, SD1), - SD1 - end - ) of - {'EXIT', ErrReason} -> - ?ERROR_MSG("MUC ITEMS SET ERR: ~p~n", - [ErrReason]), - SD; - NSD -> - NSD - end - end, StateData, lists:flatten(Res)), - case (NSD#state.config)#config.persistent of - true -> - mod_muc:store_room(NSD#state.host, NSD#state.room, - make_opts(NSD)); - _ -> - ok - end, - {result, [], NSD}; - Err -> - Err - end. - - -find_changed_items(_UJID, _UAffiliation, _URole, [], _Lang, _StateData, Res) -> - {result, Res}; -find_changed_items(UJID, UAffiliation, URole, [{xmlcdata, _} | Items], - Lang, StateData, Res) -> - find_changed_items(UJID, UAffiliation, URole, Items, Lang, StateData, Res); -find_changed_items(UJID, UAffiliation, URole, - [{xmlelement, "item", Attrs, _Els} = Item | Items], - Lang, StateData, Res) -> - TJID = case xml:get_attr("jid", Attrs) of - {value, S} -> - case jlib:string_to_jid(S) of - error -> - ErrText = io_lib:format( - translate:translate( - Lang, - "Jabber ID ~s is invalid"), [S]), - {error, ?ERRT_NOT_ACCEPTABLE(Lang, ErrText)}; - J -> - {value, [J]} - end; - _ -> - case xml:get_attr("nick", Attrs) of - {value, N} -> - case find_jids_by_nick(N, StateData) of - false -> - ErrText = - io_lib:format( - translate:translate( - Lang, - "Nickname ~s does not exist in the room"), - [N]), - {error, ?ERRT_NOT_ACCEPTABLE(Lang, ErrText)}; - J -> - {value, J} - end; - _ -> - {error, ?ERR_BAD_REQUEST} - end - end, - case TJID of - {value, [JID|_]=JIDs} -> - TAffiliation = get_affiliation(JID, StateData), - TRole = get_role(JID, StateData), - case xml:get_attr("role", Attrs) of - false -> - case xml:get_attr("affiliation", Attrs) of - false -> - {error, ?ERR_BAD_REQUEST}; - {value, StrAffiliation} -> - case catch list_to_affiliation(StrAffiliation) of - {'EXIT', _} -> - ErrText1 = - io_lib:format( - translate:translate( - Lang, - "Invalid affiliation: ~s"), - [StrAffiliation]), - {error, ?ERRT_NOT_ACCEPTABLE(Lang, ErrText1)}; - SAffiliation -> - ServiceAf = get_service_affiliation(JID, StateData), - CanChangeRA = - case can_change_ra( - UAffiliation, URole, - TAffiliation, TRole, - affiliation, SAffiliation, - ServiceAf) of - nothing -> - nothing; - true -> - true; - check_owner -> - case search_affiliation( - owner, StateData) of - [{OJID, _}] -> - jlib:jid_remove_resource(OJID) /= - jlib:jid_tolower(jlib:jid_remove_resource(UJID)); - _ -> - true - end; - _ -> - false - end, - case CanChangeRA of - nothing -> - find_changed_items( - UJID, - UAffiliation, URole, - Items, Lang, StateData, - Res); - true -> - Reason = xml:get_path_s(Item, [{elem, "reason"}, cdata]), - MoreRes = [{jlib:jid_remove_resource(Jidx), affiliation, SAffiliation, Reason} || Jidx <- JIDs], - find_changed_items( - UJID, - UAffiliation, URole, - Items, Lang, StateData, - [MoreRes | Res]); - false -> - {error, ?ERR_NOT_ALLOWED} - end - end - end; - {value, StrRole} -> - case catch list_to_role(StrRole) of - {'EXIT', _} -> - ErrText1 = - io_lib:format( - translate:translate( - Lang, - "Invalid role: ~s"), - [StrRole]), - {error, ?ERRT_BAD_REQUEST(Lang, ErrText1)}; - SRole -> - ServiceAf = get_service_affiliation(JID, StateData), - CanChangeRA = - case can_change_ra( - UAffiliation, URole, - TAffiliation, TRole, - role, SRole, - ServiceAf) of - nothing -> - nothing; - true -> - true; - check_owner -> - case search_affiliation( - owner, StateData) of - [{OJID, _}] -> - jlib:jid_remove_resource(OJID) /= - jlib:jid_tolower(jlib:jid_remove_resource(UJID)); - _ -> - true - end; - _ -> - false - end, - case CanChangeRA of - nothing -> - find_changed_items( - UJID, - UAffiliation, URole, - Items, Lang, StateData, - Res); - true -> - Reason = xml:get_path_s(Item, [{elem, "reason"}, cdata]), - MoreRes = [{Jidx, role, SRole, Reason} || Jidx <- JIDs], - find_changed_items( - UJID, - UAffiliation, URole, - Items, Lang, StateData, - [MoreRes | Res]); - _ -> - {error, ?ERR_NOT_ALLOWED} - end - end - end; - Err -> - Err - end; -find_changed_items(_UJID, _UAffiliation, _URole, _Items, - _Lang, _StateData, _Res) -> - {error, ?ERR_BAD_REQUEST}. - - -can_change_ra(_FAffiliation, _FRole, - owner, _TRole, - affiliation, owner, owner) -> - %% A room owner tries to add as persistent owner a - %% participant that is already owner because he is MUC admin - true; -can_change_ra(_FAffiliation, _FRole, - _TAffiliation, _TRole, - _RoleorAffiliation, _Value, owner) -> - %% Nobody can decrease MUC admin's role/affiliation - false; -can_change_ra(_FAffiliation, _FRole, - TAffiliation, _TRole, - affiliation, Value, _ServiceAf) - when (TAffiliation == Value) -> - nothing; -can_change_ra(_FAffiliation, _FRole, - _TAffiliation, TRole, - role, Value, _ServiceAf) - when (TRole == Value) -> - nothing; -can_change_ra(FAffiliation, _FRole, - outcast, _TRole, - affiliation, none, _ServiceAf) - when (FAffiliation == owner) or (FAffiliation == admin) -> - true; -can_change_ra(FAffiliation, _FRole, - outcast, _TRole, - affiliation, member, _ServiceAf) - when (FAffiliation == owner) or (FAffiliation == admin) -> - true; -can_change_ra(owner, _FRole, - outcast, _TRole, - affiliation, admin, _ServiceAf) -> - true; -can_change_ra(owner, _FRole, - outcast, _TRole, - affiliation, owner, _ServiceAf) -> - true; -can_change_ra(FAffiliation, _FRole, - none, _TRole, - affiliation, outcast, _ServiceAf) - when (FAffiliation == owner) or (FAffiliation == admin) -> - true; -can_change_ra(FAffiliation, _FRole, - none, _TRole, - affiliation, member, _ServiceAf) - when (FAffiliation == owner) or (FAffiliation == admin) -> - true; -can_change_ra(owner, _FRole, - none, _TRole, - affiliation, admin, _ServiceAf) -> - true; -can_change_ra(owner, _FRole, - none, _TRole, - affiliation, owner, _ServiceAf) -> - true; -can_change_ra(FAffiliation, _FRole, - member, _TRole, - affiliation, outcast, _ServiceAf) - when (FAffiliation == owner) or (FAffiliation == admin) -> - true; -can_change_ra(FAffiliation, _FRole, - member, _TRole, - affiliation, none, _ServiceAf) - when (FAffiliation == owner) or (FAffiliation == admin) -> - true; -can_change_ra(owner, _FRole, - member, _TRole, - affiliation, admin, _ServiceAf) -> - true; -can_change_ra(owner, _FRole, - member, _TRole, - affiliation, owner, _ServiceAf) -> - true; -can_change_ra(owner, _FRole, - admin, _TRole, - affiliation, _Affiliation, _ServiceAf) -> - true; -can_change_ra(owner, _FRole, - owner, _TRole, - affiliation, _Affiliation, _ServiceAf) -> - check_owner; -can_change_ra(_FAffiliation, _FRole, - _TAffiliation, _TRole, - affiliation, _Value, _ServiceAf) -> - false; -can_change_ra(_FAffiliation, moderator, - _TAffiliation, visitor, - role, none, _ServiceAf) -> - true; -can_change_ra(_FAffiliation, moderator, - _TAffiliation, visitor, - role, participant, _ServiceAf) -> - true; -can_change_ra(FAffiliation, _FRole, - _TAffiliation, visitor, - role, moderator, _ServiceAf) - when (FAffiliation == owner) or (FAffiliation == admin) -> - true; -can_change_ra(_FAffiliation, moderator, - _TAffiliation, participant, - role, none, _ServiceAf) -> - true; -can_change_ra(_FAffiliation, moderator, - _TAffiliation, participant, - role, visitor, _ServiceAf) -> - true; -can_change_ra(FAffiliation, _FRole, - _TAffiliation, participant, - role, moderator, _ServiceAf) - when (FAffiliation == owner) or (FAffiliation == admin) -> - true; -can_change_ra(_FAffiliation, _FRole, - owner, moderator, - role, visitor, _ServiceAf) -> - false; -can_change_ra(owner, _FRole, - _TAffiliation, moderator, - role, visitor, _ServiceAf) -> - true; -can_change_ra(_FAffiliation, _FRole, - admin, moderator, - role, visitor, _ServiceAf) -> - false; -can_change_ra(admin, _FRole, - _TAffiliation, moderator, - role, visitor, _ServiceAf) -> - true; -can_change_ra(_FAffiliation, _FRole, - owner, moderator, - role, participant, _ServiceAf) -> - false; -can_change_ra(owner, _FRole, - _TAffiliation, moderator, - role, participant, _ServiceAf) -> - true; -can_change_ra(_FAffiliation, _FRole, - admin, moderator, - role, participant, _ServiceAf) -> - false; -can_change_ra(admin, _FRole, - _TAffiliation, moderator, - role, participant, _ServiceAf) -> - true; -can_change_ra(_FAffiliation, _FRole, - _TAffiliation, _TRole, - role, _Value, _ServiceAf) -> - false. - - -send_kickban_presence(JID, Reason, Code, StateData) -> - NewAffiliation = get_affiliation(JID, StateData), - send_kickban_presence(JID, Reason, Code, NewAffiliation, StateData). - -send_kickban_presence(JID, Reason, Code, NewAffiliation, StateData) -> - LJID = jlib:jid_tolower(JID), - LJIDs = case LJID of - {U, S, ""} -> - ?DICT:fold( - fun(J, _, Js) -> - case J of - {U, S, _} -> - [J | Js]; - _ -> - Js - end - end, [], StateData#state.users); - _ -> - case ?DICT:is_key(LJID, StateData#state.users) of - true -> - [LJID]; - _ -> - [] - end - end, - lists:foreach(fun(J) -> - {ok, #user{nick = Nick}} = - ?DICT:find(J, StateData#state.users), - add_to_log(kickban, {Nick, Reason, Code}, StateData), - tab_remove_online_user(J, StateData), - send_kickban_presence1(J, Reason, Code, NewAffiliation, StateData) - end, LJIDs). - -send_kickban_presence1(UJID, Reason, Code, Affiliation, StateData) -> - {ok, #user{jid = RealJID, - nick = Nick}} = - ?DICT:find(jlib:jid_tolower(UJID), StateData#state.users), - SAffiliation = affiliation_to_list(Affiliation), - BannedJIDString = jlib:jid_to_string(RealJID), - lists:foreach( - fun({_LJID, Info}) -> - JidAttrList = case (Info#user.role == moderator) orelse - ((StateData#state.config)#config.anonymous - == false) of - true -> [{"jid", BannedJIDString}]; - false -> [] - end, - ItemAttrs = [{"affiliation", SAffiliation}, - {"role", "none"}] ++ JidAttrList, - ItemEls = case Reason of - "" -> - []; - _ -> - [{xmlelement, "reason", [], - [{xmlcdata, Reason}]}] - end, - Packet = {xmlelement, "presence", [{"type", "unavailable"}], - [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], - [{xmlelement, "item", ItemAttrs, ItemEls}, - {xmlelement, "status", [{"code", Code}], []}]}]}, - route_stanza( - jlib:jid_replace_resource(StateData#state.jid, Nick), - Info#user.jid, - Packet) - end, ?DICT:to_list(StateData#state.users)). - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Owner stuff - -process_iq_owner(From, set, Lang, SubEl, StateData) -> - FAffiliation = get_affiliation(From, StateData), - case FAffiliation of - owner -> - {xmlelement, _Name, _Attrs, Els} = SubEl, - 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, [], StateData}; - {?NS_XDATA, "submit"} -> - case is_allowed_log_change(XEl, StateData, From) - andalso - is_allowed_persistent_change(XEl, StateData, - From) - andalso - is_allowed_room_name_desc_limits(XEl, - StateData) - andalso - is_password_settings_correct(XEl, StateData) of - true -> set_config(XEl, StateData); - false -> {error, ?ERR_NOT_ACCEPTABLE} - end; - _ -> - {error, ?ERR_BAD_REQUEST} - end; - [{xmlelement, "destroy", _Attrs1, _Els1} = SubEl1] -> - ?INFO_MSG("Destroyed MUC room ~s by the owner ~s", - [jlib:jid_to_string(StateData#state.jid), jlib:jid_to_string(From)]), - add_to_log(room_existence, destroyed, StateData), - destroy_room(SubEl1, StateData); - Items -> - process_admin_items_set(From, Items, Lang, StateData) - end; - _ -> - ErrText = "Owner privileges required", - {error, ?ERRT_FORBIDDEN(Lang, ErrText)} - end; - -process_iq_owner(From, get, Lang, SubEl, StateData) -> - FAffiliation = get_affiliation(From, StateData), - case FAffiliation of - owner -> - {xmlelement, _Name, _Attrs, Els} = SubEl, - case xml:remove_cdata(Els) of - [] -> - get_config(Lang, StateData, From); - [Item] -> - case xml:get_tag_attr("affiliation", Item) of - false -> - {error, ?ERR_BAD_REQUEST}; - {value, StrAffiliation} -> - case catch list_to_affiliation(StrAffiliation) of - {'EXIT', _} -> - ErrText = - io_lib:format( - translate:translate( - Lang, - "Invalid affiliation: ~s"), - [StrAffiliation]), - {error, ?ERRT_NOT_ACCEPTABLE(Lang, ErrText)}; - SAffiliation -> - Items = items_with_affiliation( - SAffiliation, StateData), - {result, Items, StateData} - end - end; - _ -> - {error, ?ERR_FEATURE_NOT_IMPLEMENTED} - end; - _ -> - ErrText = "Owner privileges required", - {error, ?ERRT_FORBIDDEN(Lang, ErrText)} - end. - -is_allowed_log_change(XEl, StateData, From) -> - case lists:keymember("muc#roomconfig_enablelogging", 1, - jlib:parse_xdata_submit(XEl)) of - false -> - true; - true -> - (allow == mod_muc_log:check_access_log( - StateData#state.server_host, From)) - end. - -is_allowed_persistent_change(XEl, StateData, From) -> - case lists:keymember("muc#roomconfig_persistentroom", 1, - jlib:parse_xdata_submit(XEl)) of - false -> - true; - true -> - {_AccessRoute, _AccessCreate, _AccessAdmin, AccessPersistent} = StateData#state.access, - (allow == acl:match_rule(StateData#state.server_host, AccessPersistent, From)) - end. - -%% Check if the Room Name and Room Description defined in the Data Form -%% are conformant to the configured limits -is_allowed_room_name_desc_limits(XEl, StateData) -> - IsNameAccepted = - case lists:keysearch("muc#roomconfig_roomname", 1, - jlib:parse_xdata_submit(XEl)) of - {value, {_, [N]}} -> - length(N) =< gen_mod:get_module_opt(StateData#state.server_host, - mod_muc, max_room_name, - infinite); - _ -> - true - end, - IsDescAccepted = - case lists:keysearch("muc#roomconfig_roomdesc", 1, - jlib:parse_xdata_submit(XEl)) of - {value, {_, [D]}} -> - length(D) =< gen_mod:get_module_opt(StateData#state.server_host, - mod_muc, max_room_desc, - infinite); - _ -> - true - end, - IsNameAccepted and IsDescAccepted. - -%% Return false if: -%% "the password for a password-protected room is blank" -is_password_settings_correct(XEl, StateData) -> - Config = StateData#state.config, - OldProtected = Config#config.password_protected, - OldPassword = Config#config.password, - NewProtected = - case lists:keysearch("muc#roomconfig_passwordprotectedroom", 1, - jlib:parse_xdata_submit(XEl)) of - {value, {_, ["1"]}} -> - true; - {value, {_, ["0"]}} -> - false; - _ -> - undefined - end, - NewPassword = - case lists:keysearch("muc#roomconfig_roomsecret", 1, - jlib:parse_xdata_submit(XEl)) of - {value, {_, [P]}} -> - P; - _ -> - undefined - end, - case {OldProtected, NewProtected, OldPassword, NewPassword} of - {true, undefined, "", undefined} -> - false; - {true, undefined, _, ""} -> - false; - {_, true , "", undefined} -> - false; - {_, true, _, ""} -> - false; - _ -> - true - end. - - --define(XFIELD(Type, Label, Var, Val), - {xmlelement, "field", [{"type", Type}, - {"label", translate:translate(Lang, Label)}, - {"var", Var}], - [{xmlelement, "value", [], [{xmlcdata, Val}]}]}). - --define(BOOLXFIELD(Label, Var, Val), - ?XFIELD("boolean", Label, Var, - case Val of - true -> "1"; - _ -> "0" - end)). - --define(STRINGXFIELD(Label, Var, Val), - ?XFIELD("text-single", Label, Var, Val)). - --define(PRIVATEXFIELD(Label, Var, Val), - ?XFIELD("text-private", Label, Var, Val)). - --define(JIDMULTIXFIELD(Label, Var, JIDList), - {xmlelement, "field", [{"type", "jid-multi"}, - {"label", translate:translate(Lang, Label)}, - {"var", Var}], - [{xmlelement, "value", [], [{xmlcdata, jlib:jid_to_string(JID)}]} - || JID <- JIDList]}). - -get_default_room_maxusers(RoomState) -> - DefRoomOpts = gen_mod:get_module_opt(RoomState#state.server_host, mod_muc, default_room_options, []), - RoomState2 = set_opts(DefRoomOpts, RoomState), - (RoomState2#state.config)#config.max_users. - -get_config(Lang, StateData, From) -> - {_AccessRoute, _AccessCreate, _AccessAdmin, AccessPersistent} = StateData#state.access, - ServiceMaxUsers = get_service_max_users(StateData), - DefaultRoomMaxUsers = get_default_room_maxusers(StateData), - Config = StateData#state.config, - {MaxUsersRoomInteger, MaxUsersRoomString} = - case get_max_users(StateData) of - N when is_integer(N) -> - {N, erlang:integer_to_list(N)}; - _ -> {0, "none"} - end, - Res = - [{xmlelement, "title", [], - [{xmlcdata, io_lib:format(translate:translate(Lang, "Configuration of room ~s"), [jlib:jid_to_string(StateData#state.jid)])}]}, - {xmlelement, "field", [{"type", "hidden"}, - {"var", "FORM_TYPE"}], - [{xmlelement, "value", [], - [{xmlcdata, "http://jabber.org/protocol/muc#roomconfig"}]}]}, - ?STRINGXFIELD("Room title", - "muc#roomconfig_roomname", - Config#config.title), - ?STRINGXFIELD("Room description", - "muc#roomconfig_roomdesc", - Config#config.description) - ] ++ - case acl:match_rule(StateData#state.server_host, AccessPersistent, From) of - allow -> - [?BOOLXFIELD( - "Make room persistent", - "muc#roomconfig_persistentroom", - Config#config.persistent)]; - _ -> [] - end ++ [ - ?BOOLXFIELD("Make room public searchable", - "muc#roomconfig_publicroom", - Config#config.public), - ?BOOLXFIELD("Make participants list public", - "public_list", - Config#config.public_list), - ?BOOLXFIELD("Make room password protected", - "muc#roomconfig_passwordprotectedroom", - Config#config.password_protected), - ?PRIVATEXFIELD("Password", - "muc#roomconfig_roomsecret", - case Config#config.password_protected of - true -> Config#config.password; - false -> "" - end), - {xmlelement, "field", - [{"type", "list-single"}, - {"label", translate:translate(Lang, "Maximum Number of Occupants")}, - {"var", "muc#roomconfig_maxusers"}], - [{xmlelement, "value", [], [{xmlcdata, MaxUsersRoomString}]}] ++ - if - is_integer(ServiceMaxUsers) -> []; - true -> - [{xmlelement, "option", - [{"label", translate:translate(Lang, "No limit")}], - [{xmlelement, "value", [], [{xmlcdata, "none"}]}]}] - end ++ - [{xmlelement, "option", [{"label", erlang:integer_to_list(N)}], - [{xmlelement, "value", [], - [{xmlcdata, erlang:integer_to_list(N)}]}]} || - N <- lists:usort([ServiceMaxUsers, DefaultRoomMaxUsers, MaxUsersRoomInteger | - ?MAX_USERS_DEFAULT_LIST]), N =< ServiceMaxUsers] - }, - {xmlelement, "field", - [{"type", "list-single"}, - {"label", translate:translate(Lang, "Present real Jabber IDs to")}, - {"var", "muc#roomconfig_whois"}], - [{xmlelement, "value", [], [{xmlcdata, - if Config#config.anonymous -> - "moderators"; - true -> - "anyone" - end}]}, - {xmlelement, "option", [{"label", translate:translate(Lang, "moderators only")}], - [{xmlelement, "value", [], [{xmlcdata, "moderators"}]}]}, - {xmlelement, "option", [{"label", translate:translate(Lang, "anyone")}], - [{xmlelement, "value", [], [{xmlcdata, "anyone"}]}]}]}, - ?BOOLXFIELD("Make room members-only", - "muc#roomconfig_membersonly", - Config#config.members_only), - ?BOOLXFIELD("Make room moderated", - "muc#roomconfig_moderatedroom", - Config#config.moderated), - ?BOOLXFIELD("Default users as participants", - "members_by_default", - Config#config.members_by_default), - ?BOOLXFIELD("Allow users to change the subject", - "muc#roomconfig_changesubject", - Config#config.allow_change_subj), - ?BOOLXFIELD("Allow users to send private messages", - "allow_private_messages", - Config#config.allow_private_messages), - {xmlelement, "field", - [{"type", "list-single"}, - {"label", translate:translate(Lang, "Allow visitors to send private messages to")}, - {"var", "allow_private_messages_from_visitors"}], - [{xmlelement, "value", [], [{xmlcdata, - case Config#config.allow_private_messages_from_visitors of - anyone -> - "anyone"; - moderators -> - "moderators"; - nobody -> - "nobody" - end}]}, - {xmlelement, "option", [{"label", translate:translate(Lang, "nobody")}], - [{xmlelement, "value", [], [{xmlcdata, "nobody"}]}]}, - {xmlelement, "option", [{"label", translate:translate(Lang, "moderators only")}], - [{xmlelement, "value", [], [{xmlcdata, "moderators"}]}]}, - {xmlelement, "option", [{"label", translate:translate(Lang, "anyone")}], - [{xmlelement, "value", [], [{xmlcdata, "anyone"}]}]}]}, - ?BOOLXFIELD("Allow users to query other users", - "allow_query_users", - Config#config.allow_query_users), - ?BOOLXFIELD("Allow users to send invites", - "muc#roomconfig_allowinvites", - Config#config.allow_user_invites), - ?BOOLXFIELD("Allow visitors to send status text in presence updates", - "muc#roomconfig_allowvisitorstatus", - Config#config.allow_visitor_status), - ?BOOLXFIELD("Allow visitors to change nickname", - "muc#roomconfig_allowvisitornickchange", - Config#config.allow_visitor_nickchange), - ?BOOLXFIELD("Allow visitors to send voice requests", - "muc#roomconfig_allowvoicerequests", - Config#config.allow_voice_requests), - ?STRINGXFIELD("Minimum interval between voice requests (in seconds)", - "muc#roomconfig_voicerequestmininterval", - erlang:integer_to_list(Config#config.voice_request_min_interval)) - ] ++ - case ejabberd_captcha:is_feature_available() of - true -> - [?BOOLXFIELD("Make room captcha protected", - "captcha_protected", - Config#config.captcha_protected)]; - false -> [] - end ++ - [?JIDMULTIXFIELD("Exclude Jabber IDs from CAPTCHA challenge", - "muc#roomconfig_captcha_whitelist", - ?SETS:to_list(Config#config.captcha_whitelist))] ++ - case mod_muc_log:check_access_log( - StateData#state.server_host, From) of - allow -> - [?BOOLXFIELD( - "Enable logging", - "muc#roomconfig_enablelogging", - Config#config.logging)]; - _ -> [] - end, - {result, [{xmlelement, "instructions", [], - [{xmlcdata, - translate:translate( - Lang, "You need an x:data capable client to configure room")}]}, - {xmlelement, "x", [{"xmlns", ?NS_XDATA}, - {"type", "form"}], - Res}], - StateData}. - - - -set_config(XEl, StateData) -> - XData = jlib:parse_xdata_submit(XEl), - case XData of - invalid -> - {error, ?ERR_BAD_REQUEST}; - _ -> - case set_xoption(XData, StateData#state.config) of - #config{} = Config -> - Res = change_config(Config, StateData), - {result, _, NSD} = Res, - Type = case {(StateData#state.config)#config.logging, - Config#config.logging} of - {true, false} -> - roomconfig_change_disabledlogging; - {false, true} -> - roomconfig_change_enabledlogging; - {_, _} -> - roomconfig_change - end, - Users = [{U#user.jid, U#user.nick, U#user.role} || - {_, U} <- ?DICT:to_list(StateData#state.users)], - add_to_log(Type, Users, NSD), - Res; - Err -> - Err - end - end. - --define(SET_BOOL_XOPT(Opt, Val), - case Val of - "0" -> set_xoption(Opts, Config#config{Opt = false}); - "false" -> set_xoption(Opts, Config#config{Opt = false}); - "1" -> set_xoption(Opts, Config#config{Opt = true}); - "true" -> set_xoption(Opts, Config#config{Opt = true}); - _ -> {error, ?ERR_BAD_REQUEST} - end). - --define(SET_NAT_XOPT(Opt, Val), - case catch list_to_integer(Val) of - I when is_integer(I), - I > 0 -> - set_xoption(Opts, Config#config{Opt = I}); - _ -> - {error, ?ERR_BAD_REQUEST} - end). - --define(SET_STRING_XOPT(Opt, Val), - set_xoption(Opts, Config#config{Opt = Val})). - --define(SET_JIDMULTI_XOPT(Opt, Vals), - begin - Set = lists:foldl( - fun({U, S, R}, Set1) -> - ?SETS:add_element({U, S, R}, Set1); - (#jid{luser = U, lserver = S, lresource = R}, Set1) -> - ?SETS:add_element({U, S, R}, Set1); - (_, Set1) -> - Set1 - end, ?SETS:empty(), Vals), - set_xoption(Opts, Config#config{Opt = Set}) - end). - -set_xoption([], Config) -> - Config; -set_xoption([{"muc#roomconfig_roomname", [Val]} | Opts], Config) -> - ?SET_STRING_XOPT(title, Val); -set_xoption([{"muc#roomconfig_roomdesc", [Val]} | Opts], Config) -> - ?SET_STRING_XOPT(description, Val); -set_xoption([{"muc#roomconfig_changesubject", [Val]} | Opts], Config) -> - ?SET_BOOL_XOPT(allow_change_subj, Val); -set_xoption([{"allow_query_users", [Val]} | Opts], Config) -> - ?SET_BOOL_XOPT(allow_query_users, Val); -set_xoption([{"allow_private_messages", [Val]} | Opts], Config) -> - ?SET_BOOL_XOPT(allow_private_messages, Val); -set_xoption([{"allow_private_messages_from_visitors", [Val]} | Opts], Config) -> - case Val of - "anyone" -> - ?SET_STRING_XOPT(allow_private_messages_from_visitors, anyone); - "moderators" -> - ?SET_STRING_XOPT(allow_private_messages_from_visitors, moderators); - "nobody" -> - ?SET_STRING_XOPT(allow_private_messages_from_visitors, nobody); - _ -> - {error, ?ERR_BAD_REQUEST} - end; -set_xoption([{"muc#roomconfig_allowvisitorstatus", [Val]} | Opts], Config) -> - ?SET_BOOL_XOPT(allow_visitor_status, Val); -set_xoption([{"muc#roomconfig_allowvisitornickchange", [Val]} | Opts], Config) -> - ?SET_BOOL_XOPT(allow_visitor_nickchange, Val); -set_xoption([{"muc#roomconfig_publicroom", [Val]} | Opts], Config) -> - ?SET_BOOL_XOPT(public, Val); -set_xoption([{"public_list", [Val]} | Opts], Config) -> - ?SET_BOOL_XOPT(public_list, Val); -set_xoption([{"muc#roomconfig_persistentroom", [Val]} | Opts], Config) -> - ?SET_BOOL_XOPT(persistent, Val); -set_xoption([{"muc#roomconfig_moderatedroom", [Val]} | Opts], Config) -> - ?SET_BOOL_XOPT(moderated, Val); -set_xoption([{"members_by_default", [Val]} | Opts], Config) -> - ?SET_BOOL_XOPT(members_by_default, Val); -set_xoption([{"muc#roomconfig_membersonly", [Val]} | Opts], Config) -> - ?SET_BOOL_XOPT(members_only, Val); -set_xoption([{"captcha_protected", [Val]} | Opts], Config) -> - ?SET_BOOL_XOPT(captcha_protected, Val); -set_xoption([{"muc#roomconfig_allowinvites", [Val]} | Opts], Config) -> - ?SET_BOOL_XOPT(allow_user_invites, Val); -set_xoption([{"muc#roomconfig_passwordprotectedroom", [Val]} | Opts], Config) -> - ?SET_BOOL_XOPT(password_protected, Val); -set_xoption([{"muc#roomconfig_roomsecret", [Val]} | Opts], Config) -> - ?SET_STRING_XOPT(password, Val); -set_xoption([{"anonymous", [Val]} | Opts], Config) -> - ?SET_BOOL_XOPT(anonymous, Val); -set_xoption([{"muc#roomconfig_allowvoicerequests", [Val]} | Opts], Config) -> - ?SET_BOOL_XOPT(allow_voice_requests, Val); -set_xoption([{"muc#roomconfig_voicerequestmininterval", [Val]} | Opts], Config) -> - ?SET_NAT_XOPT(voice_request_min_interval, Val); -set_xoption([{"muc#roomconfig_whois", [Val]} | Opts], Config) -> - case Val of - "moderators" -> - ?SET_BOOL_XOPT(anonymous, integer_to_list(1)); - "anyone" -> - ?SET_BOOL_XOPT(anonymous, integer_to_list(0)); - _ -> - {error, ?ERR_BAD_REQUEST} - end; -set_xoption([{"muc#roomconfig_maxusers", [Val]} | Opts], Config) -> - case Val of - "none" -> - ?SET_STRING_XOPT(max_users, none); - _ -> - ?SET_NAT_XOPT(max_users, Val) - end; -set_xoption([{"muc#roomconfig_enablelogging", [Val]} | Opts], Config) -> - ?SET_BOOL_XOPT(logging, Val); -set_xoption([{"muc#roomconfig_captcha_whitelist", Vals} | Opts], Config) -> - JIDs = [jlib:string_to_jid(Val) || Val <- Vals], - ?SET_JIDMULTI_XOPT(captcha_whitelist, JIDs); -set_xoption([{"FORM_TYPE", _} | Opts], Config) -> - %% Ignore our FORM_TYPE - set_xoption(Opts, Config); -set_xoption([_ | _Opts], _Config) -> - {error, ?ERR_BAD_REQUEST}. - - -change_config(Config, StateData) -> - NSD = StateData#state{config = Config}, - case {(StateData#state.config)#config.persistent, - Config#config.persistent} of - {_, true} -> - mod_muc:store_room(NSD#state.host, NSD#state.room, make_opts(NSD)); - {true, false} -> - mod_muc:forget_room(NSD#state.host, NSD#state.room); - {false, false} -> - ok - end, - case {(StateData#state.config)#config.members_only, - Config#config.members_only} of - {false, true} -> - NSD1 = remove_nonmembers(NSD), - {result, [], NSD1}; - _ -> - {result, [], NSD} - end. - -remove_nonmembers(StateData) -> - lists:foldl( - fun({_LJID, #user{jid = JID}}, SD) -> - Affiliation = get_affiliation(JID, SD), - case Affiliation of - none -> - catch send_kickban_presence( - JID, "", "322", SD), - set_role(JID, none, SD); - _ -> - SD - end - end, StateData, ?DICT:to_list(StateData#state.users)). - - --define(CASE_CONFIG_OPT(Opt), - Opt -> StateData#state{ - config = (StateData#state.config)#config{Opt = Val}}). - -set_opts([], StateData) -> - StateData; -set_opts([{Opt, Val} | Opts], StateData) -> - NSD = case Opt of - title -> StateData#state{config = (StateData#state.config)#config{title = Val}}; - description -> StateData#state{config = (StateData#state.config)#config{description = Val}}; - allow_change_subj -> StateData#state{config = (StateData#state.config)#config{allow_change_subj = Val}}; - allow_query_users -> StateData#state{config = (StateData#state.config)#config{allow_query_users = Val}}; - allow_private_messages -> StateData#state{config = (StateData#state.config)#config{allow_private_messages = Val}}; - allow_private_messages_from_visitors -> StateData#state{config = (StateData#state.config)#config{allow_private_messages_from_visitors = Val}}; - allow_visitor_nickchange -> StateData#state{config = (StateData#state.config)#config{allow_visitor_nickchange = Val}}; - allow_visitor_status -> StateData#state{config = (StateData#state.config)#config{allow_visitor_status = Val}}; - public -> StateData#state{config = (StateData#state.config)#config{public = Val}}; - public_list -> StateData#state{config = (StateData#state.config)#config{public_list = Val}}; - persistent -> StateData#state{config = (StateData#state.config)#config{persistent = Val}}; - moderated -> StateData#state{config = (StateData#state.config)#config{moderated = Val}}; - members_by_default -> StateData#state{config = (StateData#state.config)#config{members_by_default = Val}}; - members_only -> StateData#state{config = (StateData#state.config)#config{members_only = Val}}; - allow_user_invites -> StateData#state{config = (StateData#state.config)#config{allow_user_invites = Val}}; - password_protected -> StateData#state{config = (StateData#state.config)#config{password_protected = Val}}; - captcha_protected -> StateData#state{config = (StateData#state.config)#config{captcha_protected = Val}}; - password -> StateData#state{config = (StateData#state.config)#config{password = Val}}; - anonymous -> StateData#state{config = (StateData#state.config)#config{anonymous = Val}}; - logging -> StateData#state{config = (StateData#state.config)#config{logging = Val}}; - captcha_whitelist -> StateData#state{config = (StateData#state.config)#config{captcha_whitelist = ?SETS:from_list(Val)}}; - allow_voice_requests -> StateData#state{config = (StateData#state.config)#config{allow_voice_requests = Val}}; - voice_request_min_interval -> StateData#state{config = (StateData#state.config)#config{voice_request_min_interval = Val}}; - max_users -> - ServiceMaxUsers = get_service_max_users(StateData), - MaxUsers = if - Val =< ServiceMaxUsers -> Val; - true -> ServiceMaxUsers - end, - StateData#state{ - config = (StateData#state.config)#config{ - max_users = MaxUsers}}; - affiliations -> - StateData#state{affiliations = ?DICT:from_list(Val)}; - subject -> - StateData#state{subject = Val}; - subject_author -> - StateData#state{subject_author = Val}; - _ -> StateData - end, - set_opts(Opts, NSD). - --define(MAKE_CONFIG_OPT(Opt), {Opt, Config#config.Opt}). - -make_opts(StateData) -> - Config = StateData#state.config, - [ - ?MAKE_CONFIG_OPT(title), - ?MAKE_CONFIG_OPT(description), - ?MAKE_CONFIG_OPT(allow_change_subj), - ?MAKE_CONFIG_OPT(allow_query_users), - ?MAKE_CONFIG_OPT(allow_private_messages), - ?MAKE_CONFIG_OPT(allow_private_messages_from_visitors), - ?MAKE_CONFIG_OPT(allow_visitor_status), - ?MAKE_CONFIG_OPT(allow_visitor_nickchange), - ?MAKE_CONFIG_OPT(public), - ?MAKE_CONFIG_OPT(public_list), - ?MAKE_CONFIG_OPT(persistent), - ?MAKE_CONFIG_OPT(moderated), - ?MAKE_CONFIG_OPT(members_by_default), - ?MAKE_CONFIG_OPT(members_only), - ?MAKE_CONFIG_OPT(allow_user_invites), - ?MAKE_CONFIG_OPT(password_protected), - ?MAKE_CONFIG_OPT(captcha_protected), - ?MAKE_CONFIG_OPT(password), - ?MAKE_CONFIG_OPT(anonymous), - ?MAKE_CONFIG_OPT(logging), - ?MAKE_CONFIG_OPT(max_users), - ?MAKE_CONFIG_OPT(allow_voice_requests), - ?MAKE_CONFIG_OPT(voice_request_min_interval), - {captcha_whitelist, - ?SETS:to_list((StateData#state.config)#config.captcha_whitelist)}, - {affiliations, ?DICT:to_list(StateData#state.affiliations)}, - {subject, StateData#state.subject}, - {subject_author, StateData#state.subject_author} - ]. - - - -destroy_room(DEl, StateData) -> - lists:foreach( - fun({_LJID, Info}) -> - Nick = Info#user.nick, - ItemAttrs = [{"affiliation", "none"}, - {"role", "none"}], - Packet = {xmlelement, "presence", [{"type", "unavailable"}], - [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], - [{xmlelement, "item", ItemAttrs, []}, DEl]}]}, - route_stanza( - jlib:jid_replace_resource(StateData#state.jid, Nick), - Info#user.jid, - Packet) - end, ?DICT:to_list(StateData#state.users)), - case (StateData#state.config)#config.persistent of - true -> - mod_muc:forget_room(StateData#state.host, StateData#state.room); - false -> - ok - end, - {result, [], stop}. - - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Disco - --define(FEATURE(Var), {xmlelement, "feature", [{"var", Var}], []}). - --define(CONFIG_OPT_TO_FEATURE(Opt, Fiftrue, Fiffalse), - case Opt of - true -> - ?FEATURE(Fiftrue); - false -> - ?FEATURE(Fiffalse) - end). - -process_iq_disco_info(_From, set, _Lang, _StateData) -> - {error, ?ERR_NOT_ALLOWED}; - -process_iq_disco_info(_From, get, Lang, StateData) -> - Config = StateData#state.config, - {result, [{xmlelement, "identity", - [{"category", "conference"}, - {"type", "text"}, - {"name", get_title(StateData)}], []}, - {xmlelement, "feature", - [{"var", ?NS_MUC}], []}, - ?CONFIG_OPT_TO_FEATURE(Config#config.public, - "muc_public", "muc_hidden"), - ?CONFIG_OPT_TO_FEATURE(Config#config.persistent, - "muc_persistent", "muc_temporary"), - ?CONFIG_OPT_TO_FEATURE(Config#config.members_only, - "muc_membersonly", "muc_open"), - ?CONFIG_OPT_TO_FEATURE(Config#config.anonymous, - "muc_semianonymous", "muc_nonanonymous"), - ?CONFIG_OPT_TO_FEATURE(Config#config.moderated, - "muc_moderated", "muc_unmoderated"), - ?CONFIG_OPT_TO_FEATURE(Config#config.password_protected, - "muc_passwordprotected", "muc_unsecured") - ] ++ iq_disco_info_extras(Lang, StateData), StateData}. - --define(RFIELDT(Type, Var, Val), - {xmlelement, "field", [{"type", Type}, {"var", Var}], - [{xmlelement, "value", [], [{xmlcdata, Val}]}]}). - --define(RFIELD(Label, Var, Val), - {xmlelement, "field", [{"label", translate:translate(Lang, Label)}, - {"var", Var}], - [{xmlelement, "value", [], [{xmlcdata, Val}]}]}). - -iq_disco_info_extras(Lang, StateData) -> - Len = ?DICT:size(StateData#state.users), - RoomDescription = (StateData#state.config)#config.description, - [{xmlelement, "x", [{"xmlns", ?NS_XDATA}, {"type", "result"}], - [?RFIELDT("hidden", "FORM_TYPE", - "http://jabber.org/protocol/muc#roominfo"), - ?RFIELD("Room description", "muc#roominfo_description", - RoomDescription), - ?RFIELD("Number of occupants", "muc#roominfo_occupants", - integer_to_list(Len)) - ]}]. - -process_iq_disco_items(_From, set, _Lang, _StateData) -> - {error, ?ERR_NOT_ALLOWED}; - -process_iq_disco_items(From, get, _Lang, StateData) -> - case (StateData#state.config)#config.public_list of - true -> - {result, get_mucroom_disco_items(StateData), StateData}; - _ -> - case is_occupant_or_admin(From, StateData) of - true -> - {result, get_mucroom_disco_items(StateData), StateData}; - _ -> - {error, ?ERR_FORBIDDEN} - end - end. - -process_iq_captcha(_From, get, _Lang, _SubEl, _StateData) -> - {error, ?ERR_NOT_ALLOWED}; - -process_iq_captcha(_From, set, _Lang, SubEl, StateData) -> - case ejabberd_captcha:process_reply(SubEl) of - ok -> - {result, [], StateData}; - _ -> - {error, ?ERR_NOT_ACCEPTABLE} - end. - -get_title(StateData) -> - case (StateData#state.config)#config.title of - "" -> - StateData#state.room; - Name -> - Name - end. - -get_roomdesc_reply(JID, StateData, Tail) -> - IsOccupantOrAdmin = is_occupant_or_admin(JID, StateData), - if (StateData#state.config)#config.public or IsOccupantOrAdmin -> - if (StateData#state.config)#config.public_list or IsOccupantOrAdmin -> - {item, get_title(StateData) ++ Tail}; - true -> - {item, get_title(StateData)} - end; - true -> - false - end. - -get_roomdesc_tail(StateData, Lang) -> - Desc = case (StateData#state.config)#config.public of - true -> - ""; - _ -> - translate:translate(Lang, "private, ") - end, - Len = ?DICT:fold(fun(_, _, Acc) -> Acc + 1 end, 0, StateData#state.users), - " (" ++ Desc ++ integer_to_list(Len) ++ ")". - -get_mucroom_disco_items(StateData) -> - lists:map( - fun({_LJID, Info}) -> - Nick = Info#user.nick, - {xmlelement, "item", - [{"jid", jlib:jid_to_string({StateData#state.room, - StateData#state.host, Nick})}, - {"name", Nick}], []} - end, - ?DICT:to_list(StateData#state.users)). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Voice request support - -is_voice_request(Els) -> - lists:foldl( - fun({xmlelement, "x", Attrs, _} = El, false) -> - case xml:get_attr_s("xmlns", Attrs) of - ?NS_XDATA -> - case jlib:parse_xdata_submit(El) of - [_|_] = Fields -> - case {lists:keysearch("FORM_TYPE", 1, Fields), - lists:keysearch("muc#role", 1, Fields)} of - {{value, - {_, ["http://jabber.org/protocol/muc#request"]}}, - {value, {_, ["participant"]}}} -> - true; - _ -> - false - end; - _ -> - false - end; - _ -> - false - end; - (_, Acc) -> - Acc - end, false, Els). - -prepare_request_form(Requester, Nick, Lang) -> - {xmlelement, "message", [{"type", "normal"}], - [{xmlelement, "x", [{"xmlns", ?NS_XDATA}, {"type", "form"}], - [{xmlelement, "title", [], - [{xmlcdata, translate:translate(Lang, "Voice request")}]}, - {xmlelement, "instructions", [], - [{xmlcdata, - translate:translate( - Lang, "Either approve or decline the voice request.")}]}, - {xmlelement, "field", [{"var", "FORM_TYPE"}, {"type", "hidden"}], - [{xmlelement, "value", [], - [{xmlcdata, "http://jabber.org/protocol/muc#request"}]}]}, - {xmlelement, "field", [{"var", "muc#role"}, {"type", "hidden"}], - [{xmlelement, "value", [], [{xmlcdata, "participant"}]}]}, - ?STRINGXFIELD("User JID", "muc#jid", jlib:jid_to_string(Requester)), - ?STRINGXFIELD("Nickname", "muc#roomnick", Nick), - ?BOOLXFIELD("Grant voice to this person?", "muc#request_allow", - list_to_atom("false")) - ]}]}. - -send_voice_request(From, StateData) -> - Moderators = search_role(moderator, StateData), - FromNick = find_nick_by_jid(From, StateData), - lists:foreach( - fun({_, User}) -> - route_stanza( - StateData#state.jid, - User#user.jid, - prepare_request_form(From, FromNick, "")) - end, Moderators). - -is_voice_approvement(Els) -> - lists:foldl( - fun({xmlelement, "x", Attrs, _} = El, false) -> - case xml:get_attr_s("xmlns", Attrs) of - ?NS_XDATA -> - case jlib:parse_xdata_submit(El) of - [_|_] = Fs -> - case {lists:keysearch("FORM_TYPE", 1, Fs), - lists:keysearch("muc#role", 1, Fs), - lists:keysearch("muc#request_allow", 1, Fs)} of - {{value, - {_, ["http://jabber.org/protocol/muc#request"]}}, - {value, {_, ["participant"]}}, - {value, {_, [Flag]}}} - when Flag == "true"; Flag == "1" -> - true; - _ -> - false - end; - _ -> - false - end; - _ -> - false - end; - (_, Acc) -> - Acc - end, false, Els). - -extract_jid_from_voice_approvement(Els) -> - lists:foldl( - fun({xmlelement, "x", _, _} = El, error) -> - Fields = case jlib:parse_xdata_submit(El) of - invalid -> []; - Res -> Res - end, - lists:foldl( - fun({"muc#jid", [JIDStr]}, error) -> - case jlib:string_to_jid(JIDStr) of - error -> error; - J -> {ok, J} - end; - (_, Acc) -> - Acc - end, error, Fields); - (_, Acc) -> - Acc - end, error, Els). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Invitation support - -is_invitation(Els) -> - lists:foldl( - fun({xmlelement, "x", Attrs, _} = El, false) -> - case xml:get_attr_s("xmlns", Attrs) of - ?NS_MUC_USER -> - case xml:get_subtag(El, "invite") of - false -> - false; - _ -> - true - end; - _ -> - false - end; - (_, Acc) -> - Acc - end, false, Els). - -check_invitation(From, Els, Lang, StateData) -> - FAffiliation = get_affiliation(From, StateData), - CanInvite = (StateData#state.config)#config.allow_user_invites - orelse (FAffiliation == admin) orelse (FAffiliation == owner), - InviteEl = case xml:remove_cdata(Els) of - [{xmlelement, "x", _Attrs1, Els1} = XEl] -> - case xml:get_tag_attr_s("xmlns", XEl) of - ?NS_MUC_USER -> - ok; - _ -> - throw({error, ?ERR_BAD_REQUEST}) - end, - case xml:remove_cdata(Els1) of - [{xmlelement, "invite", _Attrs2, _Els2} = InviteEl1] -> - InviteEl1; - _ -> - throw({error, ?ERR_BAD_REQUEST}) - end; - _ -> - throw({error, ?ERR_BAD_REQUEST}) - end, - JID = case jlib:string_to_jid( - xml:get_tag_attr_s("to", InviteEl)) of - error -> - throw({error, ?ERR_JID_MALFORMED}); - JID1 -> - JID1 - end, - case CanInvite of - false -> - throw({error, ?ERR_NOT_ALLOWED}); - true -> - Reason = - xml:get_path_s( - InviteEl, - [{elem, "reason"}, cdata]), - ContinueEl = - case xml:get_path_s( - InviteEl, - [{elem, "continue"}]) of - [] -> []; - Continue1 -> [Continue1] - end, - IEl = - [{xmlelement, "invite", - [{"from", - jlib:jid_to_string(From)}], - [{xmlelement, "reason", [], - [{xmlcdata, Reason}]}] ++ ContinueEl}], - PasswdEl = - case (StateData#state.config)#config.password_protected of - true -> - [{xmlelement, "password", [], - [{xmlcdata, (StateData#state.config)#config.password}]}]; - _ -> - [] - end, - Body = - {xmlelement, "body", [], - [{xmlcdata, - lists:flatten( - io_lib:format( - translate:translate( - Lang, - "~s invites you to the room ~s"), - [jlib:jid_to_string(From), - jlib:jid_to_string({StateData#state.room, - StateData#state.host, - ""}) - ])) ++ - case (StateData#state.config)#config.password_protected of - true -> - ", " ++ - translate:translate(Lang, "the password is") ++ - " '" ++ - (StateData#state.config)#config.password ++ "'"; - _ -> - "" - end ++ - case Reason of - "" -> ""; - _ -> " (" ++ Reason ++ ") " - end - }]}, - Msg = - {xmlelement, "message", - [{"type", "normal"}], - [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], IEl ++ PasswdEl}, - {xmlelement, "x", - [{"xmlns", ?NS_XCONFERENCE}, - {"jid", jlib:jid_to_string( - {StateData#state.room, - StateData#state.host, - ""})}], - [{xmlcdata, Reason}]}, - Body]}, - route_stanza(StateData#state.jid, JID, Msg), - JID - end. - -%% Handle a message sent to the room by a non-participant. -%% If it is a decline, send to the inviter. -%% Otherwise, an error message is sent to the sender. -handle_roommessage_from_nonparticipant(Packet, Lang, StateData, From) -> - case catch check_decline_invitation(Packet) of - {true, Decline_data} -> - send_decline_invitation(Decline_data, StateData#state.jid, From); - _ -> - send_error_only_occupants(Packet, Lang, StateData#state.jid, From) - end. - -%% Check in the packet is a decline. -%% If so, also returns the splitted packet. -%% This function must be catched, -%% because it crashes when the packet is not a decline message. -check_decline_invitation(Packet) -> - {xmlelement, "message", _, _} = Packet, - XEl = xml:get_subtag(Packet, "x"), - ?NS_MUC_USER = xml:get_tag_attr_s("xmlns", XEl), - DEl = xml:get_subtag(XEl, "decline"), - ToString = xml:get_tag_attr_s("to", DEl), - ToJID = jlib:string_to_jid(ToString), - {true, {Packet, XEl, DEl, ToJID}}. - -%% Send the decline to the inviter user. -%% The original stanza must be slightly modified. -send_decline_invitation({Packet, XEl, DEl, ToJID}, RoomJID, FromJID) -> - FromString = jlib:jid_to_string(jlib:jid_remove_resource(FromJID)), - {xmlelement, "decline", DAttrs, DEls} = DEl, - DAttrs2 = lists:keydelete("to", 1, DAttrs), - DAttrs3 = [{"from", FromString} | DAttrs2], - DEl2 = {xmlelement, "decline", DAttrs3, DEls}, - XEl2 = replace_subelement(XEl, DEl2), - Packet2 = replace_subelement(Packet, XEl2), - route_stanza(RoomJID, ToJID, Packet2). - -%% Given an element and a new subelement, -%% replace the instance of the subelement in element with the new subelement. -replace_subelement({xmlelement, Name, Attrs, SubEls}, NewSubEl) -> - {_, NameNewSubEl, _, _} = NewSubEl, - SubEls2 = lists:keyreplace(NameNewSubEl, 2, SubEls, NewSubEl), - {xmlelement, Name, Attrs, SubEls2}. - -send_error_only_occupants(Packet, Lang, RoomJID, From) -> - ErrText = "Only occupants are allowed to send messages to the conference", - Err = jlib:make_error_reply(Packet, ?ERRT_NOT_ACCEPTABLE(Lang, ErrText)), - route_stanza(RoomJID, From, Err). - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Logging - -add_to_log(Type, Data, StateData) - when Type == roomconfig_change_disabledlogging -> - %% When logging is disabled, the config change message must be logged: - mod_muc_log:add_to_log( - StateData#state.server_host, roomconfig_change, Data, - StateData#state.jid, make_opts(StateData)); -add_to_log(Type, Data, StateData) -> - case (StateData#state.config)#config.logging of - true -> - mod_muc_log:add_to_log( - StateData#state.server_host, Type, Data, - StateData#state.jid, make_opts(StateData)); - false -> - ok - end. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Users number checking - -tab_add_online_user(JID, StateData) -> - {LUser, LServer, LResource} = jlib:jid_tolower(JID), - US = {LUser, LServer}, - Room = StateData#state.room, - Host = StateData#state.host, - catch ets:insert( - muc_online_users, - #muc_online_users{us = US, resource = LResource, room = Room, host = Host}). - - -tab_remove_online_user(JID, StateData) -> - {LUser, LServer, LResource} = jlib:jid_tolower(JID), - US = {LUser, LServer}, - Room = StateData#state.room, - Host = StateData#state.host, - catch ets:delete_object( - muc_online_users, - #muc_online_users{us = US, resource = LResource, room = Room, host = Host}). - -tab_count_user(JID) -> - {LUser, LServer, _} = jlib:jid_tolower(JID), - US = {LUser, LServer}, - case catch ets:select( - muc_online_users, - [{#muc_online_users{us = US, _ = '_'}, [], [[]]}]) of - Res when is_list(Res) -> - length(Res); - _ -> - 0 - end. - -element_size(El) -> - size(xml:element_to_binary(El)). - -route_stanza(From, To, El) -> - case mod_muc:is_broadcasted(From#jid.lserver) of - true -> - #jid{luser = LUser, lserver = LServer} = To, - case ejabberd_cluster:get_node({LUser, LServer}) of - Node when Node == node() -> - ejabberd_router:route(From, To, El); - _ -> - ok - end; - false -> - ejabberd_router:route(From, To, El) - end. +%%%---------------------------------------------------------------------- +%%% File : mod_muc_room.erl +%%% Author : Alexey Shchepin +%%% Purpose : MUC room stuff +%%% Created : 19 Mar 2003 by Alexey Shchepin +%%% +%%% +%%% 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_room). +-author('alexey@process-one.net'). + +-define(GEN_FSM, p1_fsm). + +-behaviour(?GEN_FSM). + + +%% External exports +-export([start_link/11, + start_link/9, + start_link/2, + start/11, + start/9, + start/2, + migrate/3, + route/4, + moderate_room_history/2, + persist_recent_messages/1]). + +%% gen_fsm callbacks +-export([init/1, + normal_state/2, + handle_event/3, + handle_sync_event/4, + handle_info/3, + terminate/3, + print_state/1, + code_change/4]). + +-include("ejabberd.hrl"). +-include("jlib.hrl"). +-include("mod_muc_room.hrl"). + +-define(MAX_USERS_DEFAULT_LIST, + [5, 10, 20, 30, 50, 100, 200, 500, 1000, 2000, 5000]). + +%-define(DBGFSM, true). + +-ifdef(DBGFSM). +-define(FSMOPTS, [{debug, [trace]}]). +-else. +-define(FSMOPTS, []). +-endif. + +%% Module start with or without supervisor: +-ifdef(NO_TRANSIENT_SUPERVISORS). +-define(SUPERVISOR_START(Args), + ?GEN_FSM:start(?MODULE, Args, ?FSMOPTS)). +-else. +-define(SUPERVISOR_START(Args), + Supervisor = gen_mod:get_module_proc(ServerHost, ejabberd_mod_muc_sup), + supervisor:start_child(Supervisor, Args)). +-endif. + +%%%---------------------------------------------------------------------- +%%% API +%%%---------------------------------------------------------------------- +start(Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper, + Creator, Nick, DefRoomOpts, Mod) -> + ?SUPERVISOR_START([Host, ServerHost, Access, Room, HistorySize, PersistHistory, + RoomShaper, Creator, Nick, DefRoomOpts, Mod]). + +start(Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper, Opts, Mod) -> + Supervisor = gen_mod:get_module_proc(ServerHost, ejabberd_mod_muc_sup), + supervisor:start_child( + Supervisor, [Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper, + Opts, Mod]). + +start(StateName, StateData) -> + ServerHost = StateData#state.server_host, + ?SUPERVISOR_START([StateName, StateData]). + +start_link(Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper, + Creator, Nick, DefRoomOpts, Mod) -> + ?GEN_FSM:start_link(?MODULE, [Host, ServerHost, Access, Room, HistorySize, PersistHistory, + RoomShaper, Creator, Nick, DefRoomOpts, Mod], + ?FSMOPTS). + +start_link(Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper, Opts, Mod) -> + ?GEN_FSM:start_link(?MODULE, [Host, ServerHost, Access, Room, HistorySize, PersistHistory, + RoomShaper, Opts, Mod], + ?FSMOPTS). + +start_link(StateName, StateData) -> + ?GEN_FSM:start_link(?MODULE, [StateName, StateData], ?FSMOPTS). + +migrate(FsmRef, Node, After) -> + erlang:send_after(After, FsmRef, {migrate, Node}). + +moderate_room_history(FsmRef, Nick) -> + ?GEN_FSM:sync_send_all_state_event(FsmRef, {moderate_room_history, Nick}). + +persist_recent_messages(FsmRef) -> + ?GEN_FSM:sync_send_all_state_event(FsmRef, persist_recent_messages). +%%%---------------------------------------------------------------------- +%%% Callback functions from gen_fsm +%%%---------------------------------------------------------------------- + +%%---------------------------------------------------------------------- +%% Func: init/1 +%% Returns: {ok, StateName, StateData} | +%% {ok, StateName, StateData, Timeout} | +%% ignore | +%% {stop, StopReason} +%%---------------------------------------------------------------------- +init([Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper, Creator, _Nick, DefRoomOpts, Mod]) -> + process_flag(trap_exit, true), + Shaper = shaper:new(RoomShaper), + State = set_affiliation(Creator, owner, + #state{host = Host, + server_host = ServerHost, + mod = Mod, + access = Access, + room = Room, + history = lqueue_new(HistorySize), + persist_history = PersistHistory, + jid = jlib:make_jid(Room, Host, ""), + just_created = true, + room_shaper = Shaper}), + State1 = set_opts(DefRoomOpts, State), + %% this will trigger a write of the muc to disc if it is persistent. + %% we need to do this because otherwise if muc are persistent by default, + %% but never configured in any way by the client, we were never + %% storing it on disc to be recreated on startup. + if + (State1#state.config)#config.persistent -> + mod_muc:store_room(State1#state.host, State1#state.room, make_opts(State1)); + true -> + ok + end, + ?INFO_MSG("Created MUC room ~s@~s by ~s", + [Room, Host, jlib:jid_to_string(Creator)]), + add_to_log(room_existence, created, State1), + add_to_log(room_existence, started, State1), + {ok, normal_state, State1}; +init([Host, ServerHost, Access, Room, HistorySize, PersistHistory, RoomShaper, Opts, Mod]) -> + process_flag(trap_exit, true), + Shaper = shaper:new(RoomShaper), + State = set_opts(Opts, #state{host = Host, + server_host = ServerHost, + mod = Mod, + access = Access, + room = Room, + history = load_history(ServerHost, Room, PersistHistory, lqueue_new(HistorySize)), + persist_history = PersistHistory, + jid = jlib:make_jid(Room, Host, ""), + room_shaper = Shaper}), + add_to_log(room_existence, started, State), + {ok, normal_state, State}; +init([StateName, #state{room = Room, host = Host} = StateData]) -> + process_flag(trap_exit, true), + mod_muc:register_room(Host, Room, self()), + {ok, StateName, StateData}. + +%%---------------------------------------------------------------------- +%% Func: StateName/2 +%% Returns: {next_state, NextStateName, NextStateData} | +%% {next_state, NextStateName, NextStateData, Timeout} | +%% {stop, Reason, NewStateData} +%%---------------------------------------------------------------------- +normal_state({route, From, "", + {xmlelement, "message", Attrs, Els} = Packet}, + StateData) -> + Lang = xml:get_attr_s("xml:lang", Attrs), + case is_user_online(From, StateData) orelse + is_user_allowed_message_nonparticipant(From, StateData) of + true -> + case xml:get_attr_s("type", Attrs) of + "groupchat" -> + Activity = get_user_activity(From, StateData), + Now = now_to_usec(now()), + MinMessageInterval = + trunc(gen_mod:get_module_opt( + StateData#state.server_host, + StateData#state.mod, + min_message_interval, 0) * 1000000), + Size = element_size(Packet), + {MessageShaper, MessageShaperInterval} = + shaper:update(Activity#activity.message_shaper, Size), + if + Activity#activity.message /= undefined -> + ErrText = "Traffic rate limit is exceeded", + Err = jlib:make_error_reply( + Packet, ?ERRT_RESOURCE_CONSTRAINT(Lang, ErrText)), + route_stanza( + StateData#state.jid, + From, Err), + {next_state, normal_state, StateData}; + Now >= Activity#activity.message_time + MinMessageInterval, + MessageShaperInterval == 0 -> + {RoomShaper, RoomShaperInterval} = + shaper:update(StateData#state.room_shaper, Size), + RoomQueueEmpty = queue:is_empty( + StateData#state.room_queue), + if + RoomShaperInterval == 0, + RoomQueueEmpty -> + NewActivity = Activity#activity{ + message_time = Now, + message_shaper = MessageShaper}, + StateData1 = + store_user_activity( + From, NewActivity, StateData), + StateData2 = + StateData1#state{ + room_shaper = RoomShaper}, + process_groupchat_message(From, Packet, StateData2); + true -> + StateData1 = + if + RoomQueueEmpty -> + erlang:send_after( + RoomShaperInterval, self(), + process_room_queue), + StateData#state{ + room_shaper = RoomShaper}; + true -> + StateData + end, + NewActivity = Activity#activity{ + message_time = Now, + message_shaper = MessageShaper, + message = Packet}, + RoomQueue = queue:in( + {message, From}, + StateData#state.room_queue), + StateData2 = + store_user_activity( + From, NewActivity, StateData1), + StateData3 = + StateData2#state{ + room_queue = RoomQueue}, + {next_state, normal_state, StateData3} + end; + true -> + MessageInterval = + (Activity#activity.message_time + + MinMessageInterval - Now) div 1000, + Interval = lists:max([MessageInterval, + MessageShaperInterval]), + erlang:send_after( + Interval, self(), {process_user_message, From}), + NewActivity = Activity#activity{ + message = Packet, + message_shaper = MessageShaper}, + StateData1 = + store_user_activity( + From, NewActivity, StateData), + {next_state, normal_state, StateData1} + end; + "error" -> + case is_user_online(From, StateData) of + true -> + ErrorText = "This participant is kicked from the room because " + "he sent an error message", + NewState = expulse_participant(Packet, From, StateData, + translate:translate(Lang, ErrorText)), + {next_state, normal_state, NewState}; + _ -> + {next_state, normal_state, StateData} + end; + "chat" -> + ErrText = "It is not allowed to send private messages to the conference", + Err = jlib:make_error_reply( + Packet, ?ERRT_NOT_ACCEPTABLE(Lang, ErrText)), + route_stanza( + StateData#state.jid, + From, Err), + {next_state, normal_state, StateData}; + Type when (Type == "") or (Type == "normal") -> + IsInvitation = is_invitation(Els), + IsVoiceRequest = is_voice_request(Els) + and is_visitor(From, StateData), + IsVoiceApprovement = is_voice_approvement(Els) + and not is_visitor(From, StateData), + if IsInvitation -> + case catch check_invitation(From, Els, Lang, StateData) of + {error, Error} -> + Err = jlib:make_error_reply( + Packet, Error), + route_stanza( + StateData#state.jid, + From, Err), + {next_state, normal_state, StateData}; + IJID -> + Config = StateData#state.config, + case Config#config.members_only of + true -> + case get_affiliation(IJID, StateData) of + none -> + NSD = set_affiliation( + IJID, + member, + StateData), + case (NSD#state.config)#config.persistent of + true -> + (NSD#state.mod):store_room( + NSD#state.server_host, + NSD#state.host, + NSD#state.room, + make_opts(NSD)); + _ -> + ok + end, + {next_state, normal_state, NSD}; + _ -> + {next_state, normal_state, + StateData} + end; + false -> + {next_state, normal_state, StateData} + end + end; + IsVoiceRequest -> + NewStateData = + case (StateData#state.config)#config.allow_voice_requests of + true -> + MinInterval = (StateData#state.config) + #config.voice_request_min_interval, + BareFrom = jlib:jid_remove_resource( + jlib:jid_tolower(From)), + NowPriority = -now_to_usec(now()), + CleanPriority = + NowPriority + MinInterval*1000000, + Times = clean_treap( + StateData#state.last_voice_request_time, + CleanPriority), + case treap:lookup(BareFrom, Times) of + error -> + Times1 = treap:insert( + BareFrom, + NowPriority, + true, Times), + NSD = StateData#state{ + last_voice_request_time = + Times1}, + send_voice_request(From, NSD), + NSD; + {ok, _, _} -> + ErrText = "Please, wait for " + "a while before sending " + "new voice request", + Err = jlib:make_error_reply( + Packet, + ?ERRT_NOT_ACCEPTABLE( + Lang, ErrText)), + route_stanza( + StateData#state.jid, + From, Err), + StateData#state{ + last_voice_request_time = + Times} + end; + false -> + ErrText = "Voice requests are " + "disabled in this conference", + Err = jlib:make_error_reply( + Packet, + ?ERRT_FORBIDDEN( + Lang, ErrText)), + route_stanza( + StateData#state.jid, From, Err), + StateData + end, + {next_state, normal_state, NewStateData}; + IsVoiceApprovement -> + NewStateData = + case is_moderator(From, StateData) of + true -> + case extract_jid_from_voice_approvement(Els) of + error -> + ErrText = "Failed to extract " + "JID from your voice " + "request approval", + Err = jlib:make_error_reply( + Packet, + ?ERRT_BAD_REQUEST( + Lang, ErrText)), + route_stanza( + StateData#state.jid, + From, Err), + StateData; + {ok, TargetJid} -> + case is_visitor( + TargetJid, StateData) of + true -> + Reason = [], + NSD = set_role( + TargetJid, + participant, + StateData), + catch send_new_presence( + TargetJid, + Reason, NSD), + NSD; + _ -> + StateData + end + end; + _ -> + ErrText = "Only moderators can " + "approve voice requests", + Err = jlib:make_error_reply( + Packet, + ?ERRT_NOT_ALLOWED( + Lang, ErrText)), + route_stanza( + StateData#state.jid, From, Err), + StateData + end, + {next_state, normal_state, NewStateData}; + true -> + {next_state, normal_state, StateData} + end; + _ -> + ErrText = "Improper message type", + Err = jlib:make_error_reply( + Packet, ?ERRT_NOT_ACCEPTABLE(Lang, ErrText)), + route_stanza( + StateData#state.jid, + From, Err), + {next_state, normal_state, StateData} + end; + _ -> + case xml:get_attr_s("type", Attrs) of + "error" -> + ok; + _ -> + handle_roommessage_from_nonparticipant(Packet, Lang, StateData, From) + end, + {next_state, normal_state, StateData} + end; + +normal_state({route, From, "", + {xmlelement, "iq", _Attrs, _Els} = Packet}, + StateData) -> + case jlib:iq_query_info(Packet) of + #iq{type = Type, xmlns = XMLNS, lang = Lang, sub_el = SubEl} = IQ when + (XMLNS == ?NS_MUC_ADMIN) or + (XMLNS == ?NS_MUC_OWNER) or + (XMLNS == ?NS_DISCO_INFO) or + (XMLNS == ?NS_DISCO_ITEMS) or + (XMLNS == ?NS_CAPTCHA) -> + Res1 = case XMLNS of + ?NS_MUC_ADMIN -> + process_iq_admin(From, Type, Lang, SubEl, StateData); + ?NS_MUC_OWNER -> + process_iq_owner(From, Type, Lang, SubEl, StateData); + ?NS_DISCO_INFO -> + process_iq_disco_info(From, Type, Lang, StateData); + ?NS_DISCO_ITEMS -> + process_iq_disco_items(From, Type, Lang, StateData); + ?NS_CAPTCHA -> + process_iq_captcha(From, Type, Lang, SubEl, StateData) + end, + {IQRes, NewStateData} = + case Res1 of + {result, Res, SD} -> + {IQ#iq{type = result, + sub_el = [{xmlelement, "query", + [{"xmlns", XMLNS}], + Res + }]}, + SD}; + {error, Error} -> + {IQ#iq{type = error, + sub_el = [SubEl, Error]}, + StateData} + end, + route_stanza(StateData#state.jid, + From, + jlib:iq_to_xml(IQRes)), + case NewStateData of + stop -> + {stop, normal, StateData}; + _ -> + {next_state, normal_state, NewStateData} + end; + reply -> + {next_state, normal_state, StateData}; + _ -> + Err = jlib:make_error_reply( + Packet, ?ERR_FEATURE_NOT_IMPLEMENTED), + route_stanza(StateData#state.jid, From, Err), + {next_state, normal_state, StateData} + end; + +normal_state({route, From, Nick, + {xmlelement, "presence", _Attrs, _Els} = Packet}, + StateData) -> + Activity = get_user_activity(From, StateData), + Now = now_to_usec(now()), + MinPresenceInterval = + trunc(gen_mod:get_module_opt( + StateData#state.server_host, + StateData#state.mod, min_presence_interval, 0) * 1000000), + if + (Now >= Activity#activity.presence_time + MinPresenceInterval) and + (Activity#activity.presence == undefined) -> + NewActivity = Activity#activity{presence_time = Now}, + StateData1 = store_user_activity(From, NewActivity, StateData), + process_presence(From, Nick, Packet, StateData1); + true -> + if + Activity#activity.presence == undefined -> + Interval = (Activity#activity.presence_time + + MinPresenceInterval - Now) div 1000, + erlang:send_after( + Interval, self(), {process_user_presence, From}); + true -> + ok + end, + NewActivity = Activity#activity{presence = {Nick, Packet}}, + StateData1 = store_user_activity(From, NewActivity, StateData), + {next_state, normal_state, StateData1} + end; + +normal_state({route, From, ToNick, + {xmlelement, "message", Attrs, _} = Packet}, + StateData) -> + Type = xml:get_attr_s("type", Attrs), + Lang = xml:get_attr_s("xml:lang", Attrs), + case decide_fate_message(Type, Packet, From, StateData) of + {expulse_sender, Reason} -> + ?DEBUG(Reason, []), + ErrorText = "This participant is kicked from the room because " + "he sent an error message to another participant", + NewState = expulse_participant(Packet, From, StateData, + translate:translate(Lang, ErrorText)), + {next_state, normal_state, NewState}; + forget_message -> + {next_state, normal_state, StateData}; + continue_delivery -> + case {(StateData#state.config)#config.allow_private_messages, + is_user_online(From, StateData)} of + {true, true} -> + case Type of + "groupchat" -> + ErrText = "It is not allowed to send private " + "messages of type \"groupchat\"", + Err = jlib:make_error_reply( + Packet, ?ERRT_BAD_REQUEST(Lang, ErrText)), + route_stanza( + jlib:jid_replace_resource( + StateData#state.jid, + ToNick), + From, Err); + _ -> + case find_jids_by_nick(ToNick, StateData) of + false -> + ErrText = "Recipient is not in the conference room", + Err = jlib:make_error_reply( + Packet, ?ERRT_ITEM_NOT_FOUND(Lang, ErrText)), + route_stanza( + jlib:jid_replace_resource( + StateData#state.jid, + ToNick), + From, Err); + ToJIDs -> + SrcIsVisitor = is_visitor(From, StateData), + DstIsModerator = is_moderator(hd(ToJIDs), StateData), + PmFromVisitors = (StateData#state.config)#config.allow_private_messages_from_visitors, + if SrcIsVisitor == false; + PmFromVisitors == anyone; + (PmFromVisitors == moderators) and (DstIsModerator) -> + {ok, #user{nick = FromNick}} = + ?DICT:find(jlib:jid_tolower(From), + StateData#state.users), + FromNickJID = jlib:jid_replace_resource(StateData#state.jid, FromNick), + [route_stanza(FromNickJID, ToJID, Packet) || ToJID <- ToJIDs]; + true -> + ErrText = "It is not allowed to send private messages", + Err = jlib:make_error_reply( + Packet, ?ERRT_FORBIDDEN(Lang, ErrText)), + route_stanza( + jlib:jid_replace_resource( + StateData#state.jid, + ToNick), + From, Err) + end + end + end; + {true, false} -> + ErrText = "Only occupants are allowed to send messages to the conference", + Err = jlib:make_error_reply( + Packet, ?ERRT_NOT_ACCEPTABLE(Lang, ErrText)), + route_stanza( + jlib:jid_replace_resource( + StateData#state.jid, + ToNick), + From, Err); + {false, _} -> + ErrText = "It is not allowed to send private messages", + Err = jlib:make_error_reply( + Packet, ?ERRT_FORBIDDEN(Lang, ErrText)), + route_stanza( + jlib:jid_replace_resource( + StateData#state.jid, + ToNick), + From, Err) + end, + {next_state, normal_state, StateData} + end; + +normal_state({route, From, ToNick, + {xmlelement, "iq", Attrs, _Els} = Packet}, + StateData) -> + Lang = xml:get_attr_s("xml:lang", Attrs), + StanzaId = xml:get_attr_s("id", Attrs), + case {(StateData#state.config)#config.allow_query_users, + is_user_online_iq(StanzaId, From, StateData)} of + {true, {true, NewId, FromFull}} -> + case find_jid_by_nick(ToNick, StateData) of + false -> + case jlib:iq_query_info(Packet) of + reply -> + ok; + _ -> + ErrText = "Recipient is not in the conference room", + Err = jlib:make_error_reply( + Packet, ?ERRT_ITEM_NOT_FOUND(Lang, ErrText)), + route_stanza( + jlib:jid_replace_resource( + StateData#state.jid, ToNick), + From, Err) + end; + ToJID -> + {ok, #user{nick = FromNick}} = + ?DICT:find(jlib:jid_tolower(FromFull), + StateData#state.users), + {ToJID2, Packet2} = handle_iq_vcard(FromFull, ToJID, + StanzaId, NewId,Packet), + route_stanza( + jlib:jid_replace_resource(StateData#state.jid, FromNick), + ToJID2, Packet2) + end; + {_, {false, _, _}} -> + case jlib:iq_query_info(Packet) of + reply -> + ok; + _ -> + ErrText = "Only occupants are allowed to send queries to the conference", + Err = jlib:make_error_reply( + Packet, ?ERRT_NOT_ACCEPTABLE(Lang, ErrText)), + route_stanza( + jlib:jid_replace_resource(StateData#state.jid, ToNick), + From, Err) + end; + _ -> + case jlib:iq_query_info(Packet) of + reply -> + ok; + _ -> + ErrText = "Queries to the conference members are not allowed in this room", + Err = jlib:make_error_reply( + Packet, ?ERRT_NOT_ALLOWED(Lang, ErrText)), + route_stanza( + jlib:jid_replace_resource(StateData#state.jid, ToNick), + From, Err) + end + end, + {next_state, normal_state, StateData}; + +normal_state(_Event, StateData) -> + {next_state, normal_state, StateData}. + + + +%%---------------------------------------------------------------------- +%% Func: handle_event/3 +%% Returns: {next_state, NextStateName, NextStateData} | +%% {next_state, NextStateName, NextStateData, Timeout} | +%% {stop, Reason, NewStateData} +%%---------------------------------------------------------------------- +handle_event({service_message, Msg}, _StateName, StateData) -> + MessagePkt = {xmlelement, "message", + [{"type", "groupchat"}], + [{xmlelement, "body", [], [{xmlcdata, Msg}]}]}, + lists:foreach( + fun({_LJID, Info}) -> + route_stanza( + StateData#state.jid, + Info#user.jid, + MessagePkt) + end, + ?DICT:to_list(StateData#state.users)), + NSD = add_message_to_history("", + StateData#state.jid, + MessagePkt, + StateData), + {next_state, normal_state, NSD}; + +handle_event({destroy, Reason}, _StateName, StateData) -> + {result, [], stop} = + destroy_room( + {xmlelement, "destroy", + [{"xmlns", ?NS_MUC_OWNER}], + case Reason of + none -> []; + _Else -> + [{xmlelement, "reason", + [], [{xmlcdata, Reason}]}] + end}, StateData), + ?INFO_MSG("Destroyed MUC room ~s with reason: ~p", + [jlib:jid_to_string(StateData#state.jid), Reason]), + add_to_log(room_existence, destroyed, StateData), + {stop, shutdown, StateData}; +handle_event(destroy, StateName, StateData) -> + ?INFO_MSG("Destroyed MUC room ~s", + [jlib:jid_to_string(StateData#state.jid)]), + handle_event({destroy, none}, StateName, StateData); + +handle_event({set_affiliations, Affiliations}, StateName, StateData) -> + {next_state, StateName, StateData#state{affiliations = Affiliations}}; + +handle_event(_Event, StateName, StateData) -> + {next_state, StateName, StateData}. + +%%---------------------------------------------------------------------- +%% Func: handle_sync_event/4 +%% Returns: {next_state, NextStateName, NextStateData} | +%% {next_state, NextStateName, NextStateData, Timeout} | +%% {reply, Reply, NextStateName, NextStateData} | +%% {reply, Reply, NextStateName, NextStateData, Timeout} | +%% {stop, Reason, NewStateData} | +%% {stop, Reason, Reply, NewStateData} +%%---------------------------------------------------------------------- +handle_sync_event({moderate_room_history, Nick}, _From, StateName, #state{history = History} = StateData) -> + NewHistory = lqueue_filter(fun({FromNick, _TSPacket, _HaveSubject, _Timestamp, _Size}) -> + FromNick /= Nick + end, History), + Moderated = History#lqueue.len - NewHistory#lqueue.len, + {reply, {ok, integer_to_list(Moderated)}, StateName, StateData#state{history = NewHistory}}; + +handle_sync_event(persist_recent_messages, _From, StateName, StateData) -> + {reply, persist_muc_history(StateData), StateName, StateData}; + +handle_sync_event({get_disco_item, JID, Lang}, _From, StateName, StateData) -> + Reply = get_roomdesc_reply(JID, StateData, + get_roomdesc_tail(StateData, Lang)), + {reply, Reply, StateName, StateData}; +handle_sync_event(get_config, _From, StateName, StateData) -> + {reply, {ok, StateData#state.config}, StateName, StateData}; +handle_sync_event(get_state, _From, StateName, StateData) -> + {reply, {ok, StateData}, StateName, StateData}; +handle_sync_event({change_config, Config}, _From, StateName, StateData) -> + {result, [], NSD} = change_config(Config, StateData), + {reply, {ok, NSD#state.config}, StateName, NSD}; +handle_sync_event({change_state, NewStateData}, _From, StateName, _StateData) -> + {reply, {ok, NewStateData}, StateName, NewStateData}; +handle_sync_event(_Event, _From, StateName, StateData) -> + Reply = ok, + {reply, Reply, StateName, StateData}. + +code_change(_OldVsn, StateName, StateData, _Extra) -> + {ok, StateName, StateData}. + +print_state(StateData) -> + StateData. + +%%---------------------------------------------------------------------- +%% Func: handle_info/3 +%% Returns: {next_state, NextStateName, NextStateData} | +%% {next_state, NextStateName, NextStateData, Timeout} | +%% {stop, Reason, NewStateData} +%%---------------------------------------------------------------------- +handle_info({process_user_presence, From}, normal_state = _StateName, StateData) -> + RoomQueueEmpty = queue:is_empty(StateData#state.room_queue), + RoomQueue = queue:in({presence, From}, StateData#state.room_queue), + StateData1 = StateData#state{room_queue = RoomQueue}, + if + RoomQueueEmpty -> + StateData2 = prepare_room_queue(StateData1), + {next_state, normal_state, StateData2}; + true -> + {next_state, normal_state, StateData1} + end; +handle_info({process_user_message, From}, normal_state = _StateName, StateData) -> + RoomQueueEmpty = queue:is_empty(StateData#state.room_queue), + RoomQueue = queue:in({message, From}, StateData#state.room_queue), + StateData1 = StateData#state{room_queue = RoomQueue}, + if + RoomQueueEmpty -> + StateData2 = prepare_room_queue(StateData1), + {next_state, normal_state, StateData2}; + true -> + {next_state, normal_state, StateData1} + end; +handle_info(process_room_queue, normal_state = StateName, StateData) -> + case queue:out(StateData#state.room_queue) of + {{value, {message, From}}, RoomQueue} -> + Activity = get_user_activity(From, StateData), + Packet = Activity#activity.message, + NewActivity = Activity#activity{message = undefined}, + StateData1 = + store_user_activity( + From, NewActivity, StateData), + StateData2 = + StateData1#state{ + room_queue = RoomQueue}, + StateData3 = prepare_room_queue(StateData2), + process_groupchat_message(From, Packet, StateData3); + {{value, {presence, From}}, RoomQueue} -> + Activity = get_user_activity(From, StateData), + {Nick, Packet} = Activity#activity.presence, + NewActivity = Activity#activity{presence = undefined}, + StateData1 = + store_user_activity( + From, NewActivity, StateData), + StateData2 = + StateData1#state{ + room_queue = RoomQueue}, + StateData3 = prepare_room_queue(StateData2), + process_presence(From, Nick, Packet, StateData3); + {empty, _} -> + {next_state, StateName, StateData} + end; +handle_info({captcha_succeed, From}, normal_state, StateData) -> + NewState = case ?DICT:find(From, StateData#state.robots) of + {ok, {Nick, Packet}} -> + Robots = ?DICT:store(From, passed, StateData#state.robots), + add_new_user(From, Nick, Packet, StateData#state{robots=Robots}); + _ -> + StateData + end, + {next_state, normal_state, NewState}; +handle_info({captcha_failed, From}, normal_state, StateData) -> + NewState = case ?DICT:find(From, StateData#state.robots) of + {ok, {Nick, Packet}} -> + Robots = ?DICT:erase(From, StateData#state.robots), + Err = jlib:make_error_reply( + Packet, ?ERR_NOT_AUTHORIZED), + route_stanza( % TODO: s/Nick/""/ + jlib:jid_replace_resource( + StateData#state.jid, Nick), + From, Err), + StateData#state{robots=Robots}; + _ -> + StateData + end, + {next_state, normal_state, NewState}; +handle_info({migrate, Node}, StateName, StateData) -> + if Node /= node() -> + {migrate, StateData, + {Node, ?MODULE, start, [StateName, StateData]}, 0}; + true -> + {next_state, StateName, StateData} + end; +handle_info('shutdown', _StateName, StateData) -> + {stop, 'shutdown', StateData}; +handle_info(_Info, StateName, StateData) -> + {next_state, StateName, StateData}. + +%%---------------------------------------------------------------------- +%% Func: terminate/3 +%% Purpose: Shutdown the fsm +%% Returns: any +%%---------------------------------------------------------------------- +terminate({migrated, Clone}, _StateName, StateData) -> + ?INFO_MSG("Migrating room ~s@~s to ~p on node ~p", + [StateData#state.room, StateData#state.host, + Clone, node(Clone)]), + mod_muc:room_destroyed(StateData#state.host, StateData#state.room, + self(), StateData#state.server_host), + ok; +terminate(Reason, _StateName, StateData) -> + ?INFO_MSG("Stopping MUC room ~s@~s", + [StateData#state.room, StateData#state.host]), + ReasonT = case Reason of + shutdown -> "You are being removed from the room because" + " of a system shutdown"; + _ -> "Room terminates" + end, + ItemAttrs = [{"affiliation", "none"}, {"role", "none"}], + ReasonEl = {xmlelement, "reason", [], [{xmlcdata, ReasonT}]}, + Packet = {xmlelement, "presence", [{"type", "unavailable"}], + [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], + [{xmlelement, "item", ItemAttrs, [ReasonEl]}, + {xmlelement, "status", [{"code", "332"}], []} + ]}]}, + ?DICT:fold( + fun(LJID, Info, _) -> + Nick = Info#user.nick, + case Reason of + shutdown -> + route_stanza( + jlib:jid_replace_resource(StateData#state.jid, Nick), + Info#user.jid, + Packet); + _ -> ok + end, + tab_remove_online_user(LJID, StateData) + end, [], StateData#state.users), + add_to_log(room_existence, stopped, StateData), + if + Reason == 'shutdown' -> + persist_muc_history(StateData); + true -> + ok + end, + (StateData#state.mod):room_destroyed( + StateData#state.host, StateData#state.room, self(), + StateData#state.server_host), + ok. + +%%%---------------------------------------------------------------------- +%%% Internal functions +%%%---------------------------------------------------------------------- + +load_history(_Host, _Room, false, Queue) -> + Queue; +load_history(Host, Room, true, Queue) -> + ?INFO_MSG("Loading history for room ~s on host ~s", [Room, Host]), + case odbc_queries:load_roomhistory(Host, ejabberd_odbc:escape(Room)) of + {selected, ["nick", "packet", "have_subject", "timestamp", "size"], Items} -> + ?DEBUG("Found ~p messages on history for ~s", [length(Items), Room]), + lists:foldl(fun(I, Q) -> + {Nick, XML, HS, Ts, Size} = I, + Item = {Nick, + xml_stream:parse_element(XML), + HS /= "0", + calendar:gregorian_seconds_to_datetime(list_to_integer(Ts)), + list_to_integer(Size)}, + lqueue_in(Item, Q) + end, Queue, Items); + _ -> + Queue + end. + + +persist_muc_history(#state{room = Room, server_host = Server, config = #config{persistent = true} ,persist_history = true, history = Q}) -> + ?INFO_MSG("Persisting history for room ~s on host ~s", [Room, Server]), + Queries = lists:map(fun({FromNick, Packet, HaveSubject, Timestamp, Size}) -> + odbc_queries:add_roomhistory_sql( + ejabberd_odbc:escape(Room), + ejabberd_odbc:escape(FromNick), + ejabberd_odbc:escape(xml:element_to_binary(Packet)), + atom_to_list(HaveSubject), + integer_to_list(calendar:datetime_to_gregorian_seconds(Timestamp)), + integer_to_list(Size)) + end, lqueue_to_list(Q)), + odbc_queries:clear_and_add_roomhistory(Server,ejabberd_odbc:escape(Room), Queries), + {ok, {persisted, length(Queries)}}; + %% en mod_muc, cuando se levantan los muc persistentes, si se crea, y el flag persist_history esta en true, + %% se levantan los mensajes persistentes tb. + +persist_muc_history(_) -> + {ok, not_persistent}. + +route(Pid, From, ToNick, Packet) -> + ?GEN_FSM:send_event(Pid, {route, From, ToNick, Packet}). + +process_groupchat_message(From, {xmlelement, "message", Attrs, _Els} = Packet, + StateData) -> + Lang = xml:get_attr_s("xml:lang", Attrs), + case is_user_online(From, StateData) orelse + is_user_allowed_message_nonparticipant(From, StateData) of + true -> + {FromNick, Role} = get_participant_data(From, StateData), + if + (Role == moderator) or (Role == participant) + or ((StateData#state.config)#config.moderated == false) -> + {NewStateData1, IsAllowed} = + case check_subject(Packet) of + false -> + {StateData, true}; + Subject -> + case can_change_subject(Role, + StateData) of + true -> + NSD = + StateData#state{ + subject = Subject, + subject_author = + FromNick}, + case (NSD#state.config)#config.persistent of + true -> + (NSD#state.mod):store_room( + NSD#state.server_host, + NSD#state.host, + NSD#state.room, + make_opts(NSD)); + _ -> + ok + end, + {NSD, true}; + _ -> + {StateData, false} + end + end, + case IsAllowed of + true -> + lists:foreach( + fun({_LJID, Info}) -> + route_stanza( + jlib:jid_replace_resource( + StateData#state.jid, + FromNick), + Info#user.jid, + Packet) + end, + ?DICT:to_list(StateData#state.users)), + NewStateData2 = + add_message_to_history(FromNick, + From, + Packet, + NewStateData1), + {next_state, normal_state, NewStateData2}; + _ -> + Err = + case (StateData#state.config)#config.allow_change_subj of + true -> + ?ERRT_FORBIDDEN( + Lang, + "Only moderators and participants " + "are allowed to change the subject in this room"); + _ -> + ?ERRT_FORBIDDEN( + Lang, + "Only moderators " + "are allowed to change the subject in this room") + end, + route_stanza( + StateData#state.jid, + From, + jlib:make_error_reply(Packet, Err)), + {next_state, normal_state, StateData} + end; + true -> + ErrText = "Visitors are not allowed to send messages to all occupants", + Err = jlib:make_error_reply( + Packet, ?ERRT_FORBIDDEN(Lang, ErrText)), + route_stanza( + StateData#state.jid, + From, Err), + {next_state, normal_state, StateData} + end; + false -> + ErrText = "Only occupants are allowed to send messages to the conference", + Err = jlib:make_error_reply( + Packet, ?ERRT_NOT_ACCEPTABLE(Lang, ErrText)), + route_stanza(StateData#state.jid, From, Err), + {next_state, normal_state, StateData} + end. + +%% @doc Check if this non participant can send message to room. +%% +%% XEP-0045 v1.23: +%% 7.9 Sending a Message to All Occupants +%% an implementation MAY allow users with certain privileges +%% (e.g., a room owner, room admin, or service-level admin) +%% to send messages to the room even if those users are not occupants. +is_user_allowed_message_nonparticipant(JID, StateData) -> + case get_service_affiliation(JID, StateData) of + owner -> + true; + _ -> false + end. + +%% @doc Get information of this participant, or default values. +%% If the JID is not a participant, return values for a service message. +get_participant_data(From, StateData) -> + case ?DICT:find(jlib:jid_tolower(From), StateData#state.users) of + {ok, #user{nick = FromNick, role = Role}} -> + {FromNick, Role}; + error -> + {"", moderator} + end. + + +process_presence(From, Nick, {xmlelement, "presence", Attrs, _Els} = Packet, + StateData) -> + Type = xml:get_attr_s("type", Attrs), + Lang = xml:get_attr_s("xml:lang", Attrs), + StateData1 = + case Type of + "unavailable" -> + case is_user_online(From, StateData) of + true -> + NewPacket = case {(StateData#state.config)#config.allow_visitor_status, + is_visitor(From, StateData)} of + {false, true} -> + strip_status(Packet); + _ -> + Packet + end, + NewState = + add_user_presence_un(From, NewPacket, StateData), + case ?DICT:find(Nick, StateData#state.nicks) of + {ok, [_, _ | _]} -> ok; + _ -> send_new_presence(From, NewState) + end, + Reason = case xml:get_subtag(NewPacket, "status") of + false -> ""; + Status_el -> xml:get_tag_cdata(Status_el) + end, + remove_online_user(From, NewState, Reason); + _ -> + StateData + end; + "error" -> + case is_user_online(From, StateData) of + true -> + ErrorText = "This participant is kicked from the room because " + "he sent an error presence", + expulse_participant(Packet, From, StateData, + translate:translate(Lang, ErrorText)); + _ -> + StateData + end; + "" -> + case is_user_online(From, StateData) of + true -> + case is_nick_change(From, Nick, StateData) of + true -> + case {nick_collision(From, Nick, StateData), + (StateData#state.mod):can_use_nick( + StateData#state.server_host, + StateData#state.host, From, Nick), + {(StateData#state.config)#config.allow_visitor_nickchange, + is_visitor(From, StateData)}} of + {_, _, {false, true}} -> + ErrText = "Visitors are not allowed to change their nicknames in this room", + Err = jlib:make_error_reply( + Packet, + ?ERRT_NOT_ALLOWED(Lang, ErrText)), + route_stanza( + % TODO: s/Nick/""/ + jlib:jid_replace_resource( + StateData#state.jid, + Nick), + From, Err), + StateData; + {true, _, _} -> + Lang = xml:get_attr_s("xml:lang", Attrs), + ErrText = "That nickname is already in use by another occupant", + Err = jlib:make_error_reply( + Packet, + ?ERRT_CONFLICT(Lang, ErrText)), + route_stanza( + jlib:jid_replace_resource( + StateData#state.jid, + Nick), % TODO: s/Nick/""/ + From, Err), + StateData; + {_, false, _} -> + ErrText = "That nickname is registered by another person", + Err = jlib:make_error_reply( + Packet, + ?ERRT_CONFLICT(Lang, ErrText)), + route_stanza( + % TODO: s/Nick/""/ + jlib:jid_replace_resource( + StateData#state.jid, + Nick), + From, Err), + StateData; + _ -> + change_nick(From, Nick, StateData) + end; + _NotNickChange -> + Stanza = case {(StateData#state.config)#config.allow_visitor_status, + is_visitor(From, StateData)} of + {false, true} -> + strip_status(Packet); + _Allowed -> + Packet + end, + NewState = add_user_presence(From, Stanza, StateData), + send_new_presence(From, NewState), + NewState + end; + _ -> + add_new_user(From, Nick, Packet, StateData) + end; + _ -> + StateData + end, + case (not (StateData1#state.config)#config.persistent) andalso + (?DICT:to_list(StateData1#state.users) == []) of + true -> + ?INFO_MSG("Destroyed MUC room ~s because it's temporary and empty", + [jlib:jid_to_string(StateData#state.jid)]), + add_to_log(room_existence, destroyed, StateData), + {stop, normal, StateData1}; + _ -> + {next_state, normal_state, StateData1} + end. + +is_user_online(JID, StateData) -> + LJID = jlib:jid_tolower(JID), + ?DICT:is_key(LJID, StateData#state.users). + +%% Check if the user is occupant of the room, or at least is an admin or owner. +is_occupant_or_admin(JID, StateData) -> + FAffiliation = get_affiliation(JID, StateData), + FRole = get_role(JID, StateData), + case (FRole /= none) orelse + (FAffiliation == admin) orelse + (FAffiliation == owner) of + true -> + true; + _ -> + false + end. + +%%% +%%% Handle IQ queries of vCard +%%% +is_user_online_iq(StanzaId, JID, StateData) when JID#jid.lresource /= "" -> + {is_user_online(JID, StateData), StanzaId, JID}; +is_user_online_iq(StanzaId, JID, StateData) when JID#jid.lresource == "" -> + try stanzaid_unpack(StanzaId) of + {OriginalId, Resource} -> + JIDWithResource = jlib:jid_replace_resource(JID, Resource), + {is_user_online(JIDWithResource, StateData), + OriginalId, JIDWithResource} + catch + _:_ -> + {is_user_online(JID, StateData), StanzaId, JID} + end. + +handle_iq_vcard(FromFull, ToJID, StanzaId, NewId, Packet) -> + ToBareJID = jlib:jid_remove_resource(ToJID), + IQ = jlib:iq_query_info(Packet), + handle_iq_vcard2(FromFull, ToJID, ToBareJID, StanzaId, NewId, IQ, Packet). +handle_iq_vcard2(_FromFull, ToJID, ToBareJID, StanzaId, _NewId, + #iq{type = get, xmlns = ?NS_VCARD}, Packet) + when ToBareJID /= ToJID -> + {ToBareJID, change_stanzaid(StanzaId, ToJID, Packet)}; +handle_iq_vcard2(_FromFull, ToJID, _ToBareJID, _StanzaId, NewId, _IQ, Packet) -> + {ToJID, change_stanzaid(NewId, Packet)}. + +stanzaid_pack(OriginalId, Resource) -> + "berd"++base64:encode_to_string("ejab\0" ++ OriginalId ++ "\0" ++ Resource). +stanzaid_unpack("berd"++StanzaIdBase64) -> + StanzaId = base64:decode_to_string(StanzaIdBase64), + ["ejab", OriginalId, Resource] = string:tokens(StanzaId, "\0"), + {OriginalId, Resource}. + +change_stanzaid(NewId, Packet) -> + {xmlelement, Name, Attrs, Els} = jlib:remove_attr("id", Packet), + {xmlelement, Name, [{"id", NewId} | Attrs], Els}. +change_stanzaid(PreviousId, ToJID, Packet) -> + NewId = stanzaid_pack(PreviousId, ToJID#jid.lresource), + change_stanzaid(NewId, Packet). +%%% +%%% + +role_to_list(Role) -> + case Role of + moderator -> "moderator"; + participant -> "participant"; + visitor -> "visitor"; + none -> "none" + end. + +affiliation_to_list(Affiliation) -> + case Affiliation of + owner -> "owner"; + admin -> "admin"; + member -> "member"; + outcast -> "outcast"; + none -> "none" + end. + +list_to_role(Role) -> + case Role of + "moderator" -> moderator; + "participant" -> participant; + "visitor" -> visitor; + "none" -> none + end. + +list_to_affiliation(Affiliation) -> + case Affiliation of + "owner" -> owner; + "admin" -> admin; + "member" -> member; + "outcast" -> outcast; + "none" -> none + end. + +%% Decide the fate of the message and its sender +%% Returns: continue_delivery | forget_message | {expulse_sender, Reason} +decide_fate_message("error", Packet, From, StateData) -> + %% Make a preliminary decision + PD = case check_error_kick(Packet) of + %% If this is an error stanza and its condition matches a criteria + true -> + Reason = io_lib:format("This participant is considered a ghost and is expulsed: ~s", + [jlib:jid_to_string(From)]), + {expulse_sender, Reason}; + false -> + continue_delivery + end, + case PD of + {expulse_sender, R} -> + case is_user_online(From, StateData) of + true -> + {expulse_sender, R}; + false -> + forget_message + end; + Other -> + Other + end; + +decide_fate_message(_, _, _, _) -> + continue_delivery. + +%% Check if the elements of this error stanza indicate +%% that the sender is a dead participant. +%% If so, return true to kick the participant. +check_error_kick(Packet) -> + case get_error_condition(Packet) of + "gone" -> true; + "internal-server-error" -> true; + "item-not-found" -> true; + "jid-malformed" -> true; + "recipient-unavailable" -> true; + "redirect" -> true; + "remote-server-not-found" -> true; + "remote-server-timeout" -> true; + "service-unavailable" -> true; + _ -> false + end. + +get_error_condition(Packet) -> + case catch get_error_condition2(Packet) of + {condition, ErrorCondition} -> + ErrorCondition; + {'EXIT', _} -> + "badformed error stanza" + end. +get_error_condition2(Packet) -> + {xmlelement, _, _, EEls} = xml:get_subtag(Packet, "error"), + [Condition] = [Name || {xmlelement, Name, [{"xmlns", ?NS_STANZAS}], []} <- EEls], + {condition, Condition}. + +expulse_participant(Packet, From, StateData, Reason1) -> + ErrorCondition = get_error_condition(Packet), + Reason2 = io_lib:format(Reason1 ++ ": " ++ "~s", [ErrorCondition]), + NewState = add_user_presence_un( + From, + {xmlelement, "presence", + [{"type", "unavailable"}], + [{xmlelement, "status", [], + [{xmlcdata, Reason2}] + }]}, + StateData), + send_new_presence(From, NewState), + remove_online_user(From, NewState). + + +set_affiliation(JID, Affiliation, StateData) -> + set_affiliation(JID, Affiliation, StateData, ""). + +set_affiliation(JID, Affiliation, StateData, Reason) -> + LJID = jlib:jid_remove_resource(jlib:jid_tolower(JID)), + Affiliations = case Affiliation of + none -> + ?DICT:erase(LJID, + StateData#state.affiliations); + _ -> + ?DICT:store(LJID, + {Affiliation, Reason}, + StateData#state.affiliations) + end, + StateData#state{affiliations = Affiliations}. + +get_affiliation(JID, StateData) -> + {_AccessRoute, _AccessCreate, AccessAdmin, _AccessPersistent} = StateData#state.access, + Res = + case acl:match_rule(StateData#state.server_host, AccessAdmin, JID) of + allow -> + owner; + _ -> + LJID = jlib:jid_tolower(JID), + case ?DICT:find(LJID, StateData#state.affiliations) of + {ok, Affiliation} -> + Affiliation; + _ -> + LJID1 = jlib:jid_remove_resource(LJID), + case ?DICT:find(LJID1, StateData#state.affiliations) of + {ok, Affiliation} -> + Affiliation; + _ -> + LJID2 = setelement(1, LJID, ""), + case ?DICT:find(LJID2, StateData#state.affiliations) of + {ok, Affiliation} -> + Affiliation; + _ -> + LJID3 = jlib:jid_remove_resource(LJID2), + case ?DICT:find(LJID3, StateData#state.affiliations) of + {ok, Affiliation} -> + Affiliation; + _ -> + none + end + end + end + end + end, + case Res of + {A, _Reason} -> + A; + _ -> + Res + end. + +get_service_affiliation(JID, StateData) -> + {_AccessRoute, _AccessCreate, AccessAdmin, _AccessPersistent} = + StateData#state.access, + case acl:match_rule(StateData#state.server_host, AccessAdmin, JID) of + allow -> + owner; + _ -> + none + end. + +set_role(JID, Role, StateData) -> + LJID = jlib:jid_tolower(JID), + LJIDs = case LJID of + {U, S, ""} -> + ?DICT:fold( + fun(J, _, Js) -> + case J of + {U, S, _} -> + [J | Js]; + _ -> + Js + end + end, [], StateData#state.users); + _ -> + case ?DICT:is_key(LJID, StateData#state.users) of + true -> + [LJID]; + _ -> + [] + end + end, + {Users, Nicks} + = case Role of + none -> + lists:foldl(fun(J, {Us, Ns}) -> + NewNs = + case ?DICT:find(J, Us) of + {ok, #user{nick = Nick}} -> + ?DICT:erase(Nick, Ns); + _ -> + Ns + end, + {?DICT:erase(J, Us), NewNs} + end, + {StateData#state.users, StateData#state.nicks}, + LJIDs); + _ -> + {lists:foldl(fun(J, Us) -> + {ok, User} = ?DICT:find(J, Us), + ?DICT:store(J, + User#user{role = Role}, + Us) + end, StateData#state.users, LJIDs), + StateData#state.nicks} + end, + StateData#state{users = Users, nicks = Nicks}. + +get_role(JID, StateData) -> + LJID = jlib:jid_tolower(JID), + case ?DICT:find(LJID, StateData#state.users) of + {ok, #user{role = Role}} -> + Role; + _ -> + none + end. + +get_default_role(Affiliation, StateData) -> + case Affiliation of + owner -> moderator; + admin -> moderator; + member -> participant; + outcast -> none; + none -> + case (StateData#state.config)#config.members_only of + true -> + none; + _ -> + case (StateData#state.config)#config.members_by_default of + true -> + participant; + _ -> + visitor + end + end + end. + +is_visitor(Jid, StateData) -> + get_role(Jid, StateData) =:= visitor. + +is_moderator(Jid, StateData) -> + get_role(Jid, StateData) =:= moderator. + +get_max_users(StateData) -> + MaxUsers = (StateData#state.config)#config.max_users, + ServiceMaxUsers = get_service_max_users(StateData), + if + MaxUsers =< ServiceMaxUsers -> MaxUsers; + true -> ServiceMaxUsers + end. + +get_service_max_users(StateData) -> + gen_mod:get_module_opt(StateData#state.server_host, + StateData#state.mod, max_users, ?MAX_USERS_DEFAULT). + +get_max_users_admin_threshold(StateData) -> + gen_mod:get_module_opt(StateData#state.server_host, + StateData#state.mod, max_users_admin_threshold, 5). + +get_user_activity(JID, StateData) -> + case treap:lookup(jlib:jid_tolower(JID), + StateData#state.activity) of + {ok, _P, A} -> A; + error -> + MessageShaper = + shaper:new(gen_mod:get_module_opt( + StateData#state.server_host, + StateData#state.mod, user_message_shaper, none)), + PresenceShaper = + shaper:new(gen_mod:get_module_opt( + StateData#state.server_host, + StateData#state.mod, user_presence_shaper, none)), + #activity{message_shaper = MessageShaper, + presence_shaper = PresenceShaper} + end. + +store_user_activity(JID, UserActivity, StateData) -> + MinMessageInterval = + gen_mod:get_module_opt( + StateData#state.server_host, + StateData#state.mod, min_message_interval, 0), + MinPresenceInterval = + gen_mod:get_module_opt( + StateData#state.server_host, + StateData#state.mod, min_presence_interval, 0), + Key = jlib:jid_tolower(JID), + Now = now_to_usec(now()), + Activity1 = clean_treap(StateData#state.activity, {1, -Now}), + Activity = + case treap:lookup(Key, Activity1) of + {ok, _P, _A} -> + treap:delete(Key, Activity1); + error -> + Activity1 + end, + StateData1 = + case (MinMessageInterval == 0) andalso + (MinPresenceInterval == 0) andalso + (UserActivity#activity.message_shaper == none) andalso + (UserActivity#activity.presence_shaper == none) andalso + (UserActivity#activity.message == undefined) andalso + (UserActivity#activity.presence == undefined) of + true -> + StateData#state{activity = Activity}; + false -> + case (UserActivity#activity.message == undefined) andalso + (UserActivity#activity.presence == undefined) of + true -> + {_, MessageShaperInterval} = + shaper:update(UserActivity#activity.message_shaper, + 100000), + {_, PresenceShaperInterval} = + shaper:update(UserActivity#activity.presence_shaper, + 100000), + Delay = lists:max([MessageShaperInterval, + PresenceShaperInterval, + MinMessageInterval * 1000, + MinPresenceInterval * 1000]) * 1000, + Priority = {1, -(Now + Delay)}, + StateData#state{ + activity = treap:insert( + Key, + Priority, + UserActivity, + Activity)}; + false -> + Priority = {0, 0}, + StateData#state{ + activity = treap:insert( + Key, + Priority, + UserActivity, + Activity)} + end + end, + StateData1. + +clean_treap(Treap, CleanPriority) -> + case treap:is_empty(Treap) of + true -> + Treap; + false -> + {_Key, Priority, _Value} = treap:get_root(Treap), + if + Priority > CleanPriority -> + clean_treap(treap:delete_root(Treap), CleanPriority); + true -> + Treap + end + end. + + +prepare_room_queue(StateData) -> + case queue:out(StateData#state.room_queue) of + {{value, {message, From}}, _RoomQueue} -> + Activity = get_user_activity(From, StateData), + Packet = Activity#activity.message, + Size = element_size(Packet), + {RoomShaper, RoomShaperInterval} = + shaper:update(StateData#state.room_shaper, Size), + erlang:send_after( + RoomShaperInterval, self(), + process_room_queue), + StateData#state{ + room_shaper = RoomShaper}; + {{value, {presence, From}}, _RoomQueue} -> + Activity = get_user_activity(From, StateData), + {_Nick, Packet} = Activity#activity.presence, + Size = element_size(Packet), + {RoomShaper, RoomShaperInterval} = + shaper:update(StateData#state.room_shaper, Size), + erlang:send_after( + RoomShaperInterval, self(), + process_room_queue), + StateData#state{ + room_shaper = RoomShaper}; + {empty, _} -> + StateData + end. + + +add_online_user(JID, Nick, Role, StateData) -> + LJID = jlib:jid_tolower(JID), + Users = ?DICT:store(LJID, + #user{jid = JID, + nick = Nick, + role = Role}, + StateData#state.users), + add_to_log(join, Nick, StateData), + Nicks = ?DICT:update(Nick, + fun(Entry) -> + case lists:member(LJID, Entry) of + true -> + Entry; + false -> + [LJID|Entry] + end + end, + [LJID], + StateData#state.nicks), + tab_add_online_user(JID, StateData), + StateData#state{users = Users, nicks = Nicks}. + +remove_online_user(JID, StateData) -> + remove_online_user(JID, StateData, ""). + +remove_online_user(JID, StateData, Reason) -> + LJID = jlib:jid_tolower(JID), + {ok, #user{nick = Nick}} = + ?DICT:find(LJID, StateData#state.users), + add_to_log(leave, {Nick, Reason}, StateData), + tab_remove_online_user(JID, StateData), + Users = ?DICT:erase(LJID, StateData#state.users), + Nicks = case ?DICT:find(Nick, StateData#state.nicks) of + {ok, [LJID]} -> + ?DICT:erase(Nick, StateData#state.nicks); + {ok, U} -> + ?DICT:store(Nick, U -- [LJID], StateData#state.nicks); + error -> + StateData#state.nicks + end, + StateData#state{users = Users, nicks = Nicks}. + + +filter_presence({xmlelement, "presence", Attrs, Els}) -> + FEls = lists:filter( + fun(El) -> + case El of + {xmlcdata, _} -> + false; + {xmlelement, _Name1, Attrs1, _Els1} -> + XMLNS = xml:get_attr_s("xmlns", Attrs1), + case XMLNS of + ?NS_MUC ++ _ -> + false; + _ -> + true + end + end + end, Els), + {xmlelement, "presence", Attrs, FEls}. + +strip_status({xmlelement, "presence", Attrs, Els}) -> + FEls = lists:filter( + fun({xmlelement, "status", _Attrs1, _Els1}) -> + false; + (_) -> true + end, Els), + {xmlelement, "presence", Attrs, FEls}. + +add_user_presence(JID, Presence, StateData) -> + LJID = jlib:jid_tolower(JID), + FPresence = filter_presence(Presence), + Users = + ?DICT:update( + LJID, + fun(#user{} = User) -> + User#user{last_presence = FPresence} + end, StateData#state.users), + StateData#state{users = Users}. + +add_user_presence_un(JID, Presence, StateData) -> + LJID = jlib:jid_tolower(JID), + FPresence = filter_presence(Presence), + Users = + ?DICT:update( + LJID, + fun(#user{} = User) -> + User#user{last_presence = FPresence, + role = none} + end, StateData#state.users), + StateData#state{users = Users}. + + +%% Find and return a list of the full JIDs of the users of Nick. +%% Return jid record. +find_jids_by_nick(Nick, StateData) -> + case ?DICT:find(Nick, StateData#state.nicks) of + {ok, [User]} -> + [jlib:make_jid(User)]; + {ok, Users} -> + [jlib:make_jid(LJID) || LJID <- Users]; + error -> + false + end. + +%% Find and return the full JID of the user of Nick with +%% highest-priority presence. Return jid record. +find_jid_by_nick(Nick, StateData) -> + case ?DICT:find(Nick, StateData#state.nicks) of + {ok, [User]} -> + jlib:make_jid(User); + {ok, [FirstUser|Users]} -> + #user{last_presence = FirstPresence} = + ?DICT:fetch(FirstUser, StateData#state.users), + {LJID, _} = + lists:foldl(fun(Compare, {HighestUser, HighestPresence}) -> + #user{last_presence = P1} = + ?DICT:fetch(Compare, StateData#state.users), + case higher_presence(P1, HighestPresence) of + true -> + {Compare, P1}; + false -> + {HighestUser, HighestPresence} + end + end, {FirstUser, FirstPresence}, Users), + jlib:make_jid(LJID); + error -> + false + end. + +higher_presence(Pres1, Pres2) -> + Pri1 = get_priority_from_presence(Pres1), + Pri2 = get_priority_from_presence(Pres2), + Pri1 > Pri2. + +get_priority_from_presence(PresencePacket) -> + case xml:get_subtag(PresencePacket, "priority") of + false -> + 0; + SubEl -> + case catch list_to_integer(xml:get_tag_cdata(SubEl)) of + P when is_integer(P) -> + P; + _ -> + 0 + end + end. + +find_nick_by_jid(Jid, StateData) -> + [{_, #user{nick = Nick}}] = lists:filter( + fun({_, #user{jid = FJid}}) -> FJid == Jid end, + ?DICT:to_list(StateData#state.users)), + Nick. + +is_nick_change(JID, Nick, StateData) -> + LJID = jlib:jid_tolower(JID), + case Nick of + "" -> + false; + _ -> + {ok, #user{nick = OldNick}} = + ?DICT:find(LJID, StateData#state.users), + Nick /= OldNick + end. + +nick_collision(User, Nick, StateData) -> + UserOfNick = find_jid_by_nick(Nick, StateData), + %% if nick is not used, or is used by another resource of the same + %% user, it's ok. + UserOfNick /= false andalso + jlib:jid_remove_resource(jlib:jid_tolower(UserOfNick)) /= + jlib:jid_remove_resource(jlib:jid_tolower(User)). + +add_new_user(From, Nick, {xmlelement, _, Attrs, Els} = Packet, StateData) -> + Lang = xml:get_attr_s("xml:lang", Attrs), + MaxUsers = get_max_users(StateData), + MaxAdminUsers = MaxUsers + get_max_users_admin_threshold(StateData), + NUsers = dict:fold(fun(_, _, Acc) -> Acc + 1 end, 0, + StateData#state.users), + Affiliation = get_affiliation(From, StateData), + ServiceAffiliation = get_service_affiliation(From, StateData), + NConferences = tab_count_user(From), + MaxConferences = gen_mod:get_module_opt( + StateData#state.server_host, + StateData#state.mod, max_user_conferences, 10), + Collision = nick_collision(From, Nick, StateData), + case {(ServiceAffiliation == owner orelse + ((Affiliation == admin orelse Affiliation == owner) andalso + NUsers < MaxAdminUsers) orelse + NUsers < MaxUsers) andalso + NConferences < MaxConferences, + Collision, + (StateData#state.mod):can_use_nick(StateData#state.server_host, + StateData#state.host, From, Nick), + get_default_role(Affiliation, StateData)} of + {false, _, _, _} -> + % max user reached and user is not admin or owner + Err = jlib:make_error_reply( + Packet, + ?ERR_SERVICE_UNAVAILABLE), + route_stanza( % TODO: s/Nick/""/ + jlib:jid_replace_resource(StateData#state.jid, Nick), + From, Err), + StateData; + {_, _, _, none} -> + Err = jlib:make_error_reply( + Packet, + case Affiliation of + outcast -> + ErrText = "You have been banned from this room", + ?ERRT_FORBIDDEN(Lang, ErrText); + _ -> + ErrText = "Membership is required to enter this room", + ?ERRT_REGISTRATION_REQUIRED(Lang, ErrText) + end), + route_stanza( % TODO: s/Nick/""/ + jlib:jid_replace_resource(StateData#state.jid, Nick), + From, Err), + StateData; + {_, true, _, _} -> + ErrText = "That nickname is already in use by another occupant", + Err = jlib:make_error_reply(Packet, ?ERRT_CONFLICT(Lang, ErrText)), + route_stanza( + % TODO: s/Nick/""/ + jlib:jid_replace_resource(StateData#state.jid, Nick), + From, Err), + StateData; + {_, _, false, _} -> + ErrText = "That nickname is registered by another person", + Err = jlib:make_error_reply(Packet, ?ERRT_CONFLICT(Lang, ErrText)), + route_stanza( + % TODO: s/Nick/""/ + jlib:jid_replace_resource(StateData#state.jid, Nick), + From, Err), + StateData; + {_, _, _, Role} -> + case check_password(ServiceAffiliation, Affiliation, + Els, From, StateData) of + true -> + NewState = + add_user_presence( + From, Packet, + add_online_user(From, Nick, Role, StateData)), + if not (NewState#state.config)#config.anonymous -> + WPacket = {xmlelement, "message", [{"type", "groupchat"}], + [{xmlelement, "body", [], + [{xmlcdata, translate:translate( + Lang, + "This room is not anonymous")}]}, + {xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], + [{xmlelement, "status", [{"code", "100"}], []}]}]}, + route_stanza( + StateData#state.jid, + From, WPacket); + true -> + ok + end, + send_existing_presences(From, NewState), + send_new_presence(From, NewState), + Shift = count_stanza_shift(Nick, Els, NewState), + case send_history(From, Shift, NewState) of + true -> + ok; + _ -> + send_subject(From, Lang, StateData) + end, + case NewState#state.just_created of + true -> + NewState#state{just_created = false}; + false -> + Robots = ?DICT:erase(From, StateData#state.robots), + NewState#state{robots = Robots} + end; + nopass -> + ErrText = "A password is required to enter this room", + Err = jlib:make_error_reply( + Packet, ?ERRT_NOT_AUTHORIZED(Lang, ErrText)), + route_stanza( % TODO: s/Nick/""/ + jlib:jid_replace_resource( + StateData#state.jid, Nick), + From, Err), + StateData; + captcha_required -> + SID = xml:get_attr_s("id", Attrs), + RoomJID = StateData#state.jid, + To = jlib:jid_replace_resource(RoomJID, Nick), + Limiter = {From#jid.luser, From#jid.lserver}, + case ejabberd_captcha:create_captcha( + SID, RoomJID, To, Lang, Limiter, From) of + {ok, ID, CaptchaEls} -> + MsgPkt = {xmlelement, "message", [{"id", ID}], CaptchaEls}, + Robots = ?DICT:store(From, + {Nick, Packet}, StateData#state.robots), + route_stanza(RoomJID, From, MsgPkt), + StateData#state{robots = Robots}; + {error, limit} -> + ErrText = "Too many CAPTCHA requests", + Err = jlib:make_error_reply( + Packet, ?ERRT_RESOURCE_CONSTRAINT(Lang, ErrText)), + route_stanza( % TODO: s/Nick/""/ + jlib:jid_replace_resource( + StateData#state.jid, Nick), + From, Err), + StateData; + _ -> + ErrText = "Unable to generate a CAPTCHA", + Err = jlib:make_error_reply( + Packet, ?ERRT_INTERNAL_SERVER_ERROR(Lang, ErrText)), + route_stanza( % TODO: s/Nick/""/ + jlib:jid_replace_resource( + StateData#state.jid, Nick), + From, Err), + StateData + end; + _ -> + ErrText = "Incorrect password", + Err = jlib:make_error_reply( + Packet, ?ERRT_NOT_AUTHORIZED(Lang, ErrText)), + route_stanza( % TODO: s/Nick/""/ + jlib:jid_replace_resource( + StateData#state.jid, Nick), + From, Err), + StateData + end + end. + +check_password(owner, _Affiliation, _Els, _From, _StateData) -> + %% Don't check pass if user is owner in MUC service (access_admin option) + true; +check_password(_ServiceAffiliation, Affiliation, Els, From, StateData) -> + case (StateData#state.config)#config.password_protected of + false -> + check_captcha(Affiliation, From, StateData); + true -> + Pass = extract_password(Els), + case Pass of + false -> + nopass; + _ -> + case (StateData#state.config)#config.password of + Pass -> + true; + _ -> + false + end + end + end. + +check_captcha(Affiliation, From, StateData) -> + case (StateData#state.config)#config.captcha_protected + andalso ejabberd_captcha:is_feature_available() of + true when Affiliation == none -> + case ?DICT:find(From, StateData#state.robots) of + {ok, passed} -> + true; + _ -> + WList = (StateData#state.config)#config.captcha_whitelist, + #jid{luser = U, lserver = S, lresource = R} = From, + case ?SETS:is_element({U, S, R}, WList) of + true -> + true; + false -> + case ?SETS:is_element({U, S, ""}, WList) of + true -> + true; + false -> + case ?SETS:is_element({"", S, ""}, WList) of + true -> + true; + false -> + captcha_required + end + end + end + end; + _ -> + true + end. + +extract_password([]) -> + false; +extract_password([{xmlelement, _Name, Attrs, _SubEls} = El | Els]) -> + case xml:get_attr_s("xmlns", Attrs) of + ?NS_MUC -> + case xml:get_subtag(El, "password") of + false -> + false; + SubEl -> + xml:get_tag_cdata(SubEl) + end; + _ -> + extract_password(Els) + end; +extract_password([_ | Els]) -> + extract_password(Els). + +count_stanza_shift(Nick, Els, StateData) -> + HL = lqueue_to_list(StateData#state.history), + Since = extract_history(Els, "since"), + Shift0 = case Since of + false -> + 0; + _ -> + Sin = calendar:datetime_to_gregorian_seconds(Since), + count_seconds_shift(Sin, HL) + end, + Seconds = extract_history(Els, "seconds"), + Shift1 = case Seconds of + false -> + 0; + _ -> + Sec = calendar:datetime_to_gregorian_seconds( + calendar:now_to_universal_time(now())) - Seconds, + count_seconds_shift(Sec, HL) + end, + MaxStanzas = extract_history(Els, "maxstanzas"), + Shift2 = case MaxStanzas of + false -> + 0; + _ -> + count_maxstanzas_shift(MaxStanzas, HL) + end, + MaxChars = extract_history(Els, "maxchars"), + Shift3 = case MaxChars of + false -> + 0; + _ -> + count_maxchars_shift(Nick, MaxChars, HL) + end, + lists:max([Shift0, Shift1, Shift2, Shift3]). + +count_seconds_shift(Seconds, HistoryList) -> + lists:sum( + lists:map( + fun({_Nick, _Packet, _HaveSubject, TimeStamp, _Size}) -> + T = calendar:datetime_to_gregorian_seconds(TimeStamp), + if + T < Seconds -> + 1; + true -> + 0 + end + end, HistoryList)). + +count_maxstanzas_shift(MaxStanzas, HistoryList) -> + S = length(HistoryList) - MaxStanzas, + if + S =< 0 -> + 0; + true -> + S + end. + +count_maxchars_shift(Nick, MaxSize, HistoryList) -> + NLen = string:len(Nick) + 1, + Sizes = lists:map( + fun({_Nick, _Packet, _HaveSubject, _TimeStamp, Size}) -> + Size + NLen + end, HistoryList), + calc_shift(MaxSize, Sizes). + +calc_shift(MaxSize, Sizes) -> + Total = lists:sum(Sizes), + calc_shift(MaxSize, Total, 0, Sizes). + +calc_shift(_MaxSize, _Size, Shift, []) -> + Shift; +calc_shift(MaxSize, Size, Shift, [S | TSizes]) -> + if + MaxSize >= Size -> + Shift; + true -> + calc_shift(MaxSize, Size - S, Shift + 1, TSizes) + end. + +extract_history([], _Type) -> + false; +extract_history([{xmlelement, _Name, Attrs, _SubEls} = El | Els], Type) -> + case xml:get_attr_s("xmlns", Attrs) of + ?NS_MUC -> + AttrVal = xml:get_path_s(El, + [{elem, "history"}, {attr, Type}]), + case Type of + "since" -> + case jlib:datetime_string_to_timestamp(AttrVal) of + undefined -> + false; + TS -> + calendar:now_to_universal_time(TS) + end; + _ -> + case catch list_to_integer(AttrVal) of + IntVal when is_integer(IntVal) and (IntVal >= 0) -> + IntVal; + _ -> + false + end + end; + _ -> + extract_history(Els, Type) + end; +extract_history([_ | Els], Type) -> + extract_history(Els, Type). + + +send_update_presence(JID, StateData) -> + send_update_presence(JID, "", StateData). + +send_update_presence(JID, Reason, StateData) -> + LJID = jlib:jid_tolower(JID), + LJIDs = case LJID of + {U, S, ""} -> + ?DICT:fold( + fun(J, _, Js) -> + case J of + {U, S, _} -> + [J | Js]; + _ -> + Js + end + end, [], StateData#state.users); + _ -> + case ?DICT:is_key(LJID, StateData#state.users) of + true -> + [LJID]; + _ -> + [] + end + end, + lists:foreach(fun(J) -> + send_new_presence(J, Reason, StateData) + end, LJIDs). + +send_new_presence(NJID, StateData) -> + send_new_presence(NJID, "", StateData). + +send_new_presence(NJID, Reason, StateData) -> + %% First, find the nick associated with this JID. + #user{nick = Nick} = ?DICT:fetch(jlib:jid_tolower(NJID), StateData#state.users), + %% Then find the JID using this nick with highest priority. + LJID = find_jid_by_nick(Nick, StateData), + %% Then we get the presence data we're supposed to send. + {ok, #user{jid = RealJID, + role = Role, + last_presence = Presence}} = + ?DICT:find(jlib:jid_tolower(LJID), StateData#state.users), + Affiliation = get_affiliation(LJID, StateData), + SAffiliation = affiliation_to_list(Affiliation), + SRole = role_to_list(Role), + lists:foreach( + fun({_LJID, Info}) -> + ItemAttrs = + case (Info#user.role == moderator) orelse + ((StateData#state.config)#config.anonymous == false) of + true -> + [{"jid", jlib:jid_to_string(RealJID)}, + {"affiliation", SAffiliation}, + {"role", SRole}]; + _ -> + [{"affiliation", SAffiliation}, + {"role", SRole}] + end, + ItemEls = case Reason of + "" -> + []; + _ -> + [{xmlelement, "reason", [], + [{xmlcdata, Reason}]}] + end, + Status = case StateData#state.just_created of + true -> + [{xmlelement, "status", [{"code", "201"}], []}]; + false -> + [] + end, + Status2 = case ((StateData#state.config)#config.anonymous==false) + andalso (NJID == Info#user.jid) of + true -> + [{xmlelement, "status", [{"code", "100"}], []} + | Status]; + false -> + Status + end, + Status3 = case NJID == Info#user.jid of + true -> + [{xmlelement, "status", [{"code", "110"}], []} + | Status2]; + false -> + Status2 + end, + Packet = xml:append_subtags( + Presence, + [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], + [{xmlelement, "item", ItemAttrs, ItemEls} | Status3]}]), + route_stanza( + jlib:jid_replace_resource(StateData#state.jid, Nick), + Info#user.jid, + Packet) + end, ?DICT:to_list(StateData#state.users)). + + +send_existing_presences(ToJID, StateData) -> + LToJID = jlib:jid_tolower(ToJID), + {ok, #user{jid = RealToJID, + role = Role}} = + ?DICT:find(LToJID, StateData#state.users), + lists:foreach( + fun({FromNick, _Users}) -> + LJID = find_jid_by_nick(FromNick, StateData), + #user{jid = FromJID, + role = FromRole, + last_presence = Presence + } = ?DICT:fetch(jlib:jid_tolower(LJID), StateData#state.users), + case RealToJID of + FromJID -> + ok; + _ -> + FromAffiliation = get_affiliation(LJID, StateData), + ItemAttrs = + case (Role == moderator) orelse + ((StateData#state.config)#config.anonymous == + false) of + true -> + [{"jid", jlib:jid_to_string(FromJID)}, + {"affiliation", + affiliation_to_list(FromAffiliation)}, + {"role", role_to_list(FromRole)}]; + _ -> + [{"affiliation", + affiliation_to_list(FromAffiliation)}, + {"role", role_to_list(FromRole)}] + end, + Packet = xml:append_subtags( + Presence, + [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], + [{xmlelement, "item", ItemAttrs, []}]}]), + route_stanza( + jlib:jid_replace_resource( + StateData#state.jid, FromNick), + RealToJID, + Packet) + end + end, ?DICT:to_list(StateData#state.nicks)). + + +now_to_usec({MSec, Sec, USec}) -> + (MSec*1000000 + Sec)*1000000 + USec. + + +change_nick(JID, Nick, StateData) -> + LJID = jlib:jid_tolower(JID), + {ok, #user{nick = OldNick}} = + ?DICT:find(LJID, StateData#state.users), + Users = + ?DICT:update( + LJID, + fun(#user{} = User) -> + User#user{nick = Nick} + end, StateData#state.users), + OldNickUsers = ?DICT:fetch(OldNick, StateData#state.nicks), + NewNickUsers = case ?DICT:find(Nick, StateData#state.nicks) of + {ok, U} -> U; + error -> [] + end, + %% Send unavailable presence from the old nick if it's no longer + %% used. + SendOldUnavailable = length(OldNickUsers) == 1, + %% If we send unavailable presence from the old nick, we should + %% probably send presence from the new nick, in order not to + %% confuse clients. Otherwise, do it only if the new nick was + %% unused. + SendNewAvailable = SendOldUnavailable orelse + NewNickUsers == [], + Nicks = + case OldNickUsers of + [LJID] -> + ?DICT:store(Nick, [LJID|NewNickUsers], + ?DICT:erase(OldNick, StateData#state.nicks)); + [_|_] -> + ?DICT:store(Nick, [LJID|NewNickUsers], + ?DICT:store(OldNick, OldNickUsers -- [LJID], + StateData#state.nicks)) + end, + NewStateData = StateData#state{users = Users, nicks = Nicks}, + send_nick_changing(JID, OldNick, NewStateData, SendOldUnavailable, SendNewAvailable), + add_to_log(nickchange, {OldNick, Nick}, StateData), + NewStateData. + +send_nick_changing(JID, OldNick, StateData, + SendOldUnavailable, SendNewAvailable) -> + {ok, #user{jid = RealJID, + nick = Nick, + role = Role, + last_presence = Presence}} = + ?DICT:find(jlib:jid_tolower(JID), StateData#state.users), + Affiliation = get_affiliation(JID, StateData), + SAffiliation = affiliation_to_list(Affiliation), + SRole = role_to_list(Role), + lists:foreach( + fun({_LJID, Info}) -> + ItemAttrs1 = + case (Info#user.role == moderator) orelse + ((StateData#state.config)#config.anonymous == false) of + true -> + [{"jid", jlib:jid_to_string(RealJID)}, + {"affiliation", SAffiliation}, + {"role", SRole}, + {"nick", Nick}]; + _ -> + [{"affiliation", SAffiliation}, + {"role", SRole}, + {"nick", Nick}] + end, + ItemAttrs2 = + case (Info#user.role == moderator) orelse + ((StateData#state.config)#config.anonymous == false) of + true -> + [{"jid", jlib:jid_to_string(RealJID)}, + {"affiliation", SAffiliation}, + {"role", SRole}]; + _ -> + [{"affiliation", SAffiliation}, + {"role", SRole}] + end, + Packet1 = + {xmlelement, "presence", [{"type", "unavailable"}], + [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], + [{xmlelement, "item", ItemAttrs1, []}, + {xmlelement, "status", [{"code", "303"}], []}]}]}, + Packet2 = xml:append_subtags( + Presence, + [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], + [{xmlelement, "item", ItemAttrs2, []}]}]), + if SendOldUnavailable -> + route_stanza( + jlib:jid_replace_resource(StateData#state.jid, OldNick), + Info#user.jid, + Packet1); + true -> + ok + end, + if SendNewAvailable -> + route_stanza( + jlib:jid_replace_resource(StateData#state.jid, Nick), + Info#user.jid, + Packet2); + true -> + ok + end + end, ?DICT:to_list(StateData#state.users)). + + +lqueue_new(Max) -> + #lqueue{queue = queue:new(), + len = 0, + max = Max}. + +%% If the message queue limit is set to 0, do not store messages. +lqueue_in(_Item, LQ = #lqueue{max = 0}) -> + LQ; +%% Otherwise, rotate messages in the queue store. +lqueue_in(Item, #lqueue{queue = Q1, len = Len, max = Max}) -> + Q2 = queue:in(Item, Q1), + if + Len >= Max -> + Q3 = lqueue_cut(Q2, Len - Max + 1), + #lqueue{queue = Q3, len = Max, max = Max}; + true -> + #lqueue{queue = Q2, len = Len + 1, max = Max} + end. + +lqueue_cut(Q, 0) -> + Q; +lqueue_cut(Q, N) -> + {_, Q1} = queue:out(Q), + lqueue_cut(Q1, N - 1). + +lqueue_to_list(#lqueue{queue = Q1}) -> + queue:to_list(Q1). + +lqueue_filter(F, #lqueue{queue = Q1} = LQ) -> + Q2 = queue:filter(F, Q1), + LQ#lqueue{queue = Q2, len = queue:len(Q2)}. + +add_message_to_history(FromNick, FromJID, Packet, StateData) -> + HaveSubject = case xml:get_subtag(Packet, "subject") of + false -> + false; + _ -> + true + end, + TimeStamp = calendar:now_to_universal_time(now()), + %% Chatroom history is stored as XMPP packets, so + %% the decision to include the original sender's JID or not is based on the + %% chatroom configuration when the message was originally sent. + %% Also, if the chatroom is anonymous, even moderators will not get the real JID + SenderJid = case ((StateData#state.config)#config.anonymous) of + true -> StateData#state.jid; + false -> FromJID + end, + TSPacket = xml:append_subtags(Packet, + [jlib:timestamp_to_xml(TimeStamp, utc, SenderJid, ""), + %% TODO: Delete the next line once XEP-0091 is Obsolete + jlib:timestamp_to_xml(TimeStamp)]), + SPacket = jlib:replace_from_to( + jlib:jid_replace_resource(StateData#state.jid, FromNick), + StateData#state.jid, + TSPacket), + Size = element_size(SPacket), + Q1 = lqueue_in({FromNick, TSPacket, HaveSubject, TimeStamp, Size}, + StateData#state.history), + add_to_log(text, {FromNick, Packet}, StateData), + StateData#state{history = Q1}. + +send_history(JID, Shift, StateData) -> + lists:foldl( + fun({Nick, Packet, HaveSubject, _TimeStamp, _Size}, B) -> + route_stanza( + jlib:jid_replace_resource(StateData#state.jid, Nick), + JID, + Packet), + B or HaveSubject + end, false, lists:nthtail(Shift, lqueue_to_list(StateData#state.history))). + + +send_subject(JID, Lang, StateData) -> + case StateData#state.subject_author of + "" -> + ok; + Nick -> + Subject = StateData#state.subject, + Packet = {xmlelement, "message", [{"type", "groupchat"}], + [{xmlelement, "subject", [], [{xmlcdata, Subject}]}, + {xmlelement, "body", [], + [{xmlcdata, + Nick ++ + translate:translate(Lang, + " has set the subject to: ") ++ + Subject}]}]}, + route_stanza( + StateData#state.jid, + JID, + Packet) + end. + +check_subject(Packet) -> + case xml:get_subtag(Packet, "subject") of + false -> + false; + SubjEl -> + xml:get_tag_cdata(SubjEl) + end. + +can_change_subject(Role, StateData) -> + case (StateData#state.config)#config.allow_change_subj of + true -> + (Role == moderator) orelse (Role == participant); + _ -> + Role == moderator + end. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Admin stuff + +process_iq_admin(From, set, Lang, SubEl, StateData) -> + {xmlelement, _, _, Items} = SubEl, + process_admin_items_set(From, Items, Lang, StateData); + +process_iq_admin(From, get, Lang, SubEl, StateData) -> + case xml:get_subtag(SubEl, "item") of + false -> + {error, ?ERR_BAD_REQUEST}; + Item -> + FAffiliation = get_affiliation(From, StateData), + FRole = get_role(From, StateData), + case xml:get_tag_attr("role", Item) of + false -> + case xml:get_tag_attr("affiliation", Item) of + false -> + {error, ?ERR_BAD_REQUEST}; + {value, StrAffiliation} -> + case catch list_to_affiliation(StrAffiliation) of + {'EXIT', _} -> + {error, ?ERR_BAD_REQUEST}; + SAffiliation -> + if + (FAffiliation == owner) or + (FAffiliation == admin) -> + Items = items_with_affiliation( + SAffiliation, StateData), + {result, Items, StateData}; + true -> + ErrText = "Administrator privileges required", + {error, ?ERRT_FORBIDDEN(Lang, ErrText)} + end + end + end; + {value, StrRole} -> + case catch list_to_role(StrRole) of + {'EXIT', _} -> + {error, ?ERR_BAD_REQUEST}; + SRole -> + if + FRole == moderator -> + Items = items_with_role(SRole, StateData), + {result, Items, StateData}; + true -> + ErrText = "Moderator privileges required", + {error, ?ERRT_FORBIDDEN(Lang, ErrText)} + end + end + end + end. + + +items_with_role(SRole, StateData) -> + lists:map( + fun({_, U}) -> + user_to_item(U, StateData) + end, search_role(SRole, StateData)). + +items_with_affiliation(SAffiliation, StateData) -> + lists:map( + fun({JID, {Affiliation, Reason}}) -> + {xmlelement, "item", + [{"affiliation", affiliation_to_list(Affiliation)}, + {"jid", jlib:jid_to_string(JID)}], + [{xmlelement, "reason", [], [{xmlcdata, Reason}]}]}; + ({JID, Affiliation}) -> + {xmlelement, "item", + [{"affiliation", affiliation_to_list(Affiliation)}, + {"jid", jlib:jid_to_string(JID)}], + []} + end, search_affiliation(SAffiliation, StateData)). + +user_to_item(#user{role = Role, + nick = Nick, + jid = JID + }, StateData) -> + Affiliation = get_affiliation(JID, StateData), + {xmlelement, "item", + [{"role", role_to_list(Role)}, + {"affiliation", affiliation_to_list(Affiliation)}, + {"nick", Nick}, + {"jid", jlib:jid_to_string(JID)}], + []}. + +search_role(Role, StateData) -> + lists:filter( + fun({_, #user{role = R}}) -> + Role == R + end, ?DICT:to_list(StateData#state.users)). + +search_affiliation(Affiliation, StateData) -> + lists:filter( + fun({_, A}) -> + case A of + {A1, _Reason} -> + Affiliation == A1; + _ -> + Affiliation == A + end + end, ?DICT:to_list(StateData#state.affiliations)). + + +process_admin_items_set(UJID, Items, Lang, StateData) -> + UAffiliation = get_affiliation(UJID, StateData), + URole = get_role(UJID, StateData), + case find_changed_items(UJID, UAffiliation, URole, Items, Lang, StateData, []) of + {result, Res} -> + ?INFO_MSG("Processing MUC admin query from ~s in room ~s:~n ~p", + [jlib:jid_to_string(UJID), jlib:jid_to_string(StateData#state.jid), Res]), + NSD = + lists:foldl( + fun(E, SD) -> + case catch ( + case E of + {JID, affiliation, owner, _} + when (JID#jid.luser == "") -> + %% If the provided JID does not have username, + %% forget the affiliation completely + SD; + {JID, role, none, Reason} -> + catch send_kickban_presence( + JID, Reason, "307", SD), + set_role(JID, none, SD); + {JID, affiliation, none, Reason} -> + case (SD#state.config)#config.members_only of + true -> + catch send_kickban_presence( + JID, Reason, "321", none, SD), + SD1 = set_affiliation(JID, none, SD), + set_role(JID, none, SD1); + _ -> + SD1 = set_affiliation(JID, none, SD), + send_update_presence(JID, SD1), + SD1 + end; + {JID, affiliation, outcast, Reason} -> + catch send_kickban_presence( + JID, Reason, "301", outcast, SD), + set_affiliation( + JID, outcast, + set_role(JID, none, SD), Reason); + {JID, affiliation, A, Reason} when + (A == admin) or (A == owner) -> + SD1 = set_affiliation(JID, A, SD, Reason), + SD2 = set_role(JID, moderator, SD1), + send_update_presence(JID, Reason, SD2), + SD2; + {JID, affiliation, member, Reason} -> + SD1 = set_affiliation( + JID, member, SD, Reason), + SD2 = set_role(JID, participant, SD1), + send_update_presence(JID, Reason, SD2), + SD2; + {JID, role, Role, Reason} -> + SD1 = set_role(JID, Role, SD), + catch send_new_presence(JID, Reason, SD1), + SD1; + {JID, affiliation, A, _Reason} -> + SD1 = set_affiliation(JID, A, SD), + send_update_presence(JID, SD1), + SD1 + end + ) of + {'EXIT', ErrReason} -> + ?ERROR_MSG("MUC ITEMS SET ERR: ~p~n", + [ErrReason]), + SD; + NSD -> + NSD + end + end, StateData, lists:flatten(Res)), + case (NSD#state.config)#config.persistent of + true -> + (NSD#state.mod):store_room(NSD#state.server_host, + NSD#state.host, NSD#state.room, + make_opts(NSD)); + _ -> + ok + end, + {result, [], NSD}; + Err -> + Err + end. + + +find_changed_items(_UJID, _UAffiliation, _URole, [], _Lang, _StateData, Res) -> + {result, Res}; +find_changed_items(UJID, UAffiliation, URole, [{xmlcdata, _} | Items], + Lang, StateData, Res) -> + find_changed_items(UJID, UAffiliation, URole, Items, Lang, StateData, Res); +find_changed_items(UJID, UAffiliation, URole, + [{xmlelement, "item", Attrs, _Els} = Item | Items], + Lang, StateData, Res) -> + TJID = case xml:get_attr("jid", Attrs) of + {value, S} -> + case jlib:string_to_jid(S) of + error -> + ErrText = io_lib:format( + translate:translate( + Lang, + "Jabber ID ~s is invalid"), [S]), + {error, ?ERRT_NOT_ACCEPTABLE(Lang, ErrText)}; + J -> + {value, [J]} + end; + _ -> + case xml:get_attr("nick", Attrs) of + {value, N} -> + case find_jids_by_nick(N, StateData) of + false -> + ErrText = + io_lib:format( + translate:translate( + Lang, + "Nickname ~s does not exist in the room"), + [N]), + {error, ?ERRT_NOT_ACCEPTABLE(Lang, ErrText)}; + J -> + {value, J} + end; + _ -> + {error, ?ERR_BAD_REQUEST} + end + end, + case TJID of + {value, [JID|_]=JIDs} -> + TAffiliation = get_affiliation(JID, StateData), + TRole = get_role(JID, StateData), + case xml:get_attr("role", Attrs) of + false -> + case xml:get_attr("affiliation", Attrs) of + false -> + {error, ?ERR_BAD_REQUEST}; + {value, StrAffiliation} -> + case catch list_to_affiliation(StrAffiliation) of + {'EXIT', _} -> + ErrText1 = + io_lib:format( + translate:translate( + Lang, + "Invalid affiliation: ~s"), + [StrAffiliation]), + {error, ?ERRT_NOT_ACCEPTABLE(Lang, ErrText1)}; + SAffiliation -> + ServiceAf = get_service_affiliation(JID, StateData), + CanChangeRA = + case can_change_ra( + UAffiliation, URole, + TAffiliation, TRole, + affiliation, SAffiliation, + ServiceAf) of + nothing -> + nothing; + true -> + true; + check_owner -> + case search_affiliation( + owner, StateData) of + [{OJID, _}] -> + jlib:jid_remove_resource(OJID) /= + jlib:jid_tolower(jlib:jid_remove_resource(UJID)); + _ -> + true + end; + _ -> + false + end, + case CanChangeRA of + nothing -> + find_changed_items( + UJID, + UAffiliation, URole, + Items, Lang, StateData, + Res); + true -> + Reason = xml:get_path_s(Item, [{elem, "reason"}, cdata]), + MoreRes = [{jlib:jid_remove_resource(Jidx), affiliation, SAffiliation, Reason} || Jidx <- JIDs], + find_changed_items( + UJID, + UAffiliation, URole, + Items, Lang, StateData, + [MoreRes | Res]); + false -> + {error, ?ERR_NOT_ALLOWED} + end + end + end; + {value, StrRole} -> + case catch list_to_role(StrRole) of + {'EXIT', _} -> + ErrText1 = + io_lib:format( + translate:translate( + Lang, + "Invalid role: ~s"), + [StrRole]), + {error, ?ERRT_BAD_REQUEST(Lang, ErrText1)}; + SRole -> + ServiceAf = get_service_affiliation(JID, StateData), + CanChangeRA = + case can_change_ra( + UAffiliation, URole, + TAffiliation, TRole, + role, SRole, + ServiceAf) of + nothing -> + nothing; + true -> + true; + check_owner -> + case search_affiliation( + owner, StateData) of + [{OJID, _}] -> + jlib:jid_remove_resource(OJID) /= + jlib:jid_tolower(jlib:jid_remove_resource(UJID)); + _ -> + true + end; + _ -> + false + end, + case CanChangeRA of + nothing -> + find_changed_items( + UJID, + UAffiliation, URole, + Items, Lang, StateData, + Res); + true -> + Reason = xml:get_path_s(Item, [{elem, "reason"}, cdata]), + MoreRes = [{Jidx, role, SRole, Reason} || Jidx <- JIDs], + find_changed_items( + UJID, + UAffiliation, URole, + Items, Lang, StateData, + [MoreRes | Res]); + _ -> + {error, ?ERR_NOT_ALLOWED} + end + end + end; + Err -> + Err + end; +find_changed_items(_UJID, _UAffiliation, _URole, _Items, + _Lang, _StateData, _Res) -> + {error, ?ERR_BAD_REQUEST}. + + +can_change_ra(_FAffiliation, _FRole, + owner, _TRole, + affiliation, owner, owner) -> + %% A room owner tries to add as persistent owner a + %% participant that is already owner because he is MUC admin + true; +can_change_ra(_FAffiliation, _FRole, + _TAffiliation, _TRole, + _RoleorAffiliation, _Value, owner) -> + %% Nobody can decrease MUC admin's role/affiliation + false; +can_change_ra(_FAffiliation, _FRole, + TAffiliation, _TRole, + affiliation, Value, _ServiceAf) + when (TAffiliation == Value) -> + nothing; +can_change_ra(_FAffiliation, _FRole, + _TAffiliation, TRole, + role, Value, _ServiceAf) + when (TRole == Value) -> + nothing; +can_change_ra(FAffiliation, _FRole, + outcast, _TRole, + affiliation, none, _ServiceAf) + when (FAffiliation == owner) or (FAffiliation == admin) -> + true; +can_change_ra(FAffiliation, _FRole, + outcast, _TRole, + affiliation, member, _ServiceAf) + when (FAffiliation == owner) or (FAffiliation == admin) -> + true; +can_change_ra(owner, _FRole, + outcast, _TRole, + affiliation, admin, _ServiceAf) -> + true; +can_change_ra(owner, _FRole, + outcast, _TRole, + affiliation, owner, _ServiceAf) -> + true; +can_change_ra(FAffiliation, _FRole, + none, _TRole, + affiliation, outcast, _ServiceAf) + when (FAffiliation == owner) or (FAffiliation == admin) -> + true; +can_change_ra(FAffiliation, _FRole, + none, _TRole, + affiliation, member, _ServiceAf) + when (FAffiliation == owner) or (FAffiliation == admin) -> + true; +can_change_ra(owner, _FRole, + none, _TRole, + affiliation, admin, _ServiceAf) -> + true; +can_change_ra(owner, _FRole, + none, _TRole, + affiliation, owner, _ServiceAf) -> + true; +can_change_ra(FAffiliation, _FRole, + member, _TRole, + affiliation, outcast, _ServiceAf) + when (FAffiliation == owner) or (FAffiliation == admin) -> + true; +can_change_ra(FAffiliation, _FRole, + member, _TRole, + affiliation, none, _ServiceAf) + when (FAffiliation == owner) or (FAffiliation == admin) -> + true; +can_change_ra(owner, _FRole, + member, _TRole, + affiliation, admin, _ServiceAf) -> + true; +can_change_ra(owner, _FRole, + member, _TRole, + affiliation, owner, _ServiceAf) -> + true; +can_change_ra(owner, _FRole, + admin, _TRole, + affiliation, _Affiliation, _ServiceAf) -> + true; +can_change_ra(owner, _FRole, + owner, _TRole, + affiliation, _Affiliation, _ServiceAf) -> + check_owner; +can_change_ra(_FAffiliation, _FRole, + _TAffiliation, _TRole, + affiliation, _Value, _ServiceAf) -> + false; +can_change_ra(_FAffiliation, moderator, + _TAffiliation, visitor, + role, none, _ServiceAf) -> + true; +can_change_ra(_FAffiliation, moderator, + _TAffiliation, visitor, + role, participant, _ServiceAf) -> + true; +can_change_ra(FAffiliation, _FRole, + _TAffiliation, visitor, + role, moderator, _ServiceAf) + when (FAffiliation == owner) or (FAffiliation == admin) -> + true; +can_change_ra(_FAffiliation, moderator, + _TAffiliation, participant, + role, none, _ServiceAf) -> + true; +can_change_ra(_FAffiliation, moderator, + _TAffiliation, participant, + role, visitor, _ServiceAf) -> + true; +can_change_ra(FAffiliation, _FRole, + _TAffiliation, participant, + role, moderator, _ServiceAf) + when (FAffiliation == owner) or (FAffiliation == admin) -> + true; +can_change_ra(_FAffiliation, _FRole, + owner, moderator, + role, visitor, _ServiceAf) -> + false; +can_change_ra(owner, _FRole, + _TAffiliation, moderator, + role, visitor, _ServiceAf) -> + true; +can_change_ra(_FAffiliation, _FRole, + admin, moderator, + role, visitor, _ServiceAf) -> + false; +can_change_ra(admin, _FRole, + _TAffiliation, moderator, + role, visitor, _ServiceAf) -> + true; +can_change_ra(_FAffiliation, _FRole, + owner, moderator, + role, participant, _ServiceAf) -> + false; +can_change_ra(owner, _FRole, + _TAffiliation, moderator, + role, participant, _ServiceAf) -> + true; +can_change_ra(_FAffiliation, _FRole, + admin, moderator, + role, participant, _ServiceAf) -> + false; +can_change_ra(admin, _FRole, + _TAffiliation, moderator, + role, participant, _ServiceAf) -> + true; +can_change_ra(_FAffiliation, _FRole, + _TAffiliation, _TRole, + role, _Value, _ServiceAf) -> + false. + + +send_kickban_presence(JID, Reason, Code, StateData) -> + NewAffiliation = get_affiliation(JID, StateData), + send_kickban_presence(JID, Reason, Code, NewAffiliation, StateData). + +send_kickban_presence(JID, Reason, Code, NewAffiliation, StateData) -> + LJID = jlib:jid_tolower(JID), + LJIDs = case LJID of + {U, S, ""} -> + ?DICT:fold( + fun(J, _, Js) -> + case J of + {U, S, _} -> + [J | Js]; + _ -> + Js + end + end, [], StateData#state.users); + _ -> + case ?DICT:is_key(LJID, StateData#state.users) of + true -> + [LJID]; + _ -> + [] + end + end, + lists:foreach(fun(J) -> + {ok, #user{nick = Nick}} = + ?DICT:find(J, StateData#state.users), + add_to_log(kickban, {Nick, Reason, Code}, StateData), + tab_remove_online_user(J, StateData), + send_kickban_presence1(J, Reason, Code, NewAffiliation, StateData) + end, LJIDs). + +send_kickban_presence1(UJID, Reason, Code, Affiliation, StateData) -> + {ok, #user{jid = RealJID, + nick = Nick}} = + ?DICT:find(jlib:jid_tolower(UJID), StateData#state.users), + SAffiliation = affiliation_to_list(Affiliation), + BannedJIDString = jlib:jid_to_string(RealJID), + lists:foreach( + fun({_LJID, Info}) -> + JidAttrList = case (Info#user.role == moderator) orelse + ((StateData#state.config)#config.anonymous + == false) of + true -> [{"jid", BannedJIDString}]; + false -> [] + end, + ItemAttrs = [{"affiliation", SAffiliation}, + {"role", "none"}] ++ JidAttrList, + ItemEls = case Reason of + "" -> + []; + _ -> + [{xmlelement, "reason", [], + [{xmlcdata, Reason}]}] + end, + Packet = {xmlelement, "presence", [{"type", "unavailable"}], + [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], + [{xmlelement, "item", ItemAttrs, ItemEls}, + {xmlelement, "status", [{"code", Code}], []}]}]}, + route_stanza( + jlib:jid_replace_resource(StateData#state.jid, Nick), + Info#user.jid, + Packet) + end, ?DICT:to_list(StateData#state.users)). + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Owner stuff + +process_iq_owner(From, set, Lang, SubEl, StateData) -> + FAffiliation = get_affiliation(From, StateData), + case FAffiliation of + owner -> + {xmlelement, _Name, _Attrs, Els} = SubEl, + 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, [], StateData}; + {?NS_XDATA, "submit"} -> + case is_allowed_log_change(XEl, StateData, From) + andalso + is_allowed_persistent_change(XEl, StateData, + From) + andalso + is_allowed_room_name_desc_limits(XEl, + StateData) + andalso + is_password_settings_correct(XEl, StateData) of + true -> set_config(XEl, StateData); + false -> {error, ?ERR_NOT_ACCEPTABLE} + end; + _ -> + {error, ?ERR_BAD_REQUEST} + end; + [{xmlelement, "destroy", _Attrs1, _Els1} = SubEl1] -> + ?INFO_MSG("Destroyed MUC room ~s by the owner ~s", + [jlib:jid_to_string(StateData#state.jid), jlib:jid_to_string(From)]), + add_to_log(room_existence, destroyed, StateData), + destroy_room(SubEl1, StateData); + Items -> + process_admin_items_set(From, Items, Lang, StateData) + end; + _ -> + ErrText = "Owner privileges required", + {error, ?ERRT_FORBIDDEN(Lang, ErrText)} + end; + +process_iq_owner(From, get, Lang, SubEl, StateData) -> + FAffiliation = get_affiliation(From, StateData), + case FAffiliation of + owner -> + {xmlelement, _Name, _Attrs, Els} = SubEl, + case xml:remove_cdata(Els) of + [] -> + get_config(Lang, StateData, From); + [Item] -> + case xml:get_tag_attr("affiliation", Item) of + false -> + {error, ?ERR_BAD_REQUEST}; + {value, StrAffiliation} -> + case catch list_to_affiliation(StrAffiliation) of + {'EXIT', _} -> + ErrText = + io_lib:format( + translate:translate( + Lang, + "Invalid affiliation: ~s"), + [StrAffiliation]), + {error, ?ERRT_NOT_ACCEPTABLE(Lang, ErrText)}; + SAffiliation -> + Items = items_with_affiliation( + SAffiliation, StateData), + {result, Items, StateData} + end + end; + _ -> + {error, ?ERR_FEATURE_NOT_IMPLEMENTED} + end; + _ -> + ErrText = "Owner privileges required", + {error, ?ERRT_FORBIDDEN(Lang, ErrText)} + end. + +is_allowed_log_change(XEl, StateData, From) -> + case lists:keymember("muc#roomconfig_enablelogging", 1, + jlib:parse_xdata_submit(XEl)) of + false -> + true; + true -> + (allow == mod_muc_log:check_access_log( + StateData#state.server_host, From)) + end. + +is_allowed_persistent_change(XEl, StateData, From) -> + case lists:keymember("muc#roomconfig_persistentroom", 1, + jlib:parse_xdata_submit(XEl)) of + false -> + true; + true -> + {_AccessRoute, _AccessCreate, _AccessAdmin, AccessPersistent} = StateData#state.access, + (allow == acl:match_rule(StateData#state.server_host, AccessPersistent, From)) + end. + +%% Check if the Room Name and Room Description defined in the Data Form +%% are conformant to the configured limits +is_allowed_room_name_desc_limits(XEl, StateData) -> + IsNameAccepted = + case lists:keysearch("muc#roomconfig_roomname", 1, + jlib:parse_xdata_submit(XEl)) of + {value, {_, [N]}} -> + length(N) =< gen_mod:get_module_opt(StateData#state.server_host, + StateData#state.mod, + max_room_name, infinite); + _ -> + true + end, + IsDescAccepted = + case lists:keysearch("muc#roomconfig_roomdesc", 1, + jlib:parse_xdata_submit(XEl)) of + {value, {_, [D]}} -> + length(D) =< gen_mod:get_module_opt(StateData#state.server_host, + StateData#state.mod, + max_room_desc, infinite); + _ -> + true + end, + IsNameAccepted and IsDescAccepted. + +%% Return false if: +%% "the password for a password-protected room is blank" +is_password_settings_correct(XEl, StateData) -> + Config = StateData#state.config, + OldProtected = Config#config.password_protected, + OldPassword = Config#config.password, + NewProtected = + case lists:keysearch("muc#roomconfig_passwordprotectedroom", 1, + jlib:parse_xdata_submit(XEl)) of + {value, {_, ["1"]}} -> + true; + {value, {_, ["0"]}} -> + false; + _ -> + undefined + end, + NewPassword = + case lists:keysearch("muc#roomconfig_roomsecret", 1, + jlib:parse_xdata_submit(XEl)) of + {value, {_, [P]}} -> + P; + _ -> + undefined + end, + case {OldProtected, NewProtected, OldPassword, NewPassword} of + {true, undefined, "", undefined} -> + false; + {true, undefined, _, ""} -> + false; + {_, true , "", undefined} -> + false; + {_, true, _, ""} -> + false; + _ -> + true + end. + + +-define(XFIELD(Type, Label, Var, Val), + {xmlelement, "field", [{"type", Type}, + {"label", translate:translate(Lang, Label)}, + {"var", Var}], + [{xmlelement, "value", [], [{xmlcdata, Val}]}]}). + +-define(BOOLXFIELD(Label, Var, Val), + ?XFIELD("boolean", Label, Var, + case Val of + true -> "1"; + _ -> "0" + end)). + +-define(STRINGXFIELD(Label, Var, Val), + ?XFIELD("text-single", Label, Var, Val)). + +-define(PRIVATEXFIELD(Label, Var, Val), + ?XFIELD("text-private", Label, Var, Val)). + +-define(JIDMULTIXFIELD(Label, Var, JIDList), + {xmlelement, "field", [{"type", "jid-multi"}, + {"label", translate:translate(Lang, Label)}, + {"var", Var}], + [{xmlelement, "value", [], [{xmlcdata, jlib:jid_to_string(JID)}]} + || JID <- JIDList]}). + +get_default_room_maxusers(RoomState) -> + DefRoomOpts = gen_mod:get_module_opt( + RoomState#state.server_host, + RoomState#state.mod, default_room_options, []), + RoomState2 = set_opts(DefRoomOpts, RoomState), + (RoomState2#state.config)#config.max_users. + +get_config(Lang, StateData, From) -> + {_AccessRoute, _AccessCreate, _AccessAdmin, AccessPersistent} = StateData#state.access, + ServiceMaxUsers = get_service_max_users(StateData), + DefaultRoomMaxUsers = get_default_room_maxusers(StateData), + Config = StateData#state.config, + {MaxUsersRoomInteger, MaxUsersRoomString} = + case get_max_users(StateData) of + N when is_integer(N) -> + {N, erlang:integer_to_list(N)}; + _ -> {0, "none"} + end, + Res = + [{xmlelement, "title", [], + [{xmlcdata, io_lib:format(translate:translate(Lang, "Configuration of room ~s"), [jlib:jid_to_string(StateData#state.jid)])}]}, + {xmlelement, "field", [{"type", "hidden"}, + {"var", "FORM_TYPE"}], + [{xmlelement, "value", [], + [{xmlcdata, "http://jabber.org/protocol/muc#roomconfig"}]}]}, + ?STRINGXFIELD("Room title", + "muc#roomconfig_roomname", + Config#config.title), + ?STRINGXFIELD("Room description", + "muc#roomconfig_roomdesc", + Config#config.description) + ] ++ + case acl:match_rule(StateData#state.server_host, AccessPersistent, From) of + allow -> + [?BOOLXFIELD( + "Make room persistent", + "muc#roomconfig_persistentroom", + Config#config.persistent)]; + _ -> [] + end ++ [ + ?BOOLXFIELD("Make room public searchable", + "muc#roomconfig_publicroom", + Config#config.public), + ?BOOLXFIELD("Make participants list public", + "public_list", + Config#config.public_list), + ?BOOLXFIELD("Make room password protected", + "muc#roomconfig_passwordprotectedroom", + Config#config.password_protected), + ?PRIVATEXFIELD("Password", + "muc#roomconfig_roomsecret", + case Config#config.password_protected of + true -> Config#config.password; + false -> "" + end), + {xmlelement, "field", + [{"type", "list-single"}, + {"label", translate:translate(Lang, "Maximum Number of Occupants")}, + {"var", "muc#roomconfig_maxusers"}], + [{xmlelement, "value", [], [{xmlcdata, MaxUsersRoomString}]}] ++ + if + is_integer(ServiceMaxUsers) -> []; + true -> + [{xmlelement, "option", + [{"label", translate:translate(Lang, "No limit")}], + [{xmlelement, "value", [], [{xmlcdata, "none"}]}]}] + end ++ + [{xmlelement, "option", [{"label", erlang:integer_to_list(N)}], + [{xmlelement, "value", [], + [{xmlcdata, erlang:integer_to_list(N)}]}]} || + N <- lists:usort([ServiceMaxUsers, DefaultRoomMaxUsers, MaxUsersRoomInteger | + ?MAX_USERS_DEFAULT_LIST]), N =< ServiceMaxUsers] + }, + {xmlelement, "field", + [{"type", "list-single"}, + {"label", translate:translate(Lang, "Present real Jabber IDs to")}, + {"var", "muc#roomconfig_whois"}], + [{xmlelement, "value", [], [{xmlcdata, + if Config#config.anonymous -> + "moderators"; + true -> + "anyone" + end}]}, + {xmlelement, "option", [{"label", translate:translate(Lang, "moderators only")}], + [{xmlelement, "value", [], [{xmlcdata, "moderators"}]}]}, + {xmlelement, "option", [{"label", translate:translate(Lang, "anyone")}], + [{xmlelement, "value", [], [{xmlcdata, "anyone"}]}]}]}, + ?BOOLXFIELD("Make room members-only", + "muc#roomconfig_membersonly", + Config#config.members_only), + ?BOOLXFIELD("Make room moderated", + "muc#roomconfig_moderatedroom", + Config#config.moderated), + ?BOOLXFIELD("Default users as participants", + "members_by_default", + Config#config.members_by_default), + ?BOOLXFIELD("Allow users to change the subject", + "muc#roomconfig_changesubject", + Config#config.allow_change_subj), + ?BOOLXFIELD("Allow users to send private messages", + "allow_private_messages", + Config#config.allow_private_messages), + {xmlelement, "field", + [{"type", "list-single"}, + {"label", translate:translate(Lang, "Allow visitors to send private messages to")}, + {"var", "allow_private_messages_from_visitors"}], + [{xmlelement, "value", [], [{xmlcdata, + case Config#config.allow_private_messages_from_visitors of + anyone -> + "anyone"; + moderators -> + "moderators"; + nobody -> + "nobody" + end}]}, + {xmlelement, "option", [{"label", translate:translate(Lang, "nobody")}], + [{xmlelement, "value", [], [{xmlcdata, "nobody"}]}]}, + {xmlelement, "option", [{"label", translate:translate(Lang, "moderators only")}], + [{xmlelement, "value", [], [{xmlcdata, "moderators"}]}]}, + {xmlelement, "option", [{"label", translate:translate(Lang, "anyone")}], + [{xmlelement, "value", [], [{xmlcdata, "anyone"}]}]}]}, + ?BOOLXFIELD("Allow users to query other users", + "allow_query_users", + Config#config.allow_query_users), + ?BOOLXFIELD("Allow users to send invites", + "muc#roomconfig_allowinvites", + Config#config.allow_user_invites), + ?BOOLXFIELD("Allow visitors to send status text in presence updates", + "muc#roomconfig_allowvisitorstatus", + Config#config.allow_visitor_status), + ?BOOLXFIELD("Allow visitors to change nickname", + "muc#roomconfig_allowvisitornickchange", + Config#config.allow_visitor_nickchange), + ?BOOLXFIELD("Allow visitors to send voice requests", + "muc#roomconfig_allowvoicerequests", + Config#config.allow_voice_requests), + ?STRINGXFIELD("Minimum interval between voice requests (in seconds)", + "muc#roomconfig_voicerequestmininterval", + erlang:integer_to_list(Config#config.voice_request_min_interval)) + ] ++ + case ejabberd_captcha:is_feature_available() of + true -> + [?BOOLXFIELD("Make room CAPTCHA protected", + "captcha_protected", + Config#config.captcha_protected)]; + false -> [] + end ++ + [?JIDMULTIXFIELD("Exclude Jabber IDs from CAPTCHA challenge", + "muc#roomconfig_captcha_whitelist", + ?SETS:to_list(Config#config.captcha_whitelist))] ++ + case mod_muc_log:check_access_log( + StateData#state.server_host, From) of + allow -> + [?BOOLXFIELD( + "Enable logging", + "muc#roomconfig_enablelogging", + Config#config.logging)]; + _ -> [] + end, + {result, [{xmlelement, "instructions", [], + [{xmlcdata, + translate:translate( + Lang, "You need an x:data capable client to configure room")}]}, + {xmlelement, "x", [{"xmlns", ?NS_XDATA}, + {"type", "form"}], + Res}], + StateData}. + + + +set_config(XEl, StateData) -> + XData = jlib:parse_xdata_submit(XEl), + case XData of + invalid -> + {error, ?ERR_BAD_REQUEST}; + _ -> + case set_xoption(XData, StateData#state.config) of + #config{} = Config -> + Res = change_config(Config, StateData), + {result, _, NSD} = Res, + Type = case {(StateData#state.config)#config.logging, + Config#config.logging} of + {true, false} -> + roomconfig_change_disabledlogging; + {false, true} -> + roomconfig_change_enabledlogging; + {_, _} -> + roomconfig_change + end, + Users = [{U#user.jid, U#user.nick, U#user.role} || + {_, U} <- ?DICT:to_list(StateData#state.users)], + add_to_log(Type, Users, NSD), + Res; + Err -> + Err + end + end. + +-define(SET_BOOL_XOPT(Opt, Val), + case Val of + "0" -> set_xoption(Opts, Config#config{Opt = false}); + "false" -> set_xoption(Opts, Config#config{Opt = false}); + "1" -> set_xoption(Opts, Config#config{Opt = true}); + "true" -> set_xoption(Opts, Config#config{Opt = true}); + _ -> {error, ?ERR_BAD_REQUEST} + end). + +-define(SET_NAT_XOPT(Opt, Val), + case catch list_to_integer(Val) of + I when is_integer(I), + I > 0 -> + set_xoption(Opts, Config#config{Opt = I}); + _ -> + {error, ?ERR_BAD_REQUEST} + end). + +-define(SET_STRING_XOPT(Opt, Val), + set_xoption(Opts, Config#config{Opt = Val})). + +-define(SET_JIDMULTI_XOPT(Opt, Vals), + begin + Set = lists:foldl( + fun({U, S, R}, Set1) -> + ?SETS:add_element({U, S, R}, Set1); + (#jid{luser = U, lserver = S, lresource = R}, Set1) -> + ?SETS:add_element({U, S, R}, Set1); + (_, Set1) -> + Set1 + end, ?SETS:empty(), Vals), + set_xoption(Opts, Config#config{Opt = Set}) + end). + +set_xoption([], Config) -> + Config; +set_xoption([{"muc#roomconfig_roomname", [Val]} | Opts], Config) -> + ?SET_STRING_XOPT(title, Val); +set_xoption([{"muc#roomconfig_roomdesc", [Val]} | Opts], Config) -> + ?SET_STRING_XOPT(description, Val); +set_xoption([{"muc#roomconfig_changesubject", [Val]} | Opts], Config) -> + ?SET_BOOL_XOPT(allow_change_subj, Val); +set_xoption([{"allow_query_users", [Val]} | Opts], Config) -> + ?SET_BOOL_XOPT(allow_query_users, Val); +set_xoption([{"allow_private_messages", [Val]} | Opts], Config) -> + ?SET_BOOL_XOPT(allow_private_messages, Val); +set_xoption([{"allow_private_messages_from_visitors", [Val]} | Opts], Config) -> + case Val of + "anyone" -> + ?SET_STRING_XOPT(allow_private_messages_from_visitors, anyone); + "moderators" -> + ?SET_STRING_XOPT(allow_private_messages_from_visitors, moderators); + "nobody" -> + ?SET_STRING_XOPT(allow_private_messages_from_visitors, nobody); + _ -> + {error, ?ERR_BAD_REQUEST} + end; +set_xoption([{"muc#roomconfig_allowvisitorstatus", [Val]} | Opts], Config) -> + ?SET_BOOL_XOPT(allow_visitor_status, Val); +set_xoption([{"muc#roomconfig_allowvisitornickchange", [Val]} | Opts], Config) -> + ?SET_BOOL_XOPT(allow_visitor_nickchange, Val); +set_xoption([{"muc#roomconfig_publicroom", [Val]} | Opts], Config) -> + ?SET_BOOL_XOPT(public, Val); +set_xoption([{"public_list", [Val]} | Opts], Config) -> + ?SET_BOOL_XOPT(public_list, Val); +set_xoption([{"muc#roomconfig_persistentroom", [Val]} | Opts], Config) -> + ?SET_BOOL_XOPT(persistent, Val); +set_xoption([{"muc#roomconfig_moderatedroom", [Val]} | Opts], Config) -> + ?SET_BOOL_XOPT(moderated, Val); +set_xoption([{"members_by_default", [Val]} | Opts], Config) -> + ?SET_BOOL_XOPT(members_by_default, Val); +set_xoption([{"muc#roomconfig_membersonly", [Val]} | Opts], Config) -> + ?SET_BOOL_XOPT(members_only, Val); +set_xoption([{"captcha_protected", [Val]} | Opts], Config) -> + ?SET_BOOL_XOPT(captcha_protected, Val); +set_xoption([{"muc#roomconfig_allowinvites", [Val]} | Opts], Config) -> + ?SET_BOOL_XOPT(allow_user_invites, Val); +set_xoption([{"muc#roomconfig_passwordprotectedroom", [Val]} | Opts], Config) -> + ?SET_BOOL_XOPT(password_protected, Val); +set_xoption([{"muc#roomconfig_roomsecret", [Val]} | Opts], Config) -> + ?SET_STRING_XOPT(password, Val); +set_xoption([{"anonymous", [Val]} | Opts], Config) -> + ?SET_BOOL_XOPT(anonymous, Val); +set_xoption([{"muc#roomconfig_allowvoicerequests", [Val]} | Opts], Config) -> + ?SET_BOOL_XOPT(allow_voice_requests, Val); +set_xoption([{"muc#roomconfig_voicerequestmininterval", [Val]} | Opts], Config) -> + ?SET_NAT_XOPT(voice_request_min_interval, Val); +set_xoption([{"muc#roomconfig_whois", [Val]} | Opts], Config) -> + case Val of + "moderators" -> + ?SET_BOOL_XOPT(anonymous, integer_to_list(1)); + "anyone" -> + ?SET_BOOL_XOPT(anonymous, integer_to_list(0)); + _ -> + {error, ?ERR_BAD_REQUEST} + end; +set_xoption([{"muc#roomconfig_maxusers", [Val]} | Opts], Config) -> + case Val of + "none" -> + ?SET_STRING_XOPT(max_users, none); + _ -> + ?SET_NAT_XOPT(max_users, Val) + end; +set_xoption([{"muc#roomconfig_enablelogging", [Val]} | Opts], Config) -> + ?SET_BOOL_XOPT(logging, Val); +set_xoption([{"muc#roomconfig_captcha_whitelist", Vals} | Opts], Config) -> + JIDs = [jlib:string_to_jid(Val) || Val <- Vals], + ?SET_JIDMULTI_XOPT(captcha_whitelist, JIDs); +set_xoption([{"FORM_TYPE", _} | Opts], Config) -> + %% Ignore our FORM_TYPE + set_xoption(Opts, Config); +set_xoption([_ | _Opts], _Config) -> + {error, ?ERR_BAD_REQUEST}. + + +change_config(Config, StateData) -> + NSD = StateData#state{config = Config}, + Mod = StateData#state.mod, + case {(StateData#state.config)#config.persistent, + Config#config.persistent} of + {_, true} -> + Mod:store_room(NSD#state.server_host, NSD#state.host, + NSD#state.room, make_opts(NSD)); + {true, false} -> + Mod:forget_room(NSD#state.server_host, NSD#state.host, NSD#state.room); + {false, false} -> + ok + end, + case {(StateData#state.config)#config.members_only, + Config#config.members_only} of + {false, true} -> + NSD1 = remove_nonmembers(NSD), + {result, [], NSD1}; + _ -> + {result, [], NSD} + end. + +remove_nonmembers(StateData) -> + lists:foldl( + fun({_LJID, #user{jid = JID}}, SD) -> + Affiliation = get_affiliation(JID, SD), + case Affiliation of + none -> + catch send_kickban_presence( + JID, "", "322", SD), + set_role(JID, none, SD); + _ -> + SD + end + end, StateData, ?DICT:to_list(StateData#state.users)). + + +-define(CASE_CONFIG_OPT(Opt), + Opt -> StateData#state{ + config = (StateData#state.config)#config{Opt = Val}}). + +set_opts([], StateData) -> + StateData; +set_opts([{Opt, Val} | Opts], StateData) -> + NSD = case Opt of + title -> StateData#state{config = (StateData#state.config)#config{title = Val}}; + description -> StateData#state{config = (StateData#state.config)#config{description = Val}}; + allow_change_subj -> StateData#state{config = (StateData#state.config)#config{allow_change_subj = Val}}; + allow_query_users -> StateData#state{config = (StateData#state.config)#config{allow_query_users = Val}}; + allow_private_messages -> StateData#state{config = (StateData#state.config)#config{allow_private_messages = Val}}; + allow_private_messages_from_visitors -> StateData#state{config = (StateData#state.config)#config{allow_private_messages_from_visitors = Val}}; + allow_visitor_nickchange -> StateData#state{config = (StateData#state.config)#config{allow_visitor_nickchange = Val}}; + allow_visitor_status -> StateData#state{config = (StateData#state.config)#config{allow_visitor_status = Val}}; + public -> StateData#state{config = (StateData#state.config)#config{public = Val}}; + public_list -> StateData#state{config = (StateData#state.config)#config{public_list = Val}}; + persistent -> StateData#state{config = (StateData#state.config)#config{persistent = Val}}; + moderated -> StateData#state{config = (StateData#state.config)#config{moderated = Val}}; + members_by_default -> StateData#state{config = (StateData#state.config)#config{members_by_default = Val}}; + members_only -> StateData#state{config = (StateData#state.config)#config{members_only = Val}}; + allow_user_invites -> StateData#state{config = (StateData#state.config)#config{allow_user_invites = Val}}; + password_protected -> StateData#state{config = (StateData#state.config)#config{password_protected = Val}}; + captcha_protected -> StateData#state{config = (StateData#state.config)#config{captcha_protected = Val}}; + password -> StateData#state{config = (StateData#state.config)#config{password = Val}}; + anonymous -> StateData#state{config = (StateData#state.config)#config{anonymous = Val}}; + logging -> StateData#state{config = (StateData#state.config)#config{logging = Val}}; + captcha_whitelist -> StateData#state{config = (StateData#state.config)#config{captcha_whitelist = ?SETS:from_list(Val)}}; + allow_voice_requests -> StateData#state{config = (StateData#state.config)#config{allow_voice_requests = Val}}; + voice_request_min_interval -> StateData#state{config = (StateData#state.config)#config{voice_request_min_interval = Val}}; + max_users -> + ServiceMaxUsers = get_service_max_users(StateData), + MaxUsers = if + Val =< ServiceMaxUsers -> Val; + true -> ServiceMaxUsers + end, + StateData#state{ + config = (StateData#state.config)#config{ + max_users = MaxUsers}}; + affiliations -> + StateData#state{affiliations = ?DICT:from_list(Val)}; + subject -> + StateData#state{subject = Val}; + subject_author -> + StateData#state{subject_author = Val}; + _ -> StateData + end, + set_opts(Opts, NSD). + +-define(MAKE_CONFIG_OPT(Opt), {Opt, Config#config.Opt}). + +make_opts(StateData) -> + Config = StateData#state.config, + [ + ?MAKE_CONFIG_OPT(title), + ?MAKE_CONFIG_OPT(description), + ?MAKE_CONFIG_OPT(allow_change_subj), + ?MAKE_CONFIG_OPT(allow_query_users), + ?MAKE_CONFIG_OPT(allow_private_messages), + ?MAKE_CONFIG_OPT(allow_private_messages_from_visitors), + ?MAKE_CONFIG_OPT(allow_visitor_status), + ?MAKE_CONFIG_OPT(allow_visitor_nickchange), + ?MAKE_CONFIG_OPT(public), + ?MAKE_CONFIG_OPT(public_list), + ?MAKE_CONFIG_OPT(persistent), + ?MAKE_CONFIG_OPT(moderated), + ?MAKE_CONFIG_OPT(members_by_default), + ?MAKE_CONFIG_OPT(members_only), + ?MAKE_CONFIG_OPT(allow_user_invites), + ?MAKE_CONFIG_OPT(password_protected), + ?MAKE_CONFIG_OPT(captcha_protected), + ?MAKE_CONFIG_OPT(password), + ?MAKE_CONFIG_OPT(anonymous), + ?MAKE_CONFIG_OPT(logging), + ?MAKE_CONFIG_OPT(max_users), + ?MAKE_CONFIG_OPT(allow_voice_requests), + ?MAKE_CONFIG_OPT(voice_request_min_interval), + {captcha_whitelist, + ?SETS:to_list((StateData#state.config)#config.captcha_whitelist)}, + {affiliations, ?DICT:to_list(StateData#state.affiliations)}, + {subject, StateData#state.subject}, + {subject_author, StateData#state.subject_author} + ]. + + + +destroy_room(DEl, StateData) -> + lists:foreach( + fun({_LJID, Info}) -> + Nick = Info#user.nick, + ItemAttrs = [{"affiliation", "none"}, + {"role", "none"}], + Packet = {xmlelement, "presence", [{"type", "unavailable"}], + [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], + [{xmlelement, "item", ItemAttrs, []}, DEl]}]}, + route_stanza( + jlib:jid_replace_resource(StateData#state.jid, Nick), + Info#user.jid, + Packet) + end, ?DICT:to_list(StateData#state.users)), + case (StateData#state.config)#config.persistent of + true -> + (StateData#state.mod):forget_room( + StateData#state.server_host, + StateData#state.host, StateData#state.room); + false -> + ok + end, + {result, [], stop}. + + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Disco + +-define(FEATURE(Var), {xmlelement, "feature", [{"var", Var}], []}). + +-define(CONFIG_OPT_TO_FEATURE(Opt, Fiftrue, Fiffalse), + case Opt of + true -> + ?FEATURE(Fiftrue); + false -> + ?FEATURE(Fiffalse) + end). + +process_iq_disco_info(_From, set, _Lang, _StateData) -> + {error, ?ERR_NOT_ALLOWED}; + +process_iq_disco_info(_From, get, Lang, StateData) -> + Config = StateData#state.config, + {result, [{xmlelement, "identity", + [{"category", "conference"}, + {"type", "text"}, + {"name", get_title(StateData)}], []}, + {xmlelement, "feature", + [{"var", ?NS_MUC}], []}, + ?CONFIG_OPT_TO_FEATURE(Config#config.public, + "muc_public", "muc_hidden"), + ?CONFIG_OPT_TO_FEATURE(Config#config.persistent, + "muc_persistent", "muc_temporary"), + ?CONFIG_OPT_TO_FEATURE(Config#config.members_only, + "muc_membersonly", "muc_open"), + ?CONFIG_OPT_TO_FEATURE(Config#config.anonymous, + "muc_semianonymous", "muc_nonanonymous"), + ?CONFIG_OPT_TO_FEATURE(Config#config.moderated, + "muc_moderated", "muc_unmoderated"), + ?CONFIG_OPT_TO_FEATURE(Config#config.password_protected, + "muc_passwordprotected", "muc_unsecured") + ] ++ iq_disco_info_extras(Lang, StateData), StateData}. + +-define(RFIELDT(Type, Var, Val), + {xmlelement, "field", [{"type", Type}, {"var", Var}], + [{xmlelement, "value", [], [{xmlcdata, Val}]}]}). + +-define(RFIELD(Label, Var, Val), + {xmlelement, "field", [{"label", translate:translate(Lang, Label)}, + {"var", Var}], + [{xmlelement, "value", [], [{xmlcdata, Val}]}]}). + +iq_disco_info_extras(Lang, StateData) -> + Len = ?DICT:size(StateData#state.users), + RoomDescription = (StateData#state.config)#config.description, + [{xmlelement, "x", [{"xmlns", ?NS_XDATA}, {"type", "result"}], + [?RFIELDT("hidden", "FORM_TYPE", + "http://jabber.org/protocol/muc#roominfo"), + ?RFIELD("Room description", "muc#roominfo_description", + RoomDescription), + ?RFIELD("Number of occupants", "muc#roominfo_occupants", + integer_to_list(Len)) + ]}]. + +process_iq_disco_items(_From, set, _Lang, _StateData) -> + {error, ?ERR_NOT_ALLOWED}; + +process_iq_disco_items(From, get, _Lang, StateData) -> + case (StateData#state.config)#config.public_list of + true -> + {result, get_mucroom_disco_items(StateData), StateData}; + _ -> + case is_occupant_or_admin(From, StateData) of + true -> + {result, get_mucroom_disco_items(StateData), StateData}; + _ -> + {error, ?ERR_FORBIDDEN} + end + end. + +process_iq_captcha(_From, get, _Lang, _SubEl, _StateData) -> + {error, ?ERR_NOT_ALLOWED}; + +process_iq_captcha(_From, set, _Lang, SubEl, StateData) -> + case ejabberd_captcha:process_reply(SubEl) of + ok -> + {result, [], StateData}; + _ -> + {error, ?ERR_NOT_ACCEPTABLE} + end. + +get_title(StateData) -> + case (StateData#state.config)#config.title of + "" -> + StateData#state.room; + Name -> + Name + end. + +get_roomdesc_reply(JID, StateData, Tail) -> + IsOccupantOrAdmin = is_occupant_or_admin(JID, StateData), + if (StateData#state.config)#config.public or IsOccupantOrAdmin -> + if (StateData#state.config)#config.public_list or IsOccupantOrAdmin -> + {item, get_title(StateData) ++ Tail}; + true -> + {item, get_title(StateData)} + end; + true -> + false + end. + +get_roomdesc_tail(StateData, Lang) -> + Desc = case (StateData#state.config)#config.public of + true -> + ""; + _ -> + translate:translate(Lang, "private, ") + end, + Len = ?DICT:fold(fun(_, _, Acc) -> Acc + 1 end, 0, StateData#state.users), + " (" ++ Desc ++ integer_to_list(Len) ++ ")". + +get_mucroom_disco_items(StateData) -> + lists:map( + fun({_LJID, Info}) -> + Nick = Info#user.nick, + {xmlelement, "item", + [{"jid", jlib:jid_to_string({StateData#state.room, + StateData#state.host, Nick})}, + {"name", Nick}], []} + end, + ?DICT:to_list(StateData#state.users)). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Voice request support + +is_voice_request(Els) -> + lists:foldl( + fun({xmlelement, "x", Attrs, _} = El, false) -> + case xml:get_attr_s("xmlns", Attrs) of + ?NS_XDATA -> + case jlib:parse_xdata_submit(El) of + [_|_] = Fields -> + case {lists:keysearch("FORM_TYPE", 1, Fields), + lists:keysearch("muc#role", 1, Fields)} of + {{value, + {_, ["http://jabber.org/protocol/muc#request"]}}, + {value, {_, ["participant"]}}} -> + true; + _ -> + false + end; + _ -> + false + end; + _ -> + false + end; + (_, Acc) -> + Acc + end, false, Els). + +prepare_request_form(Requester, Nick, Lang) -> + {xmlelement, "message", [{"type", "normal"}], + [{xmlelement, "x", [{"xmlns", ?NS_XDATA}, {"type", "form"}], + [{xmlelement, "title", [], + [{xmlcdata, translate:translate(Lang, "Voice request")}]}, + {xmlelement, "instructions", [], + [{xmlcdata, + translate:translate( + Lang, "Either approve or decline the voice request.")}]}, + {xmlelement, "field", [{"var", "FORM_TYPE"}, {"type", "hidden"}], + [{xmlelement, "value", [], + [{xmlcdata, "http://jabber.org/protocol/muc#request"}]}]}, + {xmlelement, "field", [{"var", "muc#role"}, {"type", "hidden"}], + [{xmlelement, "value", [], [{xmlcdata, "participant"}]}]}, + ?STRINGXFIELD("User JID", "muc#jid", jlib:jid_to_string(Requester)), + ?STRINGXFIELD("Nickname", "muc#roomnick", Nick), + ?BOOLXFIELD("Grant voice to this person?", "muc#request_allow", + list_to_atom("false")) + ]}]}. + +send_voice_request(From, StateData) -> + Moderators = search_role(moderator, StateData), + FromNick = find_nick_by_jid(From, StateData), + lists:foreach( + fun({_, User}) -> + route_stanza( + StateData#state.jid, + User#user.jid, + prepare_request_form(From, FromNick, "")) + end, Moderators). + +is_voice_approvement(Els) -> + lists:foldl( + fun({xmlelement, "x", Attrs, _} = El, false) -> + case xml:get_attr_s("xmlns", Attrs) of + ?NS_XDATA -> + case jlib:parse_xdata_submit(El) of + [_|_] = Fs -> + case {lists:keysearch("FORM_TYPE", 1, Fs), + lists:keysearch("muc#role", 1, Fs), + lists:keysearch("muc#request_allow", 1, Fs)} of + {{value, + {_, ["http://jabber.org/protocol/muc#request"]}}, + {value, {_, ["participant"]}}, + {value, {_, [Flag]}}} + when Flag == "true"; Flag == "1" -> + true; + _ -> + false + end; + _ -> + false + end; + _ -> + false + end; + (_, Acc) -> + Acc + end, false, Els). + +extract_jid_from_voice_approvement(Els) -> + lists:foldl( + fun({xmlelement, "x", _, _} = El, error) -> + Fields = case jlib:parse_xdata_submit(El) of + invalid -> []; + Res -> Res + end, + lists:foldl( + fun({"muc#jid", [JIDStr]}, error) -> + case jlib:string_to_jid(JIDStr) of + error -> error; + J -> {ok, J} + end; + (_, Acc) -> + Acc + end, error, Fields); + (_, Acc) -> + Acc + end, error, Els). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Invitation support + +is_invitation(Els) -> + lists:foldl( + fun({xmlelement, "x", Attrs, _} = El, false) -> + case xml:get_attr_s("xmlns", Attrs) of + ?NS_MUC_USER -> + case xml:get_subtag(El, "invite") of + false -> + false; + _ -> + true + end; + _ -> + false + end; + (_, Acc) -> + Acc + end, false, Els). + +check_invitation(From, Els, Lang, StateData) -> + FAffiliation = get_affiliation(From, StateData), + CanInvite = (StateData#state.config)#config.allow_user_invites + orelse (FAffiliation == admin) orelse (FAffiliation == owner), + InviteEl = case xml:remove_cdata(Els) of + [{xmlelement, "x", _Attrs1, Els1} = XEl] -> + case xml:get_tag_attr_s("xmlns", XEl) of + ?NS_MUC_USER -> + ok; + _ -> + throw({error, ?ERR_BAD_REQUEST}) + end, + case xml:remove_cdata(Els1) of + [{xmlelement, "invite", _Attrs2, _Els2} = InviteEl1] -> + InviteEl1; + _ -> + throw({error, ?ERR_BAD_REQUEST}) + end; + _ -> + throw({error, ?ERR_BAD_REQUEST}) + end, + JID = case jlib:string_to_jid( + xml:get_tag_attr_s("to", InviteEl)) of + error -> + throw({error, ?ERR_JID_MALFORMED}); + JID1 -> + JID1 + end, + case CanInvite of + false -> + throw({error, ?ERR_NOT_ALLOWED}); + true -> + Reason = + xml:get_path_s( + InviteEl, + [{elem, "reason"}, cdata]), + ContinueEl = + case xml:get_path_s( + InviteEl, + [{elem, "continue"}]) of + [] -> []; + Continue1 -> [Continue1] + end, + IEl = + [{xmlelement, "invite", + [{"from", + jlib:jid_to_string(From)}], + [{xmlelement, "reason", [], + [{xmlcdata, Reason}]}] ++ ContinueEl}], + PasswdEl = + case (StateData#state.config)#config.password_protected of + true -> + [{xmlelement, "password", [], + [{xmlcdata, (StateData#state.config)#config.password}]}]; + _ -> + [] + end, + Body = + {xmlelement, "body", [], + [{xmlcdata, + lists:flatten( + io_lib:format( + translate:translate( + Lang, + "~s invites you to the room ~s"), + [jlib:jid_to_string(From), + jlib:jid_to_string({StateData#state.room, + StateData#state.host, + ""}) + ])) ++ + case (StateData#state.config)#config.password_protected of + true -> + ", " ++ + translate:translate(Lang, "the password is") ++ + " '" ++ + (StateData#state.config)#config.password ++ "'"; + _ -> + "" + end ++ + case Reason of + "" -> ""; + _ -> " (" ++ Reason ++ ") " + end + }]}, + Msg = + {xmlelement, "message", + [{"type", "normal"}], + [{xmlelement, "x", [{"xmlns", ?NS_MUC_USER}], IEl ++ PasswdEl}, + {xmlelement, "x", + [{"xmlns", ?NS_XCONFERENCE}, + {"jid", jlib:jid_to_string( + {StateData#state.room, + StateData#state.host, + ""})}], + [{xmlcdata, Reason}]}, + Body]}, + route_stanza(StateData#state.jid, JID, Msg), + JID + end. + +%% Handle a message sent to the room by a non-participant. +%% If it is a decline, send to the inviter. +%% Otherwise, an error message is sent to the sender. +handle_roommessage_from_nonparticipant(Packet, Lang, StateData, From) -> + case catch check_decline_invitation(Packet) of + {true, Decline_data} -> + send_decline_invitation(Decline_data, StateData#state.jid, From); + _ -> + send_error_only_occupants(Packet, Lang, StateData#state.jid, From) + end. + +%% Check in the packet is a decline. +%% If so, also returns the splitted packet. +%% This function must be catched, +%% because it crashes when the packet is not a decline message. +check_decline_invitation(Packet) -> + {xmlelement, "message", _, _} = Packet, + XEl = xml:get_subtag(Packet, "x"), + ?NS_MUC_USER = xml:get_tag_attr_s("xmlns", XEl), + DEl = xml:get_subtag(XEl, "decline"), + ToString = xml:get_tag_attr_s("to", DEl), + ToJID = jlib:string_to_jid(ToString), + {true, {Packet, XEl, DEl, ToJID}}. + +%% Send the decline to the inviter user. +%% The original stanza must be slightly modified. +send_decline_invitation({Packet, XEl, DEl, ToJID}, RoomJID, FromJID) -> + FromString = jlib:jid_to_string(jlib:jid_remove_resource(FromJID)), + {xmlelement, "decline", DAttrs, DEls} = DEl, + DAttrs2 = lists:keydelete("to", 1, DAttrs), + DAttrs3 = [{"from", FromString} | DAttrs2], + DEl2 = {xmlelement, "decline", DAttrs3, DEls}, + XEl2 = replace_subelement(XEl, DEl2), + Packet2 = replace_subelement(Packet, XEl2), + route_stanza(RoomJID, ToJID, Packet2). + +%% Given an element and a new subelement, +%% replace the instance of the subelement in element with the new subelement. +replace_subelement({xmlelement, Name, Attrs, SubEls}, NewSubEl) -> + {_, NameNewSubEl, _, _} = NewSubEl, + SubEls2 = lists:keyreplace(NameNewSubEl, 2, SubEls, NewSubEl), + {xmlelement, Name, Attrs, SubEls2}. + +send_error_only_occupants(Packet, Lang, RoomJID, From) -> + ErrText = "Only occupants are allowed to send messages to the conference", + Err = jlib:make_error_reply(Packet, ?ERRT_NOT_ACCEPTABLE(Lang, ErrText)), + route_stanza(RoomJID, From, Err). + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Logging + +add_to_log(Type, Data, StateData) + when Type == roomconfig_change_disabledlogging -> + %% When logging is disabled, the config change message must be logged: + mod_muc_log:add_to_log( + StateData#state.server_host, roomconfig_change, Data, + StateData#state.jid, make_opts(StateData)); +add_to_log(Type, Data, StateData) -> + case (StateData#state.config)#config.logging of + true -> + mod_muc_log:add_to_log( + StateData#state.server_host, Type, Data, + StateData#state.jid, make_opts(StateData)); + false -> + ok + end. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Users number checking + +tab_add_online_user(JID, StateData) -> + {LUser, LServer, LResource} = jlib:jid_tolower(JID), + US = {LUser, LServer}, + Room = StateData#state.room, + Host = StateData#state.host, + catch ets:insert( + muc_online_users, + #muc_online_users{us = US, resource = LResource, room = Room, host = Host}). + + +tab_remove_online_user(JID, StateData) -> + {LUser, LServer, LResource} = jlib:jid_tolower(JID), + US = {LUser, LServer}, + Room = StateData#state.room, + Host = StateData#state.host, + catch ets:delete_object( + muc_online_users, + #muc_online_users{us = US, resource = LResource, room = Room, host = Host}). + +tab_count_user(JID) -> + {LUser, LServer, _} = jlib:jid_tolower(JID), + US = {LUser, LServer}, + case catch ets:select( + muc_online_users, + [{#muc_online_users{us = US, _ = '_'}, [], [[]]}]) of + Res when is_list(Res) -> + length(Res); + _ -> + 0 + end. + +element_size(El) -> + size(xml:element_to_binary(El)). + +route_stanza(From, To, El) -> + case mod_muc:is_broadcasted(From#jid.lserver) of + true -> + #jid{luser = LUser, lserver = LServer} = To, + case ejabberd_cluster:get_node({LUser, LServer}) of + Node when Node == node() -> + ejabberd_router:route(From, To, El); + _ -> + ok + end; + false -> + ejabberd_router:route(From, To, El) + end. diff --git a/src/mod_muc/mod_muc_room.hrl b/src/mod_muc/mod_muc_room.hrl index 23f248687..ecc044909 100644 --- a/src/mod_muc/mod_muc_room.hrl +++ b/src/mod_muc/mod_muc_room.hrl @@ -67,6 +67,7 @@ -record(state, {room, host, server_host, + mod, access, jid, config = #config{}, diff --git a/src/mod_privacy_odbc.erl b/src/mod_privacy_odbc.erl index 553264cf3..87303b57a 100644 --- a/src/mod_privacy_odbc.erl +++ b/src/mod_privacy_odbc.erl @@ -36,8 +36,20 @@ get_user_list/3, check_packet/6, remove_user/2, + item_to_raw/1, + raw_to_item/1, 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("jlib.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) -> 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) -> Username = ejabberd_odbc:escape(LUser), SName = ejabberd_odbc:escape(Name), diff --git a/src/mod_pubsub/mod_pubsub.erl b/src/mod_pubsub/mod_pubsub.erl index 53e195adc..33aa7a0bf 100644 --- a/src/mod_pubsub/mod_pubsub.erl +++ b/src/mod_pubsub/mod_pubsub.erl @@ -1349,7 +1349,7 @@ iq_pubsub(Host, ServerHost, From, IQType, SubEl, Lang, Access, Plugins) -> {get, "subscriptions"} -> get_subscriptions(Host, Node, From, Plugins); {get, "affiliations"} -> - get_affiliations(Host, From, Plugins); + get_affiliations(Host, Node, From, Plugins); {get, "options"} -> SubID = xml:get_attr_s("subid", 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() %% Response = [pubsubIQResponse()] %% @doc

    Return the list of affiliations as an XMPP response.

    -get_affiliations(Host, JID, Plugins) when is_list(Plugins) -> +get_affiliations(Host, <<>>, JID, Plugins) when is_list(Plugins) -> Result = lists:foldl( fun(Type, {Status, Acc}) -> Features = features(Type), @@ -2482,6 +2482,40 @@ get_affiliations(Host, JID, Plugins) when is_list(Plugins) -> {Error, _} -> Error 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) -> Action = fun(#pubsub_node{type = Type, id = NodeId}) -> Features = features(Type), diff --git a/src/mod_pubsub/mod_pubsub_odbc.erl b/src/mod_pubsub/mod_pubsub_odbc.erl index bd677cbab..edf74458c 100644 --- a/src/mod_pubsub/mod_pubsub_odbc.erl +++ b/src/mod_pubsub/mod_pubsub_odbc.erl @@ -1112,7 +1112,7 @@ iq_pubsub(Host, ServerHost, From, IQType, SubEl, Lang, Access, Plugins) -> {get, "subscriptions"} -> get_subscriptions(Host, Node, From, Plugins); {get, "affiliations"} -> - get_affiliations(Host, From, Plugins); + get_affiliations(Host, Node, From, Plugins); {get, "options"} -> SubID = xml:get_attr_s("subid", 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() %% Response = [pubsubIQResponse()] %% @doc

    Return the list of affiliations as an XMPP response.

    -get_affiliations(Host, JID, Plugins) when is_list(Plugins) -> +get_affiliations(Host, <<>>, JID, Plugins) when is_list(Plugins) -> Result = lists:foldl( fun(Type, {Status, Acc}) -> Features = features(Type), @@ -2267,6 +2267,40 @@ get_affiliations(Host, JID, Plugins) when is_list(Plugins) -> {Error, _} -> Error 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) -> Action = fun(#pubsub_node{type = Type, id = NodeId}) -> Features = features(Type), diff --git a/src/mod_pubsub/pubsub_odbc.patch b/src/mod_pubsub/pubsub_odbc.patch index 18fb934f6..bfb26bfc1 100644 --- a/src/mod_pubsub/pubsub_odbc.patch +++ b/src/mod_pubsub/pubsub_odbc.patch @@ -1,5 +1,5 @@ ---- mod_pubsub.erl 2012-01-03 15:02:46.000000000 +0100 -+++ mod_pubsub_odbc.erl 2012-02-08 21:11:14.874000001 +0100 +--- mod_pubsub.erl 2012-04-26 16:29:53.653392761 +0200 ++++ mod_pubsub_odbc.erl 2012-04-26 16:29:53.616726238 +0200 @@ -42,7 +42,7 @@ %%% 6.2.3.1, 6.2.3.5, and 6.3. For information on subscription leases see %%% XEP-0060 section 12.18. @@ -710,7 +710,7 @@ end end; send_items(Host, Node, NodeId, Type, {U,S,R} = LJID, Number) -> -@@ -2546,7 +2331,8 @@ +@@ -2580,7 +2365,8 @@ error -> {error, ?ERR_BAD_REQUEST}; _ -> @@ -720,7 +720,7 @@ case lists:member(Owner, Owners) of true -> OwnerJID = jlib:make_jid(Owner), -@@ -2556,24 +2342,7 @@ +@@ -2590,24 +2376,7 @@ end, lists:foreach( fun({JID, Affiliation}) -> @@ -746,7 +746,7 @@ end, FilteredEntities), {result, []}; _ -> -@@ -2626,9 +2395,9 @@ +@@ -2660,9 +2429,9 @@ end. read_sub(Subscriber, Node, NodeID, SubID, Lang) -> @@ -758,7 +758,7 @@ OptionsEl = {xmlelement, "options", [{"jid", jlib:jid_to_string(Subscriber)}, {"subid", SubID}|nodeAttr(Node)], [XdataEl]}, -@@ -2660,7 +2429,7 @@ +@@ -2694,7 +2463,7 @@ end. set_options_helper(Configuration, JID, NodeID, SubID, Type) -> @@ -767,7 +767,7 @@ {result, GoodSubOpts} -> GoodSubOpts; _ -> invalid end, -@@ -2859,8 +2628,8 @@ +@@ -2893,8 +2662,8 @@ {"subscription", subscription_to_string(Sub)} | nodeAttr(Node)], []}]}]}, ejabberd_router:route(service_jid(Host), jlib:make_jid(JID), Stanza) end, @@ -778,7 +778,7 @@ true -> 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)]), {result, [{Depth, [{N, sub_with_options(N)} || N <- Nodes]} || {Depth, Nodes} <- Collection]} end, @@ -787,7 +787,7 @@ {result, CollSubs} -> subscribed_nodes_by_jid(NotifyType, CollSubs); _ -> [] end. -@@ -3292,8 +3061,8 @@ +@@ -3326,8 +3095,8 @@ [] end. sub_with_options(JID, NodeId, SubId) -> @@ -798,7 +798,7 @@ _ -> {JID, SubId, []} end. -@@ -3369,6 +3138,30 @@ +@@ -3403,6 +3172,30 @@ Result end. @@ -829,7 +829,7 @@ %% @spec (Host, Options) -> MaxItems %% Host = host() %% Options = [Option] -@@ -3765,7 +3558,13 @@ +@@ -3799,7 +3592,13 @@ tree_action(Host, Function, Args) -> ?DEBUG("tree_action ~p ~p ~p",[Host,Function,Args]), Fun = fun() -> tree_call(Host, Function, Args) end, @@ -844,7 +844,7 @@ %% @doc

    node plugin call.

    node_call(Type, Function, Args) -> -@@ -3785,13 +3584,13 @@ +@@ -3819,13 +3618,13 @@ node_action(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 N when is_record(N, pubsub_node) -> case Action(N) of -@@ -3803,13 +3602,19 @@ +@@ -3837,13 +3636,19 @@ Error end end, Trans). @@ -884,7 +884,7 @@ {result, Result} -> {result, Result}; {error, Error} -> {error, Error}; {atomic, {result, Result}} -> {result, Result}; -@@ -3817,6 +3622,15 @@ +@@ -3851,6 +3656,15 @@ {aborted, Reason} -> ?ERROR_MSG("transaction return internal error: ~p~n", [{aborted, Reason}]), {error, ?ERR_INTERNAL_SERVER_ERROR}; @@ -900,7 +900,7 @@ {'EXIT', Reason} -> ?ERROR_MSG("transaction return internal error: ~p~n", [{'EXIT', Reason}]), {error, ?ERR_INTERNAL_SERVER_ERROR}; -@@ -3825,6 +3639,17 @@ +@@ -3859,6 +3673,17 @@ {error, ?ERR_INTERNAL_SERVER_ERROR} end. diff --git a/src/mod_shared_roster.erl b/src/mod_shared_roster.erl index 8c89d977c..ef79c893a 100644 --- a/src/mod_shared_roster.erl +++ b/src/mod_shared_roster.erl @@ -186,7 +186,7 @@ get_vcard_module(Server) -> get_rosteritem_name([], _, _) -> ""; 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, ""), IQ = {iq,"",get,"vcard-temp","", {xmlelement,"vCard",[{"xmlns","vcard-temp"}],[]}}, @@ -619,14 +619,14 @@ add_user_to_group(Host, US, Group) -> {LUser, LServer} = US, case ejabberd_regexp:run(LUser, "^@.+@$") of match -> - GroupOpts = mod_shared_roster:get_group_opts(Host, Group), + GroupOpts = ?MODULE:get_group_opts(Host, Group), MoreGroupOpts = case LUser of "@all@" -> [{all_users, true}]; "@online@" -> [{online_users, true}]; _ -> [] end, - mod_shared_roster:set_group_opts( + ?MODULE:set_group_opts( Host, Group, GroupOpts ++ MoreGroupOpts); nomatch -> @@ -652,7 +652,7 @@ remove_user_from_group(Host, US, Group) -> {LUser, LServer} = US, case ejabberd_regexp:run(LUser, "^@.+@$") of match -> - GroupOpts = mod_shared_roster:get_group_opts(Host, Group), + GroupOpts = ?MODULE:get_group_opts(Host, Group), NewGroupOpts = case LUser of "@all@" -> @@ -660,7 +660,7 @@ remove_user_from_group(Host, US, Group) -> "@online@" -> lists:filter(fun(X) -> X/={online_users,true} end, GroupOpts) end, - mod_shared_roster:set_group_opts(Host, Group, NewGroupOpts); + ?MODULE:set_group_opts(Host, Group, NewGroupOpts); nomatch -> R = #sr_user{us = US, group_host = GroupHost}, F = fun() -> @@ -876,7 +876,7 @@ webadmin_page(Acc, _, _) -> Acc. list_shared_roster_groups(Host, Query, Lang) -> Res = list_sr_groups_parse_query(Host, Query), - SRGroups = mod_shared_roster:list_groups(Host), + SRGroups = ?MODULE:list_groups(Host), FGroups = ?XAE("table", [], [?XE("tbody", @@ -925,19 +925,19 @@ list_sr_groups_parse_query(Host, Query) -> list_sr_groups_parse_addnew(Host, Query) -> case lists:keysearch("namenew", 1, Query) of {value, {_, Group}} when Group /= "" -> - mod_shared_roster:create_group(Host, Group), + ?MODULE:create_group(Host, Group), ok; _ -> error end. list_sr_groups_parse_delete(Host, Query) -> - SRGroups = mod_shared_roster:list_groups(Host), + SRGroups = ?MODULE:list_groups(Host), lists:foreach( fun(Group) -> case lists:member({"selected", Group}, Query) of true -> - mod_shared_roster:delete_group(Host, Group); + ?MODULE:delete_group(Host, Group); _ -> ok end @@ -947,14 +947,14 @@ list_sr_groups_parse_delete(Host, Query) -> shared_roster_group(Host, Group, Query, Lang) -> 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, ""), Description = get_opt(GroupOpts, description, ""), AllUsers = get_opt(GroupOpts, all_users, false), OnlineUsers = get_opt(GroupOpts, online_users, false), %%Disabled = false, 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 = if AllUsers -> @@ -1042,7 +1042,7 @@ shared_roster_group_parse_query(Host, Group, Query) -> true -> [{displayed_groups, DispGroups}] end, - OldMembers = mod_shared_roster:get_group_explicit_users( + OldMembers = ?MODULE:get_group_explicit_users( Host, Group), SJIDs = string:tokens(SMembers, ", \r\n"), NewMembers = @@ -1074,7 +1074,7 @@ shared_roster_group_parse_query(Host, Group, Query) -> false -> [] end, - mod_shared_roster:set_group_opts( + ?MODULE:set_group_opts( Host, Group, NameOpt ++ DispGroupsOpt ++ DescriptionOpt ++ AllUsersOpt ++ OnlineUsersOpt), @@ -1085,12 +1085,12 @@ shared_roster_group_parse_query(Host, Group, Query) -> RemovedMembers = OldMembers -- NewMembers, lists:foreach( fun(US) -> - mod_shared_roster:remove_user_from_group( + ?MODULE:remove_user_from_group( Host, US, Group) end, RemovedMembers), lists:foreach( fun(US) -> - mod_shared_roster:add_user_to_group( + ?MODULE:add_user_to_group( Host, US, Group) end, AddedMembers), ok diff --git a/src/mod_shared_roster_ldap.erl b/src/mod_shared_roster_ldap.erl index 229be7fd8..894b90076 100644 --- a/src/mod_shared_roster_ldap.erl +++ b/src/mod_shared_roster_ldap.erl @@ -329,10 +329,13 @@ eldap_search(State, FilterParseArgs, AttributesList) -> [] end. -get_user_displayed_groups({_User, Host}) -> +get_user_displayed_groups({User, Host}) -> {ok, State} = eldap_utils:get_state(Host, ?MODULE), 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( fun(#eldap_entry{attributes = Attrs}) -> case Attrs of diff --git a/src/mod_shared_roster_odbc.erl b/src/mod_shared_roster_odbc.erl new file mode 100644 index 000000000..570e50947 --- /dev/null +++ b/src/mod_shared_roster_odbc.erl @@ -0,0 +1,1165 @@ +%%%---------------------------------------------------------------------- +%%% File : mod_shared_roster_odbc.erl +%%% Author : Alexey Shchepin +%%% Purpose : Shared roster management +%%% Created : 5 Mar 2005 by Alexey Shchepin +%%% +%%% +%%% 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_shared_roster_odbc). +-author('alexey@process-one.net'). + +-behaviour(gen_mod). + +-export([start/2, stop/1, + item_to_xml/1, + webadmin_menu/3, webadmin_page/3, + get_user_roster/2, + get_subscription_lists/3, + get_jid_info/4, + process_item/2, + in_subscription/6, + out_subscription/4, + user_available/1, + unset_presence/4, + register_user/2, + remove_user/2, + list_groups/1, + create_group/2, + create_group/3, + delete_group/2, + get_group_opts/2, + set_group_opts/3, + get_group_users/2, + get_group_explicit_users/2, + is_user_in_group/3, + add_user_to_group/3, + remove_user_from_group/3]). + +-include("ejabberd.hrl"). +-include("jlib.hrl"). +-include("mod_roster.hrl"). +-include("web/ejabberd_http.hrl"). +-include("web/ejabberd_web_admin.hrl"). + +start(Host, _Opts) -> + ejabberd_hooks:add(webadmin_menu_host, Host, + ?MODULE, webadmin_menu, 70), + ejabberd_hooks:add(webadmin_page_host, Host, + ?MODULE, webadmin_page, 50), + ejabberd_hooks:add(roster_get, Host, + ?MODULE, get_user_roster, 70), + ejabberd_hooks:add(roster_in_subscription, Host, + ?MODULE, in_subscription, 30), + ejabberd_hooks:add(roster_out_subscription, Host, + ?MODULE, out_subscription, 30), + ejabberd_hooks:add(roster_get_subscription_lists, Host, + ?MODULE, get_subscription_lists, 70), + ejabberd_hooks:add(roster_get_jid_info, Host, + ?MODULE, get_jid_info, 70), + ejabberd_hooks:add(roster_process_item, Host, + ?MODULE, process_item, 50), + ejabberd_hooks:add(user_available_hook, Host, + ?MODULE, user_available, 50), + ejabberd_hooks:add(unset_presence_hook, Host, + ?MODULE, unset_presence, 50), + ejabberd_hooks:add(register_user, Host, + ?MODULE, register_user, 50), + ejabberd_hooks:add(anonymous_purge_hook, Host, + ?MODULE, remove_user, 50), + ejabberd_hooks:add(remove_user, Host, + ?MODULE, remove_user, 50). +%%ejabberd_hooks:add(remove_user, Host, +%% ?MODULE, remove_user, 50), + +stop(Host) -> + ejabberd_hooks:delete(webadmin_menu_host, Host, + ?MODULE, webadmin_menu, 70), + ejabberd_hooks:delete(webadmin_page_host, Host, + ?MODULE, webadmin_page, 50), + ejabberd_hooks:delete(roster_get, Host, + ?MODULE, get_user_roster, 70), + ejabberd_hooks:delete(roster_in_subscription, Host, + ?MODULE, in_subscription, 30), + ejabberd_hooks:delete(roster_out_subscription, Host, + ?MODULE, out_subscription, 30), + ejabberd_hooks:delete(roster_get_subscription_lists, Host, + ?MODULE, get_subscription_lists, 70), + ejabberd_hooks:delete(roster_get_jid_info, Host, + ?MODULE, get_jid_info, 70), + ejabberd_hooks:delete(roster_process_item, Host, + ?MODULE, process_item, 50), + ejabberd_hooks:delete(user_available_hook, Host, + ?MODULE, user_available, 50), + ejabberd_hooks:delete(unset_presence_hook, Host, + ?MODULE, unset_presence, 50), + ejabberd_hooks:delete(register_user, Host, + ?MODULE, register_user, 50), + ejabberd_hooks:delete(anonymous_purge_hook, Host, + ?MODULE, remove_user, 50), + ejabberd_hooks:delete(remove_user, Host, + ?MODULE, remove_user, 50). +%%ejabberd_hooks:delete(remove_user, Host, +%% ?MODULE, remove_user, 50), + + +get_user_roster(Items, US) -> + {U, S} = US, + DisplayedGroups = get_user_displayed_groups(US), + %% Get shared roster users in all groups and remove self: + SRUsers = + lists:foldl( + fun(Group, Acc1) -> + GroupName = get_group_name(S, Group), + lists:foldl( + fun(User, Acc2) -> + if User == US -> Acc2; + true -> dict:append(User, + GroupName, + Acc2) + end + end, Acc1, get_group_users(S, Group)) + end, dict:new(), DisplayedGroups), + + %% If partially subscribed users are also in shared roster, show them as + %% totally subscribed: + {NewItems1, SRUsersRest} = + lists:mapfoldl( + fun(Item, SRUsers1) -> + {_, _, {U1, S1, _}} = Item#roster.usj, + US1 = {U1, S1}, + case dict:find(US1, SRUsers1) of + {ok, _GroupNames} -> + {Item#roster{subscription = both, ask = none}, + dict:erase(US1, SRUsers1)}; + error -> + {Item, SRUsers1} + end + end, SRUsers, Items), + + %% Export items in roster format: + ModVcard = get_vcard_module(S), + SRItems = [#roster{usj = {U, S, {U1, S1, ""}}, + us = US, + jid = {U1, S1, ""}, + name = get_rosteritem_name(ModVcard, U1, S1), + subscription = both, + ask = none, + groups = GroupNames} || + {{U1, S1}, GroupNames} <- dict:to_list(SRUsersRest)], + SRItems ++ NewItems1. + +get_vcard_module(Server) -> + Modules = gen_mod:loaded_modules(Server), + [M || M <- Modules, + (M == mod_vcard) or (M == mod_vcard_odbc) or (M == mod_vcard_ldap)]. + +get_rosteritem_name([], _, _) -> + ""; +get_rosteritem_name([ModVcard], U, S) -> + From = jlib:make_jid("", S, ?MODULE), + To = jlib:make_jid(U, S, ""), + IQ = {iq,"",get,"vcard-temp","", + {xmlelement,"vCard",[{"xmlns","vcard-temp"}],[]}}, + IQ_Vcard = ModVcard:process_sm_iq(From, To, IQ), + try get_rosteritem_name_vcard(IQ_Vcard#iq.sub_el) + catch E1:E2 -> + ?ERROR_MSG("Error ~p found when trying to get the vCard of ~s@~s " + "in ~p:~n ~p", [E1, U, S, ModVcard, E2]), + "" + end. + +get_rosteritem_name_vcard([]) -> + ""; +get_rosteritem_name_vcard([Vcard]) -> + case xml:get_path_s(Vcard, [{elem, "NICKNAME"}, cdata]) of + "" -> xml:get_path_s(Vcard, [{elem, "FN"}, cdata]); + Nickname -> Nickname + end. + +%% This function rewrites the roster entries when moving or renaming +%% them in the user contact list. +process_item(RosterItem, Host) -> + USFrom = {UserFrom, ServerFrom} = RosterItem#roster.us, + {UserTo, ServerTo, ResourceTo} = RosterItem#roster.jid, + NameTo = RosterItem#roster.name, + USTo = {UserTo, ServerTo}, + DisplayedGroups = get_user_displayed_groups(USFrom), + CommonGroups = lists:filter(fun(Group) -> + is_user_in_group(USTo, Group, Host) + end, DisplayedGroups), + case CommonGroups of + [] -> RosterItem; + %% Roster item cannot be removed: We simply reset the original groups: + _ when RosterItem#roster.subscription == remove -> + GroupNames = lists:map(fun(Group) -> + get_group_name(Host, Group) + end, CommonGroups), + RosterItem#roster{subscription = both, ask = none, + groups=[GroupNames]}; + %% Both users have at least a common shared group, + %% So each user can see the other + _ -> + %% Check if the list of groups of the new roster item + %% include at least a new one + case lists:subtract(RosterItem#roster.groups, CommonGroups) of + %% If it doesn't, then remove this user from any + %% existing roster groups. + [] -> + %% Remove pending subscription by setting it + %% unsubscribed. + Mod = get_roster_mod(ServerFrom), + + %% Remove pending out subscription + Mod:out_subscription(UserTo, ServerTo, + jlib:make_jid(UserFrom, ServerFrom, ""), + unsubscribe), + + %% Remove pending in subscription + Mod:in_subscription(aaaa, UserFrom, ServerFrom, + jlib:make_jid(UserTo, ServerTo, ""), + unsubscribe, ""), + + %% But we're still subscribed, so respond as such. + RosterItem#roster{subscription = both, ask = none}; + %% If so, it means the user wants to add that contact + %% to his personal roster + PersonalGroups -> + %% Store roster items in From and To rosters + set_new_rosteritems(UserFrom, ServerFrom, + UserTo, ServerTo, ResourceTo, NameTo, + PersonalGroups) + end + end. + +build_roster_record(User1, Server1, User2, Server2, Name2, Groups) -> + USR2 = {User2, Server2, ""}, + #roster{usj = {User1, Server1, USR2}, + us = {User1, Server1}, + jid = USR2, + name = Name2, + subscription = both, + ask = none, + groups = Groups + }. + +set_new_rosteritems(UserFrom, ServerFrom, + UserTo, ServerTo, ResourceTo, NameTo, GroupsFrom) -> + Mod = get_roster_mod(ServerFrom), + + RIFrom = build_roster_record(UserFrom, ServerFrom, + UserTo, ServerTo, NameTo, GroupsFrom), + set_item(UserFrom, ServerFrom, ResourceTo, RIFrom), + JIDTo = jlib:make_jid(UserTo, ServerTo, ""), + + JIDFrom = jlib:make_jid(UserFrom, ServerFrom, ""), + RITo = build_roster_record(UserTo, ServerTo, + UserFrom, ServerFrom, UserFrom,[]), + set_item(UserTo, ServerTo, "", RITo), + + %% From requests + Mod:out_subscription(UserFrom, ServerFrom, JIDTo, subscribe), + Mod:in_subscription(aaa, UserTo, ServerTo, JIDFrom, subscribe, ""), + + %% To accepts + Mod:out_subscription(UserTo, ServerTo, JIDFrom, subscribed), + Mod:in_subscription(aaa, UserFrom, ServerFrom, JIDTo, subscribed, ""), + + %% To requests + Mod:out_subscription(UserTo, ServerTo, JIDFrom, subscribe), + Mod:in_subscription(aaa, UserFrom, ServerFrom, JIDTo, subscribe, ""), + + %% From accepts + Mod:out_subscription(UserFrom, ServerFrom, JIDTo, subscribed), + Mod:in_subscription(aaa, UserTo, ServerTo, JIDFrom, subscribed, ""), + + RIFrom. + +set_item(User, Server, Resource, Item) -> + ResIQ = #iq{type = set, xmlns = ?NS_ROSTER, + id = "push" ++ randoms:get_string(), + sub_el = [{xmlelement, "query", + [{"xmlns", ?NS_ROSTER}], + [mod_roster:item_to_xml(Item)]}]}, + ejabberd_router:route( + jlib:make_jid(User, Server, Resource), + jlib:make_jid("", Server, ""), + jlib:iq_to_xml(ResIQ)). + + +get_subscription_lists({F, T}, User, Server) -> + LUser = jlib:nodeprep(User), + LServer = jlib:nameprep(Server), + US = {LUser, LServer}, + DisplayedGroups = get_user_displayed_groups(US), + SRUsers = + lists:usort( + lists:flatmap( + fun(Group) -> + get_group_users(LServer, Group) + end, DisplayedGroups)), + SRJIDs = [{U1, S1, ""} || {U1, S1} <- SRUsers], + {lists:usort(SRJIDs ++ F), lists:usort(SRJIDs ++ T)}. + +get_jid_info({Subscription, Groups}, User, Server, JID) -> + LUser = jlib:nodeprep(User), + LServer = jlib:nameprep(Server), + US = {LUser, LServer}, + {U1, S1, _} = jlib:jid_tolower(JID), + US1 = {U1, S1}, + DisplayedGroups = get_user_displayed_groups(US), + SRUsers = + lists:foldl( + fun(Group, Acc1) -> + lists:foldl( + fun(User1, Acc2) -> + dict:append( + User1, get_group_name(LServer, Group), Acc2) + end, Acc1, get_group_users(LServer, Group)) + end, dict:new(), DisplayedGroups), + case dict:find(US1, SRUsers) of + {ok, GroupNames} -> + NewGroups = if + Groups == [] -> GroupNames; + true -> Groups + end, + {both, NewGroups}; + error -> + {Subscription, Groups} + end. + +in_subscription(Acc, User, Server, JID, Type, _Reason) -> + process_subscription(in, User, Server, JID, Type, Acc). + +out_subscription(UserFrom, ServerFrom, JIDTo, unsubscribed) -> + Mod = get_roster_mod(ServerFrom), + + %% Remove pending out subscription + #jid{luser = UserTo, lserver = ServerTo} = JIDTo, + JIDFrom = jlib:make_jid(UserFrom, UserTo, ""), + Mod:out_subscription(UserTo, ServerTo, JIDFrom, unsubscribe), + + %% Remove pending in subscription + Mod:in_subscription(aaaa, UserFrom, ServerFrom, JIDTo, unsubscribe, ""), + + process_subscription(out, UserFrom, ServerFrom, JIDTo, unsubscribed, false); +out_subscription(User, Server, JID, Type) -> + process_subscription(out, User, Server, JID, Type, false). + +process_subscription(Direction, User, Server, JID, _Type, Acc) -> + LUser = jlib:nodeprep(User), + LServer = jlib:nameprep(Server), + US = {LUser, LServer}, + {U1, S1, _} = jlib:jid_tolower(jlib:jid_remove_resource(JID)), + US1 = {U1, S1}, + DisplayedGroups = get_user_displayed_groups(US), + SRUsers = + lists:usort( + lists:flatmap( + fun(Group) -> + get_group_users(LServer, Group) + end, DisplayedGroups)), + case lists:member(US1, SRUsers) of + true -> + case Direction of + in -> + {stop, false}; + out -> + stop + end; + false -> + Acc + end. + +list_groups(Host) -> + case ejabberd_odbc:sql_query( + Host, ["select name from sr_group;"]) of + {selected, ["name"], Rs} -> + [G || {G} <- Rs]; + _ -> + [] + end. + +groups_with_opts(Host) -> + case ejabberd_odbc:sql_query( + Host, ["select name, opts from sr_group;"]) of + {selected, ["name", "opts"], Rs} -> + [{G, ejabberd_odbc:decode_term(Opts)} || {G, Opts} <- Rs]; + _ -> + [] + end. + +create_group(Host, Group) -> + create_group(Host, Group, []). + +create_group(Host, Group, Opts) -> + SGroup = ejabberd_odbc:escape(Group), + SOpts = ejabberd_odbc:encode_term(Opts), + F = fun() -> + odbc_queries:update_t("sr_group", + ["name", "opts"], + [SGroup, SOpts], + ["name='", SGroup, "'"]) + end, + ejabberd_odbc:sql_transaction(Host, F). + +delete_group(Host, Group) -> + SGroup = ejabberd_odbc:escape(Group), + F = fun() -> + ejabberd_odbc:sql_query_t( + ["delete from sr_group where name='", SGroup, "';"]), + ejabberd_odbc:sql_query_t( + ["delete from sr_user where grp='", SGroup, "';"]) + end, + ejabberd_odbc:sql_transaction(Host, F). + +get_group_opts(Host, Group) -> + SGroup = ejabberd_odbc:escape(Group), + case catch ejabberd_odbc:sql_query( + Host, ["select opts from sr_group " + "where name='", SGroup, "';"]) of + {selected, ["opts"], [{SOpts}]} -> + ejabberd_odbc:decode_term(SOpts); + _ -> + error + end. + +set_group_opts(Host, Group, Opts) -> + SGroup = ejabberd_odbc:escape(Group), + SOpts = ejabberd_odbc:encode_term(Opts), + F = fun() -> + odbc_queries:update_t("sr_group", + ["name", "opts"], + [SGroup, SOpts], + ["name='", SGroup, "'"]) + end, + ejabberd_odbc:sql_transaction(Host, F). + +get_user_groups(US) -> + Host = element(2, US), + SJID = make_jid_s(US), + case catch ejabberd_odbc:sql_query( + Host, ["select grp from sr_user " + "where jid='", SJID, "';"]) of + {selected, ["grp"], Rs} -> + [G || {G} <- Rs]; + _ -> + [] + end ++ get_special_users_groups(Host). + +is_group_enabled(Host1, Group1) -> + {Host, Group} = split_grouphost(Host1, Group1), + SGroup = ejabberd_odbc:escape(Group), + case catch ejabberd_odbc:sql_query( + Host, ["select opts from sr_group " + "where name='", SGroup, "';"]) of + {selected, ["opts"], [{SOpts}]} -> + Opts = ejabberd_odbc:decode_term(SOpts), + not lists:member(disabled, Opts); + _ -> + false + end. + +%% @spec (Host::string(), Group::string(), Opt::atom(), Default) -> OptValue | Default +get_group_opt(Host, Group, Opt, Default) -> + SGroup = ejabberd_odbc:escape(Group), + case catch ejabberd_odbc:sql_query( + Host, ["select opts from sr_group " + "where name='", SGroup, "';"]) of + {selected, ["opts"], [{SOpts}]} -> + Opts = ejabberd_odbc:decode_term(SOpts), + case lists:keysearch(Opt, 1, Opts) of + {value, {_, Val}} -> + Val; + false -> + Default + end; + _ -> + Default + end. + +get_online_users(Host) -> + lists:usort([{U, S} || {U, S, _} <- ejabberd_sm:get_vh_session_list(Host)]). + +get_group_users(Host1, Group1) -> + {Host, Group} = split_grouphost(Host1, Group1), + case get_group_opt(Host, Group, all_users, false) of + true -> + ejabberd_auth:get_vh_registered_users(Host); + false -> + [] + end ++ + case get_group_opt(Host, Group, online_users, false) of + true -> + get_online_users(Host); + false -> + [] + end ++ + get_group_explicit_users(Host, Group). + +get_group_users(Host, Group, GroupOpts) -> + case proplists:get_value(all_users, GroupOpts, false) of + true -> + ejabberd_auth:get_vh_registered_users(Host); + false -> + [] + end ++ + case proplists:get_value(online_users, GroupOpts, false) of + true -> + get_online_users(Host); + false -> + [] + end ++ + get_group_explicit_users(Host, Group). + +%% @spec (Host::string(), Group::string()) -> [{User::string(), Server::string()}] +get_group_explicit_users(Host, Group) -> + SGroup = ejabberd_odbc:escape(Group), + case catch ejabberd_odbc:sql_query( + Host, ["select jid from sr_user " + "where grp='", SGroup, "';"]) of + {selected, ["jid"], Rs} -> + lists:map( + fun({JID}) -> + {U, S, _} = jlib:jid_tolower( + jlib:string_to_jid(JID)), + {U, S} + end, Rs); + _ -> + [] + end. + +get_group_name(Host1, Group1) -> + {Host, Group} = split_grouphost(Host1, Group1), + get_group_opt(Host, Group, name, Group). + +%% Get list of names of groups that have @all@/@online@/etc in the memberlist +get_special_users_groups(Host) -> + lists:filter( + fun(Group) -> + get_group_opt(Host, Group, all_users, false) + orelse get_group_opt(Host, Group, online_users, false) + end, + list_groups(Host)). + +%% Get list of names of groups that have @online@ in the memberlist +get_special_users_groups_online(Host) -> + lists:filter( + fun(Group) -> + get_group_opt(Host, Group, online_users, false) + end, + list_groups(Host)). + +%% Given two lists of groupnames and their options, +%% return the list of displayed groups to the second list +displayed_groups(GroupsOpts, SelectedGroupsOpts) -> + DisplayedGroups = + lists:usort( + lists:flatmap( + fun({_Group, Opts}) -> + [G || G <- proplists:get_value(displayed_groups, Opts, []), + not lists:member(disabled, Opts)] + end, SelectedGroupsOpts)), + [G || G <- DisplayedGroups, + not lists:member(disabled, proplists:get_value(G, GroupsOpts, []))]. + +%% Given a list of group names with options, +%% for those that have @all@ in memberlist, +%% get the list of groups displayed +get_special_displayed_groups(GroupsOpts) -> + Groups = lists:filter( + fun({_Group, Opts}) -> + proplists:get_value(all_users, Opts, false) + end, GroupsOpts), + displayed_groups(GroupsOpts, Groups). + +%% Given a username and server, and a list of group names with options, +%% for the list of groups of that server that user is member +%% get the list of groups displayed +get_user_displayed_groups(LUser, LServer, GroupsOpts) -> + SJID = make_jid_s(LUser, LServer), + Groups = case catch ejabberd_odbc:sql_query( + LServer, ["select grp from sr_user " + "where jid='", SJID, "';"]) of + {selected, ["grp"], Rs} -> + [{Group, proplists:get_value(Group, GroupsOpts, [])} || + {Group} <- Rs]; + _ -> + [] + end, + displayed_groups(GroupsOpts, Groups). + +%% @doc Get the list of groups that are displayed to this user +get_user_displayed_groups(US) -> + Host = element(2, US), + DisplayedGroups1 = + lists:usort( + lists:flatmap( + fun(Group) -> + case is_group_enabled(Host, Group) of + true -> + get_group_opt(Host, Group, displayed_groups, []); + false -> + [] + end + end, get_user_groups(US))), + [Group || Group <- DisplayedGroups1, is_group_enabled(Host, Group)]. + +is_user_in_group(US, Group, Host) -> + SJID = make_jid_s(US), + SGroup = ejabberd_odbc:escape(Group), + case catch ejabberd_odbc:sql_query( + Host, ["select * from sr_user where " + "jid='", SJID, "' and grp='", SGroup, "';"]) of + {selected, _, []} -> + lists:member(US, get_group_users(Host, Group)); + _ -> + true + end. + +%% @spec (Host::string(), {User::string(), Server::string()}, Group::string()) -> {atomic, ok} +add_user_to_group(Host, US, Group) -> + {LUser, LServer} = US, + case ejabberd_regexp:run(LUser, "^@.+@$") of + match -> + GroupOpts = ?MODULE:get_group_opts(Host, Group), + MoreGroupOpts = + case LUser of + "@all@" -> [{all_users, true}]; + "@online@" -> [{online_users, true}]; + _ -> [] + end, + ?MODULE:set_group_opts( + Host, Group, + GroupOpts ++ MoreGroupOpts); + nomatch -> + %% Push this new user to members of groups where this group is displayed + push_user_to_displayed(LUser, LServer, Group, Host, both), + %% Push members of groups that are displayed to this group + push_displayed_to_user(LUser, LServer, Group, Host, both), + SJID = make_jid_s(US), + SGroup = ejabberd_odbc:escape(Group), + F = fun() -> + odbc_queries:update_t( + "sr_user", + ["jid", "grp"], + [SJID, SGroup], + ["jid='", SJID, "' and grp='", SGroup, "'"]) + end, + ejabberd_odbc:sql_transaction(Host, F) + end. + +push_displayed_to_user(LUser, LServer, Group, Host, Subscription) -> + GroupsOpts = groups_with_opts(LServer), + GroupOpts = proplists:get_value(Group, GroupsOpts, []), + DisplayedGroups = proplists:get_value(displayed_groups, GroupOpts, []), + [push_members_to_user(LUser, LServer, DGroup, Host, Subscription) || DGroup <- DisplayedGroups]. + +remove_user_from_group(Host, US, Group) -> + {LUser, LServer} = US, + case ejabberd_regexp:run(LUser, "^@.+@$") of + match -> + GroupOpts = ?MODULE:get_group_opts(Host, Group), + NewGroupOpts = + case LUser of + "@all@" -> + lists:filter(fun(X) -> X/={all_users,true} end, GroupOpts); + "@online@" -> + lists:filter(fun(X) -> X/={online_users,true} end, GroupOpts) + end, + ?MODULE:set_group_opts(Host, Group, NewGroupOpts); + nomatch -> + SJID = make_jid_s(US), + SGroup = ejabberd_odbc:escape(Group), + F = fun() -> + ejabberd_odbc:sql_query_t( + ["delete from sr_user where jid='", + SJID, "' and grp='", SGroup, "';"]), + ok + end, + Result = ejabberd_odbc:sql_transaction(Host, F), + %% Push removal of the old user to members of groups where the group that this user was members was displayed + push_user_to_displayed(LUser, LServer, Group, Host, remove), + %% Push removal of members of groups that where displayed to the group which this user has left + push_displayed_to_user(LUser, LServer, Group, Host, remove), + Result + end. + + +push_members_to_user(LUser, LServer, Group, Host, Subscription) -> + GroupsOpts = groups_with_opts(LServer), + GroupOpts = proplists:get_value(Group, GroupsOpts, []), + GroupName = proplists:get_value(name, GroupOpts, Group), + Members = get_group_users(Host, Group), + lists:foreach( + fun({U, S}) -> + push_roster_item(LUser, LServer, U, S, GroupName, Subscription) + end, Members). + +register_user(User, Server) -> + %% Get list of groups where this user is member + Groups = get_user_groups({User, Server}), + %% Push this user to members of groups where is displayed a group which this user is member + [push_user_to_displayed(User, Server, Group, Server, both) || Group <- Groups]. + +remove_user(User, Server) -> + push_user_to_members(User, Server, remove). + +push_user_to_members(User, Server, Subscription) -> + LUser = jlib:nodeprep(User), + LServer = jlib:nameprep(Server), + GroupsOpts = groups_with_opts(LServer), + SpecialGroups = get_special_displayed_groups(GroupsOpts), + UserGroups = get_user_displayed_groups(LUser, LServer, GroupsOpts), + lists:foreach( + fun(Group) -> + remove_user_from_group(LServer, {LUser, LServer}, Group), + GroupOpts = proplists:get_value(Group, GroupsOpts, []), + GroupName = proplists:get_value(name, GroupOpts, Group), + lists:foreach( + fun({U, S}) -> + push_roster_item(U, S, LUser, LServer, GroupName, Subscription) + end, get_group_users(LServer, Group, GroupOpts)) + end, lists:usort(SpecialGroups++UserGroups)). + +push_user_to_displayed(LUser, LServer, Group, Host, Subscription) -> + GroupsOpts = groups_with_opts(Host), + GroupOpts = proplists:get_value(Group, GroupsOpts, []), + GroupName = proplists:get_value(name, GroupOpts, Group), + DisplayedToGroupsOpts = displayed_to_groups(Group, Host), + [push_user_to_group(LUser, LServer, GroupD, Host, GroupName, Subscription) || {GroupD, _Opts} <- DisplayedToGroupsOpts]. + +push_user_to_group(LUser, LServer, Group, Host, GroupName, Subscription) -> + lists:foreach( + fun({U, S}) when (U == LUser) and (S == LServer) -> ok; + ({U, S}) -> + push_roster_item(U, S, LUser, LServer, GroupName, Subscription) + end, get_group_users(Host, Group)). + +%% Get list of groups to which this group is displayed +displayed_to_groups(GroupName, LServer) -> + GroupsOpts = groups_with_opts(LServer), + lists:filter( + fun({_Group, Opts}) -> + lists:member(GroupName, proplists:get_value(displayed_groups, Opts, [])) + end, GroupsOpts). + +push_item(User, Server, From, Item) -> + %% It was + %% ejabberd_sm:route(jlib:make_jid("", "", ""), + %% jlib:make_jid(User, Server, "") + %% why? + ejabberd_sm:route(From, jlib:make_jid(User, Server, ""), + {xmlelement, "broadcast", [], + [{item, + Item#roster.jid, + Item#roster.subscription}]}), + Stanza = jlib:iq_to_xml( + #iq{type = set, xmlns = ?NS_ROSTER, + id = "push" ++ randoms:get_string(), + sub_el = [{xmlelement, "query", + [{"xmlns", ?NS_ROSTER}], + [item_to_xml(Item)]}]}), + lists:foreach( + fun(Resource) -> + JID = jlib:make_jid(User, Server, Resource), + ejabberd_router:route(JID, JID, Stanza) + end, ejabberd_sm:get_user_resources(User, Server)). + +push_roster_item(User, Server, ContactU, ContactS, GroupName, Subscription) -> + Item = #roster{usj = {User, Server, {ContactU, ContactS, ""}}, + us = {User, Server}, + jid = {ContactU, ContactS, ""}, + name = "", + subscription = Subscription, + ask = none, + groups = [GroupName]}, + push_item(User, Server, jlib:make_jid("", Server, ""), Item). + +item_to_xml(Item) -> + Attrs1 = [{"jid", jlib:jid_to_string(Item#roster.jid)}], + Attrs2 = case Item#roster.name of + "" -> + Attrs1; + Name -> + [{"name", Name} | Attrs1] + end, + Attrs3 = case Item#roster.subscription of + none -> + [{"subscription", "none"} | Attrs2]; + from -> + [{"subscription", "from"} | Attrs2]; + to -> + [{"subscription", "to"} | Attrs2]; + both -> + [{"subscription", "both"} | Attrs2]; + remove -> + [{"subscription", "remove"} | Attrs2] + end, + Attrs4 = case ask_to_pending(Item#roster.ask) of + out -> + [{"ask", "subscribe"} | Attrs3]; + both -> + [{"ask", "subscribe"} | Attrs3]; + _ -> + Attrs3 + end, + SubEls1 = lists:map(fun(G) -> + {xmlelement, "group", [], [{xmlcdata, G}]} + end, Item#roster.groups), + SubEls = SubEls1 ++ Item#roster.xs, + {xmlelement, "item", Attrs4, SubEls}. + +ask_to_pending(subscribe) -> out; +ask_to_pending(unsubscribe) -> none; +ask_to_pending(Ask) -> Ask. + +user_available(New) -> + LUser = New#jid.luser, + LServer = New#jid.lserver, + Resources = ejabberd_sm:get_user_resources(LUser, LServer), + ?DEBUG("user_available for ~p @ ~p (~p resources)", + [LUser, LServer, length(Resources)]), + case length(Resources) of + %% first session for this user + 1 -> + %% This is a simplification - we ignore he 'display' + %% property - @online@ is always reflective. + OnlineGroups = get_special_users_groups_online(LServer), + lists:foreach( + fun(OG) -> + ?DEBUG("user_available: pushing ~p @ ~p grp ~p", + [LUser, LServer, OG ]), + push_user_to_displayed(LUser, LServer, OG, LServer, both) + end, OnlineGroups); + _ -> + ok + end. + +unset_presence(LUser, LServer, Resource, Status) -> + Resources = ejabberd_sm:get_user_resources(LUser, LServer), + ?DEBUG("unset_presence for ~p @ ~p / ~p -> ~p (~p resources)", + [LUser, LServer, Resource, Status, length(Resources)]), + %% if user has no resources left... + case length(Resources) of + 0 -> + %% This is a simplification - we ignore he 'display' + %% property - @online@ is always reflective. + OnlineGroups = get_special_users_groups_online(LServer), + %% for each of these groups... + lists:foreach( + fun(OG) -> + %% Push removal of the old user to members of groups + %% where the group that this uwas members was displayed + push_user_to_displayed(LUser, LServer, OG, LServer, remove), + %% Push removal of members of groups that where + %% displayed to the group which thiuser has left + push_displayed_to_user(LUser, LServer, OG, LServer,remove) + end, OnlineGroups); + _ -> + ok + end. + +%%--------------------- +%% Web Admin +%%--------------------- + +webadmin_menu(Acc, _Host, Lang) -> + [{"shared-roster", ?T("Shared Roster Groups")} | Acc]. + +webadmin_page(_, Host, + #request{us = _US, + path = ["shared-roster"], + q = Query, + lang = Lang} = _Request) -> + Res = list_shared_roster_groups(Host, Query, Lang), + {stop, Res}; + +webadmin_page(_, Host, + #request{us = _US, + path = ["shared-roster", Group], + q = Query, + lang = Lang} = _Request) -> + Res = shared_roster_group(Host, Group, Query, Lang), + {stop, Res}; + +webadmin_page(Acc, _, _) -> Acc. + +list_shared_roster_groups(Host, Query, Lang) -> + Res = list_sr_groups_parse_query(Host, Query), + SRGroups = ?MODULE:list_groups(Host), + FGroups = + ?XAE("table", [], + [?XE("tbody", + lists:map( + fun(Group) -> + ?XE("tr", + [?XE("td", [?INPUT("checkbox", "selected", + Group)]), + ?XE("td", [?AC(Group ++ "/", Group)]) + ] + ) + end, lists:sort(SRGroups)) ++ + [?XE("tr", + [?X("td"), + ?XE("td", [?INPUT("text", "namenew", "")]), + ?XE("td", [?INPUTT("submit", "addnew", "Add New")]) + ] + )] + )]), + ?H1GL(?T("Shared Roster Groups"), "modsharedroster", "mod_shared_roster") ++ + case Res of + ok -> [?XREST("Submitted")]; + error -> [?XREST("Bad format")]; + nothing -> [] + end ++ + [?XAE("form", [{"action", ""}, {"method", "post"}], + [FGroups, + ?BR, + ?INPUTT("submit", "delete", "Delete Selected") + ]) + ]. + +list_sr_groups_parse_query(Host, Query) -> + case lists:keysearch("addnew", 1, Query) of + {value, _} -> + list_sr_groups_parse_addnew(Host, Query); + _ -> + case lists:keysearch("delete", 1, Query) of + {value, _} -> + list_sr_groups_parse_delete(Host, Query); + _ -> + nothing + end + end. + +list_sr_groups_parse_addnew(Host, Query) -> + case lists:keysearch("namenew", 1, Query) of + {value, {_, Group}} when Group /= "" -> + ?MODULE:create_group(Host, Group), + ok; + _ -> + error + end. + +list_sr_groups_parse_delete(Host, Query) -> + SRGroups = ?MODULE:list_groups(Host), + lists:foreach( + fun(Group) -> + case lists:member({"selected", Group}, Query) of + true -> + ?MODULE:delete_group(Host, Group); + _ -> + ok + end + end, SRGroups), + ok. + + +shared_roster_group(Host, Group, Query, Lang) -> + Res = shared_roster_group_parse_query(Host, Group, Query), + GroupOpts = ?MODULE:get_group_opts(Host, Group), + Name = get_opt(GroupOpts, name, ""), + Description = get_opt(GroupOpts, description, ""), + AllUsers = get_opt(GroupOpts, all_users, false), + OnlineUsers = get_opt(GroupOpts, online_users, false), + %%Disabled = false, + DisplayedGroups = get_opt(GroupOpts, displayed_groups, []), + Members = ?MODULE:get_group_explicit_users(Host, Group), + FMembers = + if + AllUsers -> + "@all@\n"; + true -> + [] + end ++ + if + OnlineUsers -> + "@online@\n"; + true -> + [] + end ++ + [[us_to_list(Member), $\n] || Member <- Members], + FDisplayedGroups = [[DG, $\n] || DG <- DisplayedGroups], + DescNL = length(ejabberd_regexp:split(Description, "\n")), + FGroup = + ?XAE("table", [{"class", "withtextareas"}], + [?XE("tbody", + [?XE("tr", + [?XCT("td", "Name:"), + ?XE("td", [?INPUT("text", "name", Name)]) + ] + ), + ?XE("tr", + [?XCT("td", "Description:"), + ?XE("td", [ + ?TEXTAREA("description", integer_to_list(lists:max([3, DescNL])), "20", Description) + ] + ) + ] + ), + ?XE("tr", + [?XCT("td", "Members:"), + ?XE("td", [ + ?TEXTAREA("members", integer_to_list(lists:max([3, length(FMembers)])), "20", FMembers) + ] + ) + ] + ), + ?XE("tr", + [?XCT("td", "Displayed Groups:"), + ?XE("td", [ + ?TEXTAREA("dispgroups", integer_to_list(lists:max([3, length(FDisplayedGroups)])), "20", FDisplayedGroups) + ] + ) + ] + )] + )]), + ?H1GL(?T("Shared Roster Groups"), "modsharedroster", "mod_shared_roster") ++ + [?XC("h2", ?T("Group ") ++ Group)] ++ + case Res of + ok -> [?XREST("Submitted")]; + error -> [?XREST("Bad format")]; + nothing -> [] + end ++ + [?XAE("form", [{"action", ""}, {"method", "post"}], + [FGroup, + ?BR, + ?INPUTT("submit", "submit", "Submit") + ]) + ]. + +shared_roster_group_parse_query(Host, Group, Query) -> + case lists:keysearch("submit", 1, Query) of + {value, _} -> + {value, {_, Name}} = lists:keysearch("name", 1, Query), + {value, {_, Description}} = lists:keysearch("description", 1, Query), + {value, {_, SMembers}} = lists:keysearch("members", 1, Query), + {value, {_, SDispGroups}} = lists:keysearch("dispgroups", 1, Query), + NameOpt = + if + Name == "" -> []; + true -> [{name, Name}] + end, + DescriptionOpt = + if + Description == "" -> []; + true -> [{description, Description}] + end, + DispGroups = string:tokens(SDispGroups, "\r\n"), + DispGroupsOpt = + if + DispGroups == [] -> []; + true -> [{displayed_groups, DispGroups}] + end, + + OldMembers = ?MODULE:get_group_explicit_users( + Host, Group), + SJIDs = string:tokens(SMembers, ", \r\n"), + NewMembers = + lists:foldl( + fun(_SJID, error) -> error; + (SJID, USs) -> + case SJID of + "@all@" -> + USs; + "@online@" -> + USs; + _ -> + case jlib:string_to_jid(SJID) of + JID when is_record(JID, jid) -> + [{JID#jid.luser, JID#jid.lserver} | USs]; + error -> + error + end + end + end, [], SJIDs), + AllUsersOpt = + case lists:member("@all@", SJIDs) of + true -> [{all_users, true}]; + false -> [] + end, + OnlineUsersOpt = + case lists:member("@online@", SJIDs) of + true -> [{online_users, true}]; + false -> [] + end, + + ?MODULE:set_group_opts( + Host, Group, + NameOpt ++ DispGroupsOpt ++ DescriptionOpt ++ AllUsersOpt ++ OnlineUsersOpt), + + if + NewMembers == error -> error; + true -> + AddedMembers = NewMembers -- OldMembers, + RemovedMembers = OldMembers -- NewMembers, + lists:foreach( + fun(US) -> + ?MODULE:remove_user_from_group( + Host, US, Group) + end, RemovedMembers), + lists:foreach( + fun(US) -> + ?MODULE:add_user_to_group( + Host, US, Group) + end, AddedMembers), + ok + end; + _ -> + nothing + end. + +%% Get the roster module for Server. +get_roster_mod(Server) -> + case lists:member(mod_roster_odbc, + gen_mod:loaded_modules(Server)) of + true -> mod_roster_odbc; + false -> mod_roster + end. + +get_opt(Opts, Opt, Default) -> + case lists:keysearch(Opt, 1, Opts) of + {value, {_, Val}} -> + Val; + false -> + Default + end. + +us_to_list({User, Server}) -> + jlib:jid_to_string({User, Server, ""}). + +split_grouphost(Host, Group) -> + case string:tokens(Group, "@") of + [GroupName, HostName] -> + {HostName, GroupName}; + [_] -> + {Host, Group} + end. + +make_jid_s(U, S) -> + ejabberd_odbc:escape( + jlib:jid_to_string( + jlib:jid_tolower( + jlib:make_jid(U, S, "")))). + +make_jid_s({U, S}) -> + make_jid_s(U, S). diff --git a/src/mod_vcard_ldap.erl b/src/mod_vcard_ldap.erl index 1d6f1202a..26a6f58c6 100644 --- a/src/mod_vcard_ldap.erl +++ b/src/mod_vcard_ldap.erl @@ -352,6 +352,7 @@ ldap_attribute_to_vcard(vCard, {"email", Value}) -> ldap_attribute_to_vcard(vCard, {"photo", Value}) -> {xmlelement,"PHOTO",[],[ + {xmlelement,"TYPE",[],[{xmlcdata,"image/jpeg"}]}, {xmlelement,"BINVAL",[],[{xmlcdata, jlib:encode_base64(Value)}]}]}; ldap_attribute_to_vcard(vCardN, {"family", Value}) -> diff --git a/src/mod_vcard_xupdate_odbc.erl b/src/mod_vcard_xupdate_odbc.erl new file mode 100644 index 000000000..b6a5adfb4 --- /dev/null +++ b/src/mod_vcard_xupdate_odbc.erl @@ -0,0 +1,128 @@ +%%%---------------------------------------------------------------------- +%%% File : mod_vcard_xupdate_odbc.erl +%%% Author : Igor Goryachev +%%% Purpose : Add avatar hash in presence on behalf of client (XEP-0153) +%%% Created : 9 Mar 2007 by Igor Goryachev +%%%---------------------------------------------------------------------- + +-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}. diff --git a/src/msgs/ca.msg b/src/msgs/ca.msg index 2742289a8..5df6fcf2a 100644 --- a/src/msgs/ca.msg +++ b/src/msgs/ca.msg @@ -20,11 +20,13 @@ {"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 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 voice requests","Permetre als visitants enviar peticions de veu"}. {"All Users","Tots els usuaris"}. {"Announcements","Anuncis"}. {"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"}. {"August","Agost"}. {"Backup","Guardar còpia de seguretat"}. @@ -33,15 +35,17 @@ {"Backup to File at ","Desar còpia de seguretat a fitxer en "}. {"Bad format","Format erroni"}. {"Birthday","Aniversari"}. -{"Change Password","Canviar password"}. -{"Change User Password","Canviar Password d'Usuari"}. +{"CAPTCHA web page","Pàgina web del CAPTCHA"}. +{"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 is created","La sala s'ha creat"}. {"Chatroom is destroyed","La sala s'ha destruït"}. {"Chatroom is started","La sala s'ha iniciat"}. {"Chatroom is stopped","La sala s'ha aturat"}. {"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 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ó"}. @@ -69,12 +73,14 @@ {"Description:","Descripció:"}. {"Disc only copy","Còpia sols en disc"}. {"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 to Text File","Exportar a fitxer de text"}. {"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 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 vCard module","Mòdul ejabberd vCard"}. {"ejabberd Web Admin","Web d'administració del ejabberd"}. @@ -89,14 +95,16 @@ {"Enter path to jabberd14 spool dir","Introdueix la ruta al directori de jabberd14 spools"}. {"Enter path to jabberd14 spool file","Introdueix ruta al fitxer jabberd14 spool"}. {"Enter path to text file","Introdueix ruta al fitxer de text"}. -{"Enter the text you see","Introdueix el textque 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, 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"}. {"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\"}]."}. +{"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 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"}. {"February","Febrer"}. {"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 Registered Users","Obtenir Número d'Usuaris Registrats"}. {"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"}. +{"Grant voice to this person?","Concedir veu a aquesta persona?"}. {"Group ","Grup "}. {"Groups","Grups"}. {"has been banned","Has sigut banejat"}. @@ -119,7 +128,8 @@ {"has been kicked","Has sigut expulsat"}. {" has set the subject to: "," ha posat l'assumpte: "}. {"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 File","Importar fitxer"}. {"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 jabberd14 Spool Files","Importar usuaris de jabberd14"}. {"Improper message type","Tipus de missatge incorrecte"}. -{"Incorrect password","Password incorrecte"}. +{"Incorrect password","Contrasenya incorrecta"}. {"Invalid affiliation: ~s","Afiliació invàlida: ~s"}. {"Invalid role: ~s","Rol invàlid: ~s"}. {"IP addresses","Adreça IP"}. @@ -143,7 +153,8 @@ {"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 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 ~s is invalid","El Jabber ID ~s no és vàlid"}. {"January","Gener"}. @@ -163,10 +174,10 @@ {"List of modules to start","Llista de mòduls a iniciar"}. {"Low level update script","Script d'actualització de baix nivell"}. {"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 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 public searchable","Crear una sala pública"}. {"March","Març"}. @@ -176,9 +187,11 @@ {"May","Maig"}. {"Membership is required to enter this room","Necessites ser membre d'aquesta sala per a poder entrar"}. {"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"}. {"Message body","Missatge"}. {"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"}. {"moderators only","només moderadors"}. {"Modified modules","Mòduls modificats"}. @@ -189,9 +202,11 @@ {"Name:","Nom:"}. {"Name","Nom"}. {"Never","Mai"}. +{"New Password:","Nova Contrasenya:"}. {"Nickname","Nickname"}. {"Nickname Registration at ","Registre del Nickname en "}. {"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 Data","No hi ha dades"}. {"Node ID","ID del Node"}. @@ -213,14 +228,16 @@ {"Offline Messages:","Missatges fora de línia:"}. {"Offline Messages","Missatges offline"}. {"OK","Acceptar"}. +{"Old Password:","Antiga contrasenya:"}. {"Online","Connectat"}. {"Online Users","Usuaris conectats"}. {"Online Users:","Usuaris en línia:"}. {"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 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 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"}. {"Options","Opcions"}. {"Organization Name","Nom de la organizació"}. @@ -230,10 +247,11 @@ {"Outgoing s2s Servers:","Servidors d'eixida de s2s"}. {"Owner privileges required","Es requerixen privilegis de propietari de la sala"}. {"Packet","Paquet"}. -{"Password ~b","Password ~b"}. -{"Password:","Password:"}. -{"Password","Password"}. -{"Password Verification","Verificació del Password"}. +{"Password ~b","Contrasenya ~b"}. +{"Password:","Contrasenya:"}. +{"Password","Contrasenya"}. +{"Password Verification:","Verificació de la Contrasenya:"}. +{"Password Verification","Verificació de la Contrasenya"}. {"Path to Dir","Ruta al directori"}. {"Path to File","Ruta al fitxer"}. {"Pending","Pendent"}. @@ -241,6 +259,7 @@ {"Persist items to storage","Persistir elements al guardar"}. {"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, 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"}. {"Port ~b","Port ~b"}. {"Port","Port"}. @@ -250,14 +269,16 @@ {"Publish-Subscribe","Publicar-subscriure't"}. {"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"}. -{"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 copy","Còpia en RAM"}. {"Raw","en format text"}. {"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"}. +{"Register a Jabber account","Registrar un compte Jabber"}. {"Registered Users:","Usuaris registrats:"}. {"Registered Users","Usuaris registrats"}. +{"Register","Registrar"}. {"Registration in mod_irc for ","Registre en mod_irc per a"}. {"Remote copy","Còpia remota"}. {"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"}. {"September","Setembre"}. {"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 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"}. @@ -301,6 +323,7 @@ {"Show Ordinary Table","Mostrar Taula Ordinaria"}. {"Shut Down Service","Apager el Servei"}. {"~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 event message type","Especifica el tipus de missatge d'event"}. {"Specify the publisher model","Especificar el model del publicant"}. @@ -325,9 +348,18 @@ {"Sunday","Diumenge"}. {"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"}. -{"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 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 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"}. @@ -335,6 +367,7 @@ {"Thursday","Dijous"}. {"Time","Data"}. {"Time delay","Temps de retard"}. +{"Too many CAPTCHA requests","Massa peticions de CAPTCHA"}. {"To","Per a"}. {"To ~s","A ~s"}. {"Traffic rate limit is exceeded","El llímit de tràfic ha sigut sobrepassat"}. @@ -343,8 +376,10 @@ {"Transactions Logged:","Transaccions registrades"}. {"Transactions Restarted:","Transaccions reiniciades"}. {"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"}. +{"Unregister a Jabber account","Anul·lar el registre d'un compte Jabber"}. +{"Unregister","Anul·lar el registre"}. {"Update ","Actualitzar"}. {"Update","Actualitzar"}. {"Update message of the day (don't send)","Actualitzar el missatge del dia (no enviar)"}. @@ -353,7 +388,9 @@ {"Update script","Script d'actualització"}. {"Uptime:","Temps en marxa"}. {"Use of STARTTLS required","És obligatori utilitzar STARTTLS"}. +{"User JID","JID del usuari "}. {"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 Last Activity","Última activitat d'usuari"}. {"Users","Usuaris"}. @@ -364,13 +401,21 @@ {"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 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"}. {"When to send the last published item","Quan s'ha enviat l'última publicació"}. {"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 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 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 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"}. diff --git a/src/msgs/ca.po b/src/msgs/ca.po index 1414cf0d5..412962bba 100644 --- a/src/msgs/ca.po +++ b/src/msgs/ca.po @@ -1,12 +1,19 @@ +# Jan, 2012. msgid "" msgstr "" "Project-Id-Version: 2.1.0-alpha\n" -"Last-Translator: Jan Kusanagi\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2012-04-22 00:19+0200\n" +"Last-Translator: JanKusanagi\n" +"Language-Team: American English \n" +"Language: en_US\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Language: Catalan (català)\n" "X-Additional-Translator: Vicent Alberola Canet\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Lokalize 1.4\n" #: ejabberd_c2s.erl:424 ejabberd_c2s.erl:727 msgid "Use of STARTTLS required" @@ -16,17 +23,19 @@ msgstr "És obligatori utilitzar STARTTLS" msgid "No resource provided" msgstr "Recurs no disponible" -#: ejabberd_c2s.erl:1149 +#: ejabberd_c2s.erl:1197 msgid "Replaced by new connection" msgstr "Reemplaçat per una nova connexió" -#: ejabberd_c2s.erl:1837 +#: ejabberd_c2s.erl:1885 msgid "Your active privacy list has denied the routing of this stanza." msgstr "" +"La teva llista de privacitat activa ha denegat l'encaminament d'aquesta " +"stanza." #: ejabberd_captcha.erl:96 ejabberd_captcha.erl:152 ejabberd_captcha.erl:178 msgid "Enter the text you see" -msgstr "Introdueix el textque veus" +msgstr "Introdueix el text que veus" #: ejabberd_captcha.erl:101 msgid "Your messages to ~s are being blocked. To unblock them, visit ~s" @@ -35,15 +44,15 @@ msgstr "" #: ejabberd_captcha.erl:134 msgid "If you don't see the CAPTCHA image here, visit the web page." -msgstr "" +msgstr "Si no veus la imatge CAPTCHA açí, visita la pàgina web." #: ejabberd_captcha.erl:146 msgid "CAPTCHA web page" -msgstr "" +msgstr "Pàgina web del CAPTCHA" #: ejabberd_captcha.erl:307 -msgid "The captcha is valid." -msgstr "El captcha es vàlid." +msgid "The CAPTCHA is valid." +msgstr "El CAPTCHA es vàlid." #: mod_adhoc.erl:95 mod_adhoc.erl:125 mod_adhoc.erl:143 mod_adhoc.erl:161 msgid "Commands" @@ -57,65 +66,68 @@ msgstr "Ping" msgid "Pong" msgstr "Pong" -#: mod_announce.erl:506 +#: mod_announce.erl:507 mod_announce_odbc.erl:499 msgid "Really delete message of the day?" msgstr "Segur que vols eliminar el missatge del dia?" -#: mod_announce.erl:514 mod_configure.erl:1083 mod_configure.erl:1128 +#: mod_announce.erl:515 mod_announce_odbc.erl:507 mod_configure.erl:1083 +#: mod_configure.erl:1128 msgid "Subject" msgstr "Assumpte" -#: mod_announce.erl:519 mod_configure.erl:1088 mod_configure.erl:1133 +#: mod_announce.erl:520 mod_announce_odbc.erl:512 mod_configure.erl:1088 +#: mod_configure.erl:1133 msgid "Message body" msgstr "Missatge" -#: mod_announce.erl:599 +#: mod_announce.erl:600 mod_announce_odbc.erl:592 msgid "No body provided for announce message" msgstr "No hi ha proveedor per al missatge anunci" -#: mod_announce.erl:634 +#: mod_announce.erl:635 mod_announce_odbc.erl:627 msgid "Announcements" msgstr "Anuncis" -#: mod_announce.erl:636 +#: mod_announce.erl:637 mod_announce_odbc.erl:629 msgid "Send announcement to all users" msgstr "Enviar anunci a tots els usuaris" -#: mod_announce.erl:638 +#: mod_announce.erl:639 mod_announce_odbc.erl:631 msgid "Send announcement to all users on all hosts" msgstr "Enviar anunci a tots els usuaris de tots els hosts" -#: mod_announce.erl:640 +#: mod_announce.erl:641 mod_announce_odbc.erl:633 msgid "Send announcement to all online users" msgstr "Enviar anunci a tots els usuaris connectats" -#: mod_announce.erl:642 mod_configure.erl:1078 mod_configure.erl:1123 +#: mod_announce.erl:643 mod_announce_odbc.erl:635 mod_configure.erl:1078 +#: mod_configure.erl:1123 msgid "Send announcement to all online users on all hosts" msgstr "Enviar anunci a tots els usuaris connectats a tots els hosts" -#: mod_announce.erl:644 +#: mod_announce.erl:645 mod_announce_odbc.erl:637 msgid "Set message of the day and send to online users" msgstr "Configurar el missatge del dia i enviar a tots els usuaris" -#: mod_announce.erl:646 +#: mod_announce.erl:647 mod_announce_odbc.erl:639 msgid "Set message of the day on all hosts and send to online users" msgstr "" "Escriure missatge del dia en tots els hosts i enviar-ho als usuaris " "connectats" -#: mod_announce.erl:648 +#: mod_announce.erl:649 mod_announce_odbc.erl:641 msgid "Update message of the day (don't send)" msgstr "Actualitzar el missatge del dia (no enviar)" -#: mod_announce.erl:650 +#: mod_announce.erl:651 mod_announce_odbc.erl:643 msgid "Update message of the day on all hosts (don't send)" msgstr "Actualitza el missatge del dia en tots els hosts (no enviar)" -#: mod_announce.erl:652 +#: mod_announce.erl:653 mod_announce_odbc.erl:645 msgid "Delete message of the day" msgstr "Eliminar el missatge del dia" -#: mod_announce.erl:654 +#: mod_announce.erl:655 mod_announce_odbc.erl:647 msgid "Delete message of the day on all hosts" msgstr "Elimina el missatge del dis de tots els hosts" @@ -124,7 +136,7 @@ msgstr "Elimina el missatge del dis de tots els hosts" msgid "Configuration" msgstr "Configuració" -#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1934 +#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1936 msgid "Database" msgstr "Base de dades" @@ -136,7 +148,7 @@ msgstr "Iniciar mòduls" msgid "Stop Modules" msgstr "Parar mòduls" -#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1935 +#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1937 msgid "Backup" msgstr "Guardar còpia de seguretat" @@ -165,7 +177,7 @@ msgid "Shut Down Service" msgstr "Apager el Servei" #: mod_configure.erl:145 mod_configure.erl:518 mod_configure.erl:1197 -#: web/ejabberd_web_admin.erl:1528 +#: web/ejabberd_web_admin.erl:1527 msgid "Add User" msgstr "Afegir usuari" @@ -180,11 +192,11 @@ msgstr "Finalitzar Sesió d'Usuari" #: mod_configure.erl:151 mod_configure.erl:521 mod_configure.erl:1243 #: mod_configure.erl:1255 msgid "Get User Password" -msgstr "Obtenir Password d'usuari" +msgstr "Obtenir Contrasenya d'usuari" #: mod_configure.erl:153 mod_configure.erl:522 msgid "Change User Password" -msgstr "Canviar Password d'Usuari" +msgstr "Canviar Contrasenya d'Usuari" #: mod_configure.erl:155 mod_configure.erl:523 mod_configure.erl:1272 msgid "Get User Last Login Time" @@ -217,7 +229,7 @@ msgid "User Management" msgstr "Gestió d'Usuaris" #: mod_configure.erl:500 web/ejabberd_web_admin.erl:1058 -#: web/ejabberd_web_admin.erl:1463 +#: web/ejabberd_web_admin.erl:1462 msgid "Online Users" msgstr "Usuaris conectats" @@ -229,15 +241,15 @@ msgstr "Tots els usuaris" msgid "Outgoing s2s Connections" msgstr "Connexions s2s d'eixida" -#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1905 +#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1907 msgid "Running Nodes" msgstr "Nodes funcionant" -#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1907 +#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1909 msgid "Stopped Nodes" msgstr "Nodes parats" -#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1951 +#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1953 msgid "Modules" msgstr "Mòduls" @@ -368,21 +380,21 @@ msgstr "Regles d'accés" #: mod_configure.erl:1200 mod_configure.erl:1222 mod_configure.erl:1234 #: mod_configure.erl:1246 mod_configure.erl:1258 mod_configure.erl:1275 -#: mod_configure.erl:1287 mod_configure.erl:1652 mod_configure.erl:1702 -#: mod_configure.erl:1723 mod_roster.erl:943 mod_roster_odbc.erl:1048 -#: mod_vcard.erl:466 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:442 +#: mod_configure.erl:1287 mod_configure.erl:1650 mod_configure.erl:1700 +#: mod_configure.erl:1721 mod_roster.erl:943 mod_roster_odbc.erl:1060 +#: mod_vcard.erl:472 mod_vcard_ldap.erl:554 mod_vcard_odbc.erl:448 msgid "Jabber ID" msgstr "ID Jabber" -#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1653 -#: mod_configure.erl:1865 mod_muc/mod_muc_room.erl:2970 mod_register.erl:235 -#: web/ejabberd_web_admin.erl:1521 +#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1651 +#: mod_configure.erl:1863 mod_muc/mod_muc_room.erl:3224 mod_register.erl:235 +#: web/ejabberd_web_admin.erl:1520 msgid "Password" -msgstr "Password" +msgstr "Contrasenya" #: mod_configure.erl:1210 msgid "Password Verification" -msgstr "Verificació del Password" +msgstr "Verificació de la Contrasenya" #: mod_configure.erl:1301 msgid "Number of registered users" @@ -392,83 +404,84 @@ msgstr "Número d'Usuaris Registrats" msgid "Number of online users" msgstr "Número d'usuaris connectats" -#: mod_configure.erl:1684 web/ejabberd_web_admin.erl:1589 -#: web/ejabberd_web_admin.erl:1741 +#: mod_configure.erl:1682 web/ejabberd_web_admin.erl:1588 +#: web/ejabberd_web_admin.erl:1743 msgid "Never" msgstr "Mai" -#: mod_configure.erl:1698 web/ejabberd_web_admin.erl:1602 -#: web/ejabberd_web_admin.erl:1754 +#: mod_configure.erl:1696 web/ejabberd_web_admin.erl:1601 +#: web/ejabberd_web_admin.erl:1756 msgid "Online" msgstr "Connectat" -#: mod_configure.erl:1703 +#: mod_configure.erl:1701 msgid "Last login" msgstr "Últim login" -#: mod_configure.erl:1724 +#: mod_configure.erl:1722 msgid "Roster size" msgstr "Tamany de la llista" -#: mod_configure.erl:1725 +#: mod_configure.erl:1723 msgid "IP addresses" msgstr "Adreça IP" -#: mod_configure.erl:1726 +#: mod_configure.erl:1724 msgid "Resources" msgstr "Recursos" -#: mod_configure.erl:1852 +#: mod_configure.erl:1850 msgid "Administration of " msgstr "Administració de " -#: mod_configure.erl:1855 +#: mod_configure.erl:1853 msgid "Action on user" msgstr "Acció en l'usuari" -#: mod_configure.erl:1859 +#: mod_configure.erl:1857 msgid "Edit Properties" msgstr "Editar propietats" -#: mod_configure.erl:1862 web/ejabberd_web_admin.erl:1767 +#: mod_configure.erl:1860 web/ejabberd_web_admin.erl:1769 msgid "Remove User" msgstr "Eliminar usuari" -#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:336 +#: mod_irc/mod_irc.erl:201 mod_irc/mod_irc_odbc.erl:196 +#: mod_muc/mod_muc.erl:336 mod_muc/mod_muc_odbc.erl:342 msgid "Access denied by service policy" msgstr "Accés denegat per la política del servei" -#: mod_irc/mod_irc.erl:400 +#: mod_irc/mod_irc.erl:401 mod_irc/mod_irc_odbc.erl:398 msgid "IRC Transport" msgstr "Transport a IRC" -#: mod_irc/mod_irc.erl:427 +#: mod_irc/mod_irc.erl:428 mod_irc/mod_irc_odbc.erl:425 msgid "ejabberd IRC module" msgstr "mòdul ejabberd IRC" -#: mod_irc/mod_irc.erl:558 +#: mod_irc/mod_irc.erl:559 mod_irc/mod_irc_odbc.erl:568 msgid "You need an x:data capable client to configure mod_irc settings" msgstr "" "Necessites un client amb suport x:data per a configurar les opcions de " "mod_irc" -#: mod_irc/mod_irc.erl:565 +#: mod_irc/mod_irc.erl:566 mod_irc/mod_irc_odbc.erl:575 msgid "Registration in mod_irc for " msgstr "Registre en mod_irc per a" -#: mod_irc/mod_irc.erl:570 +#: mod_irc/mod_irc.erl:571 mod_irc/mod_irc_odbc.erl:580 msgid "" "Enter username, encodings, ports and passwords you wish to use for " "connecting to IRC servers" msgstr "" "Introdueix el nom d'usuari, les codificacions de caràcters, els ports i " -"contrassenyes per a utilitzar al connectar als servidors de IRC " +"contrasenyes per a utilitzar al connectar als servidors de IRC" -#: mod_irc/mod_irc.erl:575 +#: mod_irc/mod_irc.erl:576 mod_irc/mod_irc_odbc.erl:585 msgid "IRC Username" msgstr "Nom d'usuari al IRC" -#: mod_irc/mod_irc.erl:585 +#: mod_irc/mod_irc.erl:586 mod_irc/mod_irc_odbc.erl:595 msgid "" "If you want to specify different ports, passwords, encodings for IRC " "servers, fill this list with values in format '{\"irc server\", \"encoding" @@ -477,10 +490,10 @@ msgid "" msgstr "" "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." +"\"codificació\", port, \"contrasenya\"}'. Aquest servei utilitza per " +"defecte la codificació \"~s\", port ~p, no contrasenya." -#: mod_irc/mod_irc.erl:597 +#: mod_irc/mod_irc.erl:598 mod_irc/mod_irc_odbc.erl:607 msgid "" "Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." @@ -488,35 +501,36 @@ msgstr "" "Exemple: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." -#: mod_irc/mod_irc.erl:602 +#: mod_irc/mod_irc.erl:603 mod_irc/mod_irc_odbc.erl:612 msgid "Connections parameters" msgstr "Paràmetres de connexió" -#: mod_irc/mod_irc.erl:727 +#: mod_irc/mod_irc.erl:728 mod_irc/mod_irc_odbc.erl:757 msgid "Join IRC channel" msgstr "Entra a canal d'IRC" -#: mod_irc/mod_irc.erl:731 +#: mod_irc/mod_irc.erl:732 mod_irc/mod_irc_odbc.erl:761 msgid "IRC channel (don't put the first #)" msgstr "Canal d'IRC (no posis la primera #)" -#: mod_irc/mod_irc.erl:736 +#: mod_irc/mod_irc.erl:737 mod_irc/mod_irc_odbc.erl:766 msgid "IRC server" msgstr "Servidor d'IRC" -#: mod_irc/mod_irc.erl:769 mod_irc/mod_irc.erl:773 +#: mod_irc/mod_irc.erl:770 mod_irc/mod_irc.erl:774 +#: mod_irc/mod_irc_odbc.erl:799 mod_irc/mod_irc_odbc.erl:803 msgid "Join the IRC channel here." msgstr "Entra al canal d'IRC aquí." -#: mod_irc/mod_irc.erl:777 +#: mod_irc/mod_irc.erl:778 mod_irc/mod_irc_odbc.erl:807 msgid "Join the IRC channel in this Jabber ID: ~s" msgstr "Entra al canal d'IRC en aquesta Jabber ID: ~s" -#: mod_irc/mod_irc.erl:862 +#: mod_irc/mod_irc.erl:863 mod_irc/mod_irc_odbc.erl:904 msgid "IRC settings" msgstr "Configuració d'IRC." -#: mod_irc/mod_irc.erl:867 +#: mod_irc/mod_irc.erl:868 mod_irc/mod_irc_odbc.erl:909 msgid "" "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 " @@ -526,74 +540,74 @@ msgstr "" "als servidors de IRC. Apreta \"Seguent\" per veure més caps per omplir. " "Apreta \"Completar\" per guardar la configuració. " -#: mod_irc/mod_irc.erl:873 +#: mod_irc/mod_irc.erl:874 mod_irc/mod_irc_odbc.erl:915 msgid "IRC username" msgstr "Nom d'usuari al IRC" -#: mod_irc/mod_irc.erl:922 +#: mod_irc/mod_irc.erl:923 mod_irc/mod_irc_odbc.erl:964 msgid "Password ~b" -msgstr "Password ~b" +msgstr "Contrasenya ~b" -#: mod_irc/mod_irc.erl:927 +#: mod_irc/mod_irc.erl:928 mod_irc/mod_irc_odbc.erl:969 msgid "Port ~b" msgstr "Port ~b" -#: mod_irc/mod_irc.erl:932 +#: mod_irc/mod_irc.erl:933 mod_irc/mod_irc_odbc.erl:974 msgid "Encoding for server ~b" msgstr "Codificació pel servidor ~b" -#: mod_irc/mod_irc.erl:941 +#: mod_irc/mod_irc.erl:942 mod_irc/mod_irc_odbc.erl:983 msgid "Server ~b" msgstr "Servidor ~b" -#: mod_muc/mod_muc.erl:449 +#: mod_muc/mod_muc.erl:449 mod_muc/mod_muc_odbc.erl:456 msgid "Only service administrators are allowed to send service messages" msgstr "" "Sols els administradors del servei tenen permís per a enviar missatges de " "servei" -#: mod_muc/mod_muc.erl:493 +#: mod_muc/mod_muc.erl:493 mod_muc/mod_muc_odbc.erl:500 msgid "Room creation is denied by service policy" msgstr "Se t'ha denegat el crear la sala per política del servei" -#: mod_muc/mod_muc.erl:500 +#: mod_muc/mod_muc.erl:500 mod_muc/mod_muc_odbc.erl:507 msgid "Conference room does not exist" msgstr "La sala de conferències no existeix" -#: mod_muc/mod_muc.erl:581 +#: mod_muc/mod_muc.erl:582 mod_muc/mod_muc_odbc.erl:595 msgid "Chatrooms" msgstr "Sales de xat" -#: mod_muc/mod_muc.erl:711 -#, fuzzy +#: mod_muc/mod_muc.erl:712 mod_muc/mod_muc_odbc.erl:729 msgid "You need a client that supports x:data to register the nickname" msgstr "" "Necessites un client amb suport x:data per a poder registrar el Nickname" -#: mod_muc/mod_muc.erl:717 +#: mod_muc/mod_muc.erl:718 mod_muc/mod_muc_odbc.erl:735 msgid "Nickname Registration at " msgstr "Registre del Nickname en " -#: mod_muc/mod_muc.erl:721 +#: mod_muc/mod_muc.erl:722 mod_muc/mod_muc_odbc.erl:739 msgid "Enter nickname you want to register" msgstr "Introdueix el nickname que vols registrar" -#: mod_muc/mod_muc.erl:722 mod_roster.erl:944 mod_roster_odbc.erl:1049 -#: mod_vcard.erl:358 mod_vcard.erl:471 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:447 +#: mod_muc/mod_muc.erl:723 mod_muc/mod_muc_odbc.erl:740 +#: mod_muc/mod_muc_room.erl:3810 mod_roster.erl:944 mod_roster_odbc.erl:1061 +#: mod_vcard.erl:364 mod_vcard.erl:477 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:453 msgid "Nickname" msgstr "Nickname" -#: mod_muc/mod_muc.erl:761 mod_muc/mod_muc_room.erl:933 -#: mod_muc/mod_muc_room.erl:1577 +#: mod_muc/mod_muc.erl:762 mod_muc/mod_muc_odbc.erl:784 +#: mod_muc/mod_muc_room.erl:1064 mod_muc/mod_muc_room.erl:1787 msgid "That nickname is registered by another person" msgstr "El nickname ja està registrat per una altra persona" -#: mod_muc/mod_muc.erl:787 +#: mod_muc/mod_muc.erl:788 mod_muc/mod_muc_odbc.erl:811 msgid "You must fill in field \"Nickname\" in the form" msgstr "Deus d'omplir el camp \"Nickname\" al formulari" -#: mod_muc/mod_muc.erl:807 +#: mod_muc/mod_muc.erl:808 mod_muc/mod_muc_odbc.erl:831 msgid "ejabberd MUC module" msgstr "mòdul ejabberd MUC" @@ -633,8 +647,8 @@ msgstr "Has sigut expulsat perquè el sistema s'ha apagat" msgid "is now known as" msgstr "ara es conegut com" -#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:689 -#: mod_muc/mod_muc_room.erl:2138 +#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:688 +#: mod_muc/mod_muc_room.erl:2393 msgid " has set the subject to: " msgstr " ha posat l'assumpte: " @@ -730,34 +744,50 @@ msgstr "Novembre" msgid "December" msgstr "Decembre" -#: mod_muc/mod_muc_log.erl:751 +#: mod_muc/mod_muc_log.erl:750 msgid "Room Configuration" msgstr "Configuració de la sala" -#: mod_muc/mod_muc_log.erl:760 +#: mod_muc/mod_muc_log.erl:759 msgid "Room Occupants" msgstr "Nombre d'ocupants" -#: mod_muc/mod_muc_room.erl:170 +#: mod_muc/mod_muc_room.erl:174 msgid "Traffic rate limit is exceeded" msgstr "El llímit de tràfic ha sigut sobrepassat" -#: mod_muc/mod_muc_room.erl:242 +#: mod_muc/mod_muc_room.erl:246 msgid "" "This participant is kicked from the room because he sent an error message" msgstr "" "Aquest participant ha sigut expulsat de la sala perque ha enviat un missatge " "d'error" -#: mod_muc/mod_muc_room.erl:251 +#: mod_muc/mod_muc_room.erl:255 msgid "It is not allowed to send private messages to the conference" -msgstr "No està permés l'enviament de missatges privats a la sala" +msgstr "No està permès l'enviament de missatges privats a la sala" -#: mod_muc/mod_muc_room.erl:296 +#: mod_muc/mod_muc_room.erl:332 +msgid "Please, wait for a while before sending new voice request" +msgstr "Si us plau, espera una mica abans d'enviar una nova petició de veu" + +#: mod_muc/mod_muc_room.erl:347 +msgid "Voice requests are disabled in this conference" +msgstr "Les peticions de veu es troben desactivades en aquesta conferència" + +#: mod_muc/mod_muc_room.erl:364 +msgid "Failed to extract JID from your voice request approval" +msgstr "No s'ha pogut extraure el JID de la teva aprovació de petició de veu" + +#: mod_muc/mod_muc_room.erl:393 +msgid "Only moderators can approve voice requests" +msgstr "Només els moderadors poden aprovar les peticions de veu" + +#: mod_muc/mod_muc_room.erl:408 msgid "Improper message type" msgstr "Tipus de missatge incorrecte" -#: mod_muc/mod_muc_room.erl:406 +#: mod_muc/mod_muc_room.erl:518 msgid "" "This participant is kicked from the room because he sent an error message to " "another participant" @@ -765,234 +795,267 @@ msgstr "" "Aquest participant ha sigut expulsat de la sala perque ha enviat un missatge " "erroni a un altre participant" -#: mod_muc/mod_muc_room.erl:419 +#: mod_muc/mod_muc_room.erl:531 msgid "It is not allowed to send private messages of type \"groupchat\"" msgstr "No està permés enviar missatges del tipus \"groupchat\"" -#: mod_muc/mod_muc_room.erl:431 mod_muc/mod_muc_room.erl:486 +#: mod_muc/mod_muc_room.erl:543 mod_muc/mod_muc_room.erl:611 msgid "Recipient is not in the conference room" msgstr "El receptor no està en la sala de conferència" -#: mod_muc/mod_muc_room.erl:451 mod_muc/mod_muc_room.erl:829 -#: mod_muc/mod_muc_room.erl:3609 -msgid "Only occupants are allowed to send messages to the conference" -msgstr "Sols els ocupants poden enviar missatges a la sala" - -#: mod_muc/mod_muc_room.erl:460 +#: mod_muc/mod_muc_room.erl:564 mod_muc/mod_muc_room.erl:585 msgid "It is not allowed to send private messages" msgstr "No està permés enviar missatges privats" -#: mod_muc/mod_muc_room.erl:509 +#: mod_muc/mod_muc_room.erl:576 mod_muc/mod_muc_room.erl:956 +#: mod_muc/mod_muc_room.erl:4040 +msgid "Only occupants are allowed to send messages to the conference" +msgstr "Sols els ocupants poden enviar missatges a la sala" + +#: mod_muc/mod_muc_room.erl:634 msgid "Only occupants are allowed to send queries to the conference" -msgstr "Sols els ocupants poden enviar solicituts a la sala" +msgstr "Sols els ocupants poden enviar sol·licituds a la sala" -#: mod_muc/mod_muc_room.erl:521 +#: mod_muc/mod_muc_room.erl:646 msgid "Queries to the conference members are not allowed in this room" -msgstr " En aquesta sala no es permeten solicituts als membres de la sala" +msgstr "" +" En aquesta sala no es permeten sol·licituds als membres de la conferència" -#: mod_muc/mod_muc_room.erl:805 +#: mod_muc/mod_muc_room.erl:932 msgid "" "Only moderators and participants are allowed to change the subject in this " "room" msgstr "" "Només els moderadors i participants poden canviar l'assumpte d'aquesta sala" -#: mod_muc/mod_muc_room.erl:810 +#: mod_muc/mod_muc_room.erl:937 msgid "Only moderators are allowed to change the subject in this room" msgstr "Només els moderadors poden canviar l'assumpte d'aquesta sala" -#: mod_muc/mod_muc_room.erl:820 +#: mod_muc/mod_muc_room.erl:947 msgid "Visitors are not allowed to send messages to all occupants" msgstr "Els visitants no poden enviar missatges a tots els ocupants" -#: mod_muc/mod_muc_room.erl:891 +#: mod_muc/mod_muc_room.erl:1021 msgid "" "This participant is kicked from the room because he sent an error presence" msgstr "" "Aquest participant ha sigut expulsat de la sala perque ha enviat un error de " "presencia" -#: mod_muc/mod_muc_room.erl:909 +#: mod_muc/mod_muc_room.erl:1040 msgid "Visitors are not allowed to change their nicknames in this room" msgstr "Els visitants no tenen permés canviar el seus Nicknames en esta sala" -#: mod_muc/mod_muc_room.erl:922 mod_muc/mod_muc_room.erl:1569 +#: mod_muc/mod_muc_room.erl:1053 mod_muc/mod_muc_room.erl:1779 msgid "That nickname is already in use by another occupant" msgstr "El Nickname està siguent utilitzat per una altra persona" -#: mod_muc/mod_muc_room.erl:1558 +#: mod_muc/mod_muc_room.erl:1768 msgid "You have been banned from this room" msgstr "Has sigut bloquejat en aquesta sala" -#: mod_muc/mod_muc_room.erl:1561 +#: mod_muc/mod_muc_room.erl:1771 msgid "Membership is required to enter this room" msgstr "Necessites ser membre d'aquesta sala per a poder entrar" -#: mod_muc/mod_muc_room.erl:1597 +#: mod_muc/mod_muc_room.erl:1807 msgid "This room is not anonymous" msgstr "Aquesta sala no és anònima" -#: mod_muc/mod_muc_room.erl:1623 +#: mod_muc/mod_muc_room.erl:1833 msgid "A password is required to enter this room" -msgstr "Es necessita password per a entrar en aquesta sala" +msgstr "Es necessita contrasenya per a entrar en aquesta sala" -#: mod_muc/mod_muc_room.erl:1645 mod_register.erl:246 +#: mod_muc/mod_muc_room.erl:1855 mod_register.erl:246 msgid "Too many CAPTCHA requests" -msgstr "" +msgstr "Massa peticions de CAPTCHA" -#: mod_muc/mod_muc_room.erl:1654 -msgid "Unable to generate a captcha" -msgstr "No s'ha pogut generar un captcha" +#: mod_muc/mod_muc_room.erl:1864 mod_register.erl:251 +msgid "Unable to generate a CAPTCHA" +msgstr "No s'ha pogut generar un CAPTCHA" -#: mod_muc/mod_muc_room.erl:1664 +#: mod_muc/mod_muc_room.erl:1874 msgid "Incorrect password" -msgstr "Password incorrecte" +msgstr "Contrasenya incorrecta" -#: mod_muc/mod_muc_room.erl:2193 +#: mod_muc/mod_muc_room.erl:2448 msgid "Administrator privileges required" msgstr "Es necessita tenir privilegis d'administrador" -#: mod_muc/mod_muc_room.erl:2208 +#: mod_muc/mod_muc_room.erl:2463 msgid "Moderator privileges required" msgstr "Es necessita tenir privilegis de moderador" -#: mod_muc/mod_muc_room.erl:2363 +#: mod_muc/mod_muc_room.erl:2619 msgid "Jabber ID ~s is invalid" msgstr "El Jabber ID ~s no és vàlid" -#: mod_muc/mod_muc_room.erl:2377 +#: mod_muc/mod_muc_room.erl:2633 msgid "Nickname ~s does not exist in the room" msgstr "El Nickname ~s no existeix a la sala" -#: mod_muc/mod_muc_room.erl:2403 mod_muc/mod_muc_room.erl:2797 +#: mod_muc/mod_muc_room.erl:2659 mod_muc/mod_muc_room.erl:3049 msgid "Invalid affiliation: ~s" msgstr "Afiliació invàlida: ~s" -#: mod_muc/mod_muc_room.erl:2460 +#: mod_muc/mod_muc_room.erl:2713 msgid "Invalid role: ~s" msgstr "Rol invàlid: ~s" -#: mod_muc/mod_muc_room.erl:2774 mod_muc/mod_muc_room.erl:2810 +#: mod_muc/mod_muc_room.erl:3026 mod_muc/mod_muc_room.erl:3062 msgid "Owner privileges required" msgstr "Es requerixen privilegis de propietari de la sala" -#: mod_muc/mod_muc_room.erl:2941 +#: mod_muc/mod_muc_room.erl:3195 msgid "Configuration of room ~s" msgstr "Configuració de la sala ~s" -#: mod_muc/mod_muc_room.erl:2946 +#: mod_muc/mod_muc_room.erl:3200 msgid "Room title" msgstr "Títol de la sala" -#: mod_muc/mod_muc_room.erl:2949 mod_muc/mod_muc_room.erl:3388 +#: mod_muc/mod_muc_room.erl:3203 mod_muc/mod_muc_room.erl:3692 msgid "Room description" msgstr "Descripció de la sala:" -#: mod_muc/mod_muc_room.erl:2956 +#: mod_muc/mod_muc_room.erl:3210 msgid "Make room persistent" msgstr "Crear una sala persistent" -#: mod_muc/mod_muc_room.erl:2961 +#: mod_muc/mod_muc_room.erl:3215 msgid "Make room public searchable" msgstr "Crear una sala pública" -#: mod_muc/mod_muc_room.erl:2964 +#: mod_muc/mod_muc_room.erl:3218 msgid "Make participants list public" msgstr "Crear una llista de participants pública" -#: mod_muc/mod_muc_room.erl:2967 +#: mod_muc/mod_muc_room.erl:3221 msgid "Make room password protected" -msgstr "Crear una sala amb password" +msgstr "Crear una sala amb contrasenya" -#: mod_muc/mod_muc_room.erl:2978 +#: mod_muc/mod_muc_room.erl:3232 msgid "Maximum Number of Occupants" msgstr "Número màxim d'ocupants" -#: mod_muc/mod_muc_room.erl:2985 +#: mod_muc/mod_muc_room.erl:3239 msgid "No limit" msgstr "Sense Llímit" -#: mod_muc/mod_muc_room.erl:2996 +#: mod_muc/mod_muc_room.erl:3250 msgid "Present real Jabber IDs to" msgstr "Presentar Jabber ID's reals a" -#: mod_muc/mod_muc_room.erl:3004 +#: mod_muc/mod_muc_room.erl:3258 mod_muc/mod_muc_room.erl:3292 msgid "moderators only" msgstr "només moderadors" -#: mod_muc/mod_muc_room.erl:3006 +#: mod_muc/mod_muc_room.erl:3260 mod_muc/mod_muc_room.erl:3294 msgid "anyone" msgstr "qualsevol" -#: mod_muc/mod_muc_room.erl:3008 +#: mod_muc/mod_muc_room.erl:3262 msgid "Make room members-only" msgstr "Crear una sala de \"només membres\"" -#: mod_muc/mod_muc_room.erl:3011 +#: mod_muc/mod_muc_room.erl:3265 msgid "Make room moderated" msgstr "Crear una sala moderada" -#: mod_muc/mod_muc_room.erl:3014 +#: mod_muc/mod_muc_room.erl:3268 msgid "Default users as participants" msgstr "Els usuaris són participants per defecte" -#: mod_muc/mod_muc_room.erl:3017 +#: mod_muc/mod_muc_room.erl:3271 msgid "Allow users to change the subject" msgstr "Permetre que els usuaris canviin el tema" -#: mod_muc/mod_muc_room.erl:3020 +#: mod_muc/mod_muc_room.erl:3274 msgid "Allow users to send private messages" msgstr "Permetre que els usuaris envien missatges privats" -#: mod_muc/mod_muc_room.erl:3023 +#: mod_muc/mod_muc_room.erl:3279 +msgid "Allow visitors to send private messages to" +msgstr "Permetre als visitants enviar missatges privats a" + +#: mod_muc/mod_muc_room.erl:3290 +msgid "nobody" +msgstr "ningú" + +#: mod_muc/mod_muc_room.erl:3296 msgid "Allow users to query other users" msgstr "Permetre que els usuaris fagen peticions a altres usuaris" -#: mod_muc/mod_muc_room.erl:3026 +#: mod_muc/mod_muc_room.erl:3299 msgid "Allow users to send invites" msgstr "Permetre que els usuaris envien invitacions" -#: mod_muc/mod_muc_room.erl:3029 +#: mod_muc/mod_muc_room.erl:3302 msgid "Allow visitors to send status text in presence updates" msgstr "" "Permetre als visitants enviar text d'estat en les actualitzacions de " "presència" -#: mod_muc/mod_muc_room.erl:3032 +#: mod_muc/mod_muc_room.erl:3305 msgid "Allow visitors to change nickname" msgstr "Permetre als visitants canviar el Nickname" -#: mod_muc/mod_muc_room.erl:3038 -msgid "Make room captcha protected" -msgstr "Crear una sala protegida per captcha" +#: mod_muc/mod_muc_room.erl:3308 +msgid "Allow visitors to send voice requests" +msgstr "Permetre als visitants enviar peticions de veu" -#: mod_muc/mod_muc_room.erl:3043 +#: mod_muc/mod_muc_room.erl:3311 +msgid "Minimum interval between voice requests (in seconds)" +msgstr "Interval mínim entre peticions de veu (en segons)" + +#: mod_muc/mod_muc_room.erl:3317 +msgid "Make room CAPTCHA protected" +msgstr "Crear una sala protegida per CAPTCHA" + +#: mod_muc/mod_muc_room.erl:3322 msgid "Exclude Jabber IDs from CAPTCHA challenge" -msgstr "" +msgstr "Excloure Jabber IDs de la comprovació CAPTCHA" -#: mod_muc/mod_muc_room.erl:3050 +#: mod_muc/mod_muc_room.erl:3329 msgid "Enable logging" msgstr "Habilitar el registre de la conversa" -#: mod_muc/mod_muc_room.erl:3058 +#: mod_muc/mod_muc_room.erl:3337 msgid "You need an x:data capable client to configure room" msgstr "Necessites un client amb suport x:data per a configurar la sala" -#: mod_muc/mod_muc_room.erl:3390 +#: mod_muc/mod_muc_room.erl:3694 msgid "Number of occupants" msgstr "Número d'ocupants" -#: mod_muc/mod_muc_room.erl:3446 +#: mod_muc/mod_muc_room.erl:3750 msgid "private, " msgstr "privat" -#: mod_muc/mod_muc_room.erl:3529 +#: mod_muc/mod_muc_room.erl:3799 +msgid "Voice request" +msgstr "Petició de veu" + +#: mod_muc/mod_muc_room.erl:3803 +msgid "Either approve or decline the voice request." +msgstr "Aprova o denega la petició de veu" + +#: mod_muc/mod_muc_room.erl:3809 +msgid "User JID" +msgstr "JID del usuari " + +#: mod_muc/mod_muc_room.erl:3811 +msgid "Grant voice to this person?" +msgstr "Concedir veu a aquesta persona?" + +#: mod_muc/mod_muc_room.erl:3960 msgid "~s invites you to the room ~s" msgstr "~s et convida a la sala ~s" -#: mod_muc/mod_muc_room.erl:3538 +#: mod_muc/mod_muc_room.erl:3969 msgid "the password is" -msgstr "el password és" +msgstr "la contrasenya és" #: mod_offline.erl:510 mod_offline_odbc.erl:352 msgid "" @@ -1004,14 +1067,15 @@ msgid "~s's Offline Messages Queue" msgstr "~s's cua de missatges offline" #: mod_offline.erl:563 mod_offline_odbc.erl:411 mod_roster.erl:987 -#: mod_roster_odbc.erl:1092 mod_shared_roster.erl:896 -#: mod_shared_roster.erl:1005 web/ejabberd_web_admin.erl:833 +#: mod_roster_odbc.erl:1104 mod_shared_roster.erl:901 +#: mod_shared_roster.erl:1010 mod_shared_roster_odbc.erl:930 +#: mod_shared_roster_odbc.erl:1039 web/ejabberd_web_admin.erl:833 #: web/ejabberd_web_admin.erl:874 web/ejabberd_web_admin.erl:942 #: web/ejabberd_web_admin.erl:978 web/ejabberd_web_admin.erl:1019 -#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1758 -#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1961 -#: web/ejabberd_web_admin.erl:2030 web/ejabberd_web_admin.erl:2134 -#: web/ejabberd_web_admin.erl:2159 web/ejabberd_web_admin.erl:2247 +#: web/ejabberd_web_admin.erl:1508 web/ejabberd_web_admin.erl:1760 +#: web/ejabberd_web_admin.erl:1931 web/ejabberd_web_admin.erl:1963 +#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2135 +#: web/ejabberd_web_admin.erl:2160 web/ejabberd_web_admin.erl:2248 msgid "Submitted" msgstr "Enviat" @@ -1031,8 +1095,9 @@ msgstr "Per a" msgid "Packet" msgstr "Paquet" -#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:903 -#: web/ejabberd_web_admin.erl:882 web/ejabberd_web_admin.erl:986 +#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:908 +#: mod_shared_roster_odbc.erl:937 web/ejabberd_web_admin.erl:882 +#: web/ejabberd_web_admin.erl:986 msgid "Delete Selected" msgstr "Eliminar els seleccionats" @@ -1048,253 +1113,249 @@ msgstr "Eliminar tots els missatges offline" msgid "ejabberd SOCKS5 Bytestreams module" msgstr "mòdul ejabberd SOCKS5 Bytestreams" -#: mod_pubsub/mod_pubsub.erl:1119 mod_pubsub/mod_pubsub_odbc.erl:928 +#: mod_pubsub/mod_pubsub.erl:1120 mod_pubsub/mod_pubsub_odbc.erl:929 msgid "Publish-Subscribe" msgstr "Publicar-subscriure't" -#: mod_pubsub/mod_pubsub.erl:1213 mod_pubsub/mod_pubsub_odbc.erl:1024 +#: mod_pubsub/mod_pubsub.erl:1214 mod_pubsub/mod_pubsub_odbc.erl:1025 msgid "ejabberd Publish-Subscribe module" -msgstr "Mòdul ejannerd Publicar-Subscriure" +msgstr "Mòdul ejabberd Publicar-Subscriure" -#: mod_pubsub/mod_pubsub.erl:1496 mod_pubsub/mod_pubsub_odbc.erl:1311 +#: mod_pubsub/mod_pubsub.erl:1497 mod_pubsub/mod_pubsub_odbc.erl:1312 msgid "PubSub subscriber request" msgstr "Petició de subscriptor PubSub" -#: mod_pubsub/mod_pubsub.erl:1498 mod_pubsub/mod_pubsub_odbc.erl:1313 +#: mod_pubsub/mod_pubsub.erl:1499 mod_pubsub/mod_pubsub_odbc.erl:1314 msgid "Choose whether to approve this entity's subscription." msgstr "Tria si aprova aquesta entitat de subscripció" -#: mod_pubsub/mod_pubsub.erl:1504 mod_pubsub/mod_pubsub_odbc.erl:1319 +#: mod_pubsub/mod_pubsub.erl:1505 mod_pubsub/mod_pubsub_odbc.erl:1320 msgid "Node ID" msgstr "ID del Node" -#: mod_pubsub/mod_pubsub.erl:1509 mod_pubsub/mod_pubsub_odbc.erl:1324 +#: mod_pubsub/mod_pubsub.erl:1510 mod_pubsub/mod_pubsub_odbc.erl:1325 msgid "Subscriber Address" msgstr "Adreça del Subscriptor" -#: mod_pubsub/mod_pubsub.erl:1515 mod_pubsub/mod_pubsub_odbc.erl:1330 +#: mod_pubsub/mod_pubsub.erl:1516 mod_pubsub/mod_pubsub_odbc.erl:1331 msgid "Allow this Jabber ID to subscribe to this pubsub node?" msgstr "Permetre que aquesta Jabber ID es puga subscriure a aquest node pubsub" -#: mod_pubsub/mod_pubsub.erl:3416 mod_pubsub/mod_pubsub_odbc.erl:3229 +#: mod_pubsub/mod_pubsub.erl:3474 mod_pubsub/mod_pubsub_odbc.erl:3287 msgid "Deliver payloads with event notifications" msgstr "Enviar payloads junt a les notificacions d'events" -#: mod_pubsub/mod_pubsub.erl:3417 mod_pubsub/mod_pubsub_odbc.erl:3230 +#: mod_pubsub/mod_pubsub.erl:3475 mod_pubsub/mod_pubsub_odbc.erl:3288 msgid "Deliver event notifications" msgstr "Entrega de notificacions d'events" -#: mod_pubsub/mod_pubsub.erl:3418 mod_pubsub/mod_pubsub_odbc.erl:3231 +#: mod_pubsub/mod_pubsub.erl:3476 mod_pubsub/mod_pubsub_odbc.erl:3289 msgid "Notify subscribers when the node configuration changes" msgstr "Notificar subscriptors quan canvia la configuració del node" -#: mod_pubsub/mod_pubsub.erl:3419 mod_pubsub/mod_pubsub_odbc.erl:3232 +#: mod_pubsub/mod_pubsub.erl:3477 mod_pubsub/mod_pubsub_odbc.erl:3290 msgid "Notify subscribers when the node is deleted" msgstr "Notificar subscriptors quan el node és eliminat" -#: mod_pubsub/mod_pubsub.erl:3420 mod_pubsub/mod_pubsub_odbc.erl:3233 +#: mod_pubsub/mod_pubsub.erl:3478 mod_pubsub/mod_pubsub_odbc.erl:3291 msgid "Notify subscribers when items are removed from the node" msgstr "Notificar subscriptors quan els elements són eliminats del node" -#: mod_pubsub/mod_pubsub.erl:3421 mod_pubsub/mod_pubsub_odbc.erl:3234 +#: mod_pubsub/mod_pubsub.erl:3479 mod_pubsub/mod_pubsub_odbc.erl:3292 msgid "Persist items to storage" msgstr "Persistir elements al guardar" -#: mod_pubsub/mod_pubsub.erl:3422 mod_pubsub/mod_pubsub_odbc.erl:3235 +#: mod_pubsub/mod_pubsub.erl:3480 mod_pubsub/mod_pubsub_odbc.erl:3293 msgid "A friendly name for the node" msgstr "Un nom per al node" -#: mod_pubsub/mod_pubsub.erl:3423 mod_pubsub/mod_pubsub_odbc.erl:3236 +#: mod_pubsub/mod_pubsub.erl:3481 mod_pubsub/mod_pubsub_odbc.erl:3294 msgid "Max # of items to persist" msgstr "Màxim # d'elements que persistixen" -#: mod_pubsub/mod_pubsub.erl:3424 mod_pubsub/mod_pubsub_odbc.erl:3237 +#: mod_pubsub/mod_pubsub.erl:3482 mod_pubsub/mod_pubsub_odbc.erl:3295 msgid "Whether to allow subscriptions" msgstr "Permetre subscripcions" -#: mod_pubsub/mod_pubsub.erl:3425 mod_pubsub/mod_pubsub_odbc.erl:3238 +#: mod_pubsub/mod_pubsub.erl:3483 mod_pubsub/mod_pubsub_odbc.erl:3296 msgid "Specify the access model" msgstr "Especificar el model d'accés" -#: mod_pubsub/mod_pubsub.erl:3428 mod_pubsub/mod_pubsub_odbc.erl:3241 +#: mod_pubsub/mod_pubsub.erl:3486 mod_pubsub/mod_pubsub_odbc.erl:3299 msgid "Roster groups allowed to subscribe" msgstr "Llista de grups que tenen permés subscriures" -#: mod_pubsub/mod_pubsub.erl:3429 mod_pubsub/mod_pubsub_odbc.erl:3242 +#: mod_pubsub/mod_pubsub.erl:3487 mod_pubsub/mod_pubsub_odbc.erl:3300 msgid "Specify the publisher model" msgstr "Especificar el model del publicant" -#: mod_pubsub/mod_pubsub.erl:3431 mod_pubsub/mod_pubsub_odbc.erl:3244 +#: mod_pubsub/mod_pubsub.erl:3489 mod_pubsub/mod_pubsub_odbc.erl:3302 msgid "Purge all items when the relevant publisher goes offline" msgstr "Eliminar tots els elements quan el publicant relevant es desconnecti" -#: mod_pubsub/mod_pubsub.erl:3432 mod_pubsub/mod_pubsub_odbc.erl:3245 +#: mod_pubsub/mod_pubsub.erl:3490 mod_pubsub/mod_pubsub_odbc.erl:3303 msgid "Specify the event message type" msgstr "Especifica el tipus de missatge d'event" -#: mod_pubsub/mod_pubsub.erl:3434 mod_pubsub/mod_pubsub_odbc.erl:3247 +#: mod_pubsub/mod_pubsub.erl:3492 mod_pubsub/mod_pubsub_odbc.erl:3305 msgid "Max payload size in bytes" msgstr "Màxim tamany del payload en bytes" -#: mod_pubsub/mod_pubsub.erl:3435 mod_pubsub/mod_pubsub_odbc.erl:3248 +#: mod_pubsub/mod_pubsub.erl:3493 mod_pubsub/mod_pubsub_odbc.erl:3306 msgid "When to send the last published item" msgstr "Quan s'ha enviat l'última publicació" -#: mod_pubsub/mod_pubsub.erl:3437 mod_pubsub/mod_pubsub_odbc.erl:3250 +#: mod_pubsub/mod_pubsub.erl:3495 mod_pubsub/mod_pubsub_odbc.erl:3308 msgid "Only deliver notifications to available users" msgstr "Sols enviar notificacions als usuaris disponibles" -#: mod_pubsub/mod_pubsub.erl:3438 mod_pubsub/mod_pubsub_odbc.erl:3251 +#: mod_pubsub/mod_pubsub.erl:3496 mod_pubsub/mod_pubsub_odbc.erl:3309 msgid "The collections with which a node is affiliated" msgstr "Les col.leccions amb les que un node està afiliat" #: mod_register.erl:193 msgid "The CAPTCHA verification has failed" -msgstr "" +msgstr "La verificació CAPTCHA ha fallat" #: mod_register.erl:220 -#, fuzzy msgid "You need a client that supports x:data and CAPTCHA to register" msgstr "" -"Necessites un client amb suport x:data per a poder registrar el Nickname" +"Necessites un client amb suport x:data i de CAPTCHA para poder registrar-te" #: mod_register.erl:226 mod_register.erl:265 msgid "Choose a username and password to register with this server" -msgstr "Tria nom d'usuari i password per a registrar-te en aquest servidor" +msgstr "Tria nom d'usuari i contrasenya per a registrar-te en aquest servidor" -#: mod_register.erl:230 mod_vcard.erl:358 mod_vcard_odbc.erl:336 -#: web/ejabberd_web_admin.erl:1516 web/ejabberd_web_admin.erl:1573 +#: mod_register.erl:230 mod_vcard.erl:364 mod_vcard_odbc.erl:342 +#: web/ejabberd_web_admin.erl:1515 web/ejabberd_web_admin.erl:1572 msgid "User" msgstr "Usuari" -#: mod_register.erl:251 -#, fuzzy -msgid "Unable to generate a CAPTCHA" -msgstr "No s'ha pogut generar un captcha" - #: mod_register.erl:316 mod_register.erl:361 -#, fuzzy msgid "The password is too weak" -msgstr "el password és" +msgstr "La contrasenya és massa simple" #: mod_register.erl:365 msgid "Users are not allowed to register accounts so quickly" msgstr "Els usuaris no tenen permís per a crear comptes tan depresa" -#: mod_roster.erl:938 mod_roster_odbc.erl:1043 web/ejabberd_web_admin.erl:1699 -#: web/ejabberd_web_admin.erl:1884 web/ejabberd_web_admin.erl:1895 -#: web/ejabberd_web_admin.erl:2218 +#: mod_roster.erl:938 mod_roster_odbc.erl:1055 web/ejabberd_web_admin.erl:1701 +#: web/ejabberd_web_admin.erl:1886 web/ejabberd_web_admin.erl:1897 +#: web/ejabberd_web_admin.erl:2219 msgid "None" msgstr "Cap" -#: mod_roster.erl:945 mod_roster_odbc.erl:1050 +#: mod_roster.erl:945 mod_roster_odbc.erl:1062 msgid "Subscription" msgstr "Subscripció" -#: mod_roster.erl:946 mod_roster_odbc.erl:1051 +#: mod_roster.erl:946 mod_roster_odbc.erl:1063 msgid "Pending" msgstr "Pendent" -#: mod_roster.erl:947 mod_roster_odbc.erl:1052 +#: mod_roster.erl:947 mod_roster_odbc.erl:1064 msgid "Groups" msgstr "Grups" -#: mod_roster.erl:974 mod_roster_odbc.erl:1079 +#: mod_roster.erl:974 mod_roster_odbc.erl:1091 msgid "Validate" msgstr "Validar" -#: mod_roster.erl:982 mod_roster_odbc.erl:1087 +#: mod_roster.erl:982 mod_roster_odbc.erl:1099 msgid "Remove" msgstr "Borrar" -#: mod_roster.erl:985 mod_roster_odbc.erl:1090 +#: mod_roster.erl:985 mod_roster_odbc.erl:1102 msgid "Roster of " msgstr "Llista de contactes de " -#: mod_roster.erl:988 mod_roster_odbc.erl:1093 mod_shared_roster.erl:897 -#: mod_shared_roster.erl:1006 web/ejabberd_web_admin.erl:834 +#: mod_roster.erl:988 mod_roster_odbc.erl:1105 mod_shared_roster.erl:902 +#: mod_shared_roster.erl:1011 mod_shared_roster_odbc.erl:931 +#: mod_shared_roster_odbc.erl:1040 web/ejabberd_web_admin.erl:834 #: web/ejabberd_web_admin.erl:875 web/ejabberd_web_admin.erl:943 #: web/ejabberd_web_admin.erl:979 web/ejabberd_web_admin.erl:1020 -#: web/ejabberd_web_admin.erl:1510 web/ejabberd_web_admin.erl:1759 -#: web/ejabberd_web_admin.erl:1930 web/ejabberd_web_admin.erl:2135 -#: web/ejabberd_web_admin.erl:2160 +#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1761 +#: web/ejabberd_web_admin.erl:1932 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2161 msgid "Bad format" msgstr "Format erroni" -#: mod_roster.erl:995 mod_roster_odbc.erl:1100 +#: mod_roster.erl:995 mod_roster_odbc.erl:1112 msgid "Add Jabber ID" msgstr "Afegir Jabber ID" -#: mod_roster.erl:1094 mod_roster_odbc.erl:1199 +#: mod_roster.erl:1094 mod_roster_odbc.erl:1211 msgid "Roster" msgstr "Llista de contactes" -#: mod_shared_roster.erl:852 mod_shared_roster.erl:894 -#: mod_shared_roster.erl:1002 +#: mod_shared_roster.erl:857 mod_shared_roster.erl:899 +#: mod_shared_roster.erl:1007 mod_shared_roster_odbc.erl:886 +#: mod_shared_roster_odbc.erl:928 mod_shared_roster_odbc.erl:1036 msgid "Shared Roster Groups" msgstr "Grups de contactes compartits" -#: mod_shared_roster.erl:890 web/ejabberd_web_admin.erl:1366 -#: web/ejabberd_web_admin.erl:2460 +#: mod_shared_roster.erl:895 mod_shared_roster_odbc.erl:924 +#: web/ejabberd_web_admin.erl:1365 web/ejabberd_web_admin.erl:2461 msgid "Add New" msgstr "Afegir nou" -#: mod_shared_roster.erl:973 +#: mod_shared_roster.erl:978 mod_shared_roster_odbc.erl:1007 msgid "Name:" msgstr "Nom:" -#: mod_shared_roster.erl:978 +#: mod_shared_roster.erl:983 mod_shared_roster_odbc.erl:1012 msgid "Description:" msgstr "Descripció:" -#: mod_shared_roster.erl:986 +#: mod_shared_roster.erl:991 mod_shared_roster_odbc.erl:1020 msgid "Members:" msgstr "Membre:" -#: mod_shared_roster.erl:994 +#: mod_shared_roster.erl:999 mod_shared_roster_odbc.erl:1028 msgid "Displayed Groups:" msgstr "Mostrar grups:" -#: mod_shared_roster.erl:1003 +#: mod_shared_roster.erl:1008 mod_shared_roster_odbc.erl:1037 msgid "Group " msgstr "Grup " -#: mod_shared_roster.erl:1012 web/ejabberd_web_admin.erl:840 -#: web/ejabberd_web_admin.erl:884 web/ejabberd_web_admin.erl:949 -#: web/ejabberd_web_admin.erl:1026 web/ejabberd_web_admin.erl:2015 +#: mod_shared_roster.erl:1017 mod_shared_roster_odbc.erl:1046 +#: web/ejabberd_web_admin.erl:840 web/ejabberd_web_admin.erl:884 +#: web/ejabberd_web_admin.erl:949 web/ejabberd_web_admin.erl:1026 +#: web/ejabberd_web_admin.erl:2017 msgid "Submit" msgstr "Enviar" -#: mod_vcard.erl:165 mod_vcard_ldap.erl:237 mod_vcard_odbc.erl:129 +#: mod_vcard.erl:165 mod_vcard_ldap.erl:238 mod_vcard_odbc.erl:129 msgid "Erlang Jabber Server" msgstr "Servidor Erlang Jabber" -#: mod_vcard.erl:358 mod_vcard.erl:472 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:448 +#: mod_vcard.erl:364 mod_vcard.erl:478 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:454 msgid "Birthday" msgstr "Aniversari" -#: mod_vcard.erl:358 mod_vcard.erl:474 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:450 +#: mod_vcard.erl:364 mod_vcard.erl:480 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:456 msgid "City" msgstr "Ciutat" -#: mod_vcard.erl:358 mod_vcard.erl:473 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:449 +#: mod_vcard.erl:364 mod_vcard.erl:479 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:455 msgid "Country" msgstr "Pais" -#: mod_vcard.erl:358 mod_vcard.erl:475 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:451 +#: mod_vcard.erl:364 mod_vcard.erl:481 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:457 msgid "Email" msgstr "Email" -#: mod_vcard.erl:358 mod_vcard.erl:470 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:446 +#: mod_vcard.erl:364 mod_vcard.erl:476 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:452 msgid "Family Name" msgstr "Cognom" -#: mod_vcard.erl:358 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_odbc.erl:342 msgid "" "Fill in the form to search for any matching Jabber User (Add * to the end of " "field to match substring)" @@ -1302,52 +1363,52 @@ msgstr "" "Emplena el formulari per a buscar usuaris Jabber. Afegix * al final d'un " "camp per a buscar subcadenes." -#: mod_vcard.erl:358 mod_vcard.erl:467 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:443 +#: mod_vcard.erl:364 mod_vcard.erl:473 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:449 msgid "Full Name" msgstr "Nom complet" -#: mod_vcard.erl:358 mod_vcard.erl:469 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:445 +#: mod_vcard.erl:364 mod_vcard.erl:475 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:451 msgid "Middle Name" msgstr "Segon nom" -#: mod_vcard.erl:358 mod_vcard.erl:468 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:444 web/ejabberd_web_admin.erl:2004 +#: mod_vcard.erl:364 mod_vcard.erl:474 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:450 web/ejabberd_web_admin.erl:2006 msgid "Name" msgstr "Nom" -#: mod_vcard.erl:358 mod_vcard.erl:476 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:452 +#: mod_vcard.erl:364 mod_vcard.erl:482 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:458 msgid "Organization Name" msgstr "Nom de la organizació" -#: mod_vcard.erl:358 mod_vcard.erl:477 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:453 +#: mod_vcard.erl:364 mod_vcard.erl:483 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:459 msgid "Organization Unit" msgstr "Unitat de la organizació" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "Search users in " msgstr "Cerca usuaris en " -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "You need an x:data capable client to search" -msgstr "Necesites un client amb suport x:data per a poder buscar" +msgstr "Necessites un client amb suport x:data per a poder buscar" -#: mod_vcard.erl:383 mod_vcard_ldap.erl:483 mod_vcard_odbc.erl:361 +#: mod_vcard.erl:389 mod_vcard_ldap.erl:487 mod_vcard_odbc.erl:367 msgid "vCard User Search" msgstr "Recerca de vCard d'usuari" -#: mod_vcard.erl:439 mod_vcard_ldap.erl:537 mod_vcard_odbc.erl:415 +#: mod_vcard.erl:445 mod_vcard_ldap.erl:541 mod_vcard_odbc.erl:421 msgid "ejabberd vCard module" msgstr "Mòdul ejabberd vCard" -#: mod_vcard.erl:463 mod_vcard_ldap.erl:547 mod_vcard_odbc.erl:439 +#: mod_vcard.erl:469 mod_vcard_ldap.erl:551 mod_vcard_odbc.erl:445 msgid "Search Results for " msgstr "Resultat de la búsqueda" -#: mod_vcard_ldap.erl:458 +#: mod_vcard_ldap.erl:462 msgid "Fill in fields to search for any matching Jabber User" msgstr "Emplena camps per a buscar usuaris Jabber que concorden" @@ -1408,7 +1469,7 @@ msgstr "Mostrar Taula Ordinaria" msgid "Show Integral Table" msgstr "Mostrar Taula Integral" -#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1937 +#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1939 msgid "Statistics" msgstr "Estadístiques" @@ -1420,116 +1481,116 @@ msgstr "No Trobat" msgid "Node not found" msgstr "Node no trobat" -#: web/ejabberd_web_admin.erl:1461 +#: web/ejabberd_web_admin.erl:1460 msgid "Host" msgstr "Host" -#: web/ejabberd_web_admin.erl:1462 +#: web/ejabberd_web_admin.erl:1461 msgid "Registered Users" msgstr "Usuaris registrats" -#: web/ejabberd_web_admin.erl:1574 +#: web/ejabberd_web_admin.erl:1573 msgid "Offline Messages" msgstr "Missatges offline" -#: web/ejabberd_web_admin.erl:1575 web/ejabberd_web_admin.erl:1765 +#: web/ejabberd_web_admin.erl:1574 web/ejabberd_web_admin.erl:1767 msgid "Last Activity" msgstr "Última activitat" -#: web/ejabberd_web_admin.erl:1657 web/ejabberd_web_admin.erl:1673 +#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 msgid "Registered Users:" msgstr "Usuaris registrats:" -#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 -#: web/ejabberd_web_admin.erl:2191 +#: web/ejabberd_web_admin.erl:1661 web/ejabberd_web_admin.erl:1677 +#: web/ejabberd_web_admin.erl:2192 msgid "Online Users:" msgstr "Usuaris en línia:" -#: web/ejabberd_web_admin.erl:1661 +#: web/ejabberd_web_admin.erl:1663 msgid "Outgoing s2s Connections:" msgstr "Connexions d'eixida s2s" -#: web/ejabberd_web_admin.erl:1663 +#: web/ejabberd_web_admin.erl:1665 msgid "Outgoing s2s Servers:" msgstr "Servidors d'eixida de s2s" -#: web/ejabberd_web_admin.erl:1732 web/mod_register_web.erl:175 +#: web/ejabberd_web_admin.erl:1734 web/mod_register_web.erl:175 #: web/mod_register_web.erl:372 web/mod_register_web.erl:381 #: web/mod_register_web.erl:411 msgid "Change Password" -msgstr "Canviar password" +msgstr "Canviar Contrasenya" -#: web/ejabberd_web_admin.erl:1756 +#: web/ejabberd_web_admin.erl:1758 msgid "User " msgstr "Usuari " -#: web/ejabberd_web_admin.erl:1763 +#: web/ejabberd_web_admin.erl:1765 msgid "Connected Resources:" msgstr "Recursos connectats:" -#: web/ejabberd_web_admin.erl:1764 web/mod_register_web.erl:227 +#: web/ejabberd_web_admin.erl:1766 web/mod_register_web.erl:227 #: web/mod_register_web.erl:519 msgid "Password:" -msgstr "Password:" +msgstr "Contrasenya:" -#: web/ejabberd_web_admin.erl:1826 +#: web/ejabberd_web_admin.erl:1828 msgid "No Data" msgstr "No hi ha dades" -#: web/ejabberd_web_admin.erl:1904 +#: web/ejabberd_web_admin.erl:1906 msgid "Nodes" msgstr "Nodes" -#: web/ejabberd_web_admin.erl:1927 web/ejabberd_web_admin.erl:1949 +#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1951 msgid "Node " msgstr "Node " -#: web/ejabberd_web_admin.erl:1936 +#: web/ejabberd_web_admin.erl:1938 msgid "Listened Ports" msgstr "Ports a l'escolta" -#: web/ejabberd_web_admin.erl:1938 web/ejabberd_web_admin.erl:2259 -#: web/ejabberd_web_admin.erl:2447 +#: web/ejabberd_web_admin.erl:1940 web/ejabberd_web_admin.erl:2260 +#: web/ejabberd_web_admin.erl:2448 msgid "Update" msgstr "Actualitzar" -#: web/ejabberd_web_admin.erl:1941 web/ejabberd_web_admin.erl:2568 +#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2569 msgid "Restart" msgstr "Reiniciar" -#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2570 +#: web/ejabberd_web_admin.erl:1945 web/ejabberd_web_admin.erl:2571 msgid "Stop" msgstr "Detindre" -#: web/ejabberd_web_admin.erl:1957 +#: web/ejabberd_web_admin.erl:1959 msgid "RPC Call Error" msgstr "Error de cridada RPC" -#: web/ejabberd_web_admin.erl:1998 +#: web/ejabberd_web_admin.erl:2000 msgid "Database Tables at " msgstr "Taules de la base de dades en " -#: web/ejabberd_web_admin.erl:2005 +#: web/ejabberd_web_admin.erl:2007 msgid "Storage Type" msgstr "Tipus d'emmagatzematge" -#: web/ejabberd_web_admin.erl:2006 +#: web/ejabberd_web_admin.erl:2008 msgid "Elements" msgstr "Elements" -#: web/ejabberd_web_admin.erl:2007 +#: web/ejabberd_web_admin.erl:2009 msgid "Memory" msgstr "Memòria" -#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2032 web/ejabberd_web_admin.erl:2137 msgid "Error" msgstr "Error" -#: web/ejabberd_web_admin.erl:2033 +#: web/ejabberd_web_admin.erl:2034 msgid "Backup of " msgstr "Còpia de seguretat de " -#: web/ejabberd_web_admin.erl:2035 +#: web/ejabberd_web_admin.erl:2036 msgid "" "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 " @@ -1539,183 +1600,183 @@ msgstr "" "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." -#: web/ejabberd_web_admin.erl:2040 +#: web/ejabberd_web_admin.erl:2041 msgid "Store binary backup:" msgstr "Guardar una còpia de seguretat binària:" -#: web/ejabberd_web_admin.erl:2044 web/ejabberd_web_admin.erl:2051 -#: web/ejabberd_web_admin.erl:2059 web/ejabberd_web_admin.erl:2066 -#: web/ejabberd_web_admin.erl:2073 web/ejabberd_web_admin.erl:2080 -#: web/ejabberd_web_admin.erl:2087 web/ejabberd_web_admin.erl:2095 -#: web/ejabberd_web_admin.erl:2102 web/ejabberd_web_admin.erl:2109 +#: web/ejabberd_web_admin.erl:2045 web/ejabberd_web_admin.erl:2052 +#: web/ejabberd_web_admin.erl:2060 web/ejabberd_web_admin.erl:2067 +#: web/ejabberd_web_admin.erl:2074 web/ejabberd_web_admin.erl:2081 +#: web/ejabberd_web_admin.erl:2088 web/ejabberd_web_admin.erl:2096 +#: web/ejabberd_web_admin.erl:2103 web/ejabberd_web_admin.erl:2110 msgid "OK" msgstr "Acceptar" -#: web/ejabberd_web_admin.erl:2047 +#: web/ejabberd_web_admin.erl:2048 msgid "Restore binary backup immediately:" msgstr "Restaurar una còpia de seguretat binària ara mateix." -#: web/ejabberd_web_admin.erl:2055 +#: web/ejabberd_web_admin.erl:2056 msgid "" "Restore binary backup after next ejabberd restart (requires less memory):" msgstr "" "Restaurar una còpia de seguretat binària després de reiniciar el ejabberd " "(requereix menys memòria:" -#: web/ejabberd_web_admin.erl:2062 +#: web/ejabberd_web_admin.erl:2063 msgid "Store plain text backup:" msgstr "Guardar una còpia de seguretat en format de text pla:" -#: web/ejabberd_web_admin.erl:2069 +#: web/ejabberd_web_admin.erl:2070 msgid "Restore plain text backup immediately:" msgstr "Restaurar una còpia de seguretat en format de text pla ara mateix:" -#: web/ejabberd_web_admin.erl:2076 +#: web/ejabberd_web_admin.erl:2077 msgid "Import users data from a PIEFXIS file (XEP-0227):" msgstr "Importar dades d'usuaris des d'un arxiu PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2083 +#: web/ejabberd_web_admin.erl:2084 msgid "Export data of all users in the server to PIEFXIS files (XEP-0227):" msgstr "" "Exportar dades de tots els usuaris del servidor a arxius PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2090 +#: web/ejabberd_web_admin.erl:2091 msgid "Export data of users in a host to PIEFXIS files (XEP-0227):" msgstr "Exportar dades d'usuaris d'un host a arxius PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2098 +#: web/ejabberd_web_admin.erl:2099 msgid "Import user data from jabberd14 spool file:" msgstr "Importar dades d'usuaris de l'arxiu de spool de jabberd14" -#: web/ejabberd_web_admin.erl:2105 +#: web/ejabberd_web_admin.erl:2106 msgid "Import users data from jabberd14 spool directory:" msgstr "Importar dades d'usuaris del directori de spool de jabberd14:" -#: web/ejabberd_web_admin.erl:2131 +#: web/ejabberd_web_admin.erl:2132 msgid "Listened Ports at " msgstr "Ports a la escolta en " -#: web/ejabberd_web_admin.erl:2156 +#: web/ejabberd_web_admin.erl:2157 msgid "Modules at " msgstr "Mòduls en " -#: web/ejabberd_web_admin.erl:2182 +#: web/ejabberd_web_admin.erl:2183 msgid "Statistics of ~p" msgstr "Estadístiques de ~p" -#: web/ejabberd_web_admin.erl:2185 +#: web/ejabberd_web_admin.erl:2186 msgid "Uptime:" msgstr "Temps en marxa" -#: web/ejabberd_web_admin.erl:2188 +#: web/ejabberd_web_admin.erl:2189 msgid "CPU Time:" msgstr "Temps de CPU" -#: web/ejabberd_web_admin.erl:2194 +#: web/ejabberd_web_admin.erl:2195 msgid "Transactions Committed:" msgstr "Transaccions Realitzades:" -#: web/ejabberd_web_admin.erl:2197 +#: web/ejabberd_web_admin.erl:2198 msgid "Transactions Aborted:" msgstr "Transaccions Avortades" -#: web/ejabberd_web_admin.erl:2200 +#: web/ejabberd_web_admin.erl:2201 msgid "Transactions Restarted:" msgstr "Transaccions reiniciades" -#: web/ejabberd_web_admin.erl:2203 +#: web/ejabberd_web_admin.erl:2204 msgid "Transactions Logged:" msgstr "Transaccions registrades" -#: web/ejabberd_web_admin.erl:2245 +#: web/ejabberd_web_admin.erl:2246 msgid "Update " msgstr "Actualitzar" -#: web/ejabberd_web_admin.erl:2253 +#: web/ejabberd_web_admin.erl:2254 msgid "Update plan" msgstr "Pla d'actualització" -#: web/ejabberd_web_admin.erl:2254 +#: web/ejabberd_web_admin.erl:2255 msgid "Modified modules" msgstr "Mòduls modificats" -#: web/ejabberd_web_admin.erl:2255 +#: web/ejabberd_web_admin.erl:2256 msgid "Update script" msgstr "Script d'actualització" -#: web/ejabberd_web_admin.erl:2256 +#: web/ejabberd_web_admin.erl:2257 msgid "Low level update script" msgstr "Script d'actualització de baix nivell" -#: web/ejabberd_web_admin.erl:2257 +#: web/ejabberd_web_admin.erl:2258 msgid "Script check" msgstr "Comprovar script" -#: web/ejabberd_web_admin.erl:2425 +#: web/ejabberd_web_admin.erl:2426 msgid "Port" msgstr "Port" -#: web/ejabberd_web_admin.erl:2426 +#: web/ejabberd_web_admin.erl:2427 msgid "IP" msgstr "IP" -#: web/ejabberd_web_admin.erl:2427 +#: web/ejabberd_web_admin.erl:2428 msgid "Protocol" msgstr "Protocol" -#: web/ejabberd_web_admin.erl:2428 web/ejabberd_web_admin.erl:2555 +#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 msgid "Module" msgstr "Mòdul" -#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 +#: web/ejabberd_web_admin.erl:2430 web/ejabberd_web_admin.erl:2557 msgid "Options" msgstr "Opcions" -#: web/ejabberd_web_admin.erl:2449 +#: web/ejabberd_web_admin.erl:2450 msgid "Delete" msgstr "Eliminar" -#: web/ejabberd_web_admin.erl:2578 +#: web/ejabberd_web_admin.erl:2579 msgid "Start" msgstr "Iniciar" #: web/mod_register_web.erl:104 msgid "Your Jabber account was successfully created." -msgstr "" +msgstr "El teu compte Jabber ha sigut creat correctament." #: web/mod_register_web.erl:107 msgid "There was an error creating the account: " -msgstr "" +msgstr "Hi ha hagut un error creant el compte: " #: web/mod_register_web.erl:115 msgid "Your Jabber account was successfully deleted." -msgstr "" +msgstr "El teu compte Jabber ha sigut esborrat correctament." #: web/mod_register_web.erl:118 msgid "There was an error deleting the account: " -msgstr "" +msgstr "Hi ha hagut un error esborrant el compte: " #: web/mod_register_web.erl:128 msgid "The password of your Jabber account was successfully changed." -msgstr "" +msgstr "La contrasenya del teu compte Jabber s'ha canviat correctament." #: web/mod_register_web.erl:131 msgid "There was an error changing the password: " -msgstr "" +msgstr "Hi ha hagut un error canviant la contrasenya: " #: web/mod_register_web.erl:163 web/mod_register_web.erl:172 msgid "Jabber Account Registration" -msgstr "" +msgstr "Registre de compte Jabber" #: web/mod_register_web.erl:174 web/mod_register_web.erl:192 #: web/mod_register_web.erl:201 msgid "Register a Jabber account" -msgstr "" +msgstr "Registrar un compte Jabber" #: web/mod_register_web.erl:176 web/mod_register_web.erl:493 #: web/mod_register_web.erl:502 msgid "Unregister a Jabber account" -msgstr "" +msgstr "Anul·lar el registre d'un compte Jabber" #: web/mod_register_web.erl:203 msgid "" @@ -1723,42 +1784,52 @@ msgid "" "(Jabber IDentifier) will be of the form: username@server. Please read " "carefully the instructions to fill correctly the fields." msgstr "" +"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." #: web/mod_register_web.erl:212 web/mod_register_web.erl:386 #: web/mod_register_web.erl:509 -#, fuzzy msgid "Username:" -msgstr "Nom d'usuari al IRC" +msgstr "Nom d'usuari:" #: web/mod_register_web.erl:217 msgid "This is case insensitive: macbeth is the same that MacBeth and Macbeth." msgstr "" +"Això no distingeix majúscules de minúscules: macbeth es el mateix que " +"MacBeth i Macbeth." #: web/mod_register_web.erl:218 msgid "Characters not allowed:" -msgstr "" +msgstr "Caràcters no permesos:" #: web/mod_register_web.erl:222 web/mod_register_web.erl:391 #: web/mod_register_web.erl:514 -#, fuzzy msgid "Server:" -msgstr "Servidor ~b" +msgstr "Servidor:" #: web/mod_register_web.erl:232 msgid "" "Don't tell your password to anybody, not even the administrators of the " "Jabber server." msgstr "" +"No li donis la teva contrasenya a ningú, ni tan sols als administradors del " +"servidor Jabber." #: web/mod_register_web.erl:234 msgid "You can later change your password using a Jabber client." msgstr "" +"Podràs canviar la teva contrasenya més endavant utilitzant un client Jabber." #: web/mod_register_web.erl:235 msgid "" "Some Jabber clients can store your password in your computer. Use that " "feature only if you trust your computer is safe." msgstr "" +"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." #: web/mod_register_web.erl:237 msgid "" @@ -1766,35 +1837,36 @@ msgid "" "Jabber there isn't an automated way to recover your password if you forget " "it." msgstr "" +"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." #: web/mod_register_web.erl:242 web/mod_register_web.erl:406 -#, fuzzy msgid "Password Verification:" -msgstr "Verificació del Password" +msgstr "Verificació de la Contrasenya:" #: web/mod_register_web.erl:250 -#, fuzzy msgid "Register" -msgstr "Llista de contactes" +msgstr "Registrar" #: web/mod_register_web.erl:396 -#, fuzzy msgid "Old Password:" -msgstr "Password:" +msgstr "Antiga contrasenya:" #: web/mod_register_web.erl:401 -#, fuzzy msgid "New Password:" -msgstr "Password:" +msgstr "Nova Contrasenya:" #: web/mod_register_web.erl:504 msgid "This page allows to unregister a Jabber account in this Jabber server." msgstr "" +"Aquesta pàgina permet anul·lar el registre d'un compte Jabber en aquest " +"servidor Jabber." #: web/mod_register_web.erl:524 msgid "Unregister" -msgstr "" +msgstr "Anul·lar el registre" #, fuzzy #~ msgid "Captcha test failed" -#~ msgstr "El captcha es vàlid." +#~ msgstr "El CAPTCHA es vàlid." diff --git a/src/msgs/cs.msg b/src/msgs/cs.msg index eed1c47d5..279ce36f0 100644 --- a/src/msgs/cs.msg +++ b/src/msgs/cs.msg @@ -20,7 +20,9 @@ {"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 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 voice requests","Povolit uživatelům posílat žádosti o voice práva"}. {"All Users","Všichni uživatelé"}. {"Announcements","Oznámení"}. {"anyone","každému"}. @@ -75,6 +77,7 @@ {"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"}. {"Edit Properties","Upravit vlastnosti"}. +{"Either approve or decline the voice request.","Povolit nebo odmítnout voice žádost."}. {"ejabberd IRC module","ejabberd IRC modul"}. {"ejabberd MUC module","ejabberd MUC modul"}. {"ejabberd Publish-Subscribe module","ejabberd Publish-Subscribe modul"}. @@ -98,8 +101,10 @@ {"Erlang Jabber Server","Erlang Jabber Server"}. {"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\"}]."}. +{"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 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í"}. {"February",". února"}. {"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 Password","Získat heslo 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 "}. {"Groups","Skupiny"}. {"has been banned","byl(a) zablokován(a)"}. @@ -122,7 +128,7 @@ {"has been kicked","byl(a) vyhozen(a) z místnosti"}. {" has set the subject to: "," změnil(a) téma na: "}. {"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."}. {"Import Directory","Import adresáře"}. {"Import File","Import souboru"}. @@ -168,7 +174,7 @@ {"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"}. {"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 moderated","Nastavit místnost jako moderovanou"}. {"Make room password protected","Chránit místnost heslem"}. @@ -185,6 +191,7 @@ {"Memory","Paměť"}. {"Message body","Tělo zprávy"}. {"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"}. {"moderators only","moderátorům"}. {"Modified modules","Aktualizované moduly"}. @@ -199,6 +206,7 @@ {"Nickname","Přezdívka"}. {"Nickname Registration at ","Registrace přezdívky na "}. {"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 Data","Žádná data"}. {"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 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 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 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"}. @@ -250,6 +259,7 @@ {"Persist items to storage","Uložit položky natrvalo do úložiště"}. {"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, 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"}. {"Port ~b","Port ~b"}. {"Port","Port"}. @@ -338,7 +348,7 @@ {"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 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 collections with which a node is affiliated","Kolekce, se kterými je uzel spřízněn"}. {"the password is","heslo je"}. @@ -357,6 +367,7 @@ {"Thursday","Čtvrtek"}. {"Time","Čas"}. {"Time delay","Časový posun"}. +{"Too many CAPTCHA requests","Přiliš mnoho CAPTCHA žádostí"}. {"To","Pro"}. {"To ~s","Pro ~s"}. {"Traffic rate limit is exceeded","Byl překročen limit"}. @@ -365,7 +376,6 @@ {"Transactions Logged:","Transakce zaznamenána"}. {"Transactions Restarted:","Transakce restartována"}. {"Tuesday","Úterý"}. -{"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í"}. {"Unregister a Jabber account","Zrušte registraci účtu Jabberu"}. @@ -377,7 +387,8 @@ {"Update plan","Aktualizovat plán"}. {"Update script","Aktualizované skripty"}. {"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ů"}. {"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"}. @@ -390,6 +401,8 @@ {"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 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"}. {"When to send the last published item","Kdy odeslat poslední publikovanou položku"}. {"Whether to allow subscriptions","Povolit odebírání"}. diff --git a/src/msgs/cs.po b/src/msgs/cs.po index ee72a252d..789da39b8 100644 --- a/src/msgs/cs.po +++ b/src/msgs/cs.po @@ -10,17 +10,17 @@ msgstr "" #: ejabberd_c2s.erl:424 ejabberd_c2s.erl:727 msgid "Use of STARTTLS required" -msgstr "Je vyžadováno STARTTLS." +msgstr "Je vyžadováno STARTTLS" #: ejabberd_c2s.erl:503 msgid "No resource provided" msgstr "Nebyl poskytnut žádný zdroj" -#: ejabberd_c2s.erl:1149 +#: ejabberd_c2s.erl:1197 msgid "Replaced by new connection" msgstr "Nahrazeno novým spojením" -#: ejabberd_c2s.erl:1837 +#: ejabberd_c2s.erl:1885 msgid "Your active privacy list has denied the routing of this stanza." msgstr "Vaše nastavení soukromí znemožnilo směrování této stance." @@ -34,14 +34,14 @@ msgstr "Nesmíte posílat zprávy na ~s. Pro povolení navštivte ~s" #: ejabberd_captcha.erl:134 msgid "If you don't see the CAPTCHA image here, visit the web page." -msgstr "Pokud zde nevidíte obrázek CAPTCHE, přejděte na webovou stránku." +msgstr "Pokud zde nevidíte obrázek CAPTCHA, přejděte na webovou stránku." #: ejabberd_captcha.erl:146 msgid "CAPTCHA web page" msgstr "Webová stránka CAPTCHA" #: ejabberd_captcha.erl:307 -msgid "The captcha is valid." +msgid "The CAPTCHA is valid." msgstr "CAPTCHA souhlasí." #: mod_adhoc.erl:95 mod_adhoc.erl:125 mod_adhoc.erl:143 mod_adhoc.erl:161 @@ -56,63 +56,66 @@ msgstr "Ping" msgid "Pong" msgstr "Pong" -#: mod_announce.erl:506 +#: mod_announce.erl:507 mod_announce_odbc.erl:499 msgid "Really delete message of the day?" msgstr "Skutečně smazat zprávu dne?" -#: mod_announce.erl:514 mod_configure.erl:1083 mod_configure.erl:1128 +#: mod_announce.erl:515 mod_announce_odbc.erl:507 mod_configure.erl:1083 +#: mod_configure.erl:1128 msgid "Subject" msgstr "Předmět" -#: mod_announce.erl:519 mod_configure.erl:1088 mod_configure.erl:1133 +#: mod_announce.erl:520 mod_announce_odbc.erl:512 mod_configure.erl:1088 +#: mod_configure.erl:1133 msgid "Message body" msgstr "Tělo zprávy" -#: mod_announce.erl:599 +#: mod_announce.erl:600 mod_announce_odbc.erl:592 msgid "No body provided for announce message" msgstr "Zpráva neobsahuje text" -#: mod_announce.erl:634 +#: mod_announce.erl:635 mod_announce_odbc.erl:627 msgid "Announcements" msgstr "Oznámení" -#: mod_announce.erl:636 +#: mod_announce.erl:637 mod_announce_odbc.erl:629 msgid "Send announcement to all users" msgstr "Odeslat oznámení všem uživatelům" -#: mod_announce.erl:638 +#: mod_announce.erl:639 mod_announce_odbc.erl:631 msgid "Send announcement to all users on all hosts" msgstr "Odeslat oznámení všem uživatelům na všech hostitelích" -#: mod_announce.erl:640 +#: mod_announce.erl:641 mod_announce_odbc.erl:633 msgid "Send announcement to all online users" msgstr "Odeslat oznámení všem online uživatelům" -#: mod_announce.erl:642 mod_configure.erl:1078 mod_configure.erl:1123 +#: mod_announce.erl:643 mod_announce_odbc.erl:635 mod_configure.erl:1078 +#: mod_configure.erl:1123 msgid "Send announcement to all online users on all hosts" msgstr "Odeslat oznámení všem online uživatelům na všech hostitelích" -#: mod_announce.erl:644 +#: mod_announce.erl:645 mod_announce_odbc.erl:637 msgid "Set message of the day and send to online users" msgstr "Nastavit zprávu dne a odeslat ji online uživatelům" -#: mod_announce.erl:646 +#: mod_announce.erl:647 mod_announce_odbc.erl:639 msgid "Set message of the day on all hosts and send to online users" msgstr "Nastavit zprávu dne a odeslat ji online uživatelům" -#: mod_announce.erl:648 +#: mod_announce.erl:649 mod_announce_odbc.erl:641 msgid "Update message of the day (don't send)" msgstr "Aktualizovat zprávu dne (neodesílat)" -#: mod_announce.erl:650 +#: mod_announce.erl:651 mod_announce_odbc.erl:643 msgid "Update message of the day on all hosts (don't send)" msgstr "Aktualizovat zprávu dne pro všechny hostitele (neodesílat)" -#: mod_announce.erl:652 +#: mod_announce.erl:653 mod_announce_odbc.erl:645 msgid "Delete message of the day" msgstr "Smazat zprávu dne" -#: mod_announce.erl:654 +#: mod_announce.erl:655 mod_announce_odbc.erl:647 msgid "Delete message of the day on all hosts" msgstr "Smazat zprávu dne na všech hostitelích" @@ -121,7 +124,7 @@ msgstr "Smazat zprávu dne na všech hostitelích" msgid "Configuration" msgstr "Konfigurace" -#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1934 +#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1936 msgid "Database" msgstr "Databáze" @@ -133,7 +136,7 @@ msgstr "Spustit moduly" msgid "Stop Modules" msgstr "Zastavit moduly" -#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1935 +#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1937 msgid "Backup" msgstr "Zálohovat" @@ -162,7 +165,7 @@ msgid "Shut Down Service" msgstr "Vypnout službu" #: mod_configure.erl:145 mod_configure.erl:518 mod_configure.erl:1197 -#: web/ejabberd_web_admin.erl:1528 +#: web/ejabberd_web_admin.erl:1527 msgid "Add User" msgstr "Přidat uživatele" @@ -214,7 +217,7 @@ msgid "User Management" msgstr "Správa uživatelů" #: mod_configure.erl:500 web/ejabberd_web_admin.erl:1058 -#: web/ejabberd_web_admin.erl:1463 +#: web/ejabberd_web_admin.erl:1462 msgid "Online Users" msgstr "Online uživatelé" @@ -226,15 +229,15 @@ msgstr "Všichni uživatelé" msgid "Outgoing s2s Connections" msgstr "Odchozí s2s spojení" -#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1905 +#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1907 msgid "Running Nodes" msgstr "Běžící uzly" -#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1907 +#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1909 msgid "Stopped Nodes" msgstr "Zastavené uzly" -#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1951 +#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1953 msgid "Modules" msgstr "Moduly" @@ -365,15 +368,15 @@ msgstr "Pravidla přístupů" #: mod_configure.erl:1200 mod_configure.erl:1222 mod_configure.erl:1234 #: mod_configure.erl:1246 mod_configure.erl:1258 mod_configure.erl:1275 -#: mod_configure.erl:1287 mod_configure.erl:1652 mod_configure.erl:1702 -#: mod_configure.erl:1723 mod_roster.erl:943 mod_roster_odbc.erl:1048 -#: mod_vcard.erl:466 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:442 +#: mod_configure.erl:1287 mod_configure.erl:1650 mod_configure.erl:1700 +#: mod_configure.erl:1721 mod_roster.erl:943 mod_roster_odbc.erl:1060 +#: mod_vcard.erl:472 mod_vcard_ldap.erl:554 mod_vcard_odbc.erl:448 msgid "Jabber ID" msgstr "Jabber ID" -#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1653 -#: mod_configure.erl:1865 mod_muc/mod_muc_room.erl:2970 mod_register.erl:235 -#: web/ejabberd_web_admin.erl:1521 +#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1651 +#: mod_configure.erl:1863 mod_muc/mod_muc_room.erl:3224 mod_register.erl:235 +#: web/ejabberd_web_admin.erl:1520 msgid "Password" msgstr "Heslo" @@ -389,69 +392,70 @@ msgstr "Počet registrovaných uživatelů" msgid "Number of online users" msgstr "Počet online uživatelů" -#: mod_configure.erl:1684 web/ejabberd_web_admin.erl:1589 -#: web/ejabberd_web_admin.erl:1741 +#: mod_configure.erl:1682 web/ejabberd_web_admin.erl:1588 +#: web/ejabberd_web_admin.erl:1743 msgid "Never" msgstr "Nikdy" -#: mod_configure.erl:1698 web/ejabberd_web_admin.erl:1602 -#: web/ejabberd_web_admin.erl:1754 +#: mod_configure.erl:1696 web/ejabberd_web_admin.erl:1601 +#: web/ejabberd_web_admin.erl:1756 msgid "Online" msgstr "Online" -#: mod_configure.erl:1703 +#: mod_configure.erl:1701 msgid "Last login" msgstr "Poslední přihlášení" -#: mod_configure.erl:1724 +#: mod_configure.erl:1722 msgid "Roster size" msgstr "Velikost seznamu kontaktů" -#: mod_configure.erl:1725 +#: mod_configure.erl:1723 msgid "IP addresses" msgstr "IP adresy" -#: mod_configure.erl:1726 +#: mod_configure.erl:1724 msgid "Resources" msgstr "Zdroje" -#: mod_configure.erl:1852 +#: mod_configure.erl:1850 msgid "Administration of " msgstr "Administrace " -#: mod_configure.erl:1855 +#: mod_configure.erl:1853 msgid "Action on user" msgstr "Akce aplikovaná na uživatele" -#: mod_configure.erl:1859 +#: mod_configure.erl:1857 msgid "Edit Properties" msgstr "Upravit vlastnosti" -#: mod_configure.erl:1862 web/ejabberd_web_admin.erl:1767 +#: mod_configure.erl:1860 web/ejabberd_web_admin.erl:1769 msgid "Remove User" msgstr "Odstranit uživatele" -#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:336 +#: mod_irc/mod_irc.erl:201 mod_irc/mod_irc_odbc.erl:196 +#: mod_muc/mod_muc.erl:336 mod_muc/mod_muc_odbc.erl:342 msgid "Access denied by service policy" msgstr "Přístup byl zamítnut nastavením služby" -#: mod_irc/mod_irc.erl:400 +#: mod_irc/mod_irc.erl:401 mod_irc/mod_irc_odbc.erl:398 msgid "IRC Transport" msgstr "IRC transport" -#: mod_irc/mod_irc.erl:427 +#: mod_irc/mod_irc.erl:428 mod_irc/mod_irc_odbc.erl:425 msgid "ejabberd IRC module" msgstr "ejabberd IRC modul" -#: mod_irc/mod_irc.erl:558 +#: mod_irc/mod_irc.erl:559 mod_irc/mod_irc_odbc.erl:568 msgid "You need an x:data capable client to configure mod_irc settings" msgstr "Pro konfiguraci mod_irc potřebujete klienta s podporou x:data" -#: mod_irc/mod_irc.erl:565 +#: mod_irc/mod_irc.erl:566 mod_irc/mod_irc_odbc.erl:575 msgid "Registration in mod_irc for " msgstr "Registrace do mod_irc na " -#: mod_irc/mod_irc.erl:570 +#: mod_irc/mod_irc.erl:571 mod_irc/mod_irc_odbc.erl:580 msgid "" "Enter username, encodings, ports and passwords you wish to use for " "connecting to IRC servers" @@ -459,11 +463,11 @@ msgstr "" "Zadejte přezdívku, kódování, porty a hesla, které chcete používat pro " "připojení k serverům IRC" -#: mod_irc/mod_irc.erl:575 +#: mod_irc/mod_irc.erl:576 mod_irc/mod_irc_odbc.erl:585 msgid "IRC Username" msgstr "IRC přezdívka" -#: mod_irc/mod_irc.erl:585 +#: mod_irc/mod_irc.erl:586 mod_irc/mod_irc_odbc.erl:595 msgid "" "If you want to specify different ports, passwords, encodings for IRC " "servers, fill this list with values in format '{\"irc server\", \"encoding" @@ -474,7 +478,7 @@ msgstr "" "ve formátu '{\"irc server\",\"encoding\", port, \"password\"}'. Výchozí " "kódování pro tuto službu je \"~s\", port ~p, empty password." -#: mod_irc/mod_irc.erl:597 +#: mod_irc/mod_irc.erl:598 mod_irc/mod_irc_odbc.erl:607 msgid "" "Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." @@ -482,35 +486,36 @@ msgstr "" "Příklad: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}].2\"}]." -#: mod_irc/mod_irc.erl:602 +#: mod_irc/mod_irc.erl:603 mod_irc/mod_irc_odbc.erl:612 msgid "Connections parameters" msgstr "Parametry spojení" -#: mod_irc/mod_irc.erl:727 +#: mod_irc/mod_irc.erl:728 mod_irc/mod_irc_odbc.erl:757 msgid "Join IRC channel" msgstr "Vstoupit do IRC kanálu" -#: mod_irc/mod_irc.erl:731 +#: mod_irc/mod_irc.erl:732 mod_irc/mod_irc_odbc.erl:761 msgid "IRC channel (don't put the first #)" msgstr "IRC kanál (bez počátečního #)" -#: mod_irc/mod_irc.erl:736 +#: mod_irc/mod_irc.erl:737 mod_irc/mod_irc_odbc.erl:766 msgid "IRC server" msgstr "IRC přezdívka" -#: mod_irc/mod_irc.erl:769 mod_irc/mod_irc.erl:773 +#: mod_irc/mod_irc.erl:770 mod_irc/mod_irc.erl:774 +#: mod_irc/mod_irc_odbc.erl:799 mod_irc/mod_irc_odbc.erl:803 msgid "Join the IRC channel here." msgstr "Vstoupit do tohoto IRC kanálu." -#: mod_irc/mod_irc.erl:777 +#: mod_irc/mod_irc.erl:778 mod_irc/mod_irc_odbc.erl:807 msgid "Join the IRC channel in this Jabber ID: ~s" msgstr "Vstupte do IRC kanálu s tímto Jabber ID: ~s" -#: mod_irc/mod_irc.erl:862 +#: mod_irc/mod_irc.erl:863 mod_irc/mod_irc_odbc.erl:904 msgid "IRC settings" msgstr "Nastavení IRC" -#: mod_irc/mod_irc.erl:867 +#: mod_irc/mod_irc.erl:868 mod_irc/mod_irc_odbc.erl:909 msgid "" "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 " @@ -520,70 +525,71 @@ msgstr "" "IRC. Stiskněte 'Další' pro více políček k vyplnění. Stiskněte 'Dokončit' pro " "uložení nastavení." -#: mod_irc/mod_irc.erl:873 +#: mod_irc/mod_irc.erl:874 mod_irc/mod_irc_odbc.erl:915 msgid "IRC username" msgstr "IRC přezdívka" -#: mod_irc/mod_irc.erl:922 +#: mod_irc/mod_irc.erl:923 mod_irc/mod_irc_odbc.erl:964 msgid "Password ~b" msgstr "Heslo ~b" -#: mod_irc/mod_irc.erl:927 +#: mod_irc/mod_irc.erl:928 mod_irc/mod_irc_odbc.erl:969 msgid "Port ~b" msgstr "Port ~b" -#: mod_irc/mod_irc.erl:932 +#: mod_irc/mod_irc.erl:933 mod_irc/mod_irc_odbc.erl:974 msgid "Encoding for server ~b" msgstr "Kódování pro server ~b" -#: mod_irc/mod_irc.erl:941 +#: mod_irc/mod_irc.erl:942 mod_irc/mod_irc_odbc.erl:983 msgid "Server ~b" msgstr "Server ~b" -#: mod_muc/mod_muc.erl:449 +#: mod_muc/mod_muc.erl:449 mod_muc/mod_muc_odbc.erl:456 msgid "Only service administrators are allowed to send service messages" msgstr "Pouze správci služby smí odesílat servisní zprávy" -#: mod_muc/mod_muc.erl:493 +#: mod_muc/mod_muc.erl:493 mod_muc/mod_muc_odbc.erl:500 msgid "Room creation is denied by service policy" msgstr "Pravidla služby nepovolují vytvořit místnost" -#: mod_muc/mod_muc.erl:500 +#: mod_muc/mod_muc.erl:500 mod_muc/mod_muc_odbc.erl:507 msgid "Conference room does not exist" msgstr "Konferenční místnost neexistuje" -#: mod_muc/mod_muc.erl:581 +#: mod_muc/mod_muc.erl:582 mod_muc/mod_muc_odbc.erl:595 msgid "Chatrooms" msgstr "Konference" -#: mod_muc/mod_muc.erl:711 +#: mod_muc/mod_muc.erl:712 mod_muc/mod_muc_odbc.erl:729 msgid "You need a client that supports x:data to register the nickname" msgstr "Pro registraci přezdívky potřebujete klienta s podporou x:data" -#: mod_muc/mod_muc.erl:717 +#: mod_muc/mod_muc.erl:718 mod_muc/mod_muc_odbc.erl:735 msgid "Nickname Registration at " msgstr "Registrace přezdívky na " -#: mod_muc/mod_muc.erl:721 +#: mod_muc/mod_muc.erl:722 mod_muc/mod_muc_odbc.erl:739 msgid "Enter nickname you want to register" msgstr "Zadejte přezdívku, kterou chcete zaregistrovat" -#: mod_muc/mod_muc.erl:722 mod_roster.erl:944 mod_roster_odbc.erl:1049 -#: mod_vcard.erl:358 mod_vcard.erl:471 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:447 +#: mod_muc/mod_muc.erl:723 mod_muc/mod_muc_odbc.erl:740 +#: mod_muc/mod_muc_room.erl:3810 mod_roster.erl:944 mod_roster_odbc.erl:1061 +#: mod_vcard.erl:364 mod_vcard.erl:477 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:453 msgid "Nickname" msgstr "Přezdívka" -#: mod_muc/mod_muc.erl:761 mod_muc/mod_muc_room.erl:933 -#: mod_muc/mod_muc_room.erl:1577 +#: mod_muc/mod_muc.erl:762 mod_muc/mod_muc_odbc.erl:784 +#: mod_muc/mod_muc_room.erl:1064 mod_muc/mod_muc_room.erl:1787 msgid "That nickname is registered by another person" msgstr "Přezdívka je zaregistrována jinou osobou" -#: mod_muc/mod_muc.erl:787 +#: mod_muc/mod_muc.erl:788 mod_muc/mod_muc_odbc.erl:811 msgid "You must fill in field \"Nickname\" in the form" msgstr "Musíte vyplnit políčko \"Přezdívka\" ve formuláři" -#: mod_muc/mod_muc.erl:807 +#: mod_muc/mod_muc.erl:808 mod_muc/mod_muc_odbc.erl:831 msgid "ejabberd MUC module" msgstr "ejabberd MUC modul" @@ -623,8 +629,8 @@ msgstr "byl(a) vyhozen(a), protože dojde k vypnutí systému" msgid "is now known as" msgstr "se přejmenoval(a) na" -#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:689 -#: mod_muc/mod_muc_room.erl:2138 +#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:688 +#: mod_muc/mod_muc_room.erl:2393 msgid " has set the subject to: " msgstr " změnil(a) téma na: " @@ -720,32 +726,48 @@ msgstr ". listopadu" msgid "December" msgstr ". prosince" -#: mod_muc/mod_muc_log.erl:751 +#: mod_muc/mod_muc_log.erl:750 msgid "Room Configuration" msgstr "Nastavení místnosti" -#: mod_muc/mod_muc_log.erl:760 +#: mod_muc/mod_muc_log.erl:759 msgid "Room Occupants" msgstr "Počet účastníků" -#: mod_muc/mod_muc_room.erl:170 +#: mod_muc/mod_muc_room.erl:174 msgid "Traffic rate limit is exceeded" msgstr "Byl překročen limit" -#: mod_muc/mod_muc_room.erl:242 +#: mod_muc/mod_muc_room.erl:246 msgid "" "This participant is kicked from the room because he sent an error message" msgstr "Tento účastník byl vyhozen, protože odeslal chybovou zprávu" -#: mod_muc/mod_muc_room.erl:251 +#: mod_muc/mod_muc_room.erl:255 msgid "It is not allowed to send private messages to the conference" msgstr "Není povoleno odesílat soukromé zprávy do konference" -#: mod_muc/mod_muc_room.erl:296 +#: mod_muc/mod_muc_room.erl:332 +msgid "Please, wait for a while before sending new voice request" +msgstr "Prosím, počkejte chvíli před posláním nové žádosti o voice práva" + +#: mod_muc/mod_muc_room.erl:347 +msgid "Voice requests are disabled in this conference" +msgstr "Voice žádosti jsou v této konferenci zakázány" + +#: mod_muc/mod_muc_room.erl:364 +msgid "Failed to extract JID from your voice request approval" +msgstr "Došlo k chybě při získávání Jabber ID z vaší žádosti o voice práva" + +#: mod_muc/mod_muc_room.erl:393 +msgid "Only moderators can approve voice requests" +msgstr "Pouze moderátoři mohou schválit žádosti o voice práva" + +#: mod_muc/mod_muc_room.erl:408 msgid "Improper message type" msgstr "Nesprávný typ zprávy" -#: mod_muc/mod_muc_room.erl:406 +#: mod_muc/mod_muc_room.erl:518 msgid "" "This participant is kicked from the room because he sent an error message to " "another participant" @@ -753,228 +775,260 @@ msgstr "" "Tento účastník byl vyhozen, protože odeslal chybovou zprávu jinému " "účastníkovi" -#: mod_muc/mod_muc_room.erl:419 +#: mod_muc/mod_muc_room.erl:531 msgid "It is not allowed to send private messages of type \"groupchat\"" msgstr "Není dovoleno odeslání soukromé zprávy typu \"skupinová zpráva\" " -#: mod_muc/mod_muc_room.erl:431 mod_muc/mod_muc_room.erl:486 +#: mod_muc/mod_muc_room.erl:543 mod_muc/mod_muc_room.erl:611 msgid "Recipient is not in the conference room" msgstr "Příjemce se nenachází v konferenční místnosti" -#: mod_muc/mod_muc_room.erl:451 mod_muc/mod_muc_room.erl:829 -#: mod_muc/mod_muc_room.erl:3609 -msgid "Only occupants are allowed to send messages to the conference" -msgstr "Jen členové mají povolené zasílat zprávy do konference" - -#: mod_muc/mod_muc_room.erl:460 +#: mod_muc/mod_muc_room.erl:564 mod_muc/mod_muc_room.erl:585 msgid "It is not allowed to send private messages" msgstr "Je zakázáno posílat soukromé zprávy" -#: mod_muc/mod_muc_room.erl:509 +#: mod_muc/mod_muc_room.erl:576 mod_muc/mod_muc_room.erl:956 +#: mod_muc/mod_muc_room.erl:4040 +msgid "Only occupants are allowed to send messages to the conference" +msgstr "Jen členové mají povolené zasílat zprávy do konference" + +#: mod_muc/mod_muc_room.erl:634 msgid "Only occupants are allowed to send queries to the conference" msgstr "Jen členové mohou odesílat požadavky (query) do konference" -#: mod_muc/mod_muc_room.erl:521 +#: mod_muc/mod_muc_room.erl:646 msgid "Queries to the conference members are not allowed in this room" msgstr "" "Požadavky (queries) na členy konference nejsou v této místnosti povolené" -#: mod_muc/mod_muc_room.erl:805 +#: mod_muc/mod_muc_room.erl:932 msgid "" "Only moderators and participants are allowed to change the subject in this " "room" msgstr "Jen moderátoři a účastníci mají povoleno měnit téma této místnosti" -#: mod_muc/mod_muc_room.erl:810 +#: mod_muc/mod_muc_room.erl:937 msgid "Only moderators are allowed to change the subject in this room" msgstr "Jen moderátoři mají povoleno měnit téma místnosti" -#: mod_muc/mod_muc_room.erl:820 +#: mod_muc/mod_muc_room.erl:947 msgid "Visitors are not allowed to send messages to all occupants" msgstr "Návštevníci nemají povoleno zasílat zprávy všem účastníkům konference" -#: mod_muc/mod_muc_room.erl:891 +#: mod_muc/mod_muc_room.erl:1021 msgid "" "This participant is kicked from the room because he sent an error presence" msgstr "Tento účastník byl vyhozen, protože odeslal chybový status" -#: mod_muc/mod_muc_room.erl:909 +#: mod_muc/mod_muc_room.erl:1040 msgid "Visitors are not allowed to change their nicknames in this room" msgstr "Návštěvníkům této místnosti je zakázáno měnit přezdívku" -#: mod_muc/mod_muc_room.erl:922 mod_muc/mod_muc_room.erl:1569 +#: mod_muc/mod_muc_room.erl:1053 mod_muc/mod_muc_room.erl:1779 msgid "That nickname is already in use by another occupant" msgstr "Přezdívka je již používána jiným členem" -#: mod_muc/mod_muc_room.erl:1558 +#: mod_muc/mod_muc_room.erl:1768 msgid "You have been banned from this room" msgstr "Byl jste vyloučen z této místnosti" -#: mod_muc/mod_muc_room.erl:1561 +#: mod_muc/mod_muc_room.erl:1771 msgid "Membership is required to enter this room" msgstr "Pro vstup do místnosti musíte být členem" -#: mod_muc/mod_muc_room.erl:1597 +#: mod_muc/mod_muc_room.erl:1807 msgid "This room is not anonymous" msgstr "Tato místnost není anonymní" -#: mod_muc/mod_muc_room.erl:1623 +#: mod_muc/mod_muc_room.erl:1833 msgid "A password is required to enter this room" msgstr "Pro vstup do místnosti musíte zadat heslo" -#: mod_muc/mod_muc_room.erl:1645 mod_register.erl:246 +#: mod_muc/mod_muc_room.erl:1855 mod_register.erl:246 msgid "Too many CAPTCHA requests" -msgstr "" +msgstr "Přiliš mnoho CAPTCHA žádostí" -#: mod_muc/mod_muc_room.erl:1654 -msgid "Unable to generate a captcha" +#: mod_muc/mod_muc_room.erl:1864 mod_register.erl:251 +msgid "Unable to generate a CAPTCHA" msgstr "Nebylo možné vygenerovat CAPTCHA" -#: mod_muc/mod_muc_room.erl:1664 +#: mod_muc/mod_muc_room.erl:1874 msgid "Incorrect password" msgstr "Nesprávné heslo" -#: mod_muc/mod_muc_room.erl:2193 +#: mod_muc/mod_muc_room.erl:2448 msgid "Administrator privileges required" msgstr "Potřebujete práva administrátora" -#: mod_muc/mod_muc_room.erl:2208 +#: mod_muc/mod_muc_room.erl:2463 msgid "Moderator privileges required" msgstr "Potřebujete práva moderátora" -#: mod_muc/mod_muc_room.erl:2363 +#: mod_muc/mod_muc_room.erl:2619 msgid "Jabber ID ~s is invalid" msgstr "Jabber ID ~s je neplatné" -#: mod_muc/mod_muc_room.erl:2377 +#: mod_muc/mod_muc_room.erl:2633 msgid "Nickname ~s does not exist in the room" msgstr "Přezdívka ~s v místnosti neexistuje" -#: mod_muc/mod_muc_room.erl:2403 mod_muc/mod_muc_room.erl:2797 +#: mod_muc/mod_muc_room.erl:2659 mod_muc/mod_muc_room.erl:3049 msgid "Invalid affiliation: ~s" msgstr "Neplatné přiřazení: ~s" -#: mod_muc/mod_muc_room.erl:2460 +#: mod_muc/mod_muc_room.erl:2713 msgid "Invalid role: ~s" msgstr "Neplatná role: ~s" -#: mod_muc/mod_muc_room.erl:2774 mod_muc/mod_muc_room.erl:2810 +#: mod_muc/mod_muc_room.erl:3026 mod_muc/mod_muc_room.erl:3062 msgid "Owner privileges required" msgstr "Jsou vyžadována práva vlastníka" -#: mod_muc/mod_muc_room.erl:2941 +#: mod_muc/mod_muc_room.erl:3195 msgid "Configuration of room ~s" msgstr "Konfigurace místnosti ~s" -#: mod_muc/mod_muc_room.erl:2946 +#: mod_muc/mod_muc_room.erl:3200 msgid "Room title" msgstr "Název místnosti" -#: mod_muc/mod_muc_room.erl:2949 mod_muc/mod_muc_room.erl:3388 +#: mod_muc/mod_muc_room.erl:3203 mod_muc/mod_muc_room.erl:3692 msgid "Room description" msgstr "Popis místnosti" -#: mod_muc/mod_muc_room.erl:2956 +#: mod_muc/mod_muc_room.erl:3210 msgid "Make room persistent" msgstr "Nastavit místnost jako stálou" -#: mod_muc/mod_muc_room.erl:2961 +#: mod_muc/mod_muc_room.erl:3215 msgid "Make room public searchable" msgstr "Nastavit místnost jako veřejnou" -#: mod_muc/mod_muc_room.erl:2964 +#: mod_muc/mod_muc_room.erl:3218 msgid "Make participants list public" msgstr "Nastavit seznam účastníků jako veřejný" -#: mod_muc/mod_muc_room.erl:2967 +#: mod_muc/mod_muc_room.erl:3221 msgid "Make room password protected" msgstr "Chránit místnost heslem" -#: mod_muc/mod_muc_room.erl:2978 +#: mod_muc/mod_muc_room.erl:3232 msgid "Maximum Number of Occupants" msgstr "Počet účastníků" -#: mod_muc/mod_muc_room.erl:2985 +#: mod_muc/mod_muc_room.erl:3239 msgid "No limit" msgstr "Bez limitu" -#: mod_muc/mod_muc_room.erl:2996 +#: mod_muc/mod_muc_room.erl:3250 msgid "Present real Jabber IDs to" msgstr "Odhalovat skutečná Jabber ID" -#: mod_muc/mod_muc_room.erl:3004 +#: mod_muc/mod_muc_room.erl:3258 mod_muc/mod_muc_room.erl:3292 msgid "moderators only" msgstr "moderátorům" -#: mod_muc/mod_muc_room.erl:3006 +#: mod_muc/mod_muc_room.erl:3260 mod_muc/mod_muc_room.erl:3294 msgid "anyone" msgstr "každému" -#: mod_muc/mod_muc_room.erl:3008 +#: mod_muc/mod_muc_room.erl:3262 msgid "Make room members-only" msgstr "Zpřístupnit místnost jen členům" -#: mod_muc/mod_muc_room.erl:3011 +#: mod_muc/mod_muc_room.erl:3265 msgid "Make room moderated" msgstr "Nastavit místnost jako moderovanou" -#: mod_muc/mod_muc_room.erl:3014 +#: mod_muc/mod_muc_room.erl:3268 msgid "Default users as participants" msgstr "Uživatelé jsou implicitně členy" -#: mod_muc/mod_muc_room.erl:3017 +#: mod_muc/mod_muc_room.erl:3271 msgid "Allow users to change the subject" msgstr "Povolit uživatelům měnit téma místnosti" -#: mod_muc/mod_muc_room.erl:3020 +#: mod_muc/mod_muc_room.erl:3274 msgid "Allow users to send private messages" msgstr "Povolit uživatelům odesílat soukromé zprávy" -#: mod_muc/mod_muc_room.erl:3023 +#: mod_muc/mod_muc_room.erl:3279 +msgid "Allow visitors to send private messages to" +msgstr "Povolit návštěvníkům odesílat soukromé zprávy" + +#: mod_muc/mod_muc_room.erl:3290 +msgid "nobody" +msgstr "nikdo" + +#: mod_muc/mod_muc_room.erl:3296 msgid "Allow users to query other users" msgstr "Povolit uživatelům odesílat požadavky (query) ostatním uživatelům" -#: mod_muc/mod_muc_room.erl:3026 +#: mod_muc/mod_muc_room.erl:3299 msgid "Allow users to send invites" msgstr "Povolit uživatelům posílání pozvánek" -#: mod_muc/mod_muc_room.erl:3029 +#: mod_muc/mod_muc_room.erl:3302 msgid "Allow visitors to send status text in presence updates" msgstr "Povolit návštěvníkům posílat stavové zprávy ve statusu" -#: mod_muc/mod_muc_room.erl:3032 +#: mod_muc/mod_muc_room.erl:3305 msgid "Allow visitors to change nickname" msgstr "Povolit návštěvníkům měnit přezdívku" -#: mod_muc/mod_muc_room.erl:3038 -msgid "Make room captcha protected" +#: mod_muc/mod_muc_room.erl:3308 +msgid "Allow visitors to send voice requests" +msgstr "Povolit uživatelům posílat žádosti o voice práva" + +#: mod_muc/mod_muc_room.erl:3311 +msgid "Minimum interval between voice requests (in seconds)" +msgstr "Minimální interval mezi žádostmi o voice práva (v sekundách)" + +#: mod_muc/mod_muc_room.erl:3317 +msgid "Make room CAPTCHA protected" msgstr "Chránit místnost pomocí CAPTCHA" -#: mod_muc/mod_muc_room.erl:3043 +#: mod_muc/mod_muc_room.erl:3322 msgid "Exclude Jabber IDs from CAPTCHA challenge" -msgstr "" +msgstr "Vyloučit Jabber ID z procesu CAPTCHA ověřování" -#: mod_muc/mod_muc_room.erl:3050 +#: mod_muc/mod_muc_room.erl:3329 msgid "Enable logging" msgstr "Zaznamenávat konverzace" -#: mod_muc/mod_muc_room.erl:3058 +#: mod_muc/mod_muc_room.erl:3337 msgid "You need an x:data capable client to configure room" msgstr "Ke konfiguraci místnosti potřebujete klienta podporujícího x:data" -#: mod_muc/mod_muc_room.erl:3390 +#: mod_muc/mod_muc_room.erl:3694 msgid "Number of occupants" msgstr "Počet účastníků" -#: mod_muc/mod_muc_room.erl:3446 +#: mod_muc/mod_muc_room.erl:3750 msgid "private, " msgstr "soukromá, " -#: mod_muc/mod_muc_room.erl:3529 +#: mod_muc/mod_muc_room.erl:3799 +msgid "Voice request" +msgstr "Žádost o voice práva" + +#: mod_muc/mod_muc_room.erl:3803 +msgid "Either approve or decline the voice request." +msgstr "Povolit nebo odmítnout voice žádost." + +#: mod_muc/mod_muc_room.erl:3809 +msgid "User JID" +msgstr "Jabber ID uživatele" + +#: mod_muc/mod_muc_room.erl:3811 +msgid "Grant voice to this person?" +msgstr "Udělit voice práva této osobě?" + +#: mod_muc/mod_muc_room.erl:3960 msgid "~s invites you to the room ~s" msgstr "~s vás zve do místnosti ~s" -#: mod_muc/mod_muc_room.erl:3538 +#: mod_muc/mod_muc_room.erl:3969 msgid "the password is" msgstr "heslo je" @@ -988,14 +1042,15 @@ msgid "~s's Offline Messages Queue" msgstr "Fronta offline zpráv uživatele ~s" #: mod_offline.erl:563 mod_offline_odbc.erl:411 mod_roster.erl:987 -#: mod_roster_odbc.erl:1092 mod_shared_roster.erl:896 -#: mod_shared_roster.erl:1005 web/ejabberd_web_admin.erl:833 +#: mod_roster_odbc.erl:1104 mod_shared_roster.erl:901 +#: mod_shared_roster.erl:1010 mod_shared_roster_odbc.erl:930 +#: mod_shared_roster_odbc.erl:1039 web/ejabberd_web_admin.erl:833 #: web/ejabberd_web_admin.erl:874 web/ejabberd_web_admin.erl:942 #: web/ejabberd_web_admin.erl:978 web/ejabberd_web_admin.erl:1019 -#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1758 -#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1961 -#: web/ejabberd_web_admin.erl:2030 web/ejabberd_web_admin.erl:2134 -#: web/ejabberd_web_admin.erl:2159 web/ejabberd_web_admin.erl:2247 +#: web/ejabberd_web_admin.erl:1508 web/ejabberd_web_admin.erl:1760 +#: web/ejabberd_web_admin.erl:1931 web/ejabberd_web_admin.erl:1963 +#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2135 +#: web/ejabberd_web_admin.erl:2160 web/ejabberd_web_admin.erl:2248 msgid "Submitted" msgstr "Odeslané" @@ -1015,8 +1070,9 @@ msgstr "Pro" msgid "Packet" msgstr "Paket" -#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:903 -#: web/ejabberd_web_admin.erl:882 web/ejabberd_web_admin.erl:986 +#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:908 +#: mod_shared_roster_odbc.erl:937 web/ejabberd_web_admin.erl:882 +#: web/ejabberd_web_admin.erl:986 msgid "Delete Selected" msgstr "Smazat vybrané" @@ -1032,103 +1088,103 @@ msgstr "Odstranit všechny offline zprávy" msgid "ejabberd SOCKS5 Bytestreams module" msgstr "ejabberd SOCKS5 Bytestreams modul" -#: mod_pubsub/mod_pubsub.erl:1119 mod_pubsub/mod_pubsub_odbc.erl:928 +#: mod_pubsub/mod_pubsub.erl:1120 mod_pubsub/mod_pubsub_odbc.erl:929 msgid "Publish-Subscribe" msgstr "Publish-Subscribe" -#: mod_pubsub/mod_pubsub.erl:1213 mod_pubsub/mod_pubsub_odbc.erl:1024 +#: mod_pubsub/mod_pubsub.erl:1214 mod_pubsub/mod_pubsub_odbc.erl:1025 msgid "ejabberd Publish-Subscribe module" msgstr "ejabberd Publish-Subscribe modul" -#: mod_pubsub/mod_pubsub.erl:1496 mod_pubsub/mod_pubsub_odbc.erl:1311 +#: mod_pubsub/mod_pubsub.erl:1497 mod_pubsub/mod_pubsub_odbc.erl:1312 msgid "PubSub subscriber request" msgstr "Žádost odběratele PubSub" -#: mod_pubsub/mod_pubsub.erl:1498 mod_pubsub/mod_pubsub_odbc.erl:1313 +#: mod_pubsub/mod_pubsub.erl:1499 mod_pubsub/mod_pubsub_odbc.erl:1314 msgid "Choose whether to approve this entity's subscription." msgstr "Zvolte, zda chcete schválit odebírání touto entitou" -#: mod_pubsub/mod_pubsub.erl:1504 mod_pubsub/mod_pubsub_odbc.erl:1319 +#: mod_pubsub/mod_pubsub.erl:1505 mod_pubsub/mod_pubsub_odbc.erl:1320 msgid "Node ID" msgstr "ID uzlu" -#: mod_pubsub/mod_pubsub.erl:1509 mod_pubsub/mod_pubsub_odbc.erl:1324 +#: mod_pubsub/mod_pubsub.erl:1510 mod_pubsub/mod_pubsub_odbc.erl:1325 msgid "Subscriber Address" msgstr "Adresa odběratele" -#: mod_pubsub/mod_pubsub.erl:1515 mod_pubsub/mod_pubsub_odbc.erl:1330 +#: mod_pubsub/mod_pubsub.erl:1516 mod_pubsub/mod_pubsub_odbc.erl:1331 msgid "Allow this Jabber ID to subscribe to this pubsub node?" msgstr "Povolit tomuto Jabber ID odebírat tento pubsub uzel?" -#: mod_pubsub/mod_pubsub.erl:3416 mod_pubsub/mod_pubsub_odbc.erl:3229 +#: mod_pubsub/mod_pubsub.erl:3474 mod_pubsub/mod_pubsub_odbc.erl:3287 msgid "Deliver payloads with event notifications" msgstr "Doručovat náklad s upozorněním na událost" -#: mod_pubsub/mod_pubsub.erl:3417 mod_pubsub/mod_pubsub_odbc.erl:3230 +#: mod_pubsub/mod_pubsub.erl:3475 mod_pubsub/mod_pubsub_odbc.erl:3288 msgid "Deliver event notifications" msgstr "Doručovat upozornění na události" -#: mod_pubsub/mod_pubsub.erl:3418 mod_pubsub/mod_pubsub_odbc.erl:3231 +#: mod_pubsub/mod_pubsub.erl:3476 mod_pubsub/mod_pubsub_odbc.erl:3289 msgid "Notify subscribers when the node configuration changes" msgstr "Upozornit odběratele na změnu nastavení uzlu" -#: mod_pubsub/mod_pubsub.erl:3419 mod_pubsub/mod_pubsub_odbc.erl:3232 +#: mod_pubsub/mod_pubsub.erl:3477 mod_pubsub/mod_pubsub_odbc.erl:3290 msgid "Notify subscribers when the node is deleted" msgstr "Upozornit odběratele na smazání uzlu" -#: mod_pubsub/mod_pubsub.erl:3420 mod_pubsub/mod_pubsub_odbc.erl:3233 +#: mod_pubsub/mod_pubsub.erl:3478 mod_pubsub/mod_pubsub_odbc.erl:3291 msgid "Notify subscribers when items are removed from the node" msgstr "Upozornit odběratele na odstranění položek z uzlu" -#: mod_pubsub/mod_pubsub.erl:3421 mod_pubsub/mod_pubsub_odbc.erl:3234 +#: mod_pubsub/mod_pubsub.erl:3479 mod_pubsub/mod_pubsub_odbc.erl:3292 msgid "Persist items to storage" msgstr "Uložit položky natrvalo do úložiště" -#: mod_pubsub/mod_pubsub.erl:3422 mod_pubsub/mod_pubsub_odbc.erl:3235 +#: mod_pubsub/mod_pubsub.erl:3480 mod_pubsub/mod_pubsub_odbc.erl:3293 msgid "A friendly name for the node" msgstr "Přívětivé jméno pro uzel" -#: mod_pubsub/mod_pubsub.erl:3423 mod_pubsub/mod_pubsub_odbc.erl:3236 +#: mod_pubsub/mod_pubsub.erl:3481 mod_pubsub/mod_pubsub_odbc.erl:3294 msgid "Max # of items to persist" msgstr "Maximální počet položek, které je možné natrvalo uložit" -#: mod_pubsub/mod_pubsub.erl:3424 mod_pubsub/mod_pubsub_odbc.erl:3237 +#: mod_pubsub/mod_pubsub.erl:3482 mod_pubsub/mod_pubsub_odbc.erl:3295 msgid "Whether to allow subscriptions" msgstr "Povolit odebírání" -#: mod_pubsub/mod_pubsub.erl:3425 mod_pubsub/mod_pubsub_odbc.erl:3238 +#: mod_pubsub/mod_pubsub.erl:3483 mod_pubsub/mod_pubsub_odbc.erl:3296 msgid "Specify the access model" msgstr "Uveďte přístupový model" -#: mod_pubsub/mod_pubsub.erl:3428 mod_pubsub/mod_pubsub_odbc.erl:3241 +#: mod_pubsub/mod_pubsub.erl:3486 mod_pubsub/mod_pubsub_odbc.erl:3299 msgid "Roster groups allowed to subscribe" msgstr "Skupiny kontaktů, které mohou odebírat" -#: mod_pubsub/mod_pubsub.erl:3429 mod_pubsub/mod_pubsub_odbc.erl:3242 +#: mod_pubsub/mod_pubsub.erl:3487 mod_pubsub/mod_pubsub_odbc.erl:3300 msgid "Specify the publisher model" msgstr "Specifikovat model pro publikování" -#: mod_pubsub/mod_pubsub.erl:3431 mod_pubsub/mod_pubsub_odbc.erl:3244 +#: mod_pubsub/mod_pubsub.erl:3489 mod_pubsub/mod_pubsub_odbc.erl:3302 msgid "Purge all items when the relevant publisher goes offline" msgstr "Smazat všechny položky, pokud se příslušný poskytovatel odpojí" -#: mod_pubsub/mod_pubsub.erl:3432 mod_pubsub/mod_pubsub_odbc.erl:3245 +#: mod_pubsub/mod_pubsub.erl:3490 mod_pubsub/mod_pubsub_odbc.erl:3303 msgid "Specify the event message type" msgstr "Zvolte typ zpráv pro události" -#: mod_pubsub/mod_pubsub.erl:3434 mod_pubsub/mod_pubsub_odbc.erl:3247 +#: mod_pubsub/mod_pubsub.erl:3492 mod_pubsub/mod_pubsub_odbc.erl:3305 msgid "Max payload size in bytes" msgstr "Maximální náklad v bajtech" -#: mod_pubsub/mod_pubsub.erl:3435 mod_pubsub/mod_pubsub_odbc.erl:3248 +#: mod_pubsub/mod_pubsub.erl:3493 mod_pubsub/mod_pubsub_odbc.erl:3306 msgid "When to send the last published item" msgstr "Kdy odeslat poslední publikovanou položku" -#: mod_pubsub/mod_pubsub.erl:3437 mod_pubsub/mod_pubsub_odbc.erl:3250 +#: mod_pubsub/mod_pubsub.erl:3495 mod_pubsub/mod_pubsub_odbc.erl:3308 msgid "Only deliver notifications to available users" msgstr "Doručovat upozornění jen právě přihlášeným uživatelům" -#: mod_pubsub/mod_pubsub.erl:3438 mod_pubsub/mod_pubsub_odbc.erl:3251 +#: mod_pubsub/mod_pubsub.erl:3496 mod_pubsub/mod_pubsub_odbc.erl:3309 msgid "The collections with which a node is affiliated" msgstr "Kolekce, se kterými je uzel spřízněn" @@ -1144,15 +1200,11 @@ msgstr "Pro registraci potřebujete klienta s podporou x:data a CAPTCHA" msgid "Choose a username and password to register with this server" msgstr "Zadejte jméno uživatele a heslo pro registraci na tomto serveru" -#: mod_register.erl:230 mod_vcard.erl:358 mod_vcard_odbc.erl:336 -#: web/ejabberd_web_admin.erl:1516 web/ejabberd_web_admin.erl:1573 +#: mod_register.erl:230 mod_vcard.erl:364 mod_vcard_odbc.erl:342 +#: web/ejabberd_web_admin.erl:1515 web/ejabberd_web_admin.erl:1572 msgid "User" msgstr "Uživatel" -#: mod_register.erl:251 -msgid "Unable to generate a CAPTCHA" -msgstr "Nebylo možné vygenerovat CAPTCHA" - #: mod_register.erl:316 mod_register.erl:361 msgid "The password is too weak" msgstr "Heslo je příliš slabé" @@ -1161,120 +1213,123 @@ msgstr "Heslo je příliš slabé" msgid "Users are not allowed to register accounts so quickly" msgstr "Je zakázáno registrovat účty v tak rychlém sledu" -#: mod_roster.erl:938 mod_roster_odbc.erl:1043 web/ejabberd_web_admin.erl:1699 -#: web/ejabberd_web_admin.erl:1884 web/ejabberd_web_admin.erl:1895 -#: web/ejabberd_web_admin.erl:2218 +#: mod_roster.erl:938 mod_roster_odbc.erl:1055 web/ejabberd_web_admin.erl:1701 +#: web/ejabberd_web_admin.erl:1886 web/ejabberd_web_admin.erl:1897 +#: web/ejabberd_web_admin.erl:2219 msgid "None" msgstr "Nic" -#: mod_roster.erl:945 mod_roster_odbc.erl:1050 +#: mod_roster.erl:945 mod_roster_odbc.erl:1062 msgid "Subscription" msgstr "Přihlášení" -#: mod_roster.erl:946 mod_roster_odbc.erl:1051 +#: mod_roster.erl:946 mod_roster_odbc.erl:1063 msgid "Pending" msgstr "Čekající" -#: mod_roster.erl:947 mod_roster_odbc.erl:1052 +#: mod_roster.erl:947 mod_roster_odbc.erl:1064 msgid "Groups" msgstr "Skupiny" -#: mod_roster.erl:974 mod_roster_odbc.erl:1079 +#: mod_roster.erl:974 mod_roster_odbc.erl:1091 msgid "Validate" msgstr "Ověřit" -#: mod_roster.erl:982 mod_roster_odbc.erl:1087 +#: mod_roster.erl:982 mod_roster_odbc.erl:1099 msgid "Remove" msgstr "Odstranit" -#: mod_roster.erl:985 mod_roster_odbc.erl:1090 +#: mod_roster.erl:985 mod_roster_odbc.erl:1102 msgid "Roster of " msgstr "Seznam kontaktů " -#: mod_roster.erl:988 mod_roster_odbc.erl:1093 mod_shared_roster.erl:897 -#: mod_shared_roster.erl:1006 web/ejabberd_web_admin.erl:834 +#: mod_roster.erl:988 mod_roster_odbc.erl:1105 mod_shared_roster.erl:902 +#: mod_shared_roster.erl:1011 mod_shared_roster_odbc.erl:931 +#: mod_shared_roster_odbc.erl:1040 web/ejabberd_web_admin.erl:834 #: web/ejabberd_web_admin.erl:875 web/ejabberd_web_admin.erl:943 #: web/ejabberd_web_admin.erl:979 web/ejabberd_web_admin.erl:1020 -#: web/ejabberd_web_admin.erl:1510 web/ejabberd_web_admin.erl:1759 -#: web/ejabberd_web_admin.erl:1930 web/ejabberd_web_admin.erl:2135 -#: web/ejabberd_web_admin.erl:2160 +#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1761 +#: web/ejabberd_web_admin.erl:1932 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2161 msgid "Bad format" msgstr "Nesprávný formát" -#: mod_roster.erl:995 mod_roster_odbc.erl:1100 +#: mod_roster.erl:995 mod_roster_odbc.erl:1112 msgid "Add Jabber ID" msgstr "Přidat Jabber ID" -#: mod_roster.erl:1094 mod_roster_odbc.erl:1199 +#: mod_roster.erl:1094 mod_roster_odbc.erl:1211 msgid "Roster" msgstr "Seznam kontaktů" -#: mod_shared_roster.erl:852 mod_shared_roster.erl:894 -#: mod_shared_roster.erl:1002 +#: mod_shared_roster.erl:857 mod_shared_roster.erl:899 +#: mod_shared_roster.erl:1007 mod_shared_roster_odbc.erl:886 +#: mod_shared_roster_odbc.erl:928 mod_shared_roster_odbc.erl:1036 msgid "Shared Roster Groups" msgstr "Skupiny pro sdílený seznam kontaktů" -#: mod_shared_roster.erl:890 web/ejabberd_web_admin.erl:1366 -#: web/ejabberd_web_admin.erl:2460 +#: mod_shared_roster.erl:895 mod_shared_roster_odbc.erl:924 +#: web/ejabberd_web_admin.erl:1365 web/ejabberd_web_admin.erl:2461 msgid "Add New" msgstr "Přidat nový" -#: mod_shared_roster.erl:973 +#: mod_shared_roster.erl:978 mod_shared_roster_odbc.erl:1007 msgid "Name:" msgstr "Jméno:" -#: mod_shared_roster.erl:978 +#: mod_shared_roster.erl:983 mod_shared_roster_odbc.erl:1012 msgid "Description:" msgstr "Popis:" -#: mod_shared_roster.erl:986 +#: mod_shared_roster.erl:991 mod_shared_roster_odbc.erl:1020 msgid "Members:" msgstr "Členové:" -#: mod_shared_roster.erl:994 +#: mod_shared_roster.erl:999 mod_shared_roster_odbc.erl:1028 msgid "Displayed Groups:" msgstr "Zobrazené skupiny:" -#: mod_shared_roster.erl:1003 +#: mod_shared_roster.erl:1008 mod_shared_roster_odbc.erl:1037 msgid "Group " msgstr "Skupina " -#: mod_shared_roster.erl:1012 web/ejabberd_web_admin.erl:840 -#: web/ejabberd_web_admin.erl:884 web/ejabberd_web_admin.erl:949 -#: web/ejabberd_web_admin.erl:1026 web/ejabberd_web_admin.erl:2015 +#: mod_shared_roster.erl:1017 mod_shared_roster_odbc.erl:1046 +#: web/ejabberd_web_admin.erl:840 web/ejabberd_web_admin.erl:884 +#: web/ejabberd_web_admin.erl:949 web/ejabberd_web_admin.erl:1026 +#: web/ejabberd_web_admin.erl:2017 msgid "Submit" msgstr "Odeslat" -#: mod_vcard.erl:165 mod_vcard_ldap.erl:237 mod_vcard_odbc.erl:129 +#: mod_vcard.erl:165 mod_vcard_ldap.erl:238 mod_vcard_odbc.erl:129 msgid "Erlang Jabber Server" msgstr "Erlang Jabber Server" -#: mod_vcard.erl:358 mod_vcard.erl:472 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:448 +#: mod_vcard.erl:364 mod_vcard.erl:478 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:454 msgid "Birthday" msgstr "Datum narození" -#: mod_vcard.erl:358 mod_vcard.erl:474 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:450 +#: mod_vcard.erl:364 mod_vcard.erl:480 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:456 msgid "City" msgstr "Město" -#: mod_vcard.erl:358 mod_vcard.erl:473 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:449 +#: mod_vcard.erl:364 mod_vcard.erl:479 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:455 msgid "Country" msgstr "Země" -#: mod_vcard.erl:358 mod_vcard.erl:475 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:451 +#: mod_vcard.erl:364 mod_vcard.erl:481 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:457 msgid "Email" msgstr "E-mail" -#: mod_vcard.erl:358 mod_vcard.erl:470 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:446 +#: mod_vcard.erl:364 mod_vcard.erl:476 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:452 msgid "Family Name" msgstr "Příjmení" -#: mod_vcard.erl:358 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_odbc.erl:342 msgid "" "Fill in the form to search for any matching Jabber User (Add * to the end of " "field to match substring)" @@ -1282,52 +1337,52 @@ msgstr "" "Pro vyhledání uživatele Jabberu vyplňte formulář (na konec přidejte znak * " "pro vyhledání podřetězce)" -#: mod_vcard.erl:358 mod_vcard.erl:467 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:443 +#: mod_vcard.erl:364 mod_vcard.erl:473 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:449 msgid "Full Name" msgstr "Celé jméno" -#: mod_vcard.erl:358 mod_vcard.erl:469 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:445 +#: mod_vcard.erl:364 mod_vcard.erl:475 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:451 msgid "Middle Name" msgstr "Druhé jméno" -#: mod_vcard.erl:358 mod_vcard.erl:468 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:444 web/ejabberd_web_admin.erl:2004 +#: mod_vcard.erl:364 mod_vcard.erl:474 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:450 web/ejabberd_web_admin.erl:2006 msgid "Name" msgstr "Jméno" -#: mod_vcard.erl:358 mod_vcard.erl:476 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:452 +#: mod_vcard.erl:364 mod_vcard.erl:482 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:458 msgid "Organization Name" msgstr "Název firmy" -#: mod_vcard.erl:358 mod_vcard.erl:477 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:453 +#: mod_vcard.erl:364 mod_vcard.erl:483 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:459 msgid "Organization Unit" msgstr "Oddělení" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "Search users in " msgstr "Hledat uživatele v " -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "You need an x:data capable client to search" msgstr "K vyhledávání potřebujete klienta podporujícího x:data" -#: mod_vcard.erl:383 mod_vcard_ldap.erl:483 mod_vcard_odbc.erl:361 +#: mod_vcard.erl:389 mod_vcard_ldap.erl:487 mod_vcard_odbc.erl:367 msgid "vCard User Search" msgstr "Hledání uživatelů podle vizitek" -#: mod_vcard.erl:439 mod_vcard_ldap.erl:537 mod_vcard_odbc.erl:415 +#: mod_vcard.erl:445 mod_vcard_ldap.erl:541 mod_vcard_odbc.erl:421 msgid "ejabberd vCard module" msgstr "ejabberd vCard modul" -#: mod_vcard.erl:463 mod_vcard_ldap.erl:547 mod_vcard_odbc.erl:439 +#: mod_vcard.erl:469 mod_vcard_ldap.erl:551 mod_vcard_odbc.erl:445 msgid "Search Results for " msgstr "Výsledky hledání pro " -#: mod_vcard_ldap.erl:458 +#: mod_vcard_ldap.erl:462 msgid "Fill in fields to search for any matching Jabber User" msgstr "Vyplňte políčka pro vyhledání uživatele Jabberu" @@ -1388,7 +1443,7 @@ msgstr "Zobrazit běžnou tabulku" msgid "Show Integral Table" msgstr "Zobrazit kompletní tabulku" -#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1937 +#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1939 msgid "Statistics" msgstr "Statistiky" @@ -1400,116 +1455,116 @@ msgstr "Nenalezeno" msgid "Node not found" msgstr "Uzel nenalezen" -#: web/ejabberd_web_admin.erl:1461 +#: web/ejabberd_web_admin.erl:1460 msgid "Host" msgstr "Hostitel" -#: web/ejabberd_web_admin.erl:1462 +#: web/ejabberd_web_admin.erl:1461 msgid "Registered Users" msgstr "Registrovaní uživatelé" -#: web/ejabberd_web_admin.erl:1574 +#: web/ejabberd_web_admin.erl:1573 msgid "Offline Messages" msgstr "Offline zprávy" -#: web/ejabberd_web_admin.erl:1575 web/ejabberd_web_admin.erl:1765 +#: web/ejabberd_web_admin.erl:1574 web/ejabberd_web_admin.erl:1767 msgid "Last Activity" msgstr "Poslední aktivita" -#: web/ejabberd_web_admin.erl:1657 web/ejabberd_web_admin.erl:1673 +#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 msgid "Registered Users:" msgstr "Registrovaní živatelé:" -#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 -#: web/ejabberd_web_admin.erl:2191 +#: web/ejabberd_web_admin.erl:1661 web/ejabberd_web_admin.erl:1677 +#: web/ejabberd_web_admin.erl:2192 msgid "Online Users:" msgstr "Online uživatelé:" -#: web/ejabberd_web_admin.erl:1661 +#: web/ejabberd_web_admin.erl:1663 msgid "Outgoing s2s Connections:" msgstr "Odchozí s2s spojení:" -#: web/ejabberd_web_admin.erl:1663 +#: web/ejabberd_web_admin.erl:1665 msgid "Outgoing s2s Servers:" msgstr "Odchozí s2s servery:" -#: web/ejabberd_web_admin.erl:1732 web/mod_register_web.erl:175 +#: web/ejabberd_web_admin.erl:1734 web/mod_register_web.erl:175 #: web/mod_register_web.erl:372 web/mod_register_web.erl:381 #: web/mod_register_web.erl:411 msgid "Change Password" msgstr "Změnit heslo" -#: web/ejabberd_web_admin.erl:1756 +#: web/ejabberd_web_admin.erl:1758 msgid "User " msgstr "Uživatel " -#: web/ejabberd_web_admin.erl:1763 +#: web/ejabberd_web_admin.erl:1765 msgid "Connected Resources:" msgstr "Připojené zdroje:" -#: web/ejabberd_web_admin.erl:1764 web/mod_register_web.erl:227 +#: web/ejabberd_web_admin.erl:1766 web/mod_register_web.erl:227 #: web/mod_register_web.erl:519 msgid "Password:" msgstr "Heslo:" -#: web/ejabberd_web_admin.erl:1826 +#: web/ejabberd_web_admin.erl:1828 msgid "No Data" msgstr "Žádná data" -#: web/ejabberd_web_admin.erl:1904 +#: web/ejabberd_web_admin.erl:1906 msgid "Nodes" msgstr "Uzly" -#: web/ejabberd_web_admin.erl:1927 web/ejabberd_web_admin.erl:1949 +#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1951 msgid "Node " msgstr "Uzel " -#: web/ejabberd_web_admin.erl:1936 +#: web/ejabberd_web_admin.erl:1938 msgid "Listened Ports" msgstr "Otevřené porty" -#: web/ejabberd_web_admin.erl:1938 web/ejabberd_web_admin.erl:2259 -#: web/ejabberd_web_admin.erl:2447 +#: web/ejabberd_web_admin.erl:1940 web/ejabberd_web_admin.erl:2260 +#: web/ejabberd_web_admin.erl:2448 msgid "Update" msgstr "Aktualizovat" -#: web/ejabberd_web_admin.erl:1941 web/ejabberd_web_admin.erl:2568 +#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2569 msgid "Restart" msgstr "Restart" -#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2570 +#: web/ejabberd_web_admin.erl:1945 web/ejabberd_web_admin.erl:2571 msgid "Stop" msgstr "Stop" -#: web/ejabberd_web_admin.erl:1957 +#: web/ejabberd_web_admin.erl:1959 msgid "RPC Call Error" msgstr "Chyba RPC volání" -#: web/ejabberd_web_admin.erl:1998 +#: web/ejabberd_web_admin.erl:2000 msgid "Database Tables at " msgstr "Databázové tabulky na " -#: web/ejabberd_web_admin.erl:2005 +#: web/ejabberd_web_admin.erl:2007 msgid "Storage Type" msgstr "Typ úložiště" -#: web/ejabberd_web_admin.erl:2006 +#: web/ejabberd_web_admin.erl:2008 msgid "Elements" msgstr "Položek" -#: web/ejabberd_web_admin.erl:2007 +#: web/ejabberd_web_admin.erl:2009 msgid "Memory" msgstr "Paměť" -#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2032 web/ejabberd_web_admin.erl:2137 msgid "Error" msgstr "Chyba" -#: web/ejabberd_web_admin.erl:2033 +#: web/ejabberd_web_admin.erl:2034 msgid "Backup of " msgstr "Záloha na " -#: web/ejabberd_web_admin.erl:2035 +#: web/ejabberd_web_admin.erl:2036 msgid "" "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 " @@ -1519,143 +1574,143 @@ msgstr "" "Mnesia. Pokud používáte ODBC modul, musíte zálohovat svoji SQL databázi " "samostatně." -#: web/ejabberd_web_admin.erl:2040 +#: web/ejabberd_web_admin.erl:2041 msgid "Store binary backup:" msgstr "Uložit binární zálohu:" -#: web/ejabberd_web_admin.erl:2044 web/ejabberd_web_admin.erl:2051 -#: web/ejabberd_web_admin.erl:2059 web/ejabberd_web_admin.erl:2066 -#: web/ejabberd_web_admin.erl:2073 web/ejabberd_web_admin.erl:2080 -#: web/ejabberd_web_admin.erl:2087 web/ejabberd_web_admin.erl:2095 -#: web/ejabberd_web_admin.erl:2102 web/ejabberd_web_admin.erl:2109 +#: web/ejabberd_web_admin.erl:2045 web/ejabberd_web_admin.erl:2052 +#: web/ejabberd_web_admin.erl:2060 web/ejabberd_web_admin.erl:2067 +#: web/ejabberd_web_admin.erl:2074 web/ejabberd_web_admin.erl:2081 +#: web/ejabberd_web_admin.erl:2088 web/ejabberd_web_admin.erl:2096 +#: web/ejabberd_web_admin.erl:2103 web/ejabberd_web_admin.erl:2110 msgid "OK" msgstr "OK" -#: web/ejabberd_web_admin.erl:2047 +#: web/ejabberd_web_admin.erl:2048 msgid "Restore binary backup immediately:" msgstr "Okamžitě obnovit binární zálohu:" -#: web/ejabberd_web_admin.erl:2055 +#: web/ejabberd_web_admin.erl:2056 msgid "" "Restore binary backup after next ejabberd restart (requires less memory):" msgstr "" "Obnovit binární zálohu při následujícím restartu ejabberd (vyžaduje méně " "paměti)" -#: web/ejabberd_web_admin.erl:2062 +#: web/ejabberd_web_admin.erl:2063 msgid "Store plain text backup:" msgstr "Uložit zálohu do textového souboru:" -#: web/ejabberd_web_admin.erl:2069 +#: web/ejabberd_web_admin.erl:2070 msgid "Restore plain text backup immediately:" msgstr "Okamžitě obnovit zálohu z textového souboru:" -#: web/ejabberd_web_admin.erl:2076 +#: web/ejabberd_web_admin.erl:2077 msgid "Import users data from a PIEFXIS file (XEP-0227):" msgstr "Importovat uživatele ze souboru ve formátu PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2083 +#: web/ejabberd_web_admin.erl:2084 msgid "Export data of all users in the server to PIEFXIS files (XEP-0227):" msgstr "Exportovat všechny uživatele do souboru ve formátu PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2090 +#: web/ejabberd_web_admin.erl:2091 msgid "Export data of users in a host to PIEFXIS files (XEP-0227):" msgstr "" "Exportovat uživatele na hostiteli do souboru ve formátu PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2098 +#: web/ejabberd_web_admin.erl:2099 msgid "Import user data from jabberd14 spool file:" msgstr "Importovat uživatele z jabberd14 spool souborů:" -#: web/ejabberd_web_admin.erl:2105 +#: web/ejabberd_web_admin.erl:2106 msgid "Import users data from jabberd14 spool directory:" msgstr "Importovat uživatele z jabberd14 spool souborů:" -#: web/ejabberd_web_admin.erl:2131 +#: web/ejabberd_web_admin.erl:2132 msgid "Listened Ports at " msgstr "Otevřené porty na " -#: web/ejabberd_web_admin.erl:2156 +#: web/ejabberd_web_admin.erl:2157 msgid "Modules at " msgstr "Moduly na " -#: web/ejabberd_web_admin.erl:2182 +#: web/ejabberd_web_admin.erl:2183 msgid "Statistics of ~p" msgstr "Statistiky ~p" -#: web/ejabberd_web_admin.erl:2185 +#: web/ejabberd_web_admin.erl:2186 msgid "Uptime:" msgstr "Čas běhu:" -#: web/ejabberd_web_admin.erl:2188 +#: web/ejabberd_web_admin.erl:2189 msgid "CPU Time:" msgstr "Čas procesoru" -#: web/ejabberd_web_admin.erl:2194 +#: web/ejabberd_web_admin.erl:2195 msgid "Transactions Committed:" msgstr "Transakce potvrzena" -#: web/ejabberd_web_admin.erl:2197 +#: web/ejabberd_web_admin.erl:2198 msgid "Transactions Aborted:" msgstr "Transakce zrušena" -#: web/ejabberd_web_admin.erl:2200 +#: web/ejabberd_web_admin.erl:2201 msgid "Transactions Restarted:" msgstr "Transakce restartována" -#: web/ejabberd_web_admin.erl:2203 +#: web/ejabberd_web_admin.erl:2204 msgid "Transactions Logged:" msgstr "Transakce zaznamenána" -#: web/ejabberd_web_admin.erl:2245 +#: web/ejabberd_web_admin.erl:2246 msgid "Update " msgstr "Aktualizovat " -#: web/ejabberd_web_admin.erl:2253 +#: web/ejabberd_web_admin.erl:2254 msgid "Update plan" msgstr "Aktualizovat plán" -#: web/ejabberd_web_admin.erl:2254 +#: web/ejabberd_web_admin.erl:2255 msgid "Modified modules" msgstr "Aktualizované moduly" -#: web/ejabberd_web_admin.erl:2255 +#: web/ejabberd_web_admin.erl:2256 msgid "Update script" msgstr "Aktualizované skripty" -#: web/ejabberd_web_admin.erl:2256 +#: web/ejabberd_web_admin.erl:2257 msgid "Low level update script" msgstr "Nízkoúrovňový aktualizační skript" -#: web/ejabberd_web_admin.erl:2257 +#: web/ejabberd_web_admin.erl:2258 msgid "Script check" msgstr "Kontrola skriptu" -#: web/ejabberd_web_admin.erl:2425 +#: web/ejabberd_web_admin.erl:2426 msgid "Port" msgstr "Port" -#: web/ejabberd_web_admin.erl:2426 +#: web/ejabberd_web_admin.erl:2427 msgid "IP" msgstr "IP" -#: web/ejabberd_web_admin.erl:2427 +#: web/ejabberd_web_admin.erl:2428 msgid "Protocol" msgstr "Protokol" -#: web/ejabberd_web_admin.erl:2428 web/ejabberd_web_admin.erl:2555 +#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 msgid "Module" msgstr "Modul" -#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 +#: web/ejabberd_web_admin.erl:2430 web/ejabberd_web_admin.erl:2557 msgid "Options" msgstr "Nastavení" -#: web/ejabberd_web_admin.erl:2449 +#: web/ejabberd_web_admin.erl:2450 msgid "Delete" msgstr "Smazat" -#: web/ejabberd_web_admin.erl:2578 +#: web/ejabberd_web_admin.erl:2579 msgid "Start" msgstr "Start" diff --git a/src/msgs/de.msg b/src/msgs/de.msg index 6dde04f8c..883fdf884 100644 --- a/src/msgs/de.msg +++ b/src/msgs/de.msg @@ -7,7 +7,7 @@ {"Access Rules","Zugangsregeln"}. {"Action on user","Aktion auf Benutzer"}. {"Add Jabber ID","Jabber-ID hinzufügen"}. -{"Add New","Neuen hinzufügen"}. +{"Add New","Neue hinzufügen"}. {"Add User","Benutzer hinzufügen"}. {"Administration of ","Administration von "}. {"Administration","Verwaltung"}. @@ -16,14 +16,16 @@ {"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 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 private messages","Erlaube Benutzern private Nachrichten zu senden"}. {"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"}. {"Announcements","Ankündigungen"}. -{"anyone","jeder"}. +{"anyone","jeden"}. {"A password is required to enter this room","Sie brauchen ein Passwort um diesen Raum zu betreten"}. {"April","April"}. {"August","August"}. @@ -67,7 +69,7 @@ {"Delete Selected","Markierte löschen"}. {"Delete User","Benutzer löschen"}. {"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:"}. {"Disc only copy","Nur auf Festplatte"}. {"Displayed Groups:","Angezeigte Gruppen:"}. @@ -75,6 +77,7 @@ {"Dump Backup to Text File at ","Ausgabe der Sicherung in diese Textdatei "}. {"Dump to Text File","Ausgabe in Textdatei"}. {"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 MUC module","ejabberd MUC-Modul"}. {"ejabberd Publish-Subscribe module","ejabberd Publish-Subscribe-Modul"}. @@ -98,8 +101,10 @@ {"Erlang Jabber Server","Erlang Jabber Server"}. {"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\"}]."}. +{"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 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"}. {"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"}. @@ -113,6 +118,7 @@ {"Get User Last Login Time","letzte Anmeldezeit abrufen"}. {"Get User Password","Benutzer-Passwort abrufen"}. {"Get User Statistics","Benutzer-Statistiken abrufen"}. +{"Grant voice to this person?","Sprachrechte dieser Person erteilen?"}. {"Group ","Gruppe "}. {"Groups","Gruppen"}. {"has been banned","wurde gebannt"}. @@ -136,7 +142,7 @@ {"Incorrect password","Falsches Passwort"}. {"Invalid affiliation: ~s","Ungültige Mitgliedschaft: ~s"}. {"Invalid role: ~s","Ungültige Rolle: ~s"}. -{"IP addresses","IP Addresse"}. +{"IP addresses","IP Adressen"}. {"IP","IP"}. {"IRC channel (don't put the first #)","IRC Channel (ohne dem ersten #)"}. {"IRC server","IRC Server"}. @@ -153,7 +159,7 @@ {"Jabber ID ~s is invalid","Die Jabber-ID ~s ist ungültig"}. {"January","Januar"}. {"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 in this Jabber ID: ~s","Den IRC Channel mit dieser Jabber ID beitreten: ~s"}. {"July","Juli"}. @@ -168,7 +174,7 @@ {"List of modules to start","Liste der zu startenden Module"}. {"Low level update script","Low level Aktualisierungsscript"}. {"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 moderated","Raum moderiert machen"}. {"Make room password protected","Raum mit Passwort schützen"}. @@ -185,6 +191,7 @@ {"Memory","Speicher"}. {"Message body","Nachrichtentext"}. {"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"}. {"moderators only","ausschliesslich Moderatoren"}. {"Modified modules","Geänderte Module"}. @@ -199,6 +206,7 @@ {"Nickname","Benutzername"}. {"Nickname Registration at ","Registrieren des Benutzernames auf"}. {"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 Data","Keine Daten"}. {"Node ID","Knoten-ID"}. @@ -227,6 +235,7 @@ {"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 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 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"}. @@ -250,6 +259,7 @@ {"Persist items to storage","Einträge dauerhaft speichern"}. {"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, 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"}. {"Port ~b","Port ~b"}. {"Port","Port"}. @@ -338,7 +348,7 @@ {"Sunday","Sonntag"}. {"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"}. -{"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 collections with which a node is affiliated","Sammlungen, mit denen ein Knoten verknüpft ist"}. {"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 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 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 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","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 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 room is not anonymous","Dieser Raum ist nicht anonym"}. {"Thursday","Donnerstag"}. {"Time delay","Zeitverzögerung"}. {"Time","Zeit"}. {"To","An"}. +{"Too many CAPTCHA requests","Zu viele CAPTCHA Anfragen"}. {"To ~s","An ~s"}. {"Traffic rate limit is exceeded","Datenratenlimit wurde überschritten"}. {"Transactions Aborted:","Abgebrochene Transaktionen:"}. @@ -365,7 +376,6 @@ {"Transactions Logged:","Protokollierte Transaktionen:"}. {"Transactions Restarted:","Neu gestartete Transaktionen:"}. {"Tuesday","Dienstag"}. -{"Unable to generate a captcha","Konnte Captcha nicht erstellen"}. {"Unable to generate a CAPTCHA","Konnte CAPTCHA nicht erstellen"}. {"Unauthorized","Nicht berechtigt"}. {"Unregister","Abmelden"}. @@ -380,6 +390,7 @@ {"Use of STARTTLS required","Verwendung von STARTTLS erforderlich"}. {"User ","Benutzer "}. {"User","Benutzer"}. +{"User JID","Benutzer JID"}. {"User Management","Benutzerverwaltung"}. {"Username:","Benutzername:"}. {"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"}. {"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"}. +{"Voice request","Anfrage für Sprachrechte"}. +{"Voice requests are disabled in this conference","Anfragen für Sprachrechte sind in diesem Raum deaktiviert"}. {"Wednesday","Mittwoch"}. {"When to send the last published item","Wann soll das letzte veröffentlichte Objekt gesendet werden"}. {"Whether to allow subscriptions","Ob Abonnements erlaubt sind"}. diff --git a/src/msgs/de.po b/src/msgs/de.po index 30f4d7c4b..7eb0b3b5f 100644 --- a/src/msgs/de.po +++ b/src/msgs/de.po @@ -25,11 +25,11 @@ msgstr "Verwendung von STARTTLS erforderlich" msgid "No resource provided" msgstr "Keine Ressource angegeben" -#: ejabberd_c2s.erl:1149 +#: ejabberd_c2s.erl:1197 msgid "Replaced by new connection" msgstr "Durch neue Verbindung ersetzt" -#: ejabberd_c2s.erl:1837 +#: ejabberd_c2s.erl:1885 msgid "Your active privacy list has denied the routing of this stanza." msgstr "" "Ihre aktive Privacy Liste hat die Weiterleitung des Stanzas unterbunden." @@ -53,7 +53,7 @@ msgid "CAPTCHA web page" msgstr "CAPTCHA Webseite" #: ejabberd_captcha.erl:307 -msgid "The captcha is valid." +msgid "The CAPTCHA is valid." msgstr "Die Verifizierung ist gültig." #: mod_adhoc.erl:95 mod_adhoc.erl:125 mod_adhoc.erl:143 mod_adhoc.erl:161 @@ -68,65 +68,68 @@ msgstr "Ping" msgid "Pong" msgstr "Pong" -#: mod_announce.erl:506 +#: mod_announce.erl:507 mod_announce_odbc.erl:499 msgid "Really delete message of the day?" msgstr "Die Nachricht des Tages wirklich löschen?" -#: mod_announce.erl:514 mod_configure.erl:1083 mod_configure.erl:1128 +#: mod_announce.erl:515 mod_announce_odbc.erl:507 mod_configure.erl:1083 +#: mod_configure.erl:1128 msgid "Subject" msgstr "Betreff" -#: mod_announce.erl:519 mod_configure.erl:1088 mod_configure.erl:1133 +#: mod_announce.erl:520 mod_announce_odbc.erl:512 mod_configure.erl:1088 +#: mod_configure.erl:1133 msgid "Message body" msgstr "Nachrichtentext" -#: mod_announce.erl:599 +#: mod_announce.erl:600 mod_announce_odbc.erl:592 msgid "No body provided for announce message" msgstr "Kein Text für die Ankündigung angegeben" -#: mod_announce.erl:634 +#: mod_announce.erl:635 mod_announce_odbc.erl:627 msgid "Announcements" msgstr "Ankündigungen" -#: mod_announce.erl:636 +#: mod_announce.erl:637 mod_announce_odbc.erl:629 msgid "Send announcement to all users" msgstr "Sende Ankündigung an alle Benutzer" -#: mod_announce.erl:638 +#: mod_announce.erl:639 mod_announce_odbc.erl:631 msgid "Send announcement to all users on all hosts" msgstr "Sende Ankündigung an alle Benutzer auf allen Hosts" -#: mod_announce.erl:640 +#: mod_announce.erl:641 mod_announce_odbc.erl:633 msgid "Send announcement to all online users" msgstr "Sende Ankündigung an alle angemeldeten Benutzer" -#: mod_announce.erl:642 mod_configure.erl:1078 mod_configure.erl:1123 +#: mod_announce.erl:643 mod_announce_odbc.erl:635 mod_configure.erl:1078 +#: mod_configure.erl:1123 msgid "Send announcement to all online users on all hosts" msgstr "Sende Ankündigung an alle angemeldeten Benutzer auf allen Hosts" -#: mod_announce.erl:644 +#: mod_announce.erl:645 mod_announce_odbc.erl:637 msgid "Set message of the day and send to online users" msgstr "Setze Nachricht des Tages und sende sie an alle angemeldeten Benutzer" -#: mod_announce.erl:646 +#: mod_announce.erl:647 mod_announce_odbc.erl:639 msgid "Set message of the day on all hosts and send to online users" msgstr "" "Setze Nachricht des Tages auf allen Hosts und sende sie an alle angemeldeten " "Benutzer" -#: mod_announce.erl:648 +#: mod_announce.erl:649 mod_announce_odbc.erl:641 msgid "Update message of the day (don't send)" msgstr "Aktualisiere Nachricht des Tages (nicht senden)" -#: mod_announce.erl:650 +#: mod_announce.erl:651 mod_announce_odbc.erl:643 msgid "Update message of the day on all hosts (don't send)" msgstr "Aktualisiere Nachricht des Tages auf allen Hosts (nicht senden)" -#: mod_announce.erl:652 +#: mod_announce.erl:653 mod_announce_odbc.erl:645 msgid "Delete message of the day" msgstr "Lösche Nachricht des Tages" -#: mod_announce.erl:654 +#: mod_announce.erl:655 mod_announce_odbc.erl:647 msgid "Delete message of the day on all hosts" msgstr "Lösche Nachricht des Tages auf allen Hosts" @@ -135,7 +138,7 @@ msgstr "Lösche Nachricht des Tages auf allen Hosts" msgid "Configuration" msgstr "Konfiguration" -#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1934 +#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1936 msgid "Database" msgstr "Datenbank" @@ -147,7 +150,7 @@ msgstr "Module starten" msgid "Stop Modules" msgstr "Module stoppen" -#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1935 +#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1937 msgid "Backup" msgstr "Datensicherung" @@ -176,7 +179,7 @@ msgid "Shut Down Service" msgstr "Dienst herunterfahren" #: mod_configure.erl:145 mod_configure.erl:518 mod_configure.erl:1197 -#: web/ejabberd_web_admin.erl:1528 +#: web/ejabberd_web_admin.erl:1527 msgid "Add User" msgstr "Benutzer hinzufügen" @@ -228,7 +231,7 @@ msgid "User Management" msgstr "Benutzerverwaltung" #: mod_configure.erl:500 web/ejabberd_web_admin.erl:1058 -#: web/ejabberd_web_admin.erl:1463 +#: web/ejabberd_web_admin.erl:1462 msgid "Online Users" msgstr "Angemeldete Benutzer" @@ -240,15 +243,15 @@ msgstr "Alle Benutzer" msgid "Outgoing s2s Connections" msgstr "Ausgehende s2s-Verbindungen" -#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1905 +#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1907 msgid "Running Nodes" msgstr "Aktive Knoten" -#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1907 +#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1909 msgid "Stopped Nodes" msgstr "Inaktive Knoten" -#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1951 +#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1953 msgid "Modules" msgstr "Module" @@ -379,15 +382,15 @@ msgstr "Zugangsregeln" #: mod_configure.erl:1200 mod_configure.erl:1222 mod_configure.erl:1234 #: mod_configure.erl:1246 mod_configure.erl:1258 mod_configure.erl:1275 -#: mod_configure.erl:1287 mod_configure.erl:1652 mod_configure.erl:1702 -#: mod_configure.erl:1723 mod_roster.erl:943 mod_roster_odbc.erl:1048 -#: mod_vcard.erl:466 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:442 +#: mod_configure.erl:1287 mod_configure.erl:1650 mod_configure.erl:1700 +#: mod_configure.erl:1721 mod_roster.erl:943 mod_roster_odbc.erl:1060 +#: mod_vcard.erl:472 mod_vcard_ldap.erl:554 mod_vcard_odbc.erl:448 msgid "Jabber ID" msgstr "Jabber ID" -#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1653 -#: mod_configure.erl:1865 mod_muc/mod_muc_room.erl:2970 mod_register.erl:235 -#: web/ejabberd_web_admin.erl:1521 +#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1651 +#: mod_configure.erl:1863 mod_muc/mod_muc_room.erl:3224 mod_register.erl:235 +#: web/ejabberd_web_admin.erl:1520 msgid "Password" msgstr "Passwort" @@ -403,71 +406,72 @@ msgstr "Anzahl der registrierten Benutzer" msgid "Number of online users" msgstr "Anzahl der angemeldeten Benutzer" -#: mod_configure.erl:1684 web/ejabberd_web_admin.erl:1589 -#: web/ejabberd_web_admin.erl:1741 +#: mod_configure.erl:1682 web/ejabberd_web_admin.erl:1588 +#: web/ejabberd_web_admin.erl:1743 msgid "Never" msgstr "Nie" -#: mod_configure.erl:1698 web/ejabberd_web_admin.erl:1602 -#: web/ejabberd_web_admin.erl:1754 +#: mod_configure.erl:1696 web/ejabberd_web_admin.erl:1601 +#: web/ejabberd_web_admin.erl:1756 msgid "Online" msgstr "Angemeldet" -#: mod_configure.erl:1703 +#: mod_configure.erl:1701 msgid "Last login" msgstr "Letzte Anmeldung" -#: mod_configure.erl:1724 +#: mod_configure.erl:1722 msgid "Roster size" msgstr "Kontaktlistengröße" -#: mod_configure.erl:1725 +#: mod_configure.erl:1723 msgid "IP addresses" -msgstr "IP Addresse" +msgstr "IP Adressen" -#: mod_configure.erl:1726 +#: mod_configure.erl:1724 msgid "Resources" msgstr "Ressourcen" -#: mod_configure.erl:1852 +#: mod_configure.erl:1850 msgid "Administration of " msgstr "Administration von " -#: mod_configure.erl:1855 +#: mod_configure.erl:1853 msgid "Action on user" msgstr "Aktion auf Benutzer" -#: mod_configure.erl:1859 +#: mod_configure.erl:1857 msgid "Edit Properties" msgstr "Einstellungen ändern" -#: mod_configure.erl:1862 web/ejabberd_web_admin.erl:1767 +#: mod_configure.erl:1860 web/ejabberd_web_admin.erl:1769 msgid "Remove User" msgstr "Benutzer löschen" -#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:336 +#: mod_irc/mod_irc.erl:201 mod_irc/mod_irc_odbc.erl:196 +#: mod_muc/mod_muc.erl:336 mod_muc/mod_muc_odbc.erl:342 msgid "Access denied by service policy" msgstr "Zugang aufgrund der Dienstrichtlinien verweigert" -#: mod_irc/mod_irc.erl:400 +#: mod_irc/mod_irc.erl:401 mod_irc/mod_irc_odbc.erl:398 msgid "IRC Transport" msgstr "IRC Transport" -#: mod_irc/mod_irc.erl:427 +#: mod_irc/mod_irc.erl:428 mod_irc/mod_irc_odbc.erl:425 msgid "ejabberd IRC module" msgstr "ejabberd IRC-Modul" -#: mod_irc/mod_irc.erl:558 +#: mod_irc/mod_irc.erl:559 mod_irc/mod_irc_odbc.erl:568 msgid "You need an x:data capable client to configure mod_irc settings" msgstr "" "Sie benötigen einen Client, der x:data unterstützt, um die mod_irc-" "Einstellungen zu konfigurieren" -#: mod_irc/mod_irc.erl:565 +#: mod_irc/mod_irc.erl:566 mod_irc/mod_irc_odbc.erl:575 msgid "Registration in mod_irc for " msgstr "Registrierung in mod_irc für " -#: mod_irc/mod_irc.erl:570 +#: mod_irc/mod_irc.erl:571 mod_irc/mod_irc_odbc.erl:580 msgid "" "Enter username, encodings, ports and passwords you wish to use for " "connecting to IRC servers" @@ -475,11 +479,11 @@ msgstr "" "Geben Sie Benutzernamen und Zeichenkodierung für die Verbindung zum IRC-" "Server an" -#: mod_irc/mod_irc.erl:575 +#: mod_irc/mod_irc.erl:576 mod_irc/mod_irc_odbc.erl:585 msgid "IRC Username" msgstr "IRC-Benutzername" -#: mod_irc/mod_irc.erl:585 +#: mod_irc/mod_irc.erl:586 mod_irc/mod_irc_odbc.erl:595 msgid "" "If you want to specify different ports, passwords, encodings for IRC " "servers, fill this list with values in format '{\"irc server\", \"encoding" @@ -491,7 +495,7 @@ msgstr "" "\", \"Kodierung\", Port, \"Passwort\"}'. Standardmäßig benutzt dieser " "Dienst die \"~s\" Kodierung, den Port ~p und kein Passwort." -#: mod_irc/mod_irc.erl:597 +#: mod_irc/mod_irc.erl:598 mod_irc/mod_irc_odbc.erl:607 msgid "" "Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." @@ -499,35 +503,36 @@ msgstr "" "Beispiel: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta." "fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." -#: mod_irc/mod_irc.erl:602 +#: mod_irc/mod_irc.erl:603 mod_irc/mod_irc_odbc.erl:612 msgid "Connections parameters" msgstr "Verbindungsparameter" -#: mod_irc/mod_irc.erl:727 +#: mod_irc/mod_irc.erl:728 mod_irc/mod_irc_odbc.erl:757 msgid "Join IRC channel" msgstr "IRC Channel beitreten" -#: mod_irc/mod_irc.erl:731 +#: mod_irc/mod_irc.erl:732 mod_irc/mod_irc_odbc.erl:761 msgid "IRC channel (don't put the first #)" msgstr "IRC Channel (ohne dem ersten #)" -#: mod_irc/mod_irc.erl:736 +#: mod_irc/mod_irc.erl:737 mod_irc/mod_irc_odbc.erl:766 msgid "IRC server" msgstr "IRC Server" -#: mod_irc/mod_irc.erl:769 mod_irc/mod_irc.erl:773 +#: mod_irc/mod_irc.erl:770 mod_irc/mod_irc.erl:774 +#: mod_irc/mod_irc_odbc.erl:799 mod_irc/mod_irc_odbc.erl:803 msgid "Join the IRC channel here." msgstr "Hier den IRC Channel beitreten." -#: mod_irc/mod_irc.erl:777 +#: mod_irc/mod_irc.erl:778 mod_irc/mod_irc_odbc.erl:807 msgid "Join the IRC channel in this Jabber ID: ~s" msgstr "Den IRC Channel mit dieser Jabber ID beitreten: ~s" -#: mod_irc/mod_irc.erl:862 +#: mod_irc/mod_irc.erl:863 mod_irc/mod_irc_odbc.erl:904 msgid "IRC settings" msgstr "IRC Einstellungen" -#: mod_irc/mod_irc.erl:867 +#: mod_irc/mod_irc.erl:868 mod_irc/mod_irc_odbc.erl:909 msgid "" "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 " @@ -537,73 +542,74 @@ msgstr "" "Drücken sie 'Mehr' um leere Felder hinzuzufügen. Drücken sie 'Beenden' um " "die Einstellungen zu speichern." -#: mod_irc/mod_irc.erl:873 +#: mod_irc/mod_irc.erl:874 mod_irc/mod_irc_odbc.erl:915 msgid "IRC username" msgstr "IRC Benutzername" -#: mod_irc/mod_irc.erl:922 +#: mod_irc/mod_irc.erl:923 mod_irc/mod_irc_odbc.erl:964 msgid "Password ~b" msgstr "Passwort ~b" -#: mod_irc/mod_irc.erl:927 +#: mod_irc/mod_irc.erl:928 mod_irc/mod_irc_odbc.erl:969 msgid "Port ~b" msgstr "Port ~b" -#: mod_irc/mod_irc.erl:932 +#: mod_irc/mod_irc.erl:933 mod_irc/mod_irc_odbc.erl:974 msgid "Encoding for server ~b" msgstr "Kodierung für Server ~b" -#: mod_irc/mod_irc.erl:941 +#: mod_irc/mod_irc.erl:942 mod_irc/mod_irc_odbc.erl:983 msgid "Server ~b" msgstr "Server ~b" -#: mod_muc/mod_muc.erl:449 +#: mod_muc/mod_muc.erl:449 mod_muc/mod_muc_odbc.erl:456 msgid "Only service administrators are allowed to send service messages" msgstr "" "Nur Service-Administratoren sind berechtigt, Servicenachrichten zu versenden" -#: mod_muc/mod_muc.erl:493 +#: mod_muc/mod_muc.erl:493 mod_muc/mod_muc_odbc.erl:500 msgid "Room creation is denied by service policy" msgstr "Anlegen des Raumes aufgrund der Dienstrichtlinien verweigert" -#: mod_muc/mod_muc.erl:500 +#: mod_muc/mod_muc.erl:500 mod_muc/mod_muc_odbc.erl:507 msgid "Conference room does not exist" msgstr "Konferenzraum existiert nicht" -#: mod_muc/mod_muc.erl:581 +#: mod_muc/mod_muc.erl:582 mod_muc/mod_muc_odbc.erl:595 msgid "Chatrooms" msgstr "Chaträume" -#: mod_muc/mod_muc.erl:711 +#: mod_muc/mod_muc.erl:712 mod_muc/mod_muc_odbc.erl:729 msgid "You need a client that supports x:data to register the nickname" msgstr "" "Sie benötigen einen Client, der x:data unterstützt, um Ihren Benutzernamen " "zu registrieren" -#: mod_muc/mod_muc.erl:717 +#: mod_muc/mod_muc.erl:718 mod_muc/mod_muc_odbc.erl:735 msgid "Nickname Registration at " msgstr "Registrieren des Benutzernames auf" -#: mod_muc/mod_muc.erl:721 +#: mod_muc/mod_muc.erl:722 mod_muc/mod_muc_odbc.erl:739 msgid "Enter nickname you want to register" msgstr "Geben sie den zu registrierenden Benutzernamen ein" -#: mod_muc/mod_muc.erl:722 mod_roster.erl:944 mod_roster_odbc.erl:1049 -#: mod_vcard.erl:358 mod_vcard.erl:471 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:447 +#: mod_muc/mod_muc.erl:723 mod_muc/mod_muc_odbc.erl:740 +#: mod_muc/mod_muc_room.erl:3810 mod_roster.erl:944 mod_roster_odbc.erl:1061 +#: mod_vcard.erl:364 mod_vcard.erl:477 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:453 msgid "Nickname" msgstr "Benutzername" -#: mod_muc/mod_muc.erl:761 mod_muc/mod_muc_room.erl:933 -#: mod_muc/mod_muc_room.erl:1577 +#: mod_muc/mod_muc.erl:762 mod_muc/mod_muc_odbc.erl:784 +#: mod_muc/mod_muc_room.erl:1064 mod_muc/mod_muc_room.erl:1787 msgid "That nickname is registered by another person" msgstr "Dieser Benutzername wurde bereits von jemand anderem registriert" -#: mod_muc/mod_muc.erl:787 +#: mod_muc/mod_muc.erl:788 mod_muc/mod_muc_odbc.erl:811 msgid "You must fill in field \"Nickname\" in the form" msgstr "Sie müssen das Feld \"Benutzername\" ausfüllen" -#: mod_muc/mod_muc.erl:807 +#: mod_muc/mod_muc.erl:808 mod_muc/mod_muc_odbc.erl:831 msgid "ejabberd MUC module" msgstr "ejabberd MUC-Modul" @@ -613,7 +619,7 @@ msgstr "Chatraum-Konfiguration geändert" #: mod_muc/mod_muc_log.erl:384 msgid "joins the room" -msgstr "kommt in den Raum" +msgstr "betretet den Raum" #: mod_muc/mod_muc_log.erl:387 mod_muc/mod_muc_log.erl:390 msgid "leaves the room" @@ -643,8 +649,8 @@ msgstr "wurde wegen Systemabschaltung gekickt" msgid "is now known as" msgstr "ist nun bekannt als" -#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:689 -#: mod_muc/mod_muc_room.erl:2138 +#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:688 +#: mod_muc/mod_muc_room.erl:2393 msgid " has set the subject to: " msgstr " hat das Thema geändert auf: " @@ -740,267 +746,318 @@ msgstr "November" msgid "December" msgstr "Dezember" -#: mod_muc/mod_muc_log.erl:751 +#: mod_muc/mod_muc_log.erl:750 msgid "Room Configuration" msgstr "Raum-Konfiguration" -#: mod_muc/mod_muc_log.erl:760 +#: mod_muc/mod_muc_log.erl:759 msgid "Room Occupants" msgstr "Teilnehmer in diesem Raum" -#: mod_muc/mod_muc_room.erl:170 +#: mod_muc/mod_muc_room.erl:174 msgid "Traffic rate limit is exceeded" msgstr "Datenratenlimit wurde überschritten" -#: mod_muc/mod_muc_room.erl:242 +#: mod_muc/mod_muc_room.erl:246 msgid "" "This participant is kicked from the room because he sent an error message" msgstr "" -"Dieser Teilnehmer wurde aus dem Raum geworfen, da er eine Fehlernachricht " -"gesendet hat" +"Dieser Teilnehmer wurde aus dem Raum geworfen, da er eine fehlerhafte " +"Nachricht gesendet hat" -#: mod_muc/mod_muc_room.erl:251 +#: mod_muc/mod_muc_room.erl:255 msgid "It is not allowed to send private messages to the conference" msgstr "Es ist nicht erlaubt private Nachrichten an den Raum zu schicken" -#: mod_muc/mod_muc_room.erl:296 +#: mod_muc/mod_muc_room.erl:332 +msgid "Please, wait for a while before sending new voice request" +msgstr "" +"Bitte warten sie ein wenig, bevor sie eine weitere Anfrage für Sprachrechte " +"senden" + +#: mod_muc/mod_muc_room.erl:347 +msgid "Voice requests are disabled in this conference" +msgstr "Anfragen für Sprachrechte sind in diesem Raum deaktiviert" + +#: mod_muc/mod_muc_room.erl:364 +msgid "Failed to extract JID from your voice request approval" +msgstr "" +"Fehler beim Auslesen der JID aus der Anfragenbestätigung für Sprachrechte" + +#: mod_muc/mod_muc_room.erl:393 +msgid "Only moderators can approve voice requests" +msgstr "Nur Moderatoren können Anfragen für Sprachrechte bestätigen" + +#: mod_muc/mod_muc_room.erl:408 msgid "Improper message type" msgstr "Unzulässiger Nachrichtentyp" -#: mod_muc/mod_muc_room.erl:406 +#: mod_muc/mod_muc_room.erl:518 msgid "" "This participant is kicked from the room because he sent an error message to " "another participant" msgstr "" -"Dieser Teilnehmer wurde aus dem Raum geworfen, da er eine Fehlernachricht an " -"einen anderen Teilnehmer gesendet hat" +"Dieser Teilnehmer wurde aus dem Raum geworfen, da er eine fehlerhafte " +"Nachricht an einen anderen Teilnehmer gesendet hat" -#: mod_muc/mod_muc_room.erl:419 +#: mod_muc/mod_muc_room.erl:531 msgid "It is not allowed to send private messages of type \"groupchat\"" msgstr "" "Es ist nicht erlaubt private Nachrichten des Typs \"Gruppenchat\" zu senden" -#: mod_muc/mod_muc_room.erl:431 mod_muc/mod_muc_room.erl:486 +#: mod_muc/mod_muc_room.erl:543 mod_muc/mod_muc_room.erl:611 msgid "Recipient is not in the conference room" msgstr "Der Empfänger ist nicht im Raum" -#: mod_muc/mod_muc_room.erl:451 mod_muc/mod_muc_room.erl:829 -#: mod_muc/mod_muc_room.erl:3609 -msgid "Only occupants are allowed to send messages to the conference" -msgstr "Nur Teilnehmer dürfen Nachrichten an den Raum schicken" - -#: mod_muc/mod_muc_room.erl:460 +#: mod_muc/mod_muc_room.erl:564 mod_muc/mod_muc_room.erl:585 msgid "It is not allowed to send private messages" msgstr "Es ist nicht erlaubt private Nachrichten zu senden" -#: mod_muc/mod_muc_room.erl:509 +#: mod_muc/mod_muc_room.erl:576 mod_muc/mod_muc_room.erl:956 +#: mod_muc/mod_muc_room.erl:4040 +msgid "Only occupants are allowed to send messages to the conference" +msgstr "Nur Teilnehmer dürfen Nachrichten an den Raum schicken" + +#: mod_muc/mod_muc_room.erl:634 msgid "Only occupants are allowed to send queries to the conference" msgstr "Nur Teilnehmer sind berechtigt Anfragen an die Konferenz zu senden" -#: mod_muc/mod_muc_room.erl:521 +#: mod_muc/mod_muc_room.erl:646 msgid "Queries to the conference members are not allowed in this room" msgstr "Anfragen an die Teilnehmer sind in diesem Raum nicht erlaubt" -#: mod_muc/mod_muc_room.erl:805 +#: mod_muc/mod_muc_room.erl:932 msgid "" "Only moderators and participants are allowed to change the subject in this " "room" msgstr "Nur Moderatoren und Mitglieder dürfen das Thema in diesem Raum ändern" -#: mod_muc/mod_muc_room.erl:810 +#: mod_muc/mod_muc_room.erl:937 msgid "Only moderators are allowed to change the subject in this room" msgstr "Nur Moderatoren dürfen das Thema in diesem Raum ändern" -#: mod_muc/mod_muc_room.erl:820 +#: mod_muc/mod_muc_room.erl:947 msgid "Visitors are not allowed to send messages to all occupants" msgstr "Besucher dürfen nicht an alle Teilnehmer Nachrichten verschicken" -#: mod_muc/mod_muc_room.erl:891 +#: mod_muc/mod_muc_room.erl:1021 msgid "" "This participant is kicked from the room because he sent an error presence" msgstr "" "Dieser Teilnehmer wurde aus dem Raum gekickt, da er einen fehlerhaften " "Status gesendet hat" -#: mod_muc/mod_muc_room.erl:909 +#: mod_muc/mod_muc_room.erl:1040 msgid "Visitors are not allowed to change their nicknames in this room" msgstr "Besucher dürfen in diesem Raum ihren Benutzernamen nicht ändern" -#: mod_muc/mod_muc_room.erl:922 mod_muc/mod_muc_room.erl:1569 +#: mod_muc/mod_muc_room.erl:1053 mod_muc/mod_muc_room.erl:1779 msgid "That nickname is already in use by another occupant" msgstr "Dieser Benutzername wird bereits von einem Teilnehmer genutzt" -#: mod_muc/mod_muc_room.erl:1558 +#: mod_muc/mod_muc_room.erl:1768 msgid "You have been banned from this room" msgstr "Sie wurden aus diesem Raum verbannt" -#: mod_muc/mod_muc_room.erl:1561 +#: mod_muc/mod_muc_room.erl:1771 msgid "Membership is required to enter this room" msgstr "Um diesen Raum zu betreten müssen sie Mitglied sein" -#: mod_muc/mod_muc_room.erl:1597 +#: mod_muc/mod_muc_room.erl:1807 msgid "This room is not anonymous" msgstr "Dieser Raum ist nicht anonym" -#: mod_muc/mod_muc_room.erl:1623 +#: mod_muc/mod_muc_room.erl:1833 msgid "A password is required to enter this room" msgstr "Sie brauchen ein Passwort um diesen Raum zu betreten" -#: mod_muc/mod_muc_room.erl:1645 mod_register.erl:246 +#: mod_muc/mod_muc_room.erl:1855 mod_register.erl:246 msgid "Too many CAPTCHA requests" -msgstr "" +msgstr "Zu viele CAPTCHA Anfragen" -#: mod_muc/mod_muc_room.erl:1654 -msgid "Unable to generate a captcha" -msgstr "Konnte Captcha nicht erstellen" +#: mod_muc/mod_muc_room.erl:1864 mod_register.erl:251 +msgid "Unable to generate a CAPTCHA" +msgstr "Konnte CAPTCHA nicht erstellen" -#: mod_muc/mod_muc_room.erl:1664 +#: mod_muc/mod_muc_room.erl:1874 msgid "Incorrect password" msgstr "Falsches Passwort" -#: mod_muc/mod_muc_room.erl:2193 +#: mod_muc/mod_muc_room.erl:2448 msgid "Administrator privileges required" msgstr "Administratorenrechte benötigt" -#: mod_muc/mod_muc_room.erl:2208 +#: mod_muc/mod_muc_room.erl:2463 msgid "Moderator privileges required" msgstr "Moderatorrechte benötigt" -#: mod_muc/mod_muc_room.erl:2363 +#: mod_muc/mod_muc_room.erl:2619 msgid "Jabber ID ~s is invalid" msgstr "Die Jabber-ID ~s ist ungültig" -#: mod_muc/mod_muc_room.erl:2377 +#: mod_muc/mod_muc_room.erl:2633 msgid "Nickname ~s does not exist in the room" msgstr "Der Benutzername ~s existiert im Raum nicht" -#: mod_muc/mod_muc_room.erl:2403 mod_muc/mod_muc_room.erl:2797 +#: mod_muc/mod_muc_room.erl:2659 mod_muc/mod_muc_room.erl:3049 msgid "Invalid affiliation: ~s" msgstr "Ungültige Mitgliedschaft: ~s" -#: mod_muc/mod_muc_room.erl:2460 +#: mod_muc/mod_muc_room.erl:2713 msgid "Invalid role: ~s" msgstr "Ungültige Rolle: ~s" -#: mod_muc/mod_muc_room.erl:2774 mod_muc/mod_muc_room.erl:2810 +#: mod_muc/mod_muc_room.erl:3026 mod_muc/mod_muc_room.erl:3062 msgid "Owner privileges required" msgstr "Besitzerrechte benötigt" -#: mod_muc/mod_muc_room.erl:2941 +#: mod_muc/mod_muc_room.erl:3195 msgid "Configuration of room ~s" msgstr "Konfiguration für Raum ~s" -#: mod_muc/mod_muc_room.erl:2946 +#: mod_muc/mod_muc_room.erl:3200 msgid "Room title" msgstr "Raumname" -#: mod_muc/mod_muc_room.erl:2949 mod_muc/mod_muc_room.erl:3388 +#: mod_muc/mod_muc_room.erl:3203 mod_muc/mod_muc_room.erl:3692 msgid "Room description" msgstr "Raum Beschreibung" -#: mod_muc/mod_muc_room.erl:2956 +#: mod_muc/mod_muc_room.erl:3210 msgid "Make room persistent" msgstr "Raum persistent machen" -#: mod_muc/mod_muc_room.erl:2961 +#: mod_muc/mod_muc_room.erl:3215 msgid "Make room public searchable" msgstr "Raum öffentlich suchbar machen" -#: mod_muc/mod_muc_room.erl:2964 +#: mod_muc/mod_muc_room.erl:3218 msgid "Make participants list public" msgstr "Teilnehmerliste öffentlich machen" -#: mod_muc/mod_muc_room.erl:2967 +#: mod_muc/mod_muc_room.erl:3221 msgid "Make room password protected" msgstr "Raum mit Passwort schützen" -#: mod_muc/mod_muc_room.erl:2978 +#: mod_muc/mod_muc_room.erl:3232 msgid "Maximum Number of Occupants" msgstr "Maximale Anzahl von Teilnehmern" -#: mod_muc/mod_muc_room.erl:2985 +#: mod_muc/mod_muc_room.erl:3239 msgid "No limit" msgstr "Keine Begrenzung" -#: mod_muc/mod_muc_room.erl:2996 +#: mod_muc/mod_muc_room.erl:3250 msgid "Present real Jabber IDs to" msgstr "Echte Jabber-IDs anzeigen für" -#: mod_muc/mod_muc_room.erl:3004 +#: mod_muc/mod_muc_room.erl:3258 mod_muc/mod_muc_room.erl:3292 msgid "moderators only" msgstr "ausschliesslich Moderatoren" -#: mod_muc/mod_muc_room.erl:3006 +#: mod_muc/mod_muc_room.erl:3260 mod_muc/mod_muc_room.erl:3294 msgid "anyone" -msgstr "jeder" +msgstr "jeden" -#: mod_muc/mod_muc_room.erl:3008 +#: mod_muc/mod_muc_room.erl:3262 msgid "Make room members-only" msgstr "Raum nur für Mitglieder zugänglich machen" -#: mod_muc/mod_muc_room.erl:3011 +#: mod_muc/mod_muc_room.erl:3265 msgid "Make room moderated" msgstr "Raum moderiert machen" -#: mod_muc/mod_muc_room.erl:3014 +#: mod_muc/mod_muc_room.erl:3268 msgid "Default users as participants" msgstr "Standardbenutzer als Teilnehmer" -#: mod_muc/mod_muc_room.erl:3017 +#: mod_muc/mod_muc_room.erl:3271 msgid "Allow users to change the subject" msgstr "Erlaube Benutzern das Thema zu ändern" -#: mod_muc/mod_muc_room.erl:3020 +#: mod_muc/mod_muc_room.erl:3274 msgid "Allow users to send private messages" msgstr "Erlaube Benutzern private Nachrichten zu senden" -#: mod_muc/mod_muc_room.erl:3023 -msgid "Allow users to query other users" -msgstr "Erlaube Benutzern andere Benutzer abzufragen" +#: mod_muc/mod_muc_room.erl:3279 +msgid "Allow visitors to send private messages to" +msgstr "Erlaube Besuchern das Senden von privaten Nachrichten an" -#: mod_muc/mod_muc_room.erl:3026 +#: mod_muc/mod_muc_room.erl:3290 +msgid "nobody" +msgstr "niemanden" + +#: mod_muc/mod_muc_room.erl:3296 +msgid "Allow users to query other users" +msgstr "Erlaube Benutzern Informationen über andere Benutzer abzufragen" + +#: mod_muc/mod_muc_room.erl:3299 msgid "Allow users to send invites" msgstr "Erlaube Benutzern Einladungen zu senden" -#: mod_muc/mod_muc_room.erl:3029 +#: mod_muc/mod_muc_room.erl:3302 msgid "Allow visitors to send status text in presence updates" -msgstr "Erlaube Besuchern einen Text bei Statusänderung zu setzen" +msgstr "Erlaube Besuchern einen Text bei Statusänderung zu senden" -#: mod_muc/mod_muc_room.erl:3032 +#: mod_muc/mod_muc_room.erl:3305 msgid "Allow visitors to change nickname" msgstr "Erlaube Besuchern ihren Spitznamen zu ändern" -#: mod_muc/mod_muc_room.erl:3038 -msgid "Make room captcha protected" +#: mod_muc/mod_muc_room.erl:3308 +msgid "Allow visitors to send voice requests" +msgstr "Anfragen von Sprachrechten für Benutzer erlauben" + +#: mod_muc/mod_muc_room.erl:3311 +msgid "Minimum interval between voice requests (in seconds)" +msgstr "Mindestdauer zwischen Anfragen für Sprachrechte (in Sekunden)" + +#: mod_muc/mod_muc_room.erl:3317 +msgid "Make room CAPTCHA protected" msgstr "Raum mit Verifizierung (Captcha) versehen" -#: mod_muc/mod_muc_room.erl:3043 +#: mod_muc/mod_muc_room.erl:3322 msgid "Exclude Jabber IDs from CAPTCHA challenge" -msgstr "" +msgstr "Von CAPTCHA Überprüfung ausgeschlossene Jabber IDs" -#: mod_muc/mod_muc_room.erl:3050 +#: mod_muc/mod_muc_room.erl:3329 msgid "Enable logging" msgstr "Protokollierung aktivieren" -#: mod_muc/mod_muc_room.erl:3058 +#: mod_muc/mod_muc_room.erl:3337 msgid "You need an x:data capable client to configure room" msgstr "" "Sie benötigen einen Client, der x:data unterstützt, um den Raum zu " "konfigurieren" -#: mod_muc/mod_muc_room.erl:3390 +#: mod_muc/mod_muc_room.erl:3694 msgid "Number of occupants" msgstr "Anzahl der Teilnehmer" -#: mod_muc/mod_muc_room.erl:3446 +#: mod_muc/mod_muc_room.erl:3750 msgid "private, " msgstr "privat, " -#: mod_muc/mod_muc_room.erl:3529 +#: mod_muc/mod_muc_room.erl:3799 +msgid "Voice request" +msgstr "Anfrage für Sprachrechte" + +#: mod_muc/mod_muc_room.erl:3803 +msgid "Either approve or decline the voice request." +msgstr "Diese Anfrage für Sprachrechte bestätigen oder ablehnen." + +#: mod_muc/mod_muc_room.erl:3809 +msgid "User JID" +msgstr "Benutzer JID" + +#: mod_muc/mod_muc_room.erl:3811 +msgid "Grant voice to this person?" +msgstr "Sprachrechte dieser Person erteilen?" + +#: mod_muc/mod_muc_room.erl:3960 msgid "~s invites you to the room ~s" msgstr "~s lädt Sie in den Raum ~s ein" -#: mod_muc/mod_muc_room.erl:3538 +#: mod_muc/mod_muc_room.erl:3969 msgid "the password is" msgstr "das Passwort lautet" @@ -1016,14 +1073,15 @@ msgid "~s's Offline Messages Queue" msgstr "~s's Offline-Nachrichten-Warteschlange" #: mod_offline.erl:563 mod_offline_odbc.erl:411 mod_roster.erl:987 -#: mod_roster_odbc.erl:1092 mod_shared_roster.erl:896 -#: mod_shared_roster.erl:1005 web/ejabberd_web_admin.erl:833 +#: mod_roster_odbc.erl:1104 mod_shared_roster.erl:901 +#: mod_shared_roster.erl:1010 mod_shared_roster_odbc.erl:930 +#: mod_shared_roster_odbc.erl:1039 web/ejabberd_web_admin.erl:833 #: web/ejabberd_web_admin.erl:874 web/ejabberd_web_admin.erl:942 #: web/ejabberd_web_admin.erl:978 web/ejabberd_web_admin.erl:1019 -#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1758 -#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1961 -#: web/ejabberd_web_admin.erl:2030 web/ejabberd_web_admin.erl:2134 -#: web/ejabberd_web_admin.erl:2159 web/ejabberd_web_admin.erl:2247 +#: web/ejabberd_web_admin.erl:1508 web/ejabberd_web_admin.erl:1760 +#: web/ejabberd_web_admin.erl:1931 web/ejabberd_web_admin.erl:1963 +#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2135 +#: web/ejabberd_web_admin.erl:2160 web/ejabberd_web_admin.erl:2248 msgid "Submitted" msgstr "Gesendet" @@ -1043,8 +1101,9 @@ msgstr "An" msgid "Packet" msgstr "Paket" -#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:903 -#: web/ejabberd_web_admin.erl:882 web/ejabberd_web_admin.erl:986 +#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:908 +#: mod_shared_roster_odbc.erl:937 web/ejabberd_web_admin.erl:882 +#: web/ejabberd_web_admin.erl:986 msgid "Delete Selected" msgstr "Markierte löschen" @@ -1060,104 +1119,104 @@ msgstr "Alle Offline Nachrichten löschen" msgid "ejabberd SOCKS5 Bytestreams module" msgstr "ejabberd SOCKS5-Bytestreams-Modul" -#: mod_pubsub/mod_pubsub.erl:1119 mod_pubsub/mod_pubsub_odbc.erl:928 +#: mod_pubsub/mod_pubsub.erl:1120 mod_pubsub/mod_pubsub_odbc.erl:929 msgid "Publish-Subscribe" msgstr "Publish-Subscribe" -#: mod_pubsub/mod_pubsub.erl:1213 mod_pubsub/mod_pubsub_odbc.erl:1024 +#: mod_pubsub/mod_pubsub.erl:1214 mod_pubsub/mod_pubsub_odbc.erl:1025 msgid "ejabberd Publish-Subscribe module" msgstr "ejabberd Publish-Subscribe-Modul" -#: mod_pubsub/mod_pubsub.erl:1496 mod_pubsub/mod_pubsub_odbc.erl:1311 +#: mod_pubsub/mod_pubsub.erl:1497 mod_pubsub/mod_pubsub_odbc.erl:1312 msgid "PubSub subscriber request" msgstr "PubSub-Abonnenten-Anfrage" -#: mod_pubsub/mod_pubsub.erl:1498 mod_pubsub/mod_pubsub_odbc.erl:1313 +#: mod_pubsub/mod_pubsub.erl:1499 mod_pubsub/mod_pubsub_odbc.erl:1314 msgid "Choose whether to approve this entity's subscription." msgstr "Wähle Sie, ob dieses Abonnement akzeptiert werden soll." -#: mod_pubsub/mod_pubsub.erl:1504 mod_pubsub/mod_pubsub_odbc.erl:1319 +#: mod_pubsub/mod_pubsub.erl:1505 mod_pubsub/mod_pubsub_odbc.erl:1320 msgid "Node ID" msgstr "Knoten-ID" -#: mod_pubsub/mod_pubsub.erl:1509 mod_pubsub/mod_pubsub_odbc.erl:1324 +#: mod_pubsub/mod_pubsub.erl:1510 mod_pubsub/mod_pubsub_odbc.erl:1325 msgid "Subscriber Address" msgstr "Abonnenten-Adresse" -#: mod_pubsub/mod_pubsub.erl:1515 mod_pubsub/mod_pubsub_odbc.erl:1330 +#: mod_pubsub/mod_pubsub.erl:1516 mod_pubsub/mod_pubsub_odbc.erl:1331 msgid "Allow this Jabber ID to subscribe to this pubsub node?" msgstr "Dieser Jabber-ID das Abonnement dieses pubsub-Knotens erlauben?" -#: mod_pubsub/mod_pubsub.erl:3416 mod_pubsub/mod_pubsub_odbc.erl:3229 +#: mod_pubsub/mod_pubsub.erl:3474 mod_pubsub/mod_pubsub_odbc.erl:3287 msgid "Deliver payloads with event notifications" -msgstr "Nachrichten mit mit Ereignis-Benachrichtigungen zustellen" +msgstr "Nachrichten mit Ereignis-Benachrichtigungen zustellen" -#: mod_pubsub/mod_pubsub.erl:3417 mod_pubsub/mod_pubsub_odbc.erl:3230 +#: mod_pubsub/mod_pubsub.erl:3475 mod_pubsub/mod_pubsub_odbc.erl:3288 msgid "Deliver event notifications" msgstr "Ereignisbenachrichtigung zustellen" -#: mod_pubsub/mod_pubsub.erl:3418 mod_pubsub/mod_pubsub_odbc.erl:3231 +#: mod_pubsub/mod_pubsub.erl:3476 mod_pubsub/mod_pubsub_odbc.erl:3289 msgid "Notify subscribers when the node configuration changes" msgstr "Abonnenten benachrichtigen, wenn sich die Knotenkonfiguration ändert" -#: mod_pubsub/mod_pubsub.erl:3419 mod_pubsub/mod_pubsub_odbc.erl:3232 +#: mod_pubsub/mod_pubsub.erl:3477 mod_pubsub/mod_pubsub_odbc.erl:3290 msgid "Notify subscribers when the node is deleted" msgstr "Abonnenten benachrichtigen, wenn der Knoten gelöscht wird" -#: mod_pubsub/mod_pubsub.erl:3420 mod_pubsub/mod_pubsub_odbc.erl:3233 +#: mod_pubsub/mod_pubsub.erl:3478 mod_pubsub/mod_pubsub_odbc.erl:3291 msgid "Notify subscribers when items are removed from the node" msgstr "Abonnenten benachrichtigen, wenn Einträge vom Knoten entfernt werden" -#: mod_pubsub/mod_pubsub.erl:3421 mod_pubsub/mod_pubsub_odbc.erl:3234 +#: mod_pubsub/mod_pubsub.erl:3479 mod_pubsub/mod_pubsub_odbc.erl:3292 msgid "Persist items to storage" msgstr "Einträge dauerhaft speichern" -#: mod_pubsub/mod_pubsub.erl:3422 mod_pubsub/mod_pubsub_odbc.erl:3235 +#: mod_pubsub/mod_pubsub.erl:3480 mod_pubsub/mod_pubsub_odbc.erl:3293 msgid "A friendly name for the node" msgstr "Ein merkbarer Name für den Knoten" -#: mod_pubsub/mod_pubsub.erl:3423 mod_pubsub/mod_pubsub_odbc.erl:3236 +#: mod_pubsub/mod_pubsub.erl:3481 mod_pubsub/mod_pubsub_odbc.erl:3294 msgid "Max # of items to persist" msgstr "Maximale Anzahl dauerhaft zu speichernder Einträge" -#: mod_pubsub/mod_pubsub.erl:3424 mod_pubsub/mod_pubsub_odbc.erl:3237 +#: mod_pubsub/mod_pubsub.erl:3482 mod_pubsub/mod_pubsub_odbc.erl:3295 msgid "Whether to allow subscriptions" msgstr "Ob Abonnements erlaubt sind" -#: mod_pubsub/mod_pubsub.erl:3425 mod_pubsub/mod_pubsub_odbc.erl:3238 +#: mod_pubsub/mod_pubsub.erl:3483 mod_pubsub/mod_pubsub_odbc.erl:3296 msgid "Specify the access model" msgstr "Geben sie das Zugangsmodell an" -#: mod_pubsub/mod_pubsub.erl:3428 mod_pubsub/mod_pubsub_odbc.erl:3241 +#: mod_pubsub/mod_pubsub.erl:3486 mod_pubsub/mod_pubsub_odbc.erl:3299 msgid "Roster groups allowed to subscribe" msgstr "Kontaktlisten-Gruppen die abonnieren dürfen" -#: mod_pubsub/mod_pubsub.erl:3429 mod_pubsub/mod_pubsub_odbc.erl:3242 +#: mod_pubsub/mod_pubsub.erl:3487 mod_pubsub/mod_pubsub_odbc.erl:3300 msgid "Specify the publisher model" msgstr "Geben sie das Publikationsmodell an" -#: mod_pubsub/mod_pubsub.erl:3431 mod_pubsub/mod_pubsub_odbc.erl:3244 +#: mod_pubsub/mod_pubsub.erl:3489 mod_pubsub/mod_pubsub_odbc.erl:3302 msgid "Purge all items when the relevant publisher goes offline" msgstr "" "Alle Einträge entfernen, wenn der relevante Veröffentlicher offline geht" -#: mod_pubsub/mod_pubsub.erl:3432 mod_pubsub/mod_pubsub_odbc.erl:3245 +#: mod_pubsub/mod_pubsub.erl:3490 mod_pubsub/mod_pubsub_odbc.erl:3303 msgid "Specify the event message type" msgstr "Geben sie den Ereignis-Nachrichtentyp an" -#: mod_pubsub/mod_pubsub.erl:3434 mod_pubsub/mod_pubsub_odbc.erl:3247 +#: mod_pubsub/mod_pubsub.erl:3492 mod_pubsub/mod_pubsub_odbc.erl:3305 msgid "Max payload size in bytes" msgstr "Maximale Nutzlastgrösse in Bytes" -#: mod_pubsub/mod_pubsub.erl:3435 mod_pubsub/mod_pubsub_odbc.erl:3248 +#: mod_pubsub/mod_pubsub.erl:3493 mod_pubsub/mod_pubsub_odbc.erl:3306 msgid "When to send the last published item" msgstr "Wann soll das letzte veröffentlichte Objekt gesendet werden" -#: mod_pubsub/mod_pubsub.erl:3437 mod_pubsub/mod_pubsub_odbc.erl:3250 +#: mod_pubsub/mod_pubsub.erl:3495 mod_pubsub/mod_pubsub_odbc.erl:3308 msgid "Only deliver notifications to available users" msgstr "Benachrichtigungen nur an verfügbare Benutzer schicken" -#: mod_pubsub/mod_pubsub.erl:3438 mod_pubsub/mod_pubsub_odbc.erl:3251 +#: mod_pubsub/mod_pubsub.erl:3496 mod_pubsub/mod_pubsub_odbc.erl:3309 msgid "The collections with which a node is affiliated" msgstr "Sammlungen, mit denen ein Knoten verknüpft ist" @@ -1175,15 +1234,11 @@ msgstr "" msgid "Choose a username and password to register with this server" msgstr "Wählen sie zum Registrieren einen Benutzernamen und ein Passwort" -#: mod_register.erl:230 mod_vcard.erl:358 mod_vcard_odbc.erl:336 -#: web/ejabberd_web_admin.erl:1516 web/ejabberd_web_admin.erl:1573 +#: mod_register.erl:230 mod_vcard.erl:364 mod_vcard_odbc.erl:342 +#: web/ejabberd_web_admin.erl:1515 web/ejabberd_web_admin.erl:1572 msgid "User" msgstr "Benutzer" -#: mod_register.erl:251 -msgid "Unable to generate a CAPTCHA" -msgstr "Konnte CAPTCHA nicht erstellen" - #: mod_register.erl:316 mod_register.erl:361 msgid "The password is too weak" msgstr "Das Passwort ist zu einfach" @@ -1192,120 +1247,123 @@ msgstr "Das Passwort ist zu einfach" msgid "Users are not allowed to register accounts so quickly" msgstr "Benutzer dürfen Konten nicht so schnell registrieren" -#: mod_roster.erl:938 mod_roster_odbc.erl:1043 web/ejabberd_web_admin.erl:1699 -#: web/ejabberd_web_admin.erl:1884 web/ejabberd_web_admin.erl:1895 -#: web/ejabberd_web_admin.erl:2218 +#: mod_roster.erl:938 mod_roster_odbc.erl:1055 web/ejabberd_web_admin.erl:1701 +#: web/ejabberd_web_admin.erl:1886 web/ejabberd_web_admin.erl:1897 +#: web/ejabberd_web_admin.erl:2219 msgid "None" msgstr "Keine" -#: mod_roster.erl:945 mod_roster_odbc.erl:1050 +#: mod_roster.erl:945 mod_roster_odbc.erl:1062 msgid "Subscription" msgstr "Abonnement" -#: mod_roster.erl:946 mod_roster_odbc.erl:1051 +#: mod_roster.erl:946 mod_roster_odbc.erl:1063 msgid "Pending" msgstr "anhängig" -#: mod_roster.erl:947 mod_roster_odbc.erl:1052 +#: mod_roster.erl:947 mod_roster_odbc.erl:1064 msgid "Groups" msgstr "Gruppen" -#: mod_roster.erl:974 mod_roster_odbc.erl:1079 +#: mod_roster.erl:974 mod_roster_odbc.erl:1091 msgid "Validate" msgstr "Validieren" -#: mod_roster.erl:982 mod_roster_odbc.erl:1087 +#: mod_roster.erl:982 mod_roster_odbc.erl:1099 msgid "Remove" msgstr "Entfernen" -#: mod_roster.erl:985 mod_roster_odbc.erl:1090 +#: mod_roster.erl:985 mod_roster_odbc.erl:1102 msgid "Roster of " msgstr "Kontaktliste von " -#: mod_roster.erl:988 mod_roster_odbc.erl:1093 mod_shared_roster.erl:897 -#: mod_shared_roster.erl:1006 web/ejabberd_web_admin.erl:834 +#: mod_roster.erl:988 mod_roster_odbc.erl:1105 mod_shared_roster.erl:902 +#: mod_shared_roster.erl:1011 mod_shared_roster_odbc.erl:931 +#: mod_shared_roster_odbc.erl:1040 web/ejabberd_web_admin.erl:834 #: web/ejabberd_web_admin.erl:875 web/ejabberd_web_admin.erl:943 #: web/ejabberd_web_admin.erl:979 web/ejabberd_web_admin.erl:1020 -#: web/ejabberd_web_admin.erl:1510 web/ejabberd_web_admin.erl:1759 -#: web/ejabberd_web_admin.erl:1930 web/ejabberd_web_admin.erl:2135 -#: web/ejabberd_web_admin.erl:2160 +#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1761 +#: web/ejabberd_web_admin.erl:1932 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2161 msgid "Bad format" msgstr "Ungültiges Format" -#: mod_roster.erl:995 mod_roster_odbc.erl:1100 +#: mod_roster.erl:995 mod_roster_odbc.erl:1112 msgid "Add Jabber ID" msgstr "Jabber-ID hinzufügen" -#: mod_roster.erl:1094 mod_roster_odbc.erl:1199 +#: mod_roster.erl:1094 mod_roster_odbc.erl:1211 msgid "Roster" msgstr "Kontaktliste" -#: mod_shared_roster.erl:852 mod_shared_roster.erl:894 -#: mod_shared_roster.erl:1002 +#: mod_shared_roster.erl:857 mod_shared_roster.erl:899 +#: mod_shared_roster.erl:1007 mod_shared_roster_odbc.erl:886 +#: mod_shared_roster_odbc.erl:928 mod_shared_roster_odbc.erl:1036 msgid "Shared Roster Groups" msgstr "Gruppen der gemeinsamen Kontaktliste" -#: mod_shared_roster.erl:890 web/ejabberd_web_admin.erl:1366 -#: web/ejabberd_web_admin.erl:2460 +#: mod_shared_roster.erl:895 mod_shared_roster_odbc.erl:924 +#: web/ejabberd_web_admin.erl:1365 web/ejabberd_web_admin.erl:2461 msgid "Add New" -msgstr "Neuen hinzufügen" +msgstr "Neue hinzufügen" -#: mod_shared_roster.erl:973 +#: mod_shared_roster.erl:978 mod_shared_roster_odbc.erl:1007 msgid "Name:" msgstr "Name:" -#: mod_shared_roster.erl:978 +#: mod_shared_roster.erl:983 mod_shared_roster_odbc.erl:1012 msgid "Description:" msgstr "Beschreibung:" -#: mod_shared_roster.erl:986 +#: mod_shared_roster.erl:991 mod_shared_roster_odbc.erl:1020 msgid "Members:" msgstr "Mitglieder:" -#: mod_shared_roster.erl:994 +#: mod_shared_roster.erl:999 mod_shared_roster_odbc.erl:1028 msgid "Displayed Groups:" msgstr "Angezeigte Gruppen:" -#: mod_shared_roster.erl:1003 +#: mod_shared_roster.erl:1008 mod_shared_roster_odbc.erl:1037 msgid "Group " msgstr "Gruppe " -#: mod_shared_roster.erl:1012 web/ejabberd_web_admin.erl:840 -#: web/ejabberd_web_admin.erl:884 web/ejabberd_web_admin.erl:949 -#: web/ejabberd_web_admin.erl:1026 web/ejabberd_web_admin.erl:2015 +#: mod_shared_roster.erl:1017 mod_shared_roster_odbc.erl:1046 +#: web/ejabberd_web_admin.erl:840 web/ejabberd_web_admin.erl:884 +#: web/ejabberd_web_admin.erl:949 web/ejabberd_web_admin.erl:1026 +#: web/ejabberd_web_admin.erl:2017 msgid "Submit" msgstr "Senden" -#: mod_vcard.erl:165 mod_vcard_ldap.erl:237 mod_vcard_odbc.erl:129 +#: mod_vcard.erl:165 mod_vcard_ldap.erl:238 mod_vcard_odbc.erl:129 msgid "Erlang Jabber Server" msgstr "Erlang Jabber Server" -#: mod_vcard.erl:358 mod_vcard.erl:472 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:448 +#: mod_vcard.erl:364 mod_vcard.erl:478 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:454 msgid "Birthday" msgstr "Geburtsdatum" -#: mod_vcard.erl:358 mod_vcard.erl:474 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:450 +#: mod_vcard.erl:364 mod_vcard.erl:480 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:456 msgid "City" msgstr "Stadt" -#: mod_vcard.erl:358 mod_vcard.erl:473 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:449 +#: mod_vcard.erl:364 mod_vcard.erl:479 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:455 msgid "Country" msgstr "Land" -#: mod_vcard.erl:358 mod_vcard.erl:475 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:451 +#: mod_vcard.erl:364 mod_vcard.erl:481 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:457 msgid "Email" msgstr "E-Mail" -#: mod_vcard.erl:358 mod_vcard.erl:470 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:446 +#: mod_vcard.erl:364 mod_vcard.erl:476 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:452 msgid "Family Name" msgstr "Nachname" -#: mod_vcard.erl:358 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_odbc.erl:342 msgid "" "Fill in the form to search for any matching Jabber User (Add * to the end of " "field to match substring)" @@ -1313,54 +1371,54 @@ msgstr "" "Füllen Sie die Felder aus, um nach passenden Jabber-Benutzern zu suchen " "(beenden Sie ein Feld mit *, um auch nach Teilzeichenketten zu suchen)" -#: mod_vcard.erl:358 mod_vcard.erl:467 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:443 +#: mod_vcard.erl:364 mod_vcard.erl:473 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:449 msgid "Full Name" msgstr "Vollständiger Name" -#: mod_vcard.erl:358 mod_vcard.erl:469 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:445 +#: mod_vcard.erl:364 mod_vcard.erl:475 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:451 msgid "Middle Name" msgstr "Zweiter Vorname" -#: mod_vcard.erl:358 mod_vcard.erl:468 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:444 web/ejabberd_web_admin.erl:2004 +#: mod_vcard.erl:364 mod_vcard.erl:474 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:450 web/ejabberd_web_admin.erl:2006 msgid "Name" msgstr "Vorname" -#: mod_vcard.erl:358 mod_vcard.erl:476 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:452 +#: mod_vcard.erl:364 mod_vcard.erl:482 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:458 msgid "Organization Name" msgstr "Organisation" -#: mod_vcard.erl:358 mod_vcard.erl:477 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:453 +#: mod_vcard.erl:364 mod_vcard.erl:483 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:459 msgid "Organization Unit" msgstr "Abteilung" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "Search users in " msgstr "Benutzer suchen in " -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "You need an x:data capable client to search" msgstr "" "Sie benötigen einen Client, der x:data unterstützt, um die Suche verwenden " "zu können" -#: mod_vcard.erl:383 mod_vcard_ldap.erl:483 mod_vcard_odbc.erl:361 +#: mod_vcard.erl:389 mod_vcard_ldap.erl:487 mod_vcard_odbc.erl:367 msgid "vCard User Search" msgstr "vCard-Benutzer-Suche" -#: mod_vcard.erl:439 mod_vcard_ldap.erl:537 mod_vcard_odbc.erl:415 +#: mod_vcard.erl:445 mod_vcard_ldap.erl:541 mod_vcard_odbc.erl:421 msgid "ejabberd vCard module" msgstr "ejabberd vCard-Modul" -#: mod_vcard.erl:463 mod_vcard_ldap.erl:547 mod_vcard_odbc.erl:439 +#: mod_vcard.erl:469 mod_vcard_ldap.erl:551 mod_vcard_odbc.erl:445 msgid "Search Results for " msgstr "Suchergebnisse für " -#: mod_vcard_ldap.erl:458 +#: mod_vcard_ldap.erl:462 msgid "Fill in fields to search for any matching Jabber User" msgstr "" "Füllen Sie die Felder aus, um nach passenden Jabber-Benutzern zu suchen" @@ -1422,7 +1480,7 @@ msgstr "Normale Tabelle anzeigen" msgid "Show Integral Table" msgstr "Vollständige Tabelle anzeigen" -#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1937 +#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1939 msgid "Statistics" msgstr "Statistik" @@ -1434,116 +1492,116 @@ msgstr "Nicht gefunden" msgid "Node not found" msgstr "Knoten nicht gefunden" -#: web/ejabberd_web_admin.erl:1461 +#: web/ejabberd_web_admin.erl:1460 msgid "Host" msgstr "Host" -#: web/ejabberd_web_admin.erl:1462 +#: web/ejabberd_web_admin.erl:1461 msgid "Registered Users" msgstr "Registrierte Benutzer" -#: web/ejabberd_web_admin.erl:1574 +#: web/ejabberd_web_admin.erl:1573 msgid "Offline Messages" msgstr "Offline-Nachrichten" -#: web/ejabberd_web_admin.erl:1575 web/ejabberd_web_admin.erl:1765 +#: web/ejabberd_web_admin.erl:1574 web/ejabberd_web_admin.erl:1767 msgid "Last Activity" msgstr "Letzte Aktivität" -#: web/ejabberd_web_admin.erl:1657 web/ejabberd_web_admin.erl:1673 +#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 msgid "Registered Users:" msgstr "Registrierte Benutzer:" -#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 -#: web/ejabberd_web_admin.erl:2191 +#: web/ejabberd_web_admin.erl:1661 web/ejabberd_web_admin.erl:1677 +#: web/ejabberd_web_admin.erl:2192 msgid "Online Users:" msgstr "Angemeldete Benutzer:" -#: web/ejabberd_web_admin.erl:1661 +#: web/ejabberd_web_admin.erl:1663 msgid "Outgoing s2s Connections:" msgstr "Ausgehende s2s-Verbindungen:" -#: web/ejabberd_web_admin.erl:1663 +#: web/ejabberd_web_admin.erl:1665 msgid "Outgoing s2s Servers:" msgstr "Ausgehende s2s-Server:" -#: web/ejabberd_web_admin.erl:1732 web/mod_register_web.erl:175 +#: web/ejabberd_web_admin.erl:1734 web/mod_register_web.erl:175 #: web/mod_register_web.erl:372 web/mod_register_web.erl:381 #: web/mod_register_web.erl:411 msgid "Change Password" msgstr "Passwort ändern" -#: web/ejabberd_web_admin.erl:1756 +#: web/ejabberd_web_admin.erl:1758 msgid "User " msgstr "Benutzer " -#: web/ejabberd_web_admin.erl:1763 +#: web/ejabberd_web_admin.erl:1765 msgid "Connected Resources:" msgstr "Verbundene Ressourcen:" -#: web/ejabberd_web_admin.erl:1764 web/mod_register_web.erl:227 +#: web/ejabberd_web_admin.erl:1766 web/mod_register_web.erl:227 #: web/mod_register_web.erl:519 msgid "Password:" msgstr "Passwort:" -#: web/ejabberd_web_admin.erl:1826 +#: web/ejabberd_web_admin.erl:1828 msgid "No Data" msgstr "Keine Daten" -#: web/ejabberd_web_admin.erl:1904 +#: web/ejabberd_web_admin.erl:1906 msgid "Nodes" msgstr "Knoten" -#: web/ejabberd_web_admin.erl:1927 web/ejabberd_web_admin.erl:1949 +#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1951 msgid "Node " msgstr "Knoten " -#: web/ejabberd_web_admin.erl:1936 +#: web/ejabberd_web_admin.erl:1938 msgid "Listened Ports" msgstr "Aktive Ports" -#: web/ejabberd_web_admin.erl:1938 web/ejabberd_web_admin.erl:2259 -#: web/ejabberd_web_admin.erl:2447 +#: web/ejabberd_web_admin.erl:1940 web/ejabberd_web_admin.erl:2260 +#: web/ejabberd_web_admin.erl:2448 msgid "Update" msgstr "Aktualisieren" -#: web/ejabberd_web_admin.erl:1941 web/ejabberd_web_admin.erl:2568 +#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2569 msgid "Restart" msgstr "Neustart" -#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2570 +#: web/ejabberd_web_admin.erl:1945 web/ejabberd_web_admin.erl:2571 msgid "Stop" msgstr "Stoppen" -#: web/ejabberd_web_admin.erl:1957 +#: web/ejabberd_web_admin.erl:1959 msgid "RPC Call Error" msgstr "Fehler bei RPC-Aufruf" -#: web/ejabberd_web_admin.erl:1998 +#: web/ejabberd_web_admin.erl:2000 msgid "Database Tables at " msgstr "Datenbanktabellen auf " -#: web/ejabberd_web_admin.erl:2005 +#: web/ejabberd_web_admin.erl:2007 msgid "Storage Type" msgstr "Speichertyp" -#: web/ejabberd_web_admin.erl:2006 +#: web/ejabberd_web_admin.erl:2008 msgid "Elements" msgstr "Elemente" -#: web/ejabberd_web_admin.erl:2007 +#: web/ejabberd_web_admin.erl:2009 msgid "Memory" msgstr "Speicher" -#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2032 web/ejabberd_web_admin.erl:2137 msgid "Error" msgstr "Fehler" -#: web/ejabberd_web_admin.erl:2033 +#: web/ejabberd_web_admin.erl:2034 msgid "Backup of " msgstr "Sicherung von " -#: web/ejabberd_web_admin.erl:2035 +#: web/ejabberd_web_admin.erl:2036 msgid "" "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 " @@ -1553,144 +1611,144 @@ msgstr "" "sichern. Wenn sie das ODBC-Modul verwenden, müssen sie die SQL-Datenbank " "manuell sichern." -#: web/ejabberd_web_admin.erl:2040 +#: web/ejabberd_web_admin.erl:2041 msgid "Store binary backup:" msgstr "Speichere binäre Sicherung:" -#: web/ejabberd_web_admin.erl:2044 web/ejabberd_web_admin.erl:2051 -#: web/ejabberd_web_admin.erl:2059 web/ejabberd_web_admin.erl:2066 -#: web/ejabberd_web_admin.erl:2073 web/ejabberd_web_admin.erl:2080 -#: web/ejabberd_web_admin.erl:2087 web/ejabberd_web_admin.erl:2095 -#: web/ejabberd_web_admin.erl:2102 web/ejabberd_web_admin.erl:2109 +#: web/ejabberd_web_admin.erl:2045 web/ejabberd_web_admin.erl:2052 +#: web/ejabberd_web_admin.erl:2060 web/ejabberd_web_admin.erl:2067 +#: web/ejabberd_web_admin.erl:2074 web/ejabberd_web_admin.erl:2081 +#: web/ejabberd_web_admin.erl:2088 web/ejabberd_web_admin.erl:2096 +#: web/ejabberd_web_admin.erl:2103 web/ejabberd_web_admin.erl:2110 msgid "OK" msgstr "OK" -#: web/ejabberd_web_admin.erl:2047 +#: web/ejabberd_web_admin.erl:2048 msgid "Restore binary backup immediately:" msgstr "Stelle binäre Sicherung sofort wieder her:" -#: web/ejabberd_web_admin.erl:2055 +#: web/ejabberd_web_admin.erl:2056 msgid "" "Restore binary backup after next ejabberd restart (requires less memory):" msgstr "" "Stelle binäre Sicherung beim nächsten ejabberd-Neustart wieder her (benötigt " "weniger Speicher):" -#: web/ejabberd_web_admin.erl:2062 +#: web/ejabberd_web_admin.erl:2063 msgid "Store plain text backup:" msgstr "Speichere Klartext-Sicherung:" -#: web/ejabberd_web_admin.erl:2069 +#: web/ejabberd_web_admin.erl:2070 msgid "Restore plain text backup immediately:" msgstr "Stelle Klartext-Sicherung sofort wieder her:" -#: web/ejabberd_web_admin.erl:2076 +#: web/ejabberd_web_admin.erl:2077 msgid "Import users data from a PIEFXIS file (XEP-0227):" msgstr "Benutzerdaten von einer PIEFXIS Datei (XEP-0227) importieren:" -#: web/ejabberd_web_admin.erl:2083 +#: web/ejabberd_web_admin.erl:2084 msgid "Export data of all users in the server to PIEFXIS files (XEP-0227):" msgstr "" "Alle Benutzerdaten des Servers in PIEFXIS Dateien (XEP-0227) exportieren:" -#: web/ejabberd_web_admin.erl:2090 +#: web/ejabberd_web_admin.erl:2091 msgid "Export data of users in a host to PIEFXIS files (XEP-0227):" msgstr "" "Alle Benutzerdaten des Hosts in PIEFXIS Dateien (XEP-0227) exportieren:" -#: web/ejabberd_web_admin.erl:2098 +#: web/ejabberd_web_admin.erl:2099 msgid "Import user data from jabberd14 spool file:" msgstr "Importiere Benutzer von jabberd14 Spool Datei:" -#: web/ejabberd_web_admin.erl:2105 +#: web/ejabberd_web_admin.erl:2106 msgid "Import users data from jabberd14 spool directory:" msgstr "Importiere Benutzer von jabberd14 Spool Verzeichnis:" -#: web/ejabberd_web_admin.erl:2131 +#: web/ejabberd_web_admin.erl:2132 msgid "Listened Ports at " msgstr "Aktive Ports bei" -#: web/ejabberd_web_admin.erl:2156 +#: web/ejabberd_web_admin.erl:2157 msgid "Modules at " msgstr "Module bei " -#: web/ejabberd_web_admin.erl:2182 +#: web/ejabberd_web_admin.erl:2183 msgid "Statistics of ~p" msgstr "Statistiken von ~p" -#: web/ejabberd_web_admin.erl:2185 +#: web/ejabberd_web_admin.erl:2186 msgid "Uptime:" msgstr "Betriebszeit:" -#: web/ejabberd_web_admin.erl:2188 +#: web/ejabberd_web_admin.erl:2189 msgid "CPU Time:" msgstr "CPU-Zeit:" -#: web/ejabberd_web_admin.erl:2194 +#: web/ejabberd_web_admin.erl:2195 msgid "Transactions Committed:" msgstr "Durchgeführte Transaktionen:" -#: web/ejabberd_web_admin.erl:2197 +#: web/ejabberd_web_admin.erl:2198 msgid "Transactions Aborted:" msgstr "Abgebrochene Transaktionen:" -#: web/ejabberd_web_admin.erl:2200 +#: web/ejabberd_web_admin.erl:2201 msgid "Transactions Restarted:" msgstr "Neu gestartete Transaktionen:" -#: web/ejabberd_web_admin.erl:2203 +#: web/ejabberd_web_admin.erl:2204 msgid "Transactions Logged:" msgstr "Protokollierte Transaktionen:" -#: web/ejabberd_web_admin.erl:2245 +#: web/ejabberd_web_admin.erl:2246 msgid "Update " msgstr "Aktualisierung " -#: web/ejabberd_web_admin.erl:2253 +#: web/ejabberd_web_admin.erl:2254 msgid "Update plan" msgstr "Aktualisierungsplan" -#: web/ejabberd_web_admin.erl:2254 +#: web/ejabberd_web_admin.erl:2255 msgid "Modified modules" msgstr "Geänderte Module" -#: web/ejabberd_web_admin.erl:2255 +#: web/ejabberd_web_admin.erl:2256 msgid "Update script" msgstr "Aktualisierungsscript" -#: web/ejabberd_web_admin.erl:2256 +#: web/ejabberd_web_admin.erl:2257 msgid "Low level update script" msgstr "Low level Aktualisierungsscript" -#: web/ejabberd_web_admin.erl:2257 +#: web/ejabberd_web_admin.erl:2258 msgid "Script check" msgstr "Script-Überprüfung" -#: web/ejabberd_web_admin.erl:2425 +#: web/ejabberd_web_admin.erl:2426 msgid "Port" msgstr "Port" -#: web/ejabberd_web_admin.erl:2426 +#: web/ejabberd_web_admin.erl:2427 msgid "IP" msgstr "IP" -#: web/ejabberd_web_admin.erl:2427 +#: web/ejabberd_web_admin.erl:2428 msgid "Protocol" msgstr "Protokoll" -#: web/ejabberd_web_admin.erl:2428 web/ejabberd_web_admin.erl:2555 +#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 msgid "Module" msgstr "Modul" -#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 +#: web/ejabberd_web_admin.erl:2430 web/ejabberd_web_admin.erl:2557 msgid "Options" msgstr "Optionen" -#: web/ejabberd_web_admin.erl:2449 +#: web/ejabberd_web_admin.erl:2450 msgid "Delete" msgstr "Löschen" -#: web/ejabberd_web_admin.erl:2578 +#: web/ejabberd_web_admin.erl:2579 msgid "Start" msgstr "Starten" diff --git a/src/msgs/ejabberd.pot b/src/msgs/ejabberd.pot index 027a8c788..b62c81032 100644 --- a/src/msgs/ejabberd.pot +++ b/src/msgs/ejabberd.pot @@ -15,11 +15,11 @@ msgstr "" msgid "No resource provided" msgstr "" -#: ejabberd_c2s.erl:1149 +#: ejabberd_c2s.erl:1197 msgid "Replaced by new connection" msgstr "" -#: ejabberd_c2s.erl:1837 +#: ejabberd_c2s.erl:1885 msgid "Your active privacy list has denied the routing of this stanza." msgstr "" @@ -40,7 +40,7 @@ msgid "CAPTCHA web page" msgstr "" #: ejabberd_captcha.erl:307 -msgid "The captcha is valid." +msgid "The CAPTCHA is valid." msgstr "" #: mod_adhoc.erl:95 mod_adhoc.erl:125 mod_adhoc.erl:143 mod_adhoc.erl:161 @@ -55,63 +55,66 @@ msgstr "" msgid "Pong" msgstr "" -#: mod_announce.erl:506 +#: mod_announce.erl:507 mod_announce_odbc.erl:499 msgid "Really delete message of the day?" msgstr "" -#: mod_announce.erl:514 mod_configure.erl:1083 mod_configure.erl:1128 +#: mod_announce.erl:515 mod_announce_odbc.erl:507 mod_configure.erl:1083 +#: mod_configure.erl:1128 msgid "Subject" msgstr "" -#: mod_announce.erl:519 mod_configure.erl:1088 mod_configure.erl:1133 +#: mod_announce.erl:520 mod_announce_odbc.erl:512 mod_configure.erl:1088 +#: mod_configure.erl:1133 msgid "Message body" msgstr "" -#: mod_announce.erl:599 +#: mod_announce.erl:600 mod_announce_odbc.erl:592 msgid "No body provided for announce message" msgstr "" -#: mod_announce.erl:634 +#: mod_announce.erl:635 mod_announce_odbc.erl:627 msgid "Announcements" msgstr "" -#: mod_announce.erl:636 +#: mod_announce.erl:637 mod_announce_odbc.erl:629 msgid "Send announcement to all users" msgstr "" -#: mod_announce.erl:638 +#: mod_announce.erl:639 mod_announce_odbc.erl:631 msgid "Send announcement to all users on all hosts" msgstr "" -#: mod_announce.erl:640 +#: mod_announce.erl:641 mod_announce_odbc.erl:633 msgid "Send announcement to all online users" msgstr "" -#: mod_announce.erl:642 mod_configure.erl:1078 mod_configure.erl:1123 +#: mod_announce.erl:643 mod_announce_odbc.erl:635 mod_configure.erl:1078 +#: mod_configure.erl:1123 msgid "Send announcement to all online users on all hosts" msgstr "" -#: mod_announce.erl:644 +#: mod_announce.erl:645 mod_announce_odbc.erl:637 msgid "Set message of the day and send to online users" msgstr "" -#: mod_announce.erl:646 +#: mod_announce.erl:647 mod_announce_odbc.erl:639 msgid "Set message of the day on all hosts and send to online users" msgstr "" -#: mod_announce.erl:648 +#: mod_announce.erl:649 mod_announce_odbc.erl:641 msgid "Update message of the day (don't send)" msgstr "" -#: mod_announce.erl:650 +#: mod_announce.erl:651 mod_announce_odbc.erl:643 msgid "Update message of the day on all hosts (don't send)" msgstr "" -#: mod_announce.erl:652 +#: mod_announce.erl:653 mod_announce_odbc.erl:645 msgid "Delete message of the day" msgstr "" -#: mod_announce.erl:654 +#: mod_announce.erl:655 mod_announce_odbc.erl:647 msgid "Delete message of the day on all hosts" msgstr "" @@ -120,7 +123,7 @@ msgstr "" msgid "Configuration" msgstr "" -#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1934 +#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1936 msgid "Database" msgstr "" @@ -132,7 +135,7 @@ msgstr "" msgid "Stop Modules" msgstr "" -#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1935 +#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1937 msgid "Backup" msgstr "" @@ -161,7 +164,7 @@ msgid "Shut Down Service" msgstr "" #: mod_configure.erl:145 mod_configure.erl:518 mod_configure.erl:1197 -#: web/ejabberd_web_admin.erl:1528 +#: web/ejabberd_web_admin.erl:1527 msgid "Add User" msgstr "" @@ -213,7 +216,7 @@ msgid "User Management" msgstr "" #: mod_configure.erl:500 web/ejabberd_web_admin.erl:1058 -#: web/ejabberd_web_admin.erl:1463 +#: web/ejabberd_web_admin.erl:1462 msgid "Online Users" msgstr "" @@ -225,15 +228,15 @@ msgstr "" msgid "Outgoing s2s Connections" msgstr "" -#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1905 +#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1907 msgid "Running Nodes" msgstr "" -#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1907 +#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1909 msgid "Stopped Nodes" msgstr "" -#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1951 +#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1953 msgid "Modules" msgstr "" @@ -364,15 +367,15 @@ msgstr "" #: mod_configure.erl:1200 mod_configure.erl:1222 mod_configure.erl:1234 #: mod_configure.erl:1246 mod_configure.erl:1258 mod_configure.erl:1275 -#: mod_configure.erl:1287 mod_configure.erl:1652 mod_configure.erl:1702 -#: mod_configure.erl:1723 mod_roster.erl:943 mod_roster_odbc.erl:1048 -#: mod_vcard.erl:466 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:442 +#: mod_configure.erl:1287 mod_configure.erl:1650 mod_configure.erl:1700 +#: mod_configure.erl:1721 mod_roster.erl:943 mod_roster_odbc.erl:1060 +#: mod_vcard.erl:472 mod_vcard_ldap.erl:554 mod_vcard_odbc.erl:448 msgid "Jabber ID" msgstr "" -#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1653 -#: mod_configure.erl:1865 mod_muc/mod_muc_room.erl:2970 mod_register.erl:235 -#: web/ejabberd_web_admin.erl:1521 +#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1651 +#: mod_configure.erl:1863 mod_muc/mod_muc_room.erl:3224 mod_register.erl:235 +#: web/ejabberd_web_admin.erl:1520 msgid "Password" msgstr "" @@ -388,79 +391,80 @@ msgstr "" msgid "Number of online users" msgstr "" -#: mod_configure.erl:1684 web/ejabberd_web_admin.erl:1589 -#: web/ejabberd_web_admin.erl:1741 +#: mod_configure.erl:1682 web/ejabberd_web_admin.erl:1588 +#: web/ejabberd_web_admin.erl:1743 msgid "Never" msgstr "" -#: mod_configure.erl:1698 web/ejabberd_web_admin.erl:1602 -#: web/ejabberd_web_admin.erl:1754 +#: mod_configure.erl:1696 web/ejabberd_web_admin.erl:1601 +#: web/ejabberd_web_admin.erl:1756 msgid "Online" msgstr "" -#: mod_configure.erl:1703 +#: mod_configure.erl:1701 msgid "Last login" msgstr "" -#: mod_configure.erl:1724 +#: mod_configure.erl:1722 msgid "Roster size" msgstr "" -#: mod_configure.erl:1725 +#: mod_configure.erl:1723 msgid "IP addresses" msgstr "" -#: mod_configure.erl:1726 +#: mod_configure.erl:1724 msgid "Resources" msgstr "" -#: mod_configure.erl:1852 +#: mod_configure.erl:1850 msgid "Administration of " msgstr "" -#: mod_configure.erl:1855 +#: mod_configure.erl:1853 msgid "Action on user" msgstr "" -#: mod_configure.erl:1859 +#: mod_configure.erl:1857 msgid "Edit Properties" msgstr "" -#: mod_configure.erl:1862 web/ejabberd_web_admin.erl:1767 +#: mod_configure.erl:1860 web/ejabberd_web_admin.erl:1769 msgid "Remove User" msgstr "" -#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:336 +#: mod_irc/mod_irc.erl:201 mod_irc/mod_irc_odbc.erl:196 +#: mod_muc/mod_muc.erl:336 mod_muc/mod_muc_odbc.erl:342 msgid "Access denied by service policy" msgstr "" -#: mod_irc/mod_irc.erl:400 +#: mod_irc/mod_irc.erl:401 mod_irc/mod_irc_odbc.erl:398 msgid "IRC Transport" msgstr "" -#: mod_irc/mod_irc.erl:427 +#: mod_irc/mod_irc.erl:428 mod_irc/mod_irc_odbc.erl:425 msgid "ejabberd IRC module" msgstr "" -#: mod_irc/mod_irc.erl:558 +#: mod_irc/mod_irc.erl:559 mod_irc/mod_irc_odbc.erl:568 msgid "You need an x:data capable client to configure mod_irc settings" msgstr "" -#: mod_irc/mod_irc.erl:565 +#: mod_irc/mod_irc.erl:566 mod_irc/mod_irc_odbc.erl:575 msgid "Registration in mod_irc for " msgstr "" -#: mod_irc/mod_irc.erl:570 +#: mod_irc/mod_irc.erl:571 mod_irc/mod_irc_odbc.erl:580 msgid "" "Enter username, encodings, ports and passwords you wish to use for " "connecting to IRC servers" msgstr "" -#: mod_irc/mod_irc.erl:575 +#: mod_irc/mod_irc.erl:576 mod_irc/mod_irc_odbc.erl:585 msgid "IRC Username" msgstr "" -#: mod_irc/mod_irc.erl:585 +#: mod_irc/mod_irc.erl:586 mod_irc/mod_irc_odbc.erl:595 msgid "" "If you want to specify different ports, passwords, encodings for IRC " "servers, fill this list with values in format '{\"irc server\", \"encoding" @@ -468,111 +472,113 @@ msgid "" "~p, empty password." msgstr "" -#: mod_irc/mod_irc.erl:597 +#: mod_irc/mod_irc.erl:598 mod_irc/mod_irc_odbc.erl:607 msgid "" "Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." msgstr "" -#: mod_irc/mod_irc.erl:602 +#: mod_irc/mod_irc.erl:603 mod_irc/mod_irc_odbc.erl:612 msgid "Connections parameters" msgstr "" -#: mod_irc/mod_irc.erl:727 +#: mod_irc/mod_irc.erl:728 mod_irc/mod_irc_odbc.erl:757 msgid "Join IRC channel" msgstr "" -#: mod_irc/mod_irc.erl:731 +#: mod_irc/mod_irc.erl:732 mod_irc/mod_irc_odbc.erl:761 msgid "IRC channel (don't put the first #)" msgstr "" -#: mod_irc/mod_irc.erl:736 +#: mod_irc/mod_irc.erl:737 mod_irc/mod_irc_odbc.erl:766 msgid "IRC server" msgstr "" -#: mod_irc/mod_irc.erl:769 mod_irc/mod_irc.erl:773 +#: mod_irc/mod_irc.erl:770 mod_irc/mod_irc.erl:774 +#: mod_irc/mod_irc_odbc.erl:799 mod_irc/mod_irc_odbc.erl:803 msgid "Join the IRC channel here." msgstr "" -#: mod_irc/mod_irc.erl:777 +#: mod_irc/mod_irc.erl:778 mod_irc/mod_irc_odbc.erl:807 msgid "Join the IRC channel in this Jabber ID: ~s" msgstr "" -#: mod_irc/mod_irc.erl:862 +#: mod_irc/mod_irc.erl:863 mod_irc/mod_irc_odbc.erl:904 msgid "IRC settings" msgstr "" -#: mod_irc/mod_irc.erl:867 +#: mod_irc/mod_irc.erl:868 mod_irc/mod_irc_odbc.erl:909 msgid "" "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." msgstr "" -#: mod_irc/mod_irc.erl:873 +#: mod_irc/mod_irc.erl:874 mod_irc/mod_irc_odbc.erl:915 msgid "IRC username" msgstr "" -#: mod_irc/mod_irc.erl:922 +#: mod_irc/mod_irc.erl:923 mod_irc/mod_irc_odbc.erl:964 msgid "Password ~b" msgstr "" -#: mod_irc/mod_irc.erl:927 +#: mod_irc/mod_irc.erl:928 mod_irc/mod_irc_odbc.erl:969 msgid "Port ~b" msgstr "" -#: mod_irc/mod_irc.erl:932 +#: mod_irc/mod_irc.erl:933 mod_irc/mod_irc_odbc.erl:974 msgid "Encoding for server ~b" msgstr "" -#: mod_irc/mod_irc.erl:941 +#: mod_irc/mod_irc.erl:942 mod_irc/mod_irc_odbc.erl:983 msgid "Server ~b" msgstr "" -#: mod_muc/mod_muc.erl:449 +#: mod_muc/mod_muc.erl:449 mod_muc/mod_muc_odbc.erl:456 msgid "Only service administrators are allowed to send service messages" msgstr "" -#: mod_muc/mod_muc.erl:493 +#: mod_muc/mod_muc.erl:493 mod_muc/mod_muc_odbc.erl:500 msgid "Room creation is denied by service policy" msgstr "" -#: mod_muc/mod_muc.erl:500 +#: mod_muc/mod_muc.erl:500 mod_muc/mod_muc_odbc.erl:507 msgid "Conference room does not exist" msgstr "" -#: mod_muc/mod_muc.erl:581 +#: mod_muc/mod_muc.erl:582 mod_muc/mod_muc_odbc.erl:595 msgid "Chatrooms" msgstr "" -#: mod_muc/mod_muc.erl:711 +#: mod_muc/mod_muc.erl:712 mod_muc/mod_muc_odbc.erl:729 msgid "You need a client that supports x:data to register the nickname" msgstr "" -#: mod_muc/mod_muc.erl:717 +#: mod_muc/mod_muc.erl:718 mod_muc/mod_muc_odbc.erl:735 msgid "Nickname Registration at " msgstr "" -#: mod_muc/mod_muc.erl:721 +#: mod_muc/mod_muc.erl:722 mod_muc/mod_muc_odbc.erl:739 msgid "Enter nickname you want to register" msgstr "" -#: mod_muc/mod_muc.erl:722 mod_roster.erl:944 mod_roster_odbc.erl:1049 -#: mod_vcard.erl:358 mod_vcard.erl:471 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:447 +#: mod_muc/mod_muc.erl:723 mod_muc/mod_muc_odbc.erl:740 +#: mod_muc/mod_muc_room.erl:3810 mod_roster.erl:944 mod_roster_odbc.erl:1061 +#: mod_vcard.erl:364 mod_vcard.erl:477 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:453 msgid "Nickname" msgstr "" -#: mod_muc/mod_muc.erl:761 mod_muc/mod_muc_room.erl:933 -#: mod_muc/mod_muc_room.erl:1577 +#: mod_muc/mod_muc.erl:762 mod_muc/mod_muc_odbc.erl:784 +#: mod_muc/mod_muc_room.erl:1064 mod_muc/mod_muc_room.erl:1787 msgid "That nickname is registered by another person" msgstr "" -#: mod_muc/mod_muc.erl:787 +#: mod_muc/mod_muc.erl:788 mod_muc/mod_muc_odbc.erl:811 msgid "You must fill in field \"Nickname\" in the form" msgstr "" -#: mod_muc/mod_muc.erl:807 +#: mod_muc/mod_muc.erl:808 mod_muc/mod_muc_odbc.erl:831 msgid "ejabberd MUC module" msgstr "" @@ -612,8 +618,8 @@ msgstr "" msgid "is now known as" msgstr "" -#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:689 -#: mod_muc/mod_muc_room.erl:2138 +#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:688 +#: mod_muc/mod_muc_room.erl:2393 msgid " has set the subject to: " msgstr "" @@ -709,258 +715,306 @@ msgstr "" msgid "December" msgstr "" -#: mod_muc/mod_muc_log.erl:751 +#: mod_muc/mod_muc_log.erl:750 msgid "Room Configuration" msgstr "" -#: mod_muc/mod_muc_log.erl:760 +#: mod_muc/mod_muc_log.erl:759 msgid "Room Occupants" msgstr "" -#: mod_muc/mod_muc_room.erl:170 +#: mod_muc/mod_muc_room.erl:174 msgid "Traffic rate limit is exceeded" msgstr "" -#: mod_muc/mod_muc_room.erl:242 +#: mod_muc/mod_muc_room.erl:246 msgid "" "This participant is kicked from the room because he sent an error message" msgstr "" -#: mod_muc/mod_muc_room.erl:251 +#: mod_muc/mod_muc_room.erl:255 msgid "It is not allowed to send private messages to the conference" msgstr "" -#: mod_muc/mod_muc_room.erl:296 +#: mod_muc/mod_muc_room.erl:332 +msgid "Please, wait for a while before sending new voice request" +msgstr "" + +#: mod_muc/mod_muc_room.erl:347 +msgid "Voice requests are disabled in this conference" +msgstr "" + +#: mod_muc/mod_muc_room.erl:364 +msgid "Failed to extract JID from your voice request approval" +msgstr "" + +#: mod_muc/mod_muc_room.erl:393 +msgid "Only moderators can approve voice requests" +msgstr "" + +#: mod_muc/mod_muc_room.erl:408 msgid "Improper message type" msgstr "" -#: mod_muc/mod_muc_room.erl:406 +#: mod_muc/mod_muc_room.erl:518 msgid "" "This participant is kicked from the room because he sent an error message to " "another participant" msgstr "" -#: mod_muc/mod_muc_room.erl:419 +#: mod_muc/mod_muc_room.erl:531 msgid "It is not allowed to send private messages of type \"groupchat\"" msgstr "" -#: mod_muc/mod_muc_room.erl:431 mod_muc/mod_muc_room.erl:486 +#: mod_muc/mod_muc_room.erl:543 mod_muc/mod_muc_room.erl:611 msgid "Recipient is not in the conference room" msgstr "" -#: mod_muc/mod_muc_room.erl:451 mod_muc/mod_muc_room.erl:829 -#: mod_muc/mod_muc_room.erl:3609 -msgid "Only occupants are allowed to send messages to the conference" -msgstr "" - -#: mod_muc/mod_muc_room.erl:460 +#: mod_muc/mod_muc_room.erl:564 mod_muc/mod_muc_room.erl:585 msgid "It is not allowed to send private messages" msgstr "" -#: mod_muc/mod_muc_room.erl:509 +#: mod_muc/mod_muc_room.erl:576 mod_muc/mod_muc_room.erl:956 +#: mod_muc/mod_muc_room.erl:4040 +msgid "Only occupants are allowed to send messages to the conference" +msgstr "" + +#: mod_muc/mod_muc_room.erl:634 msgid "Only occupants are allowed to send queries to the conference" msgstr "" -#: mod_muc/mod_muc_room.erl:521 +#: mod_muc/mod_muc_room.erl:646 msgid "Queries to the conference members are not allowed in this room" msgstr "" -#: mod_muc/mod_muc_room.erl:805 +#: mod_muc/mod_muc_room.erl:932 msgid "" "Only moderators and participants are allowed to change the subject in this " "room" msgstr "" -#: mod_muc/mod_muc_room.erl:810 +#: mod_muc/mod_muc_room.erl:937 msgid "Only moderators are allowed to change the subject in this room" msgstr "" -#: mod_muc/mod_muc_room.erl:820 +#: mod_muc/mod_muc_room.erl:947 msgid "Visitors are not allowed to send messages to all occupants" msgstr "" -#: mod_muc/mod_muc_room.erl:891 +#: mod_muc/mod_muc_room.erl:1021 msgid "" "This participant is kicked from the room because he sent an error presence" msgstr "" -#: mod_muc/mod_muc_room.erl:909 +#: mod_muc/mod_muc_room.erl:1040 msgid "Visitors are not allowed to change their nicknames in this room" msgstr "" -#: mod_muc/mod_muc_room.erl:922 mod_muc/mod_muc_room.erl:1569 +#: mod_muc/mod_muc_room.erl:1053 mod_muc/mod_muc_room.erl:1779 msgid "That nickname is already in use by another occupant" msgstr "" -#: mod_muc/mod_muc_room.erl:1558 +#: mod_muc/mod_muc_room.erl:1768 msgid "You have been banned from this room" msgstr "" -#: mod_muc/mod_muc_room.erl:1561 +#: mod_muc/mod_muc_room.erl:1771 msgid "Membership is required to enter this room" msgstr "" -#: mod_muc/mod_muc_room.erl:1597 +#: mod_muc/mod_muc_room.erl:1807 msgid "This room is not anonymous" msgstr "" -#: mod_muc/mod_muc_room.erl:1623 +#: mod_muc/mod_muc_room.erl:1833 msgid "A password is required to enter this room" msgstr "" -#: mod_muc/mod_muc_room.erl:1645 mod_register.erl:246 +#: mod_muc/mod_muc_room.erl:1855 mod_register.erl:246 msgid "Too many CAPTCHA requests" msgstr "" -#: mod_muc/mod_muc_room.erl:1654 -msgid "Unable to generate a captcha" +#: mod_muc/mod_muc_room.erl:1864 mod_register.erl:251 +msgid "Unable to generate a CAPTCHA" msgstr "" -#: mod_muc/mod_muc_room.erl:1664 +#: mod_muc/mod_muc_room.erl:1874 msgid "Incorrect password" msgstr "" -#: mod_muc/mod_muc_room.erl:2193 +#: mod_muc/mod_muc_room.erl:2448 msgid "Administrator privileges required" msgstr "" -#: mod_muc/mod_muc_room.erl:2208 +#: mod_muc/mod_muc_room.erl:2463 msgid "Moderator privileges required" msgstr "" -#: mod_muc/mod_muc_room.erl:2363 +#: mod_muc/mod_muc_room.erl:2619 msgid "Jabber ID ~s is invalid" msgstr "" -#: mod_muc/mod_muc_room.erl:2377 +#: mod_muc/mod_muc_room.erl:2633 msgid "Nickname ~s does not exist in the room" msgstr "" -#: mod_muc/mod_muc_room.erl:2403 mod_muc/mod_muc_room.erl:2797 +#: mod_muc/mod_muc_room.erl:2659 mod_muc/mod_muc_room.erl:3049 msgid "Invalid affiliation: ~s" msgstr "" -#: mod_muc/mod_muc_room.erl:2460 +#: mod_muc/mod_muc_room.erl:2713 msgid "Invalid role: ~s" msgstr "" -#: mod_muc/mod_muc_room.erl:2774 mod_muc/mod_muc_room.erl:2810 +#: mod_muc/mod_muc_room.erl:3026 mod_muc/mod_muc_room.erl:3062 msgid "Owner privileges required" msgstr "" -#: mod_muc/mod_muc_room.erl:2941 +#: mod_muc/mod_muc_room.erl:3195 msgid "Configuration of room ~s" msgstr "" -#: mod_muc/mod_muc_room.erl:2946 +#: mod_muc/mod_muc_room.erl:3200 msgid "Room title" msgstr "" -#: mod_muc/mod_muc_room.erl:2949 mod_muc/mod_muc_room.erl:3388 +#: mod_muc/mod_muc_room.erl:3203 mod_muc/mod_muc_room.erl:3692 msgid "Room description" msgstr "" -#: mod_muc/mod_muc_room.erl:2956 +#: mod_muc/mod_muc_room.erl:3210 msgid "Make room persistent" msgstr "" -#: mod_muc/mod_muc_room.erl:2961 +#: mod_muc/mod_muc_room.erl:3215 msgid "Make room public searchable" msgstr "" -#: mod_muc/mod_muc_room.erl:2964 +#: mod_muc/mod_muc_room.erl:3218 msgid "Make participants list public" msgstr "" -#: mod_muc/mod_muc_room.erl:2967 +#: mod_muc/mod_muc_room.erl:3221 msgid "Make room password protected" msgstr "" -#: mod_muc/mod_muc_room.erl:2978 +#: mod_muc/mod_muc_room.erl:3232 msgid "Maximum Number of Occupants" msgstr "" -#: mod_muc/mod_muc_room.erl:2985 +#: mod_muc/mod_muc_room.erl:3239 msgid "No limit" msgstr "" -#: mod_muc/mod_muc_room.erl:2996 +#: mod_muc/mod_muc_room.erl:3250 msgid "Present real Jabber IDs to" msgstr "" -#: mod_muc/mod_muc_room.erl:3004 +#: mod_muc/mod_muc_room.erl:3258 mod_muc/mod_muc_room.erl:3292 msgid "moderators only" msgstr "" -#: mod_muc/mod_muc_room.erl:3006 +#: mod_muc/mod_muc_room.erl:3260 mod_muc/mod_muc_room.erl:3294 msgid "anyone" msgstr "" -#: mod_muc/mod_muc_room.erl:3008 +#: mod_muc/mod_muc_room.erl:3262 msgid "Make room members-only" msgstr "" -#: mod_muc/mod_muc_room.erl:3011 +#: mod_muc/mod_muc_room.erl:3265 msgid "Make room moderated" msgstr "" -#: mod_muc/mod_muc_room.erl:3014 +#: mod_muc/mod_muc_room.erl:3268 msgid "Default users as participants" msgstr "" -#: mod_muc/mod_muc_room.erl:3017 +#: mod_muc/mod_muc_room.erl:3271 msgid "Allow users to change the subject" msgstr "" -#: mod_muc/mod_muc_room.erl:3020 +#: mod_muc/mod_muc_room.erl:3274 msgid "Allow users to send private messages" msgstr "" -#: mod_muc/mod_muc_room.erl:3023 +#: mod_muc/mod_muc_room.erl:3279 +msgid "Allow visitors to send private messages to" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3290 +msgid "nobody" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3296 msgid "Allow users to query other users" msgstr "" -#: mod_muc/mod_muc_room.erl:3026 +#: mod_muc/mod_muc_room.erl:3299 msgid "Allow users to send invites" msgstr "" -#: mod_muc/mod_muc_room.erl:3029 +#: mod_muc/mod_muc_room.erl:3302 msgid "Allow visitors to send status text in presence updates" msgstr "" -#: mod_muc/mod_muc_room.erl:3032 +#: mod_muc/mod_muc_room.erl:3305 msgid "Allow visitors to change nickname" msgstr "" -#: mod_muc/mod_muc_room.erl:3038 -msgid "Make room captcha protected" +#: mod_muc/mod_muc_room.erl:3308 +msgid "Allow visitors to send voice requests" msgstr "" -#: mod_muc/mod_muc_room.erl:3043 +#: mod_muc/mod_muc_room.erl:3311 +msgid "Minimum interval between voice requests (in seconds)" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3317 +msgid "Make room CAPTCHA protected" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3322 msgid "Exclude Jabber IDs from CAPTCHA challenge" msgstr "" -#: mod_muc/mod_muc_room.erl:3050 +#: mod_muc/mod_muc_room.erl:3329 msgid "Enable logging" msgstr "" -#: mod_muc/mod_muc_room.erl:3058 +#: mod_muc/mod_muc_room.erl:3337 msgid "You need an x:data capable client to configure room" msgstr "" -#: mod_muc/mod_muc_room.erl:3390 +#: mod_muc/mod_muc_room.erl:3694 msgid "Number of occupants" msgstr "" -#: mod_muc/mod_muc_room.erl:3446 +#: mod_muc/mod_muc_room.erl:3750 msgid "private, " msgstr "" -#: mod_muc/mod_muc_room.erl:3529 +#: mod_muc/mod_muc_room.erl:3799 +msgid "Voice request" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3803 +msgid "Either approve or decline the voice request." +msgstr "" + +#: mod_muc/mod_muc_room.erl:3809 +msgid "User JID" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3811 +msgid "Grant voice to this person?" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3960 msgid "~s invites you to the room ~s" msgstr "" -#: mod_muc/mod_muc_room.erl:3538 +#: mod_muc/mod_muc_room.erl:3969 msgid "the password is" msgstr "" @@ -974,14 +1028,15 @@ msgid "~s's Offline Messages Queue" msgstr "" #: mod_offline.erl:563 mod_offline_odbc.erl:411 mod_roster.erl:987 -#: mod_roster_odbc.erl:1092 mod_shared_roster.erl:896 -#: mod_shared_roster.erl:1005 web/ejabberd_web_admin.erl:833 +#: mod_roster_odbc.erl:1104 mod_shared_roster.erl:901 +#: mod_shared_roster.erl:1010 mod_shared_roster_odbc.erl:930 +#: mod_shared_roster_odbc.erl:1039 web/ejabberd_web_admin.erl:833 #: web/ejabberd_web_admin.erl:874 web/ejabberd_web_admin.erl:942 #: web/ejabberd_web_admin.erl:978 web/ejabberd_web_admin.erl:1019 -#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1758 -#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1961 -#: web/ejabberd_web_admin.erl:2030 web/ejabberd_web_admin.erl:2134 -#: web/ejabberd_web_admin.erl:2159 web/ejabberd_web_admin.erl:2247 +#: web/ejabberd_web_admin.erl:1508 web/ejabberd_web_admin.erl:1760 +#: web/ejabberd_web_admin.erl:1931 web/ejabberd_web_admin.erl:1963 +#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2135 +#: web/ejabberd_web_admin.erl:2160 web/ejabberd_web_admin.erl:2248 msgid "Submitted" msgstr "" @@ -1001,8 +1056,9 @@ msgstr "" msgid "Packet" msgstr "" -#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:903 -#: web/ejabberd_web_admin.erl:882 web/ejabberd_web_admin.erl:986 +#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:908 +#: mod_shared_roster_odbc.erl:937 web/ejabberd_web_admin.erl:882 +#: web/ejabberd_web_admin.erl:986 msgid "Delete Selected" msgstr "" @@ -1018,103 +1074,103 @@ msgstr "" msgid "ejabberd SOCKS5 Bytestreams module" msgstr "" -#: mod_pubsub/mod_pubsub.erl:1119 mod_pubsub/mod_pubsub_odbc.erl:928 +#: mod_pubsub/mod_pubsub.erl:1120 mod_pubsub/mod_pubsub_odbc.erl:929 msgid "Publish-Subscribe" msgstr "" -#: mod_pubsub/mod_pubsub.erl:1213 mod_pubsub/mod_pubsub_odbc.erl:1024 +#: mod_pubsub/mod_pubsub.erl:1214 mod_pubsub/mod_pubsub_odbc.erl:1025 msgid "ejabberd Publish-Subscribe module" msgstr "" -#: mod_pubsub/mod_pubsub.erl:1496 mod_pubsub/mod_pubsub_odbc.erl:1311 +#: mod_pubsub/mod_pubsub.erl:1497 mod_pubsub/mod_pubsub_odbc.erl:1312 msgid "PubSub subscriber request" msgstr "" -#: mod_pubsub/mod_pubsub.erl:1498 mod_pubsub/mod_pubsub_odbc.erl:1313 +#: mod_pubsub/mod_pubsub.erl:1499 mod_pubsub/mod_pubsub_odbc.erl:1314 msgid "Choose whether to approve this entity's subscription." msgstr "" -#: mod_pubsub/mod_pubsub.erl:1504 mod_pubsub/mod_pubsub_odbc.erl:1319 +#: mod_pubsub/mod_pubsub.erl:1505 mod_pubsub/mod_pubsub_odbc.erl:1320 msgid "Node ID" msgstr "" -#: mod_pubsub/mod_pubsub.erl:1509 mod_pubsub/mod_pubsub_odbc.erl:1324 +#: mod_pubsub/mod_pubsub.erl:1510 mod_pubsub/mod_pubsub_odbc.erl:1325 msgid "Subscriber Address" msgstr "" -#: mod_pubsub/mod_pubsub.erl:1515 mod_pubsub/mod_pubsub_odbc.erl:1330 +#: mod_pubsub/mod_pubsub.erl:1516 mod_pubsub/mod_pubsub_odbc.erl:1331 msgid "Allow this Jabber ID to subscribe to this pubsub node?" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3416 mod_pubsub/mod_pubsub_odbc.erl:3229 +#: mod_pubsub/mod_pubsub.erl:3474 mod_pubsub/mod_pubsub_odbc.erl:3287 msgid "Deliver payloads with event notifications" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3417 mod_pubsub/mod_pubsub_odbc.erl:3230 +#: mod_pubsub/mod_pubsub.erl:3475 mod_pubsub/mod_pubsub_odbc.erl:3288 msgid "Deliver event notifications" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3418 mod_pubsub/mod_pubsub_odbc.erl:3231 +#: mod_pubsub/mod_pubsub.erl:3476 mod_pubsub/mod_pubsub_odbc.erl:3289 msgid "Notify subscribers when the node configuration changes" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3419 mod_pubsub/mod_pubsub_odbc.erl:3232 +#: mod_pubsub/mod_pubsub.erl:3477 mod_pubsub/mod_pubsub_odbc.erl:3290 msgid "Notify subscribers when the node is deleted" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3420 mod_pubsub/mod_pubsub_odbc.erl:3233 +#: mod_pubsub/mod_pubsub.erl:3478 mod_pubsub/mod_pubsub_odbc.erl:3291 msgid "Notify subscribers when items are removed from the node" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3421 mod_pubsub/mod_pubsub_odbc.erl:3234 +#: mod_pubsub/mod_pubsub.erl:3479 mod_pubsub/mod_pubsub_odbc.erl:3292 msgid "Persist items to storage" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3422 mod_pubsub/mod_pubsub_odbc.erl:3235 +#: mod_pubsub/mod_pubsub.erl:3480 mod_pubsub/mod_pubsub_odbc.erl:3293 msgid "A friendly name for the node" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3423 mod_pubsub/mod_pubsub_odbc.erl:3236 +#: mod_pubsub/mod_pubsub.erl:3481 mod_pubsub/mod_pubsub_odbc.erl:3294 msgid "Max # of items to persist" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3424 mod_pubsub/mod_pubsub_odbc.erl:3237 +#: mod_pubsub/mod_pubsub.erl:3482 mod_pubsub/mod_pubsub_odbc.erl:3295 msgid "Whether to allow subscriptions" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3425 mod_pubsub/mod_pubsub_odbc.erl:3238 +#: mod_pubsub/mod_pubsub.erl:3483 mod_pubsub/mod_pubsub_odbc.erl:3296 msgid "Specify the access model" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3428 mod_pubsub/mod_pubsub_odbc.erl:3241 +#: mod_pubsub/mod_pubsub.erl:3486 mod_pubsub/mod_pubsub_odbc.erl:3299 msgid "Roster groups allowed to subscribe" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3429 mod_pubsub/mod_pubsub_odbc.erl:3242 +#: mod_pubsub/mod_pubsub.erl:3487 mod_pubsub/mod_pubsub_odbc.erl:3300 msgid "Specify the publisher model" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3431 mod_pubsub/mod_pubsub_odbc.erl:3244 +#: mod_pubsub/mod_pubsub.erl:3489 mod_pubsub/mod_pubsub_odbc.erl:3302 msgid "Purge all items when the relevant publisher goes offline" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3432 mod_pubsub/mod_pubsub_odbc.erl:3245 +#: mod_pubsub/mod_pubsub.erl:3490 mod_pubsub/mod_pubsub_odbc.erl:3303 msgid "Specify the event message type" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3434 mod_pubsub/mod_pubsub_odbc.erl:3247 +#: mod_pubsub/mod_pubsub.erl:3492 mod_pubsub/mod_pubsub_odbc.erl:3305 msgid "Max payload size in bytes" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3435 mod_pubsub/mod_pubsub_odbc.erl:3248 +#: mod_pubsub/mod_pubsub.erl:3493 mod_pubsub/mod_pubsub_odbc.erl:3306 msgid "When to send the last published item" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3437 mod_pubsub/mod_pubsub_odbc.erl:3250 +#: mod_pubsub/mod_pubsub.erl:3495 mod_pubsub/mod_pubsub_odbc.erl:3308 msgid "Only deliver notifications to available users" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3438 mod_pubsub/mod_pubsub_odbc.erl:3251 +#: mod_pubsub/mod_pubsub.erl:3496 mod_pubsub/mod_pubsub_odbc.erl:3309 msgid "The collections with which a node is affiliated" msgstr "" @@ -1130,15 +1186,11 @@ msgstr "" msgid "Choose a username and password to register with this server" msgstr "" -#: mod_register.erl:230 mod_vcard.erl:358 mod_vcard_odbc.erl:336 -#: web/ejabberd_web_admin.erl:1516 web/ejabberd_web_admin.erl:1573 +#: mod_register.erl:230 mod_vcard.erl:364 mod_vcard_odbc.erl:342 +#: web/ejabberd_web_admin.erl:1515 web/ejabberd_web_admin.erl:1572 msgid "User" msgstr "" -#: mod_register.erl:251 -msgid "Unable to generate a CAPTCHA" -msgstr "" - #: mod_register.erl:316 mod_register.erl:361 msgid "The password is too weak" msgstr "" @@ -1147,171 +1199,174 @@ msgstr "" msgid "Users are not allowed to register accounts so quickly" msgstr "" -#: mod_roster.erl:938 mod_roster_odbc.erl:1043 web/ejabberd_web_admin.erl:1699 -#: web/ejabberd_web_admin.erl:1884 web/ejabberd_web_admin.erl:1895 -#: web/ejabberd_web_admin.erl:2218 +#: mod_roster.erl:938 mod_roster_odbc.erl:1055 web/ejabberd_web_admin.erl:1701 +#: web/ejabberd_web_admin.erl:1886 web/ejabberd_web_admin.erl:1897 +#: web/ejabberd_web_admin.erl:2219 msgid "None" msgstr "" -#: mod_roster.erl:945 mod_roster_odbc.erl:1050 +#: mod_roster.erl:945 mod_roster_odbc.erl:1062 msgid "Subscription" msgstr "" -#: mod_roster.erl:946 mod_roster_odbc.erl:1051 +#: mod_roster.erl:946 mod_roster_odbc.erl:1063 msgid "Pending" msgstr "" -#: mod_roster.erl:947 mod_roster_odbc.erl:1052 +#: mod_roster.erl:947 mod_roster_odbc.erl:1064 msgid "Groups" msgstr "" -#: mod_roster.erl:974 mod_roster_odbc.erl:1079 +#: mod_roster.erl:974 mod_roster_odbc.erl:1091 msgid "Validate" msgstr "" -#: mod_roster.erl:982 mod_roster_odbc.erl:1087 +#: mod_roster.erl:982 mod_roster_odbc.erl:1099 msgid "Remove" msgstr "" -#: mod_roster.erl:985 mod_roster_odbc.erl:1090 +#: mod_roster.erl:985 mod_roster_odbc.erl:1102 msgid "Roster of " msgstr "" -#: mod_roster.erl:988 mod_roster_odbc.erl:1093 mod_shared_roster.erl:897 -#: mod_shared_roster.erl:1006 web/ejabberd_web_admin.erl:834 +#: mod_roster.erl:988 mod_roster_odbc.erl:1105 mod_shared_roster.erl:902 +#: mod_shared_roster.erl:1011 mod_shared_roster_odbc.erl:931 +#: mod_shared_roster_odbc.erl:1040 web/ejabberd_web_admin.erl:834 #: web/ejabberd_web_admin.erl:875 web/ejabberd_web_admin.erl:943 #: web/ejabberd_web_admin.erl:979 web/ejabberd_web_admin.erl:1020 -#: web/ejabberd_web_admin.erl:1510 web/ejabberd_web_admin.erl:1759 -#: web/ejabberd_web_admin.erl:1930 web/ejabberd_web_admin.erl:2135 -#: web/ejabberd_web_admin.erl:2160 +#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1761 +#: web/ejabberd_web_admin.erl:1932 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2161 msgid "Bad format" msgstr "" -#: mod_roster.erl:995 mod_roster_odbc.erl:1100 +#: mod_roster.erl:995 mod_roster_odbc.erl:1112 msgid "Add Jabber ID" msgstr "" -#: mod_roster.erl:1094 mod_roster_odbc.erl:1199 +#: mod_roster.erl:1094 mod_roster_odbc.erl:1211 msgid "Roster" msgstr "" -#: mod_shared_roster.erl:852 mod_shared_roster.erl:894 -#: mod_shared_roster.erl:1002 +#: mod_shared_roster.erl:857 mod_shared_roster.erl:899 +#: mod_shared_roster.erl:1007 mod_shared_roster_odbc.erl:886 +#: mod_shared_roster_odbc.erl:928 mod_shared_roster_odbc.erl:1036 msgid "Shared Roster Groups" msgstr "" -#: mod_shared_roster.erl:890 web/ejabberd_web_admin.erl:1366 -#: web/ejabberd_web_admin.erl:2460 +#: mod_shared_roster.erl:895 mod_shared_roster_odbc.erl:924 +#: web/ejabberd_web_admin.erl:1365 web/ejabberd_web_admin.erl:2461 msgid "Add New" msgstr "" -#: mod_shared_roster.erl:973 +#: mod_shared_roster.erl:978 mod_shared_roster_odbc.erl:1007 msgid "Name:" msgstr "" -#: mod_shared_roster.erl:978 +#: mod_shared_roster.erl:983 mod_shared_roster_odbc.erl:1012 msgid "Description:" msgstr "" -#: mod_shared_roster.erl:986 +#: mod_shared_roster.erl:991 mod_shared_roster_odbc.erl:1020 msgid "Members:" msgstr "" -#: mod_shared_roster.erl:994 +#: mod_shared_roster.erl:999 mod_shared_roster_odbc.erl:1028 msgid "Displayed Groups:" msgstr "" -#: mod_shared_roster.erl:1003 +#: mod_shared_roster.erl:1008 mod_shared_roster_odbc.erl:1037 msgid "Group " msgstr "" -#: mod_shared_roster.erl:1012 web/ejabberd_web_admin.erl:840 -#: web/ejabberd_web_admin.erl:884 web/ejabberd_web_admin.erl:949 -#: web/ejabberd_web_admin.erl:1026 web/ejabberd_web_admin.erl:2015 +#: mod_shared_roster.erl:1017 mod_shared_roster_odbc.erl:1046 +#: web/ejabberd_web_admin.erl:840 web/ejabberd_web_admin.erl:884 +#: web/ejabberd_web_admin.erl:949 web/ejabberd_web_admin.erl:1026 +#: web/ejabberd_web_admin.erl:2017 msgid "Submit" msgstr "" -#: mod_vcard.erl:165 mod_vcard_ldap.erl:237 mod_vcard_odbc.erl:129 +#: mod_vcard.erl:165 mod_vcard_ldap.erl:238 mod_vcard_odbc.erl:129 msgid "Erlang Jabber Server" msgstr "" -#: mod_vcard.erl:358 mod_vcard.erl:472 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:448 +#: mod_vcard.erl:364 mod_vcard.erl:478 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:454 msgid "Birthday" msgstr "" -#: mod_vcard.erl:358 mod_vcard.erl:474 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:450 +#: mod_vcard.erl:364 mod_vcard.erl:480 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:456 msgid "City" msgstr "" -#: mod_vcard.erl:358 mod_vcard.erl:473 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:449 +#: mod_vcard.erl:364 mod_vcard.erl:479 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:455 msgid "Country" msgstr "" -#: mod_vcard.erl:358 mod_vcard.erl:475 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:451 +#: mod_vcard.erl:364 mod_vcard.erl:481 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:457 msgid "Email" msgstr "" -#: mod_vcard.erl:358 mod_vcard.erl:470 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:446 +#: mod_vcard.erl:364 mod_vcard.erl:476 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:452 msgid "Family Name" msgstr "" -#: mod_vcard.erl:358 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_odbc.erl:342 msgid "" "Fill in the form to search for any matching Jabber User (Add * to the end of " "field to match substring)" msgstr "" -#: mod_vcard.erl:358 mod_vcard.erl:467 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:443 +#: mod_vcard.erl:364 mod_vcard.erl:473 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:449 msgid "Full Name" msgstr "" -#: mod_vcard.erl:358 mod_vcard.erl:469 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:445 +#: mod_vcard.erl:364 mod_vcard.erl:475 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:451 msgid "Middle Name" msgstr "" -#: mod_vcard.erl:358 mod_vcard.erl:468 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:444 web/ejabberd_web_admin.erl:2004 +#: mod_vcard.erl:364 mod_vcard.erl:474 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:450 web/ejabberd_web_admin.erl:2006 msgid "Name" msgstr "" -#: mod_vcard.erl:358 mod_vcard.erl:476 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:452 +#: mod_vcard.erl:364 mod_vcard.erl:482 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:458 msgid "Organization Name" msgstr "" -#: mod_vcard.erl:358 mod_vcard.erl:477 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:453 +#: mod_vcard.erl:364 mod_vcard.erl:483 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:459 msgid "Organization Unit" msgstr "" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "Search users in " msgstr "" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "You need an x:data capable client to search" msgstr "" -#: mod_vcard.erl:383 mod_vcard_ldap.erl:483 mod_vcard_odbc.erl:361 +#: mod_vcard.erl:389 mod_vcard_ldap.erl:487 mod_vcard_odbc.erl:367 msgid "vCard User Search" msgstr "" -#: mod_vcard.erl:439 mod_vcard_ldap.erl:537 mod_vcard_odbc.erl:415 +#: mod_vcard.erl:445 mod_vcard_ldap.erl:541 mod_vcard_odbc.erl:421 msgid "ejabberd vCard module" msgstr "" -#: mod_vcard.erl:463 mod_vcard_ldap.erl:547 mod_vcard_odbc.erl:439 +#: mod_vcard.erl:469 mod_vcard_ldap.erl:551 mod_vcard_odbc.erl:445 msgid "Search Results for " msgstr "" -#: mod_vcard_ldap.erl:458 +#: mod_vcard_ldap.erl:462 msgid "Fill in fields to search for any matching Jabber User" msgstr "" @@ -1372,7 +1427,7 @@ msgstr "" msgid "Show Integral Table" msgstr "" -#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1937 +#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1939 msgid "Statistics" msgstr "" @@ -1384,256 +1439,256 @@ msgstr "" msgid "Node not found" msgstr "" -#: web/ejabberd_web_admin.erl:1461 +#: web/ejabberd_web_admin.erl:1460 msgid "Host" msgstr "" -#: web/ejabberd_web_admin.erl:1462 +#: web/ejabberd_web_admin.erl:1461 msgid "Registered Users" msgstr "" -#: web/ejabberd_web_admin.erl:1574 +#: web/ejabberd_web_admin.erl:1573 msgid "Offline Messages" msgstr "" -#: web/ejabberd_web_admin.erl:1575 web/ejabberd_web_admin.erl:1765 +#: web/ejabberd_web_admin.erl:1574 web/ejabberd_web_admin.erl:1767 msgid "Last Activity" msgstr "" -#: web/ejabberd_web_admin.erl:1657 web/ejabberd_web_admin.erl:1673 +#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 msgid "Registered Users:" msgstr "" -#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 -#: web/ejabberd_web_admin.erl:2191 +#: web/ejabberd_web_admin.erl:1661 web/ejabberd_web_admin.erl:1677 +#: web/ejabberd_web_admin.erl:2192 msgid "Online Users:" msgstr "" -#: web/ejabberd_web_admin.erl:1661 +#: web/ejabberd_web_admin.erl:1663 msgid "Outgoing s2s Connections:" msgstr "" -#: web/ejabberd_web_admin.erl:1663 +#: web/ejabberd_web_admin.erl:1665 msgid "Outgoing s2s Servers:" msgstr "" -#: web/ejabberd_web_admin.erl:1732 web/mod_register_web.erl:175 +#: web/ejabberd_web_admin.erl:1734 web/mod_register_web.erl:175 #: web/mod_register_web.erl:372 web/mod_register_web.erl:381 #: web/mod_register_web.erl:411 msgid "Change Password" msgstr "" -#: web/ejabberd_web_admin.erl:1756 +#: web/ejabberd_web_admin.erl:1758 msgid "User " msgstr "" -#: web/ejabberd_web_admin.erl:1763 +#: web/ejabberd_web_admin.erl:1765 msgid "Connected Resources:" msgstr "" -#: web/ejabberd_web_admin.erl:1764 web/mod_register_web.erl:227 +#: web/ejabberd_web_admin.erl:1766 web/mod_register_web.erl:227 #: web/mod_register_web.erl:519 msgid "Password:" msgstr "" -#: web/ejabberd_web_admin.erl:1826 +#: web/ejabberd_web_admin.erl:1828 msgid "No Data" msgstr "" -#: web/ejabberd_web_admin.erl:1904 +#: web/ejabberd_web_admin.erl:1906 msgid "Nodes" msgstr "" -#: web/ejabberd_web_admin.erl:1927 web/ejabberd_web_admin.erl:1949 +#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1951 msgid "Node " msgstr "" -#: web/ejabberd_web_admin.erl:1936 +#: web/ejabberd_web_admin.erl:1938 msgid "Listened Ports" msgstr "" -#: web/ejabberd_web_admin.erl:1938 web/ejabberd_web_admin.erl:2259 -#: web/ejabberd_web_admin.erl:2447 +#: web/ejabberd_web_admin.erl:1940 web/ejabberd_web_admin.erl:2260 +#: web/ejabberd_web_admin.erl:2448 msgid "Update" msgstr "" -#: web/ejabberd_web_admin.erl:1941 web/ejabberd_web_admin.erl:2568 +#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2569 msgid "Restart" msgstr "" -#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2570 +#: web/ejabberd_web_admin.erl:1945 web/ejabberd_web_admin.erl:2571 msgid "Stop" msgstr "" -#: web/ejabberd_web_admin.erl:1957 +#: web/ejabberd_web_admin.erl:1959 msgid "RPC Call Error" msgstr "" -#: web/ejabberd_web_admin.erl:1998 +#: web/ejabberd_web_admin.erl:2000 msgid "Database Tables at " msgstr "" -#: web/ejabberd_web_admin.erl:2005 +#: web/ejabberd_web_admin.erl:2007 msgid "Storage Type" msgstr "" -#: web/ejabberd_web_admin.erl:2006 +#: web/ejabberd_web_admin.erl:2008 msgid "Elements" msgstr "" -#: web/ejabberd_web_admin.erl:2007 +#: web/ejabberd_web_admin.erl:2009 msgid "Memory" msgstr "" -#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2032 web/ejabberd_web_admin.erl:2137 msgid "Error" msgstr "" -#: web/ejabberd_web_admin.erl:2033 +#: web/ejabberd_web_admin.erl:2034 msgid "Backup of " msgstr "" -#: web/ejabberd_web_admin.erl:2035 +#: web/ejabberd_web_admin.erl:2036 msgid "" "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." msgstr "" -#: web/ejabberd_web_admin.erl:2040 +#: web/ejabberd_web_admin.erl:2041 msgid "Store binary backup:" msgstr "" -#: web/ejabberd_web_admin.erl:2044 web/ejabberd_web_admin.erl:2051 -#: web/ejabberd_web_admin.erl:2059 web/ejabberd_web_admin.erl:2066 -#: web/ejabberd_web_admin.erl:2073 web/ejabberd_web_admin.erl:2080 -#: web/ejabberd_web_admin.erl:2087 web/ejabberd_web_admin.erl:2095 -#: web/ejabberd_web_admin.erl:2102 web/ejabberd_web_admin.erl:2109 +#: web/ejabberd_web_admin.erl:2045 web/ejabberd_web_admin.erl:2052 +#: web/ejabberd_web_admin.erl:2060 web/ejabberd_web_admin.erl:2067 +#: web/ejabberd_web_admin.erl:2074 web/ejabberd_web_admin.erl:2081 +#: web/ejabberd_web_admin.erl:2088 web/ejabberd_web_admin.erl:2096 +#: web/ejabberd_web_admin.erl:2103 web/ejabberd_web_admin.erl:2110 msgid "OK" msgstr "" -#: web/ejabberd_web_admin.erl:2047 +#: web/ejabberd_web_admin.erl:2048 msgid "Restore binary backup immediately:" msgstr "" -#: web/ejabberd_web_admin.erl:2055 +#: web/ejabberd_web_admin.erl:2056 msgid "" "Restore binary backup after next ejabberd restart (requires less memory):" msgstr "" -#: web/ejabberd_web_admin.erl:2062 +#: web/ejabberd_web_admin.erl:2063 msgid "Store plain text backup:" msgstr "" -#: web/ejabberd_web_admin.erl:2069 +#: web/ejabberd_web_admin.erl:2070 msgid "Restore plain text backup immediately:" msgstr "" -#: web/ejabberd_web_admin.erl:2076 +#: web/ejabberd_web_admin.erl:2077 msgid "Import users data from a PIEFXIS file (XEP-0227):" msgstr "" -#: web/ejabberd_web_admin.erl:2083 +#: web/ejabberd_web_admin.erl:2084 msgid "Export data of all users in the server to PIEFXIS files (XEP-0227):" msgstr "" -#: web/ejabberd_web_admin.erl:2090 +#: web/ejabberd_web_admin.erl:2091 msgid "Export data of users in a host to PIEFXIS files (XEP-0227):" msgstr "" -#: web/ejabberd_web_admin.erl:2098 +#: web/ejabberd_web_admin.erl:2099 msgid "Import user data from jabberd14 spool file:" msgstr "" -#: web/ejabberd_web_admin.erl:2105 +#: web/ejabberd_web_admin.erl:2106 msgid "Import users data from jabberd14 spool directory:" msgstr "" -#: web/ejabberd_web_admin.erl:2131 +#: web/ejabberd_web_admin.erl:2132 msgid "Listened Ports at " msgstr "" -#: web/ejabberd_web_admin.erl:2156 +#: web/ejabberd_web_admin.erl:2157 msgid "Modules at " msgstr "" -#: web/ejabberd_web_admin.erl:2182 +#: web/ejabberd_web_admin.erl:2183 msgid "Statistics of ~p" msgstr "" -#: web/ejabberd_web_admin.erl:2185 +#: web/ejabberd_web_admin.erl:2186 msgid "Uptime:" msgstr "" -#: web/ejabberd_web_admin.erl:2188 +#: web/ejabberd_web_admin.erl:2189 msgid "CPU Time:" msgstr "" -#: web/ejabberd_web_admin.erl:2194 +#: web/ejabberd_web_admin.erl:2195 msgid "Transactions Committed:" msgstr "" -#: web/ejabberd_web_admin.erl:2197 +#: web/ejabberd_web_admin.erl:2198 msgid "Transactions Aborted:" msgstr "" -#: web/ejabberd_web_admin.erl:2200 +#: web/ejabberd_web_admin.erl:2201 msgid "Transactions Restarted:" msgstr "" -#: web/ejabberd_web_admin.erl:2203 +#: web/ejabberd_web_admin.erl:2204 msgid "Transactions Logged:" msgstr "" -#: web/ejabberd_web_admin.erl:2245 +#: web/ejabberd_web_admin.erl:2246 msgid "Update " msgstr "" -#: web/ejabberd_web_admin.erl:2253 +#: web/ejabberd_web_admin.erl:2254 msgid "Update plan" msgstr "" -#: web/ejabberd_web_admin.erl:2254 +#: web/ejabberd_web_admin.erl:2255 msgid "Modified modules" msgstr "" -#: web/ejabberd_web_admin.erl:2255 +#: web/ejabberd_web_admin.erl:2256 msgid "Update script" msgstr "" -#: web/ejabberd_web_admin.erl:2256 +#: web/ejabberd_web_admin.erl:2257 msgid "Low level update script" msgstr "" -#: web/ejabberd_web_admin.erl:2257 +#: web/ejabberd_web_admin.erl:2258 msgid "Script check" msgstr "" -#: web/ejabberd_web_admin.erl:2425 +#: web/ejabberd_web_admin.erl:2426 msgid "Port" msgstr "" -#: web/ejabberd_web_admin.erl:2426 +#: web/ejabberd_web_admin.erl:2427 msgid "IP" msgstr "" -#: web/ejabberd_web_admin.erl:2427 +#: web/ejabberd_web_admin.erl:2428 msgid "Protocol" msgstr "" -#: web/ejabberd_web_admin.erl:2428 web/ejabberd_web_admin.erl:2555 +#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 msgid "Module" msgstr "" -#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 +#: web/ejabberd_web_admin.erl:2430 web/ejabberd_web_admin.erl:2557 msgid "Options" msgstr "" -#: web/ejabberd_web_admin.erl:2449 +#: web/ejabberd_web_admin.erl:2450 msgid "Delete" msgstr "" -#: web/ejabberd_web_admin.erl:2578 +#: web/ejabberd_web_admin.erl:2579 msgid "Start" msgstr "" diff --git a/src/msgs/el.msg b/src/msgs/el.msg index 4fa37a046..70fe3ac0e 100644 --- a/src/msgs/el.msg +++ b/src/msgs/el.msg @@ -20,7 +20,9 @@ {"Allow users to send invites","Επιτρέψετε στους χρήστες να αποστέλλουν προσκλήσεις"}. {"Allow users to send private messages","Επιτρέψετε στους χρήστες να αποστέλλουν ιδιωτικά μηνύματα"}. {"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 voice requests","Επιτρέψτε στους επισκέπτες να στέλνουν αιτήματα φωνής"}. {"All Users","Όλοι οι χρήστες"}. {"Announcements","Ανακοινώσεις"}. {"anyone","οποιοσδήποτε"}. @@ -75,6 +77,7 @@ {"Dump Backup to Text File at ","Αποθήκευση Αντιγράφου Ασφαλείας σε αρχείο κειμένου στο "}. {"Dump to Text File","Αποθήκευση σε αρχείο κειμένου"}. {"Edit Properties","Επεξεργασία ιδιοτήτων"}. +{"Either approve or decline the voice request.","Είτε εγκρίνετε ή απορρίψτε το αίτημα φωνής."}. {"ejabberd IRC module","ejabberd IRC module"}. {"ejabberd MUC module","ejabberd MUC module"}. {"ejabberd Publish-Subscribe module","ejabberd module Δημοσίευσης-Εγγραφής"}. @@ -98,8 +101,10 @@ {"Erlang Jabber Server","Erlang Jabber Διακομιστής"}. {"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\"}]."}. +{"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 users in a host to PIEFXIS files (XEP-0227):","Εξαγωγή δεδομένων των χρηστών κεντρικού υπολογιστή σε PIEFXIS αρχεία (XEP-0227):"}. +{"Failed to extract JID from your voice request approval","Απέτυχε η εξαγωγή JID από την έγκριση του αιτήματος φωνής σας"}. {"Family Name","Επώνυμο"}. {"February","Φεβρουάριος"}. {"Fill in fields to search for any matching Jabber User","Συμπληρώστε τα πεδία για να αναζητήσετε οποιαδήποτε ταιριάζοντα Jabber χρήστη"}. @@ -113,6 +118,7 @@ {"Get User Last Login Time","Έκθεση Τελευταίας Ώρας Σύνδεσης Χρήστη"}. {"Get User Password","Έκθεση Κωδικού Πρόσβασης Χρήστη"}. {"Get User Statistics","Έκθεση Στατιστικών Χρήστη"}. +{"Grant voice to this person?","Παραχώρηση φωνής σε αυτό το άτομο;"}. {"Groups","Ομάδες"}. {"Group ","Ομάδα"}. {"has been banned","έχει απαγορευθεί"}. @@ -168,7 +174,7 @@ {"List of modules to start","Λίστα των Module για Εκκίνηση"}. {"Low level update script","Προγράμα ενημέρωσης χαμηλού επίπεδου "}. {"Make participants list public","Κάντε κοινό τον κατάλογο συμμετεχόντων"}. -{"Make room captcha protected","Κάντε την αίθουσα CAPTCHA προστατεύονομενη"}. +{"Make room CAPTCHA protected","Κάντε την αίθουσα CAPTCHA προστατεύονομενη"}. {"Make room members-only","Κάντε την αίθουσα μόνο για μέλη"}. {"Make room moderated","Κάντε την αίθουσα εποπτεύονομενη"}. {"Make room password protected","Κάντε την αίθουσα προστατεύομενη με κωδικό πρόσβασης"}. @@ -185,6 +191,7 @@ {"Memory","Μνήμη"}. {"Message body","Περιεχόμενο μηνυμάτως"}. {"Middle Name","Πατρώνυμο"}. +{"Minimum interval between voice requests (in seconds)","Ελάχιστο χρονικό διάστημα μεταξύ αιτημάτων φωνής (σε δευτερόλεπτα)"}. {"Moderator privileges required","Aπαιτούνται προνόμια συντονιστή"}. {"moderators only","συντονιστές μόνο"}. {"Modified modules","Τροποποιημένα modules"}. @@ -200,6 +207,7 @@ {"Nickname ~s does not exist in the room","Ψευδώνυμο ~s δεν υπάρχει σε αυτή την αίθουσα"}. {"Nickname","Ψευδώνυμο"}. {"No body provided for announce message","Δεν προμηθεύτικε περιεχόμενο ανακοινώσης"}. +{"nobody","κανείς"}. {"No Data","Κανένα στοιχείο"}. {"Node ID","Ταυτότητα Κόμβου"}. {"Node not found","Κόμβος δεν βρέθηκε"}. @@ -227,6 +235,7 @@ {"Only deliver notifications to available users","Παράδωση κοινοποιήσεων μόνο σε διαθέσιμους χρήστες"}. {"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 can approve voice requests","Μόνο οι συντονιστές μπορούν να εγκρίνουν τις αιτήσεις φωνής"}. {"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","Μόνο οι διαχειριστές των υπηρεσιών επιτρέπεται να στείλουν υπηρεσιακά μηνύματα"}. @@ -250,6 +259,7 @@ {"Persist items to storage","Μονιμη αποθήκευση στοιχείων"}. {"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, wait for a while before sending new voice request","Παρακαλώ, περιμένετε για λίγο πριν την αποστολή νέου αιτήματος φωνής"}. {"Pong","Πονγκ"}. {"Port ~b","Θύρα ~b"}. {"Port","Θύρα"}. @@ -338,7 +348,7 @@ {"Sunday","Κυριακή"}. {"That nickname is already in use by another occupant","Αυτό το ψευδώνυμο είναι ήδη σε χρήση από άλλον συμμετέχων"}. {"That nickname is registered by another person","Αυτό το ψευδώνυμο είναι καταχωρημένο από άλλο πρόσωπο"}. -{"The captcha is valid.","Το captcha είναι έγκυρο."}. +{"The CAPTCHA is valid.","Το CAPTCHA είναι έγκυρο."}. {"The CAPTCHA verification has failed","Η επαλήθευση της εικόνας CAPTCHA απέτυχε"}. {"The collections with which a node is affiliated","Οι συλλογές με την οποία είναι ένας κόμβος συνδέεται"}. {"The password is too weak","Ο κωδικός πρόσβασης είναι πολύ ασθενές"}. @@ -357,6 +367,7 @@ {"Thursday","Πέμπτη"}. {"Time delay","Χρόνος καθυστέρησης"}. {"Time","Χρόνος"}. +{"Too many CAPTCHA requests","Πάρα πολλά αιτήματα CAPTCHA"}. {"To ~s","Πρώς ~s"}. {"To","Πρώς"}. {"Traffic rate limit is exceeded","Υπέρφορτωση"}. @@ -365,8 +376,7 @@ {"Transactions Logged:","Καταγραμμένες συναλλαγές:"}. {"Transactions Restarted:","Επανειλημμένες συναλλαγές:"}. {"Tuesday","Τρίτη"}. -{"Unable to generate a captcha","Αδήνατο να δημιουργηθεί CAPTCHA"}. -{"Unable to generate a CAPTCHA","Αδήνατο να δημιουργηθεί εικόνα CAPTCHA"}. +{"Unable to generate a CAPTCHA","Αδήνατο να δημιουργηθεί CAPTCHA"}. {"Unauthorized","Χορίς Εξουσιοδότηση"}. {"Unregister a Jabber account","Καταργήστε την εγγραφή ενός λογαριασμού Jabber"}. {"Unregister","Καταργήση εγγραφής"}. @@ -378,6 +388,7 @@ {"Update","Ενημέρωση"}. {"Uptime:","Uptime:"}. {"Use of STARTTLS required","Απαιτείται χρήση STARTTLS "}. +{"User JID","JID Χρήστη"}. {"User Management","Διαχείριση χρηστών"}. {"Username:","Όνομα χρήστη"}. {"Users are not allowed to register accounts so quickly","Οι χρήστες δεν επιτρέπεται να εγγραφούν λογαριασμούς τόσο γρήγορα"}. @@ -390,6 +401,8 @@ {"Virtual Hosts","εικονικοί κεντρικοί υπολογιστές"}. {"Visitors are not allowed to change their nicknames in this room","Οι επισκέπτες δεν επιτρέπεται να αλλάξουν τα ψευδώνυμα τους σε αυτή την αίθουσα"}. {"Visitors are not allowed to send messages to all occupants","Οι επισκέπτες δεν επιτρέπεται να στείλουν μηνύματα σε όλους τους συμμετέχωντες"}. +{"Voice requests are disabled in this conference","Τα αιτήματα φωνής είναι απενεργοποιημένα, σε αυτό το συνέδριο"}. +{"Voice request","Αίτημα φωνής"}. {"Wednesday","Τετάρτη"}. {"When to send the last published item","Πότε να αποσταλθεί το τελευταίο στοιχείο που δημοσιεύθηκε"}. {"Whether to allow subscriptions","Εάν επιτρέποντε συνδρομές"}. diff --git a/src/msgs/el.po b/src/msgs/el.po index c0ca7ba2f..15a709b68 100644 --- a/src/msgs/el.po +++ b/src/msgs/el.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: el\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2010-12-01 04:37-0000\n" +"PO-Revision-Date: 2012-04-18 12:50-0000\n" "Last-Translator: James Iakovos Mandelis \n" "Language-Team: \n" "Language: \n" @@ -19,11 +19,11 @@ msgstr "Απαιτείται χρήση STARTTLS " msgid "No resource provided" msgstr "Δεν προμηθεύτικε πόρος" -#: ejabberd_c2s.erl:1149 +#: ejabberd_c2s.erl:1197 msgid "Replaced by new connection" msgstr "Αντικαταστάθικε από νέα σύνδεση" -#: ejabberd_c2s.erl:1837 +#: ejabberd_c2s.erl:1885 msgid "Your active privacy list has denied the routing of this stanza." msgstr "" "Ο ενεργός κατάλογος απορρήτου, έχει αρνηθεί τη δρομολόγηση αυτής της στροφής " @@ -47,8 +47,8 @@ msgid "CAPTCHA web page" msgstr "Ιστοσελίδα CAPTCHA " #: ejabberd_captcha.erl:307 -msgid "The captcha is valid." -msgstr "Το captcha είναι έγκυρο." +msgid "The CAPTCHA is valid." +msgstr "Το CAPTCHA είναι έγκυρο." #: mod_adhoc.erl:95 mod_adhoc.erl:125 mod_adhoc.erl:143 mod_adhoc.erl:161 msgid "Commands" @@ -62,71 +62,74 @@ msgstr "Πινγκ" msgid "Pong" msgstr "Πονγκ" -#: mod_announce.erl:506 +#: mod_announce.erl:507 mod_announce_odbc.erl:499 msgid "Really delete message of the day?" msgstr "Πραγματικά να διαγράψετε το μήνυμα της ημέρας;" -#: mod_announce.erl:514 mod_configure.erl:1083 mod_configure.erl:1128 +#: mod_announce.erl:515 mod_announce_odbc.erl:507 mod_configure.erl:1083 +#: mod_configure.erl:1128 msgid "Subject" msgstr "Θέμα" -#: mod_announce.erl:519 mod_configure.erl:1088 mod_configure.erl:1133 +#: mod_announce.erl:520 mod_announce_odbc.erl:512 mod_configure.erl:1088 +#: mod_configure.erl:1133 msgid "Message body" msgstr "Περιεχόμενο μηνυμάτως" -#: mod_announce.erl:599 +#: mod_announce.erl:600 mod_announce_odbc.erl:592 msgid "No body provided for announce message" msgstr "Δεν προμηθεύτικε περιεχόμενο ανακοινώσης" -#: mod_announce.erl:634 +#: mod_announce.erl:635 mod_announce_odbc.erl:627 msgid "Announcements" msgstr "Ανακοινώσεις" -#: mod_announce.erl:636 +#: mod_announce.erl:637 mod_announce_odbc.erl:629 msgid "Send announcement to all users" msgstr "Αποστολή ανακοίνωσης σε όλους τους χρήστες" -#: mod_announce.erl:638 +#: mod_announce.erl:639 mod_announce_odbc.erl:631 msgid "Send announcement to all users on all hosts" msgstr "" "Αποστολή ανακοίνωσης σε όλους τους χρήστες σε όλους τους κεντρικούς " "υπολογιστές" -#: mod_announce.erl:640 +#: mod_announce.erl:641 mod_announce_odbc.erl:633 msgid "Send announcement to all online users" msgstr "Αποστολή ανακοίνωσης σε όλους τους συνδεδεμένους χρήστες" -#: mod_announce.erl:642 mod_configure.erl:1078 mod_configure.erl:1123 +#: mod_announce.erl:643 mod_announce_odbc.erl:635 mod_configure.erl:1078 +#: mod_configure.erl:1123 msgid "Send announcement to all online users on all hosts" msgstr "" "Αποστολή ανακοίνωσης σε όλους τους συνδεδεμένους χρήστες σε όλους τους " "κεντρικούς υπολογιστές" -#: mod_announce.erl:644 +#: mod_announce.erl:645 mod_announce_odbc.erl:637 msgid "Set message of the day and send to online users" msgstr "Ορίστε μήνυμα ημέρας και αποστολή στους συνδεδεμένους χρήστες" -#: mod_announce.erl:646 +#: mod_announce.erl:647 mod_announce_odbc.erl:639 msgid "Set message of the day on all hosts and send to online users" msgstr "" "Ορίστε μήνυμα ημέρας και άμεση αποστολή στους συνδεδεμένους χρήστες σε όλους " "τους κεντρικούς υπολογιστές" -#: mod_announce.erl:648 +#: mod_announce.erl:649 mod_announce_odbc.erl:641 msgid "Update message of the day (don't send)" msgstr "Ενημέρωση μηνύματως ημέρας (χωρίς άμεση αποστολή)" -#: mod_announce.erl:650 +#: mod_announce.erl:651 mod_announce_odbc.erl:643 msgid "Update message of the day on all hosts (don't send)" msgstr "" "Ενημέρωση μηνύματως ημέρας σε όλους τους κεντρικούς υπολογιστές (χωρίς άμεση " "αποστολή)" -#: mod_announce.erl:652 +#: mod_announce.erl:653 mod_announce_odbc.erl:645 msgid "Delete message of the day" msgstr "Διαγράψτε το μήνυμα της ημέρας" -#: mod_announce.erl:654 +#: mod_announce.erl:655 mod_announce_odbc.erl:647 msgid "Delete message of the day on all hosts" msgstr "Διαγράψτε το μήνυμα της ημέρας σε όλους τους κεντρικούς υπολογιστές" @@ -135,7 +138,7 @@ msgstr "Διαγράψτε το μήνυμα της ημέρας σε όλους msgid "Configuration" msgstr "Διαμόρφωση" -#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1934 +#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1936 msgid "Database" msgstr "Βάση δεδομένων" @@ -147,7 +150,7 @@ msgstr "Εκκίνηση Modules" msgid "Stop Modules" msgstr "ΠαύσηModules" -#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1935 +#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1937 msgid "Backup" msgstr "Αποθήκευση Αντιγράφου Ασφαλείας" @@ -176,7 +179,7 @@ msgid "Shut Down Service" msgstr "Κλείσιμο Υπηρεσίας" #: mod_configure.erl:145 mod_configure.erl:518 mod_configure.erl:1197 -#: web/ejabberd_web_admin.erl:1528 +#: web/ejabberd_web_admin.erl:1527 msgid "Add User" msgstr "Προσθήκη Χρήστη" @@ -228,7 +231,7 @@ msgid "User Management" msgstr "Διαχείριση χρηστών" #: mod_configure.erl:500 web/ejabberd_web_admin.erl:1058 -#: web/ejabberd_web_admin.erl:1463 +#: web/ejabberd_web_admin.erl:1462 msgid "Online Users" msgstr "Συνδεμένοι χρήστες" @@ -240,15 +243,15 @@ msgstr "Όλοι οι χρήστες" msgid "Outgoing s2s Connections" msgstr "Εξερχόμενες S2S Συνδέσεις" -#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1905 +#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1907 msgid "Running Nodes" msgstr "Ενεργοί Κόμβοι" -#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1907 +#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1909 msgid "Stopped Nodes" msgstr "Σταματημένοι Κόμβοι" -#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1951 +#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1953 msgid "Modules" msgstr "Modules" @@ -379,15 +382,15 @@ msgstr "Κανόνες Πρόσβασης" #: mod_configure.erl:1200 mod_configure.erl:1222 mod_configure.erl:1234 #: mod_configure.erl:1246 mod_configure.erl:1258 mod_configure.erl:1275 -#: mod_configure.erl:1287 mod_configure.erl:1652 mod_configure.erl:1702 -#: mod_configure.erl:1723 mod_roster.erl:943 mod_roster_odbc.erl:1048 -#: mod_vcard.erl:466 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:442 +#: mod_configure.erl:1287 mod_configure.erl:1650 mod_configure.erl:1700 +#: mod_configure.erl:1721 mod_roster.erl:943 mod_roster_odbc.erl:1060 +#: mod_vcard.erl:472 mod_vcard_ldap.erl:554 mod_vcard_odbc.erl:448 msgid "Jabber ID" msgstr "Ταυτότητα Jabber" -#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1653 -#: mod_configure.erl:1865 mod_muc/mod_muc_room.erl:2970 mod_register.erl:235 -#: web/ejabberd_web_admin.erl:1521 +#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1651 +#: mod_configure.erl:1863 mod_muc/mod_muc_room.erl:3224 mod_register.erl:235 +#: web/ejabberd_web_admin.erl:1520 msgid "Password" msgstr "Κωδικός Πρόσβασης" @@ -403,69 +406,70 @@ msgstr "Αριθμός εγγεγραμμένων χρηστών" msgid "Number of online users" msgstr "Αριθμός συνδεδεμένων χρηστών" -#: mod_configure.erl:1684 web/ejabberd_web_admin.erl:1589 -#: web/ejabberd_web_admin.erl:1741 +#: mod_configure.erl:1682 web/ejabberd_web_admin.erl:1588 +#: web/ejabberd_web_admin.erl:1743 msgid "Never" msgstr "Ποτέ" -#: mod_configure.erl:1698 web/ejabberd_web_admin.erl:1602 -#: web/ejabberd_web_admin.erl:1754 +#: mod_configure.erl:1696 web/ejabberd_web_admin.erl:1601 +#: web/ejabberd_web_admin.erl:1756 msgid "Online" msgstr "Συνδεδεμένο" -#: mod_configure.erl:1703 +#: mod_configure.erl:1701 msgid "Last login" msgstr "Τελευταία σύνδεση" -#: mod_configure.erl:1724 +#: mod_configure.erl:1722 msgid "Roster size" msgstr "Μέγεθος Καταλόγου Επαφών" -#: mod_configure.erl:1725 +#: mod_configure.erl:1723 msgid "IP addresses" msgstr "Διευθύνσεις IP" -#: mod_configure.erl:1726 +#: mod_configure.erl:1724 msgid "Resources" msgstr "Πόροι" -#: mod_configure.erl:1852 +#: mod_configure.erl:1850 msgid "Administration of " msgstr "Διαχείριση του" -#: mod_configure.erl:1855 +#: mod_configure.erl:1853 msgid "Action on user" msgstr "Eνέργεια για το χρήστη" -#: mod_configure.erl:1859 +#: mod_configure.erl:1857 msgid "Edit Properties" msgstr "Επεξεργασία ιδιοτήτων" -#: mod_configure.erl:1862 web/ejabberd_web_admin.erl:1767 +#: mod_configure.erl:1860 web/ejabberd_web_admin.erl:1769 msgid "Remove User" msgstr "Αφαίρεση χρήστη" -#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:336 +#: mod_irc/mod_irc.erl:201 mod_irc/mod_irc_odbc.erl:196 +#: mod_muc/mod_muc.erl:336 mod_muc/mod_muc_odbc.erl:342 msgid "Access denied by service policy" msgstr "Άρνηση πρόσβασης, λόγω τακτικής παροχής υπηρεσιών" -#: mod_irc/mod_irc.erl:400 +#: mod_irc/mod_irc.erl:401 mod_irc/mod_irc_odbc.erl:398 msgid "IRC Transport" msgstr "IRC Διαβιβάσεις" -#: mod_irc/mod_irc.erl:427 +#: mod_irc/mod_irc.erl:428 mod_irc/mod_irc_odbc.erl:425 msgid "ejabberd IRC module" msgstr "ejabberd IRC module" -#: mod_irc/mod_irc.erl:558 +#: mod_irc/mod_irc.erl:559 mod_irc/mod_irc_odbc.erl:568 msgid "You need an x:data capable client to configure mod_irc settings" msgstr "Χρειάζεστε ένα x:data ικανό πελάτη για να ρυθμίσετε το mod_irc" -#: mod_irc/mod_irc.erl:565 +#: mod_irc/mod_irc.erl:566 mod_irc/mod_irc_odbc.erl:575 msgid "Registration in mod_irc for " msgstr "Εγγραφή στο mod_irc για " -#: mod_irc/mod_irc.erl:570 +#: mod_irc/mod_irc.erl:571 mod_irc/mod_irc_odbc.erl:580 msgid "" "Enter username, encodings, ports and passwords you wish to use for " "connecting to IRC servers" @@ -473,11 +477,11 @@ msgstr "" "Εισάγετε το όνομα χρήστη, κωδικοποιήσεις, τις θύρες και τους κωδικούς " "πρόσβασης που θέλετε να χρησιμοποιήσετε για σύνδεση με IRC διακομιστή" -#: mod_irc/mod_irc.erl:575 +#: mod_irc/mod_irc.erl:576 mod_irc/mod_irc_odbc.erl:585 msgid "IRC Username" msgstr "IRC Όνομα χρήστη" -#: mod_irc/mod_irc.erl:585 +#: mod_irc/mod_irc.erl:586 mod_irc/mod_irc_odbc.erl:595 msgid "" "If you want to specify different ports, passwords, encodings for IRC " "servers, fill this list with values in format '{\"irc server\", \"encoding" @@ -490,7 +494,7 @@ msgstr "" "Προεπιλεγμενα αυτή η υπηρεσία χρησιμοποιεί \"~s\" κωδικοποιήση, θύρα ~p, " "κενό κωδικό πρόσβασης." -#: mod_irc/mod_irc.erl:597 +#: mod_irc/mod_irc.erl:598 mod_irc/mod_irc_odbc.erl:607 msgid "" "Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." @@ -498,35 +502,36 @@ msgstr "" "Παράδειγμα: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta." "fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." -#: mod_irc/mod_irc.erl:602 +#: mod_irc/mod_irc.erl:603 mod_irc/mod_irc_odbc.erl:612 msgid "Connections parameters" msgstr "Παράμετροι Συνδέσης" -#: mod_irc/mod_irc.erl:727 +#: mod_irc/mod_irc.erl:728 mod_irc/mod_irc_odbc.erl:757 msgid "Join IRC channel" msgstr "Είσοδος στο IRC κανάλι" -#: mod_irc/mod_irc.erl:731 +#: mod_irc/mod_irc.erl:732 mod_irc/mod_irc_odbc.erl:761 msgid "IRC channel (don't put the first #)" msgstr "IRC κανάλι (μην τεθεί το πρώτο #)" -#: mod_irc/mod_irc.erl:736 +#: mod_irc/mod_irc.erl:737 mod_irc/mod_irc_odbc.erl:766 msgid "IRC server" msgstr "Διακομιστής IRC" -#: mod_irc/mod_irc.erl:769 mod_irc/mod_irc.erl:773 +#: mod_irc/mod_irc.erl:770 mod_irc/mod_irc.erl:774 +#: mod_irc/mod_irc_odbc.erl:799 mod_irc/mod_irc_odbc.erl:803 msgid "Join the IRC channel here." msgstr "Είσοδος στο κανάλι IRC εδώ." -#: mod_irc/mod_irc.erl:777 +#: mod_irc/mod_irc.erl:778 mod_irc/mod_irc_odbc.erl:807 msgid "Join the IRC channel in this Jabber ID: ~s" msgstr "Είσοδος στο κανάλι IRC αυτής της Jabber Ταυτότητας: ~s" -#: mod_irc/mod_irc.erl:862 +#: mod_irc/mod_irc.erl:863 mod_irc/mod_irc_odbc.erl:904 msgid "IRC settings" msgstr "IRC Ρυθμίσεις" -#: mod_irc/mod_irc.erl:867 +#: mod_irc/mod_irc.erl:868 mod_irc/mod_irc_odbc.erl:909 msgid "" "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 " @@ -537,72 +542,73 @@ msgstr "" "πάρετε περισσότερα πεδία να συμπληρώσετε. Πατήστε 'Complete' για να " "αποθηκεύσετε ρυθμίσεις." -#: mod_irc/mod_irc.erl:873 +#: mod_irc/mod_irc.erl:874 mod_irc/mod_irc_odbc.erl:915 msgid "IRC username" msgstr "IRC όνομα χρήστη" -#: mod_irc/mod_irc.erl:922 +#: mod_irc/mod_irc.erl:923 mod_irc/mod_irc_odbc.erl:964 msgid "Password ~b" msgstr "Κωδικός πρόσβασης ~b" -#: mod_irc/mod_irc.erl:927 +#: mod_irc/mod_irc.erl:928 mod_irc/mod_irc_odbc.erl:969 msgid "Port ~b" msgstr "Θύρα ~b" -#: mod_irc/mod_irc.erl:932 +#: mod_irc/mod_irc.erl:933 mod_irc/mod_irc_odbc.erl:974 msgid "Encoding for server ~b" msgstr "Κωδικοποίηση για διακομιστή ~b" -#: mod_irc/mod_irc.erl:941 +#: mod_irc/mod_irc.erl:942 mod_irc/mod_irc_odbc.erl:983 msgid "Server ~b" msgstr "Διακομιστής ~b" -#: mod_muc/mod_muc.erl:449 +#: mod_muc/mod_muc.erl:449 mod_muc/mod_muc_odbc.erl:456 msgid "Only service administrators are allowed to send service messages" msgstr "" "Μόνο οι διαχειριστές των υπηρεσιών επιτρέπεται να στείλουν υπηρεσιακά " "μηνύματα" -#: mod_muc/mod_muc.erl:493 +#: mod_muc/mod_muc.erl:493 mod_muc/mod_muc_odbc.erl:500 msgid "Room creation is denied by service policy" msgstr "Άρνηση δημιουργίας αίθουσας , λόγω τακτικής παροχής υπηρεσιών" -#: mod_muc/mod_muc.erl:500 +#: mod_muc/mod_muc.erl:500 mod_muc/mod_muc_odbc.erl:507 msgid "Conference room does not exist" msgstr "Αίθουσα σύνεδριασης δεν υπάρχει" -#: mod_muc/mod_muc.erl:581 +#: mod_muc/mod_muc.erl:582 mod_muc/mod_muc_odbc.erl:595 msgid "Chatrooms" msgstr "Αίθουσες σύνεδριασης" -#: mod_muc/mod_muc.erl:711 +#: mod_muc/mod_muc.erl:712 mod_muc/mod_muc_odbc.erl:729 msgid "You need a client that supports x:data to register the nickname" msgstr "Χρειάζεστε ένα x:data ικανό πελάτη για εγγραφή με ψευδώνυμο" -#: mod_muc/mod_muc.erl:717 +#: mod_muc/mod_muc.erl:718 mod_muc/mod_muc_odbc.erl:735 msgid "Nickname Registration at " msgstr "Εγγραφή με Ψευδώνυμο στο " -#: mod_muc/mod_muc.erl:721 +#: mod_muc/mod_muc.erl:722 mod_muc/mod_muc_odbc.erl:739 msgid "Enter nickname you want to register" msgstr "Πληκτρολογήστε το ψευδώνυμο που θέλετε να εγγραφείτε" -#: mod_muc/mod_muc.erl:722 mod_roster.erl:944 mod_roster_odbc.erl:1049 -#: mod_vcard.erl:358 mod_vcard.erl:471 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:447 +#: mod_muc/mod_muc.erl:723 mod_muc/mod_muc_odbc.erl:740 +#: mod_muc/mod_muc_room.erl:3810 mod_roster.erl:944 mod_roster_odbc.erl:1061 +#: mod_vcard.erl:364 mod_vcard.erl:477 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:453 msgid "Nickname" msgstr "Ψευδώνυμο" -#: mod_muc/mod_muc.erl:761 mod_muc/mod_muc_room.erl:933 -#: mod_muc/mod_muc_room.erl:1577 +#: mod_muc/mod_muc.erl:762 mod_muc/mod_muc_odbc.erl:784 +#: mod_muc/mod_muc_room.erl:1064 mod_muc/mod_muc_room.erl:1787 msgid "That nickname is registered by another person" msgstr "Αυτό το ψευδώνυμο είναι καταχωρημένο από άλλο πρόσωπο" -#: mod_muc/mod_muc.erl:787 +#: mod_muc/mod_muc.erl:788 mod_muc/mod_muc_odbc.erl:811 msgid "You must fill in field \"Nickname\" in the form" msgstr "Θα πρέπει να συμπληρώσετε το πεδίο \"Ψευδώνυμο\" στη φόρμα" -#: mod_muc/mod_muc.erl:807 +#: mod_muc/mod_muc.erl:808 mod_muc/mod_muc_odbc.erl:831 msgid "ejabberd MUC module" msgstr "ejabberd MUC module" @@ -642,8 +648,8 @@ msgstr "αποβλήθηκε λόγω τερματισμού συστήματο msgid "is now known as" msgstr "είναι τώρα γνωστή ως" -#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:689 -#: mod_muc/mod_muc_room.erl:2138 +#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:688 +#: mod_muc/mod_muc_room.erl:2393 msgid " has set the subject to: " msgstr " έχει θέσει το θέμα σε: " @@ -739,34 +745,50 @@ msgstr "Νοέμβριος" msgid "December" msgstr "Δεκέμβριος" -#: mod_muc/mod_muc_log.erl:751 +#: mod_muc/mod_muc_log.erl:750 msgid "Room Configuration" msgstr "Διαμόρφωση Αίθουσας σύνεδριασης" -#: mod_muc/mod_muc_log.erl:760 +#: mod_muc/mod_muc_log.erl:759 msgid "Room Occupants" msgstr "Συμετεχόντες Αίθουσας σύνεδριασης" -#: mod_muc/mod_muc_room.erl:170 +#: mod_muc/mod_muc_room.erl:174 msgid "Traffic rate limit is exceeded" msgstr "Υπέρφορτωση" -#: mod_muc/mod_muc_room.erl:242 +#: mod_muc/mod_muc_room.erl:246 msgid "" "This participant is kicked from the room because he sent an error message" msgstr "" "Αυτός ο συμμετέχων αποβλήθηκε από την αίθουσα, επειδή έστειλε ένα μήνυμα " "σφάλματος" -#: mod_muc/mod_muc_room.erl:251 +#: mod_muc/mod_muc_room.erl:255 msgid "It is not allowed to send private messages to the conference" msgstr "Δεν επιτρέπεται να στείλει προσωπικά μηνύματα για τη διάσκεψη" -#: mod_muc/mod_muc_room.erl:296 +#: mod_muc/mod_muc_room.erl:332 +msgid "Please, wait for a while before sending new voice request" +msgstr "Παρακαλώ, περιμένετε για λίγο πριν την αποστολή νέου αιτήματος φωνής" + +#: mod_muc/mod_muc_room.erl:347 +msgid "Voice requests are disabled in this conference" +msgstr "Τα αιτήματα φωνής είναι απενεργοποιημένα, σε αυτό το συνέδριο" + +#: mod_muc/mod_muc_room.erl:364 +msgid "Failed to extract JID from your voice request approval" +msgstr "Απέτυχε η εξαγωγή JID από την έγκριση του αιτήματος φωνής σας" + +#: mod_muc/mod_muc_room.erl:393 +msgid "Only moderators can approve voice requests" +msgstr "Μόνο οι συντονιστές μπορούν να εγκρίνουν τις αιτήσεις φωνής" + +#: mod_muc/mod_muc_room.erl:408 msgid "Improper message type" msgstr "Ακατάλληλο είδος μηνύματος" -#: mod_muc/mod_muc_room.erl:406 +#: mod_muc/mod_muc_room.erl:518 msgid "" "This participant is kicked from the room because he sent an error message to " "another participant" @@ -774,33 +796,33 @@ msgstr "" "Αυτός ο συμμετέχων αποβλήθηκε από την αίθουσα, επειδή έστειλε ένα μήνυμα " "σφάλματος σε άλλον συμμετέχων" -#: mod_muc/mod_muc_room.erl:419 +#: mod_muc/mod_muc_room.erl:531 msgid "It is not allowed to send private messages of type \"groupchat\"" msgstr "Δεν επιτρέπεται να στείλει προσωπικά μηνύματα του τύπου \"groupchat\"" -#: mod_muc/mod_muc_room.erl:431 mod_muc/mod_muc_room.erl:486 +#: mod_muc/mod_muc_room.erl:543 mod_muc/mod_muc_room.erl:611 msgid "Recipient is not in the conference room" msgstr "Παραλήπτης δεν είναι στην αίθουσα συνεδριάσεων" -#: mod_muc/mod_muc_room.erl:451 mod_muc/mod_muc_room.erl:829 -#: mod_muc/mod_muc_room.erl:3609 -msgid "Only occupants are allowed to send messages to the conference" -msgstr "Μόνο οι συμμετέχωντες μπορούν να στέλνουν μηνύματα στο συνέδριο" - -#: mod_muc/mod_muc_room.erl:460 +#: mod_muc/mod_muc_room.erl:564 mod_muc/mod_muc_room.erl:585 msgid "It is not allowed to send private messages" msgstr "Δεν επιτρέπεται η αποστολή προσωπικών μηνυμάτων" -#: mod_muc/mod_muc_room.erl:509 +#: mod_muc/mod_muc_room.erl:576 mod_muc/mod_muc_room.erl:956 +#: mod_muc/mod_muc_room.erl:4040 +msgid "Only occupants are allowed to send messages to the conference" +msgstr "Μόνο οι συμμετέχωντες μπορούν να στέλνουν μηνύματα στο συνέδριο" + +#: mod_muc/mod_muc_room.erl:634 msgid "Only occupants are allowed to send queries to the conference" msgstr "Μόνο οι συμετεχόντες μπορούν να στείλουν ερωτήματα στη διάσκεψη" -#: mod_muc/mod_muc_room.erl:521 +#: mod_muc/mod_muc_room.erl:646 msgid "Queries to the conference members are not allowed in this room" msgstr "" "Ερωτήματα πρώς τα μέλη της διασκέψεως δεν επιτρέπονται σε αυτήν την αίθουσα" -#: mod_muc/mod_muc_room.erl:805 +#: mod_muc/mod_muc_room.erl:932 msgid "" "Only moderators and participants are allowed to change the subject in this " "room" @@ -808,204 +830,236 @@ msgstr "" "Μόνο οι συντονιστές και οι συμμετέχοντες μπορούν να αλλάξουν το θέμα αυτής " "της αίθουσας" -#: mod_muc/mod_muc_room.erl:810 +#: mod_muc/mod_muc_room.erl:937 msgid "Only moderators are allowed to change the subject in this room" msgstr "Μόνο οι συντονιστές μπορούν να αλλάξουν το θέμα αυτής της αίθουσας" -#: mod_muc/mod_muc_room.erl:820 +#: mod_muc/mod_muc_room.erl:947 msgid "Visitors are not allowed to send messages to all occupants" msgstr "" "Οι επισκέπτες δεν επιτρέπεται να στείλουν μηνύματα σε όλους τους " "συμμετέχωντες" -#: mod_muc/mod_muc_room.erl:891 +#: mod_muc/mod_muc_room.erl:1021 msgid "" "This participant is kicked from the room because he sent an error presence" msgstr "" "Αυτός ο συμμετέχων αποβλήθηκε από την αίθουσα, επειδή έστειλε σφάλμα " "παρουσίας " -#: mod_muc/mod_muc_room.erl:909 +#: mod_muc/mod_muc_room.erl:1040 msgid "Visitors are not allowed to change their nicknames in this room" msgstr "" "Οι επισκέπτες δεν επιτρέπεται να αλλάξουν τα ψευδώνυμα τους σε αυτή την " "αίθουσα" -#: mod_muc/mod_muc_room.erl:922 mod_muc/mod_muc_room.erl:1569 +#: mod_muc/mod_muc_room.erl:1053 mod_muc/mod_muc_room.erl:1779 msgid "That nickname is already in use by another occupant" msgstr "Αυτό το ψευδώνυμο είναι ήδη σε χρήση από άλλον συμμετέχων" -#: mod_muc/mod_muc_room.erl:1558 +#: mod_muc/mod_muc_room.erl:1768 msgid "You have been banned from this room" msgstr "Σας έχει απαγορευθεί η είσοδος σε αυτή την αίθουσα" -#: mod_muc/mod_muc_room.erl:1561 +#: mod_muc/mod_muc_room.erl:1771 msgid "Membership is required to enter this room" msgstr "Απαιτείται αίτηση συμετοχής για είσοδο σε αυτή την αίθουσα" -#: mod_muc/mod_muc_room.erl:1597 +#: mod_muc/mod_muc_room.erl:1807 msgid "This room is not anonymous" msgstr "Η αίθουσα αυτή δεν είναι ανώνυμη" -#: mod_muc/mod_muc_room.erl:1623 +#: mod_muc/mod_muc_room.erl:1833 msgid "A password is required to enter this room" msgstr "Απαιτείται κωδικός πρόσβασης για είσοδο σε αυτή την αίθουσα" -#: mod_muc/mod_muc_room.erl:1645 mod_register.erl:246 +#: mod_muc/mod_muc_room.erl:1855 mod_register.erl:246 msgid "Too many CAPTCHA requests" -msgstr "" +msgstr "Πάρα πολλά αιτήματα CAPTCHA" -#: mod_muc/mod_muc_room.erl:1654 -msgid "Unable to generate a captcha" +#: mod_muc/mod_muc_room.erl:1864 mod_register.erl:251 +msgid "Unable to generate a CAPTCHA" msgstr "Αδήνατο να δημιουργηθεί CAPTCHA" -#: mod_muc/mod_muc_room.erl:1664 +#: mod_muc/mod_muc_room.erl:1874 msgid "Incorrect password" msgstr "Εσφαλμένος κωδικός πρόσβασης" -#: mod_muc/mod_muc_room.erl:2193 +#: mod_muc/mod_muc_room.erl:2448 msgid "Administrator privileges required" msgstr "Aπαιτούνται προνόμια διαχειριστή" -#: mod_muc/mod_muc_room.erl:2208 +#: mod_muc/mod_muc_room.erl:2463 msgid "Moderator privileges required" msgstr "Aπαιτούνται προνόμια συντονιστή" -#: mod_muc/mod_muc_room.erl:2363 +#: mod_muc/mod_muc_room.erl:2619 msgid "Jabber ID ~s is invalid" msgstr "Η Jabber Ταυτότητα ~s είναι άκυρη" -#: mod_muc/mod_muc_room.erl:2377 +#: mod_muc/mod_muc_room.erl:2633 msgid "Nickname ~s does not exist in the room" msgstr "Ψευδώνυμο ~s δεν υπάρχει σε αυτή την αίθουσα" -#: mod_muc/mod_muc_room.erl:2403 mod_muc/mod_muc_room.erl:2797 +#: mod_muc/mod_muc_room.erl:2659 mod_muc/mod_muc_room.erl:3049 msgid "Invalid affiliation: ~s" msgstr "Άκυρη υπαγωγή: ~s" -#: mod_muc/mod_muc_room.erl:2460 +#: mod_muc/mod_muc_room.erl:2713 msgid "Invalid role: ~s" msgstr "Άκυρος ρόλο: ~s" -#: mod_muc/mod_muc_room.erl:2774 mod_muc/mod_muc_room.erl:2810 +#: mod_muc/mod_muc_room.erl:3026 mod_muc/mod_muc_room.erl:3062 msgid "Owner privileges required" msgstr "Aπαιτούνται προνόμια ιδιοκτήτη" -#: mod_muc/mod_muc_room.erl:2941 +#: mod_muc/mod_muc_room.erl:3195 msgid "Configuration of room ~s" msgstr "Διαμόρφωση Αίθουσας σύνεδριασης ~s" -#: mod_muc/mod_muc_room.erl:2946 +#: mod_muc/mod_muc_room.erl:3200 msgid "Room title" msgstr "Τίτλος Αίθουσας " -#: mod_muc/mod_muc_room.erl:2949 mod_muc/mod_muc_room.erl:3388 +#: mod_muc/mod_muc_room.erl:3203 mod_muc/mod_muc_room.erl:3692 msgid "Room description" msgstr "Περιγραφή Αίθουσας" -#: mod_muc/mod_muc_room.erl:2956 +#: mod_muc/mod_muc_room.erl:3210 msgid "Make room persistent" msgstr "Κάντε αίθουσα μόνιμη" -#: mod_muc/mod_muc_room.erl:2961 +#: mod_muc/mod_muc_room.erl:3215 msgid "Make room public searchable" msgstr "Κάντε την δημόσια αναζήτηση δυνατή για αυτή την αίθουσα" -#: mod_muc/mod_muc_room.erl:2964 +#: mod_muc/mod_muc_room.erl:3218 msgid "Make participants list public" msgstr "Κάντε κοινό τον κατάλογο συμμετεχόντων" -#: mod_muc/mod_muc_room.erl:2967 +#: mod_muc/mod_muc_room.erl:3221 msgid "Make room password protected" msgstr "Κάντε την αίθουσα προστατεύομενη με κωδικό πρόσβασης" -#: mod_muc/mod_muc_room.erl:2978 +#: mod_muc/mod_muc_room.erl:3232 msgid "Maximum Number of Occupants" msgstr "Μέγιστος αριθμός συμετεχόντων" -#: mod_muc/mod_muc_room.erl:2985 +#: mod_muc/mod_muc_room.erl:3239 msgid "No limit" msgstr "Χωρίς όριο" -#: mod_muc/mod_muc_room.erl:2996 +#: mod_muc/mod_muc_room.erl:3250 msgid "Present real Jabber IDs to" msgstr "Παρούσιαση πραγματικών ταυτοτήτων Jabber σε" -#: mod_muc/mod_muc_room.erl:3004 +#: mod_muc/mod_muc_room.erl:3258 mod_muc/mod_muc_room.erl:3292 msgid "moderators only" msgstr "συντονιστές μόνο" -#: mod_muc/mod_muc_room.erl:3006 +#: mod_muc/mod_muc_room.erl:3260 mod_muc/mod_muc_room.erl:3294 msgid "anyone" msgstr "οποιοσδήποτε" -#: mod_muc/mod_muc_room.erl:3008 +#: mod_muc/mod_muc_room.erl:3262 msgid "Make room members-only" msgstr "Κάντε την αίθουσα μόνο για μέλη" -#: mod_muc/mod_muc_room.erl:3011 +#: mod_muc/mod_muc_room.erl:3265 msgid "Make room moderated" msgstr "Κάντε την αίθουσα εποπτεύονομενη" -#: mod_muc/mod_muc_room.erl:3014 +#: mod_muc/mod_muc_room.erl:3268 msgid "Default users as participants" msgstr "Προεπιλογη χρήστων ως συμμετέχοντες" -#: mod_muc/mod_muc_room.erl:3017 +#: mod_muc/mod_muc_room.erl:3271 msgid "Allow users to change the subject" msgstr "Επιτρέψετε στους χρήστες να αλλάζουν το θέμα" -#: mod_muc/mod_muc_room.erl:3020 +#: mod_muc/mod_muc_room.erl:3274 msgid "Allow users to send private messages" msgstr "Επιτρέψετε στους χρήστες να αποστέλλουν ιδιωτικά μηνύματα" -#: mod_muc/mod_muc_room.erl:3023 +#: mod_muc/mod_muc_room.erl:3279 +msgid "Allow visitors to send private messages to" +msgstr "Επιτρέψετε στους χρήστες να αποστέλλουν ιδιωτικά μηνύματα σε" + +#: mod_muc/mod_muc_room.erl:3290 +msgid "nobody" +msgstr "κανείς" + +#: mod_muc/mod_muc_room.erl:3296 msgid "Allow users to query other users" msgstr "Επιτρέπστε στους χρήστες να ερωτούν άλλους χρήστες" -#: mod_muc/mod_muc_room.erl:3026 +#: mod_muc/mod_muc_room.erl:3299 msgid "Allow users to send invites" msgstr "Επιτρέψετε στους χρήστες να αποστέλλουν προσκλήσεις" -#: mod_muc/mod_muc_room.erl:3029 +#: mod_muc/mod_muc_room.erl:3302 msgid "Allow visitors to send status text in presence updates" msgstr "" "Επιτρέψτε στους επισκέπτες να αποστέλλουν κατάσταση στις ενημερώσεις " "παρουσίας" -#: mod_muc/mod_muc_room.erl:3032 +#: mod_muc/mod_muc_room.erl:3305 msgid "Allow visitors to change nickname" msgstr "Επιτρέψετε στους επισκέπτες να αλλάζου ψευδώνυμο" -#: mod_muc/mod_muc_room.erl:3038 -msgid "Make room captcha protected" +#: mod_muc/mod_muc_room.erl:3308 +msgid "Allow visitors to send voice requests" +msgstr "Επιτρέψτε στους επισκέπτες να στέλνουν αιτήματα φωνής" + +#: mod_muc/mod_muc_room.erl:3311 +msgid "Minimum interval between voice requests (in seconds)" +msgstr "Ελάχιστο χρονικό διάστημα μεταξύ αιτημάτων φωνής (σε δευτερόλεπτα)" + +#: mod_muc/mod_muc_room.erl:3317 +msgid "Make room CAPTCHA protected" msgstr "Κάντε την αίθουσα CAPTCHA προστατεύονομενη" -#: mod_muc/mod_muc_room.erl:3043 +#: mod_muc/mod_muc_room.erl:3322 msgid "Exclude Jabber IDs from CAPTCHA challenge" -msgstr "" +msgstr "Εξαίρεση από τις ταυτότητες Jabber, ή CAPTCHA πρόκληση" -#: mod_muc/mod_muc_room.erl:3050 +#: mod_muc/mod_muc_room.erl:3329 msgid "Enable logging" msgstr "Ενεργοποίηση καταγραφής" -#: mod_muc/mod_muc_room.erl:3058 +#: mod_muc/mod_muc_room.erl:3337 msgid "You need an x:data capable client to configure room" msgstr "Χρειάζεστε ένα x:data ικανό πελάτη για να ρυθμίσετε την αίθουσα " -#: mod_muc/mod_muc_room.erl:3390 +#: mod_muc/mod_muc_room.erl:3694 msgid "Number of occupants" msgstr "Αριθμός συμετεχόντων" -#: mod_muc/mod_muc_room.erl:3446 +#: mod_muc/mod_muc_room.erl:3750 msgid "private, " msgstr "ιδιωτικό," -#: mod_muc/mod_muc_room.erl:3529 +#: mod_muc/mod_muc_room.erl:3799 +msgid "Voice request" +msgstr "Αίτημα φωνής" + +#: mod_muc/mod_muc_room.erl:3803 +msgid "Either approve or decline the voice request." +msgstr "Είτε εγκρίνετε ή απορρίψτε το αίτημα φωνής." + +#: mod_muc/mod_muc_room.erl:3809 +msgid "User JID" +msgstr "JID Χρήστη" + +#: mod_muc/mod_muc_room.erl:3811 +msgid "Grant voice to this person?" +msgstr "Παραχώρηση φωνής σε αυτό το άτομο;" + +#: mod_muc/mod_muc_room.erl:3960 msgid "~s invites you to the room ~s" msgstr "~s σας προσκαλεί στην αίθουσα ~s" -#: mod_muc/mod_muc_room.erl:3538 +#: mod_muc/mod_muc_room.erl:3969 msgid "the password is" msgstr "ο κωδικός πρόσβασης είναι" @@ -1020,14 +1074,15 @@ msgid "~s's Offline Messages Queue" msgstr "Η Σειρά Χωρίς Σύνδεση Μηνύματων τού ~s" #: mod_offline.erl:563 mod_offline_odbc.erl:411 mod_roster.erl:987 -#: mod_roster_odbc.erl:1092 mod_shared_roster.erl:896 -#: mod_shared_roster.erl:1005 web/ejabberd_web_admin.erl:833 +#: mod_roster_odbc.erl:1104 mod_shared_roster.erl:901 +#: mod_shared_roster.erl:1010 mod_shared_roster_odbc.erl:930 +#: mod_shared_roster_odbc.erl:1039 web/ejabberd_web_admin.erl:833 #: web/ejabberd_web_admin.erl:874 web/ejabberd_web_admin.erl:942 #: web/ejabberd_web_admin.erl:978 web/ejabberd_web_admin.erl:1019 -#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1758 -#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1961 -#: web/ejabberd_web_admin.erl:2030 web/ejabberd_web_admin.erl:2134 -#: web/ejabberd_web_admin.erl:2159 web/ejabberd_web_admin.erl:2247 +#: web/ejabberd_web_admin.erl:1508 web/ejabberd_web_admin.erl:1760 +#: web/ejabberd_web_admin.erl:1931 web/ejabberd_web_admin.erl:1963 +#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2135 +#: web/ejabberd_web_admin.erl:2160 web/ejabberd_web_admin.erl:2248 msgid "Submitted" msgstr "Υποβλήθηκε" @@ -1047,8 +1102,9 @@ msgstr "Πρώς" msgid "Packet" msgstr "Πακέτο" -#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:903 -#: web/ejabberd_web_admin.erl:882 web/ejabberd_web_admin.erl:986 +#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:908 +#: mod_shared_roster_odbc.erl:937 web/ejabberd_web_admin.erl:882 +#: web/ejabberd_web_admin.erl:986 msgid "Delete Selected" msgstr "Διαγραφή επιλεγμένων" @@ -1064,105 +1120,105 @@ msgstr "Αφαίρεση Όλων των Χωρίς Σύνδεση Μηνύμα msgid "ejabberd SOCKS5 Bytestreams module" msgstr "ejabberd SOCKS5 Bytestreams module" -#: mod_pubsub/mod_pubsub.erl:1119 mod_pubsub/mod_pubsub_odbc.erl:928 +#: mod_pubsub/mod_pubsub.erl:1120 mod_pubsub/mod_pubsub_odbc.erl:929 msgid "Publish-Subscribe" msgstr "Δημοσίευση-Εγγραφή" -#: mod_pubsub/mod_pubsub.erl:1213 mod_pubsub/mod_pubsub_odbc.erl:1024 +#: mod_pubsub/mod_pubsub.erl:1214 mod_pubsub/mod_pubsub_odbc.erl:1025 msgid "ejabberd Publish-Subscribe module" msgstr "ejabberd module Δημοσίευσης-Εγγραφής" -#: mod_pubsub/mod_pubsub.erl:1496 mod_pubsub/mod_pubsub_odbc.erl:1311 +#: mod_pubsub/mod_pubsub.erl:1497 mod_pubsub/mod_pubsub_odbc.erl:1312 msgid "PubSub subscriber request" msgstr "Αίτηση συνδρομητή Δημοσίευσης-Εγγραφής" -#: mod_pubsub/mod_pubsub.erl:1498 mod_pubsub/mod_pubsub_odbc.erl:1313 +#: mod_pubsub/mod_pubsub.erl:1499 mod_pubsub/mod_pubsub_odbc.erl:1314 msgid "Choose whether to approve this entity's subscription." msgstr "Επιλέξτε αν θα εγκρίθεί η εγγραφή αυτής της οντότητας." -#: mod_pubsub/mod_pubsub.erl:1504 mod_pubsub/mod_pubsub_odbc.erl:1319 +#: mod_pubsub/mod_pubsub.erl:1505 mod_pubsub/mod_pubsub_odbc.erl:1320 msgid "Node ID" msgstr "Ταυτότητα Κόμβου" -#: mod_pubsub/mod_pubsub.erl:1509 mod_pubsub/mod_pubsub_odbc.erl:1324 +#: mod_pubsub/mod_pubsub.erl:1510 mod_pubsub/mod_pubsub_odbc.erl:1325 msgid "Subscriber Address" msgstr "Διεύθυνση Συνδρομητή" -#: mod_pubsub/mod_pubsub.erl:1515 mod_pubsub/mod_pubsub_odbc.erl:1330 +#: mod_pubsub/mod_pubsub.erl:1516 mod_pubsub/mod_pubsub_odbc.erl:1331 msgid "Allow this Jabber ID to subscribe to this pubsub node?" msgstr "" "Επιτρέπετε σε αυτή την Jabber Ταυτότητα να εγγραφεί σε αυτό τον κόμβο " "Δημοσίευσης-Εγγραφής;" -#: mod_pubsub/mod_pubsub.erl:3416 mod_pubsub/mod_pubsub_odbc.erl:3229 +#: mod_pubsub/mod_pubsub.erl:3474 mod_pubsub/mod_pubsub_odbc.erl:3287 msgid "Deliver payloads with event notifications" msgstr "Κοινοποιήσεις με την παράδοση φορτίων" -#: mod_pubsub/mod_pubsub.erl:3417 mod_pubsub/mod_pubsub_odbc.erl:3230 +#: mod_pubsub/mod_pubsub.erl:3475 mod_pubsub/mod_pubsub_odbc.erl:3288 msgid "Deliver event notifications" msgstr "Κοινοποιήσεις παράδοσης" -#: mod_pubsub/mod_pubsub.erl:3418 mod_pubsub/mod_pubsub_odbc.erl:3231 +#: mod_pubsub/mod_pubsub.erl:3476 mod_pubsub/mod_pubsub_odbc.erl:3289 msgid "Notify subscribers when the node configuration changes" msgstr "Ειδοποιηση στους συνδρομητές όταν αλλάζει η διαμόρφωση κόμβου" -#: mod_pubsub/mod_pubsub.erl:3419 mod_pubsub/mod_pubsub_odbc.erl:3232 +#: mod_pubsub/mod_pubsub.erl:3477 mod_pubsub/mod_pubsub_odbc.erl:3290 msgid "Notify subscribers when the node is deleted" msgstr "Ειδοποιηση στους συνδρομητές όταν ο κόμβος διαγράφεται" -#: mod_pubsub/mod_pubsub.erl:3420 mod_pubsub/mod_pubsub_odbc.erl:3233 +#: mod_pubsub/mod_pubsub.erl:3478 mod_pubsub/mod_pubsub_odbc.erl:3291 msgid "Notify subscribers when items are removed from the node" msgstr "Ειδοποιηση στους συνδρομητές όταν αφαίρούντε στοιχεία από τον κόμβο" -#: mod_pubsub/mod_pubsub.erl:3421 mod_pubsub/mod_pubsub_odbc.erl:3234 +#: mod_pubsub/mod_pubsub.erl:3479 mod_pubsub/mod_pubsub_odbc.erl:3292 msgid "Persist items to storage" msgstr "Μονιμη αποθήκευση στοιχείων" -#: mod_pubsub/mod_pubsub.erl:3422 mod_pubsub/mod_pubsub_odbc.erl:3235 +#: mod_pubsub/mod_pubsub.erl:3480 mod_pubsub/mod_pubsub_odbc.erl:3293 msgid "A friendly name for the node" msgstr "Ένα φιλικό όνομα για τον κόμβο" -#: mod_pubsub/mod_pubsub.erl:3423 mod_pubsub/mod_pubsub_odbc.erl:3236 +#: mod_pubsub/mod_pubsub.erl:3481 mod_pubsub/mod_pubsub_odbc.erl:3294 msgid "Max # of items to persist" msgstr "Μέγιστος αριθμός μόνιμων στοιχείων" -#: mod_pubsub/mod_pubsub.erl:3424 mod_pubsub/mod_pubsub_odbc.erl:3237 +#: mod_pubsub/mod_pubsub.erl:3482 mod_pubsub/mod_pubsub_odbc.erl:3295 msgid "Whether to allow subscriptions" msgstr "Εάν επιτρέποντε συνδρομές" -#: mod_pubsub/mod_pubsub.erl:3425 mod_pubsub/mod_pubsub_odbc.erl:3238 +#: mod_pubsub/mod_pubsub.erl:3483 mod_pubsub/mod_pubsub_odbc.erl:3296 msgid "Specify the access model" msgstr "Καθορίστε το μοντέλο πρόσβασης" -#: mod_pubsub/mod_pubsub.erl:3428 mod_pubsub/mod_pubsub_odbc.erl:3241 +#: mod_pubsub/mod_pubsub.erl:3486 mod_pubsub/mod_pubsub_odbc.erl:3299 msgid "Roster groups allowed to subscribe" msgstr "Ομάδες Καταλόγου Επαφών μπορούν να εγγραφούν" -#: mod_pubsub/mod_pubsub.erl:3429 mod_pubsub/mod_pubsub_odbc.erl:3242 +#: mod_pubsub/mod_pubsub.erl:3487 mod_pubsub/mod_pubsub_odbc.erl:3300 msgid "Specify the publisher model" msgstr "Καθορίστε το μοντέλο εκδότη" -#: mod_pubsub/mod_pubsub.erl:3431 mod_pubsub/mod_pubsub_odbc.erl:3244 +#: mod_pubsub/mod_pubsub.erl:3489 mod_pubsub/mod_pubsub_odbc.erl:3302 msgid "Purge all items when the relevant publisher goes offline" msgstr "Διαγραφή όλων των στοιχείων όταν ο σχετικός εκδότης αποσυνδέεται" -#: mod_pubsub/mod_pubsub.erl:3432 mod_pubsub/mod_pubsub_odbc.erl:3245 +#: mod_pubsub/mod_pubsub.erl:3490 mod_pubsub/mod_pubsub_odbc.erl:3303 msgid "Specify the event message type" msgstr "Καθορίστε τον τύπο μηνύματος συμβάντος" -#: mod_pubsub/mod_pubsub.erl:3434 mod_pubsub/mod_pubsub_odbc.erl:3247 +#: mod_pubsub/mod_pubsub.erl:3492 mod_pubsub/mod_pubsub_odbc.erl:3305 msgid "Max payload size in bytes" msgstr "Μέγιστο μέγεθος φορτίου σε bytes" -#: mod_pubsub/mod_pubsub.erl:3435 mod_pubsub/mod_pubsub_odbc.erl:3248 +#: mod_pubsub/mod_pubsub.erl:3493 mod_pubsub/mod_pubsub_odbc.erl:3306 msgid "When to send the last published item" msgstr "Πότε να αποσταλθεί το τελευταίο στοιχείο που δημοσιεύθηκε" -#: mod_pubsub/mod_pubsub.erl:3437 mod_pubsub/mod_pubsub_odbc.erl:3250 +#: mod_pubsub/mod_pubsub.erl:3495 mod_pubsub/mod_pubsub_odbc.erl:3308 msgid "Only deliver notifications to available users" msgstr "Παράδωση κοινοποιήσεων μόνο σε διαθέσιμους χρήστες" -#: mod_pubsub/mod_pubsub.erl:3438 mod_pubsub/mod_pubsub_odbc.erl:3251 +#: mod_pubsub/mod_pubsub.erl:3496 mod_pubsub/mod_pubsub_odbc.erl:3309 msgid "The collections with which a node is affiliated" msgstr "Οι συλλογές με την οποία είναι ένας κόμβος συνδέεται" @@ -1180,15 +1236,11 @@ msgstr "" "Επιλέξτε ένα όνομα χρήστη και κωδικό πρόσβασης για να εγγραφείτε σε αυτό τον " "διακομιστή" -#: mod_register.erl:230 mod_vcard.erl:358 mod_vcard_odbc.erl:336 -#: web/ejabberd_web_admin.erl:1516 web/ejabberd_web_admin.erl:1573 +#: mod_register.erl:230 mod_vcard.erl:364 mod_vcard_odbc.erl:342 +#: web/ejabberd_web_admin.erl:1515 web/ejabberd_web_admin.erl:1572 msgid "User" msgstr "Χρήστης" -#: mod_register.erl:251 -msgid "Unable to generate a CAPTCHA" -msgstr "Αδήνατο να δημιουργηθεί εικόνα CAPTCHA" - #: mod_register.erl:316 mod_register.erl:361 msgid "The password is too weak" msgstr "Ο κωδικός πρόσβασης είναι πολύ ασθενές" @@ -1197,120 +1249,123 @@ msgstr "Ο κωδικός πρόσβασης είναι πολύ ασθενές" msgid "Users are not allowed to register accounts so quickly" msgstr "Οι χρήστες δεν επιτρέπεται να εγγραφούν λογαριασμούς τόσο γρήγορα" -#: mod_roster.erl:938 mod_roster_odbc.erl:1043 web/ejabberd_web_admin.erl:1699 -#: web/ejabberd_web_admin.erl:1884 web/ejabberd_web_admin.erl:1895 -#: web/ejabberd_web_admin.erl:2218 +#: mod_roster.erl:938 mod_roster_odbc.erl:1055 web/ejabberd_web_admin.erl:1701 +#: web/ejabberd_web_admin.erl:1886 web/ejabberd_web_admin.erl:1897 +#: web/ejabberd_web_admin.erl:2219 msgid "None" msgstr "Κανένα" -#: mod_roster.erl:945 mod_roster_odbc.erl:1050 +#: mod_roster.erl:945 mod_roster_odbc.erl:1062 msgid "Subscription" msgstr "Συνδρομή" -#: mod_roster.erl:946 mod_roster_odbc.erl:1051 +#: mod_roster.erl:946 mod_roster_odbc.erl:1063 msgid "Pending" msgstr "Εκκρεμεί" -#: mod_roster.erl:947 mod_roster_odbc.erl:1052 +#: mod_roster.erl:947 mod_roster_odbc.erl:1064 msgid "Groups" msgstr "Ομάδες" -#: mod_roster.erl:974 mod_roster_odbc.erl:1079 +#: mod_roster.erl:974 mod_roster_odbc.erl:1091 msgid "Validate" msgstr "Επαληθεύστε" -#: mod_roster.erl:982 mod_roster_odbc.erl:1087 +#: mod_roster.erl:982 mod_roster_odbc.erl:1099 msgid "Remove" msgstr "Αφαίρεστε" -#: mod_roster.erl:985 mod_roster_odbc.erl:1090 +#: mod_roster.erl:985 mod_roster_odbc.erl:1102 msgid "Roster of " msgstr "Καταλόγος Επαφών τού" -#: mod_roster.erl:988 mod_roster_odbc.erl:1093 mod_shared_roster.erl:897 -#: mod_shared_roster.erl:1006 web/ejabberd_web_admin.erl:834 +#: mod_roster.erl:988 mod_roster_odbc.erl:1105 mod_shared_roster.erl:902 +#: mod_shared_roster.erl:1011 mod_shared_roster_odbc.erl:931 +#: mod_shared_roster_odbc.erl:1040 web/ejabberd_web_admin.erl:834 #: web/ejabberd_web_admin.erl:875 web/ejabberd_web_admin.erl:943 #: web/ejabberd_web_admin.erl:979 web/ejabberd_web_admin.erl:1020 -#: web/ejabberd_web_admin.erl:1510 web/ejabberd_web_admin.erl:1759 -#: web/ejabberd_web_admin.erl:1930 web/ejabberd_web_admin.erl:2135 -#: web/ejabberd_web_admin.erl:2160 +#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1761 +#: web/ejabberd_web_admin.erl:1932 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2161 msgid "Bad format" msgstr "Ακατάλληλη μορφή" -#: mod_roster.erl:995 mod_roster_odbc.erl:1100 +#: mod_roster.erl:995 mod_roster_odbc.erl:1112 msgid "Add Jabber ID" msgstr "Προσθήκη Jabber Ταυτότητας" -#: mod_roster.erl:1094 mod_roster_odbc.erl:1199 +#: mod_roster.erl:1094 mod_roster_odbc.erl:1211 msgid "Roster" msgstr "Καταλόγος Επαφών" -#: mod_shared_roster.erl:852 mod_shared_roster.erl:894 -#: mod_shared_roster.erl:1002 +#: mod_shared_roster.erl:857 mod_shared_roster.erl:899 +#: mod_shared_roster.erl:1007 mod_shared_roster_odbc.erl:886 +#: mod_shared_roster_odbc.erl:928 mod_shared_roster_odbc.erl:1036 msgid "Shared Roster Groups" msgstr "Κοινές Ομάδες Καταλόγων Επαφών" -#: mod_shared_roster.erl:890 web/ejabberd_web_admin.erl:1366 -#: web/ejabberd_web_admin.erl:2460 +#: mod_shared_roster.erl:895 mod_shared_roster_odbc.erl:924 +#: web/ejabberd_web_admin.erl:1365 web/ejabberd_web_admin.erl:2461 msgid "Add New" msgstr "Προσθήκη νέου" -#: mod_shared_roster.erl:973 +#: mod_shared_roster.erl:978 mod_shared_roster_odbc.erl:1007 msgid "Name:" msgstr "Όνομα:" -#: mod_shared_roster.erl:978 +#: mod_shared_roster.erl:983 mod_shared_roster_odbc.erl:1012 msgid "Description:" msgstr "Περιγραφή:" -#: mod_shared_roster.erl:986 +#: mod_shared_roster.erl:991 mod_shared_roster_odbc.erl:1020 msgid "Members:" msgstr "Μέλη:" -#: mod_shared_roster.erl:994 +#: mod_shared_roster.erl:999 mod_shared_roster_odbc.erl:1028 msgid "Displayed Groups:" msgstr "Εμφανίσμενες Ομάδες:" -#: mod_shared_roster.erl:1003 +#: mod_shared_roster.erl:1008 mod_shared_roster_odbc.erl:1037 msgid "Group " msgstr "Ομάδα" -#: mod_shared_roster.erl:1012 web/ejabberd_web_admin.erl:840 -#: web/ejabberd_web_admin.erl:884 web/ejabberd_web_admin.erl:949 -#: web/ejabberd_web_admin.erl:1026 web/ejabberd_web_admin.erl:2015 +#: mod_shared_roster.erl:1017 mod_shared_roster_odbc.erl:1046 +#: web/ejabberd_web_admin.erl:840 web/ejabberd_web_admin.erl:884 +#: web/ejabberd_web_admin.erl:949 web/ejabberd_web_admin.erl:1026 +#: web/ejabberd_web_admin.erl:2017 msgid "Submit" msgstr "Υποβοβολή" -#: mod_vcard.erl:165 mod_vcard_ldap.erl:237 mod_vcard_odbc.erl:129 +#: mod_vcard.erl:165 mod_vcard_ldap.erl:238 mod_vcard_odbc.erl:129 msgid "Erlang Jabber Server" msgstr "Erlang Jabber Διακομιστής" -#: mod_vcard.erl:358 mod_vcard.erl:472 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:448 +#: mod_vcard.erl:364 mod_vcard.erl:478 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:454 msgid "Birthday" msgstr "Γενέθλια" -#: mod_vcard.erl:358 mod_vcard.erl:474 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:450 +#: mod_vcard.erl:364 mod_vcard.erl:480 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:456 msgid "City" msgstr "Πόλη" -#: mod_vcard.erl:358 mod_vcard.erl:473 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:449 +#: mod_vcard.erl:364 mod_vcard.erl:479 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:455 msgid "Country" msgstr "Χώρα" -#: mod_vcard.erl:358 mod_vcard.erl:475 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:451 +#: mod_vcard.erl:364 mod_vcard.erl:481 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:457 msgid "Email" msgstr "Email" -#: mod_vcard.erl:358 mod_vcard.erl:470 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:446 +#: mod_vcard.erl:364 mod_vcard.erl:476 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:452 msgid "Family Name" msgstr "Επώνυμο" -#: mod_vcard.erl:358 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_odbc.erl:342 msgid "" "Fill in the form to search for any matching Jabber User (Add * to the end of " "field to match substring)" @@ -1319,52 +1374,52 @@ msgstr "" "ταιριάζει (Προσθέστε * στο τέλος τού πεδίου για να ταιριάξει σε μεγαλύτερες " "γραμματοσηρές)" -#: mod_vcard.erl:358 mod_vcard.erl:467 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:443 +#: mod_vcard.erl:364 mod_vcard.erl:473 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:449 msgid "Full Name" msgstr "Ονοματεπώνυμο" -#: mod_vcard.erl:358 mod_vcard.erl:469 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:445 +#: mod_vcard.erl:364 mod_vcard.erl:475 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:451 msgid "Middle Name" msgstr "Πατρώνυμο" -#: mod_vcard.erl:358 mod_vcard.erl:468 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:444 web/ejabberd_web_admin.erl:2004 +#: mod_vcard.erl:364 mod_vcard.erl:474 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:450 web/ejabberd_web_admin.erl:2006 msgid "Name" msgstr "Όνομα" -#: mod_vcard.erl:358 mod_vcard.erl:476 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:452 +#: mod_vcard.erl:364 mod_vcard.erl:482 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:458 msgid "Organization Name" msgstr "Όνομα Οργανισμού" -#: mod_vcard.erl:358 mod_vcard.erl:477 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:453 +#: mod_vcard.erl:364 mod_vcard.erl:483 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:459 msgid "Organization Unit" msgstr "Μονάδα Οργανισμού" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "Search users in " msgstr "Αναζήτηση χρηστών στο" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "You need an x:data capable client to search" msgstr "Χρειάζεστε ένα x:data ικανό πελάτη για αναζήτηση" -#: mod_vcard.erl:383 mod_vcard_ldap.erl:483 mod_vcard_odbc.erl:361 +#: mod_vcard.erl:389 mod_vcard_ldap.erl:487 mod_vcard_odbc.erl:367 msgid "vCard User Search" msgstr "vCard Αναζήτηση χρηστών" -#: mod_vcard.erl:439 mod_vcard_ldap.erl:537 mod_vcard_odbc.erl:415 +#: mod_vcard.erl:445 mod_vcard_ldap.erl:541 mod_vcard_odbc.erl:421 msgid "ejabberd vCard module" msgstr "ejabberd vCard module" -#: mod_vcard.erl:463 mod_vcard_ldap.erl:547 mod_vcard_odbc.erl:439 +#: mod_vcard.erl:469 mod_vcard_ldap.erl:551 mod_vcard_odbc.erl:445 msgid "Search Results for " msgstr "Αποτελέσματα αναζήτησης για " -#: mod_vcard_ldap.erl:458 +#: mod_vcard_ldap.erl:462 msgid "Fill in fields to search for any matching Jabber User" msgstr "" "Συμπληρώστε τα πεδία για να αναζητήσετε οποιαδήποτε ταιριάζοντα Jabber χρήστη" @@ -1426,7 +1481,7 @@ msgstr "Δείτε Κοινό Πίνακα" msgid "Show Integral Table" msgstr "Δείτε Ολοκληρωτικό Πίνακα" -#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1937 +#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1939 msgid "Statistics" msgstr "Στατιστικές" @@ -1438,116 +1493,116 @@ msgstr "Δεν Βρέθηκε" msgid "Node not found" msgstr "Κόμβος δεν βρέθηκε" -#: web/ejabberd_web_admin.erl:1461 +#: web/ejabberd_web_admin.erl:1460 msgid "Host" msgstr "Κεντρικός Υπολογιστής" -#: web/ejabberd_web_admin.erl:1462 +#: web/ejabberd_web_admin.erl:1461 msgid "Registered Users" msgstr "Εγγεγραμμένοι Χρήστες" -#: web/ejabberd_web_admin.erl:1574 +#: web/ejabberd_web_admin.erl:1573 msgid "Offline Messages" msgstr "Χωρίς Σύνδεση Μηνύματα" -#: web/ejabberd_web_admin.erl:1575 web/ejabberd_web_admin.erl:1765 +#: web/ejabberd_web_admin.erl:1574 web/ejabberd_web_admin.erl:1767 msgid "Last Activity" msgstr "Τελευταία Δραστηριότητα" -#: web/ejabberd_web_admin.erl:1657 web/ejabberd_web_admin.erl:1673 +#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 msgid "Registered Users:" msgstr "Εγγεγραμμένοι Χρήστες:" -#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 -#: web/ejabberd_web_admin.erl:2191 +#: web/ejabberd_web_admin.erl:1661 web/ejabberd_web_admin.erl:1677 +#: web/ejabberd_web_admin.erl:2192 msgid "Online Users:" msgstr "Online Χρήστες:" -#: web/ejabberd_web_admin.erl:1661 +#: web/ejabberd_web_admin.erl:1663 msgid "Outgoing s2s Connections:" msgstr "Εξερχόμενες S2S Συνδέσεις:" -#: web/ejabberd_web_admin.erl:1663 +#: web/ejabberd_web_admin.erl:1665 msgid "Outgoing s2s Servers:" msgstr "Εξερχόμενοι S2S διακομιστές:" -#: web/ejabberd_web_admin.erl:1732 web/mod_register_web.erl:175 +#: web/ejabberd_web_admin.erl:1734 web/mod_register_web.erl:175 #: web/mod_register_web.erl:372 web/mod_register_web.erl:381 #: web/mod_register_web.erl:411 msgid "Change Password" msgstr "Αλλαγή κωδικού" -#: web/ejabberd_web_admin.erl:1756 +#: web/ejabberd_web_admin.erl:1758 msgid "User " msgstr "Χρήστης" -#: web/ejabberd_web_admin.erl:1763 +#: web/ejabberd_web_admin.erl:1765 msgid "Connected Resources:" msgstr "Συνδεδεμένοι Πόροι:" -#: web/ejabberd_web_admin.erl:1764 web/mod_register_web.erl:227 +#: web/ejabberd_web_admin.erl:1766 web/mod_register_web.erl:227 #: web/mod_register_web.erl:519 msgid "Password:" msgstr "Κωδικός πρόσβασης:" -#: web/ejabberd_web_admin.erl:1826 +#: web/ejabberd_web_admin.erl:1828 msgid "No Data" msgstr "Κανένα στοιχείο" -#: web/ejabberd_web_admin.erl:1904 +#: web/ejabberd_web_admin.erl:1906 msgid "Nodes" msgstr "Κόμβοι" -#: web/ejabberd_web_admin.erl:1927 web/ejabberd_web_admin.erl:1949 +#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1951 msgid "Node " msgstr "Κόμβος" -#: web/ejabberd_web_admin.erl:1936 +#: web/ejabberd_web_admin.erl:1938 msgid "Listened Ports" msgstr "Παρακολουθούμενες Θύρες" -#: web/ejabberd_web_admin.erl:1938 web/ejabberd_web_admin.erl:2259 -#: web/ejabberd_web_admin.erl:2447 +#: web/ejabberd_web_admin.erl:1940 web/ejabberd_web_admin.erl:2260 +#: web/ejabberd_web_admin.erl:2448 msgid "Update" msgstr "Ενημέρωση" -#: web/ejabberd_web_admin.erl:1941 web/ejabberd_web_admin.erl:2568 +#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2569 msgid "Restart" msgstr "Επανεκκίνηση" -#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2570 +#: web/ejabberd_web_admin.erl:1945 web/ejabberd_web_admin.erl:2571 msgid "Stop" msgstr "Σταμάτημα" -#: web/ejabberd_web_admin.erl:1957 +#: web/ejabberd_web_admin.erl:1959 msgid "RPC Call Error" msgstr "Σφάλμα RPC Κλήσης" -#: web/ejabberd_web_admin.erl:1998 +#: web/ejabberd_web_admin.erl:2000 msgid "Database Tables at " msgstr "Πίνακες βάσης δεδομένων στο " -#: web/ejabberd_web_admin.erl:2005 +#: web/ejabberd_web_admin.erl:2007 msgid "Storage Type" msgstr "Τύπος Αποθήκευσης" -#: web/ejabberd_web_admin.erl:2006 +#: web/ejabberd_web_admin.erl:2008 msgid "Elements" msgstr "Στοιχεία" -#: web/ejabberd_web_admin.erl:2007 +#: web/ejabberd_web_admin.erl:2009 msgid "Memory" msgstr "Μνήμη" -#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2032 web/ejabberd_web_admin.erl:2137 msgid "Error" msgstr "Σφάλμα" -#: web/ejabberd_web_admin.erl:2033 +#: web/ejabberd_web_admin.erl:2034 msgid "Backup of " msgstr "Αντιγράφο Ασφαλείας του " -#: web/ejabberd_web_admin.erl:2035 +#: web/ejabberd_web_admin.erl:2036 msgid "" "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 " @@ -1558,146 +1613,146 @@ msgstr "" "ODBC, θα πρέπει επίσης να κάνετε χωριστά Αντιγράφο Ασφαλείας της SQL βάση " "δεδομένων σας ." -#: web/ejabberd_web_admin.erl:2040 +#: web/ejabberd_web_admin.erl:2041 msgid "Store binary backup:" msgstr "Αποθηκεύση δυαδικού αντιγράφου ασφαλείας:" -#: web/ejabberd_web_admin.erl:2044 web/ejabberd_web_admin.erl:2051 -#: web/ejabberd_web_admin.erl:2059 web/ejabberd_web_admin.erl:2066 -#: web/ejabberd_web_admin.erl:2073 web/ejabberd_web_admin.erl:2080 -#: web/ejabberd_web_admin.erl:2087 web/ejabberd_web_admin.erl:2095 -#: web/ejabberd_web_admin.erl:2102 web/ejabberd_web_admin.erl:2109 +#: web/ejabberd_web_admin.erl:2045 web/ejabberd_web_admin.erl:2052 +#: web/ejabberd_web_admin.erl:2060 web/ejabberd_web_admin.erl:2067 +#: web/ejabberd_web_admin.erl:2074 web/ejabberd_web_admin.erl:2081 +#: web/ejabberd_web_admin.erl:2088 web/ejabberd_web_admin.erl:2096 +#: web/ejabberd_web_admin.erl:2103 web/ejabberd_web_admin.erl:2110 msgid "OK" msgstr "Όλλα Καλά" -#: web/ejabberd_web_admin.erl:2047 +#: web/ejabberd_web_admin.erl:2048 msgid "Restore binary backup immediately:" msgstr "Επαναφορά δυαδικού αντιγράφου ασφαλείας αμέσως:" -#: web/ejabberd_web_admin.erl:2055 +#: web/ejabberd_web_admin.erl:2056 msgid "" "Restore binary backup after next ejabberd restart (requires less memory):" msgstr "" "Επαναφορά δυαδικού αντιγράφου ασφαλείας μετά την επόμενη επανεκκίνηση του " "ejabberd (απαιτεί λιγότερη μνήμη):" -#: web/ejabberd_web_admin.erl:2062 +#: web/ejabberd_web_admin.erl:2063 msgid "Store plain text backup:" msgstr "Αποθηκεύση αντιγράφου ασφαλείας σε αρχείο κειμένου:" -#: web/ejabberd_web_admin.erl:2069 +#: web/ejabberd_web_admin.erl:2070 msgid "Restore plain text backup immediately:" msgstr "Επαναφορά αντιγράφου ασφαλείας από αρχείο κειμένου αμέσως:" -#: web/ejabberd_web_admin.erl:2076 +#: web/ejabberd_web_admin.erl:2077 msgid "Import users data from a PIEFXIS file (XEP-0227):" msgstr "Εισαγωγή δεδομένων χρηστών από ένα αρχείο PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2083 +#: web/ejabberd_web_admin.erl:2084 msgid "Export data of all users in the server to PIEFXIS files (XEP-0227):" msgstr "" "Εξαγωγή δεδομένων όλων των χρηστών του διακομιστή σε PIEFXIS αρχεία " "(XEP-0227):" -#: web/ejabberd_web_admin.erl:2090 +#: web/ejabberd_web_admin.erl:2091 msgid "Export data of users in a host to PIEFXIS files (XEP-0227):" msgstr "" "Εξαγωγή δεδομένων των χρηστών κεντρικού υπολογιστή σε PIEFXIS αρχεία " "(XEP-0227):" -#: web/ejabberd_web_admin.erl:2098 +#: web/ejabberd_web_admin.erl:2099 msgid "Import user data from jabberd14 spool file:" msgstr "Εισαγωγή δεδομένων χρήστη από το αρχείο σειράς jabberd14:" -#: web/ejabberd_web_admin.erl:2105 +#: web/ejabberd_web_admin.erl:2106 msgid "Import users data from jabberd14 spool directory:" msgstr "Εισαγωγή δεδομένων χρηστών από κατάλογο αρχείων σειράς jabberd14:" -#: web/ejabberd_web_admin.erl:2131 +#: web/ejabberd_web_admin.erl:2132 msgid "Listened Ports at " msgstr "Παρακολουθούμενες Θύρες στο " -#: web/ejabberd_web_admin.erl:2156 +#: web/ejabberd_web_admin.erl:2157 msgid "Modules at " msgstr "Modules στο " -#: web/ejabberd_web_admin.erl:2182 +#: web/ejabberd_web_admin.erl:2183 msgid "Statistics of ~p" msgstr "Στατιστικές του ~p" -#: web/ejabberd_web_admin.erl:2185 +#: web/ejabberd_web_admin.erl:2186 msgid "Uptime:" msgstr "Uptime:" -#: web/ejabberd_web_admin.erl:2188 +#: web/ejabberd_web_admin.erl:2189 msgid "CPU Time:" msgstr "Ώρα CPU:" -#: web/ejabberd_web_admin.erl:2194 +#: web/ejabberd_web_admin.erl:2195 msgid "Transactions Committed:" msgstr "Παραδοθείς συναλλαγές:" -#: web/ejabberd_web_admin.erl:2197 +#: web/ejabberd_web_admin.erl:2198 msgid "Transactions Aborted:" msgstr "Αποτυχημένες συναλλαγές:" -#: web/ejabberd_web_admin.erl:2200 +#: web/ejabberd_web_admin.erl:2201 msgid "Transactions Restarted:" msgstr "Επανειλημμένες συναλλαγές:" -#: web/ejabberd_web_admin.erl:2203 +#: web/ejabberd_web_admin.erl:2204 msgid "Transactions Logged:" msgstr "Καταγραμμένες συναλλαγές:" -#: web/ejabberd_web_admin.erl:2245 +#: web/ejabberd_web_admin.erl:2246 msgid "Update " msgstr "Ενημέρωση" -#: web/ejabberd_web_admin.erl:2253 +#: web/ejabberd_web_admin.erl:2254 msgid "Update plan" msgstr "Σχέδιο ενημέρωσης" -#: web/ejabberd_web_admin.erl:2254 +#: web/ejabberd_web_admin.erl:2255 msgid "Modified modules" msgstr "Τροποποιημένα modules" -#: web/ejabberd_web_admin.erl:2255 +#: web/ejabberd_web_admin.erl:2256 msgid "Update script" msgstr "Προγράμα ενημέρωσης" -#: web/ejabberd_web_admin.erl:2256 +#: web/ejabberd_web_admin.erl:2257 msgid "Low level update script" msgstr "Προγράμα ενημέρωσης χαμηλού επίπεδου " -#: web/ejabberd_web_admin.erl:2257 +#: web/ejabberd_web_admin.erl:2258 msgid "Script check" msgstr "Script ελέγχου" -#: web/ejabberd_web_admin.erl:2425 +#: web/ejabberd_web_admin.erl:2426 msgid "Port" msgstr "Θύρα" -#: web/ejabberd_web_admin.erl:2426 +#: web/ejabberd_web_admin.erl:2427 msgid "IP" msgstr "IP" -#: web/ejabberd_web_admin.erl:2427 +#: web/ejabberd_web_admin.erl:2428 msgid "Protocol" msgstr "Πρωτόκολλο" -#: web/ejabberd_web_admin.erl:2428 web/ejabberd_web_admin.erl:2555 +#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 msgid "Module" msgstr "Module" -#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 +#: web/ejabberd_web_admin.erl:2430 web/ejabberd_web_admin.erl:2557 msgid "Options" msgstr "Επιλογές" -#: web/ejabberd_web_admin.erl:2449 +#: web/ejabberd_web_admin.erl:2450 msgid "Delete" msgstr "Διαγραφή" -#: web/ejabberd_web_admin.erl:2578 +#: web/ejabberd_web_admin.erl:2579 msgid "Start" msgstr "Εκκίνηση" @@ -1831,4 +1886,4 @@ msgstr "Καταργήση εγγραφής" #, fuzzy #~ msgid "Captcha test failed" -#~ msgstr "Το captcha είναι έγκυρο." +#~ msgstr "Το CAPTCHA είναι έγκυρο." diff --git a/src/msgs/eo.msg b/src/msgs/eo.msg index 435f44d4f..2b336f07a 100644 --- a/src/msgs/eo.msg +++ b/src/msgs/eo.msg @@ -20,7 +20,9 @@ {"Allow users to send invites","Permesu uzantojn sendi invitojn"}. {"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 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 voice requests","Permesu uzantojn sendi voĉ-petojn"}. {"All Users","Ĉiuj Uzantoj"}. {"Announcements","Anoncoj"}. {"anyone","iu ajn"}. @@ -33,8 +35,10 @@ {"Backup to File at ","Faru sekurkopion je "}. {"Bad format","Malĝusta formo"}. {"Birthday","Naskiĝtago"}. +{"CAPTCHA web page","CAPTCHA teksaĵ-paĝo"}. {"Change Password","Ŝanĝu pasvorton"}. {"Change User Password","Ŝanĝu pasvorton de uzanto"}. +{"Characters not allowed:","Karaktroj ne permesata:"}. {"Chatroom configuration modified","Agordo de babilejo ŝanĝita"}. {"Chatroom is created","Babilejo kreita"}. {"Chatroom is destroyed","Babilejo neniigita"}. @@ -69,9 +73,11 @@ {"Description:","Priskribo:"}. {"Disc only copy","Nur disk-kopio"}. {"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 to Text File","Skribu en plata tekst-dosiero"}. {"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 MUC module","ejabberd MUC-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 text file","Enmetu vojon al plata 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"}. {"Erlang Jabber Server","Erlang-a Jabber-Servilo"}. {"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\"}]."}. +{"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 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"}. {"February","Februaro"}. {"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 Password","Montru pasvorton de uzanto"}. {"Get User Statistics","Montru statistikojn de uzanto"}. +{"Grant voice to this person?","Koncedu voĉon al ĉi-persono?"}. {"Group ","Grupo "}. {"Groups","Grupoj"}. {"has been banned","estas forbarita"}. @@ -119,6 +127,7 @@ {"has been kicked","estas forpelita"}. {" has set the subject to: "," ŝanĝis la temon al: "}. {"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."}. {"Import Directory","Importu dosierujo"}. {"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 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"}. +{"Jabber Account Registration","Ĵabber-konto registrado"}. {"Jabber ID","Jabber ID"}. {"Jabber ID ~s is invalid","Jabber ID ~s estas nevalida"}. {"January","Januaro"}. @@ -163,7 +173,7 @@ {"List of modules to start","Listo de moduloj por starti"}. {"Low level update script","Bazanivela ĝisdatigo-skripto"}. {"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 moderated","Farigu babilejon moderigata"}. {"Make room password protected","Farigu babilejon protektata per pasvorto"}. @@ -176,9 +186,11 @@ {"May","Majo"}. {"Membership is required to enter this room","Membreco estas bezonata por eniri ĉi tiun babilejon"}. {"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"}. {"Message body","Teksto de mesaĝo"}. {"Middle Name","Meza Nomo"}. +{"Minimum interval between voice requests (in seconds)","Minimuma intervalo inter voĉ-petoj (je sekundoj)"}. {"Moderator privileges required","Moderantaj rajtoj bezonata"}. {"moderators only","moderantoj sole"}. {"Modified modules","Ĝisdatigitaj moduloj"}. @@ -189,9 +201,11 @@ {"Name:","Nomo:"}. {"Name","Nomo"}. {"Never","Neniam"}. +{"New Password:","Nova Pasvorto:"}. {"Nickname","Kaŝnomo"}. {"Nickname Registration at ","Kaŝnomo-registrado je "}. {"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 Data","Neniu datumo"}. {"Node ID","Nodo ID"}. @@ -213,12 +227,14 @@ {"Offline Messages:","Liverontaj mesaĝoj"}. {"Offline Messages","Liverontaj mesaĝoj"}. {"OK","Bone"}. +{"Old Password:","Malnova Pasvorto:"}. {"Online","Konektata"}. {"Online Users:","Konektataj uzantoj:"}. {"Online Users","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 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 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"}. @@ -233,6 +249,7 @@ {"Password ~b","Pasvorto ~b"}. {"Password:","Pasvorto:"}. {"Password","Pasvorto"}. +{"Password Verification:","Pasvortkontrolo:"}. {"Password Verification","Pasvortkontrolo"}. {"Path to Dir","Vojo al dosierujo"}. {"Path to File","Voje de dosiero"}. @@ -241,6 +258,7 @@ {"Persist items to storage","Savu erojn en konservado"}. {"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, wait for a while before sending new voice request","Bonvolu atendi iomete antaŭ ol sendi plian voĉ-peton"}. {"Pong","Resondaĵo"}. {"Port ~b","Pordo ~b"}. {"Port","Pordo"}. @@ -256,8 +274,10 @@ {"Raw","Kruda"}. {"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 "}. +{"Register a Jabber account","Registru Ĵabber-konton"}. {"Registered Users:","Registritaj uzantoj:"}. {"Registered Users","Registritaj uzantoj"}. +{"Register","Registru"}. {"Registration in mod_irc for ","Registraĵo en mod_irc de "}. {"Remote copy","Fora kopio"}. {"Remove All Offline Messages","Forigu ĉiujn liverontajn mesaĝojn"}. @@ -294,6 +314,7 @@ {"Send announcement to all users","Sendu anoncon al ĉiu uzanto"}. {"September","Septembro"}. {"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 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"}. @@ -301,6 +322,7 @@ {"Show Ordinary Table","Montru ordinaran tabelon"}. {"Shut Down Service","Haltigu Servon"}. {"~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 event message type","Specifu tipo de event-mesaĝo"}. {"Specify the publisher model","Enmetu publikadan modelon"}. @@ -325,9 +347,18 @@ {"Sunday","Dimanĉo"}. {"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"}. -{"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 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 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"}. @@ -336,6 +367,7 @@ {"Time delay","Prokrasto"}. {"Time","Tempo"}. {"To","Ĝis"}. +{"Too many CAPTCHA requests","Tro multaj CAPTCHA-petoj"}. {"To ~s","Al ~s"}. {"Traffic rate limit is exceeded","Trafikrapida limigo superita"}. {"Transactions Aborted:","Transakcioj nuligitaj"}. @@ -343,8 +375,10 @@ {"Transactions Logged:","Transakcioj protokolitaj"}. {"Transactions Restarted:","Transakcioj restartitaj"}. {"Tuesday","Mardo"}. -{"Unable to generate a captcha","Ne eblis krei aŭtomatas turingteston"}. +{"Unable to generate a CAPTCHA","Ne eblis krei CAPTCHA"}. {"Unauthorized","Nepermesita"}. +{"Unregister a Jabber account","Malregistru Ĵabber-konton"}. +{"Unregister","Malregistru"}. {"Update ","Ĝisdatigu "}. {"Update","Ĝisdatigu"}. {"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"}. {"Uptime:","Daŭro de funkciado"}. {"Use of STARTTLS required","Uzo de STARTTLS bezonata"}. +{"User JID","Uzant-JID"}. {"User Management","Uzanto-administrado"}. +{"Username:","Uzantnomo"}. {"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","Uzantoj"}. @@ -364,13 +400,21 @@ {"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 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"}. {"When to send the last published item","Kiam sendi la laste publicitan eron"}. {"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 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 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"}. +{"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 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"}. diff --git a/src/msgs/eo.po b/src/msgs/eo.po index 0508b72a8..ed53b2a56 100644 --- a/src/msgs/eo.po +++ b/src/msgs/eo.po @@ -19,13 +19,13 @@ msgstr "Uzo de STARTTLS bezonata" msgid "No resource provided" msgstr "Neniu risurco donita" -#: ejabberd_c2s.erl:1149 +#: ejabberd_c2s.erl:1197 msgid "Replaced by new connection" msgstr "Anstataŭigita je nova konekto" -#: ejabberd_c2s.erl:1837 +#: ejabberd_c2s.erl:1885 msgid "Your active privacy list has denied the routing of this stanza." -msgstr "" +msgstr "Via aktiva privatec-listo malpermesas enkursigi ĉi-tiun pakaĵon" #: ejabberd_captcha.erl:96 ejabberd_captcha.erl:152 ejabberd_captcha.erl:178 msgid "Enter the text you see" @@ -37,15 +37,15 @@ msgstr "Viaj mesaĝoj al ~s estas blokata. Por malbloki ilin, iru al ~s" #: ejabberd_captcha.erl:134 msgid "If you don't see the CAPTCHA image here, visit the web page." -msgstr "" +msgstr "Se vi ne vidas la CAPTCHA-imagon jene, vizitu la teksaĵ-paĝon." #: ejabberd_captcha.erl:146 msgid "CAPTCHA web page" -msgstr "" +msgstr "CAPTCHA teksaĵ-paĝo" #: ejabberd_captcha.erl:307 -msgid "The captcha is valid." -msgstr "La aŭtomata Turingtesto estas ĝusta" +msgid "The CAPTCHA is valid." +msgstr "La CAPTCHA ĝustas" #: mod_adhoc.erl:95 mod_adhoc.erl:125 mod_adhoc.erl:143 mod_adhoc.erl:161 msgid "Commands" @@ -59,64 +59,67 @@ msgstr "Sondaĵo" msgid "Pong" msgstr "Resondaĵo" -#: mod_announce.erl:506 +#: mod_announce.erl:507 mod_announce_odbc.erl:499 msgid "Really delete message of the day?" msgstr "Ĉu vere forigi mesaĝon de la tago?" -#: mod_announce.erl:514 mod_configure.erl:1083 mod_configure.erl:1128 +#: mod_announce.erl:515 mod_announce_odbc.erl:507 mod_configure.erl:1083 +#: mod_configure.erl:1128 msgid "Subject" msgstr "Temo" -#: mod_announce.erl:519 mod_configure.erl:1088 mod_configure.erl:1133 +#: mod_announce.erl:520 mod_announce_odbc.erl:512 mod_configure.erl:1088 +#: mod_configure.erl:1133 msgid "Message body" msgstr "Teksto de mesaĝo" -#: mod_announce.erl:599 +#: mod_announce.erl:600 mod_announce_odbc.erl:592 msgid "No body provided for announce message" msgstr "Neniu teksto donita por anonc-mesaĝo" -#: mod_announce.erl:634 +#: mod_announce.erl:635 mod_announce_odbc.erl:627 msgid "Announcements" msgstr "Anoncoj" -#: mod_announce.erl:636 +#: mod_announce.erl:637 mod_announce_odbc.erl:629 msgid "Send announcement to all users" msgstr "Sendu anoncon al ĉiu uzanto" -#: mod_announce.erl:638 +#: mod_announce.erl:639 mod_announce_odbc.erl:631 msgid "Send announcement to all users on all hosts" msgstr "Sendu anoncon al ĉiu uzanto de ĉiu gastigo" -#: mod_announce.erl:640 +#: mod_announce.erl:641 mod_announce_odbc.erl:633 msgid "Send announcement to all online users" msgstr "Sendu anoncon al ĉiu konektata uzanto" -#: mod_announce.erl:642 mod_configure.erl:1078 mod_configure.erl:1123 +#: mod_announce.erl:643 mod_announce_odbc.erl:635 mod_configure.erl:1078 +#: mod_configure.erl:1123 msgid "Send announcement to all online users on all hosts" msgstr "Sendu anoncon al ĉiu konektata uzanto de ĉiu gastigo" -#: mod_announce.erl:644 +#: mod_announce.erl:645 mod_announce_odbc.erl:637 msgid "Set message of the day and send to online users" msgstr "Enmetu mesaĝon de la tago kaj sendu al konektataj uzantoj" -#: mod_announce.erl:646 +#: mod_announce.erl:647 mod_announce_odbc.erl:639 msgid "Set message of the day on all hosts and send to online users" msgstr "" "Enmetu mesaĝon de la tago je ĉiu gastigo kaj sendu al konektataj uzantoj" -#: mod_announce.erl:648 +#: mod_announce.erl:649 mod_announce_odbc.erl:641 msgid "Update message of the day (don't send)" msgstr "Ŝanĝu mesaĝon de la tago (ne sendu)" -#: mod_announce.erl:650 +#: mod_announce.erl:651 mod_announce_odbc.erl:643 msgid "Update message of the day on all hosts (don't send)" msgstr "Ŝanĝu mesaĝon de la tago je ĉiu gastigo (ne sendu)" -#: mod_announce.erl:652 +#: mod_announce.erl:653 mod_announce_odbc.erl:645 msgid "Delete message of the day" msgstr "Forigu mesaĝo de la tago" -#: mod_announce.erl:654 +#: mod_announce.erl:655 mod_announce_odbc.erl:647 msgid "Delete message of the day on all hosts" msgstr "Forigu mesaĝo de la tago je ĉiu gastigo" @@ -125,7 +128,7 @@ msgstr "Forigu mesaĝo de la tago je ĉiu gastigo" msgid "Configuration" msgstr "Agordo" -#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1934 +#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1936 msgid "Database" msgstr "Datumbazo" @@ -137,7 +140,7 @@ msgstr "Startu Modulojn" msgid "Stop Modules" msgstr "Haltigu Modulojn" -#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1935 +#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1937 msgid "Backup" msgstr "Faru Sekurkopion" @@ -166,7 +169,7 @@ msgid "Shut Down Service" msgstr "Haltigu Servon" #: mod_configure.erl:145 mod_configure.erl:518 mod_configure.erl:1197 -#: web/ejabberd_web_admin.erl:1528 +#: web/ejabberd_web_admin.erl:1527 msgid "Add User" msgstr "Aldonu Uzanton" @@ -218,7 +221,7 @@ msgid "User Management" msgstr "Uzanto-administrado" #: mod_configure.erl:500 web/ejabberd_web_admin.erl:1058 -#: web/ejabberd_web_admin.erl:1463 +#: web/ejabberd_web_admin.erl:1462 msgid "Online Users" msgstr "Konektataj Uzantoj" @@ -230,15 +233,15 @@ msgstr "Ĉiuj Uzantoj" msgid "Outgoing s2s Connections" msgstr "Elirantaj s-al-s-konektoj" -#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1905 +#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1907 msgid "Running Nodes" msgstr "Funkciantaj Nodoj" -#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1907 +#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1909 msgid "Stopped Nodes" msgstr "Neaktivaj Nodoj" -#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1951 +#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1953 msgid "Modules" msgstr "Moduloj" @@ -369,15 +372,15 @@ msgstr "Atingo-reguloj" #: mod_configure.erl:1200 mod_configure.erl:1222 mod_configure.erl:1234 #: mod_configure.erl:1246 mod_configure.erl:1258 mod_configure.erl:1275 -#: mod_configure.erl:1287 mod_configure.erl:1652 mod_configure.erl:1702 -#: mod_configure.erl:1723 mod_roster.erl:943 mod_roster_odbc.erl:1048 -#: mod_vcard.erl:466 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:442 +#: mod_configure.erl:1287 mod_configure.erl:1650 mod_configure.erl:1700 +#: mod_configure.erl:1721 mod_roster.erl:943 mod_roster_odbc.erl:1060 +#: mod_vcard.erl:472 mod_vcard_ldap.erl:554 mod_vcard_odbc.erl:448 msgid "Jabber ID" msgstr "Jabber ID" -#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1653 -#: mod_configure.erl:1865 mod_muc/mod_muc_room.erl:2970 mod_register.erl:235 -#: web/ejabberd_web_admin.erl:1521 +#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1651 +#: mod_configure.erl:1863 mod_muc/mod_muc_room.erl:3224 mod_register.erl:235 +#: web/ejabberd_web_admin.erl:1520 msgid "Password" msgstr "Pasvorto" @@ -393,69 +396,70 @@ msgstr "Nombro de registritaj uzantoj" msgid "Number of online users" msgstr "Nombro de konektataj uzantoj" -#: mod_configure.erl:1684 web/ejabberd_web_admin.erl:1589 -#: web/ejabberd_web_admin.erl:1741 +#: mod_configure.erl:1682 web/ejabberd_web_admin.erl:1588 +#: web/ejabberd_web_admin.erl:1743 msgid "Never" msgstr "Neniam" -#: mod_configure.erl:1698 web/ejabberd_web_admin.erl:1602 -#: web/ejabberd_web_admin.erl:1754 +#: mod_configure.erl:1696 web/ejabberd_web_admin.erl:1601 +#: web/ejabberd_web_admin.erl:1756 msgid "Online" msgstr "Konektata" -#: mod_configure.erl:1703 +#: mod_configure.erl:1701 msgid "Last login" msgstr "Lasta ensaluto" -#: mod_configure.erl:1724 +#: mod_configure.erl:1722 msgid "Roster size" msgstr "Kontaktlist-grando" -#: mod_configure.erl:1725 +#: mod_configure.erl:1723 msgid "IP addresses" msgstr "IP-adresoj" -#: mod_configure.erl:1726 +#: mod_configure.erl:1724 msgid "Resources" msgstr "Risurcoj" -#: mod_configure.erl:1852 +#: mod_configure.erl:1850 msgid "Administration of " msgstr "Mastrumado de " -#: mod_configure.erl:1855 +#: mod_configure.erl:1853 msgid "Action on user" msgstr "Ago je uzanto" -#: mod_configure.erl:1859 +#: mod_configure.erl:1857 msgid "Edit Properties" msgstr "Redaktu atributojn" -#: mod_configure.erl:1862 web/ejabberd_web_admin.erl:1767 +#: mod_configure.erl:1860 web/ejabberd_web_admin.erl:1769 msgid "Remove User" msgstr "Forigu uzanton" -#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:336 +#: mod_irc/mod_irc.erl:201 mod_irc/mod_irc_odbc.erl:196 +#: mod_muc/mod_muc.erl:336 mod_muc/mod_muc_odbc.erl:342 msgid "Access denied by service policy" msgstr "Atingo rifuzita de serv-politiko" -#: mod_irc/mod_irc.erl:400 +#: mod_irc/mod_irc.erl:401 mod_irc/mod_irc_odbc.erl:398 msgid "IRC Transport" msgstr "IRC-transportilo" -#: mod_irc/mod_irc.erl:427 +#: mod_irc/mod_irc.erl:428 mod_irc/mod_irc_odbc.erl:425 msgid "ejabberd IRC module" msgstr "ejabberd IRC-modulo" -#: mod_irc/mod_irc.erl:558 +#: mod_irc/mod_irc.erl:559 mod_irc/mod_irc_odbc.erl:568 msgid "You need an x:data capable client to configure mod_irc settings" msgstr "Vi bezonas klienton kun x:data-funkcio por agordi mod_irc" -#: mod_irc/mod_irc.erl:565 +#: mod_irc/mod_irc.erl:566 mod_irc/mod_irc_odbc.erl:575 msgid "Registration in mod_irc for " msgstr "Registraĵo en mod_irc de " -#: mod_irc/mod_irc.erl:570 +#: mod_irc/mod_irc.erl:571 mod_irc/mod_irc_odbc.erl:580 msgid "" "Enter username, encodings, ports and passwords you wish to use for " "connecting to IRC servers" @@ -463,11 +467,11 @@ msgstr "" "Enmetu uzantnomon,j enkodigojn, pordojn kaj pasvortojn kiujn vi volas uzi " "por konektoj al IRC-serviloj" -#: mod_irc/mod_irc.erl:575 +#: mod_irc/mod_irc.erl:576 mod_irc/mod_irc_odbc.erl:585 msgid "IRC Username" msgstr "IRC-kaŝnomo" -#: mod_irc/mod_irc.erl:585 +#: mod_irc/mod_irc.erl:586 mod_irc/mod_irc_odbc.erl:595 msgid "" "If you want to specify different ports, passwords, encodings for IRC " "servers, fill this list with values in format '{\"irc server\", \"encoding" @@ -479,7 +483,7 @@ msgstr "" "\"enkodigo\", porto, \"pasvorto\"}'. Se ne specifita, ĉi tiu servilo uzas la " "enkodigo \"~s\", porto ~p, malplena pasvorto." -#: mod_irc/mod_irc.erl:597 +#: mod_irc/mod_irc.erl:598 mod_irc/mod_irc_odbc.erl:607 msgid "" "Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." @@ -487,35 +491,37 @@ msgstr "" "Ekzemplo: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"sekreto\"}, {\"vendetta." "fef.net\", \"iso8859-1\", 7000}, {\"irc.iutestservilo.net\", \"utf-8\"}]." -#: mod_irc/mod_irc.erl:602 +#: mod_irc/mod_irc.erl:603 mod_irc/mod_irc_odbc.erl:612 msgid "Connections parameters" msgstr "Konekto-parametroj" -#: mod_irc/mod_irc.erl:727 +#: mod_irc/mod_irc.erl:728 mod_irc/mod_irc_odbc.erl:757 msgid "Join IRC channel" msgstr "Eniras IRC-babilejon" -#: mod_irc/mod_irc.erl:731 +#: mod_irc/mod_irc.erl:732 mod_irc/mod_irc_odbc.erl:761 msgid "IRC channel (don't put the first #)" msgstr "IRC-babilejo (ne aldonu #-prefikson)" -#: mod_irc/mod_irc.erl:736 +#: mod_irc/mod_irc.erl:737 mod_irc/mod_irc_odbc.erl:766 msgid "IRC server" msgstr "IRC-servilo" -#: mod_irc/mod_irc.erl:769 mod_irc/mod_irc.erl:773 +#: mod_irc/mod_irc.erl:770 mod_irc/mod_irc.erl:774 +#: mod_irc/mod_irc_odbc.erl:799 mod_irc/mod_irc_odbc.erl:803 msgid "Join the IRC channel here." msgstr "Eniru IRC-babilejon jen" -#: mod_irc/mod_irc.erl:777 +#: mod_irc/mod_irc.erl:778 mod_irc/mod_irc_odbc.erl:807 msgid "Join the IRC channel in this Jabber ID: ~s" msgstr "Eniru IRC-babilejon en ĉi Jabber-ID: ~s" -#: mod_irc/mod_irc.erl:862 +#: mod_irc/mod_irc.erl:863 mod_irc/mod_irc_odbc.erl:904 msgid "IRC settings" msgstr "IRC agordoj" -#: mod_irc/mod_irc.erl:867 +#: mod_irc/mod_irc.erl:868 mod_irc/mod_irc_odbc.erl:909 +#, fuzzy msgid "" "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 " @@ -525,71 +531,71 @@ msgstr "" "serviloj. Elektu \"Sekvonto\" por ekhavi pliajn kampojn. Elektu \"Kompletigu" "\" por savi agordojn." -#: mod_irc/mod_irc.erl:873 +#: mod_irc/mod_irc.erl:874 mod_irc/mod_irc_odbc.erl:915 msgid "IRC username" msgstr "IRC-uzantnomo" -#: mod_irc/mod_irc.erl:922 +#: mod_irc/mod_irc.erl:923 mod_irc/mod_irc_odbc.erl:964 msgid "Password ~b" msgstr "Pasvorto ~b" -#: mod_irc/mod_irc.erl:927 +#: mod_irc/mod_irc.erl:928 mod_irc/mod_irc_odbc.erl:969 msgid "Port ~b" msgstr "Pordo ~b" -#: mod_irc/mod_irc.erl:932 +#: mod_irc/mod_irc.erl:933 mod_irc/mod_irc_odbc.erl:974 msgid "Encoding for server ~b" msgstr "Enkodigo por servilo ~b" -#: mod_irc/mod_irc.erl:941 +#: mod_irc/mod_irc.erl:942 mod_irc/mod_irc_odbc.erl:983 msgid "Server ~b" msgstr "Servilo ~b" -#: mod_muc/mod_muc.erl:449 +#: mod_muc/mod_muc.erl:449 mod_muc/mod_muc_odbc.erl:456 msgid "Only service administrators are allowed to send service messages" msgstr "Nur servo-administrantoj rajtas sendi serv-mesaĝojn" -#: mod_muc/mod_muc.erl:493 +#: mod_muc/mod_muc.erl:493 mod_muc/mod_muc_odbc.erl:500 msgid "Room creation is denied by service policy" msgstr "Ĉi tiu serv-politiko ne permesas babilejo-kreadon" -#: mod_muc/mod_muc.erl:500 +#: mod_muc/mod_muc.erl:500 mod_muc/mod_muc_odbc.erl:507 msgid "Conference room does not exist" msgstr "Babilejo ne ekzistas" -#: mod_muc/mod_muc.erl:581 +#: mod_muc/mod_muc.erl:582 mod_muc/mod_muc_odbc.erl:595 msgid "Chatrooms" msgstr "Babilejoj" -#: mod_muc/mod_muc.erl:711 -#, fuzzy +#: mod_muc/mod_muc.erl:712 mod_muc/mod_muc_odbc.erl:729 msgid "You need a client that supports x:data to register the nickname" -msgstr "Vi bezonas klienton kun x:data-funkcio por registri kaŝnomon" +msgstr "Vi bezonas klienton subtenante x:data-funkcio por registri kaŝnomon" -#: mod_muc/mod_muc.erl:717 +#: mod_muc/mod_muc.erl:718 mod_muc/mod_muc_odbc.erl:735 msgid "Nickname Registration at " msgstr "Kaŝnomo-registrado je " -#: mod_muc/mod_muc.erl:721 +#: mod_muc/mod_muc.erl:722 mod_muc/mod_muc_odbc.erl:739 msgid "Enter nickname you want to register" msgstr "Enmetu kaŝnomon kiun vi volas registri" -#: mod_muc/mod_muc.erl:722 mod_roster.erl:944 mod_roster_odbc.erl:1049 -#: mod_vcard.erl:358 mod_vcard.erl:471 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:447 +#: mod_muc/mod_muc.erl:723 mod_muc/mod_muc_odbc.erl:740 +#: mod_muc/mod_muc_room.erl:3810 mod_roster.erl:944 mod_roster_odbc.erl:1061 +#: mod_vcard.erl:364 mod_vcard.erl:477 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:453 msgid "Nickname" msgstr "Kaŝnomo" -#: mod_muc/mod_muc.erl:761 mod_muc/mod_muc_room.erl:933 -#: mod_muc/mod_muc_room.erl:1577 +#: mod_muc/mod_muc.erl:762 mod_muc/mod_muc_odbc.erl:784 +#: mod_muc/mod_muc_room.erl:1064 mod_muc/mod_muc_room.erl:1787 msgid "That nickname is registered by another person" msgstr "Kaŝnomo estas registrita de alia persono" -#: mod_muc/mod_muc.erl:787 +#: mod_muc/mod_muc.erl:788 mod_muc/mod_muc_odbc.erl:811 msgid "You must fill in field \"Nickname\" in the form" msgstr "Vi devas kompletigi la \"Kaŝnomo\" kampon" -#: mod_muc/mod_muc.erl:807 +#: mod_muc/mod_muc.erl:808 mod_muc/mod_muc_odbc.erl:831 msgid "ejabberd MUC module" msgstr "ejabberd MUC-modulo" @@ -629,8 +635,8 @@ msgstr "estas forpelita pro sistem-haltigo" msgid "is now known as" msgstr "nun nomiĝas" -#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:689 -#: mod_muc/mod_muc_room.erl:2138 +#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:688 +#: mod_muc/mod_muc_room.erl:2393 msgid " has set the subject to: " msgstr " ŝanĝis la temon al: " @@ -726,34 +732,50 @@ msgstr "Novembro" msgid "December" msgstr "Decembro" -#: mod_muc/mod_muc_log.erl:751 +#: mod_muc/mod_muc_log.erl:750 msgid "Room Configuration" msgstr "Babilejo-agordo" -#: mod_muc/mod_muc_log.erl:760 +#: mod_muc/mod_muc_log.erl:759 msgid "Room Occupants" msgstr "Nombro de ĉeestantoj" -#: mod_muc/mod_muc_room.erl:170 +#: mod_muc/mod_muc_room.erl:174 msgid "Traffic rate limit is exceeded" msgstr "Trafikrapida limigo superita" -#: mod_muc/mod_muc_room.erl:242 +#: mod_muc/mod_muc_room.erl:246 msgid "" "This participant is kicked from the room because he sent an error message" msgstr "" "Ĉi tiu partoprenanta estas forpelata de la babilejo pro sendado de erar-" "mesaĝo" -#: mod_muc/mod_muc_room.erl:251 +#: mod_muc/mod_muc_room.erl:255 msgid "It is not allowed to send private messages to the conference" msgstr "Nur partoprenantoj rajtas sendi privatajn mesaĝojn al la babilejo" -#: mod_muc/mod_muc_room.erl:296 +#: mod_muc/mod_muc_room.erl:332 +msgid "Please, wait for a while before sending new voice request" +msgstr "Bonvolu atendi iomete antaŭ ol sendi plian voĉ-peton" + +#: mod_muc/mod_muc_room.erl:347 +msgid "Voice requests are disabled in this conference" +msgstr "Voĉ-petoj estas malebligita en jena babilejo" + +#: mod_muc/mod_muc_room.erl:364 +msgid "Failed to extract JID from your voice request approval" +msgstr "Malsukcesis ekstrakti JID-on de via voĉ-pet-aprobo" + +#: mod_muc/mod_muc_room.erl:393 +msgid "Only moderators can approve voice requests" +msgstr "Nur moderigantoj povas aprobi voĉ-petojn" + +#: mod_muc/mod_muc_room.erl:408 msgid "Improper message type" msgstr "Malĝusta mesaĝo-tipo" -#: mod_muc/mod_muc_room.erl:406 +#: mod_muc/mod_muc_room.erl:518 msgid "" "This participant is kicked from the room because he sent an error message to " "another participant" @@ -761,230 +783,262 @@ msgstr "" "Ĉi tiu partoprenanto estas forpelata de la babilejo pro sendo de erar-mesaĝo " "al alia partoprenanto" -#: mod_muc/mod_muc_room.erl:419 +#: mod_muc/mod_muc_room.erl:531 msgid "It is not allowed to send private messages of type \"groupchat\"" msgstr "Malpermesas sendi mesaĝojn de tipo \"groupchat\"" -#: mod_muc/mod_muc_room.erl:431 mod_muc/mod_muc_room.erl:486 +#: mod_muc/mod_muc_room.erl:543 mod_muc/mod_muc_room.erl:611 msgid "Recipient is not in the conference room" msgstr "Ricevanto ne ĉeestas en la babilejo " -#: mod_muc/mod_muc_room.erl:451 mod_muc/mod_muc_room.erl:829 -#: mod_muc/mod_muc_room.erl:3609 -msgid "Only occupants are allowed to send messages to the conference" -msgstr "Nur partoprenantoj rajtas sendi mesaĝojn al la babilejo" - -#: mod_muc/mod_muc_room.erl:460 +#: mod_muc/mod_muc_room.erl:564 mod_muc/mod_muc_room.erl:585 msgid "It is not allowed to send private messages" msgstr "Ne estas permesata sendi privatajn mesaĝojn" -#: mod_muc/mod_muc_room.erl:509 +#: mod_muc/mod_muc_room.erl:576 mod_muc/mod_muc_room.erl:956 +#: mod_muc/mod_muc_room.erl:4040 +msgid "Only occupants are allowed to send messages to the conference" +msgstr "Nur partoprenantoj rajtas sendi mesaĝojn al la babilejo" + +#: mod_muc/mod_muc_room.erl:634 msgid "Only occupants are allowed to send queries to the conference" msgstr "Nur partoprenantoj rajtas sendi informmendojn al la babilejoj" -#: mod_muc/mod_muc_room.erl:521 +#: mod_muc/mod_muc_room.erl:646 msgid "Queries to the conference members are not allowed in this room" msgstr "Malpermesas informmendoj al partoprenantoj en ĉi tiu babilejo" -#: mod_muc/mod_muc_room.erl:805 +#: mod_muc/mod_muc_room.erl:932 msgid "" "Only moderators and participants are allowed to change the subject in this " "room" msgstr "" "Nur moderigantoj kaj partoprenantoj rajtas ŝanĝi la temon en ĉi tiu babilejo" -#: mod_muc/mod_muc_room.erl:810 +#: mod_muc/mod_muc_room.erl:937 msgid "Only moderators are allowed to change the subject in this room" msgstr "Nur moderigantoj rajtas ŝanĝi la temon en ĉi tiu babilejo" -#: mod_muc/mod_muc_room.erl:820 +#: mod_muc/mod_muc_room.erl:947 msgid "Visitors are not allowed to send messages to all occupants" msgstr "Vizitantoj ne rajtas sendi mesaĝojn al ĉiuj partoprenantoj" -#: mod_muc/mod_muc_room.erl:891 +#: mod_muc/mod_muc_room.erl:1021 msgid "" "This participant is kicked from the room because he sent an error presence" msgstr "" "Ĉi tiu partoprenanto estas forpelata de la babilejo pro sendo de erar-ĉeesto" -#: mod_muc/mod_muc_room.erl:909 +#: mod_muc/mod_muc_room.erl:1040 msgid "Visitors are not allowed to change their nicknames in this room" msgstr "" "Ne estas permesata al vizitantoj ŝanĝi siajn kaŝnomojn en ĉi tiu ĉambro" -#: mod_muc/mod_muc_room.erl:922 mod_muc/mod_muc_room.erl:1569 +#: mod_muc/mod_muc_room.erl:1053 mod_muc/mod_muc_room.erl:1779 msgid "That nickname is already in use by another occupant" msgstr "Tiu kaŝnomo jam estas uzata de alia partoprenanto" -#: mod_muc/mod_muc_room.erl:1558 +#: mod_muc/mod_muc_room.erl:1768 msgid "You have been banned from this room" msgstr "Vi estas malpermesata en ĉi tiu babilejo" -#: mod_muc/mod_muc_room.erl:1561 +#: mod_muc/mod_muc_room.erl:1771 msgid "Membership is required to enter this room" msgstr "Membreco estas bezonata por eniri ĉi tiun babilejon" -#: mod_muc/mod_muc_room.erl:1597 +#: mod_muc/mod_muc_room.erl:1807 msgid "This room is not anonymous" msgstr "Ĉi tiu babilejo ne estas anonima" -#: mod_muc/mod_muc_room.erl:1623 +#: mod_muc/mod_muc_room.erl:1833 msgid "A password is required to enter this room" msgstr "Pasvorto estas bezonata por eniri ĉi tiun babilejon" -#: mod_muc/mod_muc_room.erl:1645 mod_register.erl:246 +#: mod_muc/mod_muc_room.erl:1855 mod_register.erl:246 msgid "Too many CAPTCHA requests" -msgstr "" +msgstr "Tro multaj CAPTCHA-petoj" -#: mod_muc/mod_muc_room.erl:1654 -msgid "Unable to generate a captcha" -msgstr "Ne eblis krei aŭtomatas turingteston" +#: mod_muc/mod_muc_room.erl:1864 mod_register.erl:251 +msgid "Unable to generate a CAPTCHA" +msgstr "Ne eblis krei CAPTCHA" -#: mod_muc/mod_muc_room.erl:1664 +#: mod_muc/mod_muc_room.erl:1874 msgid "Incorrect password" msgstr "Nekorekta pasvorto" -#: mod_muc/mod_muc_room.erl:2193 +#: mod_muc/mod_muc_room.erl:2448 msgid "Administrator privileges required" msgstr "Administrantaj rajtoj bezonata" -#: mod_muc/mod_muc_room.erl:2208 +#: mod_muc/mod_muc_room.erl:2463 msgid "Moderator privileges required" msgstr "Moderantaj rajtoj bezonata" -#: mod_muc/mod_muc_room.erl:2363 +#: mod_muc/mod_muc_room.erl:2619 msgid "Jabber ID ~s is invalid" msgstr "Jabber ID ~s estas nevalida" -#: mod_muc/mod_muc_room.erl:2377 +#: mod_muc/mod_muc_room.erl:2633 msgid "Nickname ~s does not exist in the room" msgstr "Kaŝnomo ~s ne ekzistas en la babilejo" -#: mod_muc/mod_muc_room.erl:2403 mod_muc/mod_muc_room.erl:2797 +#: mod_muc/mod_muc_room.erl:2659 mod_muc/mod_muc_room.erl:3049 msgid "Invalid affiliation: ~s" msgstr "Nevalida aparteneco: ~s" -#: mod_muc/mod_muc_room.erl:2460 +#: mod_muc/mod_muc_room.erl:2713 msgid "Invalid role: ~s" msgstr "Nevalida rolo: ~s" -#: mod_muc/mod_muc_room.erl:2774 mod_muc/mod_muc_room.erl:2810 +#: mod_muc/mod_muc_room.erl:3026 mod_muc/mod_muc_room.erl:3062 msgid "Owner privileges required" msgstr "Mastraj rajtoj bezonata" -#: mod_muc/mod_muc_room.erl:2941 +#: mod_muc/mod_muc_room.erl:3195 msgid "Configuration of room ~s" msgstr "Agordo de babilejo ~s" -#: mod_muc/mod_muc_room.erl:2946 +#: mod_muc/mod_muc_room.erl:3200 msgid "Room title" msgstr "Babilejo-nomo" -#: mod_muc/mod_muc_room.erl:2949 mod_muc/mod_muc_room.erl:3388 +#: mod_muc/mod_muc_room.erl:3203 mod_muc/mod_muc_room.erl:3692 msgid "Room description" msgstr "Babilejo-priskribo" -#: mod_muc/mod_muc_room.erl:2956 +#: mod_muc/mod_muc_room.erl:3210 msgid "Make room persistent" msgstr "Farigu babilejon daŭra" -#: mod_muc/mod_muc_room.erl:2961 +#: mod_muc/mod_muc_room.erl:3215 msgid "Make room public searchable" msgstr "Farigu babilejon publike trovebla" -#: mod_muc/mod_muc_room.erl:2964 +#: mod_muc/mod_muc_room.erl:3218 msgid "Make participants list public" msgstr "Farigu partoprento-liston publika" -#: mod_muc/mod_muc_room.erl:2967 +#: mod_muc/mod_muc_room.erl:3221 msgid "Make room password protected" msgstr "Farigu babilejon protektata per pasvorto" -#: mod_muc/mod_muc_room.erl:2978 +#: mod_muc/mod_muc_room.erl:3232 msgid "Maximum Number of Occupants" msgstr "Limigo de nombro de partoprenantoj" -#: mod_muc/mod_muc_room.erl:2985 +#: mod_muc/mod_muc_room.erl:3239 msgid "No limit" msgstr "Neniu limigo" -#: mod_muc/mod_muc_room.erl:2996 +#: mod_muc/mod_muc_room.erl:3250 msgid "Present real Jabber IDs to" msgstr "Montru verajn Jabber ID-ojn al" -#: mod_muc/mod_muc_room.erl:3004 +#: mod_muc/mod_muc_room.erl:3258 mod_muc/mod_muc_room.erl:3292 msgid "moderators only" msgstr "moderantoj sole" -#: mod_muc/mod_muc_room.erl:3006 +#: mod_muc/mod_muc_room.erl:3260 mod_muc/mod_muc_room.erl:3294 msgid "anyone" msgstr "iu ajn" -#: mod_muc/mod_muc_room.erl:3008 +#: mod_muc/mod_muc_room.erl:3262 msgid "Make room members-only" msgstr "Farigu babilejon sole por membroj" -#: mod_muc/mod_muc_room.erl:3011 +#: mod_muc/mod_muc_room.erl:3265 msgid "Make room moderated" msgstr "Farigu babilejon moderigata" -#: mod_muc/mod_muc_room.erl:3014 +#: mod_muc/mod_muc_room.erl:3268 msgid "Default users as participants" msgstr "Kutime farigu uzantojn kiel partpoprenantoj" -#: mod_muc/mod_muc_room.erl:3017 +#: mod_muc/mod_muc_room.erl:3271 msgid "Allow users to change the subject" msgstr "Permesu uzantojn ŝanĝi la temon" -#: mod_muc/mod_muc_room.erl:3020 +#: mod_muc/mod_muc_room.erl:3274 msgid "Allow users to send private messages" msgstr "Permesu uzantojn sendi privatajn mesaĝojn" -#: mod_muc/mod_muc_room.erl:3023 +#: mod_muc/mod_muc_room.erl:3279 +msgid "Allow visitors to send private messages to" +msgstr "Permesu uzantojn sendi privatajn mesaĝojn al" + +#: mod_muc/mod_muc_room.erl:3290 +msgid "nobody" +msgstr "neniu" + +#: mod_muc/mod_muc_room.erl:3296 msgid "Allow users to query other users" msgstr "Permesu uzantojn informpeti aliajn uzantojn" -#: mod_muc/mod_muc_room.erl:3026 +#: mod_muc/mod_muc_room.erl:3299 msgid "Allow users to send invites" msgstr "Permesu uzantojn sendi invitojn" -#: mod_muc/mod_muc_room.erl:3029 +#: mod_muc/mod_muc_room.erl:3302 msgid "Allow visitors to send status text in presence updates" msgstr "Permesu al vizitantoj sendi statmesaĝon en ĉeest-sciigoj" -#: mod_muc/mod_muc_room.erl:3032 +#: mod_muc/mod_muc_room.erl:3305 msgid "Allow visitors to change nickname" msgstr "Permesu al vizitantoj ŝanĝi siajn kaŝnomojn" -#: mod_muc/mod_muc_room.erl:3038 -msgid "Make room captcha protected" -msgstr "Farigu babilejon protektata per aŭtomata Turingtesto" +#: mod_muc/mod_muc_room.erl:3308 +msgid "Allow visitors to send voice requests" +msgstr "Permesu uzantojn sendi voĉ-petojn" -#: mod_muc/mod_muc_room.erl:3043 +#: mod_muc/mod_muc_room.erl:3311 +msgid "Minimum interval between voice requests (in seconds)" +msgstr "Minimuma intervalo inter voĉ-petoj (je sekundoj)" + +#: mod_muc/mod_muc_room.erl:3317 +msgid "Make room CAPTCHA protected" +msgstr "Farigu babilejon protektata per CAPTCHA" + +#: mod_muc/mod_muc_room.erl:3322 msgid "Exclude Jabber IDs from CAPTCHA challenge" -msgstr "" +msgstr "Esceptu Ĵabber-identigilojn je CAPTCHA-defio" -#: mod_muc/mod_muc_room.erl:3050 +#: mod_muc/mod_muc_room.erl:3329 msgid "Enable logging" msgstr "Ŝaltu protokoladon" -#: mod_muc/mod_muc_room.erl:3058 +#: mod_muc/mod_muc_room.erl:3337 msgid "You need an x:data capable client to configure room" msgstr "Vi bezonas klienton kun x:data-funkcio por agordi la babilejon" -#: mod_muc/mod_muc_room.erl:3390 +#: mod_muc/mod_muc_room.erl:3694 msgid "Number of occupants" msgstr "Nombro de ĉeestantoj" -#: mod_muc/mod_muc_room.erl:3446 +#: mod_muc/mod_muc_room.erl:3750 msgid "private, " msgstr "privata, " -#: mod_muc/mod_muc_room.erl:3529 +#: mod_muc/mod_muc_room.erl:3799 +msgid "Voice request" +msgstr "Voĉ-peto" + +#: mod_muc/mod_muc_room.erl:3803 +msgid "Either approve or decline the voice request." +msgstr "Ĉu aprobu, aŭ malaprobu la voĉ-peton." + +#: mod_muc/mod_muc_room.erl:3809 +msgid "User JID" +msgstr "Uzant-JID" + +#: mod_muc/mod_muc_room.erl:3811 +msgid "Grant voice to this person?" +msgstr "Koncedu voĉon al ĉi-persono?" + +#: mod_muc/mod_muc_room.erl:3960 msgid "~s invites you to the room ~s" msgstr "~s invitas vin al la babilejo ~s" -#: mod_muc/mod_muc_room.erl:3538 +#: mod_muc/mod_muc_room.erl:3969 msgid "the password is" msgstr "la pasvorto estas" @@ -1000,14 +1054,15 @@ msgid "~s's Offline Messages Queue" msgstr "Mesaĝo-atendovico de ~s" #: mod_offline.erl:563 mod_offline_odbc.erl:411 mod_roster.erl:987 -#: mod_roster_odbc.erl:1092 mod_shared_roster.erl:896 -#: mod_shared_roster.erl:1005 web/ejabberd_web_admin.erl:833 +#: mod_roster_odbc.erl:1104 mod_shared_roster.erl:901 +#: mod_shared_roster.erl:1010 mod_shared_roster_odbc.erl:930 +#: mod_shared_roster_odbc.erl:1039 web/ejabberd_web_admin.erl:833 #: web/ejabberd_web_admin.erl:874 web/ejabberd_web_admin.erl:942 #: web/ejabberd_web_admin.erl:978 web/ejabberd_web_admin.erl:1019 -#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1758 -#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1961 -#: web/ejabberd_web_admin.erl:2030 web/ejabberd_web_admin.erl:2134 -#: web/ejabberd_web_admin.erl:2159 web/ejabberd_web_admin.erl:2247 +#: web/ejabberd_web_admin.erl:1508 web/ejabberd_web_admin.erl:1760 +#: web/ejabberd_web_admin.erl:1931 web/ejabberd_web_admin.erl:1963 +#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2135 +#: web/ejabberd_web_admin.erl:2160 web/ejabberd_web_admin.erl:2248 msgid "Submitted" msgstr "Sendita" @@ -1027,8 +1082,9 @@ msgstr "Ĝis" msgid "Packet" msgstr "Pakaĵo" -#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:903 -#: web/ejabberd_web_admin.erl:882 web/ejabberd_web_admin.erl:986 +#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:908 +#: mod_shared_roster_odbc.erl:937 web/ejabberd_web_admin.erl:882 +#: web/ejabberd_web_admin.erl:986 msgid "Delete Selected" msgstr "Forigu elektata(j)n" @@ -1044,252 +1100,250 @@ msgstr "Forigu ĉiujn liverontajn mesaĝojn" msgid "ejabberd SOCKS5 Bytestreams module" msgstr "ejabberd SOCKS5 Bajtfluo modulo" -#: mod_pubsub/mod_pubsub.erl:1119 mod_pubsub/mod_pubsub_odbc.erl:928 +#: mod_pubsub/mod_pubsub.erl:1120 mod_pubsub/mod_pubsub_odbc.erl:929 msgid "Publish-Subscribe" msgstr "Public-Abonado" -#: mod_pubsub/mod_pubsub.erl:1213 mod_pubsub/mod_pubsub_odbc.erl:1024 +#: mod_pubsub/mod_pubsub.erl:1214 mod_pubsub/mod_pubsub_odbc.erl:1025 msgid "ejabberd Publish-Subscribe module" msgstr "ejabberd Public-Abonada modulo" -#: mod_pubsub/mod_pubsub.erl:1496 mod_pubsub/mod_pubsub_odbc.erl:1311 +#: mod_pubsub/mod_pubsub.erl:1497 mod_pubsub/mod_pubsub_odbc.erl:1312 msgid "PubSub subscriber request" msgstr "PubAbo abonpeto" -#: mod_pubsub/mod_pubsub.erl:1498 mod_pubsub/mod_pubsub_odbc.erl:1313 +#: mod_pubsub/mod_pubsub.erl:1499 mod_pubsub/mod_pubsub_odbc.erl:1314 msgid "Choose whether to approve this entity's subscription." msgstr "Elektu ĉu permesi la abonon de ĉi tiu ento" -#: mod_pubsub/mod_pubsub.erl:1504 mod_pubsub/mod_pubsub_odbc.erl:1319 +#: mod_pubsub/mod_pubsub.erl:1505 mod_pubsub/mod_pubsub_odbc.erl:1320 msgid "Node ID" msgstr "Nodo ID" -#: mod_pubsub/mod_pubsub.erl:1509 mod_pubsub/mod_pubsub_odbc.erl:1324 +#: mod_pubsub/mod_pubsub.erl:1510 mod_pubsub/mod_pubsub_odbc.erl:1325 msgid "Subscriber Address" msgstr "Abonanta adreso" -#: mod_pubsub/mod_pubsub.erl:1515 mod_pubsub/mod_pubsub_odbc.erl:1330 +#: mod_pubsub/mod_pubsub.erl:1516 mod_pubsub/mod_pubsub_odbc.erl:1331 msgid "Allow this Jabber ID to subscribe to this pubsub node?" msgstr "Ĉu permesi ĉi tiun Jabber ID aboni al la jena PubAbo-nodo" -#: mod_pubsub/mod_pubsub.erl:3416 mod_pubsub/mod_pubsub_odbc.erl:3229 +#: mod_pubsub/mod_pubsub.erl:3474 mod_pubsub/mod_pubsub_odbc.erl:3287 msgid "Deliver payloads with event notifications" msgstr "Liveru aĵojn de event-sciigoj" -#: mod_pubsub/mod_pubsub.erl:3417 mod_pubsub/mod_pubsub_odbc.erl:3230 +#: mod_pubsub/mod_pubsub.erl:3475 mod_pubsub/mod_pubsub_odbc.erl:3288 msgid "Deliver event notifications" msgstr "Liveru event-sciigojn" -#: mod_pubsub/mod_pubsub.erl:3418 mod_pubsub/mod_pubsub_odbc.erl:3231 +#: mod_pubsub/mod_pubsub.erl:3476 mod_pubsub/mod_pubsub_odbc.erl:3289 msgid "Notify subscribers when the node configuration changes" msgstr "Sciigu abonantoj kiam la agordo de la nodo ŝanĝas" -#: mod_pubsub/mod_pubsub.erl:3419 mod_pubsub/mod_pubsub_odbc.erl:3232 +#: mod_pubsub/mod_pubsub.erl:3477 mod_pubsub/mod_pubsub_odbc.erl:3290 msgid "Notify subscribers when the node is deleted" msgstr "Sciigu abonantoj kiam la nodo estas forigita" -#: mod_pubsub/mod_pubsub.erl:3420 mod_pubsub/mod_pubsub_odbc.erl:3233 +#: mod_pubsub/mod_pubsub.erl:3478 mod_pubsub/mod_pubsub_odbc.erl:3291 msgid "Notify subscribers when items are removed from the node" msgstr "Sciigu abonantoj kiam eroj estas forigita de la nodo" -#: mod_pubsub/mod_pubsub.erl:3421 mod_pubsub/mod_pubsub_odbc.erl:3234 +#: mod_pubsub/mod_pubsub.erl:3479 mod_pubsub/mod_pubsub_odbc.erl:3292 msgid "Persist items to storage" msgstr "Savu erojn en konservado" -#: mod_pubsub/mod_pubsub.erl:3422 mod_pubsub/mod_pubsub_odbc.erl:3235 +#: mod_pubsub/mod_pubsub.erl:3480 mod_pubsub/mod_pubsub_odbc.erl:3293 msgid "A friendly name for the node" msgstr "Kromnomo por ĉi tiu nodo" -#: mod_pubsub/mod_pubsub.erl:3423 mod_pubsub/mod_pubsub_odbc.erl:3236 +#: mod_pubsub/mod_pubsub.erl:3481 mod_pubsub/mod_pubsub_odbc.erl:3294 msgid "Max # of items to persist" msgstr "Maksimuma kiomo de eroj en konservado" -#: mod_pubsub/mod_pubsub.erl:3424 mod_pubsub/mod_pubsub_odbc.erl:3237 +#: mod_pubsub/mod_pubsub.erl:3482 mod_pubsub/mod_pubsub_odbc.erl:3295 msgid "Whether to allow subscriptions" msgstr "Ĉu permesi aboni" -#: mod_pubsub/mod_pubsub.erl:3425 mod_pubsub/mod_pubsub_odbc.erl:3238 +#: mod_pubsub/mod_pubsub.erl:3483 mod_pubsub/mod_pubsub_odbc.erl:3296 msgid "Specify the access model" msgstr "Specifu atingo-modelon" -#: mod_pubsub/mod_pubsub.erl:3428 mod_pubsub/mod_pubsub_odbc.erl:3241 +#: mod_pubsub/mod_pubsub.erl:3486 mod_pubsub/mod_pubsub_odbc.erl:3299 msgid "Roster groups allowed to subscribe" msgstr "Kontaktlist-grupoj kiuj rajtas aboni" -#: mod_pubsub/mod_pubsub.erl:3429 mod_pubsub/mod_pubsub_odbc.erl:3242 +#: mod_pubsub/mod_pubsub.erl:3487 mod_pubsub/mod_pubsub_odbc.erl:3300 msgid "Specify the publisher model" msgstr "Enmetu publikadan modelon" -#: mod_pubsub/mod_pubsub.erl:3431 mod_pubsub/mod_pubsub_odbc.erl:3244 +#: mod_pubsub/mod_pubsub.erl:3489 mod_pubsub/mod_pubsub_odbc.erl:3302 msgid "Purge all items when the relevant publisher goes offline" msgstr "Forigu ĉiujn erojn kiam la rilata publikanto malkonektiĝas" -#: mod_pubsub/mod_pubsub.erl:3432 mod_pubsub/mod_pubsub_odbc.erl:3245 +#: mod_pubsub/mod_pubsub.erl:3490 mod_pubsub/mod_pubsub_odbc.erl:3303 msgid "Specify the event message type" msgstr "Specifu tipo de event-mesaĝo" -#: mod_pubsub/mod_pubsub.erl:3434 mod_pubsub/mod_pubsub_odbc.erl:3247 +#: mod_pubsub/mod_pubsub.erl:3492 mod_pubsub/mod_pubsub_odbc.erl:3305 msgid "Max payload size in bytes" msgstr "Maksimuma aĵo-grando je bajtoj" -#: mod_pubsub/mod_pubsub.erl:3435 mod_pubsub/mod_pubsub_odbc.erl:3248 +#: mod_pubsub/mod_pubsub.erl:3493 mod_pubsub/mod_pubsub_odbc.erl:3306 msgid "When to send the last published item" msgstr "Kiam sendi la laste publicitan eron" -#: mod_pubsub/mod_pubsub.erl:3437 mod_pubsub/mod_pubsub_odbc.erl:3250 +#: mod_pubsub/mod_pubsub.erl:3495 mod_pubsub/mod_pubsub_odbc.erl:3308 msgid "Only deliver notifications to available users" msgstr "Nur liveru sciigojn al konektataj uzantoj" -#: mod_pubsub/mod_pubsub.erl:3438 mod_pubsub/mod_pubsub_odbc.erl:3251 +#: mod_pubsub/mod_pubsub.erl:3496 mod_pubsub/mod_pubsub_odbc.erl:3309 msgid "The collections with which a node is affiliated" msgstr "Aro kun kiu nodo estas filigita" #: mod_register.erl:193 msgid "The CAPTCHA verification has failed" -msgstr "" +msgstr "La CAPTCHA-kontrolado malsukcesis" #: mod_register.erl:220 -#, fuzzy msgid "You need a client that supports x:data and CAPTCHA to register" -msgstr "Vi bezonas klienton kun x:data-funkcio por registri kaŝnomon" +msgstr "" +"Vi bezonas klienton subtenante x:data-funkcio kaj CAPTCHA por registri " +"kaŝnomon" #: mod_register.erl:226 mod_register.erl:265 msgid "Choose a username and password to register with this server" msgstr "Elektu uzantnomon kaj pasvorton por registri je ĉi tiu servilo" -#: mod_register.erl:230 mod_vcard.erl:358 mod_vcard_odbc.erl:336 -#: web/ejabberd_web_admin.erl:1516 web/ejabberd_web_admin.erl:1573 +#: mod_register.erl:230 mod_vcard.erl:364 mod_vcard_odbc.erl:342 +#: web/ejabberd_web_admin.erl:1515 web/ejabberd_web_admin.erl:1572 msgid "User" msgstr "Uzanto" -#: mod_register.erl:251 -#, fuzzy -msgid "Unable to generate a CAPTCHA" -msgstr "Ne eblis krei aŭtomatas turingteston" - #: mod_register.erl:316 mod_register.erl:361 -#, fuzzy msgid "The password is too weak" -msgstr "la pasvorto estas" +msgstr "La pasvorto estas ne sufiĉe forta" #: mod_register.erl:365 msgid "Users are not allowed to register accounts so quickly" msgstr "Ne estas permesata al uzantoj registri tiel rapide" -#: mod_roster.erl:938 mod_roster_odbc.erl:1043 web/ejabberd_web_admin.erl:1699 -#: web/ejabberd_web_admin.erl:1884 web/ejabberd_web_admin.erl:1895 -#: web/ejabberd_web_admin.erl:2218 +#: mod_roster.erl:938 mod_roster_odbc.erl:1055 web/ejabberd_web_admin.erl:1701 +#: web/ejabberd_web_admin.erl:1886 web/ejabberd_web_admin.erl:1897 +#: web/ejabberd_web_admin.erl:2219 msgid "None" msgstr "Nenio" -#: mod_roster.erl:945 mod_roster_odbc.erl:1050 +#: mod_roster.erl:945 mod_roster_odbc.erl:1062 msgid "Subscription" msgstr "Abono" -#: mod_roster.erl:946 mod_roster_odbc.erl:1051 +#: mod_roster.erl:946 mod_roster_odbc.erl:1063 msgid "Pending" msgstr "Atendanta" -#: mod_roster.erl:947 mod_roster_odbc.erl:1052 +#: mod_roster.erl:947 mod_roster_odbc.erl:1064 msgid "Groups" msgstr "Grupoj" -#: mod_roster.erl:974 mod_roster_odbc.erl:1079 +#: mod_roster.erl:974 mod_roster_odbc.erl:1091 msgid "Validate" msgstr "Validigu" -#: mod_roster.erl:982 mod_roster_odbc.erl:1087 +#: mod_roster.erl:982 mod_roster_odbc.erl:1099 msgid "Remove" msgstr "Forigu" -#: mod_roster.erl:985 mod_roster_odbc.erl:1090 +#: mod_roster.erl:985 mod_roster_odbc.erl:1102 msgid "Roster of " msgstr "Kontaktlisto de " -#: mod_roster.erl:988 mod_roster_odbc.erl:1093 mod_shared_roster.erl:897 -#: mod_shared_roster.erl:1006 web/ejabberd_web_admin.erl:834 +#: mod_roster.erl:988 mod_roster_odbc.erl:1105 mod_shared_roster.erl:902 +#: mod_shared_roster.erl:1011 mod_shared_roster_odbc.erl:931 +#: mod_shared_roster_odbc.erl:1040 web/ejabberd_web_admin.erl:834 #: web/ejabberd_web_admin.erl:875 web/ejabberd_web_admin.erl:943 #: web/ejabberd_web_admin.erl:979 web/ejabberd_web_admin.erl:1020 -#: web/ejabberd_web_admin.erl:1510 web/ejabberd_web_admin.erl:1759 -#: web/ejabberd_web_admin.erl:1930 web/ejabberd_web_admin.erl:2135 -#: web/ejabberd_web_admin.erl:2160 +#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1761 +#: web/ejabberd_web_admin.erl:1932 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2161 msgid "Bad format" msgstr "Malĝusta formo" -#: mod_roster.erl:995 mod_roster_odbc.erl:1100 +#: mod_roster.erl:995 mod_roster_odbc.erl:1112 msgid "Add Jabber ID" msgstr "Aldonu Jabber ID" -#: mod_roster.erl:1094 mod_roster_odbc.erl:1199 +#: mod_roster.erl:1094 mod_roster_odbc.erl:1211 msgid "Roster" msgstr "Kontaktlisto" -#: mod_shared_roster.erl:852 mod_shared_roster.erl:894 -#: mod_shared_roster.erl:1002 +#: mod_shared_roster.erl:857 mod_shared_roster.erl:899 +#: mod_shared_roster.erl:1007 mod_shared_roster_odbc.erl:886 +#: mod_shared_roster_odbc.erl:928 mod_shared_roster_odbc.erl:1036 msgid "Shared Roster Groups" msgstr "Komuna Kontaktlist-grupo" -#: mod_shared_roster.erl:890 web/ejabberd_web_admin.erl:1366 -#: web/ejabberd_web_admin.erl:2460 +#: mod_shared_roster.erl:895 mod_shared_roster_odbc.erl:924 +#: web/ejabberd_web_admin.erl:1365 web/ejabberd_web_admin.erl:2461 msgid "Add New" msgstr "Aldonu novan" -#: mod_shared_roster.erl:973 +#: mod_shared_roster.erl:978 mod_shared_roster_odbc.erl:1007 msgid "Name:" msgstr "Nomo:" -#: mod_shared_roster.erl:978 +#: mod_shared_roster.erl:983 mod_shared_roster_odbc.erl:1012 msgid "Description:" msgstr "Priskribo:" -#: mod_shared_roster.erl:986 +#: mod_shared_roster.erl:991 mod_shared_roster_odbc.erl:1020 msgid "Members:" msgstr "Membroj:" -#: mod_shared_roster.erl:994 +#: mod_shared_roster.erl:999 mod_shared_roster_odbc.erl:1028 msgid "Displayed Groups:" msgstr "Montrataj grupoj:" -#: mod_shared_roster.erl:1003 +#: mod_shared_roster.erl:1008 mod_shared_roster_odbc.erl:1037 msgid "Group " msgstr "Grupo " -#: mod_shared_roster.erl:1012 web/ejabberd_web_admin.erl:840 -#: web/ejabberd_web_admin.erl:884 web/ejabberd_web_admin.erl:949 -#: web/ejabberd_web_admin.erl:1026 web/ejabberd_web_admin.erl:2015 +#: mod_shared_roster.erl:1017 mod_shared_roster_odbc.erl:1046 +#: web/ejabberd_web_admin.erl:840 web/ejabberd_web_admin.erl:884 +#: web/ejabberd_web_admin.erl:949 web/ejabberd_web_admin.erl:1026 +#: web/ejabberd_web_admin.erl:2017 msgid "Submit" msgstr "Sendu" -#: mod_vcard.erl:165 mod_vcard_ldap.erl:237 mod_vcard_odbc.erl:129 +#: mod_vcard.erl:165 mod_vcard_ldap.erl:238 mod_vcard_odbc.erl:129 msgid "Erlang Jabber Server" msgstr "Erlang-a Jabber-Servilo" -#: mod_vcard.erl:358 mod_vcard.erl:472 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:448 +#: mod_vcard.erl:364 mod_vcard.erl:478 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:454 msgid "Birthday" msgstr "Naskiĝtago" -#: mod_vcard.erl:358 mod_vcard.erl:474 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:450 +#: mod_vcard.erl:364 mod_vcard.erl:480 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:456 msgid "City" msgstr "Urbo" -#: mod_vcard.erl:358 mod_vcard.erl:473 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:449 +#: mod_vcard.erl:364 mod_vcard.erl:479 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:455 msgid "Country" msgstr "Lando" -#: mod_vcard.erl:358 mod_vcard.erl:475 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:451 +#: mod_vcard.erl:364 mod_vcard.erl:481 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:457 msgid "Email" msgstr "Retpoŝto" -#: mod_vcard.erl:358 mod_vcard.erl:470 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:446 +#: mod_vcard.erl:364 mod_vcard.erl:476 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:452 msgid "Family Name" msgstr "Lasta Nomo" -#: mod_vcard.erl:358 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_odbc.erl:342 msgid "" "Fill in the form to search for any matching Jabber User (Add * to the end of " "field to match substring)" @@ -1297,52 +1351,52 @@ msgstr "" "Kompletigu la formon por serĉi rekonata Jabber-uzanto (Aldonu * je la fino " "de la kampo por rekoni subĉenon" -#: mod_vcard.erl:358 mod_vcard.erl:467 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:443 +#: mod_vcard.erl:364 mod_vcard.erl:473 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:449 msgid "Full Name" msgstr "Plena Nomo" -#: mod_vcard.erl:358 mod_vcard.erl:469 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:445 +#: mod_vcard.erl:364 mod_vcard.erl:475 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:451 msgid "Middle Name" msgstr "Meza Nomo" -#: mod_vcard.erl:358 mod_vcard.erl:468 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:444 web/ejabberd_web_admin.erl:2004 +#: mod_vcard.erl:364 mod_vcard.erl:474 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:450 web/ejabberd_web_admin.erl:2006 msgid "Name" msgstr "Nomo" -#: mod_vcard.erl:358 mod_vcard.erl:476 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:452 +#: mod_vcard.erl:364 mod_vcard.erl:482 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:458 msgid "Organization Name" msgstr "Organiz-nomo" -#: mod_vcard.erl:358 mod_vcard.erl:477 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:453 +#: mod_vcard.erl:364 mod_vcard.erl:483 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:459 msgid "Organization Unit" msgstr "Organiz-parto" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "Search users in " msgstr "Serĉu uzantojn en " -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "You need an x:data capable client to search" msgstr "Vi bezonas klienton kun x:data-funkcio por serĉado" -#: mod_vcard.erl:383 mod_vcard_ldap.erl:483 mod_vcard_odbc.erl:361 +#: mod_vcard.erl:389 mod_vcard_ldap.erl:487 mod_vcard_odbc.erl:367 msgid "vCard User Search" msgstr "Serĉado de vizitkartoj" -#: mod_vcard.erl:439 mod_vcard_ldap.erl:537 mod_vcard_odbc.erl:415 +#: mod_vcard.erl:445 mod_vcard_ldap.erl:541 mod_vcard_odbc.erl:421 msgid "ejabberd vCard module" msgstr "ejabberd vCard-modulo" -#: mod_vcard.erl:463 mod_vcard_ldap.erl:547 mod_vcard_odbc.erl:439 +#: mod_vcard.erl:469 mod_vcard_ldap.erl:551 mod_vcard_odbc.erl:445 msgid "Search Results for " msgstr "Serĉ-rezultoj de " -#: mod_vcard_ldap.erl:458 +#: mod_vcard_ldap.erl:462 msgid "Fill in fields to search for any matching Jabber User" msgstr "Kompletigu la formon por serĉi rekonata Jabber-uzanto" @@ -1403,7 +1457,7 @@ msgstr "Montru ordinaran tabelon" msgid "Show Integral Table" msgstr "Montru integran tabelon" -#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1937 +#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1939 msgid "Statistics" msgstr "Statistikoj" @@ -1415,116 +1469,116 @@ msgstr "Ne trovita" msgid "Node not found" msgstr "Nodo ne trovita" -#: web/ejabberd_web_admin.erl:1461 +#: web/ejabberd_web_admin.erl:1460 msgid "Host" msgstr "Gastigo" -#: web/ejabberd_web_admin.erl:1462 +#: web/ejabberd_web_admin.erl:1461 msgid "Registered Users" msgstr "Registritaj uzantoj" -#: web/ejabberd_web_admin.erl:1574 +#: web/ejabberd_web_admin.erl:1573 msgid "Offline Messages" msgstr "Liverontaj mesaĝoj" -#: web/ejabberd_web_admin.erl:1575 web/ejabberd_web_admin.erl:1765 +#: web/ejabberd_web_admin.erl:1574 web/ejabberd_web_admin.erl:1767 msgid "Last Activity" msgstr "Lasta aktiveco" -#: web/ejabberd_web_admin.erl:1657 web/ejabberd_web_admin.erl:1673 +#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 msgid "Registered Users:" msgstr "Registritaj uzantoj:" -#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 -#: web/ejabberd_web_admin.erl:2191 +#: web/ejabberd_web_admin.erl:1661 web/ejabberd_web_admin.erl:1677 +#: web/ejabberd_web_admin.erl:2192 msgid "Online Users:" msgstr "Konektataj uzantoj:" -#: web/ejabberd_web_admin.erl:1661 +#: web/ejabberd_web_admin.erl:1663 msgid "Outgoing s2s Connections:" msgstr "Elirantaj s-al-s-konektoj:" -#: web/ejabberd_web_admin.erl:1663 +#: web/ejabberd_web_admin.erl:1665 msgid "Outgoing s2s Servers:" msgstr "Elirantaj s-al-s-serviloj" -#: web/ejabberd_web_admin.erl:1732 web/mod_register_web.erl:175 +#: web/ejabberd_web_admin.erl:1734 web/mod_register_web.erl:175 #: web/mod_register_web.erl:372 web/mod_register_web.erl:381 #: web/mod_register_web.erl:411 msgid "Change Password" msgstr "Ŝanĝu pasvorton" -#: web/ejabberd_web_admin.erl:1756 +#: web/ejabberd_web_admin.erl:1758 msgid "User " msgstr "Uzanto " -#: web/ejabberd_web_admin.erl:1763 +#: web/ejabberd_web_admin.erl:1765 msgid "Connected Resources:" msgstr "Konektataj risurcoj:" -#: web/ejabberd_web_admin.erl:1764 web/mod_register_web.erl:227 +#: web/ejabberd_web_admin.erl:1766 web/mod_register_web.erl:227 #: web/mod_register_web.erl:519 msgid "Password:" msgstr "Pasvorto:" -#: web/ejabberd_web_admin.erl:1826 +#: web/ejabberd_web_admin.erl:1828 msgid "No Data" msgstr "Neniu datumo" -#: web/ejabberd_web_admin.erl:1904 +#: web/ejabberd_web_admin.erl:1906 msgid "Nodes" msgstr "Nodoj" -#: web/ejabberd_web_admin.erl:1927 web/ejabberd_web_admin.erl:1949 +#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1951 msgid "Node " msgstr "Nodo " -#: web/ejabberd_web_admin.erl:1936 +#: web/ejabberd_web_admin.erl:1938 msgid "Listened Ports" msgstr "Atentataj pordoj" -#: web/ejabberd_web_admin.erl:1938 web/ejabberd_web_admin.erl:2259 -#: web/ejabberd_web_admin.erl:2447 +#: web/ejabberd_web_admin.erl:1940 web/ejabberd_web_admin.erl:2260 +#: web/ejabberd_web_admin.erl:2448 msgid "Update" msgstr "Ĝisdatigu" -#: web/ejabberd_web_admin.erl:1941 web/ejabberd_web_admin.erl:2568 +#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2569 msgid "Restart" msgstr "Restartu" -#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2570 +#: web/ejabberd_web_admin.erl:1945 web/ejabberd_web_admin.erl:2571 msgid "Stop" msgstr "Haltigu" -#: web/ejabberd_web_admin.erl:1957 +#: web/ejabberd_web_admin.erl:1959 msgid "RPC Call Error" msgstr "Eraro de RPC-alvoko" -#: web/ejabberd_web_admin.erl:1998 +#: web/ejabberd_web_admin.erl:2000 msgid "Database Tables at " msgstr "Datumbaz-tabeloj je " -#: web/ejabberd_web_admin.erl:2005 +#: web/ejabberd_web_admin.erl:2007 msgid "Storage Type" msgstr "Konserv-tipo" -#: web/ejabberd_web_admin.erl:2006 +#: web/ejabberd_web_admin.erl:2008 msgid "Elements" msgstr "Eroj" -#: web/ejabberd_web_admin.erl:2007 +#: web/ejabberd_web_admin.erl:2009 msgid "Memory" msgstr "Memoro" -#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2032 web/ejabberd_web_admin.erl:2137 msgid "Error" msgstr "Eraro" -#: web/ejabberd_web_admin.erl:2033 +#: web/ejabberd_web_admin.erl:2034 msgid "Backup of " msgstr "Sekurkopio de " -#: web/ejabberd_web_admin.erl:2035 +#: web/ejabberd_web_admin.erl:2036 msgid "" "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 " @@ -1534,181 +1588,181 @@ msgstr "" "Se vi uzas la ODBC-modulon, vi ankaŭ devas sekurkopii tiujn SQL-datumbazoj " "aparte." -#: web/ejabberd_web_admin.erl:2040 +#: web/ejabberd_web_admin.erl:2041 msgid "Store binary backup:" msgstr "Konservu duuman sekurkopion:" -#: web/ejabberd_web_admin.erl:2044 web/ejabberd_web_admin.erl:2051 -#: web/ejabberd_web_admin.erl:2059 web/ejabberd_web_admin.erl:2066 -#: web/ejabberd_web_admin.erl:2073 web/ejabberd_web_admin.erl:2080 -#: web/ejabberd_web_admin.erl:2087 web/ejabberd_web_admin.erl:2095 -#: web/ejabberd_web_admin.erl:2102 web/ejabberd_web_admin.erl:2109 +#: web/ejabberd_web_admin.erl:2045 web/ejabberd_web_admin.erl:2052 +#: web/ejabberd_web_admin.erl:2060 web/ejabberd_web_admin.erl:2067 +#: web/ejabberd_web_admin.erl:2074 web/ejabberd_web_admin.erl:2081 +#: web/ejabberd_web_admin.erl:2088 web/ejabberd_web_admin.erl:2096 +#: web/ejabberd_web_admin.erl:2103 web/ejabberd_web_admin.erl:2110 msgid "OK" msgstr "Bone" -#: web/ejabberd_web_admin.erl:2047 +#: web/ejabberd_web_admin.erl:2048 msgid "Restore binary backup immediately:" msgstr "Restaŭrigu duuman sekurkopion tuj:" -#: web/ejabberd_web_admin.erl:2055 +#: web/ejabberd_web_admin.erl:2056 msgid "" "Restore binary backup after next ejabberd restart (requires less memory):" msgstr "Restaŭrigu duuman sekurkopion post sekvonta ejabberd-restarto" -#: web/ejabberd_web_admin.erl:2062 +#: web/ejabberd_web_admin.erl:2063 msgid "Store plain text backup:" msgstr "Skribu sekurkopion en plata tekstdosiero" -#: web/ejabberd_web_admin.erl:2069 +#: web/ejabberd_web_admin.erl:2070 msgid "Restore plain text backup immediately:" msgstr "Restaŭrigu sekurkopion el plata tekstdosiero tuj" -#: web/ejabberd_web_admin.erl:2076 +#: web/ejabberd_web_admin.erl:2077 msgid "Import users data from a PIEFXIS file (XEP-0227):" msgstr "Importu uzanto-datumojn de PIEFXIS dosiero (XEP-0227):" -#: web/ejabberd_web_admin.erl:2083 +#: web/ejabberd_web_admin.erl:2084 msgid "Export data of all users in the server to PIEFXIS files (XEP-0227):" msgstr "" "Eksportu datumojn de ĉiuj uzantoj en servilo al PIEFXIS dosieroj (XEP-0227):" -#: web/ejabberd_web_admin.erl:2090 +#: web/ejabberd_web_admin.erl:2091 msgid "Export data of users in a host to PIEFXIS files (XEP-0227):" msgstr "Eksportu datumoj de uzantoj en gastigo al PIEFXIS dosieroj (XEP-0227):" -#: web/ejabberd_web_admin.erl:2098 +#: web/ejabberd_web_admin.erl:2099 msgid "Import user data from jabberd14 spool file:" msgstr "Importu uzantojn de jabberd14-uzantdosieroj" -#: web/ejabberd_web_admin.erl:2105 +#: web/ejabberd_web_admin.erl:2106 msgid "Import users data from jabberd14 spool directory:" msgstr "Importu uzantojn de jabberd14-uzantdosieroj" -#: web/ejabberd_web_admin.erl:2131 +#: web/ejabberd_web_admin.erl:2132 msgid "Listened Ports at " msgstr "Atentataj pordoj je " -#: web/ejabberd_web_admin.erl:2156 +#: web/ejabberd_web_admin.erl:2157 msgid "Modules at " msgstr "Moduloj je " -#: web/ejabberd_web_admin.erl:2182 +#: web/ejabberd_web_admin.erl:2183 msgid "Statistics of ~p" msgstr "Statistikoj de ~p" -#: web/ejabberd_web_admin.erl:2185 +#: web/ejabberd_web_admin.erl:2186 msgid "Uptime:" msgstr "Daŭro de funkciado" -#: web/ejabberd_web_admin.erl:2188 +#: web/ejabberd_web_admin.erl:2189 msgid "CPU Time:" msgstr "CPU-tempo" -#: web/ejabberd_web_admin.erl:2194 +#: web/ejabberd_web_admin.erl:2195 msgid "Transactions Committed:" msgstr "Transakcioj enmetitaj" -#: web/ejabberd_web_admin.erl:2197 +#: web/ejabberd_web_admin.erl:2198 msgid "Transactions Aborted:" msgstr "Transakcioj nuligitaj" -#: web/ejabberd_web_admin.erl:2200 +#: web/ejabberd_web_admin.erl:2201 msgid "Transactions Restarted:" msgstr "Transakcioj restartitaj" -#: web/ejabberd_web_admin.erl:2203 +#: web/ejabberd_web_admin.erl:2204 msgid "Transactions Logged:" msgstr "Transakcioj protokolitaj" -#: web/ejabberd_web_admin.erl:2245 +#: web/ejabberd_web_admin.erl:2246 msgid "Update " msgstr "Ĝisdatigu " -#: web/ejabberd_web_admin.erl:2253 +#: web/ejabberd_web_admin.erl:2254 msgid "Update plan" msgstr "Ĝisdatigo-plano" -#: web/ejabberd_web_admin.erl:2254 +#: web/ejabberd_web_admin.erl:2255 msgid "Modified modules" msgstr "Ĝisdatigitaj moduloj" -#: web/ejabberd_web_admin.erl:2255 +#: web/ejabberd_web_admin.erl:2256 msgid "Update script" msgstr "Ĝisdatigo-skripto" -#: web/ejabberd_web_admin.erl:2256 +#: web/ejabberd_web_admin.erl:2257 msgid "Low level update script" msgstr "Bazanivela ĝisdatigo-skripto" -#: web/ejabberd_web_admin.erl:2257 +#: web/ejabberd_web_admin.erl:2258 msgid "Script check" msgstr "Skript-kontrolo" -#: web/ejabberd_web_admin.erl:2425 +#: web/ejabberd_web_admin.erl:2426 msgid "Port" msgstr "Pordo" -#: web/ejabberd_web_admin.erl:2426 +#: web/ejabberd_web_admin.erl:2427 msgid "IP" msgstr "IP" -#: web/ejabberd_web_admin.erl:2427 +#: web/ejabberd_web_admin.erl:2428 msgid "Protocol" msgstr "Protokolo" -#: web/ejabberd_web_admin.erl:2428 web/ejabberd_web_admin.erl:2555 +#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 msgid "Module" msgstr "Modulo" -#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 +#: web/ejabberd_web_admin.erl:2430 web/ejabberd_web_admin.erl:2557 msgid "Options" msgstr "Elektebloj" -#: web/ejabberd_web_admin.erl:2449 +#: web/ejabberd_web_admin.erl:2450 msgid "Delete" msgstr "Forigu" -#: web/ejabberd_web_admin.erl:2578 +#: web/ejabberd_web_admin.erl:2579 msgid "Start" msgstr "Startu" #: web/mod_register_web.erl:104 msgid "Your Jabber account was successfully created." -msgstr "" +msgstr "Via Ĵabber-konto estis sukcese kreata." #: web/mod_register_web.erl:107 msgid "There was an error creating the account: " -msgstr "" +msgstr "Estis eraro dum kreado de la konto:" #: web/mod_register_web.erl:115 msgid "Your Jabber account was successfully deleted." -msgstr "" +msgstr "Via Ĵabber-konto estas sukcese forigita." #: web/mod_register_web.erl:118 msgid "There was an error deleting the account: " -msgstr "" +msgstr "Estis eraro dum forigado de la konto:" #: web/mod_register_web.erl:128 msgid "The password of your Jabber account was successfully changed." -msgstr "" +msgstr "La pasvorto de via Ĵabber-konto estas sukcese ŝanĝata." #: web/mod_register_web.erl:131 msgid "There was an error changing the password: " -msgstr "" +msgstr "Estis eraro dum ŝanĝi de la pasvortro:" #: web/mod_register_web.erl:163 web/mod_register_web.erl:172 msgid "Jabber Account Registration" -msgstr "" +msgstr "Ĵabber-konto registrado" #: web/mod_register_web.erl:174 web/mod_register_web.erl:192 #: web/mod_register_web.erl:201 msgid "Register a Jabber account" -msgstr "" +msgstr "Registru Ĵabber-konton" #: web/mod_register_web.erl:176 web/mod_register_web.erl:493 #: web/mod_register_web.erl:502 msgid "Unregister a Jabber account" -msgstr "" +msgstr "Malregistru Ĵabber-konton" #: web/mod_register_web.erl:203 msgid "" @@ -1716,42 +1770,47 @@ msgid "" "(Jabber IDentifier) will be of the form: username@server. Please read " "carefully the instructions to fill correctly the fields." msgstr "" +"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. " #: web/mod_register_web.erl:212 web/mod_register_web.erl:386 #: web/mod_register_web.erl:509 -#, fuzzy msgid "Username:" -msgstr "IRC-kaŝnomo" +msgstr "Uzantnomo" #: web/mod_register_web.erl:217 msgid "This is case insensitive: macbeth is the same that MacBeth and Macbeth." -msgstr "" +msgstr "Uskleco ne signifas: macbeth estas la sama ol MacBeth kaj Macbeth." #: web/mod_register_web.erl:218 msgid "Characters not allowed:" -msgstr "" +msgstr "Karaktroj ne permesata:" #: web/mod_register_web.erl:222 web/mod_register_web.erl:391 #: web/mod_register_web.erl:514 -#, fuzzy msgid "Server:" -msgstr "Servilo ~b" +msgstr "Servilo:" #: web/mod_register_web.erl:232 msgid "" "Don't tell your password to anybody, not even the administrators of the " "Jabber server." msgstr "" +"Ne donu vian pasvorton al iun ajn, eĉ ne al la administrantoj de la Ĵabber-" +"servilo." #: web/mod_register_web.erl:234 msgid "You can later change your password using a Jabber client." -msgstr "" +msgstr "Poste vi povas ŝanĝi vian pasvorton per Ĵabber-kliento." #: web/mod_register_web.erl:235 msgid "" "Some Jabber clients can store your password in your computer. Use that " "feature only if you trust your computer is safe." msgstr "" +"Kelkaj Ĵabber-klientoj povas memori vian pasvorton je via komputilo. Nur uzu " +"tiun eblon se vi fidas ke via komputilo estas sekura." #: web/mod_register_web.erl:237 msgid "" @@ -1759,34 +1818,33 @@ msgid "" "Jabber there isn't an automated way to recover your password if you forget " "it." msgstr "" +"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." #: web/mod_register_web.erl:242 web/mod_register_web.erl:406 -#, fuzzy msgid "Password Verification:" -msgstr "Pasvortkontrolo" +msgstr "Pasvortkontrolo:" #: web/mod_register_web.erl:250 -#, fuzzy msgid "Register" -msgstr "Kontaktlisto" +msgstr "Registru" #: web/mod_register_web.erl:396 -#, fuzzy msgid "Old Password:" -msgstr "Pasvorto:" +msgstr "Malnova Pasvorto:" #: web/mod_register_web.erl:401 -#, fuzzy msgid "New Password:" -msgstr "Pasvorto:" +msgstr "Nova Pasvorto:" #: web/mod_register_web.erl:504 msgid "This page allows to unregister a Jabber account in this Jabber server." -msgstr "" +msgstr "Jena pagxo ebligas malregistri Jxabber-konton je ĉi-servilo." #: web/mod_register_web.erl:524 msgid "Unregister" -msgstr "" +msgstr "Malregistru" #, fuzzy #~ msgid "Captcha test failed" diff --git a/src/msgs/es.msg b/src/msgs/es.msg index 17598c45a..904a0de8a 100644 --- a/src/msgs/es.msg +++ b/src/msgs/es.msg @@ -14,13 +14,15 @@ {"Administrator privileges required","Se necesita privilegios de administrador"}. {"A friendly name for the node","Un nombre sencillo para el nodo"}. {"All activity","Toda la actividad"}. -{"Allow this Jabber ID to subscribe to this pubsub node?","¿Deseas permitir a este JabberID que se subscriba a este nodo PubSub?"}. +{"Allow this Jabber ID to subscribe to this pubsub node?","¿Deseas permitir a este Jabber ID que se subscriba a este nodo PubSub?"}. {"Allow users to change the subject","Permitir a los usuarios cambiar el asunto"}. {"Allow users to query other users","Permitir a los usuarios consultar a otros usuarios"}. {"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 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 voice requests","Permitir a los visitantes enviar peticiones de voz"}. {"All Users","Todos los usuarios"}. {"Announcements","Anuncios"}. {"anyone","cualquiera"}. @@ -75,6 +77,7 @@ {"Dump Backup to Text File at ","Exporta copia de seguridad a fichero de texto en "}. {"Dump to Text File","Exportar a fichero de texto"}. {"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 MUC module","Módulo de MUC para ejabberd"}. {"ejabberd Publish-Subscribe module","Módulo de Publicar-Subscribir de ejabberd"}. @@ -98,8 +101,10 @@ {"Erlang Jabber Server","Servidor Jabber en Erlang"}. {"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\"}]."}. +{"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 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"}. {"February","febrero"}. {"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 Password","Ver contraseña de usuario"}. {"Get User Statistics","Ver estadísticas de usuario"}. +{"Grant voice to this person?","¿Conceder voz a esta persona?"}. {"Group ","Grupo "}. {"Groups","Grupos"}. {"has been banned","ha sido bloqueado"}. @@ -168,7 +174,7 @@ {"List of modules to start","Lista de módulos a iniciar"}. {"Low level update script","Script de actualización a bajo nivel"}. {"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 moderated","Sala moderada"}. {"Make room password protected","Proteger la sala con contraseña"}. @@ -185,6 +191,7 @@ {"Memory","Memoria"}. {"Message body","Cuerpo del mensaje"}. {"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"}. {"moderators only","solo moderadores"}. {"Modified modules","Módulos modificados"}. @@ -199,6 +206,7 @@ {"Nickname","Apodo"}. {"Nickname Registration at ","Registro del apodo en "}. {"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 Data","Sin datos"}. {"Node ID","Nodo ID"}. @@ -227,6 +235,7 @@ {"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 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 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"}. @@ -250,6 +259,7 @@ {"Persist items to storage","Persistir elementos al almacenar"}. {"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, wait for a while before sending new voice request","Por favor, espera un poco antes de enviar otra petición de voz"}. {"Pong","Pong"}. {"Port ~b","Puerto ~b"}. {"Port","Puerto"}. @@ -338,7 +348,7 @@ {"Sunday","domingo"}. {"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"}. -{"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 collections with which a node is affiliated","Las colecciones a las que un nodo está afiliado"}. {"the password is","la contraseña es"}. @@ -357,6 +367,7 @@ {"Thursday","jueves"}. {"Time delay","Retraso temporal"}. {"Time","Fecha"}. +{"Too many CAPTCHA requests","Demasiadas peticiones de CAPTCHA"}. {"To","Para"}. {"To ~s","A ~s"}. {"Traffic rate limit is exceeded","Se ha exedido el límite de tráfico"}. @@ -365,7 +376,6 @@ {"Transactions Logged:","Transacciones registradas:"}. {"Transactions Restarted:","Transacciones reiniciadas:"}. {"Tuesday","martes"}. -{"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"}. {"Unregister a Jabber account","Borrar una cuenta Jabber"}. @@ -378,6 +388,7 @@ {"Update script","Script de actualización"}. {"Uptime:","Tiempo desde el inicio:"}. {"Use of STARTTLS required","Es obligatorio usar STARTTLS"}. +{"User JID","Jabber ID del usuario"}. {"User Management","Administración de usuarios"}. {"Username:","Nombre de usuario:"}. {"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"}. {"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"}. +{"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"}. {"When to send the last published item","Cuando enviar el último elemento publicado"}. {"Whether to allow subscriptions","Permitir subscripciones"}. diff --git a/src/msgs/es.po b/src/msgs/es.po index b298f7704..b5929edd3 100644 --- a/src/msgs/es.po +++ b/src/msgs/es.po @@ -3,7 +3,8 @@ msgid "" msgstr "" "Project-Id-Version: es\n" -"PO-Revision-Date: 2010-11-19 13:40+0100\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2012-04-15 00:10+0100\n" "Last-Translator: Badlop \n" "Language-Team: \n" "Language: \n" @@ -21,11 +22,11 @@ msgstr "Es obligatorio usar STARTTLS" msgid "No resource provided" msgstr "No se ha proporcionado recurso" -#: ejabberd_c2s.erl:1149 +#: ejabberd_c2s.erl:1197 msgid "Replaced by new connection" msgstr "Reemplazado por una nueva conexión" -#: ejabberd_c2s.erl:1837 +#: ejabberd_c2s.erl:1885 msgid "Your active privacy list has denied the routing of this stanza." msgstr "Tu lista de privacidad activa ha denegado el encío de este paquete." @@ -47,8 +48,8 @@ msgid "CAPTCHA web page" msgstr "Página web de CAPTCHA" #: ejabberd_captcha.erl:307 -msgid "The captcha is valid." -msgstr "El captcha es válido." +msgid "The CAPTCHA is valid." +msgstr "El CAPTCHA es válido." #: mod_adhoc.erl:95 mod_adhoc.erl:125 mod_adhoc.erl:143 mod_adhoc.erl:161 msgid "Commands" @@ -62,65 +63,68 @@ msgstr "Ping" msgid "Pong" msgstr "Pong" -#: mod_announce.erl:506 +#: mod_announce.erl:507 mod_announce_odbc.erl:499 msgid "Really delete message of the day?" msgstr "¿Está seguro de quere borrar el mensaje del dia?" -#: mod_announce.erl:514 mod_configure.erl:1083 mod_configure.erl:1128 +#: mod_announce.erl:515 mod_announce_odbc.erl:507 mod_configure.erl:1083 +#: mod_configure.erl:1128 msgid "Subject" msgstr "Asunto" -#: mod_announce.erl:519 mod_configure.erl:1088 mod_configure.erl:1133 +#: mod_announce.erl:520 mod_announce_odbc.erl:512 mod_configure.erl:1088 +#: mod_configure.erl:1133 msgid "Message body" msgstr "Cuerpo del mensaje" -#: mod_announce.erl:599 +#: mod_announce.erl:600 mod_announce_odbc.erl:592 msgid "No body provided for announce message" msgstr "No se ha proporcionado cuerpo de mensaje para el anuncio" -#: mod_announce.erl:634 +#: mod_announce.erl:635 mod_announce_odbc.erl:627 msgid "Announcements" msgstr "Anuncios" -#: mod_announce.erl:636 +#: mod_announce.erl:637 mod_announce_odbc.erl:629 msgid "Send announcement to all users" msgstr "Enviar anuncio a todos los usuarios" -#: mod_announce.erl:638 +#: mod_announce.erl:639 mod_announce_odbc.erl:631 msgid "Send announcement to all users on all hosts" msgstr "Enviar anuncio a todos los usuarios en todos los dominios" -#: mod_announce.erl:640 +#: mod_announce.erl:641 mod_announce_odbc.erl:633 msgid "Send announcement to all online users" msgstr "Enviar anuncio a todos los usuarios conectados" -#: mod_announce.erl:642 mod_configure.erl:1078 mod_configure.erl:1123 +#: mod_announce.erl:643 mod_announce_odbc.erl:635 mod_configure.erl:1078 +#: mod_configure.erl:1123 msgid "Send announcement to all online users on all hosts" msgstr "Enviar anuncio a todos los usuarios conectados en todos los dominios" -#: mod_announce.erl:644 +#: mod_announce.erl:645 mod_announce_odbc.erl:637 msgid "Set message of the day and send to online users" msgstr "Poner mensaje del dia y enviar a todos los usuarios conectados" -#: mod_announce.erl:646 +#: mod_announce.erl:647 mod_announce_odbc.erl:639 msgid "Set message of the day on all hosts and send to online users" msgstr "" "Poner mensaje del día en todos los dominios y enviar a los usuarios " "conectados" -#: mod_announce.erl:648 +#: mod_announce.erl:649 mod_announce_odbc.erl:641 msgid "Update message of the day (don't send)" msgstr "Actualizar mensaje del dia, pero no enviarlo" -#: mod_announce.erl:650 +#: mod_announce.erl:651 mod_announce_odbc.erl:643 msgid "Update message of the day on all hosts (don't send)" msgstr "Actualizar el mensaje del día en todos los dominos (pero no enviarlo)" -#: mod_announce.erl:652 +#: mod_announce.erl:653 mod_announce_odbc.erl:645 msgid "Delete message of the day" msgstr "Borrar mensaje del dia" -#: mod_announce.erl:654 +#: mod_announce.erl:655 mod_announce_odbc.erl:647 msgid "Delete message of the day on all hosts" msgstr "Borrar el mensaje del día en todos los dominios" @@ -129,7 +133,7 @@ msgstr "Borrar el mensaje del día en todos los dominios" msgid "Configuration" msgstr "Configuración" -#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1934 +#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1936 msgid "Database" msgstr "Base de datos" @@ -141,7 +145,7 @@ msgstr "Iniciar módulos" msgid "Stop Modules" msgstr "Detener módulos" -#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1935 +#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1937 msgid "Backup" msgstr "Guardar copia de seguridad" @@ -170,7 +174,7 @@ msgid "Shut Down Service" msgstr "Detener el servicio" #: mod_configure.erl:145 mod_configure.erl:518 mod_configure.erl:1197 -#: web/ejabberd_web_admin.erl:1528 +#: web/ejabberd_web_admin.erl:1527 msgid "Add User" msgstr "Añadir usuario" @@ -222,7 +226,7 @@ msgid "User Management" msgstr "Administración de usuarios" #: mod_configure.erl:500 web/ejabberd_web_admin.erl:1058 -#: web/ejabberd_web_admin.erl:1463 +#: web/ejabberd_web_admin.erl:1462 msgid "Online Users" msgstr "Usuarios conectados" @@ -234,15 +238,15 @@ msgstr "Todos los usuarios" msgid "Outgoing s2s Connections" msgstr "Conexiones S2S salientes" -#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1905 +#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1907 msgid "Running Nodes" msgstr "Nodos funcionando" -#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1907 +#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1909 msgid "Stopped Nodes" msgstr "Nodos detenidos" -#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1951 +#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1953 msgid "Modules" msgstr "Módulos" @@ -373,15 +377,15 @@ msgstr "Reglas de acceso" #: mod_configure.erl:1200 mod_configure.erl:1222 mod_configure.erl:1234 #: mod_configure.erl:1246 mod_configure.erl:1258 mod_configure.erl:1275 -#: mod_configure.erl:1287 mod_configure.erl:1652 mod_configure.erl:1702 -#: mod_configure.erl:1723 mod_roster.erl:943 mod_roster_odbc.erl:1048 -#: mod_vcard.erl:466 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:442 +#: mod_configure.erl:1287 mod_configure.erl:1650 mod_configure.erl:1700 +#: mod_configure.erl:1721 mod_roster.erl:943 mod_roster_odbc.erl:1060 +#: mod_vcard.erl:472 mod_vcard_ldap.erl:554 mod_vcard_odbc.erl:448 msgid "Jabber ID" msgstr "Jabber ID" -#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1653 -#: mod_configure.erl:1865 mod_muc/mod_muc_room.erl:2970 mod_register.erl:235 -#: web/ejabberd_web_admin.erl:1521 +#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1651 +#: mod_configure.erl:1863 mod_muc/mod_muc_room.erl:3224 mod_register.erl:235 +#: web/ejabberd_web_admin.erl:1520 msgid "Password" msgstr "Contraseña" @@ -397,71 +401,72 @@ msgstr "Número de usuarios registrados" msgid "Number of online users" msgstr "Número de usuarios conectados" -#: mod_configure.erl:1684 web/ejabberd_web_admin.erl:1589 -#: web/ejabberd_web_admin.erl:1741 +#: mod_configure.erl:1682 web/ejabberd_web_admin.erl:1588 +#: web/ejabberd_web_admin.erl:1743 msgid "Never" msgstr "Nunca" -#: mod_configure.erl:1698 web/ejabberd_web_admin.erl:1602 -#: web/ejabberd_web_admin.erl:1754 +#: mod_configure.erl:1696 web/ejabberd_web_admin.erl:1601 +#: web/ejabberd_web_admin.erl:1756 msgid "Online" msgstr "Conectado" -#: mod_configure.erl:1703 +#: mod_configure.erl:1701 msgid "Last login" msgstr "Última conexión" -#: mod_configure.erl:1724 +#: mod_configure.erl:1722 msgid "Roster size" msgstr "Tamaño de la lista de contactos" -#: mod_configure.erl:1725 +#: mod_configure.erl:1723 msgid "IP addresses" msgstr "Direcciones IP" -#: mod_configure.erl:1726 +#: mod_configure.erl:1724 msgid "Resources" msgstr "Recursos" -#: mod_configure.erl:1852 +#: mod_configure.erl:1850 msgid "Administration of " msgstr "Administración de " -#: mod_configure.erl:1855 +#: mod_configure.erl:1853 msgid "Action on user" msgstr "Acción en el usuario" -#: mod_configure.erl:1859 +#: mod_configure.erl:1857 msgid "Edit Properties" msgstr "Editar propiedades" -#: mod_configure.erl:1862 web/ejabberd_web_admin.erl:1767 +#: mod_configure.erl:1860 web/ejabberd_web_admin.erl:1769 msgid "Remove User" msgstr "Eliminar usuario" -#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:336 +#: mod_irc/mod_irc.erl:201 mod_irc/mod_irc_odbc.erl:196 +#: mod_muc/mod_muc.erl:336 mod_muc/mod_muc_odbc.erl:342 msgid "Access denied by service policy" msgstr "Acceso denegado por la política del servicio" -#: mod_irc/mod_irc.erl:400 +#: mod_irc/mod_irc.erl:401 mod_irc/mod_irc_odbc.erl:398 msgid "IRC Transport" msgstr "Transporte de IRC" -#: mod_irc/mod_irc.erl:427 +#: mod_irc/mod_irc.erl:428 mod_irc/mod_irc_odbc.erl:425 msgid "ejabberd IRC module" msgstr "Módulo de IRC para ejabberd" -#: mod_irc/mod_irc.erl:558 +#: mod_irc/mod_irc.erl:559 mod_irc/mod_irc_odbc.erl:568 msgid "You need an x:data capable client to configure mod_irc settings" msgstr "" "Necesitas un cliente con soporte de x:data para configurar las opciones de " "mod_irc" -#: mod_irc/mod_irc.erl:565 +#: mod_irc/mod_irc.erl:566 mod_irc/mod_irc_odbc.erl:575 msgid "Registration in mod_irc for " msgstr "Registro en mod_irc para" -#: mod_irc/mod_irc.erl:570 +#: mod_irc/mod_irc.erl:571 mod_irc/mod_irc_odbc.erl:580 msgid "" "Enter username, encodings, ports and passwords you wish to use for " "connecting to IRC servers" @@ -469,11 +474,11 @@ msgstr "" "Introduce el nombre de usuario, codificaciones de carácteres, puertos y " "contraseñas que quieras usar al conectar en los servidores de IRC" -#: mod_irc/mod_irc.erl:575 +#: mod_irc/mod_irc.erl:576 mod_irc/mod_irc_odbc.erl:585 msgid "IRC Username" msgstr "Nombre de usuario en IRC" -#: mod_irc/mod_irc.erl:585 +#: mod_irc/mod_irc.erl:586 mod_irc/mod_irc_odbc.erl:595 msgid "" "If you want to specify different ports, passwords, encodings for IRC " "servers, fill this list with values in format '{\"irc server\", \"encoding" @@ -485,7 +490,7 @@ msgstr "" "'{\"servidor irc\", \"codificación\", \"puerto\", \"contrasela\"}'. Este " "servicio usa por defecto la codificación \"~s\", puerto ~p, sin contraseña." -#: mod_irc/mod_irc.erl:597 +#: mod_irc/mod_irc.erl:598 mod_irc/mod_irc_odbc.erl:607 msgid "" "Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." @@ -493,35 +498,36 @@ msgstr "" "Ejemplo: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." -#: mod_irc/mod_irc.erl:602 +#: mod_irc/mod_irc.erl:603 mod_irc/mod_irc_odbc.erl:612 msgid "Connections parameters" msgstr "Parámetros de conexiones" -#: mod_irc/mod_irc.erl:727 +#: mod_irc/mod_irc.erl:728 mod_irc/mod_irc_odbc.erl:757 msgid "Join IRC channel" msgstr "Entrar en canal IRC" -#: mod_irc/mod_irc.erl:731 +#: mod_irc/mod_irc.erl:732 mod_irc/mod_irc_odbc.erl:761 msgid "IRC channel (don't put the first #)" msgstr "Canal IRC (no pongas el # del principio)" -#: mod_irc/mod_irc.erl:736 +#: mod_irc/mod_irc.erl:737 mod_irc/mod_irc_odbc.erl:766 msgid "IRC server" msgstr "Servidor IRC" -#: mod_irc/mod_irc.erl:769 mod_irc/mod_irc.erl:773 +#: mod_irc/mod_irc.erl:770 mod_irc/mod_irc.erl:774 +#: mod_irc/mod_irc_odbc.erl:799 mod_irc/mod_irc_odbc.erl:803 msgid "Join the IRC channel here." msgstr "Entrar en el canal de IRC aquí" -#: mod_irc/mod_irc.erl:777 +#: mod_irc/mod_irc.erl:778 mod_irc/mod_irc_odbc.erl:807 msgid "Join the IRC channel in this Jabber ID: ~s" msgstr "Entra en el canal de IRC en esta dirección Jabber: ~s" -#: mod_irc/mod_irc.erl:862 +#: mod_irc/mod_irc.erl:863 mod_irc/mod_irc_odbc.erl:904 msgid "IRC settings" msgstr "Opciones de IRC" -#: mod_irc/mod_irc.erl:867 +#: mod_irc/mod_irc.erl:868 mod_irc/mod_irc_odbc.erl:909 msgid "" "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 " @@ -531,73 +537,74 @@ msgstr "" "usar al conectar en los servidores de IRC. Pulsa Siguiente para conseguir " "más campos en el formulario. Pulsa Completar para guardar las opciones." -#: mod_irc/mod_irc.erl:873 +#: mod_irc/mod_irc.erl:874 mod_irc/mod_irc_odbc.erl:915 msgid "IRC username" msgstr "Nombre de usuario en IRC" -#: mod_irc/mod_irc.erl:922 +#: mod_irc/mod_irc.erl:923 mod_irc/mod_irc_odbc.erl:964 msgid "Password ~b" msgstr "Contraseña ~b" -#: mod_irc/mod_irc.erl:927 +#: mod_irc/mod_irc.erl:928 mod_irc/mod_irc_odbc.erl:969 msgid "Port ~b" msgstr "Puerto ~b" -#: mod_irc/mod_irc.erl:932 +#: mod_irc/mod_irc.erl:933 mod_irc/mod_irc_odbc.erl:974 msgid "Encoding for server ~b" msgstr "Codificación del servidor ~b" -#: mod_irc/mod_irc.erl:941 +#: mod_irc/mod_irc.erl:942 mod_irc/mod_irc_odbc.erl:983 msgid "Server ~b" msgstr "Servidor ~b" -#: mod_muc/mod_muc.erl:449 +#: mod_muc/mod_muc.erl:449 mod_muc/mod_muc_odbc.erl:456 msgid "Only service administrators are allowed to send service messages" msgstr "" "Solo los administradores del servicio tienen permiso para enviar mensajes de " "servicio" -#: mod_muc/mod_muc.erl:493 +#: mod_muc/mod_muc.erl:493 mod_muc/mod_muc_odbc.erl:500 msgid "Room creation is denied by service policy" msgstr "Se te ha denegado crear la sala por política del servicio" -#: mod_muc/mod_muc.erl:500 +#: mod_muc/mod_muc.erl:500 mod_muc/mod_muc_odbc.erl:507 msgid "Conference room does not exist" msgstr "La sala de conferencias no existe" -#: mod_muc/mod_muc.erl:581 +#: mod_muc/mod_muc.erl:582 mod_muc/mod_muc_odbc.erl:595 msgid "Chatrooms" msgstr "Salas de charla" -#: mod_muc/mod_muc.erl:711 +#: mod_muc/mod_muc.erl:712 mod_muc/mod_muc_odbc.erl:729 msgid "You need a client that supports x:data to register the nickname" msgstr "" "Necesitas un cliente con soporte de x:data para poder registrar el apodo" -#: mod_muc/mod_muc.erl:717 +#: mod_muc/mod_muc.erl:718 mod_muc/mod_muc_odbc.erl:735 msgid "Nickname Registration at " msgstr "Registro del apodo en " -#: mod_muc/mod_muc.erl:721 +#: mod_muc/mod_muc.erl:722 mod_muc/mod_muc_odbc.erl:739 msgid "Enter nickname you want to register" msgstr "Introduce el apodo que quieras registrar" -#: mod_muc/mod_muc.erl:722 mod_roster.erl:944 mod_roster_odbc.erl:1049 -#: mod_vcard.erl:358 mod_vcard.erl:471 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:447 +#: mod_muc/mod_muc.erl:723 mod_muc/mod_muc_odbc.erl:740 +#: mod_muc/mod_muc_room.erl:3810 mod_roster.erl:944 mod_roster_odbc.erl:1061 +#: mod_vcard.erl:364 mod_vcard.erl:477 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:453 msgid "Nickname" msgstr "Apodo" -#: mod_muc/mod_muc.erl:761 mod_muc/mod_muc_room.erl:933 -#: mod_muc/mod_muc_room.erl:1577 +#: mod_muc/mod_muc.erl:762 mod_muc/mod_muc_odbc.erl:784 +#: mod_muc/mod_muc_room.erl:1064 mod_muc/mod_muc_room.erl:1787 msgid "That nickname is registered by another person" msgstr "El apodo ya está registrado por otra persona" -#: mod_muc/mod_muc.erl:787 +#: mod_muc/mod_muc.erl:788 mod_muc/mod_muc_odbc.erl:811 msgid "You must fill in field \"Nickname\" in the form" msgstr "Debes rellenar el campo \"Apodo\" en el formulario" -#: mod_muc/mod_muc.erl:807 +#: mod_muc/mod_muc.erl:808 mod_muc/mod_muc_odbc.erl:831 msgid "ejabberd MUC module" msgstr "Módulo de MUC para ejabberd" @@ -637,8 +644,8 @@ msgstr "ha sido expulsado porque el sistema se va a detener" msgid "is now known as" msgstr "se cambia el nombre a" -#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:689 -#: mod_muc/mod_muc_room.erl:2138 +#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:688 +#: mod_muc/mod_muc_room.erl:2393 msgid " has set the subject to: " msgstr " ha puesto el asunto: " @@ -734,34 +741,50 @@ msgstr "noviembre" msgid "December" msgstr "diciembre" -#: mod_muc/mod_muc_log.erl:751 +#: mod_muc/mod_muc_log.erl:750 msgid "Room Configuration" msgstr "Configuración de la sala" -#: mod_muc/mod_muc_log.erl:760 +#: mod_muc/mod_muc_log.erl:759 msgid "Room Occupants" msgstr "Ocupantes de la sala" -#: mod_muc/mod_muc_room.erl:170 +#: mod_muc/mod_muc_room.erl:174 msgid "Traffic rate limit is exceeded" msgstr "Se ha exedido el límite de tráfico" -#: mod_muc/mod_muc_room.erl:242 +#: mod_muc/mod_muc_room.erl:246 msgid "" "This participant is kicked from the room because he sent an error message" msgstr "" "Este participante ha sido expulsado de la sala porque envió un mensaje de " "error" -#: mod_muc/mod_muc_room.erl:251 +#: mod_muc/mod_muc_room.erl:255 msgid "It is not allowed to send private messages to the conference" msgstr "Impedir el envio de mensajes privados a la sala" -#: mod_muc/mod_muc_room.erl:296 +#: mod_muc/mod_muc_room.erl:332 +msgid "Please, wait for a while before sending new voice request" +msgstr "Por favor, espera un poco antes de enviar otra petición de voz" + +#: mod_muc/mod_muc_room.erl:347 +msgid "Voice requests are disabled in this conference" +msgstr "Las peticiones de voz están desactivadas en esta sala" + +#: mod_muc/mod_muc_room.erl:364 +msgid "Failed to extract JID from your voice request approval" +msgstr "Fallo al extraer el Jabber ID de tu aprobación de petición de voz" + +#: mod_muc/mod_muc_room.erl:393 +msgid "Only moderators can approve voice requests" +msgstr "Solo los moderadores pueden aprobar peticiones de voz" + +#: mod_muc/mod_muc_room.erl:408 msgid "Improper message type" msgstr "Tipo de mensaje incorrecto" -#: mod_muc/mod_muc_room.erl:406 +#: mod_muc/mod_muc_room.erl:518 msgid "" "This participant is kicked from the room because he sent an error message to " "another participant" @@ -769,232 +792,264 @@ msgstr "" "Este participante ha sido expulsado de la sala porque envió un mensaje de " "error a otro participante" -#: mod_muc/mod_muc_room.erl:419 +#: mod_muc/mod_muc_room.erl:531 msgid "It is not allowed to send private messages of type \"groupchat\"" msgstr "No está permitido enviar mensajes privados del tipo \"groupchat\"" -#: mod_muc/mod_muc_room.erl:431 mod_muc/mod_muc_room.erl:486 +#: mod_muc/mod_muc_room.erl:543 mod_muc/mod_muc_room.erl:611 msgid "Recipient is not in the conference room" msgstr "El receptor no está en la sala de conferencia" -#: mod_muc/mod_muc_room.erl:451 mod_muc/mod_muc_room.erl:829 -#: mod_muc/mod_muc_room.erl:3609 -msgid "Only occupants are allowed to send messages to the conference" -msgstr "Solo los ocupantes pueden enviar mensajes a la sala" - -#: mod_muc/mod_muc_room.erl:460 +#: mod_muc/mod_muc_room.erl:564 mod_muc/mod_muc_room.erl:585 msgid "It is not allowed to send private messages" msgstr "No está permitido enviar mensajes privados" -#: mod_muc/mod_muc_room.erl:509 +#: mod_muc/mod_muc_room.erl:576 mod_muc/mod_muc_room.erl:956 +#: mod_muc/mod_muc_room.erl:4040 +msgid "Only occupants are allowed to send messages to the conference" +msgstr "Solo los ocupantes pueden enviar mensajes a la sala" + +#: mod_muc/mod_muc_room.erl:634 msgid "Only occupants are allowed to send queries to the conference" msgstr "Solo los ocupantes pueden enviar solicitudes a la sala" -#: mod_muc/mod_muc_room.erl:521 +#: mod_muc/mod_muc_room.erl:646 msgid "Queries to the conference members are not allowed in this room" msgstr "En esta sala no se permiten solicitudes a los miembros de la sala" -#: mod_muc/mod_muc_room.erl:805 +#: mod_muc/mod_muc_room.erl:932 msgid "" "Only moderators and participants are allowed to change the subject in this " "room" msgstr "" "Solo los moderadores y participantes pueden cambiar el asunto de esta sala" -#: mod_muc/mod_muc_room.erl:810 +#: mod_muc/mod_muc_room.erl:937 msgid "Only moderators are allowed to change the subject in this room" msgstr "Solo los moderadores pueden cambiar el asunto de esta sala" -#: mod_muc/mod_muc_room.erl:820 +#: mod_muc/mod_muc_room.erl:947 msgid "Visitors are not allowed to send messages to all occupants" msgstr "Los visitantes no pueden enviar mensajes a todos los ocupantes" -#: mod_muc/mod_muc_room.erl:891 +#: mod_muc/mod_muc_room.erl:1021 msgid "" "This participant is kicked from the room because he sent an error presence" msgstr "" "Este participante ha sido expulsado de la sala porque envió una presencia de " "error" -#: mod_muc/mod_muc_room.erl:909 +#: mod_muc/mod_muc_room.erl:1040 msgid "Visitors are not allowed to change their nicknames in this room" msgstr "Los visitantes no tienen permitido cambiar sus apodos en esta sala" -#: mod_muc/mod_muc_room.erl:922 mod_muc/mod_muc_room.erl:1569 +#: mod_muc/mod_muc_room.erl:1053 mod_muc/mod_muc_room.erl:1779 msgid "That nickname is already in use by another occupant" msgstr "Ese apodo ya está siendo usado por otro ocupante" -#: mod_muc/mod_muc_room.erl:1558 +#: mod_muc/mod_muc_room.erl:1768 msgid "You have been banned from this room" msgstr "Has sido bloqueado en esta sala" -#: mod_muc/mod_muc_room.erl:1561 +#: mod_muc/mod_muc_room.erl:1771 msgid "Membership is required to enter this room" msgstr "Necesitas ser miembro de esta sala para poder entrar" -#: mod_muc/mod_muc_room.erl:1597 +#: mod_muc/mod_muc_room.erl:1807 msgid "This room is not anonymous" msgstr "Sala no anónima" -#: mod_muc/mod_muc_room.erl:1623 +#: mod_muc/mod_muc_room.erl:1833 msgid "A password is required to enter this room" msgstr "Se necesita contraseña para entrar en esta sala" -#: mod_muc/mod_muc_room.erl:1645 mod_register.erl:246 +#: mod_muc/mod_muc_room.erl:1855 mod_register.erl:246 msgid "Too many CAPTCHA requests" -msgstr "" +msgstr "Demasiadas peticiones de CAPTCHA" -#: mod_muc/mod_muc_room.erl:1654 -msgid "Unable to generate a captcha" -msgstr "No se pudo generar un captcha." +#: mod_muc/mod_muc_room.erl:1864 mod_register.erl:251 +msgid "Unable to generate a CAPTCHA" +msgstr "No se pudo generar un CAPTCHA" -#: mod_muc/mod_muc_room.erl:1664 +#: mod_muc/mod_muc_room.erl:1874 msgid "Incorrect password" msgstr "Contraseña incorrecta" -#: mod_muc/mod_muc_room.erl:2193 +#: mod_muc/mod_muc_room.erl:2448 msgid "Administrator privileges required" msgstr "Se necesita privilegios de administrador" -#: mod_muc/mod_muc_room.erl:2208 +#: mod_muc/mod_muc_room.erl:2463 msgid "Moderator privileges required" msgstr "Se necesita privilegios de moderador" -#: mod_muc/mod_muc_room.erl:2363 +#: mod_muc/mod_muc_room.erl:2619 msgid "Jabber ID ~s is invalid" msgstr "El Jabber ID ~s no es válido" -#: mod_muc/mod_muc_room.erl:2377 +#: mod_muc/mod_muc_room.erl:2633 msgid "Nickname ~s does not exist in the room" msgstr "El apodo ~s no existe en la sala" -#: mod_muc/mod_muc_room.erl:2403 mod_muc/mod_muc_room.erl:2797 +#: mod_muc/mod_muc_room.erl:2659 mod_muc/mod_muc_room.erl:3049 msgid "Invalid affiliation: ~s" msgstr "Afiliación no válida: ~s" -#: mod_muc/mod_muc_room.erl:2460 +#: mod_muc/mod_muc_room.erl:2713 msgid "Invalid role: ~s" msgstr "Rol no válido: ~s" -#: mod_muc/mod_muc_room.erl:2774 mod_muc/mod_muc_room.erl:2810 +#: mod_muc/mod_muc_room.erl:3026 mod_muc/mod_muc_room.erl:3062 msgid "Owner privileges required" msgstr "Se requieren privilegios de propietario de la sala" -#: mod_muc/mod_muc_room.erl:2941 +#: mod_muc/mod_muc_room.erl:3195 msgid "Configuration of room ~s" msgstr "Configuración para la sala ~s" -#: mod_muc/mod_muc_room.erl:2946 +#: mod_muc/mod_muc_room.erl:3200 msgid "Room title" msgstr "Título de la sala" -#: mod_muc/mod_muc_room.erl:2949 mod_muc/mod_muc_room.erl:3388 +#: mod_muc/mod_muc_room.erl:3203 mod_muc/mod_muc_room.erl:3692 msgid "Room description" msgstr "Descripción de la sala" -#: mod_muc/mod_muc_room.erl:2956 +#: mod_muc/mod_muc_room.erl:3210 msgid "Make room persistent" msgstr "Sala permanente" -#: mod_muc/mod_muc_room.erl:2961 +#: mod_muc/mod_muc_room.erl:3215 msgid "Make room public searchable" msgstr "Sala públicamente visible" -#: mod_muc/mod_muc_room.erl:2964 +#: mod_muc/mod_muc_room.erl:3218 msgid "Make participants list public" msgstr "La lista de participantes es pública" -#: mod_muc/mod_muc_room.erl:2967 +#: mod_muc/mod_muc_room.erl:3221 msgid "Make room password protected" msgstr "Proteger la sala con contraseña" -#: mod_muc/mod_muc_room.erl:2978 +#: mod_muc/mod_muc_room.erl:3232 msgid "Maximum Number of Occupants" msgstr "Número máximo de ocupantes" -#: mod_muc/mod_muc_room.erl:2985 +#: mod_muc/mod_muc_room.erl:3239 msgid "No limit" msgstr "Sin límite" -#: mod_muc/mod_muc_room.erl:2996 +#: mod_muc/mod_muc_room.erl:3250 msgid "Present real Jabber IDs to" msgstr "Los Jabber ID reales pueden verlos" -#: mod_muc/mod_muc_room.erl:3004 +#: mod_muc/mod_muc_room.erl:3258 mod_muc/mod_muc_room.erl:3292 msgid "moderators only" msgstr "solo moderadores" -#: mod_muc/mod_muc_room.erl:3006 +#: mod_muc/mod_muc_room.erl:3260 mod_muc/mod_muc_room.erl:3294 msgid "anyone" msgstr "cualquiera" -#: mod_muc/mod_muc_room.erl:3008 +#: mod_muc/mod_muc_room.erl:3262 msgid "Make room members-only" msgstr "Sala sólo para miembros" -#: mod_muc/mod_muc_room.erl:3011 +#: mod_muc/mod_muc_room.erl:3265 msgid "Make room moderated" msgstr "Sala moderada" -#: mod_muc/mod_muc_room.erl:3014 +#: mod_muc/mod_muc_room.erl:3268 msgid "Default users as participants" msgstr "Los usuarios son participantes por defecto" -#: mod_muc/mod_muc_room.erl:3017 +#: mod_muc/mod_muc_room.erl:3271 msgid "Allow users to change the subject" msgstr "Permitir a los usuarios cambiar el asunto" -#: mod_muc/mod_muc_room.erl:3020 +#: mod_muc/mod_muc_room.erl:3274 msgid "Allow users to send private messages" msgstr "Permitir a los usuarios enviar mensajes privados" -#: mod_muc/mod_muc_room.erl:3023 +#: mod_muc/mod_muc_room.erl:3279 +msgid "Allow visitors to send private messages to" +msgstr "Permitir a los visitantes enviar mensajes privados a" + +#: mod_muc/mod_muc_room.erl:3290 +msgid "nobody" +msgstr "nadie" + +#: mod_muc/mod_muc_room.erl:3296 msgid "Allow users to query other users" msgstr "Permitir a los usuarios consultar a otros usuarios" -#: mod_muc/mod_muc_room.erl:3026 +#: mod_muc/mod_muc_room.erl:3299 msgid "Allow users to send invites" msgstr "Permitir a los usuarios enviar invitaciones" -#: mod_muc/mod_muc_room.erl:3029 +#: mod_muc/mod_muc_room.erl:3302 msgid "Allow visitors to send status text in presence updates" msgstr "" "Permitir a los visitantes enviar texto de estado en las actualizaciones de " "presencia" -#: mod_muc/mod_muc_room.erl:3032 +#: mod_muc/mod_muc_room.erl:3305 msgid "Allow visitors to change nickname" msgstr "Permitir a los visitantes cambiarse el apodo" -#: mod_muc/mod_muc_room.erl:3038 -msgid "Make room captcha protected" -msgstr "Proteger la sala con captcha" +#: mod_muc/mod_muc_room.erl:3308 +msgid "Allow visitors to send voice requests" +msgstr "Permitir a los visitantes enviar peticiones de voz" -#: mod_muc/mod_muc_room.erl:3043 +#: mod_muc/mod_muc_room.erl:3311 +msgid "Minimum interval between voice requests (in seconds)" +msgstr "Intervalo mínimo entre peticiones de voz (en segundos)" + +#: mod_muc/mod_muc_room.erl:3317 +msgid "Make room CAPTCHA protected" +msgstr "Proteger la sala con CAPTCHA" + +#: mod_muc/mod_muc_room.erl:3322 msgid "Exclude Jabber IDs from CAPTCHA challenge" -msgstr "" +msgstr "Excluir Jabber IDs de las pruebas de CAPTCHA" -#: mod_muc/mod_muc_room.erl:3050 +#: mod_muc/mod_muc_room.erl:3329 msgid "Enable logging" msgstr "Guardar históricos" -#: mod_muc/mod_muc_room.erl:3058 +#: mod_muc/mod_muc_room.erl:3337 msgid "You need an x:data capable client to configure room" msgstr "Necesitas un cliente con soporte de x:data para configurar la sala" -#: mod_muc/mod_muc_room.erl:3390 +#: mod_muc/mod_muc_room.erl:3694 msgid "Number of occupants" msgstr "Número de ocupantes" -#: mod_muc/mod_muc_room.erl:3446 +#: mod_muc/mod_muc_room.erl:3750 msgid "private, " msgstr "privado" -#: mod_muc/mod_muc_room.erl:3529 +#: mod_muc/mod_muc_room.erl:3799 +msgid "Voice request" +msgstr "Petición de voz" + +#: mod_muc/mod_muc_room.erl:3803 +msgid "Either approve or decline the voice request." +msgstr "Aprueba o rechaza la petición de voz." + +#: mod_muc/mod_muc_room.erl:3809 +msgid "User JID" +msgstr "Jabber ID del usuario" + +#: mod_muc/mod_muc_room.erl:3811 +msgid "Grant voice to this person?" +msgstr "¿Conceder voz a esta persona?" + +#: mod_muc/mod_muc_room.erl:3960 msgid "~s invites you to the room ~s" msgstr "~s te invita a la sala ~s" -#: mod_muc/mod_muc_room.erl:3538 +#: mod_muc/mod_muc_room.erl:3969 msgid "the password is" msgstr "la contraseña es" @@ -1010,14 +1065,15 @@ msgid "~s's Offline Messages Queue" msgstr "Cola de mensajes diferidos de ~s" #: mod_offline.erl:563 mod_offline_odbc.erl:411 mod_roster.erl:987 -#: mod_roster_odbc.erl:1092 mod_shared_roster.erl:896 -#: mod_shared_roster.erl:1005 web/ejabberd_web_admin.erl:833 +#: mod_roster_odbc.erl:1104 mod_shared_roster.erl:901 +#: mod_shared_roster.erl:1010 mod_shared_roster_odbc.erl:930 +#: mod_shared_roster_odbc.erl:1039 web/ejabberd_web_admin.erl:833 #: web/ejabberd_web_admin.erl:874 web/ejabberd_web_admin.erl:942 #: web/ejabberd_web_admin.erl:978 web/ejabberd_web_admin.erl:1019 -#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1758 -#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1961 -#: web/ejabberd_web_admin.erl:2030 web/ejabberd_web_admin.erl:2134 -#: web/ejabberd_web_admin.erl:2159 web/ejabberd_web_admin.erl:2247 +#: web/ejabberd_web_admin.erl:1508 web/ejabberd_web_admin.erl:1760 +#: web/ejabberd_web_admin.erl:1931 web/ejabberd_web_admin.erl:1963 +#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2135 +#: web/ejabberd_web_admin.erl:2160 web/ejabberd_web_admin.erl:2248 msgid "Submitted" msgstr "Enviado" @@ -1037,8 +1093,9 @@ msgstr "Para" msgid "Packet" msgstr "Paquete" -#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:903 -#: web/ejabberd_web_admin.erl:882 web/ejabberd_web_admin.erl:986 +#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:908 +#: mod_shared_roster_odbc.erl:937 web/ejabberd_web_admin.erl:882 +#: web/ejabberd_web_admin.erl:986 msgid "Delete Selected" msgstr "Eliminar los seleccionados" @@ -1054,103 +1111,103 @@ msgstr "Borrar todos los mensajes diferidos" msgid "ejabberd SOCKS5 Bytestreams module" msgstr "Módulo SOCKS5 Bytestreams para ejabberd" -#: mod_pubsub/mod_pubsub.erl:1119 mod_pubsub/mod_pubsub_odbc.erl:928 +#: mod_pubsub/mod_pubsub.erl:1120 mod_pubsub/mod_pubsub_odbc.erl:929 msgid "Publish-Subscribe" msgstr "Servicio de Publicar-Subscribir" -#: mod_pubsub/mod_pubsub.erl:1213 mod_pubsub/mod_pubsub_odbc.erl:1024 +#: mod_pubsub/mod_pubsub.erl:1214 mod_pubsub/mod_pubsub_odbc.erl:1025 msgid "ejabberd Publish-Subscribe module" msgstr "Módulo de Publicar-Subscribir de ejabberd" -#: mod_pubsub/mod_pubsub.erl:1496 mod_pubsub/mod_pubsub_odbc.erl:1311 +#: mod_pubsub/mod_pubsub.erl:1497 mod_pubsub/mod_pubsub_odbc.erl:1312 msgid "PubSub subscriber request" msgstr "Petición de subscriptor de PubSub" -#: mod_pubsub/mod_pubsub.erl:1498 mod_pubsub/mod_pubsub_odbc.erl:1313 +#: mod_pubsub/mod_pubsub.erl:1499 mod_pubsub/mod_pubsub_odbc.erl:1314 msgid "Choose whether to approve this entity's subscription." msgstr "Decidir si aprobar la subscripción de esta entidad." -#: mod_pubsub/mod_pubsub.erl:1504 mod_pubsub/mod_pubsub_odbc.erl:1319 +#: mod_pubsub/mod_pubsub.erl:1505 mod_pubsub/mod_pubsub_odbc.erl:1320 msgid "Node ID" msgstr "Nodo ID" -#: mod_pubsub/mod_pubsub.erl:1509 mod_pubsub/mod_pubsub_odbc.erl:1324 +#: mod_pubsub/mod_pubsub.erl:1510 mod_pubsub/mod_pubsub_odbc.erl:1325 msgid "Subscriber Address" msgstr "Dirección del subscriptor" -#: mod_pubsub/mod_pubsub.erl:1515 mod_pubsub/mod_pubsub_odbc.erl:1330 +#: mod_pubsub/mod_pubsub.erl:1516 mod_pubsub/mod_pubsub_odbc.erl:1331 msgid "Allow this Jabber ID to subscribe to this pubsub node?" -msgstr "¿Deseas permitir a este JabberID que se subscriba a este nodo PubSub?" +msgstr "¿Deseas permitir a este Jabber ID que se subscriba a este nodo PubSub?" -#: mod_pubsub/mod_pubsub.erl:3416 mod_pubsub/mod_pubsub_odbc.erl:3229 +#: mod_pubsub/mod_pubsub.erl:3474 mod_pubsub/mod_pubsub_odbc.erl:3287 msgid "Deliver payloads with event notifications" msgstr "Enviar contenidos junto con las notificaciones de eventos" -#: mod_pubsub/mod_pubsub.erl:3417 mod_pubsub/mod_pubsub_odbc.erl:3230 +#: mod_pubsub/mod_pubsub.erl:3475 mod_pubsub/mod_pubsub_odbc.erl:3288 msgid "Deliver event notifications" msgstr "Entregar notificaciones de eventos" -#: mod_pubsub/mod_pubsub.erl:3418 mod_pubsub/mod_pubsub_odbc.erl:3231 +#: mod_pubsub/mod_pubsub.erl:3476 mod_pubsub/mod_pubsub_odbc.erl:3289 msgid "Notify subscribers when the node configuration changes" msgstr "Notificar subscriptores cuando cambia la configuración del nodo" -#: mod_pubsub/mod_pubsub.erl:3419 mod_pubsub/mod_pubsub_odbc.erl:3232 +#: mod_pubsub/mod_pubsub.erl:3477 mod_pubsub/mod_pubsub_odbc.erl:3290 msgid "Notify subscribers when the node is deleted" msgstr "Notificar subscriptores cuando el nodo se borra" -#: mod_pubsub/mod_pubsub.erl:3420 mod_pubsub/mod_pubsub_odbc.erl:3233 +#: mod_pubsub/mod_pubsub.erl:3478 mod_pubsub/mod_pubsub_odbc.erl:3291 msgid "Notify subscribers when items are removed from the node" msgstr "Notificar subscriptores cuando los elementos se borran del nodo" -#: mod_pubsub/mod_pubsub.erl:3421 mod_pubsub/mod_pubsub_odbc.erl:3234 +#: mod_pubsub/mod_pubsub.erl:3479 mod_pubsub/mod_pubsub_odbc.erl:3292 msgid "Persist items to storage" msgstr "Persistir elementos al almacenar" -#: mod_pubsub/mod_pubsub.erl:3422 mod_pubsub/mod_pubsub_odbc.erl:3235 +#: mod_pubsub/mod_pubsub.erl:3480 mod_pubsub/mod_pubsub_odbc.erl:3293 msgid "A friendly name for the node" msgstr "Un nombre sencillo para el nodo" -#: mod_pubsub/mod_pubsub.erl:3423 mod_pubsub/mod_pubsub_odbc.erl:3236 +#: mod_pubsub/mod_pubsub.erl:3481 mod_pubsub/mod_pubsub_odbc.erl:3294 msgid "Max # of items to persist" msgstr "Máximo # de elementos que persisten" -#: mod_pubsub/mod_pubsub.erl:3424 mod_pubsub/mod_pubsub_odbc.erl:3237 +#: mod_pubsub/mod_pubsub.erl:3482 mod_pubsub/mod_pubsub_odbc.erl:3295 msgid "Whether to allow subscriptions" msgstr "Permitir subscripciones" -#: mod_pubsub/mod_pubsub.erl:3425 mod_pubsub/mod_pubsub_odbc.erl:3238 +#: mod_pubsub/mod_pubsub.erl:3483 mod_pubsub/mod_pubsub_odbc.erl:3296 msgid "Specify the access model" msgstr "Especifica el modelo de acceso" -#: mod_pubsub/mod_pubsub.erl:3428 mod_pubsub/mod_pubsub_odbc.erl:3241 +#: mod_pubsub/mod_pubsub.erl:3486 mod_pubsub/mod_pubsub_odbc.erl:3299 msgid "Roster groups allowed to subscribe" msgstr "Grupos de contactos que pueden suscribirse" -#: mod_pubsub/mod_pubsub.erl:3429 mod_pubsub/mod_pubsub_odbc.erl:3242 +#: mod_pubsub/mod_pubsub.erl:3487 mod_pubsub/mod_pubsub_odbc.erl:3300 msgid "Specify the publisher model" msgstr "Especificar el modelo del publicante" -#: mod_pubsub/mod_pubsub.erl:3431 mod_pubsub/mod_pubsub_odbc.erl:3244 +#: mod_pubsub/mod_pubsub.erl:3489 mod_pubsub/mod_pubsub_odbc.erl:3302 msgid "Purge all items when the relevant publisher goes offline" msgstr "Borra todos los elementos cuando el publicador relevante se desconecta" -#: mod_pubsub/mod_pubsub.erl:3432 mod_pubsub/mod_pubsub_odbc.erl:3245 +#: mod_pubsub/mod_pubsub.erl:3490 mod_pubsub/mod_pubsub_odbc.erl:3303 msgid "Specify the event message type" msgstr "Especifica el tipo del mensaje de evento" -#: mod_pubsub/mod_pubsub.erl:3434 mod_pubsub/mod_pubsub_odbc.erl:3247 +#: mod_pubsub/mod_pubsub.erl:3492 mod_pubsub/mod_pubsub_odbc.erl:3305 msgid "Max payload size in bytes" msgstr "Máximo tamaño del contenido en bytes" -#: mod_pubsub/mod_pubsub.erl:3435 mod_pubsub/mod_pubsub_odbc.erl:3248 +#: mod_pubsub/mod_pubsub.erl:3493 mod_pubsub/mod_pubsub_odbc.erl:3306 msgid "When to send the last published item" msgstr "Cuando enviar el último elemento publicado" -#: mod_pubsub/mod_pubsub.erl:3437 mod_pubsub/mod_pubsub_odbc.erl:3250 +#: mod_pubsub/mod_pubsub.erl:3495 mod_pubsub/mod_pubsub_odbc.erl:3308 msgid "Only deliver notifications to available users" msgstr "Solo enviar notificaciones a los usuarios disponibles" -#: mod_pubsub/mod_pubsub.erl:3438 mod_pubsub/mod_pubsub_odbc.erl:3251 +#: mod_pubsub/mod_pubsub.erl:3496 mod_pubsub/mod_pubsub_odbc.erl:3309 msgid "The collections with which a node is affiliated" msgstr "Las colecciones a las que un nodo está afiliado" @@ -1167,15 +1224,11 @@ msgid "Choose a username and password to register with this server" msgstr "" "Escoge un nombre de usuario y contraseña para registrarte en este servidor" -#: mod_register.erl:230 mod_vcard.erl:358 mod_vcard_odbc.erl:336 -#: web/ejabberd_web_admin.erl:1516 web/ejabberd_web_admin.erl:1573 +#: mod_register.erl:230 mod_vcard.erl:364 mod_vcard_odbc.erl:342 +#: web/ejabberd_web_admin.erl:1515 web/ejabberd_web_admin.erl:1572 msgid "User" msgstr "Usuario" -#: mod_register.erl:251 -msgid "Unable to generate a CAPTCHA" -msgstr "No se pudo generar un CAPTCHA" - #: mod_register.erl:316 mod_register.erl:361 msgid "The password is too weak" msgstr "La contraseña es demasiado débil" @@ -1184,120 +1237,123 @@ msgstr "La contraseña es demasiado débil" msgid "Users are not allowed to register accounts so quickly" msgstr "Los usuarios no tienen permitido crear cuentas con tanta rapidez" -#: mod_roster.erl:938 mod_roster_odbc.erl:1043 web/ejabberd_web_admin.erl:1699 -#: web/ejabberd_web_admin.erl:1884 web/ejabberd_web_admin.erl:1895 -#: web/ejabberd_web_admin.erl:2218 +#: mod_roster.erl:938 mod_roster_odbc.erl:1055 web/ejabberd_web_admin.erl:1701 +#: web/ejabberd_web_admin.erl:1886 web/ejabberd_web_admin.erl:1897 +#: web/ejabberd_web_admin.erl:2219 msgid "None" msgstr "Ninguno" -#: mod_roster.erl:945 mod_roster_odbc.erl:1050 +#: mod_roster.erl:945 mod_roster_odbc.erl:1062 msgid "Subscription" msgstr "Subscripción" -#: mod_roster.erl:946 mod_roster_odbc.erl:1051 +#: mod_roster.erl:946 mod_roster_odbc.erl:1063 msgid "Pending" msgstr "Pendiente" -#: mod_roster.erl:947 mod_roster_odbc.erl:1052 +#: mod_roster.erl:947 mod_roster_odbc.erl:1064 msgid "Groups" msgstr "Grupos" -#: mod_roster.erl:974 mod_roster_odbc.erl:1079 +#: mod_roster.erl:974 mod_roster_odbc.erl:1091 msgid "Validate" msgstr "Validar" -#: mod_roster.erl:982 mod_roster_odbc.erl:1087 +#: mod_roster.erl:982 mod_roster_odbc.erl:1099 msgid "Remove" msgstr "Borrar" -#: mod_roster.erl:985 mod_roster_odbc.erl:1090 +#: mod_roster.erl:985 mod_roster_odbc.erl:1102 msgid "Roster of " msgstr "Lista de contactos de " -#: mod_roster.erl:988 mod_roster_odbc.erl:1093 mod_shared_roster.erl:897 -#: mod_shared_roster.erl:1006 web/ejabberd_web_admin.erl:834 +#: mod_roster.erl:988 mod_roster_odbc.erl:1105 mod_shared_roster.erl:902 +#: mod_shared_roster.erl:1011 mod_shared_roster_odbc.erl:931 +#: mod_shared_roster_odbc.erl:1040 web/ejabberd_web_admin.erl:834 #: web/ejabberd_web_admin.erl:875 web/ejabberd_web_admin.erl:943 #: web/ejabberd_web_admin.erl:979 web/ejabberd_web_admin.erl:1020 -#: web/ejabberd_web_admin.erl:1510 web/ejabberd_web_admin.erl:1759 -#: web/ejabberd_web_admin.erl:1930 web/ejabberd_web_admin.erl:2135 -#: web/ejabberd_web_admin.erl:2160 +#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1761 +#: web/ejabberd_web_admin.erl:1932 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2161 msgid "Bad format" msgstr "Mal formato" -#: mod_roster.erl:995 mod_roster_odbc.erl:1100 +#: mod_roster.erl:995 mod_roster_odbc.erl:1112 msgid "Add Jabber ID" msgstr "Añadir Jabber ID" -#: mod_roster.erl:1094 mod_roster_odbc.erl:1199 +#: mod_roster.erl:1094 mod_roster_odbc.erl:1211 msgid "Roster" msgstr "Lista de contactos" -#: mod_shared_roster.erl:852 mod_shared_roster.erl:894 -#: mod_shared_roster.erl:1002 +#: mod_shared_roster.erl:857 mod_shared_roster.erl:899 +#: mod_shared_roster.erl:1007 mod_shared_roster_odbc.erl:886 +#: mod_shared_roster_odbc.erl:928 mod_shared_roster_odbc.erl:1036 msgid "Shared Roster Groups" msgstr "Grupos Compartidos" -#: mod_shared_roster.erl:890 web/ejabberd_web_admin.erl:1366 -#: web/ejabberd_web_admin.erl:2460 +#: mod_shared_roster.erl:895 mod_shared_roster_odbc.erl:924 +#: web/ejabberd_web_admin.erl:1365 web/ejabberd_web_admin.erl:2461 msgid "Add New" msgstr "Añadir nuevo" -#: mod_shared_roster.erl:973 +#: mod_shared_roster.erl:978 mod_shared_roster_odbc.erl:1007 msgid "Name:" msgstr "Nombre:" -#: mod_shared_roster.erl:978 +#: mod_shared_roster.erl:983 mod_shared_roster_odbc.erl:1012 msgid "Description:" msgstr "Descripción:" -#: mod_shared_roster.erl:986 +#: mod_shared_roster.erl:991 mod_shared_roster_odbc.erl:1020 msgid "Members:" msgstr "Miembros:" -#: mod_shared_roster.erl:994 +#: mod_shared_roster.erl:999 mod_shared_roster_odbc.erl:1028 msgid "Displayed Groups:" msgstr "Mostrar grupos:" -#: mod_shared_roster.erl:1003 +#: mod_shared_roster.erl:1008 mod_shared_roster_odbc.erl:1037 msgid "Group " msgstr "Grupo " -#: mod_shared_roster.erl:1012 web/ejabberd_web_admin.erl:840 -#: web/ejabberd_web_admin.erl:884 web/ejabberd_web_admin.erl:949 -#: web/ejabberd_web_admin.erl:1026 web/ejabberd_web_admin.erl:2015 +#: mod_shared_roster.erl:1017 mod_shared_roster_odbc.erl:1046 +#: web/ejabberd_web_admin.erl:840 web/ejabberd_web_admin.erl:884 +#: web/ejabberd_web_admin.erl:949 web/ejabberd_web_admin.erl:1026 +#: web/ejabberd_web_admin.erl:2017 msgid "Submit" msgstr "Enviar" -#: mod_vcard.erl:165 mod_vcard_ldap.erl:237 mod_vcard_odbc.erl:129 +#: mod_vcard.erl:165 mod_vcard_ldap.erl:238 mod_vcard_odbc.erl:129 msgid "Erlang Jabber Server" msgstr "Servidor Jabber en Erlang" -#: mod_vcard.erl:358 mod_vcard.erl:472 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:448 +#: mod_vcard.erl:364 mod_vcard.erl:478 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:454 msgid "Birthday" msgstr "Cumpleaños" -#: mod_vcard.erl:358 mod_vcard.erl:474 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:450 +#: mod_vcard.erl:364 mod_vcard.erl:480 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:456 msgid "City" msgstr "Ciudad" -#: mod_vcard.erl:358 mod_vcard.erl:473 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:449 +#: mod_vcard.erl:364 mod_vcard.erl:479 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:455 msgid "Country" msgstr "País" -#: mod_vcard.erl:358 mod_vcard.erl:475 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:451 +#: mod_vcard.erl:364 mod_vcard.erl:481 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:457 msgid "Email" msgstr "correo" -#: mod_vcard.erl:358 mod_vcard.erl:470 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:446 +#: mod_vcard.erl:364 mod_vcard.erl:476 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:452 msgid "Family Name" msgstr "Apellido" -#: mod_vcard.erl:358 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_odbc.erl:342 msgid "" "Fill in the form to search for any matching Jabber User (Add * to the end of " "field to match substring)" @@ -1305,52 +1361,52 @@ msgstr "" "Rellena el formulario para buscar usuarios Jabber. Añade * al final de un " "campo para buscar subcadenas." -#: mod_vcard.erl:358 mod_vcard.erl:467 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:443 +#: mod_vcard.erl:364 mod_vcard.erl:473 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:449 msgid "Full Name" msgstr "Nombre completo" -#: mod_vcard.erl:358 mod_vcard.erl:469 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:445 +#: mod_vcard.erl:364 mod_vcard.erl:475 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:451 msgid "Middle Name" msgstr "Segundo nombre" -#: mod_vcard.erl:358 mod_vcard.erl:468 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:444 web/ejabberd_web_admin.erl:2004 +#: mod_vcard.erl:364 mod_vcard.erl:474 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:450 web/ejabberd_web_admin.erl:2006 msgid "Name" msgstr "Nombre" -#: mod_vcard.erl:358 mod_vcard.erl:476 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:452 +#: mod_vcard.erl:364 mod_vcard.erl:482 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:458 msgid "Organization Name" msgstr "Nombre de la organización" -#: mod_vcard.erl:358 mod_vcard.erl:477 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:453 +#: mod_vcard.erl:364 mod_vcard.erl:483 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:459 msgid "Organization Unit" msgstr "Unidad de la organización" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "Search users in " msgstr "Buscar usuarios en " -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "You need an x:data capable client to search" msgstr "Necesitas un cliente con soporte de x:data para poder buscar" -#: mod_vcard.erl:383 mod_vcard_ldap.erl:483 mod_vcard_odbc.erl:361 +#: mod_vcard.erl:389 mod_vcard_ldap.erl:487 mod_vcard_odbc.erl:367 msgid "vCard User Search" msgstr "Buscar vCard de usuario" -#: mod_vcard.erl:439 mod_vcard_ldap.erl:537 mod_vcard_odbc.erl:415 +#: mod_vcard.erl:445 mod_vcard_ldap.erl:541 mod_vcard_odbc.erl:421 msgid "ejabberd vCard module" msgstr "Módulo vCard para ejabberd" -#: mod_vcard.erl:463 mod_vcard_ldap.erl:547 mod_vcard_odbc.erl:439 +#: mod_vcard.erl:469 mod_vcard_ldap.erl:551 mod_vcard_odbc.erl:445 msgid "Search Results for " msgstr "Buscar resultados por " -#: mod_vcard_ldap.erl:458 +#: mod_vcard_ldap.erl:462 msgid "Fill in fields to search for any matching Jabber User" msgstr "Rellena campos para buscar usuarios Jabber que concuerden" @@ -1411,7 +1467,7 @@ msgstr "Mostrar Tabla Ordinaria" msgid "Show Integral Table" msgstr "Mostrar Tabla Integral" -#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1937 +#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1939 msgid "Statistics" msgstr "Estadísticas" @@ -1423,116 +1479,116 @@ msgstr "No encontrado" msgid "Node not found" msgstr "Nodo no encontrado" -#: web/ejabberd_web_admin.erl:1461 +#: web/ejabberd_web_admin.erl:1460 msgid "Host" msgstr "Dominio" -#: web/ejabberd_web_admin.erl:1462 +#: web/ejabberd_web_admin.erl:1461 msgid "Registered Users" msgstr "Usuarios registrados" -#: web/ejabberd_web_admin.erl:1574 +#: web/ejabberd_web_admin.erl:1573 msgid "Offline Messages" msgstr "Mensajes diferidos" -#: web/ejabberd_web_admin.erl:1575 web/ejabberd_web_admin.erl:1765 +#: web/ejabberd_web_admin.erl:1574 web/ejabberd_web_admin.erl:1767 msgid "Last Activity" msgstr "Última actividad" -#: web/ejabberd_web_admin.erl:1657 web/ejabberd_web_admin.erl:1673 +#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 msgid "Registered Users:" msgstr "Usuarios registrados:" -#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 -#: web/ejabberd_web_admin.erl:2191 +#: web/ejabberd_web_admin.erl:1661 web/ejabberd_web_admin.erl:1677 +#: web/ejabberd_web_admin.erl:2192 msgid "Online Users:" msgstr "Usuarios conectados:" -#: web/ejabberd_web_admin.erl:1661 +#: web/ejabberd_web_admin.erl:1663 msgid "Outgoing s2s Connections:" msgstr "Conexiones S2S salientes:" -#: web/ejabberd_web_admin.erl:1663 +#: web/ejabberd_web_admin.erl:1665 msgid "Outgoing s2s Servers:" msgstr "Servidores S2S salientes:" -#: web/ejabberd_web_admin.erl:1732 web/mod_register_web.erl:175 +#: web/ejabberd_web_admin.erl:1734 web/mod_register_web.erl:175 #: web/mod_register_web.erl:372 web/mod_register_web.erl:381 #: web/mod_register_web.erl:411 msgid "Change Password" msgstr "Cambiar contraseña" -#: web/ejabberd_web_admin.erl:1756 +#: web/ejabberd_web_admin.erl:1758 msgid "User " msgstr "Usuario " -#: web/ejabberd_web_admin.erl:1763 +#: web/ejabberd_web_admin.erl:1765 msgid "Connected Resources:" msgstr "Recursos conectados:" -#: web/ejabberd_web_admin.erl:1764 web/mod_register_web.erl:227 +#: web/ejabberd_web_admin.erl:1766 web/mod_register_web.erl:227 #: web/mod_register_web.erl:519 msgid "Password:" msgstr "Contraseña:" -#: web/ejabberd_web_admin.erl:1826 +#: web/ejabberd_web_admin.erl:1828 msgid "No Data" msgstr "Sin datos" -#: web/ejabberd_web_admin.erl:1904 +#: web/ejabberd_web_admin.erl:1906 msgid "Nodes" msgstr "Nodos" -#: web/ejabberd_web_admin.erl:1927 web/ejabberd_web_admin.erl:1949 +#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1951 msgid "Node " msgstr "Nodo " -#: web/ejabberd_web_admin.erl:1936 +#: web/ejabberd_web_admin.erl:1938 msgid "Listened Ports" msgstr "Puertos de escucha" -#: web/ejabberd_web_admin.erl:1938 web/ejabberd_web_admin.erl:2259 -#: web/ejabberd_web_admin.erl:2447 +#: web/ejabberd_web_admin.erl:1940 web/ejabberd_web_admin.erl:2260 +#: web/ejabberd_web_admin.erl:2448 msgid "Update" msgstr "Actualizar" -#: web/ejabberd_web_admin.erl:1941 web/ejabberd_web_admin.erl:2568 +#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2569 msgid "Restart" msgstr "Reiniciar" -#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2570 +#: web/ejabberd_web_admin.erl:1945 web/ejabberd_web_admin.erl:2571 msgid "Stop" msgstr "Detener" -#: web/ejabberd_web_admin.erl:1957 +#: web/ejabberd_web_admin.erl:1959 msgid "RPC Call Error" msgstr "Error en la llamada RPC" -#: web/ejabberd_web_admin.erl:1998 +#: web/ejabberd_web_admin.erl:2000 msgid "Database Tables at " msgstr "Tablas de la base de datos en " -#: web/ejabberd_web_admin.erl:2005 +#: web/ejabberd_web_admin.erl:2007 msgid "Storage Type" msgstr "Tipo de almacenamiento" -#: web/ejabberd_web_admin.erl:2006 +#: web/ejabberd_web_admin.erl:2008 msgid "Elements" msgstr "Elementos" -#: web/ejabberd_web_admin.erl:2007 +#: web/ejabberd_web_admin.erl:2009 msgid "Memory" msgstr "Memoria" -#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2032 web/ejabberd_web_admin.erl:2137 msgid "Error" msgstr "Error" -#: web/ejabberd_web_admin.erl:2033 +#: web/ejabberd_web_admin.erl:2034 msgid "Backup of " msgstr "Copia de seguridad de " -#: web/ejabberd_web_admin.erl:2035 +#: web/ejabberd_web_admin.erl:2036 msgid "" "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 " @@ -1542,145 +1598,145 @@ msgstr "" "datos Mnesia embebida. Si estás usando ODBC tendrás que hacer también copia " "de seguridad de tu base de datos SQL." -#: web/ejabberd_web_admin.erl:2040 +#: web/ejabberd_web_admin.erl:2041 msgid "Store binary backup:" msgstr "Guardar copia de seguridad binaria:" -#: web/ejabberd_web_admin.erl:2044 web/ejabberd_web_admin.erl:2051 -#: web/ejabberd_web_admin.erl:2059 web/ejabberd_web_admin.erl:2066 -#: web/ejabberd_web_admin.erl:2073 web/ejabberd_web_admin.erl:2080 -#: web/ejabberd_web_admin.erl:2087 web/ejabberd_web_admin.erl:2095 -#: web/ejabberd_web_admin.erl:2102 web/ejabberd_web_admin.erl:2109 +#: web/ejabberd_web_admin.erl:2045 web/ejabberd_web_admin.erl:2052 +#: web/ejabberd_web_admin.erl:2060 web/ejabberd_web_admin.erl:2067 +#: web/ejabberd_web_admin.erl:2074 web/ejabberd_web_admin.erl:2081 +#: web/ejabberd_web_admin.erl:2088 web/ejabberd_web_admin.erl:2096 +#: web/ejabberd_web_admin.erl:2103 web/ejabberd_web_admin.erl:2110 msgid "OK" msgstr "Aceptar" -#: web/ejabberd_web_admin.erl:2047 +#: web/ejabberd_web_admin.erl:2048 msgid "Restore binary backup immediately:" msgstr "Restaurar inmediatamente copia de seguridad binaria:" -#: web/ejabberd_web_admin.erl:2055 +#: web/ejabberd_web_admin.erl:2056 msgid "" "Restore binary backup after next ejabberd restart (requires less memory):" msgstr "" "Restaurar copia de seguridad binaria en el siguiente reinicio de ejabberd " "(requiere menos memoria que si instantánea):" -#: web/ejabberd_web_admin.erl:2062 +#: web/ejabberd_web_admin.erl:2063 msgid "Store plain text backup:" msgstr "Guardar copia de seguridad en texto plano:" -#: web/ejabberd_web_admin.erl:2069 +#: web/ejabberd_web_admin.erl:2070 msgid "Restore plain text backup immediately:" msgstr "Restaurar copias de seguridad de texto plano inmediatamente:" -#: web/ejabberd_web_admin.erl:2076 +#: web/ejabberd_web_admin.erl:2077 msgid "Import users data from a PIEFXIS file (XEP-0227):" msgstr "Importar usuarios desde un fichero PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2083 +#: web/ejabberd_web_admin.erl:2084 msgid "Export data of all users in the server to PIEFXIS files (XEP-0227):" msgstr "" "Exportar datos de todos los usuarios del servidor a ficheros PIEFXIS " "(XEP-0227):" -#: web/ejabberd_web_admin.erl:2090 +#: web/ejabberd_web_admin.erl:2091 msgid "Export data of users in a host to PIEFXIS files (XEP-0227):" msgstr "" "Exportar datos de los usuarios de un dominio a ficheros PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2098 +#: web/ejabberd_web_admin.erl:2099 msgid "Import user data from jabberd14 spool file:" msgstr "Importar usuario de fichero spool de jabberd14:" -#: web/ejabberd_web_admin.erl:2105 +#: web/ejabberd_web_admin.erl:2106 msgid "Import users data from jabberd14 spool directory:" msgstr "Importar usuarios del directorio spool de jabberd14:" -#: web/ejabberd_web_admin.erl:2131 +#: web/ejabberd_web_admin.erl:2132 msgid "Listened Ports at " msgstr "Puertos de escucha en " -#: web/ejabberd_web_admin.erl:2156 +#: web/ejabberd_web_admin.erl:2157 msgid "Modules at " msgstr "Módulos en " -#: web/ejabberd_web_admin.erl:2182 +#: web/ejabberd_web_admin.erl:2183 msgid "Statistics of ~p" msgstr "Estadísticas de ~p" -#: web/ejabberd_web_admin.erl:2185 +#: web/ejabberd_web_admin.erl:2186 msgid "Uptime:" msgstr "Tiempo desde el inicio:" -#: web/ejabberd_web_admin.erl:2188 +#: web/ejabberd_web_admin.erl:2189 msgid "CPU Time:" msgstr "Tiempo consumido de CPU:" -#: web/ejabberd_web_admin.erl:2194 +#: web/ejabberd_web_admin.erl:2195 msgid "Transactions Committed:" msgstr "Transacciones finalizadas:" -#: web/ejabberd_web_admin.erl:2197 +#: web/ejabberd_web_admin.erl:2198 msgid "Transactions Aborted:" msgstr "Transacciones abortadas:" -#: web/ejabberd_web_admin.erl:2200 +#: web/ejabberd_web_admin.erl:2201 msgid "Transactions Restarted:" msgstr "Transacciones reiniciadas:" -#: web/ejabberd_web_admin.erl:2203 +#: web/ejabberd_web_admin.erl:2204 msgid "Transactions Logged:" msgstr "Transacciones registradas:" -#: web/ejabberd_web_admin.erl:2245 +#: web/ejabberd_web_admin.erl:2246 msgid "Update " msgstr "Actualizar " -#: web/ejabberd_web_admin.erl:2253 +#: web/ejabberd_web_admin.erl:2254 msgid "Update plan" msgstr "Plan de actualización" -#: web/ejabberd_web_admin.erl:2254 +#: web/ejabberd_web_admin.erl:2255 msgid "Modified modules" msgstr "Módulos modificados" -#: web/ejabberd_web_admin.erl:2255 +#: web/ejabberd_web_admin.erl:2256 msgid "Update script" msgstr "Script de actualización" -#: web/ejabberd_web_admin.erl:2256 +#: web/ejabberd_web_admin.erl:2257 msgid "Low level update script" msgstr "Script de actualización a bajo nivel" -#: web/ejabberd_web_admin.erl:2257 +#: web/ejabberd_web_admin.erl:2258 msgid "Script check" msgstr "Comprobación de script" -#: web/ejabberd_web_admin.erl:2425 +#: web/ejabberd_web_admin.erl:2426 msgid "Port" msgstr "Puerto" -#: web/ejabberd_web_admin.erl:2426 +#: web/ejabberd_web_admin.erl:2427 msgid "IP" msgstr "IP" -#: web/ejabberd_web_admin.erl:2427 +#: web/ejabberd_web_admin.erl:2428 msgid "Protocol" msgstr "Protocolo" -#: web/ejabberd_web_admin.erl:2428 web/ejabberd_web_admin.erl:2555 +#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 msgid "Module" msgstr "Módulo" -#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 +#: web/ejabberd_web_admin.erl:2430 web/ejabberd_web_admin.erl:2557 msgid "Options" msgstr "Opciones" -#: web/ejabberd_web_admin.erl:2449 +#: web/ejabberd_web_admin.erl:2450 msgid "Delete" msgstr "Eliminar" -#: web/ejabberd_web_admin.erl:2578 +#: web/ejabberd_web_admin.erl:2579 msgid "Start" msgstr "Iniciar" diff --git a/src/msgs/fr.msg b/src/msgs/fr.msg index ee9ec2a38..3d508ec20 100644 --- a/src/msgs/fr.msg +++ b/src/msgs/fr.msg @@ -168,7 +168,7 @@ {"List of modules to start","Liste des modules à démarrer"}. {"Low level update script","Script de mise à jour de bas-niveau"}. {"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 moderated","Rendre le salon modéré"}. {"Make room password protected","Protéger le salon par mot de passe"}. @@ -338,7 +338,7 @@ {"Sunday","Dimanche"}. {"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"}. -{"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 collections with which a node is affiliated","Les collections avec lesquelle un nœud est affilié"}. {"the password is","le mot de passe est"}. @@ -365,7 +365,6 @@ {"Transactions Logged:","Transactions journalisées :"}. {"Transactions Restarted:","Transactions redémarrées :"}. {"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"}. {"Unauthorized","Non autorisé"}. {"Unregister a Jabber account","Effacer un compte Jabber"}. diff --git a/src/msgs/fr.po b/src/msgs/fr.po index c4453d03e..6eb1a8cff 100644 --- a/src/msgs/fr.po +++ b/src/msgs/fr.po @@ -22,11 +22,11 @@ msgstr "L'utilisation de STARTTLS est impérative" msgid "No resource provided" msgstr "Aucune ressource fournie" -#: ejabberd_c2s.erl:1149 +#: ejabberd_c2s.erl:1197 msgid "Replaced by new connection" msgstr "Remplacé par une nouvelle connexion" -#: ejabberd_c2s.erl:1837 +#: ejabberd_c2s.erl:1885 msgid "Your active privacy list has denied the routing of this stanza." msgstr "Votre règle de flitrage active a empêché le routage de ce stanza." @@ -48,8 +48,8 @@ msgid "CAPTCHA web page" msgstr "Page web de CAPTCHA" #: ejabberd_captcha.erl:307 -msgid "The captcha is valid." -msgstr "Le captcha est valide" +msgid "The CAPTCHA is valid." +msgstr "Le CAPTCHA est valide" #: mod_adhoc.erl:95 mod_adhoc.erl:125 mod_adhoc.erl:143 mod_adhoc.erl:161 msgid "Commands" @@ -63,67 +63,70 @@ msgstr "Ping" msgid "Pong" msgstr "Pong" -#: mod_announce.erl:506 +#: mod_announce.erl:507 mod_announce_odbc.erl:499 msgid "Really delete message of the day?" msgstr "Confirmer la suppression du message du jour ?" -#: mod_announce.erl:514 mod_configure.erl:1083 mod_configure.erl:1128 +#: mod_announce.erl:515 mod_announce_odbc.erl:507 mod_configure.erl:1083 +#: mod_configure.erl:1128 msgid "Subject" msgstr "Sujet" -#: mod_announce.erl:519 mod_configure.erl:1088 mod_configure.erl:1133 +#: mod_announce.erl:520 mod_announce_odbc.erl:512 mod_configure.erl:1088 +#: mod_configure.erl:1133 msgid "Message body" msgstr "Corps du message" -#: mod_announce.erl:599 +#: mod_announce.erl:600 mod_announce_odbc.erl:592 msgid "No body provided for announce message" msgstr "Pas de corps de message pour l'annonce" -#: mod_announce.erl:634 +#: mod_announce.erl:635 mod_announce_odbc.erl:627 msgid "Announcements" msgstr "Annonces" -#: mod_announce.erl:636 +#: mod_announce.erl:637 mod_announce_odbc.erl:629 msgid "Send announcement to all users" msgstr "Envoyer l'annonce à tous les utilisateurs" -#: mod_announce.erl:638 +#: mod_announce.erl:639 mod_announce_odbc.erl:631 msgid "Send announcement to all users on all hosts" msgstr "Envoyer une annonce à tous les utilisateurs de tous les domaines" -#: mod_announce.erl:640 +#: mod_announce.erl:641 mod_announce_odbc.erl:633 msgid "Send announcement to all online users" msgstr "Envoyer l'annonce à tous les utilisateurs en ligne" -#: mod_announce.erl:642 mod_configure.erl:1078 mod_configure.erl:1123 +#: mod_announce.erl:643 mod_announce_odbc.erl:635 mod_configure.erl:1078 +#: mod_configure.erl:1123 msgid "Send announcement to all online users on all hosts" msgstr "" "Envoyer l'annonce à tous les utilisateurs en ligne sur tous les serveurs" -#: mod_announce.erl:644 +#: mod_announce.erl:645 mod_announce_odbc.erl:637 msgid "Set message of the day and send to online users" msgstr "Définir le message du jour et l'envoyer aux utilisateurs en ligne" -#: mod_announce.erl:646 +#: mod_announce.erl:647 mod_announce_odbc.erl:639 msgid "Set message of the day on all hosts and send to online users" msgstr "" "Définir le message du jour pour tous domaines et l'envoyer aux utilisateurs " "en ligne" -#: mod_announce.erl:648 +#: mod_announce.erl:649 mod_announce_odbc.erl:641 msgid "Update message of the day (don't send)" msgstr "Mise à jour du message du jour (pas d'envoi)" -#: mod_announce.erl:650 +#: mod_announce.erl:651 mod_announce_odbc.erl:643 msgid "Update message of the day on all hosts (don't send)" msgstr "" "Mettre à jour le message du jour sur tous les domaines (ne pas envoyer)" -#: mod_announce.erl:652 +#: mod_announce.erl:653 mod_announce_odbc.erl:645 msgid "Delete message of the day" msgstr "Supprimer le message du jour" -#: mod_announce.erl:654 +#: mod_announce.erl:655 mod_announce_odbc.erl:647 msgid "Delete message of the day on all hosts" msgstr "Supprimer le message du jour sur tous les domaines" @@ -132,7 +135,7 @@ msgstr "Supprimer le message du jour sur tous les domaines" msgid "Configuration" msgstr "Configuration" -#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1934 +#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1936 msgid "Database" msgstr "Base de données" @@ -144,7 +147,7 @@ msgstr "Modules de démarrage" msgid "Stop Modules" msgstr "Modules d'arrêt" -#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1935 +#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1937 msgid "Backup" msgstr "Sauvegarde" @@ -173,7 +176,7 @@ msgid "Shut Down Service" msgstr "Arrêter le service" #: mod_configure.erl:145 mod_configure.erl:518 mod_configure.erl:1197 -#: web/ejabberd_web_admin.erl:1528 +#: web/ejabberd_web_admin.erl:1527 msgid "Add User" msgstr "Ajouter un utilisateur" @@ -225,7 +228,7 @@ msgid "User Management" msgstr "Gestion des utilisateurs" #: mod_configure.erl:500 web/ejabberd_web_admin.erl:1058 -#: web/ejabberd_web_admin.erl:1463 +#: web/ejabberd_web_admin.erl:1462 msgid "Online Users" msgstr "Utilisateurs en ligne" @@ -237,15 +240,15 @@ msgstr "Tous les utilisateurs" msgid "Outgoing s2s Connections" msgstr "Connexions s2s sortantes" -#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1905 +#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1907 msgid "Running Nodes" msgstr "Noeuds actifs" -#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1907 +#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1909 msgid "Stopped Nodes" msgstr "Noeuds arrêtés" -#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1951 +#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1953 msgid "Modules" msgstr "Modules" @@ -376,15 +379,15 @@ msgstr "Règles d'accès" #: mod_configure.erl:1200 mod_configure.erl:1222 mod_configure.erl:1234 #: mod_configure.erl:1246 mod_configure.erl:1258 mod_configure.erl:1275 -#: mod_configure.erl:1287 mod_configure.erl:1652 mod_configure.erl:1702 -#: mod_configure.erl:1723 mod_roster.erl:943 mod_roster_odbc.erl:1048 -#: mod_vcard.erl:466 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:442 +#: mod_configure.erl:1287 mod_configure.erl:1650 mod_configure.erl:1700 +#: mod_configure.erl:1721 mod_roster.erl:943 mod_roster_odbc.erl:1060 +#: mod_vcard.erl:472 mod_vcard_ldap.erl:554 mod_vcard_odbc.erl:448 msgid "Jabber ID" msgstr "Jabber ID" -#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1653 -#: mod_configure.erl:1865 mod_muc/mod_muc_room.erl:2970 mod_register.erl:235 -#: web/ejabberd_web_admin.erl:1521 +#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1651 +#: mod_configure.erl:1863 mod_muc/mod_muc_room.erl:3224 mod_register.erl:235 +#: web/ejabberd_web_admin.erl:1520 msgid "Password" msgstr "Mot de passe" @@ -400,70 +403,71 @@ msgstr "Nombre d'utilisateurs enregistrés" msgid "Number of online users" msgstr "Nombre d'utilisateurs en ligne" -#: mod_configure.erl:1684 web/ejabberd_web_admin.erl:1589 -#: web/ejabberd_web_admin.erl:1741 +#: mod_configure.erl:1682 web/ejabberd_web_admin.erl:1588 +#: web/ejabberd_web_admin.erl:1743 msgid "Never" msgstr "Jamais" -#: mod_configure.erl:1698 web/ejabberd_web_admin.erl:1602 -#: web/ejabberd_web_admin.erl:1754 +#: mod_configure.erl:1696 web/ejabberd_web_admin.erl:1601 +#: web/ejabberd_web_admin.erl:1756 msgid "Online" msgstr "En ligne" -#: mod_configure.erl:1703 +#: mod_configure.erl:1701 msgid "Last login" msgstr "Dernière connexion" -#: mod_configure.erl:1724 +#: mod_configure.erl:1722 msgid "Roster size" msgstr "Taille de la liste de contacts" -#: mod_configure.erl:1725 +#: mod_configure.erl:1723 msgid "IP addresses" msgstr "Adresses IP" -#: mod_configure.erl:1726 +#: mod_configure.erl:1724 msgid "Resources" msgstr "Ressources" -#: mod_configure.erl:1852 +#: mod_configure.erl:1850 msgid "Administration of " msgstr "Administration de " -#: mod_configure.erl:1855 +#: mod_configure.erl:1853 msgid "Action on user" msgstr "Action sur l'utilisateur" -#: mod_configure.erl:1859 +#: mod_configure.erl:1857 msgid "Edit Properties" msgstr "Modifier les propriétés" -#: mod_configure.erl:1862 web/ejabberd_web_admin.erl:1767 +#: mod_configure.erl:1860 web/ejabberd_web_admin.erl:1769 msgid "Remove User" msgstr "Supprimer l'utilisateur" -#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:336 +#: mod_irc/mod_irc.erl:201 mod_irc/mod_irc_odbc.erl:196 +#: mod_muc/mod_muc.erl:336 mod_muc/mod_muc_odbc.erl:342 msgid "Access denied by service policy" msgstr "L'accès au service est refusé" -#: mod_irc/mod_irc.erl:400 +#: mod_irc/mod_irc.erl:401 mod_irc/mod_irc_odbc.erl:398 msgid "IRC Transport" msgstr "Passerelle IRC" -#: mod_irc/mod_irc.erl:427 +#: mod_irc/mod_irc.erl:428 mod_irc/mod_irc_odbc.erl:425 msgid "ejabberd IRC module" msgstr "Module IRC ejabberd" -#: mod_irc/mod_irc.erl:558 +#: mod_irc/mod_irc.erl:559 mod_irc/mod_irc_odbc.erl:568 msgid "You need an x:data capable client to configure mod_irc settings" msgstr "" "Vous avez besoin d'un client supportant x:data pour configurer le module IRC" -#: mod_irc/mod_irc.erl:565 +#: mod_irc/mod_irc.erl:566 mod_irc/mod_irc_odbc.erl:575 msgid "Registration in mod_irc for " msgstr "Enregistrement du mod_irc pour " -#: mod_irc/mod_irc.erl:570 +#: mod_irc/mod_irc.erl:571 mod_irc/mod_irc_odbc.erl:580 msgid "" "Enter username, encodings, ports and passwords you wish to use for " "connecting to IRC servers" @@ -471,11 +475,11 @@ msgstr "" "Entrez le nom d'utilisateur, les encodages, les ports et mots de passe que " "vous souhaitez utiliser pour vous connecter aux serveurs IRC" -#: mod_irc/mod_irc.erl:575 +#: mod_irc/mod_irc.erl:576 mod_irc/mod_irc_odbc.erl:585 msgid "IRC Username" msgstr "Nom d'utilisateur IRC" -#: mod_irc/mod_irc.erl:585 +#: mod_irc/mod_irc.erl:586 mod_irc/mod_irc_odbc.erl:595 msgid "" "If you want to specify different ports, passwords, encodings for IRC " "servers, fill this list with values in format '{\"irc server\", \"encoding" @@ -487,7 +491,7 @@ msgstr "" "'{\"serveur irc\", \"encodage\", port, \"mot de passe\"}'. Par défaut ce " "service utilise l'encodage \"~s\", port ~p, mot de passe vide." -#: mod_irc/mod_irc.erl:597 +#: mod_irc/mod_irc.erl:598 mod_irc/mod_irc_odbc.erl:607 msgid "" "Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." @@ -495,35 +499,36 @@ msgstr "" "Exemple: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." -#: mod_irc/mod_irc.erl:602 +#: mod_irc/mod_irc.erl:603 mod_irc/mod_irc_odbc.erl:612 msgid "Connections parameters" msgstr "Paramètres de connexion" -#: mod_irc/mod_irc.erl:727 +#: mod_irc/mod_irc.erl:728 mod_irc/mod_irc_odbc.erl:757 msgid "Join IRC channel" msgstr "Rejoindre un canal IRC" -#: mod_irc/mod_irc.erl:731 +#: mod_irc/mod_irc.erl:732 mod_irc/mod_irc_odbc.erl:761 msgid "IRC channel (don't put the first #)" msgstr "Canal IRC (ne pas insérer le premier caractère #)" -#: mod_irc/mod_irc.erl:736 +#: mod_irc/mod_irc.erl:737 mod_irc/mod_irc_odbc.erl:766 msgid "IRC server" msgstr "Serveur IRC" -#: mod_irc/mod_irc.erl:769 mod_irc/mod_irc.erl:773 +#: mod_irc/mod_irc.erl:770 mod_irc/mod_irc.erl:774 +#: mod_irc/mod_irc_odbc.erl:799 mod_irc/mod_irc_odbc.erl:803 msgid "Join the IRC channel here." msgstr "Rejoindre un canal IRC ici" -#: mod_irc/mod_irc.erl:777 +#: mod_irc/mod_irc.erl:778 mod_irc/mod_irc_odbc.erl:807 msgid "Join the IRC channel in this Jabber ID: ~s" msgstr "Rejoindre un canal IRC avec ce Jabber ID: ~s" -#: mod_irc/mod_irc.erl:862 +#: mod_irc/mod_irc.erl:863 mod_irc/mod_irc_odbc.erl:904 msgid "IRC settings" msgstr "Configuration IRC" -#: mod_irc/mod_irc.erl:867 +#: mod_irc/mod_irc.erl:868 mod_irc/mod_irc_odbc.erl:909 msgid "" "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 " @@ -533,74 +538,75 @@ msgstr "" "pour vous connecter aux serveurs IRC. Appuyez sur 'Suivant' pour pour avoir " "d'autres champs à remplir. Appuyez sur 'Terminer' pour sauver les paramètres." -#: mod_irc/mod_irc.erl:873 +#: mod_irc/mod_irc.erl:874 mod_irc/mod_irc_odbc.erl:915 msgid "IRC username" msgstr "Nom d'utilisateur IRC" -#: mod_irc/mod_irc.erl:922 +#: mod_irc/mod_irc.erl:923 mod_irc/mod_irc_odbc.erl:964 msgid "Password ~b" msgstr "Mot de passe ~b" -#: mod_irc/mod_irc.erl:927 +#: mod_irc/mod_irc.erl:928 mod_irc/mod_irc_odbc.erl:969 msgid "Port ~b" msgstr "Port ~b" -#: mod_irc/mod_irc.erl:932 +#: mod_irc/mod_irc.erl:933 mod_irc/mod_irc_odbc.erl:974 msgid "Encoding for server ~b" msgstr "Codage pour le serveur ~b" -#: mod_irc/mod_irc.erl:941 +#: mod_irc/mod_irc.erl:942 mod_irc/mod_irc_odbc.erl:983 msgid "Server ~b" msgstr "Serveur ~b" -#: mod_muc/mod_muc.erl:449 +#: mod_muc/mod_muc.erl:449 mod_muc/mod_muc_odbc.erl:456 msgid "Only service administrators are allowed to send service messages" msgstr "" "Seuls les administrateurs du service sont autoriser à envoyer des messages " "de service" -#: mod_muc/mod_muc.erl:493 +#: mod_muc/mod_muc.erl:493 mod_muc/mod_muc_odbc.erl:500 msgid "Room creation is denied by service policy" msgstr "La création de salons est interdite par le service" -#: mod_muc/mod_muc.erl:500 +#: mod_muc/mod_muc.erl:500 mod_muc/mod_muc_odbc.erl:507 msgid "Conference room does not exist" msgstr "La salle de conférence n'existe pas" -#: mod_muc/mod_muc.erl:581 +#: mod_muc/mod_muc.erl:582 mod_muc/mod_muc_odbc.erl:595 msgid "Chatrooms" msgstr "Salons de discussion" -#: mod_muc/mod_muc.erl:711 +#: mod_muc/mod_muc.erl:712 mod_muc/mod_muc_odbc.erl:729 msgid "You need a client that supports x:data to register the nickname" msgstr "" "Vous avez besoin d'un client prenant en charge x:data pour enregistrer un " "pseudo" -#: mod_muc/mod_muc.erl:717 +#: mod_muc/mod_muc.erl:718 mod_muc/mod_muc_odbc.erl:735 msgid "Nickname Registration at " msgstr "Enregistrement d'un pseudo sur " -#: mod_muc/mod_muc.erl:721 +#: mod_muc/mod_muc.erl:722 mod_muc/mod_muc_odbc.erl:739 msgid "Enter nickname you want to register" msgstr "Entrez le pseudo que vous souhaitez enregistrer" -#: mod_muc/mod_muc.erl:722 mod_roster.erl:944 mod_roster_odbc.erl:1049 -#: mod_vcard.erl:358 mod_vcard.erl:471 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:447 +#: mod_muc/mod_muc.erl:723 mod_muc/mod_muc_odbc.erl:740 +#: mod_muc/mod_muc_room.erl:3810 mod_roster.erl:944 mod_roster_odbc.erl:1061 +#: mod_vcard.erl:364 mod_vcard.erl:477 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:453 msgid "Nickname" msgstr "Pseudo" -#: mod_muc/mod_muc.erl:761 mod_muc/mod_muc_room.erl:933 -#: mod_muc/mod_muc_room.erl:1577 +#: mod_muc/mod_muc.erl:762 mod_muc/mod_muc_odbc.erl:784 +#: mod_muc/mod_muc_room.erl:1064 mod_muc/mod_muc_room.erl:1787 msgid "That nickname is registered by another person" msgstr "Le pseudo est enregistré par une autre personne" -#: mod_muc/mod_muc.erl:787 +#: mod_muc/mod_muc.erl:788 mod_muc/mod_muc_odbc.erl:811 msgid "You must fill in field \"Nickname\" in the form" msgstr "Vous devez préciser le champ \"pseudo\" dans le formulaire" -#: mod_muc/mod_muc.erl:807 +#: mod_muc/mod_muc.erl:808 mod_muc/mod_muc_odbc.erl:831 msgid "ejabberd MUC module" msgstr "Module MUC ejabberd" @@ -640,8 +646,8 @@ msgstr "a été éjecté en raison de l'arrêt du système" msgid "is now known as" msgstr "est maintenant connu comme" -#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:689 -#: mod_muc/mod_muc_room.erl:2138 +#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:688 +#: mod_muc/mod_muc_room.erl:2393 msgid " has set the subject to: " msgstr " a changé le sujet pour: " @@ -737,33 +743,49 @@ msgstr "Novembre" msgid "December" msgstr "Décembre" -#: mod_muc/mod_muc_log.erl:751 +#: mod_muc/mod_muc_log.erl:750 msgid "Room Configuration" msgstr "Configuration du salon" -#: mod_muc/mod_muc_log.erl:760 +#: mod_muc/mod_muc_log.erl:759 msgid "Room Occupants" msgstr "Occupants du salon" -#: mod_muc/mod_muc_room.erl:170 +#: mod_muc/mod_muc_room.erl:174 msgid "Traffic rate limit is exceeded" msgstr "La limite de trafic a été dépassée" -#: mod_muc/mod_muc_room.erl:242 +#: mod_muc/mod_muc_room.erl:246 msgid "" "This participant is kicked from the room because he sent an error message" msgstr "" "Ce participant est expulsé du salon pour avoir envoyé un message erronée" -#: mod_muc/mod_muc_room.erl:251 +#: mod_muc/mod_muc_room.erl:255 msgid "It is not allowed to send private messages to the conference" msgstr "Il n'est pas permis d'envoyer des messages \"normaux\" à la conférence" -#: mod_muc/mod_muc_room.erl:296 +#: mod_muc/mod_muc_room.erl:332 +msgid "Please, wait for a while before sending new voice request" +msgstr "" + +#: mod_muc/mod_muc_room.erl:347 +msgid "Voice requests are disabled in this conference" +msgstr "" + +#: mod_muc/mod_muc_room.erl:364 +msgid "Failed to extract JID from your voice request approval" +msgstr "" + +#: mod_muc/mod_muc_room.erl:393 +msgid "Only moderators can approve voice requests" +msgstr "" + +#: mod_muc/mod_muc_room.erl:408 msgid "Improper message type" msgstr "Mauvais type de message" -#: mod_muc/mod_muc_room.erl:406 +#: mod_muc/mod_muc_room.erl:518 msgid "" "This participant is kicked from the room because he sent an error message to " "another participant" @@ -771,36 +793,36 @@ msgstr "" "Ce participant est expulsé du salon pour avoir envoyé un message erronée à " "un autre participant" -#: mod_muc/mod_muc_room.erl:419 +#: mod_muc/mod_muc_room.erl:531 msgid "It is not allowed to send private messages of type \"groupchat\"" msgstr "" "Il n'est pas permis d'envoyer des messages privés de type \"groupchat\"" -#: mod_muc/mod_muc_room.erl:431 mod_muc/mod_muc_room.erl:486 +#: mod_muc/mod_muc_room.erl:543 mod_muc/mod_muc_room.erl:611 msgid "Recipient is not in the conference room" msgstr "Le destinataire n'est pas dans la conférence" -#: mod_muc/mod_muc_room.erl:451 mod_muc/mod_muc_room.erl:829 -#: mod_muc/mod_muc_room.erl:3609 -msgid "Only occupants are allowed to send messages to the conference" -msgstr "Seuls les occupants peuvent envoyer des messages à la conférence" - -#: mod_muc/mod_muc_room.erl:460 +#: mod_muc/mod_muc_room.erl:564 mod_muc/mod_muc_room.erl:585 msgid "It is not allowed to send private messages" msgstr "L'envoi de messages privés n'est pas autorisé" -#: mod_muc/mod_muc_room.erl:509 +#: mod_muc/mod_muc_room.erl:576 mod_muc/mod_muc_room.erl:956 +#: mod_muc/mod_muc_room.erl:4040 +msgid "Only occupants are allowed to send messages to the conference" +msgstr "Seuls les occupants peuvent envoyer des messages à la conférence" + +#: mod_muc/mod_muc_room.erl:634 msgid "Only occupants are allowed to send queries to the conference" msgstr "" "Seuls les occupants sont autorisés à envoyer des requêtes à la conférence" -#: mod_muc/mod_muc_room.erl:521 +#: mod_muc/mod_muc_room.erl:646 msgid "Queries to the conference members are not allowed in this room" msgstr "" "Les requêtes sur les membres de la conférence ne sont pas autorisé dans ce " "salon" -#: mod_muc/mod_muc_room.erl:805 +#: mod_muc/mod_muc_room.erl:932 msgid "" "Only moderators and participants are allowed to change the subject in this " "room" @@ -808,201 +830,236 @@ msgstr "" "Seuls les modérateurs et les participants peuvent changer le sujet dans ce " "salon" -#: mod_muc/mod_muc_room.erl:810 +#: mod_muc/mod_muc_room.erl:937 msgid "Only moderators are allowed to change the subject in this room" msgstr "Seuls les modérateurs peuvent changer le sujet dans ce salon" -#: mod_muc/mod_muc_room.erl:820 +#: mod_muc/mod_muc_room.erl:947 msgid "Visitors are not allowed to send messages to all occupants" msgstr "" "Les visiteurs ne sont pas autorisés à envoyer des messages à tout les " "occupants" -#: mod_muc/mod_muc_room.erl:891 +#: mod_muc/mod_muc_room.erl:1021 msgid "" "This participant is kicked from the room because he sent an error presence" msgstr "" "Ce participant est expulsé du salon pour avoir envoyé une présence erronée" -#: mod_muc/mod_muc_room.erl:909 +#: mod_muc/mod_muc_room.erl:1040 msgid "Visitors are not allowed to change their nicknames in this room" msgstr "Les visiteurs ne sont pas autorisés à changer de pseudo dans ce salon" -#: mod_muc/mod_muc_room.erl:922 mod_muc/mod_muc_room.erl:1569 +#: mod_muc/mod_muc_room.erl:1053 mod_muc/mod_muc_room.erl:1779 msgid "That nickname is already in use by another occupant" msgstr "Le pseudo est déjà utilisé par un autre occupant" -#: mod_muc/mod_muc_room.erl:1558 +#: mod_muc/mod_muc_room.erl:1768 msgid "You have been banned from this room" msgstr "Vous avez été exclus de ce salon" -#: mod_muc/mod_muc_room.erl:1561 +#: mod_muc/mod_muc_room.erl:1771 msgid "Membership is required to enter this room" msgstr "Vous devez être membre pour accèder à ce salon" -#: mod_muc/mod_muc_room.erl:1597 +#: mod_muc/mod_muc_room.erl:1807 msgid "This room is not anonymous" msgstr "Ce salon n'est pas anonyme" -#: mod_muc/mod_muc_room.erl:1623 +#: mod_muc/mod_muc_room.erl:1833 msgid "A password is required to enter this room" msgstr "Un mot de passe est nécessaire pour accèder à ce salon" -#: mod_muc/mod_muc_room.erl:1645 mod_register.erl:246 +#: mod_muc/mod_muc_room.erl:1855 mod_register.erl:246 msgid "Too many CAPTCHA requests" msgstr "" -#: mod_muc/mod_muc_room.erl:1654 -msgid "Unable to generate a captcha" -msgstr "Impossible de générer le captcha" +#: mod_muc/mod_muc_room.erl:1864 mod_register.erl:251 +msgid "Unable to generate a CAPTCHA" +msgstr "Impossible de générer le CAPTCHA" -#: mod_muc/mod_muc_room.erl:1664 +#: mod_muc/mod_muc_room.erl:1874 msgid "Incorrect password" msgstr "Mot de passe incorrect" -#: mod_muc/mod_muc_room.erl:2193 +#: mod_muc/mod_muc_room.erl:2448 msgid "Administrator privileges required" msgstr "Les droits d'administrateur sont nécessaires" -#: mod_muc/mod_muc_room.erl:2208 +#: mod_muc/mod_muc_room.erl:2463 msgid "Moderator privileges required" msgstr "Les droits de modérateur sont nécessaires" -#: mod_muc/mod_muc_room.erl:2363 +#: mod_muc/mod_muc_room.erl:2619 msgid "Jabber ID ~s is invalid" msgstr "Le Jabber ID ~s n'est pas valide" -#: mod_muc/mod_muc_room.erl:2377 +#: mod_muc/mod_muc_room.erl:2633 msgid "Nickname ~s does not exist in the room" msgstr "Le pseudo ~s n'existe pas dans ce salon" -#: mod_muc/mod_muc_room.erl:2403 mod_muc/mod_muc_room.erl:2797 +#: mod_muc/mod_muc_room.erl:2659 mod_muc/mod_muc_room.erl:3049 msgid "Invalid affiliation: ~s" msgstr "Affiliation invalide : ~s" -#: mod_muc/mod_muc_room.erl:2460 +#: mod_muc/mod_muc_room.erl:2713 msgid "Invalid role: ~s" msgstr "Role invalide : ~s" -#: mod_muc/mod_muc_room.erl:2774 mod_muc/mod_muc_room.erl:2810 +#: mod_muc/mod_muc_room.erl:3026 mod_muc/mod_muc_room.erl:3062 msgid "Owner privileges required" msgstr "Les droits de propriétaire sont nécessaires" -#: mod_muc/mod_muc_room.erl:2941 +#: mod_muc/mod_muc_room.erl:3195 msgid "Configuration of room ~s" msgstr "Configuration pour le salon ~s" -#: mod_muc/mod_muc_room.erl:2946 +#: mod_muc/mod_muc_room.erl:3200 msgid "Room title" msgstr "Titre du salon" -#: mod_muc/mod_muc_room.erl:2949 mod_muc/mod_muc_room.erl:3388 +#: mod_muc/mod_muc_room.erl:3203 mod_muc/mod_muc_room.erl:3692 msgid "Room description" msgstr "Description :" -#: mod_muc/mod_muc_room.erl:2956 +#: mod_muc/mod_muc_room.erl:3210 msgid "Make room persistent" msgstr "Rendre le salon persistant" -#: mod_muc/mod_muc_room.erl:2961 +#: mod_muc/mod_muc_room.erl:3215 msgid "Make room public searchable" msgstr "Rendre le salon public" -#: mod_muc/mod_muc_room.erl:2964 +#: mod_muc/mod_muc_room.erl:3218 msgid "Make participants list public" msgstr "Rendre la liste des participants publique" -#: mod_muc/mod_muc_room.erl:2967 +#: mod_muc/mod_muc_room.erl:3221 msgid "Make room password protected" msgstr "Protéger le salon par mot de passe" -#: mod_muc/mod_muc_room.erl:2978 +#: mod_muc/mod_muc_room.erl:3232 msgid "Maximum Number of Occupants" msgstr "Nombre maximum d'occupants" -#: mod_muc/mod_muc_room.erl:2985 +#: mod_muc/mod_muc_room.erl:3239 msgid "No limit" msgstr "Pas de limite" -#: mod_muc/mod_muc_room.erl:2996 +#: mod_muc/mod_muc_room.erl:3250 msgid "Present real Jabber IDs to" msgstr "Rendre le Jabber ID réel visible pour" -#: mod_muc/mod_muc_room.erl:3004 +#: mod_muc/mod_muc_room.erl:3258 mod_muc/mod_muc_room.erl:3292 msgid "moderators only" msgstr "modérateurs seulement" -#: mod_muc/mod_muc_room.erl:3006 +#: mod_muc/mod_muc_room.erl:3260 mod_muc/mod_muc_room.erl:3294 msgid "anyone" msgstr "tout le monde" -#: mod_muc/mod_muc_room.erl:3008 +#: mod_muc/mod_muc_room.erl:3262 msgid "Make room members-only" msgstr "Réserver le salon aux membres uniquement" -#: mod_muc/mod_muc_room.erl:3011 +#: mod_muc/mod_muc_room.erl:3265 msgid "Make room moderated" msgstr "Rendre le salon modéré" -#: mod_muc/mod_muc_room.erl:3014 +#: mod_muc/mod_muc_room.erl:3268 msgid "Default users as participants" msgstr "Les utilisateurs sont par défaut participant" -#: mod_muc/mod_muc_room.erl:3017 +#: mod_muc/mod_muc_room.erl:3271 msgid "Allow users to change the subject" msgstr "Autoriser les utilisateurs à changer le sujet" -#: mod_muc/mod_muc_room.erl:3020 +#: mod_muc/mod_muc_room.erl:3274 msgid "Allow users to send private messages" msgstr "Autoriser les utilisateurs à envoyer des messages privés" -#: mod_muc/mod_muc_room.erl:3023 +#: mod_muc/mod_muc_room.erl:3279 +#, fuzzy +msgid "Allow visitors to send private messages to" +msgstr "Autoriser les utilisateurs à envoyer des messages privés" + +#: mod_muc/mod_muc_room.erl:3290 +msgid "nobody" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3296 msgid "Allow users to query other users" msgstr "" "Permettre aux utilisateurs d'envoyer des requêtes aux autres utilisateurs" -#: mod_muc/mod_muc_room.erl:3026 +#: mod_muc/mod_muc_room.erl:3299 msgid "Allow users to send invites" msgstr "Permettre aux utilisateurs d'envoyer des invitations" -#: mod_muc/mod_muc_room.erl:3029 +#: mod_muc/mod_muc_room.erl:3302 msgid "Allow visitors to send status text in presence updates" msgstr "Autoriser les visiteurs à envoyer un message d'état avec leur présence" -#: mod_muc/mod_muc_room.erl:3032 +#: mod_muc/mod_muc_room.erl:3305 msgid "Allow visitors to change nickname" msgstr "Autoriser les visiteurs à changer de pseudo" -#: mod_muc/mod_muc_room.erl:3038 -msgid "Make room captcha protected" -msgstr "Protéger le salon par un captcha" +#: mod_muc/mod_muc_room.erl:3308 +#, fuzzy +msgid "Allow visitors to send voice requests" +msgstr "Permettre aux utilisateurs d'envoyer des invitations" -#: mod_muc/mod_muc_room.erl:3043 +#: mod_muc/mod_muc_room.erl:3311 +msgid "Minimum interval between voice requests (in seconds)" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3317 +msgid "Make room CAPTCHA protected" +msgstr "Protéger le salon par un CAPTCHA" + +#: mod_muc/mod_muc_room.erl:3322 msgid "Exclude Jabber IDs from CAPTCHA challenge" msgstr "" -#: mod_muc/mod_muc_room.erl:3050 +#: mod_muc/mod_muc_room.erl:3329 msgid "Enable logging" msgstr "Activer l'archivage" -#: mod_muc/mod_muc_room.erl:3058 +#: mod_muc/mod_muc_room.erl:3337 msgid "You need an x:data capable client to configure room" msgstr "" "Vous avez besoin d'un client supportant x:data pour configurer le salon" -#: mod_muc/mod_muc_room.erl:3390 +#: mod_muc/mod_muc_room.erl:3694 msgid "Number of occupants" msgstr "Nombre d'occupants" -#: mod_muc/mod_muc_room.erl:3446 +#: mod_muc/mod_muc_room.erl:3750 msgid "private, " msgstr "privé" -#: mod_muc/mod_muc_room.erl:3529 +#: mod_muc/mod_muc_room.erl:3799 +msgid "Voice request" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3803 +msgid "Either approve or decline the voice request." +msgstr "" + +#: mod_muc/mod_muc_room.erl:3809 +#, fuzzy +msgid "User JID" +msgstr "Utilisateur " + +#: mod_muc/mod_muc_room.erl:3811 +msgid "Grant voice to this person?" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3960 msgid "~s invites you to the room ~s" msgstr "~s vous a invité dans la salle de discussion ~s" -#: mod_muc/mod_muc_room.erl:3538 +#: mod_muc/mod_muc_room.erl:3969 msgid "the password is" msgstr "le mot de passe est" @@ -1018,14 +1075,15 @@ msgid "~s's Offline Messages Queue" msgstr "~s messages en file d'attente" #: mod_offline.erl:563 mod_offline_odbc.erl:411 mod_roster.erl:987 -#: mod_roster_odbc.erl:1092 mod_shared_roster.erl:896 -#: mod_shared_roster.erl:1005 web/ejabberd_web_admin.erl:833 +#: mod_roster_odbc.erl:1104 mod_shared_roster.erl:901 +#: mod_shared_roster.erl:1010 mod_shared_roster_odbc.erl:930 +#: mod_shared_roster_odbc.erl:1039 web/ejabberd_web_admin.erl:833 #: web/ejabberd_web_admin.erl:874 web/ejabberd_web_admin.erl:942 #: web/ejabberd_web_admin.erl:978 web/ejabberd_web_admin.erl:1019 -#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1758 -#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1961 -#: web/ejabberd_web_admin.erl:2030 web/ejabberd_web_admin.erl:2134 -#: web/ejabberd_web_admin.erl:2159 web/ejabberd_web_admin.erl:2247 +#: web/ejabberd_web_admin.erl:1508 web/ejabberd_web_admin.erl:1760 +#: web/ejabberd_web_admin.erl:1931 web/ejabberd_web_admin.erl:1963 +#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2135 +#: web/ejabberd_web_admin.erl:2160 web/ejabberd_web_admin.erl:2248 msgid "Submitted" msgstr "Soumis" @@ -1045,8 +1103,9 @@ msgstr "A" msgid "Packet" msgstr "Paquet" -#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:903 -#: web/ejabberd_web_admin.erl:882 web/ejabberd_web_admin.erl:986 +#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:908 +#: mod_shared_roster_odbc.erl:937 web/ejabberd_web_admin.erl:882 +#: web/ejabberd_web_admin.erl:986 msgid "Delete Selected" msgstr "Suppression des éléments sélectionnés" @@ -1062,103 +1121,103 @@ msgstr "Effacer tous les messages hors ligne" msgid "ejabberd SOCKS5 Bytestreams module" msgstr "ejabberd SOCKS5 Bytestreams module" -#: mod_pubsub/mod_pubsub.erl:1119 mod_pubsub/mod_pubsub_odbc.erl:928 +#: mod_pubsub/mod_pubsub.erl:1120 mod_pubsub/mod_pubsub_odbc.erl:929 msgid "Publish-Subscribe" msgstr "Publication-Abonnement" -#: mod_pubsub/mod_pubsub.erl:1213 mod_pubsub/mod_pubsub_odbc.erl:1024 +#: mod_pubsub/mod_pubsub.erl:1214 mod_pubsub/mod_pubsub_odbc.erl:1025 msgid "ejabberd Publish-Subscribe module" msgstr "Module Publish-Subscribe d'ejabberd" -#: mod_pubsub/mod_pubsub.erl:1496 mod_pubsub/mod_pubsub_odbc.erl:1311 +#: mod_pubsub/mod_pubsub.erl:1497 mod_pubsub/mod_pubsub_odbc.erl:1312 msgid "PubSub subscriber request" msgstr "Demande d'abonnement PubSub" -#: mod_pubsub/mod_pubsub.erl:1498 mod_pubsub/mod_pubsub_odbc.erl:1313 +#: mod_pubsub/mod_pubsub.erl:1499 mod_pubsub/mod_pubsub_odbc.erl:1314 msgid "Choose whether to approve this entity's subscription." msgstr "Accepter cet abonnement ?" -#: mod_pubsub/mod_pubsub.erl:1504 mod_pubsub/mod_pubsub_odbc.erl:1319 +#: mod_pubsub/mod_pubsub.erl:1505 mod_pubsub/mod_pubsub_odbc.erl:1320 msgid "Node ID" msgstr "Identifiant du nœud" -#: mod_pubsub/mod_pubsub.erl:1509 mod_pubsub/mod_pubsub_odbc.erl:1324 +#: mod_pubsub/mod_pubsub.erl:1510 mod_pubsub/mod_pubsub_odbc.erl:1325 msgid "Subscriber Address" msgstr "Adresse de l'abonné" -#: mod_pubsub/mod_pubsub.erl:1515 mod_pubsub/mod_pubsub_odbc.erl:1330 +#: mod_pubsub/mod_pubsub.erl:1516 mod_pubsub/mod_pubsub_odbc.erl:1331 msgid "Allow this Jabber ID to subscribe to this pubsub node?" msgstr "Autoriser ce Jabber ID à s'abonner à ce nœud PubSub" -#: mod_pubsub/mod_pubsub.erl:3416 mod_pubsub/mod_pubsub_odbc.erl:3229 +#: mod_pubsub/mod_pubsub.erl:3474 mod_pubsub/mod_pubsub_odbc.erl:3287 msgid "Deliver payloads with event notifications" msgstr "Inclure le contenu du message avec la notification" -#: mod_pubsub/mod_pubsub.erl:3417 mod_pubsub/mod_pubsub_odbc.erl:3230 +#: mod_pubsub/mod_pubsub.erl:3475 mod_pubsub/mod_pubsub_odbc.erl:3288 msgid "Deliver event notifications" msgstr "Envoyer les notifications d'événement" -#: mod_pubsub/mod_pubsub.erl:3418 mod_pubsub/mod_pubsub_odbc.erl:3231 +#: mod_pubsub/mod_pubsub.erl:3476 mod_pubsub/mod_pubsub_odbc.erl:3289 msgid "Notify subscribers when the node configuration changes" msgstr "Avertir les abonnés lorsque la configuration du nœud change" -#: mod_pubsub/mod_pubsub.erl:3419 mod_pubsub/mod_pubsub_odbc.erl:3232 +#: mod_pubsub/mod_pubsub.erl:3477 mod_pubsub/mod_pubsub_odbc.erl:3290 msgid "Notify subscribers when the node is deleted" msgstr "Avertir les abonnés lorsque le nœud est supprimé" -#: mod_pubsub/mod_pubsub.erl:3420 mod_pubsub/mod_pubsub_odbc.erl:3233 +#: mod_pubsub/mod_pubsub.erl:3478 mod_pubsub/mod_pubsub_odbc.erl:3291 msgid "Notify subscribers when items are removed from the node" msgstr "Avertir les abonnés lorsque des éléments sont supprimés sur le nœud" -#: mod_pubsub/mod_pubsub.erl:3421 mod_pubsub/mod_pubsub_odbc.erl:3234 +#: mod_pubsub/mod_pubsub.erl:3479 mod_pubsub/mod_pubsub_odbc.erl:3292 msgid "Persist items to storage" msgstr "Stockage persistant des éléments" -#: mod_pubsub/mod_pubsub.erl:3422 mod_pubsub/mod_pubsub_odbc.erl:3235 +#: mod_pubsub/mod_pubsub.erl:3480 mod_pubsub/mod_pubsub_odbc.erl:3293 msgid "A friendly name for the node" msgstr "Un nom convivial pour le noeud" -#: mod_pubsub/mod_pubsub.erl:3423 mod_pubsub/mod_pubsub_odbc.erl:3236 +#: mod_pubsub/mod_pubsub.erl:3481 mod_pubsub/mod_pubsub_odbc.erl:3294 msgid "Max # of items to persist" msgstr "Nombre maximum d'éléments à stocker" -#: mod_pubsub/mod_pubsub.erl:3424 mod_pubsub/mod_pubsub_odbc.erl:3237 +#: mod_pubsub/mod_pubsub.erl:3482 mod_pubsub/mod_pubsub_odbc.erl:3295 msgid "Whether to allow subscriptions" msgstr "Autoriser l'abonnement ?" -#: mod_pubsub/mod_pubsub.erl:3425 mod_pubsub/mod_pubsub_odbc.erl:3238 +#: mod_pubsub/mod_pubsub.erl:3483 mod_pubsub/mod_pubsub_odbc.erl:3296 msgid "Specify the access model" msgstr "Définir le modèle d'accès" -#: mod_pubsub/mod_pubsub.erl:3428 mod_pubsub/mod_pubsub_odbc.erl:3241 +#: mod_pubsub/mod_pubsub.erl:3486 mod_pubsub/mod_pubsub_odbc.erl:3299 msgid "Roster groups allowed to subscribe" msgstr "Groupes de liste de contact autorisés à s'abonner" -#: mod_pubsub/mod_pubsub.erl:3429 mod_pubsub/mod_pubsub_odbc.erl:3242 +#: mod_pubsub/mod_pubsub.erl:3487 mod_pubsub/mod_pubsub_odbc.erl:3300 msgid "Specify the publisher model" msgstr "Définir le modèle de publication" -#: mod_pubsub/mod_pubsub.erl:3431 mod_pubsub/mod_pubsub_odbc.erl:3244 +#: mod_pubsub/mod_pubsub.erl:3489 mod_pubsub/mod_pubsub_odbc.erl:3302 msgid "Purge all items when the relevant publisher goes offline" msgstr "Purger tous les items lorsque publieur est hors-ligne" -#: mod_pubsub/mod_pubsub.erl:3432 mod_pubsub/mod_pubsub_odbc.erl:3245 +#: mod_pubsub/mod_pubsub.erl:3490 mod_pubsub/mod_pubsub_odbc.erl:3303 msgid "Specify the event message type" msgstr "Définir le type de message d'événement" -#: mod_pubsub/mod_pubsub.erl:3434 mod_pubsub/mod_pubsub_odbc.erl:3247 +#: mod_pubsub/mod_pubsub.erl:3492 mod_pubsub/mod_pubsub_odbc.erl:3305 msgid "Max payload size in bytes" msgstr "Taille maximum pour le contenu du message en octet" -#: mod_pubsub/mod_pubsub.erl:3435 mod_pubsub/mod_pubsub_odbc.erl:3248 +#: mod_pubsub/mod_pubsub.erl:3493 mod_pubsub/mod_pubsub_odbc.erl:3306 msgid "When to send the last published item" msgstr "A quel moment envoyer le dernier élément publié" -#: mod_pubsub/mod_pubsub.erl:3437 mod_pubsub/mod_pubsub_odbc.erl:3250 +#: mod_pubsub/mod_pubsub.erl:3495 mod_pubsub/mod_pubsub_odbc.erl:3308 msgid "Only deliver notifications to available users" msgstr "Envoyer les notifications uniquement aux utilisateurs disponibles" -#: mod_pubsub/mod_pubsub.erl:3438 mod_pubsub/mod_pubsub_odbc.erl:3251 +#: mod_pubsub/mod_pubsub.erl:3496 mod_pubsub/mod_pubsub_odbc.erl:3309 msgid "The collections with which a node is affiliated" msgstr "Les collections avec lesquelle un nœud est affilié" @@ -1178,15 +1237,11 @@ msgstr "" "Choisissez un nom d'utilisateur et un mot de passe pour s'enregistrer sur ce " "serveur" -#: mod_register.erl:230 mod_vcard.erl:358 mod_vcard_odbc.erl:336 -#: web/ejabberd_web_admin.erl:1516 web/ejabberd_web_admin.erl:1573 +#: mod_register.erl:230 mod_vcard.erl:364 mod_vcard_odbc.erl:342 +#: web/ejabberd_web_admin.erl:1515 web/ejabberd_web_admin.erl:1572 msgid "User" msgstr "Utilisateur" -#: mod_register.erl:251 -msgid "Unable to generate a CAPTCHA" -msgstr "Impossible de générer le CAPTCHA" - #: mod_register.erl:316 mod_register.erl:361 msgid "The password is too weak" msgstr "Le mot de passe est trop faible" @@ -1197,120 +1252,123 @@ msgstr "" "Les utilisateurs ne sont pas autorisés à enregistrer des comptes si " "rapidement" -#: mod_roster.erl:938 mod_roster_odbc.erl:1043 web/ejabberd_web_admin.erl:1699 -#: web/ejabberd_web_admin.erl:1884 web/ejabberd_web_admin.erl:1895 -#: web/ejabberd_web_admin.erl:2218 +#: mod_roster.erl:938 mod_roster_odbc.erl:1055 web/ejabberd_web_admin.erl:1701 +#: web/ejabberd_web_admin.erl:1886 web/ejabberd_web_admin.erl:1897 +#: web/ejabberd_web_admin.erl:2219 msgid "None" msgstr "Aucun" -#: mod_roster.erl:945 mod_roster_odbc.erl:1050 +#: mod_roster.erl:945 mod_roster_odbc.erl:1062 msgid "Subscription" msgstr "Abonnement" -#: mod_roster.erl:946 mod_roster_odbc.erl:1051 +#: mod_roster.erl:946 mod_roster_odbc.erl:1063 msgid "Pending" msgstr "En suspens" -#: mod_roster.erl:947 mod_roster_odbc.erl:1052 +#: mod_roster.erl:947 mod_roster_odbc.erl:1064 msgid "Groups" msgstr "Groupes" -#: mod_roster.erl:974 mod_roster_odbc.erl:1079 +#: mod_roster.erl:974 mod_roster_odbc.erl:1091 msgid "Validate" msgstr "Valider" -#: mod_roster.erl:982 mod_roster_odbc.erl:1087 +#: mod_roster.erl:982 mod_roster_odbc.erl:1099 msgid "Remove" msgstr "Enlever" -#: mod_roster.erl:985 mod_roster_odbc.erl:1090 +#: mod_roster.erl:985 mod_roster_odbc.erl:1102 msgid "Roster of " msgstr "Liste de contact de " -#: mod_roster.erl:988 mod_roster_odbc.erl:1093 mod_shared_roster.erl:897 -#: mod_shared_roster.erl:1006 web/ejabberd_web_admin.erl:834 +#: mod_roster.erl:988 mod_roster_odbc.erl:1105 mod_shared_roster.erl:902 +#: mod_shared_roster.erl:1011 mod_shared_roster_odbc.erl:931 +#: mod_shared_roster_odbc.erl:1040 web/ejabberd_web_admin.erl:834 #: web/ejabberd_web_admin.erl:875 web/ejabberd_web_admin.erl:943 #: web/ejabberd_web_admin.erl:979 web/ejabberd_web_admin.erl:1020 -#: web/ejabberd_web_admin.erl:1510 web/ejabberd_web_admin.erl:1759 -#: web/ejabberd_web_admin.erl:1930 web/ejabberd_web_admin.erl:2135 -#: web/ejabberd_web_admin.erl:2160 +#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1761 +#: web/ejabberd_web_admin.erl:1932 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2161 msgid "Bad format" msgstr "Mauvais format" -#: mod_roster.erl:995 mod_roster_odbc.erl:1100 +#: mod_roster.erl:995 mod_roster_odbc.erl:1112 msgid "Add Jabber ID" msgstr "Ajouter un Jabber ID" -#: mod_roster.erl:1094 mod_roster_odbc.erl:1199 +#: mod_roster.erl:1094 mod_roster_odbc.erl:1211 msgid "Roster" msgstr "Liste de contacts" -#: mod_shared_roster.erl:852 mod_shared_roster.erl:894 -#: mod_shared_roster.erl:1002 +#: mod_shared_roster.erl:857 mod_shared_roster.erl:899 +#: mod_shared_roster.erl:1007 mod_shared_roster_odbc.erl:886 +#: mod_shared_roster_odbc.erl:928 mod_shared_roster_odbc.erl:1036 msgid "Shared Roster Groups" msgstr "Groupes de liste de contacts partagée" -#: mod_shared_roster.erl:890 web/ejabberd_web_admin.erl:1366 -#: web/ejabberd_web_admin.erl:2460 +#: mod_shared_roster.erl:895 mod_shared_roster_odbc.erl:924 +#: web/ejabberd_web_admin.erl:1365 web/ejabberd_web_admin.erl:2461 msgid "Add New" msgstr "Ajouter" -#: mod_shared_roster.erl:973 +#: mod_shared_roster.erl:978 mod_shared_roster_odbc.erl:1007 msgid "Name:" msgstr "Nom :" -#: mod_shared_roster.erl:978 +#: mod_shared_roster.erl:983 mod_shared_roster_odbc.erl:1012 msgid "Description:" msgstr "Description :" -#: mod_shared_roster.erl:986 +#: mod_shared_roster.erl:991 mod_shared_roster_odbc.erl:1020 msgid "Members:" msgstr "Membres :" -#: mod_shared_roster.erl:994 +#: mod_shared_roster.erl:999 mod_shared_roster_odbc.erl:1028 msgid "Displayed Groups:" msgstr "Groupes affichés :" -#: mod_shared_roster.erl:1003 +#: mod_shared_roster.erl:1008 mod_shared_roster_odbc.erl:1037 msgid "Group " msgstr "Groupe " -#: mod_shared_roster.erl:1012 web/ejabberd_web_admin.erl:840 -#: web/ejabberd_web_admin.erl:884 web/ejabberd_web_admin.erl:949 -#: web/ejabberd_web_admin.erl:1026 web/ejabberd_web_admin.erl:2015 +#: mod_shared_roster.erl:1017 mod_shared_roster_odbc.erl:1046 +#: web/ejabberd_web_admin.erl:840 web/ejabberd_web_admin.erl:884 +#: web/ejabberd_web_admin.erl:949 web/ejabberd_web_admin.erl:1026 +#: web/ejabberd_web_admin.erl:2017 msgid "Submit" msgstr "Soumettre" -#: mod_vcard.erl:165 mod_vcard_ldap.erl:237 mod_vcard_odbc.erl:129 +#: mod_vcard.erl:165 mod_vcard_ldap.erl:238 mod_vcard_odbc.erl:129 msgid "Erlang Jabber Server" msgstr "Serveur Jabber Erlang" -#: mod_vcard.erl:358 mod_vcard.erl:472 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:448 +#: mod_vcard.erl:364 mod_vcard.erl:478 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:454 msgid "Birthday" msgstr "Date d'anniversaire" -#: mod_vcard.erl:358 mod_vcard.erl:474 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:450 +#: mod_vcard.erl:364 mod_vcard.erl:480 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:456 msgid "City" msgstr "Ville" -#: mod_vcard.erl:358 mod_vcard.erl:473 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:449 +#: mod_vcard.erl:364 mod_vcard.erl:479 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:455 msgid "Country" msgstr "Pays" -#: mod_vcard.erl:358 mod_vcard.erl:475 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:451 +#: mod_vcard.erl:364 mod_vcard.erl:481 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:457 msgid "Email" msgstr "Email" -#: mod_vcard.erl:358 mod_vcard.erl:470 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:446 +#: mod_vcard.erl:364 mod_vcard.erl:476 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:452 msgid "Family Name" msgstr "Nom de famille" -#: mod_vcard.erl:358 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_odbc.erl:342 msgid "" "Fill in the form to search for any matching Jabber User (Add * to the end of " "field to match substring)" @@ -1318,53 +1376,53 @@ msgstr "" "Remplissez le formulaire pour recherche un utilisateur Jabber (Ajouter * à " "la fin du champ pour chercher n'importe quelle fin de chaîne" -#: mod_vcard.erl:358 mod_vcard.erl:467 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:443 +#: mod_vcard.erl:364 mod_vcard.erl:473 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:449 msgid "Full Name" msgstr "Nom complet" -#: mod_vcard.erl:358 mod_vcard.erl:469 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:445 +#: mod_vcard.erl:364 mod_vcard.erl:475 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:451 msgid "Middle Name" msgstr "Autre nom" -#: mod_vcard.erl:358 mod_vcard.erl:468 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:444 web/ejabberd_web_admin.erl:2004 +#: mod_vcard.erl:364 mod_vcard.erl:474 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:450 web/ejabberd_web_admin.erl:2006 msgid "Name" msgstr "Nom" -#: mod_vcard.erl:358 mod_vcard.erl:476 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:452 +#: mod_vcard.erl:364 mod_vcard.erl:482 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:458 msgid "Organization Name" msgstr "Nom de l'organisation" -#: mod_vcard.erl:358 mod_vcard.erl:477 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:453 +#: mod_vcard.erl:364 mod_vcard.erl:483 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:459 msgid "Organization Unit" msgstr "Unité de l'organisation" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "Search users in " msgstr "Rechercher des utilisateurs " -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "You need an x:data capable client to search" msgstr "" "Vous avez besoin d'un client supportant x:data pour faire une recherche" -#: mod_vcard.erl:383 mod_vcard_ldap.erl:483 mod_vcard_odbc.erl:361 +#: mod_vcard.erl:389 mod_vcard_ldap.erl:487 mod_vcard_odbc.erl:367 msgid "vCard User Search" msgstr "Recherche dans l'annnuaire" -#: mod_vcard.erl:439 mod_vcard_ldap.erl:537 mod_vcard_odbc.erl:415 +#: mod_vcard.erl:445 mod_vcard_ldap.erl:541 mod_vcard_odbc.erl:421 msgid "ejabberd vCard module" msgstr "Module vCard ejabberd" -#: mod_vcard.erl:463 mod_vcard_ldap.erl:547 mod_vcard_odbc.erl:439 +#: mod_vcard.erl:469 mod_vcard_ldap.erl:551 mod_vcard_odbc.erl:445 msgid "Search Results for " msgstr "Résultats de recherche pour " -#: mod_vcard_ldap.erl:458 +#: mod_vcard_ldap.erl:462 msgid "Fill in fields to search for any matching Jabber User" msgstr "Remplissez les champs pour rechercher un utilisateur Jabber" @@ -1425,7 +1483,7 @@ msgstr "Montrer la table ordinaire" msgid "Show Integral Table" msgstr "Montrer la table intégralement" -#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1937 +#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1939 msgid "Statistics" msgstr "Statistiques" @@ -1437,116 +1495,116 @@ msgstr "Nœud non trouvé" msgid "Node not found" msgstr "Noeud non trouvé" -#: web/ejabberd_web_admin.erl:1461 +#: web/ejabberd_web_admin.erl:1460 msgid "Host" msgstr "Serveur" -#: web/ejabberd_web_admin.erl:1462 +#: web/ejabberd_web_admin.erl:1461 msgid "Registered Users" msgstr "Utilisateurs enregistrés" -#: web/ejabberd_web_admin.erl:1574 +#: web/ejabberd_web_admin.erl:1573 msgid "Offline Messages" msgstr "Messages en attente" -#: web/ejabberd_web_admin.erl:1575 web/ejabberd_web_admin.erl:1765 +#: web/ejabberd_web_admin.erl:1574 web/ejabberd_web_admin.erl:1767 msgid "Last Activity" msgstr "Dernière Activité" -#: web/ejabberd_web_admin.erl:1657 web/ejabberd_web_admin.erl:1673 +#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 msgid "Registered Users:" msgstr "Utilisateurs enregistrés:" -#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 -#: web/ejabberd_web_admin.erl:2191 +#: web/ejabberd_web_admin.erl:1661 web/ejabberd_web_admin.erl:1677 +#: web/ejabberd_web_admin.erl:2192 msgid "Online Users:" msgstr "Utilisateurs connectés:" -#: web/ejabberd_web_admin.erl:1661 +#: web/ejabberd_web_admin.erl:1663 msgid "Outgoing s2s Connections:" msgstr "Connexions s2s sortantes:" -#: web/ejabberd_web_admin.erl:1663 +#: web/ejabberd_web_admin.erl:1665 msgid "Outgoing s2s Servers:" msgstr "Serveurs s2s sortants" -#: web/ejabberd_web_admin.erl:1732 web/mod_register_web.erl:175 +#: web/ejabberd_web_admin.erl:1734 web/mod_register_web.erl:175 #: web/mod_register_web.erl:372 web/mod_register_web.erl:381 #: web/mod_register_web.erl:411 msgid "Change Password" msgstr "Modifier le mot de passe" -#: web/ejabberd_web_admin.erl:1756 +#: web/ejabberd_web_admin.erl:1758 msgid "User " msgstr "Utilisateur " -#: web/ejabberd_web_admin.erl:1763 +#: web/ejabberd_web_admin.erl:1765 msgid "Connected Resources:" msgstr "Ressources connectées:" -#: web/ejabberd_web_admin.erl:1764 web/mod_register_web.erl:227 +#: web/ejabberd_web_admin.erl:1766 web/mod_register_web.erl:227 #: web/mod_register_web.erl:519 msgid "Password:" msgstr "Mot de passe:" -#: web/ejabberd_web_admin.erl:1826 +#: web/ejabberd_web_admin.erl:1828 msgid "No Data" msgstr "Aucune information disponible" -#: web/ejabberd_web_admin.erl:1904 +#: web/ejabberd_web_admin.erl:1906 msgid "Nodes" msgstr "Noeuds" -#: web/ejabberd_web_admin.erl:1927 web/ejabberd_web_admin.erl:1949 +#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1951 msgid "Node " msgstr "Noeud " -#: web/ejabberd_web_admin.erl:1936 +#: web/ejabberd_web_admin.erl:1938 msgid "Listened Ports" msgstr "Ports ouverts" -#: web/ejabberd_web_admin.erl:1938 web/ejabberd_web_admin.erl:2259 -#: web/ejabberd_web_admin.erl:2447 +#: web/ejabberd_web_admin.erl:1940 web/ejabberd_web_admin.erl:2260 +#: web/ejabberd_web_admin.erl:2448 msgid "Update" msgstr "Mettre à jour" -#: web/ejabberd_web_admin.erl:1941 web/ejabberd_web_admin.erl:2568 +#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2569 msgid "Restart" msgstr "Redémarrer" -#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2570 +#: web/ejabberd_web_admin.erl:1945 web/ejabberd_web_admin.erl:2571 msgid "Stop" msgstr "Arrêter" -#: web/ejabberd_web_admin.erl:1957 +#: web/ejabberd_web_admin.erl:1959 msgid "RPC Call Error" msgstr "Erreur d'appel RPC" -#: web/ejabberd_web_admin.erl:1998 +#: web/ejabberd_web_admin.erl:2000 msgid "Database Tables at " msgstr "Tables de base de données sur " -#: web/ejabberd_web_admin.erl:2005 +#: web/ejabberd_web_admin.erl:2007 msgid "Storage Type" msgstr "Type de stockage" -#: web/ejabberd_web_admin.erl:2006 +#: web/ejabberd_web_admin.erl:2008 msgid "Elements" msgstr "Éléments" -#: web/ejabberd_web_admin.erl:2007 +#: web/ejabberd_web_admin.erl:2009 msgid "Memory" msgstr "Mémoire" -#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2032 web/ejabberd_web_admin.erl:2137 msgid "Error" msgstr "Erreur" -#: web/ejabberd_web_admin.erl:2033 +#: web/ejabberd_web_admin.erl:2034 msgid "Backup of " msgstr "Sauvegarde de " -#: web/ejabberd_web_admin.erl:2035 +#: web/ejabberd_web_admin.erl:2036 msgid "" "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 " @@ -1555,147 +1613,147 @@ msgstr "" "Ces options sauvegardent uniquement la base de données interne Mnesia. Si " "vous utilisez le module ODBC vous devez sauvegarde votre base SQL séparément." -#: web/ejabberd_web_admin.erl:2040 +#: web/ejabberd_web_admin.erl:2041 msgid "Store binary backup:" msgstr "Sauvegarde binaire:" -#: web/ejabberd_web_admin.erl:2044 web/ejabberd_web_admin.erl:2051 -#: web/ejabberd_web_admin.erl:2059 web/ejabberd_web_admin.erl:2066 -#: web/ejabberd_web_admin.erl:2073 web/ejabberd_web_admin.erl:2080 -#: web/ejabberd_web_admin.erl:2087 web/ejabberd_web_admin.erl:2095 -#: web/ejabberd_web_admin.erl:2102 web/ejabberd_web_admin.erl:2109 +#: web/ejabberd_web_admin.erl:2045 web/ejabberd_web_admin.erl:2052 +#: web/ejabberd_web_admin.erl:2060 web/ejabberd_web_admin.erl:2067 +#: web/ejabberd_web_admin.erl:2074 web/ejabberd_web_admin.erl:2081 +#: web/ejabberd_web_admin.erl:2088 web/ejabberd_web_admin.erl:2096 +#: web/ejabberd_web_admin.erl:2103 web/ejabberd_web_admin.erl:2110 msgid "OK" msgstr "OK" -#: web/ejabberd_web_admin.erl:2047 +#: web/ejabberd_web_admin.erl:2048 msgid "Restore binary backup immediately:" msgstr "Restauration immédiate d'une sauvegarde binaire:" -#: web/ejabberd_web_admin.erl:2055 +#: web/ejabberd_web_admin.erl:2056 msgid "" "Restore binary backup after next ejabberd restart (requires less memory):" msgstr "" "Restauration de la sauvegarde binaire après redémarrage (nécessite moins de " "mémoire):" -#: web/ejabberd_web_admin.erl:2062 +#: web/ejabberd_web_admin.erl:2063 msgid "Store plain text backup:" msgstr "Sauvegarde texte:" -#: web/ejabberd_web_admin.erl:2069 +#: web/ejabberd_web_admin.erl:2070 msgid "Restore plain text backup immediately:" msgstr "Restauration immédiate d'une sauvegarde texte:" -#: web/ejabberd_web_admin.erl:2076 +#: web/ejabberd_web_admin.erl:2077 msgid "Import users data from a PIEFXIS file (XEP-0227):" msgstr "" "Importer les données utilisateurs à partir d'un fichier PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2083 +#: web/ejabberd_web_admin.erl:2084 msgid "Export data of all users in the server to PIEFXIS files (XEP-0227):" msgstr "" "Exporter les données de tous les utilisateurs du serveur vers un fichier " "PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2090 +#: web/ejabberd_web_admin.erl:2091 msgid "Export data of users in a host to PIEFXIS files (XEP-0227):" msgstr "" "Exporter les données utilisateurs d'un hôte vers un fichier PIEFXIS " "(XEP-0227):" -#: web/ejabberd_web_admin.erl:2098 +#: web/ejabberd_web_admin.erl:2099 msgid "Import user data from jabberd14 spool file:" msgstr "Importer des utilisateurs depuis un fichier spool Jabberd 1.4:" -#: web/ejabberd_web_admin.erl:2105 +#: web/ejabberd_web_admin.erl:2106 msgid "Import users data from jabberd14 spool directory:" msgstr "Importer des utilisateurs depuis un fichier spool Jabberd 1.4:" -#: web/ejabberd_web_admin.erl:2131 +#: web/ejabberd_web_admin.erl:2132 msgid "Listened Ports at " msgstr "Ports ouverts sur " -#: web/ejabberd_web_admin.erl:2156 +#: web/ejabberd_web_admin.erl:2157 msgid "Modules at " msgstr "Modules sur " -#: web/ejabberd_web_admin.erl:2182 +#: web/ejabberd_web_admin.erl:2183 msgid "Statistics of ~p" msgstr "Statistiques de ~p" -#: web/ejabberd_web_admin.erl:2185 +#: web/ejabberd_web_admin.erl:2186 msgid "Uptime:" msgstr "Temps depuis le démarrage :" -#: web/ejabberd_web_admin.erl:2188 +#: web/ejabberd_web_admin.erl:2189 msgid "CPU Time:" msgstr "Temps CPU :" -#: web/ejabberd_web_admin.erl:2194 +#: web/ejabberd_web_admin.erl:2195 msgid "Transactions Committed:" msgstr "Transactions commitées :" -#: web/ejabberd_web_admin.erl:2197 +#: web/ejabberd_web_admin.erl:2198 msgid "Transactions Aborted:" msgstr "Transactions annulées :" -#: web/ejabberd_web_admin.erl:2200 +#: web/ejabberd_web_admin.erl:2201 msgid "Transactions Restarted:" msgstr "Transactions redémarrées :" -#: web/ejabberd_web_admin.erl:2203 +#: web/ejabberd_web_admin.erl:2204 msgid "Transactions Logged:" msgstr "Transactions journalisées :" -#: web/ejabberd_web_admin.erl:2245 +#: web/ejabberd_web_admin.erl:2246 msgid "Update " msgstr "Mise à jour " -#: web/ejabberd_web_admin.erl:2253 +#: web/ejabberd_web_admin.erl:2254 msgid "Update plan" msgstr "Plan de mise à jour" -#: web/ejabberd_web_admin.erl:2254 +#: web/ejabberd_web_admin.erl:2255 msgid "Modified modules" msgstr "Modules mis à jour" -#: web/ejabberd_web_admin.erl:2255 +#: web/ejabberd_web_admin.erl:2256 msgid "Update script" msgstr "Script de mise à jour" -#: web/ejabberd_web_admin.erl:2256 +#: web/ejabberd_web_admin.erl:2257 msgid "Low level update script" msgstr "Script de mise à jour de bas-niveau" -#: web/ejabberd_web_admin.erl:2257 +#: web/ejabberd_web_admin.erl:2258 msgid "Script check" msgstr "Validation du script" -#: web/ejabberd_web_admin.erl:2425 +#: web/ejabberd_web_admin.erl:2426 msgid "Port" msgstr "Port" -#: web/ejabberd_web_admin.erl:2426 +#: web/ejabberd_web_admin.erl:2427 msgid "IP" msgstr "IP" -#: web/ejabberd_web_admin.erl:2427 +#: web/ejabberd_web_admin.erl:2428 msgid "Protocol" msgstr "Protocole" -#: web/ejabberd_web_admin.erl:2428 web/ejabberd_web_admin.erl:2555 +#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 msgid "Module" msgstr "Module" -#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 +#: web/ejabberd_web_admin.erl:2430 web/ejabberd_web_admin.erl:2557 msgid "Options" msgstr "Options" -#: web/ejabberd_web_admin.erl:2449 +#: web/ejabberd_web_admin.erl:2450 msgid "Delete" msgstr "Supprimer" -#: web/ejabberd_web_admin.erl:2578 +#: web/ejabberd_web_admin.erl:2579 msgid "Start" msgstr "Démarrer" @@ -1826,7 +1884,7 @@ msgstr "Effacer" #, fuzzy #~ msgid "Captcha test failed" -#~ msgstr "Le captcha est valide" +#~ msgstr "Le CAPTCHA est valide" #~ msgid "Encodings" #~ msgstr "Encodages" diff --git a/src/msgs/gl.msg b/src/msgs/gl.msg index 219bea35d..bbcf11359 100644 --- a/src/msgs/gl.msg +++ b/src/msgs/gl.msg @@ -159,7 +159,7 @@ {"List of modules to start","Lista de módulos a iniciar"}. {"Low level update script","Script de actualización a baixo nivel"}. {"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 moderated","Facer sala moderada"}. {"Make room password protected","Protexer a sala con contrasinal"}. @@ -319,7 +319,7 @@ {"Sunday","Domingo"}. {"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"}. -{"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 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"}. @@ -337,7 +337,6 @@ {"Transactions Logged:","Transaccións rexistradas:"}. {"Transactions Restarted:","Transaccións reiniciadas:"}. {"Tuesday","Martes"}. -{"Unable to generate a captcha","Non se pode xerar un Captcha"}. {"Unauthorized","Non autorizado"}. {"Update ","Actualizar"}. {"Update","Actualizar"}. diff --git a/src/msgs/gl.po b/src/msgs/gl.po index 87a6a3ec4..d33f4ebd1 100644 --- a/src/msgs/gl.po +++ b/src/msgs/gl.po @@ -15,11 +15,11 @@ msgstr "É obrigatorio usar STARTTLS" msgid "No resource provided" msgstr "Non se proporcionou recurso" -#: ejabberd_c2s.erl:1149 +#: ejabberd_c2s.erl:1197 msgid "Replaced by new connection" msgstr "Substituído por unha nova conexión" -#: ejabberd_c2s.erl:1837 +#: ejabberd_c2s.erl:1885 msgid "Your active privacy list has denied the routing of this stanza." msgstr "" @@ -41,8 +41,8 @@ msgid "CAPTCHA web page" msgstr "" #: ejabberd_captcha.erl:307 -msgid "The captcha is valid." -msgstr "O Captcha é válido." +msgid "The CAPTCHA is valid." +msgstr "O CAPTCHA é válido." #: mod_adhoc.erl:95 mod_adhoc.erl:125 mod_adhoc.erl:143 mod_adhoc.erl:161 msgid "Commands" @@ -56,64 +56,67 @@ msgstr "Ping" msgid "Pong" msgstr "Pong" -#: mod_announce.erl:506 +#: mod_announce.erl:507 mod_announce_odbc.erl:499 msgid "Really delete message of the day?" msgstr "Está seguro de quere borrar a mensaxe do dia?" -#: mod_announce.erl:514 mod_configure.erl:1083 mod_configure.erl:1128 +#: mod_announce.erl:515 mod_announce_odbc.erl:507 mod_configure.erl:1083 +#: mod_configure.erl:1128 msgid "Subject" msgstr "Asunto" -#: mod_announce.erl:519 mod_configure.erl:1088 mod_configure.erl:1133 +#: mod_announce.erl:520 mod_announce_odbc.erl:512 mod_configure.erl:1088 +#: mod_configure.erl:1133 msgid "Message body" msgstr "Corpo da mensaxe" -#: mod_announce.erl:599 +#: mod_announce.erl:600 mod_announce_odbc.erl:592 msgid "No body provided for announce message" msgstr "Non se proporcionou corpo de mensaxe para o anuncio" -#: mod_announce.erl:634 +#: mod_announce.erl:635 mod_announce_odbc.erl:627 msgid "Announcements" msgstr "Anuncios" -#: mod_announce.erl:636 +#: mod_announce.erl:637 mod_announce_odbc.erl:629 msgid "Send announcement to all users" msgstr "Enviar anuncio a todos os usuarios" -#: mod_announce.erl:638 +#: mod_announce.erl:639 mod_announce_odbc.erl:631 msgid "Send announcement to all users on all hosts" msgstr "Enviar anuncio a todos os usuarios en todos os dominios" -#: mod_announce.erl:640 +#: mod_announce.erl:641 mod_announce_odbc.erl:633 msgid "Send announcement to all online users" msgstr "Enviar anuncio a todos los usuarios conectados" -#: mod_announce.erl:642 mod_configure.erl:1078 mod_configure.erl:1123 +#: mod_announce.erl:643 mod_announce_odbc.erl:635 mod_configure.erl:1078 +#: mod_configure.erl:1123 msgid "Send announcement to all online users on all hosts" msgstr "Enviar anuncio a todos os usuarios conectados en todos os dominios" -#: mod_announce.erl:644 +#: mod_announce.erl:645 mod_announce_odbc.erl:637 msgid "Set message of the day and send to online users" msgstr "Pór mensaxe do dia e enviar a todos os usuarios conectados" -#: mod_announce.erl:646 +#: mod_announce.erl:647 mod_announce_odbc.erl:639 msgid "Set message of the day on all hosts and send to online users" msgstr "" "Pór mensaxe do día en todos os dominios e enviar aos usuarios conectados" -#: mod_announce.erl:648 +#: mod_announce.erl:649 mod_announce_odbc.erl:641 msgid "Update message of the day (don't send)" msgstr "Actualizar mensaxe do dia, pero non envialo" -#: mod_announce.erl:650 +#: mod_announce.erl:651 mod_announce_odbc.erl:643 msgid "Update message of the day on all hosts (don't send)" msgstr "Actualizar a mensaxe do día en todos os dominos (pero non envialo)" -#: mod_announce.erl:652 +#: mod_announce.erl:653 mod_announce_odbc.erl:645 msgid "Delete message of the day" msgstr "Borrar mensaxe do dia" -#: mod_announce.erl:654 +#: mod_announce.erl:655 mod_announce_odbc.erl:647 msgid "Delete message of the day on all hosts" msgstr "Borrar a mensaxe do día en todos os dominios" @@ -122,7 +125,7 @@ msgstr "Borrar a mensaxe do día en todos os dominios" msgid "Configuration" msgstr "Configuración" -#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1934 +#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1936 msgid "Database" msgstr "Base de datos" @@ -134,7 +137,7 @@ msgstr "Iniciar módulos" msgid "Stop Modules" msgstr "Detener módulos" -#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1935 +#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1937 msgid "Backup" msgstr "Gardar copia de seguridade" @@ -163,7 +166,7 @@ msgid "Shut Down Service" msgstr "Deter o servizo" #: mod_configure.erl:145 mod_configure.erl:518 mod_configure.erl:1197 -#: web/ejabberd_web_admin.erl:1528 +#: web/ejabberd_web_admin.erl:1527 msgid "Add User" msgstr "Engadir usuario" @@ -215,7 +218,7 @@ msgid "User Management" msgstr "Administración de usuarios" #: mod_configure.erl:500 web/ejabberd_web_admin.erl:1058 -#: web/ejabberd_web_admin.erl:1463 +#: web/ejabberd_web_admin.erl:1462 msgid "Online Users" msgstr "Usuarios conectados" @@ -227,15 +230,15 @@ msgstr "Todos os usuarios" msgid "Outgoing s2s Connections" msgstr "Conexións S2S saíntes" -#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1905 +#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1907 msgid "Running Nodes" msgstr "Nodos funcionando" -#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1907 +#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1909 msgid "Stopped Nodes" msgstr "Nodos detidos" -#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1951 +#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1953 msgid "Modules" msgstr "Módulos" @@ -366,15 +369,15 @@ msgstr "Regras de acceso" #: mod_configure.erl:1200 mod_configure.erl:1222 mod_configure.erl:1234 #: mod_configure.erl:1246 mod_configure.erl:1258 mod_configure.erl:1275 -#: mod_configure.erl:1287 mod_configure.erl:1652 mod_configure.erl:1702 -#: mod_configure.erl:1723 mod_roster.erl:943 mod_roster_odbc.erl:1048 -#: mod_vcard.erl:466 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:442 +#: mod_configure.erl:1287 mod_configure.erl:1650 mod_configure.erl:1700 +#: mod_configure.erl:1721 mod_roster.erl:943 mod_roster_odbc.erl:1060 +#: mod_vcard.erl:472 mod_vcard_ldap.erl:554 mod_vcard_odbc.erl:448 msgid "Jabber ID" msgstr "Jabber ID" -#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1653 -#: mod_configure.erl:1865 mod_muc/mod_muc_room.erl:2970 mod_register.erl:235 -#: web/ejabberd_web_admin.erl:1521 +#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1651 +#: mod_configure.erl:1863 mod_muc/mod_muc_room.erl:3224 mod_register.erl:235 +#: web/ejabberd_web_admin.erl:1520 msgid "Password" msgstr "Contrasinal" @@ -390,71 +393,72 @@ msgstr "Número de usuarios rexistrados" msgid "Number of online users" msgstr "Número de usuarios conectados" -#: mod_configure.erl:1684 web/ejabberd_web_admin.erl:1589 -#: web/ejabberd_web_admin.erl:1741 +#: mod_configure.erl:1682 web/ejabberd_web_admin.erl:1588 +#: web/ejabberd_web_admin.erl:1743 msgid "Never" msgstr "Nunca" -#: mod_configure.erl:1698 web/ejabberd_web_admin.erl:1602 -#: web/ejabberd_web_admin.erl:1754 +#: mod_configure.erl:1696 web/ejabberd_web_admin.erl:1601 +#: web/ejabberd_web_admin.erl:1756 msgid "Online" msgstr "Conectado" -#: mod_configure.erl:1703 +#: mod_configure.erl:1701 msgid "Last login" msgstr "Última conexión" -#: mod_configure.erl:1724 +#: mod_configure.erl:1722 msgid "Roster size" msgstr "Tamaño da lista de contactos" -#: mod_configure.erl:1725 +#: mod_configure.erl:1723 msgid "IP addresses" msgstr "Direccións IP" -#: mod_configure.erl:1726 +#: mod_configure.erl:1724 msgid "Resources" msgstr "Recursos" -#: mod_configure.erl:1852 +#: mod_configure.erl:1850 msgid "Administration of " msgstr "Administración de " -#: mod_configure.erl:1855 +#: mod_configure.erl:1853 msgid "Action on user" msgstr "Acción no usuario" -#: mod_configure.erl:1859 +#: mod_configure.erl:1857 msgid "Edit Properties" msgstr "Editar propiedades" -#: mod_configure.erl:1862 web/ejabberd_web_admin.erl:1767 +#: mod_configure.erl:1860 web/ejabberd_web_admin.erl:1769 msgid "Remove User" msgstr "Eliminar usuario" -#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:336 +#: mod_irc/mod_irc.erl:201 mod_irc/mod_irc_odbc.erl:196 +#: mod_muc/mod_muc.erl:336 mod_muc/mod_muc_odbc.erl:342 msgid "Access denied by service policy" msgstr "Acceso denegado pola política do servizo" -#: mod_irc/mod_irc.erl:400 +#: mod_irc/mod_irc.erl:401 mod_irc/mod_irc_odbc.erl:398 msgid "IRC Transport" msgstr "Transporte IRC" -#: mod_irc/mod_irc.erl:427 +#: mod_irc/mod_irc.erl:428 mod_irc/mod_irc_odbc.erl:425 msgid "ejabberd IRC module" msgstr "Módulo de IRC para ejabberd" -#: mod_irc/mod_irc.erl:558 +#: mod_irc/mod_irc.erl:559 mod_irc/mod_irc_odbc.erl:568 msgid "You need an x:data capable client to configure mod_irc settings" msgstr "" "Necesitas un cliente con soporte de x:data para configurar as opcións de " "mod_irc" -#: mod_irc/mod_irc.erl:565 +#: mod_irc/mod_irc.erl:566 mod_irc/mod_irc_odbc.erl:575 msgid "Registration in mod_irc for " msgstr "Rexistro en mod_irc para" -#: mod_irc/mod_irc.erl:570 +#: mod_irc/mod_irc.erl:571 mod_irc/mod_irc_odbc.erl:580 msgid "" "Enter username, encodings, ports and passwords you wish to use for " "connecting to IRC servers" @@ -462,11 +466,11 @@ msgstr "" "Introduza o nome de usuario, codificaciones de carácter, portos e " "contrasinal que pretende utilizar a conectar a servidores de IRC" -#: mod_irc/mod_irc.erl:575 +#: mod_irc/mod_irc.erl:576 mod_irc/mod_irc_odbc.erl:585 msgid "IRC Username" msgstr "Nome de usuario en IRC" -#: mod_irc/mod_irc.erl:585 +#: mod_irc/mod_irc.erl:586 mod_irc/mod_irc_odbc.erl:595 msgid "" "If you want to specify different ports, passwords, encodings for IRC " "servers, fill this list with values in format '{\"irc server\", \"encoding" @@ -478,7 +482,7 @@ msgstr "" "\"codificación\", \"porto\", \"contrasinal\"}'. Este servizo utiliza por " "defecto a codificación \"~s\", porto ~p, sen contrasinal." -#: mod_irc/mod_irc.erl:597 +#: mod_irc/mod_irc.erl:598 mod_irc/mod_irc_odbc.erl:607 msgid "" "Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." @@ -486,35 +490,36 @@ msgstr "" "Exemplo: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." -#: mod_irc/mod_irc.erl:602 +#: mod_irc/mod_irc.erl:603 mod_irc/mod_irc_odbc.erl:612 msgid "Connections parameters" msgstr "Parámetros de conexiones" -#: mod_irc/mod_irc.erl:727 +#: mod_irc/mod_irc.erl:728 mod_irc/mod_irc_odbc.erl:757 msgid "Join IRC channel" msgstr "Entrar en canle IRC" -#: mod_irc/mod_irc.erl:731 +#: mod_irc/mod_irc.erl:732 mod_irc/mod_irc_odbc.erl:761 msgid "IRC channel (don't put the first #)" msgstr "Canle de IRC (non poñer o primeiro #)" -#: mod_irc/mod_irc.erl:736 +#: mod_irc/mod_irc.erl:737 mod_irc/mod_irc_odbc.erl:766 msgid "IRC server" msgstr "Servidor IRC" -#: mod_irc/mod_irc.erl:769 mod_irc/mod_irc.erl:773 +#: mod_irc/mod_irc.erl:770 mod_irc/mod_irc.erl:774 +#: mod_irc/mod_irc_odbc.erl:799 mod_irc/mod_irc_odbc.erl:803 msgid "Join the IRC channel here." msgstr "Únete á canle de IRC aquí." -#: mod_irc/mod_irc.erl:777 +#: mod_irc/mod_irc.erl:778 mod_irc/mod_irc_odbc.erl:807 msgid "Join the IRC channel in this Jabber ID: ~s" msgstr "Únete á canle de IRC con este IDE de Jabber: ~s" -#: mod_irc/mod_irc.erl:862 +#: mod_irc/mod_irc.erl:863 mod_irc/mod_irc_odbc.erl:904 msgid "IRC settings" msgstr "IRC axustes" -#: mod_irc/mod_irc.erl:867 +#: mod_irc/mod_irc.erl:868 mod_irc/mod_irc_odbc.erl:909 msgid "" "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 " @@ -524,74 +529,75 @@ msgstr "" "ao conectar nos servidores de IRC. Presione 'Siguiente' para obtener más " "campos para rellenar Presione 'completo' para guardar axustes." -#: mod_irc/mod_irc.erl:873 +#: mod_irc/mod_irc.erl:874 mod_irc/mod_irc_odbc.erl:915 msgid "IRC username" msgstr "Nome de usuario en IRC" -#: mod_irc/mod_irc.erl:922 +#: mod_irc/mod_irc.erl:923 mod_irc/mod_irc_odbc.erl:964 msgid "Password ~b" msgstr "Contrasinal ~b" -#: mod_irc/mod_irc.erl:927 +#: mod_irc/mod_irc.erl:928 mod_irc/mod_irc_odbc.erl:969 msgid "Port ~b" msgstr "Porto ~b" -#: mod_irc/mod_irc.erl:932 +#: mod_irc/mod_irc.erl:933 mod_irc/mod_irc_odbc.erl:974 msgid "Encoding for server ~b" msgstr "Codificación de servidor ~b" -#: mod_irc/mod_irc.erl:941 +#: mod_irc/mod_irc.erl:942 mod_irc/mod_irc_odbc.erl:983 msgid "Server ~b" msgstr "Servidor ~b" -#: mod_muc/mod_muc.erl:449 +#: mod_muc/mod_muc.erl:449 mod_muc/mod_muc_odbc.erl:456 msgid "Only service administrators are allowed to send service messages" msgstr "" "Só os administradores do servizo teñen permiso para enviar mensaxes de " "servizo" -#: mod_muc/mod_muc.erl:493 +#: mod_muc/mod_muc.erl:493 mod_muc/mod_muc_odbc.erl:500 msgid "Room creation is denied by service policy" msgstr "Denegar crear a sala por política do servizo" -#: mod_muc/mod_muc.erl:500 +#: mod_muc/mod_muc.erl:500 mod_muc/mod_muc_odbc.erl:507 msgid "Conference room does not exist" msgstr "A sala de conferencias non existe" -#: mod_muc/mod_muc.erl:581 +#: mod_muc/mod_muc.erl:582 mod_muc/mod_muc_odbc.erl:595 msgid "Chatrooms" msgstr "Salas de charla" -#: mod_muc/mod_muc.erl:711 +#: mod_muc/mod_muc.erl:712 mod_muc/mod_muc_odbc.erl:729 #, fuzzy msgid "You need a client that supports x:data to register the nickname" msgstr "" "Necesitas un cliente con soporte de x:data para poder rexistrar o alcume" -#: mod_muc/mod_muc.erl:717 +#: mod_muc/mod_muc.erl:718 mod_muc/mod_muc_odbc.erl:735 msgid "Nickname Registration at " msgstr "Rexistro do alcume en " -#: mod_muc/mod_muc.erl:721 +#: mod_muc/mod_muc.erl:722 mod_muc/mod_muc_odbc.erl:739 msgid "Enter nickname you want to register" msgstr "Introduce o alcume que queiras rexistrar" -#: mod_muc/mod_muc.erl:722 mod_roster.erl:944 mod_roster_odbc.erl:1049 -#: mod_vcard.erl:358 mod_vcard.erl:471 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:447 +#: mod_muc/mod_muc.erl:723 mod_muc/mod_muc_odbc.erl:740 +#: mod_muc/mod_muc_room.erl:3810 mod_roster.erl:944 mod_roster_odbc.erl:1061 +#: mod_vcard.erl:364 mod_vcard.erl:477 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:453 msgid "Nickname" msgstr "Alcume" -#: mod_muc/mod_muc.erl:761 mod_muc/mod_muc_room.erl:933 -#: mod_muc/mod_muc_room.erl:1577 +#: mod_muc/mod_muc.erl:762 mod_muc/mod_muc_odbc.erl:784 +#: mod_muc/mod_muc_room.erl:1064 mod_muc/mod_muc_room.erl:1787 msgid "That nickname is registered by another person" msgstr "O alcume xa está rexistrado por outra persoa" -#: mod_muc/mod_muc.erl:787 +#: mod_muc/mod_muc.erl:788 mod_muc/mod_muc_odbc.erl:811 msgid "You must fill in field \"Nickname\" in the form" msgstr "Debes encher o campo \"Alcumo\" no formulario" -#: mod_muc/mod_muc.erl:807 +#: mod_muc/mod_muc.erl:808 mod_muc/mod_muc_odbc.erl:831 msgid "ejabberd MUC module" msgstr "Módulo de MUC para ejabberd" @@ -631,8 +637,8 @@ msgstr "foi expulsado por mor dun sistema de peche" msgid "is now known as" msgstr "cámbiase o nome a" -#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:689 -#: mod_muc/mod_muc_room.erl:2138 +#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:688 +#: mod_muc/mod_muc_room.erl:2393 msgid " has set the subject to: " msgstr " puxo o asunto: " @@ -732,33 +738,49 @@ msgstr "Novembro" msgid "December" msgstr "Decembro" -#: mod_muc/mod_muc_log.erl:751 +#: mod_muc/mod_muc_log.erl:750 msgid "Room Configuration" msgstr "Configuración da Sala" -#: mod_muc/mod_muc_log.erl:760 +#: mod_muc/mod_muc_log.erl:759 msgid "Room Occupants" msgstr "Ocupantes da sala" -#: mod_muc/mod_muc_room.erl:170 +#: mod_muc/mod_muc_room.erl:174 msgid "Traffic rate limit is exceeded" msgstr "Hase exedido o límite de tráfico" -#: mod_muc/mod_muc_room.erl:242 +#: mod_muc/mod_muc_room.erl:246 msgid "" "This participant is kicked from the room because he sent an error message" msgstr "" "Este participante é expulsado da sala, xa que enviou unha mensaxe de erro" -#: mod_muc/mod_muc_room.erl:251 +#: mod_muc/mod_muc_room.erl:255 msgid "It is not allowed to send private messages to the conference" msgstr "Impedir o envio de mensaxes privadas á sala" -#: mod_muc/mod_muc_room.erl:296 +#: mod_muc/mod_muc_room.erl:332 +msgid "Please, wait for a while before sending new voice request" +msgstr "" + +#: mod_muc/mod_muc_room.erl:347 +msgid "Voice requests are disabled in this conference" +msgstr "" + +#: mod_muc/mod_muc_room.erl:364 +msgid "Failed to extract JID from your voice request approval" +msgstr "" + +#: mod_muc/mod_muc_room.erl:393 +msgid "Only moderators can approve voice requests" +msgstr "" + +#: mod_muc/mod_muc_room.erl:408 msgid "Improper message type" msgstr "Tipo de mensaxe incorrecta" -#: mod_muc/mod_muc_room.erl:406 +#: mod_muc/mod_muc_room.erl:518 msgid "" "This participant is kicked from the room because he sent an error message to " "another participant" @@ -766,32 +788,32 @@ msgstr "" "Este participante é expulsado da sala, porque el enviou unha mensaxe de erro " "a outro participante" -#: mod_muc/mod_muc_room.erl:419 +#: mod_muc/mod_muc_room.erl:531 msgid "It is not allowed to send private messages of type \"groupchat\"" msgstr "Non está permitido enviar mensaxes privadas do tipo \"groupchat\"" -#: mod_muc/mod_muc_room.erl:431 mod_muc/mod_muc_room.erl:486 +#: mod_muc/mod_muc_room.erl:543 mod_muc/mod_muc_room.erl:611 msgid "Recipient is not in the conference room" msgstr "O receptor non está na sala de conferencia" -#: mod_muc/mod_muc_room.erl:451 mod_muc/mod_muc_room.erl:829 -#: mod_muc/mod_muc_room.erl:3609 -msgid "Only occupants are allowed to send messages to the conference" -msgstr "Só os ocupantes poden enviar mensaxes á sala" - -#: mod_muc/mod_muc_room.erl:460 +#: mod_muc/mod_muc_room.erl:564 mod_muc/mod_muc_room.erl:585 msgid "It is not allowed to send private messages" msgstr "Non está permitido enviar mensaxes privadas" -#: mod_muc/mod_muc_room.erl:509 +#: mod_muc/mod_muc_room.erl:576 mod_muc/mod_muc_room.erl:956 +#: mod_muc/mod_muc_room.erl:4040 +msgid "Only occupants are allowed to send messages to the conference" +msgstr "Só os ocupantes poden enviar mensaxes á sala" + +#: mod_muc/mod_muc_room.erl:634 msgid "Only occupants are allowed to send queries to the conference" msgstr "Só os ocupantes poden enviar solicitudes á sala" -#: mod_muc/mod_muc_room.erl:521 +#: mod_muc/mod_muc_room.erl:646 msgid "Queries to the conference members are not allowed in this room" msgstr "Nesta sala non se permiten solicitudes aos membros da sala" -#: mod_muc/mod_muc_room.erl:805 +#: mod_muc/mod_muc_room.erl:932 msgid "" "Only moderators and participants are allowed to change the subject in this " "room" @@ -799,199 +821,235 @@ msgstr "" "Só os moderadores e os participantes se lles permite cambiar o tema nesta " "sala" -#: mod_muc/mod_muc_room.erl:810 +#: mod_muc/mod_muc_room.erl:937 msgid "Only moderators are allowed to change the subject in this room" msgstr "Só os moderadores están autorizados a cambiar o tema nesta sala" -#: mod_muc/mod_muc_room.erl:820 +#: mod_muc/mod_muc_room.erl:947 msgid "Visitors are not allowed to send messages to all occupants" msgstr "Os visitantes non poden enviar mensaxes a todos os ocupantes" -#: mod_muc/mod_muc_room.erl:891 +#: mod_muc/mod_muc_room.erl:1021 msgid "" "This participant is kicked from the room because he sent an error presence" msgstr "" "Este participante é expulsado da sala, porque el enviou un erro de presenza" -#: mod_muc/mod_muc_room.erl:909 +#: mod_muc/mod_muc_room.erl:1040 msgid "Visitors are not allowed to change their nicknames in this room" msgstr "" "Os visitantes non están autorizados a cambiar os seus That alcumes nesta sala" -#: mod_muc/mod_muc_room.erl:922 mod_muc/mod_muc_room.erl:1569 +#: mod_muc/mod_muc_room.erl:1053 mod_muc/mod_muc_room.erl:1779 msgid "That nickname is already in use by another occupant" msgstr "Ese alcume que xa está en uso por outro ocupante" -#: mod_muc/mod_muc_room.erl:1558 +#: mod_muc/mod_muc_room.erl:1768 msgid "You have been banned from this room" msgstr "fuches bloqueado nesta sala" -#: mod_muc/mod_muc_room.erl:1561 +#: mod_muc/mod_muc_room.erl:1771 msgid "Membership is required to enter this room" msgstr "Necesitas ser membro desta sala para poder entrar" -#: mod_muc/mod_muc_room.erl:1597 +#: mod_muc/mod_muc_room.erl:1807 msgid "This room is not anonymous" msgstr "Sala non anónima" -#: mod_muc/mod_muc_room.erl:1623 +#: mod_muc/mod_muc_room.erl:1833 msgid "A password is required to enter this room" msgstr "Necesítase contrasinal para entrar nesta sala" -#: mod_muc/mod_muc_room.erl:1645 mod_register.erl:246 +#: mod_muc/mod_muc_room.erl:1855 mod_register.erl:246 msgid "Too many CAPTCHA requests" msgstr "" -#: mod_muc/mod_muc_room.erl:1654 -msgid "Unable to generate a captcha" -msgstr "Non se pode xerar un Captcha" +#: mod_muc/mod_muc_room.erl:1864 mod_register.erl:251 +#, fuzzy +msgid "Unable to generate a CAPTCHA" +msgstr "Non se pode xerar un CAPTCHA" -#: mod_muc/mod_muc_room.erl:1664 +#: mod_muc/mod_muc_room.erl:1874 msgid "Incorrect password" msgstr "Contrasinal incorrecta" -#: mod_muc/mod_muc_room.erl:2193 +#: mod_muc/mod_muc_room.erl:2448 msgid "Administrator privileges required" msgstr "Necesítase privilexios de administrador" -#: mod_muc/mod_muc_room.erl:2208 +#: mod_muc/mod_muc_room.erl:2463 msgid "Moderator privileges required" msgstr "Necesítase privilexios de moderador" -#: mod_muc/mod_muc_room.erl:2363 +#: mod_muc/mod_muc_room.erl:2619 msgid "Jabber ID ~s is invalid" msgstr "O Jabber ID ~s non é válido" -#: mod_muc/mod_muc_room.erl:2377 +#: mod_muc/mod_muc_room.erl:2633 msgid "Nickname ~s does not exist in the room" msgstr "O alcume ~s non existe na sala" -#: mod_muc/mod_muc_room.erl:2403 mod_muc/mod_muc_room.erl:2797 +#: mod_muc/mod_muc_room.erl:2659 mod_muc/mod_muc_room.erl:3049 msgid "Invalid affiliation: ~s" msgstr "Afiliación non válida: ~s" -#: mod_muc/mod_muc_room.erl:2460 +#: mod_muc/mod_muc_room.erl:2713 msgid "Invalid role: ~s" msgstr "Rol non válido: ~s" -#: mod_muc/mod_muc_room.erl:2774 mod_muc/mod_muc_room.erl:2810 +#: mod_muc/mod_muc_room.erl:3026 mod_muc/mod_muc_room.erl:3062 msgid "Owner privileges required" msgstr "Requírense privilexios de propietario da sala" -#: mod_muc/mod_muc_room.erl:2941 +#: mod_muc/mod_muc_room.erl:3195 msgid "Configuration of room ~s" msgstr "Configuración para a sala ~s" -#: mod_muc/mod_muc_room.erl:2946 +#: mod_muc/mod_muc_room.erl:3200 msgid "Room title" msgstr "Título da sala" -#: mod_muc/mod_muc_room.erl:2949 mod_muc/mod_muc_room.erl:3388 +#: mod_muc/mod_muc_room.erl:3203 mod_muc/mod_muc_room.erl:3692 msgid "Room description" msgstr "Descrición da sala" -#: mod_muc/mod_muc_room.erl:2956 +#: mod_muc/mod_muc_room.erl:3210 msgid "Make room persistent" msgstr "Sala permanente" -#: mod_muc/mod_muc_room.erl:2961 +#: mod_muc/mod_muc_room.erl:3215 msgid "Make room public searchable" msgstr "Sala publicamente visible" -#: mod_muc/mod_muc_room.erl:2964 +#: mod_muc/mod_muc_room.erl:3218 msgid "Make participants list public" msgstr "A lista de participantes é pública" -#: mod_muc/mod_muc_room.erl:2967 +#: mod_muc/mod_muc_room.erl:3221 msgid "Make room password protected" msgstr "Protexer a sala con contrasinal" -#: mod_muc/mod_muc_room.erl:2978 +#: mod_muc/mod_muc_room.erl:3232 msgid "Maximum Number of Occupants" msgstr "Número máximo de ocupantes" -#: mod_muc/mod_muc_room.erl:2985 +#: mod_muc/mod_muc_room.erl:3239 msgid "No limit" msgstr "Sen límite" -#: mod_muc/mod_muc_room.erl:2996 +#: mod_muc/mod_muc_room.erl:3250 msgid "Present real Jabber IDs to" msgstr "Os Jabber ID reais poden velos" -#: mod_muc/mod_muc_room.erl:3004 +#: mod_muc/mod_muc_room.erl:3258 mod_muc/mod_muc_room.erl:3292 msgid "moderators only" msgstr "só moderadores" -#: mod_muc/mod_muc_room.erl:3006 +#: mod_muc/mod_muc_room.erl:3260 mod_muc/mod_muc_room.erl:3294 msgid "anyone" msgstr "calquera" -#: mod_muc/mod_muc_room.erl:3008 +#: mod_muc/mod_muc_room.erl:3262 msgid "Make room members-only" msgstr "Sala só para membros" -#: mod_muc/mod_muc_room.erl:3011 +#: mod_muc/mod_muc_room.erl:3265 msgid "Make room moderated" msgstr "Facer sala moderada" -#: mod_muc/mod_muc_room.erl:3014 +#: mod_muc/mod_muc_room.erl:3268 msgid "Default users as participants" msgstr "Os usuarios son participantes por defecto" -#: mod_muc/mod_muc_room.erl:3017 +#: mod_muc/mod_muc_room.erl:3271 msgid "Allow users to change the subject" msgstr "Permitir aos usuarios cambiar o asunto" -#: mod_muc/mod_muc_room.erl:3020 +#: mod_muc/mod_muc_room.erl:3274 msgid "Allow users to send private messages" msgstr "Permitir aos usuarios enviar mensaxes privadas" -#: mod_muc/mod_muc_room.erl:3023 +#: mod_muc/mod_muc_room.erl:3279 +#, fuzzy +msgid "Allow visitors to send private messages to" +msgstr "Permitir aos usuarios enviar mensaxes privadas" + +#: mod_muc/mod_muc_room.erl:3290 +msgid "nobody" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3296 msgid "Allow users to query other users" msgstr "Permitir aos usuarios consultar a outros usuarios" -#: mod_muc/mod_muc_room.erl:3026 +#: mod_muc/mod_muc_room.erl:3299 msgid "Allow users to send invites" msgstr "Permitir aos usuarios enviar invitacións" -#: mod_muc/mod_muc_room.erl:3029 +#: mod_muc/mod_muc_room.erl:3302 msgid "Allow visitors to send status text in presence updates" msgstr "" "Permitir aos visitantes enviar texto de estado nas actualizacións depresenza" -#: mod_muc/mod_muc_room.erl:3032 +#: mod_muc/mod_muc_room.erl:3305 msgid "Allow visitors to change nickname" msgstr "Permitir aos visitantes cambiarse o alcume" -#: mod_muc/mod_muc_room.erl:3038 -msgid "Make room captcha protected" -msgstr "Protexer a sala con captcha" +#: mod_muc/mod_muc_room.erl:3308 +#, fuzzy +msgid "Allow visitors to send voice requests" +msgstr "Permitir aos usuarios enviar invitacións" -#: mod_muc/mod_muc_room.erl:3043 +#: mod_muc/mod_muc_room.erl:3311 +msgid "Minimum interval between voice requests (in seconds)" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3317 +msgid "Make room CAPTCHA protected" +msgstr "Protexer a sala con CAPTCHA" + +#: mod_muc/mod_muc_room.erl:3322 msgid "Exclude Jabber IDs from CAPTCHA challenge" msgstr "" -#: mod_muc/mod_muc_room.erl:3050 +#: mod_muc/mod_muc_room.erl:3329 msgid "Enable logging" msgstr "Gardar históricos" -#: mod_muc/mod_muc_room.erl:3058 +#: mod_muc/mod_muc_room.erl:3337 msgid "You need an x:data capable client to configure room" msgstr "Necesitas un cliente con soporte de x:data para configurar a sala" -#: mod_muc/mod_muc_room.erl:3390 +#: mod_muc/mod_muc_room.erl:3694 msgid "Number of occupants" msgstr "Número de ocupantes" -#: mod_muc/mod_muc_room.erl:3446 +#: mod_muc/mod_muc_room.erl:3750 msgid "private, " msgstr "privado" -#: mod_muc/mod_muc_room.erl:3529 +#: mod_muc/mod_muc_room.erl:3799 +msgid "Voice request" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3803 +msgid "Either approve or decline the voice request." +msgstr "" + +#: mod_muc/mod_muc_room.erl:3809 +#, fuzzy +msgid "User JID" +msgstr "Usuario " + +#: mod_muc/mod_muc_room.erl:3811 +msgid "Grant voice to this person?" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3960 msgid "~s invites you to the room ~s" msgstr "~s invítache á sala ~s" -#: mod_muc/mod_muc_room.erl:3538 +#: mod_muc/mod_muc_room.erl:3969 msgid "the password is" msgstr "a contrasinal é" @@ -1007,14 +1065,15 @@ msgid "~s's Offline Messages Queue" msgstr "Cola de mensaxes diferidas de ~s" #: mod_offline.erl:563 mod_offline_odbc.erl:411 mod_roster.erl:987 -#: mod_roster_odbc.erl:1092 mod_shared_roster.erl:896 -#: mod_shared_roster.erl:1005 web/ejabberd_web_admin.erl:833 +#: mod_roster_odbc.erl:1104 mod_shared_roster.erl:901 +#: mod_shared_roster.erl:1010 mod_shared_roster_odbc.erl:930 +#: mod_shared_roster_odbc.erl:1039 web/ejabberd_web_admin.erl:833 #: web/ejabberd_web_admin.erl:874 web/ejabberd_web_admin.erl:942 #: web/ejabberd_web_admin.erl:978 web/ejabberd_web_admin.erl:1019 -#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1758 -#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1961 -#: web/ejabberd_web_admin.erl:2030 web/ejabberd_web_admin.erl:2134 -#: web/ejabberd_web_admin.erl:2159 web/ejabberd_web_admin.erl:2247 +#: web/ejabberd_web_admin.erl:1508 web/ejabberd_web_admin.erl:1760 +#: web/ejabberd_web_admin.erl:1931 web/ejabberd_web_admin.erl:1963 +#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2135 +#: web/ejabberd_web_admin.erl:2160 web/ejabberd_web_admin.erl:2248 msgid "Submitted" msgstr "Enviado" @@ -1034,8 +1093,9 @@ msgstr "Para" msgid "Packet" msgstr "Paquete" -#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:903 -#: web/ejabberd_web_admin.erl:882 web/ejabberd_web_admin.erl:986 +#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:908 +#: mod_shared_roster_odbc.erl:937 web/ejabberd_web_admin.erl:882 +#: web/ejabberd_web_admin.erl:986 msgid "Delete Selected" msgstr "Eliminar os seleccionados" @@ -1051,104 +1111,104 @@ msgstr "Borrar Todas as Mensaxes Sen conexión" msgid "ejabberd SOCKS5 Bytestreams module" msgstr "ejabberd SOCKS5 Bytestreams module" -#: mod_pubsub/mod_pubsub.erl:1119 mod_pubsub/mod_pubsub_odbc.erl:928 +#: mod_pubsub/mod_pubsub.erl:1120 mod_pubsub/mod_pubsub_odbc.erl:929 msgid "Publish-Subscribe" msgstr "Publicar-Subscribir" -#: mod_pubsub/mod_pubsub.erl:1213 mod_pubsub/mod_pubsub_odbc.erl:1024 +#: mod_pubsub/mod_pubsub.erl:1214 mod_pubsub/mod_pubsub_odbc.erl:1025 msgid "ejabberd Publish-Subscribe module" msgstr "Módulo de Publicar-Subscribir de ejabberd" -#: mod_pubsub/mod_pubsub.erl:1496 mod_pubsub/mod_pubsub_odbc.erl:1311 +#: mod_pubsub/mod_pubsub.erl:1497 mod_pubsub/mod_pubsub_odbc.erl:1312 msgid "PubSub subscriber request" msgstr "Petición de subscriptor de PubSub" -#: mod_pubsub/mod_pubsub.erl:1498 mod_pubsub/mod_pubsub_odbc.erl:1313 +#: mod_pubsub/mod_pubsub.erl:1499 mod_pubsub/mod_pubsub_odbc.erl:1314 msgid "Choose whether to approve this entity's subscription." msgstr "Decidir se aprobar a subscripción desta entidade." -#: mod_pubsub/mod_pubsub.erl:1504 mod_pubsub/mod_pubsub_odbc.erl:1319 +#: mod_pubsub/mod_pubsub.erl:1505 mod_pubsub/mod_pubsub_odbc.erl:1320 msgid "Node ID" msgstr "Nodo IDE" -#: mod_pubsub/mod_pubsub.erl:1509 mod_pubsub/mod_pubsub_odbc.erl:1324 +#: mod_pubsub/mod_pubsub.erl:1510 mod_pubsub/mod_pubsub_odbc.erl:1325 msgid "Subscriber Address" msgstr "Dirección do subscriptor" -#: mod_pubsub/mod_pubsub.erl:1515 mod_pubsub/mod_pubsub_odbc.erl:1330 +#: mod_pubsub/mod_pubsub.erl:1516 mod_pubsub/mod_pubsub_odbc.erl:1331 msgid "Allow this Jabber ID to subscribe to this pubsub node?" msgstr "Desexas permitir a este JabberID que se subscriba a este nodo PubSub?" -#: mod_pubsub/mod_pubsub.erl:3416 mod_pubsub/mod_pubsub_odbc.erl:3229 +#: mod_pubsub/mod_pubsub.erl:3474 mod_pubsub/mod_pubsub_odbc.erl:3287 msgid "Deliver payloads with event notifications" msgstr "Enviar payloads xunto coas notificacións de eventos" -#: mod_pubsub/mod_pubsub.erl:3417 mod_pubsub/mod_pubsub_odbc.erl:3230 +#: mod_pubsub/mod_pubsub.erl:3475 mod_pubsub/mod_pubsub_odbc.erl:3288 msgid "Deliver event notifications" msgstr "Entregar notificacións de eventos" -#: mod_pubsub/mod_pubsub.erl:3418 mod_pubsub/mod_pubsub_odbc.erl:3231 +#: mod_pubsub/mod_pubsub.erl:3476 mod_pubsub/mod_pubsub_odbc.erl:3289 msgid "Notify subscribers when the node configuration changes" msgstr "Notificar subscriptores cando cambia a configuración do nodo" -#: mod_pubsub/mod_pubsub.erl:3419 mod_pubsub/mod_pubsub_odbc.erl:3232 +#: mod_pubsub/mod_pubsub.erl:3477 mod_pubsub/mod_pubsub_odbc.erl:3290 msgid "Notify subscribers when the node is deleted" msgstr "Notificar subscriptores cando o nodo bórrase" -#: mod_pubsub/mod_pubsub.erl:3420 mod_pubsub/mod_pubsub_odbc.erl:3233 +#: mod_pubsub/mod_pubsub.erl:3478 mod_pubsub/mod_pubsub_odbc.erl:3291 msgid "Notify subscribers when items are removed from the node" msgstr "Notificar subscriptores cando os elementos bórranse do nodo" -#: mod_pubsub/mod_pubsub.erl:3421 mod_pubsub/mod_pubsub_odbc.erl:3234 +#: mod_pubsub/mod_pubsub.erl:3479 mod_pubsub/mod_pubsub_odbc.erl:3292 msgid "Persist items to storage" msgstr "Persistir elementos ao almacenar" -#: mod_pubsub/mod_pubsub.erl:3422 mod_pubsub/mod_pubsub_odbc.erl:3235 +#: mod_pubsub/mod_pubsub.erl:3480 mod_pubsub/mod_pubsub_odbc.erl:3293 msgid "A friendly name for the node" msgstr "Un nome para o nodo" -#: mod_pubsub/mod_pubsub.erl:3423 mod_pubsub/mod_pubsub_odbc.erl:3236 +#: mod_pubsub/mod_pubsub.erl:3481 mod_pubsub/mod_pubsub_odbc.erl:3294 msgid "Max # of items to persist" msgstr "Máximo # de elementos que persisten" -#: mod_pubsub/mod_pubsub.erl:3424 mod_pubsub/mod_pubsub_odbc.erl:3237 +#: mod_pubsub/mod_pubsub.erl:3482 mod_pubsub/mod_pubsub_odbc.erl:3295 msgid "Whether to allow subscriptions" msgstr "Permitir subscripciones" -#: mod_pubsub/mod_pubsub.erl:3425 mod_pubsub/mod_pubsub_odbc.erl:3238 +#: mod_pubsub/mod_pubsub.erl:3483 mod_pubsub/mod_pubsub_odbc.erl:3296 msgid "Specify the access model" msgstr "Especifica o modelo de acceso" -#: mod_pubsub/mod_pubsub.erl:3428 mod_pubsub/mod_pubsub_odbc.erl:3241 +#: mod_pubsub/mod_pubsub.erl:3486 mod_pubsub/mod_pubsub_odbc.erl:3299 msgid "Roster groups allowed to subscribe" msgstr "Lista de grupos autorizados a subscribir" -#: mod_pubsub/mod_pubsub.erl:3429 mod_pubsub/mod_pubsub_odbc.erl:3242 +#: mod_pubsub/mod_pubsub.erl:3487 mod_pubsub/mod_pubsub_odbc.erl:3300 msgid "Specify the publisher model" msgstr "Especificar o modelo do publicante" -#: mod_pubsub/mod_pubsub.erl:3431 mod_pubsub/mod_pubsub_odbc.erl:3244 +#: mod_pubsub/mod_pubsub.erl:3489 mod_pubsub/mod_pubsub_odbc.erl:3302 msgid "Purge all items when the relevant publisher goes offline" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3432 mod_pubsub/mod_pubsub_odbc.erl:3245 +#: mod_pubsub/mod_pubsub.erl:3490 mod_pubsub/mod_pubsub_odbc.erl:3303 #, fuzzy msgid "Specify the event message type" msgstr "Especifica o modelo de acceso" -#: mod_pubsub/mod_pubsub.erl:3434 mod_pubsub/mod_pubsub_odbc.erl:3247 +#: mod_pubsub/mod_pubsub.erl:3492 mod_pubsub/mod_pubsub_odbc.erl:3305 msgid "Max payload size in bytes" msgstr "Máximo tamaño do payload en bytes" -#: mod_pubsub/mod_pubsub.erl:3435 mod_pubsub/mod_pubsub_odbc.erl:3248 +#: mod_pubsub/mod_pubsub.erl:3493 mod_pubsub/mod_pubsub_odbc.erl:3306 msgid "When to send the last published item" msgstr "Cando enviar o último elemento publicado" -#: mod_pubsub/mod_pubsub.erl:3437 mod_pubsub/mod_pubsub_odbc.erl:3250 +#: mod_pubsub/mod_pubsub.erl:3495 mod_pubsub/mod_pubsub_odbc.erl:3308 msgid "Only deliver notifications to available users" msgstr "Só enviar notificacións aos usuarios dispoñibles" -#: mod_pubsub/mod_pubsub.erl:3438 mod_pubsub/mod_pubsub_odbc.erl:3251 +#: mod_pubsub/mod_pubsub.erl:3496 mod_pubsub/mod_pubsub_odbc.erl:3309 msgid "The collections with which a node is affiliated" msgstr "As coleccións coas que un nodo está afiliado" @@ -1167,16 +1227,11 @@ msgid "Choose a username and password to register with this server" msgstr "" "Escolle un nome de usuario e contrasinal para rexistrarche neste servidor" -#: mod_register.erl:230 mod_vcard.erl:358 mod_vcard_odbc.erl:336 -#: web/ejabberd_web_admin.erl:1516 web/ejabberd_web_admin.erl:1573 +#: mod_register.erl:230 mod_vcard.erl:364 mod_vcard_odbc.erl:342 +#: web/ejabberd_web_admin.erl:1515 web/ejabberd_web_admin.erl:1572 msgid "User" msgstr "Usuario" -#: mod_register.erl:251 -#, fuzzy -msgid "Unable to generate a CAPTCHA" -msgstr "Non se pode xerar un Captcha" - #: mod_register.erl:316 mod_register.erl:361 #, fuzzy msgid "The password is too weak" @@ -1186,120 +1241,123 @@ msgstr "a contrasinal é" msgid "Users are not allowed to register accounts so quickly" msgstr "Os usuarios non están autorizados a rexistrar contas con tanta rapidez" -#: mod_roster.erl:938 mod_roster_odbc.erl:1043 web/ejabberd_web_admin.erl:1699 -#: web/ejabberd_web_admin.erl:1884 web/ejabberd_web_admin.erl:1895 -#: web/ejabberd_web_admin.erl:2218 +#: mod_roster.erl:938 mod_roster_odbc.erl:1055 web/ejabberd_web_admin.erl:1701 +#: web/ejabberd_web_admin.erl:1886 web/ejabberd_web_admin.erl:1897 +#: web/ejabberd_web_admin.erl:2219 msgid "None" msgstr "Ningún" -#: mod_roster.erl:945 mod_roster_odbc.erl:1050 +#: mod_roster.erl:945 mod_roster_odbc.erl:1062 msgid "Subscription" msgstr "Subscripción" -#: mod_roster.erl:946 mod_roster_odbc.erl:1051 +#: mod_roster.erl:946 mod_roster_odbc.erl:1063 msgid "Pending" msgstr "Pendente" -#: mod_roster.erl:947 mod_roster_odbc.erl:1052 +#: mod_roster.erl:947 mod_roster_odbc.erl:1064 msgid "Groups" msgstr "Grupos" -#: mod_roster.erl:974 mod_roster_odbc.erl:1079 +#: mod_roster.erl:974 mod_roster_odbc.erl:1091 msgid "Validate" msgstr "Validar" -#: mod_roster.erl:982 mod_roster_odbc.erl:1087 +#: mod_roster.erl:982 mod_roster_odbc.erl:1099 msgid "Remove" msgstr "Borrar" -#: mod_roster.erl:985 mod_roster_odbc.erl:1090 +#: mod_roster.erl:985 mod_roster_odbc.erl:1102 msgid "Roster of " msgstr "Lista de contactos de " -#: mod_roster.erl:988 mod_roster_odbc.erl:1093 mod_shared_roster.erl:897 -#: mod_shared_roster.erl:1006 web/ejabberd_web_admin.erl:834 +#: mod_roster.erl:988 mod_roster_odbc.erl:1105 mod_shared_roster.erl:902 +#: mod_shared_roster.erl:1011 mod_shared_roster_odbc.erl:931 +#: mod_shared_roster_odbc.erl:1040 web/ejabberd_web_admin.erl:834 #: web/ejabberd_web_admin.erl:875 web/ejabberd_web_admin.erl:943 #: web/ejabberd_web_admin.erl:979 web/ejabberd_web_admin.erl:1020 -#: web/ejabberd_web_admin.erl:1510 web/ejabberd_web_admin.erl:1759 -#: web/ejabberd_web_admin.erl:1930 web/ejabberd_web_admin.erl:2135 -#: web/ejabberd_web_admin.erl:2160 +#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1761 +#: web/ejabberd_web_admin.erl:1932 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2161 msgid "Bad format" msgstr "Mal formato" -#: mod_roster.erl:995 mod_roster_odbc.erl:1100 +#: mod_roster.erl:995 mod_roster_odbc.erl:1112 msgid "Add Jabber ID" msgstr "Engadir ID Jabber" -#: mod_roster.erl:1094 mod_roster_odbc.erl:1199 +#: mod_roster.erl:1094 mod_roster_odbc.erl:1211 msgid "Roster" msgstr "Lista de contactos" -#: mod_shared_roster.erl:852 mod_shared_roster.erl:894 -#: mod_shared_roster.erl:1002 +#: mod_shared_roster.erl:857 mod_shared_roster.erl:899 +#: mod_shared_roster.erl:1007 mod_shared_roster_odbc.erl:886 +#: mod_shared_roster_odbc.erl:928 mod_shared_roster_odbc.erl:1036 msgid "Shared Roster Groups" msgstr "Grupos Compartidos" -#: mod_shared_roster.erl:890 web/ejabberd_web_admin.erl:1366 -#: web/ejabberd_web_admin.erl:2460 +#: mod_shared_roster.erl:895 mod_shared_roster_odbc.erl:924 +#: web/ejabberd_web_admin.erl:1365 web/ejabberd_web_admin.erl:2461 msgid "Add New" msgstr "Engadir novo" -#: mod_shared_roster.erl:973 +#: mod_shared_roster.erl:978 mod_shared_roster_odbc.erl:1007 msgid "Name:" msgstr "Nome:" -#: mod_shared_roster.erl:978 +#: mod_shared_roster.erl:983 mod_shared_roster_odbc.erl:1012 msgid "Description:" msgstr "Descrición:" -#: mod_shared_roster.erl:986 +#: mod_shared_roster.erl:991 mod_shared_roster_odbc.erl:1020 msgid "Members:" msgstr "Membros:" -#: mod_shared_roster.erl:994 +#: mod_shared_roster.erl:999 mod_shared_roster_odbc.erl:1028 msgid "Displayed Groups:" msgstr "Mostrar grupos:" -#: mod_shared_roster.erl:1003 +#: mod_shared_roster.erl:1008 mod_shared_roster_odbc.erl:1037 msgid "Group " msgstr "Grupo " -#: mod_shared_roster.erl:1012 web/ejabberd_web_admin.erl:840 -#: web/ejabberd_web_admin.erl:884 web/ejabberd_web_admin.erl:949 -#: web/ejabberd_web_admin.erl:1026 web/ejabberd_web_admin.erl:2015 +#: mod_shared_roster.erl:1017 mod_shared_roster_odbc.erl:1046 +#: web/ejabberd_web_admin.erl:840 web/ejabberd_web_admin.erl:884 +#: web/ejabberd_web_admin.erl:949 web/ejabberd_web_admin.erl:1026 +#: web/ejabberd_web_admin.erl:2017 msgid "Submit" msgstr "Enviar" -#: mod_vcard.erl:165 mod_vcard_ldap.erl:237 mod_vcard_odbc.erl:129 +#: mod_vcard.erl:165 mod_vcard_ldap.erl:238 mod_vcard_odbc.erl:129 msgid "Erlang Jabber Server" msgstr "Servidor Jabber en Erlang" -#: mod_vcard.erl:358 mod_vcard.erl:472 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:448 +#: mod_vcard.erl:364 mod_vcard.erl:478 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:454 msgid "Birthday" msgstr "Aniversario" -#: mod_vcard.erl:358 mod_vcard.erl:474 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:450 +#: mod_vcard.erl:364 mod_vcard.erl:480 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:456 msgid "City" msgstr "Cidade" -#: mod_vcard.erl:358 mod_vcard.erl:473 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:449 +#: mod_vcard.erl:364 mod_vcard.erl:479 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:455 msgid "Country" msgstr "País" -#: mod_vcard.erl:358 mod_vcard.erl:475 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:451 +#: mod_vcard.erl:364 mod_vcard.erl:481 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:457 msgid "Email" msgstr "Email" -#: mod_vcard.erl:358 mod_vcard.erl:470 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:446 +#: mod_vcard.erl:364 mod_vcard.erl:476 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:452 msgid "Family Name" msgstr "Apelido" -#: mod_vcard.erl:358 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_odbc.erl:342 msgid "" "Fill in the form to search for any matching Jabber User (Add * to the end of " "field to match substring)" @@ -1307,52 +1365,52 @@ msgstr "" "Enche o formulario para buscar usuarios Jabber. Engade * ao final dun campo " "para buscar subcadenas." -#: mod_vcard.erl:358 mod_vcard.erl:467 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:443 +#: mod_vcard.erl:364 mod_vcard.erl:473 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:449 msgid "Full Name" msgstr "Nome completo" -#: mod_vcard.erl:358 mod_vcard.erl:469 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:445 +#: mod_vcard.erl:364 mod_vcard.erl:475 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:451 msgid "Middle Name" msgstr "Segundo nome" -#: mod_vcard.erl:358 mod_vcard.erl:468 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:444 web/ejabberd_web_admin.erl:2004 +#: mod_vcard.erl:364 mod_vcard.erl:474 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:450 web/ejabberd_web_admin.erl:2006 msgid "Name" msgstr "Nome" -#: mod_vcard.erl:358 mod_vcard.erl:476 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:452 +#: mod_vcard.erl:364 mod_vcard.erl:482 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:458 msgid "Organization Name" msgstr "Nome da organización" -#: mod_vcard.erl:358 mod_vcard.erl:477 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:453 +#: mod_vcard.erl:364 mod_vcard.erl:483 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:459 msgid "Organization Unit" msgstr "Unidade da organización" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "Search users in " msgstr "Buscar usuarios en " -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "You need an x:data capable client to search" msgstr "Necesitas un cliente con soporte de x:data para poder buscar" -#: mod_vcard.erl:383 mod_vcard_ldap.erl:483 mod_vcard_odbc.erl:361 +#: mod_vcard.erl:389 mod_vcard_ldap.erl:487 mod_vcard_odbc.erl:367 msgid "vCard User Search" msgstr "Procura de usuario en vCard" -#: mod_vcard.erl:439 mod_vcard_ldap.erl:537 mod_vcard_odbc.erl:415 +#: mod_vcard.erl:445 mod_vcard_ldap.erl:541 mod_vcard_odbc.erl:421 msgid "ejabberd vCard module" msgstr "Módulo vCard para ejabberd" -#: mod_vcard.erl:463 mod_vcard_ldap.erl:547 mod_vcard_odbc.erl:439 +#: mod_vcard.erl:469 mod_vcard_ldap.erl:551 mod_vcard_odbc.erl:445 msgid "Search Results for " msgstr "Buscar resultados por " -#: mod_vcard_ldap.erl:458 +#: mod_vcard_ldap.erl:462 msgid "Fill in fields to search for any matching Jabber User" msgstr "Rechea campos para buscar usuarios Jabber que concuerden" @@ -1413,7 +1471,7 @@ msgstr "Mostrar Táboa Ordinaria" msgid "Show Integral Table" msgstr "Mostrar Táboa Integral" -#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1937 +#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1939 msgid "Statistics" msgstr "Estatísticas" @@ -1425,116 +1483,116 @@ msgstr "Non atopado" msgid "Node not found" msgstr "Nodo non atopado" -#: web/ejabberd_web_admin.erl:1461 +#: web/ejabberd_web_admin.erl:1460 msgid "Host" msgstr "Host" -#: web/ejabberd_web_admin.erl:1462 +#: web/ejabberd_web_admin.erl:1461 msgid "Registered Users" msgstr "Usuarios rexistrados" -#: web/ejabberd_web_admin.erl:1574 +#: web/ejabberd_web_admin.erl:1573 msgid "Offline Messages" msgstr "Mensaxes diferidas" -#: web/ejabberd_web_admin.erl:1575 web/ejabberd_web_admin.erl:1765 +#: web/ejabberd_web_admin.erl:1574 web/ejabberd_web_admin.erl:1767 msgid "Last Activity" msgstr "Última actividade" -#: web/ejabberd_web_admin.erl:1657 web/ejabberd_web_admin.erl:1673 +#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 msgid "Registered Users:" msgstr "Usuarios rexistrados:" -#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 -#: web/ejabberd_web_admin.erl:2191 +#: web/ejabberd_web_admin.erl:1661 web/ejabberd_web_admin.erl:1677 +#: web/ejabberd_web_admin.erl:2192 msgid "Online Users:" msgstr "Usuarios conectados:" -#: web/ejabberd_web_admin.erl:1661 +#: web/ejabberd_web_admin.erl:1663 msgid "Outgoing s2s Connections:" msgstr "Conexións S2S saíntes:" -#: web/ejabberd_web_admin.erl:1663 +#: web/ejabberd_web_admin.erl:1665 msgid "Outgoing s2s Servers:" msgstr "Servidores S2S saíntes:" -#: web/ejabberd_web_admin.erl:1732 web/mod_register_web.erl:175 +#: web/ejabberd_web_admin.erl:1734 web/mod_register_web.erl:175 #: web/mod_register_web.erl:372 web/mod_register_web.erl:381 #: web/mod_register_web.erl:411 msgid "Change Password" msgstr "Cambiar contrasinal" -#: web/ejabberd_web_admin.erl:1756 +#: web/ejabberd_web_admin.erl:1758 msgid "User " msgstr "Usuario " -#: web/ejabberd_web_admin.erl:1763 +#: web/ejabberd_web_admin.erl:1765 msgid "Connected Resources:" msgstr "Recursos conectados:" -#: web/ejabberd_web_admin.erl:1764 web/mod_register_web.erl:227 +#: web/ejabberd_web_admin.erl:1766 web/mod_register_web.erl:227 #: web/mod_register_web.erl:519 msgid "Password:" msgstr "Contrasinal:" -#: web/ejabberd_web_admin.erl:1826 +#: web/ejabberd_web_admin.erl:1828 msgid "No Data" msgstr "Sen datos" -#: web/ejabberd_web_admin.erl:1904 +#: web/ejabberd_web_admin.erl:1906 msgid "Nodes" msgstr "Nodos" -#: web/ejabberd_web_admin.erl:1927 web/ejabberd_web_admin.erl:1949 +#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1951 msgid "Node " msgstr "Nodo " -#: web/ejabberd_web_admin.erl:1936 +#: web/ejabberd_web_admin.erl:1938 msgid "Listened Ports" msgstr "Portos de escoita" -#: web/ejabberd_web_admin.erl:1938 web/ejabberd_web_admin.erl:2259 -#: web/ejabberd_web_admin.erl:2447 +#: web/ejabberd_web_admin.erl:1940 web/ejabberd_web_admin.erl:2260 +#: web/ejabberd_web_admin.erl:2448 msgid "Update" msgstr "Actualizar" -#: web/ejabberd_web_admin.erl:1941 web/ejabberd_web_admin.erl:2568 +#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2569 msgid "Restart" msgstr "Reiniciar" -#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2570 +#: web/ejabberd_web_admin.erl:1945 web/ejabberd_web_admin.erl:2571 msgid "Stop" msgstr "Deter" -#: web/ejabberd_web_admin.erl:1957 +#: web/ejabberd_web_admin.erl:1959 msgid "RPC Call Error" msgstr "Erro na chamada RPC" -#: web/ejabberd_web_admin.erl:1998 +#: web/ejabberd_web_admin.erl:2000 msgid "Database Tables at " msgstr "Táboas da base de datos en " -#: web/ejabberd_web_admin.erl:2005 +#: web/ejabberd_web_admin.erl:2007 msgid "Storage Type" msgstr "Tipo de almacenamiento" -#: web/ejabberd_web_admin.erl:2006 +#: web/ejabberd_web_admin.erl:2008 msgid "Elements" msgstr "Elementos" -#: web/ejabberd_web_admin.erl:2007 +#: web/ejabberd_web_admin.erl:2009 msgid "Memory" msgstr "Memoria" -#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2032 web/ejabberd_web_admin.erl:2137 msgid "Error" msgstr "Erro" -#: web/ejabberd_web_admin.erl:2033 +#: web/ejabberd_web_admin.erl:2034 msgid "Backup of " msgstr "Copia de seguridade de " -#: web/ejabberd_web_admin.erl:2035 +#: web/ejabberd_web_admin.erl:2036 msgid "" "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 " @@ -1544,146 +1602,146 @@ msgstr "" "Mnesia. Se está a utilizar o módulo de ODBC, tamén necesita unha copia de " "seguridade da súa base de datos SQL por separado." -#: web/ejabberd_web_admin.erl:2040 +#: web/ejabberd_web_admin.erl:2041 msgid "Store binary backup:" msgstr "Gardar copia de seguridade binaria:" -#: web/ejabberd_web_admin.erl:2044 web/ejabberd_web_admin.erl:2051 -#: web/ejabberd_web_admin.erl:2059 web/ejabberd_web_admin.erl:2066 -#: web/ejabberd_web_admin.erl:2073 web/ejabberd_web_admin.erl:2080 -#: web/ejabberd_web_admin.erl:2087 web/ejabberd_web_admin.erl:2095 -#: web/ejabberd_web_admin.erl:2102 web/ejabberd_web_admin.erl:2109 +#: web/ejabberd_web_admin.erl:2045 web/ejabberd_web_admin.erl:2052 +#: web/ejabberd_web_admin.erl:2060 web/ejabberd_web_admin.erl:2067 +#: web/ejabberd_web_admin.erl:2074 web/ejabberd_web_admin.erl:2081 +#: web/ejabberd_web_admin.erl:2088 web/ejabberd_web_admin.erl:2096 +#: web/ejabberd_web_admin.erl:2103 web/ejabberd_web_admin.erl:2110 msgid "OK" msgstr "Aceptar" -#: web/ejabberd_web_admin.erl:2047 +#: web/ejabberd_web_admin.erl:2048 msgid "Restore binary backup immediately:" msgstr "Restaurar inmediatamente copia de seguridade binaria:" -#: web/ejabberd_web_admin.erl:2055 +#: web/ejabberd_web_admin.erl:2056 msgid "" "Restore binary backup after next ejabberd restart (requires less memory):" msgstr "" "Restaurar copia de seguridade binaria no seguinte reinicio de ejabberd " "(require menos memoria que se instantánea):" -#: web/ejabberd_web_admin.erl:2062 +#: web/ejabberd_web_admin.erl:2063 msgid "Store plain text backup:" msgstr "Gardar copia de seguridade en texto plano:" -#: web/ejabberd_web_admin.erl:2069 +#: web/ejabberd_web_admin.erl:2070 msgid "Restore plain text backup immediately:" msgstr "Restaurar copias de seguridade de texto plano inmediatamente:" -#: web/ejabberd_web_admin.erl:2076 +#: web/ejabberd_web_admin.erl:2077 msgid "Import users data from a PIEFXIS file (XEP-0227):" msgstr "Importar usuarios desde un fichero PIEFXIS" -#: web/ejabberd_web_admin.erl:2083 +#: web/ejabberd_web_admin.erl:2084 msgid "Export data of all users in the server to PIEFXIS files (XEP-0227):" msgstr "" "Exportar datos de todos os usuarios do servidor a ficheros PIEFXIS " "(XEP-0227):" -#: web/ejabberd_web_admin.erl:2090 +#: web/ejabberd_web_admin.erl:2091 msgid "Export data of users in a host to PIEFXIS files (XEP-0227):" msgstr "" "Exportar datos de todos os usuarios do servidor a ficheros PIEFXIS " "(XEP-0227):" -#: web/ejabberd_web_admin.erl:2098 +#: web/ejabberd_web_admin.erl:2099 msgid "Import user data from jabberd14 spool file:" msgstr "Importar usuario de fichero spool de jabberd14:" -#: web/ejabberd_web_admin.erl:2105 +#: web/ejabberd_web_admin.erl:2106 msgid "Import users data from jabberd14 spool directory:" msgstr "Importar usuarios do directorio spool de jabberd14:" -#: web/ejabberd_web_admin.erl:2131 +#: web/ejabberd_web_admin.erl:2132 msgid "Listened Ports at " msgstr "Portos de escoita en " -#: web/ejabberd_web_admin.erl:2156 +#: web/ejabberd_web_admin.erl:2157 msgid "Modules at " msgstr "Módulos en " -#: web/ejabberd_web_admin.erl:2182 +#: web/ejabberd_web_admin.erl:2183 msgid "Statistics of ~p" msgstr "Estatísticas de ~p" -#: web/ejabberd_web_admin.erl:2185 +#: web/ejabberd_web_admin.erl:2186 msgid "Uptime:" msgstr "Tempo desde o inicio:" -#: web/ejabberd_web_admin.erl:2188 +#: web/ejabberd_web_admin.erl:2189 msgid "CPU Time:" msgstr "Tempo consumido de CPU:" -#: web/ejabberd_web_admin.erl:2194 +#: web/ejabberd_web_admin.erl:2195 msgid "Transactions Committed:" msgstr "Transaccións finalizadas:" -#: web/ejabberd_web_admin.erl:2197 +#: web/ejabberd_web_admin.erl:2198 msgid "Transactions Aborted:" msgstr "Transaccións abortadas:" -#: web/ejabberd_web_admin.erl:2200 +#: web/ejabberd_web_admin.erl:2201 msgid "Transactions Restarted:" msgstr "Transaccións reiniciadas:" -#: web/ejabberd_web_admin.erl:2203 +#: web/ejabberd_web_admin.erl:2204 msgid "Transactions Logged:" msgstr "Transaccións rexistradas:" -#: web/ejabberd_web_admin.erl:2245 +#: web/ejabberd_web_admin.erl:2246 msgid "Update " msgstr "Actualizar" -#: web/ejabberd_web_admin.erl:2253 +#: web/ejabberd_web_admin.erl:2254 msgid "Update plan" msgstr "Plan de actualización" -#: web/ejabberd_web_admin.erl:2254 +#: web/ejabberd_web_admin.erl:2255 msgid "Modified modules" msgstr "Módulos Modificados" -#: web/ejabberd_web_admin.erl:2255 +#: web/ejabberd_web_admin.erl:2256 msgid "Update script" msgstr "Script de actualización" -#: web/ejabberd_web_admin.erl:2256 +#: web/ejabberd_web_admin.erl:2257 msgid "Low level update script" msgstr "Script de actualización a baixo nivel" -#: web/ejabberd_web_admin.erl:2257 +#: web/ejabberd_web_admin.erl:2258 msgid "Script check" msgstr "Comprobación de script" -#: web/ejabberd_web_admin.erl:2425 +#: web/ejabberd_web_admin.erl:2426 msgid "Port" msgstr "Porto" -#: web/ejabberd_web_admin.erl:2426 +#: web/ejabberd_web_admin.erl:2427 msgid "IP" msgstr "IP" -#: web/ejabberd_web_admin.erl:2427 +#: web/ejabberd_web_admin.erl:2428 msgid "Protocol" msgstr "Protocolo" -#: web/ejabberd_web_admin.erl:2428 web/ejabberd_web_admin.erl:2555 +#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 msgid "Module" msgstr "Módulo" -#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 +#: web/ejabberd_web_admin.erl:2430 web/ejabberd_web_admin.erl:2557 msgid "Options" msgstr "Opcións" -#: web/ejabberd_web_admin.erl:2449 +#: web/ejabberd_web_admin.erl:2450 msgid "Delete" msgstr "Eliminar" -#: web/ejabberd_web_admin.erl:2578 +#: web/ejabberd_web_admin.erl:2579 msgid "Start" msgstr "Iniciar" @@ -1804,8 +1862,8 @@ msgid "Unregister" msgstr "" #, fuzzy -#~ msgid "Captcha test failed" -#~ msgstr "O Captcha é válido." +#~ msgid "CAPTCHA test failed" +#~ msgstr "O CAPTCHA é válido." #~ msgid "Encodings" #~ msgstr "Codificaciones" diff --git a/src/msgs/id.msg b/src/msgs/id.msg index 1922ad0c7..33499739d 100644 --- a/src/msgs/id.msg +++ b/src/msgs/id.msg @@ -168,7 +168,7 @@ {"List of modules to start","Daftar modul untuk memulai"}. {"Low level update script","Perbaruan naskah tingkat rendah"}. {"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 moderated","Buat ruangan hanya untuk moderator saja"}. {"Make room password protected","Buat ruangan yang dilindungi dengan kata sandi"}. @@ -338,7 +338,7 @@ {"Sunday","Minggu"}. {"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"}. -{"The captcha is valid.","Captcha ini benar."}. +{"The CAPTCHA is valid.","Captcha ini benar."}. {"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 password is","kata sandi yaitu:"}. @@ -365,7 +365,6 @@ {"Transactions Logged:","Transaksi yang ditempuh:"}. {"Transactions Restarted:","Transaksi yang dijalankan ulang:"}. {"Tuesday","Selasa"}. -{"Unable to generate a captcha","Tidak dapat menghasilkan captcha"}. {"Unable to generate a CAPTCHA","Tidak dapat menghasilkan CAPTCHA"}. {"Unauthorized","Ditolak"}. {"Unregister a Jabber account","Nonaktifkan akun jabber"}. diff --git a/src/msgs/id.po b/src/msgs/id.po index d4e10eeaf..6dd2c5c6c 100644 --- a/src/msgs/id.po +++ b/src/msgs/id.po @@ -19,11 +19,11 @@ msgstr "Penggunaan STARTTLS diperlukan" msgid "No resource provided" msgstr "Tidak ada sumber daya yang disediakan" -#: ejabberd_c2s.erl:1149 +#: ejabberd_c2s.erl:1197 msgid "Replaced by new connection" msgstr "Diganti dengan koneksi baru" -#: ejabberd_c2s.erl:1837 +#: ejabberd_c2s.erl:1885 msgid "Your active privacy list has denied the routing of this stanza." msgstr "Daftar privasi aktif Anda telah menolak routing ztanza ini" @@ -47,7 +47,7 @@ msgid "CAPTCHA web page" msgstr "CAPTCHA laman web" #: ejabberd_captcha.erl:307 -msgid "The captcha is valid." +msgid "The CAPTCHA is valid." msgstr "Captcha ini benar." #: mod_adhoc.erl:95 mod_adhoc.erl:125 mod_adhoc.erl:143 mod_adhoc.erl:161 @@ -62,64 +62,67 @@ msgstr "Ping" msgid "Pong" msgstr "Pong" -#: mod_announce.erl:506 +#: mod_announce.erl:507 mod_announce_odbc.erl:499 msgid "Really delete message of the day?" msgstr "Benar-benar ingin menghapus pesan harian?" -#: mod_announce.erl:514 mod_configure.erl:1083 mod_configure.erl:1128 +#: mod_announce.erl:515 mod_announce_odbc.erl:507 mod_configure.erl:1083 +#: mod_configure.erl:1128 msgid "Subject" msgstr "Subyek" -#: mod_announce.erl:519 mod_configure.erl:1088 mod_configure.erl:1133 +#: mod_announce.erl:520 mod_announce_odbc.erl:512 mod_configure.erl:1088 +#: mod_configure.erl:1133 msgid "Message body" msgstr "Isi Pesan" -#: mod_announce.erl:599 +#: mod_announce.erl:600 mod_announce_odbc.erl:592 msgid "No body provided for announce message" msgstr "Tidak ada isi pesan yang disediakan untuk mengirimkan pesan" -#: mod_announce.erl:634 +#: mod_announce.erl:635 mod_announce_odbc.erl:627 msgid "Announcements" msgstr "Pengumuman" -#: mod_announce.erl:636 +#: mod_announce.erl:637 mod_announce_odbc.erl:629 msgid "Send announcement to all users" msgstr "Kirim pengumuman untuk semua pengguna" -#: mod_announce.erl:638 +#: mod_announce.erl:639 mod_announce_odbc.erl:631 msgid "Send announcement to all users on all hosts" msgstr "Kirim pengumuman untuk semua pengguna pada semua host" -#: mod_announce.erl:640 +#: mod_announce.erl:641 mod_announce_odbc.erl:633 msgid "Send announcement to all online users" msgstr "Kirim pengumuman untuk semua pengguna yang online" -#: mod_announce.erl:642 mod_configure.erl:1078 mod_configure.erl:1123 +#: mod_announce.erl:643 mod_announce_odbc.erl:635 mod_configure.erl:1078 +#: mod_configure.erl:1123 msgid "Send announcement to all online users on all hosts" msgstr "Kirim pengumuman untuk semua pengguna yang online pada semua host" -#: mod_announce.erl:644 +#: mod_announce.erl:645 mod_announce_odbc.erl:637 msgid "Set message of the day and send to online users" msgstr "Mengatur pesan harian dan mengirimkan ke pengguna yang online" -#: mod_announce.erl:646 +#: mod_announce.erl:647 mod_announce_odbc.erl:639 msgid "Set message of the day on all hosts and send to online users" msgstr "" "Mengatur pesan harian pada semua host dan kirimkan ke pengguna yang online" -#: mod_announce.erl:648 +#: mod_announce.erl:649 mod_announce_odbc.erl:641 msgid "Update message of the day (don't send)" msgstr "Rubah pesan harian (tidak dikirim)" -#: mod_announce.erl:650 +#: mod_announce.erl:651 mod_announce_odbc.erl:643 msgid "Update message of the day on all hosts (don't send)" msgstr "Rubah pesan harian pada semua host (tidak dikirim)" -#: mod_announce.erl:652 +#: mod_announce.erl:653 mod_announce_odbc.erl:645 msgid "Delete message of the day" msgstr "Hapus pesan harian" -#: mod_announce.erl:654 +#: mod_announce.erl:655 mod_announce_odbc.erl:647 msgid "Delete message of the day on all hosts" msgstr "Hapus pesan harian pada semua host" @@ -128,7 +131,7 @@ msgstr "Hapus pesan harian pada semua host" msgid "Configuration" msgstr "Pengaturan" -#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1934 +#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1936 msgid "Database" msgstr "Database" @@ -140,7 +143,7 @@ msgstr "Memulai Modul" msgid "Stop Modules" msgstr "Hentikan Modul" -#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1935 +#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1937 msgid "Backup" msgstr "Backup" @@ -169,7 +172,7 @@ msgid "Shut Down Service" msgstr "Shut Down Layanan" #: mod_configure.erl:145 mod_configure.erl:518 mod_configure.erl:1197 -#: web/ejabberd_web_admin.erl:1528 +#: web/ejabberd_web_admin.erl:1527 msgid "Add User" msgstr "Tambah Pengguna" @@ -221,7 +224,7 @@ msgid "User Management" msgstr "Manajemen Pengguna" #: mod_configure.erl:500 web/ejabberd_web_admin.erl:1058 -#: web/ejabberd_web_admin.erl:1463 +#: web/ejabberd_web_admin.erl:1462 msgid "Online Users" msgstr "Pengguna Yang Online" @@ -233,15 +236,15 @@ msgstr "Semua Pengguna" msgid "Outgoing s2s Connections" msgstr "Koneksi Keluar s2s" -#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1905 +#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1907 msgid "Running Nodes" msgstr "Menjalankan Node" -#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1907 +#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1909 msgid "Stopped Nodes" msgstr "Menghentikan node" -#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1951 +#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1953 msgid "Modules" msgstr "Modul" @@ -372,15 +375,15 @@ msgstr "Akses peraturan" #: mod_configure.erl:1200 mod_configure.erl:1222 mod_configure.erl:1234 #: mod_configure.erl:1246 mod_configure.erl:1258 mod_configure.erl:1275 -#: mod_configure.erl:1287 mod_configure.erl:1652 mod_configure.erl:1702 -#: mod_configure.erl:1723 mod_roster.erl:943 mod_roster_odbc.erl:1048 -#: mod_vcard.erl:466 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:442 +#: mod_configure.erl:1287 mod_configure.erl:1650 mod_configure.erl:1700 +#: mod_configure.erl:1721 mod_roster.erl:943 mod_roster_odbc.erl:1060 +#: mod_vcard.erl:472 mod_vcard_ldap.erl:554 mod_vcard_odbc.erl:448 msgid "Jabber ID" msgstr "Jabber ID" -#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1653 -#: mod_configure.erl:1865 mod_muc/mod_muc_room.erl:2970 mod_register.erl:235 -#: web/ejabberd_web_admin.erl:1521 +#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1651 +#: mod_configure.erl:1863 mod_muc/mod_muc_room.erl:3224 mod_register.erl:235 +#: web/ejabberd_web_admin.erl:1520 msgid "Password" msgstr "Sandi" @@ -396,70 +399,71 @@ msgstr "Jumlah pengguna terdaftar" msgid "Number of online users" msgstr "Jumlah pengguna online" -#: mod_configure.erl:1684 web/ejabberd_web_admin.erl:1589 -#: web/ejabberd_web_admin.erl:1741 +#: mod_configure.erl:1682 web/ejabberd_web_admin.erl:1588 +#: web/ejabberd_web_admin.erl:1743 msgid "Never" msgstr "Tidak Pernah" -#: mod_configure.erl:1698 web/ejabberd_web_admin.erl:1602 -#: web/ejabberd_web_admin.erl:1754 +#: mod_configure.erl:1696 web/ejabberd_web_admin.erl:1601 +#: web/ejabberd_web_admin.erl:1756 msgid "Online" msgstr "Online" -#: mod_configure.erl:1703 +#: mod_configure.erl:1701 msgid "Last login" msgstr "Terakhir Login" -#: mod_configure.erl:1724 +#: mod_configure.erl:1722 msgid "Roster size" msgstr "Ukuran Daftar Kontak" -#: mod_configure.erl:1725 +#: mod_configure.erl:1723 msgid "IP addresses" msgstr "Alamat IP" -#: mod_configure.erl:1726 +#: mod_configure.erl:1724 msgid "Resources" msgstr "Sumber daya" -#: mod_configure.erl:1852 +#: mod_configure.erl:1850 msgid "Administration of " msgstr "Administrasi" -#: mod_configure.erl:1855 +#: mod_configure.erl:1853 msgid "Action on user" msgstr "Tindakan pada pengguna" -#: mod_configure.erl:1859 +#: mod_configure.erl:1857 msgid "Edit Properties" msgstr "Ganti Properti" -#: mod_configure.erl:1862 web/ejabberd_web_admin.erl:1767 +#: mod_configure.erl:1860 web/ejabberd_web_admin.erl:1769 msgid "Remove User" msgstr "Hapus Pengguna" -#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:336 +#: mod_irc/mod_irc.erl:201 mod_irc/mod_irc_odbc.erl:196 +#: mod_muc/mod_muc.erl:336 mod_muc/mod_muc_odbc.erl:342 msgid "Access denied by service policy" msgstr "Akses ditolak oleh kebijakan layanan" -#: mod_irc/mod_irc.erl:400 +#: mod_irc/mod_irc.erl:401 mod_irc/mod_irc_odbc.erl:398 msgid "IRC Transport" msgstr "IRC Transport" -#: mod_irc/mod_irc.erl:427 +#: mod_irc/mod_irc.erl:428 mod_irc/mod_irc_odbc.erl:425 msgid "ejabberd IRC module" msgstr "ejabberd IRC modul" -#: mod_irc/mod_irc.erl:558 +#: mod_irc/mod_irc.erl:559 mod_irc/mod_irc_odbc.erl:568 msgid "You need an x:data capable client to configure mod_irc settings" msgstr "" "Anda memerlukan x:data klien untuk mampu mengkonfigurasi pengaturan mod_irc" -#: mod_irc/mod_irc.erl:565 +#: mod_irc/mod_irc.erl:566 mod_irc/mod_irc_odbc.erl:575 msgid "Registration in mod_irc for " msgstr "Pendaftaran di mod_irc untuk" -#: mod_irc/mod_irc.erl:570 +#: mod_irc/mod_irc.erl:571 mod_irc/mod_irc_odbc.erl:580 msgid "" "Enter username, encodings, ports and passwords you wish to use for " "connecting to IRC servers" @@ -467,11 +471,11 @@ msgstr "" "Masukkan username, pengkodean, port dan sandi yang ingin Anda gunakan untuk " "menghubungkan ke layanan IRC" -#: mod_irc/mod_irc.erl:575 +#: mod_irc/mod_irc.erl:576 mod_irc/mod_irc_odbc.erl:585 msgid "IRC Username" msgstr "Nama Pengguna IRC" -#: mod_irc/mod_irc.erl:585 +#: mod_irc/mod_irc.erl:586 mod_irc/mod_irc_odbc.erl:595 msgid "" "If you want to specify different ports, passwords, encodings for IRC " "servers, fill this list with values in format '{\"irc server\", \"encoding" @@ -483,7 +487,7 @@ msgstr "" "\", \"encoding \", port, \"sandi \"}'. Secara default ini menggunakan " "layanan \"~s \" pengkodean, port ~p, kata sandi kosong." -#: mod_irc/mod_irc.erl:597 +#: mod_irc/mod_irc.erl:598 mod_irc/mod_irc_odbc.erl:607 msgid "" "Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." @@ -491,35 +495,36 @@ msgstr "" "Contoh: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." -#: mod_irc/mod_irc.erl:602 +#: mod_irc/mod_irc.erl:603 mod_irc/mod_irc_odbc.erl:612 msgid "Connections parameters" msgstr "Parameter Koneksi" -#: mod_irc/mod_irc.erl:727 +#: mod_irc/mod_irc.erl:728 mod_irc/mod_irc_odbc.erl:757 msgid "Join IRC channel" msgstr "Gabung channel IRC" -#: mod_irc/mod_irc.erl:731 +#: mod_irc/mod_irc.erl:732 mod_irc/mod_irc_odbc.erl:761 msgid "IRC channel (don't put the first #)" msgstr "Channel IRC (tidak perlu menempatkan # sebelumnya)" -#: mod_irc/mod_irc.erl:736 +#: mod_irc/mod_irc.erl:737 mod_irc/mod_irc_odbc.erl:766 msgid "IRC server" msgstr "Layanan IRC" -#: mod_irc/mod_irc.erl:769 mod_irc/mod_irc.erl:773 +#: mod_irc/mod_irc.erl:770 mod_irc/mod_irc.erl:774 +#: mod_irc/mod_irc_odbc.erl:799 mod_irc/mod_irc_odbc.erl:803 msgid "Join the IRC channel here." msgstr "Gabung ke channel IRC disini" -#: mod_irc/mod_irc.erl:777 +#: mod_irc/mod_irc.erl:778 mod_irc/mod_irc_odbc.erl:807 msgid "Join the IRC channel in this Jabber ID: ~s" msgstr "Gabung ke channel IRC dengan Jabber ID: ~s" -#: mod_irc/mod_irc.erl:862 +#: mod_irc/mod_irc.erl:863 mod_irc/mod_irc_odbc.erl:904 msgid "IRC settings" msgstr "Pengaturan IRC" -#: mod_irc/mod_irc.erl:867 +#: mod_irc/mod_irc.erl:868 mod_irc/mod_irc_odbc.erl:909 msgid "" "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 " @@ -529,72 +534,73 @@ msgstr "" "ke layanan IRC. Tekan 'Selanjutnya' untuk mendapatkan lagi formulir kemudian " "Tekan 'Lengkap' untuk menyimpan pengaturan." -#: mod_irc/mod_irc.erl:873 +#: mod_irc/mod_irc.erl:874 mod_irc/mod_irc_odbc.erl:915 msgid "IRC username" msgstr "Nama Pengguna IRC" -#: mod_irc/mod_irc.erl:922 +#: mod_irc/mod_irc.erl:923 mod_irc/mod_irc_odbc.erl:964 msgid "Password ~b" msgstr "Kata Sandi ~b" -#: mod_irc/mod_irc.erl:927 +#: mod_irc/mod_irc.erl:928 mod_irc/mod_irc_odbc.erl:969 msgid "Port ~b" msgstr "Port ~b" -#: mod_irc/mod_irc.erl:932 +#: mod_irc/mod_irc.erl:933 mod_irc/mod_irc_odbc.erl:974 msgid "Encoding for server ~b" msgstr "Pengkodean untuk layanan ~b" -#: mod_irc/mod_irc.erl:941 +#: mod_irc/mod_irc.erl:942 mod_irc/mod_irc_odbc.erl:983 msgid "Server ~b" msgstr "Layanan ~b" -#: mod_muc/mod_muc.erl:449 +#: mod_muc/mod_muc.erl:449 mod_muc/mod_muc_odbc.erl:456 msgid "Only service administrators are allowed to send service messages" msgstr "" "Layanan hanya diperuntukan kepada administrator yang diizinkan untuk " "mengirim layanan pesan" -#: mod_muc/mod_muc.erl:493 +#: mod_muc/mod_muc.erl:493 mod_muc/mod_muc_odbc.erl:500 msgid "Room creation is denied by service policy" msgstr "Pembuatan Ruangan ditolak oleh kebijakan layanan" -#: mod_muc/mod_muc.erl:500 +#: mod_muc/mod_muc.erl:500 mod_muc/mod_muc_odbc.erl:507 msgid "Conference room does not exist" msgstr "Ruang Konferensi tidak ada" -#: mod_muc/mod_muc.erl:581 +#: mod_muc/mod_muc.erl:582 mod_muc/mod_muc_odbc.erl:595 msgid "Chatrooms" msgstr "Ruangan Chat" -#: mod_muc/mod_muc.erl:711 +#: mod_muc/mod_muc.erl:712 mod_muc/mod_muc_odbc.erl:729 msgid "You need a client that supports x:data to register the nickname" msgstr "Anda memerlukan klien yang mendukung x:data untuk mendaftar julukan" -#: mod_muc/mod_muc.erl:717 +#: mod_muc/mod_muc.erl:718 mod_muc/mod_muc_odbc.erl:735 msgid "Nickname Registration at " msgstr "Pendaftaran Julukan pada" -#: mod_muc/mod_muc.erl:721 +#: mod_muc/mod_muc.erl:722 mod_muc/mod_muc_odbc.erl:739 msgid "Enter nickname you want to register" msgstr "Masukkan nama julukan Anda jika ingin mendaftar" -#: mod_muc/mod_muc.erl:722 mod_roster.erl:944 mod_roster_odbc.erl:1049 -#: mod_vcard.erl:358 mod_vcard.erl:471 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:447 +#: mod_muc/mod_muc.erl:723 mod_muc/mod_muc_odbc.erl:740 +#: mod_muc/mod_muc_room.erl:3810 mod_roster.erl:944 mod_roster_odbc.erl:1061 +#: mod_vcard.erl:364 mod_vcard.erl:477 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:453 msgid "Nickname" msgstr "Nama Julukan" -#: mod_muc/mod_muc.erl:761 mod_muc/mod_muc_room.erl:933 -#: mod_muc/mod_muc_room.erl:1577 +#: mod_muc/mod_muc.erl:762 mod_muc/mod_muc_odbc.erl:784 +#: mod_muc/mod_muc_room.erl:1064 mod_muc/mod_muc_room.erl:1787 msgid "That nickname is registered by another person" msgstr "Julukan tersebut telah didaftarkan oleh orang lain" -#: mod_muc/mod_muc.erl:787 +#: mod_muc/mod_muc.erl:788 mod_muc/mod_muc_odbc.erl:811 msgid "You must fill in field \"Nickname\" in the form" msgstr "Anda harus mengisi kolom \"Julukan\" dalam formulir" -#: mod_muc/mod_muc.erl:807 +#: mod_muc/mod_muc.erl:808 mod_muc/mod_muc_odbc.erl:831 msgid "ejabberd MUC module" msgstr "ejabberd MUC Module" @@ -634,8 +640,8 @@ msgstr "telah dikick karena sistem shutdown" msgid "is now known as" msgstr "sekarang dikenal sebagai" -#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:689 -#: mod_muc/mod_muc_room.erl:2138 +#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:688 +#: mod_muc/mod_muc_room.erl:2393 msgid " has set the subject to: " msgstr "telah menetapkan topik yaitu:" @@ -731,32 +737,48 @@ msgstr "Nopember" msgid "December" msgstr "Desember" -#: mod_muc/mod_muc_log.erl:751 +#: mod_muc/mod_muc_log.erl:750 msgid "Room Configuration" msgstr "Konfigurasi Ruangan" -#: mod_muc/mod_muc_log.erl:760 +#: mod_muc/mod_muc_log.erl:759 msgid "Room Occupants" msgstr "Penghuni Ruangan" -#: mod_muc/mod_muc_room.erl:170 +#: mod_muc/mod_muc_room.erl:174 msgid "Traffic rate limit is exceeded" msgstr "Lalu lintas melebihi batas" -#: mod_muc/mod_muc_room.erl:242 +#: mod_muc/mod_muc_room.erl:246 msgid "" "This participant is kicked from the room because he sent an error message" msgstr "Peserta ini dikick dari ruangan karena dia mengirim pesan kesalahan" -#: mod_muc/mod_muc_room.erl:251 +#: mod_muc/mod_muc_room.erl:255 msgid "It is not allowed to send private messages to the conference" msgstr "Hal ini tidak diperbolehkan untuk mengirim pesan pribadi ke konferensi" -#: mod_muc/mod_muc_room.erl:296 +#: mod_muc/mod_muc_room.erl:332 +msgid "Please, wait for a while before sending new voice request" +msgstr "" + +#: mod_muc/mod_muc_room.erl:347 +msgid "Voice requests are disabled in this conference" +msgstr "" + +#: mod_muc/mod_muc_room.erl:364 +msgid "Failed to extract JID from your voice request approval" +msgstr "" + +#: mod_muc/mod_muc_room.erl:393 +msgid "Only moderators can approve voice requests" +msgstr "" + +#: mod_muc/mod_muc_room.erl:408 msgid "Improper message type" msgstr "Jenis pesan yang tidak benar" -#: mod_muc/mod_muc_room.erl:406 +#: mod_muc/mod_muc_room.erl:518 msgid "" "This participant is kicked from the room because he sent an error message to " "another participant" @@ -764,34 +786,34 @@ msgstr "" "Participant ini dikick dari ruangan karena ia mengirim pesan kesalahan ke " "participant lain" -#: mod_muc/mod_muc_room.erl:419 +#: mod_muc/mod_muc_room.erl:531 msgid "It is not allowed to send private messages of type \"groupchat\"" msgstr "" "Hal ini tidak diperbolehkan untuk mengirim pesan pribadi jenis \"groupchat \"" -#: mod_muc/mod_muc_room.erl:431 mod_muc/mod_muc_room.erl:486 +#: mod_muc/mod_muc_room.erl:543 mod_muc/mod_muc_room.erl:611 msgid "Recipient is not in the conference room" msgstr "Penerima tidak berada di ruangan konferensi" -#: mod_muc/mod_muc_room.erl:451 mod_muc/mod_muc_room.erl:829 -#: mod_muc/mod_muc_room.erl:3609 -msgid "Only occupants are allowed to send messages to the conference" -msgstr "Hanya penghuni yang diizinkan untuk mengirim pesan ke konferensi" - -#: mod_muc/mod_muc_room.erl:460 +#: mod_muc/mod_muc_room.erl:564 mod_muc/mod_muc_room.erl:585 msgid "It is not allowed to send private messages" msgstr "Hal ini tidak diperbolehkan untuk mengirim pesan pribadi" -#: mod_muc/mod_muc_room.erl:509 +#: mod_muc/mod_muc_room.erl:576 mod_muc/mod_muc_room.erl:956 +#: mod_muc/mod_muc_room.erl:4040 +msgid "Only occupants are allowed to send messages to the conference" +msgstr "Hanya penghuni yang diizinkan untuk mengirim pesan ke konferensi" + +#: mod_muc/mod_muc_room.erl:634 msgid "Only occupants are allowed to send queries to the conference" msgstr "Hanya penghuni diizinkan untuk mengirim permintaan ke konferensi" -#: mod_muc/mod_muc_room.erl:521 +#: mod_muc/mod_muc_room.erl:646 msgid "Queries to the conference members are not allowed in this room" msgstr "" "Permintaan untuk para anggota konferensi tidak diperbolehkan di ruangan ini" -#: mod_muc/mod_muc_room.erl:805 +#: mod_muc/mod_muc_room.erl:932 msgid "" "Only moderators and participants are allowed to change the subject in this " "room" @@ -799,198 +821,233 @@ msgstr "" "Hanya moderator dan peserta yang diizinkan untuk mengganti topik pembicaraan " "di ruangan ini" -#: mod_muc/mod_muc_room.erl:810 +#: mod_muc/mod_muc_room.erl:937 msgid "Only moderators are allowed to change the subject in this room" msgstr "" "Hanya moderator yang diperbolehkan untuk mengubah topik dalam ruangan ini" -#: mod_muc/mod_muc_room.erl:820 +#: mod_muc/mod_muc_room.erl:947 msgid "Visitors are not allowed to send messages to all occupants" msgstr "Visitor tidak diperbolehkan untuk mengirim pesan ke semua penghuni" -#: mod_muc/mod_muc_room.erl:891 +#: mod_muc/mod_muc_room.erl:1021 msgid "" "This participant is kicked from the room because he sent an error presence" msgstr "" "Participant ini dikick dari ruangan karena ia mengirim kehadiran kesalahan" -#: mod_muc/mod_muc_room.erl:909 +#: mod_muc/mod_muc_room.erl:1040 msgid "Visitors are not allowed to change their nicknames in this room" msgstr "Visitor tidak diperbolehkan untuk mengubah nama julukan di ruangan ini" -#: mod_muc/mod_muc_room.erl:922 mod_muc/mod_muc_room.erl:1569 +#: mod_muc/mod_muc_room.erl:1053 mod_muc/mod_muc_room.erl:1779 msgid "That nickname is already in use by another occupant" msgstr "Julukan itu sudah digunakan oleh penghuni lain" -#: mod_muc/mod_muc_room.erl:1558 +#: mod_muc/mod_muc_room.erl:1768 msgid "You have been banned from this room" msgstr "Anda telah diblokir dari ruangan ini" -#: mod_muc/mod_muc_room.erl:1561 +#: mod_muc/mod_muc_room.erl:1771 msgid "Membership is required to enter this room" msgstr "Hanya Member yang dapat masuk ruangan ini" -#: mod_muc/mod_muc_room.erl:1597 +#: mod_muc/mod_muc_room.erl:1807 msgid "This room is not anonymous" msgstr "Ruangan ini tidak dikenal" -#: mod_muc/mod_muc_room.erl:1623 +#: mod_muc/mod_muc_room.erl:1833 msgid "A password is required to enter this room" msgstr "Diperlukan kata sandi untuk masuk ruangan ini" -#: mod_muc/mod_muc_room.erl:1645 mod_register.erl:246 +#: mod_muc/mod_muc_room.erl:1855 mod_register.erl:246 msgid "Too many CAPTCHA requests" msgstr "" -#: mod_muc/mod_muc_room.erl:1654 -msgid "Unable to generate a captcha" -msgstr "Tidak dapat menghasilkan captcha" +#: mod_muc/mod_muc_room.erl:1864 mod_register.erl:251 +msgid "Unable to generate a CAPTCHA" +msgstr "Tidak dapat menghasilkan CAPTCHA" -#: mod_muc/mod_muc_room.erl:1664 +#: mod_muc/mod_muc_room.erl:1874 msgid "Incorrect password" msgstr "Kata sandi salah" -#: mod_muc/mod_muc_room.erl:2193 +#: mod_muc/mod_muc_room.erl:2448 msgid "Administrator privileges required" msgstr "Hak istimewa Administrator dibutuhkan" -#: mod_muc/mod_muc_room.erl:2208 +#: mod_muc/mod_muc_room.erl:2463 msgid "Moderator privileges required" msgstr "Hak istimewa moderator dibutuhkan" -#: mod_muc/mod_muc_room.erl:2363 +#: mod_muc/mod_muc_room.erl:2619 msgid "Jabber ID ~s is invalid" msgstr "Jabber ID ~s tidak valid" -#: mod_muc/mod_muc_room.erl:2377 +#: mod_muc/mod_muc_room.erl:2633 msgid "Nickname ~s does not exist in the room" msgstr "Nama Julukan ~s tidak berada di dalam ruangan" -#: mod_muc/mod_muc_room.erl:2403 mod_muc/mod_muc_room.erl:2797 +#: mod_muc/mod_muc_room.erl:2659 mod_muc/mod_muc_room.erl:3049 msgid "Invalid affiliation: ~s" msgstr "Afiliasi tidak valid: ~s" -#: mod_muc/mod_muc_room.erl:2460 +#: mod_muc/mod_muc_room.erl:2713 msgid "Invalid role: ~s" msgstr "Peran tidak valid: ~s" -#: mod_muc/mod_muc_room.erl:2774 mod_muc/mod_muc_room.erl:2810 +#: mod_muc/mod_muc_room.erl:3026 mod_muc/mod_muc_room.erl:3062 msgid "Owner privileges required" msgstr "Hak istimewa owner dibutuhkan" -#: mod_muc/mod_muc_room.erl:2941 +#: mod_muc/mod_muc_room.erl:3195 msgid "Configuration of room ~s" msgstr "Pengaturan ruangan ~s" -#: mod_muc/mod_muc_room.erl:2946 +#: mod_muc/mod_muc_room.erl:3200 msgid "Room title" msgstr "Nama Ruangan" -#: mod_muc/mod_muc_room.erl:2949 mod_muc/mod_muc_room.erl:3388 +#: mod_muc/mod_muc_room.erl:3203 mod_muc/mod_muc_room.erl:3692 msgid "Room description" msgstr "Keterangan ruangan" -#: mod_muc/mod_muc_room.erl:2956 +#: mod_muc/mod_muc_room.erl:3210 msgid "Make room persistent" msgstr "Buat ruangan menjadi permanent" -#: mod_muc/mod_muc_room.erl:2961 +#: mod_muc/mod_muc_room.erl:3215 msgid "Make room public searchable" msgstr "Buat ruangan dapat dicari" -#: mod_muc/mod_muc_room.erl:2964 +#: mod_muc/mod_muc_room.erl:3218 msgid "Make participants list public" msgstr "Buat daftar participant diketahui oleh public" -#: mod_muc/mod_muc_room.erl:2967 +#: mod_muc/mod_muc_room.erl:3221 msgid "Make room password protected" msgstr "Buat ruangan yang dilindungi dengan kata sandi" -#: mod_muc/mod_muc_room.erl:2978 +#: mod_muc/mod_muc_room.erl:3232 msgid "Maximum Number of Occupants" msgstr "Maksimum Jumlah Penghuni" -#: mod_muc/mod_muc_room.erl:2985 +#: mod_muc/mod_muc_room.erl:3239 msgid "No limit" msgstr "Tidak terbatas" -#: mod_muc/mod_muc_room.erl:2996 +#: mod_muc/mod_muc_room.erl:3250 msgid "Present real Jabber IDs to" msgstr "Tampilkan Jabber ID secara lengkap" -#: mod_muc/mod_muc_room.erl:3004 +#: mod_muc/mod_muc_room.erl:3258 mod_muc/mod_muc_room.erl:3292 msgid "moderators only" msgstr "Hanya moderator" -#: mod_muc/mod_muc_room.erl:3006 +#: mod_muc/mod_muc_room.erl:3260 mod_muc/mod_muc_room.erl:3294 msgid "anyone" msgstr "Siapapun" -#: mod_muc/mod_muc_room.erl:3008 +#: mod_muc/mod_muc_room.erl:3262 msgid "Make room members-only" msgstr "Buat ruangan hanya untuk member saja" -#: mod_muc/mod_muc_room.erl:3011 +#: mod_muc/mod_muc_room.erl:3265 msgid "Make room moderated" msgstr "Buat ruangan hanya untuk moderator saja" -#: mod_muc/mod_muc_room.erl:3014 +#: mod_muc/mod_muc_room.erl:3268 msgid "Default users as participants" msgstr "pengguna pertama kali masuk sebagai participant" -#: mod_muc/mod_muc_room.erl:3017 +#: mod_muc/mod_muc_room.erl:3271 msgid "Allow users to change the subject" msgstr "Perbolehkan pengguna untuk mengganti topik" -#: mod_muc/mod_muc_room.erl:3020 +#: mod_muc/mod_muc_room.erl:3274 msgid "Allow users to send private messages" msgstr "perbolehkan pengguna mengirimkan pesan ke pengguna lain secara pribadi" -#: mod_muc/mod_muc_room.erl:3023 +#: mod_muc/mod_muc_room.erl:3279 +#, fuzzy +msgid "Allow visitors to send private messages to" +msgstr "perbolehkan pengguna mengirimkan pesan ke pengguna lain secara pribadi" + +#: mod_muc/mod_muc_room.erl:3290 +msgid "nobody" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3296 msgid "Allow users to query other users" msgstr "Perbolehkan pengguna untuk mengetahui pengguna lain" -#: mod_muc/mod_muc_room.erl:3026 +#: mod_muc/mod_muc_room.erl:3299 msgid "Allow users to send invites" msgstr "Perbolehkan pengguna mengirimkan undangan" -#: mod_muc/mod_muc_room.erl:3029 +#: mod_muc/mod_muc_room.erl:3302 msgid "Allow visitors to send status text in presence updates" msgstr "Izinkan pengunjung untuk mengirim teks status terbaru" -#: mod_muc/mod_muc_room.erl:3032 +#: mod_muc/mod_muc_room.erl:3305 msgid "Allow visitors to change nickname" msgstr "Perbolehkan visitor mengganti nama julukan" -#: mod_muc/mod_muc_room.erl:3038 -msgid "Make room captcha protected" -msgstr "Buat ruangan dilindungi dengan chapta" +#: mod_muc/mod_muc_room.erl:3308 +#, fuzzy +msgid "Allow visitors to send voice requests" +msgstr "Perbolehkan pengguna mengirimkan undangan" -#: mod_muc/mod_muc_room.erl:3043 +#: mod_muc/mod_muc_room.erl:3311 +msgid "Minimum interval between voice requests (in seconds)" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3317 +msgid "Make room CAPTCHA protected" +msgstr "Buat ruangan dilindungi dengan CAPTCHA" + +#: mod_muc/mod_muc_room.erl:3322 msgid "Exclude Jabber IDs from CAPTCHA challenge" msgstr "" -#: mod_muc/mod_muc_room.erl:3050 +#: mod_muc/mod_muc_room.erl:3329 msgid "Enable logging" msgstr "Aktifkan catatan" -#: mod_muc/mod_muc_room.erl:3058 +#: mod_muc/mod_muc_room.erl:3337 msgid "You need an x:data capable client to configure room" msgstr "Anda memerlukan x:data klien untuk dapat mengkonfigurasi ruangan" -#: mod_muc/mod_muc_room.erl:3390 +#: mod_muc/mod_muc_room.erl:3694 msgid "Number of occupants" msgstr "Jumlah Penghuni" -#: mod_muc/mod_muc_room.erl:3446 +#: mod_muc/mod_muc_room.erl:3750 msgid "private, " msgstr "pribadi, " -#: mod_muc/mod_muc_room.erl:3529 +#: mod_muc/mod_muc_room.erl:3799 +msgid "Voice request" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3803 +msgid "Either approve or decline the voice request." +msgstr "" + +#: mod_muc/mod_muc_room.erl:3809 +#, fuzzy +msgid "User JID" +msgstr "Pengguna" + +#: mod_muc/mod_muc_room.erl:3811 +msgid "Grant voice to this person?" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3960 msgid "~s invites you to the room ~s" msgstr "~s mengundang anda ke ruangan ~s" -#: mod_muc/mod_muc_room.erl:3538 +#: mod_muc/mod_muc_room.erl:3969 msgid "the password is" msgstr "kata sandi yaitu:" @@ -1005,14 +1062,15 @@ msgid "~s's Offline Messages Queue" msgstr "Antrian Pesan Offline ~s" #: mod_offline.erl:563 mod_offline_odbc.erl:411 mod_roster.erl:987 -#: mod_roster_odbc.erl:1092 mod_shared_roster.erl:896 -#: mod_shared_roster.erl:1005 web/ejabberd_web_admin.erl:833 +#: mod_roster_odbc.erl:1104 mod_shared_roster.erl:901 +#: mod_shared_roster.erl:1010 mod_shared_roster_odbc.erl:930 +#: mod_shared_roster_odbc.erl:1039 web/ejabberd_web_admin.erl:833 #: web/ejabberd_web_admin.erl:874 web/ejabberd_web_admin.erl:942 #: web/ejabberd_web_admin.erl:978 web/ejabberd_web_admin.erl:1019 -#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1758 -#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1961 -#: web/ejabberd_web_admin.erl:2030 web/ejabberd_web_admin.erl:2134 -#: web/ejabberd_web_admin.erl:2159 web/ejabberd_web_admin.erl:2247 +#: web/ejabberd_web_admin.erl:1508 web/ejabberd_web_admin.erl:1760 +#: web/ejabberd_web_admin.erl:1931 web/ejabberd_web_admin.erl:1963 +#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2135 +#: web/ejabberd_web_admin.erl:2160 web/ejabberd_web_admin.erl:2248 msgid "Submitted" msgstr "Ulangi masukan" @@ -1032,8 +1090,9 @@ msgstr "Kepada" msgid "Packet" msgstr "Paket" -#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:903 -#: web/ejabberd_web_admin.erl:882 web/ejabberd_web_admin.erl:986 +#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:908 +#: mod_shared_roster_odbc.erl:937 web/ejabberd_web_admin.erl:882 +#: web/ejabberd_web_admin.erl:986 msgid "Delete Selected" msgstr "Hapus Yang Terpilih" @@ -1049,103 +1108,103 @@ msgstr "Hapus Semua Pesan Offline" msgid "ejabberd SOCKS5 Bytestreams module" msgstr "modul ejabberd SOCKS5 Bytestreams" -#: mod_pubsub/mod_pubsub.erl:1119 mod_pubsub/mod_pubsub_odbc.erl:928 +#: mod_pubsub/mod_pubsub.erl:1120 mod_pubsub/mod_pubsub_odbc.erl:929 msgid "Publish-Subscribe" msgstr "Setujui-Pertemanan" -#: mod_pubsub/mod_pubsub.erl:1213 mod_pubsub/mod_pubsub_odbc.erl:1024 +#: mod_pubsub/mod_pubsub.erl:1214 mod_pubsub/mod_pubsub_odbc.erl:1025 msgid "ejabberd Publish-Subscribe module" msgstr "Modul ejabberd Setujui-Pertemanan" -#: mod_pubsub/mod_pubsub.erl:1496 mod_pubsub/mod_pubsub_odbc.erl:1311 +#: mod_pubsub/mod_pubsub.erl:1497 mod_pubsub/mod_pubsub_odbc.erl:1312 msgid "PubSub subscriber request" msgstr "Permintaan pertemanan PubSub" -#: mod_pubsub/mod_pubsub.erl:1498 mod_pubsub/mod_pubsub_odbc.erl:1313 +#: mod_pubsub/mod_pubsub.erl:1499 mod_pubsub/mod_pubsub_odbc.erl:1314 msgid "Choose whether to approve this entity's subscription." msgstr "Pilih apakah akan menyetujui hubungan pertemanan ini." -#: mod_pubsub/mod_pubsub.erl:1504 mod_pubsub/mod_pubsub_odbc.erl:1319 +#: mod_pubsub/mod_pubsub.erl:1505 mod_pubsub/mod_pubsub_odbc.erl:1320 msgid "Node ID" msgstr "ID Node" -#: mod_pubsub/mod_pubsub.erl:1509 mod_pubsub/mod_pubsub_odbc.erl:1324 +#: mod_pubsub/mod_pubsub.erl:1510 mod_pubsub/mod_pubsub_odbc.erl:1325 msgid "Subscriber Address" msgstr "Alamat Pertemanan" -#: mod_pubsub/mod_pubsub.erl:1515 mod_pubsub/mod_pubsub_odbc.erl:1330 +#: mod_pubsub/mod_pubsub.erl:1516 mod_pubsub/mod_pubsub_odbc.erl:1331 msgid "Allow this Jabber ID to subscribe to this pubsub node?" msgstr "Izinkan ID Jabber ini untuk berlangganan pada node pubsub ini?" -#: mod_pubsub/mod_pubsub.erl:3416 mod_pubsub/mod_pubsub_odbc.erl:3229 +#: mod_pubsub/mod_pubsub.erl:3474 mod_pubsub/mod_pubsub_odbc.erl:3287 msgid "Deliver payloads with event notifications" msgstr "Memberikan muatan dengan pemberitahuan acara" -#: mod_pubsub/mod_pubsub.erl:3417 mod_pubsub/mod_pubsub_odbc.erl:3230 +#: mod_pubsub/mod_pubsub.erl:3475 mod_pubsub/mod_pubsub_odbc.erl:3288 msgid "Deliver event notifications" msgstr "Memberikan pemberitahuan acara" -#: mod_pubsub/mod_pubsub.erl:3418 mod_pubsub/mod_pubsub_odbc.erl:3231 +#: mod_pubsub/mod_pubsub.erl:3476 mod_pubsub/mod_pubsub_odbc.erl:3289 msgid "Notify subscribers when the node configuration changes" msgstr "Beritahu pelanggan ketika ada perubahan konfigurasi node" -#: mod_pubsub/mod_pubsub.erl:3419 mod_pubsub/mod_pubsub_odbc.erl:3232 +#: mod_pubsub/mod_pubsub.erl:3477 mod_pubsub/mod_pubsub_odbc.erl:3290 msgid "Notify subscribers when the node is deleted" msgstr "Beritahu pelanggan ketika node dihapus" -#: mod_pubsub/mod_pubsub.erl:3420 mod_pubsub/mod_pubsub_odbc.erl:3233 +#: mod_pubsub/mod_pubsub.erl:3478 mod_pubsub/mod_pubsub_odbc.erl:3291 msgid "Notify subscribers when items are removed from the node" msgstr "Beritahu pelanggan ketika item tersebut dikeluarkan dari node" -#: mod_pubsub/mod_pubsub.erl:3421 mod_pubsub/mod_pubsub_odbc.erl:3234 +#: mod_pubsub/mod_pubsub.erl:3479 mod_pubsub/mod_pubsub_odbc.erl:3292 msgid "Persist items to storage" msgstr "Pertahankan item ke penyimpanan" -#: mod_pubsub/mod_pubsub.erl:3422 mod_pubsub/mod_pubsub_odbc.erl:3235 +#: mod_pubsub/mod_pubsub.erl:3480 mod_pubsub/mod_pubsub_odbc.erl:3293 msgid "A friendly name for the node" msgstr "Nama yang dikenal untuk node" -#: mod_pubsub/mod_pubsub.erl:3423 mod_pubsub/mod_pubsub_odbc.erl:3236 +#: mod_pubsub/mod_pubsub.erl:3481 mod_pubsub/mod_pubsub_odbc.erl:3294 msgid "Max # of items to persist" msgstr "Max item untuk bertahan" -#: mod_pubsub/mod_pubsub.erl:3424 mod_pubsub/mod_pubsub_odbc.erl:3237 +#: mod_pubsub/mod_pubsub.erl:3482 mod_pubsub/mod_pubsub_odbc.erl:3295 msgid "Whether to allow subscriptions" msgstr "Apakah diperbolehkan untuk berlangganan" -#: mod_pubsub/mod_pubsub.erl:3425 mod_pubsub/mod_pubsub_odbc.erl:3238 +#: mod_pubsub/mod_pubsub.erl:3483 mod_pubsub/mod_pubsub_odbc.erl:3296 msgid "Specify the access model" msgstr "Tentukan model akses" -#: mod_pubsub/mod_pubsub.erl:3428 mod_pubsub/mod_pubsub_odbc.erl:3241 +#: mod_pubsub/mod_pubsub.erl:3486 mod_pubsub/mod_pubsub_odbc.erl:3299 msgid "Roster groups allowed to subscribe" msgstr "Kelompok kontak yang diizinkan untuk berlangganan" -#: mod_pubsub/mod_pubsub.erl:3429 mod_pubsub/mod_pubsub_odbc.erl:3242 +#: mod_pubsub/mod_pubsub.erl:3487 mod_pubsub/mod_pubsub_odbc.erl:3300 msgid "Specify the publisher model" msgstr "Tentukan model penerbitan" -#: mod_pubsub/mod_pubsub.erl:3431 mod_pubsub/mod_pubsub_odbc.erl:3244 +#: mod_pubsub/mod_pubsub.erl:3489 mod_pubsub/mod_pubsub_odbc.erl:3302 msgid "Purge all items when the relevant publisher goes offline" msgstr "Bersihkan semua item ketika penerbit yang relevan telah offline" -#: mod_pubsub/mod_pubsub.erl:3432 mod_pubsub/mod_pubsub_odbc.erl:3245 +#: mod_pubsub/mod_pubsub.erl:3490 mod_pubsub/mod_pubsub_odbc.erl:3303 msgid "Specify the event message type" msgstr "Tentukan jenis acara pesan" -#: mod_pubsub/mod_pubsub.erl:3434 mod_pubsub/mod_pubsub_odbc.erl:3247 +#: mod_pubsub/mod_pubsub.erl:3492 mod_pubsub/mod_pubsub_odbc.erl:3305 msgid "Max payload size in bytes" msgstr "Max kapasitas ukuran dalam bytes" -#: mod_pubsub/mod_pubsub.erl:3435 mod_pubsub/mod_pubsub_odbc.erl:3248 +#: mod_pubsub/mod_pubsub.erl:3493 mod_pubsub/mod_pubsub_odbc.erl:3306 msgid "When to send the last published item" msgstr "Ketika untuk mengirim item terakhir yang dipublikasikan" -#: mod_pubsub/mod_pubsub.erl:3437 mod_pubsub/mod_pubsub_odbc.erl:3250 +#: mod_pubsub/mod_pubsub.erl:3495 mod_pubsub/mod_pubsub_odbc.erl:3308 msgid "Only deliver notifications to available users" msgstr "Hanya mengirimkan pemberitahuan kepada pengguna yang tersedia" -#: mod_pubsub/mod_pubsub.erl:3438 mod_pubsub/mod_pubsub_odbc.erl:3251 +#: mod_pubsub/mod_pubsub.erl:3496 mod_pubsub/mod_pubsub_odbc.erl:3309 msgid "The collections with which a node is affiliated" msgstr "Koleksi dengan yang berafiliasi dengan sebuah node" @@ -1162,15 +1221,11 @@ msgstr "" msgid "Choose a username and password to register with this server" msgstr "Pilih nama pengguna dan kata sandi untuk mendaftar dengan layanan ini" -#: mod_register.erl:230 mod_vcard.erl:358 mod_vcard_odbc.erl:336 -#: web/ejabberd_web_admin.erl:1516 web/ejabberd_web_admin.erl:1573 +#: mod_register.erl:230 mod_vcard.erl:364 mod_vcard_odbc.erl:342 +#: web/ejabberd_web_admin.erl:1515 web/ejabberd_web_admin.erl:1572 msgid "User" msgstr "Pengguna" -#: mod_register.erl:251 -msgid "Unable to generate a CAPTCHA" -msgstr "Tidak dapat menghasilkan CAPTCHA" - #: mod_register.erl:316 mod_register.erl:361 msgid "The password is too weak" msgstr "Kata sandi terlalu lemah" @@ -1179,120 +1234,123 @@ msgstr "Kata sandi terlalu lemah" msgid "Users are not allowed to register accounts so quickly" msgstr "Pengguna tidak diperkenankan untuk mendaftar akun begitu cepat" -#: mod_roster.erl:938 mod_roster_odbc.erl:1043 web/ejabberd_web_admin.erl:1699 -#: web/ejabberd_web_admin.erl:1884 web/ejabberd_web_admin.erl:1895 -#: web/ejabberd_web_admin.erl:2218 +#: mod_roster.erl:938 mod_roster_odbc.erl:1055 web/ejabberd_web_admin.erl:1701 +#: web/ejabberd_web_admin.erl:1886 web/ejabberd_web_admin.erl:1897 +#: web/ejabberd_web_admin.erl:2219 msgid "None" msgstr "Tak satupun" -#: mod_roster.erl:945 mod_roster_odbc.erl:1050 +#: mod_roster.erl:945 mod_roster_odbc.erl:1062 msgid "Subscription" msgstr "Berlangganan" -#: mod_roster.erl:946 mod_roster_odbc.erl:1051 +#: mod_roster.erl:946 mod_roster_odbc.erl:1063 msgid "Pending" msgstr "Tertunda" -#: mod_roster.erl:947 mod_roster_odbc.erl:1052 +#: mod_roster.erl:947 mod_roster_odbc.erl:1064 msgid "Groups" msgstr "Grup" -#: mod_roster.erl:974 mod_roster_odbc.erl:1079 +#: mod_roster.erl:974 mod_roster_odbc.erl:1091 msgid "Validate" msgstr "Mengesahkan" -#: mod_roster.erl:982 mod_roster_odbc.erl:1087 +#: mod_roster.erl:982 mod_roster_odbc.erl:1099 msgid "Remove" msgstr "Menghapus" -#: mod_roster.erl:985 mod_roster_odbc.erl:1090 +#: mod_roster.erl:985 mod_roster_odbc.erl:1102 msgid "Roster of " msgstr "Kontak dari" -#: mod_roster.erl:988 mod_roster_odbc.erl:1093 mod_shared_roster.erl:897 -#: mod_shared_roster.erl:1006 web/ejabberd_web_admin.erl:834 +#: mod_roster.erl:988 mod_roster_odbc.erl:1105 mod_shared_roster.erl:902 +#: mod_shared_roster.erl:1011 mod_shared_roster_odbc.erl:931 +#: mod_shared_roster_odbc.erl:1040 web/ejabberd_web_admin.erl:834 #: web/ejabberd_web_admin.erl:875 web/ejabberd_web_admin.erl:943 #: web/ejabberd_web_admin.erl:979 web/ejabberd_web_admin.erl:1020 -#: web/ejabberd_web_admin.erl:1510 web/ejabberd_web_admin.erl:1759 -#: web/ejabberd_web_admin.erl:1930 web/ejabberd_web_admin.erl:2135 -#: web/ejabberd_web_admin.erl:2160 +#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1761 +#: web/ejabberd_web_admin.erl:1932 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2161 msgid "Bad format" msgstr "Format yang buruk" -#: mod_roster.erl:995 mod_roster_odbc.erl:1100 +#: mod_roster.erl:995 mod_roster_odbc.erl:1112 msgid "Add Jabber ID" msgstr "Tambah Jabber ID" -#: mod_roster.erl:1094 mod_roster_odbc.erl:1199 +#: mod_roster.erl:1094 mod_roster_odbc.erl:1211 msgid "Roster" msgstr "Kontak" -#: mod_shared_roster.erl:852 mod_shared_roster.erl:894 -#: mod_shared_roster.erl:1002 +#: mod_shared_roster.erl:857 mod_shared_roster.erl:899 +#: mod_shared_roster.erl:1007 mod_shared_roster_odbc.erl:886 +#: mod_shared_roster_odbc.erl:928 mod_shared_roster_odbc.erl:1036 msgid "Shared Roster Groups" msgstr "Berbagi grup kontak" -#: mod_shared_roster.erl:890 web/ejabberd_web_admin.erl:1366 -#: web/ejabberd_web_admin.erl:2460 +#: mod_shared_roster.erl:895 mod_shared_roster_odbc.erl:924 +#: web/ejabberd_web_admin.erl:1365 web/ejabberd_web_admin.erl:2461 msgid "Add New" msgstr "Tambah Baru" -#: mod_shared_roster.erl:973 +#: mod_shared_roster.erl:978 mod_shared_roster_odbc.erl:1007 msgid "Name:" msgstr "Nama:" -#: mod_shared_roster.erl:978 +#: mod_shared_roster.erl:983 mod_shared_roster_odbc.erl:1012 msgid "Description:" msgstr "Keterangan:" -#: mod_shared_roster.erl:986 +#: mod_shared_roster.erl:991 mod_shared_roster_odbc.erl:1020 msgid "Members:" msgstr "Anggota:" -#: mod_shared_roster.erl:994 +#: mod_shared_roster.erl:999 mod_shared_roster_odbc.erl:1028 msgid "Displayed Groups:" msgstr "Tampilkan Grup:" -#: mod_shared_roster.erl:1003 +#: mod_shared_roster.erl:1008 mod_shared_roster_odbc.erl:1037 msgid "Group " msgstr "Grup" -#: mod_shared_roster.erl:1012 web/ejabberd_web_admin.erl:840 -#: web/ejabberd_web_admin.erl:884 web/ejabberd_web_admin.erl:949 -#: web/ejabberd_web_admin.erl:1026 web/ejabberd_web_admin.erl:2015 +#: mod_shared_roster.erl:1017 mod_shared_roster_odbc.erl:1046 +#: web/ejabberd_web_admin.erl:840 web/ejabberd_web_admin.erl:884 +#: web/ejabberd_web_admin.erl:949 web/ejabberd_web_admin.erl:1026 +#: web/ejabberd_web_admin.erl:2017 msgid "Submit" msgstr "Serahkan" -#: mod_vcard.erl:165 mod_vcard_ldap.erl:237 mod_vcard_odbc.erl:129 +#: mod_vcard.erl:165 mod_vcard_ldap.erl:238 mod_vcard_odbc.erl:129 msgid "Erlang Jabber Server" msgstr "Layanan Erlang Jabber" -#: mod_vcard.erl:358 mod_vcard.erl:472 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:448 +#: mod_vcard.erl:364 mod_vcard.erl:478 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:454 msgid "Birthday" msgstr "Hari Lahir" -#: mod_vcard.erl:358 mod_vcard.erl:474 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:450 +#: mod_vcard.erl:364 mod_vcard.erl:480 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:456 msgid "City" msgstr "Kota" -#: mod_vcard.erl:358 mod_vcard.erl:473 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:449 +#: mod_vcard.erl:364 mod_vcard.erl:479 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:455 msgid "Country" msgstr "Negara" -#: mod_vcard.erl:358 mod_vcard.erl:475 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:451 +#: mod_vcard.erl:364 mod_vcard.erl:481 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:457 msgid "Email" msgstr "Email" -#: mod_vcard.erl:358 mod_vcard.erl:470 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:446 +#: mod_vcard.erl:364 mod_vcard.erl:476 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:452 msgid "Family Name" msgstr "Nama Keluarga (marga)" -#: mod_vcard.erl:358 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_odbc.erl:342 msgid "" "Fill in the form to search for any matching Jabber User (Add * to the end of " "field to match substring)" @@ -1300,52 +1358,52 @@ msgstr "" "Isi formulir untuk pencarian pengguna Jabber yang cocok (Tambahkan * ke " "mengakhiri pengisian untuk menyamakan kata)" -#: mod_vcard.erl:358 mod_vcard.erl:467 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:443 +#: mod_vcard.erl:364 mod_vcard.erl:473 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:449 msgid "Full Name" msgstr "Nama Lengkap" -#: mod_vcard.erl:358 mod_vcard.erl:469 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:445 +#: mod_vcard.erl:364 mod_vcard.erl:475 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:451 msgid "Middle Name" msgstr "Nama Tengah" -#: mod_vcard.erl:358 mod_vcard.erl:468 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:444 web/ejabberd_web_admin.erl:2004 +#: mod_vcard.erl:364 mod_vcard.erl:474 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:450 web/ejabberd_web_admin.erl:2006 msgid "Name" msgstr "Nama" -#: mod_vcard.erl:358 mod_vcard.erl:476 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:452 +#: mod_vcard.erl:364 mod_vcard.erl:482 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:458 msgid "Organization Name" msgstr "Nama Organisasi" -#: mod_vcard.erl:358 mod_vcard.erl:477 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:453 +#: mod_vcard.erl:364 mod_vcard.erl:483 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:459 msgid "Organization Unit" msgstr "Unit Organisasi" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "Search users in " msgstr "Pencarian pengguna dalam" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "You need an x:data capable client to search" msgstr "Anda memerlukan x:data klien untuk melakukan pencarian" -#: mod_vcard.erl:383 mod_vcard_ldap.erl:483 mod_vcard_odbc.erl:361 +#: mod_vcard.erl:389 mod_vcard_ldap.erl:487 mod_vcard_odbc.erl:367 msgid "vCard User Search" msgstr "vCard Pencarian Pengguna" -#: mod_vcard.erl:439 mod_vcard_ldap.erl:537 mod_vcard_odbc.erl:415 +#: mod_vcard.erl:445 mod_vcard_ldap.erl:541 mod_vcard_odbc.erl:421 msgid "ejabberd vCard module" msgstr "Modul ejabberd vCard" -#: mod_vcard.erl:463 mod_vcard_ldap.erl:547 mod_vcard_odbc.erl:439 +#: mod_vcard.erl:469 mod_vcard_ldap.erl:551 mod_vcard_odbc.erl:445 msgid "Search Results for " msgstr "Hasil Pencarian untuk" -#: mod_vcard_ldap.erl:458 +#: mod_vcard_ldap.erl:462 msgid "Fill in fields to search for any matching Jabber User" msgstr "Isi kolom untuk mencari pengguna Jabber yang sama" @@ -1406,7 +1464,7 @@ msgstr "Tampilkan Tabel Normal" msgid "Show Integral Table" msgstr "Tampilkan Tabel Terpisah" -#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1937 +#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1939 msgid "Statistics" msgstr "Statistik" @@ -1418,116 +1476,116 @@ msgstr "Tidak Ditemukan" msgid "Node not found" msgstr "Node tidak ditemukan" -#: web/ejabberd_web_admin.erl:1461 +#: web/ejabberd_web_admin.erl:1460 msgid "Host" msgstr "Host" -#: web/ejabberd_web_admin.erl:1462 +#: web/ejabberd_web_admin.erl:1461 msgid "Registered Users" msgstr "Pengguna Terdaftar" -#: web/ejabberd_web_admin.erl:1574 +#: web/ejabberd_web_admin.erl:1573 msgid "Offline Messages" msgstr "Pesan Offline" -#: web/ejabberd_web_admin.erl:1575 web/ejabberd_web_admin.erl:1765 +#: web/ejabberd_web_admin.erl:1574 web/ejabberd_web_admin.erl:1767 msgid "Last Activity" msgstr "Aktifitas Terakhir" -#: web/ejabberd_web_admin.erl:1657 web/ejabberd_web_admin.erl:1673 +#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 msgid "Registered Users:" msgstr "Pengguna Terdaftar:" -#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 -#: web/ejabberd_web_admin.erl:2191 +#: web/ejabberd_web_admin.erl:1661 web/ejabberd_web_admin.erl:1677 +#: web/ejabberd_web_admin.erl:2192 msgid "Online Users:" msgstr "Pengguna Online:" -#: web/ejabberd_web_admin.erl:1661 +#: web/ejabberd_web_admin.erl:1663 msgid "Outgoing s2s Connections:" msgstr "Koneksi s2s yang keluar:" -#: web/ejabberd_web_admin.erl:1663 +#: web/ejabberd_web_admin.erl:1665 msgid "Outgoing s2s Servers:" msgstr "Layanan s2s yang keluar:" -#: web/ejabberd_web_admin.erl:1732 web/mod_register_web.erl:175 +#: web/ejabberd_web_admin.erl:1734 web/mod_register_web.erl:175 #: web/mod_register_web.erl:372 web/mod_register_web.erl:381 #: web/mod_register_web.erl:411 msgid "Change Password" msgstr "Ubah Kata Sandi" -#: web/ejabberd_web_admin.erl:1756 +#: web/ejabberd_web_admin.erl:1758 msgid "User " msgstr "Pengguna" -#: web/ejabberd_web_admin.erl:1763 +#: web/ejabberd_web_admin.erl:1765 msgid "Connected Resources:" msgstr "Sumber Daya Terhubung:" -#: web/ejabberd_web_admin.erl:1764 web/mod_register_web.erl:227 +#: web/ejabberd_web_admin.erl:1766 web/mod_register_web.erl:227 #: web/mod_register_web.erl:519 msgid "Password:" msgstr "Kata Sandi:" -#: web/ejabberd_web_admin.erl:1826 +#: web/ejabberd_web_admin.erl:1828 msgid "No Data" msgstr "Tidak Ada Data" -#: web/ejabberd_web_admin.erl:1904 +#: web/ejabberd_web_admin.erl:1906 msgid "Nodes" msgstr "Node-node" -#: web/ejabberd_web_admin.erl:1927 web/ejabberd_web_admin.erl:1949 +#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1951 msgid "Node " msgstr "Node" -#: web/ejabberd_web_admin.erl:1936 +#: web/ejabberd_web_admin.erl:1938 msgid "Listened Ports" msgstr "Port Terdeteksi" -#: web/ejabberd_web_admin.erl:1938 web/ejabberd_web_admin.erl:2259 -#: web/ejabberd_web_admin.erl:2447 +#: web/ejabberd_web_admin.erl:1940 web/ejabberd_web_admin.erl:2260 +#: web/ejabberd_web_admin.erl:2448 msgid "Update" msgstr "Memperbarui" -#: web/ejabberd_web_admin.erl:1941 web/ejabberd_web_admin.erl:2568 +#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2569 msgid "Restart" msgstr "Jalankan Ulang" -#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2570 +#: web/ejabberd_web_admin.erl:1945 web/ejabberd_web_admin.erl:2571 msgid "Stop" msgstr "Hentikan" -#: web/ejabberd_web_admin.erl:1957 +#: web/ejabberd_web_admin.erl:1959 msgid "RPC Call Error" msgstr "Panggilan Kesalahan RPC" -#: web/ejabberd_web_admin.erl:1998 +#: web/ejabberd_web_admin.erl:2000 msgid "Database Tables at " msgstr "Tabel Database pada" -#: web/ejabberd_web_admin.erl:2005 +#: web/ejabberd_web_admin.erl:2007 msgid "Storage Type" msgstr "Jenis Penyimpanan" -#: web/ejabberd_web_admin.erl:2006 +#: web/ejabberd_web_admin.erl:2008 msgid "Elements" msgstr "Elemen-elemen" -#: web/ejabberd_web_admin.erl:2007 +#: web/ejabberd_web_admin.erl:2009 msgid "Memory" msgstr "Memori" -#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2032 web/ejabberd_web_admin.erl:2137 msgid "Error" msgstr "Kesalahan" -#: web/ejabberd_web_admin.erl:2033 +#: web/ejabberd_web_admin.erl:2034 msgid "Backup of " msgstr "Cadangan dari" -#: web/ejabberd_web_admin.erl:2035 +#: web/ejabberd_web_admin.erl:2036 msgid "" "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 " @@ -1537,143 +1595,143 @@ msgstr "" "database. Jika Anda menggunakan modul ODBC, anda juga perlu untuk membuat " "cadangan database SQL Anda secara terpisah." -#: web/ejabberd_web_admin.erl:2040 +#: web/ejabberd_web_admin.erl:2041 msgid "Store binary backup:" msgstr "Penyimpanan cadangan yang berpasangan:" -#: web/ejabberd_web_admin.erl:2044 web/ejabberd_web_admin.erl:2051 -#: web/ejabberd_web_admin.erl:2059 web/ejabberd_web_admin.erl:2066 -#: web/ejabberd_web_admin.erl:2073 web/ejabberd_web_admin.erl:2080 -#: web/ejabberd_web_admin.erl:2087 web/ejabberd_web_admin.erl:2095 -#: web/ejabberd_web_admin.erl:2102 web/ejabberd_web_admin.erl:2109 +#: web/ejabberd_web_admin.erl:2045 web/ejabberd_web_admin.erl:2052 +#: web/ejabberd_web_admin.erl:2060 web/ejabberd_web_admin.erl:2067 +#: web/ejabberd_web_admin.erl:2074 web/ejabberd_web_admin.erl:2081 +#: web/ejabberd_web_admin.erl:2088 web/ejabberd_web_admin.erl:2096 +#: web/ejabberd_web_admin.erl:2103 web/ejabberd_web_admin.erl:2110 msgid "OK" msgstr "YA" -#: web/ejabberd_web_admin.erl:2047 +#: web/ejabberd_web_admin.erl:2048 msgid "Restore binary backup immediately:" msgstr "Segera mengembalikan cadangan yang berpasangan:" -#: web/ejabberd_web_admin.erl:2055 +#: web/ejabberd_web_admin.erl:2056 msgid "" "Restore binary backup after next ejabberd restart (requires less memory):" msgstr "" "Mengembalikan cadangan yang berpasanagn setelah ejabberd berikutnya " "dijalankan ulang (memerlukan memori lebih sedikit):" -#: web/ejabberd_web_admin.erl:2062 +#: web/ejabberd_web_admin.erl:2063 msgid "Store plain text backup:" msgstr "Simpan cadangan teks biasa:" -#: web/ejabberd_web_admin.erl:2069 +#: web/ejabberd_web_admin.erl:2070 msgid "Restore plain text backup immediately:" msgstr "Segera mengembalikan cadangan teks biasa:" -#: web/ejabberd_web_admin.erl:2076 +#: web/ejabberd_web_admin.erl:2077 msgid "Import users data from a PIEFXIS file (XEP-0227):" msgstr "impor data-data pengguna dari sebuah PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2083 +#: web/ejabberd_web_admin.erl:2084 msgid "Export data of all users in the server to PIEFXIS files (XEP-0227):" msgstr "" "Ekspor data dari semua pengguna pada layanan ke berkas PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2090 +#: web/ejabberd_web_admin.erl:2091 msgid "Export data of users in a host to PIEFXIS files (XEP-0227):" msgstr "Ekspor data pengguna pada sebuah host ke berkas PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2098 +#: web/ejabberd_web_admin.erl:2099 msgid "Import user data from jabberd14 spool file:" msgstr "Impor data pengguna dari sekumpulan berkas jabberd14:" -#: web/ejabberd_web_admin.erl:2105 +#: web/ejabberd_web_admin.erl:2106 msgid "Import users data from jabberd14 spool directory:" msgstr "Импорт пользовательских данных из буферной директории jabberd14:" -#: web/ejabberd_web_admin.erl:2131 +#: web/ejabberd_web_admin.erl:2132 msgid "Listened Ports at " msgstr "Mendeteksi Port-port di" -#: web/ejabberd_web_admin.erl:2156 +#: web/ejabberd_web_admin.erl:2157 msgid "Modules at " msgstr "modul-modul di" -#: web/ejabberd_web_admin.erl:2182 +#: web/ejabberd_web_admin.erl:2183 msgid "Statistics of ~p" msgstr "statistik dari ~p" -#: web/ejabberd_web_admin.erl:2185 +#: web/ejabberd_web_admin.erl:2186 msgid "Uptime:" msgstr "Sampai saat:" -#: web/ejabberd_web_admin.erl:2188 +#: web/ejabberd_web_admin.erl:2189 msgid "CPU Time:" msgstr "Waktu CPU:" -#: web/ejabberd_web_admin.erl:2194 +#: web/ejabberd_web_admin.erl:2195 msgid "Transactions Committed:" msgstr "Transaksi yang dilakukan:" -#: web/ejabberd_web_admin.erl:2197 +#: web/ejabberd_web_admin.erl:2198 msgid "Transactions Aborted:" msgstr "Transaksi yang dibatalkan:" -#: web/ejabberd_web_admin.erl:2200 +#: web/ejabberd_web_admin.erl:2201 msgid "Transactions Restarted:" msgstr "Transaksi yang dijalankan ulang:" -#: web/ejabberd_web_admin.erl:2203 +#: web/ejabberd_web_admin.erl:2204 msgid "Transactions Logged:" msgstr "Transaksi yang ditempuh:" -#: web/ejabberd_web_admin.erl:2245 +#: web/ejabberd_web_admin.erl:2246 msgid "Update " msgstr "Memperbarui " -#: web/ejabberd_web_admin.erl:2253 +#: web/ejabberd_web_admin.erl:2254 msgid "Update plan" msgstr "Rencana Perubahan" -#: web/ejabberd_web_admin.erl:2254 +#: web/ejabberd_web_admin.erl:2255 msgid "Modified modules" msgstr "Modifikasi modul-modul" -#: web/ejabberd_web_admin.erl:2255 +#: web/ejabberd_web_admin.erl:2256 msgid "Update script" msgstr "Perbarui naskah" -#: web/ejabberd_web_admin.erl:2256 +#: web/ejabberd_web_admin.erl:2257 msgid "Low level update script" msgstr "Perbaruan naskah tingkat rendah" -#: web/ejabberd_web_admin.erl:2257 +#: web/ejabberd_web_admin.erl:2258 msgid "Script check" msgstr "Periksa naskah" -#: web/ejabberd_web_admin.erl:2425 +#: web/ejabberd_web_admin.erl:2426 msgid "Port" msgstr "Port" -#: web/ejabberd_web_admin.erl:2426 +#: web/ejabberd_web_admin.erl:2427 msgid "IP" msgstr "IP" -#: web/ejabberd_web_admin.erl:2427 +#: web/ejabberd_web_admin.erl:2428 msgid "Protocol" msgstr "Protocol" -#: web/ejabberd_web_admin.erl:2428 web/ejabberd_web_admin.erl:2555 +#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 msgid "Module" msgstr "Modul" -#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 +#: web/ejabberd_web_admin.erl:2430 web/ejabberd_web_admin.erl:2557 msgid "Options" msgstr "Pilihan-pilihan" -#: web/ejabberd_web_admin.erl:2449 +#: web/ejabberd_web_admin.erl:2450 msgid "Delete" msgstr "Hapus" -#: web/ejabberd_web_admin.erl:2578 +#: web/ejabberd_web_admin.erl:2579 msgid "Start" msgstr "Mulai" diff --git a/src/msgs/it.msg b/src/msgs/it.msg index 712745abf..7961dc170 100644 --- a/src/msgs/it.msg +++ b/src/msgs/it.msg @@ -20,7 +20,9 @@ {"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 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 voice requests","Consentire agli ospiti l'invio di richieste di parola"}. {"All Users","Tutti gli utenti"}. {"Announcements","Annunci"}. {"anyone","tutti"}. @@ -33,8 +35,10 @@ {"Backup to File at ","Salvataggio sul file "}. {"Bad format","Formato non valido"}. {"Birthday","Compleanno"}. +{"CAPTCHA web page","Pagina web CAPTCHA"}. {"Change Password","Modificare la password"}. {"Change User Password","Cambiare la password dell'utente"}. +{"Characters not allowed:","Caratteri non consentiti:"}. {"Chatroom configuration modified","Configurazione della stanza modificata"}. {"Chatroom is created","La stanza è creata"}. {"Chatroom is destroyed","La stanza è eliminata"}. @@ -69,9 +73,11 @@ {"Description:","Descrizione:"}. {"Disc only copy","Copia su disco soltanto"}. {"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 to Text File","Trascrivere su file di testo"}. {"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 MUC module","Modulo MUC per ejabberd"}. {"ejabberd Publish-Subscribe module","Modulo Pubblicazione/Iscrizione (PubSub) per ejabberd"}. @@ -95,8 +101,10 @@ {"Erlang Jabber Server","Erlang Jabber Server"}. {"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\"}]."}. +{"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 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"}. {"February","Febbraio"}. {"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 Password","Ottenere la password dell'utente"}. {"Get User Statistics","Ottenere le statistiche dell'utente"}. +{"Grant voice to this person?","Dare parola a questa persona?"}. {"Group ","Gruppo "}. {"Groups","Gruppi"}. {"has been banned","è stata/o bandita/o"}. @@ -119,6 +128,7 @@ {"has been kicked","è stata/o espulsa/o"}. {" has set the subject to: "," ha modificato l'oggetto in: "}. {"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."}. {"Import Directory","Importare una directory"}. {"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 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"}. +{"Jabber Account Registration","Registrazione account Jabber"}. {"Jabber ID","Jabber ID (Jabber ID)"}. {"Jabber ID ~s is invalid","Il Jabber ID ~s non è valido"}. {"January","Gennaio"}. @@ -163,7 +174,7 @@ {"List of modules to start","Elenco dei moduli da avviare"}. {"Low level update script","Script di aggiornamento di basso livello"}. {"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 moderated","Rendere la stanza moderata"}. {"Make room password protected","Rendere la stanza protetta da password"}. @@ -176,9 +187,11 @@ {"May","Maggio"}. {"Membership is required to enter this room","Per entrare in questa stanza è necessario essere membro"}. {"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"}. {"Message body","Corpo del messaggio"}. {"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"}. {"moderators only","moderatori soltanto"}. {"Modified modules","Moduli modificati"}. @@ -189,9 +202,11 @@ {"Name:","Nome:"}. {"Name","Nome"}. {"Never","Mai"}. +{"New Password:","Nuova password:"}. {"Nickname","Nickname"}. {"Nickname Registration at ","Registrazione di un nickname su "}. {"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 Data","Nessuna informazione"}. {"Node ID","ID del nodo"}. @@ -213,12 +228,14 @@ {"Offline Messages:","Messaggi offline:"}. {"Offline Messages","Messaggi offline"}. {"OK","OK"}. +{"Old Password:","Vecchia password:"}. {"Online","Online"}. {"Online Users:","Utenti connessi:"}. {"Online Users","Utenti online"}. {"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 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 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"}. @@ -233,6 +250,7 @@ {"Password ~b","Password ~b"}. {"Password:","Password:"}. {"Password","Password"}. +{"Password Verification:","Verifica della password:"}. {"Password Verification","Verifica della password"}. {"Path to Dir","Percorso della directory"}. {"Path to File","Percorso del file"}. @@ -241,6 +259,7 @@ {"Persist items to storage","Conservazione persistente degli elementi"}. {"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, wait for a while before sending new voice request","Attendi qualche istante prima di inviare una nuova richiesta di parola"}. {"Pong","Pong"}. {"Port ~b","Porta ~b"}. {"Port","Porta"}. @@ -256,8 +275,10 @@ {"Raw","Grezzo"}. {"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"}. +{"Register a Jabber account","Registra un account Jabber"}. {"Registered Users:","Utenti registrati:"}. {"Registered Users","Utenti registrati"}. +{"Register","Registra"}. {"Registration in mod_irc for ","Registrazione in mod_irc per "}. {"Remote copy","Copia remota"}. {"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"}. {"September","Settembre"}. {"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 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"}. @@ -301,6 +323,7 @@ {"Show Ordinary Table","Mostrare la tabella normale"}. {"Shut Down Service","Terminare il servizio"}. {"~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 event message type","Specificare il tipo di messaggio di evento"}. {"Specify the publisher model","Definire il modello di pubblicazione"}. @@ -325,9 +348,18 @@ {"Sunday","Domenica"}. {"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"}. -{"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 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 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"}. @@ -336,6 +368,7 @@ {"Time delay","Ritardo"}. {"Time","Ora"}. {"To","A"}. +{"Too many CAPTCHA requests","Troppe richieste CAPTCHA"}. {"To ~s","A ~s"}. {"Traffic rate limit is exceeded","Limite di traffico superato"}. {"Transactions Aborted:","Transazioni abortite:"}. @@ -343,8 +376,10 @@ {"Transactions Logged:","Transazioni con log:"}. {"Transactions Restarted:","Transazioni riavviate:"}. {"Tuesday","Martedì"}. -{"Unable to generate a captcha","Impossibile generare un captcha"}. +{"Unable to generate a CAPTCHA","Impossibile generare un CAPTCHA"}. {"Unauthorized","Non autorizzato"}. +{"Unregister a Jabber account","Elimina un account Jabber"}. +{"Unregister","Elimina"}. {"Update ","Aggiornare "}. {"Update","Aggiornare"}. {"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"}. {"Uptime:","Tempo dall'avvio:"}. {"Use of STARTTLS required","Utilizzo di STARTTLS obbligatorio"}. +{"User JID","JID utente"}. {"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 Last Activity","Ultima attività degli utenti"}. {"Users","Utenti"}. @@ -364,13 +401,21 @@ {"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 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ì"}. {"When to send the last published item","Quando inviare l'ultimo elemento pubblicato"}. {"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 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 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"}. +{"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 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"}. diff --git a/src/msgs/it.po b/src/msgs/it.po index a2d0638b5..f15ad8ba9 100644 --- a/src/msgs/it.po +++ b/src/msgs/it.po @@ -1,13 +1,19 @@ +# Luca Brivio , 2012. msgid "" msgstr "" "Project-Id-Version: 2.1.0-alpha\n" -"Last-Translator: Luca Brivio\n" +"PO-Revision-Date: 2012-04-24 16:48+0200\n" +"Last-Translator: Luca Brivio \n" +"Language-Team: Italian \n" +"Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Language: Italian (italiano)\n" "X-Additional-Translator: Gabriele Stilli \n" "X-Additional-Translator: Smart2128\n" +"X-Generator: Lokalize 1.2\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ejabberd_c2s.erl:424 ejabberd_c2s.erl:727 msgid "Use of STARTTLS required" @@ -17,13 +23,15 @@ msgstr "Utilizzo di STARTTLS obbligatorio" msgid "No resource provided" msgstr "Nessuna risorsa fornita" -#: ejabberd_c2s.erl:1149 +#: ejabberd_c2s.erl:1197 msgid "Replaced by new connection" msgstr "Sostituito da una nuova connessione" -#: ejabberd_c2s.erl:1837 +#: ejabberd_c2s.erl:1885 msgid "Your active privacy list has denied the routing of this stanza." msgstr "" +"In base alla tua attuale lista privacy questa stanza è stata esclusa dalla " +"navigazione." #: ejabberd_captcha.erl:96 ejabberd_captcha.erl:152 ejabberd_captcha.erl:178 msgid "Enter the text you see" @@ -35,15 +43,15 @@ msgstr "I messaggi verso ~s sono bloccati. Per sbloccarli, visitare ~s" #: ejabberd_captcha.erl:134 msgid "If you don't see the CAPTCHA image here, visit the web page." -msgstr "" +msgstr "Se qui non vedi l'immagine CAPTCHA, visita la pagina web." #: ejabberd_captcha.erl:146 msgid "CAPTCHA web page" -msgstr "" +msgstr "Pagina web CAPTCHA" #: ejabberd_captcha.erl:307 -msgid "The captcha is valid." -msgstr "Il captcha è valido." +msgid "The CAPTCHA is valid." +msgstr "Il CAPTCHA è valido." #: mod_adhoc.erl:95 mod_adhoc.erl:125 mod_adhoc.erl:143 mod_adhoc.erl:161 msgid "Commands" @@ -57,67 +65,70 @@ msgstr "Ping" msgid "Pong" msgstr "Pong" -#: mod_announce.erl:506 +#: mod_announce.erl:507 mod_announce_odbc.erl:499 msgid "Really delete message of the day?" msgstr "Si conferma l'eliminazione del messaggio del giorno (MOTD)?" -#: mod_announce.erl:514 mod_configure.erl:1083 mod_configure.erl:1128 +#: mod_announce.erl:515 mod_announce_odbc.erl:507 mod_configure.erl:1083 +#: mod_configure.erl:1128 msgid "Subject" msgstr "Oggetto" -#: mod_announce.erl:519 mod_configure.erl:1088 mod_configure.erl:1133 +#: mod_announce.erl:520 mod_announce_odbc.erl:512 mod_configure.erl:1088 +#: mod_configure.erl:1133 msgid "Message body" msgstr "Corpo del messaggio" -#: mod_announce.erl:599 +#: mod_announce.erl:600 mod_announce_odbc.erl:592 msgid "No body provided for announce message" msgstr "Nessun corpo fornito per il messaggio di annuncio" -#: mod_announce.erl:634 +#: mod_announce.erl:635 mod_announce_odbc.erl:627 msgid "Announcements" msgstr "Annunci" -#: mod_announce.erl:636 +#: mod_announce.erl:637 mod_announce_odbc.erl:629 msgid "Send announcement to all users" msgstr "Inviare l'annuncio a tutti gli utenti" -#: mod_announce.erl:638 +#: mod_announce.erl:639 mod_announce_odbc.erl:631 msgid "Send announcement to all users on all hosts" msgstr "Inviare l'annuncio a tutti gli utenti su tutti gli host" -#: mod_announce.erl:640 +#: mod_announce.erl:641 mod_announce_odbc.erl:633 msgid "Send announcement to all online users" msgstr "Inviare l'annuncio a tutti gli utenti online" -#: mod_announce.erl:642 mod_configure.erl:1078 mod_configure.erl:1123 +#: mod_announce.erl:643 mod_announce_odbc.erl:635 mod_configure.erl:1078 +#: mod_configure.erl:1123 msgid "Send announcement to all online users on all hosts" msgstr "Inviare l'annuncio a tutti gli utenti online su tutti gli host" -#: mod_announce.erl:644 +#: mod_announce.erl:645 mod_announce_odbc.erl:637 msgid "Set message of the day and send to online users" msgstr "" "Impostare il messaggio del giorno (MOTD) ed inviarlo agli utenti online" -#: mod_announce.erl:646 +#: mod_announce.erl:647 mod_announce_odbc.erl:639 msgid "Set message of the day on all hosts and send to online users" msgstr "" "Impostare il messaggio del giorno (MOTD) su tutti gli host e inviarlo agli " "utenti online" -#: mod_announce.erl:648 +#: mod_announce.erl:649 mod_announce_odbc.erl:641 msgid "Update message of the day (don't send)" msgstr "Aggiornare il messaggio del giorno (MOTD) (non inviarlo)" -#: mod_announce.erl:650 +#: mod_announce.erl:651 mod_announce_odbc.erl:643 msgid "Update message of the day on all hosts (don't send)" msgstr "" "Aggiornare il messaggio del giorno (MOTD) su tutti gli host (non inviarlo)" -#: mod_announce.erl:652 +#: mod_announce.erl:653 mod_announce_odbc.erl:645 msgid "Delete message of the day" msgstr "Eliminare il messaggio del giorno (MOTD)" -#: mod_announce.erl:654 +#: mod_announce.erl:655 mod_announce_odbc.erl:647 msgid "Delete message of the day on all hosts" msgstr "Eliminare il messaggio del giorno (MOTD) su tutti gli host" @@ -126,7 +137,7 @@ msgstr "Eliminare il messaggio del giorno (MOTD) su tutti gli host" msgid "Configuration" msgstr "Configurazione" -#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1934 +#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1936 msgid "Database" msgstr "Database" @@ -138,7 +149,7 @@ msgstr "Avviare moduli" msgid "Stop Modules" msgstr "Arrestare moduli" -#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1935 +#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1937 msgid "Backup" msgstr "Salvare" @@ -167,7 +178,7 @@ msgid "Shut Down Service" msgstr "Terminare il servizio" #: mod_configure.erl:145 mod_configure.erl:518 mod_configure.erl:1197 -#: web/ejabberd_web_admin.erl:1528 +#: web/ejabberd_web_admin.erl:1527 msgid "Add User" msgstr "Aggiungere un utente" @@ -219,7 +230,7 @@ msgid "User Management" msgstr "Gestione degli utenti" #: mod_configure.erl:500 web/ejabberd_web_admin.erl:1058 -#: web/ejabberd_web_admin.erl:1463 +#: web/ejabberd_web_admin.erl:1462 msgid "Online Users" msgstr "Utenti online" @@ -231,15 +242,15 @@ msgstr "Tutti gli utenti" msgid "Outgoing s2s Connections" msgstr "Connessioni s2s in uscita" -#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1905 +#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1907 msgid "Running Nodes" msgstr "Nodi attivi" -#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1907 +#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1909 msgid "Stopped Nodes" msgstr "Nodi arrestati" -#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1951 +#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1953 msgid "Modules" msgstr "Moduli" @@ -370,15 +381,15 @@ msgstr "Regole di accesso" #: mod_configure.erl:1200 mod_configure.erl:1222 mod_configure.erl:1234 #: mod_configure.erl:1246 mod_configure.erl:1258 mod_configure.erl:1275 -#: mod_configure.erl:1287 mod_configure.erl:1652 mod_configure.erl:1702 -#: mod_configure.erl:1723 mod_roster.erl:943 mod_roster_odbc.erl:1048 -#: mod_vcard.erl:466 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:442 +#: mod_configure.erl:1287 mod_configure.erl:1650 mod_configure.erl:1700 +#: mod_configure.erl:1721 mod_roster.erl:943 mod_roster_odbc.erl:1060 +#: mod_vcard.erl:472 mod_vcard_ldap.erl:554 mod_vcard_odbc.erl:448 msgid "Jabber ID" msgstr "Jabber ID (Jabber ID)" -#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1653 -#: mod_configure.erl:1865 mod_muc/mod_muc_room.erl:2970 mod_register.erl:235 -#: web/ejabberd_web_admin.erl:1521 +#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1651 +#: mod_configure.erl:1863 mod_muc/mod_muc_room.erl:3224 mod_register.erl:235 +#: web/ejabberd_web_admin.erl:1520 msgid "Password" msgstr "Password" @@ -394,71 +405,72 @@ msgstr "Numero di utenti registrati" msgid "Number of online users" msgstr "Numero di utenti online" -#: mod_configure.erl:1684 web/ejabberd_web_admin.erl:1589 -#: web/ejabberd_web_admin.erl:1741 +#: mod_configure.erl:1682 web/ejabberd_web_admin.erl:1588 +#: web/ejabberd_web_admin.erl:1743 msgid "Never" msgstr "Mai" -#: mod_configure.erl:1698 web/ejabberd_web_admin.erl:1602 -#: web/ejabberd_web_admin.erl:1754 +#: mod_configure.erl:1696 web/ejabberd_web_admin.erl:1601 +#: web/ejabberd_web_admin.erl:1756 msgid "Online" msgstr "Online" -#: mod_configure.erl:1703 +#: mod_configure.erl:1701 msgid "Last login" msgstr "Ultimo accesso" -#: mod_configure.erl:1724 +#: mod_configure.erl:1722 msgid "Roster size" msgstr "Dimensione della lista dei contatti" -#: mod_configure.erl:1725 +#: mod_configure.erl:1723 msgid "IP addresses" msgstr "Indirizzi IP" -#: mod_configure.erl:1726 +#: mod_configure.erl:1724 msgid "Resources" msgstr "Risorse" -#: mod_configure.erl:1852 +#: mod_configure.erl:1850 msgid "Administration of " msgstr "Amministrazione di " -#: mod_configure.erl:1855 +#: mod_configure.erl:1853 msgid "Action on user" msgstr "Azione sull'utente" -#: mod_configure.erl:1859 +#: mod_configure.erl:1857 msgid "Edit Properties" msgstr "Modificare le proprietà" -#: mod_configure.erl:1862 web/ejabberd_web_admin.erl:1767 +#: mod_configure.erl:1860 web/ejabberd_web_admin.erl:1769 msgid "Remove User" msgstr "Eliminare l'utente" -#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:336 +#: mod_irc/mod_irc.erl:201 mod_irc/mod_irc_odbc.erl:196 +#: mod_muc/mod_muc.erl:336 mod_muc/mod_muc_odbc.erl:342 msgid "Access denied by service policy" msgstr "Accesso impedito dalle politiche del servizio" -#: mod_irc/mod_irc.erl:400 +#: mod_irc/mod_irc.erl:401 mod_irc/mod_irc_odbc.erl:398 msgid "IRC Transport" msgstr "Transport IRC" -#: mod_irc/mod_irc.erl:427 +#: mod_irc/mod_irc.erl:428 mod_irc/mod_irc_odbc.erl:425 msgid "ejabberd IRC module" msgstr "Modulo IRC per ejabberd" -#: mod_irc/mod_irc.erl:558 +#: mod_irc/mod_irc.erl:559 mod_irc/mod_irc_odbc.erl:568 msgid "You need an x:data capable client to configure mod_irc settings" msgstr "" "Per la configurazione del modulo IRC è necessario un client che supporti x:" "data" -#: mod_irc/mod_irc.erl:565 +#: mod_irc/mod_irc.erl:566 mod_irc/mod_irc_odbc.erl:575 msgid "Registration in mod_irc for " msgstr "Registrazione in mod_irc per " -#: mod_irc/mod_irc.erl:570 +#: mod_irc/mod_irc.erl:571 mod_irc/mod_irc_odbc.erl:580 msgid "" "Enter username, encodings, ports and passwords you wish to use for " "connecting to IRC servers" @@ -466,11 +478,11 @@ msgstr "" "Immettere il nome utente, le codifiche, le porte e le password che si " "desidera utilizzare per la connessione ai server IRC" -#: mod_irc/mod_irc.erl:575 +#: mod_irc/mod_irc.erl:576 mod_irc/mod_irc_odbc.erl:585 msgid "IRC Username" msgstr "Nome utente IRC" -#: mod_irc/mod_irc.erl:585 +#: mod_irc/mod_irc.erl:586 mod_irc/mod_irc_odbc.erl:595 msgid "" "If you want to specify different ports, passwords, encodings for IRC " "servers, fill this list with values in format '{\"irc server\", \"encoding" @@ -482,7 +494,7 @@ msgstr "" "\", \"codifica\", porta, \"password\"}'. Per default questo servizio " "utilizza la codifica \"~s\", la porta ~p, la password vuota." -#: mod_irc/mod_irc.erl:597 +#: mod_irc/mod_irc.erl:598 mod_irc/mod_irc_odbc.erl:607 msgid "" "Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." @@ -490,35 +502,36 @@ msgstr "" "Esempio: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"segreto\"}, {\"vendetta." "fef.net\", \"iso8859-1\", 7000}, {\"irc.serverdiprova.net\", \"utf-8\"}]." -#: mod_irc/mod_irc.erl:602 +#: mod_irc/mod_irc.erl:603 mod_irc/mod_irc_odbc.erl:612 msgid "Connections parameters" msgstr "Parametri delle connessioni" -#: mod_irc/mod_irc.erl:727 +#: mod_irc/mod_irc.erl:728 mod_irc/mod_irc_odbc.erl:757 msgid "Join IRC channel" msgstr "Entra nel canale IRC" -#: mod_irc/mod_irc.erl:731 +#: mod_irc/mod_irc.erl:732 mod_irc/mod_irc_odbc.erl:761 msgid "IRC channel (don't put the first #)" msgstr "Canale IRC (senza il # iniziale)" -#: mod_irc/mod_irc.erl:736 +#: mod_irc/mod_irc.erl:737 mod_irc/mod_irc_odbc.erl:766 msgid "IRC server" msgstr "Server IRC" -#: mod_irc/mod_irc.erl:769 mod_irc/mod_irc.erl:773 +#: mod_irc/mod_irc.erl:770 mod_irc/mod_irc.erl:774 +#: mod_irc/mod_irc_odbc.erl:799 mod_irc/mod_irc_odbc.erl:803 msgid "Join the IRC channel here." msgstr "Entra nel canale IRC qui." -#: mod_irc/mod_irc.erl:777 +#: mod_irc/mod_irc.erl:778 mod_irc/mod_irc_odbc.erl:807 msgid "Join the IRC channel in this Jabber ID: ~s" msgstr "Entra nel canale IRC in questo ID Jabber: ~s" -#: mod_irc/mod_irc.erl:862 +#: mod_irc/mod_irc.erl:863 mod_irc/mod_irc_odbc.erl:904 msgid "IRC settings" msgstr "Impostazioni IRC" -#: mod_irc/mod_irc.erl:867 +#: mod_irc/mod_irc.erl:868 mod_irc/mod_irc_odbc.erl:909 msgid "" "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 " @@ -528,73 +541,73 @@ msgstr "" "connessione ai server IRC. Premere \"Avanti\" per vedere i successivi campi " "da compilare. Premere \"Fatto\" per salvare le impostazioni." -#: mod_irc/mod_irc.erl:873 +#: mod_irc/mod_irc.erl:874 mod_irc/mod_irc_odbc.erl:915 msgid "IRC username" msgstr "Nome utente IRC" -#: mod_irc/mod_irc.erl:922 +#: mod_irc/mod_irc.erl:923 mod_irc/mod_irc_odbc.erl:964 msgid "Password ~b" msgstr "Password ~b" -#: mod_irc/mod_irc.erl:927 +#: mod_irc/mod_irc.erl:928 mod_irc/mod_irc_odbc.erl:969 msgid "Port ~b" msgstr "Porta ~b" -#: mod_irc/mod_irc.erl:932 +#: mod_irc/mod_irc.erl:933 mod_irc/mod_irc_odbc.erl:974 msgid "Encoding for server ~b" msgstr "Codifica per il server ~b" -#: mod_irc/mod_irc.erl:941 +#: mod_irc/mod_irc.erl:942 mod_irc/mod_irc_odbc.erl:983 msgid "Server ~b" msgstr "Server ~b" -#: mod_muc/mod_muc.erl:449 +#: mod_muc/mod_muc.erl:449 mod_muc/mod_muc_odbc.erl:456 msgid "Only service administrators are allowed to send service messages" msgstr "" "L'invio di messaggi di servizio è consentito solamente agli amministratori " "del servizio" -#: mod_muc/mod_muc.erl:493 +#: mod_muc/mod_muc.erl:493 mod_muc/mod_muc_odbc.erl:500 msgid "Room creation is denied by service policy" msgstr "La creazione di stanze è impedita dalle politiche del servizio" -#: mod_muc/mod_muc.erl:500 +#: mod_muc/mod_muc.erl:500 mod_muc/mod_muc_odbc.erl:507 msgid "Conference room does not exist" msgstr "La stanza per conferenze non esiste" -#: mod_muc/mod_muc.erl:581 +#: mod_muc/mod_muc.erl:582 mod_muc/mod_muc_odbc.erl:595 msgid "Chatrooms" msgstr "Stanze" -#: mod_muc/mod_muc.erl:711 -#, fuzzy +#: mod_muc/mod_muc.erl:712 mod_muc/mod_muc_odbc.erl:729 msgid "You need a client that supports x:data to register the nickname" -msgstr "Per registrare un nickname è necessario un client che supportix:data" +msgstr "Per registrare il nickname è necessario un client che supporti x:data" -#: mod_muc/mod_muc.erl:717 +#: mod_muc/mod_muc.erl:718 mod_muc/mod_muc_odbc.erl:735 msgid "Nickname Registration at " msgstr "Registrazione di un nickname su " -#: mod_muc/mod_muc.erl:721 +#: mod_muc/mod_muc.erl:722 mod_muc/mod_muc_odbc.erl:739 msgid "Enter nickname you want to register" msgstr "Immettere il nickname che si vuole registrare" -#: mod_muc/mod_muc.erl:722 mod_roster.erl:944 mod_roster_odbc.erl:1049 -#: mod_vcard.erl:358 mod_vcard.erl:471 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:447 +#: mod_muc/mod_muc.erl:723 mod_muc/mod_muc_odbc.erl:740 +#: mod_muc/mod_muc_room.erl:3810 mod_roster.erl:944 mod_roster_odbc.erl:1061 +#: mod_vcard.erl:364 mod_vcard.erl:477 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:453 msgid "Nickname" msgstr "Nickname" -#: mod_muc/mod_muc.erl:761 mod_muc/mod_muc_room.erl:933 -#: mod_muc/mod_muc_room.erl:1577 +#: mod_muc/mod_muc.erl:762 mod_muc/mod_muc_odbc.erl:784 +#: mod_muc/mod_muc_room.erl:1064 mod_muc/mod_muc_room.erl:1787 msgid "That nickname is registered by another person" msgstr "Questo nickname è registrato da un'altra persona" -#: mod_muc/mod_muc.erl:787 +#: mod_muc/mod_muc.erl:788 mod_muc/mod_muc_odbc.erl:811 msgid "You must fill in field \"Nickname\" in the form" msgstr "Si deve riempire il campo \"Nickname\" nel modulo" -#: mod_muc/mod_muc.erl:807 +#: mod_muc/mod_muc.erl:808 mod_muc/mod_muc_odbc.erl:831 msgid "ejabberd MUC module" msgstr "Modulo MUC per ejabberd" @@ -634,8 +647,8 @@ msgstr "è stato espulso a causa dello spegnimento del sistema" msgid "is now known as" msgstr "è ora conosciuta/o come" -#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:689 -#: mod_muc/mod_muc_room.erl:2138 +#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:688 +#: mod_muc/mod_muc_room.erl:2393 msgid " has set the subject to: " msgstr " ha modificato l'oggetto in: " @@ -731,33 +744,50 @@ msgstr "Novembre" msgid "December" msgstr "Dicembre" -#: mod_muc/mod_muc_log.erl:751 +#: mod_muc/mod_muc_log.erl:750 msgid "Room Configuration" msgstr "Configurazione della stanza" -#: mod_muc/mod_muc_log.erl:760 +#: mod_muc/mod_muc_log.erl:759 msgid "Room Occupants" msgstr "Presenti nella stanza" -#: mod_muc/mod_muc_room.erl:170 +#: mod_muc/mod_muc_room.erl:174 msgid "Traffic rate limit is exceeded" msgstr "Limite di traffico superato" -#: mod_muc/mod_muc_room.erl:242 +#: mod_muc/mod_muc_room.erl:246 msgid "" "This participant is kicked from the room because he sent an error message" msgstr "" "Partecipante espulso dalla stanza perché ha inviato un messaggio non valido" -#: mod_muc/mod_muc_room.erl:251 +#: mod_muc/mod_muc_room.erl:255 msgid "It is not allowed to send private messages to the conference" msgstr "Non è consentito l'invio di messaggi privati alla conferenza" -#: mod_muc/mod_muc_room.erl:296 +#: mod_muc/mod_muc_room.erl:332 +msgid "Please, wait for a while before sending new voice request" +msgstr "Attendi qualche istante prima di inviare una nuova richiesta di parola" + +#: mod_muc/mod_muc_room.erl:347 +msgid "Voice requests are disabled in this conference" +msgstr "In questa conferenza le richieste di parola sono escluse" + +#: mod_muc/mod_muc_room.erl:364 +msgid "Failed to extract JID from your voice request approval" +msgstr "" +"Impossibile estrarre il JID dall'approvazione della richiesta di parola" + +#: mod_muc/mod_muc_room.erl:393 +msgid "Only moderators can approve voice requests" +msgstr "Soltanto i moderatori possono approvare richieste di parola" + +#: mod_muc/mod_muc_room.erl:408 msgid "Improper message type" msgstr "Tipo di messaggio non corretto" -#: mod_muc/mod_muc_room.erl:406 +#: mod_muc/mod_muc_room.erl:518 msgid "" "This participant is kicked from the room because he sent an error message to " "another participant" @@ -765,32 +795,32 @@ msgstr "" "Partecipante espulso dalla stanza perché ha inviato un messaggio non valido " "a un altro partecipante" -#: mod_muc/mod_muc_room.erl:419 +#: mod_muc/mod_muc_room.erl:531 msgid "It is not allowed to send private messages of type \"groupchat\"" msgstr "Non è consentito l'invio di messaggi privati di tipo \"groupchat\"" -#: mod_muc/mod_muc_room.erl:431 mod_muc/mod_muc_room.erl:486 +#: mod_muc/mod_muc_room.erl:543 mod_muc/mod_muc_room.erl:611 msgid "Recipient is not in the conference room" msgstr "Il destinatario non è nella stanza per conferenze" -#: mod_muc/mod_muc_room.erl:451 mod_muc/mod_muc_room.erl:829 -#: mod_muc/mod_muc_room.erl:3609 -msgid "Only occupants are allowed to send messages to the conference" -msgstr "L'invio di messaggi alla conferenza è consentito soltanto ai presenti" - -#: mod_muc/mod_muc_room.erl:460 +#: mod_muc/mod_muc_room.erl:564 mod_muc/mod_muc_room.erl:585 msgid "It is not allowed to send private messages" msgstr "Non è consentito l'invio di messaggi privati" -#: mod_muc/mod_muc_room.erl:509 +#: mod_muc/mod_muc_room.erl:576 mod_muc/mod_muc_room.erl:956 +#: mod_muc/mod_muc_room.erl:4040 +msgid "Only occupants are allowed to send messages to the conference" +msgstr "L'invio di messaggi alla conferenza è consentito soltanto ai presenti" + +#: mod_muc/mod_muc_room.erl:634 msgid "Only occupants are allowed to send queries to the conference" msgstr "L'invio di query alla conferenza è consentito ai soli presenti" -#: mod_muc/mod_muc_room.erl:521 +#: mod_muc/mod_muc_room.erl:646 msgid "Queries to the conference members are not allowed in this room" msgstr "In questa stanza non sono consentite query ai membri della conferenza" -#: mod_muc/mod_muc_room.erl:805 +#: mod_muc/mod_muc_room.erl:932 msgid "" "Only moderators and participants are allowed to change the subject in this " "room" @@ -798,201 +828,233 @@ msgstr "" "La modifica dell'oggetto di questa stanza è consentita soltanto ai " "moderatori e ai partecipanti" -#: mod_muc/mod_muc_room.erl:810 +#: mod_muc/mod_muc_room.erl:937 msgid "Only moderators are allowed to change the subject in this room" msgstr "" "La modifica dell'oggetto di questa stanza è consentita soltanto ai moderatori" -#: mod_muc/mod_muc_room.erl:820 +#: mod_muc/mod_muc_room.erl:947 msgid "Visitors are not allowed to send messages to all occupants" msgstr "Non è consentito ai visitatori l'invio di messaggi a tutti i presenti" -#: mod_muc/mod_muc_room.erl:891 +#: mod_muc/mod_muc_room.erl:1021 msgid "" "This participant is kicked from the room because he sent an error presence" msgstr "" "Partecipante espulso dalla stanza perché ha inviato una presenza non valido" -#: mod_muc/mod_muc_room.erl:909 +#: mod_muc/mod_muc_room.erl:1040 msgid "Visitors are not allowed to change their nicknames in this room" msgstr "Non è consentito ai visitatori cambiare il nickname in questa stanza" -#: mod_muc/mod_muc_room.erl:922 mod_muc/mod_muc_room.erl:1569 +#: mod_muc/mod_muc_room.erl:1053 mod_muc/mod_muc_room.erl:1779 msgid "That nickname is already in use by another occupant" msgstr "Il nickname è già in uso all'interno della conferenza" -#: mod_muc/mod_muc_room.erl:1558 +#: mod_muc/mod_muc_room.erl:1768 msgid "You have been banned from this room" msgstr "Sei stata/o bandita/o da questa stanza" -#: mod_muc/mod_muc_room.erl:1561 +#: mod_muc/mod_muc_room.erl:1771 msgid "Membership is required to enter this room" msgstr "Per entrare in questa stanza è necessario essere membro" -#: mod_muc/mod_muc_room.erl:1597 +#: mod_muc/mod_muc_room.erl:1807 msgid "This room is not anonymous" msgstr "Questa stanza non è anonima" -#: mod_muc/mod_muc_room.erl:1623 +#: mod_muc/mod_muc_room.erl:1833 msgid "A password is required to enter this room" msgstr "Per entrare in questa stanza è prevista una password" -#: mod_muc/mod_muc_room.erl:1645 mod_register.erl:246 +#: mod_muc/mod_muc_room.erl:1855 mod_register.erl:246 msgid "Too many CAPTCHA requests" -msgstr "" +msgstr "Troppe richieste CAPTCHA" -#: mod_muc/mod_muc_room.erl:1654 -msgid "Unable to generate a captcha" -msgstr "Impossibile generare un captcha" +#: mod_muc/mod_muc_room.erl:1864 mod_register.erl:251 +msgid "Unable to generate a CAPTCHA" +msgstr "Impossibile generare un CAPTCHA" -#: mod_muc/mod_muc_room.erl:1664 +#: mod_muc/mod_muc_room.erl:1874 msgid "Incorrect password" msgstr "Password non esatta" -#: mod_muc/mod_muc_room.erl:2193 +#: mod_muc/mod_muc_room.erl:2448 msgid "Administrator privileges required" msgstr "Necessari i privilegi di amministratore" -#: mod_muc/mod_muc_room.erl:2208 +#: mod_muc/mod_muc_room.erl:2463 msgid "Moderator privileges required" msgstr "Necessari i privilegi di moderatore" -#: mod_muc/mod_muc_room.erl:2363 +#: mod_muc/mod_muc_room.erl:2619 msgid "Jabber ID ~s is invalid" msgstr "Il Jabber ID ~s non è valido" -#: mod_muc/mod_muc_room.erl:2377 +#: mod_muc/mod_muc_room.erl:2633 msgid "Nickname ~s does not exist in the room" msgstr "Il nickname ~s non esiste nella stanza" -#: mod_muc/mod_muc_room.erl:2403 mod_muc/mod_muc_room.erl:2797 +#: mod_muc/mod_muc_room.erl:2659 mod_muc/mod_muc_room.erl:3049 msgid "Invalid affiliation: ~s" msgstr "Affiliazione non valida: ~s" -#: mod_muc/mod_muc_room.erl:2460 +#: mod_muc/mod_muc_room.erl:2713 msgid "Invalid role: ~s" msgstr "Ruolo non valido: ~s" -#: mod_muc/mod_muc_room.erl:2774 mod_muc/mod_muc_room.erl:2810 +#: mod_muc/mod_muc_room.erl:3026 mod_muc/mod_muc_room.erl:3062 msgid "Owner privileges required" msgstr "Necessari i privilegi di proprietario" -#: mod_muc/mod_muc_room.erl:2941 +#: mod_muc/mod_muc_room.erl:3195 msgid "Configuration of room ~s" msgstr "Configurazione per la stanza ~s" -#: mod_muc/mod_muc_room.erl:2946 +#: mod_muc/mod_muc_room.erl:3200 msgid "Room title" msgstr "Titolo della stanza" -#: mod_muc/mod_muc_room.erl:2949 mod_muc/mod_muc_room.erl:3388 +#: mod_muc/mod_muc_room.erl:3203 mod_muc/mod_muc_room.erl:3692 msgid "Room description" msgstr "Descrizione della stanza" -#: mod_muc/mod_muc_room.erl:2956 +#: mod_muc/mod_muc_room.erl:3210 msgid "Make room persistent" msgstr "Rendere la stanza persistente" -#: mod_muc/mod_muc_room.erl:2961 +#: mod_muc/mod_muc_room.erl:3215 msgid "Make room public searchable" msgstr "Rendere la sala visibile al pubblico" -#: mod_muc/mod_muc_room.erl:2964 +#: mod_muc/mod_muc_room.erl:3218 msgid "Make participants list public" msgstr "Rendere pubblica la lista dei partecipanti" -#: mod_muc/mod_muc_room.erl:2967 +#: mod_muc/mod_muc_room.erl:3221 msgid "Make room password protected" msgstr "Rendere la stanza protetta da password" -#: mod_muc/mod_muc_room.erl:2978 +#: mod_muc/mod_muc_room.erl:3232 msgid "Maximum Number of Occupants" msgstr "Numero massimo di occupanti" -#: mod_muc/mod_muc_room.erl:2985 +#: mod_muc/mod_muc_room.erl:3239 msgid "No limit" msgstr "Nessun limite" -#: mod_muc/mod_muc_room.erl:2996 +#: mod_muc/mod_muc_room.erl:3250 msgid "Present real Jabber IDs to" msgstr "Rendere visibile il Jabber ID reale a" -#: mod_muc/mod_muc_room.erl:3004 +#: mod_muc/mod_muc_room.erl:3258 mod_muc/mod_muc_room.erl:3292 msgid "moderators only" msgstr "moderatori soltanto" -#: mod_muc/mod_muc_room.erl:3006 +#: mod_muc/mod_muc_room.erl:3260 mod_muc/mod_muc_room.erl:3294 msgid "anyone" msgstr "tutti" -#: mod_muc/mod_muc_room.erl:3008 +#: mod_muc/mod_muc_room.erl:3262 msgid "Make room members-only" msgstr "Rendere la stanza riservata ai membri" -#: mod_muc/mod_muc_room.erl:3011 +#: mod_muc/mod_muc_room.erl:3265 msgid "Make room moderated" msgstr "Rendere la stanza moderata" -#: mod_muc/mod_muc_room.erl:3014 +#: mod_muc/mod_muc_room.erl:3268 msgid "Default users as participants" msgstr "Definire per default gli utenti come partecipanti" -#: mod_muc/mod_muc_room.erl:3017 +#: mod_muc/mod_muc_room.erl:3271 msgid "Allow users to change the subject" msgstr "Consentire agli utenti di cambiare l'oggetto" -#: mod_muc/mod_muc_room.erl:3020 +#: mod_muc/mod_muc_room.erl:3274 msgid "Allow users to send private messages" msgstr "Consentire agli utenti l'invio di messaggi privati" -#: mod_muc/mod_muc_room.erl:3023 +#: mod_muc/mod_muc_room.erl:3279 +msgid "Allow visitors to send private messages to" +msgstr "Consentire agli ospiti l'invio di messaggi privati a" + +#: mod_muc/mod_muc_room.erl:3290 +msgid "nobody" +msgstr "nessuno" + +#: mod_muc/mod_muc_room.erl:3296 msgid "Allow users to query other users" msgstr "Consentire agli utenti query verso altri utenti" -#: mod_muc/mod_muc_room.erl:3026 +#: mod_muc/mod_muc_room.erl:3299 msgid "Allow users to send invites" msgstr "Consentire agli utenti l'invio di inviti" -#: mod_muc/mod_muc_room.erl:3029 +#: mod_muc/mod_muc_room.erl:3302 msgid "Allow visitors to send status text in presence updates" msgstr "" "Consentire ai visitatori l'invio di testo sullo stato in aggiornamenti sulla " "presenza" -#: mod_muc/mod_muc_room.erl:3032 +#: mod_muc/mod_muc_room.erl:3305 msgid "Allow visitors to change nickname" msgstr "Consentire ai visitatori di cambiare il nickname" -#: mod_muc/mod_muc_room.erl:3038 -msgid "Make room captcha protected" -msgstr "Rendere la stanza protetta da captcha" +#: mod_muc/mod_muc_room.erl:3308 +msgid "Allow visitors to send voice requests" +msgstr "Consentire agli ospiti l'invio di richieste di parola" -#: mod_muc/mod_muc_room.erl:3043 +#: mod_muc/mod_muc_room.erl:3311 +msgid "Minimum interval between voice requests (in seconds)" +msgstr "Intervallo minimo fra due richieste di parola (in secondi)" + +#: mod_muc/mod_muc_room.erl:3317 +msgid "Make room CAPTCHA protected" +msgstr "Rendere la stanza protetta da CAPTCHA" + +#: mod_muc/mod_muc_room.erl:3322 msgid "Exclude Jabber IDs from CAPTCHA challenge" -msgstr "" +msgstr "Escludi degli ID Jabber dal passaggio CAPTCHA" -#: mod_muc/mod_muc_room.erl:3050 +#: mod_muc/mod_muc_room.erl:3329 msgid "Enable logging" msgstr "Abilitare i log" -#: mod_muc/mod_muc_room.erl:3058 +#: mod_muc/mod_muc_room.erl:3337 msgid "You need an x:data capable client to configure room" msgstr "" "Per la configurazione della stanza è necessario un client che supporti x:data" -#: mod_muc/mod_muc_room.erl:3390 +#: mod_muc/mod_muc_room.erl:3694 msgid "Number of occupants" msgstr "Numero di presenti" -#: mod_muc/mod_muc_room.erl:3446 +#: mod_muc/mod_muc_room.erl:3750 msgid "private, " msgstr "privato, " -#: mod_muc/mod_muc_room.erl:3529 +#: mod_muc/mod_muc_room.erl:3799 +msgid "Voice request" +msgstr "Richiesta di parola" + +#: mod_muc/mod_muc_room.erl:3803 +msgid "Either approve or decline the voice request." +msgstr "Approva oppure respingi la richiesta di parola." + +#: mod_muc/mod_muc_room.erl:3809 +msgid "User JID" +msgstr "JID utente" + +#: mod_muc/mod_muc_room.erl:3811 +msgid "Grant voice to this person?" +msgstr "Dare parola a questa persona?" + +#: mod_muc/mod_muc_room.erl:3960 msgid "~s invites you to the room ~s" msgstr "~s ti invita nella stanza ~s" -#: mod_muc/mod_muc_room.erl:3538 +#: mod_muc/mod_muc_room.erl:3969 msgid "the password is" msgstr "la password è" @@ -1008,14 +1070,15 @@ msgid "~s's Offline Messages Queue" msgstr "Coda di ~s messaggi offline" #: mod_offline.erl:563 mod_offline_odbc.erl:411 mod_roster.erl:987 -#: mod_roster_odbc.erl:1092 mod_shared_roster.erl:896 -#: mod_shared_roster.erl:1005 web/ejabberd_web_admin.erl:833 +#: mod_roster_odbc.erl:1104 mod_shared_roster.erl:901 +#: mod_shared_roster.erl:1010 mod_shared_roster_odbc.erl:930 +#: mod_shared_roster_odbc.erl:1039 web/ejabberd_web_admin.erl:833 #: web/ejabberd_web_admin.erl:874 web/ejabberd_web_admin.erl:942 #: web/ejabberd_web_admin.erl:978 web/ejabberd_web_admin.erl:1019 -#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1758 -#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1961 -#: web/ejabberd_web_admin.erl:2030 web/ejabberd_web_admin.erl:2134 -#: web/ejabberd_web_admin.erl:2159 web/ejabberd_web_admin.erl:2247 +#: web/ejabberd_web_admin.erl:1508 web/ejabberd_web_admin.erl:1760 +#: web/ejabberd_web_admin.erl:1931 web/ejabberd_web_admin.erl:1963 +#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2135 +#: web/ejabberd_web_admin.erl:2160 web/ejabberd_web_admin.erl:2248 msgid "Submitted" msgstr "Inviato" @@ -1035,8 +1098,9 @@ msgstr "A" msgid "Packet" msgstr "Pacchetto" -#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:903 -#: web/ejabberd_web_admin.erl:882 web/ejabberd_web_admin.erl:986 +#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:908 +#: mod_shared_roster_odbc.erl:937 web/ejabberd_web_admin.erl:882 +#: web/ejabberd_web_admin.erl:986 msgid "Delete Selected" msgstr "Eliminare gli elementi selezionati" @@ -1052,115 +1116,114 @@ msgstr "Eliminare tutti i messaggi offline" msgid "ejabberd SOCKS5 Bytestreams module" msgstr "Modulo SOCKS5 Bytestreams per ejabberd" -#: mod_pubsub/mod_pubsub.erl:1119 mod_pubsub/mod_pubsub_odbc.erl:928 +#: mod_pubsub/mod_pubsub.erl:1120 mod_pubsub/mod_pubsub_odbc.erl:929 msgid "Publish-Subscribe" msgstr "Pubblicazione-Iscrizione" -#: mod_pubsub/mod_pubsub.erl:1213 mod_pubsub/mod_pubsub_odbc.erl:1024 +#: mod_pubsub/mod_pubsub.erl:1214 mod_pubsub/mod_pubsub_odbc.erl:1025 msgid "ejabberd Publish-Subscribe module" msgstr "Modulo Pubblicazione/Iscrizione (PubSub) per ejabberd" -#: mod_pubsub/mod_pubsub.erl:1496 mod_pubsub/mod_pubsub_odbc.erl:1311 +#: mod_pubsub/mod_pubsub.erl:1497 mod_pubsub/mod_pubsub_odbc.erl:1312 msgid "PubSub subscriber request" msgstr "Richiesta di iscrizione per PubSub" -#: mod_pubsub/mod_pubsub.erl:1498 mod_pubsub/mod_pubsub_odbc.erl:1313 +#: mod_pubsub/mod_pubsub.erl:1499 mod_pubsub/mod_pubsub_odbc.erl:1314 msgid "Choose whether to approve this entity's subscription." msgstr "Scegliere se approvare l'iscrizione per questa entità" -#: mod_pubsub/mod_pubsub.erl:1504 mod_pubsub/mod_pubsub_odbc.erl:1319 +#: mod_pubsub/mod_pubsub.erl:1505 mod_pubsub/mod_pubsub_odbc.erl:1320 msgid "Node ID" msgstr "ID del nodo" -#: mod_pubsub/mod_pubsub.erl:1509 mod_pubsub/mod_pubsub_odbc.erl:1324 +#: mod_pubsub/mod_pubsub.erl:1510 mod_pubsub/mod_pubsub_odbc.erl:1325 msgid "Subscriber Address" msgstr "Indirizzo dell'iscritta/o" -#: mod_pubsub/mod_pubsub.erl:1515 mod_pubsub/mod_pubsub_odbc.erl:1330 +#: mod_pubsub/mod_pubsub.erl:1516 mod_pubsub/mod_pubsub_odbc.erl:1331 msgid "Allow this Jabber ID to subscribe to this pubsub node?" msgstr "Consentire a questo Jabber ID l'iscrizione a questo nodo pubsub?" -#: mod_pubsub/mod_pubsub.erl:3416 mod_pubsub/mod_pubsub_odbc.erl:3229 +#: mod_pubsub/mod_pubsub.erl:3474 mod_pubsub/mod_pubsub_odbc.erl:3287 msgid "Deliver payloads with event notifications" msgstr "Inviare il contenuto del messaggio con la notifica dell'evento" -#: mod_pubsub/mod_pubsub.erl:3417 mod_pubsub/mod_pubsub_odbc.erl:3230 +#: mod_pubsub/mod_pubsub.erl:3475 mod_pubsub/mod_pubsub_odbc.erl:3288 msgid "Deliver event notifications" msgstr "Inviare notifiche degli eventi" -#: mod_pubsub/mod_pubsub.erl:3418 mod_pubsub/mod_pubsub_odbc.erl:3231 +#: mod_pubsub/mod_pubsub.erl:3476 mod_pubsub/mod_pubsub_odbc.erl:3289 msgid "Notify subscribers when the node configuration changes" msgstr "Notificare gli iscritti quando la configurazione del nodo cambia" -#: mod_pubsub/mod_pubsub.erl:3419 mod_pubsub/mod_pubsub_odbc.erl:3232 +#: mod_pubsub/mod_pubsub.erl:3477 mod_pubsub/mod_pubsub_odbc.erl:3290 msgid "Notify subscribers when the node is deleted" msgstr "Notificare gli iscritti quando il nodo è cancellato" -#: mod_pubsub/mod_pubsub.erl:3420 mod_pubsub/mod_pubsub_odbc.erl:3233 +#: mod_pubsub/mod_pubsub.erl:3478 mod_pubsub/mod_pubsub_odbc.erl:3291 msgid "Notify subscribers when items are removed from the node" msgstr "Notificare gli iscritti quando sono eliminati degli elementi dal nodo" -#: mod_pubsub/mod_pubsub.erl:3421 mod_pubsub/mod_pubsub_odbc.erl:3234 +#: mod_pubsub/mod_pubsub.erl:3479 mod_pubsub/mod_pubsub_odbc.erl:3292 msgid "Persist items to storage" msgstr "Conservazione persistente degli elementi" -#: mod_pubsub/mod_pubsub.erl:3422 mod_pubsub/mod_pubsub_odbc.erl:3235 +#: mod_pubsub/mod_pubsub.erl:3480 mod_pubsub/mod_pubsub_odbc.erl:3293 msgid "A friendly name for the node" msgstr "Un nome comodo per il nodo" -#: mod_pubsub/mod_pubsub.erl:3423 mod_pubsub/mod_pubsub_odbc.erl:3236 +#: mod_pubsub/mod_pubsub.erl:3481 mod_pubsub/mod_pubsub_odbc.erl:3294 msgid "Max # of items to persist" msgstr "Numero massimo di elementi da conservare persistentemente" -#: mod_pubsub/mod_pubsub.erl:3424 mod_pubsub/mod_pubsub_odbc.erl:3237 +#: mod_pubsub/mod_pubsub.erl:3482 mod_pubsub/mod_pubsub_odbc.erl:3295 msgid "Whether to allow subscriptions" msgstr "Consentire iscrizioni?" -#: mod_pubsub/mod_pubsub.erl:3425 mod_pubsub/mod_pubsub_odbc.erl:3238 +#: mod_pubsub/mod_pubsub.erl:3483 mod_pubsub/mod_pubsub_odbc.erl:3296 msgid "Specify the access model" msgstr "Specificare il modello di accesso" -#: mod_pubsub/mod_pubsub.erl:3428 mod_pubsub/mod_pubsub_odbc.erl:3241 +#: mod_pubsub/mod_pubsub.erl:3486 mod_pubsub/mod_pubsub_odbc.erl:3299 msgid "Roster groups allowed to subscribe" msgstr "Gruppi roster abilitati alla registrazione" -#: mod_pubsub/mod_pubsub.erl:3429 mod_pubsub/mod_pubsub_odbc.erl:3242 +#: mod_pubsub/mod_pubsub.erl:3487 mod_pubsub/mod_pubsub_odbc.erl:3300 msgid "Specify the publisher model" msgstr "Definire il modello di pubblicazione" -#: mod_pubsub/mod_pubsub.erl:3431 mod_pubsub/mod_pubsub_odbc.erl:3244 +#: mod_pubsub/mod_pubsub.erl:3489 mod_pubsub/mod_pubsub_odbc.erl:3302 msgid "Purge all items when the relevant publisher goes offline" msgstr "" "Cancella tutti gli elementi quando chi li ha pubblicati non è più online" -#: mod_pubsub/mod_pubsub.erl:3432 mod_pubsub/mod_pubsub_odbc.erl:3245 +#: mod_pubsub/mod_pubsub.erl:3490 mod_pubsub/mod_pubsub_odbc.erl:3303 msgid "Specify the event message type" msgstr "Specificare il tipo di messaggio di evento" -#: mod_pubsub/mod_pubsub.erl:3434 mod_pubsub/mod_pubsub_odbc.erl:3247 +#: mod_pubsub/mod_pubsub.erl:3492 mod_pubsub/mod_pubsub_odbc.erl:3305 msgid "Max payload size in bytes" msgstr "Dimensione massima del contenuto del messaggio in byte" -#: mod_pubsub/mod_pubsub.erl:3435 mod_pubsub/mod_pubsub_odbc.erl:3248 +#: mod_pubsub/mod_pubsub.erl:3493 mod_pubsub/mod_pubsub_odbc.erl:3306 msgid "When to send the last published item" msgstr "Quando inviare l'ultimo elemento pubblicato" -#: mod_pubsub/mod_pubsub.erl:3437 mod_pubsub/mod_pubsub_odbc.erl:3250 +#: mod_pubsub/mod_pubsub.erl:3495 mod_pubsub/mod_pubsub_odbc.erl:3308 msgid "Only deliver notifications to available users" msgstr "Inviare le notifiche solamente agli utenti disponibili" -#: mod_pubsub/mod_pubsub.erl:3438 mod_pubsub/mod_pubsub_odbc.erl:3251 +#: mod_pubsub/mod_pubsub.erl:3496 mod_pubsub/mod_pubsub_odbc.erl:3309 msgid "The collections with which a node is affiliated" msgstr "Le collezioni a cui è affiliato un nodo" #: mod_register.erl:193 msgid "The CAPTCHA verification has failed" -msgstr "" +msgstr "La verifica del CAPTCHA ha avuto esito negativo" #: mod_register.erl:220 -#, fuzzy msgid "You need a client that supports x:data and CAPTCHA to register" -msgstr "Per registrare un nickname è necessario un client che supportix:data" +msgstr "La registrazione richiede un client che supporti x:data e CAPTCHA" #: mod_register.erl:226 mod_register.erl:265 msgid "Choose a username and password to register with this server" @@ -1168,139 +1231,136 @@ msgstr "" "Scegliere un nome utente e una password per la registrazione con questo " "server" -#: mod_register.erl:230 mod_vcard.erl:358 mod_vcard_odbc.erl:336 -#: web/ejabberd_web_admin.erl:1516 web/ejabberd_web_admin.erl:1573 +#: mod_register.erl:230 mod_vcard.erl:364 mod_vcard_odbc.erl:342 +#: web/ejabberd_web_admin.erl:1515 web/ejabberd_web_admin.erl:1572 msgid "User" msgstr "Utente" -#: mod_register.erl:251 -#, fuzzy -msgid "Unable to generate a CAPTCHA" -msgstr "Impossibile generare un captcha" - #: mod_register.erl:316 mod_register.erl:361 -#, fuzzy msgid "The password is too weak" -msgstr "la password è" +msgstr "La password è troppo debole" #: mod_register.erl:365 msgid "Users are not allowed to register accounts so quickly" msgstr "Non è consentito agli utenti registrare account così rapidamente" -#: mod_roster.erl:938 mod_roster_odbc.erl:1043 web/ejabberd_web_admin.erl:1699 -#: web/ejabberd_web_admin.erl:1884 web/ejabberd_web_admin.erl:1895 -#: web/ejabberd_web_admin.erl:2218 +#: mod_roster.erl:938 mod_roster_odbc.erl:1055 web/ejabberd_web_admin.erl:1701 +#: web/ejabberd_web_admin.erl:1886 web/ejabberd_web_admin.erl:1897 +#: web/ejabberd_web_admin.erl:2219 msgid "None" msgstr "Nessuno" -#: mod_roster.erl:945 mod_roster_odbc.erl:1050 +#: mod_roster.erl:945 mod_roster_odbc.erl:1062 msgid "Subscription" msgstr "Iscrizione" -#: mod_roster.erl:946 mod_roster_odbc.erl:1051 +#: mod_roster.erl:946 mod_roster_odbc.erl:1063 msgid "Pending" msgstr "Pendente" -#: mod_roster.erl:947 mod_roster_odbc.erl:1052 +#: mod_roster.erl:947 mod_roster_odbc.erl:1064 msgid "Groups" msgstr "Gruppi" -#: mod_roster.erl:974 mod_roster_odbc.erl:1079 +#: mod_roster.erl:974 mod_roster_odbc.erl:1091 msgid "Validate" msgstr "Validare" -#: mod_roster.erl:982 mod_roster_odbc.erl:1087 +#: mod_roster.erl:982 mod_roster_odbc.erl:1099 msgid "Remove" msgstr "Eliminare" -#: mod_roster.erl:985 mod_roster_odbc.erl:1090 +#: mod_roster.erl:985 mod_roster_odbc.erl:1102 msgid "Roster of " msgstr "Lista dei contatti di " -#: mod_roster.erl:988 mod_roster_odbc.erl:1093 mod_shared_roster.erl:897 -#: mod_shared_roster.erl:1006 web/ejabberd_web_admin.erl:834 +#: mod_roster.erl:988 mod_roster_odbc.erl:1105 mod_shared_roster.erl:902 +#: mod_shared_roster.erl:1011 mod_shared_roster_odbc.erl:931 +#: mod_shared_roster_odbc.erl:1040 web/ejabberd_web_admin.erl:834 #: web/ejabberd_web_admin.erl:875 web/ejabberd_web_admin.erl:943 #: web/ejabberd_web_admin.erl:979 web/ejabberd_web_admin.erl:1020 -#: web/ejabberd_web_admin.erl:1510 web/ejabberd_web_admin.erl:1759 -#: web/ejabberd_web_admin.erl:1930 web/ejabberd_web_admin.erl:2135 -#: web/ejabberd_web_admin.erl:2160 +#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1761 +#: web/ejabberd_web_admin.erl:1932 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2161 msgid "Bad format" msgstr "Formato non valido" -#: mod_roster.erl:995 mod_roster_odbc.erl:1100 +#: mod_roster.erl:995 mod_roster_odbc.erl:1112 msgid "Add Jabber ID" msgstr "Aggiungere un Jabber ID (Jabber ID)" -#: mod_roster.erl:1094 mod_roster_odbc.erl:1199 +#: mod_roster.erl:1094 mod_roster_odbc.erl:1211 msgid "Roster" msgstr "Lista dei contatti" -#: mod_shared_roster.erl:852 mod_shared_roster.erl:894 -#: mod_shared_roster.erl:1002 +#: mod_shared_roster.erl:857 mod_shared_roster.erl:899 +#: mod_shared_roster.erl:1007 mod_shared_roster_odbc.erl:886 +#: mod_shared_roster_odbc.erl:928 mod_shared_roster_odbc.erl:1036 msgid "Shared Roster Groups" msgstr "Gruppi di liste di contatti comuni" -#: mod_shared_roster.erl:890 web/ejabberd_web_admin.erl:1366 -#: web/ejabberd_web_admin.erl:2460 +#: mod_shared_roster.erl:895 mod_shared_roster_odbc.erl:924 +#: web/ejabberd_web_admin.erl:1365 web/ejabberd_web_admin.erl:2461 msgid "Add New" msgstr "Aggiungere nuovo" -#: mod_shared_roster.erl:973 +#: mod_shared_roster.erl:978 mod_shared_roster_odbc.erl:1007 msgid "Name:" msgstr "Nome:" -#: mod_shared_roster.erl:978 +#: mod_shared_roster.erl:983 mod_shared_roster_odbc.erl:1012 msgid "Description:" msgstr "Descrizione:" -#: mod_shared_roster.erl:986 +#: mod_shared_roster.erl:991 mod_shared_roster_odbc.erl:1020 msgid "Members:" msgstr "Membri:" -#: mod_shared_roster.erl:994 +#: mod_shared_roster.erl:999 mod_shared_roster_odbc.erl:1028 msgid "Displayed Groups:" msgstr "Gruppi visualizzati:" -#: mod_shared_roster.erl:1003 +#: mod_shared_roster.erl:1008 mod_shared_roster_odbc.erl:1037 msgid "Group " msgstr "Gruppo " -#: mod_shared_roster.erl:1012 web/ejabberd_web_admin.erl:840 -#: web/ejabberd_web_admin.erl:884 web/ejabberd_web_admin.erl:949 -#: web/ejabberd_web_admin.erl:1026 web/ejabberd_web_admin.erl:2015 +#: mod_shared_roster.erl:1017 mod_shared_roster_odbc.erl:1046 +#: web/ejabberd_web_admin.erl:840 web/ejabberd_web_admin.erl:884 +#: web/ejabberd_web_admin.erl:949 web/ejabberd_web_admin.erl:1026 +#: web/ejabberd_web_admin.erl:2017 msgid "Submit" msgstr "Inviare" -#: mod_vcard.erl:165 mod_vcard_ldap.erl:237 mod_vcard_odbc.erl:129 +#: mod_vcard.erl:165 mod_vcard_ldap.erl:238 mod_vcard_odbc.erl:129 msgid "Erlang Jabber Server" msgstr "Erlang Jabber Server" -#: mod_vcard.erl:358 mod_vcard.erl:472 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:448 +#: mod_vcard.erl:364 mod_vcard.erl:478 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:454 msgid "Birthday" msgstr "Compleanno" -#: mod_vcard.erl:358 mod_vcard.erl:474 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:450 +#: mod_vcard.erl:364 mod_vcard.erl:480 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:456 msgid "City" msgstr "Città" -#: mod_vcard.erl:358 mod_vcard.erl:473 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:449 +#: mod_vcard.erl:364 mod_vcard.erl:479 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:455 msgid "Country" msgstr "Paese" -#: mod_vcard.erl:358 mod_vcard.erl:475 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:451 +#: mod_vcard.erl:364 mod_vcard.erl:481 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:457 msgid "Email" msgstr "E-mail" -#: mod_vcard.erl:358 mod_vcard.erl:470 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:446 +#: mod_vcard.erl:364 mod_vcard.erl:476 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:452 msgid "Family Name" msgstr "Cognome" -#: mod_vcard.erl:358 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_odbc.erl:342 msgid "" "Fill in the form to search for any matching Jabber User (Add * to the end of " "field to match substring)" @@ -1308,52 +1368,52 @@ msgstr "" "Riempire il modulo per la ricerca di utenti Jabber corrispondenti ai criteri " "(Aggiungere * alla fine del campo per la ricerca di una sottostringa" -#: mod_vcard.erl:358 mod_vcard.erl:467 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:443 +#: mod_vcard.erl:364 mod_vcard.erl:473 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:449 msgid "Full Name" msgstr "Nome completo" -#: mod_vcard.erl:358 mod_vcard.erl:469 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:445 +#: mod_vcard.erl:364 mod_vcard.erl:475 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:451 msgid "Middle Name" msgstr "Altro nome" -#: mod_vcard.erl:358 mod_vcard.erl:468 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:444 web/ejabberd_web_admin.erl:2004 +#: mod_vcard.erl:364 mod_vcard.erl:474 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:450 web/ejabberd_web_admin.erl:2006 msgid "Name" msgstr "Nome" -#: mod_vcard.erl:358 mod_vcard.erl:476 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:452 +#: mod_vcard.erl:364 mod_vcard.erl:482 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:458 msgid "Organization Name" msgstr "Nome dell'organizzazione" -#: mod_vcard.erl:358 mod_vcard.erl:477 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:453 +#: mod_vcard.erl:364 mod_vcard.erl:483 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:459 msgid "Organization Unit" msgstr "Unità dell'organizzazione" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "Search users in " msgstr "Cercare utenti in " -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "You need an x:data capable client to search" msgstr "Per effettuare ricerche è necessario un client che supporti x:data" -#: mod_vcard.erl:383 mod_vcard_ldap.erl:483 mod_vcard_odbc.erl:361 +#: mod_vcard.erl:389 mod_vcard_ldap.erl:487 mod_vcard_odbc.erl:367 msgid "vCard User Search" msgstr "Ricerca di utenti per vCard" -#: mod_vcard.erl:439 mod_vcard_ldap.erl:537 mod_vcard_odbc.erl:415 +#: mod_vcard.erl:445 mod_vcard_ldap.erl:541 mod_vcard_odbc.erl:421 msgid "ejabberd vCard module" msgstr "Modulo vCard per ejabberd" -#: mod_vcard.erl:463 mod_vcard_ldap.erl:547 mod_vcard_odbc.erl:439 +#: mod_vcard.erl:469 mod_vcard_ldap.erl:551 mod_vcard_odbc.erl:445 msgid "Search Results for " msgstr "Risultati della ricerca per " -#: mod_vcard_ldap.erl:458 +#: mod_vcard_ldap.erl:462 msgid "Fill in fields to search for any matching Jabber User" msgstr "" "Riempire i campi per la ricerca di utenti Jabber corrispondenti ai criteri" @@ -1415,7 +1475,7 @@ msgstr "Mostrare la tabella normale" msgid "Show Integral Table" msgstr "Mostrare la tabella integrale" -#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1937 +#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1939 msgid "Statistics" msgstr "Statistiche" @@ -1427,116 +1487,116 @@ msgstr "Non trovato" msgid "Node not found" msgstr "Nodo non trovato" -#: web/ejabberd_web_admin.erl:1461 +#: web/ejabberd_web_admin.erl:1460 msgid "Host" msgstr "Host" -#: web/ejabberd_web_admin.erl:1462 +#: web/ejabberd_web_admin.erl:1461 msgid "Registered Users" msgstr "Utenti registrati" -#: web/ejabberd_web_admin.erl:1574 +#: web/ejabberd_web_admin.erl:1573 msgid "Offline Messages" msgstr "Messaggi offline" -#: web/ejabberd_web_admin.erl:1575 web/ejabberd_web_admin.erl:1765 +#: web/ejabberd_web_admin.erl:1574 web/ejabberd_web_admin.erl:1767 msgid "Last Activity" msgstr "Ultima attività" -#: web/ejabberd_web_admin.erl:1657 web/ejabberd_web_admin.erl:1673 +#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 msgid "Registered Users:" msgstr "Utenti registrati:" -#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 -#: web/ejabberd_web_admin.erl:2191 +#: web/ejabberd_web_admin.erl:1661 web/ejabberd_web_admin.erl:1677 +#: web/ejabberd_web_admin.erl:2192 msgid "Online Users:" msgstr "Utenti connessi:" -#: web/ejabberd_web_admin.erl:1661 +#: web/ejabberd_web_admin.erl:1663 msgid "Outgoing s2s Connections:" msgstr "Connessioni s2s in uscita:" -#: web/ejabberd_web_admin.erl:1663 +#: web/ejabberd_web_admin.erl:1665 msgid "Outgoing s2s Servers:" msgstr "Server s2s in uscita" -#: web/ejabberd_web_admin.erl:1732 web/mod_register_web.erl:175 +#: web/ejabberd_web_admin.erl:1734 web/mod_register_web.erl:175 #: web/mod_register_web.erl:372 web/mod_register_web.erl:381 #: web/mod_register_web.erl:411 msgid "Change Password" msgstr "Modificare la password" -#: web/ejabberd_web_admin.erl:1756 +#: web/ejabberd_web_admin.erl:1758 msgid "User " msgstr "Utente " -#: web/ejabberd_web_admin.erl:1763 +#: web/ejabberd_web_admin.erl:1765 msgid "Connected Resources:" msgstr "Risorse connesse:" -#: web/ejabberd_web_admin.erl:1764 web/mod_register_web.erl:227 +#: web/ejabberd_web_admin.erl:1766 web/mod_register_web.erl:227 #: web/mod_register_web.erl:519 msgid "Password:" msgstr "Password:" -#: web/ejabberd_web_admin.erl:1826 +#: web/ejabberd_web_admin.erl:1828 msgid "No Data" msgstr "Nessuna informazione" -#: web/ejabberd_web_admin.erl:1904 +#: web/ejabberd_web_admin.erl:1906 msgid "Nodes" msgstr "Nodi" -#: web/ejabberd_web_admin.erl:1927 web/ejabberd_web_admin.erl:1949 +#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1951 msgid "Node " msgstr "Nodo " -#: web/ejabberd_web_admin.erl:1936 +#: web/ejabberd_web_admin.erl:1938 msgid "Listened Ports" msgstr "Porte in ascolto" -#: web/ejabberd_web_admin.erl:1938 web/ejabberd_web_admin.erl:2259 -#: web/ejabberd_web_admin.erl:2447 +#: web/ejabberd_web_admin.erl:1940 web/ejabberd_web_admin.erl:2260 +#: web/ejabberd_web_admin.erl:2448 msgid "Update" msgstr "Aggiornare" -#: web/ejabberd_web_admin.erl:1941 web/ejabberd_web_admin.erl:2568 +#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2569 msgid "Restart" msgstr "Riavviare" -#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2570 +#: web/ejabberd_web_admin.erl:1945 web/ejabberd_web_admin.erl:2571 msgid "Stop" msgstr "Arrestare" -#: web/ejabberd_web_admin.erl:1957 +#: web/ejabberd_web_admin.erl:1959 msgid "RPC Call Error" msgstr "Errore di chiamata RPC" -#: web/ejabberd_web_admin.erl:1998 +#: web/ejabberd_web_admin.erl:2000 msgid "Database Tables at " msgstr "Tabelle del database su " -#: web/ejabberd_web_admin.erl:2005 +#: web/ejabberd_web_admin.erl:2007 msgid "Storage Type" msgstr "Tipo di conservazione" -#: web/ejabberd_web_admin.erl:2006 +#: web/ejabberd_web_admin.erl:2008 msgid "Elements" msgstr "Elementi" -#: web/ejabberd_web_admin.erl:2007 +#: web/ejabberd_web_admin.erl:2009 msgid "Memory" msgstr "Memoria" -#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2032 web/ejabberd_web_admin.erl:2137 msgid "Error" msgstr "Errore" -#: web/ejabberd_web_admin.erl:2033 +#: web/ejabberd_web_admin.erl:2034 msgid "Backup of " msgstr "Salvataggio di " -#: web/ejabberd_web_admin.erl:2035 +#: web/ejabberd_web_admin.erl:2036 msgid "" "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 " @@ -1546,183 +1606,183 @@ msgstr "" "interno Mnesia. Se si sta utilizzando il modulo ODBC, è necessario salvare " "anche il proprio database SQL separatamente." -#: web/ejabberd_web_admin.erl:2040 +#: web/ejabberd_web_admin.erl:2041 msgid "Store binary backup:" msgstr "Conservare un salvataggio binario:" -#: web/ejabberd_web_admin.erl:2044 web/ejabberd_web_admin.erl:2051 -#: web/ejabberd_web_admin.erl:2059 web/ejabberd_web_admin.erl:2066 -#: web/ejabberd_web_admin.erl:2073 web/ejabberd_web_admin.erl:2080 -#: web/ejabberd_web_admin.erl:2087 web/ejabberd_web_admin.erl:2095 -#: web/ejabberd_web_admin.erl:2102 web/ejabberd_web_admin.erl:2109 +#: web/ejabberd_web_admin.erl:2045 web/ejabberd_web_admin.erl:2052 +#: web/ejabberd_web_admin.erl:2060 web/ejabberd_web_admin.erl:2067 +#: web/ejabberd_web_admin.erl:2074 web/ejabberd_web_admin.erl:2081 +#: web/ejabberd_web_admin.erl:2088 web/ejabberd_web_admin.erl:2096 +#: web/ejabberd_web_admin.erl:2103 web/ejabberd_web_admin.erl:2110 msgid "OK" msgstr "OK" -#: web/ejabberd_web_admin.erl:2047 +#: web/ejabberd_web_admin.erl:2048 msgid "Restore binary backup immediately:" msgstr "Recuperare un salvataggio binario adesso:" -#: web/ejabberd_web_admin.erl:2055 +#: web/ejabberd_web_admin.erl:2056 msgid "" "Restore binary backup after next ejabberd restart (requires less memory):" msgstr "" "Recuperare un salvataggio binario dopo il prossimo riavvio di ejabberd " "(necessita di meno memoria):" -#: web/ejabberd_web_admin.erl:2062 +#: web/ejabberd_web_admin.erl:2063 msgid "Store plain text backup:" msgstr "Conservare un salvataggio come semplice testo:" -#: web/ejabberd_web_admin.erl:2069 +#: web/ejabberd_web_admin.erl:2070 msgid "Restore plain text backup immediately:" msgstr "Recuperare un salvataggio come semplice testo adesso:" -#: web/ejabberd_web_admin.erl:2076 +#: web/ejabberd_web_admin.erl:2077 msgid "Import users data from a PIEFXIS file (XEP-0227):" msgstr "Importare i dati utenti da un file PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2083 +#: web/ejabberd_web_admin.erl:2084 msgid "Export data of all users in the server to PIEFXIS files (XEP-0227):" msgstr "" "Esportare i dati di tutti gli utenti nel server in file PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2090 +#: web/ejabberd_web_admin.erl:2091 msgid "Export data of users in a host to PIEFXIS files (XEP-0227):" msgstr "Esportare i dati degli utenti di un host in file PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2098 +#: web/ejabberd_web_admin.erl:2099 msgid "Import user data from jabberd14 spool file:" msgstr "Importare i dati utente da file di spool di jabberd14:" -#: web/ejabberd_web_admin.erl:2105 +#: web/ejabberd_web_admin.erl:2106 msgid "Import users data from jabberd14 spool directory:" msgstr "Importare i dati utenti da directory di spool di jabberd14:" -#: web/ejabberd_web_admin.erl:2131 +#: web/ejabberd_web_admin.erl:2132 msgid "Listened Ports at " msgstr "Porte in ascolto su " -#: web/ejabberd_web_admin.erl:2156 +#: web/ejabberd_web_admin.erl:2157 msgid "Modules at " msgstr "Moduli su " -#: web/ejabberd_web_admin.erl:2182 +#: web/ejabberd_web_admin.erl:2183 msgid "Statistics of ~p" msgstr "Statistiche di ~p" -#: web/ejabberd_web_admin.erl:2185 +#: web/ejabberd_web_admin.erl:2186 msgid "Uptime:" msgstr "Tempo dall'avvio:" -#: web/ejabberd_web_admin.erl:2188 +#: web/ejabberd_web_admin.erl:2189 msgid "CPU Time:" msgstr "Tempo CPU:" -#: web/ejabberd_web_admin.erl:2194 +#: web/ejabberd_web_admin.erl:2195 msgid "Transactions Committed:" msgstr "Transazioni avvenute:" -#: web/ejabberd_web_admin.erl:2197 +#: web/ejabberd_web_admin.erl:2198 msgid "Transactions Aborted:" msgstr "Transazioni abortite:" -#: web/ejabberd_web_admin.erl:2200 +#: web/ejabberd_web_admin.erl:2201 msgid "Transactions Restarted:" msgstr "Transazioni riavviate:" -#: web/ejabberd_web_admin.erl:2203 +#: web/ejabberd_web_admin.erl:2204 msgid "Transactions Logged:" msgstr "Transazioni con log:" -#: web/ejabberd_web_admin.erl:2245 +#: web/ejabberd_web_admin.erl:2246 msgid "Update " msgstr "Aggiornare " -#: web/ejabberd_web_admin.erl:2253 +#: web/ejabberd_web_admin.erl:2254 msgid "Update plan" msgstr "Piano di aggiornamento" -#: web/ejabberd_web_admin.erl:2254 +#: web/ejabberd_web_admin.erl:2255 msgid "Modified modules" msgstr "Moduli modificati" -#: web/ejabberd_web_admin.erl:2255 +#: web/ejabberd_web_admin.erl:2256 msgid "Update script" msgstr "Script di aggiornamento" -#: web/ejabberd_web_admin.erl:2256 +#: web/ejabberd_web_admin.erl:2257 msgid "Low level update script" msgstr "Script di aggiornamento di basso livello" -#: web/ejabberd_web_admin.erl:2257 +#: web/ejabberd_web_admin.erl:2258 msgid "Script check" msgstr "Verifica dello script" -#: web/ejabberd_web_admin.erl:2425 +#: web/ejabberd_web_admin.erl:2426 msgid "Port" msgstr "Porta" -#: web/ejabberd_web_admin.erl:2426 +#: web/ejabberd_web_admin.erl:2427 msgid "IP" msgstr "IP" -#: web/ejabberd_web_admin.erl:2427 +#: web/ejabberd_web_admin.erl:2428 msgid "Protocol" msgstr "Protocollo" -#: web/ejabberd_web_admin.erl:2428 web/ejabberd_web_admin.erl:2555 +#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 msgid "Module" msgstr "Modulo" -#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 +#: web/ejabberd_web_admin.erl:2430 web/ejabberd_web_admin.erl:2557 msgid "Options" msgstr "Opzioni" -#: web/ejabberd_web_admin.erl:2449 +#: web/ejabberd_web_admin.erl:2450 msgid "Delete" msgstr "Eliminare" -#: web/ejabberd_web_admin.erl:2578 +#: web/ejabberd_web_admin.erl:2579 msgid "Start" msgstr "Avviare" #: web/mod_register_web.erl:104 msgid "Your Jabber account was successfully created." -msgstr "" +msgstr "La creazione del tuo account Jabber è andata a buon fine." #: web/mod_register_web.erl:107 msgid "There was an error creating the account: " -msgstr "" +msgstr "Si è verificato un errore nella creazione dell'account: " #: web/mod_register_web.erl:115 msgid "Your Jabber account was successfully deleted." -msgstr "" +msgstr "La cancellazione del tuo account Jabber è andata a buon fine." #: web/mod_register_web.erl:118 msgid "There was an error deleting the account: " -msgstr "" +msgstr "Si è verificato un errore nella cancellazione dell'account: " #: web/mod_register_web.erl:128 msgid "The password of your Jabber account was successfully changed." -msgstr "" +msgstr "Il cambio di password del tuo account Jabber è andato a buon fine." #: web/mod_register_web.erl:131 msgid "There was an error changing the password: " -msgstr "" +msgstr "Si è verificato un errore nel cambio di password: " #: web/mod_register_web.erl:163 web/mod_register_web.erl:172 msgid "Jabber Account Registration" -msgstr "" +msgstr "Registrazione account Jabber" #: web/mod_register_web.erl:174 web/mod_register_web.erl:192 #: web/mod_register_web.erl:201 msgid "Register a Jabber account" -msgstr "" +msgstr "Registra un account Jabber" #: web/mod_register_web.erl:176 web/mod_register_web.erl:493 #: web/mod_register_web.erl:502 msgid "Unregister a Jabber account" -msgstr "" +msgstr "Elimina un account Jabber" #: web/mod_register_web.erl:203 msgid "" @@ -1730,42 +1790,49 @@ msgid "" "(Jabber IDentifier) will be of the form: username@server. Please read " "carefully the instructions to fill correctly the fields." msgstr "" +"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." #: web/mod_register_web.erl:212 web/mod_register_web.erl:386 #: web/mod_register_web.erl:509 -#, fuzzy msgid "Username:" -msgstr "Nome utente IRC" +msgstr "Nome utente:" #: web/mod_register_web.erl:217 msgid "This is case insensitive: macbeth is the same that MacBeth and Macbeth." msgstr "" +"Non fa differenza fra minuscolo e maiuscolo: macbeth, MacBeth e Macbeth si " +"equivalgono." #: web/mod_register_web.erl:218 msgid "Characters not allowed:" -msgstr "" +msgstr "Caratteri non consentiti:" #: web/mod_register_web.erl:222 web/mod_register_web.erl:391 #: web/mod_register_web.erl:514 -#, fuzzy msgid "Server:" -msgstr "Server ~b" +msgstr "Server:" #: web/mod_register_web.erl:232 msgid "" "Don't tell your password to anybody, not even the administrators of the " "Jabber server." msgstr "" +"Non comunicare la tua password a nessuno, neppure agli amministratori del " +"server Jabber." #: web/mod_register_web.erl:234 msgid "You can later change your password using a Jabber client." -msgstr "" +msgstr "Potrai in seguito cambiare la password utilizzando un client Jabber." #: web/mod_register_web.erl:235 msgid "" "Some Jabber clients can store your password in your computer. Use that " "feature only if you trust your computer is safe." msgstr "" +"Alcuni client Jabber possono conservare la password nel tuo computer. " +"Utilizza tale funzione soltanto se ritieni che il tuo computer sia sicuro." #: web/mod_register_web.erl:237 msgid "" @@ -1773,35 +1840,36 @@ msgid "" "Jabber there isn't an automated way to recover your password if you forget " "it." msgstr "" +"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." #: web/mod_register_web.erl:242 web/mod_register_web.erl:406 -#, fuzzy msgid "Password Verification:" -msgstr "Verifica della password" +msgstr "Verifica della password:" #: web/mod_register_web.erl:250 -#, fuzzy msgid "Register" -msgstr "Lista dei contatti" +msgstr "Registra" #: web/mod_register_web.erl:396 -#, fuzzy msgid "Old Password:" -msgstr "Password:" +msgstr "Vecchia password:" #: web/mod_register_web.erl:401 -#, fuzzy msgid "New Password:" -msgstr "Password:" +msgstr "Nuova password:" #: web/mod_register_web.erl:504 msgid "This page allows to unregister a Jabber account in this Jabber server." msgstr "" +"Questa pagina consente di eliminare un account Jabber da questo server " +"Jabber." #: web/mod_register_web.erl:524 msgid "Unregister" -msgstr "" +msgstr "Elimina" #, fuzzy -#~ msgid "Captcha test failed" -#~ msgstr "Il captcha è valido." +#~ msgid "CAPTCHA test failed" +#~ msgstr "Il CAPTCHA è valido." diff --git a/src/msgs/ja.msg b/src/msgs/ja.msg index d32cf1e66..851e305aa 100644 --- a/src/msgs/ja.msg +++ b/src/msgs/ja.msg @@ -15,16 +15,18 @@ {"A friendly name for the node","ノードのフレンドリネーム"}. {"All activity","すべて"}. {"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 send invites","ユーザーによる招待を許可"}. {"Allow users to send private messages","ユーザーによるプライベートメッセージの送信を許可"}. -{"Allow visitors to change nickname","ビジターのニックネームの変更を許可"}. -{"Allow visitors to send status text in presence updates","ビジターによるプレゼンス更新のステータス文の送信を許可"}. +{"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 voice requests","傍聴者による発言権の要求を許可"}. {"All Users","全ユーザー"}. {"Announcements","アナウンス"}. -{"anyone","誰でも"}. -{"A password is required to enter this room","チャットルームに入るにはパスワードが必要です"}. +{"anyone","誰にでも"}. +{"A password is required to enter this room","この談話室に入るにはパスワードが必要です"}. {"April","4月"}. {"August","8月"}. {"Backup","バックアップ"}. @@ -33,27 +35,27 @@ {"Backup to File at ","ファイルにバックアップ: "}. {"Bad format","不正なフォーマット"}. {"Birthday","誕生日"}. -{"CAPTCHA web page","CAPTCHA web ページ"}. +{"CAPTCHA web page","CAPTCHA ウェブページ"}. {"Change Password","パスワードを変更"}. {"Change User Password","パスワードを変更"}. {"Characters not allowed:","使用できない文字:"}. -{"Chatroom configuration modified","チャットルームの設定が変更されました"}. -{"Chatroom is created","チャットルームを作りました"}. -{"Chatroom is destroyed","チャットルームを削除しました"}. -{"Chatroom is started","チャットルームを開始しました"}. -{"Chatroom is stopped","チャットルームを停止しました"}. -{"Chatrooms","チャットルーム"}. +{"Chatroom configuration modified","談話室の設定が変更されました"}. +{"Chatroom is created","談話室を作りました"}. +{"Chatroom is destroyed","談話室を削除しました"}. +{"Chatroom is started","談話室を開始しました"}. +{"Chatroom is stopped","談話室を停止しました"}. +{"Chatrooms","談話室"}. {"Choose a username and password to register with this server","サーバーに登録するユーザー名とパスワードを選択してください"}. {"Choose modules to stop","停止するモジュールを選択"}. {"Choose storage type of tables","テーブルのストレージタイプを選択"}. {"Choose whether to approve this entity's subscription.","このエントリを承認するかどうかを選択してください"}. {"City","都道府県"}. {"Commands","コマンド"}. -{"Conference room does not exist","カンファレンスルームは存在しません"}. -{"Configuration of room ~s","チャットルーム ~s の設定"}. +{"Conference room does not exist","会議室は存在しません"}. +{"Configuration of room ~s","談話室 ~s の設定"}. {"Configuration","設定"}. {"Connected Resources:","接続リソース:"}. -{"Connections parameters","接続パラメータ"}. +{"Connections parameters","接続パラメーター"}. {"Country","国"}. {"CPU Time:","CPU時間:"}. {"Database","データーベース"}. @@ -75,12 +77,13 @@ {"Dump Backup to Text File at ","テキストファイルにバックアップ: "}. {"Dump to Text File","テキストファイルに出力"}. {"Edit Properties","プロパティを編集"}. +{"Either approve or decline the voice request.","発言権の要求を承認または却下します。"}. {"ejabberd IRC module","ejabberd IRC module"}. {"ejabberd MUC module","ejabberd MUC module"}. -{"ejabberd Publish-Subscribe module","ejabberd Publish-Subscribe module"}. -{"ejabberd SOCKS5 Bytestreams module","ejabberd SOCKS5 Bytestreams module"}. -{"ejabberd vCard module","ejabberd vCard module"}. -{"ejabberd Web Admin","ejabberd Web 管理"}. +{"ejabberd Publish-Subscribe module","ejabberd Publish-Subscribe モジュール"}. +{"ejabberd SOCKS5 Bytestreams module","ejabberd SOCKS5 Bytestreams モジュール"}. +{"ejabberd vCard module","ejabberd vCard モジュール"}. +{"ejabberd Web Admin","ejabberd ウェブ管理"}. {"Elements","要素"}. {"Email","メールアドレス"}. {"Enable logging","ロギングを有効"}. @@ -98,12 +101,14 @@ {"Erlang Jabber Server","Erlang Jabber Server"}. {"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\"}]."}. +{"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 users in a host to PIEFXIS files (XEP-0227):","ホストのユーザーデータを PIEFXIS ファイルにエクスポート (XEP-0227):"}. +{"Failed to extract JID from your voice request approval","発言権要求の承認から JID を取り出すことに失敗しました"}. {"Family Name","姓"}. {"February","2月"}. -{"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 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 を検索してください (* を使用すると部分文字列にマッチします)"}. {"Friday","金曜日"}. {"From ~s","差出人 ~s"}. {"From","差出人"}. @@ -113,16 +118,17 @@ {"Get User Last Login Time","最終ログイン時間を取得"}. {"Get User Password","パスワードを取得"}. {"Get User Statistics","ユーザー統計を取得"}. +{"Grant voice to this person?","この人に発言権を与えますか ?"}. {"Group ","グループ"}. {"Groups","グループ"}. {"has been banned","はバンされました"}. {"has been kicked","はキックされました"}. {"has been kicked because of an affiliation change","は分掌が変更されたためキックされました"}. {"has been kicked because of a system shutdown","はシステムシャットダウンのためキックされました"}. -{"has been kicked because the room has been changed to members-only","はチャットルームのメンバーのみに変更されたためキックされました"}. -{" has set the subject to: "," は件名を設定しました: "}. +{"has been kicked because the room has been changed to members-only","は談話室がメンバー制に変更されたためキックされました"}. +{" has set the subject to: "," は題を設定しました: "}. {"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、パスワードは空になっています。"}. {"Import Directory","ディレクトリインポート"}. {"Import File","ファイルからインポート"}. @@ -136,7 +142,7 @@ {"Incorrect password","パスワードが違います"}. {"Invalid affiliation: ~s","無効な分掌です: ~s"}. {"Invalid role: ~s","無効な役です: ~s"}. -{"IP addresses","IPアドレス"}. +{"IP addresses","IP アドレス"}. {"IP","IP"}. {"IRC channel (don't put the first #)","IRC チャンネル (先頭に#は不要)"}. {"IRC server","IRC サーバー"}. @@ -146,14 +152,14 @@ {"IRC Username","IRC ユーザー名"}. {"is now known as","は名前を変更しました: "}. {"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","プライベートメッセージを送信することはできません"}. {"Jabber Account Registration","Jabber アカウント登録"}. {"Jabber ID","Jabber ID"}. {"Jabber ID ~s is invalid","Jabber ID ~s は無効です"}. {"January","1月"}. {"Join IRC channel","IRC チャンネルに参加"}. -{"joins the room","がチャットルームに参加しました"}. +{"joins the room","が談話室に参加しました"}. {"Join the IRC channel here.","この IRC チャンネルに参加します。"}. {"Join the IRC channel in this Jabber ID: ~s","Jabber ID: ~s でこの IRC チャンネルに参加"}. {"July","7月"}. @@ -162,31 +168,32 @@ {"Last login","最終ログイン"}. {"Last month","先月"}. {"Last year","去年"}. -{"leaves the room","がチャットルームから退出しました"}. +{"leaves the room","が談話室から退出しました"}. {"Listened Ports at ","Listen ポート "}. -{"Listened Ports","Listenポート"}. +{"Listened Ports","Listen ポート"}. {"List of modules to start","起動モジュールの一覧"}. {"Low level update script","低レベル更新スクリプト"}. {"Make participants list public","参加者一覧を公開"}. -{"Make room captcha protected","チャットルームを CAPTCHA で保護"}. -{"Make room members-only","チャットルームをメンバーのみに制限"}. -{"Make room moderated","チャットルームをモデレート化"}. -{"Make room password protected","チャットルームにパスワードを設定"}. -{"Make room persistent","チャットルームを永続化"}. -{"Make room public searchable","チャットルームを検索可"}. +{"Make room CAPTCHA protected","談話室を CAPTCHA で保護"}. +{"Make room members-only","談話室をメンバーのみに制限"}. +{"Make room moderated","談話室をモデレート化"}. +{"Make room password protected","談話室をパスワードで保護"}. +{"Make room persistent","談話室を永続化"}. +{"Make room public searchable","談話室を検索可"}. {"March","3月"}. {"Maximum Number of Occupants","最大在室者数"}. {"Max # of items to persist","アイテムの最大保存数"}. {"Max payload size in bytes","最大ぺイロードサイズ (byte)"}. {"May","5月"}. {"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 ではパスワードのリカバリを自動的に行うことはできません。"}. {"Memory","メモリ"}. {"Message body","本文"}. {"Middle Name","ミドルネーム"}. +{"Minimum interval between voice requests (in seconds)","発言権の要求の最小時間間隔 (秒)"}. {"Moderator privileges required","モデレーター権限が必要です"}. -{"moderators only","モデレーターのみ"}. +{"moderators only","モデレーターにのみ"}. {"Modified modules","変更されたモジュール"}. {"Module","モジュール"}. {"Modules","モジュール"}. @@ -198,8 +205,9 @@ {"New Password:","新しいパスワード:"}. {"Nickname","ニックネーム"}. {"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","アナウンスメッセージはありませんでした"}. +{"nobody","誰にも許可しない"}. {"No Data","データなし"}. {"Node ","ノード "}. {"Node ID","ノードID"}. @@ -225,10 +233,11 @@ {"Online Users:","オンラインユーザー:"}. {"Online Users","オンラインユーザー"}. {"Only deliver notifications to available users","有効なユーザーにのみ告知を送信する"}. -{"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 occupants are allowed to send messages to the conference","在室者のみがカンファレンスにメッセージを送ることができます"}. -{"Only occupants are allowed to send queries to the conference","在室者のみがカンファレンスにクエリーを送信することができます"}. +{"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 can approve voice requests","モデレーターだけが発言権の要求を承認できます"}. +{"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","サービス管理者のみがサービスメッセージを送信できます"}. {"Options","オプション"}. {"Organization Name","会社名"}. @@ -236,7 +245,7 @@ {"Outgoing s2s Connections:","外向き s2s コネクション:"}. {"Outgoing s2s Connections","外向き s2s コネクション"}. {"Outgoing s2s Servers:","外向き s2s サービス:"}. -{"Owner privileges required","オーナー権限が必要です"}. +{"Owner privileges required","主宰者の権限が必要です"}. {"Packet","パケット"}. {"Password:","パスワード"}. {"Password","パスワード"}. @@ -250,6 +259,7 @@ {"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 モジュールを使用している場合は、SQL データーベースのバックアップを別に行う必要があります。"}. +{"Please, wait for a while before sending new voice request","新しい発言権の要求を送るまで少し間をおいてください"}. {"Pong","Pong"}. {"Port","ポート"}. {"Port ~b","ポート ~b"}. @@ -259,12 +269,12 @@ {"Publish-Subscribe","Publish-Subscribe"}. {"PubSub subscriber request","PubSub 購読者のリクエスト"}. {"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 copy","RAMコピー"}. +{"RAM copy","RAM コピー"}. {"Raw","Raw"}. {"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 アカウントを登録"}. {"Registered Users:","登録ユーザー:"}. {"Registered Users","登録ユーザー"}. @@ -283,11 +293,11 @@ {"Restore binary backup after next ejabberd restart (requires less memory):","ejabberd の再起動時にバイナリバックアップからリストア (メモリ少):"}. {"Restore binary backup immediately:","直ちにバイナリバックアップからリストア:"}. {"Restore plain text backup immediately:","直ちにプレーンテキストバックアップからリストア:"}. -{"Room Configuration","チャットルーム設定"}. -{"Room creation is denied by service policy","サービスポリシーによってチャットルームの作成が禁止されています"}. -{"Room description","チャットルームの説明"}. -{"Room Occupants","在室者の数"}. -{"Room title","チャットルームタイトル"}. +{"Room Configuration","談話室の設定"}. +{"Room creation is denied by service policy","サービスポリシーによって談話室の作成が禁止されています"}. +{"Room description","談話室の説明"}. +{"Room Occupants","在室者"}. +{"Room title","談話室のタイトル"}. {"Roster groups allowed to subscribe","名簿グループは購読を許可しました"}. {"Roster of ","名簿: "}. {"Roster size","名簿サイズ"}. @@ -309,11 +319,11 @@ {"Set message of the day and send to online users","お知らせメッセージを設定し、オンラインユーザーに送信"}. {"Set message of the day on all hosts and send to online users","全ホストのお知らせメッセージを設定し、オンラインユーザーに送信"}. {"Shared Roster Groups","共有名簿グループ"}. -{"Show Integral Table","Integral テーブルを表示"}. -{"Show Ordinary Table","Ordinary テーブルを表示"}. +{"Show Integral Table","累積の表を表示"}. +{"Show Ordinary Table","通常の表を表示"}. {"Shut Down Service","サービスを停止"}. -{"~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 クライアントはコンピューターにあなたのパスワードを記憶できます。この機能を使用する場合、コンピューターが安全であることを確認してください。"}. +{"~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 クライアントはコンピューターにパスワードを記憶できます。コンピューターが安全であると信頼できる場合にのみ、この機能を使用してください。"}. {"Specify the access model","アクセスモデルを設定する"}. {"Specify the event message type","イベントメッセージ種別を設定"}. {"Specify the publisher model","公開モデルを指定する"}. @@ -330,15 +340,15 @@ {"Storage Type","ストレージタイプ"}. {"Store binary backup:","バイナリバックアップを保存:"}. {"Store plain text backup:","プレーンテキストバックアップを保存:"}. -{"Subject","件名"}. +{"Subject","題"}. {"Submitted","送信完了"}. {"Submit","送信"}. {"Subscriber Address","購読者のアドレス"}. {"Subscription","認可"}. {"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","ニックネームはほかの人によって登録されています"}. -{"The captcha is valid.","CAPTCHA は有効です。"}. +{"The CAPTCHA is valid.","CAPTCHA は有効です。"}. {"The CAPTCHA verification has failed","CAPTCHA 検証は失敗しました"}. {"The collections with which a node is affiliated","提携されたノードの集合です"}. {"the password is","パスワードは"}. @@ -348,15 +358,16 @@ {"There was an error creating 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 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 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 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 presence","エラープレゼンスを送信したため、この参加者はキックされました"}. -{"This room is not anonymous","このチャットルームは非匿名です"}. +{"This room is not anonymous","この談話室は非匿名です"}. {"Thursday","木曜日"}. {"Time delay","遅延時間"}. {"Time","時間"}. +{"Too many CAPTCHA requests","CAPTCHA 要求が多すぎます"}. {"To ~s","宛先 ~s"}. {"To","宛先"}. {"Traffic rate limit is exceeded","トラフィックレートの制限を超えました"}. @@ -365,8 +376,7 @@ {"Transactions Logged:","トランザクションのログ: "}. {"Transactions Restarted:","トランザクションの再起動:"}. {"Tuesday","火曜日"}. -{"Unable to generate a captcha","CAPTCHA を生成することができません"}. -{"Unable to generate a CAPTCHA","CAPTCHA を生成できませんでした"}. +{"Unable to generate a CAPTCHA","CAPTCHA を生成できません"}. {"Unauthorized","認証されていません"}. {"Unregister a Jabber account","Jabber アカウントを削除"}. {"Unregister","削除"}. @@ -380,29 +390,32 @@ {"Use of STARTTLS required","STARTTLS の使用が必要です"}. {"User ","ユーザー "}. {"User","ユーザー"}. +{"User JID","ユーザー JID"}. {"User Management","ユーザー管理"}. {"Username:","ユーザー名:"}. {"Users","ユーザー"}. -{"Users are not allowed to register accounts so quickly","早すぎるユーザーアカウント登録は許可されていません"}. +{"Users are not allowed to register accounts so quickly","それほど速くアカウントを登録することはできません"}. {"Users Last Activity","ユーザーの活動履歴"}. {"Validate","検証"}. {"vCard User Search","vCard ユーザー検索"}. {"Virtual Hosts","ヴァーチャルホスト"}. -{"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 change their nicknames in this room","傍聴者はこの談話室でニックネームを変更することはできません"}. +{"Visitors are not allowed to send messages to all occupants","傍聴者はすべての在室者にメッセージを送信することはできません"}. +{"Voice requests are disabled in this conference","この会議では、発言権の要求はできません"}. +{"Voice request","発言権を要求"}. {"Wednesday","水曜日"}. {"When to send the last published item","最後の公開アイテムを送信するタイミングで"}. {"Whether to allow subscriptions","購読を許可するかどうか"}. -{"You can later change your password using a Jabber client.","あなたは後から Jabber クライアントを使用してパスワードを変更することができます。"}. -{"You have been banned from this room","あなたはチャットルームからバンされています"}. -{"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 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 room","チャットルームを設定するにはクライアントが x:data をサポートする必要があります"}. -{"You need an x:data capable client to search","検索を行うためにはクライアントが x:data をサポートする必要があります"}. +{"You can later change your password using a Jabber client.","あなたは後で Jabber クライアントを使用してパスワードを変更できます。"}. +{"You have been banned from this room","あなたはこの談話室からバンされています"}. +{"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 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 room","談話室を設定するには 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 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 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"}. diff --git a/src/msgs/ja.po b/src/msgs/ja.po index 59dab9c87..f7785c230 100644 --- a/src/msgs/ja.po +++ b/src/msgs/ja.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: ejabberd 2.1.x\n" -"PO-Revision-Date: 2010-12-24 18:46+0900\n" +"PO-Revision-Date: 2012-04-16 15:48+0900\n" "Last-Translator: Mako N \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,11 +17,11 @@ msgstr "STARTTLS の使用が必要です" msgid "No resource provided" msgstr "リソースが提供されませんでした" -#: ejabberd_c2s.erl:1149 +#: ejabberd_c2s.erl:1197 msgid "Replaced by new connection" msgstr "新しいコネクションによって置き換えられました" -#: ejabberd_c2s.erl:1837 +#: ejabberd_c2s.erl:1885 msgid "Your active privacy list has denied the routing of this stanza." msgstr "あなたのプライバシーリストはこのスタンザのルーティングを拒否しました。" @@ -32,18 +32,19 @@ msgstr "見えているテキストを入力してください" #: ejabberd_captcha.erl:101 msgid "Your messages to ~s are being blocked. To unblock them, visit ~s" msgstr "" -"~s 宛のメッセージはブロックされています、解除するにはこちらを見てください ~s" +"~s 宛のメッセージはブロックされています。解除するにはこちらを見てください ~s" #: ejabberd_captcha.erl:134 msgid "If you don't see the CAPTCHA image here, visit the web page." -msgstr "ここに CAPTCHA 画像が表示されない場合、web ページを参照してください。" +msgstr "" +"ここに CAPTCHA 画像が表示されない場合、ウェブページを参照してください。" #: ejabberd_captcha.erl:146 msgid "CAPTCHA web page" -msgstr "CAPTCHA web ページ" +msgstr "CAPTCHA ウェブページ" #: ejabberd_captcha.erl:307 -msgid "The captcha is valid." +msgid "The CAPTCHA is valid." msgstr "CAPTCHA は有効です。" #: mod_adhoc.erl:95 mod_adhoc.erl:125 mod_adhoc.erl:143 mod_adhoc.erl:161 @@ -58,63 +59,66 @@ msgstr "Ping" msgid "Pong" msgstr "Pong" -#: mod_announce.erl:506 +#: mod_announce.erl:507 mod_announce_odbc.erl:499 msgid "Really delete message of the day?" msgstr "本当にお知らせメッセージを削除しますか ?" -#: mod_announce.erl:514 mod_configure.erl:1083 mod_configure.erl:1128 +#: mod_announce.erl:515 mod_announce_odbc.erl:507 mod_configure.erl:1083 +#: mod_configure.erl:1128 msgid "Subject" -msgstr "件名" +msgstr "題" -#: mod_announce.erl:519 mod_configure.erl:1088 mod_configure.erl:1133 +#: mod_announce.erl:520 mod_announce_odbc.erl:512 mod_configure.erl:1088 +#: mod_configure.erl:1133 msgid "Message body" msgstr "本文" -#: mod_announce.erl:599 +#: mod_announce.erl:600 mod_announce_odbc.erl:592 msgid "No body provided for announce message" msgstr "アナウンスメッセージはありませんでした" -#: mod_announce.erl:634 +#: mod_announce.erl:635 mod_announce_odbc.erl:627 msgid "Announcements" msgstr "アナウンス" -#: mod_announce.erl:636 +#: mod_announce.erl:637 mod_announce_odbc.erl:629 msgid "Send announcement to all users" msgstr "すべてのユーザーにアナウンスを送信" -#: mod_announce.erl:638 +#: mod_announce.erl:639 mod_announce_odbc.erl:631 msgid "Send announcement to all users on all hosts" msgstr "全ホストのユーザーにアナウンスを送信" -#: mod_announce.erl:640 +#: mod_announce.erl:641 mod_announce_odbc.erl:633 msgid "Send announcement to all online users" msgstr "すべてのオンラインユーザーにアナウンスを送信" -#: mod_announce.erl:642 mod_configure.erl:1078 mod_configure.erl:1123 +#: mod_announce.erl:643 mod_announce_odbc.erl:635 mod_configure.erl:1078 +#: mod_configure.erl:1123 msgid "Send announcement to all online users on all hosts" msgstr "全ホストのオンラインユーザーにアナウンスを送信" -#: mod_announce.erl:644 +#: mod_announce.erl:645 mod_announce_odbc.erl:637 msgid "Set message of the day and send to online users" msgstr "お知らせメッセージを設定し、オンラインユーザーに送信" -#: mod_announce.erl:646 +#: mod_announce.erl:647 mod_announce_odbc.erl:639 msgid "Set message of the day on all hosts and send to online users" msgstr "全ホストのお知らせメッセージを設定し、オンラインユーザーに送信" -#: mod_announce.erl:648 +#: mod_announce.erl:649 mod_announce_odbc.erl:641 msgid "Update message of the day (don't send)" msgstr "お知らせメッセージを更新 (送信しない)" -#: mod_announce.erl:650 +#: mod_announce.erl:651 mod_announce_odbc.erl:643 msgid "Update message of the day on all hosts (don't send)" msgstr "全ホストのお知らせメッセージを更新 (送信しない)" -#: mod_announce.erl:652 +#: mod_announce.erl:653 mod_announce_odbc.erl:645 msgid "Delete message of the day" msgstr "お知らせメッセージを削除" -#: mod_announce.erl:654 +#: mod_announce.erl:655 mod_announce_odbc.erl:647 msgid "Delete message of the day on all hosts" msgstr "全ホストのお知らせメッセージを削除" @@ -123,7 +127,7 @@ msgstr "全ホストのお知らせメッセージを削除" msgid "Configuration" msgstr "設定" -#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1934 +#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1936 msgid "Database" msgstr "データーベース" @@ -135,7 +139,7 @@ msgstr "モジュールを起動" msgid "Stop Modules" msgstr "モジュールを停止" -#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1935 +#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1937 msgid "Backup" msgstr "バックアップ" @@ -164,7 +168,7 @@ msgid "Shut Down Service" msgstr "サービスを停止" #: mod_configure.erl:145 mod_configure.erl:518 mod_configure.erl:1197 -#: web/ejabberd_web_admin.erl:1528 +#: web/ejabberd_web_admin.erl:1527 msgid "Add User" msgstr "ユーザーを追加" @@ -216,7 +220,7 @@ msgid "User Management" msgstr "ユーザー管理" #: mod_configure.erl:500 web/ejabberd_web_admin.erl:1058 -#: web/ejabberd_web_admin.erl:1463 +#: web/ejabberd_web_admin.erl:1462 msgid "Online Users" msgstr "オンラインユーザー" @@ -228,15 +232,15 @@ msgstr "全ユーザー" msgid "Outgoing s2s Connections" msgstr "外向き s2s コネクション" -#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1905 +#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1907 msgid "Running Nodes" msgstr "起動ノード" -#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1907 +#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1909 msgid "Stopped Nodes" msgstr "停止ノード" -#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1951 +#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1953 msgid "Modules" msgstr "モジュール" @@ -274,7 +278,7 @@ msgstr "RAM, ディスクコピー" #: mod_configure.erl:926 mod_configure.erl:928 msgid "RAM copy" -msgstr "RAMコピー" +msgstr "RAM コピー" #: mod_configure.erl:926 mod_configure.erl:928 msgid "Remote copy" @@ -367,15 +371,15 @@ msgstr "アクセスルール" #: mod_configure.erl:1200 mod_configure.erl:1222 mod_configure.erl:1234 #: mod_configure.erl:1246 mod_configure.erl:1258 mod_configure.erl:1275 -#: mod_configure.erl:1287 mod_configure.erl:1652 mod_configure.erl:1702 -#: mod_configure.erl:1723 mod_roster.erl:943 mod_roster_odbc.erl:1048 -#: mod_vcard.erl:466 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:442 +#: mod_configure.erl:1287 mod_configure.erl:1650 mod_configure.erl:1700 +#: mod_configure.erl:1721 mod_roster.erl:943 mod_roster_odbc.erl:1060 +#: mod_vcard.erl:472 mod_vcard_ldap.erl:554 mod_vcard_odbc.erl:448 msgid "Jabber ID" msgstr "Jabber ID" -#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1653 -#: mod_configure.erl:1865 mod_muc/mod_muc_room.erl:2970 mod_register.erl:235 -#: web/ejabberd_web_admin.erl:1521 +#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1651 +#: mod_configure.erl:1863 mod_muc/mod_muc_room.erl:3224 mod_register.erl:235 +#: web/ejabberd_web_admin.erl:1520 msgid "Password" msgstr "パスワード" @@ -391,69 +395,70 @@ msgstr "登録ユーザー数" msgid "Number of online users" msgstr "オンラインユーザー数" -#: mod_configure.erl:1684 web/ejabberd_web_admin.erl:1589 -#: web/ejabberd_web_admin.erl:1741 +#: mod_configure.erl:1682 web/ejabberd_web_admin.erl:1588 +#: web/ejabberd_web_admin.erl:1743 msgid "Never" msgstr "なし" -#: mod_configure.erl:1698 web/ejabberd_web_admin.erl:1602 -#: web/ejabberd_web_admin.erl:1754 +#: mod_configure.erl:1696 web/ejabberd_web_admin.erl:1601 +#: web/ejabberd_web_admin.erl:1756 msgid "Online" msgstr "オンライン" -#: mod_configure.erl:1703 +#: mod_configure.erl:1701 msgid "Last login" msgstr "最終ログイン" -#: mod_configure.erl:1724 +#: mod_configure.erl:1722 msgid "Roster size" msgstr "名簿サイズ" -#: mod_configure.erl:1725 +#: mod_configure.erl:1723 msgid "IP addresses" -msgstr "IPアドレス" +msgstr "IP アドレス" -#: mod_configure.erl:1726 +#: mod_configure.erl:1724 msgid "Resources" msgstr "リソース" -#: mod_configure.erl:1852 +#: mod_configure.erl:1850 msgid "Administration of " msgstr "管理: " -#: mod_configure.erl:1855 +#: mod_configure.erl:1853 msgid "Action on user" msgstr "ユーザー操作" -#: mod_configure.erl:1859 +#: mod_configure.erl:1857 msgid "Edit Properties" msgstr "プロパティを編集" -#: mod_configure.erl:1862 web/ejabberd_web_admin.erl:1767 +#: mod_configure.erl:1860 web/ejabberd_web_admin.erl:1769 msgid "Remove User" msgstr "ユーザーを削除" -#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:336 +#: mod_irc/mod_irc.erl:201 mod_irc/mod_irc_odbc.erl:196 +#: mod_muc/mod_muc.erl:336 mod_muc/mod_muc_odbc.erl:342 msgid "Access denied by service policy" msgstr "サービスポリシーによってアクセスが禁止されました" -#: mod_irc/mod_irc.erl:400 +#: mod_irc/mod_irc.erl:401 mod_irc/mod_irc_odbc.erl:398 msgid "IRC Transport" msgstr "IRC トランスポート" -#: mod_irc/mod_irc.erl:427 +#: mod_irc/mod_irc.erl:428 mod_irc/mod_irc_odbc.erl:425 msgid "ejabberd IRC module" msgstr "ejabberd IRC module" -#: mod_irc/mod_irc.erl:558 +#: mod_irc/mod_irc.erl:559 mod_irc/mod_irc_odbc.erl:568 msgid "You need an x:data capable client to configure mod_irc settings" -msgstr "mod_irc の設定にはクライアントが x:data をサポートする必要があります" +msgstr "mod_irc の設定には x:data をサポートするクライアントが必要です" -#: mod_irc/mod_irc.erl:565 +#: mod_irc/mod_irc.erl:566 mod_irc/mod_irc_odbc.erl:575 msgid "Registration in mod_irc for " msgstr "mod_irc での登録: " -#: mod_irc/mod_irc.erl:570 +#: mod_irc/mod_irc.erl:571 mod_irc/mod_irc_odbc.erl:580 msgid "" "Enter username, encodings, ports and passwords you wish to use for " "connecting to IRC servers" @@ -461,11 +466,11 @@ msgstr "" "IRC サーバーに接続先するために使用するユーザー名、文字エンコーディング、ポー" "ト、パスワードを入力してください" -#: mod_irc/mod_irc.erl:575 +#: mod_irc/mod_irc.erl:576 mod_irc/mod_irc_odbc.erl:585 msgid "IRC Username" msgstr "IRC ユーザー名" -#: mod_irc/mod_irc.erl:585 +#: mod_irc/mod_irc.erl:586 mod_irc/mod_irc_odbc.erl:595 msgid "" "If you want to specify different ports, passwords, encodings for IRC " "servers, fill this list with values in format '{\"irc server\", \"encoding" @@ -477,7 +482,7 @@ msgstr "" "デフォルトでエンコーディングは \"~s\" を使用し、ポートは ~p、パスワードは空に" "なっています。" -#: mod_irc/mod_irc.erl:597 +#: mod_irc/mod_irc.erl:598 mod_irc/mod_irc_odbc.erl:607 msgid "" "Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." @@ -485,35 +490,36 @@ msgstr "" "例: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef.net" "\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." -#: mod_irc/mod_irc.erl:602 +#: mod_irc/mod_irc.erl:603 mod_irc/mod_irc_odbc.erl:612 msgid "Connections parameters" -msgstr "接続パラメータ" +msgstr "接続パラメーター" -#: mod_irc/mod_irc.erl:727 +#: mod_irc/mod_irc.erl:728 mod_irc/mod_irc_odbc.erl:757 msgid "Join IRC channel" msgstr "IRC チャンネルに参加" -#: mod_irc/mod_irc.erl:731 +#: mod_irc/mod_irc.erl:732 mod_irc/mod_irc_odbc.erl:761 msgid "IRC channel (don't put the first #)" msgstr "IRC チャンネル (先頭に#は不要)" -#: mod_irc/mod_irc.erl:736 +#: mod_irc/mod_irc.erl:737 mod_irc/mod_irc_odbc.erl:766 msgid "IRC server" msgstr "IRC サーバー" -#: mod_irc/mod_irc.erl:769 mod_irc/mod_irc.erl:773 +#: mod_irc/mod_irc.erl:770 mod_irc/mod_irc.erl:774 +#: mod_irc/mod_irc_odbc.erl:799 mod_irc/mod_irc_odbc.erl:803 msgid "Join the IRC channel here." msgstr "この IRC チャンネルに参加します。" -#: mod_irc/mod_irc.erl:777 +#: mod_irc/mod_irc.erl:778 mod_irc/mod_irc_odbc.erl:807 msgid "Join the IRC channel in this Jabber ID: ~s" msgstr "Jabber ID: ~s でこの IRC チャンネルに参加" -#: mod_irc/mod_irc.erl:862 +#: mod_irc/mod_irc.erl:863 mod_irc/mod_irc_odbc.erl:904 msgid "IRC settings" msgstr "IRC 設定" -#: mod_irc/mod_irc.erl:867 +#: mod_irc/mod_irc.erl:868 mod_irc/mod_irc_odbc.erl:909 msgid "" "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 " @@ -523,85 +529,85 @@ msgstr "" "さい。'Next' を押して次の項目に進みます。'Complete' を押すと設定が保存されま" "す。" -#: mod_irc/mod_irc.erl:873 +#: mod_irc/mod_irc.erl:874 mod_irc/mod_irc_odbc.erl:915 msgid "IRC username" msgstr "IRC ユーザー名" -#: mod_irc/mod_irc.erl:922 +#: mod_irc/mod_irc.erl:923 mod_irc/mod_irc_odbc.erl:964 msgid "Password ~b" msgstr "パスワード ~b" -#: mod_irc/mod_irc.erl:927 +#: mod_irc/mod_irc.erl:928 mod_irc/mod_irc_odbc.erl:969 msgid "Port ~b" msgstr "ポート ~b" -#: mod_irc/mod_irc.erl:932 +#: mod_irc/mod_irc.erl:933 mod_irc/mod_irc_odbc.erl:974 msgid "Encoding for server ~b" msgstr "サーバーのエンコーディング ~b" -#: mod_irc/mod_irc.erl:941 +#: mod_irc/mod_irc.erl:942 mod_irc/mod_irc_odbc.erl:983 msgid "Server ~b" msgstr "サーバー ~b" -#: mod_muc/mod_muc.erl:449 +#: mod_muc/mod_muc.erl:449 mod_muc/mod_muc_odbc.erl:456 msgid "Only service administrators are allowed to send service messages" msgstr "サービス管理者のみがサービスメッセージを送信できます" -#: mod_muc/mod_muc.erl:493 +#: mod_muc/mod_muc.erl:493 mod_muc/mod_muc_odbc.erl:500 msgid "Room creation is denied by service policy" -msgstr "サービスポリシーによってチャットルームの作成が禁止されています" +msgstr "サービスポリシーによって談話室の作成が禁止されています" -#: mod_muc/mod_muc.erl:500 +#: mod_muc/mod_muc.erl:500 mod_muc/mod_muc_odbc.erl:507 msgid "Conference room does not exist" -msgstr "カンファレンスルームは存在しません" +msgstr "会議室は存在しません" -#: mod_muc/mod_muc.erl:581 +#: mod_muc/mod_muc.erl:582 mod_muc/mod_muc_odbc.erl:595 msgid "Chatrooms" -msgstr "チャットルーム" +msgstr "談話室" -#: mod_muc/mod_muc.erl:711 +#: mod_muc/mod_muc.erl:712 mod_muc/mod_muc_odbc.erl:729 msgid "You need a client that supports x:data to register the nickname" -msgstr "" -"ニックネームを登録するにはクライアントが x:data をサポートする必要があります" +msgstr "ニックネームを登録するには x:data をサポートするクライアントが必要です" -#: mod_muc/mod_muc.erl:717 +#: mod_muc/mod_muc.erl:718 mod_muc/mod_muc_odbc.erl:735 msgid "Nickname Registration at " msgstr "ニックネーム登録: " -#: mod_muc/mod_muc.erl:721 +#: mod_muc/mod_muc.erl:722 mod_muc/mod_muc_odbc.erl:739 msgid "Enter nickname you want to register" msgstr "登録するニックネームを入力してください" -#: mod_muc/mod_muc.erl:722 mod_roster.erl:944 mod_roster_odbc.erl:1049 -#: mod_vcard.erl:358 mod_vcard.erl:471 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:447 +#: mod_muc/mod_muc.erl:723 mod_muc/mod_muc_odbc.erl:740 +#: mod_muc/mod_muc_room.erl:3810 mod_roster.erl:944 mod_roster_odbc.erl:1061 +#: mod_vcard.erl:364 mod_vcard.erl:477 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:453 msgid "Nickname" msgstr "ニックネーム" -#: mod_muc/mod_muc.erl:761 mod_muc/mod_muc_room.erl:933 -#: mod_muc/mod_muc_room.erl:1577 +#: mod_muc/mod_muc.erl:762 mod_muc/mod_muc_odbc.erl:784 +#: mod_muc/mod_muc_room.erl:1064 mod_muc/mod_muc_room.erl:1787 msgid "That nickname is registered by another person" msgstr "ニックネームはほかの人によって登録されています" -#: mod_muc/mod_muc.erl:787 +#: mod_muc/mod_muc.erl:788 mod_muc/mod_muc_odbc.erl:811 msgid "You must fill in field \"Nickname\" in the form" -msgstr "フォームの\"ニックネーム\"フィールドを入力する必要があります" +msgstr "フォームの\"ニックネーム\"欄を入力する必要があります" -#: mod_muc/mod_muc.erl:807 +#: mod_muc/mod_muc.erl:808 mod_muc/mod_muc_odbc.erl:831 msgid "ejabberd MUC module" msgstr "ejabberd MUC module" #: mod_muc/mod_muc_log.erl:374 mod_muc/mod_muc_log.erl:381 msgid "Chatroom configuration modified" -msgstr "チャットルームの設定が変更されました" +msgstr "談話室の設定が変更されました" #: mod_muc/mod_muc_log.erl:384 msgid "joins the room" -msgstr "がチャットルームに参加しました" +msgstr "が談話室に参加しました" #: mod_muc/mod_muc_log.erl:387 mod_muc/mod_muc_log.erl:390 msgid "leaves the room" -msgstr "がチャットルームから退出しました" +msgstr "が談話室から退出しました" #: mod_muc/mod_muc_log.erl:393 mod_muc/mod_muc_log.erl:396 msgid "has been banned" @@ -617,7 +623,7 @@ msgstr "は分掌が変更されたためキックされました" #: mod_muc/mod_muc_log.erl:408 msgid "has been kicked because the room has been changed to members-only" -msgstr "はチャットルームのメンバーのみに変更されたためキックされました" +msgstr "は談話室がメンバー制に変更されたためキックされました" #: mod_muc/mod_muc_log.erl:411 msgid "has been kicked because of a system shutdown" @@ -627,26 +633,26 @@ msgstr "はシステムシャットダウンのためキックされました" msgid "is now known as" msgstr "は名前を変更しました: " -#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:689 -#: mod_muc/mod_muc_room.erl:2138 +#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:688 +#: mod_muc/mod_muc_room.erl:2393 msgid " has set the subject to: " -msgstr " は件名を設定しました: " +msgstr " は題を設定しました: " #: mod_muc/mod_muc_log.erl:452 msgid "Chatroom is created" -msgstr "チャットルームを作りました" +msgstr "談話室を作りました" #: mod_muc/mod_muc_log.erl:453 msgid "Chatroom is destroyed" -msgstr "チャットルームを削除しました" +msgstr "談話室を削除しました" #: mod_muc/mod_muc_log.erl:454 msgid "Chatroom is started" -msgstr "チャットルームを開始しました" +msgstr "談話室を開始しました" #: mod_muc/mod_muc_log.erl:455 msgid "Chatroom is stopped" -msgstr "チャットルームを停止しました" +msgstr "談話室を停止しました" #: mod_muc/mod_muc_log.erl:459 msgid "Monday" @@ -724,263 +730,308 @@ msgstr "11月" msgid "December" msgstr "12月" -#: mod_muc/mod_muc_log.erl:751 +#: mod_muc/mod_muc_log.erl:750 msgid "Room Configuration" -msgstr "チャットルーム設定" +msgstr "談話室の設定" -#: mod_muc/mod_muc_log.erl:760 +#: mod_muc/mod_muc_log.erl:759 msgid "Room Occupants" -msgstr "在室者の数" +msgstr "在室者" -#: mod_muc/mod_muc_room.erl:170 +#: mod_muc/mod_muc_room.erl:174 msgid "Traffic rate limit is exceeded" msgstr "トラフィックレートの制限を超えました" -#: mod_muc/mod_muc_room.erl:242 +#: mod_muc/mod_muc_room.erl:246 msgid "" "This participant is kicked from the room because he sent an error message" msgstr "エラーメッセージを送信したため、この参加者はキックされました" -#: mod_muc/mod_muc_room.erl:251 +#: mod_muc/mod_muc_room.erl:255 msgid "It is not allowed to send private messages to the conference" -msgstr "カンファレンスルームにプライベートメッセージを送信することはできません" +msgstr "この会議にプライベートメッセージを送信することはできません" -#: mod_muc/mod_muc_room.erl:296 +#: mod_muc/mod_muc_room.erl:332 +msgid "Please, wait for a while before sending new voice request" +msgstr "新しい発言権の要求を送るまで少し間をおいてください" + +#: mod_muc/mod_muc_room.erl:347 +msgid "Voice requests are disabled in this conference" +msgstr "この会議では、発言権の要求はできません" + +#: mod_muc/mod_muc_room.erl:364 +msgid "Failed to extract JID from your voice request approval" +msgstr "発言権要求の承認から JID を取り出すことに失敗しました" + +#: mod_muc/mod_muc_room.erl:393 +msgid "Only moderators can approve voice requests" +msgstr "モデレーターだけが発言権の要求を承認できます" + +#: mod_muc/mod_muc_room.erl:408 msgid "Improper message type" msgstr "誤ったメッセージタイプです" -#: mod_muc/mod_muc_room.erl:406 +#: mod_muc/mod_muc_room.erl:518 msgid "" "This participant is kicked from the room because he sent an error message to " "another participant" msgstr "" "他の参加者にエラーメッセージを送信したため、この参加者はキックされました" -#: mod_muc/mod_muc_room.erl:419 +#: mod_muc/mod_muc_room.erl:531 msgid "It is not allowed to send private messages of type \"groupchat\"" msgstr "" "種別が\"groupchat\" であるプライベートメッセージを送信することはできません" -#: mod_muc/mod_muc_room.erl:431 mod_muc/mod_muc_room.erl:486 +#: mod_muc/mod_muc_room.erl:543 mod_muc/mod_muc_room.erl:611 msgid "Recipient is not in the conference room" -msgstr "受信者がカンファレンスルームにいません" +msgstr "受信者はこの会議室にいません" -#: mod_muc/mod_muc_room.erl:451 mod_muc/mod_muc_room.erl:829 -#: mod_muc/mod_muc_room.erl:3609 -msgid "Only occupants are allowed to send messages to the conference" -msgstr "在室者のみがカンファレンスにメッセージを送ることができます" - -#: mod_muc/mod_muc_room.erl:460 +#: mod_muc/mod_muc_room.erl:564 mod_muc/mod_muc_room.erl:585 msgid "It is not allowed to send private messages" msgstr "プライベートメッセージを送信することはできません" -#: mod_muc/mod_muc_room.erl:509 +#: mod_muc/mod_muc_room.erl:576 mod_muc/mod_muc_room.erl:956 +#: mod_muc/mod_muc_room.erl:4040 +msgid "Only occupants are allowed to send messages to the conference" +msgstr "在室者のみがこの会議にメッセージを送ることができます" + +#: mod_muc/mod_muc_room.erl:634 msgid "Only occupants are allowed to send queries to the conference" -msgstr "在室者のみがカンファレンスにクエリーを送信することができます" +msgstr "在室者のみが会議にクエリーを送信することができます" -#: mod_muc/mod_muc_room.erl:521 +#: mod_muc/mod_muc_room.erl:646 msgid "Queries to the conference members are not allowed in this room" -msgstr "" -"このチャットルームでは、カンファレンスメンバーへのクエリーは禁止されています" +msgstr "この談話室では、会議のメンバーへのクエリーは禁止されています" -#: mod_muc/mod_muc_room.erl:805 +#: mod_muc/mod_muc_room.erl:932 msgid "" "Only moderators and participants are allowed to change the subject in this " "room" -msgstr "モデレーターと参加者のみがチャットルームの件名を変更できます" +msgstr "モデレーターと参加者のみが談話室の題を変更できます" -#: mod_muc/mod_muc_room.erl:810 +#: mod_muc/mod_muc_room.erl:937 msgid "Only moderators are allowed to change the subject in this room" -msgstr "モデレーターのみがチャットルームの件名を変更できます" +msgstr "モデレーターのみが談話室の題を変更できます" -#: mod_muc/mod_muc_room.erl:820 +#: mod_muc/mod_muc_room.erl:947 msgid "Visitors are not allowed to send messages to all occupants" -msgstr "ビジターはすべての在室者にメッセージを送信することはできません" +msgstr "傍聴者はすべての在室者にメッセージを送信することはできません" -#: mod_muc/mod_muc_room.erl:891 +#: mod_muc/mod_muc_room.erl:1021 msgid "" "This participant is kicked from the room because he sent an error presence" msgstr "エラープレゼンスを送信したため、この参加者はキックされました" -#: mod_muc/mod_muc_room.erl:909 +#: mod_muc/mod_muc_room.erl:1040 msgid "Visitors are not allowed to change their nicknames in this room" -msgstr "ビジターはこのチャットルームでニックネームを変更することはできません" +msgstr "傍聴者はこの談話室でニックネームを変更することはできません" -#: mod_muc/mod_muc_room.erl:922 mod_muc/mod_muc_room.erl:1569 +#: mod_muc/mod_muc_room.erl:1053 mod_muc/mod_muc_room.erl:1779 msgid "That nickname is already in use by another occupant" -msgstr "ニックネームは既にほかの在室者によって使用されています" +msgstr "そのニックネームは既にほかの在室者によって使用されています" -#: mod_muc/mod_muc_room.erl:1558 +#: mod_muc/mod_muc_room.erl:1768 msgid "You have been banned from this room" -msgstr "あなたはチャットルームからバンされています" +msgstr "あなたはこの談話室からバンされています" -#: mod_muc/mod_muc_room.erl:1561 +#: mod_muc/mod_muc_room.erl:1771 msgid "Membership is required to enter this room" -msgstr "チャットルームに入るにはメンバーでなければなりません" +msgstr "この談話室に入るにはメンバーでなければなりません" -#: mod_muc/mod_muc_room.erl:1597 +#: mod_muc/mod_muc_room.erl:1807 msgid "This room is not anonymous" -msgstr "このチャットルームは非匿名です" +msgstr "この談話室は非匿名です" -#: mod_muc/mod_muc_room.erl:1623 +#: mod_muc/mod_muc_room.erl:1833 msgid "A password is required to enter this room" -msgstr "チャットルームに入るにはパスワードが必要です" +msgstr "この談話室に入るにはパスワードが必要です" -#: mod_muc/mod_muc_room.erl:1645 mod_register.erl:246 +#: mod_muc/mod_muc_room.erl:1855 mod_register.erl:246 msgid "Too many CAPTCHA requests" -msgstr "" +msgstr "CAPTCHA 要求が多すぎます" -#: mod_muc/mod_muc_room.erl:1654 -msgid "Unable to generate a captcha" -msgstr "CAPTCHA を生成することができません" +#: mod_muc/mod_muc_room.erl:1864 mod_register.erl:251 +msgid "Unable to generate a CAPTCHA" +msgstr "CAPTCHA を生成できません" -#: mod_muc/mod_muc_room.erl:1664 +#: mod_muc/mod_muc_room.erl:1874 msgid "Incorrect password" msgstr "パスワードが違います" -#: mod_muc/mod_muc_room.erl:2193 +#: mod_muc/mod_muc_room.erl:2448 msgid "Administrator privileges required" msgstr "管理者権限が必要です" -#: mod_muc/mod_muc_room.erl:2208 +#: mod_muc/mod_muc_room.erl:2463 msgid "Moderator privileges required" msgstr "モデレーター権限が必要です" -#: mod_muc/mod_muc_room.erl:2363 +#: mod_muc/mod_muc_room.erl:2619 msgid "Jabber ID ~s is invalid" msgstr "Jabber ID ~s は無効です" -#: mod_muc/mod_muc_room.erl:2377 +#: mod_muc/mod_muc_room.erl:2633 msgid "Nickname ~s does not exist in the room" -msgstr "ニックネーム ~s はこのチャットルームにいません" +msgstr "ニックネーム ~s はこの談話室にいません" -#: mod_muc/mod_muc_room.erl:2403 mod_muc/mod_muc_room.erl:2797 +#: mod_muc/mod_muc_room.erl:2659 mod_muc/mod_muc_room.erl:3049 msgid "Invalid affiliation: ~s" msgstr "無効な分掌です: ~s" -#: mod_muc/mod_muc_room.erl:2460 +#: mod_muc/mod_muc_room.erl:2713 msgid "Invalid role: ~s" msgstr "無効な役です: ~s" -#: mod_muc/mod_muc_room.erl:2774 mod_muc/mod_muc_room.erl:2810 +#: mod_muc/mod_muc_room.erl:3026 mod_muc/mod_muc_room.erl:3062 msgid "Owner privileges required" -msgstr "オーナー権限が必要です" +msgstr "主宰者の権限が必要です" -#: mod_muc/mod_muc_room.erl:2941 +#: mod_muc/mod_muc_room.erl:3195 msgid "Configuration of room ~s" -msgstr "チャットルーム ~s の設定" +msgstr "談話室 ~s の設定" -#: mod_muc/mod_muc_room.erl:2946 +#: mod_muc/mod_muc_room.erl:3200 msgid "Room title" -msgstr "チャットルームタイトル" +msgstr "談話室のタイトル" -#: mod_muc/mod_muc_room.erl:2949 mod_muc/mod_muc_room.erl:3388 +#: mod_muc/mod_muc_room.erl:3203 mod_muc/mod_muc_room.erl:3692 msgid "Room description" -msgstr "チャットルームの説明" +msgstr "談話室の説明" -#: mod_muc/mod_muc_room.erl:2956 +#: mod_muc/mod_muc_room.erl:3210 msgid "Make room persistent" -msgstr "チャットルームを永続化" +msgstr "談話室を永続化" -#: mod_muc/mod_muc_room.erl:2961 +#: mod_muc/mod_muc_room.erl:3215 msgid "Make room public searchable" -msgstr "チャットルームを検索可" +msgstr "談話室を検索可" -#: mod_muc/mod_muc_room.erl:2964 +#: mod_muc/mod_muc_room.erl:3218 msgid "Make participants list public" msgstr "参加者一覧を公開" -#: mod_muc/mod_muc_room.erl:2967 +#: mod_muc/mod_muc_room.erl:3221 msgid "Make room password protected" -msgstr "チャットルームにパスワードを設定" +msgstr "談話室をパスワードで保護" -#: mod_muc/mod_muc_room.erl:2978 +#: mod_muc/mod_muc_room.erl:3232 msgid "Maximum Number of Occupants" msgstr "最大在室者数" -#: mod_muc/mod_muc_room.erl:2985 +#: mod_muc/mod_muc_room.erl:3239 msgid "No limit" msgstr "制限なし" -#: mod_muc/mod_muc_room.erl:2996 +#: mod_muc/mod_muc_room.erl:3250 msgid "Present real Jabber IDs to" msgstr "本当の Jabber ID を公開" -#: mod_muc/mod_muc_room.erl:3004 +#: mod_muc/mod_muc_room.erl:3258 mod_muc/mod_muc_room.erl:3292 msgid "moderators only" -msgstr "モデレーターのみ" +msgstr "モデレーターにのみ" -#: mod_muc/mod_muc_room.erl:3006 +#: mod_muc/mod_muc_room.erl:3260 mod_muc/mod_muc_room.erl:3294 msgid "anyone" -msgstr "誰でも" +msgstr "誰にでも" -#: mod_muc/mod_muc_room.erl:3008 +#: mod_muc/mod_muc_room.erl:3262 msgid "Make room members-only" -msgstr "チャットルームをメンバーのみに制限" +msgstr "談話室をメンバーのみに制限" -#: mod_muc/mod_muc_room.erl:3011 +#: mod_muc/mod_muc_room.erl:3265 msgid "Make room moderated" -msgstr "チャットルームをモデレート化" +msgstr "談話室をモデレート化" -#: mod_muc/mod_muc_room.erl:3014 +#: mod_muc/mod_muc_room.erl:3268 msgid "Default users as participants" msgstr "デフォルトのユーザーは参加者" -#: mod_muc/mod_muc_room.erl:3017 +#: mod_muc/mod_muc_room.erl:3271 msgid "Allow users to change the subject" -msgstr "ユーザーによる件名の変更を許可" +msgstr "ユーザーによる題の変更を許可" -#: mod_muc/mod_muc_room.erl:3020 +#: mod_muc/mod_muc_room.erl:3274 msgid "Allow users to send private messages" msgstr "ユーザーによるプライベートメッセージの送信を許可" -#: mod_muc/mod_muc_room.erl:3023 +#: mod_muc/mod_muc_room.erl:3279 +msgid "Allow visitors to send private messages to" +msgstr "傍聴者によるプライベートメッセージの送信を次の相手に許可" + +#: mod_muc/mod_muc_room.erl:3290 +msgid "nobody" +msgstr "誰にも許可しない" + +#: mod_muc/mod_muc_room.erl:3296 msgid "Allow users to query other users" msgstr "ユーザーによる他のユーザーへのクエリーを許可" -#: mod_muc/mod_muc_room.erl:3026 +#: mod_muc/mod_muc_room.erl:3299 msgid "Allow users to send invites" msgstr "ユーザーによる招待を許可" -#: mod_muc/mod_muc_room.erl:3029 +#: mod_muc/mod_muc_room.erl:3302 msgid "Allow visitors to send status text in presence updates" -msgstr "ビジターによるプレゼンス更新のステータス文の送信を許可" +msgstr "傍聴者によるプレゼンス更新のステータス文の送信を許可" -#: mod_muc/mod_muc_room.erl:3032 +#: mod_muc/mod_muc_room.erl:3305 msgid "Allow visitors to change nickname" -msgstr "ビジターのニックネームの変更を許可" +msgstr "傍聴者のニックネームの変更を許可" -#: mod_muc/mod_muc_room.erl:3038 -msgid "Make room captcha protected" -msgstr "チャットルームを CAPTCHA で保護" +#: mod_muc/mod_muc_room.erl:3308 +msgid "Allow visitors to send voice requests" +msgstr "傍聴者による発言権の要求を許可" -#: mod_muc/mod_muc_room.erl:3043 +#: mod_muc/mod_muc_room.erl:3311 +msgid "Minimum interval between voice requests (in seconds)" +msgstr "発言権の要求の最小時間間隔 (秒)" + +#: mod_muc/mod_muc_room.erl:3317 +msgid "Make room CAPTCHA protected" +msgstr "談話室を CAPTCHA で保護" + +#: mod_muc/mod_muc_room.erl:3322 msgid "Exclude Jabber IDs from CAPTCHA challenge" -msgstr "" +msgstr "CAPTCHA 試験を免除する Jabber ID" -#: mod_muc/mod_muc_room.erl:3050 +#: mod_muc/mod_muc_room.erl:3329 msgid "Enable logging" msgstr "ロギングを有効" -#: mod_muc/mod_muc_room.erl:3058 +#: mod_muc/mod_muc_room.erl:3337 msgid "You need an x:data capable client to configure room" -msgstr "" -"チャットルームを設定するにはクライアントが x:data をサポートする必要がありま" -"す" +msgstr "談話室を設定するには x:data をサポートするクライアントが必要です" -#: mod_muc/mod_muc_room.erl:3390 +#: mod_muc/mod_muc_room.erl:3694 msgid "Number of occupants" msgstr "在室者の数" -#: mod_muc/mod_muc_room.erl:3446 +#: mod_muc/mod_muc_room.erl:3750 msgid "private, " msgstr "プライベート、" -#: mod_muc/mod_muc_room.erl:3529 -msgid "~s invites you to the room ~s" -msgstr "~s はあなたをチャットルーム ~s に招待しています" +#: mod_muc/mod_muc_room.erl:3799 +msgid "Voice request" +msgstr "発言権を要求" -#: mod_muc/mod_muc_room.erl:3538 +#: mod_muc/mod_muc_room.erl:3803 +msgid "Either approve or decline the voice request." +msgstr "発言権の要求を承認または却下します。" + +#: mod_muc/mod_muc_room.erl:3809 +msgid "User JID" +msgstr "ユーザー JID" + +#: mod_muc/mod_muc_room.erl:3811 +msgid "Grant voice to this person?" +msgstr "この人に発言権を与えますか ?" + +#: mod_muc/mod_muc_room.erl:3960 +msgid "~s invites you to the room ~s" +msgstr "~s はあなたを談話室 ~s に招待しています" + +#: mod_muc/mod_muc_room.erl:3969 msgid "the password is" msgstr "パスワードは" @@ -988,21 +1039,22 @@ msgstr "パスワードは" msgid "" "Your contact offline message queue is full. The message has been discarded." msgstr "" -"宛先のオフラインメッセージキューが一杯です。このメッセージは破棄されます。" +"相手先のオフラインメッセージキューが一杯です。このメッセージは破棄されます。" #: mod_offline.erl:560 mod_offline_odbc.erl:408 msgid "~s's Offline Messages Queue" msgstr "~s' のオフラインメッセージキュー" #: mod_offline.erl:563 mod_offline_odbc.erl:411 mod_roster.erl:987 -#: mod_roster_odbc.erl:1092 mod_shared_roster.erl:896 -#: mod_shared_roster.erl:1005 web/ejabberd_web_admin.erl:833 +#: mod_roster_odbc.erl:1104 mod_shared_roster.erl:901 +#: mod_shared_roster.erl:1010 mod_shared_roster_odbc.erl:930 +#: mod_shared_roster_odbc.erl:1039 web/ejabberd_web_admin.erl:833 #: web/ejabberd_web_admin.erl:874 web/ejabberd_web_admin.erl:942 #: web/ejabberd_web_admin.erl:978 web/ejabberd_web_admin.erl:1019 -#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1758 -#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1961 -#: web/ejabberd_web_admin.erl:2030 web/ejabberd_web_admin.erl:2134 -#: web/ejabberd_web_admin.erl:2159 web/ejabberd_web_admin.erl:2247 +#: web/ejabberd_web_admin.erl:1508 web/ejabberd_web_admin.erl:1760 +#: web/ejabberd_web_admin.erl:1931 web/ejabberd_web_admin.erl:1963 +#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2135 +#: web/ejabberd_web_admin.erl:2160 web/ejabberd_web_admin.erl:2248 msgid "Submitted" msgstr "送信完了" @@ -1022,8 +1074,9 @@ msgstr "宛先" msgid "Packet" msgstr "パケット" -#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:903 -#: web/ejabberd_web_admin.erl:882 web/ejabberd_web_admin.erl:986 +#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:908 +#: mod_shared_roster_odbc.erl:937 web/ejabberd_web_admin.erl:882 +#: web/ejabberd_web_admin.erl:986 msgid "Delete Selected" msgstr "選択した項目を削除" @@ -1037,105 +1090,105 @@ msgstr "すべてのオフラインメッセージを削除" #: mod_proxy65/mod_proxy65_service.erl:213 msgid "ejabberd SOCKS5 Bytestreams module" -msgstr "ejabberd SOCKS5 Bytestreams module" +msgstr "ejabberd SOCKS5 Bytestreams モジュール" -#: mod_pubsub/mod_pubsub.erl:1119 mod_pubsub/mod_pubsub_odbc.erl:928 +#: mod_pubsub/mod_pubsub.erl:1120 mod_pubsub/mod_pubsub_odbc.erl:929 msgid "Publish-Subscribe" msgstr "Publish-Subscribe" -#: mod_pubsub/mod_pubsub.erl:1213 mod_pubsub/mod_pubsub_odbc.erl:1024 +#: mod_pubsub/mod_pubsub.erl:1214 mod_pubsub/mod_pubsub_odbc.erl:1025 msgid "ejabberd Publish-Subscribe module" -msgstr "ejabberd Publish-Subscribe module" +msgstr "ejabberd Publish-Subscribe モジュール" -#: mod_pubsub/mod_pubsub.erl:1496 mod_pubsub/mod_pubsub_odbc.erl:1311 +#: mod_pubsub/mod_pubsub.erl:1497 mod_pubsub/mod_pubsub_odbc.erl:1312 msgid "PubSub subscriber request" msgstr "PubSub 購読者のリクエスト" -#: mod_pubsub/mod_pubsub.erl:1498 mod_pubsub/mod_pubsub_odbc.erl:1313 +#: mod_pubsub/mod_pubsub.erl:1499 mod_pubsub/mod_pubsub_odbc.erl:1314 msgid "Choose whether to approve this entity's subscription." msgstr "このエントリを承認するかどうかを選択してください" -#: mod_pubsub/mod_pubsub.erl:1504 mod_pubsub/mod_pubsub_odbc.erl:1319 +#: mod_pubsub/mod_pubsub.erl:1505 mod_pubsub/mod_pubsub_odbc.erl:1320 msgid "Node ID" msgstr "ノードID" -#: mod_pubsub/mod_pubsub.erl:1509 mod_pubsub/mod_pubsub_odbc.erl:1324 +#: mod_pubsub/mod_pubsub.erl:1510 mod_pubsub/mod_pubsub_odbc.erl:1325 msgid "Subscriber Address" msgstr "購読者のアドレス" -#: mod_pubsub/mod_pubsub.erl:1515 mod_pubsub/mod_pubsub_odbc.erl:1330 +#: mod_pubsub/mod_pubsub.erl:1516 mod_pubsub/mod_pubsub_odbc.erl:1331 msgid "Allow this Jabber ID to subscribe to this pubsub node?" msgstr "この Jabber ID に、この pubsubノードの購読を許可しますか ?" -#: mod_pubsub/mod_pubsub.erl:3416 mod_pubsub/mod_pubsub_odbc.erl:3229 +#: mod_pubsub/mod_pubsub.erl:3474 mod_pubsub/mod_pubsub_odbc.erl:3287 msgid "Deliver payloads with event notifications" msgstr "イベント通知と同時にペイロードを配送する" -#: mod_pubsub/mod_pubsub.erl:3417 mod_pubsub/mod_pubsub_odbc.erl:3230 +#: mod_pubsub/mod_pubsub.erl:3475 mod_pubsub/mod_pubsub_odbc.erl:3288 msgid "Deliver event notifications" msgstr "イベント通知を配送する" -#: mod_pubsub/mod_pubsub.erl:3418 mod_pubsub/mod_pubsub_odbc.erl:3231 +#: mod_pubsub/mod_pubsub.erl:3476 mod_pubsub/mod_pubsub_odbc.erl:3289 msgid "Notify subscribers when the node configuration changes" msgstr "ノード設定に変更があった時に購読者へ通知する" -#: mod_pubsub/mod_pubsub.erl:3419 mod_pubsub/mod_pubsub_odbc.erl:3232 +#: mod_pubsub/mod_pubsub.erl:3477 mod_pubsub/mod_pubsub_odbc.erl:3290 msgid "Notify subscribers when the node is deleted" msgstr "ノードが削除された時に購読者へ通知する" -#: mod_pubsub/mod_pubsub.erl:3420 mod_pubsub/mod_pubsub_odbc.erl:3233 +#: mod_pubsub/mod_pubsub.erl:3478 mod_pubsub/mod_pubsub_odbc.erl:3291 msgid "Notify subscribers when items are removed from the node" msgstr "アイテムがノードから消された時に購読者へ通知する" -#: mod_pubsub/mod_pubsub.erl:3421 mod_pubsub/mod_pubsub_odbc.erl:3234 +#: mod_pubsub/mod_pubsub.erl:3479 mod_pubsub/mod_pubsub_odbc.erl:3292 msgid "Persist items to storage" msgstr "アイテムをストレージに保存する" -#: mod_pubsub/mod_pubsub.erl:3422 mod_pubsub/mod_pubsub_odbc.erl:3235 +#: mod_pubsub/mod_pubsub.erl:3480 mod_pubsub/mod_pubsub_odbc.erl:3293 msgid "A friendly name for the node" msgstr "ノードのフレンドリネーム" -#: mod_pubsub/mod_pubsub.erl:3423 mod_pubsub/mod_pubsub_odbc.erl:3236 +#: mod_pubsub/mod_pubsub.erl:3481 mod_pubsub/mod_pubsub_odbc.erl:3294 msgid "Max # of items to persist" msgstr "アイテムの最大保存数" -#: mod_pubsub/mod_pubsub.erl:3424 mod_pubsub/mod_pubsub_odbc.erl:3237 +#: mod_pubsub/mod_pubsub.erl:3482 mod_pubsub/mod_pubsub_odbc.erl:3295 msgid "Whether to allow subscriptions" msgstr "購読を許可するかどうか" -#: mod_pubsub/mod_pubsub.erl:3425 mod_pubsub/mod_pubsub_odbc.erl:3238 +#: mod_pubsub/mod_pubsub.erl:3483 mod_pubsub/mod_pubsub_odbc.erl:3296 msgid "Specify the access model" msgstr "アクセスモデルを設定する" -#: mod_pubsub/mod_pubsub.erl:3428 mod_pubsub/mod_pubsub_odbc.erl:3241 +#: mod_pubsub/mod_pubsub.erl:3486 mod_pubsub/mod_pubsub_odbc.erl:3299 msgid "Roster groups allowed to subscribe" msgstr "名簿グループは購読を許可しました" -#: mod_pubsub/mod_pubsub.erl:3429 mod_pubsub/mod_pubsub_odbc.erl:3242 +#: mod_pubsub/mod_pubsub.erl:3487 mod_pubsub/mod_pubsub_odbc.erl:3300 msgid "Specify the publisher model" msgstr "公開モデルを指定する" -#: mod_pubsub/mod_pubsub.erl:3431 mod_pubsub/mod_pubsub_odbc.erl:3244 +#: mod_pubsub/mod_pubsub.erl:3489 mod_pubsub/mod_pubsub_odbc.erl:3302 msgid "Purge all items when the relevant publisher goes offline" msgstr "公開者がオフラインになるときに、すべてのアイテムを削除" -#: mod_pubsub/mod_pubsub.erl:3432 mod_pubsub/mod_pubsub_odbc.erl:3245 +#: mod_pubsub/mod_pubsub.erl:3490 mod_pubsub/mod_pubsub_odbc.erl:3303 msgid "Specify the event message type" msgstr "イベントメッセージ種別を設定" -#: mod_pubsub/mod_pubsub.erl:3434 mod_pubsub/mod_pubsub_odbc.erl:3247 +#: mod_pubsub/mod_pubsub.erl:3492 mod_pubsub/mod_pubsub_odbc.erl:3305 msgid "Max payload size in bytes" msgstr "最大ぺイロードサイズ (byte)" -#: mod_pubsub/mod_pubsub.erl:3435 mod_pubsub/mod_pubsub_odbc.erl:3248 +#: mod_pubsub/mod_pubsub.erl:3493 mod_pubsub/mod_pubsub_odbc.erl:3306 msgid "When to send the last published item" msgstr "最後の公開アイテムを送信するタイミングで" -#: mod_pubsub/mod_pubsub.erl:3437 mod_pubsub/mod_pubsub_odbc.erl:3250 +#: mod_pubsub/mod_pubsub.erl:3495 mod_pubsub/mod_pubsub_odbc.erl:3308 msgid "Only deliver notifications to available users" msgstr "有効なユーザーにのみ告知を送信する" -#: mod_pubsub/mod_pubsub.erl:3438 mod_pubsub/mod_pubsub_odbc.erl:3251 +#: mod_pubsub/mod_pubsub.erl:3496 mod_pubsub/mod_pubsub_odbc.erl:3309 msgid "The collections with which a node is affiliated" msgstr "提携されたノードの集合です" @@ -1145,199 +1198,197 @@ msgstr "CAPTCHA 検証は失敗しました" #: mod_register.erl:220 msgid "You need a client that supports x:data and CAPTCHA to register" -msgstr "" -"登録を行うにはクライアントが x:data と CAPTCHA をサポートする必要があります" +msgstr "登録を行うには x:data と CAPTCHA をサポートするクライアントが必要です" #: mod_register.erl:226 mod_register.erl:265 msgid "Choose a username and password to register with this server" msgstr "サーバーに登録するユーザー名とパスワードを選択してください" -#: mod_register.erl:230 mod_vcard.erl:358 mod_vcard_odbc.erl:336 -#: web/ejabberd_web_admin.erl:1516 web/ejabberd_web_admin.erl:1573 +#: mod_register.erl:230 mod_vcard.erl:364 mod_vcard_odbc.erl:342 +#: web/ejabberd_web_admin.erl:1515 web/ejabberd_web_admin.erl:1572 msgid "User" msgstr "ユーザー" -#: mod_register.erl:251 -msgid "Unable to generate a CAPTCHA" -msgstr "CAPTCHA を生成できませんでした" - #: mod_register.erl:316 mod_register.erl:361 msgid "The password is too weak" msgstr "このパスワードは単純過ぎます" #: mod_register.erl:365 msgid "Users are not allowed to register accounts so quickly" -msgstr "早すぎるユーザーアカウント登録は許可されていません" +msgstr "それほど速くアカウントを登録することはできません" -#: mod_roster.erl:938 mod_roster_odbc.erl:1043 web/ejabberd_web_admin.erl:1699 -#: web/ejabberd_web_admin.erl:1884 web/ejabberd_web_admin.erl:1895 -#: web/ejabberd_web_admin.erl:2218 +#: mod_roster.erl:938 mod_roster_odbc.erl:1055 web/ejabberd_web_admin.erl:1701 +#: web/ejabberd_web_admin.erl:1886 web/ejabberd_web_admin.erl:1897 +#: web/ejabberd_web_admin.erl:2219 msgid "None" msgstr "なし" -#: mod_roster.erl:945 mod_roster_odbc.erl:1050 +#: mod_roster.erl:945 mod_roster_odbc.erl:1062 msgid "Subscription" msgstr "認可" -#: mod_roster.erl:946 mod_roster_odbc.erl:1051 +#: mod_roster.erl:946 mod_roster_odbc.erl:1063 msgid "Pending" msgstr "保留" -#: mod_roster.erl:947 mod_roster_odbc.erl:1052 +#: mod_roster.erl:947 mod_roster_odbc.erl:1064 msgid "Groups" msgstr "グループ" -#: mod_roster.erl:974 mod_roster_odbc.erl:1079 +#: mod_roster.erl:974 mod_roster_odbc.erl:1091 msgid "Validate" msgstr "検証" -#: mod_roster.erl:982 mod_roster_odbc.erl:1087 +#: mod_roster.erl:982 mod_roster_odbc.erl:1099 msgid "Remove" msgstr "削除" -#: mod_roster.erl:985 mod_roster_odbc.erl:1090 +#: mod_roster.erl:985 mod_roster_odbc.erl:1102 msgid "Roster of " msgstr "名簿: " -#: mod_roster.erl:988 mod_roster_odbc.erl:1093 mod_shared_roster.erl:897 -#: mod_shared_roster.erl:1006 web/ejabberd_web_admin.erl:834 +#: mod_roster.erl:988 mod_roster_odbc.erl:1105 mod_shared_roster.erl:902 +#: mod_shared_roster.erl:1011 mod_shared_roster_odbc.erl:931 +#: mod_shared_roster_odbc.erl:1040 web/ejabberd_web_admin.erl:834 #: web/ejabberd_web_admin.erl:875 web/ejabberd_web_admin.erl:943 #: web/ejabberd_web_admin.erl:979 web/ejabberd_web_admin.erl:1020 -#: web/ejabberd_web_admin.erl:1510 web/ejabberd_web_admin.erl:1759 -#: web/ejabberd_web_admin.erl:1930 web/ejabberd_web_admin.erl:2135 -#: web/ejabberd_web_admin.erl:2160 +#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1761 +#: web/ejabberd_web_admin.erl:1932 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2161 msgid "Bad format" msgstr "不正なフォーマット" -#: mod_roster.erl:995 mod_roster_odbc.erl:1100 +#: mod_roster.erl:995 mod_roster_odbc.erl:1112 msgid "Add Jabber ID" msgstr "Jabber ID を追加" -#: mod_roster.erl:1094 mod_roster_odbc.erl:1199 +#: mod_roster.erl:1094 mod_roster_odbc.erl:1211 msgid "Roster" msgstr "名簿" -#: mod_shared_roster.erl:852 mod_shared_roster.erl:894 -#: mod_shared_roster.erl:1002 +#: mod_shared_roster.erl:857 mod_shared_roster.erl:899 +#: mod_shared_roster.erl:1007 mod_shared_roster_odbc.erl:886 +#: mod_shared_roster_odbc.erl:928 mod_shared_roster_odbc.erl:1036 msgid "Shared Roster Groups" msgstr "共有名簿グループ" -#: mod_shared_roster.erl:890 web/ejabberd_web_admin.erl:1366 -#: web/ejabberd_web_admin.erl:2460 +#: mod_shared_roster.erl:895 mod_shared_roster_odbc.erl:924 +#: web/ejabberd_web_admin.erl:1365 web/ejabberd_web_admin.erl:2461 msgid "Add New" msgstr "新規追加" -#: mod_shared_roster.erl:973 +#: mod_shared_roster.erl:978 mod_shared_roster_odbc.erl:1007 msgid "Name:" msgstr "名前:" -#: mod_shared_roster.erl:978 +#: mod_shared_roster.erl:983 mod_shared_roster_odbc.erl:1012 msgid "Description:" msgstr "説明:" -#: mod_shared_roster.erl:986 +#: mod_shared_roster.erl:991 mod_shared_roster_odbc.erl:1020 msgid "Members:" msgstr "メンバー:" -#: mod_shared_roster.erl:994 +#: mod_shared_roster.erl:999 mod_shared_roster_odbc.erl:1028 msgid "Displayed Groups:" msgstr "表示グループ" -#: mod_shared_roster.erl:1003 +#: mod_shared_roster.erl:1008 mod_shared_roster_odbc.erl:1037 msgid "Group " msgstr "グループ" -#: mod_shared_roster.erl:1012 web/ejabberd_web_admin.erl:840 -#: web/ejabberd_web_admin.erl:884 web/ejabberd_web_admin.erl:949 -#: web/ejabberd_web_admin.erl:1026 web/ejabberd_web_admin.erl:2015 +#: mod_shared_roster.erl:1017 mod_shared_roster_odbc.erl:1046 +#: web/ejabberd_web_admin.erl:840 web/ejabberd_web_admin.erl:884 +#: web/ejabberd_web_admin.erl:949 web/ejabberd_web_admin.erl:1026 +#: web/ejabberd_web_admin.erl:2017 msgid "Submit" msgstr "送信" -#: mod_vcard.erl:165 mod_vcard_ldap.erl:237 mod_vcard_odbc.erl:129 +#: mod_vcard.erl:165 mod_vcard_ldap.erl:238 mod_vcard_odbc.erl:129 msgid "Erlang Jabber Server" msgstr "Erlang Jabber Server" -#: mod_vcard.erl:358 mod_vcard.erl:472 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:448 +#: mod_vcard.erl:364 mod_vcard.erl:478 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:454 msgid "Birthday" msgstr "誕生日" -#: mod_vcard.erl:358 mod_vcard.erl:474 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:450 +#: mod_vcard.erl:364 mod_vcard.erl:480 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:456 msgid "City" msgstr "都道府県" -#: mod_vcard.erl:358 mod_vcard.erl:473 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:449 +#: mod_vcard.erl:364 mod_vcard.erl:479 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:455 msgid "Country" msgstr "国" -#: mod_vcard.erl:358 mod_vcard.erl:475 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:451 +#: mod_vcard.erl:364 mod_vcard.erl:481 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:457 msgid "Email" msgstr "メールアドレス" -#: mod_vcard.erl:358 mod_vcard.erl:470 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:446 +#: mod_vcard.erl:364 mod_vcard.erl:476 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:452 msgid "Family Name" msgstr "姓" -#: mod_vcard.erl:358 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_odbc.erl:342 msgid "" "Fill in the form to search for any matching Jabber User (Add * to the end of " "field to match substring)" msgstr "" -"フォームを埋めて Jabber User を検索して下さい(* を使用すると部分文字列にマッ" -"チします)" +"欄を埋めて Jabber User を検索してください (* を使用すると部分文字列にマッチし" +"ます)" -#: mod_vcard.erl:358 mod_vcard.erl:467 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:443 +#: mod_vcard.erl:364 mod_vcard.erl:473 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:449 msgid "Full Name" msgstr "氏名" -#: mod_vcard.erl:358 mod_vcard.erl:469 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:445 +#: mod_vcard.erl:364 mod_vcard.erl:475 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:451 msgid "Middle Name" msgstr "ミドルネーム" -#: mod_vcard.erl:358 mod_vcard.erl:468 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:444 web/ejabberd_web_admin.erl:2004 +#: mod_vcard.erl:364 mod_vcard.erl:474 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:450 web/ejabberd_web_admin.erl:2006 msgid "Name" msgstr "名" -#: mod_vcard.erl:358 mod_vcard.erl:476 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:452 +#: mod_vcard.erl:364 mod_vcard.erl:482 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:458 msgid "Organization Name" msgstr "会社名" -#: mod_vcard.erl:358 mod_vcard.erl:477 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:453 +#: mod_vcard.erl:364 mod_vcard.erl:483 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:459 msgid "Organization Unit" msgstr "部署名" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "Search users in " msgstr "ユーザーの検索: " -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "You need an x:data capable client to search" -msgstr "検索を行うためにはクライアントが x:data をサポートする必要があります" +msgstr "検索を行うためには x:data をサポートするクライアントが必要です" -#: mod_vcard.erl:383 mod_vcard_ldap.erl:483 mod_vcard_odbc.erl:361 +#: mod_vcard.erl:389 mod_vcard_ldap.erl:487 mod_vcard_odbc.erl:367 msgid "vCard User Search" msgstr "vCard ユーザー検索" -#: mod_vcard.erl:439 mod_vcard_ldap.erl:537 mod_vcard_odbc.erl:415 +#: mod_vcard.erl:445 mod_vcard_ldap.erl:541 mod_vcard_odbc.erl:421 msgid "ejabberd vCard module" -msgstr "ejabberd vCard module" +msgstr "ejabberd vCard モジュール" -#: mod_vcard.erl:463 mod_vcard_ldap.erl:547 mod_vcard_odbc.erl:439 +#: mod_vcard.erl:469 mod_vcard_ldap.erl:551 mod_vcard_odbc.erl:445 msgid "Search Results for " msgstr "検索結果: " -#: mod_vcard_ldap.erl:458 +#: mod_vcard_ldap.erl:462 msgid "Fill in fields to search for any matching Jabber User" -msgstr "項目を埋めて Jabber User を検索してください" +msgstr "欄を埋めて Jabber User を検索してください" #: web/ejabberd_web_admin.erl:193 web/ejabberd_web_admin.erl:203 #: web/ejabberd_web_admin.erl:219 web/ejabberd_web_admin.erl:229 @@ -1346,7 +1397,7 @@ msgstr "認証されていません" #: web/ejabberd_web_admin.erl:286 web/ejabberd_web_admin.erl:303 msgid "ejabberd Web Admin" -msgstr "ejabberd Web 管理" +msgstr "ejabberd ウェブ管理" #: web/ejabberd_web_admin.erl:769 web/ejabberd_web_admin.erl:780 msgid "Administration" @@ -1390,13 +1441,13 @@ msgstr "すべて" #: web/ejabberd_web_admin.erl:1094 msgid "Show Ordinary Table" -msgstr "Ordinary テーブルを表示" +msgstr "通常の表を表示" #: web/ejabberd_web_admin.erl:1096 msgid "Show Integral Table" -msgstr "Integral テーブルを表示" +msgstr "累積の表を表示" -#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1937 +#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1939 msgid "Statistics" msgstr "統計" @@ -1408,116 +1459,116 @@ msgstr "見つかりません" msgid "Node not found" msgstr "ノードが見つかりません" -#: web/ejabberd_web_admin.erl:1461 +#: web/ejabberd_web_admin.erl:1460 msgid "Host" msgstr "ホスト" -#: web/ejabberd_web_admin.erl:1462 +#: web/ejabberd_web_admin.erl:1461 msgid "Registered Users" msgstr "登録ユーザー" -#: web/ejabberd_web_admin.erl:1574 +#: web/ejabberd_web_admin.erl:1573 msgid "Offline Messages" msgstr "オフラインメッセージ" -#: web/ejabberd_web_admin.erl:1575 web/ejabberd_web_admin.erl:1765 +#: web/ejabberd_web_admin.erl:1574 web/ejabberd_web_admin.erl:1767 msgid "Last Activity" msgstr "活動履歴" -#: web/ejabberd_web_admin.erl:1657 web/ejabberd_web_admin.erl:1673 +#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 msgid "Registered Users:" msgstr "登録ユーザー:" -#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 -#: web/ejabberd_web_admin.erl:2191 +#: web/ejabberd_web_admin.erl:1661 web/ejabberd_web_admin.erl:1677 +#: web/ejabberd_web_admin.erl:2192 msgid "Online Users:" msgstr "オンラインユーザー:" -#: web/ejabberd_web_admin.erl:1661 +#: web/ejabberd_web_admin.erl:1663 msgid "Outgoing s2s Connections:" msgstr "外向き s2s コネクション:" -#: web/ejabberd_web_admin.erl:1663 +#: web/ejabberd_web_admin.erl:1665 msgid "Outgoing s2s Servers:" msgstr "外向き s2s サービス:" -#: web/ejabberd_web_admin.erl:1732 web/mod_register_web.erl:175 +#: web/ejabberd_web_admin.erl:1734 web/mod_register_web.erl:175 #: web/mod_register_web.erl:372 web/mod_register_web.erl:381 #: web/mod_register_web.erl:411 msgid "Change Password" msgstr "パスワードを変更" -#: web/ejabberd_web_admin.erl:1756 +#: web/ejabberd_web_admin.erl:1758 msgid "User " msgstr "ユーザー " -#: web/ejabberd_web_admin.erl:1763 +#: web/ejabberd_web_admin.erl:1765 msgid "Connected Resources:" msgstr "接続リソース:" -#: web/ejabberd_web_admin.erl:1764 web/mod_register_web.erl:227 +#: web/ejabberd_web_admin.erl:1766 web/mod_register_web.erl:227 #: web/mod_register_web.erl:519 msgid "Password:" msgstr "パスワード" -#: web/ejabberd_web_admin.erl:1826 +#: web/ejabberd_web_admin.erl:1828 msgid "No Data" msgstr "データなし" -#: web/ejabberd_web_admin.erl:1904 +#: web/ejabberd_web_admin.erl:1906 msgid "Nodes" msgstr "ノード" -#: web/ejabberd_web_admin.erl:1927 web/ejabberd_web_admin.erl:1949 +#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1951 msgid "Node " msgstr "ノード " -#: web/ejabberd_web_admin.erl:1936 +#: web/ejabberd_web_admin.erl:1938 msgid "Listened Ports" -msgstr "Listenポート" +msgstr "Listen ポート" -#: web/ejabberd_web_admin.erl:1938 web/ejabberd_web_admin.erl:2259 -#: web/ejabberd_web_admin.erl:2447 +#: web/ejabberd_web_admin.erl:1940 web/ejabberd_web_admin.erl:2260 +#: web/ejabberd_web_admin.erl:2448 msgid "Update" msgstr "更新" -#: web/ejabberd_web_admin.erl:1941 web/ejabberd_web_admin.erl:2568 +#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2569 msgid "Restart" msgstr "再起動" -#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2570 +#: web/ejabberd_web_admin.erl:1945 web/ejabberd_web_admin.erl:2571 msgid "Stop" msgstr "停止" -#: web/ejabberd_web_admin.erl:1957 +#: web/ejabberd_web_admin.erl:1959 msgid "RPC Call Error" msgstr "RPC 呼び出しエラー" -#: web/ejabberd_web_admin.erl:1998 +#: web/ejabberd_web_admin.erl:2000 msgid "Database Tables at " msgstr "データーベーステーブル: " -#: web/ejabberd_web_admin.erl:2005 +#: web/ejabberd_web_admin.erl:2007 msgid "Storage Type" msgstr "ストレージタイプ" -#: web/ejabberd_web_admin.erl:2006 +#: web/ejabberd_web_admin.erl:2008 msgid "Elements" msgstr "要素" -#: web/ejabberd_web_admin.erl:2007 +#: web/ejabberd_web_admin.erl:2009 msgid "Memory" msgstr "メモリ" -#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2032 web/ejabberd_web_admin.erl:2137 msgid "Error" msgstr "エラー" -#: web/ejabberd_web_admin.erl:2033 +#: web/ejabberd_web_admin.erl:2034 msgid "Backup of " msgstr "バックアップ: " -#: web/ejabberd_web_admin.erl:2035 +#: web/ejabberd_web_admin.erl:2036 msgid "" "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 " @@ -1527,142 +1578,142 @@ msgstr "" "ことに注意してください。もし ODBC モジュールを使用している場合は、SQL デー" "ターベースのバックアップを別に行う必要があります。" -#: web/ejabberd_web_admin.erl:2040 +#: web/ejabberd_web_admin.erl:2041 msgid "Store binary backup:" msgstr "バイナリバックアップを保存:" -#: web/ejabberd_web_admin.erl:2044 web/ejabberd_web_admin.erl:2051 -#: web/ejabberd_web_admin.erl:2059 web/ejabberd_web_admin.erl:2066 -#: web/ejabberd_web_admin.erl:2073 web/ejabberd_web_admin.erl:2080 -#: web/ejabberd_web_admin.erl:2087 web/ejabberd_web_admin.erl:2095 -#: web/ejabberd_web_admin.erl:2102 web/ejabberd_web_admin.erl:2109 +#: web/ejabberd_web_admin.erl:2045 web/ejabberd_web_admin.erl:2052 +#: web/ejabberd_web_admin.erl:2060 web/ejabberd_web_admin.erl:2067 +#: web/ejabberd_web_admin.erl:2074 web/ejabberd_web_admin.erl:2081 +#: web/ejabberd_web_admin.erl:2088 web/ejabberd_web_admin.erl:2096 +#: web/ejabberd_web_admin.erl:2103 web/ejabberd_web_admin.erl:2110 msgid "OK" msgstr "OK" -#: web/ejabberd_web_admin.erl:2047 +#: web/ejabberd_web_admin.erl:2048 msgid "Restore binary backup immediately:" msgstr "直ちにバイナリバックアップからリストア:" -#: web/ejabberd_web_admin.erl:2055 +#: web/ejabberd_web_admin.erl:2056 msgid "" "Restore binary backup after next ejabberd restart (requires less memory):" msgstr "ejabberd の再起動時にバイナリバックアップからリストア (メモリ少):" -#: web/ejabberd_web_admin.erl:2062 +#: web/ejabberd_web_admin.erl:2063 msgid "Store plain text backup:" msgstr "プレーンテキストバックアップを保存:" -#: web/ejabberd_web_admin.erl:2069 +#: web/ejabberd_web_admin.erl:2070 msgid "Restore plain text backup immediately:" msgstr "直ちにプレーンテキストバックアップからリストア:" -#: web/ejabberd_web_admin.erl:2076 +#: web/ejabberd_web_admin.erl:2077 msgid "Import users data from a PIEFXIS file (XEP-0227):" msgstr "ユーザーデータを PIEFXIS ファイルからインポート (XEP-0227):" -#: web/ejabberd_web_admin.erl:2083 +#: web/ejabberd_web_admin.erl:2084 msgid "Export data of all users in the server to PIEFXIS files (XEP-0227):" msgstr "" "サーバーにあるすべてのユーザーデータを PIEFXIS ファイルにエクスポート " "(XEP-0227):" -#: web/ejabberd_web_admin.erl:2090 +#: web/ejabberd_web_admin.erl:2091 msgid "Export data of users in a host to PIEFXIS files (XEP-0227):" msgstr "ホストのユーザーデータを PIEFXIS ファイルにエクスポート (XEP-0227):" -#: web/ejabberd_web_admin.erl:2098 +#: web/ejabberd_web_admin.erl:2099 msgid "Import user data from jabberd14 spool file:" msgstr "ユーザーデータを jabberd14 Spool ファイルからインポート:" -#: web/ejabberd_web_admin.erl:2105 +#: web/ejabberd_web_admin.erl:2106 msgid "Import users data from jabberd14 spool directory:" msgstr "ユーザーデータを jabberd14 Spool ディレクトリからインポート:" -#: web/ejabberd_web_admin.erl:2131 +#: web/ejabberd_web_admin.erl:2132 msgid "Listened Ports at " msgstr "Listen ポート " -#: web/ejabberd_web_admin.erl:2156 +#: web/ejabberd_web_admin.erl:2157 msgid "Modules at " msgstr "モジュール " -#: web/ejabberd_web_admin.erl:2182 +#: web/ejabberd_web_admin.erl:2183 msgid "Statistics of ~p" msgstr "~p の統計" -#: web/ejabberd_web_admin.erl:2185 +#: web/ejabberd_web_admin.erl:2186 msgid "Uptime:" msgstr "起動時間:" -#: web/ejabberd_web_admin.erl:2188 +#: web/ejabberd_web_admin.erl:2189 msgid "CPU Time:" msgstr "CPU時間:" -#: web/ejabberd_web_admin.erl:2194 +#: web/ejabberd_web_admin.erl:2195 msgid "Transactions Committed:" msgstr "トランザクションのコミット:" -#: web/ejabberd_web_admin.erl:2197 +#: web/ejabberd_web_admin.erl:2198 msgid "Transactions Aborted:" msgstr "トランザクションの失敗:" -#: web/ejabberd_web_admin.erl:2200 +#: web/ejabberd_web_admin.erl:2201 msgid "Transactions Restarted:" msgstr "トランザクションの再起動:" -#: web/ejabberd_web_admin.erl:2203 +#: web/ejabberd_web_admin.erl:2204 msgid "Transactions Logged:" msgstr "トランザクションのログ: " -#: web/ejabberd_web_admin.erl:2245 +#: web/ejabberd_web_admin.erl:2246 msgid "Update " msgstr "更新 " -#: web/ejabberd_web_admin.erl:2253 +#: web/ejabberd_web_admin.erl:2254 msgid "Update plan" msgstr "更新計画" -#: web/ejabberd_web_admin.erl:2254 +#: web/ejabberd_web_admin.erl:2255 msgid "Modified modules" msgstr "変更されたモジュール" -#: web/ejabberd_web_admin.erl:2255 +#: web/ejabberd_web_admin.erl:2256 msgid "Update script" msgstr "スクリプトの更新" -#: web/ejabberd_web_admin.erl:2256 +#: web/ejabberd_web_admin.erl:2257 msgid "Low level update script" msgstr "低レベル更新スクリプト" -#: web/ejabberd_web_admin.erl:2257 +#: web/ejabberd_web_admin.erl:2258 msgid "Script check" msgstr "スクリプトチェック" -#: web/ejabberd_web_admin.erl:2425 +#: web/ejabberd_web_admin.erl:2426 msgid "Port" msgstr "ポート" -#: web/ejabberd_web_admin.erl:2426 +#: web/ejabberd_web_admin.erl:2427 msgid "IP" msgstr "IP" -#: web/ejabberd_web_admin.erl:2427 +#: web/ejabberd_web_admin.erl:2428 msgid "Protocol" msgstr "プロトコル" -#: web/ejabberd_web_admin.erl:2428 web/ejabberd_web_admin.erl:2555 +#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 msgid "Module" msgstr "モジュール" -#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 +#: web/ejabberd_web_admin.erl:2430 web/ejabberd_web_admin.erl:2557 msgid "Options" msgstr "オプション" -#: web/ejabberd_web_admin.erl:2449 +#: web/ejabberd_web_admin.erl:2450 msgid "Delete" msgstr "削除" -#: web/ejabberd_web_admin.erl:2578 +#: web/ejabberd_web_admin.erl:2579 msgid "Start" msgstr "開始" @@ -1710,7 +1761,7 @@ msgid "" "(Jabber IDentifier) will be of the form: username@server. Please read " "carefully the instructions to fill correctly the fields." msgstr "" -"ここは Jabber サーバーにアカウントを作成するページです。あなたの JID " +"ここはこの Jabber サーバーにアカウントを作成するページです。あなたの JID " "(JabberID) は username@server のような形式になります。注意事項どおり、正しく" "項目を記入してください。" @@ -1743,17 +1794,15 @@ msgstr "" #: web/mod_register_web.erl:234 msgid "You can later change your password using a Jabber client." -msgstr "" -"あなたは後から Jabber クライアントを使用してパスワードを変更することができま" -"す。" +msgstr "あなたは後で Jabber クライアントを使用してパスワードを変更できます。" #: web/mod_register_web.erl:235 msgid "" "Some Jabber clients can store your password in your computer. Use that " "feature only if you trust your computer is safe." msgstr "" -"Jabber クライアントはコンピューターにあなたのパスワードを記憶できます。この機" -"能を使用する場合、コンピューターが安全であることを確認してください。" +"Jabber クライアントはコンピューターにパスワードを記憶できます。コンピューター" +"が安全であると信頼できる場合にのみ、この機能を使用してください。" #: web/mod_register_web.erl:237 msgid "" @@ -1783,7 +1832,7 @@ msgstr "新しいパスワード:" #: web/mod_register_web.erl:504 msgid "This page allows to unregister a Jabber account in this Jabber server." -msgstr "ここはサーバーの Jabber アカウントの削除を行うページです。" +msgstr "ここはこの Jabber サーバーのアカウントを削除するページです。" #: web/mod_register_web.erl:524 msgid "Unregister" diff --git a/src/msgs/nl.msg b/src/msgs/nl.msg index d793d3dea..70e739fe7 100644 --- a/src/msgs/nl.msg +++ b/src/msgs/nl.msg @@ -20,7 +20,9 @@ {"Allow users to send invites","Gebruikers mogen uitnodigingen 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 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 voice requests","Gebruikers mogen stemaanvragen verzenden"}. {"All Users","Alle gebruikers"}. {"Announcements","Mededelingen"}. {"anyone","iedereen"}. @@ -33,8 +35,10 @@ {"Backup to File at ","Binaire backup maken op "}. {"Bad format","Slecht formaat"}. {"Birthday","Geboortedatum"}. +{"CAPTCHA web page","CAPTCHA webpagina."}. {"Change Password","Wachtwoord wijzigen"}. {"Change User Password","Verander Gebruikerswachtwoord"}. +{"Characters not allowed:","Niet-toegestane karakters:"}. {"Chatroom configuration modified","De instellingen van de chatruimte werden veranderd"}. {"Chatroom is created","Gespreksruimte gecreëerd"}. {"Chatroom is destroyed","Gespreksruimte vernietigd"}. @@ -69,9 +73,11 @@ {"Description:","Beschrijving:"}. {"Disc only copy","Harde schijf"}. {"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 to Text File","Backup naar een tekstbestand schrijven"}. {"Edit Properties","Eigenschappen bewerken"}. +{"Either approve or decline the voice request.","Keur stemaanvraag goed of af."}. {"ejabberd IRC module","ejabberd's IRC-module"}. {"ejabberd MUC module","ejabberd's MUC module"}. {"ejabberd Publish-Subscribe module","ejabberd Publish-Subscribe module"}. @@ -95,8 +101,10 @@ {"Erlang Jabber Server","Erlang Jabber Server"}. {"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\"}]."}. +{"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 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"}. {"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"}. @@ -110,6 +118,7 @@ {"Get User Last Login Time","Tijd van Laatste Aanmelding Opvragen"}. {"Get User Password","Gebruikerswachtwoord Opvragen"}. {"Get User Statistics","Gebruikers-statistieken Opvragen"}. +{"Grant voice to this person?","Stemaanvraag honoreren voor deze persoon?"}. {"Group ","Groep "}. {"Groups","Groepen"}. {"has been banned","werd verbannen"}. @@ -119,6 +128,7 @@ {"has been kicked","werd gekicked"}. {" has set the subject to: "," veranderde het onderwerp in: "}. {"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."}. {"Import Directory","Directory 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 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"}. +{"Jabber Account Registration","Jabber-account registratie"}. {"Jabber ID","Jabber ID"}. {"Jabber ID ~s is invalid","De Jabber ID ~s is ongeldig"}. {"January","Januari"}. @@ -163,7 +174,7 @@ {"List of modules to start","Lijst met op te starten modules"}. {"Low level update script","Lowlevel script voor de opwaardering"}. {"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 moderated","Chatruimte gemodereerd maken"}. {"Make room password protected","Chatruimte beveiligen met een wachtwoord"}. @@ -176,9 +187,11 @@ {"May","Mei"}. {"Members:","Groepsleden:"}. {"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"}. {"Message body","Bericht"}. {"Middle Name","Tussennaam"}. +{"Minimum interval between voice requests (in seconds)","Minimale interval tussen stemaanvragen (in seconden)"}. {"Moderator privileges required","U hebt moderatorprivileges nodig"}. {"moderators only","moderators"}. {"Modified modules","Gewijzigde modules"}. @@ -189,9 +202,11 @@ {"Name:","Naam:"}. {"Name","Naam"}. {"Never","Nooit"}. +{"New Password:","Nieuw Wachtwoord:"}. {"Nickname","Bijnaam"}. {"Nickname Registration at ","Registratie van een bijnaam op "}. {"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 Data","Geen gegevens"}. {"Node ID","Node ID"}. @@ -213,12 +228,14 @@ {"Offline Messages:","Offline berichten:"}. {"Offline Messages","Offline berichten"}. {"OK","OK"}. +{"Old Password:","Oud Wachtwoord:"}. {"Online","Online"}. {"Online Users:","Online gebruikers:"}. {"Online Users","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 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 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"}. @@ -231,6 +248,7 @@ {"Owner privileges required","U hebt eigenaarsprivileges nodig"}. {"Packet","Pakket"}. {"Password ~b","Wachtwoord ~b"}. +{"Password Verification:","Wachtwoord Bevestiging:"}. {"Password Verification","Wachtwoord Bevestiging"}. {"Password:","Wachtwoord:"}. {"Password","Wachtwoord"}. @@ -241,6 +259,7 @@ {"Persist items to storage","Items in het geheugen bewaren"}. {"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, wait for a while before sending new voice request","Wacht s.v.p. met het maken van een nieuwe stemaanvraag."}. {"Pong","Pong"}. {"Port ~b","Poort ~b"}. {"Port","Poort"}. @@ -256,8 +275,10 @@ {"Raw","Ruw"}. {"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"}. +{"Register a Jabber account","Registreer een Jabber-account"}. {"Registered Users:","Geregistreerde gebruikers:"}. {"Registered Users","Geregistreerde gebruikers"}. +{"Register","Registreer"}. {"Registration in mod_irc for ","Registratie van "}. {"Remote copy","Op andere nodes in de cluster"}. {"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"}. {"September","September"}. {"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 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"}. @@ -301,6 +323,7 @@ {"Show Ordinary Table","Deel van tabel laten zien"}. {"Shut Down Service","Stop Service"}. {"~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 event message type","Geef type van eventbericht"}. {"Specify the publisher model","Publicatietype opgeven"}. @@ -325,9 +348,18 @@ {"Sunday","Zondag"}. {"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"}. -{"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 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 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"}. @@ -336,6 +368,7 @@ {"Time delay","Vertraging"}. {"Time","Tijd"}. {"To","Aan"}. +{"Too many CAPTCHA requests","Te veel CAPTCHA-aanvragen"}. {"To ~s","Naar ~s"}. {"Traffic rate limit is exceeded","Dataverkeerslimiet overschreden"}. {"Transactions Aborted:","Afgebroken transacties:"}. @@ -343,8 +376,10 @@ {"Transactions Logged:","Gelogde transacties:"}. {"Transactions Restarted:","Herstarte transacties:"}. {"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"}. +{"Unregister a Jabber account","Opheffen van Jabber-account"}. +{"Unregister","Opheffen"}. {"Update","Bijwerken"}. {"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)"}. @@ -355,7 +390,9 @@ {"Use of STARTTLS required","Gebruik van STARTTLS is vereist"}. {"User ","Gebruiker "}. {"User","Gebruiker"}. +{"User JID","JID Gebruiker"}. {"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","Gebruikers"}. {"Users Last Activity","Laatste activiteit van gebruikers"}. @@ -364,13 +401,21 @@ {"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 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"}. {"When to send the last published item","Wanneer het laatst gepubliceerde item verzonden moet worden"}. {"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 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 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"}. +{"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 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"}. diff --git a/src/msgs/nl.po b/src/msgs/nl.po index 98dea7cc9..5135d89bf 100644 --- a/src/msgs/nl.po +++ b/src/msgs/nl.po @@ -20,13 +20,13 @@ msgstr "Gebruik van STARTTLS is vereist" msgid "No resource provided" msgstr "Geen bron opgegeven" -#: ejabberd_c2s.erl:1149 +#: ejabberd_c2s.erl:1197 msgid "Replaced by new connection" msgstr "Vervangen door een nieuwe verbinding" -#: ejabberd_c2s.erl:1837 +#: ejabberd_c2s.erl:1885 msgid "Your active privacy list has denied the routing of this stanza." -msgstr "" +msgstr "Uw actieve privacy-lijst verbied het routeren van dit stanza." #: ejabberd_captcha.erl:96 ejabberd_captcha.erl:152 ejabberd_captcha.erl:178 msgid "Enter the text you see" @@ -39,14 +39,14 @@ msgstr "" #: ejabberd_captcha.erl:134 msgid "If you don't see the CAPTCHA image here, visit the web page." -msgstr "" +msgstr "Als U het CAPTCHA-plaatje niet ziet, bezoek dan de webpagina." #: ejabberd_captcha.erl:146 msgid "CAPTCHA web page" -msgstr "" +msgstr "CAPTCHA webpagina." #: ejabberd_captcha.erl:307 -msgid "The captcha is valid." +msgid "The CAPTCHA is valid." msgstr "De geautomatiseerde Turing-test is geslaagd." #: mod_adhoc.erl:95 mod_adhoc.erl:125 mod_adhoc.erl:143 mod_adhoc.erl:161 @@ -61,65 +61,68 @@ msgstr "Ping" msgid "Pong" msgstr "Pong" -#: mod_announce.erl:506 +#: mod_announce.erl:507 mod_announce_odbc.erl:499 msgid "Really delete message of the day?" msgstr "Wilt u het bericht van de dag verwijderen?" -#: mod_announce.erl:514 mod_configure.erl:1083 mod_configure.erl:1128 +#: mod_announce.erl:515 mod_announce_odbc.erl:507 mod_configure.erl:1083 +#: mod_configure.erl:1128 msgid "Subject" msgstr "Onderwerp" -#: mod_announce.erl:519 mod_configure.erl:1088 mod_configure.erl:1133 +#: mod_announce.erl:520 mod_announce_odbc.erl:512 mod_configure.erl:1088 +#: mod_configure.erl:1133 msgid "Message body" msgstr "Bericht" -#: mod_announce.erl:599 +#: mod_announce.erl:600 mod_announce_odbc.erl:592 msgid "No body provided for announce message" msgstr "De mededeling bevat geen bericht" -#: mod_announce.erl:634 +#: mod_announce.erl:635 mod_announce_odbc.erl:627 msgid "Announcements" msgstr "Mededelingen" -#: mod_announce.erl:636 +#: mod_announce.erl:637 mod_announce_odbc.erl:629 msgid "Send announcement to all users" msgstr "Mededeling verzenden naar alle gebruikers" -#: mod_announce.erl:638 +#: mod_announce.erl:639 mod_announce_odbc.erl:631 msgid "Send announcement to all users on all hosts" msgstr "Stuur aankondiging aan alle gebruikers op alle hosts" -#: mod_announce.erl:640 +#: mod_announce.erl:641 mod_announce_odbc.erl:633 msgid "Send announcement to all online users" msgstr "Mededeling verzenden naar alle online gebruikers" -#: mod_announce.erl:642 mod_configure.erl:1078 mod_configure.erl:1123 +#: mod_announce.erl:643 mod_announce_odbc.erl:635 mod_configure.erl:1078 +#: mod_configure.erl:1123 msgid "Send announcement to all online users on all hosts" msgstr "" "Mededeling verzenden naar alle online gebruikers op alle virtuele hosts" -#: mod_announce.erl:644 +#: mod_announce.erl:645 mod_announce_odbc.erl:637 msgid "Set message of the day and send to online users" msgstr "Bericht van de dag instellen en verzenden naar online gebruikers" -#: mod_announce.erl:646 +#: mod_announce.erl:647 mod_announce_odbc.erl:639 msgid "Set message of the day on all hosts and send to online users" msgstr "" "Stel bericht-van-de-dag in op alle hosts en stuur naar aanwezige gebruikers" -#: mod_announce.erl:648 +#: mod_announce.erl:649 mod_announce_odbc.erl:641 msgid "Update message of the day (don't send)" msgstr "Bericht van de dag bijwerken (niet verzenden)" -#: mod_announce.erl:650 +#: mod_announce.erl:651 mod_announce_odbc.erl:643 msgid "Update message of the day on all hosts (don't send)" msgstr "Verander bericht-van-de-dag op alle hosts (niet versturen)" -#: mod_announce.erl:652 +#: mod_announce.erl:653 mod_announce_odbc.erl:645 msgid "Delete message of the day" msgstr "Bericht van de dag verwijderen" -#: mod_announce.erl:654 +#: mod_announce.erl:655 mod_announce_odbc.erl:647 msgid "Delete message of the day on all hosts" msgstr "Verwijder bericht-van-de-dag op alle hosts" @@ -128,7 +131,7 @@ msgstr "Verwijder bericht-van-de-dag op alle hosts" msgid "Configuration" msgstr "Instellingen" -#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1934 +#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1936 msgid "Database" msgstr "Database" @@ -140,7 +143,7 @@ msgstr "Modules starten" msgid "Stop Modules" msgstr "Modules stoppen" -#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1935 +#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1937 msgid "Backup" msgstr "Backup" @@ -169,7 +172,7 @@ msgid "Shut Down Service" msgstr "Stop Service" #: mod_configure.erl:145 mod_configure.erl:518 mod_configure.erl:1197 -#: web/ejabberd_web_admin.erl:1528 +#: web/ejabberd_web_admin.erl:1527 msgid "Add User" msgstr "Gebruiker toevoegen" @@ -221,7 +224,7 @@ msgid "User Management" msgstr "Gebruikersbeheer" #: mod_configure.erl:500 web/ejabberd_web_admin.erl:1058 -#: web/ejabberd_web_admin.erl:1463 +#: web/ejabberd_web_admin.erl:1462 msgid "Online Users" msgstr "Online gebruikers" @@ -233,15 +236,15 @@ msgstr "Alle gebruikers" msgid "Outgoing s2s Connections" msgstr "Uitgaande s2s-verbindingen" -#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1905 +#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1907 msgid "Running Nodes" msgstr "Draaiende nodes" -#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1907 +#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1909 msgid "Stopped Nodes" msgstr "Gestopte nodes" -#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1951 +#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1953 msgid "Modules" msgstr "Modules" @@ -372,15 +375,15 @@ msgstr "Access rules" #: mod_configure.erl:1200 mod_configure.erl:1222 mod_configure.erl:1234 #: mod_configure.erl:1246 mod_configure.erl:1258 mod_configure.erl:1275 -#: mod_configure.erl:1287 mod_configure.erl:1652 mod_configure.erl:1702 -#: mod_configure.erl:1723 mod_roster.erl:943 mod_roster_odbc.erl:1048 -#: mod_vcard.erl:466 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:442 +#: mod_configure.erl:1287 mod_configure.erl:1650 mod_configure.erl:1700 +#: mod_configure.erl:1721 mod_roster.erl:943 mod_roster_odbc.erl:1060 +#: mod_vcard.erl:472 mod_vcard_ldap.erl:554 mod_vcard_odbc.erl:448 msgid "Jabber ID" msgstr "Jabber ID" -#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1653 -#: mod_configure.erl:1865 mod_muc/mod_muc_room.erl:2970 mod_register.erl:235 -#: web/ejabberd_web_admin.erl:1521 +#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1651 +#: mod_configure.erl:1863 mod_muc/mod_muc_room.erl:3224 mod_register.erl:235 +#: web/ejabberd_web_admin.erl:1520 msgid "Password" msgstr "Wachtwoord" @@ -396,71 +399,72 @@ msgstr "Aantal Geregistreerde Gebruikers" msgid "Number of online users" msgstr "Aantal Aanwezige Gebruikers" -#: mod_configure.erl:1684 web/ejabberd_web_admin.erl:1589 -#: web/ejabberd_web_admin.erl:1741 +#: mod_configure.erl:1682 web/ejabberd_web_admin.erl:1588 +#: web/ejabberd_web_admin.erl:1743 msgid "Never" msgstr "Nooit" -#: mod_configure.erl:1698 web/ejabberd_web_admin.erl:1602 -#: web/ejabberd_web_admin.erl:1754 +#: mod_configure.erl:1696 web/ejabberd_web_admin.erl:1601 +#: web/ejabberd_web_admin.erl:1756 msgid "Online" msgstr "Online" -#: mod_configure.erl:1703 +#: mod_configure.erl:1701 msgid "Last login" msgstr "Laatste Aanmelding" -#: mod_configure.erl:1724 +#: mod_configure.erl:1722 msgid "Roster size" msgstr "Contactlijst Groote" -#: mod_configure.erl:1725 +#: mod_configure.erl:1723 msgid "IP addresses" msgstr "IP-adres" -#: mod_configure.erl:1726 +#: mod_configure.erl:1724 msgid "Resources" msgstr "Bronnen" -#: mod_configure.erl:1852 +#: mod_configure.erl:1850 msgid "Administration of " msgstr "Beheer van " -#: mod_configure.erl:1855 +#: mod_configure.erl:1853 msgid "Action on user" msgstr "Actie op gebruiker" -#: mod_configure.erl:1859 +#: mod_configure.erl:1857 msgid "Edit Properties" msgstr "Eigenschappen bewerken" -#: mod_configure.erl:1862 web/ejabberd_web_admin.erl:1767 +#: mod_configure.erl:1860 web/ejabberd_web_admin.erl:1769 msgid "Remove User" msgstr "Gebruiker verwijderen" -#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:336 +#: mod_irc/mod_irc.erl:201 mod_irc/mod_irc_odbc.erl:196 +#: mod_muc/mod_muc.erl:336 mod_muc/mod_muc_odbc.erl:342 msgid "Access denied by service policy" msgstr "De toegang werd geweigerd door het beleid van deze dienst" -#: mod_irc/mod_irc.erl:400 +#: mod_irc/mod_irc.erl:401 mod_irc/mod_irc_odbc.erl:398 msgid "IRC Transport" msgstr "IRC Transport" -#: mod_irc/mod_irc.erl:427 +#: mod_irc/mod_irc.erl:428 mod_irc/mod_irc_odbc.erl:425 msgid "ejabberd IRC module" msgstr "ejabberd's IRC-module" -#: mod_irc/mod_irc.erl:558 +#: mod_irc/mod_irc.erl:559 mod_irc/mod_irc_odbc.erl:568 msgid "You need an x:data capable client to configure mod_irc settings" msgstr "" "U hebt een client nodig die x:data ondersteunt om dit IRC-transport in te " "stellen" -#: mod_irc/mod_irc.erl:565 +#: mod_irc/mod_irc.erl:566 mod_irc/mod_irc_odbc.erl:575 msgid "Registration in mod_irc for " msgstr "Registratie van " -#: mod_irc/mod_irc.erl:570 +#: mod_irc/mod_irc.erl:571 mod_irc/mod_irc_odbc.erl:580 msgid "" "Enter username, encodings, ports and passwords you wish to use for " "connecting to IRC servers" @@ -468,11 +472,11 @@ msgstr "" "Voer de gebruikersnaam, coderingen, poorten en wachtwoorden in die U wilt " "gebruiken voor het verbinden met IRC-servers" -#: mod_irc/mod_irc.erl:575 +#: mod_irc/mod_irc.erl:576 mod_irc/mod_irc_odbc.erl:585 msgid "IRC Username" msgstr "Gebruikersnaam voor IRC:" -#: mod_irc/mod_irc.erl:585 +#: mod_irc/mod_irc.erl:586 mod_irc/mod_irc_odbc.erl:595 msgid "" "If you want to specify different ports, passwords, encodings for IRC " "servers, fill this list with values in format '{\"irc server\", \"encoding" @@ -484,7 +488,7 @@ msgstr "" "\", \"codering\", poort, \"wachtwoord\"}'. Standaard gebruikt deze service " "de codering \"~s\", poort ~p, leeg wachtwoord." -#: mod_irc/mod_irc.erl:597 +#: mod_irc/mod_irc.erl:598 mod_irc/mod_irc_odbc.erl:607 msgid "" "Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." @@ -492,35 +496,36 @@ msgstr "" "Voorbeeld: [{\"irc.example.org\", \"koi8-r\", 6667, \"geheim\"}, {\"vendetta." "example.net\", \"iso8859-1\", 7000}, {irc,testserver.nl\", \"utf-8\"}]." -#: mod_irc/mod_irc.erl:602 +#: mod_irc/mod_irc.erl:603 mod_irc/mod_irc_odbc.erl:612 msgid "Connections parameters" msgstr "Verbindingsparameters" -#: mod_irc/mod_irc.erl:727 +#: mod_irc/mod_irc.erl:728 mod_irc/mod_irc_odbc.erl:757 msgid "Join IRC channel" msgstr "Ga IRC kanaal binnen" -#: mod_irc/mod_irc.erl:731 +#: mod_irc/mod_irc.erl:732 mod_irc/mod_irc_odbc.erl:761 msgid "IRC channel (don't put the first #)" msgstr "IRC kanaal (zonder eerste #)" -#: mod_irc/mod_irc.erl:736 +#: mod_irc/mod_irc.erl:737 mod_irc/mod_irc_odbc.erl:766 msgid "IRC server" msgstr "IRC-server" -#: mod_irc/mod_irc.erl:769 mod_irc/mod_irc.erl:773 +#: mod_irc/mod_irc.erl:770 mod_irc/mod_irc.erl:774 +#: mod_irc/mod_irc_odbc.erl:799 mod_irc/mod_irc_odbc.erl:803 msgid "Join the IRC channel here." msgstr "Ga het IRC kanaal binnen" -#: mod_irc/mod_irc.erl:777 +#: mod_irc/mod_irc.erl:778 mod_irc/mod_irc_odbc.erl:807 msgid "Join the IRC channel in this Jabber ID: ~s" msgstr "Ga het IRC kanaal van deze Jabber ID binnen: ~s" -#: mod_irc/mod_irc.erl:862 +#: mod_irc/mod_irc.erl:863 mod_irc/mod_irc_odbc.erl:904 msgid "IRC settings" msgstr "IRC instellingen" -#: mod_irc/mod_irc.erl:867 +#: mod_irc/mod_irc.erl:868 mod_irc/mod_irc_odbc.erl:909 msgid "" "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 " @@ -530,76 +535,76 @@ msgstr "" "verbindingen met IRC-servers. Klik op 'Volgende' om meer velden aan te " "maken. Klik op \"Voltooi' om de instellingen op te slaan." -#: mod_irc/mod_irc.erl:873 +#: mod_irc/mod_irc.erl:874 mod_irc/mod_irc_odbc.erl:915 msgid "IRC username" msgstr "Gebruikersnaam voor IRC" -#: mod_irc/mod_irc.erl:922 +#: mod_irc/mod_irc.erl:923 mod_irc/mod_irc_odbc.erl:964 msgid "Password ~b" msgstr "Wachtwoord ~b" -#: mod_irc/mod_irc.erl:927 +#: mod_irc/mod_irc.erl:928 mod_irc/mod_irc_odbc.erl:969 msgid "Port ~b" msgstr "Poort ~b" -#: mod_irc/mod_irc.erl:932 +#: mod_irc/mod_irc.erl:933 mod_irc/mod_irc_odbc.erl:974 msgid "Encoding for server ~b" msgstr "Karakterset voor server ~b" -#: mod_irc/mod_irc.erl:941 +#: mod_irc/mod_irc.erl:942 mod_irc/mod_irc_odbc.erl:983 msgid "Server ~b" msgstr "Server ~b" -#: mod_muc/mod_muc.erl:449 +#: mod_muc/mod_muc.erl:449 mod_muc/mod_muc_odbc.erl:456 msgid "Only service administrators are allowed to send service messages" msgstr "" "Alleen beheerders van deze dienst mogen mededelingen verzenden naar alle " "chatruimtes" -#: mod_muc/mod_muc.erl:493 +#: mod_muc/mod_muc.erl:493 mod_muc/mod_muc_odbc.erl:500 msgid "Room creation is denied by service policy" msgstr "" "De aanmaak van de chatruimte is verhinderd door de instellingen van deze " "server" -#: mod_muc/mod_muc.erl:500 +#: mod_muc/mod_muc.erl:500 mod_muc/mod_muc_odbc.erl:507 msgid "Conference room does not exist" msgstr "De chatruimte bestaat niet" -#: mod_muc/mod_muc.erl:581 +#: mod_muc/mod_muc.erl:582 mod_muc/mod_muc_odbc.erl:595 msgid "Chatrooms" msgstr "Groepsgesprekken" -#: mod_muc/mod_muc.erl:711 -#, fuzzy +#: mod_muc/mod_muc.erl:712 mod_muc/mod_muc_odbc.erl:729 msgid "You need a client that supports x:data to register the nickname" msgstr "" "U hebt een client nodig die x:data ondersteunt om een bijnaam te registreren" -#: mod_muc/mod_muc.erl:717 +#: mod_muc/mod_muc.erl:718 mod_muc/mod_muc_odbc.erl:735 msgid "Nickname Registration at " msgstr "Registratie van een bijnaam op " -#: mod_muc/mod_muc.erl:721 +#: mod_muc/mod_muc.erl:722 mod_muc/mod_muc_odbc.erl:739 msgid "Enter nickname you want to register" msgstr "Voer de bijnaam in die u wilt registreren" -#: mod_muc/mod_muc.erl:722 mod_roster.erl:944 mod_roster_odbc.erl:1049 -#: mod_vcard.erl:358 mod_vcard.erl:471 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:447 +#: mod_muc/mod_muc.erl:723 mod_muc/mod_muc_odbc.erl:740 +#: mod_muc/mod_muc_room.erl:3810 mod_roster.erl:944 mod_roster_odbc.erl:1061 +#: mod_vcard.erl:364 mod_vcard.erl:477 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:453 msgid "Nickname" msgstr "Bijnaam" -#: mod_muc/mod_muc.erl:761 mod_muc/mod_muc_room.erl:933 -#: mod_muc/mod_muc_room.erl:1577 +#: mod_muc/mod_muc.erl:762 mod_muc/mod_muc_odbc.erl:784 +#: mod_muc/mod_muc_room.erl:1064 mod_muc/mod_muc_room.erl:1787 msgid "That nickname is registered by another person" msgstr "Deze bijnaam is al geregistreerd door iemand anders" -#: mod_muc/mod_muc.erl:787 +#: mod_muc/mod_muc.erl:788 mod_muc/mod_muc_odbc.erl:811 msgid "You must fill in field \"Nickname\" in the form" msgstr "U moet het veld \"bijnaam\" invullen" -#: mod_muc/mod_muc.erl:807 +#: mod_muc/mod_muc.erl:808 mod_muc/mod_muc_odbc.erl:831 msgid "ejabberd MUC module" msgstr "ejabberd's MUC module" @@ -641,8 +646,8 @@ msgstr "is weggestuurd omdat het systeem gestopt wordt" msgid "is now known as" msgstr "heet nu" -#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:689 -#: mod_muc/mod_muc_room.erl:2138 +#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:688 +#: mod_muc/mod_muc_room.erl:2393 msgid " has set the subject to: " msgstr " veranderde het onderwerp in: " @@ -738,34 +743,50 @@ msgstr "November" msgid "December" msgstr "December" -#: mod_muc/mod_muc_log.erl:751 +#: mod_muc/mod_muc_log.erl:750 msgid "Room Configuration" msgstr "Instellingen van de chatruimte" -#: mod_muc/mod_muc_log.erl:760 +#: mod_muc/mod_muc_log.erl:759 msgid "Room Occupants" msgstr "Aantal aanwezigen" -#: mod_muc/mod_muc_room.erl:170 +#: mod_muc/mod_muc_room.erl:174 msgid "Traffic rate limit is exceeded" msgstr "Dataverkeerslimiet overschreden" -#: mod_muc/mod_muc_room.erl:242 +#: mod_muc/mod_muc_room.erl:246 msgid "" "This participant is kicked from the room because he sent an error message" msgstr "" "Deze deelnemer wordt weggestuurd vanwege het sturen van een " "foutmeldingsbericht" -#: mod_muc/mod_muc_room.erl:251 +#: mod_muc/mod_muc_room.erl:255 msgid "It is not allowed to send private messages to the conference" msgstr "Er mogen geen privéberichten naar de chatruimte worden verzonden" -#: mod_muc/mod_muc_room.erl:296 +#: mod_muc/mod_muc_room.erl:332 +msgid "Please, wait for a while before sending new voice request" +msgstr "Wacht s.v.p. met het maken van een nieuwe stemaanvraag." + +#: mod_muc/mod_muc_room.erl:347 +msgid "Voice requests are disabled in this conference" +msgstr "Stemaanvragen zijn uitgeschakeld voor deze chatruimte" + +#: mod_muc/mod_muc_room.erl:364 +msgid "Failed to extract JID from your voice request approval" +msgstr "Er kon geen JID worden ontleend uit deze stemaanvraag" + +#: mod_muc/mod_muc_room.erl:393 +msgid "Only moderators can approve voice requests" +msgstr "Alleen moderators kunnen stemaanvragen goedkeuren" + +#: mod_muc/mod_muc_room.erl:408 msgid "Improper message type" msgstr "Onjuist berichttype" -#: mod_muc/mod_muc_room.erl:406 +#: mod_muc/mod_muc_room.erl:518 msgid "" "This participant is kicked from the room because he sent an error message to " "another participant" @@ -773,34 +794,34 @@ msgstr "" "Deze deelnemer wordt weggestuurd vanwege het sturen van een " "foutmeldingsbericht aan een andere deelnemer" -#: mod_muc/mod_muc_room.erl:419 +#: mod_muc/mod_muc_room.erl:531 msgid "It is not allowed to send private messages of type \"groupchat\"" msgstr "" "Er mogen geen privéberichten van het type \"groupchat\" worden verzonden" -#: mod_muc/mod_muc_room.erl:431 mod_muc/mod_muc_room.erl:486 +#: mod_muc/mod_muc_room.erl:543 mod_muc/mod_muc_room.erl:611 msgid "Recipient is not in the conference room" msgstr "De ontvanger is niet in de chatruimte" -#: mod_muc/mod_muc_room.erl:451 mod_muc/mod_muc_room.erl:829 -#: mod_muc/mod_muc_room.erl:3609 -msgid "Only occupants are allowed to send messages to the conference" -msgstr "Alleen aanwezigen mogen berichten naar de chatruimte verzenden" - -#: mod_muc/mod_muc_room.erl:460 +#: mod_muc/mod_muc_room.erl:564 mod_muc/mod_muc_room.erl:585 msgid "It is not allowed to send private messages" msgstr "Het is niet toegestaan priveberichten te sturen" -#: mod_muc/mod_muc_room.erl:509 +#: mod_muc/mod_muc_room.erl:576 mod_muc/mod_muc_room.erl:956 +#: mod_muc/mod_muc_room.erl:4040 +msgid "Only occupants are allowed to send messages to the conference" +msgstr "Alleen aanwezigen mogen berichten naar de chatruimte verzenden" + +#: mod_muc/mod_muc_room.erl:634 msgid "Only occupants are allowed to send queries to the conference" msgstr "Alleen aanwezigen mogen verzoeken verzenden naar de chatruimte" -#: mod_muc/mod_muc_room.erl:521 +#: mod_muc/mod_muc_room.erl:646 msgid "Queries to the conference members are not allowed in this room" msgstr "" "Er mogen geen verzoeken verzenden worden naar deelnemers in deze chatruimte" -#: mod_muc/mod_muc_room.erl:805 +#: mod_muc/mod_muc_room.erl:932 msgid "" "Only moderators and participants are allowed to change the subject in this " "room" @@ -808,200 +829,232 @@ msgstr "" "Alleen moderators en deelnemers mogen het onderwerp van deze chatruimte " "veranderen" -#: mod_muc/mod_muc_room.erl:810 +#: mod_muc/mod_muc_room.erl:937 msgid "Only moderators are allowed to change the subject in this room" msgstr "Alleen moderators mogen het onderwerp van deze chatruimte veranderen" -#: mod_muc/mod_muc_room.erl:820 +#: mod_muc/mod_muc_room.erl:947 msgid "Visitors are not allowed to send messages to all occupants" msgstr "Bezoekers mogen geen berichten verzenden naar alle aanwezigen" -#: mod_muc/mod_muc_room.erl:891 +#: mod_muc/mod_muc_room.erl:1021 msgid "" "This participant is kicked from the room because he sent an error presence" msgstr "" "Deze deelnemer wordt weggestuurd vanwege het sturen van een foutmelding-" "aanwezigheid" -#: mod_muc/mod_muc_room.erl:909 +#: mod_muc/mod_muc_room.erl:1040 msgid "Visitors are not allowed to change their nicknames in this room" msgstr "Het is bezoekers niet toegestaan hun naam te veranderen in dit kanaal" -#: mod_muc/mod_muc_room.erl:922 mod_muc/mod_muc_room.erl:1569 +#: mod_muc/mod_muc_room.erl:1053 mod_muc/mod_muc_room.erl:1779 msgid "That nickname is already in use by another occupant" msgstr "Deze bijnaam is al in gebruik door een andere aanwezige" -#: mod_muc/mod_muc_room.erl:1558 +#: mod_muc/mod_muc_room.erl:1768 msgid "You have been banned from this room" msgstr "U werd verbannen uit deze chatruimte" -#: mod_muc/mod_muc_room.erl:1561 +#: mod_muc/mod_muc_room.erl:1771 msgid "Membership is required to enter this room" msgstr "U moet lid zijn om deze chatruimte te kunnen betreden" -#: mod_muc/mod_muc_room.erl:1597 +#: mod_muc/mod_muc_room.erl:1807 msgid "This room is not anonymous" msgstr "Deze chatruimte is niet anoniem" -#: mod_muc/mod_muc_room.erl:1623 +#: mod_muc/mod_muc_room.erl:1833 msgid "A password is required to enter this room" msgstr "U hebt een wachtwoord nodig om deze chatruimte te kunnen betreden" -#: mod_muc/mod_muc_room.erl:1645 mod_register.erl:246 +#: mod_muc/mod_muc_room.erl:1855 mod_register.erl:246 msgid "Too many CAPTCHA requests" -msgstr "" +msgstr "Te veel CAPTCHA-aanvragen" -#: mod_muc/mod_muc_room.erl:1654 -msgid "Unable to generate a captcha" -msgstr "Het generen van een gautomatiseerde Turing test is mislukt" +#: mod_muc/mod_muc_room.erl:1864 mod_register.erl:251 +msgid "Unable to generate a CAPTCHA" +msgstr "Het generen van een CAPTCHA is mislukt" -#: mod_muc/mod_muc_room.erl:1664 +#: mod_muc/mod_muc_room.erl:1874 msgid "Incorrect password" msgstr "Foutief wachtwoord" -#: mod_muc/mod_muc_room.erl:2193 +#: mod_muc/mod_muc_room.erl:2448 msgid "Administrator privileges required" msgstr "U hebt beheerdersprivileges nodig" -#: mod_muc/mod_muc_room.erl:2208 +#: mod_muc/mod_muc_room.erl:2463 msgid "Moderator privileges required" msgstr "U hebt moderatorprivileges nodig" -#: mod_muc/mod_muc_room.erl:2363 +#: mod_muc/mod_muc_room.erl:2619 msgid "Jabber ID ~s is invalid" msgstr "De Jabber ID ~s is ongeldig" -#: mod_muc/mod_muc_room.erl:2377 +#: mod_muc/mod_muc_room.erl:2633 msgid "Nickname ~s does not exist in the room" msgstr "De bijnaam ~s bestaat niet in deze chatruimte" -#: mod_muc/mod_muc_room.erl:2403 mod_muc/mod_muc_room.erl:2797 +#: mod_muc/mod_muc_room.erl:2659 mod_muc/mod_muc_room.erl:3049 msgid "Invalid affiliation: ~s" msgstr "Ongeldige affiliatie: ~s" -#: mod_muc/mod_muc_room.erl:2460 +#: mod_muc/mod_muc_room.erl:2713 msgid "Invalid role: ~s" msgstr "Ongeldige rol: ~s" -#: mod_muc/mod_muc_room.erl:2774 mod_muc/mod_muc_room.erl:2810 +#: mod_muc/mod_muc_room.erl:3026 mod_muc/mod_muc_room.erl:3062 msgid "Owner privileges required" msgstr "U hebt eigenaarsprivileges nodig" -#: mod_muc/mod_muc_room.erl:2941 +#: mod_muc/mod_muc_room.erl:3195 msgid "Configuration of room ~s" msgstr "Instellingen van chatruimte ~s" -#: mod_muc/mod_muc_room.erl:2946 +#: mod_muc/mod_muc_room.erl:3200 msgid "Room title" msgstr "Naam van de chatruimte" -#: mod_muc/mod_muc_room.erl:2949 mod_muc/mod_muc_room.erl:3388 +#: mod_muc/mod_muc_room.erl:3203 mod_muc/mod_muc_room.erl:3692 msgid "Room description" msgstr "Beschrijving" -#: mod_muc/mod_muc_room.erl:2956 +#: mod_muc/mod_muc_room.erl:3210 msgid "Make room persistent" msgstr "Chatruimte blijvend maken" -#: mod_muc/mod_muc_room.erl:2961 +#: mod_muc/mod_muc_room.erl:3215 msgid "Make room public searchable" msgstr "Chatruimte doorzoekbaar maken" -#: mod_muc/mod_muc_room.erl:2964 +#: mod_muc/mod_muc_room.erl:3218 msgid "Make participants list public" msgstr "Deelnemerslijst publiek maken" -#: mod_muc/mod_muc_room.erl:2967 +#: mod_muc/mod_muc_room.erl:3221 msgid "Make room password protected" msgstr "Chatruimte beveiligen met een wachtwoord" -#: mod_muc/mod_muc_room.erl:2978 +#: mod_muc/mod_muc_room.erl:3232 msgid "Maximum Number of Occupants" msgstr "Maximum aantal aanwezigen" -#: mod_muc/mod_muc_room.erl:2985 +#: mod_muc/mod_muc_room.erl:3239 msgid "No limit" msgstr "Geen limiet" -#: mod_muc/mod_muc_room.erl:2996 +#: mod_muc/mod_muc_room.erl:3250 msgid "Present real Jabber IDs to" msgstr "Jabber ID's kunnen achterhaald worden door" -#: mod_muc/mod_muc_room.erl:3004 +#: mod_muc/mod_muc_room.erl:3258 mod_muc/mod_muc_room.erl:3292 msgid "moderators only" msgstr "moderators" -#: mod_muc/mod_muc_room.erl:3006 +#: mod_muc/mod_muc_room.erl:3260 mod_muc/mod_muc_room.erl:3294 msgid "anyone" msgstr "iedereen" -#: mod_muc/mod_muc_room.erl:3008 +#: mod_muc/mod_muc_room.erl:3262 msgid "Make room members-only" msgstr "Chatruimte enkel toegankelijk maken voor leden" -#: mod_muc/mod_muc_room.erl:3011 +#: mod_muc/mod_muc_room.erl:3265 msgid "Make room moderated" msgstr "Chatruimte gemodereerd maken" -#: mod_muc/mod_muc_room.erl:3014 +#: mod_muc/mod_muc_room.erl:3268 msgid "Default users as participants" msgstr "Gebruikers standaard instellen als deelnemers" -#: mod_muc/mod_muc_room.erl:3017 +#: mod_muc/mod_muc_room.erl:3271 msgid "Allow users to change the subject" msgstr "Sta gebruikers toe het onderwerp te veranderen" -#: mod_muc/mod_muc_room.erl:3020 +#: mod_muc/mod_muc_room.erl:3274 msgid "Allow users to send private messages" msgstr "Gebruikers mogen privéberichten verzenden" -#: mod_muc/mod_muc_room.erl:3023 +#: mod_muc/mod_muc_room.erl:3279 +msgid "Allow visitors to send private messages to" +msgstr "Gebruikers mogen privéberichten verzenden aan" + +#: mod_muc/mod_muc_room.erl:3290 +msgid "nobody" +msgstr "niemand" + +#: mod_muc/mod_muc_room.erl:3296 msgid "Allow users to query other users" msgstr "Gebruikers mogen naar andere gebruikers verzoeken verzenden" -#: mod_muc/mod_muc_room.erl:3026 +#: mod_muc/mod_muc_room.erl:3299 msgid "Allow users to send invites" msgstr "Gebruikers mogen uitnodigingen verzenden" -#: mod_muc/mod_muc_room.erl:3029 +#: mod_muc/mod_muc_room.erl:3302 msgid "Allow visitors to send status text in presence updates" msgstr "Sta bezoekers toe hun statusbericht in te stellen" -#: mod_muc/mod_muc_room.erl:3032 +#: mod_muc/mod_muc_room.erl:3305 msgid "Allow visitors to change nickname" msgstr "Sta bezoekers toe hun naam te veranderen" -#: mod_muc/mod_muc_room.erl:3038 -msgid "Make room captcha protected" +#: mod_muc/mod_muc_room.erl:3308 +msgid "Allow visitors to send voice requests" +msgstr "Gebruikers mogen stemaanvragen verzenden" + +#: mod_muc/mod_muc_room.erl:3311 +msgid "Minimum interval between voice requests (in seconds)" +msgstr "Minimale interval tussen stemaanvragen (in seconden)" + +#: mod_muc/mod_muc_room.erl:3317 +msgid "Make room CAPTCHA protected" msgstr "Chatruimte beveiligen met een geautomatiseerde Turing test" -#: mod_muc/mod_muc_room.erl:3043 +#: mod_muc/mod_muc_room.erl:3322 msgid "Exclude Jabber IDs from CAPTCHA challenge" -msgstr "" +msgstr "Geen CAPTCHA test voor Jabber IDs" -#: mod_muc/mod_muc_room.erl:3050 +#: mod_muc/mod_muc_room.erl:3329 msgid "Enable logging" msgstr "Logs aanzetten" -#: mod_muc/mod_muc_room.erl:3058 +#: mod_muc/mod_muc_room.erl:3337 msgid "You need an x:data capable client to configure room" msgstr "" "U hebt een client nodig die x:data ondersteunt om deze chatruimte in te " "stellen" -#: mod_muc/mod_muc_room.erl:3390 +#: mod_muc/mod_muc_room.erl:3694 msgid "Number of occupants" msgstr "Aantal aanwezigen" -#: mod_muc/mod_muc_room.erl:3446 +#: mod_muc/mod_muc_room.erl:3750 msgid "private, " msgstr "privé, " -#: mod_muc/mod_muc_room.erl:3529 +#: mod_muc/mod_muc_room.erl:3799 +msgid "Voice request" +msgstr "Stemaanvraag" + +#: mod_muc/mod_muc_room.erl:3803 +msgid "Either approve or decline the voice request." +msgstr "Keur stemaanvraag goed of af." + +#: mod_muc/mod_muc_room.erl:3809 +msgid "User JID" +msgstr "JID Gebruiker" + +#: mod_muc/mod_muc_room.erl:3811 +msgid "Grant voice to this person?" +msgstr "Stemaanvraag honoreren voor deze persoon?" + +#: mod_muc/mod_muc_room.erl:3960 msgid "~s invites you to the room ~s" msgstr "~s nodigt je uit voor het groepsgesprek ~s" -#: mod_muc/mod_muc_room.erl:3538 +#: mod_muc/mod_muc_room.erl:3969 msgid "the password is" msgstr "het wachtwoord is" @@ -1017,14 +1070,15 @@ msgid "~s's Offline Messages Queue" msgstr "offline berichten van ~s" #: mod_offline.erl:563 mod_offline_odbc.erl:411 mod_roster.erl:987 -#: mod_roster_odbc.erl:1092 mod_shared_roster.erl:896 -#: mod_shared_roster.erl:1005 web/ejabberd_web_admin.erl:833 +#: mod_roster_odbc.erl:1104 mod_shared_roster.erl:901 +#: mod_shared_roster.erl:1010 mod_shared_roster_odbc.erl:930 +#: mod_shared_roster_odbc.erl:1039 web/ejabberd_web_admin.erl:833 #: web/ejabberd_web_admin.erl:874 web/ejabberd_web_admin.erl:942 #: web/ejabberd_web_admin.erl:978 web/ejabberd_web_admin.erl:1019 -#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1758 -#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1961 -#: web/ejabberd_web_admin.erl:2030 web/ejabberd_web_admin.erl:2134 -#: web/ejabberd_web_admin.erl:2159 web/ejabberd_web_admin.erl:2247 +#: web/ejabberd_web_admin.erl:1508 web/ejabberd_web_admin.erl:1760 +#: web/ejabberd_web_admin.erl:1931 web/ejabberd_web_admin.erl:1963 +#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2135 +#: web/ejabberd_web_admin.erl:2160 web/ejabberd_web_admin.erl:2248 msgid "Submitted" msgstr "Verzonden" @@ -1044,8 +1098,9 @@ msgstr "Aan" msgid "Packet" msgstr "Pakket" -#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:903 -#: web/ejabberd_web_admin.erl:882 web/ejabberd_web_admin.erl:986 +#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:908 +#: mod_shared_roster_odbc.erl:937 web/ejabberd_web_admin.erl:882 +#: web/ejabberd_web_admin.erl:986 msgid "Delete Selected" msgstr "Geselecteerde verwijderen" @@ -1061,254 +1116,251 @@ msgstr "Verwijder alle offline berichten" msgid "ejabberd SOCKS5 Bytestreams module" msgstr "ejabberd SOCKS5 Bytestreams module" -#: mod_pubsub/mod_pubsub.erl:1119 mod_pubsub/mod_pubsub_odbc.erl:928 +#: mod_pubsub/mod_pubsub.erl:1120 mod_pubsub/mod_pubsub_odbc.erl:929 msgid "Publish-Subscribe" msgstr "Publish-Subscribe" -#: mod_pubsub/mod_pubsub.erl:1213 mod_pubsub/mod_pubsub_odbc.erl:1024 +#: mod_pubsub/mod_pubsub.erl:1214 mod_pubsub/mod_pubsub_odbc.erl:1025 msgid "ejabberd Publish-Subscribe module" msgstr "ejabberd Publish-Subscribe module" -#: mod_pubsub/mod_pubsub.erl:1496 mod_pubsub/mod_pubsub_odbc.erl:1311 +#: mod_pubsub/mod_pubsub.erl:1497 mod_pubsub/mod_pubsub_odbc.erl:1312 msgid "PubSub subscriber request" msgstr "PubSub abonnee verzoek" -#: mod_pubsub/mod_pubsub.erl:1498 mod_pubsub/mod_pubsub_odbc.erl:1313 +#: mod_pubsub/mod_pubsub.erl:1499 mod_pubsub/mod_pubsub_odbc.erl:1314 msgid "Choose whether to approve this entity's subscription." msgstr "Beslis of dit verzoek tot abonneren zal worden goedgekeurd" -#: mod_pubsub/mod_pubsub.erl:1504 mod_pubsub/mod_pubsub_odbc.erl:1319 +#: mod_pubsub/mod_pubsub.erl:1505 mod_pubsub/mod_pubsub_odbc.erl:1320 msgid "Node ID" msgstr "Node ID" -#: mod_pubsub/mod_pubsub.erl:1509 mod_pubsub/mod_pubsub_odbc.erl:1324 +#: mod_pubsub/mod_pubsub.erl:1510 mod_pubsub/mod_pubsub_odbc.erl:1325 msgid "Subscriber Address" msgstr "Abonnee Adres" -#: mod_pubsub/mod_pubsub.erl:1515 mod_pubsub/mod_pubsub_odbc.erl:1330 +#: mod_pubsub/mod_pubsub.erl:1516 mod_pubsub/mod_pubsub_odbc.erl:1331 msgid "Allow this Jabber ID to subscribe to this pubsub node?" msgstr "Deze gebruiker toestaan te abonneren op deze pubsub node?" -#: mod_pubsub/mod_pubsub.erl:3416 mod_pubsub/mod_pubsub_odbc.erl:3229 +#: mod_pubsub/mod_pubsub.erl:3474 mod_pubsub/mod_pubsub_odbc.erl:3287 msgid "Deliver payloads with event notifications" msgstr "Berichten bezorgen samen met gebeurtenisnotificaties" -#: mod_pubsub/mod_pubsub.erl:3417 mod_pubsub/mod_pubsub_odbc.erl:3230 +#: mod_pubsub/mod_pubsub.erl:3475 mod_pubsub/mod_pubsub_odbc.erl:3288 msgid "Deliver event notifications" msgstr "Gebeurtenisbevestigingen Sturen" -#: mod_pubsub/mod_pubsub.erl:3418 mod_pubsub/mod_pubsub_odbc.erl:3231 +#: mod_pubsub/mod_pubsub.erl:3476 mod_pubsub/mod_pubsub_odbc.erl:3289 msgid "Notify subscribers when the node configuration changes" msgstr "Abonnees informeren wanneer de instellingen van de node veranderen" -#: mod_pubsub/mod_pubsub.erl:3419 mod_pubsub/mod_pubsub_odbc.erl:3232 +#: mod_pubsub/mod_pubsub.erl:3477 mod_pubsub/mod_pubsub_odbc.erl:3290 msgid "Notify subscribers when the node is deleted" msgstr "Abonnees informeren wanneer de node verwijderd word" -#: mod_pubsub/mod_pubsub.erl:3420 mod_pubsub/mod_pubsub_odbc.erl:3233 +#: mod_pubsub/mod_pubsub.erl:3478 mod_pubsub/mod_pubsub_odbc.erl:3291 msgid "Notify subscribers when items are removed from the node" msgstr "Abonnees informeren wanneer items verwijderd worden uit de node" -#: mod_pubsub/mod_pubsub.erl:3421 mod_pubsub/mod_pubsub_odbc.erl:3234 +#: mod_pubsub/mod_pubsub.erl:3479 mod_pubsub/mod_pubsub_odbc.erl:3292 msgid "Persist items to storage" msgstr "Items in het geheugen bewaren" -#: mod_pubsub/mod_pubsub.erl:3422 mod_pubsub/mod_pubsub_odbc.erl:3235 +#: mod_pubsub/mod_pubsub.erl:3480 mod_pubsub/mod_pubsub_odbc.erl:3293 msgid "A friendly name for the node" msgstr "Bijnaam voor deze knoop" -#: mod_pubsub/mod_pubsub.erl:3423 mod_pubsub/mod_pubsub_odbc.erl:3236 +#: mod_pubsub/mod_pubsub.erl:3481 mod_pubsub/mod_pubsub_odbc.erl:3294 msgid "Max # of items to persist" msgstr "Maximum aantal in het geheugen te bewaren items" -#: mod_pubsub/mod_pubsub.erl:3424 mod_pubsub/mod_pubsub_odbc.erl:3237 +#: mod_pubsub/mod_pubsub.erl:3482 mod_pubsub/mod_pubsub_odbc.erl:3295 msgid "Whether to allow subscriptions" msgstr "Abonnementsaanvraag toestaan" -#: mod_pubsub/mod_pubsub.erl:3425 mod_pubsub/mod_pubsub_odbc.erl:3238 +#: mod_pubsub/mod_pubsub.erl:3483 mod_pubsub/mod_pubsub_odbc.erl:3296 msgid "Specify the access model" msgstr "Geef toegangsmodel" -#: mod_pubsub/mod_pubsub.erl:3428 mod_pubsub/mod_pubsub_odbc.erl:3241 +#: mod_pubsub/mod_pubsub.erl:3486 mod_pubsub/mod_pubsub_odbc.erl:3299 msgid "Roster groups allowed to subscribe" msgstr "Contactlijst-groepen die mogen abonneren" -#: mod_pubsub/mod_pubsub.erl:3429 mod_pubsub/mod_pubsub_odbc.erl:3242 +#: mod_pubsub/mod_pubsub.erl:3487 mod_pubsub/mod_pubsub_odbc.erl:3300 msgid "Specify the publisher model" msgstr "Publicatietype opgeven" -#: mod_pubsub/mod_pubsub.erl:3431 mod_pubsub/mod_pubsub_odbc.erl:3244 +#: mod_pubsub/mod_pubsub.erl:3489 mod_pubsub/mod_pubsub_odbc.erl:3302 msgid "Purge all items when the relevant publisher goes offline" msgstr "Verwijder alle items wanneer de gerelateerde publiceerder offline gaat" -#: mod_pubsub/mod_pubsub.erl:3432 mod_pubsub/mod_pubsub_odbc.erl:3245 +#: mod_pubsub/mod_pubsub.erl:3490 mod_pubsub/mod_pubsub_odbc.erl:3303 msgid "Specify the event message type" msgstr "Geef type van eventbericht" -#: mod_pubsub/mod_pubsub.erl:3434 mod_pubsub/mod_pubsub_odbc.erl:3247 +#: mod_pubsub/mod_pubsub.erl:3492 mod_pubsub/mod_pubsub_odbc.erl:3305 msgid "Max payload size in bytes" msgstr "Maximumgrootte van bericht in bytes" -#: mod_pubsub/mod_pubsub.erl:3435 mod_pubsub/mod_pubsub_odbc.erl:3248 +#: mod_pubsub/mod_pubsub.erl:3493 mod_pubsub/mod_pubsub_odbc.erl:3306 msgid "When to send the last published item" msgstr "Wanneer het laatst gepubliceerde item verzonden moet worden" -#: mod_pubsub/mod_pubsub.erl:3437 mod_pubsub/mod_pubsub_odbc.erl:3250 +#: mod_pubsub/mod_pubsub.erl:3495 mod_pubsub/mod_pubsub_odbc.erl:3308 msgid "Only deliver notifications to available users" msgstr "Notificaties alleen verzenden naar online gebruikers" -#: mod_pubsub/mod_pubsub.erl:3438 mod_pubsub/mod_pubsub_odbc.erl:3251 +#: mod_pubsub/mod_pubsub.erl:3496 mod_pubsub/mod_pubsub_odbc.erl:3309 msgid "The collections with which a node is affiliated" msgstr "De collecties waar een node mee is gerelateerd" #: mod_register.erl:193 msgid "The CAPTCHA verification has failed" -msgstr "" +msgstr "De CAPTCHA-verificatie is mislukt" #: mod_register.erl:220 -#, fuzzy msgid "You need a client that supports x:data and CAPTCHA to register" msgstr "" -"U hebt een client nodig die x:data ondersteunt om een bijnaam te registreren" +"U hebt een client nodig die x:data en CAPTCHA ondersteunt om een bijnaam te " +"registreren" #: mod_register.erl:226 mod_register.erl:265 msgid "Choose a username and password to register with this server" msgstr "" "Kies een gebruikersnaam en een wachtwoord om u te registreren op deze server" -#: mod_register.erl:230 mod_vcard.erl:358 mod_vcard_odbc.erl:336 -#: web/ejabberd_web_admin.erl:1516 web/ejabberd_web_admin.erl:1573 +#: mod_register.erl:230 mod_vcard.erl:364 mod_vcard_odbc.erl:342 +#: web/ejabberd_web_admin.erl:1515 web/ejabberd_web_admin.erl:1572 msgid "User" msgstr "Gebruiker" -#: mod_register.erl:251 -#, fuzzy -msgid "Unable to generate a CAPTCHA" -msgstr "Het generen van een gautomatiseerde Turing test is mislukt" - #: mod_register.erl:316 mod_register.erl:361 -#, fuzzy msgid "The password is too weak" -msgstr "het wachtwoord is" +msgstr "Het wachtwoord is te zwak" #: mod_register.erl:365 msgid "Users are not allowed to register accounts so quickly" msgstr "Het is gebruikers niet toegestaan zo snel achter elkaar te registreren" -#: mod_roster.erl:938 mod_roster_odbc.erl:1043 web/ejabberd_web_admin.erl:1699 -#: web/ejabberd_web_admin.erl:1884 web/ejabberd_web_admin.erl:1895 -#: web/ejabberd_web_admin.erl:2218 +#: mod_roster.erl:938 mod_roster_odbc.erl:1055 web/ejabberd_web_admin.erl:1701 +#: web/ejabberd_web_admin.erl:1886 web/ejabberd_web_admin.erl:1897 +#: web/ejabberd_web_admin.erl:2219 msgid "None" msgstr "Geen" -#: mod_roster.erl:945 mod_roster_odbc.erl:1050 +#: mod_roster.erl:945 mod_roster_odbc.erl:1062 msgid "Subscription" msgstr "Inschrijving" -#: mod_roster.erl:946 mod_roster_odbc.erl:1051 +#: mod_roster.erl:946 mod_roster_odbc.erl:1063 msgid "Pending" msgstr "Bezig" -#: mod_roster.erl:947 mod_roster_odbc.erl:1052 +#: mod_roster.erl:947 mod_roster_odbc.erl:1064 msgid "Groups" msgstr "Groepen" -#: mod_roster.erl:974 mod_roster_odbc.erl:1079 +#: mod_roster.erl:974 mod_roster_odbc.erl:1091 msgid "Validate" msgstr "Bevestigen" -#: mod_roster.erl:982 mod_roster_odbc.erl:1087 +#: mod_roster.erl:982 mod_roster_odbc.erl:1099 msgid "Remove" msgstr "Verwijderen" -#: mod_roster.erl:985 mod_roster_odbc.erl:1090 +#: mod_roster.erl:985 mod_roster_odbc.erl:1102 msgid "Roster of " msgstr "Roster van " -#: mod_roster.erl:988 mod_roster_odbc.erl:1093 mod_shared_roster.erl:897 -#: mod_shared_roster.erl:1006 web/ejabberd_web_admin.erl:834 +#: mod_roster.erl:988 mod_roster_odbc.erl:1105 mod_shared_roster.erl:902 +#: mod_shared_roster.erl:1011 mod_shared_roster_odbc.erl:931 +#: mod_shared_roster_odbc.erl:1040 web/ejabberd_web_admin.erl:834 #: web/ejabberd_web_admin.erl:875 web/ejabberd_web_admin.erl:943 #: web/ejabberd_web_admin.erl:979 web/ejabberd_web_admin.erl:1020 -#: web/ejabberd_web_admin.erl:1510 web/ejabberd_web_admin.erl:1759 -#: web/ejabberd_web_admin.erl:1930 web/ejabberd_web_admin.erl:2135 -#: web/ejabberd_web_admin.erl:2160 +#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1761 +#: web/ejabberd_web_admin.erl:1932 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2161 msgid "Bad format" msgstr "Slecht formaat" -#: mod_roster.erl:995 mod_roster_odbc.erl:1100 +#: mod_roster.erl:995 mod_roster_odbc.erl:1112 msgid "Add Jabber ID" msgstr "Jabber ID toevoegen" -#: mod_roster.erl:1094 mod_roster_odbc.erl:1199 +#: mod_roster.erl:1094 mod_roster_odbc.erl:1211 msgid "Roster" msgstr "Roster" -#: mod_shared_roster.erl:852 mod_shared_roster.erl:894 -#: mod_shared_roster.erl:1002 +#: mod_shared_roster.erl:857 mod_shared_roster.erl:899 +#: mod_shared_roster.erl:1007 mod_shared_roster_odbc.erl:886 +#: mod_shared_roster_odbc.erl:928 mod_shared_roster_odbc.erl:1036 msgid "Shared Roster Groups" msgstr "Gedeelde rostergroepen" -#: mod_shared_roster.erl:890 web/ejabberd_web_admin.erl:1366 -#: web/ejabberd_web_admin.erl:2460 +#: mod_shared_roster.erl:895 mod_shared_roster_odbc.erl:924 +#: web/ejabberd_web_admin.erl:1365 web/ejabberd_web_admin.erl:2461 msgid "Add New" msgstr "Toevoegen" -#: mod_shared_roster.erl:973 +#: mod_shared_roster.erl:978 mod_shared_roster_odbc.erl:1007 msgid "Name:" msgstr "Naam:" -#: mod_shared_roster.erl:978 +#: mod_shared_roster.erl:983 mod_shared_roster_odbc.erl:1012 msgid "Description:" msgstr "Beschrijving:" -#: mod_shared_roster.erl:986 +#: mod_shared_roster.erl:991 mod_shared_roster_odbc.erl:1020 msgid "Members:" msgstr "Groepsleden:" -#: mod_shared_roster.erl:994 +#: mod_shared_roster.erl:999 mod_shared_roster_odbc.erl:1028 msgid "Displayed Groups:" msgstr "Weergegeven groepen:" -#: mod_shared_roster.erl:1003 +#: mod_shared_roster.erl:1008 mod_shared_roster_odbc.erl:1037 msgid "Group " msgstr "Groep " -#: mod_shared_roster.erl:1012 web/ejabberd_web_admin.erl:840 -#: web/ejabberd_web_admin.erl:884 web/ejabberd_web_admin.erl:949 -#: web/ejabberd_web_admin.erl:1026 web/ejabberd_web_admin.erl:2015 +#: mod_shared_roster.erl:1017 mod_shared_roster_odbc.erl:1046 +#: web/ejabberd_web_admin.erl:840 web/ejabberd_web_admin.erl:884 +#: web/ejabberd_web_admin.erl:949 web/ejabberd_web_admin.erl:1026 +#: web/ejabberd_web_admin.erl:2017 msgid "Submit" msgstr "Verzenden" -#: mod_vcard.erl:165 mod_vcard_ldap.erl:237 mod_vcard_odbc.erl:129 +#: mod_vcard.erl:165 mod_vcard_ldap.erl:238 mod_vcard_odbc.erl:129 msgid "Erlang Jabber Server" msgstr "Erlang Jabber Server" -#: mod_vcard.erl:358 mod_vcard.erl:472 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:448 +#: mod_vcard.erl:364 mod_vcard.erl:478 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:454 msgid "Birthday" msgstr "Geboortedatum" -#: mod_vcard.erl:358 mod_vcard.erl:474 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:450 +#: mod_vcard.erl:364 mod_vcard.erl:480 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:456 msgid "City" msgstr "Plaats" -#: mod_vcard.erl:358 mod_vcard.erl:473 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:449 +#: mod_vcard.erl:364 mod_vcard.erl:479 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:455 msgid "Country" msgstr "Land" -#: mod_vcard.erl:358 mod_vcard.erl:475 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:451 +#: mod_vcard.erl:364 mod_vcard.erl:481 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:457 msgid "Email" msgstr "E-mail" -#: mod_vcard.erl:358 mod_vcard.erl:470 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:446 +#: mod_vcard.erl:364 mod_vcard.erl:476 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:452 msgid "Family Name" msgstr "Achternaam" -#: mod_vcard.erl:358 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_odbc.erl:342 msgid "" "Fill in the form to search for any matching Jabber User (Add * to the end of " "field to match substring)" @@ -1316,52 +1368,52 @@ msgstr "" "Gebruik de velden om te zoeken (Voeg achteraan het teken * toe om te zoeken " "naar alles wat met het eerste deel begint.)." -#: mod_vcard.erl:358 mod_vcard.erl:467 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:443 +#: mod_vcard.erl:364 mod_vcard.erl:473 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:449 msgid "Full Name" msgstr "Volledige naam" -#: mod_vcard.erl:358 mod_vcard.erl:469 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:445 +#: mod_vcard.erl:364 mod_vcard.erl:475 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:451 msgid "Middle Name" msgstr "Tussennaam" -#: mod_vcard.erl:358 mod_vcard.erl:468 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:444 web/ejabberd_web_admin.erl:2004 +#: mod_vcard.erl:364 mod_vcard.erl:474 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:450 web/ejabberd_web_admin.erl:2006 msgid "Name" msgstr "Naam" -#: mod_vcard.erl:358 mod_vcard.erl:476 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:452 +#: mod_vcard.erl:364 mod_vcard.erl:482 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:458 msgid "Organization Name" msgstr "Organisatie" -#: mod_vcard.erl:358 mod_vcard.erl:477 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:453 +#: mod_vcard.erl:364 mod_vcard.erl:483 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:459 msgid "Organization Unit" msgstr "Afdeling" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "Search users in " msgstr "Gebruikers zoeken in " -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "You need an x:data capable client to search" msgstr "U hebt een client nodig die x:data ondersteunt om te zoeken" -#: mod_vcard.erl:383 mod_vcard_ldap.erl:483 mod_vcard_odbc.erl:361 +#: mod_vcard.erl:389 mod_vcard_ldap.erl:487 mod_vcard_odbc.erl:367 msgid "vCard User Search" msgstr "Gebruikers zoeken" -#: mod_vcard.erl:439 mod_vcard_ldap.erl:537 mod_vcard_odbc.erl:415 +#: mod_vcard.erl:445 mod_vcard_ldap.erl:541 mod_vcard_odbc.erl:421 msgid "ejabberd vCard module" msgstr "ejabberd's vCard-module" -#: mod_vcard.erl:463 mod_vcard_ldap.erl:547 mod_vcard_odbc.erl:439 +#: mod_vcard.erl:469 mod_vcard_ldap.erl:551 mod_vcard_odbc.erl:445 msgid "Search Results for " msgstr "Zoekresultaten voor " -#: mod_vcard_ldap.erl:458 +#: mod_vcard_ldap.erl:462 msgid "Fill in fields to search for any matching Jabber User" msgstr "Vul de velden in om te zoeken naar Jabber-gebruikers op deze server" @@ -1422,7 +1474,7 @@ msgstr "Deel van tabel laten zien" msgid "Show Integral Table" msgstr "Volledige tabel laten zien" -#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1937 +#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1939 msgid "Statistics" msgstr "Statistieken" @@ -1434,116 +1486,116 @@ msgstr "Niet gevonden" msgid "Node not found" msgstr "Node niet gevonden" -#: web/ejabberd_web_admin.erl:1461 +#: web/ejabberd_web_admin.erl:1460 msgid "Host" msgstr "Host" -#: web/ejabberd_web_admin.erl:1462 +#: web/ejabberd_web_admin.erl:1461 msgid "Registered Users" msgstr "Geregistreerde gebruikers" -#: web/ejabberd_web_admin.erl:1574 +#: web/ejabberd_web_admin.erl:1573 msgid "Offline Messages" msgstr "Offline berichten" -#: web/ejabberd_web_admin.erl:1575 web/ejabberd_web_admin.erl:1765 +#: web/ejabberd_web_admin.erl:1574 web/ejabberd_web_admin.erl:1767 msgid "Last Activity" msgstr "Laatste activiteit" -#: web/ejabberd_web_admin.erl:1657 web/ejabberd_web_admin.erl:1673 +#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 msgid "Registered Users:" msgstr "Geregistreerde gebruikers:" -#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 -#: web/ejabberd_web_admin.erl:2191 +#: web/ejabberd_web_admin.erl:1661 web/ejabberd_web_admin.erl:1677 +#: web/ejabberd_web_admin.erl:2192 msgid "Online Users:" msgstr "Online gebruikers:" -#: web/ejabberd_web_admin.erl:1661 +#: web/ejabberd_web_admin.erl:1663 msgid "Outgoing s2s Connections:" msgstr "Uitgaande s2s-verbindingen:" -#: web/ejabberd_web_admin.erl:1663 +#: web/ejabberd_web_admin.erl:1665 msgid "Outgoing s2s Servers:" msgstr "Uitgaande s2s-verbindingen:" -#: web/ejabberd_web_admin.erl:1732 web/mod_register_web.erl:175 +#: web/ejabberd_web_admin.erl:1734 web/mod_register_web.erl:175 #: web/mod_register_web.erl:372 web/mod_register_web.erl:381 #: web/mod_register_web.erl:411 msgid "Change Password" msgstr "Wachtwoord wijzigen" -#: web/ejabberd_web_admin.erl:1756 +#: web/ejabberd_web_admin.erl:1758 msgid "User " msgstr "Gebruiker " -#: web/ejabberd_web_admin.erl:1763 +#: web/ejabberd_web_admin.erl:1765 msgid "Connected Resources:" msgstr "Verbonden bronnen:" -#: web/ejabberd_web_admin.erl:1764 web/mod_register_web.erl:227 +#: web/ejabberd_web_admin.erl:1766 web/mod_register_web.erl:227 #: web/mod_register_web.erl:519 msgid "Password:" msgstr "Wachtwoord:" -#: web/ejabberd_web_admin.erl:1826 +#: web/ejabberd_web_admin.erl:1828 msgid "No Data" msgstr "Geen gegevens" -#: web/ejabberd_web_admin.erl:1904 +#: web/ejabberd_web_admin.erl:1906 msgid "Nodes" msgstr "Nodes" -#: web/ejabberd_web_admin.erl:1927 web/ejabberd_web_admin.erl:1949 +#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1951 msgid "Node " msgstr "Node " -#: web/ejabberd_web_admin.erl:1936 +#: web/ejabberd_web_admin.erl:1938 msgid "Listened Ports" msgstr "Openstaande poorten" -#: web/ejabberd_web_admin.erl:1938 web/ejabberd_web_admin.erl:2259 -#: web/ejabberd_web_admin.erl:2447 +#: web/ejabberd_web_admin.erl:1940 web/ejabberd_web_admin.erl:2260 +#: web/ejabberd_web_admin.erl:2448 msgid "Update" msgstr "Bijwerken" -#: web/ejabberd_web_admin.erl:1941 web/ejabberd_web_admin.erl:2568 +#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2569 msgid "Restart" msgstr "Herstarten" -#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2570 +#: web/ejabberd_web_admin.erl:1945 web/ejabberd_web_admin.erl:2571 msgid "Stop" msgstr "Stoppen" -#: web/ejabberd_web_admin.erl:1957 +#: web/ejabberd_web_admin.erl:1959 msgid "RPC Call Error" msgstr "RPC-oproepfout" -#: web/ejabberd_web_admin.erl:1998 +#: web/ejabberd_web_admin.erl:2000 msgid "Database Tables at " msgstr "Databasetabellen van " -#: web/ejabberd_web_admin.erl:2005 +#: web/ejabberd_web_admin.erl:2007 msgid "Storage Type" msgstr "Opslagmethode" -#: web/ejabberd_web_admin.erl:2006 +#: web/ejabberd_web_admin.erl:2008 msgid "Elements" msgstr "Elementen" -#: web/ejabberd_web_admin.erl:2007 +#: web/ejabberd_web_admin.erl:2009 msgid "Memory" msgstr "Geheugen" -#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2032 web/ejabberd_web_admin.erl:2137 msgid "Error" msgstr "Fout" -#: web/ejabberd_web_admin.erl:2033 +#: web/ejabberd_web_admin.erl:2034 msgid "Backup of " msgstr "Backup maken van " -#: web/ejabberd_web_admin.erl:2035 +#: web/ejabberd_web_admin.erl:2036 msgid "" "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 " @@ -1553,185 +1605,185 @@ msgstr "" "Mnesia. Als U de ODBC module gebruikt dan moeten daarvan afzonderlijke " "backups gemaakt worden." -#: web/ejabberd_web_admin.erl:2040 +#: web/ejabberd_web_admin.erl:2041 msgid "Store binary backup:" msgstr "Binaire backup maken:" -#: web/ejabberd_web_admin.erl:2044 web/ejabberd_web_admin.erl:2051 -#: web/ejabberd_web_admin.erl:2059 web/ejabberd_web_admin.erl:2066 -#: web/ejabberd_web_admin.erl:2073 web/ejabberd_web_admin.erl:2080 -#: web/ejabberd_web_admin.erl:2087 web/ejabberd_web_admin.erl:2095 -#: web/ejabberd_web_admin.erl:2102 web/ejabberd_web_admin.erl:2109 +#: web/ejabberd_web_admin.erl:2045 web/ejabberd_web_admin.erl:2052 +#: web/ejabberd_web_admin.erl:2060 web/ejabberd_web_admin.erl:2067 +#: web/ejabberd_web_admin.erl:2074 web/ejabberd_web_admin.erl:2081 +#: web/ejabberd_web_admin.erl:2088 web/ejabberd_web_admin.erl:2096 +#: web/ejabberd_web_admin.erl:2103 web/ejabberd_web_admin.erl:2110 msgid "OK" msgstr "OK" -#: web/ejabberd_web_admin.erl:2047 +#: web/ejabberd_web_admin.erl:2048 msgid "Restore binary backup immediately:" msgstr "Binaire backup direct herstellen:" -#: web/ejabberd_web_admin.erl:2055 +#: web/ejabberd_web_admin.erl:2056 msgid "" "Restore binary backup after next ejabberd restart (requires less memory):" msgstr "" "Binaire backup herstellen na herstart van ejabberd (vereist minder geheugen):" -#: web/ejabberd_web_admin.erl:2062 +#: web/ejabberd_web_admin.erl:2063 msgid "Store plain text backup:" msgstr "Backup naar een tekstbestand schrijven:" -#: web/ejabberd_web_admin.erl:2069 +#: web/ejabberd_web_admin.erl:2070 msgid "Restore plain text backup immediately:" msgstr "Backup in een tekstbestand direct herstellen:" -#: web/ejabberd_web_admin.erl:2076 +#: web/ejabberd_web_admin.erl:2077 msgid "Import users data from a PIEFXIS file (XEP-0227):" msgstr "Importeer gebruikersdata van een PIEFXIS-bestand (XEP-0227):" -#: web/ejabberd_web_admin.erl:2083 +#: web/ejabberd_web_admin.erl:2084 msgid "Export data of all users in the server to PIEFXIS files (XEP-0227):" msgstr "" "Exporteer data van alle gebruikers in de server naar PIEFXIS-bestanden " "(XEP-0227):" -#: web/ejabberd_web_admin.erl:2090 +#: web/ejabberd_web_admin.erl:2091 msgid "Export data of users in a host to PIEFXIS files (XEP-0227):" msgstr "" "Exporteer data van alle gebruikers van een host naar PIEXFIS-bestanden " "(XEP-0227):" -#: web/ejabberd_web_admin.erl:2098 +#: web/ejabberd_web_admin.erl:2099 msgid "Import user data from jabberd14 spool file:" msgstr "Importeer gebruikersdata via spool-bestanden van jabberd14" -#: web/ejabberd_web_admin.erl:2105 +#: web/ejabberd_web_admin.erl:2106 msgid "Import users data from jabberd14 spool directory:" msgstr "Importeer gebruikersdata via spool-bestanden van jabberd14" -#: web/ejabberd_web_admin.erl:2131 +#: web/ejabberd_web_admin.erl:2132 msgid "Listened Ports at " msgstr "Openstaande poorten op " -#: web/ejabberd_web_admin.erl:2156 +#: web/ejabberd_web_admin.erl:2157 msgid "Modules at " msgstr "Modules op " -#: web/ejabberd_web_admin.erl:2182 +#: web/ejabberd_web_admin.erl:2183 msgid "Statistics of ~p" msgstr "Statistieken van ~p" -#: web/ejabberd_web_admin.erl:2185 +#: web/ejabberd_web_admin.erl:2186 msgid "Uptime:" msgstr "Uptime:" -#: web/ejabberd_web_admin.erl:2188 +#: web/ejabberd_web_admin.erl:2189 msgid "CPU Time:" msgstr "Processortijd:" -#: web/ejabberd_web_admin.erl:2194 +#: web/ejabberd_web_admin.erl:2195 msgid "Transactions Committed:" msgstr "Bevestigde transacties:" -#: web/ejabberd_web_admin.erl:2197 +#: web/ejabberd_web_admin.erl:2198 msgid "Transactions Aborted:" msgstr "Afgebroken transacties:" -#: web/ejabberd_web_admin.erl:2200 +#: web/ejabberd_web_admin.erl:2201 msgid "Transactions Restarted:" msgstr "Herstarte transacties:" -#: web/ejabberd_web_admin.erl:2203 +#: web/ejabberd_web_admin.erl:2204 msgid "Transactions Logged:" msgstr "Gelogde transacties:" -#: web/ejabberd_web_admin.erl:2245 +#: web/ejabberd_web_admin.erl:2246 msgid "Update " msgstr "Opwaarderen van " -#: web/ejabberd_web_admin.erl:2253 +#: web/ejabberd_web_admin.erl:2254 msgid "Update plan" msgstr "Plan voor de opwaardering" -#: web/ejabberd_web_admin.erl:2254 +#: web/ejabberd_web_admin.erl:2255 msgid "Modified modules" msgstr "Gewijzigde modules" -#: web/ejabberd_web_admin.erl:2255 +#: web/ejabberd_web_admin.erl:2256 msgid "Update script" msgstr "Script voor de opwaardering" -#: web/ejabberd_web_admin.erl:2256 +#: web/ejabberd_web_admin.erl:2257 msgid "Low level update script" msgstr "Lowlevel script voor de opwaardering" -#: web/ejabberd_web_admin.erl:2257 +#: web/ejabberd_web_admin.erl:2258 msgid "Script check" msgstr "Controle van script" -#: web/ejabberd_web_admin.erl:2425 +#: web/ejabberd_web_admin.erl:2426 msgid "Port" msgstr "Poort" -#: web/ejabberd_web_admin.erl:2426 +#: web/ejabberd_web_admin.erl:2427 msgid "IP" msgstr "IP" -#: web/ejabberd_web_admin.erl:2427 +#: web/ejabberd_web_admin.erl:2428 msgid "Protocol" msgstr "Protocol" -#: web/ejabberd_web_admin.erl:2428 web/ejabberd_web_admin.erl:2555 +#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 msgid "Module" msgstr "Module" -#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 +#: web/ejabberd_web_admin.erl:2430 web/ejabberd_web_admin.erl:2557 msgid "Options" msgstr "Opties" -#: web/ejabberd_web_admin.erl:2449 +#: web/ejabberd_web_admin.erl:2450 msgid "Delete" msgstr "Verwijderen" -#: web/ejabberd_web_admin.erl:2578 +#: web/ejabberd_web_admin.erl:2579 msgid "Start" msgstr "Starten" #: web/mod_register_web.erl:104 msgid "Your Jabber account was successfully created." -msgstr "" +msgstr "Uw Jabber-account is succesvol gecreeerd." #: web/mod_register_web.erl:107 msgid "There was an error creating the account: " -msgstr "" +msgstr "Er was een fout bij het creeern van de account:" #: web/mod_register_web.erl:115 msgid "Your Jabber account was successfully deleted." -msgstr "" +msgstr "Uw Jabber-account is succesvol verwijderd." #: web/mod_register_web.erl:118 msgid "There was an error deleting the account: " -msgstr "" +msgstr "Er was een fout bij het verwijderen van de account." #: web/mod_register_web.erl:128 msgid "The password of your Jabber account was successfully changed." -msgstr "" +msgstr "Het wachtwoord van Uw Jabber-account is succesvol veranderd." #: web/mod_register_web.erl:131 msgid "There was an error changing the password: " -msgstr "" +msgstr "Er was een fout bij het veranderen van het wachtwoord:" #: web/mod_register_web.erl:163 web/mod_register_web.erl:172 msgid "Jabber Account Registration" -msgstr "" +msgstr "Jabber-account registratie" #: web/mod_register_web.erl:174 web/mod_register_web.erl:192 #: web/mod_register_web.erl:201 msgid "Register a Jabber account" -msgstr "" +msgstr "Registreer een Jabber-account" #: web/mod_register_web.erl:176 web/mod_register_web.erl:493 #: web/mod_register_web.erl:502 msgid "Unregister a Jabber account" -msgstr "" +msgstr "Opheffen van Jabber-account" #: web/mod_register_web.erl:203 msgid "" @@ -1739,42 +1791,50 @@ msgid "" "(Jabber IDentifier) will be of the form: username@server. Please read " "carefully the instructions to fill correctly the fields." msgstr "" +"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." #: web/mod_register_web.erl:212 web/mod_register_web.erl:386 #: web/mod_register_web.erl:509 -#, fuzzy msgid "Username:" -msgstr "Gebruikersnaam voor IRC:" +msgstr "Gebruikersnaam:" #: web/mod_register_web.erl:217 msgid "This is case insensitive: macbeth is the same that MacBeth and Macbeth." msgstr "" +"Dit is niet hoofdlettergevoelig: macbeth is hetzelfde als MacBeth en Macbeth." #: web/mod_register_web.erl:218 msgid "Characters not allowed:" -msgstr "" +msgstr "Niet-toegestane karakters:" #: web/mod_register_web.erl:222 web/mod_register_web.erl:391 #: web/mod_register_web.erl:514 -#, fuzzy msgid "Server:" -msgstr "Server ~b" +msgstr "Server:" #: web/mod_register_web.erl:232 msgid "" "Don't tell your password to anybody, not even the administrators of the " "Jabber server." msgstr "" +"Geef Uw wachtwoord aan niemand, zelfs niet aan de beheerders van deze Jabber-" +"server." #: web/mod_register_web.erl:234 msgid "You can later change your password using a Jabber client." -msgstr "" +msgstr "U can het wachtwoord later veranderen met een Jabber-client." #: web/mod_register_web.erl:235 msgid "" "Some Jabber clients can store your password in your computer. Use that " "feature only if you trust your computer is safe." msgstr "" +"Sommige Jabber-clienten kunnen het wachtwoord opslaan op Uw computer. " +"Gebruik deze mogelijkheid alleen als U vertrouwd dat Uw computer afdoende " +"beveiligd is." #: web/mod_register_web.erl:237 msgid "" @@ -1782,34 +1842,35 @@ msgid "" "Jabber there isn't an automated way to recover your password if you forget " "it." msgstr "" +"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." #: web/mod_register_web.erl:242 web/mod_register_web.erl:406 -#, fuzzy msgid "Password Verification:" -msgstr "Wachtwoord Bevestiging" +msgstr "Wachtwoord Bevestiging:" #: web/mod_register_web.erl:250 -#, fuzzy msgid "Register" -msgstr "Roster" +msgstr "Registreer" #: web/mod_register_web.erl:396 -#, fuzzy msgid "Old Password:" -msgstr "Wachtwoord:" +msgstr "Oud Wachtwoord:" #: web/mod_register_web.erl:401 -#, fuzzy msgid "New Password:" -msgstr "Wachtwoord:" +msgstr "Nieuw Wachtwoord:" #: web/mod_register_web.erl:504 msgid "This page allows to unregister a Jabber account in this Jabber server." msgstr "" +"Deze pagina maakt het mogelijk een Jabber-account op deze server op te " +"heffen." #: web/mod_register_web.erl:524 msgid "Unregister" -msgstr "" +msgstr "Opheffen" #, fuzzy #~ msgid "Captcha test failed" diff --git a/src/msgs/no.msg b/src/msgs/no.msg index 0d8adf85f..febe781b8 100644 --- a/src/msgs/no.msg +++ b/src/msgs/no.msg @@ -20,7 +20,9 @@ {"Allow users to send invites","Tillat brukere å sende invitasjoner"}. {"Allow users to send private messages","Tillat brukere å sende private meldinger"}. {"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 voice requests","Tillat brukere å sende lyd forespørsler"}. {"All Users","Alle Brukere"}. {"Announcements","Kunngjøringer"}. {"anyone","hvem som helst"}. @@ -33,8 +35,10 @@ {"Backup to File at ","Sikkerhetskopiere til Fil på "}. {"Bad format","Feil format"}. {"Birthday","Fødselsdag"}. +{"CAPTCHA web page","CAPTCHA web side"}. {"Change Password","Endre Passord"}. {"Change User Password","Endre Brukers Passord"}. +{"Characters not allowed:","Ikke godtatte tegn:"}. {"Chatroom configuration modified","Samtalerommets konfigurasjon er endret"}. {"Chatroom is created","Samtalerom er opprettet"}. {"Chatroom is destroyed","Samtalerom er fjernet"}. @@ -69,9 +73,11 @@ {"Description:","Beskrivelse:"}. {"Disc only copy","Kun diskkopi"}. {"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 to Text File","Dump til Tekstfil"}. {"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 MUC module","ejabberd MUC modul"}. {"ejabberd Publish-Subscribe module","ejabberd Publish-Subscribe modul"}. @@ -95,8 +101,10 @@ {"Erlang Jabber Server","Erlang Jabber Server"}. {"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\"}]."}. +{"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 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"}. {"February","februar"}. {"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 Password","Hent Brukers Passord"}. {"Get User Statistics","Vis Bruker Statistikk"}. +{"Grant voice to this person?","Gi lyd til denne personen?"}. {"Group ","Gruppe "}. {"Groups","Grupper"}. {"has been banned","har blitt bannlyst"}. @@ -119,6 +128,7 @@ {"has been kicked","har blitt kastet ut"}. {" has set the subject to: "," har satt emnet til: "}. {"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."}. {"Import Directory","Importer Katalog"}. {"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 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 "}. +{"Jabber Account Registration","Jabber Konto Registrering"}. {"Jabber ID","Jabber ID"}. {"Jabber ID ~s is invalid","Ugyldig Jabber ID ~s"}. {"January","januar"}. @@ -163,7 +174,7 @@ {"List of modules to start","Liste over moduler som skal startes"}. {"Low level update script","Lavnivå oppdaterings skript"}. {"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 moderated","Gjør rommet redaktørstyrt"}. {"Make room password protected","Passordbeskytt rommet"}. @@ -176,9 +187,11 @@ {"May","mai"}. {"Membership is required to enter this room","Medlemskap kreves for tilgang til samtalerommet"}. {"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"}. {"Message body","Meldingskropp"}. {"Middle Name","Mellomnavn"}. +{"Minimum interval between voice requests (in seconds)","Minimums interval mellom lyd forespørsler (i sekunder)"}. {"Moderator privileges required","Redaktørprivilegier kreves"}. {"moderators only","kun for redaktører"}. {"Modified modules","Endrede moduler"}. @@ -189,9 +202,11 @@ {"Name:","Navn:"}. {"Name","Navn"}. {"Never","Aldri"}. +{"New Password:","Nytt Passord:"}. {"Nickname","Kallenavn"}. {"Nickname Registration at ","Registrer Kallenavn på "}. {"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 Data","Ingen Data"}. {"Node ID","Node ID"}. @@ -213,12 +228,14 @@ {"Offline Messages:","Frakoblede Meldinger:"}. {"Offline Messages","Frakoblede Meldinger"}. {"OK","OK"}. +{"Old Password:","Gammelt Passord:"}. {"Online","Tilkoblet"}. {"Online Users:","Tilkoblede Brukere:"}. {"Online Users","Tilkoblede 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 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 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 "}. @@ -233,6 +250,7 @@ {"Password ~b","Passord ~b"}. {"Password:","Passord:"}. {"Password","Passord"}. +{"Password Verification:","Passord Bekreftelse:"}. {"Password Verification","Passord Bekreftelse"}. {"Path to Dir","Sti til Katalog"}. {"Path to File","Sti til Fil"}. @@ -241,6 +259,7 @@ {"Persist items to storage","Vedvarende elementer til lagring"}. {"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, wait for a while before sending new voice request","Vennligst vent en stund før du sender en ny lyd forespørsel"}. {"Pong","Pong"}. {"Port ~b","Port ~b"}. {"Port","Port"}. @@ -256,8 +275,10 @@ {"Raw","Rå"}. {"Really delete message of the day?","Virkelig slette melding for dagen?"}. {"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"}. +{"Register","Registrer"}. {"Registration in mod_irc for ","Registrering i mod_irc for "}. {"Remote copy","Lagres ikke lokalt"}. {"Remove All Offline Messages","Fjern Alle Frakoblede Meldinger"}. @@ -294,6 +315,7 @@ {"Send announcement to all users","Send kunngjøring til alle brukere"}. {"September","september"}. {"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 on all hosts and send to online users","Angi melding for dagen på alle maskiner og send til "}. {"Shared Roster Groups","Delte Kontaktgrupper"}. @@ -301,6 +323,7 @@ {"Show Ordinary Table","Vis Ordinær Tabell"}. {"Shut Down Service","Avslutt Tjeneste"}. {"~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 event message type","Spesifiser hendelsesbeskjed type"}. {"Specify the publisher model","Angi publiserings modell"}. @@ -325,9 +348,18 @@ {"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 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 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 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"}. @@ -335,6 +367,7 @@ {"Thursday","torsdag"}. {"Time delay","Tids forsinkelse"}. {"Time","Tid"}. +{"Too many CAPTCHA requests","For mange CAPTCHA forespørsler"}. {"To ~s","Til ~s"}. {"To","Til"}. {"Traffic rate limit is exceeded","Trafikkmengde grense overskredet"}. @@ -343,8 +376,10 @@ {"Transactions Logged:","Loggede Transasksjoner:"}. {"Transactions Restarted:","Omstartede Transasksjoner:"}. {"Tuesday","tirsdag"}. -{"Unable to generate a captcha","Umulig å generere en captcha"}. +{"Unable to generate a CAPTCHA","Umulig å generere en CAPTCHA"}. {"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 on all hosts (don't send)","Oppdater melding for dagen på alle maskiner (ikke send)"}. {"Update ","Oppdater "}. @@ -355,7 +390,9 @@ {"Use of STARTTLS required","Bruk av STARTTLS kreves"}. {"User ","Bruker "}. {"User","Bruker"}. +{"User JID","Bruker JID"}. {"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","Brukere"}. {"Users Last Activity","Brukers Siste Aktivitet"}. @@ -364,13 +401,21 @@ {"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 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"}. {"When to send the last published item","Når skal siste publiserte artikkel sendes"}. {"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 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 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 "}. +{"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 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"}. diff --git a/src/msgs/no.po b/src/msgs/no.po index a38bff774..a2d0b98d4 100644 --- a/src/msgs/no.po +++ b/src/msgs/no.po @@ -1,7 +1,11 @@ msgid "" msgstr "" "Project-Id-Version: 2.1.0-alpha\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" "Last-Translator: Stian B. Barmen \n" +"Language-Team: \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -15,13 +19,13 @@ msgstr "Bruk av STARTTLS kreves" msgid "No resource provided" msgstr "Ingen ressurs angitt" -#: ejabberd_c2s.erl:1149 +#: ejabberd_c2s.erl:1197 msgid "Replaced by new connection" msgstr "Erstattet av en ny tilkobling" -#: ejabberd_c2s.erl:1837 +#: ejabberd_c2s.erl:1885 msgid "Your active privacy list has denied the routing of this stanza." -msgstr "" +msgstr "Din aktive privat liste har blokkert rutingen av denne strofen." #: ejabberd_captcha.erl:96 ejabberd_captcha.erl:152 ejabberd_captcha.erl:178 msgid "Enter the text you see" @@ -33,14 +37,14 @@ msgstr "Dine meldinger til ~s blir blokkert. For å åpne igjen, besøk ~s" #: ejabberd_captcha.erl:134 msgid "If you don't see the CAPTCHA image here, visit the web page." -msgstr "" +msgstr "Dersom du ikke ser CAPTCHA bilde her, besøk web siden. " #: ejabberd_captcha.erl:146 msgid "CAPTCHA web page" -msgstr "" +msgstr "CAPTCHA web side" #: ejabberd_captcha.erl:307 -msgid "The captcha is valid." +msgid "The CAPTCHA is valid." msgstr "Captchaen er ikke gyldig" #: mod_adhoc.erl:95 mod_adhoc.erl:125 mod_adhoc.erl:143 mod_adhoc.erl:161 @@ -55,63 +59,66 @@ msgstr "Ping" msgid "Pong" msgstr "Pong" -#: mod_announce.erl:506 +#: mod_announce.erl:507 mod_announce_odbc.erl:499 msgid "Really delete message of the day?" msgstr "Virkelig slette melding for dagen?" -#: mod_announce.erl:514 mod_configure.erl:1083 mod_configure.erl:1128 +#: mod_announce.erl:515 mod_announce_odbc.erl:507 mod_configure.erl:1083 +#: mod_configure.erl:1128 msgid "Subject" msgstr "Tittel" -#: mod_announce.erl:519 mod_configure.erl:1088 mod_configure.erl:1133 +#: mod_announce.erl:520 mod_announce_odbc.erl:512 mod_configure.erl:1088 +#: mod_configure.erl:1133 msgid "Message body" msgstr "Meldingskropp" -#: mod_announce.erl:599 +#: mod_announce.erl:600 mod_announce_odbc.erl:592 msgid "No body provided for announce message" msgstr "Ingen meldingskropp gitt for kunngjørings melding" -#: mod_announce.erl:634 +#: mod_announce.erl:635 mod_announce_odbc.erl:627 msgid "Announcements" msgstr "Kunngjøringer" -#: mod_announce.erl:636 +#: mod_announce.erl:637 mod_announce_odbc.erl:629 msgid "Send announcement to all users" msgstr "Send kunngjøring til alle brukere" -#: mod_announce.erl:638 +#: mod_announce.erl:639 mod_announce_odbc.erl:631 msgid "Send announcement to all users on all hosts" msgstr "Send kunngjøring til alle brukere på alle maskiner" -#: mod_announce.erl:640 +#: mod_announce.erl:641 mod_announce_odbc.erl:633 msgid "Send announcement to all online users" msgstr "Send kunngjøring alle tilkoblede brukere" -#: mod_announce.erl:642 mod_configure.erl:1078 mod_configure.erl:1123 +#: mod_announce.erl:643 mod_announce_odbc.erl:635 mod_configure.erl:1078 +#: mod_configure.erl:1123 msgid "Send announcement to all online users on all hosts" msgstr "Send kunngjøring til alle tilkoblede brukere på alle " -#: mod_announce.erl:644 +#: mod_announce.erl:645 mod_announce_odbc.erl:637 msgid "Set message of the day and send to online users" msgstr "Angi melding for dagen og send til tilkoblede brukere" -#: mod_announce.erl:646 +#: mod_announce.erl:647 mod_announce_odbc.erl:639 msgid "Set message of the day on all hosts and send to online users" msgstr "Angi melding for dagen på alle maskiner og send til " -#: mod_announce.erl:648 +#: mod_announce.erl:649 mod_announce_odbc.erl:641 msgid "Update message of the day (don't send)" msgstr "Oppdater melding for dagen (ikke send)" -#: mod_announce.erl:650 +#: mod_announce.erl:651 mod_announce_odbc.erl:643 msgid "Update message of the day on all hosts (don't send)" msgstr "Oppdater melding for dagen på alle maskiner (ikke send)" -#: mod_announce.erl:652 +#: mod_announce.erl:653 mod_announce_odbc.erl:645 msgid "Delete message of the day" msgstr "Slett melding for dagen" -#: mod_announce.erl:654 +#: mod_announce.erl:655 mod_announce_odbc.erl:647 msgid "Delete message of the day on all hosts" msgstr "Slett melding for dagen på alle maskiner" @@ -120,7 +127,7 @@ msgstr "Slett melding for dagen på alle maskiner" msgid "Configuration" msgstr "Konfigurasjon" -#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1934 +#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1936 msgid "Database" msgstr "Database" @@ -132,7 +139,7 @@ msgstr "Start Moduler" msgid "Stop Modules" msgstr "Stop Moduler" -#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1935 +#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1937 msgid "Backup" msgstr "Sikkerhetskopier" @@ -161,7 +168,7 @@ msgid "Shut Down Service" msgstr "Avslutt Tjeneste" #: mod_configure.erl:145 mod_configure.erl:518 mod_configure.erl:1197 -#: web/ejabberd_web_admin.erl:1528 +#: web/ejabberd_web_admin.erl:1527 msgid "Add User" msgstr "Legg til Bruker" @@ -213,7 +220,7 @@ msgid "User Management" msgstr "Bruker Behandling" #: mod_configure.erl:500 web/ejabberd_web_admin.erl:1058 -#: web/ejabberd_web_admin.erl:1463 +#: web/ejabberd_web_admin.erl:1462 msgid "Online Users" msgstr "Tilkoblede Brukere" @@ -225,15 +232,15 @@ msgstr "Alle Brukere" msgid "Outgoing s2s Connections" msgstr "Utgående s2s Koblinger" -#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1905 +#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1907 msgid "Running Nodes" msgstr "Kjørende Noder" -#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1907 +#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1909 msgid "Stopped Nodes" msgstr "Stoppede Noder" -#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1951 +#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1953 msgid "Modules" msgstr "Moduler" @@ -364,15 +371,15 @@ msgstr "Tilgangsregler" #: mod_configure.erl:1200 mod_configure.erl:1222 mod_configure.erl:1234 #: mod_configure.erl:1246 mod_configure.erl:1258 mod_configure.erl:1275 -#: mod_configure.erl:1287 mod_configure.erl:1652 mod_configure.erl:1702 -#: mod_configure.erl:1723 mod_roster.erl:943 mod_roster_odbc.erl:1048 -#: mod_vcard.erl:466 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:442 +#: mod_configure.erl:1287 mod_configure.erl:1650 mod_configure.erl:1700 +#: mod_configure.erl:1721 mod_roster.erl:943 mod_roster_odbc.erl:1060 +#: mod_vcard.erl:472 mod_vcard_ldap.erl:554 mod_vcard_odbc.erl:448 msgid "Jabber ID" msgstr "Jabber ID" -#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1653 -#: mod_configure.erl:1865 mod_muc/mod_muc_room.erl:2970 mod_register.erl:235 -#: web/ejabberd_web_admin.erl:1521 +#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1651 +#: mod_configure.erl:1863 mod_muc/mod_muc_room.erl:3224 mod_register.erl:235 +#: web/ejabberd_web_admin.erl:1520 msgid "Password" msgstr "Passord" @@ -388,70 +395,71 @@ msgstr "Antall registrerte brukere" msgid "Number of online users" msgstr "Antall tilkoblede brukere" -#: mod_configure.erl:1684 web/ejabberd_web_admin.erl:1589 -#: web/ejabberd_web_admin.erl:1741 +#: mod_configure.erl:1682 web/ejabberd_web_admin.erl:1588 +#: web/ejabberd_web_admin.erl:1743 msgid "Never" msgstr "Aldri" -#: mod_configure.erl:1698 web/ejabberd_web_admin.erl:1602 -#: web/ejabberd_web_admin.erl:1754 +#: mod_configure.erl:1696 web/ejabberd_web_admin.erl:1601 +#: web/ejabberd_web_admin.erl:1756 msgid "Online" msgstr "Tilkoblet" -#: mod_configure.erl:1703 +#: mod_configure.erl:1701 msgid "Last login" msgstr "Siste pålogging" -#: mod_configure.erl:1724 +#: mod_configure.erl:1722 msgid "Roster size" msgstr "Kontaktliste størrelse" -#: mod_configure.erl:1725 +#: mod_configure.erl:1723 msgid "IP addresses" msgstr "IP adresser" -#: mod_configure.erl:1726 +#: mod_configure.erl:1724 msgid "Resources" msgstr "Ressurser" -#: mod_configure.erl:1852 +#: mod_configure.erl:1850 msgid "Administration of " msgstr "Administrasjon av " -#: mod_configure.erl:1855 +#: mod_configure.erl:1853 msgid "Action on user" msgstr "Handling på bruker" -#: mod_configure.erl:1859 +#: mod_configure.erl:1857 msgid "Edit Properties" msgstr "Redigere Egenskaper" -#: mod_configure.erl:1862 web/ejabberd_web_admin.erl:1767 +#: mod_configure.erl:1860 web/ejabberd_web_admin.erl:1769 msgid "Remove User" msgstr "Fjern Bruker" -#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:336 +#: mod_irc/mod_irc.erl:201 mod_irc/mod_irc_odbc.erl:196 +#: mod_muc/mod_muc.erl:336 mod_muc/mod_muc_odbc.erl:342 msgid "Access denied by service policy" msgstr "Tilgang nektes på grunn av en tjeneste regel" -#: mod_irc/mod_irc.erl:400 +#: mod_irc/mod_irc.erl:401 mod_irc/mod_irc_odbc.erl:398 msgid "IRC Transport" msgstr "IRC Transport" -#: mod_irc/mod_irc.erl:427 +#: mod_irc/mod_irc.erl:428 mod_irc/mod_irc_odbc.erl:425 msgid "ejabberd IRC module" msgstr "ejabberd IRC modul" -#: mod_irc/mod_irc.erl:558 +#: mod_irc/mod_irc.erl:559 mod_irc/mod_irc_odbc.erl:568 msgid "You need an x:data capable client to configure mod_irc settings" msgstr "" "Du trenger en x:data kompatibel klient for å konfigurere mod_irc instillinger" -#: mod_irc/mod_irc.erl:565 +#: mod_irc/mod_irc.erl:566 mod_irc/mod_irc_odbc.erl:575 msgid "Registration in mod_irc for " msgstr "Registrering i mod_irc for " -#: mod_irc/mod_irc.erl:570 +#: mod_irc/mod_irc.erl:571 mod_irc/mod_irc_odbc.erl:580 msgid "" "Enter username, encodings, ports and passwords you wish to use for " "connecting to IRC servers" @@ -459,11 +467,11 @@ msgstr "" "Skriv brukernavn, tekstkoding, porter og passord du ønsker å bruke for " "tilkobling til IRC servere" -#: mod_irc/mod_irc.erl:575 +#: mod_irc/mod_irc.erl:576 mod_irc/mod_irc_odbc.erl:585 msgid "IRC Username" msgstr "IRC Brukernavn" -#: mod_irc/mod_irc.erl:585 +#: mod_irc/mod_irc.erl:586 mod_irc/mod_irc_odbc.erl:595 msgid "" "If you want to specify different ports, passwords, encodings for IRC " "servers, fill this list with values in format '{\"irc server\", \"encoding" @@ -474,7 +482,7 @@ msgstr "" "liste med verdier i formatet '{\"irc server\", \"encoding\", port, \"password" "\"}'. Denne tjenesten bruker \"~s\" som standard, port ~p, empty password." -#: mod_irc/mod_irc.erl:597 +#: mod_irc/mod_irc.erl:598 mod_irc/mod_irc_odbc.erl:607 msgid "" "Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." @@ -482,35 +490,36 @@ msgstr "" "Eksempel: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta." "fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." -#: mod_irc/mod_irc.erl:602 +#: mod_irc/mod_irc.erl:603 mod_irc/mod_irc_odbc.erl:612 msgid "Connections parameters" msgstr "Tilkoblings parametere" -#: mod_irc/mod_irc.erl:727 +#: mod_irc/mod_irc.erl:728 mod_irc/mod_irc_odbc.erl:757 msgid "Join IRC channel" msgstr "Bli med i IRC kanal" -#: mod_irc/mod_irc.erl:731 +#: mod_irc/mod_irc.erl:732 mod_irc/mod_irc_odbc.erl:761 msgid "IRC channel (don't put the first #)" msgstr "IRC kanal (ikke skriv den første #)" -#: mod_irc/mod_irc.erl:736 +#: mod_irc/mod_irc.erl:737 mod_irc/mod_irc_odbc.erl:766 msgid "IRC server" msgstr "IRC server" -#: mod_irc/mod_irc.erl:769 mod_irc/mod_irc.erl:773 +#: mod_irc/mod_irc.erl:770 mod_irc/mod_irc.erl:774 +#: mod_irc/mod_irc_odbc.erl:799 mod_irc/mod_irc_odbc.erl:803 msgid "Join the IRC channel here." msgstr "Bli med i IRC kanalen her. " -#: mod_irc/mod_irc.erl:777 +#: mod_irc/mod_irc.erl:778 mod_irc/mod_irc_odbc.erl:807 msgid "Join the IRC channel in this Jabber ID: ~s" msgstr "Bli med i IRC kanalen med denne Jabber ID: ~s" -#: mod_irc/mod_irc.erl:862 +#: mod_irc/mod_irc.erl:863 mod_irc/mod_irc_odbc.erl:904 msgid "IRC settings" msgstr "IRC instillinger" -#: mod_irc/mod_irc.erl:867 +#: mod_irc/mod_irc.erl:868 mod_irc/mod_irc_odbc.erl:909 msgid "" "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 " @@ -520,71 +529,71 @@ msgstr "" "Trykk 'Neste' for å få flere felt for å fylle i. Trykk 'Fullfør' for å lagre " "innstillingene." -#: mod_irc/mod_irc.erl:873 +#: mod_irc/mod_irc.erl:874 mod_irc/mod_irc_odbc.erl:915 msgid "IRC username" msgstr "IRC brukernavn" -#: mod_irc/mod_irc.erl:922 +#: mod_irc/mod_irc.erl:923 mod_irc/mod_irc_odbc.erl:964 msgid "Password ~b" msgstr "Passord ~b" -#: mod_irc/mod_irc.erl:927 +#: mod_irc/mod_irc.erl:928 mod_irc/mod_irc_odbc.erl:969 msgid "Port ~b" msgstr "Port ~b" -#: mod_irc/mod_irc.erl:932 +#: mod_irc/mod_irc.erl:933 mod_irc/mod_irc_odbc.erl:974 msgid "Encoding for server ~b" msgstr "Tekstkoding for server ~b" -#: mod_irc/mod_irc.erl:941 +#: mod_irc/mod_irc.erl:942 mod_irc/mod_irc_odbc.erl:983 msgid "Server ~b" msgstr "Server ~b" -#: mod_muc/mod_muc.erl:449 +#: mod_muc/mod_muc.erl:449 mod_muc/mod_muc_odbc.erl:456 msgid "Only service administrators are allowed to send service messages" msgstr "Bare tjeneste administratorer er tilatt å sende tjeneste " -#: mod_muc/mod_muc.erl:493 +#: mod_muc/mod_muc.erl:493 mod_muc/mod_muc_odbc.erl:500 msgid "Room creation is denied by service policy" msgstr "Oppretting av rom nektes av en tjenste regel" -#: mod_muc/mod_muc.erl:500 +#: mod_muc/mod_muc.erl:500 mod_muc/mod_muc_odbc.erl:507 msgid "Conference room does not exist" msgstr "Konferanserommet finnes ikke" -#: mod_muc/mod_muc.erl:581 +#: mod_muc/mod_muc.erl:582 mod_muc/mod_muc_odbc.erl:595 msgid "Chatrooms" msgstr "Samtalerom" -#: mod_muc/mod_muc.erl:711 -#, fuzzy +#: mod_muc/mod_muc.erl:712 mod_muc/mod_muc_odbc.erl:729 msgid "You need a client that supports x:data to register the nickname" -msgstr "Du trenger en klient som støtter x:data for å " +msgstr "Du trenger en klient som støtter x:data for å registrere kallenavnet" -#: mod_muc/mod_muc.erl:717 +#: mod_muc/mod_muc.erl:718 mod_muc/mod_muc_odbc.erl:735 msgid "Nickname Registration at " msgstr "Registrer Kallenavn på " -#: mod_muc/mod_muc.erl:721 +#: mod_muc/mod_muc.erl:722 mod_muc/mod_muc_odbc.erl:739 msgid "Enter nickname you want to register" msgstr "Skriv inn kallenavnet du ønsker å registrere" -#: mod_muc/mod_muc.erl:722 mod_roster.erl:944 mod_roster_odbc.erl:1049 -#: mod_vcard.erl:358 mod_vcard.erl:471 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:447 +#: mod_muc/mod_muc.erl:723 mod_muc/mod_muc_odbc.erl:740 +#: mod_muc/mod_muc_room.erl:3810 mod_roster.erl:944 mod_roster_odbc.erl:1061 +#: mod_vcard.erl:364 mod_vcard.erl:477 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:453 msgid "Nickname" msgstr "Kallenavn" -#: mod_muc/mod_muc.erl:761 mod_muc/mod_muc_room.erl:933 -#: mod_muc/mod_muc_room.erl:1577 +#: mod_muc/mod_muc.erl:762 mod_muc/mod_muc_odbc.erl:784 +#: mod_muc/mod_muc_room.erl:1064 mod_muc/mod_muc_room.erl:1787 msgid "That nickname is registered by another person" msgstr "Det kallenavnet er registrert av en annen person" -#: mod_muc/mod_muc.erl:787 +#: mod_muc/mod_muc.erl:788 mod_muc/mod_muc_odbc.erl:811 msgid "You must fill in field \"Nickname\" in the form" msgstr "Du må fylle inn feltet \"Nickname\" i skjemaet" -#: mod_muc/mod_muc.erl:807 +#: mod_muc/mod_muc.erl:808 mod_muc/mod_muc_odbc.erl:831 msgid "ejabberd MUC module" msgstr "ejabberd MUC modul" @@ -625,8 +634,8 @@ msgstr "har blitt kastet ut på grunn av at systemet avslutter" msgid "is now known as" msgstr "er nå kjent som" -#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:689 -#: mod_muc/mod_muc_room.erl:2138 +#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:688 +#: mod_muc/mod_muc_room.erl:2393 msgid " has set the subject to: " msgstr " har satt emnet til: " @@ -722,33 +731,49 @@ msgstr "november" msgid "December" msgstr "desember" -#: mod_muc/mod_muc_log.erl:751 +#: mod_muc/mod_muc_log.erl:750 msgid "Room Configuration" msgstr "Rom Konfigurasjon" -#: mod_muc/mod_muc_log.erl:760 +#: mod_muc/mod_muc_log.erl:759 msgid "Room Occupants" msgstr "Samtalerom Deltakere" -#: mod_muc/mod_muc_room.erl:170 +#: mod_muc/mod_muc_room.erl:174 msgid "Traffic rate limit is exceeded" msgstr "Trafikkmengde grense overskredet" -#: mod_muc/mod_muc_room.erl:242 +#: mod_muc/mod_muc_room.erl:246 msgid "" "This participant is kicked from the room because he sent an error message" msgstr "" "Denne deltakeren er kastet ut av rommet fordi han sendte en feilmelding" -#: mod_muc/mod_muc_room.erl:251 +#: mod_muc/mod_muc_room.erl:255 msgid "It is not allowed to send private messages to the conference" msgstr "Det er ikke tillatt å sende private meldinger til " -#: mod_muc/mod_muc_room.erl:296 +#: mod_muc/mod_muc_room.erl:332 +msgid "Please, wait for a while before sending new voice request" +msgstr "Vennligst vent en stund før du sender en ny lyd forespørsel" + +#: mod_muc/mod_muc_room.erl:347 +msgid "Voice requests are disabled in this conference" +msgstr "Lyd forespørsler er blokkert i denne konferansen" + +#: mod_muc/mod_muc_room.erl:364 +msgid "Failed to extract JID from your voice request approval" +msgstr "Feilet i forsøk på å hente JID fra din lyd forespørsel godkjenning" + +#: mod_muc/mod_muc_room.erl:393 +msgid "Only moderators can approve voice requests" +msgstr "Bare ordstyrer kan godkjenne lyd forespørsler" + +#: mod_muc/mod_muc_room.erl:408 msgid "Improper message type" msgstr "Feilaktig meldingstype" -#: mod_muc/mod_muc_room.erl:406 +#: mod_muc/mod_muc_room.erl:518 msgid "" "This participant is kicked from the room because he sent an error message to " "another participant" @@ -756,229 +781,261 @@ msgstr "" "Denne deltakeren er kastet ut av rommet fordi han sendte en feilmelding til " "en annen deltaker" -#: mod_muc/mod_muc_room.erl:419 +#: mod_muc/mod_muc_room.erl:531 msgid "It is not allowed to send private messages of type \"groupchat\"" msgstr "Det er ikke tillatt å sende private meldinger med typen " -#: mod_muc/mod_muc_room.erl:431 mod_muc/mod_muc_room.erl:486 +#: mod_muc/mod_muc_room.erl:543 mod_muc/mod_muc_room.erl:611 msgid "Recipient is not in the conference room" msgstr "Mottakeren er ikke i konferanserommet" -#: mod_muc/mod_muc_room.erl:451 mod_muc/mod_muc_room.erl:829 -#: mod_muc/mod_muc_room.erl:3609 -msgid "Only occupants are allowed to send messages to the conference" -msgstr "Bare deltakere får sende normale meldinger til konferansen" - -#: mod_muc/mod_muc_room.erl:460 +#: mod_muc/mod_muc_room.erl:564 mod_muc/mod_muc_room.erl:585 msgid "It is not allowed to send private messages" msgstr "Det er ikke tillatt å sende private meldinger" -#: mod_muc/mod_muc_room.erl:509 +#: mod_muc/mod_muc_room.erl:576 mod_muc/mod_muc_room.erl:956 +#: mod_muc/mod_muc_room.erl:4040 +msgid "Only occupants are allowed to send messages to the conference" +msgstr "Bare deltakere får sende normale meldinger til konferansen" + +#: mod_muc/mod_muc_room.erl:634 msgid "Only occupants are allowed to send queries to the conference" msgstr "Bare deltakere er tillatt å sende forespørsler til " -#: mod_muc/mod_muc_room.erl:521 +#: mod_muc/mod_muc_room.erl:646 msgid "Queries to the conference members are not allowed in this room" msgstr "Forespørsler til konferanse medlemmene er ikke tillat i dette rommet" -#: mod_muc/mod_muc_room.erl:805 +#: mod_muc/mod_muc_room.erl:932 msgid "" "Only moderators and participants are allowed to change the subject in this " "room" msgstr "Bare redaktører og deltakere kan endre emnet i dette rommet" -#: mod_muc/mod_muc_room.erl:810 +#: mod_muc/mod_muc_room.erl:937 msgid "Only moderators are allowed to change the subject in this room" msgstr "Bare ordstyrer tillates å endre emnet i dette rommet" -#: mod_muc/mod_muc_room.erl:820 +#: mod_muc/mod_muc_room.erl:947 msgid "Visitors are not allowed to send messages to all occupants" msgstr "Besøkende får ikke sende meldinger til alle deltakere" -#: mod_muc/mod_muc_room.erl:891 +#: mod_muc/mod_muc_room.erl:1021 msgid "" "This participant is kicked from the room because he sent an error presence" msgstr "" "Denne deltakeren er kastet ut av rommet fordi han sendte feil " "tilstederværelse" -#: mod_muc/mod_muc_room.erl:909 +#: mod_muc/mod_muc_room.erl:1040 msgid "Visitors are not allowed to change their nicknames in this room" msgstr "Besøkende får ikke lov å endre kallenavn i dette " -#: mod_muc/mod_muc_room.erl:922 mod_muc/mod_muc_room.erl:1569 +#: mod_muc/mod_muc_room.erl:1053 mod_muc/mod_muc_room.erl:1779 msgid "That nickname is already in use by another occupant" msgstr "Det kallenavnet er allerede i bruk av en annen deltaker" -#: mod_muc/mod_muc_room.erl:1558 +#: mod_muc/mod_muc_room.erl:1768 msgid "You have been banned from this room" msgstr "Du har blitt bannlyst i dette rommet." -#: mod_muc/mod_muc_room.erl:1561 +#: mod_muc/mod_muc_room.erl:1771 msgid "Membership is required to enter this room" msgstr "Medlemskap kreves for tilgang til samtalerommet" -#: mod_muc/mod_muc_room.erl:1597 +#: mod_muc/mod_muc_room.erl:1807 msgid "This room is not anonymous" msgstr "Dette rommet er ikke anonymt" -#: mod_muc/mod_muc_room.erl:1623 +#: mod_muc/mod_muc_room.erl:1833 msgid "A password is required to enter this room" msgstr "Et passord kreves for tilgang til samtalerommet" -#: mod_muc/mod_muc_room.erl:1645 mod_register.erl:246 +#: mod_muc/mod_muc_room.erl:1855 mod_register.erl:246 msgid "Too many CAPTCHA requests" -msgstr "" +msgstr "For mange CAPTCHA forespørsler" -#: mod_muc/mod_muc_room.erl:1654 -msgid "Unable to generate a captcha" -msgstr "Umulig å generere en captcha" +#: mod_muc/mod_muc_room.erl:1864 mod_register.erl:251 +msgid "Unable to generate a CAPTCHA" +msgstr "Umulig å generere en CAPTCHA" -#: mod_muc/mod_muc_room.erl:1664 +#: mod_muc/mod_muc_room.erl:1874 msgid "Incorrect password" msgstr "Feil passord" -#: mod_muc/mod_muc_room.erl:2193 +#: mod_muc/mod_muc_room.erl:2448 msgid "Administrator privileges required" msgstr "Administratorprivilegier kreves" -#: mod_muc/mod_muc_room.erl:2208 +#: mod_muc/mod_muc_room.erl:2463 msgid "Moderator privileges required" msgstr "Redaktørprivilegier kreves" -#: mod_muc/mod_muc_room.erl:2363 +#: mod_muc/mod_muc_room.erl:2619 msgid "Jabber ID ~s is invalid" msgstr "Ugyldig Jabber ID ~s" -#: mod_muc/mod_muc_room.erl:2377 +#: mod_muc/mod_muc_room.erl:2633 msgid "Nickname ~s does not exist in the room" msgstr "Kallenavn ~s eksisterer ikke i dette rommet" -#: mod_muc/mod_muc_room.erl:2403 mod_muc/mod_muc_room.erl:2797 +#: mod_muc/mod_muc_room.erl:2659 mod_muc/mod_muc_room.erl:3049 msgid "Invalid affiliation: ~s" msgstr "Ugyldig rang: ~s" -#: mod_muc/mod_muc_room.erl:2460 +#: mod_muc/mod_muc_room.erl:2713 msgid "Invalid role: ~s" msgstr "Ugyldig rolle: ~s" -#: mod_muc/mod_muc_room.erl:2774 mod_muc/mod_muc_room.erl:2810 +#: mod_muc/mod_muc_room.erl:3026 mod_muc/mod_muc_room.erl:3062 msgid "Owner privileges required" msgstr "Eierprivilegier kreves" -#: mod_muc/mod_muc_room.erl:2941 +#: mod_muc/mod_muc_room.erl:3195 msgid "Configuration of room ~s" msgstr "Konfigurasjon for rom ~s" -#: mod_muc/mod_muc_room.erl:2946 +#: mod_muc/mod_muc_room.erl:3200 msgid "Room title" msgstr "Romtittel" -#: mod_muc/mod_muc_room.erl:2949 mod_muc/mod_muc_room.erl:3388 +#: mod_muc/mod_muc_room.erl:3203 mod_muc/mod_muc_room.erl:3692 msgid "Room description" msgstr "Rom beskrivelse" -#: mod_muc/mod_muc_room.erl:2956 +#: mod_muc/mod_muc_room.erl:3210 msgid "Make room persistent" msgstr "Gjør rommet permanent" -#: mod_muc/mod_muc_room.erl:2961 +#: mod_muc/mod_muc_room.erl:3215 msgid "Make room public searchable" msgstr "Gjør rommet offentlig søkbart" -#: mod_muc/mod_muc_room.erl:2964 +#: mod_muc/mod_muc_room.erl:3218 msgid "Make participants list public" msgstr "Gjør deltakerlisten offentlig" -#: mod_muc/mod_muc_room.erl:2967 +#: mod_muc/mod_muc_room.erl:3221 msgid "Make room password protected" msgstr "Passordbeskytt rommet" -#: mod_muc/mod_muc_room.erl:2978 +#: mod_muc/mod_muc_room.erl:3232 msgid "Maximum Number of Occupants" msgstr "Maksimum Antall Deltakere" -#: mod_muc/mod_muc_room.erl:2985 +#: mod_muc/mod_muc_room.erl:3239 msgid "No limit" msgstr "Ingen grense" -#: mod_muc/mod_muc_room.erl:2996 +#: mod_muc/mod_muc_room.erl:3250 msgid "Present real Jabber IDs to" msgstr "Presenter ekte Jabber IDer til" -#: mod_muc/mod_muc_room.erl:3004 +#: mod_muc/mod_muc_room.erl:3258 mod_muc/mod_muc_room.erl:3292 msgid "moderators only" msgstr "kun for redaktører" -#: mod_muc/mod_muc_room.erl:3006 +#: mod_muc/mod_muc_room.erl:3260 mod_muc/mod_muc_room.erl:3294 msgid "anyone" msgstr "hvem som helst" -#: mod_muc/mod_muc_room.erl:3008 +#: mod_muc/mod_muc_room.erl:3262 msgid "Make room members-only" msgstr "Gjør rommet tilgjengelig kun for medlemmer" -#: mod_muc/mod_muc_room.erl:3011 +#: mod_muc/mod_muc_room.erl:3265 msgid "Make room moderated" msgstr "Gjør rommet redaktørstyrt" -#: mod_muc/mod_muc_room.erl:3014 +#: mod_muc/mod_muc_room.erl:3268 msgid "Default users as participants" msgstr "Standard brukere som deltakere" -#: mod_muc/mod_muc_room.erl:3017 +#: mod_muc/mod_muc_room.erl:3271 msgid "Allow users to change the subject" msgstr "Tillat brukere å endre emne" -#: mod_muc/mod_muc_room.erl:3020 +#: mod_muc/mod_muc_room.erl:3274 msgid "Allow users to send private messages" msgstr "Tillat brukere å sende private meldinger" -#: mod_muc/mod_muc_room.erl:3023 +#: mod_muc/mod_muc_room.erl:3279 +msgid "Allow visitors to send private messages to" +msgstr "Tillat brukere å sende private meldinger til" + +#: mod_muc/mod_muc_room.erl:3290 +msgid "nobody" +msgstr "ingen" + +#: mod_muc/mod_muc_room.erl:3296 msgid "Allow users to query other users" msgstr "Tillat brukere å sende forespørsel til andre brukere" -#: mod_muc/mod_muc_room.erl:3026 +#: mod_muc/mod_muc_room.erl:3299 msgid "Allow users to send invites" msgstr "Tillat brukere å sende invitasjoner" -#: mod_muc/mod_muc_room.erl:3029 +#: mod_muc/mod_muc_room.erl:3302 msgid "Allow visitors to send status text in presence updates" msgstr "Tillat besøkende å sende status tekst i " -#: mod_muc/mod_muc_room.erl:3032 +#: mod_muc/mod_muc_room.erl:3305 msgid "Allow visitors to change nickname" msgstr "Tillat besøkende å endre kallenavn" -#: mod_muc/mod_muc_room.erl:3038 -msgid "Make room captcha protected" -msgstr "Gjør rommet captcha beskyttet" +#: mod_muc/mod_muc_room.erl:3308 +msgid "Allow visitors to send voice requests" +msgstr "Tillat brukere å sende lyd forespørsler" -#: mod_muc/mod_muc_room.erl:3043 +#: mod_muc/mod_muc_room.erl:3311 +msgid "Minimum interval between voice requests (in seconds)" +msgstr "Minimums interval mellom lyd forespørsler (i sekunder)" + +#: mod_muc/mod_muc_room.erl:3317 +msgid "Make room CAPTCHA protected" +msgstr "Gjør rommet CAPTCHA beskyttet" + +#: mod_muc/mod_muc_room.erl:3322 msgid "Exclude Jabber IDs from CAPTCHA challenge" -msgstr "" +msgstr "Ekskluder Jabber IDer fra CAPTCHA utfordring" -#: mod_muc/mod_muc_room.erl:3050 +#: mod_muc/mod_muc_room.erl:3329 msgid "Enable logging" msgstr "Slå på logging" -#: mod_muc/mod_muc_room.erl:3058 +#: mod_muc/mod_muc_room.erl:3337 msgid "You need an x:data capable client to configure room" msgstr "Du trenger en klient som støtter x:data for å " -#: mod_muc/mod_muc_room.erl:3390 +#: mod_muc/mod_muc_room.erl:3694 msgid "Number of occupants" msgstr "Antall deltakere" -#: mod_muc/mod_muc_room.erl:3446 +#: mod_muc/mod_muc_room.erl:3750 msgid "private, " msgstr "privat, " -#: mod_muc/mod_muc_room.erl:3529 +#: mod_muc/mod_muc_room.erl:3799 +msgid "Voice request" +msgstr "Lyd forespørsel" + +#: mod_muc/mod_muc_room.erl:3803 +msgid "Either approve or decline the voice request." +msgstr "Enten godkjenn eller forby lyd forespørselen" + +#: mod_muc/mod_muc_room.erl:3809 +msgid "User JID" +msgstr "Bruker JID" + +#: mod_muc/mod_muc_room.erl:3811 +msgid "Grant voice to this person?" +msgstr "Gi lyd til denne personen?" + +#: mod_muc/mod_muc_room.erl:3960 msgid "~s invites you to the room ~s" msgstr "~s inviterer deg til rommet ~s" -#: mod_muc/mod_muc_room.erl:3538 +#: mod_muc/mod_muc_room.erl:3969 msgid "the password is" msgstr "passordet er" @@ -992,14 +1049,15 @@ msgid "~s's Offline Messages Queue" msgstr "~ss kø for Frakoblede Meldinger" #: mod_offline.erl:563 mod_offline_odbc.erl:411 mod_roster.erl:987 -#: mod_roster_odbc.erl:1092 mod_shared_roster.erl:896 -#: mod_shared_roster.erl:1005 web/ejabberd_web_admin.erl:833 +#: mod_roster_odbc.erl:1104 mod_shared_roster.erl:901 +#: mod_shared_roster.erl:1010 mod_shared_roster_odbc.erl:930 +#: mod_shared_roster_odbc.erl:1039 web/ejabberd_web_admin.erl:833 #: web/ejabberd_web_admin.erl:874 web/ejabberd_web_admin.erl:942 #: web/ejabberd_web_admin.erl:978 web/ejabberd_web_admin.erl:1019 -#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1758 -#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1961 -#: web/ejabberd_web_admin.erl:2030 web/ejabberd_web_admin.erl:2134 -#: web/ejabberd_web_admin.erl:2159 web/ejabberd_web_admin.erl:2247 +#: web/ejabberd_web_admin.erl:1508 web/ejabberd_web_admin.erl:1760 +#: web/ejabberd_web_admin.erl:1931 web/ejabberd_web_admin.erl:1963 +#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2135 +#: web/ejabberd_web_admin.erl:2160 web/ejabberd_web_admin.erl:2248 msgid "Submitted" msgstr "Innsendt" @@ -1019,8 +1077,9 @@ msgstr "Til" msgid "Packet" msgstr "Pakke" -#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:903 -#: web/ejabberd_web_admin.erl:882 web/ejabberd_web_admin.erl:986 +#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:908 +#: mod_shared_roster_odbc.erl:937 web/ejabberd_web_admin.erl:882 +#: web/ejabberd_web_admin.erl:986 msgid "Delete Selected" msgstr "Slett valgte" @@ -1036,252 +1095,248 @@ msgstr "Fjern Alle Frakoblede Meldinger" msgid "ejabberd SOCKS5 Bytestreams module" msgstr "ejabberd SOCKS5 Bytestreams modul" -#: mod_pubsub/mod_pubsub.erl:1119 mod_pubsub/mod_pubsub_odbc.erl:928 +#: mod_pubsub/mod_pubsub.erl:1120 mod_pubsub/mod_pubsub_odbc.erl:929 msgid "Publish-Subscribe" msgstr "Publish-Subscribe" -#: mod_pubsub/mod_pubsub.erl:1213 mod_pubsub/mod_pubsub_odbc.erl:1024 +#: mod_pubsub/mod_pubsub.erl:1214 mod_pubsub/mod_pubsub_odbc.erl:1025 msgid "ejabberd Publish-Subscribe module" msgstr "ejabberd Publish-Subscribe modul" -#: mod_pubsub/mod_pubsub.erl:1496 mod_pubsub/mod_pubsub_odbc.erl:1311 +#: mod_pubsub/mod_pubsub.erl:1497 mod_pubsub/mod_pubsub_odbc.erl:1312 msgid "PubSub subscriber request" msgstr "PubSub abonements forespørsel" -#: mod_pubsub/mod_pubsub.erl:1498 mod_pubsub/mod_pubsub_odbc.erl:1313 +#: mod_pubsub/mod_pubsub.erl:1499 mod_pubsub/mod_pubsub_odbc.erl:1314 msgid "Choose whether to approve this entity's subscription." msgstr "Velg om du vil godkjenne denne eksistensens abonement" -#: mod_pubsub/mod_pubsub.erl:1504 mod_pubsub/mod_pubsub_odbc.erl:1319 +#: mod_pubsub/mod_pubsub.erl:1505 mod_pubsub/mod_pubsub_odbc.erl:1320 msgid "Node ID" msgstr "Node ID" -#: mod_pubsub/mod_pubsub.erl:1509 mod_pubsub/mod_pubsub_odbc.erl:1324 +#: mod_pubsub/mod_pubsub.erl:1510 mod_pubsub/mod_pubsub_odbc.erl:1325 msgid "Subscriber Address" msgstr "Abonnements Adresse" -#: mod_pubsub/mod_pubsub.erl:1515 mod_pubsub/mod_pubsub_odbc.erl:1330 +#: mod_pubsub/mod_pubsub.erl:1516 mod_pubsub/mod_pubsub_odbc.erl:1331 msgid "Allow this Jabber ID to subscribe to this pubsub node?" msgstr "Tillat denne Jabber ID å abonnere på denne pubsub " -#: mod_pubsub/mod_pubsub.erl:3416 mod_pubsub/mod_pubsub_odbc.erl:3229 +#: mod_pubsub/mod_pubsub.erl:3474 mod_pubsub/mod_pubsub_odbc.erl:3287 msgid "Deliver payloads with event notifications" msgstr "Send innhold sammen med kunngjøringer" -#: mod_pubsub/mod_pubsub.erl:3417 mod_pubsub/mod_pubsub_odbc.erl:3230 +#: mod_pubsub/mod_pubsub.erl:3475 mod_pubsub/mod_pubsub_odbc.erl:3288 msgid "Deliver event notifications" msgstr "Lever begivenhets kunngjøringer" -#: mod_pubsub/mod_pubsub.erl:3418 mod_pubsub/mod_pubsub_odbc.erl:3231 +#: mod_pubsub/mod_pubsub.erl:3476 mod_pubsub/mod_pubsub_odbc.erl:3289 msgid "Notify subscribers when the node configuration changes" msgstr "Informer abonnenter når node konfigurasjonen endres" -#: mod_pubsub/mod_pubsub.erl:3419 mod_pubsub/mod_pubsub_odbc.erl:3232 +#: mod_pubsub/mod_pubsub.erl:3477 mod_pubsub/mod_pubsub_odbc.erl:3290 msgid "Notify subscribers when the node is deleted" msgstr "Informer abonnenter når noden slettes" -#: mod_pubsub/mod_pubsub.erl:3420 mod_pubsub/mod_pubsub_odbc.erl:3233 +#: mod_pubsub/mod_pubsub.erl:3478 mod_pubsub/mod_pubsub_odbc.erl:3291 msgid "Notify subscribers when items are removed from the node" msgstr "Informer abonnenter når elementer fjernes fra noden" -#: mod_pubsub/mod_pubsub.erl:3421 mod_pubsub/mod_pubsub_odbc.erl:3234 +#: mod_pubsub/mod_pubsub.erl:3479 mod_pubsub/mod_pubsub_odbc.erl:3292 msgid "Persist items to storage" msgstr "Vedvarende elementer til lagring" -#: mod_pubsub/mod_pubsub.erl:3422 mod_pubsub/mod_pubsub_odbc.erl:3235 +#: mod_pubsub/mod_pubsub.erl:3480 mod_pubsub/mod_pubsub_odbc.erl:3293 msgid "A friendly name for the node" msgstr "Et vennlig navn for noden" -#: mod_pubsub/mod_pubsub.erl:3423 mod_pubsub/mod_pubsub_odbc.erl:3236 +#: mod_pubsub/mod_pubsub.erl:3481 mod_pubsub/mod_pubsub_odbc.erl:3294 msgid "Max # of items to persist" msgstr "Høyeste # elementer som skal lagres" -#: mod_pubsub/mod_pubsub.erl:3424 mod_pubsub/mod_pubsub_odbc.erl:3237 +#: mod_pubsub/mod_pubsub.erl:3482 mod_pubsub/mod_pubsub_odbc.erl:3295 msgid "Whether to allow subscriptions" msgstr "Om man skal tillate abonnenter" -#: mod_pubsub/mod_pubsub.erl:3425 mod_pubsub/mod_pubsub_odbc.erl:3238 +#: mod_pubsub/mod_pubsub.erl:3483 mod_pubsub/mod_pubsub_odbc.erl:3296 msgid "Specify the access model" msgstr "Spesifiser aksess modellen" -#: mod_pubsub/mod_pubsub.erl:3428 mod_pubsub/mod_pubsub_odbc.erl:3241 +#: mod_pubsub/mod_pubsub.erl:3486 mod_pubsub/mod_pubsub_odbc.erl:3299 msgid "Roster groups allowed to subscribe" msgstr "Kontaktliste grupper som tillates å abonnere" -#: mod_pubsub/mod_pubsub.erl:3429 mod_pubsub/mod_pubsub_odbc.erl:3242 +#: mod_pubsub/mod_pubsub.erl:3487 mod_pubsub/mod_pubsub_odbc.erl:3300 msgid "Specify the publisher model" msgstr "Angi publiserings modell" -#: mod_pubsub/mod_pubsub.erl:3431 mod_pubsub/mod_pubsub_odbc.erl:3244 +#: mod_pubsub/mod_pubsub.erl:3489 mod_pubsub/mod_pubsub_odbc.erl:3302 msgid "Purge all items when the relevant publisher goes offline" msgstr "Rydd alle elementer når den aktuelle utgiveren logger av" -#: mod_pubsub/mod_pubsub.erl:3432 mod_pubsub/mod_pubsub_odbc.erl:3245 +#: mod_pubsub/mod_pubsub.erl:3490 mod_pubsub/mod_pubsub_odbc.erl:3303 msgid "Specify the event message type" msgstr "Spesifiser hendelsesbeskjed type" -#: mod_pubsub/mod_pubsub.erl:3434 mod_pubsub/mod_pubsub_odbc.erl:3247 +#: mod_pubsub/mod_pubsub.erl:3492 mod_pubsub/mod_pubsub_odbc.erl:3305 msgid "Max payload size in bytes" msgstr "Største innholdsstørrelse i byte" -#: mod_pubsub/mod_pubsub.erl:3435 mod_pubsub/mod_pubsub_odbc.erl:3248 +#: mod_pubsub/mod_pubsub.erl:3493 mod_pubsub/mod_pubsub_odbc.erl:3306 msgid "When to send the last published item" msgstr "Når skal siste publiserte artikkel sendes" -#: mod_pubsub/mod_pubsub.erl:3437 mod_pubsub/mod_pubsub_odbc.erl:3250 +#: mod_pubsub/mod_pubsub.erl:3495 mod_pubsub/mod_pubsub_odbc.erl:3308 msgid "Only deliver notifications to available users" msgstr "Send kunngjøringer bare til tilgjengelige brukere" -#: mod_pubsub/mod_pubsub.erl:3438 mod_pubsub/mod_pubsub_odbc.erl:3251 +#: mod_pubsub/mod_pubsub.erl:3496 mod_pubsub/mod_pubsub_odbc.erl:3309 msgid "The collections with which a node is affiliated" msgstr "Samlingene som en node er assosiert med" #: mod_register.erl:193 msgid "The CAPTCHA verification has failed" -msgstr "" +msgstr "CAPTCHA godkjenningen har feilet" #: mod_register.erl:220 -#, fuzzy msgid "You need a client that supports x:data and CAPTCHA to register" -msgstr "Du trenger en klient som støtter x:data for å " +msgstr "Du trenger en klient som støtter x:data og CAPTCHA for registrering " #: mod_register.erl:226 mod_register.erl:265 msgid "Choose a username and password to register with this server" msgstr "Velg et brukernavn og passord for å registrere på " -#: mod_register.erl:230 mod_vcard.erl:358 mod_vcard_odbc.erl:336 -#: web/ejabberd_web_admin.erl:1516 web/ejabberd_web_admin.erl:1573 +#: mod_register.erl:230 mod_vcard.erl:364 mod_vcard_odbc.erl:342 +#: web/ejabberd_web_admin.erl:1515 web/ejabberd_web_admin.erl:1572 msgid "User" msgstr "Bruker" -#: mod_register.erl:251 -#, fuzzy -msgid "Unable to generate a CAPTCHA" -msgstr "Umulig å generere en captcha" - #: mod_register.erl:316 mod_register.erl:361 -#, fuzzy msgid "The password is too weak" -msgstr "passordet er" +msgstr "Passordet er for svakt" #: mod_register.erl:365 msgid "Users are not allowed to register accounts so quickly" msgstr "Brukere får ikke lov til registrere kontoer så fort" -#: mod_roster.erl:938 mod_roster_odbc.erl:1043 web/ejabberd_web_admin.erl:1699 -#: web/ejabberd_web_admin.erl:1884 web/ejabberd_web_admin.erl:1895 -#: web/ejabberd_web_admin.erl:2218 +#: mod_roster.erl:938 mod_roster_odbc.erl:1055 web/ejabberd_web_admin.erl:1701 +#: web/ejabberd_web_admin.erl:1886 web/ejabberd_web_admin.erl:1897 +#: web/ejabberd_web_admin.erl:2219 msgid "None" msgstr "Ingen" -#: mod_roster.erl:945 mod_roster_odbc.erl:1050 +#: mod_roster.erl:945 mod_roster_odbc.erl:1062 msgid "Subscription" msgstr "Abonnement" -#: mod_roster.erl:946 mod_roster_odbc.erl:1051 +#: mod_roster.erl:946 mod_roster_odbc.erl:1063 msgid "Pending" msgstr "Ventende" -#: mod_roster.erl:947 mod_roster_odbc.erl:1052 +#: mod_roster.erl:947 mod_roster_odbc.erl:1064 msgid "Groups" msgstr "Grupper" -#: mod_roster.erl:974 mod_roster_odbc.erl:1079 +#: mod_roster.erl:974 mod_roster_odbc.erl:1091 msgid "Validate" msgstr "Bekrefte gyldighet" -#: mod_roster.erl:982 mod_roster_odbc.erl:1087 +#: mod_roster.erl:982 mod_roster_odbc.erl:1099 msgid "Remove" msgstr "Fjern" -#: mod_roster.erl:985 mod_roster_odbc.erl:1090 +#: mod_roster.erl:985 mod_roster_odbc.erl:1102 msgid "Roster of " msgstr "Kontaktliste for " -#: mod_roster.erl:988 mod_roster_odbc.erl:1093 mod_shared_roster.erl:897 -#: mod_shared_roster.erl:1006 web/ejabberd_web_admin.erl:834 +#: mod_roster.erl:988 mod_roster_odbc.erl:1105 mod_shared_roster.erl:902 +#: mod_shared_roster.erl:1011 mod_shared_roster_odbc.erl:931 +#: mod_shared_roster_odbc.erl:1040 web/ejabberd_web_admin.erl:834 #: web/ejabberd_web_admin.erl:875 web/ejabberd_web_admin.erl:943 #: web/ejabberd_web_admin.erl:979 web/ejabberd_web_admin.erl:1020 -#: web/ejabberd_web_admin.erl:1510 web/ejabberd_web_admin.erl:1759 -#: web/ejabberd_web_admin.erl:1930 web/ejabberd_web_admin.erl:2135 -#: web/ejabberd_web_admin.erl:2160 +#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1761 +#: web/ejabberd_web_admin.erl:1932 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2161 msgid "Bad format" msgstr "Feil format" -#: mod_roster.erl:995 mod_roster_odbc.erl:1100 +#: mod_roster.erl:995 mod_roster_odbc.erl:1112 msgid "Add Jabber ID" msgstr "Legg til Jabber ID" -#: mod_roster.erl:1094 mod_roster_odbc.erl:1199 +#: mod_roster.erl:1094 mod_roster_odbc.erl:1211 msgid "Roster" msgstr "Kontaktliste" -#: mod_shared_roster.erl:852 mod_shared_roster.erl:894 -#: mod_shared_roster.erl:1002 +#: mod_shared_roster.erl:857 mod_shared_roster.erl:899 +#: mod_shared_roster.erl:1007 mod_shared_roster_odbc.erl:886 +#: mod_shared_roster_odbc.erl:928 mod_shared_roster_odbc.erl:1036 msgid "Shared Roster Groups" msgstr "Delte Kontaktgrupper" -#: mod_shared_roster.erl:890 web/ejabberd_web_admin.erl:1366 -#: web/ejabberd_web_admin.erl:2460 +#: mod_shared_roster.erl:895 mod_shared_roster_odbc.erl:924 +#: web/ejabberd_web_admin.erl:1365 web/ejabberd_web_admin.erl:2461 msgid "Add New" msgstr "Legg til ny" -#: mod_shared_roster.erl:973 +#: mod_shared_roster.erl:978 mod_shared_roster_odbc.erl:1007 msgid "Name:" msgstr "Navn:" -#: mod_shared_roster.erl:978 +#: mod_shared_roster.erl:983 mod_shared_roster_odbc.erl:1012 msgid "Description:" msgstr "Beskrivelse:" -#: mod_shared_roster.erl:986 +#: mod_shared_roster.erl:991 mod_shared_roster_odbc.erl:1020 msgid "Members:" msgstr "Medlemmer:" -#: mod_shared_roster.erl:994 +#: mod_shared_roster.erl:999 mod_shared_roster_odbc.erl:1028 msgid "Displayed Groups:" msgstr "Viste grupper:" -#: mod_shared_roster.erl:1003 +#: mod_shared_roster.erl:1008 mod_shared_roster_odbc.erl:1037 msgid "Group " msgstr "Gruppe " -#: mod_shared_roster.erl:1012 web/ejabberd_web_admin.erl:840 -#: web/ejabberd_web_admin.erl:884 web/ejabberd_web_admin.erl:949 -#: web/ejabberd_web_admin.erl:1026 web/ejabberd_web_admin.erl:2015 +#: mod_shared_roster.erl:1017 mod_shared_roster_odbc.erl:1046 +#: web/ejabberd_web_admin.erl:840 web/ejabberd_web_admin.erl:884 +#: web/ejabberd_web_admin.erl:949 web/ejabberd_web_admin.erl:1026 +#: web/ejabberd_web_admin.erl:2017 msgid "Submit" msgstr "Send" -#: mod_vcard.erl:165 mod_vcard_ldap.erl:237 mod_vcard_odbc.erl:129 +#: mod_vcard.erl:165 mod_vcard_ldap.erl:238 mod_vcard_odbc.erl:129 msgid "Erlang Jabber Server" msgstr "Erlang Jabber Server" -#: mod_vcard.erl:358 mod_vcard.erl:472 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:448 +#: mod_vcard.erl:364 mod_vcard.erl:478 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:454 msgid "Birthday" msgstr "Fødselsdag" -#: mod_vcard.erl:358 mod_vcard.erl:474 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:450 +#: mod_vcard.erl:364 mod_vcard.erl:480 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:456 msgid "City" msgstr "By" -#: mod_vcard.erl:358 mod_vcard.erl:473 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:449 +#: mod_vcard.erl:364 mod_vcard.erl:479 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:455 msgid "Country" msgstr "Land" -#: mod_vcard.erl:358 mod_vcard.erl:475 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:451 +#: mod_vcard.erl:364 mod_vcard.erl:481 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:457 msgid "Email" msgstr "Epost" -#: mod_vcard.erl:358 mod_vcard.erl:470 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:446 +#: mod_vcard.erl:364 mod_vcard.erl:476 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:452 msgid "Family Name" msgstr "Etternavn" -#: mod_vcard.erl:358 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_odbc.erl:342 msgid "" "Fill in the form to search for any matching Jabber User (Add * to the end of " "field to match substring)" @@ -1289,52 +1344,52 @@ msgstr "" "Fyll inn skjemaet for å søke etter Jabber bruker (Legg til * på slutten av " "feltet for å treffe alle som starter slik)" -#: mod_vcard.erl:358 mod_vcard.erl:467 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:443 +#: mod_vcard.erl:364 mod_vcard.erl:473 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:449 msgid "Full Name" msgstr "Fullstendig Navn" -#: mod_vcard.erl:358 mod_vcard.erl:469 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:445 +#: mod_vcard.erl:364 mod_vcard.erl:475 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:451 msgid "Middle Name" msgstr "Mellomnavn" -#: mod_vcard.erl:358 mod_vcard.erl:468 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:444 web/ejabberd_web_admin.erl:2004 +#: mod_vcard.erl:364 mod_vcard.erl:474 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:450 web/ejabberd_web_admin.erl:2006 msgid "Name" msgstr "Navn" -#: mod_vcard.erl:358 mod_vcard.erl:476 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:452 +#: mod_vcard.erl:364 mod_vcard.erl:482 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:458 msgid "Organization Name" msgstr "Organisasjonsnavn" -#: mod_vcard.erl:358 mod_vcard.erl:477 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:453 +#: mod_vcard.erl:364 mod_vcard.erl:483 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:459 msgid "Organization Unit" msgstr "Organisasjonsenhet" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "Search users in " msgstr "Søk etter brukere i " -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "You need an x:data capable client to search" msgstr "Du tregner en klient som støtter x:data for å kunne " -#: mod_vcard.erl:383 mod_vcard_ldap.erl:483 mod_vcard_odbc.erl:361 +#: mod_vcard.erl:389 mod_vcard_ldap.erl:487 mod_vcard_odbc.erl:367 msgid "vCard User Search" msgstr "vCard Bruker Søk" -#: mod_vcard.erl:439 mod_vcard_ldap.erl:537 mod_vcard_odbc.erl:415 +#: mod_vcard.erl:445 mod_vcard_ldap.erl:541 mod_vcard_odbc.erl:421 msgid "ejabberd vCard module" msgstr "ejabberd vCard modul" -#: mod_vcard.erl:463 mod_vcard_ldap.erl:547 mod_vcard_odbc.erl:439 +#: mod_vcard.erl:469 mod_vcard_ldap.erl:551 mod_vcard_odbc.erl:445 msgid "Search Results for " msgstr "Søke Resultater for " -#: mod_vcard_ldap.erl:458 +#: mod_vcard_ldap.erl:462 msgid "Fill in fields to search for any matching Jabber User" msgstr "Fyll inn felt for å søke etter Jabber brukere" @@ -1395,7 +1450,7 @@ msgstr "Vis Ordinær Tabell" msgid "Show Integral Table" msgstr "Vis Integral Tabell" -#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1937 +#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1939 msgid "Statistics" msgstr "Statistikk" @@ -1407,116 +1462,116 @@ msgstr "Finnes Ikke" msgid "Node not found" msgstr "Noden finnes ikke" -#: web/ejabberd_web_admin.erl:1461 +#: web/ejabberd_web_admin.erl:1460 msgid "Host" msgstr "Maskin" -#: web/ejabberd_web_admin.erl:1462 +#: web/ejabberd_web_admin.erl:1461 msgid "Registered Users" msgstr "Registrerte Brukere" -#: web/ejabberd_web_admin.erl:1574 +#: web/ejabberd_web_admin.erl:1573 msgid "Offline Messages" msgstr "Frakoblede Meldinger" -#: web/ejabberd_web_admin.erl:1575 web/ejabberd_web_admin.erl:1765 +#: web/ejabberd_web_admin.erl:1574 web/ejabberd_web_admin.erl:1767 msgid "Last Activity" msgstr "Siste Aktivitet" -#: web/ejabberd_web_admin.erl:1657 web/ejabberd_web_admin.erl:1673 +#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 msgid "Registered Users:" msgstr "Registrerte Brukere:" -#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 -#: web/ejabberd_web_admin.erl:2191 +#: web/ejabberd_web_admin.erl:1661 web/ejabberd_web_admin.erl:1677 +#: web/ejabberd_web_admin.erl:2192 msgid "Online Users:" msgstr "Tilkoblede Brukere:" -#: web/ejabberd_web_admin.erl:1661 +#: web/ejabberd_web_admin.erl:1663 msgid "Outgoing s2s Connections:" msgstr "Utgående s2s Koblinger" -#: web/ejabberd_web_admin.erl:1663 +#: web/ejabberd_web_admin.erl:1665 msgid "Outgoing s2s Servers:" msgstr "Utgående s2s Tjenere" -#: web/ejabberd_web_admin.erl:1732 web/mod_register_web.erl:175 +#: web/ejabberd_web_admin.erl:1734 web/mod_register_web.erl:175 #: web/mod_register_web.erl:372 web/mod_register_web.erl:381 #: web/mod_register_web.erl:411 msgid "Change Password" msgstr "Endre Passord" -#: web/ejabberd_web_admin.erl:1756 +#: web/ejabberd_web_admin.erl:1758 msgid "User " msgstr "Bruker " -#: web/ejabberd_web_admin.erl:1763 +#: web/ejabberd_web_admin.erl:1765 msgid "Connected Resources:" msgstr "Tilkoblede Ressurser:" -#: web/ejabberd_web_admin.erl:1764 web/mod_register_web.erl:227 +#: web/ejabberd_web_admin.erl:1766 web/mod_register_web.erl:227 #: web/mod_register_web.erl:519 msgid "Password:" msgstr "Passord:" -#: web/ejabberd_web_admin.erl:1826 +#: web/ejabberd_web_admin.erl:1828 msgid "No Data" msgstr "Ingen Data" -#: web/ejabberd_web_admin.erl:1904 +#: web/ejabberd_web_admin.erl:1906 msgid "Nodes" msgstr "Noder" -#: web/ejabberd_web_admin.erl:1927 web/ejabberd_web_admin.erl:1949 +#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1951 msgid "Node " msgstr "Node " -#: web/ejabberd_web_admin.erl:1936 +#: web/ejabberd_web_admin.erl:1938 msgid "Listened Ports" msgstr "Lyttende Porter" -#: web/ejabberd_web_admin.erl:1938 web/ejabberd_web_admin.erl:2259 -#: web/ejabberd_web_admin.erl:2447 +#: web/ejabberd_web_admin.erl:1940 web/ejabberd_web_admin.erl:2260 +#: web/ejabberd_web_admin.erl:2448 msgid "Update" msgstr "Oppdatere" -#: web/ejabberd_web_admin.erl:1941 web/ejabberd_web_admin.erl:2568 +#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2569 msgid "Restart" msgstr "Starte på nytt" -#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2570 +#: web/ejabberd_web_admin.erl:1945 web/ejabberd_web_admin.erl:2571 msgid "Stop" msgstr "Stoppe" -#: web/ejabberd_web_admin.erl:1957 +#: web/ejabberd_web_admin.erl:1959 msgid "RPC Call Error" msgstr "RPC Kall Feil" -#: web/ejabberd_web_admin.erl:1998 +#: web/ejabberd_web_admin.erl:2000 msgid "Database Tables at " msgstr "Database Tabeller på " -#: web/ejabberd_web_admin.erl:2005 +#: web/ejabberd_web_admin.erl:2007 msgid "Storage Type" msgstr "Lagringstype" -#: web/ejabberd_web_admin.erl:2006 +#: web/ejabberd_web_admin.erl:2008 msgid "Elements" msgstr "Elementer" -#: web/ejabberd_web_admin.erl:2007 +#: web/ejabberd_web_admin.erl:2009 msgid "Memory" msgstr "Minne" -#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2032 web/ejabberd_web_admin.erl:2137 msgid "Error" msgstr "Feil" -#: web/ejabberd_web_admin.erl:2033 +#: web/ejabberd_web_admin.erl:2034 msgid "Backup of " msgstr "Sikkerhetskopi av " -#: web/ejabberd_web_admin.erl:2035 +#: web/ejabberd_web_admin.erl:2036 msgid "" "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 " @@ -1526,181 +1581,181 @@ msgstr "" "databasen. Dersom du bruker ODBC modulen må du også ta backup av din SQL " "database." -#: web/ejabberd_web_admin.erl:2040 +#: web/ejabberd_web_admin.erl:2041 msgid "Store binary backup:" msgstr "Lagre binær sikkerhetskopi:" -#: web/ejabberd_web_admin.erl:2044 web/ejabberd_web_admin.erl:2051 -#: web/ejabberd_web_admin.erl:2059 web/ejabberd_web_admin.erl:2066 -#: web/ejabberd_web_admin.erl:2073 web/ejabberd_web_admin.erl:2080 -#: web/ejabberd_web_admin.erl:2087 web/ejabberd_web_admin.erl:2095 -#: web/ejabberd_web_admin.erl:2102 web/ejabberd_web_admin.erl:2109 +#: web/ejabberd_web_admin.erl:2045 web/ejabberd_web_admin.erl:2052 +#: web/ejabberd_web_admin.erl:2060 web/ejabberd_web_admin.erl:2067 +#: web/ejabberd_web_admin.erl:2074 web/ejabberd_web_admin.erl:2081 +#: web/ejabberd_web_admin.erl:2088 web/ejabberd_web_admin.erl:2096 +#: web/ejabberd_web_admin.erl:2103 web/ejabberd_web_admin.erl:2110 msgid "OK" msgstr "OK" -#: web/ejabberd_web_admin.erl:2047 +#: web/ejabberd_web_admin.erl:2048 msgid "Restore binary backup immediately:" msgstr "Gjenopprette binær backup umiddelbart:" -#: web/ejabberd_web_admin.erl:2055 +#: web/ejabberd_web_admin.erl:2056 msgid "" "Restore binary backup after next ejabberd restart (requires less memory):" msgstr "" "Gjenopprette binær backup etter neste ejabberd omstart (krever mindre minne):" -#: web/ejabberd_web_admin.erl:2062 +#: web/ejabberd_web_admin.erl:2063 msgid "Store plain text backup:" msgstr "Lagre rentekst sikkerhetskopi:" -#: web/ejabberd_web_admin.erl:2069 +#: web/ejabberd_web_admin.erl:2070 msgid "Restore plain text backup immediately:" msgstr "Gjenopprette rentekst sikkerhetskopi umiddelbart:" -#: web/ejabberd_web_admin.erl:2076 +#: web/ejabberd_web_admin.erl:2077 msgid "Import users data from a PIEFXIS file (XEP-0227):" msgstr "Importer brukeres data fra en PIEFXIS fil (XEP-0227):" -#: web/ejabberd_web_admin.erl:2083 +#: web/ejabberd_web_admin.erl:2084 msgid "Export data of all users in the server to PIEFXIS files (XEP-0227):" msgstr "Eksporter data om alle brukere i en server til PIEFXIS filer" -#: web/ejabberd_web_admin.erl:2090 +#: web/ejabberd_web_admin.erl:2091 msgid "Export data of users in a host to PIEFXIS files (XEP-0227):" msgstr "Eksporter data om alle brukere i en host til PIEFXIS filer (XEP-0227):" -#: web/ejabberd_web_admin.erl:2098 +#: web/ejabberd_web_admin.erl:2099 msgid "Import user data from jabberd14 spool file:" msgstr "Importer bruker data fra jabberd14 spoolfiler:" -#: web/ejabberd_web_admin.erl:2105 +#: web/ejabberd_web_admin.erl:2106 msgid "Import users data from jabberd14 spool directory:" msgstr "Importer brukeres data fra jabberd14 spoolfil katalog:" -#: web/ejabberd_web_admin.erl:2131 +#: web/ejabberd_web_admin.erl:2132 msgid "Listened Ports at " msgstr "Lyttende Porter på " -#: web/ejabberd_web_admin.erl:2156 +#: web/ejabberd_web_admin.erl:2157 msgid "Modules at " msgstr "Moduler på " -#: web/ejabberd_web_admin.erl:2182 +#: web/ejabberd_web_admin.erl:2183 msgid "Statistics of ~p" msgstr "Statistikk for ~p" -#: web/ejabberd_web_admin.erl:2185 +#: web/ejabberd_web_admin.erl:2186 msgid "Uptime:" msgstr "Oppetid:" -#: web/ejabberd_web_admin.erl:2188 +#: web/ejabberd_web_admin.erl:2189 msgid "CPU Time:" msgstr "CPU Tid:" -#: web/ejabberd_web_admin.erl:2194 +#: web/ejabberd_web_admin.erl:2195 msgid "Transactions Committed:" msgstr "Sendte Transaksjoner:" -#: web/ejabberd_web_admin.erl:2197 +#: web/ejabberd_web_admin.erl:2198 msgid "Transactions Aborted:" msgstr "Avbrutte Transasksjoner:" -#: web/ejabberd_web_admin.erl:2200 +#: web/ejabberd_web_admin.erl:2201 msgid "Transactions Restarted:" msgstr "Omstartede Transasksjoner:" -#: web/ejabberd_web_admin.erl:2203 +#: web/ejabberd_web_admin.erl:2204 msgid "Transactions Logged:" msgstr "Loggede Transasksjoner:" -#: web/ejabberd_web_admin.erl:2245 +#: web/ejabberd_web_admin.erl:2246 msgid "Update " msgstr "Oppdater " -#: web/ejabberd_web_admin.erl:2253 +#: web/ejabberd_web_admin.erl:2254 msgid "Update plan" msgstr "Oppdaterings plan" -#: web/ejabberd_web_admin.erl:2254 +#: web/ejabberd_web_admin.erl:2255 msgid "Modified modules" msgstr "Endrede moduler" -#: web/ejabberd_web_admin.erl:2255 +#: web/ejabberd_web_admin.erl:2256 msgid "Update script" msgstr "Oppdaterings skript" -#: web/ejabberd_web_admin.erl:2256 +#: web/ejabberd_web_admin.erl:2257 msgid "Low level update script" msgstr "Lavnivå oppdaterings skript" -#: web/ejabberd_web_admin.erl:2257 +#: web/ejabberd_web_admin.erl:2258 msgid "Script check" msgstr "Skript sjekk" -#: web/ejabberd_web_admin.erl:2425 +#: web/ejabberd_web_admin.erl:2426 msgid "Port" msgstr "Port" -#: web/ejabberd_web_admin.erl:2426 +#: web/ejabberd_web_admin.erl:2427 msgid "IP" msgstr "IP" -#: web/ejabberd_web_admin.erl:2427 +#: web/ejabberd_web_admin.erl:2428 msgid "Protocol" msgstr "Protokoll" -#: web/ejabberd_web_admin.erl:2428 web/ejabberd_web_admin.erl:2555 +#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 msgid "Module" msgstr "Modul" -#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 +#: web/ejabberd_web_admin.erl:2430 web/ejabberd_web_admin.erl:2557 msgid "Options" msgstr "Alternativer" -#: web/ejabberd_web_admin.erl:2449 +#: web/ejabberd_web_admin.erl:2450 msgid "Delete" msgstr "Slett" -#: web/ejabberd_web_admin.erl:2578 +#: web/ejabberd_web_admin.erl:2579 msgid "Start" msgstr "Start" #: web/mod_register_web.erl:104 msgid "Your Jabber account was successfully created." -msgstr "" +msgstr "Din Jabber konto ble opprettet" #: web/mod_register_web.erl:107 msgid "There was an error creating the account: " -msgstr "" +msgstr "En feil skjedde under oppretting av kontoen:" #: web/mod_register_web.erl:115 msgid "Your Jabber account was successfully deleted." -msgstr "" +msgstr "Dni Jabber konto er blitt sltettet." #: web/mod_register_web.erl:118 msgid "There was an error deleting the account: " -msgstr "" +msgstr "En feil skjedde under sletting av kontoen: " #: web/mod_register_web.erl:128 msgid "The password of your Jabber account was successfully changed." -msgstr "" +msgstr "Passordet for din Jabber konto ble endret." #: web/mod_register_web.erl:131 msgid "There was an error changing the password: " -msgstr "" +msgstr "En feil skjedde under endring av passordet:" #: web/mod_register_web.erl:163 web/mod_register_web.erl:172 msgid "Jabber Account Registration" -msgstr "" +msgstr "Jabber Konto Registrering" #: web/mod_register_web.erl:174 web/mod_register_web.erl:192 #: web/mod_register_web.erl:201 msgid "Register a Jabber account" -msgstr "" +msgstr "Registrer en Jabber konto" #: web/mod_register_web.erl:176 web/mod_register_web.erl:493 #: web/mod_register_web.erl:502 msgid "Unregister a Jabber account" -msgstr "" +msgstr "Avregistrer en Jabber konto" #: web/mod_register_web.erl:203 msgid "" @@ -1708,42 +1763,49 @@ msgid "" "(Jabber IDentifier) will be of the form: username@server. Please read " "carefully the instructions to fill correctly the fields." msgstr "" +"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." #: web/mod_register_web.erl:212 web/mod_register_web.erl:386 #: web/mod_register_web.erl:509 -#, fuzzy msgid "Username:" -msgstr "IRC Brukernavn" +msgstr "Brukernavn:" #: web/mod_register_web.erl:217 msgid "This is case insensitive: macbeth is the same that MacBeth and Macbeth." msgstr "" +"Denne er ufølsom for små og store bokstaver: macbeth er det samme som " +"MacBeth og Macbeth. " #: web/mod_register_web.erl:218 msgid "Characters not allowed:" -msgstr "" +msgstr "Ikke godtatte tegn:" #: web/mod_register_web.erl:222 web/mod_register_web.erl:391 #: web/mod_register_web.erl:514 -#, fuzzy msgid "Server:" -msgstr "Server ~b" +msgstr "Server:" #: web/mod_register_web.erl:232 msgid "" "Don't tell your password to anybody, not even the administrators of the " "Jabber server." msgstr "" +"Ikke fortell passordet til noen, ikke en gang til administratoren av Jabber " +"serveren." #: web/mod_register_web.erl:234 msgid "You can later change your password using a Jabber client." -msgstr "" +msgstr "Du kan når som helst endre passordet via en Jabber klient." #: web/mod_register_web.erl:235 msgid "" "Some Jabber clients can store your password in your computer. Use that " "feature only if you trust your computer is safe." msgstr "" +"Noen Jabber klienter kan lagre passordet på datamaskinen. Bruk bare den " +"funksjonen dersom du er sikker på at maskinen er trygg." #: web/mod_register_web.erl:237 msgid "" @@ -1751,34 +1813,34 @@ msgid "" "Jabber there isn't an automated way to recover your password if you forget " "it." msgstr "" +"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. " #: web/mod_register_web.erl:242 web/mod_register_web.erl:406 -#, fuzzy msgid "Password Verification:" -msgstr "Passord Bekreftelse" +msgstr "Passord Bekreftelse:" #: web/mod_register_web.erl:250 -#, fuzzy msgid "Register" -msgstr "Kontaktliste" +msgstr "Registrer" #: web/mod_register_web.erl:396 -#, fuzzy msgid "Old Password:" -msgstr "Passord:" +msgstr "Gammelt Passord:" #: web/mod_register_web.erl:401 -#, fuzzy msgid "New Password:" -msgstr "Passord:" +msgstr "Nytt Passord:" #: web/mod_register_web.erl:504 msgid "This page allows to unregister a Jabber account in this Jabber server." msgstr "" +"Denne siden lar deg avregistrere en Jabber konto på denne Jabber serveren." #: web/mod_register_web.erl:524 msgid "Unregister" -msgstr "" +msgstr "Avregistrer" #, fuzzy #~ msgid "Captcha test failed" diff --git a/src/msgs/pl.msg b/src/msgs/pl.msg index 1dc68356b..4bc206306 100644 --- a/src/msgs/pl.msg +++ b/src/msgs/pl.msg @@ -20,7 +20,9 @@ {"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 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 voice requests","Pozwól użytkownikom wysyłać zaproszenia"}. {"All Users","Wszyscy użytkownicy"}. {"Announcements","Powiadomienia"}. {"anyone","wszystkich"}. @@ -75,6 +77,7 @@ {"Dump Backup to Text File at ","Zapisz kopię zapasową w pliku tekstowym na "}. {"Dump to Text File","Wykonaj kopie do pliku tekstowego"}. {"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 MUC module","Moduł MUC"}. {"ejabberd Publish-Subscribe module","Moduł Publish-Subscribe"}. @@ -98,8 +101,10 @@ {"Erlang Jabber Server","Erlang Jabber Server"}. {"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\"}]."}. +{"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 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"}. {"February","Luty"}. {"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 Password","Pobierz hasło użytkownika"}. {"Get User Statistics","Pobierz statystyki użytkownika"}. +{"Grant voice to this person?","Udzielić głosu tej osobie?"}. {"Group ","Grupa "}. {"Groups","Grupy"}. {"has been banned","został wykluczony"}. @@ -168,7 +174,7 @@ {"List of modules to start","Lista modułów do uruchomienia"}. {"Low level update script","Skrypt aktualizacji niskiego poziomu"}. {"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 moderated","Pokój moderowany"}. {"Make room password protected","Pokój zabezpieczony hasłem"}. @@ -185,6 +191,7 @@ {"Memory","Pamięć"}. {"Message body","Treść wiadomości"}. {"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"}. {"moderators only","tylko moderatorzy"}. {"Modified modules","Zmodyfikowane moduły"}. @@ -199,6 +206,7 @@ {"Nickname","Nazwa użytkownika"}. {"Nickname Registration at ","Rejestracja nazwy użytkownika na "}. {"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 Data","Brak danych"}. {"Node ID","ID węzła"}. @@ -227,6 +235,7 @@ {"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 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 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"}. @@ -250,6 +259,7 @@ {"Persist items to storage","Przechowuj na stałe dane PubSub"}. {"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, wait for a while before sending new voice request","Proszę poczekać chwile, zanim wyślesz nowe żądanie głosowe"}. {"Pong","Pong"}. {"Port ~b","Port ~b"}. {"Port","Port"}. @@ -274,7 +284,7 @@ {"Remove All Offline Messages","Usuń wszystkie wiadomości typu 'Offline'"}. {"Remove User","Usuń użytkownika"}. {"Remove","Usuń"}. -{"Replaced by new connection","Zastąpione przez nowe połączenie"}. +{"Replaced by new connection","Połączenie zostało zastąpione"}. {"Resources","Zasoby"}. {"Restart Service","Restart usługi"}. {"Restart","Uruchom ponownie"}. @@ -338,7 +348,7 @@ {"Sunday","Niedziela"}. {"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ę"}. -{"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 collections with which a node is affiliated","Grupy, do których należy węzeł"}. {"the password is","hasło to:"}. @@ -358,6 +368,7 @@ {"Time","Czas"}. {"Time delay","Opóźnienie"}. {"To","Do"}. +{"Too many CAPTCHA requests","Za dużo żądań CAPTCHA"}. {"To ~s","Do ~s"}. {"Traffic rate limit is exceeded","Limit transferu przekroczony"}. {"Transactions Aborted:","Transakcje anulowane:"}. @@ -365,7 +376,6 @@ {"Transactions Logged:","Transakcje zalogowane:"}. {"Transactions Restarted:","Transakcje uruchomione ponownie:"}. {"Tuesday","Wtorek"}. -{"Unable to generate a captcha","Nie można wygenerować captcha"}. {"Unable to generate a CAPTCHA","Nie można wygenerować CAPTCHA"}. {"Unauthorized","Nie autoryzowano"}. {"Unregister a Jabber account","Usuń konto Jabber"}. @@ -377,7 +387,8 @@ {"Update script","Skrypt aktualizacji"}. {"Update ","Uaktualnij "}. {"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"}. {"Username:","Nazwa użytkownika:"}. {"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"}. {"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"}. +{"Voice requests are disabled in this conference","Głosowe żądania są wyłączone w tym pokoju"}. +{"Voice request","Żądanie głosowe"}. {"Wednesday","Środa"}. {"When to send the last published item","Kiedy wysłać ostatnio opublikowaną rzecz"}. {"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 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ć"}. -{"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 Jabber account was successfully created.","Twoje konto zostało stworzone."}. {"Your Jabber account was successfully deleted.","Twoje konto zostało usunięte."}. diff --git a/src/msgs/pl.po b/src/msgs/pl.po index e715cad3c..f0dc11bed 100644 --- a/src/msgs/pl.po +++ b/src/msgs/pl.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: 2.1.0-alpha\n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" -"Last-Translator: Zbigniew Żółkiewski \n" +"Last-Translator: Zbyszek Żółkiewski \n" "Language-Team: \n" "Language: \n" "MIME-Version: 1.0\n" @@ -17,19 +17,19 @@ msgstr "" #: ejabberd_c2s.erl:424 ejabberd_c2s.erl:727 msgid "Use of STARTTLS required" -msgstr "Wymagane użycie STARTTLS" +msgstr "Wymagane jest użycie STARTTLS" #: ejabberd_c2s.erl:503 msgid "No resource provided" msgstr "Nie podano zasobu" -#: ejabberd_c2s.erl:1149 +#: ejabberd_c2s.erl:1197 msgid "Replaced by new connection" -msgstr "Zastąpione przez nowe połączenie" +msgstr "Połączenie zostało zastąpione" -#: ejabberd_c2s.erl:1837 +#: ejabberd_c2s.erl:1885 msgid "Your active privacy list has denied the routing of this stanza." -msgstr "Twoja aktywna lista prywatności zabrania" +msgstr "Aktualna lista prywatności zabrania przesyłania tej stanzy" #: ejabberd_captcha.erl:96 ejabberd_captcha.erl:152 ejabberd_captcha.erl:178 msgid "Enter the text you see" @@ -48,7 +48,7 @@ msgid "CAPTCHA web page" msgstr "Strona internetowa CAPTCHA" #: ejabberd_captcha.erl:307 -msgid "The captcha is valid." +msgid "The CAPTCHA is valid." msgstr "Captcha jest poprawna." #: mod_adhoc.erl:95 mod_adhoc.erl:125 mod_adhoc.erl:143 mod_adhoc.erl:161 @@ -63,67 +63,70 @@ msgstr "Ping" msgid "Pong" msgstr "Pong" -#: mod_announce.erl:506 +#: mod_announce.erl:507 mod_announce_odbc.erl:499 msgid "Really delete message of the day?" msgstr "Na pewno usunąć wiadomość dnia?" -#: mod_announce.erl:514 mod_configure.erl:1083 mod_configure.erl:1128 +#: mod_announce.erl:515 mod_announce_odbc.erl:507 mod_configure.erl:1083 +#: mod_configure.erl:1128 msgid "Subject" msgstr "Temat" -#: mod_announce.erl:519 mod_configure.erl:1088 mod_configure.erl:1133 +#: mod_announce.erl:520 mod_announce_odbc.erl:512 mod_configure.erl:1088 +#: mod_configure.erl:1133 msgid "Message body" msgstr "Treść wiadomości" -#: mod_announce.erl:599 +#: mod_announce.erl:600 mod_announce_odbc.erl:592 msgid "No body provided for announce message" msgstr "Brak treści powiadomienia" -#: mod_announce.erl:634 +#: mod_announce.erl:635 mod_announce_odbc.erl:627 msgid "Announcements" msgstr "Powiadomienia" -#: mod_announce.erl:636 +#: mod_announce.erl:637 mod_announce_odbc.erl:629 msgid "Send announcement to all users" msgstr "Wyślij powiadomienie do wszystkich użytkowników" -#: mod_announce.erl:638 +#: mod_announce.erl:639 mod_announce_odbc.erl:631 msgid "Send announcement to all users on all hosts" msgstr "Wyślij powiadomienie do wszystkich użytkowników na wszystkich hostach" -#: mod_announce.erl:640 +#: mod_announce.erl:641 mod_announce_odbc.erl:633 msgid "Send announcement to all online users" msgstr "Wyślij powiadomienie do wszystkich zalogowanych użytkowników" -#: mod_announce.erl:642 mod_configure.erl:1078 mod_configure.erl:1123 +#: mod_announce.erl:643 mod_announce_odbc.erl:635 mod_configure.erl:1078 +#: mod_configure.erl:1123 msgid "Send announcement to all online users on all hosts" msgstr "" "Wyślij powiadomienie do wszystkich zalogowanych użytkowników na wszystkich " "hostach" -#: mod_announce.erl:644 +#: mod_announce.erl:645 mod_announce_odbc.erl:637 msgid "Set message of the day and send to online users" msgstr "Wyślij wiadomość dnia do wszystkich zalogowanych użytkowników" -#: mod_announce.erl:646 +#: mod_announce.erl:647 mod_announce_odbc.erl:639 msgid "Set message of the day on all hosts and send to online users" msgstr "" "Ustaw wiadomość dnia dla wszystkich hostów i wyślij do zalogowanych " "uzytkowników" -#: mod_announce.erl:648 +#: mod_announce.erl:649 mod_announce_odbc.erl:641 msgid "Update message of the day (don't send)" msgstr "Aktualizuj wiadomość dnia (bez wysyłania)" -#: mod_announce.erl:650 +#: mod_announce.erl:651 mod_announce_odbc.erl:643 msgid "Update message of the day on all hosts (don't send)" msgstr "Aktualizuj wiadomość dnia na wszystkich hostach (bez wysyłania)" -#: mod_announce.erl:652 +#: mod_announce.erl:653 mod_announce_odbc.erl:645 msgid "Delete message of the day" msgstr "Usuń wiadomość dnia" -#: mod_announce.erl:654 +#: mod_announce.erl:655 mod_announce_odbc.erl:647 msgid "Delete message of the day on all hosts" msgstr "Usuń wiadomość dnia ze wszystkich hostów" @@ -132,7 +135,7 @@ msgstr "Usuń wiadomość dnia ze wszystkich hostów" msgid "Configuration" msgstr "Konfiguracja" -#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1934 +#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1936 msgid "Database" msgstr "Baza danych" @@ -144,7 +147,7 @@ msgstr "Uruchom moduły" msgid "Stop Modules" msgstr "Zatrzymaj moduły" -#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1935 +#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1937 msgid "Backup" msgstr "Wykonaj kopie" @@ -173,7 +176,7 @@ msgid "Shut Down Service" msgstr "Wyłącz usługę" #: mod_configure.erl:145 mod_configure.erl:518 mod_configure.erl:1197 -#: web/ejabberd_web_admin.erl:1528 +#: web/ejabberd_web_admin.erl:1527 msgid "Add User" msgstr "Dodaj użytkownika" @@ -225,7 +228,7 @@ msgid "User Management" msgstr "Zarządzanie użytkownikami" #: mod_configure.erl:500 web/ejabberd_web_admin.erl:1058 -#: web/ejabberd_web_admin.erl:1463 +#: web/ejabberd_web_admin.erl:1462 msgid "Online Users" msgstr "Użytkownicy zalogowani" @@ -237,15 +240,15 @@ msgstr "Wszyscy użytkownicy" msgid "Outgoing s2s Connections" msgstr "Wychodzące połączenia s2s" -#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1905 +#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1907 msgid "Running Nodes" msgstr "Uruchomione węzły" -#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1907 +#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1909 msgid "Stopped Nodes" msgstr "Zatrzymane węzły" -#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1951 +#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1953 msgid "Modules" msgstr "Moduły" @@ -376,15 +379,15 @@ msgstr "Reguły dostępu" #: mod_configure.erl:1200 mod_configure.erl:1222 mod_configure.erl:1234 #: mod_configure.erl:1246 mod_configure.erl:1258 mod_configure.erl:1275 -#: mod_configure.erl:1287 mod_configure.erl:1652 mod_configure.erl:1702 -#: mod_configure.erl:1723 mod_roster.erl:943 mod_roster_odbc.erl:1048 -#: mod_vcard.erl:466 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:442 +#: mod_configure.erl:1287 mod_configure.erl:1650 mod_configure.erl:1700 +#: mod_configure.erl:1721 mod_roster.erl:943 mod_roster_odbc.erl:1060 +#: mod_vcard.erl:472 mod_vcard_ldap.erl:554 mod_vcard_odbc.erl:448 msgid "Jabber ID" msgstr "Jabber ID" -#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1653 -#: mod_configure.erl:1865 mod_muc/mod_muc_room.erl:2970 mod_register.erl:235 -#: web/ejabberd_web_admin.erl:1521 +#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1651 +#: mod_configure.erl:1863 mod_muc/mod_muc_room.erl:3224 mod_register.erl:235 +#: web/ejabberd_web_admin.erl:1520 msgid "Password" msgstr "Hasło" @@ -400,69 +403,70 @@ msgstr "Liczba zarejestrowanych użytkowników" msgid "Number of online users" msgstr "Liczba zalogowanych użytkowników" -#: mod_configure.erl:1684 web/ejabberd_web_admin.erl:1589 -#: web/ejabberd_web_admin.erl:1741 +#: mod_configure.erl:1682 web/ejabberd_web_admin.erl:1588 +#: web/ejabberd_web_admin.erl:1743 msgid "Never" msgstr "Nigdy" -#: mod_configure.erl:1698 web/ejabberd_web_admin.erl:1602 -#: web/ejabberd_web_admin.erl:1754 +#: mod_configure.erl:1696 web/ejabberd_web_admin.erl:1601 +#: web/ejabberd_web_admin.erl:1756 msgid "Online" msgstr "Dostępny" -#: mod_configure.erl:1703 +#: mod_configure.erl:1701 msgid "Last login" msgstr "Ostatnie logowanie" -#: mod_configure.erl:1724 +#: mod_configure.erl:1722 msgid "Roster size" msgstr "Rozmiar listy kontaktów" -#: mod_configure.erl:1725 +#: mod_configure.erl:1723 msgid "IP addresses" msgstr "Adresy IP" -#: mod_configure.erl:1726 +#: mod_configure.erl:1724 msgid "Resources" msgstr "Zasoby" -#: mod_configure.erl:1852 +#: mod_configure.erl:1850 msgid "Administration of " msgstr "Zarządzanie " -#: mod_configure.erl:1855 +#: mod_configure.erl:1853 msgid "Action on user" msgstr "Wykonaj na użytkowniku" -#: mod_configure.erl:1859 +#: mod_configure.erl:1857 msgid "Edit Properties" msgstr "Edytuj właściwości" -#: mod_configure.erl:1862 web/ejabberd_web_admin.erl:1767 +#: mod_configure.erl:1860 web/ejabberd_web_admin.erl:1769 msgid "Remove User" msgstr "Usuń użytkownika" -#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:336 +#: mod_irc/mod_irc.erl:201 mod_irc/mod_irc_odbc.erl:196 +#: mod_muc/mod_muc.erl:336 mod_muc/mod_muc_odbc.erl:342 msgid "Access denied by service policy" msgstr "Dostęp zabroniony zgodnie z zasadami usługi" -#: mod_irc/mod_irc.erl:400 +#: mod_irc/mod_irc.erl:401 mod_irc/mod_irc_odbc.erl:398 msgid "IRC Transport" msgstr "Transport IRC" -#: mod_irc/mod_irc.erl:427 +#: mod_irc/mod_irc.erl:428 mod_irc/mod_irc_odbc.erl:425 msgid "ejabberd IRC module" msgstr "Moduł IRC ejabberd" -#: mod_irc/mod_irc.erl:558 +#: mod_irc/mod_irc.erl:559 mod_irc/mod_irc_odbc.erl:568 msgid "You need an x:data capable client to configure mod_irc settings" msgstr "Potrzebujesz klienta obsługującego x:data aby skonfigurować mod_irc" -#: mod_irc/mod_irc.erl:565 +#: mod_irc/mod_irc.erl:566 mod_irc/mod_irc_odbc.erl:575 msgid "Registration in mod_irc for " msgstr "Rejestracja w mod_irc dla " -#: mod_irc/mod_irc.erl:570 +#: mod_irc/mod_irc.erl:571 mod_irc/mod_irc_odbc.erl:580 msgid "" "Enter username, encodings, ports and passwords you wish to use for " "connecting to IRC servers" @@ -470,11 +474,11 @@ msgstr "" "Wprowadź nazwę użytkownika, port i kodowanie, których chcesz używać do " "łączenia z serwerami IRC" -#: mod_irc/mod_irc.erl:575 +#: mod_irc/mod_irc.erl:576 mod_irc/mod_irc_odbc.erl:585 msgid "IRC Username" msgstr "Nazwa użytkownika IRC" -#: mod_irc/mod_irc.erl:585 +#: mod_irc/mod_irc.erl:586 mod_irc/mod_irc_odbc.erl:595 msgid "" "If you want to specify different ports, passwords, encodings for IRC " "servers, fill this list with values in format '{\"irc server\", \"encoding" @@ -486,7 +490,7 @@ msgstr "" "\"encoding\", port, \"password\"}'. Domyślne ta usługa używa kodowania \"~s" "\", portu ~p, bez hasła." -#: mod_irc/mod_irc.erl:597 +#: mod_irc/mod_irc.erl:598 mod_irc/mod_irc_odbc.erl:607 msgid "" "Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." @@ -494,35 +498,36 @@ msgstr "" "Przykład: [{\"wroclaw.irc.pl\",\"utf-8\"}, {\"warszawa.irc.pl\", " "\"iso8859-2\"}]." -#: mod_irc/mod_irc.erl:602 +#: mod_irc/mod_irc.erl:603 mod_irc/mod_irc_odbc.erl:612 msgid "Connections parameters" msgstr "Parametry połączeń" -#: mod_irc/mod_irc.erl:727 +#: mod_irc/mod_irc.erl:728 mod_irc/mod_irc_odbc.erl:757 msgid "Join IRC channel" msgstr "Dołącz do kanału IRC" -#: mod_irc/mod_irc.erl:731 +#: mod_irc/mod_irc.erl:732 mod_irc/mod_irc_odbc.erl:761 msgid "IRC channel (don't put the first #)" msgstr "Kanał IRC (nie używaj #)" -#: mod_irc/mod_irc.erl:736 +#: mod_irc/mod_irc.erl:737 mod_irc/mod_irc_odbc.erl:766 msgid "IRC server" msgstr "Serwer IRC" -#: mod_irc/mod_irc.erl:769 mod_irc/mod_irc.erl:773 +#: mod_irc/mod_irc.erl:770 mod_irc/mod_irc.erl:774 +#: mod_irc/mod_irc_odbc.erl:799 mod_irc/mod_irc_odbc.erl:803 msgid "Join the IRC channel here." msgstr "Dołącz do kanału IRC." -#: mod_irc/mod_irc.erl:777 +#: mod_irc/mod_irc.erl:778 mod_irc/mod_irc_odbc.erl:807 msgid "Join the IRC channel in this Jabber ID: ~s" msgstr "Dołącz do kanału IRC pod tym Jabber ID: ~s" -#: mod_irc/mod_irc.erl:862 +#: mod_irc/mod_irc.erl:863 mod_irc/mod_irc_odbc.erl:904 msgid "IRC settings" msgstr "Ustawienia IRC" -#: mod_irc/mod_irc.erl:867 +#: mod_irc/mod_irc.erl:868 mod_irc/mod_irc_odbc.erl:909 msgid "" "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 " @@ -532,70 +537,71 @@ msgstr "" "serwerami IRC. Wciśnij \"Dalej\" aby ustawić więcej parametrów połączenia. " "Wciśnij \"Zakończ\" aby zapisać ustawienia." -#: mod_irc/mod_irc.erl:873 +#: mod_irc/mod_irc.erl:874 mod_irc/mod_irc_odbc.erl:915 msgid "IRC username" msgstr "Nazwa użytkownika IRC" -#: mod_irc/mod_irc.erl:922 +#: mod_irc/mod_irc.erl:923 mod_irc/mod_irc_odbc.erl:964 msgid "Password ~b" msgstr "Hasło ~b" -#: mod_irc/mod_irc.erl:927 +#: mod_irc/mod_irc.erl:928 mod_irc/mod_irc_odbc.erl:969 msgid "Port ~b" msgstr "Port ~b" -#: mod_irc/mod_irc.erl:932 +#: mod_irc/mod_irc.erl:933 mod_irc/mod_irc_odbc.erl:974 msgid "Encoding for server ~b" msgstr "Kodowanie znaków dla serwera ~b" -#: mod_irc/mod_irc.erl:941 +#: mod_irc/mod_irc.erl:942 mod_irc/mod_irc_odbc.erl:983 msgid "Server ~b" msgstr "Serwer ~b" -#: mod_muc/mod_muc.erl:449 +#: mod_muc/mod_muc.erl:449 mod_muc/mod_muc_odbc.erl:456 msgid "Only service administrators are allowed to send service messages" msgstr "Tylko administratorzy mogą wysyłać wiadomości" -#: mod_muc/mod_muc.erl:493 +#: mod_muc/mod_muc.erl:493 mod_muc/mod_muc_odbc.erl:500 msgid "Room creation is denied by service policy" msgstr "Zasady serwera zabraniają tworzyć nowe pokoje" -#: mod_muc/mod_muc.erl:500 +#: mod_muc/mod_muc.erl:500 mod_muc/mod_muc_odbc.erl:507 msgid "Conference room does not exist" msgstr "Pokój konferencyjny nie istnieje" -#: mod_muc/mod_muc.erl:581 +#: mod_muc/mod_muc.erl:582 mod_muc/mod_muc_odbc.erl:595 msgid "Chatrooms" msgstr "Pokoje rozmów" -#: mod_muc/mod_muc.erl:711 +#: mod_muc/mod_muc.erl:712 mod_muc/mod_muc_odbc.erl:729 msgid "You need a client that supports x:data to register the nickname" msgstr "Potrzebujesz klienta obsługującego x:data aby zarejestrować nick" -#: mod_muc/mod_muc.erl:717 +#: mod_muc/mod_muc.erl:718 mod_muc/mod_muc_odbc.erl:735 msgid "Nickname Registration at " msgstr "Rejestracja nazwy użytkownika na " -#: mod_muc/mod_muc.erl:721 +#: mod_muc/mod_muc.erl:722 mod_muc/mod_muc_odbc.erl:739 msgid "Enter nickname you want to register" msgstr "Wprowadz nazwę użytkownika którego chcesz zarejestrować" -#: mod_muc/mod_muc.erl:722 mod_roster.erl:944 mod_roster_odbc.erl:1049 -#: mod_vcard.erl:358 mod_vcard.erl:471 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:447 +#: mod_muc/mod_muc.erl:723 mod_muc/mod_muc_odbc.erl:740 +#: mod_muc/mod_muc_room.erl:3810 mod_roster.erl:944 mod_roster_odbc.erl:1061 +#: mod_vcard.erl:364 mod_vcard.erl:477 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:453 msgid "Nickname" msgstr "Nazwa użytkownika" -#: mod_muc/mod_muc.erl:761 mod_muc/mod_muc_room.erl:933 -#: mod_muc/mod_muc_room.erl:1577 +#: mod_muc/mod_muc.erl:762 mod_muc/mod_muc_odbc.erl:784 +#: mod_muc/mod_muc_room.erl:1064 mod_muc/mod_muc_room.erl:1787 msgid "That nickname is registered by another person" msgstr "Ta nazwa użytkownika jest już zarejestrowana przez inną osobę" -#: mod_muc/mod_muc.erl:787 +#: mod_muc/mod_muc.erl:788 mod_muc/mod_muc_odbc.erl:811 msgid "You must fill in field \"Nickname\" in the form" msgstr "Musisz wypełnić pole \"Nazwa użytkownika\" w formularzu" -#: mod_muc/mod_muc.erl:807 +#: mod_muc/mod_muc.erl:808 mod_muc/mod_muc_odbc.erl:831 msgid "ejabberd MUC module" msgstr "Moduł MUC" @@ -635,8 +641,8 @@ msgstr "został wyrzucony z powodu wyłączenia systemu" msgid "is now known as" msgstr "jest teraz znany jako" -#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:689 -#: mod_muc/mod_muc_room.erl:2138 +#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:688 +#: mod_muc/mod_muc_room.erl:2393 msgid " has set the subject to: " msgstr " zmienił temat na: " @@ -732,33 +738,49 @@ msgstr "Listopad" msgid "December" msgstr "Grudzień" -#: mod_muc/mod_muc_log.erl:751 +#: mod_muc/mod_muc_log.erl:750 msgid "Room Configuration" msgstr "Konfiguracja pokoju" -#: mod_muc/mod_muc_log.erl:760 +#: mod_muc/mod_muc_log.erl:759 msgid "Room Occupants" msgstr "Lista uczestników" -#: mod_muc/mod_muc_room.erl:170 +#: mod_muc/mod_muc_room.erl:174 msgid "Traffic rate limit is exceeded" msgstr "Limit transferu przekroczony" -#: mod_muc/mod_muc_room.erl:242 +#: mod_muc/mod_muc_room.erl:246 msgid "" "This participant is kicked from the room because he sent an error message" msgstr "" "Ten uczestnik został wyrzucony z pokoju ponieważ wysłał komunikat błędu" -#: mod_muc/mod_muc_room.erl:251 +#: mod_muc/mod_muc_room.erl:255 msgid "It is not allowed to send private messages to the conference" msgstr "Nie wolno wysyłac prywatnych wiadomości na konferencję" -#: mod_muc/mod_muc_room.erl:296 +#: mod_muc/mod_muc_room.erl:332 +msgid "Please, wait for a while before sending new voice request" +msgstr "Proszę poczekać chwile, zanim wyślesz nowe żądanie głosowe" + +#: mod_muc/mod_muc_room.erl:347 +msgid "Voice requests are disabled in this conference" +msgstr "Głosowe żądania są wyłączone w tym pokoju" + +#: mod_muc/mod_muc_room.erl:364 +msgid "Failed to extract JID from your voice request approval" +msgstr "Nie udało się wydobyć JID-u z twojego żądania" + +#: mod_muc/mod_muc_room.erl:393 +msgid "Only moderators can approve voice requests" +msgstr "Tylko moderatorzy mogą zatwierdzać żądania głosowe" + +#: mod_muc/mod_muc_room.erl:408 msgid "Improper message type" msgstr "Nieprawidłowy typ wiadomości" -#: mod_muc/mod_muc_room.erl:406 +#: mod_muc/mod_muc_room.erl:518 msgid "" "This participant is kicked from the room because he sent an error message to " "another participant" @@ -766,229 +788,261 @@ msgstr "" "Ten uczestnik został wyrzucony z pokoju ponieważ wysłał komunikat błędu do " "innego uczestnika" -#: mod_muc/mod_muc_room.erl:419 +#: mod_muc/mod_muc_room.erl:531 msgid "It is not allowed to send private messages of type \"groupchat\"" msgstr "Nie można wysyłać prywatnych wiadomości typu \"groupchat\"" -#: mod_muc/mod_muc_room.erl:431 mod_muc/mod_muc_room.erl:486 +#: mod_muc/mod_muc_room.erl:543 mod_muc/mod_muc_room.erl:611 msgid "Recipient is not in the conference room" msgstr "Odbiorcy nie ma w pokoju" -#: mod_muc/mod_muc_room.erl:451 mod_muc/mod_muc_room.erl:829 -#: mod_muc/mod_muc_room.erl:3609 -msgid "Only occupants are allowed to send messages to the conference" -msgstr "Tylko uczestnicy mogą wysyłać wiadomości na konferencję" - -#: mod_muc/mod_muc_room.erl:460 +#: mod_muc/mod_muc_room.erl:564 mod_muc/mod_muc_room.erl:585 msgid "It is not allowed to send private messages" msgstr "Wysyłanie prywatnych wiadomości jest zabronione" -#: mod_muc/mod_muc_room.erl:509 +#: mod_muc/mod_muc_room.erl:576 mod_muc/mod_muc_room.erl:956 +#: mod_muc/mod_muc_room.erl:4040 +msgid "Only occupants are allowed to send messages to the conference" +msgstr "Tylko uczestnicy mogą wysyłać wiadomości na konferencję" + +#: mod_muc/mod_muc_room.erl:634 msgid "Only occupants are allowed to send queries to the conference" msgstr "Tylko uczestnicy mogą wysyłać zapytania do konferencji" -#: mod_muc/mod_muc_room.erl:521 +#: mod_muc/mod_muc_room.erl:646 msgid "Queries to the conference members are not allowed in this room" msgstr "Informacje o członkach konferencji nie są dostępne w tym pokoju" -#: mod_muc/mod_muc_room.erl:805 +#: mod_muc/mod_muc_room.erl:932 msgid "" "Only moderators and participants are allowed to change the subject in this " "room" msgstr "Tylko moderatorzy i uczestnicy mogą zmienić temat tego pokoju" -#: mod_muc/mod_muc_room.erl:810 +#: mod_muc/mod_muc_room.erl:937 msgid "Only moderators are allowed to change the subject in this room" msgstr "Tylko moderatorzy mogą zmienić temat tego pokoju" -#: mod_muc/mod_muc_room.erl:820 +#: mod_muc/mod_muc_room.erl:947 msgid "Visitors are not allowed to send messages to all occupants" msgstr "Odwiedzający nie mogą wysyłać wiadomości do wszystkich obecnych" -#: mod_muc/mod_muc_room.erl:891 +#: mod_muc/mod_muc_room.erl:1021 msgid "" "This participant is kicked from the room because he sent an error presence" msgstr "" "Ten uczestnik został wyrzucony z pokoju ponieważ jego informacja o statusie " "zawierała błędy" -#: mod_muc/mod_muc_room.erl:909 +#: mod_muc/mod_muc_room.erl:1040 msgid "Visitors are not allowed to change their nicknames in this room" msgstr "Uczestnicy tego pokoju nie mogą zmieniać swoich nicków" -#: mod_muc/mod_muc_room.erl:922 mod_muc/mod_muc_room.erl:1569 +#: mod_muc/mod_muc_room.erl:1053 mod_muc/mod_muc_room.erl:1779 msgid "That nickname is already in use by another occupant" msgstr "Ta nazwa użytkownika jest używana przez kogoś innego" -#: mod_muc/mod_muc_room.erl:1558 +#: mod_muc/mod_muc_room.erl:1768 msgid "You have been banned from this room" msgstr "Zostałeś wykluczony z tego pokoju" -#: mod_muc/mod_muc_room.erl:1561 +#: mod_muc/mod_muc_room.erl:1771 msgid "Membership is required to enter this room" msgstr "Musisz być na liście członków tego pokoju aby do niego wejść" -#: mod_muc/mod_muc_room.erl:1597 +#: mod_muc/mod_muc_room.erl:1807 msgid "This room is not anonymous" msgstr "Ten pokój nie jest anonimowy" -#: mod_muc/mod_muc_room.erl:1623 +#: mod_muc/mod_muc_room.erl:1833 msgid "A password is required to enter this room" msgstr "Aby wejść do pokoju wymagane jest hasło" -#: mod_muc/mod_muc_room.erl:1645 mod_register.erl:246 +#: mod_muc/mod_muc_room.erl:1855 mod_register.erl:246 msgid "Too many CAPTCHA requests" -msgstr "" +msgstr "Za dużo żądań CAPTCHA" -#: mod_muc/mod_muc_room.erl:1654 -msgid "Unable to generate a captcha" -msgstr "Nie można wygenerować captcha" +#: mod_muc/mod_muc_room.erl:1864 mod_register.erl:251 +msgid "Unable to generate a CAPTCHA" +msgstr "Nie można wygenerować CAPTCHA" -#: mod_muc/mod_muc_room.erl:1664 +#: mod_muc/mod_muc_room.erl:1874 msgid "Incorrect password" msgstr "Nieprawidłowe hasło" -#: mod_muc/mod_muc_room.erl:2193 +#: mod_muc/mod_muc_room.erl:2448 msgid "Administrator privileges required" msgstr "Wymagane uprawnienia administratora" -#: mod_muc/mod_muc_room.erl:2208 +#: mod_muc/mod_muc_room.erl:2463 msgid "Moderator privileges required" msgstr "Wymagane uprawnienia moderatora" -#: mod_muc/mod_muc_room.erl:2363 +#: mod_muc/mod_muc_room.erl:2619 msgid "Jabber ID ~s is invalid" msgstr "Jabber ID ~s jest niepoprawny" -#: mod_muc/mod_muc_room.erl:2377 +#: mod_muc/mod_muc_room.erl:2633 msgid "Nickname ~s does not exist in the room" msgstr "Nie ma nicka ~s w tym pokoju" -#: mod_muc/mod_muc_room.erl:2403 mod_muc/mod_muc_room.erl:2797 +#: mod_muc/mod_muc_room.erl:2659 mod_muc/mod_muc_room.erl:3049 msgid "Invalid affiliation: ~s" msgstr "Nieprawidłowa przynależność: ~s" -#: mod_muc/mod_muc_room.erl:2460 +#: mod_muc/mod_muc_room.erl:2713 msgid "Invalid role: ~s" msgstr "Nieprawidłowa rola: ~s" -#: mod_muc/mod_muc_room.erl:2774 mod_muc/mod_muc_room.erl:2810 +#: mod_muc/mod_muc_room.erl:3026 mod_muc/mod_muc_room.erl:3062 msgid "Owner privileges required" msgstr "Wymagane uprawnienia właściciela" -#: mod_muc/mod_muc_room.erl:2941 +#: mod_muc/mod_muc_room.erl:3195 msgid "Configuration of room ~s" msgstr "Konfiguracja pokoju ~s" -#: mod_muc/mod_muc_room.erl:2946 +#: mod_muc/mod_muc_room.erl:3200 msgid "Room title" msgstr "Tytuł pokoju" -#: mod_muc/mod_muc_room.erl:2949 mod_muc/mod_muc_room.erl:3388 +#: mod_muc/mod_muc_room.erl:3203 mod_muc/mod_muc_room.erl:3692 msgid "Room description" msgstr "Opis pokoju" -#: mod_muc/mod_muc_room.erl:2956 +#: mod_muc/mod_muc_room.erl:3210 msgid "Make room persistent" msgstr "Utwórz pokój na stałe" -#: mod_muc/mod_muc_room.erl:2961 +#: mod_muc/mod_muc_room.erl:3215 msgid "Make room public searchable" msgstr "Pozwól wyszukiwać pokój" -#: mod_muc/mod_muc_room.erl:2964 +#: mod_muc/mod_muc_room.erl:3218 msgid "Make participants list public" msgstr "Upublicznij listę uczestników" -#: mod_muc/mod_muc_room.erl:2967 +#: mod_muc/mod_muc_room.erl:3221 msgid "Make room password protected" msgstr "Pokój zabezpieczony hasłem" -#: mod_muc/mod_muc_room.erl:2978 +#: mod_muc/mod_muc_room.erl:3232 msgid "Maximum Number of Occupants" msgstr "Maksymalna liczba uczestników" -#: mod_muc/mod_muc_room.erl:2985 +#: mod_muc/mod_muc_room.erl:3239 msgid "No limit" msgstr "Bez limitu" -#: mod_muc/mod_muc_room.erl:2996 +#: mod_muc/mod_muc_room.erl:3250 msgid "Present real Jabber IDs to" msgstr "Prawdziwe Jabber ID widoczne dla" -#: mod_muc/mod_muc_room.erl:3004 +#: mod_muc/mod_muc_room.erl:3258 mod_muc/mod_muc_room.erl:3292 msgid "moderators only" msgstr "tylko moderatorzy" -#: mod_muc/mod_muc_room.erl:3006 +#: mod_muc/mod_muc_room.erl:3260 mod_muc/mod_muc_room.erl:3294 msgid "anyone" msgstr "wszystkich" -#: mod_muc/mod_muc_room.erl:3008 +#: mod_muc/mod_muc_room.erl:3262 msgid "Make room members-only" msgstr "Pokój tylko dla członków" -#: mod_muc/mod_muc_room.erl:3011 +#: mod_muc/mod_muc_room.erl:3265 msgid "Make room moderated" msgstr "Pokój moderowany" -#: mod_muc/mod_muc_room.erl:3014 +#: mod_muc/mod_muc_room.erl:3268 msgid "Default users as participants" msgstr "Domyślni użytkownicy jako uczestnicy" -#: mod_muc/mod_muc_room.erl:3017 +#: mod_muc/mod_muc_room.erl:3271 msgid "Allow users to change the subject" msgstr "Pozwól użytkownikom zmieniać temat" -#: mod_muc/mod_muc_room.erl:3020 +#: mod_muc/mod_muc_room.erl:3274 msgid "Allow users to send private messages" msgstr "Pozwól użytkownikom wysyłać prywatne wiadomości" -#: mod_muc/mod_muc_room.erl:3023 +#: mod_muc/mod_muc_room.erl:3279 +msgid "Allow visitors to send private messages to" +msgstr "Pozwól użytkownikom wysyłać prywatne wiadomości" + +#: mod_muc/mod_muc_room.erl:3290 +msgid "nobody" +msgstr "nikt" + +#: mod_muc/mod_muc_room.erl:3296 msgid "Allow users to query other users" msgstr "Pozwól użytkownikom pobierać informacje o innych użytkownikach" -#: mod_muc/mod_muc_room.erl:3026 +#: mod_muc/mod_muc_room.erl:3299 msgid "Allow users to send invites" msgstr "Pozwól użytkownikom wysyłać zaproszenia" -#: mod_muc/mod_muc_room.erl:3029 +#: mod_muc/mod_muc_room.erl:3302 msgid "Allow visitors to send status text in presence updates" msgstr "Pozwól uczestnikom na wysyłanie statusów opisowych" -#: mod_muc/mod_muc_room.erl:3032 +#: mod_muc/mod_muc_room.erl:3305 msgid "Allow visitors to change nickname" msgstr "Pozwól uczestnikom na zmianę nicka" -#: mod_muc/mod_muc_room.erl:3038 -msgid "Make room captcha protected" +#: mod_muc/mod_muc_room.erl:3308 +msgid "Allow visitors to send voice requests" +msgstr "Pozwól użytkownikom wysyłać zaproszenia" + +#: mod_muc/mod_muc_room.erl:3311 +msgid "Minimum interval between voice requests (in seconds)" +msgstr "Minimalny odstęp między żądaniami głosowymi (w sekundach)" + +#: mod_muc/mod_muc_room.erl:3317 +msgid "Make room CAPTCHA protected" msgstr "Pokój zabezpieczony captchą" -#: mod_muc/mod_muc_room.erl:3043 +#: mod_muc/mod_muc_room.erl:3322 msgid "Exclude Jabber IDs from CAPTCHA challenge" -msgstr "" +msgstr "Pomiń Jabber ID z żądania CAPTCHA" -#: mod_muc/mod_muc_room.erl:3050 +#: mod_muc/mod_muc_room.erl:3329 msgid "Enable logging" msgstr "Włącz logowanie" -#: mod_muc/mod_muc_room.erl:3058 +#: mod_muc/mod_muc_room.erl:3337 msgid "You need an x:data capable client to configure room" msgstr "Potrzebujesz klienta obsługującego x:data aby skonfigurować pokój" -#: mod_muc/mod_muc_room.erl:3390 +#: mod_muc/mod_muc_room.erl:3694 msgid "Number of occupants" msgstr "Liczba uczestników" -#: mod_muc/mod_muc_room.erl:3446 +#: mod_muc/mod_muc_room.erl:3750 msgid "private, " msgstr "prywatny, " -#: mod_muc/mod_muc_room.erl:3529 +#: mod_muc/mod_muc_room.erl:3799 +msgid "Voice request" +msgstr "Żądanie głosowe" + +#: mod_muc/mod_muc_room.erl:3803 +msgid "Either approve or decline the voice request." +msgstr "Zatwierdź lub odrzuć żądanie głosowe" + +#: mod_muc/mod_muc_room.erl:3809 +msgid "User JID" +msgstr "Użytkownik " + +#: mod_muc/mod_muc_room.erl:3811 +msgid "Grant voice to this person?" +msgstr "Udzielić głosu tej osobie?" + +#: mod_muc/mod_muc_room.erl:3960 msgid "~s invites you to the room ~s" msgstr "~s zaprasza Cię do pokoju ~s" -#: mod_muc/mod_muc_room.erl:3538 +#: mod_muc/mod_muc_room.erl:3969 msgid "the password is" msgstr "hasło to:" @@ -1003,14 +1057,15 @@ msgid "~s's Offline Messages Queue" msgstr "Kolejka wiadomości offline użytkownika ~s" #: mod_offline.erl:563 mod_offline_odbc.erl:411 mod_roster.erl:987 -#: mod_roster_odbc.erl:1092 mod_shared_roster.erl:896 -#: mod_shared_roster.erl:1005 web/ejabberd_web_admin.erl:833 +#: mod_roster_odbc.erl:1104 mod_shared_roster.erl:901 +#: mod_shared_roster.erl:1010 mod_shared_roster_odbc.erl:930 +#: mod_shared_roster_odbc.erl:1039 web/ejabberd_web_admin.erl:833 #: web/ejabberd_web_admin.erl:874 web/ejabberd_web_admin.erl:942 #: web/ejabberd_web_admin.erl:978 web/ejabberd_web_admin.erl:1019 -#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1758 -#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1961 -#: web/ejabberd_web_admin.erl:2030 web/ejabberd_web_admin.erl:2134 -#: web/ejabberd_web_admin.erl:2159 web/ejabberd_web_admin.erl:2247 +#: web/ejabberd_web_admin.erl:1508 web/ejabberd_web_admin.erl:1760 +#: web/ejabberd_web_admin.erl:1931 web/ejabberd_web_admin.erl:1963 +#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2135 +#: web/ejabberd_web_admin.erl:2160 web/ejabberd_web_admin.erl:2248 msgid "Submitted" msgstr "Wprowadzone" @@ -1030,8 +1085,9 @@ msgstr "Do" msgid "Packet" msgstr "Pakiet" -#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:903 -#: web/ejabberd_web_admin.erl:882 web/ejabberd_web_admin.erl:986 +#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:908 +#: mod_shared_roster_odbc.erl:937 web/ejabberd_web_admin.erl:882 +#: web/ejabberd_web_admin.erl:986 msgid "Delete Selected" msgstr "Usuń zaznaczone" @@ -1047,103 +1103,103 @@ msgstr "Usuń wszystkie wiadomości typu 'Offline'" msgid "ejabberd SOCKS5 Bytestreams module" msgstr "Moduł SOCKS5 Bytestreams" -#: mod_pubsub/mod_pubsub.erl:1119 mod_pubsub/mod_pubsub_odbc.erl:928 +#: mod_pubsub/mod_pubsub.erl:1120 mod_pubsub/mod_pubsub_odbc.erl:929 msgid "Publish-Subscribe" msgstr "PubSub" -#: mod_pubsub/mod_pubsub.erl:1213 mod_pubsub/mod_pubsub_odbc.erl:1024 +#: mod_pubsub/mod_pubsub.erl:1214 mod_pubsub/mod_pubsub_odbc.erl:1025 msgid "ejabberd Publish-Subscribe module" msgstr "Moduł Publish-Subscribe" -#: mod_pubsub/mod_pubsub.erl:1496 mod_pubsub/mod_pubsub_odbc.erl:1311 +#: mod_pubsub/mod_pubsub.erl:1497 mod_pubsub/mod_pubsub_odbc.erl:1312 msgid "PubSub subscriber request" msgstr "Żądanie subskrybcji PubSub" -#: mod_pubsub/mod_pubsub.erl:1498 mod_pubsub/mod_pubsub_odbc.erl:1313 +#: mod_pubsub/mod_pubsub.erl:1499 mod_pubsub/mod_pubsub_odbc.erl:1314 msgid "Choose whether to approve this entity's subscription." msgstr "Wybierz, czy akceptować subskrypcję tej jednostki" -#: mod_pubsub/mod_pubsub.erl:1504 mod_pubsub/mod_pubsub_odbc.erl:1319 +#: mod_pubsub/mod_pubsub.erl:1505 mod_pubsub/mod_pubsub_odbc.erl:1320 msgid "Node ID" msgstr "ID węzła" -#: mod_pubsub/mod_pubsub.erl:1509 mod_pubsub/mod_pubsub_odbc.erl:1324 +#: mod_pubsub/mod_pubsub.erl:1510 mod_pubsub/mod_pubsub_odbc.erl:1325 msgid "Subscriber Address" msgstr "Adres subskrybenta" -#: mod_pubsub/mod_pubsub.erl:1515 mod_pubsub/mod_pubsub_odbc.erl:1330 +#: mod_pubsub/mod_pubsub.erl:1516 mod_pubsub/mod_pubsub_odbc.erl:1331 msgid "Allow this Jabber ID to subscribe to this pubsub node?" msgstr "Pozwól temu Jabber ID na zapisanie się do tego węzła PubSub" -#: mod_pubsub/mod_pubsub.erl:3416 mod_pubsub/mod_pubsub_odbc.erl:3229 +#: mod_pubsub/mod_pubsub.erl:3474 mod_pubsub/mod_pubsub_odbc.erl:3287 msgid "Deliver payloads with event notifications" msgstr "Dostarczaj zawartość publikacji wraz z powiadomieniami o zdarzeniach" -#: mod_pubsub/mod_pubsub.erl:3417 mod_pubsub/mod_pubsub_odbc.erl:3230 +#: mod_pubsub/mod_pubsub.erl:3475 mod_pubsub/mod_pubsub_odbc.erl:3288 msgid "Deliver event notifications" msgstr "Dostarczaj powiadomienia o zdarzeniach" -#: mod_pubsub/mod_pubsub.erl:3418 mod_pubsub/mod_pubsub_odbc.erl:3231 +#: mod_pubsub/mod_pubsub.erl:3476 mod_pubsub/mod_pubsub_odbc.erl:3289 msgid "Notify subscribers when the node configuration changes" msgstr "Informuj subskrybentów o zmianach konfiguracji węzła" -#: mod_pubsub/mod_pubsub.erl:3419 mod_pubsub/mod_pubsub_odbc.erl:3232 +#: mod_pubsub/mod_pubsub.erl:3477 mod_pubsub/mod_pubsub_odbc.erl:3290 msgid "Notify subscribers when the node is deleted" msgstr "Informuj subskrybentów o usunięciu węzła" -#: mod_pubsub/mod_pubsub.erl:3420 mod_pubsub/mod_pubsub_odbc.erl:3233 +#: mod_pubsub/mod_pubsub.erl:3478 mod_pubsub/mod_pubsub_odbc.erl:3291 msgid "Notify subscribers when items are removed from the node" msgstr "Informuj subskrybentów o usunięciu elementów węzła" -#: mod_pubsub/mod_pubsub.erl:3421 mod_pubsub/mod_pubsub_odbc.erl:3234 +#: mod_pubsub/mod_pubsub.erl:3479 mod_pubsub/mod_pubsub_odbc.erl:3292 msgid "Persist items to storage" msgstr "Przechowuj na stałe dane PubSub" -#: mod_pubsub/mod_pubsub.erl:3422 mod_pubsub/mod_pubsub_odbc.erl:3235 +#: mod_pubsub/mod_pubsub.erl:3480 mod_pubsub/mod_pubsub_odbc.erl:3293 msgid "A friendly name for the node" msgstr "Przyjazna nazwa węzła" -#: mod_pubsub/mod_pubsub.erl:3423 mod_pubsub/mod_pubsub_odbc.erl:3236 +#: mod_pubsub/mod_pubsub.erl:3481 mod_pubsub/mod_pubsub_odbc.erl:3294 msgid "Max # of items to persist" msgstr "Maksymalna liczba przechowywanych przedmiotów" -#: mod_pubsub/mod_pubsub.erl:3424 mod_pubsub/mod_pubsub_odbc.erl:3237 +#: mod_pubsub/mod_pubsub.erl:3482 mod_pubsub/mod_pubsub_odbc.erl:3295 msgid "Whether to allow subscriptions" msgstr "Czy pozwolić na subskrypcje" -#: mod_pubsub/mod_pubsub.erl:3425 mod_pubsub/mod_pubsub_odbc.erl:3238 +#: mod_pubsub/mod_pubsub.erl:3483 mod_pubsub/mod_pubsub_odbc.erl:3296 msgid "Specify the access model" msgstr "Określ model dostępu" -#: mod_pubsub/mod_pubsub.erl:3428 mod_pubsub/mod_pubsub_odbc.erl:3241 +#: mod_pubsub/mod_pubsub.erl:3486 mod_pubsub/mod_pubsub_odbc.erl:3299 msgid "Roster groups allowed to subscribe" msgstr "Grupy kontaktów uprawnione do subskrypcji" -#: mod_pubsub/mod_pubsub.erl:3429 mod_pubsub/mod_pubsub_odbc.erl:3242 +#: mod_pubsub/mod_pubsub.erl:3487 mod_pubsub/mod_pubsub_odbc.erl:3300 msgid "Specify the publisher model" msgstr "Określ model publikującego" -#: mod_pubsub/mod_pubsub.erl:3431 mod_pubsub/mod_pubsub_odbc.erl:3244 +#: mod_pubsub/mod_pubsub.erl:3489 mod_pubsub/mod_pubsub_odbc.erl:3302 msgid "Purge all items when the relevant publisher goes offline" msgstr "Usuń wszystkie elementy w momencie kiedy publikujący rozłączy się" -#: mod_pubsub/mod_pubsub.erl:3432 mod_pubsub/mod_pubsub_odbc.erl:3245 +#: mod_pubsub/mod_pubsub.erl:3490 mod_pubsub/mod_pubsub_odbc.erl:3303 msgid "Specify the event message type" msgstr "Określ typ wiadomości" -#: mod_pubsub/mod_pubsub.erl:3434 mod_pubsub/mod_pubsub_odbc.erl:3247 +#: mod_pubsub/mod_pubsub.erl:3492 mod_pubsub/mod_pubsub_odbc.erl:3305 msgid "Max payload size in bytes" msgstr "Maksymalna wielkość powiadomienia w bajtach" -#: mod_pubsub/mod_pubsub.erl:3435 mod_pubsub/mod_pubsub_odbc.erl:3248 +#: mod_pubsub/mod_pubsub.erl:3493 mod_pubsub/mod_pubsub_odbc.erl:3306 msgid "When to send the last published item" msgstr "Kiedy wysłać ostatnio opublikowaną rzecz" -#: mod_pubsub/mod_pubsub.erl:3437 mod_pubsub/mod_pubsub_odbc.erl:3250 +#: mod_pubsub/mod_pubsub.erl:3495 mod_pubsub/mod_pubsub_odbc.erl:3308 msgid "Only deliver notifications to available users" msgstr "Dostarczaj powiadomienia tylko dostępnym użytkownikom" -#: mod_pubsub/mod_pubsub.erl:3438 mod_pubsub/mod_pubsub_odbc.erl:3251 +#: mod_pubsub/mod_pubsub.erl:3496 mod_pubsub/mod_pubsub_odbc.erl:3309 msgid "The collections with which a node is affiliated" msgstr "Grupy, do których należy węzeł" @@ -1160,15 +1216,11 @@ msgid "Choose a username and password to register with this server" msgstr "" "Wybierz nazwę użytkownika i hasło aby zarejestrować się na tym serwerze" -#: mod_register.erl:230 mod_vcard.erl:358 mod_vcard_odbc.erl:336 -#: web/ejabberd_web_admin.erl:1516 web/ejabberd_web_admin.erl:1573 +#: mod_register.erl:230 mod_vcard.erl:364 mod_vcard_odbc.erl:342 +#: web/ejabberd_web_admin.erl:1515 web/ejabberd_web_admin.erl:1572 msgid "User" msgstr "Użytkownik" -#: mod_register.erl:251 -msgid "Unable to generate a CAPTCHA" -msgstr "Nie można wygenerować CAPTCHA" - #: mod_register.erl:316 mod_register.erl:361 msgid "The password is too weak" msgstr "Hasło nie jest wystarczająco trudne" @@ -1177,120 +1229,123 @@ msgstr "Hasło nie jest wystarczająco trudne" msgid "Users are not allowed to register accounts so quickly" msgstr "Użytkowncy nie mogą tak szybko rejestrować nowych kont" -#: mod_roster.erl:938 mod_roster_odbc.erl:1043 web/ejabberd_web_admin.erl:1699 -#: web/ejabberd_web_admin.erl:1884 web/ejabberd_web_admin.erl:1895 -#: web/ejabberd_web_admin.erl:2218 +#: mod_roster.erl:938 mod_roster_odbc.erl:1055 web/ejabberd_web_admin.erl:1701 +#: web/ejabberd_web_admin.erl:1886 web/ejabberd_web_admin.erl:1897 +#: web/ejabberd_web_admin.erl:2219 msgid "None" msgstr "Brak" -#: mod_roster.erl:945 mod_roster_odbc.erl:1050 +#: mod_roster.erl:945 mod_roster_odbc.erl:1062 msgid "Subscription" msgstr "Subskrypcja" -#: mod_roster.erl:946 mod_roster_odbc.erl:1051 +#: mod_roster.erl:946 mod_roster_odbc.erl:1063 msgid "Pending" msgstr "Oczekuje" -#: mod_roster.erl:947 mod_roster_odbc.erl:1052 +#: mod_roster.erl:947 mod_roster_odbc.erl:1064 msgid "Groups" msgstr "Grupy" -#: mod_roster.erl:974 mod_roster_odbc.erl:1079 +#: mod_roster.erl:974 mod_roster_odbc.erl:1091 msgid "Validate" msgstr "Potwierdź" -#: mod_roster.erl:982 mod_roster_odbc.erl:1087 +#: mod_roster.erl:982 mod_roster_odbc.erl:1099 msgid "Remove" msgstr "Usuń" -#: mod_roster.erl:985 mod_roster_odbc.erl:1090 +#: mod_roster.erl:985 mod_roster_odbc.erl:1102 msgid "Roster of " msgstr "Lista kontaktów " -#: mod_roster.erl:988 mod_roster_odbc.erl:1093 mod_shared_roster.erl:897 -#: mod_shared_roster.erl:1006 web/ejabberd_web_admin.erl:834 +#: mod_roster.erl:988 mod_roster_odbc.erl:1105 mod_shared_roster.erl:902 +#: mod_shared_roster.erl:1011 mod_shared_roster_odbc.erl:931 +#: mod_shared_roster_odbc.erl:1040 web/ejabberd_web_admin.erl:834 #: web/ejabberd_web_admin.erl:875 web/ejabberd_web_admin.erl:943 #: web/ejabberd_web_admin.erl:979 web/ejabberd_web_admin.erl:1020 -#: web/ejabberd_web_admin.erl:1510 web/ejabberd_web_admin.erl:1759 -#: web/ejabberd_web_admin.erl:1930 web/ejabberd_web_admin.erl:2135 -#: web/ejabberd_web_admin.erl:2160 +#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1761 +#: web/ejabberd_web_admin.erl:1932 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2161 msgid "Bad format" msgstr "Błędny format" -#: mod_roster.erl:995 mod_roster_odbc.erl:1100 +#: mod_roster.erl:995 mod_roster_odbc.erl:1112 msgid "Add Jabber ID" msgstr "Dodaj Jabber ID" -#: mod_roster.erl:1094 mod_roster_odbc.erl:1199 +#: mod_roster.erl:1094 mod_roster_odbc.erl:1211 msgid "Roster" msgstr "Lista kontaktów" -#: mod_shared_roster.erl:852 mod_shared_roster.erl:894 -#: mod_shared_roster.erl:1002 +#: mod_shared_roster.erl:857 mod_shared_roster.erl:899 +#: mod_shared_roster.erl:1007 mod_shared_roster_odbc.erl:886 +#: mod_shared_roster_odbc.erl:928 mod_shared_roster_odbc.erl:1036 msgid "Shared Roster Groups" msgstr "Wspólne grupy kontaktów" -#: mod_shared_roster.erl:890 web/ejabberd_web_admin.erl:1366 -#: web/ejabberd_web_admin.erl:2460 +#: mod_shared_roster.erl:895 mod_shared_roster_odbc.erl:924 +#: web/ejabberd_web_admin.erl:1365 web/ejabberd_web_admin.erl:2461 msgid "Add New" msgstr "Dodaj nowe" -#: mod_shared_roster.erl:973 +#: mod_shared_roster.erl:978 mod_shared_roster_odbc.erl:1007 msgid "Name:" msgstr "Nazwa:" -#: mod_shared_roster.erl:978 +#: mod_shared_roster.erl:983 mod_shared_roster_odbc.erl:1012 msgid "Description:" msgstr "Opis:" -#: mod_shared_roster.erl:986 +#: mod_shared_roster.erl:991 mod_shared_roster_odbc.erl:1020 msgid "Members:" msgstr "Członkowie:" -#: mod_shared_roster.erl:994 +#: mod_shared_roster.erl:999 mod_shared_roster_odbc.erl:1028 msgid "Displayed Groups:" msgstr "Wyświetlane grupy:" -#: mod_shared_roster.erl:1003 +#: mod_shared_roster.erl:1008 mod_shared_roster_odbc.erl:1037 msgid "Group " msgstr "Grupa " -#: mod_shared_roster.erl:1012 web/ejabberd_web_admin.erl:840 -#: web/ejabberd_web_admin.erl:884 web/ejabberd_web_admin.erl:949 -#: web/ejabberd_web_admin.erl:1026 web/ejabberd_web_admin.erl:2015 +#: mod_shared_roster.erl:1017 mod_shared_roster_odbc.erl:1046 +#: web/ejabberd_web_admin.erl:840 web/ejabberd_web_admin.erl:884 +#: web/ejabberd_web_admin.erl:949 web/ejabberd_web_admin.erl:1026 +#: web/ejabberd_web_admin.erl:2017 msgid "Submit" msgstr "Wyślij" -#: mod_vcard.erl:165 mod_vcard_ldap.erl:237 mod_vcard_odbc.erl:129 +#: mod_vcard.erl:165 mod_vcard_ldap.erl:238 mod_vcard_odbc.erl:129 msgid "Erlang Jabber Server" msgstr "Erlang Jabber Server" -#: mod_vcard.erl:358 mod_vcard.erl:472 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:448 +#: mod_vcard.erl:364 mod_vcard.erl:478 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:454 msgid "Birthday" msgstr "Data urodzenia" -#: mod_vcard.erl:358 mod_vcard.erl:474 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:450 +#: mod_vcard.erl:364 mod_vcard.erl:480 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:456 msgid "City" msgstr "Miasto" -#: mod_vcard.erl:358 mod_vcard.erl:473 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:449 +#: mod_vcard.erl:364 mod_vcard.erl:479 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:455 msgid "Country" msgstr "Państwo" -#: mod_vcard.erl:358 mod_vcard.erl:475 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:451 +#: mod_vcard.erl:364 mod_vcard.erl:481 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:457 msgid "Email" msgstr "Email" -#: mod_vcard.erl:358 mod_vcard.erl:470 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:446 +#: mod_vcard.erl:364 mod_vcard.erl:476 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:452 msgid "Family Name" msgstr "Nazwisko" -#: mod_vcard.erl:358 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_odbc.erl:342 msgid "" "Fill in the form to search for any matching Jabber User (Add * to the end of " "field to match substring)" @@ -1298,52 +1353,52 @@ msgstr "" "Wypełnij formularz aby wyszukać użytkowników Jabbera (dodaj * na koniec " "zapytania aby wyszukać po fragmencie)" -#: mod_vcard.erl:358 mod_vcard.erl:467 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:443 +#: mod_vcard.erl:364 mod_vcard.erl:473 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:449 msgid "Full Name" msgstr "Pełna nazwa" -#: mod_vcard.erl:358 mod_vcard.erl:469 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:445 +#: mod_vcard.erl:364 mod_vcard.erl:475 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:451 msgid "Middle Name" msgstr "Drugie imię" -#: mod_vcard.erl:358 mod_vcard.erl:468 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:444 web/ejabberd_web_admin.erl:2004 +#: mod_vcard.erl:364 mod_vcard.erl:474 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:450 web/ejabberd_web_admin.erl:2006 msgid "Name" msgstr "Imię" -#: mod_vcard.erl:358 mod_vcard.erl:476 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:452 +#: mod_vcard.erl:364 mod_vcard.erl:482 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:458 msgid "Organization Name" msgstr "Nazwa organizacji" -#: mod_vcard.erl:358 mod_vcard.erl:477 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:453 +#: mod_vcard.erl:364 mod_vcard.erl:483 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:459 msgid "Organization Unit" msgstr "Dział" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "Search users in " msgstr "Wyszukaj użytkowników w " -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "You need an x:data capable client to search" msgstr "Potrzebujesz klienta obsługującego x:data aby wyszukiwać" -#: mod_vcard.erl:383 mod_vcard_ldap.erl:483 mod_vcard_odbc.erl:361 +#: mod_vcard.erl:389 mod_vcard_ldap.erl:487 mod_vcard_odbc.erl:367 msgid "vCard User Search" msgstr "Wyszukiwanie vCard użytkowników" -#: mod_vcard.erl:439 mod_vcard_ldap.erl:537 mod_vcard_odbc.erl:415 +#: mod_vcard.erl:445 mod_vcard_ldap.erl:541 mod_vcard_odbc.erl:421 msgid "ejabberd vCard module" msgstr "Moduł vCard ejabberd" -#: mod_vcard.erl:463 mod_vcard_ldap.erl:547 mod_vcard_odbc.erl:439 +#: mod_vcard.erl:469 mod_vcard_ldap.erl:551 mod_vcard_odbc.erl:445 msgid "Search Results for " msgstr "Wyniki wyszukiwania dla " -#: mod_vcard_ldap.erl:458 +#: mod_vcard_ldap.erl:462 msgid "Fill in fields to search for any matching Jabber User" msgstr "Wypełnij pola aby znaleźć pasujących użytkowników Jabbera" @@ -1404,7 +1459,7 @@ msgstr "Pokaż zwykłą tabelę" msgid "Show Integral Table" msgstr "Pokaż tabelę całkowitą" -#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1937 +#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1939 msgid "Statistics" msgstr "Statystyki" @@ -1416,116 +1471,116 @@ msgstr "Nie znaleziono" msgid "Node not found" msgstr "Węzeł nie został znaleziony" -#: web/ejabberd_web_admin.erl:1461 +#: web/ejabberd_web_admin.erl:1460 msgid "Host" msgstr "Host" -#: web/ejabberd_web_admin.erl:1462 +#: web/ejabberd_web_admin.erl:1461 msgid "Registered Users" msgstr "Użytkownicy zarejestrowani" -#: web/ejabberd_web_admin.erl:1574 +#: web/ejabberd_web_admin.erl:1573 msgid "Offline Messages" msgstr "Wiadomości offline" -#: web/ejabberd_web_admin.erl:1575 web/ejabberd_web_admin.erl:1765 +#: web/ejabberd_web_admin.erl:1574 web/ejabberd_web_admin.erl:1767 msgid "Last Activity" msgstr "Ostatnia aktywność" -#: web/ejabberd_web_admin.erl:1657 web/ejabberd_web_admin.erl:1673 +#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 msgid "Registered Users:" msgstr "Użytkownicy zarejestrowani:" -#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 -#: web/ejabberd_web_admin.erl:2191 +#: web/ejabberd_web_admin.erl:1661 web/ejabberd_web_admin.erl:1677 +#: web/ejabberd_web_admin.erl:2192 msgid "Online Users:" msgstr "Użytkownicy zalogowani:" -#: web/ejabberd_web_admin.erl:1661 +#: web/ejabberd_web_admin.erl:1663 msgid "Outgoing s2s Connections:" msgstr "Wychodzące połączenia s2s:" -#: web/ejabberd_web_admin.erl:1663 +#: web/ejabberd_web_admin.erl:1665 msgid "Outgoing s2s Servers:" msgstr "Serwery zewnętrzne s2s:" -#: web/ejabberd_web_admin.erl:1732 web/mod_register_web.erl:175 +#: web/ejabberd_web_admin.erl:1734 web/mod_register_web.erl:175 #: web/mod_register_web.erl:372 web/mod_register_web.erl:381 #: web/mod_register_web.erl:411 msgid "Change Password" msgstr "Zmień hasło" -#: web/ejabberd_web_admin.erl:1756 +#: web/ejabberd_web_admin.erl:1758 msgid "User " msgstr "Użytkownik " -#: web/ejabberd_web_admin.erl:1763 +#: web/ejabberd_web_admin.erl:1765 msgid "Connected Resources:" msgstr "Zasoby zalogowane:" -#: web/ejabberd_web_admin.erl:1764 web/mod_register_web.erl:227 +#: web/ejabberd_web_admin.erl:1766 web/mod_register_web.erl:227 #: web/mod_register_web.erl:519 msgid "Password:" msgstr "Hasło:" -#: web/ejabberd_web_admin.erl:1826 +#: web/ejabberd_web_admin.erl:1828 msgid "No Data" msgstr "Brak danych" -#: web/ejabberd_web_admin.erl:1904 +#: web/ejabberd_web_admin.erl:1906 msgid "Nodes" msgstr "Węzły" -#: web/ejabberd_web_admin.erl:1927 web/ejabberd_web_admin.erl:1949 +#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1951 msgid "Node " msgstr "Węzeł " -#: web/ejabberd_web_admin.erl:1936 +#: web/ejabberd_web_admin.erl:1938 msgid "Listened Ports" msgstr "Porty nasłuchujące" -#: web/ejabberd_web_admin.erl:1938 web/ejabberd_web_admin.erl:2259 -#: web/ejabberd_web_admin.erl:2447 +#: web/ejabberd_web_admin.erl:1940 web/ejabberd_web_admin.erl:2260 +#: web/ejabberd_web_admin.erl:2448 msgid "Update" msgstr "Aktualizuj" -#: web/ejabberd_web_admin.erl:1941 web/ejabberd_web_admin.erl:2568 +#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2569 msgid "Restart" msgstr "Uruchom ponownie" -#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2570 +#: web/ejabberd_web_admin.erl:1945 web/ejabberd_web_admin.erl:2571 msgid "Stop" msgstr "Zatrzymaj" -#: web/ejabberd_web_admin.erl:1957 +#: web/ejabberd_web_admin.erl:1959 msgid "RPC Call Error" msgstr "Błąd żądania RPC" -#: web/ejabberd_web_admin.erl:1998 +#: web/ejabberd_web_admin.erl:2000 msgid "Database Tables at " msgstr "Tabele bazy na " -#: web/ejabberd_web_admin.erl:2005 +#: web/ejabberd_web_admin.erl:2007 msgid "Storage Type" msgstr "Typ bazy" -#: web/ejabberd_web_admin.erl:2006 +#: web/ejabberd_web_admin.erl:2008 msgid "Elements" msgstr "Elementy" -#: web/ejabberd_web_admin.erl:2007 +#: web/ejabberd_web_admin.erl:2009 msgid "Memory" msgstr "Pamięć" -#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2032 web/ejabberd_web_admin.erl:2137 msgid "Error" msgstr "Błąd" -#: web/ejabberd_web_admin.erl:2033 +#: web/ejabberd_web_admin.erl:2034 msgid "Backup of " msgstr "Kopia zapasowa " -#: web/ejabberd_web_admin.erl:2035 +#: web/ejabberd_web_admin.erl:2036 msgid "" "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 " @@ -1535,145 +1590,145 @@ msgstr "" "Jeśli korzystasz z modułu ODBC, musisz wykonać kopie bazy we własnym " "zakresie." -#: web/ejabberd_web_admin.erl:2040 +#: web/ejabberd_web_admin.erl:2041 msgid "Store binary backup:" msgstr "Zachowaj kopię binarną:" -#: web/ejabberd_web_admin.erl:2044 web/ejabberd_web_admin.erl:2051 -#: web/ejabberd_web_admin.erl:2059 web/ejabberd_web_admin.erl:2066 -#: web/ejabberd_web_admin.erl:2073 web/ejabberd_web_admin.erl:2080 -#: web/ejabberd_web_admin.erl:2087 web/ejabberd_web_admin.erl:2095 -#: web/ejabberd_web_admin.erl:2102 web/ejabberd_web_admin.erl:2109 +#: web/ejabberd_web_admin.erl:2045 web/ejabberd_web_admin.erl:2052 +#: web/ejabberd_web_admin.erl:2060 web/ejabberd_web_admin.erl:2067 +#: web/ejabberd_web_admin.erl:2074 web/ejabberd_web_admin.erl:2081 +#: web/ejabberd_web_admin.erl:2088 web/ejabberd_web_admin.erl:2096 +#: web/ejabberd_web_admin.erl:2103 web/ejabberd_web_admin.erl:2110 msgid "OK" msgstr "OK" -#: web/ejabberd_web_admin.erl:2047 +#: web/ejabberd_web_admin.erl:2048 msgid "Restore binary backup immediately:" msgstr "Natychmiast odtwórz kopię binarną:" -#: web/ejabberd_web_admin.erl:2055 +#: web/ejabberd_web_admin.erl:2056 msgid "" "Restore binary backup after next ejabberd restart (requires less memory):" msgstr "" "Odtwórz kopię binarną podczas następnego uruchomienia ejabberd (wymaga mniej " "zasobów):" -#: web/ejabberd_web_admin.erl:2062 +#: web/ejabberd_web_admin.erl:2063 msgid "Store plain text backup:" msgstr "Zachowaj kopię w postaci tekstowej:" -#: web/ejabberd_web_admin.erl:2069 +#: web/ejabberd_web_admin.erl:2070 msgid "Restore plain text backup immediately:" msgstr "Natychmiast odtwórz kopię z postaci tekstowej:" -#: web/ejabberd_web_admin.erl:2076 +#: web/ejabberd_web_admin.erl:2077 msgid "Import users data from a PIEFXIS file (XEP-0227):" msgstr "Importuj dane użytkowników z pliku w formacie PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2083 +#: web/ejabberd_web_admin.erl:2084 msgid "Export data of all users in the server to PIEFXIS files (XEP-0227):" msgstr "" "Eksportuj dane wszystkich użytkowników serwera do plików w formacie PIEFXIS " "(XEP-0227):" -#: web/ejabberd_web_admin.erl:2090 +#: web/ejabberd_web_admin.erl:2091 msgid "Export data of users in a host to PIEFXIS files (XEP-0227):" msgstr "" "Eksportuj dane użytkowników z hosta do plików w formacie PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2098 +#: web/ejabberd_web_admin.erl:2099 msgid "Import user data from jabberd14 spool file:" msgstr "Importuj dane użytkownika z pliku roboczego serwera jabberd14:" -#: web/ejabberd_web_admin.erl:2105 +#: web/ejabberd_web_admin.erl:2106 msgid "Import users data from jabberd14 spool directory:" msgstr "Importuj użytkowników z katalogu roboczego serwera jabberd14" -#: web/ejabberd_web_admin.erl:2131 +#: web/ejabberd_web_admin.erl:2132 msgid "Listened Ports at " msgstr "Porty nasłuchujące na " -#: web/ejabberd_web_admin.erl:2156 +#: web/ejabberd_web_admin.erl:2157 msgid "Modules at " msgstr "Moduły na " -#: web/ejabberd_web_admin.erl:2182 +#: web/ejabberd_web_admin.erl:2183 msgid "Statistics of ~p" msgstr "Statystyki ~p" -#: web/ejabberd_web_admin.erl:2185 +#: web/ejabberd_web_admin.erl:2186 msgid "Uptime:" msgstr "Czas pracy:" -#: web/ejabberd_web_admin.erl:2188 +#: web/ejabberd_web_admin.erl:2189 msgid "CPU Time:" msgstr "Czas CPU:" -#: web/ejabberd_web_admin.erl:2194 +#: web/ejabberd_web_admin.erl:2195 msgid "Transactions Committed:" msgstr "Transakcje zakończone:" -#: web/ejabberd_web_admin.erl:2197 +#: web/ejabberd_web_admin.erl:2198 msgid "Transactions Aborted:" msgstr "Transakcje anulowane:" -#: web/ejabberd_web_admin.erl:2200 +#: web/ejabberd_web_admin.erl:2201 msgid "Transactions Restarted:" msgstr "Transakcje uruchomione ponownie:" -#: web/ejabberd_web_admin.erl:2203 +#: web/ejabberd_web_admin.erl:2204 msgid "Transactions Logged:" msgstr "Transakcje zalogowane:" -#: web/ejabberd_web_admin.erl:2245 +#: web/ejabberd_web_admin.erl:2246 msgid "Update " msgstr "Uaktualnij " -#: web/ejabberd_web_admin.erl:2253 +#: web/ejabberd_web_admin.erl:2254 msgid "Update plan" msgstr "Plan aktualizacji" -#: web/ejabberd_web_admin.erl:2254 +#: web/ejabberd_web_admin.erl:2255 msgid "Modified modules" msgstr "Zmodyfikowane moduły" -#: web/ejabberd_web_admin.erl:2255 +#: web/ejabberd_web_admin.erl:2256 msgid "Update script" msgstr "Skrypt aktualizacji" -#: web/ejabberd_web_admin.erl:2256 +#: web/ejabberd_web_admin.erl:2257 msgid "Low level update script" msgstr "Skrypt aktualizacji niskiego poziomu" -#: web/ejabberd_web_admin.erl:2257 +#: web/ejabberd_web_admin.erl:2258 msgid "Script check" msgstr "Sprawdź skrypt" -#: web/ejabberd_web_admin.erl:2425 +#: web/ejabberd_web_admin.erl:2426 msgid "Port" msgstr "Port" -#: web/ejabberd_web_admin.erl:2426 +#: web/ejabberd_web_admin.erl:2427 msgid "IP" msgstr "IP" -#: web/ejabberd_web_admin.erl:2427 +#: web/ejabberd_web_admin.erl:2428 msgid "Protocol" msgstr "Protokół" -#: web/ejabberd_web_admin.erl:2428 web/ejabberd_web_admin.erl:2555 +#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 msgid "Module" msgstr "Moduł" -#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 +#: web/ejabberd_web_admin.erl:2430 web/ejabberd_web_admin.erl:2557 msgid "Options" msgstr "Opcje" -#: web/ejabberd_web_admin.erl:2449 +#: web/ejabberd_web_admin.erl:2450 msgid "Delete" msgstr "Usuń" -#: web/ejabberd_web_admin.erl:2578 +#: web/ejabberd_web_admin.erl:2579 msgid "Start" msgstr "Uruchom" diff --git a/src/msgs/pt-br.msg b/src/msgs/pt-br.msg index f7c334751..c2cdc2359 100644 --- a/src/msgs/pt-br.msg +++ b/src/msgs/pt-br.msg @@ -73,6 +73,7 @@ {"Dump Backup to Text File at ","Exportar backup para texto em "}. {"Dump to Text File","Exportar para arquivo de texto"}. {"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 MUC module","Módulo de MUC para ejabberd"}. {"ejabberd Publish-Subscribe module","Módulo para Publicar Tópicos do ejabberd"}. @@ -96,8 +97,10 @@ {"Erlang Jabber Server","Servidor Jabber em Erlang"}. {"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\"}]."}. +{"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 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"}. {"February","Fevereiro"}. {"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"}. {"Incorrect password","Senha incorreta"}. {"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","IP"}. {"IRC channel (don't put the first #)","Canal IRC (não coloque o #)"}. @@ -144,7 +147,7 @@ {"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 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 ID","ID Jabber"}. {"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"}. {"Low level update script","Script de atualização low level"}. {"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 moderated","Tornar a sala moderada"}. {"Make room password protected","Tornar protegida a senha da sala"}. @@ -182,6 +185,7 @@ {"Memory","Memória"}. {"Message body","Corpo da mensagem"}. {"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"}. {"moderators only","apenas moderadores"}. {"Modified modules","Módulos atualizados"}. @@ -195,6 +199,7 @@ {"Nickname","Apelido"}. {"Nickname Registration at ","Registro do apelido em "}. {"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 Data","Nenhum dado"}. {"Node ID","ID do Tópico"}. @@ -203,7 +208,7 @@ {"Nodes","Nós"}. {"No limit","Ilimitado"}. {"None","Nenhum"}. -{"No resource provided","Recurso não foi fornecido"}. +{"No resource provided","Nenhum recurso foi informado"}. {"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 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 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 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 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"}. @@ -244,11 +250,12 @@ {"Persist items to storage","Persistir elementos ao armazenar"}. {"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, wait for a while before sending new voice request","Por favor, espere antes de enviar uma nova requisição de voz"}. {"Pong","Pong"}. {"Port ~b","Porta ~b"}. {"Port","Porta"}. {"Present real Jabber IDs to","Tornar o Jabber ID real visível por"}. -{"private, ","privado"}. +{"private, ","privado, "}. {"Protocol","Porta"}. {"Publish-Subscribe","Publicação de Tópico"}. {"PubSub subscriber request","PubSub requisição de assinante"}. @@ -265,7 +272,7 @@ {"Registration in mod_irc for ","Registro em mod_irc para "}. {"Remote copy","Copia remota"}. {"Remove All Offline Messages","Remover Todas as Mensagens Offline"}. -{"Remove","Borrar"}. +{"Remove","Remover"}. {"Remove User","Remover usuário"}. {"Replaced by new connection","Substituído por nova conexão"}. {"Resources","Recursos"}. @@ -330,7 +337,8 @@ {"Sunday","Domingo"}. {"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"}. -{"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 password is","a senha é"}. {"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"}. {"Time delay","Intervalo (Tempo)"}. {"Time","Fecha"}. +{"Too many CAPTCHA requests","Número excessivo de requisições para o CAPTCHA"}. {"To","Para"}. {"To ~s","Para ~s"}. {"Traffic rate limit is exceeded","Limite de banda excedido"}. @@ -355,7 +364,7 @@ {"Transactions Logged:","Transações de log:"}. {"Transactions Restarted:","Transações reiniciadas:"}. {"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"}. {"Unregister a Jabber account","Deletar conta Jabber"}. {"Unregister","Deletar registro"}. @@ -366,7 +375,7 @@ {"Update plan","Plano de Atualização"}. {"Update script","Script de atualização"}. {"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"}. {"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"}. @@ -378,6 +387,8 @@ {"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 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"}. {"When to send the last published item","Quando enviar o último tópico publicado"}. {"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 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"}. -{"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 Jabber account was successfully created.","Sua conta jabber foi criada corretamente."}. {"Your Jabber account was successfully deleted.","Sua conta Jabber foi deletada com sucesso."}. diff --git a/src/msgs/pt-br.po b/src/msgs/pt-br.po index fa4f7dead..674d92c92 100644 --- a/src/msgs/pt-br.po +++ b/src/msgs/pt-br.po @@ -13,19 +13,19 @@ msgstr "" #: ejabberd_c2s.erl:424 ejabberd_c2s.erl:727 msgid "Use of STARTTLS required" -msgstr "É obrigatório usar STARTTLS" +msgstr "É obrigatório uso de STARTTLS" #: ejabberd_c2s.erl:503 msgid "No resource provided" -msgstr "Recurso não foi fornecido" +msgstr "Nenhum recurso foi informado" -#: ejabberd_c2s.erl:1149 +#: ejabberd_c2s.erl:1197 msgid "Replaced by new connection" msgstr "Substituído por nova conexão" -#: ejabberd_c2s.erl:1837 +#: ejabberd_c2s.erl:1885 msgid "Your active privacy list has denied the routing of this stanza." -msgstr "Sua lista de privacidade ativa negou o roteamento desta estada." +msgstr "Sua lista de privacidade ativa negou o roteamento deste." #: ejabberd_captcha.erl:96 ejabberd_captcha.erl:152 ejabberd_captcha.erl:178 msgid "Enter the text you see" @@ -45,8 +45,8 @@ msgid "CAPTCHA web page" msgstr "" #: ejabberd_captcha.erl:307 -msgid "The captcha is valid." -msgstr "O captcha é inválido." +msgid "The CAPTCHA is valid." +msgstr "O CAPTCHA é inválido." #: mod_adhoc.erl:95 mod_adhoc.erl:125 mod_adhoc.erl:143 mod_adhoc.erl:161 msgid "Commands" @@ -60,64 +60,67 @@ msgstr "Ping" msgid "Pong" msgstr "Pong" -#: mod_announce.erl:506 +#: mod_announce.erl:507 mod_announce_odbc.erl:499 msgid "Really delete message of the day?" msgstr "Deletar realmente a mensagem do dia?" -#: mod_announce.erl:514 mod_configure.erl:1083 mod_configure.erl:1128 +#: mod_announce.erl:515 mod_announce_odbc.erl:507 mod_configure.erl:1083 +#: mod_configure.erl:1128 msgid "Subject" msgstr "Assunto" -#: mod_announce.erl:519 mod_configure.erl:1088 mod_configure.erl:1133 +#: mod_announce.erl:520 mod_announce_odbc.erl:512 mod_configure.erl:1088 +#: mod_configure.erl:1133 msgid "Message body" msgstr "Corpo da mensagem" -#: mod_announce.erl:599 +#: mod_announce.erl:600 mod_announce_odbc.erl:592 msgid "No body provided for announce message" msgstr "Nenhum corpo de texto fornecido para anunciar mensagem" -#: mod_announce.erl:634 +#: mod_announce.erl:635 mod_announce_odbc.erl:627 msgid "Announcements" msgstr "Anúncios" -#: mod_announce.erl:636 +#: mod_announce.erl:637 mod_announce_odbc.erl:629 msgid "Send announcement to all users" msgstr "Enviar anúncio a todos os usuários" -#: mod_announce.erl:638 +#: mod_announce.erl:639 mod_announce_odbc.erl:631 msgid "Send announcement to all users on all hosts" msgstr "Enviar aviso para todos os usuários em todos os hosts" -#: mod_announce.erl:640 +#: mod_announce.erl:641 mod_announce_odbc.erl:633 msgid "Send announcement to all online users" msgstr "Enviar anúncio a todos os usuárions online" -#: mod_announce.erl:642 mod_configure.erl:1078 mod_configure.erl:1123 +#: mod_announce.erl:643 mod_announce_odbc.erl:635 mod_configure.erl:1078 +#: mod_configure.erl:1123 msgid "Send announcement to all online users on all hosts" msgstr "Enviar anúncio a todos usuários online em todas as máquinas" -#: mod_announce.erl:644 +#: mod_announce.erl:645 mod_announce_odbc.erl:637 msgid "Set message of the day and send to online users" msgstr "Definir mensagem do dia e enviar a todos usuários online" -#: mod_announce.erl:646 +#: mod_announce.erl:647 mod_announce_odbc.erl:639 msgid "Set message of the day on all hosts and send to online users" msgstr "" "Definir mensagem do dia em todos os hosts e enviar para os usuários online" -#: mod_announce.erl:648 +#: mod_announce.erl:649 mod_announce_odbc.erl:641 msgid "Update message of the day (don't send)" msgstr "Atualizar mensagem do dia (não enviar)" -#: mod_announce.erl:650 +#: mod_announce.erl:651 mod_announce_odbc.erl:643 msgid "Update message of the day on all hosts (don't send)" msgstr "Atualizar a mensagem do dia em todos os host (não enviar)" -#: mod_announce.erl:652 +#: mod_announce.erl:653 mod_announce_odbc.erl:645 msgid "Delete message of the day" msgstr "Apagar mensagem do dia" -#: mod_announce.erl:654 +#: mod_announce.erl:655 mod_announce_odbc.erl:647 msgid "Delete message of the day on all hosts" msgstr "Apagar a mensagem do dia em todos os hosts" @@ -126,7 +129,7 @@ msgstr "Apagar a mensagem do dia em todos os hosts" msgid "Configuration" msgstr "Configuração" -#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1934 +#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1936 msgid "Database" msgstr "Base de dados" @@ -138,7 +141,7 @@ msgstr "Iniciar módulos" msgid "Stop Modules" msgstr "Parar módulos" -#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1935 +#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1937 msgid "Backup" msgstr "Salvar cópia de segurança" @@ -167,7 +170,7 @@ msgid "Shut Down Service" msgstr "Parar Serviço" #: mod_configure.erl:145 mod_configure.erl:518 mod_configure.erl:1197 -#: web/ejabberd_web_admin.erl:1528 +#: web/ejabberd_web_admin.erl:1527 msgid "Add User" msgstr "Adicionar usuário" @@ -219,7 +222,7 @@ msgid "User Management" msgstr "Gerenciamento de Usuários" #: mod_configure.erl:500 web/ejabberd_web_admin.erl:1058 -#: web/ejabberd_web_admin.erl:1463 +#: web/ejabberd_web_admin.erl:1462 msgid "Online Users" msgstr "Usuários conectados" @@ -231,15 +234,15 @@ msgstr "Todos os usuários" msgid "Outgoing s2s Connections" msgstr "Conexões que partam de s2s" -#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1905 +#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1907 msgid "Running Nodes" msgstr "Nos em execução" -#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1907 +#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1909 msgid "Stopped Nodes" msgstr "Nos parados" -#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1951 +#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1953 msgid "Modules" msgstr "Módulos" @@ -370,15 +373,15 @@ msgstr "Regras de acesso" #: mod_configure.erl:1200 mod_configure.erl:1222 mod_configure.erl:1234 #: mod_configure.erl:1246 mod_configure.erl:1258 mod_configure.erl:1275 -#: mod_configure.erl:1287 mod_configure.erl:1652 mod_configure.erl:1702 -#: mod_configure.erl:1723 mod_roster.erl:943 mod_roster_odbc.erl:1048 -#: mod_vcard.erl:466 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:442 +#: mod_configure.erl:1287 mod_configure.erl:1650 mod_configure.erl:1700 +#: mod_configure.erl:1721 mod_roster.erl:943 mod_roster_odbc.erl:1060 +#: mod_vcard.erl:472 mod_vcard_ldap.erl:554 mod_vcard_odbc.erl:448 msgid "Jabber ID" msgstr "ID Jabber" -#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1653 -#: mod_configure.erl:1865 mod_muc/mod_muc_room.erl:2970 mod_register.erl:235 -#: web/ejabberd_web_admin.erl:1521 +#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1651 +#: mod_configure.erl:1863 mod_muc/mod_muc_room.erl:3224 mod_register.erl:235 +#: web/ejabberd_web_admin.erl:1520 msgid "Password" msgstr "Senha" @@ -394,71 +397,72 @@ msgstr "Número de usuários registrados" msgid "Number of online users" msgstr "Número de usuários online" -#: mod_configure.erl:1684 web/ejabberd_web_admin.erl:1589 -#: web/ejabberd_web_admin.erl:1741 +#: mod_configure.erl:1682 web/ejabberd_web_admin.erl:1588 +#: web/ejabberd_web_admin.erl:1743 msgid "Never" msgstr "Nunca" -#: mod_configure.erl:1698 web/ejabberd_web_admin.erl:1602 -#: web/ejabberd_web_admin.erl:1754 +#: mod_configure.erl:1696 web/ejabberd_web_admin.erl:1601 +#: web/ejabberd_web_admin.erl:1756 msgid "Online" msgstr "Conectado" -#: mod_configure.erl:1703 +#: mod_configure.erl:1701 msgid "Last login" msgstr "Último login" -#: mod_configure.erl:1724 +#: mod_configure.erl:1722 msgid "Roster size" msgstr "Tamanho da Lista" -#: mod_configure.erl:1725 +#: mod_configure.erl:1723 msgid "IP addresses" msgstr "Endereços IP" -#: mod_configure.erl:1726 +#: mod_configure.erl:1724 msgid "Resources" msgstr "Recursos" -#: mod_configure.erl:1852 +#: mod_configure.erl:1850 msgid "Administration of " msgstr "Administração de " -#: mod_configure.erl:1855 +#: mod_configure.erl:1853 msgid "Action on user" msgstr "Ação no usuário" -#: mod_configure.erl:1859 +#: mod_configure.erl:1857 msgid "Edit Properties" msgstr "Editar propriedades" -#: mod_configure.erl:1862 web/ejabberd_web_admin.erl:1767 +#: mod_configure.erl:1860 web/ejabberd_web_admin.erl:1769 msgid "Remove User" msgstr "Remover usuário" -#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:336 +#: mod_irc/mod_irc.erl:201 mod_irc/mod_irc_odbc.erl:196 +#: mod_muc/mod_muc.erl:336 mod_muc/mod_muc_odbc.erl:342 msgid "Access denied by service policy" msgstr "Aceso denegado por la política do serviço" -#: mod_irc/mod_irc.erl:400 +#: mod_irc/mod_irc.erl:401 mod_irc/mod_irc_odbc.erl:398 msgid "IRC Transport" msgstr "Transporte IRC" -#: mod_irc/mod_irc.erl:427 +#: mod_irc/mod_irc.erl:428 mod_irc/mod_irc_odbc.erl:425 msgid "ejabberd IRC module" msgstr "Módulo de IRC para ejabberd" -#: mod_irc/mod_irc.erl:558 +#: mod_irc/mod_irc.erl:559 mod_irc/mod_irc_odbc.erl:568 msgid "You need an x:data capable client to configure mod_irc settings" msgstr "" "Necessitas um cliente com suporte de x:data para configurar las opções de " "mod_irc" -#: mod_irc/mod_irc.erl:565 +#: mod_irc/mod_irc.erl:566 mod_irc/mod_irc_odbc.erl:575 msgid "Registration in mod_irc for " msgstr "Registro em mod_irc para " -#: mod_irc/mod_irc.erl:570 +#: mod_irc/mod_irc.erl:571 mod_irc/mod_irc_odbc.erl:580 msgid "" "Enter username, encodings, ports and passwords you wish to use for " "connecting to IRC servers" @@ -466,11 +470,11 @@ msgstr "" "Insira o nome de usuário, codificações, portas e senhas que vocêdeseja para " "usar nos servidores IRC" -#: mod_irc/mod_irc.erl:575 +#: mod_irc/mod_irc.erl:576 mod_irc/mod_irc_odbc.erl:585 msgid "IRC Username" msgstr "Usuário IRC" -#: mod_irc/mod_irc.erl:585 +#: mod_irc/mod_irc.erl:586 mod_irc/mod_irc_odbc.erl:595 msgid "" "If you want to specify different ports, passwords, encodings for IRC " "servers, fill this list with values in format '{\"irc server\", \"encoding" @@ -482,7 +486,7 @@ msgstr "" "'{\"servidor IRC\", \"codificação\", porta, \"senha\"}'. Por padrão, este " "serviço usa a codificação \"~s\", porta \"~p\", e senha em branco (vazia)" -#: mod_irc/mod_irc.erl:597 +#: mod_irc/mod_irc.erl:598 mod_irc/mod_irc_odbc.erl:607 msgid "" "Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." @@ -490,35 +494,36 @@ msgstr "" "Exemplo: [{\"irc.teste.net\", \"koi8-r\"}, 6667, \"senha\"}, {\"dominio.foo." "net\", \"iso8859-1\", 7000}, {\"irc.servidordeteste.net\", \"utf-8\"}]." -#: mod_irc/mod_irc.erl:602 +#: mod_irc/mod_irc.erl:603 mod_irc/mod_irc_odbc.erl:612 msgid "Connections parameters" msgstr "Parâmetros para as Conexões" -#: mod_irc/mod_irc.erl:727 +#: mod_irc/mod_irc.erl:728 mod_irc/mod_irc_odbc.erl:757 msgid "Join IRC channel" msgstr "Juntar-se ao canal IRC" -#: mod_irc/mod_irc.erl:731 +#: mod_irc/mod_irc.erl:732 mod_irc/mod_irc_odbc.erl:761 msgid "IRC channel (don't put the first #)" msgstr "Canal IRC (não coloque o #)" -#: mod_irc/mod_irc.erl:736 +#: mod_irc/mod_irc.erl:737 mod_irc/mod_irc_odbc.erl:766 msgid "IRC server" msgstr "Servidor IRC" -#: mod_irc/mod_irc.erl:769 mod_irc/mod_irc.erl:773 +#: mod_irc/mod_irc.erl:770 mod_irc/mod_irc.erl:774 +#: mod_irc/mod_irc_odbc.erl:799 mod_irc/mod_irc_odbc.erl:803 msgid "Join the IRC channel here." msgstr "Aqui! Juntar-se ao canal IRC." -#: mod_irc/mod_irc.erl:777 +#: mod_irc/mod_irc.erl:778 mod_irc/mod_irc_odbc.erl:807 msgid "Join the IRC channel in this Jabber ID: ~s" msgstr "Entrar no canal IRC, neste ID Jabber: ~s" -#: mod_irc/mod_irc.erl:862 +#: mod_irc/mod_irc.erl:863 mod_irc/mod_irc_odbc.erl:904 msgid "IRC settings" msgstr "Configurações do IRC" -#: mod_irc/mod_irc.erl:867 +#: mod_irc/mod_irc.erl:868 mod_irc/mod_irc_odbc.erl:909 msgid "" "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 " @@ -529,73 +534,74 @@ msgstr "" "mais campos que devem ser preenchidos. Ao final, pressione " "'Complete' ('Completar') para salvar a configuração." -#: mod_irc/mod_irc.erl:873 +#: mod_irc/mod_irc.erl:874 mod_irc/mod_irc_odbc.erl:915 msgid "IRC username" msgstr "Usuário IRC" -#: mod_irc/mod_irc.erl:922 +#: mod_irc/mod_irc.erl:923 mod_irc/mod_irc_odbc.erl:964 msgid "Password ~b" msgstr "Senha ~b" -#: mod_irc/mod_irc.erl:927 +#: mod_irc/mod_irc.erl:928 mod_irc/mod_irc_odbc.erl:969 msgid "Port ~b" msgstr "Porta ~b" -#: mod_irc/mod_irc.erl:932 +#: mod_irc/mod_irc.erl:933 mod_irc/mod_irc_odbc.erl:974 msgid "Encoding for server ~b" msgstr "Codificação para o servidor ~b" -#: mod_irc/mod_irc.erl:941 +#: mod_irc/mod_irc.erl:942 mod_irc/mod_irc_odbc.erl:983 msgid "Server ~b" msgstr "Servidor ~b" -#: mod_muc/mod_muc.erl:449 +#: mod_muc/mod_muc.erl:449 mod_muc/mod_muc_odbc.erl:456 msgid "Only service administrators are allowed to send service messages" msgstr "" "Apenas administradores possuem permissão para enviar mensagens de serviço" -#: mod_muc/mod_muc.erl:493 +#: mod_muc/mod_muc.erl:493 mod_muc/mod_muc_odbc.erl:500 msgid "Room creation is denied by service policy" msgstr "Se te a denegado criar la sala por política do serviço" -#: mod_muc/mod_muc.erl:500 +#: mod_muc/mod_muc.erl:500 mod_muc/mod_muc_odbc.erl:507 msgid "Conference room does not exist" msgstr "La sala de conferencias não existe" -#: mod_muc/mod_muc.erl:581 +#: mod_muc/mod_muc.erl:582 mod_muc/mod_muc_odbc.erl:595 msgid "Chatrooms" msgstr "Salas de Chat" -#: mod_muc/mod_muc.erl:711 +#: mod_muc/mod_muc.erl:712 mod_muc/mod_muc_odbc.erl:729 #, fuzzy msgid "You need a client that supports x:data to register the nickname" msgstr "" "Você precisa de um cliente com suporte de x:data para poder registrar o nick" -#: mod_muc/mod_muc.erl:717 +#: mod_muc/mod_muc.erl:718 mod_muc/mod_muc_odbc.erl:735 msgid "Nickname Registration at " msgstr "Registro do apelido em " -#: mod_muc/mod_muc.erl:721 +#: mod_muc/mod_muc.erl:722 mod_muc/mod_muc_odbc.erl:739 msgid "Enter nickname you want to register" msgstr "Introduza o apelido que quer registrar" -#: mod_muc/mod_muc.erl:722 mod_roster.erl:944 mod_roster_odbc.erl:1049 -#: mod_vcard.erl:358 mod_vcard.erl:471 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:447 +#: mod_muc/mod_muc.erl:723 mod_muc/mod_muc_odbc.erl:740 +#: mod_muc/mod_muc_room.erl:3810 mod_roster.erl:944 mod_roster_odbc.erl:1061 +#: mod_vcard.erl:364 mod_vcard.erl:477 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:453 msgid "Nickname" msgstr "Apelido" -#: mod_muc/mod_muc.erl:761 mod_muc/mod_muc_room.erl:933 -#: mod_muc/mod_muc_room.erl:1577 +#: mod_muc/mod_muc.erl:762 mod_muc/mod_muc_odbc.erl:784 +#: mod_muc/mod_muc_room.erl:1064 mod_muc/mod_muc_room.erl:1787 msgid "That nickname is registered by another person" msgstr "O nick já está registrado por outra pessoa" -#: mod_muc/mod_muc.erl:787 +#: mod_muc/mod_muc.erl:788 mod_muc/mod_muc_odbc.erl:811 msgid "You must fill in field \"Nickname\" in the form" msgstr "Você deve completar o campo \"Apelido\" no formulário" -#: mod_muc/mod_muc.erl:807 +#: mod_muc/mod_muc.erl:808 mod_muc/mod_muc_odbc.erl:831 msgid "ejabberd MUC module" msgstr "Módulo de MUC para ejabberd" @@ -636,8 +642,8 @@ msgstr "foi desconectado porque o sistema foi desligado" msgid "is now known as" msgstr "é agora conhecido como" -#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:689 -#: mod_muc/mod_muc_room.erl:2138 +#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:688 +#: mod_muc/mod_muc_room.erl:2393 msgid " has set the subject to: " msgstr " a posto o assunto: " @@ -733,34 +739,50 @@ msgstr "Novembro" msgid "December" msgstr "Dezembro" -#: mod_muc/mod_muc_log.erl:751 +#: mod_muc/mod_muc_log.erl:750 msgid "Room Configuration" msgstr "Configuração de salas" -#: mod_muc/mod_muc_log.erl:760 +#: mod_muc/mod_muc_log.erl:759 msgid "Room Occupants" msgstr "Número de participantes" -#: mod_muc/mod_muc_room.erl:170 +#: mod_muc/mod_muc_room.erl:174 msgid "Traffic rate limit is exceeded" msgstr "Limite de banda excedido" -#: mod_muc/mod_muc_room.erl:242 +#: mod_muc/mod_muc_room.erl:246 msgid "" "This participant is kicked from the room because he sent an error message" msgstr "" "Este participante foi desconectado da sala de chat por ter enviado uma " "mensagem de erro." -#: mod_muc/mod_muc_room.erl:251 +#: mod_muc/mod_muc_room.erl:255 msgid "It is not allowed to send private messages to the conference" -msgstr "Impedir o envio de mensagens privados a la sala" +msgstr "Impedir o envio de mensagens privadas para a sala" -#: mod_muc/mod_muc_room.erl:296 +#: mod_muc/mod_muc_room.erl:332 +msgid "Please, wait for a while before sending new voice request" +msgstr "Por favor, espere antes de enviar uma nova requisição de voz" + +#: mod_muc/mod_muc_room.erl:347 +msgid "Voice requests are disabled in this conference" +msgstr "Requisições de voz estào desabilitadas nesta conferência" + +#: mod_muc/mod_muc_room.erl:364 +msgid "Failed to extract JID from your voice request approval" +msgstr "Não foi possível extrair o JID (Jabber ID) da requisição de voz" + +#: mod_muc/mod_muc_room.erl:393 +msgid "Only moderators can approve voice requests" +msgstr "Somente moderadores podem aprovar requisições de voz" + +#: mod_muc/mod_muc_room.erl:408 msgid "Improper message type" msgstr "Tipo de mensagem incorreto" -#: mod_muc/mod_muc_room.erl:406 +#: mod_muc/mod_muc_room.erl:518 msgid "" "This participant is kicked from the room because he sent an error message to " "another participant" @@ -768,32 +790,32 @@ msgstr "" "Este participante foi desconectado da sala de chat por ter enviado uma " "mensagem de erro para outro usuário." -#: mod_muc/mod_muc_room.erl:419 +#: mod_muc/mod_muc_room.erl:531 msgid "It is not allowed to send private messages of type \"groupchat\"" msgstr "No está permitido enviar mensagens privados do tipo \"groupchat\"" -#: mod_muc/mod_muc_room.erl:431 mod_muc/mod_muc_room.erl:486 +#: mod_muc/mod_muc_room.erl:543 mod_muc/mod_muc_room.erl:611 msgid "Recipient is not in the conference room" msgstr "O receptor não está em la sala de conferencia" -#: mod_muc/mod_muc_room.erl:451 mod_muc/mod_muc_room.erl:829 -#: mod_muc/mod_muc_room.erl:3609 -msgid "Only occupants are allowed to send messages to the conference" -msgstr "Solo os ocupantes podem enviar mensagens a la sala" - -#: mod_muc/mod_muc_room.erl:460 +#: mod_muc/mod_muc_room.erl:564 mod_muc/mod_muc_room.erl:585 msgid "It is not allowed to send private messages" msgstr "Não é permitido enviar mensagens privadas" -#: mod_muc/mod_muc_room.erl:509 +#: mod_muc/mod_muc_room.erl:576 mod_muc/mod_muc_room.erl:956 +#: mod_muc/mod_muc_room.erl:4040 +msgid "Only occupants are allowed to send messages to the conference" +msgstr "Solo os ocupantes podem enviar mensagens a la sala" + +#: mod_muc/mod_muc_room.erl:634 msgid "Only occupants are allowed to send queries to the conference" msgstr "Solo os ocupantes podem enviar consultas a la sala" -#: mod_muc/mod_muc_room.erl:521 +#: mod_muc/mod_muc_room.erl:646 msgid "Queries to the conference members are not allowed in this room" msgstr "Nesta sala não se permite consultas aos membros da sala" -#: mod_muc/mod_muc_room.erl:805 +#: mod_muc/mod_muc_room.erl:932 msgid "" "Only moderators and participants are allowed to change the subject in this " "room" @@ -801,198 +823,233 @@ msgstr "" "Somente os moderadores e os participamentes podem alterar o assunto desta " "sala" -#: mod_muc/mod_muc_room.erl:810 +#: mod_muc/mod_muc_room.erl:937 msgid "Only moderators are allowed to change the subject in this room" msgstr "Somente os moderadores podem alterar o assunto desta sala" -#: mod_muc/mod_muc_room.erl:820 +#: mod_muc/mod_muc_room.erl:947 msgid "Visitors are not allowed to send messages to all occupants" msgstr "Os visitantes não podem enviar mensagens a todos os ocupantes" -#: mod_muc/mod_muc_room.erl:891 +#: mod_muc/mod_muc_room.erl:1021 msgid "" "This participant is kicked from the room because he sent an error presence" msgstr "" "Este participante foi desconectado da sala de chat por ter enviado uma " "notificação errônea de presença." -#: mod_muc/mod_muc_room.erl:909 +#: mod_muc/mod_muc_room.erl:1040 msgid "Visitors are not allowed to change their nicknames in this room" msgstr "Nesta sala, os visitantes não pode mudar seus apelidos" -#: mod_muc/mod_muc_room.erl:922 mod_muc/mod_muc_room.erl:1569 +#: mod_muc/mod_muc_room.erl:1053 mod_muc/mod_muc_room.erl:1779 msgid "That nickname is already in use by another occupant" msgstr "O apelido (nick) já está sendo utilizado" -#: mod_muc/mod_muc_room.erl:1558 +#: mod_muc/mod_muc_room.erl:1768 msgid "You have been banned from this room" msgstr "As sido bloqueado em esta sala" -#: mod_muc/mod_muc_room.erl:1561 +#: mod_muc/mod_muc_room.erl:1771 msgid "Membership is required to enter this room" msgstr "Necessitas ser membro de esta sala para poder entrar" -#: mod_muc/mod_muc_room.erl:1597 +#: mod_muc/mod_muc_room.erl:1807 msgid "This room is not anonymous" msgstr "Essa sala não é anônima" -#: mod_muc/mod_muc_room.erl:1623 +#: mod_muc/mod_muc_room.erl:1833 msgid "A password is required to enter this room" msgstr "Se necessita senha para entrar em esta sala" -#: mod_muc/mod_muc_room.erl:1645 mod_register.erl:246 +#: mod_muc/mod_muc_room.erl:1855 mod_register.erl:246 msgid "Too many CAPTCHA requests" -msgstr "" +msgstr "Número excessivo de requisições para o CAPTCHA" -#: mod_muc/mod_muc_room.erl:1654 -msgid "Unable to generate a captcha" -msgstr "Impossível gerar um captcha" +#: mod_muc/mod_muc_room.erl:1864 mod_register.erl:251 +msgid "Unable to generate a CAPTCHA" +msgstr "Impossível gerar um CAPTCHA" -#: mod_muc/mod_muc_room.erl:1664 +#: mod_muc/mod_muc_room.erl:1874 msgid "Incorrect password" msgstr "Senha incorreta" -#: mod_muc/mod_muc_room.erl:2193 +#: mod_muc/mod_muc_room.erl:2448 msgid "Administrator privileges required" msgstr "Se necessita privilégios de administrador" -#: mod_muc/mod_muc_room.erl:2208 +#: mod_muc/mod_muc_room.erl:2463 msgid "Moderator privileges required" msgstr "Se necessita privilégios de moderador" -#: mod_muc/mod_muc_room.erl:2363 +#: mod_muc/mod_muc_room.erl:2619 msgid "Jabber ID ~s is invalid" msgstr "O Jabber ID ~s não es válido" -#: mod_muc/mod_muc_room.erl:2377 +#: mod_muc/mod_muc_room.erl:2633 msgid "Nickname ~s does not exist in the room" msgstr "O nick ~s não existe em la sala" -#: mod_muc/mod_muc_room.erl:2403 mod_muc/mod_muc_room.erl:2797 +#: mod_muc/mod_muc_room.erl:2659 mod_muc/mod_muc_room.erl:3049 msgid "Invalid affiliation: ~s" msgstr "Afiliação não válida: ~s" -#: mod_muc/mod_muc_room.erl:2460 +#: mod_muc/mod_muc_room.erl:2713 msgid "Invalid role: ~s" -msgstr "Rol não válido: ~s" +msgstr "Cargo (role) é não válido: ~s" -#: mod_muc/mod_muc_room.erl:2774 mod_muc/mod_muc_room.erl:2810 +#: mod_muc/mod_muc_room.erl:3026 mod_muc/mod_muc_room.erl:3062 msgid "Owner privileges required" msgstr "Se requere privilégios de proprietário da sala" -#: mod_muc/mod_muc_room.erl:2941 +#: mod_muc/mod_muc_room.erl:3195 msgid "Configuration of room ~s" msgstr "Configuração para ~s" -#: mod_muc/mod_muc_room.erl:2946 +#: mod_muc/mod_muc_room.erl:3200 msgid "Room title" msgstr "Título da sala" -#: mod_muc/mod_muc_room.erl:2949 mod_muc/mod_muc_room.erl:3388 +#: mod_muc/mod_muc_room.erl:3203 mod_muc/mod_muc_room.erl:3692 msgid "Room description" msgstr "Descrição da Sala" -#: mod_muc/mod_muc_room.erl:2956 +#: mod_muc/mod_muc_room.erl:3210 msgid "Make room persistent" msgstr "Tornar sala persistente" -#: mod_muc/mod_muc_room.erl:2961 +#: mod_muc/mod_muc_room.erl:3215 msgid "Make room public searchable" msgstr "Tornar sala pública possível de ser encontrada" -#: mod_muc/mod_muc_room.erl:2964 +#: mod_muc/mod_muc_room.erl:3218 msgid "Make participants list public" msgstr "Tornar pública a lista de participantes" -#: mod_muc/mod_muc_room.erl:2967 +#: mod_muc/mod_muc_room.erl:3221 msgid "Make room password protected" msgstr "Tornar protegida a senha da sala" -#: mod_muc/mod_muc_room.erl:2978 +#: mod_muc/mod_muc_room.erl:3232 msgid "Maximum Number of Occupants" msgstr "Número máximo de participantes" -#: mod_muc/mod_muc_room.erl:2985 +#: mod_muc/mod_muc_room.erl:3239 msgid "No limit" msgstr "Ilimitado" -#: mod_muc/mod_muc_room.erl:2996 +#: mod_muc/mod_muc_room.erl:3250 msgid "Present real Jabber IDs to" msgstr "Tornar o Jabber ID real visível por" -#: mod_muc/mod_muc_room.erl:3004 +#: mod_muc/mod_muc_room.erl:3258 mod_muc/mod_muc_room.erl:3292 msgid "moderators only" msgstr "apenas moderadores" -#: mod_muc/mod_muc_room.erl:3006 +#: mod_muc/mod_muc_room.erl:3260 mod_muc/mod_muc_room.erl:3294 msgid "anyone" msgstr "qualquer um" -#: mod_muc/mod_muc_room.erl:3008 +#: mod_muc/mod_muc_room.erl:3262 msgid "Make room members-only" msgstr "Tornar sala apenas para membros" -#: mod_muc/mod_muc_room.erl:3011 +#: mod_muc/mod_muc_room.erl:3265 msgid "Make room moderated" msgstr "Tornar a sala moderada" -#: mod_muc/mod_muc_room.erl:3014 +#: mod_muc/mod_muc_room.erl:3268 msgid "Default users as participants" msgstr "Usuários padrões como participantes" -#: mod_muc/mod_muc_room.erl:3017 +#: mod_muc/mod_muc_room.erl:3271 msgid "Allow users to change the subject" msgstr "Permitir a usuários modificar o assunto" -#: mod_muc/mod_muc_room.erl:3020 +#: mod_muc/mod_muc_room.erl:3274 msgid "Allow users to send private messages" msgstr "Permitir a usuários enviarem mensagens privadas" -#: mod_muc/mod_muc_room.erl:3023 +#: mod_muc/mod_muc_room.erl:3279 +#, fuzzy +msgid "Allow visitors to send private messages to" +msgstr "Permitir a usuários enviarem mensagens privadas" + +#: mod_muc/mod_muc_room.erl:3290 +msgid "nobody" +msgstr "ninguém" + +#: mod_muc/mod_muc_room.erl:3296 msgid "Allow users to query other users" msgstr "Permitir a usuários pesquisar informações sobre os demais" -#: mod_muc/mod_muc_room.erl:3026 +#: mod_muc/mod_muc_room.erl:3299 msgid "Allow users to send invites" msgstr "Permitir a usuários envio de convites" -#: mod_muc/mod_muc_room.erl:3029 +#: mod_muc/mod_muc_room.erl:3302 msgid "Allow visitors to send status text in presence updates" msgstr "Permitir atualizações de status aos visitantes" -#: mod_muc/mod_muc_room.erl:3032 +#: mod_muc/mod_muc_room.erl:3305 msgid "Allow visitors to change nickname" msgstr "Permitir mudança de apelido aos visitantes" -#: mod_muc/mod_muc_room.erl:3038 -msgid "Make room captcha protected" +#: mod_muc/mod_muc_room.erl:3308 +#, fuzzy +msgid "Allow visitors to send voice requests" +msgstr "Permitir a usuários envio de convites" + +#: mod_muc/mod_muc_room.erl:3311 +msgid "Minimum interval between voice requests (in seconds)" +msgstr "O intervalo mínimo entre requisições de voz (em segundos)" + +#: mod_muc/mod_muc_room.erl:3317 +msgid "Make room CAPTCHA protected" msgstr "Tornar protegida a senha da sala" -#: mod_muc/mod_muc_room.erl:3043 +#: mod_muc/mod_muc_room.erl:3322 msgid "Exclude Jabber IDs from CAPTCHA challenge" -msgstr "" +msgstr "Excluir IDs Jabber de serem submetidos ao CAPTCHA" -#: mod_muc/mod_muc_room.erl:3050 +#: mod_muc/mod_muc_room.erl:3329 msgid "Enable logging" msgstr "Permitir criação de logs" -#: mod_muc/mod_muc_room.erl:3058 +#: mod_muc/mod_muc_room.erl:3337 msgid "You need an x:data capable client to configure room" msgstr "Necessitas um cliente com suporte de x:data para configurar la sala" -#: mod_muc/mod_muc_room.erl:3390 +#: mod_muc/mod_muc_room.erl:3694 msgid "Number of occupants" msgstr "Número de participantes" -#: mod_muc/mod_muc_room.erl:3446 +#: mod_muc/mod_muc_room.erl:3750 msgid "private, " -msgstr "privado" +msgstr "privado, " -#: mod_muc/mod_muc_room.erl:3529 +#: mod_muc/mod_muc_room.erl:3799 +msgid "Voice request" +msgstr "Requisição de voz" + +#: mod_muc/mod_muc_room.erl:3803 +msgid "Either approve or decline the voice request." +msgstr "Você deve aprovar/desaprovar a requisição de voz." + +#: mod_muc/mod_muc_room.erl:3809 +#, fuzzy +msgid "User JID" +msgstr "Usuário " + +#: mod_muc/mod_muc_room.erl:3811 +msgid "Grant voice to this person?" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3960 msgid "~s invites you to the room ~s" msgstr "~s convidou você para a sala ~s" -#: mod_muc/mod_muc_room.erl:3538 +#: mod_muc/mod_muc_room.erl:3969 msgid "the password is" msgstr "a senha é" @@ -1006,14 +1063,15 @@ msgid "~s's Offline Messages Queue" msgstr "~s's Fila de Mensagens Offline" #: mod_offline.erl:563 mod_offline_odbc.erl:411 mod_roster.erl:987 -#: mod_roster_odbc.erl:1092 mod_shared_roster.erl:896 -#: mod_shared_roster.erl:1005 web/ejabberd_web_admin.erl:833 +#: mod_roster_odbc.erl:1104 mod_shared_roster.erl:901 +#: mod_shared_roster.erl:1010 mod_shared_roster_odbc.erl:930 +#: mod_shared_roster_odbc.erl:1039 web/ejabberd_web_admin.erl:833 #: web/ejabberd_web_admin.erl:874 web/ejabberd_web_admin.erl:942 #: web/ejabberd_web_admin.erl:978 web/ejabberd_web_admin.erl:1019 -#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1758 -#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1961 -#: web/ejabberd_web_admin.erl:2030 web/ejabberd_web_admin.erl:2134 -#: web/ejabberd_web_admin.erl:2159 web/ejabberd_web_admin.erl:2247 +#: web/ejabberd_web_admin.erl:1508 web/ejabberd_web_admin.erl:1760 +#: web/ejabberd_web_admin.erl:1931 web/ejabberd_web_admin.erl:1963 +#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2135 +#: web/ejabberd_web_admin.erl:2160 web/ejabberd_web_admin.erl:2248 msgid "Submitted" msgstr "Submetido" @@ -1033,8 +1091,9 @@ msgstr "Para" msgid "Packet" msgstr "Pacote" -#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:903 -#: web/ejabberd_web_admin.erl:882 web/ejabberd_web_admin.erl:986 +#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:908 +#: mod_shared_roster_odbc.erl:937 web/ejabberd_web_admin.erl:882 +#: web/ejabberd_web_admin.erl:986 msgid "Delete Selected" msgstr "Remover os selecionados" @@ -1050,109 +1109,109 @@ msgstr "Remover Todas as Mensagens Offline" msgid "ejabberd SOCKS5 Bytestreams module" msgstr "Modulo ejabberd SOCKS5 Bytestreams" -#: mod_pubsub/mod_pubsub.erl:1119 mod_pubsub/mod_pubsub_odbc.erl:928 +#: mod_pubsub/mod_pubsub.erl:1120 mod_pubsub/mod_pubsub_odbc.erl:929 msgid "Publish-Subscribe" msgstr "Publicação de Tópico" -#: mod_pubsub/mod_pubsub.erl:1213 mod_pubsub/mod_pubsub_odbc.erl:1024 +#: mod_pubsub/mod_pubsub.erl:1214 mod_pubsub/mod_pubsub_odbc.erl:1025 msgid "ejabberd Publish-Subscribe module" msgstr "Módulo para Publicar Tópicos do ejabberd" -#: mod_pubsub/mod_pubsub.erl:1496 mod_pubsub/mod_pubsub_odbc.erl:1311 +#: mod_pubsub/mod_pubsub.erl:1497 mod_pubsub/mod_pubsub_odbc.erl:1312 msgid "PubSub subscriber request" msgstr "PubSub requisição de assinante" -#: mod_pubsub/mod_pubsub.erl:1498 mod_pubsub/mod_pubsub_odbc.erl:1313 +#: mod_pubsub/mod_pubsub.erl:1499 mod_pubsub/mod_pubsub_odbc.erl:1314 msgid "Choose whether to approve this entity's subscription." msgstr "Aprovar esta assinatura." -#: mod_pubsub/mod_pubsub.erl:1504 mod_pubsub/mod_pubsub_odbc.erl:1319 +#: mod_pubsub/mod_pubsub.erl:1505 mod_pubsub/mod_pubsub_odbc.erl:1320 msgid "Node ID" msgstr "ID do Tópico" -#: mod_pubsub/mod_pubsub.erl:1509 mod_pubsub/mod_pubsub_odbc.erl:1324 +#: mod_pubsub/mod_pubsub.erl:1510 mod_pubsub/mod_pubsub_odbc.erl:1325 msgid "Subscriber Address" msgstr "Endereço dos Assinantes" -#: mod_pubsub/mod_pubsub.erl:1515 mod_pubsub/mod_pubsub_odbc.erl:1330 +#: mod_pubsub/mod_pubsub.erl:1516 mod_pubsub/mod_pubsub_odbc.erl:1331 msgid "Allow this Jabber ID to subscribe to this pubsub node?" msgstr "Autorizar este Jabber ID para a inscrição neste tópico pubsub?" -#: mod_pubsub/mod_pubsub.erl:3416 mod_pubsub/mod_pubsub_odbc.erl:3229 +#: mod_pubsub/mod_pubsub.erl:3474 mod_pubsub/mod_pubsub_odbc.erl:3287 msgid "Deliver payloads with event notifications" msgstr "Enviar payloads junto com as notificações de eventos" -#: mod_pubsub/mod_pubsub.erl:3417 mod_pubsub/mod_pubsub_odbc.erl:3230 +#: mod_pubsub/mod_pubsub.erl:3475 mod_pubsub/mod_pubsub_odbc.erl:3288 msgid "Deliver event notifications" msgstr "Entregar as notificações de evento" -#: mod_pubsub/mod_pubsub.erl:3418 mod_pubsub/mod_pubsub_odbc.erl:3231 +#: mod_pubsub/mod_pubsub.erl:3476 mod_pubsub/mod_pubsub_odbc.erl:3289 msgid "Notify subscribers when the node configuration changes" msgstr "Notificar subscritores quando cambia la configuração do nodo" -#: mod_pubsub/mod_pubsub.erl:3419 mod_pubsub/mod_pubsub_odbc.erl:3232 +#: mod_pubsub/mod_pubsub.erl:3477 mod_pubsub/mod_pubsub_odbc.erl:3290 msgid "Notify subscribers when the node is deleted" msgstr "Notificar subscritores quando o nodo se elimine" -#: mod_pubsub/mod_pubsub.erl:3420 mod_pubsub/mod_pubsub_odbc.erl:3233 +#: mod_pubsub/mod_pubsub.erl:3478 mod_pubsub/mod_pubsub_odbc.erl:3291 msgid "Notify subscribers when items are removed from the node" msgstr "Notificar subscritores quando os elementos se eliminem do nodo" -#: mod_pubsub/mod_pubsub.erl:3421 mod_pubsub/mod_pubsub_odbc.erl:3234 +#: mod_pubsub/mod_pubsub.erl:3479 mod_pubsub/mod_pubsub_odbc.erl:3292 msgid "Persist items to storage" msgstr "Persistir elementos ao armazenar" -#: mod_pubsub/mod_pubsub.erl:3422 mod_pubsub/mod_pubsub_odbc.erl:3235 +#: mod_pubsub/mod_pubsub.erl:3480 mod_pubsub/mod_pubsub_odbc.erl:3293 msgid "A friendly name for the node" msgstr "Um nome familiar para o nó" -#: mod_pubsub/mod_pubsub.erl:3423 mod_pubsub/mod_pubsub_odbc.erl:3236 +#: mod_pubsub/mod_pubsub.erl:3481 mod_pubsub/mod_pubsub_odbc.erl:3294 msgid "Max # of items to persist" msgstr "Máximo # de elementos que persistem" -#: mod_pubsub/mod_pubsub.erl:3424 mod_pubsub/mod_pubsub_odbc.erl:3237 +#: mod_pubsub/mod_pubsub.erl:3482 mod_pubsub/mod_pubsub_odbc.erl:3295 msgid "Whether to allow subscriptions" msgstr "Permitir subscrições" -#: mod_pubsub/mod_pubsub.erl:3425 mod_pubsub/mod_pubsub_odbc.erl:3238 +#: mod_pubsub/mod_pubsub.erl:3483 mod_pubsub/mod_pubsub_odbc.erl:3296 msgid "Specify the access model" msgstr "Especificar os modelos de acesso" -#: mod_pubsub/mod_pubsub.erl:3428 mod_pubsub/mod_pubsub_odbc.erl:3241 +#: mod_pubsub/mod_pubsub.erl:3486 mod_pubsub/mod_pubsub_odbc.erl:3299 msgid "Roster groups allowed to subscribe" msgstr "Listar grupos autorizados" -#: mod_pubsub/mod_pubsub.erl:3429 mod_pubsub/mod_pubsub_odbc.erl:3242 +#: mod_pubsub/mod_pubsub.erl:3487 mod_pubsub/mod_pubsub_odbc.erl:3300 msgid "Specify the publisher model" msgstr "Especificar o modelo do publicante" -#: mod_pubsub/mod_pubsub.erl:3431 mod_pubsub/mod_pubsub_odbc.erl:3244 +#: mod_pubsub/mod_pubsub.erl:3489 mod_pubsub/mod_pubsub_odbc.erl:3302 msgid "Purge all items when the relevant publisher goes offline" msgstr "Descartar todos os itens quando o publicante principal estiver offline" -#: mod_pubsub/mod_pubsub.erl:3432 mod_pubsub/mod_pubsub_odbc.erl:3245 +#: mod_pubsub/mod_pubsub.erl:3490 mod_pubsub/mod_pubsub_odbc.erl:3303 msgid "Specify the event message type" msgstr "Especificar o tipo de mensagem para o evento" -#: mod_pubsub/mod_pubsub.erl:3434 mod_pubsub/mod_pubsub_odbc.erl:3247 +#: mod_pubsub/mod_pubsub.erl:3492 mod_pubsub/mod_pubsub_odbc.erl:3305 msgid "Max payload size in bytes" msgstr "Máximo tamanho do payload em bytes" -#: mod_pubsub/mod_pubsub.erl:3435 mod_pubsub/mod_pubsub_odbc.erl:3248 +#: mod_pubsub/mod_pubsub.erl:3493 mod_pubsub/mod_pubsub_odbc.erl:3306 msgid "When to send the last published item" msgstr "Quando enviar o último tópico publicado" -#: mod_pubsub/mod_pubsub.erl:3437 mod_pubsub/mod_pubsub_odbc.erl:3250 +#: mod_pubsub/mod_pubsub.erl:3495 mod_pubsub/mod_pubsub_odbc.erl:3308 msgid "Only deliver notifications to available users" msgstr "Solo enviar notificações aos usuários disponíveis" -#: mod_pubsub/mod_pubsub.erl:3438 mod_pubsub/mod_pubsub_odbc.erl:3251 +#: mod_pubsub/mod_pubsub.erl:3496 mod_pubsub/mod_pubsub_odbc.erl:3309 msgid "The collections with which a node is affiliated" msgstr "As coleções com as quais o nó está relacionado" #: mod_register.erl:193 msgid "The CAPTCHA verification has failed" -msgstr "" +msgstr "A verificação do CAPTCHA falhou" #: mod_register.erl:220 #, fuzzy @@ -1164,140 +1223,138 @@ msgstr "" msgid "Choose a username and password to register with this server" msgstr "Escolha um nome de usuário e senha para registrar-se neste servidor" -#: mod_register.erl:230 mod_vcard.erl:358 mod_vcard_odbc.erl:336 -#: web/ejabberd_web_admin.erl:1516 web/ejabberd_web_admin.erl:1573 +#: mod_register.erl:230 mod_vcard.erl:364 mod_vcard_odbc.erl:342 +#: web/ejabberd_web_admin.erl:1515 web/ejabberd_web_admin.erl:1572 msgid "User" msgstr "Usuário" -#: mod_register.erl:251 -#, fuzzy -msgid "Unable to generate a CAPTCHA" -msgstr "Impossível gerar um CAPTCHA" - #: mod_register.erl:316 mod_register.erl:361 #, fuzzy msgid "The password is too weak" -msgstr "a senha é" +msgstr "Senha considerada fraca'" #: mod_register.erl:365 msgid "Users are not allowed to register accounts so quickly" msgstr "Usuários não estão autorizados a registrar contas imediatamente" -#: mod_roster.erl:938 mod_roster_odbc.erl:1043 web/ejabberd_web_admin.erl:1699 -#: web/ejabberd_web_admin.erl:1884 web/ejabberd_web_admin.erl:1895 -#: web/ejabberd_web_admin.erl:2218 +#: mod_roster.erl:938 mod_roster_odbc.erl:1055 web/ejabberd_web_admin.erl:1701 +#: web/ejabberd_web_admin.erl:1886 web/ejabberd_web_admin.erl:1897 +#: web/ejabberd_web_admin.erl:2219 msgid "None" msgstr "Nenhum" -#: mod_roster.erl:945 mod_roster_odbc.erl:1050 +#: mod_roster.erl:945 mod_roster_odbc.erl:1062 msgid "Subscription" msgstr "Subscrição" -#: mod_roster.erl:946 mod_roster_odbc.erl:1051 +#: mod_roster.erl:946 mod_roster_odbc.erl:1063 msgid "Pending" msgstr "Pendente" -#: mod_roster.erl:947 mod_roster_odbc.erl:1052 +#: mod_roster.erl:947 mod_roster_odbc.erl:1064 msgid "Groups" msgstr "Grupos" -#: mod_roster.erl:974 mod_roster_odbc.erl:1079 +#: mod_roster.erl:974 mod_roster_odbc.erl:1091 msgid "Validate" msgstr "Validar" -#: mod_roster.erl:982 mod_roster_odbc.erl:1087 +#: mod_roster.erl:982 mod_roster_odbc.erl:1099 msgid "Remove" -msgstr "Borrar" +msgstr "Remover" -#: mod_roster.erl:985 mod_roster_odbc.erl:1090 +#: mod_roster.erl:985 mod_roster_odbc.erl:1102 msgid "Roster of " msgstr "Lista de contatos de " -#: mod_roster.erl:988 mod_roster_odbc.erl:1093 mod_shared_roster.erl:897 -#: mod_shared_roster.erl:1006 web/ejabberd_web_admin.erl:834 +#: mod_roster.erl:988 mod_roster_odbc.erl:1105 mod_shared_roster.erl:902 +#: mod_shared_roster.erl:1011 mod_shared_roster_odbc.erl:931 +#: mod_shared_roster_odbc.erl:1040 web/ejabberd_web_admin.erl:834 #: web/ejabberd_web_admin.erl:875 web/ejabberd_web_admin.erl:943 #: web/ejabberd_web_admin.erl:979 web/ejabberd_web_admin.erl:1020 -#: web/ejabberd_web_admin.erl:1510 web/ejabberd_web_admin.erl:1759 -#: web/ejabberd_web_admin.erl:1930 web/ejabberd_web_admin.erl:2135 -#: web/ejabberd_web_admin.erl:2160 +#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1761 +#: web/ejabberd_web_admin.erl:1932 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2161 msgid "Bad format" msgstr "Formato incorreto" -#: mod_roster.erl:995 mod_roster_odbc.erl:1100 +#: mod_roster.erl:995 mod_roster_odbc.erl:1112 msgid "Add Jabber ID" msgstr "Adicionar ID jabber" -#: mod_roster.erl:1094 mod_roster_odbc.erl:1199 +#: mod_roster.erl:1094 mod_roster_odbc.erl:1211 msgid "Roster" msgstr "Lista de contatos" -#: mod_shared_roster.erl:852 mod_shared_roster.erl:894 -#: mod_shared_roster.erl:1002 +#: mod_shared_roster.erl:857 mod_shared_roster.erl:899 +#: mod_shared_roster.erl:1007 mod_shared_roster_odbc.erl:886 +#: mod_shared_roster_odbc.erl:928 mod_shared_roster_odbc.erl:1036 msgid "Shared Roster Groups" msgstr "Grupos Shared Roster" -#: mod_shared_roster.erl:890 web/ejabberd_web_admin.erl:1366 -#: web/ejabberd_web_admin.erl:2460 +#: mod_shared_roster.erl:895 mod_shared_roster_odbc.erl:924 +#: web/ejabberd_web_admin.erl:1365 web/ejabberd_web_admin.erl:2461 msgid "Add New" msgstr "Adicionar novo" -#: mod_shared_roster.erl:973 +#: mod_shared_roster.erl:978 mod_shared_roster_odbc.erl:1007 msgid "Name:" msgstr "Nome:" -#: mod_shared_roster.erl:978 +#: mod_shared_roster.erl:983 mod_shared_roster_odbc.erl:1012 msgid "Description:" msgstr "Descrição:" -#: mod_shared_roster.erl:986 +#: mod_shared_roster.erl:991 mod_shared_roster_odbc.erl:1020 msgid "Members:" msgstr "Miembros:" -#: mod_shared_roster.erl:994 +#: mod_shared_roster.erl:999 mod_shared_roster_odbc.erl:1028 #, fuzzy msgid "Displayed Groups:" msgstr "Grupos Indicados:" -#: mod_shared_roster.erl:1003 +#: mod_shared_roster.erl:1008 mod_shared_roster_odbc.erl:1037 msgid "Group " msgstr "Grupo " -#: mod_shared_roster.erl:1012 web/ejabberd_web_admin.erl:840 -#: web/ejabberd_web_admin.erl:884 web/ejabberd_web_admin.erl:949 -#: web/ejabberd_web_admin.erl:1026 web/ejabberd_web_admin.erl:2015 +#: mod_shared_roster.erl:1017 mod_shared_roster_odbc.erl:1046 +#: web/ejabberd_web_admin.erl:840 web/ejabberd_web_admin.erl:884 +#: web/ejabberd_web_admin.erl:949 web/ejabberd_web_admin.erl:1026 +#: web/ejabberd_web_admin.erl:2017 msgid "Submit" msgstr "Enviar" -#: mod_vcard.erl:165 mod_vcard_ldap.erl:237 mod_vcard_odbc.erl:129 +#: mod_vcard.erl:165 mod_vcard_ldap.erl:238 mod_vcard_odbc.erl:129 msgid "Erlang Jabber Server" msgstr "Servidor Jabber em Erlang" -#: mod_vcard.erl:358 mod_vcard.erl:472 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:448 +#: mod_vcard.erl:364 mod_vcard.erl:478 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:454 msgid "Birthday" msgstr "Aniversário" -#: mod_vcard.erl:358 mod_vcard.erl:474 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:450 +#: mod_vcard.erl:364 mod_vcard.erl:480 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:456 msgid "City" msgstr "Cidade" -#: mod_vcard.erl:358 mod_vcard.erl:473 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:449 +#: mod_vcard.erl:364 mod_vcard.erl:479 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:455 msgid "Country" msgstr "País" -#: mod_vcard.erl:358 mod_vcard.erl:475 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:451 +#: mod_vcard.erl:364 mod_vcard.erl:481 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:457 msgid "Email" msgstr "Email" -#: mod_vcard.erl:358 mod_vcard.erl:470 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:446 +#: mod_vcard.erl:364 mod_vcard.erl:476 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:452 msgid "Family Name" msgstr "Sobrenome" -#: mod_vcard.erl:358 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_odbc.erl:342 msgid "" "Fill in the form to search for any matching Jabber User (Add * to the end of " "field to match substring)" @@ -1305,52 +1362,52 @@ msgstr "" "Preencha o formulário para buscar usuários Jabber. Agrega * ao final de um " "campo para buscar sub-palavras." -#: mod_vcard.erl:358 mod_vcard.erl:467 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:443 +#: mod_vcard.erl:364 mod_vcard.erl:473 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:449 msgid "Full Name" msgstr "Nome completo" -#: mod_vcard.erl:358 mod_vcard.erl:469 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:445 +#: mod_vcard.erl:364 mod_vcard.erl:475 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:451 msgid "Middle Name" msgstr "Nome do meio" -#: mod_vcard.erl:358 mod_vcard.erl:468 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:444 web/ejabberd_web_admin.erl:2004 +#: mod_vcard.erl:364 mod_vcard.erl:474 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:450 web/ejabberd_web_admin.erl:2006 msgid "Name" msgstr "Nome" -#: mod_vcard.erl:358 mod_vcard.erl:476 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:452 +#: mod_vcard.erl:364 mod_vcard.erl:482 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:458 msgid "Organization Name" msgstr "Nome da organização" -#: mod_vcard.erl:358 mod_vcard.erl:477 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:453 +#: mod_vcard.erl:364 mod_vcard.erl:483 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:459 msgid "Organization Unit" msgstr "Departamento/Unidade" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "Search users in " msgstr "Procurar usuários em " -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "You need an x:data capable client to search" msgstr "Necessitas um cliente com suporte de x:data para poder buscar" -#: mod_vcard.erl:383 mod_vcard_ldap.erl:483 mod_vcard_odbc.erl:361 +#: mod_vcard.erl:389 mod_vcard_ldap.erl:487 mod_vcard_odbc.erl:367 msgid "vCard User Search" msgstr "Busca de Usuário vCard" -#: mod_vcard.erl:439 mod_vcard_ldap.erl:537 mod_vcard_odbc.erl:415 +#: mod_vcard.erl:445 mod_vcard_ldap.erl:541 mod_vcard_odbc.erl:421 msgid "ejabberd vCard module" msgstr "Módulo vCard para ejabberd" -#: mod_vcard.erl:463 mod_vcard_ldap.erl:547 mod_vcard_odbc.erl:439 +#: mod_vcard.erl:469 mod_vcard_ldap.erl:551 mod_vcard_odbc.erl:445 msgid "Search Results for " msgstr "Resultados de pesquisa para " -#: mod_vcard_ldap.erl:458 +#: mod_vcard_ldap.erl:462 msgid "Fill in fields to search for any matching Jabber User" msgstr "Preencha campos para buscar usuários Jabber que concordem" @@ -1411,7 +1468,7 @@ msgstr "Mostrar Tabela Ordinária" msgid "Show Integral Table" msgstr "Mostrar Tabela Integral" -#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1937 +#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1939 msgid "Statistics" msgstr "Estatísticas" @@ -1423,116 +1480,116 @@ msgstr "Não encontrado" msgid "Node not found" msgstr "Nó não encontrado" -#: web/ejabberd_web_admin.erl:1461 +#: web/ejabberd_web_admin.erl:1460 msgid "Host" msgstr "Máquina" -#: web/ejabberd_web_admin.erl:1462 +#: web/ejabberd_web_admin.erl:1461 msgid "Registered Users" msgstr "Usuários Registrados" -#: web/ejabberd_web_admin.erl:1574 +#: web/ejabberd_web_admin.erl:1573 msgid "Offline Messages" msgstr "Mensagens offline" -#: web/ejabberd_web_admin.erl:1575 web/ejabberd_web_admin.erl:1765 +#: web/ejabberd_web_admin.erl:1574 web/ejabberd_web_admin.erl:1767 msgid "Last Activity" msgstr "Última atividade" -#: web/ejabberd_web_admin.erl:1657 web/ejabberd_web_admin.erl:1673 +#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 msgid "Registered Users:" msgstr "Usuários registrados" -#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 -#: web/ejabberd_web_admin.erl:2191 +#: web/ejabberd_web_admin.erl:1661 web/ejabberd_web_admin.erl:1677 +#: web/ejabberd_web_admin.erl:2192 msgid "Online Users:" msgstr "Usuários online" -#: web/ejabberd_web_admin.erl:1661 +#: web/ejabberd_web_admin.erl:1663 msgid "Outgoing s2s Connections:" msgstr "Conexões que partem de s2s" -#: web/ejabberd_web_admin.erl:1663 +#: web/ejabberd_web_admin.erl:1665 msgid "Outgoing s2s Servers:" msgstr "Servidores que partem de s2s" -#: web/ejabberd_web_admin.erl:1732 web/mod_register_web.erl:175 +#: web/ejabberd_web_admin.erl:1734 web/mod_register_web.erl:175 #: web/mod_register_web.erl:372 web/mod_register_web.erl:381 #: web/mod_register_web.erl:411 msgid "Change Password" msgstr "Mudar senha" -#: web/ejabberd_web_admin.erl:1756 +#: web/ejabberd_web_admin.erl:1758 msgid "User " msgstr "Usuário " -#: web/ejabberd_web_admin.erl:1763 +#: web/ejabberd_web_admin.erl:1765 msgid "Connected Resources:" msgstr "Recursos conectados:" -#: web/ejabberd_web_admin.erl:1764 web/mod_register_web.erl:227 +#: web/ejabberd_web_admin.erl:1766 web/mod_register_web.erl:227 #: web/mod_register_web.erl:519 msgid "Password:" msgstr "Senha:" -#: web/ejabberd_web_admin.erl:1826 +#: web/ejabberd_web_admin.erl:1828 msgid "No Data" msgstr "Nenhum dado" -#: web/ejabberd_web_admin.erl:1904 +#: web/ejabberd_web_admin.erl:1906 msgid "Nodes" msgstr "Nós" -#: web/ejabberd_web_admin.erl:1927 web/ejabberd_web_admin.erl:1949 +#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1951 msgid "Node " msgstr "Nó" -#: web/ejabberd_web_admin.erl:1936 +#: web/ejabberd_web_admin.erl:1938 msgid "Listened Ports" msgstr "Portas escutadas" -#: web/ejabberd_web_admin.erl:1938 web/ejabberd_web_admin.erl:2259 -#: web/ejabberd_web_admin.erl:2447 +#: web/ejabberd_web_admin.erl:1940 web/ejabberd_web_admin.erl:2260 +#: web/ejabberd_web_admin.erl:2448 msgid "Update" msgstr "Atualizar" -#: web/ejabberd_web_admin.erl:1941 web/ejabberd_web_admin.erl:2568 +#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2569 msgid "Restart" msgstr "Reiniciar" -#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2570 +#: web/ejabberd_web_admin.erl:1945 web/ejabberd_web_admin.erl:2571 msgid "Stop" msgstr "Parar" -#: web/ejabberd_web_admin.erl:1957 +#: web/ejabberd_web_admin.erl:1959 msgid "RPC Call Error" msgstr "Erro de chamada RPC" -#: web/ejabberd_web_admin.erl:1998 +#: web/ejabberd_web_admin.erl:2000 msgid "Database Tables at " msgstr "Tabelas de base de dados em " -#: web/ejabberd_web_admin.erl:2005 +#: web/ejabberd_web_admin.erl:2007 msgid "Storage Type" msgstr "Tipo de armazenamento" -#: web/ejabberd_web_admin.erl:2006 +#: web/ejabberd_web_admin.erl:2008 msgid "Elements" msgstr "Elementos" -#: web/ejabberd_web_admin.erl:2007 +#: web/ejabberd_web_admin.erl:2009 msgid "Memory" msgstr "Memória" -#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2032 web/ejabberd_web_admin.erl:2137 msgid "Error" msgstr "Erro" -#: web/ejabberd_web_admin.erl:2033 +#: web/ejabberd_web_admin.erl:2034 msgid "Backup of " msgstr "Backup de " -#: web/ejabberd_web_admin.erl:2035 +#: web/ejabberd_web_admin.erl:2036 msgid "" "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 " @@ -1542,145 +1599,145 @@ msgstr "" "você esteja utilizando o modulo ODBC, você precisará fazer backup de sua " "base de dados SQL separadamente." -#: web/ejabberd_web_admin.erl:2040 +#: web/ejabberd_web_admin.erl:2041 msgid "Store binary backup:" msgstr "Armazenar backup binário:" -#: web/ejabberd_web_admin.erl:2044 web/ejabberd_web_admin.erl:2051 -#: web/ejabberd_web_admin.erl:2059 web/ejabberd_web_admin.erl:2066 -#: web/ejabberd_web_admin.erl:2073 web/ejabberd_web_admin.erl:2080 -#: web/ejabberd_web_admin.erl:2087 web/ejabberd_web_admin.erl:2095 -#: web/ejabberd_web_admin.erl:2102 web/ejabberd_web_admin.erl:2109 +#: web/ejabberd_web_admin.erl:2045 web/ejabberd_web_admin.erl:2052 +#: web/ejabberd_web_admin.erl:2060 web/ejabberd_web_admin.erl:2067 +#: web/ejabberd_web_admin.erl:2074 web/ejabberd_web_admin.erl:2081 +#: web/ejabberd_web_admin.erl:2088 web/ejabberd_web_admin.erl:2096 +#: web/ejabberd_web_admin.erl:2103 web/ejabberd_web_admin.erl:2110 msgid "OK" msgstr "OK" -#: web/ejabberd_web_admin.erl:2047 +#: web/ejabberd_web_admin.erl:2048 msgid "Restore binary backup immediately:" msgstr "Restaurar backup binário imediatamente" -#: web/ejabberd_web_admin.erl:2055 +#: web/ejabberd_web_admin.erl:2056 msgid "" "Restore binary backup after next ejabberd restart (requires less memory):" msgstr "" "Restaurar backup binário após próximo reinicialização do ejabberd (requer " "menos memória):" -#: web/ejabberd_web_admin.erl:2062 +#: web/ejabberd_web_admin.erl:2063 msgid "Store plain text backup:" msgstr "Armazenar backup em texto:" -#: web/ejabberd_web_admin.erl:2069 +#: web/ejabberd_web_admin.erl:2070 msgid "Restore plain text backup immediately:" msgstr "Restaurar backup formato texto imediatamente:" -#: web/ejabberd_web_admin.erl:2076 +#: web/ejabberd_web_admin.erl:2077 msgid "Import users data from a PIEFXIS file (XEP-0227):" msgstr "Importar usuários de um arquivo PIEFXIS (XEP-0227): " -#: web/ejabberd_web_admin.erl:2083 +#: web/ejabberd_web_admin.erl:2084 msgid "Export data of all users in the server to PIEFXIS files (XEP-0227):" msgstr "" "Exportar todos os dados de todos os usuários no servidor, para arquivos " "formato PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2090 +#: web/ejabberd_web_admin.erl:2091 msgid "Export data of users in a host to PIEFXIS files (XEP-0227):" msgstr "" "Exportar dados dos usuários em um host, para arquivos PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2098 +#: web/ejabberd_web_admin.erl:2099 msgid "Import user data from jabberd14 spool file:" msgstr "Importar dados dos usuários de uma fila jabberd14:" -#: web/ejabberd_web_admin.erl:2105 +#: web/ejabberd_web_admin.erl:2106 msgid "Import users data from jabberd14 spool directory:" msgstr "Importar dados dos usuários de um diretório-fila jabberd14:" -#: web/ejabberd_web_admin.erl:2131 +#: web/ejabberd_web_admin.erl:2132 msgid "Listened Ports at " msgstr "Portas ouvintes em " -#: web/ejabberd_web_admin.erl:2156 +#: web/ejabberd_web_admin.erl:2157 msgid "Modules at " msgstr "Módulos em " -#: web/ejabberd_web_admin.erl:2182 +#: web/ejabberd_web_admin.erl:2183 msgid "Statistics of ~p" msgstr "Estatísticas de ~p" -#: web/ejabberd_web_admin.erl:2185 +#: web/ejabberd_web_admin.erl:2186 msgid "Uptime:" msgstr "Uptime:" -#: web/ejabberd_web_admin.erl:2188 +#: web/ejabberd_web_admin.erl:2189 msgid "CPU Time:" msgstr "Tempo de CPU" -#: web/ejabberd_web_admin.erl:2194 +#: web/ejabberd_web_admin.erl:2195 msgid "Transactions Committed:" msgstr "Transações salvas:" -#: web/ejabberd_web_admin.erl:2197 +#: web/ejabberd_web_admin.erl:2198 msgid "Transactions Aborted:" msgstr "Transações abortadas:" -#: web/ejabberd_web_admin.erl:2200 +#: web/ejabberd_web_admin.erl:2201 msgid "Transactions Restarted:" msgstr "Transações reiniciadas:" -#: web/ejabberd_web_admin.erl:2203 +#: web/ejabberd_web_admin.erl:2204 msgid "Transactions Logged:" msgstr "Transações de log:" -#: web/ejabberd_web_admin.erl:2245 +#: web/ejabberd_web_admin.erl:2246 msgid "Update " msgstr "Atualizar " -#: web/ejabberd_web_admin.erl:2253 +#: web/ejabberd_web_admin.erl:2254 msgid "Update plan" msgstr "Plano de Atualização" -#: web/ejabberd_web_admin.erl:2254 +#: web/ejabberd_web_admin.erl:2255 msgid "Modified modules" msgstr "Módulos atualizados" -#: web/ejabberd_web_admin.erl:2255 +#: web/ejabberd_web_admin.erl:2256 msgid "Update script" msgstr "Script de atualização" -#: web/ejabberd_web_admin.erl:2256 +#: web/ejabberd_web_admin.erl:2257 msgid "Low level update script" msgstr "Script de atualização low level" -#: web/ejabberd_web_admin.erl:2257 +#: web/ejabberd_web_admin.erl:2258 msgid "Script check" msgstr "Verificação de Script" -#: web/ejabberd_web_admin.erl:2425 +#: web/ejabberd_web_admin.erl:2426 msgid "Port" msgstr "Porta" -#: web/ejabberd_web_admin.erl:2426 +#: web/ejabberd_web_admin.erl:2427 msgid "IP" msgstr "IP" -#: web/ejabberd_web_admin.erl:2427 +#: web/ejabberd_web_admin.erl:2428 msgid "Protocol" msgstr "Porta" -#: web/ejabberd_web_admin.erl:2428 web/ejabberd_web_admin.erl:2555 +#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 msgid "Module" msgstr "Módulo" -#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 +#: web/ejabberd_web_admin.erl:2430 web/ejabberd_web_admin.erl:2557 msgid "Options" msgstr "Opções" -#: web/ejabberd_web_admin.erl:2449 +#: web/ejabberd_web_admin.erl:2450 msgid "Delete" msgstr "Eliminar" -#: web/ejabberd_web_admin.erl:2578 +#: web/ejabberd_web_admin.erl:2579 msgid "Start" msgstr "Iniciar" @@ -1797,12 +1854,12 @@ msgstr "Lista de contatos" #: web/mod_register_web.erl:396 #, fuzzy msgid "Old Password:" -msgstr "Senha:" +msgstr "Senha Antiga:" #: web/mod_register_web.erl:401 #, fuzzy msgid "New Password:" -msgstr "Senha:" +msgstr "Nova Senha:" #: web/mod_register_web.erl:504 msgid "This page allows to unregister a Jabber account in this Jabber server." @@ -1814,4 +1871,4 @@ msgstr "Deletar registro" #, fuzzy #~ msgid "Captcha test failed" -#~ msgstr "O captcha é inválido." +#~ msgstr "O CAPTCHA é inválido." diff --git a/src/msgs/pt.po b/src/msgs/pt.po index 1dc4c78b1..194bc0dd5 100644 --- a/src/msgs/pt.po +++ b/src/msgs/pt.po @@ -15,11 +15,11 @@ msgstr "" msgid "No resource provided" msgstr "Não foi passado nenhum recurso" -#: ejabberd_c2s.erl:1149 +#: ejabberd_c2s.erl:1197 msgid "Replaced by new connection" msgstr "" -#: ejabberd_c2s.erl:1837 +#: ejabberd_c2s.erl:1885 msgid "Your active privacy list has denied the routing of this stanza." msgstr "" @@ -41,7 +41,7 @@ msgid "CAPTCHA web page" msgstr "" #: ejabberd_captcha.erl:307 -msgid "The captcha is valid." +msgid "The CAPTCHA is valid." msgstr "" #: mod_adhoc.erl:95 mod_adhoc.erl:125 mod_adhoc.erl:143 mod_adhoc.erl:161 @@ -57,65 +57,68 @@ msgstr "Pendente" msgid "Pong" msgstr "" -#: mod_announce.erl:506 +#: mod_announce.erl:507 mod_announce_odbc.erl:499 msgid "Really delete message of the day?" msgstr "" -#: mod_announce.erl:514 mod_configure.erl:1083 mod_configure.erl:1128 +#: mod_announce.erl:515 mod_announce_odbc.erl:507 mod_configure.erl:1083 +#: mod_configure.erl:1128 #, fuzzy msgid "Subject" msgstr "Enviar" -#: mod_announce.erl:519 mod_configure.erl:1088 mod_configure.erl:1133 +#: mod_announce.erl:520 mod_announce_odbc.erl:512 mod_configure.erl:1088 +#: mod_configure.erl:1133 msgid "Message body" msgstr "" -#: mod_announce.erl:599 +#: mod_announce.erl:600 mod_announce_odbc.erl:592 msgid "No body provided for announce message" msgstr "" -#: mod_announce.erl:634 +#: mod_announce.erl:635 mod_announce_odbc.erl:627 msgid "Announcements" msgstr "" -#: mod_announce.erl:636 +#: mod_announce.erl:637 mod_announce_odbc.erl:629 msgid "Send announcement to all users" msgstr "" -#: mod_announce.erl:638 +#: mod_announce.erl:639 mod_announce_odbc.erl:631 msgid "Send announcement to all users on all hosts" msgstr "" -#: mod_announce.erl:640 +#: mod_announce.erl:641 mod_announce_odbc.erl:633 msgid "Send announcement to all online users" msgstr "" -#: mod_announce.erl:642 mod_configure.erl:1078 mod_configure.erl:1123 +#: mod_announce.erl:643 mod_announce_odbc.erl:635 mod_configure.erl:1078 +#: mod_configure.erl:1123 msgid "Send announcement to all online users on all hosts" msgstr "" -#: mod_announce.erl:644 +#: mod_announce.erl:645 mod_announce_odbc.erl:637 msgid "Set message of the day and send to online users" msgstr "" -#: mod_announce.erl:646 +#: mod_announce.erl:647 mod_announce_odbc.erl:639 msgid "Set message of the day on all hosts and send to online users" msgstr "" -#: mod_announce.erl:648 +#: mod_announce.erl:649 mod_announce_odbc.erl:641 msgid "Update message of the day (don't send)" msgstr "" -#: mod_announce.erl:650 +#: mod_announce.erl:651 mod_announce_odbc.erl:643 msgid "Update message of the day on all hosts (don't send)" msgstr "" -#: mod_announce.erl:652 +#: mod_announce.erl:653 mod_announce_odbc.erl:645 #, fuzzy msgid "Delete message of the day" msgstr "Eliminar os seleccionados" -#: mod_announce.erl:654 +#: mod_announce.erl:655 mod_announce_odbc.erl:647 msgid "Delete message of the day on all hosts" msgstr "" @@ -124,7 +127,7 @@ msgstr "" msgid "Configuration" msgstr "Configuração" -#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1934 +#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1936 msgid "Database" msgstr "" @@ -136,7 +139,7 @@ msgstr "Iniciar módulos" msgid "Stop Modules" msgstr "Parar módulos" -#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1935 +#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1937 msgid "Backup" msgstr "Guardar cópia de segurança" @@ -166,7 +169,7 @@ msgid "Shut Down Service" msgstr "" #: mod_configure.erl:145 mod_configure.erl:518 mod_configure.erl:1197 -#: web/ejabberd_web_admin.erl:1528 +#: web/ejabberd_web_admin.erl:1527 msgid "Add User" msgstr "Adicionar utilizador" @@ -225,7 +228,7 @@ msgid "User Management" msgstr "Gestão da BD" #: mod_configure.erl:500 web/ejabberd_web_admin.erl:1058 -#: web/ejabberd_web_admin.erl:1463 +#: web/ejabberd_web_admin.erl:1462 msgid "Online Users" msgstr "Utilizadores ligados" @@ -238,15 +241,15 @@ msgstr "Todos os utilizadores" msgid "Outgoing s2s Connections" msgstr "Conexões S2S para fora" -#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1905 +#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1907 msgid "Running Nodes" msgstr "Nodos a correr" -#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1907 +#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1909 msgid "Stopped Nodes" msgstr "Nodos parados" -#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1951 +#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1953 msgid "Modules" msgstr "Módulos" @@ -379,15 +382,15 @@ msgstr "Regras de acesso" #: mod_configure.erl:1200 mod_configure.erl:1222 mod_configure.erl:1234 #: mod_configure.erl:1246 mod_configure.erl:1258 mod_configure.erl:1275 -#: mod_configure.erl:1287 mod_configure.erl:1652 mod_configure.erl:1702 -#: mod_configure.erl:1723 mod_roster.erl:943 mod_roster_odbc.erl:1048 -#: mod_vcard.erl:466 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:442 +#: mod_configure.erl:1287 mod_configure.erl:1650 mod_configure.erl:1700 +#: mod_configure.erl:1721 mod_roster.erl:943 mod_roster_odbc.erl:1060 +#: mod_vcard.erl:472 mod_vcard_ldap.erl:554 mod_vcard_odbc.erl:448 msgid "Jabber ID" msgstr "" -#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1653 -#: mod_configure.erl:1865 mod_muc/mod_muc_room.erl:2970 mod_register.erl:235 -#: web/ejabberd_web_admin.erl:1521 +#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1651 +#: mod_configure.erl:1863 mod_muc/mod_muc_room.erl:3224 mod_register.erl:235 +#: web/ejabberd_web_admin.erl:1520 msgid "Password" msgstr "Palavra-chave" @@ -405,73 +408,74 @@ msgstr "Utilizadores registados" msgid "Number of online users" msgstr "Utilizadores ligados" -#: mod_configure.erl:1684 web/ejabberd_web_admin.erl:1589 -#: web/ejabberd_web_admin.erl:1741 +#: mod_configure.erl:1682 web/ejabberd_web_admin.erl:1588 +#: web/ejabberd_web_admin.erl:1743 msgid "Never" msgstr "Nunca" -#: mod_configure.erl:1698 web/ejabberd_web_admin.erl:1602 -#: web/ejabberd_web_admin.erl:1754 +#: mod_configure.erl:1696 web/ejabberd_web_admin.erl:1601 +#: web/ejabberd_web_admin.erl:1756 msgid "Online" msgstr "Ligado" -#: mod_configure.erl:1703 +#: mod_configure.erl:1701 msgid "Last login" msgstr "" -#: mod_configure.erl:1724 +#: mod_configure.erl:1722 #, fuzzy msgid "Roster size" msgstr "Lista de contactos" -#: mod_configure.erl:1725 +#: mod_configure.erl:1723 msgid "IP addresses" msgstr "" -#: mod_configure.erl:1726 +#: mod_configure.erl:1724 #, fuzzy msgid "Resources" msgstr "Restaurar" -#: mod_configure.erl:1852 +#: mod_configure.erl:1850 msgid "Administration of " msgstr "Administração de " -#: mod_configure.erl:1855 +#: mod_configure.erl:1853 msgid "Action on user" msgstr "Acção no utilizador" -#: mod_configure.erl:1859 +#: mod_configure.erl:1857 msgid "Edit Properties" msgstr "Editar propriedades" -#: mod_configure.erl:1862 web/ejabberd_web_admin.erl:1767 +#: mod_configure.erl:1860 web/ejabberd_web_admin.erl:1769 msgid "Remove User" msgstr "Eliminar utilizador" -#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:336 +#: mod_irc/mod_irc.erl:201 mod_irc/mod_irc_odbc.erl:196 +#: mod_muc/mod_muc.erl:336 mod_muc/mod_muc_odbc.erl:342 msgid "Access denied by service policy" msgstr "Acesso negado pela política de serviço" -#: mod_irc/mod_irc.erl:400 +#: mod_irc/mod_irc.erl:401 mod_irc/mod_irc_odbc.erl:398 msgid "IRC Transport" msgstr "" -#: mod_irc/mod_irc.erl:427 +#: mod_irc/mod_irc.erl:428 mod_irc/mod_irc_odbc.erl:425 msgid "ejabberd IRC module" msgstr "Módulo de IRC ejabberd" -#: mod_irc/mod_irc.erl:558 +#: mod_irc/mod_irc.erl:559 mod_irc/mod_irc_odbc.erl:568 msgid "You need an x:data capable client to configure mod_irc settings" msgstr "" "É necessário um cliente com suporte de x:data para configurar as opções do " "mod_irc" -#: mod_irc/mod_irc.erl:565 +#: mod_irc/mod_irc.erl:566 mod_irc/mod_irc_odbc.erl:575 msgid "Registration in mod_irc for " msgstr "Registo no mod_irc para" -#: mod_irc/mod_irc.erl:570 +#: mod_irc/mod_irc.erl:571 mod_irc/mod_irc_odbc.erl:580 #, fuzzy msgid "" "Enter username, encodings, ports and passwords you wish to use for " @@ -480,11 +484,11 @@ msgstr "" "Introduza o nome de utilizador e codificações de caracteres que quer usar ao " "conectar-se aos servidores de IRC" -#: mod_irc/mod_irc.erl:575 +#: mod_irc/mod_irc.erl:576 mod_irc/mod_irc_odbc.erl:585 msgid "IRC Username" msgstr "Nome do utilizador de IRC" -#: mod_irc/mod_irc.erl:585 +#: mod_irc/mod_irc.erl:586 mod_irc/mod_irc_odbc.erl:595 #, fuzzy msgid "" "If you want to specify different ports, passwords, encodings for IRC " @@ -496,42 +500,43 @@ msgstr "" "servidor IRC preencha esta lista con valores no formato '{\"servidor irc\", " "\"codificação\"}'. Este serviço usa por omissão a codificação \"~s\"." -#: mod_irc/mod_irc.erl:597 +#: mod_irc/mod_irc.erl:598 mod_irc/mod_irc_odbc.erl:607 msgid "" "Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." msgstr "" -#: mod_irc/mod_irc.erl:602 +#: mod_irc/mod_irc.erl:603 mod_irc/mod_irc_odbc.erl:612 msgid "Connections parameters" msgstr "" -#: mod_irc/mod_irc.erl:727 +#: mod_irc/mod_irc.erl:728 mod_irc/mod_irc_odbc.erl:757 msgid "Join IRC channel" msgstr "" -#: mod_irc/mod_irc.erl:731 +#: mod_irc/mod_irc.erl:732 mod_irc/mod_irc_odbc.erl:761 msgid "IRC channel (don't put the first #)" msgstr "" -#: mod_irc/mod_irc.erl:736 +#: mod_irc/mod_irc.erl:737 mod_irc/mod_irc_odbc.erl:766 #, fuzzy msgid "IRC server" msgstr "Nome do utilizador de IRC" -#: mod_irc/mod_irc.erl:769 mod_irc/mod_irc.erl:773 +#: mod_irc/mod_irc.erl:770 mod_irc/mod_irc.erl:774 +#: mod_irc/mod_irc_odbc.erl:799 mod_irc/mod_irc_odbc.erl:803 msgid "Join the IRC channel here." msgstr "" -#: mod_irc/mod_irc.erl:777 +#: mod_irc/mod_irc.erl:778 mod_irc/mod_irc_odbc.erl:807 msgid "Join the IRC channel in this Jabber ID: ~s" msgstr "" -#: mod_irc/mod_irc.erl:862 +#: mod_irc/mod_irc.erl:863 mod_irc/mod_irc_odbc.erl:904 msgid "IRC settings" msgstr "" -#: mod_irc/mod_irc.erl:867 +#: mod_irc/mod_irc.erl:868 mod_irc/mod_irc_odbc.erl:909 #, fuzzy msgid "" "Enter username and encodings you wish to use for connecting to IRC servers. " @@ -541,80 +546,81 @@ msgstr "" "Introduza o nome de utilizador e codificações de caracteres que quer usar ao " "conectar-se aos servidores de IRC" -#: mod_irc/mod_irc.erl:873 +#: mod_irc/mod_irc.erl:874 mod_irc/mod_irc_odbc.erl:915 #, fuzzy msgid "IRC username" msgstr "Nome do utilizador de IRC" -#: mod_irc/mod_irc.erl:922 +#: mod_irc/mod_irc.erl:923 mod_irc/mod_irc_odbc.erl:964 #, fuzzy msgid "Password ~b" msgstr "Palavra-chave" -#: mod_irc/mod_irc.erl:927 +#: mod_irc/mod_irc.erl:928 mod_irc/mod_irc_odbc.erl:969 #, fuzzy msgid "Port ~b" msgstr "Porta" -#: mod_irc/mod_irc.erl:932 +#: mod_irc/mod_irc.erl:933 mod_irc/mod_irc_odbc.erl:974 msgid "Encoding for server ~b" msgstr "" -#: mod_irc/mod_irc.erl:941 +#: mod_irc/mod_irc.erl:942 mod_irc/mod_irc_odbc.erl:983 msgid "Server ~b" msgstr "" -#: mod_muc/mod_muc.erl:449 +#: mod_muc/mod_muc.erl:449 mod_muc/mod_muc_odbc.erl:456 msgid "Only service administrators are allowed to send service messages" msgstr "" "Só os administradores do serviço têm permissão para enviar mensagens de " "serviço" -#: mod_muc/mod_muc.erl:493 +#: mod_muc/mod_muc.erl:493 mod_muc/mod_muc_odbc.erl:500 #, fuzzy msgid "Room creation is denied by service policy" msgstr "Acesso negado pela política de serviço" -#: mod_muc/mod_muc.erl:500 +#: mod_muc/mod_muc.erl:500 mod_muc/mod_muc_odbc.erl:507 msgid "Conference room does not exist" msgstr "A sala não existe" -#: mod_muc/mod_muc.erl:581 +#: mod_muc/mod_muc.erl:582 mod_muc/mod_muc_odbc.erl:595 msgid "Chatrooms" msgstr "" -#: mod_muc/mod_muc.erl:711 +#: mod_muc/mod_muc.erl:712 mod_muc/mod_muc_odbc.erl:729 #, fuzzy msgid "You need a client that supports x:data to register the nickname" msgstr "" "É necessário um cliente com suporte de x:data para poder registar a alcunha" -#: mod_muc/mod_muc.erl:717 +#: mod_muc/mod_muc.erl:718 mod_muc/mod_muc_odbc.erl:735 msgid "Nickname Registration at " msgstr "Registo da alcunha em " -#: mod_muc/mod_muc.erl:721 +#: mod_muc/mod_muc.erl:722 mod_muc/mod_muc_odbc.erl:739 msgid "Enter nickname you want to register" msgstr "Introduza a alcunha que quer registar" -#: mod_muc/mod_muc.erl:722 mod_roster.erl:944 mod_roster_odbc.erl:1049 -#: mod_vcard.erl:358 mod_vcard.erl:471 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:447 +#: mod_muc/mod_muc.erl:723 mod_muc/mod_muc_odbc.erl:740 +#: mod_muc/mod_muc_room.erl:3810 mod_roster.erl:944 mod_roster_odbc.erl:1061 +#: mod_vcard.erl:364 mod_vcard.erl:477 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:453 msgid "Nickname" msgstr "Alcunha" -#: mod_muc/mod_muc.erl:761 mod_muc/mod_muc_room.erl:933 -#: mod_muc/mod_muc_room.erl:1577 +#: mod_muc/mod_muc.erl:762 mod_muc/mod_muc_odbc.erl:784 +#: mod_muc/mod_muc_room.erl:1064 mod_muc/mod_muc_room.erl:1787 #, fuzzy msgid "That nickname is registered by another person" msgstr "A alcunha já está registada por outra pessoa" -#: mod_muc/mod_muc.erl:787 +#: mod_muc/mod_muc.erl:788 mod_muc/mod_muc_odbc.erl:811 #, fuzzy msgid "You must fill in field \"Nickname\" in the form" msgstr "Deve preencher o campo \"alcunha\" no formulário" -#: mod_muc/mod_muc.erl:807 +#: mod_muc/mod_muc.erl:808 mod_muc/mod_muc_odbc.erl:831 msgid "ejabberd MUC module" msgstr "Módulo MUC de ejabberd" @@ -655,8 +661,8 @@ msgstr "" msgid "is now known as" msgstr "" -#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:689 -#: mod_muc/mod_muc_room.erl:2138 +#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:688 +#: mod_muc/mod_muc_room.erl:2393 msgid " has set the subject to: " msgstr " colocou o tópico: " @@ -754,283 +760,334 @@ msgstr "Nunca" msgid "December" msgstr "" -#: mod_muc/mod_muc_log.erl:751 +#: mod_muc/mod_muc_log.erl:750 #, fuzzy msgid "Room Configuration" msgstr "Configuração" -#: mod_muc/mod_muc_log.erl:760 +#: mod_muc/mod_muc_log.erl:759 msgid "Room Occupants" msgstr "" -#: mod_muc/mod_muc_room.erl:170 +#: mod_muc/mod_muc_room.erl:174 msgid "Traffic rate limit is exceeded" msgstr "" -#: mod_muc/mod_muc_room.erl:242 +#: mod_muc/mod_muc_room.erl:246 msgid "" "This participant is kicked from the room because he sent an error message" msgstr "" -#: mod_muc/mod_muc_room.erl:251 +#: mod_muc/mod_muc_room.erl:255 msgid "It is not allowed to send private messages to the conference" msgstr "Impedir o envio de mensagens privadas para a sala" -#: mod_muc/mod_muc_room.erl:296 +#: mod_muc/mod_muc_room.erl:332 +msgid "Please, wait for a while before sending new voice request" +msgstr "" + +#: mod_muc/mod_muc_room.erl:347 +msgid "Voice requests are disabled in this conference" +msgstr "" + +#: mod_muc/mod_muc_room.erl:364 +msgid "Failed to extract JID from your voice request approval" +msgstr "" + +#: mod_muc/mod_muc_room.erl:393 +msgid "Only moderators can approve voice requests" +msgstr "" + +#: mod_muc/mod_muc_room.erl:408 msgid "Improper message type" msgstr "Tipo de mensagem incorrecto" -#: mod_muc/mod_muc_room.erl:406 +#: mod_muc/mod_muc_room.erl:518 msgid "" "This participant is kicked from the room because he sent an error message to " "another participant" msgstr "" -#: mod_muc/mod_muc_room.erl:419 +#: mod_muc/mod_muc_room.erl:531 msgid "It is not allowed to send private messages of type \"groupchat\"" msgstr "Não é permitido enviar mensagens privadas do tipo \"groupchat\"" -#: mod_muc/mod_muc_room.erl:431 mod_muc/mod_muc_room.erl:486 +#: mod_muc/mod_muc_room.erl:543 mod_muc/mod_muc_room.erl:611 msgid "Recipient is not in the conference room" msgstr "O destinatário não está na sala" -#: mod_muc/mod_muc_room.erl:451 mod_muc/mod_muc_room.erl:829 -#: mod_muc/mod_muc_room.erl:3609 -msgid "Only occupants are allowed to send messages to the conference" -msgstr "Só os ocupantes podem enviar mensagens para a sala" - -#: mod_muc/mod_muc_room.erl:460 +#: mod_muc/mod_muc_room.erl:564 mod_muc/mod_muc_room.erl:585 #, fuzzy msgid "It is not allowed to send private messages" msgstr "Impedir o envio de mensagens privadas para a sala" -#: mod_muc/mod_muc_room.erl:509 +#: mod_muc/mod_muc_room.erl:576 mod_muc/mod_muc_room.erl:956 +#: mod_muc/mod_muc_room.erl:4040 +msgid "Only occupants are allowed to send messages to the conference" +msgstr "Só os ocupantes podem enviar mensagens para a sala" + +#: mod_muc/mod_muc_room.erl:634 msgid "Only occupants are allowed to send queries to the conference" msgstr "Só os ocupantes podem enviar consultas para a sala" -#: mod_muc/mod_muc_room.erl:521 +#: mod_muc/mod_muc_room.erl:646 msgid "Queries to the conference members are not allowed in this room" msgstr "Nesta sala não são permitidas consultas aos seus membros" -#: mod_muc/mod_muc_room.erl:805 +#: mod_muc/mod_muc_room.erl:932 #, fuzzy msgid "" "Only moderators and participants are allowed to change the subject in this " "room" msgstr "Só os moderadores e os participantes podem mudar o tópico desta sala" -#: mod_muc/mod_muc_room.erl:810 +#: mod_muc/mod_muc_room.erl:937 #, fuzzy msgid "Only moderators are allowed to change the subject in this room" msgstr "Só os moderadores podem mudar o tópico desta sala" -#: mod_muc/mod_muc_room.erl:820 +#: mod_muc/mod_muc_room.erl:947 msgid "Visitors are not allowed to send messages to all occupants" msgstr "Os visitantes não podem enviar mensagens para todos os ocupantes" -#: mod_muc/mod_muc_room.erl:891 +#: mod_muc/mod_muc_room.erl:1021 msgid "" "This participant is kicked from the room because he sent an error presence" msgstr "" -#: mod_muc/mod_muc_room.erl:909 +#: mod_muc/mod_muc_room.erl:1040 #, fuzzy msgid "Visitors are not allowed to change their nicknames in this room" msgstr "Só os moderadores podem mudar o tópico desta sala" -#: mod_muc/mod_muc_room.erl:922 mod_muc/mod_muc_room.erl:1569 +#: mod_muc/mod_muc_room.erl:1053 mod_muc/mod_muc_room.erl:1779 #, fuzzy msgid "That nickname is already in use by another occupant" msgstr "A alcunha já está a ser usado por outro ocupante" -#: mod_muc/mod_muc_room.erl:1558 +#: mod_muc/mod_muc_room.erl:1768 msgid "You have been banned from this room" msgstr "Foi banido desta sala" -#: mod_muc/mod_muc_room.erl:1561 +#: mod_muc/mod_muc_room.erl:1771 #, fuzzy msgid "Membership is required to enter this room" msgstr "É necessário ser membro desta sala para poder entrar" -#: mod_muc/mod_muc_room.erl:1597 +#: mod_muc/mod_muc_room.erl:1807 #, fuzzy msgid "This room is not anonymous" msgstr "Tornar a sala anónima?" -#: mod_muc/mod_muc_room.erl:1623 +#: mod_muc/mod_muc_room.erl:1833 #, fuzzy msgid "A password is required to enter this room" msgstr "É necessária a palavra-chave para poder entrar nesta sala" -#: mod_muc/mod_muc_room.erl:1645 mod_register.erl:246 +#: mod_muc/mod_muc_room.erl:1855 mod_register.erl:246 msgid "Too many CAPTCHA requests" msgstr "" -#: mod_muc/mod_muc_room.erl:1654 -msgid "Unable to generate a captcha" +#: mod_muc/mod_muc_room.erl:1864 mod_register.erl:251 +msgid "Unable to generate a CAPTCHA" msgstr "" -#: mod_muc/mod_muc_room.erl:1664 +#: mod_muc/mod_muc_room.erl:1874 msgid "Incorrect password" msgstr "Palavra-chave incorrecta" -#: mod_muc/mod_muc_room.erl:2193 +#: mod_muc/mod_muc_room.erl:2448 msgid "Administrator privileges required" msgstr "São necessários privilégios de administrador" -#: mod_muc/mod_muc_room.erl:2208 +#: mod_muc/mod_muc_room.erl:2463 msgid "Moderator privileges required" msgstr "São necessários privilégios de moderador" -#: mod_muc/mod_muc_room.erl:2363 +#: mod_muc/mod_muc_room.erl:2619 msgid "Jabber ID ~s is invalid" msgstr "O Jabber ID ~s não é válido" -#: mod_muc/mod_muc_room.erl:2377 +#: mod_muc/mod_muc_room.erl:2633 msgid "Nickname ~s does not exist in the room" msgstr "A alcunha ~s não existe na sala" -#: mod_muc/mod_muc_room.erl:2403 mod_muc/mod_muc_room.erl:2797 +#: mod_muc/mod_muc_room.erl:2659 mod_muc/mod_muc_room.erl:3049 msgid "Invalid affiliation: ~s" msgstr "Afiliação inválida: ~s" -#: mod_muc/mod_muc_room.erl:2460 +#: mod_muc/mod_muc_room.erl:2713 msgid "Invalid role: ~s" msgstr "Papel inválido: ~s" -#: mod_muc/mod_muc_room.erl:2774 mod_muc/mod_muc_room.erl:2810 +#: mod_muc/mod_muc_room.erl:3026 mod_muc/mod_muc_room.erl:3062 msgid "Owner privileges required" msgstr "São necessários privilégios de dono" -#: mod_muc/mod_muc_room.erl:2941 +#: mod_muc/mod_muc_room.erl:3195 #, fuzzy msgid "Configuration of room ~s" msgstr "Configuração para " -#: mod_muc/mod_muc_room.erl:2946 +#: mod_muc/mod_muc_room.erl:3200 msgid "Room title" msgstr "Título da sala" -#: mod_muc/mod_muc_room.erl:2949 mod_muc/mod_muc_room.erl:3388 +#: mod_muc/mod_muc_room.erl:3203 mod_muc/mod_muc_room.erl:3692 #, fuzzy msgid "Room description" msgstr "Subscrição" -#: mod_muc/mod_muc_room.erl:2956 +#: mod_muc/mod_muc_room.erl:3210 #, fuzzy msgid "Make room persistent" msgstr "Tornar a sala permanente?" -#: mod_muc/mod_muc_room.erl:2961 +#: mod_muc/mod_muc_room.erl:3215 #, fuzzy msgid "Make room public searchable" msgstr "Tornar a sala publicamente visível?" -#: mod_muc/mod_muc_room.erl:2964 +#: mod_muc/mod_muc_room.erl:3218 #, fuzzy msgid "Make participants list public" msgstr "Tornar pública a lista de participantes?" -#: mod_muc/mod_muc_room.erl:2967 +#: mod_muc/mod_muc_room.erl:3221 #, fuzzy msgid "Make room password protected" msgstr "Proteger a sala com palavra-chave?" -#: mod_muc/mod_muc_room.erl:2978 +#: mod_muc/mod_muc_room.erl:3232 msgid "Maximum Number of Occupants" msgstr "" -#: mod_muc/mod_muc_room.erl:2985 +#: mod_muc/mod_muc_room.erl:3239 msgid "No limit" msgstr "" -#: mod_muc/mod_muc_room.erl:2996 +#: mod_muc/mod_muc_room.erl:3250 msgid "Present real Jabber IDs to" msgstr "" -#: mod_muc/mod_muc_room.erl:3004 +#: mod_muc/mod_muc_room.erl:3258 mod_muc/mod_muc_room.erl:3292 msgid "moderators only" msgstr "" -#: mod_muc/mod_muc_room.erl:3006 +#: mod_muc/mod_muc_room.erl:3260 mod_muc/mod_muc_room.erl:3294 #, fuzzy msgid "anyone" msgstr "Nenhum" -#: mod_muc/mod_muc_room.erl:3008 +#: mod_muc/mod_muc_room.erl:3262 #, fuzzy msgid "Make room members-only" msgstr "Tornar a sala exclusiva a membros?" -#: mod_muc/mod_muc_room.erl:3011 +#: mod_muc/mod_muc_room.erl:3265 msgid "Make room moderated" msgstr "Tornar a sala moderada" -#: mod_muc/mod_muc_room.erl:3014 +#: mod_muc/mod_muc_room.erl:3268 #, fuzzy msgid "Default users as participants" msgstr "Os utilizadores são membros por omissão?" -#: mod_muc/mod_muc_room.erl:3017 +#: mod_muc/mod_muc_room.erl:3271 #, fuzzy msgid "Allow users to change the subject" msgstr "Permitir aos utilizadores mudar o tópico?" -#: mod_muc/mod_muc_room.erl:3020 +#: mod_muc/mod_muc_room.erl:3274 #, fuzzy msgid "Allow users to send private messages" msgstr "Permitir que os utilizadores enviem mensagens privadas?" -#: mod_muc/mod_muc_room.erl:3023 +#: mod_muc/mod_muc_room.erl:3279 +#, fuzzy +msgid "Allow visitors to send private messages to" +msgstr "Permitir que os utilizadores enviem mensagens privadas?" + +#: mod_muc/mod_muc_room.erl:3290 +msgid "nobody" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3296 #, fuzzy msgid "Allow users to query other users" msgstr "Permitir aos utilizadores consultar outros utilizadores?" -#: mod_muc/mod_muc_room.erl:3026 +#: mod_muc/mod_muc_room.erl:3299 #, fuzzy msgid "Allow users to send invites" msgstr "Permitir que os utilizadores enviem convites?" -#: mod_muc/mod_muc_room.erl:3029 +#: mod_muc/mod_muc_room.erl:3302 msgid "Allow visitors to send status text in presence updates" msgstr "" -#: mod_muc/mod_muc_room.erl:3032 +#: mod_muc/mod_muc_room.erl:3305 #, fuzzy msgid "Allow visitors to change nickname" msgstr "Permitir aos utilizadores mudar o tópico?" -#: mod_muc/mod_muc_room.erl:3038 +#: mod_muc/mod_muc_room.erl:3308 #, fuzzy -msgid "Make room captcha protected" +msgid "Allow visitors to send voice requests" +msgstr "Permitir que os utilizadores enviem convites?" + +#: mod_muc/mod_muc_room.erl:3311 +msgid "Minimum interval between voice requests (in seconds)" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3317 +#, fuzzy +msgid "Make room CAPTCHA protected" msgstr "Proteger a sala com palavra-chave?" -#: mod_muc/mod_muc_room.erl:3043 +#: mod_muc/mod_muc_room.erl:3322 msgid "Exclude Jabber IDs from CAPTCHA challenge" msgstr "" -#: mod_muc/mod_muc_room.erl:3050 +#: mod_muc/mod_muc_room.erl:3329 #, fuzzy msgid "Enable logging" msgstr "Guardar históricos?" -#: mod_muc/mod_muc_room.erl:3058 +#: mod_muc/mod_muc_room.erl:3337 msgid "You need an x:data capable client to configure room" msgstr "É necessário um cliente com suporte de x:data para configurar a sala" -#: mod_muc/mod_muc_room.erl:3390 +#: mod_muc/mod_muc_room.erl:3694 msgid "Number of occupants" msgstr "" -#: mod_muc/mod_muc_room.erl:3446 +#: mod_muc/mod_muc_room.erl:3750 msgid "private, " msgstr "privado" -#: mod_muc/mod_muc_room.erl:3529 +#: mod_muc/mod_muc_room.erl:3799 +msgid "Voice request" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3803 +msgid "Either approve or decline the voice request." +msgstr "" + +#: mod_muc/mod_muc_room.erl:3809 +#, fuzzy +msgid "User JID" +msgstr "Utilizador" + +#: mod_muc/mod_muc_room.erl:3811 +msgid "Grant voice to this person?" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3960 msgid "~s invites you to the room ~s" msgstr "" -#: mod_muc/mod_muc_room.erl:3538 +#: mod_muc/mod_muc_room.erl:3969 #, fuzzy msgid "the password is" msgstr "Mudar palavra-chave" @@ -1046,14 +1103,15 @@ msgid "~s's Offline Messages Queue" msgstr "~s fila de mensagens diferidas" #: mod_offline.erl:563 mod_offline_odbc.erl:411 mod_roster.erl:987 -#: mod_roster_odbc.erl:1092 mod_shared_roster.erl:896 -#: mod_shared_roster.erl:1005 web/ejabberd_web_admin.erl:833 +#: mod_roster_odbc.erl:1104 mod_shared_roster.erl:901 +#: mod_shared_roster.erl:1010 mod_shared_roster_odbc.erl:930 +#: mod_shared_roster_odbc.erl:1039 web/ejabberd_web_admin.erl:833 #: web/ejabberd_web_admin.erl:874 web/ejabberd_web_admin.erl:942 #: web/ejabberd_web_admin.erl:978 web/ejabberd_web_admin.erl:1019 -#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1758 -#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1961 -#: web/ejabberd_web_admin.erl:2030 web/ejabberd_web_admin.erl:2134 -#: web/ejabberd_web_admin.erl:2159 web/ejabberd_web_admin.erl:2247 +#: web/ejabberd_web_admin.erl:1508 web/ejabberd_web_admin.erl:1760 +#: web/ejabberd_web_admin.erl:1931 web/ejabberd_web_admin.erl:1963 +#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2135 +#: web/ejabberd_web_admin.erl:2160 web/ejabberd_web_admin.erl:2248 #, fuzzy msgid "Submitted" msgstr "enviado" @@ -1074,8 +1132,9 @@ msgstr "Para" msgid "Packet" msgstr "Pacote" -#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:903 -#: web/ejabberd_web_admin.erl:882 web/ejabberd_web_admin.erl:986 +#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:908 +#: mod_shared_roster_odbc.erl:937 web/ejabberd_web_admin.erl:882 +#: web/ejabberd_web_admin.erl:986 msgid "Delete Selected" msgstr "Eliminar os seleccionados" @@ -1094,105 +1153,105 @@ msgstr "Mensagens diferidas" msgid "ejabberd SOCKS5 Bytestreams module" msgstr "Módulo vCard de ejabberd" -#: mod_pubsub/mod_pubsub.erl:1119 mod_pubsub/mod_pubsub_odbc.erl:928 +#: mod_pubsub/mod_pubsub.erl:1120 mod_pubsub/mod_pubsub_odbc.erl:929 msgid "Publish-Subscribe" msgstr "" -#: mod_pubsub/mod_pubsub.erl:1213 mod_pubsub/mod_pubsub_odbc.erl:1024 +#: mod_pubsub/mod_pubsub.erl:1214 mod_pubsub/mod_pubsub_odbc.erl:1025 #, fuzzy msgid "ejabberd Publish-Subscribe module" msgstr "Módulo pub/sub de ejabberd" -#: mod_pubsub/mod_pubsub.erl:1496 mod_pubsub/mod_pubsub_odbc.erl:1311 +#: mod_pubsub/mod_pubsub.erl:1497 mod_pubsub/mod_pubsub_odbc.erl:1312 msgid "PubSub subscriber request" msgstr "" -#: mod_pubsub/mod_pubsub.erl:1498 mod_pubsub/mod_pubsub_odbc.erl:1313 +#: mod_pubsub/mod_pubsub.erl:1499 mod_pubsub/mod_pubsub_odbc.erl:1314 msgid "Choose whether to approve this entity's subscription." msgstr "" -#: mod_pubsub/mod_pubsub.erl:1504 mod_pubsub/mod_pubsub_odbc.erl:1319 +#: mod_pubsub/mod_pubsub.erl:1505 mod_pubsub/mod_pubsub_odbc.erl:1320 #, fuzzy msgid "Node ID" msgstr "Nodo" -#: mod_pubsub/mod_pubsub.erl:1509 mod_pubsub/mod_pubsub_odbc.erl:1324 +#: mod_pubsub/mod_pubsub.erl:1510 mod_pubsub/mod_pubsub_odbc.erl:1325 msgid "Subscriber Address" msgstr "" -#: mod_pubsub/mod_pubsub.erl:1515 mod_pubsub/mod_pubsub_odbc.erl:1330 +#: mod_pubsub/mod_pubsub.erl:1516 mod_pubsub/mod_pubsub_odbc.erl:1331 msgid "Allow this Jabber ID to subscribe to this pubsub node?" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3416 mod_pubsub/mod_pubsub_odbc.erl:3229 +#: mod_pubsub/mod_pubsub.erl:3474 mod_pubsub/mod_pubsub_odbc.erl:3287 msgid "Deliver payloads with event notifications" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3417 mod_pubsub/mod_pubsub_odbc.erl:3230 +#: mod_pubsub/mod_pubsub.erl:3475 mod_pubsub/mod_pubsub_odbc.erl:3288 msgid "Deliver event notifications" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3418 mod_pubsub/mod_pubsub_odbc.erl:3231 +#: mod_pubsub/mod_pubsub.erl:3476 mod_pubsub/mod_pubsub_odbc.erl:3289 msgid "Notify subscribers when the node configuration changes" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3419 mod_pubsub/mod_pubsub_odbc.erl:3232 +#: mod_pubsub/mod_pubsub.erl:3477 mod_pubsub/mod_pubsub_odbc.erl:3290 msgid "Notify subscribers when the node is deleted" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3420 mod_pubsub/mod_pubsub_odbc.erl:3233 +#: mod_pubsub/mod_pubsub.erl:3478 mod_pubsub/mod_pubsub_odbc.erl:3291 msgid "Notify subscribers when items are removed from the node" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3421 mod_pubsub/mod_pubsub_odbc.erl:3234 +#: mod_pubsub/mod_pubsub.erl:3479 mod_pubsub/mod_pubsub_odbc.erl:3292 msgid "Persist items to storage" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3422 mod_pubsub/mod_pubsub_odbc.erl:3235 +#: mod_pubsub/mod_pubsub.erl:3480 mod_pubsub/mod_pubsub_odbc.erl:3293 msgid "A friendly name for the node" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3423 mod_pubsub/mod_pubsub_odbc.erl:3236 +#: mod_pubsub/mod_pubsub.erl:3481 mod_pubsub/mod_pubsub_odbc.erl:3294 msgid "Max # of items to persist" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3424 mod_pubsub/mod_pubsub_odbc.erl:3237 +#: mod_pubsub/mod_pubsub.erl:3482 mod_pubsub/mod_pubsub_odbc.erl:3295 msgid "Whether to allow subscriptions" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3425 mod_pubsub/mod_pubsub_odbc.erl:3238 +#: mod_pubsub/mod_pubsub.erl:3483 mod_pubsub/mod_pubsub_odbc.erl:3296 msgid "Specify the access model" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3428 mod_pubsub/mod_pubsub_odbc.erl:3241 +#: mod_pubsub/mod_pubsub.erl:3486 mod_pubsub/mod_pubsub_odbc.erl:3299 msgid "Roster groups allowed to subscribe" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3429 mod_pubsub/mod_pubsub_odbc.erl:3242 +#: mod_pubsub/mod_pubsub.erl:3487 mod_pubsub/mod_pubsub_odbc.erl:3300 msgid "Specify the publisher model" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3431 mod_pubsub/mod_pubsub_odbc.erl:3244 +#: mod_pubsub/mod_pubsub.erl:3489 mod_pubsub/mod_pubsub_odbc.erl:3302 msgid "Purge all items when the relevant publisher goes offline" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3432 mod_pubsub/mod_pubsub_odbc.erl:3245 +#: mod_pubsub/mod_pubsub.erl:3490 mod_pubsub/mod_pubsub_odbc.erl:3303 msgid "Specify the event message type" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3434 mod_pubsub/mod_pubsub_odbc.erl:3247 +#: mod_pubsub/mod_pubsub.erl:3492 mod_pubsub/mod_pubsub_odbc.erl:3305 msgid "Max payload size in bytes" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3435 mod_pubsub/mod_pubsub_odbc.erl:3248 +#: mod_pubsub/mod_pubsub.erl:3493 mod_pubsub/mod_pubsub_odbc.erl:3306 msgid "When to send the last published item" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3437 mod_pubsub/mod_pubsub_odbc.erl:3250 +#: mod_pubsub/mod_pubsub.erl:3495 mod_pubsub/mod_pubsub_odbc.erl:3308 msgid "Only deliver notifications to available users" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3438 mod_pubsub/mod_pubsub_odbc.erl:3251 +#: mod_pubsub/mod_pubsub.erl:3496 mod_pubsub/mod_pubsub_odbc.erl:3309 msgid "The collections with which a node is affiliated" msgstr "" @@ -1211,15 +1270,11 @@ msgid "Choose a username and password to register with this server" msgstr "" "Escolha um nome de utilizador e palavra-chave para se registar neste servidor" -#: mod_register.erl:230 mod_vcard.erl:358 mod_vcard_odbc.erl:336 -#: web/ejabberd_web_admin.erl:1516 web/ejabberd_web_admin.erl:1573 +#: mod_register.erl:230 mod_vcard.erl:364 mod_vcard_odbc.erl:342 +#: web/ejabberd_web_admin.erl:1515 web/ejabberd_web_admin.erl:1572 msgid "User" msgstr "Utilizador" -#: mod_register.erl:251 -msgid "Unable to generate a CAPTCHA" -msgstr "" - #: mod_register.erl:316 mod_register.erl:361 #, fuzzy msgid "The password is too weak" @@ -1230,180 +1285,183 @@ msgstr "Mudar palavra-chave" msgid "Users are not allowed to register accounts so quickly" msgstr "Os visitantes não podem enviar mensagens para todos os ocupantes" -#: mod_roster.erl:938 mod_roster_odbc.erl:1043 web/ejabberd_web_admin.erl:1699 -#: web/ejabberd_web_admin.erl:1884 web/ejabberd_web_admin.erl:1895 -#: web/ejabberd_web_admin.erl:2218 +#: mod_roster.erl:938 mod_roster_odbc.erl:1055 web/ejabberd_web_admin.erl:1701 +#: web/ejabberd_web_admin.erl:1886 web/ejabberd_web_admin.erl:1897 +#: web/ejabberd_web_admin.erl:2219 msgid "None" msgstr "Nenhum" -#: mod_roster.erl:945 mod_roster_odbc.erl:1050 +#: mod_roster.erl:945 mod_roster_odbc.erl:1062 msgid "Subscription" msgstr "Subscrição" -#: mod_roster.erl:946 mod_roster_odbc.erl:1051 +#: mod_roster.erl:946 mod_roster_odbc.erl:1063 msgid "Pending" msgstr "Pendente" -#: mod_roster.erl:947 mod_roster_odbc.erl:1052 +#: mod_roster.erl:947 mod_roster_odbc.erl:1064 msgid "Groups" msgstr "Grupos" -#: mod_roster.erl:974 mod_roster_odbc.erl:1079 +#: mod_roster.erl:974 mod_roster_odbc.erl:1091 msgid "Validate" msgstr "" -#: mod_roster.erl:982 mod_roster_odbc.erl:1087 +#: mod_roster.erl:982 mod_roster_odbc.erl:1099 msgid "Remove" msgstr "Remover" -#: mod_roster.erl:985 mod_roster_odbc.erl:1090 +#: mod_roster.erl:985 mod_roster_odbc.erl:1102 msgid "Roster of " msgstr "Lista de contactos de " -#: mod_roster.erl:988 mod_roster_odbc.erl:1093 mod_shared_roster.erl:897 -#: mod_shared_roster.erl:1006 web/ejabberd_web_admin.erl:834 +#: mod_roster.erl:988 mod_roster_odbc.erl:1105 mod_shared_roster.erl:902 +#: mod_shared_roster.erl:1011 mod_shared_roster_odbc.erl:931 +#: mod_shared_roster_odbc.erl:1040 web/ejabberd_web_admin.erl:834 #: web/ejabberd_web_admin.erl:875 web/ejabberd_web_admin.erl:943 #: web/ejabberd_web_admin.erl:979 web/ejabberd_web_admin.erl:1020 -#: web/ejabberd_web_admin.erl:1510 web/ejabberd_web_admin.erl:1759 -#: web/ejabberd_web_admin.erl:1930 web/ejabberd_web_admin.erl:2135 -#: web/ejabberd_web_admin.erl:2160 +#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1761 +#: web/ejabberd_web_admin.erl:1932 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2161 #, fuzzy msgid "Bad format" msgstr "formato inválido" -#: mod_roster.erl:995 mod_roster_odbc.erl:1100 +#: mod_roster.erl:995 mod_roster_odbc.erl:1112 #, fuzzy msgid "Add Jabber ID" msgstr "Adicionar Jabber ID" -#: mod_roster.erl:1094 mod_roster_odbc.erl:1199 +#: mod_roster.erl:1094 mod_roster_odbc.erl:1211 msgid "Roster" msgstr "Lista de contactos" -#: mod_shared_roster.erl:852 mod_shared_roster.erl:894 -#: mod_shared_roster.erl:1002 +#: mod_shared_roster.erl:857 mod_shared_roster.erl:899 +#: mod_shared_roster.erl:1007 mod_shared_roster_odbc.erl:886 +#: mod_shared_roster_odbc.erl:928 mod_shared_roster_odbc.erl:1036 #, fuzzy msgid "Shared Roster Groups" msgstr "Lista de contactos partilhada" -#: mod_shared_roster.erl:890 web/ejabberd_web_admin.erl:1366 -#: web/ejabberd_web_admin.erl:2460 +#: mod_shared_roster.erl:895 mod_shared_roster_odbc.erl:924 +#: web/ejabberd_web_admin.erl:1365 web/ejabberd_web_admin.erl:2461 msgid "Add New" msgstr "Adicionar novo" -#: mod_shared_roster.erl:973 +#: mod_shared_roster.erl:978 mod_shared_roster_odbc.erl:1007 #, fuzzy msgid "Name:" msgstr "Nome" -#: mod_shared_roster.erl:978 +#: mod_shared_roster.erl:983 mod_shared_roster_odbc.erl:1012 #, fuzzy msgid "Description:" msgstr "Subscrição" -#: mod_shared_roster.erl:986 +#: mod_shared_roster.erl:991 mod_shared_roster_odbc.erl:1020 msgid "Members:" msgstr "" -#: mod_shared_roster.erl:994 +#: mod_shared_roster.erl:999 mod_shared_roster_odbc.erl:1028 msgid "Displayed Groups:" msgstr "" -#: mod_shared_roster.erl:1003 +#: mod_shared_roster.erl:1008 mod_shared_roster_odbc.erl:1037 #, fuzzy msgid "Group " msgstr "Grupos" -#: mod_shared_roster.erl:1012 web/ejabberd_web_admin.erl:840 -#: web/ejabberd_web_admin.erl:884 web/ejabberd_web_admin.erl:949 -#: web/ejabberd_web_admin.erl:1026 web/ejabberd_web_admin.erl:2015 +#: mod_shared_roster.erl:1017 mod_shared_roster_odbc.erl:1046 +#: web/ejabberd_web_admin.erl:840 web/ejabberd_web_admin.erl:884 +#: web/ejabberd_web_admin.erl:949 web/ejabberd_web_admin.erl:1026 +#: web/ejabberd_web_admin.erl:2017 msgid "Submit" msgstr "Enviar" -#: mod_vcard.erl:165 mod_vcard_ldap.erl:237 mod_vcard_odbc.erl:129 +#: mod_vcard.erl:165 mod_vcard_ldap.erl:238 mod_vcard_odbc.erl:129 msgid "Erlang Jabber Server" msgstr "Servidor Jabber em Erlang" -#: mod_vcard.erl:358 mod_vcard.erl:472 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:448 +#: mod_vcard.erl:364 mod_vcard.erl:478 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:454 msgid "Birthday" msgstr "Data de nascimento" -#: mod_vcard.erl:358 mod_vcard.erl:474 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:450 +#: mod_vcard.erl:364 mod_vcard.erl:480 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:456 msgid "City" msgstr "Cidade" -#: mod_vcard.erl:358 mod_vcard.erl:473 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:449 +#: mod_vcard.erl:364 mod_vcard.erl:479 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:455 msgid "Country" msgstr "País" -#: mod_vcard.erl:358 mod_vcard.erl:475 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:451 +#: mod_vcard.erl:364 mod_vcard.erl:481 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:457 #, fuzzy msgid "Email" msgstr "email" -#: mod_vcard.erl:358 mod_vcard.erl:470 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:446 +#: mod_vcard.erl:364 mod_vcard.erl:476 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:452 msgid "Family Name" msgstr "Apelido" -#: mod_vcard.erl:358 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_odbc.erl:342 #, fuzzy msgid "" "Fill in the form to search for any matching Jabber User (Add * to the end of " "field to match substring)" msgstr "Preencha os campos para procurar utilizadores Jabber coincidentes" -#: mod_vcard.erl:358 mod_vcard.erl:467 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:443 +#: mod_vcard.erl:364 mod_vcard.erl:473 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:449 msgid "Full Name" msgstr "Nome completo" -#: mod_vcard.erl:358 mod_vcard.erl:469 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:445 +#: mod_vcard.erl:364 mod_vcard.erl:475 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:451 msgid "Middle Name" msgstr "Segundo nome" -#: mod_vcard.erl:358 mod_vcard.erl:468 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:444 web/ejabberd_web_admin.erl:2004 +#: mod_vcard.erl:364 mod_vcard.erl:474 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:450 web/ejabberd_web_admin.erl:2006 msgid "Name" msgstr "Nome" -#: mod_vcard.erl:358 mod_vcard.erl:476 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:452 +#: mod_vcard.erl:364 mod_vcard.erl:482 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:458 msgid "Organization Name" msgstr "Nome da organização" -#: mod_vcard.erl:358 mod_vcard.erl:477 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:453 +#: mod_vcard.erl:364 mod_vcard.erl:483 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:459 msgid "Organization Unit" msgstr "Unidade da organização" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "Search users in " msgstr "Procurar utilizadores em " -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "You need an x:data capable client to search" msgstr "É necessário um cliente com suporte de x:data para poder procurar" -#: mod_vcard.erl:383 mod_vcard_ldap.erl:483 mod_vcard_odbc.erl:361 +#: mod_vcard.erl:389 mod_vcard_ldap.erl:487 mod_vcard_odbc.erl:367 msgid "vCard User Search" msgstr "" -#: mod_vcard.erl:439 mod_vcard_ldap.erl:537 mod_vcard_odbc.erl:415 +#: mod_vcard.erl:445 mod_vcard_ldap.erl:541 mod_vcard_odbc.erl:421 msgid "ejabberd vCard module" msgstr "Módulo vCard de ejabberd" -#: mod_vcard.erl:463 mod_vcard_ldap.erl:547 mod_vcard_odbc.erl:439 +#: mod_vcard.erl:469 mod_vcard_ldap.erl:551 mod_vcard_odbc.erl:445 #, fuzzy msgid "Search Results for " msgstr "Procurar utilizadores em " -#: mod_vcard_ldap.erl:458 +#: mod_vcard_ldap.erl:462 msgid "Fill in fields to search for any matching Jabber User" msgstr "Preencha os campos para procurar utilizadores Jabber coincidentes" @@ -1470,7 +1528,7 @@ msgstr "" msgid "Show Integral Table" msgstr "" -#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1937 +#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1939 msgid "Statistics" msgstr "Estatísticas" @@ -1483,285 +1541,285 @@ msgstr "Nodo não encontrado" msgid "Node not found" msgstr "Nodo não encontrado" -#: web/ejabberd_web_admin.erl:1461 +#: web/ejabberd_web_admin.erl:1460 #, fuzzy msgid "Host" msgstr "Nome do servidor" -#: web/ejabberd_web_admin.erl:1462 +#: web/ejabberd_web_admin.erl:1461 #, fuzzy msgid "Registered Users" msgstr "Utilizadores registados" -#: web/ejabberd_web_admin.erl:1574 +#: web/ejabberd_web_admin.erl:1573 #, fuzzy msgid "Offline Messages" msgstr "Mensagens diferidas" -#: web/ejabberd_web_admin.erl:1575 web/ejabberd_web_admin.erl:1765 +#: web/ejabberd_web_admin.erl:1574 web/ejabberd_web_admin.erl:1767 msgid "Last Activity" msgstr "Última actividade" -#: web/ejabberd_web_admin.erl:1657 web/ejabberd_web_admin.erl:1673 +#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 #, fuzzy msgid "Registered Users:" msgstr "Utilizadores registados" -#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 -#: web/ejabberd_web_admin.erl:2191 +#: web/ejabberd_web_admin.erl:1661 web/ejabberd_web_admin.erl:1677 +#: web/ejabberd_web_admin.erl:2192 #, fuzzy msgid "Online Users:" msgstr "Utilizadores ligados" -#: web/ejabberd_web_admin.erl:1661 +#: web/ejabberd_web_admin.erl:1663 #, fuzzy msgid "Outgoing s2s Connections:" msgstr "Conexões S2S para fora" -#: web/ejabberd_web_admin.erl:1663 +#: web/ejabberd_web_admin.erl:1665 #, fuzzy msgid "Outgoing s2s Servers:" msgstr "Servidores S2S de saída" -#: web/ejabberd_web_admin.erl:1732 web/mod_register_web.erl:175 +#: web/ejabberd_web_admin.erl:1734 web/mod_register_web.erl:175 #: web/mod_register_web.erl:372 web/mod_register_web.erl:381 #: web/mod_register_web.erl:411 msgid "Change Password" msgstr "Mudar palavra-chave" -#: web/ejabberd_web_admin.erl:1756 +#: web/ejabberd_web_admin.erl:1758 msgid "User " msgstr "Utilizador" -#: web/ejabberd_web_admin.erl:1763 +#: web/ejabberd_web_admin.erl:1765 msgid "Connected Resources:" msgstr "Recursos conectados:" -#: web/ejabberd_web_admin.erl:1764 web/mod_register_web.erl:227 +#: web/ejabberd_web_admin.erl:1766 web/mod_register_web.erl:227 #: web/mod_register_web.erl:519 msgid "Password:" msgstr "Palavra-chave:" -#: web/ejabberd_web_admin.erl:1826 +#: web/ejabberd_web_admin.erl:1828 msgid "No Data" msgstr "" -#: web/ejabberd_web_admin.erl:1904 +#: web/ejabberd_web_admin.erl:1906 msgid "Nodes" msgstr "Nodos" -#: web/ejabberd_web_admin.erl:1927 web/ejabberd_web_admin.erl:1949 +#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1951 msgid "Node " msgstr "Nodo" -#: web/ejabberd_web_admin.erl:1936 +#: web/ejabberd_web_admin.erl:1938 #, fuzzy msgid "Listened Ports" msgstr "Portas em escuta em " -#: web/ejabberd_web_admin.erl:1938 web/ejabberd_web_admin.erl:2259 -#: web/ejabberd_web_admin.erl:2447 +#: web/ejabberd_web_admin.erl:1940 web/ejabberd_web_admin.erl:2260 +#: web/ejabberd_web_admin.erl:2448 msgid "Update" msgstr "Actualizar" -#: web/ejabberd_web_admin.erl:1941 web/ejabberd_web_admin.erl:2568 +#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2569 msgid "Restart" msgstr "Reiniciar" -#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2570 +#: web/ejabberd_web_admin.erl:1945 web/ejabberd_web_admin.erl:2571 msgid "Stop" msgstr "Parar" -#: web/ejabberd_web_admin.erl:1957 +#: web/ejabberd_web_admin.erl:1959 #, fuzzy msgid "RPC Call Error" msgstr "Erro na chamada RPC" -#: web/ejabberd_web_admin.erl:1998 +#: web/ejabberd_web_admin.erl:2000 #, fuzzy msgid "Database Tables at " msgstr "Tabelas da BD em " -#: web/ejabberd_web_admin.erl:2005 +#: web/ejabberd_web_admin.erl:2007 msgid "Storage Type" msgstr "Tipo de armazenagem" -#: web/ejabberd_web_admin.erl:2006 +#: web/ejabberd_web_admin.erl:2008 msgid "Elements" msgstr "" -#: web/ejabberd_web_admin.erl:2007 +#: web/ejabberd_web_admin.erl:2009 msgid "Memory" msgstr "Memória" -#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2032 web/ejabberd_web_admin.erl:2137 msgid "Error" msgstr "" -#: web/ejabberd_web_admin.erl:2033 +#: web/ejabberd_web_admin.erl:2034 #, fuzzy msgid "Backup of " msgstr "Guardar cópia de segurança" -#: web/ejabberd_web_admin.erl:2035 +#: web/ejabberd_web_admin.erl:2036 msgid "" "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." msgstr "" -#: web/ejabberd_web_admin.erl:2040 +#: web/ejabberd_web_admin.erl:2041 #, fuzzy msgid "Store binary backup:" msgstr "Armazenar uma cópia de segurança no ficheiro" -#: web/ejabberd_web_admin.erl:2044 web/ejabberd_web_admin.erl:2051 -#: web/ejabberd_web_admin.erl:2059 web/ejabberd_web_admin.erl:2066 -#: web/ejabberd_web_admin.erl:2073 web/ejabberd_web_admin.erl:2080 -#: web/ejabberd_web_admin.erl:2087 web/ejabberd_web_admin.erl:2095 -#: web/ejabberd_web_admin.erl:2102 web/ejabberd_web_admin.erl:2109 +#: web/ejabberd_web_admin.erl:2045 web/ejabberd_web_admin.erl:2052 +#: web/ejabberd_web_admin.erl:2060 web/ejabberd_web_admin.erl:2067 +#: web/ejabberd_web_admin.erl:2074 web/ejabberd_web_admin.erl:2081 +#: web/ejabberd_web_admin.erl:2088 web/ejabberd_web_admin.erl:2096 +#: web/ejabberd_web_admin.erl:2103 web/ejabberd_web_admin.erl:2110 msgid "OK" msgstr "OK" -#: web/ejabberd_web_admin.erl:2047 +#: web/ejabberd_web_admin.erl:2048 #, fuzzy msgid "Restore binary backup immediately:" msgstr "Recuperar uma cópia de segurança a partir de ficheiro" -#: web/ejabberd_web_admin.erl:2055 +#: web/ejabberd_web_admin.erl:2056 msgid "" "Restore binary backup after next ejabberd restart (requires less memory):" msgstr "" -#: web/ejabberd_web_admin.erl:2062 +#: web/ejabberd_web_admin.erl:2063 msgid "Store plain text backup:" msgstr "" -#: web/ejabberd_web_admin.erl:2069 +#: web/ejabberd_web_admin.erl:2070 #, fuzzy msgid "Restore plain text backup immediately:" msgstr "Recuperar uma cópia de segurança a partir de ficheiro" -#: web/ejabberd_web_admin.erl:2076 +#: web/ejabberd_web_admin.erl:2077 msgid "Import users data from a PIEFXIS file (XEP-0227):" msgstr "" -#: web/ejabberd_web_admin.erl:2083 +#: web/ejabberd_web_admin.erl:2084 msgid "Export data of all users in the server to PIEFXIS files (XEP-0227):" msgstr "" -#: web/ejabberd_web_admin.erl:2090 +#: web/ejabberd_web_admin.erl:2091 msgid "Export data of users in a host to PIEFXIS files (XEP-0227):" msgstr "" -#: web/ejabberd_web_admin.erl:2098 +#: web/ejabberd_web_admin.erl:2099 #, fuzzy msgid "Import user data from jabberd14 spool file:" msgstr "Importar utilizadores a partir de ficheiros da spool do jabberd14" -#: web/ejabberd_web_admin.erl:2105 +#: web/ejabberd_web_admin.erl:2106 #, fuzzy msgid "Import users data from jabberd14 spool directory:" msgstr "Importar utilizadores a partir de ficheiros da spool do jabberd14" -#: web/ejabberd_web_admin.erl:2131 +#: web/ejabberd_web_admin.erl:2132 msgid "Listened Ports at " msgstr "Portas em escuta em " -#: web/ejabberd_web_admin.erl:2156 +#: web/ejabberd_web_admin.erl:2157 #, fuzzy msgid "Modules at " msgstr "Parar módulos em " -#: web/ejabberd_web_admin.erl:2182 +#: web/ejabberd_web_admin.erl:2183 #, fuzzy msgid "Statistics of ~p" msgstr "Estatísticas" -#: web/ejabberd_web_admin.erl:2185 +#: web/ejabberd_web_admin.erl:2186 #, fuzzy msgid "Uptime:" msgstr "Tempo de funcionamento" -#: web/ejabberd_web_admin.erl:2188 +#: web/ejabberd_web_admin.erl:2189 #, fuzzy msgid "CPU Time:" msgstr "Tempo de processador consumido" -#: web/ejabberd_web_admin.erl:2194 +#: web/ejabberd_web_admin.erl:2195 #, fuzzy msgid "Transactions Committed:" msgstr "Transacções realizadas" -#: web/ejabberd_web_admin.erl:2197 +#: web/ejabberd_web_admin.erl:2198 #, fuzzy msgid "Transactions Aborted:" msgstr "Transacções abortadas" -#: web/ejabberd_web_admin.erl:2200 +#: web/ejabberd_web_admin.erl:2201 #, fuzzy msgid "Transactions Restarted:" msgstr "Transacções reiniciadas" -#: web/ejabberd_web_admin.erl:2203 +#: web/ejabberd_web_admin.erl:2204 #, fuzzy msgid "Transactions Logged:" msgstr "Transacções armazenadas" -#: web/ejabberd_web_admin.erl:2245 +#: web/ejabberd_web_admin.erl:2246 #, fuzzy msgid "Update " msgstr "Actualizar" -#: web/ejabberd_web_admin.erl:2253 +#: web/ejabberd_web_admin.erl:2254 #, fuzzy msgid "Update plan" msgstr "Actualizar" -#: web/ejabberd_web_admin.erl:2254 +#: web/ejabberd_web_admin.erl:2255 #, fuzzy msgid "Modified modules" msgstr "Iniciar módulos" -#: web/ejabberd_web_admin.erl:2255 +#: web/ejabberd_web_admin.erl:2256 #, fuzzy msgid "Update script" msgstr "Actualizar" -#: web/ejabberd_web_admin.erl:2256 +#: web/ejabberd_web_admin.erl:2257 msgid "Low level update script" msgstr "" -#: web/ejabberd_web_admin.erl:2257 +#: web/ejabberd_web_admin.erl:2258 msgid "Script check" msgstr "" -#: web/ejabberd_web_admin.erl:2425 +#: web/ejabberd_web_admin.erl:2426 msgid "Port" msgstr "Porta" -#: web/ejabberd_web_admin.erl:2426 +#: web/ejabberd_web_admin.erl:2427 msgid "IP" msgstr "" -#: web/ejabberd_web_admin.erl:2427 +#: web/ejabberd_web_admin.erl:2428 #, fuzzy msgid "Protocol" msgstr "Porta" -#: web/ejabberd_web_admin.erl:2428 web/ejabberd_web_admin.erl:2555 +#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 msgid "Module" msgstr "Módulo" -#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 +#: web/ejabberd_web_admin.erl:2430 web/ejabberd_web_admin.erl:2557 msgid "Options" msgstr "Opções" -#: web/ejabberd_web_admin.erl:2449 +#: web/ejabberd_web_admin.erl:2450 msgid "Delete" msgstr "Eliminar" -#: web/ejabberd_web_admin.erl:2578 +#: web/ejabberd_web_admin.erl:2579 #, fuzzy msgid "Start" msgstr "Reiniciar" diff --git a/src/msgs/ru.msg b/src/msgs/ru.msg index 3949ae07e..ece734849 100644 --- a/src/msgs/ru.msg +++ b/src/msgs/ru.msg @@ -20,7 +20,9 @@ {"Allow users to send invites","Разрешить пользователям посылать приглашения"}. {"Allow users to send private messages","Разрешить приватные сообщения"}. {"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 voice requests","Разрешить посетителям запрашивать право голоса"}. {"All Users","Все пользователи"}. {"Announcements","Объявления"}. {"anyone","всем участникам"}. @@ -75,6 +77,7 @@ {"Dump Backup to Text File at ","Копирование в текстовый файл на "}. {"Dump to Text File","Копирование в текстовый файл"}. {"Edit Properties","Изменить параметры"}. +{"Either approve or decline the voice request.","Подтвердите или отклоните право голоса."}. {"ejabberd IRC module","ejabberd IRC модуль"}. {"ejabberd MUC module","ejabberd MUC модуль"}. {"ejabberd Publish-Subscribe module","Модуль ejabberd Публикации-Подписки"}. @@ -98,8 +101,10 @@ {"Erlang Jabber Server","Erlang Jabber Server"}. {"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\"}]."}. +{"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 users in a host to PIEFXIS files (XEP-0227):","Экспорт пользовательских данных домена в файлы формата PIEFXIS (XEP-0227):"}. +{"Failed to extract JID from your voice request approval","Ошибка обработки JID из вашего запроса на право голоса"}. {"Family Name","Фамилия"}. {"February","февраля"}. {"Fill in fields to search for any matching Jabber User","Заполните форму для поиска пользователя Jabber"}. @@ -113,6 +118,7 @@ {"Get User Last Login Time","Получить время последнего подключения пользователя"}. {"Get User Password","Получить пароль пользователя"}. {"Get User Statistics","Получить статистику по пользователю"}. +{"Grant voice to this person?","Предоставить голос?"}. {"Groups","Группы"}. {"Group ","Группа "}. {"has been banned","запретили входить в комнату"}. @@ -168,7 +174,7 @@ {"List of modules to start","Список запускаемых модулей"}. {"Low level update script","Низкоуровневый сценарий обновления"}. {"Make participants list public","Сделать список участников видимым всем"}. -{"Make room captcha protected","Сделать комнату защищённой капчей"}. +{"Make room CAPTCHA protected","Сделать комнату защищённой капчей"}. {"Make room members-only","Комната только для зарегистрированных участников"}. {"Make room moderated","Сделать комнату модерируемой"}. {"Make room password protected","Сделать комнату защищённой паролем"}. @@ -185,6 +191,7 @@ {"Memory","Память"}. {"Message body","Тело сообщения"}. {"Middle Name","Отчество"}. +{"Minimum interval between voice requests (in seconds)","Минимальный интервал между запросами на право голоса"}. {"Moderator privileges required","Требуются права модератора"}. {"moderators only","только модераторам"}. {"Modified modules","Изменённые модули"}. @@ -200,6 +207,7 @@ {"Nickname ~s does not exist in the room","Псевдоним ~s в комнате отсутствует"}. {"Nickname","Псевдоним"}. {"No body provided for announce message","Тело объявления не должно быть пустым"}. +{"nobody","никто"}. {"No Data","Нет данных"}. {"Node ID","ID узла"}. {"Node not found","Узел не найден"}. @@ -227,6 +235,7 @@ {"Only deliver notifications to available users","Доставлять уведомления только доступным пользователям"}. {"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 can approve voice requests","Только модераторы могут утверждать запросы на право голоса"}. {"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","Только администратор службы может посылать служебные сообщения"}. @@ -250,6 +259,7 @@ {"Persist items to storage","Сохранять публикации в хранилище"}. {"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, wait for a while before sending new voice request","Пожалуйста, подождите перед тем как подать новый запрос на право голоса"}. {"Pong","Понг"}. {"Port ~b","Порт ~b"}. {"Port","Порт"}. @@ -338,7 +348,7 @@ {"Sunday","Воскресенье"}. {"That nickname is already in use by another occupant","Этот псевдоним уже занят другим участником"}. {"That nickname is registered by another person","Этот псевдоним зарегистрирован кем-то другим"}. -{"The captcha is valid.","Проверка капчи прошла успешно."}. +{"The CAPTCHA is valid.","Проверка капчи прошла успешно."}. {"The CAPTCHA verification has failed","Проверка капчи не пройдена"}. {"The collections with which a node is affiliated","Имя коллекции, в которую входит узел"}. {"The password is too weak","Слишком слабый пароль"}. @@ -357,6 +367,7 @@ {"Thursday","Четверг"}. {"Time delay","По истечение"}. {"Time","Время"}. +{"Too many CAPTCHA requests","Слишком много запросов капчи"}. {"To ~s","К ~s"}. {"To","Кому"}. {"Traffic rate limit is exceeded","Превышен лимит скорости посылки информации"}. @@ -365,7 +376,6 @@ {"Transactions Logged:","Транзакции запротоколированные:"}. {"Transactions Restarted:","Транзакции перезапущенные:"}. {"Tuesday","Вторник"}. -{"Unable to generate a captcha","Не получилось создать капчу"}. {"Unable to generate a CAPTCHA","Не получилось создать капчу"}. {"Unauthorized","Не авторизован"}. {"Unregister a Jabber account","Удалить Jabber-аккаунт"}. @@ -378,6 +388,7 @@ {"Update ","Обновление "}. {"Uptime:","Время работы:"}. {"Use of STARTTLS required","Вы обязаны использовать STARTTLS"}. +{"User JID","JID пользователя"}. {"User Management","Управление пользователями"}. {"Username:","Имя пользователя:"}. {"Users are not allowed to register accounts so quickly","Пользователи не могут регистрировать учётные записи так быстро"}. @@ -390,6 +401,8 @@ {"Virtual Hosts","Виртуальные хосты"}. {"Visitors are not allowed to change their nicknames in this room","Посетителям запрещено изменять свои псевдонимы в этой комнате"}. {"Visitors are not allowed to send messages to all occupants","Посетителям не разрешается посылать сообщения всем присутствующим"}. +{"Voice requests are disabled in this conference","Запросы на право голоса отключены в этой конференции"}. +{"Voice request","Запрос на право голоса"}. {"Wednesday","Среда"}. {"When to send the last published item","Когда посылать последний опубликованный элемент"}. {"Whether to allow subscriptions","Разрешить подписку"}. diff --git a/src/msgs/ru.po b/src/msgs/ru.po index 532c27ee8..27f6a40c6 100644 --- a/src/msgs/ru.po +++ b/src/msgs/ru.po @@ -2,8 +2,9 @@ msgid "" msgstr "" "Project-Id-Version: 2.1.0-alpha\n" -"PO-Revision-Date: 2010-11-19 22:46+0900\n" -"Last-Translator: Evgeniy Khramtsov\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2012-04-15 13:38+0900\n" +"Last-Translator: Evgeniy Khramtsov \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" @@ -24,11 +25,11 @@ msgstr "Вы обязаны использовать STARTTLS" msgid "No resource provided" msgstr "Не указан ресурс" -#: ejabberd_c2s.erl:1149 +#: ejabberd_c2s.erl:1197 msgid "Replaced by new connection" msgstr "Заменено новым соединением" -#: ejabberd_c2s.erl:1837 +#: ejabberd_c2s.erl:1885 msgid "Your active privacy list has denied the routing of this stanza." msgstr "" "Маршрутизация этой строфы запрещена вашим активным списком приватности." @@ -51,7 +52,7 @@ msgid "CAPTCHA web page" msgstr "Ссылка на капчу" #: ejabberd_captcha.erl:307 -msgid "The captcha is valid." +msgid "The CAPTCHA is valid." msgstr "Проверка капчи прошла успешно." #: mod_adhoc.erl:95 mod_adhoc.erl:125 mod_adhoc.erl:143 mod_adhoc.erl:161 @@ -66,67 +67,70 @@ msgstr "Пинг" msgid "Pong" msgstr "Понг" -#: mod_announce.erl:506 +#: mod_announce.erl:507 mod_announce_odbc.erl:499 msgid "Really delete message of the day?" msgstr "Действительно удалить сообщение дня?" -#: mod_announce.erl:514 mod_configure.erl:1083 mod_configure.erl:1128 +#: mod_announce.erl:515 mod_announce_odbc.erl:507 mod_configure.erl:1083 +#: mod_configure.erl:1128 msgid "Subject" msgstr "Тема" -#: mod_announce.erl:519 mod_configure.erl:1088 mod_configure.erl:1133 +#: mod_announce.erl:520 mod_announce_odbc.erl:512 mod_configure.erl:1088 +#: mod_configure.erl:1133 msgid "Message body" msgstr "Тело сообщения" -#: mod_announce.erl:599 +#: mod_announce.erl:600 mod_announce_odbc.erl:592 msgid "No body provided for announce message" msgstr "Тело объявления не должно быть пустым" -#: mod_announce.erl:634 +#: mod_announce.erl:635 mod_announce_odbc.erl:627 msgid "Announcements" msgstr "Объявления" -#: mod_announce.erl:636 +#: mod_announce.erl:637 mod_announce_odbc.erl:629 msgid "Send announcement to all users" msgstr "Разослать объявление всем пользователям" -#: mod_announce.erl:638 +#: mod_announce.erl:639 mod_announce_odbc.erl:631 msgid "Send announcement to all users on all hosts" msgstr "Разослать объявление всем пользователям на всех виртуальных серверах" -#: mod_announce.erl:640 +#: mod_announce.erl:641 mod_announce_odbc.erl:633 msgid "Send announcement to all online users" msgstr "Разослать объявление всем подключённым пользователям" -#: mod_announce.erl:642 mod_configure.erl:1078 mod_configure.erl:1123 +#: mod_announce.erl:643 mod_announce_odbc.erl:635 mod_configure.erl:1078 +#: mod_configure.erl:1123 msgid "Send announcement to all online users on all hosts" msgstr "" "Разослать объявление всем подключённым пользователям на всех виртуальных " "серверах" -#: mod_announce.erl:644 +#: mod_announce.erl:645 mod_announce_odbc.erl:637 msgid "Set message of the day and send to online users" msgstr "Установить сообщение дня и разослать его подключённым пользователям" -#: mod_announce.erl:646 +#: mod_announce.erl:647 mod_announce_odbc.erl:639 msgid "Set message of the day on all hosts and send to online users" msgstr "" "Установить сообщение дня на всех виртуальных серверах и разослать его " "подключённым пользователям" -#: mod_announce.erl:648 +#: mod_announce.erl:649 mod_announce_odbc.erl:641 msgid "Update message of the day (don't send)" msgstr "Обновить сообщение дня (не рассылать)" -#: mod_announce.erl:650 +#: mod_announce.erl:651 mod_announce_odbc.erl:643 msgid "Update message of the day on all hosts (don't send)" msgstr "Обновить сообщение дня на всех виртуальных серверах (не рассылать)" -#: mod_announce.erl:652 +#: mod_announce.erl:653 mod_announce_odbc.erl:645 msgid "Delete message of the day" msgstr "Удалить сообщение дня" -#: mod_announce.erl:654 +#: mod_announce.erl:655 mod_announce_odbc.erl:647 msgid "Delete message of the day on all hosts" msgstr "Удалить сообщение дня со всех виртуальных серверов" @@ -135,7 +139,7 @@ msgstr "Удалить сообщение дня со всех виртуаль msgid "Configuration" msgstr "Конфигурация" -#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1934 +#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1936 msgid "Database" msgstr "База данных" @@ -147,7 +151,7 @@ msgstr "Запуск модулей" msgid "Stop Modules" msgstr "Остановка модулей" -#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1935 +#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1937 msgid "Backup" msgstr "Резервное копирование" @@ -176,7 +180,7 @@ msgid "Shut Down Service" msgstr "Остановить службу" #: mod_configure.erl:145 mod_configure.erl:518 mod_configure.erl:1197 -#: web/ejabberd_web_admin.erl:1528 +#: web/ejabberd_web_admin.erl:1527 msgid "Add User" msgstr "Добавить пользователя" @@ -228,7 +232,7 @@ msgid "User Management" msgstr "Управление пользователями" #: mod_configure.erl:500 web/ejabberd_web_admin.erl:1058 -#: web/ejabberd_web_admin.erl:1463 +#: web/ejabberd_web_admin.erl:1462 msgid "Online Users" msgstr "Подключённые пользователи" @@ -240,15 +244,15 @@ msgstr "Все пользователи" msgid "Outgoing s2s Connections" msgstr "Исходящие s2s-соединения" -#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1905 +#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1907 msgid "Running Nodes" msgstr "Работающие узлы" -#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1907 +#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1909 msgid "Stopped Nodes" msgstr "Остановленные узлы" -#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1951 +#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1953 msgid "Modules" msgstr "Модули" @@ -379,15 +383,15 @@ msgstr "Правила доступа" #: mod_configure.erl:1200 mod_configure.erl:1222 mod_configure.erl:1234 #: mod_configure.erl:1246 mod_configure.erl:1258 mod_configure.erl:1275 -#: mod_configure.erl:1287 mod_configure.erl:1652 mod_configure.erl:1702 -#: mod_configure.erl:1723 mod_roster.erl:943 mod_roster_odbc.erl:1048 -#: mod_vcard.erl:466 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:442 +#: mod_configure.erl:1287 mod_configure.erl:1650 mod_configure.erl:1700 +#: mod_configure.erl:1721 mod_roster.erl:943 mod_roster_odbc.erl:1060 +#: mod_vcard.erl:472 mod_vcard_ldap.erl:554 mod_vcard_odbc.erl:448 msgid "Jabber ID" msgstr "Jabber ID" -#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1653 -#: mod_configure.erl:1865 mod_muc/mod_muc_room.erl:2970 mod_register.erl:235 -#: web/ejabberd_web_admin.erl:1521 +#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1651 +#: mod_configure.erl:1863 mod_muc/mod_muc_room.erl:3224 mod_register.erl:235 +#: web/ejabberd_web_admin.erl:1520 msgid "Password" msgstr "Пароль" @@ -403,69 +407,70 @@ msgstr "Количество зарегистрированных пользов msgid "Number of online users" msgstr "Количество подключённых пользователей" -#: mod_configure.erl:1684 web/ejabberd_web_admin.erl:1589 -#: web/ejabberd_web_admin.erl:1741 +#: mod_configure.erl:1682 web/ejabberd_web_admin.erl:1588 +#: web/ejabberd_web_admin.erl:1743 msgid "Never" msgstr "Никогда" -#: mod_configure.erl:1698 web/ejabberd_web_admin.erl:1602 -#: web/ejabberd_web_admin.erl:1754 +#: mod_configure.erl:1696 web/ejabberd_web_admin.erl:1601 +#: web/ejabberd_web_admin.erl:1756 msgid "Online" msgstr "Подключён" -#: mod_configure.erl:1703 +#: mod_configure.erl:1701 msgid "Last login" msgstr "Время последнего подключения" -#: mod_configure.erl:1724 +#: mod_configure.erl:1722 msgid "Roster size" msgstr "Размер списка контактов" -#: mod_configure.erl:1725 +#: mod_configure.erl:1723 msgid "IP addresses" msgstr "IP адреса" -#: mod_configure.erl:1726 +#: mod_configure.erl:1724 msgid "Resources" msgstr "Ресурсы" -#: mod_configure.erl:1852 +#: mod_configure.erl:1850 msgid "Administration of " msgstr "Администрирование " -#: mod_configure.erl:1855 +#: mod_configure.erl:1853 msgid "Action on user" msgstr "Действие над пользователем" -#: mod_configure.erl:1859 +#: mod_configure.erl:1857 msgid "Edit Properties" msgstr "Изменить параметры" -#: mod_configure.erl:1862 web/ejabberd_web_admin.erl:1767 +#: mod_configure.erl:1860 web/ejabberd_web_admin.erl:1769 msgid "Remove User" msgstr "Удалить пользователя" -#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:336 +#: mod_irc/mod_irc.erl:201 mod_irc/mod_irc_odbc.erl:196 +#: mod_muc/mod_muc.erl:336 mod_muc/mod_muc_odbc.erl:342 msgid "Access denied by service policy" msgstr "Доступ запрещён политикой службы" -#: mod_irc/mod_irc.erl:400 +#: mod_irc/mod_irc.erl:401 mod_irc/mod_irc_odbc.erl:398 msgid "IRC Transport" msgstr "IRC Транспорт" -#: mod_irc/mod_irc.erl:427 +#: mod_irc/mod_irc.erl:428 mod_irc/mod_irc_odbc.erl:425 msgid "ejabberd IRC module" msgstr "ejabberd IRC модуль" -#: mod_irc/mod_irc.erl:558 +#: mod_irc/mod_irc.erl:559 mod_irc/mod_irc_odbc.erl:568 msgid "You need an x:data capable client to configure mod_irc settings" msgstr "Чтобы настроить параметры mod_irc, требуется x:data-совместимый клиент" -#: mod_irc/mod_irc.erl:565 +#: mod_irc/mod_irc.erl:566 mod_irc/mod_irc_odbc.erl:575 msgid "Registration in mod_irc for " msgstr "Регистрация в mod_irc для " -#: mod_irc/mod_irc.erl:570 +#: mod_irc/mod_irc.erl:571 mod_irc/mod_irc_odbc.erl:580 msgid "" "Enter username, encodings, ports and passwords you wish to use for " "connecting to IRC servers" @@ -473,11 +478,11 @@ msgstr "" "Введите имя пользователя, кодировки, порты и пароли, которые будут " "использоваться при подключении к IRC-серверам" -#: mod_irc/mod_irc.erl:575 +#: mod_irc/mod_irc.erl:576 mod_irc/mod_irc_odbc.erl:585 msgid "IRC Username" msgstr "Имя пользователя IRC" -#: mod_irc/mod_irc.erl:585 +#: mod_irc/mod_irc.erl:586 mod_irc/mod_irc_odbc.erl:595 msgid "" "If you want to specify different ports, passwords, encodings for IRC " "servers, fill this list with values in format '{\"irc server\", \"encoding" @@ -489,7 +494,7 @@ msgstr "" "\"пароль\"}'. По умолчанию сервис использует кодировку \"~s\", порт ~p, " "пустой пароль." -#: mod_irc/mod_irc.erl:597 +#: mod_irc/mod_irc.erl:598 mod_irc/mod_irc_odbc.erl:607 msgid "" "Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." @@ -497,35 +502,36 @@ msgstr "" "Пример: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." -#: mod_irc/mod_irc.erl:602 +#: mod_irc/mod_irc.erl:603 mod_irc/mod_irc_odbc.erl:612 msgid "Connections parameters" msgstr "Параметры соединения" -#: mod_irc/mod_irc.erl:727 +#: mod_irc/mod_irc.erl:728 mod_irc/mod_irc_odbc.erl:757 msgid "Join IRC channel" msgstr "Присоединиться к каналу IRC" -#: mod_irc/mod_irc.erl:731 +#: mod_irc/mod_irc.erl:732 mod_irc/mod_irc_odbc.erl:761 msgid "IRC channel (don't put the first #)" msgstr "Канал IRC (без символа #)" -#: mod_irc/mod_irc.erl:736 +#: mod_irc/mod_irc.erl:737 mod_irc/mod_irc_odbc.erl:766 msgid "IRC server" msgstr "Сервер IRC" -#: mod_irc/mod_irc.erl:769 mod_irc/mod_irc.erl:773 +#: mod_irc/mod_irc.erl:770 mod_irc/mod_irc.erl:774 +#: mod_irc/mod_irc_odbc.erl:799 mod_irc/mod_irc_odbc.erl:803 msgid "Join the IRC channel here." msgstr "Присоединяйтесь к каналу IRC" -#: mod_irc/mod_irc.erl:777 +#: mod_irc/mod_irc.erl:778 mod_irc/mod_irc_odbc.erl:807 msgid "Join the IRC channel in this Jabber ID: ~s" msgstr "Присоединиться к каналу IRC с Jabber ID: ~s" -#: mod_irc/mod_irc.erl:862 +#: mod_irc/mod_irc.erl:863 mod_irc/mod_irc_odbc.erl:904 msgid "IRC settings" msgstr "Настройки IRC" -#: mod_irc/mod_irc.erl:867 +#: mod_irc/mod_irc.erl:868 mod_irc/mod_irc_odbc.erl:909 msgid "" "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 " @@ -535,70 +541,71 @@ msgstr "" "подключении к IRC-серверам. Нажмите 'Далее' для получения дополнительных " "полей для заполнения. Нажмите 'Завершить' для сохранения настроек." -#: mod_irc/mod_irc.erl:873 +#: mod_irc/mod_irc.erl:874 mod_irc/mod_irc_odbc.erl:915 msgid "IRC username" msgstr "Имя пользователя IRC" -#: mod_irc/mod_irc.erl:922 +#: mod_irc/mod_irc.erl:923 mod_irc/mod_irc_odbc.erl:964 msgid "Password ~b" msgstr "Пароль ~b" -#: mod_irc/mod_irc.erl:927 +#: mod_irc/mod_irc.erl:928 mod_irc/mod_irc_odbc.erl:969 msgid "Port ~b" msgstr "Порт ~b" -#: mod_irc/mod_irc.erl:932 +#: mod_irc/mod_irc.erl:933 mod_irc/mod_irc_odbc.erl:974 msgid "Encoding for server ~b" msgstr "Кодировка сервера ~b" -#: mod_irc/mod_irc.erl:941 +#: mod_irc/mod_irc.erl:942 mod_irc/mod_irc_odbc.erl:983 msgid "Server ~b" msgstr "Сервер ~b" -#: mod_muc/mod_muc.erl:449 +#: mod_muc/mod_muc.erl:449 mod_muc/mod_muc_odbc.erl:456 msgid "Only service administrators are allowed to send service messages" msgstr "Только администратор службы может посылать служебные сообщения" -#: mod_muc/mod_muc.erl:493 +#: mod_muc/mod_muc.erl:493 mod_muc/mod_muc_odbc.erl:500 msgid "Room creation is denied by service policy" msgstr "Cоздавать конференцию запрещено политикой службы" -#: mod_muc/mod_muc.erl:500 +#: mod_muc/mod_muc.erl:500 mod_muc/mod_muc_odbc.erl:507 msgid "Conference room does not exist" msgstr "Конференция не существует" -#: mod_muc/mod_muc.erl:581 +#: mod_muc/mod_muc.erl:582 mod_muc/mod_muc_odbc.erl:595 msgid "Chatrooms" msgstr "Комнаты" -#: mod_muc/mod_muc.erl:711 +#: mod_muc/mod_muc.erl:712 mod_muc/mod_muc_odbc.erl:729 msgid "You need a client that supports x:data to register the nickname" msgstr "Чтобы зарегистрировать псевдоним, требуется x:data-совместимый клиент" -#: mod_muc/mod_muc.erl:717 +#: mod_muc/mod_muc.erl:718 mod_muc/mod_muc_odbc.erl:735 msgid "Nickname Registration at " msgstr "Регистрация псевдонима на " -#: mod_muc/mod_muc.erl:721 +#: mod_muc/mod_muc.erl:722 mod_muc/mod_muc_odbc.erl:739 msgid "Enter nickname you want to register" msgstr "Введите псевдоним, который Вы хотели бы зарегистрировать" -#: mod_muc/mod_muc.erl:722 mod_roster.erl:944 mod_roster_odbc.erl:1049 -#: mod_vcard.erl:358 mod_vcard.erl:471 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:447 +#: mod_muc/mod_muc.erl:723 mod_muc/mod_muc_odbc.erl:740 +#: mod_muc/mod_muc_room.erl:3810 mod_roster.erl:944 mod_roster_odbc.erl:1061 +#: mod_vcard.erl:364 mod_vcard.erl:477 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:453 msgid "Nickname" msgstr "Псевдоним" -#: mod_muc/mod_muc.erl:761 mod_muc/mod_muc_room.erl:933 -#: mod_muc/mod_muc_room.erl:1577 +#: mod_muc/mod_muc.erl:762 mod_muc/mod_muc_odbc.erl:784 +#: mod_muc/mod_muc_room.erl:1064 mod_muc/mod_muc_room.erl:1787 msgid "That nickname is registered by another person" msgstr "Этот псевдоним зарегистрирован кем-то другим" -#: mod_muc/mod_muc.erl:787 +#: mod_muc/mod_muc.erl:788 mod_muc/mod_muc_odbc.erl:811 msgid "You must fill in field \"Nickname\" in the form" msgstr "Вы должны заполнить поле \"Псевдоним\" в форме" -#: mod_muc/mod_muc.erl:807 +#: mod_muc/mod_muc.erl:808 mod_muc/mod_muc_odbc.erl:831 msgid "ejabberd MUC module" msgstr "ejabberd MUC модуль" @@ -638,8 +645,8 @@ msgstr "выгнали из комнаты из-за останова систе msgid "is now known as" msgstr "изменил(а) имя на" -#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:689 -#: mod_muc/mod_muc_room.erl:2138 +#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:688 +#: mod_muc/mod_muc_room.erl:2393 msgid " has set the subject to: " msgstr " установил(а) тему: " @@ -735,33 +742,50 @@ msgstr "ноября" msgid "December" msgstr "декабря" -#: mod_muc/mod_muc_log.erl:751 +#: mod_muc/mod_muc_log.erl:750 msgid "Room Configuration" msgstr "Конфигурация комнаты" -#: mod_muc/mod_muc_log.erl:760 +#: mod_muc/mod_muc_log.erl:759 msgid "Room Occupants" msgstr "Участники комнаты" -#: mod_muc/mod_muc_room.erl:170 +#: mod_muc/mod_muc_room.erl:174 msgid "Traffic rate limit is exceeded" msgstr "Превышен лимит скорости посылки информации" -#: mod_muc/mod_muc_room.erl:242 +#: mod_muc/mod_muc_room.erl:246 msgid "" "This participant is kicked from the room because he sent an error message" msgstr "" "Этого участника выгнали из комнаты за то, что он послал сообщение об ошибке" -#: mod_muc/mod_muc_room.erl:251 +#: mod_muc/mod_muc_room.erl:255 msgid "It is not allowed to send private messages to the conference" msgstr "Не разрешается посылать частные сообщения прямо в конференцию" -#: mod_muc/mod_muc_room.erl:296 +#: mod_muc/mod_muc_room.erl:332 +msgid "Please, wait for a while before sending new voice request" +msgstr "" +"Пожалуйста, подождите перед тем как подать новый запрос на право голоса" + +#: mod_muc/mod_muc_room.erl:347 +msgid "Voice requests are disabled in this conference" +msgstr "Запросы на право голоса отключены в этой конференции" + +#: mod_muc/mod_muc_room.erl:364 +msgid "Failed to extract JID from your voice request approval" +msgstr "Ошибка обработки JID из вашего запроса на право голоса" + +#: mod_muc/mod_muc_room.erl:393 +msgid "Only moderators can approve voice requests" +msgstr "Только модераторы могут утверждать запросы на право голоса" + +#: mod_muc/mod_muc_room.erl:408 msgid "Improper message type" msgstr "Неправильный тип сообщения" -#: mod_muc/mod_muc_room.erl:406 +#: mod_muc/mod_muc_room.erl:518 msgid "" "This participant is kicked from the room because he sent an error message to " "another participant" @@ -769,229 +793,261 @@ msgstr "" "Этого участника выгнали из комнаты за то, что он послал сообщение об ошибке " "другому участнику" -#: mod_muc/mod_muc_room.erl:419 +#: mod_muc/mod_muc_room.erl:531 msgid "It is not allowed to send private messages of type \"groupchat\"" msgstr "Нельзя посылать частные сообщения типа \"groupchat\"" -#: mod_muc/mod_muc_room.erl:431 mod_muc/mod_muc_room.erl:486 +#: mod_muc/mod_muc_room.erl:543 mod_muc/mod_muc_room.erl:611 msgid "Recipient is not in the conference room" msgstr "Адресата нет в конференции" -#: mod_muc/mod_muc_room.erl:451 mod_muc/mod_muc_room.erl:829 -#: mod_muc/mod_muc_room.erl:3609 -msgid "Only occupants are allowed to send messages to the conference" -msgstr "Только присутствующим разрешается посылать сообщения в конференцию" - -#: mod_muc/mod_muc_room.erl:460 +#: mod_muc/mod_muc_room.erl:564 mod_muc/mod_muc_room.erl:585 msgid "It is not allowed to send private messages" msgstr "Запрещено посылать приватные сообщения" -#: mod_muc/mod_muc_room.erl:509 +#: mod_muc/mod_muc_room.erl:576 mod_muc/mod_muc_room.erl:956 +#: mod_muc/mod_muc_room.erl:4040 +msgid "Only occupants are allowed to send messages to the conference" +msgstr "Только присутствующим разрешается посылать сообщения в конференцию" + +#: mod_muc/mod_muc_room.erl:634 msgid "Only occupants are allowed to send queries to the conference" msgstr "Только присутствующим разрешается посылать запросы в конференцию" -#: mod_muc/mod_muc_room.erl:521 +#: mod_muc/mod_muc_room.erl:646 msgid "Queries to the conference members are not allowed in this room" msgstr "Запросы к пользователям в этой конференции запрещены" -#: mod_muc/mod_muc_room.erl:805 +#: mod_muc/mod_muc_room.erl:932 msgid "" "Only moderators and participants are allowed to change the subject in this " "room" msgstr "Только модераторы и участники могут изменять тему в этой комнате" -#: mod_muc/mod_muc_room.erl:810 +#: mod_muc/mod_muc_room.erl:937 msgid "Only moderators are allowed to change the subject in this room" msgstr "Только модераторы могут изменять тему в этой комнате" -#: mod_muc/mod_muc_room.erl:820 +#: mod_muc/mod_muc_room.erl:947 msgid "Visitors are not allowed to send messages to all occupants" msgstr "Посетителям не разрешается посылать сообщения всем присутствующим" -#: mod_muc/mod_muc_room.erl:891 +#: mod_muc/mod_muc_room.erl:1021 msgid "" "This participant is kicked from the room because he sent an error presence" msgstr "" "Этого участника выгнали из комнаты за то, что он послал присутствие с ошибкой" -#: mod_muc/mod_muc_room.erl:909 +#: mod_muc/mod_muc_room.erl:1040 msgid "Visitors are not allowed to change their nicknames in this room" msgstr "Посетителям запрещено изменять свои псевдонимы в этой комнате" -#: mod_muc/mod_muc_room.erl:922 mod_muc/mod_muc_room.erl:1569 +#: mod_muc/mod_muc_room.erl:1053 mod_muc/mod_muc_room.erl:1779 msgid "That nickname is already in use by another occupant" msgstr "Этот псевдоним уже занят другим участником" -#: mod_muc/mod_muc_room.erl:1558 +#: mod_muc/mod_muc_room.erl:1768 msgid "You have been banned from this room" msgstr "Вам запрещено входить в эту конференцию" -#: mod_muc/mod_muc_room.erl:1561 +#: mod_muc/mod_muc_room.erl:1771 msgid "Membership is required to enter this room" msgstr "В эту конференцию могут входить только её члены" -#: mod_muc/mod_muc_room.erl:1597 +#: mod_muc/mod_muc_room.erl:1807 msgid "This room is not anonymous" msgstr "Эта комната не анонимная" -#: mod_muc/mod_muc_room.erl:1623 +#: mod_muc/mod_muc_room.erl:1833 msgid "A password is required to enter this room" msgstr "Чтобы войти в эту конференцию, нужен пароль" -#: mod_muc/mod_muc_room.erl:1645 mod_register.erl:246 +#: mod_muc/mod_muc_room.erl:1855 mod_register.erl:246 msgid "Too many CAPTCHA requests" -msgstr "" +msgstr "Слишком много запросов капчи" -#: mod_muc/mod_muc_room.erl:1654 -msgid "Unable to generate a captcha" +#: mod_muc/mod_muc_room.erl:1864 mod_register.erl:251 +msgid "Unable to generate a CAPTCHA" msgstr "Не получилось создать капчу" -#: mod_muc/mod_muc_room.erl:1664 +#: mod_muc/mod_muc_room.erl:1874 msgid "Incorrect password" msgstr "Неправильный пароль" -#: mod_muc/mod_muc_room.erl:2193 +#: mod_muc/mod_muc_room.erl:2448 msgid "Administrator privileges required" msgstr "Требуются права администратора" -#: mod_muc/mod_muc_room.erl:2208 +#: mod_muc/mod_muc_room.erl:2463 msgid "Moderator privileges required" msgstr "Требуются права модератора" -#: mod_muc/mod_muc_room.erl:2363 +#: mod_muc/mod_muc_room.erl:2619 msgid "Jabber ID ~s is invalid" msgstr "Jabber ID ~s недопустимый" -#: mod_muc/mod_muc_room.erl:2377 +#: mod_muc/mod_muc_room.erl:2633 msgid "Nickname ~s does not exist in the room" msgstr "Псевдоним ~s в комнате отсутствует" -#: mod_muc/mod_muc_room.erl:2403 mod_muc/mod_muc_room.erl:2797 +#: mod_muc/mod_muc_room.erl:2659 mod_muc/mod_muc_room.erl:3049 msgid "Invalid affiliation: ~s" msgstr "Недопустимый ранг: ~s" -#: mod_muc/mod_muc_room.erl:2460 +#: mod_muc/mod_muc_room.erl:2713 msgid "Invalid role: ~s" msgstr "Недопустимая роль: ~s" -#: mod_muc/mod_muc_room.erl:2774 mod_muc/mod_muc_room.erl:2810 +#: mod_muc/mod_muc_room.erl:3026 mod_muc/mod_muc_room.erl:3062 msgid "Owner privileges required" msgstr "Требуются права владельца" -#: mod_muc/mod_muc_room.erl:2941 +#: mod_muc/mod_muc_room.erl:3195 msgid "Configuration of room ~s" msgstr "Конфигурация комнаты ~s" -#: mod_muc/mod_muc_room.erl:2946 +#: mod_muc/mod_muc_room.erl:3200 msgid "Room title" msgstr "Название комнаты" -#: mod_muc/mod_muc_room.erl:2949 mod_muc/mod_muc_room.erl:3388 +#: mod_muc/mod_muc_room.erl:3203 mod_muc/mod_muc_room.erl:3692 msgid "Room description" msgstr "Описание комнаты" -#: mod_muc/mod_muc_room.erl:2956 +#: mod_muc/mod_muc_room.erl:3210 msgid "Make room persistent" msgstr "Сделать комнату постоянной" -#: mod_muc/mod_muc_room.erl:2961 +#: mod_muc/mod_muc_room.erl:3215 msgid "Make room public searchable" msgstr "Сделать комнату видимой всем" -#: mod_muc/mod_muc_room.erl:2964 +#: mod_muc/mod_muc_room.erl:3218 msgid "Make participants list public" msgstr "Сделать список участников видимым всем" -#: mod_muc/mod_muc_room.erl:2967 +#: mod_muc/mod_muc_room.erl:3221 msgid "Make room password protected" msgstr "Сделать комнату защищённой паролем" -#: mod_muc/mod_muc_room.erl:2978 +#: mod_muc/mod_muc_room.erl:3232 msgid "Maximum Number of Occupants" msgstr "Максимальное количество участников" -#: mod_muc/mod_muc_room.erl:2985 +#: mod_muc/mod_muc_room.erl:3239 msgid "No limit" msgstr "Не ограничено" -#: mod_muc/mod_muc_room.erl:2996 +#: mod_muc/mod_muc_room.erl:3250 msgid "Present real Jabber IDs to" msgstr "Сделать реальные Jabber ID участников видимыми" -#: mod_muc/mod_muc_room.erl:3004 +#: mod_muc/mod_muc_room.erl:3258 mod_muc/mod_muc_room.erl:3292 msgid "moderators only" msgstr "только модераторам" -#: mod_muc/mod_muc_room.erl:3006 +#: mod_muc/mod_muc_room.erl:3260 mod_muc/mod_muc_room.erl:3294 msgid "anyone" msgstr "всем участникам" -#: mod_muc/mod_muc_room.erl:3008 +#: mod_muc/mod_muc_room.erl:3262 msgid "Make room members-only" msgstr "Комната только для зарегистрированных участников" -#: mod_muc/mod_muc_room.erl:3011 +#: mod_muc/mod_muc_room.erl:3265 msgid "Make room moderated" msgstr "Сделать комнату модерируемой" -#: mod_muc/mod_muc_room.erl:3014 +#: mod_muc/mod_muc_room.erl:3268 msgid "Default users as participants" msgstr "Сделать пользователей участниками по умолчанию" -#: mod_muc/mod_muc_room.erl:3017 +#: mod_muc/mod_muc_room.erl:3271 msgid "Allow users to change the subject" msgstr "Разрешить пользователям изменять тему" -#: mod_muc/mod_muc_room.erl:3020 +#: mod_muc/mod_muc_room.erl:3274 msgid "Allow users to send private messages" msgstr "Разрешить приватные сообщения" -#: mod_muc/mod_muc_room.erl:3023 +#: mod_muc/mod_muc_room.erl:3279 +msgid "Allow visitors to send private messages to" +msgstr "Разрешить посетителям посылать приватные сообщения" + +#: mod_muc/mod_muc_room.erl:3290 +msgid "nobody" +msgstr "никто" + +#: mod_muc/mod_muc_room.erl:3296 msgid "Allow users to query other users" msgstr "Разрешить iq-запросы к пользователям" -#: mod_muc/mod_muc_room.erl:3026 +#: mod_muc/mod_muc_room.erl:3299 msgid "Allow users to send invites" msgstr "Разрешить пользователям посылать приглашения" -#: mod_muc/mod_muc_room.erl:3029 +#: mod_muc/mod_muc_room.erl:3302 msgid "Allow visitors to send status text in presence updates" msgstr "" "Разрешить посетителям вставлять текcт статуса в сообщения о присутствии" -#: mod_muc/mod_muc_room.erl:3032 +#: mod_muc/mod_muc_room.erl:3305 msgid "Allow visitors to change nickname" msgstr "Разрешить посетителям изменять псевдоним" -#: mod_muc/mod_muc_room.erl:3038 -msgid "Make room captcha protected" +#: mod_muc/mod_muc_room.erl:3308 +msgid "Allow visitors to send voice requests" +msgstr "Разрешить посетителям запрашивать право голоса" + +#: mod_muc/mod_muc_room.erl:3311 +msgid "Minimum interval between voice requests (in seconds)" +msgstr "Минимальный интервал между запросами на право голоса" + +#: mod_muc/mod_muc_room.erl:3317 +msgid "Make room CAPTCHA protected" msgstr "Сделать комнату защищённой капчей" -#: mod_muc/mod_muc_room.erl:3043 +#: mod_muc/mod_muc_room.erl:3322 msgid "Exclude Jabber IDs from CAPTCHA challenge" -msgstr "" +msgstr "Исключить показ капчи для списка Jabber ID" -#: mod_muc/mod_muc_room.erl:3050 +#: mod_muc/mod_muc_room.erl:3329 msgid "Enable logging" msgstr "Включить журналирование" -#: mod_muc/mod_muc_room.erl:3058 +#: mod_muc/mod_muc_room.erl:3337 msgid "You need an x:data capable client to configure room" msgstr "Чтобы сконфигурировать комнату, требуется x:data-совместимый клиент" -#: mod_muc/mod_muc_room.erl:3390 +#: mod_muc/mod_muc_room.erl:3694 msgid "Number of occupants" msgstr "Число присутствующих" -#: mod_muc/mod_muc_room.erl:3446 +#: mod_muc/mod_muc_room.erl:3750 msgid "private, " msgstr "приватная, " -#: mod_muc/mod_muc_room.erl:3529 +#: mod_muc/mod_muc_room.erl:3799 +msgid "Voice request" +msgstr "Запрос на право голоса" + +#: mod_muc/mod_muc_room.erl:3803 +msgid "Either approve or decline the voice request." +msgstr "Подтвердите или отклоните право голоса." + +#: mod_muc/mod_muc_room.erl:3809 +msgid "User JID" +msgstr "JID пользователя" + +#: mod_muc/mod_muc_room.erl:3811 +msgid "Grant voice to this person?" +msgstr "Предоставить голос?" + +#: mod_muc/mod_muc_room.erl:3960 msgid "~s invites you to the room ~s" msgstr "~s приглашает вас в комнату ~s" -#: mod_muc/mod_muc_room.erl:3538 +#: mod_muc/mod_muc_room.erl:3969 msgid "the password is" msgstr "пароль:" @@ -1007,14 +1063,15 @@ msgid "~s's Offline Messages Queue" msgstr "Oчередь офлайновых сообщений ~s" #: mod_offline.erl:563 mod_offline_odbc.erl:411 mod_roster.erl:987 -#: mod_roster_odbc.erl:1092 mod_shared_roster.erl:896 -#: mod_shared_roster.erl:1005 web/ejabberd_web_admin.erl:833 +#: mod_roster_odbc.erl:1104 mod_shared_roster.erl:901 +#: mod_shared_roster.erl:1010 mod_shared_roster_odbc.erl:930 +#: mod_shared_roster_odbc.erl:1039 web/ejabberd_web_admin.erl:833 #: web/ejabberd_web_admin.erl:874 web/ejabberd_web_admin.erl:942 #: web/ejabberd_web_admin.erl:978 web/ejabberd_web_admin.erl:1019 -#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1758 -#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1961 -#: web/ejabberd_web_admin.erl:2030 web/ejabberd_web_admin.erl:2134 -#: web/ejabberd_web_admin.erl:2159 web/ejabberd_web_admin.erl:2247 +#: web/ejabberd_web_admin.erl:1508 web/ejabberd_web_admin.erl:1760 +#: web/ejabberd_web_admin.erl:1931 web/ejabberd_web_admin.erl:1963 +#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2135 +#: web/ejabberd_web_admin.erl:2160 web/ejabberd_web_admin.erl:2248 msgid "Submitted" msgstr "Отправлено" @@ -1034,8 +1091,9 @@ msgstr "Кому" msgid "Packet" msgstr "Пакет" -#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:903 -#: web/ejabberd_web_admin.erl:882 web/ejabberd_web_admin.erl:986 +#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:908 +#: mod_shared_roster_odbc.erl:937 web/ejabberd_web_admin.erl:882 +#: web/ejabberd_web_admin.erl:986 msgid "Delete Selected" msgstr "Удалить выделенные" @@ -1051,103 +1109,103 @@ msgstr "Удалить все офлайновые сообщения" msgid "ejabberd SOCKS5 Bytestreams module" msgstr "ejabberd SOCKS5 Bytestreams модуль" -#: mod_pubsub/mod_pubsub.erl:1119 mod_pubsub/mod_pubsub_odbc.erl:928 +#: mod_pubsub/mod_pubsub.erl:1120 mod_pubsub/mod_pubsub_odbc.erl:929 msgid "Publish-Subscribe" msgstr "Публикация-Подписка" -#: mod_pubsub/mod_pubsub.erl:1213 mod_pubsub/mod_pubsub_odbc.erl:1024 +#: mod_pubsub/mod_pubsub.erl:1214 mod_pubsub/mod_pubsub_odbc.erl:1025 msgid "ejabberd Publish-Subscribe module" msgstr "Модуль ejabberd Публикации-Подписки" -#: mod_pubsub/mod_pubsub.erl:1496 mod_pubsub/mod_pubsub_odbc.erl:1311 +#: mod_pubsub/mod_pubsub.erl:1497 mod_pubsub/mod_pubsub_odbc.erl:1312 msgid "PubSub subscriber request" msgstr "Запрос подписчика PubSub" -#: mod_pubsub/mod_pubsub.erl:1498 mod_pubsub/mod_pubsub_odbc.erl:1313 +#: mod_pubsub/mod_pubsub.erl:1499 mod_pubsub/mod_pubsub_odbc.erl:1314 msgid "Choose whether to approve this entity's subscription." msgstr "Решите: предоставить ли подписку этому объекту." -#: mod_pubsub/mod_pubsub.erl:1504 mod_pubsub/mod_pubsub_odbc.erl:1319 +#: mod_pubsub/mod_pubsub.erl:1505 mod_pubsub/mod_pubsub_odbc.erl:1320 msgid "Node ID" msgstr "ID узла" -#: mod_pubsub/mod_pubsub.erl:1509 mod_pubsub/mod_pubsub_odbc.erl:1324 +#: mod_pubsub/mod_pubsub.erl:1510 mod_pubsub/mod_pubsub_odbc.erl:1325 msgid "Subscriber Address" msgstr "Адрес подписчика" -#: mod_pubsub/mod_pubsub.erl:1515 mod_pubsub/mod_pubsub_odbc.erl:1330 +#: mod_pubsub/mod_pubsub.erl:1516 mod_pubsub/mod_pubsub_odbc.erl:1331 msgid "Allow this Jabber ID to subscribe to this pubsub node?" msgstr "Разрешить этому Jabber ID подписаться на данный узел?" -#: mod_pubsub/mod_pubsub.erl:3416 mod_pubsub/mod_pubsub_odbc.erl:3229 +#: mod_pubsub/mod_pubsub.erl:3474 mod_pubsub/mod_pubsub_odbc.erl:3287 msgid "Deliver payloads with event notifications" msgstr "Доставлять вместе с уведомлениями o публикациях сами публикации" -#: mod_pubsub/mod_pubsub.erl:3417 mod_pubsub/mod_pubsub_odbc.erl:3230 +#: mod_pubsub/mod_pubsub.erl:3475 mod_pubsub/mod_pubsub_odbc.erl:3288 msgid "Deliver event notifications" msgstr "Доставлять уведомления о событиях" -#: mod_pubsub/mod_pubsub.erl:3418 mod_pubsub/mod_pubsub_odbc.erl:3231 +#: mod_pubsub/mod_pubsub.erl:3476 mod_pubsub/mod_pubsub_odbc.erl:3289 msgid "Notify subscribers when the node configuration changes" msgstr "Уведомлять подписчиков об изменении конфигурации сборника" -#: mod_pubsub/mod_pubsub.erl:3419 mod_pubsub/mod_pubsub_odbc.erl:3232 +#: mod_pubsub/mod_pubsub.erl:3477 mod_pubsub/mod_pubsub_odbc.erl:3290 msgid "Notify subscribers when the node is deleted" msgstr "Уведомлять подписчиков об удалении сборника" -#: mod_pubsub/mod_pubsub.erl:3420 mod_pubsub/mod_pubsub_odbc.erl:3233 +#: mod_pubsub/mod_pubsub.erl:3478 mod_pubsub/mod_pubsub_odbc.erl:3291 msgid "Notify subscribers when items are removed from the node" msgstr "Уведомлять подписчиков об удалении публикаций из сборника" -#: mod_pubsub/mod_pubsub.erl:3421 mod_pubsub/mod_pubsub_odbc.erl:3234 +#: mod_pubsub/mod_pubsub.erl:3479 mod_pubsub/mod_pubsub_odbc.erl:3292 msgid "Persist items to storage" msgstr "Сохранять публикации в хранилище" -#: mod_pubsub/mod_pubsub.erl:3422 mod_pubsub/mod_pubsub_odbc.erl:3235 +#: mod_pubsub/mod_pubsub.erl:3480 mod_pubsub/mod_pubsub_odbc.erl:3293 msgid "A friendly name for the node" msgstr "Легко запоминаемое имя для узла" -#: mod_pubsub/mod_pubsub.erl:3423 mod_pubsub/mod_pubsub_odbc.erl:3236 +#: mod_pubsub/mod_pubsub.erl:3481 mod_pubsub/mod_pubsub_odbc.erl:3294 msgid "Max # of items to persist" msgstr "Максимальное число сохраняемых публикаций" -#: mod_pubsub/mod_pubsub.erl:3424 mod_pubsub/mod_pubsub_odbc.erl:3237 +#: mod_pubsub/mod_pubsub.erl:3482 mod_pubsub/mod_pubsub_odbc.erl:3295 msgid "Whether to allow subscriptions" msgstr "Разрешить подписку" -#: mod_pubsub/mod_pubsub.erl:3425 mod_pubsub/mod_pubsub_odbc.erl:3238 +#: mod_pubsub/mod_pubsub.erl:3483 mod_pubsub/mod_pubsub_odbc.erl:3296 msgid "Specify the access model" msgstr "Укажите механизм управления доступом" -#: mod_pubsub/mod_pubsub.erl:3428 mod_pubsub/mod_pubsub_odbc.erl:3241 +#: mod_pubsub/mod_pubsub.erl:3486 mod_pubsub/mod_pubsub_odbc.erl:3299 msgid "Roster groups allowed to subscribe" msgstr "Группы списка контактов, которым разрешена подписка" -#: mod_pubsub/mod_pubsub.erl:3429 mod_pubsub/mod_pubsub_odbc.erl:3242 +#: mod_pubsub/mod_pubsub.erl:3487 mod_pubsub/mod_pubsub_odbc.erl:3300 msgid "Specify the publisher model" msgstr "Условия публикации" -#: mod_pubsub/mod_pubsub.erl:3431 mod_pubsub/mod_pubsub_odbc.erl:3244 +#: mod_pubsub/mod_pubsub.erl:3489 mod_pubsub/mod_pubsub_odbc.erl:3302 msgid "Purge all items when the relevant publisher goes offline" msgstr "Очищать все записи автора публикации когда он отключается" -#: mod_pubsub/mod_pubsub.erl:3432 mod_pubsub/mod_pubsub_odbc.erl:3245 +#: mod_pubsub/mod_pubsub.erl:3490 mod_pubsub/mod_pubsub_odbc.erl:3303 msgid "Specify the event message type" msgstr "Укажите тип сообщения о событии" -#: mod_pubsub/mod_pubsub.erl:3434 mod_pubsub/mod_pubsub_odbc.erl:3247 +#: mod_pubsub/mod_pubsub.erl:3492 mod_pubsub/mod_pubsub_odbc.erl:3305 msgid "Max payload size in bytes" msgstr "Максимальный размер полезной нагрузки в байтах" -#: mod_pubsub/mod_pubsub.erl:3435 mod_pubsub/mod_pubsub_odbc.erl:3248 +#: mod_pubsub/mod_pubsub.erl:3493 mod_pubsub/mod_pubsub_odbc.erl:3306 msgid "When to send the last published item" msgstr "Когда посылать последний опубликованный элемент" -#: mod_pubsub/mod_pubsub.erl:3437 mod_pubsub/mod_pubsub_odbc.erl:3250 +#: mod_pubsub/mod_pubsub.erl:3495 mod_pubsub/mod_pubsub_odbc.erl:3308 msgid "Only deliver notifications to available users" msgstr "Доставлять уведомления только доступным пользователям" -#: mod_pubsub/mod_pubsub.erl:3438 mod_pubsub/mod_pubsub_odbc.erl:3251 +#: mod_pubsub/mod_pubsub.erl:3496 mod_pubsub/mod_pubsub_odbc.erl:3309 msgid "The collections with which a node is affiliated" msgstr "Имя коллекции, в которую входит узел" @@ -1163,15 +1221,11 @@ msgstr "Чтобы зарегистрироваться, требуется x:da msgid "Choose a username and password to register with this server" msgstr "Выберите имя пользователя и пароль для регистрации на этом сервере" -#: mod_register.erl:230 mod_vcard.erl:358 mod_vcard_odbc.erl:336 -#: web/ejabberd_web_admin.erl:1516 web/ejabberd_web_admin.erl:1573 +#: mod_register.erl:230 mod_vcard.erl:364 mod_vcard_odbc.erl:342 +#: web/ejabberd_web_admin.erl:1515 web/ejabberd_web_admin.erl:1572 msgid "User" msgstr "Пользователь" -#: mod_register.erl:251 -msgid "Unable to generate a CAPTCHA" -msgstr "Не получилось создать капчу" - #: mod_register.erl:316 mod_register.erl:361 msgid "The password is too weak" msgstr "Слишком слабый пароль" @@ -1180,120 +1234,123 @@ msgstr "Слишком слабый пароль" msgid "Users are not allowed to register accounts so quickly" msgstr "Пользователи не могут регистрировать учётные записи так быстро" -#: mod_roster.erl:938 mod_roster_odbc.erl:1043 web/ejabberd_web_admin.erl:1699 -#: web/ejabberd_web_admin.erl:1884 web/ejabberd_web_admin.erl:1895 -#: web/ejabberd_web_admin.erl:2218 +#: mod_roster.erl:938 mod_roster_odbc.erl:1055 web/ejabberd_web_admin.erl:1701 +#: web/ejabberd_web_admin.erl:1886 web/ejabberd_web_admin.erl:1897 +#: web/ejabberd_web_admin.erl:2219 msgid "None" msgstr "Нет" -#: mod_roster.erl:945 mod_roster_odbc.erl:1050 +#: mod_roster.erl:945 mod_roster_odbc.erl:1062 msgid "Subscription" msgstr "Подписка" -#: mod_roster.erl:946 mod_roster_odbc.erl:1051 +#: mod_roster.erl:946 mod_roster_odbc.erl:1063 msgid "Pending" msgstr "Ожидание" -#: mod_roster.erl:947 mod_roster_odbc.erl:1052 +#: mod_roster.erl:947 mod_roster_odbc.erl:1064 msgid "Groups" msgstr "Группы" -#: mod_roster.erl:974 mod_roster_odbc.erl:1079 +#: mod_roster.erl:974 mod_roster_odbc.erl:1091 msgid "Validate" msgstr "Утвердить" -#: mod_roster.erl:982 mod_roster_odbc.erl:1087 +#: mod_roster.erl:982 mod_roster_odbc.erl:1099 msgid "Remove" msgstr "Удалить" -#: mod_roster.erl:985 mod_roster_odbc.erl:1090 +#: mod_roster.erl:985 mod_roster_odbc.erl:1102 msgid "Roster of " msgstr "Ростер пользователя " -#: mod_roster.erl:988 mod_roster_odbc.erl:1093 mod_shared_roster.erl:897 -#: mod_shared_roster.erl:1006 web/ejabberd_web_admin.erl:834 +#: mod_roster.erl:988 mod_roster_odbc.erl:1105 mod_shared_roster.erl:902 +#: mod_shared_roster.erl:1011 mod_shared_roster_odbc.erl:931 +#: mod_shared_roster_odbc.erl:1040 web/ejabberd_web_admin.erl:834 #: web/ejabberd_web_admin.erl:875 web/ejabberd_web_admin.erl:943 #: web/ejabberd_web_admin.erl:979 web/ejabberd_web_admin.erl:1020 -#: web/ejabberd_web_admin.erl:1510 web/ejabberd_web_admin.erl:1759 -#: web/ejabberd_web_admin.erl:1930 web/ejabberd_web_admin.erl:2135 -#: web/ejabberd_web_admin.erl:2160 +#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1761 +#: web/ejabberd_web_admin.erl:1932 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2161 msgid "Bad format" msgstr "Неправильный формат" -#: mod_roster.erl:995 mod_roster_odbc.erl:1100 +#: mod_roster.erl:995 mod_roster_odbc.erl:1112 msgid "Add Jabber ID" msgstr "Добавить Jabber ID" -#: mod_roster.erl:1094 mod_roster_odbc.erl:1199 +#: mod_roster.erl:1094 mod_roster_odbc.erl:1211 msgid "Roster" msgstr "Ростер" -#: mod_shared_roster.erl:852 mod_shared_roster.erl:894 -#: mod_shared_roster.erl:1002 +#: mod_shared_roster.erl:857 mod_shared_roster.erl:899 +#: mod_shared_roster.erl:1007 mod_shared_roster_odbc.erl:886 +#: mod_shared_roster_odbc.erl:928 mod_shared_roster_odbc.erl:1036 msgid "Shared Roster Groups" msgstr "Группы общих контактов" -#: mod_shared_roster.erl:890 web/ejabberd_web_admin.erl:1366 -#: web/ejabberd_web_admin.erl:2460 +#: mod_shared_roster.erl:895 mod_shared_roster_odbc.erl:924 +#: web/ejabberd_web_admin.erl:1365 web/ejabberd_web_admin.erl:2461 msgid "Add New" msgstr "Добавить" -#: mod_shared_roster.erl:973 +#: mod_shared_roster.erl:978 mod_shared_roster_odbc.erl:1007 msgid "Name:" msgstr "Название:" -#: mod_shared_roster.erl:978 +#: mod_shared_roster.erl:983 mod_shared_roster_odbc.erl:1012 msgid "Description:" msgstr "Описание:" -#: mod_shared_roster.erl:986 +#: mod_shared_roster.erl:991 mod_shared_roster_odbc.erl:1020 msgid "Members:" msgstr "Члены:" -#: mod_shared_roster.erl:994 +#: mod_shared_roster.erl:999 mod_shared_roster_odbc.erl:1028 msgid "Displayed Groups:" msgstr "Видимые группы:" -#: mod_shared_roster.erl:1003 +#: mod_shared_roster.erl:1008 mod_shared_roster_odbc.erl:1037 msgid "Group " msgstr "Группа " -#: mod_shared_roster.erl:1012 web/ejabberd_web_admin.erl:840 -#: web/ejabberd_web_admin.erl:884 web/ejabberd_web_admin.erl:949 -#: web/ejabberd_web_admin.erl:1026 web/ejabberd_web_admin.erl:2015 +#: mod_shared_roster.erl:1017 mod_shared_roster_odbc.erl:1046 +#: web/ejabberd_web_admin.erl:840 web/ejabberd_web_admin.erl:884 +#: web/ejabberd_web_admin.erl:949 web/ejabberd_web_admin.erl:1026 +#: web/ejabberd_web_admin.erl:2017 msgid "Submit" msgstr "Отправить" -#: mod_vcard.erl:165 mod_vcard_ldap.erl:237 mod_vcard_odbc.erl:129 +#: mod_vcard.erl:165 mod_vcard_ldap.erl:238 mod_vcard_odbc.erl:129 msgid "Erlang Jabber Server" msgstr "Erlang Jabber Server" -#: mod_vcard.erl:358 mod_vcard.erl:472 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:448 +#: mod_vcard.erl:364 mod_vcard.erl:478 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:454 msgid "Birthday" msgstr "День рождения" -#: mod_vcard.erl:358 mod_vcard.erl:474 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:450 +#: mod_vcard.erl:364 mod_vcard.erl:480 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:456 msgid "City" msgstr "Город" -#: mod_vcard.erl:358 mod_vcard.erl:473 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:449 +#: mod_vcard.erl:364 mod_vcard.erl:479 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:455 msgid "Country" msgstr "Страна" -#: mod_vcard.erl:358 mod_vcard.erl:475 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:451 +#: mod_vcard.erl:364 mod_vcard.erl:481 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:457 msgid "Email" msgstr "Электронная почта" -#: mod_vcard.erl:358 mod_vcard.erl:470 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:446 +#: mod_vcard.erl:364 mod_vcard.erl:476 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:452 msgid "Family Name" msgstr "Фамилия" -#: mod_vcard.erl:358 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_odbc.erl:342 msgid "" "Fill in the form to search for any matching Jabber User (Add * to the end of " "field to match substring)" @@ -1301,52 +1358,52 @@ msgstr "" "Заполните форму для поиска пользователя Jabber (Если добавить * в конец " "поля, то происходит поиск подстроки)" -#: mod_vcard.erl:358 mod_vcard.erl:467 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:443 +#: mod_vcard.erl:364 mod_vcard.erl:473 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:449 msgid "Full Name" msgstr "Полное имя" -#: mod_vcard.erl:358 mod_vcard.erl:469 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:445 +#: mod_vcard.erl:364 mod_vcard.erl:475 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:451 msgid "Middle Name" msgstr "Отчество" -#: mod_vcard.erl:358 mod_vcard.erl:468 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:444 web/ejabberd_web_admin.erl:2004 +#: mod_vcard.erl:364 mod_vcard.erl:474 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:450 web/ejabberd_web_admin.erl:2006 msgid "Name" msgstr "Название" -#: mod_vcard.erl:358 mod_vcard.erl:476 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:452 +#: mod_vcard.erl:364 mod_vcard.erl:482 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:458 msgid "Organization Name" msgstr "Название организации" -#: mod_vcard.erl:358 mod_vcard.erl:477 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:453 +#: mod_vcard.erl:364 mod_vcard.erl:483 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:459 msgid "Organization Unit" msgstr "Отдел организации" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "Search users in " msgstr "Поиск пользователей в " -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "You need an x:data capable client to search" msgstr "Чтобы воспользоваться поиском, требуется x:data-совместимый клиент" -#: mod_vcard.erl:383 mod_vcard_ldap.erl:483 mod_vcard_odbc.erl:361 +#: mod_vcard.erl:389 mod_vcard_ldap.erl:487 mod_vcard_odbc.erl:367 msgid "vCard User Search" msgstr "Поиск пользователей по vCard" -#: mod_vcard.erl:439 mod_vcard_ldap.erl:537 mod_vcard_odbc.erl:415 +#: mod_vcard.erl:445 mod_vcard_ldap.erl:541 mod_vcard_odbc.erl:421 msgid "ejabberd vCard module" msgstr "ejabberd vCard модуль" -#: mod_vcard.erl:463 mod_vcard_ldap.erl:547 mod_vcard_odbc.erl:439 +#: mod_vcard.erl:469 mod_vcard_ldap.erl:551 mod_vcard_odbc.erl:445 msgid "Search Results for " msgstr "Результаты поиска в " -#: mod_vcard_ldap.erl:458 +#: mod_vcard_ldap.erl:462 msgid "Fill in fields to search for any matching Jabber User" msgstr "Заполните форму для поиска пользователя Jabber" @@ -1407,7 +1464,7 @@ msgstr "Показать обычную таблицу" msgid "Show Integral Table" msgstr "Показать интегральную таблицу" -#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1937 +#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1939 msgid "Statistics" msgstr "Статистика" @@ -1419,116 +1476,116 @@ msgstr "Не Найдено" msgid "Node not found" msgstr "Узел не найден" -#: web/ejabberd_web_admin.erl:1461 +#: web/ejabberd_web_admin.erl:1460 msgid "Host" msgstr "Хост" -#: web/ejabberd_web_admin.erl:1462 +#: web/ejabberd_web_admin.erl:1461 msgid "Registered Users" msgstr "Зарегистрированные пользователи" -#: web/ejabberd_web_admin.erl:1574 +#: web/ejabberd_web_admin.erl:1573 msgid "Offline Messages" msgstr "Офлайновые сообщения" -#: web/ejabberd_web_admin.erl:1575 web/ejabberd_web_admin.erl:1765 +#: web/ejabberd_web_admin.erl:1574 web/ejabberd_web_admin.erl:1767 msgid "Last Activity" msgstr "Последнее подключение" -#: web/ejabberd_web_admin.erl:1657 web/ejabberd_web_admin.erl:1673 +#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 msgid "Registered Users:" msgstr "Зарегистрированные пользователи:" -#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 -#: web/ejabberd_web_admin.erl:2191 +#: web/ejabberd_web_admin.erl:1661 web/ejabberd_web_admin.erl:1677 +#: web/ejabberd_web_admin.erl:2192 msgid "Online Users:" msgstr "Подключённые пользователи:" -#: web/ejabberd_web_admin.erl:1661 +#: web/ejabberd_web_admin.erl:1663 msgid "Outgoing s2s Connections:" msgstr "Исходящие s2s-серверы:" -#: web/ejabberd_web_admin.erl:1663 +#: web/ejabberd_web_admin.erl:1665 msgid "Outgoing s2s Servers:" msgstr "Исходящие s2s-серверы:" -#: web/ejabberd_web_admin.erl:1732 web/mod_register_web.erl:175 +#: web/ejabberd_web_admin.erl:1734 web/mod_register_web.erl:175 #: web/mod_register_web.erl:372 web/mod_register_web.erl:381 #: web/mod_register_web.erl:411 msgid "Change Password" msgstr "Сменить пароль" -#: web/ejabberd_web_admin.erl:1756 +#: web/ejabberd_web_admin.erl:1758 msgid "User " msgstr "Пользователь " -#: web/ejabberd_web_admin.erl:1763 +#: web/ejabberd_web_admin.erl:1765 msgid "Connected Resources:" msgstr "Подключённые ресурсы:" -#: web/ejabberd_web_admin.erl:1764 web/mod_register_web.erl:227 +#: web/ejabberd_web_admin.erl:1766 web/mod_register_web.erl:227 #: web/mod_register_web.erl:519 msgid "Password:" msgstr "Пароль:" -#: web/ejabberd_web_admin.erl:1826 +#: web/ejabberd_web_admin.erl:1828 msgid "No Data" msgstr "Нет данных" -#: web/ejabberd_web_admin.erl:1904 +#: web/ejabberd_web_admin.erl:1906 msgid "Nodes" msgstr "Узлы" -#: web/ejabberd_web_admin.erl:1927 web/ejabberd_web_admin.erl:1949 +#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1951 msgid "Node " msgstr "Узел " -#: web/ejabberd_web_admin.erl:1936 +#: web/ejabberd_web_admin.erl:1938 msgid "Listened Ports" msgstr "Прослушиваемые порты" -#: web/ejabberd_web_admin.erl:1938 web/ejabberd_web_admin.erl:2259 -#: web/ejabberd_web_admin.erl:2447 +#: web/ejabberd_web_admin.erl:1940 web/ejabberd_web_admin.erl:2260 +#: web/ejabberd_web_admin.erl:2448 msgid "Update" msgstr "Обновить" -#: web/ejabberd_web_admin.erl:1941 web/ejabberd_web_admin.erl:2568 +#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2569 msgid "Restart" msgstr "Перезапустить" -#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2570 +#: web/ejabberd_web_admin.erl:1945 web/ejabberd_web_admin.erl:2571 msgid "Stop" msgstr "Остановить" -#: web/ejabberd_web_admin.erl:1957 +#: web/ejabberd_web_admin.erl:1959 msgid "RPC Call Error" msgstr "Ошибка вызова RPC" -#: web/ejabberd_web_admin.erl:1998 +#: web/ejabberd_web_admin.erl:2000 msgid "Database Tables at " msgstr "Таблицы базы данных на " -#: web/ejabberd_web_admin.erl:2005 +#: web/ejabberd_web_admin.erl:2007 msgid "Storage Type" msgstr "Тип таблицы" -#: web/ejabberd_web_admin.erl:2006 +#: web/ejabberd_web_admin.erl:2008 msgid "Elements" msgstr "Элементы" -#: web/ejabberd_web_admin.erl:2007 +#: web/ejabberd_web_admin.erl:2009 msgid "Memory" msgstr "Память" -#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2032 web/ejabberd_web_admin.erl:2137 msgid "Error" msgstr "Ошибка" -#: web/ejabberd_web_admin.erl:2033 +#: web/ejabberd_web_admin.erl:2034 msgid "Backup of " msgstr "Резервное копирование " -#: web/ejabberd_web_admin.erl:2035 +#: web/ejabberd_web_admin.erl:2036 msgid "" "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 " @@ -1539,144 +1596,144 @@ msgstr "" "(например с помощью модуля ODBC), то его резервное копирование следует " "осуществлять отдельно." -#: web/ejabberd_web_admin.erl:2040 +#: web/ejabberd_web_admin.erl:2041 msgid "Store binary backup:" msgstr "Сохранить бинарную резервную копию:" -#: web/ejabberd_web_admin.erl:2044 web/ejabberd_web_admin.erl:2051 -#: web/ejabberd_web_admin.erl:2059 web/ejabberd_web_admin.erl:2066 -#: web/ejabberd_web_admin.erl:2073 web/ejabberd_web_admin.erl:2080 -#: web/ejabberd_web_admin.erl:2087 web/ejabberd_web_admin.erl:2095 -#: web/ejabberd_web_admin.erl:2102 web/ejabberd_web_admin.erl:2109 +#: web/ejabberd_web_admin.erl:2045 web/ejabberd_web_admin.erl:2052 +#: web/ejabberd_web_admin.erl:2060 web/ejabberd_web_admin.erl:2067 +#: web/ejabberd_web_admin.erl:2074 web/ejabberd_web_admin.erl:2081 +#: web/ejabberd_web_admin.erl:2088 web/ejabberd_web_admin.erl:2096 +#: web/ejabberd_web_admin.erl:2103 web/ejabberd_web_admin.erl:2110 msgid "OK" msgstr "Продолжить" -#: web/ejabberd_web_admin.erl:2047 +#: web/ejabberd_web_admin.erl:2048 msgid "Restore binary backup immediately:" msgstr "Восстановить из бинарной резервной копии немедленно:" -#: web/ejabberd_web_admin.erl:2055 +#: web/ejabberd_web_admin.erl:2056 msgid "" "Restore binary backup after next ejabberd restart (requires less memory):" msgstr "" "Восстановить из бинарной резервной копии при следующем запуске (требует " "меньше памяти):" -#: web/ejabberd_web_admin.erl:2062 +#: web/ejabberd_web_admin.erl:2063 msgid "Store plain text backup:" msgstr "Сохранить текстовую резервную копию:" -#: web/ejabberd_web_admin.erl:2069 +#: web/ejabberd_web_admin.erl:2070 msgid "Restore plain text backup immediately:" msgstr "Восстановить из текстовой резервной копии немедленно:" -#: web/ejabberd_web_admin.erl:2076 +#: web/ejabberd_web_admin.erl:2077 msgid "Import users data from a PIEFXIS file (XEP-0227):" msgstr "Импорт пользовательских данных из файла формата PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2083 +#: web/ejabberd_web_admin.erl:2084 msgid "Export data of all users in the server to PIEFXIS files (XEP-0227):" msgstr "" "Экспорт данных всех пользователей сервера в файлы формата PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2090 +#: web/ejabberd_web_admin.erl:2091 msgid "Export data of users in a host to PIEFXIS files (XEP-0227):" msgstr "" "Экспорт пользовательских данных домена в файлы формата PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2098 +#: web/ejabberd_web_admin.erl:2099 msgid "Import user data from jabberd14 spool file:" msgstr "Импорт пользовательских данных из буферного файла jabberd14:" -#: web/ejabberd_web_admin.erl:2105 +#: web/ejabberd_web_admin.erl:2106 msgid "Import users data from jabberd14 spool directory:" msgstr "Импорт пользовательских данных из буферной директории jabberd14:" -#: web/ejabberd_web_admin.erl:2131 +#: web/ejabberd_web_admin.erl:2132 msgid "Listened Ports at " msgstr "Прослушиваемые порты на " -#: web/ejabberd_web_admin.erl:2156 +#: web/ejabberd_web_admin.erl:2157 msgid "Modules at " msgstr "Модули на " -#: web/ejabberd_web_admin.erl:2182 +#: web/ejabberd_web_admin.erl:2183 msgid "Statistics of ~p" msgstr "статистика узла ~p" -#: web/ejabberd_web_admin.erl:2185 +#: web/ejabberd_web_admin.erl:2186 msgid "Uptime:" msgstr "Время работы:" -#: web/ejabberd_web_admin.erl:2188 +#: web/ejabberd_web_admin.erl:2189 msgid "CPU Time:" msgstr "Процессорное время:" -#: web/ejabberd_web_admin.erl:2194 +#: web/ejabberd_web_admin.erl:2195 msgid "Transactions Committed:" msgstr "Транзакции завершенные:" -#: web/ejabberd_web_admin.erl:2197 +#: web/ejabberd_web_admin.erl:2198 msgid "Transactions Aborted:" msgstr "Транзакции отмененные:" -#: web/ejabberd_web_admin.erl:2200 +#: web/ejabberd_web_admin.erl:2201 msgid "Transactions Restarted:" msgstr "Транзакции перезапущенные:" -#: web/ejabberd_web_admin.erl:2203 +#: web/ejabberd_web_admin.erl:2204 msgid "Transactions Logged:" msgstr "Транзакции запротоколированные:" -#: web/ejabberd_web_admin.erl:2245 +#: web/ejabberd_web_admin.erl:2246 msgid "Update " msgstr "Обновление " -#: web/ejabberd_web_admin.erl:2253 +#: web/ejabberd_web_admin.erl:2254 msgid "Update plan" msgstr "План обновления" -#: web/ejabberd_web_admin.erl:2254 +#: web/ejabberd_web_admin.erl:2255 msgid "Modified modules" msgstr "Изменённые модули" -#: web/ejabberd_web_admin.erl:2255 +#: web/ejabberd_web_admin.erl:2256 msgid "Update script" msgstr "Сценарий обновления" -#: web/ejabberd_web_admin.erl:2256 +#: web/ejabberd_web_admin.erl:2257 msgid "Low level update script" msgstr "Низкоуровневый сценарий обновления" -#: web/ejabberd_web_admin.erl:2257 +#: web/ejabberd_web_admin.erl:2258 msgid "Script check" msgstr "Проверка сценария" -#: web/ejabberd_web_admin.erl:2425 +#: web/ejabberd_web_admin.erl:2426 msgid "Port" msgstr "Порт" -#: web/ejabberd_web_admin.erl:2426 +#: web/ejabberd_web_admin.erl:2427 msgid "IP" msgstr "IP" -#: web/ejabberd_web_admin.erl:2427 +#: web/ejabberd_web_admin.erl:2428 msgid "Protocol" msgstr "Протокол" -#: web/ejabberd_web_admin.erl:2428 web/ejabberd_web_admin.erl:2555 +#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 msgid "Module" msgstr "Модуль" -#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 +#: web/ejabberd_web_admin.erl:2430 web/ejabberd_web_admin.erl:2557 msgid "Options" msgstr "Параметры" -#: web/ejabberd_web_admin.erl:2449 +#: web/ejabberd_web_admin.erl:2450 msgid "Delete" msgstr "Удалить" -#: web/ejabberd_web_admin.erl:2578 +#: web/ejabberd_web_admin.erl:2579 msgid "Start" msgstr "Запустить" diff --git a/src/msgs/sk.msg b/src/msgs/sk.msg index 3fd23a6df..d707000d7 100644 --- a/src/msgs/sk.msg +++ b/src/msgs/sk.msg @@ -163,7 +163,7 @@ {"List of modules to start","Zoznam modulov, ktoré majú byť spustené"}. {"Low level update script","Nízkoúrovňový aktualizačný skript"}. {"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 moderated","Nastaviť miestnosť ako moderovanú"}. {"Make room password protected","Chrániť miestnosť heslom"}. @@ -325,7 +325,7 @@ {"Sunday","Nedeľa"}. {"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"}. -{"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 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"}. @@ -343,7 +343,6 @@ {"Transactions Logged:","Transakcie zaznamenaná"}. {"Transactions Restarted:","Transakcie reštartovaná"}. {"Tuesday","Utorok"}. -{"Unable to generate a captcha","Nepodarilo sa vygenerovat captcha"}. {"Unauthorized","Neautorizovaný"}. {"Update ","Aktualizovať "}. {"Update","Aktualizovať"}. diff --git a/src/msgs/sk.po b/src/msgs/sk.po index 781f13480..5dcf817c4 100644 --- a/src/msgs/sk.po +++ b/src/msgs/sk.po @@ -17,11 +17,11 @@ msgstr "Použitie STARTTLS je vyžadované" msgid "No resource provided" msgstr "Nebol poskytnutý žiadny zdroj" -#: ejabberd_c2s.erl:1149 +#: ejabberd_c2s.erl:1197 msgid "Replaced by new connection" msgstr "Nahradené novým spojením" -#: ejabberd_c2s.erl:1837 +#: ejabberd_c2s.erl:1885 msgid "Your active privacy list has denied the routing of this stanza." msgstr "" @@ -42,8 +42,8 @@ msgid "CAPTCHA web page" msgstr "" #: ejabberd_captcha.erl:307 -msgid "The captcha is valid." -msgstr "Platná captcha." +msgid "The CAPTCHA is valid." +msgstr "Platná CAPTCHA." #: mod_adhoc.erl:95 mod_adhoc.erl:125 mod_adhoc.erl:143 mod_adhoc.erl:161 msgid "Commands" @@ -57,64 +57,67 @@ msgstr "Ping" msgid "Pong" msgstr "Pong" -#: mod_announce.erl:506 +#: mod_announce.erl:507 mod_announce_odbc.erl:499 msgid "Really delete message of the day?" msgstr "Skutočne zmazať správu dňa?" -#: mod_announce.erl:514 mod_configure.erl:1083 mod_configure.erl:1128 +#: mod_announce.erl:515 mod_announce_odbc.erl:507 mod_configure.erl:1083 +#: mod_configure.erl:1128 msgid "Subject" msgstr "Predmet" -#: mod_announce.erl:519 mod_configure.erl:1088 mod_configure.erl:1133 +#: mod_announce.erl:520 mod_announce_odbc.erl:512 mod_configure.erl:1088 +#: mod_configure.erl:1133 msgid "Message body" msgstr "Telo správy" -#: mod_announce.erl:599 +#: mod_announce.erl:600 mod_announce_odbc.erl:592 msgid "No body provided for announce message" msgstr "Správa neobsahuje text" -#: mod_announce.erl:634 +#: mod_announce.erl:635 mod_announce_odbc.erl:627 msgid "Announcements" msgstr "Oznámenia" -#: mod_announce.erl:636 +#: mod_announce.erl:637 mod_announce_odbc.erl:629 msgid "Send announcement to all users" msgstr "Odoslať oznam všetkým používateľom" -#: mod_announce.erl:638 +#: mod_announce.erl:639 mod_announce_odbc.erl:631 msgid "Send announcement to all users on all hosts" msgstr "Poslať oznámenie všetkým užívateľom na všetkých serveroch" -#: mod_announce.erl:640 +#: mod_announce.erl:641 mod_announce_odbc.erl:633 msgid "Send announcement to all online users" msgstr "Odoslať zoznam všetkým online používateľom" -#: mod_announce.erl:642 mod_configure.erl:1078 mod_configure.erl:1123 +#: mod_announce.erl:643 mod_announce_odbc.erl:635 mod_configure.erl:1078 +#: mod_configure.erl:1123 msgid "Send announcement to all online users on all hosts" msgstr "Odoslať oznam všetkým online používateľom na všetkých serveroch" -#: mod_announce.erl:644 +#: mod_announce.erl:645 mod_announce_odbc.erl:637 msgid "Set message of the day and send to online users" msgstr "Nastaviť správu dňa a odoslať ju online používateľom" -#: mod_announce.erl:646 +#: mod_announce.erl:647 mod_announce_odbc.erl:639 msgid "Set message of the day on all hosts and send to online users" msgstr "" "Nastaviť správu dňa na všetkých serveroch a poslať ju online užívateľom" -#: mod_announce.erl:648 +#: mod_announce.erl:649 mod_announce_odbc.erl:641 msgid "Update message of the day (don't send)" msgstr "Aktualizovať správu dňa (neodosielať)" -#: mod_announce.erl:650 +#: mod_announce.erl:651 mod_announce_odbc.erl:643 msgid "Update message of the day on all hosts (don't send)" msgstr "Upraviť správu dňa na všetkých serveroch" -#: mod_announce.erl:652 +#: mod_announce.erl:653 mod_announce_odbc.erl:645 msgid "Delete message of the day" msgstr "Zmazať správu dňa" -#: mod_announce.erl:654 +#: mod_announce.erl:655 mod_announce_odbc.erl:647 msgid "Delete message of the day on all hosts" msgstr "Zmazať správu dňa na všetkých serveroch" @@ -123,7 +126,7 @@ msgstr "Zmazať správu dňa na všetkých serveroch" msgid "Configuration" msgstr "Konfigurácia" -#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1934 +#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1936 msgid "Database" msgstr "Databáza" @@ -135,7 +138,7 @@ msgstr "Spustiť moduly" msgid "Stop Modules" msgstr "Zastaviť moduly" -#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1935 +#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1937 msgid "Backup" msgstr "Zálohovať" @@ -164,7 +167,7 @@ msgid "Shut Down Service" msgstr "Vypnúť službu" #: mod_configure.erl:145 mod_configure.erl:518 mod_configure.erl:1197 -#: web/ejabberd_web_admin.erl:1528 +#: web/ejabberd_web_admin.erl:1527 msgid "Add User" msgstr "Pridať používateľa" @@ -216,7 +219,7 @@ msgid "User Management" msgstr "Správa užívateľov" #: mod_configure.erl:500 web/ejabberd_web_admin.erl:1058 -#: web/ejabberd_web_admin.erl:1463 +#: web/ejabberd_web_admin.erl:1462 msgid "Online Users" msgstr "Online užívatelia" @@ -228,15 +231,15 @@ msgstr "Všetci užívatelia" msgid "Outgoing s2s Connections" msgstr "Odchádzajúce s2s spojenia" -#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1905 +#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1907 msgid "Running Nodes" msgstr "Bežiace uzly" -#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1907 +#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1909 msgid "Stopped Nodes" msgstr "Zastavené uzly" -#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1951 +#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1953 msgid "Modules" msgstr "Moduly" @@ -367,15 +370,15 @@ msgstr "Prístupové pravidlá" #: mod_configure.erl:1200 mod_configure.erl:1222 mod_configure.erl:1234 #: mod_configure.erl:1246 mod_configure.erl:1258 mod_configure.erl:1275 -#: mod_configure.erl:1287 mod_configure.erl:1652 mod_configure.erl:1702 -#: mod_configure.erl:1723 mod_roster.erl:943 mod_roster_odbc.erl:1048 -#: mod_vcard.erl:466 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:442 +#: mod_configure.erl:1287 mod_configure.erl:1650 mod_configure.erl:1700 +#: mod_configure.erl:1721 mod_roster.erl:943 mod_roster_odbc.erl:1060 +#: mod_vcard.erl:472 mod_vcard_ldap.erl:554 mod_vcard_odbc.erl:448 msgid "Jabber ID" msgstr "Jabber ID" -#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1653 -#: mod_configure.erl:1865 mod_muc/mod_muc_room.erl:2970 mod_register.erl:235 -#: web/ejabberd_web_admin.erl:1521 +#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1651 +#: mod_configure.erl:1863 mod_muc/mod_muc_room.erl:3224 mod_register.erl:235 +#: web/ejabberd_web_admin.erl:1520 msgid "Password" msgstr "Heslo" @@ -391,69 +394,70 @@ msgstr "Počet registrovaných užívateľov" msgid "Number of online users" msgstr "Počet online užívateľov" -#: mod_configure.erl:1684 web/ejabberd_web_admin.erl:1589 -#: web/ejabberd_web_admin.erl:1741 +#: mod_configure.erl:1682 web/ejabberd_web_admin.erl:1588 +#: web/ejabberd_web_admin.erl:1743 msgid "Never" msgstr "Nikdy" -#: mod_configure.erl:1698 web/ejabberd_web_admin.erl:1602 -#: web/ejabberd_web_admin.erl:1754 +#: mod_configure.erl:1696 web/ejabberd_web_admin.erl:1601 +#: web/ejabberd_web_admin.erl:1756 msgid "Online" msgstr "Online" -#: mod_configure.erl:1703 +#: mod_configure.erl:1701 msgid "Last login" msgstr "Posledné prihlásenie" -#: mod_configure.erl:1724 +#: mod_configure.erl:1722 msgid "Roster size" msgstr "Počet kontaktov v zozname" -#: mod_configure.erl:1725 +#: mod_configure.erl:1723 msgid "IP addresses" msgstr "IP adresa" -#: mod_configure.erl:1726 +#: mod_configure.erl:1724 msgid "Resources" msgstr "Zdroje" -#: mod_configure.erl:1852 +#: mod_configure.erl:1850 msgid "Administration of " msgstr "Administrácia " -#: mod_configure.erl:1855 +#: mod_configure.erl:1853 msgid "Action on user" msgstr "Operácia aplikovaná na užívateľa" -#: mod_configure.erl:1859 +#: mod_configure.erl:1857 msgid "Edit Properties" msgstr "Editovať vlastnosti" -#: mod_configure.erl:1862 web/ejabberd_web_admin.erl:1767 +#: mod_configure.erl:1860 web/ejabberd_web_admin.erl:1769 msgid "Remove User" msgstr "Odstrániť užívateľa" -#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:336 +#: mod_irc/mod_irc.erl:201 mod_irc/mod_irc_odbc.erl:196 +#: mod_muc/mod_muc.erl:336 mod_muc/mod_muc_odbc.erl:342 msgid "Access denied by service policy" msgstr "Prístup bol zamietnutý nastavením služby" -#: mod_irc/mod_irc.erl:400 +#: mod_irc/mod_irc.erl:401 mod_irc/mod_irc_odbc.erl:398 msgid "IRC Transport" msgstr "IRC Transport" -#: mod_irc/mod_irc.erl:427 +#: mod_irc/mod_irc.erl:428 mod_irc/mod_irc_odbc.erl:425 msgid "ejabberd IRC module" msgstr "ejabberd IRC modul" -#: mod_irc/mod_irc.erl:558 +#: mod_irc/mod_irc.erl:559 mod_irc/mod_irc_odbc.erl:568 msgid "You need an x:data capable client to configure mod_irc settings" msgstr "Pre konfiguráciu mod_irc potrebujete klienta podporujúceho x:data" -#: mod_irc/mod_irc.erl:565 +#: mod_irc/mod_irc.erl:566 mod_irc/mod_irc_odbc.erl:575 msgid "Registration in mod_irc for " msgstr "Registrácia do mod_irc na " -#: mod_irc/mod_irc.erl:570 +#: mod_irc/mod_irc.erl:571 mod_irc/mod_irc_odbc.erl:580 msgid "" "Enter username, encodings, ports and passwords you wish to use for " "connecting to IRC servers" @@ -461,11 +465,11 @@ msgstr "" "Vložte meno používateľa, kódovanie, porty a heslo ktoré chcete používať pri " "pripojení na IRC server" -#: mod_irc/mod_irc.erl:575 +#: mod_irc/mod_irc.erl:576 mod_irc/mod_irc_odbc.erl:585 msgid "IRC Username" msgstr "IRC prezývka" -#: mod_irc/mod_irc.erl:585 +#: mod_irc/mod_irc.erl:586 mod_irc/mod_irc_odbc.erl:595 msgid "" "If you want to specify different ports, passwords, encodings for IRC " "servers, fill this list with values in format '{\"irc server\", \"encoding" @@ -477,7 +481,7 @@ msgstr "" "\"}'. Predvolenéi hodnoty pre túto službu sú: kódovanie \"~s\", port ~p a " "žiadne heslo." -#: mod_irc/mod_irc.erl:597 +#: mod_irc/mod_irc.erl:598 mod_irc/mod_irc_odbc.erl:607 msgid "" "Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." @@ -485,35 +489,36 @@ msgstr "" "Príklad: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." -#: mod_irc/mod_irc.erl:602 +#: mod_irc/mod_irc.erl:603 mod_irc/mod_irc_odbc.erl:612 msgid "Connections parameters" msgstr "Parametre spojenia" -#: mod_irc/mod_irc.erl:727 +#: mod_irc/mod_irc.erl:728 mod_irc/mod_irc_odbc.erl:757 msgid "Join IRC channel" msgstr "Pripojit IRC kanál" -#: mod_irc/mod_irc.erl:731 +#: mod_irc/mod_irc.erl:732 mod_irc/mod_irc_odbc.erl:761 msgid "IRC channel (don't put the first #)" msgstr "IRC kanál (bez počiatočnej #)" -#: mod_irc/mod_irc.erl:736 +#: mod_irc/mod_irc.erl:737 mod_irc/mod_irc_odbc.erl:766 msgid "IRC server" msgstr "IRC server" -#: mod_irc/mod_irc.erl:769 mod_irc/mod_irc.erl:773 +#: mod_irc/mod_irc.erl:770 mod_irc/mod_irc.erl:774 +#: mod_irc/mod_irc_odbc.erl:799 mod_irc/mod_irc_odbc.erl:803 msgid "Join the IRC channel here." msgstr "Propojiť IRC kanál sem." -#: mod_irc/mod_irc.erl:777 +#: mod_irc/mod_irc.erl:778 mod_irc/mod_irc_odbc.erl:807 msgid "Join the IRC channel in this Jabber ID: ~s" msgstr "Pripojit IRC kanál k tomuto Jabber ID: ~s" -#: mod_irc/mod_irc.erl:862 +#: mod_irc/mod_irc.erl:863 mod_irc/mod_irc_odbc.erl:904 msgid "IRC settings" msgstr "Nastavania IRC" -#: mod_irc/mod_irc.erl:867 +#: mod_irc/mod_irc.erl:868 mod_irc/mod_irc_odbc.erl:909 msgid "" "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 " @@ -523,71 +528,72 @@ msgstr "" "IRC servery. Kliknutím na tlačítko 'Ďalej' môžete zadať niektoré ďalšie " "hodnoty. Pomocou 'Ukončiť ' uložíte nastavenia." -#: mod_irc/mod_irc.erl:873 +#: mod_irc/mod_irc.erl:874 mod_irc/mod_irc_odbc.erl:915 msgid "IRC username" msgstr "IRC prezývka" -#: mod_irc/mod_irc.erl:922 +#: mod_irc/mod_irc.erl:923 mod_irc/mod_irc_odbc.erl:964 msgid "Password ~b" msgstr "Heslo ~b" -#: mod_irc/mod_irc.erl:927 +#: mod_irc/mod_irc.erl:928 mod_irc/mod_irc_odbc.erl:969 msgid "Port ~b" msgstr "Port ~b" -#: mod_irc/mod_irc.erl:932 +#: mod_irc/mod_irc.erl:933 mod_irc/mod_irc_odbc.erl:974 msgid "Encoding for server ~b" msgstr "Kódovanie pre server ~b" -#: mod_irc/mod_irc.erl:941 +#: mod_irc/mod_irc.erl:942 mod_irc/mod_irc_odbc.erl:983 msgid "Server ~b" msgstr "Server ~b" -#: mod_muc/mod_muc.erl:449 +#: mod_muc/mod_muc.erl:449 mod_muc/mod_muc_odbc.erl:456 msgid "Only service administrators are allowed to send service messages" msgstr "Iba správcovia služby majú povolené odosielanie servisných správ" -#: mod_muc/mod_muc.erl:493 +#: mod_muc/mod_muc.erl:493 mod_muc/mod_muc_odbc.erl:500 msgid "Room creation is denied by service policy" msgstr "Vytváranie miestnosti nie je povolené" -#: mod_muc/mod_muc.erl:500 +#: mod_muc/mod_muc.erl:500 mod_muc/mod_muc_odbc.erl:507 msgid "Conference room does not exist" msgstr "Diskusná miestnosť neexistuje" -#: mod_muc/mod_muc.erl:581 +#: mod_muc/mod_muc.erl:582 mod_muc/mod_muc_odbc.erl:595 msgid "Chatrooms" msgstr "Diskusné miestnosti" -#: mod_muc/mod_muc.erl:711 +#: mod_muc/mod_muc.erl:712 mod_muc/mod_muc_odbc.erl:729 #, fuzzy msgid "You need a client that supports x:data to register the nickname" msgstr "Na registráciu prezývky potrebujete klienta podporujúceho z x:data" -#: mod_muc/mod_muc.erl:717 +#: mod_muc/mod_muc.erl:718 mod_muc/mod_muc_odbc.erl:735 msgid "Nickname Registration at " msgstr "Registrácia prezývky na " -#: mod_muc/mod_muc.erl:721 +#: mod_muc/mod_muc.erl:722 mod_muc/mod_muc_odbc.erl:739 msgid "Enter nickname you want to register" msgstr "Zadajte prezývku, ktorú chcete registrovať" -#: mod_muc/mod_muc.erl:722 mod_roster.erl:944 mod_roster_odbc.erl:1049 -#: mod_vcard.erl:358 mod_vcard.erl:471 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:447 +#: mod_muc/mod_muc.erl:723 mod_muc/mod_muc_odbc.erl:740 +#: mod_muc/mod_muc_room.erl:3810 mod_roster.erl:944 mod_roster_odbc.erl:1061 +#: mod_vcard.erl:364 mod_vcard.erl:477 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:453 msgid "Nickname" msgstr "Prezývka" -#: mod_muc/mod_muc.erl:761 mod_muc/mod_muc_room.erl:933 -#: mod_muc/mod_muc_room.erl:1577 +#: mod_muc/mod_muc.erl:762 mod_muc/mod_muc_odbc.erl:784 +#: mod_muc/mod_muc_room.erl:1064 mod_muc/mod_muc_room.erl:1787 msgid "That nickname is registered by another person" msgstr "Prezývka je už zaregistrovaná inou osobou" -#: mod_muc/mod_muc.erl:787 +#: mod_muc/mod_muc.erl:788 mod_muc/mod_muc_odbc.erl:811 msgid "You must fill in field \"Nickname\" in the form" msgstr "Musíte vyplniť políčko \"Prezývka\" vo formulári" -#: mod_muc/mod_muc.erl:807 +#: mod_muc/mod_muc.erl:808 mod_muc/mod_muc_odbc.erl:831 msgid "ejabberd MUC module" msgstr "ejabberd MUC modul" @@ -627,8 +633,8 @@ msgstr "bol vyhodený(á) kvôli reštartu systému" msgid "is now known as" msgstr "sa premenoval(a) na" -#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:689 -#: mod_muc/mod_muc_room.erl:2138 +#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:688 +#: mod_muc/mod_muc_room.erl:2393 msgid " has set the subject to: " msgstr "zmenil(a) tému na: " @@ -724,32 +730,48 @@ msgstr "November" msgid "December" msgstr "December" -#: mod_muc/mod_muc_log.erl:751 +#: mod_muc/mod_muc_log.erl:750 msgid "Room Configuration" msgstr "Nastavenia miestnosti" -#: mod_muc/mod_muc_log.erl:760 +#: mod_muc/mod_muc_log.erl:759 msgid "Room Occupants" msgstr "Ľudí v miestnosti" -#: mod_muc/mod_muc_room.erl:170 +#: mod_muc/mod_muc_room.erl:174 msgid "Traffic rate limit is exceeded" msgstr "Bol prekročený prenosový limit" -#: mod_muc/mod_muc_room.erl:242 +#: mod_muc/mod_muc_room.erl:246 msgid "" "This participant is kicked from the room because he sent an error message" msgstr "Účastník bol vyhodený z miestnosti, pretože poslal chybovú správu" -#: mod_muc/mod_muc_room.erl:251 +#: mod_muc/mod_muc_room.erl:255 msgid "It is not allowed to send private messages to the conference" msgstr "Nie je povolené odosielať súkromné správy do konferencie" -#: mod_muc/mod_muc_room.erl:296 +#: mod_muc/mod_muc_room.erl:332 +msgid "Please, wait for a while before sending new voice request" +msgstr "" + +#: mod_muc/mod_muc_room.erl:347 +msgid "Voice requests are disabled in this conference" +msgstr "" + +#: mod_muc/mod_muc_room.erl:364 +msgid "Failed to extract JID from your voice request approval" +msgstr "" + +#: mod_muc/mod_muc_room.erl:393 +msgid "Only moderators can approve voice requests" +msgstr "" + +#: mod_muc/mod_muc_room.erl:408 msgid "Improper message type" msgstr "Nesprávny typ správy" -#: mod_muc/mod_muc_room.erl:406 +#: mod_muc/mod_muc_room.erl:518 msgid "" "This participant is kicked from the room because he sent an error message to " "another participant" @@ -757,230 +779,266 @@ msgstr "" "Účastník bol vyhodený z miestnosti, pretože poslal chybovú správu inému " "účastníkovi" -#: mod_muc/mod_muc_room.erl:419 +#: mod_muc/mod_muc_room.erl:531 msgid "It is not allowed to send private messages of type \"groupchat\"" msgstr "Nie je dovolené odoslanie súkromnej správy typu \"Skupinová správa\" " -#: mod_muc/mod_muc_room.erl:431 mod_muc/mod_muc_room.erl:486 +#: mod_muc/mod_muc_room.erl:543 mod_muc/mod_muc_room.erl:611 msgid "Recipient is not in the conference room" msgstr "Príjemca sa nenachádza v konferenčnej miestnosti" -#: mod_muc/mod_muc_room.erl:451 mod_muc/mod_muc_room.erl:829 -#: mod_muc/mod_muc_room.erl:3609 -msgid "Only occupants are allowed to send messages to the conference" -msgstr "Len členovia majú povolené zasielať správy do konferencie" - -#: mod_muc/mod_muc_room.erl:460 +#: mod_muc/mod_muc_room.erl:564 mod_muc/mod_muc_room.erl:585 msgid "It is not allowed to send private messages" msgstr "Nieje povolené posielať súkromné správy" -#: mod_muc/mod_muc_room.erl:509 +#: mod_muc/mod_muc_room.erl:576 mod_muc/mod_muc_room.erl:956 +#: mod_muc/mod_muc_room.erl:4040 +msgid "Only occupants are allowed to send messages to the conference" +msgstr "Len členovia majú povolené zasielať správy do konferencie" + +#: mod_muc/mod_muc_room.erl:634 msgid "Only occupants are allowed to send queries to the conference" msgstr "Len členovia majú povolené dotazovať sa o konferencii" -#: mod_muc/mod_muc_room.erl:521 +#: mod_muc/mod_muc_room.erl:646 msgid "Queries to the conference members are not allowed in this room" msgstr "Dotazovať sa o členoch nie je v tejto miestnosti povolené" -#: mod_muc/mod_muc_room.erl:805 +#: mod_muc/mod_muc_room.erl:932 msgid "" "Only moderators and participants are allowed to change the subject in this " "room" msgstr "Len moderátori a zúčastnený majú povolené meniť tému tejto miestnosti" -#: mod_muc/mod_muc_room.erl:810 +#: mod_muc/mod_muc_room.erl:937 msgid "Only moderators are allowed to change the subject in this room" msgstr "Len moderátori majú povolené meniť tému miestnosti" -#: mod_muc/mod_muc_room.erl:820 +#: mod_muc/mod_muc_room.erl:947 msgid "Visitors are not allowed to send messages to all occupants" msgstr "" "Návštevníci nemajú povolené zasielať správy všetkým prihláseným do " "konferencie" -#: mod_muc/mod_muc_room.erl:891 +#: mod_muc/mod_muc_room.erl:1021 msgid "" "This participant is kicked from the room because he sent an error presence" msgstr "" "Účastník bol vyhodený z miestnosti, pretože poslal chybovú správu o stave" -#: mod_muc/mod_muc_room.erl:909 +#: mod_muc/mod_muc_room.erl:1040 msgid "Visitors are not allowed to change their nicknames in this room" msgstr "V tejto miestnosti nieje povolené meniť prezývky" -#: mod_muc/mod_muc_room.erl:922 mod_muc/mod_muc_room.erl:1569 +#: mod_muc/mod_muc_room.erl:1053 mod_muc/mod_muc_room.erl:1779 msgid "That nickname is already in use by another occupant" msgstr "Prezývka je už používaná iným členom" -#: mod_muc/mod_muc_room.erl:1558 +#: mod_muc/mod_muc_room.erl:1768 msgid "You have been banned from this room" msgstr "Boli ste vylúčený z tejto miestnosti" -#: mod_muc/mod_muc_room.erl:1561 +#: mod_muc/mod_muc_room.erl:1771 msgid "Membership is required to enter this room" msgstr "Pre vstup do miestnosti je potrebné byť členom" -#: mod_muc/mod_muc_room.erl:1597 +#: mod_muc/mod_muc_room.erl:1807 msgid "This room is not anonymous" msgstr "Táto miestnosť nie je anonymná" -#: mod_muc/mod_muc_room.erl:1623 +#: mod_muc/mod_muc_room.erl:1833 msgid "A password is required to enter this room" msgstr "Pre vstup do miestnosti je potrebné heslo" -#: mod_muc/mod_muc_room.erl:1645 mod_register.erl:246 +#: mod_muc/mod_muc_room.erl:1855 mod_register.erl:246 msgid "Too many CAPTCHA requests" msgstr "" -#: mod_muc/mod_muc_room.erl:1654 -msgid "Unable to generate a captcha" -msgstr "Nepodarilo sa vygenerovat captcha" +#: mod_muc/mod_muc_room.erl:1864 mod_register.erl:251 +#, fuzzy +msgid "Unable to generate a CAPTCHA" +msgstr "Nepodarilo sa vygenerovat CAPTCHA" -#: mod_muc/mod_muc_room.erl:1664 +#: mod_muc/mod_muc_room.erl:1874 msgid "Incorrect password" msgstr "Nesprávne heslo" -#: mod_muc/mod_muc_room.erl:2193 +#: mod_muc/mod_muc_room.erl:2448 msgid "Administrator privileges required" msgstr "Sú potrebné práva administrátora" -#: mod_muc/mod_muc_room.erl:2208 +#: mod_muc/mod_muc_room.erl:2463 msgid "Moderator privileges required" msgstr "Sú potrebné práva moderátora" -#: mod_muc/mod_muc_room.erl:2363 +#: mod_muc/mod_muc_room.erl:2619 msgid "Jabber ID ~s is invalid" msgstr "Jabber ID ~s je neplatné" -#: mod_muc/mod_muc_room.erl:2377 +#: mod_muc/mod_muc_room.erl:2633 msgid "Nickname ~s does not exist in the room" msgstr "Prezývka ~s v miestnosti neexistuje" -#: mod_muc/mod_muc_room.erl:2403 mod_muc/mod_muc_room.erl:2797 +#: mod_muc/mod_muc_room.erl:2659 mod_muc/mod_muc_room.erl:3049 msgid "Invalid affiliation: ~s" msgstr "Neplatné priradenie: ~s" -#: mod_muc/mod_muc_room.erl:2460 +#: mod_muc/mod_muc_room.erl:2713 msgid "Invalid role: ~s" msgstr "Neplatná rola: ~s" -#: mod_muc/mod_muc_room.erl:2774 mod_muc/mod_muc_room.erl:2810 +#: mod_muc/mod_muc_room.erl:3026 mod_muc/mod_muc_room.erl:3062 msgid "Owner privileges required" msgstr "Sú vyžadované práva vlastníka" -#: mod_muc/mod_muc_room.erl:2941 +#: mod_muc/mod_muc_room.erl:3195 msgid "Configuration of room ~s" msgstr "Konfigurácia miestnosti ~s" -#: mod_muc/mod_muc_room.erl:2946 +#: mod_muc/mod_muc_room.erl:3200 msgid "Room title" msgstr "Názov miestnosti" -#: mod_muc/mod_muc_room.erl:2949 mod_muc/mod_muc_room.erl:3388 +#: mod_muc/mod_muc_room.erl:3203 mod_muc/mod_muc_room.erl:3692 msgid "Room description" msgstr "Popis miestnosti" -#: mod_muc/mod_muc_room.erl:2956 +#: mod_muc/mod_muc_room.erl:3210 msgid "Make room persistent" msgstr "Nastaviť miestnosť ako trvalú" -#: mod_muc/mod_muc_room.erl:2961 +#: mod_muc/mod_muc_room.erl:3215 msgid "Make room public searchable" msgstr "Nastaviť miestnosť ako verejne prehľadávateľnú" -#: mod_muc/mod_muc_room.erl:2964 +#: mod_muc/mod_muc_room.erl:3218 msgid "Make participants list public" msgstr "Nastaviť zoznam zúčastnených ako verejný" -#: mod_muc/mod_muc_room.erl:2967 +#: mod_muc/mod_muc_room.erl:3221 msgid "Make room password protected" msgstr "Chrániť miestnosť heslom" -#: mod_muc/mod_muc_room.erl:2978 +#: mod_muc/mod_muc_room.erl:3232 msgid "Maximum Number of Occupants" msgstr "Počet účastníkov" -#: mod_muc/mod_muc_room.erl:2985 +#: mod_muc/mod_muc_room.erl:3239 msgid "No limit" msgstr "Bez limitu" -#: mod_muc/mod_muc_room.erl:2996 +#: mod_muc/mod_muc_room.erl:3250 msgid "Present real Jabber IDs to" msgstr "Zobrazovať skutočné Jabber ID" -#: mod_muc/mod_muc_room.erl:3004 +#: mod_muc/mod_muc_room.erl:3258 mod_muc/mod_muc_room.erl:3292 msgid "moderators only" msgstr "moderátorom" -#: mod_muc/mod_muc_room.erl:3006 +#: mod_muc/mod_muc_room.erl:3260 mod_muc/mod_muc_room.erl:3294 msgid "anyone" msgstr "všetkým" -#: mod_muc/mod_muc_room.erl:3008 +#: mod_muc/mod_muc_room.erl:3262 msgid "Make room members-only" msgstr "Nastaviť miestnosť len pre členov" -#: mod_muc/mod_muc_room.erl:3011 +#: mod_muc/mod_muc_room.erl:3265 msgid "Make room moderated" msgstr "Nastaviť miestnosť ako moderovanú" -#: mod_muc/mod_muc_room.erl:3014 +#: mod_muc/mod_muc_room.erl:3268 msgid "Default users as participants" msgstr "Užívatelia sú implicitne členmi" -#: mod_muc/mod_muc_room.erl:3017 +#: mod_muc/mod_muc_room.erl:3271 msgid "Allow users to change the subject" msgstr "Povoliť užívateľom meniť tému" -#: mod_muc/mod_muc_room.erl:3020 +#: mod_muc/mod_muc_room.erl:3274 msgid "Allow users to send private messages" msgstr "Povoliť užívateľom odosielať súkromné správy" -#: mod_muc/mod_muc_room.erl:3023 +#: mod_muc/mod_muc_room.erl:3279 +#, fuzzy +msgid "Allow visitors to send private messages to" +msgstr "Povoliť užívateľom odosielať súkromné správy" + +#: mod_muc/mod_muc_room.erl:3290 +msgid "nobody" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3296 msgid "Allow users to query other users" msgstr "Povoliť užívateľom dotazovať sa informácie o iných užívateľoch" -#: mod_muc/mod_muc_room.erl:3026 +#: mod_muc/mod_muc_room.erl:3299 msgid "Allow users to send invites" msgstr "Povoliť používateľom posielanie pozvánok" -#: mod_muc/mod_muc_room.erl:3029 +#: mod_muc/mod_muc_room.erl:3302 msgid "Allow visitors to send status text in presence updates" msgstr "Návštevníci môžu posielať textové informácie v stavových správach" -#: mod_muc/mod_muc_room.erl:3032 +#: mod_muc/mod_muc_room.erl:3305 msgid "Allow visitors to change nickname" msgstr "Návštevníci môžu meniť prezývky" -#: mod_muc/mod_muc_room.erl:3038 -msgid "Make room captcha protected" -msgstr "Chrániť miestnosť systémom captcha" +#: mod_muc/mod_muc_room.erl:3308 +#, fuzzy +msgid "Allow visitors to send voice requests" +msgstr "Povoliť používateľom posielanie pozvánok" -#: mod_muc/mod_muc_room.erl:3043 +#: mod_muc/mod_muc_room.erl:3311 +msgid "Minimum interval between voice requests (in seconds)" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3317 +msgid "Make room CAPTCHA protected" +msgstr "Chrániť miestnosť systémom CAPTCHA" + +#: mod_muc/mod_muc_room.erl:3322 msgid "Exclude Jabber IDs from CAPTCHA challenge" msgstr "" -#: mod_muc/mod_muc_room.erl:3050 +#: mod_muc/mod_muc_room.erl:3329 msgid "Enable logging" msgstr "Zapnúť zaznamenávanie histórie" -#: mod_muc/mod_muc_room.erl:3058 +#: mod_muc/mod_muc_room.erl:3337 msgid "You need an x:data capable client to configure room" msgstr "Na konfiguráciu miestnosti potrebujete klienta podporujúceho x:data" -#: mod_muc/mod_muc_room.erl:3390 +#: mod_muc/mod_muc_room.erl:3694 msgid "Number of occupants" msgstr "Počet zúčastnených" -#: mod_muc/mod_muc_room.erl:3446 +#: mod_muc/mod_muc_room.erl:3750 msgid "private, " msgstr "súkromná, " -#: mod_muc/mod_muc_room.erl:3529 +#: mod_muc/mod_muc_room.erl:3799 +msgid "Voice request" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3803 +msgid "Either approve or decline the voice request." +msgstr "" + +#: mod_muc/mod_muc_room.erl:3809 +#, fuzzy +msgid "User JID" +msgstr "Používateľ " + +#: mod_muc/mod_muc_room.erl:3811 +msgid "Grant voice to this person?" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3960 msgid "~s invites you to the room ~s" msgstr "~s Vás pozýva do miestnosti ~s" -#: mod_muc/mod_muc_room.erl:3538 +#: mod_muc/mod_muc_room.erl:3969 msgid "the password is" msgstr "heslo je" @@ -994,14 +1052,15 @@ msgid "~s's Offline Messages Queue" msgstr "~s Offline správy" #: mod_offline.erl:563 mod_offline_odbc.erl:411 mod_roster.erl:987 -#: mod_roster_odbc.erl:1092 mod_shared_roster.erl:896 -#: mod_shared_roster.erl:1005 web/ejabberd_web_admin.erl:833 +#: mod_roster_odbc.erl:1104 mod_shared_roster.erl:901 +#: mod_shared_roster.erl:1010 mod_shared_roster_odbc.erl:930 +#: mod_shared_roster_odbc.erl:1039 web/ejabberd_web_admin.erl:833 #: web/ejabberd_web_admin.erl:874 web/ejabberd_web_admin.erl:942 #: web/ejabberd_web_admin.erl:978 web/ejabberd_web_admin.erl:1019 -#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1758 -#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1961 -#: web/ejabberd_web_admin.erl:2030 web/ejabberd_web_admin.erl:2134 -#: web/ejabberd_web_admin.erl:2159 web/ejabberd_web_admin.erl:2247 +#: web/ejabberd_web_admin.erl:1508 web/ejabberd_web_admin.erl:1760 +#: web/ejabberd_web_admin.erl:1931 web/ejabberd_web_admin.erl:1963 +#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2135 +#: web/ejabberd_web_admin.erl:2160 web/ejabberd_web_admin.erl:2248 msgid "Submitted" msgstr "Odoslané" @@ -1021,8 +1080,9 @@ msgstr "Pre" msgid "Packet" msgstr "Paket" -#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:903 -#: web/ejabberd_web_admin.erl:882 web/ejabberd_web_admin.erl:986 +#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:908 +#: mod_shared_roster_odbc.erl:937 web/ejabberd_web_admin.erl:882 +#: web/ejabberd_web_admin.erl:986 msgid "Delete Selected" msgstr "Zmazať vybrané" @@ -1038,104 +1098,104 @@ msgstr "Odstrániť všetky offline správy" msgid "ejabberd SOCKS5 Bytestreams module" msgstr "ejabberd SOCKS5 Bytestreams modul" -#: mod_pubsub/mod_pubsub.erl:1119 mod_pubsub/mod_pubsub_odbc.erl:928 +#: mod_pubsub/mod_pubsub.erl:1120 mod_pubsub/mod_pubsub_odbc.erl:929 msgid "Publish-Subscribe" msgstr "Publish-Subscribe" -#: mod_pubsub/mod_pubsub.erl:1213 mod_pubsub/mod_pubsub_odbc.erl:1024 +#: mod_pubsub/mod_pubsub.erl:1214 mod_pubsub/mod_pubsub_odbc.erl:1025 msgid "ejabberd Publish-Subscribe module" msgstr "ejabberd Publish-Subscribe modul" -#: mod_pubsub/mod_pubsub.erl:1496 mod_pubsub/mod_pubsub_odbc.erl:1311 +#: mod_pubsub/mod_pubsub.erl:1497 mod_pubsub/mod_pubsub_odbc.erl:1312 msgid "PubSub subscriber request" msgstr "Žiadosť odberateľa PubSub" -#: mod_pubsub/mod_pubsub.erl:1498 mod_pubsub/mod_pubsub_odbc.erl:1313 +#: mod_pubsub/mod_pubsub.erl:1499 mod_pubsub/mod_pubsub_odbc.erl:1314 msgid "Choose whether to approve this entity's subscription." msgstr "Zvolte, či chcete povoliť toto odoberanie" -#: mod_pubsub/mod_pubsub.erl:1504 mod_pubsub/mod_pubsub_odbc.erl:1319 +#: mod_pubsub/mod_pubsub.erl:1505 mod_pubsub/mod_pubsub_odbc.erl:1320 msgid "Node ID" msgstr "ID uzlu" -#: mod_pubsub/mod_pubsub.erl:1509 mod_pubsub/mod_pubsub_odbc.erl:1324 +#: mod_pubsub/mod_pubsub.erl:1510 mod_pubsub/mod_pubsub_odbc.erl:1325 msgid "Subscriber Address" msgstr "Adresa odberateľa" -#: mod_pubsub/mod_pubsub.erl:1515 mod_pubsub/mod_pubsub_odbc.erl:1330 +#: mod_pubsub/mod_pubsub.erl:1516 mod_pubsub/mod_pubsub_odbc.erl:1331 msgid "Allow this Jabber ID to subscribe to this pubsub node?" msgstr "Dovoliť tomuto Jabber ID odoberať PubSub uzol?" -#: mod_pubsub/mod_pubsub.erl:3416 mod_pubsub/mod_pubsub_odbc.erl:3229 +#: mod_pubsub/mod_pubsub.erl:3474 mod_pubsub/mod_pubsub_odbc.erl:3287 msgid "Deliver payloads with event notifications" msgstr "Doručiť náklad s upozornením na udalosť" -#: mod_pubsub/mod_pubsub.erl:3417 mod_pubsub/mod_pubsub_odbc.erl:3230 +#: mod_pubsub/mod_pubsub.erl:3475 mod_pubsub/mod_pubsub_odbc.erl:3288 msgid "Deliver event notifications" msgstr "Doručiť oznamy o udalosti" -#: mod_pubsub/mod_pubsub.erl:3418 mod_pubsub/mod_pubsub_odbc.erl:3231 +#: mod_pubsub/mod_pubsub.erl:3476 mod_pubsub/mod_pubsub_odbc.erl:3289 msgid "Notify subscribers when the node configuration changes" msgstr "Upozorniť prihlásených používateľov na zmenu nastavenia uzlu" -#: mod_pubsub/mod_pubsub.erl:3419 mod_pubsub/mod_pubsub_odbc.erl:3232 +#: mod_pubsub/mod_pubsub.erl:3477 mod_pubsub/mod_pubsub_odbc.erl:3290 msgid "Notify subscribers when the node is deleted" msgstr "Upozorniť prihlásených používateľov na zmazanie uzlu" -#: mod_pubsub/mod_pubsub.erl:3420 mod_pubsub/mod_pubsub_odbc.erl:3233 +#: mod_pubsub/mod_pubsub.erl:3478 mod_pubsub/mod_pubsub_odbc.erl:3291 msgid "Notify subscribers when items are removed from the node" msgstr "Upozorniť prihlásených používateľov na odstránenie položiek z uzlu" -#: mod_pubsub/mod_pubsub.erl:3421 mod_pubsub/mod_pubsub_odbc.erl:3234 +#: mod_pubsub/mod_pubsub.erl:3479 mod_pubsub/mod_pubsub_odbc.erl:3292 msgid "Persist items to storage" msgstr "Uložiť položky natrvalo do úložiska" -#: mod_pubsub/mod_pubsub.erl:3422 mod_pubsub/mod_pubsub_odbc.erl:3235 +#: mod_pubsub/mod_pubsub.erl:3480 mod_pubsub/mod_pubsub_odbc.erl:3293 msgid "A friendly name for the node" msgstr "Prístupný názov pre uzol" -#: mod_pubsub/mod_pubsub.erl:3423 mod_pubsub/mod_pubsub_odbc.erl:3236 +#: mod_pubsub/mod_pubsub.erl:3481 mod_pubsub/mod_pubsub_odbc.erl:3294 msgid "Max # of items to persist" msgstr "Maximálny počet položiek, ktoré je možné natrvalo uložiť" -#: mod_pubsub/mod_pubsub.erl:3424 mod_pubsub/mod_pubsub_odbc.erl:3237 +#: mod_pubsub/mod_pubsub.erl:3482 mod_pubsub/mod_pubsub_odbc.erl:3295 msgid "Whether to allow subscriptions" msgstr "Povoliť prihlasovanie" -#: mod_pubsub/mod_pubsub.erl:3425 mod_pubsub/mod_pubsub_odbc.erl:3238 +#: mod_pubsub/mod_pubsub.erl:3483 mod_pubsub/mod_pubsub_odbc.erl:3296 msgid "Specify the access model" msgstr "Uveďte model prístupu" -#: mod_pubsub/mod_pubsub.erl:3428 mod_pubsub/mod_pubsub_odbc.erl:3241 +#: mod_pubsub/mod_pubsub.erl:3486 mod_pubsub/mod_pubsub_odbc.erl:3299 msgid "Roster groups allowed to subscribe" msgstr "Skupiny kontaktov, ktoré môžu odoberať" -#: mod_pubsub/mod_pubsub.erl:3429 mod_pubsub/mod_pubsub_odbc.erl:3242 +#: mod_pubsub/mod_pubsub.erl:3487 mod_pubsub/mod_pubsub_odbc.erl:3300 msgid "Specify the publisher model" msgstr "Špecifikovať model publikovania" -#: mod_pubsub/mod_pubsub.erl:3431 mod_pubsub/mod_pubsub_odbc.erl:3244 +#: mod_pubsub/mod_pubsub.erl:3489 mod_pubsub/mod_pubsub_odbc.erl:3302 msgid "Purge all items when the relevant publisher goes offline" msgstr "" "Odstrániť všetky relevantné položky, keď užívateľ prejde do módu offline" -#: mod_pubsub/mod_pubsub.erl:3432 mod_pubsub/mod_pubsub_odbc.erl:3245 +#: mod_pubsub/mod_pubsub.erl:3490 mod_pubsub/mod_pubsub_odbc.erl:3303 msgid "Specify the event message type" msgstr "Uveďte typ pre správu o udalosti" -#: mod_pubsub/mod_pubsub.erl:3434 mod_pubsub/mod_pubsub_odbc.erl:3247 +#: mod_pubsub/mod_pubsub.erl:3492 mod_pubsub/mod_pubsub_odbc.erl:3305 msgid "Max payload size in bytes" msgstr "Maximálny náklad v bajtoch" -#: mod_pubsub/mod_pubsub.erl:3435 mod_pubsub/mod_pubsub_odbc.erl:3248 +#: mod_pubsub/mod_pubsub.erl:3493 mod_pubsub/mod_pubsub_odbc.erl:3306 msgid "When to send the last published item" msgstr "Kedy odoslať posledne publikovanú položku" -#: mod_pubsub/mod_pubsub.erl:3437 mod_pubsub/mod_pubsub_odbc.erl:3250 +#: mod_pubsub/mod_pubsub.erl:3495 mod_pubsub/mod_pubsub_odbc.erl:3308 msgid "Only deliver notifications to available users" msgstr "Doručovať upozornenia len aktuálne prihláseným používateľom" -#: mod_pubsub/mod_pubsub.erl:3438 mod_pubsub/mod_pubsub_odbc.erl:3251 +#: mod_pubsub/mod_pubsub.erl:3496 mod_pubsub/mod_pubsub_odbc.erl:3309 msgid "The collections with which a node is affiliated" msgstr "Kolekcie asociované s uzlom" @@ -1152,16 +1212,11 @@ msgstr "Na registráciu prezývky potrebujete klienta podporujúceho z x:data" msgid "Choose a username and password to register with this server" msgstr "Zvolte meno užívateľa a heslo pre registráciu na tomto servere" -#: mod_register.erl:230 mod_vcard.erl:358 mod_vcard_odbc.erl:336 -#: web/ejabberd_web_admin.erl:1516 web/ejabberd_web_admin.erl:1573 +#: mod_register.erl:230 mod_vcard.erl:364 mod_vcard_odbc.erl:342 +#: web/ejabberd_web_admin.erl:1515 web/ejabberd_web_admin.erl:1572 msgid "User" msgstr "Užívateľ" -#: mod_register.erl:251 -#, fuzzy -msgid "Unable to generate a CAPTCHA" -msgstr "Nepodarilo sa vygenerovat captcha" - #: mod_register.erl:316 mod_register.erl:361 #, fuzzy msgid "The password is too weak" @@ -1171,120 +1226,123 @@ msgstr "heslo je" msgid "Users are not allowed to register accounts so quickly" msgstr "Nieje dovolené vytvárať účty tak rýchlo po sebe" -#: mod_roster.erl:938 mod_roster_odbc.erl:1043 web/ejabberd_web_admin.erl:1699 -#: web/ejabberd_web_admin.erl:1884 web/ejabberd_web_admin.erl:1895 -#: web/ejabberd_web_admin.erl:2218 +#: mod_roster.erl:938 mod_roster_odbc.erl:1055 web/ejabberd_web_admin.erl:1701 +#: web/ejabberd_web_admin.erl:1886 web/ejabberd_web_admin.erl:1897 +#: web/ejabberd_web_admin.erl:2219 msgid "None" msgstr "Nič" -#: mod_roster.erl:945 mod_roster_odbc.erl:1050 +#: mod_roster.erl:945 mod_roster_odbc.erl:1062 msgid "Subscription" msgstr "Prihlásenie" -#: mod_roster.erl:946 mod_roster_odbc.erl:1051 +#: mod_roster.erl:946 mod_roster_odbc.erl:1063 msgid "Pending" msgstr "Čakajúce" -#: mod_roster.erl:947 mod_roster_odbc.erl:1052 +#: mod_roster.erl:947 mod_roster_odbc.erl:1064 msgid "Groups" msgstr "Skupiny" -#: mod_roster.erl:974 mod_roster_odbc.erl:1079 +#: mod_roster.erl:974 mod_roster_odbc.erl:1091 msgid "Validate" msgstr "Overiť" -#: mod_roster.erl:982 mod_roster_odbc.erl:1087 +#: mod_roster.erl:982 mod_roster_odbc.erl:1099 msgid "Remove" msgstr "Odstrániť" -#: mod_roster.erl:985 mod_roster_odbc.erl:1090 +#: mod_roster.erl:985 mod_roster_odbc.erl:1102 msgid "Roster of " msgstr "Zoznam kontaktov " -#: mod_roster.erl:988 mod_roster_odbc.erl:1093 mod_shared_roster.erl:897 -#: mod_shared_roster.erl:1006 web/ejabberd_web_admin.erl:834 +#: mod_roster.erl:988 mod_roster_odbc.erl:1105 mod_shared_roster.erl:902 +#: mod_shared_roster.erl:1011 mod_shared_roster_odbc.erl:931 +#: mod_shared_roster_odbc.erl:1040 web/ejabberd_web_admin.erl:834 #: web/ejabberd_web_admin.erl:875 web/ejabberd_web_admin.erl:943 #: web/ejabberd_web_admin.erl:979 web/ejabberd_web_admin.erl:1020 -#: web/ejabberd_web_admin.erl:1510 web/ejabberd_web_admin.erl:1759 -#: web/ejabberd_web_admin.erl:1930 web/ejabberd_web_admin.erl:2135 -#: web/ejabberd_web_admin.erl:2160 +#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1761 +#: web/ejabberd_web_admin.erl:1932 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2161 msgid "Bad format" msgstr "Zlý formát" -#: mod_roster.erl:995 mod_roster_odbc.erl:1100 +#: mod_roster.erl:995 mod_roster_odbc.erl:1112 msgid "Add Jabber ID" msgstr "Pridať Jabber ID" -#: mod_roster.erl:1094 mod_roster_odbc.erl:1199 +#: mod_roster.erl:1094 mod_roster_odbc.erl:1211 msgid "Roster" msgstr "Zoznam kontaktov" -#: mod_shared_roster.erl:852 mod_shared_roster.erl:894 -#: mod_shared_roster.erl:1002 +#: mod_shared_roster.erl:857 mod_shared_roster.erl:899 +#: mod_shared_roster.erl:1007 mod_shared_roster_odbc.erl:886 +#: mod_shared_roster_odbc.erl:928 mod_shared_roster_odbc.erl:1036 msgid "Shared Roster Groups" msgstr "Skupiny pre zdieľaný zoznam kontaktov" -#: mod_shared_roster.erl:890 web/ejabberd_web_admin.erl:1366 -#: web/ejabberd_web_admin.erl:2460 +#: mod_shared_roster.erl:895 mod_shared_roster_odbc.erl:924 +#: web/ejabberd_web_admin.erl:1365 web/ejabberd_web_admin.erl:2461 msgid "Add New" msgstr "Pridať nový" -#: mod_shared_roster.erl:973 +#: mod_shared_roster.erl:978 mod_shared_roster_odbc.erl:1007 msgid "Name:" msgstr "Meno:" -#: mod_shared_roster.erl:978 +#: mod_shared_roster.erl:983 mod_shared_roster_odbc.erl:1012 msgid "Description:" msgstr "Popis:" -#: mod_shared_roster.erl:986 +#: mod_shared_roster.erl:991 mod_shared_roster_odbc.erl:1020 msgid "Members:" msgstr "Členovia:" -#: mod_shared_roster.erl:994 +#: mod_shared_roster.erl:999 mod_shared_roster_odbc.erl:1028 msgid "Displayed Groups:" msgstr "Zobrazené skupiny:" -#: mod_shared_roster.erl:1003 +#: mod_shared_roster.erl:1008 mod_shared_roster_odbc.erl:1037 msgid "Group " msgstr "Skupina " -#: mod_shared_roster.erl:1012 web/ejabberd_web_admin.erl:840 -#: web/ejabberd_web_admin.erl:884 web/ejabberd_web_admin.erl:949 -#: web/ejabberd_web_admin.erl:1026 web/ejabberd_web_admin.erl:2015 +#: mod_shared_roster.erl:1017 mod_shared_roster_odbc.erl:1046 +#: web/ejabberd_web_admin.erl:840 web/ejabberd_web_admin.erl:884 +#: web/ejabberd_web_admin.erl:949 web/ejabberd_web_admin.erl:1026 +#: web/ejabberd_web_admin.erl:2017 msgid "Submit" msgstr "Odoslať" -#: mod_vcard.erl:165 mod_vcard_ldap.erl:237 mod_vcard_odbc.erl:129 +#: mod_vcard.erl:165 mod_vcard_ldap.erl:238 mod_vcard_odbc.erl:129 msgid "Erlang Jabber Server" msgstr "Erlang Jabber Server" -#: mod_vcard.erl:358 mod_vcard.erl:472 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:448 +#: mod_vcard.erl:364 mod_vcard.erl:478 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:454 msgid "Birthday" msgstr "Dátum narodenia" -#: mod_vcard.erl:358 mod_vcard.erl:474 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:450 +#: mod_vcard.erl:364 mod_vcard.erl:480 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:456 msgid "City" msgstr "Mesto" -#: mod_vcard.erl:358 mod_vcard.erl:473 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:449 +#: mod_vcard.erl:364 mod_vcard.erl:479 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:455 msgid "Country" msgstr "Krajina" -#: mod_vcard.erl:358 mod_vcard.erl:475 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:451 +#: mod_vcard.erl:364 mod_vcard.erl:481 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:457 msgid "Email" msgstr "E-mail" -#: mod_vcard.erl:358 mod_vcard.erl:470 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:446 +#: mod_vcard.erl:364 mod_vcard.erl:476 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:452 msgid "Family Name" msgstr "Priezvisko" -#: mod_vcard.erl:358 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_odbc.erl:342 msgid "" "Fill in the form to search for any matching Jabber User (Add * to the end of " "field to match substring)" @@ -1292,52 +1350,52 @@ msgstr "" "Pre vyhľadanie Jabber používateľa vyplňte formulár (pridajte znak * na " "koniec, pre vyhľadanie podreťazca)" -#: mod_vcard.erl:358 mod_vcard.erl:467 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:443 +#: mod_vcard.erl:364 mod_vcard.erl:473 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:449 msgid "Full Name" msgstr "Celé meno: " -#: mod_vcard.erl:358 mod_vcard.erl:469 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:445 +#: mod_vcard.erl:364 mod_vcard.erl:475 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:451 msgid "Middle Name" msgstr "Prostredné meno: " -#: mod_vcard.erl:358 mod_vcard.erl:468 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:444 web/ejabberd_web_admin.erl:2004 +#: mod_vcard.erl:364 mod_vcard.erl:474 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:450 web/ejabberd_web_admin.erl:2006 msgid "Name" msgstr "Meno" -#: mod_vcard.erl:358 mod_vcard.erl:476 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:452 +#: mod_vcard.erl:364 mod_vcard.erl:482 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:458 msgid "Organization Name" msgstr "Meno organizácie: " -#: mod_vcard.erl:358 mod_vcard.erl:477 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:453 +#: mod_vcard.erl:364 mod_vcard.erl:483 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:459 msgid "Organization Unit" msgstr "Organizačná jednotka: " -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "Search users in " msgstr "Hľadať užívateľov v " -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "You need an x:data capable client to search" msgstr "Na vyhľadávanie potrebujete klienta podporujúceho x:data" -#: mod_vcard.erl:383 mod_vcard_ldap.erl:483 mod_vcard_odbc.erl:361 +#: mod_vcard.erl:389 mod_vcard_ldap.erl:487 mod_vcard_odbc.erl:367 msgid "vCard User Search" msgstr "Hľadať užívateľov vo vCard" -#: mod_vcard.erl:439 mod_vcard_ldap.erl:537 mod_vcard_odbc.erl:415 +#: mod_vcard.erl:445 mod_vcard_ldap.erl:541 mod_vcard_odbc.erl:421 msgid "ejabberd vCard module" msgstr "ejabberd vCard modul" -#: mod_vcard.erl:463 mod_vcard_ldap.erl:547 mod_vcard_odbc.erl:439 +#: mod_vcard.erl:469 mod_vcard_ldap.erl:551 mod_vcard_odbc.erl:445 msgid "Search Results for " msgstr "Hľadať výsledky pre " -#: mod_vcard_ldap.erl:458 +#: mod_vcard_ldap.erl:462 msgid "Fill in fields to search for any matching Jabber User" msgstr "Vyplnte políčka pre vyhľadávanie Jabber užívateľa" @@ -1398,7 +1456,7 @@ msgstr "Zobraziť bežnú tabuľku" msgid "Show Integral Table" msgstr "Zobraziť kompletnú tabuľku" -#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1937 +#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1939 msgid "Statistics" msgstr "Štatistiky" @@ -1410,116 +1468,116 @@ msgstr "Nebol nájdený" msgid "Node not found" msgstr "Uzol nenájdený" -#: web/ejabberd_web_admin.erl:1461 +#: web/ejabberd_web_admin.erl:1460 msgid "Host" msgstr "Server" -#: web/ejabberd_web_admin.erl:1462 +#: web/ejabberd_web_admin.erl:1461 msgid "Registered Users" msgstr "Registrovaní používatelia" -#: web/ejabberd_web_admin.erl:1574 +#: web/ejabberd_web_admin.erl:1573 msgid "Offline Messages" msgstr "Offline správy" -#: web/ejabberd_web_admin.erl:1575 web/ejabberd_web_admin.erl:1765 +#: web/ejabberd_web_admin.erl:1574 web/ejabberd_web_admin.erl:1767 msgid "Last Activity" msgstr "Posledná aktivita" -#: web/ejabberd_web_admin.erl:1657 web/ejabberd_web_admin.erl:1673 +#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 msgid "Registered Users:" msgstr "Registrovaní používatelia:" -#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 -#: web/ejabberd_web_admin.erl:2191 +#: web/ejabberd_web_admin.erl:1661 web/ejabberd_web_admin.erl:1677 +#: web/ejabberd_web_admin.erl:2192 msgid "Online Users:" msgstr "Online používatelia:" -#: web/ejabberd_web_admin.erl:1661 +#: web/ejabberd_web_admin.erl:1663 msgid "Outgoing s2s Connections:" msgstr "Odchádzajúce s2s spojenia:" -#: web/ejabberd_web_admin.erl:1663 +#: web/ejabberd_web_admin.erl:1665 msgid "Outgoing s2s Servers:" msgstr "Odchádzajúce s2s servery:" -#: web/ejabberd_web_admin.erl:1732 web/mod_register_web.erl:175 +#: web/ejabberd_web_admin.erl:1734 web/mod_register_web.erl:175 #: web/mod_register_web.erl:372 web/mod_register_web.erl:381 #: web/mod_register_web.erl:411 msgid "Change Password" msgstr "Zmeniť heslo" -#: web/ejabberd_web_admin.erl:1756 +#: web/ejabberd_web_admin.erl:1758 msgid "User " msgstr "Používateľ " -#: web/ejabberd_web_admin.erl:1763 +#: web/ejabberd_web_admin.erl:1765 msgid "Connected Resources:" msgstr "Pripojené zdroje:" -#: web/ejabberd_web_admin.erl:1764 web/mod_register_web.erl:227 +#: web/ejabberd_web_admin.erl:1766 web/mod_register_web.erl:227 #: web/mod_register_web.erl:519 msgid "Password:" msgstr "Heslo:" -#: web/ejabberd_web_admin.erl:1826 +#: web/ejabberd_web_admin.erl:1828 msgid "No Data" msgstr "Žiadne dáta" -#: web/ejabberd_web_admin.erl:1904 +#: web/ejabberd_web_admin.erl:1906 msgid "Nodes" msgstr "Uzly" -#: web/ejabberd_web_admin.erl:1927 web/ejabberd_web_admin.erl:1949 +#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1951 msgid "Node " msgstr "Uzol " -#: web/ejabberd_web_admin.erl:1936 +#: web/ejabberd_web_admin.erl:1938 msgid "Listened Ports" msgstr "Otvorené portov" -#: web/ejabberd_web_admin.erl:1938 web/ejabberd_web_admin.erl:2259 -#: web/ejabberd_web_admin.erl:2447 +#: web/ejabberd_web_admin.erl:1940 web/ejabberd_web_admin.erl:2260 +#: web/ejabberd_web_admin.erl:2448 msgid "Update" msgstr "Aktualizovať" -#: web/ejabberd_web_admin.erl:1941 web/ejabberd_web_admin.erl:2568 +#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2569 msgid "Restart" msgstr "Reštart" -#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2570 +#: web/ejabberd_web_admin.erl:1945 web/ejabberd_web_admin.erl:2571 msgid "Stop" msgstr "Zastaviť" -#: web/ejabberd_web_admin.erl:1957 +#: web/ejabberd_web_admin.erl:1959 msgid "RPC Call Error" msgstr "Chyba RPC volania" -#: web/ejabberd_web_admin.erl:1998 +#: web/ejabberd_web_admin.erl:2000 msgid "Database Tables at " msgstr "Databázové tabuľky na " -#: web/ejabberd_web_admin.erl:2005 +#: web/ejabberd_web_admin.erl:2007 msgid "Storage Type" msgstr "Typ úložiska" -#: web/ejabberd_web_admin.erl:2006 +#: web/ejabberd_web_admin.erl:2008 msgid "Elements" msgstr "Prvky" -#: web/ejabberd_web_admin.erl:2007 +#: web/ejabberd_web_admin.erl:2009 msgid "Memory" msgstr "Pamäť" -#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2032 web/ejabberd_web_admin.erl:2137 msgid "Error" msgstr "Chyba" -#: web/ejabberd_web_admin.erl:2033 +#: web/ejabberd_web_admin.erl:2034 msgid "Backup of " msgstr "Záloha " -#: web/ejabberd_web_admin.erl:2035 +#: web/ejabberd_web_admin.erl:2036 msgid "" "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 " @@ -1529,144 +1587,144 @@ msgstr "" "Mnesia databázu. Ak používate ODBC modul, musíte zálohovať vašu SQL databázu " "separátne." -#: web/ejabberd_web_admin.erl:2040 +#: web/ejabberd_web_admin.erl:2041 msgid "Store binary backup:" msgstr "Uložiť binárnu zálohu:" -#: web/ejabberd_web_admin.erl:2044 web/ejabberd_web_admin.erl:2051 -#: web/ejabberd_web_admin.erl:2059 web/ejabberd_web_admin.erl:2066 -#: web/ejabberd_web_admin.erl:2073 web/ejabberd_web_admin.erl:2080 -#: web/ejabberd_web_admin.erl:2087 web/ejabberd_web_admin.erl:2095 -#: web/ejabberd_web_admin.erl:2102 web/ejabberd_web_admin.erl:2109 +#: web/ejabberd_web_admin.erl:2045 web/ejabberd_web_admin.erl:2052 +#: web/ejabberd_web_admin.erl:2060 web/ejabberd_web_admin.erl:2067 +#: web/ejabberd_web_admin.erl:2074 web/ejabberd_web_admin.erl:2081 +#: web/ejabberd_web_admin.erl:2088 web/ejabberd_web_admin.erl:2096 +#: web/ejabberd_web_admin.erl:2103 web/ejabberd_web_admin.erl:2110 msgid "OK" msgstr "OK" -#: web/ejabberd_web_admin.erl:2047 +#: web/ejabberd_web_admin.erl:2048 msgid "Restore binary backup immediately:" msgstr "Okamžite obnoviť binárnu zálohu:" -#: web/ejabberd_web_admin.erl:2055 +#: web/ejabberd_web_admin.erl:2056 msgid "" "Restore binary backup after next ejabberd restart (requires less memory):" msgstr "" "Obnoviť binárnu zálohu pri nasledujúcom reštarte ejabberd (vyžaduje menej " "pamäte)" -#: web/ejabberd_web_admin.erl:2062 +#: web/ejabberd_web_admin.erl:2063 msgid "Store plain text backup:" msgstr "Uložiť zálohu do textového súboru:" -#: web/ejabberd_web_admin.erl:2069 +#: web/ejabberd_web_admin.erl:2070 msgid "Restore plain text backup immediately:" msgstr "Okamžite obnoviť zálohu z textového súboru:" -#: web/ejabberd_web_admin.erl:2076 +#: web/ejabberd_web_admin.erl:2077 msgid "Import users data from a PIEFXIS file (XEP-0227):" msgstr "Importovat dáta užívateľov zo súboru PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2083 +#: web/ejabberd_web_admin.erl:2084 msgid "Export data of all users in the server to PIEFXIS files (XEP-0227):" msgstr "" "Exportovať dáta všetkých uživateľov na serveri do súborov PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2090 +#: web/ejabberd_web_admin.erl:2091 msgid "Export data of users in a host to PIEFXIS files (XEP-0227):" msgstr "" "Exportovať dáta uživateľov na hostitelovi do súborov PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2098 +#: web/ejabberd_web_admin.erl:2099 msgid "Import user data from jabberd14 spool file:" msgstr "Importovať dáta užívateľov z jabberd14 spool súboru:" -#: web/ejabberd_web_admin.erl:2105 +#: web/ejabberd_web_admin.erl:2106 msgid "Import users data from jabberd14 spool directory:" msgstr "Importovať dáta užívateľov z jabberd14 spool adresára:" -#: web/ejabberd_web_admin.erl:2131 +#: web/ejabberd_web_admin.erl:2132 msgid "Listened Ports at " msgstr "Otvorené porty na " -#: web/ejabberd_web_admin.erl:2156 +#: web/ejabberd_web_admin.erl:2157 msgid "Modules at " msgstr "Moduly na " -#: web/ejabberd_web_admin.erl:2182 +#: web/ejabberd_web_admin.erl:2183 msgid "Statistics of ~p" msgstr "Štatistiky ~p" -#: web/ejabberd_web_admin.erl:2185 +#: web/ejabberd_web_admin.erl:2186 msgid "Uptime:" msgstr "Uptime:" -#: web/ejabberd_web_admin.erl:2188 +#: web/ejabberd_web_admin.erl:2189 msgid "CPU Time:" msgstr "Čas procesoru" -#: web/ejabberd_web_admin.erl:2194 +#: web/ejabberd_web_admin.erl:2195 msgid "Transactions Committed:" msgstr "Transakcie potvrdená" -#: web/ejabberd_web_admin.erl:2197 +#: web/ejabberd_web_admin.erl:2198 msgid "Transactions Aborted:" msgstr "Transakcie zrušená" -#: web/ejabberd_web_admin.erl:2200 +#: web/ejabberd_web_admin.erl:2201 msgid "Transactions Restarted:" msgstr "Transakcie reštartovaná" -#: web/ejabberd_web_admin.erl:2203 +#: web/ejabberd_web_admin.erl:2204 msgid "Transactions Logged:" msgstr "Transakcie zaznamenaná" -#: web/ejabberd_web_admin.erl:2245 +#: web/ejabberd_web_admin.erl:2246 msgid "Update " msgstr "Aktualizovať " -#: web/ejabberd_web_admin.erl:2253 +#: web/ejabberd_web_admin.erl:2254 msgid "Update plan" msgstr "Aktualizovať plán" -#: web/ejabberd_web_admin.erl:2254 +#: web/ejabberd_web_admin.erl:2255 msgid "Modified modules" msgstr "Modifikované moduly" -#: web/ejabberd_web_admin.erl:2255 +#: web/ejabberd_web_admin.erl:2256 msgid "Update script" msgstr "Aktualizované skripty" -#: web/ejabberd_web_admin.erl:2256 +#: web/ejabberd_web_admin.erl:2257 msgid "Low level update script" msgstr "Nízkoúrovňový aktualizačný skript" -#: web/ejabberd_web_admin.erl:2257 +#: web/ejabberd_web_admin.erl:2258 msgid "Script check" msgstr "Kontrola skriptu" -#: web/ejabberd_web_admin.erl:2425 +#: web/ejabberd_web_admin.erl:2426 msgid "Port" msgstr "Port" -#: web/ejabberd_web_admin.erl:2426 +#: web/ejabberd_web_admin.erl:2427 msgid "IP" msgstr "IP" -#: web/ejabberd_web_admin.erl:2427 +#: web/ejabberd_web_admin.erl:2428 msgid "Protocol" msgstr "Protokol" -#: web/ejabberd_web_admin.erl:2428 web/ejabberd_web_admin.erl:2555 +#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 msgid "Module" msgstr "Modul" -#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 +#: web/ejabberd_web_admin.erl:2430 web/ejabberd_web_admin.erl:2557 msgid "Options" msgstr "Nastavenia" -#: web/ejabberd_web_admin.erl:2449 +#: web/ejabberd_web_admin.erl:2450 msgid "Delete" msgstr "Zmazať" -#: web/ejabberd_web_admin.erl:2578 +#: web/ejabberd_web_admin.erl:2579 msgid "Start" msgstr "Štart" @@ -1788,7 +1846,7 @@ msgstr "" #, fuzzy #~ msgid "Captcha test failed" -#~ msgstr "Platná captcha." +#~ msgstr "Platná CAPTCHA." #~ msgid "Encodings" #~ msgstr "Kódovania" diff --git a/src/msgs/sv.msg b/src/msgs/sv.msg index fb69f9dce..02fa18b4a 100644 --- a/src/msgs/sv.msg +++ b/src/msgs/sv.msg @@ -312,7 +312,7 @@ {"Subscription","Prenumeration"}. {"Sunday","Söndag"}. {"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"}. {"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"}. @@ -329,7 +329,6 @@ {"Transactions Logged:","Transaktioner loggade "}. {"Transactions Restarted:","Transaktioner omstartade"}. {"Tuesday","Tisdag"}. -{"Unable to generate a captcha","Kunde inte generera ett captcha"}. {"Unauthorized","Ej auktoriserad"}. {"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)"}. diff --git a/src/msgs/sv.po b/src/msgs/sv.po index 7f03aa81c..7fa7d6c06 100644 --- a/src/msgs/sv.po +++ b/src/msgs/sv.po @@ -19,11 +19,11 @@ msgstr "Du måste använda STARTTLS" msgid "No resource provided" msgstr "Ingen resurs angiven" -#: ejabberd_c2s.erl:1149 +#: ejabberd_c2s.erl:1197 msgid "Replaced by new connection" msgstr "Ersatt av ny anslutning" -#: ejabberd_c2s.erl:1837 +#: ejabberd_c2s.erl:1885 msgid "Your active privacy list has denied the routing of this stanza." msgstr "" @@ -45,8 +45,8 @@ msgid "CAPTCHA web page" msgstr "" #: ejabberd_captcha.erl:307 -msgid "The captcha is valid." -msgstr "Din captcha är godkänd." +msgid "The CAPTCHA is valid." +msgstr "Din CAPTCHA är godkänd." #: mod_adhoc.erl:95 mod_adhoc.erl:125 mod_adhoc.erl:143 mod_adhoc.erl:161 msgid "Commands" @@ -60,64 +60,67 @@ msgstr "Ping" msgid "Pong" msgstr "Pong" -#: mod_announce.erl:506 +#: mod_announce.erl:507 mod_announce_odbc.erl:499 msgid "Really delete message of the day?" msgstr "Verkligen ta bort dagens meddelanden?" -#: mod_announce.erl:514 mod_configure.erl:1083 mod_configure.erl:1128 +#: mod_announce.erl:515 mod_announce_odbc.erl:507 mod_configure.erl:1083 +#: mod_configure.erl:1128 msgid "Subject" msgstr "Ämne" -#: mod_announce.erl:519 mod_configure.erl:1088 mod_configure.erl:1133 +#: mod_announce.erl:520 mod_announce_odbc.erl:512 mod_configure.erl:1088 +#: mod_configure.erl:1133 msgid "Message body" msgstr "Meddelande kropp" -#: mod_announce.erl:599 +#: mod_announce.erl:600 mod_announce_odbc.erl:592 msgid "No body provided for announce message" msgstr "Ingen kropp behövs för dessa meddelanden" -#: mod_announce.erl:634 +#: mod_announce.erl:635 mod_announce_odbc.erl:627 msgid "Announcements" msgstr "Meddelanden" -#: mod_announce.erl:636 +#: mod_announce.erl:637 mod_announce_odbc.erl:629 msgid "Send announcement to all users" msgstr "Sänd meddelanden till alla användare" -#: mod_announce.erl:638 +#: mod_announce.erl:639 mod_announce_odbc.erl:631 msgid "Send announcement to all users on all hosts" msgstr "Sänd meddelanden till alla användare på alla värdar" -#: mod_announce.erl:640 +#: mod_announce.erl:641 mod_announce_odbc.erl:633 msgid "Send announcement to all online users" msgstr "Sänd meddelanden till alla inloggade användare" -#: mod_announce.erl:642 mod_configure.erl:1078 mod_configure.erl:1123 +#: mod_announce.erl:643 mod_announce_odbc.erl:635 mod_configure.erl:1078 +#: mod_configure.erl:1123 msgid "Send announcement to all online users on all hosts" msgstr "Sänd meddelanden till alla inloggade användare på alla värdar" -#: mod_announce.erl:644 +#: mod_announce.erl:645 mod_announce_odbc.erl:637 msgid "Set message of the day and send to online users" msgstr "Sätt dagens status meddelande och skicka till alla användare" -#: mod_announce.erl:646 +#: mod_announce.erl:647 mod_announce_odbc.erl:639 msgid "Set message of the day on all hosts and send to online users" msgstr "" "Sätt dagens status meddelande pa alla värdar och skicka till alla användare" -#: mod_announce.erl:648 +#: mod_announce.erl:649 mod_announce_odbc.erl:641 msgid "Update message of the day (don't send)" msgstr "Uppdatera dagens status meddelande (skicka inte)" -#: mod_announce.erl:650 +#: mod_announce.erl:651 mod_announce_odbc.erl:643 msgid "Update message of the day on all hosts (don't send)" msgstr "Uppdatera dagens status meddelande på alla värdar (skicka inte)" -#: mod_announce.erl:652 +#: mod_announce.erl:653 mod_announce_odbc.erl:645 msgid "Delete message of the day" msgstr "Ta bort dagens meddelande" -#: mod_announce.erl:654 +#: mod_announce.erl:655 mod_announce_odbc.erl:647 msgid "Delete message of the day on all hosts" msgstr "Ta bort dagens meddelande på alla värdar" @@ -126,7 +129,7 @@ msgstr "Ta bort dagens meddelande på alla värdar" msgid "Configuration" msgstr "Konfiguration" -#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1934 +#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1936 msgid "Database" msgstr "Databas" @@ -138,7 +141,7 @@ msgstr "Starta moduler" msgid "Stop Modules" msgstr "Stanna moduler" -#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1935 +#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1937 msgid "Backup" msgstr "Säkerhetskopiera" @@ -167,7 +170,7 @@ msgid "Shut Down Service" msgstr "Stäng ner servicen" #: mod_configure.erl:145 mod_configure.erl:518 mod_configure.erl:1197 -#: web/ejabberd_web_admin.erl:1528 +#: web/ejabberd_web_admin.erl:1527 msgid "Add User" msgstr "Lägg till användare" @@ -219,7 +222,7 @@ msgid "User Management" msgstr "Användarmanagement" #: mod_configure.erl:500 web/ejabberd_web_admin.erl:1058 -#: web/ejabberd_web_admin.erl:1463 +#: web/ejabberd_web_admin.erl:1462 msgid "Online Users" msgstr "Anslutna användare" @@ -231,15 +234,15 @@ msgstr "Alla användare" msgid "Outgoing s2s Connections" msgstr "Utgaende s2s anslutning" -#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1905 +#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1907 msgid "Running Nodes" msgstr "Körande noder" -#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1907 +#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1909 msgid "Stopped Nodes" msgstr "Stannade noder" -#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1951 +#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1953 msgid "Modules" msgstr "Moduler" @@ -370,15 +373,15 @@ msgstr "Åtkomstregler" #: mod_configure.erl:1200 mod_configure.erl:1222 mod_configure.erl:1234 #: mod_configure.erl:1246 mod_configure.erl:1258 mod_configure.erl:1275 -#: mod_configure.erl:1287 mod_configure.erl:1652 mod_configure.erl:1702 -#: mod_configure.erl:1723 mod_roster.erl:943 mod_roster_odbc.erl:1048 -#: mod_vcard.erl:466 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:442 +#: mod_configure.erl:1287 mod_configure.erl:1650 mod_configure.erl:1700 +#: mod_configure.erl:1721 mod_roster.erl:943 mod_roster_odbc.erl:1060 +#: mod_vcard.erl:472 mod_vcard_ldap.erl:554 mod_vcard_odbc.erl:448 msgid "Jabber ID" msgstr "Jabber ID" -#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1653 -#: mod_configure.erl:1865 mod_muc/mod_muc_room.erl:2970 mod_register.erl:235 -#: web/ejabberd_web_admin.erl:1521 +#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1651 +#: mod_configure.erl:1863 mod_muc/mod_muc_room.erl:3224 mod_register.erl:235 +#: web/ejabberd_web_admin.erl:1520 msgid "Password" msgstr "Lösenord" @@ -394,69 +397,70 @@ msgstr "Antal registrerade användare" msgid "Number of online users" msgstr "Antal inloggade användare" -#: mod_configure.erl:1684 web/ejabberd_web_admin.erl:1589 -#: web/ejabberd_web_admin.erl:1741 +#: mod_configure.erl:1682 web/ejabberd_web_admin.erl:1588 +#: web/ejabberd_web_admin.erl:1743 msgid "Never" msgstr "Aldrig" -#: mod_configure.erl:1698 web/ejabberd_web_admin.erl:1602 -#: web/ejabberd_web_admin.erl:1754 +#: mod_configure.erl:1696 web/ejabberd_web_admin.erl:1601 +#: web/ejabberd_web_admin.erl:1756 msgid "Online" msgstr "Ansluten" -#: mod_configure.erl:1703 +#: mod_configure.erl:1701 msgid "Last login" msgstr "Senaste login" -#: mod_configure.erl:1724 +#: mod_configure.erl:1722 msgid "Roster size" msgstr "Roster storlek" -#: mod_configure.erl:1725 +#: mod_configure.erl:1723 msgid "IP addresses" msgstr "IP adresser" -#: mod_configure.erl:1726 +#: mod_configure.erl:1724 msgid "Resources" msgstr "Resurser" -#: mod_configure.erl:1852 +#: mod_configure.erl:1850 msgid "Administration of " msgstr "Administration av " -#: mod_configure.erl:1855 +#: mod_configure.erl:1853 msgid "Action on user" msgstr "Handling mot användare" -#: mod_configure.erl:1859 +#: mod_configure.erl:1857 msgid "Edit Properties" msgstr "Redigera egenskaper" -#: mod_configure.erl:1862 web/ejabberd_web_admin.erl:1767 +#: mod_configure.erl:1860 web/ejabberd_web_admin.erl:1769 msgid "Remove User" msgstr "Ta bort användare" -#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:336 +#: mod_irc/mod_irc.erl:201 mod_irc/mod_irc_odbc.erl:196 +#: mod_muc/mod_muc.erl:336 mod_muc/mod_muc_odbc.erl:342 msgid "Access denied by service policy" msgstr "Åtkomst nekad enligt lokal policy" -#: mod_irc/mod_irc.erl:400 +#: mod_irc/mod_irc.erl:401 mod_irc/mod_irc_odbc.erl:398 msgid "IRC Transport" msgstr "IRC transport" -#: mod_irc/mod_irc.erl:427 +#: mod_irc/mod_irc.erl:428 mod_irc/mod_irc_odbc.erl:425 msgid "ejabberd IRC module" msgstr "ejabberd IRC-modul" -#: mod_irc/mod_irc.erl:558 +#: mod_irc/mod_irc.erl:559 mod_irc/mod_irc_odbc.erl:568 msgid "You need an x:data capable client to configure mod_irc settings" msgstr "Du behöer en klient som stöjer x:data för att konfigurera mod_irc" -#: mod_irc/mod_irc.erl:565 +#: mod_irc/mod_irc.erl:566 mod_irc/mod_irc_odbc.erl:575 msgid "Registration in mod_irc for " msgstr "mod_irc-registrering för " -#: mod_irc/mod_irc.erl:570 +#: mod_irc/mod_irc.erl:571 mod_irc/mod_irc_odbc.erl:580 msgid "" "Enter username, encodings, ports and passwords you wish to use for " "connecting to IRC servers" @@ -464,11 +468,11 @@ msgstr "" "Skriv in användarnamn och textkodning du vill använda för att ansluta till " "IRC-servrar" -#: mod_irc/mod_irc.erl:575 +#: mod_irc/mod_irc.erl:576 mod_irc/mod_irc_odbc.erl:585 msgid "IRC Username" msgstr "IRC-användarnamn" -#: mod_irc/mod_irc.erl:585 +#: mod_irc/mod_irc.erl:586 mod_irc/mod_irc_odbc.erl:595 msgid "" "If you want to specify different ports, passwords, encodings for IRC " "servers, fill this list with values in format '{\"irc server\", \"encoding" @@ -479,7 +483,7 @@ msgstr "" "i formatet '{\"irc server\", \"encoding\", port, \"password\"}'. Som " "standard används \"~s\", port ~p, no password." -#: mod_irc/mod_irc.erl:597 +#: mod_irc/mod_irc.erl:598 mod_irc/mod_irc_odbc.erl:607 msgid "" "Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." @@ -487,35 +491,36 @@ msgstr "" "Exempel: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." -#: mod_irc/mod_irc.erl:602 +#: mod_irc/mod_irc.erl:603 mod_irc/mod_irc_odbc.erl:612 msgid "Connections parameters" msgstr "Uppkopplingsparametrar" -#: mod_irc/mod_irc.erl:727 +#: mod_irc/mod_irc.erl:728 mod_irc/mod_irc_odbc.erl:757 msgid "Join IRC channel" msgstr "Lägg till IRC kanal" -#: mod_irc/mod_irc.erl:731 +#: mod_irc/mod_irc.erl:732 mod_irc/mod_irc_odbc.erl:761 msgid "IRC channel (don't put the first #)" msgstr "IRC kanal (skriv inte första #)" -#: mod_irc/mod_irc.erl:736 +#: mod_irc/mod_irc.erl:737 mod_irc/mod_irc_odbc.erl:766 msgid "IRC server" msgstr "IRC-användarnamn" -#: mod_irc/mod_irc.erl:769 mod_irc/mod_irc.erl:773 +#: mod_irc/mod_irc.erl:770 mod_irc/mod_irc.erl:774 +#: mod_irc/mod_irc_odbc.erl:799 mod_irc/mod_irc_odbc.erl:803 msgid "Join the IRC channel here." msgstr "Lägg till IRC kanal här." -#: mod_irc/mod_irc.erl:777 +#: mod_irc/mod_irc.erl:778 mod_irc/mod_irc_odbc.erl:807 msgid "Join the IRC channel in this Jabber ID: ~s" msgstr "Lägg till IRC kanal till detta Jabber ID: ~s" -#: mod_irc/mod_irc.erl:862 +#: mod_irc/mod_irc.erl:863 mod_irc/mod_irc_odbc.erl:904 msgid "IRC settings" msgstr "IRC Inställningar" -#: mod_irc/mod_irc.erl:867 +#: mod_irc/mod_irc.erl:868 mod_irc/mod_irc_odbc.erl:909 #, fuzzy msgid "" "Enter username and encodings you wish to use for connecting to IRC servers. " @@ -525,71 +530,72 @@ msgstr "" "Skriv in användarnamn och textkodning du vill använda för att ansluta till " "IRC-servrar" -#: mod_irc/mod_irc.erl:873 +#: mod_irc/mod_irc.erl:874 mod_irc/mod_irc_odbc.erl:915 msgid "IRC username" msgstr "IRC-användarnamn" -#: mod_irc/mod_irc.erl:922 +#: mod_irc/mod_irc.erl:923 mod_irc/mod_irc_odbc.erl:964 msgid "Password ~b" msgstr "Lösenord ~b" -#: mod_irc/mod_irc.erl:927 +#: mod_irc/mod_irc.erl:928 mod_irc/mod_irc_odbc.erl:969 msgid "Port ~b" msgstr "Port ~b" -#: mod_irc/mod_irc.erl:932 +#: mod_irc/mod_irc.erl:933 mod_irc/mod_irc_odbc.erl:974 msgid "Encoding for server ~b" msgstr "Encoding för server ~b" -#: mod_irc/mod_irc.erl:941 +#: mod_irc/mod_irc.erl:942 mod_irc/mod_irc_odbc.erl:983 msgid "Server ~b" msgstr "Server ~b" -#: mod_muc/mod_muc.erl:449 +#: mod_muc/mod_muc.erl:449 mod_muc/mod_muc_odbc.erl:456 msgid "Only service administrators are allowed to send service messages" msgstr "Endast administratörer får skicka tjänstmeddelanden" -#: mod_muc/mod_muc.erl:493 +#: mod_muc/mod_muc.erl:493 mod_muc/mod_muc_odbc.erl:500 msgid "Room creation is denied by service policy" msgstr "Skapandet av rum är förbjudet enligt lokal policy" -#: mod_muc/mod_muc.erl:500 +#: mod_muc/mod_muc.erl:500 mod_muc/mod_muc_odbc.erl:507 msgid "Conference room does not exist" msgstr "Rummet finns inte" -#: mod_muc/mod_muc.erl:581 +#: mod_muc/mod_muc.erl:582 mod_muc/mod_muc_odbc.erl:595 msgid "Chatrooms" msgstr "Chattrum" -#: mod_muc/mod_muc.erl:711 +#: mod_muc/mod_muc.erl:712 mod_muc/mod_muc_odbc.erl:729 #, fuzzy msgid "You need a client that supports x:data to register the nickname" msgstr "Du behöver en klient som stödjer x:data för att registrera smeknamn" -#: mod_muc/mod_muc.erl:717 +#: mod_muc/mod_muc.erl:718 mod_muc/mod_muc_odbc.erl:735 msgid "Nickname Registration at " msgstr "Registrera smeknamn på " -#: mod_muc/mod_muc.erl:721 +#: mod_muc/mod_muc.erl:722 mod_muc/mod_muc_odbc.erl:739 msgid "Enter nickname you want to register" msgstr "Skriv in smeknamnet du vill registrera" -#: mod_muc/mod_muc.erl:722 mod_roster.erl:944 mod_roster_odbc.erl:1049 -#: mod_vcard.erl:358 mod_vcard.erl:471 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:447 +#: mod_muc/mod_muc.erl:723 mod_muc/mod_muc_odbc.erl:740 +#: mod_muc/mod_muc_room.erl:3810 mod_roster.erl:944 mod_roster_odbc.erl:1061 +#: mod_vcard.erl:364 mod_vcard.erl:477 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:453 msgid "Nickname" msgstr "Smeknamn" -#: mod_muc/mod_muc.erl:761 mod_muc/mod_muc_room.erl:933 -#: mod_muc/mod_muc_room.erl:1577 +#: mod_muc/mod_muc.erl:762 mod_muc/mod_muc_odbc.erl:784 +#: mod_muc/mod_muc_room.erl:1064 mod_muc/mod_muc_room.erl:1787 msgid "That nickname is registered by another person" msgstr "Smeknamnet är reserverat" -#: mod_muc/mod_muc.erl:787 +#: mod_muc/mod_muc.erl:788 mod_muc/mod_muc_odbc.erl:811 msgid "You must fill in field \"Nickname\" in the form" msgstr "Du måste fylla i fält \"smeknamn\" i formen" -#: mod_muc/mod_muc.erl:807 +#: mod_muc/mod_muc.erl:808 mod_muc/mod_muc_odbc.erl:831 msgid "ejabberd MUC module" msgstr "ejabberd MUC modul" @@ -629,8 +635,8 @@ msgstr "har blivit kickad p.g.a en systemnerstängning" msgid "is now known as" msgstr "är känd som" -#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:689 -#: mod_muc/mod_muc_room.erl:2138 +#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:688 +#: mod_muc/mod_muc_room.erl:2393 msgid " has set the subject to: " msgstr " har satt ämnet till: " @@ -730,35 +736,51 @@ msgstr "November" msgid "December" msgstr "December" -#: mod_muc/mod_muc_log.erl:751 +#: mod_muc/mod_muc_log.erl:750 msgid "Room Configuration" msgstr "Rumkonfiguration" -#: mod_muc/mod_muc_log.erl:760 +#: mod_muc/mod_muc_log.erl:759 msgid "Room Occupants" msgstr "Antal besökare" -#: mod_muc/mod_muc_room.erl:170 +#: mod_muc/mod_muc_room.erl:174 msgid "Traffic rate limit is exceeded" msgstr "Trafikgränsen har överstigits" -#: mod_muc/mod_muc_room.erl:242 +#: mod_muc/mod_muc_room.erl:246 msgid "" "This participant is kicked from the room because he sent an error message" msgstr "" "Deltagaren har blivit kickad fran rummet p.g.a att han skickade ett " "errormeddelande" -#: mod_muc/mod_muc_room.erl:251 +#: mod_muc/mod_muc_room.erl:255 msgid "It is not allowed to send private messages to the conference" msgstr "" "Det är inte tillåtet att skicka privata medelanden till den här konferensen" -#: mod_muc/mod_muc_room.erl:296 +#: mod_muc/mod_muc_room.erl:332 +msgid "Please, wait for a while before sending new voice request" +msgstr "" + +#: mod_muc/mod_muc_room.erl:347 +msgid "Voice requests are disabled in this conference" +msgstr "" + +#: mod_muc/mod_muc_room.erl:364 +msgid "Failed to extract JID from your voice request approval" +msgstr "" + +#: mod_muc/mod_muc_room.erl:393 +msgid "Only moderators can approve voice requests" +msgstr "" + +#: mod_muc/mod_muc_room.erl:408 msgid "Improper message type" msgstr "Felaktig medelandetyp" -#: mod_muc/mod_muc_room.erl:406 +#: mod_muc/mod_muc_room.erl:518 msgid "" "This participant is kicked from the room because he sent an error message to " "another participant" @@ -766,33 +788,33 @@ msgstr "" "Deltagaren har blivit kickad från rummet p.g.a att han skickade ett " "errormeddelande till en annan deltagare" -#: mod_muc/mod_muc_room.erl:419 +#: mod_muc/mod_muc_room.erl:531 msgid "It is not allowed to send private messages of type \"groupchat\"" msgstr "" "Det är inte tillåtet att skicka privata medelanden med typen \"groupchat\"" -#: mod_muc/mod_muc_room.erl:431 mod_muc/mod_muc_room.erl:486 +#: mod_muc/mod_muc_room.erl:543 mod_muc/mod_muc_room.erl:611 msgid "Recipient is not in the conference room" msgstr "Mottagaren finns inte i rummet" -#: mod_muc/mod_muc_room.erl:451 mod_muc/mod_muc_room.erl:829 -#: mod_muc/mod_muc_room.erl:3609 -msgid "Only occupants are allowed to send messages to the conference" -msgstr "Utomstående får inte skicka medelanden till den här konferensen" - -#: mod_muc/mod_muc_room.erl:460 +#: mod_muc/mod_muc_room.erl:564 mod_muc/mod_muc_room.erl:585 msgid "It is not allowed to send private messages" msgstr "Det ar inte tillåtet att skicka privata meddelanden" -#: mod_muc/mod_muc_room.erl:509 +#: mod_muc/mod_muc_room.erl:576 mod_muc/mod_muc_room.erl:956 +#: mod_muc/mod_muc_room.erl:4040 +msgid "Only occupants are allowed to send messages to the conference" +msgstr "Utomstående får inte skicka medelanden till den här konferensen" + +#: mod_muc/mod_muc_room.erl:634 msgid "Only occupants are allowed to send queries to the conference" msgstr "Utomstående får inte skicka iq-queries till den här konferensen" -#: mod_muc/mod_muc_room.erl:521 +#: mod_muc/mod_muc_room.erl:646 msgid "Queries to the conference members are not allowed in this room" msgstr "Det är förbjudet att skicka iq-queries till konferensdeltagare" -#: mod_muc/mod_muc_room.erl:805 +#: mod_muc/mod_muc_room.erl:932 msgid "" "Only moderators and participants are allowed to change the subject in this " "room" @@ -800,202 +822,238 @@ msgstr "" "Endast moderatorer och deltagare har tillåtelse att ändra ämnet i det här " "rummet" -#: mod_muc/mod_muc_room.erl:810 +#: mod_muc/mod_muc_room.erl:937 #, fuzzy msgid "Only moderators are allowed to change the subject in this room" msgstr "Endast moderatorer får ändra ämnet i det här rummet" -#: mod_muc/mod_muc_room.erl:820 +#: mod_muc/mod_muc_room.erl:947 msgid "Visitors are not allowed to send messages to all occupants" msgstr "Besökare får inte skicka medelande till alla" -#: mod_muc/mod_muc_room.erl:891 +#: mod_muc/mod_muc_room.erl:1021 msgid "" "This participant is kicked from the room because he sent an error presence" msgstr "" "Denna deltagaren är kickad från rummet p.g.a att han skickade en errorstatus" -#: mod_muc/mod_muc_room.erl:909 +#: mod_muc/mod_muc_room.erl:1040 msgid "Visitors are not allowed to change their nicknames in this room" msgstr "Det är inte tillåtet for gäster att ändra sina smeknamn i detta rummet" -#: mod_muc/mod_muc_room.erl:922 mod_muc/mod_muc_room.erl:1569 +#: mod_muc/mod_muc_room.erl:1053 mod_muc/mod_muc_room.erl:1779 #, fuzzy msgid "That nickname is already in use by another occupant" msgstr "Smeknamnet används redan" -#: mod_muc/mod_muc_room.erl:1558 +#: mod_muc/mod_muc_room.erl:1768 msgid "You have been banned from this room" msgstr "Du har blivit bannlyst från det här rummet" -#: mod_muc/mod_muc_room.erl:1561 +#: mod_muc/mod_muc_room.erl:1771 msgid "Membership is required to enter this room" msgstr "Du måste vara medlem för att komma in i det här rummet" -#: mod_muc/mod_muc_room.erl:1597 +#: mod_muc/mod_muc_room.erl:1807 msgid "This room is not anonymous" msgstr "Detta rum är inte anonymt" -#: mod_muc/mod_muc_room.erl:1623 +#: mod_muc/mod_muc_room.erl:1833 #, fuzzy msgid "A password is required to enter this room" msgstr "Lösenord erfordras" -#: mod_muc/mod_muc_room.erl:1645 mod_register.erl:246 +#: mod_muc/mod_muc_room.erl:1855 mod_register.erl:246 msgid "Too many CAPTCHA requests" msgstr "" -#: mod_muc/mod_muc_room.erl:1654 -msgid "Unable to generate a captcha" -msgstr "Kunde inte generera ett captcha" +#: mod_muc/mod_muc_room.erl:1864 mod_register.erl:251 +#, fuzzy +msgid "Unable to generate a CAPTCHA" +msgstr "Kunde inte generera ett CAPTCHA" -#: mod_muc/mod_muc_room.erl:1664 +#: mod_muc/mod_muc_room.erl:1874 msgid "Incorrect password" msgstr "Fel lösenord" -#: mod_muc/mod_muc_room.erl:2193 +#: mod_muc/mod_muc_room.erl:2448 msgid "Administrator privileges required" msgstr "Administrationsprivilegier krävs" -#: mod_muc/mod_muc_room.erl:2208 +#: mod_muc/mod_muc_room.erl:2463 msgid "Moderator privileges required" msgstr "Moderatorprivilegier krävs" -#: mod_muc/mod_muc_room.erl:2363 +#: mod_muc/mod_muc_room.erl:2619 msgid "Jabber ID ~s is invalid" msgstr "Otillåtet Jabber ID ~s" -#: mod_muc/mod_muc_room.erl:2377 +#: mod_muc/mod_muc_room.erl:2633 msgid "Nickname ~s does not exist in the room" msgstr "Smeknamnet ~s existerar inte i det här rummet" -#: mod_muc/mod_muc_room.erl:2403 mod_muc/mod_muc_room.erl:2797 +#: mod_muc/mod_muc_room.erl:2659 mod_muc/mod_muc_room.erl:3049 msgid "Invalid affiliation: ~s" msgstr "Ogiltlig rang: ~s" -#: mod_muc/mod_muc_room.erl:2460 +#: mod_muc/mod_muc_room.erl:2713 msgid "Invalid role: ~s" msgstr "Ogiltlig roll: ~s" -#: mod_muc/mod_muc_room.erl:2774 mod_muc/mod_muc_room.erl:2810 +#: mod_muc/mod_muc_room.erl:3026 mod_muc/mod_muc_room.erl:3062 msgid "Owner privileges required" msgstr "Ägarprivilegier krävs" -#: mod_muc/mod_muc_room.erl:2941 +#: mod_muc/mod_muc_room.erl:3195 msgid "Configuration of room ~s" msgstr "Konfiguration för ~s" -#: mod_muc/mod_muc_room.erl:2946 +#: mod_muc/mod_muc_room.erl:3200 msgid "Room title" msgstr "Rumstitel" -#: mod_muc/mod_muc_room.erl:2949 mod_muc/mod_muc_room.erl:3388 +#: mod_muc/mod_muc_room.erl:3203 mod_muc/mod_muc_room.erl:3692 #, fuzzy msgid "Room description" msgstr "Beskrivning:" -#: mod_muc/mod_muc_room.erl:2956 +#: mod_muc/mod_muc_room.erl:3210 msgid "Make room persistent" msgstr "Gör rummet permanent" -#: mod_muc/mod_muc_room.erl:2961 +#: mod_muc/mod_muc_room.erl:3215 msgid "Make room public searchable" msgstr "Gör rummet publikt sökbart" -#: mod_muc/mod_muc_room.erl:2964 +#: mod_muc/mod_muc_room.erl:3218 msgid "Make participants list public" msgstr "Gör deltagarlistan publik" -#: mod_muc/mod_muc_room.erl:2967 +#: mod_muc/mod_muc_room.erl:3221 msgid "Make room password protected" msgstr "Gör losenorden i rummet publika" -#: mod_muc/mod_muc_room.erl:2978 +#: mod_muc/mod_muc_room.erl:3232 msgid "Maximum Number of Occupants" msgstr "Maximalt antal av användare" -#: mod_muc/mod_muc_room.erl:2985 +#: mod_muc/mod_muc_room.erl:3239 msgid "No limit" msgstr "Ingen gräns" -#: mod_muc/mod_muc_room.erl:2996 +#: mod_muc/mod_muc_room.erl:3250 msgid "Present real Jabber IDs to" msgstr "Nuvarande äkta Jabber IDs till" -#: mod_muc/mod_muc_room.erl:3004 +#: mod_muc/mod_muc_room.erl:3258 mod_muc/mod_muc_room.erl:3292 msgid "moderators only" msgstr "endast moderatorer" -#: mod_muc/mod_muc_room.erl:3006 +#: mod_muc/mod_muc_room.erl:3260 mod_muc/mod_muc_room.erl:3294 msgid "anyone" msgstr "Vemsomhelst" -#: mod_muc/mod_muc_room.erl:3008 +#: mod_muc/mod_muc_room.erl:3262 msgid "Make room members-only" msgstr "Gör om rummet till endast medlemmar" -#: mod_muc/mod_muc_room.erl:3011 +#: mod_muc/mod_muc_room.erl:3265 msgid "Make room moderated" msgstr "Gör rummet modererat" -#: mod_muc/mod_muc_room.erl:3014 +#: mod_muc/mod_muc_room.erl:3268 msgid "Default users as participants" msgstr "Gör om användare till deltagare" -#: mod_muc/mod_muc_room.erl:3017 +#: mod_muc/mod_muc_room.erl:3271 msgid "Allow users to change the subject" msgstr "Tillåt användare att byta ämne" -#: mod_muc/mod_muc_room.erl:3020 +#: mod_muc/mod_muc_room.erl:3274 msgid "Allow users to send private messages" msgstr "Tillåt användare att skicka privata meddelanden" -#: mod_muc/mod_muc_room.erl:3023 +#: mod_muc/mod_muc_room.erl:3279 +#, fuzzy +msgid "Allow visitors to send private messages to" +msgstr "Tillåt användare att skicka privata meddelanden" + +#: mod_muc/mod_muc_room.erl:3290 +msgid "nobody" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3296 msgid "Allow users to query other users" msgstr "Tillåt användare att söka efter andra användare" -#: mod_muc/mod_muc_room.erl:3026 +#: mod_muc/mod_muc_room.erl:3299 msgid "Allow users to send invites" msgstr "Tillåt användare att skicka inbjudningar" -#: mod_muc/mod_muc_room.erl:3029 +#: mod_muc/mod_muc_room.erl:3302 msgid "Allow visitors to send status text in presence updates" msgstr "Tillåt gäster att skicka statustext som uppdatering" -#: mod_muc/mod_muc_room.erl:3032 +#: mod_muc/mod_muc_room.erl:3305 msgid "Allow visitors to change nickname" msgstr "Tillåt gäster att kunna ändra smeknamn" -#: mod_muc/mod_muc_room.erl:3038 +#: mod_muc/mod_muc_room.erl:3308 #, fuzzy -msgid "Make room captcha protected" +msgid "Allow visitors to send voice requests" +msgstr "Tillåt användare att skicka inbjudningar" + +#: mod_muc/mod_muc_room.erl:3311 +msgid "Minimum interval between voice requests (in seconds)" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3317 +#, fuzzy +msgid "Make room CAPTCHA protected" msgstr "Gör losenorden i rummet publika" -#: mod_muc/mod_muc_room.erl:3043 +#: mod_muc/mod_muc_room.erl:3322 msgid "Exclude Jabber IDs from CAPTCHA challenge" msgstr "" -#: mod_muc/mod_muc_room.erl:3050 +#: mod_muc/mod_muc_room.erl:3329 msgid "Enable logging" msgstr "Möjliggör login" -#: mod_muc/mod_muc_room.erl:3058 +#: mod_muc/mod_muc_room.erl:3337 msgid "You need an x:data capable client to configure room" msgstr "Du behöver en klient som stödjer x:data för att konfiguera detta rum" -#: mod_muc/mod_muc_room.erl:3390 +#: mod_muc/mod_muc_room.erl:3694 msgid "Number of occupants" msgstr "Antal besökare" -#: mod_muc/mod_muc_room.erl:3446 +#: mod_muc/mod_muc_room.erl:3750 msgid "private, " msgstr "privat, " -#: mod_muc/mod_muc_room.erl:3529 +#: mod_muc/mod_muc_room.erl:3799 +msgid "Voice request" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3803 +msgid "Either approve or decline the voice request." +msgstr "" + +#: mod_muc/mod_muc_room.erl:3809 +#, fuzzy +msgid "User JID" +msgstr "Användare " + +#: mod_muc/mod_muc_room.erl:3811 +msgid "Grant voice to this person?" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3960 msgid "~s invites you to the room ~s" msgstr "~s bjöd in dig till rummet ~s" -#: mod_muc/mod_muc_room.erl:3538 +#: mod_muc/mod_muc_room.erl:3969 msgid "the password is" msgstr "Lösenordet är" @@ -1009,14 +1067,15 @@ msgid "~s's Offline Messages Queue" msgstr "~s's offline meddelandekö" #: mod_offline.erl:563 mod_offline_odbc.erl:411 mod_roster.erl:987 -#: mod_roster_odbc.erl:1092 mod_shared_roster.erl:896 -#: mod_shared_roster.erl:1005 web/ejabberd_web_admin.erl:833 +#: mod_roster_odbc.erl:1104 mod_shared_roster.erl:901 +#: mod_shared_roster.erl:1010 mod_shared_roster_odbc.erl:930 +#: mod_shared_roster_odbc.erl:1039 web/ejabberd_web_admin.erl:833 #: web/ejabberd_web_admin.erl:874 web/ejabberd_web_admin.erl:942 #: web/ejabberd_web_admin.erl:978 web/ejabberd_web_admin.erl:1019 -#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1758 -#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1961 -#: web/ejabberd_web_admin.erl:2030 web/ejabberd_web_admin.erl:2134 -#: web/ejabberd_web_admin.erl:2159 web/ejabberd_web_admin.erl:2247 +#: web/ejabberd_web_admin.erl:1508 web/ejabberd_web_admin.erl:1760 +#: web/ejabberd_web_admin.erl:1931 web/ejabberd_web_admin.erl:1963 +#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2135 +#: web/ejabberd_web_admin.erl:2160 web/ejabberd_web_admin.erl:2248 msgid "Submitted" msgstr "Skicka in" @@ -1036,8 +1095,9 @@ msgstr "Till" msgid "Packet" msgstr "Paket" -#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:903 -#: web/ejabberd_web_admin.erl:882 web/ejabberd_web_admin.erl:986 +#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:908 +#: mod_shared_roster_odbc.erl:937 web/ejabberd_web_admin.erl:882 +#: web/ejabberd_web_admin.erl:986 msgid "Delete Selected" msgstr "Tabort valda" @@ -1054,104 +1114,104 @@ msgstr "Offline meddelanden" msgid "ejabberd SOCKS5 Bytestreams module" msgstr "ejabberd SOCKS5 Bytestrem modul" -#: mod_pubsub/mod_pubsub.erl:1119 mod_pubsub/mod_pubsub_odbc.erl:928 +#: mod_pubsub/mod_pubsub.erl:1120 mod_pubsub/mod_pubsub_odbc.erl:929 msgid "Publish-Subscribe" msgstr "Publikprenumeration" -#: mod_pubsub/mod_pubsub.erl:1213 mod_pubsub/mod_pubsub_odbc.erl:1024 +#: mod_pubsub/mod_pubsub.erl:1214 mod_pubsub/mod_pubsub_odbc.erl:1025 msgid "ejabberd Publish-Subscribe module" msgstr "ejabberd publikprenumerations modul" -#: mod_pubsub/mod_pubsub.erl:1496 mod_pubsub/mod_pubsub_odbc.erl:1311 +#: mod_pubsub/mod_pubsub.erl:1497 mod_pubsub/mod_pubsub_odbc.erl:1312 msgid "PubSub subscriber request" msgstr "Pubsub prenumerationsforfrågan" -#: mod_pubsub/mod_pubsub.erl:1498 mod_pubsub/mod_pubsub_odbc.erl:1313 +#: mod_pubsub/mod_pubsub.erl:1499 mod_pubsub/mod_pubsub_odbc.erl:1314 msgid "Choose whether to approve this entity's subscription." msgstr "Välj om du vill godkänna hela denna prenumertion." -#: mod_pubsub/mod_pubsub.erl:1504 mod_pubsub/mod_pubsub_odbc.erl:1319 +#: mod_pubsub/mod_pubsub.erl:1505 mod_pubsub/mod_pubsub_odbc.erl:1320 msgid "Node ID" msgstr "Node ID" -#: mod_pubsub/mod_pubsub.erl:1509 mod_pubsub/mod_pubsub_odbc.erl:1324 +#: mod_pubsub/mod_pubsub.erl:1510 mod_pubsub/mod_pubsub_odbc.erl:1325 msgid "Subscriber Address" msgstr "Prenumerationsadress" -#: mod_pubsub/mod_pubsub.erl:1515 mod_pubsub/mod_pubsub_odbc.erl:1330 +#: mod_pubsub/mod_pubsub.erl:1516 mod_pubsub/mod_pubsub_odbc.erl:1331 msgid "Allow this Jabber ID to subscribe to this pubsub node?" msgstr "Tillåt denna Jabber ID att prenumerera på denna pubsub node" -#: mod_pubsub/mod_pubsub.erl:3416 mod_pubsub/mod_pubsub_odbc.erl:3229 +#: mod_pubsub/mod_pubsub.erl:3474 mod_pubsub/mod_pubsub_odbc.erl:3287 msgid "Deliver payloads with event notifications" msgstr "Skicka innehåll tillsammans med notifikationer" -#: mod_pubsub/mod_pubsub.erl:3417 mod_pubsub/mod_pubsub_odbc.erl:3230 +#: mod_pubsub/mod_pubsub.erl:3475 mod_pubsub/mod_pubsub_odbc.erl:3288 msgid "Deliver event notifications" msgstr "Skicka eventnotifikation" -#: mod_pubsub/mod_pubsub.erl:3418 mod_pubsub/mod_pubsub_odbc.erl:3231 +#: mod_pubsub/mod_pubsub.erl:3476 mod_pubsub/mod_pubsub_odbc.erl:3289 msgid "Notify subscribers when the node configuration changes" msgstr "Meddela prenumeranter när nodens konfiguration ändras" -#: mod_pubsub/mod_pubsub.erl:3419 mod_pubsub/mod_pubsub_odbc.erl:3232 +#: mod_pubsub/mod_pubsub.erl:3477 mod_pubsub/mod_pubsub_odbc.erl:3290 msgid "Notify subscribers when the node is deleted" msgstr "Meddela prenumeranter när noden tas bort" -#: mod_pubsub/mod_pubsub.erl:3420 mod_pubsub/mod_pubsub_odbc.erl:3233 +#: mod_pubsub/mod_pubsub.erl:3478 mod_pubsub/mod_pubsub_odbc.erl:3291 msgid "Notify subscribers when items are removed from the node" msgstr "Meddela prenumeranter när dataposter tas bort från noden" -#: mod_pubsub/mod_pubsub.erl:3421 mod_pubsub/mod_pubsub_odbc.erl:3234 +#: mod_pubsub/mod_pubsub.erl:3479 mod_pubsub/mod_pubsub_odbc.erl:3292 msgid "Persist items to storage" msgstr "Spara dataposter permanent" -#: mod_pubsub/mod_pubsub.erl:3422 mod_pubsub/mod_pubsub_odbc.erl:3235 +#: mod_pubsub/mod_pubsub.erl:3480 mod_pubsub/mod_pubsub_odbc.erl:3293 msgid "A friendly name for the node" msgstr "Ett vänligt namn for noden" -#: mod_pubsub/mod_pubsub.erl:3423 mod_pubsub/mod_pubsub_odbc.erl:3236 +#: mod_pubsub/mod_pubsub.erl:3481 mod_pubsub/mod_pubsub_odbc.erl:3294 msgid "Max # of items to persist" msgstr "Högsta antal dataposter som sparas" -#: mod_pubsub/mod_pubsub.erl:3424 mod_pubsub/mod_pubsub_odbc.erl:3237 +#: mod_pubsub/mod_pubsub.erl:3482 mod_pubsub/mod_pubsub_odbc.erl:3295 msgid "Whether to allow subscriptions" msgstr "Tillåta prenumerationer?" -#: mod_pubsub/mod_pubsub.erl:3425 mod_pubsub/mod_pubsub_odbc.erl:3238 +#: mod_pubsub/mod_pubsub.erl:3483 mod_pubsub/mod_pubsub_odbc.erl:3296 msgid "Specify the access model" msgstr "Specificera accessmodellen" -#: mod_pubsub/mod_pubsub.erl:3428 mod_pubsub/mod_pubsub_odbc.erl:3241 +#: mod_pubsub/mod_pubsub.erl:3486 mod_pubsub/mod_pubsub_odbc.erl:3299 msgid "Roster groups allowed to subscribe" msgstr "Rostergrupper tillåts att prenumerera" -#: mod_pubsub/mod_pubsub.erl:3429 mod_pubsub/mod_pubsub_odbc.erl:3242 +#: mod_pubsub/mod_pubsub.erl:3487 mod_pubsub/mod_pubsub_odbc.erl:3300 msgid "Specify the publisher model" msgstr "Ange publiceringsmodell" -#: mod_pubsub/mod_pubsub.erl:3431 mod_pubsub/mod_pubsub_odbc.erl:3244 +#: mod_pubsub/mod_pubsub.erl:3489 mod_pubsub/mod_pubsub_odbc.erl:3302 msgid "Purge all items when the relevant publisher goes offline" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3432 mod_pubsub/mod_pubsub_odbc.erl:3245 +#: mod_pubsub/mod_pubsub.erl:3490 mod_pubsub/mod_pubsub_odbc.erl:3303 #, fuzzy msgid "Specify the event message type" msgstr "Specificera accessmodellen" -#: mod_pubsub/mod_pubsub.erl:3434 mod_pubsub/mod_pubsub_odbc.erl:3247 +#: mod_pubsub/mod_pubsub.erl:3492 mod_pubsub/mod_pubsub_odbc.erl:3305 msgid "Max payload size in bytes" msgstr "Högsta innehållsstorlek i bytes" -#: mod_pubsub/mod_pubsub.erl:3435 mod_pubsub/mod_pubsub_odbc.erl:3248 +#: mod_pubsub/mod_pubsub.erl:3493 mod_pubsub/mod_pubsub_odbc.erl:3306 msgid "When to send the last published item" msgstr "När att skicka senast publicerade ämne" -#: mod_pubsub/mod_pubsub.erl:3437 mod_pubsub/mod_pubsub_odbc.erl:3250 +#: mod_pubsub/mod_pubsub.erl:3495 mod_pubsub/mod_pubsub_odbc.erl:3308 msgid "Only deliver notifications to available users" msgstr "Skicka notifikationer bara till uppkopplade användare" -#: mod_pubsub/mod_pubsub.erl:3438 mod_pubsub/mod_pubsub_odbc.erl:3251 +#: mod_pubsub/mod_pubsub.erl:3496 mod_pubsub/mod_pubsub_odbc.erl:3309 msgid "The collections with which a node is affiliated" msgstr "" @@ -1168,16 +1228,11 @@ msgstr "Du behöver en klient som stödjer x:data för att registrera smeknamn" msgid "Choose a username and password to register with this server" msgstr "Välj ett användarnamn och lösenord för att registrera mot denna server" -#: mod_register.erl:230 mod_vcard.erl:358 mod_vcard_odbc.erl:336 -#: web/ejabberd_web_admin.erl:1516 web/ejabberd_web_admin.erl:1573 +#: mod_register.erl:230 mod_vcard.erl:364 mod_vcard_odbc.erl:342 +#: web/ejabberd_web_admin.erl:1515 web/ejabberd_web_admin.erl:1572 msgid "User" msgstr "Användarnamn" -#: mod_register.erl:251 -#, fuzzy -msgid "Unable to generate a CAPTCHA" -msgstr "Kunde inte generera ett captcha" - #: mod_register.erl:316 mod_register.erl:361 #, fuzzy msgid "The password is too weak" @@ -1187,120 +1242,123 @@ msgstr "Lösenordet är" msgid "Users are not allowed to register accounts so quickly" msgstr "Det är inte tillåtet för användare att skapa konton så fort" -#: mod_roster.erl:938 mod_roster_odbc.erl:1043 web/ejabberd_web_admin.erl:1699 -#: web/ejabberd_web_admin.erl:1884 web/ejabberd_web_admin.erl:1895 -#: web/ejabberd_web_admin.erl:2218 +#: mod_roster.erl:938 mod_roster_odbc.erl:1055 web/ejabberd_web_admin.erl:1701 +#: web/ejabberd_web_admin.erl:1886 web/ejabberd_web_admin.erl:1897 +#: web/ejabberd_web_admin.erl:2219 msgid "None" msgstr "Inga" -#: mod_roster.erl:945 mod_roster_odbc.erl:1050 +#: mod_roster.erl:945 mod_roster_odbc.erl:1062 msgid "Subscription" msgstr "Prenumeration" -#: mod_roster.erl:946 mod_roster_odbc.erl:1051 +#: mod_roster.erl:946 mod_roster_odbc.erl:1063 msgid "Pending" msgstr "Ännu inte godkända" -#: mod_roster.erl:947 mod_roster_odbc.erl:1052 +#: mod_roster.erl:947 mod_roster_odbc.erl:1064 msgid "Groups" msgstr "Grupper" -#: mod_roster.erl:974 mod_roster_odbc.erl:1079 +#: mod_roster.erl:974 mod_roster_odbc.erl:1091 msgid "Validate" msgstr "Validera" -#: mod_roster.erl:982 mod_roster_odbc.erl:1087 +#: mod_roster.erl:982 mod_roster_odbc.erl:1099 msgid "Remove" msgstr "Ta bort" -#: mod_roster.erl:985 mod_roster_odbc.erl:1090 +#: mod_roster.erl:985 mod_roster_odbc.erl:1102 msgid "Roster of " msgstr "Kontaktlista för " -#: mod_roster.erl:988 mod_roster_odbc.erl:1093 mod_shared_roster.erl:897 -#: mod_shared_roster.erl:1006 web/ejabberd_web_admin.erl:834 +#: mod_roster.erl:988 mod_roster_odbc.erl:1105 mod_shared_roster.erl:902 +#: mod_shared_roster.erl:1011 mod_shared_roster_odbc.erl:931 +#: mod_shared_roster_odbc.erl:1040 web/ejabberd_web_admin.erl:834 #: web/ejabberd_web_admin.erl:875 web/ejabberd_web_admin.erl:943 #: web/ejabberd_web_admin.erl:979 web/ejabberd_web_admin.erl:1020 -#: web/ejabberd_web_admin.erl:1510 web/ejabberd_web_admin.erl:1759 -#: web/ejabberd_web_admin.erl:1930 web/ejabberd_web_admin.erl:2135 -#: web/ejabberd_web_admin.erl:2160 +#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1761 +#: web/ejabberd_web_admin.erl:1932 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2161 msgid "Bad format" msgstr "Dåligt format" -#: mod_roster.erl:995 mod_roster_odbc.erl:1100 +#: mod_roster.erl:995 mod_roster_odbc.erl:1112 msgid "Add Jabber ID" msgstr "Lägg till Jabber ID" -#: mod_roster.erl:1094 mod_roster_odbc.erl:1199 +#: mod_roster.erl:1094 mod_roster_odbc.erl:1211 msgid "Roster" msgstr "Kontaktlista" -#: mod_shared_roster.erl:852 mod_shared_roster.erl:894 -#: mod_shared_roster.erl:1002 +#: mod_shared_roster.erl:857 mod_shared_roster.erl:899 +#: mod_shared_roster.erl:1007 mod_shared_roster_odbc.erl:886 +#: mod_shared_roster_odbc.erl:928 mod_shared_roster_odbc.erl:1036 msgid "Shared Roster Groups" msgstr "Delade Rostergrupper" -#: mod_shared_roster.erl:890 web/ejabberd_web_admin.erl:1366 -#: web/ejabberd_web_admin.erl:2460 +#: mod_shared_roster.erl:895 mod_shared_roster_odbc.erl:924 +#: web/ejabberd_web_admin.erl:1365 web/ejabberd_web_admin.erl:2461 msgid "Add New" msgstr "Lägg till ny" -#: mod_shared_roster.erl:973 +#: mod_shared_roster.erl:978 mod_shared_roster_odbc.erl:1007 msgid "Name:" msgstr "Namn:" -#: mod_shared_roster.erl:978 +#: mod_shared_roster.erl:983 mod_shared_roster_odbc.erl:1012 msgid "Description:" msgstr "Beskrivning:" -#: mod_shared_roster.erl:986 +#: mod_shared_roster.erl:991 mod_shared_roster_odbc.erl:1020 msgid "Members:" msgstr "Medlemmar:" -#: mod_shared_roster.erl:994 +#: mod_shared_roster.erl:999 mod_shared_roster_odbc.erl:1028 msgid "Displayed Groups:" msgstr "Visade grupper:" -#: mod_shared_roster.erl:1003 +#: mod_shared_roster.erl:1008 mod_shared_roster_odbc.erl:1037 msgid "Group " msgstr "Grupp " -#: mod_shared_roster.erl:1012 web/ejabberd_web_admin.erl:840 -#: web/ejabberd_web_admin.erl:884 web/ejabberd_web_admin.erl:949 -#: web/ejabberd_web_admin.erl:1026 web/ejabberd_web_admin.erl:2015 +#: mod_shared_roster.erl:1017 mod_shared_roster_odbc.erl:1046 +#: web/ejabberd_web_admin.erl:840 web/ejabberd_web_admin.erl:884 +#: web/ejabberd_web_admin.erl:949 web/ejabberd_web_admin.erl:1026 +#: web/ejabberd_web_admin.erl:2017 msgid "Submit" msgstr "Skicka" -#: mod_vcard.erl:165 mod_vcard_ldap.erl:237 mod_vcard_odbc.erl:129 +#: mod_vcard.erl:165 mod_vcard_ldap.erl:238 mod_vcard_odbc.erl:129 msgid "Erlang Jabber Server" msgstr "Erlang Jabber Server" -#: mod_vcard.erl:358 mod_vcard.erl:472 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:448 +#: mod_vcard.erl:364 mod_vcard.erl:478 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:454 msgid "Birthday" msgstr "Födelsedag" -#: mod_vcard.erl:358 mod_vcard.erl:474 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:450 +#: mod_vcard.erl:364 mod_vcard.erl:480 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:456 msgid "City" msgstr "Stad" -#: mod_vcard.erl:358 mod_vcard.erl:473 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:449 +#: mod_vcard.erl:364 mod_vcard.erl:479 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:455 msgid "Country" msgstr "Land" -#: mod_vcard.erl:358 mod_vcard.erl:475 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:451 +#: mod_vcard.erl:364 mod_vcard.erl:481 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:457 msgid "Email" msgstr "Email" -#: mod_vcard.erl:358 mod_vcard.erl:470 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:446 +#: mod_vcard.erl:364 mod_vcard.erl:476 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:452 msgid "Family Name" msgstr "Efternamn" -#: mod_vcard.erl:358 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_odbc.erl:342 msgid "" "Fill in the form to search for any matching Jabber User (Add * to the end of " "field to match substring)" @@ -1308,52 +1366,52 @@ msgstr "" "Fyll i formuläret för att söka efter en användare (lägg till * på slutet av " "fältet för att hitta alla som börjar så)" -#: mod_vcard.erl:358 mod_vcard.erl:467 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:443 +#: mod_vcard.erl:364 mod_vcard.erl:473 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:449 msgid "Full Name" msgstr "Fullständigt namn" -#: mod_vcard.erl:358 mod_vcard.erl:469 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:445 +#: mod_vcard.erl:364 mod_vcard.erl:475 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:451 msgid "Middle Name" msgstr "Mellannamn" -#: mod_vcard.erl:358 mod_vcard.erl:468 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:444 web/ejabberd_web_admin.erl:2004 +#: mod_vcard.erl:364 mod_vcard.erl:474 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:450 web/ejabberd_web_admin.erl:2006 msgid "Name" msgstr "Namn" -#: mod_vcard.erl:358 mod_vcard.erl:476 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:452 +#: mod_vcard.erl:364 mod_vcard.erl:482 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:458 msgid "Organization Name" msgstr "Organisationsnamn" -#: mod_vcard.erl:358 mod_vcard.erl:477 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:453 +#: mod_vcard.erl:364 mod_vcard.erl:483 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:459 msgid "Organization Unit" msgstr "Organisationsenhet" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "Search users in " msgstr "Sök efter användare på " -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "You need an x:data capable client to search" msgstr "Du behöver en klient som stödjer x:data, för att kunna söka" -#: mod_vcard.erl:383 mod_vcard_ldap.erl:483 mod_vcard_odbc.erl:361 +#: mod_vcard.erl:389 mod_vcard_ldap.erl:487 mod_vcard_odbc.erl:367 msgid "vCard User Search" msgstr "vCard användare sök" -#: mod_vcard.erl:439 mod_vcard_ldap.erl:537 mod_vcard_odbc.erl:415 +#: mod_vcard.erl:445 mod_vcard_ldap.erl:541 mod_vcard_odbc.erl:421 msgid "ejabberd vCard module" msgstr "ejabberd vCard-modul" -#: mod_vcard.erl:463 mod_vcard_ldap.erl:547 mod_vcard_odbc.erl:439 +#: mod_vcard.erl:469 mod_vcard_ldap.erl:551 mod_vcard_odbc.erl:445 msgid "Search Results for " msgstr "Sökresultat för" -#: mod_vcard_ldap.erl:458 +#: mod_vcard_ldap.erl:462 msgid "Fill in fields to search for any matching Jabber User" msgstr "Fyll i fält för att söka efter jabberanvändare" @@ -1414,7 +1472,7 @@ msgstr "Visa normal tabell" msgid "Show Integral Table" msgstr "Visa kumulativ tabell" -#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1937 +#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1939 msgid "Statistics" msgstr "Statistik" @@ -1426,116 +1484,116 @@ msgstr "Noden finns inte" msgid "Node not found" msgstr "Noden finns inte" -#: web/ejabberd_web_admin.erl:1461 +#: web/ejabberd_web_admin.erl:1460 msgid "Host" msgstr "Server" -#: web/ejabberd_web_admin.erl:1462 +#: web/ejabberd_web_admin.erl:1461 msgid "Registered Users" msgstr "Registrerade användare" -#: web/ejabberd_web_admin.erl:1574 +#: web/ejabberd_web_admin.erl:1573 msgid "Offline Messages" msgstr "Offline meddelanden" -#: web/ejabberd_web_admin.erl:1575 web/ejabberd_web_admin.erl:1765 +#: web/ejabberd_web_admin.erl:1574 web/ejabberd_web_admin.erl:1767 msgid "Last Activity" msgstr "Senast aktivitet" -#: web/ejabberd_web_admin.erl:1657 web/ejabberd_web_admin.erl:1673 +#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 msgid "Registered Users:" msgstr "Registrerade användare" -#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 -#: web/ejabberd_web_admin.erl:2191 +#: web/ejabberd_web_admin.erl:1661 web/ejabberd_web_admin.erl:1677 +#: web/ejabberd_web_admin.erl:2192 msgid "Online Users:" msgstr "Inloggade användare" -#: web/ejabberd_web_admin.erl:1661 +#: web/ejabberd_web_admin.erl:1663 msgid "Outgoing s2s Connections:" msgstr "Utgående s2s anslutning" -#: web/ejabberd_web_admin.erl:1663 +#: web/ejabberd_web_admin.erl:1665 msgid "Outgoing s2s Servers:" msgstr "Utgående s2s server" -#: web/ejabberd_web_admin.erl:1732 web/mod_register_web.erl:175 +#: web/ejabberd_web_admin.erl:1734 web/mod_register_web.erl:175 #: web/mod_register_web.erl:372 web/mod_register_web.erl:381 #: web/mod_register_web.erl:411 msgid "Change Password" msgstr "Ändra lösenord" -#: web/ejabberd_web_admin.erl:1756 +#: web/ejabberd_web_admin.erl:1758 msgid "User " msgstr "Användare " -#: web/ejabberd_web_admin.erl:1763 +#: web/ejabberd_web_admin.erl:1765 msgid "Connected Resources:" msgstr "Anslutna resurser:" -#: web/ejabberd_web_admin.erl:1764 web/mod_register_web.erl:227 +#: web/ejabberd_web_admin.erl:1766 web/mod_register_web.erl:227 #: web/mod_register_web.erl:519 msgid "Password:" msgstr "Lösenord:" -#: web/ejabberd_web_admin.erl:1826 +#: web/ejabberd_web_admin.erl:1828 msgid "No Data" msgstr "Ingen data" -#: web/ejabberd_web_admin.erl:1904 +#: web/ejabberd_web_admin.erl:1906 msgid "Nodes" msgstr "Noder" -#: web/ejabberd_web_admin.erl:1927 web/ejabberd_web_admin.erl:1949 +#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1951 msgid "Node " msgstr "Nod " -#: web/ejabberd_web_admin.erl:1936 +#: web/ejabberd_web_admin.erl:1938 msgid "Listened Ports" msgstr "Lyssnarport" -#: web/ejabberd_web_admin.erl:1938 web/ejabberd_web_admin.erl:2259 -#: web/ejabberd_web_admin.erl:2447 +#: web/ejabberd_web_admin.erl:1940 web/ejabberd_web_admin.erl:2260 +#: web/ejabberd_web_admin.erl:2448 msgid "Update" msgstr "Uppdatera" -#: web/ejabberd_web_admin.erl:1941 web/ejabberd_web_admin.erl:2568 +#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2569 msgid "Restart" msgstr "Omstart" -#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2570 +#: web/ejabberd_web_admin.erl:1945 web/ejabberd_web_admin.erl:2571 msgid "Stop" msgstr "Stoppa" -#: web/ejabberd_web_admin.erl:1957 +#: web/ejabberd_web_admin.erl:1959 msgid "RPC Call Error" msgstr "RPC Uppringningserror" -#: web/ejabberd_web_admin.erl:1998 +#: web/ejabberd_web_admin.erl:2000 msgid "Database Tables at " msgstr "Databas tabell pa" -#: web/ejabberd_web_admin.erl:2005 +#: web/ejabberd_web_admin.erl:2007 msgid "Storage Type" msgstr "Lagringstyp" -#: web/ejabberd_web_admin.erl:2006 +#: web/ejabberd_web_admin.erl:2008 msgid "Elements" msgstr "Elements" -#: web/ejabberd_web_admin.erl:2007 +#: web/ejabberd_web_admin.erl:2009 msgid "Memory" msgstr "Minne" -#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2032 web/ejabberd_web_admin.erl:2137 msgid "Error" msgstr "Fel" -#: web/ejabberd_web_admin.erl:2033 +#: web/ejabberd_web_admin.erl:2034 msgid "Backup of " msgstr "Backup av" -#: web/ejabberd_web_admin.erl:2035 +#: web/ejabberd_web_admin.erl:2036 msgid "" "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 " @@ -1545,141 +1603,141 @@ msgstr "" "databas. Om du använder ODBC modul så måste du ta backup på SQLs databas " "enskilt" -#: web/ejabberd_web_admin.erl:2040 +#: web/ejabberd_web_admin.erl:2041 msgid "Store binary backup:" msgstr "Lagra den binära backupen" -#: web/ejabberd_web_admin.erl:2044 web/ejabberd_web_admin.erl:2051 -#: web/ejabberd_web_admin.erl:2059 web/ejabberd_web_admin.erl:2066 -#: web/ejabberd_web_admin.erl:2073 web/ejabberd_web_admin.erl:2080 -#: web/ejabberd_web_admin.erl:2087 web/ejabberd_web_admin.erl:2095 -#: web/ejabberd_web_admin.erl:2102 web/ejabberd_web_admin.erl:2109 +#: web/ejabberd_web_admin.erl:2045 web/ejabberd_web_admin.erl:2052 +#: web/ejabberd_web_admin.erl:2060 web/ejabberd_web_admin.erl:2067 +#: web/ejabberd_web_admin.erl:2074 web/ejabberd_web_admin.erl:2081 +#: web/ejabberd_web_admin.erl:2088 web/ejabberd_web_admin.erl:2096 +#: web/ejabberd_web_admin.erl:2103 web/ejabberd_web_admin.erl:2110 msgid "OK" msgstr "OK" -#: web/ejabberd_web_admin.erl:2047 +#: web/ejabberd_web_admin.erl:2048 msgid "Restore binary backup immediately:" msgstr "återställ den binära backupen omedelbart" -#: web/ejabberd_web_admin.erl:2055 +#: web/ejabberd_web_admin.erl:2056 msgid "" "Restore binary backup after next ejabberd restart (requires less memory):" msgstr "återställ den binära backupen efter nästa ejabberd omstart" -#: web/ejabberd_web_admin.erl:2062 +#: web/ejabberd_web_admin.erl:2063 msgid "Store plain text backup:" msgstr "Lagra textbackup" -#: web/ejabberd_web_admin.erl:2069 +#: web/ejabberd_web_admin.erl:2070 msgid "Restore plain text backup immediately:" msgstr "återställ textbackup omedelbart" -#: web/ejabberd_web_admin.erl:2076 +#: web/ejabberd_web_admin.erl:2077 msgid "Import users data from a PIEFXIS file (XEP-0227):" msgstr "Importera användardata från en PIEFXIS fil (XEP-0227):" -#: web/ejabberd_web_admin.erl:2083 +#: web/ejabberd_web_admin.erl:2084 msgid "Export data of all users in the server to PIEFXIS files (XEP-0227):" msgstr "" "Exportera data av alla användare i servern till en PIEFXIS fil (XEP-0227):" -#: web/ejabberd_web_admin.erl:2090 +#: web/ejabberd_web_admin.erl:2091 msgid "Export data of users in a host to PIEFXIS files (XEP-0227):" msgstr "Exportera data av användare i en host till PIEFXIS fil (XEP-0227):" -#: web/ejabberd_web_admin.erl:2098 +#: web/ejabberd_web_admin.erl:2099 msgid "Import user data from jabberd14 spool file:" msgstr "Importera användare från jabberd14 Spool filer" -#: web/ejabberd_web_admin.erl:2105 +#: web/ejabberd_web_admin.erl:2106 msgid "Import users data from jabberd14 spool directory:" msgstr "Importera användare från jabberd14 Spool directory:" -#: web/ejabberd_web_admin.erl:2131 +#: web/ejabberd_web_admin.erl:2132 msgid "Listened Ports at " msgstr "Lyssnande portar på " -#: web/ejabberd_web_admin.erl:2156 +#: web/ejabberd_web_admin.erl:2157 msgid "Modules at " msgstr "Moduler på" -#: web/ejabberd_web_admin.erl:2182 +#: web/ejabberd_web_admin.erl:2183 msgid "Statistics of ~p" msgstr "Statistik på ~p" -#: web/ejabberd_web_admin.erl:2185 +#: web/ejabberd_web_admin.erl:2186 msgid "Uptime:" msgstr "Tid upp" -#: web/ejabberd_web_admin.erl:2188 +#: web/ejabberd_web_admin.erl:2189 msgid "CPU Time:" msgstr "CPU tid" -#: web/ejabberd_web_admin.erl:2194 +#: web/ejabberd_web_admin.erl:2195 msgid "Transactions Committed:" msgstr "Transaktioner kommittade" -#: web/ejabberd_web_admin.erl:2197 +#: web/ejabberd_web_admin.erl:2198 msgid "Transactions Aborted:" msgstr "Transaktioner borttagna" -#: web/ejabberd_web_admin.erl:2200 +#: web/ejabberd_web_admin.erl:2201 msgid "Transactions Restarted:" msgstr "Transaktioner omstartade" -#: web/ejabberd_web_admin.erl:2203 +#: web/ejabberd_web_admin.erl:2204 msgid "Transactions Logged:" msgstr "Transaktioner loggade " -#: web/ejabberd_web_admin.erl:2245 +#: web/ejabberd_web_admin.erl:2246 msgid "Update " msgstr "Uppdatera" -#: web/ejabberd_web_admin.erl:2253 +#: web/ejabberd_web_admin.erl:2254 msgid "Update plan" msgstr "Uppdateringsplan" -#: web/ejabberd_web_admin.erl:2254 +#: web/ejabberd_web_admin.erl:2255 msgid "Modified modules" msgstr "Uppdaterade moduler" -#: web/ejabberd_web_admin.erl:2255 +#: web/ejabberd_web_admin.erl:2256 msgid "Update script" msgstr "Uppdatera skript" -#: web/ejabberd_web_admin.erl:2256 +#: web/ejabberd_web_admin.erl:2257 msgid "Low level update script" msgstr "Uppdaterade laglevel skript" -#: web/ejabberd_web_admin.erl:2257 +#: web/ejabberd_web_admin.erl:2258 msgid "Script check" msgstr "Skript kollat" -#: web/ejabberd_web_admin.erl:2425 +#: web/ejabberd_web_admin.erl:2426 msgid "Port" msgstr "Port" -#: web/ejabberd_web_admin.erl:2426 +#: web/ejabberd_web_admin.erl:2427 msgid "IP" msgstr "IP" -#: web/ejabberd_web_admin.erl:2427 +#: web/ejabberd_web_admin.erl:2428 msgid "Protocol" msgstr "Protocol" -#: web/ejabberd_web_admin.erl:2428 web/ejabberd_web_admin.erl:2555 +#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 msgid "Module" msgstr "Modul" -#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 +#: web/ejabberd_web_admin.erl:2430 web/ejabberd_web_admin.erl:2557 msgid "Options" msgstr "Parametrar" -#: web/ejabberd_web_admin.erl:2449 +#: web/ejabberd_web_admin.erl:2450 msgid "Delete" msgstr "Ta bort" -#: web/ejabberd_web_admin.erl:2578 +#: web/ejabberd_web_admin.erl:2579 msgid "Start" msgstr "Starta" @@ -1801,4 +1859,4 @@ msgstr "" #, fuzzy #~ msgid "Captcha test failed" -#~ msgstr "Din captcha är godkänd." +#~ msgstr "Din CAPTCHA är godkänd." diff --git a/src/msgs/th.po b/src/msgs/th.po index f03f9d76e..0c1825cf9 100644 --- a/src/msgs/th.po +++ b/src/msgs/th.po @@ -15,11 +15,11 @@ msgstr "ต้องใช้ STARTTLS" msgid "No resource provided" msgstr "ไม่ได้ระบุข้อมูล" -#: ejabberd_c2s.erl:1149 +#: ejabberd_c2s.erl:1197 msgid "Replaced by new connection" msgstr "แทนที่ด้วยการเชื่อมต่อใหม่" -#: ejabberd_c2s.erl:1837 +#: ejabberd_c2s.erl:1885 msgid "Your active privacy list has denied the routing of this stanza." msgstr "" @@ -41,7 +41,7 @@ msgid "CAPTCHA web page" msgstr "" #: ejabberd_captcha.erl:307 -msgid "The captcha is valid." +msgid "The CAPTCHA is valid." msgstr "" #: mod_adhoc.erl:95 mod_adhoc.erl:125 mod_adhoc.erl:143 mod_adhoc.erl:161 @@ -56,63 +56,66 @@ msgstr "Ping" msgid "Pong" msgstr "Pong" -#: mod_announce.erl:506 +#: mod_announce.erl:507 mod_announce_odbc.erl:499 msgid "Really delete message of the day?" msgstr "แน่ใจว่าต้องการลบข้อความของวันหรือไม่" -#: mod_announce.erl:514 mod_configure.erl:1083 mod_configure.erl:1128 +#: mod_announce.erl:515 mod_announce_odbc.erl:507 mod_configure.erl:1083 +#: mod_configure.erl:1128 msgid "Subject" msgstr "หัวเรื่อง" -#: mod_announce.erl:519 mod_configure.erl:1088 mod_configure.erl:1133 +#: mod_announce.erl:520 mod_announce_odbc.erl:512 mod_configure.erl:1088 +#: mod_configure.erl:1133 msgid "Message body" msgstr "เนื้อหาของข้อความ" -#: mod_announce.erl:599 +#: mod_announce.erl:600 mod_announce_odbc.erl:592 msgid "No body provided for announce message" msgstr "ไม่ได้ป้อนเนื้อหาสำหรับข้อความที่ประกาศ" -#: mod_announce.erl:634 +#: mod_announce.erl:635 mod_announce_odbc.erl:627 msgid "Announcements" msgstr "ประกาศ" -#: mod_announce.erl:636 +#: mod_announce.erl:637 mod_announce_odbc.erl:629 msgid "Send announcement to all users" msgstr "ส่งประกาศถึงผู้ใช้ทั้งหมด" -#: mod_announce.erl:638 +#: mod_announce.erl:639 mod_announce_odbc.erl:631 msgid "Send announcement to all users on all hosts" msgstr "ส่งประกาศถึงผู้ใช้ทั้งหมดบนโฮสต์ทั้งหมด" -#: mod_announce.erl:640 +#: mod_announce.erl:641 mod_announce_odbc.erl:633 msgid "Send announcement to all online users" msgstr "ส่งประกาศถึงผู้ใช้ออนไลน์ทั้งหมด" -#: mod_announce.erl:642 mod_configure.erl:1078 mod_configure.erl:1123 +#: mod_announce.erl:643 mod_announce_odbc.erl:635 mod_configure.erl:1078 +#: mod_configure.erl:1123 msgid "Send announcement to all online users on all hosts" msgstr "ส่งประกาศถึงผู้ใช้ออนไลน์ทั้งหมดบนโฮสต์ทั้งหมด" -#: mod_announce.erl:644 +#: mod_announce.erl:645 mod_announce_odbc.erl:637 msgid "Set message of the day and send to online users" msgstr "ตั้งค่าข้อความของวันและส่งถึงผู้ใช้ออนไลน์" -#: mod_announce.erl:646 +#: mod_announce.erl:647 mod_announce_odbc.erl:639 msgid "Set message of the day on all hosts and send to online users" msgstr "ตั้งค่าข้อความของวันบนโฮสต์ทั้งหมดและส่งถึงผู้ใช้ออนไลน์" -#: mod_announce.erl:648 +#: mod_announce.erl:649 mod_announce_odbc.erl:641 msgid "Update message of the day (don't send)" msgstr "อัพเดตข้อความของวัน (ไม่ต้องส่ง)" -#: mod_announce.erl:650 +#: mod_announce.erl:651 mod_announce_odbc.erl:643 msgid "Update message of the day on all hosts (don't send)" msgstr "อัพเดตข้อความของวันบนโฮสต์ทั้งหมด (ไม่ต้องส่ง) " -#: mod_announce.erl:652 +#: mod_announce.erl:653 mod_announce_odbc.erl:645 msgid "Delete message of the day" msgstr "ลบข้อความของวัน" -#: mod_announce.erl:654 +#: mod_announce.erl:655 mod_announce_odbc.erl:647 msgid "Delete message of the day on all hosts" msgstr "ลบข้อความของวันบนโฮสต์ทั้งหมด" @@ -121,7 +124,7 @@ msgstr "ลบข้อความของวันบนโฮสต์ทั msgid "Configuration" msgstr "การกำหนดค่า" -#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1934 +#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1936 msgid "Database" msgstr "ฐานข้อมูล" @@ -133,7 +136,7 @@ msgstr "เริ่มโมดูล" msgid "Stop Modules" msgstr "หยุดโมดูล" -#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1935 +#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1937 msgid "Backup" msgstr "การสำรองข้อมูล " @@ -162,7 +165,7 @@ msgid "Shut Down Service" msgstr "ปิดการบริการ" #: mod_configure.erl:145 mod_configure.erl:518 mod_configure.erl:1197 -#: web/ejabberd_web_admin.erl:1528 +#: web/ejabberd_web_admin.erl:1527 msgid "Add User" msgstr "เพิ่มผู้ใช้" @@ -214,7 +217,7 @@ msgid "User Management" msgstr "การจัดการผู้ใช้" #: mod_configure.erl:500 web/ejabberd_web_admin.erl:1058 -#: web/ejabberd_web_admin.erl:1463 +#: web/ejabberd_web_admin.erl:1462 msgid "Online Users" msgstr "ผู้ใช้ออนไลน์" @@ -226,15 +229,15 @@ msgstr "ผู้ใช้ทั้งหมด" msgid "Outgoing s2s Connections" msgstr "การเชื่อมต่อ s2s ขาออก" -#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1905 +#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1907 msgid "Running Nodes" msgstr "โหนดที่ทำงาน" -#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1907 +#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1909 msgid "Stopped Nodes" msgstr "โหนดที่หยุด" -#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1951 +#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1953 msgid "Modules" msgstr "โมดูล" @@ -365,15 +368,15 @@ msgstr "กฎการเข้าถึง" #: mod_configure.erl:1200 mod_configure.erl:1222 mod_configure.erl:1234 #: mod_configure.erl:1246 mod_configure.erl:1258 mod_configure.erl:1275 -#: mod_configure.erl:1287 mod_configure.erl:1652 mod_configure.erl:1702 -#: mod_configure.erl:1723 mod_roster.erl:943 mod_roster_odbc.erl:1048 -#: mod_vcard.erl:466 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:442 +#: mod_configure.erl:1287 mod_configure.erl:1650 mod_configure.erl:1700 +#: mod_configure.erl:1721 mod_roster.erl:943 mod_roster_odbc.erl:1060 +#: mod_vcard.erl:472 mod_vcard_ldap.erl:554 mod_vcard_odbc.erl:448 msgid "Jabber ID" msgstr "Jabber ID" -#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1653 -#: mod_configure.erl:1865 mod_muc/mod_muc_room.erl:2970 mod_register.erl:235 -#: web/ejabberd_web_admin.erl:1521 +#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1651 +#: mod_configure.erl:1863 mod_muc/mod_muc_room.erl:3224 mod_register.erl:235 +#: web/ejabberd_web_admin.erl:1520 msgid "Password" msgstr "รหัสผ่าน" @@ -389,80 +392,81 @@ msgstr "จำนวนผู้ใช้ที่ลงทะเบียน" msgid "Number of online users" msgstr "จำนวนผู้ใช้ออนไลน์" -#: mod_configure.erl:1684 web/ejabberd_web_admin.erl:1589 -#: web/ejabberd_web_admin.erl:1741 +#: mod_configure.erl:1682 web/ejabberd_web_admin.erl:1588 +#: web/ejabberd_web_admin.erl:1743 msgid "Never" msgstr "ไม่เคย" -#: mod_configure.erl:1698 web/ejabberd_web_admin.erl:1602 -#: web/ejabberd_web_admin.erl:1754 +#: mod_configure.erl:1696 web/ejabberd_web_admin.erl:1601 +#: web/ejabberd_web_admin.erl:1756 msgid "Online" msgstr "ออนไลน์" -#: mod_configure.erl:1703 +#: mod_configure.erl:1701 msgid "Last login" msgstr "การเข้าสู่ระบบครั้งล่าสุด" -#: mod_configure.erl:1724 +#: mod_configure.erl:1722 msgid "Roster size" msgstr "ขนาดของบัญชีรายชื่อ" -#: mod_configure.erl:1725 +#: mod_configure.erl:1723 msgid "IP addresses" msgstr "ที่อยู่ IP" -#: mod_configure.erl:1726 +#: mod_configure.erl:1724 msgid "Resources" msgstr "ทรัพยากร" -#: mod_configure.erl:1852 +#: mod_configure.erl:1850 msgid "Administration of " msgstr "การดูแล " -#: mod_configure.erl:1855 +#: mod_configure.erl:1853 msgid "Action on user" msgstr "การดำเนินการกับผู้ใช้" -#: mod_configure.erl:1859 +#: mod_configure.erl:1857 msgid "Edit Properties" msgstr "แก้ไขคุณสมบัติ" -#: mod_configure.erl:1862 web/ejabberd_web_admin.erl:1767 +#: mod_configure.erl:1860 web/ejabberd_web_admin.erl:1769 msgid "Remove User" msgstr "ลบผู้ใช้" -#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:336 +#: mod_irc/mod_irc.erl:201 mod_irc/mod_irc_odbc.erl:196 +#: mod_muc/mod_muc.erl:336 mod_muc/mod_muc_odbc.erl:342 msgid "Access denied by service policy" msgstr "การเข้าถึงถูกปฏิเสธโดยนโยบายการบริการ" -#: mod_irc/mod_irc.erl:400 +#: mod_irc/mod_irc.erl:401 mod_irc/mod_irc_odbc.erl:398 msgid "IRC Transport" msgstr "การส่ง IRC" -#: mod_irc/mod_irc.erl:427 +#: mod_irc/mod_irc.erl:428 mod_irc/mod_irc_odbc.erl:425 msgid "ejabberd IRC module" msgstr "ejabberd IRC module" -#: mod_irc/mod_irc.erl:558 +#: mod_irc/mod_irc.erl:559 mod_irc/mod_irc_odbc.erl:568 msgid "You need an x:data capable client to configure mod_irc settings" msgstr "คุณต้องใช้ไคลเอ็นต์ที่รองรับ x:data เพื่อกำหนดการตั้งค่า mod_irc" -#: mod_irc/mod_irc.erl:565 +#: mod_irc/mod_irc.erl:566 mod_irc/mod_irc_odbc.erl:575 msgid "Registration in mod_irc for " msgstr "การลงทะเบียนใน mod_irc สำหรับ" -#: mod_irc/mod_irc.erl:570 +#: mod_irc/mod_irc.erl:571 mod_irc/mod_irc_odbc.erl:580 #, fuzzy msgid "" "Enter username, encodings, ports and passwords you wish to use for " "connecting to IRC servers" msgstr "ป้อนชื่อผู้ใช้และการเข้ารหัสที่คุณต้องการใช้สำหรับเชื่อมต่อกับเซิร์ฟเวอร์ IRC" -#: mod_irc/mod_irc.erl:575 +#: mod_irc/mod_irc.erl:576 mod_irc/mod_irc_odbc.erl:585 msgid "IRC Username" msgstr "ชื่อผู้ใช้ IRC" -#: mod_irc/mod_irc.erl:585 +#: mod_irc/mod_irc.erl:586 mod_irc/mod_irc_odbc.erl:595 #, fuzzy msgid "" "If you want to specify different ports, passwords, encodings for IRC " @@ -474,7 +478,7 @@ msgstr "" "server\", \"encoding\"}' ลงในรายการ การบริการนี้ใช้การเข้ารหัสในรูปแบบ \"~s\" " "โดยค่าดีฟอลต์ " -#: mod_irc/mod_irc.erl:597 +#: mod_irc/mod_irc.erl:598 mod_irc/mod_irc_odbc.erl:607 #, fuzzy msgid "" "Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." @@ -483,36 +487,37 @@ msgstr "" "ตัวอย่าง: [{\"irc.lucky.net\", \"koi8-r\"}, {\"vendetta.fef.net\", " "\"iso8859-1\"}]." -#: mod_irc/mod_irc.erl:602 +#: mod_irc/mod_irc.erl:603 mod_irc/mod_irc_odbc.erl:612 msgid "Connections parameters" msgstr "" -#: mod_irc/mod_irc.erl:727 +#: mod_irc/mod_irc.erl:728 mod_irc/mod_irc_odbc.erl:757 msgid "Join IRC channel" msgstr "" -#: mod_irc/mod_irc.erl:731 +#: mod_irc/mod_irc.erl:732 mod_irc/mod_irc_odbc.erl:761 msgid "IRC channel (don't put the first #)" msgstr "" -#: mod_irc/mod_irc.erl:736 +#: mod_irc/mod_irc.erl:737 mod_irc/mod_irc_odbc.erl:766 #, fuzzy msgid "IRC server" msgstr "ชื่อผู้ใช้ IRC" -#: mod_irc/mod_irc.erl:769 mod_irc/mod_irc.erl:773 +#: mod_irc/mod_irc.erl:770 mod_irc/mod_irc.erl:774 +#: mod_irc/mod_irc_odbc.erl:799 mod_irc/mod_irc_odbc.erl:803 msgid "Join the IRC channel here." msgstr "" -#: mod_irc/mod_irc.erl:777 +#: mod_irc/mod_irc.erl:778 mod_irc/mod_irc_odbc.erl:807 msgid "Join the IRC channel in this Jabber ID: ~s" msgstr "" -#: mod_irc/mod_irc.erl:862 +#: mod_irc/mod_irc.erl:863 mod_irc/mod_irc_odbc.erl:904 msgid "IRC settings" msgstr "" -#: mod_irc/mod_irc.erl:867 +#: mod_irc/mod_irc.erl:868 mod_irc/mod_irc_odbc.erl:909 #, fuzzy msgid "" "Enter username and encodings you wish to use for connecting to IRC servers. " @@ -520,75 +525,76 @@ msgid "" "settings." msgstr "ป้อนชื่อผู้ใช้และการเข้ารหัสที่คุณต้องการใช้สำหรับเชื่อมต่อกับเซิร์ฟเวอร์ IRC" -#: mod_irc/mod_irc.erl:873 +#: mod_irc/mod_irc.erl:874 mod_irc/mod_irc_odbc.erl:915 #, fuzzy msgid "IRC username" msgstr "ชื่อผู้ใช้ IRC" -#: mod_irc/mod_irc.erl:922 +#: mod_irc/mod_irc.erl:923 mod_irc/mod_irc_odbc.erl:964 #, fuzzy msgid "Password ~b" msgstr "รหัสผ่าน" -#: mod_irc/mod_irc.erl:927 +#: mod_irc/mod_irc.erl:928 mod_irc/mod_irc_odbc.erl:969 #, fuzzy msgid "Port ~b" msgstr "พอร์ท" -#: mod_irc/mod_irc.erl:932 +#: mod_irc/mod_irc.erl:933 mod_irc/mod_irc_odbc.erl:974 msgid "Encoding for server ~b" msgstr "" -#: mod_irc/mod_irc.erl:941 +#: mod_irc/mod_irc.erl:942 mod_irc/mod_irc_odbc.erl:983 msgid "Server ~b" msgstr "" -#: mod_muc/mod_muc.erl:449 +#: mod_muc/mod_muc.erl:449 mod_muc/mod_muc_odbc.erl:456 msgid "Only service administrators are allowed to send service messages" msgstr "ผู้ดูแลด้านการบริการเท่านั้นที่ได้รับอนุญาตให้ส่งข้อความการบริการ" -#: mod_muc/mod_muc.erl:493 +#: mod_muc/mod_muc.erl:493 mod_muc/mod_muc_odbc.erl:500 msgid "Room creation is denied by service policy" msgstr "การสร้างห้องสนทนาถูกปฏิเสธโดยนโยบายการบริการ" -#: mod_muc/mod_muc.erl:500 +#: mod_muc/mod_muc.erl:500 mod_muc/mod_muc_odbc.erl:507 msgid "Conference room does not exist" msgstr "ไม่มีห้องประชุม" -#: mod_muc/mod_muc.erl:581 +#: mod_muc/mod_muc.erl:582 mod_muc/mod_muc_odbc.erl:595 msgid "Chatrooms" msgstr "ห้องสนทนา" -#: mod_muc/mod_muc.erl:711 +#: mod_muc/mod_muc.erl:712 mod_muc/mod_muc_odbc.erl:729 #, fuzzy msgid "You need a client that supports x:data to register the nickname" msgstr "คุณต้องใช้ไคลเอ็นต์ที่รองรับ x:data เพื่อลงทะเบียนชื่อเล่น" -#: mod_muc/mod_muc.erl:717 +#: mod_muc/mod_muc.erl:718 mod_muc/mod_muc_odbc.erl:735 msgid "Nickname Registration at " msgstr "การลงทะเบียนชื่อเล่นที่ " -#: mod_muc/mod_muc.erl:721 +#: mod_muc/mod_muc.erl:722 mod_muc/mod_muc_odbc.erl:739 msgid "Enter nickname you want to register" msgstr "ป้อนชื่อเล่นที่คุณต้องการลงทะเบียน" -#: mod_muc/mod_muc.erl:722 mod_roster.erl:944 mod_roster_odbc.erl:1049 -#: mod_vcard.erl:358 mod_vcard.erl:471 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:447 +#: mod_muc/mod_muc.erl:723 mod_muc/mod_muc_odbc.erl:740 +#: mod_muc/mod_muc_room.erl:3810 mod_roster.erl:944 mod_roster_odbc.erl:1061 +#: mod_vcard.erl:364 mod_vcard.erl:477 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:453 msgid "Nickname" msgstr "ชื่อเล่น" -#: mod_muc/mod_muc.erl:761 mod_muc/mod_muc_room.erl:933 -#: mod_muc/mod_muc_room.erl:1577 +#: mod_muc/mod_muc.erl:762 mod_muc/mod_muc_odbc.erl:784 +#: mod_muc/mod_muc_room.erl:1064 mod_muc/mod_muc_room.erl:1787 #, fuzzy msgid "That nickname is registered by another person" msgstr "ชื่อเล่นถูกลงทะเบียนใช้งานโดยบุคคลอื่น" -#: mod_muc/mod_muc.erl:787 +#: mod_muc/mod_muc.erl:788 mod_muc/mod_muc_odbc.erl:811 msgid "You must fill in field \"Nickname\" in the form" msgstr "คุณต้องกรอกฟิลด์ \"Nickname\" ในแบบฟอร์ม" -#: mod_muc/mod_muc.erl:807 +#: mod_muc/mod_muc.erl:808 mod_muc/mod_muc_odbc.erl:831 msgid "ejabberd MUC module" msgstr "ejabberd MUC module" @@ -628,8 +634,8 @@ msgstr "" msgid "is now known as" msgstr "ซึ่งรู้จักกันในชื่อ" -#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:689 -#: mod_muc/mod_muc_room.erl:2138 +#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:688 +#: mod_muc/mod_muc_room.erl:2393 msgid " has set the subject to: " msgstr " ตั้งหัวข้อว่า: " @@ -729,273 +735,324 @@ msgstr "พฤศจิกายน" msgid "December" msgstr "ธันวาคม" -#: mod_muc/mod_muc_log.erl:751 +#: mod_muc/mod_muc_log.erl:750 msgid "Room Configuration" msgstr "การกำหนดค่าห้องสนทนา" -#: mod_muc/mod_muc_log.erl:760 +#: mod_muc/mod_muc_log.erl:759 #, fuzzy msgid "Room Occupants" msgstr "จำนวนผู้ครอบครองห้อง" -#: mod_muc/mod_muc_room.erl:170 +#: mod_muc/mod_muc_room.erl:174 msgid "Traffic rate limit is exceeded" msgstr "อัตราของปริมาณการเข้าใช้เกินขีดจำกัด" -#: mod_muc/mod_muc_room.erl:242 +#: mod_muc/mod_muc_room.erl:246 msgid "" "This participant is kicked from the room because he sent an error message" msgstr "" -#: mod_muc/mod_muc_room.erl:251 +#: mod_muc/mod_muc_room.erl:255 msgid "It is not allowed to send private messages to the conference" msgstr "ไม่อนุญาตให้ส่งข้อความส่วนตัวไปยังห้องประชุม" -#: mod_muc/mod_muc_room.erl:296 +#: mod_muc/mod_muc_room.erl:332 +msgid "Please, wait for a while before sending new voice request" +msgstr "" + +#: mod_muc/mod_muc_room.erl:347 +msgid "Voice requests are disabled in this conference" +msgstr "" + +#: mod_muc/mod_muc_room.erl:364 +msgid "Failed to extract JID from your voice request approval" +msgstr "" + +#: mod_muc/mod_muc_room.erl:393 +msgid "Only moderators can approve voice requests" +msgstr "" + +#: mod_muc/mod_muc_room.erl:408 msgid "Improper message type" msgstr "ประเภทข้อความไม่เหมาะสม" -#: mod_muc/mod_muc_room.erl:406 +#: mod_muc/mod_muc_room.erl:518 msgid "" "This participant is kicked from the room because he sent an error message to " "another participant" msgstr "" -#: mod_muc/mod_muc_room.erl:419 +#: mod_muc/mod_muc_room.erl:531 msgid "It is not allowed to send private messages of type \"groupchat\"" msgstr "ไม่อนุญาตให้ส่งข้อความส่วนตัวไปยัง \"กลุ่มสนทนา\"" -#: mod_muc/mod_muc_room.erl:431 mod_muc/mod_muc_room.erl:486 +#: mod_muc/mod_muc_room.erl:543 mod_muc/mod_muc_room.erl:611 msgid "Recipient is not in the conference room" msgstr "ผู้รับไม่ได้อยู่ในห้องประชุม" -#: mod_muc/mod_muc_room.erl:451 mod_muc/mod_muc_room.erl:829 -#: mod_muc/mod_muc_room.erl:3609 -msgid "Only occupants are allowed to send messages to the conference" -msgstr "ผู้ครอบครองห้องเท่านั้นที่ได้รับอนุญาตให้ส่งข้อความไปยังห้องประชุม" - -#: mod_muc/mod_muc_room.erl:460 +#: mod_muc/mod_muc_room.erl:564 mod_muc/mod_muc_room.erl:585 #, fuzzy msgid "It is not allowed to send private messages" msgstr "ไม่อนุญาตให้ส่งข้อความส่วนตัวไปยังห้องประชุม" -#: mod_muc/mod_muc_room.erl:509 +#: mod_muc/mod_muc_room.erl:576 mod_muc/mod_muc_room.erl:956 +#: mod_muc/mod_muc_room.erl:4040 +msgid "Only occupants are allowed to send messages to the conference" +msgstr "ผู้ครอบครองห้องเท่านั้นที่ได้รับอนุญาตให้ส่งข้อความไปยังห้องประชุม" + +#: mod_muc/mod_muc_room.erl:634 msgid "Only occupants are allowed to send queries to the conference" msgstr "ผู้ครอบครองห้องเท่านั้นที่ได้รับอนุญาตให้ส่งกระทู้ถามไปยังห้องประชุม" -#: mod_muc/mod_muc_room.erl:521 +#: mod_muc/mod_muc_room.erl:646 msgid "Queries to the conference members are not allowed in this room" msgstr "ห้องนี้ไม่อนุญาตให้ส่งกระทู้ถามถึงสมาชิกในห้องประชุม" -#: mod_muc/mod_muc_room.erl:805 +#: mod_muc/mod_muc_room.erl:932 #, fuzzy msgid "" "Only moderators and participants are allowed to change the subject in this " "room" msgstr "ผู้ดูแลการสนทนาและผู้เข้าร่วมเท่านั้นที่ได้รับอนุญาตให้เปลี่ยนหัวข้อในห้องนี้" -#: mod_muc/mod_muc_room.erl:810 +#: mod_muc/mod_muc_room.erl:937 #, fuzzy msgid "Only moderators are allowed to change the subject in this room" msgstr "ผู้ดูแลการสนทนาเท่านั้นที่ได้รับอนุญาตให้เปลี่ยนหัวข้อในห้องนี้" -#: mod_muc/mod_muc_room.erl:820 +#: mod_muc/mod_muc_room.erl:947 msgid "Visitors are not allowed to send messages to all occupants" msgstr "ผู้เยี่ยมเยือนไม่ได้รับอนุญาตให้ส่งข้อความถึงผู้ครอบครองห้องทั้งหมด" -#: mod_muc/mod_muc_room.erl:891 +#: mod_muc/mod_muc_room.erl:1021 msgid "" "This participant is kicked from the room because he sent an error presence" msgstr "" -#: mod_muc/mod_muc_room.erl:909 +#: mod_muc/mod_muc_room.erl:1040 #, fuzzy msgid "Visitors are not allowed to change their nicknames in this room" msgstr "ผู้ดูแลการสนทนาเท่านั้นที่ได้รับอนุญาตให้เปลี่ยนหัวข้อในห้องนี้" -#: mod_muc/mod_muc_room.erl:922 mod_muc/mod_muc_room.erl:1569 +#: mod_muc/mod_muc_room.erl:1053 mod_muc/mod_muc_room.erl:1779 #, fuzzy msgid "That nickname is already in use by another occupant" msgstr "ชื่อเล่นถูกใช้งานอยู่โดยผู้ครอบครองห้อง" -#: mod_muc/mod_muc_room.erl:1558 +#: mod_muc/mod_muc_room.erl:1768 msgid "You have been banned from this room" msgstr "คุณถูกสั่งห้ามไมให้เข้าห้องนี้" -#: mod_muc/mod_muc_room.erl:1561 +#: mod_muc/mod_muc_room.erl:1771 #, fuzzy msgid "Membership is required to enter this room" msgstr "ต้องเป็นสมาชิกจึงจะสามารถเข้าห้องนี้ได้" -#: mod_muc/mod_muc_room.erl:1597 +#: mod_muc/mod_muc_room.erl:1807 msgid "This room is not anonymous" msgstr "ห้องนี้ไม่ปิดบังชื่อ" -#: mod_muc/mod_muc_room.erl:1623 +#: mod_muc/mod_muc_room.erl:1833 #, fuzzy msgid "A password is required to enter this room" msgstr "ต้องใส่รหัสผ่านเพื่อเข้าห้องนี้" -#: mod_muc/mod_muc_room.erl:1645 mod_register.erl:246 +#: mod_muc/mod_muc_room.erl:1855 mod_register.erl:246 msgid "Too many CAPTCHA requests" msgstr "" -#: mod_muc/mod_muc_room.erl:1654 -msgid "Unable to generate a captcha" +#: mod_muc/mod_muc_room.erl:1864 mod_register.erl:251 +msgid "Unable to generate a CAPTCHA" msgstr "" -#: mod_muc/mod_muc_room.erl:1664 +#: mod_muc/mod_muc_room.erl:1874 msgid "Incorrect password" msgstr "รหัสผ่านไม่ถูกต้อง" -#: mod_muc/mod_muc_room.erl:2193 +#: mod_muc/mod_muc_room.erl:2448 msgid "Administrator privileges required" msgstr "ต้องมีสิทธิพิเศษของผู้ดูแลระบบ" -#: mod_muc/mod_muc_room.erl:2208 +#: mod_muc/mod_muc_room.erl:2463 msgid "Moderator privileges required" msgstr "ต้องมีสิทธิพิเศษของผู้ดูแลการสนทนา" -#: mod_muc/mod_muc_room.erl:2363 +#: mod_muc/mod_muc_room.erl:2619 msgid "Jabber ID ~s is invalid" msgstr "Jabber ID ~s ไม่ถูกต้อง" -#: mod_muc/mod_muc_room.erl:2377 +#: mod_muc/mod_muc_room.erl:2633 msgid "Nickname ~s does not exist in the room" msgstr "ไม่มีชื่อเล่น ~s อยู่ในห้องนี้" -#: mod_muc/mod_muc_room.erl:2403 mod_muc/mod_muc_room.erl:2797 +#: mod_muc/mod_muc_room.erl:2659 mod_muc/mod_muc_room.erl:3049 msgid "Invalid affiliation: ~s" msgstr "การเข้าร่วมที่ไม่ถูกต้อง: ~s" -#: mod_muc/mod_muc_room.erl:2460 +#: mod_muc/mod_muc_room.erl:2713 msgid "Invalid role: ~s" msgstr "บทบาทไม่ถูกต้อง: ~s" -#: mod_muc/mod_muc_room.erl:2774 mod_muc/mod_muc_room.erl:2810 +#: mod_muc/mod_muc_room.erl:3026 mod_muc/mod_muc_room.erl:3062 msgid "Owner privileges required" msgstr "ต้องมีสิทธิพิเศษของเจ้าของ" -#: mod_muc/mod_muc_room.erl:2941 +#: mod_muc/mod_muc_room.erl:3195 #, fuzzy msgid "Configuration of room ~s" msgstr "การกำหนดค่าสำหรับ " -#: mod_muc/mod_muc_room.erl:2946 +#: mod_muc/mod_muc_room.erl:3200 msgid "Room title" msgstr "ชื่อห้อง" -#: mod_muc/mod_muc_room.erl:2949 mod_muc/mod_muc_room.erl:3388 +#: mod_muc/mod_muc_room.erl:3203 mod_muc/mod_muc_room.erl:3692 #, fuzzy msgid "Room description" msgstr "รายละเอียด:" -#: mod_muc/mod_muc_room.erl:2956 +#: mod_muc/mod_muc_room.erl:3210 msgid "Make room persistent" msgstr "สร้างเป็นห้องถาวร" -#: mod_muc/mod_muc_room.erl:2961 +#: mod_muc/mod_muc_room.erl:3215 msgid "Make room public searchable" msgstr "สร้างเป็นห้องที่บุคคลทั่วไปสามารถค้นหาได้" -#: mod_muc/mod_muc_room.erl:2964 +#: mod_muc/mod_muc_room.erl:3218 msgid "Make participants list public" msgstr "สร้างรายการผู้เข้าร่วมสำหรับใช้งานโดยบุคคลทั่วไป" -#: mod_muc/mod_muc_room.erl:2967 +#: mod_muc/mod_muc_room.erl:3221 msgid "Make room password protected" msgstr "สร้างห้องที่มีการป้องกันด้วยรหัสผ่าน" -#: mod_muc/mod_muc_room.erl:2978 +#: mod_muc/mod_muc_room.erl:3232 msgid "Maximum Number of Occupants" msgstr "จำนวนผู้ครอบครองห้องสูงสุด" -#: mod_muc/mod_muc_room.erl:2985 +#: mod_muc/mod_muc_room.erl:3239 msgid "No limit" msgstr "ไม่จำกัด" -#: mod_muc/mod_muc_room.erl:2996 +#: mod_muc/mod_muc_room.erl:3250 msgid "Present real Jabber IDs to" msgstr "แสดง Jabber IDs ที่ถูกต้องแก่" -#: mod_muc/mod_muc_room.erl:3004 +#: mod_muc/mod_muc_room.erl:3258 mod_muc/mod_muc_room.erl:3292 msgid "moderators only" msgstr "สำหรับผู้ดูแลการสนทนาเท่านั้น" -#: mod_muc/mod_muc_room.erl:3006 +#: mod_muc/mod_muc_room.erl:3260 mod_muc/mod_muc_room.erl:3294 msgid "anyone" msgstr "ทุกคน" -#: mod_muc/mod_muc_room.erl:3008 +#: mod_muc/mod_muc_room.erl:3262 msgid "Make room members-only" msgstr "สร้างห้องสำหรับสมาชิกเท่านั้น" -#: mod_muc/mod_muc_room.erl:3011 +#: mod_muc/mod_muc_room.erl:3265 #, fuzzy msgid "Make room moderated" msgstr "สร้างเป็นห้องถาวร" -#: mod_muc/mod_muc_room.erl:3014 +#: mod_muc/mod_muc_room.erl:3268 msgid "Default users as participants" msgstr "ผู้ใช้เริ่มต้นเป็นผู้เข้าร่วม" -#: mod_muc/mod_muc_room.erl:3017 +#: mod_muc/mod_muc_room.erl:3271 #, fuzzy msgid "Allow users to change the subject" msgstr "อนุญาตให้ผู้ใช้เปลี่ยนหัวข้อได้" -#: mod_muc/mod_muc_room.erl:3020 +#: mod_muc/mod_muc_room.erl:3274 msgid "Allow users to send private messages" msgstr "อนุญาตให้ผู้ใช้ส่งข้อความส่วนตัว" -#: mod_muc/mod_muc_room.erl:3023 +#: mod_muc/mod_muc_room.erl:3279 +#, fuzzy +msgid "Allow visitors to send private messages to" +msgstr "อนุญาตให้ผู้ใช้ส่งข้อความส่วนตัว" + +#: mod_muc/mod_muc_room.erl:3290 +msgid "nobody" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3296 msgid "Allow users to query other users" msgstr "อนุญาตให้ผู้ใช้ถามคำถามกับผู้ใช้คนอื่นๆ ได้" -#: mod_muc/mod_muc_room.erl:3026 +#: mod_muc/mod_muc_room.erl:3299 msgid "Allow users to send invites" msgstr "อนุญาตให้ผู้ใช้ส่งคำเชิญถึงกันได้" -#: mod_muc/mod_muc_room.erl:3029 +#: mod_muc/mod_muc_room.erl:3302 #, fuzzy msgid "Allow visitors to send status text in presence updates" msgstr "อนุญาตให้ผู้ใช้ส่งข้อความส่วนตัว" -#: mod_muc/mod_muc_room.erl:3032 +#: mod_muc/mod_muc_room.erl:3305 #, fuzzy msgid "Allow visitors to change nickname" msgstr "อนุญาตให้ผู้ใช้เปลี่ยนหัวข้อได้" -#: mod_muc/mod_muc_room.erl:3038 +#: mod_muc/mod_muc_room.erl:3308 #, fuzzy -msgid "Make room captcha protected" +msgid "Allow visitors to send voice requests" +msgstr "อนุญาตให้ผู้ใช้ส่งคำเชิญถึงกันได้" + +#: mod_muc/mod_muc_room.erl:3311 +msgid "Minimum interval between voice requests (in seconds)" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3317 +#, fuzzy +msgid "Make room CAPTCHA protected" msgstr "สร้างห้องที่มีการป้องกันด้วยรหัสผ่าน" -#: mod_muc/mod_muc_room.erl:3043 +#: mod_muc/mod_muc_room.erl:3322 msgid "Exclude Jabber IDs from CAPTCHA challenge" msgstr "" -#: mod_muc/mod_muc_room.erl:3050 +#: mod_muc/mod_muc_room.erl:3329 msgid "Enable logging" msgstr "เปิดใช้งานการบันทึก" -#: mod_muc/mod_muc_room.erl:3058 +#: mod_muc/mod_muc_room.erl:3337 msgid "You need an x:data capable client to configure room" msgstr "คุณต้องใช้ไคลเอ็นต์ที่รองรับ x:data เพื่อกำหนดค่าห้องสนทนา " -#: mod_muc/mod_muc_room.erl:3390 +#: mod_muc/mod_muc_room.erl:3694 msgid "Number of occupants" msgstr "จำนวนผู้ครอบครองห้อง" -#: mod_muc/mod_muc_room.erl:3446 +#: mod_muc/mod_muc_room.erl:3750 msgid "private, " msgstr "ส่วนตัว, " -#: mod_muc/mod_muc_room.erl:3529 +#: mod_muc/mod_muc_room.erl:3799 +msgid "Voice request" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3803 +msgid "Either approve or decline the voice request." +msgstr "" + +#: mod_muc/mod_muc_room.erl:3809 +#, fuzzy +msgid "User JID" +msgstr "ผู้ใช้" + +#: mod_muc/mod_muc_room.erl:3811 +msgid "Grant voice to this person?" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3960 msgid "~s invites you to the room ~s" msgstr "~s เชิญคุณเข้าร่วมสนทนาในห้อง ~s" -#: mod_muc/mod_muc_room.erl:3538 +#: mod_muc/mod_muc_room.erl:3969 msgid "the password is" msgstr "รหัสผ่านคือ" @@ -1009,14 +1066,15 @@ msgid "~s's Offline Messages Queue" msgstr "~s's ลำดับข้อความออฟไลน์" #: mod_offline.erl:563 mod_offline_odbc.erl:411 mod_roster.erl:987 -#: mod_roster_odbc.erl:1092 mod_shared_roster.erl:896 -#: mod_shared_roster.erl:1005 web/ejabberd_web_admin.erl:833 +#: mod_roster_odbc.erl:1104 mod_shared_roster.erl:901 +#: mod_shared_roster.erl:1010 mod_shared_roster_odbc.erl:930 +#: mod_shared_roster_odbc.erl:1039 web/ejabberd_web_admin.erl:833 #: web/ejabberd_web_admin.erl:874 web/ejabberd_web_admin.erl:942 #: web/ejabberd_web_admin.erl:978 web/ejabberd_web_admin.erl:1019 -#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1758 -#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1961 -#: web/ejabberd_web_admin.erl:2030 web/ejabberd_web_admin.erl:2134 -#: web/ejabberd_web_admin.erl:2159 web/ejabberd_web_admin.erl:2247 +#: web/ejabberd_web_admin.erl:1508 web/ejabberd_web_admin.erl:1760 +#: web/ejabberd_web_admin.erl:1931 web/ejabberd_web_admin.erl:1963 +#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2135 +#: web/ejabberd_web_admin.erl:2160 web/ejabberd_web_admin.erl:2248 msgid "Submitted" msgstr "ส่งแล้ว" @@ -1036,8 +1094,9 @@ msgstr "ถึง" msgid "Packet" msgstr "แพ็กเก็ต" -#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:903 -#: web/ejabberd_web_admin.erl:882 web/ejabberd_web_admin.erl:986 +#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:908 +#: mod_shared_roster_odbc.erl:937 web/ejabberd_web_admin.erl:882 +#: web/ejabberd_web_admin.erl:986 msgid "Delete Selected" msgstr "ลบข้อความที่เลือก" @@ -1054,104 +1113,104 @@ msgstr "ข้อความออฟไลน์" msgid "ejabberd SOCKS5 Bytestreams module" msgstr "ejabberd SOCKS5 Bytestreams module" -#: mod_pubsub/mod_pubsub.erl:1119 mod_pubsub/mod_pubsub_odbc.erl:928 +#: mod_pubsub/mod_pubsub.erl:1120 mod_pubsub/mod_pubsub_odbc.erl:929 msgid "Publish-Subscribe" msgstr "เผยแพร่-สมัครเข้าใช้งาน" -#: mod_pubsub/mod_pubsub.erl:1213 mod_pubsub/mod_pubsub_odbc.erl:1024 +#: mod_pubsub/mod_pubsub.erl:1214 mod_pubsub/mod_pubsub_odbc.erl:1025 msgid "ejabberd Publish-Subscribe module" msgstr "ejabberd Publish-Subscribe module" -#: mod_pubsub/mod_pubsub.erl:1496 mod_pubsub/mod_pubsub_odbc.erl:1311 +#: mod_pubsub/mod_pubsub.erl:1497 mod_pubsub/mod_pubsub_odbc.erl:1312 msgid "PubSub subscriber request" msgstr "คำร้องขอของผู้สมัครเข้าใช้งาน PubSub" -#: mod_pubsub/mod_pubsub.erl:1498 mod_pubsub/mod_pubsub_odbc.erl:1313 +#: mod_pubsub/mod_pubsub.erl:1499 mod_pubsub/mod_pubsub_odbc.erl:1314 msgid "Choose whether to approve this entity's subscription." msgstr "เลือกว่าจะอนุมัติการสมัครเข้าใช้งานของเอนทิตี้นี้หรือไม่" -#: mod_pubsub/mod_pubsub.erl:1504 mod_pubsub/mod_pubsub_odbc.erl:1319 +#: mod_pubsub/mod_pubsub.erl:1505 mod_pubsub/mod_pubsub_odbc.erl:1320 msgid "Node ID" msgstr "ID โหนด" -#: mod_pubsub/mod_pubsub.erl:1509 mod_pubsub/mod_pubsub_odbc.erl:1324 +#: mod_pubsub/mod_pubsub.erl:1510 mod_pubsub/mod_pubsub_odbc.erl:1325 msgid "Subscriber Address" msgstr "ที่อยู่ของผู้สมัคร" -#: mod_pubsub/mod_pubsub.erl:1515 mod_pubsub/mod_pubsub_odbc.erl:1330 +#: mod_pubsub/mod_pubsub.erl:1516 mod_pubsub/mod_pubsub_odbc.erl:1331 msgid "Allow this Jabber ID to subscribe to this pubsub node?" msgstr "อนุญาตให้ Jabber ID นี้เข้าร่วมเป็นสมาชิกของโหนด pubsub หรือไม่" -#: mod_pubsub/mod_pubsub.erl:3416 mod_pubsub/mod_pubsub_odbc.erl:3229 +#: mod_pubsub/mod_pubsub.erl:3474 mod_pubsub/mod_pubsub_odbc.erl:3287 msgid "Deliver payloads with event notifications" msgstr "ส่งส่วนของข้อมูล (payload) พร้อมกับการแจ้งเตือนเหตุการณ์" -#: mod_pubsub/mod_pubsub.erl:3417 mod_pubsub/mod_pubsub_odbc.erl:3230 +#: mod_pubsub/mod_pubsub.erl:3475 mod_pubsub/mod_pubsub_odbc.erl:3288 msgid "Deliver event notifications" msgstr "ส่งการแจ้งเตือนเหตุการณ์" -#: mod_pubsub/mod_pubsub.erl:3418 mod_pubsub/mod_pubsub_odbc.erl:3231 +#: mod_pubsub/mod_pubsub.erl:3476 mod_pubsub/mod_pubsub_odbc.erl:3289 msgid "Notify subscribers when the node configuration changes" msgstr "แจ้งเตือนผู้สมัครสมาชิกเมื่อการกำหนดค่าโหนดเปลี่ยนแปลง" -#: mod_pubsub/mod_pubsub.erl:3419 mod_pubsub/mod_pubsub_odbc.erl:3232 +#: mod_pubsub/mod_pubsub.erl:3477 mod_pubsub/mod_pubsub_odbc.erl:3290 msgid "Notify subscribers when the node is deleted" msgstr "แจ้งเตือนผู้สมัครสมาชิกเมื่อโหนดถูกลบ" -#: mod_pubsub/mod_pubsub.erl:3420 mod_pubsub/mod_pubsub_odbc.erl:3233 +#: mod_pubsub/mod_pubsub.erl:3478 mod_pubsub/mod_pubsub_odbc.erl:3291 msgid "Notify subscribers when items are removed from the node" msgstr "แจ้งเตือนผู้สมัครสมาชิกเมื่อรายการถูกลบออกจากโหนด" -#: mod_pubsub/mod_pubsub.erl:3421 mod_pubsub/mod_pubsub_odbc.erl:3234 +#: mod_pubsub/mod_pubsub.erl:3479 mod_pubsub/mod_pubsub_odbc.erl:3292 msgid "Persist items to storage" msgstr "ยืนยันรายการที่จะจัดเก็บ" -#: mod_pubsub/mod_pubsub.erl:3422 mod_pubsub/mod_pubsub_odbc.erl:3235 +#: mod_pubsub/mod_pubsub.erl:3480 mod_pubsub/mod_pubsub_odbc.erl:3293 msgid "A friendly name for the node" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3423 mod_pubsub/mod_pubsub_odbc.erl:3236 +#: mod_pubsub/mod_pubsub.erl:3481 mod_pubsub/mod_pubsub_odbc.erl:3294 msgid "Max # of items to persist" msgstr "จำนวนสูงสุดของรายการที่ยืนยัน" -#: mod_pubsub/mod_pubsub.erl:3424 mod_pubsub/mod_pubsub_odbc.erl:3237 +#: mod_pubsub/mod_pubsub.erl:3482 mod_pubsub/mod_pubsub_odbc.erl:3295 msgid "Whether to allow subscriptions" msgstr "อนุญาตให้เข้าร่วมเป็นสมาชิกหรือไม่" -#: mod_pubsub/mod_pubsub.erl:3425 mod_pubsub/mod_pubsub_odbc.erl:3238 +#: mod_pubsub/mod_pubsub.erl:3483 mod_pubsub/mod_pubsub_odbc.erl:3296 msgid "Specify the access model" msgstr "ระบุโมเดลการเข้าถึง" -#: mod_pubsub/mod_pubsub.erl:3428 mod_pubsub/mod_pubsub_odbc.erl:3241 +#: mod_pubsub/mod_pubsub.erl:3486 mod_pubsub/mod_pubsub_odbc.erl:3299 msgid "Roster groups allowed to subscribe" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3429 mod_pubsub/mod_pubsub_odbc.erl:3242 +#: mod_pubsub/mod_pubsub.erl:3487 mod_pubsub/mod_pubsub_odbc.erl:3300 msgid "Specify the publisher model" msgstr "ระบุโมเดลผู้เผยแพร่" -#: mod_pubsub/mod_pubsub.erl:3431 mod_pubsub/mod_pubsub_odbc.erl:3244 +#: mod_pubsub/mod_pubsub.erl:3489 mod_pubsub/mod_pubsub_odbc.erl:3302 msgid "Purge all items when the relevant publisher goes offline" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3432 mod_pubsub/mod_pubsub_odbc.erl:3245 +#: mod_pubsub/mod_pubsub.erl:3490 mod_pubsub/mod_pubsub_odbc.erl:3303 #, fuzzy msgid "Specify the event message type" msgstr "ระบุโมเดลการเข้าถึง" -#: mod_pubsub/mod_pubsub.erl:3434 mod_pubsub/mod_pubsub_odbc.erl:3247 +#: mod_pubsub/mod_pubsub.erl:3492 mod_pubsub/mod_pubsub_odbc.erl:3305 msgid "Max payload size in bytes" msgstr "ขนาดสูงสุดของส่วนของข้อมูล (payload) มีหน่วยเป็นไบต์" -#: mod_pubsub/mod_pubsub.erl:3435 mod_pubsub/mod_pubsub_odbc.erl:3248 +#: mod_pubsub/mod_pubsub.erl:3493 mod_pubsub/mod_pubsub_odbc.erl:3306 msgid "When to send the last published item" msgstr "เวลาที่ส่งรายการที่เผยแพร่ครั้งล่าสุด" -#: mod_pubsub/mod_pubsub.erl:3437 mod_pubsub/mod_pubsub_odbc.erl:3250 +#: mod_pubsub/mod_pubsub.erl:3495 mod_pubsub/mod_pubsub_odbc.erl:3308 msgid "Only deliver notifications to available users" msgstr "ส่งการแจ้งเตือนถึงผู้ใช้ที่สามารถติดต่อได้เท่านั้น" -#: mod_pubsub/mod_pubsub.erl:3438 mod_pubsub/mod_pubsub_odbc.erl:3251 +#: mod_pubsub/mod_pubsub.erl:3496 mod_pubsub/mod_pubsub_odbc.erl:3309 msgid "The collections with which a node is affiliated" msgstr "" @@ -1168,15 +1227,11 @@ msgstr "คุณต้องใช้ไคลเอ็นต์ที่รอ msgid "Choose a username and password to register with this server" msgstr "เลือกชื่อผู้ใช้และรหัสผ่านเพื่อลงทะเบียนกับเซิร์ฟเวอร์นี้" -#: mod_register.erl:230 mod_vcard.erl:358 mod_vcard_odbc.erl:336 -#: web/ejabberd_web_admin.erl:1516 web/ejabberd_web_admin.erl:1573 +#: mod_register.erl:230 mod_vcard.erl:364 mod_vcard_odbc.erl:342 +#: web/ejabberd_web_admin.erl:1515 web/ejabberd_web_admin.erl:1572 msgid "User" msgstr "ผู้ใช้" -#: mod_register.erl:251 -msgid "Unable to generate a CAPTCHA" -msgstr "" - #: mod_register.erl:316 mod_register.erl:361 #, fuzzy msgid "The password is too weak" @@ -1187,120 +1242,123 @@ msgstr "รหัสผ่านคือ" msgid "Users are not allowed to register accounts so quickly" msgstr "ผู้เยี่ยมเยือนไม่ได้รับอนุญาตให้ส่งข้อความถึงผู้ครอบครองห้องทั้งหมด" -#: mod_roster.erl:938 mod_roster_odbc.erl:1043 web/ejabberd_web_admin.erl:1699 -#: web/ejabberd_web_admin.erl:1884 web/ejabberd_web_admin.erl:1895 -#: web/ejabberd_web_admin.erl:2218 +#: mod_roster.erl:938 mod_roster_odbc.erl:1055 web/ejabberd_web_admin.erl:1701 +#: web/ejabberd_web_admin.erl:1886 web/ejabberd_web_admin.erl:1897 +#: web/ejabberd_web_admin.erl:2219 msgid "None" msgstr "ไม่มี" -#: mod_roster.erl:945 mod_roster_odbc.erl:1050 +#: mod_roster.erl:945 mod_roster_odbc.erl:1062 msgid "Subscription" msgstr "การสมัครสมาชิก" -#: mod_roster.erl:946 mod_roster_odbc.erl:1051 +#: mod_roster.erl:946 mod_roster_odbc.erl:1063 msgid "Pending" msgstr "ค้างอยู่" -#: mod_roster.erl:947 mod_roster_odbc.erl:1052 +#: mod_roster.erl:947 mod_roster_odbc.erl:1064 msgid "Groups" msgstr "กลุ่ม" -#: mod_roster.erl:974 mod_roster_odbc.erl:1079 +#: mod_roster.erl:974 mod_roster_odbc.erl:1091 msgid "Validate" msgstr "ตรวจสอบ" -#: mod_roster.erl:982 mod_roster_odbc.erl:1087 +#: mod_roster.erl:982 mod_roster_odbc.erl:1099 msgid "Remove" msgstr "ลบ" -#: mod_roster.erl:985 mod_roster_odbc.erl:1090 +#: mod_roster.erl:985 mod_roster_odbc.erl:1102 msgid "Roster of " msgstr "บัญชีรายชื่อของ " -#: mod_roster.erl:988 mod_roster_odbc.erl:1093 mod_shared_roster.erl:897 -#: mod_shared_roster.erl:1006 web/ejabberd_web_admin.erl:834 +#: mod_roster.erl:988 mod_roster_odbc.erl:1105 mod_shared_roster.erl:902 +#: mod_shared_roster.erl:1011 mod_shared_roster_odbc.erl:931 +#: mod_shared_roster_odbc.erl:1040 web/ejabberd_web_admin.erl:834 #: web/ejabberd_web_admin.erl:875 web/ejabberd_web_admin.erl:943 #: web/ejabberd_web_admin.erl:979 web/ejabberd_web_admin.erl:1020 -#: web/ejabberd_web_admin.erl:1510 web/ejabberd_web_admin.erl:1759 -#: web/ejabberd_web_admin.erl:1930 web/ejabberd_web_admin.erl:2135 -#: web/ejabberd_web_admin.erl:2160 +#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1761 +#: web/ejabberd_web_admin.erl:1932 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2161 msgid "Bad format" msgstr "รูปแบบที่ไม่ถูกต้อง" -#: mod_roster.erl:995 mod_roster_odbc.erl:1100 +#: mod_roster.erl:995 mod_roster_odbc.erl:1112 msgid "Add Jabber ID" msgstr "เพิ่ม Jabber ID" -#: mod_roster.erl:1094 mod_roster_odbc.erl:1199 +#: mod_roster.erl:1094 mod_roster_odbc.erl:1211 msgid "Roster" msgstr "บัญชีรายชื่อ" -#: mod_shared_roster.erl:852 mod_shared_roster.erl:894 -#: mod_shared_roster.erl:1002 +#: mod_shared_roster.erl:857 mod_shared_roster.erl:899 +#: mod_shared_roster.erl:1007 mod_shared_roster_odbc.erl:886 +#: mod_shared_roster_odbc.erl:928 mod_shared_roster_odbc.erl:1036 msgid "Shared Roster Groups" msgstr "กลุ่มบัญชีรายชื่อที่ใช้งานร่วมกัน" -#: mod_shared_roster.erl:890 web/ejabberd_web_admin.erl:1366 -#: web/ejabberd_web_admin.erl:2460 +#: mod_shared_roster.erl:895 mod_shared_roster_odbc.erl:924 +#: web/ejabberd_web_admin.erl:1365 web/ejabberd_web_admin.erl:2461 msgid "Add New" msgstr "เพิ่มผู้ใช้ใหม่" -#: mod_shared_roster.erl:973 +#: mod_shared_roster.erl:978 mod_shared_roster_odbc.erl:1007 msgid "Name:" msgstr "ชื่อ:" -#: mod_shared_roster.erl:978 +#: mod_shared_roster.erl:983 mod_shared_roster_odbc.erl:1012 msgid "Description:" msgstr "รายละเอียด:" -#: mod_shared_roster.erl:986 +#: mod_shared_roster.erl:991 mod_shared_roster_odbc.erl:1020 msgid "Members:" msgstr "สมาชิก:" -#: mod_shared_roster.erl:994 +#: mod_shared_roster.erl:999 mod_shared_roster_odbc.erl:1028 msgid "Displayed Groups:" msgstr "กลุ่มที่แสดง:" -#: mod_shared_roster.erl:1003 +#: mod_shared_roster.erl:1008 mod_shared_roster_odbc.erl:1037 msgid "Group " msgstr "กลุ่ม" -#: mod_shared_roster.erl:1012 web/ejabberd_web_admin.erl:840 -#: web/ejabberd_web_admin.erl:884 web/ejabberd_web_admin.erl:949 -#: web/ejabberd_web_admin.erl:1026 web/ejabberd_web_admin.erl:2015 +#: mod_shared_roster.erl:1017 mod_shared_roster_odbc.erl:1046 +#: web/ejabberd_web_admin.erl:840 web/ejabberd_web_admin.erl:884 +#: web/ejabberd_web_admin.erl:949 web/ejabberd_web_admin.erl:1026 +#: web/ejabberd_web_admin.erl:2017 msgid "Submit" msgstr "ส่ง" -#: mod_vcard.erl:165 mod_vcard_ldap.erl:237 mod_vcard_odbc.erl:129 +#: mod_vcard.erl:165 mod_vcard_ldap.erl:238 mod_vcard_odbc.erl:129 msgid "Erlang Jabber Server" msgstr "Erlang Jabber Server" -#: mod_vcard.erl:358 mod_vcard.erl:472 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:448 +#: mod_vcard.erl:364 mod_vcard.erl:478 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:454 msgid "Birthday" msgstr "วันเกิด" -#: mod_vcard.erl:358 mod_vcard.erl:474 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:450 +#: mod_vcard.erl:364 mod_vcard.erl:480 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:456 msgid "City" msgstr "เมือง" -#: mod_vcard.erl:358 mod_vcard.erl:473 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:449 +#: mod_vcard.erl:364 mod_vcard.erl:479 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:455 msgid "Country" msgstr "ประเทศ" -#: mod_vcard.erl:358 mod_vcard.erl:475 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:451 +#: mod_vcard.erl:364 mod_vcard.erl:481 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:457 msgid "Email" msgstr "อีเมล" -#: mod_vcard.erl:358 mod_vcard.erl:470 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:446 +#: mod_vcard.erl:364 mod_vcard.erl:476 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:452 msgid "Family Name" msgstr "นามสกุล" -#: mod_vcard.erl:358 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_odbc.erl:342 msgid "" "Fill in the form to search for any matching Jabber User (Add * to the end of " "field to match substring)" @@ -1308,52 +1366,52 @@ msgstr "" "กรอกข้อมูลในแบบฟอร์มเพื่อค้นหาผู้ใช้ Jabber ที่ตรงกัน (ใส่เครื่องหมาย * " "ที่ท้ายสุดของฟิลด์เพื่อจับคู่กับสตริงย่อย)" -#: mod_vcard.erl:358 mod_vcard.erl:467 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:443 +#: mod_vcard.erl:364 mod_vcard.erl:473 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:449 msgid "Full Name" msgstr "ชื่อเต็ม" -#: mod_vcard.erl:358 mod_vcard.erl:469 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:445 +#: mod_vcard.erl:364 mod_vcard.erl:475 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:451 msgid "Middle Name" msgstr "ชื่อกลาง" -#: mod_vcard.erl:358 mod_vcard.erl:468 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:444 web/ejabberd_web_admin.erl:2004 +#: mod_vcard.erl:364 mod_vcard.erl:474 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:450 web/ejabberd_web_admin.erl:2006 msgid "Name" msgstr "ชื่อ" -#: mod_vcard.erl:358 mod_vcard.erl:476 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:452 +#: mod_vcard.erl:364 mod_vcard.erl:482 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:458 msgid "Organization Name" msgstr "ชื่อองค์กร" -#: mod_vcard.erl:358 mod_vcard.erl:477 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:453 +#: mod_vcard.erl:364 mod_vcard.erl:483 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:459 msgid "Organization Unit" msgstr "หน่วยขององค์กร" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "Search users in " msgstr "ค้นหาผู้ใช้ใน " -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "You need an x:data capable client to search" msgstr "คุณต้องใช้ไคลเอ็นต์ที่รองรับ x:data เพื่อค้นหา" -#: mod_vcard.erl:383 mod_vcard_ldap.erl:483 mod_vcard_odbc.erl:361 +#: mod_vcard.erl:389 mod_vcard_ldap.erl:487 mod_vcard_odbc.erl:367 msgid "vCard User Search" msgstr "ค้นหาผู้ใช้ vCard " -#: mod_vcard.erl:439 mod_vcard_ldap.erl:537 mod_vcard_odbc.erl:415 +#: mod_vcard.erl:445 mod_vcard_ldap.erl:541 mod_vcard_odbc.erl:421 msgid "ejabberd vCard module" msgstr "ejabberd vCard module" -#: mod_vcard.erl:463 mod_vcard_ldap.erl:547 mod_vcard_odbc.erl:439 +#: mod_vcard.erl:469 mod_vcard_ldap.erl:551 mod_vcard_odbc.erl:445 msgid "Search Results for " msgstr "ผลการค้นหาสำหรับ " -#: mod_vcard_ldap.erl:458 +#: mod_vcard_ldap.erl:462 msgid "Fill in fields to search for any matching Jabber User" msgstr "กรอกข้อมูลลงในฟิลด์เพื่อค้นหาผู้ใช้ Jabber ที่ตรงกัน" @@ -1415,7 +1473,7 @@ msgstr "แสดงตารางทั่วไป" msgid "Show Integral Table" msgstr "แสดงตารางรวม" -#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1937 +#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1939 msgid "Statistics" msgstr "สถิติ" @@ -1428,116 +1486,116 @@ msgstr "ไม่พบโหนด" msgid "Node not found" msgstr "ไม่พบโหนด" -#: web/ejabberd_web_admin.erl:1461 +#: web/ejabberd_web_admin.erl:1460 msgid "Host" msgstr "โฮสต์" -#: web/ejabberd_web_admin.erl:1462 +#: web/ejabberd_web_admin.erl:1461 msgid "Registered Users" msgstr "ผู้ใช้ที่ลงทะเบียน" -#: web/ejabberd_web_admin.erl:1574 +#: web/ejabberd_web_admin.erl:1573 msgid "Offline Messages" msgstr "ข้อความออฟไลน์" -#: web/ejabberd_web_admin.erl:1575 web/ejabberd_web_admin.erl:1765 +#: web/ejabberd_web_admin.erl:1574 web/ejabberd_web_admin.erl:1767 msgid "Last Activity" msgstr "กิจกรรมล่าสุด" -#: web/ejabberd_web_admin.erl:1657 web/ejabberd_web_admin.erl:1673 +#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 msgid "Registered Users:" msgstr "ผู้ใช้ที่ลงทะเบียน:" -#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 -#: web/ejabberd_web_admin.erl:2191 +#: web/ejabberd_web_admin.erl:1661 web/ejabberd_web_admin.erl:1677 +#: web/ejabberd_web_admin.erl:2192 msgid "Online Users:" msgstr "ผู้ใช้ออนไลน์:" -#: web/ejabberd_web_admin.erl:1661 +#: web/ejabberd_web_admin.erl:1663 msgid "Outgoing s2s Connections:" msgstr "การเชื่อมต่อ s2s ขาออก:" -#: web/ejabberd_web_admin.erl:1663 +#: web/ejabberd_web_admin.erl:1665 msgid "Outgoing s2s Servers:" msgstr "เซิร์ฟเวอร์ s2s ขาออก:" -#: web/ejabberd_web_admin.erl:1732 web/mod_register_web.erl:175 +#: web/ejabberd_web_admin.erl:1734 web/mod_register_web.erl:175 #: web/mod_register_web.erl:372 web/mod_register_web.erl:381 #: web/mod_register_web.erl:411 msgid "Change Password" msgstr "เปลี่ยนรหัสผ่าน" -#: web/ejabberd_web_admin.erl:1756 +#: web/ejabberd_web_admin.erl:1758 msgid "User " msgstr "ผู้ใช้" -#: web/ejabberd_web_admin.erl:1763 +#: web/ejabberd_web_admin.erl:1765 msgid "Connected Resources:" msgstr "ทรัพยากรที่เชื่อมต่อ:" -#: web/ejabberd_web_admin.erl:1764 web/mod_register_web.erl:227 +#: web/ejabberd_web_admin.erl:1766 web/mod_register_web.erl:227 #: web/mod_register_web.erl:519 msgid "Password:" msgstr "รหัสผ่าน:" -#: web/ejabberd_web_admin.erl:1826 +#: web/ejabberd_web_admin.erl:1828 msgid "No Data" msgstr "ไม่มีข้อมูล" -#: web/ejabberd_web_admin.erl:1904 +#: web/ejabberd_web_admin.erl:1906 msgid "Nodes" msgstr "โหนด" -#: web/ejabberd_web_admin.erl:1927 web/ejabberd_web_admin.erl:1949 +#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1951 msgid "Node " msgstr "โหนด " -#: web/ejabberd_web_admin.erl:1936 +#: web/ejabberd_web_admin.erl:1938 msgid "Listened Ports" msgstr "พอร์ทฟัง" -#: web/ejabberd_web_admin.erl:1938 web/ejabberd_web_admin.erl:2259 -#: web/ejabberd_web_admin.erl:2447 +#: web/ejabberd_web_admin.erl:1940 web/ejabberd_web_admin.erl:2260 +#: web/ejabberd_web_admin.erl:2448 msgid "Update" msgstr "อัพเดต" -#: web/ejabberd_web_admin.erl:1941 web/ejabberd_web_admin.erl:2568 +#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2569 msgid "Restart" msgstr "เริ่มต้นใหม่" -#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2570 +#: web/ejabberd_web_admin.erl:1945 web/ejabberd_web_admin.erl:2571 msgid "Stop" msgstr "หยุด" -#: web/ejabberd_web_admin.erl:1957 +#: web/ejabberd_web_admin.erl:1959 msgid "RPC Call Error" msgstr "ข้อผิดพลาดจากการเรียกใช้ RPC" -#: web/ejabberd_web_admin.erl:1998 +#: web/ejabberd_web_admin.erl:2000 msgid "Database Tables at " msgstr "ตารางฐานข้อมูลที่" -#: web/ejabberd_web_admin.erl:2005 +#: web/ejabberd_web_admin.erl:2007 msgid "Storage Type" msgstr "ชนิดที่เก็บข้อมูล" -#: web/ejabberd_web_admin.erl:2006 +#: web/ejabberd_web_admin.erl:2008 msgid "Elements" msgstr "" -#: web/ejabberd_web_admin.erl:2007 +#: web/ejabberd_web_admin.erl:2009 msgid "Memory" msgstr "หน่วยความจำ" -#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2032 web/ejabberd_web_admin.erl:2137 msgid "Error" msgstr "" -#: web/ejabberd_web_admin.erl:2033 +#: web/ejabberd_web_admin.erl:2034 msgid "Backup of " msgstr "การสำรองข้อมูล" -#: web/ejabberd_web_admin.erl:2035 +#: web/ejabberd_web_admin.erl:2036 #, fuzzy msgid "" "Please note that these options will only backup the builtin Mnesia database. " @@ -1547,145 +1605,145 @@ msgstr "" "โปรดทราบว่าตัวเลือกเหล่านี้จะสำรองข้อมูลในฐานข้อมูล builtin Mnesia เท่านั้น หากคุณใช้โมดูล " "ODBC คุณต้องสำรองข้อมูลของฐานข้อมูล SQL แยกต่างหากด้วย" -#: web/ejabberd_web_admin.erl:2040 +#: web/ejabberd_web_admin.erl:2041 msgid "Store binary backup:" msgstr "จัดเก็บข้อมูลสำรองแบบไบนารี:" -#: web/ejabberd_web_admin.erl:2044 web/ejabberd_web_admin.erl:2051 -#: web/ejabberd_web_admin.erl:2059 web/ejabberd_web_admin.erl:2066 -#: web/ejabberd_web_admin.erl:2073 web/ejabberd_web_admin.erl:2080 -#: web/ejabberd_web_admin.erl:2087 web/ejabberd_web_admin.erl:2095 -#: web/ejabberd_web_admin.erl:2102 web/ejabberd_web_admin.erl:2109 +#: web/ejabberd_web_admin.erl:2045 web/ejabberd_web_admin.erl:2052 +#: web/ejabberd_web_admin.erl:2060 web/ejabberd_web_admin.erl:2067 +#: web/ejabberd_web_admin.erl:2074 web/ejabberd_web_admin.erl:2081 +#: web/ejabberd_web_admin.erl:2088 web/ejabberd_web_admin.erl:2096 +#: web/ejabberd_web_admin.erl:2103 web/ejabberd_web_admin.erl:2110 msgid "OK" msgstr "ตกลง" -#: web/ejabberd_web_admin.erl:2047 +#: web/ejabberd_web_admin.erl:2048 msgid "Restore binary backup immediately:" msgstr "คืนค่าข้อมูลสำรองแบบไบนารีโดยทันที:" -#: web/ejabberd_web_admin.erl:2055 +#: web/ejabberd_web_admin.erl:2056 msgid "" "Restore binary backup after next ejabberd restart (requires less memory):" msgstr "" "คืนค่าข้อมูลสำรองแบบไบนารีหลังจากที่ ejabberd ถัดไปเริ่มการทำงานใหม่ (ใช้หน่วยความจำน้อยลง):" -#: web/ejabberd_web_admin.erl:2062 +#: web/ejabberd_web_admin.erl:2063 msgid "Store plain text backup:" msgstr "จัดเก็บข้อมูลสำรองที่เป็นข้อความธรรมดา:" -#: web/ejabberd_web_admin.erl:2069 +#: web/ejabberd_web_admin.erl:2070 msgid "Restore plain text backup immediately:" msgstr "คืนค่าข้อมูลสำรองที่เป็นข้อความธรรมดาโดยทันที:" -#: web/ejabberd_web_admin.erl:2076 +#: web/ejabberd_web_admin.erl:2077 msgid "Import users data from a PIEFXIS file (XEP-0227):" msgstr "" -#: web/ejabberd_web_admin.erl:2083 +#: web/ejabberd_web_admin.erl:2084 msgid "Export data of all users in the server to PIEFXIS files (XEP-0227):" msgstr "" -#: web/ejabberd_web_admin.erl:2090 +#: web/ejabberd_web_admin.erl:2091 msgid "Export data of users in a host to PIEFXIS files (XEP-0227):" msgstr "" -#: web/ejabberd_web_admin.erl:2098 +#: web/ejabberd_web_admin.erl:2099 #, fuzzy msgid "Import user data from jabberd14 spool file:" msgstr "อิมพอร์ตผู้ใช้จากไฟล์เก็บพักข้อมูล jabberd14" -#: web/ejabberd_web_admin.erl:2105 +#: web/ejabberd_web_admin.erl:2106 #, fuzzy msgid "Import users data from jabberd14 spool directory:" msgstr "อิมพอร์ตผู้ใช้จากไฟล์เก็บพักข้อมูล jabberd14" -#: web/ejabberd_web_admin.erl:2131 +#: web/ejabberd_web_admin.erl:2132 msgid "Listened Ports at " msgstr "พอร์ทฟังที่" -#: web/ejabberd_web_admin.erl:2156 +#: web/ejabberd_web_admin.erl:2157 msgid "Modules at " msgstr "โมดูลที่ " -#: web/ejabberd_web_admin.erl:2182 +#: web/ejabberd_web_admin.erl:2183 msgid "Statistics of ~p" msgstr "สถิติของ ~p" -#: web/ejabberd_web_admin.erl:2185 +#: web/ejabberd_web_admin.erl:2186 msgid "Uptime:" msgstr "เวลาการทำงานต่อเนื่อง:" -#: web/ejabberd_web_admin.erl:2188 +#: web/ejabberd_web_admin.erl:2189 msgid "CPU Time:" msgstr "เวลาการทำงานของ CPU:" -#: web/ejabberd_web_admin.erl:2194 +#: web/ejabberd_web_admin.erl:2195 msgid "Transactions Committed:" msgstr "ทรานแซกชันที่ได้รับมอบหมาย:" -#: web/ejabberd_web_admin.erl:2197 +#: web/ejabberd_web_admin.erl:2198 msgid "Transactions Aborted:" msgstr "ทรานแซกชันที่ถูกยกเลิก:" -#: web/ejabberd_web_admin.erl:2200 +#: web/ejabberd_web_admin.erl:2201 msgid "Transactions Restarted:" msgstr "ทรานแซกชันที่เริ่มทำงานใหม่อีกครั้ง:" -#: web/ejabberd_web_admin.erl:2203 +#: web/ejabberd_web_admin.erl:2204 msgid "Transactions Logged:" msgstr "ทรานแซกชันที่บันทึก:" -#: web/ejabberd_web_admin.erl:2245 +#: web/ejabberd_web_admin.erl:2246 msgid "Update " msgstr "อัพเดต " -#: web/ejabberd_web_admin.erl:2253 +#: web/ejabberd_web_admin.erl:2254 msgid "Update plan" msgstr "แผนการอัพเดต" -#: web/ejabberd_web_admin.erl:2254 +#: web/ejabberd_web_admin.erl:2255 #, fuzzy msgid "Modified modules" msgstr "โมดูลที่อัพเดต" -#: web/ejabberd_web_admin.erl:2255 +#: web/ejabberd_web_admin.erl:2256 msgid "Update script" msgstr "อัพเดตสคริปต์" -#: web/ejabberd_web_admin.erl:2256 +#: web/ejabberd_web_admin.erl:2257 msgid "Low level update script" msgstr "อัพเดตสคริปต์ระดับต่ำ" -#: web/ejabberd_web_admin.erl:2257 +#: web/ejabberd_web_admin.erl:2258 msgid "Script check" msgstr "ตรวจสอบคริปต์" -#: web/ejabberd_web_admin.erl:2425 +#: web/ejabberd_web_admin.erl:2426 msgid "Port" msgstr "พอร์ท" -#: web/ejabberd_web_admin.erl:2426 +#: web/ejabberd_web_admin.erl:2427 msgid "IP" msgstr "" -#: web/ejabberd_web_admin.erl:2427 +#: web/ejabberd_web_admin.erl:2428 #, fuzzy msgid "Protocol" msgstr "พอร์ท" -#: web/ejabberd_web_admin.erl:2428 web/ejabberd_web_admin.erl:2555 +#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 msgid "Module" msgstr "โมดูล" -#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 +#: web/ejabberd_web_admin.erl:2430 web/ejabberd_web_admin.erl:2557 msgid "Options" msgstr "ตัวเลือก" -#: web/ejabberd_web_admin.erl:2449 +#: web/ejabberd_web_admin.erl:2450 msgid "Delete" msgstr "ลบ" -#: web/ejabberd_web_admin.erl:2578 +#: web/ejabberd_web_admin.erl:2579 msgid "Start" msgstr "เริ่ม" diff --git a/src/msgs/tr.msg b/src/msgs/tr.msg index 014b7c81a..06de13813 100644 --- a/src/msgs/tr.msg +++ b/src/msgs/tr.msg @@ -20,7 +20,9 @@ {"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 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 voice requests","Ziyaretçilerin ses isteğine göndermelerine izin ver"}. {"All Users","Tüm Kullanıcılar"}. {"Announcements","Duyurular"}. {"anyone","herkes"}. @@ -33,9 +35,15 @@ {"Backup","Yedekle"}. {"Bad format","Kötü biçem"}. {"Birthday","Doğumgünü"}. +{"CAPTCHA web page","CAPTCHA web sayfası"}. {"Change Password","Parola 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 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ı"}. {"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"}. @@ -65,9 +73,11 @@ {"Description:","Tanım:"}. {"Disc only copy","Sadece disk kopyala"}. {"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 to Text File","Metin Dosyasına Döküm Al"}. {"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 MUC module","ejabberd MUC modülü"}. {"ejabberd Publish-Subscribe module","ejabberd Publish-Subscribe modülü"}. @@ -91,8 +101,10 @@ {"Erlang Jabber Server","Erlang Jabber Sunucusu"}. {"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\"}]"}. +{"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 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"}. {"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"}. @@ -106,6 +118,7 @@ {"Get User Last Login Time","Kullanıcı Son Giriş Zamanınlarını Al"}. {"Get User Password","Kullanıcı Parolasını Al"}. {"Get User Statistics","Kullanıcı İstatistiklerini Al"}. +{"Grant voice to this person?","Bu kişiye ses verelim mi?"}. {"Group ","Group "}. {"Groups","Gruplar"}. {"has been banned","odaya girmesi yasaklandı"}. @@ -115,6 +128,7 @@ {"has been kicked","odadan atıldı"}. {" has set the subject to: "," konuyu değiştirdi: "}. {"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."}. {"Import Directory","Dizini İç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","Özel mesaj 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 ~s is invalid","Jabber ID ~s geçersiz"}. {"January","Ocak"}. @@ -159,7 +174,7 @@ {"List of modules to start","Başlatılacak modüllerin listesi"}. {"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 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 moderated","Odayı moderasyonlu hale getir"}. {"Make room password protected","Odayı parola korumalı hale getir"}. @@ -172,9 +187,11 @@ {"May","Mayıs"}. {"Membership is required to enter this room","Bu odaya girmek için üyelik gerekiyor"}. {"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"}. {"Message body","Mesajın gövdesi"}. {"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"}. {"moderators only","sadece moderatörler"}. {"Modified modules","Değişen modüller"}. @@ -185,9 +202,11 @@ {"Name:","İsim:"}. {"Name","İsim"}. {"Never","Asla"}. +{"New Password:","Yeni Parola:"}. {"Nickname Registration at ","Takma İsim Kaydı : "}. {"Nickname ~s does not exist in the room","~s takma ismi odada yok"}. {"Nickname","Takma isim"}. +{"nobody","hiç kimse"}. {"No body provided for announce message","Duyuru mesajının gövdesi yok"}. {"No Data","Veri Yok"}. {"Node ","Düğüm "}. @@ -209,12 +228,14 @@ {"Offline Messages:","Çevirim-dışı Mesajlar:"}. {"Offline Messages","Çevirim-dışı Mesajlar"}. {"OK","Tamam"}. +{"Old Password:","Eski Parola:"}. {"Online","Bağlı"}. {"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 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 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 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"}. @@ -229,6 +250,7 @@ {"Password ~b","Parola ~b"}. {"Password:","Parola:"}. {"Password","Parola"}. +{"Password Verification:","Parola Doğrulaması:"}. {"Password Verification","Parola Doğrulaması"}. {"Path to Dir","Dizinin Yolu"}. {"Path to File","Dosyanın Yolu"}. @@ -237,6 +259,7 @@ {"Persist items to storage","Öğeleri depoda kalıcı hale getir"}. {"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, wait for a while before sending new voice request","Lütfen yeni bir ses isteği göndermeden önce biraz bekleyin"}. {"Pong","Pong"}. {"Port ~b","Kapı (Port) ~b"}. {"Port","Kapı (Port)"}. @@ -245,14 +268,17 @@ {"Protocol","Protokol"}. {"Publish-Subscribe","Yayınla-Üye Ol"}. {"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"}. {"RAM and disc copy","RAM ve disk kopyala"}. {"RAM copy","RAM kopyala"}. {"Raw","Ham"}. {"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"}. +{"Register a Jabber account","Bir Jabber hesabı kaydet"}. {"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 : "}. {"Remote copy","Uzak kopyala"}. {"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"}. {"September","Eylül"}. {"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 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ı"}. @@ -296,7 +323,9 @@ {"Show Ordinary Table","Sıradan Tabloyu Göster"}. {"Shut Down Service","Servisi Kapat"}. {"~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 event message type","Olay mesaj tipini belirtiniz"}. {"Specify the publisher model","Yayıncı modelini belirtiniz"}. {"~s's Offline Messages Queue","~s Kullanıcısının Mesaj Kuyruğu"}. {"Start","Başlat"}. @@ -319,9 +348,18 @@ {"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 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 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 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ı"}. @@ -330,6 +368,7 @@ {"Time delay","Zaman gecikmesi"}. {"Time","Zaman"}. {"To","Kime"}. +{"Too many CAPTCHA requests","Çok fazla CAPTCHA isteği"}. {"To ~s","Kime ~s"}. {"Traffic rate limit is exceeded","Trafik oran sınırı aşıldı"}. {"Transactions Aborted:","İptal Edilen Hareketler (Transactions):"}. @@ -337,8 +376,10 @@ {"Transactions Logged:","Kaydı Tutulan Hareketler (Transactions):"}. {"Transactions Restarted:","Tekrar Başlatılan Hareketler (Transactions):"}. {"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"}. +{"Unregister a Jabber account","Bir Jabber hesabı kaydı sil"}. +{"Unregister","Kaydı Sil"}. {"Update ","Güncelle "}. {"Update","GÜncelle"}. {"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"}. {"Uptime:","Hizmet Süresi:"}. {"Use of STARTTLS required","STARTTLS kullanımı gereklidir"}. +{"User JID","Kullanıcı JID"}. {"User ","Kullanıcı "}. {"User","Kullanıcı"}. {"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","Kullanıcılar"}. {"Users Last Activity","Kullanıcıların Son Aktiviteleri"}. @@ -358,13 +401,21 @@ {"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 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"}. {"When to send the last published item","Son yayınlanan öğe ne zaman gönderilsin"}. {"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 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 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"}. +{"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 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."}. diff --git a/src/msgs/tr.po b/src/msgs/tr.po index e8ba84509..91d2219e5 100644 --- a/src/msgs/tr.po +++ b/src/msgs/tr.po @@ -1,10 +1,10 @@ -# translation of ejabberd.tr.po to Turkish -# Doruk Fisek , 2009. +# translation of tr.po to Turkish +# Doruk Fisek , 2009, 2012. msgid "" msgstr "" -"Project-Id-Version: ejabberd.tr\n" -"PO-Revision-Date: 2009-08-12 22:55+0300\n" -"Last-Translator: Doruk Fisek \n" +"Project-Id-Version: tr\n" +"PO-Revision-Date: 2012-04-17 11:18+0300\n" +"Last-Translator: Doruk Fisek \n" "Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" @@ -21,13 +21,13 @@ msgstr "STARTTLS kullanımı gereklidir" msgid "No resource provided" msgstr "Hiç kaynak sağlanmadı" -#: ejabberd_c2s.erl:1149 +#: ejabberd_c2s.erl:1197 msgid "Replaced by new connection" msgstr "Eski bağlantı yenisi ile değiştirildi" -#: ejabberd_c2s.erl:1837 +#: ejabberd_c2s.erl:1885 msgid "Your active privacy list has denied the routing of this stanza." -msgstr "" +msgstr "Etkin mahremiyet listeniz bu bölümün yönlendirilmesini engelledi." #: ejabberd_captcha.erl:96 ejabberd_captcha.erl:152 ejabberd_captcha.erl:178 msgid "Enter the text you see" @@ -42,13 +42,14 @@ msgstr "" #: ejabberd_captcha.erl:134 msgid "If you don't see the CAPTCHA image here, visit the web page." msgstr "" +"Eğer burada CAPTCHA resmini göremiyorsanız, web sayfasını ziyaret edin." #: ejabberd_captcha.erl:146 msgid "CAPTCHA web page" -msgstr "" +msgstr "CAPTCHA web sayfası" #: ejabberd_captcha.erl:307 -msgid "The captcha is valid." +msgid "The CAPTCHA is valid." msgstr "İnsan doğrulaması (captcha) geçerli." #: mod_adhoc.erl:95 mod_adhoc.erl:125 mod_adhoc.erl:143 mod_adhoc.erl:161 @@ -63,64 +64,67 @@ msgstr "Ping" msgid "Pong" msgstr "Pong" -#: mod_announce.erl:506 +#: mod_announce.erl:507 mod_announce_odbc.erl:499 msgid "Really delete message of the day?" msgstr "Günün mesajını silmek istediğinize emin misiniz?" -#: mod_announce.erl:514 mod_configure.erl:1083 mod_configure.erl:1128 +#: mod_announce.erl:515 mod_announce_odbc.erl:507 mod_configure.erl:1083 +#: mod_configure.erl:1128 msgid "Subject" msgstr "Konu" -#: mod_announce.erl:519 mod_configure.erl:1088 mod_configure.erl:1133 +#: mod_announce.erl:520 mod_announce_odbc.erl:512 mod_configure.erl:1088 +#: mod_configure.erl:1133 msgid "Message body" msgstr "Mesajın gövdesi" -#: mod_announce.erl:599 +#: mod_announce.erl:600 mod_announce_odbc.erl:592 msgid "No body provided for announce message" msgstr "Duyuru mesajının gövdesi yok" -#: mod_announce.erl:634 +#: mod_announce.erl:635 mod_announce_odbc.erl:627 msgid "Announcements" msgstr "Duyurular" -#: mod_announce.erl:636 +#: mod_announce.erl:637 mod_announce_odbc.erl:629 msgid "Send announcement to all users" msgstr "Duyuruyu tüm kullanıcılara yolla" -#: mod_announce.erl:638 +#: mod_announce.erl:639 mod_announce_odbc.erl:631 msgid "Send announcement to all users on all hosts" msgstr "Tüm sunuculardaki tüm kullanıcılara duyuru yolla" -#: mod_announce.erl:640 +#: mod_announce.erl:641 mod_announce_odbc.erl:633 msgid "Send announcement to all online users" msgstr "Duyuruyu tüm bağlı kullanıcılara yolla" -#: mod_announce.erl:642 mod_configure.erl:1078 mod_configure.erl:1123 +#: mod_announce.erl:643 mod_announce_odbc.erl:635 mod_configure.erl:1078 +#: mod_configure.erl:1123 msgid "Send announcement to all online users on all hosts" msgstr "Duyuruyu tüm sunuculardaki tüm bağlı kullanıcılara yolla" -#: mod_announce.erl:644 +#: mod_announce.erl:645 mod_announce_odbc.erl:637 msgid "Set message of the day and send to online users" msgstr "Günün mesajını belirle" -#: mod_announce.erl:646 +#: mod_announce.erl:647 mod_announce_odbc.erl:639 msgid "Set message of the day on all hosts and send to online users" msgstr "" "Tüm sunucularda günün mesajını belirle ve bağlı tüm kullanıcılara gönder" -#: mod_announce.erl:648 +#: mod_announce.erl:649 mod_announce_odbc.erl:641 msgid "Update message of the day (don't send)" msgstr "Günün mesajını güncelle (gönderme)" -#: mod_announce.erl:650 +#: mod_announce.erl:651 mod_announce_odbc.erl:643 msgid "Update message of the day on all hosts (don't send)" msgstr "Tüm sunuculardaki günün mesajını güncelle (gönderme)" -#: mod_announce.erl:652 +#: mod_announce.erl:653 mod_announce_odbc.erl:645 msgid "Delete message of the day" msgstr "Günün mesajını sil" -#: mod_announce.erl:654 +#: mod_announce.erl:655 mod_announce_odbc.erl:647 msgid "Delete message of the day on all hosts" msgstr "Tüm sunuculardaki günün mesajını sil" @@ -129,7 +133,7 @@ msgstr "Tüm sunuculardaki günün mesajını sil" msgid "Configuration" msgstr "Ayarlar" -#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1934 +#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1936 msgid "Database" msgstr "Veritabanı" @@ -141,7 +145,7 @@ msgstr "Modülleri Başlat" msgid "Stop Modules" msgstr "Modülleri Durdur" -#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1935 +#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1937 msgid "Backup" msgstr "Yedekle" @@ -170,7 +174,7 @@ msgid "Shut Down Service" msgstr "Servisi Kapat" #: mod_configure.erl:145 mod_configure.erl:518 mod_configure.erl:1197 -#: web/ejabberd_web_admin.erl:1528 +#: web/ejabberd_web_admin.erl:1527 msgid "Add User" msgstr "Kullanıcı Ekle" @@ -222,7 +226,7 @@ msgid "User Management" msgstr "Kullanıcı Yönetimi" #: mod_configure.erl:500 web/ejabberd_web_admin.erl:1058 -#: web/ejabberd_web_admin.erl:1463 +#: web/ejabberd_web_admin.erl:1462 msgid "Online Users" msgstr "Bağlı Kullanıcılar" @@ -234,15 +238,15 @@ msgstr "Tüm Kullanıcılar" msgid "Outgoing s2s Connections" msgstr "Giden s2s Bağlantıları" -#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1905 +#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1907 msgid "Running Nodes" msgstr "Çalışan Düğümler" -#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1907 +#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1909 msgid "Stopped Nodes" msgstr "Durdurulmuş Düğümler" -#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1951 +#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1953 msgid "Modules" msgstr "Modüller" @@ -373,15 +377,15 @@ msgstr "Erişim kuralları" #: mod_configure.erl:1200 mod_configure.erl:1222 mod_configure.erl:1234 #: mod_configure.erl:1246 mod_configure.erl:1258 mod_configure.erl:1275 -#: mod_configure.erl:1287 mod_configure.erl:1652 mod_configure.erl:1702 -#: mod_configure.erl:1723 mod_roster.erl:943 mod_roster_odbc.erl:1048 -#: mod_vcard.erl:466 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:442 +#: mod_configure.erl:1287 mod_configure.erl:1650 mod_configure.erl:1700 +#: mod_configure.erl:1721 mod_roster.erl:943 mod_roster_odbc.erl:1060 +#: mod_vcard.erl:472 mod_vcard_ldap.erl:554 mod_vcard_odbc.erl:448 msgid "Jabber ID" msgstr "Jabber ID" -#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1653 -#: mod_configure.erl:1865 mod_muc/mod_muc_room.erl:2970 mod_register.erl:235 -#: web/ejabberd_web_admin.erl:1521 +#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1651 +#: mod_configure.erl:1863 mod_muc/mod_muc_room.erl:3224 mod_register.erl:235 +#: web/ejabberd_web_admin.erl:1520 msgid "Password" msgstr "Parola" @@ -397,71 +401,72 @@ msgstr "Kayıtlı kullanıcı sayısı" msgid "Number of online users" msgstr "Bağlı kullanıcı sayısı" -#: mod_configure.erl:1684 web/ejabberd_web_admin.erl:1589 -#: web/ejabberd_web_admin.erl:1741 +#: mod_configure.erl:1682 web/ejabberd_web_admin.erl:1588 +#: web/ejabberd_web_admin.erl:1743 msgid "Never" msgstr "Asla" -#: mod_configure.erl:1698 web/ejabberd_web_admin.erl:1602 -#: web/ejabberd_web_admin.erl:1754 +#: mod_configure.erl:1696 web/ejabberd_web_admin.erl:1601 +#: web/ejabberd_web_admin.erl:1756 msgid "Online" msgstr "Bağlı" -#: mod_configure.erl:1703 +#: mod_configure.erl:1701 msgid "Last login" msgstr "Son giriş" -#: mod_configure.erl:1724 +#: mod_configure.erl:1722 msgid "Roster size" msgstr "İsim listesi boyutu" -#: mod_configure.erl:1725 +#: mod_configure.erl:1723 msgid "IP addresses" msgstr "IP adresleri" -#: mod_configure.erl:1726 +#: mod_configure.erl:1724 msgid "Resources" msgstr "Kaynaklar" -#: mod_configure.erl:1852 +#: mod_configure.erl:1850 msgid "Administration of " msgstr "Yönetim : " -#: mod_configure.erl:1855 +#: mod_configure.erl:1853 msgid "Action on user" msgstr "Kullanıcıya uygulanacak eylem" -#: mod_configure.erl:1859 +#: mod_configure.erl:1857 msgid "Edit Properties" msgstr "Özellikleri Düzenle" -#: mod_configure.erl:1862 web/ejabberd_web_admin.erl:1767 +#: mod_configure.erl:1860 web/ejabberd_web_admin.erl:1769 msgid "Remove User" msgstr "Kullanıcıyı Kaldır" -#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:336 +#: mod_irc/mod_irc.erl:201 mod_irc/mod_irc_odbc.erl:196 +#: mod_muc/mod_muc.erl:336 mod_muc/mod_muc_odbc.erl:342 msgid "Access denied by service policy" msgstr "Servis politikası gereği erişim engellendi" -#: mod_irc/mod_irc.erl:400 +#: mod_irc/mod_irc.erl:401 mod_irc/mod_irc_odbc.erl:398 msgid "IRC Transport" msgstr "IRC Nakli (Transport)" -#: mod_irc/mod_irc.erl:427 +#: mod_irc/mod_irc.erl:428 mod_irc/mod_irc_odbc.erl:425 msgid "ejabberd IRC module" msgstr "ejabberd IRC modülü" -#: mod_irc/mod_irc.erl:558 +#: mod_irc/mod_irc.erl:559 mod_irc/mod_irc_odbc.erl:568 msgid "You need an x:data capable client to configure mod_irc settings" msgstr "" "mod_irc ayarlarını düzenlemek için x:data becerisine sahip bir istemciye " "gereksinimiz var" -#: mod_irc/mod_irc.erl:565 +#: mod_irc/mod_irc.erl:566 mod_irc/mod_irc_odbc.erl:575 msgid "Registration in mod_irc for " msgstr "mod_irc'ye kayıt : " -#: mod_irc/mod_irc.erl:570 +#: mod_irc/mod_irc.erl:571 mod_irc/mod_irc_odbc.erl:580 msgid "" "Enter username, encodings, ports and passwords you wish to use for " "connecting to IRC servers" @@ -469,11 +474,11 @@ msgstr "" "IRC sunuculara bağlanmak için kullanmak istediğiniz kullanıcı ismi, " "kodlamalar, kapılar (portlar) ve parolaları giriniz" -#: mod_irc/mod_irc.erl:575 +#: mod_irc/mod_irc.erl:576 mod_irc/mod_irc_odbc.erl:585 msgid "IRC Username" msgstr "IRC Kullanıcı İsmi" -#: mod_irc/mod_irc.erl:585 +#: mod_irc/mod_irc.erl:586 mod_irc/mod_irc_odbc.erl:595 msgid "" "If you want to specify different ports, passwords, encodings for IRC " "servers, fill this list with values in format '{\"irc server\", \"encoding" @@ -485,7 +490,7 @@ msgstr "" "\"}' biçeminde değerlerle bu listeyi doldurunuz. Öntanımlı olarak bu servis " "\"~s\" kodlamasını, ~p \"kapısını\", \"boş\" parolasını kullanıyor." -#: mod_irc/mod_irc.erl:597 +#: mod_irc/mod_irc.erl:598 mod_irc/mod_irc_odbc.erl:607 msgid "" "Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." @@ -493,35 +498,36 @@ msgstr "" "Örnek: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"gizli\"}, {\"vendetta.fef.net" "\", \"iso8859-1\", 7000}], {\"irc.sometestserver.net\", \"utf-8\"}]" -#: mod_irc/mod_irc.erl:602 +#: mod_irc/mod_irc.erl:603 mod_irc/mod_irc_odbc.erl:612 msgid "Connections parameters" msgstr "Bağlantı parametreleri" -#: mod_irc/mod_irc.erl:727 +#: mod_irc/mod_irc.erl:728 mod_irc/mod_irc_odbc.erl:757 msgid "Join IRC channel" msgstr "IRC kanalına katıl" -#: mod_irc/mod_irc.erl:731 +#: mod_irc/mod_irc.erl:732 mod_irc/mod_irc_odbc.erl:761 msgid "IRC channel (don't put the first #)" msgstr "IRC kanalı (ilk # işaretini koymayın)" -#: mod_irc/mod_irc.erl:736 +#: mod_irc/mod_irc.erl:737 mod_irc/mod_irc_odbc.erl:766 msgid "IRC server" msgstr "IRC sunucusu" -#: mod_irc/mod_irc.erl:769 mod_irc/mod_irc.erl:773 +#: mod_irc/mod_irc.erl:770 mod_irc/mod_irc.erl:774 +#: mod_irc/mod_irc_odbc.erl:799 mod_irc/mod_irc_odbc.erl:803 msgid "Join the IRC channel here." msgstr "Buradaki IRC kanalına katıl." -#: mod_irc/mod_irc.erl:777 +#: mod_irc/mod_irc.erl:778 mod_irc/mod_irc_odbc.erl:807 msgid "Join the IRC channel in this Jabber ID: ~s" msgstr "IRC kanalına bu Jabber ID'si ile katıl: ~s" -#: mod_irc/mod_irc.erl:862 +#: mod_irc/mod_irc.erl:863 mod_irc/mod_irc_odbc.erl:904 msgid "IRC settings" msgstr "IRC ayarları" -#: mod_irc/mod_irc.erl:867 +#: mod_irc/mod_irc.erl:868 mod_irc/mod_irc_odbc.erl:909 msgid "" "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 " @@ -531,73 +537,73 @@ msgstr "" "kodlamaları giriniz. 'İleri' tuşuna basınca karşınıza dolduracak daha fazla " "alan çıkacak. 'Tamamla' tuşuna basarak ayarları kaydedin." -#: mod_irc/mod_irc.erl:873 +#: mod_irc/mod_irc.erl:874 mod_irc/mod_irc_odbc.erl:915 msgid "IRC username" msgstr "IRC kullanıcı ismi" -#: mod_irc/mod_irc.erl:922 +#: mod_irc/mod_irc.erl:923 mod_irc/mod_irc_odbc.erl:964 msgid "Password ~b" msgstr "Parola ~b" -#: mod_irc/mod_irc.erl:927 +#: mod_irc/mod_irc.erl:928 mod_irc/mod_irc_odbc.erl:969 msgid "Port ~b" msgstr "Kapı (Port) ~b" -#: mod_irc/mod_irc.erl:932 +#: mod_irc/mod_irc.erl:933 mod_irc/mod_irc_odbc.erl:974 msgid "Encoding for server ~b" msgstr "Sunucu için kodlama ~b" -#: mod_irc/mod_irc.erl:941 +#: mod_irc/mod_irc.erl:942 mod_irc/mod_irc_odbc.erl:983 msgid "Server ~b" msgstr "Sunucu ~b" -#: mod_muc/mod_muc.erl:449 +#: mod_muc/mod_muc.erl:449 mod_muc/mod_muc_odbc.erl:456 msgid "Only service administrators are allowed to send service messages" msgstr "Sadece servis yöneticileri servis mesajı gönderebilirler" -#: mod_muc/mod_muc.erl:493 +#: mod_muc/mod_muc.erl:493 mod_muc/mod_muc_odbc.erl:500 msgid "Room creation is denied by service policy" msgstr "Odanın oluşturulması servis politikası gereği reddedildi" -#: mod_muc/mod_muc.erl:500 +#: mod_muc/mod_muc.erl:500 mod_muc/mod_muc_odbc.erl:507 msgid "Conference room does not exist" msgstr "Konferans odası bulunamadı" -#: mod_muc/mod_muc.erl:581 +#: mod_muc/mod_muc.erl:582 mod_muc/mod_muc_odbc.erl:595 msgid "Chatrooms" msgstr "Sohbet Odaları" -#: mod_muc/mod_muc.erl:711 -#, fuzzy +#: mod_muc/mod_muc.erl:712 mod_muc/mod_muc_odbc.erl:729 msgid "You need a client that supports x:data to register the nickname" msgstr "" -"Takma isminizi kaydettirmek için x:data becerisine sahip bir istemciye " +"Takma isminizi kaydettirmek için x:data destekleyen bir istemciye " "gereksinimiz var" -#: mod_muc/mod_muc.erl:717 +#: mod_muc/mod_muc.erl:718 mod_muc/mod_muc_odbc.erl:735 msgid "Nickname Registration at " msgstr "Takma İsim Kaydı : " -#: mod_muc/mod_muc.erl:721 +#: mod_muc/mod_muc.erl:722 mod_muc/mod_muc_odbc.erl:739 msgid "Enter nickname you want to register" msgstr "Kaydettirmek istediğiniz takma ismi giriniz" -#: mod_muc/mod_muc.erl:722 mod_roster.erl:944 mod_roster_odbc.erl:1049 -#: mod_vcard.erl:358 mod_vcard.erl:471 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:447 +#: mod_muc/mod_muc.erl:723 mod_muc/mod_muc_odbc.erl:740 +#: mod_muc/mod_muc_room.erl:3810 mod_roster.erl:944 mod_roster_odbc.erl:1061 +#: mod_vcard.erl:364 mod_vcard.erl:477 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:453 msgid "Nickname" msgstr "Takma isim" -#: mod_muc/mod_muc.erl:761 mod_muc/mod_muc_room.erl:933 -#: mod_muc/mod_muc_room.erl:1577 +#: mod_muc/mod_muc.erl:762 mod_muc/mod_muc_odbc.erl:784 +#: mod_muc/mod_muc_room.erl:1064 mod_muc/mod_muc_room.erl:1787 msgid "That nickname is registered by another person" msgstr "O takma isim başka biri tarafından kaydettirilmiş" -#: mod_muc/mod_muc.erl:787 +#: mod_muc/mod_muc.erl:788 mod_muc/mod_muc_odbc.erl:811 msgid "You must fill in field \"Nickname\" in the form" msgstr "Formda \"Takma isim\" alanını doldurmanız gerekiyor" -#: mod_muc/mod_muc.erl:807 +#: mod_muc/mod_muc.erl:808 mod_muc/mod_muc_odbc.erl:831 msgid "ejabberd MUC module" msgstr "ejabberd MUC modülü" @@ -637,30 +643,26 @@ msgstr "sistem kapandığından dolayı atıldı" msgid "is now known as" msgstr "isim değiştirdi :" -#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:689 -#: mod_muc/mod_muc_room.erl:2138 +#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:688 +#: mod_muc/mod_muc_room.erl:2393 msgid " has set the subject to: " msgstr " konuyu değiştirdi: " #: mod_muc/mod_muc_log.erl:452 -#, fuzzy msgid "Chatroom is created" -msgstr "Sohbet Odaları" +msgstr "Sohbet odası oluşturuldu" #: mod_muc/mod_muc_log.erl:453 -#, fuzzy msgid "Chatroom is destroyed" -msgstr "Sohbet Odaları" +msgstr "Sohbet odası kaldırıldı" #: mod_muc/mod_muc_log.erl:454 -#, fuzzy msgid "Chatroom is started" -msgstr "Sohbet Odaları" +msgstr "Sohbet odası başlatıldı" #: mod_muc/mod_muc_log.erl:455 -#, fuzzy msgid "Chatroom is stopped" -msgstr "Sohbet Odaları" +msgstr "Sohbet odası durduruldu" #: mod_muc/mod_muc_log.erl:459 msgid "Monday" @@ -738,32 +740,48 @@ msgstr "Kasım" msgid "December" msgstr "Aralık" -#: mod_muc/mod_muc_log.erl:751 +#: mod_muc/mod_muc_log.erl:750 msgid "Room Configuration" msgstr "Oda Ayarları" -#: mod_muc/mod_muc_log.erl:760 +#: mod_muc/mod_muc_log.erl:759 msgid "Room Occupants" msgstr "Oda Sakini Sayısı" -#: mod_muc/mod_muc_room.erl:170 +#: mod_muc/mod_muc_room.erl:174 msgid "Traffic rate limit is exceeded" msgstr "Trafik oran sınırı aşıldı" -#: mod_muc/mod_muc_room.erl:242 +#: mod_muc/mod_muc_room.erl:246 msgid "" "This participant is kicked from the room because he sent an error message" msgstr "Bu katılımcı bir hata mesajı gönderdiği için odadan atıldı" -#: mod_muc/mod_muc_room.erl:251 +#: mod_muc/mod_muc_room.erl:255 msgid "It is not allowed to send private messages to the conference" msgstr "Konferansa özel mesajlar gönderilmesine izin verilmiyor" -#: mod_muc/mod_muc_room.erl:296 +#: mod_muc/mod_muc_room.erl:332 +msgid "Please, wait for a while before sending new voice request" +msgstr "Lütfen yeni bir ses isteği göndermeden önce biraz bekleyin" + +#: mod_muc/mod_muc_room.erl:347 +msgid "Voice requests are disabled in this conference" +msgstr "Bu konferansta ses istekleri etkisizleştirilmiş durumda." + +#: mod_muc/mod_muc_room.erl:364 +msgid "Failed to extract JID from your voice request approval" +msgstr "Ses isteği onayınızdan JID bilginize ulaşılamadı" + +#: mod_muc/mod_muc_room.erl:393 +msgid "Only moderators can approve voice requests" +msgstr "Yalnız moderatörler ses isteklerini onaylayabilir" + +#: mod_muc/mod_muc_room.erl:408 msgid "Improper message type" msgstr "Uygunsuz mesaj tipi" -#: mod_muc/mod_muc_room.erl:406 +#: mod_muc/mod_muc_room.erl:518 msgid "" "This participant is kicked from the room because he sent an error message to " "another participant" @@ -771,32 +789,32 @@ msgstr "" "Bu katılımcı başka bir katılımcıya bir hata mesajı gönderdiği için odadan " "atıldı" -#: mod_muc/mod_muc_room.erl:419 +#: mod_muc/mod_muc_room.erl:531 msgid "It is not allowed to send private messages of type \"groupchat\"" msgstr "\"groupchat\" tipinde özel mesajlar gönderilmesine izin verilmiyor" -#: mod_muc/mod_muc_room.erl:431 mod_muc/mod_muc_room.erl:486 +#: mod_muc/mod_muc_room.erl:543 mod_muc/mod_muc_room.erl:611 msgid "Recipient is not in the conference room" msgstr "Alıcı konferans odasında değil" -#: mod_muc/mod_muc_room.erl:451 mod_muc/mod_muc_room.erl:829 -#: mod_muc/mod_muc_room.erl:3609 -msgid "Only occupants are allowed to send messages to the conference" -msgstr "Sadece oda sakinlerinin konferansa mesaj göndermesine izin veriliyor" - -#: mod_muc/mod_muc_room.erl:460 +#: mod_muc/mod_muc_room.erl:564 mod_muc/mod_muc_room.erl:585 msgid "It is not allowed to send private messages" msgstr "Özel mesaj gönderilmesine izin verilmiyor" -#: mod_muc/mod_muc_room.erl:509 +#: mod_muc/mod_muc_room.erl:576 mod_muc/mod_muc_room.erl:956 +#: mod_muc/mod_muc_room.erl:4040 +msgid "Only occupants are allowed to send messages to the conference" +msgstr "Sadece oda sakinlerinin konferansa mesaj göndermesine izin veriliyor" + +#: mod_muc/mod_muc_room.erl:634 msgid "Only occupants are allowed to send queries to the conference" msgstr "Sadece oda sakinlerinin konferansa sorgu göndermesine izin veriliyor" -#: mod_muc/mod_muc_room.erl:521 +#: mod_muc/mod_muc_room.erl:646 msgid "Queries to the conference members are not allowed in this room" msgstr "Bu odada konferans üyelerine sorgu yapılmasına izin verilmiyor" -#: mod_muc/mod_muc_room.erl:805 +#: mod_muc/mod_muc_room.erl:932 msgid "" "Only moderators and participants are allowed to change the subject in this " "room" @@ -804,201 +822,233 @@ msgstr "" "Sadece moderatörlerin ve katılımcıların bu odanın konusunu değiştirmesine " "izin veriliyor" -#: mod_muc/mod_muc_room.erl:810 +#: mod_muc/mod_muc_room.erl:937 msgid "Only moderators are allowed to change the subject in this room" msgstr "Sadece moderatörlerin bu odanın konusunu değiştirmesine izin veriliyor" -#: mod_muc/mod_muc_room.erl:820 +#: mod_muc/mod_muc_room.erl:947 msgid "Visitors are not allowed to send messages to all occupants" msgstr "" "Ziyaretçilerin odadaki tüm sakinlere mesaj göndermesine izin verilmiyor" -#: mod_muc/mod_muc_room.erl:891 +#: mod_muc/mod_muc_room.erl:1021 msgid "" "This participant is kicked from the room because he sent an error presence" msgstr "Bu katılımcı bir hata varlığı (presence) gönderdiği için odadan atıldı" -#: mod_muc/mod_muc_room.erl:909 +#: mod_muc/mod_muc_room.erl:1040 msgid "Visitors are not allowed to change their nicknames in this room" msgstr "" "Bu odada ziyaretçilerin takma isimlerini değiştirmesine izin verilmiyor" -#: mod_muc/mod_muc_room.erl:922 mod_muc/mod_muc_room.erl:1569 +#: mod_muc/mod_muc_room.erl:1053 mod_muc/mod_muc_room.erl:1779 msgid "That nickname is already in use by another occupant" msgstr "Takma isim odanın başka bir sakini tarafından halihazırda kullanımda" -#: mod_muc/mod_muc_room.erl:1558 +#: mod_muc/mod_muc_room.erl:1768 msgid "You have been banned from this room" msgstr "Bu odaya girmeniz yasaklandı" -#: mod_muc/mod_muc_room.erl:1561 +#: mod_muc/mod_muc_room.erl:1771 msgid "Membership is required to enter this room" msgstr "Bu odaya girmek için üyelik gerekiyor" -#: mod_muc/mod_muc_room.erl:1597 +#: mod_muc/mod_muc_room.erl:1807 msgid "This room is not anonymous" msgstr "Bu oda anonim değil" -#: mod_muc/mod_muc_room.erl:1623 +#: mod_muc/mod_muc_room.erl:1833 msgid "A password is required to enter this room" msgstr "Bu odaya girmek için parola gerekiyor" -#: mod_muc/mod_muc_room.erl:1645 mod_register.erl:246 +#: mod_muc/mod_muc_room.erl:1855 mod_register.erl:246 msgid "Too many CAPTCHA requests" -msgstr "" +msgstr "Çok fazla CAPTCHA isteği" -#: mod_muc/mod_muc_room.erl:1654 -msgid "Unable to generate a captcha" -msgstr "İnsan doğrulaması (captcha) oluşturulamadı" +#: mod_muc/mod_muc_room.erl:1864 mod_register.erl:251 +msgid "Unable to generate a CAPTCHA" +msgstr "İnsan doğrulaması (CAPTCHA) oluşturulamadı" -#: mod_muc/mod_muc_room.erl:1664 +#: mod_muc/mod_muc_room.erl:1874 msgid "Incorrect password" msgstr "Yanlış parola" -#: mod_muc/mod_muc_room.erl:2193 +#: mod_muc/mod_muc_room.erl:2448 msgid "Administrator privileges required" msgstr "Yönetim yetkileri gerekli" -#: mod_muc/mod_muc_room.erl:2208 +#: mod_muc/mod_muc_room.erl:2463 msgid "Moderator privileges required" msgstr "Moderatör yetkileri gerekli" -#: mod_muc/mod_muc_room.erl:2363 +#: mod_muc/mod_muc_room.erl:2619 msgid "Jabber ID ~s is invalid" msgstr "Jabber ID ~s geçersiz" -#: mod_muc/mod_muc_room.erl:2377 +#: mod_muc/mod_muc_room.erl:2633 msgid "Nickname ~s does not exist in the room" msgstr "~s takma ismi odada yok" -#: mod_muc/mod_muc_room.erl:2403 mod_muc/mod_muc_room.erl:2797 +#: mod_muc/mod_muc_room.erl:2659 mod_muc/mod_muc_room.erl:3049 msgid "Invalid affiliation: ~s" msgstr "Geçersiz ilişki: ~s" -#: mod_muc/mod_muc_room.erl:2460 +#: mod_muc/mod_muc_room.erl:2713 msgid "Invalid role: ~s" msgstr "Geçersiz rol: ~s" -#: mod_muc/mod_muc_room.erl:2774 mod_muc/mod_muc_room.erl:2810 +#: mod_muc/mod_muc_room.erl:3026 mod_muc/mod_muc_room.erl:3062 msgid "Owner privileges required" msgstr "Sahip yetkileri gerekli" -#: mod_muc/mod_muc_room.erl:2941 +#: mod_muc/mod_muc_room.erl:3195 msgid "Configuration of room ~s" msgstr "~s odasının ayarları" -#: mod_muc/mod_muc_room.erl:2946 +#: mod_muc/mod_muc_room.erl:3200 msgid "Room title" msgstr "Oda başlığı" -#: mod_muc/mod_muc_room.erl:2949 mod_muc/mod_muc_room.erl:3388 +#: mod_muc/mod_muc_room.erl:3203 mod_muc/mod_muc_room.erl:3692 msgid "Room description" msgstr "Oda tanımı" -#: mod_muc/mod_muc_room.erl:2956 +#: mod_muc/mod_muc_room.erl:3210 msgid "Make room persistent" msgstr "Odayı kalıcı hale getir" -#: mod_muc/mod_muc_room.erl:2961 +#: mod_muc/mod_muc_room.erl:3215 msgid "Make room public searchable" msgstr "Odayı herkes tarafından aranabilir hale getir" -#: mod_muc/mod_muc_room.erl:2964 +#: mod_muc/mod_muc_room.erl:3218 msgid "Make participants list public" msgstr "Katılımcı listesini herkese açık hale getir" -#: mod_muc/mod_muc_room.erl:2967 +#: mod_muc/mod_muc_room.erl:3221 msgid "Make room password protected" msgstr "Odayı parola korumalı hale getir" -#: mod_muc/mod_muc_room.erl:2978 +#: mod_muc/mod_muc_room.erl:3232 msgid "Maximum Number of Occupants" msgstr "Odada En Fazla Bulunabilecek Kişi Sayısı" -#: mod_muc/mod_muc_room.erl:2985 +#: mod_muc/mod_muc_room.erl:3239 msgid "No limit" msgstr "Sınırsız" -#: mod_muc/mod_muc_room.erl:2996 +#: mod_muc/mod_muc_room.erl:3250 msgid "Present real Jabber IDs to" msgstr "Gerçek Jabber ID'lerini göster :" -#: mod_muc/mod_muc_room.erl:3004 +#: mod_muc/mod_muc_room.erl:3258 mod_muc/mod_muc_room.erl:3292 msgid "moderators only" msgstr "sadece moderatörler" -#: mod_muc/mod_muc_room.erl:3006 +#: mod_muc/mod_muc_room.erl:3260 mod_muc/mod_muc_room.erl:3294 msgid "anyone" msgstr "herkes" -#: mod_muc/mod_muc_room.erl:3008 +#: mod_muc/mod_muc_room.erl:3262 msgid "Make room members-only" msgstr "Odayı sadece üyelere açık hale getir" -#: mod_muc/mod_muc_room.erl:3011 +#: mod_muc/mod_muc_room.erl:3265 msgid "Make room moderated" msgstr "Odayı moderasyonlu hale getir" -#: mod_muc/mod_muc_room.erl:3014 +#: mod_muc/mod_muc_room.erl:3268 msgid "Default users as participants" msgstr "Kullanıcılar öntanımlı olarak katılımcı olsun" -#: mod_muc/mod_muc_room.erl:3017 +#: mod_muc/mod_muc_room.erl:3271 msgid "Allow users to change the subject" msgstr "Kullanıcıların konu değiştirmesine izin ver" -#: mod_muc/mod_muc_room.erl:3020 +#: mod_muc/mod_muc_room.erl:3274 msgid "Allow users to send private messages" msgstr "Kullanıcıların özel mesaj göndermelerine izin ver" -#: mod_muc/mod_muc_room.erl:3023 +#: mod_muc/mod_muc_room.erl:3279 +msgid "Allow visitors to send private messages to" +msgstr "Ziyaretçilerin özel mesaj göndermelerine izin ver" + +#: mod_muc/mod_muc_room.erl:3290 +msgid "nobody" +msgstr "hiç kimse" + +#: mod_muc/mod_muc_room.erl:3296 msgid "Allow users to query other users" msgstr "Kullanıcıların diğer kullanıcıları sorgulamalarına izin ver" -#: mod_muc/mod_muc_room.erl:3026 +#: mod_muc/mod_muc_room.erl:3299 msgid "Allow users to send invites" msgstr "Kullanıcıların davetiye göndermelerine izin ver" -#: mod_muc/mod_muc_room.erl:3029 +#: mod_muc/mod_muc_room.erl:3302 msgid "Allow visitors to send status text in presence updates" msgstr "" "Ziyaretçilerin varlık (presence) güncellemelerinde durum metni " "göndermelerine izin ver" -#: mod_muc/mod_muc_room.erl:3032 +#: mod_muc/mod_muc_room.erl:3305 msgid "Allow visitors to change nickname" msgstr "Ziyaretçilerin takma isim değiştirmelerine izin ver" -#: mod_muc/mod_muc_room.erl:3038 -msgid "Make room captcha protected" +#: mod_muc/mod_muc_room.erl:3308 +msgid "Allow visitors to send voice requests" +msgstr "Ziyaretçilerin ses isteğine göndermelerine izin ver" + +#: mod_muc/mod_muc_room.erl:3311 +msgid "Minimum interval between voice requests (in seconds)" +msgstr "Ses istekleri arasında olabilecek en az aralık (saniye olarak)" + +#: mod_muc/mod_muc_room.erl:3317 +msgid "Make room CAPTCHA protected" msgstr "Odayı insan doğrulaması (captcha) korumalı hale getir" -#: mod_muc/mod_muc_room.erl:3043 +#: mod_muc/mod_muc_room.erl:3322 msgid "Exclude Jabber IDs from CAPTCHA challenge" -msgstr "" +msgstr "CAPTCHA doğrulamasını şu Jabber ID'ler için yapma" -#: mod_muc/mod_muc_room.erl:3050 +#: mod_muc/mod_muc_room.erl:3329 msgid "Enable logging" msgstr "Kayıt tutma özelliğini aç" -#: mod_muc/mod_muc_room.erl:3058 +#: mod_muc/mod_muc_room.erl:3337 msgid "You need an x:data capable client to configure room" msgstr "" "Odayı ayarlamak için x:data becerisine sahip bir istemciye gereksinimiz var" -#: mod_muc/mod_muc_room.erl:3390 +#: mod_muc/mod_muc_room.erl:3694 msgid "Number of occupants" msgstr "Oda sakini sayısı" -#: mod_muc/mod_muc_room.erl:3446 +#: mod_muc/mod_muc_room.erl:3750 msgid "private, " msgstr "özel" -#: mod_muc/mod_muc_room.erl:3529 +#: mod_muc/mod_muc_room.erl:3799 +msgid "Voice request" +msgstr "Ses isteği" + +#: mod_muc/mod_muc_room.erl:3803 +msgid "Either approve or decline the voice request." +msgstr "Ses isteğini kabul edin ya da reddedin" + +#: mod_muc/mod_muc_room.erl:3809 +msgid "User JID" +msgstr "Kullanıcı JID" + +#: mod_muc/mod_muc_room.erl:3811 +msgid "Grant voice to this person?" +msgstr "Bu kişiye ses verelim mi?" + +#: mod_muc/mod_muc_room.erl:3960 msgid "~s invites you to the room ~s" msgstr "~s sizi ~s odasına davet ediyor" -#: mod_muc/mod_muc_room.erl:3538 +#: mod_muc/mod_muc_room.erl:3969 msgid "the password is" msgstr "parola :" @@ -1012,14 +1062,15 @@ msgid "~s's Offline Messages Queue" msgstr "~s Kullanıcısının Mesaj Kuyruğu" #: mod_offline.erl:563 mod_offline_odbc.erl:411 mod_roster.erl:987 -#: mod_roster_odbc.erl:1092 mod_shared_roster.erl:896 -#: mod_shared_roster.erl:1005 web/ejabberd_web_admin.erl:833 +#: mod_roster_odbc.erl:1104 mod_shared_roster.erl:901 +#: mod_shared_roster.erl:1010 mod_shared_roster_odbc.erl:930 +#: mod_shared_roster_odbc.erl:1039 web/ejabberd_web_admin.erl:833 #: web/ejabberd_web_admin.erl:874 web/ejabberd_web_admin.erl:942 #: web/ejabberd_web_admin.erl:978 web/ejabberd_web_admin.erl:1019 -#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1758 -#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1961 -#: web/ejabberd_web_admin.erl:2030 web/ejabberd_web_admin.erl:2134 -#: web/ejabberd_web_admin.erl:2159 web/ejabberd_web_admin.erl:2247 +#: web/ejabberd_web_admin.erl:1508 web/ejabberd_web_admin.erl:1760 +#: web/ejabberd_web_admin.erl:1931 web/ejabberd_web_admin.erl:1963 +#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2135 +#: web/ejabberd_web_admin.erl:2160 web/ejabberd_web_admin.erl:2248 msgid "Submitted" msgstr "Gönderilenler" @@ -1039,8 +1090,9 @@ msgstr "Kime" msgid "Packet" msgstr "Paket" -#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:903 -#: web/ejabberd_web_admin.erl:882 web/ejabberd_web_admin.erl:986 +#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:908 +#: mod_shared_roster_odbc.erl:937 web/ejabberd_web_admin.erl:882 +#: web/ejabberd_web_admin.erl:986 msgid "Delete Selected" msgstr "Seçilenleri Sil" @@ -1056,255 +1108,250 @@ msgstr "Tüm Çevirim-dışı Mesajları Kaldır" msgid "ejabberd SOCKS5 Bytestreams module" msgstr "ejabberd SOCKS5 Bytestreams modülü" -#: mod_pubsub/mod_pubsub.erl:1119 mod_pubsub/mod_pubsub_odbc.erl:928 +#: mod_pubsub/mod_pubsub.erl:1120 mod_pubsub/mod_pubsub_odbc.erl:929 msgid "Publish-Subscribe" msgstr "Yayınla-Üye Ol" -#: mod_pubsub/mod_pubsub.erl:1213 mod_pubsub/mod_pubsub_odbc.erl:1024 +#: mod_pubsub/mod_pubsub.erl:1214 mod_pubsub/mod_pubsub_odbc.erl:1025 msgid "ejabberd Publish-Subscribe module" msgstr "ejabberd Publish-Subscribe modülü" -#: mod_pubsub/mod_pubsub.erl:1496 mod_pubsub/mod_pubsub_odbc.erl:1311 +#: mod_pubsub/mod_pubsub.erl:1497 mod_pubsub/mod_pubsub_odbc.erl:1312 msgid "PubSub subscriber request" msgstr "PubSub üye isteği" -#: mod_pubsub/mod_pubsub.erl:1498 mod_pubsub/mod_pubsub_odbc.erl:1313 +#: mod_pubsub/mod_pubsub.erl:1499 mod_pubsub/mod_pubsub_odbc.erl:1314 msgid "Choose whether to approve this entity's subscription." msgstr "Bu varlığın üyeliğini onaylayıp onaylamamayı seçiniz." -#: mod_pubsub/mod_pubsub.erl:1504 mod_pubsub/mod_pubsub_odbc.erl:1319 +#: mod_pubsub/mod_pubsub.erl:1505 mod_pubsub/mod_pubsub_odbc.erl:1320 msgid "Node ID" msgstr "Düğüm ID" -#: mod_pubsub/mod_pubsub.erl:1509 mod_pubsub/mod_pubsub_odbc.erl:1324 +#: mod_pubsub/mod_pubsub.erl:1510 mod_pubsub/mod_pubsub_odbc.erl:1325 msgid "Subscriber Address" msgstr "Üye Olanın Adresi" -#: mod_pubsub/mod_pubsub.erl:1515 mod_pubsub/mod_pubsub_odbc.erl:1330 +#: mod_pubsub/mod_pubsub.erl:1516 mod_pubsub/mod_pubsub_odbc.erl:1331 msgid "Allow this Jabber ID to subscribe to this pubsub node?" msgstr "Bu Jabber ID bu pubsub düğümüne üye olmasına izin verilsin mi?" -#: mod_pubsub/mod_pubsub.erl:3416 mod_pubsub/mod_pubsub_odbc.erl:3229 +#: mod_pubsub/mod_pubsub.erl:3474 mod_pubsub/mod_pubsub_odbc.erl:3287 msgid "Deliver payloads with event notifications" msgstr "Yükleri (payload) olay uyarıları ile beraber gönder" -#: mod_pubsub/mod_pubsub.erl:3417 mod_pubsub/mod_pubsub_odbc.erl:3230 +#: mod_pubsub/mod_pubsub.erl:3475 mod_pubsub/mod_pubsub_odbc.erl:3288 msgid "Deliver event notifications" msgstr "Olay uyarıları gönderilsin" -#: mod_pubsub/mod_pubsub.erl:3418 mod_pubsub/mod_pubsub_odbc.erl:3231 +#: mod_pubsub/mod_pubsub.erl:3476 mod_pubsub/mod_pubsub_odbc.erl:3289 msgid "Notify subscribers when the node configuration changes" msgstr "Düğüm ayarları değiştiğinde üyeleri uyar" -#: mod_pubsub/mod_pubsub.erl:3419 mod_pubsub/mod_pubsub_odbc.erl:3232 +#: mod_pubsub/mod_pubsub.erl:3477 mod_pubsub/mod_pubsub_odbc.erl:3290 msgid "Notify subscribers when the node is deleted" msgstr "Bir düğüm silindiğinde üyeleri uyar" -#: mod_pubsub/mod_pubsub.erl:3420 mod_pubsub/mod_pubsub_odbc.erl:3233 +#: mod_pubsub/mod_pubsub.erl:3478 mod_pubsub/mod_pubsub_odbc.erl:3291 msgid "Notify subscribers when items are removed from the node" msgstr "Düğümden öğeler kaldırıldığında üyeleri uyar" -#: mod_pubsub/mod_pubsub.erl:3421 mod_pubsub/mod_pubsub_odbc.erl:3234 +#: mod_pubsub/mod_pubsub.erl:3479 mod_pubsub/mod_pubsub_odbc.erl:3292 msgid "Persist items to storage" msgstr "Öğeleri depoda kalıcı hale getir" -#: mod_pubsub/mod_pubsub.erl:3422 mod_pubsub/mod_pubsub_odbc.erl:3235 +#: mod_pubsub/mod_pubsub.erl:3480 mod_pubsub/mod_pubsub_odbc.erl:3293 msgid "A friendly name for the node" msgstr "Düğüm için dostane bir isim" -#: mod_pubsub/mod_pubsub.erl:3423 mod_pubsub/mod_pubsub_odbc.erl:3236 +#: mod_pubsub/mod_pubsub.erl:3481 mod_pubsub/mod_pubsub_odbc.erl:3294 msgid "Max # of items to persist" msgstr "Kalıcı hale getirilecek en fazla öğe sayısı" -#: mod_pubsub/mod_pubsub.erl:3424 mod_pubsub/mod_pubsub_odbc.erl:3237 +#: mod_pubsub/mod_pubsub.erl:3482 mod_pubsub/mod_pubsub_odbc.erl:3295 msgid "Whether to allow subscriptions" msgstr "Üyeliklere izin verilsin mi" -#: mod_pubsub/mod_pubsub.erl:3425 mod_pubsub/mod_pubsub_odbc.erl:3238 +#: mod_pubsub/mod_pubsub.erl:3483 mod_pubsub/mod_pubsub_odbc.erl:3296 msgid "Specify the access model" msgstr "Erişim modelini belirtiniz" -#: mod_pubsub/mod_pubsub.erl:3428 mod_pubsub/mod_pubsub_odbc.erl:3241 +#: mod_pubsub/mod_pubsub.erl:3486 mod_pubsub/mod_pubsub_odbc.erl:3299 msgid "Roster groups allowed to subscribe" msgstr "Üye olunmasına izin verilen kontak listesi grupları" -#: mod_pubsub/mod_pubsub.erl:3429 mod_pubsub/mod_pubsub_odbc.erl:3242 +#: mod_pubsub/mod_pubsub.erl:3487 mod_pubsub/mod_pubsub_odbc.erl:3300 msgid "Specify the publisher model" msgstr "Yayıncı modelini belirtiniz" -#: mod_pubsub/mod_pubsub.erl:3431 mod_pubsub/mod_pubsub_odbc.erl:3244 +#: mod_pubsub/mod_pubsub.erl:3489 mod_pubsub/mod_pubsub_odbc.erl:3302 msgid "Purge all items when the relevant publisher goes offline" -msgstr "" +msgstr "İlgili yayıncı çevirimdışı olunca tüm onunla ilgili olanları sil" -#: mod_pubsub/mod_pubsub.erl:3432 mod_pubsub/mod_pubsub_odbc.erl:3245 -#, fuzzy +#: mod_pubsub/mod_pubsub.erl:3490 mod_pubsub/mod_pubsub_odbc.erl:3303 msgid "Specify the event message type" -msgstr "Erişim modelini belirtiniz" +msgstr "Olay mesaj tipini belirtiniz" -#: mod_pubsub/mod_pubsub.erl:3434 mod_pubsub/mod_pubsub_odbc.erl:3247 +#: mod_pubsub/mod_pubsub.erl:3492 mod_pubsub/mod_pubsub_odbc.erl:3305 msgid "Max payload size in bytes" msgstr "En fazla yük (payload) boyutu (bayt olarak)" -#: mod_pubsub/mod_pubsub.erl:3435 mod_pubsub/mod_pubsub_odbc.erl:3248 +#: mod_pubsub/mod_pubsub.erl:3493 mod_pubsub/mod_pubsub_odbc.erl:3306 msgid "When to send the last published item" msgstr "Son yayınlanan öğe ne zaman gönderilsin" -#: mod_pubsub/mod_pubsub.erl:3437 mod_pubsub/mod_pubsub_odbc.erl:3250 +#: mod_pubsub/mod_pubsub.erl:3495 mod_pubsub/mod_pubsub_odbc.erl:3308 msgid "Only deliver notifications to available users" msgstr "Uyarıları sadece durumu uygun kullanıcılara ulaştır" -#: mod_pubsub/mod_pubsub.erl:3438 mod_pubsub/mod_pubsub_odbc.erl:3251 +#: mod_pubsub/mod_pubsub.erl:3496 mod_pubsub/mod_pubsub_odbc.erl:3309 msgid "The collections with which a node is affiliated" msgstr "Bir düğüm ile bağlantılı koleksiyonlar" #: mod_register.erl:193 msgid "The CAPTCHA verification has failed" -msgstr "" +msgstr "CAPTCHA doğrulaması başarısız oldu" #: mod_register.erl:220 -#, fuzzy msgid "You need a client that supports x:data and CAPTCHA to register" msgstr "" -"Takma isminizi kaydettirmek için x:data becerisine sahip bir istemciye " +"Takma isminizi kaydettirmek için x:data ve CAPTCHA destekleyen bir istemciye " "gereksinimiz var" #: mod_register.erl:226 mod_register.erl:265 msgid "Choose a username and password to register with this server" msgstr "Bu sunucuya kayıt olmak için bir kullanıcı ismi ve parola seçiniz" -#: mod_register.erl:230 mod_vcard.erl:358 mod_vcard_odbc.erl:336 -#: web/ejabberd_web_admin.erl:1516 web/ejabberd_web_admin.erl:1573 +#: mod_register.erl:230 mod_vcard.erl:364 mod_vcard_odbc.erl:342 +#: web/ejabberd_web_admin.erl:1515 web/ejabberd_web_admin.erl:1572 msgid "User" msgstr "Kullanıcı" -#: mod_register.erl:251 -#, fuzzy -msgid "Unable to generate a CAPTCHA" -msgstr "İnsan doğrulaması (captcha) oluşturulamadı" - #: mod_register.erl:316 mod_register.erl:361 -#, fuzzy msgid "The password is too weak" -msgstr "parola :" +msgstr "Parola çok zayıf" #: mod_register.erl:365 msgid "Users are not allowed to register accounts so quickly" msgstr "Kullanıcıların bu kadar hızlı hesap açmalarına izin verilmiyor" -#: mod_roster.erl:938 mod_roster_odbc.erl:1043 web/ejabberd_web_admin.erl:1699 -#: web/ejabberd_web_admin.erl:1884 web/ejabberd_web_admin.erl:1895 -#: web/ejabberd_web_admin.erl:2218 +#: mod_roster.erl:938 mod_roster_odbc.erl:1055 web/ejabberd_web_admin.erl:1701 +#: web/ejabberd_web_admin.erl:1886 web/ejabberd_web_admin.erl:1897 +#: web/ejabberd_web_admin.erl:2219 msgid "None" msgstr "Hiçbiri" -#: mod_roster.erl:945 mod_roster_odbc.erl:1050 +#: mod_roster.erl:945 mod_roster_odbc.erl:1062 msgid "Subscription" msgstr "Üyelik" -#: mod_roster.erl:946 mod_roster_odbc.erl:1051 +#: mod_roster.erl:946 mod_roster_odbc.erl:1063 msgid "Pending" msgstr "Sıra Bekleyen" -#: mod_roster.erl:947 mod_roster_odbc.erl:1052 +#: mod_roster.erl:947 mod_roster_odbc.erl:1064 msgid "Groups" msgstr "Gruplar" -#: mod_roster.erl:974 mod_roster_odbc.erl:1079 +#: mod_roster.erl:974 mod_roster_odbc.erl:1091 msgid "Validate" msgstr "Geçerli" -#: mod_roster.erl:982 mod_roster_odbc.erl:1087 +#: mod_roster.erl:982 mod_roster_odbc.erl:1099 msgid "Remove" msgstr "Kaldır" -#: mod_roster.erl:985 mod_roster_odbc.erl:1090 +#: mod_roster.erl:985 mod_roster_odbc.erl:1102 msgid "Roster of " msgstr "Kontak Listesi : " -#: mod_roster.erl:988 mod_roster_odbc.erl:1093 mod_shared_roster.erl:897 -#: mod_shared_roster.erl:1006 web/ejabberd_web_admin.erl:834 +#: mod_roster.erl:988 mod_roster_odbc.erl:1105 mod_shared_roster.erl:902 +#: mod_shared_roster.erl:1011 mod_shared_roster_odbc.erl:931 +#: mod_shared_roster_odbc.erl:1040 web/ejabberd_web_admin.erl:834 #: web/ejabberd_web_admin.erl:875 web/ejabberd_web_admin.erl:943 #: web/ejabberd_web_admin.erl:979 web/ejabberd_web_admin.erl:1020 -#: web/ejabberd_web_admin.erl:1510 web/ejabberd_web_admin.erl:1759 -#: web/ejabberd_web_admin.erl:1930 web/ejabberd_web_admin.erl:2135 -#: web/ejabberd_web_admin.erl:2160 +#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1761 +#: web/ejabberd_web_admin.erl:1932 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2161 msgid "Bad format" msgstr "Kötü biçem" -#: mod_roster.erl:995 mod_roster_odbc.erl:1100 +#: mod_roster.erl:995 mod_roster_odbc.erl:1112 msgid "Add Jabber ID" msgstr "Jabber ID'si Ekle" -#: mod_roster.erl:1094 mod_roster_odbc.erl:1199 +#: mod_roster.erl:1094 mod_roster_odbc.erl:1211 msgid "Roster" msgstr "Kontak Listesi" -#: mod_shared_roster.erl:852 mod_shared_roster.erl:894 -#: mod_shared_roster.erl:1002 +#: mod_shared_roster.erl:857 mod_shared_roster.erl:899 +#: mod_shared_roster.erl:1007 mod_shared_roster_odbc.erl:886 +#: mod_shared_roster_odbc.erl:928 mod_shared_roster_odbc.erl:1036 msgid "Shared Roster Groups" msgstr "Paylaşımlı Kontak Listesi Grupları" -#: mod_shared_roster.erl:890 web/ejabberd_web_admin.erl:1366 -#: web/ejabberd_web_admin.erl:2460 +#: mod_shared_roster.erl:895 mod_shared_roster_odbc.erl:924 +#: web/ejabberd_web_admin.erl:1365 web/ejabberd_web_admin.erl:2461 msgid "Add New" msgstr "Yeni Ekle" -#: mod_shared_roster.erl:973 +#: mod_shared_roster.erl:978 mod_shared_roster_odbc.erl:1007 msgid "Name:" msgstr "İsim:" -#: mod_shared_roster.erl:978 +#: mod_shared_roster.erl:983 mod_shared_roster_odbc.erl:1012 msgid "Description:" msgstr "Tanım:" -#: mod_shared_roster.erl:986 +#: mod_shared_roster.erl:991 mod_shared_roster_odbc.erl:1020 msgid "Members:" msgstr "Üyeler:" -#: mod_shared_roster.erl:994 +#: mod_shared_roster.erl:999 mod_shared_roster_odbc.erl:1028 msgid "Displayed Groups:" msgstr "Gösterilen Gruplar:" -#: mod_shared_roster.erl:1003 +#: mod_shared_roster.erl:1008 mod_shared_roster_odbc.erl:1037 msgid "Group " msgstr "Group " -#: mod_shared_roster.erl:1012 web/ejabberd_web_admin.erl:840 -#: web/ejabberd_web_admin.erl:884 web/ejabberd_web_admin.erl:949 -#: web/ejabberd_web_admin.erl:1026 web/ejabberd_web_admin.erl:2015 +#: mod_shared_roster.erl:1017 mod_shared_roster_odbc.erl:1046 +#: web/ejabberd_web_admin.erl:840 web/ejabberd_web_admin.erl:884 +#: web/ejabberd_web_admin.erl:949 web/ejabberd_web_admin.erl:1026 +#: web/ejabberd_web_admin.erl:2017 msgid "Submit" msgstr "Gönder" -#: mod_vcard.erl:165 mod_vcard_ldap.erl:237 mod_vcard_odbc.erl:129 +#: mod_vcard.erl:165 mod_vcard_ldap.erl:238 mod_vcard_odbc.erl:129 msgid "Erlang Jabber Server" msgstr "Erlang Jabber Sunucusu" -#: mod_vcard.erl:358 mod_vcard.erl:472 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:448 +#: mod_vcard.erl:364 mod_vcard.erl:478 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:454 msgid "Birthday" msgstr "Doğumgünü" -#: mod_vcard.erl:358 mod_vcard.erl:474 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:450 +#: mod_vcard.erl:364 mod_vcard.erl:480 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:456 msgid "City" msgstr "İl" -#: mod_vcard.erl:358 mod_vcard.erl:473 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:449 +#: mod_vcard.erl:364 mod_vcard.erl:479 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:455 msgid "Country" msgstr "Ülke" -#: mod_vcard.erl:358 mod_vcard.erl:475 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:451 +#: mod_vcard.erl:364 mod_vcard.erl:481 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:457 msgid "Email" msgstr "E-posta" -#: mod_vcard.erl:358 mod_vcard.erl:470 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:446 +#: mod_vcard.erl:364 mod_vcard.erl:476 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:452 msgid "Family Name" msgstr "Soyisim" -#: mod_vcard.erl:358 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_odbc.erl:342 msgid "" "Fill in the form to search for any matching Jabber User (Add * to the end of " "field to match substring)" @@ -1312,53 +1359,53 @@ msgstr "" "Eşleşen jabber kullanıcılarını aramak için formu doldurunuz (Alt dizgi " "eşlemek için alanın sonuna * ekleyin)" -#: mod_vcard.erl:358 mod_vcard.erl:467 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:443 +#: mod_vcard.erl:364 mod_vcard.erl:473 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:449 msgid "Full Name" msgstr "Tam İsim" -#: mod_vcard.erl:358 mod_vcard.erl:469 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:445 +#: mod_vcard.erl:364 mod_vcard.erl:475 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:451 msgid "Middle Name" msgstr "Ortanca İsim" -#: mod_vcard.erl:358 mod_vcard.erl:468 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:444 web/ejabberd_web_admin.erl:2004 +#: mod_vcard.erl:364 mod_vcard.erl:474 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:450 web/ejabberd_web_admin.erl:2006 msgid "Name" msgstr "İsim" -#: mod_vcard.erl:358 mod_vcard.erl:476 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:452 +#: mod_vcard.erl:364 mod_vcard.erl:482 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:458 msgid "Organization Name" msgstr "Kurum İsmi" -#: mod_vcard.erl:358 mod_vcard.erl:477 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:453 +#: mod_vcard.erl:364 mod_vcard.erl:483 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:459 msgid "Organization Unit" msgstr "Kurumun İlgili Birimi" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "Search users in " msgstr "Kullanıcılarda arama yap : " -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "You need an x:data capable client to search" msgstr "" "Arama yapabilmek için x:data becerisine sahip bir istemciye gereksinimiz var" -#: mod_vcard.erl:383 mod_vcard_ldap.erl:483 mod_vcard_odbc.erl:361 +#: mod_vcard.erl:389 mod_vcard_ldap.erl:487 mod_vcard_odbc.erl:367 msgid "vCard User Search" msgstr "vCard Kullanıcı Araması" -#: mod_vcard.erl:439 mod_vcard_ldap.erl:537 mod_vcard_odbc.erl:415 +#: mod_vcard.erl:445 mod_vcard_ldap.erl:541 mod_vcard_odbc.erl:421 msgid "ejabberd vCard module" msgstr "ejabberd vCard modülü" -#: mod_vcard.erl:463 mod_vcard_ldap.erl:547 mod_vcard_odbc.erl:439 +#: mod_vcard.erl:469 mod_vcard_ldap.erl:551 mod_vcard_odbc.erl:445 msgid "Search Results for " msgstr "Arama sonuçları : " -#: mod_vcard_ldap.erl:458 +#: mod_vcard_ldap.erl:462 msgid "Fill in fields to search for any matching Jabber User" msgstr "Eşleşen jabber kullanıcılarını aramak için alanları doldurunuz" @@ -1419,7 +1466,7 @@ msgstr "Sıradan Tabloyu Göster" msgid "Show Integral Table" msgstr "Önemli Tabloyu Göster" -#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1937 +#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1939 msgid "Statistics" msgstr "İstatistikler" @@ -1431,116 +1478,116 @@ msgstr "Bulunamadı" msgid "Node not found" msgstr "Düğüm bulunamadı" -#: web/ejabberd_web_admin.erl:1461 +#: web/ejabberd_web_admin.erl:1460 msgid "Host" msgstr "Sunucu" -#: web/ejabberd_web_admin.erl:1462 +#: web/ejabberd_web_admin.erl:1461 msgid "Registered Users" msgstr "Kayıtlı Kullanıcılar" -#: web/ejabberd_web_admin.erl:1574 +#: web/ejabberd_web_admin.erl:1573 msgid "Offline Messages" msgstr "Çevirim-dışı Mesajlar" -#: web/ejabberd_web_admin.erl:1575 web/ejabberd_web_admin.erl:1765 +#: web/ejabberd_web_admin.erl:1574 web/ejabberd_web_admin.erl:1767 msgid "Last Activity" msgstr "Son Aktivite" -#: web/ejabberd_web_admin.erl:1657 web/ejabberd_web_admin.erl:1673 +#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 msgid "Registered Users:" msgstr "Kayıtlı Kullanıcılar:" -#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 -#: web/ejabberd_web_admin.erl:2191 +#: web/ejabberd_web_admin.erl:1661 web/ejabberd_web_admin.erl:1677 +#: web/ejabberd_web_admin.erl:2192 msgid "Online Users:" msgstr "Bağlı Kullanıcılar:" -#: web/ejabberd_web_admin.erl:1661 +#: web/ejabberd_web_admin.erl:1663 msgid "Outgoing s2s Connections:" msgstr "Giden s2s Bağlantıları:" -#: web/ejabberd_web_admin.erl:1663 +#: web/ejabberd_web_admin.erl:1665 msgid "Outgoing s2s Servers:" msgstr "Giden s2s Sunucuları" -#: web/ejabberd_web_admin.erl:1732 web/mod_register_web.erl:175 +#: web/ejabberd_web_admin.erl:1734 web/mod_register_web.erl:175 #: web/mod_register_web.erl:372 web/mod_register_web.erl:381 #: web/mod_register_web.erl:411 msgid "Change Password" msgstr "Parola Değiştir" -#: web/ejabberd_web_admin.erl:1756 +#: web/ejabberd_web_admin.erl:1758 msgid "User " msgstr "Kullanıcı " -#: web/ejabberd_web_admin.erl:1763 +#: web/ejabberd_web_admin.erl:1765 msgid "Connected Resources:" msgstr "Bağlı Kaynaklar:" -#: web/ejabberd_web_admin.erl:1764 web/mod_register_web.erl:227 +#: web/ejabberd_web_admin.erl:1766 web/mod_register_web.erl:227 #: web/mod_register_web.erl:519 msgid "Password:" msgstr "Parola:" -#: web/ejabberd_web_admin.erl:1826 +#: web/ejabberd_web_admin.erl:1828 msgid "No Data" msgstr "Veri Yok" -#: web/ejabberd_web_admin.erl:1904 +#: web/ejabberd_web_admin.erl:1906 msgid "Nodes" msgstr "Düğümler" -#: web/ejabberd_web_admin.erl:1927 web/ejabberd_web_admin.erl:1949 +#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1951 msgid "Node " msgstr "Düğüm " -#: web/ejabberd_web_admin.erl:1936 +#: web/ejabberd_web_admin.erl:1938 msgid "Listened Ports" msgstr "Dinlenen Kapılar (Portlar)" -#: web/ejabberd_web_admin.erl:1938 web/ejabberd_web_admin.erl:2259 -#: web/ejabberd_web_admin.erl:2447 +#: web/ejabberd_web_admin.erl:1940 web/ejabberd_web_admin.erl:2260 +#: web/ejabberd_web_admin.erl:2448 msgid "Update" msgstr "GÜncelle" -#: web/ejabberd_web_admin.erl:1941 web/ejabberd_web_admin.erl:2568 +#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2569 msgid "Restart" msgstr "Tekrar Başlat" -#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2570 +#: web/ejabberd_web_admin.erl:1945 web/ejabberd_web_admin.erl:2571 msgid "Stop" msgstr "Durdur" -#: web/ejabberd_web_admin.erl:1957 +#: web/ejabberd_web_admin.erl:1959 msgid "RPC Call Error" msgstr "RPC Çağrı Hatası" -#: web/ejabberd_web_admin.erl:1998 +#: web/ejabberd_web_admin.erl:2000 msgid "Database Tables at " msgstr "Veritabanı Tabloları : " -#: web/ejabberd_web_admin.erl:2005 +#: web/ejabberd_web_admin.erl:2007 msgid "Storage Type" msgstr "Depolama Tipi" -#: web/ejabberd_web_admin.erl:2006 +#: web/ejabberd_web_admin.erl:2008 msgid "Elements" msgstr "Elementler" -#: web/ejabberd_web_admin.erl:2007 +#: web/ejabberd_web_admin.erl:2009 msgid "Memory" msgstr "Bellek" -#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2032 web/ejabberd_web_admin.erl:2137 msgid "Error" msgstr "Hata" -#: web/ejabberd_web_admin.erl:2033 +#: web/ejabberd_web_admin.erl:2034 msgid "Backup of " msgstr "Yedek : " -#: web/ejabberd_web_admin.erl:2035 +#: web/ejabberd_web_admin.erl:2036 msgid "" "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 " @@ -1550,186 +1597,186 @@ msgstr "" "edin. Eğer ODBC modülünü kullanıyorsanız, SQL veritabanınızı da ayrıca " "yedeklemeniz gerekiyor." -#: web/ejabberd_web_admin.erl:2040 +#: web/ejabberd_web_admin.erl:2041 msgid "Store binary backup:" msgstr "İkili yedeği sakla:" -#: web/ejabberd_web_admin.erl:2044 web/ejabberd_web_admin.erl:2051 -#: web/ejabberd_web_admin.erl:2059 web/ejabberd_web_admin.erl:2066 -#: web/ejabberd_web_admin.erl:2073 web/ejabberd_web_admin.erl:2080 -#: web/ejabberd_web_admin.erl:2087 web/ejabberd_web_admin.erl:2095 -#: web/ejabberd_web_admin.erl:2102 web/ejabberd_web_admin.erl:2109 +#: web/ejabberd_web_admin.erl:2045 web/ejabberd_web_admin.erl:2052 +#: web/ejabberd_web_admin.erl:2060 web/ejabberd_web_admin.erl:2067 +#: web/ejabberd_web_admin.erl:2074 web/ejabberd_web_admin.erl:2081 +#: web/ejabberd_web_admin.erl:2088 web/ejabberd_web_admin.erl:2096 +#: web/ejabberd_web_admin.erl:2103 web/ejabberd_web_admin.erl:2110 msgid "OK" msgstr "Tamam" -#: web/ejabberd_web_admin.erl:2047 +#: web/ejabberd_web_admin.erl:2048 msgid "Restore binary backup immediately:" msgstr "Hemen ikili yedekten geri al:" -#: web/ejabberd_web_admin.erl:2055 +#: web/ejabberd_web_admin.erl:2056 msgid "" "Restore binary backup after next ejabberd restart (requires less memory):" msgstr "" "ejabberd'nin bir sonraki tekrar başlatılışında ikili yedekten geri al (daha " "az bellek gerektirir)" -#: web/ejabberd_web_admin.erl:2062 +#: web/ejabberd_web_admin.erl:2063 msgid "Store plain text backup:" msgstr "Düz metin yedeği sakla:" -#: web/ejabberd_web_admin.erl:2069 +#: web/ejabberd_web_admin.erl:2070 msgid "Restore plain text backup immediately:" msgstr "Hemen düz metin yedekten geri al" -#: web/ejabberd_web_admin.erl:2076 +#: web/ejabberd_web_admin.erl:2077 msgid "Import users data from a PIEFXIS file (XEP-0227):" msgstr "Kullanıcıları bir PIEFXIS dosyasından (XEP-0227) içe aktar:" -#: web/ejabberd_web_admin.erl:2083 +#: web/ejabberd_web_admin.erl:2084 msgid "Export data of all users in the server to PIEFXIS files (XEP-0227):" msgstr "" "Sunucudaki tüm kullanıcıların verisini PIEFXIS dosyalarına (XEP-0227) dışa " "aktar:" -#: web/ejabberd_web_admin.erl:2090 +#: web/ejabberd_web_admin.erl:2091 msgid "Export data of users in a host to PIEFXIS files (XEP-0227):" msgstr "" "Bir sunucudaki kullanıcıların verisini PIEFXIS dosyalarına (XEP-0227) dışa " "aktar:" -#: web/ejabberd_web_admin.erl:2098 +#: web/ejabberd_web_admin.erl:2099 msgid "Import user data from jabberd14 spool file:" msgstr "Jabberd 1.4 Spool Dosyalarından Kullanıcıları İçe Aktar:" -#: web/ejabberd_web_admin.erl:2105 +#: web/ejabberd_web_admin.erl:2106 msgid "Import users data from jabberd14 spool directory:" msgstr "Jabberd 1.4 Spool Dizininden Kullanıcıları İçe Aktar:" -#: web/ejabberd_web_admin.erl:2131 +#: web/ejabberd_web_admin.erl:2132 msgid "Listened Ports at " msgstr "Dinlenen Kapılar (Portlar) : " -#: web/ejabberd_web_admin.erl:2156 +#: web/ejabberd_web_admin.erl:2157 msgid "Modules at " msgstr "Modüller : " -#: web/ejabberd_web_admin.erl:2182 +#: web/ejabberd_web_admin.erl:2183 msgid "Statistics of ~p" msgstr "~p istatistikleri" -#: web/ejabberd_web_admin.erl:2185 +#: web/ejabberd_web_admin.erl:2186 msgid "Uptime:" msgstr "Hizmet Süresi:" -#: web/ejabberd_web_admin.erl:2188 +#: web/ejabberd_web_admin.erl:2189 msgid "CPU Time:" msgstr "İşlemci Zamanı:" -#: web/ejabberd_web_admin.erl:2194 +#: web/ejabberd_web_admin.erl:2195 msgid "Transactions Committed:" msgstr "Tamamlanan Hareketler (Transactions Committed):" -#: web/ejabberd_web_admin.erl:2197 +#: web/ejabberd_web_admin.erl:2198 msgid "Transactions Aborted:" msgstr "İptal Edilen Hareketler (Transactions):" -#: web/ejabberd_web_admin.erl:2200 +#: web/ejabberd_web_admin.erl:2201 msgid "Transactions Restarted:" msgstr "Tekrar Başlatılan Hareketler (Transactions):" -#: web/ejabberd_web_admin.erl:2203 +#: web/ejabberd_web_admin.erl:2204 msgid "Transactions Logged:" msgstr "Kaydı Tutulan Hareketler (Transactions):" -#: web/ejabberd_web_admin.erl:2245 +#: web/ejabberd_web_admin.erl:2246 msgid "Update " msgstr "Güncelle " -#: web/ejabberd_web_admin.erl:2253 +#: web/ejabberd_web_admin.erl:2254 msgid "Update plan" msgstr "Planı güncelle" -#: web/ejabberd_web_admin.erl:2254 +#: web/ejabberd_web_admin.erl:2255 msgid "Modified modules" msgstr "Değişen modüller" -#: web/ejabberd_web_admin.erl:2255 +#: web/ejabberd_web_admin.erl:2256 msgid "Update script" msgstr "Betiği Güncelle" -#: web/ejabberd_web_admin.erl:2256 +#: web/ejabberd_web_admin.erl:2257 msgid "Low level update script" msgstr "Düşük seviye güncelleme betiği" -#: web/ejabberd_web_admin.erl:2257 +#: web/ejabberd_web_admin.erl:2258 msgid "Script check" msgstr "Betik kontrolü" -#: web/ejabberd_web_admin.erl:2425 +#: web/ejabberd_web_admin.erl:2426 msgid "Port" msgstr "Kapı (Port)" -#: web/ejabberd_web_admin.erl:2426 +#: web/ejabberd_web_admin.erl:2427 msgid "IP" msgstr "IP" -#: web/ejabberd_web_admin.erl:2427 +#: web/ejabberd_web_admin.erl:2428 msgid "Protocol" msgstr "Protokol" -#: web/ejabberd_web_admin.erl:2428 web/ejabberd_web_admin.erl:2555 +#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 msgid "Module" msgstr "Modül" -#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 +#: web/ejabberd_web_admin.erl:2430 web/ejabberd_web_admin.erl:2557 msgid "Options" msgstr "Seçenekler" -#: web/ejabberd_web_admin.erl:2449 +#: web/ejabberd_web_admin.erl:2450 msgid "Delete" msgstr "Sil" -#: web/ejabberd_web_admin.erl:2578 +#: web/ejabberd_web_admin.erl:2579 msgid "Start" msgstr "Başlat" #: web/mod_register_web.erl:104 msgid "Your Jabber account was successfully created." -msgstr "" +msgstr "Jabber hesabınız başarıyla oluşturuldu." #: web/mod_register_web.erl:107 msgid "There was an error creating the account: " -msgstr "" +msgstr "Hesap oluşturulurken bir hata oluştu:" #: web/mod_register_web.erl:115 msgid "Your Jabber account was successfully deleted." -msgstr "" +msgstr "Jabber hesabınız başarıyla silindi." #: web/mod_register_web.erl:118 msgid "There was an error deleting the account: " -msgstr "" +msgstr "Hesabın silinmesi sırasında bir hata oluştu:" #: web/mod_register_web.erl:128 msgid "The password of your Jabber account was successfully changed." -msgstr "" +msgstr "Jabber hesabınızın parolası başarıyla değiştirildi." #: web/mod_register_web.erl:131 msgid "There was an error changing the password: " -msgstr "" +msgstr "Parolanın değiştirilmesi sırasında bir hata oluştu:" #: web/mod_register_web.erl:163 web/mod_register_web.erl:172 msgid "Jabber Account Registration" -msgstr "" +msgstr "Jabber Hesap Kaydı" #: web/mod_register_web.erl:174 web/mod_register_web.erl:192 #: web/mod_register_web.erl:201 msgid "Register a Jabber account" -msgstr "" +msgstr "Bir Jabber hesabı kaydet" #: web/mod_register_web.erl:176 web/mod_register_web.erl:493 #: web/mod_register_web.erl:502 msgid "Unregister a Jabber account" -msgstr "" +msgstr "Bir Jabber hesabı kaydı sil" #: web/mod_register_web.erl:203 msgid "" @@ -1737,42 +1784,48 @@ msgid "" "(Jabber IDentifier) will be of the form: username@server. Please read " "carefully the instructions to fill correctly the fields." msgstr "" +"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." #: web/mod_register_web.erl:212 web/mod_register_web.erl:386 #: web/mod_register_web.erl:509 -#, fuzzy msgid "Username:" -msgstr "IRC Kullanıcı İsmi" +msgstr "Kullanıcı adı:" #: web/mod_register_web.erl:217 msgid "This is case insensitive: macbeth is the same that MacBeth and Macbeth." msgstr "" +"Burada büyük küçük harfi yapılmaz: macbeth ile MacBeth ve Macbeth aynıdır." #: web/mod_register_web.erl:218 msgid "Characters not allowed:" -msgstr "" +msgstr "İzin verilmeyen karakterler:" #: web/mod_register_web.erl:222 web/mod_register_web.erl:391 #: web/mod_register_web.erl:514 -#, fuzzy msgid "Server:" -msgstr "Sunucu ~b" +msgstr "Sunucu:" #: web/mod_register_web.erl:232 msgid "" "Don't tell your password to anybody, not even the administrators of the " "Jabber server." -msgstr "" +msgstr "Parolanızı kimseye söylemeyin, Jabber sunucusunun yöneticilerine bile." #: web/mod_register_web.erl:234 msgid "You can later change your password using a Jabber client." msgstr "" +"Parolanızı daha sonra bir Jabber istemci kullanarak değiştirebilirsiniz." #: web/mod_register_web.erl:235 msgid "" "Some Jabber clients can store your password in your computer. Use that " "feature only if you trust your computer is safe." msgstr "" +"Bazı Jabber istemcileri parolanızı bilgisayarınızda saklayabilir. Bu " +"özelliği ancak bilgisayarın güvenli olduğuna güveniyorsanız kullanın." #: web/mod_register_web.erl:237 msgid "" @@ -1780,35 +1833,32 @@ msgid "" "Jabber there isn't an automated way to recover your password if you forget " "it." msgstr "" +"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." #: web/mod_register_web.erl:242 web/mod_register_web.erl:406 -#, fuzzy msgid "Password Verification:" -msgstr "Parola Doğrulaması" +msgstr "Parola Doğrulaması:" #: web/mod_register_web.erl:250 -#, fuzzy msgid "Register" -msgstr "Kontak Listesi" +msgstr "Kayıt Ol" #: web/mod_register_web.erl:396 -#, fuzzy msgid "Old Password:" -msgstr "Parola:" +msgstr "Eski Parola:" #: web/mod_register_web.erl:401 -#, fuzzy msgid "New Password:" -msgstr "Parola:" +msgstr "Yeni Parola:" #: web/mod_register_web.erl:504 msgid "This page allows to unregister a Jabber account in this Jabber server." msgstr "" +"Bu sayfa bu Jabber sunucusundan bir Jabber hesabının kaydını silmeye olanak " +"tanıyor." #: web/mod_register_web.erl:524 msgid "Unregister" -msgstr "" - -#, fuzzy -#~ msgid "Captcha test failed" -#~ msgstr "İnsan doğrulaması (captcha) geçerli." +msgstr "Kaydı Sil" diff --git a/src/msgs/uk.msg b/src/msgs/uk.msg index 4da7e09dc..6e21c909a 100644 --- a/src/msgs/uk.msg +++ b/src/msgs/uk.msg @@ -1,4 +1,4 @@ -{"Access Configuration","Конфігурація доступа"}. +{"Access Configuration","Конфігурація доступу"}. {"Access Control List Configuration","Конфігурація списків керування доступом"}. {"Access control lists","Списки керування доступом"}. {"Access Control Lists","Списки керування доступом"}. @@ -14,7 +14,7 @@ {"Administrator privileges required","Необхідні права адміністратора"}. {"A friendly name for the node","Псевдонім для вузла"}. {"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 query other users","Дозволити iq-запити до користувачів"}. {"Allow users to send invites","Дозволити користувачам надсилати запрошення"}. @@ -77,7 +77,7 @@ {"Edit Properties","Змінити параметри"}. {"ejabberd IRC module","ejabberd IRC модуль"}. {"ejabberd MUC module","ejabberd MUC модуль"}. -{"ejabberd Publish-Subscribe module","Модуль ejabberd Публікації-Абонування"}. +{"ejabberd Publish-Subscribe module","Модуль ejabberd Публікації-Підписки"}. {"ejabberd SOCKS5 Bytestreams module","ejabberd SOCKS5 Bytestreams модуль"}. {"ejabberd vCard module","ejabberd vCard модуль"}. {"ejabberd Web Admin","Веб-інтерфейс Адміністрування ejabberd"}. @@ -98,6 +98,7 @@ {"Erlang Jabber Server","Erlang Jabber Server"}. {"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\"}]."}. +{"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 users in a host to PIEFXIS files (XEP-0227):","Експорт даних користувачів домена до файлу PIEFXIS (XEP-0227):"}. {"Family Name","Прізвище"}. @@ -116,9 +117,9 @@ {"Groups","Групи"}. {"Group ","Група "}. {"has been banned","заборонили вхід в кімнату"}. -{"has been kicked because of an affiliation change","вигнано з кімнати як наслідок зміни ранга"}. -{"has been kicked because of a system shutdown","вигнано з кімнати як наслідок зупинки системи"}. -{"has been kicked because the room has been changed to members-only","вигнано з кімнати тому, що воня стала тільки для учасників"}. +{"has been kicked because of an affiliation change","вигнано з кімнати внаслідок зміни рангу"}. +{"has been kicked because of a system shutdown","вигнано з кімнати внаслідок зупинки системи"}. +{"has been kicked because the room has been changed to members-only","вигнано з кімнати тому, що вона стала тільки для учасників"}. {"has been kicked","вигнали з кімнати"}. {" has set the subject to: "," встановив(ла) тему: "}. {"Host","Хост"}. @@ -138,13 +139,13 @@ {"Invalid role: ~s","Недопустима роль: ~s"}. {"IP addresses","IP адреси"}. {"IP","IP"}. -{"IRC channel (don't put the first #)","Канал IRC (не використовуйте спереду #)"}. +{"IRC channel (don't put the first #)","Канал IRC (не включаючи #)"}. {"IRC server","IRC-сервер"}. {"IRC settings","Парметри IRC"}. {"IRC Transport","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 to the conference","Не дозволяється надсилати приватні повідомлення в конференцію"}. {"It is not allowed to send private messages","Приватні повідомлення не дозволені"}. @@ -168,7 +169,7 @@ {"List of modules to start","Список завантажуваних модулів"}. {"Low level update script","Низькорівневий сценарій поновлення"}. {"Make participants list public","Зробити список учасників видимим всім"}. -{"Make room captcha protected","Зробити кімнату захищеною капчею"}. +{"Make room CAPTCHA protected","Зробити кімнату захищеною капчею"}. {"Make room members-only","Кімната тільки для зареєтрованых учасників"}. {"Make room moderated","Зробити кімнату модерованою"}. {"Make room password protected","Зробити кімнату захищеною паролем"}. @@ -179,7 +180,7 @@ {"Max # of items to persist","Максимальне число збережених публікацій"}. {"Max payload size in bytes","Максимальний розмір корисного навантаження в байтах"}. {"May","травня"}. -{"Membership is required to enter this room","В цю конференціию можуть входити тільки її члени"}. +{"Membership is required to enter this room","В цю конференцію можуть входити тільки її члени"}. {"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'і немає автоматизованих засобів відновлення пароля на той випадок, якщо ви його забудете."}. {"Memory","Пам'ять"}. @@ -243,7 +244,7 @@ {"Password Verification","Перевірка Пароля"}. {"Password:","Пароль:"}. {"Password","Пароль"}. -{"Path to Dir","шлях до директорії"}. +{"Path to Dir","Шлях до директорії"}. {"Path to File","Шлях до файла"}. {"Pending","Очікування"}. {"Period: ","Період"}. @@ -256,10 +257,10 @@ {"Present real Jabber IDs to","Зробити реальні Jabber ID учасників видимими"}. {"private, ","приватна, "}. {"Protocol","Протокол"}. -{"Publish-Subscribe","Опублікувати-Абонувати"}. -{"PubSub subscriber request","Запит на абонування PubSub"}. +{"Publish-Subscribe","Публікація-Підписка"}. +{"PubSub subscriber request","Запит на підписку PubSub"}. {"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 copy","ОЗП"}. {"Raw","необроблений формат"}. @@ -288,7 +289,7 @@ {"Room description","Опис кімнати"}. {"Room Occupants","Учасники кімнати"}. {"Room title","Назва кімнати"}. -{"Roster groups allowed to subscribe","Дозволені для абонування групи ростера"}. +{"Roster groups allowed to subscribe","Дозволені для підписки групи ростера"}. {"Roster of ","Ростер користувача "}. {"Roster size","Кількість контактів"}. {"Roster","Ростер"}. @@ -321,7 +322,7 @@ {"Start Modules at ","Запуск модулів на "}. {"Start Modules","Запуск модулів"}. {"Start","Запустити"}. -{"Statistics of ~p","статистика вузла ~p"}. +{"Statistics of ~p","Статистика вузла ~p"}. {"Statistics","Статистика"}. {"Stop Modules at ","Зупинка модулів на "}. {"Stop Modules","Зупинка модулів"}. @@ -338,10 +339,10 @@ {"Sunday","Неділя"}. {"That nickname is already in use by another occupant","Псевдонім зайнято кимось з присутніх"}. {"That nickname is registered by another person","Псевдонім зареєстровано кимось іншим"}. -{"The captcha is valid.","Перевірку капчею закінчено успішно"}. +{"The CAPTCHA is valid.","Перевірку капчею закінчено успішно"}. {"The CAPTCHA verification has failed","Перевірку капчею не пройдено"}. -{"The collections with which a node is affiliated","Колекція, до якої входить вузел"}. -{"The password is too weak","Пароль дуже простий"}. +{"The collections with which a node is affiliated","Колекція, до якої входить вузол"}. +{"The password is too weak","Пароль надто простий"}. {"the password is","пароль:"}. {"The password of your Jabber account was successfully changed.","Пароль вашого Jabber-акаунту був успішно змінений."}. {"There was an error changing the password: ","Помилка при зміні пароля: "}. @@ -357,6 +358,7 @@ {"Thursday","Четвер"}. {"Time delay","Час затримки"}. {"Time","Час"}. +{"Too many CAPTCHA requests","Надто багато CAPTCHA-запитів"}. {"To ~s","До ~s"}. {"To","Кому"}. {"Traffic rate limit is exceeded","Швидкість передачі інформації було перевищено"}. @@ -365,9 +367,8 @@ {"Transactions Logged:","Транзакції запротокольовані:"}. {"Transactions Restarted:","Транзакції перезапущені:"}. {"Tuesday","Вівторок"}. -{"Unable to generate a captcha","Не має можливості сгенерувати капчу"}. -{"Unable to generate a CAPTCHA","Нема можливості сгенерувати капчу"}. -{"Unauthorized","Не авторізован"}. +{"Unable to generate a CAPTCHA","Нема можливості згенерувати капчу"}. +{"Unauthorized","Не авторизовано"}. {"Unregister a Jabber account","Видалити Jabber-акаунт"}. {"Unregister","Видалити"}. {"Update message of the day (don't send)","Оновити повідомлення дня (не надсилати)"}. @@ -392,15 +393,15 @@ {"Visitors are not allowed to send messages to all occupants","Відвідувачам не дозволяється надсилати повідомлення всім присутнім"}. {"Wednesday","Середа"}. {"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 have been banned from this room","Вам заборонено входити в цю конференцію"}. {"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 to register the nickname","Для реєстрації псевдоніму необхідно використовувати клієнт з ідтримкою 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 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 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 contact offline message queue is full. The message has been discarded.","Черга повідомлень, що не були доставлені, переповнена. Повідомлення не було збережено."}. {"Your Jabber account was successfully created.","Ваш Jabber-акаунт було успішно створено."}. diff --git a/src/msgs/uk.po b/src/msgs/uk.po index 372f5120a..923861503 100644 --- a/src/msgs/uk.po +++ b/src/msgs/uk.po @@ -22,11 +22,11 @@ msgstr "Ви мусите використовувати STARTTLS" msgid "No resource provided" msgstr "Не вказаний ресурс" -#: ejabberd_c2s.erl:1149 +#: ejabberd_c2s.erl:1197 msgid "Replaced by new connection" msgstr "Замінено новим з'єднанням" -#: ejabberd_c2s.erl:1837 +#: ejabberd_c2s.erl:1885 msgid "Your active privacy list has denied the routing of this stanza." msgstr "Маршрутизація цієї строфи була відмінена активним списком приватності." @@ -47,7 +47,7 @@ msgid "CAPTCHA web page" msgstr "Адреса капчі" #: ejabberd_captcha.erl:307 -msgid "The captcha is valid." +msgid "The CAPTCHA is valid." msgstr "Перевірку капчею закінчено успішно" #: mod_adhoc.erl:95 mod_adhoc.erl:125 mod_adhoc.erl:143 mod_adhoc.erl:161 @@ -62,67 +62,70 @@ msgstr "Пінг" msgid "Pong" msgstr "Понг" -#: mod_announce.erl:506 +#: mod_announce.erl:507 mod_announce_odbc.erl:499 msgid "Really delete message of the day?" msgstr "Насправді видалити повідомлення дня?" -#: mod_announce.erl:514 mod_configure.erl:1083 mod_configure.erl:1128 +#: mod_announce.erl:515 mod_announce_odbc.erl:507 mod_configure.erl:1083 +#: mod_configure.erl:1128 msgid "Subject" msgstr "Тема" -#: mod_announce.erl:519 mod_configure.erl:1088 mod_configure.erl:1133 +#: mod_announce.erl:520 mod_announce_odbc.erl:512 mod_configure.erl:1088 +#: mod_configure.erl:1133 msgid "Message body" msgstr "Тіло повідомлення" -#: mod_announce.erl:599 +#: mod_announce.erl:600 mod_announce_odbc.erl:592 msgid "No body provided for announce message" msgstr "Тіло оголошення має бути непустим" -#: mod_announce.erl:634 +#: mod_announce.erl:635 mod_announce_odbc.erl:627 msgid "Announcements" msgstr "Сповіщення" -#: mod_announce.erl:636 +#: mod_announce.erl:637 mod_announce_odbc.erl:629 msgid "Send announcement to all users" msgstr "Надіслати сповіщення всім користувачам" -#: mod_announce.erl:638 +#: mod_announce.erl:639 mod_announce_odbc.erl:631 msgid "Send announcement to all users on all hosts" msgstr "Надіслати сповіщення до усіх користувачів на усіх хостах" -#: mod_announce.erl:640 +#: mod_announce.erl:641 mod_announce_odbc.erl:633 msgid "Send announcement to all online users" msgstr "Надіслати сповіщення всім підключеним користувачам" -#: mod_announce.erl:642 mod_configure.erl:1078 mod_configure.erl:1123 +#: mod_announce.erl:643 mod_announce_odbc.erl:635 mod_configure.erl:1078 +#: mod_configure.erl:1123 msgid "Send announcement to all online users on all hosts" msgstr "" "Надіслати сповіщення всім підключеним користувачам на всіх віртуальних " "серверах" -#: mod_announce.erl:644 +#: mod_announce.erl:645 mod_announce_odbc.erl:637 msgid "Set message of the day and send to online users" msgstr "Встановити повідомлення дня та надіслати його підключеним користувачам" -#: mod_announce.erl:646 +#: mod_announce.erl:647 mod_announce_odbc.erl:639 msgid "Set message of the day on all hosts and send to online users" msgstr "" "Встановити повідомлення дня на всіх хостах та надійслати його підключеним " "користувачам" -#: mod_announce.erl:648 +#: mod_announce.erl:649 mod_announce_odbc.erl:641 msgid "Update message of the day (don't send)" msgstr "Оновити повідомлення дня (не надсилати)" -#: mod_announce.erl:650 +#: mod_announce.erl:651 mod_announce_odbc.erl:643 msgid "Update message of the day on all hosts (don't send)" msgstr "Оновити повідомлення дня на всіх хостах (не надсилати)" -#: mod_announce.erl:652 +#: mod_announce.erl:653 mod_announce_odbc.erl:645 msgid "Delete message of the day" msgstr "Видалити повідомлення дня" -#: mod_announce.erl:654 +#: mod_announce.erl:655 mod_announce_odbc.erl:647 msgid "Delete message of the day on all hosts" msgstr "Видалити повідомлення дня на усіх хостах" @@ -131,7 +134,7 @@ msgstr "Видалити повідомлення дня на усіх хост msgid "Configuration" msgstr "Конфігурація" -#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1934 +#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1936 msgid "Database" msgstr "База даних" @@ -143,7 +146,7 @@ msgstr "Запуск модулів" msgid "Stop Modules" msgstr "Зупинка модулів" -#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1935 +#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1937 msgid "Backup" msgstr "Резервне копіювання" @@ -172,7 +175,7 @@ msgid "Shut Down Service" msgstr "Вимкнути Сервіс" #: mod_configure.erl:145 mod_configure.erl:518 mod_configure.erl:1197 -#: web/ejabberd_web_admin.erl:1528 +#: web/ejabberd_web_admin.erl:1527 msgid "Add User" msgstr "Додати користувача" @@ -224,7 +227,7 @@ msgid "User Management" msgstr "Управління Користувачами" #: mod_configure.erl:500 web/ejabberd_web_admin.erl:1058 -#: web/ejabberd_web_admin.erl:1463 +#: web/ejabberd_web_admin.erl:1462 msgid "Online Users" msgstr "Підключені користувачі" @@ -236,15 +239,15 @@ msgstr "Всі користувачі" msgid "Outgoing s2s Connections" msgstr "Вихідні s2s-з'єднання" -#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1905 +#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1907 msgid "Running Nodes" msgstr "Працюючі вузли" -#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1907 +#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1909 msgid "Stopped Nodes" msgstr "Зупинені вузли" -#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1951 +#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1953 msgid "Modules" msgstr "Модулі" @@ -375,15 +378,15 @@ msgstr "Правила доступу" #: mod_configure.erl:1200 mod_configure.erl:1222 mod_configure.erl:1234 #: mod_configure.erl:1246 mod_configure.erl:1258 mod_configure.erl:1275 -#: mod_configure.erl:1287 mod_configure.erl:1652 mod_configure.erl:1702 -#: mod_configure.erl:1723 mod_roster.erl:943 mod_roster_odbc.erl:1048 -#: mod_vcard.erl:466 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:442 +#: mod_configure.erl:1287 mod_configure.erl:1650 mod_configure.erl:1700 +#: mod_configure.erl:1721 mod_roster.erl:943 mod_roster_odbc.erl:1060 +#: mod_vcard.erl:472 mod_vcard_ldap.erl:554 mod_vcard_odbc.erl:448 msgid "Jabber ID" msgstr "Jabber ID" -#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1653 -#: mod_configure.erl:1865 mod_muc/mod_muc_room.erl:2970 mod_register.erl:235 -#: web/ejabberd_web_admin.erl:1521 +#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1651 +#: mod_configure.erl:1863 mod_muc/mod_muc_room.erl:3224 mod_register.erl:235 +#: web/ejabberd_web_admin.erl:1520 msgid "Password" msgstr "Пароль" @@ -399,71 +402,72 @@ msgstr "Кількість зареєстрованих користувачів msgid "Number of online users" msgstr "Кількість підключених користувачів" -#: mod_configure.erl:1684 web/ejabberd_web_admin.erl:1589 -#: web/ejabberd_web_admin.erl:1741 +#: mod_configure.erl:1682 web/ejabberd_web_admin.erl:1588 +#: web/ejabberd_web_admin.erl:1743 msgid "Never" msgstr "Ніколи" -#: mod_configure.erl:1698 web/ejabberd_web_admin.erl:1602 -#: web/ejabberd_web_admin.erl:1754 +#: mod_configure.erl:1696 web/ejabberd_web_admin.erl:1601 +#: web/ejabberd_web_admin.erl:1756 msgid "Online" msgstr "Підключений" -#: mod_configure.erl:1703 +#: mod_configure.erl:1701 msgid "Last login" msgstr "Останнє підключення" -#: mod_configure.erl:1724 +#: mod_configure.erl:1722 msgid "Roster size" msgstr "Кількість контактів" -#: mod_configure.erl:1725 +#: mod_configure.erl:1723 msgid "IP addresses" msgstr "IP адреси" -#: mod_configure.erl:1726 +#: mod_configure.erl:1724 msgid "Resources" msgstr "Ресурси" -#: mod_configure.erl:1852 +#: mod_configure.erl:1850 msgid "Administration of " msgstr "Адміністрування " -#: mod_configure.erl:1855 +#: mod_configure.erl:1853 msgid "Action on user" msgstr "Дія над користувачем" -#: mod_configure.erl:1859 +#: mod_configure.erl:1857 msgid "Edit Properties" msgstr "Змінити параметри" -#: mod_configure.erl:1862 web/ejabberd_web_admin.erl:1767 +#: mod_configure.erl:1860 web/ejabberd_web_admin.erl:1769 msgid "Remove User" msgstr "Видалити користувача" -#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:336 +#: mod_irc/mod_irc.erl:201 mod_irc/mod_irc_odbc.erl:196 +#: mod_muc/mod_muc.erl:336 mod_muc/mod_muc_odbc.erl:342 msgid "Access denied by service policy" msgstr "Доступ заборонений політикою служби" -#: mod_irc/mod_irc.erl:400 +#: mod_irc/mod_irc.erl:401 mod_irc/mod_irc_odbc.erl:398 msgid "IRC Transport" msgstr "IRC Транспорт" -#: mod_irc/mod_irc.erl:427 +#: mod_irc/mod_irc.erl:428 mod_irc/mod_irc_odbc.erl:425 msgid "ejabberd IRC module" msgstr "ejabberd IRC модуль" -#: mod_irc/mod_irc.erl:558 +#: mod_irc/mod_irc.erl:559 mod_irc/mod_irc_odbc.erl:568 msgid "You need an x:data capable client to configure mod_irc settings" msgstr "" "Для налагодження параметрів mod_irc необхідно використовувати клієнт, що має " "підтримку x:data" -#: mod_irc/mod_irc.erl:565 +#: mod_irc/mod_irc.erl:566 mod_irc/mod_irc_odbc.erl:575 msgid "Registration in mod_irc for " msgstr "Реєстрація в mod_irc для " -#: mod_irc/mod_irc.erl:570 +#: mod_irc/mod_irc.erl:571 mod_irc/mod_irc_odbc.erl:580 msgid "" "Enter username, encodings, ports and passwords you wish to use for " "connecting to IRC servers" @@ -471,11 +475,11 @@ msgstr "" "Введіть ім'я користувача, кодування, порти та паролі, що будуть " "використовуватися при підключенні до IRC-серверів" -#: mod_irc/mod_irc.erl:575 +#: mod_irc/mod_irc.erl:576 mod_irc/mod_irc_odbc.erl:585 msgid "IRC Username" msgstr "Ім'я користувача IRC" -#: mod_irc/mod_irc.erl:585 +#: mod_irc/mod_irc.erl:586 mod_irc/mod_irc_odbc.erl:595 msgid "" "If you want to specify different ports, passwords, encodings for IRC " "servers, fill this list with values in format '{\"irc server\", \"encoding" @@ -487,7 +491,7 @@ msgstr "" "\"password\"}'. За замовчуванням ця служба використовує \"~s\" кодування, " "порт ~p, пустий пароль." -#: mod_irc/mod_irc.erl:597 +#: mod_irc/mod_irc.erl:598 mod_irc/mod_irc_odbc.erl:607 msgid "" "Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." @@ -495,35 +499,36 @@ msgstr "" "Приклад: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta." "fef.net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." -#: mod_irc/mod_irc.erl:602 +#: mod_irc/mod_irc.erl:603 mod_irc/mod_irc_odbc.erl:612 msgid "Connections parameters" msgstr "Параметри з'єднання" -#: mod_irc/mod_irc.erl:727 +#: mod_irc/mod_irc.erl:728 mod_irc/mod_irc_odbc.erl:757 msgid "Join IRC channel" msgstr "Приєднатися до каналу IRC" -#: mod_irc/mod_irc.erl:731 +#: mod_irc/mod_irc.erl:732 mod_irc/mod_irc_odbc.erl:761 msgid "IRC channel (don't put the first #)" msgstr "Канал IRC (не включаючи #)" -#: mod_irc/mod_irc.erl:736 +#: mod_irc/mod_irc.erl:737 mod_irc/mod_irc_odbc.erl:766 msgid "IRC server" msgstr "IRC-сервер" -#: mod_irc/mod_irc.erl:769 mod_irc/mod_irc.erl:773 +#: mod_irc/mod_irc.erl:770 mod_irc/mod_irc.erl:774 +#: mod_irc/mod_irc_odbc.erl:799 mod_irc/mod_irc_odbc.erl:803 msgid "Join the IRC channel here." msgstr "Приєднатися до каналу IRC" -#: mod_irc/mod_irc.erl:777 +#: mod_irc/mod_irc.erl:778 mod_irc/mod_irc_odbc.erl:807 msgid "Join the IRC channel in this Jabber ID: ~s" msgstr "Приєднатися до каналу IRC з Jabber ID: ~s" -#: mod_irc/mod_irc.erl:862 +#: mod_irc/mod_irc.erl:863 mod_irc/mod_irc_odbc.erl:904 msgid "IRC settings" msgstr "Парметри IRC" -#: mod_irc/mod_irc.erl:867 +#: mod_irc/mod_irc.erl:868 mod_irc/mod_irc_odbc.erl:909 msgid "" "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 " @@ -533,71 +538,73 @@ msgstr "" "підключенні до IRC-серверів Натисніть 'Далі' для заповнення додаткових " "полів. Натисніть 'Завершити' для збереження параметрів." -#: mod_irc/mod_irc.erl:873 +#: mod_irc/mod_irc.erl:874 mod_irc/mod_irc_odbc.erl:915 msgid "IRC username" msgstr "Ім'я користувача IRC" -#: mod_irc/mod_irc.erl:922 +#: mod_irc/mod_irc.erl:923 mod_irc/mod_irc_odbc.erl:964 msgid "Password ~b" msgstr "Пароль ~b" -#: mod_irc/mod_irc.erl:927 +#: mod_irc/mod_irc.erl:928 mod_irc/mod_irc_odbc.erl:969 msgid "Port ~b" msgstr "Порт ~b" -#: mod_irc/mod_irc.erl:932 +#: mod_irc/mod_irc.erl:933 mod_irc/mod_irc_odbc.erl:974 msgid "Encoding for server ~b" msgstr "Кодування для сервера ~b" -#: mod_irc/mod_irc.erl:941 +#: mod_irc/mod_irc.erl:942 mod_irc/mod_irc_odbc.erl:983 msgid "Server ~b" msgstr "Сервер ~b" -#: mod_muc/mod_muc.erl:449 +#: mod_muc/mod_muc.erl:449 mod_muc/mod_muc_odbc.erl:456 msgid "Only service administrators are allowed to send service messages" msgstr "Тільки адміністратор сервісу може надсилати службові повідомлення" -#: mod_muc/mod_muc.erl:493 +#: mod_muc/mod_muc.erl:493 mod_muc/mod_muc_odbc.erl:500 msgid "Room creation is denied by service policy" msgstr "Створювати конференцію заборонено політикою служби" -#: mod_muc/mod_muc.erl:500 +#: mod_muc/mod_muc.erl:500 mod_muc/mod_muc_odbc.erl:507 msgid "Conference room does not exist" msgstr "Конференція не існує" -#: mod_muc/mod_muc.erl:581 +#: mod_muc/mod_muc.erl:582 mod_muc/mod_muc_odbc.erl:595 msgid "Chatrooms" msgstr "Кімнати" -#: mod_muc/mod_muc.erl:711 +#: mod_muc/mod_muc.erl:712 mod_muc/mod_muc_odbc.erl:729 msgid "You need a client that supports x:data to register the nickname" msgstr "" -"Для реєстрації псевдоніму необхідно використовувати клієнт з підтримкою x:data" +"Для реєстрації псевдоніму необхідно використовувати клієнт з підтримкою x:" +"data" -#: mod_muc/mod_muc.erl:717 +#: mod_muc/mod_muc.erl:718 mod_muc/mod_muc_odbc.erl:735 msgid "Nickname Registration at " msgstr "Реєстрація псевдоніма на " -#: mod_muc/mod_muc.erl:721 +#: mod_muc/mod_muc.erl:722 mod_muc/mod_muc_odbc.erl:739 msgid "Enter nickname you want to register" msgstr "Введіть псевдонім, який ви хочете зареєструвати" -#: mod_muc/mod_muc.erl:722 mod_roster.erl:944 mod_roster_odbc.erl:1049 -#: mod_vcard.erl:358 mod_vcard.erl:471 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:447 +#: mod_muc/mod_muc.erl:723 mod_muc/mod_muc_odbc.erl:740 +#: mod_muc/mod_muc_room.erl:3810 mod_roster.erl:944 mod_roster_odbc.erl:1061 +#: mod_vcard.erl:364 mod_vcard.erl:477 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:453 msgid "Nickname" msgstr "Псевдонім" -#: mod_muc/mod_muc.erl:761 mod_muc/mod_muc_room.erl:933 -#: mod_muc/mod_muc_room.erl:1577 +#: mod_muc/mod_muc.erl:762 mod_muc/mod_muc_odbc.erl:784 +#: mod_muc/mod_muc_room.erl:1064 mod_muc/mod_muc_room.erl:1787 msgid "That nickname is registered by another person" msgstr "Псевдонім зареєстровано кимось іншим" -#: mod_muc/mod_muc.erl:787 +#: mod_muc/mod_muc.erl:788 mod_muc/mod_muc_odbc.erl:811 msgid "You must fill in field \"Nickname\" in the form" msgstr "Вам необхідно заповнити поле \"Псевдонім\" у формі" -#: mod_muc/mod_muc.erl:807 +#: mod_muc/mod_muc.erl:808 mod_muc/mod_muc_odbc.erl:831 msgid "ejabberd MUC module" msgstr "ejabberd MUC модуль" @@ -637,8 +644,8 @@ msgstr "вигнано з кімнати внаслідок зупинки си msgid "is now known as" msgstr "змінив(ла) псевдонім на" -#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:689 -#: mod_muc/mod_muc_room.erl:2138 +#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:688 +#: mod_muc/mod_muc_room.erl:2393 msgid " has set the subject to: " msgstr " встановив(ла) тему: " @@ -734,34 +741,50 @@ msgstr "листопада" msgid "December" msgstr "грудня" -#: mod_muc/mod_muc_log.erl:751 +#: mod_muc/mod_muc_log.erl:750 msgid "Room Configuration" msgstr "Конфігурація кімнати" -#: mod_muc/mod_muc_log.erl:760 +#: mod_muc/mod_muc_log.erl:759 msgid "Room Occupants" msgstr "Учасники кімнати" -#: mod_muc/mod_muc_room.erl:170 +#: mod_muc/mod_muc_room.erl:174 msgid "Traffic rate limit is exceeded" msgstr "Швидкість передачі інформації було перевищено" -#: mod_muc/mod_muc_room.erl:242 +#: mod_muc/mod_muc_room.erl:246 msgid "" "This participant is kicked from the room because he sent an error message" msgstr "" "Цього учасника було відключено від кімнати через те, що він надіслав " "помилкове повідомлення" -#: mod_muc/mod_muc_room.erl:251 +#: mod_muc/mod_muc_room.erl:255 msgid "It is not allowed to send private messages to the conference" msgstr "Не дозволяється надсилати приватні повідомлення в конференцію" -#: mod_muc/mod_muc_room.erl:296 +#: mod_muc/mod_muc_room.erl:332 +msgid "Please, wait for a while before sending new voice request" +msgstr "" + +#: mod_muc/mod_muc_room.erl:347 +msgid "Voice requests are disabled in this conference" +msgstr "" + +#: mod_muc/mod_muc_room.erl:364 +msgid "Failed to extract JID from your voice request approval" +msgstr "" + +#: mod_muc/mod_muc_room.erl:393 +msgid "Only moderators can approve voice requests" +msgstr "" + +#: mod_muc/mod_muc_room.erl:408 msgid "Improper message type" msgstr "Неправильний тип повідомлення" -#: mod_muc/mod_muc_room.erl:406 +#: mod_muc/mod_muc_room.erl:518 msgid "" "This participant is kicked from the room because he sent an error message to " "another participant" @@ -769,232 +792,267 @@ msgstr "" "Цього учасника було відключено від кімнати через те, що він надіслав " "помилкове повідомлення іншому учаснику" -#: mod_muc/mod_muc_room.erl:419 +#: mod_muc/mod_muc_room.erl:531 msgid "It is not allowed to send private messages of type \"groupchat\"" msgstr "Не дозволяється надсилати приватні повідомлення типу \"groupchat\"" -#: mod_muc/mod_muc_room.erl:431 mod_muc/mod_muc_room.erl:486 +#: mod_muc/mod_muc_room.erl:543 mod_muc/mod_muc_room.erl:611 msgid "Recipient is not in the conference room" msgstr "Адресата немає в конференції" -#: mod_muc/mod_muc_room.erl:451 mod_muc/mod_muc_room.erl:829 -#: mod_muc/mod_muc_room.erl:3609 -msgid "Only occupants are allowed to send messages to the conference" -msgstr "Тільки присутнім дозволяється надсилати повідомленняя в конференцію" - -#: mod_muc/mod_muc_room.erl:460 +#: mod_muc/mod_muc_room.erl:564 mod_muc/mod_muc_room.erl:585 msgid "It is not allowed to send private messages" msgstr "Приватні повідомлення не дозволені" -#: mod_muc/mod_muc_room.erl:509 +#: mod_muc/mod_muc_room.erl:576 mod_muc/mod_muc_room.erl:956 +#: mod_muc/mod_muc_room.erl:4040 +msgid "Only occupants are allowed to send messages to the conference" +msgstr "Тільки присутнім дозволяється надсилати повідомленняя в конференцію" + +#: mod_muc/mod_muc_room.erl:634 msgid "Only occupants are allowed to send queries to the conference" msgstr "Тільки присутнім дозволяється відправляти запити в конференцію" -#: mod_muc/mod_muc_room.erl:521 +#: mod_muc/mod_muc_room.erl:646 msgid "Queries to the conference members are not allowed in this room" msgstr "Запити до користувачів в цій конференції заборонені" -#: mod_muc/mod_muc_room.erl:805 +#: mod_muc/mod_muc_room.erl:932 msgid "" "Only moderators and participants are allowed to change the subject in this " "room" msgstr "Тільки модератори та учасники можуть змінювати тему в цій кімнаті" -#: mod_muc/mod_muc_room.erl:810 +#: mod_muc/mod_muc_room.erl:937 msgid "Only moderators are allowed to change the subject in this room" msgstr "Тільки модератори можуть змінювати тему в цій кімнаті" -#: mod_muc/mod_muc_room.erl:820 +#: mod_muc/mod_muc_room.erl:947 msgid "Visitors are not allowed to send messages to all occupants" msgstr "Відвідувачам не дозволяється надсилати повідомлення всім присутнім" -#: mod_muc/mod_muc_room.erl:891 +#: mod_muc/mod_muc_room.erl:1021 msgid "" "This participant is kicked from the room because he sent an error presence" msgstr "" "Цього учасника було відключено від кімнати через те, що він надіслав " "помилковий статус присутності" -#: mod_muc/mod_muc_room.erl:909 +#: mod_muc/mod_muc_room.erl:1040 msgid "Visitors are not allowed to change their nicknames in this room" msgstr "Відвідувачам не дозволяється змінювати псевдонім в цій кімнаті" -#: mod_muc/mod_muc_room.erl:922 mod_muc/mod_muc_room.erl:1569 +#: mod_muc/mod_muc_room.erl:1053 mod_muc/mod_muc_room.erl:1779 msgid "That nickname is already in use by another occupant" msgstr "Псевдонім зайнято кимось з присутніх" -#: mod_muc/mod_muc_room.erl:1558 +#: mod_muc/mod_muc_room.erl:1768 msgid "You have been banned from this room" msgstr "Вам заборонено входити в цю конференцію" -#: mod_muc/mod_muc_room.erl:1561 +#: mod_muc/mod_muc_room.erl:1771 msgid "Membership is required to enter this room" msgstr "В цю конференцію можуть входити тільки її члени" -#: mod_muc/mod_muc_room.erl:1597 +#: mod_muc/mod_muc_room.erl:1807 msgid "This room is not anonymous" msgstr "Ця кімната не анонімна" -#: mod_muc/mod_muc_room.erl:1623 +#: mod_muc/mod_muc_room.erl:1833 msgid "A password is required to enter this room" msgstr "Щоб зайти в цю конференцію, необхідно ввести пароль" -#: mod_muc/mod_muc_room.erl:1645 mod_register.erl:246 +#: mod_muc/mod_muc_room.erl:1855 mod_register.erl:246 msgid "Too many CAPTCHA requests" msgstr "Надто багато CAPTCHA-запитів" -#: mod_muc/mod_muc_room.erl:1654 -msgid "Unable to generate a captcha" -msgstr "Неможливо згенерувати капчу" +#: mod_muc/mod_muc_room.erl:1864 mod_register.erl:251 +msgid "Unable to generate a CAPTCHA" +msgstr "Нема можливості згенерувати капчу" -#: mod_muc/mod_muc_room.erl:1664 +#: mod_muc/mod_muc_room.erl:1874 msgid "Incorrect password" msgstr "Неправильний пароль" -#: mod_muc/mod_muc_room.erl:2193 +#: mod_muc/mod_muc_room.erl:2448 msgid "Administrator privileges required" msgstr "Необхідні права адміністратора" -#: mod_muc/mod_muc_room.erl:2208 +#: mod_muc/mod_muc_room.erl:2463 msgid "Moderator privileges required" msgstr "Необхідні права модератора" -#: mod_muc/mod_muc_room.erl:2363 +#: mod_muc/mod_muc_room.erl:2619 msgid "Jabber ID ~s is invalid" msgstr "Jabber ID ~s недопустимий" -#: mod_muc/mod_muc_room.erl:2377 +#: mod_muc/mod_muc_room.erl:2633 msgid "Nickname ~s does not exist in the room" msgstr "Псевдонім ~s в кімнаті відсутній" -#: mod_muc/mod_muc_room.erl:2403 mod_muc/mod_muc_room.erl:2797 +#: mod_muc/mod_muc_room.erl:2659 mod_muc/mod_muc_room.erl:3049 msgid "Invalid affiliation: ~s" msgstr "Недопустимий ранг: ~s" -#: mod_muc/mod_muc_room.erl:2460 +#: mod_muc/mod_muc_room.erl:2713 msgid "Invalid role: ~s" msgstr "Недопустима роль: ~s" -#: mod_muc/mod_muc_room.erl:2774 mod_muc/mod_muc_room.erl:2810 +#: mod_muc/mod_muc_room.erl:3026 mod_muc/mod_muc_room.erl:3062 msgid "Owner privileges required" msgstr "Необхідні права власника" -#: mod_muc/mod_muc_room.erl:2941 +#: mod_muc/mod_muc_room.erl:3195 msgid "Configuration of room ~s" msgstr "Конфігурація кімнати ~s" -#: mod_muc/mod_muc_room.erl:2946 +#: mod_muc/mod_muc_room.erl:3200 msgid "Room title" msgstr "Назва кімнати" -#: mod_muc/mod_muc_room.erl:2949 mod_muc/mod_muc_room.erl:3388 +#: mod_muc/mod_muc_room.erl:3203 mod_muc/mod_muc_room.erl:3692 msgid "Room description" msgstr "Опис кімнати" -#: mod_muc/mod_muc_room.erl:2956 +#: mod_muc/mod_muc_room.erl:3210 msgid "Make room persistent" msgstr "Зробити кімнату постійною" -#: mod_muc/mod_muc_room.erl:2961 +#: mod_muc/mod_muc_room.erl:3215 msgid "Make room public searchable" msgstr "Зробити кімнату видимою всім" -#: mod_muc/mod_muc_room.erl:2964 +#: mod_muc/mod_muc_room.erl:3218 msgid "Make participants list public" msgstr "Зробити список учасників видимим всім" -#: mod_muc/mod_muc_room.erl:2967 +#: mod_muc/mod_muc_room.erl:3221 msgid "Make room password protected" msgstr "Зробити кімнату захищеною паролем" -#: mod_muc/mod_muc_room.erl:2978 +#: mod_muc/mod_muc_room.erl:3232 msgid "Maximum Number of Occupants" msgstr "Максимальна кількість учасників" -#: mod_muc/mod_muc_room.erl:2985 +#: mod_muc/mod_muc_room.erl:3239 msgid "No limit" msgstr "Без обмежень" -#: mod_muc/mod_muc_room.erl:2996 +#: mod_muc/mod_muc_room.erl:3250 msgid "Present real Jabber IDs to" msgstr "Зробити реальні Jabber ID учасників видимими" -#: mod_muc/mod_muc_room.erl:3004 +#: mod_muc/mod_muc_room.erl:3258 mod_muc/mod_muc_room.erl:3292 msgid "moderators only" msgstr "тільки модераторам" -#: mod_muc/mod_muc_room.erl:3006 +#: mod_muc/mod_muc_room.erl:3260 mod_muc/mod_muc_room.erl:3294 msgid "anyone" msgstr "всім учасникам" -#: mod_muc/mod_muc_room.erl:3008 +#: mod_muc/mod_muc_room.erl:3262 msgid "Make room members-only" msgstr "Кімната тільки для зареєтрованых учасників" -#: mod_muc/mod_muc_room.erl:3011 +#: mod_muc/mod_muc_room.erl:3265 msgid "Make room moderated" msgstr "Зробити кімнату модерованою" -#: mod_muc/mod_muc_room.erl:3014 +#: mod_muc/mod_muc_room.erl:3268 msgid "Default users as participants" msgstr "Зробити користувачів учасниками за замовчуванням" -#: mod_muc/mod_muc_room.erl:3017 +#: mod_muc/mod_muc_room.erl:3271 msgid "Allow users to change the subject" msgstr "Дозволити користувачам змінювати тему" -#: mod_muc/mod_muc_room.erl:3020 +#: mod_muc/mod_muc_room.erl:3274 msgid "Allow users to send private messages" msgstr "Дозволити приватні повідомлення" -#: mod_muc/mod_muc_room.erl:3023 +#: mod_muc/mod_muc_room.erl:3279 +#, fuzzy +msgid "Allow visitors to send private messages to" +msgstr "Дозволити приватні повідомлення" + +#: mod_muc/mod_muc_room.erl:3290 +msgid "nobody" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3296 msgid "Allow users to query other users" msgstr "Дозволити iq-запити до користувачів" -#: mod_muc/mod_muc_room.erl:3026 +#: mod_muc/mod_muc_room.erl:3299 msgid "Allow users to send invites" msgstr "Дозволити користувачам надсилати запрошення" -#: mod_muc/mod_muc_room.erl:3029 +#: mod_muc/mod_muc_room.erl:3302 msgid "Allow visitors to send status text in presence updates" msgstr "" "Дозволити відвідувачам відсилати текст статусу в оновленнях присутності" -#: mod_muc/mod_muc_room.erl:3032 +#: mod_muc/mod_muc_room.erl:3305 msgid "Allow visitors to change nickname" msgstr "Дозволити відвідувачам змінювати псевдонім" -#: mod_muc/mod_muc_room.erl:3038 -msgid "Make room captcha protected" +#: mod_muc/mod_muc_room.erl:3308 +#, fuzzy +msgid "Allow visitors to send voice requests" +msgstr "Дозволити користувачам надсилати запрошення" + +#: mod_muc/mod_muc_room.erl:3311 +msgid "Minimum interval between voice requests (in seconds)" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3317 +msgid "Make room CAPTCHA protected" msgstr "Зробити кімнату захищеною капчею" -#: mod_muc/mod_muc_room.erl:3043 +#: mod_muc/mod_muc_room.erl:3322 msgid "Exclude Jabber IDs from CAPTCHA challenge" msgstr "Пропускати ці Jabber ID без CAPTCHA-запиту" -#: mod_muc/mod_muc_room.erl:3050 +#: mod_muc/mod_muc_room.erl:3329 msgid "Enable logging" msgstr "Включити журнал роботи" -#: mod_muc/mod_muc_room.erl:3058 +#: mod_muc/mod_muc_room.erl:3337 msgid "You need an x:data capable client to configure room" msgstr "" "Для конфігурування кімнати потрібно використовувати клієнт з підтримкою x:" "data" -#: mod_muc/mod_muc_room.erl:3390 +#: mod_muc/mod_muc_room.erl:3694 msgid "Number of occupants" msgstr "Кількість присутніх" -#: mod_muc/mod_muc_room.erl:3446 +#: mod_muc/mod_muc_room.erl:3750 msgid "private, " msgstr "приватна, " -#: mod_muc/mod_muc_room.erl:3529 +#: mod_muc/mod_muc_room.erl:3799 +msgid "Voice request" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3803 +msgid "Either approve or decline the voice request." +msgstr "" + +#: mod_muc/mod_muc_room.erl:3809 +#, fuzzy +msgid "User JID" +msgstr "Користувач " + +#: mod_muc/mod_muc_room.erl:3811 +msgid "Grant voice to this person?" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3960 msgid "~s invites you to the room ~s" msgstr "~s запрошує вас до кімнати ~s" -#: mod_muc/mod_muc_room.erl:3538 +#: mod_muc/mod_muc_room.erl:3969 msgid "the password is" msgstr "пароль:" @@ -1010,14 +1068,15 @@ msgid "~s's Offline Messages Queue" msgstr "Черга офлайнових повідомлень ~s" #: mod_offline.erl:563 mod_offline_odbc.erl:411 mod_roster.erl:987 -#: mod_roster_odbc.erl:1092 mod_shared_roster.erl:896 -#: mod_shared_roster.erl:1005 web/ejabberd_web_admin.erl:833 +#: mod_roster_odbc.erl:1104 mod_shared_roster.erl:901 +#: mod_shared_roster.erl:1010 mod_shared_roster_odbc.erl:930 +#: mod_shared_roster_odbc.erl:1039 web/ejabberd_web_admin.erl:833 #: web/ejabberd_web_admin.erl:874 web/ejabberd_web_admin.erl:942 #: web/ejabberd_web_admin.erl:978 web/ejabberd_web_admin.erl:1019 -#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1758 -#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1961 -#: web/ejabberd_web_admin.erl:2030 web/ejabberd_web_admin.erl:2134 -#: web/ejabberd_web_admin.erl:2159 web/ejabberd_web_admin.erl:2247 +#: web/ejabberd_web_admin.erl:1508 web/ejabberd_web_admin.erl:1760 +#: web/ejabberd_web_admin.erl:1931 web/ejabberd_web_admin.erl:1963 +#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2135 +#: web/ejabberd_web_admin.erl:2160 web/ejabberd_web_admin.erl:2248 msgid "Submitted" msgstr "Відправлено" @@ -1037,8 +1096,9 @@ msgstr "Кому" msgid "Packet" msgstr "Пакет" -#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:903 -#: web/ejabberd_web_admin.erl:882 web/ejabberd_web_admin.erl:986 +#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:908 +#: mod_shared_roster_odbc.erl:937 web/ejabberd_web_admin.erl:882 +#: web/ejabberd_web_admin.erl:986 msgid "Delete Selected" msgstr "Видалити виділені" @@ -1054,104 +1114,104 @@ msgstr "Видалити всі офлайнові повідомлення" msgid "ejabberd SOCKS5 Bytestreams module" msgstr "ejabberd SOCKS5 Bytestreams модуль" -#: mod_pubsub/mod_pubsub.erl:1119 mod_pubsub/mod_pubsub_odbc.erl:928 +#: mod_pubsub/mod_pubsub.erl:1120 mod_pubsub/mod_pubsub_odbc.erl:929 msgid "Publish-Subscribe" msgstr "Публікація-Підписка" -#: mod_pubsub/mod_pubsub.erl:1213 mod_pubsub/mod_pubsub_odbc.erl:1024 +#: mod_pubsub/mod_pubsub.erl:1214 mod_pubsub/mod_pubsub_odbc.erl:1025 msgid "ejabberd Publish-Subscribe module" msgstr "Модуль ejabberd Публікації-Підписки" -#: mod_pubsub/mod_pubsub.erl:1496 mod_pubsub/mod_pubsub_odbc.erl:1311 +#: mod_pubsub/mod_pubsub.erl:1497 mod_pubsub/mod_pubsub_odbc.erl:1312 msgid "PubSub subscriber request" msgstr "Запит на підписку PubSub" -#: mod_pubsub/mod_pubsub.erl:1498 mod_pubsub/mod_pubsub_odbc.erl:1313 +#: mod_pubsub/mod_pubsub.erl:1499 mod_pubsub/mod_pubsub_odbc.erl:1314 msgid "Choose whether to approve this entity's subscription." msgstr "Вирішіть, чи задовольнити запит цього об'єкту на підписку" -#: mod_pubsub/mod_pubsub.erl:1504 mod_pubsub/mod_pubsub_odbc.erl:1319 +#: mod_pubsub/mod_pubsub.erl:1505 mod_pubsub/mod_pubsub_odbc.erl:1320 msgid "Node ID" msgstr "ID вузла" -#: mod_pubsub/mod_pubsub.erl:1509 mod_pubsub/mod_pubsub_odbc.erl:1324 +#: mod_pubsub/mod_pubsub.erl:1510 mod_pubsub/mod_pubsub_odbc.erl:1325 msgid "Subscriber Address" msgstr "Адреса абонента" -#: mod_pubsub/mod_pubsub.erl:1515 mod_pubsub/mod_pubsub_odbc.erl:1330 +#: mod_pubsub/mod_pubsub.erl:1516 mod_pubsub/mod_pubsub_odbc.erl:1331 msgid "Allow this Jabber ID to subscribe to this pubsub node?" msgstr "Чи дозволити цьому Jabber ID підписатись новини наданого вузла" -#: mod_pubsub/mod_pubsub.erl:3416 mod_pubsub/mod_pubsub_odbc.erl:3229 +#: mod_pubsub/mod_pubsub.erl:3474 mod_pubsub/mod_pubsub_odbc.erl:3287 msgid "Deliver payloads with event notifications" msgstr "Доставляти разом з повідомленнями про публікації самі публікації" -#: mod_pubsub/mod_pubsub.erl:3417 mod_pubsub/mod_pubsub_odbc.erl:3230 +#: mod_pubsub/mod_pubsub.erl:3475 mod_pubsub/mod_pubsub_odbc.erl:3288 msgid "Deliver event notifications" msgstr "Доставляти сповіщення про події" -#: mod_pubsub/mod_pubsub.erl:3418 mod_pubsub/mod_pubsub_odbc.erl:3231 +#: mod_pubsub/mod_pubsub.erl:3476 mod_pubsub/mod_pubsub_odbc.erl:3289 msgid "Notify subscribers when the node configuration changes" msgstr "Повідомляти абонентів про зміни в конфігурації збірника" -#: mod_pubsub/mod_pubsub.erl:3419 mod_pubsub/mod_pubsub_odbc.erl:3232 +#: mod_pubsub/mod_pubsub.erl:3477 mod_pubsub/mod_pubsub_odbc.erl:3290 msgid "Notify subscribers when the node is deleted" msgstr "Повідомляти абонентів про видалення збірника" -#: mod_pubsub/mod_pubsub.erl:3420 mod_pubsub/mod_pubsub_odbc.erl:3233 +#: mod_pubsub/mod_pubsub.erl:3478 mod_pubsub/mod_pubsub_odbc.erl:3291 msgid "Notify subscribers when items are removed from the node" msgstr "Повідомляти абонентів про видалення публікацій із збірника" -#: mod_pubsub/mod_pubsub.erl:3421 mod_pubsub/mod_pubsub_odbc.erl:3234 +#: mod_pubsub/mod_pubsub.erl:3479 mod_pubsub/mod_pubsub_odbc.erl:3292 msgid "Persist items to storage" msgstr "Зберегати публікації до сховища" -#: mod_pubsub/mod_pubsub.erl:3422 mod_pubsub/mod_pubsub_odbc.erl:3235 +#: mod_pubsub/mod_pubsub.erl:3480 mod_pubsub/mod_pubsub_odbc.erl:3293 msgid "A friendly name for the node" msgstr "Псевдонім для вузла" -#: mod_pubsub/mod_pubsub.erl:3423 mod_pubsub/mod_pubsub_odbc.erl:3236 +#: mod_pubsub/mod_pubsub.erl:3481 mod_pubsub/mod_pubsub_odbc.erl:3294 msgid "Max # of items to persist" msgstr "Максимальне число збережених публікацій" -#: mod_pubsub/mod_pubsub.erl:3424 mod_pubsub/mod_pubsub_odbc.erl:3237 +#: mod_pubsub/mod_pubsub.erl:3482 mod_pubsub/mod_pubsub_odbc.erl:3295 msgid "Whether to allow subscriptions" msgstr "Дозволяти підписку" -#: mod_pubsub/mod_pubsub.erl:3425 mod_pubsub/mod_pubsub_odbc.erl:3238 +#: mod_pubsub/mod_pubsub.erl:3483 mod_pubsub/mod_pubsub_odbc.erl:3296 msgid "Specify the access model" msgstr "Визначити модель доступу" -#: mod_pubsub/mod_pubsub.erl:3428 mod_pubsub/mod_pubsub_odbc.erl:3241 +#: mod_pubsub/mod_pubsub.erl:3486 mod_pubsub/mod_pubsub_odbc.erl:3299 msgid "Roster groups allowed to subscribe" msgstr "Дозволені для підписки групи ростера" -#: mod_pubsub/mod_pubsub.erl:3429 mod_pubsub/mod_pubsub_odbc.erl:3242 +#: mod_pubsub/mod_pubsub.erl:3487 mod_pubsub/mod_pubsub_odbc.erl:3300 msgid "Specify the publisher model" msgstr "Умови публікації" -#: mod_pubsub/mod_pubsub.erl:3431 mod_pubsub/mod_pubsub_odbc.erl:3244 +#: mod_pubsub/mod_pubsub.erl:3489 mod_pubsub/mod_pubsub_odbc.erl:3302 msgid "Purge all items when the relevant publisher goes offline" msgstr "" "Видалити всі елементи, коли особа, що їх опублікувала, вимикається від мережі" -#: mod_pubsub/mod_pubsub.erl:3432 mod_pubsub/mod_pubsub_odbc.erl:3245 +#: mod_pubsub/mod_pubsub.erl:3490 mod_pubsub/mod_pubsub_odbc.erl:3303 msgid "Specify the event message type" msgstr "Вкажіть тип повідомлень зі сповіщеннями про події" -#: mod_pubsub/mod_pubsub.erl:3434 mod_pubsub/mod_pubsub_odbc.erl:3247 +#: mod_pubsub/mod_pubsub.erl:3492 mod_pubsub/mod_pubsub_odbc.erl:3305 msgid "Max payload size in bytes" msgstr "Максимальний розмір корисного навантаження в байтах" -#: mod_pubsub/mod_pubsub.erl:3435 mod_pubsub/mod_pubsub_odbc.erl:3248 +#: mod_pubsub/mod_pubsub.erl:3493 mod_pubsub/mod_pubsub_odbc.erl:3306 msgid "When to send the last published item" msgstr "Коли надсилати останній опублікований елемент" -#: mod_pubsub/mod_pubsub.erl:3437 mod_pubsub/mod_pubsub_odbc.erl:3250 +#: mod_pubsub/mod_pubsub.erl:3495 mod_pubsub/mod_pubsub_odbc.erl:3308 msgid "Only deliver notifications to available users" msgstr "Доставляти повідомленнями тільки доступним користувачам" -#: mod_pubsub/mod_pubsub.erl:3438 mod_pubsub/mod_pubsub_odbc.erl:3251 +#: mod_pubsub/mod_pubsub.erl:3496 mod_pubsub/mod_pubsub_odbc.erl:3309 msgid "The collections with which a node is affiliated" msgstr "Колекція, до якої входить вузол" @@ -1162,21 +1222,18 @@ msgstr "Перевірку капчею не пройдено" #: mod_register.erl:220 msgid "You need a client that supports x:data and CAPTCHA to register" msgstr "" -"Для реєстрації псевдоніму необхідно використовувати клієнт з підтримкою x:data" +"Для реєстрації псевдоніму необхідно використовувати клієнт з підтримкою x:" +"data" #: mod_register.erl:226 mod_register.erl:265 msgid "Choose a username and password to register with this server" msgstr "Виберіть назву користувача та пароль для реєстрації на цьому сервері" -#: mod_register.erl:230 mod_vcard.erl:358 mod_vcard_odbc.erl:336 -#: web/ejabberd_web_admin.erl:1516 web/ejabberd_web_admin.erl:1573 +#: mod_register.erl:230 mod_vcard.erl:364 mod_vcard_odbc.erl:342 +#: web/ejabberd_web_admin.erl:1515 web/ejabberd_web_admin.erl:1572 msgid "User" msgstr "Користувач" -#: mod_register.erl:251 -msgid "Unable to generate a CAPTCHA" -msgstr "Нема можливості згенерувати капчу" - #: mod_register.erl:316 mod_register.erl:361 msgid "The password is too weak" msgstr "Пароль надто простий" @@ -1185,120 +1242,123 @@ msgstr "Пароль надто простий" msgid "Users are not allowed to register accounts so quickly" msgstr "Користувачам не дозволено так часто реєструвати облікові записи" -#: mod_roster.erl:938 mod_roster_odbc.erl:1043 web/ejabberd_web_admin.erl:1699 -#: web/ejabberd_web_admin.erl:1884 web/ejabberd_web_admin.erl:1895 -#: web/ejabberd_web_admin.erl:2218 +#: mod_roster.erl:938 mod_roster_odbc.erl:1055 web/ejabberd_web_admin.erl:1701 +#: web/ejabberd_web_admin.erl:1886 web/ejabberd_web_admin.erl:1897 +#: web/ejabberd_web_admin.erl:2219 msgid "None" msgstr "Немає" -#: mod_roster.erl:945 mod_roster_odbc.erl:1050 +#: mod_roster.erl:945 mod_roster_odbc.erl:1062 msgid "Subscription" msgstr "Підписка" -#: mod_roster.erl:946 mod_roster_odbc.erl:1051 +#: mod_roster.erl:946 mod_roster_odbc.erl:1063 msgid "Pending" msgstr "Очікування" -#: mod_roster.erl:947 mod_roster_odbc.erl:1052 +#: mod_roster.erl:947 mod_roster_odbc.erl:1064 msgid "Groups" msgstr "Групи" -#: mod_roster.erl:974 mod_roster_odbc.erl:1079 +#: mod_roster.erl:974 mod_roster_odbc.erl:1091 msgid "Validate" msgstr "Затвердити" -#: mod_roster.erl:982 mod_roster_odbc.erl:1087 +#: mod_roster.erl:982 mod_roster_odbc.erl:1099 msgid "Remove" msgstr "Видалити" -#: mod_roster.erl:985 mod_roster_odbc.erl:1090 +#: mod_roster.erl:985 mod_roster_odbc.erl:1102 msgid "Roster of " msgstr "Ростер користувача " -#: mod_roster.erl:988 mod_roster_odbc.erl:1093 mod_shared_roster.erl:897 -#: mod_shared_roster.erl:1006 web/ejabberd_web_admin.erl:834 +#: mod_roster.erl:988 mod_roster_odbc.erl:1105 mod_shared_roster.erl:902 +#: mod_shared_roster.erl:1011 mod_shared_roster_odbc.erl:931 +#: mod_shared_roster_odbc.erl:1040 web/ejabberd_web_admin.erl:834 #: web/ejabberd_web_admin.erl:875 web/ejabberd_web_admin.erl:943 #: web/ejabberd_web_admin.erl:979 web/ejabberd_web_admin.erl:1020 -#: web/ejabberd_web_admin.erl:1510 web/ejabberd_web_admin.erl:1759 -#: web/ejabberd_web_admin.erl:1930 web/ejabberd_web_admin.erl:2135 -#: web/ejabberd_web_admin.erl:2160 +#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1761 +#: web/ejabberd_web_admin.erl:1932 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2161 msgid "Bad format" msgstr "Неправильний формат" -#: mod_roster.erl:995 mod_roster_odbc.erl:1100 +#: mod_roster.erl:995 mod_roster_odbc.erl:1112 msgid "Add Jabber ID" msgstr "Додати Jabber ID" -#: mod_roster.erl:1094 mod_roster_odbc.erl:1199 +#: mod_roster.erl:1094 mod_roster_odbc.erl:1211 msgid "Roster" msgstr "Ростер" -#: mod_shared_roster.erl:852 mod_shared_roster.erl:894 -#: mod_shared_roster.erl:1002 +#: mod_shared_roster.erl:857 mod_shared_roster.erl:899 +#: mod_shared_roster.erl:1007 mod_shared_roster_odbc.erl:886 +#: mod_shared_roster_odbc.erl:928 mod_shared_roster_odbc.erl:1036 msgid "Shared Roster Groups" msgstr "Спільні групи контактів" -#: mod_shared_roster.erl:890 web/ejabberd_web_admin.erl:1366 -#: web/ejabberd_web_admin.erl:2460 +#: mod_shared_roster.erl:895 mod_shared_roster_odbc.erl:924 +#: web/ejabberd_web_admin.erl:1365 web/ejabberd_web_admin.erl:2461 msgid "Add New" msgstr "Додати" -#: mod_shared_roster.erl:973 +#: mod_shared_roster.erl:978 mod_shared_roster_odbc.erl:1007 msgid "Name:" msgstr "Назва:" -#: mod_shared_roster.erl:978 +#: mod_shared_roster.erl:983 mod_shared_roster_odbc.erl:1012 msgid "Description:" msgstr "Опис:" -#: mod_shared_roster.erl:986 +#: mod_shared_roster.erl:991 mod_shared_roster_odbc.erl:1020 msgid "Members:" msgstr "Члени:" -#: mod_shared_roster.erl:994 +#: mod_shared_roster.erl:999 mod_shared_roster_odbc.erl:1028 msgid "Displayed Groups:" msgstr "Видимі групи:" -#: mod_shared_roster.erl:1003 +#: mod_shared_roster.erl:1008 mod_shared_roster_odbc.erl:1037 msgid "Group " msgstr "Група " -#: mod_shared_roster.erl:1012 web/ejabberd_web_admin.erl:840 -#: web/ejabberd_web_admin.erl:884 web/ejabberd_web_admin.erl:949 -#: web/ejabberd_web_admin.erl:1026 web/ejabberd_web_admin.erl:2015 +#: mod_shared_roster.erl:1017 mod_shared_roster_odbc.erl:1046 +#: web/ejabberd_web_admin.erl:840 web/ejabberd_web_admin.erl:884 +#: web/ejabberd_web_admin.erl:949 web/ejabberd_web_admin.erl:1026 +#: web/ejabberd_web_admin.erl:2017 msgid "Submit" msgstr "Відправити" -#: mod_vcard.erl:165 mod_vcard_ldap.erl:237 mod_vcard_odbc.erl:129 +#: mod_vcard.erl:165 mod_vcard_ldap.erl:238 mod_vcard_odbc.erl:129 msgid "Erlang Jabber Server" msgstr "Erlang Jabber Server" -#: mod_vcard.erl:358 mod_vcard.erl:472 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:448 +#: mod_vcard.erl:364 mod_vcard.erl:478 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:454 msgid "Birthday" msgstr "День народження" -#: mod_vcard.erl:358 mod_vcard.erl:474 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:450 +#: mod_vcard.erl:364 mod_vcard.erl:480 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:456 msgid "City" msgstr "Місто" -#: mod_vcard.erl:358 mod_vcard.erl:473 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:449 +#: mod_vcard.erl:364 mod_vcard.erl:479 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:455 msgid "Country" msgstr "Країна" -#: mod_vcard.erl:358 mod_vcard.erl:475 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:451 +#: mod_vcard.erl:364 mod_vcard.erl:481 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:457 msgid "Email" msgstr "Електронна пошта" -#: mod_vcard.erl:358 mod_vcard.erl:470 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:446 +#: mod_vcard.erl:364 mod_vcard.erl:476 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:452 msgid "Family Name" msgstr "Прізвище" -#: mod_vcard.erl:358 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_odbc.erl:342 msgid "" "Fill in the form to search for any matching Jabber User (Add * to the end of " "field to match substring)" @@ -1306,52 +1366,52 @@ msgstr "" "Заповніть поля для пошуку користувача Jabber (Додайте * в кінець поля для " "пошуку підрядка)" -#: mod_vcard.erl:358 mod_vcard.erl:467 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:443 +#: mod_vcard.erl:364 mod_vcard.erl:473 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:449 msgid "Full Name" msgstr "Повне ім'я" -#: mod_vcard.erl:358 mod_vcard.erl:469 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:445 +#: mod_vcard.erl:364 mod_vcard.erl:475 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:451 msgid "Middle Name" msgstr "По-батькові" -#: mod_vcard.erl:358 mod_vcard.erl:468 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:444 web/ejabberd_web_admin.erl:2004 +#: mod_vcard.erl:364 mod_vcard.erl:474 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:450 web/ejabberd_web_admin.erl:2006 msgid "Name" msgstr "Назва" -#: mod_vcard.erl:358 mod_vcard.erl:476 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:452 +#: mod_vcard.erl:364 mod_vcard.erl:482 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:458 msgid "Organization Name" msgstr "Назва організації" -#: mod_vcard.erl:358 mod_vcard.erl:477 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:453 +#: mod_vcard.erl:364 mod_vcard.erl:483 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:459 msgid "Organization Unit" msgstr "Відділ організації" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "Search users in " msgstr "Пошук користувачів в " -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "You need an x:data capable client to search" msgstr "Для пошуку необхідний клієнт із підтримкою x:data" -#: mod_vcard.erl:383 mod_vcard_ldap.erl:483 mod_vcard_odbc.erl:361 +#: mod_vcard.erl:389 mod_vcard_ldap.erl:487 mod_vcard_odbc.erl:367 msgid "vCard User Search" msgstr "Пошук користувачів по vCard" -#: mod_vcard.erl:439 mod_vcard_ldap.erl:537 mod_vcard_odbc.erl:415 +#: mod_vcard.erl:445 mod_vcard_ldap.erl:541 mod_vcard_odbc.erl:421 msgid "ejabberd vCard module" msgstr "ejabberd vCard модуль" -#: mod_vcard.erl:463 mod_vcard_ldap.erl:547 mod_vcard_odbc.erl:439 +#: mod_vcard.erl:469 mod_vcard_ldap.erl:551 mod_vcard_odbc.erl:445 msgid "Search Results for " msgstr "Результати пошуку в " -#: mod_vcard_ldap.erl:458 +#: mod_vcard_ldap.erl:462 msgid "Fill in fields to search for any matching Jabber User" msgstr "Заповніть поля для пошуку користувача Jabber" @@ -1412,7 +1472,7 @@ msgstr "Показати звичайну таблицю" msgid "Show Integral Table" msgstr "Показати інтегральну таблицю" -#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1937 +#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1939 msgid "Statistics" msgstr "Статистика" @@ -1424,116 +1484,116 @@ msgstr "не знайдено" msgid "Node not found" msgstr "Вузол не знайдено" -#: web/ejabberd_web_admin.erl:1461 +#: web/ejabberd_web_admin.erl:1460 msgid "Host" msgstr "Хост" -#: web/ejabberd_web_admin.erl:1462 +#: web/ejabberd_web_admin.erl:1461 msgid "Registered Users" msgstr "Зареєстровані користувачі" -#: web/ejabberd_web_admin.erl:1574 +#: web/ejabberd_web_admin.erl:1573 msgid "Offline Messages" msgstr "Офлайнові повідомлення" -#: web/ejabberd_web_admin.erl:1575 web/ejabberd_web_admin.erl:1765 +#: web/ejabberd_web_admin.erl:1574 web/ejabberd_web_admin.erl:1767 msgid "Last Activity" msgstr "Останнє підключення" -#: web/ejabberd_web_admin.erl:1657 web/ejabberd_web_admin.erl:1673 +#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 msgid "Registered Users:" msgstr "Зареєстровані користувачі:" -#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 -#: web/ejabberd_web_admin.erl:2191 +#: web/ejabberd_web_admin.erl:1661 web/ejabberd_web_admin.erl:1677 +#: web/ejabberd_web_admin.erl:2192 msgid "Online Users:" msgstr "Підключені користувачі:" -#: web/ejabberd_web_admin.erl:1661 +#: web/ejabberd_web_admin.erl:1663 msgid "Outgoing s2s Connections:" msgstr "Вихідні s2s-з'єднання:" -#: web/ejabberd_web_admin.erl:1663 +#: web/ejabberd_web_admin.erl:1665 msgid "Outgoing s2s Servers:" msgstr "Вихідні s2s-сервери:" -#: web/ejabberd_web_admin.erl:1732 web/mod_register_web.erl:175 +#: web/ejabberd_web_admin.erl:1734 web/mod_register_web.erl:175 #: web/mod_register_web.erl:372 web/mod_register_web.erl:381 #: web/mod_register_web.erl:411 msgid "Change Password" msgstr "Змінити пароль" -#: web/ejabberd_web_admin.erl:1756 +#: web/ejabberd_web_admin.erl:1758 msgid "User " msgstr "Користувач " -#: web/ejabberd_web_admin.erl:1763 +#: web/ejabberd_web_admin.erl:1765 msgid "Connected Resources:" msgstr "Підключені ресурси:" -#: web/ejabberd_web_admin.erl:1764 web/mod_register_web.erl:227 +#: web/ejabberd_web_admin.erl:1766 web/mod_register_web.erl:227 #: web/mod_register_web.erl:519 msgid "Password:" msgstr "Пароль:" -#: web/ejabberd_web_admin.erl:1826 +#: web/ejabberd_web_admin.erl:1828 msgid "No Data" msgstr "Немає даних" -#: web/ejabberd_web_admin.erl:1904 +#: web/ejabberd_web_admin.erl:1906 msgid "Nodes" msgstr "Вузли" -#: web/ejabberd_web_admin.erl:1927 web/ejabberd_web_admin.erl:1949 +#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1951 msgid "Node " msgstr "Вузол " -#: web/ejabberd_web_admin.erl:1936 +#: web/ejabberd_web_admin.erl:1938 msgid "Listened Ports" msgstr "Відкриті порти" -#: web/ejabberd_web_admin.erl:1938 web/ejabberd_web_admin.erl:2259 -#: web/ejabberd_web_admin.erl:2447 +#: web/ejabberd_web_admin.erl:1940 web/ejabberd_web_admin.erl:2260 +#: web/ejabberd_web_admin.erl:2448 msgid "Update" msgstr "Обновити" -#: web/ejabberd_web_admin.erl:1941 web/ejabberd_web_admin.erl:2568 +#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2569 msgid "Restart" msgstr "Перезапустити" -#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2570 +#: web/ejabberd_web_admin.erl:1945 web/ejabberd_web_admin.erl:2571 msgid "Stop" msgstr "Зупинити" -#: web/ejabberd_web_admin.erl:1957 +#: web/ejabberd_web_admin.erl:1959 msgid "RPC Call Error" msgstr "Помилка виклику RPC" -#: web/ejabberd_web_admin.erl:1998 +#: web/ejabberd_web_admin.erl:2000 msgid "Database Tables at " msgstr "Таблиці бази даних на " -#: web/ejabberd_web_admin.erl:2005 +#: web/ejabberd_web_admin.erl:2007 msgid "Storage Type" msgstr "Тип таблиці" -#: web/ejabberd_web_admin.erl:2006 +#: web/ejabberd_web_admin.erl:2008 msgid "Elements" msgstr "Елементи" -#: web/ejabberd_web_admin.erl:2007 +#: web/ejabberd_web_admin.erl:2009 msgid "Memory" msgstr "Пам'ять" -#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2032 web/ejabberd_web_admin.erl:2137 msgid "Error" msgstr "Помилка" -#: web/ejabberd_web_admin.erl:2033 +#: web/ejabberd_web_admin.erl:2034 msgid "Backup of " msgstr "Резервне копіювання " -#: web/ejabberd_web_admin.erl:2035 +#: web/ejabberd_web_admin.erl:2036 msgid "" "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 " @@ -1544,142 +1604,142 @@ msgstr "" "(наприклад за допомогою модуля ODBC), то його резервне копіювання потрібно " "робити окремо." -#: web/ejabberd_web_admin.erl:2040 +#: web/ejabberd_web_admin.erl:2041 msgid "Store binary backup:" msgstr "Зберегти бінарну резервну копію:" -#: web/ejabberd_web_admin.erl:2044 web/ejabberd_web_admin.erl:2051 -#: web/ejabberd_web_admin.erl:2059 web/ejabberd_web_admin.erl:2066 -#: web/ejabberd_web_admin.erl:2073 web/ejabberd_web_admin.erl:2080 -#: web/ejabberd_web_admin.erl:2087 web/ejabberd_web_admin.erl:2095 -#: web/ejabberd_web_admin.erl:2102 web/ejabberd_web_admin.erl:2109 +#: web/ejabberd_web_admin.erl:2045 web/ejabberd_web_admin.erl:2052 +#: web/ejabberd_web_admin.erl:2060 web/ejabberd_web_admin.erl:2067 +#: web/ejabberd_web_admin.erl:2074 web/ejabberd_web_admin.erl:2081 +#: web/ejabberd_web_admin.erl:2088 web/ejabberd_web_admin.erl:2096 +#: web/ejabberd_web_admin.erl:2103 web/ejabberd_web_admin.erl:2110 msgid "OK" msgstr "Продовжити" -#: web/ejabberd_web_admin.erl:2047 +#: web/ejabberd_web_admin.erl:2048 msgid "Restore binary backup immediately:" msgstr "Відновити з бінарної резервної копії негайно:" -#: web/ejabberd_web_admin.erl:2055 +#: web/ejabberd_web_admin.erl:2056 msgid "" "Restore binary backup after next ejabberd restart (requires less memory):" msgstr "" "Відновити з бінарної резервної копії при наступному запуску (потребує менше " "пам'яті):" -#: web/ejabberd_web_admin.erl:2062 +#: web/ejabberd_web_admin.erl:2063 msgid "Store plain text backup:" msgstr "Зберегти текстову резервну копію:" -#: web/ejabberd_web_admin.erl:2069 +#: web/ejabberd_web_admin.erl:2070 msgid "Restore plain text backup immediately:" msgstr "Відновити з текстової резервної копії негайно:" -#: web/ejabberd_web_admin.erl:2076 +#: web/ejabberd_web_admin.erl:2077 msgid "Import users data from a PIEFXIS file (XEP-0227):" msgstr "Імпорт даних користовучів з файлу PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2083 +#: web/ejabberd_web_admin.erl:2084 msgid "Export data of all users in the server to PIEFXIS files (XEP-0227):" msgstr "Експорт даних всіх користувачів сервера до файлу PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2090 +#: web/ejabberd_web_admin.erl:2091 msgid "Export data of users in a host to PIEFXIS files (XEP-0227):" msgstr "Експорт даних користувачів домена до файлу PIEFXIS (XEP-0227):" -#: web/ejabberd_web_admin.erl:2098 +#: web/ejabberd_web_admin.erl:2099 msgid "Import user data from jabberd14 spool file:" msgstr "Імпорт користувачів з файла спула jabberd14:" -#: web/ejabberd_web_admin.erl:2105 +#: web/ejabberd_web_admin.erl:2106 msgid "Import users data from jabberd14 spool directory:" msgstr "Імпорт користувачів з діректорії спула jabberd14:" -#: web/ejabberd_web_admin.erl:2131 +#: web/ejabberd_web_admin.erl:2132 msgid "Listened Ports at " msgstr "Відкриті порти на " -#: web/ejabberd_web_admin.erl:2156 +#: web/ejabberd_web_admin.erl:2157 msgid "Modules at " msgstr "Модулі на " -#: web/ejabberd_web_admin.erl:2182 +#: web/ejabberd_web_admin.erl:2183 msgid "Statistics of ~p" msgstr "Статистика вузла ~p" -#: web/ejabberd_web_admin.erl:2185 +#: web/ejabberd_web_admin.erl:2186 msgid "Uptime:" msgstr "Час роботи:" -#: web/ejabberd_web_admin.erl:2188 +#: web/ejabberd_web_admin.erl:2189 msgid "CPU Time:" msgstr "Процесорний час:" -#: web/ejabberd_web_admin.erl:2194 +#: web/ejabberd_web_admin.erl:2195 msgid "Transactions Committed:" msgstr "Транзакції завершені:" -#: web/ejabberd_web_admin.erl:2197 +#: web/ejabberd_web_admin.erl:2198 msgid "Transactions Aborted:" msgstr "Транзакції відмінені:" -#: web/ejabberd_web_admin.erl:2200 +#: web/ejabberd_web_admin.erl:2201 msgid "Transactions Restarted:" msgstr "Транзакції перезапущені:" -#: web/ejabberd_web_admin.erl:2203 +#: web/ejabberd_web_admin.erl:2204 msgid "Transactions Logged:" msgstr "Транзакції запротокольовані:" -#: web/ejabberd_web_admin.erl:2245 +#: web/ejabberd_web_admin.erl:2246 msgid "Update " msgstr "Поновлення " -#: web/ejabberd_web_admin.erl:2253 +#: web/ejabberd_web_admin.erl:2254 msgid "Update plan" msgstr "План поновлення" -#: web/ejabberd_web_admin.erl:2254 +#: web/ejabberd_web_admin.erl:2255 msgid "Modified modules" msgstr "Змінені модулі" -#: web/ejabberd_web_admin.erl:2255 +#: web/ejabberd_web_admin.erl:2256 msgid "Update script" msgstr "Сценарій поновлення" -#: web/ejabberd_web_admin.erl:2256 +#: web/ejabberd_web_admin.erl:2257 msgid "Low level update script" msgstr "Низькорівневий сценарій поновлення" -#: web/ejabberd_web_admin.erl:2257 +#: web/ejabberd_web_admin.erl:2258 msgid "Script check" msgstr "Перевірка сценарію" -#: web/ejabberd_web_admin.erl:2425 +#: web/ejabberd_web_admin.erl:2426 msgid "Port" msgstr "Порт" -#: web/ejabberd_web_admin.erl:2426 +#: web/ejabberd_web_admin.erl:2427 msgid "IP" msgstr "IP" -#: web/ejabberd_web_admin.erl:2427 +#: web/ejabberd_web_admin.erl:2428 msgid "Protocol" msgstr "Протокол" -#: web/ejabberd_web_admin.erl:2428 web/ejabberd_web_admin.erl:2555 +#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 msgid "Module" msgstr "Модуль" -#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 +#: web/ejabberd_web_admin.erl:2430 web/ejabberd_web_admin.erl:2557 msgid "Options" msgstr "Параметри" -#: web/ejabberd_web_admin.erl:2449 +#: web/ejabberd_web_admin.erl:2450 msgid "Delete" msgstr "Видалити" -#: web/ejabberd_web_admin.erl:2578 +#: web/ejabberd_web_admin.erl:2579 msgid "Start" msgstr "Запустити" diff --git a/src/msgs/vi.po b/src/msgs/vi.po index 514882349..4c3492148 100644 --- a/src/msgs/vi.po +++ b/src/msgs/vi.po @@ -15,11 +15,11 @@ msgstr "Yêu cầu sử dụng STARTTLS" msgid "No resource provided" msgstr "Không có nguồn lực cung cấp" -#: ejabberd_c2s.erl:1149 +#: ejabberd_c2s.erl:1197 msgid "Replaced by new connection" msgstr "Được thay thế bởi kết nối mới" -#: ejabberd_c2s.erl:1837 +#: ejabberd_c2s.erl:1885 msgid "Your active privacy list has denied the routing of this stanza." msgstr "" @@ -41,7 +41,7 @@ msgid "CAPTCHA web page" msgstr "" #: ejabberd_captcha.erl:307 -msgid "The captcha is valid." +msgid "The CAPTCHA is valid." msgstr "" #: mod_adhoc.erl:95 mod_adhoc.erl:125 mod_adhoc.erl:143 mod_adhoc.erl:161 @@ -56,66 +56,69 @@ msgstr "Ping" msgid "Pong" msgstr "Pong" -#: mod_announce.erl:506 +#: mod_announce.erl:507 mod_announce_odbc.erl:499 msgid "Really delete message of the day?" msgstr "Có thực sự xóa thư trong ngày này không?" -#: mod_announce.erl:514 mod_configure.erl:1083 mod_configure.erl:1128 +#: mod_announce.erl:515 mod_announce_odbc.erl:507 mod_configure.erl:1083 +#: mod_configure.erl:1128 msgid "Subject" msgstr "Tiêu đề" -#: mod_announce.erl:519 mod_configure.erl:1088 mod_configure.erl:1133 +#: mod_announce.erl:520 mod_announce_odbc.erl:512 mod_configure.erl:1088 +#: mod_configure.erl:1133 msgid "Message body" msgstr "Thân thư" -#: mod_announce.erl:599 +#: mod_announce.erl:600 mod_announce_odbc.erl:592 msgid "No body provided for announce message" msgstr "Không có nội dung trong thư thông báo" -#: mod_announce.erl:634 +#: mod_announce.erl:635 mod_announce_odbc.erl:627 msgid "Announcements" msgstr "Thông báo" -#: mod_announce.erl:636 +#: mod_announce.erl:637 mod_announce_odbc.erl:629 msgid "Send announcement to all users" msgstr "Gửi thông báo đến tất cả người sử dụng" -#: mod_announce.erl:638 +#: mod_announce.erl:639 mod_announce_odbc.erl:631 msgid "Send announcement to all users on all hosts" msgstr "Gửi thông báo đến tất cả người sử dụng trên tất cả các máy chủ" -#: mod_announce.erl:640 +#: mod_announce.erl:641 mod_announce_odbc.erl:633 msgid "Send announcement to all online users" msgstr "Gửi thông báo đến tất cả người sử dụng trực tuyến" -#: mod_announce.erl:642 mod_configure.erl:1078 mod_configure.erl:1123 +#: mod_announce.erl:643 mod_announce_odbc.erl:635 mod_configure.erl:1078 +#: mod_configure.erl:1123 msgid "Send announcement to all online users on all hosts" msgstr "" "Gửi thông báo đến tất cả người sử dụng trực tuyến trên tất cả các máy chủ" -#: mod_announce.erl:644 +#: mod_announce.erl:645 mod_announce_odbc.erl:637 msgid "Set message of the day and send to online users" msgstr "Tạo lập thư trong ngày và gửi đến những người sử dụng trực tuyến" -#: mod_announce.erl:646 +#: mod_announce.erl:647 mod_announce_odbc.erl:639 msgid "Set message of the day on all hosts and send to online users" msgstr "" "Tạo lập thư trong ngày trên tất cả các máy chủ và gửi đến những người sử " "dụng trực tuyến" -#: mod_announce.erl:648 +#: mod_announce.erl:649 mod_announce_odbc.erl:641 msgid "Update message of the day (don't send)" msgstr "Cập nhật thư trong ngày (không gửi)" -#: mod_announce.erl:650 +#: mod_announce.erl:651 mod_announce_odbc.erl:643 msgid "Update message of the day on all hosts (don't send)" msgstr "Cập nhật thư trong ngày trên tất cả các máy chủ (không gửi)" -#: mod_announce.erl:652 +#: mod_announce.erl:653 mod_announce_odbc.erl:645 msgid "Delete message of the day" msgstr "Xóa thư trong ngày" -#: mod_announce.erl:654 +#: mod_announce.erl:655 mod_announce_odbc.erl:647 msgid "Delete message of the day on all hosts" msgstr "Xóa thư trong ngày trên tất cả các máy chủ" @@ -124,7 +127,7 @@ msgstr "Xóa thư trong ngày trên tất cả các máy chủ" msgid "Configuration" msgstr "Cấu hình" -#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1934 +#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1936 msgid "Database" msgstr "Cơ sở dữ liệu" @@ -136,7 +139,7 @@ msgstr "Môđun Khởi Động" msgid "Stop Modules" msgstr "Môđun Dừng" -#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1935 +#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1937 msgid "Backup" msgstr "Sao lưu dự phòng" @@ -165,7 +168,7 @@ msgid "Shut Down Service" msgstr "Tắt Dịch Vụ" #: mod_configure.erl:145 mod_configure.erl:518 mod_configure.erl:1197 -#: web/ejabberd_web_admin.erl:1528 +#: web/ejabberd_web_admin.erl:1527 msgid "Add User" msgstr "Thêm Người Sử Dụng" @@ -217,7 +220,7 @@ msgid "User Management" msgstr "Quản Lý Người Sử Dụng" #: mod_configure.erl:500 web/ejabberd_web_admin.erl:1058 -#: web/ejabberd_web_admin.erl:1463 +#: web/ejabberd_web_admin.erl:1462 msgid "Online Users" msgstr "Người Sử Dụng Trực Tuyến" @@ -229,15 +232,15 @@ msgstr "Tất Cả Người Sử Dụng" msgid "Outgoing s2s Connections" msgstr "Kết Nối Bên Ngoài s2s" -#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1905 +#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1907 msgid "Running Nodes" msgstr "Nút Hoạt Động" -#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1907 +#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1909 msgid "Stopped Nodes" msgstr "Nút Dừng" -#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1951 +#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1953 msgid "Modules" msgstr "Môđun" @@ -368,15 +371,15 @@ msgstr "Quy tắc Truy Cập" #: mod_configure.erl:1200 mod_configure.erl:1222 mod_configure.erl:1234 #: mod_configure.erl:1246 mod_configure.erl:1258 mod_configure.erl:1275 -#: mod_configure.erl:1287 mod_configure.erl:1652 mod_configure.erl:1702 -#: mod_configure.erl:1723 mod_roster.erl:943 mod_roster_odbc.erl:1048 -#: mod_vcard.erl:466 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:442 +#: mod_configure.erl:1287 mod_configure.erl:1650 mod_configure.erl:1700 +#: mod_configure.erl:1721 mod_roster.erl:943 mod_roster_odbc.erl:1060 +#: mod_vcard.erl:472 mod_vcard_ldap.erl:554 mod_vcard_odbc.erl:448 msgid "Jabber ID" msgstr "Jabber ID" -#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1653 -#: mod_configure.erl:1865 mod_muc/mod_muc_room.erl:2970 mod_register.erl:235 -#: web/ejabberd_web_admin.erl:1521 +#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1651 +#: mod_configure.erl:1863 mod_muc/mod_muc_room.erl:3224 mod_register.erl:235 +#: web/ejabberd_web_admin.erl:1520 msgid "Password" msgstr "Mật Khẩu" @@ -392,71 +395,72 @@ msgstr "Số người sử dụng đã đăng ký" msgid "Number of online users" msgstr "Số người sử dụng trực tuyến" -#: mod_configure.erl:1684 web/ejabberd_web_admin.erl:1589 -#: web/ejabberd_web_admin.erl:1741 +#: mod_configure.erl:1682 web/ejabberd_web_admin.erl:1588 +#: web/ejabberd_web_admin.erl:1743 msgid "Never" msgstr "Không bao giờ" -#: mod_configure.erl:1698 web/ejabberd_web_admin.erl:1602 -#: web/ejabberd_web_admin.erl:1754 +#: mod_configure.erl:1696 web/ejabberd_web_admin.erl:1601 +#: web/ejabberd_web_admin.erl:1756 msgid "Online" msgstr "Trực tuyến" -#: mod_configure.erl:1703 +#: mod_configure.erl:1701 msgid "Last login" msgstr "Đăng nhập lần cuối" -#: mod_configure.erl:1724 +#: mod_configure.erl:1722 msgid "Roster size" msgstr "Kích thước bảng phân công" -#: mod_configure.erl:1725 +#: mod_configure.erl:1723 msgid "IP addresses" msgstr "Địa chỉ IP" -#: mod_configure.erl:1726 +#: mod_configure.erl:1724 msgid "Resources" msgstr "Nguồn tài nguyên" -#: mod_configure.erl:1852 +#: mod_configure.erl:1850 msgid "Administration of " msgstr "Quản trị về " -#: mod_configure.erl:1855 +#: mod_configure.erl:1853 msgid "Action on user" msgstr "Hành động đối với người sử dụng" -#: mod_configure.erl:1859 +#: mod_configure.erl:1857 msgid "Edit Properties" msgstr "Chỉnh Sửa Thuộc Tính" -#: mod_configure.erl:1862 web/ejabberd_web_admin.erl:1767 +#: mod_configure.erl:1860 web/ejabberd_web_admin.erl:1769 msgid "Remove User" msgstr "Gỡ Bỏ Người Sử Dụng" -#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:336 +#: mod_irc/mod_irc.erl:201 mod_irc/mod_irc_odbc.erl:196 +#: mod_muc/mod_muc.erl:336 mod_muc/mod_muc_odbc.erl:342 msgid "Access denied by service policy" msgstr "Sự truy cập bị chặn theo chính sách phục vụ" -#: mod_irc/mod_irc.erl:400 +#: mod_irc/mod_irc.erl:401 mod_irc/mod_irc_odbc.erl:398 msgid "IRC Transport" msgstr "Truyền tải IRC" -#: mod_irc/mod_irc.erl:427 +#: mod_irc/mod_irc.erl:428 mod_irc/mod_irc_odbc.erl:425 msgid "ejabberd IRC module" msgstr "Môdun ejabberd IRC Bản quyền" -#: mod_irc/mod_irc.erl:558 +#: mod_irc/mod_irc.erl:559 mod_irc/mod_irc_odbc.erl:568 msgid "You need an x:data capable client to configure mod_irc settings" msgstr "" "Bạn cần có một trình ứng dụng khách hỗ trợ định dạng dữ liệu x: để xác định " "các thiết lập mod_irc" -#: mod_irc/mod_irc.erl:565 +#: mod_irc/mod_irc.erl:566 mod_irc/mod_irc_odbc.erl:575 msgid "Registration in mod_irc for " msgstr "Đăng ký trong mod_irc cho " -#: mod_irc/mod_irc.erl:570 +#: mod_irc/mod_irc.erl:571 mod_irc/mod_irc_odbc.erl:580 #, fuzzy msgid "" "Enter username, encodings, ports and passwords you wish to use for " @@ -465,11 +469,11 @@ msgstr "" "Nhập tên truy cập và mã hóa mà bạn muốn sử dụng khi kết nối với các máy chủ " "IRC" -#: mod_irc/mod_irc.erl:575 +#: mod_irc/mod_irc.erl:576 mod_irc/mod_irc_odbc.erl:585 msgid "IRC Username" msgstr "Tên truy cập IRC" -#: mod_irc/mod_irc.erl:585 +#: mod_irc/mod_irc.erl:586 mod_irc/mod_irc_odbc.erl:595 #, fuzzy msgid "" "If you want to specify different ports, passwords, encodings for IRC " @@ -481,7 +485,7 @@ msgstr "" "hãy điền vào danh sách này những giá trị theo định dạng '{\"máy chủ irc\", " "\"mã hóa\"}'. Dịch vụ này mặc định sử dụng định dạng mã hóa \"~s\"." -#: mod_irc/mod_irc.erl:597 +#: mod_irc/mod_irc.erl:598 mod_irc/mod_irc_odbc.erl:607 #, fuzzy msgid "" "Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." @@ -490,36 +494,37 @@ msgstr "" "Ví dụ: [{\"irc.lucky.net\", \"koi8-r\"}, {\"vendetta.fef.net\", " "\"iso8859-1\"}]" -#: mod_irc/mod_irc.erl:602 +#: mod_irc/mod_irc.erl:603 mod_irc/mod_irc_odbc.erl:612 msgid "Connections parameters" msgstr "" -#: mod_irc/mod_irc.erl:727 +#: mod_irc/mod_irc.erl:728 mod_irc/mod_irc_odbc.erl:757 msgid "Join IRC channel" msgstr "" -#: mod_irc/mod_irc.erl:731 +#: mod_irc/mod_irc.erl:732 mod_irc/mod_irc_odbc.erl:761 msgid "IRC channel (don't put the first #)" msgstr "" -#: mod_irc/mod_irc.erl:736 +#: mod_irc/mod_irc.erl:737 mod_irc/mod_irc_odbc.erl:766 #, fuzzy msgid "IRC server" msgstr "Tên truy cập IRC" -#: mod_irc/mod_irc.erl:769 mod_irc/mod_irc.erl:773 +#: mod_irc/mod_irc.erl:770 mod_irc/mod_irc.erl:774 +#: mod_irc/mod_irc_odbc.erl:799 mod_irc/mod_irc_odbc.erl:803 msgid "Join the IRC channel here." msgstr "" -#: mod_irc/mod_irc.erl:777 +#: mod_irc/mod_irc.erl:778 mod_irc/mod_irc_odbc.erl:807 msgid "Join the IRC channel in this Jabber ID: ~s" msgstr "" -#: mod_irc/mod_irc.erl:862 +#: mod_irc/mod_irc.erl:863 mod_irc/mod_irc_odbc.erl:904 msgid "IRC settings" msgstr "" -#: mod_irc/mod_irc.erl:867 +#: mod_irc/mod_irc.erl:868 mod_irc/mod_irc_odbc.erl:909 #, fuzzy msgid "" "Enter username and encodings you wish to use for connecting to IRC servers. " @@ -529,77 +534,78 @@ msgstr "" "Nhập tên truy cập và mã hóa mà bạn muốn sử dụng khi kết nối với các máy chủ " "IRC" -#: mod_irc/mod_irc.erl:873 +#: mod_irc/mod_irc.erl:874 mod_irc/mod_irc_odbc.erl:915 #, fuzzy msgid "IRC username" msgstr "Tên truy cập IRC" -#: mod_irc/mod_irc.erl:922 +#: mod_irc/mod_irc.erl:923 mod_irc/mod_irc_odbc.erl:964 #, fuzzy msgid "Password ~b" msgstr "Mật Khẩu" -#: mod_irc/mod_irc.erl:927 +#: mod_irc/mod_irc.erl:928 mod_irc/mod_irc_odbc.erl:969 #, fuzzy msgid "Port ~b" msgstr "Cổng" -#: mod_irc/mod_irc.erl:932 +#: mod_irc/mod_irc.erl:933 mod_irc/mod_irc_odbc.erl:974 msgid "Encoding for server ~b" msgstr "" -#: mod_irc/mod_irc.erl:941 +#: mod_irc/mod_irc.erl:942 mod_irc/mod_irc_odbc.erl:983 msgid "Server ~b" msgstr "" -#: mod_muc/mod_muc.erl:449 +#: mod_muc/mod_muc.erl:449 mod_muc/mod_muc_odbc.erl:456 msgid "Only service administrators are allowed to send service messages" msgstr "Chỉ có người quản trị dịch vụ mới được phép gửi những thư dịch vụ" -#: mod_muc/mod_muc.erl:493 +#: mod_muc/mod_muc.erl:493 mod_muc/mod_muc_odbc.erl:500 msgid "Room creation is denied by service policy" msgstr "Việc tạo phòng bị ngăn lại theo chính sách dịch vụ" -#: mod_muc/mod_muc.erl:500 +#: mod_muc/mod_muc.erl:500 mod_muc/mod_muc_odbc.erl:507 msgid "Conference room does not exist" msgstr "Phòng họp không tồn tại" -#: mod_muc/mod_muc.erl:581 +#: mod_muc/mod_muc.erl:582 mod_muc/mod_muc_odbc.erl:595 msgid "Chatrooms" msgstr "Phòng trò chuyện" -#: mod_muc/mod_muc.erl:711 +#: mod_muc/mod_muc.erl:712 mod_muc/mod_muc_odbc.erl:729 #, fuzzy msgid "You need a client that supports x:data to register the nickname" msgstr "" "Bạn cần có một trình ứng dụng khách hỗ trợ định dạng dữ liệu x: để đăng ký " "bí danh" -#: mod_muc/mod_muc.erl:717 +#: mod_muc/mod_muc.erl:718 mod_muc/mod_muc_odbc.erl:735 msgid "Nickname Registration at " msgstr "Đăng Ký Bí Danh tại" -#: mod_muc/mod_muc.erl:721 +#: mod_muc/mod_muc.erl:722 mod_muc/mod_muc_odbc.erl:739 msgid "Enter nickname you want to register" msgstr "Nhập bí danh bạn muốn đăng ký" -#: mod_muc/mod_muc.erl:722 mod_roster.erl:944 mod_roster_odbc.erl:1049 -#: mod_vcard.erl:358 mod_vcard.erl:471 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:447 +#: mod_muc/mod_muc.erl:723 mod_muc/mod_muc_odbc.erl:740 +#: mod_muc/mod_muc_room.erl:3810 mod_roster.erl:944 mod_roster_odbc.erl:1061 +#: mod_vcard.erl:364 mod_vcard.erl:477 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:453 msgid "Nickname" msgstr "Bí danh" -#: mod_muc/mod_muc.erl:761 mod_muc/mod_muc_room.erl:933 -#: mod_muc/mod_muc_room.erl:1577 +#: mod_muc/mod_muc.erl:762 mod_muc/mod_muc_odbc.erl:784 +#: mod_muc/mod_muc_room.erl:1064 mod_muc/mod_muc_room.erl:1787 #, fuzzy msgid "That nickname is registered by another person" msgstr "Một người khác đã đăng ký bí danh này rồi" -#: mod_muc/mod_muc.erl:787 +#: mod_muc/mod_muc.erl:788 mod_muc/mod_muc_odbc.erl:811 msgid "You must fill in field \"Nickname\" in the form" msgstr "Bạn phải điền thông tin vào ô \"Nickname\" trong biểu mẫu này" -#: mod_muc/mod_muc.erl:807 +#: mod_muc/mod_muc.erl:808 mod_muc/mod_muc_odbc.erl:831 msgid "ejabberd MUC module" msgstr "Môdun ejabberd MUC Bản quyền" @@ -639,8 +645,8 @@ msgstr "" msgid "is now known as" msgstr "bây giờ được biết như" -#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:689 -#: mod_muc/mod_muc_room.erl:2138 +#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:688 +#: mod_muc/mod_muc_room.erl:2393 msgid " has set the subject to: " msgstr " đã đặt chủ đề thành: " @@ -740,67 +746,83 @@ msgstr "Tháng Mười Một" msgid "December" msgstr "Tháng Mười Hai" -#: mod_muc/mod_muc_log.erl:751 +#: mod_muc/mod_muc_log.erl:750 msgid "Room Configuration" msgstr "Cấu Hình Phòng" -#: mod_muc/mod_muc_log.erl:760 +#: mod_muc/mod_muc_log.erl:759 #, fuzzy msgid "Room Occupants" msgstr "Số người tham dự" -#: mod_muc/mod_muc_room.erl:170 +#: mod_muc/mod_muc_room.erl:174 msgid "Traffic rate limit is exceeded" msgstr "Quá giới hạn tỷ lệ lưu lượng truyền tải" -#: mod_muc/mod_muc_room.erl:242 +#: mod_muc/mod_muc_room.erl:246 msgid "" "This participant is kicked from the room because he sent an error message" msgstr "" -#: mod_muc/mod_muc_room.erl:251 +#: mod_muc/mod_muc_room.erl:255 msgid "It is not allowed to send private messages to the conference" msgstr "Không được phép gửi những thư riêng đến phòng họp" -#: mod_muc/mod_muc_room.erl:296 +#: mod_muc/mod_muc_room.erl:332 +msgid "Please, wait for a while before sending new voice request" +msgstr "" + +#: mod_muc/mod_muc_room.erl:347 +msgid "Voice requests are disabled in this conference" +msgstr "" + +#: mod_muc/mod_muc_room.erl:364 +msgid "Failed to extract JID from your voice request approval" +msgstr "" + +#: mod_muc/mod_muc_room.erl:393 +msgid "Only moderators can approve voice requests" +msgstr "" + +#: mod_muc/mod_muc_room.erl:408 msgid "Improper message type" msgstr "Loại thư không phù hợp" -#: mod_muc/mod_muc_room.erl:406 +#: mod_muc/mod_muc_room.erl:518 msgid "" "This participant is kicked from the room because he sent an error message to " "another participant" msgstr "" -#: mod_muc/mod_muc_room.erl:419 +#: mod_muc/mod_muc_room.erl:531 msgid "It is not allowed to send private messages of type \"groupchat\"" msgstr "Không được phép gửi những thư riêng loại \"groupchat\"" -#: mod_muc/mod_muc_room.erl:431 mod_muc/mod_muc_room.erl:486 +#: mod_muc/mod_muc_room.erl:543 mod_muc/mod_muc_room.erl:611 msgid "Recipient is not in the conference room" msgstr "Người nhận không có trong phòng họp" -#: mod_muc/mod_muc_room.erl:451 mod_muc/mod_muc_room.erl:829 -#: mod_muc/mod_muc_room.erl:3609 -msgid "Only occupants are allowed to send messages to the conference" -msgstr "Chỉ có những đối tượng tham gia mới được phép gửi thư đến phòng họp" - -#: mod_muc/mod_muc_room.erl:460 +#: mod_muc/mod_muc_room.erl:564 mod_muc/mod_muc_room.erl:585 #, fuzzy msgid "It is not allowed to send private messages" msgstr "Không được phép gửi những thư riêng đến phòng họp" -#: mod_muc/mod_muc_room.erl:509 +#: mod_muc/mod_muc_room.erl:576 mod_muc/mod_muc_room.erl:956 +#: mod_muc/mod_muc_room.erl:4040 +msgid "Only occupants are allowed to send messages to the conference" +msgstr "Chỉ có những đối tượng tham gia mới được phép gửi thư đến phòng họp" + +#: mod_muc/mod_muc_room.erl:634 msgid "Only occupants are allowed to send queries to the conference" msgstr "" "Chỉ có những đối tượng tham gia mới được phép gửi yêu cầu đến phòng họp" -#: mod_muc/mod_muc_room.erl:521 +#: mod_muc/mod_muc_room.erl:646 msgid "Queries to the conference members are not allowed in this room" msgstr "" "Không được phép gửi các yêu cầu gửi đến các thành viên trong phòng họp này" -#: mod_muc/mod_muc_room.erl:805 +#: mod_muc/mod_muc_room.erl:932 #, fuzzy msgid "" "Only moderators and participants are allowed to change the subject in this " @@ -809,210 +831,245 @@ msgstr "" "Chỉ có những người điều phối và những người tham gia được phép thay đổi chủ " "đề trong phòng này" -#: mod_muc/mod_muc_room.erl:810 +#: mod_muc/mod_muc_room.erl:937 #, fuzzy msgid "Only moderators are allowed to change the subject in this room" msgstr "Chỉ có những người điều phối được phép thay đổi chủ đề trong phòng này" -#: mod_muc/mod_muc_room.erl:820 +#: mod_muc/mod_muc_room.erl:947 msgid "Visitors are not allowed to send messages to all occupants" msgstr "Người ghé thăm không được phép gửi thư đến tất cả các người tham dự" -#: mod_muc/mod_muc_room.erl:891 +#: mod_muc/mod_muc_room.erl:1021 msgid "" "This participant is kicked from the room because he sent an error presence" msgstr "" -#: mod_muc/mod_muc_room.erl:909 +#: mod_muc/mod_muc_room.erl:1040 #, fuzzy msgid "Visitors are not allowed to change their nicknames in this room" msgstr "Chỉ có những người điều phối được phép thay đổi chủ đề trong phòng này" -#: mod_muc/mod_muc_room.erl:922 mod_muc/mod_muc_room.erl:1569 +#: mod_muc/mod_muc_room.erl:1053 mod_muc/mod_muc_room.erl:1779 #, fuzzy msgid "That nickname is already in use by another occupant" msgstr "Bí danh đang do một người tham dự khác sử dụng" -#: mod_muc/mod_muc_room.erl:1558 +#: mod_muc/mod_muc_room.erl:1768 msgid "You have been banned from this room" msgstr "Bạn bị cấm tham gia phòng này" -#: mod_muc/mod_muc_room.erl:1561 +#: mod_muc/mod_muc_room.erl:1771 #, fuzzy msgid "Membership is required to enter this room" msgstr "Yêu cầu tư cách thành viên khi tham gia vào phòng này" -#: mod_muc/mod_muc_room.erl:1597 +#: mod_muc/mod_muc_room.erl:1807 msgid "This room is not anonymous" msgstr "Phòng này không nặc danh" -#: mod_muc/mod_muc_room.erl:1623 +#: mod_muc/mod_muc_room.erl:1833 #, fuzzy msgid "A password is required to enter this room" msgstr "Yêu cầu nhập mật khẩu để vào phòng này" -#: mod_muc/mod_muc_room.erl:1645 mod_register.erl:246 +#: mod_muc/mod_muc_room.erl:1855 mod_register.erl:246 msgid "Too many CAPTCHA requests" msgstr "" -#: mod_muc/mod_muc_room.erl:1654 -msgid "Unable to generate a captcha" +#: mod_muc/mod_muc_room.erl:1864 mod_register.erl:251 +msgid "Unable to generate a CAPTCHA" msgstr "" -#: mod_muc/mod_muc_room.erl:1664 +#: mod_muc/mod_muc_room.erl:1874 msgid "Incorrect password" msgstr "Mật khẩu sai" -#: mod_muc/mod_muc_room.erl:2193 +#: mod_muc/mod_muc_room.erl:2448 msgid "Administrator privileges required" msgstr "Yêu cầu đặc quyền của nhà quản trị" -#: mod_muc/mod_muc_room.erl:2208 +#: mod_muc/mod_muc_room.erl:2463 msgid "Moderator privileges required" msgstr "Yêu cầu đặc quyền của nhà điều phối" -#: mod_muc/mod_muc_room.erl:2363 +#: mod_muc/mod_muc_room.erl:2619 msgid "Jabber ID ~s is invalid" msgstr "Jabber ID ~s không hợp lệ" -#: mod_muc/mod_muc_room.erl:2377 +#: mod_muc/mod_muc_room.erl:2633 msgid "Nickname ~s does not exist in the room" msgstr "Bí danh ~s không tồn tại trong phòng này" -#: mod_muc/mod_muc_room.erl:2403 mod_muc/mod_muc_room.erl:2797 +#: mod_muc/mod_muc_room.erl:2659 mod_muc/mod_muc_room.erl:3049 msgid "Invalid affiliation: ~s" msgstr "Tư cách không hợp lệ: ~s" -#: mod_muc/mod_muc_room.erl:2460 +#: mod_muc/mod_muc_room.erl:2713 msgid "Invalid role: ~s" msgstr "Vai trò không hợp lệ: ~s" -#: mod_muc/mod_muc_room.erl:2774 mod_muc/mod_muc_room.erl:2810 +#: mod_muc/mod_muc_room.erl:3026 mod_muc/mod_muc_room.erl:3062 msgid "Owner privileges required" msgstr "Yêu cầu đặc quyền của người sở hữu" -#: mod_muc/mod_muc_room.erl:2941 +#: mod_muc/mod_muc_room.erl:3195 #, fuzzy msgid "Configuration of room ~s" msgstr "Cấu hình cho " -#: mod_muc/mod_muc_room.erl:2946 +#: mod_muc/mod_muc_room.erl:3200 msgid "Room title" msgstr "Tên phòng" -#: mod_muc/mod_muc_room.erl:2949 mod_muc/mod_muc_room.erl:3388 +#: mod_muc/mod_muc_room.erl:3203 mod_muc/mod_muc_room.erl:3692 #, fuzzy msgid "Room description" msgstr "Miêu tả:" -#: mod_muc/mod_muc_room.erl:2956 +#: mod_muc/mod_muc_room.erl:3210 msgid "Make room persistent" msgstr "Tạo phòng bền vững" -#: mod_muc/mod_muc_room.erl:2961 +#: mod_muc/mod_muc_room.erl:3215 msgid "Make room public searchable" msgstr "Tạo phòng có thể tìm kiếm công khai" -#: mod_muc/mod_muc_room.erl:2964 +#: mod_muc/mod_muc_room.erl:3218 msgid "Make participants list public" msgstr "Tạo danh sách người tham dự công khai" -#: mod_muc/mod_muc_room.erl:2967 +#: mod_muc/mod_muc_room.erl:3221 msgid "Make room password protected" msgstr "Tạo phòng được bảo vệ bằng mật khẩu" -#: mod_muc/mod_muc_room.erl:2978 +#: mod_muc/mod_muc_room.erl:3232 msgid "Maximum Number of Occupants" msgstr "Số Lượng Người Tham Dự Tối Đa" -#: mod_muc/mod_muc_room.erl:2985 +#: mod_muc/mod_muc_room.erl:3239 msgid "No limit" msgstr "Không giới hạn" -#: mod_muc/mod_muc_room.erl:2996 +#: mod_muc/mod_muc_room.erl:3250 msgid "Present real Jabber IDs to" msgstr "Jabber ID thực tế hiện hành đến" -#: mod_muc/mod_muc_room.erl:3004 +#: mod_muc/mod_muc_room.erl:3258 mod_muc/mod_muc_room.erl:3292 msgid "moderators only" msgstr "nhà điều phối duy nhất" -#: mod_muc/mod_muc_room.erl:3006 +#: mod_muc/mod_muc_room.erl:3260 mod_muc/mod_muc_room.erl:3294 msgid "anyone" msgstr "bất kỳ ai" -#: mod_muc/mod_muc_room.erl:3008 +#: mod_muc/mod_muc_room.erl:3262 msgid "Make room members-only" msgstr "Tạo phòng chỉ cho phép tư cách thành viên tham gia" -#: mod_muc/mod_muc_room.erl:3011 +#: mod_muc/mod_muc_room.erl:3265 #, fuzzy msgid "Make room moderated" msgstr "Tạo phòng bền vững" -#: mod_muc/mod_muc_room.erl:3014 +#: mod_muc/mod_muc_room.erl:3268 msgid "Default users as participants" msgstr "Người sử dụng mặc định là người tham dự" -#: mod_muc/mod_muc_room.erl:3017 +#: mod_muc/mod_muc_room.erl:3271 #, fuzzy msgid "Allow users to change the subject" msgstr "Cho phép người sử dụng thay đổi chủ đề" -#: mod_muc/mod_muc_room.erl:3020 +#: mod_muc/mod_muc_room.erl:3274 msgid "Allow users to send private messages" msgstr "Cho phép người sử dụng gửi thư riêng" -#: mod_muc/mod_muc_room.erl:3023 +#: mod_muc/mod_muc_room.erl:3279 +#, fuzzy +msgid "Allow visitors to send private messages to" +msgstr "Cho phép người sử dụng gửi thư riêng" + +#: mod_muc/mod_muc_room.erl:3290 +msgid "nobody" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3296 msgid "Allow users to query other users" msgstr "Cho phép người sử dụng hỏi người sử dụng khác" -#: mod_muc/mod_muc_room.erl:3026 +#: mod_muc/mod_muc_room.erl:3299 msgid "Allow users to send invites" msgstr "Cho phép người sử dụng gửi lời mời" -#: mod_muc/mod_muc_room.erl:3029 +#: mod_muc/mod_muc_room.erl:3302 #, fuzzy msgid "Allow visitors to send status text in presence updates" msgstr "Cho phép người sử dụng gửi thư riêng" -#: mod_muc/mod_muc_room.erl:3032 +#: mod_muc/mod_muc_room.erl:3305 #, fuzzy msgid "Allow visitors to change nickname" msgstr "Cho phép người sử dụng thay đổi chủ đề" -#: mod_muc/mod_muc_room.erl:3038 +#: mod_muc/mod_muc_room.erl:3308 #, fuzzy -msgid "Make room captcha protected" +msgid "Allow visitors to send voice requests" +msgstr "Cho phép người sử dụng gửi lời mời" + +#: mod_muc/mod_muc_room.erl:3311 +msgid "Minimum interval between voice requests (in seconds)" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3317 +#, fuzzy +msgid "Make room CAPTCHA protected" msgstr "Tạo phòng được bảo vệ bằng mật khẩu" -#: mod_muc/mod_muc_room.erl:3043 +#: mod_muc/mod_muc_room.erl:3322 msgid "Exclude Jabber IDs from CAPTCHA challenge" msgstr "" -#: mod_muc/mod_muc_room.erl:3050 +#: mod_muc/mod_muc_room.erl:3329 msgid "Enable logging" msgstr "Cho phép ghi nhật ký" -#: mod_muc/mod_muc_room.erl:3058 +#: mod_muc/mod_muc_room.erl:3337 msgid "You need an x:data capable client to configure room" msgstr "" "Bạn cần có một trình ứng dụng khách hỗ trợ định dạng dữ liệu x: để xác định " "cấu hình phòng họp" -#: mod_muc/mod_muc_room.erl:3390 +#: mod_muc/mod_muc_room.erl:3694 msgid "Number of occupants" msgstr "Số người tham dự" -#: mod_muc/mod_muc_room.erl:3446 +#: mod_muc/mod_muc_room.erl:3750 msgid "private, " msgstr "riêng," -#: mod_muc/mod_muc_room.erl:3529 +#: mod_muc/mod_muc_room.erl:3799 +msgid "Voice request" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3803 +msgid "Either approve or decline the voice request." +msgstr "" + +#: mod_muc/mod_muc_room.erl:3809 +#, fuzzy +msgid "User JID" +msgstr "Người sử dụng " + +#: mod_muc/mod_muc_room.erl:3811 +msgid "Grant voice to this person?" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3960 msgid "~s invites you to the room ~s" msgstr "~s mời bạn vào phòng ~s" -#: mod_muc/mod_muc_room.erl:3538 +#: mod_muc/mod_muc_room.erl:3969 msgid "the password is" msgstr "mật khẩu là" @@ -1027,14 +1084,15 @@ msgid "~s's Offline Messages Queue" msgstr "~s's Danh Sách Chờ Thư Ngoại Tuyến" #: mod_offline.erl:563 mod_offline_odbc.erl:411 mod_roster.erl:987 -#: mod_roster_odbc.erl:1092 mod_shared_roster.erl:896 -#: mod_shared_roster.erl:1005 web/ejabberd_web_admin.erl:833 +#: mod_roster_odbc.erl:1104 mod_shared_roster.erl:901 +#: mod_shared_roster.erl:1010 mod_shared_roster_odbc.erl:930 +#: mod_shared_roster_odbc.erl:1039 web/ejabberd_web_admin.erl:833 #: web/ejabberd_web_admin.erl:874 web/ejabberd_web_admin.erl:942 #: web/ejabberd_web_admin.erl:978 web/ejabberd_web_admin.erl:1019 -#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1758 -#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1961 -#: web/ejabberd_web_admin.erl:2030 web/ejabberd_web_admin.erl:2134 -#: web/ejabberd_web_admin.erl:2159 web/ejabberd_web_admin.erl:2247 +#: web/ejabberd_web_admin.erl:1508 web/ejabberd_web_admin.erl:1760 +#: web/ejabberd_web_admin.erl:1931 web/ejabberd_web_admin.erl:1963 +#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2135 +#: web/ejabberd_web_admin.erl:2160 web/ejabberd_web_admin.erl:2248 msgid "Submitted" msgstr "Đã gửi" @@ -1054,8 +1112,9 @@ msgstr "Đến" msgid "Packet" msgstr "Gói thông tin" -#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:903 -#: web/ejabberd_web_admin.erl:882 web/ejabberd_web_admin.erl:986 +#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:908 +#: mod_shared_roster_odbc.erl:937 web/ejabberd_web_admin.erl:882 +#: web/ejabberd_web_admin.erl:986 msgid "Delete Selected" msgstr "Tùy chọn Xóa được Chọn" @@ -1072,104 +1131,104 @@ msgstr "Thư Ngoại Tuyến" msgid "ejabberd SOCKS5 Bytestreams module" msgstr "Môdun SOCKS5 Bytestreams Bản quyền" -#: mod_pubsub/mod_pubsub.erl:1119 mod_pubsub/mod_pubsub_odbc.erl:928 +#: mod_pubsub/mod_pubsub.erl:1120 mod_pubsub/mod_pubsub_odbc.erl:929 msgid "Publish-Subscribe" msgstr "Xuất Bản-Đăng Ký" -#: mod_pubsub/mod_pubsub.erl:1213 mod_pubsub/mod_pubsub_odbc.erl:1024 +#: mod_pubsub/mod_pubsub.erl:1214 mod_pubsub/mod_pubsub_odbc.erl:1025 msgid "ejabberd Publish-Subscribe module" msgstr "Môdun ejabberd Xuất Bản-Đăng Ký Bản quyền" -#: mod_pubsub/mod_pubsub.erl:1496 mod_pubsub/mod_pubsub_odbc.erl:1311 +#: mod_pubsub/mod_pubsub.erl:1497 mod_pubsub/mod_pubsub_odbc.erl:1312 msgid "PubSub subscriber request" msgstr "Yêu cầu người đăng ký môđun Xuất Bản Đăng Ký" -#: mod_pubsub/mod_pubsub.erl:1498 mod_pubsub/mod_pubsub_odbc.erl:1313 +#: mod_pubsub/mod_pubsub.erl:1499 mod_pubsub/mod_pubsub_odbc.erl:1314 msgid "Choose whether to approve this entity's subscription." msgstr "Chọn có nên chấp nhận sự đăng ký của đối tượng này không" -#: mod_pubsub/mod_pubsub.erl:1504 mod_pubsub/mod_pubsub_odbc.erl:1319 +#: mod_pubsub/mod_pubsub.erl:1505 mod_pubsub/mod_pubsub_odbc.erl:1320 msgid "Node ID" msgstr "ID Nút" -#: mod_pubsub/mod_pubsub.erl:1509 mod_pubsub/mod_pubsub_odbc.erl:1324 +#: mod_pubsub/mod_pubsub.erl:1510 mod_pubsub/mod_pubsub_odbc.erl:1325 msgid "Subscriber Address" msgstr "Địa Chỉ Người Đăng Ký" -#: mod_pubsub/mod_pubsub.erl:1515 mod_pubsub/mod_pubsub_odbc.erl:1330 +#: mod_pubsub/mod_pubsub.erl:1516 mod_pubsub/mod_pubsub_odbc.erl:1331 msgid "Allow this Jabber ID to subscribe to this pubsub node?" msgstr "Cho phép Jabber ID đăng ký nút môđun xuất bản đăng ký này không?" -#: mod_pubsub/mod_pubsub.erl:3416 mod_pubsub/mod_pubsub_odbc.erl:3229 +#: mod_pubsub/mod_pubsub.erl:3474 mod_pubsub/mod_pubsub_odbc.erl:3287 msgid "Deliver payloads with event notifications" msgstr "Đưa ra thông tin dung lượng với các thông báo sự kiện" -#: mod_pubsub/mod_pubsub.erl:3417 mod_pubsub/mod_pubsub_odbc.erl:3230 +#: mod_pubsub/mod_pubsub.erl:3475 mod_pubsub/mod_pubsub_odbc.erl:3288 msgid "Deliver event notifications" msgstr "Đưa ra các thông báo sự kiện" -#: mod_pubsub/mod_pubsub.erl:3418 mod_pubsub/mod_pubsub_odbc.erl:3231 +#: mod_pubsub/mod_pubsub.erl:3476 mod_pubsub/mod_pubsub_odbc.erl:3289 msgid "Notify subscribers when the node configuration changes" msgstr "Thông báo cho người đăng ký khi nào cấu hình nút thay đổi" -#: mod_pubsub/mod_pubsub.erl:3419 mod_pubsub/mod_pubsub_odbc.erl:3232 +#: mod_pubsub/mod_pubsub.erl:3477 mod_pubsub/mod_pubsub_odbc.erl:3290 msgid "Notify subscribers when the node is deleted" msgstr "Thông báo cho người đăng ký khi nào nút bị xóa bỏ" -#: mod_pubsub/mod_pubsub.erl:3420 mod_pubsub/mod_pubsub_odbc.erl:3233 +#: mod_pubsub/mod_pubsub.erl:3478 mod_pubsub/mod_pubsub_odbc.erl:3291 msgid "Notify subscribers when items are removed from the node" msgstr "Thông báo cho người đăng ký khi nào các mục chọn bị gỡ bỏ khỏi nút" -#: mod_pubsub/mod_pubsub.erl:3421 mod_pubsub/mod_pubsub_odbc.erl:3234 +#: mod_pubsub/mod_pubsub.erl:3479 mod_pubsub/mod_pubsub_odbc.erl:3292 msgid "Persist items to storage" msgstr "Những mục cần để lưu trữ" -#: mod_pubsub/mod_pubsub.erl:3422 mod_pubsub/mod_pubsub_odbc.erl:3235 +#: mod_pubsub/mod_pubsub.erl:3480 mod_pubsub/mod_pubsub_odbc.erl:3293 msgid "A friendly name for the node" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3423 mod_pubsub/mod_pubsub_odbc.erl:3236 +#: mod_pubsub/mod_pubsub.erl:3481 mod_pubsub/mod_pubsub_odbc.erl:3294 msgid "Max # of items to persist" msgstr "Số mục tối đa để lưu trữ" -#: mod_pubsub/mod_pubsub.erl:3424 mod_pubsub/mod_pubsub_odbc.erl:3237 +#: mod_pubsub/mod_pubsub.erl:3482 mod_pubsub/mod_pubsub_odbc.erl:3295 msgid "Whether to allow subscriptions" msgstr "Xác định nên cho phép đăng ký không" -#: mod_pubsub/mod_pubsub.erl:3425 mod_pubsub/mod_pubsub_odbc.erl:3238 +#: mod_pubsub/mod_pubsub.erl:3483 mod_pubsub/mod_pubsub_odbc.erl:3296 msgid "Specify the access model" msgstr "Xác định mô hình truy cập" -#: mod_pubsub/mod_pubsub.erl:3428 mod_pubsub/mod_pubsub_odbc.erl:3241 +#: mod_pubsub/mod_pubsub.erl:3486 mod_pubsub/mod_pubsub_odbc.erl:3299 msgid "Roster groups allowed to subscribe" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3429 mod_pubsub/mod_pubsub_odbc.erl:3242 +#: mod_pubsub/mod_pubsub.erl:3487 mod_pubsub/mod_pubsub_odbc.erl:3300 msgid "Specify the publisher model" msgstr "Xác định mô hình nhà xuất bản" -#: mod_pubsub/mod_pubsub.erl:3431 mod_pubsub/mod_pubsub_odbc.erl:3244 +#: mod_pubsub/mod_pubsub.erl:3489 mod_pubsub/mod_pubsub_odbc.erl:3302 msgid "Purge all items when the relevant publisher goes offline" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3432 mod_pubsub/mod_pubsub_odbc.erl:3245 +#: mod_pubsub/mod_pubsub.erl:3490 mod_pubsub/mod_pubsub_odbc.erl:3303 #, fuzzy msgid "Specify the event message type" msgstr "Xác định mô hình truy cập" -#: mod_pubsub/mod_pubsub.erl:3434 mod_pubsub/mod_pubsub_odbc.erl:3247 +#: mod_pubsub/mod_pubsub.erl:3492 mod_pubsub/mod_pubsub_odbc.erl:3305 msgid "Max payload size in bytes" msgstr "Kích thước dung lượng byte tối đa" -#: mod_pubsub/mod_pubsub.erl:3435 mod_pubsub/mod_pubsub_odbc.erl:3248 +#: mod_pubsub/mod_pubsub.erl:3493 mod_pubsub/mod_pubsub_odbc.erl:3306 msgid "When to send the last published item" msgstr "Khi cần gửi mục được xuất bản cuối cùng" -#: mod_pubsub/mod_pubsub.erl:3437 mod_pubsub/mod_pubsub_odbc.erl:3250 +#: mod_pubsub/mod_pubsub.erl:3495 mod_pubsub/mod_pubsub_odbc.erl:3308 msgid "Only deliver notifications to available users" msgstr "Chỉ gửi thông báo đến những người sử dụng hiện có" -#: mod_pubsub/mod_pubsub.erl:3438 mod_pubsub/mod_pubsub_odbc.erl:3251 +#: mod_pubsub/mod_pubsub.erl:3496 mod_pubsub/mod_pubsub_odbc.erl:3309 msgid "The collections with which a node is affiliated" msgstr "" @@ -1188,15 +1247,11 @@ msgstr "" msgid "Choose a username and password to register with this server" msgstr "Chọn một tên truy cập và mật khẩu để đăng ký với máy chủ này" -#: mod_register.erl:230 mod_vcard.erl:358 mod_vcard_odbc.erl:336 -#: web/ejabberd_web_admin.erl:1516 web/ejabberd_web_admin.erl:1573 +#: mod_register.erl:230 mod_vcard.erl:364 mod_vcard_odbc.erl:342 +#: web/ejabberd_web_admin.erl:1515 web/ejabberd_web_admin.erl:1572 msgid "User" msgstr "Người sử dụng" -#: mod_register.erl:251 -msgid "Unable to generate a CAPTCHA" -msgstr "" - #: mod_register.erl:316 mod_register.erl:361 #, fuzzy msgid "The password is too weak" @@ -1207,120 +1262,123 @@ msgstr "mật khẩu là" msgid "Users are not allowed to register accounts so quickly" msgstr "Người ghé thăm không được phép gửi thư đến tất cả các người tham dự" -#: mod_roster.erl:938 mod_roster_odbc.erl:1043 web/ejabberd_web_admin.erl:1699 -#: web/ejabberd_web_admin.erl:1884 web/ejabberd_web_admin.erl:1895 -#: web/ejabberd_web_admin.erl:2218 +#: mod_roster.erl:938 mod_roster_odbc.erl:1055 web/ejabberd_web_admin.erl:1701 +#: web/ejabberd_web_admin.erl:1886 web/ejabberd_web_admin.erl:1897 +#: web/ejabberd_web_admin.erl:2219 msgid "None" msgstr "Không có" -#: mod_roster.erl:945 mod_roster_odbc.erl:1050 +#: mod_roster.erl:945 mod_roster_odbc.erl:1062 msgid "Subscription" msgstr "Đăng ký" -#: mod_roster.erl:946 mod_roster_odbc.erl:1051 +#: mod_roster.erl:946 mod_roster_odbc.erl:1063 msgid "Pending" msgstr "Chờ" -#: mod_roster.erl:947 mod_roster_odbc.erl:1052 +#: mod_roster.erl:947 mod_roster_odbc.erl:1064 msgid "Groups" msgstr "Nhóm" -#: mod_roster.erl:974 mod_roster_odbc.erl:1079 +#: mod_roster.erl:974 mod_roster_odbc.erl:1091 msgid "Validate" msgstr "Xác nhận hợp lệ" -#: mod_roster.erl:982 mod_roster_odbc.erl:1087 +#: mod_roster.erl:982 mod_roster_odbc.erl:1099 msgid "Remove" msgstr "Gỡ bỏ" -#: mod_roster.erl:985 mod_roster_odbc.erl:1090 +#: mod_roster.erl:985 mod_roster_odbc.erl:1102 msgid "Roster of " msgstr "Bảng phân công của " -#: mod_roster.erl:988 mod_roster_odbc.erl:1093 mod_shared_roster.erl:897 -#: mod_shared_roster.erl:1006 web/ejabberd_web_admin.erl:834 +#: mod_roster.erl:988 mod_roster_odbc.erl:1105 mod_shared_roster.erl:902 +#: mod_shared_roster.erl:1011 mod_shared_roster_odbc.erl:931 +#: mod_shared_roster_odbc.erl:1040 web/ejabberd_web_admin.erl:834 #: web/ejabberd_web_admin.erl:875 web/ejabberd_web_admin.erl:943 #: web/ejabberd_web_admin.erl:979 web/ejabberd_web_admin.erl:1020 -#: web/ejabberd_web_admin.erl:1510 web/ejabberd_web_admin.erl:1759 -#: web/ejabberd_web_admin.erl:1930 web/ejabberd_web_admin.erl:2135 -#: web/ejabberd_web_admin.erl:2160 +#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1761 +#: web/ejabberd_web_admin.erl:1932 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2161 msgid "Bad format" msgstr "Định dạng hỏng" -#: mod_roster.erl:995 mod_roster_odbc.erl:1100 +#: mod_roster.erl:995 mod_roster_odbc.erl:1112 msgid "Add Jabber ID" msgstr "Thêm Jabber ID" -#: mod_roster.erl:1094 mod_roster_odbc.erl:1199 +#: mod_roster.erl:1094 mod_roster_odbc.erl:1211 msgid "Roster" msgstr "Bảng phân công" -#: mod_shared_roster.erl:852 mod_shared_roster.erl:894 -#: mod_shared_roster.erl:1002 +#: mod_shared_roster.erl:857 mod_shared_roster.erl:899 +#: mod_shared_roster.erl:1007 mod_shared_roster_odbc.erl:886 +#: mod_shared_roster_odbc.erl:928 mod_shared_roster_odbc.erl:1036 msgid "Shared Roster Groups" msgstr "Nhóm Phân Công Chia Sẻ" -#: mod_shared_roster.erl:890 web/ejabberd_web_admin.erl:1366 -#: web/ejabberd_web_admin.erl:2460 +#: mod_shared_roster.erl:895 mod_shared_roster_odbc.erl:924 +#: web/ejabberd_web_admin.erl:1365 web/ejabberd_web_admin.erl:2461 msgid "Add New" msgstr "Thêm Mới" -#: mod_shared_roster.erl:973 +#: mod_shared_roster.erl:978 mod_shared_roster_odbc.erl:1007 msgid "Name:" msgstr "Tên:" -#: mod_shared_roster.erl:978 +#: mod_shared_roster.erl:983 mod_shared_roster_odbc.erl:1012 msgid "Description:" msgstr "Miêu tả:" -#: mod_shared_roster.erl:986 +#: mod_shared_roster.erl:991 mod_shared_roster_odbc.erl:1020 msgid "Members:" msgstr "Thành viên:" -#: mod_shared_roster.erl:994 +#: mod_shared_roster.erl:999 mod_shared_roster_odbc.erl:1028 msgid "Displayed Groups:" msgstr "Nhóm được hiển thị:" -#: mod_shared_roster.erl:1003 +#: mod_shared_roster.erl:1008 mod_shared_roster_odbc.erl:1037 msgid "Group " msgstr "Nhóm " -#: mod_shared_roster.erl:1012 web/ejabberd_web_admin.erl:840 -#: web/ejabberd_web_admin.erl:884 web/ejabberd_web_admin.erl:949 -#: web/ejabberd_web_admin.erl:1026 web/ejabberd_web_admin.erl:2015 +#: mod_shared_roster.erl:1017 mod_shared_roster_odbc.erl:1046 +#: web/ejabberd_web_admin.erl:840 web/ejabberd_web_admin.erl:884 +#: web/ejabberd_web_admin.erl:949 web/ejabberd_web_admin.erl:1026 +#: web/ejabberd_web_admin.erl:2017 msgid "Submit" msgstr "Gửi" -#: mod_vcard.erl:165 mod_vcard_ldap.erl:237 mod_vcard_odbc.erl:129 +#: mod_vcard.erl:165 mod_vcard_ldap.erl:238 mod_vcard_odbc.erl:129 msgid "Erlang Jabber Server" msgstr "Erlang Jabber Server Bản quyền" -#: mod_vcard.erl:358 mod_vcard.erl:472 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:448 +#: mod_vcard.erl:364 mod_vcard.erl:478 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:454 msgid "Birthday" msgstr "Ngày sinh" -#: mod_vcard.erl:358 mod_vcard.erl:474 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:450 +#: mod_vcard.erl:364 mod_vcard.erl:480 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:456 msgid "City" msgstr "Thành phố" -#: mod_vcard.erl:358 mod_vcard.erl:473 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:449 +#: mod_vcard.erl:364 mod_vcard.erl:479 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:455 msgid "Country" msgstr "Quốc gia" -#: mod_vcard.erl:358 mod_vcard.erl:475 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:451 +#: mod_vcard.erl:364 mod_vcard.erl:481 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:457 msgid "Email" msgstr "Email" -#: mod_vcard.erl:358 mod_vcard.erl:470 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:446 +#: mod_vcard.erl:364 mod_vcard.erl:476 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:452 msgid "Family Name" msgstr "Họ" -#: mod_vcard.erl:358 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_odbc.erl:342 msgid "" "Fill in the form to search for any matching Jabber User (Add * to the end of " "field to match substring)" @@ -1328,53 +1386,53 @@ msgstr "" "Điền vào mẫu này để tìm kiếm bất kỳ thông tin nào khớp với Người sử dụng " "Jabber (Thêm dấu * vào cuối ô để thông tin khớp với chuỗi bên trong)" -#: mod_vcard.erl:358 mod_vcard.erl:467 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:443 +#: mod_vcard.erl:364 mod_vcard.erl:473 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:449 msgid "Full Name" msgstr "Tên Đầy Đủ" -#: mod_vcard.erl:358 mod_vcard.erl:469 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:445 +#: mod_vcard.erl:364 mod_vcard.erl:475 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:451 msgid "Middle Name" msgstr "Họ Đệm" -#: mod_vcard.erl:358 mod_vcard.erl:468 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:444 web/ejabberd_web_admin.erl:2004 +#: mod_vcard.erl:364 mod_vcard.erl:474 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:450 web/ejabberd_web_admin.erl:2006 msgid "Name" msgstr "Tên" -#: mod_vcard.erl:358 mod_vcard.erl:476 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:452 +#: mod_vcard.erl:364 mod_vcard.erl:482 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:458 msgid "Organization Name" msgstr "Tên Tổ Chức" -#: mod_vcard.erl:358 mod_vcard.erl:477 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:453 +#: mod_vcard.erl:364 mod_vcard.erl:483 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:459 msgid "Organization Unit" msgstr "Bộ Phận" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "Search users in " msgstr "Tìm kiếm người sử dụng trong" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "You need an x:data capable client to search" msgstr "" "Bạn cần có một trình ứng dụng khách hỗ trợ định dạng dữ liệu x: để tìm kiếm" -#: mod_vcard.erl:383 mod_vcard_ldap.erl:483 mod_vcard_odbc.erl:361 +#: mod_vcard.erl:389 mod_vcard_ldap.erl:487 mod_vcard_odbc.erl:367 msgid "vCard User Search" msgstr "Tìm Kiếm Người Sử Dụng vCard" -#: mod_vcard.erl:439 mod_vcard_ldap.erl:537 mod_vcard_odbc.erl:415 +#: mod_vcard.erl:445 mod_vcard_ldap.erl:541 mod_vcard_odbc.erl:421 msgid "ejabberd vCard module" msgstr "Môdun ejabberd vCard Bản quyền" -#: mod_vcard.erl:463 mod_vcard_ldap.erl:547 mod_vcard_odbc.erl:439 +#: mod_vcard.erl:469 mod_vcard_ldap.erl:551 mod_vcard_odbc.erl:445 msgid "Search Results for " msgstr "Kết Quả Tìm Kiếm cho " -#: mod_vcard_ldap.erl:458 +#: mod_vcard_ldap.erl:462 msgid "Fill in fields to search for any matching Jabber User" msgstr "" "Điền vào các ô để tìm kiếm bất kỳ các thông tin nào khớp với Người sử dụng " @@ -1438,7 +1496,7 @@ msgstr "Hiển Thị Bảng Thường" msgid "Show Integral Table" msgstr "Hiển Thị Bảng Đầy Đủ" -#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1937 +#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1939 msgid "Statistics" msgstr "Số liệu thống kê" @@ -1451,116 +1509,116 @@ msgstr "Nút không tìm thấy" msgid "Node not found" msgstr "Nút không tìm thấy" -#: web/ejabberd_web_admin.erl:1461 +#: web/ejabberd_web_admin.erl:1460 msgid "Host" msgstr "Máy chủ" -#: web/ejabberd_web_admin.erl:1462 +#: web/ejabberd_web_admin.erl:1461 msgid "Registered Users" msgstr "Người Sử Dụng Đã Đăng Ký" -#: web/ejabberd_web_admin.erl:1574 +#: web/ejabberd_web_admin.erl:1573 msgid "Offline Messages" msgstr "Thư Ngoại Tuyến" -#: web/ejabberd_web_admin.erl:1575 web/ejabberd_web_admin.erl:1765 +#: web/ejabberd_web_admin.erl:1574 web/ejabberd_web_admin.erl:1767 msgid "Last Activity" msgstr "Hoạt Động Cuối Cùng" -#: web/ejabberd_web_admin.erl:1657 web/ejabberd_web_admin.erl:1673 +#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 msgid "Registered Users:" msgstr "Người Sử Dụng Đã Đăng Ký:" -#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 -#: web/ejabberd_web_admin.erl:2191 +#: web/ejabberd_web_admin.erl:1661 web/ejabberd_web_admin.erl:1677 +#: web/ejabberd_web_admin.erl:2192 msgid "Online Users:" msgstr "Người Sử Dụng Trực Tuyến:" -#: web/ejabberd_web_admin.erl:1661 +#: web/ejabberd_web_admin.erl:1663 msgid "Outgoing s2s Connections:" msgstr "Kết Nối Bên Ngoài s2s:" -#: web/ejabberd_web_admin.erl:1663 +#: web/ejabberd_web_admin.erl:1665 msgid "Outgoing s2s Servers:" msgstr "Máy chủ Bên Ngoài s2s:" -#: web/ejabberd_web_admin.erl:1732 web/mod_register_web.erl:175 +#: web/ejabberd_web_admin.erl:1734 web/mod_register_web.erl:175 #: web/mod_register_web.erl:372 web/mod_register_web.erl:381 #: web/mod_register_web.erl:411 msgid "Change Password" msgstr "Thay Đổi Mật Khẩu" -#: web/ejabberd_web_admin.erl:1756 +#: web/ejabberd_web_admin.erl:1758 msgid "User " msgstr "Người sử dụng " -#: web/ejabberd_web_admin.erl:1763 +#: web/ejabberd_web_admin.erl:1765 msgid "Connected Resources:" msgstr "Tài Nguyên Được Kết Nối:" -#: web/ejabberd_web_admin.erl:1764 web/mod_register_web.erl:227 +#: web/ejabberd_web_admin.erl:1766 web/mod_register_web.erl:227 #: web/mod_register_web.erl:519 msgid "Password:" msgstr "Mật Khẩu:" -#: web/ejabberd_web_admin.erl:1826 +#: web/ejabberd_web_admin.erl:1828 msgid "No Data" msgstr "Không Dữ Liệu" -#: web/ejabberd_web_admin.erl:1904 +#: web/ejabberd_web_admin.erl:1906 msgid "Nodes" msgstr "Nút" -#: web/ejabberd_web_admin.erl:1927 web/ejabberd_web_admin.erl:1949 +#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1951 msgid "Node " msgstr "Nút " -#: web/ejabberd_web_admin.erl:1936 +#: web/ejabberd_web_admin.erl:1938 msgid "Listened Ports" msgstr "Cổng Kết Nối" -#: web/ejabberd_web_admin.erl:1938 web/ejabberd_web_admin.erl:2259 -#: web/ejabberd_web_admin.erl:2447 +#: web/ejabberd_web_admin.erl:1940 web/ejabberd_web_admin.erl:2260 +#: web/ejabberd_web_admin.erl:2448 msgid "Update" msgstr "Cập Nhật" -#: web/ejabberd_web_admin.erl:1941 web/ejabberd_web_admin.erl:2568 +#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2569 msgid "Restart" msgstr "Khởi động lại" -#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2570 +#: web/ejabberd_web_admin.erl:1945 web/ejabberd_web_admin.erl:2571 msgid "Stop" msgstr "Dừng" -#: web/ejabberd_web_admin.erl:1957 +#: web/ejabberd_web_admin.erl:1959 msgid "RPC Call Error" msgstr "Lỗi Gọi RPC" -#: web/ejabberd_web_admin.erl:1998 +#: web/ejabberd_web_admin.erl:2000 msgid "Database Tables at " msgstr "Bảng Cơ Sở Dữ Liệu tại" -#: web/ejabberd_web_admin.erl:2005 +#: web/ejabberd_web_admin.erl:2007 msgid "Storage Type" msgstr "Loại Lưu Trữ" -#: web/ejabberd_web_admin.erl:2006 +#: web/ejabberd_web_admin.erl:2008 msgid "Elements" msgstr "" -#: web/ejabberd_web_admin.erl:2007 +#: web/ejabberd_web_admin.erl:2009 msgid "Memory" msgstr "Bộ Nhớ" -#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2032 web/ejabberd_web_admin.erl:2137 msgid "Error" msgstr "" -#: web/ejabberd_web_admin.erl:2033 +#: web/ejabberd_web_admin.erl:2034 msgid "Backup of " msgstr "Sao lưu dự phòng về" -#: web/ejabberd_web_admin.erl:2035 +#: web/ejabberd_web_admin.erl:2036 #, fuzzy msgid "" "Please note that these options will only backup the builtin Mnesia database. " @@ -1571,146 +1629,146 @@ msgstr "" "Mnesia. Nếu bạn đang sử dụng môđun ODBC, bạn cũng cần sao lưu cơ sở dữ liệu " "SQL của bạn riêng biệt." -#: web/ejabberd_web_admin.erl:2040 +#: web/ejabberd_web_admin.erl:2041 msgid "Store binary backup:" msgstr "Lưu dữ liệu sao lưu dạng nhị phân:" -#: web/ejabberd_web_admin.erl:2044 web/ejabberd_web_admin.erl:2051 -#: web/ejabberd_web_admin.erl:2059 web/ejabberd_web_admin.erl:2066 -#: web/ejabberd_web_admin.erl:2073 web/ejabberd_web_admin.erl:2080 -#: web/ejabberd_web_admin.erl:2087 web/ejabberd_web_admin.erl:2095 -#: web/ejabberd_web_admin.erl:2102 web/ejabberd_web_admin.erl:2109 +#: web/ejabberd_web_admin.erl:2045 web/ejabberd_web_admin.erl:2052 +#: web/ejabberd_web_admin.erl:2060 web/ejabberd_web_admin.erl:2067 +#: web/ejabberd_web_admin.erl:2074 web/ejabberd_web_admin.erl:2081 +#: web/ejabberd_web_admin.erl:2088 web/ejabberd_web_admin.erl:2096 +#: web/ejabberd_web_admin.erl:2103 web/ejabberd_web_admin.erl:2110 msgid "OK" msgstr "OK" -#: web/ejabberd_web_admin.erl:2047 +#: web/ejabberd_web_admin.erl:2048 msgid "Restore binary backup immediately:" msgstr "Khôi phục bản sao lưu dự phòng dạng nhị phận ngay lập tức:" -#: web/ejabberd_web_admin.erl:2055 +#: web/ejabberd_web_admin.erl:2056 msgid "" "Restore binary backup after next ejabberd restart (requires less memory):" msgstr "" "Khôi phục bản sao lưu dự phòng dạng nhị phân sau lần khởi động ejabberd kế " "tiếp (yêu cầu ít bộ nhớ hơn):" -#: web/ejabberd_web_admin.erl:2062 +#: web/ejabberd_web_admin.erl:2063 msgid "Store plain text backup:" msgstr "Khôi phục bản sao lưu dự phòng thuần văn bản" -#: web/ejabberd_web_admin.erl:2069 +#: web/ejabberd_web_admin.erl:2070 msgid "Restore plain text backup immediately:" msgstr "Khôi phục bản sao lưu dự phòng thuần văn bản ngay lập tức:" -#: web/ejabberd_web_admin.erl:2076 +#: web/ejabberd_web_admin.erl:2077 msgid "Import users data from a PIEFXIS file (XEP-0227):" msgstr "" -#: web/ejabberd_web_admin.erl:2083 +#: web/ejabberd_web_admin.erl:2084 msgid "Export data of all users in the server to PIEFXIS files (XEP-0227):" msgstr "" -#: web/ejabberd_web_admin.erl:2090 +#: web/ejabberd_web_admin.erl:2091 msgid "Export data of users in a host to PIEFXIS files (XEP-0227):" msgstr "" -#: web/ejabberd_web_admin.erl:2098 +#: web/ejabberd_web_admin.erl:2099 #, fuzzy msgid "Import user data from jabberd14 spool file:" msgstr "Nhập Người Sử Dụng Từ Các Tập Tin Spool jabberd14" -#: web/ejabberd_web_admin.erl:2105 +#: web/ejabberd_web_admin.erl:2106 #, fuzzy msgid "Import users data from jabberd14 spool directory:" msgstr "Nhập Người Sử Dụng Từ Các Tập Tin Spool jabberd14" -#: web/ejabberd_web_admin.erl:2131 +#: web/ejabberd_web_admin.erl:2132 msgid "Listened Ports at " msgstr "Cổng Liên Lạc tại" -#: web/ejabberd_web_admin.erl:2156 +#: web/ejabberd_web_admin.erl:2157 msgid "Modules at " msgstr "Môđun tại " -#: web/ejabberd_web_admin.erl:2182 +#: web/ejabberd_web_admin.erl:2183 msgid "Statistics of ~p" msgstr "Thống kê về ~p" -#: web/ejabberd_web_admin.erl:2185 +#: web/ejabberd_web_admin.erl:2186 msgid "Uptime:" msgstr "Thời gian tải lên:" -#: web/ejabberd_web_admin.erl:2188 +#: web/ejabberd_web_admin.erl:2189 msgid "CPU Time:" msgstr "Thời Gian CPU:" -#: web/ejabberd_web_admin.erl:2194 +#: web/ejabberd_web_admin.erl:2195 msgid "Transactions Committed:" msgstr "Giao Dịch Được Cam Kết:" -#: web/ejabberd_web_admin.erl:2197 +#: web/ejabberd_web_admin.erl:2198 msgid "Transactions Aborted:" msgstr "Giao Dịch Hủy Bỏ:" -#: web/ejabberd_web_admin.erl:2200 +#: web/ejabberd_web_admin.erl:2201 msgid "Transactions Restarted:" msgstr "Giao Dịch Khởi Động Lại:" -#: web/ejabberd_web_admin.erl:2203 +#: web/ejabberd_web_admin.erl:2204 msgid "Transactions Logged:" msgstr "Giao Dịch Được Ghi Nhận:" -#: web/ejabberd_web_admin.erl:2245 +#: web/ejabberd_web_admin.erl:2246 msgid "Update " msgstr "Cập Nhật " -#: web/ejabberd_web_admin.erl:2253 +#: web/ejabberd_web_admin.erl:2254 msgid "Update plan" msgstr "Kế hoạch cập nhật" -#: web/ejabberd_web_admin.erl:2254 +#: web/ejabberd_web_admin.erl:2255 #, fuzzy msgid "Modified modules" msgstr "Môđun cập nhật" -#: web/ejabberd_web_admin.erl:2255 +#: web/ejabberd_web_admin.erl:2256 msgid "Update script" msgstr "Cập nhận lệnh" -#: web/ejabberd_web_admin.erl:2256 +#: web/ejabberd_web_admin.erl:2257 msgid "Low level update script" msgstr "Lệnh cập nhật mức độ thấp" -#: web/ejabberd_web_admin.erl:2257 +#: web/ejabberd_web_admin.erl:2258 msgid "Script check" msgstr "Lệnh kiểm tra" -#: web/ejabberd_web_admin.erl:2425 +#: web/ejabberd_web_admin.erl:2426 msgid "Port" msgstr "Cổng" -#: web/ejabberd_web_admin.erl:2426 +#: web/ejabberd_web_admin.erl:2427 msgid "IP" msgstr "" -#: web/ejabberd_web_admin.erl:2427 +#: web/ejabberd_web_admin.erl:2428 #, fuzzy msgid "Protocol" msgstr "Cổng" -#: web/ejabberd_web_admin.erl:2428 web/ejabberd_web_admin.erl:2555 +#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 msgid "Module" msgstr "Môđun" -#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 +#: web/ejabberd_web_admin.erl:2430 web/ejabberd_web_admin.erl:2557 msgid "Options" msgstr "Tùy chọn" -#: web/ejabberd_web_admin.erl:2449 +#: web/ejabberd_web_admin.erl:2450 msgid "Delete" msgstr "Xóa" -#: web/ejabberd_web_admin.erl:2578 +#: web/ejabberd_web_admin.erl:2579 msgid "Start" msgstr "Khởi động" diff --git a/src/msgs/wa.po b/src/msgs/wa.po index 8f3c9c87a..462b22445 100644 --- a/src/msgs/wa.po +++ b/src/msgs/wa.po @@ -15,11 +15,11 @@ msgstr "L' eployaedje di STARTTL est oblidjî" msgid "No resource provided" msgstr "Nole rissoûce di dnêye" -#: ejabberd_c2s.erl:1149 +#: ejabberd_c2s.erl:1197 msgid "Replaced by new connection" msgstr "Replaecî pa on novea raloyaedje" -#: ejabberd_c2s.erl:1837 +#: ejabberd_c2s.erl:1885 msgid "Your active privacy list has denied the routing of this stanza." msgstr "" @@ -41,7 +41,7 @@ msgid "CAPTCHA web page" msgstr "" #: ejabberd_captcha.erl:307 -msgid "The captcha is valid." +msgid "The CAPTCHA is valid." msgstr "" #: mod_adhoc.erl:95 mod_adhoc.erl:125 mod_adhoc.erl:143 mod_adhoc.erl:161 @@ -56,64 +56,67 @@ msgstr "Ping" msgid "Pong" msgstr "Pong" -#: mod_announce.erl:506 +#: mod_announce.erl:507 mod_announce_odbc.erl:499 msgid "Really delete message of the day?" msgstr "Voloz vs vormint disfacer l' messaedje do djoû?" -#: mod_announce.erl:514 mod_configure.erl:1083 mod_configure.erl:1128 +#: mod_announce.erl:515 mod_announce_odbc.erl:507 mod_configure.erl:1083 +#: mod_configure.erl:1128 msgid "Subject" msgstr "Sudjet" -#: mod_announce.erl:519 mod_configure.erl:1088 mod_configure.erl:1133 +#: mod_announce.erl:520 mod_announce_odbc.erl:512 mod_configure.erl:1088 +#: mod_configure.erl:1133 msgid "Message body" msgstr "Coir do messaedje" -#: mod_announce.erl:599 +#: mod_announce.erl:600 mod_announce_odbc.erl:592 msgid "No body provided for announce message" msgstr "I n' a nou coir do messaedje po ciste anonce la" -#: mod_announce.erl:634 +#: mod_announce.erl:635 mod_announce_odbc.erl:627 msgid "Announcements" msgstr "Anonces" -#: mod_announce.erl:636 +#: mod_announce.erl:637 mod_announce_odbc.erl:629 msgid "Send announcement to all users" msgstr "Evoyî l' anonce a tos les uzeus" -#: mod_announce.erl:638 +#: mod_announce.erl:639 mod_announce_odbc.erl:631 msgid "Send announcement to all users on all hosts" msgstr "Evoyî l' anonce a tos les uzeus so tos les lodjoes" -#: mod_announce.erl:640 +#: mod_announce.erl:641 mod_announce_odbc.erl:633 msgid "Send announcement to all online users" msgstr "Evoyî l' anonce a tos les uzeus raloyîs" -#: mod_announce.erl:642 mod_configure.erl:1078 mod_configure.erl:1123 +#: mod_announce.erl:643 mod_announce_odbc.erl:635 mod_configure.erl:1078 +#: mod_configure.erl:1123 msgid "Send announcement to all online users on all hosts" msgstr "Evoyî l' anonce a tos les uzeus raloyîs so tos les lodjoes" -#: mod_announce.erl:644 +#: mod_announce.erl:645 mod_announce_odbc.erl:637 msgid "Set message of the day and send to online users" msgstr "Defini l' messaedje do djoû et l' evoyî åzès uzeus raloyîs" -#: mod_announce.erl:646 +#: mod_announce.erl:647 mod_announce_odbc.erl:639 msgid "Set message of the day on all hosts and send to online users" msgstr "" "Defini l' messaedje do djoû so tos les lodjoes et l' evoyî åzès uzeus raloyîs" -#: mod_announce.erl:648 +#: mod_announce.erl:649 mod_announce_odbc.erl:641 msgid "Update message of the day (don't send)" msgstr "Mete a djoû l' messaedje do djoû (nén l' evoyî)" -#: mod_announce.erl:650 +#: mod_announce.erl:651 mod_announce_odbc.erl:643 msgid "Update message of the day on all hosts (don't send)" msgstr "Mete a djoû l' messaedje do djoû so tos les lodjoes (nén l' evoyî)" -#: mod_announce.erl:652 +#: mod_announce.erl:653 mod_announce_odbc.erl:645 msgid "Delete message of the day" msgstr "Disfacer l' messaedje do djoû" -#: mod_announce.erl:654 +#: mod_announce.erl:655 mod_announce_odbc.erl:647 msgid "Delete message of the day on all hosts" msgstr "Disfacer l' messaedje do djoû so tos les lodjoes" @@ -122,7 +125,7 @@ msgstr "Disfacer l' messaedje do djoû so tos les lodjoes" msgid "Configuration" msgstr "Apontiaedjes" -#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1934 +#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1936 msgid "Database" msgstr "Båze di dnêyes" @@ -134,7 +137,7 @@ msgstr "Enonder des modules" msgid "Stop Modules" msgstr "Arester des modules" -#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1935 +#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1937 msgid "Backup" msgstr "Copeye di såvrité" @@ -163,7 +166,7 @@ msgid "Shut Down Service" msgstr "Arester siervice" #: mod_configure.erl:145 mod_configure.erl:518 mod_configure.erl:1197 -#: web/ejabberd_web_admin.erl:1528 +#: web/ejabberd_web_admin.erl:1527 msgid "Add User" msgstr "Radjouter èn uzeu" @@ -215,7 +218,7 @@ msgid "User Management" msgstr "Manaedjaedje des uzeus" #: mod_configure.erl:500 web/ejabberd_web_admin.erl:1058 -#: web/ejabberd_web_admin.erl:1463 +#: web/ejabberd_web_admin.erl:1462 msgid "Online Users" msgstr "Uzeus raloyîs" @@ -227,15 +230,15 @@ msgstr "Tos les uzeus" msgid "Outgoing s2s Connections" msgstr "Raloyaedjes s2s e rexhowe" -#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1905 +#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1907 msgid "Running Nodes" msgstr "Nuks en alaedje" -#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1907 +#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1909 msgid "Stopped Nodes" msgstr "Nuks essoctés" -#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1951 +#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1953 msgid "Modules" msgstr "Modules" @@ -366,15 +369,15 @@ msgstr "Rîles d' accès" #: mod_configure.erl:1200 mod_configure.erl:1222 mod_configure.erl:1234 #: mod_configure.erl:1246 mod_configure.erl:1258 mod_configure.erl:1275 -#: mod_configure.erl:1287 mod_configure.erl:1652 mod_configure.erl:1702 -#: mod_configure.erl:1723 mod_roster.erl:943 mod_roster_odbc.erl:1048 -#: mod_vcard.erl:466 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:442 +#: mod_configure.erl:1287 mod_configure.erl:1650 mod_configure.erl:1700 +#: mod_configure.erl:1721 mod_roster.erl:943 mod_roster_odbc.erl:1060 +#: mod_vcard.erl:472 mod_vcard_ldap.erl:554 mod_vcard_odbc.erl:448 msgid "Jabber ID" msgstr "ID Jabber" -#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1653 -#: mod_configure.erl:1865 mod_muc/mod_muc_room.erl:2970 mod_register.erl:235 -#: web/ejabberd_web_admin.erl:1521 +#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1651 +#: mod_configure.erl:1863 mod_muc/mod_muc_room.erl:3224 mod_register.erl:235 +#: web/ejabberd_web_admin.erl:1520 msgid "Password" msgstr "Sicret" @@ -390,71 +393,72 @@ msgstr "Nombe d' uzeus edjîstrés" msgid "Number of online users" msgstr "Nombe d' uzeus raloyîs" -#: mod_configure.erl:1684 web/ejabberd_web_admin.erl:1589 -#: web/ejabberd_web_admin.erl:1741 +#: mod_configure.erl:1682 web/ejabberd_web_admin.erl:1588 +#: web/ejabberd_web_admin.erl:1743 msgid "Never" msgstr "Måy" -#: mod_configure.erl:1698 web/ejabberd_web_admin.erl:1602 -#: web/ejabberd_web_admin.erl:1754 +#: mod_configure.erl:1696 web/ejabberd_web_admin.erl:1601 +#: web/ejabberd_web_admin.erl:1756 msgid "Online" msgstr "Raloyî" -#: mod_configure.erl:1703 +#: mod_configure.erl:1701 msgid "Last login" msgstr "Dierin elodjaedje" -#: mod_configure.erl:1724 +#: mod_configure.erl:1722 msgid "Roster size" msgstr "Grandeu del djivêye des soçons" -#: mod_configure.erl:1725 +#: mod_configure.erl:1723 msgid "IP addresses" msgstr "Adresses IP" -#: mod_configure.erl:1726 +#: mod_configure.erl:1724 msgid "Resources" msgstr "Rissoûces" -#: mod_configure.erl:1852 +#: mod_configure.erl:1850 msgid "Administration of " msgstr "Manaedjaedje di " -#: mod_configure.erl:1855 +#: mod_configure.erl:1853 msgid "Action on user" msgstr "Accion so l' uzeu" -#: mod_configure.erl:1859 +#: mod_configure.erl:1857 msgid "Edit Properties" msgstr "Candjî les prôpietés" -#: mod_configure.erl:1862 web/ejabberd_web_admin.erl:1767 +#: mod_configure.erl:1860 web/ejabberd_web_admin.erl:1769 msgid "Remove User" msgstr "Disfacer l' uzeu" -#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:336 +#: mod_irc/mod_irc.erl:201 mod_irc/mod_irc_odbc.erl:196 +#: mod_muc/mod_muc.erl:336 mod_muc/mod_muc_odbc.erl:342 msgid "Access denied by service policy" msgstr "L' accès a stî rfuzé pal politike do siervice" -#: mod_irc/mod_irc.erl:400 +#: mod_irc/mod_irc.erl:401 mod_irc/mod_irc_odbc.erl:398 msgid "IRC Transport" msgstr "Transpoirt IRC" -#: mod_irc/mod_irc.erl:427 +#: mod_irc/mod_irc.erl:428 mod_irc/mod_irc_odbc.erl:425 msgid "ejabberd IRC module" msgstr "Module IRC po ejabberd" -#: mod_irc/mod_irc.erl:558 +#: mod_irc/mod_irc.erl:559 mod_irc/mod_irc_odbc.erl:568 msgid "You need an x:data capable client to configure mod_irc settings" msgstr "" "Vos avoz mezåjhe d' on cliyint ki sopoite x:data po candjî ls apontiaedjes " "di mod_irc" -#: mod_irc/mod_irc.erl:565 +#: mod_irc/mod_irc.erl:566 mod_irc/mod_irc_odbc.erl:575 msgid "Registration in mod_irc for " msgstr "Edjîstraedje dins mod_irc po " -#: mod_irc/mod_irc.erl:570 +#: mod_irc/mod_irc.erl:571 mod_irc/mod_irc_odbc.erl:580 #, fuzzy msgid "" "Enter username, encodings, ports and passwords you wish to use for " @@ -463,11 +467,11 @@ msgstr "" "Dinez les nos d' uzeu et ls ecôdaedjes ki vos vloz eployî po vs raloyî åzès " "sierveus IRC" -#: mod_irc/mod_irc.erl:575 +#: mod_irc/mod_irc.erl:576 mod_irc/mod_irc_odbc.erl:585 msgid "IRC Username" msgstr "No d' uzeu IRC" -#: mod_irc/mod_irc.erl:585 +#: mod_irc/mod_irc.erl:586 mod_irc/mod_irc_odbc.erl:595 #, fuzzy msgid "" "If you want to specify different ports, passwords, encodings for IRC " @@ -479,7 +483,7 @@ msgstr "" "cisse djivêye ci avou des valixhances del cogne «{\"sierveu irc\", " "\"ecôdaedje\"}». Li prémetou ecôdaedje do siervice c' est «~s»." -#: mod_irc/mod_irc.erl:597 +#: mod_irc/mod_irc.erl:598 mod_irc/mod_irc_odbc.erl:607 #, fuzzy msgid "" "Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." @@ -488,36 +492,37 @@ msgstr "" "Egzimpe: [{\"irc.lucky.net\", \"koi8-r\"}, {\"vendetta.fef.net\", " "\"iso8859-1\"}]." -#: mod_irc/mod_irc.erl:602 +#: mod_irc/mod_irc.erl:603 mod_irc/mod_irc_odbc.erl:612 msgid "Connections parameters" msgstr "" -#: mod_irc/mod_irc.erl:727 +#: mod_irc/mod_irc.erl:728 mod_irc/mod_irc_odbc.erl:757 msgid "Join IRC channel" msgstr "" -#: mod_irc/mod_irc.erl:731 +#: mod_irc/mod_irc.erl:732 mod_irc/mod_irc_odbc.erl:761 msgid "IRC channel (don't put the first #)" msgstr "" -#: mod_irc/mod_irc.erl:736 +#: mod_irc/mod_irc.erl:737 mod_irc/mod_irc_odbc.erl:766 #, fuzzy msgid "IRC server" msgstr "No d' uzeu IRC" -#: mod_irc/mod_irc.erl:769 mod_irc/mod_irc.erl:773 +#: mod_irc/mod_irc.erl:770 mod_irc/mod_irc.erl:774 +#: mod_irc/mod_irc_odbc.erl:799 mod_irc/mod_irc_odbc.erl:803 msgid "Join the IRC channel here." msgstr "" -#: mod_irc/mod_irc.erl:777 +#: mod_irc/mod_irc.erl:778 mod_irc/mod_irc_odbc.erl:807 msgid "Join the IRC channel in this Jabber ID: ~s" msgstr "" -#: mod_irc/mod_irc.erl:862 +#: mod_irc/mod_irc.erl:863 mod_irc/mod_irc_odbc.erl:904 msgid "IRC settings" msgstr "" -#: mod_irc/mod_irc.erl:867 +#: mod_irc/mod_irc.erl:868 mod_irc/mod_irc_odbc.erl:909 #, fuzzy msgid "" "Enter username and encodings you wish to use for connecting to IRC servers. " @@ -527,77 +532,78 @@ msgstr "" "Dinez les nos d' uzeu et ls ecôdaedjes ki vos vloz eployî po vs raloyî åzès " "sierveus IRC" -#: mod_irc/mod_irc.erl:873 +#: mod_irc/mod_irc.erl:874 mod_irc/mod_irc_odbc.erl:915 #, fuzzy msgid "IRC username" msgstr "No d' uzeu IRC" -#: mod_irc/mod_irc.erl:922 +#: mod_irc/mod_irc.erl:923 mod_irc/mod_irc_odbc.erl:964 #, fuzzy msgid "Password ~b" msgstr "Sicret" -#: mod_irc/mod_irc.erl:927 +#: mod_irc/mod_irc.erl:928 mod_irc/mod_irc_odbc.erl:969 #, fuzzy msgid "Port ~b" msgstr "Pôrt" -#: mod_irc/mod_irc.erl:932 +#: mod_irc/mod_irc.erl:933 mod_irc/mod_irc_odbc.erl:974 msgid "Encoding for server ~b" msgstr "" -#: mod_irc/mod_irc.erl:941 +#: mod_irc/mod_irc.erl:942 mod_irc/mod_irc_odbc.erl:983 msgid "Server ~b" msgstr "" -#: mod_muc/mod_muc.erl:449 +#: mod_muc/mod_muc.erl:449 mod_muc/mod_muc_odbc.erl:456 msgid "Only service administrators are allowed to send service messages" msgstr "" "Seulmint les manaedjeus d' siervices polèt evoyî des messaedjes di siervice" -#: mod_muc/mod_muc.erl:493 +#: mod_muc/mod_muc.erl:493 mod_muc/mod_muc_odbc.erl:500 msgid "Room creation is denied by service policy" msgstr "L' ahivaedje del såle est rfuzé pal politike do siervice" -#: mod_muc/mod_muc.erl:500 +#: mod_muc/mod_muc.erl:500 mod_muc/mod_muc_odbc.erl:507 msgid "Conference room does not exist" msgstr "Li såle di conferince n' egzistêye nén" -#: mod_muc/mod_muc.erl:581 +#: mod_muc/mod_muc.erl:582 mod_muc/mod_muc_odbc.erl:595 msgid "Chatrooms" msgstr "Såles di berdelaedje" -#: mod_muc/mod_muc.erl:711 +#: mod_muc/mod_muc.erl:712 mod_muc/mod_muc_odbc.erl:729 #, fuzzy msgid "You need a client that supports x:data to register the nickname" msgstr "" "Vos avoz mezåjhe d' on cliyint ki sopoite x:data po-z edjîstrer on metou no" -#: mod_muc/mod_muc.erl:717 +#: mod_muc/mod_muc.erl:718 mod_muc/mod_muc_odbc.erl:735 msgid "Nickname Registration at " msgstr "Edjîstraedje di metou no amon " -#: mod_muc/mod_muc.erl:721 +#: mod_muc/mod_muc.erl:722 mod_muc/mod_muc_odbc.erl:739 msgid "Enter nickname you want to register" msgstr "Dinez l' metou no ki vos vloz edjîstrer" -#: mod_muc/mod_muc.erl:722 mod_roster.erl:944 mod_roster_odbc.erl:1049 -#: mod_vcard.erl:358 mod_vcard.erl:471 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:447 +#: mod_muc/mod_muc.erl:723 mod_muc/mod_muc_odbc.erl:740 +#: mod_muc/mod_muc_room.erl:3810 mod_roster.erl:944 mod_roster_odbc.erl:1061 +#: mod_vcard.erl:364 mod_vcard.erl:477 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:453 msgid "Nickname" msgstr "Metou no" -#: mod_muc/mod_muc.erl:761 mod_muc/mod_muc_room.erl:933 -#: mod_muc/mod_muc_room.erl:1577 +#: mod_muc/mod_muc.erl:762 mod_muc/mod_muc_odbc.erl:784 +#: mod_muc/mod_muc_room.erl:1064 mod_muc/mod_muc_room.erl:1787 #, fuzzy msgid "That nickname is registered by another person" msgstr "Li metou no est ddja edjîstré pa ene ôte sakî" -#: mod_muc/mod_muc.erl:787 +#: mod_muc/mod_muc.erl:788 mod_muc/mod_muc_odbc.erl:811 msgid "You must fill in field \"Nickname\" in the form" msgstr "Vos dvoz rimpli l' tchamp «Metou no» dins l' formiulaire" -#: mod_muc/mod_muc.erl:807 +#: mod_muc/mod_muc.erl:808 mod_muc/mod_muc_odbc.erl:831 msgid "ejabberd MUC module" msgstr "Module MUC (såles di berdelaedje) po ejabberd" @@ -638,8 +644,8 @@ msgstr "a stî pité evoye cåze d' èn arestaedje do sistinme" msgid "is now known as" msgstr "est asteure kinoxhou come" -#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:689 -#: mod_muc/mod_muc_room.erl:2138 +#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:688 +#: mod_muc/mod_muc_room.erl:2393 msgid " has set the subject to: " msgstr " a candjî l' tite a: " @@ -739,35 +745,51 @@ msgstr "nôvimbe" msgid "December" msgstr "decimbe" -#: mod_muc/mod_muc_log.erl:751 +#: mod_muc/mod_muc_log.erl:750 msgid "Room Configuration" msgstr "Apontiaedje del såle" -#: mod_muc/mod_muc_log.erl:760 +#: mod_muc/mod_muc_log.erl:759 #, fuzzy msgid "Room Occupants" msgstr "Nombe di prezints" -#: mod_muc/mod_muc_room.erl:170 +#: mod_muc/mod_muc_room.erl:174 msgid "Traffic rate limit is exceeded" msgstr "Li limite pol volume di trafik a stî passêye" -#: mod_muc/mod_muc_room.erl:242 +#: mod_muc/mod_muc_room.erl:246 msgid "" "This participant is kicked from the room because he sent an error message" msgstr "" "Ci pårticipant ci a stî pité evoye del såle cåze k' il a-st evoyî on " "messaedje d' aroke" -#: mod_muc/mod_muc_room.erl:251 +#: mod_muc/mod_muc_room.erl:255 msgid "It is not allowed to send private messages to the conference" msgstr "On n' pout nén evoyî des messaedjes privés dins cisse conferince ci" -#: mod_muc/mod_muc_room.erl:296 +#: mod_muc/mod_muc_room.erl:332 +msgid "Please, wait for a while before sending new voice request" +msgstr "" + +#: mod_muc/mod_muc_room.erl:347 +msgid "Voice requests are disabled in this conference" +msgstr "" + +#: mod_muc/mod_muc_room.erl:364 +msgid "Failed to extract JID from your voice request approval" +msgstr "" + +#: mod_muc/mod_muc_room.erl:393 +msgid "Only moderators can approve voice requests" +msgstr "" + +#: mod_muc/mod_muc_room.erl:408 msgid "Improper message type" msgstr "Sôre di messaedje nén valide" -#: mod_muc/mod_muc_room.erl:406 +#: mod_muc/mod_muc_room.erl:518 msgid "" "This participant is kicked from the room because he sent an error message to " "another participant" @@ -775,34 +797,34 @@ msgstr "" "Ci pårticipant ci a stî pité evoye del såle cåze k' il a-st evoyî on " "messaedje d' aroke a èn ôte pårticipant" -#: mod_muc/mod_muc_room.erl:419 +#: mod_muc/mod_muc_room.erl:531 msgid "It is not allowed to send private messages of type \"groupchat\"" msgstr "C' est nén possibe d' evoyî des messaedjes privés del sôre «groupchat»" -#: mod_muc/mod_muc_room.erl:431 mod_muc/mod_muc_room.erl:486 +#: mod_muc/mod_muc_room.erl:543 mod_muc/mod_muc_room.erl:611 msgid "Recipient is not in the conference room" msgstr "Li riçuveu n' est nén dins l' såle di conferince" -#: mod_muc/mod_muc_room.erl:451 mod_muc/mod_muc_room.erl:829 -#: mod_muc/mod_muc_room.erl:3609 -msgid "Only occupants are allowed to send messages to the conference" -msgstr "Seulmint les prezints polèt evoyî des messaedjes al conferince" - -#: mod_muc/mod_muc_room.erl:460 +#: mod_muc/mod_muc_room.erl:564 mod_muc/mod_muc_room.erl:585 msgid "It is not allowed to send private messages" msgstr "Ci n' est nén permetou d' evoyî des messaedjes privés" -#: mod_muc/mod_muc_room.erl:509 +#: mod_muc/mod_muc_room.erl:576 mod_muc/mod_muc_room.erl:956 +#: mod_muc/mod_muc_room.erl:4040 +msgid "Only occupants are allowed to send messages to the conference" +msgstr "Seulmint les prezints polèt evoyî des messaedjes al conferince" + +#: mod_muc/mod_muc_room.erl:634 msgid "Only occupants are allowed to send queries to the conference" msgstr "Seulmint les prezints polèt evoyî des cweraedjes sol conferince" -#: mod_muc/mod_muc_room.erl:521 +#: mod_muc/mod_muc_room.erl:646 msgid "Queries to the conference members are not allowed in this room" msgstr "" "Les cweraedjes des mimbes del conferince ni sont nén permetous dins cisse " "såle ci" -#: mod_muc/mod_muc_room.erl:805 +#: mod_muc/mod_muc_room.erl:932 #, fuzzy msgid "" "Only moderators and participants are allowed to change the subject in this " @@ -811,208 +833,243 @@ msgstr "" "Seulmint les moderateus et les pårticipants polèt candjî l' sudjet dins " "cisse såle ci" -#: mod_muc/mod_muc_room.erl:810 +#: mod_muc/mod_muc_room.erl:937 #, fuzzy msgid "Only moderators are allowed to change the subject in this room" msgstr "Seulmint les moderateus polèt candjî l' sudjet dins cisse såle ci" -#: mod_muc/mod_muc_room.erl:820 +#: mod_muc/mod_muc_room.erl:947 msgid "Visitors are not allowed to send messages to all occupants" msgstr "Les viziteus n' polèt nén evoyî des messaedjes a tos les prezints" -#: mod_muc/mod_muc_room.erl:891 +#: mod_muc/mod_muc_room.erl:1021 msgid "" "This participant is kicked from the room because he sent an error presence" msgstr "" "Ci pårticipant ci a stî pité evoye del såle cåze k' il a-st evoyî ene aroke " "di prezince" -#: mod_muc/mod_muc_room.erl:909 +#: mod_muc/mod_muc_room.erl:1040 msgid "Visitors are not allowed to change their nicknames in this room" msgstr "Les viziteus èn polèt nén candjî leus metous no po ç' såle ci" -#: mod_muc/mod_muc_room.erl:922 mod_muc/mod_muc_room.erl:1569 +#: mod_muc/mod_muc_room.erl:1053 mod_muc/mod_muc_room.erl:1779 #, fuzzy msgid "That nickname is already in use by another occupant" msgstr "Li metou no est ddja eployî pa ene ôte sakî sol såle" -#: mod_muc/mod_muc_room.erl:1558 +#: mod_muc/mod_muc_room.erl:1768 msgid "You have been banned from this room" msgstr "Vos avoz stî bani di cisse såle ci" -#: mod_muc/mod_muc_room.erl:1561 +#: mod_muc/mod_muc_room.erl:1771 #, fuzzy msgid "Membership is required to enter this room" msgstr "I fåt esse mimbe po poleur intrer dins cisse såle ci" -#: mod_muc/mod_muc_room.erl:1597 +#: mod_muc/mod_muc_room.erl:1807 msgid "This room is not anonymous" msgstr "Cisse såle ci n' est nén anonime" -#: mod_muc/mod_muc_room.erl:1623 +#: mod_muc/mod_muc_room.erl:1833 #, fuzzy msgid "A password is required to enter this room" msgstr "I fåt dner on scret po poleur intrer dins cisse såle ci" -#: mod_muc/mod_muc_room.erl:1645 mod_register.erl:246 +#: mod_muc/mod_muc_room.erl:1855 mod_register.erl:246 msgid "Too many CAPTCHA requests" msgstr "" -#: mod_muc/mod_muc_room.erl:1654 -msgid "Unable to generate a captcha" +#: mod_muc/mod_muc_room.erl:1864 mod_register.erl:251 +msgid "Unable to generate a CAPTCHA" msgstr "" -#: mod_muc/mod_muc_room.erl:1664 +#: mod_muc/mod_muc_room.erl:1874 msgid "Incorrect password" msgstr "Sicret nén corek" -#: mod_muc/mod_muc_room.erl:2193 +#: mod_muc/mod_muc_room.erl:2448 msgid "Administrator privileges required" msgstr "I fåt des priviledjes di manaedjeu" -#: mod_muc/mod_muc_room.erl:2208 +#: mod_muc/mod_muc_room.erl:2463 msgid "Moderator privileges required" msgstr "I fåt des priviledjes di moderateu" -#: mod_muc/mod_muc_room.erl:2363 +#: mod_muc/mod_muc_room.erl:2619 msgid "Jabber ID ~s is invalid" msgstr "Li Jabber ID ~s n' est nén valide" -#: mod_muc/mod_muc_room.erl:2377 +#: mod_muc/mod_muc_room.erl:2633 msgid "Nickname ~s does not exist in the room" msgstr "Li metou no ~s n' egzistêye nén dins l' såle" -#: mod_muc/mod_muc_room.erl:2403 mod_muc/mod_muc_room.erl:2797 +#: mod_muc/mod_muc_room.erl:2659 mod_muc/mod_muc_room.erl:3049 msgid "Invalid affiliation: ~s" msgstr "Afiyaedje nén valide: ~s" -#: mod_muc/mod_muc_room.erl:2460 +#: mod_muc/mod_muc_room.erl:2713 msgid "Invalid role: ~s" msgstr "Role nén valide: ~s" -#: mod_muc/mod_muc_room.erl:2774 mod_muc/mod_muc_room.erl:2810 +#: mod_muc/mod_muc_room.erl:3026 mod_muc/mod_muc_room.erl:3062 msgid "Owner privileges required" msgstr "I fåt des priviledjes di prôpietaire" -#: mod_muc/mod_muc_room.erl:2941 +#: mod_muc/mod_muc_room.erl:3195 #, fuzzy msgid "Configuration of room ~s" msgstr "Apontiaedje po " -#: mod_muc/mod_muc_room.erl:2946 +#: mod_muc/mod_muc_room.erl:3200 msgid "Room title" msgstr "Tite del såle" -#: mod_muc/mod_muc_room.erl:2949 mod_muc/mod_muc_room.erl:3388 +#: mod_muc/mod_muc_room.erl:3203 mod_muc/mod_muc_room.erl:3692 #, fuzzy msgid "Room description" msgstr "Discrijhaedje:" -#: mod_muc/mod_muc_room.erl:2956 +#: mod_muc/mod_muc_room.erl:3210 msgid "Make room persistent" msgstr "Rinde li såle permaninte" -#: mod_muc/mod_muc_room.erl:2961 +#: mod_muc/mod_muc_room.erl:3215 msgid "Make room public searchable" msgstr "Rinde li såle di berdelaedje cweråve publicmint" -#: mod_muc/mod_muc_room.erl:2964 +#: mod_muc/mod_muc_room.erl:3218 msgid "Make participants list public" msgstr "Rinde publike li djivêye des pårticipants" -#: mod_muc/mod_muc_room.erl:2967 +#: mod_muc/mod_muc_room.erl:3221 msgid "Make room password protected" msgstr "Rinde li såle di berdelaedje protedjeye pa scret" -#: mod_muc/mod_muc_room.erl:2978 +#: mod_muc/mod_muc_room.erl:3232 msgid "Maximum Number of Occupants" msgstr "Nombe macsimom di prezints" -#: mod_muc/mod_muc_room.erl:2985 +#: mod_muc/mod_muc_room.erl:3239 msgid "No limit" msgstr "Pont d' limite" -#: mod_muc/mod_muc_room.erl:2996 +#: mod_muc/mod_muc_room.erl:3250 msgid "Present real Jabber IDs to" msgstr "Mostrer les vraiys Jabber IDs a" -#: mod_muc/mod_muc_room.erl:3004 +#: mod_muc/mod_muc_room.erl:3258 mod_muc/mod_muc_room.erl:3292 msgid "moderators only" msgstr "les moderateus seulmint" -#: mod_muc/mod_muc_room.erl:3006 +#: mod_muc/mod_muc_room.erl:3260 mod_muc/mod_muc_room.erl:3294 msgid "anyone" msgstr "tot l' minme kî" -#: mod_muc/mod_muc_room.erl:3008 +#: mod_muc/mod_muc_room.erl:3262 msgid "Make room members-only" msgstr "Rinde li såle di berdelaedje ristrindowe ås mimbes seulmint" -#: mod_muc/mod_muc_room.erl:3011 +#: mod_muc/mod_muc_room.erl:3265 msgid "Make room moderated" msgstr "Rinde li såle di berdelaedje moderêye" -#: mod_muc/mod_muc_room.erl:3014 +#: mod_muc/mod_muc_room.erl:3268 msgid "Default users as participants" msgstr "Les uzeus sont des pårticipants come prémetowe dujhance" -#: mod_muc/mod_muc_room.erl:3017 +#: mod_muc/mod_muc_room.erl:3271 #, fuzzy msgid "Allow users to change the subject" msgstr "Les uzeus polèt candjî l' tite" -#: mod_muc/mod_muc_room.erl:3020 +#: mod_muc/mod_muc_room.erl:3274 msgid "Allow users to send private messages" msgstr "Les uzeus polèt evoyî des messaedjes privés" -#: mod_muc/mod_muc_room.erl:3023 +#: mod_muc/mod_muc_room.erl:3279 +#, fuzzy +msgid "Allow visitors to send private messages to" +msgstr "Les uzeus polèt evoyî des messaedjes privés" + +#: mod_muc/mod_muc_room.erl:3290 +msgid "nobody" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3296 msgid "Allow users to query other users" msgstr "Les uzeus polèt cweri ls ôtes uzeus" -#: mod_muc/mod_muc_room.erl:3026 +#: mod_muc/mod_muc_room.erl:3299 msgid "Allow users to send invites" msgstr "Les uzeus polèt evoyî priyaedjes" -#: mod_muc/mod_muc_room.erl:3029 +#: mod_muc/mod_muc_room.erl:3302 msgid "Allow visitors to send status text in presence updates" msgstr "" "Permete ki les viziteus evoyexhe des tecse d' estat dins leus messaedjes di " "prezince" -#: mod_muc/mod_muc_room.erl:3032 +#: mod_muc/mod_muc_room.erl:3305 msgid "Allow visitors to change nickname" msgstr "Permete ki les viziteus candjexhe leus metous nos" -#: mod_muc/mod_muc_room.erl:3038 +#: mod_muc/mod_muc_room.erl:3308 #, fuzzy -msgid "Make room captcha protected" +msgid "Allow visitors to send voice requests" +msgstr "Les uzeus polèt evoyî priyaedjes" + +#: mod_muc/mod_muc_room.erl:3311 +msgid "Minimum interval between voice requests (in seconds)" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3317 +#, fuzzy +msgid "Make room CAPTCHA protected" msgstr "Rinde li såle di berdelaedje protedjeye pa scret" -#: mod_muc/mod_muc_room.erl:3043 +#: mod_muc/mod_muc_room.erl:3322 msgid "Exclude Jabber IDs from CAPTCHA challenge" msgstr "" -#: mod_muc/mod_muc_room.erl:3050 +#: mod_muc/mod_muc_room.erl:3329 msgid "Enable logging" msgstr "Mete en alaedje li djournå" -#: mod_muc/mod_muc_room.erl:3058 +#: mod_muc/mod_muc_room.erl:3337 msgid "You need an x:data capable client to configure room" msgstr "I vs fåt on cliyint ki sopoite x:data por vos poleur apontyî l' såle" -#: mod_muc/mod_muc_room.erl:3390 +#: mod_muc/mod_muc_room.erl:3694 msgid "Number of occupants" msgstr "Nombe di prezints" -#: mod_muc/mod_muc_room.erl:3446 +#: mod_muc/mod_muc_room.erl:3750 msgid "private, " msgstr "privé, " -#: mod_muc/mod_muc_room.erl:3529 +#: mod_muc/mod_muc_room.erl:3799 +msgid "Voice request" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3803 +msgid "Either approve or decline the voice request." +msgstr "" + +#: mod_muc/mod_muc_room.erl:3809 +#, fuzzy +msgid "User JID" +msgstr "Uzeu " + +#: mod_muc/mod_muc_room.erl:3811 +msgid "Grant voice to this person?" +msgstr "" + +#: mod_muc/mod_muc_room.erl:3960 msgid "~s invites you to the room ~s" msgstr "~s vos preye sol såle ~s" -#: mod_muc/mod_muc_room.erl:3538 +#: mod_muc/mod_muc_room.erl:3969 msgid "the password is" msgstr "li scret est" @@ -1028,14 +1085,15 @@ msgid "~s's Offline Messages Queue" msgstr "messaedjes ki ratindèt el cawêye po ~s" #: mod_offline.erl:563 mod_offline_odbc.erl:411 mod_roster.erl:987 -#: mod_roster_odbc.erl:1092 mod_shared_roster.erl:896 -#: mod_shared_roster.erl:1005 web/ejabberd_web_admin.erl:833 +#: mod_roster_odbc.erl:1104 mod_shared_roster.erl:901 +#: mod_shared_roster.erl:1010 mod_shared_roster_odbc.erl:930 +#: mod_shared_roster_odbc.erl:1039 web/ejabberd_web_admin.erl:833 #: web/ejabberd_web_admin.erl:874 web/ejabberd_web_admin.erl:942 #: web/ejabberd_web_admin.erl:978 web/ejabberd_web_admin.erl:1019 -#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1758 -#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1961 -#: web/ejabberd_web_admin.erl:2030 web/ejabberd_web_admin.erl:2134 -#: web/ejabberd_web_admin.erl:2159 web/ejabberd_web_admin.erl:2247 +#: web/ejabberd_web_admin.erl:1508 web/ejabberd_web_admin.erl:1760 +#: web/ejabberd_web_admin.erl:1931 web/ejabberd_web_admin.erl:1963 +#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2135 +#: web/ejabberd_web_admin.erl:2160 web/ejabberd_web_admin.erl:2248 msgid "Submitted" msgstr "Candjmints evoyîs" @@ -1055,8 +1113,9 @@ msgstr "Po" msgid "Packet" msgstr "Paket" -#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:903 -#: web/ejabberd_web_admin.erl:882 web/ejabberd_web_admin.erl:986 +#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:908 +#: mod_shared_roster_odbc.erl:937 web/ejabberd_web_admin.erl:882 +#: web/ejabberd_web_admin.erl:986 msgid "Delete Selected" msgstr "Disfacer les elemints tchoezis" @@ -1073,105 +1132,105 @@ msgstr "Messaedjes ki ratindèt" msgid "ejabberd SOCKS5 Bytestreams module" msgstr "Module SOCKS5 Bytestreams po ejabberd" -#: mod_pubsub/mod_pubsub.erl:1119 mod_pubsub/mod_pubsub_odbc.erl:928 +#: mod_pubsub/mod_pubsub.erl:1120 mod_pubsub/mod_pubsub_odbc.erl:929 msgid "Publish-Subscribe" msgstr "Eplaidaedje-abounmint" -#: mod_pubsub/mod_pubsub.erl:1213 mod_pubsub/mod_pubsub_odbc.erl:1024 +#: mod_pubsub/mod_pubsub.erl:1214 mod_pubsub/mod_pubsub_odbc.erl:1025 msgid "ejabberd Publish-Subscribe module" msgstr "Module d' eplaidaedje-abounmint po ejabberd" -#: mod_pubsub/mod_pubsub.erl:1496 mod_pubsub/mod_pubsub_odbc.erl:1311 +#: mod_pubsub/mod_pubsub.erl:1497 mod_pubsub/mod_pubsub_odbc.erl:1312 msgid "PubSub subscriber request" msgstr "Dimande d' eplaidaedje-abounmint d' èn abouné" -#: mod_pubsub/mod_pubsub.erl:1498 mod_pubsub/mod_pubsub_odbc.erl:1313 +#: mod_pubsub/mod_pubsub.erl:1499 mod_pubsub/mod_pubsub_odbc.erl:1314 msgid "Choose whether to approve this entity's subscription." msgstr "Tchoezi s' i fåt aprover ou nén l' abounmint di ciste intité." -#: mod_pubsub/mod_pubsub.erl:1504 mod_pubsub/mod_pubsub_odbc.erl:1319 +#: mod_pubsub/mod_pubsub.erl:1505 mod_pubsub/mod_pubsub_odbc.erl:1320 msgid "Node ID" msgstr "ID d' nuk" -#: mod_pubsub/mod_pubsub.erl:1509 mod_pubsub/mod_pubsub_odbc.erl:1324 +#: mod_pubsub/mod_pubsub.erl:1510 mod_pubsub/mod_pubsub_odbc.erl:1325 msgid "Subscriber Address" msgstr "Adresse di l' abouné" -#: mod_pubsub/mod_pubsub.erl:1515 mod_pubsub/mod_pubsub_odbc.erl:1330 +#: mod_pubsub/mod_pubsub.erl:1516 mod_pubsub/mod_pubsub_odbc.erl:1331 msgid "Allow this Jabber ID to subscribe to this pubsub node?" msgstr "" "Permete ki ci Jabber ID ci si poye abouner a ç' nuk eplaidaedje-abounmint ci?" -#: mod_pubsub/mod_pubsub.erl:3416 mod_pubsub/mod_pubsub_odbc.erl:3229 +#: mod_pubsub/mod_pubsub.erl:3474 mod_pubsub/mod_pubsub_odbc.erl:3287 msgid "Deliver payloads with event notifications" msgstr "Evoyî l' contnou avou les notifiaedjes d' evenmints" -#: mod_pubsub/mod_pubsub.erl:3417 mod_pubsub/mod_pubsub_odbc.erl:3230 +#: mod_pubsub/mod_pubsub.erl:3475 mod_pubsub/mod_pubsub_odbc.erl:3288 msgid "Deliver event notifications" msgstr "Evoyî des notifiaedjes d' evenmints" -#: mod_pubsub/mod_pubsub.erl:3418 mod_pubsub/mod_pubsub_odbc.erl:3231 +#: mod_pubsub/mod_pubsub.erl:3476 mod_pubsub/mod_pubsub_odbc.erl:3289 msgid "Notify subscribers when the node configuration changes" msgstr "Notifyî åzès abounés cwand l' apontiaedje do nuk candje" -#: mod_pubsub/mod_pubsub.erl:3419 mod_pubsub/mod_pubsub_odbc.erl:3232 +#: mod_pubsub/mod_pubsub.erl:3477 mod_pubsub/mod_pubsub_odbc.erl:3290 msgid "Notify subscribers when the node is deleted" msgstr "Notifyî åzès abounés cwand l' nuk est disfacé" -#: mod_pubsub/mod_pubsub.erl:3420 mod_pubsub/mod_pubsub_odbc.erl:3233 +#: mod_pubsub/mod_pubsub.erl:3478 mod_pubsub/mod_pubsub_odbc.erl:3291 msgid "Notify subscribers when items are removed from the node" msgstr "Notifyî åzès abounés cwand des cayets sont oisté foû do nuk" -#: mod_pubsub/mod_pubsub.erl:3421 mod_pubsub/mod_pubsub_odbc.erl:3234 +#: mod_pubsub/mod_pubsub.erl:3479 mod_pubsub/mod_pubsub_odbc.erl:3292 msgid "Persist items to storage" msgstr "Cayets permanints a wårder" -#: mod_pubsub/mod_pubsub.erl:3422 mod_pubsub/mod_pubsub_odbc.erl:3235 +#: mod_pubsub/mod_pubsub.erl:3480 mod_pubsub/mod_pubsub_odbc.erl:3293 msgid "A friendly name for the node" msgstr "On no uzeu-ahessåve pol nuk" -#: mod_pubsub/mod_pubsub.erl:3423 mod_pubsub/mod_pubsub_odbc.erl:3236 +#: mod_pubsub/mod_pubsub.erl:3481 mod_pubsub/mod_pubsub_odbc.erl:3294 msgid "Max # of items to persist" msgstr "Nombe macsimoms di cayets permanints" -#: mod_pubsub/mod_pubsub.erl:3424 mod_pubsub/mod_pubsub_odbc.erl:3237 +#: mod_pubsub/mod_pubsub.erl:3482 mod_pubsub/mod_pubsub_odbc.erl:3295 msgid "Whether to allow subscriptions" msgstr "Si on permete les abounmints" -#: mod_pubsub/mod_pubsub.erl:3425 mod_pubsub/mod_pubsub_odbc.erl:3238 +#: mod_pubsub/mod_pubsub.erl:3483 mod_pubsub/mod_pubsub_odbc.erl:3296 msgid "Specify the access model" msgstr "Sipecifyî l' modele d' accès" -#: mod_pubsub/mod_pubsub.erl:3428 mod_pubsub/mod_pubsub_odbc.erl:3241 +#: mod_pubsub/mod_pubsub.erl:3486 mod_pubsub/mod_pubsub_odbc.erl:3299 msgid "Roster groups allowed to subscribe" msgstr "Pårtaedjîs groupes di soçons k' on s' î pout abouner" -#: mod_pubsub/mod_pubsub.erl:3429 mod_pubsub/mod_pubsub_odbc.erl:3242 +#: mod_pubsub/mod_pubsub.erl:3487 mod_pubsub/mod_pubsub_odbc.erl:3300 msgid "Specify the publisher model" msgstr "Dinez l' modele d' eplaideu" -#: mod_pubsub/mod_pubsub.erl:3431 mod_pubsub/mod_pubsub_odbc.erl:3244 +#: mod_pubsub/mod_pubsub.erl:3489 mod_pubsub/mod_pubsub_odbc.erl:3302 msgid "Purge all items when the relevant publisher goes offline" msgstr "" -#: mod_pubsub/mod_pubsub.erl:3432 mod_pubsub/mod_pubsub_odbc.erl:3245 +#: mod_pubsub/mod_pubsub.erl:3490 mod_pubsub/mod_pubsub_odbc.erl:3303 #, fuzzy msgid "Specify the event message type" msgstr "Sipecifyî l' modele d' accès" -#: mod_pubsub/mod_pubsub.erl:3434 mod_pubsub/mod_pubsub_odbc.erl:3247 +#: mod_pubsub/mod_pubsub.erl:3492 mod_pubsub/mod_pubsub_odbc.erl:3305 msgid "Max payload size in bytes" msgstr "Contnou macsimom en octets" -#: mod_pubsub/mod_pubsub.erl:3435 mod_pubsub/mod_pubsub_odbc.erl:3248 +#: mod_pubsub/mod_pubsub.erl:3493 mod_pubsub/mod_pubsub_odbc.erl:3306 msgid "When to send the last published item" msgstr "Cwand evoyî l' dierin cayet eplaidî" -#: mod_pubsub/mod_pubsub.erl:3437 mod_pubsub/mod_pubsub_odbc.erl:3250 +#: mod_pubsub/mod_pubsub.erl:3495 mod_pubsub/mod_pubsub_odbc.erl:3308 msgid "Only deliver notifications to available users" msgstr "Seulmint evoyî des notifiaedje åzès uzeus disponibes" -#: mod_pubsub/mod_pubsub.erl:3438 mod_pubsub/mod_pubsub_odbc.erl:3251 +#: mod_pubsub/mod_pubsub.erl:3496 mod_pubsub/mod_pubsub_odbc.erl:3309 msgid "The collections with which a node is affiliated" msgstr "" @@ -1190,15 +1249,11 @@ msgid "Choose a username and password to register with this server" msgstr "" "Tchoezixhoz on no d' uzeu eyet on scret po vs edjîstrer so ç' sierveu ci" -#: mod_register.erl:230 mod_vcard.erl:358 mod_vcard_odbc.erl:336 -#: web/ejabberd_web_admin.erl:1516 web/ejabberd_web_admin.erl:1573 +#: mod_register.erl:230 mod_vcard.erl:364 mod_vcard_odbc.erl:342 +#: web/ejabberd_web_admin.erl:1515 web/ejabberd_web_admin.erl:1572 msgid "User" msgstr "Uzeu" -#: mod_register.erl:251 -msgid "Unable to generate a CAPTCHA" -msgstr "" - #: mod_register.erl:316 mod_register.erl:361 #, fuzzy msgid "The password is too weak" @@ -1209,120 +1264,123 @@ msgstr "li scret est" msgid "Users are not allowed to register accounts so quickly" msgstr "Les noveas uzeus n' si polèt nén edjîstrer si raddimint" -#: mod_roster.erl:938 mod_roster_odbc.erl:1043 web/ejabberd_web_admin.erl:1699 -#: web/ejabberd_web_admin.erl:1884 web/ejabberd_web_admin.erl:1895 -#: web/ejabberd_web_admin.erl:2218 +#: mod_roster.erl:938 mod_roster_odbc.erl:1055 web/ejabberd_web_admin.erl:1701 +#: web/ejabberd_web_admin.erl:1886 web/ejabberd_web_admin.erl:1897 +#: web/ejabberd_web_admin.erl:2219 msgid "None" msgstr "Nole" -#: mod_roster.erl:945 mod_roster_odbc.erl:1050 +#: mod_roster.erl:945 mod_roster_odbc.erl:1062 msgid "Subscription" msgstr "Abounmimnt" -#: mod_roster.erl:946 mod_roster_odbc.erl:1051 +#: mod_roster.erl:946 mod_roster_odbc.erl:1063 msgid "Pending" msgstr "Ratindant" -#: mod_roster.erl:947 mod_roster_odbc.erl:1052 +#: mod_roster.erl:947 mod_roster_odbc.erl:1064 msgid "Groups" msgstr "Groupes" -#: mod_roster.erl:974 mod_roster_odbc.erl:1079 +#: mod_roster.erl:974 mod_roster_odbc.erl:1091 msgid "Validate" msgstr "Valider" -#: mod_roster.erl:982 mod_roster_odbc.erl:1087 +#: mod_roster.erl:982 mod_roster_odbc.erl:1099 msgid "Remove" msgstr "Oister" -#: mod_roster.erl:985 mod_roster_odbc.erl:1090 +#: mod_roster.erl:985 mod_roster_odbc.erl:1102 msgid "Roster of " msgstr "Djivêye des soçons da " -#: mod_roster.erl:988 mod_roster_odbc.erl:1093 mod_shared_roster.erl:897 -#: mod_shared_roster.erl:1006 web/ejabberd_web_admin.erl:834 +#: mod_roster.erl:988 mod_roster_odbc.erl:1105 mod_shared_roster.erl:902 +#: mod_shared_roster.erl:1011 mod_shared_roster_odbc.erl:931 +#: mod_shared_roster_odbc.erl:1040 web/ejabberd_web_admin.erl:834 #: web/ejabberd_web_admin.erl:875 web/ejabberd_web_admin.erl:943 #: web/ejabberd_web_admin.erl:979 web/ejabberd_web_admin.erl:1020 -#: web/ejabberd_web_admin.erl:1510 web/ejabberd_web_admin.erl:1759 -#: web/ejabberd_web_admin.erl:1930 web/ejabberd_web_admin.erl:2135 -#: web/ejabberd_web_admin.erl:2160 +#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1761 +#: web/ejabberd_web_admin.erl:1932 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2161 msgid "Bad format" msgstr "Mwais fôrmat" -#: mod_roster.erl:995 mod_roster_odbc.erl:1100 +#: mod_roster.erl:995 mod_roster_odbc.erl:1112 msgid "Add Jabber ID" msgstr "Radjouter èn ID Jabber" -#: mod_roster.erl:1094 mod_roster_odbc.erl:1199 +#: mod_roster.erl:1094 mod_roster_odbc.erl:1211 msgid "Roster" msgstr "Djivêye des soçons" -#: mod_shared_roster.erl:852 mod_shared_roster.erl:894 -#: mod_shared_roster.erl:1002 +#: mod_shared_roster.erl:857 mod_shared_roster.erl:899 +#: mod_shared_roster.erl:1007 mod_shared_roster_odbc.erl:886 +#: mod_shared_roster_odbc.erl:928 mod_shared_roster_odbc.erl:1036 msgid "Shared Roster Groups" msgstr "Pårtaedjîs groupes ezès djivêyes di soçons" -#: mod_shared_roster.erl:890 web/ejabberd_web_admin.erl:1366 -#: web/ejabberd_web_admin.erl:2460 +#: mod_shared_roster.erl:895 mod_shared_roster_odbc.erl:924 +#: web/ejabberd_web_admin.erl:1365 web/ejabberd_web_admin.erl:2461 msgid "Add New" msgstr "Radjouter" -#: mod_shared_roster.erl:973 +#: mod_shared_roster.erl:978 mod_shared_roster_odbc.erl:1007 msgid "Name:" msgstr "Pitit no:" -#: mod_shared_roster.erl:978 +#: mod_shared_roster.erl:983 mod_shared_roster_odbc.erl:1012 msgid "Description:" msgstr "Discrijhaedje:" -#: mod_shared_roster.erl:986 +#: mod_shared_roster.erl:991 mod_shared_roster_odbc.erl:1020 msgid "Members:" msgstr "Mimbes:" -#: mod_shared_roster.erl:994 +#: mod_shared_roster.erl:999 mod_shared_roster_odbc.erl:1028 msgid "Displayed Groups:" msgstr "Groupes håynés:" -#: mod_shared_roster.erl:1003 +#: mod_shared_roster.erl:1008 mod_shared_roster_odbc.erl:1037 msgid "Group " msgstr "Groupe " -#: mod_shared_roster.erl:1012 web/ejabberd_web_admin.erl:840 -#: web/ejabberd_web_admin.erl:884 web/ejabberd_web_admin.erl:949 -#: web/ejabberd_web_admin.erl:1026 web/ejabberd_web_admin.erl:2015 +#: mod_shared_roster.erl:1017 mod_shared_roster_odbc.erl:1046 +#: web/ejabberd_web_admin.erl:840 web/ejabberd_web_admin.erl:884 +#: web/ejabberd_web_admin.erl:949 web/ejabberd_web_admin.erl:1026 +#: web/ejabberd_web_admin.erl:2017 msgid "Submit" msgstr "Evoyî" -#: mod_vcard.erl:165 mod_vcard_ldap.erl:237 mod_vcard_odbc.erl:129 +#: mod_vcard.erl:165 mod_vcard_ldap.erl:238 mod_vcard_odbc.erl:129 msgid "Erlang Jabber Server" msgstr "Sierveu Jabber Erlang" -#: mod_vcard.erl:358 mod_vcard.erl:472 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:448 +#: mod_vcard.erl:364 mod_vcard.erl:478 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:454 msgid "Birthday" msgstr "Date d' askepiaedje" -#: mod_vcard.erl:358 mod_vcard.erl:474 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:450 +#: mod_vcard.erl:364 mod_vcard.erl:480 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:456 msgid "City" msgstr "Veye" -#: mod_vcard.erl:358 mod_vcard.erl:473 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:449 +#: mod_vcard.erl:364 mod_vcard.erl:479 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:455 msgid "Country" msgstr "Payis" -#: mod_vcard.erl:358 mod_vcard.erl:475 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:451 +#: mod_vcard.erl:364 mod_vcard.erl:481 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:457 msgid "Email" msgstr "Emile" -#: mod_vcard.erl:358 mod_vcard.erl:470 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:446 +#: mod_vcard.erl:364 mod_vcard.erl:476 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:452 msgid "Family Name" msgstr "No d' famile" -#: mod_vcard.erl:358 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_odbc.erl:342 msgid "" "Fill in the form to search for any matching Jabber User (Add * to the end of " "field to match substring)" @@ -1330,52 +1388,52 @@ msgstr "" "Rimplixhoz les tchamps do formulaire po cweri èn uzeu Jabber (radjouter «*» " "al fén do tchamp po cweri tot l' minme kéne fén d' tchinne" -#: mod_vcard.erl:358 mod_vcard.erl:467 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:443 +#: mod_vcard.erl:364 mod_vcard.erl:473 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:449 msgid "Full Name" msgstr "No etir" -#: mod_vcard.erl:358 mod_vcard.erl:469 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:445 +#: mod_vcard.erl:364 mod_vcard.erl:475 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:451 msgid "Middle Name" msgstr "No do mitan" -#: mod_vcard.erl:358 mod_vcard.erl:468 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:444 web/ejabberd_web_admin.erl:2004 +#: mod_vcard.erl:364 mod_vcard.erl:474 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:450 web/ejabberd_web_admin.erl:2006 msgid "Name" msgstr "No" -#: mod_vcard.erl:358 mod_vcard.erl:476 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:452 +#: mod_vcard.erl:364 mod_vcard.erl:482 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:458 msgid "Organization Name" msgstr "No d' l' organizåcion" -#: mod_vcard.erl:358 mod_vcard.erl:477 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:453 +#: mod_vcard.erl:364 mod_vcard.erl:483 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:459 msgid "Organization Unit" msgstr "Unité d' l' organizåcion" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "Search users in " msgstr "Cweri des uzeus dins " -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "You need an x:data capable client to search" msgstr "Vos avoz mezåjhe d' on cliyint ki sopoite x:data po fé on cweraedje" -#: mod_vcard.erl:383 mod_vcard_ldap.erl:483 mod_vcard_odbc.erl:361 +#: mod_vcard.erl:389 mod_vcard_ldap.erl:487 mod_vcard_odbc.erl:367 msgid "vCard User Search" msgstr "Calpin des uzeus" -#: mod_vcard.erl:439 mod_vcard_ldap.erl:537 mod_vcard_odbc.erl:415 +#: mod_vcard.erl:445 mod_vcard_ldap.erl:541 mod_vcard_odbc.erl:421 msgid "ejabberd vCard module" msgstr "Module vCard ejabberd" -#: mod_vcard.erl:463 mod_vcard_ldap.erl:547 mod_vcard_odbc.erl:439 +#: mod_vcard.erl:469 mod_vcard_ldap.erl:551 mod_vcard_odbc.erl:445 msgid "Search Results for " msgstr "Rizultats do cweraedje po " -#: mod_vcard_ldap.erl:458 +#: mod_vcard_ldap.erl:462 msgid "Fill in fields to search for any matching Jabber User" msgstr "Rimplixhoz les tchamps po cweri èn uzeu Jabber" @@ -1436,7 +1494,7 @@ msgstr "Mostrer crexhince" msgid "Show Integral Table" msgstr "Mostrer totå" -#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1937 +#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1939 msgid "Statistics" msgstr "Sitatistikes" @@ -1449,116 +1507,116 @@ msgstr "Nuk nén trové" msgid "Node not found" msgstr "Nuk nén trové" -#: web/ejabberd_web_admin.erl:1461 +#: web/ejabberd_web_admin.erl:1460 msgid "Host" msgstr "Sierveu" -#: web/ejabberd_web_admin.erl:1462 +#: web/ejabberd_web_admin.erl:1461 msgid "Registered Users" msgstr "Uzeus edjistrés" -#: web/ejabberd_web_admin.erl:1574 +#: web/ejabberd_web_admin.erl:1573 msgid "Offline Messages" msgstr "Messaedjes ki ratindèt" -#: web/ejabberd_web_admin.erl:1575 web/ejabberd_web_admin.erl:1765 +#: web/ejabberd_web_admin.erl:1574 web/ejabberd_web_admin.erl:1767 msgid "Last Activity" msgstr "Dierinne activité" -#: web/ejabberd_web_admin.erl:1657 web/ejabberd_web_admin.erl:1673 +#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 msgid "Registered Users:" msgstr "Uzeus edjistrés:" -#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 -#: web/ejabberd_web_admin.erl:2191 +#: web/ejabberd_web_admin.erl:1661 web/ejabberd_web_admin.erl:1677 +#: web/ejabberd_web_admin.erl:2192 msgid "Online Users:" msgstr "Uzeus raloyîs:" -#: web/ejabberd_web_admin.erl:1661 +#: web/ejabberd_web_admin.erl:1663 msgid "Outgoing s2s Connections:" msgstr "Raloyaedjes s2s e rexhowe:" -#: web/ejabberd_web_admin.erl:1663 +#: web/ejabberd_web_admin.erl:1665 msgid "Outgoing s2s Servers:" msgstr "Sierveus s2s e rexhowe:" -#: web/ejabberd_web_admin.erl:1732 web/mod_register_web.erl:175 +#: web/ejabberd_web_admin.erl:1734 web/mod_register_web.erl:175 #: web/mod_register_web.erl:372 web/mod_register_web.erl:381 #: web/mod_register_web.erl:411 msgid "Change Password" msgstr "Candjî l' sicret" -#: web/ejabberd_web_admin.erl:1756 +#: web/ejabberd_web_admin.erl:1758 msgid "User " msgstr "Uzeu " -#: web/ejabberd_web_admin.erl:1763 +#: web/ejabberd_web_admin.erl:1765 msgid "Connected Resources:" msgstr "Raloyî avou les rsoûces:" -#: web/ejabberd_web_admin.erl:1764 web/mod_register_web.erl:227 +#: web/ejabberd_web_admin.erl:1766 web/mod_register_web.erl:227 #: web/mod_register_web.erl:519 msgid "Password:" msgstr "Sicret:" -#: web/ejabberd_web_admin.erl:1826 +#: web/ejabberd_web_admin.erl:1828 msgid "No Data" msgstr "Nole dinêye disponibe" -#: web/ejabberd_web_admin.erl:1904 +#: web/ejabberd_web_admin.erl:1906 msgid "Nodes" msgstr "Nuks" -#: web/ejabberd_web_admin.erl:1927 web/ejabberd_web_admin.erl:1949 +#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1951 msgid "Node " msgstr "Nuk " -#: web/ejabberd_web_admin.erl:1936 +#: web/ejabberd_web_admin.erl:1938 msgid "Listened Ports" msgstr "Pôrts drovous" -#: web/ejabberd_web_admin.erl:1938 web/ejabberd_web_admin.erl:2259 -#: web/ejabberd_web_admin.erl:2447 +#: web/ejabberd_web_admin.erl:1940 web/ejabberd_web_admin.erl:2260 +#: web/ejabberd_web_admin.erl:2448 msgid "Update" msgstr "Mete a djoû" -#: web/ejabberd_web_admin.erl:1941 web/ejabberd_web_admin.erl:2568 +#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2569 msgid "Restart" msgstr "Renonder" -#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2570 +#: web/ejabberd_web_admin.erl:1945 web/ejabberd_web_admin.erl:2571 msgid "Stop" msgstr "Arester" -#: web/ejabberd_web_admin.erl:1957 +#: web/ejabberd_web_admin.erl:1959 msgid "RPC Call Error" msgstr "Aroke di houcaedje RPC" -#: web/ejabberd_web_admin.erl:1998 +#: web/ejabberd_web_admin.erl:2000 msgid "Database Tables at " msgstr "Tåves del båze di dnêyes so " -#: web/ejabberd_web_admin.erl:2005 +#: web/ejabberd_web_admin.erl:2007 msgid "Storage Type" msgstr "Sôre di wårdaedje" -#: web/ejabberd_web_admin.erl:2006 +#: web/ejabberd_web_admin.erl:2008 msgid "Elements" msgstr "" -#: web/ejabberd_web_admin.erl:2007 +#: web/ejabberd_web_admin.erl:2009 msgid "Memory" msgstr "Memwere" -#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2032 web/ejabberd_web_admin.erl:2137 msgid "Error" msgstr "" -#: web/ejabberd_web_admin.erl:2033 +#: web/ejabberd_web_admin.erl:2034 msgid "Backup of " msgstr "Copeye di såvrité po " -#: web/ejabberd_web_admin.erl:2035 +#: web/ejabberd_web_admin.erl:2036 #, fuzzy msgid "" "Please note that these options will only backup the builtin Mnesia database. " @@ -1570,146 +1628,146 @@ msgstr "" "båze di dnêyes avou l' module ODBC, vos dvoz fé ene copeye di såvrité del " "båze SQL da vosse sepårumint." -#: web/ejabberd_web_admin.erl:2040 +#: web/ejabberd_web_admin.erl:2041 msgid "Store binary backup:" msgstr "Copeye di såvrité binaire:" -#: web/ejabberd_web_admin.erl:2044 web/ejabberd_web_admin.erl:2051 -#: web/ejabberd_web_admin.erl:2059 web/ejabberd_web_admin.erl:2066 -#: web/ejabberd_web_admin.erl:2073 web/ejabberd_web_admin.erl:2080 -#: web/ejabberd_web_admin.erl:2087 web/ejabberd_web_admin.erl:2095 -#: web/ejabberd_web_admin.erl:2102 web/ejabberd_web_admin.erl:2109 +#: web/ejabberd_web_admin.erl:2045 web/ejabberd_web_admin.erl:2052 +#: web/ejabberd_web_admin.erl:2060 web/ejabberd_web_admin.erl:2067 +#: web/ejabberd_web_admin.erl:2074 web/ejabberd_web_admin.erl:2081 +#: web/ejabberd_web_admin.erl:2088 web/ejabberd_web_admin.erl:2096 +#: web/ejabberd_web_admin.erl:2103 web/ejabberd_web_admin.erl:2110 msgid "OK" msgstr "'l est bon" -#: web/ejabberd_web_admin.erl:2047 +#: web/ejabberd_web_admin.erl:2048 msgid "Restore binary backup immediately:" msgstr "Rapexhî do côp foû d' ene copeye di såvrité binaire:" -#: web/ejabberd_web_admin.erl:2055 +#: web/ejabberd_web_admin.erl:2056 msgid "" "Restore binary backup after next ejabberd restart (requires less memory):" msgstr "" "Rapexhî l' copeye di såvrité binaire après l' renondaedje ki vént " "d' ejabberd (çoula prind moens d' memwere del fé insi):" -#: web/ejabberd_web_admin.erl:2062 +#: web/ejabberd_web_admin.erl:2063 msgid "Store plain text backup:" msgstr "Copeye di såvrité tecse:" -#: web/ejabberd_web_admin.erl:2069 +#: web/ejabberd_web_admin.erl:2070 msgid "Restore plain text backup immediately:" msgstr "Rapexhî do côp foû d' ene copeye di såvrité tecse:" -#: web/ejabberd_web_admin.erl:2076 +#: web/ejabberd_web_admin.erl:2077 msgid "Import users data from a PIEFXIS file (XEP-0227):" msgstr "" -#: web/ejabberd_web_admin.erl:2083 +#: web/ejabberd_web_admin.erl:2084 msgid "Export data of all users in the server to PIEFXIS files (XEP-0227):" msgstr "" -#: web/ejabberd_web_admin.erl:2090 +#: web/ejabberd_web_admin.erl:2091 msgid "Export data of users in a host to PIEFXIS files (XEP-0227):" msgstr "" -#: web/ejabberd_web_admin.erl:2098 +#: web/ejabberd_web_admin.erl:2099 #, fuzzy msgid "Import user data from jabberd14 spool file:" msgstr "Sititchî des uzeus Jabberd 1.4" -#: web/ejabberd_web_admin.erl:2105 +#: web/ejabberd_web_admin.erl:2106 #, fuzzy msgid "Import users data from jabberd14 spool directory:" msgstr "Sititchî des uzeus Jabberd 1.4" -#: web/ejabberd_web_admin.erl:2131 +#: web/ejabberd_web_admin.erl:2132 msgid "Listened Ports at " msgstr "Pôrts drovous so " -#: web/ejabberd_web_admin.erl:2156 +#: web/ejabberd_web_admin.erl:2157 msgid "Modules at " msgstr "Modules so " -#: web/ejabberd_web_admin.erl:2182 +#: web/ejabberd_web_admin.erl:2183 msgid "Statistics of ~p" msgstr "Sitatistikes di ~p" -#: web/ejabberd_web_admin.erl:2185 +#: web/ejabberd_web_admin.erl:2186 msgid "Uptime:" msgstr "Tins dispoy l' enondaedje:" -#: web/ejabberd_web_admin.erl:2188 +#: web/ejabberd_web_admin.erl:2189 msgid "CPU Time:" msgstr "Tins CPU:" -#: web/ejabberd_web_admin.erl:2194 +#: web/ejabberd_web_admin.erl:2195 msgid "Transactions Committed:" msgstr "Transaccions evoyeyes:" -#: web/ejabberd_web_admin.erl:2197 +#: web/ejabberd_web_admin.erl:2198 msgid "Transactions Aborted:" msgstr "Transaccions arestêyes:" -#: web/ejabberd_web_admin.erl:2200 +#: web/ejabberd_web_admin.erl:2201 msgid "Transactions Restarted:" msgstr "Transaccions renondêyes:" -#: web/ejabberd_web_admin.erl:2203 +#: web/ejabberd_web_admin.erl:2204 msgid "Transactions Logged:" msgstr "Transaccions wårdêyes e djournå:" -#: web/ejabberd_web_admin.erl:2245 +#: web/ejabberd_web_admin.erl:2246 msgid "Update " msgstr "Metaedje a djoû " -#: web/ejabberd_web_admin.erl:2253 +#: web/ejabberd_web_admin.erl:2254 msgid "Update plan" msgstr "Plan d' metaedje a djoû" -#: web/ejabberd_web_admin.erl:2254 +#: web/ejabberd_web_admin.erl:2255 #, fuzzy msgid "Modified modules" msgstr "Modules metous a djoû" -#: web/ejabberd_web_admin.erl:2255 +#: web/ejabberd_web_admin.erl:2256 msgid "Update script" msgstr "Sicripe di metaedje a djoû" -#: web/ejabberd_web_admin.erl:2256 +#: web/ejabberd_web_admin.erl:2257 msgid "Low level update script" msgstr "Sicripe di metaedje a djoû d' bas livea" -#: web/ejabberd_web_admin.erl:2257 +#: web/ejabberd_web_admin.erl:2258 msgid "Script check" msgstr "Acertinaedje do scripe" -#: web/ejabberd_web_admin.erl:2425 +#: web/ejabberd_web_admin.erl:2426 msgid "Port" msgstr "Pôrt" -#: web/ejabberd_web_admin.erl:2426 +#: web/ejabberd_web_admin.erl:2427 msgid "IP" msgstr "" -#: web/ejabberd_web_admin.erl:2427 +#: web/ejabberd_web_admin.erl:2428 #, fuzzy msgid "Protocol" msgstr "Pôrt" -#: web/ejabberd_web_admin.erl:2428 web/ejabberd_web_admin.erl:2555 +#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 msgid "Module" msgstr "Module" -#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 +#: web/ejabberd_web_admin.erl:2430 web/ejabberd_web_admin.erl:2557 msgid "Options" msgstr "Tchuzes" -#: web/ejabberd_web_admin.erl:2449 +#: web/ejabberd_web_admin.erl:2450 msgid "Delete" msgstr "Disfacer" -#: web/ejabberd_web_admin.erl:2578 +#: web/ejabberd_web_admin.erl:2579 msgid "Start" msgstr "Enonder" diff --git a/src/msgs/zh.msg b/src/msgs/zh.msg index e13cd154f..934ff6729 100644 --- a/src/msgs/zh.msg +++ b/src/msgs/zh.msg @@ -14,13 +14,15 @@ {"Administrator privileges required","需要管理员权限"}. {"A friendly name for the node","该节点的友好名称"}. {"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 query other users","允许用户查询其它用户"}. {"Allow users to send invites","允许用户发送邀请"}. {"Allow users to send private messages","允许用户发送私聊消息"}. {"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 voice requests","允许访客发送声音请求"}. {"All Users","所有用户"}. {"Announcements","通知"}. {"anyone","任何人"}. @@ -29,11 +31,11 @@ {"August","八月"}. {"Backup Management","备份管理"}. {"Backup of ","备份来源 "}. -{"Backup to File at ","备份到文件位于"}. +{"Backup to File at ","备份文件位于"}. {"Backup","备份"}. {"Bad format","格式错误"}. {"Birthday","出生日期"}. -{"CAPTCHA web page","验证码 Web 页面"}. +{"CAPTCHA web page","验证码网页"}. {"Change Password","更改密码"}. {"Change User Password","更改用户密码"}. {"Characters not allowed:","禁用字符:"}. @@ -50,7 +52,7 @@ {"City","城市"}. {"Commands","命令"}. {"Conference room does not exist","会议室不存在"}. -{"Configuration of room ~s","房间~s的配置 "}. +{"Configuration of room ~s","房间 ~s 的配置 "}. {"Configuration","配置"}. {"Connected Resources:","已连接资源:"}. {"Connections parameters","连接参数"}. @@ -75,6 +77,7 @@ {"Dump Backup to Text File at ","转储备份到文本文件于"}. {"Dump to Text File","转储到文本文件"}. {"Edit Properties","编辑属性"}. +{"Either approve or decline the voice request.","接受或拒绝声音请求"}. {"ejabberd IRC module","ejabberd IRC 模块"}. {"ejabberd MUC module","ejabberd MUC 模块"}. {"ejabberd Publish-Subscribe module","ejabberd 发行-订阅模块"}. @@ -98,8 +101,10 @@ {"Erlang Jabber Server","Erlang Jabber 服务器"}. {"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\"}]."}. +{"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 users in a host to PIEFXIS files (XEP-0227):","将某主机的用户数据导出到 PIEFXIS 文件 (XEP-0227):"}. +{"Failed to extract JID from your voice request approval","无法从你的声音请求确认信息中提取JID"}. {"Family Name","姓氏"}. {"February","二月"}. {"Fill in fields to search for any matching Jabber User","填充字段以搜索任何匹配的 Jabber 用户"}. @@ -113,6 +118,7 @@ {"Get User Last Login Time","获取用户上次登陆时间"}. {"Get User Password","获取用户密码"}. {"Get User Statistics","获取用户统计"}. +{"Grant voice to this person?","为此人授权声音?"}. {"Groups","组"}. {"Group ","组"}. {"has been banned","已被禁止"}. @@ -122,17 +128,17 @@ {"has been kicked","已被踢出"}. {" has set the subject to: ","已将标题设置为: "}. {"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 端口, 密码为空."}. {"Import Directory","导入目录"}. {"Import File","导入文件"}. -{"Import user data from jabberd14 spool file:","从 jabberd14 Spool文件导入用户数据:"}. +{"Import user data from jabberd14 spool file:","从 jabberd14 Spool 文件导入用户数据:"}. {"Import User from File at ","导入用户的文件位于 "}. -{"Import users data from a PIEFXIS file (XEP-0227):","从 PIEFXIS 文件 (XEP-0227)导入用户数据:"}. -{"Import users data from jabberd14 spool directory:","从 jabberd14 Spool目录导入用户数据:"}. +{"Import users data from a PIEFXIS file (XEP-0227):","从 PIEFXIS 文件 (XEP-0227) 导入用户数据:"}. +{"Import users data from jabberd14 spool directory:","从 jabberd14 Spool 目录导入用户数据:"}. {"Import Users from Dir at ","导入用户的目录位于 "}. {"Import Users From jabberd14 Spool Files","从 jabberd14 Spool 文件导入用户"}. -{"Improper message type","不正确的消息类型"}. +{"Improper message type","不恰当的消息类型"}. {"Incorrect password","密码不正确"}. {"Invalid affiliation: ~s","无效加入: ~s"}. {"Invalid role: ~s","无效角色: ~s"}. @@ -150,7 +156,7 @@ {"It is not allowed to send private messages","不可以发送私聊消息"}. {"Jabber Account Registration","Jabber 帐户注册"}. {"Jabber ID","Jabber ID"}. -{"Jabber ID ~s is invalid","Jabber ID ~s无效"}. +{"Jabber ID ~s is invalid","Jabber ID ~s 无效"}. {"January","一月"}. {"Join IRC channel","加入 IRC 频道"}. {"joins the room","加入房间"}. @@ -168,7 +174,7 @@ {"List of modules to start","要启动的模块列表"}. {"Low level update script","低级别更新脚本"}. {"Make participants list public","公开参与人列表"}. -{"Make room captcha protected","保护房间验证码"}. +{"Make room CAPTCHA protected","保护房间验证码"}. {"Make room members-only","设置房间只接收会员"}. {"Make room moderated","设置房间只接收主持人"}. {"Make room password protected","进入此房间需要密码"}. @@ -177,7 +183,7 @@ {"March","三月"}. {"Maximum Number of Occupants","允许的与会人最大数"}. {"Max # of items to persist","允许持久化的最大内容条目数"}. -{"Max payload size in bytes","最大有效负载比特数"}. +{"Max payload size in bytes","最大有效负载字节数"}. {"May","五月"}. {"Membership is required to enter this room","进入此房间需要会员身份"}. {"Members:","会员:"}. @@ -185,6 +191,7 @@ {"Memory","内存"}. {"Message body","消息主体"}. {"Middle Name","中间名"}. +{"Minimum interval between voice requests (in seconds)","声音请求的最小间隔(以秒为单位)"}. {"Moderator privileges required","需要主持人权限"}. {"moderators only","仅主持人"}. {"Modified modules","被修改模块"}. @@ -197,9 +204,10 @@ {"Never","从未"}. {"New Password:","新密码: "}. {"Nickname Registration at ","昵称注册于 "}. -{"Nickname ~s does not exist in the room","昵称~s不在该房间"}. +{"Nickname ~s does not exist in the room","昵称 ~s 不在该房间"}. {"Nickname","昵称"}. {"No body provided for announce message","通知消息无正文内容"}. +{"nobody","没有人"}. {"No Data","没有数据"}. {"Node ID","节点 ID"}. {"Node not found","没有找到节点"}. @@ -227,6 +235,7 @@ {"Only deliver notifications to available users","仅将通知发送给可发送的用户"}. {"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 can approve voice requests","仅主持人能确认声音请求"}. {"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","只有服务管理员可以发送服务消息"}. @@ -241,7 +250,7 @@ {"Password ~b","~b 的密码"}. {"Password Verification:","密码确认:"}. {"Password Verification","确认密码"}. -{"Password:","密码: "}. +{"Password:","密码:"}. {"Password","密码"}. {"Path to Dir","目录的路径"}. {"Path to File","文件路径"}. @@ -250,6 +259,7 @@ {"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, wait for a while before sending new voice request","请稍后再发送新的声音请求"}. {"Pong","Pong"}. {"Port ~b","~b 的端口"}. {"Port","端口"}. @@ -312,11 +322,11 @@ {"Show Integral Table","显示完整列表"}. {"Show Ordinary Table","显示普通列表"}. {"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 客户端可以在你的计算机里存储密码. 请仅在你确认你的计算机安全的情况下使用该功能."}. -{"Specify the access model","指定访问模式"}. +{"Specify the access model","指定访问范例"}. {"Specify the event message type","指定事件消息类型"}. -{"Specify the publisher model","指定发布人样式"}. +{"Specify the publisher model","指定发布人范例"}. {"~s's Offline Messages Queue","~s 的离线消息队列"}. {"Start Modules at ","要启动的模块位于 "}. {"Start Modules","启动模块"}. @@ -338,7 +348,7 @@ {"Sunday","星期天"}. {"That nickname is already in use by another occupant","该昵称已被另一用户使用"}. {"That nickname is registered by another person","该昵称已被另一个人注册了"}. -{"The captcha is valid.","验证码有效."}. +{"The CAPTCHA is valid.","验证码有效."}. {"The CAPTCHA verification has failed","验证码检查失败"}. {"The collections with which a node is affiliated","加入结点的集合"}. {"The password is too weak","密码强度太弱"}. @@ -357,6 +367,7 @@ {"Thursday","星期四"}. {"Time delay","时间延迟"}. {"Time","时间"}. +{"Too many CAPTCHA requests","验证码请求太多"}. {"To ~s","发送给~s"}. {"To","到"}. {"Traffic rate limit is exceeded","已经超过传输率限制"}. @@ -365,7 +376,6 @@ {"Transactions Logged:","记入日志的事务:"}. {"Transactions Restarted:","重启的事务:"}. {"Tuesday","星期二"}. -{"Unable to generate a captcha","无法产生验证码"}. {"Unable to generate a CAPTCHA","无法生成验证码"}. {"Unauthorized","未认证的"}. {"Unregister a Jabber account","注销 Jabber 帐户"}. @@ -378,6 +388,7 @@ {"Update","更新"}. {"Uptime:","正常运行时间:"}. {"Use of STARTTLS required","要求使用 STARTTLS"}. +{"User JID","用户 JID"}. {"User Management","用户管理"}. {"Username:","用户名:"}. {"Users are not allowed to register accounts so quickly","不允许用户太频繁地注册帐户"}. @@ -390,6 +401,8 @@ {"Virtual Hosts","虚拟主机"}. {"Visitors are not allowed to change their nicknames in this room","此房间不允许用户更改昵称"}. {"Visitors are not allowed to send messages to all occupants","不允许访客给所有占有者发送消息"}. +{"Voice requests are disabled in this conference","该会议的声音请求以被禁用"}. +{"Voice request","声音请求"}. {"Wednesday","星期三"}. {"When to send the last published item","何时发送最新发布的内容条目"}. {"Whether to allow subscriptions","是否允许订阅"}. diff --git a/src/msgs/zh.po b/src/msgs/zh.po index 52fff74a7..d1a76a2ee 100644 --- a/src/msgs/zh.po +++ b/src/msgs/zh.po @@ -17,11 +17,11 @@ msgstr "要求使用 STARTTLS" msgid "No resource provided" msgstr "无资源提供" -#: ejabberd_c2s.erl:1149 +#: ejabberd_c2s.erl:1197 msgid "Replaced by new connection" msgstr "被新的连接替换" -#: ejabberd_c2s.erl:1837 +#: ejabberd_c2s.erl:1885 msgid "Your active privacy list has denied the routing of this stanza." msgstr "你的活跃私聊列表拒绝了在此房间进行路由分发." @@ -35,14 +35,14 @@ msgstr "您发送给 ~s 的消息已被阻止. 要解除阻止, 请访问 ~s" #: ejabberd_captcha.erl:134 msgid "If you don't see the CAPTCHA image here, visit the web page." -msgstr "如果您在这里没有看到验证码图片, 请访问 Web 页面." +msgstr "如果您在这里没有看到验证码图片, 请访问网页." #: ejabberd_captcha.erl:146 msgid "CAPTCHA web page" -msgstr "验证码 Web 页面" +msgstr "验证码网页" #: ejabberd_captcha.erl:307 -msgid "The captcha is valid." +msgid "The CAPTCHA is valid." msgstr "验证码有效." #: mod_adhoc.erl:95 mod_adhoc.erl:125 mod_adhoc.erl:143 mod_adhoc.erl:161 @@ -57,63 +57,66 @@ msgstr "Ping" msgid "Pong" msgstr "Pong" -#: mod_announce.erl:506 +#: mod_announce.erl:507 mod_announce_odbc.erl:499 msgid "Really delete message of the day?" msgstr "确实要删除每日消息吗?" -#: mod_announce.erl:514 mod_configure.erl:1083 mod_configure.erl:1128 +#: mod_announce.erl:515 mod_announce_odbc.erl:507 mod_configure.erl:1083 +#: mod_configure.erl:1128 msgid "Subject" msgstr "标题" -#: mod_announce.erl:519 mod_configure.erl:1088 mod_configure.erl:1133 +#: mod_announce.erl:520 mod_announce_odbc.erl:512 mod_configure.erl:1088 +#: mod_configure.erl:1133 msgid "Message body" msgstr "消息主体" -#: mod_announce.erl:599 +#: mod_announce.erl:600 mod_announce_odbc.erl:592 msgid "No body provided for announce message" msgstr "通知消息无正文内容" -#: mod_announce.erl:634 +#: mod_announce.erl:635 mod_announce_odbc.erl:627 msgid "Announcements" msgstr "通知" -#: mod_announce.erl:636 +#: mod_announce.erl:637 mod_announce_odbc.erl:629 msgid "Send announcement to all users" msgstr "发送通知给所有用户" -#: mod_announce.erl:638 +#: mod_announce.erl:639 mod_announce_odbc.erl:631 msgid "Send announcement to all users on all hosts" msgstr "发送通知给所有主机上的所有用户" -#: mod_announce.erl:640 +#: mod_announce.erl:641 mod_announce_odbc.erl:633 msgid "Send announcement to all online users" msgstr "发送通知给所有在线用户" -#: mod_announce.erl:642 mod_configure.erl:1078 mod_configure.erl:1123 +#: mod_announce.erl:643 mod_announce_odbc.erl:635 mod_configure.erl:1078 +#: mod_configure.erl:1123 msgid "Send announcement to all online users on all hosts" msgstr "发送通知给所有主机的在线用户" -#: mod_announce.erl:644 +#: mod_announce.erl:645 mod_announce_odbc.erl:637 msgid "Set message of the day and send to online users" msgstr "设定每日消息并发送给所有在线用户" -#: mod_announce.erl:646 +#: mod_announce.erl:647 mod_announce_odbc.erl:639 msgid "Set message of the day on all hosts and send to online users" msgstr "设置所有主机上的每日消息并发送给在线用户" -#: mod_announce.erl:648 +#: mod_announce.erl:649 mod_announce_odbc.erl:641 msgid "Update message of the day (don't send)" msgstr "更新每日消息(不发送)" -#: mod_announce.erl:650 +#: mod_announce.erl:651 mod_announce_odbc.erl:643 msgid "Update message of the day on all hosts (don't send)" msgstr "更新所有主机上的每日消息(不发送)" -#: mod_announce.erl:652 +#: mod_announce.erl:653 mod_announce_odbc.erl:645 msgid "Delete message of the day" msgstr "删除每日消息" -#: mod_announce.erl:654 +#: mod_announce.erl:655 mod_announce_odbc.erl:647 msgid "Delete message of the day on all hosts" msgstr "删除所有主机上的每日消息" @@ -122,7 +125,7 @@ msgstr "删除所有主机上的每日消息" msgid "Configuration" msgstr "配置" -#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1934 +#: mod_configure.erl:125 mod_configure.erl:576 web/ejabberd_web_admin.erl:1936 msgid "Database" msgstr "数据库" @@ -134,7 +137,7 @@ msgstr "启动模块" msgid "Stop Modules" msgstr "停止模块" -#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1935 +#: mod_configure.erl:131 mod_configure.erl:604 web/ejabberd_web_admin.erl:1937 msgid "Backup" msgstr "备份" @@ -163,7 +166,7 @@ msgid "Shut Down Service" msgstr "关闭服务" #: mod_configure.erl:145 mod_configure.erl:518 mod_configure.erl:1197 -#: web/ejabberd_web_admin.erl:1528 +#: web/ejabberd_web_admin.erl:1527 msgid "Add User" msgstr "添加用户" @@ -215,7 +218,7 @@ msgid "User Management" msgstr "用户管理" #: mod_configure.erl:500 web/ejabberd_web_admin.erl:1058 -#: web/ejabberd_web_admin.erl:1463 +#: web/ejabberd_web_admin.erl:1462 msgid "Online Users" msgstr "在线用户" @@ -227,15 +230,15 @@ msgstr "所有用户" msgid "Outgoing s2s Connections" msgstr "出站 s2s 连接" -#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1905 +#: mod_configure.erl:503 web/ejabberd_web_admin.erl:1907 msgid "Running Nodes" msgstr "运行中的节点" -#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1907 +#: mod_configure.erl:504 web/ejabberd_web_admin.erl:1909 msgid "Stopped Nodes" msgstr "已经停止的节点" -#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1951 +#: mod_configure.erl:577 mod_configure.erl:587 web/ejabberd_web_admin.erl:1953 msgid "Modules" msgstr "模块" @@ -301,7 +304,7 @@ msgstr "要启动的模块列表" #: mod_configure.erl:983 msgid "Backup to File at " -msgstr "备份到文件位于" +msgstr "备份文件位于" #: mod_configure.erl:987 mod_configure.erl:1001 msgid "Enter path to backup file" @@ -366,15 +369,15 @@ msgstr "访问规则" #: mod_configure.erl:1200 mod_configure.erl:1222 mod_configure.erl:1234 #: mod_configure.erl:1246 mod_configure.erl:1258 mod_configure.erl:1275 -#: mod_configure.erl:1287 mod_configure.erl:1652 mod_configure.erl:1702 -#: mod_configure.erl:1723 mod_roster.erl:943 mod_roster_odbc.erl:1048 -#: mod_vcard.erl:466 mod_vcard_ldap.erl:550 mod_vcard_odbc.erl:442 +#: mod_configure.erl:1287 mod_configure.erl:1650 mod_configure.erl:1700 +#: mod_configure.erl:1721 mod_roster.erl:943 mod_roster_odbc.erl:1060 +#: mod_vcard.erl:472 mod_vcard_ldap.erl:554 mod_vcard_odbc.erl:448 msgid "Jabber ID" msgstr "Jabber ID" -#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1653 -#: mod_configure.erl:1865 mod_muc/mod_muc_room.erl:2970 mod_register.erl:235 -#: web/ejabberd_web_admin.erl:1521 +#: mod_configure.erl:1205 mod_configure.erl:1263 mod_configure.erl:1651 +#: mod_configure.erl:1863 mod_muc/mod_muc_room.erl:3224 mod_register.erl:235 +#: web/ejabberd_web_admin.erl:1520 msgid "Password" msgstr "密码" @@ -390,79 +393,80 @@ msgstr "注册用户数" msgid "Number of online users" msgstr "在线用户数" -#: mod_configure.erl:1684 web/ejabberd_web_admin.erl:1589 -#: web/ejabberd_web_admin.erl:1741 +#: mod_configure.erl:1682 web/ejabberd_web_admin.erl:1588 +#: web/ejabberd_web_admin.erl:1743 msgid "Never" msgstr "从未" -#: mod_configure.erl:1698 web/ejabberd_web_admin.erl:1602 -#: web/ejabberd_web_admin.erl:1754 +#: mod_configure.erl:1696 web/ejabberd_web_admin.erl:1601 +#: web/ejabberd_web_admin.erl:1756 msgid "Online" msgstr "在线" -#: mod_configure.erl:1703 +#: mod_configure.erl:1701 msgid "Last login" msgstr "上次登陆" -#: mod_configure.erl:1724 +#: mod_configure.erl:1722 msgid "Roster size" msgstr "花名册大小" -#: mod_configure.erl:1725 +#: mod_configure.erl:1723 msgid "IP addresses" msgstr "IP 地址" -#: mod_configure.erl:1726 +#: mod_configure.erl:1724 msgid "Resources" msgstr "资源" -#: mod_configure.erl:1852 +#: mod_configure.erl:1850 msgid "Administration of " msgstr "管理" -#: mod_configure.erl:1855 +#: mod_configure.erl:1853 msgid "Action on user" msgstr "对用户的动作" -#: mod_configure.erl:1859 +#: mod_configure.erl:1857 msgid "Edit Properties" msgstr "编辑属性" -#: mod_configure.erl:1862 web/ejabberd_web_admin.erl:1767 +#: mod_configure.erl:1860 web/ejabberd_web_admin.erl:1769 msgid "Remove User" msgstr "删除用户" -#: mod_irc/mod_irc.erl:201 mod_muc/mod_muc.erl:336 +#: mod_irc/mod_irc.erl:201 mod_irc/mod_irc_odbc.erl:196 +#: mod_muc/mod_muc.erl:336 mod_muc/mod_muc_odbc.erl:342 msgid "Access denied by service policy" msgstr "访问被服务策略拒绝" -#: mod_irc/mod_irc.erl:400 +#: mod_irc/mod_irc.erl:401 mod_irc/mod_irc_odbc.erl:398 msgid "IRC Transport" msgstr "IRC 传输" -#: mod_irc/mod_irc.erl:427 +#: mod_irc/mod_irc.erl:428 mod_irc/mod_irc_odbc.erl:425 msgid "ejabberd IRC module" msgstr "ejabberd IRC 模块" -#: mod_irc/mod_irc.erl:558 +#: mod_irc/mod_irc.erl:559 mod_irc/mod_irc_odbc.erl:568 msgid "You need an x:data capable client to configure mod_irc settings" msgstr "您需要一个兼容 x:data 的客户端来配置 mod_irc 设置" -#: mod_irc/mod_irc.erl:565 +#: mod_irc/mod_irc.erl:566 mod_irc/mod_irc_odbc.erl:575 msgid "Registration in mod_irc for " msgstr "mod_irc 中的注册是为 " -#: mod_irc/mod_irc.erl:570 +#: mod_irc/mod_irc.erl:571 mod_irc/mod_irc_odbc.erl:580 msgid "" "Enter username, encodings, ports and passwords you wish to use for " "connecting to IRC servers" msgstr "请输入您想使用的用来连接到IRC服务器的用户名, 编码, 端口和密码." -#: mod_irc/mod_irc.erl:575 +#: mod_irc/mod_irc.erl:576 mod_irc/mod_irc_odbc.erl:585 msgid "IRC Username" msgstr "IRC 用户名" -#: mod_irc/mod_irc.erl:585 +#: mod_irc/mod_irc.erl:586 mod_irc/mod_irc_odbc.erl:595 msgid "" "If you want to specify different ports, passwords, encodings for IRC " "servers, fill this list with values in format '{\"irc server\", \"encoding" @@ -473,7 +477,7 @@ msgstr "" "码\", 端口, \"密码\"}' 格式的值填充此表单. 默认情况下此服务使用\"~s\"编码, " "~p 端口, 密码为空." -#: mod_irc/mod_irc.erl:597 +#: mod_irc/mod_irc.erl:598 mod_irc/mod_irc_odbc.erl:607 msgid "" "Example: [{\"irc.lucky.net\", \"koi8-r\", 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." @@ -481,35 +485,36 @@ msgstr "" "例如: [{\"irc.lucky.net\", \"koi8-r\"}, 6667, \"secret\"}, {\"vendetta.fef." "net\", \"iso8859-1\", 7000}, {\"irc.sometestserver.net\", \"utf-8\"}]." -#: mod_irc/mod_irc.erl:602 +#: mod_irc/mod_irc.erl:603 mod_irc/mod_irc_odbc.erl:612 msgid "Connections parameters" msgstr "连接参数" -#: mod_irc/mod_irc.erl:727 +#: mod_irc/mod_irc.erl:728 mod_irc/mod_irc_odbc.erl:757 msgid "Join IRC channel" msgstr "加入 IRC 频道" -#: mod_irc/mod_irc.erl:731 +#: mod_irc/mod_irc.erl:732 mod_irc/mod_irc_odbc.erl:761 msgid "IRC channel (don't put the first #)" msgstr "IRC 频道 (不要输入第一个#号)" -#: mod_irc/mod_irc.erl:736 +#: mod_irc/mod_irc.erl:737 mod_irc/mod_irc_odbc.erl:766 msgid "IRC server" msgstr "IRC 服务器" -#: mod_irc/mod_irc.erl:769 mod_irc/mod_irc.erl:773 +#: mod_irc/mod_irc.erl:770 mod_irc/mod_irc.erl:774 +#: mod_irc/mod_irc_odbc.erl:799 mod_irc/mod_irc_odbc.erl:803 msgid "Join the IRC channel here." msgstr "在这里加入 IRC 频道." -#: mod_irc/mod_irc.erl:777 +#: mod_irc/mod_irc.erl:778 mod_irc/mod_irc_odbc.erl:807 msgid "Join the IRC channel in this Jabber ID: ~s" msgstr "用此 Jabber ID: ~s 加入 IRC 频道" -#: mod_irc/mod_irc.erl:862 +#: mod_irc/mod_irc.erl:863 mod_irc/mod_irc_odbc.erl:904 msgid "IRC settings" msgstr "IRC 设置" -#: mod_irc/mod_irc.erl:867 +#: mod_irc/mod_irc.erl:868 mod_irc/mod_irc_odbc.erl:909 msgid "" "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 " @@ -518,70 +523,71 @@ msgstr "" "请输入您想使用的用来连接到 IRC 服务器的用户名和编码. 按 '下一步' 获取更多待填" "字段. 按 '完成' 保存设置." -#: mod_irc/mod_irc.erl:873 +#: mod_irc/mod_irc.erl:874 mod_irc/mod_irc_odbc.erl:915 msgid "IRC username" msgstr "IRC 用户名" -#: mod_irc/mod_irc.erl:922 +#: mod_irc/mod_irc.erl:923 mod_irc/mod_irc_odbc.erl:964 msgid "Password ~b" msgstr "~b 的密码" -#: mod_irc/mod_irc.erl:927 +#: mod_irc/mod_irc.erl:928 mod_irc/mod_irc_odbc.erl:969 msgid "Port ~b" msgstr "~b 的端口" -#: mod_irc/mod_irc.erl:932 +#: mod_irc/mod_irc.erl:933 mod_irc/mod_irc_odbc.erl:974 msgid "Encoding for server ~b" msgstr "服务器 ~b 的编码" -#: mod_irc/mod_irc.erl:941 +#: mod_irc/mod_irc.erl:942 mod_irc/mod_irc_odbc.erl:983 msgid "Server ~b" msgstr "服务器 ~b" -#: mod_muc/mod_muc.erl:449 +#: mod_muc/mod_muc.erl:449 mod_muc/mod_muc_odbc.erl:456 msgid "Only service administrators are allowed to send service messages" msgstr "只有服务管理员可以发送服务消息" -#: mod_muc/mod_muc.erl:493 +#: mod_muc/mod_muc.erl:493 mod_muc/mod_muc_odbc.erl:500 msgid "Room creation is denied by service policy" msgstr "创建房间被服务策略拒绝" -#: mod_muc/mod_muc.erl:500 +#: mod_muc/mod_muc.erl:500 mod_muc/mod_muc_odbc.erl:507 msgid "Conference room does not exist" msgstr "会议室不存在" -#: mod_muc/mod_muc.erl:581 +#: mod_muc/mod_muc.erl:582 mod_muc/mod_muc_odbc.erl:595 msgid "Chatrooms" msgstr "聊天室" -#: mod_muc/mod_muc.erl:711 +#: mod_muc/mod_muc.erl:712 mod_muc/mod_muc_odbc.erl:729 msgid "You need a client that supports x:data to register the nickname" msgstr "您需要一个支持 x:data 的客户端来注册昵称" -#: mod_muc/mod_muc.erl:717 +#: mod_muc/mod_muc.erl:718 mod_muc/mod_muc_odbc.erl:735 msgid "Nickname Registration at " msgstr "昵称注册于 " -#: mod_muc/mod_muc.erl:721 +#: mod_muc/mod_muc.erl:722 mod_muc/mod_muc_odbc.erl:739 msgid "Enter nickname you want to register" msgstr "请输入您想要注册的昵称" -#: mod_muc/mod_muc.erl:722 mod_roster.erl:944 mod_roster_odbc.erl:1049 -#: mod_vcard.erl:358 mod_vcard.erl:471 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:447 +#: mod_muc/mod_muc.erl:723 mod_muc/mod_muc_odbc.erl:740 +#: mod_muc/mod_muc_room.erl:3810 mod_roster.erl:944 mod_roster_odbc.erl:1061 +#: mod_vcard.erl:364 mod_vcard.erl:477 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:453 msgid "Nickname" msgstr "昵称" -#: mod_muc/mod_muc.erl:761 mod_muc/mod_muc_room.erl:933 -#: mod_muc/mod_muc_room.erl:1577 +#: mod_muc/mod_muc.erl:762 mod_muc/mod_muc_odbc.erl:784 +#: mod_muc/mod_muc_room.erl:1064 mod_muc/mod_muc_room.erl:1787 msgid "That nickname is registered by another person" msgstr "该昵称已被另一个人注册了" -#: mod_muc/mod_muc.erl:787 +#: mod_muc/mod_muc.erl:788 mod_muc/mod_muc_odbc.erl:811 msgid "You must fill in field \"Nickname\" in the form" msgstr "您必须填充表单中\"昵称\"项" -#: mod_muc/mod_muc.erl:807 +#: mod_muc/mod_muc.erl:808 mod_muc/mod_muc_odbc.erl:831 msgid "ejabberd MUC module" msgstr "ejabberd MUC 模块" @@ -621,8 +627,8 @@ msgstr "因系统关机而被踢出" msgid "is now known as" msgstr "现在称呼为" -#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:689 -#: mod_muc/mod_muc_room.erl:2138 +#: mod_muc/mod_muc_log.erl:417 mod_muc/mod_muc_log.erl:688 +#: mod_muc/mod_muc_room.erl:2393 msgid " has set the subject to: " msgstr "已将标题设置为: " @@ -718,258 +724,306 @@ msgstr "十一月" msgid "December" msgstr "十二月" -#: mod_muc/mod_muc_log.erl:751 +#: mod_muc/mod_muc_log.erl:750 msgid "Room Configuration" msgstr "房间配置" -#: mod_muc/mod_muc_log.erl:760 +#: mod_muc/mod_muc_log.erl:759 msgid "Room Occupants" msgstr "房间人数" -#: mod_muc/mod_muc_room.erl:170 +#: mod_muc/mod_muc_room.erl:174 msgid "Traffic rate limit is exceeded" msgstr "已经超过传输率限制" -#: mod_muc/mod_muc_room.erl:242 +#: mod_muc/mod_muc_room.erl:246 msgid "" "This participant is kicked from the room because he sent an error message" msgstr "该参与人由于发送了错误消息而被踢出了聊天室" -#: mod_muc/mod_muc_room.erl:251 +#: mod_muc/mod_muc_room.erl:255 msgid "It is not allowed to send private messages to the conference" msgstr "不允许向会议发送私聊消息" -#: mod_muc/mod_muc_room.erl:296 -msgid "Improper message type" -msgstr "不正确的消息类型" +#: mod_muc/mod_muc_room.erl:332 +msgid "Please, wait for a while before sending new voice request" +msgstr "请稍后再发送新的声音请求" -#: mod_muc/mod_muc_room.erl:406 +#: mod_muc/mod_muc_room.erl:347 +msgid "Voice requests are disabled in this conference" +msgstr "该会议的声音请求以被禁用" + +#: mod_muc/mod_muc_room.erl:364 +msgid "Failed to extract JID from your voice request approval" +msgstr "无法从你的声音请求确认信息中提取JID" + +#: mod_muc/mod_muc_room.erl:393 +msgid "Only moderators can approve voice requests" +msgstr "仅主持人能确认声音请求" + +#: mod_muc/mod_muc_room.erl:408 +msgid "Improper message type" +msgstr "不恰当的消息类型" + +#: mod_muc/mod_muc_room.erl:518 msgid "" "This participant is kicked from the room because he sent an error message to " "another participant" msgstr "该参与人由于给其他人发送了出错消息而被踢出了聊天室" -#: mod_muc/mod_muc_room.erl:419 +#: mod_muc/mod_muc_room.erl:531 msgid "It is not allowed to send private messages of type \"groupchat\"" msgstr "\"群组聊天\"类型不允许发送私聊消息" -#: mod_muc/mod_muc_room.erl:431 mod_muc/mod_muc_room.erl:486 +#: mod_muc/mod_muc_room.erl:543 mod_muc/mod_muc_room.erl:611 msgid "Recipient is not in the conference room" msgstr "接收人不在会议室" -#: mod_muc/mod_muc_room.erl:451 mod_muc/mod_muc_room.erl:829 -#: mod_muc/mod_muc_room.erl:3609 -msgid "Only occupants are allowed to send messages to the conference" -msgstr "只有与会人可以向大会发送消息" - -#: mod_muc/mod_muc_room.erl:460 +#: mod_muc/mod_muc_room.erl:564 mod_muc/mod_muc_room.erl:585 msgid "It is not allowed to send private messages" msgstr "不可以发送私聊消息" -#: mod_muc/mod_muc_room.erl:509 +#: mod_muc/mod_muc_room.erl:576 mod_muc/mod_muc_room.erl:956 +#: mod_muc/mod_muc_room.erl:4040 +msgid "Only occupants are allowed to send messages to the conference" +msgstr "只有与会人可以向大会发送消息" + +#: mod_muc/mod_muc_room.erl:634 msgid "Only occupants are allowed to send queries to the conference" msgstr "只有与会人可以向大会发出查询请求" -#: mod_muc/mod_muc_room.erl:521 +#: mod_muc/mod_muc_room.erl:646 msgid "Queries to the conference members are not allowed in this room" msgstr "本房间不可以查询会议成员信息" -#: mod_muc/mod_muc_room.erl:805 +#: mod_muc/mod_muc_room.erl:932 msgid "" "Only moderators and participants are allowed to change the subject in this " "room" msgstr "只有主持人和参与人可以在此房间里更改主题" -#: mod_muc/mod_muc_room.erl:810 +#: mod_muc/mod_muc_room.erl:937 msgid "Only moderators are allowed to change the subject in this room" msgstr "只有主持人可以在此房间里更改主题" -#: mod_muc/mod_muc_room.erl:820 +#: mod_muc/mod_muc_room.erl:947 msgid "Visitors are not allowed to send messages to all occupants" msgstr "不允许访客给所有占有者发送消息" -#: mod_muc/mod_muc_room.erl:891 +#: mod_muc/mod_muc_room.erl:1021 msgid "" "This participant is kicked from the room because he sent an error presence" msgstr "该用户由于发送了错误状态而被踢出了聊天室" -#: mod_muc/mod_muc_room.erl:909 +#: mod_muc/mod_muc_room.erl:1040 msgid "Visitors are not allowed to change their nicknames in this room" msgstr "此房间不允许用户更改昵称" -#: mod_muc/mod_muc_room.erl:922 mod_muc/mod_muc_room.erl:1569 +#: mod_muc/mod_muc_room.erl:1053 mod_muc/mod_muc_room.erl:1779 msgid "That nickname is already in use by another occupant" msgstr "该昵称已被另一用户使用" -#: mod_muc/mod_muc_room.erl:1558 +#: mod_muc/mod_muc_room.erl:1768 msgid "You have been banned from this room" msgstr "您已被禁止进入该房间" -#: mod_muc/mod_muc_room.erl:1561 +#: mod_muc/mod_muc_room.erl:1771 msgid "Membership is required to enter this room" msgstr "进入此房间需要会员身份" -#: mod_muc/mod_muc_room.erl:1597 +#: mod_muc/mod_muc_room.erl:1807 msgid "This room is not anonymous" msgstr "此房间不是匿名房间" -#: mod_muc/mod_muc_room.erl:1623 +#: mod_muc/mod_muc_room.erl:1833 msgid "A password is required to enter this room" msgstr "进入此房间需要密码" -#: mod_muc/mod_muc_room.erl:1645 mod_register.erl:246 +#: mod_muc/mod_muc_room.erl:1855 mod_register.erl:246 msgid "Too many CAPTCHA requests" -msgstr "" +msgstr "验证码请求太多" -#: mod_muc/mod_muc_room.erl:1654 -msgid "Unable to generate a captcha" -msgstr "无法产生验证码" +#: mod_muc/mod_muc_room.erl:1864 mod_register.erl:251 +msgid "Unable to generate a CAPTCHA" +msgstr "无法生成验证码" -#: mod_muc/mod_muc_room.erl:1664 +#: mod_muc/mod_muc_room.erl:1874 msgid "Incorrect password" msgstr "密码不正确" -#: mod_muc/mod_muc_room.erl:2193 +#: mod_muc/mod_muc_room.erl:2448 msgid "Administrator privileges required" msgstr "需要管理员权限" -#: mod_muc/mod_muc_room.erl:2208 +#: mod_muc/mod_muc_room.erl:2463 msgid "Moderator privileges required" msgstr "需要主持人权限" -#: mod_muc/mod_muc_room.erl:2363 +#: mod_muc/mod_muc_room.erl:2619 msgid "Jabber ID ~s is invalid" -msgstr "Jabber ID ~s无效" +msgstr "Jabber ID ~s 无效" -#: mod_muc/mod_muc_room.erl:2377 +#: mod_muc/mod_muc_room.erl:2633 msgid "Nickname ~s does not exist in the room" -msgstr "昵称~s不在该房间" +msgstr "昵称 ~s 不在该房间" -#: mod_muc/mod_muc_room.erl:2403 mod_muc/mod_muc_room.erl:2797 +#: mod_muc/mod_muc_room.erl:2659 mod_muc/mod_muc_room.erl:3049 msgid "Invalid affiliation: ~s" msgstr "无效加入: ~s" -#: mod_muc/mod_muc_room.erl:2460 +#: mod_muc/mod_muc_room.erl:2713 msgid "Invalid role: ~s" msgstr "无效角色: ~s" -#: mod_muc/mod_muc_room.erl:2774 mod_muc/mod_muc_room.erl:2810 +#: mod_muc/mod_muc_room.erl:3026 mod_muc/mod_muc_room.erl:3062 msgid "Owner privileges required" msgstr "需要持有人权限" -#: mod_muc/mod_muc_room.erl:2941 +#: mod_muc/mod_muc_room.erl:3195 msgid "Configuration of room ~s" -msgstr "房间~s的配置 " +msgstr "房间 ~s 的配置 " -#: mod_muc/mod_muc_room.erl:2946 +#: mod_muc/mod_muc_room.erl:3200 msgid "Room title" msgstr "房间标题" -#: mod_muc/mod_muc_room.erl:2949 mod_muc/mod_muc_room.erl:3388 +#: mod_muc/mod_muc_room.erl:3203 mod_muc/mod_muc_room.erl:3692 msgid "Room description" msgstr "房间描述" -#: mod_muc/mod_muc_room.erl:2956 +#: mod_muc/mod_muc_room.erl:3210 msgid "Make room persistent" msgstr "永久保存该房间" -#: mod_muc/mod_muc_room.erl:2961 +#: mod_muc/mod_muc_room.erl:3215 msgid "Make room public searchable" msgstr "使房间可被公开搜索" -#: mod_muc/mod_muc_room.erl:2964 +#: mod_muc/mod_muc_room.erl:3218 msgid "Make participants list public" msgstr "公开参与人列表" -#: mod_muc/mod_muc_room.erl:2967 +#: mod_muc/mod_muc_room.erl:3221 msgid "Make room password protected" msgstr "进入此房间需要密码" -#: mod_muc/mod_muc_room.erl:2978 +#: mod_muc/mod_muc_room.erl:3232 msgid "Maximum Number of Occupants" msgstr "允许的与会人最大数" -#: mod_muc/mod_muc_room.erl:2985 +#: mod_muc/mod_muc_room.erl:3239 msgid "No limit" msgstr "不限" -#: mod_muc/mod_muc_room.erl:2996 +#: mod_muc/mod_muc_room.erl:3250 msgid "Present real Jabber IDs to" msgstr "将真实 Jabber ID 显示给" -#: mod_muc/mod_muc_room.erl:3004 +#: mod_muc/mod_muc_room.erl:3258 mod_muc/mod_muc_room.erl:3292 msgid "moderators only" msgstr "仅主持人" -#: mod_muc/mod_muc_room.erl:3006 +#: mod_muc/mod_muc_room.erl:3260 mod_muc/mod_muc_room.erl:3294 msgid "anyone" msgstr "任何人" -#: mod_muc/mod_muc_room.erl:3008 +#: mod_muc/mod_muc_room.erl:3262 msgid "Make room members-only" msgstr "设置房间只接收会员" -#: mod_muc/mod_muc_room.erl:3011 +#: mod_muc/mod_muc_room.erl:3265 msgid "Make room moderated" msgstr "设置房间只接收主持人" -#: mod_muc/mod_muc_room.erl:3014 +#: mod_muc/mod_muc_room.erl:3268 msgid "Default users as participants" msgstr "用户默认被视为参与人" -#: mod_muc/mod_muc_room.erl:3017 +#: mod_muc/mod_muc_room.erl:3271 msgid "Allow users to change the subject" msgstr "允许用户更改主题" -#: mod_muc/mod_muc_room.erl:3020 +#: mod_muc/mod_muc_room.erl:3274 msgid "Allow users to send private messages" msgstr "允许用户发送私聊消息" -#: mod_muc/mod_muc_room.erl:3023 +#: mod_muc/mod_muc_room.erl:3279 +msgid "Allow visitors to send private messages to" +msgstr "允许访客发送私聊消息至" + +#: mod_muc/mod_muc_room.erl:3290 +msgid "nobody" +msgstr "没有人" + +#: mod_muc/mod_muc_room.erl:3296 msgid "Allow users to query other users" msgstr "允许用户查询其它用户" -#: mod_muc/mod_muc_room.erl:3026 +#: mod_muc/mod_muc_room.erl:3299 msgid "Allow users to send invites" msgstr "允许用户发送邀请" -#: mod_muc/mod_muc_room.erl:3029 +#: mod_muc/mod_muc_room.erl:3302 msgid "Allow visitors to send status text in presence updates" msgstr "更新在线状态时允许用户发送状态文本" -#: mod_muc/mod_muc_room.erl:3032 +#: mod_muc/mod_muc_room.erl:3305 msgid "Allow visitors to change nickname" msgstr "允许用户更改昵称" -#: mod_muc/mod_muc_room.erl:3038 -msgid "Make room captcha protected" +#: mod_muc/mod_muc_room.erl:3308 +msgid "Allow visitors to send voice requests" +msgstr "允许访客发送声音请求" + +#: mod_muc/mod_muc_room.erl:3311 +msgid "Minimum interval between voice requests (in seconds)" +msgstr "声音请求的最小间隔(以秒为单位)" + +#: mod_muc/mod_muc_room.erl:3317 +msgid "Make room CAPTCHA protected" msgstr "保护房间验证码" -#: mod_muc/mod_muc_room.erl:3043 +#: mod_muc/mod_muc_room.erl:3322 msgid "Exclude Jabber IDs from CAPTCHA challenge" -msgstr "" +msgstr "从验证码挑战中排除 Jabber ID" -#: mod_muc/mod_muc_room.erl:3050 +#: mod_muc/mod_muc_room.erl:3329 msgid "Enable logging" msgstr "启用服务器端聊天记录" -#: mod_muc/mod_muc_room.erl:3058 +#: mod_muc/mod_muc_room.erl:3337 msgid "You need an x:data capable client to configure room" msgstr "您需要一个兼容 x:data 的客户端来配置房间" -#: mod_muc/mod_muc_room.erl:3390 +#: mod_muc/mod_muc_room.erl:3694 msgid "Number of occupants" msgstr "驻留人数" -#: mod_muc/mod_muc_room.erl:3446 +#: mod_muc/mod_muc_room.erl:3750 msgid "private, " msgstr "保密, " -#: mod_muc/mod_muc_room.erl:3529 -msgid "~s invites you to the room ~s" -msgstr "~s邀请你到~s房间" +#: mod_muc/mod_muc_room.erl:3799 +msgid "Voice request" +msgstr "声音请求" -#: mod_muc/mod_muc_room.erl:3538 +#: mod_muc/mod_muc_room.erl:3803 +msgid "Either approve or decline the voice request." +msgstr "接受或拒绝声音请求" + +#: mod_muc/mod_muc_room.erl:3809 +msgid "User JID" +msgstr "用户 JID" + +#: mod_muc/mod_muc_room.erl:3811 +msgid "Grant voice to this person?" +msgstr "为此人授权声音?" + +#: mod_muc/mod_muc_room.erl:3960 +msgid "~s invites you to the room ~s" +msgstr "~s 邀请你到 ~s 房间" + +#: mod_muc/mod_muc_room.erl:3969 msgid "the password is" msgstr "密码是" @@ -983,14 +1037,15 @@ msgid "~s's Offline Messages Queue" msgstr "~s 的离线消息队列" #: mod_offline.erl:563 mod_offline_odbc.erl:411 mod_roster.erl:987 -#: mod_roster_odbc.erl:1092 mod_shared_roster.erl:896 -#: mod_shared_roster.erl:1005 web/ejabberd_web_admin.erl:833 +#: mod_roster_odbc.erl:1104 mod_shared_roster.erl:901 +#: mod_shared_roster.erl:1010 mod_shared_roster_odbc.erl:930 +#: mod_shared_roster_odbc.erl:1039 web/ejabberd_web_admin.erl:833 #: web/ejabberd_web_admin.erl:874 web/ejabberd_web_admin.erl:942 #: web/ejabberd_web_admin.erl:978 web/ejabberd_web_admin.erl:1019 -#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1758 -#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1961 -#: web/ejabberd_web_admin.erl:2030 web/ejabberd_web_admin.erl:2134 -#: web/ejabberd_web_admin.erl:2159 web/ejabberd_web_admin.erl:2247 +#: web/ejabberd_web_admin.erl:1508 web/ejabberd_web_admin.erl:1760 +#: web/ejabberd_web_admin.erl:1931 web/ejabberd_web_admin.erl:1963 +#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2135 +#: web/ejabberd_web_admin.erl:2160 web/ejabberd_web_admin.erl:2248 msgid "Submitted" msgstr "已提交" @@ -1010,8 +1065,9 @@ msgstr "到" msgid "Packet" msgstr "数据包" -#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:903 -#: web/ejabberd_web_admin.erl:882 web/ejabberd_web_admin.erl:986 +#: mod_offline.erl:587 mod_offline_odbc.erl:432 mod_shared_roster.erl:908 +#: mod_shared_roster_odbc.erl:937 web/ejabberd_web_admin.erl:882 +#: web/ejabberd_web_admin.erl:986 msgid "Delete Selected" msgstr "删除已选内容" @@ -1027,103 +1083,104 @@ msgstr "移除所有离线消息" msgid "ejabberd SOCKS5 Bytestreams module" msgstr "ejabberd SOCKS5 字节流模块" -#: mod_pubsub/mod_pubsub.erl:1119 mod_pubsub/mod_pubsub_odbc.erl:928 +#: mod_pubsub/mod_pubsub.erl:1120 mod_pubsub/mod_pubsub_odbc.erl:929 msgid "Publish-Subscribe" msgstr "发行-订阅" -#: mod_pubsub/mod_pubsub.erl:1213 mod_pubsub/mod_pubsub_odbc.erl:1024 +#: mod_pubsub/mod_pubsub.erl:1214 mod_pubsub/mod_pubsub_odbc.erl:1025 msgid "ejabberd Publish-Subscribe module" msgstr "ejabberd 发行-订阅模块" -#: mod_pubsub/mod_pubsub.erl:1496 mod_pubsub/mod_pubsub_odbc.erl:1311 +#: mod_pubsub/mod_pubsub.erl:1497 mod_pubsub/mod_pubsub_odbc.erl:1312 msgid "PubSub subscriber request" msgstr "PubSub 订阅人请求" -#: mod_pubsub/mod_pubsub.erl:1498 mod_pubsub/mod_pubsub_odbc.erl:1313 +#: mod_pubsub/mod_pubsub.erl:1499 mod_pubsub/mod_pubsub_odbc.erl:1314 msgid "Choose whether to approve this entity's subscription." msgstr "选择是否允许该实体的订阅" -#: mod_pubsub/mod_pubsub.erl:1504 mod_pubsub/mod_pubsub_odbc.erl:1319 +#: mod_pubsub/mod_pubsub.erl:1505 mod_pubsub/mod_pubsub_odbc.erl:1320 msgid "Node ID" msgstr "节点 ID" -#: mod_pubsub/mod_pubsub.erl:1509 mod_pubsub/mod_pubsub_odbc.erl:1324 +#: mod_pubsub/mod_pubsub.erl:1510 mod_pubsub/mod_pubsub_odbc.erl:1325 msgid "Subscriber Address" msgstr "订阅人地址" -#: mod_pubsub/mod_pubsub.erl:1515 mod_pubsub/mod_pubsub_odbc.erl:1330 +#: mod_pubsub/mod_pubsub.erl:1516 mod_pubsub/mod_pubsub_odbc.erl:1331 msgid "Allow this Jabber ID to subscribe to this pubsub node?" -msgstr "允许该 Jabber ID 订阅该pubsub节点?" +msgstr "允许该 Jabber ID 订阅该 pubsub 节点?" -#: mod_pubsub/mod_pubsub.erl:3416 mod_pubsub/mod_pubsub_odbc.erl:3229 +#: mod_pubsub/mod_pubsub.erl:3474 mod_pubsub/mod_pubsub_odbc.erl:3287 msgid "Deliver payloads with event notifications" msgstr "用事件通告传输有效负载" -#: mod_pubsub/mod_pubsub.erl:3417 mod_pubsub/mod_pubsub_odbc.erl:3230 +#: mod_pubsub/mod_pubsub.erl:3475 mod_pubsub/mod_pubsub_odbc.erl:3288 msgid "Deliver event notifications" msgstr "传递事件通知" -#: mod_pubsub/mod_pubsub.erl:3418 mod_pubsub/mod_pubsub_odbc.erl:3231 +#: mod_pubsub/mod_pubsub.erl:3476 mod_pubsub/mod_pubsub_odbc.erl:3289 msgid "Notify subscribers when the node configuration changes" msgstr "当节点设置改变时通知订阅人" -#: mod_pubsub/mod_pubsub.erl:3419 mod_pubsub/mod_pubsub_odbc.erl:3232 +#: mod_pubsub/mod_pubsub.erl:3477 mod_pubsub/mod_pubsub_odbc.erl:3290 msgid "Notify subscribers when the node is deleted" msgstr "当节点被删除时通知订阅人" -#: mod_pubsub/mod_pubsub.erl:3420 mod_pubsub/mod_pubsub_odbc.erl:3233 +#: mod_pubsub/mod_pubsub.erl:3478 mod_pubsub/mod_pubsub_odbc.erl:3291 msgid "Notify subscribers when items are removed from the node" msgstr "当从节点删除内容条目时通知订阅人" -#: mod_pubsub/mod_pubsub.erl:3421 mod_pubsub/mod_pubsub_odbc.erl:3234 +#: mod_pubsub/mod_pubsub.erl:3479 mod_pubsub/mod_pubsub_odbc.erl:3292 msgid "Persist items to storage" msgstr "持久化内容条目" -#: mod_pubsub/mod_pubsub.erl:3422 mod_pubsub/mod_pubsub_odbc.erl:3235 +#: mod_pubsub/mod_pubsub.erl:3480 mod_pubsub/mod_pubsub_odbc.erl:3293 msgid "A friendly name for the node" msgstr "该节点的友好名称" -#: mod_pubsub/mod_pubsub.erl:3423 mod_pubsub/mod_pubsub_odbc.erl:3236 +#: mod_pubsub/mod_pubsub.erl:3481 mod_pubsub/mod_pubsub_odbc.erl:3294 msgid "Max # of items to persist" msgstr "允许持久化的最大内容条目数" -#: mod_pubsub/mod_pubsub.erl:3424 mod_pubsub/mod_pubsub_odbc.erl:3237 +#: mod_pubsub/mod_pubsub.erl:3482 mod_pubsub/mod_pubsub_odbc.erl:3295 msgid "Whether to allow subscriptions" msgstr "是否允许订阅" -#: mod_pubsub/mod_pubsub.erl:3425 mod_pubsub/mod_pubsub_odbc.erl:3238 +#: mod_pubsub/mod_pubsub.erl:3483 mod_pubsub/mod_pubsub_odbc.erl:3296 msgid "Specify the access model" -msgstr "指定访问模式" +msgstr "指定访问范例" -#: mod_pubsub/mod_pubsub.erl:3428 mod_pubsub/mod_pubsub_odbc.erl:3241 +#: mod_pubsub/mod_pubsub.erl:3486 mod_pubsub/mod_pubsub_odbc.erl:3299 msgid "Roster groups allowed to subscribe" msgstr "允许订阅的花名册组" -#: mod_pubsub/mod_pubsub.erl:3429 mod_pubsub/mod_pubsub_odbc.erl:3242 +#: mod_pubsub/mod_pubsub.erl:3487 mod_pubsub/mod_pubsub_odbc.erl:3300 msgid "Specify the publisher model" -msgstr "指定发布人样式" +msgstr "指定发布人范例" -#: mod_pubsub/mod_pubsub.erl:3431 mod_pubsub/mod_pubsub_odbc.erl:3244 +#: mod_pubsub/mod_pubsub.erl:3489 mod_pubsub/mod_pubsub_odbc.erl:3302 msgid "Purge all items when the relevant publisher goes offline" msgstr "相关发布人离线后清除所有选项" -#: mod_pubsub/mod_pubsub.erl:3432 mod_pubsub/mod_pubsub_odbc.erl:3245 +#: mod_pubsub/mod_pubsub.erl:3490 mod_pubsub/mod_pubsub_odbc.erl:3303 msgid "Specify the event message type" msgstr "指定事件消息类型" -#: mod_pubsub/mod_pubsub.erl:3434 mod_pubsub/mod_pubsub_odbc.erl:3247 +# bytes was translated as 'bits'. It's corrected now. +#: mod_pubsub/mod_pubsub.erl:3492 mod_pubsub/mod_pubsub_odbc.erl:3305 msgid "Max payload size in bytes" -msgstr "最大有效负载比特数" +msgstr "最大有效负载字节数" -#: mod_pubsub/mod_pubsub.erl:3435 mod_pubsub/mod_pubsub_odbc.erl:3248 +#: mod_pubsub/mod_pubsub.erl:3493 mod_pubsub/mod_pubsub_odbc.erl:3306 msgid "When to send the last published item" msgstr "何时发送最新发布的内容条目" -#: mod_pubsub/mod_pubsub.erl:3437 mod_pubsub/mod_pubsub_odbc.erl:3250 +#: mod_pubsub/mod_pubsub.erl:3495 mod_pubsub/mod_pubsub_odbc.erl:3308 msgid "Only deliver notifications to available users" msgstr "仅将通知发送给可发送的用户" -#: mod_pubsub/mod_pubsub.erl:3438 mod_pubsub/mod_pubsub_odbc.erl:3251 +#: mod_pubsub/mod_pubsub.erl:3496 mod_pubsub/mod_pubsub_odbc.erl:3309 msgid "The collections with which a node is affiliated" msgstr "加入结点的集合" @@ -1139,15 +1196,11 @@ msgstr "您需要一个支持 x:data 和验证码的客户端进行注册" msgid "Choose a username and password to register with this server" msgstr "请选择在此服务器上注册所需的用户名和密码" -#: mod_register.erl:230 mod_vcard.erl:358 mod_vcard_odbc.erl:336 -#: web/ejabberd_web_admin.erl:1516 web/ejabberd_web_admin.erl:1573 +#: mod_register.erl:230 mod_vcard.erl:364 mod_vcard_odbc.erl:342 +#: web/ejabberd_web_admin.erl:1515 web/ejabberd_web_admin.erl:1572 msgid "User" msgstr "用户" -#: mod_register.erl:251 -msgid "Unable to generate a CAPTCHA" -msgstr "无法生成验证码" - #: mod_register.erl:316 mod_register.erl:361 msgid "The password is too weak" msgstr "密码强度太弱" @@ -1156,171 +1209,174 @@ msgstr "密码强度太弱" msgid "Users are not allowed to register accounts so quickly" msgstr "不允许用户太频繁地注册帐户" -#: mod_roster.erl:938 mod_roster_odbc.erl:1043 web/ejabberd_web_admin.erl:1699 -#: web/ejabberd_web_admin.erl:1884 web/ejabberd_web_admin.erl:1895 -#: web/ejabberd_web_admin.erl:2218 +#: mod_roster.erl:938 mod_roster_odbc.erl:1055 web/ejabberd_web_admin.erl:1701 +#: web/ejabberd_web_admin.erl:1886 web/ejabberd_web_admin.erl:1897 +#: web/ejabberd_web_admin.erl:2219 msgid "None" msgstr "无" -#: mod_roster.erl:945 mod_roster_odbc.erl:1050 +#: mod_roster.erl:945 mod_roster_odbc.erl:1062 msgid "Subscription" msgstr "订阅" -#: mod_roster.erl:946 mod_roster_odbc.erl:1051 +#: mod_roster.erl:946 mod_roster_odbc.erl:1063 msgid "Pending" msgstr "挂起" -#: mod_roster.erl:947 mod_roster_odbc.erl:1052 +#: mod_roster.erl:947 mod_roster_odbc.erl:1064 msgid "Groups" msgstr "组" -#: mod_roster.erl:974 mod_roster_odbc.erl:1079 +#: mod_roster.erl:974 mod_roster_odbc.erl:1091 msgid "Validate" msgstr "确认" -#: mod_roster.erl:982 mod_roster_odbc.erl:1087 +#: mod_roster.erl:982 mod_roster_odbc.erl:1099 msgid "Remove" msgstr "移除" -#: mod_roster.erl:985 mod_roster_odbc.erl:1090 +#: mod_roster.erl:985 mod_roster_odbc.erl:1102 msgid "Roster of " msgstr "花名册属于 " -#: mod_roster.erl:988 mod_roster_odbc.erl:1093 mod_shared_roster.erl:897 -#: mod_shared_roster.erl:1006 web/ejabberd_web_admin.erl:834 +#: mod_roster.erl:988 mod_roster_odbc.erl:1105 mod_shared_roster.erl:902 +#: mod_shared_roster.erl:1011 mod_shared_roster_odbc.erl:931 +#: mod_shared_roster_odbc.erl:1040 web/ejabberd_web_admin.erl:834 #: web/ejabberd_web_admin.erl:875 web/ejabberd_web_admin.erl:943 #: web/ejabberd_web_admin.erl:979 web/ejabberd_web_admin.erl:1020 -#: web/ejabberd_web_admin.erl:1510 web/ejabberd_web_admin.erl:1759 -#: web/ejabberd_web_admin.erl:1930 web/ejabberd_web_admin.erl:2135 -#: web/ejabberd_web_admin.erl:2160 +#: web/ejabberd_web_admin.erl:1509 web/ejabberd_web_admin.erl:1761 +#: web/ejabberd_web_admin.erl:1932 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2161 msgid "Bad format" msgstr "格式错误" -#: mod_roster.erl:995 mod_roster_odbc.erl:1100 +#: mod_roster.erl:995 mod_roster_odbc.erl:1112 msgid "Add Jabber ID" msgstr "添加 Jabber ID" -#: mod_roster.erl:1094 mod_roster_odbc.erl:1199 +#: mod_roster.erl:1094 mod_roster_odbc.erl:1211 msgid "Roster" msgstr "花名册" -#: mod_shared_roster.erl:852 mod_shared_roster.erl:894 -#: mod_shared_roster.erl:1002 +#: mod_shared_roster.erl:857 mod_shared_roster.erl:899 +#: mod_shared_roster.erl:1007 mod_shared_roster_odbc.erl:886 +#: mod_shared_roster_odbc.erl:928 mod_shared_roster_odbc.erl:1036 msgid "Shared Roster Groups" msgstr "共享的花名册组群" -#: mod_shared_roster.erl:890 web/ejabberd_web_admin.erl:1366 -#: web/ejabberd_web_admin.erl:2460 +#: mod_shared_roster.erl:895 mod_shared_roster_odbc.erl:924 +#: web/ejabberd_web_admin.erl:1365 web/ejabberd_web_admin.erl:2461 msgid "Add New" msgstr "添加新用户" -#: mod_shared_roster.erl:973 +#: mod_shared_roster.erl:978 mod_shared_roster_odbc.erl:1007 msgid "Name:" msgstr "姓名:" -#: mod_shared_roster.erl:978 +#: mod_shared_roster.erl:983 mod_shared_roster_odbc.erl:1012 msgid "Description:" msgstr "描述:" -#: mod_shared_roster.erl:986 +#: mod_shared_roster.erl:991 mod_shared_roster_odbc.erl:1020 msgid "Members:" msgstr "会员:" -#: mod_shared_roster.erl:994 +#: mod_shared_roster.erl:999 mod_shared_roster_odbc.erl:1028 msgid "Displayed Groups:" msgstr "已显示的组:" -#: mod_shared_roster.erl:1003 +#: mod_shared_roster.erl:1008 mod_shared_roster_odbc.erl:1037 msgid "Group " msgstr "组" -#: mod_shared_roster.erl:1012 web/ejabberd_web_admin.erl:840 -#: web/ejabberd_web_admin.erl:884 web/ejabberd_web_admin.erl:949 -#: web/ejabberd_web_admin.erl:1026 web/ejabberd_web_admin.erl:2015 +#: mod_shared_roster.erl:1017 mod_shared_roster_odbc.erl:1046 +#: web/ejabberd_web_admin.erl:840 web/ejabberd_web_admin.erl:884 +#: web/ejabberd_web_admin.erl:949 web/ejabberd_web_admin.erl:1026 +#: web/ejabberd_web_admin.erl:2017 msgid "Submit" msgstr "提交" -#: mod_vcard.erl:165 mod_vcard_ldap.erl:237 mod_vcard_odbc.erl:129 +#: mod_vcard.erl:165 mod_vcard_ldap.erl:238 mod_vcard_odbc.erl:129 msgid "Erlang Jabber Server" msgstr "Erlang Jabber 服务器" -#: mod_vcard.erl:358 mod_vcard.erl:472 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:448 +#: mod_vcard.erl:364 mod_vcard.erl:478 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:454 msgid "Birthday" msgstr "出生日期" -#: mod_vcard.erl:358 mod_vcard.erl:474 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:450 +#: mod_vcard.erl:364 mod_vcard.erl:480 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:456 msgid "City" msgstr "城市" -#: mod_vcard.erl:358 mod_vcard.erl:473 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:449 +#: mod_vcard.erl:364 mod_vcard.erl:479 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:455 msgid "Country" msgstr "国家" -#: mod_vcard.erl:358 mod_vcard.erl:475 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:451 +#: mod_vcard.erl:364 mod_vcard.erl:481 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:457 msgid "Email" msgstr "电子邮件" -#: mod_vcard.erl:358 mod_vcard.erl:470 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:446 +#: mod_vcard.erl:364 mod_vcard.erl:476 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:452 msgid "Family Name" msgstr "姓氏" -#: mod_vcard.erl:358 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_odbc.erl:342 msgid "" "Fill in the form to search for any matching Jabber User (Add * to the end of " "field to match substring)" msgstr "填充表单以搜索任何匹配的 Jabber 用户(在字段末添加*来匹配子串)" -#: mod_vcard.erl:358 mod_vcard.erl:467 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:443 +#: mod_vcard.erl:364 mod_vcard.erl:473 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:449 msgid "Full Name" msgstr "全名" -#: mod_vcard.erl:358 mod_vcard.erl:469 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:445 +#: mod_vcard.erl:364 mod_vcard.erl:475 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:451 msgid "Middle Name" msgstr "中间名" -#: mod_vcard.erl:358 mod_vcard.erl:468 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:444 web/ejabberd_web_admin.erl:2004 +#: mod_vcard.erl:364 mod_vcard.erl:474 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:450 web/ejabberd_web_admin.erl:2006 msgid "Name" msgstr "姓名" -#: mod_vcard.erl:358 mod_vcard.erl:476 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:452 +#: mod_vcard.erl:364 mod_vcard.erl:482 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:458 msgid "Organization Name" msgstr "组织名称" -#: mod_vcard.erl:358 mod_vcard.erl:477 mod_vcard_odbc.erl:336 -#: mod_vcard_odbc.erl:453 +#: mod_vcard.erl:364 mod_vcard.erl:483 mod_vcard_odbc.erl:342 +#: mod_vcard_odbc.erl:459 msgid "Organization Unit" msgstr "组织单位" -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "Search users in " msgstr "搜索用户于 " -#: mod_vcard.erl:358 mod_vcard_ldap.erl:458 mod_vcard_odbc.erl:336 +#: mod_vcard.erl:364 mod_vcard_ldap.erl:462 mod_vcard_odbc.erl:342 msgid "You need an x:data capable client to search" msgstr "您需要一个兼容 x:data 的客户端来搜索" -#: mod_vcard.erl:383 mod_vcard_ldap.erl:483 mod_vcard_odbc.erl:361 +#: mod_vcard.erl:389 mod_vcard_ldap.erl:487 mod_vcard_odbc.erl:367 msgid "vCard User Search" msgstr "vCard 用户搜索" -#: mod_vcard.erl:439 mod_vcard_ldap.erl:537 mod_vcard_odbc.erl:415 +#: mod_vcard.erl:445 mod_vcard_ldap.erl:541 mod_vcard_odbc.erl:421 msgid "ejabberd vCard module" msgstr "ejabberd vCard 模块" -#: mod_vcard.erl:463 mod_vcard_ldap.erl:547 mod_vcard_odbc.erl:439 +#: mod_vcard.erl:469 mod_vcard_ldap.erl:551 mod_vcard_odbc.erl:445 msgid "Search Results for " msgstr "搜索结果属于关键词 " -#: mod_vcard_ldap.erl:458 +#: mod_vcard_ldap.erl:462 msgid "Fill in fields to search for any matching Jabber User" msgstr "填充字段以搜索任何匹配的 Jabber 用户" @@ -1381,7 +1437,7 @@ msgstr "显示普通列表" msgid "Show Integral Table" msgstr "显示完整列表" -#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1937 +#: web/ejabberd_web_admin.erl:1105 web/ejabberd_web_admin.erl:1939 msgid "Statistics" msgstr "统计" @@ -1393,116 +1449,116 @@ msgstr "没有找到" msgid "Node not found" msgstr "没有找到节点" -#: web/ejabberd_web_admin.erl:1461 +#: web/ejabberd_web_admin.erl:1460 msgid "Host" msgstr "主机" -#: web/ejabberd_web_admin.erl:1462 +#: web/ejabberd_web_admin.erl:1461 msgid "Registered Users" msgstr "注册用户" -#: web/ejabberd_web_admin.erl:1574 +#: web/ejabberd_web_admin.erl:1573 msgid "Offline Messages" msgstr "离线消息" -#: web/ejabberd_web_admin.erl:1575 web/ejabberd_web_admin.erl:1765 +#: web/ejabberd_web_admin.erl:1574 web/ejabberd_web_admin.erl:1767 msgid "Last Activity" msgstr "上次活动" -#: web/ejabberd_web_admin.erl:1657 web/ejabberd_web_admin.erl:1673 +#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 msgid "Registered Users:" msgstr "注册用户:" -#: web/ejabberd_web_admin.erl:1659 web/ejabberd_web_admin.erl:1675 -#: web/ejabberd_web_admin.erl:2191 +#: web/ejabberd_web_admin.erl:1661 web/ejabberd_web_admin.erl:1677 +#: web/ejabberd_web_admin.erl:2192 msgid "Online Users:" msgstr "在线用户:" -#: web/ejabberd_web_admin.erl:1661 +#: web/ejabberd_web_admin.erl:1663 msgid "Outgoing s2s Connections:" msgstr "出站 s2s 连接:" -#: web/ejabberd_web_admin.erl:1663 +#: web/ejabberd_web_admin.erl:1665 msgid "Outgoing s2s Servers:" msgstr "出站 s2s 服务器" -#: web/ejabberd_web_admin.erl:1732 web/mod_register_web.erl:175 +#: web/ejabberd_web_admin.erl:1734 web/mod_register_web.erl:175 #: web/mod_register_web.erl:372 web/mod_register_web.erl:381 #: web/mod_register_web.erl:411 msgid "Change Password" msgstr "更改密码" -#: web/ejabberd_web_admin.erl:1756 +#: web/ejabberd_web_admin.erl:1758 msgid "User " msgstr "用户 " -#: web/ejabberd_web_admin.erl:1763 +#: web/ejabberd_web_admin.erl:1765 msgid "Connected Resources:" msgstr "已连接资源:" -#: web/ejabberd_web_admin.erl:1764 web/mod_register_web.erl:227 +#: web/ejabberd_web_admin.erl:1766 web/mod_register_web.erl:227 #: web/mod_register_web.erl:519 msgid "Password:" -msgstr "密码: " +msgstr "密码:" -#: web/ejabberd_web_admin.erl:1826 +#: web/ejabberd_web_admin.erl:1828 msgid "No Data" msgstr "没有数据" -#: web/ejabberd_web_admin.erl:1904 +#: web/ejabberd_web_admin.erl:1906 msgid "Nodes" msgstr "节点" -#: web/ejabberd_web_admin.erl:1927 web/ejabberd_web_admin.erl:1949 +#: web/ejabberd_web_admin.erl:1929 web/ejabberd_web_admin.erl:1951 msgid "Node " msgstr "节点 " -#: web/ejabberd_web_admin.erl:1936 +#: web/ejabberd_web_admin.erl:1938 msgid "Listened Ports" msgstr "被监听的端口" -#: web/ejabberd_web_admin.erl:1938 web/ejabberd_web_admin.erl:2259 -#: web/ejabberd_web_admin.erl:2447 +#: web/ejabberd_web_admin.erl:1940 web/ejabberd_web_admin.erl:2260 +#: web/ejabberd_web_admin.erl:2448 msgid "Update" msgstr "更新" -#: web/ejabberd_web_admin.erl:1941 web/ejabberd_web_admin.erl:2568 +#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2569 msgid "Restart" msgstr "重启" -#: web/ejabberd_web_admin.erl:1943 web/ejabberd_web_admin.erl:2570 +#: web/ejabberd_web_admin.erl:1945 web/ejabberd_web_admin.erl:2571 msgid "Stop" msgstr "停止" -#: web/ejabberd_web_admin.erl:1957 +#: web/ejabberd_web_admin.erl:1959 msgid "RPC Call Error" msgstr "RPC 调用错误" -#: web/ejabberd_web_admin.erl:1998 +#: web/ejabberd_web_admin.erl:2000 msgid "Database Tables at " msgstr "数据库列表位于 " -#: web/ejabberd_web_admin.erl:2005 +#: web/ejabberd_web_admin.erl:2007 msgid "Storage Type" msgstr "存储类型" -#: web/ejabberd_web_admin.erl:2006 +#: web/ejabberd_web_admin.erl:2008 msgid "Elements" msgstr "元素" -#: web/ejabberd_web_admin.erl:2007 +#: web/ejabberd_web_admin.erl:2009 msgid "Memory" msgstr "内存" -#: web/ejabberd_web_admin.erl:2031 web/ejabberd_web_admin.erl:2136 +#: web/ejabberd_web_admin.erl:2032 web/ejabberd_web_admin.erl:2137 msgid "Error" msgstr "错误" -#: web/ejabberd_web_admin.erl:2033 +#: web/ejabberd_web_admin.erl:2034 msgid "Backup of " msgstr "备份来源 " -#: web/ejabberd_web_admin.erl:2035 +#: web/ejabberd_web_admin.erl:2036 msgid "" "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 " @@ -1511,140 +1567,140 @@ msgstr "" "注意:这些选项仅将备份内置的 Mnesia 数据库. 如果您正在使用 ODBC 模块, 您还需" "要分别备份您的数据库." -#: web/ejabberd_web_admin.erl:2040 +#: web/ejabberd_web_admin.erl:2041 msgid "Store binary backup:" msgstr "存储为二进制备份:" -#: web/ejabberd_web_admin.erl:2044 web/ejabberd_web_admin.erl:2051 -#: web/ejabberd_web_admin.erl:2059 web/ejabberd_web_admin.erl:2066 -#: web/ejabberd_web_admin.erl:2073 web/ejabberd_web_admin.erl:2080 -#: web/ejabberd_web_admin.erl:2087 web/ejabberd_web_admin.erl:2095 -#: web/ejabberd_web_admin.erl:2102 web/ejabberd_web_admin.erl:2109 +#: web/ejabberd_web_admin.erl:2045 web/ejabberd_web_admin.erl:2052 +#: web/ejabberd_web_admin.erl:2060 web/ejabberd_web_admin.erl:2067 +#: web/ejabberd_web_admin.erl:2074 web/ejabberd_web_admin.erl:2081 +#: web/ejabberd_web_admin.erl:2088 web/ejabberd_web_admin.erl:2096 +#: web/ejabberd_web_admin.erl:2103 web/ejabberd_web_admin.erl:2110 msgid "OK" msgstr "确定" -#: web/ejabberd_web_admin.erl:2047 +#: web/ejabberd_web_admin.erl:2048 msgid "Restore binary backup immediately:" msgstr "立即恢复二进制备份:" -#: web/ejabberd_web_admin.erl:2055 +#: web/ejabberd_web_admin.erl:2056 msgid "" "Restore binary backup after next ejabberd restart (requires less memory):" msgstr "在下次 ejabberd 重启后恢复二进制备份(需要的内存更少):" -#: web/ejabberd_web_admin.erl:2062 +#: web/ejabberd_web_admin.erl:2063 msgid "Store plain text backup:" msgstr "存储为普通文本备份:" -#: web/ejabberd_web_admin.erl:2069 +#: web/ejabberd_web_admin.erl:2070 msgid "Restore plain text backup immediately:" msgstr "立即恢复普通文本备份:" -#: web/ejabberd_web_admin.erl:2076 +#: web/ejabberd_web_admin.erl:2077 msgid "Import users data from a PIEFXIS file (XEP-0227):" -msgstr "从 PIEFXIS 文件 (XEP-0227)导入用户数据:" +msgstr "从 PIEFXIS 文件 (XEP-0227) 导入用户数据:" -#: web/ejabberd_web_admin.erl:2083 +#: web/ejabberd_web_admin.erl:2084 msgid "Export data of all users in the server to PIEFXIS files (XEP-0227):" msgstr "将服务器上所有用户的数据导出到 PIEFXIS 文件 (XEP-0227):" -#: web/ejabberd_web_admin.erl:2090 +#: web/ejabberd_web_admin.erl:2091 msgid "Export data of users in a host to PIEFXIS files (XEP-0227):" msgstr "将某主机的用户数据导出到 PIEFXIS 文件 (XEP-0227):" -#: web/ejabberd_web_admin.erl:2098 +#: web/ejabberd_web_admin.erl:2099 msgid "Import user data from jabberd14 spool file:" -msgstr "从 jabberd14 Spool文件导入用户数据:" +msgstr "从 jabberd14 Spool 文件导入用户数据:" -#: web/ejabberd_web_admin.erl:2105 +#: web/ejabberd_web_admin.erl:2106 msgid "Import users data from jabberd14 spool directory:" -msgstr "从 jabberd14 Spool目录导入用户数据:" +msgstr "从 jabberd14 Spool 目录导入用户数据:" -#: web/ejabberd_web_admin.erl:2131 +#: web/ejabberd_web_admin.erl:2132 msgid "Listened Ports at " msgstr "监听的端口位于 " -#: web/ejabberd_web_admin.erl:2156 +#: web/ejabberd_web_admin.erl:2157 msgid "Modules at " msgstr "模块位于 " -#: web/ejabberd_web_admin.erl:2182 +#: web/ejabberd_web_admin.erl:2183 msgid "Statistics of ~p" msgstr "~p 的统计" -#: web/ejabberd_web_admin.erl:2185 +#: web/ejabberd_web_admin.erl:2186 msgid "Uptime:" msgstr "正常运行时间:" -#: web/ejabberd_web_admin.erl:2188 +#: web/ejabberd_web_admin.erl:2189 msgid "CPU Time:" msgstr "CPU 时间:" -#: web/ejabberd_web_admin.erl:2194 +#: web/ejabberd_web_admin.erl:2195 msgid "Transactions Committed:" msgstr "提交的事务:" -#: web/ejabberd_web_admin.erl:2197 +#: web/ejabberd_web_admin.erl:2198 msgid "Transactions Aborted:" msgstr "取消的事务:" -#: web/ejabberd_web_admin.erl:2200 +#: web/ejabberd_web_admin.erl:2201 msgid "Transactions Restarted:" msgstr "重启的事务:" -#: web/ejabberd_web_admin.erl:2203 +#: web/ejabberd_web_admin.erl:2204 msgid "Transactions Logged:" msgstr "记入日志的事务:" -#: web/ejabberd_web_admin.erl:2245 +#: web/ejabberd_web_admin.erl:2246 msgid "Update " msgstr "更新 " -#: web/ejabberd_web_admin.erl:2253 +#: web/ejabberd_web_admin.erl:2254 msgid "Update plan" msgstr "更新计划" -#: web/ejabberd_web_admin.erl:2254 +#: web/ejabberd_web_admin.erl:2255 msgid "Modified modules" msgstr "被修改模块" -#: web/ejabberd_web_admin.erl:2255 +#: web/ejabberd_web_admin.erl:2256 msgid "Update script" msgstr "更新脚本" -#: web/ejabberd_web_admin.erl:2256 +#: web/ejabberd_web_admin.erl:2257 msgid "Low level update script" msgstr "低级别更新脚本" -#: web/ejabberd_web_admin.erl:2257 +#: web/ejabberd_web_admin.erl:2258 msgid "Script check" msgstr "脚本检查" -#: web/ejabberd_web_admin.erl:2425 +#: web/ejabberd_web_admin.erl:2426 msgid "Port" msgstr "端口" -#: web/ejabberd_web_admin.erl:2426 +#: web/ejabberd_web_admin.erl:2427 msgid "IP" msgstr "IP" -#: web/ejabberd_web_admin.erl:2427 +#: web/ejabberd_web_admin.erl:2428 msgid "Protocol" msgstr "协议" -#: web/ejabberd_web_admin.erl:2428 web/ejabberd_web_admin.erl:2555 +#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 msgid "Module" msgstr "模块" -#: web/ejabberd_web_admin.erl:2429 web/ejabberd_web_admin.erl:2556 +#: web/ejabberd_web_admin.erl:2430 web/ejabberd_web_admin.erl:2557 msgid "Options" msgstr "选项" -#: web/ejabberd_web_admin.erl:2449 +#: web/ejabberd_web_admin.erl:2450 msgid "Delete" msgstr "删除" -#: web/ejabberd_web_admin.erl:2578 +#: web/ejabberd_web_admin.erl:2579 msgid "Start" msgstr "开始" diff --git a/src/odbc/ejabberd_odbc.erl b/src/odbc/ejabberd_odbc.erl index 88252a6c5..0c390b671 100644 --- a/src/odbc/ejabberd_odbc.erl +++ b/src/odbc/ejabberd_odbc.erl @@ -41,7 +41,9 @@ escape_like/1, to_bool/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 -export([init/1, @@ -177,6 +179,14 @@ to_bool(true) -> true; to_bool(1) -> true; 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 %%%---------------------------------------------------------------------- diff --git a/src/odbc/mysql.sql b/src/odbc/mysql.sql index 0ef76dc6f..33f34dc28 100644 --- a/src/odbc/mysql.sql +++ b/src/odbc/mysql.sql @@ -59,6 +59,21 @@ CREATE TABLE rostergroups ( 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 ( username varchar(250) NOT NULL, @@ -76,6 +91,11 @@ CREATE TABLE vcard ( created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ) 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 ( 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 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; diff --git a/src/odbc/odbc_queries.erl b/src/odbc/odbc_queries.erl index 888e311f1..c00cdd639 100644 --- a/src/odbc/odbc_queries.erl +++ b/src/odbc/odbc_queries.erl @@ -28,6 +28,7 @@ -author("mremond@process-one.net"). -export([get_db_type/0, + update_t/4, sql_transaction/2, get_last/2, set_last_t/4, @@ -69,6 +70,7 @@ get_privacy_list_id_t/2, get_privacy_list_data/3, get_privacy_list_data_by_id/2, + get_privacy_list_data_by_id_t/1, set_default_privacy_list/2, unset_default_privacy_list/2, remove_privacy_list/2, @@ -523,6 +525,13 @@ get_privacy_list_data_by_id(LServer, ID) -> "from privacy_list_data " "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) -> update_t("privacy_default_list", ["username", "name"], [Username, SName], ["username='", Username, "'"]). @@ -851,6 +860,10 @@ get_privacy_list_data_by_id(LServer, ID) -> LServer, ["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) -> ejabberd_odbc:sql_query_t( ["EXECUTE dbo.set_default_privacy_list '", Username, "' , '", SName, "'"]). diff --git a/src/odbc/pg.sql b/src/odbc/pg.sql index 06fcc47c1..a7d88d3de 100644 --- a/src/odbc/pg.sql +++ b/src/odbc/pg.sql @@ -57,6 +57,21 @@ CREATE TABLE rostergroups ( 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 ( username text NOT NULL, @@ -74,6 +89,12 @@ CREATE TABLE vcard ( 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 ( username text NOT NULL, lusername text PRIMARY KEY, @@ -219,3 +240,37 @@ CREATE TABLE pubsub_subscription_opt ( opt_value text ); 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() +); diff --git a/src/p1_fsm.erl b/src/p1_fsm.erl index eea3c73c4..c3a7301e9 100644 --- a/src/p1_fsm.erl +++ b/src/p1_fsm.erl @@ -292,7 +292,7 @@ get_proc_name({local, Name}) -> exit(process_not_registered) end; get_proc_name({global, Name}) -> - case global:safe_whereis_name(Name) of + case global:whereis_name(Name) of undefined -> exit(process_not_registered_globally); Pid when Pid==self() -> @@ -314,7 +314,7 @@ get_parent() -> name_to_pid(Name) -> case whereis(Name) of undefined -> - case global:safe_whereis_name(Name) of + case global:whereis_name(Name) of undefined -> exit(could_not_find_registerd_name); Pid -> diff --git a/src/stringprep/Makefile.win32 b/src/stringprep/Makefile.win32 index 60ccb416c..b044a105d 100644 --- a/src/stringprep/Makefile.win32 +++ b/src/stringprep/Makefile.win32 @@ -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 $(DLL) : $(OBJECT) - $(LD) $(LD_FLAGS) -out:$(DLL) $(OBJECT) + $(LD) $(LD_FLAGS) -out:$@ $< $(OBJECT) : $(SOURCE) $(AUXIL) - $(CC) $(CC_FLAGS) -c -Fo$(OBJECT) $(SOURCE) + $(CC) $(CC_FLAGS) -c -Fo$@ $< diff --git a/src/tls/Makefile.win32 b/src/tls/Makefile.win32 index b982791e2..f5a3dba05 100644 --- a/src/tls/Makefile.win32 +++ b/src/tls/Makefile.win32 @@ -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 $(DLL) : $(OBJECT) - $(LD) $(LD_FLAGS) -out:$(DLL) $(OBJECT) + $(LD) $(LD_FLAGS) -out:$@ $< $(OBJECT) : $(SOURCE) - $(CC) $(CC_FLAGS) -c -Fo$(OBJECT) $(SOURCE) + $(CC) $(CC_FLAGS) -c -Fo$@ $<