diff options
author | Jo-Philipp Wich <jo@mein.io> | 2018-10-17 12:57:34 +0200 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2018-11-05 11:01:45 +0100 |
commit | 62102f4f0e8a88ffbdf44517f4ff737049a3f3bf (patch) | |
tree | 014bf7a3f47798a05bcdede54da8779f7a4e8491 /modules/luci-base/src/template_lmo.c | |
parent | 4623a58394b1cc71ddf24865a2f0639ee2119470 (diff) |
luci-base: template: add translation iterator function
Introduce a new luci.template.parser.get_translations() function which will
iterate all loaded translation entries and pass the to the given callback
function.
This is useful to expose the loaded translations in other formats, e.g. for
wrapping them into JSON feeds.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Diffstat (limited to 'modules/luci-base/src/template_lmo.c')
-rw-r--r-- | modules/luci-base/src/template_lmo.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/modules/luci-base/src/template_lmo.c b/modules/luci-base/src/template_lmo.c index 3d1eaf4e0..cd4c609a7 100644 --- a/modules/luci-base/src/template_lmo.c +++ b/modules/luci-base/src/template_lmo.c @@ -216,7 +216,7 @@ int lmo_load_catalog(const char *lang, const char *dir) if (!_lmo_active_catalog) _lmo_active_catalog = cat; - return 0; + return cat->archives ? 0 : -1; err: if (dh) closedir(dh); @@ -301,6 +301,20 @@ int lmo_translate(const char *key, int keylen, char **out, int *outlen) return -1; } +void lmo_iterate(lmo_iterate_cb_t cb, void *priv) +{ + unsigned int i; + lmo_entry_t *e; + lmo_archive_t *ar; + + if (!_lmo_active_catalog) + return; + + for (ar = _lmo_active_catalog->archives; ar; ar = ar->next) + for (i = 0, e = &ar->index[0]; i < ar->length; e = &ar->index[++i]) + cb(ntohl(e->key_id), ar->mmap + ntohl(e->offset), ntohl(e->length), priv); +} + void lmo_close_catalog(const char *lang) { lmo_archive_t *ar, *next; |