language localization

This commit is contained in:
jayesh
2024-07-09 14:56:23 +05:30
parent c830e4d09c
commit 11d0d3cf8b
18 changed files with 708 additions and 34 deletions

250
assets/language/ar.json Normal file
View File

@@ -0,0 +1,250 @@
{
"splashVersionText": "التطبيق: v.",
"splashCopyrightText": "© 2024 Tanami",
"welcomeTitle1Text": "تانامي تقدم",
"welcomeTitle2Text": "استثمر مع",
"welcomeTitle3Text": "ابدأ الاستثمار اليوم",
"welcomeDescription1Text": "الوصول إلى استثمارات خاصة عالمية حصرية من الدرجة الأولى",
"welcomeDescription2Text": "خبراء استثمار ذوو خبرة مع سجل حافل طويل الأمد",
"welcomeDescription3Text": "بمبلغ 1000 ريال سعودي فقط",
"loginText": "تسجيل الدخول",
"signUpText": "اشتراك",
"welcomeText": "مرحبا بعودتك!",
"pleaseEnterLoginDetails": "يرجى إدخال تفاصيل تسجيل الدخول الخاصة بك للبدء",
"toGetYourAccountPleaseSetYourInfo": "للحصول على حسابك، يرجى تحديد معلوماتك",
"countryOfResidence": "بلد الإقامة",
"chooseCountry": "اختر الدولة",
"phoneNumber": "رقم الهاتف",
"password": "كلمة المرور",
"enterPassword": "أدخل كلمة المرور",
"invalidPhoneNo": "رقم الهاتف غير صالح",
"enterPhoneNo": "أدخل رقم الهاتف",
"invalidPassword": "كلمة المرور غير صالحة",
"forgotPassword": "نسيت كلمة المرور",
"getStartedToday": "ابدأ اليوم",
"setupYourTanamiAccountToBegin": "قم بإعداد حساب تانامي الخاص بك لبدء الاستثمار في بضع خطوات بسيطة",
"step1": "الخطوة 1",
"step2": "الخطوة 2",
"step3": "الخطوة 3",
"enterYourCountryOfResidence": "أدخل بلد إقامتك ورقم هاتفك المحمول",
"enterNameEmailPassword": "أدخل اسمك، بريدك الإلكتروني وكلمة المرور",
"enterNameEmailUniquePassword": "أدخل اسمك وبريدك الإلكتروني واختر كلمة مرور فريدة",
"enableBiometricAuthentication": "قم بتمكين المصادقة البيومترية واختر رمز PIN فريد للوصول بسهولة",
"getStarted": "ابدأ",
"welcome": "أهلا بك!",
"selectYourCountryOfResidence": "حدد بلد إقامتك وأدخل رقم هاتفك المحمول",
"nextText": "التالي",
"backText": "رجوع",
"firstNameText": "الاسم الأول",
"lastNameText": "اسم العائلة",
"emailText": "البريد الإلكتروني",
"repeatPasswordText": "أعد إدخال كلمة المرور",
"min8CharactersSpecialCharctersText": "الحد الأدنى 8 أحرف، تتطلب أحرف خاصة",
"enterFirstName": "أدخل الاسم الأول",
"enterLastName": "أدخل اسم العائلة",
"enterEmail": "أدخل البريد الإلكتروني",
"cantBeEmptyText": "لا يمكن أن يكون فارغا",
"passwordMismatch": "عدم تطابق كلمة المرور",
"iAgreeToThe": "أوافق على",
"termsAndCondition": "الشروط والأحكام",
"andThe": " و",
"privacyPolicy": "سياسة الخصوصية",
"bahrainCountryText": "البحرين",
"kuwaitCountryText": "الكويت",
"omanCountryText": "عمان",
"qatarCountryText": "قطر",
"saudiArabiaCountryText": "المملكة العربية السعودية",
"uaeCountryText": "الإمارات العربية المتحدة",
"confirmSelectionText": "تأكيد الاختيار",
"portfolioText": "قيمة المحفظة",
"portfolio": "قيمة المحفظة: ",
"investmentamount": "مبلغ الاستثمار",
"currentval": "التقييم الحالي",
"totalreturn": "إجمالي العائد",
"disttodate": "التوزيعات حتى الآن",
"includeddocs": "وثائق الاستثمار",
"videosTitle": "فيديوهات",
"academyText": "الأكاديمية",
"exitText": "خروج",
"cancelText": "إلغاء",
"areYouSureYouWantToExitText": "هل أنت متأكد أنك تريد الخروج؟",
"faqTitle": "الأسئلة الشائعة:",
"unlockText": "افتح",
"tanamiAppIsLocked": "تطبيق تانامي مقفل",
"securityMssgText": "لأمانك، يمكنك استخدام تطبيق تانامي فقط عندما يكون مفتوحًا",
"faceIdText": "معرف الوجه",
"appAskPermissionText": "يطلب تطبيق تانامي الإذن لاستخدام معرف الوجه (أو بصمة الإصبع)",
"checkYourMessages": "تحقق من رسائلك",
"referToSameOtpMessage": "أدخل الكود المكون من 6 أرقام المرسل إلى هاتفك المحمول",
"resendSms": "إعادة إرسال الرسائل القصيرة",
"otpVerifiedSucessfully": "تم التحقق من OTP بنجاح!",
"otpVerifiedFailed": "فشل التحقق من OTP:",
"pinCode": "رمز PIN",
"createPinCode": "إنشاء رمز PIN",
"changePinCode": "تغيير رمز PIN",
"confirmPinCode": "تأكيد رمز PIN",
"incorrectPinCode": "رمز PIN غير صحيح. حاول مرة اخرى.",
"welcomeBackText": "مرحبا بعودتك",
"userYourAppPinToLoginEnterTanami": "استخدم رمز PIN لتسجيل الدخول إلى تانامي",
"forgotPinCode": "نسيت رمز PIN",
"notificationText": "إشعار",
"allowNotificationText": "السماح بالإشعار",
"toRestorePinYouWillBeLoggedOut": "لاستعادة رمز PIN ستتم تسجيل خروجك",
"allowText": "السماح",
"declineText": "رفض",
"almostHere": "تقريبًا هنا...",
"completeAcc": "أكمل ملف الحساب في 3 دقائق لبدء الاستثمار",
"restorePasswordText": "استعادة كلمة المرور",
"toRestorePasswordPleaseEnterPhoneNumber": "لاستعادة كلمة المرور، يرجى إدخال رقم الهاتف",
"createNewPasswordText": "إنشاء كلمة مرور جديدة",
"submitText": "إرسال",
"walletTitle": "رصيد المحفظة",
"walletText": "محفظة",
"day": "اليوم",
"filterTitle": "مرشحات",
"onHold": "قيد الانتظار",
"deposit": "إيداع",
"withdraw": "سحب",
"withdrawal": "انسحاب",
"yield": "عائد",
"refund": "استرداد",
"investment": "استثمار",
"walletDetailsTitle": "تفاصيل",
"withdrawalScreenTitle": "أدخل تفاصيل البنك",
"depositScreenTitle": "إخطار الإيداع",
"status": "الحالة",
"paymentMethod": "طريقة الدفع",
"accountName": "اسم الحساب",
"accountHolderName": "اسم صاحب الحساب/المستفيد",
"iban": "رقم الحساب الدولي IBAN",
"beneficiaryAddress": "عنوان المستفيد",
"bankName": "اسم البنك",
"branchAddress": "عنوان الفرع",
"SWIFTcode": "رمز SWIFT/BIC",
"refid": "معرف المرجع",
"previewTitle": "تأكيد السحب",
"info": "تم استلام طلب السحب الخاص بك وهو قيد المعالجة حاليًا.",
"info1": "يرجى تأكيد مبلغ السحب والتحقق من دقة تفاصيل البنك الخاصة بك.",
"workingDays": "تختلف أوقات المعالجة من 3-7 أيام عمل",
"balance": "رصيد المحفظة",
"withdrawTitle": "انسحاب",
"depositTitle": "إيداع",
"withdrawDetails": "تفاصيل السحب",
"depositDetails": "تفاصيل الإيداع",
"required": "الحقول بعلامة * مطلوبة",
"withdrawAmt": "إجمالي مبلغ السحب:",
"depositAmt": "إجمالي مبلغ الإيداع:",
"info2": "يمكن أن يشمل الدفع رسوم التحويل من البنك الخاص بك",
"info3": "لإتمام الدفع، يرجى استخدام تفاصيل الدفع ومعرف المرجع في بنكك",
"next": "التالي",
"depositNoti": "إنشاء إشعار إيداع",
"payWithAppleText": "الدفع بواسطة Apple Pay",
"submit": "إرسال الطلب",
"Submit": "إرسال",
"submitDeposit": "إرسال الإيداع",
"cont": "استمر",
"later": "لاحقا",
"back": "العودة للتغيير",
"clear": "مسح الكل",
"bankTransfer": "التحويل المصرفي",
"amtTrans": "مبلغ المعاملة",
"date1": "الأحدث أولا",
"date2": "الأقدم أولا",
"all": "الكل",
"byDate": "حسب التاريخ",
"byAction": "حسب نوع الإجراء",
"byStatus": "حسب الحالة",
"settingsText": "الإعدادات",
"experiencedInvestorText": "مستثمر متمرس؟",
"removeInvestmentText": "إزالة حدود الاستثمار",
"upgradeText": "قم بترقية حالة المستثمر الخاصة بك اليوم في بضع خطوات بسيطة للسماح بالاستثمارات التي تزيد عن 200,000 ريال سعودي",
"generalText": "عام",
"notificationsText": "الإخطارات",
"languageText": "اللغة",
"englishText": "الإنجليزية",
"privacySettingsText": "إعدادات الخصوصية",
"biometricText": "معرف بيومتري",
"resetPasswordText": "إعادة تعيين كلمة المرور",
"resetPinCodeText": "إعادة تعيين رمز PIN",
"supportText": "الدعم",
"contactAdminText": "الاتصال بالمشرف",
"privacyPolicyText": "سياسة الخصوصية",
"termsAndConditionText": "الشروط والأحكام",
"faqText": "الأسئلة الشائعة",
"logoutText": "تسجيل خروج",
"deleteAccountText": "حذف الحساب",
"areYouSureWantToLogoutText": "هل أنت متأكد أنك تريد تسجيل الخروج؟",
"noText": "لا",
"yesText": "نعم",
"pinUpdatedSucess": "تم تحديث رمز PIN بنجاح!",
"pinVerifiedSucess": "تم التحقق من رمز PIN بنجاح!",
"passwordUpdatedSucess": "تم تحديث كلمة المرور بنجاح!",
"changePasswordText": "تغيير كلمة المرور",
"newPasswordText": "كلمة المرور الجديدة",
"currentPsswordText": "كلمة المرور الحالية",
"byPhoneText": "عبر الهاتف",
"byEmailText": "بواسطة البريد الإلكتروني",
"weAreHereToHelp": "نحن هنا للمساعدة!",
"arabicText": "اللغة العربية",
"chooseTheLanguageText": "اختر اللغة",
"changingTheLanguageWillReloadApp": "سيؤدي تغيير اللغة إلى إعادة تحميل التطبيق",
"weAreSadToSeeYouGo": "نحن حزينون لرؤيتك تذهب :(",
"enterAdescription": "أدخل وصفا...",
"toHelpUsImprovePleaseLetusKnowWhyYouWantToDeleteAccount": "لمساعدتنا على التحسين، يرجى إخبارنا لماذا تريد حذف حسابك",
"charactersLeft": "الأحرف المتبقية",
"iUnderstandAndAgreeThatmyDataWillBeDeleted": "أنا أفهم وأوافق على حذف بياناتي",
"noIWantToStay": "لا، أريد البقاء",
"pleaseEnteraDescription": "يرجى إدخال وصف",
"pleaseCheckThisField": "يرجى التحقق من هذا الحقل",
"weHaveReceivedYourRequestToDeleteAccount": "لقد تلقينا طلبك لحذف حسابك",
"theRequestWillBeProcessed": "سيتم معالجة الطلب في غضون 72 ساعة",
"closeText": "أغلق",
"investText": "استثمر",
"availableText": "متاح",
"closedText": "مغلق",
"completeYourVerification": "أكمل التحقق الخاص بك",
"verifyYourAccountInUnderMinutesToStartInvestingToday": "تحقق من حسابك في أقل من 10 دقائق لبدء الاستثمار اليوم!",
"closingDateText": "تاريخ الإغلاق",
"closedDateText": "تاريخ الإغلاق",
"fundedText": "ممول",
"sponsorNameText": "اسم الراعي",
"estimatedReturnText": "العائد المقدر",
"originalEstimatedReturnText": "العائد المقدر الأصلي",
"actualEstimatedReturnText": "العائد الفعلي",
"actualReturnToDate": "العائد الفعلي حتى الآن",
"holdingPeriodText": "فترة الحيازة",
"payoutDateText": "تاريخ الدفع",
"expectedExitDate": "تاريخ الخروج المتوقع",
"minimumInvestmentText": "الحد الأدنى للاستثمار",
"keyMeritsOfInvestmentText": "المزايا الرئيسية",
"investmentDetailsText": "تفاصيل الاستثمار",
"enterInvestmentAmountText": "أدخل مبلغ الاستثمار",
"thisIsUsdInvestmentOpportunityText": "هذه فرصة استثمارية بالدولار الأمريكي. سيتم تحويل الأموال إلى الدولار الأمريكي بسعر x عند التأكيد",
"choosePaymentMethodText": "اختر طريقة الدفع",
"balanceText": "الرصيد",
"applePayText": "Apple Pay",
"gPayText": "Gpay Pay",
"bankTransferText": "حول الأموال مباشرة من حسابك المصرفي إلى محفظة تانامي الخاصة بك.",
"instantTransferFundsApplePayText": "تحويل فوري للأموال باستخدام Apple Pay!",
"instantTransferFundsGpayPayText": "تحويل فوري للأموال باستخدام Gpay Pay!",
"retailInvestirCanInvestMaxText": "يمكن للمستثمرين التجزئة استثمار حد أقصى قدره 200,000 ريال سعودي في هذه الفرصة.",
"upgradeYourInvestorStatusToIncreaseText": "قم بترقية حالة المستثمر الخاصة بك لزيادة حد الاستثمار الخاص بك.",
"currentExchangeText": "سعر الصرف الحالي",
"feeText": "الرسوم",
"processingFees": "رسوم المعالجة",
"debitedAmountText": "المبلغ المخصوم",
"totalInvestmentAmountText": "إجمالي مبلغ الاستثمار",
"confirmInvestmentText": "تأكيد الاستثمار",
"paymentMethodText": "طريقة الدفع",
"totalDebitedAmountText": "إجمالي المبلغ المخصوم",
"unableToProcessTransactionText": "غير قادر على معالجة المعاملة",
"investmentOpportunityHasReachedMaxcapText": "وصلت فرصة الاستثمار إلى الحد الأقصى",
"backToInvestmentText": "العودة إلى الاستثمار",
"otpCheckIsFailedText": "فشل التحقق من OTP...",
"pleaseTryAgainText": "الرجاء المحاولة مرة أخرى",
"tryAgainText": "حاول مرة اخرى",
"investmentConfirmationText": "تأكيد الاستثمار",
"enterAmountText": "أدخل المبلغ",
"pleaseEnterAmountText": "الرجاء إدخال المبلغ"
}

250
assets/language/en.json Normal file
View File

@@ -0,0 +1,250 @@
{
"splashVersionText": "APP: v.",
"splashCopyrightText": "© 2024 Tanami",
"welcomeTitle1Text": "Tanami offers",
"welcomeTitle2Text": "Invest alongside",
"welcomeTitle3Text": "Start investing today",
"welcomeDescription1Text": "access to best-in-class, exclusive, global private investments",
"welcomeDescription2Text": "experienced investment experts with a long-standing track record",
"welcomeDescription3Text": "with only SAR 1,000",
"loginText": "Log In",
"signUpText": "Sign Up",
"welcomeText": "Welcome back!",
"pleaseEnterLoginDetails": "Please enter your login details to get started",
"toGetYourAccountPleaseSetYourInfo": "To get your account please set your info",
"countryOfResidence": "Country of residence",
"chooseCountry": "Choose country",
"phoneNumber": "Phone number",
"password": "Password",
"enterPassword": "Enter Password",
"invalidPhoneNo": "Invalid phone number",
"enterPhoneNo": "Enter phone number",
"invalidPassword": "Invalid password",
"forgotPassword": "Forgot password",
"getStartedToday": "Get started today",
"setupYourTanamiAccountToBegin": "Setup your Tanami account to begin investing in a few simple steps",
"step1": "Step 1",
"step2": "Step 2",
"step3": "Step 3",
"enterYourCountryOfResidence": "Enter your country of residence and mobile number",
"enterNameEmailPassword": "Enter your name, email and password",
"enterNameEmailUniquePassword": "Enter your name and email and choose a unique password",
"enableBiometricAuthentication": "Enable biometric authentication and select a unique pin code for easy access",
"getStarted": "Get started",
"welcome": "Welcome!",
"selectYourCountryOfResidence": "Select your country of residence and enter your mobile number",
"nextText": "Next",
"backText": "Back",
"firstNameText": "First Name",
"lastNameText": "Last Name",
"emailText": "Email",
"repeatPasswordText": "Repeat Password",
"min8CharactersSpecialCharctersText": "Min 8 characters, special characters required",
"enterFirstName": "Enter first name",
"enterLastName": "Enter last name",
"enterEmail": "Enter email",
"cantBeEmptyText": "Can't be empty",
"passwordMismatch": "Password mismatch",
"iAgreeToThe": "I agree to the",
"termsAndCondition": "Terms & Conditions",
"andThe": " and the",
"privacyPolicy": "Privacy Policy",
"bahrainCountryText": "Bahrain",
"kuwaitCountryText": "Kuwait",
"omanCountryText": "Oman",
"qatarCountryText": "Qatar",
"saudiArabiaCountryText": "Saudi Arabia",
"uaeCountryText": "United Arab Emirates",
"confirmSelectionText": "Confirm selection",
"portfolioText": "Portfolio Value",
"portfolio": "Portfolio Value: ",
"investmentamount": "Investment Amount",
"currentval": "Current valuation",
"totalreturn": "Total return",
"disttodate": "Distributions to date",
"includeddocs": "Investment Documents",
"videosTitle": "Videos",
"academyText": "Academy",
"exitText": "Exit",
"cancelText": "Cancel",
"areYouSureYouWantToExitText": "Are you sure you want to Exit?",
"faqTitle": "Frequently Asked Questions:",
"unlockText": "Unlock",
"tanamiAppIsLocked": "Tanami Capital is locked",
"securityMssgText": "For your security, you can only use Tanami Capital when it's unlocked",
"faceIdText": "Face Id",
"appAskPermissionText": "Tanami App ask permission to use Face ID (or Fingerprint)",
"checkYourMessages": "Check your messages",
"referToSameOtpMessage": "Enter the 6-digit code sent to your mobile",
"resendSms": "Resend SMS",
"otpVerifiedSucessfully": "OTP Verified Successfully!",
"otpVerifiedFailed": "OTP Verification Failed:",
"pinCode": "Pin Code",
"createPinCode": "Create Pin Code",
"changePinCode": "Change Pin Code",
"confirmPinCode": "Confirm Pin Code",
"incorrectPinCode": "Incorrect PIN. Please try again.",
"welcomeBackText": "Welcome back",
"userYourAppPinToLoginEnterTanami": "Use your app PIN to login to enter Tanami",
"forgotPinCode": "Forgot Pin Code",
"notificationText": "Notification",
"allowNotificationText": "Allow notification",
"toRestorePinYouWillBeLoggedOut": "To restore PIN you will be Logged out",
"allowText": "Allow",
"declineText": "Decline",
"almostHere": "Almost here...",
"completeAcc": "Complete account profile in 3 minutes to start investing",
"restorePasswordText": "Restore password",
"toRestorePasswordPleaseEnterPhoneNumber": "To restore password please enter phone number",
"createNewPasswordText": "Create new password",
"submitText": "Submit",
"walletTitle": "Wallet balance",
"walletText": "Wallet",
"day": "Today",
"filterTitle": "Filters",
"onHold": "On Hold",
"deposit": "Deposit",
"withdraw": "Withdraw",
"withdrawal": "Withdrawal",
"yield": "Yield",
"refund": "Refund",
"investment": "Investment",
"walletDetailsTitle": "Details",
"withdrawalScreenTitle": "Enter bank details",
"depositScreenTitle": "Deposit notification",
"status": "Status",
"paymentMethod": "Payment Method",
"accountName": "Account Name",
"accountHolderName": "Account Holder Name/Beneficiary Name",
"iban": "IBAN",
"beneficiaryAddress": "Beneficiary Address",
"bankName": "Bank Name",
"branchAddress": "Branch Address",
"SWIFTcode": "SWIFT/BIC code",
"refid": "Reference ID",
"previewTitle": "Withdrawal confirmation",
"info": "Your withdrawal request has been received and is currently being processed.",
"info1": "Please confirm the withdrawal amount and verify the accuracy of your bank details.",
"workingDays": "Processing times vary from 3-7 working days",
"balance": "Wallet Balance",
"withdrawTitle": "Withdrawal",
"depositTitle": "Deposit",
"withdrawDetails": "Withdrawal details",
"depositDetails": "Deposit details",
"required": "Fields with * are required",
"withdrawAmt": "Total Withdrawal amount:",
"depositAmt": "Total Deposit amount:",
"info2": "Payment can include transfer fee from your bank",
"info3": "To accomplish payment please use payment details and Reference ID in tour Bank",
"next": "Next",
"depositNoti": "Create deposit notification",
"payWithAppleText": "Pay with Apple Pay",
"submit": "Submit request",
"Submit": "Submit",
"submitDeposit": "Submit deposit",
"cont": "Continue",
"later": "Later",
"back": "Back to change",
"clear": "Clear All",
"bankTransfer": "Bank Transfer",
"amtTrans": "Amount of transaction",
"date1": "Newest first",
"date2": "Oldest first",
"all": "All",
"byDate": "By date",
"byAction": "By type of action",
"byStatus": "By status",
"settingsText": "Settings",
"experiencedInvestorText": "Experienced investor?",
"removeInvestmentText": "Remove investment thresholds",
"upgradeText": "Upgrade your investor status today in a few simple steps to allows investments higher than SAR 200,000",
"generalText": "General",
"notificationsText": "Notifications",
"languageText": "Language",
"englishText": "English",
"privacySettingsText": "Privacy Settings",
"biometricText": "Biometric ID",
"resetPasswordText": "Reset Password",
"resetPinCodeText": "Reset PIN-code",
"supportText": "Support",
"contactAdminText": "Contact Admin",
"privacyPolicyText": "Privacy Policy",
"termsAndConditionText": "Terms & Conditions",
"faqText": "FAQ",
"logoutText": "Log Out",
"deleteAccountText": "Delete account",
"areYouSureWantToLogoutText": "Are you sure you want to Logout?",
"noText": "No",
"yesText": "Yes",
"pinUpdatedSucess": "Pin updated Sucessfully !",
"pinVerifiedSucess": "Pin verified Sucessfully !",
"passwordUpdatedSucess": "Password updated Sucessfully !",
"changePasswordText": "Change Password",
"newPasswordText": "New Password",
"currentPsswordText": "Current Password",
"byPhoneText": "By phone",
"byEmailText": "By-mail",
"weAreHereToHelp": "We are here to help!",
"arabicText": "اللغة العربية",
"chooseTheLanguageText": "Choose the language",
"changingTheLanguageWillReloadApp": "Changing the language will reload the application",
"weAreSadToSeeYouGo": "We're sad to see you go :(",
"enterAdescription": "Enter a description...",
"toHelpUsImprovePleaseLetusKnowWhyYouWantToDeleteAccount": "To help us improve, please let us know why you want to delete your account",
"charactersLeft": "characters left",
"iUnderstandAndAgreeThatmyDataWillBeDeleted": "I understand and agree that my data will be deleted",
"noIWantToStay": "No, i want to stay",
"pleaseEnteraDescription": "Please enter a description",
"pleaseCheckThisField": "Please check this field",
"weHaveReceivedYourRequestToDeleteAccount": "We have received your request to delete your account",
"theRequestWillBeProcessed": "The request will be processed within 72 hours",
"closeText": "Close",
"investText": "Invest",
"availableText": "Available",
"closedText": "Closed",
"completeYourVerification": "Complete your verification",
"verifyYourAccountInUnderMinutesToStartInvestingToday": "Verify your account in under 10 minutes to start investing today!",
"closingDateText": "Closing Date",
"closedDateText": "Closed Date",
"fundedText": "funded",
"sponsorNameText": "Sponsor name",
"estimatedReturnText": "Estimated return",
"originalEstimatedReturnText": "Original estimated return",
"actualEstimatedReturnText": "Actual return",
"actualReturnToDate": "Actual return to date",
"holdingPeriodText": "Holding period",
"payoutDateText": "Payout Date",
"expectedExitDate": "Expected Exit Date",
"minimumInvestmentText": "Minimum investment",
"keyMeritsOfInvestmentText": "Key Merits",
"investmentDetailsText": "Investment details",
"enterInvestmentAmountText": "Enter investment amount",
"thisIsUsdInvestmentOpportunityText": "This is a USD investment opportunity. Funds will be converted into USD at a rate of x upon confirmation",
"choosePaymentMethodText": "Choose payment method",
"balanceText": "Balance",
"applePayText": "Apple Pay",
"gPayText": "Gpay Pay",
"bankTransferText": "Directly transfer funds from your bank account into your Tanami wallet.",
"instantTransferFundsApplePayText": "Instant transfer of funds using Apple Pay!",
"instantTransferFundsGpayPayText": "Instant transfer of funds using Gpay Pay!",
"retailInvestirCanInvestMaxText": "Retail investors can invest a maximum of SAR 200,000 in this opportunity.",
"upgradeYourInvestorStatusToIncreaseText": "Upgrade your investor status to increase your investment limit.",
"currentExchangeText": "Current Exchange",
"feeText": "Fee",
"processingFees": "Processing fee",
"debitedAmountText": "Debited amount",
"totalInvestmentAmountText": "Total Investment amount",
"confirmInvestmentText": "Confirm investment",
"paymentMethodText": "Payment method",
"totalDebitedAmountText": "Total debited amount",
"unableToProcessTransactionText": "Unable to process transaction",
"investmentOpportunityHasReachedMaxcapText": "Investment opportunity has reached maximum capacity",
"backToInvestmentText": "Back to Investment",
"otpCheckIsFailedText": "OTP Check is failed...",
"pleaseTryAgainText": "Please try again",
"tryAgainText": "Try again",
"investmentConfirmationText": "Investment confirmation",
"enterAmountText": "Enter Amount",
"pleaseEnterAmountText": "Please Enter Amount"
}

View File

@@ -1,5 +1,3 @@
// network_connectivity.dart
import 'dart:async';
import 'package:connectivity_plus/connectivity_plus.dart';
@@ -22,13 +20,17 @@ class NetworkConnectivity {
void initialize() {
_subscription = _connectivity.onConnectivityChanged
.listen((List<ConnectivityResult> result) {
String status = result.toString();
onStatusChange(status);
if (result.isNotEmpty) {
String status = result.toString();
onStatusChange(status);
if (result[0] == ConnectivityResult.wifi ||
result[0] == ConnectivityResult.mobile) {
if (goRouter.canPop()) {
goRouter.pop(true);
if (result[0] == ConnectivityResult.wifi ||
result[0] == ConnectivityResult.mobile) {
if (goRouter.canPop()) {
goRouter.pop(true);
}
} else {
goRouter.pushNamed(RouteName.noInternetScreen);
}
} else {
goRouter.pushNamed(RouteName.noInternetScreen);
@@ -42,7 +44,8 @@ class NetworkConnectivity {
Future<void> checkInternet() async {
final connectivityResult = await _connectivity.checkConnectivity();
if (connectivityResult[0] != ConnectivityResult.none) {
if (connectivityResult.isNotEmpty &&
connectivityResult[0] != ConnectivityResult.none) {
onStatusChange(connectivityResult.toString());
} else {
onStatusChange(connectivityResult.toString());

View File

@@ -0,0 +1,55 @@
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class AppLocalizations {
final Locale locale;
AppLocalizations(this.locale);
static AppLocalizations of(BuildContext context) {
return Localizations.of<AppLocalizations>(context, AppLocalizations)!;
}
static const LocalizationsDelegate<AppLocalizations> delegate =
_AppLocalizationsDelegate();
late Map<String, String> _localizedStrings;
Future<bool> load() async {
String jsonString = await rootBundle
.loadString('assets/language/${locale.languageCode}.json');
Map<String, dynamic> jsonMap = json.decode(jsonString);
_localizedStrings = jsonMap.map((key, value) {
return MapEntry(key, value.toString());
});
return true;
}
String translate(String key) {
return _localizedStrings[key] ?? key;
}
}
class _AppLocalizationsDelegate
extends LocalizationsDelegate<AppLocalizations> {
const _AppLocalizationsDelegate();
@override
bool isSupported(Locale locale) {
return ['en', 'ar'].contains(locale.languageCode);
}
@override
Future<AppLocalizations> load(Locale locale) async {
AppLocalizations localizations = AppLocalizations(locale);
await localizations.load();
return localizations;
}
@override
bool shouldReload(_AppLocalizationsDelegate old) => false;
}

View File

@@ -1,3 +1,5 @@
import 'dart:io';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:local_auth/local_auth.dart';
@@ -23,13 +25,26 @@ class BiometricBloc extends Bloc<BiometricEvent, BiometricState> {
AuthenticateBiometricEvent event, Emitter<BiometricState> emit) async {
emit(BiometricAuthenticating());
try {
bool authenticated = await localAuthentication.authenticate(
localizedReason: 'Please authenticate to access the app',
options: const AuthenticationOptions(
useErrorDialogs: true,
stickyAuth: true,
),
);
bool authenticated = false;
if (Platform.isIOS) {
authenticated = await localAuthentication.authenticate(
localizedReason: 'Please authenticate to access the app',
options: const AuthenticationOptions(
useErrorDialogs: true,
stickyAuth: true,
biometricOnly: true,
),
);
} else if (Platform.isAndroid) {
authenticated = await localAuthentication.authenticate(
localizedReason: 'Please authenticate to access the app',
options: const AuthenticationOptions(
useErrorDialogs: true,
stickyAuth: true,
),
);
}
if (authenticated) {
emit(BiometricAuthenticated());
} else {

View File

@@ -8,10 +8,10 @@ import 'package:flutter_svg/flutter_svg.dart';
import '../../../../core/routes/route_name.dart';
import '../../../../core/routes/routes.dart';
import '../../../../core/styles/app_images.dart';
import '../../../../shared/components/device_locked_dialog.dart';
import '../bloc/biometric_bloc.dart';
import '../bloc/biometric_event.dart';
import '../bloc/biometric_state.dart';
import '../../../../shared/components/device_locked_dialog.dart';
class BiometricLayout extends StatelessWidget {
const BiometricLayout({super.key});

View File

@@ -44,14 +44,14 @@ class SplashScreen extends StatelessWidget {
// Navigate to the WelcomeScreen using the goRouter
goRouter.goNamed(RouteName.welcomeScreen);
} else {
// if (await secureStorageService.read('biometric') != null &&
// await secureStorageService.read('biometric') == 'on') {
// goRouter.goNamed(RouteName.biometricScreen);
// } else {
goRouter.goNamed(RouteName.pinScreen, pathParameters: {
"fromScreen": "LoginedInUser",
});
// }
if (await secureStorageService.read('biometric') != null &&
await secureStorageService.read('biometric') == 'on') {
goRouter.goNamed(RouteName.biometricScreen);
} else {
goRouter.goNamed(RouteName.pinScreen, pathParameters: {
"fromScreen": "LoginedInUser",
});
}
}
}
}

View File

@@ -1,15 +1,19 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:local_auth/local_auth.dart';
import 'core/routes/routes.dart';
import 'core/utils/connectivity/network_connectivity.dart';
import 'core/utils/language/localizations_delegate.dart';
import 'features/biometric/presentation/bloc/biometric_bloc.dart';
import 'features/biometric/presentation/bloc/biometric_event.dart';
import 'features/countrySelection/presentation/bloc/choose_country_bloc.dart';
import 'shared/components/bloc/bottom_nav_bar/bottom_navigation_bloc.dart';
import 'shared/components/bloc/language/lng_bloc.dart';
import 'shared/components/bloc/language/lng_state.dart';
/* CREATED BY - JAYESH JAIN
DATE - 24-05-2024
@@ -81,17 +85,43 @@ class _MyAppState extends State<MyApp> with WidgetsBindingObserver {
BlocProvider(
create: (_) =>
BiometricBloc(LocalAuthentication())..add(CheckBiometricEvent()),
)
),
BlocProvider(
create: (_) => LocalizationBloc(),
),
],
child: ScreenUtilInit(
builder: (BuildContext context, Widget? child) => MaterialApp.router(
title: 'Tanami Capital',
theme: ThemeData(
useMaterial3: true,
),
debugShowCheckedModeBanner: false,
routerConfig: goRouter,
),
builder: (BuildContext context, Widget? child) =>
BlocBuilder<LocalizationBloc, LocalizationState>(
builder: (context, state) {
return MaterialApp.router(
title: 'Tanami Capital',
locale: state.locale,
supportedLocales: const [
Locale('en', ''),
Locale('ar', ''),
],
localizationsDelegates: const [
AppLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
localeResolutionCallback: (locale, supportedLocales) {
for (var supportedLocale in supportedLocales) {
if (supportedLocale.languageCode == locale?.languageCode) {
return supportedLocale;
}
}
return supportedLocales.first;
},
theme: ThemeData(
useMaterial3: true,
),
debugShowCheckedModeBanner: false,
routerConfig: goRouter,
);
}),
designSize: const Size(390, 844),
),
);

View File

@@ -0,0 +1,13 @@
import 'package:bloc/bloc.dart';
import 'package:flutter/material.dart';
import 'lng_event.dart';
import 'lng_state.dart';
class LocalizationBloc extends Bloc<LocalizationEvent, LocalizationState> {
LocalizationBloc() : super(const LocalizationState(Locale('en'))) {
on<ChangeLanguage>((event, emit) {
emit(LocalizationState(event.locale));
});
}
}

View File

@@ -0,0 +1,18 @@
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
abstract class LocalizationEvent extends Equatable {
const LocalizationEvent();
@override
List<Object> get props => [];
}
class ChangeLanguage extends LocalizationEvent {
final Locale locale;
const ChangeLanguage(this.locale);
@override
List<Object> get props => [locale];
}

View File

@@ -0,0 +1,11 @@
import 'package:equatable/equatable.dart';
import 'package:flutter/material.dart';
class LocalizationState extends Equatable {
final Locale locale;
const LocalizationState(this.locale);
@override
List<Object> get props => [locale];
}

View File

@@ -6,10 +6,14 @@
#include "generated_plugin_registrant.h"
#include <flutter_localization/flutter_localization_plugin.h>
#include <flutter_secure_storage_linux/flutter_secure_storage_linux_plugin.h>
#include <url_launcher_linux/url_launcher_plugin.h>
void fl_register_plugins(FlPluginRegistry* registry) {
g_autoptr(FlPluginRegistrar) flutter_localization_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "FlutterLocalizationPlugin");
flutter_localization_plugin_register_with_registrar(flutter_localization_registrar);
g_autoptr(FlPluginRegistrar) flutter_secure_storage_linux_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "FlutterSecureStorageLinuxPlugin");
flutter_secure_storage_linux_plugin_register_with_registrar(flutter_secure_storage_linux_registrar);

View File

@@ -3,6 +3,7 @@
#
list(APPEND FLUTTER_PLUGIN_LIST
flutter_localization
flutter_secure_storage_linux
url_launcher_linux
)

View File

@@ -8,6 +8,7 @@ import Foundation
import connectivity_plus
import device_info_plus
import firebase_core
import flutter_localization
import flutter_secure_storage_macos
import package_info_plus
import path_provider_foundation
@@ -19,6 +20,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin"))
DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin"))
FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin"))
FlutterLocalizationPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalizationPlugin"))
FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin"))
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))

View File

@@ -406,6 +406,19 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.0.2"
flutter_localization:
dependency: "direct main"
description:
name: flutter_localization
sha256: faaeb1eba307473032e2c2af737f36ced61fc98735608410d0a6d9c231b50912
url: "https://pub.dev"
source: hosted
version: "0.2.0"
flutter_localizations:
dependency: transitive
description: flutter
source: sdk
version: "0.0.0"
flutter_plugin_android_lifecycle:
dependency: transitive
description:

View File

@@ -93,6 +93,9 @@ dependencies:
#Performance
statsfl: ^2.3.0
#Localization
flutter_localization: ^0.2.0
dev_dependencies:
flutter_test:
sdk: flutter
@@ -134,3 +137,5 @@ flutter:
- assets/images/invest_screen/svg/
- assets/images/no_internet/
- assets/images/no_internet/png/
- assets/language/en.json
- assets/language/ar.json

View File

@@ -8,6 +8,7 @@
#include <connectivity_plus/connectivity_plus_windows_plugin.h>
#include <firebase_core/firebase_core_plugin_c_api.h>
#include <flutter_localization/flutter_localization_plugin_c_api.h>
#include <flutter_secure_storage_windows/flutter_secure_storage_windows_plugin.h>
#include <local_auth_windows/local_auth_plugin.h>
#include <permission_handler_windows/permission_handler_windows_plugin.h>
@@ -19,6 +20,8 @@ void RegisterPlugins(flutter::PluginRegistry* registry) {
registry->GetRegistrarForPlugin("ConnectivityPlusWindowsPlugin"));
FirebaseCorePluginCApiRegisterWithRegistrar(
registry->GetRegistrarForPlugin("FirebaseCorePluginCApi"));
FlutterLocalizationPluginCApiRegisterWithRegistrar(
registry->GetRegistrarForPlugin("FlutterLocalizationPluginCApi"));
FlutterSecureStorageWindowsPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("FlutterSecureStorageWindowsPlugin"));
LocalAuthPluginRegisterWithRegistrar(

View File

@@ -5,6 +5,7 @@
list(APPEND FLUTTER_PLUGIN_LIST
connectivity_plus
firebase_core
flutter_localization
flutter_secure_storage_windows
local_auth_windows
permission_handler_windows