From cfa600df83c00cc7a2ec46ae9f4a1ff24778db6c Mon Sep 17 00:00:00 2001 From: Pranshul Date: Tue, 22 Jul 2025 12:32:23 +0530 Subject: [PATCH] fixed overflowing / translation --- lib/helper/locale_helper.dart | 12 +++ lib/screens/languages_page.dart | 10 ++- lib/screens/locations.dart | 1 - lib/screens/settings_unit.dart | 110 +++++++++++++++++------ lib/widgets/current_conditions_card.dart | 3 +- 5 files changed, 103 insertions(+), 33 deletions(-) diff --git a/lib/helper/locale_helper.dart b/lib/helper/locale_helper.dart index 47a9a8f46..73455b01c 100644 --- a/lib/helper/locale_helper.dart +++ b/lib/helper/locale_helper.dart @@ -54,4 +54,16 @@ String localizePrecipUnit(String unit, Locale locale) { } } return unit; +} + +String localizeTempUnit(String unit, Locale locale) { + if (locale.languageCode == "zh") { + switch (unit) { + case 'Celsius': + return '摄氏度'; + case 'Fahrenheit': + return '华氏度'; + } + } + return unit; } \ No newline at end of file diff --git a/lib/screens/languages_page.dart b/lib/screens/languages_page.dart index ba1e3444c..4f0e4939c 100644 --- a/lib/screens/languages_page.dart +++ b/lib/screens/languages_page.dart @@ -89,6 +89,7 @@ class _LanguagesScreenState extends State { builder: (context, snapshot) { final progressMap = snapshot.data ?? {}; + return SliverList( delegate: SliverChildBuilderDelegate( (context, index) { @@ -373,6 +374,9 @@ Map getLanguageNames(Locale locale) { if (lang == 'cs' && country == 'CZ') { return {'native': 'Čeština', 'english': 'Czech'}; } + if (lang == 'ca' && country == 'ES') { + return {'native': 'Català', 'english': 'Catalan'}; + } if (lang == 'de' && country == 'DE') { return {'native': 'Deutsch', 'english': 'German'}; } @@ -457,9 +461,7 @@ Map getLanguageNames(Locale locale) { if (lang == 'zh' && country == 'TW') { return {'native': '繁體中文', 'english': 'Traditional Chinese'}; } - if (lang == 'ca' && country == 'ES') { - return {'native': 'Català', 'english': 'Catalan'}; - } + return {'native': '$lang${country != null ? "_$country" : ""}', 'english': 'Unknown'}; } @@ -489,6 +491,7 @@ String getLanguageCodeCrodwin(Locale locale) { if ([ 'az', // Azerbaijani 'cs', // Czech + 'ca' // Catalan 'de', // German 'el', // Greek 'fa', // Persian @@ -509,7 +512,6 @@ String getLanguageCodeCrodwin(Locale locale) { 'tr', // Turkish 'uk', // Ukrainian 'vi', // Vietnamese - 'ca' ].contains(lang)) { return lang; } diff --git a/lib/screens/locations.dart b/lib/screens/locations.dart index 3d2b152a5..bc38fd7a1 100644 --- a/lib/screens/locations.dart +++ b/lib/screens/locations.dart @@ -559,7 +559,6 @@ Widget buildDismissibleListView({Key? key}) { .replaceAll(' ', '_'); final box = await Hive.openBox('weatherMasterCache'); await box.delete(cacheKey); - _scaffoldMessengerKey.currentState?.showSnackBar( SnackBar( content: Text( diff --git a/lib/screens/settings_unit.dart b/lib/screens/settings_unit.dart index 08ad391d7..a79c14fab 100644 --- a/lib/screens/settings_unit.dart +++ b/lib/screens/settings_unit.dart @@ -4,6 +4,7 @@ import 'package:settings_tiles/settings_tiles.dart'; import '../utils/preferences_helper.dart'; import 'package:provider/provider.dart'; import '../notifiers/unit_settings_notifier.dart'; +import '../helper/locale_helper.dart'; class AppUnitsPage extends StatefulWidget { const AppUnitsPage({super.key}); @@ -13,16 +14,52 @@ class AppUnitsPage extends StatefulWidget { } class _AppUnitsPageState extends State { - final currentAqiMode = PreferencesHelper.getString("selectedAQIUnit") ?? "United States"; - final optionsAQI = { + + @override + Widget build(BuildContext context) { + + final currentAqiMode = PreferencesHelper.getString("selectedAQIUnit") ?? "United States"; + final currentTempMode = PreferencesHelper.getString("selectedTempUnit") ?? "Celsius"; + final currentWindMode = PreferencesHelper.getString("selectedWindUnit") ?? "Km/h"; + final currentVisibilityMode = PreferencesHelper.getString("selectedVisibilityUnit") ?? "Km"; + final currentPrecipMode = PreferencesHelper.getString("selectedPrecipitationUnit") ?? "mm"; + final currentPressureMode = PreferencesHelper.getString("selectedPressureUnit") ?? "hPa"; + + + final optionsAQI = { "United States": "united_states_aqi".tr(), "European": "european_aqi".tr() }; - @override - Widget build(BuildContext context) { - + final optionsTemp = { + "Celsius": localizeTempUnit("Celsius", context.locale), + "Fahrenheit": localizeTempUnit("Fahrenheit", context.locale) + }; + + final optionsWind = { + "Km/h": localizeWindUnit("Km/h", context.locale), + "Mph": localizeWindUnit("Mph", context.locale), + "M/s": localizeWindUnit("M/s", context.locale), + "Bft": localizeWindUnit("Bft", context.locale), + + }; + final optionsVisibility = { + "Km": localizeVisibilityUnit("Km", context.locale), + "Mile": localizeVisibilityUnit("Mile", context.locale), + }; + + final optionsPrecip = { + "mm": localizePrecipUnit("mm", context.locale), + "cm": localizePrecipUnit("cm", context.locale), + "in": localizePrecipUnit("in", context.locale), + }; + + final optionsPressure = { + "hPa": localizePressureUnit("hPa", context.locale), + "inHg": localizePrecipUnit("inHg", context.locale), + "mmHg": localizePrecipUnit("mmHg", context.locale) + }; @@ -45,12 +82,13 @@ class _AppUnitsPageState extends State { SettingSingleOptionTile( icon: Icon(Icons.device_thermostat), title: Text('temperature_unit'.tr()), - value: SettingTileValue(PreferencesHelper.getString("selectedTempUnit") ?? "Celsius"), + value: SettingTileValue(optionsTemp[currentTempMode == "Fahrenheit" ? "Fahrenheit" : "Celsius"]!), dialogTitle: 'temperature_unit'.tr(), - options: const ['Celsius', 'Fahrenheit'], - initialOption: PreferencesHelper.getString("selectedTempUnit") ?? "Celsius", + options: optionsTemp.values.toList(), + initialOption: optionsTemp[currentTempMode == "Fahrenheit" ? "Fahrenheit" : "Celsius"], onSubmitted: (value) { - context.read().updateTempUnit(value); + final selectedKey = optionsTemp.entries.firstWhere((e) => e.value == value).key; + context.read().updateTempUnit(selectedKey); setState(() { }); }, @@ -59,12 +97,19 @@ class _AppUnitsPageState extends State { SettingSingleOptionTile( icon: Icon(Icons.air), title: Text('wind_unit'.tr()), - value: SettingTileValue(PreferencesHelper.getString("selectedWindUnit") ?? "Km/h"), + value: SettingTileValue(optionsWind[currentWindMode == "Mph" ? "Mph" + : currentWindMode == "M/s" ? "M/s" + : currentWindMode == "Bft" ? "Bft" + : "Km/h"]!), dialogTitle: 'wind_unit'.tr(), - options: const ['Km/h', 'Mph', 'M/s', 'Bft'], - initialOption: PreferencesHelper.getString("selectedWindUnit") ?? "Km/h", + options: optionsWind.values.toList(), + initialOption: optionsWind[currentWindMode == "Mph" ? "Mph" + : currentWindMode == "M/s" ? "M/s" + : currentWindMode == "Bft" ? "Bft" + : "Km/h"], onSubmitted: (value) { - context.read().updateWindUnit(value); + final selectedKey = optionsWind.entries.firstWhere((e) => e.value == value).key; + context.read().updateWindUnit(selectedKey); setState(() { }); }, @@ -72,12 +117,13 @@ class _AppUnitsPageState extends State { SettingSingleOptionTile( icon: Icon(Icons.visibility), title: Text('visibility_unit'.tr()), - value: SettingTileValue(PreferencesHelper.getString("selectedVisibilityUnit") ?? "Km"), + value: SettingTileValue(optionsVisibility[currentVisibilityMode == "Mile" ? "Mile" : "Km"]!), dialogTitle: 'visibility_unit'.tr(), - options: const ['Km', 'Mile'], - initialOption: PreferencesHelper.getString("selectedVisibilityUnit") ?? "Km", + options: optionsVisibility.values.toList(), + initialOption: optionsVisibility[currentVisibilityMode == "Mile" ? "Mile" : "Km"], onSubmitted: (value) { - context.read().updateVisibilityUnit(value); + final selectedKey = optionsVisibility.entries.firstWhere((e) => e.value == value).key; + context.read().updateVisibilityUnit(selectedKey); setState(() { }); }, @@ -85,12 +131,17 @@ class _AppUnitsPageState extends State { SettingSingleOptionTile( icon: Icon(Icons.water_drop), title: Text('precipitation_unit'.tr()), - value: SettingTileValue(PreferencesHelper.getString("selectedPrecipitationUnit") ?? "mm"), + value: SettingTileValue(optionsPrecip[currentPrecipMode == "cm" ? "cm" + : currentPrecipMode == "in" ? "in" + : "mm"]!), dialogTitle: 'precipitation_unit'.tr(), - options: const ['mm', 'cm', 'in'], - initialOption: PreferencesHelper.getString("selectedPrecipitationUnit") ?? "mm", + options: optionsPrecip.values.toList(), + initialOption: optionsPrecip[currentPrecipMode == "cm" ? "cm" + : currentPrecipMode == "in" ? "in" + : "mm"], onSubmitted: (value) { - context.read().updatePrecipitationUnit(value); + final selectedKey = optionsPrecip.entries.firstWhere((e) => e.value == value).key; + context.read().updatePrecipitationUnit(selectedKey); setState(() { }); }, @@ -98,12 +149,19 @@ class _AppUnitsPageState extends State { SettingSingleOptionTile( icon: Icon(Icons.av_timer), title: Text('pressure_unit'.tr()), - value: SettingTileValue(PreferencesHelper.getString("selectedPressureUnit") ?? "hPa"), + // value: SettingTileValue(PreferencesHelper.getString("selectedPressureUnit") ?? "hPa"), + value: SettingTileValue(optionsPressure[currentPressureMode == "inHg" ? "inHg" + : currentPressureMode == "mmHg" ? "mmHg" + : "hPa"]!), dialogTitle: 'pressure_unit'.tr(), - options: const ['hPa', 'inHg', 'mmHg'], - initialOption: PreferencesHelper.getString("selectedPressureUnit") ?? "hPa", + // options: const ['hPa', 'inHg', 'mmHg'], + options: optionsPressure.values.toList(), + initialOption: optionsPressure[currentPressureMode == "inHg" ? "inHg" + : currentPressureMode == "mmHg" ? "mmHg" + : "hPa"], onSubmitted: (value) { - context.read().updatePressureUnit(value); + final selectedKey = optionsPressure.entries.firstWhere((e) => e.value == value).key; + context.read().updatePressureUnit(selectedKey); setState(() { }); }, @@ -124,12 +182,10 @@ class _AppUnitsPageState extends State { SettingSingleOptionTile( icon: Icon(Icons.waves), title: Text('aqi_type'.tr()), - // value: SettingTileValue(PreferencesHelper.getString("selectedAQIUnit") ?? "United States"), value: SettingTileValue(optionsAQI[currentAqiMode == "European" ? "European" : "United States"]!), dialogTitle: 'aqi_type'.tr(), // options: const ['United States', 'European'], options: optionsAQI.values.toList(), - // initialOption: PreferencesHelper.getString("selectedAQIUnit") ?? "United States", initialOption: optionsAQI[currentAqiMode == "European" ? "European" : "United States"], onSubmitted: (value) { final selectedKey = optionsAQI.entries.firstWhere((e) => e.value == value).key; diff --git a/lib/widgets/current_conditions_card.dart b/lib/widgets/current_conditions_card.dart index d4c507666..231986ddb 100644 --- a/lib/widgets/current_conditions_card.dart +++ b/lib/widgets/current_conditions_card.dart @@ -216,7 +216,8 @@ List gridItems = itemOrder.map((i) { ), child: Center(child: Text(widget.currentDewPoint == 0.0000001 ? '--' : "$dewpointConverted°", style: TextStyle(color: Theme.of(context).colorScheme.onTertiary, fontSize: 16))), ), - Text("dew_point".tr(), style: TextStyle(color: Theme.of(context).colorScheme.onSurface, fontWeight: FontWeight.w500)) + Flexible(child: + Text("dew_point".tr(), style: TextStyle(color: Theme.of(context).colorScheme.onSurface, fontWeight: FontWeight.w500), overflow: TextOverflow.ellipsis,)) ], ), )