Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlexey Shchepin <alexey@process-one.net>2004-07-10 02:34:26 +0400
committerAlexey Shchepin <alexey@process-one.net>2004-07-10 02:34:26 +0400
commitd2eab0d5350cd2fc09987d43f39b7f00dde406d6 (patch)
tree385b91b97e0729b391d7a93eaaa813ac9fc78105 /src
parentb88da95b514780a673e38fc1fb3c5124364c9fb7 (diff)
* doc/guide.tex: Updated
* src/msgs/fr.msg: Updated (thanks to Sergei Golovan) * src/mod_irc/mod_irc.erl: Added handler for disco items requests (thanks to Sergei Golovan) * src/mod_vcard.erl: Added option for JUD disabling (thanks to Sergei Golovan) * src/mod_configure2.erl: Fixed module stopping (thanks to Sergei Golovan) * src/mod_last.erl: Likewise * src/mod_privacy.erl: Likewise * src/mod_register.erl: Likewise * src/mod_roster.erl: Likewise * src/mod_vcard.erl: Likewise * src/jd2ejd.erl: Added emergency catches (thanks to Sergei Golovan) * src/mod_last.erl: Likewise * src/ejabberd_sm.erl: Removed needless call to mod_disco:unregister_feature (thanks to Sergei Golovan) * src/ejabberd_local.erl: Better support for mod_disco (thanks to Sergei Golovan) * src/mod_disco.erl: Likewise * src/translate.erl: Suport for "default language" option (thanks to Sergei Golovan) * src/ejabberd_config.erl: Likewise * src/ejabberd_c2s.erl: Likewise * src/ejabberd.hrl: Added 'MYLANG' macros * src/ejabberd.cfg.example: Updated (thanks to Sergei Golovan) * doc/guide.tex: Updated (thanks to Sergei Golovan) * src/win32/ejabberd.cfg: Updated (thanks to Sergei Golovan) SVN Revision: 241
Diffstat (limited to 'src')
-rw-r--r--src/ejabberd.cfg.example3
-rw-r--r--src/ejabberd.hrl1
-rw-r--r--src/ejabberd_c2s.erl17
-rw-r--r--src/ejabberd_config.erl2
-rw-r--r--src/ejabberd_local.erl24
-rw-r--r--src/ejabberd_sm.erl1
-rw-r--r--src/jd2ejd.erl41
-rw-r--r--src/mod_configure2.erl3
-rw-r--r--src/mod_disco.erl10
-rw-r--r--src/mod_irc/mod_irc.erl8
-rw-r--r--src/mod_last.erl15
-rw-r--r--src/mod_privacy.erl4
-rw-r--r--src/mod_register.erl7
-rw-r--r--src/mod_roster.erl6
-rw-r--r--src/mod_vcard.erl30
-rw-r--r--src/msgs/fr.msg128
-rw-r--r--src/translate.erl53
-rw-r--r--src/win32/ejabberd.cfg69
18 files changed, 312 insertions, 110 deletions
diff --git a/src/ejabberd.cfg.example b/src/ejabberd.cfg.example
index 2285ef84a..f9668b665 100644
--- a/src/ejabberd.cfg.example
+++ b/src/ejabberd.cfg.example
@@ -86,6 +86,9 @@
{host, "localhost"}.
+% Default language for server messages
+{language, "en"}.
+
% Listened ports:
{listen,
[{5222, ejabberd_c2s, [{access, c2s}, {shaper, c2s_shaper}]},
diff --git a/src/ejabberd.hrl b/src/ejabberd.hrl
index 042e5f125..5a6d391f9 100644
--- a/src/ejabberd.hrl
+++ b/src/ejabberd.hrl
@@ -31,6 +31,7 @@
-define(MYNAME, ejabberd_config:get_global_option(host)).
-define(S2STIMEOUT, 600000).
%-define(S2STIMEOUT, 6000).
+-define(MYLANG, ejabberd_config:get_global_option(language)).
-define(MSGS_DIR, "msgs").
-define(CONFIG_PATH, "ejabberd.cfg").
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl
index 5b771cb83..63a19bd8f 100644
--- a/src/ejabberd_c2s.erl
+++ b/src/ejabberd_c2s.erl
@@ -70,7 +70,7 @@
"<?xml version='1.0'?>"
"<stream:stream xmlns='jabber:client' "
"xmlns:stream='http://etherx.jabber.org/streams' "
- "id='~s' from='~s'~s>"
+ "id='~s' from='~s'~s~s>"
).
-define(STREAM_TRAILER, "</stream:stream>").
@@ -131,6 +131,12 @@ init([{SockMod, Socket}, Opts]) ->
%%----------------------------------------------------------------------
wait_for_stream({xmlstreamstart, _Name, Attrs}, StateData) ->
+ DefaultLang = case ?MYLANG of
+ undefined ->
+ " xml:lang='en'";
+ DL ->
+ " xml:lang='" ++ DL ++ "'"
+ end,
case xml:get_attr_s("xmlns:stream", Attrs) of
?NS_STREAM ->
Lang = xml:get_attr_s("xml:lang", Attrs),
@@ -139,7 +145,8 @@ wait_for_stream({xmlstreamstart, _Name, Attrs}, StateData) ->
Header = io_lib:format(?STREAM_HEADER,
[StateData#state.streamid,
?MYNAME,
- " version='1.0'"]),
+ " version='1.0'",
+ DefaultLang]),
send_text(StateData, Header),
case StateData#state.authentificated of
false ->
@@ -181,14 +188,14 @@ wait_for_stream({xmlstreamstart, _Name, Attrs}, StateData) ->
_ ->
Header = io_lib:format(
?STREAM_HEADER,
- [StateData#state.streamid, ?MYNAME, ""]),
+ [StateData#state.streamid, ?MYNAME, "", DefaultLang]),
send_text(StateData, Header),
{next_state, wait_for_auth, StateData#state{lang = Lang}}
end;
_ ->
Header = io_lib:format(
?STREAM_HEADER,
- [StateData#state.streamid, ?MYNAME, ""]),
+ [StateData#state.streamid, ?MYNAME, "", ""]),
send_text(StateData,
Header ++ ?INVALID_NS_ERR ++ ?STREAM_TRAILER),
{stop, normal, StateData}
@@ -196,7 +203,7 @@ wait_for_stream({xmlstreamstart, _Name, Attrs}, StateData) ->
wait_for_stream({xmlstreamerror, _}, StateData) ->
Header = io_lib:format(?STREAM_HEADER,
- ["none", ?MYNAME, " version='1.0'"]),
+ ["none", ?MYNAME, " version='1.0'", ""]),
send_text(StateData,
Header ++ ?INVALID_XML_ERR ++ ?STREAM_TRAILER),
{stop, normal, StateData};
diff --git a/src/ejabberd_config.erl b/src/ejabberd_config.erl
index 6b93c4954..2642e2ad0 100644
--- a/src/ejabberd_config.erl
+++ b/src/ejabberd_config.erl
@@ -78,6 +78,8 @@ add_option(Opt, Val, State) ->
Table = case Opt of
host ->
config;
+ language ->
+ config;
_ ->
local_config
end,
diff --git a/src/ejabberd_local.erl b/src/ejabberd_local.erl
index cf46e73fc..5c91e280a 100644
--- a/src/ejabberd_local.erl
+++ b/src/ejabberd_local.erl
@@ -14,7 +14,8 @@
-export([register_iq_handler/3,
register_iq_handler/4,
- unregister_iq_handler/1
+ unregister_iq_handler/1,
+ refresh_iq_handlers/0
]).
-include("ejabberd.hrl").
@@ -47,11 +48,11 @@ loop(State) ->
loop(State);
{register_iq_handler, XMLNS, Module, Function} ->
ets:insert(State#state.iqtable, {XMLNS, Module, Function}),
- mod_disco:register_feature(XMLNS),
+ catch mod_disco:register_feature(XMLNS),
loop(State);
{register_iq_handler, XMLNS, Module, Function, Opts} ->
ets:insert(State#state.iqtable, {XMLNS, Module, Function, Opts}),
- mod_disco:register_feature(XMLNS),
+ catch mod_disco:register_feature(XMLNS),
loop(State);
{unregister_iq_handler, XMLNS} ->
case ets:lookup(State#state.iqtable, XMLNS) of
@@ -61,7 +62,20 @@ loop(State) ->
ok
end,
ets:delete(State#state.iqtable, XMLNS),
- mod_disco:unregister_feature(XMLNS),
+ catch mod_disco:unregister_feature(XMLNS),
+ loop(State);
+ refresh_iq_handlers ->
+ lists:map(
+ fun(T) ->
+ case T of
+ {XMLNS, _Module, _Function, _Opts} ->
+ catch mod_disco:register_feature(XMLNS);
+ {XMLNS, _Module, _Function} ->
+ catch mod_disco:register_feature(XMLNS);
+ _ ->
+ ok
+ end
+ end, ets:tab2list(State#state.iqtable)),
loop(State);
_ ->
loop(State)
@@ -142,6 +156,8 @@ register_iq_handler(XMLNS, Module, Fun, Opts) ->
unregister_iq_handler(XMLNS) ->
ejabberd_local ! {unregister_iq_handler, XMLNS}.
+refresh_iq_handlers() ->
+ ejabberd_local ! refresh_iq_handlers.
announce_online(From, To, Packet) ->
case acl:match_rule(announce, From) of
diff --git a/src/ejabberd_sm.erl b/src/ejabberd_sm.erl
index ef495d544..d2c278545 100644
--- a/src/ejabberd_sm.erl
+++ b/src/ejabberd_sm.erl
@@ -80,7 +80,6 @@ loop() ->
ok
end,
ets:delete(sm_iqtable, XMLNS),
- mod_disco:unregister_feature(XMLNS),
loop();
_ ->
loop()
diff --git a/src/jd2ejd.erl b/src/jd2ejd.erl
index 8bcbb30fe..1fff78149 100644
--- a/src/jd2ejd.erl
+++ b/src/jd2ejd.erl
@@ -105,38 +105,39 @@ xdb_data({xmlstreamelement, El}, StateData) ->
ejabberd_auth:set_password(StateData#state.user, Password),
StateData;
?NS_ROSTER ->
- %mod_roster:process_iq(From,
- % {"", ?MYNAME, ""},
- % #iq{type = set, xmlns = ?NS_ROSTER, sub_el = El}),
- mod_roster:set_items(StateData#state.user, El),
+ %catch mod_roster:process_iq(
+ % From,
+ % {"", ?MYNAME, ""},
+ % #iq{type = set, xmlns = ?NS_ROSTER, sub_el = El}),
+ catch mod_roster:set_items(StateData#state.user, El),
StateData;
?NS_VCARD ->
- mod_vcard:process_sm_iq(
- From,
- jlib:make_jid("", ?MYNAME, ""),
- #iq{type = set, xmlns = ?NS_VCARD, sub_el = El}),
+ catch mod_vcard:process_sm_iq(
+ From,
+ jlib:make_jid("", ?MYNAME, ""),
+ #iq{type = set, xmlns = ?NS_VCARD, sub_el = El}),
StateData;
"jabber:x:offline" ->
process_offline(From, El),
StateData;
%?NS_REGISTER ->
- % mod_register:process_iq(
- % {"", "", ""}, {"", ?MYNAME, ""},
- % #iq{type =set, xmlns = ?NS_REGISTER, xub_el = El}),
+ % catch mod_register:process_iq(
+ % {"", "", ""}, {"", ?MYNAME, ""},
+ % #iq{type =set, xmlns = ?NS_REGISTER, xub_el = El}),
% User = xml:get_path_s(El, [{elem, "username"}, cdata]),
% io:format("user ~s~n", [User]),
% StateData;
XMLNS ->
case xml:get_attr_s("j_private_flag", Attrs) of
"1" ->
- mod_private:process_local_iq(
- From,
- jlib:make_jid("", ?MYNAME, ""),
- #iq{type = set, xmlns = ?NS_PRIVATE,
- sub_el = {xmlelement, "query", [],
- [jlib:remove_attr(
- "j_private_flag",
- jlib:remove_attr("xdbns", El))]}}),
+ catch mod_private:process_local_iq(
+ From,
+ jlib:make_jid("", ?MYNAME, ""),
+ #iq{type = set, xmlns = ?NS_PRIVATE,
+ sub_el = {xmlelement, "query", [],
+ [jlib:remove_attr(
+ "j_private_flag",
+ jlib:remove_attr("xdbns", El))]}}),
StateData;
_ ->
io:format("jd2ejd: Unknown namespace \"~s\"~n",
@@ -232,7 +233,7 @@ process_offline(To, {xmlelement, _, _, Els}) ->
error ->
ok;
_ ->
- mod_offline:store_packet(From, To, El)
+ catch mod_offline:store_packet(From, To, El)
end
end, Els).
diff --git a/src/mod_configure2.erl b/src/mod_configure2.erl
index 78366400f..58eb387a4 100644
--- a/src/mod_configure2.erl
+++ b/src/mod_configure2.erl
@@ -28,8 +28,7 @@ start(Opts) ->
ok.
stop() ->
- gen_iq_handler:remove_iq_handler(ejabberd_local, ?NS_IQDATA),
- gen_iq_handler:remove_iq_handler(ejabberd_sm, ?NS_IQDATA).
+ gen_iq_handler:remove_iq_handler(ejabberd_local, ?NS_ECONFIGURE).
process_local_iq(From, _To, #iq{type = Type, lang = Lang, sub_el = SubEl} = IQ) ->
diff --git a/src/mod_disco.erl b/src/mod_disco.erl
index e4063f13a..af992df0b 100644
--- a/src/mod_disco.erl
+++ b/src/mod_disco.erl
@@ -33,6 +33,8 @@
{"node", SNode}], []}]}).
start(Opts) ->
+ ejabberd_local:refresh_iq_handlers(),
+
IQDisc = gen_mod:get_opt(iqdisc, Opts, one_queue),
gen_iq_handler:add_iq_handler(ejabberd_local, ?NS_DISCO_ITEMS,
?MODULE, process_local_iq_items, IQDisc),
@@ -42,9 +44,12 @@ start(Opts) ->
?MODULE, process_sm_iq_items, IQDisc),
gen_iq_handler:add_iq_handler(ejabberd_sm, ?NS_DISCO_INFO,
?MODULE, process_sm_iq_info, IQDisc),
+
+ catch ets:new(disco_features, [named_table, ordered_set, public]),
register_feature("iq"),
register_feature("presence"),
register_feature("presence-invisible"),
+
catch ets:new(disco_extra_domains, [named_table, ordered_set, public]),
ExtraDomains = gen_mod:get_opt(extra_domains, Opts, []),
lists:foreach(fun register_extra_domain/1, ExtraDomains),
@@ -54,7 +59,10 @@ stop() ->
gen_iq_handler:remove_iq_handler(ejabberd_local, ?NS_DISCO_ITEMS),
gen_iq_handler:remove_iq_handler(ejabberd_local, ?NS_DISCO_INFO),
gen_iq_handler:remove_iq_handler(ejabberd_sm, ?NS_DISCO_ITEMS),
- gen_iq_handler:remove_iq_handler(ejabberd_sm, ?NS_DISCO_INFO).
+ gen_iq_handler:remove_iq_handler(ejabberd_sm, ?NS_DISCO_INFO),
+ catch ets:delete(disco_features),
+ catch ets:delete(disco_extra_domains),
+ ok.
register_feature(Feature) ->
diff --git a/src/mod_irc/mod_irc.erl b/src/mod_irc/mod_irc.erl
index a7afd5f06..9cfe26d6a 100644
--- a/src/mod_irc/mod_irc.erl
+++ b/src/mod_irc/mod_irc.erl
@@ -73,6 +73,14 @@ do_route(Host, From, To, Packet) ->
ejabberd_router:route(To,
From,
jlib:iq_to_xml(Res));
+ #iq{type = get, xmlns = ?NS_DISCO_ITEMS = XMLNS} = IQ ->
+ Res = IQ#iq{type = result,
+ sub_el = [{xmlelement, "query",
+ [{"xmlns", XMLNS}],
+ []}]},
+ ejabberd_router:route(To,
+ From,
+ jlib:iq_to_xml(Res));
#iq{xmlns = ?NS_REGISTER} = IQ ->
process_register(From, To, IQ);
#iq{type = get, xmlns = ?NS_VCARD = XMLNS,
diff --git a/src/mod_last.erl b/src/mod_last.erl
index ecda02719..bcff1ed8b 100644
--- a/src/mod_last.erl
+++ b/src/mod_last.erl
@@ -36,7 +36,8 @@ start(Opts) ->
?MODULE, process_sm_iq, IQDisc).
stop() ->
- gen_iq_handler:remove_iq_handler(ejabberd_local, ?NS_LAST).
+ gen_iq_handler:remove_iq_handler(ejabberd_local, ?NS_LAST),
+ gen_iq_handler:remove_iq_handler(ejabberd_sm, ?NS_LAST).
process_local_iq(_From, _To, #iq{type = Type, sub_el = SubEl} = IQ) ->
case Type of
@@ -66,11 +67,13 @@ process_sm_iq(From, To, #iq{type = Type, sub_el = SubEl} = IQ) ->
{'EXIT', _Reason} ->
get_last(IQ, SubEl, User);
List ->
- case mod_privacy:check_packet(
- User, List,
- {From, To,
- {xmlelement, "presence", [], []}},
- out) of
+ case catch mod_privacy:check_packet(
+ User, List,
+ {From, To,
+ {xmlelement, "presence", [], []}},
+ out) of
+ {'EXIT', _Reason} ->
+ get_last(IQ, SubEl, User);
allow ->
get_last(IQ, SubEl, User);
deny ->
diff --git a/src/mod_privacy.erl b/src/mod_privacy.erl
index 8ddb12b69..734b1e863 100644
--- a/src/mod_privacy.erl
+++ b/src/mod_privacy.erl
@@ -12,7 +12,7 @@
-behaviour(gen_mod).
--export([start/1,
+-export([start/1, stop/0,
process_iq/3,
process_iq_set/3,
process_iq_get/4,
@@ -49,6 +49,8 @@ start(Opts) ->
gen_iq_handler:add_iq_handler(ejabberd_sm, ?NS_PRIVACY,
?MODULE, process_iq, IQDisc).
+stop() ->
+ gen_iq_handler:remove_iq_handler(ejabberd_local, ?NS_PRIVACY).
process_iq(From, _To, IQ) ->
#iq{type = Type, sub_el = SubEl} = IQ,
diff --git a/src/mod_register.erl b/src/mod_register.erl
index 0727c354e..a07c14e11 100644
--- a/src/mod_register.erl
+++ b/src/mod_register.erl
@@ -12,7 +12,7 @@
-behaviour(gen_mod).
--export([start/1, init/0, process_iq/3]).
+-export([start/1, stop/0, process_iq/3]).
-include("ejabberd.hrl").
-include("jlib.hrl").
@@ -25,8 +25,9 @@ start(Opts) ->
?MODULE, process_iq, IQDisc),
ok.
-init() ->
- ok.
+stop() ->
+ gen_iq_handler:remove_iq_handler(ejabberd_local, ?NS_REGISTER),
+ gen_iq_handler:remove_iq_handler(ejabberd_sm, ?NS_REGISTER).
process_iq(From, _To, #iq{type = Type, lang = Lang, sub_el = SubEl} = IQ) ->
case Type of
diff --git a/src/mod_roster.erl b/src/mod_roster.erl
index 0e02c619d..884f0dd7c 100644
--- a/src/mod_roster.erl
+++ b/src/mod_roster.erl
@@ -12,7 +12,7 @@
-behaviour(gen_mod).
--export([start/1,
+-export([start/1, stop/0,
process_iq/3,
process_local_iq/3,
get_subscription_lists/1,
@@ -44,6 +44,10 @@ start(Opts) ->
gen_iq_handler:add_iq_handler(ejabberd_sm, ?NS_ROSTER,
?MODULE, process_iq, IQDisc).
+stop() ->
+ gen_iq_handler:remove_iq_handler(ejabberd_sm, ?NS_ROSTER).
+
+
-define(PSI_ROSTER_WORKAROUND, true).
-ifdef(PSI_ROSTER_WORKAROUND).
diff --git a/src/mod_vcard.erl b/src/mod_vcard.erl
index 5f6bf4f5e..2dbc987c9 100644
--- a/src/mod_vcard.erl
+++ b/src/mod_vcard.erl
@@ -12,7 +12,7 @@
-behaviour(gen_mod).
--export([start/1, init/1,
+-export([start/1, init/2, stop/0,
process_local_iq/3,
process_sm_iq/3,
reindex_vcards/0,
@@ -64,14 +64,20 @@ start(Opts) ->
gen_iq_handler:add_iq_handler(ejabberd_sm, ?NS_VCARD,
?MODULE, process_sm_iq, IQDisc),
Host = gen_mod:get_opt(host, Opts, "vjud." ++ ?MYNAME),
- spawn(?MODULE, init, [Host]).
+ Search = gen_mod:get_opt(search, Opts, true),
+ register(ejabberd_mod_vcard, spawn(?MODULE, init, [Host, Search])).
-init(Host) ->
- ejabberd_router:register_route(Host),
- loop().
+init(Host, Search) ->
+ case Search of
+ true ->
+ ejabberd_router:register_route(Host),
+ loop(Host);
+ _ ->
+ loop(Host)
+ end.
-loop() ->
+loop(Host) ->
receive
{route, From, To, Packet} ->
case catch do_route(From, To, Packet) of
@@ -80,11 +86,19 @@ loop() ->
_ ->
ok
end,
- loop();
+ loop(Host);
+ stop ->
+ catch ejabberd_router:unregister_route(Host),
+ ok;
_ ->
- loop()
+ loop(Host)
end.
+stop() ->
+ gen_iq_handler:remove_iq_handler(ejabberd_local, ?NS_VCARD),
+ gen_iq_handler:remove_iq_handler(ejabberd_sm, ?NS_VCARD),
+ ejabberd_mod_vcard ! stop,
+ ok.
process_local_iq(_From, _To, #iq{type = Type, lang = Lang, sub_el = SubEl} = IQ) ->
case Type of
diff --git a/src/msgs/fr.msg b/src/msgs/fr.msg
index 980d2ac29..3e3843769 100644
--- a/src/msgs/fr.msg
+++ b/src/msgs/fr.msg
@@ -3,22 +3,39 @@
% mod_configure.erl
{"DB Tables Configuration", "Configuration des tables de BD"}.
{"Choose storage type of tables", "Choisissez un type de stockage pour les tables"}.
-{"", ""}.
-{"", ""}.
-{"", ""}.
-{"", ""}.
-{"", ""}.
-{"", ""}.
-{"", ""}.
-{"", ""}.
-{"", ""}.
-{"", ""}.
-{"", ""}.
-{"", ""}.
-{"", ""}.
-{"", ""}.
-{"", ""}.
-{"", ""}.
+{"RAM copy", ""}.
+{"RAM and disc copy", ""}.
+{"Disc only copy", ""}.
+{"Remote copy", ""}.
+{"Stop Modules at ", ""}.
+{"Choose modules to stop", ""}.
+{"Start Modules at ", ""}.
+{"Enter list of {Module, [Options]}", ""}.
+{"List of modules to start", ""}.
+{"Backup to File at ", ""}.
+{"Enter path to backup file", ""}.
+{"Path to File", ""}.
+{"Restore Backup from File at ", ""}.
+{"Dump Backup to Text File at ", ""}.
+{"Enter path to text file", ""}.
+{"Import User from File at ", ""}.
+{"Enter path to jabberd1.4 spool file", ""}.
+{"Import Users from Dir at ", ""}.
+{"Enter path to jabberd1.4 spool dir", ""}.
+{"Path to Dir", ""}.
+{"Hostname Configuration", ""}.
+{"Choose host name", ""}.
+{"Host name", ""}.
+{"Access Control List Configuration", ""}.
+{"Access control lists", ""}.
+{"Access Configuration", ""}.
+{"Access rules", ""}.
+{"Remove Users", ""}.
+{"Choose users to remove", ""}.
+{"Administration of ", ""}.
+{"Action on user", ""}.
+{"Edit Properties", ""}.
+{"Remove User", ""}.
% mod_disco.erl
{"Configuration", "Configuration"}.
@@ -30,24 +47,33 @@
{"Running Nodes", "Noeuds actifs"}.
{"Stopped Nodes", "Noeuds arrêtés"}.
{"Host Name", "Nom du serveur"}.
-{"ACLs", "ACLs"}.
+{"Access Control Lists", ""}.
{"Access Rules", "Règles d'accès"}.
{"Remove Users", "Supprimer des utilisateurs"}.
{"DB", "BD"}.
{"Modules", "Modules"}.
{"Start Modules", "Modules de démarrage"}.
{"Stop Modules", "Modules d'arrêt"}.
+{"Backup Management", ""}.
+{"Import users from jabberd1.4 spool files", ""}.
+{"Backup", ""}.
+{"Restore", ""}.
+{"Dump to Text File", ""}.
+{"Import File", ""}.
+{"Import Directory", ""}.
-
-
+% mod_register.erl
+{"Choose a username and password to register with this server", ""}.
% mod_vcard.erl
-{"You need a x:data capable client to search",
+{"Erlang Jabber Server\nCopyright (c) 2002-2004 Alexey Shchepin", ""}.
+{"ejabberd vCard module\nCopyright (c) 2003-2004 Alexey Shchepin", ""}.
+{"You need an x:data capable client to search",
"Vous avez besoin d'un client supportant x:data pour faire une recherche"}.
-{"Users Search", "Rechercher des utilisateurs"}.
+{"Search users in ", "Rechercher des utilisateurs "}.
{"Fill in fields to search for any matching Jabber User",
"Remplissez les champs pour rechercher n'importe quel utilisateur Jabber correspondant"}.
-{"Users Search Results", "Résultat de la recherche des utilisateurs"}.
+{"Results of search in ", "Résultat de la recherche des utilisateurs "}.
{"User", "Utilisateur"}.
{"Full Name", "Nom complet"}.
@@ -62,9 +88,25 @@
{"Organization Name", "Nom de l'organisation"}.
{"Organization Unit", "Unité de l'organisation"}.
+% mod_pubsub/mod_pubsub.erl
+{"ejabberd pub/sub module\nCopyright (c) 2003-2004 Alexey Shchepin", ""}.
-% mod_muc/mod_muc_room.erl
+% mod_muc/mod_muc.erl
+{"You need an x:data capable client to register nickname", ""}.
+{"Nickname Registration at ", ""}.
+{"Enter nickname you want to register", ""}.
+{"ejabberd MUC module\nCopyright (c) 2003-2004 Alexey Shchepin", ""}.
+{"Only service administrators are allowed to send service messages", ""}.
+{"Room creation is not allowed by service policy", ""}.
+{"Conference room does not exist", ""}.
+{"Access denied by service policy", ""}.
+{"You must fill in field \"nick\" in the form", ""}.
+{"Specified nickname is already registered", ""}.
+% mod_muc/mod_muc_room.erl
+{" has set the subject to: ", ""}.
+{"You need an x:data capable client to configure room", ""}.
+{"Configuration for ", ""}.
{"Room title", "Titre du salon"}.
{"Allow users to change subject?", "Autoriser les utilisateurs à changer le sujet ?"}.
{"Allow users to query other users?",
@@ -82,9 +124,49 @@
{"Allow users to send invites?",
"Autoriser des utilisateurs à envoyer des invitations ?"}.
{"Make room password protected?", "Créer un salon protégé par mot de passe ?"}.
+{"Password", ""}.
{"Make room anonymous?", "Créer un salon anonyme ?"}.
{"Enable logging?", "Activer la journalisation ?"}.
+{"Only moderators and participants are allowed to change subject in this room", ""}.
+{"Only moderators are allowed to change subject in this room", ""}.
+{"Visitors are not allowed to send messages to all occupants", ""}.
+{"Only occupants are allowed to send messages to the conference", ""}.
+{"It is not allowed to send normal messages to the conference", ""}.
+{"It is not allowed to send private messages to the conference", ""}.
+{"Improper message type", ""}.
+{"Nickname is already in use by another occupant", ""}.
+{"Nickname is registered by another person", ""}.
+{"It is not allowed to send private messages of type \"groupchat\"", ""}.
+{"Recipient is not in the conference room", ""}.
+{"Only occupants are allowed to send queries to the conference", ""}.
+{"Queries to the conference members are not allowed in this room", ""}.
+{"You have been banned from this room", ""}.
+{"Membership required to enter this room", ""}.
+{"Password required to enter this room", ""}.
+{"Incorrect password", ""}.
+{"Administrator privileges required", ""}.
+{"Moderator privileges required", ""}.
+{"JID ~s is invalid", ""}.
+{"Nickname ~s does not exist in the room", ""}.
+{"Invalid affiliation: ~s", ""}.
+{"Invalid role: ~s", ""}.
+{"Owner privileges required", ""}.
+{"private, ", ""}.
+
+% mod_irc/mod_irc.erl
+{"ejabberd IRC module\nCopyright (c) 2003-2004 Alexey Shchepin", ""}.
+{"You need an x:data capable client to configure mod_irc settings", ""}.
+{"Registration in mod_irc for ", ""}.
+{"Enter username and encodings you wish to use for connecting to IRC servers", ""}.
+{"IRC Username", ""}.
+{"If you want to specify different encodings for IRC servers, fill this list with values in format '{\"irc server\", \"encoding\"}'. By default this service use \"~s\" encoding.", ""}.
+{"Example: [{\"irc.lucky.net\", \"koi8-r\"}, {\"vendetta.fef.net\", \"iso8859-1\"}].", ""}.
+{"Encodings", ""}.
+% web/ejabberd_web_admin.erl
+{"Users", ""}.
+{"Nodes", ""}.
+{"Statistics", ""}.
% Local Variables:
% mode: erlang
diff --git a/src/translate.erl b/src/translate.erl
index ebdd96472..664cbed49 100644
--- a/src/translate.erl
+++ b/src/translate.erl
@@ -60,8 +60,14 @@ load_file(Lang, File) ->
case file:consult(File) of
{ok, Terms} ->
lists:foreach(fun({Orig, Trans}) ->
- ets:insert(translations,
- {{Lang, Orig}, Trans})
+ Trans1 = case Trans of
+ "" ->
+ Orig;
+ _ ->
+ Trans
+ end,
+ ets:insert(translations,
+ {{Lang, Orig}, Trans1})
end, Terms);
{error, Reason} ->
exit(file:format_error(Reason))
@@ -72,6 +78,47 @@ translate(Lang, Msg) ->
[{_, Trans}] ->
Trans;
_ ->
- Msg
+ ShortLang = string:substr(Lang, 1, 2),
+ case ShortLang of
+ "en" ->
+ Msg;
+ Lang ->
+ translate(Msg);
+ _ ->
+ case ets:lookup(translations, {ShortLang, Msg}) of
+ [{_, Trans}] ->
+ Trans;
+ _ ->
+ translate(Msg)
+ end
+ end
+ end.
+
+translate(Msg) ->
+ case ?MYLANG of
+ undefined ->
+ Msg;
+ "en" ->
+ Msg;
+ Lang ->
+ case ets:lookup(translations, {Lang, Msg}) of
+ [{_, Trans}] ->
+ Trans;
+ _ ->
+ ShortLang = string:substr(Lang, 1, 2),
+ case ShortLang of
+ "en" ->
+ Msg;
+ Lang ->
+ Msg;
+ _ ->
+ case ets:lookup(translations, {ShortLang, Msg}) of
+ [{_, Trans}] ->
+ Trans;
+ _ ->
+ Msg
+ end
+ end
+ end
end.
diff --git a/src/win32/ejabberd.cfg b/src/win32/ejabberd.cfg
index 2aa6788bd..1e2b2081b 100644
--- a/src/win32/ejabberd.cfg
+++ b/src/win32/ejabberd.cfg
@@ -64,6 +64,9 @@
% Admins of this server are also admins of MUC service:
{access, muc_admin, [{allow, admin}]}.
+% All users are allowed to use MUC service:
+{access, muc, [{allow, all}]}.
+
% This rule allows access only for local users:
{access, local, [{allow, local}]}.
@@ -84,44 +87,46 @@
% Listened ports:
-{listen, [{5222, ejabberd_c2s, [{access, c2s},
- {shaper, c2s_shaper}]},
-% {5223, ejabberd_c2s, [{access, c2s},
-% {ssl, [{certfile, "./cert.pem"}]}]},
- {5269, ejabberd_s2s_in, [{shaper, s2s_shaper}]}%,
-% {5555, ejabberd_service, [{host, "icq.localhost", [{password, "someSecret"}]}]},
-% {8888, ejabberd_service, [%{access, local},
-% {hosts,
-% ["conference.e.localhost",
-% "muc.e.localhost"],
-% [{password, "secret"}]}]}
- ]}.
+{listen,
+ [{5222, ejabberd_c2s, [{access, c2s}, {shaper, c2s_shaper}]},
+% {5223, ejabberd_c2s, [{access, c2s}, ssl, {certfile, "./ssl.pem"}]},
+ {5269, ejabberd_s2s_in, [{shaper, s2s_shaper}]},
+% {5555, ejabberd_service, [{access, all},
+% {host, "icq.localhost", [{password, "secret"}]}]},
+ {5280, ejabberd_http, [http_poll, web_admin]}
+ ]}.
% If SRV lookup fails, then port 5269 is used to communicate with remote server
{outgoing_s2s_port, 5269}.
% Used modules:
-{modules, [
- {mod_register, []},
- {mod_roster, []},
- {mod_privacy, []},
- {mod_configure, []},
- {mod_disco, []},
- {mod_stats, []},
- {mod_vcard, []},
- {mod_offline, []},
- {mod_echo, [{host, "echo.localhost"}]},
- {mod_private, []},
- {mod_irc, []},
- {mod_muc, []},
- {mod_pubsub, []},
- {mod_time, []},
- {mod_last, []},
- {mod_version, []}
- ]}.
-
-
+{modules,
+ [
+ {mod_register, []},
+ {mod_roster, []},
+ {mod_privacy, []},
+ {mod_configure, []},
+ {mod_disco, []},
+ {mod_stats, []},
+ {mod_vcard, []},
+ {mod_offline, []},
+ {mod_private, []},
+ {mod_irc, []},
+ {mod_muc, []},
+% Default options for mod_muc:
+% host: "conference." ++ ?MYNAME
+% access: all
+% access_create: all
+% access_admin: none (only room creator has owner privileges)
+ {mod_muc, [{access, muc},
+ {access_create, muc},
+ {access_admin, muc_admin}]},
+ {mod_pubsub, []},
+ {mod_time, []},
+ {mod_last, []},
+ {mod_version, []}
+ ]}.
% Local Variables: