mirror of
https://github.com/Drop-OSS/drop.git
synced 2025-11-09 20:12:10 +10:00
* feat: add new language selector in footer, add pirate language * fix: translations in title bar not updating * chore: refactor into separate component * fix: update translate url * fix: update pirate translation to use "ship" instead of "plank" for platform a very very necessary change
This commit is contained in:
142
components/LanguageSelector.vue
Normal file
142
components/LanguageSelector.vue
Normal file
@ -0,0 +1,142 @@
|
||||
<template>
|
||||
<div>
|
||||
<Listbox v-model="wiredLocale" as="div">
|
||||
<ListboxLabel class="block text-sm/6 font-medium text-zinc-400">{{
|
||||
$t("selectLanguage")
|
||||
}}</ListboxLabel>
|
||||
<div class="relative mt-2">
|
||||
<ListboxButton
|
||||
class="grid w-full cursor-default grid-cols-1 rounded-md bg-zinc-900 py-1.5 pr-2 pl-3 text-left text-zinc-300 outline-1 -outline-offset-1 outline-zinc-700 focus:outline-2 focus:-outline-offset-2 focus:outline-blue-600 sm:text-sm/6"
|
||||
>
|
||||
<span class="col-start-1 row-start-1 flex items-center gap-3 pr-6">
|
||||
<span alt="" class="-mt-0.5 shrink-0 rounded-full">{{
|
||||
localeToEmoji(wiredLocale)
|
||||
}}</span>
|
||||
<span class="block truncate">{{
|
||||
currentLocaleInformation?.name ?? wiredLocale
|
||||
}}</span>
|
||||
</span>
|
||||
<ChevronUpDownIcon
|
||||
class="col-start-1 row-start-1 size-5 self-center justify-self-end text-gray-500 sm:size-4"
|
||||
aria-hidden="true"
|
||||
/>
|
||||
</ListboxButton>
|
||||
|
||||
<transition
|
||||
leave-active-class="transition ease-in duration-100"
|
||||
leave-from-class="opacity-100"
|
||||
leave-to-class="opacity-0"
|
||||
>
|
||||
<ListboxOptions
|
||||
class="absolute z-10 mt-1 max-h-56 w-full overflow-auto rounded-md bg-zinc-900 py-1 text-base shadow-lg ring-1 ring-black/5 focus:outline-hidden sm:text-sm"
|
||||
>
|
||||
<ListboxOption
|
||||
v-for="listLocale in locales"
|
||||
:key="listLocale.code"
|
||||
v-slot="{ active, selected }"
|
||||
as="template"
|
||||
:value="listLocale.code"
|
||||
>
|
||||
<li
|
||||
:class="[
|
||||
active
|
||||
? 'bg-blue-600 text-white outline-hidden'
|
||||
: 'text-zinc-300',
|
||||
'relative cursor-default py-2 pr-9 pl-3 select-none',
|
||||
]"
|
||||
>
|
||||
<div class="flex items-center">
|
||||
<span class="-mt-0.5 shrink-0 rounded-full">
|
||||
{{ localeToEmoji(listLocale.code) }}
|
||||
</span>
|
||||
<span
|
||||
:class="[
|
||||
selected ? 'font-semibold' : 'font-normal',
|
||||
'ml-3 block truncate',
|
||||
]"
|
||||
>{{ listLocale.name }}</span
|
||||
>
|
||||
</div>
|
||||
|
||||
<span
|
||||
v-if="selected"
|
||||
:class="[
|
||||
active ? 'text-white' : 'text-blue-600',
|
||||
'absolute inset-y-0 right-0 flex items-center pr-4',
|
||||
]"
|
||||
>
|
||||
<CheckIcon class="size-5" aria-hidden="true" />
|
||||
</span>
|
||||
</li>
|
||||
</ListboxOption>
|
||||
</ListboxOptions>
|
||||
</transition>
|
||||
</div>
|
||||
</Listbox>
|
||||
<NuxtLink
|
||||
class="mt-1 transition text-blue-500 hover:text-blue-600 text-sm"
|
||||
to="https://translate.droposs.org/projects/drop/"
|
||||
target="_blank"
|
||||
>
|
||||
<i18n-t
|
||||
keypath="helpUsTranslate"
|
||||
tag="span"
|
||||
scope="global"
|
||||
class="inline-flex items-center gap-x-1 hover:underline"
|
||||
>
|
||||
<template #arrow>
|
||||
<ArrowTopRightOnSquareIcon class="size-4" />
|
||||
</template>
|
||||
</i18n-t>
|
||||
</NuxtLink>
|
||||
|
||||
<DevOnly
|
||||
><h1 class="mt-3 text-sm text-gray-500">{{ $t("welcome") }}</h1>
|
||||
</DevOnly>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import {
|
||||
Listbox,
|
||||
ListboxButton,
|
||||
ListboxLabel,
|
||||
ListboxOption,
|
||||
ListboxOptions,
|
||||
} from "@headlessui/vue";
|
||||
import { ChevronUpDownIcon } from "@heroicons/vue/16/solid";
|
||||
import { ArrowTopRightOnSquareIcon } from "@heroicons/vue/24/outline";
|
||||
|
||||
const { locales, locale, setLocale } = useI18n();
|
||||
|
||||
function localeToEmoji(local: string): string {
|
||||
switch (local) {
|
||||
case "en":
|
||||
case "en-gb":
|
||||
case "en-ca":
|
||||
case "en-au":
|
||||
case "en-us": {
|
||||
return "🇺🇸";
|
||||
}
|
||||
case "en-pirate": {
|
||||
return "🏴☠️";
|
||||
}
|
||||
|
||||
default: {
|
||||
return "❓";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const wiredLocale = computed({
|
||||
get() {
|
||||
return locale.value;
|
||||
},
|
||||
set(v) {
|
||||
setLocale(v);
|
||||
},
|
||||
});
|
||||
const currentLocaleInformation = computed(() =>
|
||||
locales.value.find((e) => e.code == wiredLocale.value),
|
||||
);
|
||||
</script>
|
||||
@ -13,7 +13,7 @@
|
||||
name="search"
|
||||
autocomplete="off"
|
||||
class="block w-full rounded-md bg-zinc-900 py-2 pl-9 pr-2 text-sm text-zinc-100 outline outline-1 -outline-offset-1 outline-zinc-700 placeholder:text-gray-400 focus:outline focus:outline-2 focus:-outline-offset-2 focus:outline-blue-600"
|
||||
placeholder="$t('library.search')"
|
||||
:placeholder="$t('library.search')"
|
||||
/>
|
||||
<MagnifyingGlassIcon
|
||||
class="pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-zinc-400"
|
||||
|
||||
@ -8,6 +8,9 @@
|
||||
<p class="text-sm leading-6 text-zinc-300">
|
||||
{{ $t("drop.desc") }}
|
||||
</p>
|
||||
|
||||
<LanguageSelector />
|
||||
|
||||
<div class="flex space-x-6">
|
||||
<NuxtLink
|
||||
v-for="item in navigation.social"
|
||||
@ -90,6 +93,7 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { IconsDiscordLogo, IconsGithubLogo } from "#components";
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
const navigation = {
|
||||
|
||||
@ -54,7 +54,6 @@
|
||||
</transition>
|
||||
</Menu>
|
||||
</li>
|
||||
<UserHeaderSelectLang />
|
||||
<UserHeaderUserWidget />
|
||||
</ol>
|
||||
</div>
|
||||
@ -176,9 +175,7 @@
|
||||
</UserHeaderWidget>
|
||||
</li>
|
||||
<li class="w-full">
|
||||
<UserHeaderWidget class="w-full">
|
||||
<UserHeaderSelectLang />
|
||||
</UserHeaderWidget>
|
||||
<UserHeaderWidget class="w-full" />
|
||||
</li>
|
||||
</div>
|
||||
</nav>
|
||||
@ -209,7 +206,7 @@ const router = useRouter();
|
||||
const { t } = useI18n();
|
||||
|
||||
const homepageURL = "/store";
|
||||
const navigation: Array<NavigationItem> = [
|
||||
const navigation: Ref<Array<NavigationItem>> = computed(() => [
|
||||
{
|
||||
prefix: "/store",
|
||||
route: "/store",
|
||||
@ -230,9 +227,9 @@ const navigation: Array<NavigationItem> = [
|
||||
route: "/news",
|
||||
label: t("userHeader.links.news"),
|
||||
},
|
||||
];
|
||||
]);
|
||||
|
||||
const currentPageIndex = useCurrentNavigationIndex(navigation);
|
||||
const currentPageIndex = useCurrentNavigationIndex(navigation.value);
|
||||
|
||||
const notifications = useNotifications();
|
||||
const unreadNotifications = computed(() =>
|
||||
|
||||
@ -1,78 +0,0 @@
|
||||
<script setup lang="ts">
|
||||
import { Menu, MenuButton, MenuItems, MenuItem } from "@headlessui/vue";
|
||||
import { ChevronDownIcon } from "@heroicons/vue/16/solid";
|
||||
|
||||
const { locales, locale: currLocale, setLocale } = useI18n();
|
||||
|
||||
function localToEmoji(local: string): string {
|
||||
switch (local) {
|
||||
case "en":
|
||||
case "en-gb":
|
||||
case "en-ca":
|
||||
case "en-au":
|
||||
case "en-us": {
|
||||
return "🇺🇸";
|
||||
}
|
||||
case "en-pirate": {
|
||||
return "🏴☠️";
|
||||
}
|
||||
|
||||
default: {
|
||||
return "❓";
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<Menu as="div" class="relative inline-block">
|
||||
<MenuButton>
|
||||
<UserHeaderWidget>
|
||||
<div
|
||||
class="inline-flex items-center text-zinc-300 hover:text-white h-5"
|
||||
>
|
||||
<EmojiText :emoji="localToEmoji(currLocale)" />
|
||||
<!-- <span class="ml-2 text-sm font-bold">{{ locale }}</span> -->
|
||||
<ChevronDownIcon class="ml-3 h-4" />
|
||||
</div>
|
||||
</UserHeaderWidget>
|
||||
</MenuButton>
|
||||
|
||||
<transition
|
||||
enter-active-class="transition ease-out duration-100"
|
||||
enter-from-class="transform opacity-0 scale-95"
|
||||
enter-to-class="transform opacity-100 scale-100"
|
||||
leave-active-class="transition ease-in duration-75"
|
||||
leave-from-class="transform opacity-100 scale-100"
|
||||
leave-to-class="transform opacity-0 scale-95"
|
||||
>
|
||||
<MenuItems
|
||||
class="absolute right-0 top-10 z-50 w-56 origin-top-right focus:outline-none shadow-md"
|
||||
>
|
||||
<PanelWidget class="flex-col gap-y-2">
|
||||
<div class="flex flex-col">
|
||||
<MenuItem
|
||||
v-for="locale in locales"
|
||||
:key="locale.code"
|
||||
hydrate-on-visible
|
||||
as="div"
|
||||
>
|
||||
<button @click="setLocale(locale.code)">
|
||||
<EmojiText :emoji="localToEmoji(locale.code)" />
|
||||
{{ locale.name }}
|
||||
</button>
|
||||
</MenuItem>
|
||||
</div>
|
||||
</PanelWidget>
|
||||
</MenuItems>
|
||||
</transition>
|
||||
</Menu>
|
||||
</template>
|
||||
<style scoped>
|
||||
img.emoji {
|
||||
height: 1em;
|
||||
width: 1em;
|
||||
margin: 0 0.05em 0 0.1em;
|
||||
vertical-align: -0.1em;
|
||||
}
|
||||
</style>
|
||||
@ -1,3 +1,482 @@
|
||||
{
|
||||
"welcome": "Arr matey, Welcome!"
|
||||
"account": {
|
||||
"devices": {
|
||||
"capabilities": "Aye, yer Capabilities",
|
||||
"lastConnected": "Last Linked",
|
||||
"noDevices": "No contraptions tied to yer coffers, eh?",
|
||||
"platform": "Ship",
|
||||
"revoke": "Scuttle 'em",
|
||||
"subheader": "Manage the contraptions allowed access to yer Drop booty.",
|
||||
"title": "Contraptions"
|
||||
},
|
||||
"notifications": {
|
||||
"all": "Gaze upon all {arrow}",
|
||||
"desc": "View and manage yer messages from the crows' nest.",
|
||||
"markAllAsRead": "Mark all as read, aye!",
|
||||
"markAsRead": "Mark as read, matey!",
|
||||
"none": "No messages, savvy?",
|
||||
"notifications": "Crows' Nest",
|
||||
"title": "Messages from the Crows' Nest",
|
||||
"unread": "Unread Messages"
|
||||
},
|
||||
"settings": "Account Settings, savvy?",
|
||||
"title": "Yer Own Coffer"
|
||||
},
|
||||
"actions": "Deeds",
|
||||
"adminTitle": "Cap'n's Quarters | Drop",
|
||||
"adminTitleTemplate": "{0} | Cap'n | Drop",
|
||||
"title": "Drop",
|
||||
"titleTemplate": "{0} | Drop",
|
||||
"auth": {
|
||||
"callback": {
|
||||
"authClient": "Grant passage to this scallywag?",
|
||||
"authorize": "Grant Passage",
|
||||
"authorizedClient": "Drop has granted passage to the scallywag. Ye may now shut this porthole.",
|
||||
"issues": "Troubles be brewin', matey?",
|
||||
"learn": "Learn more {arrow}",
|
||||
"paste": "Scribble this code into the scallywag to carry on:",
|
||||
"permWarning": "Grantin' this request allows \"{name}\" on \"{platform}\" to:",
|
||||
"requestedAccess": "\"{name}\" has requested passage to yer Drop coffer.",
|
||||
"success": "Shiver me timbers, it worked!"
|
||||
},
|
||||
"confirmPassword": "Confirm @:auth.password",
|
||||
"displayName": "Yer Scallywag Name",
|
||||
"email": "Salty Mail",
|
||||
"password": "Secret Word",
|
||||
"register": {
|
||||
"confirmPasswordFormat": "Must be the same as above, savvy?",
|
||||
"emailFormat": "Must be in the fashion of a true scallywag {'@'} example.com",
|
||||
"passwordFormat": "Must be 14 or more marks, ye landlubber!",
|
||||
"subheader": "Fill in yer details below to make yer mark.",
|
||||
"title": "Forge yer Drop Mark",
|
||||
"usernameFormat": "Must be 5 or more marks, and all lowercase, argh!"
|
||||
},
|
||||
"signin": {
|
||||
"externalProvider": "Sign in with another ship's captain {arrow}",
|
||||
"forgot": "Forgot yer secret word, eh?",
|
||||
"noAccount": "No mark in the logbook? Beg a cap'n to make ye one, argh!",
|
||||
"or": "OR",
|
||||
"pageTitle": "Sign in to Drop, ye dog!",
|
||||
"rememberMe": "Remember me, savvy?",
|
||||
"signin": "Sign in, ye scurvy dog!",
|
||||
"title": "Sign in to yer mark"
|
||||
},
|
||||
"signout": "Cast off!",
|
||||
"username": "Scallywag Name"
|
||||
},
|
||||
"cancel": "Belay that!",
|
||||
"chars": {
|
||||
"arrow": "→",
|
||||
"arrowBack": "←",
|
||||
"quoted": "\"\"",
|
||||
"srComma": ", {0}"
|
||||
},
|
||||
"close": "Shut yer trap!",
|
||||
"common": {
|
||||
"cannotUndo": "This deed cannot be undone, ye hear!",
|
||||
"date": "Date",
|
||||
"deleteConfirm": "Are ye sure ye want to scuttle \"{0}\", ye rogue?",
|
||||
"friends": "Shipmates",
|
||||
"groups": "Crews",
|
||||
"noResults": "No plunder found!",
|
||||
"servers": "Ships",
|
||||
"tags": "Marks",
|
||||
"today": "Today",
|
||||
"divider": "{'|'}",
|
||||
"srLoading": "Loading, loading, argh..."
|
||||
},
|
||||
"create": "Forge!",
|
||||
"delete": "Scuttle!",
|
||||
"drop": {
|
||||
"desc": "An open-source game distribution platform built for speed, flexibility and beauty, like a swift brigantine!",
|
||||
"drop": "Drop"
|
||||
},
|
||||
"edit": "Amend",
|
||||
"editor": {
|
||||
"bold": "Bold, like a cannonball!",
|
||||
"boldPlaceholder": "bold text, matey",
|
||||
"code": "Code, ye scallywag!",
|
||||
"codePlaceholder": "code, argh!",
|
||||
"heading": "Heading, to the horizon!",
|
||||
"headingPlaceholder": "heading, savvy?",
|
||||
"italic": "Italic, like a wobbly deck!",
|
||||
"italicPlaceholder": "italic text, arrr!",
|
||||
"link": "Link, a chain to adventure!",
|
||||
"linkPlaceholder": "link text, ye dog!",
|
||||
"listItem": "List Item, for yer plunder!",
|
||||
"listItemPlaceholder": "list item, eh?"
|
||||
},
|
||||
"errors": {
|
||||
"backHome": "{arrow} Back to yer safe harbor",
|
||||
"invalidBody": "Invalid request, ye barnacle-encrusted body: {0}",
|
||||
"inviteRequired": "Invitation demanded to sign up, ye landlubber.",
|
||||
"library": {
|
||||
"add": {
|
||||
"desc": "Drop couldn't add this game to yer treasure hoard: {0}",
|
||||
"title": "Failed to add game to yer treasure hoard"
|
||||
},
|
||||
"collection": {
|
||||
"create": {
|
||||
"desc": "Drop couldn't forge yer collection, argh: {0}",
|
||||
"title": "Failed to forge collection"
|
||||
}
|
||||
},
|
||||
"source": {
|
||||
"delete": {
|
||||
"desc": "Drop couldn't scuttle this source: {0}",
|
||||
"title": "Failed to scuttle treasure hoard source"
|
||||
}
|
||||
}
|
||||
},
|
||||
"news": {
|
||||
"article": {
|
||||
"delete": {
|
||||
"desc": "Drop couldn't scuttle this article: {0}",
|
||||
"title": "Failed to scuttle article"
|
||||
}
|
||||
}
|
||||
},
|
||||
"occurred": "An error occurred whilst answerin' yer plea. If ye believe this be a bug, report it, ye dog! Try signin' in and see if it clears the decks.",
|
||||
"ohNo": "Blimey!",
|
||||
"pageTitle": "{0} | Drop",
|
||||
"revokeClient": "Failed to scuttle scallywag",
|
||||
"revokeClientFull": "Failed to scuttle scallywag {0}",
|
||||
"signIn": "Sign in {arrow}, ye scurvy dog!",
|
||||
"support": "Support Discord, arrr!",
|
||||
"unknown": "An unknown blunder occurred, savvy?",
|
||||
"version": {
|
||||
"delete": {
|
||||
"desc": "Drop met a squall whilst scuttlin' the version: {error}",
|
||||
"title": "There was a squall whilst scuttlin' the version"
|
||||
},
|
||||
"order": {
|
||||
"desc": "Drop met a squall whilst updatin' the version: {error}",
|
||||
"title": "There was a squall whilst updatin' the version order"
|
||||
}
|
||||
},
|
||||
"upload": {
|
||||
"title": "Failed to hoist the file",
|
||||
"description": "Drop couldn't hoist the file: {0}"
|
||||
},
|
||||
"game": {
|
||||
"metadata": {
|
||||
"title": "Failed to update yer charts",
|
||||
"description": "Drop failed to update the game's charts: {0}"
|
||||
},
|
||||
"description": {
|
||||
"title": "Failed to update game description",
|
||||
"description": "Drop failed to update the game description: {0}"
|
||||
},
|
||||
"banner": {
|
||||
"title": "Failed to hoist the banner image",
|
||||
"description": "Drop failed to hoist the banner image: {0}"
|
||||
},
|
||||
"cover": {
|
||||
"title": "Failed to hoist the cover image",
|
||||
"description": "Drop failed to hoist the cover image: {0}"
|
||||
},
|
||||
"deleteImage": {
|
||||
"title": "Failed to scuttle the image",
|
||||
"description": "Drop failed to scuttle the image: {0}"
|
||||
},
|
||||
"carousel": {
|
||||
"title": "Failed to update image carousel",
|
||||
"description": "Drop failed to update the image carousel: {0}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"footer": {
|
||||
"about": "About, savvy?",
|
||||
"aboutDrop": "About Drop, argh!",
|
||||
"docs": {
|
||||
"client": "Scallywag's Docs",
|
||||
"server": "Cap'n's Docs"
|
||||
},
|
||||
"documentation": "Charts and Scrolls",
|
||||
"comparison": "Comparison, matey!",
|
||||
"findGame": "Find a Game, ye dog!",
|
||||
"footer": "Keel",
|
||||
"games": "Games",
|
||||
"social": {
|
||||
"discord": "Discord, argh!",
|
||||
"github": "GitHub, savvy?"
|
||||
},
|
||||
"topSellers": "Top Plunderers"
|
||||
},
|
||||
"header": {
|
||||
"admin": {
|
||||
"admin": "Cap'n",
|
||||
"tasks": "Duties",
|
||||
"users": "Crew"
|
||||
},
|
||||
"back": "Aft!",
|
||||
"openSidebar": "Open the side-hatch!"
|
||||
},
|
||||
"highest": "highest",
|
||||
"home": "Home Port",
|
||||
"users": {
|
||||
"admin": {
|
||||
"description": "Manage the crew on yer Drop vessel, and set yer passage methods, savvy?",
|
||||
"authLink": "Passage {arrow}",
|
||||
"displayNameHeader": "Scallywag Name",
|
||||
"usernameHeader": "Crew Name",
|
||||
"emailHeader": "Salty Mail",
|
||||
"adminHeader": "Cap'n, eh?",
|
||||
"authoptionsHeader": "Passage Options",
|
||||
"srEditLabel": "Amend",
|
||||
"adminUserLabel": "Cap'n of the crew",
|
||||
"normalUserLabel": "Common crewman",
|
||||
"authentication": {
|
||||
"title": "Passage",
|
||||
"description": "Drop backs many 'passage ways'. As ye enable or disable 'em, they show on the sign-in screen for the crew to pick. Click the dot menu to rig the passage way.",
|
||||
"enabledKey": "Enabled, argh?",
|
||||
"enabled": "Enabled",
|
||||
"disabled": "Disabled",
|
||||
"srOpenOptions": "Open options",
|
||||
"configure": "Rig",
|
||||
"simple": "Simple (crew name/secret word)",
|
||||
"oidc": "OpenID Connect, savvy?"
|
||||
},
|
||||
"simple": {
|
||||
"title": "Simple passage",
|
||||
"description": "Simple passage uses a system of 'invitations' to create crew. Ye can forge an invitation, and optionally name a crew name or salty mail for the crew, then it'll make a magic scroll that can be used to make a mark.",
|
||||
"invitationTitle": "Invitations",
|
||||
"createInvitation": "Forge Invitation",
|
||||
"noUsernameEnforced": "No crew name forced, argh.",
|
||||
"noEmailEnforced": "No salty mail forced, matey.",
|
||||
"adminInvitation": "Cap'n's Invitation",
|
||||
"userInvitation": "Crewman's Invitation",
|
||||
"expires": "Expires: {expiry}",
|
||||
"neverExpires": "Never expires, savvy.",
|
||||
"noInvitations": "No invitations, argh.",
|
||||
"inviteTitle": "Invite crew to Drop",
|
||||
"inviteDescription": "Drop will make a scroll ye can send to the scallywag ye want to invite. Ye can optionally name a crew name or salty mail for them to use.",
|
||||
"inviteUsernameLabel": "Crew Name (optional)",
|
||||
"inviteUsernameFormat": "Must be 5 or more marks",
|
||||
"inviteUsernamePlaceholder": "myScallywagName",
|
||||
"inviteEmailLabel": "Salty mail address (optional)",
|
||||
"inviteEmailDescription": "Must be in the fashion of a scallywag {'@'} example.com",
|
||||
"inviteEmailPlaceholder": "me{'@'}example.com",
|
||||
"inviteAdminSwitchLabel": "Cap'n's invitation",
|
||||
"inviteAdminSwitchDescription": "Make this crewman a cap'n, argh!",
|
||||
"inviteExpiryLabel": "Expires",
|
||||
"inviteButton": "Invite, ye dog!",
|
||||
"invite3Days": "3 suns",
|
||||
"inviteWeek": "1 week",
|
||||
"inviteMonth": "1 moon",
|
||||
"invite6Months": "6 moons",
|
||||
"inviteYear": "1 year",
|
||||
"inviteNever": "Never"
|
||||
}
|
||||
}
|
||||
},
|
||||
"library": {
|
||||
"addGames": "All Plunder",
|
||||
"addToLib": "Add to Yer Treasure Hoard",
|
||||
"admin": {
|
||||
"detectedGame": "Drop has found new plunder to import, argh!",
|
||||
"detectedVersion": "Drop has found new versions of this plunder to import, savvy!",
|
||||
"gameLibrary": "Game Treasure Hoard",
|
||||
"import": {
|
||||
"import": "Import, ye dog!",
|
||||
"link": "Import {arrow}",
|
||||
"loading": "Loadin' plunder results, arrr...",
|
||||
"search": "Search",
|
||||
"searchPlaceholder": "Fallout 4, savvy?",
|
||||
"selectDir": "Pick a directory, ye landlubber...",
|
||||
"selectGame": "Pick plunder to import",
|
||||
"selectGamePlaceholder": "Pick a game, ye dog...",
|
||||
"selectGameSearch": "Pick game",
|
||||
"selectPlatform": "Pick a ship, ye scallywag...",
|
||||
"version": {
|
||||
"advancedOptions": "Advanced options, savvy?",
|
||||
"import": "Import version",
|
||||
"installDir": "(install_dir)/",
|
||||
"launchCmd": "Launch executable/command, argh!",
|
||||
"launchDesc": "Executable to launch the game, matey!",
|
||||
"launchPlaceholder": "game.exe, aye!",
|
||||
"loadingVersion": "Loading version charts...",
|
||||
"noAdv": "No advanced options for this rig, argh.",
|
||||
"noVersions": "No versions to import, savvy!",
|
||||
"platform": "Ship type",
|
||||
"setupCmd": "Setup executable/command",
|
||||
"setupDesc": "Ran once when the game is installed, ye hear!",
|
||||
"setupMode": "Setup mode, savvy?",
|
||||
"setupModeDesc": "When enabled, this version has no launch command, and merely runs the executable on the crew's computer. Useful for games that only give installers and not portable files, argh!",
|
||||
"setupPlaceholder": "setup.exe, aye!",
|
||||
"umuLauncherId": "UMU Launcher ID",
|
||||
"umuOverride": "Override UMU Launcher Game ID",
|
||||
"umuOverrideDesc": "By default, Drop uses a non-ID when launchin' with UMU Launcher. To get the right patches for some games, ye might have to set this field by hand, savvy.",
|
||||
"updateMode": "Update mode, argh!",
|
||||
"updateModeDesc": "When enabled, these files will be installed atop (overwritin') the previous version's. If many 'update modes' be chained together, they be applied in order, ye hear!",
|
||||
"version": "Pick version to import"
|
||||
},
|
||||
"withoutMetadata": "Import without charts"
|
||||
},
|
||||
"metadataProvider": "Charts Provider",
|
||||
"noGames": "No plunder imported, savvy!",
|
||||
"openEditor": "Open in Editor {arrow}",
|
||||
"openStore": "Open in Store, argh!",
|
||||
"shortDesc": "Short Description",
|
||||
"version": {
|
||||
"noVersions": "Ye have no versions of this plunder available, ye dog!",
|
||||
"noVersionsAdded": "no versions added, argh!",
|
||||
"delta": "Upgrade mode"
|
||||
},
|
||||
"game": {
|
||||
"imageCarousel": "Image Carousel",
|
||||
"imageCarouselDescription": "Customize what images and what order be shown on the store page, savvy.",
|
||||
"addImageCarousel": "Add from image treasure hoard",
|
||||
"imageCarouselEmpty": "No images added to the carousel yet, argh.",
|
||||
"removeImageCarousel": "Remove image",
|
||||
"addCarouselNoImages": "No images to add, ye dog.",
|
||||
"imageLibrary": "Image treasure hoard",
|
||||
"imageLibraryDescription": "Please note all images hoisted be accessible to all crew through browser dev-tools, savvy.",
|
||||
"setBanner": "Set as banner",
|
||||
"setCover": "Set as cover",
|
||||
"deleteImage": "Scuttle image",
|
||||
"currentBanner": "banner",
|
||||
"currentCover": "cover",
|
||||
"addDescriptionNoImages": "No images to add, argh.",
|
||||
"editGameName": "Plunder Name",
|
||||
"editGameDescription": "Plunder Description"
|
||||
},
|
||||
"sources": {
|
||||
"create": "Forge source",
|
||||
"createDesc": "Drop will use this source to get to yer game treasure hoard, and make 'em available, argh.",
|
||||
"desc": "Rig yer treasure hoard sources, where Drop will look for new plunder and versions to import, savvy.",
|
||||
"fsDesc": "Imports games from a path on disk. Needs version-based folder structure, and backs archived games, ye hear!",
|
||||
"fsPath": "Path",
|
||||
"fsPathDesc": "An absolute path to yer game treasure hoard.",
|
||||
"fsPathPlaceholder": "/mnt/games, aye!",
|
||||
"link": "Sources {arrow}",
|
||||
"nameDesc": "The name of yer source, for yer own reckonin', argh.",
|
||||
"namePlaceholder": "My New Source, savvy?",
|
||||
"sources": "Treasure Hoard Sources",
|
||||
"typeDesc": "The type of yer source. Changes the demanded options, ye dog!",
|
||||
"working": "Workin', eh?"
|
||||
},
|
||||
"subheader": "As ye add folders to yer treasure hoard sources, Drop will find 'em and ask ye to import 'em. Each game needs to be imported before ye can import a version, savvy.",
|
||||
"title": "Treasure Hoards",
|
||||
"versionPriority": "Version priority"
|
||||
},
|
||||
"back": "Aft to Treasure Hoard",
|
||||
"collection": {
|
||||
"addToNew": "Add to new collection",
|
||||
"collections": "Collections",
|
||||
"create": "Forge Collection",
|
||||
"createDesc": "Collections can be used to sort yer plunder and find 'em easier, especially if ye have a grand treasure hoard, argh!",
|
||||
"delete": "Scuttle Collection",
|
||||
"namePlaceholder": "Collection name, matey!",
|
||||
"noCollections": "No collections, savvy!",
|
||||
"notFound": "Collection not found, argh!",
|
||||
"subheader": "Add a new collection to sort yer plunder",
|
||||
"title": "Collection"
|
||||
},
|
||||
"gameCount": "{0} plunder | {0} plunder | {0} plunder",
|
||||
"inLib": "In Treasure Hoard",
|
||||
"launcherOpen": "Open in Launcher, argh!",
|
||||
"noGames": "No plunder in treasure hoard, savvy!",
|
||||
"notFound": "Plunder not found, matey!",
|
||||
"search": "Search treasure hoard, ye dog...",
|
||||
"subheader": "Sort yer plunder into collections for easy access, and get to all yer plunder, savvy!"
|
||||
},
|
||||
"tasks": {
|
||||
"admin": {
|
||||
"scheduled": {
|
||||
"cleanupInvitationsName": "Clean up invitations",
|
||||
"cleanupInvitationsDescription": "Cleans up expired invitations from the logbook to save space, savvy.",
|
||||
"cleanupObjectsName": "Clean up objects",
|
||||
"cleanupObjectsDescription": "Finds and scuttles unreferenced and unused objects to save space, argh.",
|
||||
"cleanupSessionsName": "Clean up sessions.",
|
||||
"cleanupSessionsDescription": "Cleans up expired sessions to save space and keep ye safe, ye dog!",
|
||||
"checkUpdateName": "Check for new charts.",
|
||||
"checkUpdateDescription": "Check if Drop has new charts."
|
||||
},
|
||||
"runningTasksTitle": "Duties underway",
|
||||
"noTasksRunning": "No duties currently underway",
|
||||
"completedTasksTitle": "Duties completed",
|
||||
"dailyScheduledTitle": "Daily scheduled duties",
|
||||
"viewTask": "View {arrow}",
|
||||
"back": "{arrow} Aft to Duties"
|
||||
}
|
||||
},
|
||||
"lowest": "lowest",
|
||||
"name": "Name, argh!",
|
||||
"news": {
|
||||
"article": {
|
||||
"add": "Add, ye dog!",
|
||||
"content": "Content (Markdown), savvy!",
|
||||
"create": "Forge New Article",
|
||||
"editor": "Editor",
|
||||
"editorGuide": "Use the quick ways above or scribble Markdown directly. Backs **bold**, *italic*, [links](url), and more, argh!",
|
||||
"new": "New article, savvy!",
|
||||
"preview": "Preview, matey!",
|
||||
"shortDesc": "Short description",
|
||||
"submit": "Submit, ye scurvy dog!",
|
||||
"tagPlaceholder": "Add a mark, ye dog...",
|
||||
"titles": "Title, argh!",
|
||||
"uploadCover": "Hoist cover image"
|
||||
},
|
||||
"back": "Aft to News",
|
||||
"checkLater": "Check back later for new charts, matey!",
|
||||
"delete": "Scuttle Article",
|
||||
"filter": {
|
||||
"all": "All time, savvy!",
|
||||
"month": "This moon",
|
||||
"week": "This week",
|
||||
"year": "This year, argh!"
|
||||
},
|
||||
"none": "No articles, savvy!",
|
||||
"notFound": "Article not found, matey!",
|
||||
"search": "Search articles, ye dog!",
|
||||
"searchPlaceholder": "Search articles, argh...",
|
||||
"subheader": "Stay up to date with the latest charts and announcements, savvy!",
|
||||
"title": "Latest News from the High Seas"
|
||||
},
|
||||
"options": "Options, matey!",
|
||||
"save": "Stow it!",
|
||||
"add": "Add",
|
||||
"insert": "Insert",
|
||||
"security": "Safety",
|
||||
"settings": "Settings",
|
||||
"store": {
|
||||
"commingSoon": "comin' soon, argh!",
|
||||
"exploreMore": "Explore more {arrow}, ye dog!",
|
||||
"images": "Plunder Images",
|
||||
"lookAt": "Look at it, ye scurvy dog!",
|
||||
"noGame": "no plunder",
|
||||
"noImages": "No images, savvy!",
|
||||
"openAdminDashboard": "Open in Cap'n's Quarters",
|
||||
"platform": "Ship | Ship | Ships",
|
||||
"rating": "Rating, argh!",
|
||||
"readLess": "Click to read less, matey!",
|
||||
"readMore": "Click to read more, ye dog!",
|
||||
"recentlyAdded": "Recently Added Plunder",
|
||||
"recentlyReleased": "Recently set sail",
|
||||
"recentlyUpdated": "Recently Updated",
|
||||
"released": "Released, argh!",
|
||||
"reviews": "({0} Sea Tales)",
|
||||
"title": "Store",
|
||||
"view": "View in Store"
|
||||
},
|
||||
"type": "Type",
|
||||
"upload": "Hoist!",
|
||||
"uploadFile": "Hoist file",
|
||||
"userHeader": {
|
||||
"closeSidebar": "Close side-hatch!",
|
||||
"links": {
|
||||
"community": "Shipmates",
|
||||
"library": "Treasure Hoard",
|
||||
"news": "News from the High Seas"
|
||||
},
|
||||
"profile": {
|
||||
"admin": "Cap'n's Quarters",
|
||||
"settings": "Account settings, savvy!"
|
||||
}
|
||||
},
|
||||
"todo": "Todo, argh!",
|
||||
"selectLanguage": "Pick yer tongue",
|
||||
"helpUsTranslate": "Help us translate Drop {arrow}, argh!",
|
||||
"welcome": "Ahoy, Welcome!"
|
||||
}
|
||||
|
||||
@ -502,5 +502,7 @@
|
||||
}
|
||||
},
|
||||
"todo": "Todo",
|
||||
"selectLanguage": "Select language",
|
||||
"helpUsTranslate": "Help us translate Drop {arrow}",
|
||||
"welcome": "American, Welcome!"
|
||||
}
|
||||
|
||||
@ -1,9 +1,5 @@
|
||||
<template>
|
||||
<div class="w-full flex flex-col overflow-x-hidden">
|
||||
<DevOnly
|
||||
><h1 class="text-gray-100">{{ $t("welcome") }}</h1>
|
||||
</DevOnly>
|
||||
|
||||
<!-- Hero section -->
|
||||
<VueCarousel
|
||||
v-if="recent.length > 0"
|
||||
|
||||
Reference in New Issue
Block a user