mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-04-18 14:23:51 +02:00
i18n
This commit is contained in:
@@ -103,6 +103,7 @@
|
||||
import { acquireModalPortalLayer } from '@/lib/modalPortalLayers';
|
||||
import { storeToRefs } from 'pinia';
|
||||
import { toast } from 'vue-sonner';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
import Noty from 'noty';
|
||||
|
||||
@@ -111,6 +112,7 @@
|
||||
|
||||
const galleryStore = useGalleryStore();
|
||||
const { fullscreenImageDialog } = storeToRefs(galleryStore);
|
||||
const { t } = useI18n();
|
||||
|
||||
const viewerEl = ref(null);
|
||||
const portalLayer = acquireModalPortalLayer();
|
||||
@@ -286,7 +288,7 @@
|
||||
|
||||
async function copyImageToClipboard(url) {
|
||||
if (!url) return;
|
||||
const msg = toast.info('Downloading image...');
|
||||
const msg = toast.info(t('message.image.downloading'));
|
||||
try {
|
||||
const response = await webApiService.execute({ url, method: 'GET' });
|
||||
if (response.status !== 200 || !String(response.data).startsWith('data:image/png')) {
|
||||
@@ -294,7 +296,7 @@
|
||||
}
|
||||
const blob = await (await fetch(response.data)).blob();
|
||||
await navigator.clipboard.write([new ClipboardItem({ 'image/png': blob })]);
|
||||
toast.success('Image copied to clipboard');
|
||||
toast.success(t('message.image.copied_to_clipboard'));
|
||||
} catch (error) {
|
||||
console.error('Error downloading image:', error);
|
||||
new Noty({ type: 'error', text: escapeTag(`Failed to download image. ${url}`) }).show();
|
||||
@@ -305,7 +307,7 @@
|
||||
|
||||
async function downloadAndSaveImage(url, fileName) {
|
||||
if (!url) return;
|
||||
const msg = toast.info('Downloading image...');
|
||||
const msg = toast.info(t('message.image.downloading'));
|
||||
try {
|
||||
const response = await webApiService.execute({ url, method: 'GET' });
|
||||
if (response.status !== 200 || !String(response.data).startsWith('data:image/png')) {
|
||||
|
||||
@@ -359,8 +359,8 @@
|
||||
const closeInstance = (location) => {
|
||||
modalStore
|
||||
.confirm({
|
||||
description: 'Continue? X Instance, nobody will be able to join',
|
||||
title: 'Confirm'
|
||||
description: t('confirm.close_instance'),
|
||||
title: t('confirm.title')
|
||||
})
|
||||
.then(async ({ ok }) => {
|
||||
if (!ok) return;
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';
|
||||
import { Button } from '@/components/ui/button';
|
||||
import { computed } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
const props = defineProps({
|
||||
modelValue: { type: String, default: '' },
|
||||
@@ -93,7 +96,9 @@
|
||||
@input="onInput" />
|
||||
|
||||
<div v-if="clearable" class="mt-3 flex justify-end">
|
||||
<Button variant="ghost" size="sm" :disabled="disabled" @click="clear"> Clear </Button>
|
||||
<Button variant="ghost" size="sm" :disabled="disabled" @click="clear">
|
||||
{{ t('view.favorite.clear') }}
|
||||
</Button>
|
||||
</div>
|
||||
</PopoverContent>
|
||||
</Popover>
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
v-if="avatarDialog.ref.styles?.primary || avatarDialog.ref.styles?.secondary"
|
||||
variant="outline"
|
||||
style="margin-right: 5px; margin-top: 5px"
|
||||
>Styles
|
||||
>{{ t('view.favorite.avatars.styles') }}
|
||||
<span v-if="avatarDialog.ref.styles.primary" :class="['x-grey', 'x-tag-border-left']">{{
|
||||
avatarDialog.ref.styles.primary
|
||||
}}</span>
|
||||
@@ -841,7 +841,7 @@
|
||||
avatarId: D.id
|
||||
})
|
||||
.then((args) => {
|
||||
toast.success('Fallback avatar changed');
|
||||
toast.success(t('message.avatar.fallback_changed'));
|
||||
return args;
|
||||
});
|
||||
break;
|
||||
@@ -854,7 +854,7 @@
|
||||
.then((args) => {
|
||||
// 'AVATAR-MODERATION';
|
||||
applyAvatarModeration(args.json);
|
||||
toast.success('Avatar blocked');
|
||||
toast.success(t('message.avatar.blocked'));
|
||||
return args;
|
||||
});
|
||||
break;
|
||||
@@ -883,7 +883,7 @@
|
||||
})
|
||||
.then((args) => {
|
||||
applyAvatar(args.json);
|
||||
toast.success('Avatar updated to public');
|
||||
toast.success(t('message.avatar.updated_public'));
|
||||
return args;
|
||||
});
|
||||
break;
|
||||
@@ -895,7 +895,7 @@
|
||||
})
|
||||
.then((args) => {
|
||||
applyAvatar(args.json);
|
||||
toast.success('Avatar updated to private');
|
||||
toast.success(t('message.avatar.updated_private'));
|
||||
return args;
|
||||
});
|
||||
break;
|
||||
@@ -918,7 +918,7 @@
|
||||
sortUserDialogAvatars(array);
|
||||
}
|
||||
|
||||
toast.success('Avatar deleted');
|
||||
toast.success(t('message.avatar.deleted'));
|
||||
D.visible = false;
|
||||
return args;
|
||||
});
|
||||
@@ -929,7 +929,7 @@
|
||||
avatarId: D.id
|
||||
})
|
||||
.then((args) => {
|
||||
toast.success('Imposter deleted');
|
||||
toast.success(t('message.avatar.impostor_deleted'));
|
||||
showAvatarDialog(D.id);
|
||||
return args;
|
||||
});
|
||||
@@ -940,7 +940,7 @@
|
||||
avatarId: D.id
|
||||
})
|
||||
.then((args) => {
|
||||
toast.success('Imposter queued for creation');
|
||||
toast.success(t('message.avatar.impostor_queued'));
|
||||
return args;
|
||||
});
|
||||
break;
|
||||
@@ -959,7 +959,7 @@
|
||||
avatarId: D.id
|
||||
})
|
||||
.then((args) => {
|
||||
toast.success('Imposter deleted and queued for creation');
|
||||
toast.success(t('message.avatar.impostor_regenerated'));
|
||||
return args;
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1467,8 +1467,8 @@
|
||||
function confirmDeleteGroupPost(post) {
|
||||
modalStore
|
||||
.confirm({
|
||||
description: 'Are you sure you want to delete this post?',
|
||||
title: 'Confirm'
|
||||
description: t('confirm.delete_post'),
|
||||
title: t('confirm.title')
|
||||
})
|
||||
.then(({ ok }) => {
|
||||
if (!ok) return;
|
||||
@@ -1570,8 +1570,8 @@
|
||||
function blockGroup(groupId) {
|
||||
modalStore
|
||||
.confirm({
|
||||
description: 'Are you sure you want to block this group?',
|
||||
title: 'Confirm'
|
||||
description: t('confirm.block_group'),
|
||||
title: t('confirm.title')
|
||||
})
|
||||
.then(({ ok }) => {
|
||||
if (!ok) return;
|
||||
@@ -1591,8 +1591,8 @@
|
||||
function unblockGroup(groupId) {
|
||||
modalStore
|
||||
.confirm({
|
||||
description: 'Are you sure you want to unblock this group?',
|
||||
title: 'Confirm'
|
||||
description: t('confirm.unblock_group'),
|
||||
title: t('confirm.title')
|
||||
})
|
||||
.then(({ ok }) => {
|
||||
if (!ok) return;
|
||||
@@ -1628,9 +1628,9 @@
|
||||
getGroupDialogGroup(id);
|
||||
}
|
||||
if (args.json.membershipStatus === 'member') {
|
||||
toast.success('Group joined');
|
||||
toast.success(t('message.group.joined'));
|
||||
} else if (args.json.membershipStatus === 'requested') {
|
||||
toast.success('Group join request sent');
|
||||
toast.success(t('message.group.join_request_sent'));
|
||||
}
|
||||
return args;
|
||||
});
|
||||
|
||||
@@ -123,9 +123,11 @@
|
||||
{{ t('dialog.user.tags.discord') }}
|
||||
</Badge>
|
||||
</TooltipWrapper>
|
||||
<Badge v-if="userDialog.ref.$isTroll" variant="outline" class="x-tag-troll"> Nuisance </Badge>
|
||||
<Badge v-if="userDialog.ref.$isTroll" variant="outline" class="x-tag-troll">
|
||||
{{ t('view.settings.appearance.user_colors.trust_levels.nuisance') }}
|
||||
</Badge>
|
||||
<Badge v-if="userDialog.ref.$isProbableTroll" variant="outline" class="x-tag-troll">
|
||||
Almost Nuisance
|
||||
{{ t('view.favorite.avatars.almost_nuisance') }}
|
||||
</Badge>
|
||||
<Badge v-if="userDialog.ref.$isModerator" variant="outline" class="x-tag-vip">
|
||||
{{ t('dialog.user.tags.vrchat_team') }}
|
||||
|
||||
@@ -1062,7 +1062,7 @@
|
||||
homeLocation: D.id
|
||||
})
|
||||
.then((args) => {
|
||||
toast.success('Home world updated');
|
||||
toast.success(t('message.world.home_updated'));
|
||||
return args;
|
||||
});
|
||||
break;
|
||||
@@ -1072,7 +1072,7 @@
|
||||
homeLocation: ''
|
||||
})
|
||||
.then((args) => {
|
||||
toast.success('Home world has been reset');
|
||||
toast.success(t('message.world.home_reset'));
|
||||
return args;
|
||||
});
|
||||
break;
|
||||
@@ -1082,7 +1082,7 @@
|
||||
worldId: D.id
|
||||
})
|
||||
.then((args) => {
|
||||
toast.success('World has been published');
|
||||
toast.success(t('message.world.published'));
|
||||
return args;
|
||||
});
|
||||
break;
|
||||
@@ -1092,7 +1092,7 @@
|
||||
worldId: D.id
|
||||
})
|
||||
.then((args) => {
|
||||
toast.success('World has been unpublished');
|
||||
toast.success(t('message.world.unpublished'));
|
||||
return args;
|
||||
});
|
||||
break;
|
||||
@@ -1105,7 +1105,7 @@
|
||||
if (args.params.worldId === worldDialog.value.id && worldDialog.value.visible) {
|
||||
worldDialog.value.hasPersistData = false;
|
||||
}
|
||||
toast.success('Persistent data has been deleted');
|
||||
toast.success(t('message.world.persistent_data_deleted'));
|
||||
return args;
|
||||
});
|
||||
break;
|
||||
@@ -1127,7 +1127,7 @@
|
||||
const array = Array.from(map.values());
|
||||
userDialog.value.worlds = array;
|
||||
}
|
||||
toast.success('World has been deleted');
|
||||
toast.success(t('message.world.deleted'));
|
||||
D.visible = false;
|
||||
return args;
|
||||
});
|
||||
@@ -1365,33 +1365,33 @@
|
||||
navigator.clipboard
|
||||
.writeText(worldDialog.value.id)
|
||||
.then(() => {
|
||||
toast.success('World ID copied to clipboard');
|
||||
toast.success(t('message.world.id_copied'));
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error('copy failed:', err);
|
||||
toast.error('Copy failed');
|
||||
toast.error(t('message.copy_failed'));
|
||||
});
|
||||
}
|
||||
function copyWorldUrl() {
|
||||
navigator.clipboard
|
||||
.writeText(`https://vrchat.com/home/world/${worldDialog.value.id}`)
|
||||
.then(() => {
|
||||
toast.success('World URL copied to clipboard');
|
||||
toast.success(t('message.world.url_copied'));
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error('copy failed:', err);
|
||||
toast.error('Copy failed');
|
||||
toast.error(t('message.copy_failed'));
|
||||
});
|
||||
}
|
||||
function copyWorldName() {
|
||||
navigator.clipboard
|
||||
.writeText(worldDialog.value.ref.name)
|
||||
.then(() => {
|
||||
toast.success('World name copied to clipboard');
|
||||
toast.success(t('message.world.name_copied'));
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error('copy failed:', err);
|
||||
toast.error('Copy failed');
|
||||
toast.error(t('message.copy_failed'));
|
||||
});
|
||||
}
|
||||
function showWorldAllowedDomainsDialog() {
|
||||
|
||||
@@ -134,7 +134,8 @@
|
||||
"Status": "Status",
|
||||
"Avatar": "Avatar",
|
||||
"Bio": "Bio"
|
||||
}
|
||||
},
|
||||
"photon_event_logging": "Photon Event Logging"
|
||||
},
|
||||
"friends_locations": {
|
||||
"online": "Online",
|
||||
@@ -232,7 +233,11 @@
|
||||
"confirm_delete_description": "Found {count} invalid avatars, delete them?",
|
||||
"delete_summary": "Successfully deleted {removed} invalid avatars",
|
||||
"no_invalid_found": "No invalid avatars found",
|
||||
"delete_cancelled": "Delete operation cancelled"
|
||||
"delete_cancelled": "Delete operation cancelled",
|
||||
"local_history": "Local History",
|
||||
"no_group_selected": "No Group Selected",
|
||||
"styles": "Styles",
|
||||
"almost_nuisance": "Almost Nuisance"
|
||||
},
|
||||
"edit_mode": "Edit Mode",
|
||||
"copy": "Copy",
|
||||
@@ -2002,6 +2007,19 @@
|
||||
"decline_type": "Continue? Decline {type}",
|
||||
"delete_type": "Continue? {type}",
|
||||
"command_question": "Continue? {command}",
|
||||
"clear_group": "Continue? Clear Group",
|
||||
"delete_group": "Continue? Delete Group {name}",
|
||||
"delete_post": "Are you sure you want to delete this post?",
|
||||
"block_group": "Are you sure you want to block this group?",
|
||||
"unblock_group": "Are you sure you want to unblock this group?",
|
||||
"leave_group": "Are you sure you want to leave this group?",
|
||||
"disable_gamelog": "Continue? Disable GameLog",
|
||||
"restore_backup": "Continue? Restore Backup",
|
||||
"delete_vrc_registry": "Continue? Delete VRC Registry Settings",
|
||||
"clear_cache": "Continue? Clear all VRChat cache",
|
||||
"close_instance": "Continue? Close Instance, nobody will be able to join",
|
||||
"bulk_unfavorite": "Are you sure you want to unfavorite {count} favorites?\nThis action cannot be undone.",
|
||||
"bulk_unfavorite_title": "Delete {count} favorites?",
|
||||
"restart_required_title": "Restart Required",
|
||||
"restart_now": "Restart Now",
|
||||
"restart_later": "Later"
|
||||
@@ -2176,6 +2194,11 @@
|
||||
"error": "Group already exists with the name {name}"
|
||||
}
|
||||
},
|
||||
"backup_name": {
|
||||
"header": "Backup Name",
|
||||
"description": "Enter a name for the backup",
|
||||
"input_error": "Name is required"
|
||||
},
|
||||
"auto_login_delay": {
|
||||
"header": "Auto-login delay",
|
||||
"description": "Enter delay in seconds (0 to disable, max 10).",
|
||||
@@ -2215,7 +2238,15 @@
|
||||
"create_failed": "Failed to create instance"
|
||||
},
|
||||
"avatar": {
|
||||
"change_moderation_failed": "Failed to change avatar moderation"
|
||||
"change_moderation_failed": "Failed to change avatar moderation",
|
||||
"fallback_changed": "Fallback avatar changed",
|
||||
"blocked": "Avatar blocked",
|
||||
"updated_public": "Avatar updated to public",
|
||||
"updated_private": "Avatar updated to private",
|
||||
"deleted": "Avatar deleted",
|
||||
"impostor_deleted": "Imposter deleted",
|
||||
"impostor_queued": "Imposter queued for creation",
|
||||
"impostor_regenerated": "Imposter deleted and queued for creation"
|
||||
},
|
||||
"avatar_lookup": {
|
||||
"not_found": "Avatar not found in search providers",
|
||||
@@ -2224,7 +2255,9 @@
|
||||
"loading": "Searching for avatar using search providers"
|
||||
},
|
||||
"database": {
|
||||
"upgrade_complete": "Database upgrade complete"
|
||||
"upgrade_complete": "Database upgrade complete",
|
||||
"disk_space": "Please free up some disk space.",
|
||||
"disk_error": "Please check your disk for errors."
|
||||
},
|
||||
"file": {
|
||||
"not_image": "File isn't an image",
|
||||
@@ -2232,12 +2265,19 @@
|
||||
"folder_missing": "Folder doesn't exist"
|
||||
},
|
||||
"group": {
|
||||
"load_failed": "Failed to load group"
|
||||
"load_failed": "Failed to load group",
|
||||
"joined": "Group joined",
|
||||
"join_request_sent": "Group join request sent",
|
||||
"visibility_updated": "Group visibility updated",
|
||||
"subscription_updated": "Group subscription updated"
|
||||
},
|
||||
"invite": {
|
||||
"self_sent": "Self invite sent",
|
||||
"sent": "Invite sent",
|
||||
"message_update_failed": "VRChat API didn't update message, try again"
|
||||
"message_update_failed": "VRChat API didn't update message, try again",
|
||||
"message_updated": "Invite message updated",
|
||||
"response_sent": "Invite response message sent",
|
||||
"response_photo_sent": "Invite response photo message sent"
|
||||
},
|
||||
"launch": {
|
||||
"invalid_path": "Invalid path, you must enter VRChat folder or launch.exe"
|
||||
@@ -2252,7 +2292,16 @@
|
||||
"error": "Upload failed"
|
||||
},
|
||||
"world": {
|
||||
"load_failed": "Failed to load world"
|
||||
"load_failed": "Failed to load world",
|
||||
"home_updated": "Home world updated",
|
||||
"home_reset": "Home world has been reset",
|
||||
"published": "World has been published",
|
||||
"unpublished": "World has been unpublished",
|
||||
"persistent_data_deleted": "Persistent data has been deleted",
|
||||
"deleted": "World has been deleted",
|
||||
"id_copied": "World ID copied to clipboard",
|
||||
"url_copied": "World URL copied to clipboard",
|
||||
"name_copied": "World name copied to clipboard"
|
||||
},
|
||||
"user": {
|
||||
"moderated": "User moderated",
|
||||
@@ -2270,7 +2319,27 @@
|
||||
},
|
||||
"crash": {
|
||||
"vrcx_reload": "VRCX was reloaded for stability"
|
||||
}
|
||||
},
|
||||
"image": {
|
||||
"downloading": "Downloading image...",
|
||||
"copied_to_clipboard": "Image copied to clipboard"
|
||||
},
|
||||
"registry": {
|
||||
"restored": "VRC registry settings restored",
|
||||
"deleted": "VRC registry settings deleted",
|
||||
"restore_failed": "Failed to restore VRC registry settings, check console for full error: {error}",
|
||||
"invalid_json": "Invalid JSON"
|
||||
},
|
||||
"cache": {
|
||||
"deleted": "All VRChat cache deleted",
|
||||
"delete_error": "Error deleting VRChat cache: {error}",
|
||||
"invalid_config": "Invalid JSON in config.json"
|
||||
},
|
||||
"gamelog": {
|
||||
"vrchat_must_be_closed": "VRChat needs to be closed before this option can be changed"
|
||||
},
|
||||
"copy_failed": "Copy failed",
|
||||
"error": "Error"
|
||||
},
|
||||
"status": {
|
||||
"title": "VRChat Status"
|
||||
@@ -2481,5 +2550,11 @@
|
||||
"unavailable": "Service may be unavailable due to VRChat internal issues"
|
||||
}
|
||||
}
|
||||
},
|
||||
"accessibility": {
|
||||
"toggle_sidebar": "Toggle Sidebar",
|
||||
"back_to_top": "Back to top",
|
||||
"toggle_password": "Toggle password visibility",
|
||||
"clear_input": "Clear input"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { i18n } from '../plugin/i18n';
|
||||
import { openExternalLink } from '../shared/utils';
|
||||
import { useModalStore } from '../stores';
|
||||
|
||||
@@ -23,7 +24,7 @@ class SQLiteService {
|
||||
}
|
||||
if (e.message.includes('database or disk is full')) {
|
||||
modalStore.alert({
|
||||
description: 'Please free up some disk space.',
|
||||
description: i18n.global.t('message.database.disk_space'),
|
||||
title: 'Disk containing database is full'
|
||||
});
|
||||
}
|
||||
@@ -39,7 +40,7 @@ class SQLiteService {
|
||||
}
|
||||
if (e.message.includes('disk I/O error')) {
|
||||
modalStore.alert({
|
||||
description: 'Please check your disk for errors.',
|
||||
description: i18n.global.t('message.database.disk_error'),
|
||||
title: 'Disk I/O error'
|
||||
});
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ import {
|
||||
import { escapeTag, replaceBioSymbols } from './base/string';
|
||||
import { AppDebug } from '../../service/appConfig.js';
|
||||
import { compareUnityVersion } from './avatar';
|
||||
import { i18n } from '../../plugin/i18n';
|
||||
import { miscRequest } from '../../api';
|
||||
|
||||
/**
|
||||
@@ -170,7 +171,7 @@ function copyToClipboard(text, message = 'Copied successfully!') {
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error('Copy failed:', err);
|
||||
toast.error('Copy failed!');
|
||||
toast.error(i18n.global.t('message.copy_failed'));
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -1641,7 +1641,7 @@ export const useFriendStore = defineStore('Friend', () => {
|
||||
modalStore
|
||||
.confirm({
|
||||
description: t('confirm.unfriend'),
|
||||
title: 'Confirm'
|
||||
title: t('confirm.title')
|
||||
})
|
||||
.then(async ({ ok }) => {
|
||||
if (!ok) return;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { reactive, ref, shallowRef, watch } from 'vue';
|
||||
import { defineStore } from 'pinia';
|
||||
import { toast } from 'vue-sonner';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { useRouter } from 'vue-router';
|
||||
|
||||
import dayjs from 'dayjs';
|
||||
@@ -56,6 +57,7 @@ export const useGameLogStore = defineStore('GameLog', () => {
|
||||
const modalStore = useModalStore();
|
||||
|
||||
const router = useRouter();
|
||||
const { t } = useI18n();
|
||||
|
||||
const state = reactive({
|
||||
lastLocationAvatarList: new Map()
|
||||
@@ -1420,16 +1422,14 @@ export const useGameLogStore = defineStore('GameLog', () => {
|
||||
|
||||
async function disableGameLogDialog() {
|
||||
if (gameStore.isGameRunning) {
|
||||
toast.error(
|
||||
'VRChat needs to be closed before this option can be changed'
|
||||
);
|
||||
toast.error(t('message.gamelog.vrchat_must_be_closed'));
|
||||
return;
|
||||
}
|
||||
if (!advancedSettingsStore.gameLogDisabled) {
|
||||
modalStore
|
||||
.confirm({
|
||||
description: 'Continue? Disable GameLog',
|
||||
title: 'Confirm'
|
||||
description: t('confirm.disable_gamelog'),
|
||||
title: t('confirm.title')
|
||||
})
|
||||
.then(({ ok }) => {
|
||||
if (!ok) return;
|
||||
|
||||
@@ -583,8 +583,8 @@ export const useGroupStore = defineStore('Group', () => {
|
||||
function leaveGroupPrompt(groupId) {
|
||||
modalStore
|
||||
.confirm({
|
||||
description: 'Are you sure you want to leave this group?',
|
||||
title: 'Confirm'
|
||||
description: t('confirm.leave_group'),
|
||||
title: t('confirm.title')
|
||||
})
|
||||
.then(({ ok }) => {
|
||||
if (!ok) return;
|
||||
@@ -617,7 +617,7 @@ export const useGroupStore = defineStore('Group', () => {
|
||||
})
|
||||
.then((args) => {
|
||||
handleGroupMemberProps(args);
|
||||
toast.success('Group visibility updated');
|
||||
toast.success(t('message.group.visibility_updated'));
|
||||
return args;
|
||||
});
|
||||
}
|
||||
@@ -629,7 +629,7 @@ export const useGroupStore = defineStore('Group', () => {
|
||||
})
|
||||
.then((args) => {
|
||||
handleGroupMemberProps(args);
|
||||
toast.success('Group subscription updated');
|
||||
toast.success(t('message.group.subscription_updated'));
|
||||
return args;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -2531,7 +2531,7 @@ export const useNotificationStore = defineStore('Notification', () => {
|
||||
handleNotificationHide({ params });
|
||||
notificationRequest.hideNotificationV2(params.notificationId);
|
||||
console.error('Notification response failed', err);
|
||||
toast.error('Error');
|
||||
toast.error(t('message.error'));
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
<DropdownMenuContent class="favorites-dropdown">
|
||||
<li class="favorites-dropdown__control" @click.stop>
|
||||
<div class="favorites-dropdown__control-header">
|
||||
<span>Scale</span>
|
||||
<span>{{ t('view.friends_locations.scale') }}</span>
|
||||
<span class="favorites-dropdown__control-value">{{ avatarCardScalePercent }}%</span>
|
||||
</div>
|
||||
<Slider
|
||||
@@ -52,7 +52,7 @@
|
||||
</li>
|
||||
<li class="favorites-dropdown__control" @click.stop>
|
||||
<div class="favorites-dropdown__control-header">
|
||||
<span>Spacing</span>
|
||||
<span>{{ t('view.friends_locations.spacing') }}</span>
|
||||
<span class="favorites-dropdown__control-value">
|
||||
{{ avatarCardSpacingPercent }}%
|
||||
</span>
|
||||
@@ -294,7 +294,7 @@
|
||||
</div>
|
||||
<div class="group-section">
|
||||
<div class="group-section__header">
|
||||
<span>Local History</span>
|
||||
<span>{{ t('view.favorite.avatars.local_history') }}</span>
|
||||
<DropdownMenu
|
||||
:open="activeGroupMenu === historyGroupMenuKey"
|
||||
@update:open="handleGroupMenuVisible(historyGroupMenuKey, $event)">
|
||||
@@ -318,7 +318,9 @@
|
||||
]"
|
||||
@click="handleGroupClick('history', historyGroupKey)">
|
||||
<div class="group-item__top">
|
||||
<span class="group-item__name">Local History</span>
|
||||
<span class="group-item__name">{{
|
||||
t('view.favorite.avatars.local_history')
|
||||
}}</span>
|
||||
<span class="group-item__count">{{ avatarHistory.length }}/100</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -350,7 +352,7 @@
|
||||
<small>{{ avatarHistory.length }}/100</small>
|
||||
</span>
|
||||
</template>
|
||||
<span v-else>No Group Selected</span>
|
||||
<span v-else>{{ t('view.favorite.avatars.no_group_selected') }}</span>
|
||||
</div>
|
||||
<div class="favorites-content__edit">
|
||||
<span>{{ t('view.favorite.edit_mode') }}</span>
|
||||
@@ -500,7 +502,7 @@
|
||||
</div>
|
||||
</template>
|
||||
<template v-else>
|
||||
<div class="favorites-empty">No Group Selected</div>
|
||||
<div class="favorites-empty">{{ t('view.favorite.avatars.no_group_selected') }}</div>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1237,8 +1239,8 @@
|
||||
function clearFavoriteGroup(ctx) {
|
||||
modalStore
|
||||
.confirm({
|
||||
description: 'Continue? Clear Group',
|
||||
title: 'Confirm'
|
||||
description: t('confirm.clear_group'),
|
||||
title: t('confirm.title')
|
||||
})
|
||||
.then(({ ok }) => {
|
||||
if (ok) {
|
||||
@@ -1279,8 +1281,8 @@
|
||||
function promptLocalAvatarFavoriteGroupDelete(group) {
|
||||
modalStore
|
||||
.confirm({
|
||||
description: `Delete Group? ${group}`,
|
||||
title: 'Confirm'
|
||||
description: t('confirm.delete_group', { name: group }),
|
||||
title: t('confirm.title')
|
||||
})
|
||||
.then(({ ok }) => {
|
||||
if (ok) {
|
||||
|
||||
@@ -955,8 +955,8 @@
|
||||
function clearFavoriteGroup(ctx) {
|
||||
modalStore
|
||||
.confirm({
|
||||
description: 'Continue? Clear Group',
|
||||
title: 'Confirm'
|
||||
description: t('confirm.clear_group'),
|
||||
title: t('confirm.title')
|
||||
})
|
||||
.then(({ ok }) => {
|
||||
if (ok) {
|
||||
@@ -1035,7 +1035,7 @@
|
||||
favoriteGroupId: args.json.id
|
||||
}
|
||||
});
|
||||
toast.success('Group visibility changed');
|
||||
toast.success(t('message.group.visibility_updated'));
|
||||
if (menuKey) {
|
||||
handleGroupMenuVisible(menuKey, false);
|
||||
}
|
||||
@@ -1107,8 +1107,8 @@
|
||||
handleGroupMenuVisible(localGroupMenuKey(group), false);
|
||||
modalStore
|
||||
.confirm({
|
||||
description: 'Continue? Delete Group',
|
||||
title: 'Confirm'
|
||||
description: t('confirm.delete_group', { name: group }),
|
||||
title: t('confirm.title')
|
||||
})
|
||||
.then(({ ok }) => {
|
||||
if (!ok) return;
|
||||
|
||||
@@ -1137,7 +1137,7 @@
|
||||
favoriteGroupId: args.json.id
|
||||
}
|
||||
});
|
||||
toast.success('Group visibility changed');
|
||||
toast.success(t('message.group.visibility_updated'));
|
||||
if (menuKey) {
|
||||
handleGroupMenuVisible(menuKey, false);
|
||||
}
|
||||
@@ -1174,8 +1174,8 @@
|
||||
function promptLocalWorldFavoriteGroupDelete(group) {
|
||||
modalStore
|
||||
.confirm({
|
||||
description: `Delete Group? ${group}`,
|
||||
title: 'Confirm'
|
||||
description: t('confirm.delete_group', { name: group }),
|
||||
title: t('confirm.title')
|
||||
})
|
||||
.then(({ ok }) => {
|
||||
if (ok) {
|
||||
@@ -1188,8 +1188,8 @@
|
||||
function clearFavoriteGroup(ctx) {
|
||||
modalStore
|
||||
.confirm({
|
||||
description: 'Continue? Clear Group',
|
||||
title: 'Confirm'
|
||||
description: t('confirm.clear_group'),
|
||||
title: t('confirm.title')
|
||||
})
|
||||
.then(({ ok }) => {
|
||||
if (ok) {
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
.editInviteMessage(params, messageType, slot)
|
||||
.catch((err) => {
|
||||
console.error('Invite response message update failed', err);
|
||||
toast.error('Error');
|
||||
toast.error(t('message.error'));
|
||||
})
|
||||
.then((args) => {
|
||||
if (args.json[slot].message === I.messageSlot.message) {
|
||||
@@ -84,7 +84,7 @@
|
||||
toast.error(errorMessage);
|
||||
throw new Error(errorMessage);
|
||||
} else {
|
||||
toast('Invite message updated');
|
||||
toast(t('message.invite.message_updated'));
|
||||
}
|
||||
return args;
|
||||
});
|
||||
@@ -98,13 +98,13 @@
|
||||
.sendInviteResponsePhoto(params, I.invite.id)
|
||||
.catch((err) => {
|
||||
console.error('Invite response photo failed', err);
|
||||
toast.error('Error');
|
||||
toast.error(t('message.error'));
|
||||
})
|
||||
.then((args) => {
|
||||
notificationRequest.hideNotification({
|
||||
notificationId: I.invite.id
|
||||
});
|
||||
toast.success('Invite response message sent');
|
||||
toast.success(t('message.invite.response_sent'));
|
||||
return args;
|
||||
})
|
||||
.finally(() => {
|
||||
@@ -115,13 +115,13 @@
|
||||
.sendInviteResponse(params, I.invite.id)
|
||||
.catch((err) => {
|
||||
console.error('Invite response failed', err);
|
||||
toast.error('Error');
|
||||
toast.error(t('message.error'));
|
||||
})
|
||||
.then((args) => {
|
||||
notificationRequest.hideNotification({
|
||||
notificationId: I.invite.id
|
||||
});
|
||||
toast.success('Invite response message sent');
|
||||
toast.success(t('message.invite.response_sent'));
|
||||
return args;
|
||||
})
|
||||
.finally(() => {
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
notificationRequest.hideNotification({
|
||||
notificationId: D.invite.id
|
||||
});
|
||||
toast.success('Invite response photo message sent');
|
||||
toast.success(t('message.invite.response_photo_sent'));
|
||||
return args;
|
||||
})
|
||||
.finally(() => {
|
||||
@@ -79,13 +79,13 @@
|
||||
.sendInviteResponse(params, D.invite.id)
|
||||
.catch((err) => {
|
||||
console.error('Invite response failed', err);
|
||||
toast.error('Error');
|
||||
toast.error(t('message.error'));
|
||||
})
|
||||
.then((args) => {
|
||||
notificationRequest.hideNotification({
|
||||
notificationId: D.invite.id
|
||||
});
|
||||
toast.success('Invite response message sent');
|
||||
toast.success(t('message.invite.response_sent'));
|
||||
return args;
|
||||
})
|
||||
.finally(() => {
|
||||
|
||||
@@ -39,7 +39,9 @@
|
||||
<template v-if="photonLoggingEnabled">
|
||||
<br />
|
||||
<div class="mb-[5px] flex items-center">
|
||||
<span class="inline-block min-w-[190px] pr-2.5 text-right">Photon Event Logging</span>
|
||||
<span class="inline-block min-w-[190px] pr-2.5 text-right">{{
|
||||
t('view.feed.photon_event_logging')
|
||||
}}</span>
|
||||
</div>
|
||||
<div
|
||||
v-for="setting in photonFeedFiltersOptions"
|
||||
@@ -73,9 +75,7 @@
|
||||
<Button variant="secondary" @click="currentResetFunction">{{
|
||||
t('dialog.shared_feed_filters.reset')
|
||||
}}</Button>
|
||||
<Button @click="handleDialogClose">{{
|
||||
t('dialog.shared_feed_filters.close')
|
||||
}}</Button>
|
||||
<Button @click="handleDialogClose">{{ t('dialog.shared_feed_filters.close') }}</Button>
|
||||
</DialogFooter>
|
||||
</DialogContent>
|
||||
</Dialog>
|
||||
|
||||
@@ -330,8 +330,8 @@
|
||||
function showDeleteAllVRChatCacheConfirm() {
|
||||
modalStore
|
||||
.confirm({
|
||||
description: 'Continue? all VRChat cache',
|
||||
title: 'Confirm'
|
||||
description: t('confirm.clear_cache'),
|
||||
title: t('confirm.title')
|
||||
})
|
||||
.then(({ ok }) => {
|
||||
if (ok) {
|
||||
@@ -344,9 +344,9 @@
|
||||
async function deleteAllVRChatCache() {
|
||||
try {
|
||||
await AssetBundleManager.DeleteAllCache();
|
||||
toast.success('All VRChat cache deleted');
|
||||
toast.success(t('message.cache.deleted'));
|
||||
} catch (error) {
|
||||
toast.error(`Error deleting VRChat cache: ${error.message}`);
|
||||
toast.error(t('message.cache.delete_error', { error: error.message }));
|
||||
}
|
||||
getVRChatCacheSize();
|
||||
}
|
||||
@@ -441,7 +441,7 @@
|
||||
const parsedConfig = JSON.parse(config);
|
||||
VRChatConfigFile.value = { ...VRChatConfigFile.value, ...parsedConfig };
|
||||
} catch {
|
||||
toast.error('Invalid JSON in config.json');
|
||||
toast.error(t('message.cache.invalid_config'));
|
||||
throw new Error('Invalid JSON in config.json');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -119,8 +119,8 @@
|
||||
function restoreVrcRegistryBackup(row) {
|
||||
modalStore
|
||||
.confirm({
|
||||
description: 'Continue? Restore Backup',
|
||||
title: 'Confirm'
|
||||
description: t('confirm.restore_backup'),
|
||||
title: t('confirm.title')
|
||||
})
|
||||
.then(({ ok }) => {
|
||||
if (!ok) {
|
||||
@@ -129,11 +129,11 @@
|
||||
const data = JSON.stringify(row.data);
|
||||
AppApi.SetVRChatRegistry(data)
|
||||
.then(() => {
|
||||
toast.success('VRC registry settings restored');
|
||||
toast.success(t('message.registry.restored'));
|
||||
})
|
||||
.catch((e) => {
|
||||
console.error(e);
|
||||
toast.error(`Failed to restore VRC registry settings, check console for full error: ${e}`);
|
||||
toast.error(t('message.registry.restore_failed', { error: e }));
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
@@ -153,15 +153,15 @@
|
||||
function deleteVrcRegistry() {
|
||||
modalStore
|
||||
.confirm({
|
||||
description: 'Continue? Delete VRC Registry Settings',
|
||||
title: 'Confirm'
|
||||
description: t('confirm.delete_vrc_registry'),
|
||||
title: t('confirm.title')
|
||||
})
|
||||
.then(({ ok }) => {
|
||||
if (!ok) {
|
||||
return;
|
||||
}
|
||||
AppApi.DeleteVRChatRegistryFolder().then(() => {
|
||||
toast.success('VRC registry settings deleted');
|
||||
toast.success(t('message.registry.deleted'));
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
@@ -175,11 +175,11 @@
|
||||
function promptVrcRegistryBackupName() {
|
||||
modalStore
|
||||
.prompt({
|
||||
title: 'Backup Name',
|
||||
description: 'Enter a name for the backup',
|
||||
title: t('prompt.backup_name.header'),
|
||||
description: t('prompt.backup_name.description'),
|
||||
inputValue: 'Backup',
|
||||
pattern: /\S+/,
|
||||
errorMessage: 'Name is required'
|
||||
errorMessage: t('prompt.backup_name.input_error')
|
||||
})
|
||||
.then(({ ok, value }) => {
|
||||
if (!ok) return;
|
||||
@@ -245,14 +245,14 @@
|
||||
}
|
||||
AppApi.SetVRChatRegistry(json)
|
||||
.then(() => {
|
||||
toast.success('VRC registry settings restored');
|
||||
toast.success(t('message.registry.restored'));
|
||||
})
|
||||
.catch((e) => {
|
||||
console.error(e);
|
||||
toast.error(`Failed to restore VRC registry settings, check console for full error: ${e}`);
|
||||
toast.error(t('message.registry.restore_failed', { error: e }));
|
||||
});
|
||||
} catch {
|
||||
toast.error('Invalid JSON');
|
||||
toast.error(t('message.registry.invalid_json'));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user