summaryrefslogtreecommitdiffhomepage
path: root/modules/luci-base/src/template_lmo.h
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2020-01-23 21:53:26 +0100
committerJo-Philipp Wich <jo@mein.io>2020-01-25 23:21:35 +0100
commit9939fc5a26d07da4756497bb6a7dc51dcf379e98 (patch)
treee79785f03912d2cec48fdf59f132a42528bd4c6f /modules/luci-base/src/template_lmo.h
parent6f6f3e84ca0bc04cd69433f723371fdd3416add9 (diff)
luci-base: add support for plural translations and contexts in Lua api
- Introduce a new luci.template.parser.ntranslate() function which takes a count, a singular and a plural translation string as well as an optional context argument and returns the appropriate, language specific plural translation. - Introduce an optional translation context argument in the existing luci.template.parser.translate() function - Support translation contexts in LuCI template directives. Translation messages are split on the first unescaped pipe character and the reamining string after the pipe is treated as context. Examples: - `string.format(p.ntranslate(n, "1 apple", "%d apples"), n)` will return an appropriate plural translation for the given amount. - `translate("Load", "The system load")` will return an appropiate translation for `Load`, using `The system load` as disambiguation context (a `msgctxt` directive in *.po files). - Likewise `<%:Load|The system load%>` will translate the word `Load` while using the remainder of the string as context. - To use pipes in translations strings literally, they must be escaped: `<%:Use the "\|" character%>` will translate the literal string `Use the "|" character`. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Diffstat (limited to 'modules/luci-base/src/template_lmo.h')
-rw-r--r--modules/luci-base/src/template_lmo.h12
1 files changed, 11 insertions, 1 deletions
diff --git a/modules/luci-base/src/template_lmo.h b/modules/luci-base/src/template_lmo.h
index 587884ea3a..d6cba7bf49 100644
--- a/modules/luci-base/src/template_lmo.h
+++ b/modules/luci-base/src/template_lmo.h
@@ -76,7 +76,8 @@ typedef struct lmo_catalog lmo_catalog_t;
typedef void (*lmo_iterate_cb_t)(uint32_t, const char *, int, void *);
uint32_t sfh_hash(const char *data, int len);
-uint32_t lmo_canon_hash(const char *data, int len);
+uint32_t lmo_canon_hash(const char *data, int len,
+ const char *ctx, int ctxlen, int plural);
lmo_archive_t * lmo_open(const char *file);
void lmo_close(lmo_archive_t *ar);
@@ -88,6 +89,15 @@ extern lmo_catalog_t *_lmo_active_catalog;
int lmo_load_catalog(const char *lang, const char *dir);
int lmo_change_catalog(const char *lang);
int lmo_translate(const char *key, int keylen, char **out, int *outlen);
+int lmo_translate_ctxt(const char *key, int keylen,
+ const char *ctx, int ctxlen, char **out, int *outlen);
+int lmo_translate_plural(int n, const char *skey, int skeylen,
+ const char *pkey, int pkeylen,
+ char **out, int *outlen);
+int lmo_translate_plural_ctxt(int n, const char *skey, int skeylen,
+ const char *pkey, int pkeylen,
+ const char *ctx, int ctxlen,
+ char **out, int *outlen);
void lmo_iterate(lmo_iterate_cb_t cb, void *priv);
void lmo_close_catalog(const char *lang);