From 707ff8238aa4a9eaffda380830da62884118171a Mon Sep 17 00:00:00 2001
From: MattIPv4 <me@mattcowley.co.uk>
Date: Tue, 2 Jun 2020 16:51:28 +0100
Subject: [PATCH] Move i18n strings to be centralised

---
 .../en/{templates/domain.js => common.js}     | 17 ++++++++++++--
 src/nginxconfig/i18n/en/index.js              |  5 ++--
 src/nginxconfig/i18n/en/templates/app.js      |  6 +++--
 .../en/templates/domain_sections/https.js     | 16 ++++++-------
 .../en/templates/domain_sections/logging.js   |  5 ++--
 .../i18n/en/templates/domain_sections/php.js  | 23 ++++++++++---------
 .../en/templates/domain_sections/presets.js   |  5 ----
 .../en/templates/domain_sections/python.js    | 15 ++++++------
 .../domain_sections/reverse_proxy.js          |  8 ++++---
 .../en/templates/domain_sections/routing.js   |  9 ++++----
 src/nginxconfig/i18n/en/templates/global.js   | 20 ----------------
 .../en/templates/global_sections/https.js     | 17 ++++++++------
 .../en/templates/global_sections/logging.js   |  5 ++--
 .../en/templates/global_sections/nginx.js     |  5 ++--
 .../templates/global_sections/performance.js  |  6 +++--
 .../i18n/en/templates/global_sections/php.js  |  9 ++++----
 .../en/templates/global_sections/python.js    |  7 +++---
 .../en/templates/global_sections/security.js  |  1 -
 .../en/templates/global_sections/tools.js     |  6 +++--
 src/nginxconfig/i18n/en/templates/index.js    |  4 +---
 src/nginxconfig/i18n/en/templates/setup.js    |  2 --
 .../en/templates/setup_sections/certbot.js    | 18 +++++++++------
 .../en/templates/setup_sections/download.js   |  6 +++--
 .../en/templates/setup_sections/go_live.js    |  4 +++-
 .../i18n/en/templates/setup_sections/ssl.js   |  8 ++++---
 src/nginxconfig/templates/domain.vue          |  6 +++--
 .../templates/domain_sections/https.vue       | 16 ++++++-------
 .../templates/domain_sections/logging.vue     | 10 ++++----
 .../templates/domain_sections/php.vue         |  8 +++----
 .../templates/domain_sections/presets.vue     | 10 ++++----
 .../templates/domain_sections/python.vue      | 14 +++++------
 .../templates/domain_sections/routing.vue     |  2 +-
 src/nginxconfig/templates/global.vue          |  6 +++--
 .../templates/global_sections/https.vue       | 12 +++++-----
 .../templates/global_sections/logging.vue     |  2 +-
 .../templates/global_sections/nginx.vue       |  2 +-
 .../templates/global_sections/php.vue         | 12 +++++-----
 .../templates/global_sections/python.vue      | 12 +++++-----
 .../templates/global_sections/security.vue    |  4 ++--
 src/nginxconfig/templates/setup.vue           |  6 +++--
 vue.config.js                                 |  2 +-
 41 files changed, 184 insertions(+), 167 deletions(-)
 rename src/nginxconfig/i18n/en/{templates/domain.js => common.js} (67%)
 delete mode 100644 src/nginxconfig/i18n/en/templates/global.js

diff --git a/src/nginxconfig/i18n/en/templates/domain.js b/src/nginxconfig/i18n/en/common.js
similarity index 67%
rename from src/nginxconfig/i18n/en/templates/domain.js
rename to src/nginxconfig/i18n/en/common.js
index 3b7637d..a651d42 100644
--- a/src/nginxconfig/i18n/en/templates/domain.js
+++ b/src/nginxconfig/i18n/en/common.js
@@ -15,6 +15,19 @@ limitations under the License.
 */
 
 export default {
-    back: 'Back',
-    next: 'Next',
+	back: 'Back',
+	next: 'Next',
+	enable: 'enable',
+	php: 'PHP',
+	ssl: 'SSL',
+	nginx: 'NGINX',
+	http: 'HTTP',
+	https: 'HTTPS',
+	letsEncrypt: 'Let\'s Encrypt',
+	python: 'Python',
+	wordPress: 'WordPress',
+	drupal: 'Drupal',
+	magento: 'Magento',
+	django: 'Django',
+	logging: 'Logging',
 };
diff --git a/src/nginxconfig/i18n/en/index.js b/src/nginxconfig/i18n/en/index.js
index 0e9cbe0..e7ef6e9 100644
--- a/src/nginxconfig/i18n/en/index.js
+++ b/src/nginxconfig/i18n/en/index.js
@@ -14,8 +14,7 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
+import common from './common';
 import templates from './templates';
 
-// TODO: centralised shared strings
-
-export default { templates };
+export default { common, templates };
diff --git a/src/nginxconfig/i18n/en/templates/app.js b/src/nginxconfig/i18n/en/templates/app.js
index 48edbca..2338222 100644
--- a/src/nginxconfig/i18n/en/templates/app.js
+++ b/src/nginxconfig/i18n/en/templates/app.js
@@ -14,9 +14,11 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
+import common from '../common';
+
 export default {
-    title: 'NGINXConfig',
-    description: 'The easiest way to configure a performant, secure, and stable NGINX server.',
+    title: `${common.nginx}Config`,
+    description: `The easiest way to configure a performant, secure, and stable ${common.nginx} server.`,
     singleColumnMode: 'Single column mode',
     splitColumnMode: 'Split column mode',
     perWebsiteConfig: 'Per-website config',
diff --git a/src/nginxconfig/i18n/en/templates/domain_sections/https.js b/src/nginxconfig/i18n/en/templates/domain_sections/https.js
index 943b911..80b43f6 100644
--- a/src/nginxconfig/i18n/en/templates/domain_sections/https.js
+++ b/src/nginxconfig/i18n/en/templates/domain_sections/https.js
@@ -14,16 +14,16 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
+import common from '../../common';
+
 export default {
-    https: 'HTTPS',
-    enableEncryptedSslConnection: 'enable encrypted SSL connections',
-    http2: 'HTTP/2',
-    enableHttp2Connections: 'enable HTTP/2 connections',
-    forceHttps: 'Force HTTPS',
+    enableEncryptedSslConnection: `${common.enable} encrypted ${common.ssl} connections`,
+    http2: `${common.http}/2`,
+    enableHttp2Connections: `${common.enable} ${common.http}/2 connections`,
+    forceHttps: `Force ${common.https}`,
     hsts: 'HSTS',
-    enableStrictTransportSecurity: 'enable Strict Transport Security',
+    enableStrictTransportSecurity: `${common.enable} Strict Transport Security`,
     certificationType: 'Certification type',
-    letsEncrypt: 'Let\'s Encrypt',
     customCertificate: 'Custom certificate',
-    letsEncryptEmail: 'Let\'s Encrypt email',
+    letsEncryptEmail: `${common.letsEncrypt} email`,
 };
diff --git a/src/nginxconfig/i18n/en/templates/domain_sections/logging.js b/src/nginxconfig/i18n/en/templates/domain_sections/logging.js
index 86355a2..9d664dc 100644
--- a/src/nginxconfig/i18n/en/templates/domain_sections/logging.js
+++ b/src/nginxconfig/i18n/en/templates/domain_sections/logging.js
@@ -14,8 +14,9 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
+import common from '../../common';
+
 export default {
     byDomain: 'by domain',
-    enableForThisDomain: 'enable for this domain',
-    logging: 'Logging',
+    enableForThisDomain: `${common.enable} for this domain`,
 };
diff --git a/src/nginxconfig/i18n/en/templates/domain_sections/php.js b/src/nginxconfig/i18n/en/templates/domain_sections/php.js
index 2b44364..5d9ca0a 100644
--- a/src/nginxconfig/i18n/en/templates/domain_sections/php.js
+++ b/src/nginxconfig/i18n/en/templates/domain_sections/php.js
@@ -14,16 +14,17 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
+import common from '../../common';
+
 export default {
-    php: 'PHP',
-    phpIsDisabled: 'PHP is disabled.',
-    phpCannotBeEnabledWithReverseProxy: 'PHP cannot be enabled whilst the reverse proxy is enabled.',
-    phpCannotBeEnabledWithPython: 'PHP cannot be enabled whilst Python is enabled.',
-    enablePhp: 'enable PHP',
-    wordPressRules: 'WordPress rules',
-    enableWordPressRules: 'enable WordPress-specific rules',
-    drupalRules: 'Drupal rules',
-    enableDrupalRules: 'enable Drupal-specific rules',
-    magentoRules: 'Magento rules',
-    enableMagentoRules: 'enable Magento-specific rules',
+    phpIsDisabled: `${common.php} is disabled.`,
+    phpCannotBeEnabledWithReverseProxy: `${common.php} cannot be enabled whilst the reverse proxy is enabled.`,
+    phpCannotBeEnabledWithPython: `${common.php} cannot be enabled whilst ${common.python} is enabled.`,
+    enablePhp: `${common.enable} ${common.php}`,
+    wordPressRules: `${common.wordPress} rules`,
+    enableWordPressRules: `${common.enable} ${common.wordPress}-specific rules`,
+    drupalRules: `${common.drupal} rules`,
+    enableDrupalRules: `${common.enable} ${common.drupal}-specific rules`,
+    magentoRules: `${common.magento} rules`,
+    enableMagentoRules: `${common.enable} ${common.magento}-specific rules`,
 };
diff --git a/src/nginxconfig/i18n/en/templates/domain_sections/presets.js b/src/nginxconfig/i18n/en/templates/domain_sections/presets.js
index 2bbfb3a..cfea4d8 100644
--- a/src/nginxconfig/i18n/en/templates/domain_sections/presets.js
+++ b/src/nginxconfig/i18n/en/templates/domain_sections/presets.js
@@ -18,11 +18,6 @@ export default {
     presets: 'Presets',
     itLooksLikeYouCustomisedTheConfig: 'It looks like you\'ve customised the configuration for this domain. Choosing a new preset may reset or change some of the settings that you\'ve customised.',
     frontend: 'Frontend',
-    php: 'PHP',
-    django: 'Django',
     nodeJs: 'Node.js',
     singlePageApplication: 'Single-page application',
-    wordPress: 'WordPress',
-    drupal: 'Drupal',
-    magento: 'Magento',
 };
diff --git a/src/nginxconfig/i18n/en/templates/domain_sections/python.js b/src/nginxconfig/i18n/en/templates/domain_sections/python.js
index c6c5e6a..bbf4294 100644
--- a/src/nginxconfig/i18n/en/templates/domain_sections/python.js
+++ b/src/nginxconfig/i18n/en/templates/domain_sections/python.js
@@ -14,12 +14,13 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
+import common from '../../common';
+
 export default {
-    python: 'Python',
-    pythonIsDisabled: 'Python is disabled.',
-    pythonCannotBeEnabledWithReverseProxy: 'Python cannot be enabled whilst the reverse proxy is enabled.',
-    pythonCannotBeEnabledWithPhp: 'Python cannot be enabled whilst PHP is enabled.',
-    enablePython: 'enable Python',
-    djangoRules: 'Django rules',
-    enableDjangoRules: 'enable Django-specific rules',
+    pythonIsDisabled: `${common.python} is disabled.`,
+    pythonCannotBeEnabledWithReverseProxy: `${common.python} cannot be enabled whilst the reverse proxy is enabled.`,
+    pythonCannotBeEnabledWithPhp: `${common.python} cannot be enabled whilst ${common.php} is enabled.`,
+    enablePython: `${common.enable} ${common.python}`,
+    djangoRules: `${common.django} rules`,
+    enableDjangoRules: `${common.enable} ${common.django}-specific rules`,
 };
diff --git a/src/nginxconfig/i18n/en/templates/domain_sections/reverse_proxy.js b/src/nginxconfig/i18n/en/templates/domain_sections/reverse_proxy.js
index b10c514..133b199 100644
--- a/src/nginxconfig/i18n/en/templates/domain_sections/reverse_proxy.js
+++ b/src/nginxconfig/i18n/en/templates/domain_sections/reverse_proxy.js
@@ -14,11 +14,13 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
+import common from '../../common';
+
 export default {
     reverseProxy: 'Reverse proxy',
     reverseProxyIsDisabled: 'Reverse proxy is disabled.',
-    reverseProxyCannotBeEnabledWithPhp: 'Reverse proxy cannot be enabled whilst PHP is enabled.',
-    reverseProxyCannotBeEnabledWithPython: 'Reverse proxy cannot be enabled whilst Python is enabled.',
-    enableReverseProxy: 'enable reverse proxy',
+    reverseProxyCannotBeEnabledWithPhp: `Reverse proxy cannot be enabled whilst ${common.php} is enabled.`,
+    reverseProxyCannotBeEnabledWithPython: `Reverse proxy cannot be enabled whilst ${common.python} is enabled.`,
+    enableReverseProxy: `${common.enable} reverse proxy`,
     path: 'Path',
 };
diff --git a/src/nginxconfig/i18n/en/templates/domain_sections/routing.js b/src/nginxconfig/i18n/en/templates/domain_sections/routing.js
index f68cd04..d6b54c7 100644
--- a/src/nginxconfig/i18n/en/templates/domain_sections/routing.js
+++ b/src/nginxconfig/i18n/en/templates/domain_sections/routing.js
@@ -14,12 +14,13 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
+import common from '../../common';
+
 export default {
-    enable: 'enable',
     fallbackRouting: 'Fallback routing',
-    fallbackRoutingPhpPath: 'Fallback routing PHP path',
-    legacyPhpRouting: 'Legacy PHP routing',
-    enableLegacyRouting: 'enable legacy routing',
+    fallbackRoutingPhpPath: `Fallback routing ${common.php} path`,
+    legacyPhpRouting: `Legacy ${common.php} routing`,
+    enableLegacyRouting: `${common.enable} legacy routing`,
     path: 'Path',
     routing: 'Routing',
 };
diff --git a/src/nginxconfig/i18n/en/templates/global.js b/src/nginxconfig/i18n/en/templates/global.js
deleted file mode 100644
index 3b7637d..0000000
--- a/src/nginxconfig/i18n/en/templates/global.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-Copyright 2020 DigitalOcean
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-export default {
-    back: 'Back',
-    next: 'Next',
-};
diff --git a/src/nginxconfig/i18n/en/templates/global_sections/https.js b/src/nginxconfig/i18n/en/templates/global_sections/https.js
index 8b9181c..12b349e 100644
--- a/src/nginxconfig/i18n/en/templates/global_sections/https.js
+++ b/src/nginxconfig/i18n/en/templates/global_sections/https.js
@@ -14,16 +14,19 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
+import common from '../../common';
+
+const mozilla = 'Mozilla';
+
 export default {
-    sslProfile: 'SSL Profile',
-    httpsMustBeEnabledOnOneSite: 'HTTPS must be enabled on at least one site to configure global HTTPS settings.',
+    sslProfile: `${common.ssl} Profile`,
+    httpsMustBeEnabledOnOneSite: `${common.https} must be enabled on at least one site to configure global ${common.https} settings.`,
     ocspDnsResolvers: 'OCSP DNS Resolvers',
     cloudflareResolver: 'Cloudflare Resolver',
     googlePublicDns: 'Google Public DNS',
     openDns: 'OpenDNS',
-    letsEncryptWebroot: 'Let\'s Encrypt webroot',
-    mozillaModern: 'Mozilla Modern',
-    mozillaIntermediate: 'Mozilla Intermediate',
-    mozillaOld: 'Mozilla Old',
-    https: 'HTTPS',
+    letsEncryptWebroot: `${common.letsEncrypt} webroot`,
+    mozillaModern: `${mozilla} Modern`,
+    mozillaIntermediate: `${mozilla} Intermediate`,
+    mozillaOld: `${mozilla} Old`,
 };
diff --git a/src/nginxconfig/i18n/en/templates/global_sections/logging.js b/src/nginxconfig/i18n/en/templates/global_sections/logging.js
index e3ddd52..dcefc45 100644
--- a/src/nginxconfig/i18n/en/templates/global_sections/logging.js
+++ b/src/nginxconfig/i18n/en/templates/global_sections/logging.js
@@ -14,7 +14,8 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
+import common from '../../common';
+
 export default {
-    enableFileNotFoundErrorLogging: 'enable file not found error logging in',
-    logging: 'Logging',
+    enableFileNotFoundErrorLogging: `${common.enable} file not found error logging in`,
 };
diff --git a/src/nginxconfig/i18n/en/templates/global_sections/nginx.js b/src/nginxconfig/i18n/en/templates/global_sections/nginx.js
index 07b4ea5..3934a74 100644
--- a/src/nginxconfig/i18n/en/templates/global_sections/nginx.js
+++ b/src/nginxconfig/i18n/en/templates/global_sections/nginx.js
@@ -14,8 +14,9 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
+import common from '../../common';
+
 export default {
-    nginxConfigDirectory: 'NGINX config directory',
+    nginxConfigDirectory: `${common.nginx} config directory`,
     mb: 'MB',
-    nginx: 'NGINX',
 };
diff --git a/src/nginxconfig/i18n/en/templates/global_sections/performance.js b/src/nginxconfig/i18n/en/templates/global_sections/performance.js
index 51e875c..94ba8f0 100644
--- a/src/nginxconfig/i18n/en/templates/global_sections/performance.js
+++ b/src/nginxconfig/i18n/en/templates/global_sections/performance.js
@@ -14,11 +14,13 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
+import common from '../../common';
+
 export default {
     gzipCompression: 'Gzip compression',
-    enableGzipCompression: 'enable gzip compression',
+    enableGzipCompression: `${common.enable} gzip compression`,
     brotliCompression: 'Brotli compression',
-    enableBrotliCompression: 'enable brotli compression',
+    enableBrotliCompression: `${common.enable} brotli compression`,
     expirationForAssets: 'Expiration for assets',
     expirationForMedia: 'Expiration for media',
     expirationForSvgs: 'Expiration for SVGs',
diff --git a/src/nginxconfig/i18n/en/templates/global_sections/php.js b/src/nginxconfig/i18n/en/templates/global_sections/php.js
index ba7a5b3..4131b51 100644
--- a/src/nginxconfig/i18n/en/templates/global_sections/php.js
+++ b/src/nginxconfig/i18n/en/templates/global_sections/php.js
@@ -14,10 +14,12 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
+import common from '../../common';
+
 export default {
-    phpServer: 'PHP server',
-    phpMustBeEnabledOnOneSite: 'PHP must be enabled on at least one site to configure global PHP settings.',
-    phpBackupServer: 'PHP backup server',
+    phpServer: `${common.php} server`,
+    phpMustBeEnabledOnOneSite: `${common.php} must be enabled on at least one site to configure global ${common.php} settings.`,
+    phpBackupServer: `${common.php} backup server`,
     tcp: 'TCP',
     hhvmSocket: 'HHVM socket',
     php5Socket: '5.x socket',
@@ -26,5 +28,4 @@ export default {
     php72Socket: '7.2 socket',
     php73Socket: '7.3 socket',
     disabled: 'Disabled',
-    php: 'PHP',
 };
diff --git a/src/nginxconfig/i18n/en/templates/global_sections/python.js b/src/nginxconfig/i18n/en/templates/global_sections/python.js
index 5b33d15..03f2750 100644
--- a/src/nginxconfig/i18n/en/templates/global_sections/python.js
+++ b/src/nginxconfig/i18n/en/templates/global_sections/python.js
@@ -14,8 +14,9 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
+import common from '../../common';
+
 export default {
-    pythonServer: 'Python server',
-    pythonMustBeEnabledOnOneSite: 'Python must be enabled on at least one site to configure global Python settings.',
-    python: 'Python',
+    pythonServer: `${common.python} server`,
+    pythonMustBeEnabledOnOneSite: `${common.python} must be enabled on at least one site to configure global ${common.python} settings.`,
 };
diff --git a/src/nginxconfig/i18n/en/templates/global_sections/security.js b/src/nginxconfig/i18n/en/templates/global_sections/security.js
index df0e66f..25fc25b 100644
--- a/src/nginxconfig/i18n/en/templates/global_sections/security.js
+++ b/src/nginxconfig/i18n/en/templates/global_sections/security.js
@@ -15,6 +15,5 @@ limitations under the License.
 */
 
 export default {
-    enable: 'enable',
     security: 'Security',
 };
diff --git a/src/nginxconfig/i18n/en/templates/global_sections/tools.js b/src/nginxconfig/i18n/en/templates/global_sections/tools.js
index ed7327e..e368399 100644
--- a/src/nginxconfig/i18n/en/templates/global_sections/tools.js
+++ b/src/nginxconfig/i18n/en/templates/global_sections/tools.js
@@ -14,11 +14,13 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
+import common from '../../common';
+
 export default {
     modularizedStructure: 'Modularized structure',
-    enableModularizedConfigFiles: 'enable modularized config files',
+    enableModularizedConfigFiles: `${common.enable} modularized config files`,
     symlinkVhost: 'Symlink vhost',
-    enableSymLinksFrom: 'enable symlinks from',
+    enableSymLinksFrom: `${common.enable} symlinks from`,
     to: 'to',
     shareConfiguration: 'Share configuration',
     resetConfiguration: 'Reset configuration',
diff --git a/src/nginxconfig/i18n/en/templates/index.js b/src/nginxconfig/i18n/en/templates/index.js
index 913a8a6..d9c1982 100644
--- a/src/nginxconfig/i18n/en/templates/index.js
+++ b/src/nginxconfig/i18n/en/templates/index.js
@@ -15,11 +15,9 @@ limitations under the License.
 */
 
 import app from './app';
-import domain from './domain';
-import global from './global';
 import setup from './setup';
 import domainSections from './domain_sections';
 import globalSections from './global_sections';
 import setupSections from './setup_sections';
 
-export default { app, domain, global, setup, domainSections, globalSections, setupSections };
+export default { app, setup, domainSections, globalSections, setupSections };
diff --git a/src/nginxconfig/i18n/en/templates/setup.js b/src/nginxconfig/i18n/en/templates/setup.js
index a5a6ec9..f025229 100644
--- a/src/nginxconfig/i18n/en/templates/setup.js
+++ b/src/nginxconfig/i18n/en/templates/setup.js
@@ -15,8 +15,6 @@ limitations under the License.
 */
 
 export default {
-    back: 'Back',
-    next: 'Next',
     downloadConfig: 'Download Config',
     copyBase64: 'Copy Base64',
 };
diff --git a/src/nginxconfig/i18n/en/templates/setup_sections/certbot.js b/src/nginxconfig/i18n/en/templates/setup_sections/certbot.js
index 5371c27..a572be7 100644
--- a/src/nginxconfig/i18n/en/templates/setup_sections/certbot.js
+++ b/src/nginxconfig/i18n/en/templates/setup_sections/certbot.js
@@ -14,12 +14,16 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
+import common from '../../common';
+
+const certbot = 'Certbot';
+
 export default {
-    commentOutSslDirectivesInConfiguration: 'Comment out SSL related directives in the configuration:',
-    reloadYourNginxServer: 'Reload your NGINX server:',
-    obtainSslCertificatesFromLetsEncrypt: 'Obtain SSL certificates from Let\'s Encrypt using Certbot:',
-    uncommentSslDirectivesInConfiguration: 'Uncomment SSL related directives in the configuration:',
-    configureCertbotToReloadNginxOnCertificateRenewal: 'Configure Certbot to reload NGINX when it successfully renews certificates:',
-    certbotDoesNotNeedToBeSetupForYourConfiguration: 'Certbot does not need to be set up for your NGINX configuration.',
-    certbot: 'Certbot',
+    commentOutSslDirectivesInConfiguration: `Comment out ${common.ssl} related directives in the configuration:`,
+    reloadYourNginxServer: `Reload your ${common.nginx} server:`,
+    obtainSslCertificatesFromLetsEncrypt: `Obtain ${common.ssl} certificates from ${common.letsEncrypt} using ${certbot}:`,
+    uncommentSslDirectivesInConfiguration: `Uncomment ${common.ssl} related directives in the configuration:`,
+    configureCertbotToReloadNginxOnCertificateRenewal: `Configure ${certbot} to reload ${common.nginx} when it successfully renews certificates:`,
+    certbotDoesNotNeedToBeSetupForYourConfiguration: `${certbot} does not need to be set up for your ${common.nginx} configuration.`,
+    certbot,
 };
diff --git a/src/nginxconfig/i18n/en/templates/setup_sections/download.js b/src/nginxconfig/i18n/en/templates/setup_sections/download.js
index 7ebbd3e..04200e3 100644
--- a/src/nginxconfig/i18n/en/templates/setup_sections/download.js
+++ b/src/nginxconfig/i18n/en/templates/setup_sections/download.js
@@ -14,6 +14,8 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
+import common from '../../common';
+
 export default {
     downloadTheGeneratedConfig: '<b>Download</b> the generated config:',
     andUploadItToYourServers: 'and <b>upload</b> it to your server\'s',
@@ -21,8 +23,8 @@ export default {
     or: 'or, ',
     copyBase64StringOfCompressedConfig: 'Copy a base64 string of the compressed config',
     pasteItInYourServersCommandLineAndExecute: ', paste it in your server\'s command line and execute it.',
-    navigateToYourNginxConfigurationDirectoryOnYourServer: 'Navigate to your NGINX <b>configuration directory</b> on your server:',
-    createABackupOfYourCurrentNginxConfiguration: 'Create a <b>backup</b> of your current NGINX configuration:',
+    navigateToYourNginxConfigurationDirectoryOnYourServer: `Navigate to your ${common.nginx} <b>configuration directory</b> on your server:`,
+    createABackupOfYourCurrentNginxConfiguration: `Create a <b>backup</b> of your current ${common.nginx} configuration:`,
     extractTheNewCompressedConfigurationArchiveUsingTar: '<b>Extract</b> the new compressed configuration archive using tar:',
     download: 'Download',
 };
diff --git a/src/nginxconfig/i18n/en/templates/setup_sections/go_live.js b/src/nginxconfig/i18n/en/templates/setup_sections/go_live.js
index 6172cb5..ced4c70 100644
--- a/src/nginxconfig/i18n/en/templates/setup_sections/go_live.js
+++ b/src/nginxconfig/i18n/en/templates/setup_sections/go_live.js
@@ -14,8 +14,10 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
+import common from '../../common';
+
 export default {
     letsGoLive: 'Let\'s go live!',
-    reloadNginxToLoadInYourNewConfiguration: 'Reload NGINX to load in your new configuration:',
+    reloadNginxToLoadInYourNewConfiguration: `Reload ${common.nginx} to load in your new configuration:`,
     goLive: 'Go live!',
 };
diff --git a/src/nginxconfig/i18n/en/templates/setup_sections/ssl.js b/src/nginxconfig/i18n/en/templates/setup_sections/ssl.js
index e1dc86d..ad159f2 100644
--- a/src/nginxconfig/i18n/en/templates/setup_sections/ssl.js
+++ b/src/nginxconfig/i18n/en/templates/setup_sections/ssl.js
@@ -14,9 +14,11 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
+import common from '../../common';
+
 export default {
     generateDiffieHellmanKeysByRunningThisCommandOnYourServer: 'Generate <b>Diffie-Hellman keys</b> by running this command on your server:',
-    createACommonAcmeChallengeDirectoryForLetsEncrypt: 'Create a common <b>ACME-challenge</b> directory (for <b>Let\'s Encrypt</b>):',
-    noAdditionalStepsAreNeededToSetUpSslForNginx: 'No additional steps are needed to set up SSL for your NGINX configuration.',
-    sslInit: 'SSL init',
+    createACommonAcmeChallengeDirectoryForLetsEncrypt: `Create a common <b>ACME-challenge</b> directory (for <b>${common.letsEncrypt}</b>):`,
+    noAdditionalStepsAreNeededToSetUpSslForNginx: `No additional steps are needed to set up ${common.ssl} for your ${common.nginx} configuration.`,
+    sslInit: `${common.ssl} init`,
 };
diff --git a/src/nginxconfig/templates/domain.vue b/src/nginxconfig/templates/domain.vue
index 39efdf5..d369cd5 100644
--- a/src/nginxconfig/templates/domain.vue
+++ b/src/nginxconfig/templates/domain.vue
@@ -39,10 +39,10 @@ limitations under the License.
 
             <div class="navigation-buttons">
                 <a v-if="previousTab !== false" class="button is-mini" @click="active = previousTab">
-                    <i class="fas fa-long-arrow-alt-left"></i> <span>{{ i18n.templates.domain.back }}</span>
+                    <i class="fas fa-long-arrow-alt-left"></i> <span>{{ i18n.common.back }}</span>
                 </a>
                 <a v-if="nextTab !== false" class="button is-primary is-mini" @click="active = nextTab">
-                    <span>{{ i18n.templates.domain.next }}</span> <i class="fas fa-long-arrow-alt-right"></i>
+                    <span>{{ i18n.common.next }}</span> <i class="fas fa-long-arrow-alt-right"></i>
                 </a>
             </div>
         </div>
@@ -50,6 +50,7 @@ limitations under the License.
 </template>
 
 <script>
+    import i18n from '../i18n';
     import isChanged from '../util/is_changed';
     import Presets from './domain_sections/presets';
     import * as Sections from './domain_sections';
@@ -75,6 +76,7 @@ limitations under the License.
         },
         data() {
             return {
+                i18n,
                 active: tabs[0].key,
                 tabs,
             };
diff --git a/src/nginxconfig/templates/domain_sections/https.vue b/src/nginxconfig/templates/domain_sections/https.vue
index ce67f22..2c35d7d 100644
--- a/src/nginxconfig/templates/domain_sections/https.vue
+++ b/src/nginxconfig/templates/domain_sections/https.vue
@@ -18,7 +18,7 @@ limitations under the License.
     <div>
         <div class="field is-horizontal">
             <div class="field-label">
-                <label class="label">{{ i18n.templates.domainSections.https.https }}</label>
+                <label class="label">{{ i18n.common.https }}</label>
             </div>
             <div class="field-body">
                 <div class="field">
@@ -216,7 +216,7 @@ limitations under the License.
         certType: {
             default: 'letsEncrypt',
             options: {
-                letsEncrypt: i18n.templates.domainSections.https.letsEncrypt,
+                letsEncrypt: i18n.common.letsEncrypt,
                 custom: i18n.templates.domainSections.https.customCertificate,
             },
             enabled: true,
@@ -236,16 +236,16 @@ limitations under the License.
     };
 
     export default {
-        name: 'DomainHTTPS',                                    // Component name
-        display: i18n.templates.domainSections.https.https,     // Display name for tab
-        key: 'https',                                           // Key for data in parent
-        delegated: delegatedFromDefaults(defaults),             // Data the parent will present here
+        name: 'DomainHTTPS',                            // Component name
+        display: i18n.common.https,                     // Display name for tab
+        key: 'https',                                   // Key for data in parent
+        delegated: delegatedFromDefaults(defaults),     // Data the parent will present here
         components: {
             PrettyCheck,
             PrettyRadio,
         },
         props: {
-            data: Object,                                       // Data delegated back to us from parent
+            data: Object,                               // Data delegated back to us from parent
         },
         data () {
             return {
@@ -253,7 +253,7 @@ limitations under the License.
             };
         },
         computed: {
-            ...computedFromDefaults(defaults, 'https'),         // Getters & setters for the delegated data
+            ...computedFromDefaults(defaults, 'https'), // Getters & setters for the delegated data
             nginxDir() {
                 return this.$parent.$parent.$data.global.nginx.nginxConfigDirectory.computed.replace(/\/+$/, '');
             },
diff --git a/src/nginxconfig/templates/domain_sections/logging.vue b/src/nginxconfig/templates/domain_sections/logging.vue
index 5726319..74ba8e8 100644
--- a/src/nginxconfig/templates/domain_sections/logging.vue
+++ b/src/nginxconfig/templates/domain_sections/logging.vue
@@ -72,15 +72,15 @@ limitations under the License.
     };
 
     export default {
-        name: 'DomainLogging',                                      // Component name
-        display: i18n.templates.domainSections.logging.logging,     // Display name for tab
-        key: 'logging',                                             // Key for data in parent
-        delegated: delegatedFromDefaults(defaults),                 // Data the parent will present here
+        name: 'DomainLogging',                                  // Component name
+        display: i18n.common.logging,                           // Display name for tab
+        key: 'logging',                                         // Key for data in parent
+        delegated: delegatedFromDefaults(defaults),             // Data the parent will present here
         components: {
             PrettyCheck,
         },
         props: {
-            data: Object,                                           // Data delegated back to us from parent
+            data: Object,                                       // Data delegated back to us from parent
         },
         data () {
             return {
diff --git a/src/nginxconfig/templates/domain_sections/php.vue b/src/nginxconfig/templates/domain_sections/php.vue
index 6322e29..daae373 100644
--- a/src/nginxconfig/templates/domain_sections/php.vue
+++ b/src/nginxconfig/templates/domain_sections/php.vue
@@ -18,7 +18,7 @@ limitations under the License.
     <div>
         <div v-if="!phpEnabled" class="field is-horizontal is-aligned-top">
             <div class="field-label">
-                <label class="label">{{ i18n.templates.domainSections.php.php }}</label>
+                <label class="label">{{ i18n.common.php }}</label>
             </div>
             <div class="field-body">
                 <div class="field">
@@ -39,7 +39,7 @@ limitations under the License.
 
         <div v-else class="field is-horizontal">
             <div class="field-label">
-                <label class="label">PHP</label>
+                <label class="label">{{ i18n.common.php }}</label>
             </div>
             <div class="field-body">
                 <div class="field">
@@ -138,7 +138,7 @@ limitations under the License.
 
     export default {
         name: 'DomainPHP',                                  // Component name
-        display: i18n.templates.domainSections.php.php,     // Display name for tab
+        display: i18n.common.php,                           // Display name for tab
         key: 'php',                                         // Key for data in parent
         delegated: delegatedFromDefaults(defaults),         // Data the parent will present here
         components: {
@@ -152,7 +152,7 @@ limitations under the License.
                 i18n,
             };
         },
-        computed: computedFromDefaults(defaults, 'php'), // Getters & setters for the delegated data
+        computed: computedFromDefaults(defaults, 'php'),    // Getters & setters for the delegated data
         watch: {
             // If the Reverse proxy or Python is enabled, PHP will be forced off
             '$parent.$props.data': {
diff --git a/src/nginxconfig/templates/domain_sections/presets.vue b/src/nginxconfig/templates/domain_sections/presets.vue
index aefda02..945dd1d 100644
--- a/src/nginxconfig/templates/domain_sections/presets.vue
+++ b/src/nginxconfig/templates/domain_sections/presets.vue
@@ -67,7 +67,7 @@ limitations under the License.
         },
         php: {
             default: true,
-            display: i18n.templates.domainSections.presets.php,
+            display: i18n.common.php,
             enabled: true,
             computedCheck (data) {
                 return data.php.php.computed
@@ -81,7 +81,7 @@ limitations under the License.
         },
         django: {
             default: false,
-            display: i18n.templates.domainSections.presets.django,
+            display: i18n.common.django,
             enabled: true,
             computedCheck (data) {
                 return data.python.python.computed
@@ -110,7 +110,7 @@ limitations under the License.
         },
         wordPress: {
             default: false,
-            display: i18n.templates.domainSections.presets.wordPress,
+            display: i18n.common.wordPress,
             enabled: true,
             computedCheck (data) {
                 return data.routing.index.computed === 'index.php'
@@ -123,7 +123,7 @@ limitations under the License.
         },
         drupal: {
             default: false,
-            display: i18n.templates.domainSections.presets.drupal,
+            display: i18n.common.drupal,
             enabled: true,
             computedCheck (data) {
                 return data.routing.index.computed === 'index.php'
@@ -136,7 +136,7 @@ limitations under the License.
         },
         magento: {
             default: false,
-            display: i18n.templates.domainSections.presets.magento,
+            display: i18n.common.magento,
             enabled: true,
             computedCheck (data) {
                 return data.routing.index.computed === 'index.php'
diff --git a/src/nginxconfig/templates/domain_sections/python.vue b/src/nginxconfig/templates/domain_sections/python.vue
index 70a99a3..f75b879 100644
--- a/src/nginxconfig/templates/domain_sections/python.vue
+++ b/src/nginxconfig/templates/domain_sections/python.vue
@@ -18,7 +18,7 @@ limitations under the License.
     <div>
         <div v-if="!pythonEnabled" class="field is-horizontal is-aligned-top">
             <div class="field-label">
-                <label class="label">{{ i18n.templates.domainSections.python.python }}</label>
+                <label class="label">{{ i18n.common.python }}</label>
             </div>
             <div class="field-body">
                 <div class="field">
@@ -39,7 +39,7 @@ limitations under the License.
 
         <div v-else class="field is-horizontal">
             <div class="field-label">
-                <label class="label">{{ i18n.templates.domainSections.python.python }}</label>
+                <label class="label">{{ i18n.common.python }}</label>
             </div>
             <div class="field-body">
                 <div class="field">
@@ -93,15 +93,15 @@ limitations under the License.
     };
 
     export default {
-        name: 'DomainPython',                                   // Component name
-        display: i18n.templates.domainSections.python.python,   // Display name for tab
-        key: 'python',                                          // Key for data in parent
-        delegated: delegatedFromDefaults(defaults),             // Data the parent will present here
+        name: 'DomainPython',                               // Component name
+        display: i18n.common.python,                        // Display name for tab
+        key: 'python',                                      // Key for data in parent
+        delegated: delegatedFromDefaults(defaults),         // Data the parent will present here
         components: {
             PrettyCheck,
         },
         props: {
-            data: Object,                                       // Data delegated back to us from parent
+            data: Object,                                   // Data delegated back to us from parent
         },
         data () {
             return {
diff --git a/src/nginxconfig/templates/domain_sections/routing.vue b/src/nginxconfig/templates/domain_sections/routing.vue
index 2bad533..28e94ee 100644
--- a/src/nginxconfig/templates/domain_sections/routing.vue
+++ b/src/nginxconfig/templates/domain_sections/routing.vue
@@ -26,7 +26,7 @@ limitations under the License.
                         <div class="checkbox">
                             <PrettyCheck v-model="root" class="p-default p-curve p-fill p-icon">
                                 <i slot="extra" class="icon fas fa-check"></i>
-                                {{ i18n.templates.domainSections.routing.enable }}
+                                {{ i18n.common.enable }}
                             </PrettyCheck>
                         </div>
                     </div>
diff --git a/src/nginxconfig/templates/global.vue b/src/nginxconfig/templates/global.vue
index c1afedd..6e9becd 100644
--- a/src/nginxconfig/templates/global.vue
+++ b/src/nginxconfig/templates/global.vue
@@ -34,16 +34,17 @@ limitations under the License.
 
         <div class="navigation-buttons">
             <a v-if="previousTab !== false" class="button is-mini" @click="active = previousTab">
-                <i class="fas fa-long-arrow-alt-left"></i> <span>{{ i18n.templates.global.back }}</span>
+                <i class="fas fa-long-arrow-alt-left"></i> <span>{{ i18n.common.back }}</span>
             </a>
             <a v-if="nextTab !== false" class="button is-primary is-mini" @click="active = nextTab">
-                <span>{{ i18n.templates.global.next }}</span> <i class="fas fa-long-arrow-alt-right"></i>
+                <span>{{ i18n.common.next }}</span> <i class="fas fa-long-arrow-alt-right"></i>
             </a>
         </div>
     </div>
 </template>
 
 <script>
+    import i18n from '../i18n';
     import isChanged from '../util/is_changed';
     import * as Sections from './global_sections';
 
@@ -61,6 +62,7 @@ limitations under the License.
         },
         data() {
             return {
+                i18n,
                 active: tabs[0].key,
                 tabs,
             };
diff --git a/src/nginxconfig/templates/global_sections/https.vue b/src/nginxconfig/templates/global_sections/https.vue
index 3bb5855..75100d8 100644
--- a/src/nginxconfig/templates/global_sections/https.vue
+++ b/src/nginxconfig/templates/global_sections/https.vue
@@ -144,23 +144,23 @@ limitations under the License.
     };
 
     export default {
-        name: 'GlobalHTTPS',                                    // Component name
-        display: i18n.templates.globalSections.https.https,     // Display name for tab
-        key: 'https',                                           // Key for data in parent
-        delegated: delegatedFromDefaults(defaults),             // Data the parent will present here
+        name: 'GlobalHTTPS',                                // Component name
+        display: i18n.common.https,                         // Display name for tab
+        key: 'https',                                       // Key for data in parent
+        delegated: delegatedFromDefaults(defaults),         // Data the parent will present here
         components: {
             PrettyCheck,
             PrettyRadio,
         },
         props: {
-            data: Object,                                       // Data delegated back to us from parent
+            data: Object,                                   // Data delegated back to us from parent
         },
         data () {
             return {
                 i18n,
             };
         },
-        computed: computedFromDefaults(defaults, 'https'), // Getters & setters for the delegated data
+        computed: computedFromDefaults(defaults, 'https'),  // Getters & setters for the delegated data
         watch: {
             // Check SSL profile is valid
             '$props.data.sslProfile': {
diff --git a/src/nginxconfig/templates/global_sections/logging.vue b/src/nginxconfig/templates/global_sections/logging.vue
index 05110ef..9b42c0c 100644
--- a/src/nginxconfig/templates/global_sections/logging.vue
+++ b/src/nginxconfig/templates/global_sections/logging.vue
@@ -93,7 +93,7 @@ limitations under the License.
 
     export default {
         name: 'GlobalLogging',                                  // Component name
-        display: i18n.templates.globalSections.logging.logging, // Display name for tab
+        display: i18n.common.logging,                           // Display name for tab
         key: 'logging',                                         // Key for data in parent
         delegated: delegatedFromDefaults(defaults),             // Data the parent will present here
         components: {
diff --git a/src/nginxconfig/templates/global_sections/nginx.vue b/src/nginxconfig/templates/global_sections/nginx.vue
index 7b4478d..deacfd6 100644
--- a/src/nginxconfig/templates/global_sections/nginx.vue
+++ b/src/nginxconfig/templates/global_sections/nginx.vue
@@ -144,7 +144,7 @@ limitations under the License.
 
     export default {
         name: 'GlobalNGINX',                                // Component name
-        display: i18n.templates.globalSections.nginx.nginx, // Display name for tab
+        display: i18n.common.nginx,                         // Display name for tab
         key: 'nginx',                                       // Key for data in parent
         delegated: delegatedFromDefaults(defaults),         // Data the parent will present here
         components: {
diff --git a/src/nginxconfig/templates/global_sections/php.vue b/src/nginxconfig/templates/global_sections/php.vue
index daa003d..431ddb7 100644
--- a/src/nginxconfig/templates/global_sections/php.vue
+++ b/src/nginxconfig/templates/global_sections/php.vue
@@ -100,15 +100,15 @@ limitations under the License.
     };
 
     export default {
-        name: 'GlobalPHP',                                  // Component name
-        display: i18n.templates.globalSections.php.php,     // Display name for tab
-        key: 'php',                                         // Key for data in parent
-        delegated: delegatedFromDefaults(defaults),         // Data the parent will present here
+        name: 'GlobalPHP',                              // Component name
+        display: i18n.common.php,                       // Display name for tab
+        key: 'php',                                     // Key for data in parent
+        delegated: delegatedFromDefaults(defaults),     // Data the parent will present here
         components: {
             VueSelect,
         },
         props: {
-            data: Object,                                   // Data delegated back to us from parent
+            data: Object,                               // Data delegated back to us from parent
         },
         data () {
             return {
@@ -116,7 +116,7 @@ limitations under the License.
             };
         },
         computed: {
-            ...computedFromDefaults(defaults, 'php'),  // Getters & setters for the delegated data
+            ...computedFromDefaults(defaults, 'php'),   // Getters & setters for the delegated data
             phpServerOptions() {
                 return Object.entries(this.$props.data.phpServer.options)
                     .map(([key, value]) => ({ label: value, value: key }));
diff --git a/src/nginxconfig/templates/global_sections/python.vue b/src/nginxconfig/templates/global_sections/python.vue
index 8070d1e..5bbaac7 100644
--- a/src/nginxconfig/templates/global_sections/python.vue
+++ b/src/nginxconfig/templates/global_sections/python.vue
@@ -63,19 +63,19 @@ limitations under the License.
     };
 
     export default {
-        name: 'GlobalPython',                                   // Component name
-        display: i18n.templates.globalSections.python.python,   // Display name for tab
-        key: 'python',                                          // Key for data in parent
-        delegated: delegatedFromDefaults(defaults),             // Data the parent will present here
+        name: 'GlobalPython',                               // Component name
+        display: i18n.common.python,                        // Display name for tab
+        key: 'python',                                      // Key for data in parent
+        delegated: delegatedFromDefaults(defaults),         // Data the parent will present here
         props: {
-            data: Object,                                       // Data delegated back to us from parent
+            data: Object,                                   // Data delegated back to us from parent
         },
         data () {
             return {
                 i18n,
             };
         },
-        computed: computedFromDefaults(defaults, 'python'),     // Getters & setters for the delegated data
+        computed: computedFromDefaults(defaults, 'python'), // Getters & setters for the delegated data
         watch: {
             // Enable Python server settings if any site uses Python
             '$parent.$parent.$data.domains': {
diff --git a/src/nginxconfig/templates/global_sections/security.vue b/src/nginxconfig/templates/global_sections/security.vue
index 56a95a1..77d50a9 100644
--- a/src/nginxconfig/templates/global_sections/security.vue
+++ b/src/nginxconfig/templates/global_sections/security.vue
@@ -59,7 +59,7 @@ limitations under the License.
                         <div class="checkbox">
                             <PrettyCheck v-model="serverTokens" class="p-default p-curve p-fill p-icon">
                                 <i slot="extra" class="icon fas fa-check"></i>
-                                {{ i18n.templates.globalSections.security.enable }}
+                                {{ i18n.common.enable }}
                             </PrettyCheck>
                         </div>
                     </div>
@@ -77,7 +77,7 @@ limitations under the License.
                         <div class="checkbox">
                             <PrettyCheck v-model="limitReq" class="p-default p-curve p-fill p-icon">
                                 <i slot="extra" class="icon fas fa-check"></i>
-                                {{ i18n.templates.globalSections.security.enable }}
+                                {{ i18n.common.enable }}
                             </PrettyCheck>
                         </div>
                     </div>
diff --git a/src/nginxconfig/templates/setup.vue b/src/nginxconfig/templates/setup.vue
index 43391af..9965e8d 100644
--- a/src/nginxconfig/templates/setup.vue
+++ b/src/nginxconfig/templates/setup.vue
@@ -35,10 +35,10 @@ limitations under the License.
 
             <div class="navigation-buttons">
                 <a v-if="previousTab !== false" class="button is-mini" @click="active = previousTab">
-                    <i class="fas fa-long-arrow-alt-left"></i> <span>{{ i18n.templates.setup.back }}</span>
+                    <i class="fas fa-long-arrow-alt-left"></i> <span>{{ i18n.common.back }}</span>
                 </a>
                 <a v-if="nextTab !== false" class="button is-primary is-mini" @click="active = nextTab">
-                    <span>{{ i18n.templates.setup.next }}</span> <i class="fas fa-long-arrow-alt-right"></i>
+                    <span>{{ i18n.common.next }}</span> <i class="fas fa-long-arrow-alt-right"></i>
                 </a>
             </div>
         </div>
@@ -55,6 +55,7 @@ limitations under the License.
     import getStream from 'get-stream';
     import { gzip } from 'node-gzip';
     import copy from 'copy-to-clipboard';
+    import i18n from '../i18n';
     import * as Sections from './setup_sections';
 
     const tabs = Object.values(Sections);
@@ -66,6 +67,7 @@ limitations under the License.
         },
         data() {
             return {
+                i18n,
                 active: tabs[0].key,
                 tabs,
             };
diff --git a/vue.config.js b/vue.config.js
index 9b32962..8f0c506 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -22,7 +22,7 @@ module.exports = {
     publicPath: './',
     outputDir: 'dist',
     filenameHashing: false,
-    productionSourceMap: false,
+    //productionSourceMap: false,
     configureWebpack: {
         plugins: [
             process.argv.includes('--analyze') && new BundleAnalyzerPlugin(),