diff --git a/django/core/management/commands/makemessages.py b/django/core/management/commands/makemessages.py
index a244a60..48d761a 100644
--- a/django/core/management/commands/makemessages.py
+++ b/django/core/management/commands/makemessages.py
@@ -10,9 +10,23 @@ from subprocess import PIPE, Popen
 from django.core.management.base import CommandError, NoArgsCommand
 from django.utils.text import get_text_list
 
-pythonize_re = re.compile(r'(?:^|\n)\s*//')
 plural_forms_re = re.compile(r'^(?P<value>"Plural-Forms.+?\\n")\s*$', re.MULTILINE | re.DOTALL)
 
+# this removes everything after comment, so the next regexp
+# doesn't messup anything
+jspythonize_re = re.compile(r'(?:^|\n)\s*//.*')
+jsblockcomments_re = re.compile(r'/\*(.+?)\*/', re.DOTALL)
+
+def pythonizejs(text):
+    def block_comment_replacement(m):
+        nlcount = m.group(1).count('\n')
+        if not nlcount:
+            return ""
+        return '\n'.join("#" * (nlcount + 1))
+    text = jspythonize_re.sub('\n#', text)
+    text = jsblockcomments_re.sub(block_comment_replacement, text)
+    return text
+
 def handle_extensions(extensions=('html',)):
     """
     organizes multiple extensions that are separated with commas or passed by
@@ -184,7 +198,7 @@ def make_messages(locale=None, domain='django', verbosity='1', all=False,
                 if verbosity > 1:
                     sys.stdout.write('processing file %s in %s\n' % (file, dirpath))
                 src = open(os.path.join(dirpath, file), "rU").read()
-                src = pythonize_re.sub('\n#', src)
+                src = pythonizejs(src)
                 thefile = '%s.py' % file
                 f = open(os.path.join(dirpath, thefile), "w")
                 try:
diff --git a/tests/regressiontests/i18n/commands/extraction.py b/tests/regressiontests/i18n/commands/extraction.py
index f17bb47..46a816d 100644
--- a/tests/regressiontests/i18n/commands/extraction.py
+++ b/tests/regressiontests/i18n/commands/extraction.py
@@ -27,15 +27,22 @@ class ExtractorTests(TestCase):
             pass
         os.chdir(self._cwd)
 
-    def assertMsgId(self, msgid, s, use_quotes=True):
+    def assertMsgId(self, msgid, text, use_quotes=True):
         if use_quotes:
             msgid = '"%s"' % msgid
-        return self.assert_(re.search('^msgid %s' % msgid, s, re.MULTILINE))
+        self.assertRegexpMatches(text, '(?m)^msgid %s' % re.escape(msgid))
 
-    def assertNotMsgId(self, msgid, s, use_quotes=True):
+    def assertMsgIdLineNumber(self, msgid, linenumber, text, use_quotes=True):
         if use_quotes:
             msgid = '"%s"' % msgid
-        return self.assert_(not re.search('^msgid %s' % msgid, s, re.MULTILINE))
+        m = re.search('^#: .+:(\d+)\n^msgid %s' % re.escape(msgid), text, re.M)
+        self.assertIsNotNone(m)
+        self.assertEqual(int(m.group(1)), linenumber)
+
+    def assertNotMsgId(self, msgid, text, use_quotes=True):
+        if use_quotes:
+            msgid = '"%s"' % msgid
+        self.assertNotRegexpMatches(text, '(?m)^msgid %s' % re.escape(msgid))
 
 
 class BasicExtractorTests(ExtractorTests):
@@ -57,7 +64,7 @@ class BasicExtractorTests(ExtractorTests):
         self.assert_(os.path.exists(self.PO_FILE))
         po_contents = open(self.PO_FILE, 'r').read()
         self.assertMsgId('I think that 100%% is more that 50%% of anything.', po_contents)
-        self.assertMsgId('I think that 100%% is more that 50%% of %\(obj\)s.', po_contents)
+        self.assertMsgId('I think that 100%% is more that 50%% of %(obj)s.', po_contents)
 
     def test_extraction_error(self):
         os.chdir(self.test_dir)
@@ -79,12 +86,39 @@ class JavascriptExtractorTests(ExtractorTests):
 
     def test_javascript_literals(self):
         os.chdir(self.test_dir)
-        management.call_command('makemessages', domain='djangojs', locale=LOCALE, verbosity=0)
-        self.assert_(os.path.exists(self.PO_FILE))
-        po_contents = open(self.PO_FILE, 'r').read()
-        self.assertMsgId('This literal should be included.', po_contents)
-        self.assertMsgId('This one as well.', po_contents)
+        shutil.copyfile('./javascript/literals.txt', './javascript.js')
+        try:
+            management.call_command('makemessages', domain='djangojs', locale=LOCALE, verbosity=0)
+            self.assert_(os.path.exists(self.PO_FILE))
+            po_contents = open(self.PO_FILE, 'r').read()
+            self.assertMsgId('This literal should be included.', po_contents)
+            self.assertMsgId('This one as well.', po_contents)
+            self.assertMsgId('This too', po_contents)
+            self.assertNotMsgId('Ignore', po_contents)
+        finally:
+            os.remove('./javascript.js')
 
+    def test_javascript_block_comments(self):
+        os.chdir(self.test_dir)
+        shutil.copyfile('./javascript/block_comments.txt', './javascript.js')
+        try:
+            management.call_command('makemessages', domain='djangojs', locale=LOCALE, verbosity=0)
+            self.assert_(os.path.exists(self.PO_FILE))
+            po_contents = open(self.PO_FILE, 'r').read()
+            self.assertMsgId('Line1', po_contents)
+            self.assertMsgId('Line6A', po_contents)
+            self.assertMsgId('Line6B', po_contents)
+            self.assertMsgId('Line8', po_contents)
+            self.assertMsgId('Line12', po_contents)
+            self.assertNotMsgId('Ignore', po_contents)
+            # check line number
+            self.assertMsgIdLineNumber('Line1', 1, po_contents)
+            self.assertMsgIdLineNumber('Line6A', 6, po_contents)
+            self.assertMsgIdLineNumber('Line6B', 6, po_contents)
+            self.assertMsgIdLineNumber('Line8', 8, po_contents)
+            self.assertMsgIdLineNumber('Line12', 12, po_contents)
+        finally:
+            os.remove('./javascript.js')
 
 class IgnoredExtractorTests(ExtractorTests):
 
diff --git a/tests/regressiontests/i18n/commands/javascript.js b/tests/regressiontests/i18n/commands/javascript.js
deleted file mode 100644
index bc5ec87..0000000
--- a/tests/regressiontests/i18n/commands/javascript.js
+++ /dev/null
@@ -1,4 +0,0 @@
-// '
-gettext('This literal should be included.')
-// '
-gettext('This one as well.')
diff --git a/tests/regressiontests/i18n/commands/javascript/block_comments.txt b/tests/regressiontests/i18n/commands/javascript/block_comments.txt
new file mode 100644
index 0000000..843e840
--- /dev/null
+++ b/tests/regressiontests/i18n/commands/javascript/block_comments.txt
@@ -0,0 +1,14 @@
+/* / ' */ gettext("Line1");
+function() {
+  /*
+   * Some long comment/message that doesn't do anything
+   */
+   gettext("Line6A"); /* */ gettext("Line6B");
+   /* one line comment */
+   gettext("Line8");
+   /* 
+    * Another comment with magic sequence / ' 
+    */
+    gettext("Line12");
+   /* gettext("Ignore") */
+}
\ No newline at end of file
diff --git a/tests/regressiontests/i18n/commands/javascript/literals.txt b/tests/regressiontests/i18n/commands/javascript/literals.txt
new file mode 100644
index 0000000..362d34c
--- /dev/null
+++ b/tests/regressiontests/i18n/commands/javascript/literals.txt
@@ -0,0 +1,7 @@
+// '
+gettext('This literal should be included.')
+// '
+gettext('This one as well.')
+// /* fake comment start
+gettext('This too')
+// fake end */ gettext('Ignore')
\ No newline at end of file
