Django

Code

Ticket #6859: js-i18n-doc.2.diff

File js-i18n-doc.2.diff, 3.8 kB (added by ramiro, 8 months ago)
  • a/docs/i18n.txt

    old new  
    338338take a string as their first argument and do something to that string. These 
    339339functions are used by template filters as well as directly in other code. 
    340340 
    341 If you write your own similar functions and deal with translations, you'll  
     341If you write your own similar functions and deal with translations, you'll 
    342342face the problem of what to do when the first argument is a lazy translation 
    343343object. You don't want to convert it to a string immediately, because you might 
    344344be using this function outside of a view (and hence the current thread's locale 
     
    789789You can make the view dynamic by putting the packages into the URL pattern:: 
    790790 
    791791    urlpatterns = patterns('', 
    792         (r'^jsi18n/(?P<packages>\S+?)/$, 'django.views.i18n.javascript_catalog'), 
     792        (r'^jsi18n/(?P<packages>\S+?)/$', 'django.views.i18n.javascript_catalog'), 
    793793    ) 
    794794 
    795795With this, you specify the packages as a list of package names delimited by '+' 
     
    811811 
    812812    document.write(gettext('this is to be translated')); 
    813813 
    814 There even is a ``ungettext`` interface and a string interpolation function:: 
     814There is also a ``ngettext`` interface:: 
    815815 
    816     d = { 
    817         count: 10 
    818     }; 
    819     s = interpolate(ungettext('this is %(count)s object', 'this are %(count)s objects', d.count), d); 
     816    var object_cnt = 1 // or 0, or 2, or 3, ... 
     817    s = ngettext('literal for the singular case', 'literal for the plural case', object_cnt); 
    820818 
    821 The ``interpolate`` function supports both positional interpolation and named 
    822 interpolation. So the above could have been written as:: 
     819and even a string interpolation function:: 
    823820 
    824     s = interpolate(ungettext('this is %s object', 'this are %s objects', 11), [11]); 
     821    function interpolate(fmt, obj, named); 
    825822 
    826 The interpolation syntax is borrowed from Python. You shouldn't go over the top 
    827 with string interpolation, though: this is still JavaScript, so the code will 
    828 have to do repeated regular-expression substitutions. This isn't as fast as 
    829 string interpolation  in Python, so keep it to those cases where you really 
    830 need it (for example, in conjunction with ``ungettext`` to produce proper 
    831 pluralizations). 
     823The interpolation syntax is borrowed from Python, so the ``interpolate`` function 
     824supports both positional interpolation and named interpolation: 
     825 
     826    * Positional interpolation: *obj* contains a JavaScript Array object 
     827      whose elements values are then sequentially  interpolated in their 
     828      corresponding *fmt* placeholders in the same order they appear. 
     829      For example:: 
     830 
     831        fmts = ngettext('There is %s object. Remaining: %s', 'There are %s objects. Remaining: %s', 11); 
     832        s = interpolate(fmts, [11, 20]); 
     833        // s is 'There are 11 objects. Remaining: 20' 
     834 
     835    * Named interpolation: This mode is selected by passing the optional 
     836      boolean *named* parameter as true. *obj* contains a JavaScript 
     837      object or associative array. For example:: 
     838 
     839        d = { 
     840            count: 10 
     841            total: 50 
     842        }; 
     843        fmts = ngettext('Total: %(total)s, there is %(count)s object', 
     844            'there are %(count)s of a total of %(total)s objects', d.count); 
     845        s = interpolate(fmts, d, true); 
     846 
     847You shouldn't go over the top with string interpolation, though: this is still 
     848JavaScript, so the code will have to do repeated regular-expression 
     849substitutions. This isn't as fast as string interpolation  in Python, so keep 
     850it to those cases where you really need it (for example, in conjunction with 
     851``ngettext`` to produce proper pluralizations). 
    832852 
    833853Creating JavaScript translation catalogs 
    834854----------------------------------------