Compare commits
88 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4468c87115 | |||
| 4b83ec1204 | |||
| 03e62308e2 | |||
| c0dafc074d | |||
| 3bb89010fe | |||
| 3e4ebfae7e | |||
| c64df48978 | |||
| 1c74bb7131 | |||
| f577715468 | |||
| 1cd4f730b9 | |||
| edae3c9cc5 | |||
| 815030a4f0 | |||
| 82bd7e5d5b | |||
| 453d504fb7 | |||
| 627564983b | |||
| 7e8b59a0aa | |||
| 9bf37d7fdf | |||
| 02830a8b76 | |||
| d8f01080ce | |||
| 1f88a26f60 | |||
| c6f2d0c3eb | |||
| 13e1307ab1 | |||
| f6c6ff561a | |||
| c4d45ec08c | |||
| 7008ae231c | |||
| 14c8e1226f | |||
| 8b78d27f30 | |||
| 2fbd447f64 | |||
| 14d82fa600 | |||
| 33fc320f1d | |||
| 9fbea40721 | |||
| 9525978f26 | |||
| 75a4e23996 | |||
| 404ae56e07 | |||
| 2946df357c | |||
| 5318bf3743 | |||
| 0f43c2c528 | |||
| b5da0ffd7e | |||
| 7ee018ad23 | |||
| 31884f6c9d | |||
| c46bf7d56b | |||
| 1b155ed6e7 | |||
| e648cd7397 | |||
| 3c248745e5 | |||
| c45b526ec3 | |||
| bf1600891b | |||
| b139eb2fb3 | |||
| 9bd4f60c8a | |||
| ca5d5f3b4c | |||
| 7209486386 | |||
| bb8bdf57b3 | |||
| c8bec07c45 | |||
| b41ce8828c | |||
| 3720b42b0f | |||
| 69be0abdba | |||
| 09f5e2aa03 | |||
| 7da033f733 | |||
| 14871c54ac | |||
| 3c16f21413 | |||
| 14d87cb5e9 | |||
| 72ecf91f08 | |||
| 4bc57f76eb | |||
| 18c9f5eedf | |||
| 4495f0f0b9 | |||
| fad14ff319 | |||
| 8cb7ff7a88 | |||
| 96929a5084 | |||
| 1f194e417d | |||
| e3fd120fd4 | |||
| 7b8bd960c6 | |||
| d147c733bb | |||
| 3d7fa15be7 | |||
| 6a0b01fe7f | |||
| 2d79a69719 | |||
| a51e777c56 | |||
| 1c3a7b7c96 | |||
| 26ee3141a9 | |||
| 75c0443df2 | |||
| 5eab8450e7 | |||
| 22d76bd1a4 | |||
| bb397bb424 | |||
| b3d9c0d1f7 | |||
| d3aeed839d | |||
| c0b364839c | |||
| 6a6b771e0b | |||
| 58e28e82bb | |||
| d6e9e03422 | |||
| 1f60f5d8af |
@@ -0,0 +1,83 @@
|
||||
name: Tests
|
||||
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'examples/**'
|
||||
- 'man/**'
|
||||
- 'priv/**'
|
||||
- 'sql/**'
|
||||
- 'test/**'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'examples/**'
|
||||
- 'man/**'
|
||||
- 'priv/**'
|
||||
- 'sql/**'
|
||||
- 'test/**'
|
||||
|
||||
jobs:
|
||||
dialyzer:
|
||||
name: Dialyzer
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
fail-fast: true
|
||||
max-parallel: 1
|
||||
matrix:
|
||||
erlang: ["19.3", "latest"]
|
||||
container:
|
||||
image: erlang:${{ matrix.erlang }}
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Rebar3 cache
|
||||
uses: actions/cache@v2
|
||||
env:
|
||||
cache-name: cache-rebar3-deps
|
||||
with:
|
||||
path: ~/.cache/rebar3/
|
||||
key: rebar3-${{ runner.os }}-erlang-${{ matrix.erlang }}
|
||||
|
||||
- name: System versions
|
||||
run: |
|
||||
uname -a
|
||||
cat /etc/issue
|
||||
erl -version
|
||||
rebar3 version
|
||||
|
||||
- name: Libraries
|
||||
run: |
|
||||
apt-get -qq update
|
||||
apt-get -qq install libgd-dev libpam-dev
|
||||
|
||||
- name: Compile
|
||||
run: |
|
||||
./autogen.sh
|
||||
./configure --with-rebar=`which rebar3` \
|
||||
--enable-latest-deps \
|
||||
--enable-all --disable-elixir
|
||||
make
|
||||
|
||||
- name: Hooks
|
||||
run: make hooks
|
||||
|
||||
- name: Options
|
||||
run: make options
|
||||
|
||||
- name: Xref
|
||||
run: |
|
||||
echo "{xref_ignores, [{eldap_filter_yecc, return_error, 2}]}." >>rebar.config
|
||||
echo "{xref_checks, [deprecated_function_calls, deprecated_functions,
|
||||
locals_not_used, undefined_function_calls, undefined_functions]}.
|
||||
% Disabled: exports_not_used," >>rebar.config
|
||||
make xref
|
||||
|
||||
- name: Dialyzer
|
||||
run: |
|
||||
echo "{dialyzer, [{get_warnings, true}, {plt_extra_apps, [cache_tab,
|
||||
eimp, epam, esip, ezlib, fast_tls, fast_xml, fast_yaml,
|
||||
mqtree, p1_acme, p1_mysql, p1_oauth2, p1_pgsql, p1_utils, pkix,
|
||||
sqlite3, stringprep, stun, xmpp, yconf]} ]}." >>rebar.config
|
||||
make dialyzer
|
||||
+4
-19
@@ -11,31 +11,14 @@
|
||||
/config.status
|
||||
/configure
|
||||
/aclocal.m4
|
||||
/contrib/extract_translations/extract_translations.beam
|
||||
/*.cache
|
||||
/deps/
|
||||
/doc/*.aux
|
||||
/doc/*.haux
|
||||
/doc/*.html
|
||||
/doc/*.htoc
|
||||
/doc/*.idx
|
||||
/doc/*.ilg
|
||||
/doc/*.ind
|
||||
/doc/*.log
|
||||
/doc/*.out
|
||||
/doc/*.pdf
|
||||
/doc/*.toc
|
||||
/doc/contributed_modules.tex
|
||||
/doc/version.tex
|
||||
/.deps-update/
|
||||
/ebin/
|
||||
/ejabberd.init
|
||||
/ejabberd.service
|
||||
/ejabberdctl.example
|
||||
XmppAddr.hrl
|
||||
/rel/ejabberd/
|
||||
/src/XmppAddr.asn1db
|
||||
/src/XmppAddr.erl
|
||||
/src/ejabberd.app.src
|
||||
/src/eldap_filter_yecc.erl
|
||||
/vars.config
|
||||
/dialyzer/
|
||||
@@ -45,5 +28,7 @@ XmppAddr.hrl
|
||||
/priv/sql
|
||||
/rel/ejabberd
|
||||
/_build
|
||||
/mnesiadb
|
||||
/database/
|
||||
/.rebar
|
||||
/rebar.lock
|
||||
/log/
|
||||
|
||||
+7
-16
@@ -2,8 +2,7 @@ language: erlang
|
||||
|
||||
otp_release:
|
||||
- 19.3
|
||||
- 22.3
|
||||
- 23.0
|
||||
- 23.1.2
|
||||
|
||||
os: linux
|
||||
|
||||
@@ -11,24 +10,11 @@ dist: xenial
|
||||
|
||||
services:
|
||||
- redis
|
||||
- mysql
|
||||
- postgresql
|
||||
|
||||
before_install:
|
||||
#
|
||||
# We need MySQL 5.6 or newer in order to get support for FULLTEXT indexes
|
||||
# with InnoDB. As soon as Travis ships that version, the following lines
|
||||
# (except for the "apt-get update" call) can go away.
|
||||
#
|
||||
# See: https://github.com/travis-ci/travis-ci/issues/1986
|
||||
#
|
||||
- sudo sed -i -e s/table_cache/table_open_cache/ -e /log_slow_queries/d /etc/mysql/my.cnf
|
||||
- sudo apt-key adv --import .travis/mysql_repo_key.asc
|
||||
- sudo add-apt-repository 'deb http://repo.mysql.com/apt/ubuntu/ precise mysql-5.6'
|
||||
- sudo apt-get -qq update
|
||||
- sudo apt-get -qq -o Dpkg::Options::=--force-confold install mysql-server
|
||||
- sudo service mysql start
|
||||
- sudo mysql_upgrade
|
||||
# /END MYSQL 5.6
|
||||
- pip install --user coveralls-merge
|
||||
|
||||
install:
|
||||
@@ -47,9 +33,14 @@ before_script:
|
||||
- psql -U postgres ejabberd_test -c "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO ejabberd_test;"
|
||||
- psql -U postgres ejabberd_test -c "GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO ejabberd_test;"
|
||||
|
||||
cache:
|
||||
directories:
|
||||
- deps/
|
||||
|
||||
script:
|
||||
- ./autogen.sh
|
||||
- ./configure --prefix=/tmp/ejabberd --enable-all --disable-odbc --disable-elixir
|
||||
- make update
|
||||
- make
|
||||
- make install -s
|
||||
- make xref
|
||||
|
||||
@@ -1,432 +0,0 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v1
|
||||
|
||||
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
|
||||
roUTAKClYAhZuX2nUNwH4vlEJQHDqYa5yQ==
|
||||
=ghXk
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
+8
-3
@@ -143,13 +143,13 @@ xref: all
|
||||
$(REBAR) $(SKIPDEPS) xref
|
||||
|
||||
hooks: all
|
||||
tools/hook_deps.sh ebin
|
||||
tools/hook_deps.sh $(EBINDIR)
|
||||
|
||||
options: all
|
||||
tools/opt_types.sh ejabberd_option ebin
|
||||
tools/opt_types.sh ejabberd_option $(EBINDIR)
|
||||
|
||||
translations:
|
||||
tools/prepare-tr.sh
|
||||
tools/prepare-tr.sh $(DEPSDIR)
|
||||
|
||||
edoc:
|
||||
$(ERL) -noinput +B -eval \
|
||||
@@ -362,6 +362,10 @@ TAGS:
|
||||
|
||||
Makefile: Makefile.in
|
||||
|
||||
ifeq "$(IS_REBAR3)" "1"
|
||||
dialyzer:
|
||||
$(REBAR) dialyzer
|
||||
else
|
||||
deps := $(wildcard $(DEPSDIR)/*/ebin)
|
||||
|
||||
dialyzer/erlang.plt:
|
||||
@@ -400,6 +404,7 @@ dialyzer: erlang_plt deps_plt ejabberd_plt
|
||||
@dialyzer --plts dialyzer/*.plt --no_check_plt \
|
||||
--get_warnings -o dialyzer/error.log ebin; \
|
||||
status=$$? ; if [ $$status -ne 2 ]; then exit $$status; else exit 0; fi
|
||||
endif
|
||||
|
||||
test:
|
||||
@echo "************************** NOTICE ***************************************"
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
ejabberd Community Edition
|
||||
==========================
|
||||
|
||||
[](https://travis-ci.org/processone/ejabberd) [](https://hex.pm/packages/ejabberd)
|
||||
[](https://travis-ci.org/processone/ejabberd)
|
||||
[](https://github.com/processone/ejabberd/actions/workflows/tests.yml)
|
||||
[](https://coveralls.io/github/processone/ejabberd?branch=master)
|
||||
[](https://hosted.weblate.org/projects/ejabberd/ejabberd-po/)
|
||||
[](https://hex.pm/packages/ejabberd)
|
||||
|
||||
ejabberd is a distributed, fault-tolerant technology that allows the creation
|
||||
of large-scale instant messaging applications. The server can reliably support
|
||||
@@ -177,7 +181,7 @@ Using any gettext editor, you can improve the translation files found in
|
||||
`priv/msgs/*.po`, and then submit your changes.
|
||||
|
||||
Alternatively, a simple way to improve translations is using our Weblate project:
|
||||
https://hosted.weblate.org/projects/ejabberd/ejabberd/
|
||||
https://hosted.weblate.org/projects/ejabberd/ejabberd-po/
|
||||
|
||||
|
||||
Links
|
||||
|
||||
+25
-31
@@ -67,14 +67,13 @@ fi
|
||||
AC_PREFIX_DEFAULT(/usr/local)
|
||||
|
||||
AC_CONFIG_FILES([Makefile
|
||||
vars.config
|
||||
src/ejabberd.app.src])
|
||||
vars.config])
|
||||
|
||||
AC_ARG_ENABLE(all,
|
||||
[AC_HELP_STRING([--enable-all], [same as --enable-odbc --enable-mysql --enable-pgsql --enable-sqlite --enable-pam --enable-zlib --enable-redis --enable-elixir --enable-stun --enable-sip --enable-debug --enable-tools (useful for Dialyzer checks, default: no)])],
|
||||
[AC_HELP_STRING([--enable-all], [same as --enable-odbc --enable-mysql --enable-pgsql --enable-sqlite --enable-pam --enable-zlib --enable-redis --enable-elixir --enable-stun --enable-sip --enable-debug --enable-lua --enable-tools (useful for Dialyzer checks, default: no)])],
|
||||
[case "${enableval}" in
|
||||
yes) odbc=true mysql=true pgsql=true sqlite=true pam=true zlib=true redis=true elixir=true stun=true sip=true debug=true tools=true ;;
|
||||
no) odbc=false mysql=false pgsql=false sqlite=false pam=false zlib=false redis=false elixir=false stun=false sip=false debug=false tools=false ;;
|
||||
yes) odbc=true mysql=true pgsql=true sqlite=true pam=true zlib=true redis=true elixir=true stun=true sip=true debug=true lua=true tools=true ;;
|
||||
no) odbc=false mysql=false pgsql=false sqlite=false pam=false zlib=false redis=false elixir=false stun=false sip=false debug=false lua=false tools=false ;;
|
||||
*) AC_MSG_ERROR(bad value ${enableval} for --enable-all) ;;
|
||||
esac],[])
|
||||
|
||||
@@ -128,14 +127,6 @@ if test "$ENABLEGROUP" != ""; then
|
||||
AC_SUBST([INSTALLGROUP], [$ENABLEGROUP])
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE(hipe,
|
||||
[AC_HELP_STRING([--enable-hipe], [compile natively with HiPE, not recommended (default: no)])],
|
||||
[case "${enableval}" in
|
||||
yes) hipe=true ;;
|
||||
no) hipe=false ;;
|
||||
*) AC_MSG_ERROR(bad value ${enableval} for --enable-hipe) ;;
|
||||
esac],[hipe=false])
|
||||
|
||||
AC_ARG_ENABLE(latest_deps,
|
||||
[AC_HELP_STRING([--enable-latest-deps], [makes rebar use latest commits for dependencies instead of tagged versions (default: no)])],
|
||||
[case "${enableval}" in
|
||||
@@ -144,6 +135,14 @@ AC_ARG_ENABLE(latest_deps,
|
||||
*) AC_MSG_ERROR(bad value ${enableval} for --enable-latest-deps) ;;
|
||||
esac],[if test "x$latest_deps" = "x"; then latest_deps=false; fi])
|
||||
|
||||
AC_ARG_ENABLE(lua,
|
||||
[AC_HELP_STRING([--enable-lua], [enable Lua support, to import from Prosody (default: no)])],
|
||||
[case "${enableval}" in
|
||||
yes) lua=true ;;
|
||||
no) lua=false ;;
|
||||
*) AC_MSG_ERROR(bad value ${enableval} for --enable-lua) ;;
|
||||
esac],[if test "x$lua" = "x"; then lua=false; fi])
|
||||
|
||||
AC_ARG_ENABLE(mssql,
|
||||
[AC_HELP_STRING([--enable-mssql], [use Microsoft SQL Server database (default: no, requires --enable-odbc)])],
|
||||
[case "${enableval}" in
|
||||
@@ -270,25 +269,20 @@ AC_ARG_ENABLE(zlib,
|
||||
*) AC_MSG_ERROR(bad value ${enableval} for --enable-zlib) ;;
|
||||
esac],[if test "x$zlib" = "x"; then zlib=true; fi])
|
||||
|
||||
if test "$sqlite" = "true"; then
|
||||
AX_LIB_SQLITE3([3.6.19])
|
||||
if test "x$SQLITE3_VERSION" = "x"; then
|
||||
AC_MSG_ERROR(SQLite3 library >= 3.6.19 was not found)
|
||||
fi
|
||||
fi
|
||||
|
||||
enabled_backends=""
|
||||
for backend in odbc mysql pgsql sqlite redis mssql; do
|
||||
if eval test x\${$backend} = xtrue; then
|
||||
if test "x$enabled_backends" = "x"; then
|
||||
enabled_backends=$backend
|
||||
else
|
||||
enabled_backends="$enabled_backends, $backend"
|
||||
fi
|
||||
case "`uname`" in
|
||||
"Darwin")
|
||||
# Darwin (macos) erlang-sqlite is built using amalgamated lib, so no external dependency
|
||||
;;
|
||||
*)
|
||||
if test "$sqlite" = "true"; then
|
||||
AX_LIB_SQLITE3([3.6.19])
|
||||
if test "x$SQLITE3_VERSION" = "x"; then
|
||||
AC_MSG_ERROR(SQLite3 library >= 3.6.19 was not found)
|
||||
fi
|
||||
fi
|
||||
done
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_SUBST(hipe)
|
||||
AC_SUBST(roster_gateway_workaround)
|
||||
AC_SUBST(new_sql_schema)
|
||||
AC_SUBST(full_xml)
|
||||
@@ -305,12 +299,12 @@ AC_SUBST(elixir)
|
||||
AC_SUBST(stun)
|
||||
AC_SUBST(sip)
|
||||
AC_SUBST(debug)
|
||||
AC_SUBST(lua)
|
||||
AC_SUBST(tools)
|
||||
AC_SUBST(latest_deps)
|
||||
AC_SUBST(system_deps)
|
||||
AC_SUBST(CFLAGS)
|
||||
AC_SUBST(CPPFLAGS)
|
||||
AC_SUBST(LDFLAGS)
|
||||
AC_SUBST(enabled_backends)
|
||||
|
||||
AC_OUTPUT
|
||||
|
||||
@@ -33,6 +33,15 @@ listen:
|
||||
shaper: c2s_shaper
|
||||
access: c2s
|
||||
starttls_required: true
|
||||
-
|
||||
port: 5223
|
||||
ip: "::"
|
||||
tls: true
|
||||
module: ejabberd_c2s
|
||||
max_stanza_size: 262144
|
||||
shaper: c2s_shaper
|
||||
access: c2s
|
||||
starttls_required: true
|
||||
-
|
||||
port: 5269
|
||||
ip: "::"
|
||||
|
||||
@@ -29,11 +29,19 @@
|
||||
-define(SQL_INSERT_MARK, sql_insert__mark_).
|
||||
-define(SQL_INSERT(Table, Fields), ?SQL_INSERT_MARK(Table, Fields)).
|
||||
|
||||
-ifdef(COMPILER_REPORTS_ONLY_LINES).
|
||||
-record(sql_query, {hash :: binary(),
|
||||
format_query :: fun(),
|
||||
format_res :: fun(),
|
||||
args :: fun(),
|
||||
loc :: {module(), pos_integer()}}).
|
||||
-else.
|
||||
-record(sql_query, {hash :: binary(),
|
||||
format_query :: fun(),
|
||||
format_res :: fun(),
|
||||
args :: fun(),
|
||||
loc :: {module(), {pos_integer(), pos_integer()}}}).
|
||||
-endif.
|
||||
|
||||
-record(sql_escape, {string :: fun((binary()) -> binary()),
|
||||
integer :: fun((integer()) -> binary()),
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
defmodule Ejabberd.Logger do
|
||||
|
||||
def critical(message, args \\ []), do: :lager.log(:critical, [], message, args)
|
||||
def error(message, args \\ []), do: :lager.log(:error, [], message, args)
|
||||
def warning(message, args \\ []), do: :lager.log(:warning, [], message, args)
|
||||
def info(message, args \\ []), do: :lager.log(:info, [], message, args)
|
||||
def debug(message, args \\ []), do: :lager.log(:debug, [], message, args)
|
||||
def critical(message, args \\ []), do: :logger.critical(message, args)
|
||||
def error(message, args \\ []), do: :logger.error(message, args)
|
||||
def warning(message, args \\ []), do: :logger.warning(message, args)
|
||||
def info(message, args \\ []), do: :logger.info(message, args)
|
||||
def debug(message, args \\ []), do: :logger.debug( message, args)
|
||||
|
||||
end
|
||||
|
||||
@@ -25,5 +25,9 @@ defmodule ModPresenceDemo do
|
||||
def mod_options(_host) do
|
||||
[]
|
||||
end
|
||||
|
||||
|
||||
def mod_doc() do
|
||||
%{:desc => 'This is just a demonstration.'}
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
+7
-7
@@ -2,12 +2,12 @@
|
||||
.\" Title: ejabberd.yml
|
||||
.\" Author: [see the "AUTHOR" section]
|
||||
.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
|
||||
.\" Date: 01/27/2021
|
||||
.\" Date: 03/26/2021
|
||||
.\" Manual: \ \&
|
||||
.\" Source: \ \&
|
||||
.\" Language: English
|
||||
.\"
|
||||
.TH "EJABBERD\&.YML" "5" "01/27/2021" "\ \&" "\ \&"
|
||||
.TH "EJABBERD\&.YML" "5" "03/26/2021" "\ \&" "\ \&"
|
||||
.\" -----------------------------------------------------------------
|
||||
.\" * Define some portability stuff
|
||||
.\" -----------------------------------------------------------------
|
||||
@@ -87,7 +87,7 @@ It is not recommended to write ejabberd\&.yml from scratch\&. Instead it is bett
|
||||
Note that this document is intended to provide comprehensive description of all configuration options that can be consulted to understand the meaning of a particular option, its format and possible values\&. It will be quite hard to understand how to configure ejabberd by reading this document only \- for this purpose the reader is recommended to read online Configuration Guide available at https://docs\&.ejabberd\&.im/admin/configuration\&.
|
||||
.SH "TOP LEVEL OPTIONS"
|
||||
.sp
|
||||
This section describes top level options of ejabberd 21\&.01
|
||||
This section describes top level options of ejabberd\&.
|
||||
.PP
|
||||
\fBaccess_rules\fR: \fI{AccessName: {allow|deny: ACLRules|ACLName}}\fR
|
||||
.RS 4
|
||||
@@ -1559,7 +1559,7 @@ The password for SQL authentication\&. The default is empty string\&.
|
||||
.PP
|
||||
\fBsql_pool_size\fR: \fISize\fR
|
||||
.RS 4
|
||||
A number of connections to the SQL server\&. By default ejabberd opens 10 connections to the database for each virtual host\&. WARNING: for SQLite this value is
|
||||
Number of connections to the SQL server that ejabberd will open for each virtual host\&. The default value is 10\&. WARNING: for SQLite this value is
|
||||
\fI1\fR
|
||||
by default and it\(cqs not recommended to change it due to potential race conditions\&.
|
||||
.RE
|
||||
@@ -1722,7 +1722,7 @@ seconds\&.
|
||||
.RE
|
||||
.SH "MODULES"
|
||||
.sp
|
||||
This section describes options of all modules in ejabberd 21\&.01
|
||||
This section describes options of all ejabberd modules\&.
|
||||
.SS "mod_adhoc"
|
||||
.sp
|
||||
This module implements XEP\-0050: Ad\-Hoc Commands\&. It\(cqs an auxiliary module and is only needed by some of the other modules\&.
|
||||
@@ -7162,7 +7162,7 @@ Should the operating system be revealed or not\&. The default value is
|
||||
.RE
|
||||
.SH "LISTENERS"
|
||||
.sp
|
||||
This section describes options of all listeners in ejabberd 21\&.01
|
||||
This section describes options of all ejabberd listeners\&.
|
||||
.sp
|
||||
TODO
|
||||
.SH "AUTHOR"
|
||||
@@ -7170,7 +7170,7 @@ TODO
|
||||
ProcessOne\&.
|
||||
.SH "VERSION"
|
||||
.sp
|
||||
This document describes the configuration file of ejabberd 21\&.01\&. Configuration options of other ejabberd versions may differ significantly\&.
|
||||
This document describes the configuration file of ejabberd 21\&.01\&.81\&. Configuration options of other ejabberd versions may differ significantly\&.
|
||||
.SH "REPORTING BUGS"
|
||||
.sp
|
||||
Report bugs to https://github\&.com/processone/ejabberd/issues
|
||||
|
||||
@@ -3,7 +3,7 @@ defmodule Ejabberd.Mixfile do
|
||||
|
||||
def project do
|
||||
[app: :ejabberd,
|
||||
version: "21.1.0",
|
||||
version: "21.4.0",
|
||||
description: description(),
|
||||
elixir: "~> 1.4",
|
||||
elixirc_paths: ["lib"],
|
||||
@@ -70,6 +70,7 @@ defmodule Ejabberd.Mixfile do
|
||||
if_version_below('22', [{:d, :LAGER}]) ++
|
||||
if_version_below('23', [{:d, :USE_OLD_CRYPTO_HMAC}]) ++
|
||||
if_version_below('23', [{:d, :USE_OLD_PG2}]) ++
|
||||
if_version_below('24', [{:d, :COMPILER_REPORTS_ONLY_LINES}]) ++
|
||||
if_function_exported(:erl_error, :format_exception, 6, [{:d, :HAVE_ERL_ERROR}])
|
||||
defines = for {:d, value} <- result, do: {:d, value}
|
||||
result ++ [{:d, :ALL_DEFS, defines}]
|
||||
@@ -85,30 +86,30 @@ defmodule Ejabberd.Mixfile do
|
||||
end
|
||||
|
||||
defp deps do
|
||||
[{:lager, "~> 3.6.0"},
|
||||
{:p1_utils, "~> 1.0"},
|
||||
{:fast_xml, "~> 1.1"},
|
||||
{:xmpp, "~> 1.5.1"},
|
||||
[{:base64url, "~> 0.0.1"},
|
||||
{:cache_tab, "~> 1.0"},
|
||||
{:stringprep, "~> 1.0"},
|
||||
{:fast_yaml, "~> 1.0"},
|
||||
{:fast_tls, "~> 1.1"},
|
||||
{:stun, "~> 1.0.41"},
|
||||
{:esip, "~> 1.0.32"},
|
||||
{:p1_mysql, "~> 1.0"},
|
||||
{:mqtree, "~> 1.0"},
|
||||
{:p1_pgsql, "~> 1.1"},
|
||||
{:jiffy, "~> 1.0.4"},
|
||||
{:p1_oauth2, "~> 0.6.1"},
|
||||
{:distillery, "~> 2.0"},
|
||||
{:pkix, "~> 1.0"},
|
||||
{:ex_doc, ">= 0.0.0", only: :dev},
|
||||
{:eimp, "~> 1.0"},
|
||||
{:base64url, "~> 0.0.1"},
|
||||
{:yconf, "~> 1.0"},
|
||||
{:jose, "~> 1.8"},
|
||||
{:esip, "~> 1.0"},
|
||||
{:ex_doc, ">= 0.0.0", only: :dev},
|
||||
{:fast_tls, "~> 1.1"},
|
||||
{:fast_xml, "~> 1.1"},
|
||||
{:fast_yaml, "~> 1.0"},
|
||||
{:idna, "~> 6.0"},
|
||||
{:p1_acme, "~> 1.0"}]
|
||||
{:jiffy, "~> 1.0.5"},
|
||||
{:jose, "~> 1.8"},
|
||||
{:lager, "~> 3.6.0"},
|
||||
{:mqtree, "~> 1.0"},
|
||||
{:p1_acme, "~> 1.0"},
|
||||
{:p1_mysql, "~> 1.0"},
|
||||
{:p1_oauth2, "~> 0.6"},
|
||||
{:p1_pgsql, "~> 1.1"},
|
||||
{:p1_utils, "~> 1.0"},
|
||||
{:pkix, "~> 1.0"},
|
||||
{:stringprep, "~> 1.0"},
|
||||
{:stun, "~> 1.0"},
|
||||
{:xmpp, "~> 1.5"},
|
||||
{:yconf, "~> 1.0"}]
|
||||
++ cond_deps()
|
||||
end
|
||||
|
||||
@@ -125,11 +126,11 @@ defmodule Ejabberd.Mixfile do
|
||||
end
|
||||
|
||||
defp cond_deps do
|
||||
for {:true, dep} <- [{config(:sqlite), {:sqlite3, "~> 1.1"}},
|
||||
for {:true, dep} <- [{config(:pam), {:epam, "~> 1.0"}},
|
||||
{config(:redis), {:eredis, "~> 1.0"}},
|
||||
{config(:zlib), {:ezlib, "~> 1.0"}},
|
||||
{config(:pam), {:epam, "~> 1.0"}},
|
||||
{config(:tools), {:luerl, "~> 0.3.1"}}], do:
|
||||
{config(:lua), {:luerl, "~> 0.3.1"}},
|
||||
{config(:sqlite), {:sqlite3, "~> 1.1"}}], do:
|
||||
dep
|
||||
end
|
||||
|
||||
|
||||
@@ -1,39 +1,40 @@
|
||||
%{
|
||||
"artificery": {:hex, :artificery, "0.4.3", "0bc4260f988dcb9dda4b23f9fc3c6c8b99a6220a331534fdf5bf2fd0d4333b02", [:mix], [], "hexpm", "12e95333a30e20884e937abdbefa3e7f5e05609c2ba8cf37b33f000b9ffc0504"},
|
||||
"base64url": {:hex, :base64url, "0.0.1", "36a90125f5948e3afd7be97662a1504b934dd5dac78451ca6e9abf85a10286be", [:rebar], [], "hexpm", "fab09b20e3f5db886725544cbcf875b8e73ec93363954eb8a1a9ed834aa8c1f9"},
|
||||
"cache_tab": {:hex, :cache_tab, "1.0.27", "1e966fbae89800b91baeb3d2d81a50d29482ebaf1c75c64c820eeba1a2ed1278", [:rebar3], [{:p1_utils, "1.0.21", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "1c6838afc7da3846774e9a661224524b361559302b8cc550e9db81fb819e9da3"},
|
||||
"cache_tab": {:hex, :cache_tab, "1.0.28", "551beb14325c34aa7e1e5d65e5fdaa1a87b0325393cfaf8641c0068364d84f69", [:rebar3], [{:p1_utils, "1.0.22", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "17451084f2cc0a4a6304e12ae5c9ceef13d70ad070c9c406317e80abb7677889"},
|
||||
"distillery": {:hex, :distillery, "2.1.1", "f9332afc2eec8a1a2b86f22429e068ef35f84a93ea1718265e740d90dd367814", [:mix], [{:artificery, "~> 0.2", [hex: :artificery, repo: "hexpm", optional: false]}], "hexpm", "bbc7008b0161a6f130d8d903b5b3232351fccc9c31a991f8fcbf2a12ace22995"},
|
||||
"earmark": {:hex, :earmark, "1.4.3", "364ca2e9710f6bff494117dbbd53880d84bebb692dafc3a78eb50aa3183f2bfd", [:mix], [], "hexpm", "8cf8a291ebf1c7b9539e3cddb19e9cef066c2441b1640f13c34c1d3cfc825fec"},
|
||||
"earmark_parser": {:hex, :earmark_parser, "1.4.12", "b245e875ec0a311a342320da0551da407d9d2b65d98f7a9597ae078615af3449", [:mix], [], "hexpm", "711e2cc4d64abb7d566d43f54b78f7dc129308a63bc103fbd88550d2174b3160"},
|
||||
"eimp": {:hex, :eimp, "1.0.19", "f4cab7363dddb03b0c0c0c9a07aea2ed8266b059d2ffe01dd7318c910ef769d3", [:rebar3], [{:p1_utils, "1.0.21", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "477cb4ff252aa239f54a247efec9391103c1d6535a99e394ac2c1102ef31fb83"},
|
||||
"epam": {:hex, :epam, "1.0.7", "55889bbfdc5ab9f2e785a710229f34e550784c5ead1960d7839ea77514aef44d", [:rebar3], [], "hexpm", "6b029ebd2b244bc339cbf5cb5908d0f2d50e43f33a6e7f70818912ea5d3fd596"},
|
||||
"eredis": {:hex, :eredis, "1.2.0", "0b8e9cfc2c00fa1374cd107ea63b49be08d933df2cf175e6a89b73dd9c380de4", [:rebar3], [], "hexpm"},
|
||||
"esip": {:hex, :esip, "1.0.41", "3cb7e68f8aa0d3e2b7208461b2f0e7a5878db0084fc0e8d44f2d290146d60336", [:rebar3], [{:fast_tls, "1.1.11", [hex: :fast_tls, repo: "hexpm", optional: false]}, {:p1_utils, "1.0.21", [hex: :p1_utils, repo: "hexpm", optional: false]}, {:stun, "1.0.42", [hex: :stun, repo: "hexpm", optional: false]}], "hexpm", "8949368f1c45b61f52e57ffd5d15f23f582ef4ef2fc826b89ad874d3f896f7ac"},
|
||||
"ex_doc": {:hex, :ex_doc, "0.23.0", "a069bc9b0bf8efe323ecde8c0d62afc13d308b1fa3d228b65bca5cf8703a529d", [:mix], [{:earmark_parser, "~> 1.4.0", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "f5e2c4702468b2fd11b10d39416ddadd2fcdd173ba2a0285ebd92c39827a5a16"},
|
||||
"eimp": {:hex, :eimp, "1.0.20", "4b46fa8623690ba602fc1c509dd5d38bdf7c2188b694064bf144f36be600cf02", [:rebar3], [{:p1_utils, "1.0.22", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "531a1d07e5df83f6adf29f9bae93faa227ebfdcd92d2408a28630709eac3e979"},
|
||||
"epam": {:hex, :epam, "1.0.10", "feb9cf1169c8e30609b13bc5f77a0d8213b425997bec1d05dfbccab024fde856", [:rebar3], [], "hexpm", "429a43b876fbef5d1accaadf8177a74933b37e069d6bcc08d74745b8c8f76f71"},
|
||||
"eredis": {:hex, :eredis, "1.2.0", "0b8e9cfc2c00fa1374cd107ea63b49be08d933df2cf175e6a89b73dd9c380de4", [:rebar3], [], "hexpm", "d9b5abef2c2c8aba8f32aa018203e0b3dc8b1157773b254ab1d4c2002317f1e1"},
|
||||
"esip": {:hex, :esip, "1.0.42", "ccd1f3aa1e8d7b5ffe51fc5df238b0d36b5f6cde67cef1dab24931ff03a0a836", [:rebar3], [{:fast_tls, "1.1.12", [hex: :fast_tls, repo: "hexpm", optional: false]}, {:p1_utils, "1.0.22", [hex: :p1_utils, repo: "hexpm", optional: false]}, {:stun, "1.0.43", [hex: :stun, repo: "hexpm", optional: false]}], "hexpm", "87e28b1344543ef9c1b24a60097ae3ceeedba0ff6487f20cdc7be53f087b9a4e"},
|
||||
"ex_doc": {:hex, :ex_doc, "0.24.2", "e4c26603830c1a2286dae45f4412a4d1980e1e89dc779fcd0181ed1d5a05c8d9", [:mix], [{:earmark_parser, "~> 1.4.0", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "e134e1d9e821b8d9e4244687fb2ace58d479b67b282de5158333b0d57c6fb7da"},
|
||||
"ezlib": {:hex, :ezlib, "1.0.9", "b17136b48bcf73962446b06d4427b0b6f2be4550bb5190a18a2979640271e244", [:rebar3], [], "hexpm", "fafc60a0de6e982be38f793da7b220b87a0da2969eba8a878351442b35cc2fde"},
|
||||
"fast_tls": {:hex, :fast_tls, "1.1.11", "5ebc292e13e8947c065df6c73b46bcf8cb45acf952283c20145d243d7c93501d", [:rebar3], [{:p1_utils, "1.0.21", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "410971e42a0af560b51d7db081c0943b2b0d1a84d0ae7cb486aeb940e83cbea9"},
|
||||
"fast_xml": {:hex, :fast_xml, "1.1.45", "68eeec9a3c5e58de9164dd288523822226955d97013bd8a4d7657cf622eeb076", [:rebar3], [{:p1_utils, "1.0.21", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "2d8eb7bb642920e63f69501b7bdb596bef135fc4919d9b6895875fa88d8a63e0"},
|
||||
"fast_yaml": {:hex, :fast_yaml, "1.0.30", "9b971598dae53154150c65fdcedc5524da507469ddef627e0b12120359fbbf04", [:rebar3], [{:p1_utils, "1.0.21", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "b1b9750c8f3b313f4bc01a87a8a0dc560ce2e01c066688210b75e92d111ea38b"},
|
||||
"fast_tls": {:hex, :fast_tls, "1.1.12", "b11997d96d4306abcd4cdb9ffa77ccfc0f826f64bed77ecaceb48b2dc46b9202", [:rebar3], [{:p1_utils, "1.0.22", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "c3d80828f5d985cba4c93660ffbf2c9b9cd831303382b97832dd66429fb16f8a"},
|
||||
"fast_xml": {:hex, :fast_xml, "1.1.46", "bd563e1cdd8a397ed31a6e11f832ea9e4e90f84695104aa92b46224a887fc6ae", [:rebar3], [{:p1_utils, "1.0.22", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "2992a0b2fb649879936fd72498e8bf4202e4cc8356295e14ddf17d4220ac8c51"},
|
||||
"fast_yaml": {:hex, :fast_yaml, "1.0.31", "a66d0e678341dc20680aece8e6fd566205a229981b5b3cfa698c66323b728da2", [:rebar3], [{:p1_utils, "1.0.22", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "8aa129e3384c5aa9f5f1597a1e3321a63a44860f3951f23eeed950bf0ee59643"},
|
||||
"goldrush": {:hex, :goldrush, "0.1.9", "f06e5d5f1277da5c413e84d5a2924174182fb108dabb39d5ec548b27424cd106", [:rebar3], [], "hexpm", "99cb4128cffcb3227581e5d4d803d5413fa643f4eb96523f77d9e6937d994ceb"},
|
||||
"idna": {:hex, :idna, "6.0.0", "689c46cbcdf3524c44d5f3dde8001f364cd7608a99556d8fbd8239a5798d4c10", [:rebar3], [{:unicode_util_compat, "0.4.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "4bdd305eb64e18b0273864920695cb18d7a2021f31a11b9c5fbcd9a253f936e2"},
|
||||
"jiffy": {:hex, :jiffy, "1.0.4", "72adeff75c52a2ff07de738f0813768abe7ce158026cc1115a170340259c0caa", [:rebar3], [], "hexpm", "113e5299ee4e6b9f40204256d7bbbd1caf646edeaef31ef0f7f5f842c0dad39e"},
|
||||
"jiffy": {:hex, :jiffy, "1.0.5", "a69b58faf7123534c20e1b0b7ae97ac52079ca02ed4b6989b4b380179cd63a54", [:rebar3], [], "hexpm", "b617a53f46ae84f20d0c38951367dc947a2cf8cff922aa5c6ac6b64b8b052289"},
|
||||
"jose": {:hex, :jose, "1.9.0", "4167c5f6d06ffaebffd15cdb8da61a108445ef5e85ab8f5a7ad926fdf3ada154", [:mix, :rebar3], [{:base64url, "~> 0.0.1", [hex: :base64url, repo: "hexpm", optional: false]}], "hexpm", "6429c4fee52b2dda7861ee19a4f09c8c1ffa213bee3a1ec187828fde95d447ed"},
|
||||
"lager": {:hex, :lager, "3.6.10", "6172b43ab720ac33914ccd0aeb21fdbdf88213847707d4b91e6af57b2ae5c4d2", [:rebar3], [{:goldrush, "0.1.9", [hex: :goldrush, repo: "hexpm", optional: false]}], "hexpm", "5d10499461826b79c5abee18bb594b3949cbdf76d9d9fd7e66d0a558137c21c9"},
|
||||
"luerl": {:hex, :luerl, "0.3.1", "5412807630aac1aaf59ffe5a1bc09259c447b4faeb1d3fe2d4ef41b87676cb04", [:rebar3], [], "hexpm", "1bc011c7297e43aec762e53b17ecb15b0ff29f9546cd153110b343cf5b043f5f"},
|
||||
"makeup": {:hex, :makeup, "1.0.5", "d5a830bc42c9800ce07dd97fa94669dfb93d3bf5fcf6ea7a0c67b2e0e4a7f26c", [:mix], [{:nimble_parsec, "~> 0.5 or ~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "cfa158c02d3f5c0c665d0af11512fed3fba0144cf1aadee0f2ce17747fba2ca9"},
|
||||
"makeup_elixir": {:hex, :makeup_elixir, "0.15.0", "98312c9f0d3730fde4049985a1105da5155bfe5c11e47bdc7406d88e01e4219b", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.1", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "75ffa34ab1056b7e24844c90bfc62aaf6f3a37a15faa76b07bc5eba27e4a8b4a"},
|
||||
"mqtree": {:hex, :mqtree, "1.0.12", "1fbf05a87d19672d9074b40f4e63d9fc3a68c62a9dd9c1b18ddb5aefd079bd2b", [:rebar3], [{:p1_utils, "1.0.21", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "de6e223cfbf1a69807fab23fb230f43715061f9ef780ffd06dca2d6ca76def3e"},
|
||||
"makeup_elixir": {:hex, :makeup_elixir, "0.15.1", "b5888c880d17d1cc3e598f05cdb5b5a91b7b17ac4eaf5f297cb697663a1094dd", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.1", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "db68c173234b07ab2a07f645a5acdc117b9f99d69ebf521821d89690ae6c6ec8"},
|
||||
"makeup_erlang": {:hex, :makeup_erlang, "0.1.1", "3fcb7f09eb9d98dc4d208f49cc955a34218fc41ff6b84df7c75b3e6e533cc65f", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "174d0809e98a4ef0b3309256cbf97101c6ec01c4ab0b23e926a9e17df2077cbb"},
|
||||
"mqtree": {:hex, :mqtree, "1.0.13", "28c9eaa3a63624829c75f606588d584c3434aec3b615df452f5a539a97467f50", [:rebar3], [{:p1_utils, "1.0.22", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "2369ecb99b2ae3908e8c5c604ed4b96aab8f930ac1f1225e1c42ec25d6a65cc8"},
|
||||
"nimble_parsec": {:hex, :nimble_parsec, "1.1.0", "3a6fca1550363552e54c216debb6a9e95bd8d32348938e13de5eda962c0d7f89", [:mix], [], "hexpm", "08eb32d66b706e913ff748f11694b17981c0b04a33ef470e33e11b3d3ac8f54b"},
|
||||
"p1_acme": {:hex, :p1_acme, "1.0.6", "0b007b776331e3d6effe700fa85d63236a98dc4e6e8c3abbbf816d1bec70df3f", [:rebar3], [{:idna, "~>6.0.0", [hex: :idna, repo: "hexpm", optional: false]}, {:jiffy, "~>1.0.1", [hex: :jiffy, repo: "hexpm", optional: false]}, {:jose, "~>1.9.0", [hex: :jose, repo: "hexpm", optional: false]}, {:yconf, "~>1.0.5", [hex: :yconf, repo: "hexpm", optional: false]}], "hexpm", "7cc6528cbbe7a98929e954604ec670de56ca9f7a69a14d22166e8746fbe86f10"},
|
||||
"p1_mysql": {:hex, :p1_mysql, "1.0.17", "1fd1eed07a0f1e79851e7a5dc17995ba42af1c1192dff978d5f17c9e096a6d8c", [:rebar3], [], "hexpm", "7da95ba3f36e50e80f6a7f89a0928c0bbe6c0a8c8a7a7432d1aa7349e5964a59"},
|
||||
"p1_oauth2": {:hex, :p1_oauth2, "0.6.8", "22b859f3694da30c45722fae860922150f74cfb149ef6176a67c514093238917", [:rebar3], [], "hexpm", "12a476d809f3123098948ee95676198008e96afbc433070a1382e5aa3d2a7b93"},
|
||||
"p1_pgsql": {:hex, :p1_pgsql, "1.1.10", "e4b19c9768ef4047f9c56090a91bfefc7337abb3809a28aa4a6538eef6ad76b0", [:rebar3], [], "hexpm", "5458c0db9e47425f8cc1f592356a29359267c624785b316b34a46ad7439e9367"},
|
||||
"p1_utils": {:hex, :p1_utils, "1.0.21", "9d6244bbd4af881e85af71655e8be5720b5b965b1bdd51a35c7871fd4142af9a", [:rebar3], [], "hexpm", "4b9b90e5863f5fed17f06427ba99b2dc37b216e4dd1308891f0903745e2fccbd"},
|
||||
"p1_acme": {:hex, :p1_acme, "1.0.12", "e51a9e178441669ac06fc5f335ed8ef3343fda67ec83bbbf9551c49967d5f401", [:rebar3], [{:idna, "~>6.0.0", [hex: :idna, repo: "hexpm", optional: false]}, {:jiffy, "~>1.0.5", [hex: :jiffy, repo: "hexpm", optional: false]}, {:jose, "~>1.9.0", [hex: :jose, repo: "hexpm", optional: false]}, {:yconf, "~>1.0.11", [hex: :yconf, repo: "hexpm", optional: false]}], "hexpm", "9a98f523c656b159be3222c9834a07a83cd5f9dc83f8dec9233a457fceef99a6"},
|
||||
"p1_mysql": {:hex, :p1_mysql, "1.0.18", "c636842cc7b56785de383e4ffacc5b74318dae09d9d1447f6eac8b4aac8bd8f4", [:rebar3], [], "hexpm", "4b5e001c554b9a2b9e32885ad43c7cc97d53ef8412d9bbe9491c01997935fbb8"},
|
||||
"p1_oauth2": {:hex, :p1_oauth2, "0.6.9", "07c4527e0af10aa93e4df033f971c64aec01aa0806d6467bb0632f944b3a2309", [:rebar3], [], "hexpm", "924360cd9883cb773ae8166773241e1a9b3a70cad3034e038ab493b40b56d987"},
|
||||
"p1_pgsql": {:hex, :p1_pgsql, "1.1.11", "8769ec7a2c4f480d443b90fdaa02519fbb459aa06c5fa6a99a0fbee683be9f7a", [:rebar3], [], "hexpm", "e4ef71713293717e8ace5fe717ddd63c618179597a6af79156af9be8c3ea851d"},
|
||||
"p1_utils": {:hex, :p1_utils, "1.0.22", "10a70faa665d1f8f6995fa100d068b4d910ee2a0111fa3567e9d6232cbb86f21", [:rebar3], [], "hexpm", "0e49ff5586515e3c44901d6fb06b1473bda492d749f0b1705cbf9d96d4cd5a38"},
|
||||
"pkix": {:hex, :pkix, "1.0.7", "a0b8c9011edeba702d7cb73fecef1eabe3ae89b3dcf4b8f33775e4f17a7a1304", [:rebar3], [], "hexpm", "104a9e0ecd9cc0e579d148a028189a6efe6420b241f3d319d8a65d898a078295"},
|
||||
"sqlite3": {:hex, :sqlite3, "1.1.9", "10090161893843c9839d884855cafbb33c8ee3a2d6597443d66e6f94144dfd79", [:rebar3], [], "hexpm", "148ef74ee796efc13ffc6bb0e7f5feeb050f425e7335ff02c7415ca86819c0d0"},
|
||||
"stringprep": {:hex, :stringprep, "1.0.24", "5a2c29785cdc1eaddcba0564cd86020e5e686fe9e66fa47a80a97333f3dc75ea", [:rebar3], [{:p1_utils, "1.0.21", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "aed7ac217493e5aa2f76066fb7bbfe0d4e94ca1ee72613dc954231422d911266"},
|
||||
"stun": {:hex, :stun, "1.0.42", "9c5404342550137bd17853f57e51fd86c5a0f561d659136cffd483a9ba57edec", [:rebar3], [{:fast_tls, "1.1.11", [hex: :fast_tls, repo: "hexpm", optional: false]}, {:p1_utils, "1.0.21", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "b9a55e192cc140a85efff76594bff75bdef48f0049d19ac90f48b05529b53f15"},
|
||||
"stringprep": {:hex, :stringprep, "1.0.25", "15062f6020777a51a96488f29ce9a2d83e3195f92fdf27f25acc462dff7d8d82", [:rebar3], [{:p1_utils, "1.0.22", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "8e0807d94a6927d1c3f8e76d584a2e3cdd9b4bcb02823eaf96629edf2a65b104"},
|
||||
"stun": {:hex, :stun, "1.0.43", "5c58af3b87fde5e85552dfc085d565a8d899ef7bc0c3e97dea0ea45e3daf0a30", [:rebar3], [{:fast_tls, "1.1.12", [hex: :fast_tls, repo: "hexpm", optional: false]}, {:p1_utils, "1.0.22", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "6db03005a5f9931dc5c331d923cbe1c06b04f92921b47093dff8e3f0a18d7b36"},
|
||||
"unicode_util_compat": {:hex, :unicode_util_compat, "0.4.1", "d869e4c68901dd9531385bb0c8c40444ebf624e60b6962d95952775cac5e90cd", [:rebar3], [], "hexpm", "1d1848c40487cdb0b30e8ed975e34e025860c02e419cb615d255849f3427439d"},
|
||||
"xmpp": {:hex, :xmpp, "1.5.2", "b55e5d910bbd7275a2419bd30289987e0c08d852b5f6dbfae4c558d3740d127f", [:rebar3], [{:ezlib, "1.0.9", [hex: :ezlib, repo: "hexpm", optional: false]}, {:fast_tls, "1.1.11", [hex: :fast_tls, repo: "hexpm", optional: false]}, {:fast_xml, "1.1.45", [hex: :fast_xml, repo: "hexpm", optional: false]}, {:idna, "6.0.0", [hex: :idna, repo: "hexpm", optional: false]}, {:p1_utils, "1.0.21", [hex: :p1_utils, repo: "hexpm", optional: false]}, {:stringprep, "1.0.24", [hex: :stringprep, repo: "hexpm", optional: false]}], "hexpm", "65710e8399b75a49ccef6ec04d42cd23c730466a644bc5df5827af5bdb696be7"},
|
||||
"yconf": {:hex, :yconf, "1.0.10", "2850d28aa5eb23fc67c7df6a40e0596469593476eba25a494d29d82b97294198", [:rebar3], [{:fast_yaml, "1.0.30", [hex: :fast_yaml, repo: "hexpm", optional: false]}], "hexpm", "8ef0d5c86e27163a3da8545c1312d07449c02a23d05d2f053ca0d8be20b88c07"},
|
||||
"xmpp": {:hex, :xmpp, "1.5.3", "d61d8c90ffacd99bea4915c55dcee1829a053d43e0dc33b8ea66bab845cca8ed", [:rebar3], [{:ezlib, "1.0.9", [hex: :ezlib, repo: "hexpm", optional: false]}, {:fast_tls, "1.1.12", [hex: :fast_tls, repo: "hexpm", optional: false]}, {:fast_xml, "1.1.46", [hex: :fast_xml, repo: "hexpm", optional: false]}, {:idna, "6.0.0", [hex: :idna, repo: "hexpm", optional: false]}, {:p1_utils, "1.0.22", [hex: :p1_utils, repo: "hexpm", optional: false]}, {:stringprep, "1.0.25", [hex: :stringprep, repo: "hexpm", optional: false]}], "hexpm", "dca72f926769ed512e524b4369c7812095205f39e00b7e8b11530174a10a9d35"},
|
||||
"yconf": {:hex, :yconf, "1.0.11", "081fe70e5d73a74d0bbad91c3876a1be0e84bd8539bba4cefef2d61cd3c92f9e", [:rebar3], [{:fast_yaml, "1.0.31", [hex: :fast_yaml, repo: "hexpm", optional: false]}], "hexpm", "6df4253e2d55592ad56b5cc29edb0981778ddb6656034a8625f70ffe24290a98"},
|
||||
}
|
||||
|
||||
+5
-1
@@ -1,4 +1,8 @@
|
||||
%% -*- coding: utf-8 -*-
|
||||
%% Generated automatically
|
||||
%% DO NOT EDIT: run `make translations` instead
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" (Add * to the end of field to match substring)"," (Afegix * al final d'un camp per a buscar subcadenes)"}.
|
||||
{" has set the subject to: "," ha posat el tema: "}.
|
||||
{"# participants","# participants"}.
|
||||
|
||||
+5
-1
@@ -1,4 +1,8 @@
|
||||
%% -*- coding: utf-8 -*-
|
||||
%% Generated automatically
|
||||
%% DO NOT EDIT: run `make translations` instead
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" has set the subject to: "," změnil(a) téma na: "}.
|
||||
{"A friendly name for the node","Přívětivé jméno pro uzel"}.
|
||||
{"A password is required to enter this room","Pro vstup do místnosti musíte zadat heslo"}.
|
||||
|
||||
+6
-1
@@ -1,4 +1,8 @@
|
||||
%% -*- coding: utf-8 -*-
|
||||
%% Generated automatically
|
||||
%% DO NOT EDIT: run `make translations` instead
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" (Add * to the end of field to match substring)"," (Fügen Sie * am Ende des Feldes hinzu um nach Teilzeichenketten zu suchen)"}.
|
||||
{" has set the subject to: "," hat das Thema geändert auf: "}.
|
||||
{"# participants","# Teilnehmer"}.
|
||||
@@ -320,6 +324,7 @@
|
||||
{"Node index not found","Knotenindex nicht gefunden"}.
|
||||
{"Node not found","Knoten nicht gefunden"}.
|
||||
{"Node ~p","Knoten ~p"}.
|
||||
{"Node","Knoten"}.
|
||||
{"Nodeprep has failed","Nodeprep fehlgeschlagen"}.
|
||||
{"Nodes","Knoten"}.
|
||||
{"None","Keine"}.
|
||||
|
||||
+53
-35
@@ -1,4 +1,8 @@
|
||||
%% -*- coding: utf-8 -*-
|
||||
%% Generated automatically
|
||||
%% DO NOT EDIT: run `make translations` instead
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" (Add * to the end of field to match substring)"," (Προσθέστε * στο τέλος του πεδίου για ταίριασμα με το substring)"}.
|
||||
{" has set the subject to: "," έχει θέσει το θέμα σε: "}.
|
||||
{"# participants","# συμμετέχοντες"}.
|
||||
@@ -35,17 +39,17 @@
|
||||
{"Allow visitors to send private messages to","Επιτρέψτε στους χρήστες να αποστέλλουν ιδιωτικά μηνύματα σε"}.
|
||||
{"Allow visitors to send status text in presence updates","Επιτρέψτε στους επισκέπτες να αποστέλλουν κατάσταση στις ενημερώσεις παρουσίας"}.
|
||||
{"Allow visitors to send voice requests","Επιτρέψτε στους επισκέπτες να στέλνουν αιτήματα φωνής"}.
|
||||
{"An associated LDAP group that defines room membership; this should be an LDAP Distinguished Name according to an implementation-specific or deployment-specific definition of a group.","Μία σχετική LDAP ομάδα που καθορίζει τις συνδρομές στην αίθουσα: αυτό θα πρέπει να είναι ένα Διακεκριμένο Όνομα LDAP, σύμφωνα με τον προσδιορισμό κατεύθυνσης υλοποίησης ή ανάπτυξης της ομάδας."}.
|
||||
{"An associated LDAP group that defines room membership; this should be an LDAP Distinguished Name according to an implementation-specific or deployment-specific definition of a group.","Μία σχετική LDAP ομάδα που καθορίζει τις συνδρομές στην αίθουσα: αυτό θα πρέπει να είναι ένα Διακεκριμένο Όνομα LDAP, σύμφωνα με τον προσδιορισμό κατεύθυνσης υλοποίησης ή ανάπτυξης της ομάδας."}.
|
||||
{"Announcements","Ανακοινώσεις"}.
|
||||
{"Answer associated with a picture","Η απάντηση σχετίστηκε με μια εικόνα"}.
|
||||
{"Answer associated with a video","Η απάντηση σχετίστηκε με ένα βίντεο"}.
|
||||
{"Answer associated with speech","Η απάντηση σχετίστηκε με ομιλία"}.
|
||||
{"Answer to a question","Απάντηση σε ερώτηση"}.
|
||||
{"Anyone in the specified roster group(s) may subscribe and retrieve items","Οποιοσδήποτε στις ορισθείσες Λίστες Ομάδων δύναται να εγγραφεί και να παραλάβει αντικείμενα"}.
|
||||
{"Anyone may associate leaf nodes with the collection","Οποιοσδήποτε μπορεί να συσχετίσει leaf nodes με την συλλογή"}.
|
||||
{"Anyone may associate leaf nodes with the collection","Οποιοσδήποτε μπορεί να συσχετίσει κόμβους φύλλων με τη συλλογή"}.
|
||||
{"Anyone may publish","Οποιοσδήποτε δύναται να δημοσιέυει"}.
|
||||
{"Anyone may subscribe and retrieve items","Οποιοσδήποτε δύναται να εγγραφεί και να παραλάβει αντικείμενα"}.
|
||||
{"Anyone with a presence subscription of both or from may subscribe and retrieve items","Οποιοσδήποτε κατέχει Συνδρομή Παρουσίας και των δύο ή από, θα μπορούσε να εγγραφεί και να παραλάβει αντικείμενα"}.
|
||||
{"Anyone with a presence subscription of both or from may subscribe and retrieve items","Όποιος έχει συνδρομή παρουσίας και των δύο ή από μπορεί να εγγραφεί και να ανακτήσει στοιχεία"}.
|
||||
{"Anyone with Voice","Οποιοσδήποτε με Φωνή"}.
|
||||
{"Anyone","Οποιοσδήποτε"}.
|
||||
{"April","Απρίλιος"}.
|
||||
@@ -68,8 +72,8 @@
|
||||
{"Cannot remove default list","Δεν μπορείτε να καταργήσετε την προεπιλεγμένη λίστα"}.
|
||||
{"CAPTCHA web page","Ιστοσελίδα CAPTCHA"}.
|
||||
{"Challenge ID","Ταυτότητα Πρόκλησης"}.
|
||||
{"Change Password","Αλλαγή κωδικού"}.
|
||||
{"Change User Password","Αλλαγή Κωδικού Πρόσβασης Χρήστη"}.
|
||||
{"Change Password","Αλλαγή κωδικού πρόσβασης"}.
|
||||
{"Change User Password","Αλλαγή κωδικού πρόσβασης χρήστη"}.
|
||||
{"Changing password is not allowed","Η αλλαγή του κωδικού πρόσβασης δεν επιτρέπεται"}.
|
||||
{"Changing role/affiliation is not allowed","Η αλλαγή ρόλου/ομάδας δεν επιτρέπεται"}.
|
||||
{"Channel already exists","Το κανάλι υπάρχει ήδη"}.
|
||||
@@ -77,7 +81,7 @@
|
||||
{"Channels","Κανάλια"}.
|
||||
{"Characters not allowed:","Χαρακτήρες που δεν επιτρέπονται:"}.
|
||||
{"Chatroom configuration modified","Η ρύθμιση παραμέτρων της αίθουσας σύνεδριασης τροποποιηθηκε"}.
|
||||
{"Chatroom is created","Η αίθουσα σύνεδριασης δημιουργήθηκε"}.
|
||||
{"Chatroom is created","Η αίθουσα συνομιλίας έχει δημιουργηθεί"}.
|
||||
{"Chatroom is destroyed","Η αίθουσα σύνεδριασης διαγράφηκε"}.
|
||||
{"Chatroom is started","Η αίθουσα σύνεδριασης έχει ξεκινήσει"}.
|
||||
{"Chatroom is stopped","Η αίθουσα σύνεδριασης έχει σταματήσει"}.
|
||||
@@ -89,7 +93,7 @@
|
||||
{"Client acknowledged more stanzas than sent by server","Ο πελάτης γνωρίζει περισσότερα δωμάτια από αυτά που στάλθηκαν από τον εξυπηρετητή"}.
|
||||
{"Commands","Εντολές"}.
|
||||
{"Conference room does not exist","Η αίθουσα σύνεδριασης δεν υπάρχει"}.
|
||||
{"Configuration of room ~s","Ρύθμιση παραμέτρων Αίθουσας ~s"}.
|
||||
{"Configuration of room ~s","Διαμόρφωση δωματίου ~ s"}.
|
||||
{"Configuration","Ρύθμιση παραμέτρων"}.
|
||||
{"Connected Resources:","Συνδεδεμένοι Πόροι:"}.
|
||||
{"Contact Addresses (normally, room owner or owners)","Διευθύνσεις της Επαφής (κανονικά, ιδιοκτήτης (-ες) αίθουσας)"}.
|
||||
@@ -114,23 +118,24 @@
|
||||
{"Disc only copy","Αντίγραφο μόνο σε δίσκο"}.
|
||||
{"'Displayed groups' not added (they do not exist!): ","'Οι εμφανιζόμενες ομάδες' δεν προστέθηκαν (δεν υπάρχουν!): "}.
|
||||
{"Displayed:","Απεικονίζεται:"}.
|
||||
{"Don't tell your password to anybody, not even the administrators of the XMPP server.","Μη γνωστοποιείτε τον Κωδικό σας, ούτε στους Διαχειριστές του XMPP εξυπηρετητή."}.
|
||||
{"Don't tell your password to anybody, not even the administrators of the XMPP server.","Μην πείτε τον κωδικό πρόσβασής σας σε κανέναν, ούτε στους διαχειριστές του διακομιστή XMPP."}.
|
||||
{"Dump Backup to Text File at ","Αποθήκευση Αντιγράφου Ασφαλείας σε αρχείο κειμένου στο "}.
|
||||
{"Dump to Text File","Αποθήκευση σε αρχείο κειμένου"}.
|
||||
{"Duplicated groups are not allowed by RFC6121","Δεν επιτρέπονται διπλότυπες ομάδες από το RFC6121"}.
|
||||
{"Dynamically specify a replyto of the item publisher","Δυναμικά προσδιορίστε το Απάντηση σε του εκδότη του αντικειμένου"}.
|
||||
{"Edit Properties","Επεξεργασία ιδιοτήτων"}.
|
||||
{"Either approve or decline the voice request.","Είτε εγκρίνετε ή απορρίψτε το αίτημα φωνής."}.
|
||||
{"ejabberd HTTP Upload service","Υπηρεσία ανεβάσματος αρχείων του ejabberd"}.
|
||||
{"ejabberd MUC module","ejabberd MUC module"}.
|
||||
{"ejabberd MUC module","ενότητα ejabberd MUC"}.
|
||||
{"ejabberd Multicast service","υπηρεσία ejabberd Multicast"}.
|
||||
{"ejabberd Publish-Subscribe module","ejabberd module Δημοσίευσης-Εγγραφής"}.
|
||||
{"ejabberd SOCKS5 Bytestreams module","ejabberd SOCKS5 Bytestreams module"}.
|
||||
{"ejabberd SOCKS5 Bytestreams module","ενότητα ejabberd SOCKS5 Bytestreams"}.
|
||||
{"ejabberd vCard module","ejabberd vCard module"}.
|
||||
{"ejabberd Web Admin","ejabberd Web Admin"}.
|
||||
{"ejabberd","ejabberd"}.
|
||||
{"Elements","Στοιχεία"}.
|
||||
{"Email Address","Ηλεκτρονική Διεύθυνση"}.
|
||||
{"Email","Email"}.
|
||||
{"Email","Ηλεκτρονικό ταχυδρομείο"}.
|
||||
{"Enable logging","Ενεργοποίηση καταγραφής"}.
|
||||
{"Enable message archiving","Ενεργοποιήστε την αρχειοθέτηση μηνυμάτων"}.
|
||||
{"Enabling push without 'node' attribute is not supported","Η ενεργοποίηση της ώθησης χωρίς το χαρακτηριστικό 'κόμβος' δεν υποστηρίζεται"}.
|
||||
@@ -141,7 +146,7 @@
|
||||
{"Enter path to jabberd14 spool file","Εισάγετε τοποθεσία αρχείου σειράς jabberd14"}.
|
||||
{"Enter path to text file","Εισάγετε Τοποθεσία Αρχείου Κειμένου"}.
|
||||
{"Enter the text you see","Πληκτρολογήστε το κείμενο που βλέπετε"}.
|
||||
{"Erlang XMPP Server","XMPP εξυπηρετητής Erlang"}.
|
||||
{"Erlang XMPP Server","Διακομιστής Erlang XMPP"}.
|
||||
{"Error","Σφάλμα"}.
|
||||
{"Exclude Jabber IDs from CAPTCHA challenge","Εξαίρεσε αυτές τις ταυτότητες Jabber από την CAPTCHA πρόκληση"}.
|
||||
{"Export all tables as SQL queries to a file:","Εξαγωγή όλων των πινάκων ως ερωτημάτων SQL σε ένα αρχείο:"}.
|
||||
@@ -167,7 +172,7 @@
|
||||
{"Full Name","Ονοματεπώνυμο"}.
|
||||
{"Get Number of Online Users","Έκθεση αριθμού συνδεδεμένων χρηστών"}.
|
||||
{"Get Number of Registered Users","Έκθεση αριθμού εγγεγραμμένων χρηστών"}.
|
||||
{"Get Pending","Έκθεση των εκκρεμόντων"}.
|
||||
{"Get Pending","Λήψη των εκκρεμοτήτων"}.
|
||||
{"Get User Last Login Time","Έκθεση Τελευταίας Ώρας Σύνδεσης Χρήστη"}.
|
||||
{"Get User Password","Έκθεση Κωδικού Πρόσβασης Χρήστη"}.
|
||||
{"Get User Statistics","Έκθεση Στατιστικών Χρήστη"}.
|
||||
@@ -181,8 +186,8 @@
|
||||
{"has been kicked because of an affiliation change","έχει αποβληθεί λόγω αλλαγής υπαγωγής"}.
|
||||
{"has been kicked because the room has been changed to members-only","αποβλήθηκε επειδή η αίθουσα αλλάξε γιά μέλη μόνο"}.
|
||||
{"has been kicked","αποβλήθηκε"}.
|
||||
{"Host unknown","Ο κεντρικός διακομιστής είναι άγνωστος"}.
|
||||
{"Host","Κεντρικός Υπολογιστής"}.
|
||||
{"Host unknown","Άγνωστος εξυπηρετητής"}.
|
||||
{"Host","Εξυπηρετητής"}.
|
||||
{"HTTP File Upload","Ανέβασμα αρχείου"}.
|
||||
{"Idle connection","Αδρανής σύνδεση"}.
|
||||
{"If you don't see the CAPTCHA image here, visit the web page.","Εάν δεν βλέπετε την εικόνα CAPTCHA εδώ, επισκεφθείτε την ιστοσελίδα."}.
|
||||
@@ -254,11 +259,12 @@
|
||||
{"Members not added (inexistent vhost!): ","Τα μέλη δεν προστέθηκαν (ανύπαρκτος vhost!): "}.
|
||||
{"Membership is required to enter this room","Απαιτείται αίτηση συμετοχής για είσοδο σε αυτή την αίθουσα"}.
|
||||
{"Members:","Μέλη:"}.
|
||||
{"Memorize your password, or write it in a paper placed in a safe place. In XMPP there isn't an automated way to recover your password if you forget it.","Απομνημονεύστε τον κωδικό πρόσβασής σας ή γράψτε τον σε χαρτί που βρίσκεται σε ασφαλές μέρος. Στο XMPP δεν υπάρχει αυτοματοποιημένος τρόπος ανάκτησης του κωδικού πρόσβασής σας εάν τον ξεχάσετε."}.
|
||||
{"Memory","Μνήμη"}.
|
||||
{"Mere Availability in XMPP (No Show Value)","Διαθεσιμότητα στο XMPP (Χωρίς ένδειξη)"}.
|
||||
{"Message body","Περιεχόμενο μηνύματος"}.
|
||||
{"Message not found in forwarded payload","Δεν βρέθηκε μήνυμα στον προωθημένο φόρτο εργασίας"}.
|
||||
{"Messages from strangers are rejected","Μηνύματα αγνώστων απορρίπτονται"}.
|
||||
{"Messages from strangers are rejected","Τα μηνύματα από αγνώστους απορρίπτονται"}.
|
||||
{"Messages of type headline","Μηνύματα του τύπου headline"}.
|
||||
{"Messages of type normal","Μηνύματα του τύπου normal"}.
|
||||
{"Middle Name","Πατρώνυμο"}.
|
||||
@@ -269,7 +275,8 @@
|
||||
{"Modified modules","Τροποποιημένα modules"}.
|
||||
{"Module failed to handle the query","Το module απέτυχε να χειριστεί το ερώτημα"}.
|
||||
{"Monday","Δευτέρα"}.
|
||||
{"Multicast","Multicast"}.
|
||||
{"Multicast","Πολλαπλή διανομή (Multicast)"}.
|
||||
{"Multiple <item/> elements are not allowed by RFC6121","Πολλαπλά στοιχεία <item/> δεν επιτρέπονται από το RFC6121"}.
|
||||
{"Multi-User Chat","Συνομιλία με πολλούς χρήστες"}.
|
||||
{"Name in the rosters where this group will be displayed","Όνομα στις λίστες όπου αυτή η ομάδα θα εμφανίζεται"}.
|
||||
{"Name","Όνομα"}.
|
||||
@@ -310,7 +317,7 @@
|
||||
{"No running node found","Δεν βρέθηκε ενεργός κόμβος"}.
|
||||
{"No services available","Δεν υπάρχουν διαθέσιμες υπηρεσίες"}.
|
||||
{"No statistics found for this item","Δεν βρέθηκαν στατιστικά στοιχεία για αυτό το στοιχείο"}.
|
||||
{"No 'to' attribute found in the invitation","Δεν βρέθηκε το χαρακτηριστικό 'to' στην πρόσκληση"}.
|
||||
{"No 'to' attribute found in the invitation","Δε βρέθηκε το χαρακτηριστικό 'to' στην πρόσκληση"}.
|
||||
{"Nobody","Κανείς"}.
|
||||
{"Node already exists","Ο κόμβος υπάρχει ήδη"}.
|
||||
{"Node ID","Ταυτότητα Κόμβου"}.
|
||||
@@ -321,9 +328,9 @@
|
||||
{"Nodes","Κόμβοι"}.
|
||||
{"None","Κανένα"}.
|
||||
{"Not allowed","Δεν επιτρέπεται"}.
|
||||
{"Not Found","Δεν βρέθηκε"}.
|
||||
{"Not Found","Δε βρέθηκε"}.
|
||||
{"Not subscribed","Δεν έχετε εγγραφεί"}.
|
||||
{"Notify subscribers when items are removed from the node","Ειδοποίηση στους συνδρομητές όταν αφαίρούνται στοιχεία από τον κόμβο"}.
|
||||
{"Notify subscribers when items are removed from the node","Ειδοποιήστε τους συνδρομητές όταν αφαιρούνται στοιχεία από τον κόμβο"}.
|
||||
{"Notify subscribers when the node configuration changes","Ειδοποίηση στους συνδρομητές όταν αλλάζει η διαμόρφωση κόμβου"}.
|
||||
{"Notify subscribers when the node is deleted","Ειδοποίηση στους συνδρομητές όταν ο κόμβος διαγράφεται"}.
|
||||
{"November","Νοέμβριος"}.
|
||||
@@ -333,12 +340,12 @@
|
||||
{"Number of online users","Αριθμός συνδεδεμένων χρηστών"}.
|
||||
{"Number of registered users","Αριθμός εγγεγραμμένων χρηστών"}.
|
||||
{"Number of seconds after which to automatically purge items","Πλήθος δευτερολέπτων μετά τα οποία αυτομάτως εκκαθαρίζονται αντικείμενα"}.
|
||||
{"Occupants are allowed to invite others","Οι συμμετέχοντες μπορούν να προσκαλέσουν και άλλους"}.
|
||||
{"Occupants are allowed to invite others","Οι συμμετέχοντες μπορούν να προσκαλέσουν και άλλους"}.
|
||||
{"Occupants May Change the Subject","Επιτρέψτε στους χρήστες να αλλάζουν το Θέμα"}.
|
||||
{"October","Οκτώβριος"}.
|
||||
{"Offline Messages","Χωρίς Σύνδεση Μηνύματα"}.
|
||||
{"Offline Messages:","Χωρίς Σύνδεση Μηνύματα:"}.
|
||||
{"OK","Όλα Καλά"}.
|
||||
{"OK","Εντάξει"}.
|
||||
{"Old Password:","Παλαιός κωδικός πρόσβασης:"}.
|
||||
{"Online Users:","Online Χρήστες:"}.
|
||||
{"Online Users","Συνδεμένοι χρήστες"}.
|
||||
@@ -352,12 +359,12 @@
|
||||
{"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 occupants are allowed to send messages to the conference","Μόνο οι συμμετέχοντες επιτρέπεται να στέλνουν μηνύματα στο συνέδριο"}.
|
||||
{"Only occupants are allowed to send queries to the conference","Μόνο οι συμμετέχοντες επιτρέπεται να στείλουν ερωτήματα στη διάσκεψη"}.
|
||||
{"Only publishers may publish","Μόνον εκδότες μπορούν να δημοσιεύσουν"}.
|
||||
{"Only service administrators are allowed to send service messages","Μόνο οι διαχειριστές των υπηρεσιών επιτρέπεται να στείλουν υπηρεσιακά μηνύματα"}.
|
||||
{"Only those on a whitelist may associate leaf nodes with the collection","Μόνον οι εξαιρεθέντες μπορούν να συσχετίσουν leaf nodes με τη συλλογή"}.
|
||||
{"Only those on a whitelist may subscribe and retrieve items","Μόνον οι εξαιρεθέντες επιτρέπεται να εγγραφούν και να λάβουν αντικείμενα"}.
|
||||
{"Only those on a whitelist may subscribe and retrieve items","Μόνο όσοι βρίσκονται στη λίστα επιτρεπόμενων μπορούν να εγγραφούν και να ανακτήσουν αντικείμενα"}.
|
||||
{"Organization Name","Όνομα Οργανισμού"}.
|
||||
{"Organization Unit","Μονάδα Οργανισμού"}.
|
||||
{"Outgoing s2s Connections","Εξερχόμενες S2S Συνδέσεις"}.
|
||||
@@ -368,8 +375,8 @@
|
||||
{"Participant","Συμμετέχων"}.
|
||||
{"Password Verification","Επαλήθευση κωδικού πρόσβασης"}.
|
||||
{"Password Verification:","Επαλήθευση κωδικού πρόσβασης:"}.
|
||||
{"Password","Κωδικός πρόσβασης"}.
|
||||
{"Password:","Κωδικός πρόσβασης:"}.
|
||||
{"Password","Κωδικός Πρόσβασης"}.
|
||||
{"Path to Dir","Τοποθεσία κατάλογου αρχείων"}.
|
||||
{"Path to File","Τοποθεσία Αρχείου"}.
|
||||
{"Payload type","Τύπος φόρτου εργασιών"}.
|
||||
@@ -381,7 +388,8 @@
|
||||
{"Ping","Ping"}.
|
||||
{"Please note that these options will only backup the builtin Mnesia database. If you are using the ODBC module, you also need to backup your SQL database separately.","Παρακαλώ σημειώστε ότι οι επιλογές αυτές θα αποθήκευσουν Αντιγράφο Ασφαλείας μόνο της ενσωματωμένης βάσης δεδομένων Mnesia. Εάν χρησιμοποιείτε το module ODBC, θα πρέπει επίσης να κάνετε χωριστά Αντιγράφο Ασφαλείας της SQL βάσης δεδομένων σας."}.
|
||||
{"Please, wait for a while before sending new voice request","Παρακαλώ, περιμένετε για λίγο πριν την αποστολή νέου αιτήματος φωνής"}.
|
||||
{"Pong","Pong"}.
|
||||
{"Pong","Πονγκ"}.
|
||||
{"Possessing 'ask' attribute is not allowed by RFC6121","Η κατοχή χαρακτηριστικού \"ask\" δεν επιτρέπεται από το RFC6121"}.
|
||||
{"Present real Jabber IDs to","Παρούσιαση πραγματικών ταυτοτήτων Jabber σε"}.
|
||||
{"Previous session not found","Η προηγούμενη περίοδος σύνδεσης χρήστη δεν βρέθηκε"}.
|
||||
{"Previous session PID has been killed","Το προηγούμενο αναγνωριστικό περιόδου σύνδεσης PID αφαιρέθηκε"}.
|
||||
@@ -410,9 +418,9 @@
|
||||
{"Registered Users:","Εγγεγραμμένοι Χρήστες:"}.
|
||||
{"Register","Καταχωρήστε"}.
|
||||
{"Remote copy","Εξ αποστάσεως αντίγραφο"}.
|
||||
{"Remove All Offline Messages","Αφαίρεση όλων των Χωρίς Σύνδεση Μηνύματων"}.
|
||||
{"Remove All Offline Messages","Αφαίρεση όλων των μηνυμάτων χωρίς σύνδεση"}.
|
||||
{"Remove User","Αφαίρεση χρήστη"}.
|
||||
{"Remove","Αφαίρεστε"}.
|
||||
{"Remove","Αφαίρεση"}.
|
||||
{"Replaced by new connection","Αντικαταστάθηκε από μια νέα σύνδεση"}.
|
||||
{"Request has timed out","Το αίτημα έληξε"}.
|
||||
{"Request is ignored","Το αίτημα θα αγνοηθεί"}.
|
||||
@@ -464,6 +472,7 @@
|
||||
{"Show Ordinary Table","Δείτε Κοινό Πίνακα"}.
|
||||
{"Shut Down Service","Τερματισμός Υπηρεσίας"}.
|
||||
{"SOCKS5 Bytestreams","Bytestreams του SOCKS5"}.
|
||||
{"Some XMPP clients can store your password in the computer, but you should do this only in your personal computer for safety reasons.","Ορισμένοι πελάτες XMPP μπορούν να αποθηκεύσουν τον κωδικό πρόσβασής σας στον υπολογιστή, αλλά θα πρέπει να το κάνετε μόνο στον προσωπικό σας υπολογιστή για λόγους ασφαλείας."}.
|
||||
{"Specify the access model","Καθορίστε το μοντέλο πρόσβασης"}.
|
||||
{"Specify the event message type","Καθορίστε τον τύπο μηνύματος συμβάντος"}.
|
||||
{"Specify the publisher model","Καθορίστε το μοντέλο εκδότη"}.
|
||||
@@ -498,14 +507,15 @@
|
||||
{"The body text of the last received message","Ο κορμός του κειμένου του τελευταίου μηνύματος"}.
|
||||
{"The CAPTCHA is valid.","Το CAPTCHA είναι έγκυρο."}.
|
||||
{"The CAPTCHA verification has failed","Η επαλήθευση της εικόνας CAPTCHA απέτυχε"}.
|
||||
{"The child nodes (leaf or collection) associated with a collection","Οι θυγατρικοί κόμβοι (leaf ή collection) που σχετίζονται με μια Συλλογή"}.
|
||||
{"The captcha you entered is wrong","Το captcha που εισαγάγατε είναι λάθος"}.
|
||||
{"The child nodes (leaf or collection) associated with a collection","Οι θυγατρικοί κόμβοι (leaf ή collection) που σχετίζονται με μια συλλογή"}.
|
||||
{"The collections with which a node is affiliated","Οι συλλογές με τις οποίες ένας κόμβος σχετίζεται"}.
|
||||
{"The DateTime at which a leased subscription will end or has ended","Ο Χρόνος στον οποίο μια μισθωμένη συνδρομή θα Εκπνεύσει ή Τελειώσει"}.
|
||||
{"The datetime when the node was created","Η χρονοσφραγίδα δημιουργίας του κόμβου"}.
|
||||
{"The default language of the node","Η προρυθμισμένη γλώσσα του κόμβου"}.
|
||||
{"The feature requested is not supported by the conference","Η λειτουργία που ζητήθηκε δεν υποστηρίζεται από τη διάσκεψη"}.
|
||||
{"The JID of the node creator","Το JID του δημιουγού του κόμβου"}.
|
||||
{"The JIDs of those to contact with questions","Το JID αυτών με τους οποίους θα επικοινωνήσετε για ερωτήσεις"}.
|
||||
{"The JIDs of those to contact with questions","Το JID αυτών με τους οποίους θα επικοινωνήσετε με ερωτήσεις"}.
|
||||
{"The JIDs of those with an affiliation of owner","Το JID αυτών που σχετίζονται με τον ιδιοκτήτη"}.
|
||||
{"The JIDs of those with an affiliation of publisher","Το JID αυτών που σχετίζονται με τον εκδότη"}.
|
||||
{"The list of JIDs that may associate leaf nodes with a collection","Λίστα των JIDs που μπορούν να σχετίζουν leaf κόμβους με μια Συλλογή"}.
|
||||
@@ -521,7 +531,7 @@
|
||||
{"The password contains unacceptable characters","Ο κωδικός πρόσβασης περιέχει μη αποδεκτούς χαρακτήρες"}.
|
||||
{"The password is too weak","Ο κωδικός πρόσβασης είναι πολύ αδύναμος"}.
|
||||
{"the password is","ο κωδικός πρόσβασης είναι"}.
|
||||
{"The password of your XMPP account was successfully changed.","Ο κωδικός πρόσβασης του XMPP λογαριασμού σας έχει αλλάξει επιτυχώς."}.
|
||||
{"The password of your XMPP account was successfully changed.","Ο κωδικός πρόσβασης του XMPP λογαριασμού σας έχει αλλάξει επιτυχώς."}.
|
||||
{"The password was not changed","Ο κωδικός πρόσβασης δεν άλλαξε"}.
|
||||
{"The passwords are different","Οι κωδικοί πρόσβασης δεν ταιριάζουν"}.
|
||||
{"The presence states for which an entity wants to receive notifications","Η παρουσία δηλώνει για ποιους θέλει κάποιος να λαμβάνει ειδοποιήσεις"}.
|
||||
@@ -535,8 +545,12 @@
|
||||
{"The URL of an XSL transformation which can be applied to payloads in order to generate an appropriate message body element.","Το URL ενός μετασχηματισμού XSL το οποίο μπορεί να εφαρμοστεί σε φόρτους εργασίας για να παραχθεί το κατάλληλο στοιχείο του σώματος του μηνύματος."}.
|
||||
{"The URL of an XSL transformation which can be applied to the payload format in order to generate a valid Data Forms result that the client could display using a generic Data Forms rendering engine","Το URL ενός μετασχηματισμού XSL, το οποίο μπορεί να εφαρμοστεί στους τύπους φόρτου εργασίας για να παραχθεί έγκυρο αποτέλεσμα Data Forms, τέτοιο που ο πελάτης μπορεί να εμφανίσει, χρησιμοποιώντας μια ευρείας χρήσης μηχανή επεξεργασίας Data Forms"}.
|
||||
{"The username is not valid","Το όνομα Χρήστη δεν είναι έγκυρο"}.
|
||||
{"There was an error changing the password: ","Παρουσιάστηκε σφάλμα κατά την αλλαγή του κωδικού πρόσβασης: "}.
|
||||
{"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.","Αυτό σημαίνει ότι δεν έχει σημασία αν είναι κεφαλαία ή πεζά γράμματα: \"κατσαντώνης\" είναι το ίδιο με \"ΚατσΑντώνης\" , όπως και \"Κατσαντώνης\"."}.
|
||||
{"This page allows to register an XMPP account in this XMPP server. Your JID (Jabber ID) will be of the form: username@server. Please read carefully the instructions to fill correctly the fields.","Αυτή η σελίδα επιτρέπει την εγγραφή ενός λογαριασμού XMPP σε αυτόν τον διακομιστή XMPP. Το JID (Jabber ID) θα έχει τη μορφή: όνομαχρήστη@διακομιστής. Διαβάστε προσεκτικά τις οδηγίες για να συμπληρώσετε σωστά τα πεδία."}.
|
||||
{"This page allows to unregister an XMPP account in this XMPP server.","Αυτή η σελίδα επιτρέπει την κατάργηση εγγραφής ενός λογαριασμού XMPP σε αυτόν τον διακομιστή XMPP."}.
|
||||
{"This room is not anonymous","Η αίθουσα αυτή δεν είναι ανώνυμη"}.
|
||||
{"This service can not process the address: ~s","Αυτή η υπηρεσία δεν μπορεί να επεξεργαστεί την διεύθυνση: ~s"}.
|
||||
{"Thursday","Πέμπτη"}.
|
||||
@@ -545,7 +559,7 @@
|
||||
{"Time","Χρόνος"}.
|
||||
{"To register, visit ~s","Για να εγγραφείτε, επισκεφθείτε το ~s"}.
|
||||
{"To ~ts","Προς ~ts"}.
|
||||
{"Token TTL","Token TTL"}.
|
||||
{"Token TTL","Διακριτικό TTL"}.
|
||||
{"Too many active bytestreams","Πάρα πολλά ενεργά bytestreams"}.
|
||||
{"Too many CAPTCHA requests","Πάρα πολλά αιτήματα CAPTCHA"}.
|
||||
{"Too many child elements","Πάρα πολλά θυγατρικά στοιχεία"}.
|
||||
@@ -584,6 +598,7 @@
|
||||
{"URL for Archived Discussion Logs","URL αρχειοθετημένων καταγραφών συζητήσεων"}.
|
||||
{"User already exists","Ο χρήστης υπάρχει ήδη"}.
|
||||
{"User JID","JID Χρήστη"}.
|
||||
{"User (jid)","Χρήστης (jid)"}.
|
||||
{"User Management","Διαχείριση χρηστών"}.
|
||||
{"User removed","Ο Χρήστης αφαιρέθηκε"}.
|
||||
{"User session not found","Η περίοδος σύνδεσης χρήστη δεν βρέθηκε"}.
|
||||
@@ -624,7 +639,7 @@
|
||||
{"Who may associate leaf nodes with a collection","Ποιός μπορεί να συσχετίζει leaf nodes με μία συλλογή"}.
|
||||
{"Wrong parameters in the web formulary","Εσφαλμένες παράμετροι στην διαμόρφωση τυπικότητας του δυκτίου"}.
|
||||
{"Wrong xmlns","Εσφαλμένο xmlns"}.
|
||||
{"XMPP Account Registration","Εγγραφή με Ψευδώνυμο στο "}.
|
||||
{"XMPP Account Registration","Εγγραφή λογαριασμού XMPP"}.
|
||||
{"XMPP Domains","Ονόματα χώρου XMPP"}.
|
||||
{"XMPP Show Value of Away","Δείξε τιμή XMPP Απεμακρύνθην"}.
|
||||
{"XMPP Show Value of Chat","Δείξε τιμή XMPP Αξία Συνομιλίας"}.
|
||||
@@ -633,6 +648,7 @@
|
||||
{"XMPP URI of Associated Publish-Subscribe Node","XMPP URI του συσχετισμένου κόμβου Δημοσίευσης-Εγγραφής"}.
|
||||
{"You are being removed from the room because of a system shutdown","Απαιτείται η απομάκρυνσή σας από την αίθουσα, λόγω τερματισμού συστήματος"}.
|
||||
{"You are not joined to the channel","Δεν λαμβάνετε μέρος στο κανάλι"}.
|
||||
{"You can later change your password using an XMPP client.","Μπορείτε αργότερα να αλλάξετε τον κωδικό πρόσβασής σας χρησιμοποιώντας ένα πρόγραμμα-πελάτη XMPP."}.
|
||||
{"You have been banned from this room","Σας έχει απαγορευθεί η είσοδος σε αυτή την αίθουσα"}.
|
||||
{"You have joined too many conferences","Είσθε σε πάρα πολλά συνέδρια"}.
|
||||
{"You must fill in field \"Nickname\" in the form","Απαιτείται να συμπληρώσετε το πεδίο \"Ψευδώνυμο\" στη φόρμα"}.
|
||||
@@ -642,4 +658,6 @@
|
||||
{"Your active privacy list has denied the routing of this stanza.","Ο ενεργός κατάλογος απορρήτου, έχει αρνηθεί τη δρομολόγηση αυτής της στροφής (stanza)."}.
|
||||
{"Your contact offline message queue is full. The message has been discarded.","Η μνήμη μηνυμάτων χωρίς σύνδεση είναι πλήρης. Το μήνυμα έχει απορριφθεί."}.
|
||||
{"Your subscription request and/or messages to ~s have been blocked. To unblock your subscription request, visit ~s","Τα μηνύματά σας προς ~s είναι αποκλεισμένα. Για αποδεσμεύση, επισκεφθείτε ~s"}.
|
||||
{"Your XMPP account was successfully registered.","Ο λογαριασμός σας XMPP καταχωρήθηκε με επιτυχία."}.
|
||||
{"Your XMPP account was successfully unregistered.","Ο XMPP λογαριασμός σας διαγράφηκε με επιτυχία."}.
|
||||
{"You're not allowed to create nodes","Δεν σας επιτρέπεται η δημιουργία κόμβων"}.
|
||||
|
||||
+74
-9
@@ -1,8 +1,22 @@
|
||||
%% -*- coding: utf-8 -*-
|
||||
%% Generated automatically
|
||||
%% DO NOT EDIT: run `make translations` instead
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" (Add * to the end of field to match substring)"," (Aldonu * al la fino de la kampo por kongruigi subĉenon)"}.
|
||||
{" has set the subject to: "," ŝanĝis la temon al: "}.
|
||||
{"A friendly name for the node","Kromnomo por ĉi tiu nodo"}.
|
||||
{"# participants","Nombro de partoprenantoj"}.
|
||||
{"A description of the node","Priskribo de la nodo"}.
|
||||
{"A friendly name for the node","Kromnomo de la nodo"}.
|
||||
{"A password is required to enter this room","Pasvorto estas bezonata por eniri ĉi tiun babilejon"}.
|
||||
{"A Web Page","Retpaĝo"}.
|
||||
{"Accept","Akcepti"}.
|
||||
{"Access denied by service policy","Atingo rifuzita de serv-politiko"}.
|
||||
{"Access model of open","Atingomodelo de malfermo"}.
|
||||
{"Access model of presence","Atingomodelo de ĉeesto"}.
|
||||
{"Access model of whitelist","Atingomodelo de permesolisto"}.
|
||||
{"Access model","Atingomodelo"}.
|
||||
{"Account doesn't exist","Konto ne ekzistas"}.
|
||||
{"Action on user","Ago je uzanto"}.
|
||||
{"Add Jabber ID","Aldonu Jabber ID"}.
|
||||
{"Add New","Aldonu novan"}.
|
||||
@@ -12,7 +26,8 @@
|
||||
{"Administrator privileges required","Administrantaj rajtoj bezonata"}.
|
||||
{"All activity","Ĉiu aktiveco"}.
|
||||
{"All Users","Ĉiuj Uzantoj"}.
|
||||
{"Allow this Jabber ID to subscribe to this pubsub node?","Ĉu permesi ĉi tiun Jabber ID aboni al la jena PubAbo-nodo"}.
|
||||
{"Allow subscription","Permesi abonon"}.
|
||||
{"Allow this Jabber ID to subscribe to this pubsub node?","Ĉu permesi ĉi tiun Jabber ID aboni al la jena PubAbo-nodo?"}.
|
||||
{"Allow users to change the subject","Permesu uzantojn ŝanĝi la temon"}.
|
||||
{"Allow users to query other users","Permesu uzantojn informpeti aliajn uzantojn"}.
|
||||
{"Allow users to send invites","Permesu uzantojn sendi invitojn"}.
|
||||
@@ -22,7 +37,18 @@
|
||||
{"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"}.
|
||||
{"Announcements","Anoncoj"}.
|
||||
{"Answer associated with a picture","Respondo asociita kun bildo"}.
|
||||
{"Answer associated with a video","Respondo asociita kun filmeto"}.
|
||||
{"Answer associated with speech","Respondo asociita kun parolo"}.
|
||||
{"Answer to a question","Respondo al demando"}.
|
||||
{"Anyone may publish","Ĉiu rajtas publici"}.
|
||||
{"Anyone with Voice","Iu ajn kun Voĉo"}.
|
||||
{"Anyone","Iu ajn"}.
|
||||
{"April","Aprilo"}.
|
||||
{"Attribute 'channel' is required for this request","Atributo 'channel' necesas por ĉi tiu peto"}.
|
||||
{"Attribute 'id' is mandatory for MIX messages","Atributo 'id' estas deviga en MIX-mesaĝo"}.
|
||||
{"Attribute 'jid' is not allowed here","Atributo 'jid' ne estas permesita ĉi tie"}.
|
||||
{"Attribute 'node' is not allowed here","Atributo 'node' ne estas permesita ĉi tie"}.
|
||||
{"August","Aŭgusto"}.
|
||||
{"Backup Management","Mastrumado de sekurkopioj"}.
|
||||
{"Backup of ~p","Sekurkopio de ~p"}.
|
||||
@@ -30,9 +56,14 @@
|
||||
{"Backup","Faru Sekurkopion"}.
|
||||
{"Bad format","Malĝusta formo"}.
|
||||
{"Birthday","Naskiĝtago"}.
|
||||
{"Cannot remove active list","Ne povas forigi aktivan liston"}.
|
||||
{"CAPTCHA web page","CAPTCHA teksaĵ-paĝo"}.
|
||||
{"Challenge ID","Identigilo de Defio"}.
|
||||
{"Change Password","Ŝanĝu pasvorton"}.
|
||||
{"Change User Password","Ŝanĝu pasvorton de uzanto"}.
|
||||
{"Channel already exists","Kanalo jam ekzistas"}.
|
||||
{"Channel does not exist","Kanalo ne ekzistas"}.
|
||||
{"Channels","Kanaloj"}.
|
||||
{"Characters not allowed:","Karaktroj ne permesata:"}.
|
||||
{"Chatroom configuration modified","Agordo de babilejo ŝanĝita"}.
|
||||
{"Chatroom is created","Babilejo kreita"}.
|
||||
@@ -42,7 +73,7 @@
|
||||
{"Chatrooms","Babilejoj"}.
|
||||
{"Choose a username and password to register with this server","Elektu uzantnomon kaj pasvorton por registri je ĉi tiu servilo"}.
|
||||
{"Choose storage type of tables","Elektu konserv-tipon de tabeloj"}.
|
||||
{"Choose whether to approve this entity's subscription.","Elektu ĉu permesi la abonon de ĉi tiu ento"}.
|
||||
{"Choose whether to approve this entity's subscription.","Elektu ĉu permesi la abonon de ĉi tiu ento."}.
|
||||
{"City","Urbo"}.
|
||||
{"Commands","Ordonoj"}.
|
||||
{"Conference room does not exist","Babilejo ne ekzistas"}.
|
||||
@@ -51,6 +82,7 @@
|
||||
{"Connected Resources:","Konektataj risurcoj:"}.
|
||||
{"Country","Lando"}.
|
||||
{"CPU Time:","CPU-tempo"}.
|
||||
{"Current Discussion Topic","Aktuala Diskuta Temo"}.
|
||||
{"Database Tables at ~p","Datumbaz-tabeloj je ~p"}.
|
||||
{"Database Tables Configuration at ","Agordo de datumbaz-tabeloj je "}.
|
||||
{"Database","Datumbazo"}.
|
||||
@@ -66,6 +98,7 @@
|
||||
{"Disc only copy","Nur disk-kopio"}.
|
||||
{"Dump Backup to Text File at ","Skribu sekurkopion en plata teksto al "}.
|
||||
{"Dump to Text File","Skribu en plata tekst-dosiero"}.
|
||||
{"Duplicated groups are not allowed by RFC6121","RFC 6121 ne permesas duplikatajn grupojn"}.
|
||||
{"Edit Properties","Redaktu atributojn"}.
|
||||
{"Either approve or decline the voice request.","Ĉu aprobu, aŭ malaprobu la voĉ-peton."}.
|
||||
{"ejabberd MUC module","ejabberd MUC-modulo"}.
|
||||
@@ -74,7 +107,9 @@
|
||||
{"ejabberd SOCKS5 Bytestreams module","ejabberd SOCKS5 Bajtfluo modulo"}.
|
||||
{"ejabberd vCard module","ejabberd vCard-modulo"}.
|
||||
{"ejabberd Web Admin","ejabberd Teksaĵa Administro"}.
|
||||
{"ejabberd","ejabberd"}.
|
||||
{"Elements","Eroj"}.
|
||||
{"Email Address","Retpoŝta Adreso"}.
|
||||
{"Email","Retpoŝto"}.
|
||||
{"Enable logging","Ŝaltu protokoladon"}.
|
||||
{"Enable message archiving","Ŝaltu mesaĝo-arkivo"}.
|
||||
@@ -93,6 +128,7 @@
|
||||
{"Failed to extract JID from your voice request approval","Malsukcesis ekstrakti JID-on de via voĉ-pet-aprobo"}.
|
||||
{"Family Name","Lasta Nomo"}.
|
||||
{"February","Februaro"}.
|
||||
{"File larger than ~w bytes","Dosiero pli granda ol ~w bajtoj"}.
|
||||
{"Friday","Vendredo"}.
|
||||
{"From","De"}.
|
||||
{"Full Name","Plena Nomo"}.
|
||||
@@ -101,6 +137,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"}.
|
||||
{"Given Name","Persona Nomo"}.
|
||||
{"Grant voice to this person?","Koncedu voĉon al ĉi-persono?"}.
|
||||
{"Group","Grupo"}.
|
||||
{"Groups","Grupoj"}.
|
||||
@@ -120,6 +157,7 @@
|
||||
{"Import Users from Dir at ","Importu uzantojn de dosierujo ĉe "}.
|
||||
{"Import Users From jabberd14 Spool Files","Importu uzantojn de jabberd14-uzantdosieroj"}.
|
||||
{"Improper message type","Malĝusta mesaĝo-tipo"}.
|
||||
{"Incorrect CAPTCHA submit","Neĝusta CAPTCHA-submeto"}.
|
||||
{"Incorrect password","Nekorekta pasvorto"}.
|
||||
{"IP addresses","IP-adresoj"}.
|
||||
{"is now known as","nun nomiĝas"}.
|
||||
@@ -131,6 +169,8 @@
|
||||
{"joins the room","eniras la babilejo"}.
|
||||
{"July","Julio"}.
|
||||
{"June","Junio"}.
|
||||
{"Just created","Ĵus kreita"}.
|
||||
{"Label:","Etikedo:"}.
|
||||
{"Last Activity","Lasta aktiveco"}.
|
||||
{"Last login","Lasta ensaluto"}.
|
||||
{"Last month","Lasta monato"}.
|
||||
@@ -139,7 +179,7 @@
|
||||
{"List of rooms","Listo de babilejoj"}.
|
||||
{"Low level update script","Bazanivela ĝisdatigo-skripto"}.
|
||||
{"Make participants list public","Farigu partoprento-liston publika"}.
|
||||
{"Make room CAPTCHA protected","Farigu babilejon protektata per CAPTCHA"}.
|
||||
{"Make room CAPTCHA protected","Protektu babilejon 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"}.
|
||||
@@ -148,6 +188,7 @@
|
||||
{"March","Marĉo"}.
|
||||
{"Max # of items to persist","Maksimuma kiomo de eroj en konservado"}.
|
||||
{"Max payload size in bytes","Maksimuma aĵo-grando je bajtoj"}.
|
||||
{"Maximum file size","Maksimuma grando de dosiero"}.
|
||||
{"Maximum Number of Occupants","Limigo de nombro de partoprenantoj"}.
|
||||
{"May","Majo"}.
|
||||
{"Membership is required to enter this room","Membreco estas bezonata por eniri ĉi tiun babilejon"}.
|
||||
@@ -158,19 +199,30 @@
|
||||
{"Minimum interval between voice requests (in seconds)","Minimuma intervalo inter voĉ-petoj (je sekundoj)"}.
|
||||
{"Moderator privileges required","Moderantaj rajtoj bezonata"}.
|
||||
{"Modified modules","Ĝisdatigitaj moduloj"}.
|
||||
{"Module failed to handle the query","Modulo malsukcesis trakti la informpeton"}.
|
||||
{"Monday","Lundo"}.
|
||||
{"Multicast","Multicast"}.
|
||||
{"Multiple <item/> elements are not allowed by RFC6121","RFC 6121 ne permesas plurajn <item/>-elementojn"}.
|
||||
{"Multi-User Chat","Grupbabilado"}.
|
||||
{"Name","Nomo"}.
|
||||
{"Name:","Nomo:"}.
|
||||
{"Natural Language for Room Discussions","Homa Lingvo por Diskutoj en Babilejo"}.
|
||||
{"Never","Neniam"}.
|
||||
{"New Password:","Nova Pasvorto:"}.
|
||||
{"Nickname Registration at ","Kaŝnomo-registrado je "}.
|
||||
{"Nickname ~s does not exist in the room","Kaŝnomo ~s ne ekzistas en la babilejo"}.
|
||||
{"Nickname","Kaŝnomo"}.
|
||||
{"No address elements found","Adresa elemento ne trovita"}.
|
||||
{"No addresses element found","Adresa elemento ne trovita"}.
|
||||
{"No body provided for announce message","Neniu teksto donita por anonc-mesaĝo"}.
|
||||
{"No child elements found","Ida elemento ne trovita"}.
|
||||
{"No Data","Neniu datumo"}.
|
||||
{"No <forwarded/> element found","Elemento <forwarded/> ne trovita"}.
|
||||
{"No items found in this query","Neniu elemento <item/> trovita en ĉi tiu informpeto"}.
|
||||
{"No limit","Neniu limigo"}.
|
||||
{"No module is handling this query","Neniu modulo traktas ĉi tiun informpeton"}.
|
||||
{"No 'password' found in this query","Neniu pasvorto trovita en ĉi tiu informpeto"}.
|
||||
{"No private data found in this query","Neniu privata dateno trovita en ĉi tiu informpeto"}.
|
||||
{"Node ID","Nodo ID"}.
|
||||
{"Node not found","Nodo ne trovita"}.
|
||||
{"Node ~p","Nodo ~p"}.
|
||||
@@ -193,12 +245,16 @@
|
||||
{"Online Users","Konektataj Uzantoj"}.
|
||||
{"Online","Konektata"}.
|
||||
{"Only deliver notifications to available users","Nur liveru sciigojn al konektataj uzantoj"}.
|
||||
{"Only <list/> element is allowed in this query","Nur la elemento <list/> estas permesita en ĉi tiu informpeto"}.
|
||||
{"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 publishers may publish","Nur publicantoj rajtas publici"}.
|
||||
{"Only service administrators are allowed to send service messages","Nur servo-administrantoj rajtas sendi serv-mesaĝojn"}.
|
||||
{"Only those on a whitelist may associate leaf nodes with the collection","Nur tiuj en permesolisto rajtas asocii foliajn nodojn kun la kolekto"}.
|
||||
{"Only those on a whitelist may subscribe and retrieve items","Nur tiuj en permesolisto rajtas aboni kaj preni erojn"}.
|
||||
{"Organization Name","Organiz-nomo"}.
|
||||
{"Organization Unit","Organiz-parto"}.
|
||||
{"Outgoing s2s Connections","Elirantaj s-al-s-konektoj"}.
|
||||
@@ -220,14 +276,16 @@
|
||||
{"Pong","Resondaĵo"}.
|
||||
{"Present real Jabber IDs to","Montru verajn Jabber ID-ojn al"}.
|
||||
{"private, ","privata, "}.
|
||||
{"Publish-Subscribe","Public-Abonado"}.
|
||||
{"Publish model","Publici modelon"}.
|
||||
{"Publish-Subscribe","Publici-Aboni"}.
|
||||
{"PubSub subscriber request","PubAbo abonpeto"}.
|
||||
{"Purge all items when the relevant publisher goes offline","Forigu ĉiujn erojn kiam la rilata publikanto malkonektiĝas"}.
|
||||
{"Purge all items when the relevant publisher goes offline","Forigu ĉiujn erojn kiam la rilata publicanto malkonektiĝas"}.
|
||||
{"Queries to the conference members are not allowed in this room","Malpermesas informmendoj al partoprenantoj en ĉi tiu babilejo"}.
|
||||
{"Query to another users is forbidden","Informpeto al aliaj uzantoj estas malpermesita"}.
|
||||
{"RAM and disc copy","RAM- kaj disk-kopio"}.
|
||||
{"RAM copy","RAM-kopio"}.
|
||||
{"Really delete message of the day?","Ĉu vere forigi mesaĝon de la tago?"}.
|
||||
{"Recipient is not in the conference room","Ricevanto ne ĉeestas en la babilejo "}.
|
||||
{"Recipient is not in the conference room","Ricevanto ne ĉeestas en la babilejo"}.
|
||||
{"Registered Users","Registritaj uzantoj"}.
|
||||
{"Registered Users:","Registritaj uzantoj:"}.
|
||||
{"Register","Registru"}.
|
||||
@@ -283,15 +341,19 @@
|
||||
{"Submit","Sendu"}.
|
||||
{"Submitted","Sendita"}.
|
||||
{"Subscriber Address","Abonanta adreso"}.
|
||||
{"Subscribers may publish","Abonantoj rajtas publici"}.
|
||||
{"Subscription","Abono"}.
|
||||
{"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 CAPTCHA ĝustas"}.
|
||||
{"The CAPTCHA is valid.","La CAPTCHA ĝustas."}.
|
||||
{"The CAPTCHA verification has failed","La CAPTCHA-kontrolado malsukcesis"}.
|
||||
{"The captcha you entered is wrong","La CAPTCHA enigita de vi malĝustas"}.
|
||||
{"The collections with which a node is affiliated","Aro kun kiu nodo estas filigita"}.
|
||||
{"The password is too weak","La pasvorto estas ne sufiĉe forta"}.
|
||||
{"the password is","la pasvorto estas"}.
|
||||
{"The query is only allowed from local users","La informpeto estas permesita nur de lokaj uzantoj"}.
|
||||
{"The query must not contain <item/> elements","La informpeto devas ne enhavi elementojn <item/>"}.
|
||||
{"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 room is not anonymous","Ĉi tiu babilejo ne estas anonima"}.
|
||||
@@ -319,6 +381,7 @@
|
||||
{"Update script","Ĝisdatigo-skripto"}.
|
||||
{"Update","Ĝisdatigu"}.
|
||||
{"Uptime:","Daŭro de funkciado"}.
|
||||
{"URL for Archived Discussion Logs","Retpaĝa adreso de Enarkivigitaj Diskutprotokoloj"}.
|
||||
{"User JID","Uzant-JID"}.
|
||||
{"User Management","Uzanto-administrado"}.
|
||||
{"Username:","Uzantnomo"}.
|
||||
@@ -336,6 +399,8 @@
|
||||
{"Wednesday","Merkredo"}.
|
||||
{"When to send the last published item","Kiam sendi la laste publicitan eron"}.
|
||||
{"Whether to allow subscriptions","Ĉu permesi aboni"}.
|
||||
{"Wrong xmlns","Malĝusta XML-nomspaco (xmlns)"}.
|
||||
{"XMPP Account Registration","Registrado de XMPP-Konto"}.
|
||||
{"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"}.
|
||||
|
||||
+5
-1
@@ -1,4 +1,8 @@
|
||||
%% -*- coding: utf-8 -*-
|
||||
%% Generated automatically
|
||||
%% DO NOT EDIT: run `make translations` instead
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" (Add * to the end of field to match substring)"," (Añade * al final del campo para buscar subcadenas)"}.
|
||||
{" has set the subject to: "," ha puesto el asunto: "}.
|
||||
{"# participants","# participantes"}.
|
||||
|
||||
+5
-1
@@ -1,4 +1,8 @@
|
||||
%% -*- coding: utf-8 -*-
|
||||
%% Generated automatically
|
||||
%% DO NOT EDIT: run `make translations` instead
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" (Add * to the end of field to match substring)"," (Ajouter * à la fin du champ pour correspondre à la sous-chaîne)"}.
|
||||
{" has set the subject to: "," a défini le sujet sur : "}.
|
||||
{"A description of the node","Une description du nœud"}.
|
||||
|
||||
+5
-1
@@ -1,4 +1,8 @@
|
||||
%% -*- coding: utf-8 -*-
|
||||
%% Generated automatically
|
||||
%% DO NOT EDIT: run `make translations` instead
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" has set the subject to: "," puxo o asunto: "}.
|
||||
{"A friendly name for the node","Un nome sinxelo para o nodo"}.
|
||||
{"A password is required to enter this room","Necesítase contrasinal para entrar nesta sala"}.
|
||||
|
||||
+5
-1
@@ -1,4 +1,8 @@
|
||||
%% -*- coding: utf-8 -*-
|
||||
%% Generated automatically
|
||||
%% DO NOT EDIT: run `make translations` instead
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" has set the subject to: "," הגדיר/ה את הנושא אל: "}.
|
||||
{"A friendly name for the node","שם ידידותי עבור הצומת"}.
|
||||
{"A password is required to enter this room","נדרשת סיסמה כדי להיכנס אל חדר זה"}.
|
||||
|
||||
+5
-1
@@ -1,4 +1,8 @@
|
||||
%% -*- coding: utf-8 -*-
|
||||
%% Generated automatically
|
||||
%% DO NOT EDIT: run `make translations` instead
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" (Add * to the end of field to match substring)"," (adjon * karaktert a mező végéhez a részkarakterláncra illesztéshez)"}.
|
||||
{" has set the subject to: "," beállította a tárgyat erre: "}.
|
||||
{"A password is required to enter this room","Jelszó szükséges a szobába történő belépéshez"}.
|
||||
|
||||
+5
-1
@@ -1,4 +1,8 @@
|
||||
%% -*- coding: utf-8 -*-
|
||||
%% Generated automatically
|
||||
%% DO NOT EDIT: run `make translations` instead
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" (Add * to the end of field to match substring)"," Isi formulir untuk pencarian pengguna Jabber yang cocok (Tambahkan * ke mengakhiri pengisian untuk menyamakan kata)"}.
|
||||
{" has set the subject to: "," telah menetapkan topik yaitu: "}.
|
||||
{"# participants","# pengguna"}.
|
||||
|
||||
+5
-1
@@ -1,4 +1,8 @@
|
||||
%% -*- coding: utf-8 -*-
|
||||
%% Generated automatically
|
||||
%% DO NOT EDIT: run `make translations` instead
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" has set the subject to: "," ha modificato l'oggetto in: "}.
|
||||
{"A friendly name for the node","Un nome comodo per il nodo"}.
|
||||
{"A password is required to enter this room","Per entrare in questa stanza è prevista una password"}.
|
||||
|
||||
+93
-3
@@ -1,9 +1,18 @@
|
||||
%% -*- coding: utf-8 -*-
|
||||
%% Generated automatically
|
||||
%% DO NOT EDIT: run `make translations` instead
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" (Add * to the end of field to match substring)"," (* を最後に付けると部分文字列にマッチします)"}.
|
||||
{" has set the subject to: "," は件名を設定しました: "}.
|
||||
{"A description of the node","ノードの説明"}.
|
||||
{"A friendly name for the node","ノードのフレンドリネーム"}.
|
||||
{"A password is required to enter this room","このチャットルームに入るにはパスワードが必要です"}.
|
||||
{"A Web Page","ウェブページ"}.
|
||||
{"Accept","許可"}.
|
||||
{"Access denied by service policy","サービスポリシーによってアクセスが禁止されました"}.
|
||||
{"Access model","アクセスモデル"}.
|
||||
{"Account doesn't exist","アカウントは存在しません"}.
|
||||
{"Action on user","ユーザー操作"}.
|
||||
{"Add Jabber ID","Jabber ID を追加"}.
|
||||
{"Add New","新規追加"}.
|
||||
@@ -13,6 +22,7 @@
|
||||
{"Administrator privileges required","管理者権限が必要です"}.
|
||||
{"All activity","すべて"}.
|
||||
{"All Users","全ユーザー"}.
|
||||
{"Allow subscription","購読を認可"}.
|
||||
{"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","ユーザーによる他のユーザーへのクエリーを許可"}.
|
||||
@@ -23,6 +33,7 @@
|
||||
{"Allow visitors to send status text in presence updates","傍聴者によるプレゼンス更新のステータス文の送信を許可"}.
|
||||
{"Allow visitors to send voice requests","傍聴者による発言権の要求を許可"}.
|
||||
{"Announcements","アナウンス"}.
|
||||
{"Anyone","誰にでも"}.
|
||||
{"April","4月"}.
|
||||
{"August","8月"}.
|
||||
{"Backup Management","バックアップ管理"}.
|
||||
@@ -31,9 +42,14 @@
|
||||
{"Backup","バックアップ"}.
|
||||
{"Bad format","不正なフォーマット"}.
|
||||
{"Birthday","誕生日"}.
|
||||
{"Both the username and the resource are required","ユーザー名とリソースの両方が必要"}.
|
||||
{"CAPTCHA web page","CAPTCHA ウェブページ"}.
|
||||
{"Change Password","パスワードを変更"}.
|
||||
{"Change User Password","パスワードを変更"}.
|
||||
{"Changing password is not allowed","パスワード変更の権限がありません"}.
|
||||
{"Channel already exists","チャンネルは既に存在します"}.
|
||||
{"Channel does not exist","チャンネルは存在しません"}.
|
||||
{"Channels","チャンネル"}.
|
||||
{"Characters not allowed:","使用できない文字:"}.
|
||||
{"Chatroom configuration modified","チャットルームの設定が変更されました"}.
|
||||
{"Chatroom is created","チャットルームを作りました"}.
|
||||
@@ -50,33 +66,42 @@
|
||||
{"Configuration of room ~s","チャットルーム ~s の設定"}.
|
||||
{"Configuration","設定"}.
|
||||
{"Connected Resources:","接続リソース:"}.
|
||||
{"Contact Addresses (normally, room owner or owners)","連絡先 (通常は会議室の主宰者またはその複数)"}.
|
||||
{"Country","国"}.
|
||||
{"CPU Time:","CPU時間:"}.
|
||||
{"Current Discussion Topic","現在の話題"}.
|
||||
{"Database Tables at ~p","データーベーステーブル: ~p"}.
|
||||
{"Database Tables Configuration at ","データーベーステーブル設定 "}.
|
||||
{"Database","データーベース"}.
|
||||
{"December","12月"}.
|
||||
{"Default users as participants","デフォルトのユーザーは参加者"}.
|
||||
{"Delete content","内容を削除"}.
|
||||
{"Delete message of the day on all hosts","全ホストのお知らせメッセージを削除"}.
|
||||
{"Delete message of the day","お知らせメッセージを削除"}.
|
||||
{"Delete Selected","選択した項目を削除"}.
|
||||
{"Delete table","テーブルを削除"}.
|
||||
{"Delete User","ユーザーを削除"}.
|
||||
{"Deliver event notifications","イベント通知を配送する"}.
|
||||
{"Deliver payloads with event notifications","イベント通知と同時にペイロードを配送する"}.
|
||||
{"Description:","説明:"}.
|
||||
{"Disc only copy","ディスクだけのコピー"}.
|
||||
{"Don't tell your password to anybody, not even the administrators of the XMPP server.","パスワードは誰にも(たとえ XMPP サーバーの管理者でも)教えないようにしてください。"}.
|
||||
{"Dump Backup to Text File at ","テキストファイルにバックアップ: "}.
|
||||
{"Dump to Text File","テキストファイルに出力"}.
|
||||
{"Duplicated groups are not allowed by RFC6121","RFC6121 によりグループの重複は許されません"}.
|
||||
{"Edit Properties","プロパティを編集"}.
|
||||
{"Either approve or decline the voice request.","発言権の要求を承認または却下します。"}.
|
||||
{"ejabberd HTTP Upload service","ejabberd HTTP ファイルアップロード"}.
|
||||
{"ejabberd MUC module","ejabberd MUCモジュール"}.
|
||||
{"ejabberd Multicast service","ejabberdマルチキャストサービス"}.
|
||||
{"ejabberd Publish-Subscribe module","ejabberd Publish-Subscribe モジュール"}.
|
||||
{"ejabberd SOCKS5 Bytestreams module","ejabberd SOCKS5 Bytestreams モジュール"}.
|
||||
{"ejabberd vCard module","ejabberd vCard モジュール"}.
|
||||
{"ejabberd Web Admin","ejabberd ウェブ管理"}.
|
||||
{"ejabberd","ejabberd"}.
|
||||
{"Elements","要素"}.
|
||||
{"Email","メールアドレス"}.
|
||||
{"Email Address","メールアドレス"}.
|
||||
{"Email","メール"}.
|
||||
{"Enable logging","ロギングを有効"}.
|
||||
{"Enable message archiving","メッセージアーカイブを有効化"}.
|
||||
{"End User Session","エンドユーザーセッション"}.
|
||||
@@ -86,29 +111,40 @@
|
||||
{"Enter path to jabberd14 spool file","jabberd14 spool ファイルのパスを入力してください"}.
|
||||
{"Enter path to text file","テキストファイルのパスを入力してください"}.
|
||||
{"Enter the text you see","見えているテキストを入力してください"}.
|
||||
{"Erlang XMPP Server","Erlang XMPP サーバー"}.
|
||||
{"Error","エラー"}.
|
||||
{"Exclude Jabber IDs from CAPTCHA challenge","CAPTCHA 入力を免除する Jabber ID"}.
|
||||
{"Export all tables as SQL queries to a file:","すべてのテーブルをSQL形式でファイルにエクスポート: "}.
|
||||
{"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 を取り出すことに失敗しました"}.
|
||||
{"Failed to parse HTTP response","HTTP 応答のパースに失敗しました"}.
|
||||
{"Family Name","姓"}.
|
||||
{"February","2月"}.
|
||||
{"Fill in the form to search for any matching XMPP User","XMPP ユーザーを検索するには欄に入力してください"}.
|
||||
{"Friday","金曜日"}.
|
||||
{"From ~ts","From ~ts"}.
|
||||
{"From","差出人"}.
|
||||
{"Full List of Room Admins","チャットルーム管理者の一覧"}.
|
||||
{"Full List of Room Owners","チャットルーム主宰者の一覧"}.
|
||||
{"Full Name","氏名"}.
|
||||
{"Get Number of Online Users","オンラインユーザー数を取得"}.
|
||||
{"Get Number of Registered Users","登録ユーザー数を取得"}.
|
||||
{"Get User Last Login Time","最終ログイン時間を取得"}.
|
||||
{"Get User Password","パスワードを取得"}.
|
||||
{"Get User Statistics","ユーザー統計を取得"}.
|
||||
{"Given Name","名"}.
|
||||
{"Grant voice to this person?","この人に発言権を与えますか ?"}.
|
||||
{"Groups","グループ"}.
|
||||
{"Group","グループ"}.
|
||||
{"has been banned","はバンされました"}.
|
||||
{"has been kicked because of a system shutdown","はシステムシャットダウンのためキックされました"}.
|
||||
{"has been kicked because of an affiliation change","は分掌が変更されたためキックされました"}.
|
||||
{"has been kicked because the room has been changed to members-only","はチャットルームがメンバー制に変更されたためキックされました"}.
|
||||
{"has been kicked","はキックされました"}.
|
||||
{"Host unknown","不明なホスト"}.
|
||||
{"Host","ホスト"}.
|
||||
{"HTTP File Upload","HTTP ファイルアップロード"}.
|
||||
{"If you don't see the CAPTCHA image here, visit the web page.","ここに CAPTCHA 画像が表示されない場合、ウェブページを参照してください。"}.
|
||||
{"Import Directory","ディレクトリインポート"}.
|
||||
{"Import File","ファイルからインポート"}.
|
||||
@@ -120,7 +156,11 @@
|
||||
{"Import Users From jabberd14 Spool Files","jabberd14 Spool ファイルからユーザーをインポート"}.
|
||||
{"Improper message type","誤ったメッセージタイプです"}.
|
||||
{"Incoming s2s Connections:","内向き s2s コネクション:"}.
|
||||
{"Incorrect data form","データ形式が違います"}.
|
||||
{"Incorrect password","パスワードが違います"}.
|
||||
{"Internal server error","内部サーバーエラー"}.
|
||||
{"Invalid node name","無効なノード名です"}.
|
||||
{"Invitations are not allowed in this conference","この会議では、招待はできません"}.
|
||||
{"IP addresses","IP アドレス"}.
|
||||
{"is now known as","は名前を変更しました: "}.
|
||||
{"It is not allowed to send error messages to the room. The participant (~s) has sent an error message (~s) and got kicked from the room","このルームにエラーメッセージを送ることは許可されていません。参加者(~s)はエラーメッセージを(~s)を送信してルームからキックされました。"}.
|
||||
@@ -132,8 +172,11 @@
|
||||
{"joins the room","がチャットルームに参加しました"}.
|
||||
{"July","7月"}.
|
||||
{"June","6月"}.
|
||||
{"Just created","作成しました"}.
|
||||
{"Label:","ラベル:"}.
|
||||
{"Last Activity","活動履歴"}.
|
||||
{"Last login","最終ログイン"}.
|
||||
{"Last message","最終メッセージ"}.
|
||||
{"Last month","先月"}.
|
||||
{"Last year","去年"}.
|
||||
{"leaves the room","がチャットルームから退出しました"}.
|
||||
@@ -146,13 +189,16 @@
|
||||
{"Make room password protected","チャットルームをパスワードで保護"}.
|
||||
{"Make room persistent","チャットルームを永続化"}.
|
||||
{"Make room public searchable","チャットルームを検索可"}.
|
||||
{"Malformed username","不正な形式のユーザー名"}.
|
||||
{"March","3月"}.
|
||||
{"Max # of items to persist","アイテムの最大保存数"}.
|
||||
{"Max payload size in bytes","最大ぺイロードサイズ (byte)"}.
|
||||
{"Maximum file size","最大ファイルサイズ"}.
|
||||
{"Maximum Number of Occupants","最大在室者数"}.
|
||||
{"May","5月"}.
|
||||
{"Membership is required to enter this room","このチャットルームに入るにはメンバーでなければなりません"}.
|
||||
{"Members:","メンバー:"}.
|
||||
{"Memorize your password, or write it in a paper placed in a safe place. In XMPP there isn't an automated way to recover your password if you forget it.","パスワードは記憶するか、紙に書いて安全な場所に保管してください。もしあなたがパスワードを忘れてしまった場合、XMPP ではパスワードのリカバリを自動的に行うことはできません。"}.
|
||||
{"Memory","メモリ"}.
|
||||
{"Message body","本文"}.
|
||||
{"Middle Name","ミドルネーム"}.
|
||||
@@ -165,14 +211,17 @@
|
||||
{"Multi-User Chat","マルチユーザーチャット"}.
|
||||
{"Name","名"}.
|
||||
{"Name:","名前:"}.
|
||||
{"Natural-Language Room Name","自然言語での会議室名"}.
|
||||
{"Never","なし"}.
|
||||
{"New Password:","新しいパスワード:"}.
|
||||
{"Nickname can't be empty","ニックネームは空にできません"}.
|
||||
{"Nickname Registration at ","ニックネーム登録: "}.
|
||||
{"Nickname ~s does not exist in the room","ニックネーム ~s はこのチャットルームにいません"}.
|
||||
{"Nickname","ニックネーム"}.
|
||||
{"No body provided for announce message","アナウンスメッセージはありませんでした"}.
|
||||
{"No Data","データなし"}.
|
||||
{"No limit","制限なし"}.
|
||||
{"Node already exists","ノードは既に存在しています"}.
|
||||
{"Node ID","ノードID"}.
|
||||
{"Node not found","ノードが見つかりません"}.
|
||||
{"Node ~p","ノード ~p"}.
|
||||
@@ -184,8 +233,11 @@
|
||||
{"Notify subscribers when the node is deleted","ノードが削除された時に購読者へ通知する"}.
|
||||
{"November","11月"}.
|
||||
{"Number of occupants","在室者の数"}.
|
||||
{"Number of Offline Messages","オフラインメッセージ数"}.
|
||||
{"Number of online users","オンラインユーザー数"}.
|
||||
{"Number of registered users","登録ユーザー数"}.
|
||||
{"Occupants are allowed to invite others","在室者は誰かを招待することができます"}.
|
||||
{"Occupants May Change the Subject","ユーザーによる件名の変更を許可"}.
|
||||
{"October","10月"}.
|
||||
{"Offline Messages","オフラインメッセージ"}.
|
||||
{"Offline Messages:","オフラインメッセージ:"}.
|
||||
@@ -218,6 +270,7 @@
|
||||
{"Pending","保留"}.
|
||||
{"Period: ","期間: "}.
|
||||
{"Persist items to storage","アイテムをストレージに保存する"}.
|
||||
{"Persistent","チャットルームを永続化"}.
|
||||
{"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","新しい発言権の要求を送るまで少し間をおいてください"}.
|
||||
@@ -232,6 +285,7 @@
|
||||
{"RAM copy","RAM コピー"}.
|
||||
{"Really delete message of the day?","本当にお知らせメッセージを削除しますか ?"}.
|
||||
{"Recipient is not in the conference room","受信者はこの会議室にいません"}.
|
||||
{"Register an XMPP account","XMPP アカウントを登録"}.
|
||||
{"Registered Users","登録ユーザー"}.
|
||||
{"Registered Users:","登録ユーザー:"}.
|
||||
{"Register","登録"}.
|
||||
@@ -255,13 +309,17 @@
|
||||
{"Room Occupants","在室者"}.
|
||||
{"Room title","チャットルームのタイトル"}.
|
||||
{"Roster groups allowed to subscribe","名簿グループは購読を許可しました"}.
|
||||
{"Roster of ~ts","~ts の名簿"}.
|
||||
{"Roster size","名簿サイズ"}.
|
||||
{"Roster:","名簿:"}.
|
||||
{"RPC Call Error","RPC 呼び出しエラー"}.
|
||||
{"Running Nodes","起動ノード"}.
|
||||
{"~s invites you to the room ~s","~s はあなたをチャットルーム ~s に招待しています"}.
|
||||
{"Saturday","土曜日"}.
|
||||
{"Script check","スクリプトチェック"}.
|
||||
{"Search Results for ","検索結果: "}.
|
||||
{"Search users in ","ユーザーの検索: "}.
|
||||
{"Select All","すべて選択"}.
|
||||
{"Send announcement to all online users on all hosts","全ホストのオンラインユーザーにアナウンスを送信"}.
|
||||
{"Send announcement to all online users","すべてのオンラインユーザーにアナウンスを送信"}.
|
||||
{"Send announcement to all users on all hosts","全ホストのユーザーにアナウンスを送信"}.
|
||||
@@ -274,9 +332,11 @@
|
||||
{"Show Integral Table","累積の表を表示"}.
|
||||
{"Show Ordinary Table","通常の表を表示"}.
|
||||
{"Shut Down Service","サービスを停止"}.
|
||||
{"Some XMPP clients can store your password in the computer, but you should do this only in your personal computer for safety reasons.","XMPP クライアントはコンピューターにパスワードを記憶できます。コンピューターが安全であると信頼できる場合にのみ、この機能を使用してください。"}.
|
||||
{"Specify the access model","アクセスモデルを設定する"}.
|
||||
{"Specify the event message type","イベントメッセージ種別を設定"}.
|
||||
{"Specify the publisher model","公開モデルを指定する"}.
|
||||
{"Stanza ID","スタンザ ID"}.
|
||||
{"Statistics of ~p","~p の統計"}.
|
||||
{"Statistics","統計"}.
|
||||
{"Stopped Nodes","停止ノード"}.
|
||||
@@ -292,13 +352,27 @@
|
||||
{"Sunday","日曜日"}.
|
||||
{"That nickname is already in use by another occupant","そのニックネームは既にほかの在室者によって使用されています"}.
|
||||
{"That nickname is registered by another person","ニックネームはほかの人によって登録されています"}.
|
||||
{"The account already exists","アカウントは既に存在しています"}.
|
||||
{"The account was not unregistered","アカウントは削除されませんでした"}.
|
||||
{"The CAPTCHA is valid.","CAPTCHA は有効です。"}.
|
||||
{"The CAPTCHA verification has failed","CAPTCHA 検証は失敗しました"}.
|
||||
{"The captcha you entered is wrong","入力した CAPTCHA は間違っています"}.
|
||||
{"The collections with which a node is affiliated","提携されたノードの集合です"}.
|
||||
{"The default language of the node","ノードのデフォルトの言語"}.
|
||||
{"The JID of the node creator","ノード作成者の JID"}.
|
||||
{"The name of the node","ノード名"}.
|
||||
{"The password contains unacceptable characters","パスワードに使用できない文字が含まれています"}.
|
||||
{"The password is too weak","このパスワードは単純過ぎます"}.
|
||||
{"the password is","パスワードは"}.
|
||||
{"The password of your XMPP account was successfully changed.","XMPP アカウントのパスワード変更に成功しました。"}.
|
||||
{"The password was not changed","このパスワードは変更されませんでした"}.
|
||||
{"The passwords are different","このパスワードが違います"}.
|
||||
{"The username is not valid","ユーザー名が正しくありません"}.
|
||||
{"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 register an XMPP account in this XMPP server. Your JID (Jabber ID) will be of the form: username@server. Please read carefully the instructions to fill correctly the fields.","ここはこの XMPP サーバーにアカウントを作成するページです。あなたの JID (JabberID) は username@server のような形式になります。注意事項どおり、正しく項目を記入してください。"}.
|
||||
{"This page allows to unregister an XMPP account in this XMPP server.","このページはサーバー上のXMPPアカウントを削除するページです。"}.
|
||||
{"This room is not anonymous","このチャットルームは非匿名です"}.
|
||||
{"Thursday","木曜日"}.
|
||||
{"Time delay","遅延時間"}.
|
||||
@@ -313,10 +387,13 @@
|
||||
{"Transactions Committed:","トランザクションのコミット:"}.
|
||||
{"Transactions Logged:","トランザクションのログ: "}.
|
||||
{"Transactions Restarted:","トランザクションの再起動:"}.
|
||||
{"~ts's Offline Messages Queue","~ts のオフラインメッセージキュー"}.
|
||||
{"Tuesday","火曜日"}.
|
||||
{"Unable to generate a CAPTCHA","CAPTCHA を生成できません"}.
|
||||
{"Unauthorized","認証されていません"}.
|
||||
{"Unregister an XMPP account","XMPP アカウントを削除"}.
|
||||
{"Unregister","削除"}.
|
||||
{"Unsupported version","対応していないバージョン"}.
|
||||
{"Update message of the day (don't send)","お知らせメッセージを更新 (送信しない)"}.
|
||||
{"Update message of the day on all hosts (don't send)","全ホストのお知らせメッセージを更新 (送信しない)"}.
|
||||
{"Update plan","更新計画"}.
|
||||
@@ -324,8 +401,12 @@
|
||||
{"Update script","スクリプトの更新"}.
|
||||
{"Update","更新"}.
|
||||
{"Uptime:","起動時間:"}.
|
||||
{"User already exists","ユーザーは既に存在しています"}.
|
||||
{"User (jid)","ユーザー (JID)"}.
|
||||
{"User JID","ユーザー JID"}.
|
||||
{"User Management","ユーザー管理"}.
|
||||
{"User removed","ユーザーを削除しました"}.
|
||||
{"User ~ts","ユーザー ~ts"}.
|
||||
{"Username:","ユーザー名:"}.
|
||||
{"Users are not allowed to register accounts so quickly","それほど速くアカウントを登録することはできません"}.
|
||||
{"Users Last Activity","ユーザーの活動履歴"}.
|
||||
@@ -333,6 +414,8 @@
|
||||
{"User","ユーザー"}.
|
||||
{"Validate","検証"}.
|
||||
{"vCard User Search","vCard検索"}.
|
||||
{"View Queue","キューを表示"}.
|
||||
{"View Roster","名簿を表示"}.
|
||||
{"Virtual Hosts","バーチャルホスト"}.
|
||||
{"Visitors are not allowed to change their nicknames in this room","傍聴者はこのチャットルームでニックネームを変更することはできません"}.
|
||||
{"Visitors are not allowed to send messages to all occupants","傍聴者はすべての在室者にメッセージを送信することはできません"}.
|
||||
@@ -342,7 +425,11 @@
|
||||
{"Wednesday","水曜日"}.
|
||||
{"When to send the last published item","最後の公開アイテムを送信するタイミングで"}.
|
||||
{"Whether to allow subscriptions","購読を許可するかどうか"}.
|
||||
{"You have been banned from this room","あなたはこのチャットルームからバンされています"}.
|
||||
{"XMPP Account Registration","XMPP アカウント登録"}.
|
||||
{"XMPP Domains","XMPP ドメイン"}.
|
||||
{"You are being removed from the room because of a system shutdown","システムシャットダウンのためチャットルームから削除されました"}.
|
||||
{"You can later change your password using an XMPP client.","あなたは後で XMPP クライアントを使用してパスワードを変更できます。"}.
|
||||
{"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 をサポートするクライアントが必要です"}.
|
||||
@@ -350,3 +437,6 @@
|
||||
{"Your active privacy list has denied the routing of this stanza.","あなたのプライバシーリストはこのスタンザのルーティングを拒否しました。"}.
|
||||
{"Your contact offline message queue is full. The message has been discarded.","相手先のオフラインメッセージキューが一杯です。このメッセージは破棄されます。"}.
|
||||
{"Your subscription request and/or messages to ~s have been blocked. To unblock your subscription request, visit ~s","~s 宛のメッセージはブロックされています。解除するにはこちらを見てください ~s"}.
|
||||
{"Your XMPP account was successfully registered.","XMPP アカウントの登録に成功しました。"}.
|
||||
{"Your XMPP account was successfully unregistered.","XMPP アカウントの削除に成功しました。"}.
|
||||
{"You're not allowed to create nodes","ノードを作成する権限がありません"}.
|
||||
|
||||
+5
-1
@@ -1,4 +1,8 @@
|
||||
%% -*- coding: utf-8 -*-
|
||||
%% Generated automatically
|
||||
%% DO NOT EDIT: run `make translations` instead
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" has set the subject to: "," veranderde het onderwerp in: "}.
|
||||
{"A friendly name for the node","Bijnaam voor deze knoop"}.
|
||||
{"A password is required to enter this room","U hebt een wachtwoord nodig om deze chatruimte te kunnen betreden"}.
|
||||
|
||||
+5
-1
@@ -1,4 +1,8 @@
|
||||
%% -*- coding: utf-8 -*-
|
||||
%% Generated automatically
|
||||
%% DO NOT EDIT: run `make translations` instead
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" has set the subject to: "," har satt emnet til: "}.
|
||||
{"A friendly name for the node","Et vennlig navn for noden"}.
|
||||
{"A password is required to enter this room","Et passord kreves for tilgang til samtalerommet"}.
|
||||
|
||||
+5
-1
@@ -1,4 +1,8 @@
|
||||
%% -*- coding: utf-8 -*-
|
||||
%% Generated automatically
|
||||
%% DO NOT EDIT: run `make translations` instead
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" has set the subject to: "," zmienił temat na: "}.
|
||||
{"A friendly name for the node","Przyjazna nazwa węzła"}.
|
||||
{"A password is required to enter this room","Aby wejść do pokoju wymagane jest hasło"}.
|
||||
|
||||
+6
-1
@@ -1,4 +1,8 @@
|
||||
%% -*- coding: utf-8 -*-
|
||||
%% Generated automatically
|
||||
%% DO NOT EDIT: run `make translations` instead
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" (Add * to the end of field to match substring)"," (Adicione * no final do campo para combinar com a substring)"}.
|
||||
{" has set the subject to: "," mudou o assunto para: "}.
|
||||
{"# participants","# participantes"}.
|
||||
@@ -320,6 +324,7 @@
|
||||
{"Node index not found","O índice do nó não foi encontrado"}.
|
||||
{"Node not found","Nó não encontrado"}.
|
||||
{"Node ~p","Nó ~p"}.
|
||||
{"Node","Nó"}.
|
||||
{"Nodeprep has failed","Processo de identificação de nó falhou (nodeprep)"}.
|
||||
{"Nodes","Nós"}.
|
||||
{"None","Nenhum"}.
|
||||
|
||||
+5
-1
@@ -1,4 +1,8 @@
|
||||
%% -*- coding: utf-8 -*-
|
||||
%% Generated automatically
|
||||
%% DO NOT EDIT: run `make translations` instead
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" has set the subject to: "," colocou o tópico: "}.
|
||||
{"Access denied by service policy","Acesso negado pela política de serviço"}.
|
||||
{"Action on user","Acção no utilizador"}.
|
||||
|
||||
+5
-1
@@ -1,4 +1,8 @@
|
||||
%% -*- coding: utf-8 -*-
|
||||
%% Generated automatically
|
||||
%% DO NOT EDIT: run `make translations` instead
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" (Add * to the end of field to match substring)"," (Добавьте * в конец поля для поиска подстроки)"}.
|
||||
{" has set the subject to: "," установил(а) тему: "}.
|
||||
{"A friendly name for the node","Легко запоминаемое имя для узла"}.
|
||||
|
||||
+5
-1
@@ -1,4 +1,8 @@
|
||||
%% -*- coding: utf-8 -*-
|
||||
%% Generated automatically
|
||||
%% DO NOT EDIT: run `make translations` instead
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" has set the subject to: ","zmenil(a) tému na: "}.
|
||||
{"A friendly name for the node","Prístupný názov pre uzol"}.
|
||||
{"A password is required to enter this room","Pre vstup do miestnosti je potrebné heslo"}.
|
||||
|
||||
@@ -0,0 +1,383 @@
|
||||
%% Generated automatically
|
||||
%% DO NOT EDIT: run `make translations` instead
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" has set the subject to: "," ka caktuar si subjekt: "}.
|
||||
{"# participants","# pjesëmarrës"}.
|
||||
{"A description of the node","Përshkrim i nyjës"}.
|
||||
{"A friendly name for the node","Emër miqësor për nyjën"}.
|
||||
{"A password is required to enter this room","Lypset fjalëkalim për të hyrë në këtë dhomë"}.
|
||||
{"A Web Page","Faqe Web"}.
|
||||
{"Accept","Pranoje"}.
|
||||
{"Account doesn't exist","Llogaria s’ekziston"}.
|
||||
{"Add Jabber ID","Shtoni ID Jabber"}.
|
||||
{"Add New","Shtoni të Ri"}.
|
||||
{"Add User","Shtoni Përdorues"}.
|
||||
{"Administration of ","Administrim i "}.
|
||||
{"Administration","Administrim"}.
|
||||
{"Administrator privileges required","Lyp privilegje përgjegjësi"}.
|
||||
{"All activity","Krejt veprimtaria"}.
|
||||
{"All Users","Krejt Përdoruesit"}.
|
||||
{"Allow subscription","Lejo pajtim"}.
|
||||
{"Allow users to query other users","Lejojuni përdoruesve të kërkojnë për përdorues të tjerë"}.
|
||||
{"Allow users to send invites","Lejojuni përdoruesve të dërgojnë ftesa"}.
|
||||
{"Allow users to send private messages","Lejojuni përdoruesve të dërgojnë mesazhe private"}.
|
||||
{"Allow visitors to change nickname","Lejojuni përdoruesve të ndryshojnë nofkë"}.
|
||||
{"Allow visitors to send private messages to","Lejojuni përdoruesve të dërgojnë mesazhe private te"}.
|
||||
{"Announcements","Lajmërime"}.
|
||||
{"Answer to a question","Përgjigjuni një pyetje"}.
|
||||
{"Anyone may publish","Gjithkush mund të publikojë"}.
|
||||
{"Anyone with Voice","Cilido me Zë"}.
|
||||
{"Anyone","Cilido"}.
|
||||
{"April","Prill"}.
|
||||
{"Attribute 'channel' is required for this request","Atributi 'channel' është i domosdoshëm për këtë kërkesë"}.
|
||||
{"Attribute 'jid' is not allowed here","Atributi 'jid' s’lejohet këtu"}.
|
||||
{"Attribute 'node' is not allowed here","Atributi 'node' s’lejohet këtu"}.
|
||||
{"August","Gusht"}.
|
||||
{"Automatic node creation is not enabled","S’është aktivizuar krijimi automatik i nyjes"}.
|
||||
{"Backup Management","Administrim Kopjeruajtjesh"}.
|
||||
{"Backup of ~p","Kopjeruajtje e ~p"}.
|
||||
{"Backup to File at ","Kopjeruaje te Kartelë në "}.
|
||||
{"Backup","Kopjeruajtje"}.
|
||||
{"Bad format","Format i gabuar"}.
|
||||
{"Birthday","Datëlindje"}.
|
||||
{"Both the username and the resource are required","Janë të domosdoshëm të dy, emri i përdoruesit dhe burimi"}.
|
||||
{"Cannot remove active list","S’hiqet dot lista aktive"}.
|
||||
{"Cannot remove default list","S’hiqet dot lista parazgjedhje"}.
|
||||
{"CAPTCHA web page","Faqe web e CAPTCHA-s"}.
|
||||
{"Change Password","Ndryshoni Fjalëkalimin"}.
|
||||
{"Change User Password","Ndryshoni Fjalëkalim Përdoruesi"}.
|
||||
{"Changing password is not allowed","Nuk lejohet ndryshimi i fjalëkalimit"}.
|
||||
{"Changing role/affiliation is not allowed","Nuk lejohet ndryshim roli/përkatësie"}.
|
||||
{"Channel already exists","Kanali ekziston tashmë"}.
|
||||
{"Channel does not exist","Kanali s’ekziston"}.
|
||||
{"Channels","Kanale"}.
|
||||
{"Characters not allowed:","Shenja të palejuara:"}.
|
||||
{"Chatroom configuration modified","Ndryshoi formësimi i dhomës së fjalosjeve"}.
|
||||
{"Chatroom is created","Dhoma e fjalosjes u krijua"}.
|
||||
{"Chatroom is destroyed","Dhoma e fjalosjes u asgjësua"}.
|
||||
{"Chatroom is started","Dhoma e fjalosjes u nis"}.
|
||||
{"Chatroom is stopped","Dhoma e fjalosjes u ndal"}.
|
||||
{"Chatrooms","Dhoma fjalosjeje"}.
|
||||
{"Choose a username and password to register with this server","Zgjidhni një emër përdoruesi dhe fjalëkalim për ta regjistruar me këtë shërbyes"}.
|
||||
{"Choose storage type of tables","Zgjidhni lloj depozitimi tableash"}.
|
||||
{"City","Qytet"}.
|
||||
{"Commands","Urdhra"}.
|
||||
{"Conference room does not exist","Dhoma e konferencës s’ekziston"}.
|
||||
{"Configuration of room ~s","Formësim i dhomë ~s"}.
|
||||
{"Configuration","Formësim"}.
|
||||
{"Country","Vend"}.
|
||||
{"CPU Time:","Kohë CPU-je:"}.
|
||||
{"Current Discussion Topic","Tema e Tanishme e Diskutimit"}.
|
||||
{"Database failure","Dështim baze të dhënash"}.
|
||||
{"Database Tables at ~p","Tabela Baze të Dhënash te ~p"}.
|
||||
{"Database Tables Configuration at ","Formësim Tabelash Baze të Dhënash te "}.
|
||||
{"Database","Bazë të dhënash"}.
|
||||
{"December","Dhjetor"}.
|
||||
{"Delete content","Fshini lëndë"}.
|
||||
{"Delete message of the day","Fshini mesazhin e ditës"}.
|
||||
{"Delete Selected","Fshi të Përzgjedhurin"}.
|
||||
{"Delete table","Fshini tabelën"}.
|
||||
{"Delete User","Fshi Përdorues"}.
|
||||
{"Deliver event notifications","Dërgo njoftime aktesh"}.
|
||||
{"Description:","Përshkrim:"}.
|
||||
{"Disc only copy","Kopje vetëm në disk"}.
|
||||
{"Duplicated groups are not allowed by RFC6121","Grupe të përsëdytur s’lejohen nga RFC6121"}.
|
||||
{"Edit Properties","Përpunoni Veti"}.
|
||||
{"ejabberd","ejabberd"}.
|
||||
{"Elements","Elementë"}.
|
||||
{"Email Address","Adresë Email"}.
|
||||
{"Email","Email"}.
|
||||
{"Enable logging","Aktivizo regjistrim"}.
|
||||
{"Enable message archiving","Aktivizoni arkivim mesazhesh"}.
|
||||
{"Enter path to backup file","Jepni shteg për te kartelë kopjeruajtje"}.
|
||||
{"Enter path to text file","Jepni shteg për te kartelë tekst"}.
|
||||
{"Enter the text you see","Jepni tekstin që shihni"}.
|
||||
{"Error","Gabim"}.
|
||||
{"External component failure","Dështim përbërësi të jashtëm"}.
|
||||
{"External component timeout","Mbarim kohe për përbërës të jashtëm"}.
|
||||
{"Failed to parse HTTP response","S’u arrit të përtypet përgjigje HTTP"}.
|
||||
{"Failed to process option '~s'","S’u arrit të përpunohej mundësia '~s'"}.
|
||||
{"Family Name","Mbiemër"}.
|
||||
{"FAQ Entry","Zë PBR-sh"}.
|
||||
{"February","Shkurt"}.
|
||||
{"File larger than ~w bytes","Kartelë më e madhe se ~w bajte"}.
|
||||
{"Fill in the form to search for any matching XMPP User","Plotësoni formularin që të kërkohet për çfarëdo përdoruesi XMPP me përputhje"}.
|
||||
{"Friday","E premte"}.
|
||||
{"From ~ts","Nga ~ts"}.
|
||||
{"From","Nga"}.
|
||||
{"Full List of Room Admins","Listë e Plotë Përgjegjësish Dhome"}.
|
||||
{"Full List of Room Owners","Listë e Plotë të Zotësh Dhome"}.
|
||||
{"Full Name","Emër i Plotë"}.
|
||||
{"Get Number of Online Users","Merr Numër Përdoruesish Në Linjë"}.
|
||||
{"Get Number of Registered Users","Merr Numër Përdoruesish të Regjistruar"}.
|
||||
{"Get User Password","Merr Fjalëkalim Përdoruesi"}.
|
||||
{"Get User Statistics","Merr Statistika Përdoruesi"}.
|
||||
{"Given Name","Emër"}.
|
||||
{"Grant voice to this person?","T’i akordohet zë këtij personi?"}.
|
||||
{"Group","Grup"}.
|
||||
{"Groups that will be displayed to the members","Grupe që do t’u shfaqen anëtarëve"}.
|
||||
{"Groups","Grupe"}.
|
||||
{"has been banned","është dëbuar"}.
|
||||
{"has been kicked","është përzënë"}.
|
||||
{"Host unknown","Strehë e panjohur"}.
|
||||
{"Host","Strehë"}.
|
||||
{"HTTP File Upload","Ngarkim Kartelash HTTP"}.
|
||||
{"Idle connection","Lidhje e plogësht"}.
|
||||
{"Import Directory","Importoni Drejtori"}.
|
||||
{"Import File","Importoni Kartelë"}.
|
||||
{"Import User from File at ","Importo Përdorues prej Kartele te "}.
|
||||
{"Import Users from Dir at ","Importo Përdorues nga Drejtori te "}.
|
||||
{"Improper message type","Lloj i pasaktë mesazhesh"}.
|
||||
{"Incoming s2s Connections:","Lidhje s2s Ardhëse:"}.
|
||||
{"Incorrect CAPTCHA submit","Parashtim Captcha-je të pasaktë"}.
|
||||
{"Incorrect password","Fjalëkalim i pasaktë"}.
|
||||
{"Incorrect value of 'action' attribute","Vlerë e pavlefshme atributi 'action'"}.
|
||||
{"Insufficient privilege","Privilegj i pamjaftueshëm"}.
|
||||
{"Internal server error","Gabim i brendshëm shërbyesi"}.
|
||||
{"Invalid node name","Emër i pavlefshëm nyjeje"}.
|
||||
{"Invalid 'previd' value","Vlerë e pavlefshme 'previd'"}.
|
||||
{"Invitations are not allowed in this conference","Në këtë konferencë nuk lejohen ftesa"}.
|
||||
{"IP addresses","Adresa IP"}.
|
||||
{"is now known as","tani njihet si"}.
|
||||
{"It is not allowed to send private messages to the conference","Nuk lejohet të dërgohen mesazhe private te konferenca"}.
|
||||
{"It is not allowed to send private messages","Nuk lejohet të dërgohen mesazhe private"}.
|
||||
{"Jabber ID","ID Jabber"}.
|
||||
{"January","Janar"}.
|
||||
{"JID normalization failed","Normalizimi JID dështoi"}.
|
||||
{"joins the room","hyn te dhoma"}.
|
||||
{"July","Korrik"}.
|
||||
{"June","Qershor"}.
|
||||
{"Just created","Të sapokrijuara"}.
|
||||
{"Label:","Etiketë:"}.
|
||||
{"Last Activity","Veprimtaria e Fundit"}.
|
||||
{"Last login","Hyrja e fundit"}.
|
||||
{"Last message","Mesazhi i fundit"}.
|
||||
{"Last month","Muaji i fundit"}.
|
||||
{"Last year","Viti i shkuar"}.
|
||||
{"leaves the room","del nga dhoma"}.
|
||||
{"List of rooms","Listë dhomash"}.
|
||||
{"Logging","Regjistrim"}.
|
||||
{"Make participants list public","Bëje publike listën e pjesëmarrësve"}.
|
||||
{"Make room CAPTCHA protected","Bëje dhomën të mbrojtur me CAPTCHA"}.
|
||||
{"Make room members-only","Bëje dhomën vetëm për anëtarët"}.
|
||||
{"Make room moderated","Bëje dhomën të moderuar"}.
|
||||
{"Make room password protected","Bëje dhomën të mbrojtur me fjalëkalim"}.
|
||||
{"Make room persistent","Bëje dhomën të qëndrueshme"}.
|
||||
{"Make room public searchable","Bëje dhomën të kërkueshme publikisht"}.
|
||||
{"Malformed username","Faqerojtës i keqformuar"}.
|
||||
{"March","Mars"}.
|
||||
{"Max payload size in bytes","Madhësi maksimum ngarkese në bajte"}.
|
||||
{"Maximum file size","Madhësi maksimum kartelash"}.
|
||||
{"Maximum Number of Occupants","Numër Maksimum të Pranishmish"}.
|
||||
{"May","Maj"}.
|
||||
{"Members not added (inexistent vhost!): ","S’u shtuan anëtarë (vhost joekzistuese!): "}.
|
||||
{"Members:","Anëtarë:"}.
|
||||
{"Membership is required to enter this room","Lypset anëtarësim për të hyrë në këtë dhomë"}.
|
||||
{"Memory","Kujtesë"}.
|
||||
{"Message body","Lëndë mesazhi"}.
|
||||
{"Messages from strangers are rejected","Mesazhet prej të panjohurish hidhen tej"}.
|
||||
{"Messages of type headline","Mesazhe të llojit titull"}.
|
||||
{"Messages of type normal","Mesazhe të llojit normal"}.
|
||||
{"Middle Name","Emër i Dytë"}.
|
||||
{"Moderator privileges required","Lypset privilegj moderatori"}.
|
||||
{"Moderator","Moderator"}.
|
||||
{"Moderators Only","Vetëm Moderatorët"}.
|
||||
{"Module failed to handle the query","Moduli s’arrii të trajtonte kërkesën"}.
|
||||
{"Monday","E hënë"}.
|
||||
{"Multicast","Multikast"}.
|
||||
{"Multi-User Chat","Fjalosje Me Shumë Përdorues Njëherësh"}.
|
||||
{"Name","Emër"}.
|
||||
{"Name:","Emër:"}.
|
||||
{"Natural-Language Room Name","Emër Dhome Në Gjuhë Natyrale"}.
|
||||
{"Never","Kurrë"}.
|
||||
{"New Password:","Fjalëkalim i Ri:"}.
|
||||
{"Nickname can't be empty","Nofka s’mund të jetë e zbrazët"}.
|
||||
{"Nickname Registration at ","Regjistrim Nofke te "}.
|
||||
{"Nickname ~s does not exist in the room","Në këtë dhomë s’ekziston nofka ~s"}.
|
||||
{"Nickname","Nofkë"}.
|
||||
{"No address elements found","S’u gjetën elementë adrese"}.
|
||||
{"No addresses element found","S’u gjetën elementë adresash"}.
|
||||
{"No child elements found","S’u gjetën elementë pjella"}.
|
||||
{"No Data","S’ka të Dhëna"}.
|
||||
{"No items found in this query","S’u gjetën objekte në këtë kërkesë"}.
|
||||
{"No limit","Pa kufi"}.
|
||||
{"No node specified","S’u përcaktua nyjë"}.
|
||||
{"No pending subscriptions found","S’u gjetën pajtime pezull"}.
|
||||
{"No privacy list with this name found","S’u gjet listë privatësie me atë emër"}.
|
||||
{"No running node found","S’u gjet nyjë në funksionim"}.
|
||||
{"No services available","S’ka shërbime të gatshme"}.
|
||||
{"No statistics found for this item","S’u gjetën statistika për këtë objekt"}.
|
||||
{"Nobody","Askush"}.
|
||||
{"Node already exists","Nyja ekziston tashmë"}.
|
||||
{"Node ID","ID Nyjeje"}.
|
||||
{"Node index not found","S’u gjet tregues nyje"}.
|
||||
{"Node not found","S’u gjet nyjë"}.
|
||||
{"Node ~p","Nyjë ~p"}.
|
||||
{"Nodes","Nyja"}.
|
||||
{"None","Asnjë"}.
|
||||
{"Not allowed","E palejuar"}.
|
||||
{"Not Found","S’u Gjet"}.
|
||||
{"Not subscribed","Jo i pajtuar"}.
|
||||
{"November","Nëntor"}.
|
||||
{"Number of answers required","Numër përgjigjesh të domosdoshme"}.
|
||||
{"Number of occupants","Numër të pranishmish"}.
|
||||
{"Number of Offline Messages","Numër Mesazhesh Jo Në Linjë"}.
|
||||
{"Number of online users","Numër përdoruesish në linjë"}.
|
||||
{"Number of registered users","Numër përdoruesish të regjistruar"}.
|
||||
{"Occupants are allowed to invite others","Të pranishmëve u është lejuar të ftojnë të tjerë"}.
|
||||
{"Occupants May Change the Subject","Të pranishmit Mund të Ndryshojnë Subjektin"}.
|
||||
{"October","Tetor"}.
|
||||
{"Offline Messages","Mesazhe Jo Në Linjë"}.
|
||||
{"Offline Messages:","Mesazhe Jo Në Linjë:"}.
|
||||
{"OK","OK"}.
|
||||
{"Old Password:","Fjalëkalimi i Vjetër:"}.
|
||||
{"Online Users","Përdorues Në Linjë"}.
|
||||
{"Online Users:","Përdorues Në Linjë:"}.
|
||||
{"Online","Në linjë"}.
|
||||
{"Only admins can see this","Këtë mund ta shohin vetëm përgjegjësit"}.
|
||||
{"Only deliver notifications to available users","Dorëzo njoftime vetëm te përdoruesit e pranishëm"}.
|
||||
{"Only occupants are allowed to send messages to the conference","Vetëm të pranishmëve u lejohet të dërgojnë mesazhe te konferenca"}.
|
||||
{"Only publishers may publish","Vetëm botuesit mund të botojnë"}.
|
||||
{"Organization Name","Emër Enti"}.
|
||||
{"Organization Unit","Njësi Organizative"}.
|
||||
{"Outgoing s2s Connections","Lidhje s2s Ikëse"}.
|
||||
{"Outgoing s2s Connections:","Lidhje s2s Ikëse:"}.
|
||||
{"Owner privileges required","Lypset privilegje të zoti"}.
|
||||
{"Packet","Paketë"}.
|
||||
{"Participant","Pjesëmarrës"}.
|
||||
{"Password Verification","Verifikim Fjalëkalimi"}.
|
||||
{"Password Verification:","Verifikim Fjalëkalimi:"}.
|
||||
{"Password","Fjalëkalim"}.
|
||||
{"Password:","Fjalëkalim:"}.
|
||||
{"Path to Dir","Shteg për te Drejtori"}.
|
||||
{"Path to File","Shteg për te Kartelë"}.
|
||||
{"Payload type","Lloj ngarkese"}.
|
||||
{"Pending","Pezull"}.
|
||||
{"Period: ","Periudhë: "}.
|
||||
{"Ping","Ping"}.
|
||||
{"Pong","Pong"}.
|
||||
{"Previous session not found","S’u gjet sesion i mëparshëm"}.
|
||||
{"Previous session PID is dead","PID e sesionit të mëparshëm është e asgjësuar"}.
|
||||
{"Previous session timed out","Sesionit të mëparshëm i mbaroi koha"}.
|
||||
{"private, ","private, "}.
|
||||
{"RAM and disc copy","RAM dhe kopje në disk"}.
|
||||
{"RAM copy","Kopje në RAM"}.
|
||||
{"Really delete message of the day?","Të fshihet vërtet mesazhi i ditës?"}.
|
||||
{"Recipient is not in the conference room","Pjesëmarrësi s’është në dhomën e konferencës"}.
|
||||
{"Register an XMPP account","Regjistroni një llogari XMPP"}.
|
||||
{"Registered Users","Përdorues të Regjistruar"}.
|
||||
{"Registered Users:","Përdorues të Regjistruar:"}.
|
||||
{"Register","Regjistrohuni"}.
|
||||
{"Remote copy","Kopje e largët"}.
|
||||
{"Remove All Offline Messages","Hiq Krejt Mesazhet Jo Në Linjë"}.
|
||||
{"Remove User","Hiqeni Përdoruesin"}.
|
||||
{"Remove","Hiqe"}.
|
||||
{"Replaced by new connection","Zëvendësuar nga lidhje e re"}.
|
||||
{"Request has timed out","Kërkesës i mbaroi koha"}.
|
||||
{"Request is ignored","Kërkesa u shpërfill"}.
|
||||
{"Requested role","Rol i domosdoshëm"}.
|
||||
{"Resources","Burime"}.
|
||||
{"Restart Service","Rinise Shërbimin"}.
|
||||
{"Restart","Rinise"}.
|
||||
{"Restore","Riktheje"}.
|
||||
{"Roles that May Send Private Messages","Role që Mund të Dërgojnë Mesazhe Private"}.
|
||||
{"Room Configuration","Formësim Dhome"}.
|
||||
{"Room description","Përshkrim i dhomës"}.
|
||||
{"Room Occupants","Të pranishëm Në Dhomë"}.
|
||||
{"Room title","Titull dhome"}.
|
||||
{"RPC Call Error","Gabim Thirrjeje RPC"}.
|
||||
{"Running Nodes","Nyje Në Punë"}.
|
||||
{"Saturday","E shtunë"}.
|
||||
{"Search from the date","Kërko nga data"}.
|
||||
{"Search Results for ","Përfundime Kërkimi për "}.
|
||||
{"Search the text","Kërkoni për tekst"}.
|
||||
{"Search until the date","Kërko deri më datën"}.
|
||||
{"Search users in ","Kërko përdorues te "}.
|
||||
{"Select All","Përzgjidheni Krejt"}.
|
||||
{"Send announcement to all users","Dërgo njoftim krejt përdoruesve"}.
|
||||
{"September","Shtator"}.
|
||||
{"Server:","Shërbyes:"}.
|
||||
{"Show Integral Table","Shfaq Tabelë të Plotë"}.
|
||||
{"Show Ordinary Table","Shfaq Tabelë të Rëndomtë"}.
|
||||
{"Shut Down Service","Fike Shërbimin"}.
|
||||
{"Specify the access model","Specifikoni model hyrjeje"}.
|
||||
{"Specify the event message type","Përcaktoni llojin e mesazhit për aktin"}.
|
||||
{"Specify the publisher model","Përcaktoni model botuesi"}.
|
||||
{"Statistics of ~p","Statistika për ~p"}.
|
||||
{"Statistics","Statistika"}.
|
||||
{"Stop","Ndale"}.
|
||||
{"Stopped Nodes","Nyja të Ndalura"}.
|
||||
{"Storage Type","Lloj Depozitimi"}.
|
||||
{"Subject","Subjekti"}.
|
||||
{"Submit","Parashtrojeni"}.
|
||||
{"Submitted","Parashtruar"}.
|
||||
{"Subscriber Address","Adresë e Pajtimtarit"}.
|
||||
{"Subscription","Pajtim"}.
|
||||
{"Sunday","E diel"}.
|
||||
{"The account already exists","Ka tashmë një llogari të tillë"}.
|
||||
{"The account was not unregistered","Llogaria s’qe çregjistruar"}.
|
||||
{"The CAPTCHA is valid.","Kaptça është e vlefshme."}.
|
||||
{"The default language of the node","Gjuha parazgjedhje e nyjës"}.
|
||||
{"The feature requested is not supported by the conference","Veçoria e kërkuar nuk mbulohen nga konferenca"}.
|
||||
{"The JID of the node creator","JID i krijjuesit të nyjës"}.
|
||||
{"The name of the node","Emri i nyjës"}.
|
||||
{"The number of subscribers to the node","Numri i pajtimtarëve te nyja"}.
|
||||
{"The number of unread or undelivered messages","Numri i mesazheve të palexuar ose të padorëzuar"}.
|
||||
{"The password is too weak","Fjalëkalimi është shumë i dobët"}.
|
||||
{"the password is","fjalëkalimi është"}.
|
||||
{"The password of your XMPP account was successfully changed.","Fjalëkalimi i llogarisë tuaj XMPP u ndryshua me sukses."}.
|
||||
{"The password was not changed","Fjalëkalimi s’u ndryshua"}.
|
||||
{"The passwords are different","Fjalëkalimet janë të ndryshëm"}.
|
||||
{"The sender of the last received message","Dërguesi i mesazhit të fundit të marrë"}.
|
||||
{"The username is not valid","Emri i përdoruesit s’është i vlefshëm"}.
|
||||
{"There was an error changing the password: ","Pati një gabim në ndryshimin e fjalëkalimit: "}.
|
||||
{"There was an error creating the account: ","Pati një gabim në krijimin e llogarisë: "}.
|
||||
{"This room is not anonymous","Kjo dhomë s’është anonime"}.
|
||||
{"Thursday","E enjte"}.
|
||||
{"Time delay","Vonesë kohore"}.
|
||||
{"Time","Kohë"}.
|
||||
{"Too many CAPTCHA requests","Shumë kërkesa ndaj CAPTCHA-s"}.
|
||||
{"Too many child elements","Shumë elementë pjella"}.
|
||||
{"Too many <item/> elements","Shumë elementë <item/>"}.
|
||||
{"Too many <list/> elements","Shumë elementë <list/>"}.
|
||||
{"Too many users in this conference","Shumë përdorues në këtë konferencë"}.
|
||||
{"Total rooms","Dhoma gjithsej"}.
|
||||
{"Tuesday","E martë"}.
|
||||
{"Unable to generate a CAPTCHA","S’arrihet të prodhohet një CAPTCHA"}.
|
||||
{"Unauthorized","E paautorizuar"}.
|
||||
{"Unexpected action","Veprim i papritur"}.
|
||||
{"Unregister an XMPP account","Çregjistroni një llogari XMPP"}.
|
||||
{"Unregister","Çregjistrohuni"}.
|
||||
{"Unselect All","Shpërzgjidhi Krejt"}.
|
||||
{"Unsupported version","Version i pambuluar"}.
|
||||
{"Update","Përditësoje"}.
|
||||
{"Uptime:","Kohëpunim:"}.
|
||||
{"User already exists","Ka tashmë një përdorues të tillë"}.
|
||||
{"User JID","JID përdoruesi"}.
|
||||
{"User (jid)","Përdorues (jid)"}.
|
||||
{"User Management","Administrim Përdoruesish"}.
|
||||
{"User removed","Përdoruesi u hoq"}.
|
||||
{"User session not found","S’u gjet sesion përdoruesi"}.
|
||||
{"User session terminated","Sesioni i përdoruesit përfundoi"}.
|
||||
{"Username:","Emër përdoruesi:"}.
|
||||
{"User","Përdorues"}.
|
||||
{"Users Last Activity","Veprimtaria e Fundit Nga Përdorues"}.
|
||||
{"Users","Përdorues"}.
|
||||
{"Validate","Vleftësoje"}.
|
||||
{"View Queue","Shihni Radhën"}.
|
||||
{"Virtual Hosts","Streha Virtuale"}.
|
||||
{"Visitor","Vizitor"}.
|
||||
{"Wednesday","E mërkurë"}.
|
||||
{"When a new subscription is processed","Kur përpunohet një pajtim i ri"}.
|
||||
{"Whether to allow subscriptions","Nëse duhen lejuar apo jo pajtime"}.
|
||||
{"Wrong parameters in the web formulary","Parametër i gabuar në formular web"}.
|
||||
{"XMPP Account Registration","Regjistrim Llogarish XMPP"}.
|
||||
{"XMPP Domains","Përkatësi XMPP"}.
|
||||
{"You are not joined to the channel","S’keni hyrë te kanali"}.
|
||||
{"You have been banned from this room","Jeni dëbuar prej kësaj dhome"}.
|
||||
{"You have joined too many conferences","Keni hyrë në shumë konferenca"}.
|
||||
{"Your XMPP account was successfully registered.","Llogaria juaj XMPP u regjistrua me sukses."}.
|
||||
{"Your XMPP account was successfully unregistered.","Llogaria juaj XMPP u çregjistrua me sukses."}.
|
||||
{"You're not allowed to create nodes","S’keni leje të krijoni nyja"}.
|
||||
+5
-1
@@ -1,4 +1,8 @@
|
||||
%% -*- coding: utf-8 -*-
|
||||
%% Generated automatically
|
||||
%% DO NOT EDIT: run `make translations` instead
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" has set the subject to: "," har satt ämnet till: "}.
|
||||
{"A friendly name for the node","Ett vänligt namn for noden"}.
|
||||
{"Access denied by service policy","Åtkomst nekad enligt lokal policy"}.
|
||||
|
||||
+5
-1
@@ -1,4 +1,8 @@
|
||||
%% -*- coding: utf-8 -*-
|
||||
%% Generated automatically
|
||||
%% DO NOT EDIT: run `make translations` instead
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" has set the subject to: "," ตั้งหัวข้อว่า: "}.
|
||||
{"Access denied by service policy","การเข้าถึงถูกปฏิเสธโดยนโยบายการบริการ"}.
|
||||
{"Action on user","การดำเนินการกับผู้ใช้"}.
|
||||
|
||||
+5
-1
@@ -1,4 +1,8 @@
|
||||
%% -*- coding: utf-8 -*-
|
||||
%% Generated automatically
|
||||
%% DO NOT EDIT: run `make translations` instead
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" has set the subject to: "," konuyu değiştirdi: "}.
|
||||
{"A friendly name for the node","Düğüm için dostane bir isim"}.
|
||||
{"A password is required to enter this room","Bu odaya girmek için parola gerekiyor"}.
|
||||
|
||||
+5
-1
@@ -1,4 +1,8 @@
|
||||
%% -*- coding: utf-8 -*-
|
||||
%% Generated automatically
|
||||
%% DO NOT EDIT: run `make translations` instead
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" has set the subject to: "," встановив(ла) тему: "}.
|
||||
{"A friendly name for the node","Псевдонім для вузла"}.
|
||||
{"A password is required to enter this room","Щоб зайти в цю конференцію, необхідно ввести пароль"}.
|
||||
|
||||
+5
-1
@@ -1,4 +1,8 @@
|
||||
%% -*- coding: utf-8 -*-
|
||||
%% Generated automatically
|
||||
%% DO NOT EDIT: run `make translations` instead
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" has set the subject to: "," đã đặt chủ đề thành: "}.
|
||||
{"Access denied by service policy","Sự truy cập bị chặn theo chính sách phục vụ"}.
|
||||
{"Action on user","Hành động đối với người sử dụng"}.
|
||||
|
||||
+5
-1
@@ -1,4 +1,8 @@
|
||||
%% -*- coding: utf-8 -*-
|
||||
%% Generated automatically
|
||||
%% DO NOT EDIT: run `make translations` instead
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" has set the subject to: "," a candjî l' tite a: "}.
|
||||
{"A friendly name for the node","On no uzeu-ahessåve pol nuk"}.
|
||||
{"A password is required to enter this room","I fåt dner on scret po poleur intrer dins cisse såle ci"}.
|
||||
|
||||
+5
-1
@@ -1,4 +1,8 @@
|
||||
%% -*- coding: utf-8 -*-
|
||||
%% Generated automatically
|
||||
%% DO NOT EDIT: run `make translations` instead
|
||||
%% To improve translations please read:
|
||||
%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/
|
||||
|
||||
{" (Add * to the end of field to match substring)"," (在字段末添加*来匹配子串)"}.
|
||||
{" has set the subject to: ","已将标题设置为: "}.
|
||||
{"# participants","# 个参与人"}.
|
||||
|
||||
+21
-22
@@ -19,8 +19,8 @@
|
||||
%%%----------------------------------------------------------------------
|
||||
|
||||
{deps, [{base64url, ".*", {git, "https://github.com/dvv/base64url", {tag, "1.0.1"}}},
|
||||
{cache_tab, ".*", {git, "https://github.com/processone/cache_tab", {tag, "1.0.27"}}},
|
||||
{eimp, ".*", {git, "https://github.com/processone/eimp", {tag, "1.0.19"}}},
|
||||
{cache_tab, ".*", {git, "https://github.com/processone/cache_tab", {tag, "1.0.28"}}},
|
||||
{eimp, ".*", {git, "https://github.com/processone/eimp", {tag, "1.0.20"}}},
|
||||
{if_var_true, tools,
|
||||
{ejabberd_po, ".*", {git, "https://github.com/processone/ejabberd-po", {branch, "main"}}}},
|
||||
{if_var_true, elixir,
|
||||
@@ -30,37 +30,37 @@
|
||||
{if_var_true, redis,
|
||||
{eredis, ".*", {git, "https://github.com/wooga/eredis", {tag, "v1.0.8"}}}},
|
||||
{if_var_true, sip,
|
||||
{esip, ".*", {git, "https://github.com/processone/esip", {tag, "1.0.41"}}}},
|
||||
{esip, ".*", {git, "https://github.com/processone/esip", {tag, "1.0.42"}}}},
|
||||
{if_var_true, zlib,
|
||||
{ezlib, ".*", {git, "https://github.com/processone/ezlib", {tag, "1.0.9"}}}},
|
||||
{fast_tls, ".*", {git, "https://github.com/processone/fast_tls", {tag, "1.1.11"}}},
|
||||
{fast_xml, ".*", {git, "https://github.com/processone/fast_xml", {tag, "1.1.45"}}},
|
||||
{fast_yaml, ".*", {git, "https://github.com/processone/fast_yaml", {tag, "1.0.30"}}},
|
||||
{fast_tls, ".*", {git, "https://github.com/processone/fast_tls", {tag, "1.1.12"}}},
|
||||
{fast_xml, ".*", {git, "https://github.com/processone/fast_xml", {tag, "1.1.46"}}},
|
||||
{fast_yaml, ".*", {git, "https://github.com/processone/fast_yaml", {tag, "1.0.31"}}},
|
||||
{idna, ".*", {git, "https://github.com/benoitc/erlang-idna", {tag, "6.0.0"}}},
|
||||
{jiffy, ".*", {git, "https://github.com/davisp/jiffy", {tag, "1.0.5"}}},
|
||||
{jose, ".*", {git, "https://github.com/potatosalad/erlang-jose", {tag, "1.9.0"}}},
|
||||
{lager, ".*", {git, "https://github.com/erlang-lager/lager", {tag, "3.6.10"}}},
|
||||
{if_var_true, tools,
|
||||
{if_var_true, lua,
|
||||
{luerl, ".*", {git, "https://github.com/rvirding/luerl", {tag, "v0.3"}}}},
|
||||
{mqtree, ".*", {git, "https://github.com/processone/mqtree", {tag, "1.0.12"}}},
|
||||
{p1_acme, ".*", {git, "https://github.com/processone/p1_acme", {tag, "1.0.11"}}},
|
||||
{mqtree, ".*", {git, "https://github.com/processone/mqtree", {tag, "1.0.13"}}},
|
||||
{p1_acme, ".*", {git, "https://github.com/processone/p1_acme", {tag, "1.0.12"}}},
|
||||
{if_var_true, mysql,
|
||||
{p1_mysql, ".*", {git, "https://github.com/processone/p1_mysql", {tag, "1.0.17"}}}},
|
||||
{p1_oauth2, ".*", {git, "https://github.com/processone/p1_oauth2", {tag, "0.6.8"}}},
|
||||
{p1_mysql, ".*", {git, "https://github.com/processone/p1_mysql", {tag, "1.0.18"}}}},
|
||||
{p1_oauth2, ".*", {git, "https://github.com/processone/p1_oauth2", {tag, "0.6.9"}}},
|
||||
{if_var_true, pgsql,
|
||||
{p1_pgsql, ".*", {git, "https://github.com/processone/p1_pgsql", {tag, "1.1.10"}}}},
|
||||
{p1_utils, ".*", {git, "https://github.com/processone/p1_utils", {tag, "1.0.21"}}},
|
||||
{p1_pgsql, ".*", {git, "https://github.com/processone/p1_pgsql", {tag, "1.1.11"}}}},
|
||||
{p1_utils, ".*", {git, "https://github.com/processone/p1_utils", {tag, "1.0.22"}}},
|
||||
{pkix, ".*", {git, "https://github.com/processone/pkix", {tag, "1.0.7"}}},
|
||||
{if_not_rebar3, %% Needed because modules are not fully migrated to new structure and mix
|
||||
{if_var_true, elixir,
|
||||
{rebar_elixir_plugin, ".*", {git, "https://github.com/processone/rebar_elixir_plugin", "0.1.0"}}}},
|
||||
{if_var_true, sqlite,
|
||||
{sqlite3, ".*", {git, "https://github.com/processone/erlang-sqlite3", {tag, "1.1.11"}}}},
|
||||
{stringprep, ".*", {git, "https://github.com/processone/stringprep", {tag, "1.0.24"}}},
|
||||
{sqlite3, ".*", {git, "https://github.com/processone/erlang-sqlite3", {tag, "1.1.12"}}}},
|
||||
{stringprep, ".*", {git, "https://github.com/processone/stringprep", {tag, "1.0.25"}}},
|
||||
{if_var_true, stun,
|
||||
{stun, ".*", {git, "https://github.com/processone/stun", {tag, "1.0.42"}}}},
|
||||
{xmpp, ".*", {git, "https://github.com/processone/xmpp", {tag, "1.5.2"}}},
|
||||
{yconf, ".*", {git, "https://github.com/processone/yconf", {tag, "1.0.10"}}}
|
||||
{stun, ".*", {git, "https://github.com/processone/stun", {tag, "1.0.43"}}}},
|
||||
{xmpp, ".*", {git, "https://github.com/processone/xmpp", {tag, "1.5.3"}}},
|
||||
{yconf, ".*", {git, "https://github.com/processone/yconf", {tag, "1.0.11"}}}
|
||||
]}.
|
||||
|
||||
{gitonly_deps, [elixir, luerl]}.
|
||||
@@ -96,25 +96,24 @@
|
||||
{if_version_above, "20", {d, 'DEPRECATED_GET_STACKTRACE'}},
|
||||
{if_version_below, "21", {d, 'USE_OLD_HTTP_URI'}},
|
||||
{if_version_below, "22", {d, 'LAGER'}},
|
||||
{if_version_below, "21", {d, 'NO_CUSTOMIZE_HOSTNAME_CHECK'}},
|
||||
{if_version_below, "23", {d, 'USE_OLD_CRYPTO_HMAC'}},
|
||||
{if_version_below, "23", {d, 'USE_OLD_PG2'}},
|
||||
{if_version_below, "24", {d, 'COMPILER_REPORTS_ONLY_LINES'}},
|
||||
{if_var_match, db_type, mssql, {d, 'mssql'}},
|
||||
{if_var_false, debug, no_debug_info},
|
||||
{if_var_true, debug, debug_info},
|
||||
{if_var_true, elixir, {d, 'ELIXIR_ENABLED'}},
|
||||
{if_var_true, hipe, native},
|
||||
{if_var_true, new_sql_schema, {d, 'NEW_SQL_SCHEMA'}},
|
||||
{if_var_true, roster_gateway_workaround, {d, 'ROSTER_GATWAY_WORKAROUND'}},
|
||||
{if_var_true, sip, {d, 'SIP'}},
|
||||
{if_var_true, stun, {d, 'STUN'}},
|
||||
{if_have_fun, {erl_error, format_exception, 6}, {d, 'HAVE_ERL_ERROR'}},
|
||||
{if_rebar3, {extra_src_dirs, [sql]}},
|
||||
{src_dirs, [src,
|
||||
{if_rebar3, sql},
|
||||
{if_var_true, tools, tools},
|
||||
{if_var_true, elixir, include}]}]}.
|
||||
|
||||
{deps_erl_opts, [{if_var_true, hipe, native}]}.
|
||||
|
||||
{if_rebar3, {plugins, [rebar3_hex, {provider_asn1, "0.2.0"}]}}.
|
||||
{if_rebar3, {project_plugins, [configure_deps]}}.
|
||||
{if_not_rebar3, {plugins, [
|
||||
|
||||
+3
-3
@@ -341,13 +341,13 @@ end,
|
||||
|
||||
TravisPostHooks =
|
||||
fun(true) ->
|
||||
[{eunit, "echo '\n%%! -pa .eunit/ deps/coveralls/ebin\n" ++
|
||||
[{ct, "echo '\n%%! -pa ebin/ deps/coveralls/ebin\n" ++
|
||||
"main(_)->{ok,F}=file:open(\"erlang.json\",[write])," ++
|
||||
"io:fwrite(F,\"~s\",[coveralls:convert_file(" ++
|
||||
"\".eunit/cover.coverdata\", \"" ++
|
||||
"\"logs/all.coverdata\", \"" ++
|
||||
os:getenv("TRAVIS_JOB_ID") ++
|
||||
"\", \"travis-ci\",\"\")]).' > getcover.erl"},
|
||||
{eunit, "escript ./getcover.erl"}];
|
||||
{ct, "escript ./getcover.erl"}];
|
||||
(_) ->
|
||||
[]
|
||||
end,
|
||||
|
||||
+2
-2
@@ -430,7 +430,7 @@ CREATE TABLE push_session (
|
||||
node text NOT NULL,
|
||||
xml text NOT NULL,
|
||||
PRIMARY KEY (server_host(191), username(191), timestamp)
|
||||
);
|
||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE UNIQUE INDEX i_push_session_susn ON push_session (server_host(191), username(191), service(191), node(191));
|
||||
|
||||
@@ -502,4 +502,4 @@ CREATE TABLE mqtt_pub (
|
||||
user_properties blob NOT NULL,
|
||||
expiry int unsigned NOT NULL,
|
||||
UNIQUE KEY i_mqtt_topic_server (topic(191), server_host)
|
||||
);
|
||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
+2
-2
@@ -398,7 +398,7 @@ CREATE TABLE push_session (
|
||||
service text NOT NULL,
|
||||
node text NOT NULL,
|
||||
xml text NOT NULL
|
||||
);
|
||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
CREATE UNIQUE INDEX i_push_usn ON push_session (username(191), service(191), node(191));
|
||||
CREATE UNIQUE INDEX i_push_ut ON push_session (username(191), timestamp);
|
||||
@@ -469,4 +469,4 @@ CREATE TABLE mqtt_pub (
|
||||
user_properties blob NOT NULL,
|
||||
expiry int unsigned NOT NULL,
|
||||
UNIQUE KEY i_mqtt_topic (topic(191))
|
||||
);
|
||||
) ENGINE=InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
%% $Id$
|
||||
|
||||
{application, ejabberd,
|
||||
[{description, "@PACKAGE_NAME@"},
|
||||
{vsn, "@PACKAGE_VERSION@"},
|
||||
{modules, []},
|
||||
{registered, []},
|
||||
{applications, [kernel, stdlib, sasl, ssl]},
|
||||
{included_applications, [os_mon, lager, mnesia, inets, p1_utils, fast_yaml, fast_tls, pkix, xmpp, cache_tab, eimp]},
|
||||
{env, [{enabled_backends, [@enabled_backends@]}]},
|
||||
{mod, {ejabberd_app, []}}]}.
|
||||
|
||||
|
||||
%% Local Variables:
|
||||
%% mode: erlang
|
||||
%% End:
|
||||
%% vim: set filetype=erlang tabstop=8:
|
||||
@@ -0,0 +1,33 @@
|
||||
Vars = case file:consult(filename:join([filename:dirname(SCRIPT), "..", "vars.config"])) of
|
||||
{ok, Terms} ->
|
||||
Backends = [mssql, mysql, odbc, pgsql, redis, sqlite],
|
||||
EBs = lists:filter(fun(Backend) -> lists:member({Backend, true}, Terms) end, Backends),
|
||||
[lists:keyfind(description, 1, Terms),
|
||||
lists:keyfind(vsn, 1, Terms),
|
||||
{env, [{enabled_backends, EBs}]}
|
||||
];
|
||||
_Err ->
|
||||
[]
|
||||
end,
|
||||
|
||||
{application, ejabberd,
|
||||
Vars ++
|
||||
[{modules, []},
|
||||
{registered, []},
|
||||
{applications, [kernel, sasl, ssl, stdlib]},
|
||||
{included_applications,
|
||||
[inets, mnesia, os_mon,
|
||||
cache_tab,
|
||||
eimp,
|
||||
fast_tls,
|
||||
fast_yaml,
|
||||
lager,
|
||||
p1_utils,
|
||||
pkix,
|
||||
xmpp]},
|
||||
{mod, {ejabberd_app, []}}]}.
|
||||
|
||||
%% Local Variables:
|
||||
%% mode: erlang
|
||||
%% End:
|
||||
%% vim: set filetype=erlang tabstop=8:
|
||||
@@ -69,11 +69,10 @@ man(Lang) ->
|
||||
catch _:undef -> []
|
||||
end
|
||||
end, ejabberd_config:callback_modules(all)),
|
||||
Version = binary_to_list(ejabberd_option:version()),
|
||||
Options =
|
||||
["TOP LEVEL OPTIONS",
|
||||
"-----------------",
|
||||
"This section describes top level options of ejabberd "++Version,
|
||||
tr(Lang, ?T("This section describes top level options of ejabberd.")),
|
||||
io_lib:nl()] ++
|
||||
lists:flatmap(
|
||||
fun(Opt) ->
|
||||
@@ -93,7 +92,7 @@ man(Lang) ->
|
||||
"MODULES",
|
||||
"-------",
|
||||
"[[modules]]",
|
||||
"This section describes options of all modules in ejabberd "++Version,
|
||||
tr(Lang, ?T("This section describes options of all ejabberd modules.")),
|
||||
io_lib:nl()] ++
|
||||
lists:flatmap(
|
||||
fun({M, Descr, DocOpts, Backends, Example}) ->
|
||||
@@ -112,7 +111,7 @@ man(Lang) ->
|
||||
"LISTENERS",
|
||||
"-------",
|
||||
"[[listeners]]",
|
||||
"This section describes options of all listeners in ejabberd "++Version,
|
||||
tr(Lang, ?T("This section describes options of all ejabberd listeners.")),
|
||||
io_lib:nl(),
|
||||
"TODO"],
|
||||
AsciiData =
|
||||
|
||||
@@ -1258,8 +1258,8 @@ doc() ->
|
||||
{sql_pool_size,
|
||||
#{value => ?T("Size"),
|
||||
desc =>
|
||||
?T("A number of connections to the SQL server. By default ejabberd opens "
|
||||
"10 connections to the database for each virtual host. WARNING: "
|
||||
?T("Number of connections to the SQL server that ejabberd will "
|
||||
"open for each virtual host. The default value is 10. WARNING: "
|
||||
"for SQLite this value is '1' by default and it's not recommended "
|
||||
"to change it due to potential race conditions.")}},
|
||||
{sql_port,
|
||||
|
||||
@@ -358,7 +358,7 @@ process_frame(#frame_info{unprocessed = none,
|
||||
| Recv],
|
||||
Send};
|
||||
9 -> % Ping
|
||||
Frame = encode_frame(Unprocessed, 10),
|
||||
Frame = encode_frame(Unmasked, 10),
|
||||
{FrameInfo3#frame_info{unmasked_msg = UnmaskedMsg}, [ping | Recv],
|
||||
[Frame | Send]};
|
||||
10 -> % Pong
|
||||
|
||||
+24
-5
@@ -132,7 +132,8 @@
|
||||
tls_options = [] :: [{certfile, string()} |
|
||||
{cacertfile, string()} |
|
||||
{depth, non_neg_integer()} |
|
||||
{verify, non_neg_integer()}],
|
||||
{verify, non_neg_integer()} |
|
||||
{fail_if_no_peer_cert, boolean()}],
|
||||
fd :: gen_tcp:socket() | undefined,
|
||||
rootdn = <<"">> :: binary(),
|
||||
passwd = <<"">> :: binary(),
|
||||
@@ -604,9 +605,9 @@ init([Hosts, Port, Rootdn, Passwd, Opts]) ->
|
||||
[]),
|
||||
CertOpts;
|
||||
Verify == soft ->
|
||||
[{verify, 1}] ++ CertOpts ++ CacertOpts ++ DepthOpts;
|
||||
[{verify, verify_peer}, {fail_if_no_peer_cert, false}] ++ CertOpts ++ CacertOpts ++ DepthOpts;
|
||||
Verify == hard ->
|
||||
[{verify, 2}] ++ CertOpts ++ CacertOpts ++ DepthOpts;
|
||||
[{verify, verify_peer}, {fail_if_no_peer_cert, true}] ++ CertOpts ++ CacertOpts ++ DepthOpts;
|
||||
true -> []
|
||||
end,
|
||||
{ok, connecting,
|
||||
@@ -1035,22 +1036,40 @@ polish([H | T], Res,
|
||||
polish(T, Res, [H | Ref]);
|
||||
polish([], Res, Ref) -> {Res, Ref}.
|
||||
|
||||
|
||||
-ifdef(NO_CUSTOMIZE_HOSTNAME_CHECK).
|
||||
check_hostname_opt(TLSOpts) ->
|
||||
TLSOpts.
|
||||
-else.
|
||||
check_hostname_opt(TLSOpts) ->
|
||||
MatchFun = public_key:pkix_verify_hostname_match_fun(https),
|
||||
[{customize_hostname_check, [{match_fun, MatchFun}]} | TLSOpts].
|
||||
-endif.
|
||||
|
||||
host_tls_options(Host, TLSOpts) ->
|
||||
case proplists:get_value(verify, TLSOpts) of
|
||||
verify_peer ->
|
||||
check_hostname_opt([{server_name_indication, Host} | TLSOpts]);
|
||||
_ ->
|
||||
TLSOpts
|
||||
end.
|
||||
|
||||
%%-----------------------------------------------------------------------
|
||||
%% Connect to next server in list and attempt to bind to it.
|
||||
%%-----------------------------------------------------------------------
|
||||
connect_bind(S) ->
|
||||
Host = next_host(S#eldap.host, S#eldap.hosts),
|
||||
HostS = binary_to_list(Host),
|
||||
Opts = if S#eldap.tls == tls ->
|
||||
[{packet, asn1}, {active, true}, {keepalive, true},
|
||||
binary
|
||||
| S#eldap.tls_options];
|
||||
| host_tls_options(HostS, S#eldap.tls_options)];
|
||||
true ->
|
||||
[{packet, asn1}, {active, true}, {keepalive, true},
|
||||
{send_timeout, ?SEND_TIMEOUT}, binary]
|
||||
end,
|
||||
?DEBUG("Connecting to LDAP server at ~ts:~p with options ~p",
|
||||
[Host, S#eldap.port, Opts]),
|
||||
HostS = binary_to_list(Host),
|
||||
SockMod = case S#eldap.tls of
|
||||
tls -> ssl;
|
||||
_ -> gen_tcp
|
||||
|
||||
@@ -569,8 +569,15 @@ compile_result(Results) ->
|
||||
[Error|_] -> Error
|
||||
end.
|
||||
|
||||
maybe_define_lager_macro() ->
|
||||
case list_to_integer(erlang:system_info(otp_release)) < 22 of
|
||||
true -> [{d, 'LAGER'}];
|
||||
false -> []
|
||||
end.
|
||||
|
||||
compile_options() ->
|
||||
[verbose, report_errors, report_warnings, debug_info, ?ALL_DEFS]
|
||||
++ maybe_define_lager_macro()
|
||||
++ [{i, filename:join(app_dir(App), "include")}
|
||||
|| App <- [fast_xml, xmpp, p1_utils, ejabberd]]
|
||||
++ [{i, filename:join(mod_dir(Mod), "include")}
|
||||
|
||||
+45
-19
@@ -744,7 +744,9 @@ get_commands_spec() ->
|
||||
"Receiver JID", "Subject, or empty string", "Body"],
|
||||
result = {res, rescode}},
|
||||
#ejabberd_commands{name = send_stanza_c2s, tags = [stanza],
|
||||
desc = "Send a stanza as if sent from a c2s session",
|
||||
desc = "Send a stanza from an existing C2S session",
|
||||
longdesc = "USER@HOST/RESOURCE must be an existing C2S session."
|
||||
" As an alternative, use send_stanza instead.",
|
||||
module = ?MODULE, function = send_stanza_c2s,
|
||||
args = [{user, binary}, {host, binary}, {resource, binary}, {stanza, binary}],
|
||||
args_example = [<<"admin">>, <<"myserver.com">>, <<"bot">>,
|
||||
@@ -1243,23 +1245,42 @@ update_vcard_els(Data, ContentList, Els1) ->
|
||||
%%%
|
||||
|
||||
add_rosteritem(LocalUser, LocalServer, User, Server, Nick, Group, Subs) ->
|
||||
Jid = jid:make(LocalUser, LocalServer),
|
||||
RosterItem = build_roster_item(User, Server, {add, Nick, Subs, Group}),
|
||||
case mod_roster:set_item_and_notify_clients(Jid, RosterItem, true) of
|
||||
ok -> ok;
|
||||
_ -> error
|
||||
case {jid:make(LocalUser, LocalServer), jid:make(User, Server)} of
|
||||
{error, _} ->
|
||||
throw({error, "Invalid 'localuser'/'localserver'"});
|
||||
{_, error} ->
|
||||
throw({error, "Invalid 'user'/'server'"});
|
||||
{Jid, _Jid2} ->
|
||||
RosterItem = build_roster_item(User, Server, {add, Nick, Subs, Group}),
|
||||
case mod_roster:set_item_and_notify_clients(Jid, RosterItem, true) of
|
||||
ok -> ok;
|
||||
_ -> error
|
||||
end
|
||||
end.
|
||||
|
||||
subscribe(LU, LS, User, Server, Nick, Group, Subscription, _Xattrs) ->
|
||||
ItemEl = build_roster_item(User, Server, {add, Nick, Subscription, Group}),
|
||||
mod_roster:set_items(LU, LS, #roster_query{items = [ItemEl]}).
|
||||
case {jid:make(LU, LS), jid:make(User, Server)} of
|
||||
{error, _} ->
|
||||
throw({error, "Invalid 'localuser'/'localserver'"});
|
||||
{_, error} ->
|
||||
throw({error, "Invalid 'user'/'server'"});
|
||||
{_Jid, _Jid2} ->
|
||||
ItemEl = build_roster_item(User, Server, {add, Nick, Subscription, Group}),
|
||||
mod_roster:set_items(LU, LS, #roster_query{items = [ItemEl]})
|
||||
end.
|
||||
|
||||
delete_rosteritem(LocalUser, LocalServer, User, Server) ->
|
||||
Jid = jid:make(LocalUser, LocalServer),
|
||||
RosterItem = build_roster_item(User, Server, remove),
|
||||
case mod_roster:set_item_and_notify_clients(Jid, RosterItem, true) of
|
||||
ok -> ok;
|
||||
_ -> error
|
||||
case {jid:make(LocalUser, LocalServer), jid:make(User, Server)} of
|
||||
{error, _} ->
|
||||
throw({error, "Invalid 'localuser'/'localserver'"});
|
||||
{_, error} ->
|
||||
throw({error, "Invalid 'user'/'server'"});
|
||||
{Jid, _Jid2} ->
|
||||
RosterItem = build_roster_item(User, Server, remove),
|
||||
case mod_roster:set_item_and_notify_clients(Jid, RosterItem, true) of
|
||||
ok -> ok;
|
||||
_ -> error
|
||||
end
|
||||
end.
|
||||
|
||||
%% -----------------------------
|
||||
@@ -1267,8 +1288,13 @@ delete_rosteritem(LocalUser, LocalServer, User, Server) ->
|
||||
%% -----------------------------
|
||||
|
||||
get_roster(User, Server) ->
|
||||
Items = ejabberd_hooks:run_fold(roster_get, Server, [], [{User, Server}]),
|
||||
make_roster_xmlrpc(Items).
|
||||
case jid:make(User, Server) of
|
||||
error ->
|
||||
throw({error, "Invalid 'user'/'server'"});
|
||||
#jid{luser = U, lserver = S} ->
|
||||
Items = ejabberd_hooks:run_fold(roster_get, S, [], [{U, S}]),
|
||||
make_roster_xmlrpc(Items)
|
||||
end.
|
||||
|
||||
%% Note: if a contact is in several groups, the contact is returned
|
||||
%% several times, each one in a different group.
|
||||
@@ -1494,10 +1520,10 @@ send_message(Type, From, To, Subject, Body) ->
|
||||
#xmlel{name = <<"body">>,
|
||||
children = [{xmlcdata, Body}]}]},
|
||||
?NS_CLIENT, CodecOpts) of
|
||||
#message{from = JID, subject = Subject, body = Body} = Msg ->
|
||||
Msg2 = case {xmpp:get_text(Subject), xmpp:get_text(Body)} of
|
||||
{_, <<>>} -> Msg;
|
||||
{<<>>, _} -> Msg#message{subject = []};
|
||||
#message{from = JID, subject = SubjectEl, body = BodyEl} = Msg ->
|
||||
Msg2 = case {xmpp:get_text(SubjectEl), xmpp:get_text(BodyEl)} of
|
||||
{Subject, <<>>} -> Msg;
|
||||
{<<>>, Body} -> Msg#message{subject = []};
|
||||
_ -> Msg
|
||||
end,
|
||||
State = #{jid => JID},
|
||||
|
||||
@@ -208,9 +208,10 @@ need_check(Pkt) ->
|
||||
_ ->
|
||||
false
|
||||
end,
|
||||
IsError = (error == xmpp:get_type(Pkt)),
|
||||
AllowLocalUsers = mod_block_strangers_opt:allow_local_users(LServer),
|
||||
Access = mod_block_strangers_opt:access(LServer),
|
||||
not (IsSelf orelse IsEmpty
|
||||
not (IsSelf orelse IsEmpty orelse IsError
|
||||
orelse acl:match_rule(LServer, Access, From) == allow
|
||||
orelse ((AllowLocalUsers orelse From#jid.luser == <<"">>)
|
||||
andalso ejabberd_router:is_my_host(From#jid.lserver))).
|
||||
|
||||
+45
-33
@@ -226,40 +226,52 @@ disco_info(Acc, _, _, _Node, _Lang) ->
|
||||
-spec c2s_presence_in(ejabberd_c2s:state(), presence()) -> ejabberd_c2s:state().
|
||||
c2s_presence_in(C2SState,
|
||||
#presence{from = From, to = To, type = Type} = Presence) ->
|
||||
{Subscription, _, _} = ejabberd_hooks:run_fold(
|
||||
roster_get_jid_info, To#jid.lserver,
|
||||
{none, none, []},
|
||||
[To#jid.luser, To#jid.lserver, From]),
|
||||
ToSelf = (From#jid.luser == To#jid.luser)
|
||||
and (From#jid.lserver == To#jid.lserver),
|
||||
Insert = (Type == available)
|
||||
and ((Subscription == both) or (Subscription == from) or ToSelf),
|
||||
Delete = (Type == unavailable) or (Type == error),
|
||||
if Insert or Delete ->
|
||||
LFrom = jid:tolower(From),
|
||||
Rs = maps:get(caps_resources, C2SState, gb_trees:empty()),
|
||||
Caps = read_caps(Presence),
|
||||
NewRs = case Caps of
|
||||
nothing when Insert == true -> Rs;
|
||||
_ when Insert == true ->
|
||||
case gb_trees:lookup(LFrom, Rs) of
|
||||
{value, Caps} -> Rs;
|
||||
none ->
|
||||
ejabberd_hooks:run(caps_add, To#jid.lserver,
|
||||
[From, To,
|
||||
get_features(To#jid.lserver, Caps)]),
|
||||
gb_trees:insert(LFrom, Caps, Rs);
|
||||
_ ->
|
||||
ejabberd_hooks:run(caps_update, To#jid.lserver,
|
||||
[From, To,
|
||||
get_features(To#jid.lserver, Caps)]),
|
||||
gb_trees:update(LFrom, Caps, Rs)
|
||||
end;
|
||||
_ -> gb_trees:delete_any(LFrom, Rs)
|
||||
end,
|
||||
C2SState#{caps_resources => NewRs};
|
||||
true ->
|
||||
C2SState
|
||||
andalso (From#jid.lserver == To#jid.lserver),
|
||||
Caps = read_caps(Presence),
|
||||
Operation =
|
||||
case {Type, ToSelf, Caps} of
|
||||
{unavailable, _, _} -> delete;
|
||||
{error, _, _} -> delete;
|
||||
{available, _, nothing} -> skip;
|
||||
{available, true, _} -> insert;
|
||||
{available, _, _} ->
|
||||
{Subscription, _, _} = ejabberd_hooks:run_fold(
|
||||
roster_get_jid_info, To#jid.lserver,
|
||||
{none, none, []},
|
||||
[To#jid.luser, To#jid.lserver, From]),
|
||||
case Subscription of
|
||||
from -> insert;
|
||||
both -> insert;
|
||||
_ -> skip
|
||||
end;
|
||||
_ ->
|
||||
skip
|
||||
end,
|
||||
case Operation of
|
||||
skip ->
|
||||
C2SState;
|
||||
delete ->
|
||||
LFrom = jid:tolower(From),
|
||||
Rs = maps:get(caps_resources, C2SState, gb_trees:empty()),
|
||||
C2SState#{caps_resources => gb_trees:delete_any(LFrom, Rs)};
|
||||
insert ->
|
||||
LFrom = jid:tolower(From),
|
||||
Rs = maps:get(caps_resources, C2SState, gb_trees:empty()),
|
||||
NewRs = case gb_trees:lookup(LFrom, Rs) of
|
||||
{value, Caps} -> Rs;
|
||||
none ->
|
||||
ejabberd_hooks:run(caps_add, To#jid.lserver,
|
||||
[From, To,
|
||||
get_features(To#jid.lserver, Caps)]),
|
||||
gb_trees:insert(LFrom, Caps, Rs);
|
||||
_ ->
|
||||
ejabberd_hooks:run(caps_update, To#jid.lserver,
|
||||
[From, To,
|
||||
get_features(To#jid.lserver, Caps)]),
|
||||
gb_trees:update(LFrom, Caps, Rs)
|
||||
end,
|
||||
C2SState#{caps_resources => NewRs}
|
||||
end.
|
||||
|
||||
-spec depends(binary(), gen_mod:opts()) -> [{module(), hard | soft}].
|
||||
|
||||
+11
-3
@@ -326,7 +326,7 @@ remove_mam_for_user_with_peer(User, Server, Peer) ->
|
||||
LServer = jid:nameprep(Server),
|
||||
try jid:decode(Peer) of
|
||||
Jid ->
|
||||
Mod = gen_mod:db_mod(LServer, ?MODULE),
|
||||
Mod = get_module_host(LServer),
|
||||
case Mod:remove_from_archive(LUser, LServer, Jid) of
|
||||
ok ->
|
||||
{ok, <<"MAM archive removed">>};
|
||||
@@ -339,6 +339,12 @@ remove_mam_for_user_with_peer(User, Server, Peer) ->
|
||||
{error, <<"Invalid peer JID">>}
|
||||
end.
|
||||
|
||||
get_module_host(LServer) ->
|
||||
try gen_mod:db_mod(LServer, ?MODULE)
|
||||
catch error:{module_not_loaded, ?MODULE, LServer} ->
|
||||
gen_mod:db_mod(ejabberd_router:host_of_route(LServer), ?MODULE)
|
||||
end.
|
||||
|
||||
-spec get_room_config([muc_roomconfig:property()], mod_muc_room:state(),
|
||||
jid(), binary()) -> [muc_roomconfig:property()].
|
||||
get_room_config(Fields, RoomState, _From, _Lang) ->
|
||||
@@ -1286,9 +1292,11 @@ send(Msgs, Count, IsComplete,
|
||||
RSMOut = make_rsm_out(Msgs, Count),
|
||||
Result = if NS == ?NS_MAM_TMP ->
|
||||
#mam_query{xmlns = NS, id = QID, rsm = RSMOut};
|
||||
true ->
|
||||
NS == ?NS_MAM_0 ->
|
||||
#mam_fin{xmlns = NS, id = QID, rsm = RSMOut,
|
||||
complete = IsComplete}
|
||||
complete = IsComplete};
|
||||
true ->
|
||||
#mam_fin{xmlns = NS, rsm = RSMOut, complete = IsComplete}
|
||||
end,
|
||||
if NS /= ?NS_MAM_0 ->
|
||||
lists:foreach(
|
||||
|
||||
+15
-3
@@ -37,6 +37,8 @@
|
||||
-export([open_session/1, close_session/1, lookup_session/1,
|
||||
publish/3, subscribe/4, unsubscribe/2, select_retained/4,
|
||||
check_publish_access/2, check_subscribe_access/2]).
|
||||
%% ejabberd_hooks
|
||||
-export([remove_user/2]).
|
||||
|
||||
-include("logger.hrl").
|
||||
-include("mqtt.hrl").
|
||||
@@ -53,6 +55,7 @@
|
||||
-callback open_session(jid:ljid()) -> ok | {error, db_failure}.
|
||||
-callback close_session(jid:ljid()) -> ok | {error, db_failure}.
|
||||
-callback lookup_session(jid:ljid()) -> {ok, pid()} | {error, notfound | db_failure}.
|
||||
-callback get_sessions(binary(), binary()) -> [jid:ljid()].
|
||||
-callback subscribe(jid:ljid(), binary(), sub_opts(), non_neg_integer()) -> ok | {error, db_failure}.
|
||||
-callback unsubscribe(jid:ljid(), binary()) -> ok | {error, notfound | db_failure}.
|
||||
-callback find_subscriber(binary(), binary() | continuation()) ->
|
||||
@@ -71,7 +74,7 @@
|
||||
|
||||
-optional_callbacks([use_cache/1, cache_nodes/1]).
|
||||
|
||||
-record(state, {}).
|
||||
-record(state, {host :: binary()}).
|
||||
|
||||
%%%===================================================================
|
||||
%%% API
|
||||
@@ -163,6 +166,13 @@ select_retained({_, S, _} = USR, TopicFilter, QoS, SubID) ->
|
||||
Limit = mod_mqtt_opt:match_retained_limit(S),
|
||||
select_retained(Mod, USR, TopicFilter, QoS, SubID, Limit).
|
||||
|
||||
remove_user(User, Server) ->
|
||||
LUser = jid:nodeprep(User),
|
||||
LServer = jid:nameprep(Server),
|
||||
Mod = gen_mod:ram_db_mod(LServer, ?MODULE),
|
||||
Sessions = Mod:get_sessions(LUser, LServer),
|
||||
[close_session(Session) || Session <- Sessions].
|
||||
|
||||
%%%===================================================================
|
||||
%%% gen_server callbacks
|
||||
%%%===================================================================
|
||||
@@ -170,11 +180,12 @@ init([Host|_]) ->
|
||||
Opts = gen_mod:get_module_opts(Host, ?MODULE),
|
||||
Mod = gen_mod:db_mod(Opts, ?MODULE),
|
||||
RMod = gen_mod:ram_db_mod(Opts, ?MODULE),
|
||||
ejabberd_hooks:add(remove_user, Host, ?MODULE, remove_user, 50),
|
||||
try
|
||||
ok = Mod:init(Host, Opts),
|
||||
ok = RMod:init(),
|
||||
ok = init_cache(Mod, Host, Opts),
|
||||
{ok, #state{}}
|
||||
{ok, #state{host = Host}}
|
||||
catch _:{badmatch, {error, Why}} ->
|
||||
{stop, Why}
|
||||
end.
|
||||
@@ -191,7 +202,8 @@ handle_info(Info, State) ->
|
||||
?WARNING_MSG("Unexpected info: ~p", [Info]),
|
||||
{noreply, State}.
|
||||
|
||||
terminate(_Reason, _State) ->
|
||||
terminate(_Reason, #state{host = Host}) ->
|
||||
ejabberd_hooks:delete(remove_user, Host, ?MODULE, remove_user, 50),
|
||||
ok.
|
||||
|
||||
code_change(_OldVsn, State, _Extra) ->
|
||||
|
||||
+12
-4
@@ -23,7 +23,7 @@
|
||||
-export([list_topics/1, use_cache/1]).
|
||||
-export([init/0]).
|
||||
-export([subscribe/4, unsubscribe/2, find_subscriber/2]).
|
||||
-export([open_session/1, close_session/1, lookup_session/1]).
|
||||
-export([open_session/1, close_session/1, lookup_session/1, get_sessions/2]).
|
||||
|
||||
-include("logger.hrl").
|
||||
-include("mqtt.hrl").
|
||||
@@ -46,9 +46,9 @@
|
||||
pid :: pid(),
|
||||
timestamp :: erlang:timestamp()}).
|
||||
|
||||
-record(mqtt_session, {usr :: jid:ljid(),
|
||||
pid :: pid(),
|
||||
timestamp :: erlang:timestamp()}).
|
||||
-record(mqtt_session, {usr :: jid:ljid() | {'_', '_', '$1'},
|
||||
pid :: pid() | '_',
|
||||
timestamp :: erlang:timestamp() | '_'}).
|
||||
|
||||
%%%===================================================================
|
||||
%%% API
|
||||
@@ -196,6 +196,14 @@ lookup_session(USR) ->
|
||||
{error, notfound}
|
||||
end.
|
||||
|
||||
get_sessions(U, S) ->
|
||||
Resources = mnesia:dirty_select(mqtt_session,
|
||||
[{#mqtt_session{usr = {U, S, '$1'},
|
||||
_ = '_'},
|
||||
[],
|
||||
['$1']}]),
|
||||
[{U, S, Resource} || Resource <- Resources].
|
||||
|
||||
subscribe({U, S, R} = USR, TopicFilter, SubOpts, ID) ->
|
||||
T1 = misc:unique_timestamp(),
|
||||
P1 = self(),
|
||||
|
||||
@@ -956,8 +956,7 @@ recv_data({fast_tls, Sock}, Data) ->
|
||||
case fast_tls:recv_data(Sock, Data) of
|
||||
{ok, _} = OK -> OK;
|
||||
{error, E} when is_atom(E) -> {error, {socket, E}};
|
||||
{error, E} when is_binary(E) -> {error, {tls, E}};
|
||||
{error, _} = Err -> Err
|
||||
{error, E} when is_binary(E) -> {error, {tls, E}}
|
||||
end;
|
||||
recv_data(_, Data) ->
|
||||
{ok, Data}.
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
%% Unsupported backend API
|
||||
-export([init/0]).
|
||||
-export([subscribe/4, unsubscribe/2, find_subscriber/2]).
|
||||
-export([open_session/1, close_session/1, lookup_session/1]).
|
||||
-export([open_session/1, close_session/1, lookup_session/1, get_sessions/2]).
|
||||
|
||||
-include("logger.hrl").
|
||||
-include("ejabberd_sql_pt.hrl").
|
||||
@@ -125,6 +125,9 @@ close_session(_) ->
|
||||
lookup_session(_) ->
|
||||
erlang:nif_error(unsupported_db).
|
||||
|
||||
get_sessions(_, _) ->
|
||||
erlang:nif_error(unsupported_db).
|
||||
|
||||
subscribe(_, _, _, _) ->
|
||||
erlang:nif_error(unsupported_db).
|
||||
|
||||
|
||||
+48
-19
@@ -42,6 +42,7 @@
|
||||
store_room/5,
|
||||
restore_room/3,
|
||||
forget_room/3,
|
||||
create_room/3,
|
||||
create_room/5,
|
||||
shutdown_rooms/1,
|
||||
process_disco_info/1,
|
||||
@@ -99,6 +100,7 @@
|
||||
-callback register_online_room(binary(), binary(), binary(), pid()) -> any().
|
||||
-callback unregister_online_room(binary(), binary(), binary(), pid()) -> any().
|
||||
-callback find_online_room(binary(), binary(), binary()) -> {ok, pid()} | error.
|
||||
-callback find_online_room_by_pid(binary(), pid()) -> {ok, binary(), binary()} | error.
|
||||
-callback get_online_rooms(binary(), binary(), undefined | rsm_set()) -> [{binary(), binary(), pid()}].
|
||||
-callback count_online_rooms(binary(), binary()) -> non_neg_integer().
|
||||
-callback rsm_supported() -> boolean().
|
||||
@@ -295,6 +297,14 @@ create_room(Host, Name, From, Nick, Opts) ->
|
||||
Proc = procname(ServerHost, {Name, Host}),
|
||||
?GEN_SERVER:call(Proc, {create, Name, Host, From, Nick, Opts}).
|
||||
|
||||
%% @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, Opts) ->
|
||||
ServerHost = ejabberd_router:host_of_route(Host),
|
||||
Proc = procname(ServerHost, {Name, Host}),
|
||||
?GEN_SERVER:call(Proc, {create, Name, Host, Opts}).
|
||||
|
||||
store_room(ServerHost, Host, Name, Opts) ->
|
||||
store_room(ServerHost, Host, Name, Opts, undefined).
|
||||
|
||||
@@ -379,6 +389,25 @@ init([Host, Worker]) ->
|
||||
{stop, normal, ok, state()}.
|
||||
handle_call(stop, _From, State) ->
|
||||
{stop, normal, ok, State};
|
||||
handle_call({unhibernate, Room, Host}, _From,
|
||||
#{server_host := ServerHost} = State) ->
|
||||
RMod = gen_mod:ram_db_mod(ServerHost, ?MODULE),
|
||||
{reply, load_room(RMod, Host, ServerHost, Room), State};
|
||||
handle_call({create, Room, Host, Opts}, _From,
|
||||
#{server_host := ServerHost} = State) ->
|
||||
?DEBUG("MUC: create new room '~ts'~n", [Room]),
|
||||
NewOpts = case Opts of
|
||||
default -> mod_muc_opt:default_room_options(ServerHost);
|
||||
_ -> Opts
|
||||
end,
|
||||
RMod = gen_mod:ram_db_mod(ServerHost, ?MODULE),
|
||||
case start_room(RMod, Host, ServerHost, Room, NewOpts) of
|
||||
{ok, _} ->
|
||||
ejabberd_hooks:run(create_room, ServerHost, [ServerHost, Room, Host]),
|
||||
{reply, ok, State};
|
||||
Err ->
|
||||
{reply, Err, State}
|
||||
end;
|
||||
handle_call({create, Room, Host, From, Nick, Opts}, _From,
|
||||
#{server_host := ServerHost} = State) ->
|
||||
?DEBUG("MUC: create new room '~ts'~n", [Room]),
|
||||
@@ -437,6 +466,15 @@ handle_info({route, Packet}, #{server_host := ServerHost} = State) ->
|
||||
handle_info({room_destroyed, {Room, Host}, Pid}, State) ->
|
||||
%% For backward compat
|
||||
handle_cast({room_destroyed, {Room, Host}, Pid}, State);
|
||||
handle_info({'DOWN', _Ref, process, Pid, _Reason},
|
||||
#{server_host := ServerHost} = State) ->
|
||||
RMod = gen_mod:ram_db_mod(ServerHost, ?MODULE),
|
||||
case RMod:find_online_room_by_pid(ServerHost, Pid) of
|
||||
{ok, Room, Host} ->
|
||||
handle_cast({room_destroyed, {Room, Host}, Pid}, State);
|
||||
_ ->
|
||||
{noreply, State}
|
||||
end;
|
||||
handle_info(Info, State) ->
|
||||
?ERROR_MSG("Unexpected info: ~p", [Info]),
|
||||
{noreply, State}.
|
||||
@@ -531,7 +569,8 @@ unhibernate_room(ServerHost, Host, Room) ->
|
||||
RMod = gen_mod:ram_db_mod(ServerHost, ?MODULE),
|
||||
case RMod:find_online_room(ServerHost, Room, Host) of
|
||||
error ->
|
||||
case load_room(RMod, Host, ServerHost, Room) of
|
||||
Proc = procname(ServerHost, {Room, Host}),
|
||||
case ?GEN_SERVER:call(Proc, {unhibernate, Room, Host}) of
|
||||
{ok, _} = R -> R;
|
||||
_ -> error
|
||||
end;
|
||||
@@ -791,27 +830,15 @@ get_rooms(ServerHost, Host) ->
|
||||
load_permanent_rooms(Hosts, ServerHost, Opts) ->
|
||||
case mod_muc_opt:preload_rooms(Opts) of
|
||||
true ->
|
||||
Access = get_access(Opts),
|
||||
HistorySize = mod_muc_opt:history_size(Opts),
|
||||
QueueType = mod_muc_opt:queue_type(Opts),
|
||||
RoomShaper = mod_muc_opt:room_shaper(Opts),
|
||||
RMod = gen_mod:ram_db_mod(Opts, ?MODULE),
|
||||
lists:foreach(
|
||||
fun(Host) ->
|
||||
?DEBUG("Loading rooms at ~ts", [Host]),
|
||||
lists:foreach(
|
||||
fun(Host) ->
|
||||
?DEBUG("Loading rooms at ~ts", [Host]),
|
||||
lists:foreach(
|
||||
fun(R) ->
|
||||
{Room, _} = R#muc_room.name_host,
|
||||
case RMod:find_online_room(ServerHost, Room, Host) of
|
||||
error ->
|
||||
start_room(RMod, Host, ServerHost, Access,
|
||||
Room, HistorySize, RoomShaper,
|
||||
R#muc_room.opts, QueueType);
|
||||
{ok, _} ->
|
||||
ok
|
||||
end
|
||||
{Room, _} = R#muc_room.name_host,
|
||||
unhibernate_room(ServerHost, Host, Room)
|
||||
end, get_rooms(ServerHost, Host))
|
||||
end, Hosts);
|
||||
end, Hosts);
|
||||
false ->
|
||||
ok
|
||||
end.
|
||||
@@ -877,6 +904,7 @@ start_room(Mod, Host, ServerHost, Access, Room,
|
||||
case mod_muc_room:start(Host, ServerHost, Access, Room,
|
||||
HistorySize, RoomShaper, DefOpts, QueueType) of
|
||||
{ok, Pid} ->
|
||||
erlang:monitor(process, Pid),
|
||||
Mod:register_online_room(ServerHost, Room, Host, Pid),
|
||||
{ok, Pid};
|
||||
Err ->
|
||||
@@ -889,6 +917,7 @@ start_room(Mod, Host, ServerHost, Access, Room, HistorySize,
|
||||
HistorySize, RoomShaper,
|
||||
Creator, Nick, DefOpts, QueueType) of
|
||||
{ok, Pid} ->
|
||||
erlang:monitor(process, Pid),
|
||||
Mod:register_online_room(ServerHost, Room, Host, Pid),
|
||||
{ok, Pid};
|
||||
Err ->
|
||||
|
||||
+49
-44
@@ -35,7 +35,7 @@
|
||||
create_rooms_file/1, destroy_rooms_file/1,
|
||||
rooms_unused_list/2, rooms_unused_destroy/2,
|
||||
rooms_empty_list/1, rooms_empty_destroy/1,
|
||||
get_user_rooms/2, get_room_occupants/2,
|
||||
get_user_rooms/2, get_user_subscriptions/2, get_room_occupants/2,
|
||||
get_room_occupants_number/2, send_direct_invitation/5,
|
||||
change_room_option/4, get_room_options/2,
|
||||
set_room_affiliation/4, get_room_affiliations/2, get_room_affiliation/3,
|
||||
@@ -235,6 +235,22 @@ get_commands_spec() ->
|
||||
result_example = ["room1@muc.example.com", "room2@muc.example.com"],
|
||||
args = [{user, binary}, {host, binary}],
|
||||
result = {rooms, {list, {room, string}}}},
|
||||
#ejabberd_commands{name = get_user_subscriptions, tags = [muc],
|
||||
desc = "Get the list of rooms where this user is subscribed",
|
||||
module = ?MODULE, function = get_user_subscriptions,
|
||||
args_desc = ["Username", "Server host"],
|
||||
args_example = ["tom", "example.com"],
|
||||
result_example = [{"room1@muc.example.com", "Tommy", ["mucsub:config"]}],
|
||||
args = [{user, binary}, {host, binary}],
|
||||
result = {rooms,
|
||||
{list,
|
||||
{room,
|
||||
{tuple,
|
||||
[{roomjid, string},
|
||||
{usernick, string},
|
||||
{nodes, {list, {node, string}}}
|
||||
]}}
|
||||
}}},
|
||||
|
||||
#ejabberd_commands{name = get_room_occupants, tags = [muc_room],
|
||||
desc = "Get the list of occupants of a MUC room",
|
||||
@@ -443,6 +459,16 @@ get_user_rooms(User, Server) ->
|
||||
end
|
||||
end, ejabberd_option:hosts()).
|
||||
|
||||
get_user_subscriptions(User, Server) ->
|
||||
Services = find_services(global),
|
||||
UserJid = jid:make(jid:nodeprep(User), jid:nodeprep(Server)),
|
||||
lists:flatmap(
|
||||
fun(ServerHost) ->
|
||||
{ok, Rooms} = mod_muc:get_subscribed_rooms(ServerHost, UserJid),
|
||||
[{jid:encode(RoomJid), UserNick, Nodes}
|
||||
|| {RoomJid, UserNick, Nodes} <- Rooms]
|
||||
end, Services).
|
||||
|
||||
%%----------------------------
|
||||
%% Ad-hoc commands
|
||||
%%----------------------------
|
||||
@@ -535,7 +561,8 @@ make_rooms_page(Host, Lang, {Sort_direction, Sort_column}) ->
|
||||
?T("Persistent"),
|
||||
?T("Logging"),
|
||||
?T("Just created"),
|
||||
?T("Room title")],
|
||||
?T("Room title"),
|
||||
?T("Node")],
|
||||
{Titles_TR, _} =
|
||||
lists:mapfoldl(
|
||||
fun(Title, Num_column) ->
|
||||
@@ -581,6 +608,7 @@ build_info_room({Name, Host, _ServerHost, Pid}) ->
|
||||
S = get_room_state(Pid),
|
||||
Just_created = S#state.just_created,
|
||||
Num_participants = maps:size(S#state.users),
|
||||
Node = node(Pid),
|
||||
|
||||
History = (S#state.history)#lqueue.queue,
|
||||
Ts_last_message =
|
||||
@@ -600,7 +628,8 @@ build_info_room({Name, Host, _ServerHost, Pid}) ->
|
||||
Persistent,
|
||||
Logging,
|
||||
Just_created,
|
||||
Title}.
|
||||
Title,
|
||||
Node}.
|
||||
|
||||
get_queue_last(Queue) ->
|
||||
List = p1_queue:to_list(Queue),
|
||||
@@ -616,7 +645,8 @@ prepare_room_info(Room_info) ->
|
||||
Persistent,
|
||||
Logging,
|
||||
Just_created,
|
||||
Title} = Room_info,
|
||||
Title,
|
||||
Node} = Room_info,
|
||||
[NameHost,
|
||||
integer_to_binary(Num_participants),
|
||||
Ts_last_message,
|
||||
@@ -624,7 +654,8 @@ prepare_room_info(Room_info) ->
|
||||
misc:atom_to_binary(Persistent),
|
||||
misc:atom_to_binary(Logging),
|
||||
justcreated_to_binary(Just_created),
|
||||
Title].
|
||||
Title,
|
||||
misc:atom_to_binary(Node)].
|
||||
|
||||
justcreated_to_binary(J) when is_integer(J) ->
|
||||
JNow = misc:usec_to_now(J),
|
||||
@@ -653,47 +684,21 @@ create_room_with_opts(Name1, Host1, ServerHost1, CustomRoomOpts) ->
|
||||
{_, _, error} ->
|
||||
throw({error, "Invalid 'serverhost'"});
|
||||
{Name, Host, ServerHost} ->
|
||||
%% Get the default room options from the muc configuration
|
||||
DefRoomOpts = mod_muc_opt:default_room_options(ServerHost),
|
||||
%% Change default room options as required
|
||||
FormattedRoomOpts = [format_room_option(Opt, Val) || {Opt, Val}<-CustomRoomOpts],
|
||||
RoomOpts = lists:ukeymerge(1,
|
||||
lists:keysort(1, FormattedRoomOpts),
|
||||
lists:keysort(1, DefRoomOpts)),
|
||||
|
||||
|
||||
%% Get all remaining mod_muc parameters that might be utilized
|
||||
Access = mod_muc_opt:access(ServerHost),
|
||||
AcCreate = mod_muc_opt:access_create(ServerHost),
|
||||
AcAdmin = mod_muc_opt:access_admin(ServerHost),
|
||||
AcPer = mod_muc_opt:access_persistent(ServerHost),
|
||||
AcMam = mod_muc_opt:access_mam(ServerHost),
|
||||
HistorySize = mod_muc_opt:history_size(ServerHost),
|
||||
RoomShaper = mod_muc_opt:room_shaper(ServerHost),
|
||||
QueueType = mod_muc_opt:queue_type(ServerHost),
|
||||
|
||||
%% If the room does not exist yet in the muc_online_room
|
||||
case get_room_pid(Name, Host) of
|
||||
room_not_found ->
|
||||
%% Store the room on the server, it is not started yet though at this point
|
||||
case lists:keyfind(persistent, 1, RoomOpts) of
|
||||
{persistent, true} ->
|
||||
mod_muc:store_room(ServerHost, Host, Name, RoomOpts);
|
||||
_ ->
|
||||
ok
|
||||
end,
|
||||
%% Start the room
|
||||
{ok, Pid} = mod_muc_room:start(
|
||||
Host,
|
||||
ServerHost,
|
||||
{Access, AcCreate, AcAdmin, AcPer, AcMam},
|
||||
Name,
|
||||
HistorySize,
|
||||
RoomShaper,
|
||||
RoomOpts,
|
||||
QueueType),
|
||||
mod_muc:register_online_room(Name, Host, Pid),
|
||||
ok;
|
||||
%% Get the default room options from the muc configuration
|
||||
DefRoomOpts = mod_muc_opt:default_room_options(ServerHost),
|
||||
%% Change default room options as required
|
||||
FormattedRoomOpts = [format_room_option(Opt, Val) || {Opt, Val}<-CustomRoomOpts],
|
||||
RoomOpts = lists:ukeymerge(1,
|
||||
lists:keysort(1, FormattedRoomOpts),
|
||||
lists:keysort(1, DefRoomOpts)),
|
||||
case mod_muc:create_room(Host, Name, RoomOpts) of
|
||||
ok ->
|
||||
ok;
|
||||
{error, _} ->
|
||||
throw({error, "Unable to start room"})
|
||||
end;
|
||||
_ ->
|
||||
throw({error, "Room already exists"})
|
||||
end
|
||||
|
||||
+15
-1
@@ -33,7 +33,8 @@
|
||||
-export([register_online_room/4, unregister_online_room/4, find_online_room/3,
|
||||
get_online_rooms/3, count_online_rooms/2, rsm_supported/0,
|
||||
register_online_user/4, unregister_online_user/4,
|
||||
count_online_rooms_by_user/3, get_online_rooms_by_user/3]).
|
||||
count_online_rooms_by_user/3, get_online_rooms_by_user/3,
|
||||
find_online_room_by_pid/2]).
|
||||
-export([set_affiliation/6, set_affiliations/4, get_affiliation/5,
|
||||
get_affiliations/3, search_affiliation/4]).
|
||||
%% gen_server callbacks
|
||||
@@ -181,6 +182,19 @@ find_online_room(Room, Host) ->
|
||||
[#muc_online_room{pid = Pid}] -> {ok, Pid}
|
||||
end.
|
||||
|
||||
find_online_room_by_pid(_ServerHost, Pid) ->
|
||||
Res =
|
||||
mnesia:dirty_select(
|
||||
muc_online_room,
|
||||
ets:fun2ms(
|
||||
fun(#muc_online_room{name_host = {Name, Host}, pid = PidS})
|
||||
when PidS == Pid -> {Name, Host}
|
||||
end)),
|
||||
case Res of
|
||||
[{Name, Host}] -> {ok, Name, Host};
|
||||
_ -> error
|
||||
end.
|
||||
|
||||
count_online_rooms(_ServerHost, Host) ->
|
||||
ets:select_count(
|
||||
muc_online_room,
|
||||
|
||||
+43
-30
@@ -913,11 +913,9 @@ terminate(Reason, _StateName,
|
||||
_ ->
|
||||
ok
|
||||
end
|
||||
end,
|
||||
mod_muc:room_destroyed(Host, Room, self(), LServer)
|
||||
end
|
||||
catch ?EX_RULE(E, R, St) ->
|
||||
StackTrace = ?EX_STACK(St),
|
||||
mod_muc:room_destroyed(Host, Room, self(), LServer),
|
||||
?ERROR_MSG("Got exception on room termination:~n** ~ts",
|
||||
[misc:format_exception(2, E, R, StackTrace)])
|
||||
end.
|
||||
@@ -939,32 +937,43 @@ process_groupchat_message(#message{from = From, lang = Lang} = Packet, StateData
|
||||
of
|
||||
true ->
|
||||
{FromNick, Role} = get_participant_data(From, StateData),
|
||||
if (Role == moderator) or (Role == participant) or
|
||||
(IsSubscriber andalso ((StateData#state.config)#config.members_by_default == true)) or
|
||||
((StateData#state.config)#config.moderated == false) ->
|
||||
Subject = check_subject(Packet),
|
||||
{NewStateData1, IsAllowed} = case Subject of
|
||||
[] -> {StateData, true};
|
||||
_ ->
|
||||
case
|
||||
can_change_subject(Role,
|
||||
IsSubscriber,
|
||||
StateData)
|
||||
of
|
||||
true ->
|
||||
NSD =
|
||||
StateData#state{subject
|
||||
=
|
||||
Subject,
|
||||
subject_author
|
||||
=
|
||||
FromNick},
|
||||
store_room(NSD),
|
||||
{NSD, true};
|
||||
_ -> {StateData, false}
|
||||
end
|
||||
end,
|
||||
case IsAllowed of
|
||||
#config{moderated = Moderated} = StateData#state.config,
|
||||
AllowedByModerationRules =
|
||||
case {Role == moderator orelse Role == participant orelse
|
||||
not Moderated, IsSubscriber} of
|
||||
{true, _} -> true;
|
||||
{_, true} ->
|
||||
case get_default_role(get_affiliation(From, StateData),
|
||||
StateData) of
|
||||
moderator -> true;
|
||||
participant -> true;
|
||||
_ -> false
|
||||
end;
|
||||
_ ->
|
||||
false
|
||||
end,
|
||||
if AllowedByModerationRules ->
|
||||
Subject = check_subject(Packet),
|
||||
{NewStateData1, IsAllowed} =
|
||||
case Subject of
|
||||
[] ->
|
||||
{StateData, true};
|
||||
_ ->
|
||||
case
|
||||
can_change_subject(Role,
|
||||
IsSubscriber,
|
||||
StateData)
|
||||
of
|
||||
true ->
|
||||
NSD =
|
||||
StateData#state{subject = Subject,
|
||||
subject_author = FromNick},
|
||||
store_room(NSD),
|
||||
{NSD, true};
|
||||
_ -> {StateData, false}
|
||||
end
|
||||
end,
|
||||
case IsAllowed of
|
||||
true ->
|
||||
case
|
||||
ejabberd_hooks:run_fold(muc_filter_message,
|
||||
@@ -2938,7 +2947,11 @@ process_item_change(Item, SD, UJID) ->
|
||||
{JID, affiliation, outcast, Reason} ->
|
||||
send_kickban_presence(UJID, JID, Reason, 301, outcast, SD),
|
||||
maybe_send_affiliation(JID, outcast, SD),
|
||||
set_affiliation(JID, outcast, set_role(JID, none, SD), Reason);
|
||||
{result, undefined, SD2} =
|
||||
process_iq_mucsub(JID,
|
||||
#iq{type = set,
|
||||
sub_els = [#muc_unsubscribe{}]}, SD),
|
||||
set_affiliation(JID, outcast, set_role(JID, none, SD2), Reason);
|
||||
{JID, affiliation, A, Reason} when (A == admin) or (A == owner) ->
|
||||
SD1 = set_affiliation(JID, A, SD, Reason),
|
||||
SD2 = set_role(JID, moderator, SD1),
|
||||
|
||||
+17
-1
@@ -36,7 +36,8 @@
|
||||
get_online_rooms/3, count_online_rooms/2, rsm_supported/0,
|
||||
register_online_user/4, unregister_online_user/4,
|
||||
count_online_rooms_by_user/3, get_online_rooms_by_user/3,
|
||||
get_subscribed_rooms/3, get_rooms_without_subscribers/2]).
|
||||
get_subscribed_rooms/3, get_rooms_without_subscribers/2,
|
||||
find_online_room_by_pid/2]).
|
||||
-export([set_affiliation/6, set_affiliations/4, get_affiliation/5,
|
||||
get_affiliations/3, search_affiliation/4]).
|
||||
|
||||
@@ -306,6 +307,21 @@ find_online_room(ServerHost, Room, Host) ->
|
||||
error
|
||||
end.
|
||||
|
||||
find_online_room_by_pid(ServerHost, Pid) ->
|
||||
PidS = misc:encode_pid(Pid),
|
||||
NodeS = erlang:atom_to_binary(node(Pid), latin1),
|
||||
case ejabberd_sql:sql_query(
|
||||
ServerHost,
|
||||
?SQL("select @(name)s, @(host)s from muc_online_room where "
|
||||
"node=%(NodeS)s and pid=%(PidS)s")) of
|
||||
{selected, [{Room, Host}]} ->
|
||||
{ok, Room, Host};
|
||||
{selected, []} ->
|
||||
error;
|
||||
_Err ->
|
||||
error
|
||||
end.
|
||||
|
||||
count_online_rooms(ServerHost, Host) ->
|
||||
case ejabberd_sql:sql_query(
|
||||
ServerHost,
|
||||
|
||||
+39
-30
@@ -607,34 +607,28 @@ do_check_packet(#jid{luser = LUser, lserver = LServer}, List, Packet, Dir) ->
|
||||
in -> jid:tolower(From);
|
||||
out -> jid:tolower(To)
|
||||
end,
|
||||
{Subscription, _Ask, Groups} = ejabberd_hooks:run_fold(
|
||||
roster_get_jid_info, LServer,
|
||||
{none, none, []},
|
||||
[LUser, LServer, LJID]),
|
||||
check_packet_aux(List, PType2, LJID, Subscription, Groups)
|
||||
check_packet_aux(List, PType2, LJID, [LUser, LServer])
|
||||
end.
|
||||
|
||||
-spec check_packet_aux([listitem()],
|
||||
message | iq | presence_in | presence_out | other,
|
||||
ljid(), none | both | from | to, [binary()]) ->
|
||||
ljid(), [binary()] | {none | both | from | to, [binary()]}) ->
|
||||
allow | deny.
|
||||
%% Ptype = message | iq | presence_in | presence_out | other
|
||||
check_packet_aux([], _PType, _JID, _Subscription,
|
||||
_Groups) ->
|
||||
check_packet_aux([], _PType, _JID, _RosterInfo) ->
|
||||
allow;
|
||||
check_packet_aux([Item | List], PType, JID,
|
||||
Subscription, Groups) ->
|
||||
check_packet_aux([Item | List], PType, JID, RosterInfo) ->
|
||||
#listitem{type = Type, value = Value, action = Action} =
|
||||
Item,
|
||||
case is_ptype_match(Item, PType) of
|
||||
true ->
|
||||
case is_type_match(Type, Value, JID, Subscription, Groups) of
|
||||
true -> Action;
|
||||
false ->
|
||||
check_packet_aux(List, PType, JID, Subscription, Groups)
|
||||
case is_type_match(Type, Value, JID, RosterInfo) of
|
||||
{true, _} -> Action;
|
||||
{false, RI} ->
|
||||
check_packet_aux(List, PType, JID, RI)
|
||||
end;
|
||||
false ->
|
||||
check_packet_aux(List, PType, JID, Subscription, Groups)
|
||||
check_packet_aux(List, PType, JID, RosterInfo)
|
||||
end.
|
||||
|
||||
-spec is_ptype_match(listitem(),
|
||||
@@ -654,32 +648,47 @@ is_ptype_match(Item, PType) ->
|
||||
end.
|
||||
|
||||
-spec is_type_match(none | jid | subscription | group, listitem_value(),
|
||||
ljid(), none | both | from | to, [binary()]) -> boolean().
|
||||
is_type_match(none, _Value, _JID, _Subscription, _Groups) ->
|
||||
true;
|
||||
is_type_match(jid, Value, JID, _Subscription, _Groups) ->
|
||||
ljid(), [binary()] | {none | both | from | to, [binary()]}) ->
|
||||
{boolean(), [binary()] | {none | both | from | to, [binary()]}}.
|
||||
is_type_match(none, _Value, _JID, RosterInfo) ->
|
||||
{true, RosterInfo};
|
||||
is_type_match(jid, Value, JID, RosterInfo) ->
|
||||
case Value of
|
||||
{<<"">>, Server, <<"">>} ->
|
||||
case JID of
|
||||
{_, Server, _} -> true;
|
||||
_ -> false
|
||||
{_, Server, _} -> {true, RosterInfo};
|
||||
_ -> {false, RosterInfo}
|
||||
end;
|
||||
{User, Server, <<"">>} ->
|
||||
case JID of
|
||||
{User, Server, _} -> true;
|
||||
_ -> false
|
||||
{User, Server, _} -> {true, RosterInfo};
|
||||
_ -> {false, RosterInfo}
|
||||
end;
|
||||
{<<"">>, Server, Resource} ->
|
||||
case JID of
|
||||
{_, Server, Resource} -> true;
|
||||
_ -> false
|
||||
{_, Server, Resource} -> {true, RosterInfo};
|
||||
_ -> {false, RosterInfo}
|
||||
end;
|
||||
_ -> Value == JID
|
||||
_ -> {Value == JID, RosterInfo}
|
||||
end;
|
||||
is_type_match(subscription, Value, _JID, Subscription, _Groups) ->
|
||||
Value == Subscription;
|
||||
is_type_match(group, Group, _JID, _Subscription, Groups) ->
|
||||
lists:member(Group, Groups).
|
||||
is_type_match(subscription, Value, JID, RosterInfo) ->
|
||||
{Subscription, _} = RI = resolve_roster_info(JID, RosterInfo),
|
||||
{Value == Subscription, RI};
|
||||
is_type_match(group, Group, JID, RosterInfo) ->
|
||||
{_, Groups} = RI = resolve_roster_info(JID, RosterInfo),
|
||||
{lists:member(Group, Groups), RI}.
|
||||
|
||||
-spec resolve_roster_info(ljid(), [binary()] | {none | both | from | to, [binary()]}) ->
|
||||
{none | both | from | to, [binary()]}.
|
||||
resolve_roster_info(JID, [LUser, LServer]) ->
|
||||
{Subscription, _Ask, Groups} =
|
||||
ejabberd_hooks:run_fold(
|
||||
roster_get_jid_info, LServer,
|
||||
{none, none, []},
|
||||
[LUser, LServer, JID]),
|
||||
{Subscription, Groups};
|
||||
resolve_roster_info(_, RosterInfo) ->
|
||||
RosterInfo.
|
||||
|
||||
-spec remove_user(binary(), binary()) -> ok.
|
||||
remove_user(User, Server) ->
|
||||
|
||||
+3
-2
@@ -705,8 +705,7 @@ remove_user(User, Server) ->
|
||||
case node_action(Host, PType,
|
||||
get_state,
|
||||
[Nidx, jid:tolower(Entity)]) of
|
||||
{result, State} ->
|
||||
ItemIds = State#pubsub_state.items,
|
||||
{result, #pubsub_state{items = ItemIds}} ->
|
||||
node_action(Host, PType,
|
||||
remove_extra_items,
|
||||
[Nidx, 0, ItemIds]),
|
||||
@@ -3822,6 +3821,8 @@ node_call(Host, Type, Function, Args) ->
|
||||
case apply(Module, Function, Args) of
|
||||
{result, Result} ->
|
||||
{result, Result};
|
||||
#pubsub_state{} = Result ->
|
||||
{result, Result};
|
||||
{error, #stanza_error{}} = Err ->
|
||||
Err;
|
||||
{error, _} ->
|
||||
|
||||
+14
-3
@@ -183,7 +183,12 @@ process_iq(#iq{type = set, to = To,
|
||||
lang = Lang, sub_els = [#register{xdata = #xdata{} = X}]} = IQ,
|
||||
Source, true, _AllowRemove) ->
|
||||
Server = To#jid.lserver,
|
||||
case ejabberd_captcha:process_reply(X) of
|
||||
XdataC = xmpp_util:set_xdata_field(
|
||||
#xdata_field{
|
||||
var = <<"FORM_TYPE">>,
|
||||
type = hidden, values = [?NS_CAPTCHA]},
|
||||
X),
|
||||
case ejabberd_captcha:process_reply(XdataC) of
|
||||
ok ->
|
||||
case process_xdata_submit(X) of
|
||||
{ok, User, Password} ->
|
||||
@@ -242,9 +247,15 @@ process_iq(#iq{type = get, from = From, to = To, id = ID, lang = Lang} = IQ,
|
||||
fields = [UField, PField]},
|
||||
case ejabberd_captcha:create_captcha_x(ID, To, Lang, Source, X) of
|
||||
{ok, CaptchaEls} ->
|
||||
{value, XdataC, CaptchaEls2} = lists:keytake(xdata, 1, CaptchaEls),
|
||||
Xdata = xmpp_util:set_xdata_field(
|
||||
#xdata_field{
|
||||
var = <<"FORM_TYPE">>,
|
||||
type = hidden, values = [?NS_REGISTER]},
|
||||
XdataC),
|
||||
xmpp:make_iq_result(
|
||||
IQ, #register{instructions = TopInstr,
|
||||
sub_els = CaptchaEls});
|
||||
sub_els = [Xdata | CaptchaEls2]});
|
||||
{error, limit} ->
|
||||
ErrText = ?T("Too many CAPTCHA requests"),
|
||||
xmpp:make_error(
|
||||
@@ -654,7 +665,7 @@ mod_doc() ->
|
||||
#{value => "true | false",
|
||||
desc =>
|
||||
?T("Protect registrations with CAPTCHA (see section "
|
||||
"https://docs.ejabberd.im/admin/configuration/#captcha[CAPTCHA] "
|
||||
"https://docs.ejabberd.im/admin/configuration/basic/#captcha[CAPTCHA] "
|
||||
"of the Configuration Guide). The default is 'false'.")}},
|
||||
{ip_access,
|
||||
#{value => ?T("AccessName"),
|
||||
|
||||
@@ -409,9 +409,10 @@ get_member_jid(#state{user_jid_attr = UserJIDAttr, user_uid = UIDAttr} = State,
|
||||
[] ->
|
||||
{error, error};
|
||||
[#eldap_entry{attributes = [{UserJIDAttr, [MemberJID | _]}]} | _] ->
|
||||
case jid:decode(MemberJID) of
|
||||
error -> {error, Host};
|
||||
try jid:decode(MemberJID) of
|
||||
#jid{luser = U, lserver = S} -> {U, S}
|
||||
catch
|
||||
error:{bad_jid, _} -> {error, Host}
|
||||
end
|
||||
end.
|
||||
|
||||
|
||||
+8
-4
@@ -403,7 +403,7 @@ vcard_iq_set(#iq{from = From, lang = Lang, sub_els = [VCard]} = IQ) ->
|
||||
vcard_iq_set(Acc) ->
|
||||
Acc.
|
||||
|
||||
-spec set_vcard(binary(), binary(), xmlel() | vcard_temp()) -> {error, badarg} | ok.
|
||||
-spec set_vcard(binary(), binary(), xmlel() | vcard_temp()) -> {error, badarg|binary()} | ok.
|
||||
set_vcard(User, LServer, VCARD) ->
|
||||
case jid:nodeprep(User) of
|
||||
error ->
|
||||
@@ -412,10 +412,14 @@ set_vcard(User, LServer, VCARD) ->
|
||||
VCardEl = xmpp:encode(VCARD),
|
||||
VCardSearch = make_vcard_search(User, LUser, LServer, VCardEl),
|
||||
Mod = gen_mod:db_mod(LServer, ?MODULE),
|
||||
Mod:set_vcard(LUser, LServer, VCardEl, VCardSearch),
|
||||
ets_cache:delete(?VCARD_CACHE, {LUser, LServer},
|
||||
case Mod:set_vcard(LUser, LServer, VCardEl, VCardSearch) of
|
||||
{atomic, ok} ->
|
||||
ets_cache:delete(?VCARD_CACHE, {LUser, LServer},
|
||||
cache_nodes(Mod, LServer)),
|
||||
ok
|
||||
ok;
|
||||
{atomic, Error} ->
|
||||
{error, Error}
|
||||
end
|
||||
end.
|
||||
|
||||
-spec string2lower(binary()) -> binary().
|
||||
|
||||
@@ -268,7 +268,8 @@ ldap_attribute_to_vcard({Attr, Value}, V) ->
|
||||
<<"role">> -> V#vcard_temp{role = Value};
|
||||
<<"tel">> -> V#vcard_temp{tel = [#vcard_tel{number = Value}|Ts]};
|
||||
<<"email">> -> V#vcard_temp{email = [#vcard_email{userid = Value}|Es]};
|
||||
<<"photo">> -> V#vcard_temp{photo = #vcard_photo{binval = Value}};
|
||||
<<"photo">> -> V#vcard_temp{photo = #vcard_photo{binval = Value,
|
||||
type = photo_type(Value)}};
|
||||
<<"family">> -> V#vcard_temp{n = N#vcard_name{family = Value}};
|
||||
<<"given">> -> V#vcard_temp{n = N#vcard_name{given = Value}};
|
||||
<<"middle">> -> V#vcard_temp{n = N#vcard_name{middle = Value}};
|
||||
@@ -282,6 +283,11 @@ ldap_attribute_to_vcard({Attr, Value}, V) ->
|
||||
_ -> V
|
||||
end.
|
||||
|
||||
-spec photo_type(binary()) -> binary().
|
||||
photo_type(Value) ->
|
||||
Type = eimp:get_type(Value),
|
||||
<<"image/", (atom_to_binary(Type, latin1))/binary>>.
|
||||
|
||||
map_vcard_attr(VCardName, Attributes, Pattern, UD) ->
|
||||
Res = lists:filter(
|
||||
fun({Name, _}) ->
|
||||
|
||||
+1
-1
@@ -128,7 +128,7 @@ subscribe_node(Nidx, Sender, Subscriber, AccessModel,
|
||||
unsubscribe_node(Nidx, Sender, Subscriber, SubId) ->
|
||||
case node_flat:unsubscribe_node(Nidx, Sender, Subscriber, SubId) of
|
||||
{error, Error} -> {error, Error};
|
||||
{result, _} -> {result, []}
|
||||
{result, _} -> {result, default}
|
||||
end.
|
||||
|
||||
publish_item(Nidx, Publisher, Model, MaxItems, ItemId, Payload, PubOpts) ->
|
||||
|
||||
@@ -85,7 +85,7 @@ subscribe_node(Nidx, Sender, Subscriber, AccessModel,
|
||||
unsubscribe_node(Nidx, Sender, Subscriber, SubId) ->
|
||||
case node_flat_sql:unsubscribe_node(Nidx, Sender, Subscriber, SubId) of
|
||||
{error, Error} -> {error, Error};
|
||||
{result, _} -> {result, []}
|
||||
{result, _} -> {result, default}
|
||||
end.
|
||||
|
||||
publish_item(Nidx, Publisher, Model, MaxItems, ItemId, Payload, PubOpts) ->
|
||||
|
||||
@@ -368,7 +368,6 @@ mucsub_slave(Config) ->
|
||||
end, lists:seq(1, 5)),
|
||||
RSM = ?match(#iq{from = MyJIDBare, id = I, type = result,
|
||||
sub_els = [#mam_fin{xmlns = ?NS_MAM_2,
|
||||
id = QID,
|
||||
rsm = RSM,
|
||||
complete = true}]}, recv_iq(Config), RSM),
|
||||
match_rsm_count(RSM, 5),
|
||||
@@ -488,7 +487,6 @@ recv_fin(Config, I, QueryID, NS, IsComplete) when NS == ?NS_MAM_1; NS == ?NS_MAM
|
||||
ct:comment("Receiving fin iq for namespace '~s'", [NS]),
|
||||
#iq{type = result, id = I,
|
||||
sub_els = [#mam_fin{xmlns = NS,
|
||||
id = QueryID,
|
||||
complete = Complete,
|
||||
rsm = RSM}]} = recv_iq(Config),
|
||||
ct:comment("Checking if complete is ~s", [IsComplete]),
|
||||
@@ -553,7 +551,6 @@ recv_messages_from_room(Config, Range) ->
|
||||
end, Range),
|
||||
#iq{from = Room, id = I, type = result,
|
||||
sub_els = [#mam_fin{xmlns = ?NS_MAM_2,
|
||||
id = QID,
|
||||
rsm = RSM,
|
||||
complete = true}]} = recv_iq(Config),
|
||||
match_rsm_count(RSM, length(Range)).
|
||||
|
||||
@@ -184,7 +184,7 @@ single_test(T) ->
|
||||
|
||||
check_password(Username, Password) ->
|
||||
Secret = <<"cryptic">>,
|
||||
Password == base64:encode(crypto:hmac(sha, Secret, Username)).
|
||||
Password == base64:encode(misc:crypto_hmac(sha, Secret, Username)).
|
||||
|
||||
check_expires({_, _, _} = Expires) ->
|
||||
Now = {MegaSecs, Secs, MicroSecs} = erlang:timestamp(),
|
||||
|
||||
Executable
+131
@@ -0,0 +1,131 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Copyright © 2021 Adrien Bourmault (neox@os-k.eu)
|
||||
# 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 script is an example captcha script.
|
||||
# It takes the text to recognize in the captcha image as a parameter.
|
||||
# It return the image binary as a result. ejabberd support PNG, JPEG and GIF.
|
||||
|
||||
# The whole idea of the captcha script is to let server admins adapt it to
|
||||
# their own needs. The goal is to be able to make the captcha generation as
|
||||
# unique as possible, to make the captcha challenge difficult to bypass by
|
||||
# a bot.
|
||||
# Server admins are thus supposed to write and use their own captcha generators.
|
||||
|
||||
# This script relies on ImageMagick.
|
||||
# It is NOT compliant with ImageMagick forks like GraphicsMagick.
|
||||
|
||||
INPUT=$1
|
||||
|
||||
TRANSFORMATIONS=(INTRUDER SUM)
|
||||
DIGIT=(zero one two three four five six seven eight nine ten)
|
||||
|
||||
if test -n "${BASH_VERSION:-''}" ; then
|
||||
get_random ()
|
||||
{
|
||||
R=$RANDOM
|
||||
}
|
||||
else
|
||||
for n in $(od -A n -t u2 -N 64 /dev/urandom); do RL="$RL$n "; done
|
||||
get_random ()
|
||||
{
|
||||
R=${RL%% *}
|
||||
RL=${RL#* }
|
||||
}
|
||||
fi
|
||||
|
||||
INTRUDER()
|
||||
{
|
||||
NUMBERS=$(echo "$INPUT" | grep -o . | tr '\n' ' ')
|
||||
SORTED_UNIQ_NUM=$(echo "${NUMBERS[@]}" | sort -u | tr '\n' ' ')
|
||||
RANDOM_DIGITS=$(echo 123456789 | grep -o . | sort -R | tr '\n' ' ')
|
||||
INTRUDER=-1
|
||||
|
||||
for i in $RANDOM_DIGITS
|
||||
do
|
||||
if [[ ! " ${SORTED_UNIQ_NUM[@]} " =~ ${i} ]]; then
|
||||
INTRUDER=$i
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# Worst case
|
||||
if [[ $INTRUDER -eq "-1" ]]
|
||||
then
|
||||
printf "Type %s \n without changes" "$INPUT"
|
||||
return
|
||||
fi
|
||||
|
||||
for num in ${NUMBERS}
|
||||
do
|
||||
get_random
|
||||
R=$((R % 100))
|
||||
|
||||
if [[ $R -lt 60 ]]; then
|
||||
NEWINPUT=${NEWINPUT}${num}${INTRUDER}
|
||||
else
|
||||
NEWINPUT=${NEWINPUT}${num}
|
||||
fi
|
||||
done
|
||||
|
||||
get_random
|
||||
R=$((R % 100))
|
||||
|
||||
if [[ $R -lt 50 ]]; then
|
||||
printf "Type %s by\n deleting the %s" "$NEWINPUT" "${DIGIT[$INTRUDER]}"
|
||||
else
|
||||
printf "Enter %s by\n removing the %s" "$NEWINPUT" "${DIGIT[$INTRUDER]}"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
SUM()
|
||||
{
|
||||
get_random
|
||||
RA=$((R % 100))
|
||||
|
||||
if [[ $((INPUT % 2)) -eq 0 ]]; then
|
||||
A=$((INPUT - RA))
|
||||
B=$RA
|
||||
else
|
||||
B=$((INPUT - RA))
|
||||
A=$RA
|
||||
fi
|
||||
|
||||
get_random
|
||||
R=$((R % 100))
|
||||
|
||||
if [[ $R -lt 25 ]]; then
|
||||
printf "Type the result\n of %s + %s" "$A" "$B"
|
||||
elif [[ $R -lt 50 ]]; then
|
||||
printf "SUMx\n %s and %s" "$A" "$B"
|
||||
elif [[ $R -lt 75 ]]; then
|
||||
printf "Add\n %s and %s" "$A" "$B"
|
||||
else
|
||||
printf "Enter the result\n of %s + %s" "$A" "$B"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
get_random
|
||||
|
||||
RAND_ITALIC=$((R % 25))
|
||||
get_random
|
||||
|
||||
RAND_ANGLE=$((R % 3))
|
||||
get_random
|
||||
|
||||
RAND_INDEX=$((R % ${#TRANSFORMATIONS[@]}))
|
||||
|
||||
convert -size 300x60 xc:none -pointsize 20 \
|
||||
\( -clone 0 -fill black \
|
||||
-stroke black -strokewidth 1 \
|
||||
-annotate "${RAND_ANGLE}x${RAND_ITALIC}+0+0" "\n $(${TRANSFORMATIONS[$RAND_INDEX]})" \
|
||||
-roll +"$ROLL_X"+0 \
|
||||
-wave "$WAVE1_AMPLITUDE"x"$WAVE1_LENGTH" \
|
||||
-roll -"$ROLL_X"+0 \) \
|
||||
-flatten -crop 300x60 +repage -quality 500 -depth 11 png:-
|
||||
+14
-13
@@ -10,7 +10,7 @@
|
||||
|
||||
extract_lang_src2pot ()
|
||||
{
|
||||
./tools/extract-tr.sh src deps/xmpp/src > $PO_DIR/ejabberd.pot
|
||||
./tools/extract-tr.sh src $DEPS_DIR/xmpp/src > $PO_DIR/ejabberd.pot
|
||||
}
|
||||
|
||||
extract_lang_popot2po ()
|
||||
@@ -48,7 +48,11 @@ extract_lang_po2msg ()
|
||||
msgattrib $PO_PATH --translated --no-fuzzy --no-obsolete --no-location --no-wrap | grep "^msg" | tail --lines=+3 >$MS_PATH
|
||||
grep "^msgid" $PO_PATH.ms | sed 's/^msgid //g' >$MSGID_PATH
|
||||
grep "^msgstr" $PO_PATH.ms | sed 's/^msgstr //g' >$MSGSTR_PATH
|
||||
echo "%% -*- coding: utf-8 -*-" >$MSGS_PATH
|
||||
echo "%% Generated automatically" >$MSGS_PATH
|
||||
echo "%% DO NOT EDIT: run \`make translations\` instead" >>$MSGS_PATH
|
||||
echo "%% To improve translations please read:" >>$MSGS_PATH
|
||||
echo "%% https://docs.ejabberd.im/developer/extending-ejabberd/localization/" >>$MSGS_PATH
|
||||
echo "" >>$MSGS_PATH
|
||||
paste $MSGID_PATH $MSGSTR_PATH --delimiter=, | awk '{print "{" $0 "}."}' | sort -g >>$MSGS_PATH
|
||||
|
||||
rm $MS_PATH
|
||||
@@ -99,19 +103,16 @@ extract_lang_updateall ()
|
||||
|
||||
EJA_DIR=`pwd`
|
||||
PROJECT=ejabberd
|
||||
DEPS_DIR=$1
|
||||
MSGS_DIR=$EJA_DIR/priv/msgs
|
||||
LOG=/tmp/ejabberd-translate-errors.log
|
||||
if [ -f $EJA_DIR/deps/ejabberd_po/src/ejabberd.pot ]; then
|
||||
PO_DIR=$EJA_DIR/deps/ejabberd_po/src/
|
||||
else
|
||||
if [ -f $EJA_DIR/_build/default/lib/ejabberd_po/src/ejabberd.pot ]; then
|
||||
PO_DIR=$EJA_DIR/_build/default/lib/ejabberd_po/src
|
||||
else
|
||||
echo "Couldn't find the required ejabberd_po repository."
|
||||
echo "Run: ./configure --enable-tools; ./rebar get-deps"
|
||||
exit 1
|
||||
fi
|
||||
PO_DIR=$EJA_DIR/$DEPS_DIR/ejabberd_po/src/
|
||||
if [ ! -f $EJA_DIR/$DEPS_DIR/ejabberd_po/src/ejabberd.pot ]; then
|
||||
echo "Couldn't find the required ejabberd_po repository in"
|
||||
echo " $PO_DIR"
|
||||
echo "Run: ./configure --enable-tools; ./rebar get-deps"
|
||||
exit 1
|
||||
fi
|
||||
echo "Using PO files found in $PO_DIR."
|
||||
echo "Using PO files from $PO_DIR."
|
||||
|
||||
extract_lang_updateall
|
||||
|
||||
@@ -65,7 +65,7 @@ sub update_deps_repos {
|
||||
say "Downloading $dep...";
|
||||
my $repo = $deps->{$dep}->{repo};
|
||||
$repo =~ s!^https?://github.com/!git\@github.com:!;
|
||||
system("git", "-C", ".deps-update", "clone", $repo);
|
||||
system("git", "-C", ".deps-update", "clone", $repo, $dep);
|
||||
} elsif (time() - stat($dd)->mtime > 24 * 60 * 60 or $force) {
|
||||
say "Updating $dep...";
|
||||
system("git", "-C", $dd, "pull");
|
||||
@@ -332,7 +332,7 @@ sub git_tag {
|
||||
my ($dep, $ver, $msg) = @_;
|
||||
|
||||
system("git", "-C", ".deps-update/$dep", "commit", "-a", "-m", $msg);
|
||||
system("git", "-C", ".deps-update/$dep", "tag", $ver);
|
||||
system("git", "-C", ".deps-update/$dep", "tag", $ver, "-a", "-m", $msg);
|
||||
}
|
||||
|
||||
sub git_push {
|
||||
|
||||
+2
-1
@@ -23,7 +23,6 @@
|
||||
{full_xml, @full_xml@}.
|
||||
{db_type, @db_type@}.
|
||||
{debug, @debug@}.
|
||||
{hipe, @hipe@}.
|
||||
{new_sql_schema, @new_sql_schema@}.
|
||||
|
||||
%% Ad-hoc directories with source files
|
||||
@@ -40,11 +39,13 @@
|
||||
{elixir, @elixir@}.
|
||||
{stun, @stun@}.
|
||||
{sip, @sip@}.
|
||||
{lua, @lua@}.
|
||||
|
||||
%% Version
|
||||
{vsn, "@PACKAGE_VERSION@"}.
|
||||
|
||||
%% Variables for overlay template files
|
||||
{description, "@PACKAGE_NAME@"}.
|
||||
|
||||
%% Platform-specific installation paths
|
||||
{release, true}.
|
||||
|
||||
Reference in New Issue
Block a user