diff --git a/ios/circolapp/circolapp.xcodeproj/project.pbxproj b/ios/circolapp/circolapp.xcodeproj/project.pbxproj index bda50d9..6f5e1ab 100644 --- a/ios/circolapp/circolapp.xcodeproj/project.pbxproj +++ b/ios/circolapp/circolapp.xcodeproj/project.pbxproj @@ -12,7 +12,6 @@ 950C1788258E5BD300B2DBFE /* PhoneView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 950C1787258E5BD300B2DBFE /* PhoneView.swift */; }; 9512D3C1257AB4F60023C3A1 /* NewReminderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9512D3C0257AB4F60023C3A1 /* NewReminderView.swift */; }; 952DEDDF2576F8DC001DF85D /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 952DEDDE2576F8DC001DF85D /* SceneDelegate.swift */; }; - 953DDE7E2580312500C457CE /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 953DDE7D2580312500C457CE /* LaunchScreen.storyboard */; }; 954AF8F62588A5C300666D0C /* CircularList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 954AF8F52588A5C300666D0C /* CircularList.swift */; }; 954AF8F82588A5CF00666D0C /* FavouritesList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 954AF8F72588A5CF00666D0C /* FavouritesList.swift */; }; 954AF8FA2588A5DD00666D0C /* RemindersList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 954AF8F92588A5DD00666D0C /* RemindersList.swift */; }; @@ -24,6 +23,8 @@ 9554BDB8257E498F00D8925B /* OnboardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9554BDB7257E498F00D8925B /* OnboardingView.swift */; }; 955B7A0E257D098C0091B1F9 /* SearchBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 955B7A0D257D098C0091B1F9 /* SearchBar.swift */; }; 955B7A10257D10A70091B1F9 /* ViewControllerResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 955B7A0F257D10A70091B1F9 /* ViewControllerResolver.swift */; }; + 955B984D25962C3800ED4831 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 955B984F25962C3800ED4831 /* Localizable.strings */; }; + 953DDE7E2580312500C457CE /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 953DDE7D2580312500C457CE /* LaunchScreen.storyboard */; }; 95906F48257508660060F5D0 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 95906F47257506360060F5D0 /* Assets.xcassets */; }; 95906F4D257510370060F5D0 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 95906F4C257510370060F5D0 /* GoogleService-Info.plist */; }; 95B4CE142588BC890090D5E8 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95B4CE132588BC890090D5E8 /* SettingsView.swift */; }; @@ -63,7 +64,6 @@ 9512D3C0257AB4F60023C3A1 /* NewReminderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewReminderView.swift; sourceTree = ""; }; 952C5954255C57650018C010 /* shared.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = shared.framework; path = "../../shared/build/xcode-frameworks/shared.framework"; sourceTree = ""; }; 952DEDDE2576F8DC001DF85D /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; }; - 953DDE7D2580312500C457CE /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; 954AF8F52588A5C300666D0C /* CircularList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CircularList.swift; sourceTree = ""; }; 954AF8F72588A5CF00666D0C /* FavouritesList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FavouritesList.swift; sourceTree = ""; }; 954AF8F92588A5DD00666D0C /* RemindersList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemindersList.swift; sourceTree = ""; }; @@ -75,6 +75,9 @@ 9554BDB7257E498F00D8925B /* OnboardingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingView.swift; sourceTree = ""; }; 955B7A0D257D098C0091B1F9 /* SearchBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchBar.swift; sourceTree = ""; }; 955B7A0F257D10A70091B1F9 /* ViewControllerResolver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewControllerResolver.swift; sourceTree = ""; }; + 955B984E25962C3800ED4831 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + 955B985025962C3B00ED4831 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; + 953DDE7D2580312500C457CE /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = ""; }; 95906F47257506360060F5D0 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 95906F4C257510370060F5D0 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; 959B531E25764726009AD895 /* circolapp.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = circolapp.entitlements; sourceTree = ""; }; @@ -195,6 +198,7 @@ 954E683C2574ED9E0034EBA8 /* UserDefaultsExtensions.swift */, 95F6666D2590D712006DE74F /* URLUtils.swift */, 953DDE7D2580312500C457CE /* LaunchScreen.storyboard */, + 955B984F25962C3800ED4831 /* Localizable.strings */, 95CA31B8255C1EE000AC095B /* Info.plist */, 95906F4C257510370060F5D0 /* GoogleService-Info.plist */, 95906F47257506360060F5D0 /* Assets.xcassets */, @@ -257,6 +261,7 @@ knownRegions = ( en, Base, + it, ); mainGroup = 95CA31A3255C1EDD00AC095B; productRefGroup = 95CA31AD255C1EDE00AC095B /* Products */; @@ -273,6 +278,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 955B984D25962C3800ED4831 /* Localizable.strings in Resources */, 95CA31B7255C1EE000AC095B /* Preview Assets.xcassets in Resources */, 95906F4D257510370060F5D0 /* GoogleService-Info.plist in Resources */, 95906F48257508660060F5D0 /* Assets.xcassets in Resources */, @@ -397,6 +403,18 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXVariantGroup section */ + 955B984F25962C3800ED4831 /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + 955B984E25962C3800ED4831 /* en */, + 955B985025962C3B00ED4831 /* it */, + ); + name = Localizable.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + /* Begin XCBuildConfiguration section */ 95CA31B9255C1EE000AC095B /* Debug */ = { isa = XCBuildConfiguration; diff --git a/ios/circolapp/circolapp/LaunchScreen.storyboard b/ios/circolapp/circolapp/LaunchScreen.storyboard index 47b6d8c..9adcf6f 100644 --- a/ios/circolapp/circolapp/LaunchScreen.storyboard +++ b/ios/circolapp/circolapp/LaunchScreen.storyboard @@ -21,10 +21,10 @@ - + - + @@ -36,10 +36,10 @@ - - - - + + + + diff --git a/ios/circolapp/circolapp/Model/iOSRepository.swift b/ios/circolapp/circolapp/Model/iOSRepository.swift index ecb14a4..ec31a36 100644 --- a/ios/circolapp/circolapp/Model/iOSRepository.swift +++ b/ios/circolapp/circolapp/Model/iOSRepository.swift @@ -63,7 +63,7 @@ class iOSRepository { public static func indexToSpotlight(circular: Circular) { let attributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeText as String) - attributeSet.title = "Circular number \(circular.id)" + attributeSet.title = NSString.localizedStringWithFormat(NSLocalizedString("Circular number %@", comment: "") as NSString, String(circular.id)) as String attributeSet.contentDescription = circular.name attributeSet.identifier = "\(circular.id)" diff --git a/ios/circolapp/circolapp/View/CircularView.swift b/ios/circolapp/circolapp/View/CircularView.swift index b1d2a61..f4c2bb1 100644 --- a/ios/circolapp/circolapp/View/CircularView.swift +++ b/ios/circolapp/circolapp/View/CircularView.swift @@ -30,7 +30,7 @@ struct CircularView: View { var body: some View { VStack(alignment: .leading) { HStack { - Text("Circular number " + String(circular.id)) + Text("Circular number \(String(circular.id))") .font(.headline) Text(circular.date) .font(.subheadline) diff --git a/ios/circolapp/circolapp/View/FavouritesList.swift b/ios/circolapp/circolapp/View/FavouritesList.swift index 47a2d48..7de9be5 100644 --- a/ios/circolapp/circolapp/View/FavouritesList.swift +++ b/ios/circolapp/circolapp/View/FavouritesList.swift @@ -26,7 +26,7 @@ struct FavouritesList: View { List(favouritesViewModel.circulars, id: \.id) { circular in CircularView(circular: circular) } - .navigationBarTitle(Text("Favourites"), displayMode: .large) + .navigationBarTitle(Text("Bookmarks"), displayMode: .large) .addSearchBar(self.searchBar) .onReceive(searchBar.$text) {query in self.favouritesViewModel.search(query: query) diff --git a/ios/circolapp/circolapp/View/NewReminderView.swift b/ios/circolapp/circolapp/View/NewReminderView.swift index 669cca4..86d5d5a 100644 --- a/ios/circolapp/circolapp/View/NewReminderView.swift +++ b/ios/circolapp/circolapp/View/NewReminderView.swift @@ -50,7 +50,7 @@ struct NewReminderView: View { let center = UNUserNotificationCenter.current() let content = UNMutableNotificationContent() - content.title = "Circular number " + String(circular.id) + content.title = NSString.localizedStringWithFormat(NSLocalizedString("Circular number %@", comment: "") as NSString, String(circular.id)) as String content.body = circular.name content.sound = UNNotificationSound.default content.userInfo["reminder"] = true diff --git a/ios/circolapp/circolapp/View/PhoneView.swift b/ios/circolapp/circolapp/View/PhoneView.swift index 18c7ff6..df21e12 100644 --- a/ios/circolapp/circolapp/View/PhoneView.swift +++ b/ios/circolapp/circolapp/View/PhoneView.swift @@ -36,7 +36,7 @@ struct PhoneView: View { } .tabItem { Image(systemName: "book.fill") - Text("Favourites") + Text("Bookmarks") } NavigationView { diff --git a/ios/circolapp/circolapp/View/SearchBar.swift b/ios/circolapp/circolapp/View/SearchBar.swift index e66de81..3fe1b49 100644 --- a/ios/circolapp/circolapp/View/SearchBar.swift +++ b/ios/circolapp/circolapp/View/SearchBar.swift @@ -11,7 +11,7 @@ class SearchBar: NSObject, ObservableObject { self.searchController.obscuresBackgroundDuringPresentation = false self.searchController.searchResultsUpdater = self - self.searchController.searchBar.placeholder = placeholder + self.searchController.searchBar.placeholder = NSLocalizedString(placeholder, comment: "") } } diff --git a/ios/circolapp/circolapp/View/SettingsView.swift b/ios/circolapp/circolapp/View/SettingsView.swift index 27b3c7c..562790f 100644 --- a/ios/circolapp/circolapp/View/SettingsView.swift +++ b/ios/circolapp/circolapp/View/SettingsView.swift @@ -52,26 +52,19 @@ struct SettingsView: View { }) { Text("Privacy policy") } - HStack { - Text("Version name") - Spacer() - Text( - Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "Error" - ) - } - HStack { - Text("Version code") - Spacer() - Text( - Bundle.main.infoDictionary?["CFBundleVersion"] as? String ?? "Error" - ) - } NavigationLink(destination: CarteView() .navigationBarTitle("Open source licenses", displayMode: .inline) ) { Text("Open source licenses") } + HStack { + Text("Version") + Spacer() + Text( + Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "Error" + ) + } } } .navigationBarTitle("Settings", displayMode: .inline) diff --git a/ios/circolapp/circolapp/View/SidebarView.swift b/ios/circolapp/circolapp/View/SidebarView.swift index 2fa9500..5e7bc56 100644 --- a/ios/circolapp/circolapp/View/SidebarView.swift +++ b/ios/circolapp/circolapp/View/SidebarView.swift @@ -36,7 +36,7 @@ struct SidebarView: View { tag: Screen.favourites, selection: $state, label: { - Label("Favourites", systemImage: "book") + Label("Bookmarks", systemImage: "book") }) NavigationLink( destination: RemindersList(), diff --git a/ios/circolapp/circolapp/en.lproj/Localizable.strings b/ios/circolapp/circolapp/en.lproj/Localizable.strings new file mode 100644 index 0000000..4a1e141 --- /dev/null +++ b/ios/circolapp/circolapp/en.lproj/Localizable.strings @@ -0,0 +1,47 @@ +/* + * Circolapp + * Copyright (C) 2019-2020 Matteo Schiff + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +"All circulars" = "All circulars"; +"Circulars" = "Circulars"; +"Bookmarks" = "Bookmarks"; +"Reminders" = "Reminders"; +"Settings" = "Settings"; + +"School" = "School"; +"School website" = "School website"; +"Privacy policy" = "Privacy policy"; +"Error" = "Error"; +"Version" = "Version"; +"Open source licenses" = "Open source licenses"; + +"Search circulars" = "Search circulars"; + +"GENERAL" = "GENERAL"; +"SCHOOL" = "SCHOOL"; +"ABOUT" = "ABOUT"; + +"Done" = "Done"; +"Cancel" = "Cancel"; + +"Choose your school" = "Choose your school"; +"Welcome to CircolApp" = "Welcome to CircolApp"; + +"Pick a date for the reminder" = "Pick a date for the reminder"; +"New reminder" = "New reminder"; + +"Circular number %@" = "Circular number %@"; diff --git a/ios/circolapp/circolapp/it.lproj/Localizable.strings b/ios/circolapp/circolapp/it.lproj/Localizable.strings new file mode 100644 index 0000000..07418dc --- /dev/null +++ b/ios/circolapp/circolapp/it.lproj/Localizable.strings @@ -0,0 +1,47 @@ +/* + * Circolapp + * Copyright (C) 2019-2020 Matteo Schiff + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +"All circulars" = "Tutte le circolari"; +"Circulars" = "Circolari"; +"Bookmarks" = "Segnalibri"; +"Reminders" = "Promemoria"; +"Settings" = "Impostazioni"; + +"School" = "Scuola"; +"School website" = "Sito della scuola"; +"Privacy policy" = "Privacy policy"; +"Error" = "Errore"; +"Version" = "Versione"; +"Open source licenses" = "Licenze open source"; + +"Search circulars" = "Cerca"; + +"GENERAL" = "GENERALE"; +"SCHOOL" = "SCUOLA"; +"ABOUT" = "INFORMAZIONI"; + +"Done" = "Fatto"; +"Cancel" = "Annulla"; + +"Choose your school" = "Scegli la tua scuola"; +"Welcome to CircolApp" = "Benvenuto su Circolapp"; + +"Pick a date for the reminder" = "Scegli una data per il promemoria"; +"New reminder" = "Nuovo promemoria"; + +"Circular number %@" = "Circolare numero %@";