This commit is contained in:
Simon Caron
2025-01-05 16:03:19 -05:00
parent eb7fa93f9b
commit 249109a94e
8 changed files with 72 additions and 42 deletions

View File

@@ -247,7 +247,7 @@ const page: React.FC = () => {
}}
set={setSelectedGenres}
values={selectedGenres}
title={t("library.headers.genres")}
title={t("library.filters.genres")}
renderItemLabel={(item) => item.toString()}
searchFilter={(item, search) =>
item.toLowerCase().includes(search.toLowerCase())
@@ -274,7 +274,7 @@ const page: React.FC = () => {
}}
set={setSelectedYears}
values={selectedYears}
title={t("library.headers.years")}
title={t("library.filters.years")}
renderItemLabel={(item) => item.toString()}
searchFilter={(item, search) => item.includes(search)}
/>
@@ -299,7 +299,7 @@ const page: React.FC = () => {
}}
set={setSelectedTags}
values={selectedTags}
title={t("library.headers.tags")}
title={t("library.filters.tags")}
renderItemLabel={(item) => item.toString()}
searchFilter={(item, search) =>
item.toLowerCase().includes(search.toLowerCase())
@@ -317,7 +317,7 @@ const page: React.FC = () => {
queryFn={async () => sortOptions.map((s) => s.key)}
set={setSortBy}
values={sortBy}
title={t("library.headers.sort_by")}
title={t("library.filters.sort_by")}
renderItemLabel={(item) =>
sortOptions.find((i) => i.key === item)?.value || ""
}
@@ -337,7 +337,7 @@ const page: React.FC = () => {
queryFn={async () => sortOrderOptions.map((s) => s.key)}
set={setSortOrder}
values={sortOrder}
title={t("library.headers.sort_order")}
title={t("library.filters.sort_order")}
renderItemLabel={(item) =>
sortOrderOptions.find((i) => i.key === item)?.value || ""
}

View File

@@ -17,6 +17,7 @@ import {
View,
} from "react-native";
import { useSafeAreaInsets } from "react-native-safe-area-context";
import { useTranslation } from "react-i18next";
const HOUR_HEIGHT = 30;
const ITEMS_PER_PAGE = 20;
@@ -177,6 +178,7 @@ const PageButtons: React.FC<PageButtonsProps> = ({
onNextPage,
isNextDisabled,
}) => {
const { t } = useTranslation();
return (
<View className="flex flex-row justify-between items-center bg-neutral-800 w-full px-4 py-2">
<TouchableOpacity
@@ -194,7 +196,7 @@ const PageButtons: React.FC<PageButtonsProps> = ({
currentPage === 1 ? "text-gray-500" : "text-white"
}`}
>
Previous
{t("live_tv.previous")}
</Text>
</TouchableOpacity>
<Text className="text-white">Page {currentPage}</Text>
@@ -206,7 +208,7 @@ const PageButtons: React.FC<PageButtonsProps> = ({
<Text
className={`mr-1 ${isNextDisabled ? "text-gray-500" : "text-white"}`}
>
Next
{t("live_tv.next")}
</Text>
<Ionicons
name="chevron-forward"

View File

@@ -7,12 +7,15 @@ import { useAtom } from "jotai";
import React from "react";
import { ScrollView, View } from "react-native";
import { useSafeAreaInsets } from "react-native-safe-area-context";
import { useTranslation } from "react-i18next";
export default function page() {
const [api] = useAtom(apiAtom);
const [user] = useAtom(userAtom);
const insets = useSafeAreaInsets();
const { t } = useTranslation();
return (
<ScrollView
nestedScrollEnabled
@@ -28,7 +31,7 @@ export default function page() {
<View className="flex flex-col space-y-2">
<ScrollingCollectionList
queryKey={["livetv", "recommended"]}
title={"On now"}
title={t("live_tv.on_now")}
queryFn={async () => {
if (!api) return [] as BaseItemDto[];
const res = await getLiveTvApi(api).getRecommendedPrograms({
@@ -46,7 +49,7 @@ export default function page() {
/>
<ScrollingCollectionList
queryKey={["livetv", "shows"]}
title={"Shows"}
title={t("live_tv.shows")}
queryFn={async () => {
if (!api) return [] as BaseItemDto[];
const res = await getLiveTvApi(api).getLiveTvPrograms({
@@ -68,7 +71,7 @@ export default function page() {
/>
<ScrollingCollectionList
queryKey={["livetv", "movies"]}
title={"Movies"}
title={t("live_tv.movies")}
queryFn={async () => {
if (!api) return [] as BaseItemDto[];
const res = await getLiveTvApi(api).getLiveTvPrograms({
@@ -86,7 +89,7 @@ export default function page() {
/>
<ScrollingCollectionList
queryKey={["livetv", "sports"]}
title={"Sports"}
title={t("live_tv.sports")}
queryFn={async () => {
if (!api) return [] as BaseItemDto[];
const res = await getLiveTvApi(api).getLiveTvPrograms({
@@ -104,7 +107,7 @@ export default function page() {
/>
<ScrollingCollectionList
queryKey={["livetv", "kids"]}
title={"For Kids"}
title={t("live_tv.for_kids")}
queryFn={async () => {
if (!api) return [] as BaseItemDto[];
const res = await getLiveTvApi(api).getLiveTvPrograms({
@@ -122,7 +125,7 @@ export default function page() {
/>
<ScrollingCollectionList
queryKey={["livetv", "news"]}
title={"News"}
title={t("live_tv.news")}
queryFn={async () => {
if (!api) return [] as BaseItemDto[];
const res = await getLiveTvApi(api).getLiveTvPrograms({

View File

@@ -1,11 +1,13 @@
import { Text } from "@/components/common/Text";
import React from "react";
import { View } from "react-native";
import { useTranslation } from "react-i18next";
export default function page() {
const { t } = useTranslation();
return (
<View className="flex items-center justify-center h-full -mt-12">
<Text>Coming soon</Text>
<Text>{t("live_tv.coming_soon")}</Text>
</View>
);
}

View File

@@ -303,7 +303,7 @@ const Page = () => {
}}
set={setSelectedGenres}
values={selectedGenres}
title={t("library.headers.genres")}
title={t("library.filters.genres")}
renderItemLabel={(item) => item.toString()}
searchFilter={(item, search) =>
item.toLowerCase().includes(search.toLowerCase())
@@ -330,7 +330,7 @@ const Page = () => {
}}
set={setSelectedYears}
values={selectedYears}
title={t("library.headers.years")}
title={t("library.filters.years")}
renderItemLabel={(item) => item.toString()}
searchFilter={(item, search) => item.includes(search)}
/>
@@ -355,7 +355,7 @@ const Page = () => {
}}
set={setSelectedTags}
values={selectedTags}
title={t("library.headers.tags")}
title={t("library.filters.tags")}
renderItemLabel={(item) => item.toString()}
searchFilter={(item, search) =>
item.toLowerCase().includes(search.toLowerCase())
@@ -373,7 +373,7 @@ const Page = () => {
queryFn={async () => sortOptions.map((s) => s.key)}
set={setSortBy}
values={sortBy}
title={t("library.headers.sort_by")}
title={t("library.filters.sort_by")}
renderItemLabel={(item) =>
sortOptions.find((i) => i.key === item)?.value || ""
}
@@ -393,7 +393,7 @@ const Page = () => {
queryFn={async () => sortOrderOptions.map((s) => s.key)}
set={setSortOrder}
values={sortOrder}
title={t("library.headers.sort_order")}
title={t("library.filters.sort_order")}
renderItemLabel={(item) =>
sortOrderOptions.find((i) => i.key === item)?.value || ""
}

View File

@@ -45,19 +45,19 @@ export const VideoDebugInfo: React.FC<Props> = ({ playerRef, ...props }) => {
}}
{...props}
>
<Text className="font-bold">{t("item_card.playback_state")}</Text>
<Text className="font-bold mt-2.5">{t("item_card.audio_tracks")}</Text>
<Text className="font-bold">{t("player.playback_state")}</Text>
<Text className="font-bold mt-2.5">{t("player.audio_tracks")}</Text>
{audioTracks &&
audioTracks.map((track, index) => (
<Text key={index}>
{track.name} ({t("item_card.index")} {track.index})
{track.name} ({t("player.index")} {track.index})
</Text>
))}
<Text className="font-bold mt-2.5">{t("item_card.subtitles_tracks")}</Text>
<Text className="font-bold mt-2.5">{t("player.subtitles_tracks")}</Text>
{subtitleTracks &&
subtitleTracks.map((track, index) => (
<Text key={index}>
{track.name} ({t("item_card.index")} {track.index})
{track.name} ({t("player.index")} {track.index})
</Text>
))}
<TouchableOpacity
@@ -69,7 +69,7 @@ export const VideoDebugInfo: React.FC<Props> = ({ playerRef, ...props }) => {
}
}}
>
<Text className="text-white text-center">{t("item_card.refresh_tracks")}</Text>
<Text className="text-white text-center">{t("player.refresh_tracks")}</Text>
</TouchableOpacity>
</View>
);

View File

@@ -242,7 +242,7 @@
"show_titles": "Show titles",
"show_stats": "Show stats"
},
"headers": {
"filters": {
"genres": "Genres",
"years": "Years",
"sort_by": "Sort By",
@@ -272,7 +272,13 @@
"message_from_server": "Message from server: {{message}}",
"video_has_finished_playing": "Video has finished playing!",
"no_video_source": "No video source...",
"next_episode": "Next Episode"
"next_episode": "Next Episode",
"refresh_tracks": "Refresh Tracks",
"subtitle_tracks": "Subtitle Tracks:",
"audio_tracks": "Audio Tracks:",
"playback_state": "Playback State:",
"no_data_available": "No data available",
"index": "Index:"
},
"item_card": {
"next_up": "Next up",
@@ -298,12 +304,6 @@
"x_albums": "{{count}} albums",
"artists": "Artists",
"could_not_load_item": "Could not load item",
"refresh_tracks": "Refresh Tracks",
"subtitle_tracks": "Subtitle Tracks:",
"audio_tracks": "Audio Tracks:",
"playback_state": "Playback State:",
"no_data_available": "No data available",
"index": "Index:",
"download": {
"download_season": "Download Season",
"download_x_item": "Download {{item_count}} items",
@@ -312,6 +312,18 @@
"using_default_method": "Using default method"
}
},
"live_tv": {
"next": "Next",
"previous": "Previous",
"live_tv": "Live TV",
"coming_soon": "Coming soon",
"on_now": "On now",
"shows": "Shows",
"movies": "Movies",
"sports": "Sports",
"for_kids": "For Kids",
"news": "News"
},
"jellyseerr":{
"confirm": "Confirm",
"cancel": "Cancel",

View File

@@ -24,7 +24,6 @@
"clear_button": "Effacer"
},
"home": {
"home": "Accueil",
"no_internet": "Pas d'Internet",
"no_items": "Aucun item",
"no_internet_message": "Aucun problème, vous pouvez toujours regarder\nle contenu téléchargé.",
@@ -243,7 +242,7 @@
"show_titles": "Afficher les titres",
"show_stats": "Afficher les statistiques"
},
"headers": {
"filters": {
"genres": "Genres",
"years": "Années",
"sort_by": "Trier par",
@@ -273,7 +272,13 @@
"message_from_server": "Message du serveur: {{message}}",
"video_has_finished_playing": "La vidéo a fini de jouer!",
"no_video_source": "Aucune source vidéo...",
"next_episode": "Épisode suivant"
"next_episode": "Épisode suivant",
"refresh_tracks": "Rafraîchir les pistes",
"subtitle_tracks": "Pistes de sous-titres:",
"audio_tracks": "Pistes audio:",
"playback_state": "État de lecture:",
"no_data_available": "Aucune donnée disponible",
"index": "Index:"
},
"item_card": {
"next_up": "À suivre",
@@ -299,12 +304,6 @@
"x_albums": "{{count}} albums",
"artists": "Artistes",
"could_not_load_item": "Impossible de charger l'item",
"refresh_tracks": "Rafraîchir les pistes",
"subtitle_tracks": "Pistes de sous-titres:",
"audio_tracks": "Pistes audio:",
"playback_state": "État de lecture:",
"no_data_available": "Aucune donnée disponible",
"index": "Index:",
"download": {
"download_season": "Télécharger la saison",
"download_x_item": "Télécharger {{item_count}} items",
@@ -313,6 +312,18 @@
"using_default_method": "Avec la méthode par défaut"
}
},
"live_tv": {
"next": "Suivant",
"previous": "Précédent",
"live_tv": "TV en direct",
"coming_soon": "Bientôt",
"on_now": "En ce moment",
"shows": "Émissions",
"movies": "Films",
"sports": "Sports",
"for_kids": "Pour enfants",
"news": "Actualités"
},
"jellyseerr":{
"confirm": "Confirmer",
"cancel": "Annuler",