hm.erl 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. -module(hm).
  2. -compile([export_all, nowarn_export_all]).
  3. %-include_lib("nitro/include/nitro.hrl").
  4. -include_lib("n4u/include/wf.hrl").
  5. %-include_lib("kernel/include/file.hrl").
  6. %% help module
  7. %% get params
  8. % get_language_from_header(Req)
  9. % get_language_from_cookies(Name, Req)
  10. % get_language(Name, Req)
  11. % get_tr_mod()
  12. %% todo mv this funcs to framework
  13. %% other
  14. % assert_int(X)
  15. %% get params
  16. get_language_from_header(Req) ->
  17. #{headers := Headers} = Req,
  18. F1 = fun(K, V, Acc) ->
  19. Is_Same = <<"accept-language">> =:= string:lowercase(K),
  20. case Is_Same of
  21. true ->
  22. Is_A = <<"*">> =:= binary:part(V, {0, 1}),
  23. Is_E = <<>> =:= V,
  24. case {Is_A, Is_E} of
  25. {false, false} -> V;
  26. _ -> []
  27. end;
  28. _ -> Acc
  29. end
  30. end,
  31. Accept_language = maps:fold(F1, [], Headers),
  32. case Accept_language of
  33. [] -> en;
  34. Val ->
  35. <<Lang0:2/binary,_/binary>> = Val, %% Accept-Language: <<"uk,en;q=0.5">> %% <<"fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5">>
  36. Lang = try erlang:binary_to_existing_atom(Lang0, latin1)
  37. catch _:_ -> en
  38. end,
  39. case lists:member(Lang, [en, uk]) of %% todo mv to config langs list and default lang
  40. false -> en;
  41. true -> Lang
  42. end
  43. end.
  44. get_language_from_cookies(Name, Req) ->
  45. case wf:cookie_req(Name, Req) of
  46. undefined -> false;
  47. Lang ->
  48. case lists:member(Lang, [en, uk]) of
  49. false -> false;
  50. true -> Lang
  51. end
  52. end.
  53. get_language(Name, Req) ->
  54. case ?MODULE:get_language_from_cookies(Name, Req) of
  55. false ->
  56. ?MODULE:get_language_from_header(Req);
  57. Lang ->
  58. Lang
  59. end.
  60. get_tr_mod() -> %% modules with i18n for config langs list -- en -> tr_en, uk -> tr_uk etc
  61. Lang = get_language(<<"lang">>, ?REQ),
  62. case Lang of
  63. uk -> tr_uk;
  64. %en -> tr_en
  65. _ -> tr_en
  66. end.
  67. post_value(Req, Key) ->
  68. {ok, PostStr, _} = wf:request_body(Req),
  69. PostList = cow_qs:parse_qs(PostStr),
  70. ?MODULE:post_value2( [ Value || {_Key1, Value} <- PostList, _Key1 =:= Key ] ).
  71. % helper
  72. post_value2([]) -> undefined;
  73. post_value2([Val|_]) -> Val;
  74. post_value2(_) -> undefined.
  75. assert_int(X) when erlang:is_integer(X) -> ok.