diff --git a/lib/app_configuration/view/app_configuration_page.dart b/lib/app_configuration/view/app_configuration_page.dart index f54a1d70..1b84ac19 100644 --- a/lib/app_configuration/view/app_configuration_page.dart +++ b/lib/app_configuration/view/app_configuration_page.dart @@ -73,9 +73,9 @@ class _AppConfigurationPageState extends State tabAlignment: TabAlignment.start, isScrollable: true, tabs: [ + Tab(text: l10n.generalTab), Tab(text: l10n.feedTab), Tab(text: l10n.advertisementsTab), - Tab(text: l10n.generalTab), ], ), ], @@ -143,7 +143,7 @@ class _AppConfigurationPageState extends State return TabBarView( controller: _tabController, children: [ - FeedConfigurationTab( + GeneralConfigurationTab( remoteConfig: remoteConfig, onConfigChanged: (newConfig) { context.read().add( @@ -151,7 +151,7 @@ class _AppConfigurationPageState extends State ); }, ), - AdvertisementsConfigurationTab( + FeedConfigurationTab( remoteConfig: remoteConfig, onConfigChanged: (newConfig) { context.read().add( @@ -159,7 +159,7 @@ class _AppConfigurationPageState extends State ); }, ), - GeneralConfigurationTab( + AdvertisementsConfigurationTab( remoteConfig: remoteConfig, onConfigChanged: (newConfig) { context.read().add( diff --git a/lib/app_configuration/widgets/article_ad_settings_form.dart b/lib/app_configuration/widgets/article_ad_settings_form.dart index 78b51521..cb7816f3 100644 --- a/lib/app_configuration/widgets/article_ad_settings_form.dart +++ b/lib/app_configuration/widgets/article_ad_settings_form.dart @@ -1,6 +1,7 @@ import 'package:core/core.dart'; import 'package:flutter/material.dart'; import 'package:flutter_news_app_web_dashboard_full_source_code/l10n/l10n.dart'; +import 'package:flutter_news_app_web_dashboard_full_source_code/shared/extensions/ad_type_l10n.dart'; import 'package:flutter_news_app_web_dashboard_full_source_code/shared/extensions/in_article_ad_slot_type_l10n.dart'; import 'package:ui_kit/ui_kit.dart'; @@ -97,7 +98,7 @@ class _ArticleAdSettingsFormState extends State .map( (type) => ButtonSegment( value: type, - label: Text(type.name), + label: Text(type.l10n(context)), ), ) .toList(), diff --git a/lib/app_configuration/widgets/feed_ad_settings_form.dart b/lib/app_configuration/widgets/feed_ad_settings_form.dart index 930df7ad..364fa671 100644 --- a/lib/app_configuration/widgets/feed_ad_settings_form.dart +++ b/lib/app_configuration/widgets/feed_ad_settings_form.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_news_app_web_dashboard_full_source_code/app_configuration/widgets/app_config_form_fields.dart'; import 'package:flutter_news_app_web_dashboard_full_source_code/l10n/app_localizations.dart'; import 'package:flutter_news_app_web_dashboard_full_source_code/l10n/l10n.dart'; +import 'package:flutter_news_app_web_dashboard_full_source_code/shared/extensions/ad_type_l10n.dart'; import 'package:flutter_news_app_web_dashboard_full_source_code/shared/extensions/app_user_role_l10n.dart'; import 'package:ui_kit/ui_kit.dart'; @@ -174,7 +175,7 @@ class _FeedAdSettingsFormState extends State .map( (type) => ButtonSegment( value: type, - label: Text(type.name), + label: Text(type.l10n(context)), ), ) .toList(), diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart index 4eb06129..af0210f1 100644 --- a/lib/l10n/app_localizations.dart +++ b/lib/l10n/app_localizations.dart @@ -2359,6 +2359,54 @@ abstract class AppLocalizations { /// In en, this message translates to: /// **'Local'** String get adPlatformTypeLocal; + + /// Tab title for Native Ads in local ads management. + /// + /// In en, this message translates to: + /// **'Native Ads'** + String get nativeAdsTab; + + /// Tab title for Banner Ads in local ads management. + /// + /// In en, this message translates to: + /// **'Banner Ads'** + String get bannerAdsTab; + + /// Tab title for Interstitial Ads in local ads management. + /// + /// In en, this message translates to: + /// **'Interstitial Ads'** + String get interstitialAdsTab; + + /// Tab title for Video Ads in local ads management. + /// + /// In en, this message translates to: + /// **'Video Ads'** + String get videoAdsTab; + + /// Label for Banner Ad Type. + /// + /// In en, this message translates to: + /// **'Banner'** + String get bannerAdType; + + /// Label for Native Ad Type. + /// + /// In en, this message translates to: + /// **'Native'** + String get nativeAdType; + + /// Label for Interstitial Ad Type. + /// + /// In en, this message translates to: + /// **'Interstitial'** + String get interstitialAdType; + + /// Label for Video Ad Type. + /// + /// In en, this message translates to: + /// **'Video'** + String get videoAdType; } class _AppLocalizationsDelegate diff --git a/lib/l10n/app_localizations_ar.dart b/lib/l10n/app_localizations_ar.dart index 366fccbb..78a5e35f 100644 --- a/lib/l10n/app_localizations_ar.dart +++ b/lib/l10n/app_localizations_ar.dart @@ -1263,4 +1263,28 @@ class AppLocalizationsAr extends AppLocalizations { @override String get adPlatformTypeLocal => 'محلي'; + + @override + String get nativeAdsTab => 'إعلانات أصلية'; + + @override + String get bannerAdsTab => 'إعلانات بانر'; + + @override + String get interstitialAdsTab => 'إعلانات بينية'; + + @override + String get videoAdsTab => 'إعلانات فيديو'; + + @override + String get bannerAdType => 'بانر'; + + @override + String get nativeAdType => 'أصلي'; + + @override + String get interstitialAdType => 'بيني'; + + @override + String get videoAdType => 'فيديو'; } diff --git a/lib/l10n/app_localizations_en.dart b/lib/l10n/app_localizations_en.dart index d3a8b32e..630517ef 100644 --- a/lib/l10n/app_localizations_en.dart +++ b/lib/l10n/app_localizations_en.dart @@ -1265,4 +1265,28 @@ class AppLocalizationsEn extends AppLocalizations { @override String get adPlatformTypeLocal => 'Local'; + + @override + String get nativeAdsTab => 'Native Ads'; + + @override + String get bannerAdsTab => 'Banner Ads'; + + @override + String get interstitialAdsTab => 'Interstitial Ads'; + + @override + String get videoAdsTab => 'Video Ads'; + + @override + String get bannerAdType => 'Banner'; + + @override + String get nativeAdType => 'Native'; + + @override + String get interstitialAdType => 'Interstitial'; + + @override + String get videoAdType => 'Video'; } diff --git a/lib/l10n/arb/app_ar.arb b/lib/l10n/arb/app_ar.arb index e0eac73c..a3d015c6 100644 --- a/lib/l10n/arb/app_ar.arb +++ b/lib/l10n/arb/app_ar.arb @@ -1581,5 +1581,37 @@ "adPlatformTypeLocal": "محلي", "@adPlatformTypeLocal": { "description": "اسم منصة الإعلانات المحلية للإعلانات المخصصة." + }, + "nativeAdsTab": "إعلانات أصلية", + "@nativeAdsTab": { + "description": "عنوان تبويب الإعلانات الأصلية في إدارة الإعلانات المحلية." + }, + "bannerAdsTab": "إعلانات بانر", + "@bannerAdsTab": { + "description": "عنوان تبويب إعلانات البانر في إدارة الإعلانات المحلية." + }, + "interstitialAdsTab": "إعلانات بينية", + "@interstitialAdsTab": { + "description": "عنوان تبويب الإعلانات البينية في إدارة الإعلانات المحلية." + }, + "videoAdsTab": "إعلانات فيديو", + "@videoAdsTab": { + "description": "عنوان تبويب إعلانات الفيديو في إدارة الإعلانات المحلية." + }, + "bannerAdType": "بانر", + "@bannerAdType": { + "description": "تسمية نوع إعلان البانر." + }, + "nativeAdType": "أصلي", + "@nativeAdType": { + "description": "تسمية نوع الإعلان الأصلي." + }, + "interstitialAdType": "بيني", + "@interstitialAdType": { + "description": "تسمية نوع الإعلان البيني." + }, + "videoAdType": "فيديو", + "@videoAdType": { + "description": "تسمية نوع إعلان الفيديو." } } \ No newline at end of file diff --git a/lib/l10n/arb/app_en.arb b/lib/l10n/arb/app_en.arb index 958213a1..4fed025a 100644 --- a/lib/l10n/arb/app_en.arb +++ b/lib/l10n/arb/app_en.arb @@ -1577,5 +1577,37 @@ "adPlatformTypeLocal": "Local", "@adPlatformTypeLocal": { "description": "The name of the Local ad platform for custom ads." + }, + "nativeAdsTab": "Native Ads", + "@nativeAdsTab": { + "description": "Tab title for Native Ads in local ads management." + }, + "bannerAdsTab": "Banner Ads", + "@bannerAdsTab": { + "description": "Tab title for Banner Ads in local ads management." + }, + "interstitialAdsTab": "Interstitial Ads", + "@interstitialAdsTab": { + "description": "Tab title for Interstitial Ads in local ads management." + }, + "videoAdsTab": "Video Ads", + "@videoAdsTab": { + "description": "Tab title for Video Ads in local ads management." + }, + "bannerAdType": "Banner", + "@bannerAdType": { + "description": "Label for Banner Ad Type." + }, + "nativeAdType": "Native", + "@nativeAdType": { + "description": "Label for Native Ad Type." + }, + "interstitialAdType": "Interstitial", + "@interstitialAdType": { + "description": "Label for Interstitial Ad Type." + }, + "videoAdType": "Video", + "@videoAdType": { + "description": "Label for Video Ad Type." } } \ No newline at end of file diff --git a/lib/local_ads_management/bloc/create_local_ads/create_local_ads_bloc.dart b/lib/local_ads_management/bloc/create_local_ads/create_local_ads_bloc.dart deleted file mode 100644 index 7e066d00..00000000 --- a/lib/local_ads_management/bloc/create_local_ads/create_local_ads_bloc.dart +++ /dev/null @@ -1,14 +0,0 @@ -import 'package:bloc/bloc.dart'; -import 'package:equatable/equatable.dart'; - -part 'create_local_ads_event.dart'; -part 'create_local_ads_state.dart'; - -class CreateLocalAdsBloc - extends Bloc { - CreateLocalAdsBloc() : super(CreateLocalAdsInitial()) { - on((event, emit) { - // TODO: implement event handler - }); - } -} diff --git a/lib/local_ads_management/bloc/create_local_ads/create_local_ads_event.dart b/lib/local_ads_management/bloc/create_local_ads/create_local_ads_event.dart deleted file mode 100644 index 56423124..00000000 --- a/lib/local_ads_management/bloc/create_local_ads/create_local_ads_event.dart +++ /dev/null @@ -1,8 +0,0 @@ -part of 'create_local_ads_bloc.dart'; - -sealed class CreateLocalAdsEvent extends Equatable { - const CreateLocalAdsEvent(); - - @override - List get props => []; -} diff --git a/lib/local_ads_management/bloc/create_local_ads/create_local_ads_state.dart b/lib/local_ads_management/bloc/create_local_ads/create_local_ads_state.dart deleted file mode 100644 index c8bcf068..00000000 --- a/lib/local_ads_management/bloc/create_local_ads/create_local_ads_state.dart +++ /dev/null @@ -1,10 +0,0 @@ -part of 'create_local_ads_bloc.dart'; - -sealed class CreateLocalAdsState extends Equatable { - const CreateLocalAdsState(); - - @override - List get props => []; -} - -final class CreateLocalAdsInitial extends CreateLocalAdsState {} diff --git a/lib/local_ads_management/bloc/update_local_ads/update_local_ads_bloc.dart b/lib/local_ads_management/bloc/update_local_ads/update_local_ads_bloc.dart deleted file mode 100644 index 5916ea00..00000000 --- a/lib/local_ads_management/bloc/update_local_ads/update_local_ads_bloc.dart +++ /dev/null @@ -1,14 +0,0 @@ -import 'package:bloc/bloc.dart'; -import 'package:equatable/equatable.dart'; - -part 'update_local_ads_event.dart'; -part 'update_local_ads_state.dart'; - -class UpdateLocalAdsBloc - extends Bloc { - UpdateLocalAdsBloc() : super(UpdateLocalAdsInitial()) { - on((event, emit) { - // TODO: implement event handler - }); - } -} diff --git a/lib/local_ads_management/bloc/update_local_ads/update_local_ads_event.dart b/lib/local_ads_management/bloc/update_local_ads/update_local_ads_event.dart deleted file mode 100644 index 9dee8d17..00000000 --- a/lib/local_ads_management/bloc/update_local_ads/update_local_ads_event.dart +++ /dev/null @@ -1,8 +0,0 @@ -part of 'update_local_ads_bloc.dart'; - -sealed class UpdateLocalAdsEvent extends Equatable { - const UpdateLocalAdsEvent(); - - @override - List get props => []; -} diff --git a/lib/local_ads_management/bloc/update_local_ads/update_local_ads_state.dart b/lib/local_ads_management/bloc/update_local_ads/update_local_ads_state.dart deleted file mode 100644 index 90cc889a..00000000 --- a/lib/local_ads_management/bloc/update_local_ads/update_local_ads_state.dart +++ /dev/null @@ -1,10 +0,0 @@ -part of 'update_local_ads_bloc.dart'; - -sealed class UpdateLocalAdsState extends Equatable { - const UpdateLocalAdsState(); - - @override - List get props => []; -} - -final class UpdateLocalAdsInitial extends UpdateLocalAdsState {} diff --git a/lib/local_ads_management/view/archived_local_ads_page.dart b/lib/local_ads_management/view/archived_local_ads_page.dart index 533c9be1..6e81215f 100644 --- a/lib/local_ads_management/view/archived_local_ads_page.dart +++ b/lib/local_ads_management/view/archived_local_ads_page.dart @@ -77,7 +77,7 @@ class _ArchivedLocalAdsViewState extends State<_ArchivedLocalAdsView> tabAlignment: TabAlignment.start, isScrollable: true, tabs: AdType.values - .map((type) => Tab(text: type.name.capitalize())) + .map((type) => Tab(text: type.l10n(context))) .toList(), ), ), diff --git a/lib/local_ads_management/view/local_ads_management_page.dart b/lib/local_ads_management/view/local_ads_management_page.dart index 974ce3bf..424ac213 100644 --- a/lib/local_ads_management/view/local_ads_management_page.dart +++ b/lib/local_ads_management/view/local_ads_management_page.dart @@ -153,7 +153,7 @@ class _LocalAdsManagementViewState extends State<_LocalAdsManagementView> tabAlignment: TabAlignment.start, isScrollable: true, tabs: LocalAdsManagementTab.values - .map((tab) => Tab(text: tab.name.capitalize())) + .map((tab) => Tab(text: tab.l10n(context))) .toList(), ), actions: [ diff --git a/lib/shared/extensions/ad_type_l10n.dart b/lib/shared/extensions/ad_type_l10n.dart new file mode 100644 index 00000000..7212dcfa --- /dev/null +++ b/lib/shared/extensions/ad_type_l10n.dart @@ -0,0 +1,21 @@ +import 'package:core/core.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_news_app_web_dashboard_full_source_code/l10n/l10n.dart'; + +/// Extension on [AdType] to provide localized descriptions. +extension AdTypeL10n on AdType { + /// Returns a localized string for the [AdType] enum value. + String l10n(BuildContext context) { + final l10n = context.l10n; + switch (this) { + case AdType.banner: + return l10n.bannerAdType; + case AdType.native: + return l10n.nativeAdType; + case AdType.interstitial: + return l10n.interstitialAdType; + case AdType.video: + return l10n.videoAdType; + } + } +} diff --git a/lib/shared/extensions/extensions.dart b/lib/shared/extensions/extensions.dart index 556f6dfc..6178668a 100644 --- a/lib/shared/extensions/extensions.dart +++ b/lib/shared/extensions/extensions.dart @@ -1,8 +1,10 @@ export 'ad_platform_type_l10n.dart'; +export 'ad_type_l10n.dart'; export 'app_user_role_l10n.dart'; export 'content_status_l10n.dart'; export 'feed_decorator_type_l10n.dart'; export 'in_article_ad_slot_type_l10n.dart'; export 'local_ad_to_ad_type.dart'; +export 'local_ads_management_tab_l10n.dart'; export 'source_type_l10n.dart'; export 'string_truncate.dart'; diff --git a/lib/shared/extensions/local_ads_management_tab_l10n.dart b/lib/shared/extensions/local_ads_management_tab_l10n.dart new file mode 100644 index 00000000..d099c0b7 --- /dev/null +++ b/lib/shared/extensions/local_ads_management_tab_l10n.dart @@ -0,0 +1,21 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_news_app_web_dashboard_full_source_code/l10n/l10n.dart'; +import 'package:flutter_news_app_web_dashboard_full_source_code/local_ads_management/bloc/local_ads_management_bloc.dart'; + +/// Extension on [LocalAdsManagementTab] to provide localized descriptions. +extension LocalAdsManagementTabL10n on LocalAdsManagementTab { + /// Returns a localized string for the [LocalAdsManagementTab] enum value. + String l10n(BuildContext context) { + final l10n = context.l10n; + switch (this) { + case LocalAdsManagementTab.native: + return l10n.nativeAdsTab; + case LocalAdsManagementTab.banner: + return l10n.bannerAdsTab; + case LocalAdsManagementTab.interstitial: + return l10n.interstitialAdsTab; + case LocalAdsManagementTab.video: + return l10n.videoAdsTab; + } + } +}