+ {{ article.title }} +
++ {{ article.description }} +
+
++ {{ game.mName }} +
++ {{ !!searchQuery ? $t("common.noResults") : $t("library.noGames") }} +
++ {{ game.mShortDescription }} +
++ {{ $t("library.admin.game.imageCarouselDescription") }} +
++ {{ $t("library.admin.game.imageLibraryDescription") }} +
++ {{ $t("library.admin.version.description") }} +
+| + | + {{ $t("library.admin.version.table.name") }} + | ++ {{ $t("library.admin.version.table.path") }} + | ++ {{ $t("library.admin.version.table.delta") }} + | ++ {{ $t("library.admin.version.table.setup") }} + | ++ {{ $t("library.admin.version.table.launch") }} + | ++ {{ $t("common.edit") }} + | +
|---|---|---|---|---|---|---|
|
+ |
+
+
+ {{ version.displayName ?? version.versionPath }}
+ {{
+ version.versionId
+ }}
+
+ |
+ + {{ version.versionPath }} + | ++ {{ version.delta }} + | + +
+
|
+
+
+ {{ $t("library.admin.version.setupOnly") }}
+
+
|
+ + + + | +
+ {{ $t("library.admin.offline") }} +
+{{ props.config.command }}
++ {{ + game + ? game.mShortDescription + : $t("settings.admin.store.dropGameDescriptionPlaceholder") + }} +
+{{ game.description }}
+
+
+ {{ $t("library.admin.launchRow.autosuggestHint") }} +
+{{ log.msg }}
+
+
+
+
diff --git a/server/components/MiniTile.vue b/server/components/MiniTile.vue
new file mode 100644
index 00000000..a3c1649a
--- /dev/null
+++ b/server/components/MiniTile.vue
@@ -0,0 +1,28 @@
+
+ + {{ $t("library.admin.metadata.companies.addGame.description") }} +
++ {{ $t("library.collection.createDesc") }} +
++ {{ $t("library.admin.metadata.companies.modals.createDescription") }} +
++ {{ $t("library.admin.metadata.tags.modal.description") }} +
++ {{ $t("account.token.nameDesc") }} +
++ {{ $t("account.token.aclsDesc") }} +
+ ++ {{ $t("common.deleteConfirm", [collection?.name]) }} +
++ {{ $t("common.cannotUndo") }} +
++ {{ $t("common.deleteConfirm", [article?.title]) }} +
++ {{ $t("common.cannotUndo") }} +
++ {{ $t("common.deleteConfirm", [user?.username]) }} +
++ {{ $t("common.cannotUndo") }} +
++ {{ $t("library.admin.launchSelector.description") }} +
++ {{ notification.title }} +
++ {{ notification.description }} +
+| + | + | + |
|---|---|---|
| + {{ item.rank }} + | +{{ item.name }} | ++ {{ item.value }} + | +
+ {{ $t("common.noData") }} +
+ + + diff --git a/server/components/RelativeTime.vue b/server/components/RelativeTime.vue new file mode 100644 index 00000000..4d162c7e --- /dev/null +++ b/server/components/RelativeTime.vue @@ -0,0 +1,32 @@ + ++ {{ $t("setup.auth.description") }} +
++ {{ $t("setup.auth.simple.description") }} +
++ {{ $t("setup.auth.openid.description") }} +
++ {{ props.message }} +
++ {{ $t("library.admin.sources.fsPathDesc") }} +
++ {{ $t("library.admin.sources.fsPathDesc") }} +
+| + {{ $t("common.name") }} + | ++ {{ $t("type") }} + | ++ {{ $t("library.admin.sources.working") }} + | ++ {{ $t("options") }} + | ++ {{ $t("library.admin.sources.totalSpace") }} + | ++ {{ $t("library.admin.sources.freeSpace") }} + | ++ {{ $t("library.admin.sources.utilizationPercentage") }} + | ++ {{ $t("actions") }} + | +
|---|---|---|---|---|---|---|---|
| + {{ source.name }} + | +
+ |
+
+ |
+ + {{ source.options }} + | ++ {{ source.fsStats && formatBytes(source.fsStats.totalSpace) }} + | ++ {{ source.fsStats && formatBytes(source.fsStats.freeSpace) }} + | +
+
+
+ |
+ + + + + | +
+ {{ error?.statusCode }} +
++ {{ message }} +
+ ++ {{ $t("errors.occurred") }} +
+ +
+ + {{ $t("account.devices.subheader") }} +
+| + {{ $t("common.name") }} + | ++ {{ $t("account.devices.platform") }} + | ++ {{ $t("account.devices.capabilities") }} + | ++ {{ $t("account.devices.lastConnected") }} + | ++ {{ $t("actions") }} + | +
|---|---|---|---|---|
| + {{ client.name }} + | ++ + {{ client.platform }} + + | +
+
+
+
+ |
+
+ |
+ + + | +
| + {{ $t("account.devices.noDevices") }} + | +||||
+ {{ $t("account.notifications.desc") }} +
++ {{ notification.description }} +
++ {{ $t("account.notifications.none") }} +
+
+ {{ $t("account.security.2fa.superlevelHint.title") }}
+
+ {{ $t("account.security.2fa.superlevelHint.success") }} +
++ {{ $t("account.security.2fa.totp.description") }} +
++ {{ $t("account.security.2fa.webauthn.description") }} +
++ {{ $t("account.security.2fa.webauthn.bypassHint") }} +
++ {{ $t("account.security.2fa.webauthn.modal.description") }} +
+| + {{ $t("account.security.2fa.webauthn.modal.tableName") }} + | ++ {{ + $t("account.security.2fa.webauthn.modal.tableCreated") + }} + | + ++ {{ $t("common.delete") }} + | +
|---|---|---|
| + {{ mec.name }} + | +
+ |
+
+ + + | +
+ {{ $t("account.token.subheader") }} +
++ {{ $t("account.token.success") }} +
++ {{ $t("account.token.successNote") }} +
++ {{ newToken }} +
+| + {{ $t("common.name") }} + | ++ {{ $t("account.token.acls") }} + | ++ {{ $t("account.token.expiry") }} + | ++ {{ $t("actions") }} + | +|
|---|---|---|---|---|
| + {{ token.name }} + | +
+
+
+ {{ acl }}
+
+
+ |
+
+ |
+ + + | +|
| + {{ $t("account.token.noTokens") }} + | +||||
+ {{ t("home.admin.subheader") }} +
++ {{ $t("library.admin.import.version.displayNameDesc") }} +
++ {{ $t("library.admin.import.version.setupDesc") }} +
++ {{ $t("library.admin.import.version.launchDesc") }} +
++ {{ $t("library.admin.subheader") }} +
++ {{ $t("library.admin.massImportTool") }} +
+
+
+ {{ $t("library.admin.detectedGame") }} +
+
+
+ {{ $t("library.admin.detectedVersion") }} +
+
+
+ {{ $t("common.noResults") }} +
+
+ {{
+ $t("library.admin.libraryHint")
+ }}
+
+
+ Quickly import a large amount of versions at once. +
+|
+
+
+
+
+ |
+ + Name + | ++ Type + | ++ Display Name + | ++ Setup Mode + | +
|---|---|---|---|---|
|
+
+
+ |
+ ||||
|
+
+
+
+
+
+
+ |
+ + {{ version.name }} + | ++ {{ version.type }} + | ++ + | + +
+ |
+
+ {{ $t("library.admin.sources.desc") }} +
++ {{ $t("library.admin.sources.createDesc") }} +
++ {{ + company.mShortDescription || + $t("library.admin.metadata.companies.editor.noDescription") + }} + +
++ {{ + company.mWebsite || + $t("library.admin.metadata.companies.editor.websitePlaceholder") + }} + +
++ {{ $t("library.admin.metadata.companies.editor.libraryDescription") }} +
++ {{ $t("common.noResults") }} +
++ {{ $t("library.admin.metadata.companies.noGames") }} +
++ {{ $t("library.admin.metadata.companies.description") }} +
++ {{ $t("common.noResults") }} +
++ {{ $t("library.admin.metadata.companies.noCompanies") }} +
++ {{ $t("library.admin.metadata.tags.description") }} +
++ {{ $t("library.admin.metadata.companies.description") }} +
++ {{ $t("library.admin.metadata.tags.description") }} +
++ {{ serviceMetadata[service.name].description }} +
++ {{ $t("account.token.subheader") }} +
++ {{ $t("account.token.success") }} +
++ {{ $t("account.token.successNote") }} +
++ {{ newToken }} +
+| + {{ $t("common.name") }} + | ++ {{ $t("account.token.acls") }} + | ++ {{ $t("account.token.expiry") }} + | ++ {{ $t("actions") }} + | +|
|---|---|---|---|---|
| + {{ token.name }} + | +
+
+
+ {{ acl }}
+
+
+ |
+
+ |
+ + + | +|
| + {{ $t("account.token.noTokens") }} + | +||||
+ {{ scheduledTasks[task].description }} +
+ ++ {{ scheduledTasks[task].description }} +
+ ++ {{ scheduledTasks[task].description }} +
+ ++ {{ $t("users.admin.authentication.description") }} +
++ {{ $t("users.admin.simple.description") }} +
+{{ invitation.inviteUrl }}
++ {{ + invitation.username ?? + $t("users.admin.simple.noUsernameEnforced") + }} + {{ $t("common.divider") }} + {{ + invitation.email ?? $t("users.admin.simple.noEmailEnforced") + }} +
++ {{ + invitation.isAdmin + ? $t("users.admin.simple.adminInvitation") + : $t("users.admin.simple.userInvitation") + }} +
+
+
+
+ {{ $t("users.admin.description") }} +
+| + {{ $t("users.admin.displayNameHeader") }} + | ++ {{ $t("users.admin.usernameHeader") }} + | ++ {{ $t("users.admin.emailHeader") }} + | ++ {{ $t("users.admin.adminHeader") }} + | ++ {{ $t("users.admin.authoptionsHeader") }} + | ++ + {{ $t("users.admin.srEditLabel") }} + + | +
|---|---|---|---|---|---|
| + {{ user.displayName }} + | ++ {{ user.username }} + | ++ {{ user.email }} + | ++ + {{ + user.admin + ? $t("users.admin.adminUserLabel") + : $t("users.admin.normalUserLabel") + }} + + | +
+
+
+ {{ mec.mec }}
+
+
+ |
+ + + + + | +
+ {{ $t("auth.2fa.description") }} +
++ {{ $t("auth.2fa.totp.description") }} +
++ {{ $t("auth.2fa.passkey.description") }} +
++ {{ $t("auth.register.subheader") }} +
++ {{ + superlevel + ? $t("auth.signin.noAccountProtected") + : $t("auth.signin.noAccount") + }} +
++ {{ $t("auth.callback.authorizedClient") }} +
+ ++ {{ $t("auth.callback.paste") }} +
++ {{ authToken }} +
++ {{ $t("auth.callback.requestedAccess", { name: clientData.name }) }} +
++ {{ + $t("auth.callback.permWarning", { + name: clientData.name, + platform: clientData.platform, + }) + }} +
+{{ feature.description }}
+
+
+ {{ $t("auth.code.description") }} +
++ {{ $t("library.gameCount", collection?.entries?.length || 0) }} +
++ {{ game.mShortDescription }} +
+ ++ {{ $t("library.subheader") }} +
++ {{ $t("library.gameCount", [collection.entries.length]) }} +
++ {{ $t("auth.2fa.success.description") }} +
+ ++ {{ $t("auth.2fa.totp.createDescription") }} +
++ {{ $t("auth.2fa.totp.createHint") }} +
++ {{ totpSecrets?.secret }} +
++ {{ $t("auth.2fa.passkey.createDescription") }} +
+{{ article.description }}
++ {{ $t("news.subheader") }} +
++ {{ article.description }} +
+{{ $t("news.checkLater") }}
++ {{ $t("setup.welcomeDescription") }} +
++ {{ action.description }} +
+
+ | + {{ $t("store.released") }} + | ++ + | +|
| + {{ $t("store.platform", platforms.length) }} + | +
+ |
+ |
| + {{ $t("store.size") }} + | +
+
|
+ + {{ + $t("store.commingSoon") + }} + | +
| + {{ $t("store.rating") }} + | +
+ |
+ |
| + {{ $t("store.tags") }} + | +
+ |
+ |
| + {{ $t("store.developers", game.developers.length) }} + | +
+ |
+ |
| + {{ $t("store.publishers", game.publishers.length) }} + | +
+ |
+
+ {{ game.mShortDescription }} +
++ {{ company.mShortDescription }} +
++ {{ game.mShortDescription }} +
+{{ $t("user.recentSub") }}
+ +]*>(.*?)<\/p>/gi, + (_, content) => { + const cleanContent = this._stripHtmlTags(content).trim(); + return cleanContent ? `${cleanContent}` : ""; + }, + ); + + // Convert unordered lists with Steam's bb_ul class + markdown = markdown.replace( + /