diff options
Diffstat (limited to 'src/translate.erl')
| -rw-r--r-- | src/translate.erl | 57 |
1 files changed, 38 insertions, 19 deletions
diff --git a/src/translate.erl b/src/translate.erl index 0488530f3..391d22574 100644 --- a/src/translate.erl +++ b/src/translate.erl @@ -32,6 +32,8 @@ load_file/2, translate/2]). +-export([tokens/2, ascii_tolower/1]). + -include("ejabberd.hrl"). start() -> @@ -67,13 +69,13 @@ load_dir(Dir) -> end, Files), lists:foreach( fun(FN) -> - LP = ascii_tolower( - string:substr(FN, 1, string:len(FN) - 4)), - L = case string:tokens(LP, ".") of - [Language] -> Language; - [Language, _Project] -> Language - end, - load_file(L, Dir ++ "/" ++ FN) + LP = string:substr(FN, 1, string:len(FN) - 4), + L1 = case string:tokens(LP, ".") of + [Language] -> Language; + [Language, _Project] -> Language + end, + L2 = ascii_tolower(list_to_binary(L1)), + load_file(L2, Dir ++ "/" ++ FN) end, MsgFiles), ok; {error, Reason} -> @@ -111,14 +113,14 @@ translate(Lang, Msg) -> [{_, Trans}] -> Trans; _ -> - ShortLang = case string:tokens(LLang, "-") of + ShortLang = case tokens(LLang, $-) of [] -> LLang; [SL | _] -> SL end, case ShortLang of - "en" -> + <<"en">> -> Msg; LLang -> translate(Msg); @@ -133,27 +135,29 @@ translate(Lang, Msg) -> end. translate(Msg) -> + %%TODO: ?MYLANG macro returns lang as a list(). Lang should be a binary. case ?MYLANG of undefined -> Msg; "en" -> Msg; Lang -> - LLang = ascii_tolower(Lang), + BLang = list_to_binary(Lang), + LLang = ascii_tolower(BLang), case ets:lookup(translations, {LLang, Msg}) of [{_, Trans}] -> Trans; _ -> - ShortLang = case string:tokens(LLang, "-") of + ShortLang = case tokens(LLang, $-) of [] -> LLang; [SL | _] -> SL end, case ShortLang of - "en" -> + <<"en">> -> Msg; - Lang -> + BLang -> Msg; _ -> case ets:lookup(translations, {ShortLang, Msg}) of @@ -166,10 +170,25 @@ translate(Msg) -> end end. -ascii_tolower([C | Cs]) when C >= $A, C =< $Z -> - [C + ($a - $A) | ascii_tolower(Cs)]; -ascii_tolower([C | Cs]) -> - [C | ascii_tolower(Cs)]; -ascii_tolower([]) -> - []. +ascii_tolower(undefined) -> + <<>>; +ascii_tolower(Bin) -> + << <<(char_tolower(X))>> || <<X>> <= Bin >>. + +char_tolower(C) when C >= $A, C =< $Z -> + C + ($a -$A); +char_tolower(C) -> + C. + +tokens(<<>>,_Sep) -> + []; +tokens(Bin, Sep) -> + tokens(Bin, Sep, <<>>, []). + +tokens(<<>>, _Sep, T, Tokens) -> + lists:reverse([T|Tokens]); +tokens(<<Sep, R/binary>>, Sep, T, Tokens) -> + tokens(R, Sep, <<>>, [T | Tokens]); +tokens(<<C, R/binary>>, Sep, T, Tokens) -> + tokens(R, Sep, <<T/binary, C>>, Tokens). |
