diff --git a/ios/BetterRail.xcodeproj/project.pbxproj b/ios/BetterRail.xcodeproj/project.pbxproj index 61ddf2971..4135deee0 100644 --- a/ios/BetterRail.xcodeproj/project.pbxproj +++ b/ios/BetterRail.xcodeproj/project.pbxproj @@ -24,6 +24,7 @@ C17FA4C12709EFBB003797D9 /* WatchBetterRail Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = C17FA4C02709EFBB003797D9 /* WatchBetterRail Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; C17FA4D32709EFBC003797D9 /* WatchBetterRail.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = C17FA4B72709EFBB003797D9 /* WatchBetterRail.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; C183229A270DF49100A44771 /* StationImageBackground.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1832299270DF49100A44771 /* StationImageBackground.swift */; }; + C1B3FCF3271EEFFA000F33AE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = C1B3FCF5271EEFFA000F33AE /* Localizable.strings */; }; C1E62DD8270EE24C0067F262 /* StationListItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1E62DD7270EE24C0067F262 /* StationListItem.swift */; }; C1E62DDA270EE2690067F262 /* TrainStopListItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1E62DD9270EE2690067F262 /* TrainStopListItem.swift */; }; C1E62DDC270EE28B0067F262 /* TrainExchangeListItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1E62DDB270EE28B0067F262 /* TrainExchangeListItem.swift */; }; @@ -135,6 +136,9 @@ C17FA4C02709EFBB003797D9 /* WatchBetterRail Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "WatchBetterRail Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; C17FA4D02709EFBC003797D9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; C1832299270DF49100A44771 /* StationImageBackground.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StationImageBackground.swift; sourceTree = ""; }; + C1B3FCF4271EEFFA000F33AE /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + C1B3FCF6271EEFFD000F33AE /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = ""; }; + C1B3FCF7271F25AA000F33AE /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = ""; }; C1E62DD7270EE24C0067F262 /* StationListItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StationListItem.swift; sourceTree = ""; }; C1E62DD9270EE2690067F262 /* TrainStopListItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrainStopListItem.swift; sourceTree = ""; }; C1E62DDB270EE28B0067F262 /* TrainExchangeListItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrainExchangeListItem.swift; sourceTree = ""; }; @@ -306,6 +310,7 @@ C1F61BFC2709F08200CD3D44 /* ViewModels */, C1F61C072709F08200CD3D44 /* Models */, C1F61C0C2709F08200CD3D44 /* stationsData.json */, + C1B3FCF5271EEFFA000F33AE /* Localizable.strings */, C1F61C062709F08200CD3D44 /* WatchBetterRail.swift */, C1F61C102709F08200CD3D44 /* Utilities.swift */, C17FA4D02709EFBC003797D9 /* Info.plist */, @@ -491,7 +496,7 @@ }; buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "BetterRail" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = he; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( he, @@ -551,6 +556,7 @@ buildActionMask = 2147483647; files = ( C1F61C1F2709F08200CD3D44 /* stationsData.json in Resources */, + C1B3FCF3271EEFFA000F33AE /* Localizable.strings in Resources */, C1F29D28270B2D31009B953E /* Heebo-Bold.otf in Resources */, C1F61C252709F09B00CD3D44 /* Assets.xcassets in Resources */, C1F29D2C270B2D31009B953E /* Heebo-Medium.otf in Resources */, @@ -785,6 +791,19 @@ }; /* End PBXTargetDependency section */ +/* Begin PBXVariantGroup section */ + C1B3FCF5271EEFFA000F33AE /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + C1B3FCF4271EEFFA000F33AE /* en */, + C1B3FCF6271EEFFD000F33AE /* he */, + C1B3FCF7271F25AA000F33AE /* ar */, + ); + name = Localizable.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + /* Begin XCBuildConfiguration section */ 00E356F61AD99517003FC87E /* Debug */ = { isa = XCBuildConfiguration; @@ -837,7 +856,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 8; + CURRENT_PROJECT_VERSION = 10; DEVELOPMENT_TEAM = UE6BVYPPFX; ENABLE_BITCODE = NO; INFOPLIST_FILE = BetterRail/Info.plist; @@ -866,7 +885,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 8; + CURRENT_PROJECT_VERSION = 10; DEVELOPMENT_TEAM = UE6BVYPPFX; INFOPLIST_FILE = BetterRail/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; @@ -1015,7 +1034,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 8; + CURRENT_PROJECT_VERSION = 10; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = UE6BVYPPFX; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -1052,7 +1071,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 8; + CURRENT_PROJECT_VERSION = 10; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = UE6BVYPPFX; GCC_C_LANGUAGE_STANDARD = gnu11; @@ -1083,7 +1102,7 @@ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 8; + CURRENT_PROJECT_VERSION = 10; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = UE6BVYPPFX; ENABLE_PREVIEWS = YES; @@ -1118,7 +1137,7 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_STYLE = Automatic; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 8; + CURRENT_PROJECT_VERSION = 10; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = UE6BVYPPFX; ENABLE_PREVIEWS = YES; diff --git a/ios/BetterRail.xcodeproj/xcshareddata/xcschemes/WatchBetterRail (Complication).xcscheme b/ios/BetterRail.xcodeproj/xcshareddata/xcschemes/WatchBetterRail (Complication).xcscheme index 7ee136016..4d251d323 100644 --- a/ios/BetterRail.xcodeproj/xcshareddata/xcschemes/WatchBetterRail (Complication).xcscheme +++ b/ios/BetterRail.xcodeproj/xcshareddata/xcschemes/WatchBetterRail (Complication).xcscheme @@ -55,8 +55,10 @@ debugServiceExtension = "internal" allowLocationSimulation = "YES" launchAutomaticallySubstyle = "32"> - + - + - + - + + + + + diff --git a/ios/BetterRail.xcodeproj/xcshareddata/xcschemes/WatchBetterRail.xcscheme b/ios/BetterRail.xcodeproj/xcshareddata/xcschemes/WatchBetterRail.xcscheme index 7c0d3860b..e26afa214 100644 --- a/ios/BetterRail.xcodeproj/xcshareddata/xcschemes/WatchBetterRail.xcscheme +++ b/ios/BetterRail.xcodeproj/xcshareddata/xcschemes/WatchBetterRail.xcscheme @@ -54,8 +54,10 @@ debugDocumentVersioning = "YES" debugServiceExtension = "internal" allowLocationSimulation = "YES"> - + - + - + - + + + + + diff --git a/ios/BetterRail/Info.plist b/ios/BetterRail/Info.plist index 3d54a2483..eda5f31fd 100644 --- a/ios/BetterRail/Info.plist +++ b/ios/BetterRail/Info.plist @@ -5,10 +5,7 @@ CFBundleAllowMixedLocalizations true CFBundleDevelopmentRegion - - he - en - + en CFBundleDisplayName Better Rail CFBundleExecutable diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 55d74100e..4b6deb9b4 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -405,7 +405,7 @@ PODS: - React - RNWatch (1.0.4): - React - - ToastHybrid (2.4.0): + - ToastHybrid (2.4.5): - React - UMCore (7.1.2) - UMReactNativeAdapter (6.3.9): @@ -694,7 +694,7 @@ SPEC CHECKSUMS: RNSharedElement: 87baf6d04da5b068f000dd8c953d28a1196999c0 RNSVG: ce9d996113475209013317e48b05c21ee988d42e RNWatch: 99637948ec9b5c9ec5a41920642594ad5ba07e80 - ToastHybrid: c5ad7ee8ac15b41da0b714a1b250b3f3fc7d5fa6 + ToastHybrid: 432381039a804a60e142ebaa7af8290e236c288e UMCore: ce3a4faa010239063b8343895b29a6d97b01069d UMReactNativeAdapter: d03cefd0e4e4179ab8c490408589f1c8a6c8b785 Yoga: c11abbf5809216c91fcd62f5571078b83d9b6720 diff --git a/ios/WatchBetterRail Extension/Models/FavoritesModel.swift b/ios/WatchBetterRail Extension/Models/FavoritesModel.swift index 6f90e2cad..7db79e66e 100644 --- a/ios/WatchBetterRail Extension/Models/FavoritesModel.swift +++ b/ios/WatchBetterRail Extension/Models/FavoritesModel.swift @@ -9,6 +9,7 @@ struct FavoriteRoute: Identifiable { #if DEBUG let fav = FavoriteRoute(id: 0, origin: stations[2], destination: stations[65]) +let fav2 = FavoriteRoute(id: 1, origin: stations[6], destination: stations[8]) #endif struct FavoritesModel { @@ -40,7 +41,7 @@ struct FavoritesModel { self.routes = favoriteRoutes #if DEBUG - self.routes = [fav] + self.routes = [fav, fav2] #endif } } diff --git a/ios/WatchBetterRail Extension/Models/RouteModel.swift b/ios/WatchBetterRail Extension/Models/RouteModel.swift index 4be77ee2e..6a7de676d 100644 --- a/ios/WatchBetterRail Extension/Models/RouteModel.swift +++ b/ios/WatchBetterRail Extension/Models/RouteModel.swift @@ -77,6 +77,7 @@ struct RouteModel { /// Today's date, formatted properly for Israel Railways API endpoint static private var todayDate: String { let dateFormatter = DateFormatter() + dateFormatter.locale = Locale(identifier: "en_us") dateFormatter.dateFormat = "YYYYMMdd" return dateFormatter.string(from: Date()) } diff --git a/ios/WatchBetterRail Extension/Models/StationModel.swift b/ios/WatchBetterRail Extension/Models/StationModel.swift index 9f9f61314..ac682681d 100644 --- a/ios/WatchBetterRail Extension/Models/StationModel.swift +++ b/ios/WatchBetterRail Extension/Models/StationModel.swift @@ -1,38 +1,52 @@ import Foundation -struct Station: Codable, Hashable, Identifiable { +/// Used for decoding the station name according to the device locale. +let userLocale = getUserLocale() +struct Station: Decodable, Hashable, Identifiable { let id: String let name: String - let image: String? + let image: String? + + init(from decoder: Decoder) throws { + let values = try decoder.container(keyedBy: CodingKeys.self) + id = try values.decode(String.self, forKey: .id) + name = try values.decode(String.self, forKey: CodingKeys(rawValue: userLocale)!) + + if (values.contains(.image)) { + image = try values.decode(String.self, forKey: .image) + } else { + image = nil + } + } enum CodingKeys : String, CodingKey { case id, image - case name = "hebrew" + case hebrew, arabic, english } - } +} var stations: [Station] = load("stationsData.json") func load(_ filename: String) -> T { - let data: Data + let data: Data - guard let file = Bundle.main.url(forResource: filename, withExtension: nil) - else { - fatalError("Couldn't find \(filename) in main bundle.") + guard let file = Bundle.main.url(forResource: filename, withExtension: nil) + else { + fatalError("Couldn't find \(filename) in main bundle.") } - do { - data = try Data(contentsOf: file) - } catch { - fatalError("Couldn't load \(filename) from main bundle:\n\(error)") - } + do { + data = try Data(contentsOf: file) + } catch { + fatalError("Couldn't load \(filename) from main bundle:\n\(error)") + } - do { - let decoder = JSONDecoder() - return try decoder.decode(T.self, from: data) - } catch { - fatalError("Couldn't parse \(filename) as \(T.self):\n\(error)") - } + do { + let decoder = JSONDecoder() + return try decoder.decode(T.self, from: data) + } catch { + fatalError("Couldn't parse \(filename) as \(T.self):\n\(error)") + } } func getStationById(_ id: String) -> Station? { diff --git a/ios/WatchBetterRail Extension/Utilities.swift b/ios/WatchBetterRail Extension/Utilities.swift index 9cac90c1f..4ca0207ef 100644 --- a/ios/WatchBetterRail Extension/Utilities.swift +++ b/ios/WatchBetterRail Extension/Utilities.swift @@ -1,14 +1,6 @@ -// -// Utilities.swift -// BetterRail -// -// Created by Guy Tepper on 31/07/2021. -// - import Foundation func formatRouteHour(_ dateString: String) -> String { - let formatter = DateFormatter() formatter.dateFormat = "dd/MM/yyyy HH:mm:ss" formatter.timeZone = TimeZone(abbreviation: "UTC") @@ -25,3 +17,24 @@ func formatRouteHour(_ dateString: String) -> String { } } +enum SupportedLanguages: String { + case english, hebrew, arabic +} + +/// Returns the user perferred locale, lowercased. +/// +/// Available options are `english`, `hebrew` and `arabic` +/// Defaults to `english`. +func getUserLocale() -> String { + let langCode = Bundle.main.preferredLocalizations[0] + let usLocale = Locale(identifier: "en-US") + var langName = "english" + + if let languageName = usLocale.localizedString(forLanguageCode: langCode)?.lowercased() { + if SupportedLanguages(rawValue: languageName) != nil { + langName = languageName + } + } + + return langName +} diff --git a/ios/WatchBetterRail Extension/Views/FavoriteItemView.swift b/ios/WatchBetterRail Extension/Views/FavoriteItemView.swift index 01ea94cd0..e2533a1ad 100644 --- a/ios/WatchBetterRail Extension/Views/FavoriteItemView.swift +++ b/ios/WatchBetterRail Extension/Views/FavoriteItemView.swift @@ -10,8 +10,9 @@ struct FavoriteItemView: View { Spacer() Text(origin.name).font(Font.custom("Heebo", size: 16)).fontWeight(.medium).padding(.bottom, -6) + HStack(alignment: .center) { - Image(systemName: "arrow.left.circle.fill").font(.system(size: 12)) + Image(systemName: "arrow.forward.circle.fill").font(.system(size: 12)) Text(destination.name).font(Font.custom("Heebo", size: 12)) } } diff --git a/ios/WatchBetterRail Extension/Views/FavoritesView.swift b/ios/WatchBetterRail Extension/Views/FavoritesView.swift index 35d7a5a2b..5dc4c3e5f 100644 --- a/ios/WatchBetterRail Extension/Views/FavoritesView.swift +++ b/ios/WatchBetterRail Extension/Views/FavoritesView.swift @@ -30,8 +30,8 @@ struct FavoritesView: View { var emptyPlaceholder: some View = VStack(alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/) { Image(systemName: "star.fill").padding(.vertical, 2.0).font(.system(size: 32)) - Text("אין מועדפים").font(.headline) - Text("ניתן להוסיף מסלולים מועדפים דרך האייפון") + Text("no-favorites").font(.headline) + Text("no-favorites-message") .font(.footnote) .foregroundColor(.gray) .multilineTextAlignment(.center) diff --git a/ios/WatchBetterRail Extension/Views/RoutesView.swift b/ios/WatchBetterRail Extension/Views/RoutesView.swift index b6c8b882b..268d5b981 100644 --- a/ios/WatchBetterRail Extension/Views/RoutesView.swift +++ b/ios/WatchBetterRail Extension/Views/RoutesView.swift @@ -7,15 +7,15 @@ struct RoutesView: View { var body: some View { VStack { HStack { - Text("יציאה").foregroundColor(Color.gray) + Text("departure").foregroundColor(Color.gray) Spacer() - Text("הגעה").foregroundColor(Color.gray) + Text("arrival").foregroundColor(Color.gray) }.font(Font.custom("Heebo", size: 16)) if (route.loading) { ProgressView().progressViewStyle(CircularProgressViewStyle()) } else if (route.trains.count == 0) { Image(systemName: "tram").padding(.vertical, 2.0).font(.system(size: 24)) - Text("לא נמצאו רכבות להיום").font(Font.custom("Heebo", size: 14)) + Text("no-trains-found").font(Font.custom("Heebo", size: 14)) Spacer() } else { List (0 ..< route.trains.count) { index in @@ -28,7 +28,7 @@ struct RoutesView: View { HStack { Text(formatRouteHour(trainDetails[0].departureTime)) Spacer() - Image(systemName: "arrow.left") + Image(systemName: "arrow.forward") Spacer() Text(formatRouteHour(trainDetails[route.trains[index].train.count - 1].arrivalTime)) } diff --git a/ios/WatchBetterRail Extension/Views/TrainDetailsViews/StationListItem.swift b/ios/WatchBetterRail Extension/Views/TrainDetailsViews/StationListItem.swift index 781b06687..23f4f5d7b 100644 --- a/ios/WatchBetterRail Extension/Views/TrainDetailsViews/StationListItem.swift +++ b/ios/WatchBetterRail Extension/Views/TrainDetailsViews/StationListItem.swift @@ -26,13 +26,17 @@ struct StationListItem: View { var body: some View { VStack(alignment: .leading) { - Text(time).font(Font.custom("Heebo", size: 16)).fontWeight(.bold) - Text(stationName).font(Font.custom("Heebo", size: 18)).fontWeight(.medium) + Text(time) + .font(Font.custom("Heebo", size: 16)).fontWeight(.bold) + Text(stationName) + .font(Font.custom("Heebo", size: 18)).fontWeight(.medium) if trainNumber != nil { - Text("רציף \(platform)・רכבת מס׳ \(trainNumber!)").font(Font.custom("Heebo", size: 14)) + Text("train \(trainNumber!) platform \(platform)") + .font(Font.custom("Heebo", size: 14)) } else { - Text("רציף \(platform)").font(Font.custom("Heebo", size: 14)) + Text("platform \(platform)") + .font(Font.custom("Heebo", size: 14)) } }.listRowBackground(StationImageBackground(imageName)) } diff --git a/ios/WatchBetterRail Extension/Views/TrainDetailsViews/TrainExchangeListItem.swift b/ios/WatchBetterRail Extension/Views/TrainDetailsViews/TrainExchangeListItem.swift index 47ed73c82..f1fd9c62c 100644 --- a/ios/WatchBetterRail Extension/Views/TrainDetailsViews/TrainExchangeListItem.swift +++ b/ios/WatchBetterRail Extension/Views/TrainDetailsViews/TrainExchangeListItem.swift @@ -8,10 +8,11 @@ struct TrainExchangeListItem: View { var body: some View { VStack(alignment: .leading) { - ZStack(alignment: .leading) { - Text("\(Image(systemName: "arrow.left.arrow.right.circle.fill")) החלפה") - .fontWeight(.semibold).foregroundColor(.accentColor) - } + HStack(alignment: .center) { + Image(systemName: "arrow.forward.circle.fill") + Text("exchange").fontWeight(.semibold) + }.foregroundColor(.accentColor) + VStack(alignment: .leading) { Text(time).font(Font.custom("Heebo", size: 16)).fontWeight(.bold) @@ -20,12 +21,11 @@ struct TrainExchangeListItem: View { HStack { Image(systemName: "exclamationmark.circle.fill").foregroundColor(.orange) if (arrivalPlatform == departurePlatform) { - Text("יש להשאר ברציף \(departurePlatform)") + Text("stay-at \(departurePlatform)") } else { - Text("יש לעבור אל רציף \(departurePlatform)") + Text("move-to \(departurePlatform)") } } - } }.font(Font.custom("Heebo", size: 14)) diff --git a/ios/WatchBetterRail Extension/ar.lproj/Localizable.strings b/ios/WatchBetterRail Extension/ar.lproj/Localizable.strings new file mode 100644 index 000000000..267b5aa1f --- /dev/null +++ b/ios/WatchBetterRail Extension/ar.lproj/Localizable.strings @@ -0,0 +1,14 @@ +"no-favorites" = "لا مفضلات"; +"no-favorites-message" = "يمكنك إضافة مفضلات من جهاز iPhone الخاص بك"; +"no-trains-found" = "لا توجد قطارات لهذا اليوم"; + +"departure" = "انطلاق"; +"arrival" = "وصول"; + +"train %@" = "قطار رقم %@"; +"platform %@" = "رصيف %@"; +"train %@ platform %@" = "قطار رقم %@ ・ رصيف %@"; + +"exchange" = "تبديل"; +"stay-at %@" = "الرجاء الانتظار في الرصيف %@"; +"move-to %@" = "الرجاء الانتقال الى رصيف %@"; diff --git a/ios/WatchBetterRail Extension/en.lproj/Localizable.strings b/ios/WatchBetterRail Extension/en.lproj/Localizable.strings new file mode 100644 index 000000000..af40f9534 --- /dev/null +++ b/ios/WatchBetterRail Extension/en.lproj/Localizable.strings @@ -0,0 +1,14 @@ +"no-favorites" = "No Favorites"; +"no-favorites-message" = "You can add favorites from your iPhone"; +"no-trains-found" = "No trains found for today"; + +"departure" = "Depart"; +"arrival" = "Arrive"; + +"train %@" = "Train %@"; +"platform %@" = "Platform %@"; +"train %@ platform %@" = "Train %@ ・ Platform %@"; + +"exchange" = "Exchange"; +"stay-at %@" = "Stay at Platform %@"; +"move-to %@" = "Move to Platform %@"; diff --git a/ios/WatchBetterRail Extension/he.lproj/Localizable.strings b/ios/WatchBetterRail Extension/he.lproj/Localizable.strings new file mode 100644 index 000000000..315368632 --- /dev/null +++ b/ios/WatchBetterRail Extension/he.lproj/Localizable.strings @@ -0,0 +1,14 @@ +"no-favorites" = "אין מועדפים"; +"no-favorites-message" = "ניתן להוסיף מסלולים מועדפים דרך האייפון"; +"no-trains-found" = "לא נמצאו רכבות להיום"; + +"departure" = "יציאה"; +"arrival" = "הגעה"; + +"train %@" = "רכבת מס' %@"; +"platform %@" = "רציף %@"; +"train %@ platform %@" = "רכבת מס' %@ ・ רציף %@"; + +"exchange" = "החלפה"; +"stay-at %@" = "יש להשאר ברציף %@"; +"move-to %@" = "יש לעבור לרציף %@"; diff --git a/ios/WatchBetterRail Extension/stationsData.json b/ios/WatchBetterRail Extension/stationsData.json index bd6da0490..ff161940b 100644 --- a/ios/WatchBetterRail Extension/stationsData.json +++ b/ios/WatchBetterRail Extension/stationsData.json @@ -2,9 +2,9 @@ { "id": "3700", "hebrew": "ת״א - סבידור", - "english": "Tel Aviv - Savidor Center", - "russian": "Тель-Авив - Мерказ - Центральная", - "arabic": "تل ابيب – ساڤيدور المركز", + "english": "Tel Aviv - Savidor", + "russian": "Тель-Авив - Мерказ", + "arabic": "تل ابيب – ساڤيدور", "image": "tlv-center" }, { @@ -34,7 +34,7 @@ { "id": "3100", "hebrew": "חדרה - מערב", - "english": "Hadera-West", + "english": "Hadera - West", "russian": "Хадера - Маарав", "arabic": "الخضيرة - غرب" }, @@ -47,10 +47,10 @@ }, { "id": "2820", - "hebrew": "קיסריה - פרדס חנה", - "english": "Caesarea-Pardes Hana", - "russian": "Кейсария - Пардес-Хана", - "arabic": "قيساريا - بارديس حنا" + "hebrew": "קיסריה", + "english": "Caesarea", + "russian": "Кейсария", + "arabic": "بارديس حنا" }, { "id": "2500", @@ -62,7 +62,7 @@ { "id": "2200", "hebrew": "חיפה - בת גלים", - "english": "Haifa-Bat Galim", + "english": "Haifa - Bat Galim", "russian": "Хайфа - Бат-Галим", "arabic": "حيفا - بات چاليم", "image": "bat-galim" @@ -102,6 +102,7 @@ "hebrew": "חיפה - חוף הכרמל", "english": "Haifa - Hof HaKarmel", "russian": "Хайфа Хоф ха - Кармель", + "arabic": "حيفا - شاطئ الكرمل", "image": "hof-hakarmel" }, { @@ -142,8 +143,8 @@ }, { "id": "7300", - "hebrew": "באר שבע- צפון/אוניברסיטה", - "english": "Be'er Sheva-North/University", + "hebrew": "באר שבע- אוניברסיטה", + "english": "Be'er Sheva - University", "russian": "Беер-Шева Цафон", "arabic": "بئر السبع - شمال/الجامعة", "image": "beer-sheva-university" @@ -166,8 +167,9 @@ { "id": "2100", "hebrew": "מרכז השמונה", - "english": "Haifa Center - HaShmona", - "russian": "Хайфа - Мерказ - Центральная" + "english": "Haifa - HaShmona", + "russian": "Хайфа - Мерказ - Центральная", + "arabic": "حيفا المركز - هشمونا" }, { "id": "5010", @@ -201,14 +203,14 @@ { "id": "5410", "hebrew": "יבנה מזרח", - "english": "Yavne-East", + "english": "Yavne - East", "russian": "Явне-Восток", "arabic": "ياڤنه - شرق" }, { "id": "9100", "hebrew": "ראשל״צ - הראשונים", - "english": "Rishon LeTsiyon - HaRishonim", + "english": "Rishon - HaRishonim", "russian": "Ришон ле-Цион - Ха-Ришоним ", "arabic": "ريشون لتسيون - هريشونيم" }, @@ -221,7 +223,7 @@ }, { "id": "4250", - "hebrew": "פתח תקווה - סגולה", + "hebrew": "פ''ת - סגולה", "english": "Petah Tikva - Segula", "russian": "Петах-Тиква - Сгула", "arabic": "بيتح تكڤا - سچوله" @@ -372,7 +374,7 @@ { "id": "9800", "hebrew": "ראשל״צ - משה דיין", - "english": "Rishon LeTsiyon - Moshe Dayan", + "english": "Rishon - Moshe Dayan", "russian": "Ришон-Ле-Цион станция им. Моше Даяна", "arabic": "ريشون لتسيون -موشي ديان", "image": "rishon-moshe-dayan" @@ -478,14 +480,14 @@ { "id": "6150", "hebrew": "קריית מלאכי - יואב", - "english": "Kiryat Malakhi – Yoav", + "english": "Kiryat Malakhi", "russian": "Кирьят Малахи-Йоав", "arabic": "كريات ملاخي – يوآڤ" }, { "id": "680", "hebrew": "ירושלים - יצחק נבון", - "english": "Jerusalem - Yitzhak Navon", + "english": "Yitzhak Navon", "russian": "Иерусалим - Ицхак Навон", "arabic": "أورشليم – يتسحاق ناڤون", "image": "jerusalem-itzhak-navon"