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"> - + 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"> - + 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"> - + 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"> - + 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);