From 84a994cb7fcc96597538810b725425d18bfeec92 Mon Sep 17 00:00:00 2001 From: Selim Mustafaev Date: Wed, 9 Dec 2020 00:14:54 +0300 Subject: [PATCH] More localization. More context menus. --- AutoCat.xcodeproj/project.pbxproj | 6 +- .../xcschemes/xcschememanagement.plist | 18 ++-- AutoCat/Controllers/FiltersController.swift | 2 +- .../Location/EventsController.swift | 30 ++++-- .../Location/GlobalEventsController.swift | 2 +- .../Location/LocationEditController.swift | 4 +- .../Osago/OsagoAddController.swift | 12 +-- .../Controllers/Osago/OsagoController.swift | 2 +- AutoCat/Controllers/RecordsController.swift | 93 ++++++++++++++----- AutoCat/Controllers/ReportController.swift | 2 +- AutoCat/en.lproj/Localizable.strings | 7 ++ AutoCat/en.lproj/Localizable.stringsdict | 72 ++++++++++++++ AutoCat/ru.lproj/Localizable.strings | 44 ++++++++- AutoCat/ru.lproj/Localizable.stringsdict | 66 +++++++++++++ 14 files changed, 304 insertions(+), 56 deletions(-) create mode 100644 AutoCat/en.lproj/Localizable.strings create mode 100644 AutoCat/en.lproj/Localizable.stringsdict create mode 100644 AutoCat/ru.lproj/Localizable.stringsdict diff --git a/AutoCat.xcodeproj/project.pbxproj b/AutoCat.xcodeproj/project.pbxproj index a5f0e5f..2a5d095 100644 --- a/AutoCat.xcodeproj/project.pbxproj +++ b/AutoCat.xcodeproj/project.pbxproj @@ -146,6 +146,7 @@ 7A3F07AA24360DC800E59687 /* Dated.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Dated.swift; sourceTree = ""; }; 7A3F07AC2436350B00E59687 /* SearchController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchController.swift; sourceTree = ""; }; 7A43F9F7246C8A6200BA5B49 /* JWT.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JWT.swift; sourceTree = ""; }; + 7A52AB292580112E002CD910 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; 7A530B7924001D3300CBFE6E /* CheckController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckController.swift; sourceTree = ""; }; 7A530B7D24017FEE00CBFE6E /* VehicleCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VehicleCell.swift; sourceTree = ""; }; 7A530B7F2401803A00CBFE6E /* Vehicle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Vehicle.swift; sourceTree = ""; }; @@ -658,6 +659,7 @@ children = ( 7A61FF8A2575A2CD00D905D5 /* Base */, 7A61FF8D2575A2F900D905D5 /* ru */, + 7A52AB292580112E002CD910 /* en */, ); name = Localizable.strings; sourceTree = ""; @@ -805,7 +807,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 58; + CURRENT_PROJECT_VERSION = 59; DEVELOPMENT_TEAM = 46DTTB8X4S; INFOPLIST_FILE = AutoCat/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; @@ -828,7 +830,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 58; + CURRENT_PROJECT_VERSION = 59; DEVELOPMENT_TEAM = 46DTTB8X4S; INFOPLIST_FILE = AutoCat/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 13.0; diff --git a/AutoCat.xcodeproj/xcuserdata/selim.xcuserdatad/xcschemes/xcschememanagement.plist b/AutoCat.xcodeproj/xcuserdata/selim.xcuserdatad/xcschemes/xcschememanagement.plist index 5b28f1c..0519d6b 100644 --- a/AutoCat.xcodeproj/xcuserdata/selim.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/AutoCat.xcodeproj/xcuserdata/selim.xcuserdatad/xcschemes/xcschememanagement.plist @@ -14,35 +14,35 @@ isShown orderHint - 2 + 6 DifferenceKit (Playground) 2.xcscheme isShown orderHint - 3 + 7 DifferenceKit (Playground).xcscheme isShown orderHint - 1 + 3 Eureka (Playground) 1.xcscheme isShown orderHint - 5 + 2 Eureka (Playground) 2.xcscheme isShown orderHint - 6 + 4 Eureka (Playground) 3.xcscheme @@ -70,7 +70,7 @@ isShown orderHint - 4 + 1 GettingStarted (Playground) 1.xcscheme @@ -112,7 +112,7 @@ isShown orderHint - 13 + 12 Rx (Playground) 1.xcscheme @@ -133,7 +133,7 @@ isShown orderHint - 7 + 5 SwiftDate (Playground) 1.xcscheme @@ -147,7 +147,7 @@ isShown orderHint - 12 + 13 SwiftDate (Playground) 3.xcscheme diff --git a/AutoCat/Controllers/FiltersController.swift b/AutoCat/Controllers/FiltersController.swift index 7d353a3..0632296 100644 --- a/AutoCat/Controllers/FiltersController.swift +++ b/AutoCat/Controllers/FiltersController.swift @@ -115,7 +115,7 @@ class FiltersController: FormViewController { row.value = self.filter.addedBy?.description ?? AddedBy.anyone.description } - form +++ Section("Time range") + form +++ Section(NSLocalizedString("Time range", comment: "")) <<< DateInlineRow("FromDate") { row in row.title = NSLocalizedString("From", comment: "") row.noValueDisplayText = NSLocalizedString("Beginning", comment: "") diff --git a/AutoCat/Controllers/Location/EventsController.swift b/AutoCat/Controllers/Location/EventsController.swift index 74cd342..c05c69e 100644 --- a/AutoCat/Controllers/Location/EventsController.swift +++ b/AutoCat/Controllers/Location/EventsController.swift @@ -61,7 +61,7 @@ class EventsController: UIViewController, UITableViewDataSource, UITableViewDele override func viewDidLoad() { super.viewDidLoad() - self.title = self.vehicle?.getNumber() ?? "Events" + self.title = self.vehicle?.getNumber() ?? NSLocalizedString("Events", comment: "") #if targetEnvironment(macCatalyst) self.map.showsZoomControls = true @@ -127,13 +127,27 @@ class EventsController: UIViewController, UITableViewDataSource, UITableViewDele // MARK: - UITableViewDelegate + func tableView(_ tableView: UITableView, contextMenuConfigurationForRowAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? { + return UIContextMenuConfiguration(identifier: nil, previewProvider: nil) { _ in + let edit = UIAction(title: NSLocalizedString("Edit", comment: ""), image: UIImage(systemName: "pencil")) { action in + self.editEvent(index: indexPath.row) + } + + let delete = UIAction(title: NSLocalizedString("Delete", comment: ""), image: UIImage(systemName: "trash"), attributes: .destructive) { action in + self.deleteEvent(index: indexPath.row) + } + + return UIMenu(title: NSLocalizedString("Actions", comment: ""), children: [edit, delete]) + } + } + func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? { - let delete = UIContextualAction(style: .destructive, title: "Delete") { action, view, completion in + let delete = UIContextualAction(style: .destructive, title: NSLocalizedString("Delete", comment: "")) { action, view, completion in self.deleteEvent(index: indexPath.row, completion: completion) } delete.image = UIImage(systemName: "trash") - let edit = UIContextualAction(style: .normal, title: "Edit") { action, view, completion in + let edit = UIContextualAction(style: .normal, title: NSLocalizedString("Edit", comment: "")) { action, view, completion in self.editEvent(index: indexPath.row) completion(true) } @@ -147,7 +161,7 @@ class EventsController: UIViewController, UITableViewDataSource, UITableViewDele // MARK: - Event actions - func deleteEvent(index: Int, completion: @escaping (Bool) -> Void) { + func deleteEvent(index: Int, completion: ((Bool) -> Void)? = nil) { guard let vehicle = self.vehicle else { HUD.flash(.labeledError(title: nil, subtitle: "Unknown vehicle")) return @@ -157,9 +171,9 @@ class EventsController: UIViewController, UITableViewDataSource, UITableViewDele if let eventId = event.id { HUD.show(.progress) Api.remove(event: eventId).observeOn(MainScheduler.instance).subscribe(onSuccess: { vehicle in - completion(self.update(vehicle: vehicle)) + completion?(self.update(vehicle: vehicle)) }, onError: { error in - completion(false) + completion?(false) HUD.show(error: error) print(error) }).disposed(by: self.bag) @@ -177,7 +191,7 @@ class EventsController: UIViewController, UITableViewDataSource, UITableViewDele let event = vehicle.events[index] let sb = UIStoryboard(name: "Main", bundle: nil) let controller = sb.instantiateViewController(identifier: "LocationEditController") as LocationEditController - controller.title = "Edit event" + controller.title = NSLocalizedString("Edit event", comment: "") controller.date = Date(timeIntervalSince1970: event.date) controller.placemark = Placemark(latitude: event.latitude, longitude: event.longitude, address: event.address) controller.onDone = { newEvent in @@ -204,7 +218,7 @@ class EventsController: UIViewController, UITableViewDataSource, UITableViewDele let sb = UIStoryboard(name: "Main", bundle: nil) let controller = sb.instantiateViewController(identifier: "LocationEditController") as LocationEditController - controller.title = "Add new event" + controller.title = NSLocalizedString("Add new event", comment: "") controller.onDone = { newEvent in self.navigationController?.popViewController(animated: true, completion: { HUD.show(.progress) diff --git a/AutoCat/Controllers/Location/GlobalEventsController.swift b/AutoCat/Controllers/Location/GlobalEventsController.swift index 7f97422..42fb12c 100644 --- a/AutoCat/Controllers/Location/GlobalEventsController.swift +++ b/AutoCat/Controllers/Location/GlobalEventsController.swift @@ -21,7 +21,7 @@ class GlobalEventsController: UIViewController { Api.events(with: self.filter) .observeOn(MainScheduler.init()) .subscribe(onSuccess: { events in - self.title = "Events found: \(events.count)" + self.title = String.localizedStringWithFormat(NSLocalizedString("events found", comment: ""), events.count) let pins = events.map(EventPin.init(event:)) self.map.removeAnnotations(self.map.annotations) self.map.addAnnotations(pins) diff --git a/AutoCat/Controllers/Location/LocationEditController.swift b/AutoCat/Controllers/Location/LocationEditController.swift index ce0632e..936da97 100644 --- a/AutoCat/Controllers/Location/LocationEditController.swift +++ b/AutoCat/Controllers/Location/LocationEditController.swift @@ -22,7 +22,7 @@ class LocationEditController: FormViewController { form +++ Section("") <<< DateTimeInlineRow(){ - $0.title = "Date and time" + $0.title = NSLocalizedString("Date and time", comment: "") $0.value = self.date }.onChange { row in if let newDate = row.value { @@ -31,7 +31,7 @@ class LocationEditController: FormViewController { } <<< LocationRow() { row in - row.title = "Location" + row.title = NSLocalizedString("Location", comment: "") row.value = self.placemark }.onChange { row in if let newPlacemark = row.value { diff --git a/AutoCat/Controllers/Osago/OsagoAddController.swift b/AutoCat/Controllers/Osago/OsagoAddController.swift index 45a1a64..f55258b 100644 --- a/AutoCat/Controllers/Osago/OsagoAddController.swift +++ b/AutoCat/Controllers/Osago/OsagoAddController.swift @@ -11,7 +11,7 @@ enum OsagoCheckSource: Equatable, CustomStringConvertible { var description: String { switch self { case .plateNumber(let number): - return "Plate number (\(number))" + return NSLocalizedString("plate number", comment: "Check by") + " (\(number))" case .vin(let number): return "VIN (\(number))" } @@ -26,21 +26,21 @@ class OsagoAddController: FormViewController { override func viewDidLoad() { super.viewDidLoad() - self.title = "OSAGO check" + self.title = NSLocalizedString("OSAGO check", comment: "") - form +++ Section("Check parameters") + form +++ Section(NSLocalizedString("Check parameters", comment: "")) <<< DateTimeInlineRow("date") { row in - row.title = "Check date" + row.title = NSLocalizedString("Check date", comment: "") row.value = Date() } <<< PickerInlineRow("SourcePicker") { row in - row.title = "Check by" + row.title = NSLocalizedString("Check by", comment: "") row.value = self.checkSources.first row.options = self.checkSources } form +++ Section() - <<< ButtonRow() { $0.title = "Check" }.onCellSelection { _, _ in + <<< ButtonRow() { $0.title = NSLocalizedString("Check", comment: "verb") }.onCellSelection { _, _ in // HUD.show(.progress) // Api.checkOsago(number: "Н133РО161", vin: nil, date: Date(), token: "") // .observeOn(MainScheduler.instance) diff --git a/AutoCat/Controllers/Osago/OsagoController.swift b/AutoCat/Controllers/Osago/OsagoController.swift index 6885154..9748913 100644 --- a/AutoCat/Controllers/Osago/OsagoController.swift +++ b/AutoCat/Controllers/Osago/OsagoController.swift @@ -12,7 +12,7 @@ class OsagoController: FormViewController { override func viewDidLoad() { super.viewDidLoad() - self.title = "OSAGO contracts" + self.title = NSLocalizedString("OSAGO contracts", comment: "") self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(checkNewDate(_:))) self.tableView.rowHeight = UITableView.automaticDimension diff --git a/AutoCat/Controllers/RecordsController.swift b/AutoCat/Controllers/RecordsController.swift index d461fe6..533beed 100644 --- a/AutoCat/Controllers/RecordsController.swift +++ b/AutoCat/Controllers/RecordsController.swift @@ -225,6 +225,45 @@ class RecordsController: UIViewController, UITableViewDelegate { // MARK: - UITableViewDelegate + func tableView(_ tableView: UITableView, contextMenuConfigurationForRowAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? { + let record = self.recordsDataSource.item(at: indexPath) + + return UIContextMenuConfiguration(identifier: nil, previewProvider: nil) { _ in + let check = UIAction(title: NSLocalizedString("Check", comment: ""), image: UIImage(systemName: "eye")) { action in + if let number = record.number { + self.check(number: number, event: record.event) + } + } + + let delete = UIAction(title: NSLocalizedString("Delete", comment: ""), image: UIImage(systemName: "trash"), attributes: .destructive) { action in + self.delete(record: record) + } + + let share = UIAction(title: NSLocalizedString("Share", comment: ""), image: UIImage(systemName: "square.and.arrow.up")) { action in + self.share(record: record) + } + + let showText = UIAction(title: NSLocalizedString("Show recognized text", comment: ""), image: UIImage(systemName: "textformat")) { action in + self.showAlert(title: NSLocalizedString("Recognized text", comment: ""), message: record.rawText) + } + + let showMap = UIAction(title: NSLocalizedString("Show on map", comment: ""), image: UIImage(systemName: "mappin.and.ellipse")) { action in + self.showOnMap(record) + } + + let edit = UIAction(title: NSLocalizedString("Edit plate number", comment: ""), image: UIImage(systemName: "pencil")) { action in + self.edit(record: record) + } + + var actions = [edit, showText, showMap, share, delete] + if record.number != nil { + actions.insert(check, at: 0) + } + + return UIMenu(title: NSLocalizedString("Actions", comment: ""), children: actions) + } + } + func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? { guard let cell = tableView.cellForRow(at: indexPath) else { return nil } @@ -247,15 +286,7 @@ class RecordsController: UIViewController, UITableViewDelegate { action.image = UIImage(systemName: "ellipsis" /*"square.and.arrow.up"*/) let delete = UIContextualAction(style: .destructive, title: NSLocalizedString("Delete", comment: "")) { action, view, completion in - do { - if let realm = record.realm { - try realm.write { - realm.delete(record) - } - } - } catch { - print(error) - } + self.delete(record: record) completion(true) } delete.image = UIImage(systemName: "trash") @@ -270,14 +301,7 @@ class RecordsController: UIViewController, UITableViewDelegate { let sheet = UIAlertController(title: NSLocalizedString("More actions", comment: ""), message: nil, preferredStyle: .actionSheet) let cancel = UIAlertAction(title: NSLocalizedString("Cancel", comment: ""), style: .cancel) { _ in sheet.dismiss(animated: true, completion: nil) } let share = UIAlertAction(title: NSLocalizedString("Share", comment: ""), style: .default) { _ in - do { - let url = try FileManager.default.url(for: record.path, in: "recordings") - let controller = UIActivityViewController(activityItems: [url], applicationActivities: nil) - self.present(controller, animated: true) - } catch { - print("Error sharing audio record: \(error.localizedDescription)") - HUD.show(error: error) - } + self.share(record: record) } let showText = UIAlertAction(title: NSLocalizedString("Show recognized text", comment: ""), style: .default) { action in self.showAlert(title: NSLocalizedString("Recognized text", comment: ""), message: record.rawText) @@ -286,10 +310,7 @@ class RecordsController: UIViewController, UITableViewDelegate { self.edit(record: record) } let showOnMap = UIAlertAction(title: NSLocalizedString("Show on map", comment: ""), style: .default) { action in - let controller = ShowEventController() - controller.event = record.event - controller.hidesBottomBarWhenPushed = true - self.navigationController?.pushViewController(controller, animated: true) + self.showOnMap(record) } sheet.addAction(editNumber) @@ -332,4 +353,34 @@ class RecordsController: UIViewController, UITableViewDelegate { } self.present(alert, animated: true) } + + func delete(record: AudioRecord) { + do { + if let realm = record.realm { + try realm.write { + realm.delete(record) + } + } + } catch { + print(error) + } + } + + func share(record: AudioRecord) { + do { + let url = try FileManager.default.url(for: record.path, in: "recordings") + let controller = UIActivityViewController(activityItems: [url], applicationActivities: nil) + self.present(controller, animated: true) + } catch { + print("Error sharing audio record: \(error.localizedDescription)") + HUD.show(error: error) + } + } + + func showOnMap(_ record: AudioRecord) { + let controller = ShowEventController() + controller.event = record.event + controller.hidesBottomBarWhenPushed = true + self.navigationController?.pushViewController(controller, animated: true) + } } diff --git a/AutoCat/Controllers/ReportController.swift b/AutoCat/Controllers/ReportController.swift index 27510e1..6f46ff7 100644 --- a/AutoCat/Controllers/ReportController.swift +++ b/AutoCat/Controllers/ReportController.swift @@ -46,7 +46,7 @@ class ReportController: FormViewController, MediaBrowserViewControllerDataSource } form +++ Section() - <<< LabelRow(NSLocalizedString("Model", comment: "")).cellUpdate { cell, _ in cell.imageView?.kf.setImage(with: URL(string: self.vehicle?.brand?.logo ?? ""), placeholder: self.logoPlaceholder) } + <<< LabelRow("Model").cellUpdate { cell, _ in cell.imageView?.kf.setImage(with: URL(string: self.vehicle?.brand?.logo ?? ""), placeholder: self.logoPlaceholder) } form +++ Section(NSLocalizedString("General", comment: "")) <<< LabelRow("Year") { $0.title = NSLocalizedString("Year", comment: "") } diff --git a/AutoCat/en.lproj/Localizable.strings b/AutoCat/en.lproj/Localizable.strings new file mode 100644 index 0000000..862d69d --- /dev/null +++ b/AutoCat/en.lproj/Localizable.strings @@ -0,0 +1,7 @@ +/* + Localizable.strings + AutoCat + + Created by Selim Mustafaev on 01.12.2020. + Copyright © 2020 Selim Mustafaev. All rights reserved. +*/ diff --git a/AutoCat/en.lproj/Localizable.stringsdict b/AutoCat/en.lproj/Localizable.stringsdict new file mode 100644 index 0000000..927692d --- /dev/null +++ b/AutoCat/en.lproj/Localizable.stringsdict @@ -0,0 +1,72 @@ + + + + + events found + + NSStringLocalizedFormatKey + %#@VARIABLE@ + VARIABLE + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + u + one + %u event found + two + %u events found + few + %u events found + many + %u events found + other + %u events found + + + owners count + + NSStringLocalizedFormatKey + %#@VARIABLE@ + VARIABLE + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + u + one + %u owner + two + %u owners + few + %u owners + many + %u owners + other + %u owners + + + vehicles found + + NSStringLocalizedFormatKey + %#@VARIABLE@ + VARIABLE + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + u + one + %u vehicle found + two + %u vehicles found + few + %u vehicles found + many + %u vehicles found + other + %u vehicles found + + + + diff --git a/AutoCat/ru.lproj/Localizable.strings b/AutoCat/ru.lproj/Localizable.strings index 1f99a17..1d3e7c3 100644 --- a/AutoCat/ru.lproj/Localizable.strings +++ b/AutoCat/ru.lproj/Localizable.strings @@ -7,6 +7,9 @@ /* No comment provided by engineer. */ "Add new audio record" = "Добавить новую голосовую запись"; +/* No comment provided by engineer. */ +"Add new event" = "Добавить новое событие"; + /* No comment provided by engineer. */ "Add new plate number via audio recording" = "Добавить новый гос. номер с помощью голосовой записи"; @@ -23,13 +26,13 @@ "Anyone but me" = "Кем угодно кроме меня"; /* No comment provided by engineer. */ -"As link" = "Как ссылку"; +"As link" = "В виде ссылки"; /* No comment provided by engineer. */ -"As one image" = "Как одну картинку"; +"As one image" = "В виде одной картинки"; /* No comment provided by engineer. */ -"As text and photos" = "Как текст и фотографии"; +"As text and photos" = "В виде текста и фотографий"; /* No comment provided by engineer. */ "AutoCat Account" = "Аккаунт в АвтоКот"; @@ -52,9 +55,18 @@ /* No comment provided by engineer. */ "Category" = "Категория"; -/* No comment provided by engineer. */ +/* verb */ "Check" = "Проверить"; +/* No comment provided by engineer. */ +"Check by" = "Проверить по"; + +/* No comment provided by engineer. */ +"Check date" = "Дата проверки"; + +/* No comment provided by engineer. */ +"Check parameters" = "Параметры проверки"; + /* No comment provided by engineer. */ "Clear all filters" = "Очистить все фильтры"; @@ -70,6 +82,9 @@ /* No comment provided by engineer. */ "Copy to pasteboard" = "Копировать в буфер обмена"; +/* No comment provided by engineer. */ +"Date and time" = "Дата и время"; + /* No comment provided by engineer. */ "Default region" = "Регион по умолчанию"; @@ -82,6 +97,12 @@ /* No comment provided by engineer. */ "Driver region" = "Регион прописки владельца ТС"; +/* No comment provided by engineer. */ +"Edit" = "Редактировать"; + +/* No comment provided by engineer. */ +"Edit event" = "Редактировать событие"; + /* No comment provided by engineer. */ "Edit plate number" = "Редактировать гос. номер"; @@ -130,6 +151,9 @@ /* Owner type */ "legal" = "Юр. лицо"; +/* No comment provided by engineer. */ +"Location" = "Координаты"; + /* No comment provided by engineer. */ "Log In" = "Войти"; @@ -160,9 +184,15 @@ /* No comment provided by engineer. */ "OSAGO" = "ОСАГО"; +/* No comment provided by engineer. */ +"OSAGO check" = "Проверка ОСАГО"; + /* No comment provided by engineer. */ "OSAGO contract status" = "Статус договора ОСАГО"; +/* No comment provided by engineer. */ +"OSAGO contracts" = "Полисы ОСАГО"; + /* No comment provided by engineer. */ "Owner" = "Владелец"; @@ -175,6 +205,9 @@ /* No comment provided by engineer. */ "Photos" = "Фотографии"; +/* Check by */ +"plate number" = "гос. номеру"; + /* No comment provided by engineer. */ "Plate number" = "Гос. номер"; @@ -241,6 +274,9 @@ /* No comment provided by engineer. */ "STS" = "СТС"; +/* No comment provided by engineer. */ +"Time range" = "Временной промежуток"; + /* No comment provided by engineer. */ "To" = "По"; diff --git a/AutoCat/ru.lproj/Localizable.stringsdict b/AutoCat/ru.lproj/Localizable.stringsdict new file mode 100644 index 0000000..1488f2a --- /dev/null +++ b/AutoCat/ru.lproj/Localizable.stringsdict @@ -0,0 +1,66 @@ + + + + + events found + + NSStringLocalizedFormatKey + %#@VARIABLE@ + VARIABLE + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + u + few + Найдено %u события + many + Найдено %u событий + one + Найдено %u событие + other + Найдено %u событий + + + owners count + + NSStringLocalizedFormatKey + %#@VARIABLE@ + VARIABLE + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + u + few + %u владельца + many + %u владельцев + one + %u владелец + other + %u владельцев + + + vehicles found + + NSStringLocalizedFormatKey + %#@VARIABLE@ + VARIABLE + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + u + few + Найдены %u ТС + many + Найдено %u ТС + one + Найдено %u ТС + other + Найдено %u ТС + + + +