Loading docs/i18n.txt +39 −16 Original line number Diff line number Diff line Loading @@ -789,7 +789,7 @@ JavaScript that uses strings from different applications. You can make the view dynamic by putting the packages into the URL pattern:: urlpatterns = patterns('', (r'^jsi18n/(?P<packages>\S+?)/$, 'django.views.i18n.javascript_catalog'), (r'^jsi18n/(?P<packages>\S+?)/$', 'django.views.i18n.javascript_catalog'), ) With this, you specify the packages as a list of package names delimited by '+' Loading @@ -811,24 +811,47 @@ interface to access it:: document.write(gettext('this is to be translated')); There even is a ``ungettext`` interface and a string interpolation function:: There is also an ``ngettext`` interface:: var object_cnt = 1 // or 0, or 2, or 3, ... s = ngettext('literal for the singular case', 'literal for the plural case', object_cnt); and even a string interpolation function:: function interpolate(fmt, obj, named); The interpolation syntax is borrowed from Python, so the ``interpolate`` function supports both positional and named interpolation: * Positional interpolation: ``obj`` contains a JavaScript Array object whose elements values are then sequentially interpolated in their corresponding ``fmt`` placeholders in the same order they appear. For example:: fmts = ngettext('There is %s object. Remaining: %s', 'There are %s objects. Remaining: %s', 11); s = interpolate(fmts, [11, 20]); // s is 'There are 11 objects. Remaining: 20' * Named interpolation: This mode is selected by passing the optional boolean ``named`` parameter as true. ``obj`` contains a JavaScript object or associative array. For example:: d = { count: 10 total: 50 }; s = interpolate(ungettext('this is %(count)s object', 'this are %(count)s objects', d.count), d); The ``interpolate`` function supports both positional interpolation and named interpolation. So the above could have been written as:: s = interpolate(ungettext('this is %s object', 'this are %s objects', 11), [11]); fmts = ngettext('Total: %(total)s, there is %(count)s object', 'there are %(count)s of a total of %(total)s objects', d.count); s = interpolate(fmts, d, true); The interpolation syntax is borrowed from Python. You shouldn't go over the top with string interpolation, though: this is still JavaScript, so the code will have to do repeated regular-expression substitutions. This isn't as fast as string interpolation in Python, so keep it to those cases where you really need it (for example, in conjunction with ``ungettext`` to produce proper pluralizations). You shouldn't go over the top with string interpolation, though: this is still JavaScript, so the code has to make repeated regular-expression substitutions. This isn't as fast as string interpolation in Python, so keep it to those cases where you really need it (for example, in conjunction with ``ngettext`` to produce proper pluralizations). Creating JavaScript translation catalogs ---------------------------------------- Loading Loading
docs/i18n.txt +39 −16 Original line number Diff line number Diff line Loading @@ -789,7 +789,7 @@ JavaScript that uses strings from different applications. You can make the view dynamic by putting the packages into the URL pattern:: urlpatterns = patterns('', (r'^jsi18n/(?P<packages>\S+?)/$, 'django.views.i18n.javascript_catalog'), (r'^jsi18n/(?P<packages>\S+?)/$', 'django.views.i18n.javascript_catalog'), ) With this, you specify the packages as a list of package names delimited by '+' Loading @@ -811,24 +811,47 @@ interface to access it:: document.write(gettext('this is to be translated')); There even is a ``ungettext`` interface and a string interpolation function:: There is also an ``ngettext`` interface:: var object_cnt = 1 // or 0, or 2, or 3, ... s = ngettext('literal for the singular case', 'literal for the plural case', object_cnt); and even a string interpolation function:: function interpolate(fmt, obj, named); The interpolation syntax is borrowed from Python, so the ``interpolate`` function supports both positional and named interpolation: * Positional interpolation: ``obj`` contains a JavaScript Array object whose elements values are then sequentially interpolated in their corresponding ``fmt`` placeholders in the same order they appear. For example:: fmts = ngettext('There is %s object. Remaining: %s', 'There are %s objects. Remaining: %s', 11); s = interpolate(fmts, [11, 20]); // s is 'There are 11 objects. Remaining: 20' * Named interpolation: This mode is selected by passing the optional boolean ``named`` parameter as true. ``obj`` contains a JavaScript object or associative array. For example:: d = { count: 10 total: 50 }; s = interpolate(ungettext('this is %(count)s object', 'this are %(count)s objects', d.count), d); The ``interpolate`` function supports both positional interpolation and named interpolation. So the above could have been written as:: s = interpolate(ungettext('this is %s object', 'this are %s objects', 11), [11]); fmts = ngettext('Total: %(total)s, there is %(count)s object', 'there are %(count)s of a total of %(total)s objects', d.count); s = interpolate(fmts, d, true); The interpolation syntax is borrowed from Python. You shouldn't go over the top with string interpolation, though: this is still JavaScript, so the code will have to do repeated regular-expression substitutions. This isn't as fast as string interpolation in Python, so keep it to those cases where you really need it (for example, in conjunction with ``ungettext`` to produce proper pluralizations). You shouldn't go over the top with string interpolation, though: this is still JavaScript, so the code has to make repeated regular-expression substitutions. This isn't as fast as string interpolation in Python, so keep it to those cases where you really need it (for example, in conjunction with ``ngettext`` to produce proper pluralizations). Creating JavaScript translation catalogs ---------------------------------------- Loading