From db64b1c8636075ba7d87f52897b23feff27275cd Mon Sep 17 00:00:00 2001 From: Azis R Date: Sun, 22 Dec 2024 03:50:37 +0700 Subject: [PATCH] Add Arabic localization --- TodayExtension/ar.lproj/MainInterface.strings | 14 + litewallet.xcodeproj/project.pbxproj | 13 + litewallet/BartyCrouch.swift | 1 + litewallet/Environment.swift | 4 + litewallet/Sounds/Ar.mp3 | Bin 0 -> 5184 bytes litewallet/StartViewModel.swift | 4 + .../Strings/ar.lproj/Localizable.strings | 1469 ++++++++++++ litewallet/ar.lproj/BIP39Words.plist | 2054 +++++++++++++++++ litewallet/ar.lproj/LaunchScreen.strings | 1 + .../LanguageSelectionTests.swift | 15 + 10 files changed, 3575 insertions(+) create mode 100644 TodayExtension/ar.lproj/MainInterface.strings create mode 100644 litewallet/Sounds/Ar.mp3 create mode 100644 litewallet/Strings/ar.lproj/Localizable.strings create mode 100644 litewallet/ar.lproj/BIP39Words.plist create mode 100644 litewallet/ar.lproj/LaunchScreen.strings diff --git a/TodayExtension/ar.lproj/MainInterface.strings b/TodayExtension/ar.lproj/MainInterface.strings new file mode 100644 index 000000000..dfe304cf9 --- /dev/null +++ b/TodayExtension/ar.lproj/MainInterface.strings @@ -0,0 +1,14 @@ +/* Class = "UILabel"; text = "scan QR code"; ObjectID = "JgG-Ah-UZk"; */ +"JgG-Ah-UZk.text" = "مسح رمز الاستجابة السريعة"; + +/* Class = "UILabel"; text = "receive"; ObjectID = "KJN-zr-IQB"; */ +"KJN-zr-IQB.text" = "استلام"; + +/* Class = "UILabel"; text = "send"; ObjectID = "QMM-JV-cTG"; */ +"QMM-JV-cTG.text" = "إرسال"; + +/* Class = "UIButton"; normalTitle = "setup wallet"; ObjectID = "fgE-Q8-uG8"; */ +"fgE-Q8-uG8.normalTitle" = "إعداد المحفظة"; + +/* Class = "UILabel"; text = "Label"; ObjectID = "gQm-B2-ZXE"; */ +"gQm-B2-ZXE.text" = "التسمية"; diff --git a/litewallet.xcodeproj/project.pbxproj b/litewallet.xcodeproj/project.pbxproj index 4198fee9f..1dd5c1313 100644 --- a/litewallet.xcodeproj/project.pbxproj +++ b/litewallet.xcodeproj/project.pbxproj @@ -235,6 +235,7 @@ 75A2A8101DA5936F00A983D8 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 75A2A80E1DA5936F00A983D8 /* MainInterface.storyboard */; }; 75A2A8141DA5936F00A983D8 /* TodayExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 75A2A8081DA5936F00A983D8 /* TodayExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 75C735AA1DAA1B9C00251ECF /* libunbound.c in Sources */ = {isa = PBXBuildFile; fileRef = 755CD4121DAA0E3E0075898E /* libunbound.c */; }; + 93D84BDC2D162AE700A74931 /* Ar.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 93D84BDB2D162AE700A74931 /* Ar.mp3 */; }; C30029E225D0185500F08C2B /* StandardDividerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C30029E125D0185500F08C2B /* StandardDividerView.swift */; }; C30029EB25D019BC00F08C2B /* CopyButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C30029EA25D019BC00F08C2B /* CopyButtonView.swift */; }; C3019EE32B8FEFED00FAF648 /* AssociatedObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3019EE22B8FEFED00FAF648 /* AssociatedObject.swift */; }; @@ -1389,6 +1390,11 @@ 75A2A87C1DA59E4E00A983D8 /* litewallet.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = litewallet.entitlements; sourceTree = ""; }; 75C735AF1DAA1C9F00251ECF /* libnettle.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libnettle.a; sourceTree = BUILT_PRODUCTS_DIR; }; 75FEFD1B1DAED56E00203D3A /* libsqlite3.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.tbd; path = usr/lib/libsqlite3.tbd; sourceTree = SDKROOT; }; + 93D84BDB2D162AE700A74931 /* Ar.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = Ar.mp3; sourceTree = ""; }; + 93D84BDD2D16B20400A74931 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/LaunchScreen.strings; sourceTree = ""; }; + 93D84BDE2D16B20400A74931 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/MainInterface.strings; sourceTree = ""; }; + 93D84BDF2D16B20400A74931 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = ""; }; + 93D84BE02D16B20400A74931 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = ar; path = ar.lproj/BIP39Words.plist; sourceTree = ""; }; C30029E125D0185500F08C2B /* StandardDividerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StandardDividerView.swift; sourceTree = ""; }; C30029EA25D019BC00F08C2B /* CopyButtonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CopyButtonView.swift; sourceTree = ""; }; C3019EE22B8FEFED00FAF648 /* AssociatedObject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AssociatedObject.swift; sourceTree = ""; }; @@ -3027,6 +3033,7 @@ C3423C3B2B796D820051BD6D /* Ko.mp3 */, C3423C3C2B796D820051BD6D /* It.mp3 */, C3423C3D2B796D820051BD6D /* Ru.mp3 */, + 93D84BDB2D162AE700A74931 /* Ar.mp3 */, ); path = Sounds; sourceTree = ""; @@ -3724,6 +3731,7 @@ Base, tr, uk, + ar, ); mainGroup = 75A2A7871DA5934300A983D8; packageReferences = ( @@ -3790,6 +3798,7 @@ CE29901A1EFD6DE50093A0F2 /* Localizable.strings in Resources */, C3423C3E2B796D820051BD6D /* 日本語.mp3 in Resources */, 24313C9F23824F5800A83F69 /* Animate.storyboard in Resources */, + 93D84BDC2D162AE700A74931 /* Ar.mp3 in Resources */, C3423C442B796D820051BD6D /* Fr.mp3 in Resources */, C3423C462B796D820051BD6D /* Id.mp3 in Resources */, 24313CA323824F5800A83F69 /* Send.storyboard in Resources */, @@ -4400,6 +4409,7 @@ 24375315238AE09900E1B2AE /* ru */, C3BDB42626CC028F004DAE77 /* tr */, C350788A27DCAAA100A50819 /* uk */, + 93D84BE02D16B20400A74931 /* ar */, ); name = BIP39Words.plist; sourceTree = ""; @@ -4409,6 +4419,7 @@ children = ( 75A2A79D1DA5934300A983D8 /* Base */, C350788727DCAAA000A50819 /* uk */, + 93D84BDD2D16B20400A74931 /* ar */, ); name = LaunchScreen.storyboard; sourceTree = ""; @@ -4430,6 +4441,7 @@ 24B9621B23BA66CF00ECD938 /* en */, C3BDB42726CC028F004DAE77 /* tr */, C350788827DCAAA000A50819 /* uk */, + 93D84BDE2D16B20400A74931 /* ar */, ); name = MainInterface.storyboard; sourceTree = ""; @@ -4451,6 +4463,7 @@ 2430679B238F5A2900EBEA99 /* en */, C3BDB42826CC0338004DAE77 /* tr */, C350788927DCAAA000A50819 /* uk */, + 93D84BDF2D16B20400A74931 /* ar */, ); name = Localizable.strings; path = Strings; diff --git a/litewallet/BartyCrouch.swift b/litewallet/BartyCrouch.swift index 2adbfb83d..4e8327fac 100644 --- a/litewallet/BartyCrouch.swift +++ b/litewallet/BartyCrouch.swift @@ -23,6 +23,7 @@ enum BartyCrouch { case spanish = "es" case turkey = "tr" case ukrainian = "uk" + case arabic = "ar" } static func translate(key: String, translations: [SupportedLanguage: String], comment _: String? = nil) -> String { diff --git a/litewallet/Environment.swift b/litewallet/Environment.swift index 159911f9b..473ad10f7 100644 --- a/litewallet/Environment.swift +++ b/litewallet/Environment.swift @@ -17,6 +17,7 @@ enum LanguageSelection: Int, CaseIterable, Equatable, Identifiable { case Spanish case Turkish case Ukrainian + case Arabic var id: LanguageSelection { self } var code: String { @@ -35,6 +36,7 @@ enum LanguageSelection: Int, CaseIterable, Equatable, Identifiable { case .Spanish: return "es" case .Turkish: return "tr" case .Ukrainian: return "uk" + case .Arabic: return "ar" } } @@ -54,6 +56,7 @@ enum LanguageSelection: Int, CaseIterable, Equatable, Identifiable { case .Spanish: return "Español" case .Turkish: return "Türkçe" case .Ukrainian: return "українська" + case .Arabic: return "العربية" } } @@ -73,6 +76,7 @@ enum LanguageSelection: Int, CaseIterable, Equatable, Identifiable { case .Spanish: return "Es" case .Turkish: return "Tr" case .Ukrainian: return "Uk" + case .Arabic: return "Ar" } } } diff --git a/litewallet/Sounds/Ar.mp3 b/litewallet/Sounds/Ar.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..65e0112eb5652104577cf2ef357343de135eaf24 GIT binary patch literal 5184 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 (received title 2/2) */ +"TransactionDetails.from" = "في %1$@"; + +/* Moved $5.00 */ +"TransactionDetails.moved" = "تم نقل %1$@"; + +/* Moved $5.00 */ +"TransactionDetails.movedAmountDescription" = "تم نقل %1@"; + +/* eg. Confirmed in Block: Not Confirmed */ +"TransactionDetails.notConfirmedBlockHeightLabel" = "لم يتم التأكيد"; + +/* Received $5.00 (received title 1/2) */ +"TransactionDetails.received" = "تم استلام %1$@"; + +/* Received $5.00 */ +"TransactionDetails.receivedAmountDescription" = "تم استلام %1@"; + +/* Sent $5.00 (sent title 1/2) */ +"TransactionDetails.sent" = "تم إرسال %1$@"; + +/* Sent $5.00 */ +"TransactionDetails.sentAmountDescription" = "تم إرسال %1@"; + +/* Status section header */ +"TransactionDetails.statusHeader" = "الحالة"; + +/* Transaction Details Title */ +"TransactionDetails.title" = "تفاصيل المعاملة"; + +/* [sent] to
(sent title 2/2) */ +"TransactionDetails.to" = "إلى %1$@"; + +/* Transaction ID header */ +"TransactionDetails.txHashHeader" = "معرف معاملة Litecoin"; + +/* (this transaction was) Received at this address: */ +"TransactionDirection.address" = "تم استلامه في هذا العنوان"; + +/* (this transaction was) Sent to this address: */ +"TransactionDirection.to" = "تم إرساله إلى هذا العنوان"; + +/* Disabled until date */ +"UnlockScreen.disabled" = "مغلق حتى: %1$@"; + +/* Unlock with FaceID accessibility label */ +"UnlockScreen.faceIdText" = "افتح باستخدام FaceID"; + +/* My Address button title */ +"UnlockScreen.myAddress" = "عنواني"; + +/* Reset PIN with Paper Key button label. */ +"UnlockScreen.resetPin" = "إعادة تعيين الرقم السري"; + +/* Scan button title */ +"UnlockScreen.scan" = "مسح"; + +/* TouchID/FaceID prompt text */ +"UnlockScreen.touchIdPrompt" = "افتح Litewallet الخاص بك."; + +/* Unlock with TouchID accessibility label */ +"UnlockScreen.touchIdText" = "افتح باستخدام TouchID"; + +/* Wallet unlocked message */ +"UnlockScreen.unlocked" = "تم فتح المحفظة"; + +/* Update PIN caption text */ +"UpdatePin.caption" = "تذكر هذا الرقم السري. إذا نسيته، لن تتمكن من الوصول إلى Litecoin الخاص بك."; + +/* PIN creation info. */ +"UpdatePin.createInstruction" = "سيُستخدم الرقم السري لفتح Litewallet الخاص بك وإرسال الأموال."; + +/* Update PIN title */ +"UpdatePin.createTitle" = "تعيين الرقم السري"; + +/* Update PIN title */ +"UpdatePin.createTitleConfirm" = "أعد إدخال الرقم السري"; + +/* Enter current PIN instruction */ +"UpdatePin.enterCurrent" = "أدخل الرقم السري الحالي."; + +/* Enter new PIN instruction */ +"UpdatePin.enterNew" = "أدخل الرقم السري الجديد."; + +/* Re-Enter new PIN instruction */ +"UpdatePin.reEnterNew" = "أعد إدخال الرقم السري الجديد."; + +/* Update PIN failure error message. */ +"UpdatePin.setPinError" = "عذرًا، لم نتمكن من تحديث الرقم السري."; + +/* Update PIN failure alert view title */ +"UpdatePin.setPinErrorTitle" = "خطأ في تحديث الرقم السري"; + +/* Update PIN title */ +"UpdatePin.updateTitle" = "تحديث الرقم السري"; + +/* Authorize to copy wallet addresses alert message */ +"URLHandling.addressaddressListAlertMessage" = "هل تريد نسخ عناوين المحفظة إلى الحافظة؟"; + +/* Authorize to copy wallet address PIN view prompt. */ +"URLHandling.addressList" = "إذن لنسخ عنوان المحفظة إلى الحافظة"; + +/* Authorize to copy wallet address alert title */ +"URLHandling.addressListAlertTitle" = "نسخ عناوين المحفظة"; + +/* Copy wallet addresses alert button label */ +"URLHandling.copy" = "نسخ"; + +/* Verify PIN for transaction view body */ +"VerifyPin.authorize" = "يرجى إدخال الرقم السري الخاص بك لتفويض هذه المعاملة."; + +/* Verify PIN view body */ +"VerifyPin.continueBody" = "يرجى إدخال الرقم السري الخاص بك للمتابعة."; + +/* Verify PIN view title */ +"VerifyPin.title" = "الرقم السري مطلوب"; + +/* Authorize transaction with touch id message */ +"VerifyPin.touchIdMessage" = "تفويض هذه المعاملة"; + +/* 'No wallet' warning for watch app */ +"Watch.noWalletWarning" = "افتح تطبيق Litewallet على iPhone لإعداد المحفظة."; + +/* Dismiss button label */ +"Webview.dismiss" = "إغلاق"; + +/* Webview loading error message */ +"Webview.errorMessage" = "حدث خطأ أثناء تحميل المحتوى. يرجى المحاولة مرة أخرى."; + +/* Updating webview message */ +"Webview.updating" = "جارٍ التحديث..."; + +/* Welcome view body text */ +"Welcome.body" = "لقد حصل Litewallet على مظهر جديد وبعض الميزات الجديدة.\n\nجميع العملات تعرض باللايتس (ł). 1 لايتكوين (Ł) = 1000 لايتس (ł)."; + +/* Welcome view title */ +"Welcome.title" = "مرحبًا بك في Litewallet!"; + +/* Wipe wallet alert message */ +"WipeWallet.alertMessage" = "هل أنت متأكد أنك تريد حذف هذه المحفظة؟"; + +/* Wipe wallet alert title */ +"WipeWallet.alertTitle" = "حذف المحفظة؟"; + +/* Warning if user lost phrase */ +"WipeWallet.emptyWallet" = "هل نسيت عبارة الاسترداد أو الرقم السري؟"; + +/* Failed wipe wallet alert message */ +"WipeWallet.failedMessage" = "فشل في حذف المحفظة."; + +/* Failed wipe wallet alert title */ +"WipeWallet.failedTitle" = "فشل"; + +/* Enter key to wipe wallet instruction. */ +"WipeWallet.instruction" = "للبدء بمحفظة جديدة أو استعادة محفظة موجودة، يجب عليك أولاً مسح المحفظة الحالية. للمتابعة، أدخل مفتاح الورقة الخاص بالمحفظة الحالية."; + +/* Start wipe wallet view message */ +"WipeWallet.startMessage" = "بدء أو استعادة محفظة أخرى يتيح لك الوصول إلى وإدارة محفظة Litewallet مختلفة على هذا الجهاز."; + +/* Start wipe wallet view warning */ +"WipeWallet.startWarning" = "سيتم إزالة محفظتك الحالية من هذا الجهاز. إذا كنت ترغب في استعادتها في المستقبل، يجب عليك إدخال مفتاح الورقة."; + +/* Wipe wallet navigation item title. */ +"WipeWallet.title" = "ابدأ أو استرجع محفظة أخرى"; + +/* Warning Alert */ +"WipeWallet.warningAlert" = "سيؤدي هذا الإجراء إلى مسح Litewallet الخاص بك!"; + +/* Warning description */ +"WipeWallet.warningDescription" = "حذف محفظتك يعني أن المفتاح الخاص وبيانات التطبيق ستختفي. قد تفقد لايتكوين الخاص بك إلى الأبد!\n\n\nلا يمكن لأي شخص في فريق Litewallet استرجاع هذه العبارة لك. نحن غير مسؤولين إذا فشلت في قراءة هذا التحذير."; + +/* Warning title */ +"WipeWallet.warningTitle" = "يرجى القراءة!"; + +/* Wipe wallet button title */ +"WipeWallet.wipe" = "مسح"; + +/* Wiping activity message */ +"WipeWallet.wiping" = "يتم المسح..."; + +/* Paper key instructions. */ +"WritePaperPhrase.instruction" = "اكتب كل كلمة بالترتيب واحتفظ بها في مكان آمن."; + +/* button label */ +"WritePaperPhrase.next" = "التالي"; + +/* button label */ +"WritePaperPhrase.previous" = "السابق"; + +/* 1 of 3 */ +"WritePaperPhrase.step" = "%1$d من %2$d"; + +/* No comment provided by engineer. */ +"Copy" = "نسخ"; + +/* Buy Bar Item Title */ +"BuyCenter.barItemTitle" = "شراء"; + +/* $53.09/L + 1.07% */ +"Confirmation.amountDetailLabel" = "تفاصيل الصرف:"; + +/* Address label */ +"Confirmation.staticAddressLabel" = "العنوان:"; + +/* History Bar Item Title */ +"History.barItemTitle" = "التاريخ"; + +/* Receive Bar Item Title */ +"Receive.barItemTitle" = "استلام"; + +/* Send Bar Item Title */ +"Send.barItemTitle" = "إرسال"; + +/* Less button title */ +"TransactionDetails.less" = "أقل..."; + +/* Prefix for price */ +"TransactionDetails.priceTimeStampPrefix" = "كما في"; + +/* RECEIVE LTCTitle */ +"TransactionDetails.receivedModalTitle" = "عنوان الاستلام"; + +/* Label for TXID */ +"TransactionDetails.staticTXLabel" = "TXID:"; + +/* Unlock Screen sub-header */ +"UnlockScreen.enterPin" = "أدخل الرقم السري"; + +/* Static amount Label */ +"Transaction.amountDetailLabel" = "تفاصيل المبلغ:"; + +/* Static blockHeight Label */ +"Transaction.blockHeightLabel" = "الكتلة:"; + +/* Static comment Label */ +"Transaction.commentLabel" = "مذكرة:"; + +/* Static TX iD Label */ +"Transaction.txIDLabel" = "معرف المعاملة:"; + +/* Static end amount Label */ +"Transaction.endAmountDetailLabel" = "تفاصيل المبلغ النهائي للمعاملة"; + +/* Static starting amount Label */ +"Transaction.startingAmountDetailLabel" = "تفاصيل المبلغ الأولي للمعاملة"; + +/* Syncing view connection state header text */ +"SyncingHeader.connecting" = "جاري الاتصال..."; + +/* Syncing header success state header text */ +"SyncingHeader.success" = "نجاح!"; + +/* Syncing view syncing state header text */ +"SyncingHeader.syncing" = "جاري المزامنة..."; + +/* Rescanning header success state header text */ +"SyncingHeader.rescan" = "جاري إعادة المسح..."; + +/* Affirm button title. */ +"Prompts.PaperKey.affirm" = "متابعة"; + +/* Cancel button. */ +"Prompts.PaperKey.cancel" = "إلغاء"; + +/* Enable button. */ +"Prompts.PaperKey.enable" = "تفعيل"; + +/* Dismiss button. */ +"Prompts.dismiss" = "إغلاق"; + +/* Languages label */ +"Settings.languages" = "اللغات"; + +/* Label to pick fiat */ +"DefaultCurrency.chooseFiatLabel" = "اختر:"; + +/* Litewallet environment */ +"Settings.litewallet.environment" = "البيئة:"; + +/* Litewallet version */ +"Settings.litewallet.version" = "إصدار Litewallet:"; + +/* Litewallet Social links */ +"Settings.socialLinks" = "الروابط الاجتماعية"; + +/* Delete db */ +"WipeWallet.deleteDatabase" = "حذف قاعدة البيانات"; + +/* Delete database title */ +"WipeWallet.alertDeleteTitle" = "حذف قاعدة البيانات"; + +/* Delete database message */ +"WipeWallet.deleteMessageTitle" = "سيتم حذف قاعدة البيانات ولكن ستظل العبارة والرقم السري محفوظة. قم بتأكيد الرقم السري الحالي وانتظر حتى تكتمل المزامنة مع قاعدة البيانات الجديدة"; + +/* Delete and sync */ +"WipeWallet.deleteSync" = "حذف & مزامنة"; + +/* Corruption Error alert title */ +"Alert.corruptionError" = "خطأ في فساد البيانات المحلية"; + +/* Corruption Error alert title */ +"Alert.corruptionMessage" = "قاعدة البيانات المحلية تالفة. اذهب إلى الإعدادات > Blockchain: الإعدادات > حذف قاعدة البيانات للتحديث"; + +/* Donate articles to the */ +"Donate.toThe" = "تبرع لـ"; + +/* Donate */ +"Donate.word" = "تبرع"; + +/* Luxury fee */ +"FeeSelector.luxury" = "فاخر"; + +/* Fee Selector economy fee description */ +"FeeSelector.luxuryLabel" = "الوقت المتوقع للتسليم: 2.5 - 5+ دقائق"; + +/* Message for luxury fee */ +"FeeSelector.luxuryMessage" = "تضمن هذه الخيار قبول معاملتك تقريبًا على الرغم من أنك تدفع مبلغًا إضافيًا."; + +/* Support the Litecoin Foundation */ +"SupportTheFoundation.title" = "دعم مؤسسة لايتكوين"; + +/* Menu button title */ +"MenuButton.customer.support" = "دعم العملاء"; + +/* Enter to match domain name to LTC Address */ +"Send.UnstoppableDomains.placeholder" = "أدخل اسم مجال .crypto، .wallet، .zil، .nft، .blockchain،\n.bitcoin، .coin، .888، .dao، أو .x."; + +/* Or */ +"Fragment.or" = "أو"; + +/* Enter LTC Address */ +"Send.enterLTCAddress" = "أدخل عنوان لايتكوين"; + +/* Litewallet Partners */ +"Settings.litewallet.partners" = "شركاء Litewallet"; + +/* Card Bar Item Title */ +"LitecoinCard.barItemTitle" = "بطاقة"; + +/* Lookup */ +"Send.UnstoppableDomains.lookup" = "بحث"; + +/* Forgot password? */ +"LitecoinCard.forgotPassword" = "نسيت كلمة المرور؟"; + +/* Login */ +"LitecoinCard.login" = "تسجيل الدخول"; + +/* Register */ +"LitecoinCard.registerCard" = "تسجيل"; + +/* Litecoin card */ +"LitecoinCard.registerCardPhrase" = "تسجيل بطاقة لايتكوين"; + +/* Reset Litecoin card password */ +"LitecoinCard.resetPassword" = "إعادة تعيين كلمة المرور"; + +/* Litecoin card visit */ +"LitecoinCard.visit.toReset" = "قم بزيارة https://litecoin.dashboard.getblockcard.com/password/forgot\nلإعادة تعيين كلمة المرور."; + +/* address */ +"LitecoinCard.Registration.address" = "العنوان"; + +/* city */ +"LitecoinCard.Registration.city" = "المدينة"; + +/* confirm password */ +"LitecoinCard.Registration.confirmPassword" = "تأكيد كلمة المرور"; + +/* country */ +"LitecoinCard.Registration.country" = "الدولة"; + +/* First name */ +"LitecoinCard.Registration.firstName" = "الاسم الأول"; + +/* kycIDNumber */ +"LitecoinCard.Registration.kycIDNumber" = "رقم الهوية"; + +/* SSN */ +"LitecoinCard.Registration.kycSSN" = "الرقم التأميني الاجتماعي"; + +/* Last name */ +"LitecoinCard.Registration.lastName" = "الاسم الأخير"; + +/* mobile number */ +"LitecoinCard.Registration.mobileNumber" = "رقم الهاتف المحمول"; + +/* password */ +"LitecoinCard.Registration.password" = "كلمة المرور"; + +/* state province */ +"LitecoinCard.Registration.stateProvince" = "الولاية / المقاطعة"; + +/* registration username / email */ +"LitecoinCard.Registration.usernameEmail" = "البريد الإلكتروني (اسم المستخدم)"; + +/* zip post code */ +"LitecoinCard.Registration.zipPostCode" = "الرمز البريدي"; + +/* identification */ +"LitecoinCard.Registration.identification" = "الهوية"; + +/* Register for Litecoin Card */ +"LitecoinCard.registerCard.phrase" = "تسجيل بطاقة لايتكوين"; + +/* kycIDType */ +"LitecoinCard.Registration.kycIDType" = "نوع الهوية"; + +/* resetFields */ +"Button.resetFields" = "إعادة تعيين الحقول"; + +/* Registering user... */ +"LitecoinCard.registering.user" = "جارٍ تسجيل المستخدم ..."; + +/* Card balance */ +"LitecoinCard.cardBalance" = "رصيد البطاقة"; + +/* Logout */ +"LitecoinCard.logout" = "تسجيل الخروج"; + +/* Registration failure */ +"LitecoinCard.registrationFailure" = "كانت هناك مشكلة في تسجيلك. \nيرجى التحقق من بياناتك والمحاولة مرة أخرى."; + +/* Registration success */ +"LitecoinCard.registrationSuccess" = "لقد قمت بالتسجيل!\nيرجى التحقق من بريدك الإلكتروني وتأكيده. ثم عد لتسجيل الدخول."; + +/* Resolved Success */ +"Alerts.resolvedSuccess" = "تم حل النطاق"; + +/* No comment provided by engineer. */ +"Alerts.resolvedSuccessSubheader" = "تم حل العنوان!"; + +/* must not be empty */ +"LitecoinCard.Registration.ValidationError.empty" = "يجب ألا يكون فارغًا"; + +/* Invalid email address */ +"LitecoinCard.Registration.ValidationError.invalidEmail" = "عنوان البريد الإلكتروني غير صالح"; + +/* Mobile number 10 digits required */ +"LitecoinCard.Registration.ValidationError.numberDigitsRequired" = "يجب أن يحتوي رقم الهاتف المحمول على 10 أرقام على الأقل"; + +/* Mobile number required */ +"LitecoinCard.Registration.ValidationError.numberRequired" = "رقم الهاتف المحمول مطلوب"; + +/* 6 Password characters required */ +"LitecoinCard.Registration.ValidationError.passwordCharacters" = "يجب أن تحتوي كلمة المرور على 6 أحرف على الأقل"; + +/* Captial and numeric password characters required */ +"LitecoinCard.Registration.ValidationError.passwordComposition" = "يجب أن تحتوي كلمة المرور على 6 أحرف على الأقل، مع حرف واحد ورقم واحد على الأقل"; + +/* Password required */ +"LitecoinCard.Registration.ValidationError.passwordRequired" = "كلمة المرور مطلوبة"; + +/* Required field */ +"LitecoinCard.Registration.ValidationError.requiredField" = "حقل مطلوب"; + +/* Failed Login */ +"LitecoinCard.failed.login" = "فشل تسجيل الدخول"; + +/* Copied */ +"TransactionDetails.copiedAll" = "تم النسخ"; + +/* Copy all details */ +"TransactionDetails.copyAllDetails" = "نسخ جميع التفاصيل"; + +/* Features and limitations */ +"LitecoinCard.Disclaimer.bullets" = "- التسجيل وتسجيل الدخول\n- رصيد البطاقة المتاح\n- إعادة تعيين كلمة المرور\n- لا يوجد تحويل إلى Litewallet\n- متاح في الولايات المتحدة فقط"; + +/* Description of the status */ +"LitecoinCard.Disclaimer.description" = "تتمتع بطاقة لايتكوين حاليًا بوظائف محدودة في Litewallet."; + +/* Referral to the website */ +"LitecoinCard.Disclaimer.referral" = "قم بزيارة litecoin.getblockcard.com للوصول الكامل"; + +/* Beta Testing Litecoin Card */ +"LitecoinCard.Disclaimer.title" = "اختبار بطاقة لايتكوين Beta"; + +/* lookupFailureHeader */ +"Send.UnstoppableDomains.lookupFailureHeader" = "فشل البحث"; + +/* LookupDomainError */ +"Send.UnstoppableDomains.lookupDomainError" = "عذرًا، لم يتم العثور على النطاق. [خطأ: %2$d]"; + +/* UDSystemError */ +"Send.UnstoppableDomains.udSystemError" = "مشكلة في النظام. [خطأ: %2$d]"; + +/* Balance */ +"ManageWallet.balance" = "الرصيد"; + +/* Moonpay buy financial details */ +"BuyCenter.moonpayFinancialDetails" = "• شراء LTC مع العديد من أزواج العملات\n• الدفع بطرق متعددة\n• مزود الدفع العالمي"; + +/* Moonpay Title */ +"BuyCenter.moonpayTitle" = "Moonpay"; + +/* Reset password detail */ +"LitecoinCard.resetPasswordDetail" = "أدخل عنوان البريد الإلكتروني المرتبط بحساب بطاقة لايتكوين الخاصة بك وابحث عن بريد إلكتروني يحتوي على تعليمات إعادة تعيين كلمة المرور."; + +/* Current Locale */ +"Settings.currentLocale" = "الإعدادات الحالية:"; + +/* History Current Litecoin Value */ +"History.currentLitecoinValue" = "القيمة الحالية لـ LTC في"; + +/* Confirm */ +"Fragment.confirm" = "تأكيد"; + +/* Enter code */ +"LitecoinCard.enterCode" = "أدخل الرمز"; + +/* Enter code details */ +"LitecoinCard.enterCode.detail" = "أدخل الرمز الذي تم إرساله مؤخرًا إلى بريدك الإلكتروني المرتبط بحساب بطاقة لايتكوين."; + +/* Message when 2FA is on */ +"LitecoinCard.twoFAOn" = "تم تفعيل 2FA"; + +/* Message when 2FA is off */ +"LitecoinCard.twoFAOff" = "لم يتم تفعيل 2FA"; + +/* Litewallet balance label */ +"LitecoinCard.Transfer.litewalletBalance" = "رصيد Litewallet"; + +/* Transfer title */ +"LitecoinCard.Transfer.title" = "التحويل"; + +/* Description of action */ +"LitecoinCard.Transfer.description" = "اختر محفظة التحويل:"; + +/* Start transfer label */ +"LitecoinCard.Transfer.startTransfer" = "ابدأ التحويل"; + +/* Transfer to card label */ +"LitecoinCard.Transfer.amountToCard" = "تحويل إلى البطاقة"; + +/* Transfer to Litewallet label */ +"LitecoinCard.Transfer.amountToLitewallet" = "التحويل إلى Litewallet"; + +/* Set transfer amount label */ +"LitecoinCard.Transfer.setAmount" = "اسحب لتحديد مبلغ التحويل"; + +/* Destination address label */ +"LitecoinCard.Transfer.destinationAddress" = "العنوان"; + +/* to */ +"Fragment.to" = "إلى"; + +/* Card Bar Item Title */ +"LitecoinCard.name" = "بطاقة Litecoin"; + +/* Litewallet name */ +"Litewallet.name" = "Litewallet"; + +/* Message when 2FA is off and user is viewing the Card Balance */ +"LitecoinCard.cardBalanceOnlyDescription" = "تسجيل الخروج وتفعيل 2FA للسماح بالتحويلات"; + +/* sorry */ +"Fragment.sorry" = "آسف"; + +/* Change language alert message */ +"Settings.ChangeLanguage.alertMessage" = "هل أنت متأكد أنك تريد تغيير اللغة إلى %l؟"; + +/* Fee: $0.01 */ +"Send.bareFee" = "الرسوم: %1$@"; + +/* Fees: $0.01 */ +"Send.fee" = "الرسوم: %1$@"; + +/* Fees Blank: */ +"Send.feeBlank" = "الرسوم:"; + +/* Network */ +"Send.networkFee" = "الرسوم الشبكية"; + +/* Service */ +"Send.serviceFee" = "رسوم الخدمة"; + +/* Signup cancel */ +"Notifications.signupCancel" = "لا، شكراً"; + +/* "Email title" */ +"Notifications.emailTitle" = "لا تفوت أي شيء!"; + +/* "Pitch to get user to sign up" */ +"Notifications.pitchMessage" = "اشترك لتسمع عن التحديثات والمسابقات."; + +/* "Email address label" */ +"Notifications.emailLabel" = "عنوان البريد الإلكتروني"; + +/* "Email address placeholder" */ +"Notifications.emailPlaceholder" = "أدخل هنا"; + +/* "Language preference label" */ +"Notifications.languagePreference" = "اللغة المفضلة:"; + +/* "ShowWords.titleWarning" */ +"ShowWords.titleWarning" = "هذه هي كلمات الاستعادة الخاصة بك. إذا عرضتها على أي شخص، يمكنه أخذ Litecoin الخاص بك"; + +/* "ShowWords.modalTitle" */ +"ShowWords.modalTitle" = "عرض عبارة الاستعادة"; diff --git a/litewallet/ar.lproj/BIP39Words.plist b/litewallet/ar.lproj/BIP39Words.plist new file mode 100644 index 000000000..01e69ff4c --- /dev/null +++ b/litewallet/ar.lproj/BIP39Words.plist @@ -0,0 +1,2054 @@ + + + + + abandon + ability + able + about + above + absent + absorb + abstract + absurd + abuse + access + accident + account + accuse + achieve + acid + acoustic + acquire + across + act + action + actor + actress + actual + adapt + add + addict + address + adjust + admit + adult + advance + advice + aerobic + affair + afford + afraid + again + age + agent + agree + ahead + aim + air + airport + aisle + alarm + album + alcohol + alert + alien + all + alley + allow + almost + alone + alpha + already + also + alter + always + amateur + amazing + among + amount + amused + analyst + anchor + ancient + anger + angle + angry + animal + ankle + announce + annual + another + answer + antenna + antique + anxiety + any + apart + apology + appear + apple + approve + april + arch + arctic + area + arena + argue + arm + armed + armor + army + around + arrange + arrest + arrive + arrow + art + artefact + artist + artwork + ask + aspect + assault + asset + assist + assume + asthma + athlete + atom + attack + attend + attitude + attract + auction + audit + august + aunt + author + auto + autumn + average + avocado + avoid + awake + aware + away + awesome + awful + awkward + axis + baby + bachelor + bacon + badge + bag + balance + balcony + ball + bamboo + banana + banner + bar + barely + bargain + barrel + base + basic + basket + battle + beach + bean + beauty + because + become + beef + before + begin + behave + behind + believe + below + belt + bench + benefit + best + betray + better + between + beyond + bicycle + bid + bike + bind + biology + bird + birth + bitter + black + blade + blame + blanket + blast + bleak + bless + blind + blood + blossom + blouse + blue + blur + blush + board + boat + body + boil + bomb + bone + bonus + book + boost + border + boring + borrow + boss + bottom + bounce + box + boy + bracket + brain + brand + brass + brave + bread + breeze + brick + bridge + brief + bright + bring + brisk + broccoli + broken + bronze + broom + brother + brown + brush + bubble + buddy + budget + buffalo + build + bulb + bulk + bullet + bundle + bunker + burden + burger + burst + bus + business + busy + butter + buyer + buzz + cabbage + cabin + cable + cactus + cage + cake + call + calm + camera + camp + can + canal + cancel + candy + cannon + canoe + canvas + canyon + capable + capital + captain + car + carbon + card + cargo + carpet + carry + cart + case + cash + casino + castle + casual + cat + catalog + catch + category + cattle + caught + cause + caution + cave + ceiling + celery + cement + census + century + cereal + certain + chair + chalk + champion + change + chaos + chapter + charge + chase + chat + cheap + check + cheese + chef + cherry + chest + chicken + chief + child + chimney + choice + choose + chronic + chuckle + chunk + churn + cigar + cinnamon + circle + citizen + city + civil + claim + clap + clarify + claw + clay + clean + clerk + clever + click + client + cliff + climb + clinic + clip + clock + clog + close + cloth + cloud + clown + club + clump + cluster + clutch + coach + coast + coconut + code + coffee + coil + coin + collect + color + column + combine + come + comfort + comic + common + company + concert + conduct + confirm + congress + connect + consider + control + convince + cook + cool + copper + copy + coral + core + corn + correct + cost + cotton + couch + country + couple + course + cousin + cover + coyote + crack + cradle + craft + cram + crane + crash + crater + crawl + crazy + cream + credit + creek + crew + cricket + crime + crisp + critic + crop + cross + crouch + crowd + crucial + cruel + cruise + crumble + crunch + crush + cry + crystal + cube + culture + cup + cupboard + curious + current + curtain + curve + cushion + custom + cute + cycle + dad + damage + damp + dance + danger + daring + dash + daughter + dawn + day + deal + debate + debris + decade + december + decide + decline + decorate + decrease + deer + defense + define + defy + degree + delay + deliver + demand + demise + denial + dentist + deny + depart + depend + deposit + depth + deputy + derive + describe + desert + design + desk + despair + destroy + detail + detect + develop + device + devote + diagram + dial + diamond + diary + dice + diesel + diet + differ + digital + dignity + dilemma + dinner + dinosaur + direct + dirt + disagree + discover + disease + dish + dismiss + disorder + display + distance + divert + divide + divorce + dizzy + doctor + document + dog + doll + dolphin + domain + donate + donkey + donor + door + dose + double + dove + draft + dragon + drama + drastic + draw + dream + dress + drift + drill + drink + drip + drive + drop + drum + dry + duck + dumb + dune + during + dust + dutch + duty + dwarf + dynamic + eager + eagle + early + earn + earth + easily + east + easy + echo + ecology + economy + edge + edit + educate + effort + egg + eight + either + elbow + elder + electric + elegant + element + elephant + elevator + elite + else + embark + embody + embrace + emerge + emotion + employ + empower + empty + enable + enact + end + endless + endorse + enemy + energy + enforce + engage + engine + enhance + enjoy + enlist + enough + enrich + enroll + ensure + enter + entire + entry + envelope + episode + equal + equip + era + erase + erode + erosion + error + erupt + escape + essay + essence + estate + eternal + ethics + evidence + evil + evoke + evolve + exact + example + excess + exchange + excite + exclude + excuse + execute + exercise + exhaust + exhibit + exile + exist + exit + exotic + expand + expect + expire + explain + expose + express + extend + extra + eye + eyebrow + fabric + face + faculty + fade + faint + faith + fall + false + fame + family + famous + fan + fancy + fantasy + farm + fashion + fat + fatal + father + fatigue + fault + favorite + feature + february + federal + fee + feed + feel + female + fence + festival + fetch + fever + few + fiber + fiction + field + figure + file + film + filter + final + find + fine + finger + finish + fire + firm + first + fiscal + fish + fit + fitness + fix + flag + flame + flash + flat + flavor + flee + flight + flip + float + flock + floor + flower + fluid + flush + fly + foam + focus + fog + foil + fold + follow + food + foot + force + forest + forget + fork + fortune + forum + forward + fossil + foster + found + fox + fragile + frame + frequent + fresh + friend + fringe + frog + front + frost + frown + frozen + fruit + fuel + fun + funny + furnace + fury + future + gadget + gain + galaxy + gallery + game + gap + garage + garbage + garden + garlic + garment + gas + gasp + gate + gather + gauge + gaze + general + genius + genre + gentle + genuine + gesture + ghost + giant + gift + giggle + ginger + giraffe + girl + give + glad + glance + glare + glass + glide + glimpse + globe + gloom + glory + glove + glow + glue + goat + goddess + gold + good + goose + gorilla + gospel + gossip + govern + gown + grab + grace + grain + grant + grape + grass + gravity + great + green + grid + grief + grit + grocery + group + grow + grunt + guard + guess + guide + guilt + guitar + gun + gym + habit + hair + half + hammer + hamster + hand + happy + harbor + hard + harsh + harvest + hat + have + hawk + hazard + head + health + heart + heavy + hedgehog + height + hello + helmet + help + hen + hero + hidden + high + hill + hint + hip + hire + history + hobby + hockey + hold + hole + holiday + hollow + home + honey + hood + hope + horn + horror + horse + hospital + host + hotel + hour + hover + hub + huge + human + humble + humor + hundred + hungry + hunt + hurdle + hurry + hurt + husband + hybrid + ice + icon + idea + identify + idle + ignore + ill + illegal + illness + image + imitate + immense + immune + impact + impose + improve + impulse + inch + include + income + increase + index + indicate + indoor + industry + infant + inflict + inform + inhale + inherit + initial + inject + injury + inmate + inner + innocent + input + inquiry + insane + insect + inside + inspire + install + intact + interest + into + invest + invite + involve + iron + island + isolate + issue + item + ivory + jacket + jaguar + jar + jazz + jealous + jeans + jelly + jewel + job + join + joke + journey + joy + judge + juice + jump + jungle + junior + junk + just + kangaroo + keen + keep + ketchup + key + kick + kid + kidney + kind + kingdom + kiss + kit + kitchen + kite + kitten + kiwi + knee + knife + knock + know + lab + label + labor + ladder + lady + lake + lamp + language + laptop + large + later + latin + laugh + laundry + lava + law + lawn + lawsuit + layer + lazy + leader + leaf + learn + leave + lecture + left + leg + legal + legend + leisure + lemon + lend + length + lens + leopard + lesson + letter + level + liar + liberty + library + license + life + lift + light + like + limb + limit + link + lion + liquid + list + little + live + lizard + load + loan + lobster + local + lock + logic + lonely + long + loop + lottery + loud + lounge + love + loyal + lucky + luggage + lumber + lunar + lunch + luxury + lyrics + machine + mad + magic + magnet + maid + mail + main + major + make + mammal + man + manage + mandate + mango + mansion + manual + maple + marble + march + margin + marine + market + marriage + mask + mass + master + match + material + math + matrix + matter + maximum + maze + meadow + mean + measure + meat + mechanic + medal + media + melody + melt + member + memory + mention + menu + mercy + merge + merit + merry + mesh + message + metal + method + middle + midnight + milk + million + mimic + mind + minimum + minor + minute + miracle + mirror + misery + miss + mistake + mix + mixed + mixture + mobile + model + modify + mom + moment + monitor + monkey + monster + month + moon + moral + more + morning + mosquito + mother + motion + motor + mountain + mouse + move + movie + much + muffin + mule + multiply + muscle + museum + mushroom + music + must + mutual + myself + mystery + myth + naive + name + napkin + narrow + nasty + nation + nature + near + neck + need + negative + neglect + neither + nephew + nerve + nest + net + network + neutral + never + news + next + nice + night + noble + noise + nominee + noodle + normal + north + nose + notable + note + nothing + notice + novel + now + nuclear + number + nurse + nut + oak + obey + object + oblige + obscure + observe + obtain + obvious + occur + ocean + october + odor + off + offer + office + often + oil + okay + old + olive + olympic + omit + once + one + onion + online + only + open + opera + opinion + oppose + option + orange + orbit + orchard + order + ordinary + organ + orient + original + orphan + ostrich + other + outdoor + outer + output + outside + oval + oven + over + own + owner + oxygen + oyster + ozone + pact + paddle + page + pair + palace + palm + panda + panel + panic + panther + paper + parade + parent + park + parrot + party + pass + patch + path + patient + patrol + pattern + pause + pave + payment + peace + peanut + pear + peasant + pelican + pen + penalty + pencil + people + pepper + perfect + permit + person + pet + phone + photo + phrase + physical + piano + picnic + picture + piece + pig + pigeon + pill + pilot + pink + pioneer + pipe + pistol + pitch + pizza + place + planet + plastic + plate + play + please + pledge + pluck + plug + plunge + poem + poet + point + polar + pole + police + pond + pony + pool + popular + portion + position + possible + post + potato + pottery + poverty + powder + power + practice + praise + predict + prefer + prepare + present + pretty + prevent + price + pride + primary + print + priority + prison + private + prize + problem + process + produce + profit + program + project + promote + proof + property + prosper + protect + proud + provide + public + pudding + pull + pulp + pulse + pumpkin + punch + pupil + puppy + purchase + purity + purpose + purse + push + put + puzzle + pyramid + quality + quantum + quarter + question + quick + quit + quiz + quote + rabbit + raccoon + race + rack + radar + radio + rail + rain + raise + rally + ramp + ranch + random + range + rapid + rare + rate + rather + raven + raw + razor + ready + real + reason + rebel + rebuild + recall + receive + recipe + record + recycle + reduce + reflect + reform + refuse + region + regret + regular + reject + relax + release + relief + rely + remain + remember + remind + remove + render + renew + rent + reopen + repair + repeat + replace + report + require + rescue + resemble + resist + resource + response + result + retire + retreat + return + reunion + reveal + review + reward + rhythm + rib + ribbon + rice + rich + ride + ridge + rifle + right + rigid + ring + riot + ripple + risk + ritual + rival + river + road + roast + robot + robust + rocket + romance + roof + rookie + room + rose + rotate + rough + round + route + royal + rubber + rude + rug + rule + run + runway + rural + sad + saddle + sadness + safe + sail + salad + salmon + salon + salt + salute + same + sample + sand + satisfy + satoshi + sauce + sausage + save + say + scale + scan + scare + scatter + scene + scheme + school + science + scissors + scorpion + scout + scrap + screen + script + scrub + sea + search + season + seat + second + secret + section + security + seed + seek + segment + select + sell + seminar + senior + sense + sentence + series + service + session + settle + setup + seven + shadow + shaft + shallow + share + shed + shell + sheriff + shield + shift + shine + ship + shiver + shock + shoe + shoot + shop + short + shoulder + shove + shrimp + shrug + shuffle + shy + sibling + sick + side + siege + sight + sign + silent + silk + silly + silver + similar + simple + since + sing + siren + sister + situate + six + size + skate + sketch + ski + skill + skin + skirt + skull + slab + slam + sleep + slender + slice + slide + slight + slim + slogan + slot + slow + slush + small + smart + smile + smoke + smooth + snack + snake + snap + sniff + snow + soap + soccer + social + sock + soda + soft + solar + soldier + solid + solution + solve + someone + song + soon + sorry + sort + soul + sound + soup + source + south + space + spare + spatial + spawn + speak + special + speed + spell + spend + sphere + spice + spider + spike + spin + spirit + split + spoil + sponsor + spoon + sport + spot + spray + spread + spring + spy + square + squeeze + squirrel + stable + stadium + staff + stage + stairs + stamp + stand + start + state + stay + steak + steel + stem + step + stereo + stick + still + sting + stock + stomach + stone + stool + story + stove + strategy + street + strike + strong + struggle + student + stuff + stumble + style + subject + submit + subway + success + such + sudden + suffer + sugar + suggest + suit + summer + sun + sunny + sunset + super + supply + supreme + sure + surface + surge + surprise + surround + survey + suspect + sustain + swallow + swamp + swap + swarm + swear + sweet + swift + swim + swing + switch + sword + symbol + symptom + syrup + system + table + tackle + tag + tail + talent + talk + tank + tape + target + task + taste + tattoo + taxi + teach + team + tell + ten + tenant + tennis + tent + term + test + text + thank + that + theme + then + theory + there + they + thing + this + thought + three + thrive + throw + thumb + thunder + ticket + tide + tiger + tilt + timber + time + tiny + tip + tired + tissue + title + toast + tobacco + today + toddler + toe + together + toilet + token + tomato + tomorrow + tone + tongue + tonight + tool + tooth + top + topic + topple + torch + tornado + tortoise + toss + total + tourist + toward + tower + town + toy + track + trade + traffic + tragic + train + transfer + trap + trash + travel + tray + treat + tree + trend + trial + tribe + trick + trigger + trim + trip + trophy + trouble + truck + true + truly + trumpet + trust + truth + try + tube + tuition + tumble + tuna + tunnel + turkey + turn + turtle + twelve + twenty + twice + twin + twist + two + type + typical + ugly + umbrella + unable + unaware + uncle + uncover + under + undo + unfair + unfold + unhappy + uniform + unique + unit + universe + unknown + unlock + until + unusual + unveil + update + upgrade + uphold + upon + upper + upset + urban + urge + usage + use + used + useful + useless + usual + utility + vacant + vacuum + vague + valid + valley + valve + van + vanish + vapor + various + vast + vault + vehicle + velvet + vendor + venture + venue + verb + verify + version + very + vessel + veteran + viable + vibrant + vicious + victory + video + view + village + vintage + violin + virtual + virus + visa + visit + visual + vital + vivid + vocal + voice + void + volcano + volume + vote + voyage + wage + wagon + wait + walk + wall + walnut + want + warfare + warm + warrior + wash + wasp + waste + water + wave + way + wealth + weapon + wear + weasel + weather + web + wedding + weekend + weird + welcome + west + wet + whale + what + wheat + wheel + when + where + whip + whisper + wide + width + wife + wild + will + win + window + wine + wing + wink + winner + winter + wire + wisdom + wise + wish + witness + wolf + woman + wonder + wood + wool + word + work + world + worry + worth + wrap + wreck + wrestle + wrist + write + wrong + yard + year + yellow + you + young + youth + zebra + zero + zone + zoo + + diff --git a/litewallet/ar.lproj/LaunchScreen.strings b/litewallet/ar.lproj/LaunchScreen.strings new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/litewallet/ar.lproj/LaunchScreen.strings @@ -0,0 +1 @@ + diff --git a/litewalletTests/Language Selection Tests/LanguageSelectionTests.swift b/litewalletTests/Language Selection Tests/LanguageSelectionTests.swift index 5390377b1..deb33f35c 100644 --- a/litewalletTests/Language Selection Tests/LanguageSelectionTests.swift +++ b/litewalletTests/Language Selection Tests/LanguageSelectionTests.swift @@ -31,4 +31,19 @@ final class LanguageSelectionTests: XCTestCase { XCTAssertEqual(spanish, UserDefaults.selectedLanguage) XCTAssertEqual(S.LitewalletAlert.warning.localize(), "Aviso") } + + func testLocalizationsIncludesArabic() throws { + let localizations = viewModel.localizations + XCTAssertTrue(localizations.contains("ar"), "Localizations should include Arabic (ar)") + } + + func testSetLanguageToArabic() throws { + let initialLanguage = UserDefaults.selectedLanguage + XCTAssertEqual(initialLanguage, "en") + + let arabic = "ar" + viewModel.setLanguage(code: arabic) + XCTAssertEqual(UserDefaults.selectedLanguage, arabic, "The selected language should be set to Arabic in UserDefaults") + XCTAssertEqual(S.LitewalletAlert.warning.localize(), "تحذير") + } }