react-native-moyasar-sdk
Version:
Official React Native Moyasar SDK - Integrate Credit Cards, Apple Pay, Samsung Pay, and STC Pay with simple interfaces for a seamless payment experience in your React Native app
134 lines (128 loc) • 5.93 kB
JavaScript
;
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import { I18nManager, NativeModules, Platform, Settings } from 'react-native';
import RTNDeviceLanguage from "../specs/NativeRTNDeviceLanguage.js";
import { errorLog } from "../helpers/debug_log.js";
const resources = {
en: {
moyasarTranslation: {
// Credit Card
nameOnCard: 'Name on Card',
cardNumber: 'Card Number',
expiry: 'Expiry (MM/YY)',
cvc: 'CVC',
cardNumberRequired: 'Card number is required',
invalidCardNumber: 'Invalid card number',
unsupportedCreditCardNetwork: 'Unsupported card type',
expiryRequired: 'Expiry date is required',
invalidExpiry: 'Invalid expiry date',
expiredCard: 'Expired card',
nameRequired: 'Name is required',
bothNamesRequired: 'Both first and last names are required',
onlyEnglishAlphabets: 'Name must only contain english alphabets',
cvcRequired: 'Security code is required',
onlyDigits: 'Security code must only contain numbers',
invalidCvc: 'Invalid security code',
pay: 'Pay',
// STC Pay
phoneNumberTitle: 'Mobile Number',
phoneNumberRequired: 'Phone number is required',
phoneNumberInvalid: 'Phone number should begin with 05',
phoneNumberInvalidCount: 'Phone number should be 10 digits',
phoneNumberOnlyDigits: 'Phone number must only contain numbers',
phoneNumberNotRegisteredTitle: 'Mobile Number Not Registered',
phoneNumberNotRegisteredBody: 'The mobile number entered is not registered to use stc pay',
otpTitle: 'One-time Password',
otpRequired: 'One-time password is required',
otpOnlyDigits: 'One-time password must only contain numbers',
otpInvalidCount: 'One-time password should be 4-10 digits',
otpConfirm: 'Confirm'
}
},
ar: {
moyasarTranslation: {
// Credit Card
nameOnCard: 'الاسم على البطاقة',
cardNumber: 'رقم البطاقة',
expiry: 'تاريخ الانتهاء (شهر/سنة)',
cvc: 'رمز الأمان',
cardNumberRequired: 'رقم البطاقة مطلوب',
invalidCardNumber: 'رقم البطاقة غير صحيح',
unsupportedCreditCardNetwork: 'نوع البطاقة الإئتمانية غير مدعوم',
expiryRequired: 'تاريخ الإنتهاء مطلوب',
invalidExpiry: 'تاريخ الإنتهاء غير صحيح',
expiredCard: 'البطاقة منتهية',
nameRequired: 'الاسم مطلوب',
bothNamesRequired: 'الاسم الأول والأخير مطلوبان',
onlyEnglishAlphabets: 'يجب أن يحتوي الاسم على حروف إنجليزية فقط',
cvcRequired: 'رمز الأمان مطلوب',
onlyDigits: 'رمز الأمان يجب أن يحتوي على أرقام فقط',
invalidCvc: 'رمز الأمان غير صحيح',
pay: 'ادفع',
// STC Pay
phoneNumberTitle: 'رقم الجوال',
phoneNumberRequired: 'رقم الجوال مطلوب',
phoneNumberInvalid: 'رقم الجوال يجب أن يبدأ بـ 05',
phoneNumberInvalidCount: 'يجب أن يحتوي رقم الجوال على 10 أرقام فقط',
phoneNumberOnlyDigits: 'يجب أن يحتوي رقم الجوال على أرقام فقط',
phoneNumberNotRegisteredTitle: 'رقم الجوال غير مسجل',
phoneNumberNotRegisteredBody: 'رقم الجوال المدخل غير مسجل لإستخدام stc pay',
otpTitle: 'رمز التحقق المؤقت',
otpRequired: 'رمز التحقق المؤقت مطلوب',
otpOnlyDigits: 'رمز التحقق المؤقت يجب أن يحتوي على أرقام فقط',
otpInvalidCount: 'رمز التحقق المؤقت يجب أن يكون بين 4-10 أرقام فقط',
otpConfirm: 'تأكيد'
}
}
};
// App language is currently supported for new arch only, system language for the old arch
// TODO: Check 'https://www.npmjs.com/package/i18next-browser-languagedetector' when supporting web
export function getCurrentLang() {
let lang;
// iOS old arch
if (Platform.OS === 'ios' && NativeModules && NativeModules.SettingsManager && NativeModules.SettingsManager.settings) {
lang = NativeModules.SettingsManager.settings.AppleLocale || NativeModules.SettingsManager.settings.AppleLanguages[0]; // iOS 13
// Android old arch
} else if (NativeModules && NativeModules.I18nManager) {
lang = NativeModules.I18nManager.localeIdentifier;
}
// New arch
if (RTNDeviceLanguage && !lang) {
lang = RTNDeviceLanguage.getPreferredLanguage();
}
// Fallback, should not be reached
if (Platform.OS === 'ios' && !lang) {
lang = Settings.get('AppleLocale') || Settings.get('AppleLanguages')[0];
} else if (!lang) {
lang = I18nManager.getConstants()?.localeIdentifier;
}
if (!lang) {
errorLog('Could not get current language');
}
return lang?.substring(0, 2) || 'en';
}
// TODO: Optimize and find a better way to handle localizations in an SDK + Make sure that localizations are ready before showing any view
export function getConfiguredLocalizations() {
if (i18n.isInitialized) {
if (!i18n.hasResourceBundle('en', 'moyasarTranslation')) {
i18n.addResourceBundle('en', 'moyasarTranslation', resources.en.moyasarTranslation);
}
if (!i18n.hasResourceBundle('ar', 'moyasarTranslation')) {
i18n.addResourceBundle('ar', 'moyasarTranslation', resources.ar.moyasarTranslation);
}
} else {
i18n.use(initReactI18next).init({
resources: resources,
compatibilityJSON: 'v3',
lng: getCurrentLang(),
ns: 'moyasarTranslation',
fallbackLng: ['en', 'ar']
});
}
return i18n;
}
export function isArabicLang() {
return getCurrentLang() === 'ar';
}
//# sourceMappingURL=i18n.js.map