From caa72418f1817ab48c37a1f7e9d6e614aef2dff3 Mon Sep 17 00:00:00 2001 From: Zoey Date: Tue, 29 Oct 2024 11:56:52 +0100 Subject: [PATCH] add multi language support through @lateautumn233/dep updates MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Zoey Co-Authored-By: 秋秋 --- Dockerfile | 4 +- README.md | 1 + frontend/js/app/cache.js | 2 +- frontend/js/app/i18n.js | 18 +- .../js/app/nginx/certificates-list-item.ejs | 6 +- frontend/js/app/nginx/certificates/form.ejs | 26 +- frontend/js/app/nginx/certificates/form.js | 2 +- .../js/app/nginx/certificates/list/item.ejs | 2 +- frontend/js/app/nginx/certificates/main.ejs | 4 +- frontend/js/app/nginx/dead/delete.ejs | 2 +- frontend/js/app/nginx/dead/form.ejs | 30 +- frontend/js/app/nginx/dead/form.js | 2 +- frontend/js/app/nginx/dead/list/item.ejs | 2 +- frontend/js/app/nginx/proxy/delete.ejs | 2 +- frontend/js/app/nginx/proxy/form.ejs | 34 +- frontend/js/app/nginx/proxy/form.js | 2 +- frontend/js/app/nginx/proxy/list/item.ejs | 2 +- frontend/js/app/nginx/redirection/delete.ejs | 2 +- frontend/js/app/nginx/redirection/form.ejs | 32 +- frontend/js/app/nginx/redirection/form.js | 2 +- .../js/app/nginx/redirection/list/item.ejs | 2 +- frontend/js/app/ui/footer/main.ejs | 9 +- frontend/js/i18n/en-lang.json | 289 +++++++++++++++++ frontend/js/i18n/messages.json | 297 ------------------ frontend/js/login/ui/login.ejs | 2 +- frontend/package.json | 2 +- frontend/webpack.config.js | 2 +- 27 files changed, 384 insertions(+), 396 deletions(-) create mode 100644 frontend/js/i18n/en-lang.json delete mode 100644 frontend/js/i18n/messages.json diff --git a/Dockerfile b/Dockerfile index f1115d02..3978fcf1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -75,9 +75,9 @@ FROM zoeyvid/nginx-quic:350-python SHELL ["/bin/ash", "-eo", "pipefail", "-c"] COPY rootfs / COPY --from=zoeyvid/certbot-docker:59 /usr/local /usr/local -COPY --from=zoeyvid/curl-quic:420 /usr/local/bin/curl /usr/local/bin/curl +COPY --from=zoeyvid/curl-quic:423 /usr/local/bin/curl /usr/local/bin/curl -ARG CRS_VER=v4.7.0 +ARG CRS_VER=v4.8.0 RUN apk upgrade --no-cache -a && \ apk add --no-cache ca-certificates tzdata tini \ nodejs \ diff --git a/README.md b/README.md index f0702773..b4be6995 100644 --- a/README.md +++ b/README.md @@ -85,6 +85,7 @@ so that the barrier for entry here is low. - Supports PUID/PGID in network mode host; add `net.ipv4.ip_unprivileged_port_start=0` at the end of `/etc/sysctl.conf` - Option to set IP bindings for multiple instances in network mode host - Option to change backend port +- multi lang support, if you want to add an language, see this commit as an example: https://github.com/ZoeyVid/NPMplus/commit/a026b42329f66b89fe1fbe5e6034df5d3fc2e11f - See the composefile for all available options - If you want to redirect all HTTP traffic to HTTPS, you can use the `compose.override.yaml` file. diff --git a/frontend/js/app/cache.js b/frontend/js/app/cache.js index 6d1fbc4f..17e60def 100644 --- a/frontend/js/app/cache.js +++ b/frontend/js/app/cache.js @@ -2,7 +2,7 @@ const UserModel = require('../models/user'); let cache = { User: new UserModel.Model(), - locale: 'en', + locale: navigator.languages[0].toLowerCase(), version: null }; diff --git a/frontend/js/app/i18n.js b/frontend/js/app/i18n.js index c63cdc07..048d21e4 100644 --- a/frontend/js/app/i18n.js +++ b/frontend/js/app/i18n.js @@ -1,5 +1,4 @@ -const Cache = ('./cache'); -const messages = require('../i18n/messages.json'); +const Cache = require('./cache'); /** * @param {String} namespace @@ -8,16 +7,11 @@ const messages = require('../i18n/messages.json'); */ module.exports = function (namespace, key, data) { let locale = Cache.locale; - // check that the locale exists - if (typeof messages[locale] === 'undefined') { - locale = 'en'; - } + messages = require('../i18n/en-lang.json'); - if (typeof messages[locale][namespace] !== 'undefined' && typeof messages[locale][namespace][key] !== 'undefined') { - return messages[locale][namespace][key](data); - } else if (locale !== 'en' && typeof messages['en'][namespace] !== 'undefined' && typeof messages['en'][namespace][key] !== 'undefined') { - return messages['en'][namespace][key](data); + if (typeof messages[namespace] !== 'undefined' && typeof messages[namespace][key] !== 'undefined') { + return messages[namespace][key](data); + } else { + return `(MISSING: ${namespace}.${key})`; } - - return '(MISSING: ' + namespace + '/' + key + ')'; }; diff --git a/frontend/js/app/nginx/certificates-list-item.ejs b/frontend/js/app/nginx/certificates-list-item.ejs index aa4b53ad..89ed8c81 100644 --- a/frontend/js/app/nginx/certificates-list-item.ejs +++ b/frontend/js/app/nginx/certificates-list-item.ejs @@ -3,16 +3,16 @@
<%- i18n('all-hosts', 'new-cert') %>
- <%- i18n('all-hosts', 'with-le') %> + <%- i18n('all-hosts', 'with-certbot') %> <% } else if (id > 0) { %>
<%- provider === 'other' ? nice_name : domain_names.join(', ') %>
- <%- i18n('ssl', provider) %> – Expires: <%- formatDbDate(expires_on, 'Do MMMM YYYY, h:mm a') %> + <%- i18n('tls', provider) %> – Expires: <%- formatDbDate(expires_on, 'Do MMMM YYYY, h:mm a') %> <% } else { %>
<%- i18n('all-hosts', 'none') %>
- <%- i18n('all-hosts', 'no-ssl') %> + <%- i18n('all-hosts', 'no-tls') %> <% } %> diff --git a/frontend/js/app/nginx/certificates/form.ejs b/frontend/js/app/nginx/certificates/form.ejs index ab57f5b2..0068a69f 100644 --- a/frontend/js/app/nginx/certificates/form.ejs +++ b/frontend/js/app/nginx/certificates/form.ejs @@ -7,7 +7,7 @@
-

<%- i18n('ssl', 'processing-info') %>

+

<%- i18n('tls', 'processing-info') %>

@@ -16,7 +16,7 @@
-
<%- i18n('ssl', 'hosts-warning') %>
+
<%- i18n('tls', 'hosts-warning') %>
@@ -29,7 +29,7 @@
- +
- <%= i18n('ssl', 'credentials-file-content-info') %> + <%= i18n('tls', 'credentials-file-content-info') %>
- <%= i18n('ssl', 'stored-as-plaintext-info') %> + <%= i18n('tls', 'stored-as-plaintext-info') %>
@@ -109,7 +109,7 @@
- +
- <%= i18n('ssl', 'propagation-seconds-info') %> + <%= i18n('tls', 'propagation-seconds-info') %>
@@ -134,14 +134,14 @@
<% } else if (provider === 'other') { %>
-
<%= i18n('ssl', 'passphrase-protection-support-info') %>
+
<%= i18n('tls', 'passphrase-protection-support-info') %>
diff --git a/frontend/js/app/nginx/certificates/form.js b/frontend/js/app/nginx/certificates/form.js index 410e149c..21e98a85 100644 --- a/frontend/js/app/nginx/certificates/form.js +++ b/frontend/js/app/nginx/certificates/form.js @@ -106,7 +106,7 @@ module.exports = Mn.View.extend({ } if (domain_err) { - alert(i18n('ssl', 'no-wildcard-without-dns')); + alert(i18n('tls', 'no-wildcard-without-dns')); return; } diff --git a/frontend/js/app/nginx/certificates/list/item.ejs b/frontend/js/app/nginx/certificates/list/item.ejs index 20d6f239..ffab9ad2 100644 --- a/frontend/js/app/nginx/certificates/list/item.ejs +++ b/frontend/js/app/nginx/certificates/list/item.ejs @@ -28,7 +28,7 @@
- <%- i18n('ssl', provider) %><% if (meta.dns_provider) { %> - <%- dns_providers[meta.dns_provider].name %><% } %> + <%- i18n('tls', provider) %><% if (meta.dns_provider) { %> - <%- dns_providers[meta.dns_provider].name %><% } %> <%- formatDbDate(expires_on, 'Do MMMM YYYY, h:mm a') %> diff --git a/frontend/js/app/nginx/certificates/main.ejs b/frontend/js/app/nginx/certificates/main.ejs index dbd6fa85..abd26321 100644 --- a/frontend/js/app/nginx/certificates/main.ejs +++ b/frontend/js/app/nginx/certificates/main.ejs @@ -18,8 +18,8 @@ <%- i18n('certificates', 'add') %>
<% } %> diff --git a/frontend/js/app/nginx/dead/delete.ejs b/frontend/js/app/nginx/dead/delete.ejs index 4bebb436..0cb40a49 100644 --- a/frontend/js/app/nginx/dead/delete.ejs +++ b/frontend/js/app/nginx/dead/delete.ejs @@ -10,7 +10,7 @@ <%= i18n('dead-hosts', 'delete-confirm', {domains: domain_names.join(', ').toHtmlEntities()}) %> <% if (certificate_id) { %>

- <%- i18n('ssl', 'delete-ssl') %> + <%- i18n('tls', 'delete-tls') %> <% } %>
diff --git a/frontend/js/app/nginx/dead/form.ejs b/frontend/js/app/nginx/dead/form.ejs index 911ba84d..168248de 100644 --- a/frontend/js/app/nginx/dead/form.ejs +++ b/frontend/js/app/nginx/dead/form.ejs @@ -30,7 +30,7 @@
- + <%- certificate_id ? '' : ' disabled' %>> - <%- i18n('all-hosts', 'force-ssl') %> + <%- i18n('all-hosts', 'force-https') %>
@@ -51,7 +51,7 @@
@@ -60,7 +60,7 @@ @@ -69,7 +69,7 @@ @@ -86,19 +86,19 @@ <%- getUseDnsChallenge() ? 'checked' : '' %> > - <%= i18n('ssl', 'dns-challenge') %> + <%= i18n('tls', 'dns-challenge') %>
-
<%= i18n('ssl', 'certbot-warning') %>
+
<%= i18n('tls', 'certbot-warning') %>
- +
- <%= i18n('ssl', 'credentials-file-content-info') %> + <%= i18n('tls', 'credentials-file-content-info') %>
- <%= i18n('ssl', 'stored-as-plaintext-info') %> + <%= i18n('tls', 'stored-as-plaintext-info') %>
@@ -148,7 +148,7 @@
- +
- <%= i18n('ssl', 'propagation-seconds-info') %> + <%= i18n('tls', 'propagation-seconds-info') %>
@@ -172,7 +172,7 @@
- +
- <%= i18n('ssl', 'credentials-file-content-info') %> + <%= i18n('tls', 'credentials-file-content-info') %>
- <%= i18n('ssl', 'stored-as-plaintext-info') %> + <%= i18n('tls', 'stored-as-plaintext-info') %>
@@ -216,7 +216,7 @@
- +
- <%= i18n('ssl', 'propagation-seconds-info') %> + <%= i18n('tls', 'propagation-seconds-info') %>
@@ -240,7 +240,7 @@
- +
- <%= i18n('ssl', 'credentials-file-content-info') %> + <%= i18n('tls', 'credentials-file-content-info') %>
- <%= i18n('ssl', 'stored-as-plaintext-info') %> + <%= i18n('tls', 'stored-as-plaintext-info') %>
@@ -197,7 +197,7 @@
- +
- <%= i18n('ssl', 'propagation-seconds-info') %> + <%= i18n('tls', 'propagation-seconds-info') %>
@@ -221,7 +221,7 @@