From a2153a2cf7812d21a612aa5d439b5a7b41b388cd Mon Sep 17 00:00:00 2001 From: Marcin Czachursk Date: Wed, 5 Apr 2023 15:27:53 +0200 Subject: [PATCH 01/17] Change version to 1.0.1 (93) --- Vernissage.xcodeproj/project.pbxproj | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Vernissage.xcodeproj/project.pbxproj b/Vernissage.xcodeproj/project.pbxproj index d38dc4c..01a9394 100644 --- a/Vernissage.xcodeproj/project.pbxproj +++ b/Vernissage.xcodeproj/project.pbxproj @@ -1354,7 +1354,7 @@ CODE_SIGN_ENTITLEMENTS = VernissageWidget/VernissageWidgetExtension.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 92; + CURRENT_PROJECT_VERSION = 93; DEVELOPMENT_TEAM = B2U9FEKYP8; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = VernissageWidget/Info.plist; @@ -1365,7 +1365,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0; + MARKETING_VERSION = 1.0.1; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage.widget; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -1382,7 +1382,7 @@ ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; CODE_SIGN_ENTITLEMENTS = VernissageWidget/VernissageWidgetExtension.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 92; + CURRENT_PROJECT_VERSION = 93; DEVELOPMENT_TEAM = B2U9FEKYP8; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = VernissageWidget/Info.plist; @@ -1393,7 +1393,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0; + MARKETING_VERSION = 1.0.1; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage.widget; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -1530,7 +1530,7 @@ CODE_SIGN_ENTITLEMENTS = Vernissage/Vernissage.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 92; + CURRENT_PROJECT_VERSION = 93; DEVELOPMENT_ASSET_PATHS = "\"Vernissage/Preview Content\""; DEVELOPMENT_TEAM = B2U9FEKYP8; ENABLE_PREVIEWS = YES; @@ -1547,7 +1547,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0; + MARKETING_VERSION = 1.0.1; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1570,7 +1570,7 @@ ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CODE_SIGN_ENTITLEMENTS = Vernissage/Vernissage.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 92; + CURRENT_PROJECT_VERSION = 93; DEVELOPMENT_ASSET_PATHS = "\"Vernissage/Preview Content\""; DEVELOPMENT_TEAM = B2U9FEKYP8; ENABLE_PREVIEWS = YES; @@ -1587,7 +1587,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0; + MARKETING_VERSION = 1.0.1; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; From 31327830035b37422ee2f9b59950fbc75a854f8e Mon Sep 17 00:00:00 2001 From: Xabi Date: Wed, 5 Apr 2023 15:57:26 +0200 Subject: [PATCH 02/17] Create EU localisation Initial localisation. --- Localization/eu.lproj/Localizable.strings | 323 ++++++++++++++++++++++ 1 file changed, 323 insertions(+) create mode 100644 Localization/eu.lproj/Localizable.strings diff --git a/Localization/eu.lproj/Localizable.strings b/Localization/eu.lproj/Localizable.strings new file mode 100644 index 0000000..416689f --- /dev/null +++ b/Localization/eu.lproj/Localizable.strings @@ -0,0 +1,323 @@ +// MARK: Common strings. +"global.title.contentWarning" = "Eduki hunkigarria"; +"global.title.seePost" = "Ikusi bidalketa"; +"global.title.refresh" = "Freskatu"; + +// MARK: Global errors. +"global.error.unexpected" = "Espero ez zen errorea."; +"global.error.statusesNotRetrieved" = "Ez dira egoerak eskuratu."; +"global.error.errorDuringDownloadStatuses" = "Errorea egoerak zerbitzaritik eskuratzean."; +"global.error.errorDuringDownloadHashtag" = "Errorea traolak zerbitzaritik eskuratzean."; +"global.error.hashtagNotExists" = "Traola ez da existitzen."; +"global.error.errorDuringImageDownload" = "Ezin da irudia eskuratu."; +"global.error.canceledImageDownload" = "Download image has been canceled."; +"global.error.errorDuringDataLoad" = "Datuen kargak huts egin du."; +"global.error.errorDuringUserRead" = "Ezin izan da erabiltzailearen kontua eskuratu."; +"global.error.badUrlServer" = "Zerbitzariaren URL okerra."; +"global.error.accessTokenNotFound" = "Access token not found."; +"global.error.errorDuringDownloadStatus" = "Errorea zerbitzaritik egoera eskuratzean."; +"global.error.errorDuringPurchaseVerification" = "Erosketaren egiaztaketak huts egin du."; + +// MARK: Main view (main navigation bar). +"mainview.tab.homeTimeline" = "Hasiera"; +"mainview.tab.localTimeline" = "Lokala"; +"mainview.tab.federatedTimeline" = "Federatua"; +"mainview.tab.trendingPhotos" = "Argazkiak"; +"mainview.tab.trendingTags" = "Traolak"; +"mainview.tab.trendingAccounts" = "Kontuak"; +"mainview.tab.userProfile" = "Profila"; +"mainview.tab.notifications" = "Jakinarazpenak"; +"mainview.tab.search" = "Bilatu"; +"mainview.tab.trending" = "Bogan"; + +// MARK: Main view (leading navigation bar). +"mainview.menu.settings" = "Ezarpenak"; + +// MARK: Main view (error notifications). +"mainview.error.switchAccounts" = "Ezin da kontuak aldatu."; + +// MARK: Home timeline. +"home.title.allCaughtUp" = "Egunean zaude"; +"home.title.noPhotos" = "Zoritxarrez, hemen ez dago argazkirik."; + +// MARK: Statuses timeline (local/federated/favourite/bookmarks etc.). +"statuses.navigationBar.localTimeline" = "Lokala"; +"statuses.navigationBar.federatedTimeline" = "Federatua"; +"statuses.navigationBar.favourites" = "Gogokoak"; +"statuses.navigationBar.bookmarks" = "Laster-markak"; +"statuses.title.noPhotos" = "Zoritxarrez, hemen ez dago argazkirik."; +"statuses.title.tagFollowed" = "Traolari jarraitzen diozu."; +"statuses.title.tagUnfollowed" = "Traola jarraitzeari utzi diozu."; +"statuses.error.loadingStatusesFailed" = "Egoerak kargatzeak huts egin du."; +"statuses.error.tagFollowFailed" = "Traolari jarraitzeak huts egin du."; +"statuses.error.tagUnfollowFailed" = "Traolari jarraitzeari uzteak huts egin du."; + +// Mark: Search view. +"search.navigationBar.title" = "Bilatu"; +"search.title.placeholder" = "Bilatu..."; +"search.title.usersWith" = "%@ duten erabiltzaileak"; +"search.title.goToUser" = "Joan %@ erabiltzailera"; +"search.title.hashtagWith" = "%@ duten traolak"; +"search.title.goToHashtag" = "Joan %@ traolara"; + +// Mark: Trending statuses. +"trendingStatuses.navigationBar.title" = "Argazkiak"; +"trendingStatuses.title.daily" = "Egunekoak"; +"trendingStatuses.title.monthly" = "Hilabetekoak"; +"trendingStatuses.title.yearly" = "Urtekoak"; +"trendingStatuses.error.loadingStatusesFailed" = "Egoerak kargatzeak huts egin du."; +"trendingStatuses.title.noPhotos" = "Zoritxarrez, hemen ez dago argazkirik."; + +// Mark: Trending tags. +"trendingTags.navigationBar.title" = "Traolak"; +"trendingTags.title.noTags" = "Zoritxarrez, hemen ez dago traolarik."; +"trendingTags.title.amountOfPosts" = "%d bidalketa"; +"trendingTags.error.loadingTagsFailed" = "Traolak kargatzeak huts egin du."; + +// Mark: Trending accounts. +"trendingAccounts.navigationBar.title" = "Kontuak"; +"trendingAccounts.title.noAccounts" = "Zoritxarrez, hemen ez dago inor."; +"trendingAccounts.error.loadingAccountsFailed" = "Kontuak kargatzeak huts egin du."; + +// Mark: User profile view. +"userProfile.title.openInBrowser" = "Ireki nabigatzailean"; +"userProfile.title.share" = "Partekatu"; +"userProfile.title.unmute" = "Utzi mututzeari"; +"userProfile.title.mute" = "Mututu"; +"userProfile.title.unblock" = "Utzi blokeatzeari"; +"userProfile.title.block" = "Blokeatu"; +"userProfile.title.favourites" = "Gogokoak"; +"userProfile.title.bookmarks" = "Laster-markak"; +"userProfile.title.posts" = "Bidalketak"; +"userProfile.title.followers" = "Jarraitzaileak"; +"userProfile.title.following" = "Jarraitzen"; +"userProfile.title.joined" = "%@-ra batu da"; +"userProfile.title.unfollow" = "Utzi jarraitzeari"; +"userProfile.title.followBack" = "Jarraitu bera ere"; +"userProfile.title.follow" = "Jarraitu"; +"userProfile.title.instance" = "Instantziari buruzko informazioa"; +"userProfile.title.blocks" = "Blokeatutako kontuak"; +"userProfile.title.mutes" = "Mutututako kontuak"; +"userProfile.title.muted" = "Mutututako kontua"; +"userProfile.title.unmuted" = "Mututzeari utzitako kontua"; +"userProfile.title.blocked" = "Blokeatutako kontua"; +"userProfile.title.unblocked" = "Blokeatzeari utzitako kontua"; +"userProfile.title.report" = "Salatu"; +"userProfile.error.notExists" = "Kontua ez da existitzen."; +"userProfile.error.loadingAccountFailed" = "Errorea zerbitzaritik kontua eskuratzean."; +"userProfile.error.muting" = "Mututu/Mututzeari uzteak huts egin du."; +"userProfile.error.block" = "Blokeatu/Blokeatzeari uzteak huts egin du."; +"userProfile.error.relationship" = "Relationship action failed."; +"userProfile.title.edit" = "Editatu"; + +// Mark: Notifications view. +"notifications.navigationBar.title" = "Jakinarazpenak"; +"notifications.title.noNotifications" = "Zoritxarrez, hemen ez dago ezer."; +"notifications.title.followedYou" = "(e)k jarraitu dizu"; +"notifications.title.mentionedYou" = "(e)k aipatu zaitu"; +"notifications.title.boosted" = "(e)k bultzatu du"; +"notifications.title.favourited" = "(e)k gogoko du"; +"notifications.title.postedStatus" = "(e)k argitaratu du"; +"notifications.title.followRequest" = "follow request"; +"notifications.title.poll" = "bozketa"; +"notifications.title.updatedStatus" = "(e)k egoera eguneratu du"; +"notifications.title.signedUp" = "(e)k izena eman du"; +"notifications.title.newReport" = "txosten berria"; +"notifications.error.loadingNotificationsFailed" = "Jakinarazpenak kargatzeak huts egin du."; + +// Mark: Compose view. +"compose.navigationBar.title" = "Idatzi"; +"compose.title.everyone" = "Edonork"; +"compose.title.unlisted" = "Zerrendatu gabe"; +"compose.title.followers" = "Jarraitzaileak"; +"compose.title.attachPhotoFull" = "Erantsi argazkia eta idatzi buruan duzuna"; +"compose.title.attachPhotoMini" = "Idatzi buruan duzuna"; +"compose.title.publish" = "Argitaratu"; +"compose.title.cancel" = "Utzi"; +"compose.title.writeContentWarning" = "Idatzi edukiari buruzko oharra"; +"compose.title.commentsWillBeDisabled" = "Iruzkinak ezgaituko dira"; +"compose.title.statusPublished" = "Egoera argitaratu da"; +"compose.title.tryToUpload" = "Saiatu igotzen"; +"compose.title.delete" = "Ezabatu"; +"compose.title.edit" = "Editatu"; +"compose.error.loadingPhotosFailed" = "Ezin da liburutegiko irudia eskuratu."; +"compose.error.postingPhotoFailed" = "Errorea argazkia argitaratzean."; +"compose.error.postingStatusFailed" = "Errorea egoera argitaratzean."; + +// Mark: Photo editor view. +"photoEdit.navigationBar.title" = "Argazkiaren xehetasunak"; +"photoEdit.title.photo" = "Argazkia"; +"photoEdit.title.accessibility" = "Irisgarritasuna"; +"photoEdit.title.accessibilityDescription" = "Ikusmen arazoak dituztenentzat deskribapena"; +"photoEdit.title.save" = "Gorde"; +"photoEdit.title.cancel" = "Utzi"; +"photoEdit.error.updatePhotoFailed" = "Errorea argazkia eguneratzean."; + +// Mark: Place selector view. +"placeSelector.navigationBar.title" = "Tokiak"; +"placeSelector.title.search" = "Bilatu..."; +"placeSelector.title.buttonSearch" = "Bilatu"; +"placeSelector.title.cancel" = "Utzi"; +"placeSelector.error.loadingPlacesFailed" = "Jakinarazpenak kargatzeak huts egin du."; + +// Mark: Settings view. +"settings.navigationBar.title" = "Ezarpenak"; +"settings.title.close" = "Itxi"; +"settings.title.version" = "Bertsioa"; +"settings.title.accounts" = "Kontuak"; +"settings.title.newAccount" = "Kontu berria"; +"settings.title.accent" = "Kolorea"; +"settings.title.theme" = "Gaia"; +"settings.title.system" = "Sistemak darabilena"; +"settings.title.light" = "Argia"; +"settings.title.dark" = "Iluna"; +"settings.title.avatar" = "Abatarra"; +"settings.title.circle" = "Biribila"; +"settings.title.rounderRectangle" = "Biribildutako ertzak"; +"settings.title.other" = "Bestea"; +"settings.title.thirdParty" = "Hirugarrenak"; +"settings.title.reportBug" = "Eman errore baten berri"; +"settings.title.githubIssues" = "Erroreak Github-en"; +"settings.title.follow" = "Jarrai nazazu"; +"settings.title.support" = "Babestu"; +"settings.title.thankYouTitle" = "Eskerrik asko 💕"; +"settings.title.thankYouMessage" = "Mila esker erosketagatik. Erosketa handi eta txikiek gure bezeroei kalitatezko produkturik onenak eskaintzeko ametsari eusten laguntzen digute. Espero dugu Vernissage gustuko izatea."; +"settings.title.thankYouClose" = "Itxi"; +"settings.title.haptics" = "Haptikoak"; +"settings.title.hapticsTabSelection" = "Fitxak hautatzean"; +"settings.title.hapticsButtonPress" = "Botoietan tap egitean"; +"settings.title.hapticsListRefresh" = "Zerrendak freskatzean"; +"settings.title.hapticsAnimationFinished" = "Animazioak amaitzean"; +"settings.title.mediaSettings" = "Multimedia ezarpenak"; +"settings.title.alwaysShowSensitiveTitle" = "Erakutsi beti NSFW (Lanerako Egokia Izan Ez Daitekeen Edukia)"; +"settings.title.alwaysShowSensitiveDescription" = "Erakutsi NSFW multimedia (hunkigarria) ohartarazpenik gabe"; +"settings.title.alwaysShowAltTitle" = "Erakutsi testu alternatiboa"; +"settings.title.alwaysShowAltDescription" = "Erakutsi testu alternatiboa baldin badago egoeraren xehetasunen pantailan"; +"settings.title.general" = "Orokorra"; +"settings.title.applicationIcon" = "Aplikazioaren ikonoa"; +"settings.title.followVernissage" = "Jarraitu Vernissage-ri"; +"settings.title.mastodonAccount" = "Mastodon kontua"; +"settings.title.pixelfedAccount" = "Pixelfed kontua"; +"settings.title.openPage" = "Ireki"; +"settings.title.privacyPolicy" = "Pribatutasun politika"; +"settings.title.terms" = "Erabilera baldintzak"; +"settings.title.sourceCode" = "Iturburu kodea"; + +// Mark: Signin view. +"signin.navigationBar.title" = "Hasi saioa Pixelfed-en"; +"signin.title.serverAddress" = "Zerbitzariaren helbidea"; +"signin.title.signIn" = "Hasi saioa"; +"signin.title.enterServerAddress" = "Sartu zerbitzariaren helbidea"; +"signin.title.howToJoinLink" = "Nola batu Pixelfed-era"; +"signin.title.chooseServer" = "Edo aukeratu Pixelfez zerbitzaria"; +"signin.title.amountOfUsers" = "%d erabiltzaile"; +"signin.title.amountOStatuses" = "%d egoera"; +"signin.error.communicationFailed" = "Zerbitzariarekin komunikazioak huts egin du."; + +// Mark: Status view. +"status.navigationBar.title" = "Xehetasunak"; +"status.title.uploaded" = ""; +"status.title.via" = "%@ bidez"; +"status.title.reboostedBy" = "Hauek bultzatu dute"; +"status.title.favouritedBy" = "Hauek egin dute gogoko"; +"status.title.openInBrowser" = "Ireki nabigatzailean"; +"status.title.shareStatus" = "Partekatu egoera"; +"status.title.yourStatus" = "Zure egoera"; +"status.title.delete" = "Ezabatu"; +"status.title.reboosted" = "Bultzatua"; +"status.title.unreboosted" = "Bultzada kendua"; +"status.title.favourited" = "Gogoko egina"; +"status.title.unfavourited" = "Gogoko egiteari utzia"; +"status.title.bookmarked" = "Laster-marka jarria"; +"status.title.unbookmarked" = "Laster-marka kendua"; +"status.title.statusDeleted" = "Egoera ezabatua"; +"status.title.reboost" = "Bultzatu"; +"status.title.unreboost" = "Kendu bultzada"; +"status.title.favourite" = "Egin gogoko"; +"status.title.unfavourite" = "Kendu gogokoa"; +"status.title.bookmark" = "Jarri laster-marka"; +"status.title.unbookmark" = "Kendu laster-marka"; +"status.title.comment" = "Egin iruzkina"; +"status.title.report" = "Salatu"; +"status.error.loadingStatusFailed" = "Egoera kargatzeak huts egin du."; +"status.error.notFound" = "Egoera ez da dagoeneko existitzen."; +"status.error.loadingCommentsFailed" = "Ezin dira iruzkinak eskuratu."; +"status.error.reboostFailed" = "Bultzadak huts egin du."; +"status.error.favouriteFailed" = "Gogokoak huts egin du."; +"status.error.bookmarkFailed" = "Lastar-markak huts egin du."; +"status.error.deleteFailed" = "Ezabatzeak huts egin du."; + +// Mark: Accounts view. +"accounts.navigationBar.followers" = "Jarraitzaile"; +"accounts.navigationBar.following" = "Jarraitzen"; +"accounts.navigationBar.favouritedBy" = "Honek gogoko egina"; +"accounts.navigationBar.reboostedBy" = "Honek bultzatua"; +"accounts.navigationBar.blocked" = "Blokeatutako kontuak"; +"accounts.navigationBar.mutes" = "Mutututako kontuak"; +"accounts.title.noAccounts" = "Zoritxarrez, hemen ez dago inor."; +"accounts.error.loadingAccountsFailed" = "Kontuak kargatzeak huts egin du."; + +// Mark: Third party view. +"thirdParty.navigationBar.title" = "Hirugarrenak"; + +// Mark: Widget view. +"widget.title.description" = "Widgeta Pixelfed-eko argazkiekin."; + +// Mark: In-app purchases. +"purchase.donut.title" = "Opila"; +"purchase.donut.description" = "Eros diezadazu opil bat."; +"purchase.cofee.title" = "Kafea"; +"purchase.cofee.description" = "Gonbida nazazu kafe bat hartzera."; +"purchase.cake.title" = "Kafea eta tarta"; +"purchase.cake.description" = "Kafea eta tarta erosiko?"; + +// Mark: Edit profile. +"editProfile.navigationBar.title" = "Editatu profila"; +"editProfile.title.displayName" = "Pantaila izena"; +"editProfile.title.bio" = "Biografia"; +"editProfile.title.website" = "Webgunea"; +"editProfile.title.save" = "Gorde"; +"editProfile.title.accountSaved" = "Profila eguneratu da."; +"editProfile.title.photoInfo" = "Aldatutako argazkia atzerapen txiki batekin ikusiko da aplikazioan eta web gunean."; +"editProfile.title.privateAccount" = "Babestutako kontua"; +"editProfile.title.privateAccountInfo" = "Zure kontua babestuta dagoenean baimendutako pertsonek bakarrik ikus ditzakete zure argazkiak eta bideoak Pixelfed-en. Ez du eraginik izango dagoeneko jarraitzen dizutenengan."; +"editProfile.error.saveAccountFailed" = "Profila gordetzeak huts egin du."; +"editProfile.error.loadingAvatarFailed" = "Abatarra kargatzeak huts egin du."; +"editProfile.error.noProfileData" = "Ezin dira profileko datuak erakutsi."; +"editProfile.error.loadingAccountFailed" = "Errorea zerbitzaritik kontua eskuratzean."; + +// Mark: Instance information. +"instance.navigationBar.title" = "Instantzia"; +"instance.title.instanceInfo" = "Instantziari buruzko informazioa"; +"instance.title.name" = "Izena"; +"instance.title.address" = "Helbidea"; +"instance.title.email" = "ePosta"; +"instance.title.version" = "Bertsioa"; +"instance.title.users" = "Erabiltzaileak"; +"instance.title.posts" = "Bidalketak"; +"instance.title.domains" = "Domeinuak"; +"instance.title.registrations" = "Izen emateak"; +"instance.title.approvalRequired" = "Onespena behar da"; +"instance.title.rules" = "Instantziaren arauak"; +"instance.title.contact" = "Harremana"; +"instance.title.pixelfedAccount" = "Pixelfed kontua"; +"instance.error.noInstanceData" = "Ezin dira instantziaren datuak erakutsi."; +"instance.error.loadingDataFailed" = "Errorea zerbitzaritik instantziaren datuak eskuratzean."; + +// Mark: Report screen. +"report.navigationBar.title" = "Salatu"; +"report.title.close" = "Itxi"; +"report.title.send" = "Bidali"; +"report.title.userReported" = "Erabiltzailea salatu da"; +"report.title.postReported" = "Bidalketa salatu da"; +"report.title.reportType" = "Urraketa mota"; +"report.title.spam" = "Spama da"; +"report.title.sensitive" = "Biluzia edo sexu-ekintza"; +"report.title.abusive" = "Gorroto sustatzen duten hitzaldiak edo ikurrak"; +"report.title.underage" = "Adingabea"; +"report.title.violence" = "Bortizkeria edo erakunde arriskutsua"; +"report.title.copyright" = "Egile-eskubideen urraketa"; +"report.title.impersonation" = "Imitatzailea"; +"report.title.scam" = "Bullyinga edo jazarpena"; +"report.title.terrorism" = "Terrorismoa"; +"report.error.notReported" = "Errorea salaketa bidaltzerakoan."; From 76dbcfe4d9dd177d2c7181cb9ac13276a0ea0d6c Mon Sep 17 00:00:00 2001 From: Marcin Czachursk Date: Wed, 5 Apr 2023 16:18:58 +0200 Subject: [PATCH 03/17] Add rate vernissage link to settings --- Localization/en.lproj/Localizable.strings | 2 + Localization/pl.lproj/Localizable.strings | 2 + Vernissage.xcodeproj/project.pbxproj | 4 + .../Views/SettingsView/SettingsView.swift | 3 + .../Subviews/OtherSectionView.swift | 74 ++++--------------- .../Subviews/SocialsSectionView.swift | 52 +++++++++++++ 6 files changed, 79 insertions(+), 58 deletions(-) create mode 100644 Vernissage/Views/SettingsView/Subviews/SocialsSectionView.swift diff --git a/Localization/en.lproj/Localizable.strings b/Localization/en.lproj/Localizable.strings index 6d85571..27a22a8 100644 --- a/Localization/en.lproj/Localizable.strings +++ b/Localization/en.lproj/Localizable.strings @@ -202,6 +202,8 @@ "settings.title.privacyPolicy" = "Privacy policy"; "settings.title.terms" = "Terms & Conditions"; "settings.title.sourceCode" = "Source code"; +"settings.title.rate" = "Rate Vernissage"; +"settings.title.socials" = "Socials"; // Mark: Signin view. "signin.navigationBar.title" = "Sign in to Pixelfed"; diff --git a/Localization/pl.lproj/Localizable.strings b/Localization/pl.lproj/Localizable.strings index d46e3c9..ba94581 100644 --- a/Localization/pl.lproj/Localizable.strings +++ b/Localization/pl.lproj/Localizable.strings @@ -202,6 +202,8 @@ "settings.title.privacyPolicy" = "Polityka prywatności"; "settings.title.terms" = "Zasady i warunki"; "settings.title.sourceCode" = "Kod źródłowy"; +"settings.title.rate" = "Oceń Vernissage"; +"settings.title.socials" = "Społeczności"; // Mark: Signin view. "signin.navigationBar.title" = "Zaloguj się do Pixelfed"; diff --git a/Vernissage.xcodeproj/project.pbxproj b/Vernissage.xcodeproj/project.pbxproj index 01a9394..f92d3cf 100644 --- a/Vernissage.xcodeproj/project.pbxproj +++ b/Vernissage.xcodeproj/project.pbxproj @@ -207,6 +207,7 @@ F8CEEDFA29ABAFD200DBED66 /* ImageFileTranseferable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8CEEDF929ABAFD200DBED66 /* ImageFileTranseferable.swift */; }; F8D5444329D4066C002225D6 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8D5444229D4066C002225D6 /* AppDelegate.swift */; }; F8DF38E429DD68820047F1AA /* ViewOffsetKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8DF38E329DD68820047F1AA /* ViewOffsetKey.swift */; }; + F8DF38E629DDB98A0047F1AA /* SocialsSectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8DF38E529DDB98A0047F1AA /* SocialsSectionView.swift */; }; F8E6D03329CDD52500416CCA /* EditProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8E6D03229CDD52500416CCA /* EditProfileView.swift */; }; F8E6D03529CE161B00416CCA /* UIImage+Jpeg.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8E6D03429CE161B00416CCA /* UIImage+Jpeg.swift */; }; F8E9391F29C0BCFA002BB3B8 /* ImageContextMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8E9391E29C0BCFA002BB3B8 /* ImageContextMenu.swift */; }; @@ -434,6 +435,7 @@ F8CEEDF929ABAFD200DBED66 /* ImageFileTranseferable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageFileTranseferable.swift; sourceTree = ""; }; F8D5444229D4066C002225D6 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; F8DF38E329DD68820047F1AA /* ViewOffsetKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewOffsetKey.swift; sourceTree = ""; }; + F8DF38E529DDB98A0047F1AA /* SocialsSectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SocialsSectionView.swift; sourceTree = ""; }; F8E6D03229CDD52500416CCA /* EditProfileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditProfileView.swift; sourceTree = ""; }; F8E6D03429CE161B00416CCA /* UIImage+Jpeg.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+Jpeg.swift"; sourceTree = ""; }; F8E9391E29C0BCFA002BB3B8 /* ImageContextMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageContextMenu.swift; sourceTree = ""; }; @@ -713,6 +715,7 @@ F86A4306299AA5E900DF7645 /* ThanksView.swift */, F8B05ACA29B489B100857221 /* HapticsSectionView.swift */, F8B05ACD29B48E2F00857221 /* MediaSettingsView.swift */, + F8DF38E529DDB98A0047F1AA /* SocialsSectionView.swift */, ); path = Subviews; sourceTree = ""; @@ -1306,6 +1309,7 @@ F8FA9920299FDDC3007AB130 /* TextInputField.swift in Sources */, F86A4303299A9AF500DF7645 /* TipsStore.swift in Sources */, F8C5E56229892CC300ADF6A7 /* FirstAppear.swift in Sources */, + F8DF38E629DDB98A0047F1AA /* SocialsSectionView.swift in Sources */, F864F7A529BBA01D00B13921 /* CoreDataError.swift in Sources */, F8864CEB29ACBAA80020C534 /* TextModel.swift in Sources */, F8C14394296AF21B001FE31D /* Double+Round.swift in Sources */, diff --git a/Vernissage/Views/SettingsView/SettingsView.swift b/Vernissage/Views/SettingsView/SettingsView.swift index 673597a..bf251fb 100644 --- a/Vernissage/Views/SettingsView/SettingsView.swift +++ b/Vernissage/Views/SettingsView/SettingsView.swift @@ -46,6 +46,9 @@ struct SettingsView: View { // Other. OtherSectionView() + // Socials. + SocialsSectionView() + // Version. self.version() } diff --git a/Vernissage/Views/SettingsView/Subviews/OtherSectionView.swift b/Vernissage/Views/SettingsView/Subviews/OtherSectionView.swift index 4010976..1d53f79 100644 --- a/Vernissage/Views/SettingsView/Subviews/OtherSectionView.swift +++ b/Vernissage/Views/SettingsView/Subviews/OtherSectionView.swift @@ -10,75 +10,33 @@ struct OtherSectionView: View { var body: some View { Section("settings.title.other") { NavigationLink(value: RouteurDestinations.thirdParty) { - Text("settings.title.thirdParty", comment: "Third party") + Label("settings.title.thirdParty", systemImage: "shippingbox") } - HStack { - Text("settings.title.privacyPolicy", comment: "Privacy policy") - Spacer() - Link(NSLocalizedString("settings.title.openPage", comment: "Open"), destination: URL(string: "https://mczachurski.dev/vernissage/privacy-policy.html")!) - .font(.footnote) + Link(destination: URL(string: "https://mczachurski.dev/vernissage/privacy-policy.html")!) { + Label("settings.title.privacyPolicy", systemImage: "hand.raised.square") } + .tint(.mainTextColor) - HStack { - Text("settings.title.terms", comment: "Terms & Conditions") - Spacer() - Link(NSLocalizedString("settings.title.openPage", comment: "Open"), destination: URL(string: "https://mczachurski.dev/vernissage/terms.html")!) - .font(.footnote) + Link(destination: URL(string: "https://mczachurski.dev/vernissage/terms.html")!) { + Label("settings.title.terms", systemImage: "doc.text") } + .tint(.mainTextColor) - HStack { - Text("settings.title.sourceCode", comment: "Source code") - Spacer() - Link(NSLocalizedString("settings.title.openPage", comment: "Open"), destination: URL(string: "https://github.com/VernissageApp/Vernissage")!) - .font(.footnote) + Link(destination: URL(string: "https://apps.apple.com/app/id1663543216?action=write-review")!) { + Label("settings.title.rate", systemImage: "star") } + .tint(.mainTextColor) - HStack { - Text("settings.title.reportBug", comment: "Report a bug") - Spacer() - Link(NSLocalizedString("settings.title.githubIssues", comment: "Issues on GitHub"), destination: URL(string: "https://github.com/VernissageApp/Home/issues")!) - .font(.footnote) + Link(destination: URL(string: "https://github.com/VernissageApp/Vernissage")!) { + Label("settings.title.sourceCode", systemImage: "swift") } + .tint(.mainTextColor) - HStack { - VStack(alignment: .leading) { - Text("settings.title.followVernissage", comment: "Follow Vernissage") - Text("Mastodon account") - .font(.footnote) - .foregroundColor(.lightGrayColor) - } - - Spacer() - Link("@vernissage", destination: URL(string: "https://mastodon.social/@vernissage")!) - .font(.footnote) - } - - HStack { - VStack(alignment: .leading) { - Text("settings.title.follow", comment: "Follow me") - Text("settings.title.mastodonAccount", comment: "Mastodon account") - .font(.footnote) - .foregroundColor(.lightGrayColor) - } - - Spacer() - Link("@mczachurski", destination: URL(string: "https://mastodon.social/@mczachurski")!) - .font(.footnote) - } - - HStack { - VStack(alignment: .leading) { - Text("settings.title.follow", comment: "Follow me") - Text("settings.title.pixelfedAccount", comment: "Pixelfed account") - .font(.footnote) - .foregroundColor(.lightGrayColor) - } - - Spacer() - Link("@mczachurski", destination: URL(string: "https://pixelfed.social/@mczachurski")!) - .font(.footnote) + Link(destination: URL(string: "https://github.com/VernissageApp/Vernissage/issues")!) { + Label("settings.title.reportBug", systemImage: "ant") } + .tint(.mainTextColor) } } } diff --git a/Vernissage/Views/SettingsView/Subviews/SocialsSectionView.swift b/Vernissage/Views/SettingsView/Subviews/SocialsSectionView.swift new file mode 100644 index 0000000..03c9d8b --- /dev/null +++ b/Vernissage/Views/SettingsView/Subviews/SocialsSectionView.swift @@ -0,0 +1,52 @@ +// +// https://mczachurski.dev +// Copyright © 2023 Marcin Czachurski and the repository contributors. +// Licensed under the Apache License 2.0. +// + +import SwiftUI + +struct SocialsSectionView: View { + var body: some View { + Section("settings.title.socials") { + HStack { + VStack(alignment: .leading) { + Text("settings.title.followVernissage", comment: "Follow Vernissage") + Text("settings.title.mastodonAccount", comment: "Mastodon account") + .font(.footnote) + .foregroundColor(.lightGrayColor) + } + + Spacer() + Link("@vernissage", destination: URL(string: "https://mastodon.social/@vernissage")!) + .font(.footnote) + } + + HStack { + VStack(alignment: .leading) { + Text("settings.title.follow", comment: "Follow me") + Text("settings.title.mastodonAccount", comment: "Mastodon account") + .font(.footnote) + .foregroundColor(.lightGrayColor) + } + + Spacer() + Link("@mczachurski", destination: URL(string: "https://mastodon.social/@mczachurski")!) + .font(.footnote) + } + + HStack { + VStack(alignment: .leading) { + Text("settings.title.follow", comment: "Follow me") + Text("settings.title.pixelfedAccount", comment: "Pixelfed account") + .font(.footnote) + .foregroundColor(.lightGrayColor) + } + + Spacer() + Link("@mczachurski", destination: URL(string: "https://pixelfed.social/@mczachurski")!) + .font(.footnote) + } + } + } +} From 9f1a0e68bd85c652cf49efb3a5787688afacb140 Mon Sep 17 00:00:00 2001 From: Marcin Czachursk Date: Wed, 5 Apr 2023 16:30:13 +0200 Subject: [PATCH 04/17] #9 Fix typos --- Localization/en.lproj/Localizable.strings | 10 +++++----- Localization/pl.lproj/Localizable.strings | 4 ++-- Vernissage/InAppPurchaseStoreKitConfiguration.storekit | 10 +++++----- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Localization/en.lproj/Localizable.strings b/Localization/en.lproj/Localizable.strings index 27a22a8..af4a9ee 100644 --- a/Localization/en.lproj/Localizable.strings +++ b/Localization/en.lproj/Localizable.strings @@ -268,10 +268,10 @@ // Mark: In-app purchases. "purchase.donut.title" = "Donut"; "purchase.donut.description" = "Treat me to a doughnut."; -"purchase.cofee.title" = "Cofee"; -"purchase.cofee.description" = "Treat me to a coffe."; -"purchase.cake.title" = "Cofee & cake"; -"purchase.cake.description" = "Treat me to a coffe and cake."; +"purchase.coffee.title" = "Coffee"; +"purchase.coffee.description" = "Treat me to a coffee."; +"purchase.cake.title" = "Coffee & cake"; +"purchase.cake.description" = "Treat me to a coffee and cake."; // Mark: Edit profile. "editProfile.navigationBar.title" = "Edit profile"; @@ -320,6 +320,6 @@ "report.title.violence" = "Violence or dangerous organisations"; "report.title.copyright" = "Copyright infringement"; "report.title.impersonation" = "Impersonation"; -"report.title.scam" = "Bullying of harassment"; +"report.title.scam" = "Bullying or harassment"; "report.title.terrorism" = "Terrorism"; "report.error.notReported" = "Error during sending report."; diff --git a/Localization/pl.lproj/Localizable.strings b/Localization/pl.lproj/Localizable.strings index ba94581..1439855 100644 --- a/Localization/pl.lproj/Localizable.strings +++ b/Localization/pl.lproj/Localizable.strings @@ -268,8 +268,8 @@ // Mark: In-app purchases. "purchase.donut.title" = "Pączek"; "purchase.donut.description" = "Poczęstuj mnie pączkiem."; -"purchase.cofee.title" = "Kawa"; -"purchase.cofee.description" = "Poczęstuj mnie kawą."; +"purchase.coffee.title" = "Kawa"; +"purchase.coffee.description" = "Poczęstuj mnie kawą."; "purchase.cake.title" = "Kawa z ciastkiem"; "purchase.cake.description" = "Poczęstuj mnie kawą i ciastkiem."; diff --git a/Vernissage/InAppPurchaseStoreKitConfiguration.storekit b/Vernissage/InAppPurchaseStoreKitConfiguration.storekit index 3ecc7a3..a3e03f1 100644 --- a/Vernissage/InAppPurchaseStoreKitConfiguration.storekit +++ b/Vernissage/InAppPurchaseStoreKitConfiguration.storekit @@ -30,8 +30,8 @@ "internalID" : "AD04459F", "localizations" : [ { - "description" : "Treat me to a coffe.", - "displayName" : "Cofee", + "description" : "Treat me to a coffee.", + "displayName" : "Coffee", "locale" : "en_US" }, { @@ -41,7 +41,7 @@ } ], "productID" : "dev.mczachurski.Vernissage.cofee", - "referenceName" : "Cofee", + "referenceName" : "Coffee", "type" : "Consumable" }, { @@ -50,8 +50,8 @@ "internalID" : "16E4E30C", "localizations" : [ { - "description" : "Treat me to a coffe and cake.", - "displayName" : "Cofee & cake", + "description" : "Treat me to a coffee and cake.", + "displayName" : "Coffee & cake", "locale" : "en_US" }, { From 042cfd7284ec3ad6cf3d8fc05d3495c5dd934567 Mon Sep 17 00:00:00 2001 From: Marcin Czachursk Date: Wed, 5 Apr 2023 16:31:42 +0200 Subject: [PATCH 05/17] Change version to 1.0.1 (94) --- Vernissage.xcodeproj/project.pbxproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Vernissage.xcodeproj/project.pbxproj b/Vernissage.xcodeproj/project.pbxproj index f92d3cf..ab1bd0d 100644 --- a/Vernissage.xcodeproj/project.pbxproj +++ b/Vernissage.xcodeproj/project.pbxproj @@ -1358,7 +1358,7 @@ CODE_SIGN_ENTITLEMENTS = VernissageWidget/VernissageWidgetExtension.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 93; + CURRENT_PROJECT_VERSION = 94; DEVELOPMENT_TEAM = B2U9FEKYP8; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = VernissageWidget/Info.plist; @@ -1386,7 +1386,7 @@ ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; CODE_SIGN_ENTITLEMENTS = VernissageWidget/VernissageWidgetExtension.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 93; + CURRENT_PROJECT_VERSION = 94; DEVELOPMENT_TEAM = B2U9FEKYP8; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = VernissageWidget/Info.plist; @@ -1534,7 +1534,7 @@ CODE_SIGN_ENTITLEMENTS = Vernissage/Vernissage.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 93; + CURRENT_PROJECT_VERSION = 94; DEVELOPMENT_ASSET_PATHS = "\"Vernissage/Preview Content\""; DEVELOPMENT_TEAM = B2U9FEKYP8; ENABLE_PREVIEWS = YES; @@ -1574,7 +1574,7 @@ ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CODE_SIGN_ENTITLEMENTS = Vernissage/Vernissage.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 93; + CURRENT_PROJECT_VERSION = 94; DEVELOPMENT_ASSET_PATHS = "\"Vernissage/Preview Content\""; DEVELOPMENT_TEAM = B2U9FEKYP8; ENABLE_PREVIEWS = YES; From e2b7a78306b8c33188adb1f71f1264fed34d2d57 Mon Sep 17 00:00:00 2001 From: Xabi Date: Wed, 5 Apr 2023 16:49:32 +0200 Subject: [PATCH 06/17] Create EU file --- .../Sources/PixelfedKit/Resources/eu.lproj/Localizable.strings | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 PixelfedKit/Sources/PixelfedKit/Resources/eu.lproj/Localizable.strings diff --git a/PixelfedKit/Sources/PixelfedKit/Resources/eu.lproj/Localizable.strings b/PixelfedKit/Sources/PixelfedKit/Resources/eu.lproj/Localizable.strings new file mode 100644 index 0000000..3de0a44 --- /dev/null +++ b/PixelfedKit/Sources/PixelfedKit/Resources/eu.lproj/Localizable.strings @@ -0,0 +1,3 @@ +// MARK: Network errors. +"global.error.notSuccessResponse" = "Zerbitzariaren erantzuna: %@."; +"global.error.unknownError" = "Espero ez zen errorea."; From 25d49989202a4a66cb00bd1e16dda01aca1d6daa Mon Sep 17 00:00:00 2001 From: Marcin Czachursk Date: Wed, 5 Apr 2023 17:04:19 +0200 Subject: [PATCH 07/17] Add Basque localisation to project file --- Localization/eu.lproj/Localizable.strings | 2 ++ Vernissage.xcodeproj/project.pbxproj | 3 +++ 2 files changed, 5 insertions(+) diff --git a/Localization/eu.lproj/Localizable.strings b/Localization/eu.lproj/Localizable.strings index 416689f..039f948 100644 --- a/Localization/eu.lproj/Localizable.strings +++ b/Localization/eu.lproj/Localizable.strings @@ -202,6 +202,8 @@ "settings.title.privacyPolicy" = "Pribatutasun politika"; "settings.title.terms" = "Erabilera baldintzak"; "settings.title.sourceCode" = "Iturburu kodea"; +"settings.title.rate" = "Rate Vernissage"; +"settings.title.socials" = "Socials"; // Mark: Signin view. "signin.navigationBar.title" = "Hasi saioa Pixelfed-en"; diff --git a/Vernissage.xcodeproj/project.pbxproj b/Vernissage.xcodeproj/project.pbxproj index ab1bd0d..81643b9 100644 --- a/Vernissage.xcodeproj/project.pbxproj +++ b/Vernissage.xcodeproj/project.pbxproj @@ -436,6 +436,7 @@ F8D5444229D4066C002225D6 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; F8DF38E329DD68820047F1AA /* ViewOffsetKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewOffsetKey.swift; sourceTree = ""; }; F8DF38E529DDB98A0047F1AA /* SocialsSectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SocialsSectionView.swift; sourceTree = ""; }; + F8DF38E729DDC3D20047F1AA /* eu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = eu; path = eu.lproj/Localizable.strings; sourceTree = ""; }; F8E6D03229CDD52500416CCA /* EditProfileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditProfileView.swift; sourceTree = ""; }; F8E6D03429CE161B00416CCA /* UIImage+Jpeg.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+Jpeg.swift"; sourceTree = ""; }; F8E9391E29C0BCFA002BB3B8 /* ImageContextMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageContextMenu.swift; sourceTree = ""; }; @@ -1053,6 +1054,7 @@ en, Base, pl, + eu, ); mainGroup = F88C245F295C37B80006098B; packageReferences = ( @@ -1343,6 +1345,7 @@ children = ( F835082529BEF9C400DE3247 /* en */, F835082729BEFA1E00DE3247 /* pl */, + F8DF38E729DDC3D20047F1AA /* eu */, ); name = Localizable.strings; sourceTree = ""; From 8b82f0bdeb5084e65727f14968da741f09c8be83 Mon Sep 17 00:00:00 2001 From: Marcin Czachursk Date: Wed, 5 Apr 2023 17:07:40 +0200 Subject: [PATCH 08/17] Fix typo in localisation key --- Localization/eu.lproj/Localizable.strings | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Localization/eu.lproj/Localizable.strings b/Localization/eu.lproj/Localizable.strings index 039f948..d61663a 100644 --- a/Localization/eu.lproj/Localizable.strings +++ b/Localization/eu.lproj/Localizable.strings @@ -268,8 +268,8 @@ // Mark: In-app purchases. "purchase.donut.title" = "Opila"; "purchase.donut.description" = "Eros diezadazu opil bat."; -"purchase.cofee.title" = "Kafea"; -"purchase.cofee.description" = "Gonbida nazazu kafe bat hartzera."; +"purchase.coffee.title" = "Kafea"; +"purchase.coffee.description" = "Gonbida nazazu kafe bat hartzera."; "purchase.cake.title" = "Kafea eta tarta"; "purchase.cake.description" = "Kafea eta tarta erosiko?"; From d38dd1499d0861e75ba2b0556758603634716ab9 Mon Sep 17 00:00:00 2001 From: Marcin Czachursk Date: Thu, 6 Apr 2023 07:15:41 +0200 Subject: [PATCH 09/17] #10 Fix haptic settings --- Vernissage/VernissageApp.swift | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Vernissage/VernissageApp.swift b/Vernissage/VernissageApp.swift index 542a82d..75cbbd9 100644 --- a/Vernissage/VernissageApp.swift +++ b/Vernissage/VernissageApp.swift @@ -168,6 +168,12 @@ struct VernissageApp: App { self.applicationState.activeIcon = defaultSettings.activeIcon self.applicationState.showSensitive = defaultSettings.showSensitive self.applicationState.showPhotoDescription = defaultSettings.showPhotoDescription + + self.applicationState.hapticTabSelectionEnabled = defaultSettings.hapticTabSelectionEnabled + self.applicationState.hapticRefreshEnabled = defaultSettings.hapticRefreshEnabled + self.applicationState.hapticButtonPressEnabled = defaultSettings.hapticButtonPressEnabled + self.applicationState.hapticAnimationEnabled = defaultSettings.hapticAnimationEnabled + self.applicationState.hapticNotificationEnabled = defaultSettings.hapticNotificationEnabled } private func setImagePipelines() { From f6fb5b7a83e4e494e8d818f8d74c5d36d3c2c9ce Mon Sep 17 00:00:00 2001 From: Marcin Czachursk Date: Thu, 6 Apr 2023 13:19:55 +0200 Subject: [PATCH 10/17] #12 Add bottom right/left menu items --- ...plicationSettings+CoreDataProperties.swift | 1 + CoreData/ApplicationSettingsHandler.swift | 6 + .../Vernissage.xcdatamodeld/.xccurrentversion | 2 +- .../Vernissage-007.xcdatamodel/contents | 94 ++++++++ Localization/en.lproj/Localizable.strings | 4 + Localization/eu.lproj/Localizable.strings | 4 + Localization/pl.lproj/Localizable.strings | 4 + Models/MenuPosition.swift | 13 ++ Vernissage.xcodeproj/project.pbxproj | 30 ++- .../EnvironmentObjects/ApplicationState.swift | 3 + Vernissage/VernissageApp.swift | 4 + Vernissage/ViewModifiers/NavigationMenu.swift | 74 ++++++ Vernissage/Views/MainView.swift | 220 +++++++++--------- .../Subviews/GeneralSectionView.swift | 20 ++ 14 files changed, 365 insertions(+), 114 deletions(-) create mode 100644 CoreData/Vernissage.xcdatamodeld/Vernissage-007.xcdatamodel/contents create mode 100644 Models/MenuPosition.swift create mode 100644 Vernissage/ViewModifiers/NavigationMenu.swift diff --git a/CoreData/ApplicationSettings+CoreDataProperties.swift b/CoreData/ApplicationSettings+CoreDataProperties.swift index 3713f50..4263b4a 100644 --- a/CoreData/ApplicationSettings+CoreDataProperties.swift +++ b/CoreData/ApplicationSettings+CoreDataProperties.swift @@ -28,6 +28,7 @@ extension ApplicationSettings { @NSManaged public var showSensitive: Bool @NSManaged public var showPhotoDescription: Bool + @NSManaged public var menuPosition: Int32 } extension ApplicationSettings: Identifiable { diff --git a/CoreData/ApplicationSettingsHandler.swift b/CoreData/ApplicationSettingsHandler.swift index 6e43340..f302c8c 100644 --- a/CoreData/ApplicationSettingsHandler.swift +++ b/CoreData/ApplicationSettingsHandler.swift @@ -107,6 +107,12 @@ class ApplicationSettingsHandler { CoreDataHandler.shared.save() } + func set(menuPosition: MenuPosition) { + let defaultSettings = self.get() + defaultSettings.menuPosition = Int32(menuPosition.rawValue) + CoreDataHandler.shared.save() + } + private func createApplicationSettingsEntity(viewContext: NSManagedObjectContext? = nil) -> ApplicationSettings { let context = viewContext ?? CoreDataHandler.shared.container.viewContext return ApplicationSettings(context: context) diff --git a/CoreData/Vernissage.xcdatamodeld/.xccurrentversion b/CoreData/Vernissage.xcdatamodeld/.xccurrentversion index c9463e5..caec0e4 100644 --- a/CoreData/Vernissage.xcdatamodeld/.xccurrentversion +++ b/CoreData/Vernissage.xcdatamodeld/.xccurrentversion @@ -3,6 +3,6 @@ _XCCurrentVersionName - Vernissage-006.xcdatamodel + Vernissage-007.xcdatamodel diff --git a/CoreData/Vernissage.xcdatamodeld/Vernissage-007.xcdatamodel/contents b/CoreData/Vernissage.xcdatamodeld/Vernissage-007.xcdatamodel/contents new file mode 100644 index 0000000..2fbe9f3 --- /dev/null +++ b/CoreData/Vernissage.xcdatamodeld/Vernissage-007.xcdatamodel/contents @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Localization/en.lproj/Localizable.strings b/Localization/en.lproj/Localizable.strings index af4a9ee..5775a4e 100644 --- a/Localization/en.lproj/Localizable.strings +++ b/Localization/en.lproj/Localizable.strings @@ -204,6 +204,10 @@ "settings.title.sourceCode" = "Source code"; "settings.title.rate" = "Rate Vernissage"; "settings.title.socials" = "Socials"; +"settings.title.menuPosition" = "Menu position"; +"settings.title.topMenu" = "Navigation bar"; +"settings.title.bottomRightMenu" = "Bottom right"; +"settings.title.bottomLeftMenu" = "Bottom left"; // Mark: Signin view. "signin.navigationBar.title" = "Sign in to Pixelfed"; diff --git a/Localization/eu.lproj/Localizable.strings b/Localization/eu.lproj/Localizable.strings index d61663a..6aa069a 100644 --- a/Localization/eu.lproj/Localizable.strings +++ b/Localization/eu.lproj/Localizable.strings @@ -204,6 +204,10 @@ "settings.title.sourceCode" = "Iturburu kodea"; "settings.title.rate" = "Rate Vernissage"; "settings.title.socials" = "Socials"; +"settings.title.menuPosition" = "Menu position"; +"settings.title.topMenu" = "Navigation bar"; +"settings.title.bottomRightMenu" = "Bottom right"; +"settings.title.bottomLeftMenu" = "Bottom left"; // Mark: Signin view. "signin.navigationBar.title" = "Hasi saioa Pixelfed-en"; diff --git a/Localization/pl.lproj/Localizable.strings b/Localization/pl.lproj/Localizable.strings index 1439855..244e6b2 100644 --- a/Localization/pl.lproj/Localizable.strings +++ b/Localization/pl.lproj/Localizable.strings @@ -204,6 +204,10 @@ "settings.title.sourceCode" = "Kod źródłowy"; "settings.title.rate" = "Oceń Vernissage"; "settings.title.socials" = "Społeczności"; +"settings.title.menuPosition" = "Pozycja menu"; +"settings.title.topMenu" = "Panel tytułowy"; +"settings.title.bottomRightMenu" = "Dolny prawy"; +"settings.title.bottomLeftMenu" = "Dolny lewy"; // Mark: Signin view. "signin.navigationBar.title" = "Zaloguj się do Pixelfed"; diff --git a/Models/MenuPosition.swift b/Models/MenuPosition.swift new file mode 100644 index 0000000..26445cf --- /dev/null +++ b/Models/MenuPosition.swift @@ -0,0 +1,13 @@ +// +// https://mczachurski.dev +// Copyright © 2023 Marcin Czachurski and the repository contributors. +// Licensed under the Apache License 2.0. +// + +import Foundation + +public enum MenuPosition: Int { + case top = 1 + case bottomRight = 2 + case bottomLeft = 3 +} diff --git a/Vernissage.xcodeproj/project.pbxproj b/Vernissage.xcodeproj/project.pbxproj index 81643b9..7c80233 100644 --- a/Vernissage.xcodeproj/project.pbxproj +++ b/Vernissage.xcodeproj/project.pbxproj @@ -146,6 +146,9 @@ F88FAD2B295F43B8009B20C9 /* AccountData+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = F88FAD29295F43B8009B20C9 /* AccountData+CoreDataProperties.swift */; }; F88FAD2D295F4AD7009B20C9 /* ApplicationState.swift in Sources */ = {isa = PBXBuildFile; fileRef = F88FAD2C295F4AD7009B20C9 /* ApplicationState.swift */; }; F88FAD32295F5029009B20C9 /* RemoteFileService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F88FAD31295F5029009B20C9 /* RemoteFileService.swift */; }; + F8911A1729DE914D00770F44 /* NavigationMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8911A1629DE914D00770F44 /* NavigationMenu.swift */; }; + F8911A1A29DEA0F500770F44 /* MenuPosition.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8911A1929DEA0F500770F44 /* MenuPosition.swift */; }; + F8911A1B29DEA0F500770F44 /* MenuPosition.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8911A1929DEA0F500770F44 /* MenuPosition.swift */; }; F891E7CE29C35BF50022C449 /* ImageRowItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = F891E7CD29C35BF50022C449 /* ImageRowItem.swift */; }; F891E7D029C368750022C449 /* ImageRowItemAsync.swift in Sources */ = {isa = PBXBuildFile; fileRef = F891E7CF29C368750022C449 /* ImageRowItemAsync.swift */; }; F897978829681B9C00B22335 /* UserAvatar.swift in Sources */ = {isa = PBXBuildFile; fileRef = F897978729681B9C00B22335 /* UserAvatar.swift */; }; @@ -369,6 +372,9 @@ F88FAD29295F43B8009B20C9 /* AccountData+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AccountData+CoreDataProperties.swift"; sourceTree = ""; }; F88FAD2C295F4AD7009B20C9 /* ApplicationState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationState.swift; sourceTree = ""; }; F88FAD31295F5029009B20C9 /* RemoteFileService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteFileService.swift; sourceTree = ""; }; + F8911A1629DE914D00770F44 /* NavigationMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationMenu.swift; sourceTree = ""; }; + F8911A1829DE9E5500770F44 /* Vernissage-007.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Vernissage-007.xcdatamodel"; sourceTree = ""; }; + F8911A1929DEA0F500770F44 /* MenuPosition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuPosition.swift; sourceTree = ""; }; F891E7CD29C35BF50022C449 /* ImageRowItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageRowItem.swift; sourceTree = ""; }; F891E7CF29C368750022C449 /* ImageRowItemAsync.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageRowItemAsync.swift; sourceTree = ""; }; F897978729681B9C00B22335 /* UserAvatar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserAvatar.swift; sourceTree = ""; }; @@ -692,6 +698,7 @@ F86167C7297FE781004D1F67 /* AvatarShape.swift */, F89D6C3E29716E41001DA3D4 /* Theme.swift */, F87AEB932986C51B00434FB6 /* AppConstants.swift */, + F8911A1929DEA0F500770F44 /* MenuPosition.swift */, ); path = Models; sourceTree = ""; @@ -937,6 +944,7 @@ F8C5E56129892CC300ADF6A7 /* FirstAppear.swift */, F8CAE63D29B8902D001E0372 /* ClearButton.swift */, F8E9391E29C0BCFA002BB3B8 /* ImageContextMenu.swift */, + F8911A1629DE914D00770F44 /* NavigationMenu.swift */, ); path = ViewModifiers; sourceTree = ""; @@ -1140,6 +1148,7 @@ F864F77D29BB9A4600B13921 /* AttachmentData+CoreDataClass.swift in Sources */, F864F7A629BBA01D00B13921 /* CoreDataError.swift in Sources */, F864F77E29BB9A4900B13921 /* AttachmentData+CoreDataProperties.swift in Sources */, + F8911A1B29DEA0F500770F44 /* MenuPosition.swift in Sources */, F864F78229BB9A6500B13921 /* StatusData+CoreDataClass.swift in Sources */, F864F78329BB9A6800B13921 /* StatusData+CoreDataProperties.swift in Sources */, F864F78429BB9A6E00B13921 /* ApplicationSettings+CoreDataClass.swift in Sources */, @@ -1187,6 +1196,7 @@ F8864CF129ACFFB80020C534 /* View+Keyboard.swift in Sources */, F88FAD21295F3944009B20C9 /* HomeFeedView.swift in Sources */, F8FA991E299FAB92007AB130 /* PhotoEditorView.swift in Sources */, + F8911A1729DE914D00770F44 /* NavigationMenu.swift in Sources */, F88C2475295C37BB0006098B /* CoreDataHandler.swift in Sources */, F87AEB972986D16D00434FB6 /* AuthorisationError.swift in Sources */, F8742FC429990AFB00E9642B /* ClientError.swift in Sources */, @@ -1254,6 +1264,7 @@ F89A46DE296EABA20062125F /* StatusPlaceholderView.swift in Sources */, F88C2482295C3A4F0006098B /* StatusView.swift in Sources */, F866F6A329604161002E8F88 /* AccountDataHandler.swift in Sources */, + F8911A1A29DEA0F500770F44 /* MenuPosition.swift in Sources */, F8996DEB2971D29D0043EEC6 /* View+Transition.swift in Sources */, F876418B298AC1B80057D362 /* NoDataView.swift in Sources */, F8E9392129C0DA7E002BB3B8 /* LazyImageState+ImageResponse.swift in Sources */, @@ -1361,7 +1372,7 @@ CODE_SIGN_ENTITLEMENTS = VernissageWidget/VernissageWidgetExtension.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 94; + CURRENT_PROJECT_VERSION = 95; DEVELOPMENT_TEAM = B2U9FEKYP8; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = VernissageWidget/Info.plist; @@ -1372,7 +1383,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.1; + MARKETING_VERSION = 1.1.0; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage.widget; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -1389,7 +1400,7 @@ ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; CODE_SIGN_ENTITLEMENTS = VernissageWidget/VernissageWidgetExtension.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 94; + CURRENT_PROJECT_VERSION = 95; DEVELOPMENT_TEAM = B2U9FEKYP8; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = VernissageWidget/Info.plist; @@ -1400,7 +1411,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.1; + MARKETING_VERSION = 1.1.0; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage.widget; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -1537,7 +1548,7 @@ CODE_SIGN_ENTITLEMENTS = Vernissage/Vernissage.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 94; + CURRENT_PROJECT_VERSION = 95; DEVELOPMENT_ASSET_PATHS = "\"Vernissage/Preview Content\""; DEVELOPMENT_TEAM = B2U9FEKYP8; ENABLE_PREVIEWS = YES; @@ -1554,7 +1565,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.1; + MARKETING_VERSION = 1.1.0; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1577,7 +1588,7 @@ ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CODE_SIGN_ENTITLEMENTS = Vernissage/Vernissage.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 94; + CURRENT_PROJECT_VERSION = 95; DEVELOPMENT_ASSET_PATHS = "\"Vernissage/Preview Content\""; DEVELOPMENT_TEAM = B2U9FEKYP8; ENABLE_PREVIEWS = YES; @@ -1594,7 +1605,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.1; + MARKETING_VERSION = 1.1.0; PRODUCT_BUNDLE_IDENTIFIER = dev.mczachurski.vernissage; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; @@ -1731,6 +1742,7 @@ F88C2476295C37BB0006098B /* Vernissage.xcdatamodeld */ = { isa = XCVersionGroup; children = ( + F8911A1829DE9E5500770F44 /* Vernissage-007.xcdatamodel */, F8EF371429C624DA00669F45 /* Vernissage-006.xcdatamodel */, F8CAE64129B8F1AF001E0372 /* Vernissage-005.xcdatamodel */, F8B05ACC29B48DD000857221 /* Vernissage-004.xcdatamodel */, @@ -1739,7 +1751,7 @@ F8C937A929882CA90004D782 /* Vernissage-001.xcdatamodel */, F88C2477295C37BB0006098B /* Vernissage.xcdatamodel */, ); - currentVersion = F8EF371429C624DA00669F45 /* Vernissage-006.xcdatamodel */; + currentVersion = F8911A1829DE9E5500770F44 /* Vernissage-007.xcdatamodel */; path = Vernissage.xcdatamodeld; sourceTree = ""; versionGroupType = wrapper.xcdatamodel; diff --git a/Vernissage/EnvironmentObjects/ApplicationState.swift b/Vernissage/EnvironmentObjects/ApplicationState.swift index da4d9c4..6f90209 100644 --- a/Vernissage/EnvironmentObjects/ApplicationState.swift +++ b/Vernissage/EnvironmentObjects/ApplicationState.swift @@ -85,6 +85,9 @@ public class ApplicationState: ObservableObject { /// Updated user profile. @Published var updatedProfile: Account? + /// Information which menu should be shown (top or bottom). + @Published var menuPosition = MenuPosition.top + public func changeApplicationState(accountModel: AccountModel, instance: Instance?, lastSeenStatusId: String?) { self.account = accountModel self.lastSeenStatusId = lastSeenStatusId diff --git a/Vernissage/VernissageApp.swift b/Vernissage/VernissageApp.swift index 75cbbd9..4d49681 100644 --- a/Vernissage/VernissageApp.swift +++ b/Vernissage/VernissageApp.swift @@ -169,6 +169,10 @@ struct VernissageApp: App { self.applicationState.showSensitive = defaultSettings.showSensitive self.applicationState.showPhotoDescription = defaultSettings.showPhotoDescription + if let menuPosition = MenuPosition(rawValue: Int(defaultSettings.menuPosition)) { + self.applicationState.menuPosition = menuPosition + } + self.applicationState.hapticTabSelectionEnabled = defaultSettings.hapticTabSelectionEnabled self.applicationState.hapticRefreshEnabled = defaultSettings.hapticRefreshEnabled self.applicationState.hapticButtonPressEnabled = defaultSettings.hapticButtonPressEnabled diff --git a/Vernissage/ViewModifiers/NavigationMenu.swift b/Vernissage/ViewModifiers/NavigationMenu.swift new file mode 100644 index 0000000..3b73e0b --- /dev/null +++ b/Vernissage/ViewModifiers/NavigationMenu.swift @@ -0,0 +1,74 @@ +// +// https://mczachurski.dev +// Copyright © 2023 Marcin Czachurski and the repository contributors. +// Licensed under the Apache License 2.0. +// + +import Foundation +import SwiftUI + +public extension View { + func navigationMenu(menuPosition: Binding, + @ViewBuilder menuItems: @escaping () -> MenuItems) -> some View where MenuItems: View { + modifier(NavigationMenu(menuPosition: menuPosition, menuItems: menuItems)) + } +} + +private struct NavigationMenu: ViewModifier where MenuItems: View { + + private let menuItems: () -> MenuItems + + @Binding var menuPosition: MenuPosition + + init(menuPosition: Binding, @ViewBuilder menuItems: @escaping () -> MenuItems) { + self.menuItems = menuItems + self._menuPosition = menuPosition + } + + func body(content: Content) -> some View { + if self.menuPosition == .top { + content + } else { + ZStack { + content + + VStack(alignment: .trailing) { + Spacer() + HStack { + if self.menuPosition == .bottomRight { + Spacer() + + self.menuContent() + .padding(.trailing, 20) + } + + if self.menuPosition == .bottomLeft { + self.menuContent() + .padding(.leading, 20) + + Spacer() + } + } + } + } + } + } + + @ViewBuilder + private func menuContent() -> some View { + Menu { + self.menuItems() + } label: { + + Image(systemName: "line.3.horizontal.circle") + .resizable() + .foregroundColor(.mainTextColor.opacity(0.8)) + .shadow(radius: 5) + .padding(8) + .frame(width: 44, height: 44) + .background(.ultraThinMaterial) + .clipShape(Circle()) + + } + } +} diff --git a/Vernissage/Views/MainView.swift b/Vernissage/Views/MainView.swift index 060dd2c..2412349 100644 --- a/Vernissage/Views/MainView.swift +++ b/Vernissage/Views/MainView.swift @@ -32,21 +32,28 @@ struct MainView: View { var body: some View { self.getMainView() - .navigationTitle(navBarTitle) - .navigationBarTitleDisplayMode(.inline) - .toolbar { - self.getLeadingToolbar() - self.getPrincipalToolbar() - self.getTrailingToolbar() - } - .onChange(of: tipsStore.status) { status in - if status == .successful { - withAnimation(.spring()) { - self.routerPath.presentedOverlay = .successPayment - self.tipsStore.reset() + .navigationMenu(menuPosition: $applicationState.menuPosition) { + self.navigationMenuContent() + } + .navigationTitle(navBarTitle) + .navigationBarTitleDisplayMode(.inline) + .toolbar { + self.getLeadingToolbar() + + if self.applicationState.menuPosition == .top { + self.getPrincipalToolbar() + } + + self.getTrailingToolbar() + } + .onChange(of: tipsStore.status) { status in + if status == .successful { + withAnimation(.spring()) { + self.routerPath.presentedOverlay = .successPayment + self.tipsStore.reset() + } } } - } } @ViewBuilder @@ -92,97 +99,7 @@ struct MainView: View { private func getPrincipalToolbar() -> some ToolbarContent { ToolbarItem(placement: .principal) { Menu { - Button { - self.switchView(to: .home) - } label: { - HStack { - Text(self.getViewTitle(viewMode: .home)) - Image(systemName: "house") - } - } - - Button { - self.switchView(to: .local) - } label: { - HStack { - Text(self.getViewTitle(viewMode: .local)) - Image(systemName: "building") - } - } - - Button { - self.switchView(to: .federated) - } label: { - HStack { - Text(self.getViewTitle(viewMode: .federated)) - Image(systemName: "globe.europe.africa") - } - } - - Button { - self.switchView(to: .search) - } label: { - HStack { - Text(self.getViewTitle(viewMode: .search)) - Image(systemName: "magnifyingglass") - } - } - - Divider() - - Menu { - Button { - self.switchView(to: .trendingPhotos) - } label: { - HStack { - Text(self.getViewTitle(viewMode: .trendingPhotos)) - Image(systemName: "photo.stack") - } - } - - Button { - self.switchView(to: .trendingTags) - } label: { - HStack { - Text(self.getViewTitle(viewMode: .trendingTags)) - Image(systemName: "tag") - } - } - - Button { - self.switchView(to: .trendingAccounts) - } label: { - HStack { - Text(self.getViewTitle(viewMode: .trendingAccounts)) - Image(systemName: "person.3") - } - } - } label: { - HStack { - Text("mainview.tab.trending", comment: "Trending menu section") - Image(systemName: "chart.line.uptrend.xyaxis") - } - } - - Divider() - - Button { - self.switchView(to: .profile) - } label: { - HStack { - Text(self.getViewTitle(viewMode: .profile)) - Image(systemName: "person.crop.circle") - } - } - - Button { - self.switchView(to: .notifications) - } label: { - HStack { - Text(self.getViewTitle(viewMode: .notifications)) - Image(systemName: "bell.badge") - } - } + self.navigationMenuContent() } label: { HStack { Text(navBarTitle, comment: "Navbar title") @@ -244,6 +161,101 @@ struct MainView: View { } } + @ViewBuilder + private func navigationMenuContent() -> some View { + Button { + self.switchView(to: .home) + } label: { + HStack { + Text(self.getViewTitle(viewMode: .home)) + Image(systemName: "house") + } + } + + Button { + self.switchView(to: .local) + } label: { + HStack { + Text(self.getViewTitle(viewMode: .local)) + Image(systemName: "building") + } + } + + Button { + self.switchView(to: .federated) + } label: { + HStack { + Text(self.getViewTitle(viewMode: .federated)) + Image(systemName: "globe.europe.africa") + } + } + + Button { + self.switchView(to: .search) + } label: { + HStack { + Text(self.getViewTitle(viewMode: .search)) + Image(systemName: "magnifyingglass") + } + } + + Divider() + + Menu { + Button { + self.switchView(to: .trendingPhotos) + } label: { + HStack { + Text(self.getViewTitle(viewMode: .trendingPhotos)) + Image(systemName: "photo.stack") + } + } + + Button { + self.switchView(to: .trendingTags) + } label: { + HStack { + Text(self.getViewTitle(viewMode: .trendingTags)) + Image(systemName: "tag") + } + } + + Button { + self.switchView(to: .trendingAccounts) + } label: { + HStack { + Text(self.getViewTitle(viewMode: .trendingAccounts)) + Image(systemName: "person.3") + } + } + } label: { + HStack { + Text("mainview.tab.trending", comment: "Trending menu section") + Image(systemName: "chart.line.uptrend.xyaxis") + } + } + + Divider() + + Button { + self.switchView(to: .profile) + } label: { + HStack { + Text(self.getViewTitle(viewMode: .profile)) + Image(systemName: "person.crop.circle") + } + } + + Button { + self.switchView(to: .notifications) + } label: { + HStack { + Text(self.getViewTitle(viewMode: .notifications)) + Image(systemName: "bell.badge") + } + } + } + @ViewBuilder private func getAvatarImage(avatarUrl: URL?, avatarData: Data?) -> some View { if let avatarData, diff --git a/Vernissage/Views/SettingsView/Subviews/GeneralSectionView.swift b/Vernissage/Views/SettingsView/Subviews/GeneralSectionView.swift index aa7dfa4..e962294 100644 --- a/Vernissage/Views/SettingsView/Subviews/GeneralSectionView.swift +++ b/Vernissage/Views/SettingsView/Subviews/GeneralSectionView.swift @@ -29,6 +29,12 @@ struct GeneralSectionView: View { (Theme.dark, "settings.title.dark") ] + private let menuPositions: [(menuPosition: MenuPosition, name: LocalizedStringKey)] = [ + (MenuPosition.top, "settings.title.topMenu"), + (MenuPosition.bottomRight, "settings.title.bottomRightMenu"), + (MenuPosition.bottomLeft, "settings.title.bottomLeftMenu") + ] + var body: some View { Section("settings.title.general") { @@ -64,6 +70,20 @@ struct GeneralSectionView: View { self.applicationState.theme = theme ApplicationSettingsHandler.shared.set(theme: theme) } + + // Menu position. + Picker(selection: $applicationState.menuPosition) { + ForEach(self.menuPositions, id: \.menuPosition) { item in + Text(item.name, comment: "Menu positions") + .tag(item.menuPosition) + } + } label: { + Text("settings.title.menuPosition", comment: "Menu position") + } + .onChange(of: self.applicationState.menuPosition) { menuPosition in + self.applicationState.menuPosition = menuPosition + ApplicationSettingsHandler.shared.set(menuPosition: menuPosition) + } } } } From 705d2ddd5607f12e1860b93bc59910bc0e4c42c1 Mon Sep 17 00:00:00 2001 From: Marcin Czachursk Date: Thu, 6 Apr 2023 13:20:50 +0200 Subject: [PATCH 11/17] #11 Fix polish letters in hashtags --- Vernissage/Widgets/TextView/TextModel.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Vernissage/Widgets/TextView/TextModel.swift b/Vernissage/Widgets/TextView/TextModel.swift index b132545..379a788 100644 --- a/Vernissage/Widgets/TextView/TextModel.swift +++ b/Vernissage/Widgets/TextView/TextModel.swift @@ -74,7 +74,7 @@ public class TextModel: NSObject, ObservableObject { .underlineColor: UIColor.clear], range: NSRange(location: 0, length: text.string.utf16.count)) - let hashtagPattern = "(#+[a-zA-Z0-9(_)]{1,})" + let hashtagPattern = "(#+[\\w0-9(_)]{1,})" let mentionPattern = "(@+[a-zA-Z0-9(_).-]{1,})" let urlPattern = "(?i)https?://(?:www\\.)?\\S+(?:/|\\b)" From 3c26c479b88cd322dfecc35d7290b5ee2ba5001f Mon Sep 17 00:00:00 2001 From: Marcin Czachursk Date: Thu, 6 Apr 2023 13:28:34 +0200 Subject: [PATCH 12/17] #14 Change thumbsup icon into star --- Vernissage/ViewModifiers/ImageContextMenu.swift | 4 ++-- .../NotificationsView/Subviews/NotificationRowView.swift | 2 +- Vernissage/Views/UserProfileView/UserProfileView.swift | 2 +- Vernissage/Widgets/FavouriteTouch.swift | 2 +- Vernissage/Widgets/InteractionRow.swift | 6 +++--- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Vernissage/ViewModifiers/ImageContextMenu.swift b/Vernissage/ViewModifiers/ImageContextMenu.swift index 80877be..50eeaad 100644 --- a/Vernissage/ViewModifiers/ImageContextMenu.swift +++ b/Vernissage/ViewModifiers/ImageContextMenu.swift @@ -45,7 +45,7 @@ private struct ImageContextMenu: ViewModifier { await self.favourite() } } label: { - Label("status.title.favourite", systemImage: "hand.thumbsup") + Label("status.title.favourite", systemImage: "star") } Button { @@ -83,7 +83,7 @@ private struct ImageContextMenu: ViewModifier { private func favourite() async { do { _ = try await self.client.statuses?.favourite(statusId: self.id) - ToastrService.shared.showSuccess(NSLocalizedString("status.title.favourited", comment: "Favourited"), imageSystemName: "hand.thumbsup.fill") + ToastrService.shared.showSuccess(NSLocalizedString("status.title.favourited", comment: "Favourited"), imageSystemName: "star.fill") } catch { ErrorService.shared.handle(error, message: "status.error.favouriteFailed", showToastr: true) } diff --git a/Vernissage/Views/NotificationsView/Subviews/NotificationRowView.swift b/Vernissage/Views/NotificationsView/Subviews/NotificationRowView.swift index 75cac6e..1342fde 100644 --- a/Vernissage/Views/NotificationsView/Subviews/NotificationRowView.swift +++ b/Vernissage/Views/NotificationsView/Subviews/NotificationRowView.swift @@ -192,7 +192,7 @@ struct NotificationRowView: View { case .reblog: return Image("custom.rocket") case .favourite: - return Image(systemName: "hand.thumbsup") + return Image(systemName: "star") case .status: return Image(systemName: "photo.on.rectangle.angled") case .followRequest: diff --git a/Vernissage/Views/UserProfileView/UserProfileView.swift b/Vernissage/Views/UserProfileView/UserProfileView.swift index feb3ae7..ddaeaf8 100644 --- a/Vernissage/Views/UserProfileView/UserProfileView.swift +++ b/Vernissage/Views/UserProfileView/UserProfileView.swift @@ -196,7 +196,7 @@ struct UserProfileView: View { Divider() NavigationLink(value: RouteurDestinations.favourites) { - Label(NSLocalizedString("userProfile.title.favourites", comment: "Favourites"), systemImage: "hand.thumbsup") + Label(NSLocalizedString("userProfile.title.favourites", comment: "Favourites"), systemImage: "star") } NavigationLink(value: RouteurDestinations.bookmarks) { diff --git a/Vernissage/Widgets/FavouriteTouch.swift b/Vernissage/Widgets/FavouriteTouch.swift index 0899ce0..803268b 100644 --- a/Vernissage/Widgets/FavouriteTouch.swift +++ b/Vernissage/Widgets/FavouriteTouch.swift @@ -24,7 +24,7 @@ struct FavouriteTouch: View { .foregroundColor(.white.opacity(0.75)) .scaleEffect(CGFloat(showCircle)) - Image(systemName: "hand.thumbsup.fill") + Image(systemName: "star.fill") .font(.system(size: 26)) .foregroundColor(.black.opacity(0.4)) .clipShape(Rectangle().offset(y: CGFloat(showThumb))) diff --git a/Vernissage/Widgets/InteractionRow.swift b/Vernissage/Widgets/InteractionRow.swift index e25d1f1..b20bdc1 100644 --- a/Vernissage/Widgets/InteractionRow.swift +++ b/Vernissage/Widgets/InteractionRow.swift @@ -63,7 +63,7 @@ struct InteractionRow: View { await self.favourite() } label: { HStack(alignment: .center) { - Image(systemName: self.favourited ? "hand.thumbsup.fill" : "hand.thumbsup") + Image(systemName: self.favourited ? "star.fill" : "star") Text("\(self.favouritesCount)") .font(.caption) } @@ -85,7 +85,7 @@ struct InteractionRow: View { } NavigationLink(value: RouteurDestinations.accounts(listType: .favourited(entityId: statusModel.id))) { - Label("status.title.favouritedBy", systemImage: "hand.thumbsup") + Label("status.title.favouritedBy", systemImage: "star") } if let url = statusModel.url { @@ -175,7 +175,7 @@ struct InteractionRow: View { ToastrService.shared.showSuccess(self.favourited ? NSLocalizedString("status.title.favourited", comment: "Favourited") - : NSLocalizedString("status.title.unfavourited", comment: "Unfavourited"), imageSystemName: "hand.thumbsup.fill") + : NSLocalizedString("status.title.unfavourited", comment: "Unfavourited"), imageSystemName: "star.fill") } catch { ErrorService.shared.handle(error, message: "status.error.favouriteFailed", showToastr: true) } From ceb7f273d140333e404883c12fd402e5aa826266 Mon Sep 17 00:00:00 2001 From: Marcin Czachursk Date: Thu, 6 Apr 2023 13:31:06 +0200 Subject: [PATCH 13/17] Change version to 1.1.0 (96) --- Vernissage.xcodeproj/project.pbxproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Vernissage.xcodeproj/project.pbxproj b/Vernissage.xcodeproj/project.pbxproj index 7c80233..9fdd25f 100644 --- a/Vernissage.xcodeproj/project.pbxproj +++ b/Vernissage.xcodeproj/project.pbxproj @@ -1372,7 +1372,7 @@ CODE_SIGN_ENTITLEMENTS = VernissageWidget/VernissageWidgetExtension.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 95; + CURRENT_PROJECT_VERSION = 96; DEVELOPMENT_TEAM = B2U9FEKYP8; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = VernissageWidget/Info.plist; @@ -1400,7 +1400,7 @@ ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; CODE_SIGN_ENTITLEMENTS = VernissageWidget/VernissageWidgetExtension.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 95; + CURRENT_PROJECT_VERSION = 96; DEVELOPMENT_TEAM = B2U9FEKYP8; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = VernissageWidget/Info.plist; @@ -1548,7 +1548,7 @@ CODE_SIGN_ENTITLEMENTS = Vernissage/Vernissage.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 95; + CURRENT_PROJECT_VERSION = 96; DEVELOPMENT_ASSET_PATHS = "\"Vernissage/Preview Content\""; DEVELOPMENT_TEAM = B2U9FEKYP8; ENABLE_PREVIEWS = YES; @@ -1588,7 +1588,7 @@ ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CODE_SIGN_ENTITLEMENTS = Vernissage/Vernissage.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 95; + CURRENT_PROJECT_VERSION = 96; DEVELOPMENT_ASSET_PATHS = "\"Vernissage/Preview Content\""; DEVELOPMENT_TEAM = B2U9FEKYP8; ENABLE_PREVIEWS = YES; From 66cb051a68e8ff5c46d855346d3c6afa1b628724 Mon Sep 17 00:00:00 2001 From: Xabi Date: Thu, 6 Apr 2023 19:18:35 +0200 Subject: [PATCH 14/17] Update EU localisation Added: - settings.title.rate - settings.title.socials - settings.title.menuPosition - settings.title.topMenu - settings.title.bottomRightMenu - settings.title.bottomLeftMenu --- Localization/eu.lproj/Localizable.strings | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Localization/eu.lproj/Localizable.strings b/Localization/eu.lproj/Localizable.strings index 6aa069a..e7683dc 100644 --- a/Localization/eu.lproj/Localizable.strings +++ b/Localization/eu.lproj/Localizable.strings @@ -202,12 +202,12 @@ "settings.title.privacyPolicy" = "Pribatutasun politika"; "settings.title.terms" = "Erabilera baldintzak"; "settings.title.sourceCode" = "Iturburu kodea"; -"settings.title.rate" = "Rate Vernissage"; -"settings.title.socials" = "Socials"; -"settings.title.menuPosition" = "Menu position"; -"settings.title.topMenu" = "Navigation bar"; -"settings.title.bottomRightMenu" = "Bottom right"; -"settings.title.bottomLeftMenu" = "Bottom left"; +"settings.title.rate" = "Baloratu Vernissage"; +"settings.title.socials" = "Gizarte-sareak"; +"settings.title.menuPosition" = "Menuaren kokapena"; +"settings.title.topMenu" = "Nabigazio barra"; +"settings.title.bottomRightMenu" = "Behe eskumaldean"; +"settings.title.bottomLeftMenu" = "Behe ezkerraldean"; // Mark: Signin view. "signin.navigationBar.title" = "Hasi saioa Pixelfed-en"; From 18c04329358151d5a1455d61aaa25a78129b0068 Mon Sep 17 00:00:00 2001 From: Xabi Date: Thu, 6 Apr 2023 23:15:38 +0200 Subject: [PATCH 15/17] Update EU localisation Standardisation, fixes and improvements. --- Localization/eu.lproj/Localizable.strings | 90 +++++++++++------------ 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/Localization/eu.lproj/Localizable.strings b/Localization/eu.lproj/Localizable.strings index e7683dc..b72347c 100644 --- a/Localization/eu.lproj/Localizable.strings +++ b/Localization/eu.lproj/Localizable.strings @@ -6,15 +6,15 @@ // MARK: Global errors. "global.error.unexpected" = "Espero ez zen errorea."; "global.error.statusesNotRetrieved" = "Ez dira egoerak eskuratu."; -"global.error.errorDuringDownloadStatuses" = "Errorea egoerak zerbitzaritik eskuratzean."; -"global.error.errorDuringDownloadHashtag" = "Errorea traolak zerbitzaritik eskuratzean."; -"global.error.hashtagNotExists" = "Traola ez da existitzen."; +"global.error.errorDuringDownloadStatuses" = "Errorea zerbitzaritik egoerak eskuratzean."; +"global.error.errorDuringDownloadHashtag" = "Errorea zerbitzaritik traolak eskuratzean."; +"global.error.hashtagNotExists" = "Traola ez da lehendik existitzen."; "global.error.errorDuringImageDownload" = "Ezin da irudia eskuratu."; -"global.error.canceledImageDownload" = "Download image has been canceled."; +"global.error.canceledImageDownload" = "Irudiaren deskarga bertan behera utzi da."; "global.error.errorDuringDataLoad" = "Datuen kargak huts egin du."; "global.error.errorDuringUserRead" = "Ezin izan da erabiltzailearen kontua eskuratu."; "global.error.badUrlServer" = "Zerbitzariaren URL okerra."; -"global.error.accessTokenNotFound" = "Access token not found."; +"global.error.accessTokenNotFound" = "Ez da sarbide-tokena aurkitu."; "global.error.errorDuringDownloadStatus" = "Errorea zerbitzaritik egoera eskuratzean."; "global.error.errorDuringPurchaseVerification" = "Erosketaren egiaztaketak huts egin du."; @@ -34,18 +34,18 @@ "mainview.menu.settings" = "Ezarpenak"; // MARK: Main view (error notifications). -"mainview.error.switchAccounts" = "Ezin da kontuak aldatu."; +"mainview.error.switchAccounts" = "Ezin da kontua aldatu."; // MARK: Home timeline. "home.title.allCaughtUp" = "Egunean zaude"; -"home.title.noPhotos" = "Zoritxarrez, hemen ez dago argazkirik."; +"home.title.noPhotos" = "Argazkirik ez."; // MARK: Statuses timeline (local/federated/favourite/bookmarks etc.). "statuses.navigationBar.localTimeline" = "Lokala"; "statuses.navigationBar.federatedTimeline" = "Federatua"; "statuses.navigationBar.favourites" = "Gogokoak"; "statuses.navigationBar.bookmarks" = "Laster-markak"; -"statuses.title.noPhotos" = "Zoritxarrez, hemen ez dago argazkirik."; +"statuses.title.noPhotos" = "Argazkirik ez."; "statuses.title.tagFollowed" = "Traolari jarraitzen diozu."; "statuses.title.tagUnfollowed" = "Traola jarraitzeari utzi diozu."; "statuses.error.loadingStatusesFailed" = "Egoerak kargatzeak huts egin du."; @@ -66,17 +66,17 @@ "trendingStatuses.title.monthly" = "Hilabetekoak"; "trendingStatuses.title.yearly" = "Urtekoak"; "trendingStatuses.error.loadingStatusesFailed" = "Egoerak kargatzeak huts egin du."; -"trendingStatuses.title.noPhotos" = "Zoritxarrez, hemen ez dago argazkirik."; +"trendingStatuses.title.noPhotos" = "Argazkirik ez."; // Mark: Trending tags. "trendingTags.navigationBar.title" = "Traolak"; -"trendingTags.title.noTags" = "Zoritxarrez, hemen ez dago traolarik."; +"trendingTags.title.noTags" = "Traolarik ez."; "trendingTags.title.amountOfPosts" = "%d bidalketa"; "trendingTags.error.loadingTagsFailed" = "Traolak kargatzeak huts egin du."; // Mark: Trending accounts. "trendingAccounts.navigationBar.title" = "Kontuak"; -"trendingAccounts.title.noAccounts" = "Zoritxarrez, hemen ez dago inor."; +"trendingAccounts.title.noAccounts" = "Inor ez."; "trendingAccounts.error.loadingAccountsFailed" = "Kontuak kargatzeak huts egin du."; // Mark: User profile view. @@ -88,48 +88,48 @@ "userProfile.title.block" = "Blokeatu"; "userProfile.title.favourites" = "Gogokoak"; "userProfile.title.bookmarks" = "Laster-markak"; -"userProfile.title.posts" = "Bidalketak"; -"userProfile.title.followers" = "Jarraitzaileak"; +"userProfile.title.posts" = "Bidalketa"; +"userProfile.title.followers" = "Jarraitzaile"; "userProfile.title.following" = "Jarraitzen"; -"userProfile.title.joined" = "%@-ra batu da"; +"userProfile.title.joined" = "%@ egin zuen bat"; "userProfile.title.unfollow" = "Utzi jarraitzeari"; "userProfile.title.followBack" = "Jarraitu bera ere"; "userProfile.title.follow" = "Jarraitu"; "userProfile.title.instance" = "Instantziari buruzko informazioa"; "userProfile.title.blocks" = "Blokeatutako kontuak"; "userProfile.title.mutes" = "Mutututako kontuak"; -"userProfile.title.muted" = "Mutututako kontua"; -"userProfile.title.unmuted" = "Mututzeari utzitako kontua"; -"userProfile.title.blocked" = "Blokeatutako kontua"; -"userProfile.title.unblocked" = "Blokeatzeari utzitako kontua"; +"userProfile.title.muted" = "Kontua mututu da"; +"userProfile.title.unmuted" = "Kontua mututzeari utzi zaio"; +"userProfile.title.blocked" = "Kontua blokeatu da"; +"userProfile.title.unblocked" = "Kontua blokeatzeari utzi zaio"; "userProfile.title.report" = "Salatu"; "userProfile.error.notExists" = "Kontua ez da existitzen."; "userProfile.error.loadingAccountFailed" = "Errorea zerbitzaritik kontua eskuratzean."; "userProfile.error.muting" = "Mututu/Mututzeari uzteak huts egin du."; "userProfile.error.block" = "Blokeatu/Blokeatzeari uzteak huts egin du."; -"userProfile.error.relationship" = "Relationship action failed."; +"userProfile.error.relationship" = "Harreman ekintzak huts egin du."; "userProfile.title.edit" = "Editatu"; // Mark: Notifications view. "notifications.navigationBar.title" = "Jakinarazpenak"; -"notifications.title.noNotifications" = "Zoritxarrez, hemen ez dago ezer."; -"notifications.title.followedYou" = "(e)k jarraitu dizu"; -"notifications.title.mentionedYou" = "(e)k aipatu zaitu"; -"notifications.title.boosted" = "(e)k bultzatu du"; -"notifications.title.favourited" = "(e)k gogoko du"; -"notifications.title.postedStatus" = "(e)k argitaratu du"; -"notifications.title.followRequest" = "follow request"; +"notifications.title.noNotifications" = "Ez dago jakinarazpenik."; +"notifications.title.followedYou" = "jarraitu dizu"; +"notifications.title.mentionedYou" = "aipatu zaitu"; +"notifications.title.boosted" = "bultzatu du"; +"notifications.title.favourited" = "gogoko du"; +"notifications.title.postedStatus" = "argitaratu du"; +"notifications.title.followRequest" = "jarraipen-eskaera bidali dizu"; "notifications.title.poll" = "bozketa"; -"notifications.title.updatedStatus" = "(e)k egoera eguneratu du"; -"notifications.title.signedUp" = "(e)k izena eman du"; +"notifications.title.updatedStatus" = "egoera eguneratu du"; +"notifications.title.signedUp" = "izena eman du"; "notifications.title.newReport" = "txosten berria"; "notifications.error.loadingNotificationsFailed" = "Jakinarazpenak kargatzeak huts egin du."; // Mark: Compose view. "compose.navigationBar.title" = "Idatzi"; -"compose.title.everyone" = "Edonork"; -"compose.title.unlisted" = "Zerrendatu gabe"; -"compose.title.followers" = "Jarraitzaileak"; +"compose.title.everyone" = "Edonorentzat ikusgai"; +"compose.title.unlisted" = "Zerrendatu gabea"; +"compose.title.followers" = "Jarraitzaileentzat ikusgai"; "compose.title.attachPhotoFull" = "Erantsi argazkia eta idatzi buruan duzuna"; "compose.title.attachPhotoMini" = "Idatzi buruan duzuna"; "compose.title.publish" = "Argitaratu"; @@ -165,8 +165,8 @@ "settings.title.close" = "Itxi"; "settings.title.version" = "Bertsioa"; "settings.title.accounts" = "Kontuak"; -"settings.title.newAccount" = "Kontu berria"; -"settings.title.accent" = "Kolorea"; +"settings.title.newAccount" = "Gehitu kontu"; +"settings.title.accent" = "Kolore nagusia"; "settings.title.theme" = "Gaia"; "settings.title.system" = "Sistemak darabilena"; "settings.title.light" = "Argia"; @@ -174,25 +174,25 @@ "settings.title.avatar" = "Abatarra"; "settings.title.circle" = "Biribila"; "settings.title.rounderRectangle" = "Biribildutako ertzak"; -"settings.title.other" = "Bestea"; +"settings.title.other" = "Beste batzuk"; "settings.title.thirdParty" = "Hirugarrenak"; "settings.title.reportBug" = "Eman errore baten berri"; "settings.title.githubIssues" = "Erroreak Github-en"; "settings.title.follow" = "Jarrai nazazu"; -"settings.title.support" = "Babestu"; +"settings.title.support" = "Eman babesa"; "settings.title.thankYouTitle" = "Eskerrik asko 💕"; "settings.title.thankYouMessage" = "Mila esker erosketagatik. Erosketa handi eta txikiek gure bezeroei kalitatezko produkturik onenak eskaintzeko ametsari eusten laguntzen digute. Espero dugu Vernissage gustuko izatea."; "settings.title.thankYouClose" = "Itxi"; -"settings.title.haptics" = "Haptikoak"; +"settings.title.haptics" = "Hobespen haptikoak"; "settings.title.hapticsTabSelection" = "Fitxak hautatzean"; "settings.title.hapticsButtonPress" = "Botoietan tap egitean"; "settings.title.hapticsListRefresh" = "Zerrendak freskatzean"; "settings.title.hapticsAnimationFinished" = "Animazioak amaitzean"; -"settings.title.mediaSettings" = "Multimedia ezarpenak"; -"settings.title.alwaysShowSensitiveTitle" = "Erakutsi beti NSFW (Lanerako Egokia Izan Ez Daitekeen Edukia)"; -"settings.title.alwaysShowSensitiveDescription" = "Erakutsi NSFW multimedia (hunkigarria) ohartarazpenik gabe"; +"settings.title.mediaSettings" = "Multimedia hobespenak"; +"settings.title.alwaysShowSensitiveTitle" = "Erakutsi beti NSFW edukia"; +"settings.title.alwaysShowSensitiveDescription" = "Erakutsi NSFW (Lanerako Egokia Izan Ez Daitekeen Edukia) gisa markatutako multimedia edukia ohartarazpenik gabe"; "settings.title.alwaysShowAltTitle" = "Erakutsi testu alternatiboa"; -"settings.title.alwaysShowAltDescription" = "Erakutsi testu alternatiboa baldin badago egoeraren xehetasunen pantailan"; +"settings.title.alwaysShowAltDescription" = "Erakutsi testu alternatiboa xehetasunen pantailan, baldin badago"; "settings.title.general" = "Orokorra"; "settings.title.applicationIcon" = "Aplikazioaren ikonoa"; "settings.title.followVernissage" = "Jarraitu Vernissage-ri"; @@ -215,17 +215,17 @@ "signin.title.signIn" = "Hasi saioa"; "signin.title.enterServerAddress" = "Sartu zerbitzariaren helbidea"; "signin.title.howToJoinLink" = "Nola batu Pixelfed-era"; -"signin.title.chooseServer" = "Edo aukeratu Pixelfez zerbitzaria"; +"signin.title.chooseServer" = "Edo aukeratu Pixelfed zerbitzaria"; "signin.title.amountOfUsers" = "%d erabiltzaile"; "signin.title.amountOStatuses" = "%d egoera"; "signin.error.communicationFailed" = "Zerbitzariarekin komunikazioak huts egin du."; // Mark: Status view. "status.navigationBar.title" = "Xehetasunak"; -"status.title.uploaded" = ""; +"status.title.uploaded" = ">"; "status.title.via" = "%@ bidez"; -"status.title.reboostedBy" = "Hauek bultzatu dute"; -"status.title.favouritedBy" = "Hauek egin dute gogoko"; +"status.title.reboostedBy" = "Bultzatu dutenak"; +"status.title.favouritedBy" = "Gogoko egin dutenak"; "status.title.openInBrowser" = "Ireki nabigatzailean"; "status.title.shareStatus" = "Partekatu egoera"; "status.title.yourStatus" = "Zure egoera"; @@ -260,7 +260,7 @@ "accounts.navigationBar.reboostedBy" = "Honek bultzatua"; "accounts.navigationBar.blocked" = "Blokeatutako kontuak"; "accounts.navigationBar.mutes" = "Mutututako kontuak"; -"accounts.title.noAccounts" = "Zoritxarrez, hemen ez dago inor."; +"accounts.title.noAccounts" = "Inor ez."; "accounts.error.loadingAccountsFailed" = "Kontuak kargatzeak huts egin du."; // Mark: Third party view. From 54f7c037b14c081d4b3546ffd577149305659951 Mon Sep 17 00:00:00 2001 From: Marcin Czachursk Date: Fri, 7 Apr 2023 09:49:19 +0200 Subject: [PATCH 16/17] #17 Show 'moments ago' instead of seconds --- Localization/en.lproj/Localizable.strings | 1 + Localization/eu.lproj/Localizable.strings | 1 + Localization/pl.lproj/Localizable.strings | 1 + Vernissage/Extensions/String+Date.swift | 10 ++++++++-- 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Localization/en.lproj/Localizable.strings b/Localization/en.lproj/Localizable.strings index 5775a4e..611a6f2 100644 --- a/Localization/en.lproj/Localizable.strings +++ b/Localization/en.lproj/Localizable.strings @@ -2,6 +2,7 @@ "global.title.contentWarning" = "Sensitive content"; "global.title.seePost" = "See post"; "global.title.refresh" = "Refresh"; +"global.title.momentsAgo" = "moments ago"; // MARK: Global errors. "global.error.unexpected" = "Unexpected error."; diff --git a/Localization/eu.lproj/Localizable.strings b/Localization/eu.lproj/Localizable.strings index b72347c..77c000e 100644 --- a/Localization/eu.lproj/Localizable.strings +++ b/Localization/eu.lproj/Localizable.strings @@ -2,6 +2,7 @@ "global.title.contentWarning" = "Eduki hunkigarria"; "global.title.seePost" = "Ikusi bidalketa"; "global.title.refresh" = "Freskatu"; +"global.title.momentsAgo" = "moments ago"; // MARK: Global errors. "global.error.unexpected" = "Espero ez zen errorea."; diff --git a/Localization/pl.lproj/Localizable.strings b/Localization/pl.lproj/Localizable.strings index 244e6b2..520623a 100644 --- a/Localization/pl.lproj/Localizable.strings +++ b/Localization/pl.lproj/Localizable.strings @@ -2,6 +2,7 @@ "global.title.contentWarning" = "Wrażliwe treści"; "global.title.seePost" = "Pokaż zdjęcie"; "global.title.refresh" = "Odśwież"; +"global.title.momentsAgo" = "chwilę temu"; // MARK: Global errors. "global.error.unexpected" = "Wystąpił nieoczekiwany błąd."; diff --git a/Vernissage/Extensions/String+Date.swift b/Vernissage/Extensions/String+Date.swift index 0ac3e3f..8e52729 100644 --- a/Vernissage/Extensions/String+Date.swift +++ b/Vernissage/Extensions/String+Date.swift @@ -103,9 +103,15 @@ extension String { } func toRelative(_ format: DateFormatType = .isoDate) -> String { - let formatter = RelativeDateTimeFormatter() - let date = self.toDate(format) ?? Date() + guard let date = self.toDate(format) else { + return NSLocalizedString("global.title.momentsAgo", comment: "moments ago") + } + if date.addingTimeInterval(60) > Date.now { + return NSLocalizedString("global.title.momentsAgo", comment: "moments ago") + } + + let formatter = RelativeDateTimeFormatter() return formatter.localizedString(for: date, relativeTo: Date.now) } } From 4871867aca47b3c6f79574ab383fa612a677b8b8 Mon Sep 17 00:00:00 2001 From: Marcin Czachursk Date: Fri, 7 Apr 2023 10:51:02 +0200 Subject: [PATCH 17/17] Change image of top navigation button --- Vernissage/ViewModifiers/NavigationMenu.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Vernissage/ViewModifiers/NavigationMenu.swift b/Vernissage/ViewModifiers/NavigationMenu.swift index 3b73e0b..241345e 100644 --- a/Vernissage/ViewModifiers/NavigationMenu.swift +++ b/Vernissage/ViewModifiers/NavigationMenu.swift @@ -60,11 +60,11 @@ private struct NavigationMenu: ViewModifier where MenuItems: View { self.menuItems() } label: { - Image(systemName: "line.3.horizontal.circle") + Image(systemName: "line.3.horizontal") .resizable() .foregroundColor(.mainTextColor.opacity(0.8)) .shadow(radius: 5) - .padding(8) + .padding(12) .frame(width: 44, height: 44) .background(.ultraThinMaterial) .clipShape(Circle())