summaryrefslogtreecommitdiff
path: root/src/translate.erl
blob: 062ed846bd090cf4d9c1be9a9615a93cbcc7339a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
%%%----------------------------------------------------------------------
%%% File    : translate.erl
%%% Author  : Alexey Shchepin <alexey@sevcom.net>
%%% Purpose : 
%%% Created :  6 Jan 2003 by Alexey Shchepin <alexey@sevcom.net>
%%% Id      : $Id$
%%%----------------------------------------------------------------------

-module(translate).
-author('alexey@sevcom.net').

-export([start/0,
	 load_dir/1,
	 load_file/2,
	 translate/2]).

-include("ejabberd.hrl").

start() ->
    ets:new(translations, [named_table, public]),
    load_dir(?MSGS_DIR),
    ok.

load_dir(Dir) ->
    {ok, Files} = file:list_dir(Dir),
    MsgFiles = lists:filter(
		 fun(FN) ->
			 case string:len(FN) > 4 of
			     true ->
				 string:substr(FN,
					       string:len(FN) - 3) == ".msg";
			     _ ->
				 false
			 end
		 end, Files),
    lists:foreach(
      fun(FN) ->
	      load_file(string:substr(FN, 1, string:len(FN) - 4),
			Dir ++ "/" ++ FN)
      end, MsgFiles),
    ok.

load_file(Lang, File) ->
    case file:consult(File) of
	{ok, Terms} ->
	    lists:foreach(fun({Orig, Trans}) ->
				  ets:insert(translations,
					     {{Lang, Orig}, Trans})
			  end, Terms);
	{error, Reason} ->
	    exit(file:format_error(Reason))
    end.

translate(Lang, Msg) ->
    case ets:lookup(translations, {Lang, Msg}) of
	[{_, Trans}] ->
	    Trans;
	_ ->
	    Msg
    end.