merge-i18n.escript 1.7 KB

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