feat: i18n web components

This commit is contained in:
Zack Spear
2023-08-01 14:32:46 -07:00
parent 2e39a5bceb
commit 0e2d535f96
20 changed files with 878 additions and 225 deletions

25
.vscode/i18n-ally-reviews.yml vendored Normal file
View File

@@ -0,0 +1,25 @@
# Review comments generated by i18n-ally. Please commit this file.
reviews:
A Trial key provides all the functionality of a Pro Registration key.__i18n_ally_root__:
locales:
en:
comments:
- user:
name: Zack Spear
email: hi@zackspear.com
id: fQUUi06la1A14pi2N_NaC
comment: ''
suggestion: ''
type: approve
time: '2023-08-01T19:50:10.287Z'
ja:
comments:
- user:
name: Zack Spear
email: hi@zackspear.com
id: sql4zp9G9ouToZg6V9_Eb
comment: ''
suggestion: ''
type: approve
time: '2023-08-01T19:50:23.907Z'

View File

@@ -22,5 +22,9 @@
"titleBar.inactiveBackground": "#5f606399",
"titleBar.inactiveForeground": "#e7e7e799"
},
"peacock.color": "#5f6063"
"peacock.color": "#5f6063",
"i18n-ally.localesPaths": [
"locales"
],
"i18n-ally.keystyle": "flat"
}

View File

@@ -29,7 +29,7 @@ const randomGuid = `1111-1111-${makeid(4)}-123412341234`; // this guid is regist
// EBLACKLISTED1
// EBLACKLISTED2
// ENOCONN
const state: ServerState = 'BASIC';
const state: ServerState = 'EGUID';
const uptime = Date.now() - 60 * 60 * 1000; // 1 hour ago
let expireTime = 0;
@@ -54,10 +54,10 @@ export const serverState: Server = {
// keyfile: 'DUMMY_KEYFILE',
lanIp: '192.168.254.36',
license: '',
locale: 'en_US',
locale: 'en_US', // en_US, ja
name: 'fuji',
connectPluginInstalled: 'dynamix.unraid.net.staging.plg',
// connectPluginInstalled: '',
// connectPluginInstalled: 'dynamix.unraid.net.staging.plg',
connectPluginInstalled: '',
registered: false,
regGen: 0,
// "regGuid": "0781-5583-8355-81071A2B0211",

View File

@@ -1,10 +1,13 @@
<script lang="ts" setup>
import { storeToRefs } from 'pinia';
import { useI18n } from 'vue-i18n';
import { useServerStore } from '~/store/server';
import 'tailwindcss/tailwind.css';
import '~/assets/main.css';
const { t } = useI18n();
const serverStore = useServerStore();
const { authAction, stateData } = storeToRefs(serverStore);
</script>
@@ -12,14 +15,14 @@ const { authAction, stateData } = storeToRefs(serverStore);
<template>
<div class="whitespace-normal flex flex-col gap-y-16px max-w-3xl">
<span v-if="stateData.error" class="text-unraid-red font-semibold leading-8">
<h3 class="text-14px mb-8px">{{ stateData.heading }}</h3>
<h3 class="text-14px mb-8px">{{ t(stateData.heading) }}</h3>
<span v-html="stateData.message" />
</span>
<span>
<BrandButton
v-if="authAction"
:icon="authAction.icon"
:text="authAction.text"
:text="t(authAction.text)"
@click="authAction.click()"
/>
</span>

View File

@@ -1,11 +1,15 @@
<script setup lang="ts">
import { storeToRefs } from 'pinia';
import { ArrowDownTrayIcon, ArrowTopRightOnSquareIcon } from '@heroicons/vue/24/solid';
import { useI18n } from 'vue-i18n';
import { DEV_GRAPH_URL, CONNECT_FORUMS, CONTACT, DISCORD } from '~/helpers/urls';
import { useServerStore } from '~/store/server';
import 'tailwindcss/tailwind.css';
import '~/assets/main.css';
const { t } = useI18n();
const { apiKey } = storeToRefs(useServerStore());
const downloadUrl = computed(() => new URL(`/graphql/api/logs?apiKey=${apiKey.value}`, DEV_GRAPH_URL || window.location.origin));
@@ -14,7 +18,9 @@ const downloadUrl = computed(() => new URL(`/graphql/api/logs?apiKey=${apiKey.va
<template>
<div class="whitespace-normal flex flex-col gap-y-16px max-w-3xl">
<span class="leading-8">
The primary method of support for Unraid Connect is through our forums and Discord. If you are asked to supply logs, please open a support request on our Contact Page and reply to the email message you receive with your logs attached. The logs may contain sensitive information so do not post them publicly.
{{ t('The primary method of support for Unraid Connect is through our forums and Discord.') }}
{{ t('If you are asked to supply logs, please open a support request on our Contact Page and reply to the email message you receive with your logs attached.') }}
{{ t('The logs may contain sensitive information so do not post them publicly.') }}
</span>
<span class="flex flex-col gap-y-16px">
<div class="flex">
@@ -24,21 +30,21 @@ const downloadUrl = computed(() => new URL(`/graphql/api/logs?apiKey=${apiKey.va
:external="true"
:href="downloadUrl.toString()"
:icon="ArrowDownTrayIcon"
:text="'Download unraid-api Logs'"
:text="t('Download unraid-api Logs')"
/>
</div>
<div class="flex flex-row items-baseline gap-8px">
<a :href="CONNECT_FORUMS" target="_blank" rel="noopener noreferrer" class="text-[#486dba] hover:text-[#3b5ea9] focus:text-[#3b5ea9] hover:underline focus:underline inline-flex flex-row items-center justify-start gap-8px">
Unraid Connect Forums
{{ t('Unraid Connect Forums') }}
<ArrowTopRightOnSquareIcon class="w-16px" />
</a>
<a :href="DISCORD" target="_blank" rel="noopener noreferrer" class="text-[#486dba] hover:text-[#3b5ea9] focus:text-[#3b5ea9] hover:underline focus:underline inline-flex flex-row items-center justify-start gap-8px">
Unraid Discord
{{ t('Unraid Discord') }}
<ArrowTopRightOnSquareIcon class="w-16px" />
</a>
<a :href="CONTACT" target="_blank" rel="noopener noreferrer" class="text-[#486dba] hover:text-[#3b5ea9] focus:text-[#3b5ea9] hover:underline focus:underline inline-flex flex-row items-center justify-start gap-8px">
Unraid Contact Page
{{ t('Unraid Contact Page') }}
<ArrowTopRightOnSquareIcon class="w-16px" />
</a>
</div>

View File

@@ -2,38 +2,31 @@
import { provide } from 'vue';
import { createI18n, I18nInjectionKey } from 'vue-i18n';
/**
* Define the web components that host the i18n instance.
*
* Because the web components environment isn't hosted in a Vue apps by `createApp`, but is provided by itself.
* The i18n instance created by `createI18n` will be installed with `app.use` in Vue apps,
* so that you can use i18n features with `useI18n` in Vue components.
* In order to use `useI18n` in web components, you need to have web components hosted as root to use it.
*/
import en_US from '~/locales/en_US.json'; // eslint-disable-line camelcase
import ja from '~/locales/ja.json';
/**
* create an i18n instance to host for other web components
*/
const defaultLocale = 'ja'; // ja, en_US
const i18n = createI18n<false>({
legacy: false, // must set to `false`
locale: 'en',
locale: defaultLocale,
messages: {
en: {
hello: 'Hello!'
},
ja: {
hello: 'こんにちは!'
}
en_US, // eslint-disable-line camelcase
ja,
}
});
/**
* provide i18n instance with `I18nInjectionKey` for other web components
*/
provide(I18nInjectionKey, i18n);
// watchEffect(() => {
// i18n.global.locale.value = props.locale;
// });
export interface Props {
locale?: string;
}
const props = withDefaults(defineProps<Props>(), {
locale: defaultLocale,
});
watchEffect(() => {
i18n.global.locale.value = props.locale;
});
</script>
<template>

View File

@@ -1,9 +1,12 @@
<script lang="ts" setup>
import { storeToRefs } from 'pinia';
import { useI18n } from 'vue-i18n';
import { useServerStore } from '~/store/server';
import 'tailwindcss/tailwind.css';
import '~/assets/main.css';
const { t } = useI18n();
const { keyActions } = storeToRefs(useServerStore());
</script>
@@ -12,11 +15,11 @@ const { keyActions } = storeToRefs(useServerStore());
<li v-for="action in keyActions" :key="action.name">
<BrandButton
class="w-full max-w-300px"
@click="action.click()"
:external="action?.external"
:href="action?.href"
:icon="action.icon"
:text="action.text"
:text="t(action.text)"
@click="action.click()"
/>
</li>
</ul>

View File

@@ -10,14 +10,17 @@ export interface Props {
open?: boolean;
showCloseX?: boolean;
success?: boolean;
t: any;
title?: string;
}
const props = withDefaults(defineProps<Props>(), {
description: '',
error: false,
maxWidth: 'sm:max-w-lg',
open: false,
showCloseX: false,
success: false,
title: '',
});
watchEffect(() => {
// toggle body scrollability
@@ -63,7 +66,7 @@ const ariaLablledById = computed((): string|undefined => props.title ? `ModalTit
>
<div
class="fixed inset-0 z-0 bg-black bg-opacity-80 transition-opacity"
title="Click to close modal"
:title="t('Click to close modal')"
@click="closeModal"
/>
</TransitionChild>
@@ -89,7 +92,7 @@ const ariaLablledById = computed((): string|undefined => props.title ? `ModalTit
>
<div v-if="showCloseX" class="absolute z-20 right-0 top-0 hidden pt-2 pr-2 sm:block">
<button type="button" class="rounded-md text-beta bg-alpha p-2 hover:text-white focus:text-white hover:bg-unraid-red focus:bg-unraid-red focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2" @click="closeModal">
<span class="sr-only">Close</span>
<span class="sr-only">{{ t('Close') }}</span>
<XMarkIcon class="h-6 w-6" aria-hidden="true" />
</button>
</div>

View File

@@ -1,5 +1,7 @@
<script setup lang="ts">
import { storeToRefs } from 'pinia';
import { useI18n } from 'vue-i18n';
import 'tailwindcss/tailwind.css';
import '~/assets/main.css';
@@ -7,6 +9,8 @@ import { useCallbackActionsStore } from '~/store/callbackActions';
import { usePromoStore } from '~/store/promo';
import { useTrialStore } from '~/store/trial';
const { t } = useI18n();
const { callbackStatus } = storeToRefs(useCallbackActionsStore());
const { promoVisible } = storeToRefs(usePromoStore());
const { trialModalVisible } = storeToRefs(useTrialStore());
@@ -14,9 +18,9 @@ const { trialModalVisible } = storeToRefs(useTrialStore());
<template>
<div class="relative z-[99999]">
<UpcCallbackFeedback :open="callbackStatus !== 'ready'" />
<UpcPromo :open="promoVisible" />
<UpcTrial :open="trialModalVisible" />
<UpcCallbackFeedback :t="t" :open="callbackStatus !== 'ready'" />
<UpcPromo :t="t" :open="promoVisible" />
<UpcTrial :t="t" :open="trialModalVisible" />
</div>
</template>
@@ -24,69 +28,4 @@ const { trialModalVisible } = storeToRefs(useTrialStore());
@tailwind base;
@tailwind components;
@tailwind utilities;
.DropdownWrapper_blip {
box-shadow: var(--ring-offset-shadow), var(--ring-shadow), var(--shadow-beta);
&::before {
@apply absolute z-20 block;
content: '';
width: 0;
height: 0;
top: -10px;
right: 42px;
border-right: 11px solid transparent;
border-bottom: 11px solid var(--color-alpha);
border-left: 11px solid transparent;
}
}
.unraid_mark_2,
.unraid_mark_4 {
animation: mark_2 1.5s ease infinite;
}
.unraid_mark_3 {
animation: mark_3 1.5s ease infinite;
}
.unraid_mark_6,
.unraid_mark_8 {
animation: mark_6 1.5s ease infinite;
}
.unraid_mark_7 {
animation: mark_7 1.5s ease infinite;
}
@keyframes mark_2 {
50% {
transform: translateY(-40px);
}
100% {
transform: translateY(0);
}
}
@keyframes mark_3 {
50% {
transform: translateY(-62px);
}
100% {
transform: translateY(0);
}
}
@keyframes mark_6 {
50% {
transform: translateY(40px);
}
100% {
transform: translateY(0);
}
}
@keyframes mark_7 {
50% {
transform: translateY(62px);
}
100% {
transform: translateY(0);
}
}
</style>

View File

@@ -12,7 +12,7 @@ import 'tailwindcss/tailwind.css';
import '~/assets/main.css';
export interface Props {
server?: Server;
server?: Server | string;
}
const props = defineProps<Props>();
@@ -95,19 +95,18 @@ const { t } = useI18n();
<div class="relative z-10 flex flex-row items-center justify-end gap-x-16px h-full">
<h1 class="text-alpha text-14px sm:text-18px relative flex flex-col-reverse items-end md:flex-row border-t-0 border-r-0 border-l-0 border-b-2 border-transparent">
<template v-if="description && theme?.descriptionShow">
<!-- <span class="text-right text-12px sm:text-18px hidden 2xs:block">{{ description }}</span> -->
<span class="text-right text-12px sm:text-18px hidden 2xs:block">{{ t('hello') }}</span>
<span class="text-right text-12px sm:text-18px hidden 2xs:block">{{ description }}</span>
<span class="text-gamma hidden md:inline-block px-8px">&bull;</span>
</template>
<button :title="`Click to Copy LAN IP ${lanIp}`" @click="copyLanIp()">
<button :title="t('Click to Copy LAN IP %{ip}', { ip: lanIp })" @click="copyLanIp()">
{{ name }}
</button>
<span
v-show="copied || showCopyNotSupported"
class="text-white text-12px leading-none py-4px px-8px absolute right-0 bg-gradient-to-r from-unraid-red to-orange text-center block rounded"
>
<template v-if="copied">{{ 'LAN IP Copied' }}</template>
<template v-else>LAN IP: <span class="select-all">{{ lanIp }}</span></template>
<template v-if="copied">{{ t('LAN IP Copied') }}</template>
<template v-else>{{ t('LAN IP %{ip}', { ip: lanIp }) }}</template>
</span>
</h1>

View File

@@ -13,9 +13,10 @@ import { useServerStore } from '~/store/server';
export interface Props {
open?: boolean;
t: any;
}
withDefaults(defineProps<Props>(), {
const props = withDefaults(defineProps<Props>(), {
open: false,
});
@@ -64,33 +65,33 @@ const showSignInCta = computed(() => connectPluginInstalled.value && !registered
const heading = computed(() => {
switch (callbackStatus.value) {
case 'error':
return 'Error';
return props.t('Error');
case 'loading':
return 'Performing actions';
return props.t('Performing actions');
case 'success':
return 'Success!';
return props.t('Success!');
}
});
const subheading = computed(() => {
if (callbackStatus.value === 'error') {
return 'Something went wrong'; /** @todo show actual error messages */
return props.t('Something went wrong'); /** @todo show actual error messages */
}
if (callbackStatus.value === 'loading') { return 'Please keep this window open while we perform some actions'; }
if (callbackStatus.value === 'loading') { return props.t('Please keep this window open while we perform some actions'); }
if (callbackStatus.value === 'success') {
if (accountActionType.value === 'signIn') { return 'You\'re one step closer to enhancing your Unraid experience'; }
if (keyActionType.value === 'purchase') { return `Thank you for purchasing an Unraid ${keyType.value} Key!`; }
if (keyActionType.value === 'replace') { return `Your ${keyType.value} Key has been replaced!`; }
if (keyActionType.value === 'trialExtend') { return 'Your Trial key has been extended!'; }
if (keyActionType.value === 'trialStart') { return 'Your free Trial key provides all the functionality of a Pro Registration key'; }
if (keyActionType.value === 'upgrade') { return `Thank you for upgrading to an Unraid ${keyType.value} Key!`; }
if (accountActionType.value === 'signIn') { return props.t('You\'re one step closer to enhancing your Unraid experience'); }
if (keyActionType.value === 'purchase') { return props.t('Thank you for purchasing an Unraid %{keyType} Key!', { keyType: keyType.value }); }
if (keyActionType.value === 'replace') { return props.t('Your %{keyType} Key has been replaced!', { keyType: keyType.value }); }
if (keyActionType.value === 'trialExtend') { return props.t('Your Trial key has been extended!'); }
if (keyActionType.value === 'trialStart') { return props.t('Your free Trial key provides all the functionality of a Pro Registration key'); }
if (keyActionType.value === 'upgrade') { return props.t('Thank you for upgrading to an Unraid %{keyType} Key!', { keyType: keyType.value }); }
return '';
}
return '';
});
const closeText = computed(() => {
const txt = !connectPluginInstalled.value ? 'No Thanks' : 'Close';
return refreshServerStateStatus.value === 'done' ? txt : 'Reload';
const txt = !connectPluginInstalled.value ? props.t('No thanks') : props.t('Close');
return refreshServerStateStatus.value === 'done' ? txt : props.t('Reload');
});
const close = () => {
if (callbackStatus.value === 'loading') { return console.debug('[close] not allowed'); }
@@ -104,11 +105,12 @@ const promoClick = () => {
close();
};
const { text, copy, copied, isSupported } = useClipboard({ source: keyUrl.value });
const { copy, copied, isSupported } = useClipboard({ source: keyUrl.value });
</script>
<template>
<Modal
:t="t"
:title="heading"
:description="subheading"
:open="open"
@@ -137,14 +139,14 @@ const { text, copy, copied, isSupported } = useClipboard({ source: keyUrl.value
<div v-if="isSupported" class="flex justify-center">
<BrandButton
:icon="ClipboardIcon"
:text="copied ? 'Copied' : 'Copy Key URL'"
:text="copied ? t('Copied') : t('Copy Key URL')"
@click="copy(keyUrl)"
/>
</div>
<p v-else>
{{ 'Copy your Key URL' }}: {{ keyUrl }}
{{ t('Copy your Key URL: %{keyUrl}', { keyUrl }) }}
</p>
<p><a href="/Tools/Registration" class="opacity-75 hover:opacity-100 focus:opacity-100 underline transition">{{ 'Then go to Tools > Registration to manually install it' }}</a></p>
<p><a href="/Tools/Registration" class="opacity-75 hover:opacity-100 focus:opacity-100 underline transition">{{ t('Then go to Tools > Registration to manually install it') }}</a></p>
</template>
</UpcCallbackFeedbackStatus>
@@ -158,13 +160,13 @@ const { text, copy, copied, isSupported } = useClipboard({ source: keyUrl.value
<UpcCallbackFeedbackStatus
v-if="showPromoCta"
:icon="InformationCircleIcon"
:text="'Enhance your experience with Unraid Connect'"
:text="t('Enhance your experience with Unraid Connect')"
/>
<UpcCallbackFeedbackStatus
v-if="showSignInCta"
:icon="InformationCircleIcon"
:text="'Sign In to utilize Unraid Connect'"
:text="t('Sign In to utilize Unraid Connect')"
/>
</div>
</template>
@@ -175,7 +177,7 @@ const { text, copy, copied, isSupported } = useClipboard({ source: keyUrl.value
<BrandButton
v-if="isSettingsPage"
:icon="CogIcon"
:text="'Configure Connect Features'"
:text="t('Configure Connect Features')"
class="grow-0"
@click="close"
/>
@@ -183,14 +185,14 @@ const { text, copy, copied, isSupported } = useClipboard({ source: keyUrl.value
v-else
:href="PLUGIN_SETTINGS"
:icon="CogIcon"
:text="'Configure Connect Features'"
:text="t('Configure Connect Features')"
class="grow-0"
/>
</template>
<BrandButton
v-if="showPromoCta"
:text="'Learn More'"
:text="t('Learn More')"
@click="promoClick"
/>
@@ -198,7 +200,7 @@ const { text, copy, copied, isSupported } = useClipboard({ source: keyUrl.value
v-if="showSignInCta"
:external="authAction?.external"
:icon="authAction?.icon"
:text="authAction?.text"
:text="t(authAction?.text)"
@click="authAction?.click"
/>

View File

@@ -3,6 +3,8 @@
* @todo future idea turn this into a carousel. each feature could have a short video if we ever them
*/
import { Switch, SwitchGroup, SwitchLabel } from '@headlessui/vue';
import { ArrowTopRightOnSquareIcon } from '@heroicons/vue/24/solid';
import useInstallPlugin from '~/composables/installPlugin';
import { usePromoStore } from '~/store/promo';
import type { UserProfilePromoFeature } from '~/types/userProfile';
@@ -11,6 +13,7 @@ import '~/assets/main.css';
export interface Props {
open?: boolean;
t: any;
}
withDefaults(defineProps<Props>(), {
@@ -56,18 +59,17 @@ const features = ref<UserProfilePromoFeature[]>([
const staging = ref(false);
const { install } = useInstallPlugin();
const installButtonClasses = 'text-white text-14px text-center w-full flex flex-row items-center justify-center gap-x-8px px-8px py-8px cursor-pointer rounded-md bg-gradient-to-r from-unraid-red to-orange hover:from-unraid-red/60 hover:to-orange/60 focus:from-unraid-red/60 focus:to-orange/60';
</script>
<template>
<Modal
title="Introducing Unraid Connect"
description="Enhance your Unraid experience"
:t="t"
:title="t('Introducing Unraid Connect')"
:description="t('Enhance your Unraid experience')"
:open="open"
@close="promoStore.promoHide()"
:show-close-x="true"
max-width="max-w-800px"
@close="promoStore.promoHide()"
>
<template #headerTitle>
<span><UpcBeta class="relative -top-1" /></span>
@@ -79,8 +81,8 @@ const installButtonClasses = 'text-white text-14px text-center w-full flex flex-
<UpcPromoFeature
v-for="(feature, index) in features"
:key="index"
:title="feature.title"
:copy="feature.copy"
:title="t(feature.title)"
:copy="t(feature.copy)"
/>
</div>
</div>
@@ -91,27 +93,35 @@ const installButtonClasses = 'text-white text-14px text-center w-full flex flex-
<!-- v-if="devEnv" -->
<SwitchGroup as="div" class="flex items-center justify-center">
<Switch v-model="staging" :class="[staging ? 'bg-indigo-600' : 'bg-gray-200', 'relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-indigo-600 focus:ring-offset-2']">
<span aria-hidden="true" :class="[staging ? 'translate-x-5' : 'translate-x-0', 'pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out']" />
<span aria-hidden="true" :class="[staging ? 't-x-5' : 't-x-0', 'pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out']" />
</Switch>
<SwitchLabel as="span" class="ml-3 text-12px">
<span class="font-semibold">Install Staging</span>
</SwitchLabel>
</SwitchGroup>
<button @click="install({ staging, update: false })" :class="installButtonClasses">{{ staging ? 'Install Connect Staging' : 'Install Connect' }}</button>
<button
class="text-white text-14px text-center w-full flex flex-row items-center justify-center gap-x-8px px-8px py-8px cursor-pointer rounded-md bg-gradient-to-r from-unraid-red to-orange hover:from-unraid-red/60 hover:to-orange/60 focus:from-unraid-red/60 focus:to-orange/60"
@click="install({ staging, update: false })"
>
{{ staging ? 'Install Connect Staging' : t('Install Connect') }}
</button>
<div>
<a
href="https://docs.unraid.net/category/unraid-connect"
class="text-12px tracking-wide inline-block mx-8px opacity-60 hover:opacity-100 focus:opacity-100 underline transition"
class="text-12px tracking-wide inline-flex flex-row items-center justify-start gap-8px mx-8px opacity-60 hover:opacity-100 focus:opacity-100 underline transition"
target="_blank"
rel="noopener noreferrer"
:title="'Checkout the Connect Documentation'"
>{{ 'Learn More' }}</a>
<button
@click="promoStore.promoHide()"
class="text-12px tracking-wide inline-block mx-8px opacity-60 hover:opacity-100 focus:opacity-100 underline transition"
:title="'Close Promo'"
:title="t('Checkout the Connect Documentation')"
>
{{ 'No thanks' }}
{{ t('Learn More') }}
<ArrowTopRightOnSquareIcon class="w-16px" />
</a>
<button
class="text-12px tracking-wide inline-block mx-8px opacity-60 hover:opacity-100 focus:opacity-100 underline transition"
:title="t('Close')"
@click="promoStore.promoHide()"
>
{{ t('No thanks') }}
</button>
</div>
</div>

View File

@@ -1,9 +1,10 @@
<script lang="ts" setup>
import { storeToRefs } from "pinia";
import { useTrialStore } from "~/store/trial";
import { storeToRefs } from 'pinia';
import { useTrialStore } from '~/store/trial';
export interface Props {
open?: boolean;
t: any;
}
withDefaults(defineProps<Props>(), {
@@ -14,19 +15,20 @@ const trialStore = useTrialStore();
const { trialModalLoading, trialStatus, trialStatusCopy } = storeToRefs(trialStore);
const close = () => {
if (trialStatus.value === 'trialStart') return console.debug("[close] not allowed");
if (trialStatus.value === 'trialStart') { return console.debug('[close] not allowed'); }
trialStore.setTrialStatus('ready');
};
</script>
<template>
<Modal
@close="close"
:t="t"
:open="open"
:title="trialStatusCopy?.heading"
:description="trialStatusCopy?.subheading"
:show-close-x="!trialModalLoading"
max-width="max-w-640px"
@close="close"
>
<template #main>
<BrandLoading v-if="trialModalLoading" class="w-[150px] mx-auto my-24px" />
@@ -36,11 +38,11 @@ const close = () => {
<div class="w-full max-w-xs flex flex-col items-center gap-y-16px mx-auto">
<div>
<button
@click="close"
class="text-12px tracking-wide inline-block mx-8px opacity-60 hover:opacity-100 focus:opacity-100 underline transition"
:title="'Close Modal'"
:title="t('Close Modal')"
@click="close"
>
{{ "Close" }}
{{ t('Close') }}
</button>
</div>
</div>

View File

@@ -1,5 +1,7 @@
<script lang="ts" setup>
import { storeToRefs } from 'pinia';
import { useI18n } from 'vue-i18n';
import { request } from '~/composables/services/request';
import { useServerStore } from '~/store/server';
import 'tailwindcss/tailwind.css';
@@ -11,6 +13,8 @@ export interface Props {
const props = defineProps<Props>();
const { t } = useI18n();
const { isRemoteAccess } = storeToRefs(useServerStore());
const wanIp = ref<string | null>();
@@ -18,19 +22,18 @@ const fetchError = ref<any>();
const loading = ref(false);
const computedError = computed(() => {
if (!props.phpWanIp) return 'DNS issue, unable to resolve wanip4.unraid.net';
if (fetchError.value) return fetchError.value;
return;
if (!props.phpWanIp) { return t('DNS issue, unable to resolve wanip4.unraid.net'); }
if (fetchError.value) { return fetchError.value; }
});
onBeforeMount(() => {
wanIp.value = sessionStorage.getItem('unraidConnect_wanIp');
});
watch(wanIp, async () => {
console.debug('[watch] wanIp');
watchEffect(async () => {
// if we don't have a client WAN IP AND we have the server WAN IP then we fetch
if (!wanIp.value && props.phpWanIp) {
console.debug('[watch] wanIp');
loading.value = true;
const response = await request.url('https://wanip4.unraid.net/')
@@ -38,26 +41,30 @@ watch(wanIp, async () => {
.text();
if (response) {
console.debug('[watch] wanIp response', response);
loading.value = false;
wanIp.value = response as string; // response returns text nothing to traverse
// save in sessionStorage so we only make this request once per webGUI session
sessionStorage.setItem('unraidConnect_wanIp', wanIp.value);
} else {
loading.value = false;
fetchError.value = 'Unable to fetch client WAN IPv4';
fetchError.value = t('Unable to fetch client WAN IPv4');
}
}
});
</script>
<template>
<span v-if="loading" class="italic">{{ 'Checking WAN IPs' }}</span>
<span v-if="loading" class="italic">{{ t('Checking WAN IPs') }}</span>
<template v-else>
<span v-if="computedError" class="text-unraid-red font-semibold">{{ computedError }}</span>
<template v-else>
<span v-if="isRemoteAccess">{{ `Remark: your WAN IPv4 is ${wanIp}` }}</span>
<span v-else-if="phpWanIp === wanIp && !isRemoteAccess">{{ `Remark: your WAN IPv4 is ${wanIp}` }}</span>
<span v-else class="inline-block w-1/2 whitespace-normal">Remark: Unraid's WAN IPv4 <strong>{{ phpWanIp }}</strong> does not match your client's WAN IPv4 <strong>{{ wanIp }}</strong>. This may indicate a complex network that will not work with this Remote Access solution. Ignore this message if you are currently connected via Remote Access or VPN.</span>
<span v-if="isRemoteAccess || phpWanIp === wanIp && !isRemoteAccess">{{ t('Remark: your WAN IPv4 is %{ip}', { ip: wanIp }) }}</span>
<span v-else class="inline-block w-1/2 whitespace-normal">
{{ t("Remark: Unraid's WAN IPv4 %{phpWanIp} does not match your client's WAN IPv4 %{wanIp}.", { phpWanIp, wanIp }) }}
{{ t('This may indicate a complex network that will not work with this Remote Access solution.') }}
{{ t('Ignore this message if you are currently connected via Remote Access or VPN.') }}
</span>
</template>
</template>
</template>

217
locales/_template.json Normal file
View File

@@ -0,0 +1,217 @@
{
"LAN IP": "",
"LAN IP %{ip}": "",
"LAN IP Copied": "",
"Click to Copy LAN IP %{ip}": "",
"Trial Key Expired at %{time}": "",
"Trial Key Expires at %{time}": "",
"Trial Key Expired %{time}": "",
"Trial Key Expires in %{time}": "",
"Server Up Since %{time}": "",
"Uptime %{time}": "",
"year": "",
"month": "",
"day": "",
"hour": "",
"minute": "",
"second": "",
"ago": "",
"Purchase": "",
"Upgrade": "",
"Fix Error": "",
"Get Started": "",
"Trial Expired, see options below": "",
"Learn more about the error": "",
"Close Dropdown": "",
"Open Dropdown": "",
"Thank you for installing Connect!": "",
"Sign In to your Unraid.net account to get started": "",
"Go to Connect": "",
"Opens Connect in new tab": "",
"Manage Unraid.net Account": "",
"Manage Unraid.net Account in new tab": "",
"Settings": "",
"Go to Connect plugin settings": "",
"Enhance your Unraid experience with Connect": "",
"Beta": "",
"Loading": "",
"Restarting unraid-api…": "",
"unraid-api is offline": "",
"Introducing Unraid Connect": "",
"Enhance your Unraid experience": "",
"Connected": "",
"Dynamic Remote Access": "",
"Toggle on/off server accessibility with dynamic remote access.": "",
"Automatically turn on UPnP and open a random WAN port on your router at the click of a button and close off access in seconds.": "",
"Manage Your Server Within Connect": "",
"Servers equipped with a myunraid.net certificate can be managed directly from within the Connect web UI.": "",
"Manage multiple servers from your phone, tablet, laptop, or PC in the same browser window.": "",
"Deep Linking": "",
"The Connect dashboard links to relevant sections of the webgui, allowing quick access to those settings and server sections.": "",
"Online Flash Backup": "",
"Never ever be left without a backup of your config.": "",
"If you need to change flash drives, generate a backup from Connect and be up and running in minutes.": "",
"Real-time Monitoring": "",
"Get an overview of your server's state, storage space, apps and VMs status, and more.": "",
"Customizable Dashboard Tiles": "",
"Set custom server tiles how you like and automatically display your server's banner image on your Connect Dashboard.": "",
"License Management": "",
"Manage your license keys at any time via the My Keys section.": "",
"Plus more on the way": "",
"All you need is an active internet connection, an Unraid.net account, and the Connect plugin.": "",
"Get started by installing the plugin.": "",
"Checkout the Connect Documentation": "",
"No thanks": "",
"Learn more": "",
"Install Connect": "",
"Close Modal": "",
"Close": "",
"Reload": "",
"Unraid logo animating with a wave like effect": "",
"Click to close modal": "",
"Error": "",
"Performing actions": "",
"Success!": "",
"Something went wrong": "",
"Please keep this window open while we perform some actions": "",
"You're one step closer to enhancing your Unraid experience": "",
"Thank you for purchasing an Unraid %{keyType} Key!": "",
"Your %{keyType} Key has been replaced!": "",
"Your Trial key has been extended!": "",
"Copied": "",
"Copy Key URL": "",
"Copy your Key URL": "",
"Then go to Tools > Registration to manually install it": "",
"Enhance your experience with Unraid Connect": "",
"Configure Connect Features": "",
"The primary method of support for Unraid Connect is through our forums and Discord.": "",
"If you are asked to supply logs, please open a support request on our Contact Page and reply to the email message you receive with your logs attached.": "",
"The logs may contain sensitive information so do not post them publicly.": "",
"Download unraid-api Logs": "",
"Unraid Connect Forums": "",
"Unraid Discord": "",
"Unraid Contact Page": "",
"DNS issue, unable to resolve wanip4.unraid.net": "",
"Unable to fetch client WAN IPv4": "",
"Checking WAN IPs…": "",
"Remark: your WAN IPv4 is %{wanIp}": "",
"Remark: Unraid's WAN IPv4 %{phpWanIp} does not match your client's WAN IPv4 %{wanIp}.": "",
"This may indicate a complex network that will not work with this Remote Access solution.": "",
"Ignore this message if you are currently connected via Remote Access or VPN.": "",
"Ready to update Connect account configuration": "",
"Signing in %{username}…": "",
"Signing out %{username}…": "",
"%{username} Signed In Successfully": "",
"%{username} Signed Out Successfully": "",
"Sign In Failed": "",
"Sign Out Failed": "",
"Failed to update Connect account configuration": "",
"Callback redirect type not present or incorrect": "",
"Failed to install key": "",
"Ready to Install Key": "",
"Installing Extended Trial": "",
"Installing Recovered": "",
"Installing Replaced": "",
"%{txt1} %{keyType} Key…": "",
"%{keyType.value} Key %{txt2} Successfully": "",
"Failed to %{txt3} %{keyType.value} Key": "",
"Purchase Key": "",
"Upgrade Key": "",
"Recover Key": "",
"Redeem Activation Code": "",
"Replace Key": "",
"Sign In with Unraid.net Account": "",
"Sign Out of Unraid.net": "",
"Extend Trial": "",
"Start Free 30 Day Trial": "",
"Go to Management Access Now": "",
"Contact Support": "",
"Learn More": "",
"No Keyfile": "",
"Let's Unleash your Hardware!": "",
"Your server will not be usable until you purchase a Registration key or install a free 30-day Trial key.": "",
"A Trial key provides all the functionality of a Pro Registration key.": "",
"Registration keys are bound to your USB Flash boot device serial number (GUID).": "",
"Please use a high quality name brand device at least 1GB in size.": "",
"Note: USB memory card readers are generally not supported because most do not present unique serial numbers.": "",
"Important": "",
"Please make sure your server time is accurate to within 5 minutes": "",
"Please make sure there is a DNS server specified": "",
"Trial": "",
"Thank you for choosing Unraid OS!": "",
"Your Trial key includes all the functionality and device support of a Pro key.": "",
"After your Trial has reached expiration, your server still functions normally until the next time you Stop the array or reboot your server.": "",
"At that point you may either purchase a license key or request a Trial extension.": "",
"Trial Expired": "",
"Your Trial has expired": "",
"To continue using Unraid OS you may purchase a license key.": "",
"Alternately, you may request a Trial extension.": "",
"You have used all your Trial extensions.": "",
"Basic": "",
"Register for Connect by signing in to your Unraid.net account": "",
"To support more storage devices as your server grows, click Upgrade Key.": "",
"Plus": "",
"Pro": "",
"Flash GUID Error": "",
"Registration key / USB Flash GUID mismatch": "",
"Your Unraid registration key is ineligible for replacement as it has been replaced within the last 12 months.": "",
"The license key file does not correspond to the USB Flash boot device.": "",
"Please copy the correct key file to the /config directory on your USB Flash boot device or choose Purchase Key.": "",
"Your Unraid registration key is ineligible for replacement as it is blacklisted.": "",
"You may also attempt to Purchase or Replace your key.": "",
"Multiple License Keys Present": "",
"There are multiple license key files present on your USB flash device and none of them correspond to the USB Flash boot device.": "",
"Please remove all key files, except the one you want to replace, from the /config directory on your USB Flash boot device.": "",
"Alternately you may purchase a license key for this USB flash device.": "",
"If you want to replace one of your license keys with a new key bound to this USB Flash device, please first remove all other key files first.": "",
"Missing key file": "",
"It appears that your license key file is corrupted or missing.": "",
"The key file should be located in the /config directory on your USB Flash boot device.": "",
"With Unraid Connect (beta) installed you may attempt to recover your key with your Unraid.net account.": "",
"If this was an expired Trial installation, you may purchase a license key.": "",
"If you do not have a backup copy of your license key file you may install the Unraid Connect (beta) plugin to attempt to recover your key": "",
"Invalid installation": "",
"It is not possible to use a Trial key with an existing Unraid OS installation.": "",
"You may purchase a license key corresponding to this USB Flash device to continue using this installation.": "",
"No USB flash configuration data": "",
"There is a problem with your USB Flash device": "",
"No Flash": "",
"Cannot access your USB Flash boot device": "",
"There is a physical problem accessing your USB Flash boot device": "",
"BLACKLISTED": "",
"Blacklisted USB Flash GUID": "",
"This USB Flash boot device has been blacklisted.": "",
"This can occur as a result of transferring your license key to a replacement USB Flash device, and you are currently booted from your old USB Flash device.": "",
"A USB Flash device may also be blacklisted if we discover the serial number is not unique this is common with USB card readers.": "",
"USB Flash device error": "",
"This USB Flash device has an invalid GUID.": "",
"Please try a different USB Flash device": "",
"USB Flash has no serial number": "",
"Trial Requires Internet Connection": "",
"Cannot validate Unraid Trial key": "",
"Your Trial key requires an internet connection.": "",
"Please check Settings > Network": "",
"Stale": "",
"Stale Server": "",
"Please refresh the page to ensure you load your latest configuration": "",
"Invalid API Key": "",
"Please sign out then sign back in to refresh your API key.": "",
"Invalid API Key Format": "",
"Too Many Devices": "",
"You have exceeded the number of devices allowed for your license.": "",
"Please remove a device before adding another.": "",
"Unraid Connect Install Failed": "",
"Rebooting will likely solve this.": "",
"SSL certificates for unraid.net deprecated": "",
"On January 1st, 2023 SSL certificates for unraid.net were deprecated.": "",
"You MUST provision a new SSL certificate to use our new myunraid.net domain.": "",
"You can do this on the Settings > Management Access page.": "",
"Unraid Connect Error": "",
"Trial Key Creation Failed": "",
"Key server did not return a trial key. Please try again later.": "",
"Extending your free trial by 15 days": "",
"Please keep this window open": "",
"Starting your free 30 day trial": "",
"Trial Key Created": "",
"Please wait while the page reloads to install your trial key": ""
}

215
locales/en_US.json Normal file
View File

@@ -0,0 +1,215 @@
{
"LAN IP": "LAN IP",
"LAN IP %{ip}": "LAN IP %{ip}",
"LAN IP Copied": "LAN IP Copied",
"Click to Copy LAN IP %{ip}": "Click to Copy LAN IP %{ip}",
"Trial Key Expired at %{time}": "Trial Key Expired at %{time}",
"Trial Key Expires at %{time}": "Trial Key Expires at %{time}",
"Trial Key Expired %{time}": "Trial Key Expired %{time}",
"Trial Key Expires in %{time}": "Trial Key Expires in %{time}",
"Server Up Since %{time}": "Server Up Since %{time}",
"Uptime %{time}": "Uptime %{time}",
"year": "{n} year | {n} years",
"month": "{n} month | {n} months",
"day": "{n} day | {n} days",
"hour": "{n} hour | {n} hours",
"minute": "{n} minute | {n} minutes",
"second": "{n} second | {n} seconds",
"ago": "ago",
"Purchase": "Purchase",
"Upgrade": "Upgrade",
"Fix Error": "Fix Error",
"Get Started": "Get Started",
"Trial Expired, see options below": "Trial Expired, see options below",
"Learn more about the error": "Learn more about the error",
"Close Dropdown": "Close Dropdown",
"Open Dropdown": "Open Dropdown",
"Thank you for installing Connect!": "Thank you for installing Connect!",
"Sign In to your Unraid.net account to get started": "Sign In to your Unraid.net account to get started",
"Go to Connect": "Go to Connect",
"Opens Connect in new tab": "Opens Connect in new tab",
"Manage Unraid.net Account": "Manage Unraid.net Account",
"Manage Unraid.net Account in new tab": "Manage Unraid.net Account in new tab",
"Settings": "Settings",
"Go to Connect plugin settings": "Go to Connect plugin settings",
"Enhance your Unraid experience with Connect": "Enhance your Unraid experience with Connect",
"Beta": "Beta",
"Loading": "Loading",
"Restarting unraid-api…": "Restarting unraid-api…",
"unraid-api is offline": "unraid-api is offline",
"Introducing Unraid Connect": "Introducing Unraid Connect",
"Enhance your Unraid experience": "Enhance your Unraid experience",
"Connected": "Connected",
"Dynamic Remote Access": "Dynamic Remote Access",
"Toggle on/off server accessibility with dynamic remote access. Automatically turn on UPnP and open a random WAN port on your router at the click of a button and close off access in seconds.": "Toggle on/off server accessibility with dynamic remote access. Automatically turn on UPnP and open a random WAN port on your router at the click of a button and close off access in seconds.",
"Manage Your Server Within Connect": "Manage Your Server Within Connect",
"Servers equipped with a myunraid.net certificate can be managed directly from within the Connect web UI. Manage multiple servers from your phone, tablet, laptop, or PC in the same browser window.": "Servers equipped with a myunraid.net certificate can be managed directly from within the Connect web UI. Manage multiple servers from your phone, tablet, laptop, or PC in the same browser window.",
"Deep Linking": "Deep Linking",
"The Connect dashboard links to relevant sections of the webgui, allowing quick access to those settings and server sections.": "The Connect dashboard links to relevant sections of the webgui, allowing quick access to those settings and server sections.",
"Online Flash Backup": "Online Flash Backup",
"Never ever be left without a backup of your config. If you need to change flash drives, generate a backup from Connect and be up and running in minutes.": "Never ever be left without a backup of your config. If you need to change flash drives, generate a backup from Connect and be up and running in minutes.",
"Real-time Monitoring": "Real-time Monitoring",
"Get an overview of your server's state, storage space, apps and VMs status, and more.": "Get an overview of your server's state, storage space, apps and VMs status, and more.",
"Customizable Dashboard Tiles": "Customizable Dashboard Tiles",
"Set custom server tiles how you like and automatically display your server's banner image on your Connect Dashboard.": "Set custom server tiles how you like and automatically display your server's banner image on your Connect Dashboard.",
"License Management": "License Management",
"Manage your license keys at any time via the My Keys section.": "Manage your license keys at any time via the My Keys section.",
"Plus more on the way": "Plus more on the way",
"All you need is an active internet connection, an Unraid.net account, and the Connect plugin. Get started by installing the plugin.": "All you need is an active internet connection, an Unraid.net account, and the Connect plugin. Get started by installing the plugin.",
"Checkout the Connect Documentation": "Checkout the Connect Documentation",
"No thanks": "No thanks",
"Learn more": "Learn more",
"Install Connect": "Install Connect",
"Close Modal": "Close Modal",
"Close": "Close",
"Reload": "Reload",
"Unraid logo animating with a wave like effect": "Unraid logo animating with a wave like effect",
"Click to close modal": "Click to close modal",
"Error": "Error",
"Performing actions": "Performing actions",
"Success!": "Success!",
"Something went wrong": "Something went wrong",
"Please keep this window open while we perform some actions": "Please keep this window open while we perform some actions",
"You're one step closer to enhancing your Unraid experience": "You're one step closer to enhancing your Unraid experience",
"Thank you for purchasing an Unraid %{keyType} Key!": "Thank you for purchasing an Unraid %{keyType} Key!",
"Your %{keyType} Key has been replaced!": "Your %{keyType} Key has been replaced!",
"Your Trial key has been extended!": "Your Trial key has been extended!",
"Copied": "Copied",
"Copy Key URL": "Copy Key URL",
"Copy your Key URL: %{keyUrl}": "Copy your Key URL: %{keyUrl}",
"Then go to Tools > Registration to manually install it": "Then go to Tools > Registration to manually install it",
"Enhance your experience with Unraid Connect": "Enhance your experience with Unraid Connect",
"Sign In to utilize Unraid Connect": "Sign In to utilize Unraid Connect",
"Configure Connect Features": "Configure Connect Features",
"The primary method of support for Unraid Connect is through our forums and Discord.": "The primary method of support for Unraid Connect is through our forums and Discord.",
"If you are asked to supply logs, please open a support request on our Contact Page and reply to the email message you receive with your logs attached.": "If you are asked to supply logs, please open a support request on our Contact Page and reply to the email message you receive with your logs attached.",
"The logs may contain sensitive information so do not post them publicly.": "The logs may contain sensitive information so do not post them publicly.",
"Download unraid-api Logs": "Download unraid-api Logs",
"Unraid Connect Forums": "Unraid Connect Forums",
"Unraid Discord": "Unraid Discord",
"Unraid Contact Page": "Unraid Contact Page",
"DNS issue, unable to resolve wanip4.unraid.net": "DNS issue, unable to resolve wanip4.unraid.net",
"Unable to fetch client WAN IPv4": "Unable to fetch client WAN IPv4",
"Checking WAN IPs…": "Checking WAN IPs…",
"Remark: your WAN IPv4 is %{wanIp}": "Remark: your WAN IPv4 is %{wanIp}",
"Remark: Unraid's WAN IPv4 %{phpWanIp} does not match your client's WAN IPv4 %{wanIp}.": "Remark: Unraid's WAN IPv4 %{phpWanIp} does not match your client's WAN IPv4 %{wanIp}.",
"This may indicate a complex network that will not work with this Remote Access solution.": "This may indicate a complex network that will not work with this Remote Access solution.",
"Ignore this message if you are currently connected via Remote Access or VPN.": "Ignore this message if you are currently connected via Remote Access or VPN.",
"Ready to update Connect account configuration": "Ready to update Connect account configuration",
"Signing in %{username}…": "Signing in %{username}…",
"Signing out %{username}…": "Signing out %{username}…",
"%{username} Signed In Successfully": "%{username} Signed In Successfully",
"%{username} Signed Out Successfully": "%{username} Signed Out Successfully",
"Sign In Failed": "Sign In Failed",
"Sign Out Failed": "Sign Out Failed",
"Failed to update Connect account configuration": "Failed to update Connect account configuration",
"Callback redirect type not present or incorrect": "Callback redirect type not present or incorrect",
"Failed to install key": "Failed to install key",
"Ready to Install Key": "Ready to Install Key",
"Installing Extended Trial": "Installing Extended Trial",
"Installing Recovered": "Installing Recovered",
"Installing Replaced": "Installing Replaced",
"%{txt1} %{keyType} Key…": "%{txt1} %{keyType} Key…",
"%{keyType.value} Key %{txt2} Successfully": "%{keyType.value} Key %{txt2} Successfully",
"Failed to %{txt3} %{keyType.value} Key": "Failed to %{txt3} %{keyType.value} Key",
"Purchase Key": "Purchase Key",
"Upgrade Key": "Upgrade Key",
"Recover Key": "Recover Key",
"Redeem Activation Code": "Redeem Activation Code",
"Replace Key": "Replace Key",
"Sign In with Unraid.net Account": "Sign In with Unraid.net Account",
"Sign Out of Unraid.net": "Sign Out of Unraid.net",
"Extend Trial": "Extend Trial",
"Start Free 30 Day Trial": "Start Free 30 Day Trial",
"Go to Management Access Now": "Go to Management Access Now",
"Contact Support": "Contact Support",
"Learn More": "Learn More",
"No Keyfile": "No Keyfile",
"Let's Unleash your Hardware!": "Let's Unleash your Hardware!",
"Your server will not be usable until you purchase a Registration key or install a free 30-day Trial key.": "Your server will not be usable until you purchase a Registration key or install a free 30-day Trial key.",
"A Trial key provides all the functionality of a Pro Registration key.": "A Trial key provides all the functionality of a Pro Registration key.",
"Registration keys are bound to your USB Flash boot device serial number (GUID).": "Registration keys are bound to your USB Flash boot device serial number (GUID).",
"Please use a high quality name brand device at least 1GB in size.": "Please use a high quality name brand device at least 1GB in size.",
"Note: USB memory card readers are generally not supported because most do not present unique serial numbers.": "Note: USB memory card readers are generally not supported because most do not present unique serial numbers.",
"Important": "Important",
"Please make sure your server time is accurate to within 5 minutes": "Please make sure your server time is accurate to within 5 minutes",
"Please make sure there is a DNS server specified": "Please make sure there is a DNS server specified",
"Trial": "Trial",
"Thank you for choosing Unraid OS!": "Thank you for choosing Unraid OS!",
"Your Trial key includes all the functionality and device support of a Pro key.": "Your Trial key includes all the functionality and device support of a Pro key.",
"After your Trial has reached expiration, your server still functions normally until the next time you Stop the array or reboot your server.": "After your Trial has reached expiration, your server still functions normally until the next time you Stop the array or reboot your server.",
"At that point you may either purchase a license key or request a Trial extension.": "At that point you may either purchase a license key or request a Trial extension.",
"Trial Expired": "Trial Expired",
"Your Trial has expired": "Your Trial has expired",
"To continue using Unraid OS you may purchase a license key.": "To continue using Unraid OS you may purchase a license key.",
"Alternately, you may request a Trial extension.": "Alternately, you may request a Trial extension.",
"You have used all your Trial extensions.": "You have used all your Trial extensions.",
"Basic": "Basic",
"Register for Connect by signing in to your Unraid.net account": "Register for Connect by signing in to your Unraid.net account",
"To support more storage devices as your server grows, click Upgrade Key.": "To support more storage devices as your server grows, click Upgrade Key.",
"Plus": "Plus",
"Pro": "Pro",
"Flash GUID Error": "Flash GUID Error",
"Registration key / USB Flash GUID mismatch": "Registration key / USB Flash GUID mismatch",
"Your Unraid registration key is ineligible for replacement as it has been replaced within the last 12 months.": "Your Unraid registration key is ineligible for replacement as it has been replaced within the last 12 months.",
"The license key file does not correspond to the USB Flash boot device.": "The license key file does not correspond to the USB Flash boot device.",
"Please copy the correct key file to the /config directory on your USB Flash boot device or choose Purchase Key.": "Please copy the correct key file to the /config directory on your USB Flash boot device or choose Purchase Key.",
"Your Unraid registration key is ineligible for replacement as it is blacklisted.": "Your Unraid registration key is ineligible for replacement as it is blacklisted.",
"You may also attempt to Purchase or Replace your key.": "You may also attempt to Purchase or Replace your key.",
"Multiple License Keys Present": "Multiple License Keys Present",
"There are multiple license key files present on your USB flash device and none of them correspond to the USB Flash boot device.": "There are multiple license key files present on your USB flash device and none of them correspond to the USB Flash boot device.",
"Please remove all key files, except the one you want to replace, from the /config directory on your USB Flash boot device.": "Please remove all key files, except the one you want to replace, from the /config directory on your USB Flash boot device.",
"Alternately you may purchase a license key for this USB flash device.": "Alternately you may purchase a license key for this USB flash device.",
"If you want to replace one of your license keys with a new key bound to this USB Flash device, please first remove all other key files first.": "If you want to replace one of your license keys with a new key bound to this USB Flash device, please first remove all other key files first.",
"Missing key file": "Missing key file",
"It appears that your license key file is corrupted or missing.": "It appears that your license key file is corrupted or missing.",
"The key file should be located in the /config directory on your USB Flash boot device.": "The key file should be located in the /config directory on your USB Flash boot device.",
"With Unraid Connect (beta) installed you may attempt to recover your key with your Unraid.net account.": "With Unraid Connect (beta) installed you may attempt to recover your key with your Unraid.net account.",
"If this was an expired Trial installation, you may purchase a license key.": "If this was an expired Trial installation, you may purchase a license key.",
"If you do not have a backup copy of your license key file you may install the Unraid Connect (beta) plugin to attempt to recover your key": "If you do not have a backup copy of your license key file you may install the Unraid Connect (beta) plugin to attempt to recover your key",
"Invalid installation": "Invalid installation",
"It is not possible to use a Trial key with an existing Unraid OS installation.": "It is not possible to use a Trial key with an existing Unraid OS installation.",
"You may purchase a license key corresponding to this USB Flash device to continue using this installation.": "You may purchase a license key corresponding to this USB Flash device to continue using this installation.",
"No USB flash configuration data": "No USB flash configuration data",
"There is a problem with your USB Flash device": "There is a problem with your USB Flash device",
"No Flash": "No Flash",
"Cannot access your USB Flash boot device": "Cannot access your USB Flash boot device",
"There is a physical problem accessing your USB Flash boot device": "There is a physical problem accessing your USB Flash boot device",
"BLACKLISTED": "BLACKLISTED",
"Blacklisted USB Flash GUID": "Blacklisted USB Flash GUID",
"This USB Flash boot device has been blacklisted.": "This USB Flash boot device has been blacklisted.",
"This can occur as a result of transferring your license key to a replacement USB Flash device, and you are currently booted from your old USB Flash device.": "This can occur as a result of transferring your license key to a replacement USB Flash device, and you are currently booted from your old USB Flash device.",
"A USB Flash device may also be blacklisted if we discover the serial number is not unique this is common with USB card readers.": "A USB Flash device may also be blacklisted if we discover the serial number is not unique this is common with USB card readers.",
"USB Flash device error": "USB Flash device error",
"This USB Flash device has an invalid GUID.": "This USB Flash device has an invalid GUID.",
"Please try a different USB Flash device": "Please try a different USB Flash device",
"USB Flash has no serial number": "USB Flash has no serial number",
"Trial Requires Internet Connection": "Trial Requires Internet Connection",
"Cannot validate Unraid Trial key": "Cannot validate Unraid Trial key",
"Your Trial key requires an internet connection.": "Your Trial key requires an internet connection.",
"Please check Settings > Network": "Please check Settings > Network",
"Stale": "Stale",
"Stale Server": "Stale Server",
"Please refresh the page to ensure you load your latest configuration": "Please refresh the page to ensure you load your latest configuration",
"Invalid API Key": "Invalid API Key",
"Please sign out then sign back in to refresh your API key.": "Please sign out then sign back in to refresh your API key.",
"Invalid API Key Format": "Invalid API Key Format",
"Too Many Devices": "Too Many Devices",
"You have exceeded the number of devices allowed for your license.": "You have exceeded the number of devices allowed for your license.",
"Please remove a device before adding another.": "Please remove a device before adding another.",
"Unraid Connect Install Failed": "Unraid Connect Install Failed",
"Rebooting will likely solve this.": "Rebooting will likely solve this.",
"SSL certificates for unraid.net deprecated": "SSL certificates for unraid.net deprecated",
"On January 1st, 2023 SSL certificates for unraid.net were deprecated.": "On January 1st, 2023 SSL certificates for unraid.net were deprecated.",
"You MUST provision a new SSL certificate to use our new myunraid.net domain.": "You MUST provision a new SSL certificate to use our new myunraid.net domain.",
"You can do this on the Settings > Management Access page.": "You can do this on the Settings > Management Access page.",
"Unraid Connect Error": "Unraid Connect Error",
"Trial Key Creation Failed": "Trial Key Creation Failed",
"Key server did not return a trial key. Please try again later.": "Key server did not return a trial key. Please try again later.",
"Extending your free trial by 15 days": "Extending your free trial by 15 days",
"Please keep this window open": "Please keep this window open",
"Starting your free 30 day trial": "Starting your free 30 day trial",
"Trial Key Created": "Trial Key Created",
"Please wait while the page reloads to install your trial key": "Please wait while the page reloads to install your trial key",
"A Trial key provides all the functionality of a Pro Registration key": "A Trial key provides all the functionality of a Pro Registration key."
}

217
locales/ja.json Normal file
View File

@@ -0,0 +1,217 @@
{
"LAN IP": "LAN IP",
"LAN IP %{ip}": "LAN IP %{ip}",
"LAN IP Copied": "LAN IPがコピーされました",
"Click to Copy LAN IP %{ip}": "クリックして LAN IP %{ip} をコピーします",
"Trial Key Expired at %{time}": "トライアルキーは %{time} に期限切れになりました",
"Trial Key Expires at %{time}": "トライアルキーは %{time} に期限切れになります",
"Trial Key Expired %{time}": "トライアルキーの有効期限が切れました %{time}",
"Trial Key Expires in %{time}": "トライアル キーは %{time} 後に期限切れになります",
"Server Up Since %{time}": "%{time}以降サーバー稼働中",
"Uptime %{time}": "稼働時間 %{time}",
"year": "{n} 年 | \n{n}年",
"month": "{n} 月 | \n{n}か月",
"day": "{n} 日 | \n{n}日",
"hour": "{n} 時間 | \n{n}時間",
"minute": "{n} 分 | \n{n}分",
"second": "{n} 秒 | \n{n}秒",
"ago": "前",
"Purchase": "購入",
"Upgrade": "アップグレード",
"Fix Error": "エラーを修正",
"Get Started": "始めましょう",
"Trial Expired, see options below": "試用期限が切れました。以下のオプションを参照してください",
"Learn more about the error": "エラーの詳細を確認する",
"Close Dropdown": "ドロップダウンを閉じる",
"Open Dropdown": "ドロップダウンを開く",
"Thank you for installing Connect!": "Connect をインストールしていただきありがとうございます。",
"Sign In to your Unraid.net account to get started": "Unraid.net アカウントにサインインして開始してください",
"Go to Connect": "「接続」に移動",
"Opens Connect in new tab": "新しいタブで接続を開きます",
"Manage Unraid.net Account": "Unraid.net アカウントの管理",
"Manage Unraid.net Account in new tab": "新しいタブでUnraid.netアカウントを管理",
"Settings": "設定",
"Go to Connect plugin settings": "接続プラグイン設定に移動します",
"Enhance your Unraid experience with Connect": "Connect で Unraid エクスペリエンスを強化",
"Beta": "ベータ",
"Loading": "読み込み中",
"Restarting unraid-api…": "unraid-API を再起動しています…",
"unraid-api is offline": "unraid-API はオフラインです",
"Introducing Unraid Connect": "Unraid Connect の紹介",
"Enhance your Unraid experience": "Unraid エクスペリエンスを強化する",
"Connected": "接続済み",
"Dynamic Remote Access": "ダイナミックリモートアクセス",
"Toggle on/off server accessibility with dynamic remote access. Automatically turn on UPnP and open a random WAN port on your router at the click of a button and close off access in seconds.": "動的リモート アクセスを使用してサーバー アクセシビリティのオン/オフを切り替えます。 ボタンをクリックするだけで UPnP が自動的にオンになり、ルーター上でランダムな WAN ポートが開き、数秒でアクセスが遮断されます。",
"Manage Your Server Within Connect": "Connect 内でサーバーを管理",
"Servers equipped with a myunraid.net certificate can be managed directly from within the Connect web UI. Manage multiple servers from your phone, tablet, laptop, or PC in the same browser window.": "myunraid.net 証明書を備えたサーバーは、Connect Web UI 内から直接管理できます。 同じブラウザ ウィンドウで、携帯電話、タブレット、ラップトップ、または PC から複数のサーバーを管理します。",
"Deep Linking": "ディープリンク",
"The Connect dashboard links to relevant sections of the webgui, allowing quick access to those settings and server sections.": "Connect ダッシュボードは Webgui の関連セクションにリンクしているため、これらの設定やサーバー セクションにすばやくアクセスできます。",
"Online Flash Backup": "オンラインフラッシュバックアップ",
"Never ever be left without a backup of your config. If you need to change flash drives, generate a backup from Connect and be up and running in minutes.": "設定のバックアップが欠かせないことはありません。 フラッシュ ドライブを変更する必要がある場合は、Connect からバックアップを生成すると、数分で起動して実行できるようになります。",
"Real-time Monitoring": "リアルタイム監視",
"Get an overview of your server's state, storage space, apps and VMs status, and more.": "サーバーの状態、ストレージ容量、アプリと VM のステータスなどの概要を取得します。",
"Customizable Dashboard Tiles": "カスタマイズ可能なダッシュボード タイル",
"Set custom server tiles how you like and automatically display your server's banner image on your Connect Dashboard.": "カスタム サーバー タイルを好みに設定し、サーバーのバナー画像を Connect ダッシュボードに自動的に表示します。",
"License Management": "ライセンス管理",
"Manage your license keys at any time via the My Keys section.": "[マイ キー] セクションでいつでもライセンス キーを管理できます。",
"Plus more on the way": "さらに途中でさらに追加",
"All you need is an active internet connection, an Unraid.net account, and the Connect plugin. Get started by installing the plugin.": "必要なのは、アクティブなインターネット接続、Unraid.net アカウント、および Connect プラグインだけです。 プラグインをインストールして始めます。",
"Get started by installing the plugin.": "プラグインをインストールして始めます。",
"Checkout the Connect Documentation": "Connect のドキュメントを確認する",
"No thanks": "結構です",
"Learn more": "もっと詳しく知る",
"Install Connect": "インストール接続",
"Close Modal": "モーダルを閉じる",
"Close": "近い",
"Reload": "リロード",
"Unraid logo animating with a wave like effect": "波のような効果でアニメーション化された Unraid ロゴ",
"Click to close modal": "クリックしてモーダルを閉じます",
"Error": "エラー",
"Performing actions": "アクションの実行",
"Success!": "成功!",
"Something went wrong": "何か問題が発生しました",
"Please keep this window open while we perform some actions": "いくつかのアクションを実行する間、このウィンドウを開いたままにしてください",
"You're one step closer to enhancing your Unraid experience": "Unraid エクスペリエンスの向上にまた一歩近づいています",
"Thank you for purchasing an Unraid %{keyType} Key!": "Unraid %{keyType} キーをご購入いただきありがとうございます。",
"Your %{keyType} Key has been replaced!": "%{keyType} キーは置き換えられました。",
"Your Trial key has been extended!": "トライアルキーは延長されました!",
"Copied": "コピーされました",
"Copy Key URL": "キーの URL をコピー",
"Copy your Key URL: %{keyUrl}": "キーの URL をコピーします: %{keyUrl}",
"Then go to Tools > Registration to manually install it": "次に、[ツール] > [登録] に移動して手動でインストールします。",
"Enhance your experience with Unraid Connect": "Unraid Connect でエクスペリエンスを向上",
"Sign In to utilize Unraid Connect": "Unraid Connect を利用するにはサインインしてください",
"Configure Connect Features": "接続機能の構成",
"The primary method of support for Unraid Connect is through our forums and Discord.": "Unraid Connect の主なサポート方法は、フォーラムと Discord を使用することです。",
"If you are asked to supply logs, please open a support request on our Contact Page and reply to the email message you receive with your logs attached.": "ログの提供を求められた場合は、お問い合わせページでサポート リクエストを開き、受信した電子メール メッセージにログを添付してご返信ください。",
"The logs may contain sensitive information so do not post them publicly.": "ログには機密情報が含まれている可能性があるため、公開しないでください。",
"Download unraid-api Logs": "unraid-api ログをダウンロードする",
"Unraid Connect Forums": "Unraid Connect フォーラム",
"Unraid Discord": "アンレイドディスコード",
"Unraid Contact Page": "アンレイド連絡先ページ",
"DNS issue, unable to resolve wanip4.unraid.net": "DNS の問題、wanip4.unraid.net を解決できない",
"Unable to fetch client WAN IPv4": "クライアントの WAN IPv4 を取得できません",
"Checking WAN IPs…": "WAN IPをチェック中…",
"Remark: your WAN IPv4 is %{wanIp}": "注: WAN IPv4 は %{wanIp} です",
"Remark: Unraid's WAN IPv4 %{phpWanIp} does not match your client's WAN IPv4 %{wanIp}.": "注: Unraid の WAN IPv4 %{phpWanIp} は、クライアントの WAN IPv4 %{wanIp} と一致しません。",
"This may indicate a complex network that will not work with this Remote Access solution.": "これは、このリモート アクセス ソリューションでは機能しない複雑なネットワークを示している可能性があります。",
"Ignore this message if you are currently connected via Remote Access or VPN.": "現在リモート アクセスまたは VPN 経由で接続している場合は、このメッセージを無視してください。",
"Ready to update Connect account configuration": "Connect アカウント構成を更新する準備ができました",
"Signing in %{username}…": "%{ユーザー名} にサインインしています…",
"Signing out %{username}…": "%{ユーザー名} をサインアウトしています…",
"%{username} Signed In Successfully": "%{username} が正常にサインインしました",
"%{username} Signed Out Successfully": "%{username} が正常にサインアウトしました",
"Sign In Failed": "サインインに失敗しました",
"Sign Out Failed": "サインアウトに失敗しました",
"Failed to update Connect account configuration": "Connect アカウント構成の更新に失敗しました",
"Callback redirect type not present or incorrect": "コールバック リダイレクト タイプが存在しないか、正しくありません",
"Failed to install key": "キーのインストールに失敗しました",
"Ready to Install Key": "キーをインストールする準備ができました",
"Installing Extended Trial": "延長トライアル版のインストール",
"Installing Recovered": "回復されたものをインストールしています",
"Installing Replaced": "取り付け、交換",
"%{txt1} %{keyType} Key…": "%{txt1} %{keyType} キー…",
"%{keyType.value} Key %{txt2} Successfully": "%{keyType.value} キー %{txt2} が成功しました",
"Failed to %{txt3} %{keyType.value} Key": "%{txt3} %{keyType.value} キーに失敗しました",
"Purchase Key": "キーを購入する",
"Upgrade Key": "アップグレードキー",
"Recover Key": "キーを回復する",
"Redeem Activation Code": "アクティベーション コードを引き換える",
"Replace Key": "キーを交換する",
"Sign In with Unraid.net Account": "Unraid.net アカウントでサインインする",
"Sign Out of Unraid.net": "Unraid.net からサインアウトする",
"Extend Trial": "トライアルの延長",
"Start Free 30 Day Trial": "30 日間の無料トライアルを開始する",
"Go to Management Access Now": "今すぐ管理アクセスに移動",
"Contact Support": "サポート問い合わせ先",
"Learn More": "もっと詳しく知る",
"No Keyfile": "キーファイルがありません",
"Let's Unleash your Hardware!": "ハードウェアを解き放ちましょう!",
"Your server will not be usable until you purchase a Registration key or install a free 30-day Trial key.": "",
"A Trial key provides all the functionality of a Pro Registration key.": "",
"Registration keys are bound to your USB Flash boot device serial number (GUID).": "",
"Please use a high quality name brand device at least 1GB in size.": "",
"Note: USB memory card readers are generally not supported because most do not present unique serial numbers.": "",
"Important": "重要",
"Please make sure your server time is accurate to within 5 minutes": "サーバー時間が 5 分以内に正確であることを確認してください。",
"Please make sure there is a DNS server specified": "DNSサーバーが指定されていることを確認してください",
"Trial": "トライアル",
"Thank you for choosing Unraid OS!": "Unraid OS をお選びいただきありがとうございます。",
"Your Trial key includes all the functionality and device support of a Pro key.": "",
"After your Trial has reached expiration, your server still functions normally until the next time you Stop the array or reboot your server.": "",
"At that point you may either purchase a license key or request a Trial extension.": "",
"Trial Expired": "試用期限が切れました",
"Your Trial has expired": "トライアル版の有効期限が切れました",
"To continue using Unraid OS you may purchase a license key.": "",
"Alternately, you may request a Trial extension.": "",
"You have used all your Trial extensions.": "",
"Basic": "基本",
"Register for Connect by signing in to your Unraid.net account": "Unraid.net アカウントにサインインして Connect に登録します",
"To support more storage devices as your server grows, click Upgrade Key.": "",
"Plus": "プラス",
"Pro": "プロ",
"Flash GUID Error": "フラッシュGUIDエラー",
"Registration key / USB Flash GUID mismatch": "登録キー / USB フラッシュ GUID の不一致",
"Your Unraid registration key is ineligible for replacement as it has been replaced within the last 12 months.": "",
"The license key file does not correspond to the USB Flash boot device.": "",
"Please copy the correct key file to the /config directory on your USB Flash boot device or choose Purchase Key.": "",
"Your Unraid registration key is ineligible for replacement as it is blacklisted.": "",
"You may also attempt to Purchase or Replace your key.": "",
"Multiple License Keys Present": "複数のライセンス キーが存在します",
"There are multiple license key files present on your USB flash device and none of them correspond to the USB Flash boot device.": "",
"Please remove all key files, except the one you want to replace, from the /config directory on your USB Flash boot device.": "",
"Alternately you may purchase a license key for this USB flash device.": "",
"If you want to replace one of your license keys with a new key bound to this USB Flash device, please first remove all other key files first.": "",
"Missing key file": "キーファイルがありません",
"It appears that your license key file is corrupted or missing.": "",
"The key file should be located in the /config directory on your USB Flash boot device.": "",
"With Unraid Connect (beta) installed you may attempt to recover your key with your Unraid.net account.": "",
"If this was an expired Trial installation, you may purchase a license key.": "",
"If you do not have a backup copy of your license key file you may install the Unraid Connect (beta) plugin to attempt to recover your key": "ライセンス キー ファイルのバックアップ コピーがない場合は、Unraid Connect (ベータ) プラグインをインストールしてキーの回復を試みることができます。",
"Invalid installation": "無効なインストール",
"It is not possible to use a Trial key with an existing Unraid OS installation.": "",
"You may purchase a license key corresponding to this USB Flash device to continue using this installation.": "",
"No USB flash configuration data": "USB フラッシュ構成データがありません",
"There is a problem with your USB Flash device": "USB フラッシュ デバイスに問題があります",
"No Flash": "フラッシュ禁止",
"Cannot access your USB Flash boot device": "USB フラッシュ ブート デバイスにアクセスできません",
"There is a physical problem accessing your USB Flash boot device": "USB フラッシュ ブート デバイスへのアクセスに物理的な問題があります",
"BLACKLISTED": "ブラックリストに登録されました",
"Blacklisted USB Flash GUID": "ブラックリストに登録された USB フラッシュ GUID",
"This USB Flash boot device has been blacklisted.": "",
"This can occur as a result of transferring your license key to a replacement USB Flash device, and you are currently booted from your old USB Flash device.": "",
"A USB Flash device may also be blacklisted if we discover the serial number is not unique this is common with USB card readers.": "",
"USB Flash device error": "USBフラッシュデバイスエラー",
"This USB Flash device has an invalid GUID.": "",
"Please try a different USB Flash device": "別の USB フラッシュ デバイスを試してください",
"USB Flash has no serial number": "USB フラッシュにはシリアル番号がありません",
"Trial Requires Internet Connection": "トライアルにはインターネット接続が必要です",
"Cannot validate Unraid Trial key": "Unraid Trial キーを検証できません",
"Your Trial key requires an internet connection.": "",
"Please check Settings > Network": "[設定] > [ネットワーク] を確認してください。",
"Stale": "古い",
"Stale Server": "古いサーバー",
"Please refresh the page to ensure you load your latest configuration": "最新の構成を確実にロードするには、ページを更新してください。",
"Invalid API Key": "無効な API キー",
"Please sign out then sign back in to refresh your API key.": "",
"Invalid API Key Format": "無効な API キー形式",
"Too Many Devices": "デバイスが多すぎます",
"You have exceeded the number of devices allowed for your license.": "",
"Please remove a device before adding another.": "",
"Unraid Connect Install Failed": "Unraid Connect のインストールに失敗しました",
"Rebooting will likely solve this.": "",
"SSL certificates for unraid.net deprecated": "unraid.net の SSL 証明書が非推奨になりました",
"On January 1st, 2023 SSL certificates for unraid.net were deprecated.": "",
"You MUST provision a new SSL certificate to use our new myunraid.net domain.": "",
"You can do this on the Settings > Management Access page.": "",
"Unraid Connect Error": "非RAID接続エラー",
"Trial Key Creation Failed": "トライアルキーの作成に失敗しました",
"Key server did not return a trial key. Please try again later.": "",
"Extending your free trial by 15 days": "無料トライアルを 15 日間延長します",
"Please keep this window open": "この窓は開いたままにしておいてください",
"Starting your free 30 day trial": "30 日間の無料トライアルを開始する",
"Trial Key Created": "トライアルキーが作成されました",
"Please wait while the page reloads to install your trial key": "試用版キーをインストールするには、ページがリロードされるまでお待ちください。",
"A Trial key provides all the functionality of a Pro Registration key": "トライアル キーは、Pro 登録キーのすべての機能を提供します。",
"A USB Flash device may also be blacklisted if we discover the serial number is not unique this is common with USB card readers": ""
}

View File

@@ -12,40 +12,40 @@ onBeforeMount(() => {
<div class="max-w-5xl mx-auto">
<client-only>
<div class="flex flex-col gap-6 p-6">
<h2>Vue Components</h2>
<h3>UserProfileCe</h3>
<h2 class="text-xl font-semibold font-mono">
Vue Components
</h2>
<h3 class="text-lg font-semibold font-mono">
UserProfileCe
</h3>
<UserProfileCe :server="serverState" />
<hr>
<h3>DownloadApiLogsCe</h3>
<hr class="border-black">
<h3 class="text-lg font-semibold font-mono">
DownloadApiLogsCe
</h3>
<DownloadApiLogsCe />
<hr>
<h3>AuthCe</h3>
<hr class="border-black">
<h3 class="text-lg font-semibold font-mono">
AuthCe
</h3>
<AuthCe />
<hr>
<h3>KeyActionsCe</h3>
<hr class="border-black">
<h3 class="text-lg font-semibold font-mono">
KeyActionsCe
</h3>
<KeyActionsCe />
<hr>
<h3>WanIpCheckCe</h3>
<hr class="border-black">
<h3 class="text-lg font-semibold font-mono">
WanIpCheckCe
</h3>
<WanIpCheckCe php-wan-ip="47.184.85.45" />
<hr>
<h3>ModalsCe</h3>
<hr class="border-black">
<h3 class="text-lg font-semibold font-mono">
ModalsCe
</h3>
<ModalsCe />
</div>
</client-only>
</div>
</div>
</template>
<style lang="postcss" scoped>
h2 {
@apply text-xl font-semibold font-mono;
}
h3 {
@apply text-lg font-semibold font-mono;
}
hr {
@apply border-black;
}
</style>

View File

@@ -12,33 +12,47 @@ onBeforeMount(() => {
<div class="text-black bg-white dark:text-white dark:bg-black">
<div class="max-w-5xl mx-auto">
<div class="flex flex-col gap-6 p-6">
<h2>Web Components</h2>
<h3>UserProfileCe</h3>
<h2 class="text-xl font-semibold font-mono">
Web Components
</h2>
<h3 class="text-lg font-semibold font-mono">
UserProfileCe
</h3>
<unraid-i18n-host>
<unraid-user-profile :server="JSON.stringify(serverState)" />
</unraid-i18n-host>
<hr>
<h3>DownloadApiLogsCe</h3>
<hr class="border-black">
<h3 class="text-lg font-semibold font-mono">
DownloadApiLogsCe
</h3>
<unraid-i18n-host>
<unraid-download-api-logs />
</unraid-i18n-host>
<hr>
<h3>AuthCe</h3>
<hr class="border-black">
<h3 class="text-lg font-semibold font-mono">
AuthCe
</h3>
<unraid-i18n-host>
<unraid-auth />
</unraid-i18n-host>
<hr>
<h3>KeyActionsCe</h3>
<hr class="border-black">
<h3 class="text-lg font-semibold font-mono">
KeyActionsCe
</h3>
<unraid-i18n-host>
<unraid-key-actions />
</unraid-i18n-host>
<hr>
<h3>WanIpCheckCe</h3>
<hr class="border-black">
<h3 class="text-lg font-semibold font-mono">
WanIpCheckCe
</h3>
<unraid-i18n-host>
<unraid-wan-ip-check php-wan-ip="47.184.85.45" />
</unraid-i18n-host>
<hr>
<h3>ModalsCe</h3>
<hr class="border-black">
<h3 class="text-lg font-semibold font-mono">
ModalsCe
</h3>
<unraid-i18n-host>
<unraid-modals />
</unraid-i18n-host>
@@ -47,17 +61,3 @@ onBeforeMount(() => {
</div>
</client-only>
</template>
<style lang="postcss" scoped>
h2 {
@apply text-xl font-semibold font-mono;
}
h3 {
@apply text-lg font-semibold font-mono;
}
hr {
@apply border-black;
}
</style>

View File

@@ -370,7 +370,15 @@ export const useServerStore = defineStore('server', () => {
: '',
};
case 'EGUID':
if (guidReplaceable.value) { messageEGUID = '<p>Your Unraid registration key is ineligible for replacement as it has been replaced within the last 12 months.</p>'; } else if (guidReplaceable.value === false && guidBlacklisted.value) { messageEGUID = '<p>The license key file does not correspond to the USB Flash boot device. Please copy the correct key file to the /config directory on your USB Flash boot device or choose Purchase Key.</p><p>Your Unraid registration key is ineligible for replacement as it is blacklisted.</p>'; } else if (guidReplaceable.value === false && !guidBlacklisted.value) { messageEGUID = '<p>The license key file does not correspond to the USB Flash boot device. Please copy the correct key file to the /config directory on your USB Flash boot device or choose Purchase Key.</p><p>Your Unraid registration key is ineligible for replacement as it has been replaced within the last 12 months.</p>'; } else { messageEGUID = '<p>The license key file does not correspond to the USB Flash boot device. Please copy the correct key file to the /config directory on your USB Flash boot device.</p><p>You may also attempt to Purchase or Replace your key.</p>'; } // basically guidReplaceable.value === null
if (guidReplaceable.value) {
messageEGUID = '<p>Your Unraid registration key is ineligible for replacement as it has been replaced within the last 12 months.</p>';
} else if (guidReplaceable.value === false && guidBlacklisted.value) {
messageEGUID = '<p>The license key file does not correspond to the USB Flash boot device. Please copy the correct key file to the /config directory on your USB Flash boot device or choose Purchase Key.</p><p>Your Unraid registration key is ineligible for replacement as it is blacklisted.</p>';
} else if (guidReplaceable.value === false && !guidBlacklisted.value) {
messageEGUID = '<p>The license key file does not correspond to the USB Flash boot device. Please copy the correct key file to the /config directory on your USB Flash boot device or choose Purchase Key.</p><p>Your Unraid registration key is ineligible for replacement as it has been replaced within the last 12 months.</p>';
} else { // basically guidReplaceable.value === null
messageEGUID = '<p>The license key file does not correspond to the USB Flash boot device. Please copy the correct key file to the /config directory on your USB Flash boot device.</p><p>You may also attempt to Purchase or Replace your key.</p>';
}
return {
actions: [
...(!registered.value && connectPluginInstalled.value ? [signInAction] : []),