diff --git a/mobile/traque-app/app/(auth)/_layout.jsx b/mobile/traque-app/app/(auth)/_layout.jsx index 96ccf70..9204836 100644 --- a/mobile/traque-app/app/(auth)/_layout.jsx +++ b/mobile/traque-app/app/(auth)/_layout.jsx @@ -1,8 +1,42 @@ +// React +import { View, StyleSheet } from 'react-native'; +import { useTranslation } from 'react-i18next'; // Expo import { Slot } from 'expo-router'; +// Components +import { IconButton } from '@/components/common/IconButton'; const AuthLayout = () => { - return ; + const { i18n } = useTranslation(); + + const toggleLanguage = () => { + i18n.changeLanguage(i18n.language === 'fr' ? 'en' : 'fr'); + }; + + return ( + + + + + ); }; export default AuthLayout; + +const styles = StyleSheet.create({ + globalContainer: { + flex: 1 + }, + languageButton: { + position: 'absolute', + top: 0, + right: 0, + width: 60, + height: 60, + backgroundColor: "rgb(126, 182, 199)", + borderBottomLeftRadius: 20, + padding: 5, + justifyContent: 'center', + alignItems: 'center', + } +}); diff --git a/mobile/traque-app/app/(auth)/login.jsx b/mobile/traque-app/app/(auth)/login.jsx index 2ef8ce6..b402040 100644 --- a/mobile/traque-app/app/(auth)/login.jsx +++ b/mobile/traque-app/app/(auth)/login.jsx @@ -11,8 +11,6 @@ import { useAuth } from "@/contexts/authContext"; import { usePickImage } from '@/hooks/usePickImage'; // Services import { uploadTeamImage } from '@/services/api/image'; -// Constants -import { COLORS } from '@/constants'; const Login = () => { const { t } = useTranslation(); @@ -53,28 +51,20 @@ const Login = () => { }; return ( - - - - - {t("login.header.title")} - - - - - - {t("login.form.image_label")} - {t("login.form.image_sublabel")} - - - - - - {isSubmitting ? "..." : t("login.form.validate_button")} - - - + + + + {t("login.header.title")} + + + {t("login.form.image_label")} + {t("login.form.image_sublabel")} + + + + {isSubmitting ? "..." : t("login.form.validate_button")} + ); }; @@ -82,55 +72,53 @@ const Login = () => { export default Login; const styles = StyleSheet.create({ - container: { - flexGrow: 1, - alignItems: 'center', - paddingVertical: 20, - backgroundColor: COLORS.background + outerScrollContainer: { + flex: 1, }, - transitionContainer: { + innerScrollContainer: { flexGrow: 1, - width: '80%', - maxWidth: 600, + justifyContent: 'space-between', alignItems: 'center', + paddingVertical: 40, + paddingHorizontal: 20, + gap: 20, }, - subContainer: { - flexGrow: 1, - width: "100%", + logoContainer: { + justifyContent: "center", alignItems: 'center', - justifyContent: 'center', - margin: 10, + gap: 10, }, logoImage: { width: 130, height: 130, - margin: 10, }, logoText: { fontSize: 50, fontWeight: 'bold', }, - buttonContainer: { - width: "100%", - maxWidth: 240, - height: 80, + input: { + width: "80%", + }, + imageContainer: { + justifyContent: "center", alignItems: 'center', - justifyContent: 'center', - padding: 3, - borderWidth: 4, - borderColor: '#888', - borderRadius: 18 + }, + imageLabel: { + fontSize: 15 + }, + imageSubLabel:{ + fontSize: 13 }, button: { borderRadius: 10, - width: '100%', - height: '100%', + width: 200, + height: 70, alignItems: 'center', justifyContent: 'center', backgroundColor: '#555' }, buttonLabel: { color: '#fff', - fontSize: 16, + fontSize: 20, }, }); diff --git a/mobile/traque-app/app/(game)/_layout.jsx b/mobile/traque-app/app/(game)/_layout.jsx index 6314d03..45a7d1e 100644 --- a/mobile/traque-app/app/(game)/_layout.jsx +++ b/mobile/traque-app/app/(game)/_layout.jsx @@ -1,8 +1,76 @@ +// React +import { View, Text, StyleSheet } from 'react-native'; +import { useTranslation } from 'react-i18next'; // Expo import { Slot } from 'expo-router'; +// Contexts +import { useAuth } from '@/contexts/authContext'; +import { useTeam } from '@/contexts/teamContext'; +// Components +import { IconButton } from '@/components/common/IconButton'; +// Constants +import { COLORS } from '@/constants'; const GameLayout = () => { - return ; + const { t, i18n } = useTranslation(); + const { logout } = useAuth(); + const { teamInfos } = useTeam(); + const { name } = teamInfos; + + const toggleLanguage = () => { + i18n.changeLanguage(i18n.language === 'fr' ? 'en' : 'fr'); + }; + + const formatText = (text, limit) => { + if (text == null) return t("common.no_value"); + + if (text.length > limit) { + return text.substring(0, limit) + "..."; + } else { + return text; + } + }; + + formatText("les minions du bds qui gagne"); + + return ( + + + + {formatText(name, 22)} + + + + + ); }; export default GameLayout; + +const styles = StyleSheet.create({ + globalContainer: { + flex: 1 + }, + headerContainer: { + backgroundColor: COLORS.background, + flexDirection: "row", + alignItems: "center", + padding: 10, + gap: 10, + elevation: 10, + }, + name: { + fontSize: 30, + fontWeight: "bold", + textAlign: "center", + flex: 1 + }, + logoutIcon: { + width: 50, + height: 50 + }, + traductionIcon: { + width: 60, + height: 60 + } +}); diff --git a/mobile/traque-app/app/(game)/end.jsx b/mobile/traque-app/app/(game)/end.jsx index a48d891..1e892ad 100644 --- a/mobile/traque-app/app/(game)/end.jsx +++ b/mobile/traque-app/app/(game)/end.jsx @@ -1,31 +1,117 @@ // React -import { View, Text, StyleSheet } from 'react-native'; +import { Text, StyleSheet, ScrollView } from 'react-native'; +import { useTranslation } from 'react-i18next'; // Components -import { Header } from '@/components/game/Header'; +import { TeamStats } from '@/components/game/TeamStats'; +import { Show } from '@/components/common/Show'; +// Hook +import { useUserState } from '@/hooks/useUserState'; // Constants -import { COLORS } from '@/constants'; +import { USER_STATE } from '@/constants'; + +/* +const Leaderboard = ({ teams }) => { + return ( + + {teams.map((item, index) => { + const isSelected = index+1 == 5; + return ( + + {index + 1} + + {item} + + + ); + })} + + ); +}; + + + Classement + + + + Parcours + + + + + + + + mapView: { + height: 300, + borderRadius: 20, + overflow: "hidden" + }, + map: { + flex: 1 + }, + + // Classement + leaderboardContainer: { + gap: 8, + }, + item: { + flexDirection: 'row', + alignItems: 'center', + paddingVertical: 10, + paddingHorizontal: 20, + backgroundColor: '#f9f9f9', + borderRadius: 8, + borderWidth: 2, + gap: 20 + }, + selectedTeam: { + backgroundColor: 'rgb(126, 182, 199)', + }, + rank: { + fontSize: 18, + fontWeight: 'bold', + color: '#000000', + }, + teamName: { + fontSize: 16, + color: '#000000', + }, +*/ const End = () => { + const { t } = useTranslation(); + const userState = useUserState(); + return ( - - -
- Fin de la partie ! - - + + + {t("end.title_captured")} + + + {t("end.title_win")} + + {t("end.paragraph")} + + ); }; export default End; const styles = StyleSheet.create({ - globalContainer: { - backgroundColor: COLORS.background, - flex: 1, + outerScrollview: { + flex: 1 }, - topContainer: { - width: '100%', - alignItems: 'center', - padding: 15, + innerScrollview: { + padding: 20, + gap: 20, + }, + title: { + fontSize: 24, + fontWeight: "bold", + textAlign: "center" + }, + subtitle: { + fontSize: 15, } }); diff --git a/mobile/traque-app/app/(game)/play.jsx b/mobile/traque-app/app/(game)/play.jsx index 086d6ae..d66e79e 100644 --- a/mobile/traque-app/app/(game)/play.jsx +++ b/mobile/traque-app/app/(game)/play.jsx @@ -1,6 +1,6 @@ // React import { useState } from 'react'; -import { View, Alert, StyleSheet } from 'react-native'; +import { Text, View, Alert, StyleSheet } from 'react-native'; import LinearGradient from 'react-native-linear-gradient'; import { useTranslation } from 'react-i18next'; // Components @@ -9,7 +9,6 @@ import { TimerMMSS } from '@/components/common/Timer'; import { Show } from '@/components/common/Show'; import { PositionMarker } from '@/components/common/Layers'; import { IconButton } from '@/components/common/IconButton'; -import { Header } from '@/components/game/Header'; import { TargetInfoDrawer } from '@/components/game/TargetInfoDrawer'; import { Toasts } from '@/components/game/Toasts'; import { GameZone, StartZone } from '@/components/game/MapLayers'; @@ -20,7 +19,7 @@ import { useUserState } from '@/hooks/useUserState'; // Services import { emitSendPosition } from '@/services/socket/emitters'; // Constants -import { COLORS, USER_STATE } from '@/constants'; +import { USER_STATE } from '@/constants'; const Play = () => { const { t } = useTranslation(); @@ -31,16 +30,16 @@ const Play = () => { return ( - -
- - - - - - - - setBottomContainerHeight(event.nativeEvent.layout.height)}> + + {t("play.info.placement_title")} + + + + + + + + setBottomContainerHeight(event.nativeEvent.layout.height)}> @@ -70,22 +69,23 @@ export default Play; const styles = StyleSheet.create({ globalContainer: { - backgroundColor: COLORS.background, flex: 1, }, - topContainer: { - width: '100%', - alignItems: 'center', + placementTitle: { + textAlign: "center", padding: 15, + fontSize: 20, + fontWeight: "bold" }, - infoContainer: { - width: '100%', + timerContainer: { + padding: 15, alignItems: 'center', - justifyContent: 'center', flexDirection: 'row', - marginTop: 15 }, - bottomContainer: { + timer: { + width: "50%", + }, + mapContainer: { flex: 1, borderTopLeftRadius: 30, borderTopRightRadius: 30, diff --git a/mobile/traque-app/app/(game)/wait.jsx b/mobile/traque-app/app/(game)/wait.jsx index 0625eb6..1abb072 100644 --- a/mobile/traque-app/app/(game)/wait.jsx +++ b/mobile/traque-app/app/(game)/wait.jsx @@ -1,75 +1,60 @@ // React -import { View, Text, StyleSheet, Image } from 'react-native'; +import { ScrollView, View, Text, StyleSheet, Image } from 'react-native'; import { useTranslation } from 'react-i18next'; -// Components -import { Header } from '@/components/game/Header'; -// Constants -import { COLORS } from '@/constants'; + +const Section = ({ source, text }) => { + return ( + + + {text} + + ); +}; const Wait = () => { const { t } = useTranslation(); return ( - -
- - {t("wait.title")} - - - {t("wait.placement_rule")} - - - {t("wait.capture_rule")} - - - - - {t("wait.zone_rule")} - - - {t("wait.team_rule")} - - - - + + {t("wait.title")} +
+
+
+
+ ); }; export default Wait; const styles = StyleSheet.create({ - globalContainer: { - backgroundColor: COLORS.background, - flex: 1, - padding: 20, + outerScrollview: { + flex: 1 }, - rulesContainer: { - flex: 1, + innerScrollview: { + flexGrow: 1, + justifyContent: "space-between", alignItems: 'center', + padding: 30, gap: 30 }, title: { - backgroundColor: "white", textAlign: 'center', - fontSize: 30, - fontWeight: "bold", - borderWidth: 2, - borderRadius: 10, - padding: 10, + fontSize: 18, + fontWeight: "bold" }, section: { - width: '100%', flexDirection: "row", alignItems: "center", justifyContent: "center", - gap: 20, + gap: 30, }, image: { - width: 100, - height: 100, + width: 70, + height: 70, }, description: { flex: 1, - + fontSize: 15, } }); diff --git a/mobile/traque-app/app/_layout.jsx b/mobile/traque-app/app/_layout.jsx index b98e677..2046bd7 100644 --- a/mobile/traque-app/app/_layout.jsx +++ b/mobile/traque-app/app/_layout.jsx @@ -1,11 +1,8 @@ // React import { useEffect } from 'react'; import { View, StyleSheet } from 'react-native'; -import { useTranslation } from 'react-i18next'; // Expo import { Slot, useRouter, usePathname } from 'expo-router'; -// Components -import { IconButton } from '@/components/common/IconButton'; // Contexts import { AuthProvider } from "@/contexts/authContext"; import { TeamProvider } from "@/contexts/teamContext"; @@ -14,7 +11,7 @@ import { useUserState } from '@/hooks/useUserState'; // Services import { startLocationTracking , stopLocationTracking } from '@/services/tasks/backgroundLocation'; // Constants -import { USER_STATE } from '@/constants'; +import { USER_STATE, COLORS } from '@/constants'; // Traduction import '@/i18n/config'; @@ -77,27 +74,14 @@ const NavigationManager = () => { return null; }; -const Language = () => { - const { i18n } = useTranslation(); - - const toggleLanguage = () => { - i18n.changeLanguage(i18n.language === 'fr' ? 'en' : 'fr'); - }; - - return ( - - - - ); -}; - const RootLayout = () => { return ( - + + + - ); @@ -106,14 +90,8 @@ const RootLayout = () => { export default RootLayout; const styles = StyleSheet.create({ - languageButton: { - position: 'absolute', - top: 0, - right: 0, - backgroundColor: "rgb(126, 182, 199)", - borderBottomLeftRadius: 20, - padding: 5, - justifyContent: 'center', - alignItems: 'center', + globalContainer: { + backgroundColor: COLORS.background, + flex: 1, } }); diff --git a/mobile/traque-app/src/components/common/Drawer.jsx b/mobile/traque-app/src/components/common/Drawer.jsx index ff654be..aa885c1 100644 --- a/mobile/traque-app/src/components/common/Drawer.jsx +++ b/mobile/traque-app/src/components/common/Drawer.jsx @@ -6,18 +6,18 @@ import LinearGradient from 'react-native-linear-gradient'; // Constants import { COLORS } from '@/constants'; -export const Drawer = ({ height, children }) => { +export const Drawer = ({ contentContainerStyle = {}, height, children }) => { const [collapsibleState, setCollapsibleState] = useState(true); return ( - setCollapsibleState(!collapsibleState)}> + setCollapsibleState(!collapsibleState)}> - + {children} @@ -61,7 +61,7 @@ const styles = StyleSheet.create({ justifyContent: 'center', backgroundColor: COLORS.background, }, - collapsibleContent: { - paddingHorizontal: 15, + outerScrollContainer: { + flex: 1 } }); diff --git a/mobile/traque-app/src/components/common/Input.jsx b/mobile/traque-app/src/components/common/Input.jsx index f50010c..74131de 100644 --- a/mobile/traque-app/src/components/common/Input.jsx +++ b/mobile/traque-app/src/components/common/Input.jsx @@ -16,7 +16,6 @@ export const CustomTextInput = ({ style = {}, value, inputMode, placeholder, onC const styles = StyleSheet.create({ input: { - width: "100%", padding: 15, borderColor: '#777', borderRadius: 12, diff --git a/mobile/traque-app/src/components/common/Map.jsx b/mobile/traque-app/src/components/common/Map.jsx index 7f13aab..e62bc1d 100644 --- a/mobile/traque-app/src/components/common/Map.jsx +++ b/mobile/traque-app/src/components/common/Map.jsx @@ -25,7 +25,7 @@ export const Map = ({ children }) => { return ( - setCenterMap(false)} toolbarEnabled={false}> + setCenterMap(false)} toolbarEnabled={false}> {children} @@ -50,8 +50,8 @@ const styles = StyleSheet.create({ width: 40, height: 40, borderRadius: 20, - backgroundColor: 'white', - borderWidth: 2, - borderColor: 'black' + backgroundColor: 'rgba(255, 255, 255, 0.75)', + borderWidth: 1, + borderColor: 'rgba(64, 64, 64, 0.50)' }, }); diff --git a/mobile/traque-app/src/components/game/Header.jsx b/mobile/traque-app/src/components/game/Header.jsx deleted file mode 100644 index c9d0699..0000000 --- a/mobile/traque-app/src/components/game/Header.jsx +++ /dev/null @@ -1,40 +0,0 @@ -// React -import { View, Text, StyleSheet } from 'react-native'; -import { useTranslation } from 'react-i18next'; -// Contexts -import { useAuth } from '@/contexts/authContext'; -import { useTeam } from '@/contexts/teamContext'; -// Components -import { IconButton } from '@/components/common/IconButton'; - -export const Header = () => { - const { t } = useTranslation(); - const { logout } = useAuth(); - const { teamInfos } = useTeam(); - const { name } = teamInfos; - - return ( - - - - {name ?? t("common.no_value")} - - - ); -}; - -const styles = StyleSheet.create({ - container: { - width: '100%', - }, - nameContainer: { - width: '100%', - alignItems: 'center', - justifyContent: 'center', - marginBottom: 20 - }, - name: { - fontSize: 36, - fontWeight: "bold" - } -}); diff --git a/mobile/traque-app/src/components/game/TargetInfoDrawer.jsx b/mobile/traque-app/src/components/game/TargetInfoDrawer.jsx index d0b26cc..6c0e331 100644 --- a/mobile/traque-app/src/components/game/TargetInfoDrawer.jsx +++ b/mobile/traque-app/src/components/game/TargetInfoDrawer.jsx @@ -1,6 +1,6 @@ // React import { useState } from 'react'; -import { Keyboard, View, Text, Image, StyleSheet, TouchableOpacity, Alert } from 'react-native'; +import { Keyboard, View, Text, StyleSheet, Alert } from 'react-native'; import { useTranslation } from 'react-i18next'; // Components import { ExpandableImage } from '@/components/common/Image'; @@ -14,6 +14,7 @@ import { useTeam } from '@/contexts/teamContext'; // Services import { emitCapture } from '@/services/socket/emitters'; import { enemyImage } from '@/services/api/image'; +import { IconButton } from '../common/IconButton'; export const TargetInfoDrawer = ({ height }) => { const { t } = useTranslation(); @@ -47,24 +48,16 @@ export const TargetInfoDrawer = ({ height }) => { }; return ( - - - {t("play.drawer.capture_code", {name: name ?? t("common.no_value"), code: String(captureCode).padStart(4,"0")})} - + + {t("play.drawer.capture_code", {name: name ?? t("common.no_value"), code: String(captureCode).padStart(4,"0")})} - - {t("play.drawer.target_name", {name: enemyName ?? t("common.no_value")})} + + {t("play.drawer.target_name", {name: enemyName ?? t("common.no_value")})} - - - - - - - - - + + + @@ -73,34 +66,42 @@ export const TargetInfoDrawer = ({ height }) => { }; const styles = StyleSheet.create({ - imageContainer: { + drawer: { + flexGrow: 1, + justifyContent: "space-between", + padding: 15, + gap: 15, + }, + teamCode: { + fontSize: 22, + fontWeight: "bold", + textAlign: "center" + }, + targetContainer: { width: "100%", alignItems: "center", - justifyContent: "center", - marginTop: 15 + justifyContent: "center" }, - actionsContainer: { + targetName: { + fontSize: 15, + }, + captureContainer: { flexDirection: "row", width: "100%", alignItems: 'center', justifyContent: 'space-between', - marginTop: 15 + gap: 15 }, - actionsLeftContainer: { - flexGrow: 1, - alignItems: 'center', - justifyContent: 'center', - marginRight: 15 - }, - actionsRightContainer: { - width: 100, + captureInput: { + flex: 3, alignItems: 'center', justifyContent: 'center' }, - button: { + captureButton: { + flex: 1, + height: 70, borderRadius: 12, - width: '100%', - height: 75, + padding: 10, alignItems: 'center', justifyContent: 'center', backgroundColor: '#444' diff --git a/mobile/traque-app/src/components/game/TeamStats.jsx b/mobile/traque-app/src/components/game/TeamStats.jsx index 7a2abf3..b0f1c51 100644 --- a/mobile/traque-app/src/components/game/TeamStats.jsx +++ b/mobile/traque-app/src/components/game/TeamStats.jsx @@ -37,41 +37,45 @@ export const TeamStats = () => { return ( + {t("play.drawer.stats_section_title")} - {Math.floor(distance / 100) / 10}km + {Math.floor((distance ?? 0) / 100) / 10}km {secondsToHHMMSS((finishDate ? Math.floor((finishDate - startDate) / 1000) : timeSinceGameStart))} {avgSpeed}km/h - {nCaptures} - {nSentLocation} + {nCaptures ?? 0} + {nSentLocation ?? 0} ); }; const styles = StyleSheet.create({ + statsContainer: { + width: "100%", + gap: 15, + }, + title: { + fontSize: 20, + fontWeight: "bold", + textAlign: "center", + }, + row: { + flexDirection: "row", + justifyContent: "space-around", + }, statContainer: { - height: 30, flexDirection: "row", justifyContent: 'center', alignItems: 'center', + gap: 5, }, image: { width: 30, height: 30, - marginRight: 5 }, text: { - fontSize: 15 + fontSize: 15, }, - statsContainer: { - gap: 15, - width: "100%", - marginVertical: 15 - }, - row: { - flexDirection: "row", - justifyContent: "space-around" - } }); diff --git a/mobile/traque-app/src/components/game/Toasts.jsx b/mobile/traque-app/src/components/game/Toasts.jsx index b93c80f..6e4c163 100644 --- a/mobile/traque-app/src/components/game/Toasts.jsx +++ b/mobile/traque-app/src/components/game/Toasts.jsx @@ -65,16 +65,16 @@ export const Toasts = () => { const styles = StyleSheet.create({ container: { position: 'absolute', - top: 5, + top: 0, left: "50%", transform: [{ translateX: '-50%' }], - maxWidth: "60%" + maxWidth: "60%", + padding: 10, + gap: 5 }, toast: { - margin: 5, padding: 10, borderRadius: 15, - backgroundColor: 'white', elevation: 5 }, }); diff --git a/mobile/traque-app/src/constants/map.js b/mobile/traque-app/src/constants/map.js index 967ce80..5649eff 100644 --- a/mobile/traque-app/src/constants/map.js +++ b/mobile/traque-app/src/constants/map.js @@ -4,6 +4,12 @@ export const INITIAL_REGIONS = { longitude: 2.342, latitudeDelta: 0, longitudeDelta: 50 + }, + TELECOM_PARIS : { + latitude: 48.715, + longitude: 2.203, + latitudeDelta: 0, + longitudeDelta: 0.04 } }; diff --git a/mobile/traque-app/src/hooks/useUserState.jsx b/mobile/traque-app/src/hooks/useUserState.jsx index ef103bc..fc924a6 100644 --- a/mobile/traque-app/src/hooks/useUserState.jsx +++ b/mobile/traque-app/src/hooks/useUserState.jsx @@ -35,7 +35,7 @@ export const useUserState = () => { case GAME_STATE.PLAYING: return captured ? USER_STATE.CAPTURED : USER_STATE.PLAYING; case GAME_STATE.FINISHED: - return USER_STATE.FINISHED; + return captured ? USER_STATE.CAPTURED : USER_STATE.FINISHED; default: return USER_STATE.WAITING; } diff --git a/mobile/traque-app/src/i18n/locales/en.json b/mobile/traque-app/src/i18n/locales/en.json index db2e9da..30388fa 100644 --- a/mobile/traque-app/src/i18n/locales/en.json +++ b/mobile/traque-app/src/i18n/locales/en.json @@ -18,7 +18,7 @@ } }, "wait": { - "title": "Rules Reminder !", + "title": "While waiting for the game to start, here is a recap of the rules.", "placement_rule": "Go to your starting zone and wait for the game to begin.", "capture_rule": "Track your target using their photo and the positions they reveal. To obtain your target's last known position, you must reveal your own. Once captured, enter their code in the app.", "zone_rule": "Move on foot while making sure to stay within the game zone to avoid penalties ! If you stay outside the zone for too long, your interface will be disabled and your hunter will know your exact position.", @@ -26,7 +26,8 @@ }, "play": { "info": { - "zone_reduction_label": "Zone reduction in", + "placement_title": "Head to your zone !", + "zone_reduction_label": "Next zone in", "send_position_label": "Position sent in" }, "toast": { @@ -47,6 +48,7 @@ "capture_code": "{{name}}'s code : {{code}}", "target_name": "Target ({{name}})", "target_code_input": "Target code", + "stats_section_title": "Your game statistics", "stat_distance_label": "Distance traveled", "stat_time_label": "Elapsed time (HH:MM:SS)", "stat_speed_label": "Average speed", @@ -54,13 +56,18 @@ "stat_reveal_label": "Total times your position was sent" } }, + "end": { + "title_captured": "You have been captured...", + "title_win": "You won !", + "paragraph": "The game ends here for you ! You can head back to the starting point to grab a snack and watch the rest of the game." + }, "info": { "default": { "title": "Info" }, - "succes": { + "success": { "title": "Success !", - "capture_success": "You have successfully captured your target. A new target has been assigned to you." + "capture_success": "You have successfully captured your target." }, "failure": { "title": "Failure...", diff --git a/mobile/traque-app/src/i18n/locales/fr.json b/mobile/traque-app/src/i18n/locales/fr.json index bda3fd3..5198ce4 100644 --- a/mobile/traque-app/src/i18n/locales/fr.json +++ b/mobile/traque-app/src/i18n/locales/fr.json @@ -18,7 +18,7 @@ } }, "wait": { - "title": "Rappel des règles !", + "title": "En attendant que la partie commence, voici un récap des règles.", "placement_rule": "Rejoignez votre zone de départ et attendez le début de la partie.", "capture_rule": "Traquez votre cible grâce à sa photo et aux positions qu'elle révèle. Pour obtenir la dernière position connue de votre cible, vous devrez révéler la vôtre. Une fois capturée, entrez son code dans l'application.", "zone_rule": "Déplacez-vous à pied tout en veillant à rester dans la zone de jeu pour ne pas être pénalisé ! Si vous restez trop longtemps en dehors de la zone, votre interface sera désactivée et votre chasseur connaîtra précisément votre position.", @@ -26,7 +26,8 @@ }, "play": { "info": { - "zone_reduction_label": "Réduction de la zone dans", + "placement_title": "Placez vous dans votre zone !", + "zone_reduction_label": "Prochaine zone dans", "send_position_label": "Position envoyée dans" }, "toast": { @@ -47,6 +48,7 @@ "capture_code": "Code de {{name}} : {{code}}", "target_name": "Cible ({{name}})", "target_code_input": "Code cible", + "stats_section_title": "Statistiques de votre partie", "stat_distance_label": "Distance parcourue", "stat_time_label": "Temps écoulé (HH:MM:SS)", "stat_speed_label": "Vitesse moyenne", @@ -54,13 +56,18 @@ "stat_reveal_label": "Nombre total d'envois de votre position" } }, + "end": { + "title_captured": "Vous avez été capturé...", + "title_win": "Vous avez gagné !", + "paragraph": "La partie se termine ici pour vous ! Vous pouvez rejoindre le point de départ pour prendre un goûter et assister au reste de la partie." + }, "info": { "default": { "title": "Info" }, - "succes": { + "success": { "title": "Bravo !", - "capture_success": "Vous avez réussi à capturer votre cible. Une nouvelle cible vient de vous être attribuée." + "capture_success": "Vous avez réussi à capturer votre cible." }, "failure": { "title": "Raté...",