merge-i18n.escript 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #!/usr/bin/env escript
  2. -mode(compile).
  3. main(_) ->
  4. BaseConf = <<"">>,
  5. Cfgs0 = get_all_cfgs("apps/"),
  6. Cfgs1 = get_all_cfgs("lib-ee/"),
  7. Conf0 = merge(BaseConf, Cfgs0),
  8. Conf = [merge(Conf0, Cfgs1),
  9. io_lib:nl()
  10. ],
  11. ok = file:write_file("apps/emqx_dashboard/priv/i18n.conf", Conf).
  12. merge(BaseConf, Cfgs) ->
  13. lists:foldl(
  14. fun(CfgFile, Acc) ->
  15. case filelib:is_regular(CfgFile) of
  16. true ->
  17. {ok, Bin1} = file:read_file(CfgFile),
  18. [Acc, io_lib:nl(), Bin1];
  19. false -> Acc
  20. end
  21. end, BaseConf, Cfgs).
  22. get_all_cfgs(Root) ->
  23. Apps = filelib:wildcard("*", Root) -- ["emqx_machine"],
  24. Dirs = [filename:join([Root, App]) || App <- Apps],
  25. lists:foldl(fun get_cfgs/2, [], Dirs).
  26. get_all_cfgs(Dir, Cfgs) ->
  27. Fun = fun(E, Acc) ->
  28. Path = filename:join([Dir, E]),
  29. get_cfgs(Path, Acc)
  30. end,
  31. lists:foldl(Fun, Cfgs, filelib:wildcard("*", Dir)).
  32. get_cfgs(Dir, Cfgs) ->
  33. case filelib:is_dir(Dir) of
  34. false ->
  35. Cfgs;
  36. _ ->
  37. Files = filelib:wildcard("*", Dir),
  38. case lists:member("i18n", Files) of
  39. false ->
  40. try_enter_child(Dir, Files, Cfgs);
  41. true ->
  42. EtcDir = filename:join([Dir, "i18n"]),
  43. Confs = filelib:wildcard("*.conf", EtcDir),
  44. NewCfgs = [filename:join([EtcDir, Name]) || Name <- Confs],
  45. try_enter_child(Dir, Files, NewCfgs ++ Cfgs)
  46. end
  47. end.
  48. try_enter_child(Dir, Files, Cfgs) ->
  49. case lists:member("src", Files) of
  50. false ->
  51. Cfgs;
  52. true ->
  53. get_all_cfgs(filename:join([Dir, "src"]), Cfgs)
  54. end.