diff --git a/.github/workflows/translate-strings.yml b/.github/workflows/translate-strings.yml
new file mode 100644
index 000000000..4a4ae1885
--- /dev/null
+++ b/.github/workflows/translate-strings.yml
@@ -0,0 +1,69 @@
+name: Generate Translation Strings
+on:
+  push:
+    branches:
+      - dev
+jobs:
+  generate-translate-strings:
+    name: Generate Translation Strings
+    runs-on: ubuntu-latest
+    permissions:
+      contents: write
+    steps:
+      - name: Checkout code
+        uses: actions/checkout@v4
+        with:
+          token: ${{ secrets.PNGX_BOT_PAT }}
+          ref: ${{ github.head_ref }}
+      - name: Set up Python
+        id: setup-python
+        uses: actions/setup-python@v5
+      - name: Install system dependencies
+        run: |
+          sudo apt-get update -qq
+          sudo apt-get install -qq --no-install-recommends gettext
+      - name: Install uv
+        uses: astral-sh/setup-uv@v5
+        with:
+          enable-cache: true
+      - name: Install backend python dependencies
+        run: |
+          uv sync \
+            --group dev \
+            --frozen
+      - name: Generate backend translation strings
+        run: cd src/ && uv run manage.py makemessages -l en_US -i "samples*"
+      - name: Install pnpm
+        uses: pnpm/action-setup@v4
+        with:
+          version: 10
+      - name: Use Node.js 20
+        uses: actions/setup-node@v4
+        with:
+          node-version: 20.x
+          cache: 'pnpm'
+          cache-dependency-path: 'src-ui/pnpm-lock.yaml'
+      - name: Cache frontend dependencies
+        id: cache-frontend-deps
+        uses: actions/cache@v4
+        with:
+          path: |
+            ~/.pnpm-store
+            ~/.cache
+          key: ${{ runner.os }}-frontenddeps-${{ hashFiles('src-ui/pnpm-lock.yaml') }}
+      - name: Install frontend dependencies
+        if: steps.cache-frontend-deps.outputs.cache-hit != 'true'
+        run: cd src-ui && pnpm install
+      - name: Re-link Angular cli
+        run: cd src-ui && pnpm link @angular/cli
+      - name: Generate frontend translation strings
+        run: |
+          cd src-ui
+          pnpm run ng extract-i18n
+      - name: Commit changes
+        uses: stefanzweifel/git-auto-commit-action@v5
+        with:
+          file_pattern: 'src-ui/messages.xlf src/locale/en_US/LC_MESSAGES/django.po'
+          commit_message: "Auto translate strings"
+          commit_user_name: "GitHub Actions"
+          commit_author: "GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com>"