diff --git a/.gitea/workflows/assets/crowdin.yml b/.gitea/workflows/assets/crowdin.yml
new file mode 100644
index 0000000..ea2e68c
--- /dev/null
+++ b/.gitea/workflows/assets/crowdin.yml
@@ -0,0 +1,10 @@
+project_id_env: CROWDIN_PROJECT_ID
+api_token_env: CROWDIN_PERSONAL_TOKEN
+base_path: "../../../"
+
+files:
+  - source: /androidApp/src/main/res/values/strings.xml
+    translation: /androidApp/src/main/res/values-%android_code%/%original_file_name%
+    translate_attributes: '0'
+    content_segmentation: '0'
+preserve_hierarchy: true
diff --git a/.gitea/workflows/on_pr.yml b/.gitea/workflows/on_pr.yml
index 183053d..3567e80 100644
--- a/.gitea/workflows/on_pr.yml
+++ b/.gitea/workflows/on_pr.yml
@@ -3,6 +3,7 @@ on:
   pull_request:
     branches:
       - master
+      - chore-crowdin-ci
 
 jobs:
   Lint:
@@ -23,6 +24,56 @@ jobs:
         run: ktlint 'shared/**/*.kt' 'androidApp/**/*.kt' '!shared/build'
       - name: Detecting...
         run: ./detekt-cli-1.23.7/bin/detekt-cli -c detekt.yml --excludes '**/shared/build/**/*.kt'
+  translations:
+    runs-on: ubuntu-latest
+    steps:
+      - name: Check out repository code
+        uses: actions/checkout@v4
+      - name: upload translation sources
+        uses: crowdin/github-action@v2
+        with:
+          config: './.gitea/workflows/assets/crowdin.yml'
+          upload_sources: true
+          upload_translations: false
+          download_translations: false
+          create_pull_request: false
+          push_translations: false
+        env:
+          CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
+          CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
+      - name: wait
+        run: sleep 10s
+      - name: download translations
+        uses: crowdin/github-action@v2
+        with:
+          config: './.gitea/workflows/assets/crowdin.yml'
+          upload_sources: false
+          upload_translations: false
+          download_translations: true
+          create_pull_request: false
+          push_translations: false
+        env:
+          CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
+          CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
+      - name: Check for uncommitted changes
+        id: check-changes
+        uses: mskri/check-uncommitted-changes-action@v1.0.1
+      - name: Commit Changes
+        if: steps.check-changes.outputs.changes != ''
+        run: |
+          git config --global user.email aminecmi+giteadrone@pm.me
+          git config --global user.name giteadrone
+          git add ./androidApp/src/main/res/*
+          git commit -m "translation: translation files"
+      - name: Push changes
+        if: steps.check-changes.outputs.changes != ''
+        uses: appleboy/git-push-action@v1.0.0
+        with:
+          author_name: giteadrone
+          author_email: aminecmi+giteadrone@pm.me
+          remote: ${{ secrets.REMOTE_URL }}
+          ssh_key: ${{ secrets.PRIVATE_KEY }}
+          branch: ${{ github.head_ref || github.ref_name }}
   build:
     needs: Lint
     uses: ./.gitea/workflows/common_build.yml