mirror of
https://github.com/jxxghp/MoviePilot-Frontend.git
synced 2026-09-06 08:06:43 +08:00
更新国际化支持:修正媒体类型文本函数名称并添加通知开关相关文本,提升用户体验
This commit is contained in:
@@ -14,7 +14,7 @@ import SubscribeEditDialog from '../dialog/SubscribeEditDialog.vue'
|
|||||||
import SearchSiteDialog from '@/components/dialog/SearchSiteDialog.vue'
|
import SearchSiteDialog from '@/components/dialog/SearchSiteDialog.vue'
|
||||||
import SubscribeSeasonDialog from '../dialog/SubscribeSeasonDialog.vue'
|
import SubscribeSeasonDialog from '../dialog/SubscribeSeasonDialog.vue'
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
import { getMeidaTypeText } from '@/types/i18n-type'
|
import { getMediaTypeText } from '@/types/i18n-type'
|
||||||
|
|
||||||
// 国际化
|
// 国际化
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
@@ -487,7 +487,7 @@ function onRemoveSubscribe() {
|
|||||||
:class="getChipColor(props.media?.type || '')"
|
:class="getChipColor(props.media?.type || '')"
|
||||||
class="absolute left-2 top-2 bg-opacity-80 text-white font-bold"
|
class="absolute left-2 top-2 bg-opacity-80 text-white font-bold"
|
||||||
>
|
>
|
||||||
{{ getMeidaTypeText(props.media?.type) }}
|
{{ getMediaTypeText(props.media?.type) }}
|
||||||
</VChip>
|
</VChip>
|
||||||
<!-- 本地存在标识 -->
|
<!-- 本地存在标识 -->
|
||||||
<ExistIcon v-if="isExists && !hover.isHovering" />
|
<ExistIcon v-if="isExists && !hover.isHovering" />
|
||||||
|
|||||||
+31
-21
@@ -28,27 +28,6 @@ export default {
|
|||||||
user: 'User',
|
user: 'User',
|
||||||
config: 'Configuration',
|
config: 'Configuration',
|
||||||
},
|
},
|
||||||
mediaserver: {
|
|
||||||
enableMediaServer: 'Enable Media Server',
|
|
||||||
nameRequired: 'Required; cannot be duplicated',
|
|
||||||
serverAlias: 'Media server alias',
|
|
||||||
host: 'Host',
|
|
||||||
hostPlaceholder: 'http(s)://ip:port',
|
|
||||||
hostHint: 'Server address, format: http(s)://ip:port',
|
|
||||||
playHost: 'External Playback URL',
|
|
||||||
playHostPlaceholder: 'http(s)://domain:port',
|
|
||||||
playHostHint: 'URL for playback page redirection, format: http(s)://domain:port',
|
|
||||||
apiKey: 'API Key',
|
|
||||||
embyApiKeyHint: 'API key generated in Emby Settings -> Advanced -> API Keys',
|
|
||||||
jellyfinApiKeyHint: 'API key generated in Jellyfin Settings -> Advanced -> API Keys',
|
|
||||||
plexToken: 'X-Plex-Token',
|
|
||||||
plexTokenHint: 'X-Plex-Token obtained from Plex request URL in browser F12 -> Network',
|
|
||||||
username: 'Username',
|
|
||||||
password: 'Password',
|
|
||||||
syncLibraries: 'Sync Libraries',
|
|
||||||
syncLibrariesHint: 'Only selected libraries will be synchronized',
|
|
||||||
nameExists: '【{name}】 already exists, please use a different name',
|
|
||||||
},
|
|
||||||
mediaType: {
|
mediaType: {
|
||||||
movie: 'Movie',
|
movie: 'Movie',
|
||||||
tv: 'TV Show',
|
tv: 'TV Show',
|
||||||
@@ -56,6 +35,16 @@ export default {
|
|||||||
collection: 'Collection',
|
collection: 'Collection',
|
||||||
unknown: 'Unknown',
|
unknown: 'Unknown',
|
||||||
},
|
},
|
||||||
|
notificationSwitch: {
|
||||||
|
resourceDownload: 'Resource Download',
|
||||||
|
organize: 'Organize',
|
||||||
|
subscribe: 'Subscribe',
|
||||||
|
site: 'Site',
|
||||||
|
mediaServer: 'Media Server',
|
||||||
|
manual: 'Manual',
|
||||||
|
plugin: 'Plugin',
|
||||||
|
other: 'Other',
|
||||||
|
},
|
||||||
theme: {
|
theme: {
|
||||||
light: 'Light',
|
light: 'Light',
|
||||||
dark: 'Dark',
|
dark: 'Dark',
|
||||||
@@ -1756,4 +1745,25 @@ export default {
|
|||||||
unknown: 'Unknown',
|
unknown: 'Unknown',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
mediaserver: {
|
||||||
|
enableMediaServer: 'Enable Media Server',
|
||||||
|
nameRequired: 'Required; cannot be duplicated',
|
||||||
|
serverAlias: 'Media server alias',
|
||||||
|
host: 'Host',
|
||||||
|
hostPlaceholder: 'http(s)://ip:port',
|
||||||
|
hostHint: 'Server address, format: http(s)://ip:port',
|
||||||
|
playHost: 'External Playback URL',
|
||||||
|
playHostPlaceholder: 'http(s)://domain:port',
|
||||||
|
playHostHint: 'URL for playback page redirection, format: http(s)://domain:port',
|
||||||
|
apiKey: 'API Key',
|
||||||
|
embyApiKeyHint: 'API key generated in Emby Settings -> Advanced -> API Keys',
|
||||||
|
jellyfinApiKeyHint: 'API key generated in Jellyfin Settings -> Advanced -> API Keys',
|
||||||
|
plexToken: 'X-Plex-Token',
|
||||||
|
plexTokenHint: 'X-Plex-Token obtained from Plex request URL in browser F12 -> Network',
|
||||||
|
username: 'Username',
|
||||||
|
password: 'Password',
|
||||||
|
syncLibraries: 'Sync Libraries',
|
||||||
|
syncLibrariesHint: 'Only selected libraries will be synchronized',
|
||||||
|
nameExists: '【{name}】 already exists, please use a different name',
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
+31
-21
@@ -28,27 +28,6 @@ export default {
|
|||||||
user: '用户',
|
user: '用户',
|
||||||
config: '配置',
|
config: '配置',
|
||||||
},
|
},
|
||||||
mediaserver: {
|
|
||||||
enableMediaServer: '启用媒体服务器',
|
|
||||||
nameRequired: '必填;不可与其他名称重名',
|
|
||||||
serverAlias: '媒体服务器的别名',
|
|
||||||
host: '地址',
|
|
||||||
hostPlaceholder: 'http(s)://ip:port',
|
|
||||||
hostHint: '服务端地址,格式:http(s)://ip:port',
|
|
||||||
playHost: '外网播放地址',
|
|
||||||
playHostPlaceholder: 'http(s)://domain:port',
|
|
||||||
playHostHint: '跳转播放页面使用的地址,格式:http(s)://domain:port',
|
|
||||||
apiKey: 'API密钥',
|
|
||||||
embyApiKeyHint: 'Emby设置->高级->API密钥中生成的密钥',
|
|
||||||
jellyfinApiKeyHint: 'Jellyfin设置->高级->API密钥中生成的密钥',
|
|
||||||
plexToken: 'X-Plex-Token',
|
|
||||||
plexTokenHint: '浏览器F12->网络,从Plex请求URL中获取的X-Plex-Token',
|
|
||||||
username: '用户名',
|
|
||||||
password: '密码',
|
|
||||||
syncLibraries: '同步媒体库',
|
|
||||||
syncLibrariesHint: '只有选中的媒体库才会被同步',
|
|
||||||
nameExists: '【{name}】已存在,请替换为其他名称',
|
|
||||||
},
|
|
||||||
mediaType: {
|
mediaType: {
|
||||||
movie: '电影',
|
movie: '电影',
|
||||||
tv: '电视剧',
|
tv: '电视剧',
|
||||||
@@ -56,6 +35,16 @@ export default {
|
|||||||
collection: '合集',
|
collection: '合集',
|
||||||
unknown: '未知',
|
unknown: '未知',
|
||||||
},
|
},
|
||||||
|
notificationSwitch: {
|
||||||
|
resourceDownload: '资源下载',
|
||||||
|
organize: '整理入库',
|
||||||
|
subscribe: '订阅',
|
||||||
|
site: '站点',
|
||||||
|
mediaServer: '媒体服务器',
|
||||||
|
manual: '手动处理',
|
||||||
|
plugin: '插件',
|
||||||
|
other: '其它',
|
||||||
|
},
|
||||||
theme: {
|
theme: {
|
||||||
light: '浅色',
|
light: '浅色',
|
||||||
dark: '深色',
|
dark: '深色',
|
||||||
@@ -1726,4 +1715,25 @@ export default {
|
|||||||
mediaType: '媒体类型',
|
mediaType: '媒体类型',
|
||||||
category: '媒体类别',
|
category: '媒体类别',
|
||||||
},
|
},
|
||||||
|
mediaserver: {
|
||||||
|
enableMediaServer: '启用媒体服务器',
|
||||||
|
nameRequired: '必填;不可与其他名称重名',
|
||||||
|
serverAlias: '媒体服务器的别名',
|
||||||
|
host: '地址',
|
||||||
|
hostPlaceholder: 'http(s)://ip:port',
|
||||||
|
hostHint: '服务端地址,格式:http(s)://ip:port',
|
||||||
|
playHost: '外网播放地址',
|
||||||
|
playHostPlaceholder: 'http(s)://domain:port',
|
||||||
|
playHostHint: '跳转播放页面使用的地址,格式:http(s)://domain:port',
|
||||||
|
apiKey: 'API密钥',
|
||||||
|
embyApiKeyHint: 'Emby设置->高级->API密钥中生成的密钥',
|
||||||
|
jellyfinApiKeyHint: 'Jellyfin设置->高级->API密钥中生成的密钥',
|
||||||
|
plexToken: 'X-Plex-Token',
|
||||||
|
plexTokenHint: '浏览器F12->网络,从Plex请求URL中获取的X-Plex-Token',
|
||||||
|
username: '用户名',
|
||||||
|
password: '密码',
|
||||||
|
syncLibraries: '同步媒体库',
|
||||||
|
syncLibrariesHint: '只有选中的媒体库才会被同步',
|
||||||
|
nameExists: '【{name}】已存在,请替换为其他名称',
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
+31
-21
@@ -28,27 +28,6 @@ export default {
|
|||||||
user: '用戶',
|
user: '用戶',
|
||||||
config: '配置',
|
config: '配置',
|
||||||
},
|
},
|
||||||
mediaserver: {
|
|
||||||
enableMediaServer: '啟用媒體伺服器',
|
|
||||||
nameRequired: '必填;不可與其他名稱重名',
|
|
||||||
serverAlias: '媒體伺服器的別名',
|
|
||||||
host: '地址',
|
|
||||||
hostPlaceholder: 'http(s)://ip:port',
|
|
||||||
hostHint: '服務端地址,格式:http(s)://ip:port',
|
|
||||||
playHost: '外網播放地址',
|
|
||||||
playHostPlaceholder: 'http(s)://domain:port',
|
|
||||||
playHostHint: '跳轉播放頁面使用的地址,格式:http(s)://domain:port',
|
|
||||||
apiKey: 'API密鑰',
|
|
||||||
embyApiKeyHint: 'Emby設置->高級->API密鑰中生成的密鑰',
|
|
||||||
jellyfinApiKeyHint: 'Jellyfin設置->高級->API密鑰中生成的密鑰',
|
|
||||||
plexToken: 'X-Plex-Token',
|
|
||||||
plexTokenHint: '瀏覽器F12->網絡,從Plex請求URL中獲取的X-Plex-Token',
|
|
||||||
username: '用戶名',
|
|
||||||
password: '密碼',
|
|
||||||
syncLibraries: '同步媒體庫',
|
|
||||||
syncLibrariesHint: '只有選中的媒體庫才會被同步',
|
|
||||||
nameExists: '【{name}】已存在,請替換為其他名稱',
|
|
||||||
},
|
|
||||||
mediaType: {
|
mediaType: {
|
||||||
movie: '電影',
|
movie: '電影',
|
||||||
tv: '電視劇',
|
tv: '電視劇',
|
||||||
@@ -56,6 +35,16 @@ export default {
|
|||||||
collection: '合集',
|
collection: '合集',
|
||||||
unknown: '未知',
|
unknown: '未知',
|
||||||
},
|
},
|
||||||
|
notificationSwitch: {
|
||||||
|
resourceDownload: '資源下載',
|
||||||
|
organize: '整理入庫',
|
||||||
|
subscribe: '訂閱',
|
||||||
|
site: '站點',
|
||||||
|
mediaServer: '媒體伺服器',
|
||||||
|
manual: '手動處理',
|
||||||
|
plugin: '插件',
|
||||||
|
other: '其它',
|
||||||
|
},
|
||||||
theme: {
|
theme: {
|
||||||
light: '淺色',
|
light: '淺色',
|
||||||
dark: '深色',
|
dark: '深色',
|
||||||
@@ -1721,4 +1710,25 @@ export default {
|
|||||||
shareSuccess: '規則已複製到剪貼板',
|
shareSuccess: '規則已複製到剪貼板',
|
||||||
shareFailed: '規則複製失敗',
|
shareFailed: '規則複製失敗',
|
||||||
},
|
},
|
||||||
|
mediaserver: {
|
||||||
|
enableMediaServer: '啟用媒體伺服器',
|
||||||
|
nameRequired: '必填;不可與其他名稱重名',
|
||||||
|
serverAlias: '媒體伺服器的別名',
|
||||||
|
host: '地址',
|
||||||
|
hostPlaceholder: 'http(s)://ip:port',
|
||||||
|
hostHint: '服務端地址,格式:http(s)://ip:port',
|
||||||
|
playHost: '外網播放地址',
|
||||||
|
playHostPlaceholder: 'http(s)://domain:port',
|
||||||
|
playHostHint: '跳轉播放頁面使用的地址,格式:http(s)://domain:port',
|
||||||
|
apiKey: 'API密鑰',
|
||||||
|
embyApiKeyHint: 'Emby設置->高級->API密鑰中生成的密鑰',
|
||||||
|
jellyfinApiKeyHint: 'Jellyfin設置->高級->API密鑰中生成的密鑰',
|
||||||
|
plexToken: 'X-Plex-Token',
|
||||||
|
plexTokenHint: '瀏覽器F12->網絡,從Plex請求URL中獲取的X-Plex-Token',
|
||||||
|
username: '用戶名',
|
||||||
|
password: '密碼',
|
||||||
|
syncLibraries: '同步媒體庫',
|
||||||
|
syncLibrariesHint: '只有選中的媒體庫才會被同步',
|
||||||
|
nameExists: '【{name}】已存在,請替換為其他名稱',
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
+23
-2
@@ -1,5 +1,5 @@
|
|||||||
// 将中文标签转换为当前语言的标签
|
// MediaType
|
||||||
export function getMeidaTypeText(label: string | undefined) {
|
export function getMediaTypeText(label: string | undefined) {
|
||||||
if (!label) return ''
|
if (!label) return ''
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
@@ -21,3 +21,24 @@ export function getMeidaTypeText(label: string | undefined) {
|
|||||||
// 对于未知的类型,直接返回原始标签
|
// 对于未知的类型,直接返回原始标签
|
||||||
return label
|
return label
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// notificationSwitch
|
||||||
|
export function getNotificationSwitchText(label: string | undefined) {
|
||||||
|
if (!label) return ''
|
||||||
|
|
||||||
|
const { t } = useI18n()
|
||||||
|
|
||||||
|
const switchMap: Record<string, string> = {
|
||||||
|
'资源下载': 'notificationSwitch.resourceDownload',
|
||||||
|
'整理入库': 'notificationSwitch.organize',
|
||||||
|
'订阅': 'notificationSwitch.subscribe',
|
||||||
|
'站点': 'notificationSwitch.site',
|
||||||
|
'媒体服务器': 'notificationSwitch.mediaServer',
|
||||||
|
'手动处理': 'notificationSwitch.manual',
|
||||||
|
'插件': 'notificationSwitch.plugin',
|
||||||
|
'其它': 'notificationSwitch.other',
|
||||||
|
}
|
||||||
|
if (label in switchMap) {
|
||||||
|
return t(switchMap[label])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import type { NotificationConf, NotificationSwitchConf } from '@/api/types'
|
|||||||
import NotificationChannelCard from '@/components/cards/NotificationChannelCard.vue'
|
import NotificationChannelCard from '@/components/cards/NotificationChannelCard.vue'
|
||||||
import ProgressDialog from '@/components/dialog/ProgressDialog.vue'
|
import ProgressDialog from '@/components/dialog/ProgressDialog.vue'
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
|
import { getNotificationSwitchText } from '@/types/i18n-type'
|
||||||
|
|
||||||
// 国际化
|
// 国际化
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
@@ -22,35 +23,35 @@ const progressDialog = ref(false)
|
|||||||
// 消息类型开关
|
// 消息类型开关
|
||||||
const notificationSwitchs = ref<NotificationSwitchConf[]>([
|
const notificationSwitchs = ref<NotificationSwitchConf[]>([
|
||||||
{
|
{
|
||||||
type: t('setting.notification.resourceDownload'),
|
type: '资源下载',
|
||||||
action: 'all',
|
action: 'all',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: t('setting.notification.mediaImport'),
|
type: '整理入库',
|
||||||
action: 'all',
|
action: 'all',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: t('setting.notification.subscription'),
|
type: '订阅',
|
||||||
action: 'all',
|
action: 'all',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: t('setting.notification.site'),
|
type: '站点',
|
||||||
action: 'admin',
|
action: 'admin',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: t('setting.notification.mediaServer'),
|
type: '媒体服务器',
|
||||||
action: 'admin',
|
action: 'admin',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: t('setting.notification.manualProcess'),
|
type: '手动处理',
|
||||||
action: 'admin',
|
action: 'admin',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: t('setting.notification.plugin'),
|
type: '插件',
|
||||||
action: 'admin',
|
action: 'admin',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: t('setting.notification.other'),
|
type: '其它',
|
||||||
action: 'admin',
|
action: 'admin',
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
@@ -256,7 +257,7 @@ onMounted(() => {
|
|||||||
<tbody>
|
<tbody>
|
||||||
<tr v-for="(item, index) in notificationSwitchs" :key="index">
|
<tr v-for="(item, index) in notificationSwitchs" :key="index">
|
||||||
<td>
|
<td>
|
||||||
{{ item.type }}
|
{{ getNotificationSwitchText(item.type) }}
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<VRadioGroup v-model="item.action" inline>
|
<VRadioGroup v-model="item.action" inline>
|
||||||
|
|||||||
Reference in New Issue
Block a user