diff --git a/docker/dev/Dockerfile b/docker/dev/Dockerfile index dcb1f1f9..45d97a32 100644 --- a/docker/dev/Dockerfile +++ b/docker/dev/Dockerfile @@ -15,7 +15,7 @@ ENV SUPPRESS_NO_CONFIG_WARNING=1 \ RUN echo "fs.file-max = 65535" > /etc/sysctl.conf \ && apt-get update \ - && apt-get install -y jq python3-pip logrotate \ + && apt-get install -y jq python3-pip logrotate moreutils \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* diff --git a/frontend/package.json b/frontend/package.json index 73b9b05c..8117f959 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -12,6 +12,7 @@ "prettier": "biome format --write ./src", "locale-extract": "formatjs extract 'src/**/*.tsx'", "locale-compile": "formatjs compile-folder src/locale/src src/locale/lang", + "locale-sort": "./src/locale/scripts/locale-sort.sh", "test": "vitest" }, "dependencies": { diff --git a/frontend/src/locale/scripts/locale-sort.sh b/frontend/src/locale/scripts/locale-sort.sh new file mode 100755 index 00000000..916d6e61 --- /dev/null +++ b/frontend/src/locale/scripts/locale-sort.sh @@ -0,0 +1,36 @@ +#!/bin/bash +set -e -o pipefail + +DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +cd "$DIR/../src" || exit 1 + +if ! command -v jq &> /dev/null; then + echo "jq could not be found, please install it to sort JSON files." + exit 1 +fi + +# iterate over all json files in the current directory +for file in *.json; do + if [[ -f "$file" ]]; then + if [[ ! -s "$file" ]]; then + echo "Skipping empty file $file" + continue + fi + + if [ "$file" == "lang-list.json" ]; then + continue + fi + + # get content of file before sorting + original_content=$(<"$file") + # compare with sorted content + sorted_content=$(jq --tab --sort-keys . "$file") + if [ "$original_content" == "$sorted_content" ]; then + echo "$file is already sorted" + continue + fi + + echo "Sorting $file" + jq --tab --sort-keys . "$file" | sponge "$file" + fi +done diff --git a/frontend/src/locale/src/en.json b/frontend/src/locale/src/en.json index ed34e861..4c4d5479 100644 --- a/frontend/src/locale/src/en.json +++ b/frontend/src/locale/src/en.json @@ -1,10 +1,10 @@ { - "access.actions-title": { - "defaultMessage": "Access List #{id}" - }, "access.access-count": { "defaultMessage": "{count} Rules" }, + "access.actions-title": { + "defaultMessage": "Access List #{id}" + }, "access.add": { "defaultMessage": "Add Access List" }, @@ -29,21 +29,21 @@ "action.disable": { "defaultMessage": "Disable" }, - "action.enable": { - "defaultMessage": "Enable" - }, "action.edit": { "defaultMessage": "Edit" }, + "action.enable": { + "defaultMessage": "Enable" + }, "action.permissions": { "defaultMessage": "Permissions" }, - "auditlog.title": { - "defaultMessage": "Audit Log" - }, "action.view-details": { "defaultMessage": "View Details" }, + "auditlog.title": { + "defaultMessage": "Audit Log" + }, "cancel": { "defaultMessage": "Cancel" }, @@ -65,9 +65,6 @@ "close": { "defaultMessage": "Close" }, - "created-on": { - "defaultMessage": "Created: {date}" - }, "column.access": { "defaultMessage": "Access" }, @@ -113,30 +110,21 @@ "column.scheme": { "defaultMessage": "Scheme" }, - "column.status": { - "defaultMessage": "Status" + "column.source": { + "defaultMessage": "Source" }, "column.ssl": { "defaultMessage": "SSL" }, - "column.source": { - "defaultMessage": "Source" + "column.status": { + "defaultMessage": "Status" + }, + "created-on": { + "defaultMessage": "Created: {date}" }, "dashboard.title": { "defaultMessage": "Dashboard" }, - "dead-hosts.actions-title": { - "defaultMessage": "404 Host #{id}" - }, - "dead-hosts.add": { - "defaultMessage": "Add 404 Host" - }, - "dead-hosts.count": { - "defaultMessage": "{count} 404 Hosts" - }, - "dead-hosts.empty": { - "defaultMessage": "There are no 404 Hosts" - }, "dead-host.delete.content": { "defaultMessage": "Are you sure you want to delete this 404 host?" }, @@ -149,6 +137,18 @@ "dead-host.new": { "defaultMessage": "New 404 Host" }, + "dead-hosts.actions-title": { + "defaultMessage": "404 Host #{id}" + }, + "dead-hosts.add": { + "defaultMessage": "Add 404 Host" + }, + "dead-hosts.count": { + "defaultMessage": "{count} 404 Hosts" + }, + "dead-hosts.empty": { + "defaultMessage": "There are no 404 Hosts" + }, "dead-hosts.title": { "defaultMessage": "404 Hosts" }, @@ -191,12 +191,12 @@ "empty-search": { "defaultMessage": "No results found" }, + "empty-subtitle": { + "defaultMessage": "Why don't you create one?" + }, "enabled": { "defaultMessage": "Enabled" }, - "error.passwords-must-match": { - "defaultMessage": "Passwords must match" - }, "error.invalid-auth": { "defaultMessage": "Invalid email or password" }, @@ -209,6 +209,9 @@ "error.max-domains": { "defaultMessage": "Too many domains, max is {max}" }, + "error.passwords-must-match": { + "defaultMessage": "Passwords must match" + }, "error.required": { "defaultMessage": "This is required" }, @@ -218,15 +221,6 @@ "event.created-redirection-host": { "defaultMessage": "Created Redirection Host" }, - "event.updated-redirection-host": { - "defaultMessage": "Updated Redirection Host" - }, - "event.enabled-redirection-host": { - "defaultMessage": "Enabled Redirection Host" - }, - "event.disabled-redirection-host": { - "defaultMessage": "Disabled Redirection Host" - }, "event.created-stream": { "defaultMessage": "Created Stream" }, @@ -245,27 +239,30 @@ "event.disabled-dead-host": { "defaultMessage": "Disabled 404 Host" }, + "event.disabled-redirection-host": { + "defaultMessage": "Disabled Redirection Host" + }, "event.disabled-stream": { "defaultMessage": "Disabled Stream" }, "event.enabled-dead-host": { "defaultMessage": "Enabled 404 Host" }, + "event.enabled-redirection-host": { + "defaultMessage": "Enabled Redirection Host" + }, "event.enabled-stream": { "defaultMessage": "Enabled Stream" }, + "event.updated-redirection-host": { + "defaultMessage": "Updated Redirection Host" + }, "event.updated-user": { "defaultMessage": "Updated User" }, "footer.github-fork": { "defaultMessage": "Fork me on Github" }, - "empty-subtitle": { - "defaultMessage": "Why don't you create one?" - }, - "host.flags.title": { - "defaultMessage": "Options" - }, "host.flags.block-exploits": { "defaultMessage": "Block Common Exploits" }, @@ -275,6 +272,9 @@ "host.flags.protocols": { "defaultMessage": "Protocols" }, + "host.flags.title": { + "defaultMessage": "Options" + }, "hosts.title": { "defaultMessage": "Hosts" }, @@ -335,6 +335,9 @@ "notification.stream-enabled": { "defaultMessage": "Stream has been enabled" }, + "notification.success": { + "defaultMessage": "Success" + }, "notification.user-deleted": { "defaultMessage": "User has been deleted" }, @@ -347,9 +350,6 @@ "notification.user-saved": { "defaultMessage": "User has been saved" }, - "notification.success": { - "defaultMessage": "Success" - }, "offline": { "defaultMessage": "Offline" }, @@ -401,11 +401,14 @@ "proxy-hosts.title": { "defaultMessage": "Proxy Hosts" }, + "redirect-host.forward-domain": { + "defaultMessage": "Forward Domain" + }, "redirect-host.forward-scheme": { "defaultMessage": "Scheme" }, - "redirect-host.forward-domain": { - "defaultMessage": "Forward Domain" + "redirection-host.new": { + "defaultMessage": "New Redirection Host" }, "redirection-hosts.actions-title": { "defaultMessage": "Redirection Host #{id}" @@ -419,9 +422,6 @@ "redirection-hosts.empty": { "defaultMessage": "There are no Redirection Hosts" }, - "redirection-host.new": { - "defaultMessage": "New Redirection Host" - }, "redirection-hosts.title": { "defaultMessage": "Redirection Hosts" }, @@ -497,12 +497,12 @@ "user.current-password": { "defaultMessage": "Current Password" }, - "user.delete.title": { - "defaultMessage": "Delete User" - }, "user.delete.content": { "defaultMessage": "Are you sure you want to delete this user?" }, + "user.delete.title": { + "defaultMessage": "Delete User" + }, "user.edit": { "defaultMessage": "Edit User" }, diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index d2bded43..77132b3b 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -19,6 +19,12 @@ export default defineConfig({ throw error; } console.log(stdout); + execFile("yarn", ["locale-sort"], (error, stdout, _stderr) => { + if (error) { + throw error; + } + console.log(stdout); + }); }); } }); diff --git a/scripts/buildx b/scripts/buildx index 4da6c167..5ad77ed9 100755 --- a/scripts/buildx +++ b/scripts/buildx @@ -5,7 +5,6 @@ DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" echo -e "${BLUE}❯ ${CYAN}Building docker multiarch: ${YELLOW}${*}${RESET}" -DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "${DIR}/.." || exit 1 # determine commit if not already set