diff --git a/src/components/dialogs/WorldDialog/WorldDialog.vue b/src/components/dialogs/WorldDialog/WorldDialog.vue
index 3a27e93a..4417b4ee 100644
--- a/src/components/dialogs/WorldDialog/WorldDialog.vue
+++ b/src/components/dialogs/WorldDialog/WorldDialog.vue
@@ -150,12 +150,25 @@
-
+
{{ worldDialog.ref.description }}{{ translatedDescription || worldDialog.ref.description }}
+
@@ -737,6 +750,7 @@
Flag,
Home,
Image,
+ Languages,
LineChart,
MessageSquare,
Monitor,
@@ -777,6 +791,7 @@
userStatusClass
} from '../../../shared/utils';
import {
+ useAdvancedSettingsStore,
useAppearanceSettingsStore,
useFavoriteStore,
useGalleryStore,
@@ -803,6 +818,8 @@
import InstanceActionBar from '../../InstanceActionBar.vue';
const modalStore = useModalStore();
+ const { translateText } = useAdvancedSettingsStore();
+ const { bioLanguage, translationApi, translationApiType } = storeToRefs(useAdvancedSettingsStore());
const NewInstanceDialog = defineAsyncComponent(() => import('../NewInstanceDialog.vue'));
const ChangeWorldImageDialog = defineAsyncComponent(() => import('./ChangeWorldImageDialog.vue'));
@@ -839,6 +856,8 @@
const newInstanceDialogLocationTag = ref('');
const changeWorldImageDialogVisible = ref(false);
const previousImageUrl = ref('');
+ const translatedDescription = ref('');
+ const isTranslating = ref(false);
const isDialogVisible = computed({
get() {
@@ -1336,6 +1355,40 @@
D.urlList = worldDialog.value.ref?.urlList ?? [];
D.visible = true;
}
+
+ async function translateDescription() {
+ if (isTranslating.value) return;
+
+ const description = worldDialog.value.ref.description;
+ if (!description) return;
+
+ // Toggle: if already translated, clear to show original
+ if (translatedDescription.value) {
+ translatedDescription.value = '';
+ return;
+ }
+
+ isTranslating.value = true;
+ try {
+ const translated = await translateText(description, bioLanguage.value);
+ if (!translated) {
+ throw new Error('No translation returned');
+ }
+
+ translatedDescription.value = translated;
+ } catch (error) {
+ console.error('Translation failed:', error);
+ } finally {
+ isTranslating.value = false;
+ }
+ }
+
+ watch(
+ () => worldDialog.value.id,
+ () => {
+ translatedDescription.value = '';
+ }
+ );