diff --git a/src/static/json/credits.json b/src/options/credits.json5
similarity index 100%
rename from src/static/json/credits.json
rename to src/options/credits.json5
diff --git a/src/static/json/i18n-credits.json b/src/options/i18n-credits.json5
similarity index 100%
rename from src/static/json/i18n-credits.json
rename to src/options/i18n-credits.json5
diff --git a/src/options/options.js b/src/options/options.js
index 1d47da6..c89f1bd 100644
--- a/src/options/options.js
+++ b/src/options/options.js
@@ -2,6 +2,9 @@
 
 import {isoLangs} from '../common/consts.js';
 
+import credits from './credits.json5';
+import i18nCredits from './i18n-credits.json5';
+
 let sortable;
 
 function $(selector) {
@@ -145,93 +148,81 @@
     });
 
     // About credits...
-    var normalCredits = fetch('json/credits.json').then(res => res.json());
-    var i18nCredits = fetch('json/i18n-credits.json').then(res => res.json());
+    var content = $('dialog#credits_dialog .content_area');
+    credits.forEach(item => {
+      var div = document.createElement('div');
+      div.classList.add('entry');
+      if (item.url) {
+        var a = document.createElement('a');
+        a.classList.add('homepage');
+        a.href = item.url;
+        a.target = '_blank';
+        a.textContent = chrome.i18n.getMessage('options_credits_homepage');
+        div.append(a);
+      }
 
-    Promise.all([normalCredits, i18nCredits])
-        .then(values => {
-          var credits = values[0];
-          var i18nCredits = values[1];
-          var content = $('dialog#credits_dialog .content_area');
-          credits.forEach(item => {
-            var div = document.createElement('div');
-            div.classList.add('entry');
-            if (item.url) {
-              var a = document.createElement('a');
-              a.classList.add('homepage');
-              a.href = item.url;
-              a.target = '_blank';
-              a.textContent =
-                  chrome.i18n.getMessage('options_credits_homepage');
-              div.append(a);
-            }
+      var h4 = document.createElement('h4');
+      h4.textContent = item.name;
+      div.append(h4);
 
-            var h4 = document.createElement('h4');
-            h4.textContent = item.name;
-            div.append(h4);
+      if (item.author) {
+        var p = document.createElement('p');
+        p.classList.add('author');
+        p.textContent = chrome.i18n.getMessage('options_credits_by') + ' ' +
+            item.author + (item.license ? ' - ' + item.license : '');
+        div.append(p);
+      }
+      content.append(div);
+    });
 
-            if (item.author) {
-              var p = document.createElement('p');
-              p.classList.add('author');
-              p.textContent = chrome.i18n.getMessage('options_credits_by') +
-                  ' ' + item.author +
-                  (item.license ? ' - ' + item.license : '');
-              div.append(p);
-            }
-            content.append(div);
-          });
+    var cList = document.getElementById('translators');
+    i18nCredits.forEach(contributor => {
+      var li = document.createElement('li');
+      var languages = [];
+      if (contributor.languages) {
+        contributor.languages.forEach(lang => {
+          languages.push(lang.name || 'undefined');
+        });
+      }
 
-          var cList = document.getElementById('translators');
-          i18nCredits.forEach(contributor => {
-            var li = document.createElement('li');
-            var languages = [];
-            if (contributor.languages) {
-              contributor.languages.forEach(lang => {
-                languages.push(lang.name || 'undefined');
-              });
-            }
+      var name = document.createElement('span');
+      name.classList.add('name');
+      name.textContent = contributor.name || 'undefined';
+      li.append(name);
 
-            var name = document.createElement('span');
-            name.classList.add('name');
-            name.textContent = contributor.name || 'undefined';
-            li.append(name);
+      if (languages.length > 0) {
+        var languages = document.createTextNode(': ' + languages.join(', '));
+        li.append(languages);
+      }
 
-            if (languages.length > 0) {
-              var languages =
-                  document.createTextNode(': ' + languages.join(', '));
-              li.append(languages);
-            }
+      cList.append(li);
+    });
 
-            cList.append(li);
-          });
+    window.onhashchange = function() {
+      if (location.hash == '#credits') {
+        var credits = document.getElementById('credits_dialog');
+        credits.showModal();
+        credits.querySelector('.scrollable').scrollTo(0, 0);
+        $('#credits_ok').focus();
+      }
+    };
 
-          window.onhashchange = function() {
-            if (location.hash == '#credits') {
-              var credits = document.getElementById('credits_dialog');
-              credits.showModal();
-              credits.querySelector('.scrollable').scrollTo(0, 0);
-              $('#credits_ok').focus();
-            }
-          };
+    if (location.hash == '#credits') {
+      $('dialog#credits_dialog').showModal();
+      $('#credits_ok').focus();
+    }
 
-          if (location.hash == '#credits') {
-            $('dialog#credits_dialog').showModal();
-            $('#credits_ok').focus();
-          }
+    $('#credits_ok').addEventListener('click', _ => {
+      $('dialog#credits_dialog').close();
+    });
+    $('dialog#credits_dialog').addEventListener('close', _ => {
+      history.pushState(
+          '', document.title,
+          window.location.pathname + window.location.search);
+    });
 
-          $('#credits_ok').addEventListener('click', _ => {
-            $('dialog#credits_dialog').close();
-          });
-          $('dialog#credits_dialog').addEventListener('close', _ => {
-            history.pushState(
-                '', document.title,
-                window.location.pathname + window.location.search);
-          });
-
-          // Print language list in the modal dialog
-          printListModal();
-        })
-        .catch(err => console.log(err));
+    // Print language list in the modal dialog
+    printListModal();
   });
 }
 
diff --git a/tools/i18n/bump-translations.bash b/tools/i18n/bump-translations.bash
index 55f4dd7..4d3108d 100644
--- a/tools/i18n/bump-translations.bash
+++ b/tools/i18n/bump-translations.bash
@@ -17,7 +17,7 @@
 
 # Generate i18n credits file
 go run generate-i18n-credits.go
-git add ../../src/static/json/i18n-credits.json
+git add ../../src/options/i18n-credits.json5
 
 # Delete empty translations
 cd ../../src/static/_locales
diff --git a/tools/i18n/generate-i18n-credits.go b/tools/i18n/generate-i18n-credits.go
index e37d419..4fa667d 100644
--- a/tools/i18n/generate-i18n-credits.go
+++ b/tools/i18n/generate-i18n-credits.go
@@ -21,7 +21,7 @@
 const checkAttempts = 5
 const checkWaitTime = 2 * time.Second
 const baseApiURL = "https://api.crowdin.com/api/v2/"
-const i18nCreditsFile = "../../src/static/json/i18n-credits.json"
+const i18nCreditsFile = "../../src/options/i18n-credits.json5"
 
 // Contributors who have sent translations before the Crowdin instance
 // was set up:
