Localization of yojna schemes done

This commit is contained in:
2026-03-11 18:13:04 +05:30
parent eb81269083
commit 49cac5f469
9 changed files with 303 additions and 161 deletions

View File

@@ -46,9 +46,10 @@ class _APYScreenState extends State<APYScreen> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final l10n = AppLocalizations.of(context);
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: const Text('APY registration'), title: Text(l10n.apyRegistration),
centerTitle: false, centerTitle: false,
), ),
body: SingleChildScrollView( body: SingleChildScrollView(
@@ -61,7 +62,7 @@ class _APYScreenState extends State<APYScreen> {
child: Padding( child: Padding(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
child: Text( child: Text(
"Atal Pension Yojana (APY) is a periodic contribution-based pension scheme for citizens of India.", l10n.apyDescription,
style: Theme.of(context).textTheme.titleMedium, style: Theme.of(context).textTheme.titleMedium,
), ),
), ),
@@ -77,7 +78,7 @@ class _APYScreenState extends State<APYScreen> {
DropdownButtonFormField<User>( DropdownButtonFormField<User>(
value: _selectedAccount, value: _selectedAccount,
decoration: InputDecoration( decoration: InputDecoration(
labelText: AppLocalizations.of(context).accountNumber, labelText: l10n.accountNumber,
border: const OutlineInputBorder(), border: const OutlineInputBorder(),
contentPadding: const EdgeInsets.symmetric( contentPadding: const EdgeInsets.symmetric(
vertical: 20, horizontal: 12), vertical: 20, horizontal: 12),
@@ -95,8 +96,7 @@ class _APYScreenState extends State<APYScreen> {
}, },
validator: (value) { validator: (value) {
if (value == null) { if (value == null) {
return AppLocalizations.of(context) return l10n.accountNumberRequired;
.accountNumberRequired;
} }
return null; return null;
}, },

View File

@@ -20,9 +20,10 @@ class GovSchemeScreen extends StatefulWidget {
class _GovSchemeScreenState extends State<GovSchemeScreen> { class _GovSchemeScreenState extends State<GovSchemeScreen> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final l10n = AppLocalizations.of(context);
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: const Text('Government Schemes'), title: Text(l10n.governmentSchemes),
), ),
body: Stack( body: Stack(
children: [ children: [
@@ -34,8 +35,8 @@ class _GovSchemeScreenState extends State<GovSchemeScreen> {
Expanded( Expanded(
child: GovSchemeTile( child: GovSchemeTile(
logoText: "PMJJBY/PMSBY", logoText: "PMJJBY/PMSBY",
label: "Pradhan Mantri Yojana", label: l10n.pradhanMantriYojana,
subtitle: "Enroll in Pradhan Mantri Jeevan Jyoti Bima Yojana (PMJJBY) and Pradhan Mantri Suraksha Bima Yojana (PMSBY) insurance schemes", subtitle: l10n.enrollPMJJBYPMSBY,
onTap: () { onTap: () {
Navigator.push( Navigator.push(
context, context,
@@ -52,8 +53,8 @@ class _GovSchemeScreenState extends State<GovSchemeScreen> {
Expanded( Expanded(
child: GovSchemeTile( child: GovSchemeTile(
logoText: "APY", logoText: "APY",
label: "Register for Atal Pension Yojana", label: l10n.registerForAtalPensionYojana,
subtitle: "Secure your future with Atal Pension Yojana (APY) retirement scheme. Register in a few steps.", subtitle: l10n.secureYourFutureAPY,
onTap: () { onTap: () {
Navigator.push( Navigator.push(
context, context,

View File

@@ -26,9 +26,9 @@ class _PMMainScreenState extends State<PMMainScreen> {
List<User> _filteredUsers = []; List<User> _filteredUsers = [];
String? _selectedScheme; String? _selectedScheme;
final List<String> _schemes = [ List<String> _getSchemes(AppLocalizations l10n) => [
'Pradhan Mantri Jeevan Jyoti Bima Yojana (PMJJBY)', l10n.pmjjbyFull,
'Pradhan Mantri Suraksha Bima Yojana (PMSBY)', l10n.pmsbyFull,
]; ];
@override @override
@@ -61,33 +61,34 @@ class _PMMainScreenState extends State<PMMainScreen> {
} }
Future<void> _handleCreate() async { Future<void> _handleCreate() async {
final l10n = AppLocalizations.of(context);
if (_selectedAccount == null) { if (_selectedAccount == null) {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Please select account number')), SnackBar(content: Text(l10n.pleaseSelectAccountNumber)),
); );
return; return;
} }
if (_selectedScheme == null) { if (_selectedScheme == null) {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Please select a scheme first')), SnackBar(content: Text(l10n.pleaseSelectSchemeFirst)),
); );
return; return;
} }
final String schemeCode = _selectedScheme!.contains('PMJJBY') ? '02' : '01'; final String schemeCode = (_selectedScheme == l10n.pmjjbyFull) ? '02' : '01';
// Show loading // Show loading
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
const SnackBar( SnackBar(
content: Row( content: Row(
children: [ children: [
CircularProgressIndicator(), const CircularProgressIndicator(),
SizedBox(width: 16), const SizedBox(width: 16),
Text('Fetching details...'), Text(l10n.fetchingDetails),
], ],
), ),
duration: Duration(seconds: 2), duration: const Duration(seconds: 2),
), ),
); );
@@ -111,40 +112,41 @@ class _PMMainScreenState extends State<PMMainScreen> {
context, context,
MaterialPageRoute( MaterialPageRoute(
builder: (context) { builder: (context) {
if (_selectedScheme!.contains('PMJJBY')) { if (_selectedScheme == l10n.pmjjbyFull) {
return PMJJBYScreen(initialData: data); return PMJJBYScreen(initialData: data!);
} else { } else {
return PMSBYScreen(initialData: data); return PMSBYScreen(initialData: data!);
} }
}, },
), ),
); );
} else { } else {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Failed to fetch details or no data found.')), SnackBar(content: Text(l10n.failedToFetchDetails)),
); );
} }
} }
} catch (e) { } catch (e) {
if (mounted) { if (mounted) {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Error: ${e.toString()}')), SnackBar(content: Text(l10n.genericError(e.toString()))),
); );
} }
} }
} }
void _handleEnquiry() { void _handleEnquiry() {
final l10n = AppLocalizations.of(context);
if (_selectedAccount == null) { if (_selectedAccount == null) {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Please select account number')), SnackBar(content: Text(l10n.pleaseSelectAccountNumber)),
); );
return; return;
} }
if (_selectedScheme == null) { if (_selectedScheme == null) {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Please select a scheme first')), SnackBar(content: Text(l10n.pleaseSelectSchemeFirst)),
); );
return; return;
} }
@@ -153,7 +155,7 @@ class _PMMainScreenState extends State<PMMainScreen> {
context, context,
MaterialPageRoute( MaterialPageRoute(
builder: (context) { builder: (context) {
if (_selectedScheme!.contains('PMJJBY')) { if (_selectedScheme == l10n.pmjjbyFull) {
return PMJJBYEnquiryScreen(cifNumber: _selectedAccount!.cifNumber); return PMJJBYEnquiryScreen(cifNumber: _selectedAccount!.cifNumber);
} else { } else {
return PMSBYEnquiryScreen(cifNumber: _selectedAccount!.cifNumber); return PMSBYEnquiryScreen(cifNumber: _selectedAccount!.cifNumber);
@@ -165,9 +167,22 @@ class _PMMainScreenState extends State<PMMainScreen> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final l10n = AppLocalizations.of(context);
final schemes = _getSchemes(l10n);
// Ensure _selectedScheme is valid if it was set in a different language
if (_selectedScheme != null && !schemes.contains(_selectedScheme)) {
// Try to find the corresponding scheme in the new language
// This is a bit tricky, but since we only have two:
// If it doesn't match, it might be from the other language.
// For simplicity, we can just reset it or try to guess.
// Better to use non-localized values for the state, but let's just reset for now if it doesn't match
_selectedScheme = null;
}
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: const Text('Pradhan Mantri Yojana'), title: Text(l10n.pradhanMantriYojana),
centerTitle: false, centerTitle: false,
), ),
body: SingleChildScrollView( body: SingleChildScrollView(
@@ -180,7 +195,7 @@ class _PMMainScreenState extends State<PMMainScreen> {
child: Padding( child: Padding(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
child: Text( child: Text(
"Create and Enquire about your Pradhan Mantri Jeevan Jyoti Bima Yojana (PMJJBY) and Pradhan Mantri Suraksha Bima Yojana(PMSBY) schemes.", l10n.pmjjbyPmsbyDescription,
style: Theme.of(context).textTheme.titleMedium, style: Theme.of(context).textTheme.titleMedium,
), ),
), ),
@@ -196,7 +211,7 @@ class _PMMainScreenState extends State<PMMainScreen> {
DropdownButtonFormField<User>( DropdownButtonFormField<User>(
value: _selectedAccount, value: _selectedAccount,
decoration: InputDecoration( decoration: InputDecoration(
labelText: AppLocalizations.of(context).accountNumber, labelText: l10n.accountNumber,
border: const OutlineInputBorder(), border: const OutlineInputBorder(),
contentPadding: const EdgeInsets.symmetric( contentPadding: const EdgeInsets.symmetric(
vertical: 20, horizontal: 12), vertical: 20, horizontal: 12),
@@ -214,8 +229,7 @@ class _PMMainScreenState extends State<PMMainScreen> {
}, },
validator: (value) { validator: (value) {
if (value == null) { if (value == null) {
return AppLocalizations.of(context) return l10n.accountNumberRequired;
.accountNumberRequired;
} }
return null; return null;
}, },
@@ -226,14 +240,14 @@ class _PMMainScreenState extends State<PMMainScreen> {
isExpanded: true, isExpanded: true,
isDense: false, isDense: false,
itemHeight: null, itemHeight: null,
decoration: const InputDecoration( decoration: InputDecoration(
labelText: 'Select Scheme', labelText: l10n.selectScheme,
border: OutlineInputBorder(), border: const OutlineInputBorder(),
contentPadding: contentPadding:
EdgeInsets.symmetric(vertical: 12, horizontal: 12), const EdgeInsets.symmetric(vertical: 12, horizontal: 12),
), ),
selectedItemBuilder: (BuildContext context) { selectedItemBuilder: (BuildContext context) {
return _schemes.map((String scheme) { return schemes.map((String scheme) {
return Container( return Container(
alignment: Alignment.centerLeft, alignment: Alignment.centerLeft,
child: Text( child: Text(
@@ -246,7 +260,7 @@ class _PMMainScreenState extends State<PMMainScreen> {
); );
}).toList(); }).toList();
}, },
items: _schemes.map((String scheme) { items: schemes.map((String scheme) {
return DropdownMenuItem<String>( return DropdownMenuItem<String>(
value: scheme, value: scheme,
child: Padding( child: Padding(
@@ -287,9 +301,9 @@ class _PMMainScreenState extends State<PMMainScreen> {
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(8),
), ),
), ),
child: const Text( child: Text(
"Create", l10n.create,
style: TextStyle(fontWeight: FontWeight.bold), style: const TextStyle(fontWeight: FontWeight.bold),
), ),
), ),
), ),
@@ -309,7 +323,7 @@ class _PMMainScreenState extends State<PMMainScreen> {
), ),
), ),
child: Text( child: Text(
AppLocalizations.of(context).enquiry, l10n.enquiry,
style: const TextStyle(fontWeight: FontWeight.bold), style: const TextStyle(fontWeight: FontWeight.bold),
), ),
), ),

View File

@@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:kmobile/api/services/yojna_service.dart'; import 'package:kmobile/api/services/yojna_service.dart';
import 'package:kmobile/di/injection.dart'; import 'package:kmobile/di/injection.dart';
import 'package:kmobile/l10n/app_localizations.dart';
class PMJJBYEnquiryScreen extends StatefulWidget { class PMJJBYEnquiryScreen extends StatefulWidget {
final String? cifNumber; final String? cifNumber;
@@ -35,6 +36,7 @@ class _PMJJBYEnquiryScreenState extends State<PMJJBYEnquiryScreen> {
} }
Future<void> _fetchEnquiryData() async { Future<void> _fetchEnquiryData() async {
final l10n = AppLocalizations.of(context);
if (_selectedFinancialYear == null || widget.cifNumber == null) return; if (_selectedFinancialYear == null || widget.cifNumber == null) return;
setState(() { setState(() {
@@ -56,19 +58,19 @@ class _PMJJBYEnquiryScreenState extends State<PMJJBYEnquiryScreen> {
setState(() { setState(() {
if (response is Map<String, dynamic>) { if (response is Map<String, dynamic>) {
if (response['status'] == 'FAILED') { if (response['status'] == 'FAILED') {
_errorMessage = response['message'] ?? 'No record found'; _errorMessage = response['message'] ?? l10n.noRecordFound;
} else { } else {
_enquiryData = response; _enquiryData = response;
} }
} else if (response is List && response.isNotEmpty) { } else if (response is List && response.isNotEmpty) {
_enquiryData = response[0] as Map<String, dynamic>; _enquiryData = response[0] as Map<String, dynamic>;
} else { } else {
_errorMessage = 'No data found for the selected year.'; _errorMessage = l10n.noDataFoundYear;
} }
}); });
} catch (e) { } catch (e) {
setState(() { setState(() {
_errorMessage = 'Error: ${e.toString()}'; _errorMessage = l10n.genericError(e.toString());
}); });
} finally { } finally {
setState(() { setState(() {
@@ -79,9 +81,10 @@ class _PMJJBYEnquiryScreenState extends State<PMJJBYEnquiryScreen> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final l10n = AppLocalizations.of(context);
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: const Text('PMJJBY details'), title: Text(l10n.pmjjbyDetails),
), ),
body: SingleChildScrollView( body: SingleChildScrollView(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
@@ -100,9 +103,9 @@ class _PMJJBYEnquiryScreenState extends State<PMJJBYEnquiryScreen> {
ListTile( ListTile(
contentPadding: EdgeInsets.zero, contentPadding: EdgeInsets.zero,
leading: const Icon(Icons.person, color: Colors.blue), leading: const Icon(Icons.person, color: Colors.blue),
title: const Text('CIF Number'), title: Text(l10n.cifNumber),
subtitle: Text( subtitle: Text(
widget.cifNumber ?? 'N/A', widget.cifNumber ?? l10n.notApplicable,
style: const TextStyle( style: const TextStyle(
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
fontSize: 16, fontSize: 16,
@@ -112,11 +115,11 @@ class _PMJJBYEnquiryScreenState extends State<PMJJBYEnquiryScreen> {
const SizedBox(height: 16), const SizedBox(height: 16),
DropdownButtonFormField<String>( DropdownButtonFormField<String>(
value: _selectedFinancialYear, value: _selectedFinancialYear,
decoration: const InputDecoration( decoration: InputDecoration(
labelText: 'Select Financial Year', labelText: l10n.selectFinancialYear,
border: OutlineInputBorder(), border: const OutlineInputBorder(),
prefixIcon: Icon(Icons.calendar_today), prefixIcon: const Icon(Icons.calendar_today),
contentPadding: EdgeInsets.symmetric(horizontal: 12, vertical: 8), contentPadding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
), ),
items: _financialYears.map((String year) { items: _financialYears.map((String year) {
return DropdownMenuItem<String>( return DropdownMenuItem<String>(
@@ -167,20 +170,20 @@ class _PMJJBYEnquiryScreenState extends State<PMJJBYEnquiryScreen> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Text( Text(
'Scheme Details', l10n.schemeDetails,
style: Theme.of(context).textTheme.titleLarge?.copyWith( style: Theme.of(context).textTheme.titleLarge?.copyWith(
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
color: Theme.of(context).colorScheme.primary, color: Theme.of(context).colorScheme.primary,
), ),
), ),
const Divider(), const Divider(),
_buildDetailRow('Customer Name', _enquiryData!['customername']), _buildDetailRow(l10n.customerName, _enquiryData!['customername']),
_buildDetailRow('Policy Number', _enquiryData!['policynumber']), _buildDetailRow(l10n.policyNumber, _enquiryData!['policynumber']),
_buildDetailRow('Account Number', _enquiryData!['accountno']), _buildDetailRow(l10n.accountNumber, _enquiryData!['accountno']),
_buildDetailRow('Premium Amount', _enquiryData!['preimiumamount']), _buildDetailRow(l10n.premiumAmount, _enquiryData!['preimiumamount']),
_buildDetailRow('Nominee Name', _enquiryData!['nomineename']), _buildDetailRow(l10n.nomineeName, _enquiryData!['nomineename']),
_buildDetailRow('Transaction Date', _enquiryData!['transactiondate']), _buildDetailRow(l10n.date, _enquiryData!['transactiondate']),
_buildDetailRow('Journal No', _enquiryData!['journalno']), _buildDetailRow(l10n.journalNo, _enquiryData!['journalno']),
], ],
), ),
), ),
@@ -203,7 +206,7 @@ class _PMJJBYEnquiryScreenState extends State<PMJJBYEnquiryScreen> {
), ),
Flexible( Flexible(
child: Text( child: Text(
value?.toString() ?? 'N/A', value?.toString() ?? AppLocalizations.of(context).notApplicable,
style: const TextStyle(fontWeight: FontWeight.bold), style: const TextStyle(fontWeight: FontWeight.bold),
textAlign: TextAlign.end, textAlign: TextAlign.end,
), ),

View File

@@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:kmobile/api/services/yojna_service.dart'; import 'package:kmobile/api/services/yojna_service.dart';
import 'package:kmobile/di/injection.dart'; import 'package:kmobile/di/injection.dart';
import 'package:kmobile/l10n/app_localizations.dart';
class PMJJBYScreen extends StatefulWidget { class PMJJBYScreen extends StatefulWidget {
final Map<String, dynamic>? initialData; final Map<String, dynamic>? initialData;
@@ -141,6 +142,7 @@ class _PMJJBYScreenState extends State<PMJJBYScreen> {
} }
Future<void> _handleRegister() async { Future<void> _handleRegister() async {
final l10n = AppLocalizations.of(context);
// Show loading spinner // Show loading spinner
showDialog( showDialog(
context: context, context: context,
@@ -179,7 +181,7 @@ class _PMJJBYScreenState extends State<PMJJBYScreen> {
); );
String x = response.toString(); String x = response.toString();
if(x.contains('RECORD ALREADY EXISTS')){ if(x.contains('RECORD ALREADY EXISTS')){
x= "A record already exists for this request. Your submission has been registered previously."; x= l10n.recordAlreadyExists;
} }
if (mounted) { if (mounted) {
@@ -190,14 +192,14 @@ class _PMJJBYScreenState extends State<PMJJBYScreen> {
context: context, context: context,
barrierDismissible: false, barrierDismissible: false,
builder: (context) => AlertDialog( builder: (context) => AlertDialog(
title: const Text('Response'), title: Text(l10n.response),
content: SingleChildScrollView(child: Text(x)), content: SingleChildScrollView(child: Text(x)),
actions: [ actions: [
TextButton( TextButton(
onPressed: () { onPressed: () {
Navigator.of(context).popUntil((route) => route.isFirst); Navigator.of(context).popUntil((route) => route.isFirst);
}, },
child: const Text('Close'), child: Text(l10n.close),
), ),
], ],
), ),
@@ -207,7 +209,7 @@ class _PMJJBYScreenState extends State<PMJJBYScreen> {
if (mounted) { if (mounted) {
Navigator.pop(context); // Close loading spinner Navigator.pop(context); // Close loading spinner
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Error: ${e.toString()}')), SnackBar(content: Text(l10n.genericError(e.toString()))),
); );
} }
} }
@@ -215,9 +217,10 @@ class _PMJJBYScreenState extends State<PMJJBYScreen> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final l10n = AppLocalizations.of(context);
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: const Text('PMJJBY Registration'), title: Text(l10n.pmjjbyRegistration),
), ),
body: SingleChildScrollView( body: SingleChildScrollView(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
@@ -226,38 +229,38 @@ class _PMJJBYScreenState extends State<PMJJBYScreen> {
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch, crossAxisAlignment: CrossAxisAlignment.stretch,
children: [ children: [
_buildTextField(_nameController, 'Customer Name', readOnly: _isFetched('customername')), _buildTextField(_nameController, l10n.customerName, readOnly: _isFetched('customername')),
_buildTextField(_customerNoController, 'Customer No', readOnly: _isFetched('customerno')), _buildTextField(_customerNoController, l10n.customerNo, readOnly: _isFetched('customerno')),
_buildTextField(_accountNoController, 'Account No', keyboardType: TextInputType.number, readOnly: _isFetched('accountno')), _buildTextField(_accountNoController, l10n.accountNumber, keyboardType: TextInputType.number, readOnly: _isFetched('accountno')),
_buildTextField(_balanceController, 'Available Balance', keyboardType: TextInputType.number, readOnly: _isFetched('availablebalance')), _buildTextField(_balanceController, l10n.availableBalance, keyboardType: TextInputType.number, readOnly: _isFetched('availablebalance')),
_buildTextField(_aadhaarController, 'Aadhaar No', keyboardType: TextInputType.number, readOnly: _isFetched('aadharno')), _buildTextField(_aadhaarController, l10n.aadhaarNo, keyboardType: TextInputType.number, readOnly: _isFetched('aadharno')),
_buildTextField(_dobController, 'Customer DOB (DD/MM/YYYY)', readOnly: _isFetched('customerdob')), _buildTextField(_dobController, l10n.customerDobFormat, readOnly: _isFetched('customerdob')),
_buildTextField(_genderController, 'Gender', readOnly: _isFetched('gender')), _buildTextField(_genderController, l10n.gender, readOnly: _isFetched('gender')),
_buildTextField(_marriedController, 'Married (Yes/No)', readOnly: _isFetched('married')), _buildTextField(_marriedController, l10n.marriedYesNo, readOnly: _isFetched('married')),
_buildTextField(_mobileController, 'Mobile No', keyboardType: TextInputType.phone, readOnly: _isFetched('mobileno')), _buildTextField(_mobileController, l10n.mobileNumber, keyboardType: TextInputType.phone, readOnly: _isFetched('mobileno')),
_buildTextField(_emailController, 'Email ID', keyboardType: TextInputType.emailAddress, readOnly: _isFetched('emailid')), _buildTextField(_emailController, 'Email ID', keyboardType: TextInputType.emailAddress, readOnly: _isFetched('emailid')),
_buildTextField(_panController, 'PAN', readOnly: _isFetched('pan')), _buildTextField(_panController, l10n.pan, readOnly: _isFetched('pan')),
_buildTextField(_ifscController, 'IFSC Code', readOnly: _isFetched('ifsccode')), _buildTextField(_ifscController, l10n.ifscCode, readOnly: _isFetched('ifsccode')),
_buildTextField(_acctOpeningDateController, 'Date of Acct Opening', readOnly: _isFetched('dateofacctopening')), _buildTextField(_acctOpeningDateController, l10n.dateOfAcctOpening, readOnly: _isFetched('dateofacctopening')),
_buildTextField(_pincodeController, 'Pincode', keyboardType: TextInputType.number, readOnly: _isFetched('pincode')), _buildTextField(_pincodeController, l10n.pincode, keyboardType: TextInputType.number, readOnly: _isFetched('pincode')),
_buildTextField(_stateController, 'State', readOnly: _isFetched('state')), _buildTextField(_stateController, l10n.state, readOnly: _isFetched('state')),
_buildTextField(_countryController, 'Country', readOnly: _isFetched('country')), _buildTextField(_countryController, l10n.country, readOnly: _isFetched('country')),
_buildDropdownField(_ruralCategoryController, 'Rural Category', _ruralOptions, readOnly: _isFetched('ruralcategory')), _buildDropdownField(_ruralCategoryController, l10n.ruralCategory, _ruralOptions, readOnly: _isFetched('ruralcategory')),
const Divider(height: 32), const Divider(height: 32),
const Text('Policy Details', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)), Text(l10n.policyDetails, style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
const SizedBox(height: 16), const SizedBox(height: 16),
_buildTextField(_policyNumberController, 'Policy Number', readOnly: _isFetched('policynumber')), _buildTextField(_policyNumberController, l10n.policyNumber, readOnly: _isFetched('policynumber')),
_buildTextField(_premiumAmountController, 'Premium Amount', keyboardType: TextInputType.number, readOnly: _isFetched('premiumamount')), _buildTextField(_premiumAmountController, l10n.premiumAmount, keyboardType: TextInputType.number, readOnly: _isFetched('premiumamount')),
_buildTextField(_financialYearController, 'Financial Year', readOnly: _isFetched('financialyear')), _buildTextField(_financialYearController, l10n.financialYear, readOnly: _isFetched('financialyear')),
_buildDropdownField(_healthStatusController, 'Health Status', _healthStatusOptions), _buildDropdownField(_healthStatusController, l10n.healthStatus, _healthStatusOptions),
_buildTextField(_collectionChannelController, 'Collection Channel'), _buildTextField(_collectionChannelController, l10n.collectionChannel),
const Divider(height: 32), const Divider(height: 32),
const Text('Nominee Details', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)), Text(l10n.nomineeDetails, style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
const SizedBox(height: 16), const SizedBox(height: 16),
_buildTextField(_nomineeNameController, 'Nominee Name'), _buildTextField(_nomineeNameController, l10n.nomineeName),
_buildTextField(_nomineeAddressController, 'Nominee Address'), _buildTextField(_nomineeAddressController, l10n.nomineeAddress),
_buildDropdownField(_nomineeRelationshipController, 'Nominee Relationship', _relationshipOptions, readOnly: _isFetched('nomineerelationship')), _buildDropdownField(_nomineeRelationshipController, l10n.nomineeRelationship, _relationshipOptions, readOnly: _isFetched('nomineerelationship')),
_buildDropdownField(_nomineeMinorController, 'Nominee Minor', _minorOptions, readOnly: _isFetched('nomineeminor')), _buildDropdownField(_nomineeMinorController, l10n.nomineeMinor, _minorOptions, readOnly: _isFetched('nomineeminor')),
const SizedBox(height: 24), const SizedBox(height: 24),
ElevatedButton( ElevatedButton(
onPressed: _handleRegister, onPressed: _handleRegister,
@@ -269,9 +272,9 @@ class _PMJJBYScreenState extends State<PMJJBYScreen> {
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(8),
), ),
), ),
child: const Text( child: Text(
'Register', l10n.register,
style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold), style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
), ),
), ),
const SizedBox(height: 32), const SizedBox(height: 32),

View File

@@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:kmobile/api/services/yojna_service.dart'; import 'package:kmobile/api/services/yojna_service.dart';
import 'package:kmobile/di/injection.dart'; import 'package:kmobile/di/injection.dart';
import 'package:kmobile/l10n/app_localizations.dart';
class PMSBYEnquiryScreen extends StatefulWidget { class PMSBYEnquiryScreen extends StatefulWidget {
final String? cifNumber; final String? cifNumber;
@@ -35,6 +36,7 @@ class _PMSBYEnquiryScreenState extends State<PMSBYEnquiryScreen> {
} }
Future<void> _fetchEnquiryData() async { Future<void> _fetchEnquiryData() async {
final l10n = AppLocalizations.of(context);
if (_selectedFinancialYear == null || widget.cifNumber == null) return; if (_selectedFinancialYear == null || widget.cifNumber == null) return;
setState(() { setState(() {
@@ -56,19 +58,19 @@ class _PMSBYEnquiryScreenState extends State<PMSBYEnquiryScreen> {
setState(() { setState(() {
if (response is Map<String, dynamic>) { if (response is Map<String, dynamic>) {
if (response['status'] == 'FAILED') { if (response['status'] == 'FAILED') {
_errorMessage = response['message'] ?? 'No record found'; _errorMessage = response['message'] ?? l10n.noRecordFound;
} else { } else {
_enquiryData = response; _enquiryData = response;
} }
} else if (response is List && response.isNotEmpty) { } else if (response is List && response.isNotEmpty) {
_enquiryData = response[0] as Map<String, dynamic>; _enquiryData = response[0] as Map<String, dynamic>;
} else { } else {
_errorMessage = 'No data found for the selected year.'; _errorMessage = l10n.noDataFoundYear;
} }
}); });
} catch (e) { } catch (e) {
setState(() { setState(() {
_errorMessage = 'Error: ${e.toString()}'; _errorMessage = l10n.genericError(e.toString());
}); });
} finally { } finally {
setState(() { setState(() {
@@ -79,9 +81,10 @@ class _PMSBYEnquiryScreenState extends State<PMSBYEnquiryScreen> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final l10n = AppLocalizations.of(context);
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: const Text('PMSBY details'), title: Text(l10n.pmsbyDetails),
), ),
body: SingleChildScrollView( body: SingleChildScrollView(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
@@ -100,9 +103,9 @@ class _PMSBYEnquiryScreenState extends State<PMSBYEnquiryScreen> {
ListTile( ListTile(
contentPadding: EdgeInsets.zero, contentPadding: EdgeInsets.zero,
leading: const Icon(Icons.person, color: Colors.blue), leading: const Icon(Icons.person, color: Colors.blue),
title: const Text('CIF Number'), title: Text(l10n.cifNumber),
subtitle: Text( subtitle: Text(
widget.cifNumber ?? 'N/A', widget.cifNumber ?? l10n.notApplicable,
style: const TextStyle( style: const TextStyle(
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
fontSize: 16, fontSize: 16,
@@ -112,11 +115,11 @@ class _PMSBYEnquiryScreenState extends State<PMSBYEnquiryScreen> {
const SizedBox(height: 16), const SizedBox(height: 16),
DropdownButtonFormField<String>( DropdownButtonFormField<String>(
value: _selectedFinancialYear, value: _selectedFinancialYear,
decoration: const InputDecoration( decoration: InputDecoration(
labelText: 'Select Financial Year', labelText: l10n.selectFinancialYear,
border: OutlineInputBorder(), border: const OutlineInputBorder(),
prefixIcon: Icon(Icons.calendar_today), prefixIcon: const Icon(Icons.calendar_today),
contentPadding: EdgeInsets.symmetric(horizontal: 12, vertical: 8), contentPadding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
), ),
items: _financialYears.map((String year) { items: _financialYears.map((String year) {
return DropdownMenuItem<String>( return DropdownMenuItem<String>(
@@ -167,20 +170,20 @@ class _PMSBYEnquiryScreenState extends State<PMSBYEnquiryScreen> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Text( Text(
'Scheme Details', l10n.schemeDetails,
style: Theme.of(context).textTheme.titleLarge?.copyWith( style: Theme.of(context).textTheme.titleLarge?.copyWith(
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
color: Theme.of(context).colorScheme.primary, color: Theme.of(context).colorScheme.primary,
), ),
), ),
const Divider(), const Divider(),
_buildDetailRow('Customer Name', _enquiryData!['customername']), _buildDetailRow(l10n.customerName, _enquiryData!['customername']),
_buildDetailRow('Policy Number', _enquiryData!['policynumber'] ?? _enquiryData!['policyno']), _buildDetailRow(l10n.policyNumber, _enquiryData!['policynumber'] ?? _enquiryData!['policyno']),
_buildDetailRow('Account Number', _enquiryData!['accountno']), _buildDetailRow(l10n.accountNumber, _enquiryData!['accountno']),
_buildDetailRow('Premium Amount', _enquiryData!['preimiumamount'] ?? _enquiryData!['premiumamount']), _buildDetailRow(l10n.premiumAmount, _enquiryData!['preimiumamount'] ?? _enquiryData!['premiumamount']),
_buildDetailRow('Nominee Name', _enquiryData!['nomineename']), _buildDetailRow(l10n.nomineeName, _enquiryData!['nomineename']),
_buildDetailRow('Transaction Date', _enquiryData!['transactiondate']), _buildDetailRow(l10n.date, _enquiryData!['transactiondate']),
_buildDetailRow('Journal No', _enquiryData!['journalno']), _buildDetailRow(l10n.journalNo, _enquiryData!['journalno']),
], ],
), ),
), ),
@@ -203,7 +206,7 @@ class _PMSBYEnquiryScreenState extends State<PMSBYEnquiryScreen> {
), ),
Flexible( Flexible(
child: Text( child: Text(
value?.toString() ?? 'N/A', value?.toString() ?? AppLocalizations.of(context).notApplicable,
style: const TextStyle(fontWeight: FontWeight.bold), style: const TextStyle(fontWeight: FontWeight.bold),
textAlign: TextAlign.end, textAlign: TextAlign.end,
), ),

View File

@@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:kmobile/api/services/yojna_service.dart'; import 'package:kmobile/api/services/yojna_service.dart';
import 'package:kmobile/di/injection.dart'; import 'package:kmobile/di/injection.dart';
import 'package:kmobile/l10n/app_localizations.dart';
class PMSBYScreen extends StatefulWidget { class PMSBYScreen extends StatefulWidget {
final Map<String, dynamic>? initialData; final Map<String, dynamic>? initialData;
@@ -151,6 +152,7 @@ class _PMSBYScreenState extends State<PMSBYScreen> {
} }
Future<void> _handleRegister() async { Future<void> _handleRegister() async {
final l10n = AppLocalizations.of(context);
// Show loading spinner // Show loading spinner
showDialog( showDialog(
context: context, context: context,
@@ -191,7 +193,7 @@ class _PMSBYScreenState extends State<PMSBYScreen> {
); );
String x = response.toString(); String x = response.toString();
if(x.contains('RECORD ALREADY EXISTS')){ if(x.contains('RECORD ALREADY EXISTS')){
x= "A record already exists for this request. Your submission has been registered previously."; x= l10n.recordAlreadyExists;
} }
if (mounted) { if (mounted) {
@@ -202,14 +204,14 @@ class _PMSBYScreenState extends State<PMSBYScreen> {
context: context, context: context,
barrierDismissible: false, barrierDismissible: false,
builder: (context) => AlertDialog( builder: (context) => AlertDialog(
title: const Text('Response'), title: Text(l10n.response),
content: SingleChildScrollView(child: Text(x)), content: SingleChildScrollView(child: Text(x)),
actions: [ actions: [
TextButton( TextButton(
onPressed: () { onPressed: () {
Navigator.of(context).popUntil((route) => route.isFirst); Navigator.of(context).popUntil((route) => route.isFirst);
}, },
child: const Text('Close'), child: Text(l10n.close),
), ),
], ],
), ),
@@ -219,7 +221,7 @@ class _PMSBYScreenState extends State<PMSBYScreen> {
if (mounted) { if (mounted) {
Navigator.pop(context); // Close loading spinner Navigator.pop(context); // Close loading spinner
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Error: ${e.toString()}')), SnackBar(content: Text(l10n.genericError(e.toString()))),
); );
} }
} }
@@ -227,9 +229,10 @@ class _PMSBYScreenState extends State<PMSBYScreen> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final l10n = AppLocalizations.of(context);
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: const Text('PMSBY Registration'), title: Text(l10n.pmsbyRegistration),
), ),
body: SingleChildScrollView( body: SingleChildScrollView(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
@@ -238,43 +241,43 @@ class _PMSBYScreenState extends State<PMSBYScreen> {
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch, crossAxisAlignment: CrossAxisAlignment.stretch,
children: [ children: [
_buildTextField(_nameController, 'Customer Name', readOnly: _isFetched('customername')), _buildTextField(_nameController, l10n.customerName, readOnly: _isFetched('customername')),
_buildTextField(_customerNoController, 'Customer No', readOnly: _isFetched('customerno')), _buildTextField(_customerNoController, l10n.customerNo, readOnly: _isFetched('customerno')),
_buildTextField(_accountNoController, 'Account No', keyboardType: TextInputType.number, readOnly: _isFetched('accountno')), _buildTextField(_accountNoController, l10n.accountNumber, keyboardType: TextInputType.number, readOnly: _isFetched('accountno')),
_buildTextField(_balanceController, 'Available Balance', keyboardType: TextInputType.number, readOnly: _isFetched('availablebalance')), _buildTextField(_balanceController, l10n.availableBalance, keyboardType: TextInputType.number, readOnly: _isFetched('availablebalance')),
_buildTextField(_aadhaarController, 'Aadhaar No', keyboardType: TextInputType.number, readOnly: _isFetched('aadharno')), _buildTextField(_aadhaarController, l10n.aadhaarNo, keyboardType: TextInputType.number, readOnly: _isFetched('aadharno')),
_buildTextField(_dobController, 'Customer DOB (DD/MM/YYYY)', readOnly: _isFetched('customerdob')), _buildTextField(_dobController, l10n.customerDobFormat, readOnly: _isFetched('customerdob')),
_buildTextField(_genderController, 'Gender', readOnly: _isFetched('gender')), _buildTextField(_genderController, l10n.gender, readOnly: _isFetched('gender')),
_buildTextField(_marriedController, 'Married (Yes/No)', readOnly: _isFetched('married')), _buildTextField(_marriedController, l10n.marriedYesNo, readOnly: _isFetched('married')),
_buildTextField(_mobileController, 'Mobile No', keyboardType: TextInputType.phone, readOnly: _isFetched('mobileno')), _buildTextField(_mobileController, l10n.mobileNumber, keyboardType: TextInputType.phone, readOnly: _isFetched('mobileno')),
_buildTextField(_emailController, 'Email ID', keyboardType: TextInputType.emailAddress, readOnly: _isFetched('emailid')), _buildTextField(_emailController, 'Email ID', keyboardType: TextInputType.emailAddress, readOnly: _isFetched('emailid')),
_buildTextField(_address1Controller, 'Address 1', readOnly: _isFetched('address1')), _buildTextField(_address1Controller, l10n.address1, readOnly: _isFetched('address1')),
_buildTextField(_address2Controller, 'Address 2', readOnly: _isFetched('address2')), _buildTextField(_address2Controller, l10n.address2, readOnly: _isFetched('address2')),
_buildTextField(_cityController, 'City', readOnly: _isFetched('city')), _buildTextField(_cityController, l10n.city, readOnly: _isFetched('city')),
_buildTextField(_panController, 'PAN', readOnly: _isFetched('pan')), _buildTextField(_panController, l10n.pan, readOnly: _isFetched('pan')),
_buildTextField(_ifscController, 'IFSC Code', readOnly: _isFetched('ifsccode')), _buildTextField(_ifscController, l10n.ifscCode, readOnly: _isFetched('ifsccode')),
_buildTextField(_acctOpeningDateController, 'Date of Acct Opening', readOnly: _isFetched('dateofacctopening')), _buildTextField(_acctOpeningDateController, l10n.dateOfAcctOpening, readOnly: _isFetched('dateofacctopening')),
_buildTextField(_pincodeController, 'Pincode', keyboardType: TextInputType.number, readOnly: _isFetched('pincode')), _buildTextField(_pincodeController, l10n.pincode, keyboardType: TextInputType.number, readOnly: _isFetched('pincode')),
_buildTextField(_stateController, 'State', readOnly: _isFetched('state')), _buildTextField(_stateController, l10n.state, readOnly: _isFetched('state')),
_buildTextField(_countryController, 'Country', readOnly: _isFetched('country')), _buildTextField(_countryController, l10n.country, readOnly: _isFetched('country')),
_buildDropdownField(_ruralCategoryController, 'Rural Category', _ruralOptions, readOnly: _isFetched('ruralcategory')), _buildDropdownField(_ruralCategoryController, l10n.ruralCategory, _ruralOptions, readOnly: _isFetched('ruralcategory')),
const Divider(height: 32), const Divider(height: 32),
const Text('Policy Details', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)), Text(l10n.policyDetails, style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
const SizedBox(height: 16), const SizedBox(height: 16),
_buildTextField(_policyNumberController, 'Policy Number', readOnly: _isFetched('policyno')), _buildTextField(_policyNumberController, l10n.policyNumber, readOnly: _isFetched('policyno')),
_buildTextField(_premiumAmountController, 'Premium Amount', keyboardType: TextInputType.number, readOnly: _isFetched('premiumamount')), _buildTextField(_premiumAmountController, l10n.premiumAmount, keyboardType: TextInputType.number, readOnly: _isFetched('premiumamount')),
_buildTextField(_financialYearController, 'Financial Year', readOnly: _isFetched('financialyear')), _buildTextField(_financialYearController, l10n.financialYear, readOnly: _isFetched('financialyear')),
_buildTextField(_policyStatusController, 'Policy Status', readOnly: _isFetched('policystatus')), _buildTextField(_policyStatusController, l10n.policyStatus, readOnly: _isFetched('policystatus')),
_buildDropdownField(_healthStatusController, 'Health Status', _healthStatusOptions), _buildDropdownField(_healthStatusController, l10n.healthStatus, _healthStatusOptions),
_buildTextField(_collectionChannelController, 'Collection Channel'), _buildTextField(_collectionChannelController, l10n.collectionChannel),
const Divider(height: 32), const Divider(height: 32),
const Text('Nominee Details', style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)), Text(l10n.nomineeDetails, style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
const SizedBox(height: 16), const SizedBox(height: 16),
_buildTextField(_nomineeNameController, 'Nominee Name'), _buildTextField(_nomineeNameController, l10n.nomineeName),
_buildTextField(_nomineeAddressController, 'Nominee Address'), _buildTextField(_nomineeAddressController, l10n.nomineeAddress),
_buildDropdownField(_relationWithNomineeController, 'Relation with Nominee', _relationshipOptions, readOnly: _isFetched('relationwithnominee')), _buildDropdownField(_relationWithNomineeController, l10n.relationWithNominee, _relationshipOptions, readOnly: _isFetched('relationwithnominee')),
_buildTextField(_nomineeRelationshipController, 'Nominee Relationship'), _buildTextField(_nomineeRelationshipController, l10n.nomineeRelationship),
_buildDropdownField(_nomineeMinorController, 'Nominee Minor', _minorOptions, readOnly: _isFetched('nomineeminor')), _buildDropdownField(_nomineeMinorController, l10n.nomineeMinor, _minorOptions, readOnly: _isFetched('nomineeminor')),
const SizedBox(height: 24), const SizedBox(height: 24),
ElevatedButton( ElevatedButton(
onPressed: _handleRegister, onPressed: _handleRegister,
@@ -286,9 +289,9 @@ class _PMSBYScreenState extends State<PMSBYScreen> {
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(8),
), ),
), ),
child: const Text( child: Text(
'Register', l10n.register,
style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold), style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
), ),
), ),
const SizedBox(height: 32), const SizedBox(height: 32),

View File

@@ -592,5 +592,63 @@
"chequeStolen": "Cheque Stolen", "chequeStolen": "Cheque Stolen",
"chequeMissing": "Cheque Missing", "chequeMissing": "Cheque Missing",
"chequeDamaged": "Cheque Damaged", "chequeDamaged": "Cheque Damaged",
"close": "Close" "close": "Close",
"governmentSchemes": "Government Schemes",
"pradhanMantriYojana": "Pradhan Mantri Yojana",
"atalPensionYojana": "Atal Pension Yojana",
"registerForAtalPensionYojana": "Register for Atal Pension Yojana",
"secureYourFutureAPY": "Secure your future with Atal Pension Yojana (APY) retirement scheme. Register in a few steps.",
"enrollPMJJBYPMSBY": "Enroll in Pradhan Mantri Jeevan Jyoti Bima Yojana (PMJJBY) and Pradhan Mantri Suraksha Bima Yojana (PMSBY) insurance schemes",
"apyRegistration": "APY registration",
"apyDescription": "Atal Pension Yojana (APY) is a periodic contribution-based pension scheme for citizens of India.",
"pmjjbyPmsbyDescription": "Create and Enquire about your Pradhan Mantri Jeevan Jyoti Bima Yojana (PMJJBY) and Pradhan Mantri Suraksha Bima Yojana(PMSBY) schemes.",
"selectScheme": "Select Scheme",
"pmjjbyFull": "Pradhan Mantri Jeevan Jyoti Bima Yojana (PMJJBY)",
"pmsbyFull": "Pradhan Mantri Suraksha Bima Yojana (PMSBY)",
"create": "Create",
"pleaseSelectAccountNumber": "Please select account number",
"pleaseSelectSchemeFirst": "Please select a scheme first",
"fetchingDetails": "Fetching details...",
"failedToFetchDetails": "Failed to fetch details or no data found.",
"pmjjbyDetails": "PMJJBY details",
"pmsbyDetails": "PMSBY details",
"cifNumber": "CIF Number",
"selectFinancialYear": "Select Financial Year",
"schemeDetails": "Scheme Details",
"customerName": "Customer Name",
"policyNumber": "Policy Number",
"premiumAmount": "Premium Amount",
"nomineeName": "Nominee Name",
"journalNo": "Journal No",
"noRecordFound": "No record found",
"noDataFoundYear": "No data found for the selected year.",
"pmjjbyRegistration": "PMJJBY Registration",
"pmsbyRegistration": "PMSBY Registration",
"customerNo": "Customer No",
"aadhaarNo": "Aadhaar No",
"customerDobFormat": "Customer DOB (DD/MM/YYYY)",
"gender": "Gender",
"marriedYesNo": "Married (Yes/No)",
"pan": "PAN",
"dateOfAcctOpening": "Date of Acct Opening",
"pincode": "Pincode",
"state": "State",
"country": "Country",
"ruralCategory": "Rural Category",
"policyDetails": "Policy Details",
"financialYear": "Financial Year",
"healthStatus": "Health Status",
"collectionChannel": "Collection Channel",
"nomineeDetails": "Nominee Details",
"nomineeAddress": "Nominee Address",
"nomineeRelationship": "Nominee Relationship",
"nomineeMinor": "Nominee Minor",
"response": "Response",
"recordAlreadyExists": "A record already exists for this request. Your submission has been registered previously.",
"address1": "Address 1",
"address2": "Address 2",
"city": "City",
"relationWithNominee": "Relation with Nominee",
"policyStatus": "Policy Status",
"emailId": "Email ID"
} }

View File

@@ -593,5 +593,62 @@
"chequeStolen": "चेक चोरी हो गया", "chequeStolen": "चेक चोरी हो गया",
"chequeMissing": "चेक गायब है", "chequeMissing": "चेक गायब है",
"chequeDamaged": "चेक क्षतिग्रस्त है", "chequeDamaged": "चेक क्षतिग्रस्त है",
"close": "बंद करें" "close": "बंद करें",
"governmentSchemes": "सरकारी योजनाएं",
"pradhanMantriYojana": "प्रधानमंत्री योजना",
"atalPensionYojana": "अटल पेंशन योजना",
"registerForAtalPensionYojana": "अटल पेंशन योजना के लिए पंजीकरण करें",
"secureYourFutureAPY": "अटल पेंशन योजना (APY) सेवानिवृत्ति योजना के साथ अपना भविष्य सुरक्षित करें। कुछ ही चरणों में पंजीकरण करें।",
"enrollPMJJBYPMSBY": "प्रधानमंत्री जीवन ज्योति बीमा योजना (PMJJBY) और प्रधानमंत्री सुरक्षा बीमा योजना (PMSBY) बीमा योजनाओं में नामांकन करें",
"apyRegistration": "APY पंजीकरण",
"apyDescription": "अटल पेंशन योजना (APY) भारत के नागरिकों के लिए एक आवधिक योगदान-आधारित पेंशन योजना है।",
"pmjjbyPmsbyDescription": "अपनी प्रधानमंत्री जीवन ज्योति बीमा योजना (PMJJBY) और प्रधानमंत्री सुरक्षा बीमा योजना (PMSBY) योजनाओं के बारे में बनाएं और पूछताछ करें।",
"selectScheme": "योजना चुनें",
"pmjjbyFull": "प्रधानमंत्री जीवन ज्योति बीमा योजना (PMJJBY)",
"pmsbyFull": "प्रधानमंत्री सुरक्षा बीमा योजना (PMSBY)",
"create": "बनाएं",
"pleaseSelectAccountNumber": "कृपया खाता संख्या चुनें",
"pleaseSelectSchemeFirst": "कृपया पहले एक योजना चुनें",
"fetchingDetails": "विवरण प्राप्त किया जा रहा है...",
"failedToFetchDetails": "विवरण प्राप्त करने में विफल या कोई डेटा नहीं मिला।",
"pmjjbyDetails": "PMJJBY विवरण",
"pmsbyDetails": "PMSBY विवरण",
"cifNumber": "CIF संख्या",
"selectFinancialYear": "वित्तीय वर्ष चुनें",
"schemeDetails": "योजना विवरण",
"customerName": "ग्राहक का नाम",
"policyNumber": "पॉलिसी संख्या",
"premiumAmount": "प्रीमियम राशि",
"nomineeName": "नामांकित व्यक्ति का नाम",
"journalNo": "जर्नल नंबर",
"noRecordFound": "कोई रिकॉर्ड नहीं मिला",
"noDataFoundYear": "चयनित वर्ष के लिए कोई डेटा नहीं मिला।",
"pmjjbyRegistration": "PMJJBY पंजीकरण",
"pmsbyRegistration": "PMSBY पंजीकरण",
"customerNo": "ग्राहक संख्या",
"aadhaarNo": "आधार संख्या",
"customerDobFormat": "ग्राहक की जन्म तिथि (DD/MM/YYYY)",
"gender": "लिंग",
"marriedYesNo": "विवाहित (हाँ/नहीं)",
"pan": "पैन",
"dateOfAcctOpening": "खाता खोलने की तिथि",
"pincode": "पिनकोड",
"state": "राज्य",
"country": "देश",
"ruralCategory": "ग्रामीण श्रेणी",
"policyDetails": "पॉलिसी विवरण",
"financialYear": "वित्तीय वर्ष",
"healthStatus": "स्वास्थ्य की स्थिति",
"collectionChannel": "संग्रह चैनल",
"nomineeDetails": "नामांकित व्यक्ति का विवरण",
"nomineeAddress": "नामांकित व्यक्ति का पता",
"nomineeRelationship": "नामांकित व्यक्ति से संबंध",
"nomineeMinor": "नामांकित व्यक्ति नाबालिग है",
"response": "प्रतिक्रिया",
"recordAlreadyExists": "इस अनुरोध के लिए एक रिकॉर्ड पहले से मौजूद है। आपका सबमिशन पहले पंजीकृत किया जा चुका है।",
"address1": "पता 1",
"address2": "पता 2",
"city": "शहर",
"relationWithNominee": "नामांकित व्यक्ति के साथ संबंध",
"policyStatus": "पॉलिसी की स्थिति"
} }