diff options
author | Jo-Philipp Wich <jo@mein.io> | 2020-01-23 21:53:26 +0100 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2020-01-25 23:21:35 +0100 |
commit | 9939fc5a26d07da4756497bb6a7dc51dcf379e98 (patch) | |
tree | e79785f03912d2cec48fdf59f132a42528bd4c6f /modules/luci-base/src/template_lmo.h | |
parent | 6f6f3e84ca0bc04cd69433f723371fdd3416add9 (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.h | 12 |
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); |