lingua 100% correta

This commit is contained in:
2026-05-05 16:14:14 +01:00
parent 771f4dd1da
commit fc030aef60
2 changed files with 44 additions and 9 deletions

View File

@@ -1037,10 +1037,10 @@ export default function App() {
<Badge variant="warning">{weatherData ? weatherData.name : t('todayIn')}</Badge> <Badge variant="warning">{weatherData ? weatherData.name : t('todayIn')}</Badge>
</div> </div>
<h3 className="text-5xl font-black tracking-tighter mb-4" style={{ color: 'white' }}> <h3 className="text-5xl font-black tracking-tighter mb-4" style={{ color: 'white' }}>
{weatherData ? `${weatherData.currentTemp}°C Atual • Média ${weatherData.avgTemp}°C` : t('weatherUpdate')} {weatherData ? t('weatherCurrentAvg').replace('{current}', weatherData.currentTemp).replace('{avg}', weatherData.avgTemp) : t('weatherUpdate')}
</h3> </h3>
<p className="text-lg font-medium max-w-lg leading-relaxed" style={{ color: 'rgba(255,255,255,0.8)' }}> <p className="text-lg font-medium max-w-lg leading-relaxed" style={{ color: 'rgba(255,255,255,0.8)' }}>
{weatherData ? `O dia de hoje tem máximas de ${weatherData.maxTemp}°C e mínimas de ${weatherData.minTemp}°C. ${t('weatherMsg')}` : t('weatherMsg')} {weatherData ? `${t('weatherForecastDesc').replace('{max}', weatherData.maxTemp).replace('{min}', weatherData.minTemp)} ${t('weatherMsg')}` : t('weatherMsg')}
</p> </p>
</div> </div>
<div className="mt-10 flex gap-4 items-center"> <div className="mt-10 flex gap-4 items-center">
@@ -1071,7 +1071,7 @@ export default function App() {
</div> </div>
</div> </div>
)) : ( )) : (
<p className="text-xs opacity-50 italic">Adicione cores aos seus itens.</p> <p className="text-xs opacity-50 italic">{t('addColorsToItems')}</p>
)} )}
</div> </div>
</Card> </Card>
@@ -1638,7 +1638,7 @@ export default function App() {
))} ))}
</div> </div>
<input type="hidden" name="color" value={itemColors.join(', ')} /> <input type="hidden" name="color" value={itemColors.join(', ')} />
{itemColors.length === 0 && <p className="text-[10px] text-red-500 uppercase tracking-widest font-black mt-2">Selecione pelo menos uma cor</p>} {itemColors.length === 0 && <p className="text-[10px] text-red-500 uppercase tracking-widest font-black mt-2">{t('selectOneColor')}</p>}
</div> </div>
<div className="space-y-4"> <div className="space-y-4">
<label className="text-[10px] font-black uppercase opacity-40 tracking-widest ml-1 text-inherit flex items-center gap-2"><ImageIcon size={12}/> {t('imageUrl')} ou Upload</label> <label className="text-[10px] font-black uppercase opacity-40 tracking-widest ml-1 text-inherit flex items-center gap-2"><ImageIcon size={12}/> {t('imageUrl')} ou Upload</label>
@@ -1653,12 +1653,12 @@ export default function App() {
/> />
<div className="flex items-center gap-4"> <div className="flex items-center gap-4">
<div className="h-px bg-gray-200 dark:bg-gray-700 flex-1"></div> <div className="h-px bg-gray-200 dark:bg-gray-700 flex-1"></div>
<span className="text-[10px] font-black uppercase tracking-widest opacity-30">OU</span> <span className="text-[10px] font-black uppercase tracking-widest opacity-30">{t('or')}</span>
<div className="h-px bg-gray-200 dark:bg-gray-700 flex-1"></div> <div className="h-px bg-gray-200 dark:bg-gray-700 flex-1"></div>
</div> </div>
<label className={`flex items-center justify-center gap-3 p-5 rounded-2xl cursor-pointer transition-all font-black text-[10px] uppercase tracking-widest border-2 border-dashed ${darkMode ? 'bg-gray-800 border-gray-700 hover:border-primary-500 hover:text-primary-400' : 'bg-gray-50 border-gray-200 hover:border-primary-400 hover:text-primary-600'}`}> <label className={`flex items-center justify-center gap-3 p-5 rounded-2xl cursor-pointer transition-all font-black text-[10px] uppercase tracking-widest border-2 border-dashed ${darkMode ? 'bg-gray-800 border-gray-700 hover:border-primary-500 hover:text-primary-400' : 'bg-gray-50 border-gray-200 hover:border-primary-400 hover:text-primary-600'}`}>
<ImageIcon size={16} /> <ImageIcon size={16} />
<span>Upload da Galeria / Ficheiros</span> <span>{t('uploadGallery')}</span>
<input type="file" accept="image/*" className="hidden" onChange={handleItemImageUpload} /> <input type="file" accept="image/*" className="hidden" onChange={handleItemImageUpload} />
</label> </label>
</div> </div>
@@ -1889,16 +1889,16 @@ export default function App() {
<div className="grid grid-cols-2 gap-4"> <div className="grid grid-cols-2 gap-4">
<label className="flex items-center gap-3 p-4 rounded-xl border border-gray-100 dark:border-gray-800 cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors"> <label className="flex items-center gap-3 p-4 rounded-xl border border-gray-100 dark:border-gray-800 cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors">
<input type="radio" name="type" value="Ideia/Sugestão" defaultChecked className="text-primary-600 focus:ring-primary-500" /> <input type="radio" name="type" value="Ideia/Sugestão" defaultChecked className="text-primary-600 focus:ring-primary-500" />
<span className="font-bold text-sm text-inherit">Ideia / Sugestão</span> <span className="font-bold text-sm text-inherit">{t('ideaSuggestion')}</span>
</label> </label>
<label className="flex items-center gap-3 p-4 rounded-xl border border-gray-100 dark:border-gray-800 cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors"> <label className="flex items-center gap-3 p-4 rounded-xl border border-gray-100 dark:border-gray-800 cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors">
<input type="radio" name="type" value="Bug/Erro" className="text-primary-600 focus:ring-primary-500" /> <input type="radio" name="type" value="Bug/Erro" className="text-primary-600 focus:ring-primary-500" />
<span className="font-bold text-sm text-inherit">Bug / Erro</span> <span className="font-bold text-sm text-inherit">{t('bugError')}</span>
</label> </label>
</div> </div>
<textarea name="message" required placeholder={t('writeMessage')} rows={4} className={`w-full p-4 rounded-xl border-none outline-none focus:ring-2 focus:ring-primary-500 font-bold resize-none ${darkMode ? 'bg-gray-800 text-white' : 'bg-gray-50'}`}></textarea> <textarea name="message" required placeholder={t('writeMessage')} rows={4} className={`w-full p-4 rounded-xl border-none outline-none focus:ring-2 focus:ring-primary-500 font-bold resize-none ${darkMode ? 'bg-gray-800 text-white' : 'bg-gray-50'}`}></textarea>
<button type="submit" className="w-full py-4 bg-primary-600 text-white rounded-xl font-black uppercase text-[10px] tracking-widest shadow-xl shadow-primary-600/30 hover:scale-[1.01] transition-all"> <button type="submit" className="w-full py-4 bg-primary-600 text-white rounded-xl font-black uppercase text-[10px] tracking-widest shadow-xl shadow-primary-600/30 hover:scale-[1.01] transition-all">
Enviar Mensagem {t('sendMessage')}
</button> </button>
</form> </form>
</Card> </Card>

View File

@@ -24,6 +24,8 @@ export const translations = {
favorites: "Favoritos", favorites: "Favoritos",
todayIn: "Hoje em Portugal", todayIn: "Hoje em Portugal",
weatherUpdate: "22°C - Ensolarado", weatherUpdate: "22°C - Ensolarado",
weatherCurrentAvg: "{current}°C Atual • Média {avg}°C",
weatherForecastDesc: "O dia de hoje tem máximas de {max}°C e mínimas de {min}°C.",
weatherMsg: "Está um dia fantástico! Recomendamos as tuas peças leves. Que tal um visual casual com as tuas sapatilhas favoritas?", weatherMsg: "Está um dia fantástico! Recomendamos as tuas peças leves. Que tal um visual casual com as tuas sapatilhas favoritas?",
exploreSuggestions: "Explorar Sugestões", exploreSuggestions: "Explorar Sugestões",
topColors: "Top Cores", topColors: "Top Cores",
@@ -181,6 +183,11 @@ export const translations = {
removeOutfitDay: "Remover Outfit deste Dia", removeOutfitDay: "Remover Outfit deste Dia",
noOutfitCreated: "Nenhum outfit criado", noOutfitCreated: "Nenhum outfit criado",
piecesShort: "peças", piecesShort: "peças",
editLook: "Editar Outfit",
uploadGallery: "Upload da Galeria / Ficheiros",
selectOneColor: "Selecione pelo menos uma cor",
addColorsToItems: "Adicione cores aos seus itens.",
or: "OU",
}, },
EN: { EN: {
loginModeIntro: "The Future of Your Style", loginModeIntro: "The Future of Your Style",
@@ -207,6 +214,8 @@ export const translations = {
favorites: "Favorites", favorites: "Favorites",
todayIn: "Today in Portugal", todayIn: "Today in Portugal",
weatherUpdate: "22°C - Sunny", weatherUpdate: "22°C - Sunny",
weatherCurrentAvg: "{current}°C Current • Average {avg}°C",
weatherForecastDesc: "Today has highs of {max}°C and lows of {min}°C.",
weatherMsg: "It's a fantastic day! We recommend your light pieces. How about a casual look with your favorite sneakers?", weatherMsg: "It's a fantastic day! We recommend your light pieces. How about a casual look with your favorite sneakers?",
exploreSuggestions: "Explore Suggestions", exploreSuggestions: "Explore Suggestions",
topColors: "Top Colors", topColors: "Top Colors",
@@ -364,6 +373,11 @@ export const translations = {
removeOutfitDay: "Remove Outfit from this Day", removeOutfitDay: "Remove Outfit from this Day",
noOutfitCreated: "No outfit created", noOutfitCreated: "No outfit created",
piecesShort: "pieces", piecesShort: "pieces",
editLook: "Edit Outfit",
uploadGallery: "Upload from Gallery / Files",
selectOneColor: "Select at least one color",
addColorsToItems: "Add colors to your items.",
or: "OR",
}, },
ES: { ES: {
loginModeIntro: "El Futuro de Tu Estilo", loginModeIntro: "El Futuro de Tu Estilo",
@@ -390,6 +404,8 @@ export const translations = {
favorites: "Favoritos", favorites: "Favoritos",
todayIn: "Hoy en Portugal", todayIn: "Hoy en Portugal",
weatherUpdate: "22°C - Soleado", weatherUpdate: "22°C - Soleado",
weatherCurrentAvg: "{current}°C Actual • Media {avg}°C",
weatherForecastDesc: "El día de hoy tiene máximas de {max}°C y mínimas de {min}°C.",
weatherMsg: "¡Es un día fantástico! Recomendamos tus piezas ligeras. ¿Qué tal un look casual con tus zapatillas favoritas?", weatherMsg: "¡Es un día fantástico! Recomendamos tus piezas ligeras. ¿Qué tal un look casual con tus zapatillas favoritas?",
exploreSuggestions: "Explorar Sugerencias", exploreSuggestions: "Explorar Sugerencias",
topColors: "Colores Principales", topColors: "Colores Principales",
@@ -547,6 +563,11 @@ export const translations = {
removeOutfitDay: "Quitar Outfit de este Día", removeOutfitDay: "Quitar Outfit de este Día",
noOutfitCreated: "Ningún outfit creado", noOutfitCreated: "Ningún outfit creado",
piecesShort: "piezas", piecesShort: "piezas",
editLook: "Editar Outfit",
uploadGallery: "Subir desde la Galería / Archivos",
selectOneColor: "Selecciona al menos un color",
addColorsToItems: "Añade colores a tus artículos.",
or: "O",
}, },
FR: { FR: {
loginModeIntro: "Le Futur de Ton Style", loginModeIntro: "Le Futur de Ton Style",
@@ -573,6 +594,8 @@ export const translations = {
favorites: "Favoris", favorites: "Favoris",
todayIn: "Aujourd'hui au Portugal", todayIn: "Aujourd'hui au Portugal",
weatherUpdate: "22°C - Ensoleillé", weatherUpdate: "22°C - Ensoleillé",
weatherCurrentAvg: "{current}°C Actuel • Moyenne {avg}°C",
weatherForecastDesc: "Aujourd'hui a des maximales de {max}°C et des minimales de {min}°C.",
weatherMsg: "C'est une journée fantastique ! Nous recommandons vos pièces légères. Que diriez-vous d'un look décontracté avec vos baskets préférées ?", weatherMsg: "C'est une journée fantastique ! Nous recommandons vos pièces légères. Que diriez-vous d'un look décontracté avec vos baskets préférées ?",
exploreSuggestions: "Explorer les Suggestions", exploreSuggestions: "Explorer les Suggestions",
topColors: "Couleurs Principales", topColors: "Couleurs Principales",
@@ -730,6 +753,11 @@ export const translations = {
removeOutfitDay: "Retirer l'Outfit de ce Jour", removeOutfitDay: "Retirer l'Outfit de ce Jour",
noOutfitCreated: "Aucun outfit créé", noOutfitCreated: "Aucun outfit créé",
piecesShort: "pièces", piecesShort: "pièces",
editLook: "Modifier l'Outfit",
uploadGallery: "Télécharger depuis la Galerie / Fichiers",
selectOneColor: "Sélectionnez au moins une couleur",
addColorsToItems: "Ajoutez des couleurs à vos articles.",
or: "OU",
}, },
DE: { DE: {
loginModeIntro: "Die Zukunft deines Stils", loginModeIntro: "Die Zukunft deines Stils",
@@ -756,6 +784,8 @@ export const translations = {
favorites: "Favoriten", favorites: "Favoriten",
todayIn: "Heute in Portugal", todayIn: "Heute in Portugal",
weatherUpdate: "22°C - Sonnig", weatherUpdate: "22°C - Sonnig",
weatherCurrentAvg: "{current}°C Aktuell • Durchschnitt {avg}°C",
weatherForecastDesc: "Der heutige Tag hat Höchstwerte von {max}°C und Tiefstwerte von {min}°C.",
weatherMsg: "Es ist ein fantastischer Tag! Wir empfehlen leichte Stücke. Wie wäre es mit einem lässigen Look mit deinen Lieblings-Sneakern?", weatherMsg: "Es ist ein fantastischer Tag! Wir empfehlen leichte Stücke. Wie wäre es mit einem lässigen Look mit deinen Lieblings-Sneakern?",
exploreSuggestions: "Vorschläge entdecken", exploreSuggestions: "Vorschläge entdecken",
topColors: "Top Farben", topColors: "Top Farben",
@@ -913,5 +943,10 @@ export const translations = {
removeOutfitDay: "Outfit von diesem Tag entfernen", removeOutfitDay: "Outfit von diesem Tag entfernen",
noOutfitCreated: "Kein Outfit erstellt", noOutfitCreated: "Kein Outfit erstellt",
piecesShort: "Stücke", piecesShort: "Stücke",
editLook: "Outfit bearbeiten",
uploadGallery: "Aus Galerie / Dateien hochladen",
selectOneColor: "Wähle mindestens eine Farbe",
addColorsToItems: "Füge deinen Artikeln Farben hinzu.",
or: "ODER",
} }
}; };