diff options
author | Alexey Shchepin <alexey@process-one.net> | 2004-07-10 02:34:26 +0400 |
---|---|---|
committer | Alexey Shchepin <alexey@process-one.net> | 2004-07-10 02:34:26 +0400 |
commit | d2eab0d5350cd2fc09987d43f39b7f00dde406d6 (patch) | |
tree | 385b91b97e0729b391d7a93eaaa813ac9fc78105 /src | |
parent | b88da95b514780a673e38fc1fb3c5124364c9fb7 (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.example | 3 | ||||
-rw-r--r-- | src/ejabberd.hrl | 1 | ||||
-rw-r--r-- | src/ejabberd_c2s.erl | 17 | ||||
-rw-r--r-- | src/ejabberd_config.erl | 2 | ||||
-rw-r--r-- | src/ejabberd_local.erl | 24 | ||||
-rw-r--r-- | src/ejabberd_sm.erl | 1 | ||||
-rw-r--r-- | src/jd2ejd.erl | 41 | ||||
-rw-r--r-- | src/mod_configure2.erl | 3 | ||||
-rw-r--r-- | src/mod_disco.erl | 10 | ||||
-rw-r--r-- | src/mod_irc/mod_irc.erl | 8 | ||||
-rw-r--r-- | src/mod_last.erl | 15 | ||||
-rw-r--r-- | src/mod_privacy.erl | 4 | ||||
-rw-r--r-- | src/mod_register.erl | 7 | ||||
-rw-r--r-- | src/mod_roster.erl | 6 | ||||
-rw-r--r-- | src/mod_vcard.erl | 30 | ||||
-rw-r--r-- | src/msgs/fr.msg | 128 | ||||
-rw-r--r-- | src/translate.erl | 53 | ||||
-rw-r--r-- | src/win32/ejabberd.cfg | 69 |
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: |