merge-i18n.escript 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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 = filelib:ensure_dir("apps/emqx_dashboard/priv/i18n.conf"),
  12. ok = file:write_file("apps/emqx_dashboard/priv/i18n.conf", Conf).
  13. merge(BaseConf, Cfgs) ->
  14. lists:foldl(
  15. fun(CfgFile, Acc) ->
  16. case filelib:is_regular(CfgFile) of
  17. true ->
  18. {ok, Bin1} = file:read_file(CfgFile),
  19. [Acc, io_lib:nl(), Bin1];
  20. false -> Acc
  21. end
  22. end, BaseConf, Cfgs).
  23. get_all_cfgs(Root) ->
  24. Apps = filelib:wildcard("*", Root) -- ["emqx_machine"],
  25. Dirs = [filename:join([Root, App]) || App <- Apps],
  26. lists:foldl(fun get_cfgs/2, [], Dirs).
  27. get_all_cfgs(Dir, Cfgs) ->
  28. Fun = fun(E, Acc) ->
  29. Path = filename:join([Dir, E]),
  30. get_cfgs(Path, Acc)
  31. end,
  32. lists:foldl(Fun, Cfgs, filelib:wildcard("*", Dir)).
  33. get_cfgs(Dir, Cfgs) ->
  34. case filelib:is_dir(Dir) of
  35. false ->
  36. Cfgs;
  37. _ ->
  38. Files = filelib:wildcard("*", Dir),
  39. case lists:member("i18n", Files) of
  40. false ->
  41. try_enter_child(Dir, Files, Cfgs);
  42. true ->
  43. EtcDir = filename:join([Dir, "i18n"]),
  44. Confs = filelib:wildcard("*.conf", EtcDir),
  45. NewCfgs = [filename:join([EtcDir, Name]) || Name <- Confs],
  46. try_enter_child(Dir, Files, NewCfgs ++ Cfgs)
  47. end
  48. end.
  49. try_enter_child(Dir, Files, Cfgs) ->
  50. case lists:member("src", Files) of
  51. false ->
  52. Cfgs;
  53. true ->
  54. get_all_cfgs(filename:join([Dir, "src"]), Cfgs)
  55. end.