Translate weather conditions to French for better display

Translate English weather descriptions to French in the weather widget for both current and previous year data, and add weather icons for previous year.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: d43bd811-9372-45a7-8ac9-4a954c0538e1
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/d43bd811-9372-45a7-8ac9-4a954c0538e1/nYabaNx
This commit is contained in:
michaelschal committed 2025-08-15 08:45:00 +00:00
1 parent 5f5da0bc77
commit 6628f1e670
3 files changed
+38 -6

No files matched your search

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

+37 -5
View File
@@ -21,7 +21,36 @@ interface WeatherResponse {
location: string;
}
const translateWeatherCondition = (condition: string): string => {
const conditionLower = condition.toLowerCase();
// Traductions complètes anglais -> français
if (conditionLower.includes('clear')) return 'Dégagé';
if (conditionLower.includes('sunny')) return 'Ensoleillé';
if (conditionLower.includes('fair')) return 'Beau temps';
if (conditionLower.includes('partly cloudy')) return 'Partiellement nuageux';
if (conditionLower.includes('cloudy')) return 'Nuageux';
if (conditionLower.includes('overcast')) return 'Couvert';
if (conditionLower.includes('rain')) {
if (conditionLower.includes('heavy')) return 'Pluie forte';
if (conditionLower.includes('light')) return 'Pluie légère';
return 'Pluie';
}
if (conditionLower.includes('shower')) return 'Averses';
if (conditionLower.includes('drizzle')) return 'Bruine';
if (conditionLower.includes('thunderstorm') || conditionLower.includes('thunder')) return 'Orage';
if (conditionLower.includes('snow')) {
if (conditionLower.includes('heavy')) return 'Neige forte';
if (conditionLower.includes('light')) return 'Neige légère';
return 'Neige';
}
if (conditionLower.includes('fog')) return 'Brouillard';
if (conditionLower.includes('mist')) return 'Brume';
if (conditionLower.includes('wind')) return 'Venteux';
// Si déjà en français, retourner tel quel
return condition;
};
const WeatherIcon = ({ condition, size = 20 }: { condition: string; size?: number }) => {
const iconClass = `h-${Math.floor(size/4)} w-${Math.floor(size/4)}`;
@@ -119,7 +148,7 @@ export default function WeatherWidget() {
{location.split(',')[0]}
</span>
<span className="text-xs text-slate-500 dark:text-slate-400">
{weather.currentYear?.condition || 'Inconnu'}
{translateWeatherCondition(weather.currentYear?.condition || 'Inconnu')}
</span>
</div>
</div>
@@ -140,14 +169,17 @@ export default function WeatherWidget() {
<>
<div className="h-8 w-px bg-slate-300 dark:bg-slate-600"></div>
<div className="text-center">
<div className="text-lg font-semibold text-slate-600 dark:text-slate-300">
{Math.round(previousTemp)}°
<div className="flex items-center justify-center gap-1 mb-1">
<WeatherIcon condition={weather.previousYear?.condition || ''} size={16} />
<div className="text-lg font-semibold text-slate-600 dark:text-slate-300">
{Math.round(previousTemp)}°
</div>
</div>
<div className="text-xs text-slate-500 dark:text-slate-400">
Année dernière
</div>
<div className="text-xs text-slate-400 dark:text-slate-500 mt-1">
{weather.previousYear?.condition || ''}
{translateWeatherCondition(weather.previousYear?.condition || '')}
</div>
</div>
</>
+1 -1
View File
@@ -2,4 +2,4 @@
# https://curl.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
#HttpOnly_localhost FALSE / FALSE 1755333603 connect.sid s%3AQqa7VC9Kmev2sSuyP6rb67zs4VszjTJP.RwnrDHc4pdPJyIwe93Hg9PTGpAF73AsiSmjdDq4MC4c
#HttpOnly_localhost FALSE / FALSE 1755333868 connect.sid s%3ASXoX5QR3PzEoabdE6kmVpS41nTbxgfBD.FrsSh7UcEUki0dMf4G%2BxKbZVB4nXKRMmG4JtXotjr7o