mirror of
https://github.com/streamyfin/streamyfin.git
synced 2026-06-05 13:38:27 +01:00
Compare commits
6 Commits
fix/tv-see
...
i18n/fr-co
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
def03c0e24 | ||
|
|
ac2bb104e4 | ||
|
|
5d3648e875 | ||
|
|
8def6d3d46 | ||
|
|
e8f21a879c | ||
|
|
badbce34e1 |
1
.github/workflows/linting.yml
vendored
1
.github/workflows/linting.yml
vendored
@@ -97,6 +97,7 @@ jobs:
|
|||||||
- "check"
|
- "check"
|
||||||
- "format"
|
- "format"
|
||||||
- "typecheck"
|
- "typecheck"
|
||||||
|
- "i18n:check"
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: "📥 Checkout PR code"
|
- name: "📥 Checkout PR code"
|
||||||
|
|||||||
@@ -59,19 +59,17 @@ function SettingsMobile() {
|
|||||||
|
|
||||||
<QuickConnect className='mb-4' />
|
<QuickConnect className='mb-4' />
|
||||||
|
|
||||||
{Platform.OS !== "ios" && (
|
<View className='mb-4'>
|
||||||
<View className='mb-4'>
|
<ListGroup title={t("pairing.pair_with_phone_title")}>
|
||||||
<ListGroup title={t("pairing.pair_with_phone_title")}>
|
<ListItem
|
||||||
<ListItem
|
onPress={() =>
|
||||||
onPress={() =>
|
router.push("/(auth)/(tabs)/(home)/companion-login")
|
||||||
router.push("/(auth)/(tabs)/(home)/companion-login")
|
}
|
||||||
}
|
title={t("pairing.pair_with_phone")}
|
||||||
title={t("pairing.pair_with_phone")}
|
textColor='blue'
|
||||||
textColor='blue'
|
/>
|
||||||
/>
|
</ListGroup>
|
||||||
</ListGroup>
|
</View>
|
||||||
</View>
|
|
||||||
)}
|
|
||||||
|
|
||||||
<View className='mb-4'>
|
<View className='mb-4'>
|
||||||
<AppLanguageSelector />
|
<AppLanguageSelector />
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { useQueryClient } from "@tanstack/react-query";
|
|||||||
import { Directory, Paths } from "expo-file-system";
|
import { Directory, Paths } from "expo-file-system";
|
||||||
import { Image } from "expo-image";
|
import { Image } from "expo-image";
|
||||||
import { useAtom } from "jotai";
|
import { useAtom } from "jotai";
|
||||||
import { useCallback, useMemo, useState } from "react";
|
import { useMemo, useState } from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { Alert, ScrollView, View } from "react-native";
|
import { Alert, ScrollView, View } from "react-native";
|
||||||
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
||||||
@@ -21,8 +21,6 @@ import {
|
|||||||
TVSettingsToggle,
|
TVSettingsToggle,
|
||||||
} from "@/components/tv";
|
} from "@/components/tv";
|
||||||
import { useScaledTVTypography } from "@/constants/TVTypography";
|
import { useScaledTVTypography } from "@/constants/TVTypography";
|
||||||
import { useJellyseerr } from "@/hooks/useJellyseerr";
|
|
||||||
import { useJellyseerrConnect } from "@/hooks/useJellyseerrConnect";
|
|
||||||
import { useTVOptionModal } from "@/hooks/useTVOptionModal";
|
import { useTVOptionModal } from "@/hooks/useTVOptionModal";
|
||||||
import { useTVUserSwitchModal } from "@/hooks/useTVUserSwitchModal";
|
import { useTVUserSwitchModal } from "@/hooks/useTVUserSwitchModal";
|
||||||
import { APP_LANGUAGES } from "@/i18n";
|
import { APP_LANGUAGES } from "@/i18n";
|
||||||
@@ -61,37 +59,6 @@ export default function SettingsTV() {
|
|||||||
const { showUserSwitchModal } = useTVUserSwitchModal();
|
const { showUserSwitchModal } = useTVUserSwitchModal();
|
||||||
const typography = useScaledTVTypography();
|
const typography = useScaledTVTypography();
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
const { jellyseerrApi, clearAllJellyseerData } = useJellyseerr();
|
|
||||||
const { connecting: jellyseerrConnecting, connect: jellyseerrConnect } =
|
|
||||||
useJellyseerrConnect();
|
|
||||||
|
|
||||||
// Jellyseerr state
|
|
||||||
const [jellyseerrServerUrl, setJellyseerrServerUrl] = useState(
|
|
||||||
settings.jellyseerrServerUrl || "",
|
|
||||||
);
|
|
||||||
const [jellyseerrPassword, setJellyseerrPassword] = useState("");
|
|
||||||
const { pluginSettings } = useSettings();
|
|
||||||
|
|
||||||
const isJellyseerrLocked =
|
|
||||||
pluginSettings?.jellyseerrServerUrl?.locked === true;
|
|
||||||
const isJellyseerrConnected = !!jellyseerrApi;
|
|
||||||
|
|
||||||
const handleJellyseerrUrlBlur = useCallback(() => {
|
|
||||||
const url = jellyseerrServerUrl.trim();
|
|
||||||
updateSettings({ jellyseerrServerUrl: url || undefined });
|
|
||||||
}, [jellyseerrServerUrl, updateSettings]);
|
|
||||||
|
|
||||||
const handleJellyseerrConnect = useCallback(async () => {
|
|
||||||
const url = jellyseerrServerUrl.trim();
|
|
||||||
if (!url) return;
|
|
||||||
await jellyseerrConnect(url, jellyseerrPassword);
|
|
||||||
}, [jellyseerrServerUrl, jellyseerrPassword, jellyseerrConnect]);
|
|
||||||
|
|
||||||
const handleDisconnectJellyseerr = useCallback(() => {
|
|
||||||
clearAllJellyseerData();
|
|
||||||
setJellyseerrServerUrl("");
|
|
||||||
setJellyseerrPassword("");
|
|
||||||
}, [clearAllJellyseerData]);
|
|
||||||
|
|
||||||
// Local state for OpenSubtitles API key (only commit on blur)
|
// Local state for OpenSubtitles API key (only commit on blur)
|
||||||
const [openSubtitlesApiKey, setOpenSubtitlesApiKey] = useState(
|
const [openSubtitlesApiKey, setOpenSubtitlesApiKey] = useState(
|
||||||
@@ -916,81 +883,6 @@ export default function SettingsTV() {
|
|||||||
onToggle={(value) => updateSettings({ tvThemeMusicEnabled: value })}
|
onToggle={(value) => updateSettings({ tvThemeMusicEnabled: value })}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{/* seerr Section */}
|
|
||||||
<TVSectionHeader title='seerr' />
|
|
||||||
<Text
|
|
||||||
style={{
|
|
||||||
color: "#9CA3AF",
|
|
||||||
fontSize: typography.callout - 2,
|
|
||||||
marginBottom: 16,
|
|
||||||
marginLeft: 8,
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
{t("home.settings.plugins.jellyseerr.server_url_hint") ||
|
|
||||||
"Enter your Jellyseerr server URL to enable discover and request features."}
|
|
||||||
</Text>
|
|
||||||
<TVSettingsTextInput
|
|
||||||
label={
|
|
||||||
t("home.settings.plugins.jellyseerr.server_url") || "Server URL"
|
|
||||||
}
|
|
||||||
value={jellyseerrServerUrl}
|
|
||||||
placeholder={
|
|
||||||
t("home.settings.plugins.jellyseerr.server_url_placeholder") ||
|
|
||||||
"https://jellyseerr.example.com"
|
|
||||||
}
|
|
||||||
onChangeText={setJellyseerrServerUrl}
|
|
||||||
onBlur={handleJellyseerrUrlBlur}
|
|
||||||
disabled={isJellyseerrLocked || jellyseerrConnecting}
|
|
||||||
/>
|
|
||||||
{!isJellyseerrConnected && !isJellyseerrLocked && (
|
|
||||||
<>
|
|
||||||
<TVSettingsTextInput
|
|
||||||
label={
|
|
||||||
t("home.settings.plugins.jellyseerr.password") || "Password"
|
|
||||||
}
|
|
||||||
value={jellyseerrPassword}
|
|
||||||
placeholder={
|
|
||||||
t("home.settings.plugins.jellyseerr.password_placeholder", {
|
|
||||||
username: user?.Name,
|
|
||||||
}) || `Jellyfin password`
|
|
||||||
}
|
|
||||||
onChangeText={setJellyseerrPassword}
|
|
||||||
secureTextEntry
|
|
||||||
disabled={jellyseerrConnecting}
|
|
||||||
/>
|
|
||||||
<TVSettingsOptionButton
|
|
||||||
label={
|
|
||||||
jellyseerrConnecting
|
|
||||||
? t("common.connecting", "Connecting...") || "Connecting..."
|
|
||||||
: t("common.connect", "Connect") || "Connect"
|
|
||||||
}
|
|
||||||
value=''
|
|
||||||
onPress={handleJellyseerrConnect}
|
|
||||||
disabled={jellyseerrConnecting}
|
|
||||||
/>
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
<TVSettingsRow
|
|
||||||
label={
|
|
||||||
isJellyseerrConnected
|
|
||||||
? t("common.connected", "Connected") || "Connected"
|
|
||||||
: t("common.not_connected", "Not connected") || "Not connected"
|
|
||||||
}
|
|
||||||
value=''
|
|
||||||
showChevron={false}
|
|
||||||
/>
|
|
||||||
{isJellyseerrConnected && !isJellyseerrLocked && (
|
|
||||||
<TVSettingsOptionButton
|
|
||||||
label={
|
|
||||||
t(
|
|
||||||
"home.settings.plugins.jellyseerr.reset_jellyseerr_config_button",
|
|
||||||
) || "Disconnect"
|
|
||||||
}
|
|
||||||
value=''
|
|
||||||
onPress={handleDisconnectJellyseerr}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
|
|
||||||
{/* Storage Section */}
|
{/* Storage Section */}
|
||||||
<TVSectionHeader title={t("home.settings.storage.storage_title")} />
|
<TVSectionHeader title={t("home.settings.storage.storage_title")} />
|
||||||
<TVSettingsOptionButton
|
<TVSettingsOptionButton
|
||||||
|
|||||||
@@ -114,7 +114,7 @@ export default function StreamystatsPage() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleRefreshFromServer = useCallback(async () => {
|
const handleRefreshFromServer = useCallback(async () => {
|
||||||
const newPluginSettings = await refreshStreamyfinPluginSettings();
|
const newPluginSettings = await refreshStreamyfinPluginSettings(true);
|
||||||
// Update local state with new values
|
// Update local state with new values
|
||||||
const newUrl = newPluginSettings?.streamyStatsServerUrl?.value || "";
|
const newUrl = newPluginSettings?.streamyStatsServerUrl?.value || "";
|
||||||
setUrl(newUrl);
|
setUrl(newUrl);
|
||||||
|
|||||||
@@ -166,7 +166,7 @@ export default function IndexLayout() {
|
|||||||
open={dropdownOpen}
|
open={dropdownOpen}
|
||||||
onOpenChange={setDropdownOpen}
|
onOpenChange={setDropdownOpen}
|
||||||
trigger={
|
trigger={
|
||||||
<View>
|
<View className='pl-1.5'>
|
||||||
<Ionicons
|
<Ionicons
|
||||||
name='ellipsis-horizontal-outline'
|
name='ellipsis-horizontal-outline'
|
||||||
size={24}
|
size={24}
|
||||||
|
|||||||
@@ -40,8 +40,6 @@ const Layout = () => {
|
|||||||
keyboardDismissMode='none'
|
keyboardDismissMode='none'
|
||||||
screenOptions={{
|
screenOptions={{
|
||||||
tabBarBounces: true,
|
tabBarBounces: true,
|
||||||
tabBarActiveTintColor: "#FFFFFF",
|
|
||||||
tabBarInactiveTintColor: "#9CA3AF",
|
|
||||||
tabBarLabelStyle: {
|
tabBarLabelStyle: {
|
||||||
fontSize: TAB_LABEL_FONT_SIZE,
|
fontSize: TAB_LABEL_FONT_SIZE,
|
||||||
fontWeight: "600",
|
fontWeight: "600",
|
||||||
|
|||||||
@@ -274,11 +274,6 @@ export default function DirectPlayerPage() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (itemId) {
|
if (itemId) {
|
||||||
setItem(null);
|
|
||||||
setDownloadedItem(null);
|
|
||||||
// Clear the previous episode's stream so the loader gate stays closed
|
|
||||||
// until the new item's stream resolves (avoids a stale MPV source frame).
|
|
||||||
setStream(null);
|
|
||||||
fetchItemData();
|
fetchItemData();
|
||||||
}
|
}
|
||||||
}, [itemId, offline, api, user?.Id]);
|
}, [itemId, offline, api, user?.Id]);
|
||||||
@@ -321,12 +316,6 @@ export default function DirectPlayerPage() {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ensure item matches the current itemId to avoid race conditions
|
|
||||||
if (item.Id !== itemId) {
|
|
||||||
setStreamStatus({ isLoading: false, isError: false });
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
let result: Stream | null = null;
|
let result: Stream | null = null;
|
||||||
if (offline && downloadedItem?.mediaSource) {
|
if (offline && downloadedItem?.mediaSource) {
|
||||||
const url = downloadedItem.videoFilePath;
|
const url = downloadedItem.videoFilePath;
|
||||||
@@ -399,7 +388,6 @@ export default function DirectPlayerPage() {
|
|||||||
item,
|
item,
|
||||||
user?.Id,
|
user?.Id,
|
||||||
downloadedItem,
|
downloadedItem,
|
||||||
offline,
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
@@ -1,7 +1,13 @@
|
|||||||
import { Ionicons } from "@expo/vector-icons";
|
import { Ionicons } from "@expo/vector-icons";
|
||||||
import { BottomSheetScrollView } from "@gorhom/bottom-sheet";
|
import { BottomSheetScrollView } from "@gorhom/bottom-sheet";
|
||||||
import React, { useEffect } from "react";
|
import React, { useEffect, useState } from "react";
|
||||||
import { Platform, StyleSheet, TouchableOpacity, View } from "react-native";
|
import {
|
||||||
|
type LayoutChangeEvent,
|
||||||
|
Platform,
|
||||||
|
StyleSheet,
|
||||||
|
TouchableOpacity,
|
||||||
|
View,
|
||||||
|
} from "react-native";
|
||||||
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
||||||
import { Text } from "@/components/common/Text";
|
import { Text } from "@/components/common/Text";
|
||||||
import { useGlobalModal } from "@/providers/GlobalModalProvider";
|
import { useGlobalModal } from "@/providers/GlobalModalProvider";
|
||||||
@@ -211,6 +217,24 @@ const PlatformDropdownComponent = ({
|
|||||||
}: PlatformDropdownProps) => {
|
}: PlatformDropdownProps) => {
|
||||||
const { showModal, hideModal, isVisible } = useGlobalModal();
|
const { showModal, hideModal, isVisible } = useGlobalModal();
|
||||||
|
|
||||||
|
// @expo/ui's <Host> (SDK 55) fills its available space by default, and
|
||||||
|
// `matchContents` doesn't help here: it reports the native Menu's size via
|
||||||
|
// setStyleSize and overrides any explicit size. Instead we measure the
|
||||||
|
// trigger's intrinsic size in plain RN (off-layout) and pin it on the Host.
|
||||||
|
const [triggerSize, setTriggerSize] = useState<{
|
||||||
|
width: number;
|
||||||
|
height: number;
|
||||||
|
} | null>(null);
|
||||||
|
|
||||||
|
const handleMeasureTrigger = (e: LayoutChangeEvent) => {
|
||||||
|
const { width, height } = e.nativeEvent.layout;
|
||||||
|
setTriggerSize((prev) =>
|
||||||
|
prev && prev.width === width && prev.height === height
|
||||||
|
? prev
|
||||||
|
: { width, height },
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
// Handle controlled open state for Android
|
// Handle controlled open state for Android
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (Platform.OS === "android" && controlledOpen === true) {
|
if (Platform.OS === "android" && controlledOpen === true) {
|
||||||
@@ -241,11 +265,25 @@ const PlatformDropdownComponent = ({
|
|||||||
}, [isVisible, controlledOpen, controlledOnOpenChange]);
|
}, [isVisible, controlledOpen, controlledOnOpenChange]);
|
||||||
|
|
||||||
if (Platform.OS === "ios" && !Platform.isTV) {
|
if (Platform.OS === "ios" && !Platform.isTV) {
|
||||||
// @expo/ui's <Host> can't size to content, so an in-flow invisible copy of
|
// Pin the wrapper to the measured trigger size. @expo/ui's <Host> (SDK 55)
|
||||||
// the trigger sizes the wrapper while the Host overlays the real Menu.
|
// fills its parent and reports its own size via setStyleSize, so it can't
|
||||||
|
// size itself to content. If the wrapper has no size, the Host's `flex: 1`
|
||||||
|
// height depends on the parent while the parent depends on the Host — a
|
||||||
|
// circular dependency that collapses to 0 for any selector nested more than
|
||||||
|
// one level deep (so only the first, shallowest dropdown stays visible).
|
||||||
|
// Giving the wrapper the measured size breaks the cycle; the Host then
|
||||||
|
// fills a concrete box.
|
||||||
return (
|
return (
|
||||||
<View>
|
<View style={triggerSize ?? { opacity: 0 }}>
|
||||||
<View pointerEvents='none' aria-hidden style={{ opacity: 0 }}>
|
{/* Hidden measurer: lays the trigger out off-flow to capture its
|
||||||
|
intrinsic size. Absolutely positioned WITHOUT right/bottom so it
|
||||||
|
sizes to the trigger's content rather than to its parent. */}
|
||||||
|
<View
|
||||||
|
style={{ position: "absolute", top: 0, left: 0, opacity: 0 }}
|
||||||
|
pointerEvents='none'
|
||||||
|
aria-hidden
|
||||||
|
onLayout={handleMeasureTrigger}
|
||||||
|
>
|
||||||
{trigger}
|
{trigger}
|
||||||
</View>
|
</View>
|
||||||
<Host style={[StyleSheet.absoluteFill, expoUIConfig?.hostStyle as any]}>
|
<Host style={[StyleSheet.absoluteFill, expoUIConfig?.hostStyle as any]}>
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import { useTranslation } from "react-i18next";
|
|||||||
import { FlatList, Modal, Pressable, StyleSheet, View } from "react-native";
|
import { FlatList, Modal, Pressable, StyleSheet, View } from "react-native";
|
||||||
import { Text } from "@/components/common/Text";
|
import { Text } from "@/components/common/Text";
|
||||||
import { Colors } from "@/constants/Colors";
|
import { Colors } from "@/constants/Colors";
|
||||||
import { useControlsSafeAreaInsets } from "@/hooks/useControlsSafeAreaInsets";
|
|
||||||
import {
|
import {
|
||||||
type ChapterEntry,
|
type ChapterEntry,
|
||||||
chapterStartsMs,
|
chapterStartsMs,
|
||||||
@@ -39,7 +38,6 @@ function ChapterListComponent({
|
|||||||
onClose,
|
onClose,
|
||||||
}: ChapterListProps) {
|
}: ChapterListProps) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const safeArea = useControlsSafeAreaInsets();
|
|
||||||
const listRef = useRef<FlatList<ChapterEntry>>(null);
|
const listRef = useRef<FlatList<ChapterEntry>>(null);
|
||||||
|
|
||||||
const entries = useMemo(() => sortedChapters(chapters), [chapters]);
|
const entries = useMemo(() => sortedChapters(chapters), [chapters]);
|
||||||
@@ -81,17 +79,7 @@ function ChapterListComponent({
|
|||||||
supportedOrientations={["portrait", "landscape"]}
|
supportedOrientations={["portrait", "landscape"]}
|
||||||
>
|
>
|
||||||
<Pressable onPress={onClose} style={styles.backdrop}>
|
<Pressable onPress={onClose} style={styles.backdrop}>
|
||||||
<Pressable
|
<Pressable onPress={(e) => e.stopPropagation()} style={styles.sheet}>
|
||||||
onPress={(e) => e.stopPropagation()}
|
|
||||||
style={[
|
|
||||||
styles.sheet,
|
|
||||||
{
|
|
||||||
marginLeft: safeArea.left,
|
|
||||||
marginRight: safeArea.right,
|
|
||||||
paddingBottom: safeArea.bottom,
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
>
|
|
||||||
<View style={styles.header}>
|
<View style={styles.header}>
|
||||||
<Text style={styles.title}>{t("chapters.title")}</Text>
|
<Text style={styles.title}>{t("chapters.title")}</Text>
|
||||||
<Pressable
|
<Pressable
|
||||||
@@ -172,12 +160,14 @@ const styles = StyleSheet.create({
|
|||||||
backdrop: {
|
backdrop: {
|
||||||
flex: 1,
|
flex: 1,
|
||||||
justifyContent: "flex-end",
|
justifyContent: "flex-end",
|
||||||
|
backgroundColor: "rgba(0,0,0,0.6)",
|
||||||
},
|
},
|
||||||
sheet: {
|
sheet: {
|
||||||
backgroundColor: Colors.background,
|
backgroundColor: Colors.background,
|
||||||
borderTopLeftRadius: 16,
|
borderTopLeftRadius: 16,
|
||||||
borderTopRightRadius: 16,
|
borderTopRightRadius: 16,
|
||||||
maxHeight: "70%",
|
maxHeight: "70%",
|
||||||
|
paddingBottom: 24,
|
||||||
},
|
},
|
||||||
header: {
|
header: {
|
||||||
flexDirection: "row",
|
flexDirection: "row",
|
||||||
|
|||||||
@@ -133,6 +133,7 @@ const HomeMobile = () => {
|
|||||||
onPress={() => {
|
onPress={() => {
|
||||||
router.push("/(auth)/downloads");
|
router.push("/(auth)/downloads");
|
||||||
}}
|
}}
|
||||||
|
className='ml-1.5'
|
||||||
style={{ marginRight: Platform.OS === "android" ? 16 : 0 }}
|
style={{ marginRight: Platform.OS === "android" ? 16 : 0 }}
|
||||||
>
|
>
|
||||||
<Feather
|
<Feather
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import { useTranslation } from "react-i18next";
|
|||||||
import { Animated, FlatList, Pressable, View } from "react-native";
|
import { Animated, FlatList, Pressable, View } from "react-native";
|
||||||
import { Text } from "@/components/common/Text";
|
import { Text } from "@/components/common/Text";
|
||||||
import { useTVFocusAnimation } from "@/components/tv/hooks/useTVFocusAnimation";
|
import { useTVFocusAnimation } from "@/components/tv/hooks/useTVFocusAnimation";
|
||||||
import { useScaledTVSizes } from "@/constants/TVSizes";
|
|
||||||
import { useScaledTVTypography } from "@/constants/TVTypography";
|
import { useScaledTVTypography } from "@/constants/TVTypography";
|
||||||
import useRouter from "@/hooks/useAppRouter";
|
import useRouter from "@/hooks/useAppRouter";
|
||||||
import {
|
import {
|
||||||
@@ -23,6 +22,8 @@ import type {
|
|||||||
TvResult,
|
TvResult,
|
||||||
} from "@/utils/jellyseerr/server/models/Search";
|
} from "@/utils/jellyseerr/server/models/Search";
|
||||||
|
|
||||||
|
const SCALE_PADDING = 20;
|
||||||
|
|
||||||
interface TVDiscoverPosterProps {
|
interface TVDiscoverPosterProps {
|
||||||
item: MovieResult | TvResult;
|
item: MovieResult | TvResult;
|
||||||
isFirstItem?: boolean;
|
isFirstItem?: boolean;
|
||||||
@@ -33,7 +34,6 @@ const TVDiscoverPoster: React.FC<TVDiscoverPosterProps> = ({
|
|||||||
isFirstItem = false,
|
isFirstItem = false,
|
||||||
}) => {
|
}) => {
|
||||||
const typography = useScaledTVTypography();
|
const typography = useScaledTVTypography();
|
||||||
const sizes = useScaledTVSizes();
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const { jellyseerrApi, getTitle, getYear } = useJellyseerr();
|
const { jellyseerrApi, getTitle, getYear } = useJellyseerr();
|
||||||
const { focused, handleFocus, handleBlur, animatedStyle } =
|
const { focused, handleFocus, handleBlur, animatedStyle } =
|
||||||
@@ -50,8 +50,6 @@ const TVDiscoverPoster: React.FC<TVDiscoverPosterProps> = ({
|
|||||||
item.mediaInfo?.status === MediaStatus.AVAILABLE ||
|
item.mediaInfo?.status === MediaStatus.AVAILABLE ||
|
||||||
item.mediaInfo?.status === MediaStatus.PARTIALLY_AVAILABLE;
|
item.mediaInfo?.status === MediaStatus.PARTIALLY_AVAILABLE;
|
||||||
|
|
||||||
const posterWidth = sizes.posters.poster;
|
|
||||||
|
|
||||||
const handlePress = () => {
|
const handlePress = () => {
|
||||||
router.push({
|
router.push({
|
||||||
pathname: "/(auth)/(tabs)/(search)/jellyseerr/page",
|
pathname: "/(auth)/(tabs)/(search)/jellyseerr/page",
|
||||||
@@ -73,7 +71,7 @@ const TVDiscoverPoster: React.FC<TVDiscoverPosterProps> = ({
|
|||||||
style={[
|
style={[
|
||||||
animatedStyle,
|
animatedStyle,
|
||||||
{
|
{
|
||||||
width: posterWidth,
|
width: 210,
|
||||||
shadowColor: "#fff",
|
shadowColor: "#fff",
|
||||||
shadowOffset: { width: 0, height: 0 },
|
shadowOffset: { width: 0, height: 0 },
|
||||||
shadowOpacity: focused ? 0.6 : 0,
|
shadowOpacity: focused ? 0.6 : 0,
|
||||||
@@ -83,9 +81,9 @@ const TVDiscoverPoster: React.FC<TVDiscoverPosterProps> = ({
|
|||||||
>
|
>
|
||||||
<View
|
<View
|
||||||
style={{
|
style={{
|
||||||
width: posterWidth,
|
width: 210,
|
||||||
aspectRatio: 10 / 15,
|
aspectRatio: 10 / 15,
|
||||||
borderRadius: sizes.gaps.small,
|
borderRadius: 24,
|
||||||
overflow: "hidden",
|
overflow: "hidden",
|
||||||
backgroundColor: "rgba(255,255,255,0.1)",
|
backgroundColor: "rgba(255,255,255,0.1)",
|
||||||
}}
|
}}
|
||||||
@@ -142,12 +140,12 @@ const TVDiscoverPoster: React.FC<TVDiscoverPosterProps> = ({
|
|||||||
>
|
>
|
||||||
{title}
|
{title}
|
||||||
</Text>
|
</Text>
|
||||||
{year != null && (
|
{year && (
|
||||||
<Text
|
<Text
|
||||||
style={{
|
style={{
|
||||||
fontSize: typography.callout,
|
fontSize: typography.callout,
|
||||||
color: "#9CA3AF",
|
color: "#9CA3AF",
|
||||||
marginTop: sizes.gaps.small,
|
marginTop: 2,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{year}
|
{year}
|
||||||
@@ -168,7 +166,6 @@ export const TVDiscoverSlide: React.FC<TVDiscoverSlideProps> = ({
|
|||||||
isFirstSlide = false,
|
isFirstSlide = false,
|
||||||
}) => {
|
}) => {
|
||||||
const typography = useScaledTVTypography();
|
const typography = useScaledTVTypography();
|
||||||
const sizes = useScaledTVSizes();
|
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const { jellyseerrApi, isJellyseerrMovieOrTvResult } = useJellyseerr();
|
const { jellyseerrApi, isJellyseerrMovieOrTvResult } = useJellyseerr();
|
||||||
|
|
||||||
@@ -234,14 +231,14 @@ export const TVDiscoverSlide: React.FC<TVDiscoverSlideProps> = ({
|
|||||||
if (!flatData || flatData.length === 0) return null;
|
if (!flatData || flatData.length === 0) return null;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View style={{ marginBottom: sizes.gaps.section }}>
|
<View style={{ marginBottom: 24 }}>
|
||||||
<Text
|
<Text
|
||||||
style={{
|
style={{
|
||||||
fontSize: typography.heading,
|
fontSize: typography.heading,
|
||||||
fontWeight: "bold",
|
fontWeight: "bold",
|
||||||
color: "#FFFFFF",
|
color: "#FFFFFF",
|
||||||
marginBottom: sizes.gaps.small,
|
marginBottom: 16,
|
||||||
marginLeft: sizes.padding.scale,
|
marginLeft: SCALE_PADDING,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{slideTitle}
|
{slideTitle}
|
||||||
@@ -252,9 +249,9 @@ export const TVDiscoverSlide: React.FC<TVDiscoverSlideProps> = ({
|
|||||||
keyExtractor={(item) => item.id.toString()}
|
keyExtractor={(item) => item.id.toString()}
|
||||||
showsHorizontalScrollIndicator={false}
|
showsHorizontalScrollIndicator={false}
|
||||||
contentContainerStyle={{
|
contentContainerStyle={{
|
||||||
paddingHorizontal: sizes.padding.scale,
|
paddingHorizontal: SCALE_PADDING,
|
||||||
paddingVertical: sizes.padding.scale,
|
paddingVertical: SCALE_PADDING,
|
||||||
gap: sizes.gaps.item,
|
gap: 20,
|
||||||
}}
|
}}
|
||||||
style={{ overflow: "visible" }}
|
style={{ overflow: "visible" }}
|
||||||
onEndReached={() => {
|
onEndReached={() => {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { t } from "i18next";
|
import { t } from "i18next";
|
||||||
import React, { useCallback, useState } from "react";
|
import React, { useCallback, useState } from "react";
|
||||||
import { Platform, ScrollView, View } from "react-native";
|
import { ScrollView, View } from "react-native";
|
||||||
import { Button } from "@/components/Button";
|
import { Button } from "@/components/Button";
|
||||||
import { Text } from "@/components/common/Text";
|
import { Text } from "@/components/common/Text";
|
||||||
import { useScaledTVTypography } from "@/constants/TVTypography";
|
import { useScaledTVTypography } from "@/constants/TVTypography";
|
||||||
@@ -107,7 +107,7 @@ export const TVAddServerForm: React.FC<TVAddServerFormProps> = ({
|
|||||||
</View>
|
</View>
|
||||||
|
|
||||||
{/* Pair with Phone */}
|
{/* Pair with Phone */}
|
||||||
{Platform.OS !== "ios" && onStartPairing && (
|
{onStartPairing && (
|
||||||
<View>
|
<View>
|
||||||
<Button
|
<Button
|
||||||
onPress={onStartPairing}
|
onPress={onStartPairing}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import { useTranslation } from "react-i18next";
|
|||||||
import { Animated, FlatList, Pressable, View } from "react-native";
|
import { Animated, FlatList, Pressable, View } from "react-native";
|
||||||
import { Text } from "@/components/common/Text";
|
import { Text } from "@/components/common/Text";
|
||||||
import { useTVFocusAnimation } from "@/components/tv/hooks/useTVFocusAnimation";
|
import { useTVFocusAnimation } from "@/components/tv/hooks/useTVFocusAnimation";
|
||||||
import { useScaledTVSizes } from "@/constants/TVSizes";
|
|
||||||
import { useScaledTVTypography } from "@/constants/TVTypography";
|
import { useScaledTVTypography } from "@/constants/TVTypography";
|
||||||
import { useJellyseerr } from "@/hooks/useJellyseerr";
|
import { useJellyseerr } from "@/hooks/useJellyseerr";
|
||||||
import { MediaStatus } from "@/utils/jellyseerr/server/constants/media";
|
import { MediaStatus } from "@/utils/jellyseerr/server/constants/media";
|
||||||
@@ -15,6 +14,8 @@ import type {
|
|||||||
TvResult,
|
TvResult,
|
||||||
} from "@/utils/jellyseerr/server/models/Search";
|
} from "@/utils/jellyseerr/server/models/Search";
|
||||||
|
|
||||||
|
const SCALE_PADDING = 20;
|
||||||
|
|
||||||
interface TVJellyseerrPosterProps {
|
interface TVJellyseerrPosterProps {
|
||||||
item: MovieResult | TvResult;
|
item: MovieResult | TvResult;
|
||||||
onPress: () => void;
|
onPress: () => void;
|
||||||
@@ -27,7 +28,6 @@ const TVJellyseerrPoster: React.FC<TVJellyseerrPosterProps> = ({
|
|||||||
isFirstItem = false,
|
isFirstItem = false,
|
||||||
}) => {
|
}) => {
|
||||||
const typography = useScaledTVTypography();
|
const typography = useScaledTVTypography();
|
||||||
const sizes = useScaledTVSizes();
|
|
||||||
const { jellyseerrApi, getTitle, getYear } = useJellyseerr();
|
const { jellyseerrApi, getTitle, getYear } = useJellyseerr();
|
||||||
const { focused, handleFocus, handleBlur, animatedStyle } =
|
const { focused, handleFocus, handleBlur, animatedStyle } =
|
||||||
useTVFocusAnimation({ scaleAmount: 1.05 });
|
useTVFocusAnimation({ scaleAmount: 1.05 });
|
||||||
@@ -43,8 +43,6 @@ const TVJellyseerrPoster: React.FC<TVJellyseerrPosterProps> = ({
|
|||||||
item.mediaInfo?.status === MediaStatus.AVAILABLE ||
|
item.mediaInfo?.status === MediaStatus.AVAILABLE ||
|
||||||
item.mediaInfo?.status === MediaStatus.PARTIALLY_AVAILABLE;
|
item.mediaInfo?.status === MediaStatus.PARTIALLY_AVAILABLE;
|
||||||
|
|
||||||
const posterWidth = sizes.posters.poster;
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Pressable
|
<Pressable
|
||||||
onPress={onPress}
|
onPress={onPress}
|
||||||
@@ -56,7 +54,7 @@ const TVJellyseerrPoster: React.FC<TVJellyseerrPosterProps> = ({
|
|||||||
style={[
|
style={[
|
||||||
animatedStyle,
|
animatedStyle,
|
||||||
{
|
{
|
||||||
width: posterWidth,
|
width: 210,
|
||||||
shadowColor: "#fff",
|
shadowColor: "#fff",
|
||||||
shadowOffset: { width: 0, height: 0 },
|
shadowOffset: { width: 0, height: 0 },
|
||||||
shadowOpacity: focused ? 0.6 : 0,
|
shadowOpacity: focused ? 0.6 : 0,
|
||||||
@@ -66,9 +64,9 @@ const TVJellyseerrPoster: React.FC<TVJellyseerrPosterProps> = ({
|
|||||||
>
|
>
|
||||||
<View
|
<View
|
||||||
style={{
|
style={{
|
||||||
width: posterWidth,
|
width: 210,
|
||||||
aspectRatio: 10 / 15,
|
aspectRatio: 10 / 15,
|
||||||
borderRadius: sizes.gaps.small,
|
borderRadius: 24,
|
||||||
overflow: "hidden",
|
overflow: "hidden",
|
||||||
backgroundColor: "rgba(255,255,255,0.1)",
|
backgroundColor: "rgba(255,255,255,0.1)",
|
||||||
}}
|
}}
|
||||||
@@ -119,13 +117,13 @@ const TVJellyseerrPoster: React.FC<TVJellyseerrPosterProps> = ({
|
|||||||
fontSize: typography.callout,
|
fontSize: typography.callout,
|
||||||
color: "#fff",
|
color: "#fff",
|
||||||
fontWeight: "600",
|
fontWeight: "600",
|
||||||
marginTop: sizes.gaps.small,
|
marginTop: 12,
|
||||||
}}
|
}}
|
||||||
numberOfLines={2}
|
numberOfLines={2}
|
||||||
>
|
>
|
||||||
{title}
|
{title}
|
||||||
</Text>
|
</Text>
|
||||||
{year != null && (
|
{year && (
|
||||||
<Text
|
<Text
|
||||||
style={{
|
style={{
|
||||||
fontSize: typography.callout,
|
fontSize: typography.callout,
|
||||||
@@ -151,7 +149,6 @@ const TVJellyseerrPersonPoster: React.FC<TVJellyseerrPersonPosterProps> = ({
|
|||||||
onPress,
|
onPress,
|
||||||
}) => {
|
}) => {
|
||||||
const typography = useScaledTVTypography();
|
const typography = useScaledTVTypography();
|
||||||
const sizes = useScaledTVSizes();
|
|
||||||
const { jellyseerrApi } = useJellyseerr();
|
const { jellyseerrApi } = useJellyseerr();
|
||||||
const { focused, handleFocus, handleBlur, animatedStyle } =
|
const { focused, handleFocus, handleBlur, animatedStyle } =
|
||||||
useTVFocusAnimation();
|
useTVFocusAnimation();
|
||||||
@@ -160,15 +157,13 @@ const TVJellyseerrPersonPoster: React.FC<TVJellyseerrPersonPosterProps> = ({
|
|||||||
? jellyseerrApi?.imageProxy(item.profilePath, "w185")
|
? jellyseerrApi?.imageProxy(item.profilePath, "w185")
|
||||||
: null;
|
: null;
|
||||||
|
|
||||||
const avatarSize = Math.round(sizes.posters.poster * 0.67);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Pressable onPress={onPress} onFocus={handleFocus} onBlur={handleBlur}>
|
<Pressable onPress={onPress} onFocus={handleFocus} onBlur={handleBlur}>
|
||||||
<Animated.View
|
<Animated.View
|
||||||
style={[
|
style={[
|
||||||
animatedStyle,
|
animatedStyle,
|
||||||
{
|
{
|
||||||
width: avatarSize,
|
width: 160,
|
||||||
alignItems: "center",
|
alignItems: "center",
|
||||||
shadowColor: "#fff",
|
shadowColor: "#fff",
|
||||||
shadowOffset: { width: 0, height: 0 },
|
shadowOffset: { width: 0, height: 0 },
|
||||||
@@ -179,9 +174,9 @@ const TVJellyseerrPersonPoster: React.FC<TVJellyseerrPersonPosterProps> = ({
|
|||||||
>
|
>
|
||||||
<View
|
<View
|
||||||
style={{
|
style={{
|
||||||
width: avatarSize,
|
width: 140,
|
||||||
height: avatarSize,
|
height: 140,
|
||||||
borderRadius: avatarSize / 2,
|
borderRadius: 70,
|
||||||
overflow: "hidden",
|
overflow: "hidden",
|
||||||
backgroundColor: "rgba(255,255,255,0.1)",
|
backgroundColor: "rgba(255,255,255,0.1)",
|
||||||
borderWidth: focused ? 3 : 0,
|
borderWidth: focused ? 3 : 0,
|
||||||
@@ -203,11 +198,7 @@ const TVJellyseerrPersonPoster: React.FC<TVJellyseerrPersonPosterProps> = ({
|
|||||||
alignItems: "center",
|
alignItems: "center",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Ionicons
|
<Ionicons name='person' size={56} color='rgba(255,255,255,0.4)' />
|
||||||
name='person'
|
|
||||||
size={Math.round(avatarSize * 0.35)}
|
|
||||||
color='rgba(255,255,255,0.4)'
|
|
||||||
/>
|
|
||||||
</View>
|
</View>
|
||||||
)}
|
)}
|
||||||
</View>
|
</View>
|
||||||
@@ -216,7 +207,7 @@ const TVJellyseerrPersonPoster: React.FC<TVJellyseerrPersonPosterProps> = ({
|
|||||||
fontSize: typography.callout,
|
fontSize: typography.callout,
|
||||||
color: focused ? "#fff" : "rgba(255,255,255,0.9)",
|
color: focused ? "#fff" : "rgba(255,255,255,0.9)",
|
||||||
fontWeight: "600",
|
fontWeight: "600",
|
||||||
marginTop: sizes.gaps.small,
|
marginTop: 12,
|
||||||
textAlign: "center",
|
textAlign: "center",
|
||||||
}}
|
}}
|
||||||
numberOfLines={2}
|
numberOfLines={2}
|
||||||
@@ -242,18 +233,17 @@ const TVJellyseerrMovieSection: React.FC<TVJellyseerrMovieSectionProps> = ({
|
|||||||
onItemPress,
|
onItemPress,
|
||||||
}) => {
|
}) => {
|
||||||
const typography = useScaledTVTypography();
|
const typography = useScaledTVTypography();
|
||||||
const sizes = useScaledTVSizes();
|
|
||||||
if (!items || items.length === 0) return null;
|
if (!items || items.length === 0) return null;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View style={{ marginBottom: sizes.gaps.section }}>
|
<View style={{ marginBottom: 24 }}>
|
||||||
<Text
|
<Text
|
||||||
style={{
|
style={{
|
||||||
fontSize: typography.heading,
|
fontSize: typography.heading,
|
||||||
fontWeight: "bold",
|
fontWeight: "bold",
|
||||||
color: "#FFFFFF",
|
color: "#FFFFFF",
|
||||||
marginBottom: sizes.gaps.small,
|
marginBottom: 16,
|
||||||
marginLeft: sizes.padding.scale,
|
marginLeft: SCALE_PADDING,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{title}
|
{title}
|
||||||
@@ -264,9 +254,9 @@ const TVJellyseerrMovieSection: React.FC<TVJellyseerrMovieSectionProps> = ({
|
|||||||
keyExtractor={(item) => item.id.toString()}
|
keyExtractor={(item) => item.id.toString()}
|
||||||
showsHorizontalScrollIndicator={false}
|
showsHorizontalScrollIndicator={false}
|
||||||
contentContainerStyle={{
|
contentContainerStyle={{
|
||||||
paddingHorizontal: sizes.padding.scale,
|
paddingHorizontal: SCALE_PADDING,
|
||||||
paddingVertical: sizes.padding.scale,
|
paddingVertical: SCALE_PADDING,
|
||||||
gap: sizes.gaps.item,
|
gap: 20,
|
||||||
}}
|
}}
|
||||||
style={{ overflow: "visible" }}
|
style={{ overflow: "visible" }}
|
||||||
renderItem={({ item, index }) => (
|
renderItem={({ item, index }) => (
|
||||||
@@ -295,18 +285,17 @@ const TVJellyseerrTvSection: React.FC<TVJellyseerrTvSectionProps> = ({
|
|||||||
onItemPress,
|
onItemPress,
|
||||||
}) => {
|
}) => {
|
||||||
const typography = useScaledTVTypography();
|
const typography = useScaledTVTypography();
|
||||||
const sizes = useScaledTVSizes();
|
|
||||||
if (!items || items.length === 0) return null;
|
if (!items || items.length === 0) return null;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View style={{ marginBottom: sizes.gaps.section }}>
|
<View style={{ marginBottom: 24 }}>
|
||||||
<Text
|
<Text
|
||||||
style={{
|
style={{
|
||||||
fontSize: typography.heading,
|
fontSize: typography.heading,
|
||||||
fontWeight: "bold",
|
fontWeight: "bold",
|
||||||
color: "#FFFFFF",
|
color: "#FFFFFF",
|
||||||
marginBottom: sizes.gaps.small,
|
marginBottom: 16,
|
||||||
marginLeft: sizes.padding.scale,
|
marginLeft: SCALE_PADDING,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{title}
|
{title}
|
||||||
@@ -317,9 +306,9 @@ const TVJellyseerrTvSection: React.FC<TVJellyseerrTvSectionProps> = ({
|
|||||||
keyExtractor={(item) => item.id.toString()}
|
keyExtractor={(item) => item.id.toString()}
|
||||||
showsHorizontalScrollIndicator={false}
|
showsHorizontalScrollIndicator={false}
|
||||||
contentContainerStyle={{
|
contentContainerStyle={{
|
||||||
paddingHorizontal: sizes.padding.scale,
|
paddingHorizontal: SCALE_PADDING,
|
||||||
paddingVertical: sizes.padding.scale,
|
paddingVertical: SCALE_PADDING,
|
||||||
gap: sizes.gaps.item,
|
gap: 20,
|
||||||
}}
|
}}
|
||||||
style={{ overflow: "visible" }}
|
style={{ overflow: "visible" }}
|
||||||
renderItem={({ item, index }) => (
|
renderItem={({ item, index }) => (
|
||||||
@@ -348,18 +337,17 @@ const TVJellyseerrPersonSection: React.FC<TVJellyseerrPersonSectionProps> = ({
|
|||||||
onItemPress,
|
onItemPress,
|
||||||
}) => {
|
}) => {
|
||||||
const typography = useScaledTVTypography();
|
const typography = useScaledTVTypography();
|
||||||
const sizes = useScaledTVSizes();
|
|
||||||
if (!items || items.length === 0) return null;
|
if (!items || items.length === 0) return null;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View style={{ marginBottom: sizes.gaps.section }}>
|
<View style={{ marginBottom: 24 }}>
|
||||||
<Text
|
<Text
|
||||||
style={{
|
style={{
|
||||||
fontSize: typography.heading,
|
fontSize: typography.heading,
|
||||||
fontWeight: "bold",
|
fontWeight: "bold",
|
||||||
color: "#FFFFFF",
|
color: "#FFFFFF",
|
||||||
marginBottom: sizes.gaps.small,
|
marginBottom: 16,
|
||||||
marginLeft: sizes.padding.scale,
|
marginLeft: SCALE_PADDING,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{title}
|
{title}
|
||||||
@@ -370,9 +358,9 @@ const TVJellyseerrPersonSection: React.FC<TVJellyseerrPersonSectionProps> = ({
|
|||||||
keyExtractor={(item) => item.id.toString()}
|
keyExtractor={(item) => item.id.toString()}
|
||||||
showsHorizontalScrollIndicator={false}
|
showsHorizontalScrollIndicator={false}
|
||||||
contentContainerStyle={{
|
contentContainerStyle={{
|
||||||
paddingHorizontal: sizes.padding.scale,
|
paddingHorizontal: SCALE_PADDING,
|
||||||
paddingVertical: sizes.padding.scale,
|
paddingVertical: SCALE_PADDING,
|
||||||
gap: sizes.gaps.item,
|
gap: 20,
|
||||||
}}
|
}}
|
||||||
style={{ overflow: "visible" }}
|
style={{ overflow: "visible" }}
|
||||||
renderItem={({ item }) => (
|
renderItem={({ item }) => (
|
||||||
@@ -412,7 +400,10 @@ export const TVJellyseerrSearchResults: React.FC<
|
|||||||
onPersonPress,
|
onPersonPress,
|
||||||
}) => {
|
}) => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const typography = useScaledTVTypography();
|
|
||||||
|
const hasMovies = movieResults && movieResults.length > 0;
|
||||||
|
const hasTv = tvResults && tvResults.length > 0;
|
||||||
|
const hasPersons = personResults && personResults.length > 0;
|
||||||
|
|
||||||
if (loading) {
|
if (loading) {
|
||||||
return null;
|
return null;
|
||||||
@@ -423,7 +414,7 @@ export const TVJellyseerrSearchResults: React.FC<
|
|||||||
<View style={{ alignItems: "center", paddingTop: 40 }}>
|
<View style={{ alignItems: "center", paddingTop: 40 }}>
|
||||||
<Text
|
<Text
|
||||||
style={{
|
style={{
|
||||||
fontSize: typography.heading,
|
fontSize: 24,
|
||||||
fontWeight: "bold",
|
fontWeight: "bold",
|
||||||
color: "#FFFFFF",
|
color: "#FFFFFF",
|
||||||
marginBottom: 8,
|
marginBottom: 8,
|
||||||
@@ -431,9 +422,7 @@ export const TVJellyseerrSearchResults: React.FC<
|
|||||||
>
|
>
|
||||||
{t("search.no_results_found_for")}
|
{t("search.no_results_found_for")}
|
||||||
</Text>
|
</Text>
|
||||||
<Text
|
<Text style={{ fontSize: 18, color: "rgba(255,255,255,0.6)" }}>
|
||||||
style={{ fontSize: typography.body, color: "rgba(255,255,255,0.6)" }}
|
|
||||||
>
|
|
||||||
"{searchQuery}"
|
"{searchQuery}"
|
||||||
</Text>
|
</Text>
|
||||||
</View>
|
</View>
|
||||||
@@ -442,26 +431,22 @@ export const TVJellyseerrSearchResults: React.FC<
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<View>
|
<View>
|
||||||
{/* No section requests `hasTVPreferredFocus`: the native search field
|
|
||||||
keeps focus while typing, otherwise the first result would re-grab
|
|
||||||
focus on every keystroke as results re-render. The user navigates
|
|
||||||
down to the grid manually. */}
|
|
||||||
<TVJellyseerrMovieSection
|
<TVJellyseerrMovieSection
|
||||||
title={t("search.request_movies")}
|
title={t("search.request_movies")}
|
||||||
items={movieResults}
|
items={movieResults}
|
||||||
isFirstSection={false}
|
isFirstSection={hasMovies}
|
||||||
onItemPress={onMoviePress}
|
onItemPress={onMoviePress}
|
||||||
/>
|
/>
|
||||||
<TVJellyseerrTvSection
|
<TVJellyseerrTvSection
|
||||||
title={t("search.request_series")}
|
title={t("search.request_series")}
|
||||||
items={tvResults}
|
items={tvResults}
|
||||||
isFirstSection={false}
|
isFirstSection={!hasMovies && hasTv}
|
||||||
onItemPress={onTvPress}
|
onItemPress={onTvPress}
|
||||||
/>
|
/>
|
||||||
<TVJellyseerrPersonSection
|
<TVJellyseerrPersonSection
|
||||||
title={t("search.actors")}
|
title={t("search.actors")}
|
||||||
items={personResults}
|
items={personResults}
|
||||||
isFirstSection={false}
|
isFirstSection={!hasMovies && !hasTv && hasPersons}
|
||||||
onItemPress={onPersonPress}
|
onItemPress={onPersonPress}
|
||||||
/>
|
/>
|
||||||
</View>
|
</View>
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import type { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models";
|
import type { BaseItemDto } from "@jellyfin/sdk/lib/generated-client/models";
|
||||||
import { useAtom } from "jotai";
|
import { useAtom } from "jotai";
|
||||||
import { useMemo, useState } from "react";
|
import { useMemo } from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { Platform, ScrollView, TextInput, View } from "react-native";
|
import { ScrollView, View } from "react-native";
|
||||||
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
||||||
import { Text } from "@/components/common/Text";
|
import { Text } from "@/components/common/Text";
|
||||||
import { TVDiscover } from "@/components/jellyseerr/discover/TVDiscover";
|
import { TVDiscover } from "@/components/jellyseerr/discover/TVDiscover";
|
||||||
@@ -166,7 +166,6 @@ export const TVSearchPage: React.FC<TVSearchPageProps> = ({
|
|||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const insets = useSafeAreaInsets();
|
const insets = useSafeAreaInsets();
|
||||||
const [api] = useAtom(apiAtom);
|
const [api] = useAtom(apiAtom);
|
||||||
const [isSearchFocused, setIsSearchFocused] = useState(false);
|
|
||||||
|
|
||||||
// Image URL getter for music items
|
// Image URL getter for music items
|
||||||
const getImageUrl = useMemo(() => {
|
const getImageUrl = useMemo(() => {
|
||||||
@@ -232,51 +231,23 @@ export const TVSearchPage: React.FC<TVSearchPageProps> = ({
|
|||||||
paddingTop: insets.top + TOP_PADDING,
|
paddingTop: insets.top + TOP_PADDING,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{/* Search bar: native tvOS SwiftUI `.searchable` on Apple TV, standard
|
{/* Native tvOS search field (SwiftUI `.searchable`, our `tv-search`
|
||||||
TextInput fallback on Android TV (the native module is Apple-only). */}
|
module). It renders the native search bar + grid keyboard and
|
||||||
{Platform.OS === "ios" ? (
|
forwards typed text into the existing query pipeline via setSearch;
|
||||||
<View
|
our own results grid renders below. */}
|
||||||
style={{
|
<View
|
||||||
marginBottom: 24,
|
style={{
|
||||||
height: SEARCH_AREA_HEIGHT,
|
marginBottom: 24,
|
||||||
}}
|
marginHorizontal: HORIZONTAL_PADDING,
|
||||||
>
|
height: SEARCH_AREA_HEIGHT,
|
||||||
{/* No horizontal margin here: the native tvOS search bar centers
|
}}
|
||||||
itself and renders a trailing "Hold to Dictate" hint. */}
|
>
|
||||||
<TvSearchView
|
<TvSearchView
|
||||||
style={{ width: "100%", height: "100%" }}
|
style={{ width: "100%", height: "100%" }}
|
||||||
placeholder={t("search.search")}
|
placeholder={t("search.search")}
|
||||||
onChangeText={(e) => setSearch(e.nativeEvent.text)}
|
onChangeText={(e) => setSearch(e.nativeEvent.text)}
|
||||||
/>
|
/>
|
||||||
</View>
|
</View>
|
||||||
) : (
|
|
||||||
<View
|
|
||||||
style={{
|
|
||||||
marginHorizontal: HORIZONTAL_PADDING,
|
|
||||||
marginBottom: 24,
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<TextInput
|
|
||||||
style={{
|
|
||||||
height: 56,
|
|
||||||
width: "100%",
|
|
||||||
backgroundColor: "#262626",
|
|
||||||
borderRadius: 12,
|
|
||||||
paddingHorizontal: 20,
|
|
||||||
fontSize: 28,
|
|
||||||
color: "#fff",
|
|
||||||
}}
|
|
||||||
placeholder={t("search.search")}
|
|
||||||
placeholderTextColor='rgba(255,255,255,0.4)'
|
|
||||||
onChangeText={setSearch}
|
|
||||||
defaultValue=''
|
|
||||||
autoFocus={false}
|
|
||||||
onFocus={() => setIsSearchFocused(true)}
|
|
||||||
onBlur={() => setIsSearchFocused(false)}
|
|
||||||
hasTVPreferredFocus
|
|
||||||
/>
|
|
||||||
</View>
|
|
||||||
)}
|
|
||||||
</View>
|
</View>
|
||||||
|
|
||||||
<ScrollView
|
<ScrollView
|
||||||
@@ -294,7 +265,6 @@ export const TVSearchPage: React.FC<TVSearchPageProps> = ({
|
|||||||
searchType={searchType}
|
searchType={searchType}
|
||||||
setSearchType={setSearchType}
|
setSearchType={setSearchType}
|
||||||
showDiscover={showDiscover}
|
showDiscover={showDiscover}
|
||||||
disabled={isSearchFocused}
|
|
||||||
/>
|
/>
|
||||||
</View>
|
</View>
|
||||||
)}
|
)}
|
||||||
@@ -310,18 +280,13 @@ export const TVSearchPage: React.FC<TVSearchPageProps> = ({
|
|||||||
{/* Library Search Results */}
|
{/* Library Search Results */}
|
||||||
{isLibraryMode && !loading && (
|
{isLibraryMode && !loading && (
|
||||||
<View style={{ gap: SECTION_GAP }}>
|
<View style={{ gap: SECTION_GAP }}>
|
||||||
{sections.map((section) => (
|
{sections.map((section, index) => (
|
||||||
<TVSearchSection
|
<TVSearchSection
|
||||||
key={section.key}
|
key={section.key}
|
||||||
title={section.title}
|
title={section.title}
|
||||||
items={section.items!}
|
items={section.items!}
|
||||||
orientation={section.orientation || "vertical"}
|
orientation={section.orientation || "vertical"}
|
||||||
// Never auto-focus a result. The native search field owns focus
|
isFirstSection={index === 0}
|
||||||
// while typing; `hasTVPreferredFocus` here would re-grab focus on
|
|
||||||
// every keystroke as results re-render. User navigates down to the
|
|
||||||
// grid manually.
|
|
||||||
isFirstSection={false}
|
|
||||||
disabled={isSearchFocused}
|
|
||||||
onItemPress={onItemPress}
|
onItemPress={onItemPress}
|
||||||
onItemLongPress={onItemLongPress}
|
onItemLongPress={onItemLongPress}
|
||||||
imageUrlGetter={
|
imageUrlGetter={
|
||||||
|
|||||||
@@ -297,12 +297,12 @@ export const TVSearchSection: React.FC<TVSearchSectionProps> = ({
|
|||||||
removeClippedSubviews={false}
|
removeClippedSubviews={false}
|
||||||
getItemLayout={getItemLayout}
|
getItemLayout={getItemLayout}
|
||||||
style={{ overflow: "visible" }}
|
style={{ overflow: "visible" }}
|
||||||
// Edge padding via contentContainerStyle, NOT contentInset+contentOffset.
|
contentInset={{
|
||||||
// contentOffset only applies on initial mount; since this FlatList is
|
left: edgePadding,
|
||||||
// reused across searches (stable key), a second search left the inset
|
right: edgePadding,
|
||||||
// without the offset and the grid snapped flush to the left edge.
|
}}
|
||||||
|
contentOffset={{ x: -edgePadding, y: 0 }}
|
||||||
contentContainerStyle={{
|
contentContainerStyle={{
|
||||||
paddingHorizontal: edgePadding,
|
|
||||||
paddingVertical: SCALE_PADDING,
|
paddingVertical: SCALE_PADDING,
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -31,12 +31,8 @@ export const SeasonEpisodesCarousel: React.FC<Props> = ({
|
|||||||
}) => {
|
}) => {
|
||||||
const [api] = useAtom(apiAtom);
|
const [api] = useAtom(apiAtom);
|
||||||
const [user] = useAtom(userAtom);
|
const [user] = useAtom(userAtom);
|
||||||
const router = useRouter();
|
|
||||||
const isOffline = useOfflineMode();
|
const isOffline = useOfflineMode();
|
||||||
// Read the live (cached) downloads DB inside the query rather than the
|
const router = useRouter();
|
||||||
// provider's downloadedItems snapshot, so refetches after
|
|
||||||
// updateDownloadedItem() reflect the latest state instead of a stale
|
|
||||||
// refreshKey-gated snapshot. getAllDownloadedItems() is cached, so this stays cheap.
|
|
||||||
const { getDownloadedItems } = useDownload();
|
const { getDownloadedItems } = useDownload();
|
||||||
|
|
||||||
const scrollRef = useRef<HorizontalScrollRef>(null);
|
const scrollRef = useRef<HorizontalScrollRef>(null);
|
||||||
|
|||||||
@@ -196,10 +196,7 @@ export const OtherSettings: React.FC = () => {
|
|||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</ListItem>
|
</ListItem>
|
||||||
<ListItem
|
<ListItem title={t("home.settings.other.max_auto_play_episode_count")}>
|
||||||
title={t("home.settings.other.max_auto_play_episode_count")}
|
|
||||||
disabled={pluginSettings?.maxAutoPlayEpisodeCount?.locked}
|
|
||||||
>
|
|
||||||
<PlatformDropdown
|
<PlatformDropdown
|
||||||
groups={autoPlayEpisodeOptions}
|
groups={autoPlayEpisodeOptions}
|
||||||
trigger={
|
trigger={
|
||||||
|
|||||||
@@ -229,10 +229,7 @@ export const PlaybackControlsSettings: React.FC = () => {
|
|||||||
|
|
||||||
<ListItem
|
<ListItem
|
||||||
title={t("home.settings.other.max_auto_play_episode_count")}
|
title={t("home.settings.other.max_auto_play_episode_count")}
|
||||||
disabled={
|
disabled={!settings.autoPlayNextEpisode}
|
||||||
!settings.autoPlayNextEpisode ||
|
|
||||||
pluginSettings?.maxAutoPlayEpisodeCount?.locked
|
|
||||||
}
|
|
||||||
>
|
>
|
||||||
<PlatformDropdown
|
<PlatformDropdown
|
||||||
groups={autoPlayEpisodeOptions}
|
groups={autoPlayEpisodeOptions}
|
||||||
|
|||||||
@@ -8,10 +8,10 @@ import { useTranslation } from "react-i18next";
|
|||||||
import { Pressable, View } from "react-native";
|
import { Pressable, View } from "react-native";
|
||||||
import { Slider } from "react-native-awesome-slider";
|
import { Slider } from "react-native-awesome-slider";
|
||||||
import { type SharedValue } from "react-native-reanimated";
|
import { type SharedValue } from "react-native-reanimated";
|
||||||
|
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
||||||
import { ChapterList } from "@/components/chapters/ChapterList";
|
import { ChapterList } from "@/components/chapters/ChapterList";
|
||||||
import { ChapterTicks } from "@/components/chapters/ChapterTicks";
|
import { ChapterTicks } from "@/components/chapters/ChapterTicks";
|
||||||
import { Text } from "@/components/common/Text";
|
import { Text } from "@/components/common/Text";
|
||||||
import { useControlsSafeAreaInsets } from "@/hooks/useControlsSafeAreaInsets";
|
|
||||||
import { useSettings } from "@/utils/atoms/settings";
|
import { useSettings } from "@/utils/atoms/settings";
|
||||||
import { chapterMarkers, chapterNameAt } from "@/utils/chapters";
|
import { chapterMarkers, chapterNameAt } from "@/utils/chapters";
|
||||||
import NextEpisodeCountDownButton from "./NextEpisodeCountDownButton";
|
import NextEpisodeCountDownButton from "./NextEpisodeCountDownButton";
|
||||||
@@ -75,6 +75,9 @@ interface BottomControlsProps {
|
|||||||
minutes: number;
|
minutes: number;
|
||||||
seconds: number;
|
seconds: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Chapter props
|
||||||
|
chapterPositions?: number[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export const BottomControls: FC<BottomControlsProps> = ({
|
export const BottomControls: FC<BottomControlsProps> = ({
|
||||||
@@ -108,10 +111,11 @@ export const BottomControls: FC<BottomControlsProps> = ({
|
|||||||
trickPlayUrl,
|
trickPlayUrl,
|
||||||
trickplayInfo,
|
trickplayInfo,
|
||||||
time,
|
time,
|
||||||
|
chapterPositions = [],
|
||||||
}) => {
|
}) => {
|
||||||
const { settings } = useSettings();
|
const { settings } = useSettings();
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const insets = useControlsSafeAreaInsets();
|
const insets = useSafeAreaInsets();
|
||||||
const [chapterListVisible, setChapterListVisible] = useState(false);
|
const [chapterListVisible, setChapterListVisible] = useState(false);
|
||||||
|
|
||||||
// Only expose chapter UI when there are at least two real markers.
|
// Only expose chapter UI when there are at least two real markers.
|
||||||
@@ -142,9 +146,13 @@ export const BottomControls: FC<BottomControlsProps> = ({
|
|||||||
style={[
|
style={[
|
||||||
{
|
{
|
||||||
position: "absolute",
|
position: "absolute",
|
||||||
right: insets.right,
|
right:
|
||||||
left: insets.left,
|
(settings?.safeAreaInControlsEnabled ?? true) ? insets.right : 0,
|
||||||
bottom: Math.max(insets.bottom - 17, 0),
|
left: (settings?.safeAreaInControlsEnabled ?? true) ? insets.left : 0,
|
||||||
|
bottom:
|
||||||
|
(settings?.safeAreaInControlsEnabled ?? true)
|
||||||
|
? Math.max(insets.bottom - 17, 0)
|
||||||
|
: 0,
|
||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
className={"flex flex-col px-2"}
|
className={"flex flex-col px-2"}
|
||||||
@@ -180,6 +188,17 @@ export const BottomControls: FC<BottomControlsProps> = ({
|
|||||||
) : null}
|
) : null}
|
||||||
</View>
|
</View>
|
||||||
<View className='flex flex-row items-center space-x-2 shrink-0'>
|
<View className='flex flex-row items-center space-x-2 shrink-0'>
|
||||||
|
{hasChapters && (
|
||||||
|
<Pressable
|
||||||
|
onPress={() => setChapterListVisible(true)}
|
||||||
|
hitSlop={10}
|
||||||
|
className='justify-center mr-4'
|
||||||
|
accessibilityRole='button'
|
||||||
|
accessibilityLabel={t("chapters.open")}
|
||||||
|
>
|
||||||
|
<Ionicons name='bookmarks' size={24} color='white' />
|
||||||
|
</Pressable>
|
||||||
|
)}
|
||||||
<SkipButton
|
<SkipButton
|
||||||
showButton={showSkipButton}
|
showButton={showSkipButton}
|
||||||
onPress={skipIntro}
|
onPress={skipIntro}
|
||||||
@@ -211,17 +230,6 @@ export const BottomControls: FC<BottomControlsProps> = ({
|
|||||||
onPress={handleNextEpisodeManual}
|
onPress={handleNextEpisodeManual}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
{hasChapters && (
|
|
||||||
<Pressable
|
|
||||||
onPress={() => setChapterListVisible(true)}
|
|
||||||
hitSlop={10}
|
|
||||||
className='justify-center ml-4'
|
|
||||||
accessibilityRole='button'
|
|
||||||
accessibilityLabel={t("chapters.open")}
|
|
||||||
>
|
|
||||||
<Ionicons name='bookmarks' size={24} color='white' />
|
|
||||||
</Pressable>
|
|
||||||
)}
|
|
||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
<View
|
<View
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { Ionicons } from "@expo/vector-icons";
|
import { Ionicons } from "@expo/vector-icons";
|
||||||
import type { FC } from "react";
|
import type { FC } from "react";
|
||||||
import { Platform, TouchableOpacity, View } from "react-native";
|
import { Platform, TouchableOpacity, View } from "react-native";
|
||||||
|
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
||||||
import { Text } from "@/components/common/Text";
|
import { Text } from "@/components/common/Text";
|
||||||
import { Loader } from "@/components/Loader";
|
import { Loader } from "@/components/Loader";
|
||||||
import { useControlsSafeAreaInsets } from "@/hooks/useControlsSafeAreaInsets";
|
|
||||||
import { useSettings } from "@/utils/atoms/settings";
|
import { useSettings } from "@/utils/atoms/settings";
|
||||||
import AudioSlider from "./AudioSlider";
|
import AudioSlider from "./AudioSlider";
|
||||||
import BrightnessSlider from "./BrightnessSlider";
|
import BrightnessSlider from "./BrightnessSlider";
|
||||||
@@ -42,15 +42,15 @@ export const CenterControls: FC<CenterControlsProps> = ({
|
|||||||
goToNextChapter,
|
goToNextChapter,
|
||||||
}) => {
|
}) => {
|
||||||
const { settings } = useSettings();
|
const { settings } = useSettings();
|
||||||
const insets = useControlsSafeAreaInsets();
|
const insets = useSafeAreaInsets();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View
|
<View
|
||||||
style={{
|
style={{
|
||||||
position: "absolute",
|
position: "absolute",
|
||||||
top: "50%",
|
top: "50%",
|
||||||
left: insets.left,
|
left: (settings?.safeAreaInControlsEnabled ?? true) ? insets.left : 0,
|
||||||
right: insets.right,
|
right: (settings?.safeAreaInControlsEnabled ?? true) ? insets.right : 0,
|
||||||
flexDirection: "row",
|
flexDirection: "row",
|
||||||
justifyContent: "space-between",
|
justifyContent: "space-between",
|
||||||
alignItems: "center",
|
alignItems: "center",
|
||||||
|
|||||||
@@ -219,6 +219,7 @@ export const Controls: FC<Props> = ({
|
|||||||
hasNextChapter,
|
hasNextChapter,
|
||||||
goToPreviousChapter,
|
goToPreviousChapter,
|
||||||
goToNextChapter,
|
goToNextChapter,
|
||||||
|
chapterPositions,
|
||||||
} = useChapterNavigation({
|
} = useChapterNavigation({
|
||||||
chapters: item.Chapters,
|
chapters: item.Chapters,
|
||||||
progress,
|
progress,
|
||||||
@@ -365,9 +366,7 @@ export const Controls: FC<Props> = ({
|
|||||||
{ applyLanguagePreferences: true },
|
{ applyLanguagePreferences: true },
|
||||||
);
|
);
|
||||||
|
|
||||||
// Use setParams instead of replace to avoid unmounting/remounting the player,
|
const queryParams = new URLSearchParams({
|
||||||
// which would create a new MPV native view and crash with "mp_initialize already initialized".
|
|
||||||
router.setParams({
|
|
||||||
...(offline && { offline: "true" }),
|
...(offline && { offline: "true" }),
|
||||||
itemId: item.Id ?? "",
|
itemId: item.Id ?? "",
|
||||||
audioIndex: defaultAudioIndex?.toString() ?? "",
|
audioIndex: defaultAudioIndex?.toString() ?? "",
|
||||||
@@ -376,17 +375,11 @@ export const Controls: FC<Props> = ({
|
|||||||
bitrateValue: bitrateValue?.toString(),
|
bitrateValue: bitrateValue?.toString(),
|
||||||
playbackPosition:
|
playbackPosition:
|
||||||
item.UserData?.PlaybackPositionTicks?.toString() ?? "",
|
item.UserData?.PlaybackPositionTicks?.toString() ?? "",
|
||||||
});
|
}).toString();
|
||||||
|
|
||||||
|
router.replace(`player/direct-player?${queryParams}` as any);
|
||||||
},
|
},
|
||||||
[
|
[settings, subtitleIndex, audioIndex, mediaSource, bitrateValue, router],
|
||||||
settings,
|
|
||||||
subtitleIndex,
|
|
||||||
audioIndex,
|
|
||||||
mediaSource,
|
|
||||||
bitrateValue,
|
|
||||||
router,
|
|
||||||
offline,
|
|
||||||
],
|
|
||||||
);
|
);
|
||||||
|
|
||||||
const goToPreviousItem = useCallback(() => {
|
const goToPreviousItem = useCallback(() => {
|
||||||
@@ -592,6 +585,7 @@ export const Controls: FC<Props> = ({
|
|||||||
trickPlayUrl={trickPlayUrl}
|
trickPlayUrl={trickPlayUrl}
|
||||||
trickplayInfo={trickplayInfo}
|
trickplayInfo={trickplayInfo}
|
||||||
time={isSliding || showRemoteBubble ? time : remoteTime}
|
time={isSliding || showRemoteBubble ? time : remoteTime}
|
||||||
|
chapterPositions={chapterPositions}
|
||||||
/>
|
/>
|
||||||
</Animated.View>
|
</Animated.View>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -1254,7 +1254,7 @@ export const Controls: FC<Props> = ({
|
|||||||
<Text
|
<Text
|
||||||
style={[styles.endsAtText, { fontSize: typography.callout }]}
|
style={[styles.endsAtText, { fontSize: typography.callout }]}
|
||||||
>
|
>
|
||||||
{t("player.ends_at", { time: getFinishTime() })}
|
{t("player.ends_at")} {getFinishTime()}
|
||||||
</Text>
|
</Text>
|
||||||
</View>
|
</View>
|
||||||
)}
|
)}
|
||||||
@@ -1448,7 +1448,7 @@ export const Controls: FC<Props> = ({
|
|||||||
<Text
|
<Text
|
||||||
style={[styles.endsAtText, { fontSize: typography.callout }]}
|
style={[styles.endsAtText, { fontSize: typography.callout }]}
|
||||||
>
|
>
|
||||||
{t("player.ends_at", { time: getFinishTime() })}
|
{t("player.ends_at")} {getFinishTime()}
|
||||||
</Text>
|
</Text>
|
||||||
</View>
|
</View>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { useQuery, useQueryClient } from "@tanstack/react-query";
|
|||||||
import { atom, useAtom } from "jotai";
|
import { atom, useAtom } from "jotai";
|
||||||
import { useEffect, useMemo, useRef } from "react";
|
import { useEffect, useMemo, useRef } from "react";
|
||||||
import { TouchableOpacity, View } from "react-native";
|
import { TouchableOpacity, View } from "react-native";
|
||||||
|
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
||||||
import ContinueWatchingPoster from "@/components/ContinueWatchingPoster";
|
import ContinueWatchingPoster from "@/components/ContinueWatchingPoster";
|
||||||
import {
|
import {
|
||||||
HorizontalScroll,
|
HorizontalScroll,
|
||||||
@@ -16,10 +17,10 @@ import {
|
|||||||
SeasonDropdown,
|
SeasonDropdown,
|
||||||
type SeasonIndexState,
|
type SeasonIndexState,
|
||||||
} from "@/components/series/SeasonDropdown";
|
} from "@/components/series/SeasonDropdown";
|
||||||
import { useControlsSafeAreaInsets } from "@/hooks/useControlsSafeAreaInsets";
|
|
||||||
import { useDownload } from "@/providers/DownloadProvider";
|
import { useDownload } from "@/providers/DownloadProvider";
|
||||||
import { apiAtom, userAtom } from "@/providers/JellyfinProvider";
|
import { apiAtom, userAtom } from "@/providers/JellyfinProvider";
|
||||||
import { useOfflineMode } from "@/providers/OfflineModeProvider";
|
import { useOfflineMode } from "@/providers/OfflineModeProvider";
|
||||||
|
import { useSettings } from "@/utils/atoms/settings";
|
||||||
import {
|
import {
|
||||||
getDownloadedEpisodesForSeason,
|
getDownloadedEpisodesForSeason,
|
||||||
getDownloadedSeasonNumbers,
|
getDownloadedSeasonNumbers,
|
||||||
@@ -45,7 +46,8 @@ export const EpisodeList: React.FC<Props> = ({ item, close, goToItem }) => {
|
|||||||
scrollViewRef.current?.scrollToIndex(index, 100);
|
scrollViewRef.current?.scrollToIndex(index, 100);
|
||||||
};
|
};
|
||||||
const isOffline = useOfflineMode();
|
const isOffline = useOfflineMode();
|
||||||
const insets = useControlsSafeAreaInsets();
|
const { settings } = useSettings();
|
||||||
|
const insets = useSafeAreaInsets();
|
||||||
|
|
||||||
// Set the initial season index
|
// Set the initial season index
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -57,11 +59,6 @@ export const EpisodeList: React.FC<Props> = ({ item, close, goToItem }) => {
|
|||||||
}
|
}
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
// Read the live (cached) downloads DB inside the query rather than the
|
|
||||||
// provider's downloadedItems snapshot. The snapshot only refreshes on the
|
|
||||||
// provider refreshKey, so after updateDownloadedItem() invalidates
|
|
||||||
// ["episodes"]/["seasons"] (e.g. progress/played writes) the refetch would
|
|
||||||
// return stale data. getAllDownloadedItems() is cached, so this stays cheap.
|
|
||||||
const { getDownloadedItems } = useDownload();
|
const { getDownloadedItems } = useDownload();
|
||||||
|
|
||||||
const seasonIndex = seasonIndexState[item.ParentId ?? ""];
|
const seasonIndex = seasonIndexState[item.ParentId ?? ""];
|
||||||
@@ -185,9 +182,12 @@ export const EpisodeList: React.FC<Props> = ({ item, close, goToItem }) => {
|
|||||||
backgroundColor: "black",
|
backgroundColor: "black",
|
||||||
height: "100%",
|
height: "100%",
|
||||||
width: "100%",
|
width: "100%",
|
||||||
paddingTop: insets.top,
|
paddingTop:
|
||||||
paddingLeft: insets.left,
|
(settings?.safeAreaInControlsEnabled ?? true) ? insets.top : 0,
|
||||||
paddingRight: insets.right,
|
paddingLeft:
|
||||||
|
(settings?.safeAreaInControlsEnabled ?? true) ? insets.left : 0,
|
||||||
|
paddingRight:
|
||||||
|
(settings?.safeAreaInControlsEnabled ?? true) ? insets.right : 0,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<View
|
<View
|
||||||
|
|||||||
@@ -5,11 +5,12 @@ import type {
|
|||||||
} from "@jellyfin/sdk/lib/generated-client";
|
} from "@jellyfin/sdk/lib/generated-client";
|
||||||
import { type FC, useCallback, useState } from "react";
|
import { type FC, useCallback, useState } from "react";
|
||||||
import { Platform, TouchableOpacity, View } from "react-native";
|
import { Platform, TouchableOpacity, View } from "react-native";
|
||||||
|
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
||||||
import useRouter from "@/hooks/useAppRouter";
|
import useRouter from "@/hooks/useAppRouter";
|
||||||
import { useControlsSafeAreaInsets } from "@/hooks/useControlsSafeAreaInsets";
|
|
||||||
import { useHaptic } from "@/hooks/useHaptic";
|
import { useHaptic } from "@/hooks/useHaptic";
|
||||||
import { useOrientation } from "@/hooks/useOrientation";
|
import { useOrientation } from "@/hooks/useOrientation";
|
||||||
import { OrientationLock } from "@/packages/expo-screen-orientation";
|
import { OrientationLock } from "@/packages/expo-screen-orientation";
|
||||||
|
import { useSettings } from "@/utils/atoms/settings";
|
||||||
import { HEADER_LAYOUT, ICON_SIZES } from "./constants";
|
import { HEADER_LAYOUT, ICON_SIZES } from "./constants";
|
||||||
import DropdownView from "./dropdown/DropdownView";
|
import DropdownView from "./dropdown/DropdownView";
|
||||||
import { PlaybackSpeedScope } from "./utils/playback-speed-settings";
|
import { PlaybackSpeedScope } from "./utils/playback-speed-settings";
|
||||||
@@ -57,8 +58,9 @@ export const HeaderControls: FC<HeaderControlsProps> = ({
|
|||||||
showTechnicalInfo = false,
|
showTechnicalInfo = false,
|
||||||
onToggleTechnicalInfo,
|
onToggleTechnicalInfo,
|
||||||
}) => {
|
}) => {
|
||||||
|
const { settings } = useSettings();
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const insets = useControlsSafeAreaInsets();
|
const insets = useSafeAreaInsets();
|
||||||
const lightHapticFeedback = useHaptic("light");
|
const lightHapticFeedback = useHaptic("light");
|
||||||
const { orientation, lockOrientation } = useOrientation();
|
const { orientation, lockOrientation } = useOrientation();
|
||||||
const [isTogglingOrientation, setIsTogglingOrientation] = useState(false);
|
const [isTogglingOrientation, setIsTogglingOrientation] = useState(false);
|
||||||
@@ -97,9 +99,10 @@ export const HeaderControls: FC<HeaderControlsProps> = ({
|
|||||||
style={[
|
style={[
|
||||||
{
|
{
|
||||||
position: "absolute",
|
position: "absolute",
|
||||||
top: insets.top,
|
top: (settings?.safeAreaInControlsEnabled ?? true) ? insets.top : 0,
|
||||||
left: insets.left,
|
left: (settings?.safeAreaInControlsEnabled ?? true) ? insets.left : 0,
|
||||||
right: insets.right,
|
right:
|
||||||
|
(settings?.safeAreaInControlsEnabled ?? true) ? insets.right : 0,
|
||||||
padding: HEADER_LAYOUT.CONTAINER_PADDING,
|
padding: HEADER_LAYOUT.CONTAINER_PADDING,
|
||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
|
|||||||
@@ -16,8 +16,8 @@ import Animated, {
|
|||||||
} from "react-native-reanimated";
|
} from "react-native-reanimated";
|
||||||
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
||||||
import { useScaledTVTypography } from "@/constants/TVTypography";
|
import { useScaledTVTypography } from "@/constants/TVTypography";
|
||||||
import { useControlsSafeAreaInsets } from "@/hooks/useControlsSafeAreaInsets";
|
|
||||||
import type { TechnicalInfo } from "@/modules/mpv-player";
|
import type { TechnicalInfo } from "@/modules/mpv-player";
|
||||||
|
import { useSettings } from "@/utils/atoms/settings";
|
||||||
import { HEADER_LAYOUT } from "./constants";
|
import { HEADER_LAYOUT } from "./constants";
|
||||||
|
|
||||||
type PlayMethod = "DirectPlay" | "DirectStream" | "Transcode";
|
type PlayMethod = "DirectPlay" | "DirectStream" | "Transcode";
|
||||||
@@ -184,8 +184,8 @@ export const TechnicalInfoOverlay: FC<TechnicalInfoOverlayProps> = memo(
|
|||||||
currentAudioIndex,
|
currentAudioIndex,
|
||||||
}) => {
|
}) => {
|
||||||
const typography = useScaledTVTypography();
|
const typography = useScaledTVTypography();
|
||||||
|
const { settings } = useSettings();
|
||||||
const insets = useSafeAreaInsets();
|
const insets = useSafeAreaInsets();
|
||||||
const safeInsets = useControlsSafeAreaInsets();
|
|
||||||
const [info, setInfo] = useState<TechnicalInfo | null>(null);
|
const [info, setInfo] = useState<TechnicalInfo | null>(null);
|
||||||
|
|
||||||
const opacity = useSharedValue(0);
|
const opacity = useSharedValue(0);
|
||||||
@@ -268,8 +268,14 @@ export const TechnicalInfoOverlay: FC<TechnicalInfoOverlayProps> = memo(
|
|||||||
left: Math.max(insets.left, 48) + 20,
|
left: Math.max(insets.left, 48) + 20,
|
||||||
}
|
}
|
||||||
: {
|
: {
|
||||||
top: safeInsets.top + HEADER_LAYOUT.CONTAINER_PADDING + 4,
|
top:
|
||||||
left: safeInsets.left + HEADER_LAYOUT.CONTAINER_PADDING + 20,
|
(settings?.safeAreaInControlsEnabled ?? true)
|
||||||
|
? insets.top + HEADER_LAYOUT.CONTAINER_PADDING + 4
|
||||||
|
: HEADER_LAYOUT.CONTAINER_PADDING + 4,
|
||||||
|
left:
|
||||||
|
(settings?.safeAreaInControlsEnabled ?? true)
|
||||||
|
? insets.left + HEADER_LAYOUT.CONTAINER_PADDING + 20
|
||||||
|
: HEADER_LAYOUT.CONTAINER_PADDING + 20,
|
||||||
};
|
};
|
||||||
|
|
||||||
const textStyle = Platform.isTV
|
const textStyle = Platform.isTV
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
import {
|
|
||||||
type EdgeInsets,
|
|
||||||
useSafeAreaInsets,
|
|
||||||
} from "react-native-safe-area-context";
|
|
||||||
import { useSettings } from "@/utils/atoms/settings";
|
|
||||||
|
|
||||||
const ZERO_INSETS: EdgeInsets = { top: 0, right: 0, bottom: 0, left: 0 };
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns safe-area insets to apply to in-player controls, honoring the
|
|
||||||
* `safeAreaInControlsEnabled` user setting. When the setting is disabled,
|
|
||||||
* returns zero insets so controls can sit flush against the screen edges.
|
|
||||||
*/
|
|
||||||
export const useControlsSafeAreaInsets = (): EdgeInsets => {
|
|
||||||
const { settings } = useSettings();
|
|
||||||
const insets = useSafeAreaInsets();
|
|
||||||
return settings.safeAreaInControlsEnabled ? insets : ZERO_INSETS;
|
|
||||||
};
|
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
import { File, Paths } from "expo-file-system";
|
|
||||||
import { useCallback } from "react";
|
import { useCallback } from "react";
|
||||||
import { storage } from "@/utils/mmkv";
|
import { storage } from "@/utils/mmkv";
|
||||||
|
|
||||||
@@ -13,28 +12,36 @@ const useImageStorage = () => {
|
|||||||
}
|
}
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
/**
|
|
||||||
* expo-file-system instead of fetch+Blob+FileReader: the latter silently
|
|
||||||
* resolves to an empty payload under RN's New Architecture.
|
|
||||||
*/
|
|
||||||
const image2Base64 = useCallback(async (url?: string | null) => {
|
const image2Base64 = useCallback(async (url?: string | null) => {
|
||||||
if (!url) return null;
|
if (!url) return null;
|
||||||
|
|
||||||
const tmpFile = new File(
|
let blob: Blob;
|
||||||
Paths.cache,
|
|
||||||
`img-${Date.now()}-${Math.random().toString(36).slice(2)}.jpg`,
|
|
||||||
);
|
|
||||||
try {
|
try {
|
||||||
const downloaded = await File.downloadFileAsync(url, tmpFile, {
|
// Fetch the data from the URL
|
||||||
idempotent: true,
|
const response = await fetch(url);
|
||||||
});
|
blob = await response.blob();
|
||||||
return await downloaded.base64();
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.warn("Error fetching image:", error);
|
console.warn("Error fetching image:", error);
|
||||||
return null;
|
return null;
|
||||||
} finally {
|
|
||||||
if (tmpFile.exists) tmpFile.delete();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create a FileReader instance
|
||||||
|
const reader = new FileReader();
|
||||||
|
|
||||||
|
// Convert blob to base64
|
||||||
|
return new Promise<string>((resolve, reject) => {
|
||||||
|
reader.onloadend = () => {
|
||||||
|
if (typeof reader.result === "string") {
|
||||||
|
// Extract the base64 string (remove the data URL prefix)
|
||||||
|
const base64 = reader.result.split(",")[1];
|
||||||
|
resolve(base64);
|
||||||
|
} else {
|
||||||
|
reject(new Error("Failed to convert image to base64"));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
reader.onerror = reject;
|
||||||
|
reader.readAsDataURL(blob);
|
||||||
|
});
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const saveImage = useCallback(
|
const saveImage = useCallback(
|
||||||
|
|||||||
@@ -109,35 +109,30 @@ export const usePlaybackManager = ({
|
|||||||
staleTime: 0,
|
staleTime: 0,
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* Derive prev/next from the current item's real position in the adjacent
|
|
||||||
* list rather than from the array length. `getEpisodes({ adjacentTo })` does
|
|
||||||
* not guarantee a fixed [prev, current, next] shape — at the first/last
|
|
||||||
* episode it can still return the current item as the first/last entry — so
|
|
||||||
* length-based indexing wrongly surfaces the current episode as "previous".
|
|
||||||
*/
|
|
||||||
const currentIndex = useMemo(
|
|
||||||
() => adjacentItems?.findIndex((e) => e.Id === item?.Id) ?? -1,
|
|
||||||
[adjacentItems, item],
|
|
||||||
);
|
|
||||||
|
|
||||||
/** A neighbour is only navigable if it has an actual media file (not a
|
|
||||||
* "Virtual"/missing episode placeholder, e.g. an absent Special). */
|
|
||||||
const isNavigable = (episode?: BaseItemDto | null): episode is BaseItemDto =>
|
|
||||||
!!episode && episode.Id !== item?.Id && episode.LocationType !== "Virtual";
|
|
||||||
|
|
||||||
const previousItem = useMemo(() => {
|
const previousItem = useMemo(() => {
|
||||||
if (!adjacentItems || currentIndex <= 0) return null;
|
if (!adjacentItems || adjacentItems.length <= 1) {
|
||||||
const candidate = adjacentItems[currentIndex - 1];
|
return null;
|
||||||
return isNavigable(candidate) ? candidate : null;
|
}
|
||||||
}, [adjacentItems, currentIndex, item]);
|
|
||||||
|
if (adjacentItems.length === 2) {
|
||||||
|
return adjacentItems[0].Id === item?.Id ? null : adjacentItems[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
return adjacentItems[0];
|
||||||
|
}, [adjacentItems, item]);
|
||||||
|
|
||||||
/** The next item in the series */
|
/** The next item in the series */
|
||||||
const nextItem = useMemo(() => {
|
const nextItem = useMemo(() => {
|
||||||
if (!adjacentItems || currentIndex < 0) return null;
|
if (!adjacentItems || adjacentItems.length <= 1) {
|
||||||
const candidate = adjacentItems[currentIndex + 1];
|
return null;
|
||||||
return isNavigable(candidate) ? candidate : null;
|
}
|
||||||
}, [adjacentItems, currentIndex, item]);
|
|
||||||
|
if (adjacentItems.length === 2) {
|
||||||
|
return adjacentItems[1].Id === item?.Id ? null : adjacentItems[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
return adjacentItems[2];
|
||||||
|
}, [adjacentItems, item]);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reports playback progress.
|
* Reports playback progress.
|
||||||
|
|||||||
@@ -213,7 +213,7 @@ public class MpvPlayerModule: Module {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Defines events that the view can send to JavaScript
|
// Defines events that the view can send to JavaScript
|
||||||
Events("onLoad", "onPlaybackStateChange", "onProgress", "onError", "onTracksReady", "onPictureInPictureChange")
|
Events("onLoad", "onPlaybackStateChange", "onProgress", "onError", "onTracksReady")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,7 +61,6 @@ class MpvPlayerView: ExpoView {
|
|||||||
let onProgress = EventDispatcher()
|
let onProgress = EventDispatcher()
|
||||||
let onError = EventDispatcher()
|
let onError = EventDispatcher()
|
||||||
let onTracksReady = EventDispatcher()
|
let onTracksReady = EventDispatcher()
|
||||||
let onPictureInPictureChange = EventDispatcher()
|
|
||||||
|
|
||||||
private var currentURL: URL?
|
private var currentURL: URL?
|
||||||
private var cachedPosition: Double = 0
|
private var cachedPosition: Double = 0
|
||||||
@@ -82,6 +81,7 @@ class MpvPlayerView: ExpoView {
|
|||||||
private func setupView() {
|
private func setupView() {
|
||||||
clipsToBounds = true
|
clipsToBounds = true
|
||||||
backgroundColor = .black
|
backgroundColor = .black
|
||||||
|
configureAudioSession()
|
||||||
|
|
||||||
videoContainer = UIView()
|
videoContainer = UIView()
|
||||||
videoContainer.translatesAutoresizingMaskIntoConstraints = false
|
videoContainer.translatesAutoresizingMaskIntoConstraints = false
|
||||||
@@ -141,26 +141,21 @@ class MpvPlayerView: ExpoView {
|
|||||||
CATransaction.commit()
|
CATransaction.commit()
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Audio Session & Notifications
|
|
||||||
|
|
||||||
private func configureAudioSession() {
|
private func configureAudioSession() {
|
||||||
let session = AVAudioSession.sharedInstance()
|
let audioSession = AVAudioSession.sharedInstance()
|
||||||
do {
|
do {
|
||||||
try session.setCategory(.playback, mode: .moviePlayback, policy: .longFormAudio, options: [])
|
try audioSession.setCategory(
|
||||||
try session.setActive(true)
|
.playback,
|
||||||
|
mode: .moviePlayback,
|
||||||
|
policy: .longFormAudio,
|
||||||
|
options: []
|
||||||
|
)
|
||||||
|
try audioSession.setActive(true)
|
||||||
} catch {
|
} catch {
|
||||||
print("Failed to configure audio session: \(error)")
|
print("Failed to configure audio session: \(error)")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// MARK: - Audio Session & Notifications
|
||||||
/// Deactivate the session AND reset the category — `setActive(false)` alone
|
|
||||||
/// leaves `.playback`/`.longFormAudio` on the shared singleton, so any later
|
|
||||||
/// reactivation (foreground, route change, other modules) re-steals audio.
|
|
||||||
private func tearDownAudioSession() {
|
|
||||||
let session = AVAudioSession.sharedInstance()
|
|
||||||
try? session.setActive(false, options: .notifyOthersOnDeactivation)
|
|
||||||
try? session.setCategory(.ambient, mode: .default, options: [.mixWithOthers])
|
|
||||||
}
|
|
||||||
|
|
||||||
private func setupNotifications() {
|
private func setupNotifications() {
|
||||||
// Handle audio session interruptions (e.g., incoming calls, other apps playing audio)
|
// Handle audio session interruptions (e.g., incoming calls, other apps playing audio)
|
||||||
@@ -275,7 +270,6 @@ class MpvPlayerView: ExpoView {
|
|||||||
|
|
||||||
func play() {
|
func play() {
|
||||||
intendedPlayState = true
|
intendedPlayState = true
|
||||||
configureAudioSession()
|
|
||||||
setupRemoteCommands()
|
setupRemoteCommands()
|
||||||
renderer?.play()
|
renderer?.play()
|
||||||
pipController?.setPlaybackRate(1.0)
|
pipController?.setPlaybackRate(1.0)
|
||||||
@@ -446,7 +440,6 @@ class MpvPlayerView: ExpoView {
|
|||||||
renderer?.stop()
|
renderer?.stop()
|
||||||
displayLayer.removeFromSuperlayer()
|
displayLayer.removeFromSuperlayer()
|
||||||
clearNowPlayingInfo()
|
clearNowPlayingInfo()
|
||||||
tearDownAudioSession()
|
|
||||||
NotificationCenter.default.removeObserver(self)
|
NotificationCenter.default.removeObserver(self)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -526,7 +519,9 @@ extension MpvPlayerView: MPVLayerRendererDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func renderer(_: MPVLayerRenderer, didSelectAudioOutput audioOutput: String) {
|
func renderer(_: MPVLayerRenderer, didSelectAudioOutput audioOutput: String) {
|
||||||
print("[MPV] Audio output ready (\(audioOutput)), syncing Now Playing")
|
// Audio output is now active - this is the right time to activate audio session and set Now Playing
|
||||||
|
print("[MPV] Audio output ready (\(audioOutput)), activating audio session and syncing Now Playing")
|
||||||
|
nowPlayingManager.activateAudioSession()
|
||||||
syncNowPlaying(isPlaying: !isPaused())
|
syncNowPlaying(isPlaying: !isPaused())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -638,9 +633,6 @@ extension MpvPlayerView: PiPControllerDelegate {
|
|||||||
print("PiP did start: \(didStartPictureInPicture)")
|
print("PiP did start: \(didStartPictureInPicture)")
|
||||||
// Ensure current time is synced when PiP starts
|
// Ensure current time is synced when PiP starts
|
||||||
pipController?.setCurrentTimeFromSeconds(cachedPosition, duration: cachedDuration)
|
pipController?.setCurrentTimeFromSeconds(cachedPosition, duration: cachedDuration)
|
||||||
// Notify JS of the actual PiP active state. `didStartPictureInPicture`
|
|
||||||
// is `false` when AVKit reports a failure to start, so reflect that.
|
|
||||||
onPictureInPictureChange(["isActive": didStartPictureInPicture])
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func pipController(_ controller: PiPController, willStopPictureInPicture: Bool) {
|
func pipController(_ controller: PiPController, willStopPictureInPicture: Bool) {
|
||||||
@@ -659,9 +651,6 @@ extension MpvPlayerView: PiPControllerDelegate {
|
|||||||
if _isZoomedToFill {
|
if _isZoomedToFill {
|
||||||
displayLayer.videoGravity = .resizeAspectFill
|
displayLayer.videoGravity = .resizeAspectFill
|
||||||
}
|
}
|
||||||
// Notify JS that PiP has fully stopped so the controls overlay can
|
|
||||||
// be re-mounted when the user returns to full screen.
|
|
||||||
onPictureInPictureChange(["isActive": false])
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func pipController(_ controller: PiPController, restoreUserInterfaceForPictureInPictureStop completionHandler: @escaping (Bool) -> Void) {
|
func pipController(_ controller: PiPController, restoreUserInterfaceForPictureInPictureStop completionHandler: @escaping (Bool) -> Void) {
|
||||||
|
|||||||
@@ -1,13 +1,10 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<uses-permission android:name="com.android.providers.tv.permission.WRITE_EPG_DATA" />
|
|
||||||
<application>
|
<application>
|
||||||
<receiver android:name=".TvRecommendationsReceiver" android:exported="true">
|
<receiver
|
||||||
|
android:name=".TvRecommendationsReceiver"
|
||||||
|
android:exported="true">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.media.tv.action.INITIALIZE_PROGRAMS" />
|
<action android:name="android.media.tv.action.INITIALIZE_PROGRAMS" />
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
</intent-filter>
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.media.tv.action.PREVIEW_PROGRAM_BROWSABLE_DISABLED" />
|
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</receiver>
|
</receiver>
|
||||||
</application>
|
</application>
|
||||||
|
|||||||
@@ -61,61 +61,31 @@ internal object TvRecommendationsPublisher {
|
|||||||
|
|
||||||
fun clear(context: Context): Boolean {
|
fun clear(context: Context): Boolean {
|
||||||
val prefs = preferences(context)
|
val prefs = preferences(context)
|
||||||
|
val channelId = prefs.getLong(KEY_CHANNEL_ID, -1L)
|
||||||
|
val programIds = prefs.getString(KEY_PROGRAM_IDS, null)?.let(::JSONObject)
|
||||||
val contentResolver = context.contentResolver
|
val contentResolver = context.contentResolver
|
||||||
|
|
||||||
// KEY_PROGRAM_IDS is now { channelId: "{ providerId: programId }" }
|
if (programIds != null) {
|
||||||
val allProgramIds = prefs.getString(KEY_PROGRAM_IDS, null)?.let(::JSONObject)
|
|
||||||
if (allProgramIds != null) {
|
|
||||||
var deletedPrograms = 0
|
var deletedPrograms = 0
|
||||||
val channelKeys = allProgramIds.keys()
|
val keys = programIds.keys()
|
||||||
while (channelKeys.hasNext()) {
|
while (keys.hasNext()) {
|
||||||
val channelIdStr = channelKeys.next()
|
val key = keys.next()
|
||||||
val programIdsJson = allProgramIds.optString(channelIdStr)
|
val programId = programIds.optLong(key, -1L)
|
||||||
if (programIdsJson.isBlank()) continue
|
if (programId > 0L) {
|
||||||
|
contentResolver.delete(
|
||||||
try {
|
TvContractCompat.buildPreviewProgramUri(programId),
|
||||||
val programIds = JSONObject(programIdsJson)
|
null,
|
||||||
val keys = programIds.keys()
|
null
|
||||||
while (keys.hasNext()) {
|
)
|
||||||
val providerId = keys.next()
|
deletedPrograms += 1
|
||||||
val programId = programIds.optLong(providerId, -1L)
|
|
||||||
if (programId > 0L) {
|
|
||||||
deletePreviewProgram(contentResolver, programId)
|
|
||||||
deletedPrograms += 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (e: Exception) {
|
|
||||||
Log.w(TAG, "clear(): failed to parse programIds for channel $channelIdStr", e)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Notify the channel
|
|
||||||
val channelId = channelIdStr.toLongOrNull() ?: -1L
|
|
||||||
if (channelId > 0L) {
|
|
||||||
try {
|
|
||||||
contentResolver.notifyChange(TvContractCompat.buildChannelUri(channelId), null)
|
|
||||||
} catch (e: SecurityException) {
|
|
||||||
Log.w(TAG, "clear(): lost provider permission, cannot notify channel $channelId", e)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove per-channel pref
|
|
||||||
prefs.edit().remove("programIds_$channelIdStr").apply()
|
|
||||||
}
|
}
|
||||||
Log.d(TAG, "clear(): deleted $deletedPrograms preview program(s)")
|
Log.d(TAG, "clear(): deleted $deletedPrograms preview program(s)")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Also handle legacy format (flat { providerId: programId }) for migration
|
if (channelId > 0L) {
|
||||||
val legacyProgramIds = prefs.getString("legacy_" + KEY_PROGRAM_IDS, null)?.let(::JSONObject)
|
contentResolver.notifyChange(TvContractCompat.buildChannelUri(channelId), null)
|
||||||
if (legacyProgramIds != null) {
|
Log.d(TAG, "clear(): notified channel $channelId")
|
||||||
val keys = legacyProgramIds.keys()
|
|
||||||
while (keys.hasNext()) {
|
|
||||||
val key = keys.next()
|
|
||||||
val programId = legacyProgramIds.optLong(key, -1L)
|
|
||||||
if (programId > 0L) {
|
|
||||||
deletePreviewProgram(contentResolver, programId)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
prefs.edit().remove("legacy_" + KEY_PROGRAM_IDS).apply()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
prefs.edit()
|
prefs.edit()
|
||||||
@@ -126,262 +96,126 @@ internal object TvRecommendationsPublisher {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Delete a single preview program from the TvProvider.
|
|
||||||
* Called by clear(), synchronize() (stale programs), and TvRecommendationsReceiver (user removed).
|
|
||||||
*/
|
|
||||||
fun deletePreviewProgram(context: Context, programId: Long) {
|
|
||||||
try {
|
|
||||||
context.contentResolver.delete(
|
|
||||||
TvContractCompat.buildPreviewProgramUri(programId),
|
|
||||||
null,
|
|
||||||
null
|
|
||||||
)
|
|
||||||
Log.d(TAG, "deletePreviewProgram(): deleted programId=$programId")
|
|
||||||
|
|
||||||
// Also remove from stored programIds prefs
|
|
||||||
removeProgramFromPrefs(context, programId)
|
|
||||||
} catch (e: SecurityException) {
|
|
||||||
Log.w(TAG, "deletePreviewProgram(): lost provider permission for programId=$programId", e)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun deletePreviewProgram(contentResolver: android.content.ContentResolver, programId: Long) {
|
|
||||||
try {
|
|
||||||
contentResolver.delete(
|
|
||||||
TvContractCompat.buildPreviewProgramUri(programId),
|
|
||||||
null,
|
|
||||||
null
|
|
||||||
)
|
|
||||||
} catch (e: SecurityException) {
|
|
||||||
Log.w(TAG, "deletePreviewProgram(): lost provider permission for programId=$programId", e)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun removeProgramFromPrefs(context: Context, programId: Long) {
|
|
||||||
val prefs = preferences(context)
|
|
||||||
val programIdsJson = prefs.getString(KEY_PROGRAM_IDS, null) ?: return
|
|
||||||
try {
|
|
||||||
val programIds = JSONObject(programIdsJson)
|
|
||||||
val keys = programIds.keys()
|
|
||||||
while (keys.hasNext()) {
|
|
||||||
val key = keys.next()
|
|
||||||
if (programIds.optLong(key, -1L) == programId) {
|
|
||||||
programIds.remove(key)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
prefs.edit().putString(KEY_PROGRAM_IDS, programIds.toString()).apply()
|
|
||||||
} catch (e: Exception) {
|
|
||||||
Log.w(TAG, "removeProgramFromPrefs(): failed to update prefs for programId=$programId", e)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun synchronize(context: Context, payload: JSONObject): Boolean {
|
private fun synchronize(context: Context, payload: JSONObject): Boolean {
|
||||||
val sections = payload.optJSONArray("sections") ?: JSONArray()
|
val sections = payload.optJSONArray("sections") ?: JSONArray()
|
||||||
if (sections.length() == 0) {
|
val firstSection = if (sections.length() > 0) sections.optJSONObject(0) else null
|
||||||
Log.w(TAG, "synchronize(): no sections in payload")
|
val sectionTitle = firstSection?.optString("title")?.takeIf { it.isNotBlank() } ?: DEFAULT_CHANNEL_NAME
|
||||||
return false
|
val items = firstSection?.optJSONArray("items") ?: JSONArray()
|
||||||
}
|
|
||||||
|
|
||||||
val prefs = preferences(context)
|
|
||||||
val allNextProgramIds = JSONObject()
|
|
||||||
var totalActive = 0
|
|
||||||
var totalDeleted = 0
|
|
||||||
|
|
||||||
for (sectionIndex in 0 until sections.length()) {
|
|
||||||
val section = sections.optJSONObject(sectionIndex) ?: continue
|
|
||||||
val sectionTitle = section.optString("title")?.takeIf { it.isNotBlank() } ?: DEFAULT_CHANNEL_NAME
|
|
||||||
val items = section.optJSONArray("items") ?: JSONArray()
|
|
||||||
|
|
||||||
Log.d(
|
|
||||||
TAG,
|
|
||||||
"synchronize(): section \"$sectionTitle\" ($sectionIndex/${sections.length()}) with ${items.length()} item(s)"
|
|
||||||
)
|
|
||||||
|
|
||||||
val channelId = getOrCreateChannel(context, sectionTitle)
|
|
||||||
if (channelId <= 0L) {
|
|
||||||
Log.w(TAG, "synchronize(): failed to get or create channel for \"$sectionTitle\"")
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
// Per Android docs: check channel.isBrowsable() and request if needed.
|
|
||||||
if (!isChannelBrowsable(context, channelId)) {
|
|
||||||
Log.d(TAG, "synchronize(): channel $channelId not browsable, requesting browsable")
|
|
||||||
TvContractCompat.requestChannelBrowsable(context, channelId)
|
|
||||||
}
|
|
||||||
|
|
||||||
val prefKey = "programIds_$channelId"
|
|
||||||
val previousProgramIds = prefs.getString(prefKey, null)
|
|
||||||
?.let(::JSONObject)
|
|
||||||
?: JSONObject()
|
|
||||||
val nextProgramIds = JSONObject()
|
|
||||||
val activeProviderIds = mutableSetOf<String>()
|
|
||||||
|
|
||||||
for (index in 0 until items.length()) {
|
|
||||||
val item = items.optJSONObject(index) ?: continue
|
|
||||||
val providerId = item.optString("id")
|
|
||||||
if (providerId.isBlank()) continue
|
|
||||||
|
|
||||||
val programId = upsertPreviewProgram(
|
|
||||||
context = context,
|
|
||||||
channelId = channelId,
|
|
||||||
item = item,
|
|
||||||
previousProgramId = previousProgramIds.optLong(providerId, -1L),
|
|
||||||
weight = index
|
|
||||||
)
|
|
||||||
|
|
||||||
if (programId > 0L) {
|
|
||||||
activeProviderIds += providerId
|
|
||||||
nextProgramIds.put(providerId, programId)
|
|
||||||
Log.d(TAG, "synchronize(): upserted program for item=$providerId programId=$programId")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var deletedPrograms = 0
|
|
||||||
val previousKeys = previousProgramIds.keys()
|
|
||||||
while (previousKeys.hasNext()) {
|
|
||||||
val providerId = previousKeys.next()
|
|
||||||
if (activeProviderIds.contains(providerId)) continue
|
|
||||||
|
|
||||||
val programId = previousProgramIds.optLong(providerId, -1L)
|
|
||||||
if (programId > 0L) {
|
|
||||||
deletePreviewProgram(context, programId)
|
|
||||||
deletedPrograms += 1
|
|
||||||
Log.d(TAG, "synchronize(): deleted stale programId=$programId for item=$providerId")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
allNextProgramIds.put(channelId.toString(), nextProgramIds.toString())
|
|
||||||
prefs.edit().putString(prefKey, nextProgramIds.toString()).apply()
|
|
||||||
totalActive += activeProviderIds.size
|
|
||||||
totalDeleted += deletedPrograms
|
|
||||||
|
|
||||||
logProviderState(context, channelId)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store all channel program IDs for clear() to use
|
|
||||||
prefs.edit().putString(KEY_PROGRAM_IDS, allNextProgramIds.toString()).apply()
|
|
||||||
|
|
||||||
Log.d(
|
Log.d(
|
||||||
TAG,
|
TAG,
|
||||||
"synchronize(): completed across ${sections.length()} section(s), $totalActive active program(s), deleted $totalDeleted stale program(s)"
|
"synchronize(): using section \"$sectionTitle\" with ${items.length()} item(s)"
|
||||||
|
)
|
||||||
|
|
||||||
|
val channelId = getOrCreateChannel(context, sectionTitle)
|
||||||
|
if (channelId <= 0L) {
|
||||||
|
Log.w(TAG, "synchronize(): failed to get or create preview channel")
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
Log.d(TAG, "synchronize(): publishing into channelId=$channelId")
|
||||||
|
|
||||||
|
val previousProgramIds = preferences(context)
|
||||||
|
.getString(KEY_PROGRAM_IDS, null)
|
||||||
|
?.let(::JSONObject)
|
||||||
|
?: JSONObject()
|
||||||
|
val nextProgramIds = JSONObject()
|
||||||
|
val activeProviderIds = mutableSetOf<String>()
|
||||||
|
|
||||||
|
for (index in 0 until items.length()) {
|
||||||
|
val item = items.optJSONObject(index) ?: continue
|
||||||
|
val providerId = item.optString("id")
|
||||||
|
if (providerId.isBlank()) continue
|
||||||
|
|
||||||
|
val programId = upsertPreviewProgram(
|
||||||
|
context = context,
|
||||||
|
channelId = channelId,
|
||||||
|
item = item,
|
||||||
|
previousProgramId = previousProgramIds.optLong(providerId, -1L),
|
||||||
|
weight = index
|
||||||
|
)
|
||||||
|
|
||||||
|
if (programId > 0L) {
|
||||||
|
activeProviderIds += providerId
|
||||||
|
nextProgramIds.put(providerId, programId)
|
||||||
|
Log.d(TAG, "synchronize(): upserted program for item=$providerId programId=$programId")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var deletedPrograms = 0
|
||||||
|
val previousKeys = previousProgramIds.keys()
|
||||||
|
while (previousKeys.hasNext()) {
|
||||||
|
val providerId = previousKeys.next()
|
||||||
|
if (activeProviderIds.contains(providerId)) continue
|
||||||
|
|
||||||
|
val programId = previousProgramIds.optLong(providerId, -1L)
|
||||||
|
if (programId > 0L) {
|
||||||
|
context.contentResolver.delete(
|
||||||
|
TvContractCompat.buildPreviewProgramUri(programId),
|
||||||
|
null,
|
||||||
|
null
|
||||||
|
)
|
||||||
|
deletedPrograms += 1
|
||||||
|
Log.d(TAG, "synchronize(): deleted stale programId=$programId for item=$providerId")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
preferences(context)
|
||||||
|
.edit()
|
||||||
|
.putLong(KEY_CHANNEL_ID, channelId)
|
||||||
|
.putString(KEY_PROGRAM_IDS, nextProgramIds.toString())
|
||||||
|
.apply()
|
||||||
|
|
||||||
|
logProviderState(context, channelId)
|
||||||
|
|
||||||
|
Log.d(
|
||||||
|
TAG,
|
||||||
|
"synchronize(): completed with ${activeProviderIds.size} active program(s), deleted $deletedPrograms stale program(s)"
|
||||||
)
|
)
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Query provider to check if a channel is browsable.
|
|
||||||
* Per Android docs: "check channel.isBrowsable() before updating programs."
|
|
||||||
*/
|
|
||||||
private fun isChannelBrowsable(context: Context, channelId: Long): Boolean {
|
|
||||||
return try {
|
|
||||||
context.contentResolver.query(
|
|
||||||
TvContractCompat.buildChannelUri(channelId),
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null
|
|
||||||
)?.use { cursor ->
|
|
||||||
if (cursor.moveToFirst()) {
|
|
||||||
val browsableIndex = cursor.getColumnIndex(TvContractCompat.Channels.COLUMN_BROWSABLE)
|
|
||||||
if (browsableIndex >= 0) cursor.getInt(browsableIndex) == 1 else true
|
|
||||||
} else {
|
|
||||||
false
|
|
||||||
}
|
|
||||||
} ?: false
|
|
||||||
} catch (e: SecurityException) {
|
|
||||||
Log.w(TAG, "isChannelBrowsable(): lost provider permission for channelId=$channelId", e)
|
|
||||||
true // Assume browsable if we can't check, to avoid blocking updates
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Query provider to verify a channel actually exists.
|
|
||||||
* Prevents the channel-delete-recreate bug: if update() returns 0 rows
|
|
||||||
* we must first check whether the channel was deleted by the system
|
|
||||||
* or if the update simply failed for another reason.
|
|
||||||
*/
|
|
||||||
private fun channelExistsInProvider(context: Context, channelId: Long): Boolean {
|
|
||||||
return try {
|
|
||||||
context.contentResolver.query(
|
|
||||||
TvContractCompat.buildChannelUri(channelId),
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null
|
|
||||||
)?.use { cursor ->
|
|
||||||
cursor.moveToFirst()
|
|
||||||
} ?: false
|
|
||||||
} catch (e: SecurityException) {
|
|
||||||
Log.w(TAG, "channelExistsInProvider(): lost provider permission for channelId=$channelId", e)
|
|
||||||
false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun getOrCreateChannel(context: Context, displayName: String): Long {
|
private fun getOrCreateChannel(context: Context, displayName: String): Long {
|
||||||
val prefs = preferences(context)
|
val prefs = preferences(context)
|
||||||
val existingChannelId = prefs.getLong(KEY_CHANNEL_ID, -1L)
|
val existingChannelId = prefs.getLong(KEY_CHANNEL_ID, -1L)
|
||||||
val contentResolver = context.contentResolver
|
val contentResolver = context.contentResolver
|
||||||
|
|
||||||
if (existingChannelId > 0L) {
|
if (existingChannelId > 0L) {
|
||||||
// Query provider first to verify channel actually exists (prevents recreate bug)
|
val updated = Channel.Builder()
|
||||||
val exists = channelExistsInProvider(context, existingChannelId)
|
.setType(TvContractCompat.Channels.TYPE_PREVIEW)
|
||||||
|
.setDisplayName(displayName)
|
||||||
|
.setAppLinkIntentUri(buildIntentUri(context, "streamyfin://"))
|
||||||
|
.build()
|
||||||
|
|
||||||
if (exists) {
|
val updatedRows = contentResolver.update(
|
||||||
// Channel exists — update it in place, never recreate
|
TvContractCompat.buildChannelUri(existingChannelId),
|
||||||
val updated = Channel.Builder()
|
updated.toContentValues(),
|
||||||
.setType(TvContractCompat.Channels.TYPE_PREVIEW)
|
null,
|
||||||
.setDisplayName(displayName)
|
null
|
||||||
.setAppLinkIntentUri(buildIntentUri(context, "streamyfin://"))
|
)
|
||||||
.build()
|
|
||||||
|
|
||||||
try {
|
if (updatedRows > 0) {
|
||||||
val updatedRows = contentResolver.update(
|
TvContractCompat.requestChannelBrowsable(context, existingChannelId)
|
||||||
TvContractCompat.buildChannelUri(existingChannelId),
|
storeChannelLogo(context, existingChannelId)
|
||||||
updated.toContentValues(),
|
Log.d(TAG, "getOrCreateChannel(): updated existing channelId=$existingChannelId and requested browsable")
|
||||||
null,
|
return existingChannelId
|
||||||
null
|
|
||||||
)
|
|
||||||
|
|
||||||
if (updatedRows > 0) {
|
|
||||||
TvContractCompat.requestChannelBrowsable(context, existingChannelId)
|
|
||||||
storeChannelLogo(context, existingChannelId)
|
|
||||||
Log.d(TAG, "getOrCreateChannel(): updated existing channelId=$existingChannelId and requested browsable")
|
|
||||||
return existingChannelId
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update returned 0 rows but channel exists — log and return existing ID, don't recreate
|
|
||||||
Log.e(TAG, "getOrCreateChannel(): update returned 0 for existing channelId=$existingChannelId but channel exists — not recreating")
|
|
||||||
return existingChannelId
|
|
||||||
} catch (e: SecurityException) {
|
|
||||||
Log.w(TAG, "getOrCreateChannel(): lost provider permission updating channelId=$existingChannelId", e)
|
|
||||||
return existingChannelId
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Channel truly doesn't exist in provider — recreate
|
Log.w(TAG, "getOrCreateChannel(): stored channelId=$existingChannelId was stale, recreating")
|
||||||
Log.w(TAG, "getOrCreateChannel(): channelId=$existingChannelId not in provider, recreating")
|
|
||||||
prefs.edit().remove(KEY_CHANNEL_ID).apply()
|
prefs.edit().remove(KEY_CHANNEL_ID).apply()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a new channel
|
|
||||||
val channel = Channel.Builder()
|
val channel = Channel.Builder()
|
||||||
.setType(TvContractCompat.Channels.TYPE_PREVIEW)
|
.setType(TvContractCompat.Channels.TYPE_PREVIEW)
|
||||||
.setDisplayName(displayName)
|
.setDisplayName(displayName)
|
||||||
.setAppLinkIntentUri(buildIntentUri(context, "streamyfin://"))
|
.setAppLinkIntentUri(buildIntentUri(context, "streamyfin://"))
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
val channelUri = try {
|
val channelUri = contentResolver.insert(
|
||||||
contentResolver.insert(
|
TvContractCompat.Channels.CONTENT_URI,
|
||||||
TvContractCompat.Channels.CONTENT_URI,
|
channel.toContentValues()
|
||||||
channel.toContentValues()
|
) ?: return -1L
|
||||||
)
|
|
||||||
} catch (e: SecurityException) {
|
|
||||||
Log.e(TAG, "getOrCreateChannel(): lost provider permission, cannot create channel", e)
|
|
||||||
null
|
|
||||||
} ?: return -1L
|
|
||||||
|
|
||||||
val channelId = ContentUris.parseId(channelUri)
|
val channelId = ContentUris.parseId(channelUri)
|
||||||
TvContractCompat.requestChannelBrowsable(context, channelId)
|
TvContractCompat.requestChannelBrowsable(context, channelId)
|
||||||
@@ -415,62 +249,42 @@ internal object TvRecommendationsPublisher {
|
|||||||
builder.setDescription(it)
|
builder.setDescription(it)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Per Android docs: use unique URIs for all images to avoid stale cache
|
|
||||||
imageUrl.takeIf { it.isNotBlank() }?.let {
|
imageUrl.takeIf { it.isNotBlank() }?.let {
|
||||||
val uniqueImageUrl = appendCacheBuster(it)
|
val imageUri = Uri.parse(it)
|
||||||
val imageUri = Uri.parse(uniqueImageUrl)
|
|
||||||
builder.setPosterArtUri(imageUri)
|
builder.setPosterArtUri(imageUri)
|
||||||
builder.setThumbnailUri(imageUri)
|
builder.setThumbnailUri(imageUri)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
val contentValues = builder.build().toContentValues()
|
val contentValues = builder.build().toContentValues()
|
||||||
val contentResolver = context.contentResolver
|
val contentResolver = context.contentResolver
|
||||||
|
|
||||||
if (previousProgramId > 0L) {
|
if (previousProgramId > 0L) {
|
||||||
try {
|
val updatedRows = contentResolver.update(
|
||||||
val updatedRows = contentResolver.update(
|
TvContractCompat.buildPreviewProgramUri(previousProgramId),
|
||||||
TvContractCompat.buildPreviewProgramUri(previousProgramId),
|
contentValues,
|
||||||
contentValues,
|
null,
|
||||||
null,
|
null
|
||||||
null
|
)
|
||||||
)
|
|
||||||
|
|
||||||
if (updatedRows > 0) {
|
if (updatedRows > 0) {
|
||||||
Log.d(TAG, "upsertPreviewProgram(): updated existing programId=$previousProgramId")
|
Log.d(TAG, "upsertPreviewProgram(): updated existing programId=$previousProgramId")
|
||||||
return previousProgramId
|
return previousProgramId
|
||||||
}
|
|
||||||
|
|
||||||
Log.w(TAG, "upsertPreviewProgram(): existing programId=$previousProgramId was stale, inserting new row")
|
|
||||||
} catch (e: SecurityException) {
|
|
||||||
Log.w(TAG, "upsertPreviewProgram(): lost provider permission for programId=$previousProgramId", e)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Log.w(TAG, "upsertPreviewProgram(): existing programId=$previousProgramId was stale, inserting new row")
|
||||||
}
|
}
|
||||||
|
|
||||||
val insertedUri = try {
|
val insertedUri = contentResolver.insert(
|
||||||
contentResolver.insert(
|
TvContractCompat.PreviewPrograms.CONTENT_URI,
|
||||||
TvContractCompat.PreviewPrograms.CONTENT_URI,
|
contentValues
|
||||||
contentValues
|
) ?: return -1L
|
||||||
)
|
|
||||||
} catch (e: SecurityException) {
|
|
||||||
Log.w(TAG, "upsertPreviewProgram(): lost provider permission, cannot insert program", e)
|
|
||||||
null
|
|
||||||
} ?: return -1L
|
|
||||||
|
|
||||||
val programId = ContentUris.parseId(insertedUri)
|
val programId = ContentUris.parseId(insertedUri)
|
||||||
Log.d(TAG, "upsertPreviewProgram(): inserted new programId=$programId")
|
Log.d(TAG, "upsertPreviewProgram(): inserted new programId=$programId")
|
||||||
return programId
|
return programId
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Append a cache-busting parameter to ensure unique URIs when images change.
|
|
||||||
* Per Android docs: "Use unique Uris for all images... the old image will
|
|
||||||
* continue to appear if you don't change the Uri."
|
|
||||||
*/
|
|
||||||
private fun appendCacheBuster(imageUrl: String): String {
|
|
||||||
val separator = if (imageUrl.contains("?")) "&" else "?"
|
|
||||||
return "$imageUrl${separator}_t=${System.currentTimeMillis()}"
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun buildIntentUri(context: Context, deepLink: String): Uri {
|
private fun buildIntentUri(context: Context, deepLink: String): Uri {
|
||||||
val intent = Intent(Intent.ACTION_VIEW).apply {
|
val intent = Intent(Intent.ACTION_VIEW).apply {
|
||||||
data = Uri.parse(deepLink)
|
data = Uri.parse(deepLink)
|
||||||
@@ -492,17 +306,13 @@ internal object TvRecommendationsPublisher {
|
|||||||
|
|
||||||
private fun storeChannelLogo(context: Context, channelId: Long) {
|
private fun storeChannelLogo(context: Context, channelId: Long) {
|
||||||
val bitmap = applicationIconBitmap(context) ?: return
|
val bitmap = applicationIconBitmap(context) ?: return
|
||||||
try {
|
val outputStream = context.contentResolver.openOutputStream(
|
||||||
val outputStream = context.contentResolver.openOutputStream(
|
TvContractCompat.buildChannelLogoUri(channelId)
|
||||||
TvContractCompat.buildChannelLogoUri(channelId)
|
) ?: return
|
||||||
) ?: return
|
|
||||||
|
|
||||||
outputStream.use { stream ->
|
outputStream.use { stream ->
|
||||||
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream)
|
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream)
|
||||||
stream.flush()
|
stream.flush()
|
||||||
}
|
|
||||||
} catch (e: SecurityException) {
|
|
||||||
Log.w(TAG, "storeChannelLogo(): lost provider permission for channelId=$channelId", e)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -531,14 +341,9 @@ internal object TvRecommendationsPublisher {
|
|||||||
return bitmap
|
return bitmap
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getChannelId(context: Context): Long {
|
|
||||||
return preferences(context).getLong(KEY_CHANNEL_ID, -1L)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun preferences(context: Context): SharedPreferences {
|
private fun preferences(context: Context): SharedPreferences {
|
||||||
return context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
|
return context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun logProviderState(context: Context, channelId: Long) {
|
private fun logProviderState(context: Context, channelId: Long) {
|
||||||
val contentResolver = context.contentResolver
|
val contentResolver = context.contentResolver
|
||||||
|
|
||||||
@@ -567,8 +372,8 @@ internal object TvRecommendationsPublisher {
|
|||||||
Log.w(TAG, "logProviderState(): channelId=$channelId exists=false")
|
Log.w(TAG, "logProviderState(): channelId=$channelId exists=false")
|
||||||
}
|
}
|
||||||
} ?: Log.w(TAG, "logProviderState(): channel query returned null for channelId=$channelId")
|
} ?: Log.w(TAG, "logProviderState(): channel query returned null for channelId=$channelId")
|
||||||
} catch (error: SecurityException) {
|
} catch (error: Exception) {
|
||||||
Log.w(TAG, "logProviderState(): lost provider permission for channelId=$channelId", error)
|
Log.w(TAG, "logProviderState(): failed to query channelId=$channelId", error)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,19 +1,12 @@
|
|||||||
import { requireNativeView } from "expo";
|
import { requireNativeView } from "expo";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import type { View } from "react-native";
|
import type { View } from "react-native";
|
||||||
import { Platform } from "react-native";
|
|
||||||
|
|
||||||
import type { TvSearchViewProps } from "./TvSearchView.types";
|
import type { TvSearchViewProps } from "./TvSearchView.types";
|
||||||
|
|
||||||
// The native TvSearchModule is Apple-only (tvOS SwiftUI `.searchable`).
|
|
||||||
// On Android the component is never rendered, but we must avoid calling
|
|
||||||
// `requireNativeView` at module-scope because it would crash on import.
|
|
||||||
const NativeView: React.ComponentType<
|
const NativeView: React.ComponentType<
|
||||||
TvSearchViewProps & React.RefAttributes<View>
|
TvSearchViewProps & React.RefAttributes<View>
|
||||||
> =
|
> = requireNativeView("TvSearchModule");
|
||||||
Platform.OS === "ios"
|
|
||||||
? requireNativeView("TvSearchModule")
|
|
||||||
: ((() => null) as any);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Forwards its ref to the underlying native view so it can be used as a
|
* Forwards its ref to the underlying native view so it can be used as a
|
||||||
|
|||||||
@@ -22,7 +22,9 @@
|
|||||||
"lint": "biome check --write --unsafe --max-diagnostics 1000",
|
"lint": "biome check --write --unsafe --max-diagnostics 1000",
|
||||||
"format": "biome format --write .",
|
"format": "biome format --write .",
|
||||||
"doctor": "expo-doctor",
|
"doctor": "expo-doctor",
|
||||||
"test": "bun run typecheck && bun run lint && bun run format && bun run doctor",
|
"i18n:check": "bun scripts/check-i18n-keys.mjs",
|
||||||
|
"i18n:fix-unused": "bun scripts/check-i18n-keys.mjs --fix-unused",
|
||||||
|
"test": "bun run typecheck && bun run lint && bun run format && bun run i18n:check && bun run doctor",
|
||||||
"postinstall": "patch-package"
|
"postinstall": "patch-package"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
@@ -4,68 +4,28 @@ import type { DownloadedItem, DownloadsDatabase } from "./types";
|
|||||||
|
|
||||||
const DOWNLOADS_DATABASE_KEY = "downloads.v2.json";
|
const DOWNLOADS_DATABASE_KEY = "downloads.v2.json";
|
||||||
|
|
||||||
// Performance optimization: Cache the parsed database to avoid repeated JSON.parse calls
|
|
||||||
let cachedDb: DownloadsDatabase | null = null;
|
|
||||||
let cacheVersion = 0;
|
|
||||||
|
|
||||||
// Performance optimization: Cache the flattened items array
|
|
||||||
let cachedItems: DownloadedItem[] | null = null;
|
|
||||||
let itemsCacheVersion = -1;
|
|
||||||
|
|
||||||
// Performance optimization: Index for O(1) item lookups by ID
|
|
||||||
let itemIndex: Map<string, DownloadedItem> | null = null;
|
|
||||||
let indexCacheVersion = -1;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the downloads database from storage
|
* Get the downloads database from storage
|
||||||
* PERFORMANCE: Caches the parsed database to avoid repeated JSON.parse calls.
|
|
||||||
* NOTE: Returns the shared cached instance — do NOT mutate it directly. Go
|
|
||||||
* through addDownloadedItem/updateDownloadedItem/removeDownloadedItem so
|
|
||||||
* saveDownloadsDatabase() runs and the derived caches stay consistent.
|
|
||||||
*/
|
*/
|
||||||
export function getDownloadsDatabase(): DownloadsDatabase {
|
export function getDownloadsDatabase(): DownloadsDatabase {
|
||||||
// Return cached database if available
|
|
||||||
if (cachedDb !== null) {
|
|
||||||
return cachedDb;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Parse from storage and cache the result
|
|
||||||
const file = storage.getString(DOWNLOADS_DATABASE_KEY);
|
const file = storage.getString(DOWNLOADS_DATABASE_KEY);
|
||||||
if (file) {
|
if (file) {
|
||||||
cachedDb = JSON.parse(file) as DownloadsDatabase;
|
return JSON.parse(file) as DownloadsDatabase;
|
||||||
return cachedDb;
|
|
||||||
}
|
}
|
||||||
|
return { movies: {}, series: {}, other: {} };
|
||||||
const emptyDb = { movies: {}, series: {}, other: {} };
|
|
||||||
cachedDb = emptyDb;
|
|
||||||
return emptyDb;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save the downloads database to storage
|
* Save the downloads database to storage
|
||||||
* PERFORMANCE: Updates cache and invalidates derived caches
|
|
||||||
*/
|
*/
|
||||||
export function saveDownloadsDatabase(db: DownloadsDatabase): void {
|
export function saveDownloadsDatabase(db: DownloadsDatabase): void {
|
||||||
storage.set(DOWNLOADS_DATABASE_KEY, JSON.stringify(db));
|
storage.set(DOWNLOADS_DATABASE_KEY, JSON.stringify(db));
|
||||||
// Update the cache with the new database
|
|
||||||
cachedDb = db;
|
|
||||||
// Invalidate derived caches (items array and index)
|
|
||||||
cachedItems = null;
|
|
||||||
itemIndex = null;
|
|
||||||
cacheVersion++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get all downloaded items as a flat array
|
* Get all downloaded items as a flat array
|
||||||
* PERFORMANCE: Caches the flattened array to avoid rebuilding on every call
|
|
||||||
*/
|
*/
|
||||||
export function getAllDownloadedItems(): DownloadedItem[] {
|
export function getAllDownloadedItems(): DownloadedItem[] {
|
||||||
// Return cached items if available and up-to-date
|
|
||||||
if (cachedItems !== null && itemsCacheVersion === cacheVersion) {
|
|
||||||
return cachedItems;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Build the items array from the database
|
|
||||||
const db = getDownloadsDatabase();
|
const db = getDownloadsDatabase();
|
||||||
const items: DownloadedItem[] = [];
|
const items: DownloadedItem[] = [];
|
||||||
|
|
||||||
@@ -87,41 +47,34 @@ export function getAllDownloadedItems(): DownloadedItem[] {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cache the result
|
|
||||||
cachedItems = items;
|
|
||||||
itemsCacheVersion = cacheVersion;
|
|
||||||
|
|
||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Build or refresh the item index for O(1) lookups
|
* Get a downloaded item by its ID
|
||||||
*/
|
*/
|
||||||
function ensureItemIndex(): void {
|
export function getDownloadedItemById(id: string): DownloadedItem | undefined {
|
||||||
if (itemIndex !== null && indexCacheVersion === cacheVersion) {
|
const db = getDownloadsDatabase();
|
||||||
return; // Index is up-to-date
|
|
||||||
|
if (db.movies[id]) {
|
||||||
|
return db.movies[id];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build new index from all items
|
for (const series of Object.values(db.series)) {
|
||||||
itemIndex = new Map<string, DownloadedItem>();
|
for (const season of Object.values(series.seasons)) {
|
||||||
const items = getAllDownloadedItems();
|
for (const episode of Object.values(season.episodes)) {
|
||||||
|
if (episode.item.Id === id) {
|
||||||
for (const item of items) {
|
return episode;
|
||||||
if (item.item.Id) {
|
}
|
||||||
itemIndex.set(item.item.Id, item);
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
indexCacheVersion = cacheVersion;
|
if (db.other?.[id]) {
|
||||||
}
|
return db.other[id];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
return undefined;
|
||||||
* Get a downloaded item by its ID
|
|
||||||
* PERFORMANCE: Uses O(1) index lookup instead of O(n²) iteration
|
|
||||||
*/
|
|
||||||
export function getDownloadedItemById(id: string): DownloadedItem | undefined {
|
|
||||||
ensureItemIndex();
|
|
||||||
return itemIndex!.get(id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -268,5 +221,4 @@ export function updateDownloadedItem(
|
|||||||
*/
|
*/
|
||||||
export function clearAllDownloadedItems(): void {
|
export function clearAllDownloadedItems(): void {
|
||||||
saveDownloadsDatabase({ movies: {}, series: {}, other: {} });
|
saveDownloadsDatabase({ movies: {}, series: {}, other: {} });
|
||||||
// saveDownloadsDatabase already invalidates caches
|
|
||||||
}
|
}
|
||||||
|
|||||||
268
scripts/check-i18n-keys.mjs
Normal file
268
scripts/check-i18n-keys.mjs
Normal file
@@ -0,0 +1,268 @@
|
|||||||
|
#!/usr/bin/env bun
|
||||||
|
/**
|
||||||
|
* i18n key checker for Streamyfin.
|
||||||
|
*
|
||||||
|
* Detects:
|
||||||
|
* - MISSING keys: a static `t("a.b.c")` / `i18nKey="a.b.c"` referenced in the code
|
||||||
|
* that does not exist in the source locale (translations/en.json). These are bugs —
|
||||||
|
* the app renders the raw key. Always fails CI.
|
||||||
|
* - UNUSED (dead) keys: a key in the source locale that is referenced nowhere in the
|
||||||
|
* code, neither statically nor via a detected dynamic prefix (`t(`a.b.${x}`)`).
|
||||||
|
* These are dead weight that also clutter every locale on Crowdin.
|
||||||
|
*
|
||||||
|
* Dynamic usage is handled conservatively:
|
||||||
|
* - `t(`prefix.${x}`)` -> every key starting with `prefix.` is considered used.
|
||||||
|
* - `t(`${x}`)` -> fully dynamic, reported for manual review, never used to
|
||||||
|
* whitelist keys (in Streamyfin these are user-defined section
|
||||||
|
* titles, not translation keys).
|
||||||
|
* - Edge cases the static scan cannot see can be allow-listed in the config file.
|
||||||
|
*
|
||||||
|
* Usage:
|
||||||
|
* bun scripts/check-i18n-keys.mjs # report + exit 1 on missing OR unused
|
||||||
|
* bun scripts/check-i18n-keys.mjs --unused=warn # exit 1 only on missing; unused = warning
|
||||||
|
* bun scripts/check-i18n-keys.mjs --unused=off # ignore unused entirely
|
||||||
|
* bun scripts/check-i18n-keys.mjs --json # machine-readable output
|
||||||
|
* bun scripts/check-i18n-keys.mjs --fix-unused # remove dead keys from en.json (Crowdin syncs the rest)
|
||||||
|
*/
|
||||||
|
|
||||||
|
import {
|
||||||
|
existsSync,
|
||||||
|
readdirSync,
|
||||||
|
readFileSync,
|
||||||
|
statSync,
|
||||||
|
writeFileSync,
|
||||||
|
} from "node:fs";
|
||||||
|
import { extname, join, relative } from "node:path";
|
||||||
|
|
||||||
|
const ROOT = process.cwd();
|
||||||
|
const args = process.argv.slice(2);
|
||||||
|
const flag = (name, def) => {
|
||||||
|
const a = args.find((x) => x === `--${name}` || x.startsWith(`--${name}=`));
|
||||||
|
if (!a) return def;
|
||||||
|
const [, v] = a.split("=");
|
||||||
|
return v === undefined ? true : v;
|
||||||
|
};
|
||||||
|
const UNUSED_MODE = String(flag("unused", "error")); // error | warn | off
|
||||||
|
const JSON_OUT = !!flag("json", false);
|
||||||
|
const FIX_UNUSED = !!flag("fix-unused", false);
|
||||||
|
|
||||||
|
// ---- config ----
|
||||||
|
const CONFIG_PATH = join(ROOT, "scripts", "i18n-keys.config.json");
|
||||||
|
const DEFAULT_CONFIG = {
|
||||||
|
localesDir: "translations",
|
||||||
|
sourceLocale: "en",
|
||||||
|
// Scan the whole repo by default so keys referenced outside the obvious dirs
|
||||||
|
// (e.g. packages/, key constants in utils/atoms) are not wrongly flagged as dead.
|
||||||
|
srcDirs: ["."],
|
||||||
|
srcExtensions: [".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs"],
|
||||||
|
excludeDirs: [
|
||||||
|
"node_modules",
|
||||||
|
"ios",
|
||||||
|
"android",
|
||||||
|
".expo",
|
||||||
|
".git",
|
||||||
|
"dist",
|
||||||
|
"build",
|
||||||
|
"translations",
|
||||||
|
"scripts",
|
||||||
|
],
|
||||||
|
// Keys (or glob-ish prefixes ending with .* or *) known to be used dynamically / externally.
|
||||||
|
ignoreUnused: [],
|
||||||
|
};
|
||||||
|
const config = existsSync(CONFIG_PATH)
|
||||||
|
? { ...DEFAULT_CONFIG, ...JSON.parse(readFileSync(CONFIG_PATH, "utf8")) }
|
||||||
|
: DEFAULT_CONFIG;
|
||||||
|
|
||||||
|
// ---- helpers ----
|
||||||
|
const flatten = (obj, prefix = "", out = {}) => {
|
||||||
|
for (const [k, v] of Object.entries(obj)) {
|
||||||
|
const key = prefix ? `${prefix}.${k}` : k;
|
||||||
|
if (v && typeof v === "object" && !Array.isArray(v)) flatten(v, key, out);
|
||||||
|
else out[key] = v;
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
};
|
||||||
|
|
||||||
|
const globMatch = (key, pattern) => {
|
||||||
|
if (pattern.endsWith(".*"))
|
||||||
|
return key === pattern.slice(0, -2) || key.startsWith(pattern.slice(0, -1));
|
||||||
|
if (pattern.endsWith("*")) return key.startsWith(pattern.slice(0, -1));
|
||||||
|
return key === pattern;
|
||||||
|
};
|
||||||
|
|
||||||
|
const walk = (dir, files = []) => {
|
||||||
|
let entries;
|
||||||
|
try {
|
||||||
|
entries = readdirSync(dir);
|
||||||
|
} catch {
|
||||||
|
return files;
|
||||||
|
}
|
||||||
|
for (const name of entries) {
|
||||||
|
const full = join(dir, name);
|
||||||
|
let st;
|
||||||
|
try {
|
||||||
|
st = statSync(full);
|
||||||
|
} catch {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (st.isDirectory()) {
|
||||||
|
if (config.excludeDirs.includes(name)) continue;
|
||||||
|
walk(full, files);
|
||||||
|
} else if (config.srcExtensions.includes(extname(name))) {
|
||||||
|
files.push(full);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return files;
|
||||||
|
};
|
||||||
|
|
||||||
|
// ---- load source keys ----
|
||||||
|
const sourcePath = join(ROOT, config.localesDir, `${config.sourceLocale}.json`);
|
||||||
|
const sourceKeys = Object.keys(
|
||||||
|
flatten(JSON.parse(readFileSync(sourcePath, "utf8"))),
|
||||||
|
);
|
||||||
|
const sourceKeySet = new Set(sourceKeys);
|
||||||
|
|
||||||
|
// ---- scan code ----
|
||||||
|
const STATIC_RE = /\bt\(\s*(['"])((?:\\.|(?!\1).)+?)\1/g; // t("a.b") / t('a.b')
|
||||||
|
const TPL_STATIC_RE = /\bt\(\s*`([^`$]+)`/g; // t(`a.b`) no interpolation
|
||||||
|
const TPL_DYN_RE = /\bt\(\s*`([^`$]*)\$\{/g; // t(`a.b.${x}`) -> prefix "a.b."
|
||||||
|
const I18NKEY_RE = /\bi18nKey\s*=\s*(?:\{\s*)?(['"])((?:\\.|(?!\1).)+?)\1/g; // <Trans i18nKey="a.b">
|
||||||
|
const KEY_SHAPE = /^[A-Za-z0-9_]+(\.[A-Za-z0-9_]+)+$/; // dotted key, e.g. home.x.y
|
||||||
|
|
||||||
|
const usedStatic = new Set(); // keys passed to t(...) / i18nKey — used for MISSING detection
|
||||||
|
const dynamicPrefixes = new Set();
|
||||||
|
const fullyDynamic = []; // { file, line }
|
||||||
|
let codeBlob = ""; // all (comment-stripped) source text — searched for delimited key literals
|
||||||
|
|
||||||
|
// Strip comments so keys mentioned in comments (e.g. `// t("old.key")`) are not counted as
|
||||||
|
// usage. Block comments and JSX {/* */} are blanked (preserving newlines for line numbers);
|
||||||
|
// line comments are only stripped when `//` follows start/whitespace/punctuation, which keeps
|
||||||
|
// `://` inside string URLs intact.
|
||||||
|
const stripComments = (src) =>
|
||||||
|
src
|
||||||
|
.replace(/\/\*[\s\S]*?\*\//g, (m) => m.replace(/[^\n]/g, " "))
|
||||||
|
.replace(/(^|[\s;{}()[\],=>])\/\/[^\n]*/g, (_m, p) => p);
|
||||||
|
|
||||||
|
const files = config.srcDirs.flatMap((d) =>
|
||||||
|
walk(join(ROOT, d === "." ? "" : d) || ROOT),
|
||||||
|
);
|
||||||
|
for (const file of files) {
|
||||||
|
const text = readFileSync(file, "utf8");
|
||||||
|
const clean = stripComments(text);
|
||||||
|
codeBlob += `\n${clean}`;
|
||||||
|
for (const m of clean.matchAll(STATIC_RE)) usedStatic.add(m[2]);
|
||||||
|
for (const m of clean.matchAll(TPL_STATIC_RE)) usedStatic.add(m[1]);
|
||||||
|
for (const m of clean.matchAll(I18NKEY_RE)) usedStatic.add(m[2]);
|
||||||
|
for (const m of clean.matchAll(TPL_DYN_RE)) {
|
||||||
|
const prefix = m[1];
|
||||||
|
if (prefix?.includes(".")) dynamicPrefixes.add(prefix);
|
||||||
|
else {
|
||||||
|
const idx = clean.slice(0, m.index).split("\n").length;
|
||||||
|
fullyDynamic.push({ file: relative(ROOT, file), line: idx });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const prefixList = [...dynamicPrefixes];
|
||||||
|
// A key counts as used if its EXACT delimited literal ("k" / 'k' / `k`) appears anywhere in
|
||||||
|
// the code (covers t("k"), <Trans i18nKey>, and keys stored as bare string constants in
|
||||||
|
// arrays/config then resolved via t(variable)), or it is reached via a dynamic prefix, or
|
||||||
|
// explicitly allow-listed. Delimited search avoids substring false-matches (e.g. a.b vs a.b_c).
|
||||||
|
const literalUsed = (key) =>
|
||||||
|
codeBlob.includes(`"${key}"`) ||
|
||||||
|
codeBlob.includes(`'${key}'`) ||
|
||||||
|
codeBlob.includes(`\`${key}\``);
|
||||||
|
const isUsed = (key) =>
|
||||||
|
literalUsed(key) ||
|
||||||
|
prefixList.some((p) => key.startsWith(p)) ||
|
||||||
|
config.ignoreUnused.some((g) => globMatch(key, g));
|
||||||
|
|
||||||
|
// ---- compute ----
|
||||||
|
const unused = sourceKeys.filter((k) => !isUsed(k)).sort();
|
||||||
|
// Static references are always validated, even under a dynamic prefix: a dynamic prefix only
|
||||||
|
// affects the UNUSED calculation, never MISSING.
|
||||||
|
const missing = [...usedStatic]
|
||||||
|
.filter((k) => KEY_SHAPE.test(k) && !sourceKeySet.has(k))
|
||||||
|
.sort();
|
||||||
|
|
||||||
|
// ---- optional fix: strip dead keys from the source locale (en.json) ----
|
||||||
|
const removeKey = (obj, parts) => {
|
||||||
|
const [head, ...rest] = parts;
|
||||||
|
if (!(head in obj)) return;
|
||||||
|
if (rest.length === 0) {
|
||||||
|
delete obj[head];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
removeKey(obj[head], rest);
|
||||||
|
if (
|
||||||
|
obj[head] &&
|
||||||
|
typeof obj[head] === "object" &&
|
||||||
|
Object.keys(obj[head]).length === 0
|
||||||
|
)
|
||||||
|
delete obj[head];
|
||||||
|
};
|
||||||
|
if (FIX_UNUSED && unused.length) {
|
||||||
|
// Only edit the SOURCE locale (en.json). Crowdin owns the target locales and removes
|
||||||
|
// the keys from them automatically on the next sync once they disappear from the source.
|
||||||
|
const data = JSON.parse(readFileSync(sourcePath, "utf8"));
|
||||||
|
for (const key of unused) removeKey(data, key.split("."));
|
||||||
|
writeFileSync(sourcePath, `${JSON.stringify(data, null, 2)}\n`);
|
||||||
|
console.log(
|
||||||
|
`🧹 Removed ${unused.length} dead key(s) from ${config.sourceLocale}.json (Crowdin will sync the other locales).`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---- report ----
|
||||||
|
if (JSON_OUT) {
|
||||||
|
console.log(
|
||||||
|
JSON.stringify(
|
||||||
|
{
|
||||||
|
sourceKeys: sourceKeys.length,
|
||||||
|
missing,
|
||||||
|
unused,
|
||||||
|
dynamicPrefixes: prefixList,
|
||||||
|
fullyDynamic,
|
||||||
|
},
|
||||||
|
null,
|
||||||
|
2,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
console.log(
|
||||||
|
`🔑 i18n key check — source: ${relative(ROOT, sourcePath)} (${sourceKeys.length} keys), scanned ${files.length} files`,
|
||||||
|
);
|
||||||
|
if (prefixList.length)
|
||||||
|
console.log(
|
||||||
|
` dynamic prefixes treated as used: ${prefixList.map((p) => `${p}*`).join(", ")}`,
|
||||||
|
);
|
||||||
|
if (fullyDynamic.length)
|
||||||
|
console.log(
|
||||||
|
` ⚠️ ${fullyDynamic.length} fully-dynamic t(\`\${…}\`) call(s) (not key-based, manual review): ${fullyDynamic.map((d) => `${d.file}:${d.line}`).join(", ")}`,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (missing.length) {
|
||||||
|
console.log(
|
||||||
|
`\n❌ MISSING keys (used in code, absent from ${config.sourceLocale}.json) — ${missing.length}:`,
|
||||||
|
);
|
||||||
|
for (const k of missing) console.log(` - ${k}`);
|
||||||
|
} else console.log("\n✅ No missing keys.");
|
||||||
|
|
||||||
|
if (UNUSED_MODE !== "off") {
|
||||||
|
if (unused.length) {
|
||||||
|
console.log(
|
||||||
|
`\n${UNUSED_MODE === "error" ? "❌" : "⚠️ "} UNUSED keys (in ${config.sourceLocale}.json, referenced nowhere) — ${unused.length}:`,
|
||||||
|
);
|
||||||
|
for (const k of unused) console.log(` - ${k}`);
|
||||||
|
console.log(
|
||||||
|
`\n → remove with: bun scripts/check-i18n-keys.mjs --fix-unused`,
|
||||||
|
);
|
||||||
|
console.log(
|
||||||
|
` → or allow-list a dynamic key in scripts/i18n-keys.config.json ("ignoreUnused").`,
|
||||||
|
);
|
||||||
|
} else console.log("\n✅ No unused keys.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const fail =
|
||||||
|
missing.length > 0 || (UNUSED_MODE === "error" && unused.length > 0);
|
||||||
|
process.exit(fail ? 1 : 0);
|
||||||
43
scripts/i18n-keys.config.json
Normal file
43
scripts/i18n-keys.config.json
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
{
|
||||||
|
"localesDir": "translations",
|
||||||
|
"sourceLocale": "en",
|
||||||
|
"srcDirs": [
|
||||||
|
"app",
|
||||||
|
"components",
|
||||||
|
"hooks",
|
||||||
|
"providers",
|
||||||
|
"utils",
|
||||||
|
"modules",
|
||||||
|
"packages",
|
||||||
|
"constants"
|
||||||
|
],
|
||||||
|
"srcExtensions": [".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs"],
|
||||||
|
"excludeDirs": [
|
||||||
|
"node_modules",
|
||||||
|
"ios",
|
||||||
|
"android",
|
||||||
|
".expo",
|
||||||
|
".git",
|
||||||
|
"dist",
|
||||||
|
"build",
|
||||||
|
"translations"
|
||||||
|
],
|
||||||
|
"_ignoreUnusedNote": "Keys for planned features that are intentionally kept in en.json but not yet wired in code. They are exempt from the unused-key check until implemented. Remove an entry once its feature ships and uses the key.",
|
||||||
|
"ignoreUnused": [
|
||||||
|
"watchlists.add_to_watchlist",
|
||||||
|
"watchlists.remove_from_watchlist",
|
||||||
|
"watchlists.create_one_first",
|
||||||
|
"watchlists.no_compatible_watchlists",
|
||||||
|
"pin.confirm_pin",
|
||||||
|
"pin.pins_dont_match",
|
||||||
|
"player.search_subtitles",
|
||||||
|
"player.subtitle_search",
|
||||||
|
"player.subtitle_download_hint",
|
||||||
|
"player.subtitle_tracks",
|
||||||
|
"player.using_jellyfin_server",
|
||||||
|
"player.swipe_down_settings",
|
||||||
|
"player.stopPlayback",
|
||||||
|
"player.stopPlayingTitle",
|
||||||
|
"player.stopPlayingConfirm"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -100,7 +100,6 @@
|
|||||||
"continue_and_next_up": "تابع و التالي",
|
"continue_and_next_up": "تابع و التالي",
|
||||||
"recently_added_in": "أضيف مؤخراً في {{libraryName}}",
|
"recently_added_in": "أضيف مؤخراً في {{libraryName}}",
|
||||||
"suggested_movies": "أفلام مقترحة",
|
"suggested_movies": "أفلام مقترحة",
|
||||||
"suggested_episodes": "حلقات مقترحة",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "مرحبًا بك في Streamyfin",
|
"welcome_to_streamyfin": "مرحبًا بك في Streamyfin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "عميل مجاني ومفتوح المصدر لـJellyfin.",
|
"a_free_and_open_source_client_for_jellyfin": "عميل مجاني ومفتوح المصدر لـJellyfin.",
|
||||||
@@ -261,43 +260,6 @@
|
|||||||
"None": "لا شيء",
|
"None": "لا شيء",
|
||||||
"OnlyForced": "فقط الإجبارية"
|
"OnlyForced": "فقط الإجبارية"
|
||||||
},
|
},
|
||||||
"text_color": "لون النص",
|
|
||||||
"background_color": "لون الخلفية",
|
|
||||||
"outline_color": "لون إطار الخط",
|
|
||||||
"outline_thickness": "سمك إطار الخط",
|
|
||||||
"background_opacity": "شفافية الخلفية",
|
|
||||||
"outline_opacity": "شفافية إطار الخط",
|
|
||||||
"bold_text": "خط عريض",
|
|
||||||
"colors": {
|
|
||||||
"Black": "أسود",
|
|
||||||
"Gray": "رمادي",
|
|
||||||
"Silver": "فضي",
|
|
||||||
"White": "أبيض",
|
|
||||||
"Maroon": "أحمر داكن",
|
|
||||||
"Red": "أحمر",
|
|
||||||
"Fuchsia": "وردي",
|
|
||||||
"Yellow": "أصفر",
|
|
||||||
"Olive": "أخضر زيتوني",
|
|
||||||
"Green": "أخضر",
|
|
||||||
"Teal": "أزرق مخضر",
|
|
||||||
"Lime": "ليموني",
|
|
||||||
"Purple": "بنفسجي",
|
|
||||||
"Navy": "كحلي",
|
|
||||||
"Blue": "أزرق",
|
|
||||||
"Aqua": "أزرق بحري"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "لا شيء",
|
|
||||||
"Thin": "نحيف",
|
|
||||||
"Normal": "عادي",
|
|
||||||
"Thick": "سميك"
|
|
||||||
},
|
|
||||||
"subtitle_color": "لون الترجمة",
|
|
||||||
"subtitle_background_color": "لون الخلفية",
|
|
||||||
"subtitle_font": "خط الترجمة",
|
|
||||||
"ksplayer_title": "إعدادات KSPlayer",
|
|
||||||
"hardware_decode": "فك الترميز بواسطة الجهاز",
|
|
||||||
"hardware_decode_description": "استخدم تسريع العتاد لفك ترميز الفيديو. قم بتعطيله إذا واجهت مشكلات في التشغيل.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +277,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "إعدادات ترجمة VLC",
|
|
||||||
"hint": "تخصيص مظهر الترجمة لمشغل VLC. تصبح التغييرات سارية المفعول عند التشغيل التالي.",
|
|
||||||
"text_color": "لون النص",
|
|
||||||
"background_color": "لون الخلفية",
|
|
||||||
"background_opacity": "شفافية الخلفية",
|
|
||||||
"outline_color": "لون إطار الخط",
|
|
||||||
"outline_opacity": "شفافية إطار الخط",
|
|
||||||
"outline_thickness": "سمك إطار الخط",
|
|
||||||
"bold": "خط عريض",
|
|
||||||
"margin": "الهامش السفلي"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "مشغل الفيديو",
|
|
||||||
"video_player": "مشغل الفيديو",
|
|
||||||
"video_player_description": "اختر مشغل الفيديو الذي سيتم استخدامه على نظام iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "أخرى",
|
"other_title": "أخرى",
|
||||||
"video_orientation": "اتجاه الفيديو",
|
"video_orientation": "اتجاه الفيديو",
|
||||||
@@ -351,13 +294,7 @@
|
|||||||
"UNKNOWN": "غير معروف"
|
"UNKNOWN": "غير معروف"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "المنطقة الآمنة لعناصر التحكم",
|
"safe_area_in_controls": "المنطقة الآمنة لعناصر التحكم",
|
||||||
"video_player": "مشغل الفيديو",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (تجريبي + صورة داخل صورة)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "إظهار روابط القائمة المخصصة",
|
"show_custom_menu_links": "إظهار روابط القائمة المخصصة",
|
||||||
"show_large_home_carousel": "إظهار شريط العرض الكبير (تجريبي)",
|
|
||||||
"hide_libraries": "إخفاء المكتبات",
|
"hide_libraries": "إخفاء المكتبات",
|
||||||
"select_liraries_you_want_to_hide": "اختر المكتبات التي تريد إخفاءها من تبويب المكتبة وأقسام الصفحة الرئيسية.",
|
"select_liraries_you_want_to_hide": "اختر المكتبات التي تريد إخفاءها من تبويب المكتبة وأقسام الصفحة الرئيسية.",
|
||||||
"disable_haptic_feedback": "تعطيل ردود الفعل اللمسية",
|
"disable_haptic_feedback": "تعطيل ردود الفعل اللمسية",
|
||||||
@@ -367,9 +304,6 @@
|
|||||||
"max_auto_play_episode_count": "الحد الأقصى لعدد الحلقات التي يتم تشغيلها تلقائيًا",
|
"max_auto_play_episode_count": "الحد الأقصى لعدد الحلقات التي يتم تشغيلها تلقائيًا",
|
||||||
"disabled": "معطل"
|
"disabled": "معطل"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "التنزيلات"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "الموسيقى",
|
"title": "الموسيقى",
|
||||||
"playback_title": "التشغيل",
|
"playback_title": "التشغيل",
|
||||||
@@ -413,23 +347,18 @@
|
|||||||
"read_more_about_marlin": "اقرأ المزيد عن مارلن.",
|
"read_more_about_marlin": "اقرأ المزيد عن مارلن.",
|
||||||
"save_button": "حفظ",
|
"save_button": "حفظ",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "تم الحفظ",
|
"saved": "تم الحفظ"
|
||||||
"refreshed": "تم تحديث الإعدادات من الخادم"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "تحديث الإعدادات من الخادم"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "تفعيل Streamystats",
|
|
||||||
"disable_streamystats": "تعطيل Streamystats",
|
"disable_streamystats": "تعطيل Streamystats",
|
||||||
"enable_search": "استخدم للبحث",
|
"enable_search": "استخدم للبحث",
|
||||||
"url": "الرابط",
|
"url": "الرابط",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "أدخل رابط خادم Streamystats الخاص بك. يجب أن يتضمن الرابط البروتوكول http أو https مع رقم المنفذ اختيارياً.",
|
"streamystats_search_hint": "أدخل رابط خادم Streamystats الخاص بك. يجب أن يتضمن الرابط البروتوكول http أو https مع رقم المنفذ اختيارياً.",
|
||||||
"read_more_about_streamystats": "اقرأ المزيد عن Streamystats.",
|
"read_more_about_streamystats": "اقرأ المزيد عن Streamystats.",
|
||||||
"save_button": "حفظ",
|
|
||||||
"save": "حفظ",
|
"save": "حفظ",
|
||||||
"features_title": "المميزات",
|
"features_title": "المميزات",
|
||||||
"home_sections_title": "أقسام الرئيسية",
|
|
||||||
"enable_movie_recommendations": "توصيات الأفلام",
|
"enable_movie_recommendations": "توصيات الأفلام",
|
||||||
"enable_series_recommendations": "توصيات المسلسلات",
|
"enable_series_recommendations": "توصيات المسلسلات",
|
||||||
"enable_promoted_watchlists": "قوائم مشاهدة مختارة",
|
"enable_promoted_watchlists": "قوائم مشاهدة مختارة",
|
||||||
@@ -445,8 +374,7 @@
|
|||||||
"refresh_from_server": "تحديث الإعدادات من الخادم"
|
"refresh_from_server": "تحديث الإعدادات من الخادم"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "تفعيل الربط مع قائمة المشاهدة الخاصة بنا",
|
"watchlist_enabler": "تفعيل الربط مع قائمة المشاهدة الخاصة بنا"
|
||||||
"watchlist_button": "تبديل حالة ربط قائمة المشاهدة"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +385,6 @@
|
|||||||
"delete_all_downloaded_files": "حذف جميع الملفات التي تم تنزيلها",
|
"delete_all_downloaded_files": "حذف جميع الملفات التي تم تنزيلها",
|
||||||
"music_cache_title": "التخزين المؤقت للموسيقى",
|
"music_cache_title": "التخزين المؤقت للموسيقى",
|
||||||
"music_cache_description": "تخزين الأغاني تلقائياً أثناء الاستماع لضمان تشغيل أكثر سلاسة ودعم الاستماع بدون اتصال",
|
"music_cache_description": "تخزين الأغاني تلقائياً أثناء الاستماع لضمان تشغيل أكثر سلاسة ودعم الاستماع بدون اتصال",
|
||||||
"enable_music_cache": "تمكين التخزين المؤقت للموسيقى",
|
|
||||||
"clear_music_cache": "مسح التخزين المؤقت للموسيقى",
|
"clear_music_cache": "مسح التخزين المؤقت للموسيقى",
|
||||||
"music_cache_size": "تم تخزين {{size}} مؤقتاً",
|
"music_cache_size": "تم تخزين {{size}} مؤقتاً",
|
||||||
"music_cache_cleared": "تم مسح التخزين المؤقت للموسيقى",
|
"music_cache_cleared": "تم مسح التخزين المؤقت للموسيقى",
|
||||||
@@ -467,8 +394,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -481,8 +406,7 @@
|
|||||||
"export_logs": "تصدير السجلات",
|
"export_logs": "تصدير السجلات",
|
||||||
"click_for_more_info": "اضغط للمزيد من المعلومات",
|
"click_for_more_info": "اضغط للمزيد من المعلومات",
|
||||||
"level": "المستوى",
|
"level": "المستوى",
|
||||||
"no_logs_available": "لا توجد سجلات متاحة",
|
"no_logs_available": "لا توجد سجلات متاحة"
|
||||||
"delete_all_logs": "حذف جميع السجلات"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "اللغات",
|
"title": "اللغات",
|
||||||
@@ -490,15 +414,12 @@
|
|||||||
"system": "النظام"
|
"system": "النظام"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "خطأ في حذف الملفات",
|
"error_deleting_files": "خطأ في حذف الملفات"
|
||||||
"background_downloads_enabled": "تم تفعيل التنزيلات في الخلفية",
|
|
||||||
"background_downloads_disabled": "تم تعطيل التنزيلات في الخلفية"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -518,10 +439,7 @@
|
|||||||
"downloads_title": "التنزيلات",
|
"downloads_title": "التنزيلات",
|
||||||
"tvseries": "مسلسلات",
|
"tvseries": "مسلسلات",
|
||||||
"movies": "أفلام",
|
"movies": "أفلام",
|
||||||
"queue": "قائمة الانتظار",
|
|
||||||
"other_media": "وسائط أخرى",
|
"other_media": "وسائط أخرى",
|
||||||
"queue_hint": "ستفقد قائمة الانتظار والتنزيلات عند إعادة تشغيل التطبيق",
|
|
||||||
"no_items_in_queue": "لا توجد عناصر في قائمة الانتظار",
|
|
||||||
"no_downloaded_items": "لا توجد عناصر تم تنزيلها",
|
"no_downloaded_items": "لا توجد عناصر تم تنزيلها",
|
||||||
"delete_all_movies_button": "حذف جميع الأفلام",
|
"delete_all_movies_button": "حذف جميع الأفلام",
|
||||||
"delete_all_tvseries_button": "حذف جميع المسلسلات",
|
"delete_all_tvseries_button": "حذف جميع المسلسلات",
|
||||||
@@ -546,13 +464,8 @@
|
|||||||
"failed_to_delete_all_tvseries": "فشل حذف جميع المسلسلات",
|
"failed_to_delete_all_tvseries": "فشل حذف جميع المسلسلات",
|
||||||
"deleted_media_successfully": "تم حذف الوسائط الأخرى بنجاح!",
|
"deleted_media_successfully": "تم حذف الوسائط الأخرى بنجاح!",
|
||||||
"failed_to_delete_media": "فشل حذف الوسائط الأخرى",
|
"failed_to_delete_media": "فشل حذف الوسائط الأخرى",
|
||||||
"download_deleted": "تم حذف التنزيل",
|
|
||||||
"download_cancelled": "تم إلغاء التنزيل",
|
"download_cancelled": "تم إلغاء التنزيل",
|
||||||
"could_not_delete_download": "تعذر حذف التنزيل",
|
"could_not_delete_download": "تعذر حذف التنزيل",
|
||||||
"download_paused": "تم إيقاف التنزيل مؤقتًا",
|
|
||||||
"could_not_pause_download": "تعذر إيقاف التنزيل مؤقتًا",
|
|
||||||
"download_resumed": "تم استئناف التنزيل",
|
|
||||||
"could_not_resume_download": "تعذر استئناف التنزيل",
|
|
||||||
"download_completed": "اكتمل التنزيل",
|
"download_completed": "اكتمل التنزيل",
|
||||||
"download_failed": "فشل التنزيل",
|
"download_failed": "فشل التنزيل",
|
||||||
"download_failed_for_item": "فشل تنزيل {{item}} - {{error}}",
|
"download_failed_for_item": "فشل تنزيل {{item}} - {{error}}",
|
||||||
@@ -562,10 +475,7 @@
|
|||||||
"item_already_downloading": "{{item}} قيد التنزيل بالفعل",
|
"item_already_downloading": "{{item}} قيد التنزيل بالفعل",
|
||||||
"all_files_deleted": "تم حذف جميع التنزيلات بنجاح",
|
"all_files_deleted": "تم حذف جميع التنزيلات بنجاح",
|
||||||
"files_deleted_by_type": "تم حذف {{count}} {{type}}",
|
"files_deleted_by_type": "تم حذف {{count}} {{type}}",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "تم حذف جميع الملفات والمجلدات والمهام بنجاح",
|
|
||||||
"failed_to_clean_cache_directory": "فشل تنظيف مجلد ذاكرة التخزين المؤقت",
|
|
||||||
"could_not_get_download_url_for_item": "تعذر الحصول على عنوان URL للتنزيل لـ{{itemName}}",
|
"could_not_get_download_url_for_item": "تعذر الحصول على عنوان URL للتنزيل لـ{{itemName}}",
|
||||||
"go_to_downloads": "الذهاب إلى التنزيلات",
|
|
||||||
"file_deleted": "تم حذف {{item}}"
|
"file_deleted": "تم حذف {{item}}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +493,13 @@
|
|||||||
"none": "لا شيء",
|
"none": "لا شيء",
|
||||||
"track": "أغنية",
|
"track": "أغنية",
|
||||||
"cancel": "إلغاء",
|
"cancel": "إلغاء",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "حذف",
|
"delete": "حذف",
|
||||||
"ok": "حسناً",
|
"ok": "حسناً",
|
||||||
"remove": "إزالة",
|
"remove": "إزالة",
|
||||||
"next": "التالي",
|
|
||||||
"back": "رجوع",
|
"back": "رجوع",
|
||||||
"continue": "متابعة",
|
"continue": "متابعة",
|
||||||
"verifying": "جارٍ التحقق...",
|
"verifying": "جارٍ التحقق...",
|
||||||
"login": "Login",
|
"login": "Login"
|
||||||
"refresh": "Refresh"
|
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "بحث...",
|
"search": "بحث...",
|
||||||
@@ -691,10 +598,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "تعذر إنشاء بث لـChromecast",
|
"could_not_create_stream_for_chromecast": "تعذر إنشاء بث لـChromecast",
|
||||||
"message_from_server": "رسالة من الخادم: {{message}}",
|
"message_from_server": "رسالة من الخادم: {{message}}",
|
||||||
"next_episode": "الحلقة التالية",
|
"next_episode": "الحلقة التالية",
|
||||||
"refresh_tracks": "تحديث المسارات",
|
|
||||||
"audio_tracks": "مسارات الصوت:",
|
|
||||||
"playback_state": "حالة التشغيل:",
|
|
||||||
"index": "الفِهْرِس:",
|
|
||||||
"continue_watching": "متابعة المشاهدة",
|
"continue_watching": "متابعة المشاهدة",
|
||||||
"go_back": "رجوع",
|
"go_back": "رجوع",
|
||||||
"downloaded_file_title": "تم تنزيل هذا الملف",
|
"downloaded_file_title": "تم تنزيل هذا الملف",
|
||||||
@@ -761,7 +664,6 @@
|
|||||||
"show_more": "عرض المزيد",
|
"show_more": "عرض المزيد",
|
||||||
"show_less": "عرض أقل",
|
"show_less": "عرض أقل",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -888,13 +790,9 @@
|
|||||||
"playlists": "قوائم التشغيل",
|
"playlists": "قوائم التشغيل",
|
||||||
"tracks": "الأغاني"
|
"tracks": "الأغاني"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "الكل"
|
|
||||||
},
|
|
||||||
"recently_added": "أضيف مؤخرًا",
|
"recently_added": "أضيف مؤخرًا",
|
||||||
"recently_played": "تم تشغيله مؤخرًا",
|
"recently_played": "تم تشغيله مؤخرًا",
|
||||||
"frequently_played": "الأكثر تشغيلاً",
|
"frequently_played": "الأكثر تشغيلاً",
|
||||||
"explore": "اكتشف",
|
|
||||||
"top_tracks": "أفضل الأغاني",
|
"top_tracks": "أفضل الأغاني",
|
||||||
"play": "تشغيل",
|
"play": "تشغيل",
|
||||||
"shuffle": "ترتيب عشوائي",
|
"shuffle": "ترتيب عشوائي",
|
||||||
@@ -1028,7 +926,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -100,7 +100,6 @@
|
|||||||
"continue_and_next_up": "Continue & Next Up",
|
"continue_and_next_up": "Continue & Next Up",
|
||||||
"recently_added_in": "Afegit recentment a {{libraryName}}",
|
"recently_added_in": "Afegit recentment a {{libraryName}}",
|
||||||
"suggested_movies": "Pel·lícules suggerides",
|
"suggested_movies": "Pel·lícules suggerides",
|
||||||
"suggested_episodes": "Episodis suggerits",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Benvingut a Streamyfin",
|
"welcome_to_streamyfin": "Benvingut a Streamyfin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "Un client gratuït i de codi obert per a Jellyfin.",
|
"a_free_and_open_source_client_for_jellyfin": "Un client gratuït i de codi obert per a Jellyfin.",
|
||||||
@@ -261,43 +260,6 @@
|
|||||||
"None": "Cap",
|
"None": "Cap",
|
||||||
"OnlyForced": "Només els forçats"
|
"OnlyForced": "Només els forçats"
|
||||||
},
|
},
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"bold_text": "Bold Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Black",
|
|
||||||
"Gray": "Gray",
|
|
||||||
"Silver": "Silver",
|
|
||||||
"White": "White",
|
|
||||||
"Maroon": "Maroon",
|
|
||||||
"Red": "Red",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Yellow",
|
|
||||||
"Olive": "Olive",
|
|
||||||
"Green": "Green",
|
|
||||||
"Teal": "Teal",
|
|
||||||
"Lime": "Lime",
|
|
||||||
"Purple": "Purple",
|
|
||||||
"Navy": "Navy",
|
|
||||||
"Blue": "Blue",
|
|
||||||
"Aqua": "Aqua"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Cap",
|
|
||||||
"Thin": "Thin",
|
|
||||||
"Normal": "Normal",
|
|
||||||
"Thick": "Thick"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +277,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video Player",
|
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Altres",
|
"other_title": "Altres",
|
||||||
"video_orientation": "Orientació del vídeo",
|
"video_orientation": "Orientació del vídeo",
|
||||||
@@ -351,13 +294,7 @@
|
|||||||
"UNKNOWN": "Desconeguda"
|
"UNKNOWN": "Desconeguda"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Àrea segura als controls",
|
"safe_area_in_controls": "Àrea segura als controls",
|
||||||
"video_player": "Reproductor de vídeo",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Experimental + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Mostrar enllaços del menú personalitzats",
|
"show_custom_menu_links": "Mostrar enllaços del menú personalitzats",
|
||||||
"show_large_home_carousel": "Show Large Home Carousel (beta)",
|
|
||||||
"hide_libraries": "Oculta biblioteques",
|
"hide_libraries": "Oculta biblioteques",
|
||||||
"select_liraries_you_want_to_hide": "Seleccioneu les biblioteques que voleu ocultar de la pestanya Biblioteca i de les seccions de la pàgina d'inici.",
|
"select_liraries_you_want_to_hide": "Seleccioneu les biblioteques que voleu ocultar de la pestanya Biblioteca i de les seccions de la pàgina d'inici.",
|
||||||
"disable_haptic_feedback": "Desactiva la resposta hàptica",
|
"disable_haptic_feedback": "Desactiva la resposta hàptica",
|
||||||
@@ -367,9 +304,6 @@
|
|||||||
"max_auto_play_episode_count": "Nombre màxim d'episodis de reproducció automàtica",
|
"max_auto_play_episode_count": "Nombre màxim d'episodis de reproducció automàtica",
|
||||||
"disabled": "Desactivat"
|
"disabled": "Desactivat"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Descàrregues"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +347,18 @@
|
|||||||
"read_more_about_marlin": "Mostra més sobre Marlin.",
|
"read_more_about_marlin": "Mostra més sobre Marlin.",
|
||||||
"save_button": "Desa",
|
"save_button": "Desa",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Desat",
|
"saved": "Desat"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +374,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +385,6 @@
|
|||||||
"delete_all_downloaded_files": "Suprimeix tots els fitxers descarregats",
|
"delete_all_downloaded_files": "Suprimeix tots els fitxers descarregats",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +394,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -481,8 +406,7 @@
|
|||||||
"export_logs": "Exporta registres",
|
"export_logs": "Exporta registres",
|
||||||
"click_for_more_info": "Feu clic per obtenir més informació",
|
"click_for_more_info": "Feu clic per obtenir més informació",
|
||||||
"level": "Nivell",
|
"level": "Nivell",
|
||||||
"no_logs_available": "No hi ha registres disponibles",
|
"no_logs_available": "No hi ha registres disponibles"
|
||||||
"delete_all_logs": "Suprimeix tots els registres"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Idiomes",
|
"title": "Idiomes",
|
||||||
@@ -490,15 +414,12 @@
|
|||||||
"system": "Sistema"
|
"system": "Sistema"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Error en suprimir fitxers",
|
"error_deleting_files": "Error en suprimir fitxers"
|
||||||
"background_downloads_enabled": "Descàrregues en segon pla activades",
|
|
||||||
"background_downloads_disabled": "Descàrregues en segon pla desactivades"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -518,10 +439,7 @@
|
|||||||
"downloads_title": "Descàrregues",
|
"downloads_title": "Descàrregues",
|
||||||
"tvseries": "Sèries",
|
"tvseries": "Sèries",
|
||||||
"movies": "Pel·lícules",
|
"movies": "Pel·lícules",
|
||||||
"queue": "Cua",
|
|
||||||
"other_media": "Other media",
|
"other_media": "Other media",
|
||||||
"queue_hint": "La cua i les descàrregues es perdran en reiniciar l'aplicació",
|
|
||||||
"no_items_in_queue": "No hi ha elements a la cua",
|
|
||||||
"no_downloaded_items": "No hi ha elements descarregats",
|
"no_downloaded_items": "No hi ha elements descarregats",
|
||||||
"delete_all_movies_button": "Suprimeix totes les pel·lícules",
|
"delete_all_movies_button": "Suprimeix totes les pel·lícules",
|
||||||
"delete_all_tvseries_button": "Suprimeix totes les sèries",
|
"delete_all_tvseries_button": "Suprimeix totes les sèries",
|
||||||
@@ -546,13 +464,8 @@
|
|||||||
"failed_to_delete_all_tvseries": "No s'han pogut suprimir totes les sèries",
|
"failed_to_delete_all_tvseries": "No s'han pogut suprimir totes les sèries",
|
||||||
"deleted_media_successfully": "Deleted other media Successfully!",
|
"deleted_media_successfully": "Deleted other media Successfully!",
|
||||||
"failed_to_delete_media": "Failed to Delete other media",
|
"failed_to_delete_media": "Failed to Delete other media",
|
||||||
"download_deleted": "Download Deleted",
|
|
||||||
"download_cancelled": "Descàrrega cancel·lada",
|
"download_cancelled": "Descàrrega cancel·lada",
|
||||||
"could_not_delete_download": "Could Not Delete Download",
|
"could_not_delete_download": "Could Not Delete Download",
|
||||||
"download_paused": "Download Paused",
|
|
||||||
"could_not_pause_download": "Could Not Pause Download",
|
|
||||||
"download_resumed": "Download Resumed",
|
|
||||||
"could_not_resume_download": "Could Not Resume Download",
|
|
||||||
"download_completed": "Descàrrega completada",
|
"download_completed": "Descàrrega completada",
|
||||||
"download_failed": "Download Failed",
|
"download_failed": "Download Failed",
|
||||||
"download_failed_for_item": "Ha fallat la descàrrega per a {{item}} - {{error}}",
|
"download_failed_for_item": "Ha fallat la descàrrega per a {{item}} - {{error}}",
|
||||||
@@ -562,10 +475,7 @@
|
|||||||
"item_already_downloading": "{{item}} is already downloading",
|
"item_already_downloading": "{{item}} is already downloading",
|
||||||
"all_files_deleted": "All Downloads Deleted Successfully",
|
"all_files_deleted": "All Downloads Deleted Successfully",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Tots els fitxers, carpetes i treballs s'han suprimit correctament",
|
|
||||||
"failed_to_clean_cache_directory": "Failed to clean cache directory",
|
|
||||||
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
|
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
|
||||||
"go_to_downloads": "Ves a les descàrregues",
|
|
||||||
"file_deleted": "{{item}} deleted"
|
"file_deleted": "{{item}} deleted"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +493,13 @@
|
|||||||
"none": "None",
|
"none": "None",
|
||||||
"track": "Track",
|
"track": "Track",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login"
|
||||||
"refresh": "Refresh"
|
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Cerca...",
|
"search": "Cerca...",
|
||||||
@@ -691,10 +598,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "No s'ha pogut crear un flux per a Chromecast",
|
"could_not_create_stream_for_chromecast": "No s'ha pogut crear un flux per a Chromecast",
|
||||||
"message_from_server": "Missatge del servidor: {{message}}",
|
"message_from_server": "Missatge del servidor: {{message}}",
|
||||||
"next_episode": "Episodi següent",
|
"next_episode": "Episodi següent",
|
||||||
"refresh_tracks": "Actualitzar pistes",
|
|
||||||
"audio_tracks": "Pistes d'àudio:",
|
|
||||||
"playback_state": "Estat de reproducció:",
|
|
||||||
"index": "Índex:",
|
|
||||||
"continue_watching": "Continuar veient",
|
"continue_watching": "Continuar veient",
|
||||||
"go_back": "Enrere",
|
"go_back": "Enrere",
|
||||||
"downloaded_file_title": "You have this file downloaded",
|
"downloaded_file_title": "You have this file downloaded",
|
||||||
@@ -761,7 +664,6 @@
|
|||||||
"show_more": "Mostra més",
|
"show_more": "Mostra més",
|
||||||
"show_less": "Mostra menys",
|
"show_less": "Mostra menys",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -888,13 +790,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +926,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -100,7 +100,6 @@
|
|||||||
"continue_and_next_up": "Continue & Next Up",
|
"continue_and_next_up": "Continue & Next Up",
|
||||||
"recently_added_in": "Nedávno přidané v {{libraryName}}",
|
"recently_added_in": "Nedávno přidané v {{libraryName}}",
|
||||||
"suggested_movies": "Navrhované filmy",
|
"suggested_movies": "Navrhované filmy",
|
||||||
"suggested_episodes": "Navrhované epizody",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Vítejte v Streamyfin",
|
"welcome_to_streamyfin": "Vítejte v Streamyfin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "Volný a Open-Source klient pro Jellyfin.",
|
"a_free_and_open_source_client_for_jellyfin": "Volný a Open-Source klient pro Jellyfin.",
|
||||||
@@ -261,43 +260,6 @@
|
|||||||
"None": "Nic",
|
"None": "Nic",
|
||||||
"OnlyForced": "Pouze vynucené"
|
"OnlyForced": "Pouze vynucené"
|
||||||
},
|
},
|
||||||
"text_color": "Barva textu",
|
|
||||||
"background_color": "Barva pozadí",
|
|
||||||
"outline_color": "Barva obrysu",
|
|
||||||
"outline_thickness": "Obrys tloušťky",
|
|
||||||
"background_opacity": "Průhlednost pozadí",
|
|
||||||
"outline_opacity": "Průhlednost obrysu",
|
|
||||||
"bold_text": "Bold Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Černý",
|
|
||||||
"Gray": "Šedá",
|
|
||||||
"Silver": "Stříbro",
|
|
||||||
"White": "Bílý",
|
|
||||||
"Maroon": "Maroon",
|
|
||||||
"Red": "Červená",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Žlutá",
|
|
||||||
"Olive": "Olivy",
|
|
||||||
"Green": "Zelená",
|
|
||||||
"Teal": "Modrozelený",
|
|
||||||
"Lime": "Světle zelená",
|
|
||||||
"Purple": "Fialová",
|
|
||||||
"Navy": "Námořní loď",
|
|
||||||
"Blue": "Modrá",
|
|
||||||
"Aqua": "Aqua"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Nic",
|
|
||||||
"Thin": "Tenké",
|
|
||||||
"Normal": "Normální",
|
|
||||||
"Thick": "Tlustá"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +277,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video Player",
|
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Ostatní",
|
"other_title": "Ostatní",
|
||||||
"video_orientation": "Orientace videa",
|
"video_orientation": "Orientace videa",
|
||||||
@@ -351,13 +294,7 @@
|
|||||||
"UNKNOWN": "Neznámý"
|
"UNKNOWN": "Neznámý"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Bezpečná oblast v ovládání",
|
"safe_area_in_controls": "Bezpečná oblast v ovládání",
|
||||||
"video_player": "Video přehrávač",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (experimentální + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Zobrazit vlastní Menu odkazy",
|
"show_custom_menu_links": "Zobrazit vlastní Menu odkazy",
|
||||||
"show_large_home_carousel": "Zobrazit velký přehled (beta)",
|
|
||||||
"hide_libraries": "Skrýt knihovny",
|
"hide_libraries": "Skrýt knihovny",
|
||||||
"select_liraries_you_want_to_hide": "Vyberte knihovny, které chcete skrýt v záložce Knihovna a v sekcích domovské stránky.",
|
"select_liraries_you_want_to_hide": "Vyberte knihovny, které chcete skrýt v záložce Knihovna a v sekcích domovské stránky.",
|
||||||
"disable_haptic_feedback": "Zakázat Haptickou zpětnou vazbu",
|
"disable_haptic_feedback": "Zakázat Haptickou zpětnou vazbu",
|
||||||
@@ -367,9 +304,6 @@
|
|||||||
"max_auto_play_episode_count": "Maximální počet automatických přehrávání epizod",
|
"max_auto_play_episode_count": "Maximální počet automatických přehrávání epizod",
|
||||||
"disabled": "Zakázáno"
|
"disabled": "Zakázáno"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Stahování"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +347,18 @@
|
|||||||
"read_more_about_marlin": "Přečtěte si více o Marlinu.",
|
"read_more_about_marlin": "Přečtěte si více o Marlinu.",
|
||||||
"save_button": "Uložit",
|
"save_button": "Uložit",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Uloženo",
|
"saved": "Uloženo"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +374,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +385,6 @@
|
|||||||
"delete_all_downloaded_files": "Odstranit všechny stažené soubory",
|
"delete_all_downloaded_files": "Odstranit všechny stažené soubory",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +394,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -481,8 +406,7 @@
|
|||||||
"export_logs": "Exportovat protokoly",
|
"export_logs": "Exportovat protokoly",
|
||||||
"click_for_more_info": "Klikněte pro více informací",
|
"click_for_more_info": "Klikněte pro více informací",
|
||||||
"level": "Úrovně",
|
"level": "Úrovně",
|
||||||
"no_logs_available": "Žádné protokoly nejsou k dispozici",
|
"no_logs_available": "Žádné protokoly nejsou k dispozici"
|
||||||
"delete_all_logs": "Odstranit všechny logy"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Jazyky",
|
"title": "Jazyky",
|
||||||
@@ -490,15 +414,12 @@
|
|||||||
"system": "Systém"
|
"system": "Systém"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Chyba při mazání souborů",
|
"error_deleting_files": "Chyba při mazání souborů"
|
||||||
"background_downloads_enabled": "Stahování na pozadí povoleno",
|
|
||||||
"background_downloads_disabled": "Stahování na pozadí zakázáno"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -518,10 +439,7 @@
|
|||||||
"downloads_title": "Stahování",
|
"downloads_title": "Stahování",
|
||||||
"tvseries": "Televizní série",
|
"tvseries": "Televizní série",
|
||||||
"movies": "Filmy",
|
"movies": "Filmy",
|
||||||
"queue": "Fronta",
|
|
||||||
"other_media": "Ostatní média",
|
"other_media": "Ostatní média",
|
||||||
"queue_hint": "Fronta a stahování budou ztraceny při restartu aplikace",
|
|
||||||
"no_items_in_queue": "Žádné položky ve frontě",
|
|
||||||
"no_downloaded_items": "Žádné stažené položky",
|
"no_downloaded_items": "Žádné stažené položky",
|
||||||
"delete_all_movies_button": "Odstranit všechny filmy",
|
"delete_all_movies_button": "Odstranit všechny filmy",
|
||||||
"delete_all_tvseries_button": "Odstranit všechny TV-série",
|
"delete_all_tvseries_button": "Odstranit všechny TV-série",
|
||||||
@@ -546,13 +464,8 @@
|
|||||||
"failed_to_delete_all_tvseries": "Nepodařilo se odstranit všechny TV-série",
|
"failed_to_delete_all_tvseries": "Nepodařilo se odstranit všechny TV-série",
|
||||||
"deleted_media_successfully": "Ostatní média úspěšně smazána!",
|
"deleted_media_successfully": "Ostatní média úspěšně smazána!",
|
||||||
"failed_to_delete_media": "Nepodařilo se odstranit ostatní média",
|
"failed_to_delete_media": "Nepodařilo se odstranit ostatní média",
|
||||||
"download_deleted": "Stahování smazáno",
|
|
||||||
"download_cancelled": "Download Cancelled",
|
"download_cancelled": "Download Cancelled",
|
||||||
"could_not_delete_download": "Stahování nelze odstranit",
|
"could_not_delete_download": "Stahování nelze odstranit",
|
||||||
"download_paused": "Stahování pozastaveno",
|
|
||||||
"could_not_pause_download": "Nelze pozastavit stahování",
|
|
||||||
"download_resumed": "Stahování obnoveno",
|
|
||||||
"could_not_resume_download": "Nelze pokračovat v stahování",
|
|
||||||
"download_completed": "Stahování dokončeno",
|
"download_completed": "Stahování dokončeno",
|
||||||
"download_failed": "Download Failed",
|
"download_failed": "Download Failed",
|
||||||
"download_failed_for_item": "Stahování se nezdařilo pro {{item}} - {{error}}",
|
"download_failed_for_item": "Stahování se nezdařilo pro {{item}} - {{error}}",
|
||||||
@@ -562,10 +475,7 @@
|
|||||||
"item_already_downloading": "{{item}} is already downloading",
|
"item_already_downloading": "{{item}} is already downloading",
|
||||||
"all_files_deleted": "All Downloads Deleted Successfully",
|
"all_files_deleted": "All Downloads Deleted Successfully",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Všechny soubory, složky a úlohy byly úspěšně odstraněny",
|
|
||||||
"failed_to_clean_cache_directory": "Nepodařilo se vyčistit adresář mezipaměti",
|
|
||||||
"could_not_get_download_url_for_item": "Nelze získat URL pro stažení {{itemName}}",
|
"could_not_get_download_url_for_item": "Nelze získat URL pro stažení {{itemName}}",
|
||||||
"go_to_downloads": "Přejít na stahování",
|
|
||||||
"file_deleted": "{{item}} deleted"
|
"file_deleted": "{{item}} deleted"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +493,13 @@
|
|||||||
"none": "None",
|
"none": "None",
|
||||||
"track": "Track",
|
"track": "Track",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login"
|
||||||
"refresh": "Refresh"
|
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Hledat...",
|
"search": "Hledat...",
|
||||||
@@ -691,10 +598,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Nelze vytvořit stream pro Chromecast",
|
"could_not_create_stream_for_chromecast": "Nelze vytvořit stream pro Chromecast",
|
||||||
"message_from_server": "Zpráva od serveru: {{message}}",
|
"message_from_server": "Zpráva od serveru: {{message}}",
|
||||||
"next_episode": "Další epizoda",
|
"next_episode": "Další epizoda",
|
||||||
"refresh_tracks": "Obnovit skladby",
|
|
||||||
"audio_tracks": "Zvukové stopy:",
|
|
||||||
"playback_state": "Stav přehrávání:",
|
|
||||||
"index": "Index:",
|
|
||||||
"continue_watching": "Pokračovat ve sledování",
|
"continue_watching": "Pokračovat ve sledování",
|
||||||
"go_back": "Zpět",
|
"go_back": "Zpět",
|
||||||
"downloaded_file_title": "You have this file downloaded",
|
"downloaded_file_title": "You have this file downloaded",
|
||||||
@@ -761,7 +664,6 @@
|
|||||||
"show_more": "Zobrazit více",
|
"show_more": "Zobrazit více",
|
||||||
"show_less": "Zobrazit méně",
|
"show_less": "Zobrazit méně",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -888,13 +790,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +926,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -100,7 +100,6 @@
|
|||||||
"continue_and_next_up": "Continue & Next Up",
|
"continue_and_next_up": "Continue & Next Up",
|
||||||
"recently_added_in": "Senest tilføjet i {{libraryName}}",
|
"recently_added_in": "Senest tilføjet i {{libraryName}}",
|
||||||
"suggested_movies": "Foreslåede film",
|
"suggested_movies": "Foreslåede film",
|
||||||
"suggested_episodes": "Foreslåede episoder",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Velkommen til Streamyfin",
|
"welcome_to_streamyfin": "Velkommen til Streamyfin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "En gratis og open-source klient til Jellyfin.",
|
"a_free_and_open_source_client_for_jellyfin": "En gratis og open-source klient til Jellyfin.",
|
||||||
@@ -261,43 +260,6 @@
|
|||||||
"None": "Ingen",
|
"None": "Ingen",
|
||||||
"OnlyForced": "Kun tvungne undertekster"
|
"OnlyForced": "Kun tvungne undertekster"
|
||||||
},
|
},
|
||||||
"text_color": "Tekst Farve",
|
|
||||||
"background_color": "Baggrunds Farve",
|
|
||||||
"outline_color": "Omrids Farve",
|
|
||||||
"outline_thickness": "Omrids Tykkelse",
|
|
||||||
"background_opacity": "Baggrunds Gennemsigtighed",
|
|
||||||
"outline_opacity": "Omrids Gennemsigtighed",
|
|
||||||
"bold_text": "Bold Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Sort",
|
|
||||||
"Gray": "Grå",
|
|
||||||
"Silver": "Sølv",
|
|
||||||
"White": "Hvid",
|
|
||||||
"Maroon": "Maroon",
|
|
||||||
"Red": "Rød",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Gul",
|
|
||||||
"Olive": "Oliven",
|
|
||||||
"Green": "Grøn",
|
|
||||||
"Teal": "Grønblåt",
|
|
||||||
"Lime": "Limegrøn",
|
|
||||||
"Purple": "Lilla",
|
|
||||||
"Navy": "Flåden",
|
|
||||||
"Blue": "Blå",
|
|
||||||
"Aqua": "Aqua"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Ingen",
|
|
||||||
"Thin": "Tynd",
|
|
||||||
"Normal": "Normal",
|
|
||||||
"Thick": "Tyk"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +277,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video Player",
|
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Andet",
|
"other_title": "Andet",
|
||||||
"video_orientation": "Videoorientering",
|
"video_orientation": "Videoorientering",
|
||||||
@@ -351,13 +294,7 @@
|
|||||||
"UNKNOWN": "Ukendt"
|
"UNKNOWN": "Ukendt"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Sikkert område i kontroller",
|
"safe_area_in_controls": "Sikkert område i kontroller",
|
||||||
"video_player": "Videospiller",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Eksperimentel + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Vis tilpassede menulinks",
|
"show_custom_menu_links": "Vis tilpassede menulinks",
|
||||||
"show_large_home_carousel": "Show Large Home Carousel (beta)",
|
|
||||||
"hide_libraries": "Skjul biblioteker",
|
"hide_libraries": "Skjul biblioteker",
|
||||||
"select_liraries_you_want_to_hide": "Vælg de biblioteker, du ønsker at skjule fra fanen Bibliotek og startside sektionerne.",
|
"select_liraries_you_want_to_hide": "Vælg de biblioteker, du ønsker at skjule fra fanen Bibliotek og startside sektionerne.",
|
||||||
"disable_haptic_feedback": "Deaktiver haptisk feedback",
|
"disable_haptic_feedback": "Deaktiver haptisk feedback",
|
||||||
@@ -367,9 +304,6 @@
|
|||||||
"max_auto_play_episode_count": "Maks. Auto Afspil Episode Antal",
|
"max_auto_play_episode_count": "Maks. Auto Afspil Episode Antal",
|
||||||
"disabled": "Deaktiveret"
|
"disabled": "Deaktiveret"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Downloads"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +347,18 @@
|
|||||||
"read_more_about_marlin": "Læs mere om Marlin.",
|
"read_more_about_marlin": "Læs mere om Marlin.",
|
||||||
"save_button": "Gem",
|
"save_button": "Gem",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Gemt",
|
"saved": "Gemt"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +374,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +385,6 @@
|
|||||||
"delete_all_downloaded_files": "Slet alle downloadede filer",
|
"delete_all_downloaded_files": "Slet alle downloadede filer",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +394,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -481,8 +406,7 @@
|
|||||||
"export_logs": "Eksporter logfiler",
|
"export_logs": "Eksporter logfiler",
|
||||||
"click_for_more_info": "Klik for mere info",
|
"click_for_more_info": "Klik for mere info",
|
||||||
"level": "Niveau",
|
"level": "Niveau",
|
||||||
"no_logs_available": "Ingen logfiler tilgængelige",
|
"no_logs_available": "Ingen logfiler tilgængelige"
|
||||||
"delete_all_logs": "Slet alle logfiler"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Sprog",
|
"title": "Sprog",
|
||||||
@@ -490,15 +414,12 @@
|
|||||||
"system": "System"
|
"system": "System"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Fejl ved sletning af filer",
|
"error_deleting_files": "Fejl ved sletning af filer"
|
||||||
"background_downloads_enabled": "Baggrundsdownloads aktiveret",
|
|
||||||
"background_downloads_disabled": "Baggrundsdownloads deaktiveret"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -518,10 +439,7 @@
|
|||||||
"downloads_title": "Downloads",
|
"downloads_title": "Downloads",
|
||||||
"tvseries": "TV-serier",
|
"tvseries": "TV-serier",
|
||||||
"movies": "Film",
|
"movies": "Film",
|
||||||
"queue": "Kø",
|
|
||||||
"other_media": "Andre medier",
|
"other_media": "Andre medier",
|
||||||
"queue_hint": "Kø og downloads vil gå tabt ved genstart af appen",
|
|
||||||
"no_items_in_queue": "Ingen elementer i køen",
|
|
||||||
"no_downloaded_items": "Ingen downloadede elementer",
|
"no_downloaded_items": "Ingen downloadede elementer",
|
||||||
"delete_all_movies_button": "Slet alle film",
|
"delete_all_movies_button": "Slet alle film",
|
||||||
"delete_all_tvseries_button": "Slet alle TV-serier",
|
"delete_all_tvseries_button": "Slet alle TV-serier",
|
||||||
@@ -546,13 +464,8 @@
|
|||||||
"failed_to_delete_all_tvseries": "Kunne ikke slette alle TV-serier",
|
"failed_to_delete_all_tvseries": "Kunne ikke slette alle TV-serier",
|
||||||
"deleted_media_successfully": "Slettede andre medier med succes!",
|
"deleted_media_successfully": "Slettede andre medier med succes!",
|
||||||
"failed_to_delete_media": "Kunne ikke slette andre medier",
|
"failed_to_delete_media": "Kunne ikke slette andre medier",
|
||||||
"download_deleted": "Download Slettet",
|
|
||||||
"download_cancelled": "Download afbrudt",
|
"download_cancelled": "Download afbrudt",
|
||||||
"could_not_delete_download": "Kunne Ikke Slette Download",
|
"could_not_delete_download": "Kunne Ikke Slette Download",
|
||||||
"download_paused": "Download Pauset",
|
|
||||||
"could_not_pause_download": "Kunne Ikke Pause Download",
|
|
||||||
"download_resumed": "Download Genoprettet",
|
|
||||||
"could_not_resume_download": "Kunne Ikke Genoptage Download",
|
|
||||||
"download_completed": "Download fuldført",
|
"download_completed": "Download fuldført",
|
||||||
"download_failed": "Download Failed",
|
"download_failed": "Download Failed",
|
||||||
"download_failed_for_item": "Download mislykkedes for {{item}} - {{error}}",
|
"download_failed_for_item": "Download mislykkedes for {{item}} - {{error}}",
|
||||||
@@ -562,10 +475,7 @@
|
|||||||
"item_already_downloading": "{{item}} is already downloading",
|
"item_already_downloading": "{{item}} is already downloading",
|
||||||
"all_files_deleted": "All Downloads Deleted Successfully",
|
"all_files_deleted": "All Downloads Deleted Successfully",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Alle filer, mapper og jobs blev slettet med succes",
|
|
||||||
"failed_to_clean_cache_directory": "Kunne ikke rense cache-mappe",
|
|
||||||
"could_not_get_download_url_for_item": "Kunne ikke hente download URL til {{itemName}}",
|
"could_not_get_download_url_for_item": "Kunne ikke hente download URL til {{itemName}}",
|
||||||
"go_to_downloads": "Gå til downloads",
|
|
||||||
"file_deleted": "{{item}} deleted"
|
"file_deleted": "{{item}} deleted"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +493,13 @@
|
|||||||
"none": "None",
|
"none": "None",
|
||||||
"track": "Track",
|
"track": "Track",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login"
|
||||||
"refresh": "Refresh"
|
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Søg...",
|
"search": "Søg...",
|
||||||
@@ -691,10 +598,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Kunne ikke oprette en stream til Chromecast",
|
"could_not_create_stream_for_chromecast": "Kunne ikke oprette en stream til Chromecast",
|
||||||
"message_from_server": "Besked fra server: {{message}}",
|
"message_from_server": "Besked fra server: {{message}}",
|
||||||
"next_episode": "Næste episode",
|
"next_episode": "Næste episode",
|
||||||
"refresh_tracks": "Opdater spor",
|
|
||||||
"audio_tracks": "Lydspor:",
|
|
||||||
"playback_state": "Afspilningstilstand:",
|
|
||||||
"index": "Indeks:",
|
|
||||||
"continue_watching": "Fortsæt med at se",
|
"continue_watching": "Fortsæt med at se",
|
||||||
"go_back": "Gå Tilbage",
|
"go_back": "Gå Tilbage",
|
||||||
"downloaded_file_title": "You have this file downloaded",
|
"downloaded_file_title": "You have this file downloaded",
|
||||||
@@ -761,7 +664,6 @@
|
|||||||
"show_more": "Vis mere",
|
"show_more": "Vis mere",
|
||||||
"show_less": "Vis mindre",
|
"show_less": "Vis mindre",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -888,13 +790,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +926,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -100,7 +100,6 @@
|
|||||||
"continue_and_next_up": "\"Weiterschauen\" und \"Als Nächstes\"",
|
"continue_and_next_up": "\"Weiterschauen\" und \"Als Nächstes\"",
|
||||||
"recently_added_in": "Kürzlich hinzugefügt in {{libraryName}}",
|
"recently_added_in": "Kürzlich hinzugefügt in {{libraryName}}",
|
||||||
"suggested_movies": "Empfohlene Filme",
|
"suggested_movies": "Empfohlene Filme",
|
||||||
"suggested_episodes": "Empfohlene Episoden",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Willkommen bei Streamyfin",
|
"welcome_to_streamyfin": "Willkommen bei Streamyfin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "Ein kostenloser und Open-Source-Client für Jellyfin.",
|
"a_free_and_open_source_client_for_jellyfin": "Ein kostenloser und Open-Source-Client für Jellyfin.",
|
||||||
@@ -261,43 +260,6 @@
|
|||||||
"None": "Keine",
|
"None": "Keine",
|
||||||
"OnlyForced": "Nur erzwungene"
|
"OnlyForced": "Nur erzwungene"
|
||||||
},
|
},
|
||||||
"text_color": "Textfarbe",
|
|
||||||
"background_color": "Hintergrundfarbe",
|
|
||||||
"outline_color": "Konturfarbe",
|
|
||||||
"outline_thickness": "Konturdicke",
|
|
||||||
"background_opacity": "Hintergrundtransparenz",
|
|
||||||
"outline_opacity": "Konturtransparenz",
|
|
||||||
"bold_text": "Fettgedruckter Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Schwarz",
|
|
||||||
"Gray": "Grau",
|
|
||||||
"Silver": "Silber",
|
|
||||||
"White": "Weiß",
|
|
||||||
"Maroon": "Rotbraun",
|
|
||||||
"Red": "Rot",
|
|
||||||
"Fuchsia": "Magenta",
|
|
||||||
"Yellow": "Gelb",
|
|
||||||
"Olive": "Olivgrün",
|
|
||||||
"Green": "Grün",
|
|
||||||
"Teal": "Türkis",
|
|
||||||
"Lime": "Hellgrün",
|
|
||||||
"Purple": "Lila",
|
|
||||||
"Navy": "Marineblau",
|
|
||||||
"Blue": "Blau",
|
|
||||||
"Aqua": "Himmelblau"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Keine",
|
|
||||||
"Thin": "Dünn",
|
|
||||||
"Normal": "Normal",
|
|
||||||
"Thick": "Dick"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Untertitelfarbe",
|
|
||||||
"subtitle_background_color": "Hintergrundfarbe",
|
|
||||||
"subtitle_font": "Untertitel-Schriftart",
|
|
||||||
"ksplayer_title": "KSPlayer Einstellungen",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Hardwarebeschleunigung für Video Decoding verwenden. Deaktivieren wenn Wiedergabeprobleme auftreten.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +277,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Untertitel-Einstellungen",
|
|
||||||
"hint": "Anpassen des Untertitel-Erscheinungsbildes für VLC. Änderungen werden bei der nächsten Wiedergabe übernommen.",
|
|
||||||
"text_color": "Schriftfarbe",
|
|
||||||
"background_color": "Hintergrundfarbe",
|
|
||||||
"background_opacity": "Hintergrundtransparenz",
|
|
||||||
"outline_color": "Konturfarbe",
|
|
||||||
"outline_opacity": "Konturtransparenz",
|
|
||||||
"outline_thickness": "Konturdicke",
|
|
||||||
"bold": "Fettgedruckter Text",
|
|
||||||
"margin": "Unterer Abstand"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Videoplayer",
|
|
||||||
"video_player": "Videoplayer",
|
|
||||||
"video_player_description": "Videoplayer auf iOS auswählen.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Sonstiges",
|
"other_title": "Sonstiges",
|
||||||
"video_orientation": "Videoausrichtung",
|
"video_orientation": "Videoausrichtung",
|
||||||
@@ -351,13 +294,7 @@
|
|||||||
"UNKNOWN": "Unbekannt"
|
"UNKNOWN": "Unbekannt"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Sicherer Bereich in den Steuerungen",
|
"safe_area_in_controls": "Sicherer Bereich in den Steuerungen",
|
||||||
"video_player": "Videoplayer",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Experimentell + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Benutzerdefinierte Menülinks anzeigen",
|
"show_custom_menu_links": "Benutzerdefinierte Menülinks anzeigen",
|
||||||
"show_large_home_carousel": "Zeige große Startseiten-Übersicht (Beta)",
|
|
||||||
"hide_libraries": "Bibliotheken ausblenden",
|
"hide_libraries": "Bibliotheken ausblenden",
|
||||||
"select_liraries_you_want_to_hide": "Bibliotheken auswählen die aus dem Bibliothekstab und der Startseite ausgeblendet werden sollen.",
|
"select_liraries_you_want_to_hide": "Bibliotheken auswählen die aus dem Bibliothekstab und der Startseite ausgeblendet werden sollen.",
|
||||||
"disable_haptic_feedback": "Haptisches Feedback deaktivieren",
|
"disable_haptic_feedback": "Haptisches Feedback deaktivieren",
|
||||||
@@ -367,9 +304,6 @@
|
|||||||
"max_auto_play_episode_count": "Maximale automatisch abzuspielende Episodenanzahl",
|
"max_auto_play_episode_count": "Maximale automatisch abzuspielende Episodenanzahl",
|
||||||
"disabled": "Deaktiviert"
|
"disabled": "Deaktiviert"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Downloads"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Musik",
|
"title": "Musik",
|
||||||
"playback_title": "Wiedergabe",
|
"playback_title": "Wiedergabe",
|
||||||
@@ -413,23 +347,18 @@
|
|||||||
"read_more_about_marlin": "Erfahre mehr über Marlin.",
|
"read_more_about_marlin": "Erfahre mehr über Marlin.",
|
||||||
"save_button": "Speichern",
|
"save_button": "Speichern",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Gespeichert",
|
"saved": "Gespeichert"
|
||||||
"refreshed": "Einstellungen vom Server aktualisiert"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Einstellungen vom Server aktualisieren"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Streamystats aktivieren",
|
|
||||||
"disable_streamystats": "Streamystats deaktivieren",
|
"disable_streamystats": "Streamystats deaktivieren",
|
||||||
"enable_search": "Zum Suchen verwenden",
|
"enable_search": "Zum Suchen verwenden",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "URL für den Streamystats-Server eingeben.",
|
"streamystats_search_hint": "URL für den Streamystats-Server eingeben.",
|
||||||
"read_more_about_streamystats": "Mehr über Streamystats erfahren.",
|
"read_more_about_streamystats": "Mehr über Streamystats erfahren.",
|
||||||
"save_button": "Speichern",
|
|
||||||
"save": "Gespeichert",
|
"save": "Gespeichert",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Startseitenbereiche",
|
|
||||||
"enable_movie_recommendations": "Filmempfehlungen",
|
"enable_movie_recommendations": "Filmempfehlungen",
|
||||||
"enable_series_recommendations": "Serienempfehlungen",
|
"enable_series_recommendations": "Serienempfehlungen",
|
||||||
"enable_promoted_watchlists": "Empfohlene Merklisten",
|
"enable_promoted_watchlists": "Empfohlene Merklisten",
|
||||||
@@ -445,8 +374,7 @@
|
|||||||
"refresh_from_server": "Einstellungen vom Server aktualisieren"
|
"refresh_from_server": "Einstellungen vom Server aktualisieren"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Merklisten-Integration aktivieren",
|
"watchlist_enabler": "Merklisten-Integration aktivieren"
|
||||||
"watchlist_button": "Merklisten-Integration umschalten"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +385,6 @@
|
|||||||
"delete_all_downloaded_files": "Alle heruntergeladenen Dateien löschen",
|
"delete_all_downloaded_files": "Alle heruntergeladenen Dateien löschen",
|
||||||
"music_cache_title": "Musik-Cache",
|
"music_cache_title": "Musik-Cache",
|
||||||
"music_cache_description": "Beim Anhören Titel automatisch in den Cache laden um bessere Wiedergabe und Offline-Wiedergabe zu ermöglichen",
|
"music_cache_description": "Beim Anhören Titel automatisch in den Cache laden um bessere Wiedergabe und Offline-Wiedergabe zu ermöglichen",
|
||||||
"enable_music_cache": "Musik-Cache aktivieren",
|
|
||||||
"clear_music_cache": "Musik-Cache leeren",
|
"clear_music_cache": "Musik-Cache leeren",
|
||||||
"music_cache_size": "{{size}} gechached",
|
"music_cache_size": "{{size}} gechached",
|
||||||
"music_cache_cleared": "Musik-Cache geleert",
|
"music_cache_cleared": "Musik-Cache geleert",
|
||||||
@@ -467,8 +394,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -481,8 +406,7 @@
|
|||||||
"export_logs": "Logs exportieren",
|
"export_logs": "Logs exportieren",
|
||||||
"click_for_more_info": "Für mehr Informationen klicken",
|
"click_for_more_info": "Für mehr Informationen klicken",
|
||||||
"level": "Level",
|
"level": "Level",
|
||||||
"no_logs_available": "Keine Logs verfügbar",
|
"no_logs_available": "Keine Logs verfügbar"
|
||||||
"delete_all_logs": "Alle Logs löschen"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Sprachen",
|
"title": "Sprachen",
|
||||||
@@ -490,15 +414,12 @@
|
|||||||
"system": "System"
|
"system": "System"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Fehler beim Löschen von Dateien",
|
"error_deleting_files": "Fehler beim Löschen von Dateien"
|
||||||
"background_downloads_enabled": "Hintergrunddownloads aktiviert",
|
|
||||||
"background_downloads_disabled": "Hintergrunddownloads deaktiviert"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -518,10 +439,7 @@
|
|||||||
"downloads_title": "Downloads",
|
"downloads_title": "Downloads",
|
||||||
"tvseries": "Serien",
|
"tvseries": "Serien",
|
||||||
"movies": "Filme",
|
"movies": "Filme",
|
||||||
"queue": "Warteschlange",
|
|
||||||
"other_media": "Andere Medien",
|
"other_media": "Andere Medien",
|
||||||
"queue_hint": "Warteschlange und aktive Downloads gehen verloren wenn die App neu gestartet wird",
|
|
||||||
"no_items_in_queue": "Keine Elemente in der Warteschlange",
|
|
||||||
"no_downloaded_items": "Keine heruntergeladenen Elemente",
|
"no_downloaded_items": "Keine heruntergeladenen Elemente",
|
||||||
"delete_all_movies_button": "Alle Filme löschen",
|
"delete_all_movies_button": "Alle Filme löschen",
|
||||||
"delete_all_tvseries_button": "Alle Serien löschen",
|
"delete_all_tvseries_button": "Alle Serien löschen",
|
||||||
@@ -546,13 +464,8 @@
|
|||||||
"failed_to_delete_all_tvseries": "Fehler beim Löschen aller Serien",
|
"failed_to_delete_all_tvseries": "Fehler beim Löschen aller Serien",
|
||||||
"deleted_media_successfully": "Andere Medien erfolgreich gelöscht!",
|
"deleted_media_successfully": "Andere Medien erfolgreich gelöscht!",
|
||||||
"failed_to_delete_media": "Fehler beim Löschen anderer Medien",
|
"failed_to_delete_media": "Fehler beim Löschen anderer Medien",
|
||||||
"download_deleted": "Download gelöscht",
|
|
||||||
"download_cancelled": "Download abgebrochen",
|
"download_cancelled": "Download abgebrochen",
|
||||||
"could_not_delete_download": "Download konnte nicht gelöscht werden",
|
"could_not_delete_download": "Download konnte nicht gelöscht werden",
|
||||||
"download_paused": "Download pausiert",
|
|
||||||
"could_not_pause_download": "Download konnte nicht angehalten werden",
|
|
||||||
"download_resumed": "Download fortgesetzt",
|
|
||||||
"could_not_resume_download": "Download konnte nicht fortgesetzt werden",
|
|
||||||
"download_completed": "Download abgeschlossen",
|
"download_completed": "Download abgeschlossen",
|
||||||
"download_failed": "Download fehlgeschlagen",
|
"download_failed": "Download fehlgeschlagen",
|
||||||
"download_failed_for_item": "Download für {{item}} fehlgeschlagen - {{error}}",
|
"download_failed_for_item": "Download für {{item}} fehlgeschlagen - {{error}}",
|
||||||
@@ -562,10 +475,7 @@
|
|||||||
"item_already_downloading": "{{item}} Lädt",
|
"item_already_downloading": "{{item}} Lädt",
|
||||||
"all_files_deleted": "Alle Downloads gelöscht",
|
"all_files_deleted": "Alle Downloads gelöscht",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} gelöscht",
|
"files_deleted_by_type": "{{count}} {{type}} gelöscht",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Alle Dateien, Ordner und Jobs erfolgreich gelöscht",
|
|
||||||
"failed_to_clean_cache_directory": "Fehler beim Bereinigen des Cache-Verzeichnisses",
|
|
||||||
"could_not_get_download_url_for_item": "Download-URL für {{itemName}} konnte nicht geladen werden",
|
"could_not_get_download_url_for_item": "Download-URL für {{itemName}} konnte nicht geladen werden",
|
||||||
"go_to_downloads": "Zu Downloads gehen",
|
|
||||||
"file_deleted": "{{item}} gelöscht"
|
"file_deleted": "{{item}} gelöscht"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +493,13 @@
|
|||||||
"none": "Keine",
|
"none": "Keine",
|
||||||
"track": "Spur",
|
"track": "Spur",
|
||||||
"cancel": "Abbrechen",
|
"cancel": "Abbrechen",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Löschen",
|
"delete": "Löschen",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Entfernen",
|
"remove": "Entfernen",
|
||||||
"next": "Weiter",
|
|
||||||
"back": "Zurück",
|
"back": "Zurück",
|
||||||
"continue": "Fortsetzen",
|
"continue": "Fortsetzen",
|
||||||
"verifying": "Verifiziere...",
|
"verifying": "Verifiziere...",
|
||||||
"login": "Login",
|
"login": "Login"
|
||||||
"refresh": "Refresh"
|
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Suchen...",
|
"search": "Suchen...",
|
||||||
@@ -691,10 +598,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Konnte keinen Stream für Chromecast erstellen",
|
"could_not_create_stream_for_chromecast": "Konnte keinen Stream für Chromecast erstellen",
|
||||||
"message_from_server": "Nachricht vom Server: {{message}}",
|
"message_from_server": "Nachricht vom Server: {{message}}",
|
||||||
"next_episode": "Nächste Episode",
|
"next_episode": "Nächste Episode",
|
||||||
"refresh_tracks": "Spuren aktualisieren",
|
|
||||||
"audio_tracks": "Audiospuren:",
|
|
||||||
"playback_state": "Wiedergabestatus:",
|
|
||||||
"index": "Index:",
|
|
||||||
"continue_watching": "Fortsetzen",
|
"continue_watching": "Fortsetzen",
|
||||||
"go_back": "Zurück",
|
"go_back": "Zurück",
|
||||||
"downloaded_file_title": "Diese Datei wurde bereits heruntergeladen",
|
"downloaded_file_title": "Diese Datei wurde bereits heruntergeladen",
|
||||||
@@ -761,7 +664,6 @@
|
|||||||
"show_more": "Mehr anzeigen",
|
"show_more": "Mehr anzeigen",
|
||||||
"show_less": "Weniger anzeigen",
|
"show_less": "Weniger anzeigen",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -888,13 +790,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "Titel"
|
"tracks": "Titel"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "Alle"
|
|
||||||
},
|
|
||||||
"recently_added": "Kürzlich hinzugefügt",
|
"recently_added": "Kürzlich hinzugefügt",
|
||||||
"recently_played": "Vor kurzem gehört",
|
"recently_played": "Vor kurzem gehört",
|
||||||
"frequently_played": "Oft gehört",
|
"frequently_played": "Oft gehört",
|
||||||
"explore": "Entdecken",
|
|
||||||
"top_tracks": "Top-Titel",
|
"top_tracks": "Top-Titel",
|
||||||
"play": "Abspielen",
|
"play": "Abspielen",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +926,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -100,7 +100,6 @@
|
|||||||
"continue_and_next_up": "Continue & Next Up",
|
"continue_and_next_up": "Continue & Next Up",
|
||||||
"recently_added_in": "Προστέθηκε πρόσφατα στο {{libraryName}}",
|
"recently_added_in": "Προστέθηκε πρόσφατα στο {{libraryName}}",
|
||||||
"suggested_movies": "Προτεινόμενες Ταινίες",
|
"suggested_movies": "Προτεινόμενες Ταινίες",
|
||||||
"suggested_episodes": "Προτεινόμενα Επεισόδια",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Καλώς ήρθατε στο Streamyfin",
|
"welcome_to_streamyfin": "Καλώς ήρθατε στο Streamyfin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "Ένας ελεύθερος και ανοιχτού κώδικα πελάτης για τη ζελυφίνη.",
|
"a_free_and_open_source_client_for_jellyfin": "Ένας ελεύθερος και ανοιχτού κώδικα πελάτης για τη ζελυφίνη.",
|
||||||
@@ -261,43 +260,6 @@
|
|||||||
"None": "Κανένα",
|
"None": "Κανένα",
|
||||||
"OnlyForced": "Μόνο"
|
"OnlyForced": "Μόνο"
|
||||||
},
|
},
|
||||||
"text_color": "Χρώμα Κειμένου",
|
|
||||||
"background_color": "Χρώμα Φόντου",
|
|
||||||
"outline_color": "Χρώμα Περιγράμματος",
|
|
||||||
"outline_thickness": "Πάχος Περιγράμματος",
|
|
||||||
"background_opacity": "Αδιαφάνεια Φόντου",
|
|
||||||
"outline_opacity": "Αδιαφάνεια Περιγράμματος",
|
|
||||||
"bold_text": "Bold Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Μαύρο",
|
|
||||||
"Gray": "Γκρι",
|
|
||||||
"Silver": "Ασημένιο",
|
|
||||||
"White": "Λευκό",
|
|
||||||
"Maroon": "Μαρώ",
|
|
||||||
"Red": "Κόκκινο",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Κίτρινο",
|
|
||||||
"Olive": "Ελιές",
|
|
||||||
"Green": "Πράσινο",
|
|
||||||
"Teal": "Τιρκουάζ",
|
|
||||||
"Lime": "Άσβεστος",
|
|
||||||
"Purple": "Μωβ",
|
|
||||||
"Navy": "Ναυτικό",
|
|
||||||
"Blue": "Μπλε",
|
|
||||||
"Aqua": "Νερό"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Κανένα",
|
|
||||||
"Thin": "Λεπτό",
|
|
||||||
"Normal": "Κανονικό",
|
|
||||||
"Thick": "Παχύ"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +277,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video Player",
|
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Άλλο",
|
"other_title": "Άλλο",
|
||||||
"video_orientation": "Προσανατολισμός Βίντεο",
|
"video_orientation": "Προσανατολισμός Βίντεο",
|
||||||
@@ -351,13 +294,7 @@
|
|||||||
"UNKNOWN": "Άγνωστο"
|
"UNKNOWN": "Άγνωστο"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Ασφαλής περιοχή σε χειριστήρια",
|
"safe_area_in_controls": "Ασφαλής περιοχή σε χειριστήρια",
|
||||||
"video_player": "Αναπαραγωγέας Βίντεο",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Πειραματική + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Εμφάνιση Προσαρμοσμένων Συνδέσμων Μενού",
|
"show_custom_menu_links": "Εμφάνιση Προσαρμοσμένων Συνδέσμων Μενού",
|
||||||
"show_large_home_carousel": "Show Large Home Carousel (beta)",
|
|
||||||
"hide_libraries": "Απόκρυψη Βιβλιοθηκών",
|
"hide_libraries": "Απόκρυψη Βιβλιοθηκών",
|
||||||
"select_liraries_you_want_to_hide": "Επιλέξτε τις βιβλιοθήκες που θέλετε να αποκρύψετε από την καρτέλα της Βιβλιοθήκης και τις ενότητες της αρχικής σελίδας.",
|
"select_liraries_you_want_to_hide": "Επιλέξτε τις βιβλιοθήκες που θέλετε να αποκρύψετε από την καρτέλα της Βιβλιοθήκης και τις ενότητες της αρχικής σελίδας.",
|
||||||
"disable_haptic_feedback": "Απενεργοποίηση Απτικής Ανατροφοδότησης",
|
"disable_haptic_feedback": "Απενεργοποίηση Απτικής Ανατροφοδότησης",
|
||||||
@@ -367,9 +304,6 @@
|
|||||||
"max_auto_play_episode_count": "Μέγιστο Πλήθος Επεισόδιο Αυτόματου Παιχνιδιού",
|
"max_auto_play_episode_count": "Μέγιστο Πλήθος Επεισόδιο Αυτόματου Παιχνιδιού",
|
||||||
"disabled": "Απενεργοποιημένο"
|
"disabled": "Απενεργοποιημένο"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Λήψεις"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +347,18 @@
|
|||||||
"read_more_about_marlin": "Διαβάστε Περισσότερα Σχετικά Με Marlin.",
|
"read_more_about_marlin": "Διαβάστε Περισσότερα Σχετικά Με Marlin.",
|
||||||
"save_button": "Αποθήκευση",
|
"save_button": "Αποθήκευση",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Αποθηκεύτηκε",
|
"saved": "Αποθηκεύτηκε"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +374,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +385,6 @@
|
|||||||
"delete_all_downloaded_files": "Διαγραφή Όλων Των Ληφθέντων Αρχείων",
|
"delete_all_downloaded_files": "Διαγραφή Όλων Των Ληφθέντων Αρχείων",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +394,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -481,8 +406,7 @@
|
|||||||
"export_logs": "Εξαγωγή Αρχείων Καταγραφής",
|
"export_logs": "Εξαγωγή Αρχείων Καταγραφής",
|
||||||
"click_for_more_info": "Κάντε κλικ για περισσότερες πληροφορίες",
|
"click_for_more_info": "Κάντε κλικ για περισσότερες πληροφορίες",
|
||||||
"level": "Επίπεδο",
|
"level": "Επίπεδο",
|
||||||
"no_logs_available": "Δεν Υπάρχουν Διαθέσιμα Αρχεία Καταγραφής",
|
"no_logs_available": "Δεν Υπάρχουν Διαθέσιμα Αρχεία Καταγραφής"
|
||||||
"delete_all_logs": "Διαγραφή Όλων Των Καταγραφών"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Γλώσσες",
|
"title": "Γλώσσες",
|
||||||
@@ -490,15 +414,12 @@
|
|||||||
"system": "Σύστημα"
|
"system": "Σύστημα"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Σφάλμα Διαγραφής Αρχείων",
|
"error_deleting_files": "Σφάλμα Διαγραφής Αρχείων"
|
||||||
"background_downloads_enabled": "Οι λήψεις στο παρασκήνιο ενεργοποιήθηκαν",
|
|
||||||
"background_downloads_disabled": "Οι λήψεις παρασκηνίου απενεργοποιήθηκαν"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -518,10 +439,7 @@
|
|||||||
"downloads_title": "Λήψεις",
|
"downloads_title": "Λήψεις",
|
||||||
"tvseries": "Τηλεόραση-Σειρά",
|
"tvseries": "Τηλεόραση-Σειρά",
|
||||||
"movies": "Ταινίες",
|
"movies": "Ταινίες",
|
||||||
"queue": "Ουρά",
|
|
||||||
"other_media": "Άλλα μέσα",
|
"other_media": "Άλλα μέσα",
|
||||||
"queue_hint": "Ουρά και λήψεις θα χαθούν κατά την επανεκκίνηση της εφαρμογής",
|
|
||||||
"no_items_in_queue": "Δεν υπάρχουν αντικείμενα στην ουρά",
|
|
||||||
"no_downloaded_items": "Δεν Έχουν Ληφθεί Αντικείμενα",
|
"no_downloaded_items": "Δεν Έχουν Ληφθεί Αντικείμενα",
|
||||||
"delete_all_movies_button": "Διαγραφή Όλων Των Ταινιών",
|
"delete_all_movies_button": "Διαγραφή Όλων Των Ταινιών",
|
||||||
"delete_all_tvseries_button": "Διαγραφή Όλων Των Τηλεοπτικών Σειρών",
|
"delete_all_tvseries_button": "Διαγραφή Όλων Των Τηλεοπτικών Σειρών",
|
||||||
@@ -546,13 +464,8 @@
|
|||||||
"failed_to_delete_all_tvseries": "Αποτυχία διαγραφής Όλων των TV-Series",
|
"failed_to_delete_all_tvseries": "Αποτυχία διαγραφής Όλων των TV-Series",
|
||||||
"deleted_media_successfully": "Διαγράφηκε άλλο μέσο επιτυχώς!",
|
"deleted_media_successfully": "Διαγράφηκε άλλο μέσο επιτυχώς!",
|
||||||
"failed_to_delete_media": "Αποτυχία διαγραφής άλλων πολυμέσων",
|
"failed_to_delete_media": "Αποτυχία διαγραφής άλλων πολυμέσων",
|
||||||
"download_deleted": "Η Λήψη Διαγράφηκε",
|
|
||||||
"download_cancelled": "Download Cancelled",
|
"download_cancelled": "Download Cancelled",
|
||||||
"could_not_delete_download": "Αδυναμία Διαγραφής Λήψης",
|
"could_not_delete_download": "Αδυναμία Διαγραφής Λήψης",
|
||||||
"download_paused": "Λήψη Σε Παύση",
|
|
||||||
"could_not_pause_download": "Αδυναμία Παύσης Λήψης",
|
|
||||||
"download_resumed": "Συνέχιση Λήψης",
|
|
||||||
"could_not_resume_download": "Αδυναμία Συνέχισης Λήψης",
|
|
||||||
"download_completed": "Η Λήψη Ολοκληρώθηκε",
|
"download_completed": "Η Λήψη Ολοκληρώθηκε",
|
||||||
"download_failed": "Download Failed",
|
"download_failed": "Download Failed",
|
||||||
"download_failed_for_item": "Η λήψη απέτυχε για το {{item}} - {{error}}",
|
"download_failed_for_item": "Η λήψη απέτυχε για το {{item}} - {{error}}",
|
||||||
@@ -562,10 +475,7 @@
|
|||||||
"item_already_downloading": "{{item}} is already downloading",
|
"item_already_downloading": "{{item}} is already downloading",
|
||||||
"all_files_deleted": "All Downloads Deleted Successfully",
|
"all_files_deleted": "All Downloads Deleted Successfully",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Όλα τα αρχεία, οι φάκελοι και οι εργασίες διαγράφηκαν με επιτυχία",
|
|
||||||
"failed_to_clean_cache_directory": "Αποτυχία καθαρισμού φακέλου προσωρινής μνήμης",
|
|
||||||
"could_not_get_download_url_for_item": "Αδυναμία λήψης του URL λήψης για το {{itemName}}",
|
"could_not_get_download_url_for_item": "Αδυναμία λήψης του URL λήψης για το {{itemName}}",
|
||||||
"go_to_downloads": "Μετάβαση στις λήψεις",
|
|
||||||
"file_deleted": "{{item}} deleted"
|
"file_deleted": "{{item}} deleted"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +493,13 @@
|
|||||||
"none": "None",
|
"none": "None",
|
||||||
"track": "Track",
|
"track": "Track",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login"
|
||||||
"refresh": "Refresh"
|
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Αναζήτηση...",
|
"search": "Αναζήτηση...",
|
||||||
@@ -691,10 +598,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Αδυναμία δημιουργίας ροής για το Chromecast",
|
"could_not_create_stream_for_chromecast": "Αδυναμία δημιουργίας ροής για το Chromecast",
|
||||||
"message_from_server": "Μήνυμα από το διακομιστή: {{message}}",
|
"message_from_server": "Μήνυμα από το διακομιστή: {{message}}",
|
||||||
"next_episode": "Επόμενο Επεισόδιο",
|
"next_episode": "Επόμενο Επεισόδιο",
|
||||||
"refresh_tracks": "Ανανέωση Κομματιών",
|
|
||||||
"audio_tracks": "Κομμάτια Ήχου:",
|
|
||||||
"playback_state": "Κατάσταση Αναπαραγωγής:",
|
|
||||||
"index": "Δείκτης:",
|
|
||||||
"continue_watching": "Συνέχεια Παρακολούθησης",
|
"continue_watching": "Συνέχεια Παρακολούθησης",
|
||||||
"go_back": "Μετάβαση Πίσω",
|
"go_back": "Μετάβαση Πίσω",
|
||||||
"downloaded_file_title": "You have this file downloaded",
|
"downloaded_file_title": "You have this file downloaded",
|
||||||
@@ -761,7 +664,6 @@
|
|||||||
"show_more": "Εμφάνιση Περισσότερων",
|
"show_more": "Εμφάνιση Περισσότερων",
|
||||||
"show_less": "Εμφάνιση Λιγότερων",
|
"show_less": "Εμφάνιση Λιγότερων",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -888,13 +790,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +926,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -25,7 +25,8 @@
|
|||||||
"there_is_a_server_error": "There is a server error",
|
"there_is_a_server_error": "There is a server error",
|
||||||
"an_unexpected_error_occured_did_you_enter_the_correct_url": "An unexpected error occurred. Did you enter the server URL correctly?",
|
"an_unexpected_error_occured_did_you_enter_the_correct_url": "An unexpected error occurred. Did you enter the server URL correctly?",
|
||||||
"too_old_server_text": "Unsupported Jellyfin Server Discovered",
|
"too_old_server_text": "Unsupported Jellyfin Server Discovered",
|
||||||
"too_old_server_description": "Please update Jellyfin to the latest version"
|
"too_old_server_description": "Please update Jellyfin to the latest version",
|
||||||
|
"login": "Log In"
|
||||||
},
|
},
|
||||||
"server": {
|
"server": {
|
||||||
"enter_url_to_jellyfin_server": "Enter the URL to your Jellyfin server",
|
"enter_url_to_jellyfin_server": "Enter the URL to your Jellyfin server",
|
||||||
@@ -100,7 +101,6 @@
|
|||||||
"continue_and_next_up": "Continue & Next Up",
|
"continue_and_next_up": "Continue & Next Up",
|
||||||
"recently_added_in": "Recently Added in {{libraryName}}",
|
"recently_added_in": "Recently Added in {{libraryName}}",
|
||||||
"suggested_movies": "Suggested Movies",
|
"suggested_movies": "Suggested Movies",
|
||||||
"suggested_episodes": "Suggested Episodes",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Welcome to Streamyfin",
|
"welcome_to_streamyfin": "Welcome to Streamyfin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "A Free and Open-Source Client for Jellyfin.",
|
"a_free_and_open_source_client_for_jellyfin": "A Free and Open-Source Client for Jellyfin.",
|
||||||
@@ -261,43 +261,6 @@
|
|||||||
"None": "None",
|
"None": "None",
|
||||||
"OnlyForced": "OnlyForced"
|
"OnlyForced": "OnlyForced"
|
||||||
},
|
},
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"bold_text": "Bold Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Black",
|
|
||||||
"Gray": "Gray",
|
|
||||||
"Silver": "Silver",
|
|
||||||
"White": "White",
|
|
||||||
"Maroon": "Maroon",
|
|
||||||
"Red": "Red",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Yellow",
|
|
||||||
"Olive": "Olive",
|
|
||||||
"Green": "Green",
|
|
||||||
"Teal": "Teal",
|
|
||||||
"Lime": "Lime",
|
|
||||||
"Purple": "Purple",
|
|
||||||
"Navy": "Navy",
|
|
||||||
"Blue": "Blue",
|
|
||||||
"Aqua": "Aqua"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "None",
|
|
||||||
"Thin": "Thin",
|
|
||||||
"Normal": "Normal",
|
|
||||||
"Thick": "Thick"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +278,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video Player",
|
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Other",
|
"other_title": "Other",
|
||||||
"video_orientation": "Video Orientation",
|
"video_orientation": "Video Orientation",
|
||||||
@@ -351,13 +295,7 @@
|
|||||||
"UNKNOWN": "Unknown"
|
"UNKNOWN": "Unknown"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Safe Area in Controls",
|
"safe_area_in_controls": "Safe Area in Controls",
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Experimental + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Show Custom Menu Links",
|
"show_custom_menu_links": "Show Custom Menu Links",
|
||||||
"show_large_home_carousel": "Show Large Home Carousel (beta)",
|
|
||||||
"hide_libraries": "Hide Libraries",
|
"hide_libraries": "Hide Libraries",
|
||||||
"select_liraries_you_want_to_hide": "Select the libraries you want to hide from the Library tab and home page sections.",
|
"select_liraries_you_want_to_hide": "Select the libraries you want to hide from the Library tab and home page sections.",
|
||||||
"disable_haptic_feedback": "Disable Haptic Feedback",
|
"disable_haptic_feedback": "Disable Haptic Feedback",
|
||||||
@@ -367,9 +305,6 @@
|
|||||||
"max_auto_play_episode_count": "Max Auto Play Episode Count",
|
"max_auto_play_episode_count": "Max Auto Play Episode Count",
|
||||||
"disabled": "Disabled"
|
"disabled": "Disabled"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Downloads"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +348,18 @@
|
|||||||
"read_more_about_marlin": "Read More About Marlin.",
|
"read_more_about_marlin": "Read More About Marlin.",
|
||||||
"save_button": "Save",
|
"save_button": "Save",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Saved",
|
"saved": "Saved"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +375,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +386,6 @@
|
|||||||
"delete_all_downloaded_files": "Delete All Downloaded Files",
|
"delete_all_downloaded_files": "Delete All Downloaded Files",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +395,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -481,8 +407,7 @@
|
|||||||
"export_logs": "Export Logs",
|
"export_logs": "Export Logs",
|
||||||
"click_for_more_info": "Click for More Info",
|
"click_for_more_info": "Click for More Info",
|
||||||
"level": "Level",
|
"level": "Level",
|
||||||
"no_logs_available": "No Logs Available",
|
"no_logs_available": "No Logs Available"
|
||||||
"delete_all_logs": "Delete All Logs"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Languages",
|
"title": "Languages",
|
||||||
@@ -490,15 +415,12 @@
|
|||||||
"system": "System"
|
"system": "System"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Error Deleting Files",
|
"error_deleting_files": "Error Deleting Files"
|
||||||
"background_downloads_enabled": "Background downloads enabled",
|
|
||||||
"background_downloads_disabled": "Background downloads disabled"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -508,6 +430,10 @@
|
|||||||
"4_hours": "4 hours",
|
"4_hours": "4 hours",
|
||||||
"24_hours": "24 hours"
|
"24_hours": "24 hours"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"dashboard": {
|
||||||
|
"title": "Dashboard",
|
||||||
|
"sessions_title": "Sessions"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sessions": {
|
"sessions": {
|
||||||
@@ -518,10 +444,7 @@
|
|||||||
"downloads_title": "Downloads",
|
"downloads_title": "Downloads",
|
||||||
"tvseries": "TV-Series",
|
"tvseries": "TV-Series",
|
||||||
"movies": "Movies",
|
"movies": "Movies",
|
||||||
"queue": "Queue",
|
|
||||||
"other_media": "Other media",
|
"other_media": "Other media",
|
||||||
"queue_hint": "Queue and downloads will be lost on app restart",
|
|
||||||
"no_items_in_queue": "No Items in Queue",
|
|
||||||
"no_downloaded_items": "No Downloaded Items",
|
"no_downloaded_items": "No Downloaded Items",
|
||||||
"delete_all_movies_button": "Delete All Movies",
|
"delete_all_movies_button": "Delete All Movies",
|
||||||
"delete_all_tvseries_button": "Delete All TV-Series",
|
"delete_all_tvseries_button": "Delete All TV-Series",
|
||||||
@@ -546,13 +469,8 @@
|
|||||||
"failed_to_delete_all_tvseries": "Failed to Delete All TV-Series",
|
"failed_to_delete_all_tvseries": "Failed to Delete All TV-Series",
|
||||||
"deleted_media_successfully": "Deleted other media Successfully!",
|
"deleted_media_successfully": "Deleted other media Successfully!",
|
||||||
"failed_to_delete_media": "Failed to Delete other media",
|
"failed_to_delete_media": "Failed to Delete other media",
|
||||||
"download_deleted": "Download Deleted",
|
|
||||||
"download_cancelled": "Download Cancelled",
|
"download_cancelled": "Download Cancelled",
|
||||||
"could_not_delete_download": "Could Not Delete Download",
|
"could_not_delete_download": "Could Not Delete Download",
|
||||||
"download_paused": "Download Paused",
|
|
||||||
"could_not_pause_download": "Could Not Pause Download",
|
|
||||||
"download_resumed": "Download Resumed",
|
|
||||||
"could_not_resume_download": "Could Not Resume Download",
|
|
||||||
"download_completed": "Download Completed",
|
"download_completed": "Download Completed",
|
||||||
"download_failed": "Download Failed",
|
"download_failed": "Download Failed",
|
||||||
"download_failed_for_item": "Download failed for {{item}} - {{error}}",
|
"download_failed_for_item": "Download failed for {{item}} - {{error}}",
|
||||||
@@ -562,10 +480,7 @@
|
|||||||
"item_already_downloading": "{{item}} is already downloading",
|
"item_already_downloading": "{{item}} is already downloading",
|
||||||
"all_files_deleted": "All Downloads Deleted Successfully",
|
"all_files_deleted": "All Downloads Deleted Successfully",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "All files, folders, and jobs deleted successfully",
|
|
||||||
"failed_to_clean_cache_directory": "Failed to clean cache directory",
|
|
||||||
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
|
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
|
||||||
"go_to_downloads": "Go to Downloads",
|
|
||||||
"file_deleted": "{{item}} deleted"
|
"file_deleted": "{{item}} deleted"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,17 +498,17 @@
|
|||||||
"none": "None",
|
"none": "None",
|
||||||
"track": "Track",
|
"track": "Track",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
"refresh": "Refresh",
|
"episodes": "Episodes",
|
||||||
"loading": "Loading..."
|
"movies": "Movies",
|
||||||
|
"loading": "Loading…",
|
||||||
|
"seeAll": "See all"
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Search...",
|
"search": "Search...",
|
||||||
@@ -692,10 +607,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Could not create a stream for Chromecast",
|
"could_not_create_stream_for_chromecast": "Could not create a stream for Chromecast",
|
||||||
"message_from_server": "Message from Server: {{message}}",
|
"message_from_server": "Message from Server: {{message}}",
|
||||||
"next_episode": "Next Episode",
|
"next_episode": "Next Episode",
|
||||||
"refresh_tracks": "Refresh Tracks",
|
|
||||||
"audio_tracks": "Audio Tracks:",
|
|
||||||
"playback_state": "Playback State:",
|
|
||||||
"index": "Index:",
|
|
||||||
"continue_watching": "Continue Watching",
|
"continue_watching": "Continue Watching",
|
||||||
"go_back": "Go Back",
|
"go_back": "Go Back",
|
||||||
"downloaded_file_title": "You have this file downloaded",
|
"downloaded_file_title": "You have this file downloaded",
|
||||||
@@ -724,7 +635,8 @@
|
|||||||
"stopPlayback": "Stop Playback",
|
"stopPlayback": "Stop Playback",
|
||||||
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
"stopPlayingTitle": "Stop playing \"{{title}}\"?",
|
||||||
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
"stopPlayingConfirm": "Are you sure you want to stop playback?",
|
||||||
"downloaded": "Downloaded"
|
"downloaded": "Downloaded",
|
||||||
|
"missing_parameters": "Missing playback parameters"
|
||||||
},
|
},
|
||||||
"chapters": {
|
"chapters": {
|
||||||
"title": "Chapters",
|
"title": "Chapters",
|
||||||
@@ -762,7 +674,6 @@
|
|||||||
"show_more": "Show More",
|
"show_more": "Show More",
|
||||||
"show_less": "Show Less",
|
"show_less": "Show Less",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -785,7 +696,8 @@
|
|||||||
"resume_playback": "Resume Playback",
|
"resume_playback": "Resume Playback",
|
||||||
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
"resume_playback_description": "Do you want to continue where you left off or start from the beginning?",
|
||||||
"play_from_start": "Play from Start",
|
"play_from_start": "Play from Start",
|
||||||
"continue_from": "Continue from {{time}}"
|
"continue_from": "Continue from {{time}}",
|
||||||
|
"no_data_available": "No data available"
|
||||||
},
|
},
|
||||||
"live_tv": {
|
"live_tv": {
|
||||||
"next": "Next",
|
"next": "Next",
|
||||||
@@ -889,13 +801,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1029,7 +937,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -43,7 +43,6 @@
|
|||||||
"next_up": "Sekva",
|
"next_up": "Sekva",
|
||||||
"recently_added_in": "Ĵus Aldonita en {{libraryName}}",
|
"recently_added_in": "Ĵus Aldonita en {{libraryName}}",
|
||||||
"suggested_movies": "Sugestitaj Filmoj",
|
"suggested_movies": "Sugestitaj Filmoj",
|
||||||
"suggested_episodes": "Sugestitaj Epizodoj",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Bonvenon al Streamyfin",
|
"welcome_to_streamyfin": "Bonvenon al Streamyfin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "Senpaga kaj malfermfonta kliento por Jellyfin.",
|
"a_free_and_open_source_client_for_jellyfin": "Senpaga kaj malfermfonta kliento por Jellyfin.",
|
||||||
@@ -128,11 +127,6 @@
|
|||||||
"UNKNOWN": "Nekonata"
|
"UNKNOWN": "Nekonata"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Sekura areo en kontroloj",
|
"safe_area_in_controls": "Sekura areo en kontroloj",
|
||||||
"video_player": "Video-ludilo",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Eksperimenta + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Montri Proprajn Menuajn Ligilojn",
|
"show_custom_menu_links": "Montri Proprajn Menuajn Ligilojn",
|
||||||
"hide_libraries": "Kaŝi Bibliotekojn",
|
"hide_libraries": "Kaŝi Bibliotekojn",
|
||||||
"select_liraries_you_want_to_hide": "Elektu la bibliotekojn, kiujn vi volas kaŝi de la Biblioteka langeto kaj hejmpaĝaj sekcioj.",
|
"select_liraries_you_want_to_hide": "Elektu la bibliotekojn, kiujn vi volas kaŝi de la Biblioteka langeto kaj hejmpaĝaj sekcioj.",
|
||||||
@@ -140,7 +134,6 @@
|
|||||||
"default_quality": "Defaŭlta kvalito"
|
"default_quality": "Defaŭlta kvalito"
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Elŝutoj",
|
|
||||||
"optimized_versions_server": "Optimumigitaj versioj servilo",
|
"optimized_versions_server": "Optimumigitaj versioj servilo",
|
||||||
"save_button": "Konservi",
|
"save_button": "Konservi",
|
||||||
"optimized_server": "Optimumigita Servilo",
|
"optimized_server": "Optimumigita Servilo",
|
||||||
@@ -205,8 +198,7 @@
|
|||||||
"export_logs": "Eksporti protokolojn",
|
"export_logs": "Eksporti protokolojn",
|
||||||
"click_for_more_info": "Klaku por pli da informoj",
|
"click_for_more_info": "Klaku por pli da informoj",
|
||||||
"level": "Nivelo",
|
"level": "Nivelo",
|
||||||
"no_logs_available": "Neniuj protokoloj disponeblaj",
|
"no_logs_available": "Neniuj protokoloj disponeblaj"
|
||||||
"delete_all_logs": "Forigi ĉiujn protokolojn"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Lingvoj",
|
"title": "Lingvoj",
|
||||||
@@ -216,8 +208,6 @@
|
|||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Eraro forigante dosierojn",
|
"error_deleting_files": "Eraro forigante dosierojn",
|
||||||
"background_downloads_enabled": "Fonaj elŝutoj ebligitaj",
|
|
||||||
"background_downloads_disabled": "Fonaj elŝutoj malŝaltitaj",
|
|
||||||
"connected": "Konektita",
|
"connected": "Konektita",
|
||||||
"could_not_connect": "Ne povis konekti",
|
"could_not_connect": "Ne povis konekti",
|
||||||
"invalid_url": "Nevalida URL"
|
"invalid_url": "Nevalida URL"
|
||||||
@@ -231,9 +221,6 @@
|
|||||||
"downloads_title": "Elŝutoj",
|
"downloads_title": "Elŝutoj",
|
||||||
"tvseries": "Televidaj serioj",
|
"tvseries": "Televidaj serioj",
|
||||||
"movies": "Filmoj",
|
"movies": "Filmoj",
|
||||||
"queue": "Vico",
|
|
||||||
"queue_hint": "Vico kaj elŝutoj perdiĝos ĉe aplikaĵa rekomenco",
|
|
||||||
"no_items_in_queue": "Neniuj eroj en vico",
|
|
||||||
"no_downloaded_items": "Neniuj elŝutitaj eroj",
|
"no_downloaded_items": "Neniuj elŝutitaj eroj",
|
||||||
"delete_all_movies_button": "Forigi ĉiujn Filmojn",
|
"delete_all_movies_button": "Forigi ĉiujn Filmojn",
|
||||||
"delete_all_tvseries_button": "Forigi ĉiujn Televidajn Seriojn",
|
"delete_all_tvseries_button": "Forigi ĉiujn Televidajn Seriojn",
|
||||||
@@ -269,9 +256,7 @@
|
|||||||
"no_response_received_from_server": "Neniu respondo ricevita de la servilo",
|
"no_response_received_from_server": "Neniu respondo ricevita de la servilo",
|
||||||
"error_setting_up_the_request": "Eraro starigante la peton",
|
"error_setting_up_the_request": "Eraro starigante la peton",
|
||||||
"failed_to_start_download_for_item_unexpected_error": "Malsukcesis komenci elŝutadon por {{item}}: Neatendita eraro",
|
"failed_to_start_download_for_item_unexpected_error": "Malsukcesis komenci elŝutadon por {{item}}: Neatendita eraro",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Ĉiuj dosieroj, dosierujoj kaj taskoj sukcese forigitaj",
|
"an_error_occured_while_deleting_files_and_jobs": "Eraro okazis dum forigo de dosieroj kaj taskoj"
|
||||||
"an_error_occured_while_deleting_files_and_jobs": "Eraro okazis dum forigo de dosieroj kaj taskoj",
|
|
||||||
"go_to_downloads": "Iri al elŝutoj"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -365,12 +350,8 @@
|
|||||||
"video_has_finished_playing": "Video finis ludi!",
|
"video_has_finished_playing": "Video finis ludi!",
|
||||||
"no_video_source": "Neniu video-fonto...",
|
"no_video_source": "Neniu video-fonto...",
|
||||||
"next_episode": "Sekva Epizodo",
|
"next_episode": "Sekva Epizodo",
|
||||||
"refresh_tracks": "Refreŝigi Trakojn",
|
|
||||||
"subtitle_tracks": "Subtekstaj Trakoj:",
|
"subtitle_tracks": "Subtekstaj Trakoj:",
|
||||||
"audio_tracks": "Aŭdiaj Trakoj:",
|
"no_data_available": "Neniuj datumoj disponeblaj"
|
||||||
"playback_state": "Ludada Stato:",
|
|
||||||
"no_data_available": "Neniuj datumoj disponeblaj",
|
|
||||||
"index": "Indekso:"
|
|
||||||
},
|
},
|
||||||
"item_card": {
|
"item_card": {
|
||||||
"next_up": "Sekva",
|
"next_up": "Sekva",
|
||||||
|
|||||||
@@ -100,7 +100,6 @@
|
|||||||
"continue_and_next_up": "Continuar y siguiente",
|
"continue_and_next_up": "Continuar y siguiente",
|
||||||
"recently_added_in": "Recientemente añadido en {{libraryName}}",
|
"recently_added_in": "Recientemente añadido en {{libraryName}}",
|
||||||
"suggested_movies": "Películas sugeridas",
|
"suggested_movies": "Películas sugeridas",
|
||||||
"suggested_episodes": "Episodios sugeridos",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Bienvenido a Streamyfin",
|
"welcome_to_streamyfin": "Bienvenido a Streamyfin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "Un cliente gratuito y de código abierto para Jellyfin.",
|
"a_free_and_open_source_client_for_jellyfin": "Un cliente gratuito y de código abierto para Jellyfin.",
|
||||||
@@ -261,43 +260,6 @@
|
|||||||
"None": "Nada",
|
"None": "Nada",
|
||||||
"OnlyForced": "Solo forzados"
|
"OnlyForced": "Solo forzados"
|
||||||
},
|
},
|
||||||
"text_color": "Color del texto",
|
|
||||||
"background_color": "Color de fondo",
|
|
||||||
"outline_color": "Color de salida",
|
|
||||||
"outline_thickness": "Grosor exterior",
|
|
||||||
"background_opacity": "Opacidad de fondo",
|
|
||||||
"outline_opacity": "Opacidad exterior",
|
|
||||||
"bold_text": "Texto en negrita",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Negro",
|
|
||||||
"Gray": "Gris",
|
|
||||||
"Silver": "Plata",
|
|
||||||
"White": "Blanco",
|
|
||||||
"Maroon": "Granate",
|
|
||||||
"Red": "Rojo",
|
|
||||||
"Fuchsia": "Fucsia",
|
|
||||||
"Yellow": "Amarillo",
|
|
||||||
"Olive": "Oliva",
|
|
||||||
"Green": "Verde",
|
|
||||||
"Teal": "Cereal",
|
|
||||||
"Lime": "Lima",
|
|
||||||
"Purple": "Morado",
|
|
||||||
"Navy": "Naval",
|
|
||||||
"Blue": "Azul",
|
|
||||||
"Aqua": "Agua"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Ninguno",
|
|
||||||
"Thin": "Ligero",
|
|
||||||
"Normal": "Normal",
|
|
||||||
"Thick": "Grosor"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Color de los Subtítulos",
|
|
||||||
"subtitle_background_color": "Color del fondo",
|
|
||||||
"subtitle_font": "Fuente de los subtítulos",
|
|
||||||
"ksplayer_title": "Ajustes de KSPlayer",
|
|
||||||
"hardware_decode": "Decodificación de hardware",
|
|
||||||
"hardware_decode_description": "Utilizar la aceleración de hardware para la decodificación de vídeo. Deshabilite si experimenta problemas de reproducción.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +277,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "Configuración de subtítulos VLC",
|
|
||||||
"hint": "Personalizar la apariencia de los subtítulos para el reproductor VLC. Los cambios tendrán efecto en la próxima reproducción.",
|
|
||||||
"text_color": "Color del texto",
|
|
||||||
"background_color": "Color del fondo",
|
|
||||||
"background_opacity": "Opacidad del fondo",
|
|
||||||
"outline_color": "Color del contorno",
|
|
||||||
"outline_opacity": "Opacidad del contorno",
|
|
||||||
"outline_thickness": "Grosor del contorno",
|
|
||||||
"bold": "Texto en negrita",
|
|
||||||
"margin": "Margen inferior"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Reproductor de vídeo",
|
|
||||||
"video_player": "Reproductor de vídeo",
|
|
||||||
"video_player_description": "Elige qué reproductor de vídeo en iOS",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Otros",
|
"other_title": "Otros",
|
||||||
"video_orientation": "Orientación de vídeo",
|
"video_orientation": "Orientación de vídeo",
|
||||||
@@ -351,13 +294,7 @@
|
|||||||
"UNKNOWN": "Desconocida"
|
"UNKNOWN": "Desconocida"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Área segura en controles",
|
"safe_area_in_controls": "Área segura en controles",
|
||||||
"video_player": "Reproductor de vídeo",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Experimental + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Mostrar enlaces de menú personalizados",
|
"show_custom_menu_links": "Mostrar enlaces de menú personalizados",
|
||||||
"show_large_home_carousel": "Mostrar carrusel del menú principal grande (beta)",
|
|
||||||
"hide_libraries": "Ocultar bibliotecas",
|
"hide_libraries": "Ocultar bibliotecas",
|
||||||
"select_liraries_you_want_to_hide": "Selecciona las bibliotecas que quieres ocultar de la pestaña Bibliotecas y de Inicio.",
|
"select_liraries_you_want_to_hide": "Selecciona las bibliotecas que quieres ocultar de la pestaña Bibliotecas y de Inicio.",
|
||||||
"disable_haptic_feedback": "Desactivar feedback háptico",
|
"disable_haptic_feedback": "Desactivar feedback háptico",
|
||||||
@@ -367,9 +304,6 @@
|
|||||||
"max_auto_play_episode_count": "Máximo número de episodios de Auto Play",
|
"max_auto_play_episode_count": "Máximo número de episodios de Auto Play",
|
||||||
"disabled": "Deshabilitado"
|
"disabled": "Deshabilitado"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Descargas"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Música",
|
"title": "Música",
|
||||||
"playback_title": "Reproducir",
|
"playback_title": "Reproducir",
|
||||||
@@ -413,23 +347,18 @@
|
|||||||
"read_more_about_marlin": "Leer más sobre Marlin.",
|
"read_more_about_marlin": "Leer más sobre Marlin.",
|
||||||
"save_button": "Guardar",
|
"save_button": "Guardar",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Guardado",
|
"saved": "Guardado"
|
||||||
"refreshed": "Ajustes del servidor actualizados"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Actualizar ajustes del servidor"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Habilitar Streamystats",
|
|
||||||
"disable_streamystats": "Deshabilitar Streamystats",
|
"disable_streamystats": "Deshabilitar Streamystats",
|
||||||
"enable_search": "Usar para la búsqueda",
|
"enable_search": "Usar para la búsqueda",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.ejemplo.com",
|
"server_url_placeholder": "http(s)://streamystats.ejemplo.com",
|
||||||
"streamystats_search_hint": "Introduzca la URL para su servidor Streamystats. La URL debe incluir http o https y opcionalmente el puerto.",
|
"streamystats_search_hint": "Introduzca la URL para su servidor Streamystats. La URL debe incluir http o https y opcionalmente el puerto.",
|
||||||
"read_more_about_streamystats": "Leer más sobre Streamystats.",
|
"read_more_about_streamystats": "Leer más sobre Streamystats.",
|
||||||
"save_button": "Guardar",
|
|
||||||
"save": "Guardar",
|
"save": "Guardar",
|
||||||
"features_title": "Características",
|
"features_title": "Características",
|
||||||
"home_sections_title": "Secciones de inicio",
|
|
||||||
"enable_movie_recommendations": "Recomendaciones de películas",
|
"enable_movie_recommendations": "Recomendaciones de películas",
|
||||||
"enable_series_recommendations": "Recomendaciones de series",
|
"enable_series_recommendations": "Recomendaciones de series",
|
||||||
"enable_promoted_watchlists": "Listas promocionadas",
|
"enable_promoted_watchlists": "Listas promocionadas",
|
||||||
@@ -445,8 +374,7 @@
|
|||||||
"refresh_from_server": "Actualizar ajustes desde el servidor"
|
"refresh_from_server": "Actualizar ajustes desde el servidor"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Habilitar la integración de la lista de seguimiento",
|
"watchlist_enabler": "Habilitar la integración de la lista de seguimiento"
|
||||||
"watchlist_button": "Activar o desactivar la integración de la lista de seguimiento"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +385,6 @@
|
|||||||
"delete_all_downloaded_files": "Eliminar todos los archivos descargados",
|
"delete_all_downloaded_files": "Eliminar todos los archivos descargados",
|
||||||
"music_cache_title": "Caché de música",
|
"music_cache_title": "Caché de música",
|
||||||
"music_cache_description": "Cachear automáticamente las canciones mientras escuchas una reproducción más suave y soporte sin conexión",
|
"music_cache_description": "Cachear automáticamente las canciones mientras escuchas una reproducción más suave y soporte sin conexión",
|
||||||
"enable_music_cache": "Activar Caché de Música",
|
|
||||||
"clear_music_cache": "Borrar Caché de Música",
|
"clear_music_cache": "Borrar Caché de Música",
|
||||||
"music_cache_size": "Caché {{Tamaño}}",
|
"music_cache_size": "Caché {{Tamaño}}",
|
||||||
"music_cache_cleared": "Caché de música eliminado",
|
"music_cache_cleared": "Caché de música eliminado",
|
||||||
@@ -467,8 +394,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -481,8 +406,7 @@
|
|||||||
"export_logs": "Export logs",
|
"export_logs": "Export logs",
|
||||||
"click_for_more_info": "Click for more info",
|
"click_for_more_info": "Click for more info",
|
||||||
"level": "Nivel",
|
"level": "Nivel",
|
||||||
"no_logs_available": "No hay registros disponibles",
|
"no_logs_available": "No hay registros disponibles"
|
||||||
"delete_all_logs": "Eliminar todos los registros"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Idiomas",
|
"title": "Idiomas",
|
||||||
@@ -490,15 +414,12 @@
|
|||||||
"system": "Sistema"
|
"system": "Sistema"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Error al eliminar archivos",
|
"error_deleting_files": "Error al eliminar archivos"
|
||||||
"background_downloads_enabled": "Descargas en segundo plano habilitadas",
|
|
||||||
"background_downloads_disabled": "Descargas en segundo plano deshabilitadas"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -518,10 +439,7 @@
|
|||||||
"downloads_title": "Descargas",
|
"downloads_title": "Descargas",
|
||||||
"tvseries": "Series",
|
"tvseries": "Series",
|
||||||
"movies": "Películas",
|
"movies": "Películas",
|
||||||
"queue": "Cola",
|
|
||||||
"other_media": "Otros medios",
|
"other_media": "Otros medios",
|
||||||
"queue_hint": "La cola de series y películas se perderá al reiniciar la app",
|
|
||||||
"no_items_in_queue": "No hay ítems en la cola",
|
|
||||||
"no_downloaded_items": "No hay ítems descargados",
|
"no_downloaded_items": "No hay ítems descargados",
|
||||||
"delete_all_movies_button": "Eliminar todas las películas",
|
"delete_all_movies_button": "Eliminar todas las películas",
|
||||||
"delete_all_tvseries_button": "Eliminar todas las series",
|
"delete_all_tvseries_button": "Eliminar todas las series",
|
||||||
@@ -546,13 +464,8 @@
|
|||||||
"failed_to_delete_all_tvseries": "Error al eliminar todas las series",
|
"failed_to_delete_all_tvseries": "Error al eliminar todas las series",
|
||||||
"deleted_media_successfully": "¡Otros medios eliminados con éxito!",
|
"deleted_media_successfully": "¡Otros medios eliminados con éxito!",
|
||||||
"failed_to_delete_media": "Error al eliminar otros medios",
|
"failed_to_delete_media": "Error al eliminar otros medios",
|
||||||
"download_deleted": "Descarga eliminada",
|
|
||||||
"download_cancelled": "Descarga cancelada",
|
"download_cancelled": "Descarga cancelada",
|
||||||
"could_not_delete_download": "No se pudo eliminar la descarga",
|
"could_not_delete_download": "No se pudo eliminar la descarga",
|
||||||
"download_paused": "Descarga pausada",
|
|
||||||
"could_not_pause_download": "No se pudo pausar la descarga",
|
|
||||||
"download_resumed": "Descarga rebatida",
|
|
||||||
"could_not_resume_download": "No se pudo reiniciar la descarga",
|
|
||||||
"download_completed": "Descarga completada",
|
"download_completed": "Descarga completada",
|
||||||
"download_failed": "Descarga fallida",
|
"download_failed": "Descarga fallida",
|
||||||
"download_failed_for_item": "Descarga fallida para {{item}} - {{error}}",
|
"download_failed_for_item": "Descarga fallida para {{item}} - {{error}}",
|
||||||
@@ -562,10 +475,7 @@
|
|||||||
"item_already_downloading": "{{item}} ya está descargando",
|
"item_already_downloading": "{{item}} ya está descargando",
|
||||||
"all_files_deleted": "Todas las descargas eliminadas correctamente",
|
"all_files_deleted": "Todas las descargas eliminadas correctamente",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} eliminado",
|
"files_deleted_by_type": "{{count}} {{type}} eliminado",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Todos los archivos, carpetas y trabajos eliminados con éxito",
|
|
||||||
"failed_to_clean_cache_directory": "Error al limpiar el directorio de caché",
|
|
||||||
"could_not_get_download_url_for_item": "No se pudo obtener la URL de descarga para {{itemName}}",
|
"could_not_get_download_url_for_item": "No se pudo obtener la URL de descarga para {{itemName}}",
|
||||||
"go_to_downloads": "Ir a descargas",
|
|
||||||
"file_deleted": "{{item}} eliminado"
|
"file_deleted": "{{item}} eliminado"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +493,13 @@
|
|||||||
"none": "Nada",
|
"none": "Nada",
|
||||||
"track": "Pista",
|
"track": "Pista",
|
||||||
"cancel": "Cancelar",
|
"cancel": "Cancelar",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Borrar",
|
"delete": "Borrar",
|
||||||
"ok": "Aceptar",
|
"ok": "Aceptar",
|
||||||
"remove": "Eliminar",
|
"remove": "Eliminar",
|
||||||
"next": "Siguiente",
|
|
||||||
"back": "Atrás",
|
"back": "Atrás",
|
||||||
"continue": "Continuar",
|
"continue": "Continuar",
|
||||||
"verifying": "Verificando...",
|
"verifying": "Verificando...",
|
||||||
"login": "Login",
|
"login": "Login"
|
||||||
"refresh": "Refresh"
|
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Buscar...",
|
"search": "Buscar...",
|
||||||
@@ -691,10 +598,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "No se pudo crear el Steam para Chromecast",
|
"could_not_create_stream_for_chromecast": "No se pudo crear el Steam para Chromecast",
|
||||||
"message_from_server": "Mensaje del servidor: {{message}}",
|
"message_from_server": "Mensaje del servidor: {{message}}",
|
||||||
"next_episode": "Siguiente episodio",
|
"next_episode": "Siguiente episodio",
|
||||||
"refresh_tracks": "Refrescar pistas",
|
|
||||||
"audio_tracks": "Pistas de audio:",
|
|
||||||
"playback_state": "Estado de la reproducción:",
|
|
||||||
"index": "Índice:",
|
|
||||||
"continue_watching": "Continuar viendo",
|
"continue_watching": "Continuar viendo",
|
||||||
"go_back": "Volver",
|
"go_back": "Volver",
|
||||||
"downloaded_file_title": "Ya tienes este archivo descargado",
|
"downloaded_file_title": "Ya tienes este archivo descargado",
|
||||||
@@ -761,7 +664,6 @@
|
|||||||
"show_more": "Mostrar más",
|
"show_more": "Mostrar más",
|
||||||
"show_less": "Mostrar menos",
|
"show_less": "Mostrar menos",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -888,13 +790,9 @@
|
|||||||
"playlists": "Listas de reproducción",
|
"playlists": "Listas de reproducción",
|
||||||
"tracks": "Canciones"
|
"tracks": "Canciones"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "Todas"
|
|
||||||
},
|
|
||||||
"recently_added": "Recientemente añadido",
|
"recently_added": "Recientemente añadido",
|
||||||
"recently_played": "Reproducidos Recientemente",
|
"recently_played": "Reproducidos Recientemente",
|
||||||
"frequently_played": "Reproducido con frecuencia",
|
"frequently_played": "Reproducido con frecuencia",
|
||||||
"explore": "Explorar",
|
|
||||||
"top_tracks": "Canciones Populares",
|
"top_tracks": "Canciones Populares",
|
||||||
"play": "Reproducir",
|
"play": "Reproducir",
|
||||||
"shuffle": "Aleatorio",
|
"shuffle": "Aleatorio",
|
||||||
@@ -1028,7 +926,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -100,7 +100,6 @@
|
|||||||
"continue_and_next_up": "Continue & Next Up",
|
"continue_and_next_up": "Continue & Next Up",
|
||||||
"recently_added_in": "Äskettäin lisätty {{libraryName}}-kirjastoon",
|
"recently_added_in": "Äskettäin lisätty {{libraryName}}-kirjastoon",
|
||||||
"suggested_movies": "Ehdotetut elokuvat",
|
"suggested_movies": "Ehdotetut elokuvat",
|
||||||
"suggested_episodes": "Ehdotetut jaksot",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Tervetuloa Streamyfiniin",
|
"welcome_to_streamyfin": "Tervetuloa Streamyfiniin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "Ilmainen ja avoimen lähdekoodin asiakas Jellyfinille.",
|
"a_free_and_open_source_client_for_jellyfin": "Ilmainen ja avoimen lähdekoodin asiakas Jellyfinille.",
|
||||||
@@ -261,43 +260,6 @@
|
|||||||
"None": "Ei mitään",
|
"None": "Ei mitään",
|
||||||
"OnlyForced": "Vain pakotettu"
|
"OnlyForced": "Vain pakotettu"
|
||||||
},
|
},
|
||||||
"text_color": "Tekstin väri",
|
|
||||||
"background_color": "Taustaväri",
|
|
||||||
"outline_color": "Ääriviivan väri",
|
|
||||||
"outline_thickness": "Ääriviivan paksuus",
|
|
||||||
"background_opacity": "Taustan läpinäkyvyys",
|
|
||||||
"outline_opacity": "Ääriviivan Läpinäkyvyys",
|
|
||||||
"bold_text": "Lihavoi teksti",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Musta",
|
|
||||||
"Gray": "Harmaa",
|
|
||||||
"Silver": "Hopea",
|
|
||||||
"White": "Valkoinen",
|
|
||||||
"Maroon": "Maroon",
|
|
||||||
"Red": "Punainen",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Keltainen",
|
|
||||||
"Olive": "Oliivit",
|
|
||||||
"Green": "Vihreä",
|
|
||||||
"Teal": "Sinappi",
|
|
||||||
"Lime": "Limea",
|
|
||||||
"Purple": "Violetti",
|
|
||||||
"Navy": "Laiva",
|
|
||||||
"Blue": "Sininen",
|
|
||||||
"Aqua": "Vesi"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Ei mitään",
|
|
||||||
"Thin": "Ohut",
|
|
||||||
"Normal": "Normaali",
|
|
||||||
"Thick": "Paksu"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +277,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video Player",
|
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Muut",
|
"other_title": "Muut",
|
||||||
"video_orientation": "Videon suunta",
|
"video_orientation": "Videon suunta",
|
||||||
@@ -351,13 +294,7 @@
|
|||||||
"UNKNOWN": "Tuntematon"
|
"UNKNOWN": "Tuntematon"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Turvallinen alue ohjaimissa",
|
"safe_area_in_controls": "Turvallinen alue ohjaimissa",
|
||||||
"video_player": "Videosoitin",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Kokeellinen + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Näytä mukautetut valikkolinkit",
|
"show_custom_menu_links": "Näytä mukautetut valikkolinkit",
|
||||||
"show_large_home_carousel": "Näytä suuri kotikaruselli (beta)",
|
|
||||||
"hide_libraries": "Piilota kirjastot",
|
"hide_libraries": "Piilota kirjastot",
|
||||||
"select_liraries_you_want_to_hide": "Valitse kirjastot, jotka haluat piilottaa Kirjasto-välilehdeltä ja etusivun osioista.",
|
"select_liraries_you_want_to_hide": "Valitse kirjastot, jotka haluat piilottaa Kirjasto-välilehdeltä ja etusivun osioista.",
|
||||||
"disable_haptic_feedback": "Poista haptinen palautteet käytöstä",
|
"disable_haptic_feedback": "Poista haptinen palautteet käytöstä",
|
||||||
@@ -367,9 +304,6 @@
|
|||||||
"max_auto_play_episode_count": "Automaattisten Toistojaksojen Maksimimäärä",
|
"max_auto_play_episode_count": "Automaattisten Toistojaksojen Maksimimäärä",
|
||||||
"disabled": "Pois Käytöstä"
|
"disabled": "Pois Käytöstä"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Lataukset"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +347,18 @@
|
|||||||
"read_more_about_marlin": "Lue lisää Marlinista.",
|
"read_more_about_marlin": "Lue lisää Marlinista.",
|
||||||
"save_button": "Tallenna",
|
"save_button": "Tallenna",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Tallennettu",
|
"saved": "Tallennettu"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +374,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +385,6 @@
|
|||||||
"delete_all_downloaded_files": "Poista kaikki ladatut tiedostot",
|
"delete_all_downloaded_files": "Poista kaikki ladatut tiedostot",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +394,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -481,8 +406,7 @@
|
|||||||
"export_logs": "Vie lokit",
|
"export_logs": "Vie lokit",
|
||||||
"click_for_more_info": "Napsauta lisätietoja varten",
|
"click_for_more_info": "Napsauta lisätietoja varten",
|
||||||
"level": "Taso",
|
"level": "Taso",
|
||||||
"no_logs_available": "Ei lokitietoja saatavilla",
|
"no_logs_available": "Ei lokitietoja saatavilla"
|
||||||
"delete_all_logs": "Poista kaikki lokit"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Kielet",
|
"title": "Kielet",
|
||||||
@@ -490,15 +414,12 @@
|
|||||||
"system": "Järjestelmä"
|
"system": "Järjestelmä"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Virhe tiedostojen poistamisessa",
|
"error_deleting_files": "Virhe tiedostojen poistamisessa"
|
||||||
"background_downloads_enabled": "Taustalataukset käytössä",
|
|
||||||
"background_downloads_disabled": "Taustalataukset pois käytöstä"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -518,10 +439,7 @@
|
|||||||
"downloads_title": "Lataukset",
|
"downloads_title": "Lataukset",
|
||||||
"tvseries": "TV-sarjat",
|
"tvseries": "TV-sarjat",
|
||||||
"movies": "Elokuvat",
|
"movies": "Elokuvat",
|
||||||
"queue": "Jonot",
|
|
||||||
"other_media": "Muu media",
|
"other_media": "Muu media",
|
||||||
"queue_hint": "Jonot ja lataukset menetetään sovelluksen uudelleenkäynnistyksen yhteydessä",
|
|
||||||
"no_items_in_queue": "Ei kohteita jonossa",
|
|
||||||
"no_downloaded_items": "Ei ladattuja kohteita",
|
"no_downloaded_items": "Ei ladattuja kohteita",
|
||||||
"delete_all_movies_button": "Poista kaikki elokuvat",
|
"delete_all_movies_button": "Poista kaikki elokuvat",
|
||||||
"delete_all_tvseries_button": "Poista kaikki TV-sarjat",
|
"delete_all_tvseries_button": "Poista kaikki TV-sarjat",
|
||||||
@@ -546,13 +464,8 @@
|
|||||||
"failed_to_delete_all_tvseries": "Kaikkien TV-sarjojen poistaminen epäonnistui",
|
"failed_to_delete_all_tvseries": "Kaikkien TV-sarjojen poistaminen epäonnistui",
|
||||||
"deleted_media_successfully": "Muu media poistettu onnistuneesti!",
|
"deleted_media_successfully": "Muu media poistettu onnistuneesti!",
|
||||||
"failed_to_delete_media": "Muiden medioiden poistaminen epäonnistui",
|
"failed_to_delete_media": "Muiden medioiden poistaminen epäonnistui",
|
||||||
"download_deleted": "Lataus Poistettu",
|
|
||||||
"download_cancelled": "Lataus peruutettu",
|
"download_cancelled": "Lataus peruutettu",
|
||||||
"could_not_delete_download": "Latausta Ei Voitu Poistaa",
|
"could_not_delete_download": "Latausta Ei Voitu Poistaa",
|
||||||
"download_paused": "Lataus Keskeytetty",
|
|
||||||
"could_not_pause_download": "Latausta Ei Voitu Keskeyttää",
|
|
||||||
"download_resumed": "Lataus Jatketaan",
|
|
||||||
"could_not_resume_download": "Latausta Ei Voitu Jatkaa.",
|
|
||||||
"download_completed": "Lataus valmis",
|
"download_completed": "Lataus valmis",
|
||||||
"download_failed": "Lataus epäonnistui",
|
"download_failed": "Lataus epäonnistui",
|
||||||
"download_failed_for_item": "Lataus epäonnistui kohteelle {{item}} - {{error}}",
|
"download_failed_for_item": "Lataus epäonnistui kohteelle {{item}} - {{error}}",
|
||||||
@@ -562,10 +475,7 @@
|
|||||||
"item_already_downloading": "{{item}} is already downloading",
|
"item_already_downloading": "{{item}} is already downloading",
|
||||||
"all_files_deleted": "Kaikki lataukset poistettu onnistuneesti",
|
"all_files_deleted": "Kaikki lataukset poistettu onnistuneesti",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} poistettu",
|
"files_deleted_by_type": "{{count}} {{type}} poistettu",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Kaikki tiedostot, kansiot ja tehtävät poistettu onnistuneesti",
|
|
||||||
"failed_to_clean_cache_directory": "Välimuistin hakemiston puhdistus epäonnistui",
|
|
||||||
"could_not_get_download_url_for_item": "Latauksen URL-osoitetta ei voitu ladata {{itemName}}",
|
"could_not_get_download_url_for_item": "Latauksen URL-osoitetta ei voitu ladata {{itemName}}",
|
||||||
"go_to_downloads": "Siirry latauksiin",
|
|
||||||
"file_deleted": "{{item}} poistettu"
|
"file_deleted": "{{item}} poistettu"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +493,13 @@
|
|||||||
"none": "Ei mitään",
|
"none": "Ei mitään",
|
||||||
"track": "Track",
|
"track": "Track",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login"
|
||||||
"refresh": "Refresh"
|
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Haku...",
|
"search": "Haku...",
|
||||||
@@ -691,10 +598,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Suoratoistoa ei voitu luoda Chromecastia varten",
|
"could_not_create_stream_for_chromecast": "Suoratoistoa ei voitu luoda Chromecastia varten",
|
||||||
"message_from_server": "Viesti palvelimelta: {{message}}",
|
"message_from_server": "Viesti palvelimelta: {{message}}",
|
||||||
"next_episode": "Seuraava Jakso",
|
"next_episode": "Seuraava Jakso",
|
||||||
"refresh_tracks": "Päivitä Kappaleet",
|
|
||||||
"audio_tracks": "Ääni Kappaleet:",
|
|
||||||
"playback_state": "Toiston Tila:",
|
|
||||||
"index": "Indeksi:",
|
|
||||||
"continue_watching": "Jatka katsomista",
|
"continue_watching": "Jatka katsomista",
|
||||||
"go_back": "Siirry Takaisin",
|
"go_back": "Siirry Takaisin",
|
||||||
"downloaded_file_title": "Tämä tiedosto on ladattuna",
|
"downloaded_file_title": "Tämä tiedosto on ladattuna",
|
||||||
@@ -761,7 +664,6 @@
|
|||||||
"show_more": "Näytä Lisää",
|
"show_more": "Näytä Lisää",
|
||||||
"show_less": "Näytä Vähemmän",
|
"show_less": "Näytä Vähemmän",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -888,13 +790,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +926,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -100,7 +100,6 @@
|
|||||||
"continue_and_next_up": "Continue & Next Up",
|
"continue_and_next_up": "Continue & Next Up",
|
||||||
"recently_added_in": "התווסף לאחרונה ב-{{libraryName}}",
|
"recently_added_in": "התווסף לאחרונה ב-{{libraryName}}",
|
||||||
"suggested_movies": "סרטים מוצעים",
|
"suggested_movies": "סרטים מוצעים",
|
||||||
"suggested_episodes": "פרקים מוצעים",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "ברוך הבא ל-Streamyfin",
|
"welcome_to_streamyfin": "ברוך הבא ל-Streamyfin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "קליינט חינמי ובקוד פתוח לשרתי Jellyfin.",
|
"a_free_and_open_source_client_for_jellyfin": "קליינט חינמי ובקוד פתוח לשרתי Jellyfin.",
|
||||||
@@ -261,43 +260,6 @@
|
|||||||
"None": "ללא",
|
"None": "ללא",
|
||||||
"OnlyForced": "רק כפוי"
|
"OnlyForced": "רק כפוי"
|
||||||
},
|
},
|
||||||
"text_color": "צבע הטקסט",
|
|
||||||
"background_color": "צבע רקע",
|
|
||||||
"outline_color": "צבע קו מתאר",
|
|
||||||
"outline_thickness": "עובי קו מתאר",
|
|
||||||
"background_opacity": "שקיפות רקע",
|
|
||||||
"outline_opacity": "אטימות קו מתאר",
|
|
||||||
"bold_text": "טקסט בולט",
|
|
||||||
"colors": {
|
|
||||||
"Black": "שחור",
|
|
||||||
"Gray": "אפור",
|
|
||||||
"Silver": "כסף",
|
|
||||||
"White": "לבן",
|
|
||||||
"Maroon": "חום ערמוני",
|
|
||||||
"Red": "אדום",
|
|
||||||
"Fuchsia": "פוקסיה",
|
|
||||||
"Yellow": "צהוב",
|
|
||||||
"Olive": "זית",
|
|
||||||
"Green": "ירוק",
|
|
||||||
"Teal": "תכלת",
|
|
||||||
"Lime": "ירוק ליים",
|
|
||||||
"Purple": "סגול",
|
|
||||||
"Navy": "כחול כהה",
|
|
||||||
"Blue": "כחול",
|
|
||||||
"Aqua": "כחול בהיר"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "ללא",
|
|
||||||
"Thin": "דק",
|
|
||||||
"Normal": "רגיל",
|
|
||||||
"Thick": "עבה"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +277,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "נגן וידאו",
|
|
||||||
"video_player": "נגן וידאו",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "אחר",
|
"other_title": "אחר",
|
||||||
"video_orientation": "כיוון וידיאו",
|
"video_orientation": "כיוון וידיאו",
|
||||||
@@ -351,13 +294,7 @@
|
|||||||
"UNKNOWN": "לא ידוע"
|
"UNKNOWN": "לא ידוע"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "איזור בטוח בפקדים",
|
"safe_area_in_controls": "איזור בטוח בפקדים",
|
||||||
"video_player": "נגן וידאו",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (ניסיוני + נגן בתוך נגן)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "הצג קישורים לתפריטים מותאמים אישית",
|
"show_custom_menu_links": "הצג קישורים לתפריטים מותאמים אישית",
|
||||||
"show_large_home_carousel": "הצג קרוסלה גדולה במסך הבית (בטא)",
|
|
||||||
"hide_libraries": "הסתר ספריות",
|
"hide_libraries": "הסתר ספריות",
|
||||||
"select_liraries_you_want_to_hide": "בחר את הספריות שתרצה להסתיר ממסך הספריות וגם ממסך הבית.",
|
"select_liraries_you_want_to_hide": "בחר את הספריות שתרצה להסתיר ממסך הספריות וגם ממסך הבית.",
|
||||||
"disable_haptic_feedback": "בטל משוב רטט",
|
"disable_haptic_feedback": "בטל משוב רטט",
|
||||||
@@ -367,9 +304,6 @@
|
|||||||
"max_auto_play_episode_count": "כמות פרקים מקסימלית לניגון אוטומטי",
|
"max_auto_play_episode_count": "כמות פרקים מקסימלית לניגון אוטומטי",
|
||||||
"disabled": "כבוי"
|
"disabled": "כבוי"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "הורדות"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "מוזיקה",
|
"title": "מוזיקה",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +347,18 @@
|
|||||||
"read_more_about_marlin": "קרא עוד על Marlin.",
|
"read_more_about_marlin": "קרא עוד על Marlin.",
|
||||||
"save_button": "שמור",
|
"save_button": "שמור",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "נשמר",
|
"saved": "נשמר"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +374,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +385,6 @@
|
|||||||
"delete_all_downloaded_files": "מחק את כל הקבצים שהורדו",
|
"delete_all_downloaded_files": "מחק את כל הקבצים שהורדו",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +394,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -481,8 +406,7 @@
|
|||||||
"export_logs": "ייצוא לוגים",
|
"export_logs": "ייצוא לוגים",
|
||||||
"click_for_more_info": "לחץ למידע נוסף",
|
"click_for_more_info": "לחץ למידע נוסף",
|
||||||
"level": "רמה",
|
"level": "רמה",
|
||||||
"no_logs_available": "אין לוגים זמינים",
|
"no_logs_available": "אין לוגים זמינים"
|
||||||
"delete_all_logs": "מחק את כל הלוגים"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "שפות",
|
"title": "שפות",
|
||||||
@@ -490,15 +414,12 @@
|
|||||||
"system": "מערכת"
|
"system": "מערכת"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "שגיאה במחיקת קבצים",
|
"error_deleting_files": "שגיאה במחיקת קבצים"
|
||||||
"background_downloads_enabled": "הורדה ברקע מופעלת",
|
|
||||||
"background_downloads_disabled": "הורדה ברקע כבויה"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -518,10 +439,7 @@
|
|||||||
"downloads_title": "הורדות",
|
"downloads_title": "הורדות",
|
||||||
"tvseries": "סדרות",
|
"tvseries": "סדרות",
|
||||||
"movies": "סרטים",
|
"movies": "סרטים",
|
||||||
"queue": "תוֹר",
|
|
||||||
"other_media": "תוכן אחר",
|
"other_media": "תוכן אחר",
|
||||||
"queue_hint": "התור וההורדות יאבדו בפתיחה מחדש של האפליקציה",
|
|
||||||
"no_items_in_queue": "אין פרטים בתור",
|
|
||||||
"no_downloaded_items": "אין פריטים שהורדו",
|
"no_downloaded_items": "אין פריטים שהורדו",
|
||||||
"delete_all_movies_button": "מחק את כל הסרטים",
|
"delete_all_movies_button": "מחק את כל הסרטים",
|
||||||
"delete_all_tvseries_button": "מחק את כל הסדרות",
|
"delete_all_tvseries_button": "מחק את כל הסדרות",
|
||||||
@@ -546,13 +464,8 @@
|
|||||||
"failed_to_delete_all_tvseries": "נכשל במחיקת כל הסדרות",
|
"failed_to_delete_all_tvseries": "נכשל במחיקת כל הסדרות",
|
||||||
"deleted_media_successfully": "כל שאר התוכן נמחק בהצלחה!",
|
"deleted_media_successfully": "כל שאר התוכן נמחק בהצלחה!",
|
||||||
"failed_to_delete_media": "נכשל במחיקת שאר התוכן",
|
"failed_to_delete_media": "נכשל במחיקת שאר התוכן",
|
||||||
"download_deleted": "ההורדה נמחקה",
|
|
||||||
"download_cancelled": "ההורדה בוטלה",
|
"download_cancelled": "ההורדה בוטלה",
|
||||||
"could_not_delete_download": "לא היה ניתן למחוק את ההורדה",
|
"could_not_delete_download": "לא היה ניתן למחוק את ההורדה",
|
||||||
"download_paused": "ההורדה נעצרה",
|
|
||||||
"could_not_pause_download": "לא היה ניתן לעצור את ההורדה",
|
|
||||||
"download_resumed": "ההורדה חודשה",
|
|
||||||
"could_not_resume_download": "לא היה ניתן לחדש את ההורדה",
|
|
||||||
"download_completed": "ההורדה הושלמה",
|
"download_completed": "ההורדה הושלמה",
|
||||||
"download_failed": "ההורדה נכשלה",
|
"download_failed": "ההורדה נכשלה",
|
||||||
"download_failed_for_item": "ההורדה נכשלה עבור {{item}} - {{error}}",
|
"download_failed_for_item": "ההורדה נכשלה עבור {{item}} - {{error}}",
|
||||||
@@ -562,10 +475,7 @@
|
|||||||
"item_already_downloading": "{{item}} כבר נמצא בהורדה",
|
"item_already_downloading": "{{item}} כבר נמצא בהורדה",
|
||||||
"all_files_deleted": "כל ההורדות נמחקו בהצלחה",
|
"all_files_deleted": "כל ההורדות נמחקו בהצלחה",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} נמחקו",
|
"files_deleted_by_type": "{{count}} {{type}} נמחקו",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "כל הקבצים, התיקיות והעבודות נמחקו בהצלחה",
|
|
||||||
"failed_to_clean_cache_directory": "נכשל בניסיון למחוק את תיקיית המטמון",
|
|
||||||
"could_not_get_download_url_for_item": "לא היה ניתן להשיג את קישור ההורדה של {{itemName}}",
|
"could_not_get_download_url_for_item": "לא היה ניתן להשיג את קישור ההורדה של {{itemName}}",
|
||||||
"go_to_downloads": "עבור להורדות",
|
|
||||||
"file_deleted": "{{item}} נמחק"
|
"file_deleted": "{{item}} נמחק"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +493,13 @@
|
|||||||
"none": "ללא",
|
"none": "ללא",
|
||||||
"track": "Track",
|
"track": "Track",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login"
|
||||||
"refresh": "Refresh"
|
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "חפש...",
|
"search": "חפש...",
|
||||||
@@ -691,10 +598,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "נכשל ביצירת זרם עבור Chromecast",
|
"could_not_create_stream_for_chromecast": "נכשל ביצירת זרם עבור Chromecast",
|
||||||
"message_from_server": "הודעה מהשרת: {{message}}",
|
"message_from_server": "הודעה מהשרת: {{message}}",
|
||||||
"next_episode": "הפרק הבא",
|
"next_episode": "הפרק הבא",
|
||||||
"refresh_tracks": "רענן רצועות",
|
|
||||||
"audio_tracks": "רצועות שמע:",
|
|
||||||
"playback_state": "מצב ניגון:",
|
|
||||||
"index": "מיקום:",
|
|
||||||
"continue_watching": "המשך לצפות",
|
"continue_watching": "המשך לצפות",
|
||||||
"go_back": "חזור",
|
"go_back": "חזור",
|
||||||
"downloaded_file_title": "You have this file downloaded",
|
"downloaded_file_title": "You have this file downloaded",
|
||||||
@@ -761,7 +664,6 @@
|
|||||||
"show_more": "הצג עוד",
|
"show_more": "הצג עוד",
|
||||||
"show_less": "הצג פחות",
|
"show_less": "הצג פחות",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -888,13 +790,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +926,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -100,7 +100,6 @@
|
|||||||
"continue_and_next_up": "Continue & Next Up",
|
"continue_and_next_up": "Continue & Next Up",
|
||||||
"recently_added_in": "Új a(z) {{libraryName}} könyvtárban",
|
"recently_added_in": "Új a(z) {{libraryName}} könyvtárban",
|
||||||
"suggested_movies": "Javasolt Filmek",
|
"suggested_movies": "Javasolt Filmek",
|
||||||
"suggested_episodes": "Javasolt Epizódok",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Üdvözöljük a Streamyfinben",
|
"welcome_to_streamyfin": "Üdvözöljük a Streamyfinben",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "Egy Ingyenes és Nyílt Forráskódú Jellyfin Kliens.",
|
"a_free_and_open_source_client_for_jellyfin": "Egy Ingyenes és Nyílt Forráskódú Jellyfin Kliens.",
|
||||||
@@ -261,43 +260,6 @@
|
|||||||
"None": "Nincs",
|
"None": "Nincs",
|
||||||
"OnlyForced": "Csak Kényszerített"
|
"OnlyForced": "Csak Kényszerített"
|
||||||
},
|
},
|
||||||
"text_color": "Szövegszín",
|
|
||||||
"background_color": "Háttérszín",
|
|
||||||
"outline_color": "Körvonal színe",
|
|
||||||
"outline_thickness": "Körvonal Vastagsága",
|
|
||||||
"background_opacity": "Háttér Áttetszőség",
|
|
||||||
"outline_opacity": "Körvonal Áttetszőség",
|
|
||||||
"bold_text": "Félkövér Szöveg",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Fekete",
|
|
||||||
"Gray": "Szürke",
|
|
||||||
"Silver": "Ezüst",
|
|
||||||
"White": "Fehér",
|
|
||||||
"Maroon": "Sötétvörös",
|
|
||||||
"Red": "Piros",
|
|
||||||
"Fuchsia": "Fukszia",
|
|
||||||
"Yellow": "Sárga",
|
|
||||||
"Olive": "Oliva",
|
|
||||||
"Green": "Zöld",
|
|
||||||
"Teal": "Türkiz",
|
|
||||||
"Lime": "Lime",
|
|
||||||
"Purple": "Lila",
|
|
||||||
"Navy": "Sötétkék",
|
|
||||||
"Blue": "Kék",
|
|
||||||
"Aqua": "Türkizkék"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Nincs",
|
|
||||||
"Thin": "Vékony",
|
|
||||||
"Normal": "Normál",
|
|
||||||
"Thick": "Vastag"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +277,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video Player",
|
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Egyéb",
|
"other_title": "Egyéb",
|
||||||
"video_orientation": "Videó Tájolás",
|
"video_orientation": "Videó Tájolás",
|
||||||
@@ -351,13 +294,7 @@
|
|||||||
"UNKNOWN": "Ismeretlen"
|
"UNKNOWN": "Ismeretlen"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Biztonsági Sáv a Vezérlőkben",
|
"safe_area_in_controls": "Biztonsági Sáv a Vezérlőkben",
|
||||||
"video_player": "Videólejátszó",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Kísérleti + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Egyéni Menülinkek Megjelenítése",
|
"show_custom_menu_links": "Egyéni Menülinkek Megjelenítése",
|
||||||
"show_large_home_carousel": "Show Large Home Carousel (beta)",
|
|
||||||
"hide_libraries": "Könyvtárak Elrejtése",
|
"hide_libraries": "Könyvtárak Elrejtése",
|
||||||
"select_liraries_you_want_to_hide": "Válaszd ki azokat a könyvtárakat, amelyeket el szeretnél rejteni a Könyvtár fülön és a kezdőlapon.",
|
"select_liraries_you_want_to_hide": "Válaszd ki azokat a könyvtárakat, amelyeket el szeretnél rejteni a Könyvtár fülön és a kezdőlapon.",
|
||||||
"disable_haptic_feedback": "Haptikus Visszajelzés Letiltása",
|
"disable_haptic_feedback": "Haptikus Visszajelzés Letiltása",
|
||||||
@@ -367,9 +304,6 @@
|
|||||||
"max_auto_play_episode_count": "Max. Auto. Epizódlejátszás",
|
"max_auto_play_episode_count": "Max. Auto. Epizódlejátszás",
|
||||||
"disabled": "Letiltva"
|
"disabled": "Letiltva"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Letöltések"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +347,18 @@
|
|||||||
"read_more_about_marlin": "Tudj Meg Többet a Marlinról",
|
"read_more_about_marlin": "Tudj Meg Többet a Marlinról",
|
||||||
"save_button": "Mentés",
|
"save_button": "Mentés",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Mentve",
|
"saved": "Mentve"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +374,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +385,6 @@
|
|||||||
"delete_all_downloaded_files": "Minden Letöltött Fájl Törlése",
|
"delete_all_downloaded_files": "Minden Letöltött Fájl Törlése",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +394,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -481,8 +406,7 @@
|
|||||||
"export_logs": "Naplók Exportálása",
|
"export_logs": "Naplók Exportálása",
|
||||||
"click_for_more_info": "Kattints a Részletekért",
|
"click_for_more_info": "Kattints a Részletekért",
|
||||||
"level": "Szint",
|
"level": "Szint",
|
||||||
"no_logs_available": "Nincsenek Naplók",
|
"no_logs_available": "Nincsenek Naplók"
|
||||||
"delete_all_logs": "Összes Napló Törlése"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Nyelvek",
|
"title": "Nyelvek",
|
||||||
@@ -490,15 +414,12 @@
|
|||||||
"system": "Rendszer"
|
"system": "Rendszer"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Hiba a Fájlok Törlésekor",
|
"error_deleting_files": "Hiba a Fájlok Törlésekor"
|
||||||
"background_downloads_enabled": "Background downloads enabled",
|
|
||||||
"background_downloads_disabled": "Background downloads disabled"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -518,10 +439,7 @@
|
|||||||
"downloads_title": "Letöltések",
|
"downloads_title": "Letöltések",
|
||||||
"tvseries": "Sorozatok",
|
"tvseries": "Sorozatok",
|
||||||
"movies": "Filmek",
|
"movies": "Filmek",
|
||||||
"queue": "Sor",
|
|
||||||
"other_media": "Other media",
|
"other_media": "Other media",
|
||||||
"queue_hint": "A sor és a letöltések az alkalmazás újraindításakor elvesznek",
|
|
||||||
"no_items_in_queue": "Nincs Elem a Sorban",
|
|
||||||
"no_downloaded_items": "Nincsenek Letöltött Elemek",
|
"no_downloaded_items": "Nincsenek Letöltött Elemek",
|
||||||
"delete_all_movies_button": "Összes Film Törlése",
|
"delete_all_movies_button": "Összes Film Törlése",
|
||||||
"delete_all_tvseries_button": "Összes Sorozat Törlése",
|
"delete_all_tvseries_button": "Összes Sorozat Törlése",
|
||||||
@@ -546,13 +464,8 @@
|
|||||||
"failed_to_delete_all_tvseries": "Nem Sikerült Törölni Az Összes Sorozatot",
|
"failed_to_delete_all_tvseries": "Nem Sikerült Törölni Az Összes Sorozatot",
|
||||||
"deleted_media_successfully": "Deleted other media Successfully!",
|
"deleted_media_successfully": "Deleted other media Successfully!",
|
||||||
"failed_to_delete_media": "Failed to Delete other media",
|
"failed_to_delete_media": "Failed to Delete other media",
|
||||||
"download_deleted": "Letöltés Törölve",
|
|
||||||
"download_cancelled": "Download Cancelled",
|
"download_cancelled": "Download Cancelled",
|
||||||
"could_not_delete_download": "Nem Sikerült Törölni a Letöltést",
|
"could_not_delete_download": "Nem Sikerült Törölni a Letöltést",
|
||||||
"download_paused": "Letöltés Szüneteltetve",
|
|
||||||
"could_not_pause_download": "Nem Sikerült Szüneteltetni a Letöltést",
|
|
||||||
"download_resumed": "Letöltés Folytatva",
|
|
||||||
"could_not_resume_download": "Nem Sikerült Folytatni a Letöltést",
|
|
||||||
"download_completed": "Letöltés Befejezve",
|
"download_completed": "Letöltés Befejezve",
|
||||||
"download_failed": "Download Failed",
|
"download_failed": "Download Failed",
|
||||||
"download_failed_for_item": "A(z) {{item}} letöltése sikertelen - {{error}}",
|
"download_failed_for_item": "A(z) {{item}} letöltése sikertelen - {{error}}",
|
||||||
@@ -562,10 +475,7 @@
|
|||||||
"item_already_downloading": "{{item}} is already downloading",
|
"item_already_downloading": "{{item}} is already downloading",
|
||||||
"all_files_deleted": "All Downloads Deleted Successfully",
|
"all_files_deleted": "All Downloads Deleted Successfully",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Minden fájl, mappa és feladat sikeresen törölve",
|
|
||||||
"failed_to_clean_cache_directory": "Failed to clean cache directory",
|
|
||||||
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
|
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
|
||||||
"go_to_downloads": "Ugrás a Letöltésekhez",
|
|
||||||
"file_deleted": "{{item}} deleted"
|
"file_deleted": "{{item}} deleted"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +493,13 @@
|
|||||||
"none": "None",
|
"none": "None",
|
||||||
"track": "Track",
|
"track": "Track",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login"
|
||||||
"refresh": "Refresh"
|
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Keresés...",
|
"search": "Keresés...",
|
||||||
@@ -691,10 +598,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "A Chromecast stream létrehozása sikertelen volt",
|
"could_not_create_stream_for_chromecast": "A Chromecast stream létrehozása sikertelen volt",
|
||||||
"message_from_server": "Üzenet a szervertől: {{message}}",
|
"message_from_server": "Üzenet a szervertől: {{message}}",
|
||||||
"next_episode": "Következő Epizód",
|
"next_episode": "Következő Epizód",
|
||||||
"refresh_tracks": "Sávok Frissítése",
|
|
||||||
"audio_tracks": "Hangsávok:",
|
|
||||||
"playback_state": "Lejátszás Állapota:",
|
|
||||||
"index": "Index:",
|
|
||||||
"continue_watching": "Folytatás",
|
"continue_watching": "Folytatás",
|
||||||
"go_back": "Vissza",
|
"go_back": "Vissza",
|
||||||
"downloaded_file_title": "You have this file downloaded",
|
"downloaded_file_title": "You have this file downloaded",
|
||||||
@@ -761,7 +664,6 @@
|
|||||||
"show_more": "Több Megjelenítése",
|
"show_more": "Több Megjelenítése",
|
||||||
"show_less": "Kevesebb Megjelenítése",
|
"show_less": "Kevesebb Megjelenítése",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -888,13 +790,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +926,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -100,7 +100,6 @@
|
|||||||
"continue_and_next_up": "Continue & Next Up",
|
"continue_and_next_up": "Continue & Next Up",
|
||||||
"recently_added_in": "Aggiunti di recente a {{libraryName}}",
|
"recently_added_in": "Aggiunti di recente a {{libraryName}}",
|
||||||
"suggested_movies": "Film consigliati",
|
"suggested_movies": "Film consigliati",
|
||||||
"suggested_episodes": "Episodi consigliati",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Benvenuto a Streamyfin",
|
"welcome_to_streamyfin": "Benvenuto a Streamyfin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "Un client gratuito e open-source per Jellyfin.",
|
"a_free_and_open_source_client_for_jellyfin": "Un client gratuito e open-source per Jellyfin.",
|
||||||
@@ -261,43 +260,6 @@
|
|||||||
"None": "Nessuno",
|
"None": "Nessuno",
|
||||||
"OnlyForced": "Solo forzati"
|
"OnlyForced": "Solo forzati"
|
||||||
},
|
},
|
||||||
"text_color": "Colore Del Testo",
|
|
||||||
"background_color": "Colore Di Sfondo",
|
|
||||||
"outline_color": "Colore Contorno",
|
|
||||||
"outline_thickness": "Spessore Contorno",
|
|
||||||
"background_opacity": "Opacità Dello Sfondo",
|
|
||||||
"outline_opacity": "Opacità Contorno",
|
|
||||||
"bold_text": "Bold Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Nero",
|
|
||||||
"Gray": "Grigio",
|
|
||||||
"Silver": "Argento",
|
|
||||||
"White": "Bianco",
|
|
||||||
"Maroon": "Maroon",
|
|
||||||
"Red": "Rosso",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Giallo",
|
|
||||||
"Olive": "Olive",
|
|
||||||
"Green": "Verde",
|
|
||||||
"Teal": "Teal",
|
|
||||||
"Lime": "Lime",
|
|
||||||
"Purple": "Viola",
|
|
||||||
"Navy": "Marina",
|
|
||||||
"Blue": "Blu",
|
|
||||||
"Aqua": "Aqua"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Nessuno",
|
|
||||||
"Thin": "Sottile",
|
|
||||||
"Normal": "Normale",
|
|
||||||
"Thick": "Spessa"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +277,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video Player",
|
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Altro",
|
"other_title": "Altro",
|
||||||
"video_orientation": "Orientamento del video",
|
"video_orientation": "Orientamento del video",
|
||||||
@@ -351,13 +294,7 @@
|
|||||||
"UNKNOWN": "Sconosciuto"
|
"UNKNOWN": "Sconosciuto"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Area sicura per i controlli",
|
"safe_area_in_controls": "Area sicura per i controlli",
|
||||||
"video_player": "Video player",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Sperimentale + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Mostra i link del menu personalizzato",
|
"show_custom_menu_links": "Mostra i link del menu personalizzato",
|
||||||
"show_large_home_carousel": "Mostra Carosello Grande nella Home (beta)",
|
|
||||||
"hide_libraries": "Nascondi Librerie",
|
"hide_libraries": "Nascondi Librerie",
|
||||||
"select_liraries_you_want_to_hide": "Selezionate le librerie che volete nascondere dalla scheda Libreria e dalle sezioni della pagina iniziale.",
|
"select_liraries_you_want_to_hide": "Selezionate le librerie che volete nascondere dalla scheda Libreria e dalle sezioni della pagina iniziale.",
|
||||||
"disable_haptic_feedback": "Disabilita il feedback aptico",
|
"disable_haptic_feedback": "Disabilita il feedback aptico",
|
||||||
@@ -367,9 +304,6 @@
|
|||||||
"max_auto_play_episode_count": "Numero Massimo Di Episodi Riproduzione Automatica",
|
"max_auto_play_episode_count": "Numero Massimo Di Episodi Riproduzione Automatica",
|
||||||
"disabled": "Disabilitato"
|
"disabled": "Disabilitato"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Scaricamento"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +347,18 @@
|
|||||||
"read_more_about_marlin": "Leggi di più su Marlin.",
|
"read_more_about_marlin": "Leggi di più su Marlin.",
|
||||||
"save_button": "Salva",
|
"save_button": "Salva",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Salvato",
|
"saved": "Salvato"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +374,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +385,6 @@
|
|||||||
"delete_all_downloaded_files": "Cancella Tutti i File Scaricati",
|
"delete_all_downloaded_files": "Cancella Tutti i File Scaricati",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +394,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -481,8 +406,7 @@
|
|||||||
"export_logs": "Export logs",
|
"export_logs": "Export logs",
|
||||||
"click_for_more_info": "Click for more info",
|
"click_for_more_info": "Click for more info",
|
||||||
"level": "Livello",
|
"level": "Livello",
|
||||||
"no_logs_available": "Nessun log disponibile",
|
"no_logs_available": "Nessun log disponibile"
|
||||||
"delete_all_logs": "Cancella tutti i log"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Lingue",
|
"title": "Lingue",
|
||||||
@@ -490,15 +414,12 @@
|
|||||||
"system": "Sistema"
|
"system": "Sistema"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Errore nella cancellazione dei file",
|
"error_deleting_files": "Errore nella cancellazione dei file"
|
||||||
"background_downloads_enabled": "Scaricamento in background abilitato",
|
|
||||||
"background_downloads_disabled": "Scaricamento in background disabilitato"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -518,10 +439,7 @@
|
|||||||
"downloads_title": "Scaricati",
|
"downloads_title": "Scaricati",
|
||||||
"tvseries": "Serie TV",
|
"tvseries": "Serie TV",
|
||||||
"movies": "Film",
|
"movies": "Film",
|
||||||
"queue": "Coda",
|
|
||||||
"other_media": "Altri supporti",
|
"other_media": "Altri supporti",
|
||||||
"queue_hint": "La coda e gli elementi scaricati saranno persi con il riavvio dell'app",
|
|
||||||
"no_items_in_queue": "Nessun elemento in coda",
|
|
||||||
"no_downloaded_items": "Nessun elemento scaricato",
|
"no_downloaded_items": "Nessun elemento scaricato",
|
||||||
"delete_all_movies_button": "Cancella tutti i film",
|
"delete_all_movies_button": "Cancella tutti i film",
|
||||||
"delete_all_tvseries_button": "Cancella tutte le serie TV",
|
"delete_all_tvseries_button": "Cancella tutte le serie TV",
|
||||||
@@ -546,13 +464,8 @@
|
|||||||
"failed_to_delete_all_tvseries": "Impossibile eliminare tutte le serie TV",
|
"failed_to_delete_all_tvseries": "Impossibile eliminare tutte le serie TV",
|
||||||
"deleted_media_successfully": "Eliminato altri supporti con successo!",
|
"deleted_media_successfully": "Eliminato altri supporti con successo!",
|
||||||
"failed_to_delete_media": "Impossibile eliminare altri media",
|
"failed_to_delete_media": "Impossibile eliminare altri media",
|
||||||
"download_deleted": "Download Eliminato",
|
|
||||||
"download_cancelled": "Scaricamento annullato",
|
"download_cancelled": "Scaricamento annullato",
|
||||||
"could_not_delete_download": "Impossibile Eliminare Il Download",
|
"could_not_delete_download": "Impossibile Eliminare Il Download",
|
||||||
"download_paused": "Download In Pausa",
|
|
||||||
"could_not_pause_download": "Impossibile Sbloccare Il Download",
|
|
||||||
"download_resumed": "Download Ripreso",
|
|
||||||
"could_not_resume_download": "Impossibile Riprendere Il Download",
|
|
||||||
"download_completed": "Scaricamento completato",
|
"download_completed": "Scaricamento completato",
|
||||||
"download_failed": "Scaricamento non riuscito",
|
"download_failed": "Scaricamento non riuscito",
|
||||||
"download_failed_for_item": "Scaricamento fallito per {{item}} - {{error}}",
|
"download_failed_for_item": "Scaricamento fallito per {{item}} - {{error}}",
|
||||||
@@ -562,10 +475,7 @@
|
|||||||
"item_already_downloading": "{{item}} è già in download",
|
"item_already_downloading": "{{item}} è già in download",
|
||||||
"all_files_deleted": "Tutti i Download Eliminati con Successo",
|
"all_files_deleted": "Tutti i Download Eliminati con Successo",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} cancellati",
|
"files_deleted_by_type": "{{count}} {{type}} cancellati",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Tutti i file, le cartelle e i processi sono stati eliminati con successo.",
|
|
||||||
"failed_to_clean_cache_directory": "Pulizia della directory della cache non riuscita",
|
|
||||||
"could_not_get_download_url_for_item": "Impossibile ottenere l'URL di download per {{itemName}}",
|
"could_not_get_download_url_for_item": "Impossibile ottenere l'URL di download per {{itemName}}",
|
||||||
"go_to_downloads": "Vai agli elementi scaricati",
|
|
||||||
"file_deleted": "{{item}} cancellato"
|
"file_deleted": "{{item}} cancellato"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +493,13 @@
|
|||||||
"none": "Nulla",
|
"none": "Nulla",
|
||||||
"track": "Traccia",
|
"track": "Traccia",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login"
|
||||||
"refresh": "Refresh"
|
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Cerca...",
|
"search": "Cerca...",
|
||||||
@@ -691,10 +598,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Impossibile creare uno stream per Chromecast",
|
"could_not_create_stream_for_chromecast": "Impossibile creare uno stream per Chromecast",
|
||||||
"message_from_server": "Messaggio dal server",
|
"message_from_server": "Messaggio dal server",
|
||||||
"next_episode": "Prossimo Episodio",
|
"next_episode": "Prossimo Episodio",
|
||||||
"refresh_tracks": "Aggiorna tracce",
|
|
||||||
"audio_tracks": "Tracce audio:",
|
|
||||||
"playback_state": "Stato della riproduzione:",
|
|
||||||
"index": "Indice:",
|
|
||||||
"continue_watching": "Continua a guardare",
|
"continue_watching": "Continua a guardare",
|
||||||
"go_back": "Indietro",
|
"go_back": "Indietro",
|
||||||
"downloaded_file_title": "You have this file downloaded",
|
"downloaded_file_title": "You have this file downloaded",
|
||||||
@@ -761,7 +664,6 @@
|
|||||||
"show_more": "Mostra di più",
|
"show_more": "Mostra di più",
|
||||||
"show_less": "Mostra di meno",
|
"show_less": "Mostra di meno",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -888,13 +790,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +926,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -100,7 +100,6 @@
|
|||||||
"continue_and_next_up": "Continue & Next Up",
|
"continue_and_next_up": "Continue & Next Up",
|
||||||
"recently_added_in": "{{libraryName}}に最近追加された",
|
"recently_added_in": "{{libraryName}}に最近追加された",
|
||||||
"suggested_movies": "おすすめ映画",
|
"suggested_movies": "おすすめ映画",
|
||||||
"suggested_episodes": "おすすめエピソード",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Streamyfinへようこそ",
|
"welcome_to_streamyfin": "Streamyfinへようこそ",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "Jellyfinのためのフリーでオープンソースのクライアント。",
|
"a_free_and_open_source_client_for_jellyfin": "Jellyfinのためのフリーでオープンソースのクライアント。",
|
||||||
@@ -261,43 +260,6 @@
|
|||||||
"None": "なし",
|
"None": "なし",
|
||||||
"OnlyForced": "強制のみ"
|
"OnlyForced": "強制のみ"
|
||||||
},
|
},
|
||||||
"text_color": "テキストの色",
|
|
||||||
"background_color": "背景色",
|
|
||||||
"outline_color": "アウトラインの色",
|
|
||||||
"outline_thickness": "概要 厚さ",
|
|
||||||
"background_opacity": "背景の透明度",
|
|
||||||
"outline_opacity": "アウトラインの透明度",
|
|
||||||
"bold_text": "Bold Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "ブラック",
|
|
||||||
"Gray": "グレー",
|
|
||||||
"Silver": "シルバー",
|
|
||||||
"White": "白",
|
|
||||||
"Maroon": "Maroon",
|
|
||||||
"Red": "赤",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "黄色",
|
|
||||||
"Olive": "オリーブ",
|
|
||||||
"Green": "緑",
|
|
||||||
"Teal": "ティール",
|
|
||||||
"Lime": "黄緑",
|
|
||||||
"Purple": "パープル",
|
|
||||||
"Navy": "海軍format@@0",
|
|
||||||
"Blue": "青",
|
|
||||||
"Aqua": "Aqua"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "なし",
|
|
||||||
"Thin": "細いです",
|
|
||||||
"Normal": "標準",
|
|
||||||
"Thick": "濃厚な"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +277,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video Player",
|
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "その他",
|
"other_title": "その他",
|
||||||
"video_orientation": "動画の向き",
|
"video_orientation": "動画の向き",
|
||||||
@@ -351,13 +294,7 @@
|
|||||||
"UNKNOWN": "不明"
|
"UNKNOWN": "不明"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "コントロールの安全エリア",
|
"safe_area_in_controls": "コントロールの安全エリア",
|
||||||
"video_player": "Video player",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Experimental + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "カスタムメニューのリンクを表示",
|
"show_custom_menu_links": "カスタムメニューのリンクを表示",
|
||||||
"show_large_home_carousel": "大きなヒーロー(Beta)",
|
|
||||||
"hide_libraries": "ライブラリを非表示",
|
"hide_libraries": "ライブラリを非表示",
|
||||||
"select_liraries_you_want_to_hide": "ライブラリタブとホームページセクションから非表示にするライブラリを選択します。",
|
"select_liraries_you_want_to_hide": "ライブラリタブとホームページセクションから非表示にするライブラリを選択します。",
|
||||||
"disable_haptic_feedback": "触覚フィードバックを無効にする",
|
"disable_haptic_feedback": "触覚フィードバックを無効にする",
|
||||||
@@ -367,9 +304,6 @@
|
|||||||
"max_auto_play_episode_count": "自動再生エピソードの最大数",
|
"max_auto_play_episode_count": "自動再生エピソードの最大数",
|
||||||
"disabled": "無効"
|
"disabled": "無効"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "ダウンロード"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +347,18 @@
|
|||||||
"read_more_about_marlin": "Marlinについて詳しく読む。",
|
"read_more_about_marlin": "Marlinについて詳しく読む。",
|
||||||
"save_button": "保存",
|
"save_button": "保存",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "保存しました",
|
"saved": "保存しました"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +374,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +385,6 @@
|
|||||||
"delete_all_downloaded_files": "すべてのダウンロードファイルを削除",
|
"delete_all_downloaded_files": "すべてのダウンロードファイルを削除",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +394,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -481,8 +406,7 @@
|
|||||||
"export_logs": "Export logs",
|
"export_logs": "Export logs",
|
||||||
"click_for_more_info": "Click for more info",
|
"click_for_more_info": "Click for more info",
|
||||||
"level": "レベル",
|
"level": "レベル",
|
||||||
"no_logs_available": "ログがありません",
|
"no_logs_available": "ログがありません"
|
||||||
"delete_all_logs": "すべてのログを削除"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "言語",
|
"title": "言語",
|
||||||
@@ -490,15 +414,12 @@
|
|||||||
"system": "システム"
|
"system": "システム"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "ファイルの削除エラー",
|
"error_deleting_files": "ファイルの削除エラー"
|
||||||
"background_downloads_enabled": "バックグラウンドでのダウンロードは有効です",
|
|
||||||
"background_downloads_disabled": "バックグラウンドでのダウンロードは無効です"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -518,10 +439,7 @@
|
|||||||
"downloads_title": "ダウンロード",
|
"downloads_title": "ダウンロード",
|
||||||
"tvseries": "TVシリーズ",
|
"tvseries": "TVシリーズ",
|
||||||
"movies": "映画",
|
"movies": "映画",
|
||||||
"queue": "キュー",
|
|
||||||
"other_media": "その他のメディア",
|
"other_media": "その他のメディア",
|
||||||
"queue_hint": "アプリを再起動するとキューとダウンロードは失われます",
|
|
||||||
"no_items_in_queue": "キューにアイテムがありません",
|
|
||||||
"no_downloaded_items": "ダウンロードしたアイテムはありません",
|
"no_downloaded_items": "ダウンロードしたアイテムはありません",
|
||||||
"delete_all_movies_button": "すべての映画を削除",
|
"delete_all_movies_button": "すべての映画を削除",
|
||||||
"delete_all_tvseries_button": "すべてのシリーズを削除",
|
"delete_all_tvseries_button": "すべてのシリーズを削除",
|
||||||
@@ -546,13 +464,8 @@
|
|||||||
"failed_to_delete_all_tvseries": "すべてのシリーズを削除できませんでした",
|
"failed_to_delete_all_tvseries": "すべてのシリーズを削除できませんでした",
|
||||||
"deleted_media_successfully": "他のメディアを削除しました!",
|
"deleted_media_successfully": "他のメディアを削除しました!",
|
||||||
"failed_to_delete_media": "他のメディアの削除に失敗しました",
|
"failed_to_delete_media": "他のメディアの削除に失敗しました",
|
||||||
"download_deleted": "ダウンロードが削除されました",
|
|
||||||
"download_cancelled": "ダウンロードをキャンセルしました",
|
"download_cancelled": "ダウンロードをキャンセルしました",
|
||||||
"could_not_delete_download": "ダウンロードを削除できませんでした",
|
"could_not_delete_download": "ダウンロードを削除できませんでした",
|
||||||
"download_paused": "ダウンロードを一時停止しました",
|
|
||||||
"could_not_pause_download": "ダウンロードを一時停止できませんでした",
|
|
||||||
"download_resumed": "ダウンロード再開",
|
|
||||||
"could_not_resume_download": "ダウンロードを再開できませんでした",
|
|
||||||
"download_completed": "ダウンロードが完了しました",
|
"download_completed": "ダウンロードが完了しました",
|
||||||
"download_failed": "ダウンロードに失敗しました",
|
"download_failed": "ダウンロードに失敗しました",
|
||||||
"download_failed_for_item": "{{item}}のダウンロードに失敗しました - {{error}}",
|
"download_failed_for_item": "{{item}}のダウンロードに失敗しました - {{error}}",
|
||||||
@@ -562,10 +475,7 @@
|
|||||||
"item_already_downloading": "{{item}} is already downloading",
|
"item_already_downloading": "{{item}} is already downloading",
|
||||||
"all_files_deleted": "All Downloads Deleted Successfully",
|
"all_files_deleted": "All Downloads Deleted Successfully",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "すべてのファイル、フォルダ、ジョブが正常に削除されました",
|
|
||||||
"failed_to_clean_cache_directory": "キャッシュディレクトリのクリーンアップに失敗しました",
|
|
||||||
"could_not_get_download_url_for_item": "{{itemName}} のダウンロードURLを取得できませんでした",
|
"could_not_get_download_url_for_item": "{{itemName}} のダウンロードURLを取得できませんでした",
|
||||||
"go_to_downloads": "ダウンロードに移動",
|
|
||||||
"file_deleted": "{{item}} deleted"
|
"file_deleted": "{{item}} deleted"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +493,13 @@
|
|||||||
"none": "None",
|
"none": "None",
|
||||||
"track": "Track",
|
"track": "Track",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login"
|
||||||
"refresh": "Refresh"
|
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "検索...",
|
"search": "検索...",
|
||||||
@@ -691,10 +598,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Chromecastのストリームを作成できませんでした",
|
"could_not_create_stream_for_chromecast": "Chromecastのストリームを作成できませんでした",
|
||||||
"message_from_server": "サーバーからのメッセージ",
|
"message_from_server": "サーバーからのメッセージ",
|
||||||
"next_episode": "次のエピソード",
|
"next_episode": "次のエピソード",
|
||||||
"refresh_tracks": "トラックを更新",
|
|
||||||
"audio_tracks": "音声トラック:",
|
|
||||||
"playback_state": "再生状態:",
|
|
||||||
"index": "インデックス:",
|
|
||||||
"continue_watching": "視聴を続ける",
|
"continue_watching": "視聴を続ける",
|
||||||
"go_back": "戻る",
|
"go_back": "戻る",
|
||||||
"downloaded_file_title": "You have this file downloaded",
|
"downloaded_file_title": "You have this file downloaded",
|
||||||
@@ -761,7 +664,6 @@
|
|||||||
"show_more": "もっと見る",
|
"show_more": "もっと見る",
|
||||||
"show_less": "少なく表示",
|
"show_less": "少なく表示",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -888,13 +790,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +926,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -100,7 +100,6 @@
|
|||||||
"continue_and_next_up": "이어서 보기 & 다음 시청",
|
"continue_and_next_up": "이어서 보기 & 다음 시청",
|
||||||
"recently_added_in": "최근에 추가된 {{libraryName}}",
|
"recently_added_in": "최근에 추가된 {{libraryName}}",
|
||||||
"suggested_movies": "추천 영화",
|
"suggested_movies": "추천 영화",
|
||||||
"suggested_episodes": "추천 에피소드",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "스트리미핀에 오신 것을 환영합니다",
|
"welcome_to_streamyfin": "스트리미핀에 오신 것을 환영합니다",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "젤리핀을 위한 무료 오픈소스 클라이언트입니다.",
|
"a_free_and_open_source_client_for_jellyfin": "젤리핀을 위한 무료 오픈소스 클라이언트입니다.",
|
||||||
@@ -261,43 +260,6 @@
|
|||||||
"None": "None",
|
"None": "None",
|
||||||
"OnlyForced": "OnlyForced"
|
"OnlyForced": "OnlyForced"
|
||||||
},
|
},
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"bold_text": "Bold Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "검정색",
|
|
||||||
"Gray": "회색",
|
|
||||||
"Silver": "은색",
|
|
||||||
"White": "흰색",
|
|
||||||
"Maroon": "밤색",
|
|
||||||
"Red": "빨간색",
|
|
||||||
"Fuchsia": "분홍색",
|
|
||||||
"Yellow": "노란색",
|
|
||||||
"Olive": "올리브 색",
|
|
||||||
"Green": "녹색",
|
|
||||||
"Teal": "청록색",
|
|
||||||
"Lime": "라임색",
|
|
||||||
"Purple": "보라색",
|
|
||||||
"Navy": "남색",
|
|
||||||
"Blue": "파란색",
|
|
||||||
"Aqua": "아쿠아색"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "없음",
|
|
||||||
"Thin": "얇게",
|
|
||||||
"Normal": "보통",
|
|
||||||
"Thick": "굵게"
|
|
||||||
},
|
|
||||||
"subtitle_color": "자막 색상",
|
|
||||||
"subtitle_background_color": "배경 색상",
|
|
||||||
"subtitle_font": "자막 폰트",
|
|
||||||
"ksplayer_title": "KSPlayer 설정",
|
|
||||||
"hardware_decode": "하드웨어 디코딩",
|
|
||||||
"hardware_decode_description": "비디오 디코딩에 하드웨어 가속을 사용하십시오. 재생 문제가 발생하는 경우 비활성화하십시오.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +277,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC 자막 설정",
|
|
||||||
"hint": "VLC 플레이어의 자막 표시 방식을 설정하세요. 변경 사항은 다음 재생 시 적용됩니다.",
|
|
||||||
"text_color": "글자색",
|
|
||||||
"background_color": "배경 색상",
|
|
||||||
"background_opacity": "배경 투명도",
|
|
||||||
"outline_color": "외곽선 색상",
|
|
||||||
"outline_opacity": "외곽선 투명도",
|
|
||||||
"outline_thickness": "외곽선 굵기",
|
|
||||||
"bold": "굵은 글씨",
|
|
||||||
"margin": "아래쪽 여백"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "비디오 플레이어",
|
|
||||||
"video_player": "비디오 플레이어",
|
|
||||||
"video_player_description": "iOS 사용자는 비디오 플레이어를 선택하세요.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Other",
|
"other_title": "Other",
|
||||||
"video_orientation": "Video Orientation",
|
"video_orientation": "Video Orientation",
|
||||||
@@ -351,13 +294,7 @@
|
|||||||
"UNKNOWN": "Unknown"
|
"UNKNOWN": "Unknown"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "컨트롤 안전 영역",
|
"safe_area_in_controls": "컨트롤 안전 영역",
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Experimental + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "사용자 지정 메뉴 링크 표시",
|
"show_custom_menu_links": "사용자 지정 메뉴 링크 표시",
|
||||||
"show_large_home_carousel": "대형 홈 슬라이드 배너 표시 (베타)",
|
|
||||||
"hide_libraries": "라이브러리 숨기기",
|
"hide_libraries": "라이브러리 숨기기",
|
||||||
"select_liraries_you_want_to_hide": "Select the libraries you want to hide from the Library tab and home page sections.",
|
"select_liraries_you_want_to_hide": "Select the libraries you want to hide from the Library tab and home page sections.",
|
||||||
"disable_haptic_feedback": "Disable Haptic Feedback",
|
"disable_haptic_feedback": "Disable Haptic Feedback",
|
||||||
@@ -367,9 +304,6 @@
|
|||||||
"max_auto_play_episode_count": "Max Auto Play Episode Count",
|
"max_auto_play_episode_count": "Max Auto Play Episode Count",
|
||||||
"disabled": "Disabled"
|
"disabled": "Disabled"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Downloads"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +347,18 @@
|
|||||||
"read_more_about_marlin": "Read More About Marlin.",
|
"read_more_about_marlin": "Read More About Marlin.",
|
||||||
"save_button": "Save",
|
"save_button": "Save",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Saved",
|
"saved": "Saved"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "시리즈 추천",
|
"enable_series_recommendations": "시리즈 추천",
|
||||||
"enable_promoted_watchlists": "추천 관심 목록",
|
"enable_promoted_watchlists": "추천 관심 목록",
|
||||||
@@ -445,8 +374,7 @@
|
|||||||
"refresh_from_server": "서버에서 설정 새로고침"
|
"refresh_from_server": "서버에서 설정 새로고침"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "관심 목록 통합 기능 활성화",
|
"watchlist_enabler": "관심 목록 통합 기능 활성화"
|
||||||
"watchlist_button": "관심 목록 연동 켜기/끄기"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +385,6 @@
|
|||||||
"delete_all_downloaded_files": "Delete All Downloaded Files",
|
"delete_all_downloaded_files": "Delete All Downloaded Files",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "음악 캐시가 삭제되었습니다",
|
"music_cache_cleared": "음악 캐시가 삭제되었습니다",
|
||||||
@@ -467,8 +394,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -481,8 +406,7 @@
|
|||||||
"export_logs": "Export Logs",
|
"export_logs": "Export Logs",
|
||||||
"click_for_more_info": "Click for More Info",
|
"click_for_more_info": "Click for More Info",
|
||||||
"level": "Level",
|
"level": "Level",
|
||||||
"no_logs_available": "No Logs Available",
|
"no_logs_available": "No Logs Available"
|
||||||
"delete_all_logs": "Delete All Logs"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Languages",
|
"title": "Languages",
|
||||||
@@ -490,15 +414,12 @@
|
|||||||
"system": "System"
|
"system": "System"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Error Deleting Files",
|
"error_deleting_files": "Error Deleting Files"
|
||||||
"background_downloads_enabled": "Background downloads enabled",
|
|
||||||
"background_downloads_disabled": "Background downloads disabled"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -518,10 +439,7 @@
|
|||||||
"downloads_title": "Downloads",
|
"downloads_title": "Downloads",
|
||||||
"tvseries": "TV-Series",
|
"tvseries": "TV-Series",
|
||||||
"movies": "Movies",
|
"movies": "Movies",
|
||||||
"queue": "Queue",
|
|
||||||
"other_media": "Other media",
|
"other_media": "Other media",
|
||||||
"queue_hint": "Queue and downloads will be lost on app restart",
|
|
||||||
"no_items_in_queue": "No Items in Queue",
|
|
||||||
"no_downloaded_items": "No Downloaded Items",
|
"no_downloaded_items": "No Downloaded Items",
|
||||||
"delete_all_movies_button": "Delete All Movies",
|
"delete_all_movies_button": "Delete All Movies",
|
||||||
"delete_all_tvseries_button": "Delete All TV-Series",
|
"delete_all_tvseries_button": "Delete All TV-Series",
|
||||||
@@ -546,13 +464,8 @@
|
|||||||
"failed_to_delete_all_tvseries": "Failed to Delete All TV-Series",
|
"failed_to_delete_all_tvseries": "Failed to Delete All TV-Series",
|
||||||
"deleted_media_successfully": "Deleted other media Successfully!",
|
"deleted_media_successfully": "Deleted other media Successfully!",
|
||||||
"failed_to_delete_media": "Failed to Delete other media",
|
"failed_to_delete_media": "Failed to Delete other media",
|
||||||
"download_deleted": "Download Deleted",
|
|
||||||
"download_cancelled": "Download Cancelled",
|
"download_cancelled": "Download Cancelled",
|
||||||
"could_not_delete_download": "Could Not Delete Download",
|
"could_not_delete_download": "Could Not Delete Download",
|
||||||
"download_paused": "Download Paused",
|
|
||||||
"could_not_pause_download": "Could Not Pause Download",
|
|
||||||
"download_resumed": "Download Resumed",
|
|
||||||
"could_not_resume_download": "Could Not Resume Download",
|
|
||||||
"download_completed": "Download Completed",
|
"download_completed": "Download Completed",
|
||||||
"download_failed": "Download Failed",
|
"download_failed": "Download Failed",
|
||||||
"download_failed_for_item": "Download failed for {{item}} - {{error}}",
|
"download_failed_for_item": "Download failed for {{item}} - {{error}}",
|
||||||
@@ -562,10 +475,7 @@
|
|||||||
"item_already_downloading": "{{item}} is already downloading",
|
"item_already_downloading": "{{item}} is already downloading",
|
||||||
"all_files_deleted": "All Downloads Deleted Successfully",
|
"all_files_deleted": "All Downloads Deleted Successfully",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "All files, folders, and jobs deleted successfully",
|
|
||||||
"failed_to_clean_cache_directory": "Failed to clean cache directory",
|
|
||||||
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
|
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
|
||||||
"go_to_downloads": "Go to Downloads",
|
|
||||||
"file_deleted": "{{item}} deleted"
|
"file_deleted": "{{item}} deleted"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +493,13 @@
|
|||||||
"none": "None",
|
"none": "None",
|
||||||
"track": "Track",
|
"track": "Track",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login"
|
||||||
"refresh": "Refresh"
|
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Search...",
|
"search": "Search...",
|
||||||
@@ -691,10 +598,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Could not create a stream for Chromecast",
|
"could_not_create_stream_for_chromecast": "Could not create a stream for Chromecast",
|
||||||
"message_from_server": "Message from Server: {{message}}",
|
"message_from_server": "Message from Server: {{message}}",
|
||||||
"next_episode": "Next Episode",
|
"next_episode": "Next Episode",
|
||||||
"refresh_tracks": "Refresh Tracks",
|
|
||||||
"audio_tracks": "Audio Tracks:",
|
|
||||||
"playback_state": "Playback State:",
|
|
||||||
"index": "Index:",
|
|
||||||
"continue_watching": "Continue Watching",
|
"continue_watching": "Continue Watching",
|
||||||
"go_back": "Go Back",
|
"go_back": "Go Back",
|
||||||
"downloaded_file_title": "You have this file downloaded",
|
"downloaded_file_title": "You have this file downloaded",
|
||||||
@@ -761,7 +664,6 @@
|
|||||||
"show_more": "Show More",
|
"show_more": "Show More",
|
||||||
"show_less": "Show Less",
|
"show_less": "Show Less",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -888,13 +790,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +926,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -43,7 +43,6 @@
|
|||||||
"next_up": "Neste",
|
"next_up": "Neste",
|
||||||
"recently_added_in": "Nylig lagt til i {{libraryName}}",
|
"recently_added_in": "Nylig lagt til i {{libraryName}}",
|
||||||
"suggested_movies": "Foreslåtte filmer",
|
"suggested_movies": "Foreslåtte filmer",
|
||||||
"suggested_episodes": "Foreslåtte episoder",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Velkommen til Streamyfin",
|
"welcome_to_streamyfin": "Velkommen til Streamyfin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "En gratis og åpen kildekode-klient for Jellyfin.",
|
"a_free_and_open_source_client_for_jellyfin": "En gratis og åpen kildekode-klient for Jellyfin.",
|
||||||
@@ -128,11 +127,6 @@
|
|||||||
"UNKNOWN": "Ukjent"
|
"UNKNOWN": "Ukjent"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Trygt område i kontrollene",
|
"safe_area_in_controls": "Trygt område i kontrollene",
|
||||||
"video_player": "Videospiller",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Eksperimentell + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Vis Tilpassede Meny Linker",
|
"show_custom_menu_links": "Vis Tilpassede Meny Linker",
|
||||||
"hide_libraries": "Skjul biblioteker",
|
"hide_libraries": "Skjul biblioteker",
|
||||||
"select_liraries_you_want_to_hide": "Velg bibliotekene du vil skjule fra Bibliotek-fanen og hjemmesidedelene.",
|
"select_liraries_you_want_to_hide": "Velg bibliotekene du vil skjule fra Bibliotek-fanen og hjemmesidedelene.",
|
||||||
@@ -140,7 +134,6 @@
|
|||||||
"default_quality": "Standardkvalitet"
|
"default_quality": "Standardkvalitet"
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Nedlastinger",
|
|
||||||
"optimized_versions_server": "Optimaliserte versjoner server",
|
"optimized_versions_server": "Optimaliserte versjoner server",
|
||||||
"save_button": "Lagre",
|
"save_button": "Lagre",
|
||||||
"optimized_server": "Optimalisert Server",
|
"optimized_server": "Optimalisert Server",
|
||||||
@@ -205,8 +198,7 @@
|
|||||||
"export_logs": "Eksporter logger",
|
"export_logs": "Eksporter logger",
|
||||||
"click_for_more_info": "Klikk for mer informasjon",
|
"click_for_more_info": "Klikk for mer informasjon",
|
||||||
"level": "Nivå",
|
"level": "Nivå",
|
||||||
"no_logs_available": "Ingen logger tilgjengelig",
|
"no_logs_available": "Ingen logger tilgjengelig"
|
||||||
"delete_all_logs": "Slett alle logger"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Språk",
|
"title": "Språk",
|
||||||
@@ -216,8 +208,6 @@
|
|||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Feil ved sletting av filer",
|
"error_deleting_files": "Feil ved sletting av filer",
|
||||||
"background_downloads_enabled": "Bakgrunnsnedlastinger aktivert",
|
|
||||||
"background_downloads_disabled": "Bakgrunnsnedlastinger deaktivert",
|
|
||||||
"connected": "Tilkoblet",
|
"connected": "Tilkoblet",
|
||||||
"could_not_connect": "Kunne ikke koble til",
|
"could_not_connect": "Kunne ikke koble til",
|
||||||
"invalid_url": "Ugyldig URL"
|
"invalid_url": "Ugyldig URL"
|
||||||
@@ -231,9 +221,6 @@
|
|||||||
"downloads_title": "Nedlastinger",
|
"downloads_title": "Nedlastinger",
|
||||||
"tvseries": "TV-serier",
|
"tvseries": "TV-serier",
|
||||||
"movies": "Filmer",
|
"movies": "Filmer",
|
||||||
"queue": "Kø",
|
|
||||||
"queue_hint": "Kø og nedlastinger vil gå tapt ved omstart av appen",
|
|
||||||
"no_items_in_queue": "Ingen elementer i køen",
|
|
||||||
"no_downloaded_items": "Ingen nedlastede elementer",
|
"no_downloaded_items": "Ingen nedlastede elementer",
|
||||||
"delete_all_movies_button": "Slett alle filmer",
|
"delete_all_movies_button": "Slett alle filmer",
|
||||||
"delete_all_tvseries_button": "Slett alle TV-serier",
|
"delete_all_tvseries_button": "Slett alle TV-serier",
|
||||||
@@ -269,9 +256,7 @@
|
|||||||
"no_response_received_from_server": "Ingen respons mottatt fra serveren",
|
"no_response_received_from_server": "Ingen respons mottatt fra serveren",
|
||||||
"error_setting_up_the_request": "Feil under oppsett av forespørselen",
|
"error_setting_up_the_request": "Feil under oppsett av forespørselen",
|
||||||
"failed_to_start_download_for_item_unexpected_error": "Kunne ikke starte nedlasting for {{item}}: Uventet feil",
|
"failed_to_start_download_for_item_unexpected_error": "Kunne ikke starte nedlasting for {{item}}: Uventet feil",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Alle filer, mapper og jobber ble slettet",
|
"an_error_occured_while_deleting_files_and_jobs": "En feil oppstod under sletting av filer og jobber"
|
||||||
"an_error_occured_while_deleting_files_and_jobs": "En feil oppstod under sletting av filer og jobber",
|
|
||||||
"go_to_downloads": "Gå til nedlastinger"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -365,12 +350,8 @@
|
|||||||
"video_has_finished_playing": "Videoen har avsluttet avspilling!",
|
"video_has_finished_playing": "Videoen har avsluttet avspilling!",
|
||||||
"no_video_source": "Ingen videosource...",
|
"no_video_source": "Ingen videosource...",
|
||||||
"next_episode": "Neste episode",
|
"next_episode": "Neste episode",
|
||||||
"refresh_tracks": "Oppdater spor",
|
|
||||||
"subtitle_tracks": "Undertekstspor:",
|
"subtitle_tracks": "Undertekstspor:",
|
||||||
"audio_tracks": "Lydspor:",
|
"no_data_available": "Ingen data tilgjengelig"
|
||||||
"playback_state": "Avspillingsstatus:",
|
|
||||||
"no_data_available": "Ingen data tilgjengelig",
|
|
||||||
"index": "Indeks:"
|
|
||||||
},
|
},
|
||||||
"item_card": {
|
"item_card": {
|
||||||
"next_up": "Neste opp",
|
"next_up": "Neste opp",
|
||||||
|
|||||||
@@ -100,7 +100,6 @@
|
|||||||
"continue_and_next_up": "Doorgaan & Volgende",
|
"continue_and_next_up": "Doorgaan & Volgende",
|
||||||
"recently_added_in": "Recent toegevoegd in {{libraryName}}",
|
"recently_added_in": "Recent toegevoegd in {{libraryName}}",
|
||||||
"suggested_movies": "Voorgestelde films",
|
"suggested_movies": "Voorgestelde films",
|
||||||
"suggested_episodes": "Voorgestelde Afleveringen",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Welkom bij Streamyfin",
|
"welcome_to_streamyfin": "Welkom bij Streamyfin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "Een gratis en open-source client voor Jellyfin.",
|
"a_free_and_open_source_client_for_jellyfin": "Een gratis en open-source client voor Jellyfin.",
|
||||||
@@ -261,43 +260,6 @@
|
|||||||
"None": "Geen",
|
"None": "Geen",
|
||||||
"OnlyForced": "Alleen Geforceerd"
|
"OnlyForced": "Alleen Geforceerd"
|
||||||
},
|
},
|
||||||
"text_color": "Tekst kleur",
|
|
||||||
"background_color": "Achtergrond Kleur",
|
|
||||||
"outline_color": "Kleur omlijning",
|
|
||||||
"outline_thickness": "Dikte omlijning",
|
|
||||||
"background_opacity": "Transparantie achtergrond",
|
|
||||||
"outline_opacity": "Doorzichtigheid omlijning",
|
|
||||||
"bold_text": "Bold Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Zwart",
|
|
||||||
"Gray": "Grijs",
|
|
||||||
"Silver": "Zilver",
|
|
||||||
"White": "Wit",
|
|
||||||
"Maroon": "Kastanjebruin",
|
|
||||||
"Red": "Rood",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Geel",
|
|
||||||
"Olive": "Olijf",
|
|
||||||
"Green": "Groen",
|
|
||||||
"Teal": "Groenblauw",
|
|
||||||
"Lime": "Lichtgroen",
|
|
||||||
"Purple": "Paars",
|
|
||||||
"Navy": "Marine",
|
|
||||||
"Blue": "Blauw",
|
|
||||||
"Aqua": "Aqua"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Geen",
|
|
||||||
"Thin": "Dun",
|
|
||||||
"Normal": "normaal",
|
|
||||||
"Thick": "Dikke"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Kleur ondertiteling",
|
|
||||||
"subtitle_background_color": "Achtergrondkleur",
|
|
||||||
"subtitle_font": "Lettertype ondertitels",
|
|
||||||
"ksplayer_title": "KSPlayer Instellingen",
|
|
||||||
"hardware_decode": "Hardware Acceleratie",
|
|
||||||
"hardware_decode_description": "Gebruik hardware acceleratie voor video-decodering. Uitschakelen als u problemen met afspelen ondervindt.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +277,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC ondertitel instellingen",
|
|
||||||
"hint": "Aanpassen van ondertiteling voor VLC-speler. Wijzigingen worden toegepast bij het afspelen.",
|
|
||||||
"text_color": "Tekstkleur",
|
|
||||||
"background_color": "Achtergrondkleur",
|
|
||||||
"background_opacity": "Doorzichtigheid achtergrond",
|
|
||||||
"outline_color": "Kleur omlijning",
|
|
||||||
"outline_opacity": "Omtrek opaciteit",
|
|
||||||
"outline_thickness": "Omtrek dikte",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Videospeler",
|
|
||||||
"video_player": "Videospeler",
|
|
||||||
"video_player_description": "Kies welke videospeler gebruikt moet worden op iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Andere",
|
"other_title": "Andere",
|
||||||
"video_orientation": "Video oriëntatie",
|
"video_orientation": "Video oriëntatie",
|
||||||
@@ -351,13 +294,7 @@
|
|||||||
"UNKNOWN": "Onbekend"
|
"UNKNOWN": "Onbekend"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Veilig gebied in bedieningen",
|
"safe_area_in_controls": "Veilig gebied in bedieningen",
|
||||||
"video_player": "Video player",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Experimentele + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Aangepaste menulinks tonen",
|
"show_custom_menu_links": "Aangepaste menulinks tonen",
|
||||||
"show_large_home_carousel": "Toon grote carrousel op startpagina (bèta)",
|
|
||||||
"hide_libraries": "Verberg Bibliotheken",
|
"hide_libraries": "Verberg Bibliotheken",
|
||||||
"select_liraries_you_want_to_hide": "Selecteer de bibliotheken die je wil verbergen van de Bibliotheektab en hoofdpagina onderdelen.",
|
"select_liraries_you_want_to_hide": "Selecteer de bibliotheken die je wil verbergen van de Bibliotheektab en hoofdpagina onderdelen.",
|
||||||
"disable_haptic_feedback": "Haptische feedback uitschakelen",
|
"disable_haptic_feedback": "Haptische feedback uitschakelen",
|
||||||
@@ -367,9 +304,6 @@
|
|||||||
"max_auto_play_episode_count": "Max Automatisch Aflevering Aantal",
|
"max_auto_play_episode_count": "Max Automatisch Aflevering Aantal",
|
||||||
"disabled": "Uitgeschakeld"
|
"disabled": "Uitgeschakeld"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Downloads"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Muziek",
|
"title": "Muziek",
|
||||||
"playback_title": "Afspelen",
|
"playback_title": "Afspelen",
|
||||||
@@ -413,23 +347,18 @@
|
|||||||
"read_more_about_marlin": "Lees meer over Marlin.",
|
"read_more_about_marlin": "Lees meer over Marlin.",
|
||||||
"save_button": "Opslaan",
|
"save_button": "Opslaan",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Opgeslagen",
|
"saved": "Opgeslagen"
|
||||||
"refreshed": "Instellingen zijn vernieuwd vanaf server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Ververs Instellingen van Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Streamystats inschakelen",
|
|
||||||
"disable_streamystats": "Streamystats Uitschakelen",
|
"disable_streamystats": "Streamystats Uitschakelen",
|
||||||
"enable_search": "Gebruik voor Zoeken",
|
"enable_search": "Gebruik voor Zoeken",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Vul de URL van de Streamystats server in. De URL moet http of https bevatten en optioneel de poort.",
|
"streamystats_search_hint": "Vul de URL van de Streamystats server in. De URL moet http of https bevatten en optioneel de poort.",
|
||||||
"read_more_about_streamystats": "Lees Meer over Streamystats.",
|
"read_more_about_streamystats": "Lees Meer over Streamystats.",
|
||||||
"save_button": "Opslaan",
|
|
||||||
"save": "Opslaan",
|
"save": "Opslaan",
|
||||||
"features_title": "Functies",
|
"features_title": "Functies",
|
||||||
"home_sections_title": "Thuis Secties",
|
|
||||||
"enable_movie_recommendations": "Film Aanbevelingen",
|
"enable_movie_recommendations": "Film Aanbevelingen",
|
||||||
"enable_series_recommendations": "Series Aanbevelingen",
|
"enable_series_recommendations": "Series Aanbevelingen",
|
||||||
"enable_promoted_watchlists": "Gepromote Kijklijst",
|
"enable_promoted_watchlists": "Gepromote Kijklijst",
|
||||||
@@ -445,8 +374,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +385,6 @@
|
|||||||
"delete_all_downloaded_files": "Verwijder alle gedownloade bestanden",
|
"delete_all_downloaded_files": "Verwijder alle gedownloade bestanden",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} gecached",
|
"music_cache_size": "{{size}} gecached",
|
||||||
"music_cache_cleared": "Muziek cache gewist",
|
"music_cache_cleared": "Muziek cache gewist",
|
||||||
@@ -467,8 +394,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -481,8 +406,7 @@
|
|||||||
"export_logs": "Export logs",
|
"export_logs": "Export logs",
|
||||||
"click_for_more_info": "Klik voor meer info",
|
"click_for_more_info": "Klik voor meer info",
|
||||||
"level": "Niveau",
|
"level": "Niveau",
|
||||||
"no_logs_available": "Geen logs beschikbaar",
|
"no_logs_available": "Geen logs beschikbaar"
|
||||||
"delete_all_logs": "Alle logs verwijderen"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Talen",
|
"title": "Talen",
|
||||||
@@ -490,15 +414,12 @@
|
|||||||
"system": "Systeem"
|
"system": "Systeem"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Fout bij het verwijderen van bestanden",
|
"error_deleting_files": "Fout bij het verwijderen van bestanden"
|
||||||
"background_downloads_enabled": "Downloads op de achtergrond ingeschakeld",
|
|
||||||
"background_downloads_disabled": "Downloads op de achtergrond uitgeschakeld"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -518,10 +439,7 @@
|
|||||||
"downloads_title": "Downloads",
|
"downloads_title": "Downloads",
|
||||||
"tvseries": "Series",
|
"tvseries": "Series",
|
||||||
"movies": "Films",
|
"movies": "Films",
|
||||||
"queue": "Wachtrij",
|
|
||||||
"other_media": "Andere media",
|
"other_media": "Andere media",
|
||||||
"queue_hint": "Wachtrij en downloads verdwijnen bij een herstart van de app",
|
|
||||||
"no_items_in_queue": "Geen items in wachtrij",
|
|
||||||
"no_downloaded_items": "Geen gedownloade items",
|
"no_downloaded_items": "Geen gedownloade items",
|
||||||
"delete_all_movies_button": "Verwijder alle films",
|
"delete_all_movies_button": "Verwijder alle films",
|
||||||
"delete_all_tvseries_button": "Verwijder alle Series",
|
"delete_all_tvseries_button": "Verwijder alle Series",
|
||||||
@@ -546,13 +464,8 @@
|
|||||||
"failed_to_delete_all_tvseries": "Alle series zijn niet verwijderd",
|
"failed_to_delete_all_tvseries": "Alle series zijn niet verwijderd",
|
||||||
"deleted_media_successfully": "Andere media succesvol verwijderd!",
|
"deleted_media_successfully": "Andere media succesvol verwijderd!",
|
||||||
"failed_to_delete_media": "Verwijderen van andere media mislukt",
|
"failed_to_delete_media": "Verwijderen van andere media mislukt",
|
||||||
"download_deleted": "Download verwijderd",
|
|
||||||
"download_cancelled": "Download geannuleerd",
|
"download_cancelled": "Download geannuleerd",
|
||||||
"could_not_delete_download": "Kon download niet verwijderen",
|
"could_not_delete_download": "Kon download niet verwijderen",
|
||||||
"download_paused": "Download gepauzeerd",
|
|
||||||
"could_not_pause_download": "Kan niet pauzeren download",
|
|
||||||
"download_resumed": "Download hervat",
|
|
||||||
"could_not_resume_download": "Kon de download niet hervatten",
|
|
||||||
"download_completed": "Download afgerond",
|
"download_completed": "Download afgerond",
|
||||||
"download_failed": "Download Mislukt",
|
"download_failed": "Download Mislukt",
|
||||||
"download_failed_for_item": "Download gefaald voor {{item}} - {{error}}",
|
"download_failed_for_item": "Download gefaald voor {{item}} - {{error}}",
|
||||||
@@ -562,10 +475,7 @@
|
|||||||
"item_already_downloading": "{{item}} wordt al gedownload",
|
"item_already_downloading": "{{item}} wordt al gedownload",
|
||||||
"all_files_deleted": "Alle Bestanden Succesvol Gedownload",
|
"all_files_deleted": "Alle Bestanden Succesvol Gedownload",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} verwijderd",
|
"files_deleted_by_type": "{{count}} {{type}} verwijderd",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Alle bestanden, mappen en taken succesvol verwijderd",
|
|
||||||
"failed_to_clean_cache_directory": "Opschonen cachemap mislukt",
|
|
||||||
"could_not_get_download_url_for_item": "Kan download-URL voor {{itemName}} niet ophalen",
|
"could_not_get_download_url_for_item": "Kan download-URL voor {{itemName}} niet ophalen",
|
||||||
"go_to_downloads": "Ga naar downloads",
|
|
||||||
"file_deleted": "{{item}} verwijderd"
|
"file_deleted": "{{item}} verwijderd"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +493,13 @@
|
|||||||
"none": "Geen",
|
"none": "Geen",
|
||||||
"track": "Spoor",
|
"track": "Spoor",
|
||||||
"cancel": "Annuleren",
|
"cancel": "Annuleren",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Verwijderen",
|
"delete": "Verwijderen",
|
||||||
"ok": "Oké",
|
"ok": "Oké",
|
||||||
"remove": "Verwijderen",
|
"remove": "Verwijderen",
|
||||||
"next": "Volgende",
|
|
||||||
"back": "Terug",
|
"back": "Terug",
|
||||||
"continue": "Doorgaan",
|
"continue": "Doorgaan",
|
||||||
"verifying": "Verifiëren...",
|
"verifying": "Verifiëren...",
|
||||||
"login": "Login",
|
"login": "Login"
|
||||||
"refresh": "Refresh"
|
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Zoek...",
|
"search": "Zoek...",
|
||||||
@@ -691,10 +598,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Kon geen stream maken voor Chromecast",
|
"could_not_create_stream_for_chromecast": "Kon geen stream maken voor Chromecast",
|
||||||
"message_from_server": "Bericht van de server",
|
"message_from_server": "Bericht van de server",
|
||||||
"next_episode": "Volgende Aflevering",
|
"next_episode": "Volgende Aflevering",
|
||||||
"refresh_tracks": "Tracks verversen",
|
|
||||||
"audio_tracks": "Audio Tracks:",
|
|
||||||
"playback_state": "Afspeelstatus:",
|
|
||||||
"index": "Index:",
|
|
||||||
"continue_watching": "Verder kijken",
|
"continue_watching": "Verder kijken",
|
||||||
"go_back": "Terug",
|
"go_back": "Terug",
|
||||||
"downloaded_file_title": "Je hebt dit bestand gedownload",
|
"downloaded_file_title": "Je hebt dit bestand gedownload",
|
||||||
@@ -761,7 +664,6 @@
|
|||||||
"show_more": "Toon meer",
|
"show_more": "Toon meer",
|
||||||
"show_less": "Toon minder",
|
"show_less": "Toon minder",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -888,13 +790,9 @@
|
|||||||
"playlists": "Afspeellijsten",
|
"playlists": "Afspeellijsten",
|
||||||
"tracks": "Nummers"
|
"tracks": "Nummers"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "Alle"
|
|
||||||
},
|
|
||||||
"recently_added": "Recent toegevoegd",
|
"recently_added": "Recent toegevoegd",
|
||||||
"recently_played": "Onlangs afgespeeld",
|
"recently_played": "Onlangs afgespeeld",
|
||||||
"frequently_played": "Vaak afgespeeld",
|
"frequently_played": "Vaak afgespeeld",
|
||||||
"explore": "Ontdek",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Afspelen",
|
"play": "Afspelen",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +926,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -43,7 +43,6 @@
|
|||||||
"next_up": "Neste",
|
"next_up": "Neste",
|
||||||
"recently_added_in": "Nyleg lagt til i {{libraryName}}",
|
"recently_added_in": "Nyleg lagt til i {{libraryName}}",
|
||||||
"suggested_movies": "Foreslåtte filmar",
|
"suggested_movies": "Foreslåtte filmar",
|
||||||
"suggested_episodes": "Foreslåtte episodar",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Velkommen til Streamyfin",
|
"welcome_to_streamyfin": "Velkommen til Streamyfin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "Ein gratis og open kjeldekode-klient for Jellyfin.",
|
"a_free_and_open_source_client_for_jellyfin": "Ein gratis og open kjeldekode-klient for Jellyfin.",
|
||||||
@@ -128,11 +127,6 @@
|
|||||||
"UNKNOWN": "Ukjent"
|
"UNKNOWN": "Ukjent"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Trygt område i kontrollane",
|
"safe_area_in_controls": "Trygt område i kontrollane",
|
||||||
"video_player": "Videospelar",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Eksperimentell + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Vis Tilpassede Meny Linker",
|
"show_custom_menu_links": "Vis Tilpassede Meny Linker",
|
||||||
"hide_libraries": "Skjul bibliotek",
|
"hide_libraries": "Skjul bibliotek",
|
||||||
"select_liraries_you_want_to_hide": "Vel biblioteka du vil skjula frå Bibliotek-fanen og nettsidedelane.",
|
"select_liraries_you_want_to_hide": "Vel biblioteka du vil skjula frå Bibliotek-fanen og nettsidedelane.",
|
||||||
@@ -140,7 +134,6 @@
|
|||||||
"default_quality": "Standardkvalitet"
|
"default_quality": "Standardkvalitet"
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Nedlastingar",
|
|
||||||
"optimized_versions_server": "Optimaliserte versjonar servar",
|
"optimized_versions_server": "Optimaliserte versjonar servar",
|
||||||
"save_button": "Lagre",
|
"save_button": "Lagre",
|
||||||
"optimized_server": "Optimalisert Servar",
|
"optimized_server": "Optimalisert Servar",
|
||||||
@@ -205,8 +198,7 @@
|
|||||||
"export_logs": "Eksporter loggar",
|
"export_logs": "Eksporter loggar",
|
||||||
"click_for_more_info": "Klikk for meir informasjon",
|
"click_for_more_info": "Klikk for meir informasjon",
|
||||||
"level": "Nivå",
|
"level": "Nivå",
|
||||||
"no_logs_available": "Ingen loggar tilgjengelege",
|
"no_logs_available": "Ingen loggar tilgjengelege"
|
||||||
"delete_all_logs": "Slett alle loggar"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Språk",
|
"title": "Språk",
|
||||||
@@ -216,8 +208,6 @@
|
|||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Feil ved sletting av filer",
|
"error_deleting_files": "Feil ved sletting av filer",
|
||||||
"background_downloads_enabled": "Bakgrunnsnedlastingar aktiverte",
|
|
||||||
"background_downloads_disabled": "Bakgrunnsnedlastingar deaktiverte",
|
|
||||||
"connected": "Tilkopla",
|
"connected": "Tilkopla",
|
||||||
"could_not_connect": "Kunne ikkje kopla til",
|
"could_not_connect": "Kunne ikkje kopla til",
|
||||||
"invalid_url": "Ugyldig URL"
|
"invalid_url": "Ugyldig URL"
|
||||||
@@ -231,9 +221,6 @@
|
|||||||
"downloads_title": "Nedlastingar",
|
"downloads_title": "Nedlastingar",
|
||||||
"tvseries": "TV-seriar",
|
"tvseries": "TV-seriar",
|
||||||
"movies": "Filmar",
|
"movies": "Filmar",
|
||||||
"queue": "Kø",
|
|
||||||
"queue_hint": "Kø og nedlastingar vil gå tapt ved omstart av appen",
|
|
||||||
"no_items_in_queue": "Ingen element i køen",
|
|
||||||
"no_downloaded_items": "Ingen nedlasta element",
|
"no_downloaded_items": "Ingen nedlasta element",
|
||||||
"delete_all_movies_button": "Slett alle filmar",
|
"delete_all_movies_button": "Slett alle filmar",
|
||||||
"delete_all_tvseries_button": "Slett alle TV-seriar",
|
"delete_all_tvseries_button": "Slett alle TV-seriar",
|
||||||
@@ -269,9 +256,7 @@
|
|||||||
"no_response_received_from_server": "Ingen respons motteken frå serveren",
|
"no_response_received_from_server": "Ingen respons motteken frå serveren",
|
||||||
"error_setting_up_the_request": "Feil under oppsett av førespurnaden",
|
"error_setting_up_the_request": "Feil under oppsett av førespurnaden",
|
||||||
"failed_to_start_download_for_item_unexpected_error": "Kunne ikkje starta nedlasting for {{item}}: Uventa feil",
|
"failed_to_start_download_for_item_unexpected_error": "Kunne ikkje starta nedlasting for {{item}}: Uventa feil",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Alle filer, mapper og jobbar vart sletta",
|
"an_error_occured_while_deleting_files_and_jobs": "Ein feil oppstod under sletting av filer og jobbar"
|
||||||
"an_error_occured_while_deleting_files_and_jobs": "Ein feil oppstod under sletting av filer og jobbar",
|
|
||||||
"go_to_downloads": "Gå til nedlastingar"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -365,12 +350,8 @@
|
|||||||
"video_has_finished_playing": "Videoen er ferdig avspelt!",
|
"video_has_finished_playing": "Videoen er ferdig avspelt!",
|
||||||
"no_video_source": "Ingen videokjelde...",
|
"no_video_source": "Ingen videokjelde...",
|
||||||
"next_episode": "Neste episode",
|
"next_episode": "Neste episode",
|
||||||
"refresh_tracks": "Oppdater spor",
|
|
||||||
"subtitle_tracks": "Undertekstspor:",
|
"subtitle_tracks": "Undertekstspor:",
|
||||||
"audio_tracks": "Lydspor:",
|
"no_data_available": "Ingen data tilgjengelege"
|
||||||
"playback_state": "Avspelingstatus:",
|
|
||||||
"no_data_available": "Ingen data tilgjengelege",
|
|
||||||
"index": "Indeks:"
|
|
||||||
},
|
},
|
||||||
"item_card": {
|
"item_card": {
|
||||||
"next_up": "Neste opp",
|
"next_up": "Neste opp",
|
||||||
|
|||||||
@@ -100,7 +100,6 @@
|
|||||||
"continue_and_next_up": "Continue & Next Up",
|
"continue_and_next_up": "Continue & Next Up",
|
||||||
"recently_added_in": "Nylig lagt til i {{libraryName}}",
|
"recently_added_in": "Nylig lagt til i {{libraryName}}",
|
||||||
"suggested_movies": "Foreslåtte filmer",
|
"suggested_movies": "Foreslåtte filmer",
|
||||||
"suggested_episodes": "Foreslåtte episoder",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Velkommen til Streamyfin",
|
"welcome_to_streamyfin": "Velkommen til Streamyfin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "En gratis og Open-Source klient for Jellyfin.",
|
"a_free_and_open_source_client_for_jellyfin": "En gratis og Open-Source klient for Jellyfin.",
|
||||||
@@ -261,43 +260,6 @@
|
|||||||
"None": "Ingen",
|
"None": "Ingen",
|
||||||
"OnlyForced": "Enkelt"
|
"OnlyForced": "Enkelt"
|
||||||
},
|
},
|
||||||
"text_color": "Tekst farge",
|
|
||||||
"background_color": "Bakgrunnsfarge",
|
|
||||||
"outline_color": "Omrissets farge",
|
|
||||||
"outline_thickness": "Omriss Tykkelse",
|
|
||||||
"background_opacity": "Bakgrunns gjennomsiktighet",
|
|
||||||
"outline_opacity": "Omrissets gjennomsiktighet",
|
|
||||||
"bold_text": "Bold Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Svart",
|
|
||||||
"Gray": "Grå",
|
|
||||||
"Silver": "Sølv",
|
|
||||||
"White": "Hvit",
|
|
||||||
"Maroon": "Rødbrun",
|
|
||||||
"Red": "Rød",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Gul",
|
|
||||||
"Olive": "Olivengrønn",
|
|
||||||
"Green": "Grønn",
|
|
||||||
"Teal": "Blågrønn",
|
|
||||||
"Lime": "Limegrønn",
|
|
||||||
"Purple": "Lilla",
|
|
||||||
"Navy": "Marineblå",
|
|
||||||
"Blue": "Blå",
|
|
||||||
"Aqua": "Vann"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Ingen",
|
|
||||||
"Thin": "Tynn",
|
|
||||||
"Normal": "Vanlig",
|
|
||||||
"Thick": "Tykk"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +277,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video Player",
|
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Annet",
|
"other_title": "Annet",
|
||||||
"video_orientation": "Video Retning",
|
"video_orientation": "Video Retning",
|
||||||
@@ -351,13 +294,7 @@
|
|||||||
"UNKNOWN": "Ukjent"
|
"UNKNOWN": "Ukjent"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Sikker sone i kontroller",
|
"safe_area_in_controls": "Sikker sone i kontroller",
|
||||||
"video_player": "Video Spiller",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (eksperimentell + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Vis tilpassede menylenker",
|
"show_custom_menu_links": "Vis tilpassede menylenker",
|
||||||
"show_large_home_carousel": "Show Large Home Carousel (beta)",
|
|
||||||
"hide_libraries": "Skjul biblioteker",
|
"hide_libraries": "Skjul biblioteker",
|
||||||
"select_liraries_you_want_to_hide": "Velg bibliotekene du vil skjule deg for Biblioteket og avsnittene for hjemmesider.",
|
"select_liraries_you_want_to_hide": "Velg bibliotekene du vil skjule deg for Biblioteket og avsnittene for hjemmesider.",
|
||||||
"disable_haptic_feedback": "Deaktiver Haptisk tilbakemelding",
|
"disable_haptic_feedback": "Deaktiver Haptisk tilbakemelding",
|
||||||
@@ -367,9 +304,6 @@
|
|||||||
"max_auto_play_episode_count": "Maks automatisk avspilling Episode Telling",
|
"max_auto_play_episode_count": "Maks automatisk avspilling Episode Telling",
|
||||||
"disabled": "Deaktivert"
|
"disabled": "Deaktivert"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Nedlastinger"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +347,18 @@
|
|||||||
"read_more_about_marlin": "Les mer om Marlin.",
|
"read_more_about_marlin": "Les mer om Marlin.",
|
||||||
"save_button": "Lagre",
|
"save_button": "Lagre",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Lagret",
|
"saved": "Lagret"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +374,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +385,6 @@
|
|||||||
"delete_all_downloaded_files": "Slett alle nedlastede filer",
|
"delete_all_downloaded_files": "Slett alle nedlastede filer",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +394,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -481,8 +406,7 @@
|
|||||||
"export_logs": "Eksportlogger",
|
"export_logs": "Eksportlogger",
|
||||||
"click_for_more_info": "Klikk for mer info",
|
"click_for_more_info": "Klikk for mer info",
|
||||||
"level": "Nivå",
|
"level": "Nivå",
|
||||||
"no_logs_available": "Ingen logger tilgjengelig",
|
"no_logs_available": "Ingen logger tilgjengelig"
|
||||||
"delete_all_logs": "Slett alle loggene"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Språk",
|
"title": "Språk",
|
||||||
@@ -490,15 +414,12 @@
|
|||||||
"system": "Systemadministrasjon"
|
"system": "Systemadministrasjon"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Feil ved sletting av filer",
|
"error_deleting_files": "Feil ved sletting av filer"
|
||||||
"background_downloads_enabled": "Nedlastinger av bakgrunn aktivert",
|
|
||||||
"background_downloads_disabled": "Bakgrunnsnedlastinger deaktivert"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -518,10 +439,7 @@
|
|||||||
"downloads_title": "Nedlastinger",
|
"downloads_title": "Nedlastinger",
|
||||||
"tvseries": "TV-Serier",
|
"tvseries": "TV-Serier",
|
||||||
"movies": "Filmer",
|
"movies": "Filmer",
|
||||||
"queue": "Kø",
|
|
||||||
"other_media": "Andre medier",
|
"other_media": "Andre medier",
|
||||||
"queue_hint": "Kø og nedlastinger vil gå tapt når appen startes på nytt",
|
|
||||||
"no_items_in_queue": "Ingen elementer i køen",
|
|
||||||
"no_downloaded_items": "Ingen nedlastede elementer",
|
"no_downloaded_items": "Ingen nedlastede elementer",
|
||||||
"delete_all_movies_button": "Slett alle filmer",
|
"delete_all_movies_button": "Slett alle filmer",
|
||||||
"delete_all_tvseries_button": "Slett alle TV-Serier",
|
"delete_all_tvseries_button": "Slett alle TV-Serier",
|
||||||
@@ -546,13 +464,8 @@
|
|||||||
"failed_to_delete_all_tvseries": "Kunne ikke slette alle TV-Serier",
|
"failed_to_delete_all_tvseries": "Kunne ikke slette alle TV-Serier",
|
||||||
"deleted_media_successfully": "Slettet andre media vellykket!",
|
"deleted_media_successfully": "Slettet andre media vellykket!",
|
||||||
"failed_to_delete_media": "Kunne ikke slette andre medier",
|
"failed_to_delete_media": "Kunne ikke slette andre medier",
|
||||||
"download_deleted": "Nedlasting slettet",
|
|
||||||
"download_cancelled": "Download Cancelled",
|
"download_cancelled": "Download Cancelled",
|
||||||
"could_not_delete_download": "Kunne ikke slette nedlasting",
|
"could_not_delete_download": "Kunne ikke slette nedlasting",
|
||||||
"download_paused": "Last ned Pauset",
|
|
||||||
"could_not_pause_download": "Kunne ikke pause nedlasting",
|
|
||||||
"download_resumed": "Nedlastingen er gjenopptatt",
|
|
||||||
"could_not_resume_download": "Kunne ikke fortsette nedlasting",
|
|
||||||
"download_completed": "Nedlasting fullført",
|
"download_completed": "Nedlasting fullført",
|
||||||
"download_failed": "Download Failed",
|
"download_failed": "Download Failed",
|
||||||
"download_failed_for_item": "Nedlasting feilet for {{item}} – {{error}}",
|
"download_failed_for_item": "Nedlasting feilet for {{item}} – {{error}}",
|
||||||
@@ -562,10 +475,7 @@
|
|||||||
"item_already_downloading": "{{item}} is already downloading",
|
"item_already_downloading": "{{item}} is already downloading",
|
||||||
"all_files_deleted": "All Downloads Deleted Successfully",
|
"all_files_deleted": "All Downloads Deleted Successfully",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Alle filer, mapper og jobber slettet",
|
|
||||||
"failed_to_clean_cache_directory": "Klarte ikke å tømme mellomlagermappen",
|
|
||||||
"could_not_get_download_url_for_item": "Kunne ikke hente nedlastings-URL for {{itemName}}",
|
"could_not_get_download_url_for_item": "Kunne ikke hente nedlastings-URL for {{itemName}}",
|
||||||
"go_to_downloads": "Gå til nedlastinger",
|
|
||||||
"file_deleted": "{{item}} deleted"
|
"file_deleted": "{{item}} deleted"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +493,13 @@
|
|||||||
"none": "None",
|
"none": "None",
|
||||||
"track": "Track",
|
"track": "Track",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login"
|
||||||
"refresh": "Refresh"
|
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Søk...",
|
"search": "Søk...",
|
||||||
@@ -691,10 +598,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Kan ikke opprette en strøm for Chromecast",
|
"could_not_create_stream_for_chromecast": "Kan ikke opprette en strøm for Chromecast",
|
||||||
"message_from_server": "Melding fra tjener: {{message}}",
|
"message_from_server": "Melding fra tjener: {{message}}",
|
||||||
"next_episode": "Neste Episode",
|
"next_episode": "Neste Episode",
|
||||||
"refresh_tracks": "Oppdater sporing",
|
|
||||||
"audio_tracks": "Lyd Tracks:",
|
|
||||||
"playback_state": "Avspillingsstatus:",
|
|
||||||
"index": "Indeks:",
|
|
||||||
"continue_watching": "Fortsett å se",
|
"continue_watching": "Fortsett å se",
|
||||||
"go_back": "Gå tilbake",
|
"go_back": "Gå tilbake",
|
||||||
"downloaded_file_title": "You have this file downloaded",
|
"downloaded_file_title": "You have this file downloaded",
|
||||||
@@ -761,7 +664,6 @@
|
|||||||
"show_more": "Vis mer",
|
"show_more": "Vis mer",
|
||||||
"show_less": "Vis mindre",
|
"show_less": "Vis mindre",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -888,13 +790,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +926,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -100,7 +100,6 @@
|
|||||||
"continue_and_next_up": "Oglądaj dalej i Następne",
|
"continue_and_next_up": "Oglądaj dalej i Następne",
|
||||||
"recently_added_in": "Ostatnio dodano w {{libraryName}}",
|
"recently_added_in": "Ostatnio dodano w {{libraryName}}",
|
||||||
"suggested_movies": "Sugerowane filmy",
|
"suggested_movies": "Sugerowane filmy",
|
||||||
"suggested_episodes": "Sugerowane odcinki",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Witamy w Streamyfin",
|
"welcome_to_streamyfin": "Witamy w Streamyfin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "Darmowy i otwartoźródłowy klient dla Jellyfin.",
|
"a_free_and_open_source_client_for_jellyfin": "Darmowy i otwartoźródłowy klient dla Jellyfin.",
|
||||||
@@ -261,43 +260,6 @@
|
|||||||
"None": "Brak",
|
"None": "Brak",
|
||||||
"OnlyForced": "Tylko wymuszone"
|
"OnlyForced": "Tylko wymuszone"
|
||||||
},
|
},
|
||||||
"text_color": "Kolor tekstu",
|
|
||||||
"background_color": "Kolor tła",
|
|
||||||
"outline_color": "Kolor konturu",
|
|
||||||
"outline_thickness": "Grubość konturu",
|
|
||||||
"background_opacity": "Przezroczystość tła",
|
|
||||||
"outline_opacity": "Przezroczystość konturu",
|
|
||||||
"bold_text": "Tekst pogrubiony",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Czarny",
|
|
||||||
"Gray": "Szary",
|
|
||||||
"Silver": "Srebro",
|
|
||||||
"White": "Biały",
|
|
||||||
"Maroon": "Bordowy",
|
|
||||||
"Red": "Czerwony",
|
|
||||||
"Fuchsia": "Fuksja",
|
|
||||||
"Yellow": "Żółty",
|
|
||||||
"Olive": "Oliwki",
|
|
||||||
"Green": "Zielony",
|
|
||||||
"Teal": "Turkusowy",
|
|
||||||
"Lime": "Limonkowy",
|
|
||||||
"Purple": "Fioletowy",
|
|
||||||
"Navy": "Granatowy",
|
|
||||||
"Blue": "Niebieski",
|
|
||||||
"Aqua": "Aqua"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Brak",
|
|
||||||
"Thin": "Cienka",
|
|
||||||
"Normal": "Normalny",
|
|
||||||
"Thick": "Gruba"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Kolor napisów",
|
|
||||||
"subtitle_background_color": "Kolor tła",
|
|
||||||
"subtitle_font": "Czcionka napisów",
|
|
||||||
"ksplayer_title": "Ustawienia KSPlayer",
|
|
||||||
"hardware_decode": "Dekodowanie sprzętowe",
|
|
||||||
"hardware_decode_description": "Używaj akceleracji sprzętowej dla dekodowania wideo. Wyłącz, jeśli doświadczasz problemów z odtwarzaniem.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +277,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "Ustawienia napisów VLC",
|
|
||||||
"hint": "Personalizuj wygląd napisów dla odtwarzacza VLC. Zmiany zajdą przy następnym odtwarzaniu.",
|
|
||||||
"text_color": "Kolor tekstu",
|
|
||||||
"background_color": "Kolor tła",
|
|
||||||
"background_opacity": "Przezroczystość tła",
|
|
||||||
"outline_color": "Kolor obrysu",
|
|
||||||
"outline_opacity": "Przezroczystość obrysu",
|
|
||||||
"outline_thickness": "Grubość obrysu",
|
|
||||||
"bold": "Pogrubiony tekst",
|
|
||||||
"margin": "Dolny margines"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Odtwarzacz wideo",
|
|
||||||
"video_player": "Odtwarzacz wideo",
|
|
||||||
"video_player_description": "Wybierz którego odtwarzacza wideo używać w iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Inne",
|
"other_title": "Inne",
|
||||||
"video_orientation": "Orientacja wideo",
|
"video_orientation": "Orientacja wideo",
|
||||||
@@ -351,13 +294,7 @@
|
|||||||
"UNKNOWN": "Nieznana"
|
"UNKNOWN": "Nieznana"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Bezpieczny obszar w kontrolkach",
|
"safe_area_in_controls": "Bezpieczny obszar w kontrolkach",
|
||||||
"video_player": "Odtwarzacz wideo",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Eksperymentalny + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Pokaż niestandardowe odnośniki w menu",
|
"show_custom_menu_links": "Pokaż niestandardowe odnośniki w menu",
|
||||||
"show_large_home_carousel": "Wyświetl Dużą Karuzelę na ekranie głównym (beta)",
|
|
||||||
"hide_libraries": "Ukryj biblioteki",
|
"hide_libraries": "Ukryj biblioteki",
|
||||||
"select_liraries_you_want_to_hide": "Wybierz biblioteki, które chcesz ukryć na karcie Biblioteka i w sekcjach strony głównej.",
|
"select_liraries_you_want_to_hide": "Wybierz biblioteki, które chcesz ukryć na karcie Biblioteka i w sekcjach strony głównej.",
|
||||||
"disable_haptic_feedback": "Wyłącz wibracje",
|
"disable_haptic_feedback": "Wyłącz wibracje",
|
||||||
@@ -367,9 +304,6 @@
|
|||||||
"max_auto_play_episode_count": "Maksymalna liczba odcinków automatycznego odtwarzania",
|
"max_auto_play_episode_count": "Maksymalna liczba odcinków automatycznego odtwarzania",
|
||||||
"disabled": "Wyłączone"
|
"disabled": "Wyłączone"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Pobieranie"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Muzyka",
|
"title": "Muzyka",
|
||||||
"playback_title": "Odtwarzanie",
|
"playback_title": "Odtwarzanie",
|
||||||
@@ -413,23 +347,18 @@
|
|||||||
"read_more_about_marlin": "Dowiedz się więcej o Marlin.",
|
"read_more_about_marlin": "Dowiedz się więcej o Marlin.",
|
||||||
"save_button": "Zapisz",
|
"save_button": "Zapisz",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Zapisano",
|
"saved": "Zapisano"
|
||||||
"refreshed": "Ustawienia odświeżone z serwera"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Odśwież ustawienia z serwera"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Włącz Streamystats",
|
|
||||||
"disable_streamystats": "Wyłącz Streamystats",
|
"disable_streamystats": "Wyłącz Streamystats",
|
||||||
"enable_search": "Używaj do wyszukiwania",
|
"enable_search": "Używaj do wyszukiwania",
|
||||||
"url": "Adres URL",
|
"url": "Adres URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Wprowadź adres URL dla twojego serwera Streamystats. URL powinien zawierać http lub https i opcjonalnie port.",
|
"streamystats_search_hint": "Wprowadź adres URL dla twojego serwera Streamystats. URL powinien zawierać http lub https i opcjonalnie port.",
|
||||||
"read_more_about_streamystats": "Dowiedz się więcej o Streamystats.",
|
"read_more_about_streamystats": "Dowiedz się więcej o Streamystats.",
|
||||||
"save_button": "Zapisz",
|
|
||||||
"save": "Zapisz",
|
"save": "Zapisz",
|
||||||
"features_title": "Funkcje",
|
"features_title": "Funkcje",
|
||||||
"home_sections_title": "Sekcja główna",
|
|
||||||
"enable_movie_recommendations": "Rekomendacje filmów",
|
"enable_movie_recommendations": "Rekomendacje filmów",
|
||||||
"enable_series_recommendations": "Rekomendację seriali",
|
"enable_series_recommendations": "Rekomendację seriali",
|
||||||
"enable_promoted_watchlists": "Promowane listy oglądania",
|
"enable_promoted_watchlists": "Promowane listy oglądania",
|
||||||
@@ -445,8 +374,7 @@
|
|||||||
"refresh_from_server": "Odśwież ustawienia z serwera"
|
"refresh_from_server": "Odśwież ustawienia z serwera"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Aktywuj naszą integrację Listy Oglądania",
|
"watchlist_enabler": "Aktywuj naszą integrację Listy Oglądania"
|
||||||
"watchlist_button": "Przelącz integrację Listy Oglądania"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +385,6 @@
|
|||||||
"delete_all_downloaded_files": "Usuń wszystkie pobrane pliki",
|
"delete_all_downloaded_files": "Usuń wszystkie pobrane pliki",
|
||||||
"music_cache_title": "Bufor muzyki",
|
"music_cache_title": "Bufor muzyki",
|
||||||
"music_cache_description": "Automatycznie buforuj piosenki w trakcie słuchania dla płynniejszego odtwarzania i wsparcia offline",
|
"music_cache_description": "Automatycznie buforuj piosenki w trakcie słuchania dla płynniejszego odtwarzania i wsparcia offline",
|
||||||
"enable_music_cache": "Włącz bufor muzyki",
|
|
||||||
"clear_music_cache": "Wyczyść bufor muzyki",
|
"clear_music_cache": "Wyczyść bufor muzyki",
|
||||||
"music_cache_size": "Zbuforowano {{size}}",
|
"music_cache_size": "Zbuforowano {{size}}",
|
||||||
"music_cache_cleared": "Wyczyszczono bufor muzyki",
|
"music_cache_cleared": "Wyczyszczono bufor muzyki",
|
||||||
@@ -467,8 +394,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -481,8 +406,7 @@
|
|||||||
"export_logs": "Eksportuj logi",
|
"export_logs": "Eksportuj logi",
|
||||||
"click_for_more_info": "Kliknij po więcej informacji",
|
"click_for_more_info": "Kliknij po więcej informacji",
|
||||||
"level": "Poziom",
|
"level": "Poziom",
|
||||||
"no_logs_available": "Brak dostępnych logów",
|
"no_logs_available": "Brak dostępnych logów"
|
||||||
"delete_all_logs": "Usuń wszystkie logi"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Języki",
|
"title": "Języki",
|
||||||
@@ -490,15 +414,12 @@
|
|||||||
"system": "System"
|
"system": "System"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Błąd podczas usuwania plików",
|
"error_deleting_files": "Błąd podczas usuwania plików"
|
||||||
"background_downloads_enabled": "Pobieranie w tle włączone",
|
|
||||||
"background_downloads_disabled": "Pobieranie w tle wyłączone"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -518,10 +439,7 @@
|
|||||||
"downloads_title": "Pobrane",
|
"downloads_title": "Pobrane",
|
||||||
"tvseries": "Seriale",
|
"tvseries": "Seriale",
|
||||||
"movies": "Filmy",
|
"movies": "Filmy",
|
||||||
"queue": "Kolejka",
|
|
||||||
"other_media": "Inne media",
|
"other_media": "Inne media",
|
||||||
"queue_hint": "Kolejka i pobierania zostaną utracone po ponownym uruchomieniu aplikacji",
|
|
||||||
"no_items_in_queue": "Brak elementów w kolejce",
|
|
||||||
"no_downloaded_items": "Brak pobranych elementów",
|
"no_downloaded_items": "Brak pobranych elementów",
|
||||||
"delete_all_movies_button": "Usuń wszystkie filmy",
|
"delete_all_movies_button": "Usuń wszystkie filmy",
|
||||||
"delete_all_tvseries_button": "Usuń wszystkie seriale",
|
"delete_all_tvseries_button": "Usuń wszystkie seriale",
|
||||||
@@ -546,13 +464,8 @@
|
|||||||
"failed_to_delete_all_tvseries": "Nie udało się usunąć wszystkich seriali",
|
"failed_to_delete_all_tvseries": "Nie udało się usunąć wszystkich seriali",
|
||||||
"deleted_media_successfully": "Pomyślnie usunięto inne media!",
|
"deleted_media_successfully": "Pomyślnie usunięto inne media!",
|
||||||
"failed_to_delete_media": "Nie udało się usunąć innych mediów",
|
"failed_to_delete_media": "Nie udało się usunąć innych mediów",
|
||||||
"download_deleted": "Pobieranie usunięte",
|
|
||||||
"download_cancelled": "Pobieranie anulowane",
|
"download_cancelled": "Pobieranie anulowane",
|
||||||
"could_not_delete_download": "Nie można usunąć pobrania",
|
"could_not_delete_download": "Nie można usunąć pobrania",
|
||||||
"download_paused": "Pobieranie wstrzymane",
|
|
||||||
"could_not_pause_download": "Nie można wstrzymać pobierania",
|
|
||||||
"download_resumed": "Pobieranie wznowione",
|
|
||||||
"could_not_resume_download": "Nie można wznowić pobierania",
|
|
||||||
"download_completed": "Pobieranie zakończone",
|
"download_completed": "Pobieranie zakończone",
|
||||||
"download_failed": "Pobieranie nie powiodło się",
|
"download_failed": "Pobieranie nie powiodło się",
|
||||||
"download_failed_for_item": "Pobieranie nie powiodło się dla {{item}} – {{error}}",
|
"download_failed_for_item": "Pobieranie nie powiodło się dla {{item}} – {{error}}",
|
||||||
@@ -562,10 +475,7 @@
|
|||||||
"item_already_downloading": "{{item}} jest w trakcie pobierania",
|
"item_already_downloading": "{{item}} jest w trakcie pobierania",
|
||||||
"all_files_deleted": "Pomyślnie usunięto wszystkie pobrane",
|
"all_files_deleted": "Pomyślnie usunięto wszystkie pobrane",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} usunięto",
|
"files_deleted_by_type": "{{count}} {{type}} usunięto",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Wszystkie pliki, foldery i zadania zostały pomyślnie usunięte",
|
|
||||||
"failed_to_clean_cache_directory": "Nie udało się wyczyścić katalogu pamięci podręcznej",
|
|
||||||
"could_not_get_download_url_for_item": "Nie można pobrać adresu URL dla {{itemName}}",
|
"could_not_get_download_url_for_item": "Nie można pobrać adresu URL dla {{itemName}}",
|
||||||
"go_to_downloads": "Przejdź do pobranych",
|
|
||||||
"file_deleted": "Usunięto {{item}}"
|
"file_deleted": "Usunięto {{item}}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +493,13 @@
|
|||||||
"none": "Nic",
|
"none": "Nic",
|
||||||
"track": "Utwór",
|
"track": "Utwór",
|
||||||
"cancel": "Anuluj",
|
"cancel": "Anuluj",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Usuń",
|
"delete": "Usuń",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Usuń",
|
"remove": "Usuń",
|
||||||
"next": "Następne",
|
|
||||||
"back": "Poprzednie",
|
"back": "Poprzednie",
|
||||||
"continue": "Kontynuuj",
|
"continue": "Kontynuuj",
|
||||||
"verifying": "Weryfikacja...",
|
"verifying": "Weryfikacja...",
|
||||||
"login": "Login",
|
"login": "Login"
|
||||||
"refresh": "Refresh"
|
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Szukaj...",
|
"search": "Szukaj...",
|
||||||
@@ -691,10 +598,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Nie udało się utworzyć strumienia dla Chromecasta",
|
"could_not_create_stream_for_chromecast": "Nie udało się utworzyć strumienia dla Chromecasta",
|
||||||
"message_from_server": "Wiadomość z serwera: {{message}}",
|
"message_from_server": "Wiadomość z serwera: {{message}}",
|
||||||
"next_episode": "Następny odcinek",
|
"next_episode": "Następny odcinek",
|
||||||
"refresh_tracks": "Odśwież ścieżki",
|
|
||||||
"audio_tracks": "Ścieżki audio:",
|
|
||||||
"playback_state": "Stan odtwarzania:",
|
|
||||||
"index": "Indeks:",
|
|
||||||
"continue_watching": "Kontynuuj oglądanie",
|
"continue_watching": "Kontynuuj oglądanie",
|
||||||
"go_back": "Wstecz",
|
"go_back": "Wstecz",
|
||||||
"downloaded_file_title": "Ten plik masz już pobrany",
|
"downloaded_file_title": "Ten plik masz już pobrany",
|
||||||
@@ -761,7 +664,6 @@
|
|||||||
"show_more": "Pokaż więcej",
|
"show_more": "Pokaż więcej",
|
||||||
"show_less": "Pokaż mniej",
|
"show_less": "Pokaż mniej",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -888,13 +790,9 @@
|
|||||||
"playlists": "Playlisty",
|
"playlists": "Playlisty",
|
||||||
"tracks": "utwory"
|
"tracks": "utwory"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "Wszystkie"
|
|
||||||
},
|
|
||||||
"recently_added": "Ostatnio dodano",
|
"recently_added": "Ostatnio dodano",
|
||||||
"recently_played": "Ostatnio odtwarzano",
|
"recently_played": "Ostatnio odtwarzano",
|
||||||
"frequently_played": "Często odtwarzane",
|
"frequently_played": "Często odtwarzane",
|
||||||
"explore": "Odkrywaj",
|
|
||||||
"top_tracks": "Popularne utwory",
|
"top_tracks": "Popularne utwory",
|
||||||
"play": "Odtwórz",
|
"play": "Odtwórz",
|
||||||
"shuffle": "Losuj",
|
"shuffle": "Losuj",
|
||||||
@@ -1028,7 +926,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -43,7 +43,6 @@
|
|||||||
"next_up": "Próximo em",
|
"next_up": "Próximo em",
|
||||||
"recently_added_in": "Adicionados recentemente em {{libraryName}}",
|
"recently_added_in": "Adicionados recentemente em {{libraryName}}",
|
||||||
"suggested_movies": "Filmes sugeridos",
|
"suggested_movies": "Filmes sugeridos",
|
||||||
"suggested_episodes": "Episódios sugeridos",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Bem-vindo ao Streamyfin",
|
"welcome_to_streamyfin": "Bem-vindo ao Streamyfin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "Um cliente gratuito e de código livre para o Jellyfin.",
|
"a_free_and_open_source_client_for_jellyfin": "Um cliente gratuito e de código livre para o Jellyfin.",
|
||||||
@@ -128,11 +127,6 @@
|
|||||||
"UNKNOWN": "Desconhecido"
|
"UNKNOWN": "Desconhecido"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Área segura nos controles",
|
"safe_area_in_controls": "Área segura nos controles",
|
||||||
"video_player": "Tocador de vídeo",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Experimental + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Mostrar Custom Links no Menu",
|
"show_custom_menu_links": "Mostrar Custom Links no Menu",
|
||||||
"hide_libraries": "Ocultar bibliotecas",
|
"hide_libraries": "Ocultar bibliotecas",
|
||||||
"select_liraries_you_want_to_hide": "Selecione as bibliotecas que você deseja ocultar das abas Biblioteca e Início.",
|
"select_liraries_you_want_to_hide": "Selecione as bibliotecas que você deseja ocultar das abas Biblioteca e Início.",
|
||||||
@@ -141,7 +135,6 @@
|
|||||||
"disabled": "Desativado"
|
"disabled": "Desativado"
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Downloads",
|
|
||||||
"optimized_versions_server": "Servidor do optimized versions",
|
"optimized_versions_server": "Servidor do optimized versions",
|
||||||
"save_button": "Salvar",
|
"save_button": "Salvar",
|
||||||
"optimized_server": "Optimized Server",
|
"optimized_server": "Optimized Server",
|
||||||
@@ -203,8 +196,7 @@
|
|||||||
},
|
},
|
||||||
"logs": {
|
"logs": {
|
||||||
"logs_title": "Logs",
|
"logs_title": "Logs",
|
||||||
"no_logs_available": "Sem logs disponíveis",
|
"no_logs_available": "Sem logs disponíveis"
|
||||||
"delete_all_logs": "Remover todos os logs"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Idiomas",
|
"title": "Idiomas",
|
||||||
@@ -214,8 +206,6 @@
|
|||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Erro ao remover arquivos",
|
"error_deleting_files": "Erro ao remover arquivos",
|
||||||
"background_downloads_enabled": "Downloads em segundo plano ativado",
|
|
||||||
"background_downloads_disabled": "Downloads em segundo plano desativado",
|
|
||||||
"connected": "Conectado",
|
"connected": "Conectado",
|
||||||
"could_not_connect": "Não foi possível conectar",
|
"could_not_connect": "Não foi possível conectar",
|
||||||
"invalid_url": "URL inválida"
|
"invalid_url": "URL inválida"
|
||||||
@@ -229,9 +219,6 @@
|
|||||||
"downloads_title": "Downloads",
|
"downloads_title": "Downloads",
|
||||||
"tvseries": "TV/Séries",
|
"tvseries": "TV/Séries",
|
||||||
"movies": "Filmes",
|
"movies": "Filmes",
|
||||||
"queue": "Fila",
|
|
||||||
"queue_hint": "A fila e os downloads serão perdidos ao reiniciar o aplicativo",
|
|
||||||
"no_items_in_queue": "Nenhum item na fila",
|
|
||||||
"no_downloaded_items": "Nenhum item baixado",
|
"no_downloaded_items": "Nenhum item baixado",
|
||||||
"delete_all_movies_button": "Remover todos os filmes",
|
"delete_all_movies_button": "Remover todos os filmes",
|
||||||
"delete_all_tvseries_button": "Remover todos as TV/Séries",
|
"delete_all_tvseries_button": "Remover todos as TV/Séries",
|
||||||
@@ -267,9 +254,7 @@
|
|||||||
"no_response_received_from_server": "Sem resposta recebida do servidor",
|
"no_response_received_from_server": "Sem resposta recebida do servidor",
|
||||||
"error_setting_up_the_request": "Erro ao configurar a solicitação",
|
"error_setting_up_the_request": "Erro ao configurar a solicitação",
|
||||||
"failed_to_start_download_for_item_unexpected_error": "Falha ao iniciar o download de {{item}}: Erro inesperado",
|
"failed_to_start_download_for_item_unexpected_error": "Falha ao iniciar o download de {{item}}: Erro inesperado",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Todos arquivos, pastas e jobs removidos com sucesso",
|
"an_error_occured_while_deleting_files_and_jobs": "Ocorreu um erro ao remover os arquivos e jobs"
|
||||||
"an_error_occured_while_deleting_files_and_jobs": "Ocorreu um erro ao remover os arquivos e jobs",
|
|
||||||
"go_to_downloads": "Vá para downloads"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -363,12 +348,8 @@
|
|||||||
"video_has_finished_playing": "O vídeo terminou!",
|
"video_has_finished_playing": "O vídeo terminou!",
|
||||||
"no_video_source": "Nenhuma fonte de vídeo...",
|
"no_video_source": "Nenhuma fonte de vídeo...",
|
||||||
"next_episode": "Próximo episódio",
|
"next_episode": "Próximo episódio",
|
||||||
"refresh_tracks": "Atualizar faixas",
|
|
||||||
"subtitle_tracks": "Faixas da legenda:",
|
"subtitle_tracks": "Faixas da legenda:",
|
||||||
"audio_tracks": "Faixas do áudio:",
|
|
||||||
"playback_state": "Playback State:",
|
|
||||||
"no_data_available": "Nenhum dado disponível",
|
"no_data_available": "Nenhum dado disponível",
|
||||||
"index": "Índice:",
|
|
||||||
"continue_watching": "Continuar assistindo",
|
"continue_watching": "Continuar assistindo",
|
||||||
"go_back": "Voltar"
|
"go_back": "Voltar"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -100,7 +100,6 @@
|
|||||||
"continue_and_next_up": "Continuar e Próximo",
|
"continue_and_next_up": "Continuar e Próximo",
|
||||||
"recently_added_in": "Adicionado recentemente em {{libraryName}}",
|
"recently_added_in": "Adicionado recentemente em {{libraryName}}",
|
||||||
"suggested_movies": "Filmes Sugeridos",
|
"suggested_movies": "Filmes Sugeridos",
|
||||||
"suggested_episodes": "Episódios sugeridos",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Bem-vindo ao Streamyfin",
|
"welcome_to_streamyfin": "Bem-vindo ao Streamyfin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "Um Cliente de código aberto e gratuito para o Jellyfin.",
|
"a_free_and_open_source_client_for_jellyfin": "Um Cliente de código aberto e gratuito para o Jellyfin.",
|
||||||
@@ -261,43 +260,6 @@
|
|||||||
"None": "Nenhuma",
|
"None": "Nenhuma",
|
||||||
"OnlyForced": "Somente Forçado"
|
"OnlyForced": "Somente Forçado"
|
||||||
},
|
},
|
||||||
"text_color": "Cor do texto",
|
|
||||||
"background_color": "Cor de fundo",
|
|
||||||
"outline_color": "Cor do contorno",
|
|
||||||
"outline_thickness": "Espessura do Contorno",
|
|
||||||
"background_opacity": "Opacidade de fundo",
|
|
||||||
"outline_opacity": "Opacidade do Contorno",
|
|
||||||
"bold_text": "Texto em negrito",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Preto",
|
|
||||||
"Gray": "Cinzento",
|
|
||||||
"Silver": "Prata",
|
|
||||||
"White": "Branco",
|
|
||||||
"Maroon": "Castanho",
|
|
||||||
"Red": "Vermelho",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Amarelo",
|
|
||||||
"Olive": "Verde-oliva",
|
|
||||||
"Green": "Verde",
|
|
||||||
"Teal": "Verde-azulado",
|
|
||||||
"Lime": "Verde-limão",
|
|
||||||
"Purple": "Roxo",
|
|
||||||
"Navy": "Azul-marinho",
|
|
||||||
"Blue": "Azul",
|
|
||||||
"Aqua": "Água"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Nenhuma",
|
|
||||||
"Thin": "Magro",
|
|
||||||
"Normal": "Normal",
|
|
||||||
"Thick": "Grosso"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Cor da legenda",
|
|
||||||
"subtitle_background_color": "Cor de fundo",
|
|
||||||
"subtitle_font": "Fonte da legenda",
|
|
||||||
"ksplayer_title": "Configurações do KSPlayer",
|
|
||||||
"hardware_decode": "Decodificação por hardware",
|
|
||||||
"hardware_decode_description": "Use aceleração de hardware para decodificação de vídeo. Desative se você tiver problemas de reprodução.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +277,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Reprodutor de Vídeo",
|
|
||||||
"video_player": "Reprodutor de Vídeo",
|
|
||||||
"video_player_description": "Escolha qual player de vídeo usar no iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Outros",
|
"other_title": "Outros",
|
||||||
"video_orientation": "Orientação do Vídeo",
|
"video_orientation": "Orientação do Vídeo",
|
||||||
@@ -351,13 +294,7 @@
|
|||||||
"UNKNOWN": "Desconhecido"
|
"UNKNOWN": "Desconhecido"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Área segura nos controles",
|
"safe_area_in_controls": "Área segura nos controles",
|
||||||
"video_player": "Reprodutor de Vídeo",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Experimental + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Mostrar Links de Menu Personalizado",
|
"show_custom_menu_links": "Mostrar Links de Menu Personalizado",
|
||||||
"show_large_home_carousel": "Mostrar Carrossel Grande (beta)",
|
|
||||||
"hide_libraries": "Ocultar bibliotecas",
|
"hide_libraries": "Ocultar bibliotecas",
|
||||||
"select_liraries_you_want_to_hide": "Selecione as bibliotecas que você deseja ocultar da aba Biblioteca e seções da página inicial.",
|
"select_liraries_you_want_to_hide": "Selecione as bibliotecas que você deseja ocultar da aba Biblioteca e seções da página inicial.",
|
||||||
"disable_haptic_feedback": "Desativar o retorno tátil",
|
"disable_haptic_feedback": "Desativar o retorno tátil",
|
||||||
@@ -367,9 +304,6 @@
|
|||||||
"max_auto_play_episode_count": "Contagem máxima de episódios de reprodução automática",
|
"max_auto_play_episode_count": "Contagem máxima de episódios de reprodução automática",
|
||||||
"disabled": "Desabilitado"
|
"disabled": "Desabilitado"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Downloads"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Música",
|
"title": "Música",
|
||||||
"playback_title": "Reproduzir",
|
"playback_title": "Reproduzir",
|
||||||
@@ -413,23 +347,18 @@
|
|||||||
"read_more_about_marlin": "Leia mais sobre Marlin.",
|
"read_more_about_marlin": "Leia mais sobre Marlin.",
|
||||||
"save_button": "Salvar",
|
"save_button": "Salvar",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Salvo",
|
"saved": "Salvo"
|
||||||
"refreshed": "Configurações atualizadas do servidor"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Atualizar as configurações do servidor"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Ativar Streamystats",
|
|
||||||
"disable_streamystats": "Desativar streamystats",
|
"disable_streamystats": "Desativar streamystats",
|
||||||
"enable_search": "Usar para Pesquisa",
|
"enable_search": "Usar para Pesquisa",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Digite a URL para seu servidor de StreamyStats. A URL deve incluir http ou https e, opcionalmente, a porta.",
|
"streamystats_search_hint": "Digite a URL para seu servidor de StreamyStats. A URL deve incluir http ou https e, opcionalmente, a porta.",
|
||||||
"read_more_about_streamystats": "Leia mais sobre Streamystats.",
|
"read_more_about_streamystats": "Leia mais sobre Streamystats.",
|
||||||
"save_button": "Salvar",
|
|
||||||
"save": "Salvar",
|
"save": "Salvar",
|
||||||
"features_title": "Funcionalidades",
|
"features_title": "Funcionalidades",
|
||||||
"home_sections_title": "Seções da Página Inicial",
|
|
||||||
"enable_movie_recommendations": "Recomendações de filmes",
|
"enable_movie_recommendations": "Recomendações de filmes",
|
||||||
"enable_series_recommendations": "Recomendações de Séries",
|
"enable_series_recommendations": "Recomendações de Séries",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +374,7 @@
|
|||||||
"refresh_from_server": "Atualizar Configurações do Servidor"
|
"refresh_from_server": "Atualizar Configurações do Servidor"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Ative nossa integração de Lista de Interesses",
|
"watchlist_enabler": "Ative nossa integração de Lista de Interesses"
|
||||||
"watchlist_button": "Ativar/desativar Lista de Interesses"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +385,6 @@
|
|||||||
"delete_all_downloaded_files": "Excluir todos os arquivos baixados",
|
"delete_all_downloaded_files": "Excluir todos os arquivos baixados",
|
||||||
"music_cache_title": "Cache de Música",
|
"music_cache_title": "Cache de Música",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Habilitar Cache de Música",
|
|
||||||
"clear_music_cache": "Limpar Cache de Música",
|
"clear_music_cache": "Limpar Cache de Música",
|
||||||
"music_cache_size": "{{size}} em cache",
|
"music_cache_size": "{{size}} em cache",
|
||||||
"music_cache_cleared": "Cache de música limpo",
|
"music_cache_cleared": "Cache de música limpo",
|
||||||
@@ -467,8 +394,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -481,8 +406,7 @@
|
|||||||
"export_logs": "Exportar logs",
|
"export_logs": "Exportar logs",
|
||||||
"click_for_more_info": "Clique para mais informações",
|
"click_for_more_info": "Clique para mais informações",
|
||||||
"level": "Nível",
|
"level": "Nível",
|
||||||
"no_logs_available": "Não há registros disponíveis",
|
"no_logs_available": "Não há registros disponíveis"
|
||||||
"delete_all_logs": "Excluir todos os registros"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Idiomas",
|
"title": "Idiomas",
|
||||||
@@ -490,15 +414,12 @@
|
|||||||
"system": "Sistema"
|
"system": "Sistema"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Erro ao excluir arquivos",
|
"error_deleting_files": "Erro ao excluir arquivos"
|
||||||
"background_downloads_enabled": "Downloads em segundo plano ativados",
|
|
||||||
"background_downloads_disabled": "Downloads em segundo plano desativados"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -518,10 +439,7 @@
|
|||||||
"downloads_title": "Downloads",
|
"downloads_title": "Downloads",
|
||||||
"tvseries": "TV-Séries",
|
"tvseries": "TV-Séries",
|
||||||
"movies": "Filmes",
|
"movies": "Filmes",
|
||||||
"queue": "Fila",
|
|
||||||
"other_media": "Outras mídias",
|
"other_media": "Outras mídias",
|
||||||
"queue_hint": "A fila e os downloads serão perdidos ao reiniciar o aplicativo",
|
|
||||||
"no_items_in_queue": "Nenhum item na fila",
|
|
||||||
"no_downloaded_items": "Nenhum item baixado",
|
"no_downloaded_items": "Nenhum item baixado",
|
||||||
"delete_all_movies_button": "Excluir todos os filmes",
|
"delete_all_movies_button": "Excluir todos os filmes",
|
||||||
"delete_all_tvseries_button": "Excluir todas as séries",
|
"delete_all_tvseries_button": "Excluir todas as séries",
|
||||||
@@ -546,13 +464,8 @@
|
|||||||
"failed_to_delete_all_tvseries": "Falha ao excluir todas as séries",
|
"failed_to_delete_all_tvseries": "Falha ao excluir todas as séries",
|
||||||
"deleted_media_successfully": "Outras mídias excluídas com sucesso!",
|
"deleted_media_successfully": "Outras mídias excluídas com sucesso!",
|
||||||
"failed_to_delete_media": "Falha ao excluir outras mídias",
|
"failed_to_delete_media": "Falha ao excluir outras mídias",
|
||||||
"download_deleted": "Download Excluído",
|
|
||||||
"download_cancelled": "Download Cancelado",
|
"download_cancelled": "Download Cancelado",
|
||||||
"could_not_delete_download": "Não foi possível excluir o download",
|
"could_not_delete_download": "Não foi possível excluir o download",
|
||||||
"download_paused": "Download Pausado",
|
|
||||||
"could_not_pause_download": "Não foi possível Pausar o Download",
|
|
||||||
"download_resumed": "Download Retomado",
|
|
||||||
"could_not_resume_download": "Não foi possível retomar o download",
|
|
||||||
"download_completed": "Download concluído",
|
"download_completed": "Download concluído",
|
||||||
"download_failed": "Download Falhou",
|
"download_failed": "Download Falhou",
|
||||||
"download_failed_for_item": "Download Falhou para {{item}} - {{error}}",
|
"download_failed_for_item": "Download Falhou para {{item}} - {{error}}",
|
||||||
@@ -562,10 +475,7 @@
|
|||||||
"item_already_downloading": "{{item}} já está sendo baixado",
|
"item_already_downloading": "{{item}} já está sendo baixado",
|
||||||
"all_files_deleted": "Todos os Downloads Excluídos com Sucesso",
|
"all_files_deleted": "Todos os Downloads Excluídos com Sucesso",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} excluído",
|
"files_deleted_by_type": "{{count}} {{type}} excluído",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Todos os arquivos, pastas e trabalhos excluídos com sucesso",
|
|
||||||
"failed_to_clean_cache_directory": "Falha ao limpar o diretório de cache",
|
|
||||||
"could_not_get_download_url_for_item": "Não foi possível obter o URL de download para {{itemName}}",
|
"could_not_get_download_url_for_item": "Não foi possível obter o URL de download para {{itemName}}",
|
||||||
"go_to_downloads": "Ir para Downloads",
|
|
||||||
"file_deleted": "{{item}} deletado"
|
"file_deleted": "{{item}} deletado"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +493,13 @@
|
|||||||
"none": "Nenhum",
|
"none": "Nenhum",
|
||||||
"track": "Faixa",
|
"track": "Faixa",
|
||||||
"cancel": "Cancelar",
|
"cancel": "Cancelar",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Apagar",
|
"delete": "Apagar",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remover",
|
"remove": "Remover",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login"
|
||||||
"refresh": "Refresh"
|
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Buscar...",
|
"search": "Buscar...",
|
||||||
@@ -691,10 +598,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Não foi possível criar um fluxo para o Chromecast",
|
"could_not_create_stream_for_chromecast": "Não foi possível criar um fluxo para o Chromecast",
|
||||||
"message_from_server": "Mensagem do Servidor: {{message}}",
|
"message_from_server": "Mensagem do Servidor: {{message}}",
|
||||||
"next_episode": "Próximo Episódio",
|
"next_episode": "Próximo Episódio",
|
||||||
"refresh_tracks": "Atualizar Faixas",
|
|
||||||
"audio_tracks": "Faixas de Áudio:",
|
|
||||||
"playback_state": "Estado de Reprodução:",
|
|
||||||
"index": "Índice",
|
|
||||||
"continue_watching": "Continuar assistindo",
|
"continue_watching": "Continuar assistindo",
|
||||||
"go_back": "Voltar atrás",
|
"go_back": "Voltar atrás",
|
||||||
"downloaded_file_title": "Você já fez o download deste arquivo",
|
"downloaded_file_title": "Você já fez o download deste arquivo",
|
||||||
@@ -761,7 +664,6 @@
|
|||||||
"show_more": "Mostrar mais",
|
"show_more": "Mostrar mais",
|
||||||
"show_less": "Mostrar menos",
|
"show_less": "Mostrar menos",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -888,13 +790,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "faixas"
|
"tracks": "faixas"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "Tudo"
|
|
||||||
},
|
|
||||||
"recently_added": "Adicionado recentemente",
|
"recently_added": "Adicionado recentemente",
|
||||||
"recently_played": "Reproduzido Recentemente",
|
"recently_played": "Reproduzido Recentemente",
|
||||||
"frequently_played": "Reproduzidos com frequência",
|
"frequently_played": "Reproduzidos com frequência",
|
||||||
"explore": "Explorar",
|
|
||||||
"top_tracks": "Músicas populares",
|
"top_tracks": "Músicas populares",
|
||||||
"play": "Reproduzir",
|
"play": "Reproduzir",
|
||||||
"shuffle": "Alteatório",
|
"shuffle": "Alteatório",
|
||||||
@@ -1028,7 +926,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -100,7 +100,6 @@
|
|||||||
"continue_and_next_up": "Continue & Next Up",
|
"continue_and_next_up": "Continue & Next Up",
|
||||||
"recently_added_in": "Adăugat recent în {{libraryName}}",
|
"recently_added_in": "Adăugat recent în {{libraryName}}",
|
||||||
"suggested_movies": "Filme sugerate",
|
"suggested_movies": "Filme sugerate",
|
||||||
"suggested_episodes": "Episoade sugerate",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Bun venit la Streamyfin",
|
"welcome_to_streamyfin": "Bun venit la Streamyfin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "Un client gratuit și open-source pentru Jellyfin.",
|
"a_free_and_open_source_client_for_jellyfin": "Un client gratuit și open-source pentru Jellyfin.",
|
||||||
@@ -261,43 +260,6 @@
|
|||||||
"None": "Niciuna",
|
"None": "Niciuna",
|
||||||
"OnlyForced": "OnlyForced"
|
"OnlyForced": "OnlyForced"
|
||||||
},
|
},
|
||||||
"text_color": "Culoare text",
|
|
||||||
"background_color": "Culoare fundal",
|
|
||||||
"outline_color": "Culoare contur",
|
|
||||||
"outline_thickness": "Grosime contur",
|
|
||||||
"background_opacity": "Opacitatea fundalului",
|
|
||||||
"outline_opacity": "Opacitatea conturului",
|
|
||||||
"bold_text": "Bold Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Negru",
|
|
||||||
"Gray": "Gri",
|
|
||||||
"Silver": "Argint",
|
|
||||||
"White": "Alb",
|
|
||||||
"Maroon": "Maro",
|
|
||||||
"Red": "Roșu",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Galben",
|
|
||||||
"Olive": "Oliv",
|
|
||||||
"Green": "Verde",
|
|
||||||
"Teal": "Turcoaz",
|
|
||||||
"Lime": "Verde-Deschis",
|
|
||||||
"Purple": "Violet",
|
|
||||||
"Navy": "Marină",
|
|
||||||
"Blue": "Albastru",
|
|
||||||
"Aqua": "Aqua"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Nimic",
|
|
||||||
"Thin": "Subțire",
|
|
||||||
"Normal": "Normală",
|
|
||||||
"Thick": "Grozav"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +277,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video Player",
|
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Altele",
|
"other_title": "Altele",
|
||||||
"video_orientation": "Orientarea video",
|
"video_orientation": "Orientarea video",
|
||||||
@@ -351,13 +294,7 @@
|
|||||||
"UNKNOWN": "Necunoscut"
|
"UNKNOWN": "Necunoscut"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Zona sigură pentru controale",
|
"safe_area_in_controls": "Zona sigură pentru controale",
|
||||||
"video_player": "Player video",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Experimental + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Afișează link-uri personalizate în meniu",
|
"show_custom_menu_links": "Afișează link-uri personalizate în meniu",
|
||||||
"show_large_home_carousel": "Arată Caruselul Media Mare (beta)",
|
|
||||||
"hide_libraries": "Ascunde bibliotecile",
|
"hide_libraries": "Ascunde bibliotecile",
|
||||||
"select_liraries_you_want_to_hide": "Selectează bibliotecile pe care dorești să le ascunzi din fila Bibliotecă și din secțiunile paginii principale.",
|
"select_liraries_you_want_to_hide": "Selectează bibliotecile pe care dorești să le ascunzi din fila Bibliotecă și din secțiunile paginii principale.",
|
||||||
"disable_haptic_feedback": "Dezactivează vibrațiile tactile",
|
"disable_haptic_feedback": "Dezactivează vibrațiile tactile",
|
||||||
@@ -367,9 +304,6 @@
|
|||||||
"max_auto_play_episode_count": "Maxim episoade redare automată",
|
"max_auto_play_episode_count": "Maxim episoade redare automată",
|
||||||
"disabled": "Dezactivat"
|
"disabled": "Dezactivat"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Descărcări"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +347,18 @@
|
|||||||
"read_more_about_marlin": "Citește mai multe despre Marlin.",
|
"read_more_about_marlin": "Citește mai multe despre Marlin.",
|
||||||
"save_button": "Salvează",
|
"save_button": "Salvează",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Salvat",
|
"saved": "Salvat"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +374,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +385,6 @@
|
|||||||
"delete_all_downloaded_files": "Ștergeți toate fișierele descărcate",
|
"delete_all_downloaded_files": "Ștergeți toate fișierele descărcate",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +394,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -481,8 +406,7 @@
|
|||||||
"export_logs": "Export loguri",
|
"export_logs": "Export loguri",
|
||||||
"click_for_more_info": "Apasă pt mai multe informații",
|
"click_for_more_info": "Apasă pt mai multe informații",
|
||||||
"level": "Nivel",
|
"level": "Nivel",
|
||||||
"no_logs_available": "Niciun log disponibil",
|
"no_logs_available": "Niciun log disponibil"
|
||||||
"delete_all_logs": "Șterge toate logurile"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Limbi",
|
"title": "Limbi",
|
||||||
@@ -490,15 +414,12 @@
|
|||||||
"system": "Sistem"
|
"system": "Sistem"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Eroare la ștergerea fișierelor",
|
"error_deleting_files": "Eroare la ștergerea fișierelor"
|
||||||
"background_downloads_enabled": "Descărcări în fundal activate",
|
|
||||||
"background_downloads_disabled": "Descărcări în fundal dezactivate"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -518,10 +439,7 @@
|
|||||||
"downloads_title": "Descărcări",
|
"downloads_title": "Descărcări",
|
||||||
"tvseries": "Seriale",
|
"tvseries": "Seriale",
|
||||||
"movies": "Filme",
|
"movies": "Filme",
|
||||||
"queue": "Coadă",
|
|
||||||
"other_media": "Alte suporturi",
|
"other_media": "Alte suporturi",
|
||||||
"queue_hint": "Descărcările se vor pierde la repornirea aplicației",
|
|
||||||
"no_items_in_queue": "Niciun articol în coadă",
|
|
||||||
"no_downloaded_items": "Niciun element descărcat",
|
"no_downloaded_items": "Niciun element descărcat",
|
||||||
"delete_all_movies_button": "Șterge toate filmele",
|
"delete_all_movies_button": "Șterge toate filmele",
|
||||||
"delete_all_tvseries_button": "Șterge toate serialele",
|
"delete_all_tvseries_button": "Șterge toate serialele",
|
||||||
@@ -546,13 +464,8 @@
|
|||||||
"failed_to_delete_all_tvseries": "Nu s-au putut șterge toate serialele",
|
"failed_to_delete_all_tvseries": "Nu s-au putut șterge toate serialele",
|
||||||
"deleted_media_successfully": "Alte fișiere șterse cu succes!",
|
"deleted_media_successfully": "Alte fișiere șterse cu succes!",
|
||||||
"failed_to_delete_media": "Ștergerea altor fișiere media a eșuat",
|
"failed_to_delete_media": "Ștergerea altor fișiere media a eșuat",
|
||||||
"download_deleted": "Descărcare ştearsă",
|
|
||||||
"download_cancelled": "Descărcare anulată",
|
"download_cancelled": "Descărcare anulată",
|
||||||
"could_not_delete_download": "Nu s-a putut șterge descărcarea",
|
"could_not_delete_download": "Nu s-a putut șterge descărcarea",
|
||||||
"download_paused": "Descărcare întreruptă",
|
|
||||||
"could_not_pause_download": "Nu s-a putut întrerupe descărcarea",
|
|
||||||
"download_resumed": "Descărcare din nou",
|
|
||||||
"could_not_resume_download": "Nu s-a putut relua descărcarea",
|
|
||||||
"download_completed": "Descărcare completă",
|
"download_completed": "Descărcare completă",
|
||||||
"download_failed": "Descărcare eșuată",
|
"download_failed": "Descărcare eșuată",
|
||||||
"download_failed_for_item": "Descărcarea a eșuat {{item}} - {{error}}",
|
"download_failed_for_item": "Descărcarea a eșuat {{item}} - {{error}}",
|
||||||
@@ -562,10 +475,7 @@
|
|||||||
"item_already_downloading": "{{item}} se descarcă deja",
|
"item_already_downloading": "{{item}} se descarcă deja",
|
||||||
"all_files_deleted": "Toate descărcările au fost șterse cu succes",
|
"all_files_deleted": "Toate descărcările au fost șterse cu succes",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} au fost șterse",
|
"files_deleted_by_type": "{{count}} {{type}} au fost șterse",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Toate fișierele, folderele și lucrările au fost șterse cu succes",
|
|
||||||
"failed_to_clean_cache_directory": "Curățarea directorului cache a eșuat",
|
|
||||||
"could_not_get_download_url_for_item": "Nu s-a putut obține URL-ul de descărcare pentru {{itemName}}",
|
"could_not_get_download_url_for_item": "Nu s-a putut obține URL-ul de descărcare pentru {{itemName}}",
|
||||||
"go_to_downloads": "Accesați descărcările",
|
|
||||||
"file_deleted": "{{item}} șters"
|
"file_deleted": "{{item}} șters"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +493,13 @@
|
|||||||
"none": "Nimic",
|
"none": "Nimic",
|
||||||
"track": "Limbă audio",
|
"track": "Limbă audio",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login"
|
||||||
"refresh": "Refresh"
|
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Caută...",
|
"search": "Caută...",
|
||||||
@@ -691,10 +598,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Nu s-a putut crea un flux pentru Chromecast",
|
"could_not_create_stream_for_chromecast": "Nu s-a putut crea un flux pentru Chromecast",
|
||||||
"message_from_server": "Mesaj de la server: {{message}}",
|
"message_from_server": "Mesaj de la server: {{message}}",
|
||||||
"next_episode": "Episodul următor",
|
"next_episode": "Episodul următor",
|
||||||
"refresh_tracks": "Reîmprospătare piese",
|
|
||||||
"audio_tracks": "Audio:",
|
|
||||||
"playback_state": "Stare de redare:",
|
|
||||||
"index": "Indice:",
|
|
||||||
"continue_watching": "Continuă să vizionezi",
|
"continue_watching": "Continuă să vizionezi",
|
||||||
"go_back": "Înapoi",
|
"go_back": "Înapoi",
|
||||||
"downloaded_file_title": "Aveţi acest fişier descărcat",
|
"downloaded_file_title": "Aveţi acest fişier descărcat",
|
||||||
@@ -761,7 +664,6 @@
|
|||||||
"show_more": "Arată mai mult",
|
"show_more": "Arată mai mult",
|
||||||
"show_less": "Arată mai puțin",
|
"show_less": "Arată mai puțin",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -888,13 +790,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +926,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -100,7 +100,6 @@
|
|||||||
"continue_and_next_up": "Продолжить и Далее",
|
"continue_and_next_up": "Продолжить и Далее",
|
||||||
"recently_added_in": "Недавно добавлено в {{libraryName}}",
|
"recently_added_in": "Недавно добавлено в {{libraryName}}",
|
||||||
"suggested_movies": "Предложенные фильмы",
|
"suggested_movies": "Предложенные фильмы",
|
||||||
"suggested_episodes": "Предложенные серии",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Добро пожаловать в Streamyfin",
|
"welcome_to_streamyfin": "Добро пожаловать в Streamyfin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "Бесплатный клиент для Jellyfin с открытым кодом.",
|
"a_free_and_open_source_client_for_jellyfin": "Бесплатный клиент для Jellyfin с открытым кодом.",
|
||||||
@@ -261,43 +260,6 @@
|
|||||||
"None": "Отсутствует",
|
"None": "Отсутствует",
|
||||||
"OnlyForced": "Только принудительные"
|
"OnlyForced": "Только принудительные"
|
||||||
},
|
},
|
||||||
"text_color": "Цвет текста",
|
|
||||||
"background_color": "Цвет фона",
|
|
||||||
"outline_color": "Цвет контура",
|
|
||||||
"outline_thickness": "Толщина контура",
|
|
||||||
"background_opacity": "Прозрачность фона",
|
|
||||||
"outline_opacity": "Прозрачность контура",
|
|
||||||
"bold_text": "Жирный",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Черный",
|
|
||||||
"Gray": "Серый",
|
|
||||||
"Silver": "Серебристый",
|
|
||||||
"White": "Белый",
|
|
||||||
"Maroon": "Бордовый",
|
|
||||||
"Red": "Красный",
|
|
||||||
"Fuchsia": "Пурпурный",
|
|
||||||
"Yellow": "Жёлтый",
|
|
||||||
"Olive": "Оливковый",
|
|
||||||
"Green": "Зелёный",
|
|
||||||
"Teal": "Бирюзовый",
|
|
||||||
"Lime": "Лаймовый",
|
|
||||||
"Purple": "Фиолетовый",
|
|
||||||
"Navy": "Тёмно-синий",
|
|
||||||
"Blue": "Синий",
|
|
||||||
"Aqua": "Голубой"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Отсутствует",
|
|
||||||
"Thin": "Тонкий",
|
|
||||||
"Normal": "Обычный",
|
|
||||||
"Thick": "Толстый"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Цвет субтитров",
|
|
||||||
"subtitle_background_color": "Цвет фона",
|
|
||||||
"subtitle_font": "Шрифт субтитров",
|
|
||||||
"ksplayer_title": "Настройки KSPlayer",
|
|
||||||
"hardware_decode": "Аппаратное декодирование",
|
|
||||||
"hardware_decode_description": "Использовать аппаратное ускорение для декодирования видео. Выключите, если наблюдаете проблемы с воспроизведением.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +277,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "Настройки субтитров в VLC",
|
|
||||||
"hint": "Настройте внешний вид субтитров в VLC плеере. Изменения применятся при следующем воспроизведении.",
|
|
||||||
"text_color": "Цвет текста",
|
|
||||||
"background_color": "Цвет фона",
|
|
||||||
"background_opacity": "Прозрачность фона",
|
|
||||||
"outline_color": "Цвет контура",
|
|
||||||
"outline_opacity": "Прозрачность контура",
|
|
||||||
"outline_thickness": "Толщина контура",
|
|
||||||
"bold": "Жирный",
|
|
||||||
"margin": "Отступ снизу"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Видео плеер",
|
|
||||||
"video_player": "Видео плеер",
|
|
||||||
"video_player_description": "Выберите видео плеер в iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Другое",
|
"other_title": "Другое",
|
||||||
"video_orientation": "Ориентация видео",
|
"video_orientation": "Ориентация видео",
|
||||||
@@ -351,13 +294,7 @@
|
|||||||
"UNKNOWN": "Неизвестное"
|
"UNKNOWN": "Неизвестное"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Безопасная зона в элементах управления",
|
"safe_area_in_controls": "Безопасная зона в элементах управления",
|
||||||
"video_player": "Видео плеер",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Экспериментальный + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Показать ссылки пользовательского меню",
|
"show_custom_menu_links": "Показать ссылки пользовательского меню",
|
||||||
"show_large_home_carousel": "Показывать большую карусель (beta)",
|
|
||||||
"hide_libraries": "Скрыть библиотеки",
|
"hide_libraries": "Скрыть библиотеки",
|
||||||
"select_liraries_you_want_to_hide": "Выберите Библиотеки, которое хотите спрятать из вкладки Библиотеки и домашней страницы.",
|
"select_liraries_you_want_to_hide": "Выберите Библиотеки, которое хотите спрятать из вкладки Библиотеки и домашней страницы.",
|
||||||
"disable_haptic_feedback": "Отключить тактильную обратную связь",
|
"disable_haptic_feedback": "Отключить тактильную обратную связь",
|
||||||
@@ -367,9 +304,6 @@
|
|||||||
"max_auto_play_episode_count": "Максимальное количество авто воспроизводимых эпизодов",
|
"max_auto_play_episode_count": "Максимальное количество авто воспроизводимых эпизодов",
|
||||||
"disabled": "Отключено"
|
"disabled": "Отключено"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Загрузки"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Музыка",
|
"title": "Музыка",
|
||||||
"playback_title": "Воспроизведение",
|
"playback_title": "Воспроизведение",
|
||||||
@@ -413,23 +347,18 @@
|
|||||||
"read_more_about_marlin": "Узнать больше о Marlin.",
|
"read_more_about_marlin": "Узнать больше о Marlin.",
|
||||||
"save_button": "Сохранить",
|
"save_button": "Сохранить",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Сохранено",
|
"saved": "Сохранено"
|
||||||
"refreshed": "Настройки обновлены с сервера"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Обновить настройки с сервера"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Включить Streamystats",
|
|
||||||
"disable_streamystats": "Выключить Streamystats",
|
"disable_streamystats": "Выключить Streamystats",
|
||||||
"enable_search": "Использовать в поиске",
|
"enable_search": "Использовать в поиске",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Введите URL вашего сервера Streamystats. URL должен включать http/https и порт при необходимости.",
|
"streamystats_search_hint": "Введите URL вашего сервера Streamystats. URL должен включать http/https и порт при необходимости.",
|
||||||
"read_more_about_streamystats": "Узнать больше про Streamystats.",
|
"read_more_about_streamystats": "Узнать больше про Streamystats.",
|
||||||
"save_button": "Сохранить",
|
|
||||||
"save": "Сохранить",
|
"save": "Сохранить",
|
||||||
"features_title": "Функции",
|
"features_title": "Функции",
|
||||||
"home_sections_title": "Показывать на главной",
|
|
||||||
"enable_movie_recommendations": "Рекомендации фильмов",
|
"enable_movie_recommendations": "Рекомендации фильмов",
|
||||||
"enable_series_recommendations": "Рекомендации сериалов",
|
"enable_series_recommendations": "Рекомендации сериалов",
|
||||||
"enable_promoted_watchlists": "Продвигаемые списки просмотра",
|
"enable_promoted_watchlists": "Продвигаемые списки просмотра",
|
||||||
@@ -445,8 +374,7 @@
|
|||||||
"refresh_from_server": "Обновить настройки с сервера"
|
"refresh_from_server": "Обновить настройки с сервера"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Включить интеграцию со списками просмотра",
|
"watchlist_enabler": "Включить интеграцию со списками просмотра"
|
||||||
"watchlist_button": "Изменить интеграцию со списками просмотра"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +385,6 @@
|
|||||||
"delete_all_downloaded_files": "Удалить все загруженные файлы",
|
"delete_all_downloaded_files": "Удалить все загруженные файлы",
|
||||||
"music_cache_title": "Кеш музыки",
|
"music_cache_title": "Кеш музыки",
|
||||||
"music_cache_description": "Автоматически кешировать песни по мере прослушивания для плавного воспроизведения и поддержки отсутствия интернета",
|
"music_cache_description": "Автоматически кешировать песни по мере прослушивания для плавного воспроизведения и поддержки отсутствия интернета",
|
||||||
"enable_music_cache": "Кешировать музыку",
|
|
||||||
"clear_music_cache": "Очистить кеш музыки",
|
"clear_music_cache": "Очистить кеш музыки",
|
||||||
"music_cache_size": "Кешировано: {{size}}",
|
"music_cache_size": "Кешировано: {{size}}",
|
||||||
"music_cache_cleared": "Кеш музыки очищен",
|
"music_cache_cleared": "Кеш музыки очищен",
|
||||||
@@ -467,8 +394,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -481,8 +406,7 @@
|
|||||||
"export_logs": "Сохранить логи",
|
"export_logs": "Сохранить логи",
|
||||||
"click_for_more_info": "Нажмите для получения дополнительной информации",
|
"click_for_more_info": "Нажмите для получения дополнительной информации",
|
||||||
"level": "Уровень",
|
"level": "Уровень",
|
||||||
"no_logs_available": "Логи не доступны",
|
"no_logs_available": "Логи не доступны"
|
||||||
"delete_all_logs": "Удалить все логи"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Языки",
|
"title": "Языки",
|
||||||
@@ -490,15 +414,12 @@
|
|||||||
"system": "Системный"
|
"system": "Системный"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Ошибка при удалении файлов",
|
"error_deleting_files": "Ошибка при удалении файлов"
|
||||||
"background_downloads_enabled": "Фоновая загрузка включена",
|
|
||||||
"background_downloads_disabled": "Фоновая загрузка отключена"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -518,10 +439,7 @@
|
|||||||
"downloads_title": "Загрузки",
|
"downloads_title": "Загрузки",
|
||||||
"tvseries": "Сериалы",
|
"tvseries": "Сериалы",
|
||||||
"movies": "Фильмы",
|
"movies": "Фильмы",
|
||||||
"queue": "Очередь",
|
|
||||||
"other_media": "Прочие файлы",
|
"other_media": "Прочие файлы",
|
||||||
"queue_hint": "Очередь очистится после перезапуска",
|
|
||||||
"no_items_in_queue": "Нет элементов в очереди",
|
|
||||||
"no_downloaded_items": "Нет загруженных файлов",
|
"no_downloaded_items": "Нет загруженных файлов",
|
||||||
"delete_all_movies_button": "Удалить все фильмы",
|
"delete_all_movies_button": "Удалить все фильмы",
|
||||||
"delete_all_tvseries_button": "Удалить все сериалы",
|
"delete_all_tvseries_button": "Удалить все сериалы",
|
||||||
@@ -546,13 +464,8 @@
|
|||||||
"failed_to_delete_all_tvseries": "Возникла ошибка при удалении всех сериалов",
|
"failed_to_delete_all_tvseries": "Возникла ошибка при удалении всех сериалов",
|
||||||
"deleted_media_successfully": "Остальные медиафайлы успешно удалены!",
|
"deleted_media_successfully": "Остальные медиафайлы успешно удалены!",
|
||||||
"failed_to_delete_media": "Не удалось удалить остальные медиафайлы",
|
"failed_to_delete_media": "Не удалось удалить остальные медиафайлы",
|
||||||
"download_deleted": "Загруженный контент удалён",
|
|
||||||
"download_cancelled": "Загрузка отменена",
|
"download_cancelled": "Загрузка отменена",
|
||||||
"could_not_delete_download": "Не удалось удалить загрузку",
|
"could_not_delete_download": "Не удалось удалить загрузку",
|
||||||
"download_paused": "На паузе",
|
|
||||||
"could_not_pause_download": "Не удалось приостановить загрузку",
|
|
||||||
"download_resumed": "Продолжено",
|
|
||||||
"could_not_resume_download": "Не удалось возобновить загрузку",
|
|
||||||
"download_completed": "Завершено",
|
"download_completed": "Завершено",
|
||||||
"download_failed": "Не удалось загрузить",
|
"download_failed": "Не удалось загрузить",
|
||||||
"download_failed_for_item": "Загрузка {{item}} провалилась с ошибкой: {{error}}",
|
"download_failed_for_item": "Загрузка {{item}} провалилась с ошибкой: {{error}}",
|
||||||
@@ -562,10 +475,7 @@
|
|||||||
"item_already_downloading": "{{item}} уже загружается",
|
"item_already_downloading": "{{item}} уже загружается",
|
||||||
"all_files_deleted": "Все загрузки удалены",
|
"all_files_deleted": "Все загрузки удалены",
|
||||||
"files_deleted_by_type": "Удалено: {{count}} {{type}}",
|
"files_deleted_by_type": "Удалено: {{count}} {{type}}",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Все файлы, папки, и задачи были успешно удалены",
|
|
||||||
"failed_to_clean_cache_directory": "Не удалось очистить директорию кэша",
|
|
||||||
"could_not_get_download_url_for_item": "Не удалось получить URL для загрузки {{itemName}}",
|
"could_not_get_download_url_for_item": "Не удалось получить URL для загрузки {{itemName}}",
|
||||||
"go_to_downloads": "В загрузки",
|
|
||||||
"file_deleted": "Удалено: {{item}}"
|
"file_deleted": "Удалено: {{item}}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +493,13 @@
|
|||||||
"none": "Отсутствует",
|
"none": "Отсутствует",
|
||||||
"track": "Трек",
|
"track": "Трек",
|
||||||
"cancel": "Отмена",
|
"cancel": "Отмена",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Удалить",
|
"delete": "Удалить",
|
||||||
"ok": "ОК",
|
"ok": "ОК",
|
||||||
"remove": "Удалить",
|
"remove": "Удалить",
|
||||||
"next": "Вперед",
|
|
||||||
"back": "Назад",
|
"back": "Назад",
|
||||||
"continue": "Продолжить",
|
"continue": "Продолжить",
|
||||||
"verifying": "Проверка...",
|
"verifying": "Проверка...",
|
||||||
"login": "Login",
|
"login": "Login"
|
||||||
"refresh": "Refresh"
|
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Поиск...",
|
"search": "Поиск...",
|
||||||
@@ -691,10 +598,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Не удалось создать поток для Chromecast",
|
"could_not_create_stream_for_chromecast": "Не удалось создать поток для Chromecast",
|
||||||
"message_from_server": "Сообщение от сервера: {{message}}",
|
"message_from_server": "Сообщение от сервера: {{message}}",
|
||||||
"next_episode": "Следующая серия",
|
"next_episode": "Следующая серия",
|
||||||
"refresh_tracks": "Обновить дорожки",
|
|
||||||
"audio_tracks": "Аудио дорожки:",
|
|
||||||
"playback_state": "Состояние воспроизведения:",
|
|
||||||
"index": "Индекс:",
|
|
||||||
"continue_watching": "Продолжить просмотр",
|
"continue_watching": "Продолжить просмотр",
|
||||||
"go_back": "Назад",
|
"go_back": "Назад",
|
||||||
"downloaded_file_title": "Этот файл уже скачан",
|
"downloaded_file_title": "Этот файл уже скачан",
|
||||||
@@ -761,7 +664,6 @@
|
|||||||
"show_more": "Показать больше",
|
"show_more": "Показать больше",
|
||||||
"show_less": "Показать меньше",
|
"show_less": "Показать меньше",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -888,13 +790,9 @@
|
|||||||
"playlists": "Плейлисты",
|
"playlists": "Плейлисты",
|
||||||
"tracks": "треки"
|
"tracks": "треки"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "Все"
|
|
||||||
},
|
|
||||||
"recently_added": "Недавно добавлено",
|
"recently_added": "Недавно добавлено",
|
||||||
"recently_played": "Недавно воспроизведено",
|
"recently_played": "Недавно воспроизведено",
|
||||||
"frequently_played": "Часто играет",
|
"frequently_played": "Часто играет",
|
||||||
"explore": "Найти новое",
|
|
||||||
"top_tracks": "Топ",
|
"top_tracks": "Топ",
|
||||||
"play": "Воспроизвести",
|
"play": "Воспроизвести",
|
||||||
"shuffle": "Перемешать",
|
"shuffle": "Перемешать",
|
||||||
@@ -1028,7 +926,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -43,7 +43,6 @@
|
|||||||
"next_up": "I ardhshëm",
|
"next_up": "I ardhshëm",
|
||||||
"recently_added_in": "Shtuar kohët e fundit në {{libraryName}}",
|
"recently_added_in": "Shtuar kohët e fundit në {{libraryName}}",
|
||||||
"suggested_movies": "Filma të sugjeruar",
|
"suggested_movies": "Filma të sugjeruar",
|
||||||
"suggested_episodes": "Episodat të sugjeruara",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Mirë se vini në Streamyfin",
|
"welcome_to_streamyfin": "Mirë se vini në Streamyfin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "Një klient falas dhe me burim të hapur për Jellyfin.",
|
"a_free_and_open_source_client_for_jellyfin": "Një klient falas dhe me burim të hapur për Jellyfin.",
|
||||||
@@ -128,11 +127,6 @@
|
|||||||
"UNKNOWN": "E panjohur"
|
"UNKNOWN": "E panjohur"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Zonë e sigurt në kontrolla",
|
"safe_area_in_controls": "Zonë e sigurt në kontrolla",
|
||||||
"video_player": "Video lexues",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Eksperimentale + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Shfaq lidhje menuje të personalizuara",
|
"show_custom_menu_links": "Shfaq lidhje menuje të personalizuara",
|
||||||
"hide_libraries": "Fsheh bibliotekat",
|
"hide_libraries": "Fsheh bibliotekat",
|
||||||
"select_liraries_you_want_to_hide": "Zgjidhni bibliotekat që dëshironi të fshehni nga skeda e Bibliotekut dhe seksionet e faqes kryesore.",
|
"select_liraries_you_want_to_hide": "Zgjidhni bibliotekat që dëshironi të fshehni nga skeda e Bibliotekut dhe seksionet e faqes kryesore.",
|
||||||
@@ -140,7 +134,6 @@
|
|||||||
"default_quality": "Kvaliteti standard"
|
"default_quality": "Kvaliteti standard"
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "Shkarkime",
|
|
||||||
"optimized_versions_server": "Serveri i versioneve të optimizuara",
|
"optimized_versions_server": "Serveri i versioneve të optimizuara",
|
||||||
"save_button": "Ruaj",
|
"save_button": "Ruaj",
|
||||||
"optimized_server": "Server i optimizuar",
|
"optimized_server": "Server i optimizuar",
|
||||||
@@ -205,8 +198,7 @@
|
|||||||
"export_logs": "Eksporto regjistrin",
|
"export_logs": "Eksporto regjistrin",
|
||||||
"click_for_more_info": "Kliko për më shumë informacion",
|
"click_for_more_info": "Kliko për më shumë informacion",
|
||||||
"level": "Nivele",
|
"level": "Nivele",
|
||||||
"no_logs_available": "Nuk ka regjistrime të disponueshme",
|
"no_logs_available": "Nuk ka regjistrime të disponueshme"
|
||||||
"delete_all_logs": "Fshijë të gjitha regjistrimet"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Gjuhët",
|
"title": "Gjuhët",
|
||||||
@@ -216,8 +208,6 @@
|
|||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Gabim gjatë fshirjes së skedarëve",
|
"error_deleting_files": "Gabim gjatë fshirjes së skedarëve",
|
||||||
"background_downloads_enabled": "Shkarkimet në sfond aktivizuar",
|
|
||||||
"background_downloads_disabled": "Shkarkimet në sfond deaktivizuar",
|
|
||||||
"connected": "Lidhur",
|
"connected": "Lidhur",
|
||||||
"could_not_connect": "Nuk u mundet te vendoset kyqja",
|
"could_not_connect": "Nuk u mundet te vendoset kyqja",
|
||||||
"invalid_url": "URL i pavlefshme"
|
"invalid_url": "URL i pavlefshme"
|
||||||
@@ -231,9 +221,6 @@
|
|||||||
"downloads_title": "Shkarkimet",
|
"downloads_title": "Shkarkimet",
|
||||||
"tvseries": "Seriale TV",
|
"tvseries": "Seriale TV",
|
||||||
"movies": "Filma",
|
"movies": "Filma",
|
||||||
"queue": "Rradhë",
|
|
||||||
"queue_hint": "Rradhat dhe shkarkimet do të humbasin pas genstartit të aplikacionit",
|
|
||||||
"no_items_in_queue": "Nuk ka elemente në rradhë",
|
|
||||||
"no_downloaded_items": "Nuk ka shkarkime",
|
"no_downloaded_items": "Nuk ka shkarkime",
|
||||||
"delete_all_movies_button": "Fshijë të gjithë filmat",
|
"delete_all_movies_button": "Fshijë të gjithë filmat",
|
||||||
"delete_all_tvseries_button": "Fshijë të gjitha serialet TV",
|
"delete_all_tvseries_button": "Fshijë të gjitha serialet TV",
|
||||||
@@ -269,9 +256,7 @@
|
|||||||
"no_response_received_from_server": "Nuk u mor asnjë përgjigje nga serveri",
|
"no_response_received_from_server": "Nuk u mor asnjë përgjigje nga serveri",
|
||||||
"error_setting_up_the_request": "Gabim gjatë konfigurimit të kërkesës",
|
"error_setting_up_the_request": "Gabim gjatë konfigurimit të kërkesës",
|
||||||
"failed_to_start_download_for_item_unexpected_error": "Dështoj fillimi i shkarkimit për {{item}}: Gabim i papritur",
|
"failed_to_start_download_for_item_unexpected_error": "Dështoj fillimi i shkarkimit për {{item}}: Gabim i papritur",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Të gjitha skedarët, dosjet dhe detyrat u fshinë me sukses",
|
"an_error_occured_while_deleting_files_and_jobs": "Ndodhi një gabim gjatë fshirjes së skedarëve dhe detyrave"
|
||||||
"an_error_occured_while_deleting_files_and_jobs": "Ndodhi një gabim gjatë fshirjes së skedarëve dhe detyrave",
|
|
||||||
"go_to_downloads": "Shko te shkarkimet"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -365,12 +350,8 @@
|
|||||||
"video_has_finished_playing": "Videoja ka përfunduar shfaqjen!",
|
"video_has_finished_playing": "Videoja ka përfunduar shfaqjen!",
|
||||||
"no_video_source": "Asnjë burim video...",
|
"no_video_source": "Asnjë burim video...",
|
||||||
"next_episode": "Epizoda e ardhshme",
|
"next_episode": "Epizoda e ardhshme",
|
||||||
"refresh_tracks": "Rifresko shtigjet",
|
|
||||||
"subtitle_tracks": "Shtigjet e nënteksteve:",
|
"subtitle_tracks": "Shtigjet e nënteksteve:",
|
||||||
"audio_tracks": "Shtigjet audio:",
|
"no_data_available": "Nuk ka të dhëna të disponueshme"
|
||||||
"playback_state": "Gjendja e rishikimit:",
|
|
||||||
"no_data_available": "Nuk ka të dhëna të disponueshme",
|
|
||||||
"index": "Indeksi:"
|
|
||||||
},
|
},
|
||||||
"item_card": {
|
"item_card": {
|
||||||
"next_up": "E ardhshme",
|
"next_up": "E ardhshme",
|
||||||
|
|||||||
@@ -100,7 +100,6 @@
|
|||||||
"continue_and_next_up": "Fortsätt titta & nästa avsnitt",
|
"continue_and_next_up": "Fortsätt titta & nästa avsnitt",
|
||||||
"recently_added_in": "Nyligen tillagt i {{libraryName}}",
|
"recently_added_in": "Nyligen tillagt i {{libraryName}}",
|
||||||
"suggested_movies": "Filmförslag",
|
"suggested_movies": "Filmförslag",
|
||||||
"suggested_episodes": "Föreslagna avsnitt",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Välkommen till Streamyfin",
|
"welcome_to_streamyfin": "Välkommen till Streamyfin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "En gratis klient för Jellyfin med öppen källkod.",
|
"a_free_and_open_source_client_for_jellyfin": "En gratis klient för Jellyfin med öppen källkod.",
|
||||||
@@ -261,43 +260,6 @@
|
|||||||
"None": "Inga",
|
"None": "Inga",
|
||||||
"OnlyForced": "Bara Tvingande"
|
"OnlyForced": "Bara Tvingande"
|
||||||
},
|
},
|
||||||
"text_color": "Textfärg",
|
|
||||||
"background_color": "Bakgrundsfärg",
|
|
||||||
"outline_color": "Konturfärg",
|
|
||||||
"outline_thickness": "Konturtjocklek",
|
|
||||||
"background_opacity": "Bakgrundsgenomskinlighet",
|
|
||||||
"outline_opacity": "Kontursgenomskinlighet",
|
|
||||||
"bold_text": "FetStil",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Svart",
|
|
||||||
"Gray": "Grå",
|
|
||||||
"Silver": "Silver",
|
|
||||||
"White": "Vit",
|
|
||||||
"Maroon": "Rödbrun",
|
|
||||||
"Red": "Röd",
|
|
||||||
"Fuchsia": "Purpur",
|
|
||||||
"Yellow": "Gul",
|
|
||||||
"Olive": "Olivgrön",
|
|
||||||
"Green": "Grön",
|
|
||||||
"Teal": "Turkos",
|
|
||||||
"Lime": "Limegrön",
|
|
||||||
"Purple": "Lila",
|
|
||||||
"Navy": "Marinblå",
|
|
||||||
"Blue": "Blå",
|
|
||||||
"Aqua": "Aqua"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Inget",
|
|
||||||
"Thin": "Tunn",
|
|
||||||
"Normal": "Normal",
|
|
||||||
"Thick": "Tjock"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Undertextfärg",
|
|
||||||
"subtitle_background_color": "Bakgrundsfärg",
|
|
||||||
"subtitle_font": "Typsnitt för undertexter",
|
|
||||||
"ksplayer_title": "KSPlayer-inställningar",
|
|
||||||
"hardware_decode": "Hårdvaruavkodning",
|
|
||||||
"hardware_decode_description": "Använd hårdvaruacceleration för videoavkodning. Inaktivera om du upplever uppspelningsproblem.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Ange din OpenSubtitles API-nyckel för att aktivera klientbaserad undertextsökning som reserv när din Jellyfin-server inte har en undertextleverantör konfigurerad.",
|
"opensubtitles_hint": "Ange din OpenSubtitles API-nyckel för att aktivera klientbaserad undertextsökning som reserv när din Jellyfin-server inte har en undertextleverantör konfigurerad.",
|
||||||
"opensubtitles_api_key": "API-nyckel",
|
"opensubtitles_api_key": "API-nyckel",
|
||||||
@@ -315,25 +277,6 @@
|
|||||||
"bottom": "Botten"
|
"bottom": "Botten"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC undertextsinställningar",
|
|
||||||
"hint": "Anpassa undertextens utseende för VLC-spelare. Förändringar träder i kraft vid nästa uppspelning.",
|
|
||||||
"text_color": "Textfärg",
|
|
||||||
"background_color": "Bakgrundsfärg",
|
|
||||||
"background_opacity": "Bakgrundsgenomskinlighet",
|
|
||||||
"outline_color": "Konturfärg",
|
|
||||||
"outline_opacity": "Kontursgenomskinlighet",
|
|
||||||
"outline_thickness": "Konturtjocklek",
|
|
||||||
"bold": "FetStil",
|
|
||||||
"margin": "Nedre marginal"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Videospelare",
|
|
||||||
"video_player": "Videospelare",
|
|
||||||
"video_player_description": "Välj vilken videospelare som ska användas på iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Övrigt",
|
"other_title": "Övrigt",
|
||||||
"video_orientation": "Videoriktning",
|
"video_orientation": "Videoriktning",
|
||||||
@@ -351,13 +294,7 @@
|
|||||||
"UNKNOWN": "Okänt"
|
"UNKNOWN": "Okänt"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Säkert område i kontrollerna",
|
"safe_area_in_controls": "Säkert område i kontrollerna",
|
||||||
"video_player": "Videospelare",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Experimentell + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Visa anpassade menylänkar",
|
"show_custom_menu_links": "Visa anpassade menylänkar",
|
||||||
"show_large_home_carousel": "Visa toppbanner (beta)",
|
|
||||||
"hide_libraries": "Dölj bibliotek",
|
"hide_libraries": "Dölj bibliotek",
|
||||||
"select_liraries_you_want_to_hide": "Välj de bibliotek du vill dölja på fliken Bibliotek och på startsidan.",
|
"select_liraries_you_want_to_hide": "Välj de bibliotek du vill dölja på fliken Bibliotek och på startsidan.",
|
||||||
"disable_haptic_feedback": "Stäng av vibrationer",
|
"disable_haptic_feedback": "Stäng av vibrationer",
|
||||||
@@ -367,9 +304,6 @@
|
|||||||
"max_auto_play_episode_count": "Antal Avsnitt för Automatisk Uppspelning",
|
"max_auto_play_episode_count": "Antal Avsnitt för Automatisk Uppspelning",
|
||||||
"disabled": "Inaktiverad"
|
"disabled": "Inaktiverad"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Nedladdningar"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Musik",
|
"title": "Musik",
|
||||||
"playback_title": "Uppspelning",
|
"playback_title": "Uppspelning",
|
||||||
@@ -413,23 +347,18 @@
|
|||||||
"read_more_about_marlin": "Läs mer om Marlin.",
|
"read_more_about_marlin": "Läs mer om Marlin.",
|
||||||
"save_button": "Spara",
|
"save_button": "Spara",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Sparade",
|
"saved": "Sparade"
|
||||||
"refreshed": "Inställningarna uppdateras från servern"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Uppdatera inställningar från server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Aktivera Streamystats",
|
|
||||||
"disable_streamystats": "Inaktivera Streamystats",
|
"disable_streamystats": "Inaktivera Streamystats",
|
||||||
"enable_search": "Använd för sökning",
|
"enable_search": "Använd för sökning",
|
||||||
"url": "Webbadress",
|
"url": "Webbadress",
|
||||||
"server_url_placeholder": "http(s)://streamystats.exempel.se",
|
"server_url_placeholder": "http(s)://streamystats.exempel.se",
|
||||||
"streamystats_search_hint": "Ange URL för Marlin-servern. URL bör innehålla http eller https och vid behov port.",
|
"streamystats_search_hint": "Ange URL för Marlin-servern. URL bör innehålla http eller https och vid behov port.",
|
||||||
"read_more_about_streamystats": "Läs mer om Streamystats.",
|
"read_more_about_streamystats": "Läs mer om Streamystats.",
|
||||||
"save_button": "Spara",
|
|
||||||
"save": "Spara",
|
"save": "Spara",
|
||||||
"features_title": "Funktioner",
|
"features_title": "Funktioner",
|
||||||
"home_sections_title": "Hemsektioner",
|
|
||||||
"enable_movie_recommendations": "Filmrekommendationer",
|
"enable_movie_recommendations": "Filmrekommendationer",
|
||||||
"enable_series_recommendations": "serierekommendationer",
|
"enable_series_recommendations": "serierekommendationer",
|
||||||
"enable_promoted_watchlists": "rekommenderade listor att titta på",
|
"enable_promoted_watchlists": "rekommenderade listor att titta på",
|
||||||
@@ -445,8 +374,7 @@
|
|||||||
"refresh_from_server": "Uppdatera inställningar från server"
|
"refresh_from_server": "Uppdatera inställningar från server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Aktivera vår bevakningslista integration",
|
"watchlist_enabler": "Aktivera vår bevakningslista integration"
|
||||||
"watchlist_button": "sätt på/av bevakningslisteintegrationen"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +385,6 @@
|
|||||||
"delete_all_downloaded_files": "Ta bort alla nerladdade filer",
|
"delete_all_downloaded_files": "Ta bort alla nerladdade filer",
|
||||||
"music_cache_title": "Musikcache",
|
"music_cache_title": "Musikcache",
|
||||||
"music_cache_description": "Cacha automatiskt låtar när du lyssnar för smidigare uppspelning och offline-stöd",
|
"music_cache_description": "Cacha automatiskt låtar när du lyssnar för smidigare uppspelning och offline-stöd",
|
||||||
"enable_music_cache": "Aktivera musikcache",
|
|
||||||
"clear_music_cache": "Rensa musikcache",
|
"clear_music_cache": "Rensa musikcache",
|
||||||
"music_cache_size": "{{size}} cachad",
|
"music_cache_size": "{{size}} cachad",
|
||||||
"music_cache_cleared": "Musikcache rensad",
|
"music_cache_cleared": "Musikcache rensad",
|
||||||
@@ -467,8 +394,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -481,8 +406,7 @@
|
|||||||
"export_logs": "Exportera Loggar",
|
"export_logs": "Exportera Loggar",
|
||||||
"click_for_more_info": "Klicka för mer Information",
|
"click_for_more_info": "Klicka för mer Information",
|
||||||
"level": "Nivå",
|
"level": "Nivå",
|
||||||
"no_logs_available": "Inga Loggar Tillgängliga",
|
"no_logs_available": "Inga Loggar Tillgängliga"
|
||||||
"delete_all_logs": "Ta Bort Alla Loggar"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Språk",
|
"title": "Språk",
|
||||||
@@ -490,15 +414,12 @@
|
|||||||
"system": "System"
|
"system": "System"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Fel Vid Borttagning Av Filer",
|
"error_deleting_files": "Fel Vid Borttagning Av Filer"
|
||||||
"background_downloads_enabled": "Bakgrundsnedladdningar aktiverade",
|
|
||||||
"background_downloads_disabled": "Bakgrundsnedladdningar inaktiverade"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -518,10 +439,7 @@
|
|||||||
"downloads_title": "Nedladdningar",
|
"downloads_title": "Nedladdningar",
|
||||||
"tvseries": "TV-Serier",
|
"tvseries": "TV-Serier",
|
||||||
"movies": "Filmer",
|
"movies": "Filmer",
|
||||||
"queue": "Kö",
|
|
||||||
"other_media": "Annan media",
|
"other_media": "Annan media",
|
||||||
"queue_hint": "Kö och nedladdningar kommer försvinna vid omstart av appen",
|
|
||||||
"no_items_in_queue": "Inga objekt i Kön",
|
|
||||||
"no_downloaded_items": "Inga Nedladdade Objekt",
|
"no_downloaded_items": "Inga Nedladdade Objekt",
|
||||||
"delete_all_movies_button": "Ta Bort Alla Filmer",
|
"delete_all_movies_button": "Ta Bort Alla Filmer",
|
||||||
"delete_all_tvseries_button": "Ta Bort Alla TV-Serier",
|
"delete_all_tvseries_button": "Ta Bort Alla TV-Serier",
|
||||||
@@ -546,13 +464,8 @@
|
|||||||
"failed_to_delete_all_tvseries": "Det Gick Inte Att Ta Bort Alla TV-Serier",
|
"failed_to_delete_all_tvseries": "Det Gick Inte Att Ta Bort Alla TV-Serier",
|
||||||
"deleted_media_successfully": "Andra Medier Har Tagits Bort!",
|
"deleted_media_successfully": "Andra Medier Har Tagits Bort!",
|
||||||
"failed_to_delete_media": "Kunde Inte Ta Bort Andra Medier",
|
"failed_to_delete_media": "Kunde Inte Ta Bort Andra Medier",
|
||||||
"download_deleted": "Nedladdning Borttagen",
|
|
||||||
"download_cancelled": "Nerladdningen Avbruten",
|
"download_cancelled": "Nerladdningen Avbruten",
|
||||||
"could_not_delete_download": "Kunde Inte Ta Bort Nedladdning",
|
"could_not_delete_download": "Kunde Inte Ta Bort Nedladdning",
|
||||||
"download_paused": "Nedladdning Pausad",
|
|
||||||
"could_not_pause_download": "Kunde Inte Pausa Nedladdning",
|
|
||||||
"download_resumed": "Nedladdning Återupptagen",
|
|
||||||
"could_not_resume_download": "Kunde Inte Återuppta Nedladdning",
|
|
||||||
"download_completed": "Nedladdning Slutförd",
|
"download_completed": "Nedladdning Slutförd",
|
||||||
"download_failed": "Nerladdningen misslyckades",
|
"download_failed": "Nerladdningen misslyckades",
|
||||||
"download_failed_for_item": "Nedladdning misslyckades för {{item}} - {{error}}",
|
"download_failed_for_item": "Nedladdning misslyckades för {{item}} - {{error}}",
|
||||||
@@ -562,10 +475,7 @@
|
|||||||
"item_already_downloading": "{{item}} Laddas redan ner",
|
"item_already_downloading": "{{item}} Laddas redan ner",
|
||||||
"all_files_deleted": "Alla nedladdningar raderades",
|
"all_files_deleted": "Alla nedladdningar raderades",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} Raderad",
|
"files_deleted_by_type": "{{count}} {{type}} Raderad",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Alla filer, mappar och jobb har tagits bort",
|
|
||||||
"failed_to_clean_cache_directory": "Det gick inte att rensa cachemappen",
|
|
||||||
"could_not_get_download_url_for_item": "Kunde inte hämta nedladdnings-URL för {{itemName}}",
|
"could_not_get_download_url_for_item": "Kunde inte hämta nedladdnings-URL för {{itemName}}",
|
||||||
"go_to_downloads": "Gå till nedladdningar",
|
|
||||||
"file_deleted": "{{item}} Raderad"
|
"file_deleted": "{{item}} Raderad"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +493,13 @@
|
|||||||
"none": "Ingen",
|
"none": "Ingen",
|
||||||
"track": "Spår",
|
"track": "Spår",
|
||||||
"cancel": "Avbryt",
|
"cancel": "Avbryt",
|
||||||
"stop": "Stoppa",
|
|
||||||
"delete": "Ta bort",
|
"delete": "Ta bort",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Radera",
|
"remove": "Radera",
|
||||||
"next": "Nästa",
|
|
||||||
"back": "Tillbaka",
|
"back": "Tillbaka",
|
||||||
"continue": "Fortsätt",
|
"continue": "Fortsätt",
|
||||||
"verifying": "Verifierar...",
|
"verifying": "Verifierar...",
|
||||||
"login": "Logga in",
|
"login": "Logga in"
|
||||||
"refresh": "Uppdatera"
|
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Sök...",
|
"search": "Sök...",
|
||||||
@@ -691,10 +598,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Kunde inte skapa stream för Chromecast",
|
"could_not_create_stream_for_chromecast": "Kunde inte skapa stream för Chromecast",
|
||||||
"message_from_server": "Meddelande från servern: {{message}}",
|
"message_from_server": "Meddelande från servern: {{message}}",
|
||||||
"next_episode": "Nästa avsnitt",
|
"next_episode": "Nästa avsnitt",
|
||||||
"refresh_tracks": "Uppdatera spår",
|
|
||||||
"audio_tracks": "Ljudspår:",
|
|
||||||
"playback_state": "Uppspelningsstatus:",
|
|
||||||
"index": "Index:",
|
|
||||||
"continue_watching": "Fortsätt titta",
|
"continue_watching": "Fortsätt titta",
|
||||||
"go_back": "Tillbaka",
|
"go_back": "Tillbaka",
|
||||||
"downloaded_file_title": "Du har denna fil nedladdad",
|
"downloaded_file_title": "Du har denna fil nedladdad",
|
||||||
@@ -761,7 +664,6 @@
|
|||||||
"show_more": "Visa Mer",
|
"show_more": "Visa Mer",
|
||||||
"show_less": "Visa Mindre",
|
"show_less": "Visa Mindre",
|
||||||
"left": "kvar",
|
"left": "kvar",
|
||||||
"more_info": "Mer info",
|
|
||||||
"director": "Regissör",
|
"director": "Regissör",
|
||||||
"cast": "Skådespelare",
|
"cast": "Skådespelare",
|
||||||
"technical_details": "Tekniska detaljer",
|
"technical_details": "Tekniska detaljer",
|
||||||
@@ -888,13 +790,9 @@
|
|||||||
"playlists": "Spellistor",
|
"playlists": "Spellistor",
|
||||||
"tracks": "spår"
|
"tracks": "spår"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "Alla"
|
|
||||||
},
|
|
||||||
"recently_added": "Nyligen tillagt",
|
"recently_added": "Nyligen tillagt",
|
||||||
"recently_played": "Nyligen spelat",
|
"recently_played": "Nyligen spelat",
|
||||||
"frequently_played": "Spelas ofta",
|
"frequently_played": "Spelas ofta",
|
||||||
"explore": "Utforska",
|
|
||||||
"top_tracks": "Toppspår",
|
"top_tracks": "Toppspår",
|
||||||
"play": "Spela",
|
"play": "Spela",
|
||||||
"shuffle": "Blanda spår",
|
"shuffle": "Blanda spår",
|
||||||
@@ -1028,7 +926,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -100,7 +100,6 @@
|
|||||||
"continue_and_next_up": "Continue & Next Up",
|
"continue_and_next_up": "Continue & Next Up",
|
||||||
"recently_added_in": "Recently Added in {{libraryName}}",
|
"recently_added_in": "Recently Added in {{libraryName}}",
|
||||||
"suggested_movies": "Suggested Movies",
|
"suggested_movies": "Suggested Movies",
|
||||||
"suggested_episodes": "Suggested Episodes",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Welcome to Streamyfin",
|
"welcome_to_streamyfin": "Welcome to Streamyfin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "A Free and Open-Source Client for Jellyfin.",
|
"a_free_and_open_source_client_for_jellyfin": "A Free and Open-Source Client for Jellyfin.",
|
||||||
@@ -261,43 +260,6 @@
|
|||||||
"None": "None",
|
"None": "None",
|
||||||
"OnlyForced": "OnlyForced"
|
"OnlyForced": "OnlyForced"
|
||||||
},
|
},
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"bold_text": "Bold Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Black",
|
|
||||||
"Gray": "Gray",
|
|
||||||
"Silver": "Silver",
|
|
||||||
"White": "White",
|
|
||||||
"Maroon": "Maroon",
|
|
||||||
"Red": "Red",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Yellow",
|
|
||||||
"Olive": "Olive",
|
|
||||||
"Green": "Green",
|
|
||||||
"Teal": "Teal",
|
|
||||||
"Lime": "Lime",
|
|
||||||
"Purple": "Purple",
|
|
||||||
"Navy": "Navy",
|
|
||||||
"Blue": "สีน้ำเงิน",
|
|
||||||
"Aqua": "Aqua"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "None",
|
|
||||||
"Thin": "Thin",
|
|
||||||
"Normal": "Normal",
|
|
||||||
"Thick": "Thick"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +277,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video Player",
|
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Other",
|
"other_title": "Other",
|
||||||
"video_orientation": "Video Orientation",
|
"video_orientation": "Video Orientation",
|
||||||
@@ -351,13 +294,7 @@
|
|||||||
"UNKNOWN": "Unknown"
|
"UNKNOWN": "Unknown"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Safe Area in Controls",
|
"safe_area_in_controls": "Safe Area in Controls",
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Experimental + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Show Custom Menu Links",
|
"show_custom_menu_links": "Show Custom Menu Links",
|
||||||
"show_large_home_carousel": "Show Large Home Carousel (beta)",
|
|
||||||
"hide_libraries": "Hide Libraries",
|
"hide_libraries": "Hide Libraries",
|
||||||
"select_liraries_you_want_to_hide": "Select the libraries you want to hide from the Library tab and home page sections.",
|
"select_liraries_you_want_to_hide": "Select the libraries you want to hide from the Library tab and home page sections.",
|
||||||
"disable_haptic_feedback": "Disable Haptic Feedback",
|
"disable_haptic_feedback": "Disable Haptic Feedback",
|
||||||
@@ -367,9 +304,6 @@
|
|||||||
"max_auto_play_episode_count": "Max Auto Play Episode Count",
|
"max_auto_play_episode_count": "Max Auto Play Episode Count",
|
||||||
"disabled": "Disabled"
|
"disabled": "Disabled"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Downloads"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +347,18 @@
|
|||||||
"read_more_about_marlin": "Read More About Marlin.",
|
"read_more_about_marlin": "Read More About Marlin.",
|
||||||
"save_button": "Save",
|
"save_button": "Save",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Saved",
|
"saved": "Saved"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +374,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +385,6 @@
|
|||||||
"delete_all_downloaded_files": "Delete All Downloaded Files",
|
"delete_all_downloaded_files": "Delete All Downloaded Files",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +394,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -481,8 +406,7 @@
|
|||||||
"export_logs": "Export Logs",
|
"export_logs": "Export Logs",
|
||||||
"click_for_more_info": "Click for More Info",
|
"click_for_more_info": "Click for More Info",
|
||||||
"level": "Level",
|
"level": "Level",
|
||||||
"no_logs_available": "No Logs Available",
|
"no_logs_available": "No Logs Available"
|
||||||
"delete_all_logs": "Delete All Logs"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Languages",
|
"title": "Languages",
|
||||||
@@ -490,15 +414,12 @@
|
|||||||
"system": "System"
|
"system": "System"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Error Deleting Files",
|
"error_deleting_files": "Error Deleting Files"
|
||||||
"background_downloads_enabled": "Background downloads enabled",
|
|
||||||
"background_downloads_disabled": "Background downloads disabled"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -518,10 +439,7 @@
|
|||||||
"downloads_title": "Downloads",
|
"downloads_title": "Downloads",
|
||||||
"tvseries": "TV-Series",
|
"tvseries": "TV-Series",
|
||||||
"movies": "Movies",
|
"movies": "Movies",
|
||||||
"queue": "Queue",
|
|
||||||
"other_media": "Other media",
|
"other_media": "Other media",
|
||||||
"queue_hint": "Queue and downloads will be lost on app restart",
|
|
||||||
"no_items_in_queue": "No Items in Queue",
|
|
||||||
"no_downloaded_items": "No Downloaded Items",
|
"no_downloaded_items": "No Downloaded Items",
|
||||||
"delete_all_movies_button": "Delete All Movies",
|
"delete_all_movies_button": "Delete All Movies",
|
||||||
"delete_all_tvseries_button": "Delete All TV-Series",
|
"delete_all_tvseries_button": "Delete All TV-Series",
|
||||||
@@ -546,13 +464,8 @@
|
|||||||
"failed_to_delete_all_tvseries": "Failed to Delete All TV-Series",
|
"failed_to_delete_all_tvseries": "Failed to Delete All TV-Series",
|
||||||
"deleted_media_successfully": "Deleted other media Successfully!",
|
"deleted_media_successfully": "Deleted other media Successfully!",
|
||||||
"failed_to_delete_media": "Failed to Delete other media",
|
"failed_to_delete_media": "Failed to Delete other media",
|
||||||
"download_deleted": "Download Deleted",
|
|
||||||
"download_cancelled": "Download Cancelled",
|
"download_cancelled": "Download Cancelled",
|
||||||
"could_not_delete_download": "Could Not Delete Download",
|
"could_not_delete_download": "Could Not Delete Download",
|
||||||
"download_paused": "Download Paused",
|
|
||||||
"could_not_pause_download": "Could Not Pause Download",
|
|
||||||
"download_resumed": "Download Resumed",
|
|
||||||
"could_not_resume_download": "Could Not Resume Download",
|
|
||||||
"download_completed": "Download Completed",
|
"download_completed": "Download Completed",
|
||||||
"download_failed": "Download Failed",
|
"download_failed": "Download Failed",
|
||||||
"download_failed_for_item": "Download failed for {{item}} - {{error}}",
|
"download_failed_for_item": "Download failed for {{item}} - {{error}}",
|
||||||
@@ -562,10 +475,7 @@
|
|||||||
"item_already_downloading": "{{item}} is already downloading",
|
"item_already_downloading": "{{item}} is already downloading",
|
||||||
"all_files_deleted": "All Downloads Deleted Successfully",
|
"all_files_deleted": "All Downloads Deleted Successfully",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "All files, folders, and jobs deleted successfully",
|
|
||||||
"failed_to_clean_cache_directory": "Failed to clean cache directory",
|
|
||||||
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
|
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
|
||||||
"go_to_downloads": "Go to Downloads",
|
|
||||||
"file_deleted": "{{item}} deleted"
|
"file_deleted": "{{item}} deleted"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +493,13 @@
|
|||||||
"none": "None",
|
"none": "None",
|
||||||
"track": "Track",
|
"track": "Track",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login"
|
||||||
"refresh": "Refresh"
|
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Search...",
|
"search": "Search...",
|
||||||
@@ -691,10 +598,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Could not create a stream for Chromecast",
|
"could_not_create_stream_for_chromecast": "Could not create a stream for Chromecast",
|
||||||
"message_from_server": "Message from Server: {{message}}",
|
"message_from_server": "Message from Server: {{message}}",
|
||||||
"next_episode": "Next Episode",
|
"next_episode": "Next Episode",
|
||||||
"refresh_tracks": "Refresh Tracks",
|
|
||||||
"audio_tracks": "Audio Tracks:",
|
|
||||||
"playback_state": "Playback State:",
|
|
||||||
"index": "Index:",
|
|
||||||
"continue_watching": "Continue Watching",
|
"continue_watching": "Continue Watching",
|
||||||
"go_back": "Go Back",
|
"go_back": "Go Back",
|
||||||
"downloaded_file_title": "You have this file downloaded",
|
"downloaded_file_title": "You have this file downloaded",
|
||||||
@@ -761,7 +664,6 @@
|
|||||||
"show_more": "Show More",
|
"show_more": "Show More",
|
||||||
"show_less": "Show Less",
|
"show_less": "Show Less",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -888,13 +790,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +926,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -100,7 +100,6 @@
|
|||||||
"continue_and_next_up": "Continue & Next Up",
|
"continue_and_next_up": "Continue & Next Up",
|
||||||
"recently_added_in": "num tu'lu' {{libraryName}}",
|
"recently_added_in": "num tu'lu' {{libraryName}}",
|
||||||
"suggested_movies": "rutlh DIS",
|
"suggested_movies": "rutlh DIS",
|
||||||
"suggested_episodes": "rutlh Hem",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Streamyfin yI'el!",
|
"welcome_to_streamyfin": "Streamyfin yI'el!",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "Jellyfin lut 'el je'be' 'ej wang.",
|
"a_free_and_open_source_client_for_jellyfin": "Jellyfin lut 'el je'be' 'ej wang.",
|
||||||
@@ -261,43 +260,6 @@
|
|||||||
"None": "pagh",
|
"None": "pagh",
|
||||||
"OnlyForced": "Dun je'"
|
"OnlyForced": "Dun je'"
|
||||||
},
|
},
|
||||||
"text_color": "GhItlh rIt",
|
|
||||||
"background_color": "Tlhagh rIt",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"bold_text": "Bold Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Black",
|
|
||||||
"Gray": "Gray",
|
|
||||||
"Silver": "Silver",
|
|
||||||
"White": "White",
|
|
||||||
"Maroon": "Maroon",
|
|
||||||
"Red": "Red",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Yellow",
|
|
||||||
"Olive": "Olive",
|
|
||||||
"Green": "Green",
|
|
||||||
"Teal": "Teal",
|
|
||||||
"Lime": "Lime",
|
|
||||||
"Purple": "Purple",
|
|
||||||
"Navy": "Navy",
|
|
||||||
"Blue": "Blue",
|
|
||||||
"Aqua": "Aqua"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "pagh",
|
|
||||||
"Thin": "Thin",
|
|
||||||
"Normal": "Normal",
|
|
||||||
"Thick": "Thick"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +277,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video Player",
|
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "patlh",
|
"other_title": "patlh",
|
||||||
"video_orientation": "mu'tlhegh pegh",
|
"video_orientation": "mu'tlhegh pegh",
|
||||||
@@ -351,13 +294,7 @@
|
|||||||
"UNKNOWN": "Sovbe'"
|
"UNKNOWN": "Sovbe'"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "SeHlawDaq yot QIH",
|
"safe_area_in_controls": "SeHlawDaq yot QIH",
|
||||||
"video_player": "mu'tlhegh tlholwI'",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (PiP mIwHa')"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "menuDaq ret teqlu' yInej",
|
"show_custom_menu_links": "menuDaq ret teqlu' yInej",
|
||||||
"show_large_home_carousel": "Show Large Home Carousel (beta)",
|
|
||||||
"hide_libraries": "De'wI' bom yIQIj",
|
"hide_libraries": "De'wI' bom yIQIj",
|
||||||
"select_liraries_you_want_to_hide": "De'wI' bom Danej QIj yIwIv.",
|
"select_liraries_you_want_to_hide": "De'wI' bom Danej QIj yIwIv.",
|
||||||
"disable_haptic_feedback": "Qub quvHa' yIQIj",
|
"disable_haptic_feedback": "Qub quvHa' yIQIj",
|
||||||
@@ -367,9 +304,6 @@
|
|||||||
"max_auto_play_episode_count": "Max Auto Play Episode Count",
|
"max_auto_play_episode_count": "Max Auto Play Episode Count",
|
||||||
"disabled": "Disabled"
|
"disabled": "Disabled"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Qaw' Doch"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +347,18 @@
|
|||||||
"read_more_about_marlin": "Marlin latlh yIlaD",
|
"read_more_about_marlin": "Marlin latlh yIlaD",
|
||||||
"save_button": "yIqIp",
|
"save_button": "yIqIp",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "qIp",
|
"saved": "qIp"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +374,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +385,6 @@
|
|||||||
"delete_all_downloaded_files": "Hoch Qaw' Doch yIQaw'",
|
"delete_all_downloaded_files": "Hoch Qaw' Doch yIQaw'",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +394,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -481,8 +406,7 @@
|
|||||||
"export_logs": "De' qon yISamqa'",
|
"export_logs": "De' qon yISamqa'",
|
||||||
"click_for_more_info": "latlh De' yIchIch",
|
"click_for_more_info": "latlh De' yIchIch",
|
||||||
"level": "quv",
|
"level": "quv",
|
||||||
"no_logs_available": "De' qon pagh",
|
"no_logs_available": "De' qon pagh"
|
||||||
"delete_all_logs": "Hoch De' qon yIQaw'"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Holmey",
|
"title": "Holmey",
|
||||||
@@ -490,15 +414,12 @@
|
|||||||
"system": "mIw'a'"
|
"system": "mIw'a'"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Qaw' ghIq",
|
"error_deleting_files": "Qaw' ghIq"
|
||||||
"background_downloads_enabled": "tlhegh Qaw' chu'",
|
|
||||||
"background_downloads_disabled": "tlhegh Qaw' QIj"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -518,10 +439,7 @@
|
|||||||
"downloads_title": "Qaw' Doch",
|
"downloads_title": "Qaw' Doch",
|
||||||
"tvseries": "TV Hem",
|
"tvseries": "TV Hem",
|
||||||
"movies": "DIS",
|
"movies": "DIS",
|
||||||
"queue": "ghom",
|
|
||||||
"other_media": "Other media",
|
"other_media": "Other media",
|
||||||
"queue_hint": "ghun ghImDI' ghom Qaw'laH.",
|
|
||||||
"no_items_in_queue": "ghom Doch pagh",
|
|
||||||
"no_downloaded_items": "Qaw' Doch pagh",
|
"no_downloaded_items": "Qaw' Doch pagh",
|
||||||
"delete_all_movies_button": "Hoch DIS yIQaw'",
|
"delete_all_movies_button": "Hoch DIS yIQaw'",
|
||||||
"delete_all_tvseries_button": "Hoch TV Hem yIQaw'",
|
"delete_all_tvseries_button": "Hoch TV Hem yIQaw'",
|
||||||
@@ -546,13 +464,8 @@
|
|||||||
"failed_to_delete_all_tvseries": "Hoch TV Hem Qaw'laHbe'",
|
"failed_to_delete_all_tvseries": "Hoch TV Hem Qaw'laHbe'",
|
||||||
"deleted_media_successfully": "Deleted other media Successfully!",
|
"deleted_media_successfully": "Deleted other media Successfully!",
|
||||||
"failed_to_delete_media": "Failed to Delete other media",
|
"failed_to_delete_media": "Failed to Delete other media",
|
||||||
"download_deleted": "Download Deleted",
|
|
||||||
"download_cancelled": "Qaw' ghIm",
|
"download_cancelled": "Qaw' ghIm",
|
||||||
"could_not_delete_download": "Could Not Delete Download",
|
"could_not_delete_download": "Could Not Delete Download",
|
||||||
"download_paused": "Download Paused",
|
|
||||||
"could_not_pause_download": "Could Not Pause Download",
|
|
||||||
"download_resumed": "Download Resumed",
|
|
||||||
"could_not_resume_download": "Could Not Resume Download",
|
|
||||||
"download_completed": "Qaw' Qapla'",
|
"download_completed": "Qaw' Qapla'",
|
||||||
"download_failed": "Download Failed",
|
"download_failed": "Download Failed",
|
||||||
"download_failed_for_item": "{{item}} Qaw'laHbe' - {{error}}",
|
"download_failed_for_item": "{{item}} Qaw'laHbe' - {{error}}",
|
||||||
@@ -562,10 +475,7 @@
|
|||||||
"item_already_downloading": "{{item}} is already downloading",
|
"item_already_downloading": "{{item}} is already downloading",
|
||||||
"all_files_deleted": "All Downloads Deleted Successfully",
|
"all_files_deleted": "All Downloads Deleted Successfully",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Hoch De', ram 'ej vum Qaw' Qapla'",
|
|
||||||
"failed_to_clean_cache_directory": "Failed to clean cache directory",
|
|
||||||
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
|
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
|
||||||
"go_to_downloads": "Qaw' Doch yIghoS",
|
|
||||||
"file_deleted": "{{item}} deleted"
|
"file_deleted": "{{item}} deleted"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +493,13 @@
|
|||||||
"none": "None",
|
"none": "None",
|
||||||
"track": "Track",
|
"track": "Track",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login"
|
||||||
"refresh": "Refresh"
|
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "yISam...",
|
"search": "yISam...",
|
||||||
@@ -691,10 +598,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Chromecast tlhol ret qonlaHbe'",
|
"could_not_create_stream_for_chromecast": "Chromecast tlhol ret qonlaHbe'",
|
||||||
"message_from_server": "Ho'Do' veS jach: {{message}}",
|
"message_from_server": "Ho'Do' veS jach: {{message}}",
|
||||||
"next_episode": "wej HemHom",
|
"next_episode": "wej HemHom",
|
||||||
"refresh_tracks": "ret yIchu'qa'",
|
|
||||||
"audio_tracks": "QoQ ret:",
|
|
||||||
"playback_state": "tlhol mIw:",
|
|
||||||
"index": "nem:",
|
|
||||||
"continue_watching": "tlhol yIHaDqa'",
|
"continue_watching": "tlhol yIHaDqa'",
|
||||||
"go_back": "Go Back",
|
"go_back": "Go Back",
|
||||||
"downloaded_file_title": "You have this file downloaded",
|
"downloaded_file_title": "You have this file downloaded",
|
||||||
@@ -761,7 +664,6 @@
|
|||||||
"show_more": "latlh yIHoch",
|
"show_more": "latlh yIHoch",
|
||||||
"show_less": "Hom yIHoch",
|
"show_less": "Hom yIHoch",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -888,13 +790,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +926,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -100,7 +100,6 @@
|
|||||||
"continue_and_next_up": "İzlemeye Devam Et & Sıradakiler",
|
"continue_and_next_up": "İzlemeye Devam Et & Sıradakiler",
|
||||||
"recently_added_in": "{{libraryName}} Kütüphanesine Son Eklenenler",
|
"recently_added_in": "{{libraryName}} Kütüphanesine Son Eklenenler",
|
||||||
"suggested_movies": "Önerilen Filmler",
|
"suggested_movies": "Önerilen Filmler",
|
||||||
"suggested_episodes": "Önerilen Bölümler",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Streamyfin'e Hoş Geldiniz",
|
"welcome_to_streamyfin": "Streamyfin'e Hoş Geldiniz",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "Jellyfin için ücretsiz ve açık kaynak bir istemci.",
|
"a_free_and_open_source_client_for_jellyfin": "Jellyfin için ücretsiz ve açık kaynak bir istemci.",
|
||||||
@@ -261,43 +260,6 @@
|
|||||||
"None": "Yok",
|
"None": "Yok",
|
||||||
"OnlyForced": "Sadece Zorunlu"
|
"OnlyForced": "Sadece Zorunlu"
|
||||||
},
|
},
|
||||||
"text_color": "Metin Rengi",
|
|
||||||
"background_color": "Arkaplan Rengi",
|
|
||||||
"outline_color": "Kenarlık Rengi",
|
|
||||||
"outline_thickness": "Kenarlık kalınlığı",
|
|
||||||
"background_opacity": "Arkaplan Opaklığı",
|
|
||||||
"outline_opacity": "Kenarlık Opaklığı",
|
|
||||||
"bold_text": "Kalın Metin",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Siyah",
|
|
||||||
"Gray": "Gri",
|
|
||||||
"Silver": "Gümüş",
|
|
||||||
"White": "Beyaz",
|
|
||||||
"Maroon": "Kestane",
|
|
||||||
"Red": "Kırmızı",
|
|
||||||
"Fuchsia": "Fuşya",
|
|
||||||
"Yellow": "Sarı",
|
|
||||||
"Olive": "Zeytin yeşili",
|
|
||||||
"Green": "Yeşil",
|
|
||||||
"Teal": "Deniz mavisi",
|
|
||||||
"Lime": "Limon",
|
|
||||||
"Purple": "Mor",
|
|
||||||
"Navy": "Lacivert",
|
|
||||||
"Blue": "Mavi",
|
|
||||||
"Aqua": "Açık Mavi"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Hiçbiri",
|
|
||||||
"Thin": "İnce",
|
|
||||||
"Normal": "Normal",
|
|
||||||
"Thick": "Kalın"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Altyazı Rengi",
|
|
||||||
"subtitle_background_color": "Arkaplan Rengi",
|
|
||||||
"subtitle_font": "Altyazı Yazı Tipi",
|
|
||||||
"ksplayer_title": "KSPlayer Ayarları",
|
|
||||||
"hardware_decode": "Donanımsal Kod Çözme",
|
|
||||||
"hardware_decode_description": "Video kod çözme için donanımsal hızlandırma kullan. Oynatma sorunları yaşıyorsanız devre dışı bırakın.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +277,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Altyazı Ayarları",
|
|
||||||
"hint": "VLC oynatıcı için altyazı görünümünü değiştirin. Değişiklikler bir sonraki oynatmada etkili olacak.",
|
|
||||||
"text_color": "Metin Rengi",
|
|
||||||
"background_color": "Arkaplan Rengi",
|
|
||||||
"background_opacity": "Arkaplan Opaklığı",
|
|
||||||
"outline_color": "Kenarlık Rengi",
|
|
||||||
"outline_opacity": "Kenarlık Opaklığı",
|
|
||||||
"outline_thickness": "Kenarlık Kalınlığı",
|
|
||||||
"bold": "Kalın Metin",
|
|
||||||
"margin": "Alt Kenar Boşluğu"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video oynatıcısı",
|
|
||||||
"video_player": "Video oynatıcısı",
|
|
||||||
"video_player_description": "iOS'da hangi video oynatıcının kullanılacağını seçin.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Diğer",
|
"other_title": "Diğer",
|
||||||
"video_orientation": "Video Yönü",
|
"video_orientation": "Video Yönü",
|
||||||
@@ -351,13 +294,7 @@
|
|||||||
"UNKNOWN": "Bilinmeyen"
|
"UNKNOWN": "Bilinmeyen"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Kontrollerde Güvenli Alan",
|
"safe_area_in_controls": "Kontrollerde Güvenli Alan",
|
||||||
"video_player": "Video player",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Deneysel + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Özel Menü Bağlantılarını Göster",
|
"show_custom_menu_links": "Özel Menü Bağlantılarını Göster",
|
||||||
"show_large_home_carousel": "Show Large Home Carousel (beta)",
|
|
||||||
"hide_libraries": "Kütüphaneleri Gizle",
|
"hide_libraries": "Kütüphaneleri Gizle",
|
||||||
"select_liraries_you_want_to_hide": "Kütüphane sekmesinden ve ana sayfa bölümlerinden gizlemek istediğiniz kütüphaneleri seçin.",
|
"select_liraries_you_want_to_hide": "Kütüphane sekmesinden ve ana sayfa bölümlerinden gizlemek istediğiniz kütüphaneleri seçin.",
|
||||||
"disable_haptic_feedback": "Dokunsal Geri Bildirimi Devre Dışı Bırak",
|
"disable_haptic_feedback": "Dokunsal Geri Bildirimi Devre Dışı Bırak",
|
||||||
@@ -367,9 +304,6 @@
|
|||||||
"max_auto_play_episode_count": "En Fazla Otomatik Oynatılacak Bölüm Sayısı",
|
"max_auto_play_episode_count": "En Fazla Otomatik Oynatılacak Bölüm Sayısı",
|
||||||
"disabled": "Devre dışı"
|
"disabled": "Devre dışı"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "İndirmeler"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Müzik",
|
"title": "Müzik",
|
||||||
"playback_title": "Oynatma",
|
"playback_title": "Oynatma",
|
||||||
@@ -413,23 +347,18 @@
|
|||||||
"read_more_about_marlin": "Marlin hakkında daha fazla oku.",
|
"read_more_about_marlin": "Marlin hakkında daha fazla oku.",
|
||||||
"save_button": "Kaydet",
|
"save_button": "Kaydet",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Kaydedildi",
|
"saved": "Kaydedildi"
|
||||||
"refreshed": "Ayarlar sunucudan yeniden alındı"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Ayarları Sunucudan Yeniden Al"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Streamystats'ı Etkinleştir",
|
|
||||||
"disable_streamystats": "Streamystats'ı Devre Dışı Bırak",
|
"disable_streamystats": "Streamystats'ı Devre Dışı Bırak",
|
||||||
"enable_search": "Arama için kullan",
|
"enable_search": "Arama için kullan",
|
||||||
"url": "URL Adresi",
|
"url": "URL Adresi",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Streamystats sunucu URL'sini girin. URL, http veya https içermeli ve isteğe bağlı olarak portu içerebilir.",
|
"streamystats_search_hint": "Streamystats sunucu URL'sini girin. URL, http veya https içermeli ve isteğe bağlı olarak portu içerebilir.",
|
||||||
"read_more_about_streamystats": "Streamystats hakkında daha fazla bilgi.",
|
"read_more_about_streamystats": "Streamystats hakkında daha fazla bilgi.",
|
||||||
"save_button": "Kaydet",
|
|
||||||
"save": "Kaydet",
|
"save": "Kaydet",
|
||||||
"features_title": "Özellikler",
|
"features_title": "Özellikler",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Film Önerileri",
|
"enable_movie_recommendations": "Film Önerileri",
|
||||||
"enable_series_recommendations": "Dizi Önerileri",
|
"enable_series_recommendations": "Dizi Önerileri",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +374,7 @@
|
|||||||
"refresh_from_server": "Ayarları Sunucudan Yeniden Al"
|
"refresh_from_server": "Ayarları Sunucudan Yeniden Al"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +385,6 @@
|
|||||||
"delete_all_downloaded_files": "Tüm indirilen dosyaları sil",
|
"delete_all_downloaded_files": "Tüm indirilen dosyaları sil",
|
||||||
"music_cache_title": "Müzik Ön Belleği",
|
"music_cache_title": "Müzik Ön Belleği",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Müzik Ön Belleğini Etkinleştir",
|
|
||||||
"clear_music_cache": "Müzik Ön Belleğini Temizle",
|
"clear_music_cache": "Müzik Ön Belleğini Temizle",
|
||||||
"music_cache_size": "{{size}} ön belleklendi",
|
"music_cache_size": "{{size}} ön belleklendi",
|
||||||
"music_cache_cleared": "Müzik ön belleği temizlendi",
|
"music_cache_cleared": "Müzik ön belleği temizlendi",
|
||||||
@@ -467,8 +394,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -481,8 +406,7 @@
|
|||||||
"export_logs": "Export logs",
|
"export_logs": "Export logs",
|
||||||
"click_for_more_info": "Click for more info",
|
"click_for_more_info": "Click for more info",
|
||||||
"level": "Düzey",
|
"level": "Düzey",
|
||||||
"no_logs_available": "Günlükler mevcut değil",
|
"no_logs_available": "Günlükler mevcut değil"
|
||||||
"delete_all_logs": "Tüm günlükleri sil"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Diller",
|
"title": "Diller",
|
||||||
@@ -490,15 +414,12 @@
|
|||||||
"system": "Sistem"
|
"system": "Sistem"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Dosyalar silinirken hata oluştu",
|
"error_deleting_files": "Dosyalar silinirken hata oluştu"
|
||||||
"background_downloads_enabled": "Arka plan indirmeleri etkinleştirildi",
|
|
||||||
"background_downloads_disabled": "Arka plan indirmeleri devre dışı bırakıldı"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -518,10 +439,7 @@
|
|||||||
"downloads_title": "İndirilenler",
|
"downloads_title": "İndirilenler",
|
||||||
"tvseries": "Diziler",
|
"tvseries": "Diziler",
|
||||||
"movies": "Filmler",
|
"movies": "Filmler",
|
||||||
"queue": "Sıra",
|
|
||||||
"other_media": "Diğer medya",
|
"other_media": "Diğer medya",
|
||||||
"queue_hint": "Sıra ve indirmeler uygulama yeniden başlatıldığında kaybolacaktır",
|
|
||||||
"no_items_in_queue": "Sırada öğe yok",
|
|
||||||
"no_downloaded_items": "İndirilen öğe yok",
|
"no_downloaded_items": "İndirilen öğe yok",
|
||||||
"delete_all_movies_button": "Tüm Filmleri Sil",
|
"delete_all_movies_button": "Tüm Filmleri Sil",
|
||||||
"delete_all_tvseries_button": "Tüm Dizileri Sil",
|
"delete_all_tvseries_button": "Tüm Dizileri Sil",
|
||||||
@@ -546,13 +464,8 @@
|
|||||||
"failed_to_delete_all_tvseries": "Diziler silinemedi",
|
"failed_to_delete_all_tvseries": "Diziler silinemedi",
|
||||||
"deleted_media_successfully": "Diğer medya başarıyla silindi!",
|
"deleted_media_successfully": "Diğer medya başarıyla silindi!",
|
||||||
"failed_to_delete_media": "Failed to Delete other media",
|
"failed_to_delete_media": "Failed to Delete other media",
|
||||||
"download_deleted": "İndirme silindi",
|
|
||||||
"download_cancelled": "İndirme iptal edildi",
|
"download_cancelled": "İndirme iptal edildi",
|
||||||
"could_not_delete_download": "İndirme Silinemedi",
|
"could_not_delete_download": "İndirme Silinemedi",
|
||||||
"download_paused": "İndirme Duraklatıldı",
|
|
||||||
"could_not_pause_download": "İndirme Duraklatılamadı",
|
|
||||||
"download_resumed": "İndirme Devam Ediyor",
|
|
||||||
"could_not_resume_download": "İndirme Devam Ettirilemedi",
|
|
||||||
"download_completed": "İndirme tamamlandı",
|
"download_completed": "İndirme tamamlandı",
|
||||||
"download_failed": "İndirme başarısız oldu",
|
"download_failed": "İndirme başarısız oldu",
|
||||||
"download_failed_for_item": "{{item}} için indirme başarısız oldu - {{error}}",
|
"download_failed_for_item": "{{item}} için indirme başarısız oldu - {{error}}",
|
||||||
@@ -562,10 +475,7 @@
|
|||||||
"item_already_downloading": "{{item}} zaten indiriliyor",
|
"item_already_downloading": "{{item}} zaten indiriliyor",
|
||||||
"all_files_deleted": "Bütün indirilenler başarıyla silindi",
|
"all_files_deleted": "Bütün indirilenler başarıyla silindi",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} silindi",
|
"files_deleted_by_type": "{{count}} {{type}} silindi",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Tüm dosyalar, klasörler ve işler başarıyla silindi",
|
|
||||||
"failed_to_clean_cache_directory": "Önbellek dizini temizlenemedi",
|
|
||||||
"could_not_get_download_url_for_item": "{{itemName}} için indirme URL'si alınamadı",
|
"could_not_get_download_url_for_item": "{{itemName}} için indirme URL'si alınamadı",
|
||||||
"go_to_downloads": "İndirmelere git",
|
|
||||||
"file_deleted": "{{item}} silindi"
|
"file_deleted": "{{item}} silindi"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +493,13 @@
|
|||||||
"none": "Hiçbiri",
|
"none": "Hiçbiri",
|
||||||
"track": "Parça",
|
"track": "Parça",
|
||||||
"cancel": "Vazgeç",
|
"cancel": "Vazgeç",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Sil",
|
"delete": "Sil",
|
||||||
"ok": "Tamam",
|
"ok": "Tamam",
|
||||||
"remove": "Kaldır",
|
"remove": "Kaldır",
|
||||||
"next": "Sonraki",
|
|
||||||
"back": "Geri",
|
"back": "Geri",
|
||||||
"continue": "Devam",
|
"continue": "Devam",
|
||||||
"verifying": "Doğrulanıyor...",
|
"verifying": "Doğrulanıyor...",
|
||||||
"login": "Login",
|
"login": "Login"
|
||||||
"refresh": "Refresh"
|
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Ara...",
|
"search": "Ara...",
|
||||||
@@ -691,10 +598,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Chromecast için yayın oluşturulamadı",
|
"could_not_create_stream_for_chromecast": "Chromecast için yayın oluşturulamadı",
|
||||||
"message_from_server": "Sunucudan mesaj: {{message}}",
|
"message_from_server": "Sunucudan mesaj: {{message}}",
|
||||||
"next_episode": "Sonraki bölüm",
|
"next_episode": "Sonraki bölüm",
|
||||||
"refresh_tracks": "Parçaları yenile",
|
|
||||||
"audio_tracks": "Ses Parçaları:",
|
|
||||||
"playback_state": "Oynatma Durumu:",
|
|
||||||
"index": "İndeks:",
|
|
||||||
"continue_watching": "İzlemeye devam et",
|
"continue_watching": "İzlemeye devam et",
|
||||||
"go_back": "Geri",
|
"go_back": "Geri",
|
||||||
"downloaded_file_title": "Bu dosya indirilmiş",
|
"downloaded_file_title": "Bu dosya indirilmiş",
|
||||||
@@ -761,7 +664,6 @@
|
|||||||
"show_more": "Daha fazla göster",
|
"show_more": "Daha fazla göster",
|
||||||
"show_less": "Daha az göster",
|
"show_less": "Daha az göster",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -888,13 +790,9 @@
|
|||||||
"playlists": "Çalma listeleri",
|
"playlists": "Çalma listeleri",
|
||||||
"tracks": "parçalar"
|
"tracks": "parçalar"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "Tümü"
|
|
||||||
},
|
|
||||||
"recently_added": "Son Eklenenler",
|
"recently_added": "Son Eklenenler",
|
||||||
"recently_played": "Son Oynatılanlar",
|
"recently_played": "Son Oynatılanlar",
|
||||||
"frequently_played": "Sık Oynatılanlar",
|
"frequently_played": "Sık Oynatılanlar",
|
||||||
"explore": "Keşfet",
|
|
||||||
"top_tracks": "En Popülar Parçalar",
|
"top_tracks": "En Popülar Parçalar",
|
||||||
"play": "Oynat",
|
"play": "Oynat",
|
||||||
"shuffle": "Karıştır",
|
"shuffle": "Karıştır",
|
||||||
@@ -1028,7 +926,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -100,7 +100,6 @@
|
|||||||
"continue_and_next_up": "Continue & Next Up",
|
"continue_and_next_up": "Continue & Next Up",
|
||||||
"recently_added_in": "Нещодавно додане до \"{{libraryName}}\"",
|
"recently_added_in": "Нещодавно додане до \"{{libraryName}}\"",
|
||||||
"suggested_movies": "Рекомендовані Фільми",
|
"suggested_movies": "Рекомендовані Фільми",
|
||||||
"suggested_episodes": "Рекомендовані Епізоди",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Вітаємо у Streamyfin",
|
"welcome_to_streamyfin": "Вітаємо у Streamyfin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "Вільний і open-source клієнт для Jellyfin.",
|
"a_free_and_open_source_client_for_jellyfin": "Вільний і open-source клієнт для Jellyfin.",
|
||||||
@@ -261,43 +260,6 @@
|
|||||||
"None": "Някий",
|
"None": "Някий",
|
||||||
"OnlyForced": "Виключно Форсовані"
|
"OnlyForced": "Виключно Форсовані"
|
||||||
},
|
},
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"bold_text": "Bold Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Black",
|
|
||||||
"Gray": "Gray",
|
|
||||||
"Silver": "Silver",
|
|
||||||
"White": "White",
|
|
||||||
"Maroon": "Maroon",
|
|
||||||
"Red": "Red",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Yellow",
|
|
||||||
"Olive": "Olive",
|
|
||||||
"Green": "Green",
|
|
||||||
"Teal": "Teal",
|
|
||||||
"Lime": "Lime",
|
|
||||||
"Purple": "Purple",
|
|
||||||
"Navy": "Navy",
|
|
||||||
"Blue": "Blue",
|
|
||||||
"Aqua": "Aqua"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "None",
|
|
||||||
"Thin": "Thin",
|
|
||||||
"Normal": "Normal",
|
|
||||||
"Thick": "Thick"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +277,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video Player",
|
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Інші",
|
"other_title": "Інші",
|
||||||
"video_orientation": "Орієнтація відео",
|
"video_orientation": "Орієнтація відео",
|
||||||
@@ -351,13 +294,7 @@
|
|||||||
"UNKNOWN": "Невідомо"
|
"UNKNOWN": "Невідомо"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Безпечна зона в елементах керування",
|
"safe_area_in_controls": "Безпечна зона в елементах керування",
|
||||||
"video_player": "Відео плеєр",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Experimental + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Показати користувацькі посилання меню",
|
"show_custom_menu_links": "Показати користувацькі посилання меню",
|
||||||
"show_large_home_carousel": "Show Large Home Carousel (beta)",
|
|
||||||
"hide_libraries": "Сховати медіатеки",
|
"hide_libraries": "Сховати медіатеки",
|
||||||
"select_liraries_you_want_to_hide": "Виберіть медіатеки, що бажаєте приховати з вкладки Медіатека і з секції на головній сторінці.",
|
"select_liraries_you_want_to_hide": "Виберіть медіатеки, що бажаєте приховати з вкладки Медіатека і з секції на головній сторінці.",
|
||||||
"disable_haptic_feedback": "Вимкнути тактильний зворотний зв'язок",
|
"disable_haptic_feedback": "Вимкнути тактильний зворотний зв'язок",
|
||||||
@@ -367,9 +304,6 @@
|
|||||||
"max_auto_play_episode_count": "Max Auto Play Episode Count",
|
"max_auto_play_episode_count": "Max Auto Play Episode Count",
|
||||||
"disabled": "Вимкнено"
|
"disabled": "Вимкнено"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Завантаження"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +347,18 @@
|
|||||||
"read_more_about_marlin": "Дізнайтеся більше про Marlin.",
|
"read_more_about_marlin": "Дізнайтеся більше про Marlin.",
|
||||||
"save_button": "Зберегти",
|
"save_button": "Зберегти",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Збережено",
|
"saved": "Збережено"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +374,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +385,6 @@
|
|||||||
"delete_all_downloaded_files": "Видалити усі завантаженні файли",
|
"delete_all_downloaded_files": "Видалити усі завантаженні файли",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +394,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -481,8 +406,7 @@
|
|||||||
"export_logs": "Export logs",
|
"export_logs": "Export logs",
|
||||||
"click_for_more_info": "Click for more info",
|
"click_for_more_info": "Click for more info",
|
||||||
"level": "Level",
|
"level": "Level",
|
||||||
"no_logs_available": "Нема доступних журналів",
|
"no_logs_available": "Нема доступних журналів"
|
||||||
"delete_all_logs": "Видалити усі журнали"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Мова",
|
"title": "Мова",
|
||||||
@@ -490,15 +414,12 @@
|
|||||||
"system": "Системна"
|
"system": "Системна"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Помилка при видалені файлів",
|
"error_deleting_files": "Помилка при видалені файлів"
|
||||||
"background_downloads_enabled": "Завантаження в фоні увімкнене",
|
|
||||||
"background_downloads_disabled": "Завантаження в фоні вимкнене"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -518,10 +439,7 @@
|
|||||||
"downloads_title": "Завантаження",
|
"downloads_title": "Завантаження",
|
||||||
"tvseries": "ТБ-Серіали",
|
"tvseries": "ТБ-Серіали",
|
||||||
"movies": "Фільми",
|
"movies": "Фільми",
|
||||||
"queue": "Черга",
|
|
||||||
"other_media": "Other media",
|
"other_media": "Other media",
|
||||||
"queue_hint": "Черга і завантаження буде втрачене при перезапуску застосунку",
|
|
||||||
"no_items_in_queue": "Нема елементів в черзі",
|
|
||||||
"no_downloaded_items": "Нема завантажених елементів",
|
"no_downloaded_items": "Нема завантажених елементів",
|
||||||
"delete_all_movies_button": "Видалити всі Фільми",
|
"delete_all_movies_button": "Видалити всі Фільми",
|
||||||
"delete_all_tvseries_button": "Видалити всі ТБ-Серіали",
|
"delete_all_tvseries_button": "Видалити всі ТБ-Серіали",
|
||||||
@@ -546,13 +464,8 @@
|
|||||||
"failed_to_delete_all_tvseries": "Не вдалося видалити всі телесеріали",
|
"failed_to_delete_all_tvseries": "Не вдалося видалити всі телесеріали",
|
||||||
"deleted_media_successfully": "Deleted other media Successfully!",
|
"deleted_media_successfully": "Deleted other media Successfully!",
|
||||||
"failed_to_delete_media": "Failed to Delete other media",
|
"failed_to_delete_media": "Failed to Delete other media",
|
||||||
"download_deleted": "Download Deleted",
|
|
||||||
"download_cancelled": "Завантаження скасоване",
|
"download_cancelled": "Завантаження скасоване",
|
||||||
"could_not_delete_download": "Could Not Delete Download",
|
"could_not_delete_download": "Could Not Delete Download",
|
||||||
"download_paused": "Download Paused",
|
|
||||||
"could_not_pause_download": "Could Not Pause Download",
|
|
||||||
"download_resumed": "Download Resumed",
|
|
||||||
"could_not_resume_download": "Could Not Resume Download",
|
|
||||||
"download_completed": "Завантаження завершено",
|
"download_completed": "Завантаження завершено",
|
||||||
"download_failed": "Download Failed",
|
"download_failed": "Download Failed",
|
||||||
"download_failed_for_item": "Не вдалося завантажити {{item}} - {{error}}",
|
"download_failed_for_item": "Не вдалося завантажити {{item}} - {{error}}",
|
||||||
@@ -562,10 +475,7 @@
|
|||||||
"item_already_downloading": "{{item}} is already downloading",
|
"item_already_downloading": "{{item}} is already downloading",
|
||||||
"all_files_deleted": "All Downloads Deleted Successfully",
|
"all_files_deleted": "All Downloads Deleted Successfully",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Усі файли, папки та завдання успішно видалено",
|
|
||||||
"failed_to_clean_cache_directory": "Failed to clean cache directory",
|
|
||||||
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
|
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
|
||||||
"go_to_downloads": "Перейти до завантаження",
|
|
||||||
"file_deleted": "{{item}} deleted"
|
"file_deleted": "{{item}} deleted"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +493,13 @@
|
|||||||
"none": "None",
|
"none": "None",
|
||||||
"track": "Track",
|
"track": "Track",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login"
|
||||||
"refresh": "Refresh"
|
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Шукати...",
|
"search": "Шукати...",
|
||||||
@@ -691,10 +598,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Не вдалося створити потік для Chromecast",
|
"could_not_create_stream_for_chromecast": "Не вдалося створити потік для Chromecast",
|
||||||
"message_from_server": "Повідомлення від серверу: {{message}}",
|
"message_from_server": "Повідомлення від серверу: {{message}}",
|
||||||
"next_episode": "Наступний Епізод",
|
"next_episode": "Наступний Епізод",
|
||||||
"refresh_tracks": "Оновити доріжки",
|
|
||||||
"audio_tracks": "Аудіо-доріжки:",
|
|
||||||
"playback_state": "Стан відтворення:",
|
|
||||||
"index": "Індекс:",
|
|
||||||
"continue_watching": "Продовжити перегляд",
|
"continue_watching": "Продовжити перегляд",
|
||||||
"go_back": "Назад",
|
"go_back": "Назад",
|
||||||
"downloaded_file_title": "You have this file downloaded",
|
"downloaded_file_title": "You have this file downloaded",
|
||||||
@@ -761,7 +664,6 @@
|
|||||||
"show_more": "Показати більше",
|
"show_more": "Показати більше",
|
||||||
"show_less": "Показати менше",
|
"show_less": "Показати менше",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -888,13 +790,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +926,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -100,7 +100,6 @@
|
|||||||
"continue_and_next_up": "Continue & Next Up",
|
"continue_and_next_up": "Continue & Next Up",
|
||||||
"recently_added_in": "Mới thêm trong {{libraryName}}",
|
"recently_added_in": "Mới thêm trong {{libraryName}}",
|
||||||
"suggested_movies": "Phim gợi ý",
|
"suggested_movies": "Phim gợi ý",
|
||||||
"suggested_episodes": "Tập gợi ý",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Chào mừng đến với Streamyfin",
|
"welcome_to_streamyfin": "Chào mừng đến với Streamyfin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "Một ứng dụng miễn phí và mã nguồn mở cho Jellyfin.",
|
"a_free_and_open_source_client_for_jellyfin": "Một ứng dụng miễn phí và mã nguồn mở cho Jellyfin.",
|
||||||
@@ -261,43 +260,6 @@
|
|||||||
"None": "Không hiển thị",
|
"None": "Không hiển thị",
|
||||||
"OnlyForced": "Bắt buộc"
|
"OnlyForced": "Bắt buộc"
|
||||||
},
|
},
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"bold_text": "Bold Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Black",
|
|
||||||
"Gray": "Gray",
|
|
||||||
"Silver": "Silver",
|
|
||||||
"White": "White",
|
|
||||||
"Maroon": "Maroon",
|
|
||||||
"Red": "Red",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Yellow",
|
|
||||||
"Olive": "Olive",
|
|
||||||
"Green": "Green",
|
|
||||||
"Teal": "Teal",
|
|
||||||
"Lime": "Lime",
|
|
||||||
"Purple": "Purple",
|
|
||||||
"Navy": "Navy",
|
|
||||||
"Blue": "Blue",
|
|
||||||
"Aqua": "Aqua"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "Không có",
|
|
||||||
"Thin": "Thin",
|
|
||||||
"Normal": "Normal",
|
|
||||||
"Thick": "Thick"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +277,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video Player",
|
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Khác",
|
"other_title": "Khác",
|
||||||
"video_orientation": "Hướng video",
|
"video_orientation": "Hướng video",
|
||||||
@@ -351,13 +294,7 @@
|
|||||||
"UNKNOWN": "Không rõ"
|
"UNKNOWN": "Không rõ"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Vùng an toàn trong điều khiển",
|
"safe_area_in_controls": "Vùng an toàn trong điều khiển",
|
||||||
"video_player": "Trình phát video",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Thử nghiệm + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Hiện liên kết tùy chỉnh",
|
"show_custom_menu_links": "Hiện liên kết tùy chỉnh",
|
||||||
"show_large_home_carousel": "Show Large Home Carousel (beta)",
|
|
||||||
"hide_libraries": "Ẩn thư viện",
|
"hide_libraries": "Ẩn thư viện",
|
||||||
"select_liraries_you_want_to_hide": "Chọn các thư viện muốn ẩn khỏi mục Thư viện và Trang chủ.",
|
"select_liraries_you_want_to_hide": "Chọn các thư viện muốn ẩn khỏi mục Thư viện và Trang chủ.",
|
||||||
"disable_haptic_feedback": "Tắt phản hồi rung",
|
"disable_haptic_feedback": "Tắt phản hồi rung",
|
||||||
@@ -367,9 +304,6 @@
|
|||||||
"max_auto_play_episode_count": "Số tập tự chạy tối đa",
|
"max_auto_play_episode_count": "Số tập tự chạy tối đa",
|
||||||
"disabled": "Đã tắt"
|
"disabled": "Đã tắt"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Tải xuống"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +347,18 @@
|
|||||||
"read_more_about_marlin": "Tìm hiểu thêm về Marlin.",
|
"read_more_about_marlin": "Tìm hiểu thêm về Marlin.",
|
||||||
"save_button": "Lưu",
|
"save_button": "Lưu",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Đã lưu",
|
"saved": "Đã lưu"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +374,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +385,6 @@
|
|||||||
"delete_all_downloaded_files": "Xóa toàn bộ tập tin đã tải",
|
"delete_all_downloaded_files": "Xóa toàn bộ tập tin đã tải",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +394,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -481,8 +406,7 @@
|
|||||||
"export_logs": "Xuất nhật ký",
|
"export_logs": "Xuất nhật ký",
|
||||||
"click_for_more_info": "Nhấn để xem thêm thông tin",
|
"click_for_more_info": "Nhấn để xem thêm thông tin",
|
||||||
"level": "Mức độ",
|
"level": "Mức độ",
|
||||||
"no_logs_available": "Không có nhật ký",
|
"no_logs_available": "Không có nhật ký"
|
||||||
"delete_all_logs": "Xóa tất cả nhật ký"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Ngôn ngữ",
|
"title": "Ngôn ngữ",
|
||||||
@@ -490,15 +414,12 @@
|
|||||||
"system": "Hệ thống"
|
"system": "Hệ thống"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Lỗi khi xóa tập tin",
|
"error_deleting_files": "Lỗi khi xóa tập tin"
|
||||||
"background_downloads_enabled": "Tải trong nền đã bật",
|
|
||||||
"background_downloads_disabled": "Tải trong nền đã tắt"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -518,10 +439,7 @@
|
|||||||
"downloads_title": "Tải xuống",
|
"downloads_title": "Tải xuống",
|
||||||
"tvseries": "Chương trình TV",
|
"tvseries": "Chương trình TV",
|
||||||
"movies": "Phim",
|
"movies": "Phim",
|
||||||
"queue": "Hàng đợi",
|
|
||||||
"other_media": "Other media",
|
"other_media": "Other media",
|
||||||
"queue_hint": "Hàng đợi và tải xuống sẽ bị mất khi khởi động lại ứng dụng",
|
|
||||||
"no_items_in_queue": "Không có mục trong hàng đợi",
|
|
||||||
"no_downloaded_items": "Không có mục đã tải",
|
"no_downloaded_items": "Không có mục đã tải",
|
||||||
"delete_all_movies_button": "Xóa tất cả phim",
|
"delete_all_movies_button": "Xóa tất cả phim",
|
||||||
"delete_all_tvseries_button": "Xóa tất cả chương trình TV",
|
"delete_all_tvseries_button": "Xóa tất cả chương trình TV",
|
||||||
@@ -546,13 +464,8 @@
|
|||||||
"failed_to_delete_all_tvseries": "Xóa chương trình TV thất bại",
|
"failed_to_delete_all_tvseries": "Xóa chương trình TV thất bại",
|
||||||
"deleted_media_successfully": "Deleted other media Successfully!",
|
"deleted_media_successfully": "Deleted other media Successfully!",
|
||||||
"failed_to_delete_media": "Failed to Delete other media",
|
"failed_to_delete_media": "Failed to Delete other media",
|
||||||
"download_deleted": "Download Deleted",
|
|
||||||
"download_cancelled": "Tải xuống bị hủy",
|
"download_cancelled": "Tải xuống bị hủy",
|
||||||
"could_not_delete_download": "Could Not Delete Download",
|
"could_not_delete_download": "Could Not Delete Download",
|
||||||
"download_paused": "Download Paused",
|
|
||||||
"could_not_pause_download": "Could Not Pause Download",
|
|
||||||
"download_resumed": "Download Resumed",
|
|
||||||
"could_not_resume_download": "Could Not Resume Download",
|
|
||||||
"download_completed": "Tải xuống hoàn tất",
|
"download_completed": "Tải xuống hoàn tất",
|
||||||
"download_failed": "Download Failed",
|
"download_failed": "Download Failed",
|
||||||
"download_failed_for_item": "Tải {{item}} thất bại – {{error}}",
|
"download_failed_for_item": "Tải {{item}} thất bại – {{error}}",
|
||||||
@@ -562,10 +475,7 @@
|
|||||||
"item_already_downloading": "{{item}} is already downloading",
|
"item_already_downloading": "{{item}} is already downloading",
|
||||||
"all_files_deleted": "All Downloads Deleted Successfully",
|
"all_files_deleted": "All Downloads Deleted Successfully",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "Đã xóa thành công tất cả tập tin, thư mục và công việc",
|
|
||||||
"failed_to_clean_cache_directory": "Failed to clean cache directory",
|
|
||||||
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
|
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
|
||||||
"go_to_downloads": "Tới phần tải về",
|
|
||||||
"file_deleted": "{{item}} deleted"
|
"file_deleted": "{{item}} deleted"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +493,13 @@
|
|||||||
"none": "None",
|
"none": "None",
|
||||||
"track": "Track",
|
"track": "Track",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login"
|
||||||
"refresh": "Refresh"
|
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Tìm...",
|
"search": "Tìm...",
|
||||||
@@ -691,10 +598,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Không thể tạo luồng cho Chromecast",
|
"could_not_create_stream_for_chromecast": "Không thể tạo luồng cho Chromecast",
|
||||||
"message_from_server": "Thông báo từ máy chủ: {{message}}",
|
"message_from_server": "Thông báo từ máy chủ: {{message}}",
|
||||||
"next_episode": "Tập tiếp theo",
|
"next_episode": "Tập tiếp theo",
|
||||||
"refresh_tracks": "Làm mới các track",
|
|
||||||
"audio_tracks": "Track âm thanh:",
|
|
||||||
"playback_state": "Trạng thái phát:",
|
|
||||||
"index": "Chỉ mục:",
|
|
||||||
"continue_watching": "Tiếp tục xem",
|
"continue_watching": "Tiếp tục xem",
|
||||||
"go_back": "Quay lại",
|
"go_back": "Quay lại",
|
||||||
"downloaded_file_title": "You have this file downloaded",
|
"downloaded_file_title": "You have this file downloaded",
|
||||||
@@ -761,7 +664,6 @@
|
|||||||
"show_more": "Xem thêm",
|
"show_more": "Xem thêm",
|
||||||
"show_less": "Thu gọn",
|
"show_less": "Thu gọn",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -888,13 +790,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +926,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -43,7 +43,6 @@
|
|||||||
"next_up": "下一个",
|
"next_up": "下一个",
|
||||||
"recently_added_in": "最近添加于 {{libraryName}}",
|
"recently_added_in": "最近添加于 {{libraryName}}",
|
||||||
"suggested_movies": "推荐电影",
|
"suggested_movies": "推荐电影",
|
||||||
"suggested_episodes": "推荐剧集",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "欢迎来到 Streamyfin",
|
"welcome_to_streamyfin": "欢迎来到 Streamyfin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "一个免费且开源的 Jellyfin 客户端。",
|
"a_free_and_open_source_client_for_jellyfin": "一个免费且开源的 Jellyfin 客户端。",
|
||||||
@@ -128,18 +127,12 @@
|
|||||||
"UNKNOWN": "未知"
|
"UNKNOWN": "未知"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "控制中的安全区域",
|
"safe_area_in_controls": "控制中的安全区域",
|
||||||
"video_player": "Video player",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Experimental + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "显示自定义菜单链接",
|
"show_custom_menu_links": "显示自定义菜单链接",
|
||||||
"hide_libraries": "隐藏媒体库",
|
"hide_libraries": "隐藏媒体库",
|
||||||
"select_liraries_you_want_to_hide": "选择您想从媒体库页面和主页隐藏的媒体库。",
|
"select_liraries_you_want_to_hide": "选择您想从媒体库页面和主页隐藏的媒体库。",
|
||||||
"disable_haptic_feedback": "禁用触觉反馈"
|
"disable_haptic_feedback": "禁用触觉反馈"
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "下载",
|
|
||||||
"optimized_versions_server": "Optimized Version 服务器",
|
"optimized_versions_server": "Optimized Version 服务器",
|
||||||
"save_button": "保存",
|
"save_button": "保存",
|
||||||
"optimized_server": "Optimized Server",
|
"optimized_server": "Optimized Server",
|
||||||
@@ -204,8 +197,7 @@
|
|||||||
"export_logs": "Export logs",
|
"export_logs": "Export logs",
|
||||||
"click_for_more_info": "Click for more info",
|
"click_for_more_info": "Click for more info",
|
||||||
"level": "Level",
|
"level": "Level",
|
||||||
"no_logs_available": "无可用日志",
|
"no_logs_available": "无可用日志"
|
||||||
"delete_all_logs": "删除所有日志"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "语言",
|
"title": "语言",
|
||||||
@@ -215,8 +207,6 @@
|
|||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "删除文件时出错",
|
"error_deleting_files": "删除文件时出错",
|
||||||
"background_downloads_enabled": "后台下载已启用",
|
|
||||||
"background_downloads_disabled": "后台下载已禁用",
|
|
||||||
"connected": "已连接",
|
"connected": "已连接",
|
||||||
"could_not_connect": "无法连接",
|
"could_not_connect": "无法连接",
|
||||||
"invalid_url": "无效 URL"
|
"invalid_url": "无效 URL"
|
||||||
@@ -226,9 +216,6 @@
|
|||||||
"downloads_title": "下载",
|
"downloads_title": "下载",
|
||||||
"tvseries": "剧集",
|
"tvseries": "剧集",
|
||||||
"movies": "电影",
|
"movies": "电影",
|
||||||
"queue": "队列",
|
|
||||||
"queue_hint": "应用重启后队列和下载将会丢失",
|
|
||||||
"no_items_in_queue": "队列中无项目",
|
|
||||||
"no_downloaded_items": "无已下载项目",
|
"no_downloaded_items": "无已下载项目",
|
||||||
"delete_all_movies_button": "删除所有电影",
|
"delete_all_movies_button": "删除所有电影",
|
||||||
"delete_all_tvseries_button": "删除所有剧集",
|
"delete_all_tvseries_button": "删除所有剧集",
|
||||||
@@ -264,9 +251,7 @@
|
|||||||
"no_response_received_from_server": "未收到服务器响应",
|
"no_response_received_from_server": "未收到服务器响应",
|
||||||
"error_setting_up_the_request": "设置请求时出错",
|
"error_setting_up_the_request": "设置请求时出错",
|
||||||
"failed_to_start_download_for_item_unexpected_error": "无法开始下载 {{item}}: 发生意外错误",
|
"failed_to_start_download_for_item_unexpected_error": "无法开始下载 {{item}}: 发生意外错误",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "所有文件、文件夹和任务成功删除",
|
"an_error_occured_while_deleting_files_and_jobs": "删除文件和任务时发生错误"
|
||||||
"an_error_occured_while_deleting_files_and_jobs": "删除文件和任务时发生错误",
|
|
||||||
"go_to_downloads": "前往下载"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -360,12 +345,8 @@
|
|||||||
"video_has_finished_playing": "视频播放完成!",
|
"video_has_finished_playing": "视频播放完成!",
|
||||||
"no_video_source": "无视频来源...",
|
"no_video_source": "无视频来源...",
|
||||||
"next_episode": "下一集",
|
"next_episode": "下一集",
|
||||||
"refresh_tracks": "刷新轨道",
|
|
||||||
"subtitle_tracks": "字幕轨道:",
|
"subtitle_tracks": "字幕轨道:",
|
||||||
"audio_tracks": "音频轨道:",
|
|
||||||
"playback_state": "播放状态:",
|
|
||||||
"no_data_available": "无可用数据",
|
"no_data_available": "无可用数据",
|
||||||
"index": "索引:",
|
|
||||||
"continue_watching": "继续观看",
|
"continue_watching": "继续观看",
|
||||||
"go_back": "返回"
|
"go_back": "返回"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -43,7 +43,6 @@
|
|||||||
"next_up": "下一個",
|
"next_up": "下一個",
|
||||||
"recently_added_in": "最近添加於 {{libraryName}}",
|
"recently_added_in": "最近添加於 {{libraryName}}",
|
||||||
"suggested_movies": "推薦電影",
|
"suggested_movies": "推薦電影",
|
||||||
"suggested_episodes": "推薦劇集",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "歡迎來到 Streamyfin",
|
"welcome_to_streamyfin": "歡迎來到 Streamyfin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "一個免費且開源的 Jellyfin 客戶端。",
|
"a_free_and_open_source_client_for_jellyfin": "一個免費且開源的 Jellyfin 客戶端。",
|
||||||
@@ -128,11 +127,6 @@
|
|||||||
"UNKNOWN": "未知"
|
"UNKNOWN": "未知"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "控制中的安全區域",
|
"safe_area_in_controls": "控制中的安全區域",
|
||||||
"video_player": "Video player",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Experimental + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "顯示自定義菜單鏈接",
|
"show_custom_menu_links": "顯示自定義菜單鏈接",
|
||||||
"hide_libraries": "隱藏媒體庫",
|
"hide_libraries": "隱藏媒體庫",
|
||||||
"select_liraries_you_want_to_hide": "選擇您想從媒體庫頁面和主頁隱藏的媒體庫。",
|
"select_liraries_you_want_to_hide": "選擇您想從媒體庫頁面和主頁隱藏的媒體庫。",
|
||||||
@@ -142,7 +136,6 @@
|
|||||||
"disabled": "已停用"
|
"disabled": "已停用"
|
||||||
},
|
},
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"downloads_title": "下載",
|
|
||||||
"optimized_versions_server": "Optimized Version 伺服器",
|
"optimized_versions_server": "Optimized Version 伺服器",
|
||||||
"save_button": "保存",
|
"save_button": "保存",
|
||||||
"optimized_server": "Optimized Server",
|
"optimized_server": "Optimized Server",
|
||||||
@@ -207,8 +200,7 @@
|
|||||||
"export_logs": "Export logs",
|
"export_logs": "Export logs",
|
||||||
"click_for_more_info": "Click for more info",
|
"click_for_more_info": "Click for more info",
|
||||||
"level": "Level",
|
"level": "Level",
|
||||||
"no_logs_available": "無可用日誌",
|
"no_logs_available": "無可用日誌"
|
||||||
"delete_all_logs": "刪除所有日誌"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "語言",
|
"title": "語言",
|
||||||
@@ -218,8 +210,6 @@
|
|||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "刪除文件時出錯",
|
"error_deleting_files": "刪除文件時出錯",
|
||||||
"background_downloads_enabled": "背景下載已啟用",
|
|
||||||
"background_downloads_disabled": "背景下載已禁用",
|
|
||||||
"connected": "已連接",
|
"connected": "已連接",
|
||||||
"could_not_connect": "無法連接",
|
"could_not_connect": "無法連接",
|
||||||
"invalid_url": "無效的 URL"
|
"invalid_url": "無效的 URL"
|
||||||
@@ -233,9 +223,6 @@
|
|||||||
"downloads_title": "下載",
|
"downloads_title": "下載",
|
||||||
"tvseries": "電視劇",
|
"tvseries": "電視劇",
|
||||||
"movies": "電影",
|
"movies": "電影",
|
||||||
"queue": "隊列",
|
|
||||||
"queue_hint": "應用重啟後隊列和下載將會丟失",
|
|
||||||
"no_items_in_queue": "隊列中無項目",
|
|
||||||
"no_downloaded_items": "無已下載項目",
|
"no_downloaded_items": "無已下載項目",
|
||||||
"delete_all_movies_button": "刪除所有電影",
|
"delete_all_movies_button": "刪除所有電影",
|
||||||
"delete_all_tvseries_button": "刪除所有電視劇",
|
"delete_all_tvseries_button": "刪除所有電視劇",
|
||||||
@@ -271,9 +258,7 @@
|
|||||||
"no_response_received_from_server": "未收到伺服器的響應",
|
"no_response_received_from_server": "未收到伺服器的響應",
|
||||||
"error_setting_up_the_request": "設置請求時出錯",
|
"error_setting_up_the_request": "設置請求時出錯",
|
||||||
"failed_to_start_download_for_item_unexpected_error": "無法開始下載 {{item}}: 發生意外錯誤",
|
"failed_to_start_download_for_item_unexpected_error": "無法開始下載 {{item}}: 發生意外錯誤",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "所有文件、文件夾和任務成功刪除",
|
"an_error_occured_while_deleting_files_and_jobs": "刪除文件和任務時發生錯誤"
|
||||||
"an_error_occured_while_deleting_files_and_jobs": "刪除文件和任務時發生錯誤",
|
|
||||||
"go_to_downloads": "前往下載"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -367,12 +352,8 @@
|
|||||||
"video_has_finished_playing": "影片播放完畢!",
|
"video_has_finished_playing": "影片播放完畢!",
|
||||||
"no_video_source": "無影片來源...",
|
"no_video_source": "無影片來源...",
|
||||||
"next_episode": "下一集",
|
"next_episode": "下一集",
|
||||||
"refresh_tracks": "刷新軌道",
|
|
||||||
"subtitle_tracks": "字幕軌道:",
|
"subtitle_tracks": "字幕軌道:",
|
||||||
"audio_tracks": "音頻軌道:",
|
|
||||||
"playback_state": "播放狀態:",
|
|
||||||
"no_data_available": "無可用數據",
|
"no_data_available": "無可用數據",
|
||||||
"index": "索引:",
|
|
||||||
"continue_watching": "繼續觀看",
|
"continue_watching": "繼續觀看",
|
||||||
"go_back": "返回"
|
"go_back": "返回"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -100,7 +100,6 @@
|
|||||||
"continue_and_next_up": "Continue & Next Up",
|
"continue_and_next_up": "Continue & Next Up",
|
||||||
"recently_added_in": "Recently Added in {{libraryName}}",
|
"recently_added_in": "Recently Added in {{libraryName}}",
|
||||||
"suggested_movies": "Suggested Movies",
|
"suggested_movies": "Suggested Movies",
|
||||||
"suggested_episodes": "Suggested Episodes",
|
|
||||||
"intro": {
|
"intro": {
|
||||||
"welcome_to_streamyfin": "Welcome to Streamyfin",
|
"welcome_to_streamyfin": "Welcome to Streamyfin",
|
||||||
"a_free_and_open_source_client_for_jellyfin": "A Free and Open-Source Client for Jellyfin.",
|
"a_free_and_open_source_client_for_jellyfin": "A Free and Open-Source Client for Jellyfin.",
|
||||||
@@ -261,43 +260,6 @@
|
|||||||
"None": "None",
|
"None": "None",
|
||||||
"OnlyForced": "OnlyForced"
|
"OnlyForced": "OnlyForced"
|
||||||
},
|
},
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"bold_text": "Bold Text",
|
|
||||||
"colors": {
|
|
||||||
"Black": "Black",
|
|
||||||
"Gray": "Gray",
|
|
||||||
"Silver": "Silver",
|
|
||||||
"White": "White",
|
|
||||||
"Maroon": "Maroon",
|
|
||||||
"Red": "Red",
|
|
||||||
"Fuchsia": "Fuchsia",
|
|
||||||
"Yellow": "Yellow",
|
|
||||||
"Olive": "Olive",
|
|
||||||
"Green": "Green",
|
|
||||||
"Teal": "Teal",
|
|
||||||
"Lime": "Lime",
|
|
||||||
"Purple": "Purple",
|
|
||||||
"Navy": "Navy",
|
|
||||||
"Blue": "Blue",
|
|
||||||
"Aqua": "Aqua"
|
|
||||||
},
|
|
||||||
"thickness": {
|
|
||||||
"None": "None",
|
|
||||||
"Thin": "Thin",
|
|
||||||
"Normal": "Normal",
|
|
||||||
"Thick": "Thick"
|
|
||||||
},
|
|
||||||
"subtitle_color": "Subtitle Color",
|
|
||||||
"subtitle_background_color": "Background Color",
|
|
||||||
"subtitle_font": "Subtitle Font",
|
|
||||||
"ksplayer_title": "KSPlayer Settings",
|
|
||||||
"hardware_decode": "Hardware Decoding",
|
|
||||||
"hardware_decode_description": "Use hardware acceleration for video decoding. Disable if you experience playback issues.",
|
|
||||||
"opensubtitles_title": "OpenSubtitles",
|
"opensubtitles_title": "OpenSubtitles",
|
||||||
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
"opensubtitles_hint": "Enter your OpenSubtitles API key to enable client-side subtitle search as a fallback when your Jellyfin server doesn't have a subtitle provider configured.",
|
||||||
"opensubtitles_api_key": "API Key",
|
"opensubtitles_api_key": "API Key",
|
||||||
@@ -315,25 +277,6 @@
|
|||||||
"bottom": "Bottom"
|
"bottom": "Bottom"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"vlc_subtitles": {
|
|
||||||
"title": "VLC Subtitle Settings",
|
|
||||||
"hint": "Customize subtitle appearance for VLC player. Changes take effect on next playback.",
|
|
||||||
"text_color": "Text Color",
|
|
||||||
"background_color": "Background Color",
|
|
||||||
"background_opacity": "Background Opacity",
|
|
||||||
"outline_color": "Outline Color",
|
|
||||||
"outline_opacity": "Outline Opacity",
|
|
||||||
"outline_thickness": "Outline Thickness",
|
|
||||||
"bold": "Bold Text",
|
|
||||||
"margin": "Bottom Margin"
|
|
||||||
},
|
|
||||||
"video_player": {
|
|
||||||
"title": "Video Player",
|
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_player_description": "Choose which video player to use on iOS.",
|
|
||||||
"ksplayer": "KSPlayer",
|
|
||||||
"vlc": "VLC"
|
|
||||||
},
|
|
||||||
"other": {
|
"other": {
|
||||||
"other_title": "Other",
|
"other_title": "Other",
|
||||||
"video_orientation": "Video Orientation",
|
"video_orientation": "Video Orientation",
|
||||||
@@ -351,13 +294,7 @@
|
|||||||
"UNKNOWN": "Unknown"
|
"UNKNOWN": "Unknown"
|
||||||
},
|
},
|
||||||
"safe_area_in_controls": "Safe Area in Controls",
|
"safe_area_in_controls": "Safe Area in Controls",
|
||||||
"video_player": "Video Player",
|
|
||||||
"video_players": {
|
|
||||||
"VLC_3": "VLC 3",
|
|
||||||
"VLC_4": "VLC 4 (Experimental + PiP)"
|
|
||||||
},
|
|
||||||
"show_custom_menu_links": "Show Custom Menu Links",
|
"show_custom_menu_links": "Show Custom Menu Links",
|
||||||
"show_large_home_carousel": "Show Large Home Carousel (beta)",
|
|
||||||
"hide_libraries": "Hide Libraries",
|
"hide_libraries": "Hide Libraries",
|
||||||
"select_liraries_you_want_to_hide": "Select the libraries you want to hide from the Library tab and home page sections.",
|
"select_liraries_you_want_to_hide": "Select the libraries you want to hide from the Library tab and home page sections.",
|
||||||
"disable_haptic_feedback": "Disable Haptic Feedback",
|
"disable_haptic_feedback": "Disable Haptic Feedback",
|
||||||
@@ -367,9 +304,6 @@
|
|||||||
"max_auto_play_episode_count": "Max Auto Play Episode Count",
|
"max_auto_play_episode_count": "Max Auto Play Episode Count",
|
||||||
"disabled": "Disabled"
|
"disabled": "Disabled"
|
||||||
},
|
},
|
||||||
"downloads": {
|
|
||||||
"downloads_title": "Downloads"
|
|
||||||
},
|
|
||||||
"music": {
|
"music": {
|
||||||
"title": "Music",
|
"title": "Music",
|
||||||
"playback_title": "Playback",
|
"playback_title": "Playback",
|
||||||
@@ -413,23 +347,18 @@
|
|||||||
"read_more_about_marlin": "Read More About Marlin.",
|
"read_more_about_marlin": "Read More About Marlin.",
|
||||||
"save_button": "Save",
|
"save_button": "Save",
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"saved": "Saved",
|
"saved": "Saved"
|
||||||
"refreshed": "Settings refreshed from server"
|
}
|
||||||
},
|
|
||||||
"refresh_from_server": "Refresh Settings from Server"
|
|
||||||
},
|
},
|
||||||
"streamystats": {
|
"streamystats": {
|
||||||
"enable_streamystats": "Enable Streamystats",
|
|
||||||
"disable_streamystats": "Disable Streamystats",
|
"disable_streamystats": "Disable Streamystats",
|
||||||
"enable_search": "Use for Search",
|
"enable_search": "Use for Search",
|
||||||
"url": "URL",
|
"url": "URL",
|
||||||
"server_url_placeholder": "http(s)://streamystats.example.com",
|
"server_url_placeholder": "http(s)://streamystats.example.com",
|
||||||
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
"streamystats_search_hint": "Enter the URL for your Streamystats server. The URL should include http or https and optionally the port.",
|
||||||
"read_more_about_streamystats": "Read More About Streamystats.",
|
"read_more_about_streamystats": "Read More About Streamystats.",
|
||||||
"save_button": "Save",
|
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"features_title": "Features",
|
"features_title": "Features",
|
||||||
"home_sections_title": "Home Sections",
|
|
||||||
"enable_movie_recommendations": "Movie Recommendations",
|
"enable_movie_recommendations": "Movie Recommendations",
|
||||||
"enable_series_recommendations": "Series Recommendations",
|
"enable_series_recommendations": "Series Recommendations",
|
||||||
"enable_promoted_watchlists": "Promoted Watchlists",
|
"enable_promoted_watchlists": "Promoted Watchlists",
|
||||||
@@ -445,8 +374,7 @@
|
|||||||
"refresh_from_server": "Refresh Settings from Server"
|
"refresh_from_server": "Refresh Settings from Server"
|
||||||
},
|
},
|
||||||
"kefinTweaks": {
|
"kefinTweaks": {
|
||||||
"watchlist_enabler": "Enable our Watchlist integration",
|
"watchlist_enabler": "Enable our Watchlist integration"
|
||||||
"watchlist_button": "Toggle Watchlist integration"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"storage": {
|
"storage": {
|
||||||
@@ -457,7 +385,6 @@
|
|||||||
"delete_all_downloaded_files": "Delete All Downloaded Files",
|
"delete_all_downloaded_files": "Delete All Downloaded Files",
|
||||||
"music_cache_title": "Music Cache",
|
"music_cache_title": "Music Cache",
|
||||||
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
"music_cache_description": "Automatically cache songs as you listen for smoother playback and offline support",
|
||||||
"enable_music_cache": "Enable Music Cache",
|
|
||||||
"clear_music_cache": "Clear Music Cache",
|
"clear_music_cache": "Clear Music Cache",
|
||||||
"music_cache_size": "{{size}} cached",
|
"music_cache_size": "{{size}} cached",
|
||||||
"music_cache_cleared": "Music cache cleared",
|
"music_cache_cleared": "Music cache cleared",
|
||||||
@@ -467,8 +394,6 @@
|
|||||||
"clear_all_cache": "Clear All Cache",
|
"clear_all_cache": "Clear All Cache",
|
||||||
"clear_all_cache_confirm": "Clear All Cache?",
|
"clear_all_cache_confirm": "Clear All Cache?",
|
||||||
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
"clear_all_cache_confirm_desc": "Are you sure you want to clear all cached data? This will clear all cached images, music files, subtitles, and query caches. Your settings and login session will be kept.",
|
||||||
"clear_all_cache_success": "Cache Cleared",
|
|
||||||
"clear_all_cache_success_desc": "All cache has been cleared successfully.",
|
|
||||||
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
"clear_all_cache_error_desc": "An error occurred while clearing the cache."
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
@@ -481,8 +406,7 @@
|
|||||||
"export_logs": "Export Logs",
|
"export_logs": "Export Logs",
|
||||||
"click_for_more_info": "Click for More Info",
|
"click_for_more_info": "Click for More Info",
|
||||||
"level": "Level",
|
"level": "Level",
|
||||||
"no_logs_available": "No Logs Available",
|
"no_logs_available": "No Logs Available"
|
||||||
"delete_all_logs": "Delete All Logs"
|
|
||||||
},
|
},
|
||||||
"languages": {
|
"languages": {
|
||||||
"title": "Languages",
|
"title": "Languages",
|
||||||
@@ -490,15 +414,12 @@
|
|||||||
"system": "System"
|
"system": "System"
|
||||||
},
|
},
|
||||||
"toasts": {
|
"toasts": {
|
||||||
"error_deleting_files": "Error Deleting Files",
|
"error_deleting_files": "Error Deleting Files"
|
||||||
"background_downloads_enabled": "Background downloads enabled",
|
|
||||||
"background_downloads_disabled": "Background downloads disabled"
|
|
||||||
},
|
},
|
||||||
"security": {
|
"security": {
|
||||||
"title": "Security",
|
"title": "Security",
|
||||||
"inactivity_timeout": {
|
"inactivity_timeout": {
|
||||||
"title": "Inactivity Timeout",
|
"title": "Inactivity Timeout",
|
||||||
"description": "Auto logout after inactivity",
|
|
||||||
"disabled": "Disabled",
|
"disabled": "Disabled",
|
||||||
"1_minute": "1 minute",
|
"1_minute": "1 minute",
|
||||||
"5_minutes": "5 minutes",
|
"5_minutes": "5 minutes",
|
||||||
@@ -518,10 +439,7 @@
|
|||||||
"downloads_title": "Downloads",
|
"downloads_title": "Downloads",
|
||||||
"tvseries": "TV-Series",
|
"tvseries": "TV-Series",
|
||||||
"movies": "Movies",
|
"movies": "Movies",
|
||||||
"queue": "Queue",
|
|
||||||
"other_media": "Other media",
|
"other_media": "Other media",
|
||||||
"queue_hint": "Queue and downloads will be lost on app restart",
|
|
||||||
"no_items_in_queue": "No Items in Queue",
|
|
||||||
"no_downloaded_items": "No Downloaded Items",
|
"no_downloaded_items": "No Downloaded Items",
|
||||||
"delete_all_movies_button": "Delete All Movies",
|
"delete_all_movies_button": "Delete All Movies",
|
||||||
"delete_all_tvseries_button": "Delete All TV-Series",
|
"delete_all_tvseries_button": "Delete All TV-Series",
|
||||||
@@ -546,13 +464,8 @@
|
|||||||
"failed_to_delete_all_tvseries": "Failed to Delete All TV-Series",
|
"failed_to_delete_all_tvseries": "Failed to Delete All TV-Series",
|
||||||
"deleted_media_successfully": "Deleted other media Successfully!",
|
"deleted_media_successfully": "Deleted other media Successfully!",
|
||||||
"failed_to_delete_media": "Failed to Delete other media",
|
"failed_to_delete_media": "Failed to Delete other media",
|
||||||
"download_deleted": "Download Deleted",
|
|
||||||
"download_cancelled": "Download Cancelled",
|
"download_cancelled": "Download Cancelled",
|
||||||
"could_not_delete_download": "Could Not Delete Download",
|
"could_not_delete_download": "Could Not Delete Download",
|
||||||
"download_paused": "Download Paused",
|
|
||||||
"could_not_pause_download": "Could Not Pause Download",
|
|
||||||
"download_resumed": "Download Resumed",
|
|
||||||
"could_not_resume_download": "Could Not Resume Download",
|
|
||||||
"download_completed": "Download Completed",
|
"download_completed": "Download Completed",
|
||||||
"download_failed": "Download Failed",
|
"download_failed": "Download Failed",
|
||||||
"download_failed_for_item": "Download failed for {{item}} - {{error}}",
|
"download_failed_for_item": "Download failed for {{item}} - {{error}}",
|
||||||
@@ -562,10 +475,7 @@
|
|||||||
"item_already_downloading": "{{item}} is already downloading",
|
"item_already_downloading": "{{item}} is already downloading",
|
||||||
"all_files_deleted": "All Downloads Deleted Successfully",
|
"all_files_deleted": "All Downloads Deleted Successfully",
|
||||||
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
"files_deleted_by_type": "{{count}} {{type}} deleted",
|
||||||
"all_files_folders_and_jobs_deleted_successfully": "All files, folders, and jobs deleted successfully",
|
|
||||||
"failed_to_clean_cache_directory": "Failed to clean cache directory",
|
|
||||||
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
|
"could_not_get_download_url_for_item": "Could not get download URL for {{itemName}}",
|
||||||
"go_to_downloads": "Go to Downloads",
|
|
||||||
"file_deleted": "{{item}} deleted"
|
"file_deleted": "{{item}} deleted"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -583,16 +493,13 @@
|
|||||||
"none": "None",
|
"none": "None",
|
||||||
"track": "Track",
|
"track": "Track",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"stop": "Stop",
|
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"remove": "Remove",
|
"remove": "Remove",
|
||||||
"next": "Next",
|
|
||||||
"back": "Back",
|
"back": "Back",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
"verifying": "Verifying...",
|
"verifying": "Verifying...",
|
||||||
"login": "Login",
|
"login": "Login"
|
||||||
"refresh": "Refresh"
|
|
||||||
},
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"search": "Search...",
|
"search": "Search...",
|
||||||
@@ -691,10 +598,6 @@
|
|||||||
"could_not_create_stream_for_chromecast": "Could not create a stream for Chromecast",
|
"could_not_create_stream_for_chromecast": "Could not create a stream for Chromecast",
|
||||||
"message_from_server": "Message from Server: {{message}}",
|
"message_from_server": "Message from Server: {{message}}",
|
||||||
"next_episode": "Next Episode",
|
"next_episode": "Next Episode",
|
||||||
"refresh_tracks": "Refresh Tracks",
|
|
||||||
"audio_tracks": "Audio Tracks:",
|
|
||||||
"playback_state": "Playback State:",
|
|
||||||
"index": "Index:",
|
|
||||||
"continue_watching": "Continue Watching",
|
"continue_watching": "Continue Watching",
|
||||||
"go_back": "Go Back",
|
"go_back": "Go Back",
|
||||||
"downloaded_file_title": "You have this file downloaded",
|
"downloaded_file_title": "You have this file downloaded",
|
||||||
@@ -761,7 +664,6 @@
|
|||||||
"show_more": "Show More",
|
"show_more": "Show More",
|
||||||
"show_less": "Show Less",
|
"show_less": "Show Less",
|
||||||
"left": "left",
|
"left": "left",
|
||||||
"more_info": "More Info",
|
|
||||||
"director": "Director",
|
"director": "Director",
|
||||||
"cast": "Cast",
|
"cast": "Cast",
|
||||||
"technical_details": "Technical Details",
|
"technical_details": "Technical Details",
|
||||||
@@ -888,13 +790,9 @@
|
|||||||
"playlists": "Playlists",
|
"playlists": "Playlists",
|
||||||
"tracks": "tracks"
|
"tracks": "tracks"
|
||||||
},
|
},
|
||||||
"filters": {
|
|
||||||
"all": "All"
|
|
||||||
},
|
|
||||||
"recently_added": "Recently Added",
|
"recently_added": "Recently Added",
|
||||||
"recently_played": "Recently Played",
|
"recently_played": "Recently Played",
|
||||||
"frequently_played": "Frequently Played",
|
"frequently_played": "Frequently Played",
|
||||||
"explore": "Explore",
|
|
||||||
"top_tracks": "Top Tracks",
|
"top_tracks": "Top Tracks",
|
||||||
"play": "Play",
|
"play": "Play",
|
||||||
"shuffle": "Shuffle",
|
"shuffle": "Shuffle",
|
||||||
@@ -1028,7 +926,6 @@
|
|||||||
"pairing": {
|
"pairing": {
|
||||||
"pair_with_phone": "Pair with Phone",
|
"pair_with_phone": "Pair with Phone",
|
||||||
"pair_with_phone_title": "Login TV",
|
"pair_with_phone_title": "Login TV",
|
||||||
"pair_with_phone_description": "Scan the QR code displayed on your TV to log in",
|
|
||||||
"waiting_for_phone": "Waiting for phone...",
|
"waiting_for_phone": "Waiting for phone...",
|
||||||
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
"scan_with_phone": "Scan with the Streamyfin app on your phone",
|
||||||
"logging_in": "Logging in...",
|
"logging_in": "Logging in...",
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import {
|
|||||||
type SortOrder,
|
type SortOrder,
|
||||||
SubtitlePlaybackMode,
|
SubtitlePlaybackMode,
|
||||||
} from "@jellyfin/sdk/lib/generated-client";
|
} from "@jellyfin/sdk/lib/generated-client";
|
||||||
import { t } from "i18next";
|
|
||||||
import { atom, useAtom, useAtomValue } from "jotai";
|
import { atom, useAtom, useAtomValue } from "jotai";
|
||||||
import { useCallback, useEffect, useMemo } from "react";
|
import { useCallback, useEffect, useMemo } from "react";
|
||||||
import { BITRATES, type Bitrate } from "@/components/BitrateSelector";
|
import { BITRATES, type Bitrate } from "@/components/BitrateSelector";
|
||||||
@@ -122,46 +121,6 @@ export interface MaxAutoPlayEpisodeCount {
|
|||||||
value: number;
|
value: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* The plugin may send object-typed settings as plain primitives.
|
|
||||||
* Resolve to the proper option object from the available choices.
|
|
||||||
*/
|
|
||||||
const normalizePluginValue = (
|
|
||||||
settingsKey: keyof Settings,
|
|
||||||
value: unknown,
|
|
||||||
): unknown => {
|
|
||||||
if (typeof value !== "object" || value === null) {
|
|
||||||
const defaultVal = defaultValues[settingsKey];
|
|
||||||
if (
|
|
||||||
typeof defaultVal === "object" &&
|
|
||||||
defaultVal !== null &&
|
|
||||||
"key" in defaultVal &&
|
|
||||||
"value" in defaultVal
|
|
||||||
) {
|
|
||||||
// defaultBitrate needs a lookup because its keys are human-readable
|
|
||||||
// (e.g. "8 Mb/s") that can't be derived from the raw value (e.g. 8000000).
|
|
||||||
// Other { key, value } settings like maxAutoPlayEpisodeCount work with
|
|
||||||
// the fallback because their keys are just String(value) (e.g. "5").
|
|
||||||
if (settingsKey === "defaultBitrate") {
|
|
||||||
const match = BITRATES.find(
|
|
||||||
(b) => b.key === value || b.value === value,
|
|
||||||
);
|
|
||||||
if (match) return match;
|
|
||||||
}
|
|
||||||
// maxAutoPlayEpisodeCount: 0 is invalid (breaks autoplay), clamp to -1
|
|
||||||
// -1 key must match the translated dropdown label so the UI shows "Disabled"
|
|
||||||
if (
|
|
||||||
settingsKey === "maxAutoPlayEpisodeCount" &&
|
|
||||||
(value === 0 || value === -1)
|
|
||||||
) {
|
|
||||||
return { key: t("home.settings.other.disabled"), value: -1 };
|
|
||||||
}
|
|
||||||
return { key: String(value), value };
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return value;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type HomeSectionLatestResolver = {
|
export type HomeSectionLatestResolver = {
|
||||||
parentId?: string;
|
parentId?: string;
|
||||||
limit?: number;
|
limit?: number;
|
||||||
@@ -468,37 +427,61 @@ export const useSettings = () => {
|
|||||||
[_setPluginSettings],
|
[_setPluginSettings],
|
||||||
);
|
);
|
||||||
|
|
||||||
const refreshStreamyfinPluginSettings = useCallback(async () => {
|
const refreshStreamyfinPluginSettings = useCallback(
|
||||||
if (!api) {
|
async (forceOverride = false) => {
|
||||||
return;
|
if (!api) {
|
||||||
}
|
return;
|
||||||
const newPluginSettings = await api.getStreamyfinPluginConfig().then(
|
|
||||||
({ data }) => {
|
|
||||||
writeInfoLog("Got plugin settings", data?.settings);
|
|
||||||
return data?.settings;
|
|
||||||
},
|
|
||||||
(_err) => undefined,
|
|
||||||
);
|
|
||||||
setPluginSettings(newPluginSettings);
|
|
||||||
|
|
||||||
// Locked/unlocked values are handled by the settings memo, which
|
|
||||||
// applies locked values at runtime without overwriting user storage.
|
|
||||||
// We only handle auto-enabling Streamystats here.
|
|
||||||
if (newPluginSettings && _settings) {
|
|
||||||
const streamyStatsUrl = newPluginSettings.streamyStatsServerUrl;
|
|
||||||
if (streamyStatsUrl?.value && _settings.searchEngine !== "Streamystats") {
|
|
||||||
const newSettings = {
|
|
||||||
...defaultValues,
|
|
||||||
..._settings,
|
|
||||||
searchEngine: "Streamystats",
|
|
||||||
} as Settings;
|
|
||||||
setSettings(newSettings);
|
|
||||||
saveSettings(newSettings);
|
|
||||||
}
|
}
|
||||||
}
|
const newPluginSettings = await api.getStreamyfinPluginConfig().then(
|
||||||
|
({ data }) => {
|
||||||
|
writeInfoLog("Got plugin settings", data?.settings);
|
||||||
|
return data?.settings;
|
||||||
|
},
|
||||||
|
(_err) => undefined,
|
||||||
|
);
|
||||||
|
setPluginSettings(newPluginSettings);
|
||||||
|
|
||||||
return newPluginSettings;
|
// Apply plugin values to settings
|
||||||
}, [api, _settings]);
|
if (newPluginSettings && _settings) {
|
||||||
|
const updates: Partial<Settings> = {};
|
||||||
|
for (const [key, setting] of Object.entries(newPluginSettings)) {
|
||||||
|
if (setting && !setting.locked && setting.value !== undefined) {
|
||||||
|
const settingsKey = key as keyof Settings;
|
||||||
|
const effectiveValue = getEffectiveSettingValue(
|
||||||
|
_settings,
|
||||||
|
settingsKey,
|
||||||
|
);
|
||||||
|
// Apply if forceOverride is true, or if neither persisted settings
|
||||||
|
// nor app defaults provide a meaningful value.
|
||||||
|
if (forceOverride || !hasMeaningfulSettingValue(effectiveValue)) {
|
||||||
|
(updates as any)[settingsKey] = setting.value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Auto-enable Streamystats if server URL is provided
|
||||||
|
const streamyStatsUrl = newPluginSettings.streamyStatsServerUrl;
|
||||||
|
if (
|
||||||
|
streamyStatsUrl?.value &&
|
||||||
|
_settings.searchEngine !== "Streamystats"
|
||||||
|
) {
|
||||||
|
updates.searchEngine = "Streamystats";
|
||||||
|
}
|
||||||
|
if (Object.keys(updates).length > 0) {
|
||||||
|
const newSettings = {
|
||||||
|
...defaultValues,
|
||||||
|
..._settings,
|
||||||
|
...updates,
|
||||||
|
} as Settings;
|
||||||
|
setSettings(newSettings);
|
||||||
|
saveSettings(newSettings);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return newPluginSettings;
|
||||||
|
},
|
||||||
|
[api, _settings],
|
||||||
|
);
|
||||||
|
|
||||||
const updateSettings = (update: Partial<Settings>) => {
|
const updateSettings = (update: Partial<Settings>) => {
|
||||||
if (!_settings) {
|
if (!_settings) {
|
||||||
@@ -529,13 +512,8 @@ export const useSettings = () => {
|
|||||||
Partial<Settings>
|
Partial<Settings>
|
||||||
>((acc, [key, setting]) => {
|
>((acc, [key, setting]) => {
|
||||||
if (setting) {
|
if (setting) {
|
||||||
let { value } = setting;
|
const { value, locked } = setting;
|
||||||
const { locked } = setting;
|
|
||||||
const settingsKey = key as keyof Settings;
|
const settingsKey = key as keyof Settings;
|
||||||
|
|
||||||
// Normalize object-typed settings from plugin (plain primitive → { key, value })
|
|
||||||
value = normalizePluginValue(settingsKey, value);
|
|
||||||
|
|
||||||
const effectiveValue = getEffectiveSettingValue(_settings, settingsKey);
|
const effectiveValue = getEffectiveSettingValue(_settings, settingsKey);
|
||||||
|
|
||||||
(acc as any)[settingsKey] = locked
|
(acc as any)[settingsKey] = locked
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ export function startPairingListener(
|
|||||||
});
|
});
|
||||||
|
|
||||||
socket.on("error", (err) => {
|
socket.on("error", (err) => {
|
||||||
if (!active) return;
|
|
||||||
if (__DEV__) console.error("[PairingService] Socket error:", err);
|
if (__DEV__) console.error("[PairingService] Socket error:", err);
|
||||||
onError?.(err.message);
|
onError?.(err.message);
|
||||||
cleanup();
|
cleanup();
|
||||||
|
|||||||
Reference in New Issue
Block a user