diff --git a/src/components/InstanceActionBar.vue b/src/components/InstanceActionBar.vue
index d365fa8a..8a8b626b 100644
--- a/src/components/InstanceActionBar.vue
+++ b/src/components/InstanceActionBar.vue
@@ -311,7 +311,7 @@
shortName: props.shortname
})
.then((args) => {
- toast.success('Self invite sent');
+ toast.success(t('message.invite.self_sent'));
return args;
});
};
diff --git a/src/components/dialogs/InviteDialog/EditAndSendInviteDialog.vue b/src/components/dialogs/InviteDialog/EditAndSendInviteDialog.vue
index 53de1b40..0af84206 100644
--- a/src/components/dialogs/InviteDialog/EditAndSendInviteDialog.vue
+++ b/src/components/dialogs/InviteDialog/EditAndSendInviteDialog.vue
@@ -91,8 +91,9 @@
})
.then((args) => {
if (args.json[slot].message === I.messageSlot.message) {
- toast.error("VRChat API didn't update message, try again");
- throw new Error("VRChat API didn't update message, try again");
+ const errorMessage = t('message.invite.message_update_failed');
+ toast.error(errorMessage);
+ throw new Error(errorMessage);
} else {
toast('Invite message updated');
}
@@ -141,7 +142,7 @@
} else {
J.loading = false;
J.visible = false;
- toast.success('Invite sent');
+ toast.success(t('message.invite.sent'));
}
};
inviteLoop();
diff --git a/src/components/dialogs/InviteDialog/InviteDialog.vue b/src/components/dialogs/InviteDialog/InviteDialog.vue
index 8940dcec..b723a427 100644
--- a/src/components/dialogs/InviteDialog/InviteDialog.vue
+++ b/src/components/dialogs/InviteDialog/InviteDialog.vue
@@ -244,7 +244,7 @@
function sendInvite() {
modalStore
.confirm({
- description: 'Continue? Invite',
+ description: t('confirm.invite'),
title: 'Confirm'
})
.then(({ ok }) => {
@@ -281,7 +281,7 @@
} else {
D.loading = false;
D.visible = false;
- toast.success('Invite sent');
+ toast.success(t('message.invite.sent'));
}
};
inviteLoop();
diff --git a/src/components/dialogs/InviteGroupDialog.vue b/src/components/dialogs/InviteGroupDialog.vue
index 6ff7feb2..8b406f57 100644
--- a/src/components/dialogs/InviteGroupDialog.vue
+++ b/src/components/dialogs/InviteGroupDialog.vue
@@ -273,7 +273,7 @@
function sendGroupInvite() {
modalStore
.confirm({
- description: 'Continue? Invite User(s) To Group',
+ description: t('confirm.invite_group'),
title: 'Confirm'
})
.then(({ ok }) => {
diff --git a/src/components/dialogs/LaunchDialog.vue b/src/components/dialogs/LaunchDialog.vue
index 2741208b..750a62fd 100644
--- a/src/components/dialogs/LaunchDialog.vue
+++ b/src/components/dialogs/LaunchDialog.vue
@@ -309,7 +309,7 @@
shortName
})
.then((args) => {
- toast.success('Self invite sent');
+ toast.success(t('message.invite.self_sent'));
return args;
});
}
diff --git a/src/components/dialogs/NewInstanceDialog.vue b/src/components/dialogs/NewInstanceDialog.vue
index 7b4fc399..e730f1e2 100644
--- a/src/components/dialogs/NewInstanceDialog.vue
+++ b/src/components/dialogs/NewInstanceDialog.vue
@@ -916,7 +916,7 @@
worldId: L.worldId
})
.then((args) => {
- toast.success('Self invite sent');
+ toast.success(t('message.invite.self_sent'));
return args;
});
}
diff --git a/src/components/dialogs/UserDialog/UserDialog.vue b/src/components/dialogs/UserDialog/UserDialog.vue
index a7aa7eb8..573ce68c 100644
--- a/src/components/dialogs/UserDialog/UserDialog.vue
+++ b/src/components/dialogs/UserDialog/UserDialog.vue
@@ -1854,7 +1854,7 @@
D.id
)
.then((_args) => {
- toast('Invite sent');
+ toast(t('message.invite.sent'));
return _args;
});
});
diff --git a/src/components/dialogs/WorldDialog/WorldDialog.vue b/src/components/dialogs/WorldDialog/WorldDialog.vue
index af346a91..2e659857 100644
--- a/src/components/dialogs/WorldDialog/WorldDialog.vue
+++ b/src/components/dialogs/WorldDialog/WorldDialog.vue
@@ -975,7 +975,9 @@
case 'Trash2':
modalStore
.confirm({
- description: `Continue? ${command}`,
+ description: t('confirm.command_question', {
+ command
+ }),
title: 'Confirm'
})
.then(({ ok }) => {
diff --git a/src/components/ui/pagination/PaginationEllipsis.vue b/src/components/ui/pagination/PaginationEllipsis.vue
index 5d25b666..8de321df 100644
--- a/src/components/ui/pagination/PaginationEllipsis.vue
+++ b/src/components/ui/pagination/PaginationEllipsis.vue
@@ -3,6 +3,7 @@
import { PaginationEllipsis } from 'reka-ui';
import { cn } from '@/lib/utils';
import { reactiveOmit } from '@vueuse/core';
+ import { useI18n } from 'vue-i18n';
const props = defineProps({
asChild: { type: Boolean, required: false },
@@ -10,6 +11,8 @@
class: { type: null, required: false }
});
+ const { t } = useI18n();
+
const delegatedProps = reactiveOmit(props, 'class');
@@ -20,7 +23,9 @@
:class="cn('flex size-9 items-center justify-center text-[13px]', props.class)">
- More pages
+
+ {{ t('table.pagination.more_pages') }}
+
diff --git a/src/components/ui/pagination/PaginationFirst.vue b/src/components/ui/pagination/PaginationFirst.vue
index 45fadc39..3cb095e1 100644
--- a/src/components/ui/pagination/PaginationFirst.vue
+++ b/src/components/ui/pagination/PaginationFirst.vue
@@ -4,6 +4,7 @@
import { buttonVariants } from '@/components/ui/button';
import { cn } from '@/lib/utils';
import { reactiveOmit } from '@vueuse/core';
+ import { useI18n } from 'vue-i18n';
const props = defineProps({
asChild: { type: Boolean, required: false },
@@ -12,6 +13,8 @@
class: { type: null, required: false }
});
+ const { t } = useI18n();
+
const delegatedProps = reactiveOmit(props, 'class', 'size');
const forwarded = useForwardProps(delegatedProps);
@@ -23,7 +26,9 @@
v-bind="forwarded">
- First
+
+ {{ t('table.pagination.first') }}
+
diff --git a/src/components/ui/pagination/PaginationLast.vue b/src/components/ui/pagination/PaginationLast.vue
index efea7a99..02a6b366 100644
--- a/src/components/ui/pagination/PaginationLast.vue
+++ b/src/components/ui/pagination/PaginationLast.vue
@@ -4,6 +4,7 @@
import { buttonVariants } from '@/components/ui/button';
import { cn } from '@/lib/utils';
import { reactiveOmit } from '@vueuse/core';
+ import { useI18n } from 'vue-i18n';
const props = defineProps({
asChild: { type: Boolean, required: false },
@@ -12,6 +13,8 @@
class: { type: null, required: false }
});
+ const { t } = useI18n();
+
const delegatedProps = reactiveOmit(props, 'class', 'size');
const forwarded = useForwardProps(delegatedProps);
@@ -22,7 +25,9 @@
:class="cn(buttonVariants({ variant: 'ghost', size }), 'text-[13px] gap-1 px-2.5 sm:pr-2.5', props.class)"
v-bind="forwarded">
- Last
+
+ {{ t('table.pagination.last') }}
+
diff --git a/src/components/ui/pagination/PaginationNext.vue b/src/components/ui/pagination/PaginationNext.vue
index 072cb171..98473912 100644
--- a/src/components/ui/pagination/PaginationNext.vue
+++ b/src/components/ui/pagination/PaginationNext.vue
@@ -4,6 +4,7 @@
import { buttonVariants } from '@/components/ui/button';
import { cn } from '@/lib/utils';
import { reactiveOmit } from '@vueuse/core';
+ import { useI18n } from 'vue-i18n';
const props = defineProps({
asChild: { type: Boolean, required: false },
@@ -12,6 +13,8 @@
class: { type: null, required: false }
});
+ const { t } = useI18n();
+
const delegatedProps = reactiveOmit(props, 'class', 'size');
const forwarded = useForwardProps(delegatedProps);
@@ -22,7 +25,9 @@
:class="cn(buttonVariants({ variant: 'ghost', size }), 'text-[13px] gap-1 px-2.5 sm:pr-2.5', props.class)"
v-bind="forwarded">
- Next
+
+ {{ t('table.pagination.next') }}
+
diff --git a/src/components/ui/pagination/PaginationPrevious.vue b/src/components/ui/pagination/PaginationPrevious.vue
index 07c06412..690d6c8d 100644
--- a/src/components/ui/pagination/PaginationPrevious.vue
+++ b/src/components/ui/pagination/PaginationPrevious.vue
@@ -4,6 +4,7 @@
import { buttonVariants } from '@/components/ui/button';
import { cn } from '@/lib/utils';
import { reactiveOmit } from '@vueuse/core';
+ import { useI18n } from 'vue-i18n';
const props = defineProps({
asChild: { type: Boolean, required: false },
@@ -12,6 +13,8 @@
class: { type: null, required: false }
});
+ const { t } = useI18n();
+
const delegatedProps = reactiveOmit(props, 'class', 'size');
const forwarded = useForwardProps(delegatedProps);
@@ -23,7 +26,9 @@
v-bind="forwarded">
- Previous
+
+ {{ t('table.pagination.previous') }}
+
diff --git a/src/localization/en.json b/src/localization/en.json
index b9ebd04f..e1fe96e8 100644
--- a/src/localization/en.json
+++ b/src/localization/en.json
@@ -250,6 +250,13 @@
"filter_placeholder": "Filter",
"search_placeholder": "Search",
"refresh_tooltip": "Refresh",
+ "actions": {
+ "accept": "Accept",
+ "invite": "Invite",
+ "decline": "Decline",
+ "delete_log": "Delete log",
+ "decline_with_message": "Decline with message"
+ },
"filters": {
"requestInvite": "Request Invite",
"invite": "Invite",
@@ -1954,7 +1961,22 @@
"title": "Confirm",
"confirm_button": "Confirm",
"cancel_button": "Cancel",
- "message": "Continue {command}?"
+ "message": "Continue {command}?",
+ "logout": "Continue? Logout",
+ "unfriend": "Continue? Unfriend",
+ "clear_avatar_history": "Continue? Clear Avatar History",
+ "select_avatar": "Continue? Select Avatar",
+ "invite": "Continue? Invite",
+ "invite_group": "Continue? Invite User(s) To Group",
+ "delete_log": "Continue? Delete Log",
+ "accept_friend_request": "Continue? Accept Friend Request",
+ "send_invite": "Continue? Send Invite",
+ "decline_type": "Continue? Decline {type}",
+ "delete_type": "Continue? Trash2 {type}",
+ "command_question": "Continue? {command}",
+ "restart_required_title": "Restart Required",
+ "restart_now": "Restart Now",
+ "restart_later": "Later"
},
"status": {
"title": "VRChat Status"
@@ -1974,19 +1996,35 @@
"instance": {
"closed": "Instance closed",
"removed_form_queue": "Removed instance {worldName} from queue",
- "not_allowed": "You're not allowed to access this instance"
+ "not_allowed": "You're not allowed to access this instance",
+ "create_failed": "Failed to create instance"
},
"avatar": {
"change_moderation_failed": "Failed to change avatar moderation",
"image_changed": "Avatar image changed",
"image_invalid": "Current avatar image invalid"
},
+ "database": {
+ "upgrade_complete": "Database upgrade complete"
+ },
"emoji": {
"uploaded": "Emoji uploaded"
},
"file": {
"not_image": "File isn't an image",
- "too_large": "File size too large"
+ "too_large": "File size too large",
+ "folder_missing": "Folder dosn't exist"
+ },
+ "group": {
+ "load_failed": "Failed to load group"
+ },
+ "invite": {
+ "self_sent": "Self invite sent",
+ "sent": "Invite sent",
+ "message_update_failed": "VRChat API didn't update message, try again"
+ },
+ "launch": {
+ "invalid_path": "Invalid path, you must enter VRChat folder or launch.exe"
},
"print": {
"uploaded": "Print uploaded"
@@ -2014,17 +2052,22 @@
},
"world": {
"image_changed": "World image changed",
- "image_invalid": "Current world image invalid"
+ "image_invalid": "Current world image invalid",
+ "load_failed": "Failed to load world"
},
"icon": {
"uploaded": "Icon uploaded"
},
"user": {
- "moderated": "User moderated"
+ "moderated": "User moderated",
+ "load_failed": "Failed to load user"
},
"friend": {
"load_failed": "Failed to load friends list, logging out"
},
+ "vrcplus": {
+ "required": "VRCPlus required"
+ },
"screenshot_metadata": {
"deleted": "Screenshot metadata deleted",
"delete_failed": "Failed to delete screenshot metadata"
@@ -2272,7 +2315,12 @@
},
"table": {
"pagination": {
- "rows_per_page": "Rows per page"
+ "rows_per_page": "Rows per page",
+ "first": "First",
+ "previous": "Previous",
+ "next": "Next",
+ "last": "Last",
+ "more_pages": "More pages"
},
"feed": {
"date": "Date",
diff --git a/src/stores/auth.js b/src/stores/auth.js
index 534abfae..8ae2e98c 100644
--- a/src/stores/auth.js
+++ b/src/stores/auth.js
@@ -418,7 +418,7 @@ export const useAuthStore = defineStore('Auth', () => {
function logout() {
modalStore
.confirm({
- description: 'Continue? Logout',
+ description: t('confirm.logout'),
title: 'Confirm'
})
.then(({ ok }) => {
diff --git a/src/stores/avatar.js b/src/stores/avatar.js
index cceb1a0f..b28adf12 100644
--- a/src/stores/avatar.js
+++ b/src/stores/avatar.js
@@ -1,6 +1,7 @@
import { nextTick, ref, watch } from 'vue';
import { defineStore } from 'pinia';
import { toast } from 'vue-sonner';
+import { useI18n } from 'vue-i18n';
import {
checkVRChatCache,
@@ -31,6 +32,7 @@ export const useAvatarStore = defineStore('Avatar', () => {
const advancedSettingsStore = useAdvancedSettingsStore();
const userStore = useUserStore();
const modalStore = useModalStore();
+ const { t } = useI18n();
let cachedAvatarModerations = new Map();
let cachedAvatars = new Map();
@@ -392,7 +394,7 @@ export const useAvatarStore = defineStore('Avatar', () => {
function promptClearAvatarHistory() {
modalStore
.confirm({
- description: 'Continue? Clear Avatar History',
+ description: t('confirm.clear_avatar_history'),
title: 'Confirm'
})
.then(({ ok }) => {
@@ -556,7 +558,7 @@ export const useAvatarStore = defineStore('Avatar', () => {
function selectAvatarWithConfirmation(id) {
modalStore
.confirm({
- description: 'Continue? Select Avatar',
+ description: t('confirm.select_avatar'),
title: 'Confirm'
})
.then(({ ok }) => {
diff --git a/src/stores/friend.js b/src/stores/friend.js
index 336b3ae8..a40be1ed 100644
--- a/src/stores/friend.js
+++ b/src/stores/friend.js
@@ -1581,7 +1581,7 @@ export const useFriendStore = defineStore('Friend', () => {
function confirmDeleteFriend(id) {
modalStore
.confirm({
- description: 'Continue? Unfriend',
+ description: t('confirm.unfriend'),
title: 'Confirm'
})
.then(async ({ ok }) => {
diff --git a/src/stores/group.js b/src/stores/group.js
index 55f6ba01..ec0c015c 100644
--- a/src/stores/group.js
+++ b/src/stores/group.js
@@ -1,6 +1,7 @@
import { nextTick, reactive, ref, watch } from 'vue';
import { defineStore } from 'pinia';
import { toast } from 'vue-sonner';
+import { useI18n } from 'vue-i18n';
import {
groupRequest,
@@ -32,6 +33,7 @@ export const useGroupStore = defineStore('Group', () => {
const userStore = useUserStore();
const notificationStore = useNotificationStore();
const modalStore = useModalStore();
+ const { t } = useI18n();
let cachedGroups = new Map();
@@ -152,7 +154,7 @@ export const useGroupStore = defineStore('Group', () => {
.catch((err) => {
D.loading = false;
D.visible = false;
- toast.error('Failed to load group');
+ toast.error(t('message.group.load_failed'));
throw err;
})
.then((args) => {
diff --git a/src/stores/invite.js b/src/stores/invite.js
index 7107bebd..e7b635cb 100644
--- a/src/stores/invite.js
+++ b/src/stores/invite.js
@@ -1,6 +1,7 @@
import { computed, ref, watch } from 'vue';
import { defineStore } from 'pinia';
import { toast } from 'vue-sonner';
+import { useI18n } from 'vue-i18n';
import { instanceRequest, inviteMessagesRequest } from '../api';
import { parseLocation } from '../shared/utils';
@@ -15,6 +16,7 @@ export const useInviteStore = defineStore('Invite', () => {
const gameStore = useGameStore();
const launchStore = useLaunchStore();
const advancedSettingsStore = useAdvancedSettingsStore();
+ const { t } = useI18n();
const inviteMessageTable = ref({
data: [],
@@ -95,7 +97,7 @@ export const useInviteStore = defineStore('Invite', () => {
instanceStore.createNewInstance(worldId).then((args) => {
const location = args?.json?.location;
if (!location) {
- toast.error('Failed to create instance');
+ toast.error(t('message.instance.create_failed'));
return;
}
// self invite
@@ -115,7 +117,7 @@ export const useInviteStore = defineStore('Invite', () => {
worldId: L.worldId
})
.then((args) => {
- toast.success('Self invite sent');
+ toast.success(t('message.invite.self_sent'));
return args;
});
});
diff --git a/src/stores/launch.js b/src/stores/launch.js
index f4de4063..28af9888 100644
--- a/src/stores/launch.js
+++ b/src/stores/launch.js
@@ -1,6 +1,7 @@
import { nextTick, ref, watch } from 'vue';
import { defineStore } from 'pinia';
import { toast } from 'vue-sonner';
+import { useI18n } from 'vue-i18n';
import { instanceRequest } from '../api';
import { parseLocation } from '../shared/utils';
@@ -11,6 +12,7 @@ import configRepository from '../service/config';
export const useLaunchStore = defineStore('Launch', () => {
const isLaunchOptionsDialogVisible = ref(false);
const isOpeningInstance = ref(false);
+ const { t } = useI18n();
const launchDialogData = ref({
visible: false,
loading: false,
@@ -114,7 +116,7 @@ export const useLaunchStore = defineStore('Launch', () => {
worldId: L.worldId,
shortName
});
- toast.success('Self invite sent');
+ toast.success(t('message.invite.self_sent'));
} catch (e) {
console.error(e);
}
diff --git a/src/stores/settings/advanced.js b/src/stores/settings/advanced.js
index 6f15d8ce..3ee3bd6e 100644
--- a/src/stores/settings/advanced.js
+++ b/src/stores/settings/advanced.js
@@ -485,9 +485,9 @@ export const useAdvancedSettingsStore = defineStore('AdvancedSettings', () => {
.confirm({
description:
'Error reporting setting has been enabled. Would you like to restart VRCX now for the change to take effect?',
- title: 'Restart Required',
- confirmText: 'Restart Now',
- cancelText: 'Later'
+ title: t('confirm.restart_required_title'),
+ confirmText: t('confirm.restart_now'),
+ cancelText: t('confirm.restart_later')
})
.then(async ({ ok }) => {
if (!ok) return;
@@ -507,9 +507,9 @@ export const useAdvancedSettingsStore = defineStore('AdvancedSettings', () => {
.confirm({
description:
'Error reporting setting has been disabled. Would you like to restart VRCX now for the change to take effect?',
- title: 'Restart Required',
- confirmText: 'Restart Now',
- cancelText: 'Later'
+ title: t('confirm.restart_required_title'),
+ confirmText: t('confirm.restart_now'),
+ cancelText: t('confirm.restart_later')
})
.then(async ({ ok }) => {
if (!ok) return;
diff --git a/src/stores/user.js b/src/stores/user.js
index df295cac..85791536 100644
--- a/src/stores/user.js
+++ b/src/stores/user.js
@@ -1,6 +1,7 @@
import { computed, reactive, ref, shallowReactive, watch } from 'vue';
import { defineStore } from 'pinia';
import { toast } from 'vue-sonner';
+import { useI18n } from 'vue-i18n';
import Noty from 'noty';
@@ -70,6 +71,7 @@ export const useUserStore = defineStore('User', () => {
const moderationStore = useModerationStore();
const photonStore = usePhotonStore();
const sharedFeedStore = useSharedFeedStore();
+ const { t } = useI18n();
const currentUser = ref({
acceptedPrivacyVersion: 0,
@@ -837,7 +839,7 @@ export const useUserStore = defineStore('User', () => {
.catch((err) => {
D.loading = false;
D.visible = false;
- toast.error('Failed to load user');
+ toast.error(t('message.user.load_failed'));
throw err;
})
.then((args) => {
diff --git a/src/stores/vrcx.js b/src/stores/vrcx.js
index 5e45b19b..5111f828 100644
--- a/src/stores/vrcx.js
+++ b/src/stores/vrcx.js
@@ -195,7 +195,7 @@ export const useVrcxStore = defineStore('Vrcx', () => {
toast.dismiss(msgBox);
if (state.databaseVersion) {
// only display when database exists
- toast.success('Database upgrade complete');
+ toast.success(t('message.database.upgrade_complete'));
}
state.databaseVersion = databaseVersion;
} catch (err) {
diff --git a/src/stores/world.js b/src/stores/world.js
index e2c05807..1ccb4c25 100644
--- a/src/stores/world.js
+++ b/src/stores/world.js
@@ -1,6 +1,7 @@
import { reactive, shallowReactive, watch } from 'vue';
import { defineStore } from 'pinia';
import { toast } from 'vue-sonner';
+import { useI18n } from 'vue-i18n';
import {
checkVRChatCache,
@@ -24,6 +25,7 @@ export const useWorldStore = defineStore('World', () => {
const favoriteStore = useFavoriteStore();
const instanceStore = useInstanceStore();
const userStore = useUserStore();
+ const { t } = useI18n();
const worldDialog = reactive({
visible: false,
@@ -132,7 +134,7 @@ export const useWorldStore = defineStore('World', () => {
.catch((err) => {
D.loading = false;
D.visible = false;
- toast.error('Failed to load world');
+ toast.error(t('message.world.load_failed'));
throw err;
})
.then((args) => {
diff --git a/src/views/FriendLog/FriendLog.vue b/src/views/FriendLog/FriendLog.vue
index 55332071..8d449616 100644
--- a/src/views/FriendLog/FriendLog.vue
+++ b/src/views/FriendLog/FriendLog.vue
@@ -151,7 +151,7 @@
function deleteFriendLogPrompt(row) {
modalStore
.confirm({
- description: 'Continue? Delete Log',
+ description: t('confirm.delete_log'),
title: 'Confirm'
})
.then(({ ok }) => ok && deleteFriendLog(row))
diff --git a/src/views/GameLog/GameLog.vue b/src/views/GameLog/GameLog.vue
index 7b51cd3f..6b5a652f 100644
--- a/src/views/GameLog/GameLog.vue
+++ b/src/views/GameLog/GameLog.vue
@@ -138,7 +138,7 @@
function deleteGameLogEntryPrompt(row) {
modalStore
.confirm({
- description: 'Continue? Delete Log',
+ description: t('confirm.delete_log'),
title: 'Confirm'
})
.then(({ ok }) => ok && deleteGameLogEntry(row))
diff --git a/src/views/Notifications/Notification.vue b/src/views/Notifications/Notification.vue
index 32bf4572..78f10c67 100644
--- a/src/views/Notifications/Notification.vue
+++ b/src/views/Notifications/Notification.vue
@@ -324,7 +324,7 @@
// FIXME: 메시지 수정
modalStore
.confirm({
- description: 'Continue? Accept Friend Request',
+ description: t('confirm.accept_friend_request'),
title: 'Confirm'
})
.then(({ ok }) => {
@@ -349,7 +349,7 @@
function acceptRequestInvite(row) {
modalStore
.confirm({
- description: 'Continue? Send Invite',
+ description: t('confirm.send_invite'),
title: 'Confirm'
})
.then(({ ok }) => {
@@ -381,7 +381,7 @@
row.senderUserId
)
.then((_args) => {
- toast('Invite sent');
+ toast(t('message.invite.sent'));
notificationRequest.hideNotification({
notificationId: row.id
});
@@ -459,7 +459,7 @@
function hideNotificationPrompt(row) {
modalStore
.confirm({
- description: `Continue? Decline ${row.type}`,
+ description: t('confirm.decline_type', { type: row.type }),
title: 'Confirm'
})
.then(({ ok }) => {
@@ -483,7 +483,7 @@
function deleteNotificationLogPrompt(row) {
modalStore
.confirm({
- description: `Continue? Trash2 ${row.type}`,
+ description: t('confirm.delete_type', { type: row.type }),
title: 'Confirm'
})
.then(({ ok }) => {
diff --git a/src/views/Notifications/columns.jsx b/src/views/Notifications/columns.jsx
index 59a9d3c1..29005b87 100644
--- a/src/views/Notifications/columns.jsx
+++ b/src/views/Notifications/columns.jsx
@@ -543,7 +543,11 @@ export const createColumns = ({
- Accept
+
+ {t(
+ 'view.notification.actions.accept'
+ )}
+
@@ -567,7 +571,9 @@ export const createColumns = ({
- Decline with message
+ {t(
+ 'view.notification.actions.decline_with_message'
+ )}
@@ -593,7 +599,11 @@ export const createColumns = ({
- Invite
+
+ {t(
+ 'view.notification.actions.invite'
+ )}
+
@@ -615,7 +625,9 @@ export const createColumns = ({
- Decline with message
+ {t(
+ 'view.notification.actions.decline_with_message'
+ )}
@@ -705,7 +717,11 @@ export const createColumns = ({
- Decline
+
+ {t(
+ 'view.notification.actions.decline'
+ )}
+
@@ -736,7 +752,11 @@ export const createColumns = ({
- Delete log
+
+ {t(
+ 'view.notification.actions.delete_log'
+ )}
+
@@ -767,7 +787,11 @@ export const createColumns = ({
- Delete log
+
+ {t(
+ 'view.notification.actions.delete_log'
+ )}
+
diff --git a/src/views/Notifications/dialogs/EditAndSendInviteResponseDialog.vue b/src/views/Notifications/dialogs/EditAndSendInviteResponseDialog.vue
index 6ae2bc3b..67a71a86 100644
--- a/src/views/Notifications/dialogs/EditAndSendInviteResponseDialog.vue
+++ b/src/views/Notifications/dialogs/EditAndSendInviteResponseDialog.vue
@@ -79,8 +79,9 @@
})
.then((args) => {
if (args.json[slot].message === I.messageSlot.message) {
- toast.error("VRChat API didn't update message, try again");
- throw new Error("VRChat API didn't update message, try again");
+ const errorMessage = t('message.invite.message_update_failed');
+ toast.error(errorMessage);
+ throw new Error(errorMessage);
} else {
toast('Invite message updated');
}
diff --git a/src/views/Settings/components/Tabs/AdvancedTab.vue b/src/views/Settings/components/Tabs/AdvancedTab.vue
index b811fb6b..12be26b0 100644
--- a/src/views/Settings/components/Tabs/AdvancedTab.vue
+++ b/src/views/Settings/components/Tabs/AdvancedTab.vue
@@ -507,7 +507,7 @@
if (result) {
toast.success('Folder opened');
} else {
- toast.error("Folder dosn't exist");
+ toast.error(t('message.file.folder_missing'));
}
});
}
@@ -517,7 +517,7 @@
if (result) {
toast.success('Folder opened');
} else {
- toast.error("Folder dosn't exist");
+ toast.error(t('message.file.folder_missing'));
}
});
}
@@ -527,7 +527,7 @@
if (result) {
toast.success('Folder opened');
} else {
- toast.error("Folder dosn't exist");
+ toast.error(t('message.file.folder_missing'));
}
});
}
diff --git a/src/views/Settings/dialogs/LaunchOptionsDialog.vue b/src/views/Settings/dialogs/LaunchOptionsDialog.vue
index c2217493..2e8d51f3 100644
--- a/src/views/Settings/dialogs/LaunchOptionsDialog.vue
+++ b/src/views/Settings/dialogs/LaunchOptionsDialog.vue
@@ -111,7 +111,7 @@
D.vrcLaunchPathOverride.endsWith('.exe') &&
!D.vrcLaunchPathOverride.endsWith('launch.exe')
) {
- toast.error('Invalid path, you must enter VRChat folder or launch.exe');
+ toast.error(t('message.launch.invalid_path'));
return;
}
configRepository.setString('vrcLaunchPathOverride', D.vrcLaunchPathOverride);
diff --git a/src/views/Tools/Gallery.vue b/src/views/Tools/Gallery.vue
index 7da86442..d0bec098 100644
--- a/src/views/Tools/Gallery.vue
+++ b/src/views/Tools/Gallery.vue
@@ -737,7 +737,7 @@
function setProfilePicOverride(fileId) {
if (!isLocalUserVrcPlusSupporter.value) {
- toast.error('VRCPlus required');
+ toast.error(t('message.vrcplus.required'));
return;
}
let profilePicOverride = '';
@@ -834,7 +834,7 @@
function setVRCPlusIcon(fileId) {
if (!isLocalUserVrcPlusSupporter.value) {
- toast.error('VRCPlus required');
+ toast.error(t('message.vrcplus.required'));
return;
}
let userIcon = '';
diff --git a/src/views/Tools/Tools.vue b/src/views/Tools/Tools.vue
index e91a796f..a9c0926e 100644
--- a/src/views/Tools/Tools.vue
+++ b/src/views/Tools/Tools.vue
@@ -286,7 +286,7 @@
if (result) {
toast.success('Folder opened');
} else {
- toast.error("Folder dosn't exist");
+ toast.error(t('message.file.folder_missing'));
}
});
}
@@ -296,7 +296,7 @@
if (result) {
toast.success('Folder opened');
} else {
- toast.error("Folder dosn't exist");
+ toast.error(t('message.file.folder_missing'));
}
});
}
diff --git a/src/views/Tools/dialogs/EditInviteMessageDialog.vue b/src/views/Tools/dialogs/EditInviteMessageDialog.vue
index fa9bbd44..11ad42ed 100644
--- a/src/views/Tools/dialogs/EditInviteMessageDialog.vue
+++ b/src/views/Tools/dialogs/EditInviteMessageDialog.vue
@@ -70,8 +70,9 @@
})
.then((args) => {
if (args.json[slot].message === props.inviteMessage.message) {
- toast.error("VRChat API didn't update message, try again");
- throw new Error("VRChat API didn't update message, try again");
+ const errorMessage = t('message.invite.message_update_failed');
+ toast.error(errorMessage);
+ throw new Error(errorMessage);
} else {
toast.success('Invite message updated');
emit('updateInviteMessages', messageType);