diff --git a/app/src/main/java/app/fedilab/android/activities/MediaActivity.java b/app/src/main/java/app/fedilab/android/activities/MediaActivity.java
index 2fe067f2..4d5f7662 100644
--- a/app/src/main/java/app/fedilab/android/activities/MediaActivity.java
+++ b/app/src/main/java/app/fedilab/android/activities/MediaActivity.java
@@ -28,6 +28,7 @@ import android.net.Uri;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
+import android.text.Html;
 import android.view.Display;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -35,6 +36,7 @@ import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.Window;
+import android.widget.Toast;
 
 import androidx.annotation.NonNull;
 import androidx.core.app.ActivityCompat;
@@ -44,6 +46,12 @@ import androidx.fragment.app.FragmentManager;
 import androidx.fragment.app.FragmentStatePagerAdapter;
 import androidx.viewpager.widget.ViewPager;
 
+import com.github.stom79.mytransl.MyTransL;
+import com.github.stom79.mytransl.client.HttpsConnectionException;
+import com.github.stom79.mytransl.client.Results;
+import com.github.stom79.mytransl.translate.Params;
+import com.github.stom79.mytransl.translate.Translate;
+
 import org.jetbrains.annotations.NotNull;
 
 import java.util.ArrayList;
@@ -137,8 +145,50 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
         handler = new Handler();
         if (description != null && description.trim().length() > 0 && description.trim().compareTo("null") != 0) {
             binding.mediaDescription.setText(description);
+            binding.translate.setOnClickListener(v -> {
+                String descriptionToTranslate = attachments.get(mediaPosition - 1).description;
+                MyTransL.translatorEngine et = MyTransL.translatorEngine.LIBRETRANSLATE;
+                final MyTransL myTransL = MyTransL.getInstance(et);
+                myTransL.setObfuscation(true);
+                Params params = new Params();
+                params.setSplit_sentences(false);
+                params.setFormat(Params.fType.TEXT);
+                params.setSource_lang("auto");
+                myTransL.setLibretranslateDomain("translate.fedilab.app");
+                String statusToTranslate;
+                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
+                    statusToTranslate = Html.fromHtml(descriptionToTranslate, Html.FROM_HTML_MODE_LEGACY).toString();
+                else
+                    statusToTranslate = Html.fromHtml(descriptionToTranslate).toString();
+                myTransL.translate(statusToTranslate, MyTransL.getLocale(), params, new Results() {
+                    @Override
+                    public void onSuccess(Translate translate) {
+                        if (translate.getTranslatedContent() != null) {
+                            attachments.get(mediaPosition - 1).translation = translate.getTranslatedContent();
+                            binding.mediaDescriptionTranslated.setText(translate.getTranslatedContent());
+                            binding.mediaDescriptionTranslated.setVisibility(View.VISIBLE);
+                            binding.mediaDescription.setVisibility(View.GONE);
+                        } else {
+                            Toasty.error(MediaActivity.this, getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show();
+                        }
+                    }
 
+                    @Override
+                    public void onFail(HttpsConnectionException httpsConnectionException) {
+
+                    }
+                });
+            });
+            if (attachments.get(mediaPosition - 1).translation != null) {
+                binding.mediaDescription.setVisibility(View.GONE);
+                binding.mediaDescriptionTranslated.setText(attachments.get(mediaPosition - 1).translation);
+                binding.mediaDescriptionTranslated.setVisibility(View.VISIBLE);
+            } else {
+                binding.mediaDescription.setVisibility(View.VISIBLE);
+                binding.mediaDescriptionTranslated.setVisibility(View.GONE);
+            }
         }
+
         binding.mediaViewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
             public void onPageScrollStateChanged(int state) {
             }
@@ -155,6 +205,48 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
                 if (description != null && description.trim().length() > 0 && description.trim().compareTo("null") != 0) {
                     binding.mediaDescription.setText(description);
                 }
+                binding.translate.setOnClickListener(v -> {
+                    String descriptionToTranslate = attachments.get(position).description;
+                    MyTransL.translatorEngine et = MyTransL.translatorEngine.LIBRETRANSLATE;
+                    final MyTransL myTransL = MyTransL.getInstance(et);
+                    myTransL.setObfuscation(true);
+                    Params params = new Params();
+                    params.setSplit_sentences(false);
+                    params.setFormat(Params.fType.TEXT);
+                    params.setSource_lang("auto");
+                    myTransL.setLibretranslateDomain("translate.fedilab.app");
+                    String statusToTranslate;
+                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
+                        statusToTranslate = Html.fromHtml(descriptionToTranslate, Html.FROM_HTML_MODE_LEGACY).toString();
+                    else
+                        statusToTranslate = Html.fromHtml(descriptionToTranslate).toString();
+                    myTransL.translate(statusToTranslate, MyTransL.getLocale(), params, new Results() {
+                        @Override
+                        public void onSuccess(Translate translate) {
+                            if (translate.getTranslatedContent() != null) {
+                                attachments.get(position).translation = translate.getTranslatedContent();
+                                binding.mediaDescriptionTranslated.setText(translate.getTranslatedContent());
+                                binding.mediaDescriptionTranslated.setVisibility(View.VISIBLE);
+                                binding.mediaDescription.setVisibility(View.GONE);
+                            } else {
+                                Toasty.error(MediaActivity.this, getString(R.string.toast_error_translate), Toast.LENGTH_LONG).show();
+                            }
+                        }
+
+                        @Override
+                        public void onFail(HttpsConnectionException httpsConnectionException) {
+
+                        }
+                    });
+                });
+                if (attachments.get(position).translation != null) {
+                    binding.mediaDescription.setVisibility(View.GONE);
+                    binding.mediaDescriptionTranslated.setText(attachments.get(position).translation);
+                    binding.mediaDescriptionTranslated.setVisibility(View.VISIBLE);
+                } else {
+                    binding.mediaDescription.setVisibility(View.VISIBLE);
+                    binding.mediaDescriptionTranslated.setVisibility(View.GONE);
+                }
             }
         });
 
@@ -270,7 +362,21 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
                         handler = new Handler();
                         if (description != null && description.trim().length() > 0 && description.trim().compareTo("null") != 0) {
                             binding.mediaDescription.setText(description);
+                            if (attachments.get(mediaPosition - 1).translation != null) {
+                                binding.mediaDescription.setVisibility(View.GONE);
+                                binding.mediaDescriptionTranslated.setText(attachments.get(binding.mediaViewpager.getCurrentItem()).translation);
+                                binding.mediaDescriptionTranslated.setVisibility(View.VISIBLE);
+                            } else {
+                                binding.mediaDescription.setVisibility(View.VISIBLE);
+                                binding.mediaDescriptionTranslated.setVisibility(View.GONE);
+                            }
+                        } else {
+                            binding.translate.setVisibility(View.GONE);
                         }
+                    } else {
+                        binding.translate.setVisibility(View.GONE);
+                        binding.mediaDescriptionTranslated.setVisibility(View.GONE);
+                        binding.mediaDescription.setVisibility(View.GONE);
                     }
                 }
                 break;
@@ -323,8 +429,10 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
         if (!fullscreen) {
             showSystemUI();
             binding.mediaDescription.setVisibility(View.VISIBLE);
+            binding.translate.setVisibility(View.VISIBLE);
         } else {
             binding.mediaDescription.setVisibility(View.GONE);
+            binding.translate.setVisibility(View.GONE);
             hideSystemUI();
         }
     }
diff --git a/app/src/main/java/app/fedilab/android/client/entities/api/Attachment.java b/app/src/main/java/app/fedilab/android/client/entities/api/Attachment.java
index 3cd5e3c0..c4a2b9ab 100644
--- a/app/src/main/java/app/fedilab/android/client/entities/api/Attachment.java
+++ b/app/src/main/java/app/fedilab/android/client/entities/api/Attachment.java
@@ -49,6 +49,7 @@ public class Attachment implements Serializable {
     public String peertubeHost = null;
     public String peertubeId = null;
     public String focus = null;
+    public String translation = null;
 
     public static class Meta implements Serializable {
         @SerializedName("focus")
diff --git a/app/src/main/res/layout/activity_media_pager.xml b/app/src/main/res/layout/activity_media_pager.xml
index 9ac18524..3083aa76 100644
--- a/app/src/main/res/layout/activity_media_pager.xml
+++ b/app/src/main/res/layout/activity_media_pager.xml
@@ -40,7 +40,7 @@
 
             <TextView
                 android:id="@+id/media_description"
-                android:layout_width="wrap_content"
+                android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_gravity="center_horizontal|bottom"
                 android:layout_marginBottom="70dp"
@@ -52,8 +52,38 @@
                 android:visibility="gone"
                 tools:visibility="visible"
                 app:layout_constraintBottom_toBottomOf="parent"
-                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintEnd_toStartOf="@+id/translate"
                 app:layout_constraintStart_toStartOf="parent" />
-        </androidx.constraintlayout.widget.ConstraintLayout>
+
+        <TextView
+            android:id="@+id/media_description_translated"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_horizontal|bottom"
+            android:layout_marginBottom="70dp"
+            android:background="#AA000000"
+            android:gravity="center"
+            android:padding="12dp"
+            android:textColor="#ffffffff"
+            android:textIsSelectable="true"
+            android:visibility="gone"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            tools:visibility="visible" />
+
+        <com.google.android.material.button.MaterialButton
+            android:id="@+id/translate"
+            style="@style/Widget.App.Button.IconOnly.Outline"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+
+            android:contentDescription="@string/translate"
+            app:icon="@drawable/ic_baseline_translate_24"
+            app:iconPadding="0dp"
+            app:layout_constraintBottom_toBottomOf="@+id/media_description"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toEndOf="@+id/media_description" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
 
 </app.futured.hauler.HaulerView>