diff --git a/html/src/index.pug b/html/src/index.pug index 8168f289..8335db17 100644 --- a/html/src/index.pug +++ b/html/src/index.pug @@ -2379,15 +2379,15 @@ html span(v-if="!scope.data.children" v-text="scope.data.value") //- dialog: favorite - el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="favoriteDialog" :visible.sync="favoriteDialog.visible" title="Choose Group" width="300px") + el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="favoriteDialog" :visible.sync="favoriteDialog.visible" :title="$t('dialog.favorite.header')" width="300px") div(v-if="favoriteDialog.visible" v-loading="favoriteDialog.loading") - span(style="display:block;text-align:center") VRChat Favorites + span(style="display:block;text-align:center") {{ $t('dialog.favorite.vrchat_favorites') }} template(v-if="favoriteDialog.currentGroup && favoriteDialog.currentGroup.key") el-button(style="display:block;width:100%;margin:10px 0" @click="deleteFavorite(favoriteDialog.objectId)") #[i.el-icon-check] {{ favoriteDialog.currentGroup.displayName }} ({{ favoriteDialog.currentGroup.count }} / {{ favoriteDialog.currentGroup.capacity }}) template(v-else) el-button(v-for="group in favoriteDialog.groups" :key="group" style="display:block;width:100%;margin:10px 0" @click="addFavorite(group)") {{ group.displayName }} ({{ group.count }} / {{ group.capacity }}) div(v-if="favoriteDialog.visible && favoriteDialog.type === 'world'" style="margin-top:20px") - span(style="display:block;text-align:center") Local Favorites + span(style="display:block;text-align:center") {{ $t('dialog.favorite.local_favorites') }} template(v-for="group in localWorldFavoriteGroups" :key="group") el-button(v-if="hasLocalWorldFavorite(favoriteDialog.objectId, group)" style="display:block;width:100%;margin:10px 0" @click="removeLocalWorldFavorite(favoriteDialog.objectId, group)") #[i.el-icon-check] {{ group }} ({{ getLocalWorldFavoriteGroupLength(group) }}) el-button(v-else style="display:block;width:100%;margin:10px 0" @click="addLocalWorldFavorite(favoriteDialog.objectId, group)") {{ group }} ({{ getLocalWorldFavoriteGroupLength(group) }}) @@ -2485,37 +2485,37 @@ html el-button(type="primary" size="small" :disabled="bioDialog.loading" @click="saveBio") {{ $t('dialog.bio.update') }} //- dialog: new instance - el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="newInstanceDialog" :visible.sync="newInstanceDialog.visible" title="New Instance" width="600px") + el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="newInstanceDialog" :visible.sync="newInstanceDialog.visible" :title="$t('dialog.new_instance.header')" width="600px") el-form(v-if="newInstanceDialog.visible" :model="newInstanceDialog" label-width="130px") - el-form-item(label="Access Type") + el-form-item(:label="$t('dialog.new_instance.access_type')") el-radio-group(v-model="newInstanceDialog.accessType" size="mini" @change="buildInstance") - el-radio-button(label="public") - el-radio-button(label="group") - el-radio-button(label="friends+") - el-radio-button(label="friends") - el-radio-button(label="invite+") - el-radio-button(label="invite") + el-radio-button(label="public") {{ $t('dialog.new_instance.access_type_public') }} + el-radio-button(label="group") {{ $t('dialog.new_instance.access_type_group') }} + el-radio-button(label="friends+") {{ $t('dialog.new_instance.access_type_friend_plus') }} + el-radio-button(label="friends") {{ $t('dialog.new_instance.access_type_friend') }} + el-radio-button(label="invite+") {{ $t('dialog.new_instance.access_type_invite_plus') }} + el-radio-button(label="invite") {{ $t('dialog.new_instance.access_type_invite') }} //- el-form-item(label="Strict" v-if="newInstanceDialog.accessType === 'friends' || newInstanceDialog.accessType === 'invite'") //- el-checkbox(v-model="newInstanceDialog.strict") Prevent non friends joining via URL/Instance ID - el-form-item(label="Region") + el-form-item(:label="$t('dialog.new_instance.region')") el-radio-group(v-model="newInstanceDialog.region" size="mini" @change="buildInstance") - el-radio-button(label="US West") - el-radio-button(label="US East") - el-radio-button(label="Europe") - el-radio-button(label="Japan") - el-form-item(label="World ID") + el-radio-button(label="US West") {{ $t('dialog.new_instance.region_usw') }} + el-radio-button(label="US East") {{ $t('dialog.new_instance.region_use') }} + el-radio-button(label="Europe") {{ $t('dialog.new_instance.region_eu') }} + el-radio-button(label="Japan") {{ $t('dialog.new_instance.region_jp') }} + el-form-item(:label="$t('dialog.new_instance.world_id')") el-input(v-model="newInstanceDialog.worldId" size="mini" @click.native="$event.target.tagName === 'INPUT' && $event.target.select()") - el-form-item(label="Instance ID") - el-input(v-model="newInstanceDialog.instanceName" placeholder="Random" size="mini") - el-form-item(label="Instance Creator" v-if="newInstanceDialog.accessType !== 'public' && newInstanceDialog.accessType !== 'group'") - el-select(v-model="newInstanceDialog.userId" clearable placeholder="Choose User" filterable style="width:100%") - el-option-group(v-if="API.currentUser" label="ME") + el-form-item(:label="$t('dialog.new_instance.instance_id')") + el-input(v-model="newInstanceDialog.instanceName" :placeholder="$t('dialog.new_instance.instance_id_placeholder')" size="mini") + el-form-item(:label="$t('dialog.new_instance.instance_creator')" v-if="newInstanceDialog.accessType !== 'public' && newInstanceDialog.accessType !== 'group'") + el-select(v-model="newInstanceDialog.userId" clearable :placeholder="$t('dialog.new_instance.instance_creator_placeholder')" filterable style="width:100%") + el-option-group(v-if="API.currentUser" :label="$t('side_panel.me')") el-option.x-friend-item(:label="API.currentUser.displayName" :value="API.currentUser.id" style="height:auto") .avatar(:class="userStatusClass(API.currentUser)") img(v-lazy="userImage(API.currentUser)") .detail span.name(v-text="API.currentUser.displayName") - el-option-group(v-if="friendsGroup0.length" label="VIP") + el-option-group(v-if="friendsGroup0.length" :label="$t('side_panel.favorite')") el-option.x-friend-item(v-for="friend in friendsGroup0" :key="friend.id" :label="friend.name" :value="friend.id" style="height:auto") template(v-if="friend.ref") .avatar(:class="userStatusClass(friend.ref)") @@ -2523,7 +2523,7 @@ html .detail span.name(v-text="friend.ref.displayName" :style="{'color':friend.ref.$userColour}") span(v-else v-text="friend.id") - el-option-group(v-if="friendsGroup1.length" label="ONLINE") + el-option-group(v-if="friendsGroup1.length" :label="$t('side_panel.online')") el-option.x-friend-item(v-for="friend in friendsGroup1" :key="friend.id" :label="friend.name" :value="friend.id" style="height:auto") template(v-if="friend.ref") .avatar(:class="userStatusClass(friend.ref)") @@ -2531,7 +2531,7 @@ html .detail span.name(v-text="friend.ref.displayName" :style="{'color':friend.ref.$userColour}") span(v-else v-text="friend.id") - el-option-group(v-if="friendsGroup2.length" label="ACTIVE") + el-option-group(v-if="friendsGroup2.length" :label="$t('side_panel.active')") el-option.x-friend-item(v-for="friend in friendsGroup2" :key="friend.id" :label="friend.name" :value="friend.id" style="height:auto") template(v-if="friend.ref") .avatar @@ -2539,7 +2539,7 @@ html .detail span.name(v-text="friend.ref.displayName" :style="{'color':friend.ref.$userColour}") span(v-else v-text="friend.id") - el-option-group(v-if="friendsGroup3.length" label="OFFLINE") + el-option-group(v-if="friendsGroup3.length" :label="$t('side_panel.offline')") el-option.x-friend-item(v-for="friend in friendsGroup3" :key="friend.id" :label="friend.name" :value="friend.id" style="height:auto") template(v-if="friend.ref") .avatar @@ -2547,32 +2547,32 @@ html .detail span.name(v-text="friend.ref.displayName" :style="{'color':friend.ref.$userColour}") span(v-else v-text="friend.id") - el-form-item(label="Group ID" v-if="newInstanceDialog.accessType === 'group'") + el-form-item(:label="$t('dialog.new_instance.group_id')" v-if="newInstanceDialog.accessType === 'group'") el-input(v-model="newInstanceDialog.groupId" placeholder="grp_UUID" size="mini") - el-form-item(label="Location") + el-form-item(:label="$t('dialog.new_instance.location')") el-input(v-model="newInstanceDialog.location" size="mini" readonly) - el-form-item(label="URL") + el-form-item(:label="$t('dialog.new_instance.url')") el-input(v-model="newInstanceDialog.url" size="mini" readonly @click.native="$event.target.tagName === 'INPUT' && $event.target.select()") template(#footer) - el-button(size="small" @click="copyInstanceUrl(newInstanceDialog.location)") Copy URL - el-button(size="small" @click="selfInvite(newInstanceDialog.location)") Self Invite - el-button(size="small" @click="showInviteDialog(newInstanceDialog.location)" :disabled="(newInstanceDialog.accessType === 'friends' || newInstanceDialog.accessType === 'invite') && newInstanceDialog.userId !== API.currentUser.id") Invite - el-button(type="primary" size="small" @click="showLaunchDialog(newInstanceDialog.location, newInstanceDialog.secureOrShortName)") Launch + el-button(size="small" @click="copyInstanceUrl(newInstanceDialog.location)") {{ $t('dialog.new_instance.copy_url') }} + el-button(size="small" @click="selfInvite(newInstanceDialog.location)") {{ $t('dialog.new_instance.self_invite') }} + el-button(size="small" @click="showInviteDialog(newInstanceDialog.location)" :disabled="(newInstanceDialog.accessType === 'friends' || newInstanceDialog.accessType === 'invite') && newInstanceDialog.userId !== API.currentUser.id") {{ $t('dialog.new_instance.invite') }} + el-button(type="primary" size="small" @click="showLaunchDialog(newInstanceDialog.location, newInstanceDialog.secureOrShortName)") {{ $t('dialog.new_instance.launch') }} //- dialog: launch options - el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="launchOptionsDialog" :visible.sync="launchOptionsDialog.visible" title="Launch Options" width="500px") + el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="launchOptionsDialog" :visible.sync="launchOptionsDialog.visible" :title="$t('dialog.launch_options.header')" width="500px") div(style="font-size:12px") - | These options are for advanced users only. #[br] - | to change max fps: --fps=<N> e.g.) #[el-tag(size="mini") --fps=144] + | {{ $t('dialog.launch_options.description') }} #[br] + | {{ $t('dialog.launch_options.example') }} #[el-tag(size="mini") --fps=144] el-input(type="textarea" v-model="launchOptionsDialog.launchArguments" size="mini" show-word-limit :autosize="{ minRows:2, maxRows:5 }" placeholder="" style="margin-top:10px") div(style="font-size:12px;margin-top:10px") - | VRChat Path Override + | {{ $t('dialog.launch_options.path_override') }} el-input(type="textarea" v-model="launchOptionsDialog.vrcLaunchPathOverride" placeholder="C:\\Program Files (x86)\\Steam\\steamapps\\common\\VRChat" :rows="1" style="dispaly:block;margin-top:10px") template(#footer) div(style="display:flex") - el-button(size="small" @click="openExternalLink('https://docs.vrchat.com/docs/launch-options')") VRChat Docs - el-button(size="small" @click="openExternalLink('https://docs.unity3d.com/Manual/CommandLineArguments.html')") Unity Manual - el-button(type="primary" size="small" :disabled="launchOptionsDialog.loading" @click="updateLaunchOptions" style="margin-left:auto") Save + el-button(size="small" @click="openExternalLink('https://docs.vrchat.com/docs/launch-options')") {{ $t('dialog.launch_options.vrchat_docs') }} + el-button(size="small" @click="openExternalLink('https://docs.unity3d.com/Manual/CommandLineArguments.html')") {{ $t('dialog.launch_options.unity_manual') }} + el-button(type="primary" size="small" :disabled="launchOptionsDialog.loading" @click="updateLaunchOptions" style="margin-left:auto") {{ $t('dialog.launch_options.save') }} //- dialog: VRChat Config JSON el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="VRChatConfigDialog" :visible.sync="VRChatConfigDialog.visible" title="VRChat Config JSON" width="420px") @@ -2621,14 +2621,14 @@ html el-button(type="primary" size="small" :disabled="VRChatConfigDialog.loading" @click="saveVRChatConfigFile") Save //- dialog: YouTube Api Dialog - el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="youTubeApiDialog" :visible.sync="youTubeApiDialog.visible" title="YouTube API" width="400px") + el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="youTubeApiDialog" :visible.sync="youTubeApiDialog.visible" :title="$t('dialog.youtube_api.header')" width="400px") div(style='font-size:12px;') - | Enter your YouTube API Key (optional) #[br] - el-input(type="textarea" v-model="youTubeApiKey" placeholder="YouTube API Key" maxlength="39" show-word-limit style="dispaly:block;margin-top:10px") + | {{ $t('dialog.youtube_api.description') }} #[br] + el-input(type="textarea" v-model="youTubeApiKey" :placeholder="$t('dialog.youtube_api.placeholder')" maxlength="39" show-word-limit style="dispaly:block;margin-top:10px") template(#footer) div(style="display:flex") - el-button(size="small" @click="openExternalLink('https://rapidapi.com/blog/how-to-get-youtube-api-key/')") Guide - el-button(type="primary" size="small" @click="testYouTubeApiKey" style="margin-left:auto") Save + el-button(size="small" @click="openExternalLink('https://rapidapi.com/blog/how-to-get-youtube-api-key/')") {{ $t('dialog.youtube_api.guide') }} + el-button(type="primary" size="small" @click="testYouTubeApiKey" style="margin-left:auto") {{ $t('dialog.youtube_api.save') }} //- dialog: Set World Tags el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="setWorldTagsDialog" :visible.sync="setWorldTagsDialog.visible" title="Set World Tags" width="400px") @@ -2671,57 +2671,57 @@ html el-button(size="small" @click="downloadDialog.visible = false") Close //- dialog: update VRCX - el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="VRCXUpdateDialog" :visible.sync="VRCXUpdateDialog.visible" title="VRCX Updater" width="400px") + el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="VRCXUpdateDialog" :visible.sync="VRCXUpdateDialog.visible" :title="$t('dialog.vrcx_updater.header')" width="400px") div(v-loading="checkingForVRCXUpdate" style="margin-top:15px") div(v-if="VRCXUpdateDialog.updatePending" style="margin-bottom:15px") span(v-text="pendingVRCXUpdate") br - span Ready for install, restart VRCX to apply. + span {{ $t('dialog.vrcx_updater.ready_for_update') }} el-select(v-model="branch" @change="loadBranchVersions" style="display:inline-block;width:150px;margin-right:15px") el-option(v-once v-for="branch in branches" :key="branch.name" :label="branch.name" :value="branch.name") el-select(v-model="VRCXUpdateDialog.release" style="display:inline-block;width:150px") el-option(v-for="item in VRCXUpdateDialog.releases" :key="item.name" :label="item.tag_name" :value="item.name") div(v-if="!VRCXUpdateDialog.updatePending && VRCXUpdateDialog.release === appVersion" style="margin-top:15px") - span VRCX is up to date. + span {{ $t('dialog.vrcx_updater.latest_version') }} template(#footer) - el-button(v-if="(VRCXUpdateDialog.updatePending && VRCXUpdateDialog.release !== pendingVRCXUpdate) || VRCXUpdateDialog.release !== appVersion" type="primary" size="small" @click="installVRCXUpdate") Download - el-button(v-if="VRCXUpdateDialog.updatePending" type="primary" size="small" @click="restartVRCX") Install + el-button(v-if="(VRCXUpdateDialog.updatePending && VRCXUpdateDialog.release !== pendingVRCXUpdate) || VRCXUpdateDialog.release !== appVersion" type="primary" size="small" @click="installVRCXUpdate") {{ $t('dialog.vrcx_updater.download') }} + el-button(v-if="VRCXUpdateDialog.updatePending" type="primary" size="small" @click="restartVRCX") {{ $t('dialog.vrcx_updater.install') }} //- dialog: launch - el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="launchDialog" :visible.sync="launchDialog.visible" title="Launch" width="450px") + el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" ref="launchDialog" :visible.sync="launchDialog.visible" :title="$t('dialog.launch.header')" width="450px") el-form(:model="launchDialog" label-width="80px") - el-form-item(label="URL") + el-form-item(:label="$t('dialog.launch.url')") el-input(v-model="launchDialog.url" size="mini" @click.native="$event.target.tagName === 'INPUT' && $event.target.select()" style="width:260px") - el-tooltip(placement="right" content="Copy to clipboard" :disabled="hideTooltips") + el-tooltip(placement="right" :content="$t('dialog.launch.copy_tooltip')" :disabled="hideTooltips") el-button(@click="copyInstanceMessage(launchDialog.url)" size="mini" icon="el-icon-s-order" style="margin-right:5px" circle) - el-form-item(v-if="launchDialog.shortUrl" label="Short URL") - el-tooltip(placement="top" style="margin-left:5px" content="Short URL's expire after a set period of time") + el-form-item(v-if="launchDialog.shortUrl" :label="$t('dialog.launch.short_url')") + el-tooltip(placement="top" style="margin-left:5px" :content="$t('dialog.launch.short_url_notice')") i.el-icon-warning el-input(v-model="launchDialog.shortUrl" size="mini" @click.native="$event.target.tagName === 'INPUT' && $event.target.select()" style="width:241px") - el-tooltip(placement="right" content="Copy to clipboard" :disabled="hideTooltips") + el-tooltip(placement="right" :content="$t('dialog.launch.copy_tooltip')" :disabled="hideTooltips") el-button(@click="copyInstanceMessage(launchDialog.shortUrl)" size="mini" icon="el-icon-s-order" style="margin-right:5px" circle) - el-form-item(label="Location") + el-form-item(:label="$t('dialog.launch.location')") el-input(v-model="launchDialog.location" size="mini" @click.native="$event.target.tagName === 'INPUT' && $event.target.select()" style="width:260px") - el-tooltip(placement="right" content="Copy to clipboard" :disabled="hideTooltips") + el-tooltip(placement="right" :content="$t('dialog.launch.copy_tooltip')" :disabled="hideTooltips") el-button(@click="copyInstanceMessage(launchDialog.location)" size="mini" icon="el-icon-s-order" style="margin-right:5px" circle) template(#footer) - el-checkbox(v-model="launchDialog.desktop" style="float:left;margin-top:5px") Start as Desktop (No VR) - el-button(size="small" @click="showPreviousInstanceInfoDialog(launchDialog.location)") Info - el-button(size="small" @click="showInviteDialog(launchDialog.location)" :disabled="!checkCanInvite(launchDialog.location)") Invite - el-button(type="primary" size="small" @click="launchGame(launchDialog.location, launchDialog.secureOrShortName)" :disabled="!launchDialog.secureOrShortName") Launch + el-checkbox(v-model="launchDialog.desktop" style="float:left;margin-top:5px") {{ $t('dialog.launch.start_as_desktop') }} + el-button(size="small" @click="showPreviousInstanceInfoDialog(launchDialog.location)") {{ $t('dialog.launch.info') }} + el-button(size="small" @click="showInviteDialog(launchDialog.location)" :disabled="!checkCanInvite(launchDialog.location)") {{ $t('dialog.launch.invite') }} + el-button(type="primary" size="small" @click="launchGame(launchDialog.location, launchDialog.secureOrShortName)" :disabled="!launchDialog.secureOrShortName") {{ $t('dialog.launch.launch') }} //- dialog: export friends list - el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" :visible.sync="exportFriendsListDialog" title="Export Friends List" width="650px") + el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" :visible.sync="exportFriendsListDialog" :title="$t('dialog.export_friends_list.header')" width="650px") el-input(type="textarea" v-if="exportFriendsListDialog" v-model="exportFriendsListContent" size="mini" rows="15" resize="none" readonly style="margin-top:15px" @click.native="$event.target.tagName === 'TEXTAREA' && $event.target.select()") //- dialog: export avatars list - el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" :visible.sync="exportAvatarsListDialog" title="Export Own Avatars" width="650px") + el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" :visible.sync="exportAvatarsListDialog" :title="$t('dialog.export_own_avatars.header')" width="650px") el-input(type="textarea" v-if="exportAvatarsListDialog" v-model="exportAvatarsListContent" size="mini" rows="15" resize="none" readonly style="margin-top:15px" @click.native="$event.target.tagName === 'TEXTAREA' && $event.target.select()") //- dialog: Discord username list - el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" :visible.sync="discordNamesDialogVisible" title="Discord Names" width="650px") + el-dialog.x-dialog(:before-close="beforeDialogClose" @mousedown.native="dialogMouseDown" @mouseup.native="dialogMouseUp" :visible.sync="discordNamesDialogVisible" :title="$t('dialog.discord_names.header')" width="650px") div(style='font-size:12px;') - | Click load missing entries in the Friends List tab to search entire friends list + | {{ $t('dialog.discord_names.description') }} el-input(type="textarea" v-if="discordNamesDialogVisible" v-model="discordNamesContent" size="mini" rows="15" resize="none" readonly style="margin-top:15px") //- dialog: Notification position diff --git a/html/src/localization/strings/en.json b/html/src/localization/strings/en.json index 695ffa59..36b7f713 100644 --- a/html/src/localization/strings/en.json +++ b/html/src/localization/strings/en.json @@ -710,6 +710,11 @@ "header": "JSON" } }, + "favorite": { + "header": "Choose Group", + "vrchat_favorites": "VRChat Favorites", + "local_favorites": "Local Favorites" + }, "social_status": { "header": "Social Status", "history": "History", @@ -728,6 +733,78 @@ "bio_placeholder": "Please input a bio", "add_link": "Add Link", "update": "Update" + }, + "new_instance": { + "header": "New Instance", + "access_type": "Access Type", + "access_type_public": "Public", + "access_type_group": "Group", + "access_type_friend_plus": "Friends+", + "access_type_friend": "Friends", + "access_type_invite_plus": "Invite+", + "access_type_invite": "Invite", + "region": "Region", + "region_usw": "US West", + "region_use": "US East", + "region_eu": "Europe", + "region_jp": "Japan", + "world_id": "World ID", + "instance_id": "Instance ID", + "instance_id_placeholder": "Random", + "instance_creator": "Instance Creator", + "instance_creator_placeholder": "Choose User", + "group_id": "Group ID", + "location": "Location", + "url": "URL", + "copy_url": "Copy URL", + "self_invite": "Self invite", + "invite": "Invite", + "launch": "Launch" + }, + "launch_options": { + "header": "Launch Options", + "description": "These options are for advanced users only.", + "example": "to change max fps: --fps= e.g.)", + "path_override": "VRChat Path Override", + "vrchat_docs": "VRChat Docs", + "unity_manual": "Unity Manual", + "save": "Save" + }, + "youtube_api": { + "header": "YouTube API", + "description": "Enter your YouTube API Key (optional)", + "placeholder": "YouTube API Key", + "guide": "Guide", + "save": "Save" + }, + "vrcx_updater": { + "header": "VRCX Updater", + "latest_version": "VRCX is up to date.", + "ready_for_update": "Ready for install, restart VRCX to apply.", + "download": "Download", + "install": "Install" + }, + "launch": { + "header": "Launch", + "url": "URL", + "short_url": "Short URL", + "short_url_notice": "Short URL's expire after a set period of time", + "location": "Location", + "copy_tooltip": "Copy to clipboard", + "start_as_desktop": "Start as Desktop (No VR)", + "info": "Info", + "invite": "Invite", + "launch": "Launch" + }, + "export_friends_list": { + "header": "Export Friends List" + }, + "export_own_avatars": { + "header": "Export Own Avatars" + }, + "discord_names": { + "header": "Discord Names", + "description": "Click load missing entries in the Friends List tab to search entire friends list" } }, "table": { diff --git a/html/src/localization/strings/zh_TW.json b/html/src/localization/strings/zh_TW.json index 3cc0bd9e..c4a03213 100644 --- a/html/src/localization/strings/zh_TW.json +++ b/html/src/localization/strings/zh_TW.json @@ -6,7 +6,7 @@ "game_log": "遊戲紀錄", "player_list": "玩家列表", "search": "搜尋", - "favorites": "最愛", + "favorites": "收藏", "friend_log": "好友紀錄", "moderation": "玩家處置", "notification": "通知", @@ -30,7 +30,7 @@ } }, "feed": { - "favorites_only_tooltip": "僅篩選最愛", + "favorites_only_tooltip": "僅篩選收藏", "filter_placeholder": "篩選動態", "search_placeholder": "搜尋動態" }, @@ -72,18 +72,18 @@ }, "worlds": { "header": "世界", - "vrchat_favorites": "VRChat 最愛", - "local_favorites": "本地最愛", + "vrchat_favorites": "VRChat 收藏", + "local_favorites": "本地收藏", "new_group": "新群組" }, "avatars": { "header": "角色" }, - "refresh_tooltip": "重新整理所有最愛", + "refresh_tooltip": "重新整理所有收藏", "export": "匯出", "import": "匯入", "move_tooltip": "移動", - "unfavorite_tooltip": "解除最愛", + "unfavorite_tooltip": "解除收藏", "visibility_tooltip": "變更可見度", "rename_tooltip": "重新命名", "clear_tooltip": "清除", @@ -111,7 +111,7 @@ "load_notice": "這會向 API 傳送大量請求,所以請謹慎使用", "load_tooltip": "讀取", "cancel_tooltip": "取消", - "favorites_only_tooltip": "僅篩選最愛", + "favorites_only_tooltip": "僅篩選收藏", "search_placeholder": "搜尋好友", "filter_placeholder": "篩選好友", "refresh_tooltip": "重新整理", @@ -207,7 +207,7 @@ "theme_mode_dark": "深色", "vrcplus_profile_icons": "VRChat+ 個人檔案圖示", "disable_tooltips": "關閉提示", - "sort_favorite_by": "最愛排序依據", + "sort_favorite_by": "收藏排序依據", "sort_favorite_by_name": "名稱", "sort_favorite_by_date": "時間", "sort_instance_users_by": "坊間玩家排序依據", @@ -231,7 +231,7 @@ "sort_by_status": "依狀態排序", "sort_gps_to_top": "將 GPS 排序到頂部", "sort_gps_to_top_notice": "(僅限上線玩家)", - "sort_favorite_by": "最愛玩家 排序依據", + "sort_favorite_by": "收藏玩家 排序依據", "sort_favorite_by_alphabet": "字母順序", "sort_favorite_by_online_time": "上線時長", "sort_online_by": "網頁玩家 排序依據", @@ -406,7 +406,7 @@ "enable": "啟用", "enable_tooltip": "需要啟用 SteamVR 疊層選項", "filter": "篩選器", - "filter_favorites": "最愛", + "filter_favorites": "收藏", "filter_friends": "好友", "filter_everyone": "所有人", "message_timeout": "訊息時長" @@ -416,7 +416,7 @@ "enable": "啟用", "enable_tooltip": "需要啟用 SteamVR 疊層選項", "filter": "篩選器", - "filter_favorites": "最愛", + "filter_favorites": "收藏", "filter_friends": "好友", "filter_everyone": "所有人", "timeout_threshold": "愈時閾值" @@ -434,7 +434,7 @@ "refresh_tooltip": "重新整理好友", "friends": "好友", "me": "我", - "favorite": "最愛", + "favorite": "收藏", "online": "上線", "active": "活躍", "offline": "離線", @@ -456,8 +456,8 @@ "vrchat_team": "VRChat 團隊" }, "actions": { - "favorite_tooltip": "添加到我的最愛", - "unfavorite_tooltip": "從我的最愛中移除", + "favorite_tooltip": "添加到我的收藏", + "unfavorite_tooltip": "從我的收藏中移除", "refresh": "重新整理", "copy_url": "複製玩家連結", "invite": "邀請", @@ -532,7 +532,7 @@ "sort_by_update": "依更新排序" }, "favorite_worlds": { - "header": "最愛世界" + "header": "收藏世界" }, "avatars": { "header": "角色", @@ -556,8 +556,8 @@ }, "actions": { "delete_cache_tooltip": "從快取中刪除世界", - "favorite_tooltip": "添加到我的最愛", - "unfavorite_tooltip": "從我的最愛中移除", + "favorite_tooltip": "添加到我的收藏", + "unfavorite_tooltip": "從我的收藏中移除", "refresh": "重新整理", "new_instance": "新房間", "make_home": "設為家點", @@ -592,7 +592,7 @@ "copy_url": "複製連結", "youtube_preview": "YouTube 預覽", "players": "玩家人數", - "favorites": "最愛次數", + "favorites": "收藏次數", "visits": "總綁訪次數", "capacity": "最大玩家上限", "heat": "熱度", @@ -620,8 +620,8 @@ }, "actions": { "delete_cache_tooltip": "從快取中刪除角色", - "favorite_tooltip": "添加到我的最愛", - "unfavorite_tooltip": "從我的最愛中移除", + "favorite_tooltip": "添加到我的收藏", + "unfavorite_tooltip": "從我的收藏中移除", "refresh": "重新整理", "select": "選擇角色", "select_fallback": "選擇為備用角色", @@ -712,6 +712,11 @@ "header": "原始資料" } }, + "favorite": { + "header": "選擇群組", + "vrchat_favorites": "VRChat 收藏", + "local_favorites": "本地收藏" + }, "social_status": { "header": "社交狀態", "history": "過去的社交狀態", @@ -730,6 +735,78 @@ "bio_placeholder": "在這裡介紹一下自己吧!", "add_link": "新增社交連結", "update": "更新" + }, + "new_instance": { + "header": "新房間", + "access_type": "房間種類", + "access_type_public": "公開", + "access_type_group": "群組", + "access_type_friend_plus": "好友+", + "access_type_friend": "好友", + "access_type_invite_plus": "邀請+", + "access_type_invite": "邀請", + "region": "地區", + "region_usw": "美國西部", + "region_use": "美國東部", + "region_eu": "歐洲", + "region_jp": "日本", + "world_id": "世界 ID", + "instance_id": "房間 ID", + "instance_id_placeholder": "亂數", + "instance_creator": "房間建立者", + "instance_creator_placeholder": "選擇玩家", + "group_id": "群組 ID", + "location": "地點", + "url": "連結", + "copy_url": "複製連結", + "self_invite": "自我邀請", + "invite": "邀請", + "launch": "啟動" + }, + "launch_options": { + "header": "啟動選項", + "description": "這些選項僅適用於高級玩家。", + "example": "變更 FPS 限制:--fps= 例:", + "path_override": "VRChat 位置覆蓋", + "vrchat_docs": "VRChat 文檔", + "unity_manual": "Unity 手冊", + "save": "儲存" + }, + "youtube_api": { + "header": "YouTube API", + "description": "輸入你的 YouTube API 金鑰(選擇性)", + "placeholder": "YouTube API 金鑰", + "guide": "教學", + "save": "儲存" + }, + "vrcx_updater": { + "header": "VRCX 更新器", + "latest_version": "VRCX 已是最新版本。", + "ready_for_update": "已準備好安裝更新,重新啟動 VRCX 來套用更新。", + "download": "下載", + "install": "安裝" + }, + "launch": { + "header": "啟動", + "url": "連結", + "short_url": "短連結", + "short_url_notice": "短網址會在一段時間後過期", + "location": "地點", + "copy_tooltip": "複製到剪貼簿", + "start_as_desktop": "以桌面模式啟動(無 VR)", + "info": "資訊", + "invite": "邀請", + "launch": "啟動" + }, + "export_friends_list": { + "header": "匯出好友列表" + }, + "export_own_avatars": { + "header": "匯出私有角色" + }, + "discord_names": { + "header": "Discord 名稱", + "description": "點擊好友列表中的「讀取缺失的項目」來搜尋整個好友列表" } }, "table": {