changeset 30:f76d0e26c178

Add localisation
author Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
date Fri, 23 Jul 2021 13:19:28 +0100
parents c52966834f83
children e521236028e0
files Localisation/en.xcloc/Localized Contents/en.xliff Localisation/en.xcloc/Source Contents/Simoleon/en.lproj/InfoPlist.strings Localisation/en.xcloc/Source Contents/Simoleon/en.lproj/Localizable.strings Localisation/en.xcloc/Source Contents/Simoleon/es.lproj/InfoPlist.strings Localisation/en.xcloc/Source Contents/Simoleon/es.lproj/Localizable.strings Localisation/en.xcloc/contents.json Simoleon.xcodeproj/project.pbxproj Simoleon.xcodeproj/project.xcworkspace/xcuserdata/dennis.xcuserdatad/UserInterfaceState.xcuserstate Simoleon/ContentView.swift Simoleon/Conversion.swift Simoleon/Favourites.swift Simoleon/Helpers/RestoreButton.swift Simoleon/Helpers/SubscribeButton.swift Simoleon/Helpers/SubscriberInfo.swift Simoleon/Helpers/SubscriptionFeature.swift Simoleon/Info.plist Simoleon/Subscription.swift
diffstat 17 files changed, 435 insertions(+), 95 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Localisation/en.xcloc/Localized Contents/en.xliff	Fri Jul 23 13:19:28 2021 +0100
@@ -0,0 +1,251 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd">
+  <file original="Simoleon/en.lproj/InfoPlist.strings" source-language="en" target-language="en" datatype="plaintext">
+    <header>
+      <tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="12.5.1" build-num="12E507"/>
+    </header>
+    <body>
+      <trans-unit id="CFBundleDisplayName" xml:space="preserve">
+        <source>Simoleon</source>
+        <target>Simoleon</target>
+        <note>Bundle display name</note>
+      </trans-unit>
+      <trans-unit id="CFBundleName" xml:space="preserve">
+        <source>Simoleon</source>
+        <target>Simoleon</target>
+        <note>Bundle name</note>
+      </trans-unit>
+    </body>
+  </file>
+  <file original="Simoleon/en.lproj/Localizable.strings" source-language="en" target-language="en" datatype="plaintext">
+    <header>
+      <tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="12.5.1" build-num="12E507"/>
+    </header>
+    <body>
+      <trans-unit id="%.2f" xml:space="preserve">
+        <source>%.2f</source>
+        <target>%.2f</target>
+        <note>No comment provided by engineer.</note>
+      </trans-unit>
+      <trans-unit id="%@ (%@)" xml:space="preserve">
+        <source>%1$@ (%2$@)</source>
+        <target>%1$@ (%2$@)</target>
+        <note>No comment provided by engineer.</note>
+      </trans-unit>
+      <trans-unit id="-" xml:space="preserve">
+        <source>-</source>
+        <target>-</target>
+        <note>No comment provided by engineer.</note>
+      </trans-unit>
+      <trans-unit id="About" xml:space="preserve">
+        <source>About</source>
+        <target>About</target>
+        <note>No comment provided by engineer.</note>
+      </trans-unit>
+      <trans-unit id="All currencies" xml:space="preserve">
+        <source>All currencies</source>
+        <target>All currencies</target>
+        <note>Section header in currency selector</note>
+      </trans-unit>
+      <trans-unit id="Cancel" xml:space="preserve">
+        <source>Cancel</source>
+        <target>Cancel</target>
+        <note>Button to dismiss currency selector
+   Button to dismiss paywall modal sheet
+   Button to stop editing textfield</note>
+      </trans-unit>
+      <trans-unit id="Categories" xml:space="preserve">
+        <source>Categories</source>
+        <target>Categories</target>
+        <note>Side bar navigation title</note>
+      </trans-unit>
+      <trans-unit id="Contact" xml:space="preserve">
+        <source>Contact</source>
+        <target>Contact</target>
+        <note>Button to contact in Settings</note>
+      </trans-unit>
+      <trans-unit id="Convert" xml:space="preserve">
+        <source>Convert</source>
+        <target>Convert</target>
+        <note>Navigation title
+   Tab bar button to show conversion</note>
+      </trans-unit>
+      <trans-unit id="Convert your currency between cryptos, gold, and silver." xml:space="preserve">
+        <source>Convert your currency between cryptos, gold, and silver.</source>
+        <target>Convert your currency between cryptos, gold, and silver.</target>
+        <note>Subscription feature description</note>
+      </trans-unit>
+      <trans-unit id="Cryptos and commodities" xml:space="preserve">
+        <source>Cryptos and commodities</source>
+        <target>Cryptos and commodities</target>
+        <note>Subscription feature title</note>
+      </trans-unit>
+      <trans-unit id="Currencies" xml:space="preserve">
+        <source>Currencies</source>
+        <target>Currencies</target>
+        <note>Navigation title</note>
+      </trans-unit>
+      <trans-unit id="Default currency" xml:space="preserve">
+        <source>Default currency</source>
+        <target>Default currency</target>
+        <note>Label in locked picker
+   Picker to select default currency</note>
+      </trans-unit>
+      <trans-unit id="Developer's Twitter" xml:space="preserve">
+        <source>Developer's Twitter</source>
+        <target>Developer's Twitter</target>
+        <note>Button to go to Twitter in Settings</note>
+      </trans-unit>
+      <trans-unit id="Enter amount" xml:space="preserve">
+        <source>Enter amount</source>
+        <target>Enter amount</target>
+        <note>No comment provided by engineer.</note>
+      </trans-unit>
+      <trans-unit id="Expires at %@" xml:space="preserve">
+        <source>Expires at %@</source>
+        <target>Expires at %@</target>
+        <note>Subscriber information</note>
+      </trans-unit>
+      <trans-unit id="Favourite currencies" xml:space="preserve">
+        <source>Favourite currencies</source>
+        <target>Favourite currencies</target>
+        <note>Subscription feature title</note>
+      </trans-unit>
+      <trans-unit id="Favourites" xml:space="preserve">
+        <source>Favourites</source>
+        <target>Favourites</target>
+        <note>Navigation title
+   Tab bar button to show favourites</note>
+      </trans-unit>
+      <trans-unit id="From %@ to %@" xml:space="preserve">
+        <source>From %1$@ to %2$@</source>
+        <target>From %1$@ to %2$@</target>
+        <note>Conversion from one currency to another</note>
+      </trans-unit>
+      <trans-unit id="Have access to almost every currency of the world." xml:space="preserve">
+        <source>Have access to almost every currency of the world.</source>
+        <target>Have access to almost every currency of the world.</target>
+        <note>Subscription feature description</note>
+      </trans-unit>
+      <trans-unit id="Information" xml:space="preserve">
+        <source>Information</source>
+        <target>Information</target>
+        <note>Button to show subscription information in settings
+   Navigation title</note>
+      </trans-unit>
+      <trans-unit id="Latest purchase %@" xml:space="preserve">
+        <source>Latest purchase %@</source>
+        <target>Latest purchase %@</target>
+        <note>Subscriber information</note>
+      </trans-unit>
+      <trans-unit id="Member since %@" xml:space="preserve">
+        <source>Member since %@</source>
+        <target>Member since %@</target>
+        <note>Subscriber information</note>
+      </trans-unit>
+      <trans-unit id="Ok" xml:space="preserve">
+        <source>Ok</source>
+        <target>Ok</target>
+        <note>Button to dismiss alert
+   Button to stop searching in currency selector
+   Dismiss alert</note>
+      </trans-unit>
+      <trans-unit id="Over 170 currencies" xml:space="preserve">
+        <source>Over 170 currencies</source>
+        <target>Over 170 currencies</target>
+        <note>Subscription feature title</note>
+      </trans-unit>
+      <trans-unit id="Preferences" xml:space="preserve">
+        <source>Preferences</source>
+        <target>Preferences</target>
+        <note>Section header in settings</note>
+      </trans-unit>
+      <trans-unit id="Privacy Policy" xml:space="preserve">
+        <source>Privacy Policy</source>
+        <target>Privacy Policy</target>
+        <note>Button to go to app privacy policy</note>
+      </trans-unit>
+      <trans-unit id="Rate Simoleon" xml:space="preserve">
+        <source>Rate Simoleon</source>
+        <target>Rate Simoleon</target>
+        <note>Button to rate app in Settings</note>
+      </trans-unit>
+      <trans-unit id="Restore purchases" xml:space="preserve">
+        <source>Restore purchases</source>
+        <target>Restore purchases</target>
+        <note>Button to restore in-App purchases</note>
+      </trans-unit>
+      <trans-unit id="Save your favourite currencies to access them quickly." xml:space="preserve">
+        <source>Save your favourite currencies to access them quickly.</source>
+        <target>Save your favourite currencies to access them quickly.</target>
+        <note>Subscription feature description</note>
+      </trans-unit>
+      <trans-unit id="Search ..." xml:space="preserve">
+        <source>Search ...</source>
+        <target>Search ...</target>
+        <note>No comment provided by engineer.</note>
+      </trans-unit>
+      <trans-unit id="Settings" xml:space="preserve">
+        <source>Settings</source>
+        <target>Settings</target>
+        <note>Navigation title
+   Tab bar button to show settings</note>
+      </trans-unit>
+      <trans-unit id="Simoleon on all your devices" xml:space="preserve">
+        <source>Simoleon on all your devices</source>
+        <target>Simoleon on all your devices</target>
+        <note>Subscription feature title</note>
+      </trans-unit>
+      <trans-unit id="Stay in touch" xml:space="preserve">
+        <source>Stay in touch</source>
+        <target>Stay in touch</target>
+        <note>Section header in settings</note>
+      </trans-unit>
+      <trans-unit id="Subscribe" xml:space="preserve">
+        <source>Subscribe</source>
+        <target>Subscribe</target>
+        <note>Button to suscribe in settings</note>
+      </trans-unit>
+      <trans-unit id="Subscribe for %@ / month" xml:space="preserve">
+        <source>Subscribe for %@ / month</source>
+        <target>Subscribe for %@ / month</target>
+        <note>Subscribe button</note>
+      </trans-unit>
+      <trans-unit id="Subscription" xml:space="preserve">
+        <source>Subscription</source>
+        <target>Subscription</target>
+        <note>Section header in settings</note>
+      </trans-unit>
+      <trans-unit id="Tap " xml:space="preserve">
+        <source>Tap </source>
+        <target>Tap </target>
+        <note>First line when favourites are empty</note>
+      </trans-unit>
+      <trans-unit id="USD/GBP" xml:space="preserve">
+        <source>USD/GBP</source>
+        <target>USD/GBP</target>
+        <note>Default currency in locked picker</note>
+      </trans-unit>
+      <trans-unit id="Unlock all access" xml:space="preserve">
+        <source>Unlock all access</source>
+        <target>Unlock all access</target>
+        <note>Headline in Subscription paywall</note>
+      </trans-unit>
+      <trans-unit id="Website" xml:space="preserve">
+        <source>Website</source>
+        <target>Website</target>
+        <note>Button to go to Dennis Tech website</note>
+      </trans-unit>
+      <trans-unit id="Your settings and favourite currencies in all your devices." xml:space="preserve">
+        <source>Your settings and favourite currencies in all your devices.</source>
+        <target>Your settings and favourite currencies in all your devices.</target>
+        <note>Subscription feature description</note>
+      </trans-unit>
+      <trans-unit id="to add a currency pair to favourites" xml:space="preserve">
+        <source>to add a currency pair to favourites</source>
+        <target>to add a currency pair to favourites</target>
+        <note>Finish line when favourites are empty</note>
+      </trans-unit>
+    </body>
+  </file>
+</xliff>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Localisation/en.xcloc/Source Contents/Simoleon/en.lproj/InfoPlist.strings	Fri Jul 23 13:19:28 2021 +0100
@@ -0,0 +1,4 @@
+/* Bundle display name */
+"CFBundleDisplayName" = "Simoleon";
+/* Bundle name */
+"CFBundleName" = "Simoleon";
Binary file Localisation/en.xcloc/Source Contents/Simoleon/en.lproj/Localizable.strings has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Localisation/en.xcloc/Source Contents/Simoleon/es.lproj/InfoPlist.strings	Fri Jul 23 13:19:28 2021 +0100
@@ -0,0 +1,4 @@
+/* Bundle display name */
+"CFBundleDisplayName" = "Simoleon";
+/* Bundle name */
+"CFBundleName" = "Simoleon";
Binary file Localisation/en.xcloc/Source Contents/Simoleon/es.lproj/Localizable.strings has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Localisation/en.xcloc/contents.json	Fri Jul 23 13:19:28 2021 +0100
@@ -0,0 +1,12 @@
+{
+  "developmentRegion" : "en",
+  "project" : "Simoleon.xcodeproj",
+  "targetLocale" : "en",
+  "toolInfo" : {
+    "toolBuildNumber" : "12E507",
+    "toolID" : "com.apple.dt.xcode",
+    "toolName" : "Xcode",
+    "toolVersion" : "12.5.1"
+  },
+  "version" : "1.0"
+}
\ No newline at end of file
--- a/Simoleon.xcodeproj/project.pbxproj	Thu Jul 22 22:30:54 2021 +0100
+++ b/Simoleon.xcodeproj/project.pbxproj	Fri Jul 23 13:19:28 2021 +0100
@@ -27,6 +27,10 @@
 		95B54F4A26A4A450001DC0D8 /* ConversionBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95B54F4926A4A450001DC0D8 /* ConversionBox.swift */; };
 		95B54F4F26A4AC52001DC0D8 /* ContentViewPad.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95B54F4E26A4AC52001DC0D8 /* ContentViewPad.swift */; };
 		95B54F5126A4ACAC001DC0D8 /* Sidebar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95B54F5026A4ACAC001DC0D8 /* Sidebar.swift */; };
+		95B5F53126AADE4B00BDCE89 /* en.xliff in Resources */ = {isa = PBXBuildFile; fileRef = 95B5F52826AADE4B00BDCE89 /* en.xliff */; };
+		95B5F53226AADE4B00BDCE89 /* contents.json in Resources */ = {isa = PBXBuildFile; fileRef = 95B5F52A26AADE4B00BDCE89 /* contents.json */; };
+		95B5F53326AADE4B00BDCE89 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 95B5F52D26AADE4B00BDCE89 /* Localizable.strings */; };
+		95B5F53426AADE4B00BDCE89 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 95B5F52F26AADE4B00BDCE89 /* InfoPlist.strings */; };
 		95C5179126A5DC8E00BC2B24 /* ConditionalWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95C5179026A5DC8E00BC2B24 /* ConditionalWrapper.swift */; };
 		95C5179926A5EC9F00BC2B24 /* FavouriteButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95C5179826A5EC9F00BC2B24 /* FavouriteButton.swift */; };
 		95C5179C26A5EFBE00BC2B24 /* Favourite+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95C5179A26A5EFBE00BC2B24 /* Favourite+CoreDataClass.swift */; };
@@ -41,7 +45,6 @@
 		95C5B23F2697752700941585 /* SimoleonTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95C5B23E2697752700941585 /* SimoleonTests.swift */; };
 		95C5B24A2697752700941585 /* SimoleonUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95C5B2492697752700941585 /* SimoleonUITests.swift */; };
 		95D8C8C726A95D2900BCC188 /* Subscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95D8C8C626A95D2900BCC188 /* Subscription.swift */; };
-		95D8C8CB26A970F400BCC188 /* SubscriptionFeature.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95D8C8CA26A970F400BCC188 /* SubscriptionFeature.swift */; };
 		95D8C8CD26A9784500BCC188 /* SubscribeButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95D8C8CC26A9784500BCC188 /* SubscribeButton.swift */; };
 		95D8C8CF26A98A7900BCC188 /* RestoreButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95D8C8CE26A98A7900BCC188 /* RestoreButton.swift */; };
 		95D8C8D126A9BC6200BCC188 /* LockedCurrencyPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95D8C8D026A9BC6200BCC188 /* LockedCurrencyPicker.swift */; };
@@ -91,6 +94,12 @@
 		95B54F4926A4A450001DC0D8 /* ConversionBox.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConversionBox.swift; sourceTree = "<group>"; };
 		95B54F4E26A4AC52001DC0D8 /* ContentViewPad.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentViewPad.swift; sourceTree = "<group>"; };
 		95B54F5026A4ACAC001DC0D8 /* Sidebar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Sidebar.swift; sourceTree = "<group>"; };
+		95B5F52826AADE4B00BDCE89 /* en.xliff */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = en.xliff; sourceTree = "<group>"; };
+		95B5F52A26AADE4B00BDCE89 /* contents.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = contents.json; sourceTree = "<group>"; };
+		95B5F52E26AADE4B00BDCE89 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
+		95B5F53026AADE4B00BDCE89 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		95B5F53526AADE5200BDCE89 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = "<group>"; };
+		95B5F53626AADE5500BDCE89 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = "<group>"; };
 		95C5179026A5DC8E00BC2B24 /* ConditionalWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConditionalWrapper.swift; sourceTree = "<group>"; };
 		95C5179826A5EC9F00BC2B24 /* FavouriteButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FavouriteButton.swift; sourceTree = "<group>"; };
 		95C5179A26A5EFBE00BC2B24 /* Favourite+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Favourite+CoreDataClass.swift"; sourceTree = "<group>"; };
@@ -111,7 +120,6 @@
 		95C5B2492697752700941585 /* SimoleonUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimoleonUITests.swift; sourceTree = "<group>"; };
 		95C5B24B2697752700941585 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		95D8C8C626A95D2900BCC188 /* Subscription.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Subscription.swift; sourceTree = "<group>"; };
-		95D8C8CA26A970F400BCC188 /* SubscriptionFeature.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscriptionFeature.swift; sourceTree = "<group>"; };
 		95D8C8CC26A9784500BCC188 /* SubscribeButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscribeButton.swift; sourceTree = "<group>"; };
 		95D8C8CE26A98A7900BCC188 /* RestoreButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RestoreButton.swift; sourceTree = "<group>"; };
 		95D8C8D026A9BC6200BCC188 /* LockedCurrencyPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LockedCurrencyPicker.swift; sourceTree = "<group>"; };
@@ -192,11 +200,63 @@
 			path = Tests;
 			sourceTree = "<group>";
 		};
+		95B5F52526AADE4B00BDCE89 /* Localisation */ = {
+			isa = PBXGroup;
+			children = (
+				95B5F52626AADE4B00BDCE89 /* en.xcloc */,
+			);
+			path = Localisation;
+			sourceTree = "<group>";
+		};
+		95B5F52626AADE4B00BDCE89 /* en.xcloc */ = {
+			isa = PBXGroup;
+			children = (
+				95B5F52726AADE4B00BDCE89 /* Localized Contents */,
+				95B5F52926AADE4B00BDCE89 /* Notes */,
+				95B5F52A26AADE4B00BDCE89 /* contents.json */,
+				95B5F52B26AADE4B00BDCE89 /* Source Contents */,
+			);
+			path = en.xcloc;
+			sourceTree = "<group>";
+		};
+		95B5F52726AADE4B00BDCE89 /* Localized Contents */ = {
+			isa = PBXGroup;
+			children = (
+				95B5F52826AADE4B00BDCE89 /* en.xliff */,
+			);
+			path = "Localized Contents";
+			sourceTree = "<group>";
+		};
+		95B5F52926AADE4B00BDCE89 /* Notes */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Notes;
+			sourceTree = "<group>";
+		};
+		95B5F52B26AADE4B00BDCE89 /* Source Contents */ = {
+			isa = PBXGroup;
+			children = (
+				95B5F52C26AADE4B00BDCE89 /* Simoleon */,
+			);
+			path = "Source Contents";
+			sourceTree = "<group>";
+		};
+		95B5F52C26AADE4B00BDCE89 /* Simoleon */ = {
+			isa = PBXGroup;
+			children = (
+				95B5F52D26AADE4B00BDCE89 /* Localizable.strings */,
+				95B5F52F26AADE4B00BDCE89 /* InfoPlist.strings */,
+			);
+			path = Simoleon;
+			sourceTree = "<group>";
+		};
 		95C5B21B2697752600941585 = {
 			isa = PBXGroup;
 			children = (
 				9585BB1026A6B5ED00E3193E /* ConfigTemplate.xcconfig */,
 				9585BB0F26A6B58500E3193E /* Config.xcconfig */,
+				95B5F52526AADE4B00BDCE89 /* Localisation */,
 				95C5B2262697752600941585 /* Simoleon */,
 				95C5B23D2697752700941585 /* SimoleonTests */,
 				95C5B2482697752700941585 /* SimoleonUITests */,
@@ -286,7 +346,6 @@
 				95C5179026A5DC8E00BC2B24 /* ConditionalWrapper.swift */,
 				95C5179826A5EC9F00BC2B24 /* FavouriteButton.swift */,
 				95C517A026A5F6C000BC2B24 /* ResignKeyboard.swift */,
-				95D8C8CA26A970F400BCC188 /* SubscriptionFeature.swift */,
 				95D8C8CC26A9784500BCC188 /* SubscribeButton.swift */,
 				95D8C8CE26A98A7900BCC188 /* RestoreButton.swift */,
 				95D8C8D026A9BC6200BCC188 /* LockedCurrencyPicker.swift */,
@@ -383,6 +442,7 @@
 			hasScannedForEncodings = 0;
 			knownRegions = (
 				en,
+				es,
 				Base,
 			);
 			mainGroup = 95C5B21B2697752600941585;
@@ -409,6 +469,10 @@
 				95C5B22F2697752700941585 /* Preview Assets.xcassets in Resources */,
 				95E76436269DFC1A008E9F31 /* LaunchScreen.storyboard in Resources */,
 				9555933D269B0E0A000FD726 /* CurrencyMetadata.json in Resources */,
+				95B5F53126AADE4B00BDCE89 /* en.xliff in Resources */,
+				95B5F53326AADE4B00BDCE89 /* Localizable.strings in Resources */,
+				95B5F53226AADE4B00BDCE89 /* contents.json in Resources */,
+				95B5F53426AADE4B00BDCE89 /* InfoPlist.strings in Resources */,
 				95C5B22C2697752700941585 /* Assets.xcassets in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -440,7 +504,6 @@
 				950A377826A820F800CAB175 /* DefaultCurrency+CoreDataClass.swift in Sources */,
 				95C5B2312697752700941585 /* Persistence.swift in Sources */,
 				9585BB1226A6B71B00E3193E /* ReadConfig.swift in Sources */,
-				95D8C8CB26A970F400BCC188 /* SubscriptionFeature.swift in Sources */,
 				95AEBC9526A03ECB00613729 /* ContentView.swift in Sources */,
 				95AEBC9B26A04A4200613729 /* CurrencyMetadataModel.swift in Sources */,
 				95D8C8D526A9E20F00BCC188 /* SubscriberInfo.swift in Sources */,
@@ -501,6 +564,27 @@
 		};
 /* End PBXTargetDependency section */
 
+/* Begin PBXVariantGroup section */
+		95B5F52D26AADE4B00BDCE89 /* Localizable.strings */ = {
+			isa = PBXVariantGroup;
+			children = (
+				95B5F52E26AADE4B00BDCE89 /* en */,
+				95B5F53526AADE5200BDCE89 /* es */,
+			);
+			name = Localizable.strings;
+			sourceTree = "<group>";
+		};
+		95B5F52F26AADE4B00BDCE89 /* InfoPlist.strings */ = {
+			isa = PBXVariantGroup;
+			children = (
+				95B5F53026AADE4B00BDCE89 /* en */,
+				95B5F53626AADE5500BDCE89 /* es */,
+			);
+			name = InfoPlist.strings;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
 /* Begin XCBuildConfiguration section */
 		95C5B24C2697752700941585 /* Debug */ = {
 			isa = XCBuildConfiguration;
@@ -629,7 +713,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CODE_SIGN_ENTITLEMENTS = Simoleon/Simoleon.entitlements;
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 5;
+				CURRENT_PROJECT_VERSION = 6;
 				DEVELOPMENT_ASSET_PATHS = "\"Simoleon/Preview Content\"";
 				DEVELOPMENT_TEAM = MTX83R5H8X;
 				ENABLE_PREVIEWS = YES;
@@ -654,7 +738,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CODE_SIGN_ENTITLEMENTS = Simoleon/Simoleon.entitlements;
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 5;
+				CURRENT_PROJECT_VERSION = 6;
 				DEVELOPMENT_ASSET_PATHS = "\"Simoleon/Preview Content\"";
 				DEVELOPMENT_TEAM = MTX83R5H8X;
 				ENABLE_PREVIEWS = YES;
Binary file Simoleon.xcodeproj/project.xcworkspace/xcuserdata/dennis.xcuserdatad/UserInterfaceState.xcuserstate has changed
--- a/Simoleon/ContentView.swift	Thu Jul 22 22:30:54 2021 +0100
+++ b/Simoleon/ContentView.swift	Fri Jul 23 13:19:28 2021 +0100
@@ -59,5 +59,6 @@
 struct ContentView_Previews: PreviewProvider {
     static var previews: some View {
         ContentView()
+            .environment(\.locale, .init(identifier: "es"))
     }
 }
--- a/Simoleon/Conversion.swift	Thu Jul 22 22:30:54 2021 +0100
+++ b/Simoleon/Conversion.swift	Fri Jul 23 13:19:28 2021 +0100
@@ -62,7 +62,7 @@
                 CurrencySelector(currencyPair: $currencyPair, showingCurrencySelector: $showingCurrencySelector)
             }
         }
-        .navigationTitle(Text("Conversion", comment: "Navigation title"))
+        .navigationTitle(Text("Convert", comment: "Navigation title"))
         .toolbar {
             ToolbarItem(placement: .cancellationAction) {
                 if isEditing {
--- a/Simoleon/Favourites.swift	Thu Jul 22 22:30:54 2021 +0100
+++ b/Simoleon/Favourites.swift	Fri Jul 23 13:19:28 2021 +0100
@@ -32,6 +32,7 @@
                     }
                     .onDelete(perform: removeFromFavourites)
                 }
+                .listStyle(PlainListStyle())
             }
         }
         .navigationTitle(Text("Favourites", comment: "Navigation title"))
--- a/Simoleon/Helpers/RestoreButton.swift	Thu Jul 22 22:30:54 2021 +0100
+++ b/Simoleon/Helpers/RestoreButton.swift	Fri Jul 23 13:19:28 2021 +0100
@@ -12,9 +12,9 @@
     @Binding var showingSubscriptionPaywall: Bool
     @EnvironmentObject var subscriptionController: SubscriptionController
     
+    @State private var alertTitle: LocalizedStringKey = ""
+    @State private var alertMessage: LocalizedStringKey = ""
     @State private var restoringPurchases = false
-    @State private var alertTitle = Text("")
-    @State private var alertMessage = Text("")
     @State private var showingAlert = false
     
     var body: some View {
@@ -26,7 +26,7 @@
             }
         }
         .alert(isPresented: $showingAlert) {
-            Alert(title: alertTitle, message: alertMessage, dismissButton: .default(Text("Ok", comment: "Button to dismiss alert")))
+            Alert(title: Text(alertTitle), message: Text(alertMessage), dismissButton: .default(Text("Ok", comment: "Button to dismiss alert")))
         }
     }
     
@@ -38,15 +38,15 @@
                 subscriptionController.isActive = true
                 showingSubscriptionPaywall = false
             } else {
-                alertTitle = Text("No subscriptions found", comment: "Alert title")
-                alertMessage = Text("You are not subscripted to Simoleon yet.", comment: "Alert message")
+                alertTitle = LocalizedStringKey("No subscriptions found")
+                alertMessage = LocalizedStringKey("You are not subscripted to Simoleon yet.")
                 restoringPurchases = false
                 showingAlert = true
             }
             
             if let error = error as NSError? {
-                alertTitle = Text(error.localizedDescription)
-                alertMessage = Text(error.localizedFailureReason ?? "If the problem persists send an email to dmartin@dennistech.io")
+                alertTitle = LocalizedStringKey(error.localizedDescription)
+                alertMessage = LocalizedStringKey(error.localizedFailureReason ?? "")
                 showingAlert = true
             }
         }
--- a/Simoleon/Helpers/SubscribeButton.swift	Thu Jul 22 22:30:54 2021 +0100
+++ b/Simoleon/Helpers/SubscribeButton.swift	Fri Jul 23 13:19:28 2021 +0100
@@ -12,11 +12,11 @@
     @Binding var showingSubscriptionPaywall: Bool
     @EnvironmentObject var subscriptionController: SubscriptionController
     
-    @State private var subscribeButtonText = ""
-    @State private var showingPrice = false
+    @State private var price = ""
     @State private var alertTitle = ""
     @State private var alertMessage = ""
     @State private var showingAlert = false
+    @State private var showingPrice = false
     
     var body: some View {
         Button(action: purchaseMonthlySubscription) {
@@ -25,7 +25,7 @@
                 .overlay(
                     VStack {
                         if showingPrice {
-                            Text(subscribeButtonText)
+                            Text("Subscribe for \(price) / month", comment: "Subscribe button")
                                 .foregroundColor(.white)
                                 .fontWeight(.semibold)
                         } else {
@@ -43,15 +43,14 @@
     private func fetchMonthlySubscription() {
         Purchases.shared.offerings { (offerings, error) in
             if let product = offerings?.current?.monthly?.product {
-                let price = formatCurrency(product.priceLocale, product.price)
-                subscribeButtonText = "Subscribe for \(price) / month"
+                self.price = formatCurrency(product.priceLocale, product.price)
                 showingPrice = true
             }
             
             if let error = error as NSError? {
                 alertTitle = error.localizedDescription
-                alertMessage = error.localizedFailureReason ?? "If the problem persists send an email to dmartin@dennistech.io"
-                subscribeButtonText = "-"
+                alertMessage = error.localizedFailureReason ?? ""
+                price = "-"
                 showingPrice = true
                 showingAlert = true
             }
@@ -73,7 +72,7 @@
                     
                     if let error = error as NSError? {
                         alertTitle = error.localizedDescription
-                        alertMessage = error.localizedFailureReason ?? "If the problem persists send an email to dmartin@dennistech.io"
+                        alertMessage = error.localizedFailureReason ?? ""
                         showingPrice = true
                         showingAlert = true
                     }
@@ -81,7 +80,7 @@
                 
                 if let error = error as NSError? {
                     alertTitle = error.localizedDescription
-                    alertMessage = error.localizedFailureReason ?? "If the problem persists send an email to dmartin@dennistech.io"
+                    alertMessage = error.localizedFailureReason ?? ""
                     showingPrice = true
                     showingAlert = true
                 }
--- a/Simoleon/Helpers/SubscriberInfo.swift	Thu Jul 22 22:30:54 2021 +0100
+++ b/Simoleon/Helpers/SubscriberInfo.swift	Fri Jul 23 13:19:28 2021 +0100
@@ -13,8 +13,8 @@
     @State private var expiration: Date? = nil
     @State private var latestPurchase: Date? = nil
     @State private var showingAlert = false
-    @State private var alertTitle = Text("")
-    @State private var alertMessage = Text("")
+    @State private var alertTitle = ""
+    @State private var alertMessage = ""
     
     var body: some View {
         VStack {
@@ -42,7 +42,7 @@
         .navigationTitle(Text("Information", comment: "Navigation title"))
         .onAppear(perform: getInfo)
         .alert(isPresented: $showingAlert) {
-            Alert(title: alertTitle, message: alertMessage, dismissButton: .default(Text("Ok", comment: "Dismiss alert")))
+            Alert(title: Text(alertTitle), message: Text(alertMessage), dismissButton: .default(Text("Ok", comment: "Dismiss alert")))
         }
     }
     
@@ -53,8 +53,8 @@
             self.latestPurchase = purchaserInfo?.entitlements["all"]?.latestPurchaseDate
 
             if let error = error as NSError? {
-                alertTitle = Text(error.localizedDescription)
-                alertMessage = Text(error.localizedFailureReason ?? "If the problem persists send an email to dmartin@dennistech.io")
+                alertTitle = error.localizedDescription
+                alertMessage = error.localizedFailureReason ?? ""
                 showingAlert = true
             }
         }
--- a/Simoleon/Helpers/SubscriptionFeature.swift	Thu Jul 22 22:30:54 2021 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-//
-//  SubscriptionFeature.swift
-//  Simoleon
-//
-//  Created by Dennis Concepción Martín on 22/07/2021.
-//
-
-import SwiftUI
-
-struct SubscriptionFeature: View {
-    var symbol: String
-    var title: LocalizedStringKey
-    var text: LocalizedStringKey
-    var colour: Color
-    
-    var body: some View {
-        HStack(alignment:.top) {
-            Image(systemName: symbol)
-                .foregroundColor(colour)
-                .font(.title)
-            
-            VStack(alignment: .leading) {
-                Text(title, comment: "Title of subscription feature")
-                    .font(.headline)
-                
-                Text(text, comment: "Description of subscription feature")
-            }
-        }
-    }
-}
-
-struct SubscriptionFeature_Previews: PreviewProvider {
-    static var previews: some View {
-        SubscriptionFeature(
-            symbol: "star.circle.fill",
-            title: "Favourite currencies",
-            text: "Save your favourite currencies to access them quickly.",
-            colour: Color(.systemYellow)
-        )
-    }
-}
--- a/Simoleon/Info.plist	Thu Jul 22 22:30:54 2021 +0100
+++ b/Simoleon/Info.plist	Fri Jul 23 13:19:28 2021 +0100
@@ -2,8 +2,6 @@
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
 <dict>
-	<key>PURCHASES_KEY</key>
-	<string>$(PURCHASES_KEY)</string>
 	<key>API_KEY</key>
 	<string>$(API_KEY)</string>
 	<key>API_URL</key>
@@ -28,6 +26,8 @@
 	<string>$(CURRENT_PROJECT_VERSION)</string>
 	<key>LSRequiresIPhoneOS</key>
 	<true/>
+	<key>PURCHASES_KEY</key>
+	<string>$(PURCHASES_KEY)</string>
 	<key>UIApplicationSceneManifest</key>
 	<dict>
 		<key>UIApplicationSupportsMultipleScenes</key>
--- a/Simoleon/Subscription.swift	Thu Jul 22 22:30:54 2021 +0100
+++ b/Simoleon/Subscription.swift	Fri Jul 23 13:19:28 2021 +0100
@@ -34,33 +34,58 @@
                     
                     Divider()
                     
-                    SubscriptionFeature(
-                        symbol: "star.circle.fill",
-                        title: "Favourite currencies",
-                        text: "Save your favourite currencies to access them quickly.",
-                        colour: Color(.systemYellow)
-                    )
+                    HStack(alignment:.top) {
+                        Image(systemName: "star.circle.fill")
+                            .foregroundColor(Color(.systemYellow))
+                            .font(.title)
+                        
+                        VStack(alignment: .leading) {
+                            Text("Favourite currencies", comment: "Subscription feature title")
+                                .font(.headline)
+                            
+                            Text("Save your favourite currencies to access them quickly.", comment: "Subscription feature description")
+                        }
+                    }
                     
-                    SubscriptionFeature(
-                        symbol: "flag.circle.fill",
-                        title: "Over 170 currencies",
-                        text: "Have access to almost every currency of the world.",
-                        colour: Color(.systemRed)
-                    )
+                    HStack(alignment:.top) {
+                        Image(systemName: "flag.circle.fill")
+                            .foregroundColor(Color(.systemRed))
+                            .font(.title)
+                        
+                        VStack(alignment: .leading) {
+                            Text("Over 170 currencies", comment: "Subscription feature title")
+                                .font(.headline)
+                            
+                            Text("Have access to almost every currency of the world.", comment: "Subscription feature description")
+                        }
+                    }
                     
-                    SubscriptionFeature(
-                        symbol: "icloud.circle.fill",
-                        title: "Simoleon on all your devices",
-                        text: "Your settings and favourite currencies in all your devices.",
-                        colour: Color(.systemBlue)
-                    )
+                    HStack(alignment:.top) {
+                        Image(systemName: "icloud.circle.fill")
+                            .foregroundColor(Color(.systemBlue))
+                            .font(.title)
+                        
+                        VStack(alignment: .leading) {
+                            Text("Simoleon on all your devices", comment: "Subscription feature title")
+                                .font(.headline)
+                            
+                            Text("Your settings and favourite currencies in all your devices.", comment: "Subscription feature description")
+                        }
+                    }
                     
-                    SubscriptionFeature(
-                        symbol: "bitcoinsign.circle.fill",
-                        title: "Cryptos and commodities",
-                        text: "Convert your currency between cryptos, gold, and silver.",
-                        colour: Color(.systemOrange)
-                    )
+                    HStack(alignment:.top) {
+                        Image(systemName: "bitcoinsign.circle.fill")
+                            .foregroundColor(Color(.systemOrange))
+                            .font(.title)
+                        
+                        VStack(alignment: .leading) {
+                            Text("Cryptos and commodities", comment: "Subscription feature title")
+                                .font(.headline)
+                            
+                            Text("Convert your currency between cryptos, gold, and silver.", comment: "Subscription feature description")
+                        }
+                    }
+                    
                     Spacer()
                     SubscribeButton(showingSubscriptionPaywall: $showingSubscriptionPaywall)
                     HStack {