diff --git a/scripts/copy-i18n-tags.coffee b/scripts/copy-i18n-tags.coffee
index 92dce432b..42df476ea 100644
--- a/scripts/copy-i18n-tags.coffee
+++ b/scripts/copy-i18n-tags.coffee
@@ -5,11 +5,23 @@ en = require('../app/locale/en').translation
 enSource = fs.readFileSync(path.join(__dirname, '../app/locale/en.coffee'), encoding='utf8')
 commentsMap = {}
 
+categorySplitPattern = /^[\s\n]*(?=[^:\n]+:\s*$)/gm
+categoryCapturePattern = /^[\s\n]*([^:\n]+):\s*$/gm
 commentPattern = /^[\s\n]*([^:\n]+):\s*"[^#\n"]+"\s*#(.*)$/gm
 
-comment = []
-while (comment = commentPattern.exec enSource)?
-  commentsMap[comment[1]] = comment[2]
+splitByCategories = enSource.split(categorySplitPattern)
+
+for section in splitByCategories
+  categoryMatch = categoryCapturePattern.exec section
+
+  if categoryMatch?
+    category = categoryMatch[1]
+    comment = []
+
+    commentsMap[category] ?= {}
+
+    while (comment = commentPattern.exec section)?
+      commentsMap[category][comment[1]] = comment[2]
 
 dir = fs.readdirSync 'app/locale'
 for file in dir when not (file in ['locale.coffee', 'en.coffee'])
@@ -27,8 +39,10 @@ for file in dir when not (file in ['locale.coffee', 'en.coffee'])
       tagMissing = not cat[enTag]?
       tag = (cat[enTag] ?= enString)
       tag = tag.replace /"/g, '\\"'
+
       comment = ""
-      comment = " \##{commentsMap[enTag]}" if commentsMap[enTag]?
+      if commentsMap[enCat]? and commentsMap[enCat][enTag]?
+        comment = " \##{commentsMap[enCat][enTag]}"
 
       lines.push "#{if tagMissing then '#' else ''}    #{enTag}: \"#{tag}\"#{comment}"
   newContents = lines.join('\n') + '\n'