This commit is contained in:
Deep Koluguri 2026-04-06 00:59:31 -04:00
parent 6e19f57e27
commit b7b2aaf8a6
11 changed files with 2407 additions and 34 deletions

View File

@ -1,5 +0,0 @@
arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dart
output-class: AppLocalizations
output-dir: lib/l10n

View File

@ -99,7 +99,7 @@ class AppTheme {
), ),
), ),
cardTheme: CardThemeData( cardTheme: CardTheme(
elevation: 0, elevation: 0,
color: scheme.surfaceContainerHighest, color: scheme.surfaceContainerHighest,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(18.r)), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(18.r)),
@ -296,7 +296,7 @@ class AppTheme {
), ),
), ),
cardTheme: CardThemeData( cardTheme: CardTheme(
elevation: 0, elevation: 0,
color: scheme.surfaceContainerHighest, color: scheme.surfaceContainerHighest,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(18.r)), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(18.r)),

View File

@ -8,6 +8,7 @@ import '../../core/services/auth_service.dart';
import '../../core/services/api_service.dart'; import '../../core/services/api_service.dart';
import '../../core/utils/snackbar_util.dart'; import '../../core/utils/snackbar_util.dart';
import '../../l10n/app_localizations.dart'; import '../../l10n/app_localizations.dart';
import '../../l10n/l10n_x.dart';
String _themeModeLabel(AppLocalizations l10n) { String _themeModeLabel(AppLocalizations l10n) {
switch (ThemeController.to.themeMode) { switch (ThemeController.to.themeMode) {
@ -25,7 +26,7 @@ class SettingsPage extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final l10n = AppLocalizations.of(context); final l10n = context.l10n;
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: Text(l10n.settingsTitle), title: Text(l10n.settingsTitle),

View File

@ -0,0 +1,166 @@
{
"@memberWelcomeGreeting": {
"placeholders": {
"name": {}
}
},
"memberWelcomeGreeting": "Welcome, {name}!",
"ok": "OK",
"save": "Save",
"retry": "Retry",
"delete": "Delete",
"userLabel": "User",
"managerFallbackName": "Manager",
"snackTitleError": "Error",
"snackTitleSuccess": "Success",
"operationFailedShort": "Failed",
"failedLoadChitGroups": "Failed to load chit groups",
"chitfundCreatedSuccess": "Chitfund created successfully",
"failedCreateChitGroup": "Failed to create chit group",
"failedUpdateChitGroup": "Failed to update chit group",
"chitGroupDeletedSuccess": "Chit group deleted successfully",
"failedDeleteChitGroup": "Failed to delete chit group",
"failedLoadGroupDetails": "Failed to load group details",
"failedLoadGroupMembers": "Failed to load group members",
"memberAddedSuccess": "Member added successfully",
"failedAddMember": "Failed to add member",
"memberRemovedSuccess": "Member removed successfully",
"failedRemoveMember": "Failed to remove member",
"memberStatusUpdatedSuccess": "Member status updated successfully",
"failedUpdateMemberStatus": "Failed to update member status",
"failedLoadPayments": "Failed to load payments",
"paymentRecordedSuccess": "Payment recorded successfully",
"failedRecordPayment": "Failed to record payment",
"failedLoadGroupStatistics": "Failed to load group statistics",
"chitfundStartedSuccess": "Chitfund started successfully",
"failedStartChitGroup": "Failed to start chit group",
"failedLoadMonthlyDraws": "Failed to load monthly draws",
"failedCreateMonthlyDraw": "Failed to create monthly draw",
"failedLoadDrawStatistics": "Failed to load draw statistics",
"failedLoadFinancialData": "Failed to load financial data",
"signupFailedTitle": "Signup Failed",
"signupFailedGeneric": "Signup failed. Please try again.",
"loginFailedTitle": "Login Failed",
"loginFailedGeneric": "Login failed. Please try again.",
"passwordChangedSuccess": "Password changed successfully",
"failedChangePassword": "Failed to change password",
"stateSomethingWentWrong": "Something went wrong",
"emptyNoGroupsTitle": "No Chit Groups Yet",
"emptyNoGroupsMessage": "You haven't created any chit groups yet.\nCreate your first group or import an existing one!",
"emptyNoGroupsAction": "Create Group",
"emptyNoMembersTitle": "No Members Yet",
"emptyNoMembersMessage": "This group doesn't have any members yet.\nAdd members to get started!",
"emptyNoMembersAction": "Add Members",
"emptyNoPaymentsTitle": "No Payments Yet",
"emptyNoPaymentsMessage": "No payment records found.\nPayments will appear here once recorded.",
"emptyNoPaymentsAction": "Record Payment",
"emptyNoActivitiesTitle": "No Recent Activities",
"emptyNoActivitiesMessage": "Your recent activities will appear here.\nStart using the app to see updates!",
"emptyNoActivitiesAction": "Refresh",
"emptyNoResultsTitle": "No Results Found",
"emptyNoResultsMessage": "We couldn't find what you're looking for.\nTry adjusting your search or filters.",
"emptyNoResultsAction": "Clear Filters",
"emptyErrorTitle": "Oops! Something Went Wrong",
"emptyErrorMessage": "We encountered an error while loading data.\nPlease try again.",
"emptyErrorAction": "Retry",
"emptyNoInternetTitle": "No Internet Connection",
"emptyNoInternetMessage": "Please check your internet connection\nand try again.",
"emptyNoInternetAction": "Retry",
"dashboardTitle": "Dashboard",
"notificationsTooltip": "Notifications",
"recordingsTooltip": "View draw recordings",
"testDrawTooltip": "Test animated draw",
"chitFundManagerRole": "Chit Fund Manager",
"menuDashboard": "Dashboard",
"menuMyChitfunds": "My Chitfunds",
"menuMembers": "Members",
"menuPayments": "Payments",
"menuLotteryDraws": "Lottery Draws",
"menuReports": "Reports",
"welcomeBackTitle": "Welcome back!",
"welcomeBackSubtitle": "Here's what's happening with your chit funds today.",
"quickActionsTitle": "Quick Actions",
"qaCreateChitfundTitle": "Create New Chitfund",
"qaCreateChitfundSubtitle": "Start a new chit fund group",
"qaImportChitfundTitle": "Import Existing Chitfund",
"qaImportChitfundSubtitle": "Add a group that already started",
"qaViewAllChitfundsTitle": "View All Chitfunds",
"qaViewAllChitfundsSubtitle": "Manage your existing groups",
"qaManageMembersTitle": "Manage Members",
"qaManageMembersSubtitle": "Add or remove members",
"qaPaymentRecordsTitle": "Payment Records",
"qaPaymentRecordsSubtitle": "Track all transactions",
"sectionMyChitfunds": "My Chitfunds",
"viewAll": "View All",
"noChitFundsYetShort": "No chit funds yet",
"groupStatusActive": "Active",
"groupStatusForming": "Forming",
"groupStatusCompleted": "Completed",
"unnamedGroup": "Unnamed",
"actionRecord": "Record",
"actionDraw": "Draw",
"actionView": "View",
"actionManageGroup": "Manage Group",
"groupImportedMessage": "Group imported! Now add members and backfill past data.",
"groupImportedTitle": "Success",
"paymentsPageComingSoon": "Payments page will be implemented next",
"comingSoonTitle": "Coming Soon",
"pageMyChitfunds": "My Chitfunds",
"createNewGroupMenu": "Create New Group",
"importExistingGroupMenu": "Import Existing Group",
"appDisplayName": "LuckyChit",
"authLoginTagline": "Chit fund management that feels effortless.",
"authSignupScreenTitle": "Create account",
"authSignupTagline": "Set up your profile in under a minute.",
"labelMobileNumber": "Mobile number",
"labelMobileNumberRequired": "Mobile number *",
"labelPassword": "Password",
"labelPasswordRequired": "Password *",
"labelFullNameRequired": "Full name *",
"labelEmailOptional": "Email (optional)",
"labelAddressOptional": "Address (optional)",
"labelEmergencyContactOptional": "Emergency contact (optional)",
"labelConfirmPasswordRequired": "Confirm password *",
"validatorEnterMobile": "Please enter mobile number",
"validatorMobileTenDigits": "Mobile number must be 10 digits",
"validatorMobileDigitsOnly": "Mobile number must contain only digits",
"validatorEnterFullName": "Please enter your full name",
"validatorValidEmail": "Please enter a valid email address",
"validatorEmergencyTenDigits": "Emergency contact must be 10 digits",
"validatorEmergencyDigitsOnly": "Emergency contact must contain only digits",
"validatorEnterPasswordAuth": "Please enter password",
"validatorPasswordMinSixAuth": "Password must be at least 6 characters",
"validatorConfirmPassword": "Please confirm password",
"validatorPasswordsMismatch": "Passwords do not match",
"tooltipShowPassword": "Show password",
"tooltipHidePassword": "Hide password",
"signInButton": "Sign in",
"createAccountButton": "Create account",
"alreadyHaveAccount": "Already have an account? ",
"loginLink": "Login",
"loginInvalidCredentials": "Invalid mobile number or password. Please try again.",
"signupSuccessWelcome": "Account created successfully! Welcome to LuckyChit.",
"signupFailedGenericUi": "Failed to create account. Please try again.",
"featureComingSoonMessage": "Feature coming soon",
"memberFallbackName": "Member",
"memberSubtitleEmpty": "Join a chit fund to start managing your investments.",
"memberSubtitleHasGroups": "Manage your chit fund investments and track your payments.",
"navHome": "Home",
"navPayments": "Payments",
"navNotifications": "Notifications",
"navProfile": "Profile",
"memberEmptyChitTitle": "No Chit Funds Yet",
"memberEmptyChitBody": "You haven't joined any chit funds yet.\nContact your manager to get started!",
"memberHowToStartTitle": "How to get started?",
"memberHowToStartBody": "1. Your manager will add you to a chit group\n2. You'll receive a notification\n3. Start managing your payments here!",
"unnamedGroupLong": "Unnamed Group",
"labelTotalValue": "Total Value",
"labelDuration": "Duration",
"monthsSuffix": "months",
"labelInstallment": "Installment",
"labelStatus": "Status",
"groupStatusPending": "Pending",
"payNowButton": "Pay Now",
"detailsButton": "Details",
"memberInfoNotFound": "Member information not found"
}

View File

@ -0,0 +1,513 @@
// GENERATED FILE do not edit by hand.
// Source: lib/l10n/app_en.arb + app_en_more.arb (merged). Regenerate: node tool/sync_l10n.mjs
import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'app_localizations_en.dart';
import 'app_localizations_te.dart';
abstract class AppLocalizations {
AppLocalizations(String locale) : localeName = locale;
final String localeName;
static AppLocalizations? of(BuildContext context) {
return Localizations.of<AppLocalizations>(context, AppLocalizations);
}
static const LocalizationsDelegate<AppLocalizations> delegate = _AppLocalizationsDelegate();
static const List<LocalizationsDelegate<dynamic>> localizationsDelegates =
<LocalizationsDelegate<dynamic>>[
delegate,
GlobalMaterialLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
];
static const List<Locale> supportedLocales = <Locale>[
Locale('en'),
Locale('te'),
];
String get actionDraw;
String get actionManageGroup;
String get actionRecord;
String get actionView;
String get active;
String get alreadyHaveAccount;
String get appDisplayName;
String get appTitle;
String get appVersionTitle;
String get authLoginTagline;
String get authSignupScreenTitle;
String get authSignupTagline;
String get cancel;
String get changePasswordComingSoon;
String get changePasswordSubtitle;
String get changePasswordTitle;
String get chitFundManagerRole;
String get chitGroupDeletedSuccess;
String get chitfundCreatedSuccess;
String get chitfundStartedSuccess;
String get chooseLanguageTitle;
String get chooseThemeTitle;
String get close;
String get comingSoonTitle;
String get configureBackend;
String get copied;
String get copyUpiIdTooltip;
String get createAccountButton;
String get createNewGroupMenu;
String get currentUpiId;
String get darkModeSubtitle;
String get darkModeTitle;
String get dashboardTitle;
String get delete;
String get detailsButton;
String get drawNotificationsSubtitle;
String get drawNotificationsTitle;
String get emptyErrorAction;
String get emptyErrorMessage;
String get emptyErrorTitle;
String get emptyNoActivitiesAction;
String get emptyNoActivitiesMessage;
String get emptyNoActivitiesTitle;
String get emptyNoGroupsAction;
String get emptyNoGroupsMessage;
String get emptyNoGroupsTitle;
String get emptyNoInternetAction;
String get emptyNoInternetMessage;
String get emptyNoInternetTitle;
String get emptyNoMembersAction;
String get emptyNoMembersMessage;
String get emptyNoMembersTitle;
String get emptyNoPaymentsAction;
String get emptyNoPaymentsMessage;
String get emptyNoPaymentsTitle;
String get emptyNoResultsAction;
String get emptyNoResultsMessage;
String get emptyNoResultsTitle;
String get failedAddMember;
String get failedChangePassword;
String get failedCreateChitGroup;
String get failedCreateMonthlyDraw;
String get failedDeleteChitGroup;
String get failedLoadChitGroups;
String get failedLoadDrawStatistics;
String get failedLoadFinancialData;
String get failedLoadGroupDetails;
String get failedLoadGroupMembers;
String get failedLoadGroupStatistics;
String get failedLoadMonthlyDraws;
String get failedLoadPayments;
String get failedRecordPayment;
String get failedRemoveMember;
String get failedStartChitGroup;
String get failedUpdateChitGroup;
String get failedUpdateMemberStatus;
String get featureComingSoonMessage;
String get free;
String get groupImportedMessage;
String get groupImportedTitle;
String get groupStatusActive;
String get groupStatusCompleted;
String get groupStatusForming;
String get groupStatusPending;
String get howToUpdateUpi;
String get importExistingGroupMenu;
String get labelAddressOptional;
String get labelConfirmPasswordRequired;
String get labelDuration;
String get labelEmailOptional;
String get labelEmergencyContactOptional;
String get labelFullNameRequired;
String get labelInstallment;
String get labelMobileNumber;
String get labelMobileNumberRequired;
String get labelPassword;
String get labelPasswordRequired;
String get labelStatus;
String get labelTotalValue;
String get languageEnglish;
String get languageSubtitle;
String get languageTelugu;
String get languageTitle;
String get loading;
String get loggedOutSuccess;
String get loginFailedGeneric;
String get loginFailedTitle;
String get loginInvalidCredentials;
String get loginLink;
String get logout;
String get logoutConfirmMessage;
String get logoutConfirmTitle;
String get managerFallbackName;
String get memberAddedSuccess;
String get memberEmptyChitBody;
String get memberEmptyChitTitle;
String get memberFallbackName;
String get memberHowToStartBody;
String get memberHowToStartTitle;
String get memberInfoNotFound;
String get memberRemovedSuccess;
String get memberStatusUpdatedSuccess;
String get memberSubtitleEmpty;
String get memberSubtitleHasGroups;
String memberWelcomeGreeting(String name);
String get menuDashboard;
String get menuLotteryDraws;
String get menuMembers;
String get menuMyChitfunds;
String get menuPayments;
String get menuReports;
String get monthsSuffix;
String get navHome;
String get navNotifications;
String get navPayments;
String get navProfile;
String get noChitFundsYetShort;
String get notConfigured;
String get notificationComingSoon;
String get notificationsTooltip;
String get ok;
String get operationFailedShort;
String get pageMyChitfunds;
String get passwordChangedSuccess;
String get payNowButton;
String get paymentRecordedSuccess;
String get paymentRemindersSubtitle;
String get paymentRemindersTitle;
String get paymentStatisticsSubtitle;
String get paymentStatisticsTitle;
String get paymentStatsComingSoon;
String get paymentsPageComingSoon;
String get privacyComingSoon;
String get privacyPolicyTitle;
String get proTipBody;
String get proTipTitle;
String get profileComingSoon;
String get pushNotificationsSubtitle;
String get pushNotificationsTitle;
String get qaCreateChitfundSubtitle;
String get qaCreateChitfundTitle;
String get qaImportChitfundSubtitle;
String get qaImportChitfundTitle;
String get qaManageMembersSubtitle;
String get qaManageMembersTitle;
String get qaPaymentRecordsSubtitle;
String get qaPaymentRecordsTitle;
String get qaViewAllChitfundsSubtitle;
String get qaViewAllChitfundsTitle;
String get quickActionsTitle;
String get recordingsTooltip;
String get retry;
String get save;
String get sectionAbout;
String get sectionAccount;
String get sectionAppearance;
String get sectionLanguage;
String get sectionMyChitfunds;
String get sectionNotifications;
String get sectionPaymentSettings;
String get settingsTitle;
String get signInButton;
String get signupFailedGeneric;
String get signupFailedGenericUi;
String get signupFailedTitle;
String get signupSuccessWelcome;
String get snackTitleError;
String get snackTitleSuccess;
String get stateSomethingWentWrong;
String get stepOpenEnv;
String get stepRefreshScreen;
String get stepRestartBackend;
String get stepUpdatePhonepe;
String get termsComingSoon;
String get termsOfServiceTitle;
String get testDrawTooltip;
String get themeDark;
String get themeLight;
String get themeSystem;
String get themeTitle;
String get tooltipHidePassword;
String get tooltipShowPassword;
String get transactionFeesSubtitle;
String get transactionFeesTitle;
String get unnamedGroup;
String get unnamedGroupLong;
String get upiCopiedClipboard;
String get upiIdTitle;
String get upiNotConfiguredMessage;
String get upiPaymentSettingsTitle;
String get userLabel;
String get validatorConfirmPassword;
String get validatorEmergencyDigitsOnly;
String get validatorEmergencyTenDigits;
String get validatorEnterFullName;
String get validatorEnterMobile;
String get validatorEnterPasswordAuth;
String get validatorMobileDigitsOnly;
String get validatorMobileTenDigits;
String get validatorPasswordMinSixAuth;
String get validatorPasswordsMismatch;
String get validatorValidEmail;
String get viewAll;
String get welcomeBackSubtitle;
String get welcomeBackTitle;
}
class _AppLocalizationsDelegate extends LocalizationsDelegate<AppLocalizations> {
const _AppLocalizationsDelegate();
@override
Future<AppLocalizations> load(Locale locale) {
return SynchronousFuture<AppLocalizations>(lookupAppLocalizations(locale));
}
@override
bool isSupported(Locale locale) =>
<String>['en', 'te'].contains(locale.languageCode);
@override
bool shouldReload(_AppLocalizationsDelegate old) => false;
}
AppLocalizations lookupAppLocalizations(Locale locale) {
switch (locale.languageCode) {
case 'en':
return AppLocalizationsEn();
case 'te':
return AppLocalizationsTe();
}
throw FlutterError(
'AppLocalizations.delegate failed to load unsupported locale "$locale".',
);
}

View File

@ -0,0 +1,685 @@
// GENERATED FILE do not edit by hand.
// Source: lib/l10n/app_en.arb + app_en_more.arb (merged). Regenerate: node tool/sync_l10n.mjs
import 'app_localizations.dart';
class AppLocalizationsEn extends AppLocalizations {
AppLocalizationsEn([String locale = 'en']) : super(locale);
@override
String get actionDraw => 'Draw';
@override
String get actionManageGroup => 'Manage Group';
@override
String get actionRecord => 'Record';
@override
String get actionView => 'View';
@override
String get active => 'Active';
@override
String get alreadyHaveAccount => 'Already have an account? ';
@override
String get appDisplayName => 'LuckyChit';
@override
String get appTitle => 'LuckyChit';
@override
String get appVersionTitle => 'App version';
@override
String get authLoginTagline => 'Chit fund management that feels effortless.';
@override
String get authSignupScreenTitle => 'Create account';
@override
String get authSignupTagline => 'Set up your profile in under a minute.';
@override
String get cancel => 'Cancel';
@override
String get changePasswordComingSoon => 'Change password feature coming soon';
@override
String get changePasswordSubtitle => 'Update your password';
@override
String get changePasswordTitle => 'Change password';
@override
String get chitFundManagerRole => 'Chit Fund Manager';
@override
String get chitGroupDeletedSuccess => 'Chit group deleted successfully';
@override
String get chitfundCreatedSuccess => 'Chitfund created successfully';
@override
String get chitfundStartedSuccess => 'Chitfund started successfully';
@override
String get chooseLanguageTitle => 'Choose language';
@override
String get chooseThemeTitle => 'Choose theme';
@override
String get close => 'Close';
@override
String get comingSoonTitle => 'Coming Soon';
@override
String get configureBackend => 'Configure in backend/.env';
@override
String get copied => 'Copied!';
@override
String get copyUpiIdTooltip => 'Copy UPI ID';
@override
String get createAccountButton => 'Create account';
@override
String get createNewGroupMenu => 'Create New Group';
@override
String get currentUpiId => 'Current UPI ID';
@override
String get darkModeSubtitle => 'Override system settings';
@override
String get darkModeTitle => 'Dark mode';
@override
String get dashboardTitle => 'Dashboard';
@override
String get delete => 'Delete';
@override
String get detailsButton => 'Details';
@override
String get drawNotificationsSubtitle => 'Alerts for lottery draws';
@override
String get drawNotificationsTitle => 'Draw notifications';
@override
String get emptyErrorAction => 'Retry';
@override
String get emptyErrorMessage => 'We encountered an error while loading data.\nPlease try again.';
@override
String get emptyErrorTitle => 'Oops! Something Went Wrong';
@override
String get emptyNoActivitiesAction => 'Refresh';
@override
String get emptyNoActivitiesMessage => 'Your recent activities will appear here.\nStart using the app to see updates!';
@override
String get emptyNoActivitiesTitle => 'No Recent Activities';
@override
String get emptyNoGroupsAction => 'Create Group';
@override
String get emptyNoGroupsMessage => 'You haven\'t created any chit groups yet.\nCreate your first group or import an existing one!';
@override
String get emptyNoGroupsTitle => 'No Chit Groups Yet';
@override
String get emptyNoInternetAction => 'Retry';
@override
String get emptyNoInternetMessage => 'Please check your internet connection\nand try again.';
@override
String get emptyNoInternetTitle => 'No Internet Connection';
@override
String get emptyNoMembersAction => 'Add Members';
@override
String get emptyNoMembersMessage => 'This group doesn\'t have any members yet.\nAdd members to get started!';
@override
String get emptyNoMembersTitle => 'No Members Yet';
@override
String get emptyNoPaymentsAction => 'Record Payment';
@override
String get emptyNoPaymentsMessage => 'No payment records found.\nPayments will appear here once recorded.';
@override
String get emptyNoPaymentsTitle => 'No Payments Yet';
@override
String get emptyNoResultsAction => 'Clear Filters';
@override
String get emptyNoResultsMessage => 'We couldn\'t find what you\'re looking for.\nTry adjusting your search or filters.';
@override
String get emptyNoResultsTitle => 'No Results Found';
@override
String get failedAddMember => 'Failed to add member';
@override
String get failedChangePassword => 'Failed to change password';
@override
String get failedCreateChitGroup => 'Failed to create chit group';
@override
String get failedCreateMonthlyDraw => 'Failed to create monthly draw';
@override
String get failedDeleteChitGroup => 'Failed to delete chit group';
@override
String get failedLoadChitGroups => 'Failed to load chit groups';
@override
String get failedLoadDrawStatistics => 'Failed to load draw statistics';
@override
String get failedLoadFinancialData => 'Failed to load financial data';
@override
String get failedLoadGroupDetails => 'Failed to load group details';
@override
String get failedLoadGroupMembers => 'Failed to load group members';
@override
String get failedLoadGroupStatistics => 'Failed to load group statistics';
@override
String get failedLoadMonthlyDraws => 'Failed to load monthly draws';
@override
String get failedLoadPayments => 'Failed to load payments';
@override
String get failedRecordPayment => 'Failed to record payment';
@override
String get failedRemoveMember => 'Failed to remove member';
@override
String get failedStartChitGroup => 'Failed to start chit group';
@override
String get failedUpdateChitGroup => 'Failed to update chit group';
@override
String get failedUpdateMemberStatus => 'Failed to update member status';
@override
String get featureComingSoonMessage => 'Feature coming soon';
@override
String get free => 'FREE';
@override
String get groupImportedMessage => 'Group imported! Now add members and backfill past data.';
@override
String get groupImportedTitle => 'Success';
@override
String get groupStatusActive => 'Active';
@override
String get groupStatusCompleted => 'Completed';
@override
String get groupStatusForming => 'Forming';
@override
String get groupStatusPending => 'Pending';
@override
String get howToUpdateUpi => 'How to update UPI ID';
@override
String get importExistingGroupMenu => 'Import Existing Group';
@override
String get labelAddressOptional => 'Address (optional)';
@override
String get labelConfirmPasswordRequired => 'Confirm password *';
@override
String get labelDuration => 'Duration';
@override
String get labelEmailOptional => 'Email (optional)';
@override
String get labelEmergencyContactOptional => 'Emergency contact (optional)';
@override
String get labelFullNameRequired => 'Full name *';
@override
String get labelInstallment => 'Installment';
@override
String get labelMobileNumber => 'Mobile number';
@override
String get labelMobileNumberRequired => 'Mobile number *';
@override
String get labelPassword => 'Password';
@override
String get labelPasswordRequired => 'Password *';
@override
String get labelStatus => 'Status';
@override
String get labelTotalValue => 'Total Value';
@override
String get languageEnglish => 'English';
@override
String get languageSubtitle => 'English or Telugu';
@override
String get languageTelugu => 'Telugu (తెలుగు)';
@override
String get languageTitle => 'App language';
@override
String get loading => 'Loading…';
@override
String get loggedOutSuccess => 'Logged out successfully';
@override
String get loginFailedGeneric => 'Login failed. Please try again.';
@override
String get loginFailedTitle => 'Login Failed';
@override
String get loginInvalidCredentials => 'Invalid mobile number or password. Please try again.';
@override
String get loginLink => 'Login';
@override
String get logout => 'Logout';
@override
String get logoutConfirmMessage => 'Are you sure you want to logout?';
@override
String get logoutConfirmTitle => 'Logout';
@override
String get managerFallbackName => 'Manager';
@override
String get memberAddedSuccess => 'Member added successfully';
@override
String get memberEmptyChitBody => 'You haven\'t joined any chit funds yet.\nContact your manager to get started!';
@override
String get memberEmptyChitTitle => 'No Chit Funds Yet';
@override
String get memberFallbackName => 'Member';
@override
String get memberHowToStartBody => '1. Your manager will add you to a chit group\n2. You\'ll receive a notification\n3. Start managing your payments here!';
@override
String get memberHowToStartTitle => 'How to get started?';
@override
String get memberInfoNotFound => 'Member information not found';
@override
String get memberRemovedSuccess => 'Member removed successfully';
@override
String get memberStatusUpdatedSuccess => 'Member status updated successfully';
@override
String get memberSubtitleEmpty => 'Join a chit fund to start managing your investments.';
@override
String get memberSubtitleHasGroups => 'Manage your chit fund investments and track your payments.';
@override
String memberWelcomeGreeting(String name) {
return 'Welcome, $name!';
}
@override
String get menuDashboard => 'Dashboard';
@override
String get menuLotteryDraws => 'Lottery Draws';
@override
String get menuMembers => 'Members';
@override
String get menuMyChitfunds => 'My Chitfunds';
@override
String get menuPayments => 'Payments';
@override
String get menuReports => 'Reports';
@override
String get monthsSuffix => 'months';
@override
String get navHome => 'Home';
@override
String get navNotifications => 'Notifications';
@override
String get navPayments => 'Payments';
@override
String get navProfile => 'Profile';
@override
String get noChitFundsYetShort => 'No chit funds yet';
@override
String get notConfigured => 'Not configured';
@override
String get notificationComingSoon => 'Notification settings coming soon';
@override
String get notificationsTooltip => 'Notifications';
@override
String get ok => 'OK';
@override
String get operationFailedShort => 'Failed';
@override
String get pageMyChitfunds => 'My Chitfunds';
@override
String get passwordChangedSuccess => 'Password changed successfully';
@override
String get payNowButton => 'Pay Now';
@override
String get paymentRecordedSuccess => 'Payment recorded successfully';
@override
String get paymentRemindersSubtitle => 'Reminders for upcoming payments';
@override
String get paymentRemindersTitle => 'Payment reminders';
@override
String get paymentStatisticsSubtitle => 'View payment insights';
@override
String get paymentStatisticsTitle => 'Payment statistics';
@override
String get paymentStatsComingSoon => 'Payment statistics coming soon';
@override
String get paymentsPageComingSoon => 'Payments page will be implemented next';
@override
String get privacyComingSoon => 'Privacy policy page coming soon';
@override
String get privacyPolicyTitle => 'Privacy policy';
@override
String get proTipBody => 'Members can pay using ANY UPI app (PhonePe, GPay, Paytm) directly to your personal UPI ID with 0% transaction fees!';
@override
String get proTipTitle => 'Pro tip';
@override
String get profileComingSoon => 'Profile page coming soon';
@override
String get pushNotificationsSubtitle => 'Receive push notifications';
@override
String get pushNotificationsTitle => 'Push notifications';
@override
String get qaCreateChitfundSubtitle => 'Start a new chit fund group';
@override
String get qaCreateChitfundTitle => 'Create New Chitfund';
@override
String get qaImportChitfundSubtitle => 'Add a group that already started';
@override
String get qaImportChitfundTitle => 'Import Existing Chitfund';
@override
String get qaManageMembersSubtitle => 'Add or remove members';
@override
String get qaManageMembersTitle => 'Manage Members';
@override
String get qaPaymentRecordsSubtitle => 'Track all transactions';
@override
String get qaPaymentRecordsTitle => 'Payment Records';
@override
String get qaViewAllChitfundsSubtitle => 'Manage your existing groups';
@override
String get qaViewAllChitfundsTitle => 'View All Chitfunds';
@override
String get quickActionsTitle => 'Quick Actions';
@override
String get recordingsTooltip => 'View draw recordings';
@override
String get retry => 'Retry';
@override
String get save => 'Save';
@override
String get sectionAbout => 'About';
@override
String get sectionAccount => 'Account';
@override
String get sectionAppearance => 'Appearance';
@override
String get sectionLanguage => 'Language';
@override
String get sectionMyChitfunds => 'My Chitfunds';
@override
String get sectionNotifications => 'Notifications';
@override
String get sectionPaymentSettings => 'Payment Settings';
@override
String get settingsTitle => 'Settings';
@override
String get signInButton => 'Sign in';
@override
String get signupFailedGeneric => 'Signup failed. Please try again.';
@override
String get signupFailedGenericUi => 'Failed to create account. Please try again.';
@override
String get signupFailedTitle => 'Signup Failed';
@override
String get signupSuccessWelcome => 'Account created successfully! Welcome to LuckyChit.';
@override
String get snackTitleError => 'Error';
@override
String get snackTitleSuccess => 'Success';
@override
String get stateSomethingWentWrong => 'Something went wrong';
@override
String get stepOpenEnv => 'Open backend/.env file';
@override
String get stepRefreshScreen => 'Refresh this screen';
@override
String get stepRestartBackend => 'Restart backend server';
@override
String get stepUpdatePhonepe => 'Update PHONEPE_UPI_ID=your_upi@paytm';
@override
String get termsComingSoon => 'Terms of service page coming soon';
@override
String get termsOfServiceTitle => 'Terms of service';
@override
String get testDrawTooltip => 'Test animated draw';
@override
String get themeDark => 'Dark';
@override
String get themeLight => 'Light';
@override
String get themeSystem => 'System default';
@override
String get themeTitle => 'Theme';
@override
String get tooltipHidePassword => 'Hide password';
@override
String get tooltipShowPassword => 'Show password';
@override
String get transactionFeesSubtitle => '0% fees • Save lakhs per year!';
@override
String get transactionFeesTitle => 'Transaction fees';
@override
String get unnamedGroup => 'Unnamed';
@override
String get unnamedGroupLong => 'Unnamed Group';
@override
String get upiCopiedClipboard => 'UPI ID copied to clipboard';
@override
String get upiIdTitle => 'UPI ID';
@override
String get upiNotConfiguredMessage => 'UPI ID not configured. Update backend/.env file.';
@override
String get upiPaymentSettingsTitle => 'UPI payment settings';
@override
String get userLabel => 'User';
@override
String get validatorConfirmPassword => 'Please confirm password';
@override
String get validatorEmergencyDigitsOnly => 'Emergency contact must contain only digits';
@override
String get validatorEmergencyTenDigits => 'Emergency contact must be 10 digits';
@override
String get validatorEnterFullName => 'Please enter your full name';
@override
String get validatorEnterMobile => 'Please enter mobile number';
@override
String get validatorEnterPasswordAuth => 'Please enter password';
@override
String get validatorMobileDigitsOnly => 'Mobile number must contain only digits';
@override
String get validatorMobileTenDigits => 'Mobile number must be 10 digits';
@override
String get validatorPasswordMinSixAuth => 'Password must be at least 6 characters';
@override
String get validatorPasswordsMismatch => 'Passwords do not match';
@override
String get validatorValidEmail => 'Please enter a valid email address';
@override
String get viewAll => 'View All';
@override
String get welcomeBackSubtitle => 'Here\'s what\'s happening with your chit funds today.';
@override
String get welcomeBackTitle => 'Welcome back!';
}

View File

@ -0,0 +1,685 @@
// GENERATED FILE do not edit by hand.
// Source: lib/l10n/app_en.arb + app_en_more.arb (merged). Regenerate: node tool/sync_l10n.mjs
import 'app_localizations.dart';
class AppLocalizationsTe extends AppLocalizations {
AppLocalizationsTe([String locale = 'te']) : super(locale);
@override
String get actionDraw => 'డ్రా';
@override
String get actionManageGroup => 'గ్రూప్ నిర్వహణ';
@override
String get actionRecord => 'నమోదు';
@override
String get actionView => 'చూడండి';
@override
String get active => 'Active';
@override
String get alreadyHaveAccount => 'ఇప్పటికే ఖాతా ఉందా? ';
@override
String get appDisplayName => 'LuckyChit';
@override
String get appTitle => 'లక్కీచిట్';
@override
String get appVersionTitle => 'యాప్ వెర్షన్';
@override
String get authLoginTagline => 'చిట్ ఫండ్ నిర్వహణ సులభంగా అనిపించేలా.';
@override
String get authSignupScreenTitle => 'ఖాతా సృష్టించు';
@override
String get authSignupTagline => 'ఒక నిమిషంలో మీ ప్రొఫైల్ సెటప్ చేయండి.';
@override
String get cancel => 'రద్దు';
@override
String get changePasswordComingSoon => 'పాస్‌వర్డ్ మార్పు ఫీచర్ త్వరలో వస్తుంది';
@override
String get changePasswordSubtitle => 'మీ పాస్‌వర్డ్‌ను నవీకరించండి';
@override
String get changePasswordTitle => 'పాస్‌వర్డ్ మార్చండి';
@override
String get chitFundManagerRole => 'చిట్ ఫండ్ మేనేజర్';
@override
String get chitGroupDeletedSuccess => 'చిట్ గ్రూప్ విజయవంతంగా తొలగించబడింది';
@override
String get chitfundCreatedSuccess => 'చిట్‌ఫండ్ విజయవంతంగా సృష్టించబడింది';
@override
String get chitfundStartedSuccess => 'చిట్‌ఫండ్ విజయవంతంగా ప్రారంభమైంది';
@override
String get chooseLanguageTitle => 'భాష ఎంచుకోండి';
@override
String get chooseThemeTitle => 'థీమ్ ఎంచుకోండి';
@override
String get close => 'మూసివేయి';
@override
String get comingSoonTitle => 'త్వరలో';
@override
String get configureBackend => 'backend/.env లో కాన్ఫిగర్ చేయండి';
@override
String get copied => 'కాపీ అయింది!';
@override
String get copyUpiIdTooltip => 'UPI ID కాపీ చేయండి';
@override
String get createAccountButton => 'ఖాతా సృష్టించు';
@override
String get createNewGroupMenu => 'కొత్త గ్రూప్ సృష్టించు';
@override
String get currentUpiId => 'ప్రస్తుత UPI ID';
@override
String get darkModeSubtitle => 'సిస్టమ్ సెట్టింగ్స్‌ను ఓవర్‌రైడ్ చేయండి';
@override
String get darkModeTitle => 'డార్క్ మోడ్';
@override
String get dashboardTitle => 'డాష్‌బోర్డ్';
@override
String get delete => 'తొలగించు';
@override
String get detailsButton => 'వివరాలు';
@override
String get drawNotificationsSubtitle => 'లాటరీ డ్రాల కోసం అలర్ట్‌లు';
@override
String get drawNotificationsTitle => 'డ్రా నోటిఫికేషన్లు';
@override
String get emptyErrorAction => 'మళ్లీ ప్రయత్నించు';
@override
String get emptyErrorMessage => 'డేటా లోడ్ చేస్తూ లోపం వచ్చింది.\nదయచేసి మళ్లీ ప్రయత్నించండి.';
@override
String get emptyErrorTitle => 'అయ్యో! ఏదో తప్పు జరిగింది';
@override
String get emptyNoActivitiesAction => 'రిఫ్రెష్';
@override
String get emptyNoActivitiesMessage => 'మీ ఇటీవలి కార్యకలాపాలు ఇక్కడ కనిపిస్తాయి.\nనవీకరణల కోసం యాప్‌ను ఉపయోగించండి!';
@override
String get emptyNoActivitiesTitle => 'ఇటీవలి కార్యకలాపాలు లేవు';
@override
String get emptyNoGroupsAction => 'గ్రూప్ సృష్టించు';
@override
String get emptyNoGroupsMessage => 'మీరు ఇంకా చిట్ గ్రూప్‌లు సృష్టించలేదు.\nమొదటి గ్రూప్ సృష్టించండి లేదా ఉన్నదాన్ని దిగుమతి చేయండి!';
@override
String get emptyNoGroupsTitle => 'ఇంకా చిట్ గ్రూప్‌లు లేవు';
@override
String get emptyNoInternetAction => 'మళ్లీ ప్రయత్నించు';
@override
String get emptyNoInternetMessage => 'దయచేసి మీ ఇంటర్నెట్ కనెక్షన్‌ను తనిఖీ చేసి\nమళ్లీ ప్రయత్నించండి.';
@override
String get emptyNoInternetTitle => 'ఇంటర్నెట్ కనెక్షన్ లేదు';
@override
String get emptyNoMembersAction => 'సభ్యులను జోడించు';
@override
String get emptyNoMembersMessage => 'ఈ గ్రూప్‌కు ఇంకా సభ్యులు లేరు.\nప్రారంభించడానికి సభ్యులను జోడించండి!';
@override
String get emptyNoMembersTitle => 'ఇంకా సభ్యులు లేరు';
@override
String get emptyNoPaymentsAction => 'చెల్లింపు నమోదు';
@override
String get emptyNoPaymentsMessage => 'చెల్లింపు రికార్డ్‌లు కనుగొనబడలేదు.\nనమోదు చేసిన తర్వాత ఇక్కడ కనిపిస్తాయి.';
@override
String get emptyNoPaymentsTitle => 'ఇంకా చెల్లింపులు లేవు';
@override
String get emptyNoResultsAction => 'ఫిల్టర్‌లు క్లియర్';
@override
String get emptyNoResultsMessage => 'మీరు వెతుకుతున్నది కనుగొనలేకపోయాము.\nశోధన లేదా ఫిల్టర్‌లను మార్చి ప్రయత్నించండి.';
@override
String get emptyNoResultsTitle => 'ఫలితాలు లేవు';
@override
String get failedAddMember => 'సభ్యుడిని జోడించడంలో విఫలమైంది';
@override
String get failedChangePassword => 'పాస్‌వర్డ్ మార్చడంలో విఫలమైంది';
@override
String get failedCreateChitGroup => 'చిట్ గ్రూప్ సృష్టించడంలో విఫలమైంది';
@override
String get failedCreateMonthlyDraw => 'నెలవారీ డ్రా సృష్టించడంలో విఫలమైంది';
@override
String get failedDeleteChitGroup => 'చిట్ గ్రూప్ తొలగించడంలో విఫలమైంది';
@override
String get failedLoadChitGroups => 'చిట్ గ్రూప్‌లను లోడ్ చేయడంలో విఫలమైంది';
@override
String get failedLoadDrawStatistics => 'డ్రా గణాంకాలను లోడ్ చేయడంలో విఫలమైంది';
@override
String get failedLoadFinancialData => 'ఆర్థిక డేటాను లోడ్ చేయడంలో విఫలమైంది';
@override
String get failedLoadGroupDetails => 'గ్రూప్ వివరాలను లోడ్ చేయడంలో విఫలమైంది';
@override
String get failedLoadGroupMembers => 'గ్రూప్ సభ్యులను లోడ్ చేయడంలో విఫలమైంది';
@override
String get failedLoadGroupStatistics => 'గ్రూప్ గణాంకాలను లోడ్ చేయడంలో విఫలమైంది';
@override
String get failedLoadMonthlyDraws => 'నెలవారీ డ్రాలను లోడ్ చేయడంలో విఫలమైంది';
@override
String get failedLoadPayments => 'చెల్లింపులను లోడ్ చేయడంలో విఫలమైంది';
@override
String get failedRecordPayment => 'చెల్లింపు నమోదు చేయడంలో విఫలమైంది';
@override
String get failedRemoveMember => 'సభ్యుడిని తొలగించడంలో విఫలమైంది';
@override
String get failedStartChitGroup => 'చిట్ గ్రూప్ ప్రారంభించడంలో విఫలమైంది';
@override
String get failedUpdateChitGroup => 'చిట్ గ్రూప్ నవీకరించడంలో విఫలమైంది';
@override
String get failedUpdateMemberStatus => 'సభ్య స్థితిని నవీకరించడంలో విఫలమైంది';
@override
String get featureComingSoonMessage => 'ఫీచర్ త్వరలో వస్తుంది';
@override
String get free => 'ఉచితం';
@override
String get groupImportedMessage => 'గ్రూప్ దిగుమతి అయ్యింది! ఇప్పుడు సభ్యులను జోడించి గత డేటా నింపండి.';
@override
String get groupImportedTitle => 'విజయం';
@override
String get groupStatusActive => 'సక్రియం';
@override
String get groupStatusCompleted => 'పూర్తయింది';
@override
String get groupStatusForming => 'ఏర్పాటులో';
@override
String get groupStatusPending => 'పెండింగ్';
@override
String get howToUpdateUpi => 'UPI ID ఎలా నవీకరించాలి';
@override
String get importExistingGroupMenu => 'ఉన్న గ్రూప్ దిగుమతి';
@override
String get labelAddressOptional => 'చిరునామా (ఐచ్ఛికం)';
@override
String get labelConfirmPasswordRequired => 'పాస్‌వర్డ్ నిర్ధారించు *';
@override
String get labelDuration => 'కాలపరిమితి';
@override
String get labelEmailOptional => 'ఇమెయిల్ (ఐచ్ఛికం)';
@override
String get labelEmergencyContactOptional => 'అత్యవసర సంప్రదింపు (ఐచ్ఛికం)';
@override
String get labelFullNameRequired => 'పూర్తి పేరు *';
@override
String get labelInstallment => 'వాయిదా';
@override
String get labelMobileNumber => 'మొబైల్ నంబర్';
@override
String get labelMobileNumberRequired => 'మొబైల్ నంబర్ *';
@override
String get labelPassword => 'పాస్‌వర్డ్';
@override
String get labelPasswordRequired => 'పాస్‌వర్డ్ *';
@override
String get labelStatus => 'స్థితి';
@override
String get labelTotalValue => 'మొత్తం విలువ';
@override
String get languageEnglish => 'ఇంగ్లీషు';
@override
String get languageSubtitle => 'ఇంగ్లీషు లేదా తెలుగు';
@override
String get languageTelugu => 'తెలుగు';
@override
String get languageTitle => 'యాప్ భాష';
@override
String get loading => 'లోడ్ అవుతోంది…';
@override
String get loggedOutSuccess => 'విజయవంతంగా లాగ్ అవుట్ అయ్యారు';
@override
String get loginFailedGeneric => 'లాగిన్ విఫలమైంది. దయచేసి మళ్లీ ప్రయత్నించండి.';
@override
String get loginFailedTitle => 'లాగిన్ విఫలమైంది';
@override
String get loginInvalidCredentials => 'తప్పు మొబైల్ నంబర్ లేదా పాస్‌వర్డ్. మళ్లీ ప్రయత్నించండి.';
@override
String get loginLink => 'లాగిన్';
@override
String get logout => 'లాగ్ అవుట్';
@override
String get logoutConfirmMessage => 'మీరు ఖచ్చితంగా లాగ్ అవుట్ కావాలనుకుంటున్నారా?';
@override
String get logoutConfirmTitle => 'లాగ్ అవుట్';
@override
String get managerFallbackName => 'మేనేజర్';
@override
String get memberAddedSuccess => 'సభ్యుడు విజయవంతంగా జోడించబడ్డారు';
@override
String get memberEmptyChitBody => 'మీరు ఇంకా ఏ చిట్ ఫండ్‌లోనూ చేరలేదు.\nప్రారంభించడానికి మీ మేనేజర్‌ను సంప్రదించండి!';
@override
String get memberEmptyChitTitle => 'ఇంకా చిట్ ఫండ్‌లు లేవు';
@override
String get memberFallbackName => 'సభ్యుడు';
@override
String get memberHowToStartBody => '1. మీ మేనేజర్ మిమ్మల్ని చిట్ గ్రూప్‌కు జోడిస్తారు\n2. మీకు నోటిఫికేషన్ వస్తుంది\n3. ఇక్కడ మీ చెల్లింపులను నిర్వహించండి!';
@override
String get memberHowToStartTitle => 'ఎలా ప్రారంభించాలి?';
@override
String get memberInfoNotFound => 'సభ్య సమాచారం కనుగొనబడలేదు';
@override
String get memberRemovedSuccess => 'సభ్యుడు విజయవంతంగా తొలగించబడ్డారు';
@override
String get memberStatusUpdatedSuccess => 'సభ్య స్థితి విజయవంతంగా నవీకరించబడింది';
@override
String get memberSubtitleEmpty => 'మీ పెట్టుబడులను నిర్వహించడానికి చిట్ ఫండ్‌లో చేరండి.';
@override
String get memberSubtitleHasGroups => 'మీ చిట్ ఫండ్ పెట్టుబడులు మరియు చెల్లింపులను ట్రాక్ చేయండి.';
@override
String memberWelcomeGreeting(String name) {
return 'స్వాగతం, $name!';
}
@override
String get menuDashboard => 'డాష్‌బోర్డ్';
@override
String get menuLotteryDraws => 'లాటరీ డ్రాలు';
@override
String get menuMembers => 'సభ్యులు';
@override
String get menuMyChitfunds => 'నా చిట్‌ఫండ్‌లు';
@override
String get menuPayments => 'చెల్లింపులు';
@override
String get menuReports => 'నివేదికలు';
@override
String get monthsSuffix => 'నెలలు';
@override
String get navHome => 'హోమ్';
@override
String get navNotifications => 'నోటిఫికేషన్‌లు';
@override
String get navPayments => 'చెల్లింపులు';
@override
String get navProfile => 'ప్రొఫైల్';
@override
String get noChitFundsYetShort => 'ఇంకా చిట్ ఫండ్‌లు లేవు';
@override
String get notConfigured => 'కాన్ఫిగర్ చేయలేదు';
@override
String get notificationComingSoon => 'నోటిఫికేషన్ సెట్టింగ్స్ త్వరలో వస్తాయి';
@override
String get notificationsTooltip => 'నోటిఫికేషన్‌లు';
@override
String get ok => 'సరే';
@override
String get operationFailedShort => 'విఫలమైంది';
@override
String get pageMyChitfunds => 'నా చిట్‌ఫండ్‌లు';
@override
String get passwordChangedSuccess => 'పాస్‌వర్డ్ విజయవంతంగా మార్చబడింది';
@override
String get payNowButton => 'ఇప్పుడు చెల్లించు';
@override
String get paymentRecordedSuccess => 'చెల్లింపు విజయవంతంగా నమోదు చేయబడింది';
@override
String get paymentRemindersSubtitle => 'రాబోయే చెల్లింపుల కోసం రిమైండర్లు';
@override
String get paymentRemindersTitle => 'చెల్లింపు రిమైండర్లు';
@override
String get paymentStatisticsSubtitle => 'చెల్లింపు అంతర్దృష్టులను చూడండి';
@override
String get paymentStatisticsTitle => 'చెల్లింపు గణాంకాలు';
@override
String get paymentStatsComingSoon => 'చెల్లింపు గణాంకాలు త్వరలో వస్తాయి';
@override
String get paymentsPageComingSoon => 'చెల్లింపుల పేజీ తదుపరి అమలు చేయబడుతుంది';
@override
String get privacyComingSoon => 'గోప్యతా విధానం పేజీ త్వరలో వస్తుంది';
@override
String get privacyPolicyTitle => 'గోప్యతా విధానం';
@override
String get proTipBody => 'సభ్యులు ఏ UPI యాప్‌తోనైనా (PhonePe, GPay, Paytm) మీ వ్యక్తిగత UPI IDకు నేరుగా 0% లావాదేవీ ఫీజుతో చెల్లించవచ్చు!';
@override
String get proTipTitle => 'ప్రో టిప్';
@override
String get profileComingSoon => 'ప్రొఫైల్ పేజీ త్వరలో వస్తుంది';
@override
String get pushNotificationsSubtitle => 'పుష్ నోటిఫికేషన్లు అందుకోండి';
@override
String get pushNotificationsTitle => 'పుష్ నోటిఫికేషన్లు';
@override
String get qaCreateChitfundSubtitle => 'కొత్త చిట్ ఫండ్ గ్రూప్ ప్రారంభించండి';
@override
String get qaCreateChitfundTitle => 'కొత్త చిట్‌ఫండ్ సృష్టించు';
@override
String get qaImportChitfundSubtitle => 'ఇప్పటికే ప్రారంభమైన గ్రూప్ జోడించండి';
@override
String get qaImportChitfundTitle => 'ఉన్న చిట్‌ఫండ్ దిగుమతి';
@override
String get qaManageMembersSubtitle => 'సభ్యులను జోడించండి లేదా తొలగించండి';
@override
String get qaManageMembersTitle => 'సభ్యులను నిర్వహించు';
@override
String get qaPaymentRecordsSubtitle => 'అన్ని లావాదేవీలను ట్రాక్ చేయండి';
@override
String get qaPaymentRecordsTitle => 'చెల్లింపు రికార్డ్‌లు';
@override
String get qaViewAllChitfundsSubtitle => 'మీ గ్రూప్‌లను నిర్వహించండి';
@override
String get qaViewAllChitfundsTitle => 'అన్ని చిట్‌ఫండ్‌లు చూడండి';
@override
String get quickActionsTitle => 'త్వరిత చర్యలు';
@override
String get recordingsTooltip => 'డ్రా రికార్డింగ్‌లు చూడండి';
@override
String get retry => 'మళ్లీ ప్రయత్నించండి';
@override
String get save => 'సేవ్';
@override
String get sectionAbout => 'గురించి';
@override
String get sectionAccount => 'ఖాతా';
@override
String get sectionAppearance => 'రూపం';
@override
String get sectionLanguage => 'భాష';
@override
String get sectionMyChitfunds => 'నా చిట్‌ఫండ్‌లు';
@override
String get sectionNotifications => 'నోటిఫికేషన్లు';
@override
String get sectionPaymentSettings => 'చెల్లింపు సెట్టింగ్స్';
@override
String get settingsTitle => 'సెట్టింగ్స్';
@override
String get signInButton => 'సైన్ ఇన్';
@override
String get signupFailedGeneric => 'నమోదు విఫలమైంది. దయచేసి మళ్లీ ప్రయత్నించండి.';
@override
String get signupFailedGenericUi => 'ఖాతా సృష్టించడంలో విఫలమైంది. మళ్లీ ప్రయత్నించండి.';
@override
String get signupFailedTitle => 'నమోదు విఫలమైంది';
@override
String get signupSuccessWelcome => 'ఖాతా విజయవంతంగా సృష్టించబడింది! LuckyChitకు స్వాగతం.';
@override
String get snackTitleError => 'లోపం';
@override
String get snackTitleSuccess => 'విజయం';
@override
String get stateSomethingWentWrong => 'ఏదో తప్పు జరిగింది';
@override
String get stepOpenEnv => 'backend/.env ఫైల్‌ను తెరవండి';
@override
String get stepRefreshScreen => 'ఈ స్క్రీన్‌ను రిఫ్రెష్ చేయండి';
@override
String get stepRestartBackend => 'బ్యాకెండ్ సర్వర్‌ను రీస్టార్ట్ చేయండి';
@override
String get stepUpdatePhonepe => 'PHONEPE_UPI_ID=your_upi@paytm ను నవీకరించండి';
@override
String get termsComingSoon => 'సేవా నిబంధనల పేజీ త్వరలో వస్తుంది';
@override
String get termsOfServiceTitle => 'సేవా నిబంధనలు';
@override
String get testDrawTooltip => 'యానిమేటెడ్ డ్రా పరీక్ష';
@override
String get themeDark => 'డార్క్';
@override
String get themeLight => 'లైట్';
@override
String get themeSystem => 'సిస్టమ్ డిఫాల్ట్';
@override
String get themeTitle => 'థీమ్';
@override
String get tooltipHidePassword => 'పాస్‌వర్డ్ దాచు';
@override
String get tooltipShowPassword => 'పాస్‌వర్డ్ చూపు';
@override
String get transactionFeesSubtitle => '0% ఫీజులు • సంవత్సరానికి లక్షలు ఆదా!';
@override
String get transactionFeesTitle => 'లావాదేవీ ఫీజులు';
@override
String get unnamedGroup => 'పేరులేని';
@override
String get unnamedGroupLong => 'పేరులేని గ్రూప్';
@override
String get upiCopiedClipboard => 'UPI ID క్లిప్‌బోర్డ్‌కు కాపీ అయింది';
@override
String get upiIdTitle => 'UPI ID';
@override
String get upiNotConfiguredMessage => 'UPI ID కాన్ఫిగర్ చేయలేదు. backend/.env ఫైల్‌ను నవీకరించండి.';
@override
String get upiPaymentSettingsTitle => 'UPI చెల్లింపు సెట్టింగ్స్';
@override
String get userLabel => 'వినియోగదారు';
@override
String get validatorConfirmPassword => 'దయచేసి పాస్‌వర్డ్ నిర్ధారించండి';
@override
String get validatorEmergencyDigitsOnly => 'అత్యవసర సంప్రదింపులో అంకెలు మాత్రమే ఉండాలి';
@override
String get validatorEmergencyTenDigits => 'అత్యవసర సంప్రదింపు 10 అంకెలు ఉండాలి';
@override
String get validatorEnterFullName => 'దయచేసి మీ పూర్తి పేరు నమోదు చేయండి';
@override
String get validatorEnterMobile => 'దయచేసి మొబైల్ నంబర్ నమోదు చేయండి';
@override
String get validatorEnterPasswordAuth => 'దయచేసి పాస్‌వర్డ్ నమోదు చేయండి';
@override
String get validatorMobileDigitsOnly => 'మొబైల్ నంబర్‌లో అంకెలు మాత్రమే ఉండాలి';
@override
String get validatorMobileTenDigits => 'మొబైల్ నంబర్ 10 అంకెలు ఉండాలి';
@override
String get validatorPasswordMinSixAuth => 'పాస్‌వర్డ్ కనీసం 6 అక్షరాలు ఉండాలి';
@override
String get validatorPasswordsMismatch => 'పాస్‌వర్డ్‌లు సరిపోలడం లేదు';
@override
String get validatorValidEmail => 'దయచేసి సరైన ఇమెయిల్ చిరునామా నమోదు చేయండి';
@override
String get viewAll => 'అన్నీ చూడండి';
@override
String get welcomeBackSubtitle => 'ఈ రోజు మీ చిట్ ఫండ్‌లతో ఏమి జరుగుతోందో ఇక్కడ ఉంది.';
@override
String get welcomeBackTitle => 'మళ్లీ స్వాగతం!';
}

View File

@ -0,0 +1,166 @@
{
"@memberWelcomeGreeting": {
"placeholders": {
"name": {}
}
},
"memberWelcomeGreeting": "స్వాగతం, {name}!",
"ok": "సరే",
"save": "సేవ్",
"retry": "మళ్లీ ప్రయత్నించండి",
"delete": "తొలగించు",
"userLabel": "వినియోగదారు",
"managerFallbackName": "మేనేజర్",
"snackTitleError": "లోపం",
"snackTitleSuccess": "విజయం",
"operationFailedShort": "విఫలమైంది",
"failedLoadChitGroups": "చిట్ గ్రూప్‌లను లోడ్ చేయడంలో విఫలమైంది",
"chitfundCreatedSuccess": "చిట్‌ఫండ్ విజయవంతంగా సృష్టించబడింది",
"failedCreateChitGroup": "చిట్ గ్రూప్ సృష్టించడంలో విఫలమైంది",
"failedUpdateChitGroup": "చిట్ గ్రూప్ నవీకరించడంలో విఫలమైంది",
"chitGroupDeletedSuccess": "చిట్ గ్రూప్ విజయవంతంగా తొలగించబడింది",
"failedDeleteChitGroup": "చిట్ గ్రూప్ తొలగించడంలో విఫలమైంది",
"failedLoadGroupDetails": "గ్రూప్ వివరాలను లోడ్ చేయడంలో విఫలమైంది",
"failedLoadGroupMembers": "గ్రూప్ సభ్యులను లోడ్ చేయడంలో విఫలమైంది",
"memberAddedSuccess": "సభ్యుడు విజయవంతంగా జోడించబడ్డారు",
"failedAddMember": "సభ్యుడిని జోడించడంలో విఫలమైంది",
"memberRemovedSuccess": "సభ్యుడు విజయవంతంగా తొలగించబడ్డారు",
"failedRemoveMember": "సభ్యుడిని తొలగించడంలో విఫలమైంది",
"memberStatusUpdatedSuccess": "సభ్య స్థితి విజయవంతంగా నవీకరించబడింది",
"failedUpdateMemberStatus": "సభ్య స్థితిని నవీకరించడంలో విఫలమైంది",
"failedLoadPayments": "చెల్లింపులను లోడ్ చేయడంలో విఫలమైంది",
"paymentRecordedSuccess": "చెల్లింపు విజయవంతంగా నమోదు చేయబడింది",
"failedRecordPayment": "చెల్లింపు నమోదు చేయడంలో విఫలమైంది",
"failedLoadGroupStatistics": "గ్రూప్ గణాంకాలను లోడ్ చేయడంలో విఫలమైంది",
"chitfundStartedSuccess": "చిట్‌ఫండ్ విజయవంతంగా ప్రారంభమైంది",
"failedStartChitGroup": "చిట్ గ్రూప్ ప్రారంభించడంలో విఫలమైంది",
"failedLoadMonthlyDraws": "నెలవారీ డ్రాలను లోడ్ చేయడంలో విఫలమైంది",
"failedCreateMonthlyDraw": "నెలవారీ డ్రా సృష్టించడంలో విఫలమైంది",
"failedLoadDrawStatistics": "డ్రా గణాంకాలను లోడ్ చేయడంలో విఫలమైంది",
"failedLoadFinancialData": "ఆర్థిక డేటాను లోడ్ చేయడంలో విఫలమైంది",
"signupFailedTitle": "నమోదు విఫలమైంది",
"signupFailedGeneric": "నమోదు విఫలమైంది. దయచేసి మళ్లీ ప్రయత్నించండి.",
"loginFailedTitle": "లాగిన్ విఫలమైంది",
"loginFailedGeneric": "లాగిన్ విఫలమైంది. దయచేసి మళ్లీ ప్రయత్నించండి.",
"passwordChangedSuccess": "పాస్‌వర్డ్ విజయవంతంగా మార్చబడింది",
"failedChangePassword": "పాస్‌వర్డ్ మార్చడంలో విఫలమైంది",
"stateSomethingWentWrong": "ఏదో తప్పు జరిగింది",
"emptyNoGroupsTitle": "ఇంకా చిట్ గ్రూప్‌లు లేవు",
"emptyNoGroupsMessage": "మీరు ఇంకా చిట్ గ్రూప్‌లు సృష్టించలేదు.\nమొదటి గ్రూప్ సృష్టించండి లేదా ఉన్నదాన్ని దిగుమతి చేయండి!",
"emptyNoGroupsAction": "గ్రూప్ సృష్టించు",
"emptyNoMembersTitle": "ఇంకా సభ్యులు లేరు",
"emptyNoMembersMessage": "ఈ గ్రూప్‌కు ఇంకా సభ్యులు లేరు.\nప్రారభిచడానికి సభ్యులను జోడించండి!",
"emptyNoMembersAction": "సభ్యులను జోడించు",
"emptyNoPaymentsTitle": "ఇంకా చెల్లింపులు లేవు",
"emptyNoPaymentsMessage": "చెల్లింపు రికార్డ్‌లు కనుగొనబడలేదు.\nనమోదు చేసిన తర్వాత ఇక్కడ కనిపిస్తాయి.",
"emptyNoPaymentsAction": "చెల్లింపు నమోదు",
"emptyNoActivitiesTitle": "ఇటీవలి కార్యకలాపాలు లేవు",
"emptyNoActivitiesMessage": "మీ ఇటీవలి కార్యకలాపాలు ఇక్కడ కనిపిస్తాయి.\nనవీకరణల కోసం యాప్‌ను ఉపయోగించండి!",
"emptyNoActivitiesAction": "రిఫ్రెష్",
"emptyNoResultsTitle": "ఫలితాలు లేవు",
"emptyNoResultsMessage": "మీరు వెతుకుతున్నది కనుగొనలేకపోయాము.\nశోధన లేదా ఫిల్టర్‌లను మార్చి ప్రయత్నించండి.",
"emptyNoResultsAction": "ఫిల్టర్‌లు క్లియర్",
"emptyErrorTitle": "అయ్యో! ఏదో తప్పు జరిగింది",
"emptyErrorMessage": "డేటా లోడ్ చేస్తూ లోపం వచ్చింది.\nదయచేసి మళ్లీ ప్రయత్నించండి.",
"emptyErrorAction": "మళ్లీ ప్రయత్నించు",
"emptyNoInternetTitle": "ఇంటర్నెట్ కనెక్షన్ లేదు",
"emptyNoInternetMessage": "దయచేసి మీ ఇంటర్నెట్ కనెక్షన్‌ను తనిఖీ చేసి\nమళ్లీ ప్రయత్నించండి.",
"emptyNoInternetAction": "మళ్లీ ప్రయత్నించు",
"dashboardTitle": "డాష్‌బోర్డ్",
"notificationsTooltip": "నోటిఫికేషన్‌లు",
"recordingsTooltip": "డ్రా రికార్డింగ్‌లు చూడండి",
"testDrawTooltip": "యానిమేటెడ్ డ్రా పరీక్ష",
"chitFundManagerRole": "చిట్ ఫండ్ మేనేజర్",
"menuDashboard": "డాష్‌బోర్డ్",
"menuMyChitfunds": "నా చిట్‌ఫండ్‌లు",
"menuMembers": "సభ్యులు",
"menuPayments": "చెల్లింపులు",
"menuLotteryDraws": "లాటరీ డ్రాలు",
"menuReports": "నివేదికలు",
"welcomeBackTitle": "మళ్లీ స్వాగతం!",
"welcomeBackSubtitle": "ఈ రోజు మీ చిట్ ఫండ్‌లతో ఏమి జరుగుతోందో ఇక్కడ ఉంది.",
"quickActionsTitle": "త్వరిత చర్యలు",
"qaCreateChitfundTitle": "కొత్త చిట్‌ఫండ్ సృష్టించు",
"qaCreateChitfundSubtitle": "కొత్త చిట్ ఫండ్ గ్రూప్ ప్రారంభించండి",
"qaImportChitfundTitle": "ఉన్న చిట్‌ఫండ్ దిగుమతి",
"qaImportChitfundSubtitle": "ఇప్పటికే ప్రారంభమైన గ్రూప్ జోడించండి",
"qaViewAllChitfundsTitle": "అన్ని చిట్‌ఫండ్‌లు చూడండి",
"qaViewAllChitfundsSubtitle": "మీ గ్రూప్‌లను నిర్వహించండి",
"qaManageMembersTitle": "సభ్యులను నిర్వహించు",
"qaManageMembersSubtitle": "సభ్యులను జోడించండి లేదా తొలగించండి",
"qaPaymentRecordsTitle": "చెల్లింపు రికార్డ్‌లు",
"qaPaymentRecordsSubtitle": "అన్ని లావాదేవీలను ట్రాక్ చేయండి",
"sectionMyChitfunds": "నా చిట్‌ఫండ్‌లు",
"viewAll": "అన్నీ చూడండి",
"noChitFundsYetShort": "ఇంకా చిట్ ఫండ్‌లు లేవు",
"groupStatusActive": "సక్రియం",
"groupStatusForming": "ఏర్పాటులో",
"groupStatusCompleted": "పూర్తయింది",
"unnamedGroup": "పేరులేని",
"actionRecord": "నమోదు",
"actionDraw": "డ్రా",
"actionView": "చూడండి",
"actionManageGroup": "గ్రూప్ నిర్వహణ",
"groupImportedMessage": "గ్రూప్ దిగుమతి అయ్యింది! ఇప్పుడు సభ్యులను జోడించి గత డేటా నింపండి.",
"groupImportedTitle": "విజయం",
"paymentsPageComingSoon": "చెల్లింపుల పేజీ తదుపరి అమలు చేయబడుతుంది",
"comingSoonTitle": "త్వరలో",
"pageMyChitfunds": "నా చిట్‌ఫండ్‌లు",
"createNewGroupMenu": "కొత్త గ్రూప్ సృష్టించు",
"importExistingGroupMenu": "ఉన్న గ్రూప్ దిగుమతి",
"appDisplayName": "LuckyChit",
"authLoginTagline": "చిట్ ఫండ్ నిర్వహణ సులభంగా అనిపించేలా.",
"authSignupScreenTitle": "ఖాతా సృష్టించు",
"authSignupTagline": "ఒక నిమిషంలో మీ ప్రొఫైల్ సెటప్ చేయండి.",
"labelMobileNumber": "మొబైల్ నంబర్",
"labelMobileNumberRequired": "మొబైల్ నంబర్ *",
"labelPassword": "పాస్‌వర్డ్",
"labelPasswordRequired": "పాస్‌వర్డ్ *",
"labelFullNameRequired": "పూర్తి పేరు *",
"labelEmailOptional": "ఇమెయిల్ (ఐచ్ఛికం)",
"labelAddressOptional": "చిరునామా (ఐచ్ఛికం)",
"labelEmergencyContactOptional": "అత్యవసర సంప్రదింపు (ఐచ్ఛికం)",
"labelConfirmPasswordRequired": "పాస్‌వర్డ్ నిర్ధారించు *",
"validatorEnterMobile": "దయచేసి మొబైల్ నంబర్ నమోదు చేయండి",
"validatorMobileTenDigits": "మొబైల్ నంబర్ 10 అంకెలు ఉండాలి",
"validatorMobileDigitsOnly": "మొబైల్ నంబర్‌లో అంకెలు మాత్రమే ఉండాలి",
"validatorEnterFullName": "దయచేసి మీ పూర్తి పేరు నమోదు చేయండి",
"validatorValidEmail": "దయచేసి సరైన ఇమెయిల్ చిరునామా నమోదు చేయండి",
"validatorEmergencyTenDigits": "అత్యవసర సంప్రదింపు 10 అంకెలు ఉండాలి",
"validatorEmergencyDigitsOnly": "అత్యవసర సంప్రదింపులో అంకెలు మాత్రమే ఉండాలి",
"validatorEnterPasswordAuth": "దయచేసి పాస్‌వర్డ్ నమోదు చేయండి",
"validatorPasswordMinSixAuth": "పాస్‌వర్డ్ కనీసం 6 అక్షరాలు ఉండాలి",
"validatorConfirmPassword": "దయచేసి పాస్‌వర్డ్ నిర్ధారించండి",
"validatorPasswordsMismatch": "పాస్‌వర్డ్‌లు సరిపోలడం లేదు",
"tooltipShowPassword": "పాస్‌వర్డ్ చూపు",
"tooltipHidePassword": "పాస్‌వర్డ్ దాచు",
"signInButton": "సైన్ ఇన్",
"createAccountButton": "ఖాతా సృష్టించు",
"alreadyHaveAccount": "ఇప్పటికే ఖాతా ఉందా? ",
"loginLink": "లాగిన్",
"loginInvalidCredentials": "తప్పు మొబైల్ నంబర్ లేదా పాస్‌వర్డ్. మళ్లీ ప్రయత్నించండి.",
"signupSuccessWelcome": "ఖాతా విజయవంతంగా సృష్టించబడింది! LuckyChitకు స్వాగతం.",
"signupFailedGenericUi": "ఖాతా సృష్టించడంలో విఫలమైంది. మళ్లీ ప్రయత్నించండి.",
"featureComingSoonMessage": "ఫీచర్ త్వరలో వస్తుంది",
"memberFallbackName": "సభ్యుడు",
"memberSubtitleEmpty": "మీ పెట్టుబడులను నిర్వహించడానికి చిట్ ఫండ్‌లో చేరండి.",
"memberSubtitleHasGroups": "మీ చిట్ ఫండ్ పెట్టుబడులు మరియు చెల్లింపులను ట్రాక్ చేయండి.",
"navHome": "హోమ్",
"navPayments": "చెల్లింపులు",
"navNotifications": "నోటిఫికేషన్‌లు",
"navProfile": "ప్రొఫైల్",
"memberEmptyChitTitle": "ఇంకా చిట్ ఫండ్‌లు లేవు",
"memberEmptyChitBody": "మీరు ఇంకా ఏ చిట్ ఫండ్‌లోనూ చేరలేదు.\nప్రారభిచడానికి మీ మేనేజర్‌ను సంప్రదించండి!",
"memberHowToStartTitle": "ఎలా ప్రారంభించాలి?",
"memberHowToStartBody": "1. మీ మేనేజర్ మిమ్మల్ని చిట్ గ్రూప్‌కు జోడిస్తారు\n2. మీకు నోటిఫికేషన్ వస్తుంది\n3. ఇక్కడ మీ చెల్లింపులను నిర్వహించండి!",
"unnamedGroupLong": "పేరులేని గ్రూప్",
"labelTotalValue": "మొత్తం విలువ",
"labelDuration": "కాలపరిమితి",
"monthsSuffix": "నెలలు",
"labelInstallment": "వాయిదా",
"labelStatus": "స్థితి",
"groupStatusPending": "పెండింగ్",
"payNowButton": "ఇప్పుడు చెల్లించు",
"detailsButton": "వివరాలు",
"memberInfoNotFound": "సభ్య సమాచారం కనుగొనబడలేదు"
}

View File

@ -57,7 +57,7 @@ dependencies:
web_socket_channel: ^2.4.0 web_socket_channel: ^2.4.0
# Date and time (version must satisfy flutter_localizations intl pin — e.g. 0.20.2 on current stable Flutter) # Date and time (version must satisfy flutter_localizations intl pin — e.g. 0.20.2 on current stable Flutter)
intl: ^0.20.2 intl: 0.19.0
# Charts and Data Visualization # Charts and Data Visualization
fl_chart: ^0.66.0 fl_chart: ^0.66.0
@ -111,7 +111,6 @@ dev_dependencies:
# The following section is specific to Flutter packages. # The following section is specific to Flutter packages.
flutter: flutter:
generate: true
# The following line ensures that the Material Icons font is # The following line ensures that the Material Icons font is
# included with your application, so that you can use the icons in # included with your application, so that you can use the icons in

View File

@ -1,30 +1,15 @@
// This is a basic Flutter widget test.
//
// To perform an interaction with a widget in your test, use the WidgetTester
// utility in the flutter_test package. For example, you can send tap and scroll
// gestures. You can also use WidgetTester to find child widgets in the widget
// tree, read text, and verify that the values of widget properties are correct.
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:luckychit/main.dart';
void main() { void main() {
testWidgets('Counter increments smoke test', (WidgetTester tester) async { testWidgets('Smoke: MaterialApp renders', (WidgetTester tester) async {
// Build our app and trigger a frame. await tester.pumpWidget(
await tester.pumpWidget(const MyApp()); const MaterialApp(
home: Scaffold(
// Verify that our counter starts at 0. body: Center(child: Text('LuckyChit')),
expect(find.text('0'), findsOneWidget); ),
expect(find.text('1'), findsNothing); ),
);
// Tap the '+' icon and trigger a frame. expect(find.text('LuckyChit'), findsOneWidget);
await tester.tap(find.byIcon(Icons.add));
await tester.pump();
// Verify that our counter has incremented.
expect(find.text('0'), findsNothing);
expect(find.text('1'), findsOneWidget);
}); });
} }

View File

@ -0,0 +1,178 @@
#!/usr/bin/env node
/**
* Merges lib/l10n/app_{en,te}.arb with app_{en,te}_more.arb (in-memory) and
* writes lib/l10n/app_localizations.dart, app_localizations_en.dart, app_localizations_te.dart.
*
* Run from package root: node tool/sync_l10n.mjs
*/
import fs from "fs";
import path from "path";
import { fileURLToPath } from "url";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const root = path.join(__dirname, "..");
const l10nDir = path.join(root, "lib", "l10n");
function loadArb(name) {
const p = path.join(l10nDir, name);
return JSON.parse(fs.readFileSync(p, "utf8"));
}
function merge(base, extra) {
return { ...base, ...extra };
}
function messageKeys(arb) {
return Object.keys(arb).filter((k) => !k.startsWith("@") && k !== "@@locale");
}
function placeholdersFor(arb, key) {
const meta = arb[`@${key}`];
if (!meta || !meta.placeholders) return null;
return Object.keys(meta.placeholders);
}
function dartEscapeSingle(s) {
return s
.replace(/\\/g, "\\\\")
.replace(/\r\n/g, "\n")
.replace(/\n/g, "\\n")
.replace(/'/g, "\\'");
}
/** Build Dart string literal expr from ICU-ish template (e.g. "Hi, {name}!"). */
function dartReturnExpr(template, params) {
let d = template;
for (const p of params) {
d = d.split(`{${p}}`).join(`$${p}`);
}
return `'${dartEscapeSingle(d)}'`;
}
function writeLocalizations(en, te) {
const keys = [...new Set([...messageKeys(en), ...messageKeys(te)])].sort();
const abstractDecls = [];
const enImpl = [];
const teImpl = [];
for (const key of keys) {
const ph = placeholdersFor(en, key) ?? placeholdersFor(te, key);
if (ph && ph.length) {
const args = ph.map((p) => `String ${p}`).join(", ");
abstractDecls.push(` String ${key}(${args});`);
const tplEn = en[key];
const tplTe = te[key] ?? tplEn;
enImpl.push(` @override\n String ${key}(${args}) {\n return ${dartReturnExpr(tplEn, ph)};\n }`);
teImpl.push(` @override\n String ${key}(${args}) {\n return ${dartReturnExpr(tplTe, ph)};\n }`);
} else {
abstractDecls.push(` String get ${key};`);
const vEn = en[key] ?? "";
const vTe = te[key] ?? vEn;
enImpl.push(` @override\n String get ${key} => '${dartEscapeSingle(vEn)}';`);
teImpl.push(` @override\n String get ${key} => '${dartEscapeSingle(vTe)}';`);
}
}
const header = `// GENERATED FILE — do not edit by hand.
// Source: lib/l10n/app_en.arb + app_en_more.arb (merged). Regenerate: node tool/sync_l10n.mjs
`;
const main = `${header}import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'app_localizations_en.dart';
import 'app_localizations_te.dart';
abstract class AppLocalizations {
AppLocalizations(String locale) : localeName = locale;
final String localeName;
static AppLocalizations? of(BuildContext context) {
return Localizations.of<AppLocalizations>(context, AppLocalizations);
}
static const LocalizationsDelegate<AppLocalizations> delegate = _AppLocalizationsDelegate();
static const List<LocalizationsDelegate<dynamic>> localizationsDelegates =
<LocalizationsDelegate<dynamic>>[
delegate,
GlobalMaterialLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
];
static const List<Locale> supportedLocales = <Locale>[
Locale('en'),
Locale('te'),
];
${abstractDecls.join("\n\n")}
}
class _AppLocalizationsDelegate extends LocalizationsDelegate<AppLocalizations> {
const _AppLocalizationsDelegate();
@override
Future<AppLocalizations> load(Locale locale) {
return SynchronousFuture<AppLocalizations>(lookupAppLocalizations(locale));
}
@override
bool isSupported(Locale locale) =>
<String>['en', 'te'].contains(locale.languageCode);
@override
bool shouldReload(_AppLocalizationsDelegate old) => false;
}
AppLocalizations lookupAppLocalizations(Locale locale) {
switch (locale.languageCode) {
case 'en':
return AppLocalizationsEn();
case 'te':
return AppLocalizationsTe();
}
throw FlutterError(
'AppLocalizations.delegate failed to load unsupported locale "\$locale".',
);
}
`;
const enFile = `${header}import 'app_localizations.dart';
class AppLocalizationsEn extends AppLocalizations {
AppLocalizationsEn([String locale = 'en']) : super(locale);
${enImpl.join("\n\n")}
}
`;
const teFile = `${header}import 'app_localizations.dart';
class AppLocalizationsTe extends AppLocalizations {
AppLocalizationsTe([String locale = 'te']) : super(locale);
${teImpl.join("\n\n")}
}
`;
fs.writeFileSync(path.join(l10nDir, "app_localizations.dart"), main);
fs.writeFileSync(path.join(l10nDir, "app_localizations_en.dart"), enFile);
fs.writeFileSync(path.join(l10nDir, "app_localizations_te.dart"), teFile);
}
const baseEn = loadArb("app_en.arb");
const baseTe = loadArb("app_te.arb");
const moreEn = loadArb("app_en_more.arb");
const moreTe = loadArb("app_te_more.arb");
const en = merge(baseEn, moreEn);
const te = merge(baseTe, moreTe);
writeLocalizations(en, te);
console.log("Wrote app_localizations*.dart from merged ARBs.");