From 1d7b4482b71ad81e86ad5bb12cb2c38cff280876 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Wed, 22 Feb 2017 19:01:19 +0100 Subject: [PATCH] gluon-web: add renderer._translate() _translate() will return nil when no match is found. --- docs/dev/web/i18n.rst | 9 +++++---- docs/dev/web/view.rst | 2 +- .../gluon-web/luasrc/usr/lib/lua/gluon/web/template.lua | 9 ++++++++- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/docs/dev/web/i18n.rst b/docs/dev/web/i18n.rst index 1aefb243..e93446b3 100644 --- a/docs/dev/web/i18n.rst +++ b/docs/dev/web/i18n.rst @@ -17,10 +17,11 @@ i18n support in Gluon --------------------- Internationalization support is available in all components (models, view and -contrllers) of *gluon-web*-based packages. Strings are translated using the *translate* -and *translatef* functions (*translate* for static strings, *translatef* -for printf-like formatted string); in views, the special tags ``<%:...%>`` can -be used to translate the contained string. +contrllers) of *gluon-web*-based packages. Strings are translated using the *translate*, +*_translate* and *translatef* functions (*translate* for static strings, *translatef* +for printf-like formatted string; *_translate* works the same as *translate*, but +will return *nil* instead of the original string when no translation is available) +. In views, the special tags ``<%:...%>`` can be used to translate the contained string. Example from the *gluon-config-mode-geo-location* package: diff --git a/docs/dev/web/view.rst b/docs/dev/web/view.rst index ae25f3c1..71c7416c 100644 --- a/docs/dev/web/view.rst +++ b/docs/dev/web/view.rst @@ -52,4 +52,4 @@ variables and functions should always be available for the embedded Lua code: Use ``node(unpack(request))`` to get the node for the current page. - *pcdata* (*str*): Escapes HTML entities in the passed string. - *urlencode* (*str*): Escapes the passed string for use in an URL. - - *translate* and *translatef*: see :doc:`i18n` + - *translate*, *_translate* and *translatef*: see :doc:`i18n` diff --git a/package/gluon-web/luasrc/usr/lib/lua/gluon/web/template.lua b/package/gluon-web/luasrc/usr/lib/lua/gluon/web/template.lua index 55b49ca9..1a92e576 100644 --- a/package/gluon-web/luasrc/usr/lib/lua/gluon/web/template.lua +++ b/package/gluon-web/luasrc/usr/lib/lua/gluon/web/template.lua @@ -25,6 +25,7 @@ function renderer(env) renderer = ctx, translate = ctx.translate, translatef = ctx.translatef, + _translate = ctx._translate, include = function(name) ctx.render(name, scope) end, @@ -79,13 +80,19 @@ function renderer(env) return tparser.load_catalog(lang, i18ndir) end + -- Returns a translated string, or nil if none is found + function ctx._translate(key) + return (tparser.translate(key)) + end + + -- Returns a translated string, or the original string if none is found function ctx.translate(key) return tparser.translate(key) or key end function ctx.translatef(key, ...) local t = ctx.translate(key) - return t and t:format(...) + return t:format(...) end return ctx