Browse Source

docs: dev/web: update i18n docs

Matthias Schiffer 2 years ago
parent
commit
4ba7356a24
3 changed files with 31 additions and 12 deletions
  1. 12 6
      docs/dev/web/controller.rst
  2. 18 5
      docs/dev/web/i18n.rst
  3. 1 1
      docs/dev/web/view.rst

+ 12 - 6
docs/dev/web/controller.rst

@@ -4,15 +4,19 @@ Controllers
 Controllers live in ``/lib/gluon/web/controller``. They define which pages ("routes")
 exist under the ``/cgi-bin/gluon`` path, and what code is run when these pages are requested.
 
-Controller scripts mostly consist of calls of the `entry` function, which each define
-one route:
+Controller scripts usually start with a *package* declaration, followed by calls
+to the *entry* function, which each define one route:
 
 .. code-block:: lua
 
+  package 'gluon-web-admin'
+
   entry({"admin"}, alias("admin", "info"), _("Advanced settings"), 10)
   entry({"admin", "info"}, template("admin/info"), _("Information"), 1)
 
-The entry function expects 4 arguments:
+*package* defines the translation namespace for the titles of the defined
+pages as well as the referenced views and models. The entry function expects 4
+arguments:
 
   - `path`: Components of the path to define a route for.
 
@@ -20,6 +24,7 @@ The entry function expects 4 arguments:
 
   - `target`: Dispatcher for the route. See the following section for details.
   - `title`: Page title (also used in navigation). The underscore function is used
+    to mark the strings as translatable for ``i18n-scan.pl``.
 
   - `order`: Sort index in navigation (defaults to 100)
 
@@ -88,9 +93,10 @@ The template renderer
 The template renderer allows to render templates (views). The most useful functions
 are:
 
-  - *render* (*view*, *scope*): Renders the given view, optionally passing a table
-    with additional variables to make available in the template.
-  - *render_string* (*str*, *scope*): Same as *render*, but the template is passed
+  - *render* (*view*, *scope*, *pkg*): Renders the given view, optionally passing a table
+    with additional variables to make available in the template. The passed package
+    defines the translation namespace.
+  - *render_string* (*str*, *scope*, *pkg*): Same as *render*, but the template is passed
     directly instead of being loaded from the view directory.
 
 The renderer functions are called in property syntax, for example:

+ 18 - 5
docs/dev/web/i18n.rst

@@ -20,8 +20,9 @@ Internationalization support is available in all components (models, view and
 controllers) 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.
+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:
 
@@ -29,6 +30,18 @@ Example from the *gluon-config-mode-geo-location* package:
 
   local share_location = s:option(Flag, "location", translate("Show node on the map"))
 
+Note that translations are *namespaced*: each package will only use its own
+translation strings by default. For this purpose, the package name must by
+specified in a package's controller. It is possible to access a different
+translation package using the *i18n* function from models and view, which is
+necessary when strings from the site configuration are used, or packages do not
+have their own controller (which is the case for config mode wizard components).
+
+.. code-block:: lua
+
+  local site_i18n = i18n 'gluon-site'
+  local msg = site_i18n._translate('gluon-config-mode:welcome')
+
 Adding translation templates to Gluon packages
 ----------------------------------------------
 
@@ -45,7 +58,7 @@ script in the ``contrib`` directory:
 
 The same command can be run again to update the template.
 
-In addition, some additions to the Makefile must be made. Instead of LEDE's default *package.mk*,
+In addition, the Makefile must be adjusted. Instead of LEDE's default *package.mk*,
 the Gluon version (``../gluon.mk`` for core packages) must be used. The i18n files must be installed
 and PKG_CONFIG_DEPENDS must be added::
 
@@ -92,5 +105,5 @@ Adding support for new languages
 --------------------------------
 
 A list of all languages supported by *gluon-web* can be found in ``package/gluon.mk``.
-New languages just need to be added to *GLUON_SUPPORTED_LANGS*, after a human-readable
-language name has been defined in the same file.
+New languages just need to be added to *GLUON_SUPPORTED_LANGS*, and a human-readable
+language name must be defined.

+ 1 - 1
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*, *_translate* and *translatef*: see :doc:`i18n`
+  - *translate*, *_translate*, *translatef* and *i18n*: see :doc:`i18n`