This commit is contained in:
pa
2026-02-18 18:14:21 +09:00
parent a13b197d06
commit 7288995c73
22 changed files with 198 additions and 110 deletions

View File

@@ -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')) {

View File

@@ -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;

View File

@@ -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>

View File

@@ -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;
});
});

View File

@@ -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;
});

View File

@@ -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') }}

View File

@@ -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() {

View File

@@ -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"
}
}

View File

@@ -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'
});
}

View File

@@ -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'));
});
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
});
}

View File

@@ -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'));
});
}

View File

@@ -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) {

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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(() => {

View File

@@ -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(() => {

View File

@@ -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>

View File

@@ -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');
}
}

View File

@@ -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'));
}
}