Opened 18 years ago

Last modified 17 years ago

#4414 closed

I18N Javascript interpolate function — at Version 2

Reported by: tobias@… Owned by: Malcolm Tredinnick
Component: Internationalization Version: dev
Severity: Keywords: i18n javascript interpolate
Cc: Triage Stage: Ready for checkin
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Malcolm Tredinnick)

why do you interpolate javascript translation strings just once? i currently have the case, that i have to replace like this:

var transObj = { numShown: numShown, numAvail: numAvail};
interpolate(gettext("%(numShown)s out of %(numAvail)s"), transObj, true));
Index: views/i18n.py
===================================================================
--- views/i18n.py       (revision 5038)
+++ views/i18n.py       (working copy)
@@ -69,9 +69,9 @@
 InterPolate = r"""
 function interpolate(fmt, obj, named) {
   if (named) {
-    return fmt.replace(/%\(\w+\)s/, function(match){return String(obj[match.slice(2,-2)])});
+    return fmt.replace(/%\(\w+\)s/g, function(match){return String(obj[match.slice(2,-2)])});
   } else {
-    return fmt.replace(/%s/, function(match){return String(obj.shift())});
+    return fmt.replace(/%s/g, function(match){return String(obj.shift())});
   }
 }
 """

Change History (2)

comment:1 by anonymous, 18 years ago

Sorry for the bad ticket-formatting ;-)

why do you interpolate javascript translation strings just once? i currently have the case, that i have to replace like this:

var transObj = { numShown: numShown, numAvail: numAvail}; 
interpolate(gettext("%(numShown)s out of %(numAvail)s"), transObj, true)); 
Index: views/i18n.py
===================================================================
--- views/i18n.py       (revision 5038)
+++ views/i18n.py       (working copy)
@@ -69,9 +69,9 @@
 InterPolate = r"""
 function interpolate(fmt, obj, named) {
   if (named) {
-    return fmt.replace(/%\(\w+\)s/, function(match){return String(obj[match.slice(2,-2)])});
+    return fmt.replace(/%\(\w+\)s/g, function(match){return String(obj[match.slice(2,-2)])});
   } else {
-    return fmt.replace(/%s/, function(match){return String(obj.shift())});
+    return fmt.replace(/%s/g, function(match){return String(obj.shift())});
   }
 }
 """

comment:2 by Malcolm Tredinnick, 18 years ago

Component: TranslationsInternationalization
Description: modified (diff)
Triage Stage: UnreviewedAccepted

(Fixed description formatting.)

Can you explain the bug a bit more? Is it that the first couple of lines you show do not work and they should work? Or there is some other thing that should work and you have to do the first two lines of Javascript instead?

What I'm after is a clear example of something that should work, but doesn't. If that's the first two lines you showed, just point that out. Otherwise, give us an example to test with.

Just looking at the change you propose, I'm willing to believe it's just an oversight (clearly not a popular one, since nobody's reported it before that I can see). Should be easy to fix once we understand what the real issue is.

Note: See TracTickets for help on using tickets.
Back to Top