forked from vergnet/application-amicale
Improved locale files structure
This commit is contained in:
parent
2a9bf5bb6a
commit
0d1fe124f4
51 changed files with 1322 additions and 1290 deletions
|
@ -79,7 +79,7 @@ test('getRelativeDateString', () => {
|
|||
);
|
||||
jest.spyOn(i18n, 't')
|
||||
.mockImplementation((translationString: string) => {
|
||||
const prefix = "equipmentScreen.";
|
||||
const prefix = "screens.equipment.";
|
||||
if (translationString === prefix + "otherYear")
|
||||
return "0";
|
||||
else if (translationString === prefix + "otherMonth")
|
||||
|
|
491
locales/en.json
Normal file
491
locales/en.json
Normal file
|
@ -0,0 +1,491 @@
|
|||
{
|
||||
"screens": {
|
||||
"services": {
|
||||
"title": "Services",
|
||||
"categories": {
|
||||
"amicale": "The Amicale",
|
||||
"students": "Student services",
|
||||
"insa": "INSA services"
|
||||
},
|
||||
"descriptions": {
|
||||
"clubs": "See info about your favorite club and discover new ones",
|
||||
"profile": "See your personal information",
|
||||
"amicaleWebsite": "See more information on the website",
|
||||
"vote": "Vote for the upcoming elections",
|
||||
"proximo": "Check the store's stock",
|
||||
"wiketud": "Read useful info about classes and campus life",
|
||||
"elusEtudiants": "The students in contact with the administration",
|
||||
"tutorInsa": "Give and take part in tutorials by students",
|
||||
"map": "Find your way around the campus",
|
||||
"self": "Check the RU menu",
|
||||
"availableRooms": "See how many rooms are free",
|
||||
"bib": "Book a Bib'Box for project work",
|
||||
"mails": "Check your INSA mails",
|
||||
"ent": "See your grades",
|
||||
"insaAccount": "See your information and change your password",
|
||||
"equipment": "Book a BBQ or other equipment"
|
||||
},
|
||||
"mascotDialog": {
|
||||
"title": "So handy!",
|
||||
"message": "There a lot of thing you can do with Campus!\n\nHere is a list of every service provided by the app.",
|
||||
"button": "Thx buddy"
|
||||
}
|
||||
},
|
||||
"proxiwash": {
|
||||
"title": "Proxiwash",
|
||||
"dryer": "Dryer",
|
||||
"dryers": "Dryers",
|
||||
"washer": "Washer",
|
||||
"washers": "Washers",
|
||||
"min": "min",
|
||||
"listUpdated": "Machines state updated",
|
||||
"listUpdateFail": "Error while updating machines state",
|
||||
"error": "Could not update machines state. Pull down to retry.",
|
||||
"loading": "Loading...",
|
||||
"description": "This is the washing service operated by Promologis for INSA's residences (We don't mind if you do not live on the campus and you do your laundry here). The room is right next to the R2, with 3 dryers and 9 washers, is open 7d/7 24h/24 ! Here you can check their availability ! You can bring your own detergent, use the one given on site or buy it at the Proximo (cheaper than the one given by the machines ). You can pay by credit card or cash.",
|
||||
"informationTab": "Information",
|
||||
"paymentTab": "Payment",
|
||||
"tariffs": "Tariffs",
|
||||
"washersTariff": "3€ the washer + 0.80€ with detergent.",
|
||||
"dryersTariff": "0.35€ for 5min of dryer usage.",
|
||||
"paymentMethods": "Payment Methods",
|
||||
"paymentMethodsDescription": "Cash up until 10€.\nCredit Card also accepted.",
|
||||
"washerProcedure": "Put your laundry in the tumble without tamping it and by respecting charge limits.\n\nClose the machine's door.\n\nChoose a program using one of the four favorite program buttons.\n\nPay to the command central, then press the START button on the machine.\n\nWhen the program is finished, the screen indicates 'Programme terminé', press the yellow button to open the lid and retrieve your laundry.",
|
||||
"washerTips": "Program 'blanc/couleur': 6kg of dry laundry (cotton linen, linen, underwear, sheets, jeans, towels).\n\nProgram 'non repassable': 3,5 kg of dry laundry (synthetic fibre linen, cotton and polyester mixed).\n\nProgram 'fin 30°C': 2,5 kg of dry laundry (delicate linen in synthetic fibres).\n\nProgram 'laine 30°C': 2,5 kg of dry laundry (wool textiles).",
|
||||
"dryerProcedure": "Put your laundry in the tumble without tamping it and by respecting charge limits.\n\nClose the machine's door.\n\nChoose a program using one of the four favorite program buttons.\n\nPay to the command central, then press the START button on the machine.",
|
||||
"dryerTips": "The advised dryer length is 35 minutes for 14 kg of laundry. You can choose a shorter length if the dryer is not fully charged.",
|
||||
"procedure": "Procedure",
|
||||
"tips": "Tips",
|
||||
"numAvailable": "available",
|
||||
"numAvailablePlural": "available",
|
||||
"modal": {
|
||||
"enableNotifications": "Notify me",
|
||||
"disableNotifications": "Stop notifications",
|
||||
"ok": "OK",
|
||||
"cancel": "Cancel",
|
||||
"finished": "This machine is finished. If you started it, you can get back your laundry.",
|
||||
"ready": "This machine is empty and ready to use.",
|
||||
"running": "This machine has been started at %{start} and will end at %{end}.\n\nRemaining time: %{remaining} min.\nProgram: %{program}",
|
||||
"runningNotStarted": "This machine is ready but not started. Please make sure you pressed the start button.",
|
||||
"broken": "This machine is out of order and cannot be used. Thank you for your comprehension.",
|
||||
"error": "There has been an error and we are unable to get information from this machine. Sorry for the inconvenience.",
|
||||
"unknown": "This machine is in an unknown state. Sorry for the inconvenience.",
|
||||
"notificationErrorTitle": "Error",
|
||||
"notificationErrorDescription": "Impossible to create notifications. Please make sure you enabled notifications then restart the app."
|
||||
},
|
||||
"states": {
|
||||
"finished": "FINISHED",
|
||||
"ready": "READY",
|
||||
"running": "RUNNING",
|
||||
"runningNotStarted": "NOT STARTED",
|
||||
"broken": "OUT OF ORDER",
|
||||
"error": "ERROR",
|
||||
"unknown": "UNKNOWN"
|
||||
},
|
||||
"notifications": {
|
||||
"machineFinishedTitle": "Laundry Ready",
|
||||
"machineFinishedBody": "The machine n°{{number}} is finished and your laundry is ready to pickup",
|
||||
"machineRunningTitle": "Laundry running: {{time}} minutes left",
|
||||
"machineRunningBody": "The machine n°{{number}} is still running"
|
||||
},
|
||||
"mascotDialog": {
|
||||
"title": "Notifications!",
|
||||
"message": "Click on a running machine to enable notifications!\n\nYou will never forget your laundry again.",
|
||||
"ok": "Got it!"
|
||||
}
|
||||
},
|
||||
"home": {
|
||||
"title": "Home",
|
||||
"feed": "Details",
|
||||
"listUpdated": "List updated!",
|
||||
"listUpdateFail": "Error while updating list",
|
||||
"servicesButton": "More services",
|
||||
"dashboard": {
|
||||
"seeMore": "Click to see more",
|
||||
"todayEventsTitle": "Today's events",
|
||||
"todayEventsSubtitleNA": "No events today",
|
||||
"todayEventsSubtitle": " event coming today",
|
||||
"todayEventsSubtitlePlural": " events coming today"
|
||||
},
|
||||
"mascotDialog": {
|
||||
"title": "Welcome, you!",
|
||||
"message": "Login to your Amicale account to get access to more services!\n\nYou will still be able to login later.",
|
||||
"login": "Login",
|
||||
"later": "Later"
|
||||
}
|
||||
},
|
||||
"planning": {
|
||||
"title": "Events",
|
||||
"eventDetails": "Event details",
|
||||
"invalidEvent": "Could not find the event. Please make sure the event you are trying to access is valid.",
|
||||
"mascotDialog": {
|
||||
"title": "Let's party!",
|
||||
"message": "At the INSA, it's not all about classes!\n\nIf you want to see new people, this page is just for you. Here you will find the list of every event organised by students!",
|
||||
"button": "Thx!"
|
||||
}
|
||||
},
|
||||
"planex": {
|
||||
"title": "Planex",
|
||||
"noGroupSelected": "No group selected. Please select your group using the big beautiful red button bellow.",
|
||||
"favorites": "Favorites",
|
||||
"mascotDialog": {
|
||||
"title": "Come here often?",
|
||||
"message": "Set it as default screen!\n\nCampus will start on Planex so you never miss a class. Click on the button bellow to navigate to the settings page.",
|
||||
"ok": "Yes please!",
|
||||
"cancel": "Later"
|
||||
}
|
||||
},
|
||||
|
||||
"amicaleAbout": {
|
||||
"title": "A question ?",
|
||||
"subtitle": "Ask the Amicale",
|
||||
"message": "You want to revive a club?\nYou want to start a new project?\nHere are al the contacts you need! Do not hesitate to write a mail or send a message to the Amicale's Facebook page!",
|
||||
"roles": {
|
||||
"interSchools": "Inter Schools",
|
||||
"culture": "Culture",
|
||||
"animation": "Animation",
|
||||
"clubs": "Clubs",
|
||||
"event": "Events",
|
||||
"tech": "Technique",
|
||||
"communication": "Communication",
|
||||
"intraSchools": "Alumni / IAT",
|
||||
"publicRelations": "Public Relations"
|
||||
}
|
||||
},
|
||||
"proximo": {
|
||||
"title": "Proximo",
|
||||
"articleList": "Articles",
|
||||
"emptyList": "Empty List",
|
||||
"article": "Article",
|
||||
"articles": "Articles",
|
||||
"sortOrder": "Sort by",
|
||||
"sortName": "Name",
|
||||
"sortNameReverse": "Name (reverse)",
|
||||
"sortPrice": "Price",
|
||||
"sortPriceReverse": "Price (reverse)",
|
||||
"listUpdated": "Article list updated!",
|
||||
"listUpdateFail": "Error while updating article list",
|
||||
"loading": "Loading...",
|
||||
"inStock": "in stock",
|
||||
"description": "The Proximo is your small grocery store maintained by students directly on the campus. Open every day from 18h30 to 19h30, we welcome you when you are short on pastas or sodas ! Different products for different problems, everything at cost price. You can pay by Lydia or cash.",
|
||||
"openingHours": "Openning Hours",
|
||||
"paymentMethods": "Payment Methods",
|
||||
"paymentMethodsDescription": "Cash or Lydia",
|
||||
"search": "Search",
|
||||
"all": "All"
|
||||
},
|
||||
"insaAccount": {
|
||||
"title": "INSA Account"
|
||||
},
|
||||
"menu": {
|
||||
"title": "RU Menu"
|
||||
},
|
||||
"websites": {
|
||||
"amicale": "Amicale's website",
|
||||
"rooms": "Available rooms",
|
||||
"bib": "Bib'Box",
|
||||
"mails": "INSA Mails",
|
||||
"ent": "INSA ENT"
|
||||
},
|
||||
|
||||
"login": {
|
||||
"title": "Login",
|
||||
"subtitle": "Please enter your credentials",
|
||||
"email": "Email",
|
||||
"emailError": "Please enter a valid email",
|
||||
"password": "Password",
|
||||
"passwordError": "Please enter a password",
|
||||
"resetPassword": "Forgot Password",
|
||||
"whyAccountTitle": "Why have an account?",
|
||||
"whyAccountSub": "What can you do wth an account",
|
||||
"whyAccountParagraph": "An Amicale account allows you to take part in several activities around campus. You can join a club, or even create your own!",
|
||||
"whyAccountParagraph2": "Logging into your Amicale account on the app will allow you to see all available clubs on the campus, vote for the upcoming elections, and more to come!",
|
||||
"noAccount": "No Account? Go to the Amicale's building during open hours to create one."
|
||||
},
|
||||
"profile": {
|
||||
"title": "Profile",
|
||||
"personalInformation": "Personal information",
|
||||
"noData": "No data",
|
||||
"editInformation": "Edit Information",
|
||||
"clubs": "Your clubs",
|
||||
"clubsSubtitle": "Click on a club to show its information",
|
||||
"isMember": "Member",
|
||||
"isManager": "Manager",
|
||||
"membership": "Membership Fee",
|
||||
"membershipSubtitle": "Allows you to take part in various activities",
|
||||
"membershipPayed": "Payed",
|
||||
"membershipNotPayed": "Not payed",
|
||||
"welcomeTitle": "Welcome %{name}!",
|
||||
"welcomeDescription": "This is your Amicale INSA Toulouse personal space. Bellow are the current services you can access thanks to your account. Feels empty? You're right and we plan on fixing that, so stay tuned!",
|
||||
"welcomeFeedback": "We plan on doing more! If you have any suggestions or found bugs, please tell us by clicking the button bellow."
|
||||
},
|
||||
"clubs": {
|
||||
"title": "Clubs",
|
||||
"details": "Club details",
|
||||
"managers": "Managers",
|
||||
"managersSubtitle": "These people make the club live",
|
||||
"managersUnavailable": "This club has no one :(",
|
||||
"categories": "Categories",
|
||||
"categoriesFilterMessage": "Click on a category to filter the list",
|
||||
"clubContact": "Contact the club",
|
||||
"amicaleContact": "Contact the Amicale",
|
||||
"invalidClub": "Could not find the club. Please make sure the club you are trying to access is valid.",
|
||||
"about": {
|
||||
"text": "The clubs, making the campus live, with more than sixty clubs offering various activities! From the philosophy club to the PABI (Production Artisanale de Bière Insaienne), without forgetting the multiple music and dance clubs, you will surely find an activity that suits you!",
|
||||
"title": "A question ?",
|
||||
"subtitle": "Ask the Amicale",
|
||||
"message": "You have a question concerning the clubs?\nYou want to revive or create a club?\nContact the Amicale at the following address:"
|
||||
}
|
||||
},
|
||||
"vote": {
|
||||
"title": "Elections",
|
||||
"select": {
|
||||
"title": "Elections open",
|
||||
"subtitle": "Vote now!",
|
||||
"sendButton": "Send Vote",
|
||||
"dialogTitle": "Send Vote?",
|
||||
"dialogTitleLoading": "Sending vote...",
|
||||
"dialogMessage": "Are you sure you want to send your vote? You will not be able to change it."
|
||||
},
|
||||
"tease": {
|
||||
"title": "Elections incoming",
|
||||
"subtitle": "Be ready to vote!",
|
||||
"message": "Vote start:"
|
||||
},
|
||||
"wait": {
|
||||
"titleSubmitted": "Vote submitted!",
|
||||
"titleEnded": "Votes closed",
|
||||
"subtitle": "Waiting for results...",
|
||||
"messageSubmitted": "Vote submitted successfully.",
|
||||
"messageVoted": "Thank you for your participation.",
|
||||
"messageDate": "Results available:",
|
||||
"messageDateUndefined": "Results will be available shortly"
|
||||
},
|
||||
"results": {
|
||||
"title": "Results",
|
||||
"subtitle": "Available until:",
|
||||
"totalVotes": "Total votes:",
|
||||
"votes": "votes"
|
||||
},
|
||||
"main": {
|
||||
"title": "The Elections",
|
||||
"subtitle": "Why your vote is important",
|
||||
"paragraph1": "The Amicale's elections is the right moment for you to choose the next team, which will handle different projects on the campus, help organizing your favorite events, animate the campus life during the whole year, and relay your ideas to the administration, so that your campus life is the most enjoyable possible!\nYour turn to make a change!\uD83D\uDE09",
|
||||
"paragraph2": "Note: If there is only one list, it is still important to vote to show your support, so that the administration knows the current list is supported by students. It is always a plus when taking difficult decisions! \uD83D\uDE09"
|
||||
}
|
||||
},
|
||||
"equipment": {
|
||||
"title": "Equipment Booking",
|
||||
"book": "Book",
|
||||
"confirm": "Confirmation",
|
||||
"message": "Thanks to the Amicale, students have access to some equipment like BBQs and others. To book one of those items, click the equipment of your choice in the list bellow, enter your lend dates, then come around the Amicale to claim it and give your bail.",
|
||||
"bail": "Bail: %{cost}€",
|
||||
"available": "Available %{date}",
|
||||
"today": "today",
|
||||
"tomorrow": "tomorrow",
|
||||
"thisMonth": "the %{date}",
|
||||
"otherMonth": "the %{date} of %{month}",
|
||||
"otherYear": "the %{date} of %{month} %{year}",
|
||||
"bookingDay": "Booked for %{date}",
|
||||
"bookingPeriod": "Booked from %{begin} to %{end}",
|
||||
"booking": "Click on the calendar to set the start and end dates",
|
||||
"bookButton": "Book selected dates",
|
||||
"dialogTitle": "Confirm booking?",
|
||||
"dialogTitleLoading": "Sending your booking...",
|
||||
"dialogMessage": "Are you sure you want to confirm your booking?\n\nYou will then be able to claim the selected equipment at the Amicale for the duration of your booking in exchange of a bail.",
|
||||
"bookingConfirmedMessage": "Do not forget to come by the Amicale to give your bail in exchange of the equipment."
|
||||
},
|
||||
|
||||
"scanner": {
|
||||
"title": "Scanotron 3000",
|
||||
"permissions": {
|
||||
"error": "Scanotron 3000 needs access to the camera in order to scan QR codes.\nThe camera will never be used for any other purpose.",
|
||||
"button": "Grant camera access"
|
||||
},
|
||||
"error": {
|
||||
"title": "QR code invalid",
|
||||
"message": "The QR code scanned could not be recognised, please make sure it is valid."
|
||||
},
|
||||
"help": {
|
||||
"button": "What can I scan?",
|
||||
"title": "How to use Scanotron 3000",
|
||||
"message": "Find Campus QR codes posted by clubs and events, scan them and get instant access to detailed information!"
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"title": "Settings",
|
||||
"generalCard": "General",
|
||||
"nightMode": "Night Mode",
|
||||
"nightModeSubOn": "Your eyes are at peace",
|
||||
"nightModeSubOff": "Your eyes are burning",
|
||||
"nightModeAuto": "Follow system dark mode",
|
||||
"startScreen": "Start Screen",
|
||||
"startScreenSub": "Select which screen to start the app on",
|
||||
"proxiwashNotifReminder": "Machine running reminder",
|
||||
"proxiwashNotifReminderSub": "How many minutes before",
|
||||
"information": "Information"
|
||||
},
|
||||
"about": {
|
||||
"title": "About",
|
||||
"buttonDesc": "Information about the app and its creator",
|
||||
"appstore": "See on the Appstore",
|
||||
"playstore": "See on the Playstore",
|
||||
"changelog": "Changelog",
|
||||
"license": "License",
|
||||
"debug": "Debug",
|
||||
"team": "Team",
|
||||
"author": "Author and maintainer",
|
||||
"authorMail": "Send an email",
|
||||
"additionalDev": "Development help",
|
||||
"technologies": "Technologies",
|
||||
"reactNative": "Made with React Native",
|
||||
"expo": "Built with Expo",
|
||||
"libs": "Libraries used"
|
||||
},
|
||||
"feedback": {
|
||||
"title": "Feedback",
|
||||
"bugs": "Report Bugs",
|
||||
"bugsSubtitle": "Did you find a bug? Let us know!",
|
||||
"bugsDescription": "Reporting bugs helps us make the app better. To do so, use one of the buttons below and be as precise as possible when describing your problem!",
|
||||
"feedbackSubtitle": "Let us know what you think!",
|
||||
"feedbackDescription": "Do you have a feature you want to be added/changed/removed, want to give your opinion on the app or simply chat with the dev? Use one of the links below!",
|
||||
"contactMeans": "Using Gitea is recommended, to use it simply login with your INSA account.",
|
||||
"homeButtonTitle": "Feedback/Bug report",
|
||||
"homeButtonSubtitle": "Contact the devs"
|
||||
},
|
||||
"game": {
|
||||
"title": "Game",
|
||||
"pause": "Game Paused",
|
||||
"pauseMessage": "The game is paused",
|
||||
"resume": "Resume",
|
||||
"restart": {
|
||||
"text": "Restart",
|
||||
"confirm": "Are you sure you want to restart?",
|
||||
"confirmMessage": "You will lose you progress, continue?",
|
||||
"confirmYes": "Yes",
|
||||
"confirmNo": "No"
|
||||
},
|
||||
"gameOver": {
|
||||
"text": "Game Over",
|
||||
"score": "Score: ",
|
||||
"level": "Level: ",
|
||||
"time": "Time: ",
|
||||
"exit": "leave Game"
|
||||
}
|
||||
},
|
||||
"debug": {
|
||||
"title": "Debug"
|
||||
}
|
||||
},
|
||||
"intro": {
|
||||
"slideMain": {
|
||||
"title": "Welcome to CAMPUS",
|
||||
"text": "The new app to use during your coffee break to get updates on the campus life!"
|
||||
},
|
||||
"slideEvents": {
|
||||
"title": "Stay up to date",
|
||||
"text": "CAMPUS allows you to be aware of any event occurring on the campus, from pancake sales to Enfoiros concerts!"
|
||||
},
|
||||
"slideProxiwash": {
|
||||
"title": "Never forget your laundry",
|
||||
"text": "CAMPUS will inform you on the availability of washing machines and will remind you just before yours finishes!"
|
||||
},
|
||||
"slidePlanex": {
|
||||
"title": "Planex",
|
||||
"text": "Lookup your next course on CAMPUS with a mobile friendly timetable"
|
||||
},
|
||||
"slideRU": {
|
||||
"title": "RU Menu",
|
||||
"text": "For the hungry, check this week's menu!"
|
||||
},
|
||||
"slideServices": {
|
||||
"title": "More services!",
|
||||
"text": "You can do much more with CAMPUS, explore the app to find out"
|
||||
},
|
||||
"slideDone": {
|
||||
"title": "Made by a student",
|
||||
"text": "This app is the work of one student (with some help here and there), so any feedback is appreciated!"
|
||||
},
|
||||
"updateSlide0": {
|
||||
"title": "New in this update!",
|
||||
"text": "Faster than ever and easier to use!\nThis update includes lots of changes to improve your experience.\nUse the brand new feedback button on the home screen to talk to the developer!"
|
||||
},
|
||||
"updateSlide1": {
|
||||
"title": "Improved Planex!",
|
||||
"text": "You now have access to new controls, improved display, and you can also mark groups as favorites."
|
||||
},
|
||||
"updateSlide2": {
|
||||
"title": "Scanotron 3000!",
|
||||
"text": "Say hello to Scanotron 3000!\nAvailable from the Qr-Code button on the home screen, it will help you get information about clubs and events around the campus.\n(Useless right now but we have hope for next year)"
|
||||
},
|
||||
"updateSlide3": {
|
||||
"title": "Amicale Account!",
|
||||
"text": "You can now connect to your Amicale INSAT account from within the app! See all available clubs and more to come!\nClick on the login button from the home screen."
|
||||
},
|
||||
"aprilFoolsSlide": {
|
||||
"title": "New in this update!",
|
||||
"text": "We heard you, you don't like the new design and colors, so we changed them!\nLove."
|
||||
},
|
||||
"buttons": {
|
||||
"next": "Next",
|
||||
"skip": "Skip",
|
||||
"done": "Done"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"title": "Error!",
|
||||
"badCredentials": "Email or password invalid.",
|
||||
"badToken": "You are not logged in. Please login and try again.",
|
||||
"noConsent": "You did not give your consent for data processing to the Amicale.",
|
||||
"tokenSave": "Could not save session token. Please contact support.",
|
||||
"badInput": "Invalid input. Please try again.",
|
||||
"forbidden": "You do not have access to this data.",
|
||||
"connectionError": "Network error. Please check your internet connection.",
|
||||
"serverError": "Server error. Please contact support.",
|
||||
"unknown": "Unknown error. Please contact support."
|
||||
},
|
||||
"dialog": {
|
||||
"ok": "OK",
|
||||
"yes": "Yes",
|
||||
"cancel": "Cancel",
|
||||
"disconnect": {
|
||||
"title": "Disconnect",
|
||||
"titleLoading": "Disconnecting...",
|
||||
"message": "Are you sure you want to disconnect from your Amicale account?"
|
||||
}
|
||||
},
|
||||
"general": {
|
||||
"loading": "Loading...",
|
||||
"retry": "Retry",
|
||||
"networkError": "Unable to contact servers. Make sure you are connected to Internet.",
|
||||
"goBack": "Go Back",
|
||||
"goForward": "Go Forward",
|
||||
"openInBrowser": "Open in Browser",
|
||||
"notAvailable": "Not available"
|
||||
},
|
||||
"date": {
|
||||
"daysOfWeek": {
|
||||
"monday": "Monday",
|
||||
"tuesday": "Tuesday",
|
||||
"wednesday": "Wednesday",
|
||||
"thursday": "Thursday",
|
||||
"friday": "Friday",
|
||||
"saturday": "Saturday",
|
||||
"sunday": "Sunday"
|
||||
},
|
||||
"monthsOfYear": {
|
||||
"january": "January",
|
||||
"february": "February",
|
||||
"march": "March",
|
||||
"april": "April",
|
||||
"may": "May",
|
||||
"june": "June",
|
||||
"july": "July",
|
||||
"august": "August",
|
||||
"september": "September",
|
||||
"october": "October",
|
||||
"november": "November",
|
||||
"december": "December"
|
||||
}
|
||||
}
|
||||
}
|
491
locales/fr.json
Normal file
491
locales/fr.json
Normal file
|
@ -0,0 +1,491 @@
|
|||
{
|
||||
"screens": {
|
||||
"services": {
|
||||
"title": "Services",
|
||||
"categories": {
|
||||
"amicale": "L'Amicale",
|
||||
"students": "Services étudiants",
|
||||
"insa": "Services de l'INSA"
|
||||
},
|
||||
"descriptions": {
|
||||
"clubs": "Voir les informations sur les clubs",
|
||||
"profile": "Voir vos informations personnelles",
|
||||
"amicaleWebsite": "Plus d'informations sur le site",
|
||||
"vote": "Votez pour les prochaines élections",
|
||||
"proximo": "Regardez le stock du Proximo",
|
||||
"wiketud": "Trouvez des informations utiles sur les cours et la vie du campus",
|
||||
"elusEtudiants": "Les étudiants en contact avec l'administration",
|
||||
"tutorInsa": "Donnez et bénéficiez de tutorats par d'autres étudiants",
|
||||
"map": "Trouvez votre chemin sur le campus",
|
||||
"self": "Regardez le menu du RU",
|
||||
"availableRooms": "Vérifiez les salles disponibles",
|
||||
"bib": "Réservez une Bib'Box pour les travaux de groupe",
|
||||
"mails": "Vérifiez vos mails INSA",
|
||||
"ent": "Retrouvez vos notes",
|
||||
"insaAccount": "Accédez à vos informations et modifiez votre mot de passe",
|
||||
"equipment": "Réservez un BBQ ou d'autre matériel"
|
||||
},
|
||||
"mascotDialog": {
|
||||
"title": "",
|
||||
"message": "",
|
||||
"button": ""
|
||||
}
|
||||
},
|
||||
"proxiwash": {
|
||||
"title": "Proxiwash",
|
||||
"dryer": "Sèche-Linge",
|
||||
"dryers": "Sèche-Linges",
|
||||
"washer": "Lave-Linge",
|
||||
"washers": "Lave-Linges",
|
||||
"min": "min",
|
||||
"listUpdated": "État des machines mis à jour",
|
||||
"listUpdateFail": "Erreur lors de la mise à jour de l'état des machines",
|
||||
"error": "Impossible de mettre a jour l'état des machines. Tirez vers le bas pour réessayer.",
|
||||
"loading": "Chargement...",
|
||||
"description": "C'est le service de laverie proposé par promologis pour les résidences INSA (On t'en voudra pas si tu loges pas sur le campus et que tu fais ta machine ici). Le local situé au pied du R2 avec ses 3 sèche-linges et 9 machines est ouvert 7J/7 24h/24 ! Ici tu peux vérifier leur disponibilité ! Tu peux amener ta lessive, la prendre sur place ou encore mieux l'acheter au Proximo (moins chère qu'à la laverie directement). Tu peux payer par CB ou espèces.",
|
||||
"informationTab": "Informations",
|
||||
"paymentTab": "Paiement",
|
||||
"tariffs": "Tarifs",
|
||||
"washersTariff": "3€ la machine + 0.80€ avec la lessive.",
|
||||
"dryersTariff": "0.35€ pour 5min de sèche linge.",
|
||||
"paymentMethods": "Moyens de Paiement",
|
||||
"paymentMethodsDescription": "Toute monnaie jusqu'à 10€.\nCarte bancaire acceptée.",
|
||||
"washerProcedure": "Déposer le linge dans le tambour sans le tasser et en respectant les charges.\n\nFermer la porte de l'appareil.\n\nSélectionner un programme avec l'une des quatre touches de programme favori standard.\n\nAprès avoir payé à la centrale de commande, appuyer sur le bouton marqué START du lave-linge.\n\nDès que le programme est terminé, l’afficheur indique 'Programme terminé', appuyer sur le bouton jaune d’ouverture du hublot pour récupérer le linge.",
|
||||
"washerTips": "Programme blanc/couleur : 6kg de linge sec (textiles en coton, lin, linge de corps, draps, jeans,serviettes de toilettes).\n\nProgramme nonrepassable : 3,5 kg de linge sec (textiles en fibres synthétiques, cotonet polyester mélangés).\n\nProgramme fin 30°C : 2,5 kg de linge sec (textiles délicats en fibres synthétiques, rayonne).\n\nProgramme laine 30°C : 2,5 kg de linge sec (textiles en laine et lainages lavables).",
|
||||
"dryerProcedure": "Déposer le linge dans le tambour sans le tasser et en respectant les charges.\n\nFermer la porte de l'appareil.\n\nSélectionner un programme avec l'une des quatre touches de programme favori standard.\n\nAprès avoir payé à la centrale de commande, appuyer sur le bouton marqué START du lave-linge.",
|
||||
"dryerTips": "La durée conseillée est de 35 minutes pour 14kg de linge. Vous pouvez choisir une durée plus courte si le sèche-linge n'est pas chargé.",
|
||||
"procedure": "Procédure",
|
||||
"tips": "Conseils",
|
||||
"numAvailable": "disponible",
|
||||
"numAvailablePlural": "disponibles",
|
||||
"modal": {
|
||||
"enableNotifications": "Me Notifier",
|
||||
"disableNotifications": "Désactiver les notifications",
|
||||
"ok": "OK",
|
||||
"cancel": "Annuler",
|
||||
"finished": "Cette machine est terminée. Si vous l'avez démarrée, vous pouvez récupérer votre linge.",
|
||||
"ready": "Cette machine est vide et prête à être utilisée.",
|
||||
"running": "Cette machine a démarré à %{start} et terminera à %{end}.\n\nTemps restant : %{remaining} min.\nProgramme: %{program}",
|
||||
"runningNotStarted": "Cette machine est prête mais n'est pas démarrée. Assurez vous de bien avoir appuyé sur le bouton start.",
|
||||
"broken": "Cette machine est hors service. Merci pour votre compréhension.",
|
||||
"error": "Il y a eu une erreur et il est impossible de récupérer les informations de cette machine. Veuillez nous excuser pour le gène occasionnée.",
|
||||
"unknown": "Cette machine est dans un état inconnu. Veuillez nous excuser pour ce problème.",
|
||||
"notificationErrorTitle": "Erreur",
|
||||
"notificationErrorDescription": "Impossible de créer les notifications. Merci de vérifier que vous avez activé les notifications puis redémarrez l'appli."
|
||||
},
|
||||
"states": {
|
||||
"finished": "TERMINÉ",
|
||||
"ready": "DISPONIBLE",
|
||||
"running": "EN COURS",
|
||||
"runningNotStarted": "NON DÉMARRÉE",
|
||||
"broken": "HORS SERVICE",
|
||||
"error": "ERREUR",
|
||||
"unknown": "INCONNU"
|
||||
},
|
||||
"notifications": {
|
||||
"machineFinishedTitle": "Linge prêt",
|
||||
"machineFinishedBody": "La machine n°{{number}} est terminée et votre linge est prêt à être récupéré",
|
||||
"machineRunningTitle": "Machine en cours: {{time}} minutes restantes",
|
||||
"machineRunningBody": "La machine n°{{number}} n'est pas encore terminée"
|
||||
},
|
||||
"mascotDialog": {
|
||||
"title": "",
|
||||
"message": "",
|
||||
"ok": ""
|
||||
}
|
||||
},
|
||||
"home": {
|
||||
"title": "Accueil",
|
||||
"feed": "Détails",
|
||||
"listUpdated": "List mise à jour!",
|
||||
"listUpdateFail": "Erreur lors de la mise à jour de la liste",
|
||||
"servicesButton": "Plus de services",
|
||||
"dashboard": {
|
||||
"seeMore": "Cliquez pour plus d'infos",
|
||||
"todayEventsTitle": "Événements aujourd'hui",
|
||||
"todayEventsSubtitleNA": "Pas d'événement",
|
||||
"todayEventsSubtitle": " événement aujourd'hui",
|
||||
"todayEventsSubtitlePlural": " événements aujourd'hui"
|
||||
},
|
||||
"mascotDialog": {
|
||||
"title": "Welcome, you!",
|
||||
"message": "Connectez-vous à votre compte Amicale pour profiter de plus de services !",
|
||||
"login": "Se Connecter",
|
||||
"later": "Plus Tard"
|
||||
}
|
||||
},
|
||||
"planning": {
|
||||
"title": "Événements",
|
||||
"eventDetails": "Détails",
|
||||
"invalidEvent": "Impossible de trouver l'événement. Merci de vérifier que l'événement que vous voulez voir est valide.",
|
||||
"mascotDialog": {
|
||||
"title": "",
|
||||
"message": "",
|
||||
"button": ""
|
||||
}
|
||||
},
|
||||
"planex": {
|
||||
"title": "Planex",
|
||||
"noGroupSelected": "Pas de groupe sélectionné. Merci de choisir un groupe avec le beau bouton rouge ci-dessous.",
|
||||
"favorites": "Favoris",
|
||||
"mascotDialog": {
|
||||
"title": "",
|
||||
"message": "",
|
||||
"ok": "",
|
||||
"cancel": ""
|
||||
}
|
||||
},
|
||||
|
||||
"amicaleAbout": {
|
||||
"title": "Une Question ?",
|
||||
"subtitle": "Posez vos questions à l'Amicale",
|
||||
"message": "Vous voulez reprendre un club ?\nVous voulez vous lancer dans un projet ?\nVoici tous les contacts de l'amicale ! N'hésitez pas à nous écrire par mail ou sur la page facebook de l'Amicale !",
|
||||
"roles": {
|
||||
"interSchools": "Inter Écoles",
|
||||
"culture": "Culture",
|
||||
"animation": "Animation",
|
||||
"clubs": "Clubs",
|
||||
"event": "Événements",
|
||||
"tech": "Technique",
|
||||
"communication": "Communication",
|
||||
"intraSchools": "Alumni / IAT",
|
||||
"publicRelations": "Relations Publiques"
|
||||
}
|
||||
},
|
||||
"proximo": {
|
||||
"title": "Proximo",
|
||||
"articleList": "Articles",
|
||||
"emptyList": "Liste Vide",
|
||||
"article": "Article",
|
||||
"articles": "Articles",
|
||||
"sortOrder": "Trier par :",
|
||||
"sortName": "Nom",
|
||||
"sortNameReverse": "Nom (inversé)",
|
||||
"sortPrice": "Prix",
|
||||
"sortPriceReverse": "Prix (inversé)",
|
||||
"listUpdated": "Liste d'articles mise à jour !",
|
||||
"listUpdateFail": "Erreur lors de la mise à jour de la list d'articles",
|
||||
"loading": "Chargement...",
|
||||
"inStock": "en stock",
|
||||
"description": "Le Proximo c’est ta petite épicerie étudiante tenue par les étudiants directement sur le campus. Ouverte tous les jours de 18h30 à 19h30, nous t’accueillons et te sauvons quand tu n’as plus de pâtes ou de diluant ! Différents produits pour différentes galères, le tout à prix coûtant. Tu peux payer par Lydia ou par espèce.",
|
||||
"openingHours": "Horaires d'ouverture",
|
||||
"paymentMethods": "Moyens de Paiement",
|
||||
"paymentMethodsDescription": "Espèce ou Lydia",
|
||||
"search": "Rechercher",
|
||||
"all": "Tout"
|
||||
},
|
||||
"insaAccount": {
|
||||
"title": "INSA Account"
|
||||
},
|
||||
"menu": {
|
||||
"title": "RU Menu"
|
||||
},
|
||||
"websites": {
|
||||
"amicale": "Amicale's website",
|
||||
"rooms": "Available rooms",
|
||||
"bib": "Bib'Box",
|
||||
"mails": "INSA Mails",
|
||||
"ent": "INSA ENT"
|
||||
},
|
||||
|
||||
"login": {
|
||||
"title": "Connexion",
|
||||
"subtitle": "Entrez vos identifiants",
|
||||
"email": "Email",
|
||||
"emailError": "Merci d'entrer un email valide",
|
||||
"password": "Mot de passe",
|
||||
"passwordError": "Merci d'entrer un mot de passe",
|
||||
"resetPassword": "Mdp oublié",
|
||||
"whyAccountTitle": "Un compte ?",
|
||||
"whyAccountSub": "Ce qu'un compte vous apporte",
|
||||
"whyAccountParagraph": "Un compte Amicale vous donne la possibilité de participer à diverses activités sur le campus. Vous pouvez rejoindre des clubs ou même créer le votre !",
|
||||
"whyAccountParagraph2": "Vous connecter à votre compte Amicale sur l'appli vous permettra de voir tous les clubs en activité, de voter pour les prochaines élections, et plus à venir !",
|
||||
"noAccount": "Pas de compte ? Passez à l'Amicale pendant une perm pour en créer un."
|
||||
},
|
||||
"profile": {
|
||||
"title": "Profil",
|
||||
"personalInformation": "Informations Personnelles",
|
||||
"noData": "Pas de données",
|
||||
"editInformation": "Modifier les informations",
|
||||
"clubs": "Vos clubs",
|
||||
"clubsSubtitle": "Cliquez sur un club pour afficher ses informations",
|
||||
"isMember": "Membre",
|
||||
"isManager": "Responsable",
|
||||
"membership": "Cotisation",
|
||||
"membershipSubtitle": "Permet de participer à diverses activités",
|
||||
"membershipPayed": "Payée",
|
||||
"membershipNotPayed": "Non payée",
|
||||
"welcomeTitle": "Bonjour %{name} !",
|
||||
"welcomeDescription": "Ceci est votre espace personnel Amicale INSA Toulouse. Vous trouverez ci-dessous les services disponibles avec votre compte. Un peu vide ? Vous avez raison et nous allons essayer de corriger ça, donc restez à jour !",
|
||||
"welcomeFeedback": "Nous allons essayer de proposer plus de services ! Si vous avez des suggestions, ou avez trouvé des bugs, merci de nous contacter avec le bouton ci-dessous."
|
||||
},
|
||||
"clubs": {
|
||||
"title": "Liste des Clubs",
|
||||
"details": "Détails",
|
||||
"managers": "Responsables",
|
||||
"managersSubtitle": "Ces personnes font vivre le club",
|
||||
"managersUnavailable": "Ce club est tout seul :(",
|
||||
"categories": "Catégories",
|
||||
"categoriesFilterMessage": "Cliquez sur une catégorie pour filtrer la liste",
|
||||
"clubContact": "Contacter le club",
|
||||
"amicaleContact": "Contacter l'Amicale",
|
||||
"invalidClub": "Impossible de trouver le club. Merci de vérifier que le club que vous voulez voir est valide.",
|
||||
"about": {
|
||||
"text": "Les clubs, c'est ce qui fait vivre le campus au quotidien, plus d'une soixantaine de clubs qui proposent des activités diverses et variées ! Du club Philosophie au PABI (Production Artisanale de Bière Insaienne), en passant par les multiples clubs de musique et de danse, vous trouverez forcément une activité qui vous permettra de vous épanouir sur le campus !",
|
||||
"title": "Une question ?",
|
||||
"subtitle": "Posez vos questions à l'Amicale",
|
||||
"message": "Vous avez question concernant les clubs ?\nVous voulez reprendre ou créer un club ?\nContactez les responsables au mail ci-dessous :"
|
||||
}
|
||||
},
|
||||
"vote": {
|
||||
"title": "Élections",
|
||||
"select": {
|
||||
"title": "Élections ouvertes",
|
||||
"subtitle": "Votez maintenant !",
|
||||
"sendButton": "Envoyer votre vote",
|
||||
"dialogTitle": "Envoyer votre vote ?",
|
||||
"dialogTitleLoading": "Envoi du vote...",
|
||||
"dialogMessage": "Êtes vous sûr de vouloir envoyer votre vote ? Vous ne pourrez plus le changer."
|
||||
},
|
||||
"tease": {
|
||||
"title": "Les élections arrivent",
|
||||
"subtitle": "Préparez vous à voter !",
|
||||
"message": "Début des votes :"
|
||||
},
|
||||
"wait": {
|
||||
"titleSubmitted": "Vote envoyé !",
|
||||
"titleEnded": "Votes fermés",
|
||||
"subtitle": "Attente des résultats...",
|
||||
"messageSubmitted": "Votre vote a bien été envoyé.",
|
||||
"messageVoted": "Merci pour votre participation.",
|
||||
"messageDate": "Disponibilité des résultats :",
|
||||
"messageDateUndefined": "les résultats seront disponibles sous peu."
|
||||
},
|
||||
"results": {
|
||||
"title": "Résultats",
|
||||
"subtitle": "Disponibles jusqu'à :",
|
||||
"totalVotes": "Nombre total de votes :",
|
||||
"votes": "votes"
|
||||
},
|
||||
"main": {
|
||||
"title": "Les Élections",
|
||||
"subtitle": "Pourquoi votre vote est important",
|
||||
"paragraph1": "Les élections de l'amicale, c'est le moment pour vous de choisir la prochaine équipe qui portera les différents projets du campus, qui soutiendra les organisations de vos événements favoris, qui vous proposera des animations tout au long de l'année, et qui poussera vos idées à l’administration pour que la vie de campus soit des plus riches !\nAlors à vous de jouer ! \uD83D\uDE09",
|
||||
"paragraph2": "NB : Si par cas il n'y a qu'une liste qui se présente, il est important que tout le monde vote, afin qui la liste puisse montrer à l’administration que les INSAiens la soutiennent ! Ça compte toujours pour les décisions difficiles ! \uD83D\uDE09"
|
||||
}
|
||||
},
|
||||
"equipment": {
|
||||
"title": "Réservation de Matériel",
|
||||
"book": "Réserver",
|
||||
"confirm": "Confirmation",
|
||||
"message": "L'Amicale mets à disposition des étudiants du matériel comme des BBQ, des appareils à raclette et autres. Pour réserver l'un de ces formidables appareils, cliquez sur celui de votre choix dans la liste, indiquez les dates du prêt, puis passez à l'Amicale pour le récupérer et donner votre caution.",
|
||||
"bail": "Caution : %{cost}€",
|
||||
"available": "",
|
||||
"today": "",
|
||||
"tomorrow": "",
|
||||
"thisMonth": "",
|
||||
"otherMonth": "",
|
||||
"otherYear": "",
|
||||
"bookingDay": "",
|
||||
"bookingPeriod": "",
|
||||
"booking": "",
|
||||
"bookButton": "",
|
||||
"dialogTitle": "",
|
||||
"dialogTitleLoading": "",
|
||||
"dialogMessage": "",
|
||||
"bookingConfirmedMessage": ""
|
||||
},
|
||||
|
||||
"scanner": {
|
||||
"title": "Scanotron 3000",
|
||||
"permissions": {
|
||||
"error": "Scanotron 3000 a besoin d'accéder à la caméra pour scanner des QR codes.\nLa caméra ne sera jamais utilisée autrement.",
|
||||
"button": "Autoriser l'accès à la caméra"
|
||||
},
|
||||
"error": {
|
||||
"title": "QR code invalide",
|
||||
"message": "Le QR code scannée n'a pas été reconnu. Merci de vérifier sa validité."
|
||||
},
|
||||
"help": {
|
||||
"button": "Quoi scanner ?",
|
||||
"title": "Comment utiliser Scanotron 3000",
|
||||
"message": "Trouvez des QR codes Campus affichés par des clubs ou des respo d'évenements, scannez les et accédez à des informations détaillées !"
|
||||
}
|
||||
},
|
||||
"settings": {
|
||||
"title": "Paramètres",
|
||||
"generalCard": "Général",
|
||||
"nightMode": "Mode Nuit",
|
||||
"nightModeSubOn": "Vos yeux vous remercient",
|
||||
"nightModeSubOff": "Vos yeux brulent",
|
||||
"nightModeAuto": "Mode nuit système",
|
||||
"startScreen": "Écran de démarrage",
|
||||
"startScreenSub": "Choisissez l'écran utilisé au démarrage",
|
||||
"proxiwashNotifReminder": "Rappel de machine en cours",
|
||||
"proxiwashNotifReminderSub": "Combien de minutes avant",
|
||||
"information": "Informations"
|
||||
},
|
||||
"about": {
|
||||
"title": "À Propos",
|
||||
"buttonDesc": "Informations sur l'appli et son créateur",
|
||||
"appstore": "Voir sur l'Appstore",
|
||||
"playstore": "Voir sur le Playstore",
|
||||
"changelog": "Historique des modifications",
|
||||
"license": "Licence",
|
||||
"debug": "Debug",
|
||||
"team": "Équipe",
|
||||
"author": "Auteur et mainteneur",
|
||||
"authorMail": "Envoyer un mail",
|
||||
"additionalDev": "Aide au développement",
|
||||
"technologies": "Technologies",
|
||||
"reactNative": "Créé avec React Native",
|
||||
"expo": "Compilé avec Expo",
|
||||
"libs": "Librairies utilisées"
|
||||
},
|
||||
"feedback": {
|
||||
"title": "Feedback",
|
||||
"bugs": "Rapporter des Bugs",
|
||||
"bugsSubtitle": "Vous avez trouvé un bug ?",
|
||||
"bugsDescription": "Rapporter les bugs nous aide à améliorer l'appli. Pour cela, merci d'utiliser un des boutons ci-dessous et de décrire votre problème le plus précisément possible !",
|
||||
"feedbackSubtitle": "Dites nous ce que vous pensez !",
|
||||
"feedbackDescription": "Vous voulez voir une fonctionnalité ajoutée/modifiée/supprimée ? Vous voulez donner votre opinion sur l'appli ou simplement discuter avec le développeur ? Utilisez un des liens ci-dessous !",
|
||||
"contactMeans": "L'utilisation de Gitea est recommandée, pour l'utiliser, connectez vous avec vos identifiants INSA.",
|
||||
"homeButtonTitle": "Feedback/Bugs",
|
||||
"homeButtonSubtitle": "Contacter le développeur"
|
||||
},
|
||||
"game": {
|
||||
"title": "Jeu",
|
||||
"pause": "Pause",
|
||||
"pauseMessage": "Le jeu est en pause",
|
||||
"resume": "Continuer",
|
||||
"restart": {
|
||||
"text": "Redémarrer",
|
||||
"confirm": "Êtes vous sûr de vouloir redémarrer ?",
|
||||
"confirmMessage": "Tout votre progrès sera perdu, continuer ?",
|
||||
"confirmYes": "Oui",
|
||||
"confirmNo": "Non"
|
||||
},
|
||||
"gameOver": {
|
||||
"text": "Game Over",
|
||||
"score": "Score: ",
|
||||
"level": "Niveau: ",
|
||||
"time": "Temps: ",
|
||||
"exit": "Quitter"
|
||||
}
|
||||
},
|
||||
"debug": {
|
||||
"title": "Debug"
|
||||
}
|
||||
},
|
||||
"intro": {
|
||||
"slideMain": {
|
||||
"title": "Bienvenue sur CAMPUS",
|
||||
"text": "La nouvelle appli à consulter pendant la pause café pour être au courant de la vie du campus !"
|
||||
},
|
||||
"slideEvents": {
|
||||
"title": "Restez informés",
|
||||
"text": "CAMPUS vous permet d'être au courant de tous les événements qui ont lieu sur le campus, de la vente de crêpes jusqu'aux concerts enfoiros !"
|
||||
},
|
||||
"slideProxiwash": {
|
||||
"title": "N'oubliez plus votre linge !",
|
||||
"text": "CAMPUS vous informe de la disponibilité des machines et vous permet d'être notifié lorsque la vôtre se termine bientôt !"
|
||||
},
|
||||
"slidePlanex": {
|
||||
"title": "Planex",
|
||||
"text": "Vérifiez votre prochain cours sur CAMPUS avec un emploi du temps adapté mobile"
|
||||
},
|
||||
"slideRU": {
|
||||
"title": "Menu du RU",
|
||||
"text": "Pour ceux qui ont faim, vérifiez le menu du RU de la semaine !"
|
||||
},
|
||||
"slideServices": {
|
||||
"title": "Encore plus de services !",
|
||||
"text": "CAMPUS vous permet de faire bien plus, explorez l'appli pour savoir quoi"
|
||||
},
|
||||
"slideDone": {
|
||||
"title": "Fait par un étudiant",
|
||||
"text": "Cette appli à été réalisée par un seul étudiant (avec un peu d'aide par-ci par-là), donc tous les retours sont les bienvenus !"
|
||||
},
|
||||
"updateSlide0": {
|
||||
"title": "Nouveau dans cette mise à jour !",
|
||||
"text": "Plus rapide que jamais et plus simple à utiliser !\nCette mise à jour contient de nombreux changements pour améliorer votre expérience.\nUtilisez le tout nouveau bouton de Feedback pour parler directement au développeur!"
|
||||
},
|
||||
"updateSlide1": {
|
||||
"title": "Planex tout beau !",
|
||||
"text": "Vous avez maintenant accès à de nouveaux contrôles, un affichage amélioré, et vous pouvez marquer des groupes en favoris."
|
||||
},
|
||||
"updateSlide2": {
|
||||
"title": "Scanotron 3000 !",
|
||||
"text": "Dites bonjour à Scanotron 3000 !\nDisponible depuis le bouton Qr-Code sur le menu principal, il vous aidera à avoir des informations sur les clubs et les événements du campus.\n(Inutile tout de suite mais on verra l'année pro)"
|
||||
},
|
||||
"updateSlide3": {
|
||||
"title": "Compte Amicale !",
|
||||
"text": "Vous pouvez maintenant vous connecter à votre compte Amicale depuis l'appli ! Accédez à la liste des clubs et plus à venir !\nCliquez sur le bouton Se Connecter dans le menu principal."
|
||||
},
|
||||
"aprilFoolsSlide": {
|
||||
"title": "Nouveau dans cette mise à jour !",
|
||||
"text": "Nous vous avons entendu, vous n'aimez pas le nouveau design et couleurs, alors on les as changés !\nLa bise."
|
||||
},
|
||||
"buttons": {
|
||||
"next": "Suivant",
|
||||
"skip": "Passer",
|
||||
"done": "Commencer"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"title": "Erreur !",
|
||||
"badCredentials": "Email ou mot de passe invalide.",
|
||||
"badToken": "Vous n'êtes pas connecté. Merci de vous connecter puis réessayez.",
|
||||
"noConsent": "Vous n'avez pas donné votre consentement pour l'utilisation de vos données personnelles.",
|
||||
"tokenSave": "Impossible de sauvegarder le token de session. Merci de contacter le support.",
|
||||
"badInput": "Entrée invalide. Merci de réessayer.",
|
||||
"forbidden": "Vous n'avez pas accès à cette information.",
|
||||
"connectionError": "Erreur de réseau. Merci de vérifier votre connexion Internet.",
|
||||
"serverError": "Erreur de serveur. Merci de contacter le support.",
|
||||
"unknown": "Erreur inconnue. Merci de contacter le support."
|
||||
},
|
||||
"dialog": {
|
||||
"ok": "OK",
|
||||
"yes": "Oui",
|
||||
"cancel": "Annuler",
|
||||
"disconnect": {
|
||||
"title": "Déconnexion",
|
||||
"titleLoading": "Déconnexion...",
|
||||
"message": "Voulez vous vraiment vous déconnecter de votre compte Amicale ??"
|
||||
}
|
||||
},
|
||||
"general": {
|
||||
"loading": "Chargement...",
|
||||
"retry": "Réessayer",
|
||||
"networkError": "Impossible de contacter les serveurs. Assurez-vous d'être connecté à internet.",
|
||||
"goBack": "Suivant",
|
||||
"goForward": "Précédent",
|
||||
"openInBrowser": "Ouvrir dans le navigateur",
|
||||
"notAvailable": "Non disponible"
|
||||
},
|
||||
"date": {
|
||||
"daysOfWeek": {
|
||||
"monday": "Lundi",
|
||||
"tuesday": "Mardi",
|
||||
"wednesday": "Mercredi",
|
||||
"thursday": "Jeudi",
|
||||
"friday": "Vendredi",
|
||||
"saturday": "Samedi",
|
||||
"sunday": "Dimanche"
|
||||
},
|
||||
"monthsOfYear": {
|
||||
"january": "Janvier",
|
||||
"february": "Février",
|
||||
"march": "Mars",
|
||||
"april": "Avril",
|
||||
"may": "Mai",
|
||||
"june": "Juin",
|
||||
"july": "Juillet",
|
||||
"august": "Août",
|
||||
"september": "Septembre",
|
||||
"october": "Octobre",
|
||||
"november": "Novembre",
|
||||
"december": "Décembre"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -63,7 +63,7 @@ class VoteResults extends React.Component<Props> {
|
|||
}}>
|
||||
<List.Item
|
||||
title={item.name}
|
||||
description={item.votes + ' ' + i18n.t('voteScreen.results.votes')}
|
||||
description={item.votes + ' ' + i18n.t('screens.vote.results.votes')}
|
||||
left={props => isWinner
|
||||
? <List.Icon {...props} icon={isDraw ? "trophy-outline" : "trophy"} color={colors.primary}/>
|
||||
: null}
|
||||
|
@ -83,15 +83,15 @@ class VoteResults extends React.Component<Props> {
|
|||
return (
|
||||
<Card style={styles.card}>
|
||||
<Card.Title
|
||||
title={i18n.t('voteScreen.results.title')}
|
||||
subtitle={i18n.t('voteScreen.results.subtitle') + ' ' + this.props.dateEnd}
|
||||
title={i18n.t('screens.vote.results.title')}
|
||||
subtitle={i18n.t('screens.vote.results.subtitle') + ' ' + this.props.dateEnd}
|
||||
left={(props) => <Avatar.Icon
|
||||
{...props}
|
||||
icon={"podium-gold"}
|
||||
/>}
|
||||
/>
|
||||
<Card.Content>
|
||||
<Subheading>{i18n.t('voteScreen.results.totalVotes') + ' ' + this.totalVotes}</Subheading>
|
||||
<Subheading>{i18n.t('screens.vote.results.totalVotes') + ' ' + this.totalVotes}</Subheading>
|
||||
{/*$FlowFixMe*/}
|
||||
<FlatList
|
||||
data={this.props.teams}
|
||||
|
|
|
@ -75,8 +75,8 @@ export default class VoteSelect extends React.PureComponent<Props, State> {
|
|||
<View>
|
||||
<Card style={styles.card}>
|
||||
<Card.Title
|
||||
title={i18n.t('voteScreen.select.title')}
|
||||
subtitle={i18n.t('voteScreen.select.subtitle')}
|
||||
title={i18n.t('screens.vote.select.title')}
|
||||
subtitle={i18n.t('screens.vote.select.subtitle')}
|
||||
left={(props) =>
|
||||
<Avatar.Icon
|
||||
{...props}
|
||||
|
@ -105,7 +105,7 @@ export default class VoteSelect extends React.PureComponent<Props, State> {
|
|||
style={{marginLeft: 'auto'}}
|
||||
disabled={this.state.selectedTeam === "none"}
|
||||
>
|
||||
{i18n.t('voteScreen.select.sendButton')}
|
||||
{i18n.t('screens.vote.select.sendButton')}
|
||||
</Button>
|
||||
</Card.Actions>
|
||||
</Card>
|
||||
|
@ -113,9 +113,9 @@ export default class VoteSelect extends React.PureComponent<Props, State> {
|
|||
visible={this.state.voteDialogVisible}
|
||||
onDismiss={this.onVoteDialogDismiss}
|
||||
onAccept={this.onVoteDialogAccept}
|
||||
title={i18n.t('voteScreen.select.dialogTitle')}
|
||||
titleLoading={i18n.t('voteScreen.select.dialogTitleLoading')}
|
||||
message={i18n.t('voteScreen.select.dialogMessage')}
|
||||
title={i18n.t('screens.vote.select.dialogTitle')}
|
||||
titleLoading={i18n.t('screens.vote.select.dialogTitleLoading')}
|
||||
message={i18n.t('screens.vote.select.dialogMessage')}
|
||||
/>
|
||||
<ErrorDialog
|
||||
visible={this.state.errorDialogVisible}
|
||||
|
|
|
@ -19,15 +19,15 @@ export default class VoteTease extends React.Component<Props> {
|
|||
return (
|
||||
<Card style={styles.card}>
|
||||
<Card.Title
|
||||
title={i18n.t('voteScreen.tease.title')}
|
||||
subtitle={i18n.t('voteScreen.tease.subtitle')}
|
||||
title={i18n.t('screens.vote.tease.title')}
|
||||
subtitle={i18n.t('screens.vote.tease.subtitle')}
|
||||
left={props => <Avatar.Icon
|
||||
{...props}
|
||||
icon="vote"/>}
|
||||
/>
|
||||
<Card.Content>
|
||||
<Paragraph>
|
||||
{i18n.t('voteScreen.tease.message') + ' ' + this.props.startDate}
|
||||
{i18n.t('screens.vote.tease.message') + ' ' + this.props.startDate}
|
||||
</Paragraph>
|
||||
</Card.Content>
|
||||
</Card>
|
||||
|
|
|
@ -17,8 +17,8 @@ export default class VoteTitle extends React.Component<{}> {
|
|||
return (
|
||||
<Card style={styles.card}>
|
||||
<Card.Title
|
||||
title={i18n.t('voteScreen.title.title')}
|
||||
subtitle={i18n.t('voteScreen.title.subtitle')}
|
||||
title={i18n.t('screens.vote.main.title')}
|
||||
subtitle={i18n.t('screens.vote.main.subtitle')}
|
||||
left={(props) => <Avatar.Image
|
||||
{...props}
|
||||
source={ICON_AMICALE}
|
||||
|
@ -27,10 +27,10 @@ export default class VoteTitle extends React.Component<{}> {
|
|||
/>
|
||||
<Card.Content>
|
||||
<Paragraph>
|
||||
{i18n.t('voteScreen.title.paragraph1')}
|
||||
{i18n.t('screens.vote.main.paragraph1')}
|
||||
</Paragraph>
|
||||
<Paragraph>
|
||||
{i18n.t('voteScreen.title.paragraph2')}
|
||||
{i18n.t('screens.vote.main.paragraph2')}
|
||||
</Paragraph>
|
||||
</Card.Content>
|
||||
</Card>
|
||||
|
|
|
@ -27,32 +27,32 @@ class VoteWait extends React.Component<Props> {
|
|||
<Card style={styles.card}>
|
||||
<Card.Title
|
||||
title={this.props.isVoteRunning
|
||||
? i18n.t('voteScreen.wait.titleSubmitted')
|
||||
: i18n.t('voteScreen.wait.titleEnded')}
|
||||
subtitle={i18n.t('voteScreen.wait.subtitle')}
|
||||
? i18n.t('screens.vote.wait.titleSubmitted')
|
||||
: i18n.t('screens.vote.wait.titleEnded')}
|
||||
subtitle={i18n.t('screens.vote.wait.subtitle')}
|
||||
left={(props) => <ActivityIndicator {...props}/>}
|
||||
/>
|
||||
<Card.Content>
|
||||
{
|
||||
this.props.justVoted
|
||||
? <Paragraph style={{color: colors.success}}>
|
||||
{i18n.t('voteScreen.wait.messageSubmitted')}
|
||||
{i18n.t('screens.vote.wait.messageSubmitted')}
|
||||
</Paragraph>
|
||||
: null
|
||||
}
|
||||
{
|
||||
this.props.hasVoted
|
||||
? <Paragraph style={{color: colors.success}}>
|
||||
{i18n.t('voteScreen.wait.messageVoted')}
|
||||
{i18n.t('screens.vote.wait.messageVoted')}
|
||||
</Paragraph>
|
||||
: null
|
||||
}
|
||||
{
|
||||
startDate != null
|
||||
? <Paragraph>
|
||||
{i18n.t('voteScreen.wait.messageDate') + ' ' + startDate}
|
||||
{i18n.t('screens.vote.wait.messageDate') + ' ' + startDate}
|
||||
</Paragraph>
|
||||
: <Paragraph>{i18n.t('voteScreen.wait.messageDateUndefined')}</Paragraph>
|
||||
: <Paragraph>{i18n.t('screens.vote.wait.messageDateUndefined')}</Paragraph>
|
||||
}
|
||||
</Card.Content>
|
||||
</Card>
|
||||
|
|
|
@ -22,8 +22,8 @@ class ActionsDashBoardItem extends React.Component<Props> {
|
|||
return (
|
||||
<View>
|
||||
<List.Item
|
||||
title={i18n.t("feedbackScreen.homeButtonTitle")}
|
||||
description={i18n.t("feedbackScreen.homeButtonSubtitle")}
|
||||
title={i18n.t("screens.feedback.homeButtonTitle")}
|
||||
description={i18n.t("screens.feedback.homeButtonSubtitle")}
|
||||
left={props => <List.Icon {...props} icon={"bug"}/>}
|
||||
right={props => <List.Icon {...props} icon={"chevron-right"}/>}
|
||||
onPress={() => this.props.navigation.navigate("feedback")}
|
||||
|
|
|
@ -40,18 +40,18 @@ class EventDashBoardItem extends React.Component<Props> {
|
|||
<Text style={{fontWeight: "bold"}}>{props.eventNumber}</Text>
|
||||
<Text>
|
||||
{props.eventNumber > 1
|
||||
? i18n.t('homeScreen.dashboard.todayEventsSubtitlePlural')
|
||||
: i18n.t('homeScreen.dashboard.todayEventsSubtitle')}
|
||||
? i18n.t('screens.home.dashboard.todayEventsSubtitlePlural')
|
||||
: i18n.t('screens.home.dashboard.todayEventsSubtitle')}
|
||||
</Text>
|
||||
</Text>;
|
||||
} else
|
||||
subtitle = i18n.t('homeScreen.dashboard.todayEventsSubtitleNA');
|
||||
subtitle = i18n.t('screens.home.dashboard.todayEventsSubtitleNA');
|
||||
return (
|
||||
<Card
|
||||
style={styles.card}
|
||||
onPress={props.clickAction}>
|
||||
<Card.Title
|
||||
title={i18n.t('homeScreen.dashboard.todayEventsTitle')}
|
||||
title={i18n.t('screens.home.dashboard.todayEventsTitle')}
|
||||
titleStyle={{color: textColor}}
|
||||
subtitle={subtitle}
|
||||
subtitleStyle={{color: textColor}}
|
||||
|
|
|
@ -107,7 +107,7 @@ class FeedItem extends React.Component<Props> {
|
|||
onPress={this.onPress}
|
||||
icon={'plus'}
|
||||
style={{marginLeft: 'auto'}}>
|
||||
{i18n.t('homeScreen.dashboard.seeMore')}
|
||||
{i18n.t('screens.home.dashboard.seeMore')}
|
||||
</Button>
|
||||
</Card.Actions>
|
||||
</Card>
|
||||
|
|
|
@ -58,7 +58,7 @@ class PreviewEventDashboardItem extends React.Component<Props> {
|
|||
<Button
|
||||
icon={'chevron-right'}
|
||||
>
|
||||
{i18n.t("homeScreen.dashboard.seeMore")}
|
||||
{i18n.t("screens.home.dashboard.seeMore")}
|
||||
</Button>
|
||||
</Card.Actions>
|
||||
</Card>
|
||||
|
|
|
@ -46,11 +46,11 @@ class ClubListHeader extends React.Component<Props> {
|
|||
return (
|
||||
<Card style={styles.card}>
|
||||
<AnimatedAccordion
|
||||
title={i18n.t("clubs.categories")}
|
||||
title={i18n.t("screens.clubs.categories")}
|
||||
left={props => <List.Icon {...props} icon="star"/>}
|
||||
opened={true}
|
||||
>
|
||||
<Text style={styles.text}>{i18n.t("clubs.categoriesFilterMessage")}</Text>
|
||||
<Text style={styles.text}>{i18n.t("screens.clubs.categoriesFilterMessage")}</Text>
|
||||
<View style={styles.chipContainer}>
|
||||
{this.getCategoriesRender()}
|
||||
</View>
|
||||
|
|
|
@ -48,18 +48,18 @@ class EquipmentListItem extends React.Component<Props> {
|
|||
const start = new Date(userDeviceRentDates[0]);
|
||||
const end = new Date(userDeviceRentDates[1]);
|
||||
if (start.getTime() !== end.getTime())
|
||||
description = i18n.t('equipmentScreen.bookingPeriod', {
|
||||
description = i18n.t('screens.equipment.bookingPeriod', {
|
||||
begin: getRelativeDateString(start),
|
||||
end: getRelativeDateString(end)
|
||||
});
|
||||
else
|
||||
description = i18n.t('equipmentScreen.bookingDay', {
|
||||
description = i18n.t('screens.equipment.bookingDay', {
|
||||
date: getRelativeDateString(start)
|
||||
});
|
||||
} else if (isAvailable)
|
||||
description = i18n.t('equipmentScreen.bail', {cost: item.caution});
|
||||
description = i18n.t('screens.equipment.bail', {cost: item.caution});
|
||||
else
|
||||
description = i18n.t('equipmentScreen.available', {date: getRelativeDateString(firstAvailability)});
|
||||
description = i18n.t('screens.equipment.available', {date: getRelativeDateString(firstAvailability)});
|
||||
|
||||
let icon;
|
||||
if (isRented)
|
||||
|
|
|
@ -28,7 +28,7 @@ class ProximoListItem extends React.Component<Props> {
|
|||
return (
|
||||
<List.Item
|
||||
title={this.props.item.name}
|
||||
description={this.props.item.quantity + ' ' + i18n.t('proximoScreen.inStock')}
|
||||
description={this.props.item.quantity + ' ' + i18n.t('screens.proximo.inStock')}
|
||||
descriptionStyle={{color: this.props.color}}
|
||||
onPress={this.props.onPress}
|
||||
left={() => <Avatar.Image style={{backgroundColor: 'transparent'}} size={64}
|
||||
|
|
|
@ -42,8 +42,8 @@ class ProxiwashListItem extends React.Component<Props> {
|
|||
displayNumber = AprilFoolsManager.getProxiwashMachineDisplayNumber(parseInt(props.item.number));
|
||||
|
||||
this.title = props.isDryer
|
||||
? i18n.t('proxiwashScreen.dryer')
|
||||
: i18n.t('proxiwashScreen.washer');
|
||||
? i18n.t('screens.proxiwash.dryer')
|
||||
: i18n.t('screens.proxiwash.washer');
|
||||
this.title += ' n°' + displayNumber;
|
||||
}
|
||||
|
||||
|
@ -56,13 +56,13 @@ class ProxiwashListItem extends React.Component<Props> {
|
|||
}
|
||||
|
||||
updateStateStrings() {
|
||||
this.stateStrings[ProxiwashConstants.machineStates.AVAILABLE] = i18n.t('proxiwashScreen.states.ready');
|
||||
this.stateStrings[ProxiwashConstants.machineStates.RUNNING] = i18n.t('proxiwashScreen.states.running');
|
||||
this.stateStrings[ProxiwashConstants.machineStates.RUNNING_NOT_STARTED] = i18n.t('proxiwashScreen.states.runningNotStarted');
|
||||
this.stateStrings[ProxiwashConstants.machineStates.FINISHED] = i18n.t('proxiwashScreen.states.finished');
|
||||
this.stateStrings[ProxiwashConstants.machineStates.UNAVAILABLE] = i18n.t('proxiwashScreen.states.broken');
|
||||
this.stateStrings[ProxiwashConstants.machineStates.ERROR] = i18n.t('proxiwashScreen.states.error');
|
||||
this.stateStrings[ProxiwashConstants.machineStates.UNKNOWN] = i18n.t('proxiwashScreen.states.unknown');
|
||||
this.stateStrings[ProxiwashConstants.machineStates.AVAILABLE] = i18n.t('screens.proxiwash.states.ready');
|
||||
this.stateStrings[ProxiwashConstants.machineStates.RUNNING] = i18n.t('screens.proxiwash.states.running');
|
||||
this.stateStrings[ProxiwashConstants.machineStates.RUNNING_NOT_STARTED] = i18n.t('screens.proxiwash.states.runningNotStarted');
|
||||
this.stateStrings[ProxiwashConstants.machineStates.FINISHED] = i18n.t('screens.proxiwash.states.finished');
|
||||
this.stateStrings[ProxiwashConstants.machineStates.UNAVAILABLE] = i18n.t('screens.proxiwash.states.broken');
|
||||
this.stateStrings[ProxiwashConstants.machineStates.ERROR] = i18n.t('screens.proxiwash.states.error');
|
||||
this.stateStrings[ProxiwashConstants.machineStates.UNKNOWN] = i18n.t('screens.proxiwash.states.unknown');
|
||||
}
|
||||
|
||||
updateStateColors() {
|
||||
|
|
|
@ -27,8 +27,8 @@ class ProxiwashListItem extends React.Component<Props> {
|
|||
const props = this.props;
|
||||
const subtitle = props.nbAvailable + ' ' + (
|
||||
(props.nbAvailable <= 1)
|
||||
? i18n.t('proxiwashScreen.numAvailable')
|
||||
: i18n.t('proxiwashScreen.numAvailablePlural'));
|
||||
? i18n.t('screens.proxiwash.numAvailable')
|
||||
: i18n.t('screens.proxiwash.numAvailablePlural'));
|
||||
const iconColor = props.nbAvailable > 0
|
||||
? this.props.theme.colors.success
|
||||
: this.props.theme.colors.primary;
|
||||
|
|
|
@ -124,7 +124,7 @@ class ErrorView extends React.PureComponent<Props, State> {
|
|||
onPress={this.goToLogin}
|
||||
style={styles.button}
|
||||
>
|
||||
{i18n.t("screens.login")}
|
||||
{i18n.t("screens.login.title")}
|
||||
</Button>;
|
||||
}
|
||||
|
||||
|
|
|
@ -258,7 +258,7 @@ class WebSectionList extends React.PureComponent<Props, State> {
|
|||
bottom: CustomTabBar.TAB_BAR_HEIGHT
|
||||
}}
|
||||
>
|
||||
{i18n.t("homeScreen.listUpdateFail")}
|
||||
{i18n.t("screens.home.listUpdateFail")}
|
||||
</Snackbar>
|
||||
</View>
|
||||
);
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
import i18n from 'i18n-js';
|
||||
import * as RNLocalize from "react-native-localize";
|
||||
|
||||
import en from '../../translations/en';
|
||||
import fr from '../../translations/fr';
|
||||
import en from '../../locales/en';
|
||||
import fr from '../../locales/fr.json';
|
||||
|
||||
/**
|
||||
* Static class used to manage locales
|
||||
|
|
|
@ -52,62 +52,62 @@ function MainStackComponent(props: { createTabNavigator: () => React.Node }) {
|
|||
component={props.createTabNavigator}
|
||||
options={{
|
||||
headerShown: false,
|
||||
title: i18n.t('screens.home'),
|
||||
title: i18n.t('screens.home.title'),
|
||||
}}
|
||||
/>
|
||||
<MainStack.Screen
|
||||
name="settings"
|
||||
component={SettingsScreen}
|
||||
options={{
|
||||
title: i18n.t('screens.settings'),
|
||||
title: i18n.t('screens.settings.title'),
|
||||
}}
|
||||
/>
|
||||
<MainStack.Screen
|
||||
name="about"
|
||||
component={AboutScreen}
|
||||
options={{
|
||||
title: i18n.t('screens.about'),
|
||||
title: i18n.t('screens.about.title'),
|
||||
}}
|
||||
/>
|
||||
<MainStack.Screen
|
||||
name="dependencies"
|
||||
component={AboutDependenciesScreen}
|
||||
options={{
|
||||
title: i18n.t('aboutScreen.libs')
|
||||
title: i18n.t('screens.about.libs')
|
||||
}}
|
||||
/>
|
||||
<MainStack.Screen
|
||||
name="debug"
|
||||
component={DebugScreen}
|
||||
options={{
|
||||
title: i18n.t('aboutScreen.debug')
|
||||
title: i18n.t('screens.about.debug')
|
||||
}}
|
||||
/>
|
||||
<MainStack.Screen
|
||||
name="tetris"
|
||||
component={TetrisScreen}
|
||||
options={{
|
||||
title: i18n.t("game.title"),
|
||||
title: i18n.t("screens.game.title"),
|
||||
}}
|
||||
/>
|
||||
<MainStack.Screen
|
||||
name="login"
|
||||
component={LoginScreen}
|
||||
options={{
|
||||
title: i18n.t('screens.login'),
|
||||
title: i18n.t('screens.login.title'),
|
||||
}}
|
||||
/>
|
||||
|
||||
{getWebsiteStack("website", MainStack, WebsiteScreen, "")}
|
||||
|
||||
|
||||
{createScreenCollapsibleStack("self-menu", MainStack, SelfMenuScreen, i18n.t('screens.menuSelf'))}
|
||||
{createScreenCollapsibleStack("proximo", MainStack, ProximoMainScreen, i18n.t('screens.proximo'))}
|
||||
{createScreenCollapsibleStack("self-menu", MainStack, SelfMenuScreen, i18n.t('screens.menu.title'))}
|
||||
{createScreenCollapsibleStack("proximo", MainStack, ProximoMainScreen, i18n.t('screens.proximo.title'))}
|
||||
{createScreenCollapsibleStack(
|
||||
"proximo-list",
|
||||
MainStack,
|
||||
ProximoListScreen,
|
||||
i18n.t('screens.proximoArticles'),
|
||||
i18n.t('screens.proximo.articleList'),
|
||||
true,
|
||||
{...screenTransition},
|
||||
)}
|
||||
|
@ -115,21 +115,21 @@ function MainStackComponent(props: { createTabNavigator: () => React.Node }) {
|
|||
name="proximo-about"
|
||||
component={ProximoAboutScreen}
|
||||
options={{
|
||||
title: i18n.t('screens.proximo'),
|
||||
title: i18n.t('screens.proximo.title'),
|
||||
...modalTransition,
|
||||
}}
|
||||
/>
|
||||
|
||||
{createScreenCollapsibleStack("profile", MainStack, ProfileScreen, i18n.t('screens.profile'))}
|
||||
{createScreenCollapsibleStack("club-list", MainStack, ClubListScreen, i18n.t('clubs.clubList'))}
|
||||
{createScreenCollapsibleStack("equipment-list", MainStack, EquipmentScreen, i18n.t('screens.equipmentList'))}
|
||||
{createScreenCollapsibleStack("equipment-rent", MainStack, EquipmentLendScreen, i18n.t('screens.equipmentLend'))}
|
||||
{createScreenCollapsibleStack("equipment-confirm", MainStack, EquipmentConfirmScreen, i18n.t('screens.equipmentConfirm'))}
|
||||
{createScreenCollapsibleStack("profile", MainStack, ProfileScreen, i18n.t('screens.profile.title'))}
|
||||
{createScreenCollapsibleStack("club-list", MainStack, ClubListScreen, i18n.t('screens.clubs.title'))}
|
||||
{createScreenCollapsibleStack("equipment-list", MainStack, EquipmentScreen, i18n.t('screens.equipment.title'))}
|
||||
{createScreenCollapsibleStack("equipment-rent", MainStack, EquipmentLendScreen, i18n.t('screens.equipment.book'))}
|
||||
{createScreenCollapsibleStack("equipment-confirm", MainStack, EquipmentConfirmScreen, i18n.t('screens.equipment.confirm'))}
|
||||
<MainStack.Screen
|
||||
name="club-information"
|
||||
component={ClubDisplayScreen}
|
||||
options={{
|
||||
title: i18n.t('screens.clubDisplayScreen'),
|
||||
title: i18n.t('screens.clubs.details'),
|
||||
...modalTransition,
|
||||
}}
|
||||
/>
|
||||
|
@ -137,7 +137,7 @@ function MainStackComponent(props: { createTabNavigator: () => React.Node }) {
|
|||
name="club-about"
|
||||
component={ClubAboutScreen}
|
||||
options={{
|
||||
title: i18n.t('screens.clubsAbout'),
|
||||
title: i18n.t('screens.clubs.title'),
|
||||
...modalTransition,
|
||||
}}
|
||||
/>
|
||||
|
@ -145,7 +145,7 @@ function MainStackComponent(props: { createTabNavigator: () => React.Node }) {
|
|||
name="vote"
|
||||
component={VoteScreen}
|
||||
options={{
|
||||
title: i18n.t('screens.vote'),
|
||||
title: i18n.t('screens.vote.title'),
|
||||
}}
|
||||
/>
|
||||
|
||||
|
@ -153,7 +153,7 @@ function MainStackComponent(props: { createTabNavigator: () => React.Node }) {
|
|||
name="feedback"
|
||||
component={BugReportScreen}
|
||||
options={{
|
||||
title: i18n.t('screens.feedback'),
|
||||
title: i18n.t('screens.feedback.title'),
|
||||
}}
|
||||
/>
|
||||
</MainStack.Navigator>
|
||||
|
|
|
@ -42,9 +42,9 @@ function ServicesStackComponent() {
|
|||
headerMode={"screen"}
|
||||
screenOptions={defaultScreenOptions}
|
||||
>
|
||||
{createScreenCollapsibleStack("index", ServicesStack, WebsitesHomeScreen, i18n.t('screens.services'))}
|
||||
{createScreenCollapsibleStack("index", ServicesStack, WebsitesHomeScreen, i18n.t('screens.services.title'))}
|
||||
{createScreenCollapsibleStack("services-section", ServicesStack, ServicesSectionScreen, "SECTION")}
|
||||
{createScreenCollapsibleStack("amicale-contact", ServicesStack, AmicaleContactScreen, i18n.t('screens.amicaleAbout'))}
|
||||
{createScreenCollapsibleStack("amicale-contact", ServicesStack, AmicaleContactScreen, i18n.t('screens.amicaleAbout.title'))}
|
||||
</ServicesStack.Navigator>
|
||||
);
|
||||
}
|
||||
|
@ -58,11 +58,11 @@ function ProxiwashStackComponent() {
|
|||
headerMode={"screen"}
|
||||
screenOptions={defaultScreenOptions}
|
||||
>
|
||||
{createScreenCollapsibleStack("index", ProxiwashStack, ProxiwashScreen, i18n.t('screens.proxiwash'))}
|
||||
{createScreenCollapsibleStack("index", ProxiwashStack, ProxiwashScreen, i18n.t('screens.proxiwash.title'))}
|
||||
<ProxiwashStack.Screen
|
||||
name="proxiwash-about"
|
||||
component={ProxiwashAboutScreen}
|
||||
options={{title: i18n.t('screens.proxiwash'),}}
|
||||
options={{title: i18n.t('screens.proxiwash.title'),}}
|
||||
/>
|
||||
</ProxiwashStack.Navigator>
|
||||
);
|
||||
|
@ -80,12 +80,12 @@ function PlanningStackComponent() {
|
|||
<PlanningStack.Screen
|
||||
name="index"
|
||||
component={PlanningScreen}
|
||||
options={{title: i18n.t('screens.planning'),}}
|
||||
options={{title: i18n.t('screens.planning.title'),}}
|
||||
/>
|
||||
<PlanningStack.Screen
|
||||
name="planning-information"
|
||||
component={PlanningDisplayScreen}
|
||||
options={{title: i18n.t('screens.planningDisplayScreen'),}}
|
||||
options={{title: i18n.t('screens.planning.eventDetails'),}}
|
||||
/>
|
||||
</PlanningStack.Navigator>
|
||||
);
|
||||
|
@ -109,7 +109,7 @@ function HomeStackComponent(initialRoute: string | null, defaultData: { [key: st
|
|||
name="index"
|
||||
component={HomeScreen}
|
||||
options={{
|
||||
title: i18n.t('screens.home'),
|
||||
title: i18n.t('screens.home.title'),
|
||||
headerStyle: {
|
||||
backgroundColor: colors.surface,
|
||||
},
|
||||
|
@ -124,22 +124,22 @@ function HomeStackComponent(initialRoute: string | null, defaultData: { [key: st
|
|||
<HomeStack.Screen
|
||||
name="scanner"
|
||||
component={ScannerScreen}
|
||||
options={{title: i18n.t('screens.scanner'),}}
|
||||
options={{title: i18n.t('screens.scanner.title'),}}
|
||||
/>
|
||||
<HomeStack.Screen
|
||||
name="club-information"
|
||||
component={ClubDisplayScreen}
|
||||
options={{title: i18n.t('screens.clubDisplayScreen'),}}
|
||||
options={{title: i18n.t('screens.clubs.details'),}}
|
||||
/>
|
||||
<HomeStack.Screen
|
||||
name="feed-information"
|
||||
component={FeedItemScreen}
|
||||
options={{title: i18n.t('screens.feedDisplayScreen'),}}
|
||||
options={{title: i18n.t('screens.home.feed'),}}
|
||||
/>
|
||||
<HomeStack.Screen
|
||||
name="planning-information"
|
||||
component={PlanningDisplayScreen}
|
||||
options={{title: i18n.t('screens.planningDisplayScreen'),}}
|
||||
options={{title: i18n.t('screens.planning.eventDetails'),}}
|
||||
/>
|
||||
</HomeStack.Navigator>
|
||||
);
|
||||
|
@ -154,7 +154,7 @@ function PlanexStackComponent() {
|
|||
headerMode={"screen"}
|
||||
screenOptions={defaultScreenOptions}
|
||||
>
|
||||
{getWebsiteStack("index", PlanexStack, PlanexScreen, "Planex")}
|
||||
{getWebsiteStack("index", PlanexStack, PlanexScreen, i18n.t("screens.planex.title"))}
|
||||
{createScreenCollapsibleStack("group-select", PlanexStack, GroupSelectionScreen, "GROUP SELECT")}
|
||||
</PlanexStack.Navigator>
|
||||
);
|
||||
|
@ -191,28 +191,28 @@ export default class TabNavigator extends React.Component<Props> {
|
|||
name="services"
|
||||
option
|
||||
component={ServicesStackComponent}
|
||||
options={{title: i18n.t('screens.services')}}
|
||||
options={{title: i18n.t('screens.services.title')}}
|
||||
/>
|
||||
<Tab.Screen
|
||||
name="proxiwash"
|
||||
component={ProxiwashStackComponent}
|
||||
options={{title: i18n.t('screens.proxiwash')}}
|
||||
options={{title: i18n.t('screens.proxiwash.title')}}
|
||||
/>
|
||||
<Tab.Screen
|
||||
name="home"
|
||||
component={this.createHomeStackComponent}
|
||||
options={{title: i18n.t('screens.home')}}
|
||||
options={{title: i18n.t('screens.home.title')}}
|
||||
/>
|
||||
<Tab.Screen
|
||||
name="planning"
|
||||
component={PlanningStackComponent}
|
||||
options={{title: i18n.t('screens.planning')}}
|
||||
options={{title: i18n.t('screens.planning.title')}}
|
||||
/>
|
||||
|
||||
<Tab.Screen
|
||||
name="planex"
|
||||
component={PlanexStackComponent}
|
||||
options={{title: "Planex"}}
|
||||
options={{title: i18n.t("screens.planex.title")}}
|
||||
/>
|
||||
</Tab.Navigator>
|
||||
);
|
||||
|
|
|
@ -60,13 +60,13 @@ class AboutScreen extends React.Component<Props> {
|
|||
{
|
||||
onPressCallback: () => openWebLink(Platform.OS === "ios" ? links.appstore : links.playstore),
|
||||
icon: Platform.OS === "ios" ? 'apple' : 'google-play',
|
||||
text: Platform.OS === "ios" ? i18n.t('aboutScreen.appstore') : i18n.t('aboutScreen.playstore'),
|
||||
text: Platform.OS === "ios" ? i18n.t('screens.about.appstore') : i18n.t('screens.about.playstore'),
|
||||
showChevron: true
|
||||
},
|
||||
{
|
||||
onPressCallback: () => this.props.navigation.navigate("feedback"),
|
||||
icon: 'bug',
|
||||
text: i18n.t("feedbackScreen.homeButtonTitle"),
|
||||
text: i18n.t("screens.feedback.homeButtonTitle"),
|
||||
showChevron: true
|
||||
},
|
||||
{
|
||||
|
@ -78,13 +78,13 @@ class AboutScreen extends React.Component<Props> {
|
|||
{
|
||||
onPressCallback: () => openWebLink(links.changelog),
|
||||
icon: 'refresh',
|
||||
text: i18n.t('aboutScreen.changelog'),
|
||||
text: i18n.t('screens.about.changelog'),
|
||||
showChevron: true
|
||||
},
|
||||
{
|
||||
onPressCallback: () => openWebLink(links.license),
|
||||
icon: 'file-document',
|
||||
text: i18n.t('aboutScreen.license'),
|
||||
text: i18n.t('screens.about.license'),
|
||||
showChevron: true
|
||||
},
|
||||
];
|
||||
|
@ -101,7 +101,7 @@ class AboutScreen extends React.Component<Props> {
|
|||
{
|
||||
onPressCallback: () => openWebLink(links.authorMail),
|
||||
icon: 'email',
|
||||
text: i18n.t('aboutScreen.authorMail'),
|
||||
text: i18n.t('screens.about.authorMail'),
|
||||
showChevron: true
|
||||
},
|
||||
{
|
||||
|
@ -124,7 +124,7 @@ class AboutScreen extends React.Component<Props> {
|
|||
{
|
||||
onPressCallback: () => openWebLink(links.yohanMail),
|
||||
icon: 'email',
|
||||
text: i18n.t('aboutScreen.authorMail'),
|
||||
text: i18n.t('screens.about.authorMail'),
|
||||
showChevron: true
|
||||
},
|
||||
{
|
||||
|
@ -141,13 +141,13 @@ class AboutScreen extends React.Component<Props> {
|
|||
{
|
||||
onPressCallback: () => openWebLink(links.react),
|
||||
icon: 'react',
|
||||
text: i18n.t('aboutScreen.reactNative'),
|
||||
text: i18n.t('screens.about.reactNative'),
|
||||
showChevron: true
|
||||
},
|
||||
{
|
||||
onPressCallback: () => this.props.navigation.navigate('dependencies'),
|
||||
icon: 'developer-board',
|
||||
text: i18n.t('aboutScreen.libs'),
|
||||
text: i18n.t('screens.about.libs'),
|
||||
showChevron: true
|
||||
},
|
||||
];
|
||||
|
@ -224,17 +224,17 @@ class AboutScreen extends React.Component<Props> {
|
|||
return (
|
||||
<Card style={{marginBottom: 10}}>
|
||||
<Card.Title
|
||||
title={i18n.t('aboutScreen.team')}
|
||||
title={i18n.t('screens.about.team')}
|
||||
left={(props) => <Avatar.Icon {...props} icon={'account-multiple'}/>}/>
|
||||
<Card.Content>
|
||||
<Title>{i18n.t('aboutScreen.author')}</Title>
|
||||
<Title>{i18n.t('screens.about.author')}</Title>
|
||||
<FlatList
|
||||
data={this.authorData}
|
||||
keyExtractor={this.keyExtractor}
|
||||
listKey={"1"}
|
||||
renderItem={this.getCardItem}
|
||||
/>
|
||||
<Title>{i18n.t('aboutScreen.additionalDev')}</Title>
|
||||
<Title>{i18n.t('screens.about.additionalDev')}</Title>
|
||||
<FlatList
|
||||
data={this.additionalDevData}
|
||||
keyExtractor={this.keyExtractor}
|
||||
|
@ -255,7 +255,7 @@ class AboutScreen extends React.Component<Props> {
|
|||
return (
|
||||
<Card style={{marginBottom: 10}}>
|
||||
<Card.Content>
|
||||
<Title>{i18n.t('aboutScreen.technologies')}</Title>
|
||||
<Title>{i18n.t('screens.about.technologies')}</Title>
|
||||
<FlatList
|
||||
data={this.technoData}
|
||||
keyExtractor={this.keyExtractor}
|
||||
|
|
|
@ -26,47 +26,47 @@ class AmicaleContactScreen extends React.Component<Props> {
|
|||
// Dataset containing information about contacts
|
||||
CONTACT_DATASET = [
|
||||
{
|
||||
name: i18n.t("amicaleAbout.roles.interSchools"),
|
||||
name: i18n.t("screens.amicaleAbout.roles.interSchools"),
|
||||
email: "inter.ecoles@amicale-insat.fr",
|
||||
icon: "share-variant"
|
||||
},
|
||||
{
|
||||
name: i18n.t("amicaleAbout.roles.culture"),
|
||||
name: i18n.t("screens.amicaleAbout.roles.culture"),
|
||||
email: "culture@amicale-insat.fr",
|
||||
icon: "book"
|
||||
},
|
||||
{
|
||||
name: i18n.t("amicaleAbout.roles.animation"),
|
||||
name: i18n.t("screens.amicaleAbout.roles.animation"),
|
||||
email: "animation@amicale-insat.fr",
|
||||
icon: "emoticon"
|
||||
},
|
||||
{
|
||||
name: i18n.t("amicaleAbout.roles.clubs"),
|
||||
name: i18n.t("screens.amicaleAbout.roles.clubs"),
|
||||
email: "clubs@amicale-insat.fr",
|
||||
icon: "account-group"
|
||||
},
|
||||
{
|
||||
name: i18n.t("amicaleAbout.roles.event"),
|
||||
name: i18n.t("screens.amicaleAbout.roles.event"),
|
||||
email: "evenements@amicale-insat.fr",
|
||||
icon: "calendar-range"
|
||||
},
|
||||
{
|
||||
name: i18n.t("amicaleAbout.roles.tech"),
|
||||
name: i18n.t("screens.amicaleAbout.roles.tech"),
|
||||
email: "technique@amicale-insat.fr",
|
||||
icon: "settings"
|
||||
},
|
||||
{
|
||||
name: i18n.t("amicaleAbout.roles.communication"),
|
||||
name: i18n.t("screens.amicaleAbout.roles.communication"),
|
||||
email: "amicale@amicale-insat.fr",
|
||||
icon: "comment-account"
|
||||
},
|
||||
{
|
||||
name: i18n.t("amicaleAbout.roles.intraSchools"),
|
||||
name: i18n.t("screens.amicaleAbout.roles.intraSchools"),
|
||||
email: "intra.ecoles@amicale-insat.fr",
|
||||
icon: "school"
|
||||
},
|
||||
{
|
||||
name: i18n.t("amicaleAbout.roles.publicRelations"),
|
||||
name: i18n.t("screens.amicaleAbout.roles.publicRelations"),
|
||||
email: "rp@amicale-insat.fr",
|
||||
icon: "account-tie"
|
||||
},
|
||||
|
@ -105,12 +105,12 @@ class AmicaleContactScreen extends React.Component<Props> {
|
|||
</View>
|
||||
<Card style={{margin: 5}}>
|
||||
<Card.Title
|
||||
title={i18n.t("amicaleAbout.title")}
|
||||
subtitle={i18n.t("amicaleAbout.subtitle")}
|
||||
title={i18n.t("screens.amicaleAbout.title")}
|
||||
subtitle={i18n.t("screens.amicaleAbout.subtitle")}
|
||||
left={props => <List.Icon {...props} icon={'information'}/>}
|
||||
/>
|
||||
<Card.Content>
|
||||
<Text>{i18n.t("amicaleAbout.message")}</Text>
|
||||
<Text>{i18n.t("screens.amicaleAbout.message")}</Text>
|
||||
{/*$FlowFixMe*/}
|
||||
<FlatList
|
||||
data={this.CONTACT_DATASET}
|
||||
|
|
|
@ -28,15 +28,15 @@ class ClubAboutScreen extends React.Component<Props> {
|
|||
style={{flex: 1, resizeMode: "contain"}}
|
||||
resizeMode="contain"/>
|
||||
</View>
|
||||
<Text>{i18n.t("clubs.about.text")}</Text>
|
||||
<Text>{i18n.t("screens.clubs.about.text")}</Text>
|
||||
<Card style={{margin: 5}}>
|
||||
<Card.Title
|
||||
title={i18n.t("clubs.about.title")}
|
||||
subtitle={i18n.t("clubs.about.subtitle")}
|
||||
title={i18n.t("screens.clubs.about.title")}
|
||||
subtitle={i18n.t("screens.clubs.about.subtitle")}
|
||||
left={props => <List.Icon {...props} icon={'information'}/>}
|
||||
/>
|
||||
<Card.Content>
|
||||
<Text>{i18n.t("clubs.about.message")}</Text>
|
||||
<Text>{i18n.t("screens.clubs.about.message")}</Text>
|
||||
<Autolink
|
||||
text={CONTACT_LINK}
|
||||
component={Text}
|
||||
|
|
|
@ -123,8 +123,8 @@ class ClubDisplayScreen extends React.Component<Props, State> {
|
|||
return (
|
||||
<Card style={{marginTop: 10, marginBottom: CustomTabBar.TAB_BAR_HEIGHT + 20}}>
|
||||
<Card.Title
|
||||
title={i18n.t('clubs.managers')}
|
||||
subtitle={hasManagers ? i18n.t('clubs.managersSubtitle') : i18n.t('clubs.managersUnavailable')}
|
||||
title={i18n.t('screens.clubs.managers')}
|
||||
subtitle={hasManagers ? i18n.t('screens.clubs.managersSubtitle') : i18n.t('screens.clubs.managersUnavailable')}
|
||||
left={(props) => <Avatar.Icon
|
||||
{...props}
|
||||
style={{backgroundColor: 'transparent'}}
|
||||
|
@ -151,8 +151,8 @@ class ClubDisplayScreen extends React.Component<Props, State> {
|
|||
? email
|
||||
: AMICALE_MAIL;
|
||||
const text = email != null && hasManagers
|
||||
? i18n.t("clubs.clubContact")
|
||||
: i18n.t("clubs.amicaleContact");
|
||||
? i18n.t("screens.clubs.clubContact")
|
||||
: i18n.t("screens.clubs.amicaleContact");
|
||||
return (
|
||||
<Card.Actions>
|
||||
<Button
|
||||
|
@ -235,7 +235,7 @@ class ClubDisplayScreen extends React.Component<Props, State> {
|
|||
errorViewOverride={[
|
||||
{
|
||||
errorCode: ERROR_TYPE.BAD_INPUT,
|
||||
message: i18n.t("clubs.invalidClub"),
|
||||
message: i18n.t("screens.clubs.invalidClub"),
|
||||
icon: "account-question",
|
||||
showRetryButton: false
|
||||
}
|
||||
|
|
|
@ -73,7 +73,7 @@ class ClubListScreen extends React.Component<Props, State> {
|
|||
getSearchBar = () => {
|
||||
return (
|
||||
<Searchbar
|
||||
placeholder={i18n.t('proximoScreen.search')}
|
||||
placeholder={i18n.t('screens.proximo.search')}
|
||||
onChangeText={this.onSearchStringChange}
|
||||
/>
|
||||
);
|
||||
|
|
|
@ -76,7 +76,7 @@ class EquipmentConfirmScreen extends React.Component<Props> {
|
|||
lineHeight: 35,
|
||||
marginLeft: 10,
|
||||
}}>
|
||||
({i18n.t('equipmentScreen.bail', {cost: item.caution})})
|
||||
({i18n.t('screens.equipment.bail', {cost: item.caution})})
|
||||
</Caption>
|
||||
</View>
|
||||
</View>
|
||||
|
@ -87,19 +87,19 @@ class EquipmentConfirmScreen extends React.Component<Props> {
|
|||
>
|
||||
{
|
||||
start == null
|
||||
? i18n.t('equipmentScreen.booking')
|
||||
? i18n.t('screens.equipment.booking')
|
||||
: end != null && start.getTime() !== end.getTime()
|
||||
? i18n.t('equipmentScreen.bookingPeriod', {
|
||||
? i18n.t('screens.equipment.bookingPeriod', {
|
||||
begin: getRelativeDateString(start),
|
||||
end: getRelativeDateString(end)
|
||||
})
|
||||
: i18n.t('equipmentScreen.bookingDay', {
|
||||
: i18n.t('screens.equipment.bookingDay', {
|
||||
date: getRelativeDateString(start)
|
||||
})
|
||||
}
|
||||
</Button>
|
||||
<Paragraph style={{textAlign: "center"}}>
|
||||
{i18n.t("equipmentScreen.bookingConfirmedMessage")}
|
||||
{i18n.t("screens.equipment.bookingConfirmedMessage")}
|
||||
</Paragraph>
|
||||
</Card.Content>
|
||||
</Card>
|
||||
|
|
|
@ -86,7 +86,7 @@ class EquipmentListScreen extends React.Component<Props> {
|
|||
getListHeader() {
|
||||
return <Card style={{margin: 5}}>
|
||||
<Card.Title
|
||||
title={i18n.t('equipmentScreen.title')}
|
||||
title={i18n.t('screens.equipment.title')}
|
||||
left={(props) => <Avatar.Image
|
||||
{...props}
|
||||
source={ICON_AMICALE}
|
||||
|
@ -95,7 +95,7 @@ class EquipmentListScreen extends React.Component<Props> {
|
|||
/>
|
||||
<Card.Content>
|
||||
<Paragraph>
|
||||
{i18n.t('equipmentScreen.message')}
|
||||
{i18n.t('screens.equipment.message')}
|
||||
</Paragraph>
|
||||
</Card.Content>
|
||||
</Card>;
|
||||
|
|
|
@ -305,7 +305,7 @@ class EquipmentRentScreen extends React.Component<Props, State> {
|
|||
lineHeight: 35,
|
||||
marginLeft: 10,
|
||||
}}>
|
||||
({i18n.t('equipmentScreen.bail', {cost: item.caution})})
|
||||
({i18n.t('screens.equipment.bail', {cost: item.caution})})
|
||||
</Caption>
|
||||
</View>
|
||||
</View>
|
||||
|
@ -315,7 +315,7 @@ class EquipmentRentScreen extends React.Component<Props, State> {
|
|||
color={isAvailable ? this.props.theme.colors.success : this.props.theme.colors.primary}
|
||||
mode="text"
|
||||
>
|
||||
{i18n.t('equipmentScreen.available', {date: getRelativeDateString(firstAvailability)})}
|
||||
{i18n.t('screens.equipment.available', {date: getRelativeDateString(firstAvailability)})}
|
||||
</Button>
|
||||
<Subheading style={{
|
||||
textAlign: "center",
|
||||
|
@ -324,13 +324,13 @@ class EquipmentRentScreen extends React.Component<Props, State> {
|
|||
}}>
|
||||
{
|
||||
start == null
|
||||
? i18n.t('equipmentScreen.booking')
|
||||
? i18n.t('screens.equipment.booking')
|
||||
: end != null && start.getTime() !== end.getTime()
|
||||
? i18n.t('equipmentScreen.bookingPeriod', {
|
||||
? i18n.t('screens.equipment.bookingPeriod', {
|
||||
begin: getRelativeDateString(start),
|
||||
end: getRelativeDateString(end)
|
||||
})
|
||||
: i18n.t('equipmentScreen.bookingDay', {
|
||||
: i18n.t('screens.equipment.bookingDay', {
|
||||
date: getRelativeDateString(start)
|
||||
})
|
||||
}
|
||||
|
@ -401,9 +401,9 @@ class EquipmentRentScreen extends React.Component<Props, State> {
|
|||
visible={this.state.dialogVisible}
|
||||
onDismiss={this.onDialogDismiss}
|
||||
onAccept={this.onDialogAccept}
|
||||
title={i18n.t('equipmentScreen.dialogTitle')}
|
||||
titleLoading={i18n.t('equipmentScreen.dialogTitleLoading')}
|
||||
message={i18n.t('equipmentScreen.dialogMessage')}
|
||||
title={i18n.t('screens.equipment.dialogTitle')}
|
||||
titleLoading={i18n.t('screens.equipment.dialogTitleLoading')}
|
||||
message={i18n.t('screens.equipment.dialogMessage')}
|
||||
/>
|
||||
|
||||
<ErrorDialog
|
||||
|
@ -436,7 +436,7 @@ class EquipmentRentScreen extends React.Component<Props, State> {
|
|||
borderRadius: 10
|
||||
}}
|
||||
>
|
||||
{i18n.t('equipmentScreen.bookButton')}
|
||||
{i18n.t('screens.equipment.bookButton')}
|
||||
</Button>
|
||||
</Animatable.View>
|
||||
|
||||
|
|
|
@ -111,7 +111,7 @@ class LoginScreen extends React.Component<Props, State> {
|
|||
/**
|
||||
* Navigates to the Amicale website screen with the reset password link as navigation parameters
|
||||
*/
|
||||
onResetPasswordClick = () => this.props.navigation.navigate("website", {host: AvailableWebsites.websites.AMICALE, path: RESET_PASSWORD_PATH, title: i18n.t('screens.amicaleWebsite')});
|
||||
onResetPasswordClick = () => this.props.navigation.navigate("website", {host: AvailableWebsites.websites.AMICALE, path: RESET_PASSWORD_PATH, title: i18n.t('screens.websites.amicale')});
|
||||
|
||||
/**
|
||||
* The user has unfocused the input, his email is ready to be validated
|
||||
|
@ -229,7 +229,7 @@ class LoginScreen extends React.Component<Props, State> {
|
|||
return (
|
||||
<View>
|
||||
<TextInput
|
||||
label={i18n.t("loginScreen.email")}
|
||||
label={i18n.t("screens.login.email")}
|
||||
mode='outlined'
|
||||
value={this.state.email}
|
||||
onChangeText={this.onEmailChange}
|
||||
|
@ -248,11 +248,11 @@ class LoginScreen extends React.Component<Props, State> {
|
|||
type="error"
|
||||
visible={this.shouldShowEmailError()}
|
||||
>
|
||||
{i18n.t("loginScreen.emailError")}
|
||||
{i18n.t("screens.login.emailError")}
|
||||
</HelperText>
|
||||
<TextInput
|
||||
ref={this.passwordInputRef}
|
||||
label={i18n.t("loginScreen.password")}
|
||||
label={i18n.t("screens.login.password")}
|
||||
mode='outlined'
|
||||
value={this.state.password}
|
||||
onChangeText={this.onPasswordChange}
|
||||
|
@ -271,7 +271,7 @@ class LoginScreen extends React.Component<Props, State> {
|
|||
type="error"
|
||||
visible={this.shouldShowPasswordError()}
|
||||
>
|
||||
{i18n.t("loginScreen.passwordError")}
|
||||
{i18n.t("screens.login.passwordError")}
|
||||
</HelperText>
|
||||
</View>
|
||||
);
|
||||
|
@ -285,8 +285,8 @@ class LoginScreen extends React.Component<Props, State> {
|
|||
return (
|
||||
<Card style={styles.card}>
|
||||
<Card.Title
|
||||
title={i18n.t("loginScreen.title")}
|
||||
subtitle={i18n.t("loginScreen.subtitle")}
|
||||
title={i18n.t("screens.login.title")}
|
||||
subtitle={i18n.t("screens.login.subtitle")}
|
||||
left={(props) => <Avatar.Image
|
||||
{...props}
|
||||
source={ICON_AMICALE}
|
||||
|
@ -302,7 +302,7 @@ class LoginScreen extends React.Component<Props, State> {
|
|||
loading={this.state.loading}
|
||||
onPress={this.onSubmit}
|
||||
style={{marginLeft: 'auto'}}>
|
||||
{i18n.t("loginScreen.login")}
|
||||
{i18n.t("screens.login.title")}
|
||||
</Button>
|
||||
</Card.Actions>
|
||||
<Card.Actions>
|
||||
|
@ -311,7 +311,7 @@ class LoginScreen extends React.Component<Props, State> {
|
|||
mode="contained"
|
||||
onPress={this.onResetPasswordClick}
|
||||
style={{marginLeft: 'auto'}}>
|
||||
{i18n.t("loginScreen.resetPassword")}
|
||||
{i18n.t("screens.login.resetPassword")}
|
||||
</Button>
|
||||
</Card.Actions>
|
||||
</Card.Content>
|
||||
|
@ -328,8 +328,8 @@ class LoginScreen extends React.Component<Props, State> {
|
|||
return (
|
||||
<Card style={styles.card}>
|
||||
<Card.Title
|
||||
title={i18n.t("loginScreen.whyAccountTitle")}
|
||||
subtitle={i18n.t("loginScreen.whyAccountSub")}
|
||||
title={i18n.t("screens.login.whyAccountTitle")}
|
||||
subtitle={i18n.t("screens.login.whyAccountSub")}
|
||||
left={(props) => <Avatar.Icon
|
||||
{...props}
|
||||
icon={"help"}
|
||||
|
@ -337,9 +337,9 @@ class LoginScreen extends React.Component<Props, State> {
|
|||
style={{backgroundColor: 'transparent'}}/>}
|
||||
/>
|
||||
<Card.Content>
|
||||
<Paragraph>{i18n.t("loginScreen.whyAccountParagraph")}</Paragraph>
|
||||
<Paragraph>{i18n.t("loginScreen.whyAccountParagraph2")}</Paragraph>
|
||||
<Paragraph>{i18n.t("loginScreen.noAccount")}</Paragraph>
|
||||
<Paragraph>{i18n.t("screens.login.whyAccountParagraph")}</Paragraph>
|
||||
<Paragraph>{i18n.t("screens.login.whyAccountParagraph2")}</Paragraph>
|
||||
<Paragraph>{i18n.t("screens.login.noAccount")}</Paragraph>
|
||||
</Card.Content>
|
||||
</Card>
|
||||
);
|
||||
|
|
|
@ -69,22 +69,22 @@ class ProfileScreen extends React.Component<Props, State> {
|
|||
]
|
||||
this.amicaleDataset = [
|
||||
{
|
||||
title: i18n.t('screens.clubsAbout'),
|
||||
subtitle: i18n.t('servicesScreen.descriptions.clubs'),
|
||||
title: i18n.t('screens.clubs.title'),
|
||||
subtitle: i18n.t('screens.services.descriptions.clubs'),
|
||||
image: CLUBS_IMAGE,
|
||||
onPress: () => this.props.navigation.navigate("club-list"),
|
||||
},
|
||||
{
|
||||
title: i18n.t('screens.vote'),
|
||||
subtitle: i18n.t('servicesScreen.descriptions.vote'),
|
||||
title: i18n.t('screens.vote.title'),
|
||||
subtitle: i18n.t('screens.services.descriptions.vote'),
|
||||
image: VOTE_IMAGE,
|
||||
onPress: () => this.props.navigation.navigate("vote"),
|
||||
},
|
||||
{
|
||||
title: i18n.t('screens.amicaleWebsite'),
|
||||
subtitle: i18n.t('servicesScreen.descriptions.amicaleWebsite'),
|
||||
title: i18n.t('screens.websites.amicale'),
|
||||
subtitle: i18n.t('screens.services.descriptions.amicaleWebsite'),
|
||||
image: ICON_AMICALE,
|
||||
onPress: () => this.props.navigation.navigate("website", {host: AvailableWebsites.websites.AMICALE, title: i18n.t('screens.amicaleWebsite')}),
|
||||
onPress: () => this.props.navigation.navigate("website", {host: AvailableWebsites.websites.AMICALE, title: i18n.t('screens.websites.amicale')}),
|
||||
},
|
||||
];
|
||||
}
|
||||
|
@ -178,7 +178,7 @@ class ProfileScreen extends React.Component<Props, State> {
|
|||
return (
|
||||
<Card style={styles.card}>
|
||||
<Card.Title
|
||||
title={i18n.t("profileScreen.welcomeTitle", {name: this.data.first_name})}
|
||||
title={i18n.t("screens.profile.welcomeTitle", {name: this.data.first_name})}
|
||||
left={() => <Avatar.Image
|
||||
size={64}
|
||||
source={ICON_AMICALE}
|
||||
|
@ -189,11 +189,11 @@ class ProfileScreen extends React.Component<Props, State> {
|
|||
<Card.Content>
|
||||
<Divider/>
|
||||
<Paragraph>
|
||||
{i18n.t("profileScreen.welcomeDescription")}
|
||||
{i18n.t("screens.profile.welcomeDescription")}
|
||||
</Paragraph>
|
||||
{this.getServicesList()}
|
||||
<Paragraph>
|
||||
{i18n.t("profileScreen.welcomeFeedback")}
|
||||
{i18n.t("screens.profile.welcomeFeedback")}
|
||||
</Paragraph>
|
||||
<Divider/>
|
||||
<Card.Actions>
|
||||
|
@ -202,7 +202,7 @@ class ProfileScreen extends React.Component<Props, State> {
|
|||
mode="contained"
|
||||
onPress={() => this.props.navigation.navigate('feedback')}
|
||||
style={styles.editButton}>
|
||||
{i18n.t("feedbackScreen.homeButtonTitle")}
|
||||
{i18n.t("screens.feedback.homeButtonTitle")}
|
||||
</Button>
|
||||
</Card.Actions>
|
||||
</Card.Content>
|
||||
|
@ -230,7 +230,7 @@ class ProfileScreen extends React.Component<Props, State> {
|
|||
getFieldValue(field: ?string) {
|
||||
return this.isFieldAvailable(field)
|
||||
? field
|
||||
: i18n.t("profileScreen.noData");
|
||||
: i18n.t("screens.profile.noData");
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -277,7 +277,7 @@ class ProfileScreen extends React.Component<Props, State> {
|
|||
<Card.Content>
|
||||
<Divider/>
|
||||
<List.Section>
|
||||
<List.Subheader>{i18n.t("profileScreen.personalInformation")}</List.Subheader>
|
||||
<List.Subheader>{i18n.t("screens.profile.personalInformation")}</List.Subheader>
|
||||
{this.getPersonalListItem(this.data.birthday, "cake-variant")}
|
||||
{this.getPersonalListItem(this.data.phone, "phone")}
|
||||
{this.getPersonalListItem(this.data.email, "email")}
|
||||
|
@ -288,9 +288,9 @@ class ProfileScreen extends React.Component<Props, State> {
|
|||
<Button
|
||||
icon="account-edit"
|
||||
mode="contained"
|
||||
onPress={() => this.props.navigation.navigate("website", {host: AvailableWebsites.websites.AMICALE, path: this.data.link, title: i18n.t('screens.amicaleWebsite')})}
|
||||
onPress={() => this.props.navigation.navigate("website", {host: AvailableWebsites.websites.AMICALE, path: this.data.link, title: i18n.t('screens.websites.amicale')})}
|
||||
style={styles.editButton}>
|
||||
{i18n.t("profileScreen.editInformation")}
|
||||
{i18n.t("screens.profile.editInformation")}
|
||||
</Button>
|
||||
</Card.Actions>
|
||||
</Card.Content>
|
||||
|
@ -307,8 +307,8 @@ class ProfileScreen extends React.Component<Props, State> {
|
|||
return (
|
||||
<Card style={styles.card}>
|
||||
<Card.Title
|
||||
title={i18n.t("profileScreen.clubs")}
|
||||
subtitle={i18n.t("profileScreen.clubsSubtitle")}
|
||||
title={i18n.t("screens.profile.clubs")}
|
||||
subtitle={i18n.t("screens.profile.clubsSubtitle")}
|
||||
left={(props) => <Avatar.Icon
|
||||
{...props}
|
||||
icon="account-group"
|
||||
|
@ -333,8 +333,8 @@ class ProfileScreen extends React.Component<Props, State> {
|
|||
return (
|
||||
<Card style={styles.card}>
|
||||
<Card.Title
|
||||
title={i18n.t("profileScreen.membership")}
|
||||
subtitle={i18n.t("profileScreen.membershipSubtitle")}
|
||||
title={i18n.t("screens.profile.membership")}
|
||||
subtitle={i18n.t("screens.profile.membershipSubtitle")}
|
||||
left={(props) => <Avatar.Icon
|
||||
{...props}
|
||||
icon="credit-card"
|
||||
|
@ -359,7 +359,7 @@ class ProfileScreen extends React.Component<Props, State> {
|
|||
getMembershipItem(state: boolean) {
|
||||
return (
|
||||
<List.Item
|
||||
title={state ? i18n.t("profileScreen.membershipPayed") : i18n.t("profileScreen.membershipNotPayed")}
|
||||
title={state ? i18n.t("screens.profile.membershipPayed") : i18n.t("screens.profile.membershipNotPayed")}
|
||||
left={props => <List.Icon
|
||||
{...props}
|
||||
color={state ? this.props.theme.colors.success : this.props.theme.colors.danger}
|
||||
|
@ -385,10 +385,10 @@ class ProfileScreen extends React.Component<Props, State> {
|
|||
*/
|
||||
clubListItem = ({item}: { item: Club }) => {
|
||||
const onPress = () => this.openClubDetailsScreen(item.id);
|
||||
let description = i18n.t("profileScreen.isMember");
|
||||
let description = i18n.t("screens.profile.isMember");
|
||||
let icon = (props) => <List.Icon {...props} icon="chevron-right"/>;
|
||||
if (item.is_manager) {
|
||||
description = i18n.t("profileScreen.isManager");
|
||||
description = i18n.t("screens.profile.isManager");
|
||||
icon = (props) => <List.Icon {...props} icon="star" color={this.props.theme.colors.primary}/>;
|
||||
}
|
||||
return <List.Item
|
||||
|
|
|
@ -191,7 +191,7 @@ class HomeScreen extends React.Component<Props, State> {
|
|||
const onPressSettings = () => this.props.navigation.navigate("settings");
|
||||
return <MaterialHeaderButtons>
|
||||
<Item title="log" iconName={logIcon} color={logColor} onPress={onPressLog}/>
|
||||
<Item title={i18n.t("screens.settings")} iconName={"settings"} onPress={onPressSettings}/>
|
||||
<Item title={i18n.t("screens.settings.title")} iconName={"settings"} onPress={onPressSettings}/>
|
||||
</MaterialHeaderButtons>;
|
||||
};
|
||||
|
||||
|
@ -246,7 +246,7 @@ class HomeScreen extends React.Component<Props, State> {
|
|||
id: SECTIONS_ID[0]
|
||||
},
|
||||
{
|
||||
title: i18n.t('homeScreen.newsFeed'),
|
||||
title: '',
|
||||
data: this.currentNewFeed,
|
||||
id: SECTIONS_ID[1]
|
||||
}
|
||||
|
@ -602,17 +602,17 @@ class HomeScreen extends React.Component<Props, State> {
|
|||
</View>
|
||||
<MascotPopup
|
||||
visible={this.state.mascotDialogVisible}
|
||||
title={i18n.t("homeScreen.loginBanner.title")}
|
||||
message={i18n.t("homeScreen.loginBanner.message")}
|
||||
title={i18n.t("screens.home.mascotDialog.title")}
|
||||
message={i18n.t("screens.home.mascotDialog.message")}
|
||||
icon={"check"}
|
||||
buttons={{
|
||||
action: {
|
||||
message: i18n.t("homeScreen.loginBanner.login"),
|
||||
message: i18n.t("screens.home.mascotDialog.login"),
|
||||
icon: "login",
|
||||
onPress: this.onLogin,
|
||||
},
|
||||
cancel: {
|
||||
message: i18n.t("homeScreen.loginBanner.later"),
|
||||
message: i18n.t("screens.home.mascotDialog.later"),
|
||||
icon: "close",
|
||||
color: this.props.theme.colors.warning,
|
||||
onPress: this.hideMascotDialog,
|
||||
|
|
|
@ -80,7 +80,7 @@ class ScannerScreen extends React.Component<Props, State> {
|
|||
*/
|
||||
getPermissionScreen() {
|
||||
return <View style={{marginLeft: 10, marginRight: 10}}>
|
||||
<Text>{i18n.t("scannerScreen.errorPermission")}</Text>
|
||||
<Text>{i18n.t("screens.scanner.permissions.error")}</Text>
|
||||
<Button
|
||||
icon="camera"
|
||||
mode="contained"
|
||||
|
@ -91,7 +91,7 @@ class ScannerScreen extends React.Component<Props, State> {
|
|||
marginRight: 'auto',
|
||||
}}
|
||||
>
|
||||
{i18n.t("scannerScreen.buttonPermission")}
|
||||
{i18n.t("screens.scanner.permissions.button")}
|
||||
</Button>
|
||||
</View>
|
||||
}
|
||||
|
@ -103,8 +103,8 @@ class ScannerScreen extends React.Component<Props, State> {
|
|||
this.setState({
|
||||
dialogVisible: true,
|
||||
scanned: true,
|
||||
dialogTitle: i18n.t("scannerScreen.helpTitle"),
|
||||
dialogMessage: i18n.t("scannerScreen.helpMessage"),
|
||||
dialogTitle: i18n.t("screens.scanner.help.title"),
|
||||
dialogMessage: i18n.t("screens.scanner.help.message"),
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -125,8 +125,8 @@ class ScannerScreen extends React.Component<Props, State> {
|
|||
this.setState({
|
||||
dialogVisible: true,
|
||||
scanned: true,
|
||||
dialogTitle: i18n.t("scannerScreen.errorTitle"),
|
||||
dialogMessage: i18n.t("scannerScreen.errorMessage"),
|
||||
dialogTitle: i18n.t("screens.scanner.error.title"),
|
||||
dialogMessage: i18n.t("screens.scanner.error.message"),
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -184,7 +184,7 @@ class ScannerScreen extends React.Component<Props, State> {
|
|||
onPress={this.showHelpDialog}
|
||||
style={styles.button}
|
||||
>
|
||||
{i18n.t("scannerScreen.helpButton")}
|
||||
{i18n.t("screens.scanner.help.button")}
|
||||
</Button>
|
||||
<AlertDialog
|
||||
visible={this.state.dialogVisible}
|
||||
|
|
|
@ -79,16 +79,16 @@ class FeedbackScreen extends React.Component<Props> {
|
|||
<ScrollView style={{padding: 5}}>
|
||||
<Card>
|
||||
<Card.Title
|
||||
title={i18n.t('feedbackScreen.bugs')}
|
||||
subtitle={i18n.t('feedbackScreen.bugsSubtitle')}
|
||||
title={i18n.t('screens.feedback.bugs')}
|
||||
subtitle={i18n.t('screens.feedback.bugsSubtitle')}
|
||||
left={(props) => <Avatar.Icon {...props} icon="bug"/>}
|
||||
/>
|
||||
<Card.Content>
|
||||
<Paragraph>
|
||||
{i18n.t('feedbackScreen.bugsDescription')}
|
||||
{i18n.t('screens.feedback.bugsDescription')}
|
||||
</Paragraph>
|
||||
<Paragraph style={{color: this.props.theme.colors.primary}}>
|
||||
{i18n.t('feedbackScreen.contactMeans')}
|
||||
{i18n.t('screens.feedback.contactMeans')}
|
||||
</Paragraph>
|
||||
</Card.Content>
|
||||
{this.getButtons(true)}
|
||||
|
@ -96,13 +96,13 @@ class FeedbackScreen extends React.Component<Props> {
|
|||
|
||||
<Card style={{marginTop: 20, marginBottom: 10}}>
|
||||
<Card.Title
|
||||
title={i18n.t('feedbackScreen.feedback')}
|
||||
subtitle={i18n.t('feedbackScreen.feedbackSubtitle')}
|
||||
title={i18n.t('screens.feedback.title')}
|
||||
subtitle={i18n.t('screens.feedback.feedbackSubtitle')}
|
||||
left={(props) => <Avatar.Icon {...props} icon="comment"/>}
|
||||
/>
|
||||
<Card.Content>
|
||||
<Paragraph>
|
||||
{i18n.t('feedbackScreen.feedbackDescription')}
|
||||
{i18n.t('screens.feedback.feedbackDescription')}
|
||||
</Paragraph>
|
||||
</Card.Content>
|
||||
{this.getButtons(false)}
|
||||
|
|
|
@ -176,15 +176,15 @@ class SettingsScreen extends React.Component<Props, State> {
|
|||
return (
|
||||
<ScrollView>
|
||||
<Card style={{margin: 5}}>
|
||||
<Card.Title title={i18n.t('settingsScreen.generalCard')}/>
|
||||
<Card.Title title={i18n.t('screens.settings.generalCard')}/>
|
||||
<List.Section>
|
||||
{Appearance.getColorScheme() !== 'no-preference' ? this.getToggleItem(
|
||||
this.onToggleNightModeFollowSystem,
|
||||
'theme-light-dark',
|
||||
i18n.t('settingsScreen.nightModeAuto'),
|
||||
i18n.t('screens.settings.nightModeAuto'),
|
||||
this.state.nightMode ?
|
||||
i18n.t('settingsScreen.nightModeSubOn') :
|
||||
i18n.t('settingsScreen.nightModeSubOff'),
|
||||
i18n.t('screens.settings.nightModeSubOn') :
|
||||
i18n.t('screens.settings.nightModeSubOff'),
|
||||
this.state.nightModeFollowSystem
|
||||
) : null}
|
||||
{
|
||||
|
@ -192,16 +192,16 @@ class SettingsScreen extends React.Component<Props, State> {
|
|||
this.getToggleItem(
|
||||
this.onToggleNightMode,
|
||||
'theme-light-dark',
|
||||
i18n.t('settingsScreen.nightMode'),
|
||||
i18n.t('screens.settings.nightMode'),
|
||||
this.state.nightMode ?
|
||||
i18n.t('settingsScreen.nightModeSubOn') :
|
||||
i18n.t('settingsScreen.nightModeSubOff'),
|
||||
i18n.t('screens.settings.nightModeSubOn') :
|
||||
i18n.t('screens.settings.nightModeSubOff'),
|
||||
this.state.nightMode
|
||||
) : null
|
||||
}
|
||||
<List.Item
|
||||
title={i18n.t('settingsScreen.startScreen')}
|
||||
subtitle={i18n.t('settingsScreen.startScreenSub')}
|
||||
title={i18n.t('screens.settings.startScreen')}
|
||||
subtitle={i18n.t('screens.settings.startScreenSub')}
|
||||
left={props => <List.Icon {...props} icon="power"/>}
|
||||
/>
|
||||
{this.getStartScreenPicker()}
|
||||
|
@ -211,8 +211,8 @@ class SettingsScreen extends React.Component<Props, State> {
|
|||
<Card.Title title="Proxiwash"/>
|
||||
<List.Section>
|
||||
<List.Item
|
||||
title={i18n.t('settingsScreen.proxiwashNotifReminder')}
|
||||
description={i18n.t('settingsScreen.proxiwashNotifReminderSub')}
|
||||
title={i18n.t('screens.settings.proxiwashNotifReminder')}
|
||||
description={i18n.t('screens.settings.proxiwashNotifReminderSub')}
|
||||
left={props => <List.Icon {...props} icon="washing-machine"/>}
|
||||
opened={true}
|
||||
/>
|
||||
|
@ -222,25 +222,25 @@ class SettingsScreen extends React.Component<Props, State> {
|
|||
</List.Section>
|
||||
</Card>
|
||||
<Card style={{margin: 5}}>
|
||||
<Card.Title title={i18n.t('settingsScreen.information')}/>
|
||||
<Card.Title title={i18n.t('screens.settings.information')}/>
|
||||
<List.Section>
|
||||
{this.state.isDebugUnlocked
|
||||
? <List.Item
|
||||
title={i18n.t('screens.debug')}
|
||||
title={i18n.t('screens.debug.title')}
|
||||
left={props => <List.Icon {...props} icon="bug-check"/>}
|
||||
onPress={() => this.props.navigation.navigate("debug")}
|
||||
/>
|
||||
: null}
|
||||
<List.Item
|
||||
title={i18n.t('screens.about')}
|
||||
description={i18n.t('aboutScreen.buttonDesc')}
|
||||
title={i18n.t('screens.about.title')}
|
||||
description={i18n.t('screens.about.buttonDesc')}
|
||||
left={props => <List.Icon {...props} icon="information"/>}
|
||||
onPress={() => this.props.navigation.navigate("about")}
|
||||
onLongPress={this.unlockDebugMode}
|
||||
/>
|
||||
<List.Item
|
||||
title={i18n.t('feedbackScreen.homeButtonTitle')}
|
||||
description={i18n.t('feedbackScreen.homeButtonSubtitle')}
|
||||
title={i18n.t('screens.feedback.homeButtonTitle')}
|
||||
description={i18n.t('screens.feedback.homeButtonSubtitle')}
|
||||
left={props => <List.Icon {...props} icon="bug"/>}
|
||||
onPress={() => this.props.navigation.navigate("feedback")}
|
||||
/>
|
||||
|
|
|
@ -78,7 +78,7 @@ class GroupSelectionScreen extends React.Component<Props, State> {
|
|||
getSearchBar = () => {
|
||||
return (
|
||||
<Searchbar
|
||||
placeholder={i18n.t('proximoScreen.search')}
|
||||
placeholder={i18n.t('screens.proximo.search')}
|
||||
onChangeText={this.onSearchStringChange}
|
||||
/>
|
||||
);
|
||||
|
@ -230,7 +230,7 @@ class GroupSelectionScreen extends React.Component<Props, State> {
|
|||
data.push(fetchedData[key]);
|
||||
}
|
||||
data.sort(sortName);
|
||||
data.unshift({name: i18n.t("planexScreen.favorites"), id: 0, content: this.state.favoriteGroups});
|
||||
data.unshift({name: i18n.t("screens.planex.favorites"), id: 0, content: this.state.favoriteGroups});
|
||||
return data;
|
||||
}
|
||||
|
||||
|
|
|
@ -330,7 +330,7 @@ class PlanexScreen extends React.Component<Props, State> {
|
|||
? <ErrorView
|
||||
{...this.props}
|
||||
icon={'account-clock'}
|
||||
message={i18n.t("planexScreen.noGroupSelected")}
|
||||
message={i18n.t("screens.planex.noGroupSelected")}
|
||||
showRetryButton={false}
|
||||
/>
|
||||
: null}
|
||||
|
@ -364,17 +364,17 @@ class PlanexScreen extends React.Component<Props, State> {
|
|||
</View>
|
||||
<MascotPopup
|
||||
visible={this.state.mascotDialogVisible}
|
||||
title={i18n.t("planexScreen.enableStartScreenTitle")}
|
||||
message={i18n.t("planexScreen.enableStartScreenMessage")}
|
||||
title={i18n.t("screens.planex.mascotDialog.title")}
|
||||
message={i18n.t("screens.planex.mascotDialog.message")}
|
||||
icon={"power"}
|
||||
buttons={{
|
||||
action: {
|
||||
message: i18n.t("planexScreen.enableStartOK"),
|
||||
message: i18n.t("screens.planex.mascotDialog.ok"),
|
||||
icon: "settings",
|
||||
onPress: this.onGoToSettings,
|
||||
},
|
||||
cancel: {
|
||||
message: i18n.t("planexScreen.enableStartCancel"),
|
||||
message: i18n.t("screens.planex.mascotDialog.cancel"),
|
||||
icon: "close",
|
||||
color: this.props.theme.colors.warning,
|
||||
onPress: this.onMascotDialogCancel,
|
||||
|
|
|
@ -144,7 +144,7 @@ class PlanningDisplayScreen extends React.Component<Props, State> {
|
|||
*/
|
||||
getErrorView() {
|
||||
if (this.errorCode === ERROR_TYPE.BAD_INPUT)
|
||||
return <ErrorView {...this.props} showRetryButton={false} message={i18n.t("planningScreen.invalidEvent")}
|
||||
return <ErrorView {...this.props} showRetryButton={false} message={i18n.t("screens.planning.invalidEvent")}
|
||||
icon={"calendar-remove"}/>;
|
||||
else
|
||||
return <ErrorView {...this.props} errorCode={this.errorCode} onRefresh={this.fetchData}/>;
|
||||
|
|
|
@ -254,13 +254,13 @@ class PlanningScreen extends React.Component<Props, State> {
|
|||
/>
|
||||
<MascotPopup
|
||||
visible={this.state.mascotDialogVisible}
|
||||
title={i18n.t("planningScreen.mascotTitle")}
|
||||
message={i18n.t("planningScreen.mascotMessage")}
|
||||
title={i18n.t("screens.planning.mascotDialog.title")}
|
||||
message={i18n.t("screens.planning.mascotDialog.message")}
|
||||
icon={"calendar-range"}
|
||||
buttons={{
|
||||
action: null,
|
||||
cancel: {
|
||||
message: i18n.t("planningScreen.mascotButton"),
|
||||
message: i18n.t("screens.planning.mascotDialog.button"),
|
||||
icon: "check",
|
||||
onPress: this.onHideMascotDialog,
|
||||
}
|
||||
|
|
|
@ -30,50 +30,50 @@ export default class ProxiwashAboutScreen extends React.Component<Props> {
|
|||
source={{uri: LOGO}}
|
||||
style={{height: '100%', width: '100%', resizeMode: "contain"}}/>
|
||||
</View>
|
||||
<Text>{i18n.t('proxiwashScreen.description')}</Text>
|
||||
<Text>{i18n.t('screens.proxiwash.description')}</Text>
|
||||
<Card style={{margin: 5}}>
|
||||
<Card.Title
|
||||
title={i18n.t('proxiwashScreen.dryer')}
|
||||
title={i18n.t('screens.proxiwash.dryer')}
|
||||
left={props => <List.Icon {...props} icon={'tumble-dryer'}/>}
|
||||
/>
|
||||
<Card.Content>
|
||||
<Title>{i18n.t('proxiwashScreen.procedure')}</Title>
|
||||
<Paragraph>{i18n.t('proxiwashScreen.dryerProcedure')}</Paragraph>
|
||||
<Title>{i18n.t('proxiwashScreen.tips')}</Title>
|
||||
<Paragraph>{i18n.t('proxiwashScreen.dryerTips')}</Paragraph>
|
||||
<Title>{i18n.t('screens.proxiwash.procedure')}</Title>
|
||||
<Paragraph>{i18n.t('screens.proxiwash.dryerProcedure')}</Paragraph>
|
||||
<Title>{i18n.t('screens.proxiwash.tips')}</Title>
|
||||
<Paragraph>{i18n.t('screens.proxiwash.dryerTips')}</Paragraph>
|
||||
</Card.Content>
|
||||
</Card>
|
||||
|
||||
<Card style={{margin: 5}}>
|
||||
<Card.Title
|
||||
title={i18n.t('proxiwashScreen.washer')}
|
||||
title={i18n.t('screens.proxiwash.washer')}
|
||||
left={props => <List.Icon {...props} icon={'washing-machine'}/>}
|
||||
/>
|
||||
<Card.Content>
|
||||
<Title>{i18n.t('proxiwashScreen.procedure')}</Title>
|
||||
<Paragraph>{i18n.t('proxiwashScreen.washerProcedure')}</Paragraph>
|
||||
<Title>{i18n.t('proxiwashScreen.tips')}</Title>
|
||||
<Paragraph>{i18n.t('proxiwashScreen.washerTips')}</Paragraph>
|
||||
<Title>{i18n.t('screens.proxiwash.procedure')}</Title>
|
||||
<Paragraph>{i18n.t('screens.proxiwash.washerProcedure')}</Paragraph>
|
||||
<Title>{i18n.t('screens.proxiwash.tips')}</Title>
|
||||
<Paragraph>{i18n.t('screens.proxiwash.washerTips')}</Paragraph>
|
||||
</Card.Content>
|
||||
</Card>
|
||||
|
||||
<Card style={{margin: 5}}>
|
||||
<Card.Title
|
||||
title={i18n.t('proxiwashScreen.tariffs')}
|
||||
title={i18n.t('screens.proxiwash.tariffs')}
|
||||
left={props => <List.Icon {...props} icon={'coins'}/>}
|
||||
/>
|
||||
<Card.Content>
|
||||
<Paragraph>{i18n.t('proxiwashScreen.washersTariff')}</Paragraph>
|
||||
<Paragraph>{i18n.t('proxiwashScreen.dryersTariff')}</Paragraph>
|
||||
<Paragraph>{i18n.t('screens.proxiwash.washersTariff')}</Paragraph>
|
||||
<Paragraph>{i18n.t('screens.proxiwash.dryersTariff')}</Paragraph>
|
||||
</Card.Content>
|
||||
</Card>
|
||||
<Card style={{margin: 5, marginBottom: CustomTabBar.TAB_BAR_HEIGHT + 20}}>
|
||||
<Card.Title
|
||||
title={i18n.t('proxiwashScreen.paymentMethods')}
|
||||
title={i18n.t('screens.proxiwash.paymentMethods')}
|
||||
left={props => <List.Icon {...props} icon={'cash'}/>}
|
||||
/>
|
||||
<Card.Content>
|
||||
<Paragraph>{i18n.t('proxiwashScreen.paymentMethodsDescription')}</Paragraph>
|
||||
<Paragraph>{i18n.t('screens.proxiwash.paymentMethodsDescription')}</Paragraph>
|
||||
</Card.Content>
|
||||
</Card>
|
||||
</ScrollView>
|
||||
|
|
|
@ -75,13 +75,13 @@ class ProxiwashScreen extends React.Component<Props, State> {
|
|||
*/
|
||||
constructor(props) {
|
||||
super(props);
|
||||
modalStateStrings[ProxiwashConstants.machineStates.AVAILABLE] = i18n.t('proxiwashScreen.modal.ready');
|
||||
modalStateStrings[ProxiwashConstants.machineStates.RUNNING] = i18n.t('proxiwashScreen.modal.running');
|
||||
modalStateStrings[ProxiwashConstants.machineStates.RUNNING_NOT_STARTED] = i18n.t('proxiwashScreen.modal.runningNotStarted');
|
||||
modalStateStrings[ProxiwashConstants.machineStates.FINISHED] = i18n.t('proxiwashScreen.modal.finished');
|
||||
modalStateStrings[ProxiwashConstants.machineStates.UNAVAILABLE] = i18n.t('proxiwashScreen.modal.broken');
|
||||
modalStateStrings[ProxiwashConstants.machineStates.ERROR] = i18n.t('proxiwashScreen.modal.error');
|
||||
modalStateStrings[ProxiwashConstants.machineStates.UNKNOWN] = i18n.t('proxiwashScreen.modal.unknown');
|
||||
modalStateStrings[ProxiwashConstants.machineStates.AVAILABLE] = i18n.t('screens.proxiwash.modal.ready');
|
||||
modalStateStrings[ProxiwashConstants.machineStates.RUNNING] = i18n.t('screens.proxiwash.modal.running');
|
||||
modalStateStrings[ProxiwashConstants.machineStates.RUNNING_NOT_STARTED] = i18n.t('screens.proxiwash.modal.runningNotStarted');
|
||||
modalStateStrings[ProxiwashConstants.machineStates.FINISHED] = i18n.t('screens.proxiwash.modal.finished');
|
||||
modalStateStrings[ProxiwashConstants.machineStates.UNAVAILABLE] = i18n.t('screens.proxiwash.modal.broken');
|
||||
modalStateStrings[ProxiwashConstants.machineStates.ERROR] = i18n.t('screens.proxiwash.modal.error');
|
||||
modalStateStrings[ProxiwashConstants.machineStates.UNKNOWN] = i18n.t('screens.proxiwash.modal.unknown');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -151,8 +151,8 @@ class ProxiwashScreen extends React.Component<Props, State> {
|
|||
*/
|
||||
showNotificationsDisabledWarning() {
|
||||
Alert.alert(
|
||||
i18n.t("proxiwashScreen.modal.notificationErrorTitle"),
|
||||
i18n.t("proxiwashScreen.modal.notificationErrorDescription"),
|
||||
i18n.t("screens.proxiwash.modal.notificationErrorTitle"),
|
||||
i18n.t("screens.proxiwash.modal.notificationErrorDescription"),
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -209,13 +209,13 @@ class ProxiwashScreen extends React.Component<Props, State> {
|
|||
getCleanedMachineWatched(this.state.machinesWatched, [...data.dryers, ...data.washers]);
|
||||
return [
|
||||
{
|
||||
title: i18n.t('proxiwashScreen.dryers'),
|
||||
title: i18n.t('screens.proxiwash.dryers'),
|
||||
icon: 'tumble-dryer',
|
||||
data: data.dryers === undefined ? [] : data.dryers,
|
||||
keyExtractor: this.getKeyExtractor
|
||||
},
|
||||
{
|
||||
title: i18n.t('proxiwashScreen.washers'),
|
||||
title: i18n.t('screens.proxiwash.washers'),
|
||||
icon: 'washing-machine',
|
||||
data: data.washers === undefined ? [] : data.washers,
|
||||
keyExtractor: this.getKeyExtractor
|
||||
|
@ -262,7 +262,7 @@ class ProxiwashScreen extends React.Component<Props, State> {
|
|||
*/
|
||||
getModalContent(title: string, item: Machine, isDryer: boolean) {
|
||||
let button = {
|
||||
text: i18n.t("proxiwashScreen.modal.ok"),
|
||||
text: i18n.t("screens.proxiwash.modal.ok"),
|
||||
icon: '',
|
||||
onPress: undefined
|
||||
};
|
||||
|
@ -276,13 +276,13 @@ class ProxiwashScreen extends React.Component<Props, State> {
|
|||
button =
|
||||
{
|
||||
text: isMachineWatched(item, this.state.machinesWatched) ?
|
||||
i18n.t("proxiwashScreen.modal.disableNotifications") :
|
||||
i18n.t("proxiwashScreen.modal.enableNotifications"),
|
||||
i18n.t("screens.proxiwash.modal.disableNotifications") :
|
||||
i18n.t("screens.proxiwash.modal.enableNotifications"),
|
||||
icon: '',
|
||||
onPress: onPress
|
||||
}
|
||||
;
|
||||
message = i18n.t('proxiwashScreen.modal.running',
|
||||
message = i18n.t('screens.proxiwash.modal.running',
|
||||
{
|
||||
start: item.startTime,
|
||||
end: item.endTime,
|
||||
|
@ -291,9 +291,9 @@ class ProxiwashScreen extends React.Component<Props, State> {
|
|||
});
|
||||
} else if (item.state === ProxiwashConstants.machineStates.AVAILABLE) {
|
||||
if (isDryer)
|
||||
message += '\n' + i18n.t('proxiwashScreen.dryersTariff');
|
||||
message += '\n' + i18n.t('screens.proxiwash.dryersTariff');
|
||||
else
|
||||
message += '\n' + i18n.t('proxiwashScreen.washersTariff');
|
||||
message += '\n' + i18n.t('screens.proxiwash.washersTariff');
|
||||
}
|
||||
return (
|
||||
<View style={{
|
||||
|
@ -363,7 +363,7 @@ class ProxiwashScreen extends React.Component<Props, State> {
|
|||
* @return {*}
|
||||
*/
|
||||
getRenderSectionHeader = ({section}: Object) => {
|
||||
const isDryer = section.title === i18n.t('proxiwashScreen.dryers');
|
||||
const isDryer = section.title === i18n.t('screens.proxiwash.dryers');
|
||||
const nbAvailable = this.getMachineAvailableNumber(isDryer);
|
||||
return (
|
||||
<ProxiwashSectionHeader
|
||||
|
@ -381,7 +381,7 @@ class ProxiwashScreen extends React.Component<Props, State> {
|
|||
* @returns {React.Node}
|
||||
*/
|
||||
getRenderItem = ({item, section}: Object) => {
|
||||
const isDryer = section.title === i18n.t('proxiwashScreen.dryers');
|
||||
const isDryer = section.title === i18n.t('screens.proxiwash.dryers');
|
||||
return (
|
||||
<ProxiwashListItem
|
||||
item={item}
|
||||
|
@ -416,13 +416,13 @@ class ProxiwashScreen extends React.Component<Props, State> {
|
|||
</View>
|
||||
<MascotPopup
|
||||
visible={this.state.mascotDialogVisible}
|
||||
title={i18n.t("proxiwashScreen.bannerTitle")}
|
||||
message={i18n.t("proxiwashScreen.enableNotificationsTip")}
|
||||
title={i18n.t("screens.proxiwash.mascotDialog.title")}
|
||||
message={i18n.t("screens.proxiwash.mascotDialog.message")}
|
||||
icon={"bell"}
|
||||
buttons={{
|
||||
action: null,
|
||||
cancel: {
|
||||
message: i18n.t("proxiwashScreen.bannerButton"),
|
||||
message: i18n.t("screens.proxiwash.mascotDialog.ok"),
|
||||
icon: "check",
|
||||
onPress: this.onHideMascotDialog,
|
||||
}
|
||||
|
|
|
@ -33,10 +33,10 @@ export default class ProximoAboutScreen extends React.Component<Props> {
|
|||
source={{uri: LOGO}}
|
||||
style={{height: '100%', width: '100%', resizeMode: "contain"}}/>
|
||||
</View>
|
||||
<Text>{i18n.t('proximoScreen.description')}</Text>
|
||||
<Text>{i18n.t('screens.proximo.description')}</Text>
|
||||
<Card style={{margin: 5}}>
|
||||
<Card.Title
|
||||
title={i18n.t('proximoScreen.openingHours')}
|
||||
title={i18n.t('screens.proximo.openingHours')}
|
||||
left={props => <List.Icon {...props} icon={'clock-outline'}/>}
|
||||
/>
|
||||
<Card.Content>
|
||||
|
@ -45,11 +45,11 @@ export default class ProximoAboutScreen extends React.Component<Props> {
|
|||
</Card>
|
||||
<Card style={{margin: 5, marginBottom: CustomTabBar.TAB_BAR_HEIGHT + 20}}>
|
||||
<Card.Title
|
||||
title={i18n.t('proximoScreen.paymentMethods')}
|
||||
title={i18n.t('screens.proximo.paymentMethods')}
|
||||
left={props => <List.Icon {...props} icon={'cash'}/>}
|
||||
/>
|
||||
<Card.Content>
|
||||
<Paragraph>{i18n.t('proximoScreen.paymentMethodsDescription')}</Paragraph>
|
||||
<Paragraph>{i18n.t('screens.proximo.paymentMethodsDescription')}</Paragraph>
|
||||
</Card.Content>
|
||||
</Card>
|
||||
</ScrollView>
|
||||
|
|
|
@ -95,7 +95,7 @@ class ProximoListScreen extends React.Component<Props, State> {
|
|||
getSearchBar = () => {
|
||||
return (
|
||||
<Searchbar
|
||||
placeholder={i18n.t('proximoScreen.search')}
|
||||
placeholder={i18n.t('screens.proximo.search')}
|
||||
onChangeText={this.onSearchStringChange}
|
||||
/>
|
||||
);
|
||||
|
@ -200,7 +200,7 @@ class ProximoListScreen extends React.Component<Props, State> {
|
|||
<Subheading style={{
|
||||
color: this.getStockColor(parseInt(item.quantity)),
|
||||
}}>
|
||||
{item.quantity + ' ' + i18n.t('proximoScreen.inStock')}
|
||||
{item.quantity + ' ' + i18n.t('screens.proximo.inStock')}
|
||||
</Subheading>
|
||||
<Subheading style={{marginLeft: 'auto'}}>{item.price}€</Subheading>
|
||||
</View>
|
||||
|
@ -227,15 +227,15 @@ class ProximoListScreen extends React.Component<Props, State> {
|
|||
flex: 1,
|
||||
padding: 20
|
||||
}}>
|
||||
<Title style={{marginBottom: 10}}>{i18n.t('proximoScreen.sortOrder')}</Title>
|
||||
<Title style={{marginBottom: 10}}>{i18n.t('screens.proximo.sortOrder')}</Title>
|
||||
<RadioButton.Group
|
||||
onValueChange={value => this.setSortMode(value)}
|
||||
value={this.state.currentSortMode}
|
||||
>
|
||||
<RadioButton.Item label={i18n.t('proximoScreen.sortPrice')} value={1}/>
|
||||
<RadioButton.Item label={i18n.t('proximoScreen.sortPriceReverse')} value={2}/>
|
||||
<RadioButton.Item label={i18n.t('proximoScreen.sortName')} value={3}/>
|
||||
<RadioButton.Item label={i18n.t('proximoScreen.sortNameReverse')} value={4}/>
|
||||
<RadioButton.Item label={i18n.t('screens.proximo.sortPrice')} value={1}/>
|
||||
<RadioButton.Item label={i18n.t('screens.proximo.sortPriceReverse')} value={2}/>
|
||||
<RadioButton.Item label={i18n.t('screens.proximo.sortName')} value={3}/>
|
||||
<RadioButton.Item label={i18n.t('screens.proximo.sortNameReverse')} value={4}/>
|
||||
</RadioButton.Group>
|
||||
</View>
|
||||
);
|
||||
|
|
|
@ -75,7 +75,7 @@ class ProximoMainScreen extends React.Component<Props, State> {
|
|||
data: {
|
||||
type: {
|
||||
id: "0",
|
||||
name: i18n.t('proximoScreen.all'),
|
||||
name: i18n.t('screens.proximo.all'),
|
||||
icon: 'star'
|
||||
},
|
||||
data: this.articles !== undefined ?
|
||||
|
@ -146,7 +146,7 @@ class ProximoMainScreen extends React.Component<Props, State> {
|
|||
finalData.push({
|
||||
type: {
|
||||
id: -1,
|
||||
name: i18n.t('proximoScreen.all'),
|
||||
name: i18n.t('screens.proximo.all'),
|
||||
icon: 'star'
|
||||
},
|
||||
data: this.getAvailableArticles(this.articles, undefined)
|
||||
|
@ -193,7 +193,7 @@ class ProximoMainScreen extends React.Component<Props, State> {
|
|||
shouldFocusSearchBar: false,
|
||||
data: item,
|
||||
};
|
||||
const subtitle = item.data.length + " " + (item.data.length > 1 ? i18n.t('proximoScreen.articles') : i18n.t('proximoScreen.article'));
|
||||
const subtitle = item.data.length + " " + (item.data.length > 1 ? i18n.t('screens.proximo.articles') : i18n.t('screens.proximo.article'));
|
||||
const onPress = this.props.navigation.navigate.bind(this, 'proximo-list', dataToSend);
|
||||
if (item.data.length > 0) {
|
||||
return (
|
||||
|
|
|
@ -74,117 +74,117 @@ class ServicesScreen extends React.Component<Props, State> {
|
|||
const nav = props.navigation;
|
||||
this.amicaleDataset = [
|
||||
{
|
||||
title: i18n.t('screens.clubsAbout'),
|
||||
subtitle: i18n.t('servicesScreen.descriptions.clubs'),
|
||||
title: i18n.t('screens.clubs.title'),
|
||||
subtitle: i18n.t('screens.services.descriptions.clubs'),
|
||||
image: CLUBS_IMAGE,
|
||||
onPress: () => this.onAmicaleServicePress("club-list"),
|
||||
},
|
||||
{
|
||||
title: i18n.t('screens.profile'),
|
||||
subtitle: i18n.t('servicesScreen.descriptions.profile'),
|
||||
title: i18n.t('screens.profile.title'),
|
||||
subtitle: i18n.t('screens.services.descriptions.profile'),
|
||||
image: PROFILE_IMAGE,
|
||||
onPress: () => this.onAmicaleServicePress("profile"),
|
||||
},
|
||||
{
|
||||
title: i18n.t('screens.equipmentList'),
|
||||
subtitle: i18n.t('servicesScreen.descriptions.equipment'),
|
||||
title: i18n.t('screens.equipment.title'),
|
||||
subtitle: i18n.t('screens.services.descriptions.equipment'),
|
||||
image: EQUIPMENT_IMAGE,
|
||||
onPress: () => this.onAmicaleServicePress("equipment-list"),
|
||||
},
|
||||
{
|
||||
title: i18n.t('screens.amicaleWebsite'),
|
||||
subtitle: i18n.t('servicesScreen.descriptions.amicaleWebsite'),
|
||||
title: i18n.t('screens.websites.amicale'),
|
||||
subtitle: i18n.t('screens.services.descriptions.amicaleWebsite'),
|
||||
image: AMICALE_IMAGE,
|
||||
onPress: () => nav.navigate("website", {host: AvailableWebsites.websites.AMICALE, title: i18n.t('screens.amicaleWebsite')}),
|
||||
onPress: () => nav.navigate("website", {host: AvailableWebsites.websites.AMICALE, title: i18n.t('screens.websites.amicale')}),
|
||||
},
|
||||
{
|
||||
title: i18n.t('screens.vote'),
|
||||
subtitle: i18n.t('servicesScreen.descriptions.vote'),
|
||||
title: i18n.t('screens.vote.title'),
|
||||
subtitle: i18n.t('screens.services.descriptions.vote'),
|
||||
image: VOTE_IMAGE,
|
||||
onPress: () => this.onAmicaleServicePress("vote"),
|
||||
},
|
||||
];
|
||||
this.studentsDataset = [
|
||||
{
|
||||
title: i18n.t('screens.proximo'),
|
||||
subtitle: i18n.t('servicesScreen.descriptions.proximo'),
|
||||
title: i18n.t('screens.proximo.title'),
|
||||
subtitle: i18n.t('screens.services.descriptions.proximo'),
|
||||
image: PROXIMO_IMAGE,
|
||||
onPress: () => nav.navigate("proximo"),
|
||||
},
|
||||
{
|
||||
title: "Wiketud",
|
||||
subtitle: i18n.t('servicesScreen.descriptions.wiketud'),
|
||||
subtitle: i18n.t('screens.services.descriptions.wiketud'),
|
||||
image: WIKETUD_IMAGE,
|
||||
onPress: () => nav.navigate("website", {host: AvailableWebsites.websites.WIKETUD, title: "Wiketud"}),
|
||||
},
|
||||
{
|
||||
title: "Élus Étudiants",
|
||||
subtitle: i18n.t('servicesScreen.descriptions.elusEtudiants'),
|
||||
subtitle: i18n.t('screens.services.descriptions.elusEtudiants'),
|
||||
image: EE_IMAGE,
|
||||
onPress: () => nav.navigate("website", {host: AvailableWebsites.websites.ELUS_ETUDIANTS, title: "Élus Étudiants"}),
|
||||
},
|
||||
{
|
||||
title: "Tutor'INSA",
|
||||
subtitle: i18n.t('servicesScreen.descriptions.tutorInsa'),
|
||||
subtitle: i18n.t('screens.services.descriptions.tutorInsa'),
|
||||
image: TUTORINSA_IMAGE,
|
||||
onPress: () => nav.navigate("website", {host: AvailableWebsites.websites.TUTOR_INSA, title: "Tutor'INSA"})
|
||||
},
|
||||
];
|
||||
this.insaDataset = [
|
||||
{
|
||||
title: i18n.t('screens.menuSelf'),
|
||||
subtitle: i18n.t('servicesScreen.descriptions.self'),
|
||||
title: i18n.t('screens.menu.title'),
|
||||
subtitle: i18n.t('screens.services.descriptions.self'),
|
||||
image: RU_IMAGE,
|
||||
onPress: () => nav.navigate("self-menu"),
|
||||
},
|
||||
{
|
||||
title: i18n.t('screens.availableRooms'),
|
||||
subtitle: i18n.t('servicesScreen.descriptions.availableRooms'),
|
||||
title: i18n.t('screens.websites.rooms'),
|
||||
subtitle: i18n.t('screens.services.descriptions.availableRooms'),
|
||||
image: ROOM_IMAGE,
|
||||
onPress: () => nav.navigate("website", {host: AvailableWebsites.websites.AVAILABLE_ROOMS, title: i18n.t('screens.availableRooms')}),
|
||||
onPress: () => nav.navigate("website", {host: AvailableWebsites.websites.AVAILABLE_ROOMS, title: i18n.t('screens.websites.rooms')}),
|
||||
},
|
||||
{
|
||||
title: i18n.t('screens.bib'),
|
||||
subtitle: i18n.t('servicesScreen.descriptions.bib'),
|
||||
title: i18n.t('screens.websites.bib'),
|
||||
subtitle: i18n.t('screens.services.descriptions.bib'),
|
||||
image: BIB_IMAGE,
|
||||
onPress: () => nav.navigate("website", {host: AvailableWebsites.websites.BIB, title: i18n.t('screens.bib')}),
|
||||
onPress: () => nav.navigate("website", {host: AvailableWebsites.websites.BIB, title: i18n.t('screens.websites.bib')}),
|
||||
},
|
||||
{
|
||||
title: i18n.t('screens.bluemind'),
|
||||
subtitle: i18n.t('servicesScreen.descriptions.mails'),
|
||||
title: i18n.t('screens.websites.mails'),
|
||||
subtitle: i18n.t('screens.services.descriptions.mails'),
|
||||
image: EMAIL_IMAGE,
|
||||
onPress: () => nav.navigate("website", {host: AvailableWebsites.websites.BLUEMIND, title: i18n.t('screens.bluemind')}),
|
||||
onPress: () => nav.navigate("website", {host: AvailableWebsites.websites.BLUEMIND, title: i18n.t('screens.websites.mails')}),
|
||||
},
|
||||
{
|
||||
title: i18n.t('screens.ent'),
|
||||
subtitle: i18n.t('servicesScreen.descriptions.ent'),
|
||||
title: i18n.t('screens.websites.ent'),
|
||||
subtitle: i18n.t('screens.services.descriptions.ent'),
|
||||
image: ENT_IMAGE,
|
||||
onPress: () => nav.navigate("website", {host: AvailableWebsites.websites.ENT, title: i18n.t('screens.ent')}),
|
||||
onPress: () => nav.navigate("website", {host: AvailableWebsites.websites.ENT, title: i18n.t('screens.websites.ent')}),
|
||||
},
|
||||
{
|
||||
title: i18n.t('screens.insaAccount'),
|
||||
subtitle: i18n.t('servicesScreen.descriptions.insaAccount'),
|
||||
title: i18n.t('screens.insaAccount.title'),
|
||||
subtitle: i18n.t('screens.services.descriptions.insaAccount.title'),
|
||||
image: ACCOUNT_IMAGE,
|
||||
onPress: () => nav.navigate("website", {host: AvailableWebsites.websites.INSA_ACCOUNT, title: i18n.t('screens.insaAccount')}),
|
||||
onPress: () => nav.navigate("website", {host: AvailableWebsites.websites.INSA_ACCOUNT, title: i18n.t('screens.insaAccount.title')}),
|
||||
},
|
||||
];
|
||||
this.finalDataset = [
|
||||
{
|
||||
title: i18n.t("servicesScreen.amicale"),
|
||||
title: i18n.t("screens.services.categories.amicale"),
|
||||
description: "LOGIN",
|
||||
image: AMICALE_LOGO,
|
||||
shouldLogin: true,
|
||||
content: this.amicaleDataset
|
||||
},
|
||||
{
|
||||
title: i18n.t("servicesScreen.students"),
|
||||
title: i18n.t("screens.services.categories.students"),
|
||||
description: "SERVICES OFFERED BY STUDENTS",
|
||||
image: 'account-group',
|
||||
shouldLogin: false,
|
||||
content: this.studentsDataset
|
||||
},
|
||||
{
|
||||
title: i18n.t("servicesScreen.insa"),
|
||||
title: i18n.t("screens.services.categories.insa"),
|
||||
description: "SERVICES OFFERED BY INSA",
|
||||
image: 'school',
|
||||
shouldLogin: false,
|
||||
|
@ -312,13 +312,13 @@ class ServicesScreen extends React.Component<Props, State> {
|
|||
/>
|
||||
<MascotPopup
|
||||
visible={this.state.mascotDialogVisible}
|
||||
title={i18n.t("servicesScreen.mascot.title")}
|
||||
message={i18n.t("servicesScreen.mascot.message")}
|
||||
title={i18n.t("screens.services.mascotDialog.title")}
|
||||
message={i18n.t("screens.services.mascotDialog.message")}
|
||||
icon={"calendar-range"}
|
||||
buttons={{
|
||||
action: null,
|
||||
cancel: {
|
||||
message: i18n.t("servicesScreen.mascot.button"),
|
||||
message: i18n.t("screens.services.mascotDialog.button"),
|
||||
icon: "check",
|
||||
onPress: this.onHideMascotDialog,
|
||||
}
|
||||
|
|
|
@ -132,11 +132,11 @@ class TetrisScreen extends React.Component<Props, State> {
|
|||
|
||||
showPausePopup() {
|
||||
Alert.alert(
|
||||
i18n.t("game.pause"),
|
||||
i18n.t("game.pauseMessage"),
|
||||
i18n.t("screens.game.pause"),
|
||||
i18n.t("screens.game.pauseMessage"),
|
||||
[
|
||||
{text: i18n.t("game.restart.text"), onPress: () => this.showRestartConfirm()},
|
||||
{text: i18n.t("game.resume"), onPress: () => this.togglePause()},
|
||||
{text: i18n.t("screens.game.restart.text"), onPress: () => this.showRestartConfirm()},
|
||||
{text: i18n.t("screens.game.resume"), onPress: () => this.togglePause()},
|
||||
],
|
||||
{cancelable: false},
|
||||
);
|
||||
|
@ -144,26 +144,26 @@ class TetrisScreen extends React.Component<Props, State> {
|
|||
|
||||
showRestartConfirm() {
|
||||
Alert.alert(
|
||||
i18n.t("game.restart.confirm"),
|
||||
i18n.t("game.restart.confirmMessage"),
|
||||
i18n.t("screens.game.restart.confirm"),
|
||||
i18n.t("screens.game.restart.confirmMessage"),
|
||||
[
|
||||
{text: i18n.t("game.restart.confirmNo"), onPress: () => this.showPausePopup()},
|
||||
{text: i18n.t("game.restart.confirmYes"), onPress: () => this.startGame()},
|
||||
{text: i18n.t("screens.game.restart.confirmNo"), onPress: () => this.showPausePopup()},
|
||||
{text: i18n.t("screens.game.restart.confirmYes"), onPress: () => this.startGame()},
|
||||
],
|
||||
{cancelable: false},
|
||||
);
|
||||
}
|
||||
|
||||
showGameOverConfirm() {
|
||||
let message = i18n.t("game.gameOver.score") + this.state.gameScore + '\n';
|
||||
message += i18n.t("game.gameOver.level") + this.state.gameLevel + '\n';
|
||||
message += i18n.t("game.gameOver.time") + this.getFormattedTime(this.state.gameTime) + '\n';
|
||||
let message = i18n.t("screens.game.gameOver.score") + this.state.gameScore + '\n';
|
||||
message += i18n.t("screens.game.gameOver.level") + this.state.gameLevel + '\n';
|
||||
message += i18n.t("screens.game.gameOver.time") + this.getFormattedTime(this.state.gameTime) + '\n';
|
||||
Alert.alert(
|
||||
i18n.t("game.gameOver.text"),
|
||||
i18n.t("screens.game.gameOver.text"),
|
||||
message,
|
||||
[
|
||||
{text: i18n.t("game.gameOver.exit"), onPress: () => this.props.navigation.goBack()},
|
||||
{text: i18n.t("game.restart.text"), onPress: () => this.startGame()},
|
||||
{text: i18n.t("screens.game.gameOver.exit"), onPress: () => this.props.navigation.goBack()},
|
||||
{text: i18n.t("screens.game.restart.text"), onPress: () => this.startGame()},
|
||||
],
|
||||
{cancelable: false},
|
||||
);
|
||||
|
|
|
@ -75,24 +75,24 @@ export function getRelativeDateString(date: Date) {
|
|||
const yearDelta = date.getUTCFullYear() - today.getUTCFullYear();
|
||||
const monthDelta = date.getUTCMonth() - today.getUTCMonth();
|
||||
const dayDelta = date.getUTCDate() - today.getUTCDate();
|
||||
let translatedString = i18n.t('equipmentScreen.today');
|
||||
let translatedString = i18n.t('screens.equipment.today');
|
||||
if (yearDelta > 0)
|
||||
translatedString = i18n.t('equipmentScreen.otherYear', {
|
||||
translatedString = i18n.t('screens.equipment.otherYear', {
|
||||
date: date.getDate(),
|
||||
month: DateManager.getInstance().getMonthsOfYear()[date.getMonth()],
|
||||
year: date.getFullYear()
|
||||
});
|
||||
else if (monthDelta > 0)
|
||||
translatedString = i18n.t('equipmentScreen.otherMonth', {
|
||||
translatedString = i18n.t('screens.equipment.otherMonth', {
|
||||
date: date.getDate(),
|
||||
month: DateManager.getInstance().getMonthsOfYear()[date.getMonth()],
|
||||
});
|
||||
else if (dayDelta > 1)
|
||||
translatedString = i18n.t('equipmentScreen.thisMonth', {
|
||||
translatedString = i18n.t('screens.equipment.thisMonth', {
|
||||
date: date.getDate(),
|
||||
});
|
||||
else if (dayDelta === 1)
|
||||
translatedString = i18n.t('equipmentScreen.tomorrow');
|
||||
translatedString = i18n.t('screens.equipment.tomorrow');
|
||||
|
||||
return translatedString;
|
||||
}
|
||||
|
|
|
@ -49,8 +49,8 @@ function createNotifications(machineID: string, date: Date) {
|
|||
let reminderDate = new Date(date);
|
||||
reminderDate.setMinutes(reminderDate.getMinutes() - reminder);
|
||||
PushNotification.localNotificationSchedule({
|
||||
title: i18n.t("proxiwashScreen.notifications.machineRunningTitle", {time: reminder}),
|
||||
message: i18n.t("proxiwashScreen.notifications.machineRunningBody", {number: machineID}),
|
||||
title: i18n.t("screens.proxiwash.notifications.machineRunningTitle", {time: reminder}),
|
||||
message: i18n.t("screens.proxiwash.notifications.machineRunningBody", {number: machineID}),
|
||||
id: id.toString(),
|
||||
date: reminderDate,
|
||||
});
|
||||
|
@ -59,8 +59,8 @@ function createNotifications(machineID: string, date: Date) {
|
|||
console.log("Setting up notifications for ", date);
|
||||
|
||||
PushNotification.localNotificationSchedule({
|
||||
title: i18n.t("proxiwashScreen.notifications.machineFinishedTitle"),
|
||||
message: i18n.t("proxiwashScreen.notifications.machineFinishedBody", {number: machineID}),
|
||||
title: i18n.t("screens.proxiwash.notifications.machineFinishedTitle"),
|
||||
message: i18n.t("screens.proxiwash.notifications.machineFinishedBody", {number: machineID}),
|
||||
id: machineID,
|
||||
date: date,
|
||||
});
|
||||
|
|
|
@ -1,482 +0,0 @@
|
|||
{
|
||||
"screens": {
|
||||
"home": "Home",
|
||||
"planning": "Events",
|
||||
"planningDisplayScreen": "Event details",
|
||||
"clubDisplayScreen": "Club details",
|
||||
"feedDisplayScreen": "Details",
|
||||
"clubsAbout": "Clubs",
|
||||
"amicaleAbout": "Contact",
|
||||
"amicaleWebsite": "Amicale's website",
|
||||
"proxiwash": "Proxiwash",
|
||||
"services": "Services",
|
||||
"proximo": "Proximo",
|
||||
"proximoArticles": "Articles",
|
||||
"menuSelf": "RU Menu",
|
||||
"settings": "Settings",
|
||||
"availableRooms": "Available rooms",
|
||||
"bib": "Bib'Box",
|
||||
"bluemind": "INSA Mails",
|
||||
"ent": "INSA ENT",
|
||||
"about": "About",
|
||||
"debug": "Debug",
|
||||
"login": "Login",
|
||||
"logout": "Logout",
|
||||
"profile": "Profile",
|
||||
"vote": "Elections",
|
||||
"scanner": "Scanotron 3000",
|
||||
"feedback": "Feedback",
|
||||
"insaAccount": "INSA Account",
|
||||
"equipmentList": "Equipment Booking",
|
||||
"equipmentLend": "Book",
|
||||
"equipmentConfirm": "Confirmation"
|
||||
},
|
||||
"intro": {
|
||||
"slideMain": {
|
||||
"title": "Welcome to CAMPUS",
|
||||
"text": "The new app to use during your coffee break to get updates on the campus life!"
|
||||
},
|
||||
"slideEvents": {
|
||||
"title": "Stay up to date",
|
||||
"text": "CAMPUS allows you to be aware of any event occurring on the campus, from pancake sales to Enfoiros concerts!"
|
||||
},
|
||||
"slideProxiwash": {
|
||||
"title": "Never forget your laundry",
|
||||
"text": "CAMPUS will inform you on the availability of washing machines and will remind you just before yours finishes!"
|
||||
},
|
||||
"slidePlanex": {
|
||||
"title": "Planex",
|
||||
"text": "Lookup your next course on CAMPUS with a mobile friendly timetable"
|
||||
},
|
||||
"slideRU": {
|
||||
"title": "RU Menu",
|
||||
"text": "For the hungry, check this week's menu!"
|
||||
},
|
||||
"slideServices": {
|
||||
"title": "More services!",
|
||||
"text": "You can do much more with CAMPUS, explore the app to find out"
|
||||
},
|
||||
"slideDone": {
|
||||
"title": "Made by a student",
|
||||
"text": "This app is the work of one student (with some help here and there), so any feedback is appreciated!"
|
||||
},
|
||||
"updateSlide0": {
|
||||
"title": "New in this update!",
|
||||
"text": "Faster than ever and easier to use!\nThis update includes lots of changes to improve your experience.\nUse the brand new feedback button on the home screen to talk to the developer!"
|
||||
},
|
||||
"updateSlide1": {
|
||||
"title": "Improved Planex!",
|
||||
"text": "You now have access to new controls, improved display, and you can also mark groups as favorites."
|
||||
},
|
||||
"updateSlide2": {
|
||||
"title": "Scanotron 3000!",
|
||||
"text": "Say hello to Scanotron 3000!\nAvailable from the Qr-Code button on the home screen, it will help you get information about clubs and events around the campus.\n(Useless right now but we have hope for next year)"
|
||||
},
|
||||
"updateSlide3": {
|
||||
"title": "Amicale Account!",
|
||||
"text": "You can now connect to your Amicale INSAT account from within the app! See all available clubs and more to come!\nClick on the login button from the home screen."
|
||||
},
|
||||
"aprilFoolsSlide": {
|
||||
"title": "New in this update!",
|
||||
"text": "We heard you, you don't like the new design and colors, so we changed them!\nLove."
|
||||
},
|
||||
"buttons": {
|
||||
"next": "Next",
|
||||
"skip": "Skip",
|
||||
"done": "Done"
|
||||
}
|
||||
},
|
||||
"settingsScreen": {
|
||||
"generalCard": "General",
|
||||
"nightMode": "Night Mode",
|
||||
"nightModeSubOn": "Your eyes are at peace",
|
||||
"nightModeSubOff": "Your eyes are burning",
|
||||
"nightModeAuto": "Follow system dark mode",
|
||||
"startScreen": "Start Screen",
|
||||
"startScreenSub": "Select which screen to start the app on",
|
||||
"proxiwashNotifReminder": "Machine running reminder",
|
||||
"proxiwashNotifReminderSub": "How many minutes before",
|
||||
"information": "Information"
|
||||
},
|
||||
"homeScreen": {
|
||||
"listUpdated": "List updated!",
|
||||
"listUpdateFail": "Error while updating list",
|
||||
"servicesButton": "More services",
|
||||
"newsFeed": "Campus News",
|
||||
"dashboard": {
|
||||
"seeMore": "Click to see more",
|
||||
"todayEventsTitle": "Today's events",
|
||||
"todayEventsSubtitleNA": "No events today",
|
||||
"todayEventsSubtitle": " event coming today",
|
||||
"todayEventsSubtitlePlural": " events coming today",
|
||||
"amicaleTitle": "The Amicale",
|
||||
"amicaleConnect": "Login",
|
||||
"amicaleConnected": "See available services"
|
||||
},
|
||||
"loginBanner": {
|
||||
"login": "Login",
|
||||
"later": "Later",
|
||||
"title": "Welcome, you!",
|
||||
"message": "Login to your Amicale account to get access to more services!\n\nYou will still be able to login later."
|
||||
}
|
||||
},
|
||||
"aboutScreen": {
|
||||
"buttonDesc": "Information about the app and its creator",
|
||||
"appstore": "See on the Appstore",
|
||||
"playstore": "See on the Playstore",
|
||||
"changelog": "Changelog",
|
||||
"license": "License",
|
||||
"debug": "Debug",
|
||||
"team": "Team",
|
||||
"author": "Author and maintainer",
|
||||
"authorMail": "Send an email",
|
||||
"additionalDev": "Development help",
|
||||
"technologies": "Technologies",
|
||||
"reactNative": "Made with React Native",
|
||||
"expo": "Built with Expo",
|
||||
"libs": "Libraries used"
|
||||
},
|
||||
"proximoScreen": {
|
||||
"emptyList": "Empty List",
|
||||
"article": "Article",
|
||||
"articles": "Articles",
|
||||
"sortOrder": "Sort by",
|
||||
"sortName": "Name",
|
||||
"sortNameReverse": "Name (reverse)",
|
||||
"sortPrice": "Price",
|
||||
"sortPriceReverse": "Price (reverse)",
|
||||
"listUpdated": "Article list updated!",
|
||||
"listUpdateFail": "Error while updating article list",
|
||||
"loading": "Loading...",
|
||||
"inStock": "in stock",
|
||||
"description": "The Proximo is your small grocery store maintained by students directly on the campus. Open every day from 18h30 to 19h30, we welcome you when you are short on pastas or sodas ! Different products for different problems, everything at cost price. You can pay by Lydia or cash.",
|
||||
"openingHours": "Openning Hours",
|
||||
"paymentMethods": "Payment Methods",
|
||||
"paymentMethodsDescription": "Cash or Lydia",
|
||||
"search": "Search",
|
||||
"all": "All"
|
||||
},
|
||||
"proxiwashScreen": {
|
||||
"dryer": "Dryer",
|
||||
"dryers": "Dryers",
|
||||
"washer": "Washer",
|
||||
"washers": "Washers",
|
||||
"min": "min",
|
||||
"listUpdated": "Machines state updated",
|
||||
"listUpdateFail": "Error while updating machines state",
|
||||
"error": "Could not update machines state. Pull down to retry.",
|
||||
"loading": "Loading...",
|
||||
"description": "This is the washing service operated by Promologis for INSA's residences (We don't mind if you do not live on the campus and you do your laundry here). The room is right next to the R2, with 3 dryers and 9 washers, is open 7d/7 24h/24 ! Here you can check their availability ! You can bring your own detergent, use the one given on site or buy it at the Proximo (cheaper than the one given by the machines ). You can pay by credit card or cash.",
|
||||
"informationTab": "Information",
|
||||
"paymentTab": "Payment",
|
||||
"tariffs": "Tariffs",
|
||||
"washersTariff": "3€ the washer + 0.80€ with detergent.",
|
||||
"dryersTariff": "0.35€ for 5min of dryer usage.",
|
||||
"paymentMethods": "Payment Methods",
|
||||
"paymentMethodsDescription": "Cash up until 10€.\nCredit Card also accepted.",
|
||||
"washerProcedure": "Put your laundry in the tumble without tamping it and by respecting charge limits.\n\nClose the machine's door.\n\nChoose a program using one of the four favorite program buttons.\n\nPay to the command central, then press the START button on the machine.\n\nWhen the program is finished, the screen indicates 'Programme terminé', press the yellow button to open the lid and retrieve your laundry.",
|
||||
"washerTips": "Program 'blanc/couleur': 6kg of dry laundry (cotton linen, linen, underwear, sheets, jeans, towels).\n\nProgram 'non repassable': 3,5 kg of dry laundry (synthetic fibre linen, cotton and polyester mixed).\n\nProgram 'fin 30°C': 2,5 kg of dry laundry (delicate linen in synthetic fibres).\n\nProgram 'laine 30°C': 2,5 kg of dry laundry (wool textiles).",
|
||||
"dryerProcedure": "Put your laundry in the tumble without tamping it and by respecting charge limits.\n\nClose the machine's door.\n\nChoose a program using one of the four favorite program buttons.\n\nPay to the command central, then press the START button on the machine.",
|
||||
"dryerTips": "The advised dryer length is 35 minutes for 14 kg of laundry. You can choose a shorter length if the dryer is not fully charged.",
|
||||
"procedure": "Procedure",
|
||||
"tips": "Tips",
|
||||
"enableNotificationsTip": "Click on a running machine to enable notifications!\n\nYou will never forget your laundry again.",
|
||||
"numAvailable": "available",
|
||||
"numAvailablePlural": "available",
|
||||
"bannerTitle": "Notifications!",
|
||||
"bannerButton": "Got it!",
|
||||
"modal": {
|
||||
"enableNotifications": "Notify me",
|
||||
"disableNotifications": "Stop notifications",
|
||||
"ok": "OK",
|
||||
"cancel": "Cancel",
|
||||
"finished": "This machine is finished. If you started it, you can get back your laundry.",
|
||||
"ready": "This machine is empty and ready to use.",
|
||||
"running": "This machine has been started at %{start} and will end at %{end}.\n\nRemaining time: %{remaining} min.\nProgram: %{program}",
|
||||
"runningNotStarted": "This machine is ready but not started. Please make sure you pressed the start button.",
|
||||
"broken": "This machine is out of order and cannot be used. Thank you for your comprehension.",
|
||||
"error": "There has been an error and we are unable to get information from this machine. Sorry for the inconvenience.",
|
||||
"unknown": "This machine is in an unknown state. Sorry for the inconvenience.",
|
||||
"notificationErrorTitle": "Error",
|
||||
"notificationErrorDescription": "Impossible to create notifications. Please make sure you enabled notifications then restart the app."
|
||||
},
|
||||
"states": {
|
||||
"finished": "FINISHED",
|
||||
"ready": "READY",
|
||||
"running": "RUNNING",
|
||||
"runningNotStarted": "NOT STARTED",
|
||||
"broken": "OUT OF ORDER",
|
||||
"error": "ERROR",
|
||||
"unknown": "UNKNOWN"
|
||||
},
|
||||
"notifications": {
|
||||
"machineFinishedTitle": "Laundry Ready",
|
||||
"machineFinishedBody": "The machine n°{{number}} is finished and your laundry is ready to pickup",
|
||||
"machineRunningTitle": "Laundry running: {{time}} minutes left",
|
||||
"machineRunningBody": "The machine n°{{number}} is still running"
|
||||
}
|
||||
},
|
||||
"planexScreen": {
|
||||
"enableStartScreenTitle": "Come here often?",
|
||||
"enableStartScreenMessage": "Set it as default screen!\n\nCampus will start on Planex so you never miss a class. Click on the button bellow to navigate to the settings page.",
|
||||
"enableStartOK": "Yes please!",
|
||||
"enableStartCancel": "Later",
|
||||
"noGroupSelected": "No group selected. Please select your group using the big beautiful red button bellow.",
|
||||
"favorites": "Favorites"
|
||||
},
|
||||
"availableRoomScreen": {
|
||||
"normalRoom": "Work",
|
||||
"computerRoom": "Computer",
|
||||
"bibRoom": "Bib'Box"
|
||||
},
|
||||
"profileScreen": {
|
||||
"personalInformation": "Personal information",
|
||||
"noData": "No data",
|
||||
"editInformation": "Edit Information",
|
||||
"clubs": "Your clubs",
|
||||
"clubsSubtitle": "Click on a club to show its information",
|
||||
"isMember": "Member",
|
||||
"isManager": "Manager",
|
||||
"membership": "Membership Fee",
|
||||
"membershipSubtitle": "Allows you to take part in various activities",
|
||||
"membershipPayed": "Payed",
|
||||
"membershipNotPayed": "Not payed",
|
||||
"welcomeTitle": "Welcome %{name}!",
|
||||
"welcomeDescription": "This is your Amicale INSA Toulouse personal space. Bellow are the current services you can access thanks to your account. Feels empty? You're right and we plan on fixing that, so stay tuned!",
|
||||
"welcomeFeedback": "We plan on doing more! If you have any suggestions or found bugs, please tell us by clicking the button bellow."
|
||||
},
|
||||
"scannerScreen": {
|
||||
"errorPermission": "Scanotron 3000 needs access to the camera in order to scan QR codes.\nThe camera will never be used for any other purpose.",
|
||||
"buttonPermission": "Grant camera access",
|
||||
"errorTitle": "QR code invalid",
|
||||
"errorMessage": "The QR code scanned could not be recognised, please make sure it is valid.",
|
||||
"helpButton": "What can I scan?",
|
||||
"helpTitle": "How to use Scanotron 3000",
|
||||
"helpMessage": "Find Campus QR codes posted by clubs and events, scan them and get instant access to detailed information!"
|
||||
},
|
||||
"loginScreen": {
|
||||
"title": "Amicale account",
|
||||
"subtitle": "Please enter your credentials",
|
||||
"email": "Email",
|
||||
"emailError": "Please enter a valid email",
|
||||
"password": "Password",
|
||||
"passwordError": "Please enter a password",
|
||||
"login": "Login",
|
||||
"resetPassword": "Forgot Password",
|
||||
"whyAccountTitle": "Why have an account?",
|
||||
"whyAccountSub": "What can you do wth an account",
|
||||
"whyAccountParagraph": "An Amicale account allows you to take part in several activities around campus. You can join a club, or even create your own!",
|
||||
"whyAccountParagraph2": "Logging into your Amicale account on the app will allow you to see all available clubs on the campus, vote for the upcoming elections, and more to come!",
|
||||
"noAccount": "No Account? Go to the Amicale's building during open hours to create one."
|
||||
},
|
||||
"errors": {
|
||||
"title": "Error!",
|
||||
"badCredentials": "Email or password invalid.",
|
||||
"badToken": "You are not logged in. Please login and try again.",
|
||||
"noConsent": "You did not give your consent for data processing to the Amicale.",
|
||||
"tokenSave": "Could not save session token. Please contact support.",
|
||||
"badInput": "Invalid input. Please try again.",
|
||||
"forbidden": "You do not have access to this data.",
|
||||
"connectionError": "Network error. Please check your internet connection.",
|
||||
"serverError": "Server error. Please contact support.",
|
||||
"unknown": "Unknown error. Please contact support."
|
||||
},
|
||||
"clubs": {
|
||||
"clubList": "Club list",
|
||||
"managers": "Managers",
|
||||
"managersSubtitle": "These people make the club live",
|
||||
"managersUnavailable": "This club has no one :(",
|
||||
"categories": "Categories",
|
||||
"categoriesFilterMessage": "Click on a category to filter the list",
|
||||
"clubContact": "Contact the club",
|
||||
"amicaleContact": "Contact the Amicale",
|
||||
"invalidClub": "Could not find the club. Please make sure the club you are trying to access is valid.",
|
||||
"about": {
|
||||
"text": "The clubs, making the campus live, with more than sixty clubs offering various activities! From the philosophy club to the PABI (Production Artisanale de Bière Insaienne), without forgetting the multiple music and dance clubs, you will surely find an activity that suits you!",
|
||||
"title": "A question ?",
|
||||
"subtitle": "Ask the Amicale",
|
||||
"message": "You have a question concerning the clubs?\nYou want to revive or create a club?\nContact the Amicale at the following address:"
|
||||
}
|
||||
},
|
||||
"amicaleAbout": {
|
||||
"title": "A question ?",
|
||||
"subtitle": "Ask the Amicale",
|
||||
"message": "You want to revive a club?\nYou want to start a new project?\nHere are al the contacts you need! Do not hesitate to write a mail or send a message to the Amicale's Facebook page!",
|
||||
"roles": {
|
||||
"interSchools": "Inter Schools",
|
||||
"culture": "Culture",
|
||||
"animation": "Animation",
|
||||
"clubs": "Clubs",
|
||||
"event": "Events",
|
||||
"tech": "Technique",
|
||||
"communication": "Communication",
|
||||
"intraSchools": "Alumni / IAT",
|
||||
"publicRelations": "Public Relations"
|
||||
}
|
||||
},
|
||||
"voteScreen": {
|
||||
"select": {
|
||||
"title": "Elections open",
|
||||
"subtitle": "Vote now!",
|
||||
"sendButton": "Send Vote",
|
||||
"dialogTitle": "Send Vote?",
|
||||
"dialogTitleLoading": "Sending vote...",
|
||||
"dialogMessage": "Are you sure you want to send your vote? You will not be able to change it."
|
||||
},
|
||||
"tease": {
|
||||
"title": "Elections incoming",
|
||||
"subtitle": "Be ready to vote!",
|
||||
"message": "Vote start:"
|
||||
},
|
||||
"wait": {
|
||||
"titleSubmitted": "Vote submitted!",
|
||||
"titleEnded": "Votes closed",
|
||||
"subtitle": "Waiting for results...",
|
||||
"messageSubmitted": "Vote submitted successfully.",
|
||||
"messageVoted": "Thank you for your participation.",
|
||||
"messageDate": "Results available:",
|
||||
"messageDateUndefined": "Results will be available shortly"
|
||||
},
|
||||
"results": {
|
||||
"title": "Results",
|
||||
"subtitle": "Available until:",
|
||||
"totalVotes": "Total votes:",
|
||||
"votes": "votes"
|
||||
},
|
||||
"title": {
|
||||
"title": "The Elections",
|
||||
"subtitle": "Why your vote is important",
|
||||
"paragraph1": "The Amicale's elections is the right moment for you to choose the next team, which will handle different projects on the campus, help organizing your favorite events, animate the campus life during the whole year, and relay your ideas to the administration, so that your campus life is the most enjoyable possible!\nYour turn to make a change!\uD83D\uDE09",
|
||||
"paragraph2": "Note: If there is only one list, it is still important to vote to show your support, so that the administration knows the current list is supported by students. It is always a plus when taking difficult decisions! \uD83D\uDE09"
|
||||
}
|
||||
},
|
||||
"dialog": {
|
||||
"ok": "OK",
|
||||
"yes": "Yes",
|
||||
"cancel": "Cancel",
|
||||
"disconnect": {
|
||||
"title": "Disconnect",
|
||||
"titleLoading": "Disconnecting...",
|
||||
"message": "Are you sure you want to disconnect from your Amicale account?"
|
||||
}
|
||||
},
|
||||
"general": {
|
||||
"loading": "Loading...",
|
||||
"retry": "Retry",
|
||||
"networkError": "Unable to contact servers. Make sure you are connected to Internet.",
|
||||
"goBack": "Go Back",
|
||||
"goForward": "Go Forward",
|
||||
"openInBrowser": "Open in Browser",
|
||||
"notAvailable": "Not available"
|
||||
},
|
||||
"date": {
|
||||
"daysOfWeek": {
|
||||
"monday": "Monday",
|
||||
"tuesday": "Tuesday",
|
||||
"wednesday": "Wednesday",
|
||||
"thursday": "Thursday",
|
||||
"friday": "Friday",
|
||||
"saturday": "Saturday",
|
||||
"sunday": "Sunday"
|
||||
},
|
||||
"monthsOfYear": {
|
||||
"january": "January",
|
||||
"february": "February",
|
||||
"march": "March",
|
||||
"april": "April",
|
||||
"may": "May",
|
||||
"june": "June",
|
||||
"july": "July",
|
||||
"august": "August",
|
||||
"september": "September",
|
||||
"october": "October",
|
||||
"november": "November",
|
||||
"december": "December"
|
||||
}
|
||||
},
|
||||
"game": {
|
||||
"title": "Game",
|
||||
"pause": "Game Paused",
|
||||
"pauseMessage": "The game is paused",
|
||||
"resume": "Resume",
|
||||
"restart": {
|
||||
"text": "Restart",
|
||||
"confirm": "Are you sure you want to restart?",
|
||||
"confirmMessage": "You will lose you progress, continue?",
|
||||
"confirmYes": "Yes",
|
||||
"confirmNo": "No"
|
||||
},
|
||||
"gameOver": {
|
||||
"text": "Game Over",
|
||||
"score": "Score: ",
|
||||
"level": "Level: ",
|
||||
"time": "Time: ",
|
||||
"exit": "leave Game"
|
||||
}
|
||||
},
|
||||
"servicesScreen": {
|
||||
"amicale": "The Amicale",
|
||||
"students": "Student services",
|
||||
"insa": "INSA services",
|
||||
"notLoggedIn": "Not logged in",
|
||||
"descriptions": {
|
||||
"clubs": "See info about your favorite club and discover new ones",
|
||||
"profile": "See your personal information",
|
||||
"amicaleWebsite": "See more information on the website",
|
||||
"vote": "Vote for the upcoming elections",
|
||||
"proximo": "Check the store's stock",
|
||||
"wiketud": "Read useful info about classes and campus life",
|
||||
"elusEtudiants": "The students in contact with the administration",
|
||||
"tutorInsa": "Give and take part in tutorials by students",
|
||||
"map": "Find your way around the campus",
|
||||
"self": "Check the RU menu",
|
||||
"availableRooms": "See how many rooms are free",
|
||||
"bib": "Book a Bib'Box for project work",
|
||||
"mails": "Check your INSA mails",
|
||||
"ent": "See your grades",
|
||||
"insaAccount": "See your information and change your password",
|
||||
"equipment": "Book a BBQ or other equipment"
|
||||
},
|
||||
"mascot": {
|
||||
"title": "So handy!",
|
||||
"message": "There a lot of thing you can do with Campus!\n\nHere is a list of every service provided by the app.",
|
||||
"button": "Thx buddy"
|
||||
}
|
||||
},
|
||||
"planningScreen": {
|
||||
"invalidEvent": "Could not find the event. Please make sure the event you are trying to access is valid.",
|
||||
"mascotTitle": "Let's party!",
|
||||
"mascotMessage": "At the INSA, it's not all about classes!\n\nIf you want to see new people, this page is just for you. Here you will find the list of every event organised by students!",
|
||||
"mascotButton": "Thx!"
|
||||
},
|
||||
"feedbackScreen": {
|
||||
"bugs": "Report Bugs",
|
||||
"bugsSubtitle": "Did you find a bug? Let us know!",
|
||||
"bugsDescription": "Reporting bugs helps us make the app better. To do so, use one of the buttons below and be as precise as possible when describing your problem!",
|
||||
"feedback": "Feedback",
|
||||
"feedbackSubtitle": "Let us know what you think!",
|
||||
"feedbackDescription": "Do you have a feature you want to be added/changed/removed, want to give your opinion on the app or simply chat with the dev? Use one of the links below!",
|
||||
"contactMeans": "Using Gitea is recommended, to use it simply login with your INSA account.",
|
||||
"homeButtonTitle": "Feedback/Bug report",
|
||||
"homeButtonSubtitle": "Contact the devs"
|
||||
},
|
||||
"equipmentScreen": {
|
||||
"title": "Equipment booking",
|
||||
"message": "Thanks to the Amicale, students have access to some equipment like BBQs and others. To book one of those items, click the equipment of your choice in the list bellow, enter your lend dates, then come around the Amicale to claim it and give your bail.",
|
||||
"bail": "Bail: %{cost}€",
|
||||
"available": "Available %{date}",
|
||||
"today": "today",
|
||||
"tomorrow": "tomorrow",
|
||||
"thisMonth": "the %{date}",
|
||||
"otherMonth": "the %{date} of %{month}",
|
||||
"otherYear": "the %{date} of %{month} %{year}",
|
||||
"bookingDay": "Booked for %{date}",
|
||||
"bookingPeriod": "Booked from %{begin} to %{end}",
|
||||
"booking": "Click on the calendar to set the start and end dates",
|
||||
"bookButton": "Book selected dates",
|
||||
"dialogTitle": "Confirm booking?",
|
||||
"dialogTitleLoading": "Sending your booking...",
|
||||
"dialogMessage": "Are you sure you want to confirm your booking?\n\nYou will then be able to claim the selected equipment at the Amicale for the duration of your booking in exchange of a bail.",
|
||||
"bookingConfirmedMessage": "Do not forget to come by the Amicale to give your bail in exchange of the equipment."
|
||||
}
|
||||
}
|
|
@ -1,468 +0,0 @@
|
|||
{
|
||||
"screens": {
|
||||
"home": "Accueil",
|
||||
"planning": "Événements",
|
||||
"planningDisplayScreen": "Détails",
|
||||
"clubDisplayScreen": "Détails",
|
||||
"feedDisplayScreen": "Détails",
|
||||
"clubsAbout": "Les Clubs",
|
||||
"amicaleAbout": "Contact",
|
||||
"amicaleWebsite": "Site de l'Amicale",
|
||||
"proxiwash": "Proxiwash",
|
||||
"services": "Services",
|
||||
"proximo": "Proximo",
|
||||
"proximoArticles": "Articles",
|
||||
"menuSelf": "Menu du RU",
|
||||
"settings": "Paramètres",
|
||||
"availableRooms": "Salles dispo",
|
||||
"bib": "Bib'Box",
|
||||
"bluemind": "Mails INSA",
|
||||
"ent": "ENT INSA",
|
||||
"about": "À Propos",
|
||||
"debug": "Debug",
|
||||
"login": "Se Connecter",
|
||||
"logout": "Se Déconnecter",
|
||||
"profile": "Profil",
|
||||
"vote": "Élections",
|
||||
"scanner": "Scanotron 3000",
|
||||
"feedback": "Votre avis",
|
||||
"insaAccount": "Compte INSA",
|
||||
"equipmentList": "Réservation Matériel",
|
||||
"equipmentLend": "Réserver"
|
||||
},
|
||||
"intro": {
|
||||
"slideMain": {
|
||||
"title": "Bienvenue sur CAMPUS",
|
||||
"text": "La nouvelle appli à consulter pendant la pause café pour être au courant de la vie du campus !"
|
||||
},
|
||||
"slideEvents": {
|
||||
"title": "Restez informés",
|
||||
"text": "CAMPUS vous permet d'être au courant de tous les événements qui ont lieu sur le campus, de la vente de crêpes jusqu'aux concerts enfoiros !"
|
||||
},
|
||||
"slideProxiwash": {
|
||||
"title": "N'oubliez plus votre linge !",
|
||||
"text": "CAMPUS vous informe de la disponibilité des machines et vous permet d'être notifié lorsque la vôtre se termine bientôt !"
|
||||
},
|
||||
"slidePlanex": {
|
||||
"title": "Planex",
|
||||
"text": "Vérifiez votre prochain cours sur CAMPUS avec un emploi du temps adapté mobile"
|
||||
},
|
||||
"slideRU": {
|
||||
"title": "Menu du RU",
|
||||
"text": "Pour ceux qui ont faim, vérifiez le menu du RU de la semaine !"
|
||||
},
|
||||
"slideServices": {
|
||||
"title": "Encore plus de services !",
|
||||
"text": "CAMPUS vous permet de faire bien plus, explorez l'appli pour savoir quoi"
|
||||
},
|
||||
"slideDone": {
|
||||
"title": "Fait par un étudiant",
|
||||
"text": "Cette appli à été réalisée par un seul étudiant (avec un peu d'aide par-ci par-là), donc tous les retours sont les bienvenus !"
|
||||
},
|
||||
"updateSlide0": {
|
||||
"title": "Nouveau dans cette mise à jour !",
|
||||
"text": "Plus rapide que jamais et plus simple à utiliser !\nCette mise à jour contient de nombreux changements pour améliorer votre expérience.\nUtilisez le tout nouveau bouton de Feedback pour parler directement au développeur!"
|
||||
},
|
||||
"updateSlide1": {
|
||||
"title": "Planex tout beau !",
|
||||
"text": "Vous avez maintenant accès à de nouveaux contrôles, un affichage amélioré, et vous pouvez marquer des groupes en favoris."
|
||||
},
|
||||
"updateSlide2": {
|
||||
"title": "Scanotron 3000 !",
|
||||
"text": "Dites bonjour à Scanotron 3000 !\nDisponible depuis le bouton Qr-Code sur le menu principal, il vous aidera à avoir des informations sur les clubs et les événements du campus.\n(Inutile tout de suite mais on verra l'année pro)"
|
||||
},
|
||||
"updateSlide3": {
|
||||
"title": "Compte Amicale !",
|
||||
"text": "Vous pouvez maintenant vous connecter à votre compte Amicale depuis l'appli ! Accédez à la liste des clubs et plus à venir !\nCliquez sur le bouton Se Connecter dans le menu principal."
|
||||
},
|
||||
"aprilFoolsSlide": {
|
||||
"title": "Nouveau dans cette mise à jour !",
|
||||
"text": "Nous vous avons entendu, vous n'aimez pas le nouveau design et couleurs, alors on les as changés !\nLa bise."
|
||||
},
|
||||
"buttons": {
|
||||
"next": "Suivant",
|
||||
"skip": "Passer",
|
||||
"done": "Commencer"
|
||||
}
|
||||
},
|
||||
"settingsScreen": {
|
||||
"generalCard": "Général",
|
||||
"nightMode": "Mode Nuit",
|
||||
"nightModeSubOn": "Vos yeux vous remercient",
|
||||
"nightModeSubOff": "Vos yeux brulent",
|
||||
"nightModeAuto": "Mode nuit système",
|
||||
"startScreen": "Écran de démarrage",
|
||||
"startScreenSub": "Choisissez l'écran utilisé au démarrage",
|
||||
"proxiwashNotifReminder": "Rappel de machine en cours",
|
||||
"proxiwashNotifReminderSub": "Combien de minutes avant",
|
||||
"information": "Informations"
|
||||
},
|
||||
"homeScreen": {
|
||||
"listUpdated": "List mise à jour!",
|
||||
"listUpdateFail": "Erreur lors de la mise à jour de la liste",
|
||||
"servicesButton": "Plus de services",
|
||||
"newsFeed": "Nouvelles du campus",
|
||||
"dashboard": {
|
||||
"seeMore": "Cliquez pour plus d'infos",
|
||||
"todayEventsTitle": "Événements aujourd'hui",
|
||||
"todayEventsSubtitleNA": "Pas d'événement",
|
||||
"todayEventsSubtitle": " événement aujourd'hui",
|
||||
"todayEventsSubtitlePlural": " événements aujourd'hui",
|
||||
"amicaleTitle": "L'Amicale",
|
||||
"amicaleConnect": "Se connecter",
|
||||
"amicaleConnected": "Voir les services disponibles"
|
||||
},
|
||||
"loginBanner": {
|
||||
"login": "Se Connecter",
|
||||
"later": "Plus Tard",
|
||||
"message": "Connectez-vous à votre compte Amicale pour profiter de plus de services !"
|
||||
}
|
||||
|
||||
},
|
||||
"aboutScreen": {
|
||||
"buttonDesc": "Informations sur l'appli et son créateur",
|
||||
"appstore": "Voir sur l'Appstore",
|
||||
"playstore": "Voir sur le Playstore",
|
||||
"changelog": "Historique des modifications",
|
||||
"license": "Licence",
|
||||
"debug": "Debug",
|
||||
"team": "Équipe",
|
||||
"author": "Auteur et mainteneur",
|
||||
"authorMail": "Envoyer un mail",
|
||||
"additionalDev": "Aide au développement",
|
||||
"technologies": "Technologies",
|
||||
"reactNative": "Créé avec React Native",
|
||||
"expo": "Compilé avec Expo",
|
||||
"libs": "Librairies utilisées"
|
||||
},
|
||||
"proximoScreen": {
|
||||
"emptyList": "Liste Vide",
|
||||
"article": "Article",
|
||||
"articles": "Articles",
|
||||
"sortOrder": "Trier par :",
|
||||
"sortName": "Nom",
|
||||
"sortNameReverse": "Nom (inversé)",
|
||||
"sortPrice": "Prix",
|
||||
"sortPriceReverse": "Prix (inversé)",
|
||||
"listUpdated": "Liste d'articles mise à jour !",
|
||||
"listUpdateFail": "Erreur lors de la mise à jour de la list d'articles",
|
||||
"loading": "Chargement...",
|
||||
"inStock": "en stock",
|
||||
"description": "Le Proximo c’est ta petite épicerie étudiante tenue par les étudiants directement sur le campus. Ouverte tous les jours de 18h30 à 19h30, nous t’accueillons et te sauvons quand tu n’as plus de pâtes ou de diluant ! Différents produits pour différentes galères, le tout à prix coûtant. Tu peux payer par Lydia ou par espèce.",
|
||||
"openingHours": "Horaires d'ouverture",
|
||||
"paymentMethods": "Moyens de Paiement",
|
||||
"paymentMethodsDescription": "Espèce ou Lydia",
|
||||
"search": "Rechercher",
|
||||
"all": "Tout"
|
||||
},
|
||||
"proxiwashScreen": {
|
||||
"dryer": "Sèche-Linge",
|
||||
"dryers": "Sèche-Linges",
|
||||
"washer": "Lave-Linge",
|
||||
"washers": "Lave-Linges",
|
||||
"min": "min",
|
||||
"listUpdated": "État des machines mis à jour",
|
||||
"listUpdateFail": "Erreur lors de la mise à jour de l'état des machines",
|
||||
"error": "Impossible de mettre a jour l'état des machines. Tirez vers le bas pour réessayer.",
|
||||
"loading": "Chargement...",
|
||||
"description": "C'est le service de laverie proposé par promologis pour les résidences INSA (On t'en voudra pas si tu loges pas sur le campus et que tu fais ta machine ici). Le local situé au pied du R2 avec ses 3 sèche-linges et 9 machines est ouvert 7J/7 24h/24 ! Ici tu peux vérifier leur disponibilité ! Tu peux amener ta lessive, la prendre sur place ou encore mieux l'acheter au Proximo (moins chère qu'à la laverie directement). Tu peux payer par CB ou espèces.",
|
||||
"informationTab": "Informations",
|
||||
"paymentTab": "Paiement",
|
||||
"tariffs": "Tarifs",
|
||||
"washersTariff": "3€ la machine + 0.80€ avec la lessive.",
|
||||
"dryersTariff": "0.35€ pour 5min de sèche linge.",
|
||||
"paymentMethods": "Moyens de Paiement",
|
||||
"paymentMethodsDescription": "Toute monnaie jusqu'à 10€.\nCarte bancaire acceptée.",
|
||||
"washerProcedure": "Déposer le linge dans le tambour sans le tasser et en respectant les charges.\n\nFermer la porte de l'appareil.\n\nSélectionner un programme avec l'une des quatre touches de programme favori standard.\n\nAprès avoir payé à la centrale de commande, appuyer sur le bouton marqué START du lave-linge.\n\nDès que le programme est terminé, l’afficheur indique 'Programme terminé', appuyer sur le bouton jaune d’ouverture du hublot pour récupérer le linge.",
|
||||
"washerTips": "Programme blanc/couleur : 6kg de linge sec (textiles en coton, lin, linge de corps, draps, jeans,serviettes de toilettes).\n\nProgramme nonrepassable : 3,5 kg de linge sec (textiles en fibres synthétiques, cotonet polyester mélangés).\n\nProgramme fin 30°C : 2,5 kg de linge sec (textiles délicats en fibres synthétiques, rayonne).\n\nProgramme laine 30°C : 2,5 kg de linge sec (textiles en laine et lainages lavables).",
|
||||
"dryerProcedure": "Déposer le linge dans le tambour sans le tasser et en respectant les charges.\n\nFermer la porte de l'appareil.\n\nSélectionner un programme avec l'une des quatre touches de programme favori standard.\n\nAprès avoir payé à la centrale de commande, appuyer sur le bouton marqué START du lave-linge.",
|
||||
"dryerTips": "La durée conseillée est de 35 minutes pour 14kg de linge. Vous pouvez choisir une durée plus courte si le sèche-linge n'est pas chargé.",
|
||||
"procedure": "Procédure",
|
||||
"tips": "Conseils",
|
||||
"enableNotificationsTip": "Cliquez sur une machine en cours pour activer les notifications",
|
||||
"numAvailable": "disponible",
|
||||
"numAvailablePlural": "disponibles",
|
||||
"bannerButton": "Compris !",
|
||||
"modal": {
|
||||
"enableNotifications": "Me Notifier",
|
||||
"disableNotifications": "Désactiver les notifications",
|
||||
"ok": "OK",
|
||||
"cancel": "Annuler",
|
||||
"finished": "Cette machine est terminée. Si vous l'avez démarrée, vous pouvez récupérer votre linge.",
|
||||
"ready": "Cette machine est vide et prête à être utilisée.",
|
||||
"running": "Cette machine a démarré à %{start} et terminera à %{end}.\n\nTemps restant : %{remaining} min.\nProgramme: %{program}",
|
||||
"runningNotStarted": "Cette machine est prête mais n'est pas démarrée. Assurez vous de bien avoir appuyé sur le bouton start.",
|
||||
"broken": "Cette machine est hors service. Merci pour votre compréhension.",
|
||||
"error": "Il y a eu une erreur et il est impossible de récupérer les informations de cette machine. Veuillez nous excuser pour le gène occasionnée.",
|
||||
"unknown": "Cette machine est dans un état inconnu. Veuillez nous excuser pour ce problème.",
|
||||
"notificationErrorTitle": "Erreur",
|
||||
"notificationErrorDescription": "Impossible de créer les notifications. Merci de vérifier que vous avez activé les notifications puis redémarrez l'appli."
|
||||
},
|
||||
"states": {
|
||||
"finished": "TERMINÉ",
|
||||
"ready": "DISPONIBLE",
|
||||
"running": "EN COURS",
|
||||
"runningNotStarted": "NON DÉMARRÉE",
|
||||
"broken": "HORS SERVICE",
|
||||
"error": "ERREUR",
|
||||
"unknown": "INCONNU"
|
||||
},
|
||||
"notifications": {
|
||||
"machineFinishedTitle": "Linge prêt",
|
||||
"machineFinishedBody": "La machine n°{{number}} est terminée et votre linge est prêt à être récupéré",
|
||||
"machineRunningTitle": "Machine en cours: {{time}} minutes restantes",
|
||||
"machineRunningBody": "La machine n°{{number}} n'est pas encore terminée"
|
||||
}
|
||||
},
|
||||
"planexScreen": {
|
||||
"enableStartScreen": "Vous venez souvent ici ? Démarrez l'appli sur cette page!",
|
||||
"enableStartOK": "Oui svp!",
|
||||
"enableStartCancel": "Plus tard",
|
||||
"noGroupSelected": "Pas de groupe sélectionné. Merci de choisir un groupe avec le beau bouton rouge ci-dessous.",
|
||||
"favorites": "Favoris"
|
||||
},
|
||||
"availableRoomScreen": {
|
||||
"normalRoom": "Travail",
|
||||
"computerRoom": "Ordi",
|
||||
"bibRoom": "Bib'Box"
|
||||
},
|
||||
"profileScreen": {
|
||||
"personalInformation": "Informations Personnelles",
|
||||
"noData": "Pas de données",
|
||||
"editInformation": "Modifier les informations",
|
||||
"clubs": "Vos clubs",
|
||||
"clubsSubtitle": "Cliquez sur un club pour afficher ses informations",
|
||||
"isMember": "Membre",
|
||||
"isManager": "Responsable",
|
||||
"membership": "Cotisation",
|
||||
"membershipSubtitle": "Permet de participer à diverses activités",
|
||||
"membershipPayed": "Payée",
|
||||
"membershipNotPayed": "Non payée",
|
||||
"welcomeTitle": "Bonjour %{name} !",
|
||||
"welcomeDescription": "Ceci est votre espace personnel Amicale INSA Toulouse. Vous trouverez ci-dessous les services disponibles avec votre compte. Un peu vide ? Vous avez raison et nous allons essayer de corriger ça, donc restez à jour !",
|
||||
"welcomeFeedback": "Nous allons essayer de proposer plus de services ! Si vous avez des suggestions, ou avez trouvé des bugs, merci de nous contacter avec le bouton ci-dessous."
|
||||
|
||||
},
|
||||
"scannerScreen": {
|
||||
"errorPermission": "Scanotron 3000 a besoin d'accéder à la caméra pour scanner des QR codes.\nLa caméra ne sera jamais utilisée autrement.",
|
||||
"buttonPermission": "Autoriser l'accès à la caméra",
|
||||
"errorTitle": "QR code invalide",
|
||||
"errorMessage": "Le QR code scannée n'a pas été reconnu. Merci de vérifier sa validité.",
|
||||
"helpButton": "Quoi scanner ?",
|
||||
"helpTitle": "Comment utiliser Scanotron 3000",
|
||||
"helpMessage": "Trouvez des QR codes Campus affichés par des clubs ou des respo d'évenements, scannez les et accédez à des informations détaillées !"
|
||||
},
|
||||
"loginScreen": {
|
||||
"title": "Compte Amicale",
|
||||
"subtitle": "Entrez vos identifiants",
|
||||
"email": "Email",
|
||||
"emailError": "Merci d'entrer un email valide",
|
||||
"password": "Mot de passe",
|
||||
"passwordError": "Merci d'entrer un mot de passe",
|
||||
"login": "Connexion",
|
||||
"resetPassword": "Mdp oublié",
|
||||
"whyAccountTitle": "Un compte ?",
|
||||
"whyAccountSub": "Ce qu'un compte vous apporte",
|
||||
"whyAccountParagraph": "Un compte Amicale vous donne la possibilité de participer à diverses activités sur le campus. Vous pouvez rejoindre des clubs ou même créer le votre !",
|
||||
"whyAccountParagraph2": "Vous connecter à votre compte Amicale sur l'appli vous permettra de voir tous les clubs en activité, de voter pour les prochaines élections, et plus à venir !",
|
||||
"noAccount": "Pas de compte ? Passez à l'Amicale pendant une perm pour en créer un."
|
||||
},
|
||||
"errors": {
|
||||
"title": "Erreur !",
|
||||
"badCredentials": "Email ou mot de passe invalide.",
|
||||
"badToken": "Vous n'êtes pas connecté. Merci de vous connecter puis réessayez.",
|
||||
"noConsent": "Vous n'avez pas donné votre consentement pour l'utilisation de vos données personnelles.",
|
||||
"tokenSave": "Impossible de sauvegarder le token de session. Merci de contacter le support.",
|
||||
"badInput": "Entrée invalide. Merci de réessayer.",
|
||||
"forbidden": "Vous n'avez pas accès à cette information.",
|
||||
"connectionError": "Erreur de réseau. Merci de vérifier votre connexion Internet.",
|
||||
"serverError": "Erreur de serveur. Merci de contacter le support.",
|
||||
"unknown": "Erreur inconnue. Merci de contacter le support."
|
||||
},
|
||||
"clubs": {
|
||||
"clubList": "Liste des clubs",
|
||||
"managers": "Responsables",
|
||||
"managersSubtitle": "Ces personnes font vivre le club",
|
||||
"managersUnavailable": "Ce club est tout seul :(",
|
||||
"categories": "Catégories",
|
||||
"categoriesFilterMessage": "Cliquez sur une catégorie pour filtrer la liste",
|
||||
"clubContact": "Contacter le club",
|
||||
"amicaleContact": "Contacter l'Amicale",
|
||||
"invalidClub": "Impossible de trouver le club. Merci de vérifier que le club que vous voulez voir est valide.",
|
||||
"about": {
|
||||
"text": "Les clubs, c'est ce qui fait vivre le campus au quotidien, plus d'une soixantaine de clubs qui proposent des activités diverses et variées ! Du club Philosophie au PABI (Production Artisanale de Bière Insaienne), en passant par les multiples clubs de musique et de danse, vous trouverez forcément une activité qui vous permettra de vous épanouir sur le campus !",
|
||||
"title": "Une question ?",
|
||||
"subtitle": "Posez vos questions à l'Amicale",
|
||||
"message": "Vous avez question concernant les clubs ?\nVous voulez reprendre ou créer un club ?\nContactez les responsables au mail ci-dessous :"
|
||||
}
|
||||
},
|
||||
"amicaleAbout": {
|
||||
"title": "Une Question ?",
|
||||
"subtitle": "Posez vos questions à l'Amicale",
|
||||
"message": "Vous voulez reprendre un club ?\nVous voulez vous lancer dans un projet ?\nVoici tous les contacts de l'amicale ! N'hésitez pas à nous écrire par mail ou sur la page facebook de l'Amicale !",
|
||||
"roles": {
|
||||
"interSchools": "Inter Écoles",
|
||||
"culture": "Culture",
|
||||
"animation": "Animation",
|
||||
"clubs": "Clubs",
|
||||
"event": "Événements",
|
||||
"tech": "Technique",
|
||||
"communication": "Communication",
|
||||
"intraSchools": "Alumni / IAT",
|
||||
"publicRelations": "Relations Publiques"
|
||||
}
|
||||
},
|
||||
"voteScreen": {
|
||||
"select": {
|
||||
"title": "Élections ouvertes",
|
||||
"subtitle": "Votez maintenant !",
|
||||
"sendButton": "Envoyer votre vote",
|
||||
"dialogTitle": "Envoyer votre vote ?",
|
||||
"dialogTitleLoading": "Envoi du vote...",
|
||||
"dialogMessage": "Êtes vous sûr de vouloir envoyer votre vote ? Vous ne pourrez plus le changer."
|
||||
},
|
||||
"tease": {
|
||||
"title": "Les élections arrivent",
|
||||
"subtitle": "Préparez vous à voter !",
|
||||
"message": "Début des votes :"
|
||||
},
|
||||
"wait": {
|
||||
"titleSubmitted": "Vote envoyé !",
|
||||
"titleEnded": "Votes fermés",
|
||||
"subtitle": "Attente des résultats...",
|
||||
"messageSubmitted": "Votre vote a bien été envoyé.",
|
||||
"messageVoted": "Merci pour votre participation.",
|
||||
"messageDate": "Disponibilité des résultats :",
|
||||
"messageDateUndefined": "les résultats seront disponibles sous peu."
|
||||
},
|
||||
"results": {
|
||||
"title": "Résultats",
|
||||
"subtitle": "Disponibles jusqu'à :",
|
||||
"totalVotes": "Nombre total de votes :",
|
||||
"votes": "votes"
|
||||
},
|
||||
"title": {
|
||||
"title": "Les Élections",
|
||||
"subtitle": "Pourquoi votre vote est important",
|
||||
"paragraph1": "Les élections de l'amicale, c'est le moment pour vous de choisir la prochaine équipe qui portera les différents projets du campus, qui soutiendra les organisations de vos événements favoris, qui vous proposera des animations tout au long de l'année, et qui poussera vos idées à l’administration pour que la vie de campus soit des plus riches !\nAlors à vous de jouer ! \uD83D\uDE09",
|
||||
"paragraph2": "NB : Si par cas il n'y a qu'une liste qui se présente, il est important que tout le monde vote, afin qui la liste puisse montrer à l’administration que les INSAiens la soutiennent ! Ça compte toujours pour les décisions difficiles ! \uD83D\uDE09"
|
||||
}
|
||||
},
|
||||
"dialog": {
|
||||
"ok": "OK",
|
||||
"yes": "Oui",
|
||||
"cancel": "Annuler",
|
||||
"disconnect": {
|
||||
"title": "Déconnexion",
|
||||
"titleLoading": "Déconnexion...",
|
||||
"message": "Voulez vous vraiment vous déconnecter de votre compte Amicale ??"
|
||||
}
|
||||
},
|
||||
"general": {
|
||||
"loading": "Chargement...",
|
||||
"retry": "Réessayer",
|
||||
"networkError": "Impossible de contacter les serveurs. Assurez-vous d'être connecté à internet.",
|
||||
"goBack": "Suivant",
|
||||
"goForward": "Précédent",
|
||||
"openInBrowser": "Ouvrir dans le navigateur",
|
||||
"notAvailable": "Non disponible"
|
||||
},
|
||||
"date": {
|
||||
"daysOfWeek": {
|
||||
"monday": "Lundi",
|
||||
"tuesday": "Mardi",
|
||||
"wednesday": "Mercredi",
|
||||
"thursday": "Jeudi",
|
||||
"friday": "Vendredi",
|
||||
"saturday": "Samedi",
|
||||
"sunday": "Dimanche"
|
||||
},
|
||||
"monthsOfYear": {
|
||||
"january": "Janvier",
|
||||
"february": "Février",
|
||||
"march": "Mars",
|
||||
"april": "Avril",
|
||||
"may": "Mai",
|
||||
"june": "Juin",
|
||||
"july": "Juillet",
|
||||
"august": "Août",
|
||||
"september": "Septembre",
|
||||
"october": "Octobre",
|
||||
"november": "Novembre",
|
||||
"december": "Décembre"
|
||||
}
|
||||
},
|
||||
"game": {
|
||||
"title": "Jeu",
|
||||
"pause": "Pause",
|
||||
"pauseMessage": "Le jeu est en pause",
|
||||
"resume": "Continuer",
|
||||
"restart": {
|
||||
"text": "Redémarrer",
|
||||
"confirm": "Êtes vous sûr de vouloir redémarrer ?",
|
||||
"confirmMessage": "Tout votre progrès sera perdu, continuer ?",
|
||||
"confirmYes": "Oui",
|
||||
"confirmNo": "Non"
|
||||
},
|
||||
"gameOver": {
|
||||
"text": "Game Over",
|
||||
"score": "Score: ",
|
||||
"level": "Niveau: ",
|
||||
"time": "Temps: ",
|
||||
"exit": "Quitter"
|
||||
}
|
||||
},
|
||||
"servicesScreen": {
|
||||
"amicale": "L'Amicale",
|
||||
"students": "Services étudiants",
|
||||
"insa": "Services de l'INSA",
|
||||
"notLoggedIn": "Non connecté",
|
||||
"descriptions": {
|
||||
"clubs": "Voir les informations sur les clubs",
|
||||
"profile": "Voir vos informations personnelles",
|
||||
"amicaleWebsite": "Plus d'informations sur le site",
|
||||
"vote": "Votez pour les prochaines élections",
|
||||
"proximo": "Regardez le stock du Proximo",
|
||||
"wiketud": "Trouvez des informations utiles sur les cours et la vie du campus",
|
||||
"elusEtudiants": "Les étudiants en contact avec l'administration",
|
||||
"tutorInsa": "Donnez et bénéficiez de tutorats par d'autres étudiants",
|
||||
"map": "Trouvez votre chemin sur le campus",
|
||||
"self": "Regardez le menu du RU",
|
||||
"availableRooms": "Vérifiez les salles disponibles",
|
||||
"bib": "Réservez une Bib'Box pour les travaux de groupe",
|
||||
"mails": "Vérifiez vos mails INSA",
|
||||
"ent": "Retrouvez vos notes",
|
||||
"insaAccount": "Accédez à vos informations et modifiez votre mot de passe",
|
||||
"equipment": "Réservez un BBQ ou d'autre matériel"
|
||||
}
|
||||
},
|
||||
"planningScreen": {
|
||||
"invalidEvent": "Impossible de trouver l'événement. Merci de vérifier que l'événement que vous voulez voir est valide."
|
||||
},
|
||||
"feedbackScreen": {
|
||||
"bugs": "Rapporter des Bugs",
|
||||
"bugsSubtitle": "Vous avez trouvé un bug ?",
|
||||
"bugsDescription": "Rapporter les bugs nous aide à améliorer l'appli. Pour cela, merci d'utiliser un des boutons ci-dessous et de décrire votre problème le plus précisément possible !",
|
||||
"feedback": "Feedback",
|
||||
"feedbackSubtitle": "Dites nous ce que vous pensez !",
|
||||
"feedbackDescription": "Vous voulez voir une fonctionnalité ajoutée/modifiée/supprimée ? Vous voulez donner votre opinion sur l'appli ou simplement discuter avec le développeur ? Utilisez un des liens ci-dessous !",
|
||||
"contactMeans": "L'utilisation de Gitea est recommandée, pour l'utiliser, connectez vous avec vos identifiants INSA.",
|
||||
"homeButtonTitle": "Feedback/Bugs",
|
||||
"homeButtonSubtitle": "Contacter le développeur"
|
||||
},
|
||||
"equipmentScreen": {
|
||||
"title": "Réservation de Matériel",
|
||||
"message": "L'Amicale mets à disposition des étudiants du matériel comme des BBQ, des appareils à raclette et autres. Pour réserver l'un de ces formidables appareils, cliquez sur celui de votre choix dans la liste, indiquez les dates du prêt, puis passez à l'Amicale pour le récupérer et donner votre caution.",
|
||||
"bail": "Caution : %{cost}€",
|
||||
"availableAt": "Disponible à : %{date}",
|
||||
"available": "Disponible !",
|
||||
"booking": "Cliquez sur le calendrier pour choisir les dates de début et de fin de la réservation",
|
||||
"startDate": "Début: ",
|
||||
"endDate": "Fin: ",
|
||||
"notSet": "Non défini",
|
||||
"bookButton": "Choisir ces dates",
|
||||
"dialogTitle": "Confirmer la réservation ?",
|
||||
"dialogTitleLoading": "Envoi de la réservation...",
|
||||
"dialogMessage": "Êtes vous sûr de vouloir confirmer cette réservation?\n\nVous pourrez ensuite récupérer le matériel à l'Amicale pour la durée de votre reservation en échange d'une caution."
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue