diff --git a/AuthenticationExample/AuthenticationExample.xcodeproj/project.pbxproj b/AuthenticationExample/AuthenticationExample.xcodeproj/project.pbxproj index d77abd9c8..7c3de0d5a 100644 --- a/AuthenticationExample/AuthenticationExample.xcodeproj/project.pbxproj +++ b/AuthenticationExample/AuthenticationExample.xcodeproj/project.pbxproj @@ -15,7 +15,7 @@ 88AD138E283443F800500B2E /* MapItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88AD138D283443F800500B2E /* MapItemView.swift */; }; 88D24DF0288F062D007A539C /* ProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D24DEF288F062D007A539C /* ProfileView.swift */; }; 88D24DF2288F2FA1007A539C /* HomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D24DF1288F2FA1007A539C /* HomeView.swift */; }; - 88D24DF4288F4BEB007A539C /* FeaturedMapsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D24DF3288F4BEB007A539C /* FeaturedMapsView.swift */; }; + 88D24DF4288F4BEB007A539C /* WebMapsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D24DF3288F4BEB007A539C /* WebMapsView.swift */; }; 88D24DF6288F5BAE007A539C /* UserView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D24DF5288F5BAE007A539C /* UserView.swift */; }; 88D24DF8288F6002007A539C /* LoadableImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88D24DF7288F6002007A539C /* LoadableImageView.swift */; }; /* End PBXBuildFile section */ @@ -32,7 +32,7 @@ 88AD138D283443F800500B2E /* MapItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapItemView.swift; sourceTree = ""; }; 88D24DEF288F062D007A539C /* ProfileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileView.swift; sourceTree = ""; }; 88D24DF1288F2FA1007A539C /* HomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeView.swift; sourceTree = ""; }; - 88D24DF3288F4BEB007A539C /* FeaturedMapsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeaturedMapsView.swift; sourceTree = ""; }; + 88D24DF3288F4BEB007A539C /* WebMapsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebMapsView.swift; sourceTree = ""; }; 88D24DF5288F5BAE007A539C /* UserView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserView.swift; sourceTree = ""; }; 88D24DF7288F6002007A539C /* LoadableImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadableImageView.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -75,7 +75,7 @@ 88AD13782834355000500B2E /* AuthenticationApp.swift */, 88D24DF1288F2FA1007A539C /* HomeView.swift */, 88D24DF7288F6002007A539C /* LoadableImageView.swift */, - 88D24DF3288F4BEB007A539C /* FeaturedMapsView.swift */, + 88D24DF3288F4BEB007A539C /* WebMapsView.swift */, 88AD138D283443F800500B2E /* MapItemView.swift */, 88AD137A2834355000500B2E /* SigninView.swift */, 88D24DEF288F062D007A539C /* ProfileView.swift */, @@ -176,7 +176,7 @@ files = ( 88AD138E283443F800500B2E /* MapItemView.swift in Sources */, 88AD137B2834355000500B2E /* SigninView.swift in Sources */, - 88D24DF4288F4BEB007A539C /* FeaturedMapsView.swift in Sources */, + 88D24DF4288F4BEB007A539C /* WebMapsView.swift in Sources */, 88D24DF2288F2FA1007A539C /* HomeView.swift in Sources */, 88D24DF8288F6002007A539C /* LoadableImageView.swift in Sources */, 88D24DF0288F062D007A539C /* ProfileView.swift in Sources */, @@ -325,7 +325,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 200.2.0; + MARKETING_VERSION = 200.3.0; PRODUCT_BUNDLE_IDENTIFIER = com.esri.Authentication; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; @@ -358,7 +358,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 200.2.0; + MARKETING_VERSION = 200.3.0; PRODUCT_BUNDLE_IDENTIFIER = com.esri.Authentication; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; diff --git a/AuthenticationExample/AuthenticationExample/AuthenticationExample.entitlements b/AuthenticationExample/AuthenticationExample/AuthenticationExample.entitlements index ee95ab7e5..ea9358ba7 100644 --- a/AuthenticationExample/AuthenticationExample/AuthenticationExample.entitlements +++ b/AuthenticationExample/AuthenticationExample/AuthenticationExample.entitlements @@ -6,5 +6,9 @@ com.apple.security.network.client + keychain-access-groups + + com.apple.token + diff --git a/AuthenticationExample/AuthenticationExample/HomeView.swift b/AuthenticationExample/AuthenticationExample/HomeView.swift index 1d91fe654..c95cd234f 100644 --- a/AuthenticationExample/AuthenticationExample/HomeView.swift +++ b/AuthenticationExample/AuthenticationExample/HomeView.swift @@ -25,7 +25,7 @@ struct HomeView: View { var body: some View { if let portal = portal { NavigationView{ - FeaturedMapsView(portal: portal) + WebMapsView(portal: portal) .toolbar { ToolbarItem(placement: .navigationBarTrailing) { Button { diff --git a/AuthenticationExample/AuthenticationExample/SignInView.swift b/AuthenticationExample/AuthenticationExample/SignInView.swift index a35366526..0a020008f 100644 --- a/AuthenticationExample/AuthenticationExample/SignInView.swift +++ b/AuthenticationExample/AuthenticationExample/SignInView.swift @@ -67,10 +67,12 @@ struct SignInView: View { switch credential { case .password(let passwordCredential): return passwordCredential.username - case .certificate: - return "" + case .certificate(let certificateCredential): + return certificateCredential.identityName case .serverTrust: return nil + case .smartCard(let smartCardCredential): + return smartCardCredential.identityName @unknown default: fatalError("Unknown NetworkCredential") } diff --git a/AuthenticationExample/AuthenticationExample/FeaturedMapsView.swift b/AuthenticationExample/AuthenticationExample/WebMapsView.swift similarity index 73% rename from AuthenticationExample/AuthenticationExample/FeaturedMapsView.swift rename to AuthenticationExample/AuthenticationExample/WebMapsView.swift index b4c7300c6..73afa3881 100644 --- a/AuthenticationExample/AuthenticationExample/FeaturedMapsView.swift +++ b/AuthenticationExample/AuthenticationExample/WebMapsView.swift @@ -14,23 +14,23 @@ import SwiftUI import ArcGIS -/// A view that displays the featured maps of a portal. -struct FeaturedMapsView: View { - /// The portal from which the featured content can be fetched. +/// A view that displays the web maps of a portal. +struct WebMapsView: View { + /// The portal from which the web maps can be fetched. var portal: Portal /// A Boolean value indicating whether the featured content is being loaded. @State var isLoading = true - /// The featured items. - @State var featuredItems = [PortalItem]() + /// The web map portal items. + @State var webMapItems = [PortalItem]() var body: some View { VStack { if isLoading { ProgressView() } else { - List(featuredItems, id: \.id) { item in + List(webMapItems, id: \.id) { item in NavigationLink { MapItemView(map: Map(item: item)) } label: { @@ -40,15 +40,23 @@ struct FeaturedMapsView: View { } } .task { - guard featuredItems.isEmpty else { return } + guard webMapItems.isEmpty else { return } do { - featuredItems = try await portal.featuredItems + // Try to fetch the featured items but if none available then find webmap items. + var items = try await portal.featuredItems .filter { $0.kind == .webMap } + if items.isEmpty { + items = try await portal.findItems( + queryParameters: .items(ofKinds: [.webMap]) + ) + .results + } + webMapItems = items } catch {} isLoading = false } - .navigationTitle("Featured Maps") + .navigationTitle("Web Maps") } } diff --git a/AuthenticationExample/README.md b/AuthenticationExample/README.md index 2591823d4..ba8c6608d 100644 --- a/AuthenticationExample/README.md +++ b/AuthenticationExample/README.md @@ -2,7 +2,7 @@ This is an application that shows how to use the Authenticator toolkit component to fully support ArcGIS authentication and network authentication in an application. -Documentation for the Authenticator toolkit components is [here](../Documentation/Authenticator/README.md). +Documentation for the Authenticator toolkit component is [here](https://developers.arcgis.com/swift/toolkit-api-reference/documentation/arcgistoolkit/authenticator). ## Instructions diff --git a/Examples/Examples.xcodeproj/project.pbxproj b/Examples/Examples.xcodeproj/project.pbxproj index 94ae72182..736916367 100644 --- a/Examples/Examples.xcodeproj/project.pbxproj +++ b/Examples/Examples.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 1CC376D42ABA0B3700A83300 /* TableTopExampleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CC376D32ABA0B3700A83300 /* TableTopExampleView.swift */; }; 4D19FCB52881C8F3002601E8 /* PopupExampleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D19FCB42881C8F3002601E8 /* PopupExampleView.swift */; }; 75230DAE28614369009AF501 /* UtilityNetworkTraceExampleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75230DAD28614369009AF501 /* UtilityNetworkTraceExampleView.swift */; }; 752A4FC4294D268000A49479 /* MapDataModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 752A4FC2294D268000A49479 /* MapDataModel.swift */; }; @@ -14,6 +15,7 @@ 75657E4827ABAC8400EE865B /* CompassExampleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75657E4727ABAC8400EE865B /* CompassExampleView.swift */; }; 75C37C9227BEDBD800FC9DCE /* BookmarksExampleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75C37C9127BEDBD800FC9DCE /* BookmarksExampleView.swift */; }; 75D41B2B27C6F21400624D7C /* ScalebarExampleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75D41B2A27C6F21400624D7C /* ScalebarExampleView.swift */; }; + 882899FD2AB5099300A0BDC1 /* FlyoverExampleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 882899FC2AB5099300A0BDC1 /* FlyoverExampleView.swift */; }; E42BFBE92672BF9500159107 /* SearchExampleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E42BFBE82672BF9500159107 /* SearchExampleView.swift */; }; E4624A25278CE815000D2A38 /* FloorFilterExampleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4624A24278CE815000D2A38 /* FloorFilterExampleView.swift */; }; E47ABE442652FE0900FD2FE3 /* ExamplesApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = E47ABE432652FE0900FD2FE3 /* ExamplesApp.swift */; }; @@ -44,6 +46,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 1CC376D32ABA0B3700A83300 /* TableTopExampleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableTopExampleView.swift; sourceTree = ""; }; 4D19FCB42881C8F3002601E8 /* PopupExampleView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PopupExampleView.swift; sourceTree = ""; }; 75230DAD28614369009AF501 /* UtilityNetworkTraceExampleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UtilityNetworkTraceExampleView.swift; sourceTree = ""; }; 752A4FC2294D268000A49479 /* MapDataModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapDataModel.swift; sourceTree = ""; }; @@ -51,6 +54,7 @@ 75657E4727ABAC8400EE865B /* CompassExampleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompassExampleView.swift; sourceTree = ""; }; 75C37C9127BEDBD800FC9DCE /* BookmarksExampleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksExampleView.swift; sourceTree = ""; }; 75D41B2A27C6F21400624D7C /* ScalebarExampleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScalebarExampleView.swift; sourceTree = ""; }; + 882899FC2AB5099300A0BDC1 /* FlyoverExampleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FlyoverExampleView.swift; sourceTree = ""; }; E42BFBE82672BF9500159107 /* SearchExampleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchExampleView.swift; sourceTree = ""; }; E4624A24278CE815000D2A38 /* FloorFilterExampleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FloorFilterExampleView.swift; sourceTree = ""; }; E47ABE402652FE0900FD2FE3 /* Toolkit Examples.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Toolkit Examples.app"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -94,16 +98,18 @@ E40F58042656E509006F5CB9 /* Examples */ = { isa = PBXGroup; children = ( - 4D19FCB42881C8F3002601E8 /* PopupExampleView.swift */, E4C389D426B8A12C002BC255 /* BasemapGalleryExampleView.swift */, 75C37C9127BEDBD800FC9DCE /* BookmarksExampleView.swift */, + 75657E4727ABAC8400EE865B /* CompassExampleView.swift */, + E4AA9315276BF5ED000E6289 /* FloatingPanelExampleView.swift */, + E4624A24278CE815000D2A38 /* FloorFilterExampleView.swift */, E4F9BC98265EFCAF001280FF /* OverviewMapExampleView.swift */, + 4D19FCB42881C8F3002601E8 /* PopupExampleView.swift */, 75D41B2A27C6F21400624D7C /* ScalebarExampleView.swift */, E42BFBE82672BF9500159107 /* SearchExampleView.swift */, - E4AA9315276BF5ED000E6289 /* FloatingPanelExampleView.swift */, - 75657E4727ABAC8400EE865B /* CompassExampleView.swift */, - E4624A24278CE815000D2A38 /* FloorFilterExampleView.swift */, 75230DAD28614369009AF501 /* UtilityNetworkTraceExampleView.swift */, + 882899FC2AB5099300A0BDC1 /* FlyoverExampleView.swift */, + 1CC376D32ABA0B3700A83300 /* TableTopExampleView.swift */, ); name = Examples; sourceTree = ""; @@ -264,6 +270,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 1CC376D42ABA0B3700A83300 /* TableTopExampleView.swift in Sources */, 752A4FC4294D268000A49479 /* MapDataModel.swift in Sources */, 752A4FC5294D268000A49479 /* SceneDataModel.swift in Sources */, 75657E4827ABAC8400EE865B /* CompassExampleView.swift in Sources */, @@ -278,6 +285,7 @@ E48A73472658227100F5C118 /* ExampleList.swift in Sources */, E4624A25278CE815000D2A38 /* FloorFilterExampleView.swift in Sources */, 4D19FCB52881C8F3002601E8 /* PopupExampleView.swift in Sources */, + 882899FD2AB5099300A0BDC1 /* FlyoverExampleView.swift in Sources */, E48A73462658227100F5C118 /* ExampleView.swift in Sources */, E42BFBE92672BF9500159107 /* SearchExampleView.swift in Sources */, E4C389D526B8A12C002BC255 /* BasemapGalleryExampleView.swift in Sources */, @@ -421,7 +429,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 200.2.0; + MARKETING_VERSION = 200.3.0; PRODUCT_BUNDLE_IDENTIFIER = "com.esri.arcgis-swift-sdk-toolkit-examples"; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; @@ -449,7 +457,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 200.2.0; + MARKETING_VERSION = 200.3.0; PRODUCT_BUNDLE_IDENTIFIER = "com.esri.arcgis-swift-sdk-toolkit-examples"; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; diff --git a/Examples/Examples/BookmarksExampleView.swift b/Examples/Examples/BookmarksExampleView.swift index 04ee6c57d..709f1cfc9 100644 --- a/Examples/Examples/BookmarksExampleView.swift +++ b/Examples/Examples/BookmarksExampleView.swift @@ -19,29 +19,14 @@ struct BookmarksExampleView: View { /// The `Map` with predefined bookmarks. @State private var map = Map(url: URL(string: "https://www.arcgis.com/home/item.html?id=16f1b8ba37b44dc3884afc8d5f454dd2")!)! - /// The last selected bookmark. - @State var selectedBookmark: Bookmark? - /// Indicates if the `Bookmarks` component is shown or not. /// - Remark: This allows a developer to control when the `Bookmarks` component is /// shown/hidden, whether that be in a group of options or a standalone button. @State var showingBookmarks = false - /// Allows for communication between the `Bookmarks` component and a `MapView` or - /// `SceneView`. - @State var viewpoint: Viewpoint? - var body: some View { MapViewReader { mapViewProxy in - MapView(map: map, viewpoint: viewpoint) - .onViewpointChanged(kind: .centerAndScale) { - viewpoint = $0 - } - .task(id: selectedBookmark) { - if let selectedBookmark, let viewpoint = selectedBookmark.viewpoint { - await mapViewProxy.setViewpoint(viewpoint) - } - } + MapView(map: map) .toolbar { ToolbarItem(placement: .primaryAction) { Button { @@ -58,7 +43,13 @@ struct BookmarksExampleView: View { isPresented: $showingBookmarks, geoModel: map ) - .onSelectionChanged { selectedBookmark = $0 } + .onSelectionChanged { + if let viewpoint = $0.viewpoint { + Task { + await mapViewProxy.setViewpoint(viewpoint) + } + } + } } } } diff --git a/Examples/Examples/FloatingPanelExampleView.swift b/Examples/Examples/FloatingPanelExampleView.swift index 72d12021b..bd18f4ecc 100644 --- a/Examples/Examples/FloatingPanelExampleView.swift +++ b/Examples/Examples/FloatingPanelExampleView.swift @@ -16,6 +16,9 @@ import ArcGISToolkit import ArcGIS struct FloatingPanelExampleView: View { + /// The height of the map view's attribution bar. + @State private var attributionBarHeight: CGFloat = 0 + /// The data model containing the `Map` displayed in the `MapView`. @StateObject private var dataModel = MapDataModel( map: Map(basemapStyle: .arcGISImagery) @@ -38,7 +41,15 @@ struct FloatingPanelExampleView: View { map: dataModel.map, viewpoint: initialViewpoint ) - .floatingPanel(selectedDetent: $selectedDetent, isPresented: isPresented) { + .onAttributionBarHeightChanged { + attributionBarHeight = $0 + } + .ignoresSafeArea(.keyboard, edges: .bottom) + .floatingPanel( + attributionBarHeight: attributionBarHeight, + selectedDetent: $selectedDetent, + isPresented: isPresented + ) { switch demoContent { case .list: FloatingPanelListDemoContent(selectedDetent: $selectedDetent) diff --git a/Examples/Examples/FlyoverExampleView.swift b/Examples/Examples/FlyoverExampleView.swift new file mode 100644 index 000000000..f4c16171f --- /dev/null +++ b/Examples/Examples/FlyoverExampleView.swift @@ -0,0 +1,41 @@ +// Copyright 2023 Esri. + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI +import ArcGIS +import ArcGISToolkit + +struct FlyoverExampleView: View { + @State private var scene = Scene( + item: PortalItem( + portal: .arcGISOnline(connection: .anonymous), + id: PortalItem.ID("7558ee942b2547019f66885c44d4f0b1")! + ) + ) + + var body: some View { + FlyoverSceneView( + initialLocation: Point(x: 4.4777, y: 51.9244, z: 1_000, spatialReference: .wgs84), + translationFactor: 1_000 + ) { proxy in + SceneView(scene: scene) + .onSingleTapGesture { screen, _ in + print("Identifying...") + Task.detached { + let results = try await proxy.identifyLayers(screenPoint: screen, tolerance: 20) + print("\(results.count) identify result(s).") + } + } + } + } +} diff --git a/Examples/Examples/PopupExampleView.swift b/Examples/Examples/PopupExampleView.swift index e90f015bb..2edc47c3f 100644 --- a/Examples/Examples/PopupExampleView.swift +++ b/Examples/Examples/PopupExampleView.swift @@ -33,7 +33,9 @@ struct PopupExampleView: View { @State private var identifyScreenPoint: CGPoint? /// The popup to be shown as the result of the layer identify operation. - @State private var popup: Popup? + @State private var popup: Popup? { + didSet { showPopup = popup != nil } + } /// A Boolean value specifying whether the popup view should be shown or not. @State private var showPopup = false @@ -48,28 +50,19 @@ struct PopupExampleView: View { identifyScreenPoint = screenPoint } .task(id: identifyScreenPoint) { - guard let identifyScreenPoint = identifyScreenPoint, - let identifyResult = await Result(awaiting: { - try await proxy.identifyLayers( - screenPoint: identifyScreenPoint, - tolerance: 10, - returnPopupsOnly: true - ) - }) - .cancellationToNil() - else { - return - } - - self.identifyScreenPoint = nil - self.popup = try? identifyResult.get().first?.popups.first - self.showPopup = self.popup != nil + guard let identifyScreenPoint else { return } + let identifyResult = try? await proxy.identifyLayers( + screenPoint: identifyScreenPoint, + tolerance: 10, + returnPopupsOnly: true + ).first + popup = identifyResult?.popups.first } .floatingPanel( selectedDetent: $floatingPanelDetent, horizontalAlignment: .leading, isPresented: $showPopup - ) { + ) { [popup] in PopupView(popup: popup!, isPresented: $showPopup) .showCloseButton(true) .padding() diff --git a/Examples/Examples/TableTopExampleView.swift b/Examples/Examples/TableTopExampleView.swift new file mode 100644 index 000000000..b7b5d63a8 --- /dev/null +++ b/Examples/Examples/TableTopExampleView.swift @@ -0,0 +1,58 @@ +// Copyright 2023 Esri. + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI +import ArcGIS +import ArcGISToolkit + +struct TableTopExampleView: View { + @State private var scene: ArcGIS.Scene = { + // Creates a scene layer from buildings REST service. + let buildingsURL = URL(string: "https://tiles.arcgis.com/tiles/P3ePLMYs2RVChkJx/arcgis/rest/services/DevA_BuildingShells/SceneServer")! + let buildingsLayer = ArcGISSceneLayer(url: buildingsURL) + // Creates an elevation source from Terrain3D REST service. + let elevationServiceURL = URL(string: "https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer")! + let elevationSource = ArcGISTiledElevationSource(url: elevationServiceURL) + let surface = Surface() + surface.addElevationSource(elevationSource) + let scene = Scene() + scene.baseSurface = surface + scene.addOperationalLayer(buildingsLayer) + scene.baseSurface.navigationConstraint = .unconstrained + scene.baseSurface.opacity = 0 + return scene + }() + + private let anchorPoint = Point( + x: -122.68350326165559, + y: 45.53257485106716, + spatialReference: .wgs84 + ) + + var body: some View { + TableTopSceneView( + anchorPoint: anchorPoint, + translationFactor: 1_000, + clippingDistance: 400 + ) { proxy in + SceneView(scene: scene) + .onSingleTapGesture { screen, _ in + print("Identifying...") + Task.detached { + let results = try await proxy.identifyLayers(screenPoint: screen, tolerance: 20) + print("\(results.count) identify result(s).") + } + } + } + } +} diff --git a/Examples/Examples/UtilityNetworkTraceExampleView.swift b/Examples/Examples/UtilityNetworkTraceExampleView.swift index a3b2e0b99..9e08e18a5 100644 --- a/Examples/Examples/UtilityNetworkTraceExampleView.swift +++ b/Examples/Examples/UtilityNetworkTraceExampleView.swift @@ -18,6 +18,17 @@ import SwiftUI /// A demonstration of the utility network trace tool which runs traces on a web map published with /// a utility network and trace configurations. struct UtilityNetworkTraceExampleView: View { + @Environment(\.horizontalSizeClass) + private var horizontalSizeClass: UserInterfaceSizeClass? + + @Environment(\.verticalSizeClass) + private var verticalSizeClass: UserInterfaceSizeClass? + + /// A Boolean value indicating whether the environment is compact. + private var isCompact: Bool { + horizontalSizeClass == .compact && verticalSizeClass == .regular + } + /// The map with the utility networks. @State private var map = makeMap() @@ -37,38 +48,43 @@ struct UtilityNetworkTraceExampleView: View { @State var viewpoint: Viewpoint? var body: some View { - MapViewReader { mapViewProxy in - MapView( - map: map, - viewpoint: viewpoint, - graphicsOverlays: [resultGraphicsOverlay] - ) - .onSingleTapGesture { screenPoint, mapPoint in - self.screenPoint = screenPoint - self.mapPoint = mapPoint - } - .onViewpointChanged(kind: .centerAndScale) { - viewpoint = $0 - } - .task { - let publicSample = try? await ArcGISCredential.publicSample - ArcGISEnvironment.authenticationManager.arcGISCredentialStore.add(publicSample!) - } - .floatingPanel( - backgroundColor: Color(uiColor: .systemGroupedBackground), - selectedDetent: $activeDetent, - horizontalAlignment: .trailing, - isPresented: .constant(true) - ) { - UtilityNetworkTrace( - graphicsOverlay: $resultGraphicsOverlay, + GeometryReader { geometryProxy in + MapViewReader { mapViewProxy in + MapView( map: map, - mapPoint: $mapPoint, - screenPoint: $screenPoint, - mapViewProxy: mapViewProxy, - viewpoint: $viewpoint + viewpoint: viewpoint, + graphicsOverlays: [resultGraphicsOverlay] ) - .floatingPanelDetent($activeDetent) + .onSingleTapGesture { screenPoint, mapPoint in + self.screenPoint = screenPoint + self.mapPoint = mapPoint + } + .onViewpointChanged(kind: .centerAndScale) { + viewpoint = $0 + } + .task { + let publicSample = try? await ArcGISCredential.publicSample + ArcGISEnvironment.authenticationManager.arcGISCredentialStore.add(publicSample!) + } + .floatingPanel( + backgroundColor: Color(uiColor: .systemGroupedBackground), + selectedDetent: $activeDetent, + horizontalAlignment: .trailing, + isPresented: .constant(true) + ) { + UtilityNetworkTrace( + graphicsOverlay: $resultGraphicsOverlay, + map: map, + mapPoint: $mapPoint, + screenPoint: $screenPoint, + mapViewProxy: mapViewProxy, + viewpoint: $viewpoint + ) + .floatingPanelDetent($activeDetent) + // Manually account for a device's bottom safe area when using a Floating Panel. + // See also #518. + .padding(.bottom, isCompact ? geometryProxy.safeAreaInsets.bottom : nil) + } } } } diff --git a/Examples/ExamplesApp/Examples.swift b/Examples/ExamplesApp/Examples.swift index 2a4cc093f..f5b6875da 100644 --- a/Examples/ExamplesApp/Examples.swift +++ b/Examples/ExamplesApp/Examples.swift @@ -16,6 +16,7 @@ import SwiftUI struct Examples: View { /// The list of example lists. Allows for a hierarchical navigation model for examples. let lists: [ExampleList] = [ + .augmentedReality, .geoview, .views ] @@ -32,6 +33,14 @@ struct Examples: View { } extension ExampleList { + static let augmentedReality = Self( + name: "Augmented Reality", + examples: [ + AnyExample("Flyover", content: FlyoverExampleView()), + AnyExample("Tabletop", content: TableTopExampleView()) + ] + ) + static let geoview = Self( name: "GeoView", examples: [ diff --git a/Examples/ExamplesApp/Info.plist b/Examples/ExamplesApp/Info.plist index fe305139a..e53625c32 100644 --- a/Examples/ExamplesApp/Info.plist +++ b/Examples/ExamplesApp/Info.plist @@ -2,6 +2,8 @@ + NSCameraUsageDescription + This app uses augmented reality to overlay imagery over your real-world environment. Camera access is required for this functionality. CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable diff --git a/Examples/Utility/MapDataModel.swift b/Examples/Utility/MapDataModel.swift index 0c3553ec1..ab03cbad1 100644 --- a/Examples/Utility/MapDataModel.swift +++ b/Examples/Utility/MapDataModel.swift @@ -11,8 +11,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -import SwiftUI import ArcGIS +import Combine /// A very basic data model class containing a Map. Since a `Map` is not an observable object, /// clients can use `MapDataModel` as an example of how you would store a map in a data model diff --git a/Examples/Utility/SceneDataModel.swift b/Examples/Utility/SceneDataModel.swift index e55403ad6..40cd7377c 100644 --- a/Examples/Utility/SceneDataModel.swift +++ b/Examples/Utility/SceneDataModel.swift @@ -11,8 +11,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -import SwiftUI import ArcGIS +import Combine /// A very basic data model class containing a Scene. Since a `Scene` is not an observable object, /// clients can use `SceneDataModel` as an example of how you would store a scene in a data model diff --git a/JobManagerExample/JobManagerExample.xcodeproj/project.pbxproj b/JobManagerExample/JobManagerExample.xcodeproj/project.pbxproj new file mode 100644 index 000000000..062332424 --- /dev/null +++ b/JobManagerExample/JobManagerExample.xcodeproj/project.pbxproj @@ -0,0 +1,374 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 56; + objects = { + +/* Begin PBXBuildFile section */ + 88140D5D2A8BD940003F55D4 /* JobManagerExampleApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88140D5C2A8BD940003F55D4 /* JobManagerExampleApp.swift */; }; + 88140D5F2A8BD940003F55D4 /* JobManagerExampleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88140D5E2A8BD940003F55D4 /* JobManagerExampleView.swift */; }; + 88140D612A8BD941003F55D4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 88140D602A8BD941003F55D4 /* Assets.xcassets */; }; + 88140D642A8BD941003F55D4 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 88140D632A8BD941003F55D4 /* Preview Assets.xcassets */; }; + 88140D6D2A8BDCBE003F55D4 /* ArcGISToolkit in Frameworks */ = {isa = PBXBuildFile; productRef = 88140D6C2A8BDCBE003F55D4 /* ArcGISToolkit */; }; + 88140D702A8D5845003F55D4 /* View.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88140D6F2A8D5845003F55D4 /* View.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 88140D592A8BD940003F55D4 /* JobManagerExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = JobManagerExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 88140D5C2A8BD940003F55D4 /* JobManagerExampleApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JobManagerExampleApp.swift; sourceTree = ""; }; + 88140D5E2A8BD940003F55D4 /* JobManagerExampleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JobManagerExampleView.swift; sourceTree = ""; }; + 88140D602A8BD941003F55D4 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 88140D632A8BD941003F55D4 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + 88140D6A2A8BDC75003F55D4 /* arcgis-maps-sdk-swift-toolkit */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = "arcgis-maps-sdk-swift-toolkit"; path = ..; sourceTree = ""; }; + 88140D6E2A8C1312003F55D4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; + 88140D6F2A8D5845003F55D4 /* View.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = View.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 88140D562A8BD940003F55D4 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 88140D6D2A8BDCBE003F55D4 /* ArcGISToolkit in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 88140D502A8BD940003F55D4 = { + isa = PBXGroup; + children = ( + 88140D6A2A8BDC75003F55D4 /* arcgis-maps-sdk-swift-toolkit */, + 88140D5B2A8BD940003F55D4 /* JobManagerExample */, + 88140D5A2A8BD940003F55D4 /* Products */, + 88140D6B2A8BDCBE003F55D4 /* Frameworks */, + ); + sourceTree = ""; + }; + 88140D5A2A8BD940003F55D4 /* Products */ = { + isa = PBXGroup; + children = ( + 88140D592A8BD940003F55D4 /* JobManagerExample.app */, + ); + name = Products; + sourceTree = ""; + }; + 88140D5B2A8BD940003F55D4 /* JobManagerExample */ = { + isa = PBXGroup; + children = ( + 88140D6E2A8C1312003F55D4 /* Info.plist */, + 88140D5C2A8BD940003F55D4 /* JobManagerExampleApp.swift */, + 88140D5E2A8BD940003F55D4 /* JobManagerExampleView.swift */, + 88140D602A8BD941003F55D4 /* Assets.xcassets */, + 88140D622A8BD941003F55D4 /* Preview Content */, + 88140D6F2A8D5845003F55D4 /* View.swift */, + ); + path = JobManagerExample; + sourceTree = ""; + }; + 88140D622A8BD941003F55D4 /* Preview Content */ = { + isa = PBXGroup; + children = ( + 88140D632A8BD941003F55D4 /* Preview Assets.xcassets */, + ); + path = "Preview Content"; + sourceTree = ""; + }; + 88140D6B2A8BDCBE003F55D4 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 88140D582A8BD940003F55D4 /* JobManagerExample */ = { + isa = PBXNativeTarget; + buildConfigurationList = 88140D672A8BD941003F55D4 /* Build configuration list for PBXNativeTarget "JobManagerExample" */; + buildPhases = ( + 88140D552A8BD940003F55D4 /* Sources */, + 88140D562A8BD940003F55D4 /* Frameworks */, + 88140D572A8BD940003F55D4 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = JobManagerExample; + packageProductDependencies = ( + 88140D6C2A8BDCBE003F55D4 /* ArcGISToolkit */, + ); + productName = JobManagerExample; + productReference = 88140D592A8BD940003F55D4 /* JobManagerExample.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 88140D512A8BD940003F55D4 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1430; + LastUpgradeCheck = 1430; + TargetAttributes = { + 88140D582A8BD940003F55D4 = { + CreatedOnToolsVersion = 14.3.1; + }; + }; + }; + buildConfigurationList = 88140D542A8BD940003F55D4 /* Build configuration list for PBXProject "JobManagerExample" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 88140D502A8BD940003F55D4; + productRefGroup = 88140D5A2A8BD940003F55D4 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 88140D582A8BD940003F55D4 /* JobManagerExample */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 88140D572A8BD940003F55D4 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 88140D642A8BD941003F55D4 /* Preview Assets.xcassets in Resources */, + 88140D612A8BD941003F55D4 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 88140D552A8BD940003F55D4 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 88140D5F2A8BD940003F55D4 /* JobManagerExampleView.swift in Sources */, + 88140D5D2A8BD940003F55D4 /* JobManagerExampleApp.swift in Sources */, + 88140D702A8D5845003F55D4 /* View.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 88140D652A8BD941003F55D4 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 16.4; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 88140D662A8BD941003F55D4 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 16.4; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 88140D682A8BD941003F55D4 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"JobManagerExample/Preview Content\""; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = JobManagerExample/Info.plist; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 200.3.0; + PRODUCT_BUNDLE_IDENTIFIER = com.esri.JobManagerExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 88140D692A8BD941003F55D4 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"JobManagerExample/Preview Content\""; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = JobManagerExample/Info.plist; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 200.3.0; + PRODUCT_BUNDLE_IDENTIFIER = com.esri.JobManagerExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 88140D542A8BD940003F55D4 /* Build configuration list for PBXProject "JobManagerExample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 88140D652A8BD941003F55D4 /* Debug */, + 88140D662A8BD941003F55D4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 88140D672A8BD941003F55D4 /* Build configuration list for PBXNativeTarget "JobManagerExample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 88140D682A8BD941003F55D4 /* Debug */, + 88140D692A8BD941003F55D4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCSwiftPackageProductDependency section */ + 88140D6C2A8BDCBE003F55D4 /* ArcGISToolkit */ = { + isa = XCSwiftPackageProductDependency; + productName = ArcGISToolkit; + }; +/* End XCSwiftPackageProductDependency section */ + }; + rootObject = 88140D512A8BD940003F55D4 /* Project object */; +} diff --git a/JobManagerExample/JobManagerExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/JobManagerExample/JobManagerExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..919434a62 --- /dev/null +++ b/JobManagerExample/JobManagerExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/JobManagerExample/JobManagerExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/JobManagerExample/JobManagerExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/JobManagerExample/JobManagerExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/JobManagerExample/JobManagerExample.xcodeproj/xcshareddata/xcschemes/JobManagerExample.xcscheme b/JobManagerExample/JobManagerExample.xcodeproj/xcshareddata/xcschemes/JobManagerExample.xcscheme new file mode 100644 index 000000000..386931713 --- /dev/null +++ b/JobManagerExample/JobManagerExample.xcodeproj/xcshareddata/xcschemes/JobManagerExample.xcscheme @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/JobManagerExample/JobManagerExample/Assets.xcassets/AccentColor.colorset/Contents.json b/JobManagerExample/JobManagerExample/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 000000000..eb8789700 --- /dev/null +++ b/JobManagerExample/JobManagerExample/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/JobManagerExample/JobManagerExample/Assets.xcassets/AppIcon.appiconset/Contents.json b/JobManagerExample/JobManagerExample/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..13613e3ee --- /dev/null +++ b/JobManagerExample/JobManagerExample/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,13 @@ +{ + "images" : [ + { + "idiom" : "universal", + "platform" : "ios", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/JobManagerExample/JobManagerExample/Assets.xcassets/Contents.json b/JobManagerExample/JobManagerExample/Assets.xcassets/Contents.json new file mode 100644 index 000000000..73c00596a --- /dev/null +++ b/JobManagerExample/JobManagerExample/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/JobManagerExample/JobManagerExample/Info.plist b/JobManagerExample/JobManagerExample/Info.plist new file mode 100644 index 000000000..5ba16050b --- /dev/null +++ b/JobManagerExample/JobManagerExample/Info.plist @@ -0,0 +1,14 @@ + + + + + BGTaskSchedulerPermittedIdentifiers + + com.esri.ArcGISToolkit.jobManager.statusCheck + + UIBackgroundModes + + fetch + + + diff --git a/JobManagerExample/JobManagerExample/JobManagerExampleApp.swift b/JobManagerExample/JobManagerExample/JobManagerExampleApp.swift new file mode 100644 index 000000000..25c8053d5 --- /dev/null +++ b/JobManagerExample/JobManagerExample/JobManagerExampleApp.swift @@ -0,0 +1,50 @@ +// Copyright 2023 Esri. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import ArcGIS +import ArcGISToolkit +import OSLog +import SwiftUI + +@main +struct JobManagerExampleApp: App { + var body: some SwiftUI.Scene { + WindowGroup { + JobManagerExampleView() + } + .backgroundTask(.urlSession(ArcGISEnvironment.defaultBackgroundURLSessionIdentifier)) { + Logger.jobManagerExample.debug("URLSession background task SwiftUI callback.") + + // Allow the `ArcGISURLSession` to handle it's background task events. + await ArcGISEnvironment.backgroundURLSession.handleEventsForBackgroundTask() + + // When the app is re-launched from a background url session, resume any paused jobs, + // and check the job status. + await JobManager.shared.resumeAllPausedJobs() + } + } +} + +extension Logger { + /// A logger for the job manager. + /// + /// To enable logging add an environment variable named "LOGGING_FOR_JOB_MANAGER_EXAMPLE" under Scheme + /// -> Arguments -> Environment Variables + static let jobManagerExample: Logger = { + if ProcessInfo.processInfo.environment.keys.contains("LOGGING_FOR_JOB_MANAGER_EXAMPLE") { + return Logger(subsystem: "com.esri.ArcGISToolkit.Examples", category: "JobManagerExample") + } else { + return Logger(OSLog.disabled) + } + }() +} diff --git a/JobManagerExample/JobManagerExample/JobManagerExampleView.swift b/JobManagerExample/JobManagerExample/JobManagerExampleView.swift new file mode 100644 index 000000000..e286ccfec --- /dev/null +++ b/JobManagerExample/JobManagerExample/JobManagerExampleView.swift @@ -0,0 +1,328 @@ +// Copyright 2023 Esri. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import ArcGIS +import ArcGISToolkit +import OSLog +import SwiftUI +import UserNotifications + +@MainActor +struct JobManagerExampleView: View { + /// The job manager used by this view. + @ObservedObject var jobManager = JobManager.shared + /// A Boolean value indicating if we are currently adding a geodatabase job. + @State private var isAddingGeodatabaseJob = false + /// A Boolean value indicating if we are currently adding an offline map job. + @State private var isAddingOfflineMapJob = false + + init() { + // Ask the job manager to schedule background status checks for every 30 seconds. + jobManager.preferredBackgroundStatusCheckSchedule = .regularInterval(interval: 30) + } + + var body: some View { + VStack { + HStack(spacing: 10) { + Spacer() + if isAddingGeodatabaseJob || isAddingOfflineMapJob { + ProgressView() + } + menu + } + List(jobManager.jobs, id: \.id) { job in + HStack { + JobView(job: job) + Button { + jobManager.jobs.removeAll(where: { $0 === job }) + } label: { + Image(systemName: "trash") + } + .buttonStyle(.borderless) + } + } + .listStyle(.plain) + } + .onAppear { + UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound]) { _, error in + if let error { + print(error.localizedDescription) + } + } + } + .padding() + } + + /// The jobs menu. + var menu: some View { + Menu { + Button { + isAddingGeodatabaseJob = true + Task { + do { + jobManager.jobs.append( + try await makeWildfiresGeodatabaseJob() + ) + } catch { + Logger.jobManagerExample.error("Error creating generate geodatabase job: \(error, privacy: .public)") + } + isAddingGeodatabaseJob = false + } + } label: { + Label("Generate Geodatabase", systemImage: "plus") + } + .disabled(isAddingGeodatabaseJob) + + Button { + isAddingOfflineMapJob = true + Task { + do { + jobManager.jobs.append( + try await makeNapervilleOfflineMapJob() + ) + } catch { + Logger.jobManagerExample.error("Error creating offline map job: \(error, privacy: .public)") + } + isAddingOfflineMapJob = false + } + } label: { + Label("Take Map Offline", systemImage: "plus") + } + .disabled(isAddingOfflineMapJob) + + Divider() + + Button { + jobManager.jobs.removeAll() + } label: { + Label("Remove All Jobs", systemImage: "trash") + } + + Button { + jobManager.jobs.removeAll { + $0.status == .failed || $0.status == .succeeded + } + } label: { + Label("Remove All Completed Jobs", systemImage: "trash") + } + } label: { + Text("Jobs") + } + } +} + +/// A view that displays data for a job. +private struct JobView: View { + /// The job that this view shows data for. + var job: Job + /// The job's error in case of failure. + @State private var error: Error? + /// The job's status. + @State private var status: Job.Status + /// The latest job message. + @State private var message: JobMessage? + + /// Initializer that takes a job for which to show the data for. + init(job: Job) { + self.job = job + status = job.status + } + + /// A Boolean value indicating if the progress is showing. + var isShowingProgress: Bool { + job.status == .started || (job.status == .paused && job.progress.fractionCompleted > 0) + } + + /// A Boolean value indicating if the cancel button is showing. + var isShowingCancel: Bool { + job.status == .started || job.status == .paused + } + + /// A string for the job's type. + var jobType: String { + "\(type(of: job))" + } + + var body: some View { + VStack (alignment: .leading, spacing: 5) { + Text(jobType) + Text(status.displayText) + .font(.footnote) + if let error { + Text(error.localizedDescription) + .font(.footnote) + .foregroundColor(.secondary) + .lineLimit(1) + } else { + if let message { + Text(message.text) + .font(.footnote) + .foregroundColor(.secondary) + .lineLimit(1) + } + if isShowingProgress { + ProgressView(job.progress) + .progressViewStyle(.linear) + .padding(.vertical) + } + HStack { + if status == .started { + Button("Pause", action: job.pause) + } else if status == .paused { + Button("Resume", action: job.start) + } else if status == .notStarted { + Button("Start", action: job.start) + } + Spacer() + if isShowingCancel { + Button("Cancel") { + Task { await job.cancel() } + } + } + } + .buttonStyle(.borderless) + .padding(.top, 2) + } + } + .padding() + .onReceive(job.$status) { + status = $0 + if status == .failed || status == .succeeded { + notifyJobCompleted() + } + } + .onReceive(job.messages) { + Logger.jobManagerExample.debug("Job Message: \($0.text, privacy: .public)") + message = $0 + } + } + + /// Posts a local notification that the job completed. + func notifyJobCompleted() { + Logger.jobManagerExample.debug("Posting local notification that job completed: \(status.displayText, privacy: .public)") + + let content = UNMutableNotificationContent() + content.sound = UNNotificationSound.default + content.title = "Job Completed" + content.subtitle = jobType + content.body = status.displayText + content.categoryIdentifier = "Job Completion" + + let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false) + let identifier = "My Local Notification" + let request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger) + + UNUserNotificationCenter.current().add(request) + } +} + +extension Job.Status { + /// Display text for the status. + var displayText: String { + switch self { + case .notStarted: + return "Not Started" + case .started: + return "Started" + case .paused: + return "Paused" + case .succeeded: + return "Succeeded" + case .failed: + return "Failed" + case .canceling: + return "Canceling" + } + } +} + +extension JobManagerExampleView { + /// Creates a job that generates a geodatabase for a wildfire service. + func makeWildfiresGeodatabaseJob() async throws -> GenerateGeodatabaseJob { + let url = URL(string: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/Sync/WildfireSync/FeatureServer")! + return try await makeGenerateGeodatabaseJob(url: url, syncModel: .layer) + } + + /// Creates a job that generates an offline map for Naperville. + func makeNapervilleOfflineMapJob() async throws -> GenerateOfflineMapJob { + let portalItem = PortalItem(url: URL(string: "https://www.arcgis.com/home/item.html?id=acc027394bc84c2fb04d1ed317aac674")!)! + let map = Map(item: portalItem) + let naperville = Envelope( + xMin: -9813416.487598, + yMin: 5126112.596989, + xMax: -9812775.435463, + yMax: 5127101.526749, + spatialReference: SpatialReference.webMercator + ) + return try await makeOfflineMapJob(map: map, extent: naperville) + } + + /// Creates a generate geodatabase job. + /// - Parameters: + /// - url: The URL to the task. + /// - syncModel: The sync model for the geodatabase. + /// - extent: The extent of the generated geodatabase. + func makeGenerateGeodatabaseJob(url: URL, syncModel: Geodatabase.SyncModel, extent: Envelope? = nil) async throws -> GenerateGeodatabaseJob { + let task = GeodatabaseSyncTask(url: url) + try await task.load() + + let params = GenerateGeodatabaseParameters() + params.extent = extent ?? task.featureServiceInfo?.fullExtent + params.outSpatialReference = extent?.spatialReference ?? SpatialReference.webMercator + params.syncModel = syncModel + + if syncModel == .layer, let featureServiceInfo = task.featureServiceInfo { + let layerOptions = featureServiceInfo.layerInfos + .compactMap( { $0 as? FeatureServiceLayerIDInfo }) + .compactMap(\.id) + .map(GenerateLayerOption.init(layerID:)) + params.addLayerOptions(layerOptions) + } + + let downloadURL = FileManager.default.documentsPath.appendingPathComponent(UUID().uuidString).appendingPathExtension("geodatabase") + + let job = task.makeGenerateGeodatabaseJob( + parameters: params, + downloadFileURL: downloadURL + ) + + return job + } + + /// Creates an offline map job. + /// - Parameters: + /// - map: The map to take offline. + /// - extent: The extent of the offline area. + func makeOfflineMapJob(map: Map, extent: Envelope) async throws -> GenerateOfflineMapJob { + let task = OfflineMapTask(onlineMap: map) + let params = try await task.makeDefaultGenerateOfflineMapParameters(areaOfInterest: extent) + let downloadURL = FileManager.default.documentsPath.appendingPathComponent(UUID().uuidString) + return task.makeGenerateOfflineMapJob(parameters: params, downloadDirectory: downloadURL) + } +} + +extension FileManager { + /// The path to the documents folder. + var documentsPath: URL { + URL( + fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] + ) + } +} + +extension JobProtocol { + /// The id of the job. + public var id: ObjectIdentifier { + ObjectIdentifier(self) + } +} diff --git a/JobManagerExample/JobManagerExample/Preview Content/Preview Assets.xcassets/Contents.json b/JobManagerExample/JobManagerExample/Preview Content/Preview Assets.xcassets/Contents.json new file mode 100644 index 000000000..73c00596a --- /dev/null +++ b/JobManagerExample/JobManagerExample/Preview Content/Preview Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/JobManagerExample/JobManagerExample/View.swift b/JobManagerExample/JobManagerExample/View.swift new file mode 100644 index 000000000..a8bff2b6e --- /dev/null +++ b/JobManagerExample/JobManagerExample/View.swift @@ -0,0 +1,42 @@ +// Copyright 2023 Esri. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +extension View { + /// Adds an action to perform when this view detects data emitted by the + /// given async sequence. If `action` is `nil`, then the async sequence is not observed. + /// The `action` closure is captured the first time the view appears. + /// - Parameters: + /// - sequence: The async sequence to observe. + /// - action: The action to perform when a value is emitted by `sequence`. + /// The value emitted by `sequence` is passed as a parameter to `action`. + /// The `action` is called on the `MainActor`. + /// - Returns: A view that triggers `action` when `sequence` emits a value. + @MainActor @ViewBuilder func onReceive( + _ sequence: S, + perform action: ((S.Element) -> Void)? + ) -> some View where S: AsyncSequence { + if let action { + task { + do { + for try await element in sequence { + action(element) + } + } catch {} + } + } else { + self + } + } +} diff --git a/JobManagerExample/README.md b/JobManagerExample/README.md new file mode 100644 index 000000000..f93734524 --- /dev/null +++ b/JobManagerExample/README.md @@ -0,0 +1,15 @@ +# JobManager Example App + +This is an application that shows how to use the JobManager toolkit component. + +Documentation for the JobManager toolkit component is [here](https://developers.arcgis.com/swift/toolkit-api-reference/documentation/arcgistoolkit/jobmanager). + +## Instructions + + 1. Clone or download this repo + 2. Open the `JobManager` project in Xcode by double clicking on the `JobManagerExample.xcodeproj` file + 3. Build and run the project + +## Note + +This example makes use of the `backgroundTask(_:action:)` view modifier which requires iOS 16. diff --git a/Package.swift b/Package.swift index d858a8d25..7e1e1a6ef 100644 --- a/Package.swift +++ b/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.7 +// swift-tools-version:5.9 // The swift-tools-version declares the minimum version of Swift required to build this package. // Copyright 2021 Esri. @@ -29,13 +29,16 @@ let package = Package( ), ], dependencies: [ - .package(url: "https://github.com/Esri/arcgis-maps-sdk-swift", .upToNextMinor(from: "200.2.0")) + .package(url: "https://github.com/Esri/arcgis-maps-sdk-swift", .upToNextMinor(from: "200.3.0")) ], targets: [ .target( name: "ArcGISToolkit", dependencies: [ .product(name: "ArcGIS", package: "arcgis-maps-sdk-swift") + ], + resources: [ + .copy("PrivacyInfo.xcprivacy") ] ), .testTarget( diff --git a/README.md b/README.md index 68dea7abe..9e38cd964 100644 --- a/README.md +++ b/README.md @@ -15,16 +15,19 @@ To use Toolkit in your project: * **[Bookmarks](https://developers.arcgis.com/swift/toolkit-api-reference/documentation/arcgistoolkit/bookmarks)** - Shows bookmarks, from a map, scene, or a list. * **[Compass](https://developers.arcgis.com/swift/toolkit-api-reference/documentation/arcgistoolkit/compass)** - Shows a compass direction when the map is rotated. Auto-hides when the map points north. * **[FloatingPanel](https://developers.arcgis.com/swift/toolkit-api-reference/documentation/arcgistoolkit/floatingpanel)** - Allows display of view-related content in a "bottom sheet". -* **[FloorFilter](https://developers.arcgis.com/swift/toolkit-api-reference/documentation/arcgistoolkit/floorfilter)** - Allows filtering of floor plan data in a geo view by a site, a building in the site, or a floor in the building. +* **[FloorFilter](https://developers.arcgis.com/swift/toolkit-api-reference/documentation/arcgistoolkit/floorfilter)** - Allows filtering of floor plan data in a geo view by a site, a building in the site, or a floor in the building. +* **[FlyoverSceneView](https://developers.arcgis.com/swift/toolkit-api-reference/documentation/arcgistoolkit/flyoversceneview)** - Allows you to explore a scene using your device as a window into the virtual world. +* **[JobManager](https://developers.arcgis.com/swift/toolkit-api-reference/documentation/arcgistoolkit/jobmanager)** - Manages saving and loading jobs so that they can continue to run if the app is backgrounded or even terminated by the system. * **[OverviewMap](https://developers.arcgis.com/swift/toolkit-api-reference/documentation/arcgistoolkit/overviewmap)** - Displays the visible extent of a geo view in a small "inset" map. * **[PopupView](https://developers.arcgis.com/swift/toolkit-api-reference/documentation/arcgistoolkit/popupview)** - Displays details, media, and attachments of features and graphics. * **[Scalebar](https://developers.arcgis.com/swift/toolkit-api-reference/documentation/arcgistoolkit/scalebar)** - Displays current scale reference. * **[SearchView](https://developers.arcgis.com/swift/toolkit-api-reference/documentation/arcgistoolkit/searchview)** - Displays a search experience for geo views. +* **[TableTopSceneView](https://developers.arcgis.com/swift/toolkit-api-reference/documentation/arcgistoolkit/tabletopsceneview)** - Allows you to anchor scene content to a physical surface, as if it were a 3D-printed model. * **[UtilityNetworkTrace](https://developers.arcgis.com/swift/toolkit-api-reference/documentation/arcgistoolkit/utilitynetworktrace)** - Runs traces on a web map published with a utility network and trace configurations. ## Requirements * ArcGIS Maps SDK for Swift -* Xcode 14.1 (or newer) +* Xcode 15.0 (or newer) The *ArcGIS Maps SDK for Swift Toolkit* has a *Target SDK* version of *15.0*, meaning that it can run on devices with *iOS 15.0* or newer. diff --git a/Sources/ArcGISToolkit/Components/Augmented Reality/ARCoachingOverlay.swift b/Sources/ArcGISToolkit/Components/Augmented Reality/ARCoachingOverlay.swift new file mode 100644 index 000000000..b88b60aec --- /dev/null +++ b/Sources/ArcGISToolkit/Components/Augmented Reality/ARCoachingOverlay.swift @@ -0,0 +1,62 @@ +// Copyright 2023 Esri. + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import ARKit +import SwiftUI + +/// A SwiftUI version of an ARCoachingOverlayView view. +struct ARCoachingOverlay: UIViewRepresentable { + /// The data source for an AR session. + var sessionProvider: ARSessionProviding? + /// The goal for the coaching overlay. + var goal: ARCoachingOverlayView.Goal + /// A Boolean value that indicates if coaching is in progress. + var active: Bool = false + + /// Controls whether the coaching is in progress. + /// - Parameter active: A Boolean value indicating if coaching is in progress. + /// - Returns: The `ARCoachingOverlay`. + func active(_ active: Bool) -> Self { + var view = self + view.active = active + return view + } + + /// Sets the AR session data source for the coaching overlay. + /// - Parameter sessionProvider: The AR session data source. + /// - Returns: The `ARCoachingOverlay`. + func sessionProvider(_ sessionProvider: ARSessionProviding) -> Self { + var view = self + view.sessionProvider = sessionProvider + return view + } + + func makeUIView(context: Context) -> ARCoachingOverlayView { + let view = ARCoachingOverlayView() + view.delegate = context.coordinator + view.activatesAutomatically = false + return view + } + + func updateUIView(_ uiView: ARCoachingOverlayView, context: Context) { + uiView.sessionProvider = sessionProvider + uiView.goal = goal + uiView.setActive(active, animated: true) + } + + func makeCoordinator() -> Coordinator { + Coordinator() + } + + class Coordinator: NSObject, ARCoachingOverlayViewDelegate {} +} diff --git a/Sources/ArcGISToolkit/Components/Augmented Reality/ARSwiftUIView.swift b/Sources/ArcGISToolkit/Components/Augmented Reality/ARSwiftUIView.swift new file mode 100644 index 000000000..a42a65c18 --- /dev/null +++ b/Sources/ArcGISToolkit/Components/Augmented Reality/ARSwiftUIView.swift @@ -0,0 +1,135 @@ +// Copyright 2023 Esri. + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import ARKit +import SwiftUI + +typealias ARViewType = ARSCNView + +/// A SwiftUI version of an AR view. +struct ARSwiftUIView { + /// The closure to call when the session's frame updates. + private(set) var onDidUpdateFrameAction: ((ARSession, ARFrame) -> Void)? + /// The closure to call when a node corresponding to a new anchor has been added to the view. + private(set) var onAddNodeAction: ((SCNSceneRenderer, SCNNode, ARAnchor) -> Void)? + /// The closure to call when a node has been updated to match it's corresponding anchor. + private(set) var onUpdateNodeAction: ((SCNSceneRenderer, SCNNode, ARAnchor) -> Void)? + + /// The proxy. + private let proxy: ARSwiftUIViewProxy? + + /// Creates an ARSwiftUIView. + /// - Parameter proxy: The provided proxy which will have it's state filled out + /// when available by the underlying view. + init(proxy: ARSwiftUIViewProxy? = nil) { + self.proxy = proxy + } + + /// Sets the closure to call when underlying scene renders. + func onDidUpdateFrame( + perform action: @escaping (ARSession, ARFrame) -> Void + ) -> Self { + var view = self + view.onDidUpdateFrameAction = action + return view + } + + /// Sets the closure to call when a new node has been added to the scene. + func onAddNode( + perform action: @escaping (SCNSceneRenderer, SCNNode, ARAnchor) -> Void + ) -> Self { + var view = self + view.onAddNodeAction = action + return view + } + + /// Sets the closure to call when the scene's nodes are updated. + func onUpdateNode( + perform action: @escaping (SCNSceneRenderer, SCNNode, ARAnchor) -> Void + ) -> Self { + var view = self + view.onUpdateNodeAction = action + return view + } +} + +extension ARSwiftUIView: UIViewRepresentable { + func makeUIView(context: Context) -> ARViewType { + let arView = ARViewType() + arView.delegate = context.coordinator + arView.session.delegate = context.coordinator + // Set the AR view on the proxy. + proxy?.arView = arView + return arView + } + + func updateUIView(_ uiView: ARViewType, context: Context) { + context.coordinator.onDidUpdateFrameAction = onDidUpdateFrameAction + context.coordinator.onAddNodeAction = onAddNodeAction + context.coordinator.onUpdateNodeAction = onUpdateNodeAction + } + + func makeCoordinator() -> Coordinator { + Coordinator() + } +} + +extension ARSwiftUIView { + class Coordinator: NSObject, ARSCNViewDelegate, ARSessionDelegate { + var onDidUpdateFrameAction: ((ARSession, ARFrame) -> Void)? + var onAddNodeAction: ((SCNSceneRenderer, SCNNode, ARAnchor) -> Void)? + var onUpdateNodeAction: ((SCNSceneRenderer, SCNNode, ARAnchor) -> Void)? + + func session(_ session: ARSession, didUpdate frame: ARFrame) { + onDidUpdateFrameAction?(session, frame) + } + + func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) { + onAddNodeAction?(renderer, node, anchor) + } + + func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) { + onUpdateNodeAction?(renderer, node, anchor) + } + } +} + +/// A proxy for the ARSwiftUIView. +class ARSwiftUIViewProxy: NSObject, ARSessionProviding { + /// The underlying AR view. + /// This is set by the ARSwiftUIView when it is available. + fileprivate var arView: ARViewType! + + /// The AR session. + @objc dynamic var session: ARSession { + arView.session + } + + /// Creates a raycast query that originates from a point on the view, aligned with the center of the camera's field of view. + /// - Parameters: + /// - point: The point on the view to extend the raycast from. + /// - target: The type of surface the raycast can interact with. + /// - alignment: The target's alignment with respect to gravity. + /// - Returns: An `ARRaycastQuery`. + func raycastQuery( + from point: CGPoint, + allowing target: ARRaycastQuery.Target, + alignment: ARRaycastQuery.TargetAlignment + ) -> ARRaycastQuery? { + return arView.raycastQuery( + from: point, + allowing: target, + alignment: alignment + ) + } +} diff --git a/Sources/ArcGISToolkit/Components/Augmented Reality/FlyoverSceneView.swift b/Sources/ArcGISToolkit/Components/Augmented Reality/FlyoverSceneView.swift new file mode 100644 index 000000000..c1403d015 --- /dev/null +++ b/Sources/ArcGISToolkit/Components/Augmented Reality/FlyoverSceneView.swift @@ -0,0 +1,189 @@ +// Copyright 2023 Esri. + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import ARKit +import SwiftUI +import ArcGIS + +/// A scene view that provides an augmented reality fly over experience. +public struct FlyoverSceneView: View { + /// The AR session. + @StateObject private var session = ObservableARSession() + /// The initial camera. + let initialCamera: Camera + /// The translation factor. + let translationFactor: Double + /// A Boolean value indicating whether to orient the scene view's initial heading to compass heading. + let shouldOrientToCompass: Bool + /// The closure that builds the scene view. + private let sceneViewBuilder: (SceneViewProxy) -> SceneView + /// The camera controller that we will set on the scene view. + @State private var cameraController: TransformationMatrixCameraController + /// The current interface orientation. + @State private var interfaceOrientation: InterfaceOrientation? + + /// Creates a fly over scene view. + /// - Parameters: + /// - initialLatitude: The initial latitude of the scene view's camera. + /// - initialLongitude: The initial longitude of the scene view's camera. + /// - initialAltitude: The initial altitude of the scene view's camera. + /// - translationFactor: The translation factor that defines how much the scene view translates + /// as the device moves. + /// - initialHeading: The initial heading of the scene view's camera. A value of `nil` means + /// the scene view's heading will be initially oriented to compass heading. + /// - sceneView: A closure that builds the scene view to be overlayed on top of the + /// augmented reality video feed. + /// - Remark: The provided scene view will have certain properties overridden in order to + /// be effectively viewed in augmented reality. One such property is the camera controller. + public init( + initialLatitude: Double, + initialLongitude: Double, + initialAltitude: Double, + translationFactor: Double, + initialHeading: Double? = nil, + @ViewBuilder sceneView: @escaping (SceneViewProxy) -> SceneView + ) { + let camera = Camera( + latitude: initialLatitude, + longitude: initialLongitude, + altitude: initialAltitude, + heading: initialHeading ?? 0, + pitch: 90, + roll: 0 + ) + self.init( + initialCamera: camera, + translationFactor: translationFactor, + shouldOrientToCompass: initialHeading == nil, + sceneView: sceneView + ) + } + + /// Creates a fly over scene view. + /// - Parameters: + /// - initialLocation: The initial location of the scene view's camera. + /// - translationFactor: The translation factor that defines how much the scene view translates + /// as the device moves. + /// - initialHeading: The initial heading of the scene view's camera. A value of `nil` means + /// the scene view's heading will be initially oriented to compass heading. + /// - sceneView: A closure that builds the scene view to be overlayed on top of the + /// augmented reality video feed. + /// - Remark: The provided scene view will have certain properties overridden in order to + /// be effectively viewed in augmented reality. One such property is the camera controller. + public init( + initialLocation: Point, + translationFactor: Double, + initialHeading: Double? = nil, + @ViewBuilder sceneView: @escaping (SceneViewProxy) -> SceneView + ) { + let camera = Camera( + location: initialLocation, + heading: initialHeading ?? 0, + pitch: 90, + roll: 0 + ) + self.init( + initialCamera: camera, + translationFactor: translationFactor, + shouldOrientToCompass: initialHeading == nil, + sceneView: sceneView + ) + } + + /// Creates a fly over scene view. + /// - Parameters: + /// - initialCamera: The initial camera. + /// - translationFactor: The translation factor that defines how much the scene view translates + /// as the device moves. + /// - shouldOrientToCompass: A Boolean value indicating whether to orient the scene view's + /// initial heading to compass heading. + /// - sceneView: A closure that builds the scene view to be overlayed on top of the + /// augmented reality video feed. + /// - Remark: The provided scene view will have certain properties overridden in order to + /// be effectively viewed in augmented reality. One such property is the camera controller. + private init( + initialCamera: Camera, + translationFactor: Double, + shouldOrientToCompass: Bool, + @ViewBuilder sceneView: @escaping (SceneViewProxy) -> SceneView + ) { + self.sceneViewBuilder = sceneView + self.shouldOrientToCompass = shouldOrientToCompass + self.translationFactor = translationFactor + self.initialCamera = initialCamera + + let cameraController = TransformationMatrixCameraController(originCamera: initialCamera) + cameraController.translationFactor = translationFactor + _cameraController = .init(initialValue: cameraController) + } + + public var body: some View { + SceneViewReader { sceneViewProxy in + sceneViewBuilder(sceneViewProxy) + .cameraController(cameraController) + .onAppear { + let configuration = ARPositionalTrackingConfiguration() + if shouldOrientToCompass { + configuration.worldAlignment = .gravityAndHeading + } + session.start(configuration: configuration) + } + .onDisappear { session.pause() } + .onChange(of: session.currentFrame) { frame in + guard let frame, let interfaceOrientation else { return } + sceneViewProxy.updateCamera( + frame: frame, + cameraController: cameraController, + orientation: interfaceOrientation + ) + } + .onChange(of: initialCamera) { initialCamera in + cameraController.originCamera = initialCamera + } + .onChange(of: translationFactor) { translationFactor in + cameraController.translationFactor = translationFactor + } + .observingInterfaceOrientation($interfaceOrientation) + } + } +} + +/// An observable object that wraps an `ARSession` and provides the current frame. +private class ObservableARSession: NSObject, ObservableObject, ARSessionDelegate { + /// The backing AR session. + private let session = ARSession() + + override init() { + super.init() + session.delegate = self + } + + /// Starts the AR session by running a given configuration. + /// - Parameter configuration: The AR configuration to run. + func start(configuration: ARConfiguration) { + session.run(configuration) + } + + /// Pauses the AR session. + func pause() { + session.pause() + } + + /// The latest AR frame. + @Published + var currentFrame: ARFrame? + + func session(_ session: ARSession, didUpdate frame: ARFrame) { + currentFrame = frame + } +} diff --git a/Sources/ArcGISToolkit/Components/Augmented Reality/TableTopSceneView.swift b/Sources/ArcGISToolkit/Components/Augmented Reality/TableTopSceneView.swift new file mode 100644 index 000000000..54a4862f8 --- /dev/null +++ b/Sources/ArcGISToolkit/Components/Augmented Reality/TableTopSceneView.swift @@ -0,0 +1,340 @@ +// Copyright 2023 Esri. + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import ARKit +import SwiftUI +import ArcGIS + +/// A scene view that provides an augmented reality table top experience. +public struct TableTopSceneView: View { + /// The proxy for the ARSwiftUIView. + @State private var arViewProxy = ARSwiftUIViewProxy() + /// The initial transformation for the scene's camera controller. + @State private var initialTransformation: TransformationMatrix? = nil + /// The camera controller that will be set on the scene view. + @State private var cameraController: TransformationMatrixCameraController + /// The current interface orientation. + @State private var interfaceOrientation: InterfaceOrientation? + /// The help text to guide the user through an AR experience. + @State private var helpText: String = "" + /// A Boolean value that indicates whether the coaching overlay view is active. + @State private var coachingOverlayIsActive: Bool = true + /// A Boolean value that indicates whether to hide the coaching overlay view. + var coachingOverlayIsHidden: Bool = false + /// The closure that builds the scene view. + private let sceneViewBuilder: (SceneViewProxy) -> SceneView + /// The configuration for the AR session. + private let configuration: ARWorldTrackingConfiguration + /// A Boolean value indicating that the scene's initial transformation has been set. + var initialTransformationIsSet: Bool { initialTransformation != nil } + /// The anchor point for the scene view. + let anchorPoint: Point + /// The translation factor for the scene's camera controller. + let translationFactor: Double + /// The clipping distance for the scene's camera controller. + let clippingDistance: Double? + + /// Creates a table top scene view. + /// - Parameters: + /// - anchorPoint: The location point of the ArcGIS Scene that is anchored on a physical surface. + /// - translationFactor: The translation factor that defines how much the scene view translates + /// as the device moves. + /// - clippingDistance: Determines the clipping distance in meters around the camera. A value + /// of `nil` means that no data will be clipped. + /// - sceneView: A closure that builds the scene view to be overlayed on top of the + /// augmented reality video feed. + /// - Remark: The provided scene view will have certain properties overridden in order to + /// be effectively viewed in augmented reality. Properties such as the camera controller, + /// and view drawing mode. + public init( + anchorPoint: Point, + translationFactor: Double, + clippingDistance: Double?, + @ViewBuilder sceneView: @escaping (SceneViewProxy) -> SceneView + ) { + self.sceneViewBuilder = sceneView + self.anchorPoint = anchorPoint + self.translationFactor = translationFactor + self.clippingDistance = clippingDistance + + let initialCamera = Camera(location: anchorPoint, heading: 0, pitch: 90, roll: 0) + let cameraController = TransformationMatrixCameraController(originCamera: initialCamera) + cameraController.translationFactor = translationFactor + cameraController.clippingDistance = clippingDistance + _cameraController = .init(initialValue: cameraController) + + configuration = ARWorldTrackingConfiguration() + configuration.worldAlignment = .gravityAndHeading + configuration.planeDetection = [.horizontal] + } + + public var body: some View { + SceneViewReader { sceneViewProxy in + ZStack { + ARSwiftUIView(proxy: arViewProxy) + .onDidUpdateFrame { _, frame in + guard let interfaceOrientation else { return } + sceneViewProxy.updateCamera( + frame: frame, + cameraController: cameraController, + orientation: interfaceOrientation, + initialTransformation: initialTransformation + ) + sceneViewProxy.setFieldOfView( + for: frame, + orientation: interfaceOrientation + ) + } + .onAddNode { renderer, node, anchor in + addPlane(renderer: renderer, node: node, anchor: anchor) + } + .onUpdateNode { _, node, anchor in + updatePlane(with: node, for: anchor) + } + .onSingleTapGesture { screenPoint in + guard !initialTransformationIsSet else { return } + + if let transformation = sceneViewProxy.initialTransformation( + for: arViewProxy, + using: screenPoint + ) { + initialTransformation = transformation + withAnimation { + helpText = "" + } + } + } + .onAppear { + arViewProxy.session.run(configuration) + } + .onDisappear { + arViewProxy.session.pause() + } + + if !coachingOverlayIsHidden { + ARCoachingOverlay(goal: .horizontalPlane) + .sessionProvider(arViewProxy) + .active(coachingOverlayIsActive) + .allowsHitTesting(false) + .overlay (alignment: .top) { + if !helpText.isEmpty { + Text(helpText) + .frame(maxWidth: .infinity, alignment: .center) + .padding(8) + .background(.regularMaterial, ignoresSafeAreaEdges: .horizontal) + } + } + } + + sceneViewBuilder(sceneViewProxy) + .cameraController(cameraController) + .attributionBarHidden(true) + .spaceEffect(.transparent) + .atmosphereEffect(.off) + .opacity(initialTransformationIsSet ? 1 : 0) + } + } + .onChange(of: anchorPoint) { anchorPoint in + cameraController.originCamera = Camera(location: anchorPoint, heading: 0, pitch: 90, roll: 0) + } + .onChange(of: translationFactor) { translationFactor in + cameraController.translationFactor = translationFactor + } + .onChange(of: clippingDistance) { clippingDistance in + cameraController.clippingDistance = clippingDistance + } + .observingInterfaceOrientation($interfaceOrientation) + } + + /// Visualizes a new node added to the scene as an AR Plane. + /// - Parameters: + /// - renderer: The renderer for the scene. + /// - node: The node to be added to the scene. + /// - anchor: The anchor position of the node. + private func addPlane(renderer: SCNSceneRenderer, node: SCNNode, anchor: ARAnchor) { + guard !initialTransformationIsSet, + let planeAnchor = anchor as? ARPlaneAnchor, + let device = renderer.device, + let planeGeometry = ARSCNPlaneGeometry(device: device) + else { return } + + // Disable coaching overlay when a plane node is found. + coachingOverlayIsActive = false + + planeGeometry.update(from: planeAnchor.geometry) + + // Add SCNMaterial to plane geometry. + let material = SCNMaterial() + material.isDoubleSided = true + material.diffuse.contents = UIColor.white.withAlphaComponent(0.65) + planeGeometry.materials = [material] + + // Create a SCNNode from plane geometry. + let planeNode = SCNNode(geometry: planeGeometry) + + // Add the visualization to the ARKit-managed node so that it tracks + // changes in the plane anchor as plane estimation continues. + node.addChildNode(planeNode) + + // Set help text when plane is visualized. + withAnimation { + helpText = .planeFound + } + } + + /// Visualizes a node updated in the scene as an AR Plane. + /// - Parameters: + /// - node: The node to be updated in the scene. + /// - anchor: The anchor position of the node. + private func updatePlane(with node: SCNNode, for anchor: ARAnchor) { + if initialTransformationIsSet { + node.removeFromParentNode() + return + } + + guard let planeAnchor = anchor as? ARPlaneAnchor, + let planeNode = node.childNodes.first, + let planeGeometry = planeNode.geometry as? ARSCNPlaneGeometry + else { return } + + // Update extent visualization to the anchor's new geometry. + planeGeometry.update(from: planeAnchor.geometry) + + // Set help text when plane visualization is updated. + withAnimation { + helpText = .planeFound + } + } + + /// Sets the visibility of the coaching overlay view for the AR experince. + /// - Parameter hidden: A Boolean value that indicates whether to hide the + /// coaching overlay view. + public func coachingOverlayHidden(_ hidden: Bool) -> Self { + var view = self + view.coachingOverlayIsHidden = hidden + return view + } +} + +private extension View { + /// Sets a closure to perform when a single tap occurs on the view. + /// - Parameters: + /// - action: The closure to perform upon single tap. + /// - screenPoint: The location of the tap in the view's coordinate space. + func onSingleTapGesture(perform action: @escaping (_ screenPoint: CGPoint) -> Void) -> some View { + if #available(iOS 16.0, *) { + return self.onTapGesture { screenPoint in + action(screenPoint) + } + } else { + // Use a drag gesture with a minimum dragging distance of zero so the + // gesture is recognized with a single tap. + return self.gesture( + DragGesture(minimumDistance: 0) + .onEnded { dragAttributes in + action(dragAttributes.location) + } + ) + } + } +} + +private extension ARSwiftUIViewProxy { + /// Performs a hit test operation to get the transformation matrix representing the corresponding real-world point for `screenPoint`. + /// - Parameter screenPoint: The screen point to determine the real world transformation matrix from. + /// - Returns: A `TransformationMatrix` representing the real-world point corresponding to `screenPoint`. + func hitTest(at screenPoint: CGPoint) -> TransformationMatrix? { + // Use the `raycastQuery` method on ARSCNView to get the location of `screenPoint`. + guard let query = raycastQuery( + from: screenPoint, + allowing: .existingPlaneGeometry, + alignment: .any + ) else { return nil } + + let results = session.raycast(query) + + // Get the worldTransform from the first result; if there's no worldTransform, return nil. + guard let worldTransform = results.first?.worldTransform else { return nil } + + // Create our hit test matrix based on the worldTransform location. + // Right now we ignore the orientation of the plane that was hit to find the point + // since we only use horizontal planes. + // If we start supporting vertical planes we will have to stop suppressing the + // quaternion rotation to a null rotation (0,0,0,1). + let hitTestMatrix = TransformationMatrix.normalized( + quaternionX: 0, + quaternionY: 0, + quaternionZ: 0, + quaternionW: 1, + translationX: Double(worldTransform.columns.3.x), + translationY: Double(worldTransform.columns.3.y), + translationZ: Double(worldTransform.columns.3.z) + ) + + return hitTestMatrix + } +} + +private extension SceneViewProxy { + /// Sets the initial transformation used to offset the originCamera. The initial transformation is based on an AR point determined + /// via existing plane hit detection from `screenPoint`. If an AR point cannot be determined, this method will return `false`. + /// - Parameters: + /// - arViewProxy: The AR view proxy. + /// - screenPoint: The screen point to determine the `initialTransformation` from. + /// - Returns: The `initialTransformation`. + func initialTransformation( + for arViewProxy: ARSwiftUIViewProxy, + using screenPoint: CGPoint + ) -> TransformationMatrix? { + // Use the `hitTest` method to get the matrix of `screenPoint`. + guard let matrix = arViewProxy.hitTest(at: screenPoint) else { return nil } + + // Set the `initialTransformation` as the TransformationMatrix.identity - hit test matrix. + let initialTransformation = TransformationMatrix.identity.subtracting(matrix) + + return initialTransformation + } + + /// Sets the field of view for the scene view's camera for a given augmented reality frame. + /// - Parameters: + /// - frame: The current AR frame. + /// - orientation: The interface orientation. + func setFieldOfView(for frame: ARFrame, orientation: InterfaceOrientation) { + let camera = frame.camera + let intrinsics = camera.intrinsics + let imageResolution = camera.imageResolution + + setFieldOfViewFromLensIntrinsics( + xFocalLength: intrinsics[0][0], + yFocalLength: intrinsics[1][1], + xPrincipal: intrinsics[2][0], + yPrincipal: intrinsics[2][1], + xImageSize: Float(imageResolution.width), + yImageSize: Float(imageResolution.height), + interfaceOrientation: orientation + ) + } +} + +private extension String { + static var planeFound: String { + String( + localized: "Tap a surface to place the scene", + bundle: .toolkitModule, + comment: """ + An instruction to the user to tap on a horizontal surface to + place an ArcGIS Scene. + """ + ) + } +} diff --git a/Sources/ArcGISToolkit/Components/Authentication/Authenticator.swift b/Sources/ArcGISToolkit/Components/Authentication/Authenticator.swift index c292182cd..74beca8f3 100644 --- a/Sources/ArcGISToolkit/Components/Authentication/Authenticator.swift +++ b/Sources/ArcGISToolkit/Components/Authentication/Authenticator.swift @@ -12,8 +12,8 @@ // limitations under the License. import ArcGIS -import SwiftUI import Combine +import CryptoTokenKit /// The `Authenticator` is a configurable object that handles authentication challenges. It will /// display a user interface when network and ArcGIS authentication challenges occur. @@ -107,13 +107,22 @@ extension Authenticator: ArcGISAuthenticationChallengeHandler { extension Authenticator: NetworkAuthenticationChallengeHandler { public func handleNetworkAuthenticationChallenge( _ challenge: NetworkAuthenticationChallenge - ) async -> NetworkAuthenticationChallenge.Disposition { + ) async -> NetworkAuthenticationChallenge.Disposition { // If `promptForUntrustedHosts` is `false` then perform default handling // for server trust challenges. guard promptForUntrustedHosts || challenge.kind != .serverTrust else { return .continueWithoutCredential } + // If the smart card is connected to the device then a personal identity verification (PIV) + // token is available in the `TKTokenWatcher().tokenIDs`. Create a smart card network + // credential with first available PIV token and continue with credential. + if challenge.kind == .clientCertificate, + let pivToken = TKTokenWatcher().tokenIDs.filter({ $0.localizedCaseInsensitiveContains("pivtoken") }).first, + let credential = try? NetworkCredential.smartCard(pivToken: pivToken) { + return .continueWithCredential(credential) + } + let challengeContinuation = NetworkChallengeContinuation(networkChallenge: challenge) // Alleviates an error with "already presenting". diff --git a/Sources/ArcGISToolkit/Components/Authentication/AuthenticatorModifier.swift b/Sources/ArcGISToolkit/Components/Authentication/AuthenticatorModifier.swift index 2de80b6b2..f834e34d3 100644 --- a/Sources/ArcGISToolkit/Components/Authentication/AuthenticatorModifier.swift +++ b/Sources/ArcGISToolkit/Components/Authentication/AuthenticatorModifier.swift @@ -12,6 +12,7 @@ // limitations under the License. import SwiftUI +import ArcGIS public extension View { /// Presents user experiences for collecting network authentication credentials from the user. @@ -37,6 +38,7 @@ private struct AuthenticatorOverlayModifier: ViewModifier { Color.clear .frame(width: 0, height: 0) .modifier(AuthenticatorModifier(authenticator: authenticator)) + ._oAuthWebViewSheet() } } } diff --git a/Sources/ArcGISToolkit/Components/Authentication/CertificatePickerViewModifier.swift b/Sources/ArcGISToolkit/Components/Authentication/CertificatePickerViewModifier.swift index ec1a4973a..c6bf34c41 100644 --- a/Sources/ArcGISToolkit/Components/Authentication/CertificatePickerViewModifier.swift +++ b/Sources/ArcGISToolkit/Components/Authentication/CertificatePickerViewModifier.swift @@ -11,9 +11,10 @@ // See the License for the specific language governing permissions and // limitations under the License. +import ArcGIS +import Combine import SwiftUI import UniformTypeIdentifiers -import ArcGIS /// An object that provides the business logic for the workflow of prompting the user for a /// certificate and a password. @@ -35,7 +36,7 @@ import ArcGIS var certificateURL: URL? /// A Boolean value indicating whether to show the prompt. - @Published var showPrompt = true + @Published var showPrompt = false /// A Boolean value indicating whether to show the certificate file picker. @Published var showPicker = false @@ -62,21 +63,26 @@ import ArcGIS /// Proceeds to show the file picker. This should be called after the prompt that notifies the /// user that a certificate must be selected. - func proceedFromPrompt() { - showPicker = true + func proceedToPicker() { + Task { + // If we don't delay this, then the picker does not animate in. + // Delay for 0.25 seconds. + try await Task.sleep(nanoseconds: 250_000_000) + self.showPicker = true + } } /// Proceeds to show the user the password form. This should be called after the user selects /// a certificate. /// - Parameter url: The URL of the certificate that the user chose. - func proceed(withCertificateURL url: URL) { + func proceedToPasswordEntry(forCertificateWithURL url: URL) { certificateURL = url showPassword = true } /// Attempts to use the certificate and password to respond to the challenge. /// - Parameter password: The password for the certificate. - func proceed(withPassword password: String) { + func proceedToUseCertificate(withPassword password: String) { guard let certificateURL = certificateURL else { preconditionFailure() } @@ -102,10 +108,8 @@ import ArcGIS func cancel() { challenge.resume(with: .cancel) } - - private func showCertificateError(_ error: CertificateError) async { - // This is required to prevent an "already presenting" error. - try? await Task.sleep(nanoseconds: 100_000) + + private func showCertificateError(_ error: CertificateError) { certificateError = error showCertificateError = true } @@ -115,13 +119,22 @@ extension CertificateImportError: LocalizedError { public var errorDescription: String? { switch self { case .invalidData: - return String(localized: "The certificate file was invalid.", bundle: .toolkitModule) + return String( + localized: "The certificate file was invalid.", + bundle: .toolkitModule, + comment: "A label indicating the chosen file was invalid." + ) case .invalidPassword: - return String(localized: "The password was invalid.", bundle: .toolkitModule) + return String( + localized: "The password was invalid.", + bundle: .toolkitModule, + comment: "A label indicating the given password was invalid." + ) default: return SecCopyErrorMessageString(rawValue, nil) as String? ?? String( localized: "The certificate file or password was invalid.", - bundle: .toolkitModule + bundle: .toolkitModule, + comment: "A label indicating the chosen file or given password was invalid." ) } } @@ -131,7 +144,11 @@ extension CertificatePickerViewModel.CertificateError: LocalizedError { var errorDescription: String? { switch self { case .couldNotAccessCertificateFile: - return String(localized: "Could not access the certificate file.", bundle: .toolkitModule) + return String( + localized: "Could not access the certificate file.", + bundle: .toolkitModule, + comment: "A label indicating a certificate file was inaccessible." + ) case .importError(let error): return error.localizedDescription case .other(let error): @@ -153,6 +170,13 @@ struct CertificatePickerViewModifier: ViewModifier { func body(content: Content) -> some View { content + .delayedOnAppear { + // Present the prompt right away. + // Setting it after initialization allows it to animate. + // However, this needs to happen after a slight delay or + // it doesn't show. + viewModel.showPrompt = true + } .promptBrowseCertificate( isPresented: $viewModel.showPrompt, viewModel: viewModel @@ -162,30 +186,36 @@ struct CertificatePickerViewModifier: ViewModifier { viewModel: viewModel ) .credentialInput( - fields: .password, isPresented: $viewModel.showPassword, + fields: .password, message: String( localized: "Please enter a password for the chosen certificate.", - bundle: .toolkitModule + bundle: .toolkitModule, + comment: "A label requesting the password associated with the chosen certificate." ), title: String( localized: "Password Required", - bundle: .toolkitModule + bundle: .toolkitModule, + comment: "A label indicating that a password is required to proceed with an operation." ), cancelAction: .init( - title: String(localized: "Cancel", bundle: .toolkitModule), + title: String.cancel, handler: { _, _ in viewModel.cancel() } ), continueAction: .init( - title: String(localized: "OK", bundle: .toolkitModule), + title: String( + localized: "OK", + bundle: .toolkitModule, + comment: "A label for button to proceed with an operation." + ), handler: { _, password in - viewModel.proceed(withPassword: password) + viewModel.proceedToUseCertificate(withPassword: password) } ) ) - .alertCertificateError( + .certificateErrorSheet( isPresented: $viewModel.showCertificateError, viewModel: viewModel ) @@ -206,30 +236,58 @@ private extension View { isPresented: Binding, viewModel: CertificatePickerViewModel ) -> some View { - alert( - Text("Certificate Required", bundle: .toolkitModule), - isPresented: isPresented, - presenting: viewModel.challengingHost - ) { _ in - Button { - viewModel.proceedFromPrompt() - } label: { - Text("Browse For Certificate", bundle: .toolkitModule) - } - Button(role: .cancel) { - viewModel.cancel() - } label: { - Text("Cancel", bundle: .toolkitModule) + sheet(isPresented: isPresented) { + VStack(alignment: .center) { + Text( + "Certificate Required", + bundle: .toolkitModule, + comment: "A label indicating that a certificate is required to proceed." + ) + .font(.title) + .multilineTextAlignment(.center) + .padding(.vertical) + Text( + "A certificate is required to access content on \(viewModel.challengingHost).", + bundle: .toolkitModule, + comment: """ + An alert message indicating that a certificate is required to access + content on a remote host. The variable is the host that prompted the challenge. + """ + ) + .font(.subheadline) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + .padding(.bottom) + HStack { + Spacer() + Button(role: .cancel) { + isPresented.wrappedValue = false + viewModel.cancel() + } label: { + Text(String.cancel) + .padding(.horizontal) + } + .buttonStyle(.bordered) + Spacer() + Button(role: .cancel) { + isPresented.wrappedValue = false + viewModel.proceedToPicker() + } label: { + Text( + "Browse", + bundle: .toolkitModule, + comment: "A label for a button to open the system file browser." + ) + .padding(.horizontal) + } + .buttonStyle(.borderedProminent) + Spacer() + } + Spacer() } - } message: { _ in - Text( - "A certificate is required to access content on \(viewModel.challengingHost).", - bundle: .toolkitModule, - comment: """ - An alert message indicating that a certificate is required to access - content on a remote host. The variable is the host that prompted the challenge. - """ - ) + .interactiveDismissDisabled() + .mediumPresentationDetents() + .padding() } } } @@ -245,46 +303,82 @@ private extension View { ) -> some View { sheet(isPresented: isPresented) { DocumentPickerView(contentTypes: [.pfx]) { - viewModel.proceed(withCertificateURL: $0) + isPresented.wrappedValue = false + viewModel.proceedToPasswordEntry(forCertificateWithURL: $0) } onCancel: { + isPresented.wrappedValue = false viewModel.cancel() } - .edgesIgnoringSafeArea(.bottom) .interactiveDismissDisabled() + .edgesIgnoringSafeArea(.bottom) } } } private extension View { - /// Displays an alert to notify that there was an error importing the certificate. + /// Displays a sheet to notify that there was an error importing the certificate. /// - Parameters: /// - isPresented: A Boolean value indicating if the view is presented. /// - viewModel: The view model associated with the view. - @MainActor @ViewBuilder func alertCertificateError( + @MainActor @ViewBuilder func certificateErrorSheet( isPresented: Binding, viewModel: CertificatePickerViewModel ) -> some View { - alert( - Text("Error importing certificate", bundle: .toolkitModule), - isPresented: isPresented - ) { - Button { - viewModel.proceedFromPrompt() - } label: { - Text("Try Again", bundle: .toolkitModule) - } - Button(role: .cancel) { - viewModel.cancel() - } label: { - Text("Cancel", bundle: .toolkitModule) + sheet(isPresented: isPresented) { + VStack(alignment: .center) { + Text( + "Error importing certificate", + bundle: .toolkitModule, + comment: """ + A message indicating that some error occurred while importing a chosen + network certificate. + """ + ) + .font(.title) + .multilineTextAlignment(.center) + .padding(.vertical) + + Text( + viewModel.certificateError?.localizedDescription ?? String( + localized: "The certificate file or password was invalid.", + bundle: .toolkitModule, + comment: "A label indicating the chosen file or given password was invalid." + ) + ) + .font(.subheadline) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + .padding(.bottom) + HStack { + Spacer() + Button(role: .cancel) { + isPresented.wrappedValue = false + viewModel.cancel() + } label: { + Text(String.cancel) + .padding(.horizontal) + } + .buttonStyle(.bordered) + Spacer() + Button(role: .cancel) { + isPresented.wrappedValue = false + viewModel.proceedToPicker() + } label: { + Text( + "Try Again", + bundle: .toolkitModule, + comment: "A label for a button allowing the user to retry an operation." + ) + .padding(.horizontal) + } + .buttonStyle(.borderedProminent) + Spacer() + } + Spacer() } - } message: { - Text( - viewModel.certificateError?.localizedDescription ?? String( - localized: "The certificate file or password was invalid.", - bundle: .toolkitModule - ) - ) + .interactiveDismissDisabled() + .mediumPresentationDetents() + .padding() } } } diff --git a/Sources/ArcGISToolkit/Components/Authentication/LoginViewModifier.swift b/Sources/ArcGISToolkit/Components/Authentication/LoginViewModifier.swift index 28ce1e104..d9769e00e 100644 --- a/Sources/ArcGISToolkit/Components/Authentication/LoginViewModifier.swift +++ b/Sources/ArcGISToolkit/Components/Authentication/LoginViewModifier.swift @@ -29,10 +29,16 @@ struct LoginViewModifier: ViewModifier { func body(content: Content) -> some View { content - .onAppear { isPresented = true } + .delayedOnAppear { + // Present the sheet right away. + // Setting it after initialization allows it to animate. + // However, this needs to happen after a slight delay or + // it doesn't show. + isPresented = true + } .credentialInput( - fields: .usernamePassword, isPresented: $isPresented, + fields: .usernamePassword, message: String( localized: "You must sign in to access '\(challengingHost)'", bundle: .toolkitModule, @@ -41,15 +47,23 @@ struct LoginViewModifier: ViewModifier { The host is indicated in the variable. """ ), - title: String(localized: "Authentication Required", bundle: .toolkitModule), + title: String( + localized: "Authentication Required", + bundle: .toolkitModule, + comment: "A label indicating authentication is required to proceed." + ), cancelAction: .init( - title: String(localized: "Cancel", bundle: .toolkitModule), + title: String.cancel, handler: { _, _ in onCancel() } ), continueAction: .init( - title: String(localized: "Continue", bundle: .toolkitModule), + title: String( + localized: "Continue", + bundle: .toolkitModule, + comment: "A label for a button used to continue the authentication operation." + ), handler: { username, password in let loginCredential = LoginCredential( username: username, password: password diff --git a/Sources/ArcGISToolkit/Components/Authentication/TrustHostViewModifier.swift b/Sources/ArcGISToolkit/Components/Authentication/TrustHostViewModifier.swift index eddaab9dc..9092e602a 100644 --- a/Sources/ArcGISToolkit/Components/Authentication/TrustHostViewModifier.swift +++ b/Sources/ArcGISToolkit/Components/Authentication/TrustHostViewModifier.swift @@ -26,47 +26,75 @@ struct TrustHostViewModifier: ViewModifier { /// The network authentication challenge for the untrusted host. let challenge: NetworkChallengeContinuation - // Even though we will present it right away we need to use a state variable for this. - // Using a constant has 2 issues. One, it won't animate. Two, when challenging for multiple - // endpoints at a time, and the challenges stack up, you can end up with a "already presenting" - // error. + /// A Boolean value indicating whether or not the prompt is displayed. @State var isPresented: Bool = false + var title: some View { + Text( + "Certificate Trust Warning", + bundle: .toolkitModule, + comment: "A label indicating that the remote host's certificate is not trusted." + ) + .font(.title) + .multilineTextAlignment(.center) + } + + var message: some View { + Text( + "Dangerous: The certificate provided by '\(challenge.host)' is not signed by a trusted authority.", + bundle: .toolkitModule, + comment: "A warning that the host service (challenge.host) is providing a potentially unsafe certificate." + ) + .multilineTextAlignment(.center) + .font(.subheadline) + .foregroundColor(.secondary) + } + func body(content: Content) -> some View { content - .onAppear { - // Present the alert right away. This makes it animated. + .delayedOnAppear { + // Present the sheet right away. + // Setting it after initialization allows it to animate. + // However, this needs to happen after a slight delay or + // it doesn't show. isPresented = true } - .alert( - Text( - "Certificate Trust Warning", - bundle: .toolkitModule, - comment: "A label indicating that the remote host's certificate is not trusted." - ), - isPresented: $isPresented, - presenting: challenge - ) { _ in - Button(role: .destructive) { - challenge.resume(with: .continueWithCredential(.serverTrust)) - } label: { - Text( - "Allow", - bundle: .toolkitModule, - comment: "A button indicating the user accepts a potentially dangerous action." - ) - } - Button(role: .cancel) { - challenge.resume(with: .cancel) - } label: { - Text("Cancel", bundle: .toolkitModule) + .sheet(isPresented: $isPresented) { + VStack(alignment: .center) { + title + .padding(.vertical) + message + .padding(.bottom) + HStack { + Spacer() + Button(role: .cancel) { + isPresented = false + challenge.resume(with: .cancel) + } label: { + Text(String.cancel) + .padding(.horizontal) + } + .buttonStyle(.bordered) + Spacer() + Button(role: .destructive) { + isPresented = false + challenge.resume(with: .continueWithCredential(.serverTrust)) + } label: { + Text( + "Allow", + bundle: .toolkitModule, + comment: "A button indicating the user accepts a potentially dangerous action." + ) + .padding(.horizontal) + } + .buttonStyle(.borderedProminent) + Spacer() + } + Spacer() } - } message: { _ in - Text( - "Dangerous: The certificate provided by '\(challenge.host)' is not signed by a trusted authority.", - bundle: .toolkitModule, - comment: "A warning that the host service (challenge.host) is providing a potentially unsafe certificate." - ) + .padding() + .mediumPresentationDetents() + .interactiveDismissDisabled() } } } diff --git a/Sources/ArcGISToolkit/Components/BasemapGallery/BasemapGallery.swift b/Sources/ArcGISToolkit/Components/BasemapGallery/BasemapGallery.swift index 8d6831f7a..9bcd4ed18 100644 --- a/Sources/ArcGISToolkit/Components/BasemapGallery/BasemapGallery.swift +++ b/Sources/ArcGISToolkit/Components/BasemapGallery/BasemapGallery.swift @@ -258,15 +258,37 @@ extension AlertItem { switch (spatialReferenceMismatchError.basemapSpatialReference, spatialReferenceMismatchError.geoModelSpatialReference) { case (.some(_), .some(_)): - message = String(localized: "The basemap has a spatial reference that is incompatible with the map.", bundle: .toolkitModule) + message = String( + localized: "The basemap has a spatial reference that is incompatible with the map.", + bundle: .toolkitModule, + comment: """ + A label indicating the spatial reference of the chosen basemap doesn't + match the spatial reference of the map. + """ + ) case (_, .none): - message = String(localized: "The map does not have a spatial reference.", bundle: .toolkitModule) + message = String( + localized: "The map does not have a spatial reference.", + bundle: .toolkitModule, + comment: "A label indicating the map doesn't have a spatial reference." + ) case (.none, _): - message = String(localized: "The basemap does not have a spatial reference.", bundle: .toolkitModule) + message = String( + localized: "The basemap does not have a spatial reference.", + bundle: .toolkitModule, + comment: "A label indicating the chosen basemap doesn't have a spatial reference." + ) } self.init( - title: String(localized: "Spatial reference mismatch.", bundle: .toolkitModule), + title: String( + localized: "Spatial reference mismatch.", + bundle: .toolkitModule, + comment: """ + A label indicating the spatial reference of the chosen basemap doesn't + match the spatial reference of the map or scene. + """ + ), message: message ) } diff --git a/Sources/ArcGISToolkit/Components/BasemapGallery/BasemapGalleryItem.swift b/Sources/ArcGISToolkit/Components/BasemapGallery/BasemapGalleryItem.swift index a294db7c2..2eb5847b1 100644 --- a/Sources/ArcGISToolkit/Components/BasemapGallery/BasemapGalleryItem.swift +++ b/Sources/ArcGISToolkit/Components/BasemapGallery/BasemapGalleryItem.swift @@ -11,9 +11,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -import Foundation -import UIKit.UIImage import ArcGIS +import Combine +import UIKit /// The `BasemapGalleryItem` encompasses an element in a `BasemapGallery`. public class BasemapGalleryItem: ObservableObject { diff --git a/Sources/ArcGISToolkit/Components/BasemapGallery/BasemapGalleryViewModel.swift b/Sources/ArcGISToolkit/Components/BasemapGallery/BasemapGalleryViewModel.swift index 476beccc6..f786b5bb6 100644 --- a/Sources/ArcGISToolkit/Components/BasemapGallery/BasemapGalleryViewModel.swift +++ b/Sources/ArcGISToolkit/Components/BasemapGallery/BasemapGalleryViewModel.swift @@ -11,8 +11,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -import SwiftUI import ArcGIS +import Combine /// Manages the state for a `BasemapGallery`. @MainActor class BasemapGalleryViewModel: ObservableObject { diff --git a/Sources/ArcGISToolkit/Components/Bookmarks/Bookmarks.swift b/Sources/ArcGISToolkit/Components/Bookmarks/Bookmarks.swift index f6971586e..4f421f94f 100644 --- a/Sources/ArcGISToolkit/Components/Bookmarks/Bookmarks.swift +++ b/Sources/ArcGISToolkit/Components/Bookmarks/Bookmarks.swift @@ -46,26 +46,23 @@ import SwiftUI /// in the project. To learn more about using the `Bookmarks` component see the [Bookmarks Tutorial](https://developers.arcgis.com/swift/toolkit-api-reference/tutorials/arcgistoolkit/bookmarkstutorial). public struct Bookmarks: View { /// A list of selectable bookmarks. - @State private var bookmarks: [Bookmark] = [] + @State private var bookmarks: [Bookmark] - /// A map or scene containing bookmarks. - private var geoModel: GeoModel? + /// An error that occurred while loading the geo model. + @State private var loadingError: Error? /// Indicates if bookmarks have loaded and are ready for display. @State private var isGeoModelLoaded = false - /// The height of the header content. - @State private var headerHeight: CGFloat = .zero - /// Determines if the bookmarks list is currently shown or not. @Binding private var isPresented: Bool - /// The height of the list content. - @State private var listHeight: CGFloat = .zero - - /// A bookmark that was selected. + /// The selected bookmark. @State private var selectedBookmark: Bookmark? = nil + /// A map or scene model containing bookmarks. + private var geoModel: GeoModel? + /// User defined action to be performed when a bookmark is selected. /// /// Use this when you prefer to self-manage the response to a bookmark selection. Use either @@ -75,30 +72,6 @@ public struct Bookmarks: View { /// If non-`nil`, this viewpoint is updated when a bookmark is selected. private var viewpoint: Binding? - /// Sets an action to perform when the bookmark selection changes. - /// - Parameter action: The action to perform when the bookmark selection has changed. - public func onSelectionChanged( - perform action: @escaping (Bookmark) -> Void - ) -> Bookmarks { - var copy = self - copy.selectionChangedAction = action - return copy - } - - /// Performs the necessary actions when a bookmark is selected. - /// - /// This includes indicating that bookmarks should be set to a hidden state, and changing the viewpoint - /// binding (if provided) or calling the action provided by the `onSelectionChanged(perform:)` modifier. - /// - Parameter bookmark: The bookmark that was selected. - func selectBookmark(_ bookmark: Bookmark) { - isPresented = false - if let viewpoint = viewpoint { - viewpoint.wrappedValue = bookmark.viewpoint - } else if let onSelectionChanged = selectionChangedAction { - onSelectionChanged(bookmark) - } - } - /// Creates a `Bookmarks` component. /// - Parameters: /// - isPresented: Determines if the bookmarks list is presented. @@ -112,7 +85,7 @@ public struct Bookmarks: View { viewpoint: Binding? = nil ) { _isPresented = isPresented - self.bookmarks = bookmarks + _bookmarks = State(initialValue: bookmarks) self.viewpoint = viewpoint } @@ -130,37 +103,104 @@ public struct Bookmarks: View { ) { self.geoModel = geoModel self.viewpoint = viewpoint + _bookmarks = State(initialValue: []) _isPresented = isPresented } public var body: some View { - VStack { - BookmarksHeader(isPresented: $isPresented) - .padding([.horizontal, .top]) - .onSizeChange { - headerHeight = $0.height - } - ScrollView { - VStack { - if geoModel == nil || isGeoModelLoaded { - BookmarksList(bookmarks: bookmarks) - .onSelectionChanged { - selectBookmark($0) - } - } else { - loadingView + BookmarksHeader(isPresented: $isPresented) + .padding([.horizontal, .top]) + Divider() + if !bookmarks.isEmpty { + list + .onChange(of: selectedBookmark) { selectedBookmark in + if let selectedBookmark { + selectBookmark(selectedBookmark) } } - .onSizeChange { - listHeight = $0.height + } else if let loadingError { + makeErrorMessage(with: loadingError) + } else if geoModel != nil && !isGeoModelLoaded { + loading + } else { + noBookmarks + } + // Push content to the top edge. + Spacer() + } +} + +extension Bookmarks { + /// The list of bookmarks sorted alphabetically. + var sortedBookmarks: [Bookmark] { + bookmarks.sorted { $0.name < $1.name } + } + + /// Sets an action to perform when the bookmark selection changes. + /// - Parameter action: The action to perform when the bookmark selection has changed. + public func onSelectionChanged( + perform action: @escaping (Bookmark) -> Void + ) -> Bookmarks { + var copy = self + copy.selectionChangedAction = action + return copy + } + + /// Performs the necessary actions when a bookmark is selected. + /// + /// This includes indicating that bookmarks should be set to a hidden state, and changing the viewpoint + /// binding (if provided) or calling the action provided by the `onSelectionChanged(perform:)` modifier. + /// - Parameter bookmark: The bookmark that was selected. + func selectBookmark(_ bookmark: Bookmark) { + isPresented = false + if let viewpoint = viewpoint { + viewpoint.wrappedValue = bookmark.viewpoint + } else if let onSelectionChanged = selectionChangedAction { + onSelectionChanged(bookmark) + } + } + + /// Makes a view that is shown when the `GeoModel` failed to load. + private func makeErrorMessage(with loadingError: Error) -> Text { + Text( + "Error loading bookmarks: \(loadingError.localizedDescription)", + bundle: .toolkitModule, + comment: """ + An error message shown when a GeoModel failed to load. + The variable provides additional data. + """ + ) + } + + /// A view that shows the list of bookmarks. + /// + /// - Note: Once the minimum supported platform is 16.4 or greater, the `ScrollView`, `VStack` + /// and `ForEach` can be replaced with a `List` with `scrollContentBackground(.hidden)` applied. + private var list: some View { + ScrollView { + VStack(alignment: .leading) { + ForEach(sortedBookmarks, id: \.self) { bookmark in + Button { + selectedBookmark = bookmark + } label: { + Text(bookmark.name) + // Make the entire row tappable. + .frame(maxWidth: .infinity, alignment: .leading) + .contentShape(Rectangle()) + } + .buttonStyle(.plain) + .padding(4) + if bookmark != sortedBookmarks.last { + Divider() + } } } } - .frame(idealHeight: headerHeight + listHeight) + .padding([.horizontal]) } /// A view that is shown while a `GeoModel` is loading. - private var loadingView: some View { + private var loading: some View { ProgressView() .padding() .task { @@ -169,8 +209,23 @@ public struct Bookmarks: View { bookmarks = geoModel?.bookmarks ?? [] isGeoModelLoaded = true } catch { - print(error.localizedDescription) + loadingError = error } } } + + /// A view that is shown when no bookmarks are present. + private var noBookmarks: some View { + Label { + Text( + "No bookmarks", + bundle: .toolkitModule, + comment: "A label indicating that no bookmarks are available for selection." + ) + } icon: { + Image(systemName: "bookmark.slash") + } + .foregroundColor(.primary) + .padding() + } } diff --git a/Sources/ArcGISToolkit/Components/Bookmarks/BookmarksHeader.swift b/Sources/ArcGISToolkit/Components/Bookmarks/BookmarksHeader.swift index 3801ba3c0..22c97ef1b 100644 --- a/Sources/ArcGISToolkit/Components/Bookmarks/BookmarksHeader.swift +++ b/Sources/ArcGISToolkit/Components/Bookmarks/BookmarksHeader.swift @@ -34,11 +34,19 @@ struct BookmarksHeader: View { HStack(alignment: .top) { Image(systemName: "bookmark") VStack(alignment: .leading) { - Text("Bookmarks", bundle: .toolkitModule) - .font(.headline) - Text("Select a bookmark", bundle: .toolkitModule) - .font(.subheadline) - .foregroundColor(.secondary) + Text( + "Bookmarks", + bundle: .toolkitModule, + comment: "A label in reference to bookmarks contained in a map or scene." + ) + .font(.headline) + Text( + "Select a bookmark", + bundle: .toolkitModule, + comment: "A label prompting the user to make a selection from the available bookmarks." + ) + .font(.subheadline) + .foregroundColor(.secondary) } .frame( maxWidth: .infinity, diff --git a/Sources/ArcGISToolkit/Components/Bookmarks/BookmarksList.swift b/Sources/ArcGISToolkit/Components/Bookmarks/BookmarksList.swift deleted file mode 100644 index 392ace76f..000000000 --- a/Sources/ArcGISToolkit/Components/Bookmarks/BookmarksList.swift +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2022 Esri. - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 - -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import ArcGIS -import SwiftUI - -/// `BookmarksList` displays a list of selectable bookmarks. -struct BookmarksList: View { - /// A list of bookmarks for display. - var bookmarks: [Bookmark] - - /// The height of the list content. - @State private var listHeight: CGFloat = .zero - - /// Action to be performed when a bookmark is selected. - var selectionChangedAction: ((Bookmark) -> Void)? = nil - - /// Sets a closure to perform when the bookmark selection changes. - /// - Parameter action: The closure to perform when the bookmark selection has changed. - public func onSelectionChanged( - perform action: @escaping (Bookmark) -> Void - ) -> BookmarksList { - var copy = self - copy.selectionChangedAction = action - return copy - } - - var body: some View { - Group { - if bookmarks.isEmpty { - Label { - Text("No bookmarks", bundle: .toolkitModule) - } icon: { - Image(systemName: "bookmark.slash") - } - .foregroundColor(.primary) - .padding() - } else { - ScrollView { - VStack(alignment: .leading) { - ForEach( - bookmarks.sorted { $0.name < $1.name }, - id: \.self - ) { bookmark in - Button { - selectionChangedAction?(bookmark) - } label: { - Text(bookmark.name) - .foregroundColor(.primary) - } - .padding(4) - Divider() - } - } - .padding() - .onSizeChange { - listHeight = $0.height - } - } - .frame(height: listHeight) - } - } - } -} diff --git a/Sources/ArcGISToolkit/Components/FloatingPanel/FloatingPanel.swift b/Sources/ArcGISToolkit/Components/FloatingPanel/FloatingPanel.swift index c8fbef763..b0c1eb7dc 100644 --- a/Sources/ArcGISToolkit/Components/FloatingPanel/FloatingPanel.swift +++ b/Sources/ArcGISToolkit/Components/FloatingPanel/FloatingPanel.swift @@ -24,32 +24,23 @@ import SwiftUI /// dedicated search panel. They will also be primarily simple containers /// that clients will fill with their own content. struct FloatingPanel: View where Content: View { - @Environment(\.horizontalSizeClass) private var horizontalSizeClass - @Environment(\.verticalSizeClass) var verticalSizeClass - + /// The height of a geo-view's attribution bar. + /// + /// When the panel is detached from the bottom of the screen (non-compact) this value allows + /// the panel to be aligned correctly between the top of a geo-view and the top of the its + /// attribution bar. + let attributionBarHeight: CGFloat /// The background color of the floating panel. let backgroundColor: Color - + /// A binding to the currently selected detent. + @Binding var selectedDetent: FloatingPanelDetent + /// A binding to a Boolean value that determines whether the view is presented. + @Binding var isPresented: Bool /// The content shown in the floating panel. let content: () -> Content - /// Creates a `FloatingPanel`. - /// - Parameters: - /// - backgroundColor: The background color of the floating panel. - /// - selectedDetent: Controls the height of the panel. - /// - isPresented: A Boolean value indicating if the view is presented. - /// - content: The view shown in the floating panel. - init( - backgroundColor: Color, - selectedDetent: Binding, - isPresented: Binding, - @ViewBuilder content: @escaping () -> Content - ) { - self.backgroundColor = backgroundColor - self.selectedDetent = selectedDetent - self.isPresented = isPresented - self.content = content - } + @Environment(\.horizontalSizeClass) private var horizontalSizeClass + @Environment(\.verticalSizeClass) private var verticalSizeClass /// The color of the handle. @State private var handleColor: Color = .defaultHandleColor @@ -57,90 +48,93 @@ struct FloatingPanel: View where Content: View { /// The height of the content. @State private var height: CGFloat = .minHeight + /// The current height of the device keyboard. + @State private var keyboardHeight: CGFloat = 0 + + /// The current state of the device keyboard. + @State private var keyboardState: KeyboardState = .closed + /// The latest recorded drag gesture value. @State private var latestDragGesture: DragGesture.Value? /// The maximum allowed height of the content. - @State private var maximumHeight: CGFloat = .infinity + @State private var maximumHeight: CGFloat = .zero /// A Boolean value indicating whether the panel should be configured for a compact environment. private var isCompact: Bool { horizontalSizeClass == .compact && verticalSizeClass == .regular } - /// A binding to a Boolean value that determines whether the view is presented. - private var isPresented: Binding - - /// A binding to the currently selected detent. - private var selectedDetent: Binding - - public var body: some View { + var body: some View { GeometryReader { geometryProxy in VStack(spacing: 0) { - if isPresented.wrappedValue { + if isPresented { if isCompact { makeHandleView() Divider() } content() + .padding(.bottom, isCompact ? keyboardHeight - geometryProxy.safeAreaInsets.bottom : .zero) .frame(height: height) .clipped() - .padding(.bottom, isCompact ? 25 : 10) if !isCompact { Divider() makeHandleView() } } } + // Set frame width to infinity to prevent horizontal shrink on dismissal. .frame(maxWidth: .infinity) .background(backgroundColor) .clipShape( RoundedCorners( - corners: isCompact ? [.topLeft, .topRight] : [.allCorners], + corners: isCompact ? [.topLeft, .topRight] : .allCorners, radius: 10 ) ) .shadow(radius: 10) .frame( - width: geometryProxy.size.width, - height: geometryProxy.size.height, + maxWidth: .infinity, + maxHeight: .infinity, alignment: isCompact ? .bottom : .top ) - .animation(.easeInOut, value: isPresented.wrappedValue) - .onSizeChange { - maximumHeight = $0.height - if height > maximumHeight { - height = maximumHeight - } - } + .animation(.easeInOut, value: isPresented) + .animation(.default, value: attributionBarHeight) .onAppear { - withAnimation { - height = isPresented.wrappedValue ? heightFor(detent: selectedDetent.wrappedValue) : .zero - } + maximumHeight = geometryProxy.size.height + updateHeight() } - .onChange(of: isPresented.wrappedValue) { isPresented in - withAnimation { - height = isPresented ? heightFor(detent: selectedDetent.wrappedValue) : .zero - } + .onChange(of: geometryProxy.size.height) { height in + maximumHeight = height + updateHeight() } - .onChange(of: selectedDetent.wrappedValue) { selectedDetent in - withAnimation { - height = heightFor(detent: selectedDetent) - } + .onChange(of: isPresented) { _ in + updateHeight() } - .onReceive(NotificationCenter.default.publisher(for: UIResponder.keyboardDidShowNotification)) { _ in - withAnimation { - height = heightFor(detent: .full) - } + .onChange(of: selectedDetent) { _ in + updateHeight() } - .onReceive(NotificationCenter.default.publisher(for: UIResponder.keyboardDidHideNotification)) { _ in - withAnimation { - height = heightFor(detent: selectedDetent.wrappedValue) - } + .onKeyboardStateChanged { state, height in + keyboardState = state + keyboardHeight = height + updateHeight() } } - .padding([.leading, .top, .trailing], isCompact ? 0 : 10) - .padding([.bottom], isCompact ? 0 : 50) + + // Disable automatic keyboard avoidance. The panel will handle keyboard avoidance via + // padding applied to the bottom of the content. This allows the panel to maintain a + // constant height as they keyboard closes. + .ignoresSafeArea(.keyboard) + + // If compact, ignore the device's bottom safe area so content reaches the physical bottom + // edge of the screen. + .ignoresSafeArea(.container, edges: isCompact && keyboardState == .closed ? .bottom : []) + + // If non-compact, add uniform padding around all edges. + .padding(.all, isCompact ? 0 : .externalPadding) + + // If non-compact, and the keyboard isn't open add padding for the attribution bar. + .padding(.bottom, !isCompact && !(keyboardState == .open) ? attributionBarHeight : 0) } var drag: some Gesture { @@ -148,90 +142,42 @@ struct FloatingPanel: View where Content: View { .onChanged { let deltaY = $0.location.y - (latestDragGesture?.location.y ?? $0.location.y) let proposedHeight = height + ((isCompact ? -1 : +1) * deltaY) + handleColor = .activeHandleColor height = min(max(.minHeight, proposedHeight), maximumHeight) latestDragGesture = $0 } .onEnded { - let deltaY = $0.location.y - latestDragGesture!.location.y - let deltaTime = $0.time.timeIntervalSince(latestDragGesture!.time) - let velocity = deltaY / deltaTime - let speed = abs(velocity) - - let newDetent = bestDetent(given: height, travelingAt: velocity) - let targetHeight = heightFor(detent: newDetent) + let predictedEndLocation = $0.predictedEndLocation.y + let inferredHeight = isCompact ? maximumHeight - predictedEndLocation : predictedEndLocation - let distanceAhead = abs(height - targetHeight) - let travelTime = min(0.35, distanceAhead / speed) + selectedDetent = [.summary, .half, .full] + .map { (detent: $0, height: heightFor(detent: $0)) } + .min { abs(inferredHeight - $0.height) < abs(inferredHeight - $1.height) }! + .detent - withAnimation(.easeOut(duration: travelTime)) { - selectedDetent.wrappedValue = newDetent - height = targetHeight + if $0.translation.height.magnitude > 100 { + UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil) } + + updateHeight() + handleColor = .defaultHandleColor latestDragGesture = nil } } - /// Determines the best detent based on the provided metrics. - /// - Parameters: - /// - currentHeight: The height target for the detent. - /// - velocity: The velocity of travel to the new detent. - /// - Returns: The best detent based on the provided metrics. - func bestDetent(given currentHeight: CGFloat, travelingAt velocity: Double) -> FloatingPanelDetent { - let lowSpeedThreshold = 100.0 - let highSpeedThreshold = 2000.0 - let isExpanding = (isCompact && velocity <= 0) || (!isCompact && velocity > 0) - let speed = abs(velocity) - let allDetents = [FloatingPanelDetent.summary, .full, .half] - .map { (detent: $0, height: heightFor(detent: $0)) } - // If the speed was low, choose the closest detent, regardless of direction. - guard speed > lowSpeedThreshold else { - return allDetents.min { - abs(currentHeight - $0.height) < abs(currentHeight - $1.height) - }?.detent ?? selectedDetent.wrappedValue - } - // Generate a new set of detents, filtering out those that would produce a height in the - // opposite direction of the gesture, and sorting them in order of closest to furthest from - // the current height. - let candidateDetents = allDetents - .filter { (detent, height) in - if isExpanding { - return height >= currentHeight - } else { - return height < currentHeight - } - } - .sorted { - if isExpanding { - return $0.1 < $1.1 - } else { - return $1.1 < $0.1 - } - } - - // If the gesture had high speed, select the last candidate detent (the one that would - // produce the greatest size difference from the current height). Otherwise, choose the - // first candidate detent (the one that would produce the least size difference from the - // current height). - if speed >= highSpeedThreshold { - return candidateDetents.last?.0 ?? selectedDetent.wrappedValue - } else { - return candidateDetents.first?.0 ?? selectedDetent.wrappedValue - } - } - /// Calculates the height for the `detent`. /// - Parameter detent: The detent to use when calculating height /// - Returns: A height for the provided detent based on the current maximum height func heightFor(detent: FloatingPanelDetent) -> CGFloat { switch detent { case .summary: - return max(.minHeight, maximumHeight * 0.15) + return max(.minHeight, maximumHeight * 0.25) case .half: - return maximumHeight * 0.4 + return maximumHeight * 0.5 case .full: - return maximumHeight * (isCompact ? 0.90 : 1.0) + return maximumHeight case let .fraction(fraction): return min(maximumHeight, max(.minHeight, maximumHeight * fraction)) case let .height(height): @@ -239,12 +185,26 @@ struct FloatingPanel: View where Content: View { } } + /// Updates height to an appropriate value. + func updateHeight() { + let newHeight: CGFloat = { + if !isPresented { + return .zero + } else if keyboardState == .opening || keyboardState == .open { + return heightFor(detent: .full) + } else { + return heightFor(detent: selectedDetent) + } + }() + withAnimation { height = max(0, (newHeight - .handleFrameHeight)) } + } + /// Configures a handle view. /// - Returns: A configured handle view, suitable for placement in the panel. @ViewBuilder func makeHandleView() -> some View { Handle(color: handleColor) .background(backgroundColor) - .frame(height: 30) + .frame(height: .handleFrameHeight) .gesture(drag) .zIndex(1) } @@ -263,6 +223,12 @@ private struct Handle: View { } private extension CGFloat { + /// The amount of padding around the floating panel. + static let externalPadding: CGFloat = 10 + + /// THe height of the area containing the handle. + static let handleFrameHeight: CGFloat = 30 + static let minHeight: CGFloat = 66 } diff --git a/Sources/ArcGISToolkit/Components/FloatingPanel/FloatingPanelDetent.swift b/Sources/ArcGISToolkit/Components/FloatingPanel/FloatingPanelDetent.swift index aa5684e5d..f44c74d58 100644 --- a/Sources/ArcGISToolkit/Components/FloatingPanel/FloatingPanelDetent.swift +++ b/Sources/ArcGISToolkit/Components/FloatingPanel/FloatingPanelDetent.swift @@ -17,9 +17,9 @@ import Foundation public enum FloatingPanelDetent: Equatable { /// A height based upon a fraction of the maximum height. case fraction(_ fraction: CGFloat) - /// A height just less than the maximum height. + /// The maximum height. case full - /// A height roughly half of the maximum height. + /// Half of the maximum height. case half /// A height based upon a fixed value. case height(_ height: CGFloat) diff --git a/Sources/ArcGISToolkit/Components/FloatingPanel/FloatingPanelModifier.swift b/Sources/ArcGISToolkit/Components/FloatingPanel/FloatingPanelModifier.swift index 99c43f5f9..c16414e97 100644 --- a/Sources/ArcGISToolkit/Components/FloatingPanel/FloatingPanelModifier.swift +++ b/Sources/ArcGISToolkit/Components/FloatingPanel/FloatingPanelModifier.swift @@ -28,6 +28,7 @@ public extension View { /// The floating panel allows for interaction with background contents, unlike native sheets or popovers. /// /// - Parameters: + /// - attributionBarHeight: The height of a geo-view's attribution bar. /// - backgroundColor: The background color of the floating panel. /// - selectedDetent: A binding to the currently selected detent. /// - horizontalAlignment: The horizontal alignment of the floating panel. @@ -37,6 +38,7 @@ public extension View { /// - Returns: A dynamic view with a presentation style similar to that of a sheet in compact /// environments and a popover otherwise. func floatingPanel( + attributionBarHeight: CGFloat = 0, backgroundColor: Color = Color(uiColor: .systemBackground), selectedDetent: Binding = .constant(.half), horizontalAlignment: HorizontalAlignment = .trailing, @@ -46,6 +48,7 @@ public extension View { ) -> some View where Content: View { modifier( FloatingPanelModifier( + attributionBarHeight: attributionBarHeight, backgroundColor: backgroundColor, selectedDetent: selectedDetent, horizontalAlignment: horizontalAlignment, @@ -67,6 +70,13 @@ private struct FloatingPanelModifier: ViewModifier where PanelCont horizontalSizeClass == .compact && verticalSizeClass == .regular } + /// The height of a geo-view's attribution bar. + /// + /// When the panel is detached from the bottom of the screen this value allows + /// the panel to be aligned correctly between the top of a geo-view and the top of the + /// its attribution bar. + let attributionBarHeight: CGFloat + /// The background color of the floating panel. let backgroundColor: Color @@ -89,12 +99,12 @@ private struct FloatingPanelModifier: ViewModifier where PanelCont content .overlay(alignment: Alignment(horizontal: horizontalAlignment, vertical: .top)) { FloatingPanel( + attributionBarHeight: attributionBarHeight, backgroundColor: backgroundColor, selectedDetent: selectedDetent, isPresented: isPresented, content: panelContent ) - .ignoresSafeArea(.all, edges: .bottom) .frame(maxWidth: isCompact ? .infinity : maxWidth) } } diff --git a/Sources/ArcGISToolkit/Components/FloorFilter/FloorFilter.swift b/Sources/ArcGISToolkit/Components/FloorFilter/FloorFilter.swift index d543f7a53..8207b5a16 100644 --- a/Sources/ArcGISToolkit/Components/FloorFilter/FloorFilter.swift +++ b/Sources/ArcGISToolkit/Components/FloorFilter/FloorFilter.swift @@ -29,7 +29,7 @@ import ArcGIS /// /// - Automatically hides the floor browsing view when the associated map or scene is not floor-aware. /// - Selects the facility in view automatically (can be configured through the -/// ``FloorFilterAutomaticSelectionMode ``). +/// ``FloorFilterAutomaticSelectionMode``). /// - Shows the selected facility's levels in proper vertical order. /// - Filters the map/scene content to show the selected level. /// - Allows browsing the full floor-aware hierarchy of sites, facilities, and levels. diff --git a/Sources/ArcGISToolkit/Components/FloorFilter/SiteAndFacilitySelector.swift b/Sources/ArcGISToolkit/Components/FloorFilter/SiteAndFacilitySelector.swift index 469896919..e046da28b 100644 --- a/Sources/ArcGISToolkit/Components/FloorFilter/SiteAndFacilitySelector.swift +++ b/Sources/ArcGISToolkit/Components/FloorFilter/SiteAndFacilitySelector.swift @@ -103,12 +103,19 @@ struct SiteAndFacilitySelector: View { prompt: String( localized: "Filter sites", bundle: .toolkitModule, - comment: "A search field allowing user to filter a list of sites by name." + comment: """ + A field allowing the user to filter a list of sites by name. A site + contains one or more facilities in a floor-aware map or scene. + """ ) ) .keyboardType(.alphabet) .disableAutocorrection(true) - .navigationTitle(String(localized: "Sites", bundle: .toolkitModule)) + .navigationTitle(String( + localized: "Sites", + bundle: .toolkitModule, + comment: "A label in reference to all of the sites in a floor-aware map or scene." + )) } /// The "All sites" button. @@ -131,7 +138,7 @@ struct SiteAndFacilitySelector: View { Text( "All sites", bundle: .toolkitModule, - comment: "A button allowing users to view a list of all sites defined in a floor aware map." + comment: "A reference to all of the sites defined in a floor aware map." ) } .buttonStyle(.bordered) @@ -233,15 +240,29 @@ struct SiteAndFacilitySelector: View { prompt: String( localized: "Filter facilities", bundle: .toolkitModule, - comment: "A search field allowing user to filter a list of facilities by name." + comment: """ + A field allowing the user to filter a list of facilities by name. A + facility contains one or more levels in a floor-aware map or scene. + """ ) ) .keyboardType(.alphabet) .disableAutocorrection(true) .navigationTitle( usesAllSitesStyling ? - String(localized: "All Sites", bundle: .toolkitModule) : - viewModel.selection?.site?.name ?? String(localized: "Select a facility", bundle: .toolkitModule) + String( + localized: "All sites", + bundle: .toolkitModule, + comment: "A reference to all of the sites defined in a floor aware map." + ) : + viewModel.selection?.site?.name ?? String( + localized: "Select a facility", + bundle: .toolkitModule, + comment: """ + A label directing the user to select a facility. A facility contains one + or more levels in a floor-aware map or scene. + """ + ) ) } @@ -298,8 +319,12 @@ struct SiteAndFacilitySelector: View { /// Displays text "No matches found". private struct NoMatchesView: View { var body: some View { - Text("No matches found", bundle: .toolkitModule) - .frame(maxHeight: .infinity) + Text( + "No matches found.", + bundle: .toolkitModule, + comment: "A statement that no sites or facilities with names matching a filter phrase were found." + ) + .frame(maxHeight: .infinity) } } diff --git a/Sources/ArcGISToolkit/Components/JobManager/JobManager.swift b/Sources/ArcGISToolkit/Components/JobManager/JobManager.swift new file mode 100644 index 000000000..e3bd428d9 --- /dev/null +++ b/Sources/ArcGISToolkit/Components/JobManager/JobManager.swift @@ -0,0 +1,308 @@ +// Copyright 2023 Esri. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import ArcGIS +import BackgroundTasks +import Combine +import Foundation +import OSLog +import UIKit + +/// An object that manages saving and loading jobs so that they can continue to run if the +/// app is backgrounded or even terminated. +/// +/// The job manager is not instantiable, you must use the ``shared`` instance. +/// +/// **Background** +/// +/// Jobs are long running server operations. When a job instance is started on the client, +/// it makes a request to a service asking it to start work on the server. At that point, the client +/// polls the server intermittently to check the status of the work. Once the work is completed +/// the result is downloaded with a background `URLSession`. This allows the download to +/// complete out of process, and the download task can relaunch the app upon completion, even +/// in the case where the app was terminated. +/// +/// We do not expect users to keep an application in the foreground and wait for a job to complete. +/// Once the job is started, if the app is backgrounded, we can use an app refresh +/// background task to check the status of the work on the server. If the server work is complete +/// we can start downloading the result in the background at that point. If the work on the server +/// is not complete, we can reschedule another background app refresh to recheck status. +/// +/// There is some iOS behavior to be aware of as well. In iOS, if an application is backgrounded, +/// the operating system can terminate the app at its discretion. This means that jobs need to be +/// serialized when an app is backgrounded so that if the app is terminated the jobs can be +/// rehydrated upon relaunch of the app. +/// +/// Also in iOS if the user of an app removes the app from the app switcher (swiping up) then the +/// system interprets this as a strong indication that the user does not want the app running. +/// The consequences of this are two-fold for jobs. One, any background fetch tasks are not given +/// any time until the app is relaunched again. And two, any background downloads that are in +/// progress are canceled by the operating system. +/// +/// **Features** +/// +/// The job manager is an `ObservableObject` with a mutable ``jobs`` property. Adding a job to this +/// property will allow the job manager to do the work to make sure that we can rehydrate a job +/// if an app is terminated. +/// +/// As such, the job manager will: +/// +/// - Serialize the job to the user defaults when the app is backgrounded +/// - Deserialize the job when an application is relaunched +/// +/// The job manager will help with the lifetime of jobs in other ways as well. +/// +/// The job manager will ask the system for some background processing time when an app +/// is backgrounded so that jobs that are not yet started on the server, can have some time to +/// allow them to start. This means if you kick off a job and it hasn't actually started on the server +/// when the app is backgrounded, the job should have enough time to start on the server which +/// will cause it to enter into a polling state. When the job reaches the polling state the +/// status of the work on the server can be checked intermittently. +/// +/// To enable polling while an app is backgrounded, the job manager will request from the system a +/// background refresh task (if enabled via the ``JobManager/preferredBackgroundStatusCheckSchedule`` +/// property). If the system later executes the background refresh task then the +/// job manager will check the status of any running jobs. At that point the jobs may start +/// downloading their result. Note, this does not work on the simulator, this behavior can only +/// be tested on an actual device. +/// +/// Now that the job can check status in the background, it can start downloading in the background. +/// By default, jobs will download their results with background URL session. This means that the +/// download can execute out of process, even if the app is terminated. If the app is terminated and +/// then later relaunched by the system because a background downloaded completed, then you may +/// call the ``JobManager/resumeAllPausedJobs()`` method from the application relaunch point, +/// which will correlate the jobs to their respective downloads that completed and the jobs will +/// then finish. The app relaunch point can happen via the SwiftUI modifier `.backgroundTask(.urlSession(...))`. +/// In UIKit it would be the `UIApplicationDelegate` method `func application(UIApplication, handleEventsForBackgroundURLSession: String, completionHandler: () -> Void)` +/// - Since: 200.3 +@MainActor +public class JobManager: ObservableObject { + /// The shared job manager. + public static let `shared` = JobManager() + + /// The jobs being managed by the job manager. + @Published + public var jobs: [any JobProtocol] = [] + + /// The key for which state will be serialized under the user defaults. + private var defaultsKey: String { + return "com.esri.ArcGISToolkit.jobManager.jobs" + } + + /// The preferred schedule for performing status checks while the application is in the + /// background. This allows an application to check to see if jobs have completed and optionally + /// post a local notification to update the user. The default value is `disabled`. + /// When the value of this property is not `disabled`, this setting is just a preference. + /// The operating system ultimately decides when to allow a background task to run. + /// If you enable background status checks then you must also make sure to have enabled + /// the "Background fetch" background mode in your application settings. + /// - Note: You must also add "com.esri.ArcGISToolkit.jobManager.statusCheck" to the "Permitted + /// background task scheduler identifiers" in your application's plist file. This only works on + /// device and not on the simulator. + /// More information can be found [here](https://developer.apple.com/documentation/backgroundtasks/refreshing_and_maintaining_your_app_using_background_tasks). + public var preferredBackgroundStatusCheckSchedule: BackgroundStatusCheckSchedule = .disabled + + /// The background task identifier for status checks. + private let statusChecksTaskIdentifier = "com.esri.ArcGISToolkit.jobManager.statusCheck" + + // A Boolean value indicating whether a background status check is scheduled. + private var isBackgroundStatusChecksScheduled = false + + /// An initializer for the job manager. + private init() { + NotificationCenter.default.addObserver(self, selector: #selector(appWillEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(appWillResignActive), name: UIApplication.willResignActiveNotification, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(appWillTerminate), name: UIApplication.willTerminateNotification, object: nil) + + BGTaskScheduler.shared.register(forTaskWithIdentifier: statusChecksTaskIdentifier, using: nil) { task in + // Reset flag because once the task is launched, we need to reschedule if we want to do + // another background task. + self.isBackgroundStatusChecksScheduled = false + Task { + Logger.jobManager.debug("Performing status checks.") + await self.performStatusChecks() + Logger.jobManager.debug("Status checks completed.") + self.scheduleBackgroundStatusCheck() + task.setTaskCompleted(success: true) + } + } + + // Load jobs from the saved state. + loadState() + } + + /// Schedules a status check in the background if one is not already scheduled. + private func scheduleBackgroundStatusCheck() { + // Return if already scheduled. + guard !isBackgroundStatusChecksScheduled else { + return + } + + // Do not schedule if there are no running jobs. + guard hasRunningJobs else { + return + } + + // Make sure the preferred background status check schedule + guard case .regularInterval(let timeInterval) = preferredBackgroundStatusCheckSchedule else { + return + } + + isBackgroundStatusChecksScheduled = true + + let request = BGAppRefreshTaskRequest(identifier: statusChecksTaskIdentifier) + request.earliestBeginDate = Calendar.current.date(byAdding: .second, value: Int(timeInterval), to: .now) + do { + try BGTaskScheduler.shared.submit(request) + Logger.jobManager.debug("Background task scheduled.") + } catch(let error) { + Logger.jobManager.error("Background task scheduling error \(error.localizedDescription)") + } + } + + /// A Boolean value indicating if there are jobs running. + private var hasRunningJobs: Bool { + jobs.contains { $0.status == .started } + } + + /// Called when the app moves back to the foreground. + @objc private func appWillEnterForeground() { + // End any current background task. + endCurrentBackgroundTask() + } + + /// Called when the app moves to the background. + @objc private func appWillResignActive() { + // Start a background task if necessary. + beginBackgroundTask() + + // Schedule background status checks. + scheduleBackgroundStatusCheck() + + // Save the jobs to the user defaults when the app moves to the background. + saveState() + } + + /// Called when the app will be terminated. + @objc private func appWillTerminate() { + Logger.jobManager.debug("App will terminate.") + // Save the jobs to the user defaults when the app will be terminated to save the latest state. + saveState() + } + + /// Check the status of all managed jobs. + public func performStatusChecks() async { + await withTaskGroup(of: Void.self) { group in + for job in jobs { + group.addTask { + try? await job.checkStatus() + } + } + } + } + + /// Resumes all paused jobs. + public func resumeAllPausedJobs() { + // Make sure the default background URLSession is re-created here + // in case this method is called from an app relaunch due to background downloads + // completed for a terminated app. We need the session to be re-created in that case. + _ = ArcGISEnvironment.backgroundURLSession + + jobs.filter { $0.status == .paused } + .forEach { $0.start() } + } + + /// Saves all managed jobs to User Defaults. + public func saveState() { + Logger.jobManager.debug("Saving state.") + let array = jobs.map { $0.toJSON() } + UserDefaults.standard.setValue(array, forKey: defaultsKey) + } + + /// Load any jobs that have been saved to UserDefaults. + private func loadState() { + Logger.jobManager.debug("Loading state.") + guard let strings = UserDefaults.standard.array(forKey: defaultsKey) as? [String] else { + return + } + + jobs = strings.compactMap { + try? Job.fromJSON($0) as? any JobProtocol + } + } + + /// The current background task identifier. + var backgroundTaskIdentifier: UIBackgroundTaskIdentifier? + + /// Ends any current background task. + private func endCurrentBackgroundTask() { + guard let backgroundTaskIdentifier else { + Logger.jobManager.debug("No current background task to end.") + return + } + Logger.jobManager.debug("Ending current background task.") + UIApplication.shared.endBackgroundTask(backgroundTaskIdentifier) + self.backgroundTaskIdentifier = nil + } + + /// Starts a background task for extended time in the background if we have jobs that are + /// started but have yet to begin polling. + private func beginBackgroundTask() { + // Jobs that are started but do not yet have a server job ID are jobs that + // can benefit from starting a background task for extra execution time. + // This will hopefully allow a job to get to the polling state before the app is suspended. + // Once in a polling state that's where background refreshes can check job status. + if !jobs.contains(where: ({ $0.status == .started && $0.serverJobID.isEmpty })) { + Logger.jobManager.debug("No jobs that require starting a background task.") + return + } + + // Already started. + guard backgroundTaskIdentifier == nil else { + Logger.jobManager.debug("Background task already started.") + return + } + + Logger.jobManager.debug("Starting a background task.") + + let identifier = UIApplication.shared.beginBackgroundTask() { + Logger.jobManager.debug("Out of background processing time.") + self.endCurrentBackgroundTask() + } + + self.backgroundTaskIdentifier = identifier + } +} + +/// An enum that defines a schedule for background status checks. +public enum BackgroundStatusCheckSchedule { + /// No background status checks will be requested. + case disabled + /// Requests that the system schedule a background check at a regular interval. + /// Ultimately it is up to the discretion of the system if that check is run. + case regularInterval(interval: TimeInterval) +} + +extension Logger { + /// A logger for the job manager. + /// + /// To enable logging add an environment variable named "LOGGING_FOR_JOB_MANAGER" under Scheme + /// -> Arguments -> Environment Variables + static let jobManager: Logger = { + if ProcessInfo.processInfo.environment.keys.contains("LOGGING_FOR_JOB_MANAGER") { + return Logger(subsystem: "com.esri.ArcGISToolkit", category: "JobManager") + } else { + return Logger(OSLog.disabled) + } + }() +} diff --git a/Sources/ArcGISToolkit/Components/OverviewMap.swift b/Sources/ArcGISToolkit/Components/OverviewMap.swift index cb4fba45c..a156be1d9 100644 --- a/Sources/ArcGISToolkit/Components/OverviewMap.swift +++ b/Sources/ArcGISToolkit/Components/OverviewMap.swift @@ -11,9 +11,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -import SwiftUI -import Combine import ArcGIS +import Combine +import SwiftUI /// `OverviewMap` is a small, secondary `MapView` (sometimes called an "inset map"), superimposed /// on an existing `GeoView`, which shows a representation of the current `visibleArea` (for a `MapView`) or `viewpoint` (for a `SceneView`). @@ -58,13 +58,7 @@ public struct OverviewMap: View { private var scaleFactor = 25.0 /// The data model containing the `Map` displayed in the overview map. - @StateObject private var dataModel = MapDataModel() - - /// The `Graphic` displaying the visible area of the main `GeoView`. - @StateObject private var graphic: Graphic - - /// The `GraphicsOverlay` used to display the visible area graphic. - @StateObject private var graphicsOverlay: GraphicsOverlay + @StateObject private var dataModel = DataModel() /// The user-defined map used in the overview map. Defaults to `nil`. private let userProvidedMap: Map? @@ -89,7 +83,7 @@ public struct OverviewMap: View { OverviewMap( viewpoint: viewpoint, visibleArea: visibleArea, - symbol: .defaultFill, + symbol: .defaultFill(), map: map ) } @@ -105,7 +99,7 @@ public struct OverviewMap: View { with viewpoint: Viewpoint?, map: Map? = nil ) -> OverviewMap { - OverviewMap(viewpoint: viewpoint, symbol: .defaultMarker, map: map) + OverviewMap(viewpoint: viewpoint, symbol: .defaultMarker(), map: map) } /// Creates an `OverviewMap`. Used for creating an `OverviewMap` for use on a `MapView`. @@ -122,16 +116,6 @@ public struct OverviewMap: View { self.visibleArea = visibleArea self.viewpoint = viewpoint self.symbol = symbol - - let graphic = Graphic(symbol: self.symbol) - - // It is necessary to set the graphic and graphicsOverlay this way - // in order to prevent the main geoview from recreating the - // graphicsOverlay every draw cycle. That was causing refresh issues - // with the graphic during panning/zooming/rotating. - _graphic = StateObject(wrappedValue: graphic) - _graphicsOverlay = StateObject(wrappedValue: GraphicsOverlay(graphics: [graphic])) - userProvidedMap = map } @@ -139,7 +123,7 @@ public struct OverviewMap: View { MapView( map: effectiveMap, viewpoint: makeOverviewViewpoint(), - graphicsOverlays: [graphicsOverlay] + graphicsOverlays: [dataModel.graphicsOverlay] ) .attributionBarHidden(true) .interactionModes([]) @@ -148,22 +132,23 @@ public struct OverviewMap: View { width: 1 ) .onAppear { - graphic.symbol = symbol + dataModel.graphic.geometry = visibleArea + dataModel.graphic.symbol = symbol } .onChange(of: visibleArea) { visibleArea in if let visibleArea = visibleArea { - graphic.geometry = visibleArea + dataModel.graphic.geometry = visibleArea } } .onChange(of: viewpoint) { viewpoint in if visibleArea == nil, let viewpoint = viewpoint, let point = viewpoint.targetGeometry as? Point { - graphic.geometry = point + dataModel.graphic.geometry = point } } .onChange(of: symbol) { - graphic.symbol = $0 + dataModel.graphic.symbol = $0 } } @@ -211,26 +196,31 @@ public struct OverviewMap: View { private extension Symbol { /// The default marker symbol. - static let defaultMarker: MarkerSymbol = SimpleMarkerSymbol( - style: .cross, - color: .red, - size: 12.0 - ) + static func defaultMarker() -> Symbol { + return SimpleMarkerSymbol(style: .cross, color: .red, size: 12) + } /// The default fill symbol. - static let defaultFill: FillSymbol = SimpleFillSymbol( - style: .solid, - color: .clear, - outline: SimpleLineSymbol( + static func defaultFill() -> Symbol { + return SimpleFillSymbol( style: .solid, - color: .red, - width: 1.0 + color: .clear, + outline: SimpleLineSymbol(style: .solid, color: .red, width: 1) ) - ) + } } -/// A very basic data model class containing a Map. -class MapDataModel: ObservableObject { - /// The default `Map` used for display in a `MapView`. - let defaultMap = Map(basemapStyle: .arcGISTopographic) +private extension OverviewMap { + @MainActor + private class DataModel: ObservableObject { + /// The default `Map` used for display in a `MapView`. + private(set) lazy var defaultMap = Map(basemapStyle: .arcGISTopographic) + let graphic: Graphic + let graphicsOverlay: GraphicsOverlay + + init() { + graphic = Graphic() + graphicsOverlay = GraphicsOverlay(graphics: [graphic]) + } + } } diff --git a/Sources/ArcGISToolkit/Components/Popups/Attachments/AttachmentModel.swift b/Sources/ArcGISToolkit/Components/Popups/Attachments/AttachmentModel.swift index fc31adac9..60c834437 100644 --- a/Sources/ArcGISToolkit/Components/Popups/Attachments/AttachmentModel.swift +++ b/Sources/ArcGISToolkit/Components/Popups/Attachments/AttachmentModel.swift @@ -11,9 +11,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -import SwiftUI import ArcGIS +import Combine import QuickLook +import SwiftUI /// A view model representing the combination of a `PopupAttachment` and /// an associated `UIImage` used as a thumbnail. diff --git a/Sources/ArcGISToolkit/Components/Popups/AttachmentsPopupElementView.swift b/Sources/ArcGISToolkit/Components/Popups/AttachmentsPopupElementView.swift index bdd33eea0..0c3ca103b 100644 --- a/Sources/ArcGISToolkit/Components/Popups/AttachmentsPopupElementView.swift +++ b/Sources/ArcGISToolkit/Components/Popups/AttachmentsPopupElementView.swift @@ -76,6 +76,7 @@ struct AttachmentsPopupElementView: View { title: popupElement.displayTitle, description: popupElement.description ) + .catalystPadding(4) } } } @@ -95,6 +96,10 @@ struct AttachmentsPopupElementView: View { private extension AttachmentsPopupElement { /// Provides a default title to display if `title` is empty. var displayTitle: String { - title.isEmpty ? String(localized: "Attachments", bundle: .toolkitModule) : title + title.isEmpty ? String( + localized: "Attachments", + bundle: .toolkitModule, + comment: "A label in reference to attachments in a popup." + ) : title } } diff --git a/Sources/ArcGISToolkit/Components/Popups/FieldsPopupElementView.swift b/Sources/ArcGISToolkit/Components/Popups/FieldsPopupElementView.swift index 368d407dd..673316fc6 100644 --- a/Sources/ArcGISToolkit/Components/Popups/FieldsPopupElementView.swift +++ b/Sources/ArcGISToolkit/Components/Popups/FieldsPopupElementView.swift @@ -43,6 +43,7 @@ struct FieldsPopupElementView: View { title: popupElement.displayTitle, description: popupElement.description ) + .catalystPadding(4) } } @@ -88,6 +89,10 @@ private struct DisplayField: Hashable, Identifiable { private extension FieldsPopupElement { /// Provides a default title to display if `title` is empty. var displayTitle: String { - title.isEmpty ? String(localized: "Fields", bundle: .toolkitModule) : title + title.isEmpty ? String( + localized: "Fields", + bundle: .toolkitModule, + comment: "A label in reference to fields in a set of data contained in a popup." + ) : title } } diff --git a/Sources/ArcGISToolkit/Components/Popups/MediaPopupElementView.swift b/Sources/ArcGISToolkit/Components/Popups/MediaPopupElementView.swift index e40769571..d086510dc 100644 --- a/Sources/ArcGISToolkit/Components/Popups/MediaPopupElementView.swift +++ b/Sources/ArcGISToolkit/Components/Popups/MediaPopupElementView.swift @@ -33,6 +33,7 @@ struct MediaPopupElementView: View { title: popupElement.displayTitle, description: popupElement.description ) + .catalystPadding(4) } } } @@ -118,6 +119,10 @@ extension PopupMedia: Identifiable {} private extension MediaPopupElement { /// Provides a default title to display if `title` is empty. var displayTitle: String { - title.isEmpty ? String(localized: "Media", bundle: .toolkitModule) : title + title.isEmpty ? String( + localized: "Media", + bundle: .toolkitModule, + comment: "A label in reference to media elements contained within a popup." + ) : title } } diff --git a/Sources/ArcGISToolkit/Components/Popups/PopupMedia/Charts/BarChart.swift b/Sources/ArcGISToolkit/Components/Popups/PopupMedia/Charts/BarChart.swift index 58904c955..eaf2ea562 100644 --- a/Sources/ArcGISToolkit/Components/Popups/PopupMedia/Charts/BarChart.swift +++ b/Sources/ArcGISToolkit/Components/Popups/PopupMedia/Charts/BarChart.swift @@ -49,14 +49,14 @@ struct BarChart: View { if isColumnChart { // Vertical bars. BarMark( - x: .value("Field", $0.label), - y: .value("Value", $0.value) + x: .value(String.field, $0.label), + y: .value(String.value, $0.value) ) } else { // Horizontal bars. BarMark( - x: .value("Value", $0.value), - y: .value("Field", $0.label) + x: .value(String.value, $0.value), + y: .value(String.field, $0.label) ) } } diff --git a/Sources/ArcGISToolkit/Components/Popups/PopupMedia/Charts/LineChart.swift b/Sources/ArcGISToolkit/Components/Popups/PopupMedia/Charts/LineChart.swift index c563a5bbc..e1e354fef 100644 --- a/Sources/ArcGISToolkit/Components/Popups/PopupMedia/Charts/LineChart.swift +++ b/Sources/ArcGISToolkit/Components/Popups/PopupMedia/Charts/LineChart.swift @@ -41,12 +41,12 @@ struct LineChart: View { #if canImport(Charts) Chart(chartData) { LineMark( - x: .value("Field", $0.label), - y: .value("Value", $0.value) + x: .value(String.field, $0.label), + y: .value(String.value, $0.value) ) PointMark( - x: .value("Field", $0.label), - y: .value("Value", $0.value) + x: .value(String.field, $0.label), + y: .value(String.value, $0.value) ) } .chartXAxis { diff --git a/Sources/ArcGISToolkit/Components/Popups/PopupMedia/MediaDetailView.swift b/Sources/ArcGISToolkit/Components/Popups/PopupMedia/MediaDetailView.swift index 4ca716463..e138f85b5 100644 --- a/Sources/ArcGISToolkit/Components/Popups/PopupMedia/MediaDetailView.swift +++ b/Sources/ArcGISToolkit/Components/Popups/PopupMedia/MediaDetailView.swift @@ -59,9 +59,16 @@ struct MediaDetailView : View { } if popupMedia.value?.linkURL != nil { HStack { - Text("Tap on the image for more information.", bundle: .toolkitModule) - .font(.subheadline) - .foregroundColor(.secondary) + Text( + "Tap on the image for more information.", + bundle: .toolkitModule, + comment: """ + A label indicating that tapping an image will reveal + additional information. + """ + ) + .font(.subheadline) + .foregroundColor(.secondary) Spacer() } } diff --git a/Sources/ArcGISToolkit/Components/Popups/PopupView.swift b/Sources/ArcGISToolkit/Components/Popups/PopupView.swift index 9952d0363..48831f64a 100644 --- a/Sources/ArcGISToolkit/Components/Popups/PopupView.swift +++ b/Sources/ArcGISToolkit/Components/Popups/PopupView.swift @@ -41,6 +41,7 @@ import ArcGIS /// - Displays media (images and charts) full-screen. /// - Supports hyperlinks in text, media, and fields elements. /// - Fully supports dark mode, as do all Toolkit components. +/// - Supports auto-refresh for popups where the geo element is a dynamic entity. /// /// **Behavior** /// @@ -71,7 +72,7 @@ public struct PopupView: View { private var showCloseButton = false /// The result of evaluating the popup expressions. - @State private var evaluateExpressionsResult: Result<[PopupExpressionEvaluation], Error>? + @State private var evaluation: Evaluation? /// A binding to a Boolean value that determines whether the view is presented. private var isPresented: Binding? @@ -98,11 +99,8 @@ public struct PopupView: View { } Divider() Group { - if let evaluateExpressionsResult { - switch evaluateExpressionsResult { - case .success(_): - PopupElementList(popupElements: popup.evaluatedElements) - case .failure(let error): + if let evaluation { + if let error = evaluation.error { Text( "Popup evaluation failed: \(error.localizedDescription)", bundle: .toolkitModule, @@ -111,10 +109,16 @@ public struct PopupView: View { variable provides additional data. """ ) + } else { + PopupElementList(popupElements: evaluation.elements) } } else { - VStack(alignment: .center) { - Text("Evaluating popup expressions…", bundle: .toolkitModule) + HStack(alignment: .center, spacing: 10) { + Text( + "Evaluating popup expressions", + bundle: .toolkitModule, + comment: "A label indicating popup expressions are being evaluated." + ) ProgressView() } .frame(maxWidth: .infinity) @@ -122,13 +126,37 @@ public struct PopupView: View { } } .task(id: ObjectIdentifier(popup)) { - evaluateExpressionsResult = nil - evaluateExpressionsResult = await Result { - try await popup.evaluateExpressions() + // Initial evaluation for a newly assigned popup. + evaluation = nil + await evaluateExpressions() + } + .task(id: ObjectIdentifier(popup)) { + // If the popup is showing for a dynamic entity, then observe + // the changes and update the popup accordingly. + guard let dynamicEntity = popup.geoElement as? DynamicEntity else { return } + for await changes in dynamicEntity.changes { + if changes.dynamicEntityWasPurged { + break + } + if changes.receivedObservation != nil { + await evaluateExpressions() + } } } } + /// Evaluates the arcade expressions and updates the evaluation property. + private func evaluateExpressions() async { + do { + _ = try await popup.evaluateExpressions() + evaluation = Evaluation(elements: popup.evaluatedElements) + } catch { + evaluation = Evaluation(error: error) + } + } +} + +extension PopupView { private struct PopupElementList: View { let popupElements: [PopupElement] @@ -155,6 +183,25 @@ public struct PopupView: View { } } +extension PopupView { + /// An object used to hold the result of evaluating the expressions of a popup. + private final class Evaluation { + /// The evaluated elements. + let elements: [PopupElement] + /// The error that occurred during evaluation, if any. + let error: Error? + + /// Creates an evaluation. + /// - Parameters: + /// - elements: The evaluated elements. + /// - error: The error that occurred during evaluation, if any. + init(elements: [PopupElement] = [], error: Error? = nil) { + self.elements = elements + self.error = error + } + } +} + extension PopupView { /// Specifies whether a "close" button should be shown to the right of the popup title. If the "close" /// button is shown, you should pass in the `isPresented` argument to the `PopupView` diff --git a/Sources/ArcGISToolkit/Components/Scalebar/ScalebarViewModel.swift b/Sources/ArcGISToolkit/Components/Scalebar/ScalebarViewModel.swift index 797294b6e..a91ae3d4b 100644 --- a/Sources/ArcGISToolkit/Components/Scalebar/ScalebarViewModel.swift +++ b/Sources/ArcGISToolkit/Components/Scalebar/ScalebarViewModel.swift @@ -12,8 +12,8 @@ // limitations under the License. import ArcGIS +import Combine import Foundation -import SwiftUI @MainActor final class ScalebarViewModel: ObservableObject { diff --git a/Sources/ArcGISToolkit/Components/Search/LocatorSearchSource.swift b/Sources/ArcGISToolkit/Components/Search/LocatorSearchSource.swift index 62fb363a1..83bae740f 100644 --- a/Sources/ArcGISToolkit/Components/Search/LocatorSearchSource.swift +++ b/Sources/ArcGISToolkit/Components/Search/LocatorSearchSource.swift @@ -11,8 +11,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -import Foundation import ArcGIS +import Combine +import Foundation /// Uses a Locator to provide search and suggest results. Most configuration should be done on the /// `GeocodeParameters` directly. diff --git a/Sources/ArcGISToolkit/Components/Search/SearchView.swift b/Sources/ArcGISToolkit/Components/Search/SearchView.swift index d1e5d8802..e984ab28b 100644 --- a/Sources/ArcGISToolkit/Components/Search/SearchView.swift +++ b/Sources/ArcGISToolkit/Components/Search/SearchView.swift @@ -128,11 +128,15 @@ public struct SearchView: View { @Environment(\.horizontalSizeClass) var horizontalSizeClass @Environment(\.verticalSizeClass) var verticalSizeClass - + /// The string shown in the search view when no user query is entered. /// Defaults to "Find a place or address". Note: this is set using the /// `prompt` modifier. - private var prompt = String(localized: "Find a place or address", bundle: .toolkitModule) + private var prompt = String( + localized: "Find a place or address", + bundle: .toolkitModule, + comment: "A hint for the user on what to search for in a search bar." + ) /// Determines whether a built-in result view will be shown. Defaults to `true`. /// If `false`, the result display/selection list is not shown. Set to false if you want to hide the results @@ -223,8 +227,9 @@ public struct SearchView: View { "Repeat Search Here", bundle: .toolkitModule, comment: """ - A button to show when a user has panned the map away from the - original search location. + A label for button to show when the user has panned the map away + from the original search location. 'Here' is in reference to the + current visible extent of the map or scene. """ ) } diff --git a/Sources/ArcGISToolkit/Components/Search/SearchViewModel.swift b/Sources/ArcGISToolkit/Components/Search/SearchViewModel.swift index e16516ffe..a34447aca 100644 --- a/Sources/ArcGISToolkit/Components/Search/SearchViewModel.swift +++ b/Sources/ArcGISToolkit/Components/Search/SearchViewModel.swift @@ -11,8 +11,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -import SwiftUI import ArcGIS +import Combine +import SwiftUI /// Defines how many results to return; one, many, or automatic based on circumstance. public enum SearchResultMode { @@ -115,7 +116,7 @@ public enum SearchOutcome { ) let currentExtentAvg = (lastExtent.width + lastExtent.height) / 2.0 let threshold = currentExtentAvg * 0.25 - isEligibleForRequery = (centerDiff ?? 0.0) > threshold + isEligibleForRequery = centerDiff > threshold } } diff --git a/Sources/ArcGISToolkit/Components/UtilityNetworkTrace/UtilityNetworkTrace.swift b/Sources/ArcGISToolkit/Components/UtilityNetworkTrace/UtilityNetworkTrace.swift index c5619eaa8..00d4ae9ea 100644 --- a/Sources/ArcGISToolkit/Components/UtilityNetworkTrace/UtilityNetworkTrace.swift +++ b/Sources/ArcGISToolkit/Components/UtilityNetworkTrace/UtilityNetworkTrace.swift @@ -215,6 +215,7 @@ public struct UtilityNetworkTrace: View { } } label: { Text(elements.count, format: .number) + .catalystPadding(4) } } } @@ -227,7 +228,7 @@ public struct UtilityNetworkTrace: View { if viewModel.configurations.isEmpty { Text(String.noConfigurationsAvailable) } else { - ForEach(viewModel.configurations, id: \.name) { configuration in + ForEach(viewModel.configurations.sorted { $0.name < $1.name }, id: \.name) { configuration in Button { viewModel.setPendingTrace(configuration: configuration) currentActivity = .creatingTrace(nil) @@ -258,19 +259,21 @@ public struct UtilityNetworkTrace: View { if viewModel.networks.count > 1 { Section(String.networkSectionLabel) { DisclosureGroup( - viewModel.network?.name ?? .noneSelected, - isExpanded: Binding( - get: { isFocused(traceCreationActivity: .viewingNetworkOptions) }, - set: { currentActivity = .creatingTrace($0 ? .viewingNetworkOptions : nil) } - ) + isExpanded: Binding { + isFocused(traceCreationActivity: .viewingNetworkOptions) + } set: { + currentActivity = .creatingTrace($0 ? .viewingNetworkOptions : nil) + } ) { networksList + } label: { + Text(viewModel.network?.name ?? .noneSelected) + .catalystPadding(4) } } } Section(String.traceConfigurationSectionLabel) { DisclosureGroup( - viewModel.pendingTrace.configuration?.name ?? .noneSelected, isExpanded: Binding { isFocused(traceCreationActivity: .viewingTraceConfigurations) } set: { @@ -278,6 +281,9 @@ public struct UtilityNetworkTrace: View { } ) { configurationsList + } label: { + Text(viewModel.pendingTrace.configuration?.name ?? .noneSelected) + .catalystPadding(4) } } Section(String.startingPointsTitle) { @@ -300,31 +306,34 @@ public struct UtilityNetworkTrace: View { bundle: .toolkitModule, comment: "A label declaring the number of starting points selected for a utility network trace." ) + .catalystPadding(4) } } } Section { DisclosureGroup( - String.advancedOptionsHeaderLabel, isExpanded: Binding { isFocused(traceCreationActivity: .viewingAdvancedOptions) } set: { currentActivity = .creatingTrace($0 ? .viewingAdvancedOptions : nil) - }, content: { - HStack { - Text(String.nameLabel) - Spacer() - TextField(String.nameLabel, text: $viewModel.pendingTrace.name) + } + ) { + HStack { + Text(String.nameLabel) + Spacer() + TextField(String.nameLabel, text: $viewModel.pendingTrace.name) .onSubmit { viewModel.pendingTrace.userDidSpecifyName = true } .multilineTextAlignment(.trailing) .foregroundColor(.blue) - } - ColorPicker(String.colorLabel, selection: $viewModel.pendingTrace.color) - Toggle(String.zoomToResult, isOn: $shouldZoomOnTraceCompletion) } - ) + ColorPicker(String.colorLabel, selection: $viewModel.pendingTrace.color) + Toggle(String.zoomToResult, isOn: $shouldZoomOnTraceCompletion) + } label: { + Text(String.advancedOptionsHeaderLabel) + .catalystPadding(4) + } } } Button(String.traceButtonLabel) { @@ -390,6 +399,7 @@ public struct UtilityNetworkTrace: View { } } .font(.title3) + .catalystPadding() } if activeDetent != .summary { List { @@ -417,6 +427,7 @@ public struct UtilityNetworkTrace: View { } } label: { Text(viewModel.selectedTrace?.elementResults.count ?? 0, format: .number) + .catalystPadding(4) } } Section(String.functionResultsSectionTitle) { @@ -442,7 +453,7 @@ public struct UtilityNetworkTrace: View { Text( "Not Available", bundle: .toolkitModule, - comment: "A trace function output result is not available." + comment: "A trace function output result was not provided." ) } } @@ -451,11 +462,11 @@ public struct UtilityNetworkTrace: View { } } label: { Text(viewModel.selectedTrace?.utilityFunctionTraceResult?.functionOutputs.count ?? 0, format: .number) + .catalystPadding(4) } } Section { DisclosureGroup( - String.advancedOptionsHeaderLabel, isExpanded: Binding { isFocused(traceViewingActivity: .viewingAdvancedOptions) } set: { @@ -473,19 +484,22 @@ public struct UtilityNetworkTrace: View { } } ) + } label: { + Text(String.advancedOptionsHeaderLabel) + .catalystPadding(4) } } } .padding([.vertical], 2) - Button(String.clearAllResultsButtonLabel, role: .destructive) { + Button(String.clearAllResults, role: .destructive) { isShowingClearAllResultsConfirmationDialog = true } .buttonStyle(.bordered) .confirmationDialog( - String.clearAllResultsQuestion, + String.clearAllResults, isPresented: $isShowingClearAllResultsConfirmationDialog ) { - Button(String.clearAllResultsButtonLabel, role: .destructive) { + Button(String.clearAllResults, role: .destructive) { viewModel.deleteAllTraces() currentActivity = .creatingTrace(nil) } @@ -520,6 +534,7 @@ public struct UtilityNetworkTrace: View { } } .font(.title3) + .catalystPadding() List { if selectedStartingPoint?.utilityElement?.networkSource.kind == .edge { Section(String.fractionAlongEdgeSectionTitle) { @@ -715,7 +730,7 @@ public struct UtilityNetworkTrace: View { private var currentTraceLabel: String { guard let index = viewModel.selectedTraceIndex else { return "Error" } return String( - localized: "Trace \(index+1, specifier: "%lld") of \(viewModel.completedTraces.count, specifier: "%lld")", + localized: "Trace \(index+1, specifier: "%1$lld") of \(viewModel.completedTraces.count, specifier: "%2$lld")", bundle: .toolkitModule, comment: "A label indicating the index of the trace being viewed out of the total number of traces completed." ) @@ -803,22 +818,20 @@ private extension String { static let attributesSectionTitle = String( localized: "Attributes", - bundle: .toolkitModule + bundle: .toolkitModule, + comment: "A label in reference to the attributes of a geo element." ) static let cancelStartingPointSelection = String( localized: "Cancel starting point selection", - bundle: .toolkitModule - ) - - static let clearAllResultsButtonLabel = String( - localized: "Clear All Results", - bundle: .toolkitModule + bundle: .toolkitModule, + comment: "A label for a button to cancel the starting point selection operation." ) - static let clearAllResultsQuestion = String( - localized: "Clear all results?", - bundle: .toolkitModule + static let clearAllResults = String( + localized: "Clear all results", + bundle: .toolkitModule, + comment: "A directive to clear all of the completed utility network traces." ) static let clearAllResultsMessage = String( @@ -829,84 +842,109 @@ private extension String { static let colorLabel = String( localized: "Color", - bundle: .toolkitModule + bundle: .toolkitModule, + comment: "A label in reference to the color used to display utility trace result graphics." ) static let deleteButtonLabel = String( localized: "Delete", - bundle: .toolkitModule + bundle: .toolkitModule, + comment: "A label for a button used to delete a utility network trace input component or result." ) /// Title for the feature results section static let featureResultsTitle = String( localized: "Feature Results", - bundle: .toolkitModule + bundle: .toolkitModule, + comment: """ + A label in reference to utility elements returned as results of a utility network + trace operation. + """ ) static let fractionAlongEdgeSectionTitle = String( localized: "Fraction Along Edge", - bundle: .toolkitModule + bundle: .toolkitModule, + comment: "A label in reference to a fractional distance along an edge style utility network element." ) static let functionResultsSectionTitle = String( localized: "Function Results", - bundle: .toolkitModule + bundle: .toolkitModule, + comment: """ + A label in reference to function outputs returned as results of a utility network + trace operation. + """ ) static let modePickerTitle = String( localized: "Mode", - bundle: .toolkitModule + bundle: .toolkitModule, + comment: "The mode in which the utility network trace tool is being used (either creating traces or viewing traces)." ) static let nameLabel = String( localized: "Name", - bundle: .toolkitModule + bundle: .toolkitModule, + comment: "A label in reference to the user defined name for an individual utility network trace." ) static let networkSectionLabel = String( localized: "Network", - bundle: .toolkitModule + bundle: .toolkitModule, + comment: "A label in reference to a specific utility network." ) static let newTraceOptionLabel = String( localized: "New trace", - bundle: .toolkitModule + bundle: .toolkitModule, + comment: "A label for a button to show new utility network trace configuration options." ) static let noConfigurationsAvailable = String( - localized: "No configurations available", - bundle: .toolkitModule + localized: "No configurations available.", + bundle: .toolkitModule, + comment: "A statement that no utility trace configurations are available." ) static let noneSelected = String( localized: "None selected", - bundle: .toolkitModule + bundle: .toolkitModule, + comment: "A label indicating that no utility network trace configuration has been selected." ) static let resultsOptionLabel = String( localized: "Results", - bundle: .toolkitModule + bundle: .toolkitModule, + comment: "A label for a button to show utility network trace results." ) /// Title for the starting points section static let startingPointsTitle = String( localized: "Starting Points", - bundle: .toolkitModule + bundle: .toolkitModule, + comment: """ + A label in reference to the utility elements chosen as starting points for a utility + network trace operation. + """ ) static let terminalConfigurationPickerTitle = String( localized: "Terminal Configuration", - bundle: .toolkitModule + bundle: .toolkitModule, + comment: "A label in reference to the chosen terminal configuration of a utility network element." ) static let traceButtonLabel = String( localized: "Trace", - bundle: .toolkitModule + bundle: .toolkitModule, + comment: "A label for a button to begin a utility network trace operation." ) static let traceConfigurationSectionLabel = String( localized: "Trace Configuration", - bundle: .toolkitModule + bundle: .toolkitModule, + comment: "A label in reference to a utility network trace configuration." ) static let unnamedAssetType = String( diff --git a/Sources/ArcGISToolkit/Components/UtilityNetworkTrace/UtilityNetworkTraceUserAlert.swift b/Sources/ArcGISToolkit/Components/UtilityNetworkTrace/UtilityNetworkTraceUserAlert.swift index 913bd039b..4060e254f 100644 --- a/Sources/ArcGISToolkit/Components/UtilityNetworkTrace/UtilityNetworkTraceUserAlert.swift +++ b/Sources/ArcGISToolkit/Components/UtilityNetworkTrace/UtilityNetworkTraceUserAlert.swift @@ -16,7 +16,11 @@ import SwiftUI /// A user presentable alert. struct UtilityNetworkTraceUserAlert { /// Title of the alert. - var title: String = String(localized: "Error", bundle: .toolkitModule) + var title: String = String( + localized: "Error", + bundle: .toolkitModule, + comment: "A label in reference to an error that occurred during a utility network trace." + ) /// Description of the alert. var description: String @@ -30,7 +34,11 @@ extension UtilityNetworkTraceUserAlert { .init( description: String( localized: "Please set at least 1 starting location.", - bundle: .toolkitModule + bundle: .toolkitModule, + comment: """ + A label indicating that at least one starting location is required for the + chosen utility network trace configuration. + """ ) ) } @@ -39,7 +47,11 @@ extension UtilityNetworkTraceUserAlert { .init( description: String( localized: "Please set at least 2 starting locations.", - bundle: .toolkitModule + bundle: .toolkitModule, + comment: """ + A label indicating that at least two starting locations are required for the + chosen utility network trace configuration. + """ ) ) } @@ -48,11 +60,19 @@ extension UtilityNetworkTraceUserAlert { .init( title: String( localized: "Failed to set starting point", - bundle: .toolkitModule + bundle: .toolkitModule, + comment: """ + A message indicating that the chosen utility network element wasn't able + to be used as a trace starting point. + """ ), description: String( localized: "Duplicate starting points cannot be added.", - bundle: .toolkitModule + bundle: .toolkitModule, + comment: """ + A message indicating that the user attempted to use a single utility + network element for more than one trace starting point. + """ ) ) } @@ -61,7 +81,8 @@ extension UtilityNetworkTraceUserAlert { .init( description: String( localized: "No trace types found.", - bundle: .toolkitModule + bundle: .toolkitModule, + comment: "A label indicating that no utility named trace configurations are available." ) ) } @@ -70,7 +91,8 @@ extension UtilityNetworkTraceUserAlert { .init( description: String( localized: "No utility networks found.", - bundle: .toolkitModule + bundle: .toolkitModule, + comment: "A label indicating that no utility networks are available." ) ) } @@ -79,7 +101,11 @@ extension UtilityNetworkTraceUserAlert { .init( description: String( localized: "Element could not be identified.", - bundle: .toolkitModule + bundle: .toolkitModule, + comment: """ + A label indicating an element could not be identified as a starting point + for a utility network trace. + """ ) ) } diff --git a/Sources/ArcGISToolkit/Components/UtilityNetworkTrace/UtilityNetworkTraceViewModel.swift b/Sources/ArcGISToolkit/Components/UtilityNetworkTrace/UtilityNetworkTraceViewModel.swift index 6a7c38987..a1a5b6f5f 100644 --- a/Sources/ArcGISToolkit/Components/UtilityNetworkTrace/UtilityNetworkTraceViewModel.swift +++ b/Sources/ArcGISToolkit/Components/UtilityNetworkTrace/UtilityNetworkTraceViewModel.swift @@ -12,6 +12,7 @@ // limitations under the License. import ArcGIS +import Combine import Foundation import SwiftUI diff --git a/Sources/ArcGISToolkit/Documentation.docc/ArcGISToolkit.md b/Sources/ArcGISToolkit/Documentation.docc/ArcGISToolkit.md index 699e53560..75c06c8ef 100644 --- a/Sources/ArcGISToolkit/Documentation.docc/ArcGISToolkit.md +++ b/Sources/ArcGISToolkit/Documentation.docc/ArcGISToolkit.md @@ -10,12 +10,14 @@ Learn how to use ArcGISToolkit with ### Components +- - ``Authenticator`` - ``BasemapGallery`` - ``Bookmarks`` - ``Compass`` - - ``FloorFilter`` +- ``JobManager`` - ``OverviewMap`` - ``PopupView`` - ``Scalebar`` diff --git a/Sources/ArcGISToolkit/Documentation.docc/AugmentedReality.md b/Sources/ArcGISToolkit/Documentation.docc/AugmentedReality.md new file mode 100644 index 000000000..bc6fad2ce --- /dev/null +++ b/Sources/ArcGISToolkit/Documentation.docc/AugmentedReality.md @@ -0,0 +1,24 @@ +# Augmented Reality + +Augmented reality experiences are designed to "augment" the physical world with virtual +content that respects real world scale, position, and orientation of a device. The following +views overlay ArcGIS Scene imagery over a camera feed of the physical world to provide augmented +reality experiences for common AR patterns including Flyover and TableTop AR. + +**FlyoverSceneView** + +`FlyoverSceneView` provides an augmented reality flyover experience that allows you to +explore a scene using your device as a window into the virtual world. The experience begins +with the ArcGIS Scene's camera positioned over an area of interest. Walk around and reorient +the device to focus on specific content in the scene. To learn more about using the FlyoverSceneView see the + [FlyoverSceneView Tutorial](https://developers.arcgis.com/swift/toolkit-api-reference/tutorials/arcgistoolkit/flyoversceneviewtutorial). + +**TableTopSceneView** + +`TableTopSceneView` provides an augmented reality table top experience where ArcGIS Scene content +is anchored to a physical surface. To learn more about using the TableTopSceneView see the +[TableTopSceneView Tutorial](https://developers.arcgis.com/swift/toolkit-api-reference/tutorials/arcgistoolkit/tabletopsceneviewtutorial). + +###### Requirements +* Set the [`Privacy - Camera Usage Description`](https://developer.apple.com/documentation/bundleresources/information_property_list/nscamerausagedescription) property in the app's **info.plist** to request camera permissions. +* To restrict your app to installing only on devices that support ARKit, add `arkit` to the required device capabilities section of the app's **info.plist**. diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/Bookmarks/BookmarksStep1.swift b/Sources/ArcGISToolkit/Documentation.docc/Resources/Bookmarks/BookmarksStep1.swift index 8f48bdecd..9234b58b2 100644 --- a/Sources/ArcGISToolkit/Documentation.docc/Resources/Bookmarks/BookmarksStep1.swift +++ b/Sources/ArcGISToolkit/Documentation.docc/Resources/Bookmarks/BookmarksStep1.swift @@ -3,16 +3,12 @@ import ArcGISToolkit import SwiftUI struct BookmarksExampleView: View { + /// The `Map` with predefined bookmarks. @State private var map = Map(url: URL(string: "https://www.arcgis.com/home/item.html?id=16f1b8ba37b44dc3884afc8d5f454dd2")!)! - @State var viewpoint: Viewpoint? - var body: some View { MapViewReader { mapViewProxy in - MapView(map: map, viewpoint: viewpoint) - .onViewpointChanged(kind: .centerAndScale) { - viewpoint = $0 - } + MapView(map: map) } } } diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/Bookmarks/BookmarksStep2.swift b/Sources/ArcGISToolkit/Documentation.docc/Resources/Bookmarks/BookmarksStep2.swift index d78ffadc2..e43173863 100644 --- a/Sources/ArcGISToolkit/Documentation.docc/Resources/Bookmarks/BookmarksStep2.swift +++ b/Sources/ArcGISToolkit/Documentation.docc/Resources/Bookmarks/BookmarksStep2.swift @@ -3,18 +3,17 @@ import ArcGISToolkit import SwiftUI struct BookmarksExampleView: View { + /// The `Map` with predefined bookmarks. @State private var map = Map(url: URL(string: "https://www.arcgis.com/home/item.html?id=16f1b8ba37b44dc3884afc8d5f454dd2")!)! + /// Indicates if the `Bookmarks` component is shown or not. + /// - Remark: This allows a developer to control when the `Bookmarks` component is + /// shown/hidden, whether that be in a group of options or a standalone button. @State var showingBookmarks = false - @State var viewpoint: Viewpoint? - var body: some View { MapViewReader { mapViewProxy in - MapView(map: map, viewpoint: viewpoint) - .onViewpointChanged(kind: .centerAndScale) { - viewpoint = $0 - } + MapView(map: map) .toolbar { ToolbarItem(placement: .primaryAction) { Button { diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/Bookmarks/BookmarksStep3.swift b/Sources/ArcGISToolkit/Documentation.docc/Resources/Bookmarks/BookmarksStep3.swift index e0aadcd78..2f17b5373 100644 --- a/Sources/ArcGISToolkit/Documentation.docc/Resources/Bookmarks/BookmarksStep3.swift +++ b/Sources/ArcGISToolkit/Documentation.docc/Resources/Bookmarks/BookmarksStep3.swift @@ -3,18 +3,17 @@ import ArcGISToolkit import SwiftUI struct BookmarksExampleView: View { + /// The `Map` with predefined bookmarks. @State private var map = Map(url: URL(string: "https://www.arcgis.com/home/item.html?id=16f1b8ba37b44dc3884afc8d5f454dd2")!)! + /// Indicates if the `Bookmarks` component is shown or not. + /// - Remark: This allows a developer to control when the `Bookmarks` component is + /// shown/hidden, whether that be in a group of options or a standalone button. @State var showingBookmarks = false - @State var viewpoint: Viewpoint? - var body: some View { MapViewReader { mapViewProxy in - MapView(map: map, viewpoint: viewpoint) - .onViewpointChanged(kind: .centerAndScale) { - viewpoint = $0 - } + MapView(map: map) .toolbar { ToolbarItem(placement: .primaryAction) { Button { @@ -26,6 +25,7 @@ struct BookmarksExampleView: View { ) } .popover(isPresented: $showingBookmarks) { + // Display the `Bookmarks` component with the list of bookmarks in a map. Bookmarks( isPresented: $showingBookmarks, geoModel: map diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/Bookmarks/BookmarksStep4.swift b/Sources/ArcGISToolkit/Documentation.docc/Resources/Bookmarks/BookmarksStep4.swift index 9370c1cad..022f69c55 100644 --- a/Sources/ArcGISToolkit/Documentation.docc/Resources/Bookmarks/BookmarksStep4.swift +++ b/Sources/ArcGISToolkit/Documentation.docc/Resources/Bookmarks/BookmarksStep4.swift @@ -3,20 +3,17 @@ import ArcGISToolkit import SwiftUI struct BookmarksExampleView: View { + /// The `Map` with predefined bookmarks. @State private var map = Map(url: URL(string: "https://www.arcgis.com/home/item.html?id=16f1b8ba37b44dc3884afc8d5f454dd2")!)! - @State var selectedBookmark: Bookmark? - + /// Indicates if the `Bookmarks` component is shown or not. + /// - Remark: This allows a developer to control when the `Bookmarks` component is + /// shown/hidden, whether that be in a group of options or a standalone button. @State var showingBookmarks = false - @State var viewpoint: Viewpoint? - var body: some View { MapViewReader { mapViewProxy in - MapView(map: map, viewpoint: viewpoint) - .onViewpointChanged(kind: .centerAndScale) { - viewpoint = $0 - } + MapView(map: map) .toolbar { ToolbarItem(placement: .primaryAction) { Button { @@ -28,11 +25,12 @@ struct BookmarksExampleView: View { ) } .popover(isPresented: $showingBookmarks) { + // Display the `Bookmarks` component with the list of bookmarks in a map. Bookmarks( isPresented: $showingBookmarks, geoModel: map ) - .onSelectionChanged { selectedBookmark = $0 } + .onSelectionChanged { } } } } diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/Bookmarks/BookmarksStep5.swift b/Sources/ArcGISToolkit/Documentation.docc/Resources/Bookmarks/BookmarksStep5.swift index de772d755..1ace3194c 100644 --- a/Sources/ArcGISToolkit/Documentation.docc/Resources/Bookmarks/BookmarksStep5.swift +++ b/Sources/ArcGISToolkit/Documentation.docc/Resources/Bookmarks/BookmarksStep5.swift @@ -3,25 +3,17 @@ import ArcGISToolkit import SwiftUI struct BookmarksExampleView: View { + /// The `Map` with predefined bookmarks. @State private var map = Map(url: URL(string: "https://www.arcgis.com/home/item.html?id=16f1b8ba37b44dc3884afc8d5f454dd2")!)! - @State var selectedBookmark: Bookmark? - + /// Indicates if the `Bookmarks` component is shown or not. + /// - Remark: This allows a developer to control when the `Bookmarks` component is + /// shown/hidden, whether that be in a group of options or a standalone button. @State var showingBookmarks = false - @State var viewpoint: Viewpoint? - var body: some View { MapViewReader { mapViewProxy in - MapView(map: map, viewpoint: viewpoint) - .onViewpointChanged(kind: .centerAndScale) { - viewpoint = $0 - } - .task(id: selectedBookmark) { - if let selectedBookmark, let viewpoint = selectedBookmark.viewpoint { - await mapViewProxy.setViewpoint(viewpoint) - } - } + MapView(map: map) .toolbar { ToolbarItem(placement: .primaryAction) { Button { @@ -33,11 +25,18 @@ struct BookmarksExampleView: View { ) } .popover(isPresented: $showingBookmarks) { + // Display the `Bookmarks` component with the list of bookmarks in a map. Bookmarks( isPresented: $showingBookmarks, geoModel: map ) - .onSelectionChanged { selectedBookmark = $0 } + .onSelectionChanged { + if let viewpoint = $0.viewpoint { + Task { + await mapViewProxy.setViewpoint(viewpoint) + } + } + } } } } diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/FlyoverSceneView/FlyoverSceneView.png b/Sources/ArcGISToolkit/Documentation.docc/Resources/FlyoverSceneView/FlyoverSceneView.png new file mode 100644 index 000000000..5dbfdcf87 Binary files /dev/null and b/Sources/ArcGISToolkit/Documentation.docc/Resources/FlyoverSceneView/FlyoverSceneView.png differ diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/FlyoverSceneView/FlyoverSceneViewStep1.swift b/Sources/ArcGISToolkit/Documentation.docc/Resources/FlyoverSceneView/FlyoverSceneViewStep1.swift new file mode 100644 index 000000000..bad7bccf3 --- /dev/null +++ b/Sources/ArcGISToolkit/Documentation.docc/Resources/FlyoverSceneView/FlyoverSceneViewStep1.swift @@ -0,0 +1,14 @@ +import SwiftUI +import ArcGIS +import ArcGISToolkit + +struct FlyoverExampleView: View { + var body: some View { + FlyoverSceneView( + initialLatitude: 45.54605, + initialLongitude: -122.69033, + initialAltitude: 500, + translationFactor: 1_000 + ) + } +} diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/FlyoverSceneView/FlyoverSceneViewStep2.swift b/Sources/ArcGISToolkit/Documentation.docc/Resources/FlyoverSceneView/FlyoverSceneViewStep2.swift new file mode 100644 index 000000000..f3512e7fd --- /dev/null +++ b/Sources/ArcGISToolkit/Documentation.docc/Resources/FlyoverSceneView/FlyoverSceneViewStep2.swift @@ -0,0 +1,23 @@ +import SwiftUI +import ArcGIS +import ArcGISToolkit + +struct FlyoverExampleView: View { + @State private var scene = Scene( + item: PortalItem( + portal: .arcGISOnline(connection: .anonymous), + id: PortalItem.ID("7558ee942b2547019f66885c44d4f0b1")! + ) + ) + + var body: some View { + FlyoverSceneView( + initialLatitude: 45.54605, + initialLongitude: -122.69033, + initialAltitude: 500, + translationFactor: 1_000 + ) { _ in + SceneView(scene: scene) + } + } +} diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerAppStep1.swift b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerAppStep1.swift new file mode 100644 index 000000000..62f3a998b --- /dev/null +++ b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerAppStep1.swift @@ -0,0 +1,16 @@ +import ArcGIS +import ArcGISToolkit +import SwiftUI + +@main +struct JobManagerTutorialApp: App { + init() { + ArcGISEnvironment.apiKey = APIKey("Valid API Key") + } + + var body: some SwiftUI.Scene { + WindowGroup { + JobManagerTutorialView() + } + } +} diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerAppStep2.swift b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerAppStep2.swift new file mode 100644 index 000000000..e59afec60 --- /dev/null +++ b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerAppStep2.swift @@ -0,0 +1,24 @@ +import ArcGIS +import ArcGISToolkit +import SwiftUI + +@main +struct JobManagerTutorialApp: App { + init() { + ArcGISEnvironment.apiKey = APIKey("Valid API Key") + } + + var body: some SwiftUI.Scene { + WindowGroup { + JobManagerTutorialView() + } + .backgroundTask(.urlSession(ArcGISEnvironment.defaultBackgroundURLSessionIdentifier)) { + // Allow the `ArcGISURLSession` to handle it's background task events. + await ArcGISEnvironment.backgroundURLSession.handleEventsForBackgroundTask() + + // When the app is re-launched from a background url session, resume any paused jobs, + // and check the job status. + await JobManager.shared.resumeAllPausedJobs() + } + } +} diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerTakeMapOfflineButton.png b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerTakeMapOfflineButton.png new file mode 100644 index 000000000..9c3633ff6 Binary files /dev/null and b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerTakeMapOfflineButton.png differ diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerTutorial.png b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerTutorial.png new file mode 100644 index 000000000..1a775bce1 Binary files /dev/null and b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerTutorial.png differ diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerTutorialBackgroundFetch.png b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerTutorialBackgroundFetch.png new file mode 100644 index 000000000..27489b662 Binary files /dev/null and b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerTutorialBackgroundFetch.png differ diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerTutorialJobDownload.png b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerTutorialJobDownload.png new file mode 100644 index 000000000..fe6a81906 Binary files /dev/null and b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerTutorialJobDownload.png differ diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerTutorialJobPoll.png b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerTutorialJobPoll.png new file mode 100644 index 000000000..83c382254 Binary files /dev/null and b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerTutorialJobPoll.png differ diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerTutorialJobStart.png b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerTutorialJobStart.png new file mode 100644 index 000000000..fcaad848f Binary files /dev/null and b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerTutorialJobStart.png differ diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerTutorialPermittedIdentifiers.png b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerTutorialPermittedIdentifiers.png new file mode 100644 index 000000000..c1eab3f7e Binary files /dev/null and b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerTutorialPermittedIdentifiers.png differ diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerViewStep1.swift b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerViewStep1.swift new file mode 100644 index 000000000..e38207dcf --- /dev/null +++ b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerViewStep1.swift @@ -0,0 +1,47 @@ +import ArcGIS +import ArcGISToolkit +import SwiftUI + +struct JobManagerTutorialView: View { + /// The job manager used by this view. + @ObservedObject var jobManager = JobManager.shared + /// The job that this view shows data for. + @State private var job: Job? + /// The job's error in case of failure. + @State private var error: Error? + /// A Boolean value indicating if we are currently adding an offline map job. + @State private var isAddingOfflineMapJob = false + + var body: some View { + VStack { + if let job { + } else { + HStack(spacing: 10) { + if isAddingOfflineMapJob { + ProgressView() + } + Button { + isAddingOfflineMapJob = true + Task { + do { + jobManager.jobs.append( + try await makeNapervilleOfflineMapJob() + ) + } catch { + print("Error creating offline map job: \(error)") + } + job = jobManager.jobs.first + job?.start() + isAddingOfflineMapJob = false + } + } label: { + Text("Take Map Offline") + } + .buttonStyle(.bordered) + .disabled(isAddingOfflineMapJob) + .padding() + } + } + } + } +} diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerViewStep2.swift b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerViewStep2.swift new file mode 100644 index 000000000..3f888c75c --- /dev/null +++ b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerViewStep2.swift @@ -0,0 +1,68 @@ +import ArcGIS +import ArcGISToolkit +import SwiftUI + +struct JobManagerTutorialView: View { + /// The job manager used by this view. + @ObservedObject var jobManager = JobManager.shared + /// The job that this view shows data for. + @State private var job: Job? + /// The job's error in case of failure. + @State private var error: Error? + /// A Boolean value indicating if we are currently adding an offline map job. + @State private var isAddingOfflineMapJob = false + + var body: some View { + VStack { + if let job { + } else { + HStack(spacing: 10) { + if isAddingOfflineMapJob { + ProgressView() + } + Button { + isAddingOfflineMapJob = true + Task { + do { + jobManager.jobs.append( + try await makeNapervilleOfflineMapJob() + ) + } catch { + print("Error creating offline map job: \(error)") + } + job = jobManager.jobs.first + job?.start() + isAddingOfflineMapJob = false + } + } label: { + Text("Take Map Offline") + } + .buttonStyle(.bordered) + .disabled(isAddingOfflineMapJob) + .padding() + } + } + } + } +} + +extension JobManagerTutorialView { + /// Creates a job that generates an offline map for Naperville. + func makeNapervilleOfflineMapJob() async throws -> GenerateOfflineMapJob { + let map = Map(url: URL(string: "https://www.arcgis.com/home/item.html?id=acc027394bc84c2fb04d1ed317aac674")!)! + let naperville = Envelope( + xMin: -9813416.487598, + yMin: 5126112.596989, + xMax: -9812775.435463, + yMax: 5127101.526749, + spatialReference: SpatialReference.webMercator + ) + let task = OfflineMapTask(onlineMap: map) + let params = try await task.makeDefaultGenerateOfflineMapParameters(areaOfInterest: naperville) + let documentsPath = URL( + fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] + ) + let downloadURL = documentsPath.appendingPathComponent(UUID().uuidString) + return task.makeGenerateOfflineMapJob(parameters: params, downloadDirectory: downloadURL) + } +} diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerViewStep3.swift b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerViewStep3.swift new file mode 100644 index 000000000..28fd9b792 --- /dev/null +++ b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerViewStep3.swift @@ -0,0 +1,87 @@ +import ArcGIS +import ArcGISToolkit +import SwiftUI + +struct JobManagerTutorialView: View { + /// The job manager used by this view. + @ObservedObject var jobManager = JobManager.shared + /// The job that this view shows data for. + @State private var job: Job? + /// The job's error in case of failure. + @State private var error: Error? + /// A Boolean value indicating if we are currently adding an offline map job. + @State private var isAddingOfflineMapJob = false + /// The job's status. + @State private var status: Job.Status = .notStarted + + var body: some View { + VStack { + if let job { + ProgressView(job.progress) + .progressViewStyle(.linear) + .padding() + Button { + jobManager.jobs.removeAll() + self.job = nil + } label: { + Text("Start New Job") + } + .opacity(status == .started ? 0.0 : 1.0) + .buttonStyle(.bordered) + .padding() + .task { + for await jobStatus in job.$status { + status = jobStatus + } + } + } else { + HStack(spacing: 10) { + if isAddingOfflineMapJob { + ProgressView() + } + Button { + isAddingOfflineMapJob = true + Task { + do { + jobManager.jobs.append( + try await makeNapervilleOfflineMapJob() + ) + } catch { + print("Error creating offline map job: \(error)") + } + job = jobManager.jobs.first + job?.start() + isAddingOfflineMapJob = false + } + } label: { + Text("Take Map Offline") + } + .buttonStyle(.bordered) + .disabled(isAddingOfflineMapJob) + .padding() + } + } + } + } +} + +extension JobManagerTutorialView { + /// Creates a job that generates an offline map for Naperville. + func makeNapervilleOfflineMapJob() async throws -> GenerateOfflineMapJob { + let map = Map(url: URL(string: "https://www.arcgis.com/home/item.html?id=acc027394bc84c2fb04d1ed317aac674")!)! + let naperville = Envelope( + xMin: -9813416.487598, + yMin: 5126112.596989, + xMax: -9812775.435463, + yMax: 5127101.526749, + spatialReference: SpatialReference.webMercator + ) + let task = OfflineMapTask(onlineMap: map) + let params = try await task.makeDefaultGenerateOfflineMapParameters(areaOfInterest: naperville) + let documentsPath = URL( + fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] + ) + let downloadURL = documentsPath.appendingPathComponent(UUID().uuidString) + return task.makeGenerateOfflineMapJob(parameters: params, downloadDirectory: downloadURL) + } +} diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerViewStep4.swift b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerViewStep4.swift new file mode 100644 index 000000000..fd9cb6f8d --- /dev/null +++ b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerViewStep4.swift @@ -0,0 +1,93 @@ +import ArcGIS +import ArcGISToolkit +import SwiftUI + +struct JobManagerTutorialView: View { + /// The job manager used by this view. + @ObservedObject var jobManager = JobManager.shared + /// The job that this view shows data for. + @State private var job: Job? + /// The job's error in case of failure. + @State private var error: Error? + /// A Boolean value indicating if we are currently adding an offline map job. + @State private var isAddingOfflineMapJob = false + /// The job's status. + @State private var status: Job.Status = .notStarted + + init() { + // Ask the job manager to schedule background status checks for every 30 seconds. + jobManager.preferredBackgroundStatusCheckSchedule = .regularInterval(interval: 30) + } + + var body: some View { + VStack { + if let job { + ProgressView(job.progress) + .progressViewStyle(.linear) + .padding() + Button { + jobManager.jobs.removeAll() + self.job = nil + } label: { + Text("Start New Job") + } + .opacity(status == .started ? 0.0 : 1.0) + .buttonStyle(.bordered) + .padding() + .task { + for await jobStatus in job.$status { + status = jobStatus + } + } + } else { + HStack(spacing: 10) { + if isAddingOfflineMapJob { + ProgressView() + } + Button { + isAddingOfflineMapJob = true + Task { + do { + jobManager.jobs.append( + try await makeNapervilleOfflineMapJob() + ) + } catch { + print("Error creating offline map job: \(error)") + } + job = jobManager.jobs.first + job?.start() + isAddingOfflineMapJob = false + } + } label: { + Text("Take Map Offline") + } + .buttonStyle(.bordered) + .disabled(isAddingOfflineMapJob) + .padding() + + } + } + } + } +} + +extension JobManagerTutorialView { + /// Creates a job that generates an offline map for Naperville. + func makeNapervilleOfflineMapJob() async throws -> GenerateOfflineMapJob { + let map = Map(url: URL(string: "https://www.arcgis.com/home/item.html?id=acc027394bc84c2fb04d1ed317aac674")!)! + let naperville = Envelope( + xMin: -9813416.487598, + yMin: 5126112.596989, + xMax: -9812775.435463, + yMax: 5127101.526749, + spatialReference: SpatialReference.webMercator + ) + let task = OfflineMapTask(onlineMap: map) + let params = try await task.makeDefaultGenerateOfflineMapParameters(areaOfInterest: naperville) + let documentsPath = URL( + fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] + ) + let downloadURL = documentsPath.appendingPathComponent(UUID().uuidString) + return task.makeGenerateOfflineMapJob(parameters: params, downloadDirectory: downloadURL) + } +} diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerViewStep5.swift b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerViewStep5.swift new file mode 100644 index 000000000..bc0d68d98 --- /dev/null +++ b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerViewStep5.swift @@ -0,0 +1,99 @@ +import ArcGIS +import ArcGISToolkit +import SwiftUI + +struct JobManagerTutorialView: View { + /// The job manager used by this view. + @ObservedObject var jobManager = JobManager.shared + /// The job that this view shows data for. + @State private var job: Job? + /// The job's error in case of failure. + @State private var error: Error? + /// A Boolean value indicating if we are currently adding an offline map job. + @State private var isAddingOfflineMapJob = false + /// The job's status. + @State private var status: Job.Status = .notStarted + + init() { + // Ask the job manager to schedule background status checks for every 30 seconds. + jobManager.preferredBackgroundStatusCheckSchedule = .regularInterval(interval: 30) + } + + var body: some View { + VStack { + if let job { + ProgressView(job.progress) + .progressViewStyle(.linear) + .padding() + Button { + jobManager.jobs.removeAll() + self.job = nil + } label: { + Text("Start New Job") + } + .opacity(status == .started ? 0.0 : 1.0) + .buttonStyle(.bordered) + .padding() + .task { + for await jobStatus in job.$status { + status = jobStatus + } + } + } else { + HStack(spacing: 10) { + if isAddingOfflineMapJob { + ProgressView() + } + Button { + isAddingOfflineMapJob = true + Task { + do { + jobManager.jobs.append( + try await makeNapervilleOfflineMapJob() + ) + } catch { + print("Error creating offline map job: \(error)") + } + job = jobManager.jobs.first + job?.start() + isAddingOfflineMapJob = false + } + } label: { + Text("Take Map Offline") + } + .buttonStyle(.bordered) + .disabled(isAddingOfflineMapJob) + .padding() + } + } + } + .onAppear { + UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound]) { _, error in + if let error { + print(error.localizedDescription) + } + } + } + } +} + +extension JobManagerTutorialView { + /// Creates a job that generates an offline map for Naperville. + func makeNapervilleOfflineMapJob() async throws -> GenerateOfflineMapJob { + let map = Map(url: URL(string: "https://www.arcgis.com/home/item.html?id=acc027394bc84c2fb04d1ed317aac674")!)! + let naperville = Envelope( + xMin: -9813416.487598, + yMin: 5126112.596989, + xMax: -9812775.435463, + yMax: 5127101.526749, + spatialReference: SpatialReference.webMercator + ) + let task = OfflineMapTask(onlineMap: map) + let params = try await task.makeDefaultGenerateOfflineMapParameters(areaOfInterest: naperville) + let documentsPath = URL( + fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] + ) + let downloadURL = documentsPath.appendingPathComponent(UUID().uuidString) + return task.makeGenerateOfflineMapJob(parameters: params, downloadDirectory: downloadURL) + } +} diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerViewStep6.swift b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerViewStep6.swift new file mode 100644 index 000000000..6a67c4d54 --- /dev/null +++ b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerViewStep6.swift @@ -0,0 +1,135 @@ +import ArcGIS +import ArcGISToolkit +import SwiftUI + +struct JobManagerTutorialView: View { + /// The job manager used by this view. + @ObservedObject var jobManager = JobManager.shared + /// The job that this view shows data for. + @State private var job: Job? + /// The job's error in case of failure. + @State private var error: Error? + /// A Boolean value indicating if we are currently adding an offline map job. + @State private var isAddingOfflineMapJob = false + /// The job's status. + @State private var status: Job.Status = .notStarted + + init() { + // Ask the job manager to schedule background status checks for every 30 seconds. + jobManager.preferredBackgroundStatusCheckSchedule = .regularInterval(interval: 30) + } + + var body: some View { + VStack { + if let job { + ProgressView(job.progress) + .progressViewStyle(.linear) + .padding() + Button { + jobManager.jobs.removeAll() + self.job = nil + } label: { + Text("Start New Job") + } + .opacity(status == .started ? 0.0 : 1.0) + .buttonStyle(.bordered) + .padding() + .task { + for await jobStatus in job.$status { + status = jobStatus + } + } + } else { + HStack(spacing: 10) { + if isAddingOfflineMapJob { + ProgressView() + } + Button { + isAddingOfflineMapJob = true + Task { + do { + jobManager.jobs.append( + try await makeNapervilleOfflineMapJob() + ) + } catch { + print("Error creating offline map job: \(error)") + } + job = jobManager.jobs.first + job?.start() + isAddingOfflineMapJob = false + } + } label: { + Text("Take Map Offline") + } + .buttonStyle(.bordered) + .disabled(isAddingOfflineMapJob) + .padding() + } + } + } + .onAppear { + UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound]) { _, error in + if let error { + print(error.localizedDescription) + } + } + } + } + + /// Posts a local notification that the job completed. + func notifyJobCompleted() { + let content = UNMutableNotificationContent() + content.sound = UNNotificationSound.default + content.title = "Job Completed" + content.subtitle = "Offline Map Job" + content.body = status.displayText + content.categoryIdentifier = "Job Completion" + + let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false) + let identifier = "My Local Notification" + let request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger) + + UNUserNotificationCenter.current().add(request) + } +} + +extension Job.Status { + /// Display text for the status. + var displayText: String { + switch self { + case .notStarted: + return "Not Started" + case .started: + return "Started" + case .paused: + return "Paused" + case .succeeded: + return "Succeeded" + case .failed: + return "Failed" + case .canceling: + return "Canceling" + } + } +} + +extension JobManagerTutorialView { + /// Creates a job that generates an offline map for Naperville. + func makeNapervilleOfflineMapJob() async throws -> GenerateOfflineMapJob { + let map = Map(url: URL(string: "https://www.arcgis.com/home/item.html?id=acc027394bc84c2fb04d1ed317aac674")!)! + let naperville = Envelope( + xMin: -9813416.487598, + yMin: 5126112.596989, + xMax: -9812775.435463, + yMax: 5127101.526749, + spatialReference: SpatialReference.webMercator + ) + let task = OfflineMapTask(onlineMap: map) + let params = try await task.makeDefaultGenerateOfflineMapParameters(areaOfInterest: naperville) + let documentsPath = URL( + fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] + ) + let downloadURL = documentsPath.appendingPathComponent(UUID().uuidString) + return task.makeGenerateOfflineMapJob(parameters: params, downloadDirectory: downloadURL) + } +} diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerViewStep7.swift b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerViewStep7.swift new file mode 100644 index 000000000..6c9cec510 --- /dev/null +++ b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerViewStep7.swift @@ -0,0 +1,139 @@ +import ArcGIS +import ArcGISToolkit +import SwiftUI + +struct JobManagerTutorialView: View { + /// The job manager used by this view. + @ObservedObject var jobManager = JobManager.shared + /// The job that this view shows data for. + @State private var job: Job? + /// The job's error in case of failure. + @State private var error: Error? + /// A Boolean value indicating if we are currently adding an offline map job. + @State private var isAddingOfflineMapJob = false + /// The job's status. + @State private var status: Job.Status = .notStarted + + init() { + // Ask the job manager to schedule background status checks for every 30 seconds. + jobManager.preferredBackgroundStatusCheckSchedule = .regularInterval(interval: 30) + } + + var body: some View { + VStack { + if let job { + ProgressView(job.progress) + .progressViewStyle(.linear) + .padding() + Button { + jobManager.jobs.removeAll() + self.job = nil + } label: { + Text("Start New Job") + } + .opacity(status == .started ? 0.0 : 1.0) + .buttonStyle(.bordered) + .padding() + .task { + for await jobStatus in job.$status { + status = jobStatus + if status == .failed || status == .succeeded { + notifyJobCompleted() + return + } + } + } + } else { + HStack(spacing: 10) { + if isAddingOfflineMapJob { + ProgressView() + } + Button { + isAddingOfflineMapJob = true + Task { + do { + jobManager.jobs.append( + try await makeNapervilleOfflineMapJob() + ) + } catch { + print("Error creating offline map job: \(error)") + } + job = jobManager.jobs.first + job?.start() + isAddingOfflineMapJob = false + } + } label: { + Text("Take Map Offline") + } + .buttonStyle(.bordered) + .disabled(isAddingOfflineMapJob) + .padding() + } + } + } + .onAppear { + UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound]) { _, error in + if let error { + print(error.localizedDescription) + } + } + } + } + + /// Posts a local notification that the job completed. + func notifyJobCompleted() { + let content = UNMutableNotificationContent() + content.sound = UNNotificationSound.default + content.title = "Job Completed" + content.subtitle = "Offline Map Job" + content.body = status.displayText + content.categoryIdentifier = "Job Completion" + + let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false) + let identifier = "My Local Notification" + let request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger) + + UNUserNotificationCenter.current().add(request) + } +} + +extension Job.Status { + /// Display text for the status. + var displayText: String { + switch self { + case .notStarted: + return "Not Started" + case .started: + return "Started" + case .paused: + return "Paused" + case .succeeded: + return "Succeeded" + case .failed: + return "Failed" + case .canceling: + return "Canceling" + } + } +} + +extension JobManagerTutorialView { + /// Creates a job that generates an offline map for Naperville. + func makeNapervilleOfflineMapJob() async throws -> GenerateOfflineMapJob { + let map = Map(url: URL(string: "https://www.arcgis.com/home/item.html?id=acc027394bc84c2fb04d1ed317aac674")!)! + let naperville = Envelope( + xMin: -9813416.487598, + yMin: 5126112.596989, + xMax: -9812775.435463, + yMax: 5127101.526749, + spatialReference: SpatialReference.webMercator + ) + let task = OfflineMapTask(onlineMap: map) + let params = try await task.makeDefaultGenerateOfflineMapParameters(areaOfInterest: naperville) + let documentsPath = URL( + fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] + ) + let downloadURL = documentsPath.appendingPathComponent(UUID().uuidString) + return task.makeGenerateOfflineMapJob(parameters: params, downloadDirectory: downloadURL) + } +} diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerViewStep8.swift b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerViewStep8.swift new file mode 100644 index 000000000..65ec9c5bb --- /dev/null +++ b/Sources/ArcGISToolkit/Documentation.docc/Resources/JobManager/JobManagerViewStep8.swift @@ -0,0 +1,142 @@ +import ArcGIS +import ArcGISToolkit +import SwiftUI + +struct JobManagerTutorialView: View { + /// The job manager used by this view. + @ObservedObject var jobManager = JobManager.shared + /// The job that this view shows data for. + @State private var job: Job? + /// The job's error in case of failure. + @State private var error: Error? + /// A Boolean value indicating if we are currently adding an offline map job. + @State private var isAddingOfflineMapJob = false + /// The job's status. + @State private var status: Job.Status = .notStarted + + init() { + // Ask the job manager to schedule background status checks for every 30 seconds. + jobManager.preferredBackgroundStatusCheckSchedule = .regularInterval(interval: 30) + } + + var body: some View { + VStack { + if let job { + ProgressView(job.progress) + .progressViewStyle(.linear) + .padding() + Button { + jobManager.jobs.removeAll() + self.job = nil + } label: { + Text("Start New Job") + } + .opacity(status == .started ? 0.0 : 1.0) + .buttonStyle(.bordered) + .padding() + .task { + for await jobStatus in job.$status { + status = jobStatus + if status == .failed || status == .succeeded { + notifyJobCompleted() + return + } + } + } + } else { + HStack(spacing: 10) { + if isAddingOfflineMapJob { + ProgressView() + } + Button { + isAddingOfflineMapJob = true + Task { + do { + jobManager.jobs.append( + try await makeNapervilleOfflineMapJob() + ) + } catch { + print("Error creating offline map job: \(error)") + } + job = jobManager.jobs.first + job?.start() + isAddingOfflineMapJob = false + } + } label: { + Text("Take Map Offline") + } + .buttonStyle(.bordered) + .disabled(isAddingOfflineMapJob) + .padding() + } + } + } + .onAppear { + UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound]) { _, error in + if let error { + print(error.localizedDescription) + } + } + if jobManager.jobs.count > 0 { + job = jobManager.jobs.first + } + } + } + + /// Posts a local notification that the job completed. + func notifyJobCompleted() { + let content = UNMutableNotificationContent() + content.sound = UNNotificationSound.default + content.title = "Job Completed" + content.subtitle = "Offline Map Job" + content.body = status.displayText + content.categoryIdentifier = "Job Completion" + + let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false) + let identifier = "My Local Notification" + let request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger) + + UNUserNotificationCenter.current().add(request) + } +} + +extension Job.Status { + /// Display text for the status. + var displayText: String { + switch self { + case .notStarted: + return "Not Started" + case .started: + return "Started" + case .paused: + return "Paused" + case .succeeded: + return "Succeeded" + case .failed: + return "Failed" + case .canceling: + return "Canceling" + } + } +} + +extension JobManagerTutorialView { + /// Creates a job that generates an offline map for Naperville. + func makeNapervilleOfflineMapJob() async throws -> GenerateOfflineMapJob { + let map = Map(url: URL(string: "https://www.arcgis.com/home/item.html?id=acc027394bc84c2fb04d1ed317aac674")!)! + let naperville = Envelope( + xMin: -9813416.487598, + yMin: 5126112.596989, + xMax: -9812775.435463, + yMax: 5127101.526749, + spatialReference: SpatialReference.webMercator + ) + let task = OfflineMapTask(onlineMap: map) + let params = try await task.makeDefaultGenerateOfflineMapParameters(areaOfInterest: naperville) + let documentsPath = URL( + fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] + ) + let downloadURL = documentsPath.appendingPathComponent(UUID().uuidString) + return task.makeGenerateOfflineMapJob(parameters: params, downloadDirectory: downloadURL) + } +} diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/PopupView/PopupViewStep3.swift b/Sources/ArcGISToolkit/Documentation.docc/Resources/PopupView/PopupViewStep3.swift index 3a32162b6..1fd21733d 100644 --- a/Sources/ArcGISToolkit/Documentation.docc/Resources/PopupView/PopupViewStep3.swift +++ b/Sources/ArcGISToolkit/Documentation.docc/Resources/PopupView/PopupViewStep3.swift @@ -23,9 +23,7 @@ struct PopupExampleView: View { var body: some View { MapViewReader { proxy in - VStack { - MapView(map: dataModel.map) - } + MapView(map: dataModel.map) } } } diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/PopupView/PopupViewStep4.swift b/Sources/ArcGISToolkit/Documentation.docc/Resources/PopupView/PopupViewStep4.swift index d4a439198..5bbe7c162 100644 --- a/Sources/ArcGISToolkit/Documentation.docc/Resources/PopupView/PopupViewStep4.swift +++ b/Sources/ArcGISToolkit/Documentation.docc/Resources/PopupView/PopupViewStep4.swift @@ -23,12 +23,10 @@ struct PopupExampleView: View { var body: some View { MapViewReader { proxy in - VStack { - MapView(map: dataModel.map) - .onSingleTapGesture { screenPoint, _ in - identifyScreenPoint = screenPoint - } - } + MapView(map: dataModel.map) + .onSingleTapGesture { screenPoint, _ in + identifyScreenPoint = screenPoint + } } } } diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/PopupView/PopupViewStep5.swift b/Sources/ArcGISToolkit/Documentation.docc/Resources/PopupView/PopupViewStep5.swift index adc50de78..49992efef 100644 --- a/Sources/ArcGISToolkit/Documentation.docc/Resources/PopupView/PopupViewStep5.swift +++ b/Sources/ArcGISToolkit/Documentation.docc/Resources/PopupView/PopupViewStep5.swift @@ -17,36 +17,27 @@ struct PopupExampleView: View { @State private var identifyScreenPoint: CGPoint? - @State private var popup: Popup? + @State private var popup: Popup? { + didSet { showPopup = popup != nil } + } @State private var showPopup = false var body: some View { MapViewReader { proxy in - VStack { - MapView(map: dataModel.map) - .onSingleTapGesture { screenPoint, _ in - identifyScreenPoint = screenPoint - } - .task(id: identifyScreenPoint) { - guard let identifyScreenPoint = identifyScreenPoint, - let identifyResult = await Result(awaiting: { - try await proxy.identifyLayers( - screenPoint: identifyScreenPoint, - tolerance: 10, - returnPopupsOnly: true - ) - }) - .cancellationToNil() - else { - return - } - - self.identifyScreenPoint = nil - self.popup = try? identifyResult.get().first?.popups.first - self.showPopup = self.popup != nil - } - } + MapView(map: dataModel.map) + .onSingleTapGesture { screenPoint, _ in + identifyScreenPoint = screenPoint + } + .task(id: identifyScreenPoint) { + guard let identifyScreenPoint else { return } + let identifyResult = try? await proxy.identifyLayers( + screenPoint: identifyScreenPoint, + tolerance: 10, + returnPopupsOnly: true + ).first + popup = identifyResult?.popups.first + } } } } diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/PopupView/PopupViewStep6.swift b/Sources/ArcGISToolkit/Documentation.docc/Resources/PopupView/PopupViewStep6.swift index 14ad6c0f3..3f857561a 100644 --- a/Sources/ArcGISToolkit/Documentation.docc/Resources/PopupView/PopupViewStep6.swift +++ b/Sources/ArcGISToolkit/Documentation.docc/Resources/PopupView/PopupViewStep6.swift @@ -17,7 +17,9 @@ struct PopupExampleView: View { @State private var identifyScreenPoint: CGPoint? - @State private var popup: Popup? + @State private var popup: Popup? { + didSet { showPopup = popup != nil } + } @State private var showPopup = false @@ -25,41 +27,28 @@ struct PopupExampleView: View { var body: some View { MapViewReader { proxy in - VStack { - MapView(map: dataModel.map) - .onSingleTapGesture { screenPoint, _ in - identifyScreenPoint = screenPoint - } - .task(id: identifyScreenPoint) { - guard let identifyScreenPoint = identifyScreenPoint, - let identifyResult = await Result(awaiting: { - try await proxy.identifyLayers( - screenPoint: identifyScreenPoint, - tolerance: 10, - returnPopupsOnly: true - ) - }) - .cancellationToNil() - else { - return - } - - self.identifyScreenPoint = nil - self.popup = try? identifyResult.get().first?.popups.first - self.showPopup = self.popup != nil - } - .floatingPanel( - selectedDetent: $floatingPanelDetent, - horizontalAlignment: .leading, - isPresented: $showPopup - ) { - if let popup = popup { - PopupView(popup: popup, isPresented: $showPopup) - .showCloseButton(true) - .padding() - } - } - } + MapView(map: dataModel.map) + .onSingleTapGesture { screenPoint, _ in + identifyScreenPoint = screenPoint + } + .task(id: identifyScreenPoint) { + guard let identifyScreenPoint else { return } + let identifyResult = try? await proxy.identifyLayers( + screenPoint: identifyScreenPoint, + tolerance: 10, + returnPopupsOnly: true + ).first + popup = identifyResult?.popups.first + } + .floatingPanel( + selectedDetent: $floatingPanelDetent, + horizontalAlignment: .leading, + isPresented: $showPopup + ) { [popup] in + PopupView(popup: popup!, isPresented: $showPopup) + .showCloseButton(true) + .padding() + } } } } diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/TableTopSceneView/TableTopSceneView.png b/Sources/ArcGISToolkit/Documentation.docc/Resources/TableTopSceneView/TableTopSceneView.png new file mode 100644 index 000000000..430698ea6 Binary files /dev/null and b/Sources/ArcGISToolkit/Documentation.docc/Resources/TableTopSceneView/TableTopSceneView.png differ diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/TableTopSceneView/TableTopSceneViewStep1.swift b/Sources/ArcGISToolkit/Documentation.docc/Resources/TableTopSceneView/TableTopSceneViewStep1.swift new file mode 100644 index 000000000..f9866d590 --- /dev/null +++ b/Sources/ArcGISToolkit/Documentation.docc/Resources/TableTopSceneView/TableTopSceneViewStep1.swift @@ -0,0 +1,19 @@ +import SwiftUI +import ArcGIS +import ArcGISToolkit + +struct TableTopExampleView: View { + private let anchorPoint = Point( + x: -122.68350326165559, + y: 45.53257485106716, + spatialReference: .wgs84 + ) + + var body: some View { + TableTopSceneView( + anchorPoint: anchorPoint, + translationFactor: 1_000, + clippingDistance: 400 + ) + } +} diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/TableTopSceneView/TableTopSceneViewStep2.swift b/Sources/ArcGISToolkit/Documentation.docc/Resources/TableTopSceneView/TableTopSceneViewStep2.swift new file mode 100644 index 000000000..60c5a8ed7 --- /dev/null +++ b/Sources/ArcGISToolkit/Documentation.docc/Resources/TableTopSceneView/TableTopSceneViewStep2.swift @@ -0,0 +1,36 @@ +import SwiftUI +import ArcGIS +import ArcGISToolkit + +struct TableTopExampleView: View { + @State private var scene: ArcGIS.Scene = { + // Creates a scene layer from buildings REST service. + let buildingsURL = URL(string: "https://tiles.arcgis.com/tiles/P3ePLMYs2RVChkJx/arcgis/rest/services/DevA_BuildingShells/SceneServer")! + let buildingsLayer = ArcGISSceneLayer(url: buildingsURL) + // Creates an elevation source from Terrain3D REST service. + let elevationServiceURL = URL(string: "https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer")! + let elevationSource = ArcGISTiledElevationSource(url: elevationServiceURL) + let surface = Surface() + surface.addElevationSource(elevationSource) + let scene = Scene() + scene.baseSurface = surface + scene.addOperationalLayer(buildingsLayer) + return scene + }() + + private let anchorPoint = Point( + x: -122.68350326165559, + y: 45.53257485106716, + spatialReference: .wgs84 + ) + + var body: some View { + TableTopSceneView( + anchorPoint: anchorPoint, + translationFactor: 1_000, + clippingDistance: 400 + ) { _ in + SceneView(scene: scene) + } + } +} diff --git a/Sources/ArcGISToolkit/Documentation.docc/Resources/TableTopSceneView/TableTopSceneViewStep3.swift b/Sources/ArcGISToolkit/Documentation.docc/Resources/TableTopSceneView/TableTopSceneViewStep3.swift new file mode 100644 index 000000000..e033c42aa --- /dev/null +++ b/Sources/ArcGISToolkit/Documentation.docc/Resources/TableTopSceneView/TableTopSceneViewStep3.swift @@ -0,0 +1,37 @@ +import SwiftUI +import ArcGIS +import ArcGISToolkit + +struct TableTopExampleView: View { + @State private var scene: ArcGIS.Scene = { + // Creates a scene layer from buildings REST service. + let buildingsURL = URL(string: "https://tiles.arcgis.com/tiles/P3ePLMYs2RVChkJx/arcgis/rest/services/DevA_BuildingShells/SceneServer")! + let buildingsLayer = ArcGISSceneLayer(url: buildingsURL) + // Creates an elevation source from Terrain3D REST service. + let elevationServiceURL = URL(string: "https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer")! + let elevationSource = ArcGISTiledElevationSource(url: elevationServiceURL) + let surface = Surface() + surface.addElevationSource(elevationSource) + let scene = Scene() + scene.baseSurface = surface + scene.addOperationalLayer(buildingsLayer) + scene.baseSurface.opacity = 0 + return scene + }() + + private let anchorPoint = Point( + x: -122.68350326165559, + y: 45.53257485106716, + spatialReference: .wgs84 + ) + + var body: some View { + TableTopSceneView( + anchorPoint: anchorPoint, + translationFactor: 1_000, + clippingDistance: 400 + ) { _ in + SceneView(scene: scene) + } + } +} diff --git a/Sources/ArcGISToolkit/Documentation.docc/Tutorials/BookmarksTutorial.tutorial b/Sources/ArcGISToolkit/Documentation.docc/Tutorials/BookmarksTutorial.tutorial index 9f7f44029..9b19a4f88 100644 --- a/Sources/ArcGISToolkit/Documentation.docc/Tutorials/BookmarksTutorial.tutorial +++ b/Sources/ArcGISToolkit/Documentation.docc/Tutorials/BookmarksTutorial.tutorial @@ -13,18 +13,22 @@ @Steps { @Step { To begin, set up the parent view. - Initialize a map that contains preset bookmarks and add a member to track viewpoint changes. - Add a `MapView` to the body of the view, passing in the map and viewpoint. Track viewpoint changes with the `onViewpointChanged` modifier. Wrap the `MapView` in a `MapViewReader` to allow for programatic animated viewpoint changes. + + Initialize a map that contains preset bookmarks. + Add a `MapView` to the body of the view, passing in the map. + Wrap the `MapView` in a `MapViewReader` to allow for programatic animated viewpoint changes. @Code(name: "BookmarksExampleView.swift", file: BookmarksStep1) } @Step { - Add a toolbar button to open the bookmark selector. The property `showingBookmarks` will control when the gallery is shown or hidden. + Add a toolbar button to open the bookmark selector. + + The property `showingBookmarks` will control when the bookmarks are shown or hidden. @Code(name: "BookmarksExampleView.swift", file: BookmarksStep2) } @Step { - Host the bookmark selector inside of a popover. + Host the Bookmarks component inside of a popover. @Code(name: "BookmarksExampleView.swift", file: BookmarksStep3) } diff --git a/Sources/ArcGISToolkit/Documentation.docc/Tutorials/FlyoverSceneViewTutorial.tutorial b/Sources/ArcGISToolkit/Documentation.docc/Tutorials/FlyoverSceneViewTutorial.tutorial new file mode 100644 index 000000000..37ac6d6fd --- /dev/null +++ b/Sources/ArcGISToolkit/Documentation.docc/Tutorials/FlyoverSceneViewTutorial.tutorial @@ -0,0 +1,28 @@ +@Tutorial(time: 10) { + @Intro(title: "FlyoverSceneView Tutorial") { + `FlyoverSceneView` provides an augmented reality fly over experience. + @Image(source: FlyoverSceneView, alt: "An image of a fly over AR experience.") + } + + @Section(title: "Using the FlyoverSceneView") { + @ContentAndMedia { + @Image(source: FlyoverSceneView, alt: "An image of a fly over AR experience.") + } + + @Steps { + @Step { + Initialize a `FlyoverSceneView`. Specify the initial latitude, longitude, and altitude + of the scene view's camera and the translation factor. The translation factor determines + how many meters the scene view translates as the device moves in the AR experience. + @Code(name: "FlyoverExampleView.swift", file: FlyoverSceneViewStep1) + } + + @Step { + Add a `SceneView` to the `FlyoverSceneView` closure. The closure builds and overlays + the scene view on top of the augmented reality video feed. Specify the `scene` state + variable. + @Code(name: "FlyoverExampleView.swift", file: FlyoverSceneViewStep2) + } + } + } +} diff --git a/Sources/ArcGISToolkit/Documentation.docc/Tutorials/JobManagerTutorial.tutorial b/Sources/ArcGISToolkit/Documentation.docc/Tutorials/JobManagerTutorial.tutorial new file mode 100644 index 000000000..4f2d77fea --- /dev/null +++ b/Sources/ArcGISToolkit/Documentation.docc/Tutorials/JobManagerTutorial.tutorial @@ -0,0 +1,138 @@ +@Tutorial(time: 30) { + @Intro(title: "JobManager Tutorial") { + The `JobManager` manages saving and loading jobs so that they can continue to run if the app is backgrounded or even terminated. + + @Image(source: JobManagerTutorial, alt: "An image of the JobManager component.") + } + + @Section(title: "Getting started with the JobManager") { + @ContentAndMedia { + @Image(source: JobManagerTutorial, alt: "An image of the JobManager component.") + In this tutorial you will use a job that generates an offline map. The job will connect to a service, ask the service to generate an offline map, poll the status of the job, and then download the offline map once it is ready. + } + + @Steps { + @Step { + Create the JobManagerTutorialView struct. Add properties and start the UI for adding a job to the job manager. + + Begin by adding a JobManager property as an observed object. Add state properties for `job`, `error`, and a boolean that you'll use to show progress when adding a job. Start the UI by adding a button to take a map offline and a progress indicator to show that the job is being added. This will be the UI before a job has been added (`job == nil`). + + @Code(name: "JobManagerTutorialView.swift", file: JobManagerViewStep1) { + @Image(source: JobManagerTakeMapOfflineButton, alt: "An Image of an iPhone app with a Take Map Offline button.") + } + } + + @Step { + Add an extension containing the helper function for making the job. + + The function makes a map from a URL, then uses a task to make the generate offline map job. + + @Code(name: "JobManagerTutorialView.swift", file: JobManagerViewStep2, previousFile: JobManagerViewStep1) + } + + @Step { + Make the UI that will show when a job has been added to the job manager. + + To begin, add a state variable for the job status. Just after the check to see if we have a job, add a progress view that will show the progress of the job. Next, add a button to remove the job from the job manager and start over; give it the title "Start New Job". Last add a task to keep track of the job status in the status state variable. + + @Code(name: "JobManagerTutorialView.swift", file: JobManagerViewStep3, previousFile: JobManagerViewStep2) { + @Image(source: JobManagerTutorial, alt: "An Image of an iPhone app with a progress bar and Start New Job button.") + } + } + + @Step { + Let's look at what we have so far. When the "Take Map Offline" button is tapped, a job is added to the job manager and the job is started. + + The first thing the job does is connect to the specified server to kick off the process that will make a mobile map package. Jobs are intended to be used with longer running service tasks. Once the work on the server is started the job waits and occasionally polls the service for the status of the service work. + + @Image(source: JobManagerTutorialJobStart, alt: "An image of the app UI with a progress bar four percent done.") + } + + @Step { + To know when the work on the server is done, the job polls the service. The job periodically requests the status of the work the service is doing. + + For this tutorial, the service is collecting all the parts of a map and putting them together to create a mobile map package. + + @Image(source: JobManagerTutorialJobPoll, alt: "An image of the app UI with a progress bar twenty-one percent done.") + } + + @Step { + Eventually, the job will poll the service and receive the response that the work is complete and there is a result available to download. At this point the job starts a URL session and downloads the result. + + The mobile map package is downloaded from the server to a local folder. + + @Image(source: JobManagerTutorialJobDownload, alt: "An image of the app UI with a progress bar one hundred percent done.") + } + + @Step { + To generate the offline map you will need an API key or credential. This step show how to add an API key. To use a credential refer to the AuthenticatorTutorial. + + Once an API key has been added the project can be built and run. Tap the "Take Map Offline" button to add the job to the job manager and start the job. The offline map will be generated and downloaded. As long as the tutorial app is running in the foreground the job will finish and we'll get the mobile map package. However, we know that people don't use their devices like that. What we want is for people to be able to start a job, do other things on their device while the job runs and get a notification when the job finishes. In the next steps you will add the code to handle the app being backgrounded or terminated. + + @Code(name: "JobManagerTutorialApp.swift", file: JobManagerAppStep1) + } + + @Step { + Adding background tasks begins with some project settings. Enable the kind of background processing needed by the app in the Background Modes. The job manager uses "Background fetch". + + The job manager registers a background task to allow all of its jobs to check the status of the work happening on the servers. Getting the status is a lightweight operation that requires "Background fetch" mode. + + @Image(source: JobManagerTutorialBackgroundFetch, alt: "An image of the Background Modes settings with the Background fetch mode checked.") + } + + @Step { + Now tell the background task scheduler the identifier of the task that we want to run in the background. This is done in the project info for the app target. Add "com.esri.ArcGISToolkit.jobManager.statusCheck" as the first item in the Permitted Background Task Scheduler Identifiers. + + The job manager will register a background task with this identifier and submit a request to be allotted periodic background processing time. In this tutorial we will ask to be given time every 30 seconds. When the app gets background time is at the operating system's discretion; it may or may not be anywhere close to 30 seconds. + + @Image(source: JobManagerTutorialPermittedIdentifiers, alt: "An image of the list of Permitted Background Task Scheduler Identifiers.") + } + + @Step { + The code needed for setting up the background task tells the job manager how often it should ask to be woken up to check status. + + Add an init to JobManagerTutorialView. In the init, use `preferredBackgroundStatusCheckSchedule` on the job manager to set the job manager to request to be woken up every 30 seconds. This setting along with the two project settings complete the set up necessary for the job manager to check the status of jobs when the app is backgrounded. + + @Code(name: "JobManagerTutorialView.swift", file: JobManagerViewStep4, previousFile: JobManagerViewStep3) + } + + @Step { + The operating system may determine to terminate your app if the app is suspended. We'll now turn our attention to handling that situation occurring while jobs are running. In the tutorial app, add code to a task that will run if the app gets launched because a download finished. + + Add a backgroundTask that responds to the URLSession that gets set up by the SDK in the ArcGISEnvironment. This is the task that will run if the URL session completes a download after the app has been terminated. In the background task, handle the background URL session events. Also, resume any jobs that have been paused; this will also recreate any URL sessions that finished while the app was in the background. Note: background operation only works on a device not connected to the debugger. + + @Code(name: "JobManagerTutorialApp.swift", file: JobManagerAppStep2, previousFile: JobManagerAppStep1) + } + + @Step { + With the background processing set up, we'll work on the notification for when downloads finish while the app is backgrounded. + + At the end of the `body` property, add an `onAppear` modifier and in the closure request authorization to send the user notifications. + + @Code(name: "JobManagerTutorialView.swift", file: JobManagerViewStep5, previousFile: JobManagerViewStep4) + } + + @Step { + After the `body` property add a method to construct and send a notification. + + @Code(name: "JobManagerTutorialView.swift", file: JobManagerViewStep6, previousFile: JobManagerViewStep5) + } + + @Step { + Add the code to send a notification when the job completes. + + Find the task in the body property that is awaiting changes to the job status. Add the code to call `notifyJobCompleted` when the job status becomes `failed` or `succeeded`. + + @Code(name: "JobManagerTutorialView.swift", file: JobManagerViewStep7, previousFile: JobManagerViewStep6) + } + + @Step { + In the case that the app was terminated when running a job, the state will be reloaded when the app is launched. In this case we need to populate the current job with the first job from the jobManager's jobs. + + Add code in `onAppear` to populate the job property. + + @Code(name: "JobManagerTutorialView.swift", file: JobManagerViewStep8, previousFile: JobManagerViewStep7) + } + } + } +} diff --git a/Sources/ArcGISToolkit/Documentation.docc/Tutorials/TableTopSceneViewTutorial.tutorial b/Sources/ArcGISToolkit/Documentation.docc/Tutorials/TableTopSceneViewTutorial.tutorial new file mode 100644 index 000000000..18ea4deed --- /dev/null +++ b/Sources/ArcGISToolkit/Documentation.docc/Tutorials/TableTopSceneViewTutorial.tutorial @@ -0,0 +1,37 @@ +@Tutorial(time: 10) { + @Intro(title: "TableTopSceneView Tutorial") { + `TableTopSceneView` provides an augmented reality table top experience. + @Image(source: TableTopSceneView, alt: "An image of a table top AR experience.") + } + + @Section(title: "Using the TableTopSceneView") { + @ContentAndMedia { + @Image(source: TableTopSceneView, alt: "An image of a table top AR experience.") + } + + @Steps { + @Step { + Initialize a `TableTopSceneView`. Specify the anchor point, translation factor, + and clipping distance. + + The anchor point is the location point of the ArcGIS Scene that is anchored on a + physical surface. The translation factor determines how many meters the scene view + translates as the device moves in the AR experience. The clipping distance is the + distance in meters that the ArcGIS Scene data will be clipped to. + @Code(name: "TableTopExampleView.swift", file: TableTopSceneViewStep1) + } + + @Step { + Add a `SceneView` to the `TableTopSceneView` closure. The closure builds and overlays + the scene view on top of the augmented reality video feed. Specify the `scene` state + variable. + @Code(name: "TableTopExampleView.swift", file: TableTopSceneViewStep2) + } + + @Step { + Set the `scene.baseSurface.opacity` to zero to make the basemap transparent. + @Code(name: "TableTopExampleView.swift", file: TableTopSceneViewStep3) + } + } + } +} diff --git a/Sources/ArcGISToolkit/Documentation.docc/Tutorials/ToolkitTutorials.tutorial b/Sources/ArcGISToolkit/Documentation.docc/Tutorials/ToolkitTutorials.tutorial index 1bc09a272..b91eb396f 100644 --- a/Sources/ArcGISToolkit/Documentation.docc/Tutorials/ToolkitTutorials.tutorial +++ b/Sources/ArcGISToolkit/Documentation.docc/Tutorials/ToolkitTutorials.tutorial @@ -4,6 +4,15 @@ development. It is built off of the new ArcGIS Maps SDK for Swift. } + @Chapter(name: "Augmented Reality") { + Augmented reality experiences overlay ArcGIS Scene imagery over a camera feed of the + physical world. The following views provide augmented reality experiences + for common AR patterns including Flyover and TableTop AR. + @Image(source: FlyoverSceneView, alt: "An image of a fly over AR experience.") + @TutorialReference(tutorial: "doc:FlyoverSceneViewTutorial") + @TutorialReference(tutorial: "doc:TableTopSceneViewTutorial") + } + @Chapter(name: "Authenticator") { The `Authenticator` is a configurable object that handles authentication challenges. It will display a user interface when network and ArcGIS authentication challenges occur. @@ -44,6 +53,13 @@ @TutorialReference(tutorial: "doc:FloorFilterTutorial") } + @Chapter(name: "JobManager") { + The `JobManager` manages saving and loading jobs so that they can continue to run if the + app is backgrounded or even terminated. + @Image(source: JobManagerTutorial, alt: "An image of the JobManager component.") + @TutorialReference(tutorial: "doc:JobManagerTutorial") + } + @Chapter(name: "OverviewMap") { `OverviewMap` is a small, secondary `MapView` (sometimes called an "inset map") superimposed on an existing `GeoView`, which shows a representation of the current diff --git a/Sources/ArcGISToolkit/Extensions/ArcGISFeature.swift b/Sources/ArcGISToolkit/Extensions/ArcGIS/ArcGISFeature.swift similarity index 100% rename from Sources/ArcGISToolkit/Extensions/ArcGISFeature.swift rename to Sources/ArcGISToolkit/Extensions/ArcGIS/ArcGISFeature.swift diff --git a/Sources/ArcGISToolkit/Extensions/FloorFacility.swift b/Sources/ArcGISToolkit/Extensions/ArcGIS/FloorFacility.swift similarity index 100% rename from Sources/ArcGISToolkit/Extensions/FloorFacility.swift rename to Sources/ArcGISToolkit/Extensions/ArcGIS/FloorFacility.swift diff --git a/Sources/ArcGISToolkit/Extensions/FloorLevel.swift b/Sources/ArcGISToolkit/Extensions/ArcGIS/FloorLevel.swift similarity index 100% rename from Sources/ArcGISToolkit/Extensions/FloorLevel.swift rename to Sources/ArcGISToolkit/Extensions/ArcGIS/FloorLevel.swift diff --git a/Sources/ArcGISToolkit/Extensions/FloorSite.swift b/Sources/ArcGISToolkit/Extensions/ArcGIS/FloorSite.swift similarity index 100% rename from Sources/ArcGISToolkit/Extensions/FloorSite.swift rename to Sources/ArcGISToolkit/Extensions/ArcGIS/FloorSite.swift diff --git a/Sources/ArcGISToolkit/Extensions/PopupElement.swift b/Sources/ArcGISToolkit/Extensions/ArcGIS/PopupElement.swift similarity index 100% rename from Sources/ArcGISToolkit/Extensions/PopupElement.swift rename to Sources/ArcGISToolkit/Extensions/ArcGIS/PopupElement.swift diff --git a/Sources/ArcGISToolkit/Extensions/ArcGIS/SceneViewProxy.swift b/Sources/ArcGISToolkit/Extensions/ArcGIS/SceneViewProxy.swift new file mode 100644 index 000000000..6d8f862ad --- /dev/null +++ b/Sources/ArcGISToolkit/Extensions/ArcGIS/SceneViewProxy.swift @@ -0,0 +1,87 @@ +// Copyright 2023 Esri. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation +import ArcGIS +import ARKit +import SwiftUI + +extension SceneViewProxy { + /// Updates the scene view's camera for a given augmented reality frame. + /// - Parameters: + /// - frame: The current AR frame. + /// - cameraController: The current camera controller assigned to the scene view. + /// - orientation: The interface orientation. + func updateCamera( + frame: ARFrame, + cameraController: TransformationMatrixCameraController, + orientation: InterfaceOrientation, + initialTransformation: TransformationMatrix? = nil + ) { + let transform = frame.camera.transform(for: orientation) + let quaternion = simd_quatf(transform) + let transformationMatrix = TransformationMatrix.normalized( + quaternionX: Double(quaternion.vector.x), + quaternionY: Double(quaternion.vector.y), + quaternionZ: Double(quaternion.vector.z), + quaternionW: Double(quaternion.vector.w), + translationX: Double(transform.columns.3.x), + translationY: Double(transform.columns.3.y), + translationZ: Double(transform.columns.3.z) + ) + + // Set the matrix on the camera controller. + if let initialTransformation { + cameraController.transformationMatrix = initialTransformation.adding(transformationMatrix) + } else { + cameraController.transformationMatrix = transformationMatrix + } + } +} + +private extension ARCamera { + /// The transform rotated for a particular interface orientation. + /// - Parameter orientation: The interface orientation that the transform is appropriate for. + func transform(for orientation: InterfaceOrientation) -> simd_float4x4 { + switch orientation { + case .portrait: + // Rotate camera transform 90 degrees clockwise in the XY plane. + return simd_float4x4( + transform.columns.1, + -transform.columns.0, + transform.columns.2, + transform.columns.3 + ) + case .landscapeLeft: + // No rotation necessary. + return transform + case .landscapeRight: + // Rotate 180. + return simd_float4x4( + -transform.columns.0, + -transform.columns.1, + transform.columns.2, + transform.columns.3 + ) + case .portraitUpsideDown: + // Rotate 90 counter clockwise. + return simd_float4x4( + -transform.columns.1, + transform.columns.0, + transform.columns.2, + transform.columns.3 + ) + default: + assertionFailure("Unrecognized interface orientation") + return transform + } + } +} diff --git a/Sources/ArcGISToolkit/Extensions/UtilityTraceFunction.FunctionType.swift b/Sources/ArcGISToolkit/Extensions/ArcGIS/UtilityTraceFunction.FunctionType.swift similarity index 100% rename from Sources/ArcGISToolkit/Extensions/UtilityTraceFunction.FunctionType.swift rename to Sources/ArcGISToolkit/Extensions/ArcGIS/UtilityTraceFunction.FunctionType.swift diff --git a/Sources/ArcGISToolkit/Extensions/UtilityTraceFunctionOutput.swift b/Sources/ArcGISToolkit/Extensions/ArcGIS/UtilityTraceFunctionOutput.swift similarity index 100% rename from Sources/ArcGISToolkit/Extensions/UtilityTraceFunctionOutput.swift rename to Sources/ArcGISToolkit/Extensions/ArcGIS/UtilityTraceFunctionOutput.swift diff --git a/Sources/ArcGISToolkit/Extensions/Viewpoint.swift b/Sources/ArcGISToolkit/Extensions/ArcGIS/Viewpoint.swift similarity index 100% rename from Sources/ArcGISToolkit/Extensions/Viewpoint.swift rename to Sources/ArcGISToolkit/Extensions/ArcGIS/Viewpoint.swift diff --git a/Sources/ArcGISToolkit/Extensions/Bundle.swift b/Sources/ArcGISToolkit/Extensions/Foundation/Bundle.swift similarity index 100% rename from Sources/ArcGISToolkit/Extensions/Bundle.swift rename to Sources/ArcGISToolkit/Extensions/Foundation/Bundle.swift diff --git a/Sources/ArcGISToolkit/Extensions/GraphicsOverlay+ObservableObject.swift b/Sources/ArcGISToolkit/Extensions/Swift/MacCatalyst.swift similarity index 64% rename from Sources/ArcGISToolkit/Extensions/GraphicsOverlay+ObservableObject.swift rename to Sources/ArcGISToolkit/Extensions/Swift/MacCatalyst.swift index 8930951f9..8e1f42914 100644 --- a/Sources/ArcGISToolkit/Extensions/GraphicsOverlay+ObservableObject.swift +++ b/Sources/ArcGISToolkit/Extensions/Swift/MacCatalyst.swift @@ -1,17 +1,22 @@ -// Copyright 2021 Esri. - +// Copyright 2023 Esri. +// // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 - +// +// http://www.apache.org/licenses/LICENSE-2.0 +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -import SwiftUI -import ArcGIS - -extension GraphicsOverlay: ObservableObject {} +/// A Boolean value indicating whether the target environment is Mac Catalyst or not. +var isMacCatalyst: Bool { +#if targetEnvironment(macCatalyst) + return true +#else + return false +#endif +} diff --git a/Sources/ArcGISToolkit/Extensions/Result.swift b/Sources/ArcGISToolkit/Extensions/Swift/Result.swift similarity index 90% rename from Sources/ArcGISToolkit/Extensions/Result.swift rename to Sources/ArcGISToolkit/Extensions/Swift/Result.swift index ff0893f62..6ccb4e896 100644 --- a/Sources/ArcGISToolkit/Extensions/Result.swift +++ b/Sources/ArcGISToolkit/Extensions/Swift/Result.swift @@ -25,6 +25,8 @@ public extension Result where Failure == Error { /// Converts the result to a `nil` in the case of a user cancelled error. /// - Returns: `Self` or `nil` if there was a cancellation error. + /// - Attention: Deprecated at 200.3. + @available(*, deprecated, message: "Check the 'failure' case for 'CancellationError' instead.") func cancellationToNil() -> Self? { guard case .failure(_ as CancellationError) = self else { return self diff --git a/Sources/ArcGISToolkit/Extensions/Swift/String.swift b/Sources/ArcGISToolkit/Extensions/Swift/String.swift new file mode 100644 index 000000000..aa8f675df --- /dev/null +++ b/Sources/ArcGISToolkit/Extensions/Swift/String.swift @@ -0,0 +1,43 @@ +// Copyright 2023 Esri. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import Foundation + +extension String { + /// A localized string for the word "Cancel". + static var cancel: Self { + .init( + localized: "Cancel", + bundle: .toolkitModule, + comment: "A label for a button to cancel an operation." + ) + } + + /// A localized string for the word "Field". + static var field: Self { + .init( + localized: "Field", + bundle: .toolkitModule, + comment: "A field in a set of data contained in a popup." + ) + } + + /// A localized string for the word "Value". + static var value: Self { + .init( + localized: "Value", + bundle: .toolkitModule, + comment: "A value in a set of data contained in a popup." + ) + } +} diff --git a/Sources/ArcGISToolkit/Extensions/Angle.swift b/Sources/ArcGISToolkit/Extensions/SwiftUI/Angle.swift similarity index 100% rename from Sources/ArcGISToolkit/Extensions/Angle.swift rename to Sources/ArcGISToolkit/Extensions/SwiftUI/Angle.swift diff --git a/Sources/ArcGISToolkit/Extensions/Button.swift b/Sources/ArcGISToolkit/Extensions/SwiftUI/Button.swift similarity index 100% rename from Sources/ArcGISToolkit/Extensions/Button.swift rename to Sources/ArcGISToolkit/Extensions/SwiftUI/Button.swift diff --git a/Sources/ArcGISToolkit/Extensions/Color.swift b/Sources/ArcGISToolkit/Extensions/SwiftUI/Color.swift similarity index 100% rename from Sources/ArcGISToolkit/Extensions/Color.swift rename to Sources/ArcGISToolkit/Extensions/SwiftUI/Color.swift diff --git a/Sources/ArcGISToolkit/Extensions/EdgeInsets.swift b/Sources/ArcGISToolkit/Extensions/SwiftUI/EdgeInsets.swift similarity index 100% rename from Sources/ArcGISToolkit/Extensions/EdgeInsets.swift rename to Sources/ArcGISToolkit/Extensions/SwiftUI/EdgeInsets.swift diff --git a/Sources/ArcGISToolkit/Extensions/SwiftUI/View.swift b/Sources/ArcGISToolkit/Extensions/SwiftUI/View.swift new file mode 100644 index 000000000..06522064c --- /dev/null +++ b/Sources/ArcGISToolkit/Extensions/SwiftUI/View.swift @@ -0,0 +1,153 @@ +// Copyright 2022 Esri. + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +/// A modifier which monitors UIResponder keyboard notifications. +/// +/// This modifier makes it easy to monitor state changes of the device keyboard. +struct KeyboardStateChangedModifier: ViewModifier { + /// The closure to perform when the keyboard state has changed. + var action: (KeyboardState, CGFloat) -> Void + + @ViewBuilder func body(content: Content) -> some View { + content + .onReceive(NotificationCenter.default.publisher(for: UIResponder.keyboardWillShowNotification)) { + action(.opening, ($0.userInfo![UIResponder.keyboardFrameEndUserInfoKey] as! CGRect).height) + } + .onReceive(NotificationCenter.default.publisher(for: UIResponder.keyboardDidShowNotification)) { + action(.open, ($0.userInfo![UIResponder.keyboardFrameEndUserInfoKey] as! CGRect).height) + } + .onReceive(NotificationCenter.default.publisher(for: UIResponder.keyboardWillHideNotification)) { _ in + action(.closing, .zero) + } + .onReceive(NotificationCenter.default.publisher(for: UIResponder.keyboardDidHideNotification)) { _ in + action(.closed, .zero) + } + } +} + +/// A modifier which displays a background and shadow for a view. Used to represent a selected view. +struct SelectedModifier: ViewModifier { + /// A Boolean value that indicates whether view should display as selected. + var isSelected: Bool + + func body(content: Content) -> some View { + if isSelected { + content + .background(Color.secondary.opacity(0.8)) + .clipShape(RoundedRectangle(cornerRadius: 4)) + .shadow( + color: .secondary.opacity(0.8), + radius: 2 + ) + } else { + content + } + } +} + +extension View { + /// Sets a closure to perform when the keyboard state has changed. + /// - Parameter action: The closure to perform when the keyboard state has changed. + @ViewBuilder func onKeyboardStateChanged(_ action: @escaping (KeyboardState, CGFloat) -> Void) -> some View { + modifier(KeyboardStateChangedModifier(action: action)) + } + + /// Returns a new `View` that allows a parent `View` to be informed of a child view's size. + /// - Parameter perform: The closure to be executed when the content size of the receiver + /// changes. + /// - Returns: A new `View`. + func onSizeChange(perform: @escaping (CGSize) -> Void) -> some View { + background( + GeometryReader { geometry in + Color.clear + .preference( + key: SizePreferenceKey.self, value: geometry.size + ) + } + ) + .onPreferenceChange(SizePreferenceKey.self, perform: perform) + } + + /// Adds an equal padding amount to the horizontal edges of this view if the target environment + /// is Mac Catalyst. + /// - Parameter length: An amount, given in points, to pad this view on the horizontal edges. + /// If you set the value to nil, SwiftUI uses a platform-specific default amount. + /// The default value of this parameter is nil. + /// - Returns: A view that’s padded by the specified amount on the horizontal edges. + func catalystPadding(_ length: CGFloat? = nil) -> some View { + return self + .padding(isMacCatalyst ? [.horizontal] : [], length) + } + + /// View modifier used to denote the view is selected. + /// - Parameter isSelected: `true` if the view is selected, `false` otherwise. + /// - Returns: The modified view. + func selected( + _ isSelected: Bool = false + ) -> some View { + modifier(SelectedModifier(isSelected: isSelected)) + } + + /// Returns a new view with medium presentation detents, if presentation + /// detents are supported (iOS 16 and up). + func mediumPresentationDetents() -> some View { + if #available(iOS 16.0, *) { + return self + .presentationDetents([.medium]) + } else { + return self + } + } + + /// Performs the provided action when the view appears after a slight delay. + /// - Tip: Occasionally delaying allows a sheet's presentation animation to work correctly. + /// - Parameters: + /// - delay: The delay to wait before allow the task to proceed, in nanoseconds. Defaults to 1/4 second. + /// - action: The action to perform after the delay. + func delayedOnAppear(nanoseconds: UInt64 = 250_000_000, action: @MainActor @escaping () -> Void) -> some View { + task { @MainActor in + try? await Task.sleep(nanoseconds: nanoseconds) + action() + } + } +} + +extension View { + /// Adds an action to perform when this view detects data emitted by the + /// given async sequence. If `action` is `nil`, then the async sequence is not observed. + /// The `action` closure is captured the first time the view appears. + /// - Parameters: + /// - sequence: The async sequence to observe. + /// - action: The action to perform when a value is emitted by `sequence`. + /// The value emitted by `sequence` is passed as a parameter to `action`. + /// The `action` is called on the `MainActor`. + /// - Returns: A view that triggers `action` when `sequence` emits a value. + @MainActor @ViewBuilder func onReceive( + _ sequence: S, + perform action: ((S.Element) -> Void)? + ) -> some View where S: AsyncSequence { + if let action { + task { + do { + for try await element in sequence { + action(element) + } + } catch {} + } + } else { + self + } + } +} diff --git a/Sources/ArcGISToolkit/Extensions/View.swift b/Sources/ArcGISToolkit/Extensions/View.swift deleted file mode 100644 index 8444a867a..000000000 --- a/Sources/ArcGISToolkit/Extensions/View.swift +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2022 Esri. - -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 - -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -import SwiftUI - -/// A modifier which displays a background and shadow for a view. Used to represent a selected view. -struct SelectedModifier: ViewModifier { - /// A Boolean value that indicates whether view should display as selected. - var isSelected: Bool - - func body(content: Content) -> some View { - if isSelected { - content - .background(Color.secondary.opacity(0.8)) - .clipShape(RoundedRectangle(cornerRadius: 4)) - .shadow( - color: .secondary.opacity(0.8), - radius: 2 - ) - } else { - content - } - } -} - -extension View { - /// Returns a new `View` that allows a parent `View` to be informed of a child view's size. - /// - Parameter perform: The closure to be executed when the content size of the receiver - /// changes. - /// - Returns: A new `View`. - func onSizeChange(perform: @escaping (CGSize) -> Void) -> some View { - background( - GeometryReader { geometry in - Color.clear - .preference( - key: SizePreferenceKey.self, value: geometry.size - ) - } - ) - .onPreferenceChange(SizePreferenceKey.self, perform: perform) - } - - /// View modifier used to denote the view is selected. - /// - Parameter isSelected: `true` if the view is selected, `false` otherwise. - /// - Returns: The modified view. - func selected( - _ isSelected: Bool = false - ) -> some View { - modifier(SelectedModifier(isSelected: isSelected)) - } -} diff --git a/Sources/ArcGISToolkit/PrivacyInfo.xcprivacy b/Sources/ArcGISToolkit/PrivacyInfo.xcprivacy new file mode 100644 index 000000000..32ae94b93 --- /dev/null +++ b/Sources/ArcGISToolkit/PrivacyInfo.xcprivacy @@ -0,0 +1,23 @@ + + + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPITypeReasons + + CA92.1 + + + + NSPrivacyTrackingDomains + + NSPrivacyTracking + + NSPrivacyCollectedDataTypes + + + diff --git a/Sources/ArcGISToolkit/Resources/ar.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/ar.lproj/Localizable.strings index 4a4891cc3..361aee87e 100755 --- a/Sources/ArcGISToolkit/Resources/ar.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/ar.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "تم تحديد %lld"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "مطلوب شهادة للوصول إلى المحتوى الموجود على %@."; + +/* A button to add new utility trace starting points. */ +"Add new" = "إضافة جديد"; + +/* A section header for advanced options. */ +"Advanced Options" = "خيارات متقدمة"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "جميع المواقع"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "ستفقد جميع مدخلات ونتائج التتبع."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "السماح"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "حدث خطأ أثناء تحميل الصورة: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "المرفقات"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "بيانات جدولية"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "المصادقة مطلوبة"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "إشارات مرجعية"; + +/* A label for a button to open the system file browser. */ +"Browse" = "استعراض"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "إلغاء الأمر"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "إلغاء تحديد نقطة البداية"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "الشهادة مطلوبة"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "تحذير الثقة في الشهادة"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "مسح كافة النتائج"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "لون"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "البوصلة، تتجه %lld درجة/درجات %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "متابعة"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "تعذر الوصول إلى ملف الشهادة."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "خطير: الشهادة المقدمة من \"%@\" غير موقعة من قبل مرجع مصدق موثوق."; + +/* A label for a button used to delete a utility network trace input component or result. */ "Delete" = "حذف"; + +/* A button to close the bookmark selection menu. */ +"Done" = "تم"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "تتعذر إضافة نقاط بداية مكررة."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "تعذر تحديد العنصر."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "خطأ"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "خطأ في استيراد الشهادة"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "خطأ في تحميل خريطة الأساس."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "تقييم التعبيرات المنبثقة"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "فشل في تعيين نقطة البداية"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "نتائج المعالم"; + +/* A field in a set of data contained in a popup. */ +"Field" = "حقل"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "الحقول"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "تصفية المرافق"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "تصفية المواقع"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "العثور على مكان أو عنوان"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "كسر بامتداد Edge"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "نتائج الدالة"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "وسائط"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "الوضع"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "الاسم"; + +/* A label in reference to a specific utility network. */ +"Network" = "شبكة"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "تتبع جديد"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "لا توجد إشارات مرجعية"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "لا توجد تكوينات متاحة."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "لم يتم العثور على تطابقات."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "لم يتم العثور على أية نتائج"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "لم يتم العثور على أنواع تتبع."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "لم يتم العثور على شبكات مرافق."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "لم يتم تحديد أي شيء"; + +/* A trace function output result was not provided. */ +"Not Available" = "غير متاح"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "معرف الكائن: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "موافق"; + +/* A label in reference to a credential password. */ +"Password" = "كلمة المرور"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "كلمة المرور مطلوبة"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "الرجاء إدخال كلمة مرور للشهادة المختارة."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "يرجى تعيين موقع بدء واحد على الأقل."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "يرجى تعيين موقعي بدء على الأقل."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "فشل تقييم النافذة المنبثقة: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "تكرار البحث هنا"; + +/* A label for a button to show utility network trace results. */ +"Results" = "النتائج"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "استعلام البحث"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "تحديد إشارة مرجعية"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "تحديد مرفق"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "المواقع"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "عدم تطابق الإسناد المكاني."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "نقاط البداية"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "اضغط على السطح لوضع المشهد"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "اضغط على الصورة لمزيد من المعلومات."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "تكوين طرفي"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "اختبار"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "لا تحتوي خريطة الأساس على إسناد مكاني."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "فشل تحميل خريطة الأساس لسبب غير معروف."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "تحتوي خريطة الأساس على إسناد مكاني غير متوافق مع الخريطة."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "لقد كان ملف الشهادة غير صالح أو كانت كلمة المرور غير صالحة."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "لقد كان ملف الشهادة غير صالح."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "لا تحتوي الخريطة على إسناد مكاني."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "لقد كانت كلمة المرور غير صالحة."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "تعذر الوصول إلى عنوان URL أو أنه لا يحتوي على بيانات الصورة."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "تتبع"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "تتبع %1$lld من %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "تكوين التتبع"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "المحاولة مرة أخرى"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "نوع الأصل بدون اسم"; + +/* A label in reference to a credential username. */ +"Username" = "اسم المستخدم"; + +/* A value in a set of data contained in a popup. */ +"Value" = "القيمة"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "يجب عليك تسجيل الدخول للوصول إلى \"%@\""; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "تكبير/تصغير إلى"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "تكبير/تصغير إلى الناتج"; + diff --git a/Sources/ArcGISToolkit/Resources/bg.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/bg.lproj/Localizable.strings new file mode 100644 index 000000000..40948ec05 --- /dev/null +++ b/Sources/ArcGISToolkit/Resources/bg.lproj/Localizable.strings @@ -0,0 +1,298 @@ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld избрани"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Изисква се сертификат за достъп до съдържание на %@."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Добавяне на нови"; + +/* A section header for advanced options. */ +"Advanced Options" = "Разширени oпции"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Всички сайтове"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Всички входни данни и резултати за проследявания ще бъдат изгубени."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Позволение"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Възникна грешка при зареждане на изображението: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Прикачени файлове"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Атрибути"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Изисква се автентикация"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Отметки"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Преглеждане"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Отказ"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Отмяна на избор на начална точка"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Изисква се сертификат"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Предупреждение за сертификат за доверие"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Изчистване на всички резултати"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Цвят"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Компас, посока на движение %lld градуса %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Продължение"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Няма достъп до файла със сертификата."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Внимание: сертификатът, предоставен от '%@', не е подписан от надежден орган."; + +/* A label for a button used to delete a utility network trace input component or result. */ +"Delete" = "Изтриване"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Готово"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Не могат да се добавят дублиращи се начални точки."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Невъзможно идентифициране на елемент."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Грешка"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Грешка при импортиране на сертификата"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Грешка при зареждане на базова карта."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Изчисляване на изрази в изскачащи прозорци"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Неуспешно задаване на начална точка"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Резултати на обект"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Поле"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Полета"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Филтриране на съоръжения"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Филтриране на сайтове"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Намиране на място или адрес"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Фракция на ръба"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Резултати от функция"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Медия"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Режим"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Име"; + +/* A label in reference to a specific utility network. */ +"Network" = "Мрежа"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Ново проследяване"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Няма отметки"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Няма налични конфигурации."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Няма намерени съвпадения."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Няма намерени резултати"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Няма намерени типове проследяване."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Няма намерени комунални мрежи."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Няма избрани"; + +/* A trace function output result was not provided. */ +"Not Available" = "Няма налични"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "ИД на обект: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "Добре"; + +/* A label in reference to a credential password. */ +"Password" = "Парола"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Изисква се парола"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Въведете парола за избрания сертификат."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Задайте поне 1 начално местоположение."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Задайте поне 2 начални местоположения."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "Неуспешна оценка на изскачащи прозорци: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Повторно търсене тук"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Резултати"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Заявка за търсене"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Избор на отметка"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Избор на съоръжение"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Сайтове"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Несъответствие на проекция."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Начални точки"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Докоснете повърхността, за да поставите сцената"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Натиснете върху изображението за допълнителна информация."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Конфигурация на терминал"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "тест"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "Базовата карта не съдържа проекция."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "Неуспешно зареждане на базовата карта по неизвестна причина."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "Проекцията на базовата карта е несъвместима с картата."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "Невалиден файл със сертификат или невалидна парола."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "Файлът със сертификата е невалиден."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "Картата не съдържа проекция."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "Паролата е невалидна."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "URL адресът не може да бъде достигнат или не съдържа данни за изображения."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Проследяване"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Проследяване %1$lld от %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Конфигуриране на проследяване"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Опитайте отново"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Ненаименуван вид актив"; + +/* A label in reference to a credential username. */ +"Username" = "Потребителско име"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Стойност"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Трябва да се впишете, за да получите достъп '%@'"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Приближаване до"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Приближаване към резултата"; + diff --git a/Sources/ArcGISToolkit/Resources/bs.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/bs.lproj/Localizable.strings new file mode 100644 index 000000000..197902b62 --- /dev/null +++ b/Sources/ArcGISToolkit/Resources/bs.lproj/Localizable.strings @@ -0,0 +1,298 @@ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld odabrano"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Potreban je certifikat za pristup sadržaju na %@."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Dodaj novi"; + +/* A section header for advanced options. */ +"Advanced Options" = "Napredne opcije"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Sva mjesta"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Svi unosi i rezultati praćenja bit će izgubljeni."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Dopusti"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Došlo je do pogreške prilikom učitavanja slike: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Privici"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Atributi"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Potrebna je provjera autentičnosti"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Knjižne oznake"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Pregledaj"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Odustani"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Poništi odabir početne točke"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Potreban certifikat"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Upozorenje o povjerenju certifikata"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Očisti sve rezultate"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Boja"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Kompas, smjer %lld stupnjeva %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Nastavak"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Nije moguće pristupiti datoteci certifikata."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Opasno: Certifikat koji daje '%@' nije potpisan od strane pouzdanog autoriteta."; + +/* A label for a button used to delete a utility network trace input component or result. */ +"Delete" = "Izbriši"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Gotovo"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Dvostruke početne točke ne mogu se dodati."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Element nije bilo moguće identificirati."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Pogreška"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Pogreška pri uvozu certifikata"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Pogreška pri učitavanju kartografske podloge."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Procjena skočnih izraza"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Postavljanje početne točke nije uspjelo"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Rezultati geoobjekata"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Polje"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Polja"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Filtriraj mjesta usluge"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Filtriraj mjesta"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Pronađi mjesto ili adresu"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Frakcija uz rub"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Rezultati funkcije"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Mediji"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Način"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Naziv"; + +/* A label in reference to a specific utility network. */ +"Network" = "Mreža"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Novo praćenje"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Nema knjižnih oznaka"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Nema dostupnih konfiguracija."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Nema podudaranja."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Nema rezultata"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Nema pronađenih vrsta praćenja."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Nisu pronađene uslu\\ne mreže."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Ništa nije odabrano"; + +/* A trace function output result was not provided. */ +"Not Available" = "Nije dostupno"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "ID objekta: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "U redu"; + +/* A label in reference to a credential password. */ +"Password" = "Lozinka"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Potrebna lozinka"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Unesite lozinku za odabrani certifikat."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Postavite barem 1 početnu lokaciju."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Postavite barem 2 početne lokacije."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "Evaluacija skočnog prozora nije uspjela: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Ponovi pretraživanje ovdje"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Rezultati"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Upit za pretraživanje"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Odaberi knjižnu oznaku"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Odaberi mjesto usluge"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Web-mjesta"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Nepodudaranje prostorne reference."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Početne točke"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Dodirnite površinu za postavljanje scene"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Dodirnite sliku za više informacija."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Konfiguracija terminala"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "test"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "Kartografska podloga nema prostornu referencu"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "Učitavanje kartografske podloge nije uspjelo iz nepoznatog razloga."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "Kartografska podloga ima prostornu referencu koja nije kompatibilna s kartom."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "Datoteka certifikata ili lozinka nisu važeći."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "Datoteka certifikata nije važeća."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "Karta nema prostornu referencu"; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "Lozinka je nevažeća."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "Nije bilo moguće doći do URL-a ili nije sadržavao slikovne podatke."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Prati"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Prati %1$lld od %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Konfiguracija praćenja"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Pokušaj ponovno"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Neimenovana vrsta sredstva"; + +/* A label in reference to a credential username. */ +"Username" = "Korisničko ime"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Vrijednost"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Morate se prijaviti za pristup '%@'"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Povećaj na"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Povećaj na rezultat"; + diff --git a/Sources/ArcGISToolkit/Resources/ca.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/ca.lproj/Localizable.strings index 0eafc4154..008056f4a 100644 --- a/Sources/ArcGISToolkit/Resources/ca.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/ca.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld seleccionats"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Cal un certificat per accedir al contingut a %@."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Afegeix-ne un de nou"; + +/* A section header for advanced options. */ +"Advanced Options" = "Opcions avançades"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Tots els llocs"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Es perdran totes les entrades i els resultats del traçat."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Permet"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "S'ha produït un error en carregar la imatge: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Fitxers adjunts"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Atributs"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Autenticació obligatòria"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Marcadors"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Examina"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Cancel·la"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Cancel·la la selecció del punt d'inici"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Certificat obligatori"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Avís de confiança del certificat"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Esborra tots els resultats"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Color"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Brúixola, rumb %lld graus %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Continua"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "No s'ha pogut accedir al fitxer del certificat."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Perillós: el certificat proporcionat per \"%@\" no està firmat per una autoritat de confiança."; + +/* A label for a button used to delete a utility network trace input component or result. */ "Delete" = "Suprimeix"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Fet"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "No es poden afegir punts d'inici duplicats."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "No s'ha pogut identificar l'element."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Error"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Error en importar el certificat"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Error en carregar el mapa de base."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "S'estan avaluant les expressions de la finestra emergent"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "No s'ha pogut definir el punt d'inici"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Resultats d'entitats"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Camp"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Camps"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Filtra les instal·lacions"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Filtra els llocs"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Cerca un lloc o una adreça"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Fracció al llarg de la vora"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Resultats de la funció"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Contingut multimèdia"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Mode"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Nom"; + +/* A label in reference to a specific utility network. */ +"Network" = "Xarxa"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Traçat nou"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "No hi ha cap marcador"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "No hi ha cap configuració disponible."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "No s'ha trobat cap coincidència."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "No s'ha trobat cap resultat"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "No s'ha trobat cap tipus de traçat."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "No s'ha trobat cap xarxa de serveis."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Cap opció seleccionada"; + +/* A trace function output result was not provided. */ +"Not Available" = "No disponible"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "ID d'objecte: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "D'acord"; + +/* A label in reference to a credential password. */ +"Password" = "Contrasenya"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "La contrasenya és obligatòria"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Introduïu una contrasenya per al certificat seleccionat"; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Definiu almenys 1 ubicació d'inici."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Definiu almenys 2 ubicacions d'inici."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "No s'ha pogut avaluar la finestra emergent: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Repeteix la cerca aquí"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Resultats"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Consulta de cerca"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Seleccioneu un marcador"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Seleccioneu una instal·lació"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Llocs"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Discrepància de la referència espacial."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Punts d'inici"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Toqueu una superfície per col·locar l'escena"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Toqueu la imatge per obtenir més informació."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Configuració del terminal"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "prova"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "El mapa de base no té cap referència espacial."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "No s'ha pogut carregar el mapa de base per un motiu desconegut."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "El mapa de base té una referència espacial que no és compatible amb el mapa."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "El fitxer de certificat o la contrasenya no eren vàlids."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "El fitxer de certificat no era vàlid."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "El mapa no té una referència espacial."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "La contrasenya no era vàlida."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "No s'ha pogut accedir a l'URL o l'URL no contenia dades d'imatge."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Traçat"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Traçat %1$lld de %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Configuració del traçat"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Torna-ho a provar"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Tipus d'actiu sense nom"; + +/* A label in reference to a credential username. */ +"Username" = "Nom d'usuari"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Valor"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Heu d'iniciar la sessió per accedir a \"%@\""; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Aplica el zoom a"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Aplica el zoom als resultats"; + diff --git a/Sources/ArcGISToolkit/Resources/cs.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/cs.lproj/Localizable.strings index 8e11accbf..b68e1e21c 100755 --- a/Sources/ArcGISToolkit/Resources/cs.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/cs.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ -"Delete" = "Smazat"; +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld vybráno"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Pro přístup k obsahu na %@ je vyžadován certifikát."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Přidat nový kontakt"; + +/* A section header for advanced options. */ +"Advanced Options" = "Pokročilé možnosti"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Všechna místa"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Všechny vstupy a výsledky trasování budou ztraceny."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Povolit"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Došlo k chybě při načítání obrázku: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Přílohy"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Atributy"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Požadováno ověření"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Záložky"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Procházet"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Storno"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Zrušit výběr výchozího bodu"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Vyžadován certifikát"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Upozornění na důvěryhodnost certifikátu"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Vymazat všechny výsledky"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Barva"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Kompas, směr %lld stupňů %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Pokračovat"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Nepodařilo se získat přístup k souboru certifikátu."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Nebezpečné: Certifikát poskytnutý ‚%@‘ není podepsán důvěryhodnou autoritou."; + +/* A label for a button used to delete a utility network trace input component or result. */ +"Delete" = "Odstranit"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Hotovo"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Duplicitní výchozí body nelze přidat."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Element se nepodařilo identifikovat."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Chyba"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Chyba při importu certifikátu"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Chyba při načítání podkladové mapy."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Vyhodnocování výrazů vyskakovacího okna"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Nepodařilo se nastavit výchozí bod"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Výsledky prvků"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Pole"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Pole"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Filtrovat zařízení"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Filtrovat místa"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Vyhledat místo nebo adresu"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Zlomek podél hrany"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Výsledky funkce"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Multimédia"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Režim"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Název"; + +/* A label in reference to a specific utility network. */ +"Network" = "Síť"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Nové trasování"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Žádné záložky"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Žádné konfigurace k dispozici."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Nebyly nalezeny žádné shody."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Nebyly nalezeny žádné výsledky"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Nebyly nalezeny žádné typy trasování."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Nebyly nalezeny žádné inženýrské sítě."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Nevybráno nic"; + +/* A trace function output result was not provided. */ +"Not Available" = "Není k dispozici"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "ID objektu: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "OK"; + +/* A label in reference to a credential password. */ +"Password" = "Heslo"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Je vyžadováno heslo"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Zadejte prosím heslo pro zvolený certifikát."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Nastavte alespoň 1 výchozí umístění."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Nastavte alespoň 2 výchozí umístění."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "Vyhodnocení vyskakovacího okna se nezdařilo: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Opakujte hledání zde"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Výsledky"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Vyhledávací dotaz"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Vybrat záložku"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Vybrat zařízení"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Místa"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Nesprávný souřadnicový systém."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Výchozí body"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Scénu umístěte klepnutím na povrch"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Klepnutím na obrázek získáte další informace."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Konfigurace terminálu"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "test"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "Podkladová mapa nemá zadán souřadnicový systém."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "Podkladovou mapu se z neznámého důvodu nepodařilo načíst."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "Podkladová mapa má zadán souřadnicový systém, který není kompatibilní s mapou."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "Soubor certifikátu nebo heslo je neplatné."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "Soubor certifikátu je neplatný."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "Mapa nemá zadán souřadnicový systém."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "Heslo je neplatné."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "Adresa URL není dostupná nebo neobsahuje obrazová data."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Trasování"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Trasování %1$lld z %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Konfigurace trasování"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Zkusit znovu"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Nepojmenovaný typ majetku"; + +/* A label in reference to a credential username. */ +"Username" = "Uživatelské jméno"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Hodnota"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Pro přístup k ‚%@‘ se musíte přihlásit"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Přiblížit na"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Příblížit na výsledek"; + diff --git a/Sources/ArcGISToolkit/Resources/da.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/da.lproj/Localizable.strings index 72262db89..8dbdef741 100755 --- a/Sources/ArcGISToolkit/Resources/da.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/da.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld valgt"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Et certifikat er påkrævet for at få adgang til indhold på %@."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Tilføj ny"; + +/* A section header for advanced options. */ +"Advanced Options" = "Avancerede indstillinger"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Alle websteder"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Alle sporings-input og -resultater vil gå tabt."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Tillad"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Der opstod en fejl under indlæsning af billedet: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Vedhæftninger"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Atributter"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Godkendelse påkrævet"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Bogmærker"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Gennemse"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Annullér"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Annullér valg af startpunkt"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Certifikat påkrævet"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Der er et problem med dette sikkerhedscertifikat"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Ryd alle resultater"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Farve"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Kompas, kurs %lld grader %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Fortsæt"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Kunne ikke få adgang til certifikatfilen."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Advarsel: Certifikatet angivet af '%@' er ikke signeret af en pålidelig myndighed."; + +/* A label for a button used to delete a utility network trace input component or result. */ "Delete" = "Slet"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Udført"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Dobbelt forekommende startpunkter kan ikke tilføjes."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Element kunne ikke identificeres."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Fejl"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Fejl ved import certifikat"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Fejl under indlæsning af baggrundskort."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Evaluering af pop-up-udtryk."; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Kunne ikke indstille startpunkt"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Objektresultater"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Felt"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Felter"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Filtrer faciliteter"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Filtrer websteder"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Find sted eller adresse"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Fraktion langs kanten"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Funktionsresultater"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Medier"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Tilstand"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Navn"; + +/* A label in reference to a specific utility network. */ +"Network" = "Netværk"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Ny sporing"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Ingen bogmærker"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Ingen konfigurationer tilgængelige"; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Ingen matches fundet."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Der blev ikke fundet nogen resultater"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Ingen sporingstyper fundet"; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Ingen forsyningsnetværk fundet."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Ingen valgt"; + +/* A trace function output result was not provided. */ +"Not Available" = "Ikke tilgængelig"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "Objekt-id: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "OK"; + +/* A label in reference to a credential password. */ +"Password" = "Adgangskode"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Adgangskode kræves"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Indtast adgangskode til det valgte certifikat."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Indstil mindst 1 startposition."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Indstil mindst 2 startpositioner."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "Evaluering af pop-up mislykkedes: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Gentag søgning her"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Resultater"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Søgeforespørgsel"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Vælg et bogmærke"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Vælg en facilitet"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Websteder"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Uoverensstemmelse i spatial reference."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Startpunkter"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Tryk på en overflade for at placere scenen"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Tryk på billedet for mere information."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Konfiguration af terminal"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "test"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "Baggrundskortet har ikke en spatial reference."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "Baggrundskortet kunne ikke indlæses af ukendt årsag."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "Baggrundskortet har en spatial reference, der er inkompatibel med kortet."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "Certifikatfilen eller adgangskoden var ugyldig."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "Certifikatfilen var ugyldig."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "Kortet har ikke en spatial reference."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "Adgangskoden var ugyldig."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "URL kunne ikke nås eller indeholdt ingen billeddata."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Spor"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Spor %1$lld af %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Sporingskonfiguration"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Prøv igen"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Ikke-navngivet aktivtype"; + +/* A label in reference to a credential username. */ +"Username" = "Brugernavn"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Værdi"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Du skal logge ind for at få adgang til '%@'"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Zoom til"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Zoom til resultat"; + diff --git a/Sources/ArcGISToolkit/Resources/de.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/de.lproj/Localizable.strings index 3ae6cb50b..53b74222f 100755 --- a/Sources/ArcGISToolkit/Resources/de.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/de.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld ausgewählt"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Für den Zugriff auf Inhalte in %@ ist ein Zertifikat erforderlich."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Neue hinzufügen"; + +/* A section header for advanced options. */ +"Advanced Options" = "Erweiterte Optionen"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Alle Sites"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Alle Verfolgungseingaben und -ergebnisse gehen verloren."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Zulassen"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Beim Laden des Bildes ist ein Fehler aufgetreten: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Anlagen"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Attribute"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Authentifizierung erforderlich"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Lesezeichen"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Durchsuchen"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Abbrechen"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Startpunkt-Auswahl abbrechen"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Zertifikat erforderlich"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Warnung zur Vertrauenswürdigkeit des Zertifikats"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Alle Ergebnisse löschen"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Farbe"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Kompass, Kurs %lld Grad %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Weiter"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Zugriff auf die Zertifikatsdatei nicht möglich."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Warnung: Das von \"%@\" bereitgestellte Zertifikat wurde nicht von einer vertrauenswürdigen Stelle unterzeichnet."; + +/* A label for a button used to delete a utility network trace input component or result. */ "Delete" = "Löschen"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Fertig"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Doppelte Startpunkte können nicht hinzugefügt werden."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Das Element konnte nicht identifiziert werden."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Fehler"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Fehler beim Importieren des Zertifikats"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Fehler beim Laden der Grundkarte."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Pop-up-Ausdrücke werden ausgewertet"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Fehler beim Festlegen des Startpunkts"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Feature-Ergebnisse"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Feld"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Felder"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Einrichtungen filtern"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Sites filtern"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Ort oder Adresse suchen"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Bruch entlang der Kante"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Funktionsergebnisse"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Medien"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Modalwert"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Name"; + +/* A label in reference to a specific utility network. */ +"Network" = "Netzwerk"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Neue Netzverfolgung"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Keine Lesezeichen"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Keine Konfigurationen verfügbar."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Keine Übereinstimmungen gefunden."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Keine Ergebnisse gefunden"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Keine Verfolgungstypen gefunden"; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Keine Versorgungsnetze gefunden"; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Keine(s) ausgewählt"; + +/* A trace function output result was not provided. */ +"Not Available" = "Nicht verfügbar"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "Objekt-ID: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "OK"; + +/* A label in reference to a credential password. */ +"Password" = "Kennwort"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Kennwort erforderlich"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Geben Sie ein Kennwort für das ausgewählte Zertifikat ein."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Legen Sie mindestens 1 Startposition fest."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Legen Sie mindestens 2 Startpositionen fest."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "Pop-up-Auswertung fehlgeschlagen: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Suche hier wiederholen"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Ergebnisse"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Suchabfrage"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Lesezeichen auswählen"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Einrichtung auswählen"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Sites"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Nicht übereinstimmender Raumbezug."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Startpunkte"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Auf eine Oberfläche tippen, um die Szene zu platzieren"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Für weitere Informationen auf das Bild tippen."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Anschlusspunktkonfiguration"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "Test"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "Die Grundkarte weist keinen Raumbezug auf."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "Die Grundkarte konnte aus nicht bekannten Gründen nicht geladen werden."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "Der Raumbezug der Grundkarte ist nicht mit der Karte kompatibel."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "Die Zertifikatdatei oder das Kennwort war ungültig."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "Die Zertifikatdatei war ungültig."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "Die Karte weist keinen Raumbezug auf."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "Das Kennwort war ungültig."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "Die URL war nicht erreichbar oder beinhaltete keine Bilddaten."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Verfolgung"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "%1$lld von %2$lld verfolgen"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Verfolgungskonfiguration"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Erneut versuchen"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Unbenannter Asset-Typ"; + +/* A label in reference to a credential username. */ +"Username" = "Benutzername"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Wert"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Sie müssen sich anmelden, um auf \"%@\" zugreifen zu können."; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Zoomen auf"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Auf Ergebnis zoomen"; + diff --git a/Sources/ArcGISToolkit/Resources/el.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/el.lproj/Localizable.strings index d43bf6d48..175989824 100755 --- a/Sources/ArcGISToolkit/Resources/el.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/el.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld επιλεγμένο"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Απαιτείται πιστοποιητικό για την πρόσβαση σε περιεχόμενο στο %@."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Προσθήκη νέου"; + +/* A section header for advanced options. */ +"Advanced Options" = "Επιλογές για προχωρημένους"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Όλα τα sites"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Όλες οι εισαγωγές ιχνών και αποτελεσμάτων θα χαθούν."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Να επιτραπεί."; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Παρουσιάστηκε σφάλμα κατά τη φόρτωση της εικόνας: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Συνημμένα"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Γνωρίσματα"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Απαιτείται Έλεγχος Ταυτότητας"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Σελιδοδείκτες"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Περιήγηση για αναζήτηση"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Ακύρωση"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Ακύρωση επιλογής σημείου έναρξης"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Απαιτείται Πιστοποιητικό"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Προειδοποίηση Αξιοπιστίας Πιστοποιητικού"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Απαλοιφή όλων των αποτελεσμάτων"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Χρώμα"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Πυξίδα, πορεία %lld μοίρες %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Συνέχεια"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Η πρόσβαση στο αρχείο του πιστοποιητικού δεν ήταν δυνατή."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Κίνδυνος: Το παρεχόμενο πιστοποιητικό από το '%@' δεν έχει υπογραφεί από αξιόπιστη αρχή."; + +/* A label for a button used to delete a utility network trace input component or result. */ "Delete" = "Διαγραφή"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Τέλος"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Δεν μπορούν να προστεθούν διπλότυπα σημεία έναρξης."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Δεν ήταν δυνατή η αναγνώριση του αντικειμένου."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Σφάλμα"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Σφάλμα κατά την εισαγωγή του πιστοποιητικού"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Σφάλμα κατά τη φόρτωση υποβάθρου."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Αξιολόγηση αναδυόμενων εκφράσεων"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Αδυναμία προσδιορισμού σημείου έναρξης"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Αποτελέσματα Στοιχείου"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Πεδίο"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Πεδία"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Φιλτράρισμα εγκαταστάσεων"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Φιλτράρισμα sites"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Αναζήτηση τόπου ή διεύθυνσης"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Κλάσμα κατά μήκος της ακμής"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Αποτελέσματα Λειτουργίας"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Πολυμέσα"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Λειτουργία"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Όνομα"; + +/* A label in reference to a specific utility network. */ +"Network" = "Δίκτυο"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Νέα ιχνηλάτηση"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Δεν υπάρχουν σελιδοδείκτες"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Δεν υπάρχουν διαθέσιμες παραμετροποιήσεις."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Δεν βρέθηκαν αντιστοιχίσεις."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Δεν βρέθηκαν αποτελέσματα"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Δεν βρέθηκαν τύποι ιχνηλάτησης"; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Δεν βρέθηκαν utility networks."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Καμία επιλογή"; + +/* A trace function output result was not provided. */ +"Not Available" = "Μη διαθέσιμο"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "Αναγνωριστικό αντικειμένου: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "OK"; + +/* A label in reference to a credential password. */ +"Password" = "Κωδικός πρόσβασης"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Απαιτείται κωδικός πρόσβασης"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Πληκτρολογήστε ξανά τον κωδικό πρόσβασης για το επιλεγμένο πιστοποιητικό."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Καθορίστε τουλάχιστον μια τοποθεσία έναρξης."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Καθορίστε τουλάχιστον δυο τοποθεσίες έναρξης."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "Αποτυχία αξιολόγησης αναδυόμενων: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Επανάληψη Αναζήτησης Εδώ"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Αποτελέσματα"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Ερώτημα Αναζήτησης"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Επιλογή Σελιδοδείκτη"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Επιλέξτε εγκατάσταση"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Ιστότοποι"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Αναντιστοιχία χωρικής αναφοράς."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Σημεία Έναρξης"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Πατήστε σε μια επιφάνεια για να τοποθετήσετε 3D προβολή"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Πατήστε στην εικόνα για περισσότερες πληροφορίες."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Παραμετροποίηση Τερματικού"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "test"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "Το υπόβαθρο δεν έχει χωρική αναφορά."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "Απέτυχε η φόρτωση του υποβάθρου για άγνωστο λόγο."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "Η χωρική αναφορά του υποβάθρου δεν είναι συμβατή με το χάρτη."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "Το αρχείο του πιστοποιητικού ή ο κωδικός πρόσβασης ήταν άκυρος."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "Το αρχείο του πιστοποιητικού ήταν άκυρο."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "Ο χάρτης δεν έχει χωρική αναφορά."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "Ο κωδικός πρόσβασης ήταν άκυρος."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "Η διεύθυνση URL δεν ήταν προσβάσιμη ή δεν περιείχε δεδομένα εικόνας."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Ιχνηλάτηση"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Ιχνηλάτηση %1$lld από %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Παραμετροποίηση Ιχνηλάτησης"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Δοκιμάστε Ξανά"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Τύπος Στοιχείου Χωρίς Όνομα"; + +/* A label in reference to a credential username. */ +"Username" = "Όνομα χρήστη"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Αξία"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Χρειάζεται να πραγματοποιήσετε είσοδο για να αποκτήσετε πρόσβαση '%@'"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Εστίαση σε"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Εστίαση στο αποτέλεσμα"; + diff --git a/Sources/ArcGISToolkit/Resources/en.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/en.lproj/Localizable.strings index 4c776cf67..22df5404c 100644 --- a/Sources/ArcGISToolkit/Resources/en.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/en.lproj/Localizable.strings @@ -11,55 +11,49 @@ content on a remote host. The variable is the host that prompted the challenge. /* A section header for advanced options. */ "Advanced Options" = "Advanced Options"; -/* A button allowing users to view a list of all sites defined in a floor aware map. */ +/* A reference to all of the sites defined in a floor aware map. */ "All sites" = "All sites"; -/* No comment provided by engineer. */ -"All Sites" = "All Sites"; - /* A message describing the outcome of clearing all utility network trace results. */ "All the trace inputs and results will be lost." = "All the trace inputs and results will be lost."; /* A button indicating the user accepts a potentially dangerous action. */ "Allow" = "Allow"; -/* No comment provided by engineer. */ +/* A fallback message to display when an image cannot be loaded. */ "An error occurred loading the image: %@." = "An error occurred loading the image: %@."; -/* No comment provided by engineer. */ +/* A label in reference to attachments in a popup. */ "Attachments" = "Attachments"; -/* No comment provided by engineer. */ +/* A label in reference to the attributes of a geo element. */ "Attributes" = "Attributes"; -/* No comment provided by engineer. */ +/* A label indicating authentication is required to proceed. */ "Authentication Required" = "Authentication Required"; -/* No comment provided by engineer. */ +/* A label in reference to bookmarks contained in a map or scene. */ "Bookmarks" = "Bookmarks"; -/* No comment provided by engineer. */ -"Browse For Certificate" = "Browse For Certificate"; +/* A label for a button to open the system file browser. */ +"Browse" = "Browse"; -/* No comment provided by engineer. */ +/* A label for a button to cancel an operation. */ "Cancel" = "Cancel"; -/* No comment provided by engineer. */ +/* A label for a button to cancel the starting point selection operation. */ "Cancel starting point selection" = "Cancel starting point selection"; -/* No comment provided by engineer. */ +/* A label indicating that a certificate is required to proceed. */ "Certificate Required" = "Certificate Required"; /* A label indicating that the remote host's certificate is not trusted. */ "Certificate Trust Warning" = "Certificate Trust Warning"; -/* No comment provided by engineer. */ -"Clear All Results" = "Clear All Results"; - -/* No comment provided by engineer. */ -"Clear all results?" = "Clear all results?"; +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Clear all results"; -/* No comment provided by engineer. */ +/* A label in reference to the color used to display utility trace result graphics. */ "Color" = "Color"; /* An compass description to be read by a screen reader describing the @@ -68,205 +62,232 @@ second being a corresponding cardinal direction (north, northeast, east, etc.). */ "Compass, heading %lld degrees %@" = "Compass, heading %lld degrees %@"; -/* No comment provided by engineer. */ +/* A label for a button used to continue the authentication operation. */ "Continue" = "Continue"; -/* No comment provided by engineer. */ +/* A label indicating a certificate file was inaccessible. */ "Could not access the certificate file." = "Could not access the certificate file."; /* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ "Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Dangerous: The certificate provided by '%@' is not signed by a trusted authority."; -/* No comment provided by engineer. */ +/* A label for a button used to delete a utility network trace input component or result. */ "Delete" = "Delete"; /* A button to close the bookmark selection menu. */ "Done" = "Done"; -/* No comment provided by engineer. */ +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ "Duplicate starting points cannot be added." = "Duplicate starting points cannot be added."; -/* No comment provided by engineer. */ +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ "Element could not be identified." = "Element could not be identified."; -/* No comment provided by engineer. */ +/* A label in reference to an error that occurred during a utility network trace. */ "Error" = "Error"; -/* No comment provided by engineer. */ +/* A message indicating that some error occurred while importing a chosen +network certificate. */ "Error importing certificate" = "Error importing certificate"; /* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ "Error loading basemap." = "Error loading basemap."; -/* No comment provided by engineer. */ -"Evaluating popup expressions…" = "Evaluating popup expressions…"; +/* An error message shown when a GeoModel failed to load. +The variable provides additional data. */ +"Error loading bookmarks: %@" = "Error loading bookmarks: %@"; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Evaluating popup expressions"; -/* No comment provided by engineer. */ +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ "Failed to set starting point" = "Failed to set starting point"; -/* No comment provided by engineer. */ +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ "Feature Results" = "Feature Results"; -/* No comment provided by engineer. */ +/* A field in a set of data contained in a popup. */ "Field" = "Field"; -/* No comment provided by engineer. */ +/* A label in reference to fields in a set of data contained in a popup. */ "Fields" = "Fields"; -/* A search field allowing user to filter a list of facilities by name. */ +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ "Filter facilities" = "Filter facilities"; -/* A search field allowing user to filter a list of sites by name. */ +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ "Filter sites" = "Filter sites"; -/* No comment provided by engineer. */ +/* A hint for the user on what to search for in a search bar. */ "Find a place or address" = "Find a place or address"; -/* No comment provided by engineer. */ +/* A label in reference to a fractional distance along an edge style utility network element. */ "Fraction Along Edge" = "Fraction Along Edge"; -/* No comment provided by engineer. */ +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ "Function Results" = "Function Results"; -/* No comment provided by engineer. */ +/* A label in reference to media elements contained within a popup. */ "Media" = "Media"; -/* No comment provided by engineer. */ +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ "Mode" = "Mode"; -/* No comment provided by engineer. */ +/* A label in reference to the user defined name for an individual utility network trace. */ "Name" = "Name"; -/* No comment provided by engineer. */ +/* A label in reference to a specific utility network. */ "Network" = "Network"; -/* No comment provided by engineer. */ +/* A label for a button to show new utility network trace configuration options. */ "New trace" = "New trace"; -/* No comment provided by engineer. */ +/* A label indicating that no bookmarks are available for selection. */ "No bookmarks" = "No bookmarks"; -/* No comment provided by engineer. */ -"No configurations available" = "No configurations available"; +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "No configurations available."; -/* No comment provided by engineer. */ -"No matches found" = "No matches found"; +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "No matches found."; /* A message to show when there are no results or suggestions. */ "No results found" = "No results found"; -/* No comment provided by engineer. */ +/* A label indicating that no utility named trace configurations are available. */ "No trace types found." = "No trace types found."; -/* No comment provided by engineer. */ +/* A label indicating that no utility networks are available. */ "No utility networks found." = "No utility networks found."; -/* No comment provided by engineer. */ +/* A label indicating that no utility network trace configuration has been selected. */ "None selected" = "None selected"; -/* A trace function output result is not available. */ +/* A trace function output result was not provided. */ "Not Available" = "Not Available"; /* A string identifying a utility network object. */ "Object ID: %@" = "Object ID: %@"; -/* No comment provided by engineer. */ +/* A label for button to proceed with an operation. */ "OK" = "OK"; -/* No comment provided by engineer. */ +/* A label in reference to a credential password. */ "Password" = "Password"; -/* No comment provided by engineer. */ +/* A label indicating that a password is required to proceed with an operation. */ "Password Required" = "Password Required"; -/* No comment provided by engineer. */ +/* A label requesting the password associated with the chosen certificate. */ "Please enter a password for the chosen certificate." = "Please enter a password for the chosen certificate."; -/* No comment provided by engineer. */ +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ "Please set at least 1 starting location." = "Please set at least 1 starting location."; -/* No comment provided by engineer. */ +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ "Please set at least 2 starting locations." = "Please set at least 2 starting locations."; /* An error message shown when a popup cannot be displayed. The variable provides additional data. */ "Popup evaluation failed: %@" = "Popup evaluation failed: %@"; -/* A button to show when a user has panned the map away from the -original search location. */ +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ "Repeat Search Here" = "Repeat Search Here"; -/* No comment provided by engineer. */ +/* A label for a button to show utility network trace results. */ "Results" = "Results"; -/* No comment provided by engineer. */ +/* A label in reference to a search query entered by the user. */ "Search Query" = "Search Query"; -/* No comment provided by engineer. */ +/* A label prompting the user to make a selection from the available bookmarks. */ "Select a bookmark" = "Select a bookmark"; -/* No comment provided by engineer. */ +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ "Select a facility" = "Select a facility"; -/* No comment provided by engineer. */ +/* A label in reference to all of the sites in a floor-aware map or scene. */ "Sites" = "Sites"; -/* No comment provided by engineer. */ +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ "Spatial reference mismatch." = "Spatial reference mismatch."; -/* No comment provided by engineer. */ +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ "Starting Points" = "Starting Points"; -/* No comment provided by engineer. */ +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Tap a surface to place the scene"; + +/* A label indicating that tapping an image will reveal +additional information. */ "Tap on the image for more information." = "Tap on the image for more information."; -/* No comment provided by engineer. */ +/* A label in reference to the chosen terminal configuration of a utility network element. */ "Terminal Configuration" = "Terminal Configuration"; -/* No comment provided by engineer. */ +/* A label for development purposes only. This is not user visible. */ +"test" = "test"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ "The basemap does not have a spatial reference." = "The basemap does not have a spatial reference."; /* An error to be displayed when a basemap chosen from the basemap gallery fails to load for an unknown reason. */ "The basemap failed to load for an unknown reason." = "The basemap failed to load for an unknown reason."; -/* No comment provided by engineer. */ +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ "The basemap has a spatial reference that is incompatible with the map." = "The basemap has a spatial reference that is incompatible with the map."; -/* No comment provided by engineer. */ +/* A label indicating the chosen file or given password was invalid. */ "The certificate file or password was invalid." = "The certificate file or password was invalid."; -/* No comment provided by engineer. */ +/* A label indicating the chosen file was invalid. */ "The certificate file was invalid." = "The certificate file was invalid."; -/* No comment provided by engineer. */ +/* A label indicating the map doesn't have a spatial reference. */ "The map does not have a spatial reference." = "The map does not have a spatial reference."; -/* No comment provided by engineer. */ +/* A label indicating the given password was invalid. */ "The password was invalid." = "The password was invalid."; /* Description of error thrown when a remote image could not be loaded. */ -"The URL could not be reached or did not contain image data" = "The URL could not be reached or did not contain image data"; +"The URL could not be reached or did not contain image data." = "The URL could not be reached or did not contain image data."; -/* No comment provided by engineer. */ +/* A label for a button to begin a utility network trace operation. */ "Trace" = "Trace"; /* A label indicating the index of the trace being viewed out of the total number of traces completed. */ -"Trace %lld of %lld" = "Trace %lld of %lld"; +"Trace %1$lld of %2$lld" = "Trace %1$lld of %2$lld"; -/* No comment provided by engineer. */ +/* A label in reference to a utility network trace configuration. */ "Trace Configuration" = "Trace Configuration"; -/* No comment provided by engineer. */ +/* A label for a button allowing the user to retry an operation. */ "Try Again" = "Try Again"; /* A label to use in place of a utility element asset type name. */ "Unnamed Asset Type" = "Unnamed Asset Type"; -/* No comment provided by engineer. */ +/* A label in reference to a credential username. */ "Username" = "Username"; -/* No comment provided by engineer. */ +/* A value in a set of data contained in a popup. */ "Value" = "Value"; /* A label explaining that credentials are required to authenticate with specified host. diff --git a/Sources/ArcGISToolkit/Resources/es.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/es.lproj/Localizable.strings index dc7897dac..057280cb8 100644 --- a/Sources/ArcGISToolkit/Resources/es.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/es.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld seleccionados"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Se requiere un certificado para acceder a contenido en %@."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Agregar nuevo"; + +/* A section header for advanced options. */ +"Advanced Options" = "Opciones avanzadas"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Todos los sitios"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Se perderán todas las entradas y los resultados del trazado."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Permitir"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Se ha producido un error al cargar la imagen: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Adjuntos"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Atributos"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Autenticación requerida"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Marcadores"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Examinar"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Cancelar"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Cancelar la selección del punto de partida"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Se requiere un certificado"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Advertencia de confianza del certificado"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Borrar todos los resultados"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Color"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Brújula, encabezado %lld grados %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Continuar"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "No se ha podido acceder al archivo del certificado."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Peligroso: el certificado proporcionado por '%@' no está firmado por una autoridad de confianza."; + +/* A label for a button used to delete a utility network trace input component or result. */ "Delete" = "Eliminar"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Listo"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "No es posible agregar puntos de partida duplicados."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "No se ha podido identificar el elemento."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Error"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Error al importar el certificado"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Error al cargar el mapa base."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Evaluación de expresiones emergentes"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Error al establecer el punto de partida"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Resultados de entidad"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Campo"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Campos"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Filtrar instalaciones"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Filtrar emplazamientos"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Buscar lugar o dirección"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Fracción a lo largo del borde"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Resultados de la función"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Contenido multimedia"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Modo"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Nombre"; + +/* A label in reference to a specific utility network. */ +"Network" = "Red"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Nuevo trazado"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Sin marcadores"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Hay configuraciones disponibles."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "No se han encontrado coincidencias."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "No se encontraron resultados"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "No se han encontrado tipos de trazado."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "No se han encontrado redes de servicios públicos."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Nada seleccionado"; + +/* A trace function output result was not provided. */ +"Not Available" = "No disponible"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "Id. de objeto: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "Aceptar"; + +/* A label in reference to a credential password. */ +"Password" = "Contraseña"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Se requiere contraseña"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Introduzca una contraseña para el certificado elegido."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Establezca al menos 1 ubicación de partida."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Establezca al menos 2 ubicaciones de partida."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "Error en la evaluación de la ventana emergente: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Repetir la búsqueda aquí"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Resultados"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Consulta de búsqueda"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Seleccionar un marcador"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Seleccionar una instalación"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Sitios"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Discrepancia de referencia espacial"; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Puntos de partida"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Toque una superficie para colocar la escena"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Pulse sobre la imagen para obtener más información."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Configuración de terminal"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "prueba"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "El mapa base no tiene una referencia espacial."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "El mapa base no se ha podido cargar por alguna razón desconocida."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "El mapa base tiene una referencia espacial incompatible con el mapa."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "El archivo del certificado o la contraseña no eran válidos."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "El archivo del certificado no es válido."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "El mapa no tiene una referencia espacial."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "La contraseña no era válida."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "No se ha podido acceder a la URL o no contenía datos de imagen."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Trazado"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Trazado %1$lld de %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Configuración de trazado"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Volver a intentarlo"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Tipo de activo sin nombre"; + +/* A label in reference to a credential username. */ +"Username" = "Nombre de usuario"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Valor"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Debe iniciar sesión para acceder a '%@'"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Acercar a"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Acercar a los resultados"; + diff --git a/Sources/ArcGISToolkit/Resources/et.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/et.lproj/Localizable.strings new file mode 100644 index 000000000..1526cb5d5 --- /dev/null +++ b/Sources/ArcGISToolkit/Resources/et.lproj/Localizable.strings @@ -0,0 +1,298 @@ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld on valitud"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Sisule juurdepääsuks kohas %@ on vaja serti."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Lisa uus"; + +/* A section header for advanced options. */ +"Advanced Options" = "Täpsemad valikud"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Kõik kohad"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Kõik jälgimissisendid ja tulemused lähevad kaotsi."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Luba"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Pildi laadimisel ilmnes tõrge: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Manused"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Atribuudid"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Vajalik on autentimine"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Järjehoidjad"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Sirvi"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Tühista"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Tühista alguspunkti valik"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Sert on nõutav"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Serdi usaldusväärsuse hoiatus"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Kustuta kõik tulemused"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Värv"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Kompass, suund %lld kraadi %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Jätka"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Serdifailile ei pääsenud juurde."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Ohtlik: serdil, mida pakub '%@', pole usaldusväärse sertimiskeskuse allkirja."; + +/* A label for a button used to delete a utility network trace input component or result. */ +"Delete" = "Kustuta"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Valmis"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Korduvaid alguspunkte ei saa lisada."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Elementi ei tuvastatud."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Viga"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Tõrge serdi importimisel"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Tõrge aluskaardi laadimisel."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Hüpikavaldiste hindamine"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Alguspunkti määramine nurjus"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Objekti tulemused"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Veerg"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Väljad"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Filtreeri rajatised"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Filtreeri kohad"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Otsi kohta või aadressi"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Murdosa mööda serva"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Funktsiooni tulemused"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Meedia"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Režiim"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Nimi"; + +/* A label in reference to a specific utility network. */ +"Network" = "Võrk"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Uus jälgimisfail"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Järjehoidjaid pole"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Konfiguratsioone pole saadaval."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Vasteid ei leitud."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Tulemusi ei leitud"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Jälgimistüüpe ei leitud."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Kommunaalvõrke ei leitud."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Midagi pole valitud"; + +/* A trace function output result was not provided. */ +"Not Available" = "Pole saadaval"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "Objekti ID: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "OK"; + +/* A label in reference to a credential password. */ +"Password" = "Parool"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Parool on nõutav"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Sisestage valitud serdi jaoks parool."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Valige vähemalt üks alguskoht."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Valige vähemalt kaks alguskohta."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "Hüpiku hindamine nurjus: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Korda otsingut siin"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Tulemused"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Otsingupäring"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Vali järjehoidja"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Vali rajatis"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Saidid"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Koordinaatsüsteemi mittevastavus."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Algspunktid"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Puudutage stseeni paigutamiseks pinda"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Lisateabe saamiseks puudutage pilti."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Terminali konfiguratsioon"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "test"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "Aluskaardil ei ole ruumilist referentsi."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "Aluskaardi laadimine nurjus tundmatul põhjusel."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "Aluskaardil on ruumiline referents, mis ei ühildu kaardiga."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "Serdifail või parool ei sobi."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "Serdifail ei sobinud."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "Kaardil pole ruumilist referentsi."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "Parool ei sobinud."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "URL-ile ei pääsenud juurde või see ei sisaldanud pildiandmeid."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Jälgimisfail"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Jälgimisfail %1$lld/%2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Jälgimise konfiguratsioon"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Proovige uuesti"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Nimetu varatüüp"; + +/* A label in reference to a credential username. */ +"Username" = "Kasutajanimi"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Väärtus"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Üksusele '%@' juurdepääsuks peate sisse logima"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Suumi:"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Suumi tulemini"; + diff --git a/Sources/ArcGISToolkit/Resources/fi.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/fi.lproj/Localizable.strings index b658f6bdb..db28fb456 100755 --- a/Sources/ArcGISToolkit/Resources/fi.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/fi.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld valittu"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Varmenne tarvitaan, jotta kohteen %@ sisältöä voidaan käyttää."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Lisää uusi"; + +/* A section header for advanced options. */ +"Advanced Options" = "Lisäasetukset"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Kaikki sivustot"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Kaikki jäljityksen syötteet ja tulokset menetetään."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Salli"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Kuvan lataamisessa tapahtui virhe: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Liitteet"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Ominaisuustiedot"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Todennus vaaditaan"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Kirjanmerkit"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Selaa"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Peruuta"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Peruuta aloituspisteen valinta"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Varmenne vaaditaan"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Varmenteen luottamusvaroitus"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Tyhjennä kaikki tulokset"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Väri"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Kompassi, suunta %lld astetta %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Jatka"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Varmennetiedostoa ei voitu käyttää."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Vaara: luotettava valtuuttaja ei ole allekirjoittanut kohteen %@ varmennetta."; + +/* A label for a button used to delete a utility network trace input component or result. */ "Delete" = "Poista"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Valmis"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Aloituspisteiden kaksoiskappaleita ei voi lisätä."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Elementtiä ei voitu tunnistaa."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Virhe"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Virhe varmenteen tuomisessa"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Virhe taustakartan lataamisessa."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Arvioidaan ponnahdusikkunalausekkeita"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Aloituspisteen määritys epäonnistui"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Kohteen tulokset"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Kenttä"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Kentät"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Suodata palvelut"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Suodata sivustot"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Etsi paikka tai osoite"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Osuus reunaa pitkin"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Funktion tulokset"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Media"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Tila"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Nimi"; + +/* A label in reference to a specific utility network. */ +"Network" = "Verkko"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Uusi jäljitys"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Ei kirjanmerkkejä"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Määrityksiä ei ole käytettävissä."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Vastaavuuksia ei löytynyt."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Tuloksia ei löytynyt"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Jäljitystyyppejä ei löytynyt."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Utility Network -verkkoja ei löytynyt."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Ei mitään valittuna"; + +/* A trace function output result was not provided. */ +"Not Available" = "Ei käytettävissä"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "Objektin tunnus: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "OK"; + +/* A label in reference to a credential password. */ +"Password" = "Salasana"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Salasana on pakollinen"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Anna valitun varmenteen salasana."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Määritä vähintään yksi aloitussijainti."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Määritä vähintään kaksi aloitussijaintia."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "Ponnahdusikkunan arviointi epäonnistui: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Toista haku täällä"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Tulokset"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Hakukysely"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Valitse kirjanmerkki"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Valitse palvelu"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Sivustot"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Koordinaatistotiedon ristiriita."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Aloituspisteet"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Aseta maisema napauttamalla pintaa"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Katso lisätietoja napauttamalla kuvaa."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Terminaalin konfiguraatio"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "testi"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "Taustakartta ei sisällä koordinaatistotietoa."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "Taustakartan lataus epäonnistui tuntemattomasta syystä."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "Taustakartan koordinaatistotieto ei ole yhteensopiva kartan kanssa."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "Varmennetiedosto tai -salasana oli virheellinen."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "Varmennetiedosto oli virheellinen."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "Kartta ei sisällä koordinaatistotietoa."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "Salasana oli virheellinen."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "URL-osoitetta ei voitu käyttää tai se ei sisältänyt kuva-aineistoa."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Jäljitys"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Jäljitys %1$lld / %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Jäljityksen määritys"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Yritä uudelleen"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Nimeämätön omaisuustyyppi"; + +/* A label in reference to a credential username. */ +"Username" = "Käyttäjänimi:"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Arvo"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Sinun on kirjauduttava sisään, jotta voit käyttää kohdetta %@"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Tarkenna kohteeseen"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Tarkenna tulokseen"; + diff --git a/Sources/ArcGISToolkit/Resources/fr.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/fr.lproj/Localizable.strings index 9fdf5c26f..e4d2fd915 100755 --- a/Sources/ArcGISToolkit/Resources/fr.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/fr.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld sélectionné(s)"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Un certificat est requis pour accéder au contenu sur %@."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Ajouter nouveau"; + +/* A section header for advanced options. */ +"Advanced Options" = "Options avancées"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Tous les sites"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Tous les résultats et toutes les entrées du traçage seront perdus."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Autoriser"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Une erreur s’est produite lors du chargement de l’image : %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Pièces jointes"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Attributs"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Authentification requise"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Géosignets"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Parcourir"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Annuler"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Annuler la sélection du point de départ"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Certificat requis"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Avertissement relatif à l’approbation du certificat"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Effacer tous les résultats"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Couleur"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Boussole, direction %lld degrés %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Continuer"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Impossible d’accéder au fichier de certificat."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Danger : le certificat fourni par '%@' n’est pas signé par une autorité de confiance."; + +/* A label for a button used to delete a utility network trace input component or result. */ "Delete" = "Supprimer"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Terminé"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Il n’est pas possible d’ajouter des points de départ en double."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "L’élément n’a pas pu être identifié."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Erreur"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Erreur lors de l’importation du certificat"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Erreur lors du chargement du fond de carte."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Évaluation des expressions de fenêtre contextuelle"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Échec de la définition du point de départ"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Résultats d’entités"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Champ"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Champs"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Filtrer les bâtiments"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Filtrer les sites"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Rechercher un lieu ou une adresse"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Fraction sur un tronçon"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Résultats de fonction"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Contenu multimédia"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Mode"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Nom"; + +/* A label in reference to a specific utility network. */ +"Network" = "Réseau"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Nouveau traçage"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Aucun géosignet"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Aucune configuration disponible."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Aucune correspondance trouvée."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Aucun résultat trouvé"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Aucun type de traçage trouvé."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Aucun réseau de distribution trouvé."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Aucune sélection"; + +/* A trace function output result was not provided. */ +"Not Available" = "Non disponible"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "ID d’objet : %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "OK"; + +/* A label in reference to a credential password. */ +"Password" = "Mot de passe"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Mot de passe requis"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Saisissez un mot de passe pour le certificat sélectionné."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Définissez au moins une localisation de départ."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Définissez au moins deux localisations de départ."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "L’évaluation de la fenêtre contextuelle a échoué : %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Répéter la recherche ici"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Résultats"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Requête de recherche"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Sélectionner un géosignet"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Sélectionner un bâtiment"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Sites"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Non-correspondance de la référence spatiale."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Points de départ"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Appuyez sur une surface pour insérer la scène"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Appuyez sur l’image pour afficher plus d’informations."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Configuration de borne"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "test"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "Le fond de carte ne possède pas de référence spatiale."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "Le chargement du fond de carte a échoué pour une raison inconnue."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "La référence spatiale du fond de carte est incompatible avec la carte."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "Le fichier de certificat ou le mot de passe n’est pas valide."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "Le fichier de certificat n’est pas valide."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "La carte ne possède pas de référence spatiale."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "Le mot de passe n’est pas valide."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "L’URL est inaccessible ou ne contient pas de données d’image."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Tracer"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Traçage %1$lld sur %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Configuration de tracé"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Réessayer"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Type de ressource sans nom"; + +/* A label in reference to a credential username. */ +"Username" = "Nom d’utilisateur"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Valeur"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Vous devez vous connecter pour accéder à '%@'"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Zoom sur"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Zoom sur le résultat"; + diff --git a/Sources/ArcGISToolkit/Resources/he.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/he.lproj/Localizable.strings index 060ee9c3e..9ab757f6b 100755 --- a/Sources/ArcGISToolkit/Resources/he.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/he.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ -"Delete" = "מחיקה"; +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld נבחר"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "אישור נדרש כדי לגשת לתוכן ב-%@."; + +/* A button to add new utility trace starting points. */ +"Add new" = "הוסף חדש"; + +/* A section header for advanced options. */ +"Advanced Options" = "אפשרויות מתקדמות"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "כל האתרים"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "כל הקלטים והתוצאות של המעקב יאבדו."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "הרשה"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "אירעה שגיאה בטעינת התמונה: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "קבצים מצורפים"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "מאפיינים"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "נדרש אימות"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "סימניות"; + +/* A label for a button to open the system file browser. */ +"Browse" = "עיון"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "ביטול"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "בטל בחירת נקודת התחלה"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "נדרש אישור"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "אזהרת אמון של אישור"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "נקה את כל התוצאות"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "צבע"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "מצפן, בכיוון %lld מעלות %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "המשך"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "לא ניתן לגשת לקובץ האישור."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "סכנה: האישור שסופק על ידי '%@' לא חתום על ידי רשות מהימנה."; + +/* A label for a button used to delete a utility network trace input component or result. */ +"Delete" = "מחק"; + +/* A button to close the bookmark selection menu. */ +"Done" = "בוצע"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "לא ניתן להוסיף נקודות התחלה כפולות."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "לא ניתן לזהות את הרכיב."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "שגיאה"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "שגיאה בייבוא אישור"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "שגיאה בטעינת מפת בסיס."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "הערכת ביטויי חלון קופץ"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "קביעת נקודת התחלה נכשלה"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "תוצאות ישות"; + +/* A field in a set of data contained in a popup. */ +"Field" = "שדה"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "שדות"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "סנן מתקנים"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "סנן אתרים"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "מצא מקום או כתובת"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "חתוך לאורך הקצה"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "תוצאות פונקציה"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "מדיה"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "אופן"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "שם"; + +/* A label in reference to a specific utility network. */ +"Network" = "רשת"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "עקיבה חדשה"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "אין סימניות"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "אין תצורות זמינות."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "לא נמצאו התאמות."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "לא נמצאו תוצאות"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "לא נמצא סוג עקיבה."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "לא נמצאו Utility networks."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "דבר לא נבחר"; + +/* A trace function output result was not provided. */ +"Not Available" = "לא זמין"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "מזהה אובייקט: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "אישור"; + +/* A label in reference to a credential password. */ +"Password" = "סיסמה"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "נדרשת סיסמה"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "הזן סיסמה עבור האישור שנבחר."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "הגדר מיקום התחלה אחד לפחות."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "הגדר לפחות 2 מיקומי התחלה."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "הערכת חלון קופץ נכשלה: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "חזור על החיפוש כאן"; + +/* A label for a button to show utility network trace results. */ +"Results" = "תוצאות"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "שאילתת חיפוש"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "בחר סימנייה"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "בחר מתקן"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "אתרים"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "חוסר התאמה של ייחוס מרחבי"; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "נקודות התחלה"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "הקש על פני השטח כדי מקם את הסצנה"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "הקש על תמונה לקבלת מידע נוסף"; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "תצורת מסוף"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "בדיקה"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "למפת הבסיס אין ייחוס מרחבי."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "טעינת מפת הבסיס נכשלה מסיבה לא ידועה."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "למפת הבסיס יש ייחוס מרחבי שאינו תואם עם המפה."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "קובץ האישור או הסיסמה היו לא חוקיים."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "קובץ האישור היה לא חוקי."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "למפה אין ייחוס מרחבי."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "הסיסמה הייתה לא חוקית."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "לא ניתן להגיע לכתובת ה-URL או שהכתובת לא הכילה נתוני תמונה."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "עקיבה"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "עקיבה %1$lld מתוך %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "תצורת עקיבה"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "נסה שוב"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "סוג נכס ללא שם"; + +/* A label in reference to a credential username. */ +"Username" = "שם משתמש"; + +/* A value in a set of data contained in a popup. */ +"Value" = "ערך"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "עליך להתחבר כדי לגשת אל '%@'"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "בצע זום אל"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "זום לתוצאה"; + diff --git a/Sources/ArcGISToolkit/Resources/hr.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/hr.lproj/Localizable.strings index 35e05165f..197902b62 100755 --- a/Sources/ArcGISToolkit/Resources/hr.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/hr.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld odabrano"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Potreban je certifikat za pristup sadržaju na %@."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Dodaj novi"; + +/* A section header for advanced options. */ +"Advanced Options" = "Napredne opcije"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Sva mjesta"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Svi unosi i rezultati praćenja bit će izgubljeni."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Dopusti"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Došlo je do pogreške prilikom učitavanja slike: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Privici"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Atributi"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Potrebna je provjera autentičnosti"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Knjižne oznake"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Pregledaj"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Odustani"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Poništi odabir početne točke"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Potreban certifikat"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Upozorenje o povjerenju certifikata"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Očisti sve rezultate"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Boja"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Kompas, smjer %lld stupnjeva %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Nastavak"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Nije moguće pristupiti datoteci certifikata."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Opasno: Certifikat koji daje '%@' nije potpisan od strane pouzdanog autoriteta."; + +/* A label for a button used to delete a utility network trace input component or result. */ "Delete" = "Izbriši"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Gotovo"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Dvostruke početne točke ne mogu se dodati."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Element nije bilo moguće identificirati."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Pogreška"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Pogreška pri uvozu certifikata"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Pogreška pri učitavanju kartografske podloge."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Procjena skočnih izraza"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Postavljanje početne točke nije uspjelo"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Rezultati geoobjekata"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Polje"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Polja"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Filtriraj mjesta usluge"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Filtriraj mjesta"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Pronađi mjesto ili adresu"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Frakcija uz rub"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Rezultati funkcije"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Mediji"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Način"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Naziv"; + +/* A label in reference to a specific utility network. */ +"Network" = "Mreža"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Novo praćenje"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Nema knjižnih oznaka"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Nema dostupnih konfiguracija."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Nema podudaranja."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Nema rezultata"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Nema pronađenih vrsta praćenja."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Nisu pronađene uslu\\ne mreže."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Ništa nije odabrano"; + +/* A trace function output result was not provided. */ +"Not Available" = "Nije dostupno"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "ID objekta: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "U redu"; + +/* A label in reference to a credential password. */ +"Password" = "Lozinka"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Potrebna lozinka"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Unesite lozinku za odabrani certifikat."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Postavite barem 1 početnu lokaciju."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Postavite barem 2 početne lokacije."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "Evaluacija skočnog prozora nije uspjela: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Ponovi pretraživanje ovdje"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Rezultati"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Upit za pretraživanje"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Odaberi knjižnu oznaku"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Odaberi mjesto usluge"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Web-mjesta"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Nepodudaranje prostorne reference."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Početne točke"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Dodirnite površinu za postavljanje scene"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Dodirnite sliku za više informacija."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Konfiguracija terminala"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "test"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "Kartografska podloga nema prostornu referencu"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "Učitavanje kartografske podloge nije uspjelo iz nepoznatog razloga."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "Kartografska podloga ima prostornu referencu koja nije kompatibilna s kartom."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "Datoteka certifikata ili lozinka nisu važeći."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "Datoteka certifikata nije važeća."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "Karta nema prostornu referencu"; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "Lozinka je nevažeća."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "Nije bilo moguće doći do URL-a ili nije sadržavao slikovne podatke."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Prati"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Prati %1$lld od %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Konfiguracija praćenja"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Pokušaj ponovno"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Neimenovana vrsta sredstva"; + +/* A label in reference to a credential username. */ +"Username" = "Korisničko ime"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Vrijednost"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Morate se prijaviti za pristup '%@'"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Povećaj na"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Povećaj na rezultat"; + diff --git a/Sources/ArcGISToolkit/Resources/hu.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/hu.lproj/Localizable.strings index aa8c01a28..9ac1d42e3 100644 --- a/Sources/ArcGISToolkit/Resources/hu.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/hu.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld kiválasztva"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "A(z) %@ helyen lévő tartalom eléréséhez tanúsítványra van szükség."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Új hozzáadása"; + +/* A section header for advanced options. */ +"Advanced Options" = "Speciális beállítások"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Összes hely"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Minden nyomkövetési bemenet és eredmény elveszik."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Megenged"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Hiba történt a kép betöltése közben: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Csatolmányok"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Attribútumok"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Hitelesítés szükséges"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Könyvjelzők"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Tallózás"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Mégse"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "A kiindulási pont kiválasztásának törlése"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Megkövetelt tanúsítvány"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Tanúsítvány-megbízhatósági figyelmeztetés"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Összes eredmény törlése"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Szín"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Iránytű, irány %lld fok %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Folytatás"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Nem tudott hozzáférni a tanúsítványfájlhoz."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Veszélyes: %@ által megadott tanúsítványt nem megbízható hatóság írta alá."; + +/* A label for a button used to delete a utility network trace input component or result. */ "Delete" = "Törlés"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Kész"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Duplikált kezdőpontok nem adhatók hozzá."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Az elemet nem sikerült azonosítani."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Hiba"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Hiba a tanúsítvány importálásakor"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Hiba az alaptérkép betöltése közben."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Felugró kifejezések kiértékelése"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "A kiindulási pont beállítása sikertelen"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Vektoros elem eredményei"; + +/* A field in a set of data contained in a popup. */ +"Field" = "A mező"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Mezők"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Létesítmények szűrése"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Helyek szűrése"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Hely vagy cím keresése"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Részarány az él mentén"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Funkció eredményei"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Média"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Mód"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Név"; + +/* A label in reference to a specific utility network. */ +"Network" = "Hálózat"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Új nyomkövetés"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Nincsenek könyvjelzők"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Nem állnak rendelkezésre konfigurációk."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Nincs találat."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Nincs találat"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Nem találhatók nyomkövetési típusok."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Nem találhatók közüzemi hálózatok."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Egy sincs kijelölve"; + +/* A trace function output result was not provided. */ +"Not Available" = "Nem áll rendelkezésre"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "Objektumazonosító: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "OK"; + +/* A label in reference to a credential password. */ +"Password" = "Jelszó"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Jelszó szükséges"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Kérjük, adja meg a kiválasztott tanúsítvány jelszavát."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Kérjük, állítson be legalább 1 kezdőpontot."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Kérjük, állítson be legalább 2 kezdőpontot."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "A felugró ablak kiértékelése sikertelen: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Ismételje meg a keresést itt"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Eredmények"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Keresési lekérdezés"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Könyvjelző kiválasztása"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Válasszon ki egy létesítményt"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Webhelyek"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Térbeli referencia nem egyezik"; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Kiindulási pontok"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Érintsen meg egy felületet a 3D térkép elhelyezéséhez"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "További információkért koppintson a képre."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Terminál konfigurálása"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "teszt"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "Az alaptérkép nem rendelkezik térbeli referenciával."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "Ismeretlen ok miatt nem sikerült betölteni a alaptérképet."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "Az alaptérkép térbeli referenciája nem kompatibilis a térképpel."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "A tanúsítványfájl vagy a jelszó érvénytelen."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "A tanúsítványfájl érvénytelen."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "A térkép nem rendelkezik térbeli referenciával."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "A jelszó érvénytelen."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "Az URL nem volt elérhető, vagy nem tartalmazott képadatokat."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Nyomkövetés"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Nyomkövetés %1$lld / %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Nyomkövetés konfigurálása"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Próbálja meg újra"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Névtelen eszköztípus"; + +/* A label in reference to a credential username. */ +"Username" = "Felhasználónév"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Érték"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "%@ hozzáféréséhez be kell jelentkeznie."; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Nagyítás/kicsinyítés:"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Nagyítás az eredményre"; + diff --git a/Sources/ArcGISToolkit/Resources/id.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/id.lproj/Localizable.strings index f2137c9eb..81d492052 100755 --- a/Sources/ArcGISToolkit/Resources/id.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/id.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld dipilih"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Sertifikat diperlukan untuk mengakses konten di %@."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Tambah baru"; + +/* A section header for advanced options. */ +"Advanced Options" = "Opsi Lanjutan"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Semua situs"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Semua pelacakan input dan hasil akan hilang."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Izinkan"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Terjadi kesalahan saat memuat gambar: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Lampiran"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Atribut"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Diperlukan Autentikasi"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Penanda Lokasi"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Jelajahi"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Batalkan"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Batalkan pemilihan titik awal"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Diperlukan Sertifikat"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Peringatan Sertifikat Kepercayaan"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Hapus semua hasil"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Warna"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Kompas, menuju %lld derajat %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Terus-menerus (kontinyu)"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Tidak dapat mengakses file sertifikat."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Berbahaya: Sertifikat yang diberikan oleh '%@' tidak ditandatangani oleh otoritas tepercaya."; + +/* A label for a button used to delete a utility network trace input component or result. */ "Delete" = "Hapus"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Selesai"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Titik awal duplikat tidak dapat ditambahkan."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Elemen tidak dapat diidentifikasi."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Kesalahan"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Terjadi kesalahan saat mengimpor sertifikat"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Terjadi kesalahan saat memuat peta dasar."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Mengevaluasi ekspresi popup"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Gagal menetapkan titik awal"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Hasil Fitur"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Kolom"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Kolom"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Filter fasilitas"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Filter situs"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Temukan tempat atau alamat"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Fraksi Sepanjang Tepi"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Hasil Fungsi"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Media"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Mode"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Nama"; + +/* A label in reference to a specific utility network. */ +"Network" = "Jaringan"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Pelacakan baru"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Tidak ada bookmark"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Tidak ada konfigurasi yang tersedia."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Tidak ada kecocokan yang ditemukan."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Tidak ada hasil yang ditemukan"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Tidak ada jenis pelacakan yang ditemukan."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Tidak ada jaringan utilitas yang ditemukan."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Tidak ada yang di pilih"; + +/* A trace function output result was not provided. */ +"Not Available" = "Tidak Tersedia"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "ID Objek: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "OK"; + +/* A label in reference to a credential password. */ +"Password" = "Kata Sandi"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Kata Sandi Diperlukan"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Harap masukkan kata sandi untuk sertifikat yang dipilih."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Harap tetapkan setidaknya 1 titik awal."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Harap tetapkan setidaknya 2 titik awal."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "Evaluasi popup gagal: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Ulangi Pencarian Di Sini"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Hasil"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Cari Kueri"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Pilih bookmark"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Pilih fasilitas"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Situs"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Ketidaksesuaian referensi spasial."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Titik Awal"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Ketuk permukaan untuk meletakkan tempat kejadian"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Ketuk gambar untuk informasi selengkapnya."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Konfigurasi Terminal"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "tes"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "Peta dasar tidak memiliki referensi spasial."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "Peta dasar gagal dimuat karena alasan yang tidak diketahui."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "Peta dasar mempunyai referensi spasial yang tidak sesuai dengan peta."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "File sertifikat atau kata sandi tidak valid."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "File sertifikat tidak valid."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "Peta tersebut tidak memiliki referensi spasial."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "Kata sandi tidak valid."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "URL tidak dapat dijangkau atau tidak berisi data gambar."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Lacak"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Lacak %1$lld dari %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Konfigurasi Pelacakan"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Coba lagi"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Jenis Aset Tanpa Nama"; + +/* A label in reference to a credential username. */ +"Username" = "Nama Pengguna"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Nilai"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Anda harus masuk untuk mengakses '%@'"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Zoom Ke"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Perbesar hasil"; + diff --git a/Sources/ArcGISToolkit/Resources/it.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/it.lproj/Localizable.strings index 653846930..bf715bd74 100755 --- a/Sources/ArcGISToolkit/Resources/it.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/it.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld selezionato"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Per accedere al contenuto su %@ è necessario un certificato."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Aggiungi nuovo"; + +/* A section header for advanced options. */ +"Advanced Options" = "Opzioni avanzate"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Tutti i siti"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Tutti gli input e i risultati della traccia andranno persi."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Consenti"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Si è verificato un errore durante il caricamento dell'immagine: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Allegati"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Attributi"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Autenticazione richiesta"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Segnalibri"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Sfoglia"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Annulla"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Annulla selezione punto di partenza"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Certificato obbligatorio"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Avvertenza attendibilità certificato"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Elimina tutti i risultati"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Colore"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Bussola, intestazione %lld gradi%@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Continua"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Impossibile accedere al file del certificato."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Pericolo: il certificato fornito da \"%@\" non è firmato da un'autorità attendibile."; + +/* A label for a button used to delete a utility network trace input component or result. */ "Delete" = "Elimina"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Completato"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Impossibile aggiungere duplicazione punti di partenza."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Non è stato possibile identificare l'elemento."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Errore"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Errore d'importazione certificato."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Errore caricamento della mappa di base."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Valutazione espressioni popup"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Impostazione punto di partenza non riuscita"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Risultati feature"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Campo"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Campi"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Filtra servizi"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Filtra siti"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Trova luogo o indirizzo"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Frazione lungo bordo"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Risultati funzione"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Supporti"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Modalità"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Nome"; + +/* A label in reference to a specific utility network. */ +"Network" = "Rete"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Nuova traccia"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Nessun segnalibro"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Nessuna configurazione disponibile."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Nessuna corrispondenza trovata."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Nessun risultato trovato"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Nessun tipo traccia trovato."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Nessuna utility network trovata."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Nessuno selezionato"; + +/* A trace function output result was not provided. */ +"Not Available" = "Non disponibile"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "ID oggetto: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "OK"; + +/* A label in reference to a credential password. */ +"Password" = "Password"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Password necessaria"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Digitare la password per il certificato selezionato."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Impostare almeno 1 posizione di partenza."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Impostare almeno 2 posizioni di partenza."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "Valutazione popup non riuscita: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Ripeti ricerca qui"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Risultati"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Interrogazione di ricerca"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Seleziona un segnalibro"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Seleziona un servizio"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Siti"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Mancata corrispondenza riferimento spaziale"; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Punti di partenza"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Toccare una superficie per posizionare la scena"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Toccare l'immagine per ulteriori informazioni."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Configurazione terminale"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "test"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "La mappa di base non ha un riferimento spaziale."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "Il caricamento della mappa di base non è riuscito e il motivo è sconosciuto."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "La mappa di base ha un riferimento spaziale che è incompatibile con la mappa."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "Il file o password del certificato non erano validi."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "Il file del certificato non era valido."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "La mappa non possiede un riferimento spaziale."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "La password non era valida."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "Impossibile raggiungere l'URL oppure non conteneva dati immagine."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Traccia"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Traccia %1$lld di %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Configurazione traccia"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Riprova"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Tipo risorsa senza nome"; + +/* A label in reference to a credential username. */ +"Username" = "Nome utente"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Valore"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Effettuare l'accesso per accedere a \"%@\""; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Zoom a"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Zoom al risultato"; + diff --git a/Sources/ArcGISToolkit/Resources/ja.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/ja.lproj/Localizable.strings index c183d2159..b630e243a 100755 --- a/Sources/ArcGISToolkit/Resources/ja.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/ja.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld が選択されました"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "%@ でコンテンツにアクセスするには証明書が必要です。"; + +/* A button to add new utility trace starting points. */ +"Add new" = "新規追加"; + +/* A section header for advanced options. */ +"Advanced Options" = "高度なオプション"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "すべてのサイト"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "トレースの入力および結果がすべて失われます。"; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "許可"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "画像の読み込み中にエラーが発生しました: %@。"; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "添付ファイル"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "属性"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "認証が必要です"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "ブックマーク"; + +/* A label for a button to open the system file browser. */ +"Browse" = "参照"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "キャンセル"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "始点の選択のキャンセル"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "証明書が必要です"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "証明書の信頼性の警告"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "結果をすべて消去"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "色"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "コンパス、方位角 %lld 度 %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "続行"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "証明書ファイルにアクセスできませんでした。"; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "危険: %@ が提供する証明書は、信頼された認証機関が署名していません。"; + +/* A label for a button used to delete a utility network trace input component or result. */ "Delete" = "削除"; + +/* A button to close the bookmark selection menu. */ +"Done" = "終了"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "重複する始点を追加することはできません。"; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "エレメントを識別できません。"; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "エラー"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "証明書のインポート中にエラーが発生しました"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "ベースマップの読み込み中にエラーが発生しました。"; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "ポップアップ式を評価しています"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "始点を設定できません"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "フィーチャ結果"; + +/* A field in a set of data contained in a popup. */ +"Field" = "フィールド"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "フィールド"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "施設のフィルター処理"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "サイトのフィルター処理"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "場所または住所の検索"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "エッジに沿った部分"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "関数の結果"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "メディア"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "モード"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "名前"; + +/* A label in reference to a specific utility network. */ +"Network" = "ネットワーク"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "新しいトレース"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "ブックマークがありません"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "使用できる構成がありません。"; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "一致するものが見つかりません。"; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "結果が見つかりません"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "トレース タイプが見つかりません。"; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "ユーティリティ ネットワークが見つかりません。"; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "選択されていません"; + +/* A trace function output result was not provided. */ +"Not Available" = "利用不可"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "Object ID: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "OK"; + +/* A label in reference to a credential password. */ +"Password" = "パスワード"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "パスワードが必要です"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "選択した証明書のパスワードを入力してください。"; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "少なくとも 1 つの開始位置を設定してください。"; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "少なくとも 2 つの開始位置を設定してください。"; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "ポップアップの評価に失敗しました: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "ここで検索の繰り返し"; + +/* A label for a button to show utility network trace results. */ +"Results" = "結果"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "検索クエリ"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "ブックマークの選択"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "施設の選択"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "サイト"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "空間参照が一致しません。"; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "始点"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "サーフェスをタップしてシーンを配置します。"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "詳細については、画像をタップしてください。"; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "ターミナル構成"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "テスト"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "ベースマップに空間参照がありません。"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "不明な理由でベースマップを読み込めませんでした。"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "ベースマップの空間参照がマップと互換性がありません。"; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "証明書ファイルまたはパスワードが無効です。"; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "証明書ファイルが無効です。"; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "マップに空間参照がありません。"; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "パスワードが無効です。"; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "URL に到達できなかったか、画像データが含まれていませんでした。"; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "トレース"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "%1$lld/%2$lld のトレース"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "トレース構成"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "再試行"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "無名のアセット タイプ"; + +/* A label in reference to a credential username. */ +"Username" = "ユーザー名"; + +/* A value in a set of data contained in a popup. */ +"Value" = "値"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "%@ にアクセスするにはサイン インする必要があります"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "ズーム"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "結果にズーム"; + diff --git a/Sources/ArcGISToolkit/Resources/ko.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/ko.lproj/Localizable.strings index c2e78078a..a585a74dc 100755 --- a/Sources/ArcGISToolkit/Resources/ko.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/ko.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld개 선택됨"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "%@의 콘텐츠에 접근하려면 인증서가 필요합니다."; + +/* A button to add new utility trace starting points. */ +"Add new" = "새로 추가"; + +/* A section header for advanced options. */ +"Advanced Options" = "고급 옵션"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "모든 사이트"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "모든 추적 입력 및 결과가 손실됩니다."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "허용"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "이미지를 불러오는 동안 오류가 발생했습니다. %@"; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "첨부 파일"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "속성"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "인증 필요"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "북마크"; + +/* A label for a button to open the system file browser. */ +"Browse" = "찾아보기"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "취소"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "시작점 선택 취소"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "인증서 필요"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "인증서 신뢰 경고"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "모든 결과 지우기"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "색상"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "나침반, 진행 방향 %lld도 %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "계속"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "인증서 파일에 접근할 수 없습니다."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "위험: '%@'에서 제공된 인증서가 신뢰할 수 있는 기관에서 서명되지 않았습니다."; + +/* A label for a button used to delete a utility network trace input component or result. */ "Delete" = "삭제"; + +/* A button to close the bookmark selection menu. */ +"Done" = "완료"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "중복된 시작점을 추가할 수 없습니다."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "요소를 식별할 수 없습니다."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "오류"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "인증서를 가져오는 동안 오류 발생"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "베이스맵을 불러오는 동안 오류가 발생했습니다."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "팝업 식 평가"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "시작점을 설정하지 못함"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "피처 결과"; + +/* A field in a set of data contained in a popup. */ +"Field" = "필드"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "필드"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "시설 필터링"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "현장 필터링"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "장소 또는 주소 찾기"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Fraction Along Edge"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "함수 결과"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "미디어"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "모드"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "이름"; + +/* A label in reference to a specific utility network. */ +"Network" = "네트워크"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "새 추적"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "북마크 없음"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "사용 가능한 구성이 없습니다."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "일치하는 항목이 없습니다."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "결과를 찾을 수 없음"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "추적 유형을 찾을 수 없습니다."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "유틸리티 네트워크를 찾을 수 없습니다."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "선택된 항목 없음"; + +/* A trace function output result was not provided. */ +"Not Available" = "사용할 수 없음"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "Object ID: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "확인"; + +/* A label in reference to a credential password. */ +"Password" = "비밀번호"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "비밀번호 필요"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "선택한 인증서의 비밀번호를 입력하세요."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "시작 위치를 하나 이상 설정하세요."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "시작 위치를 둘 이상 설정하세요."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "팝업 평가 실패: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "여기서 반복 검색"; + +/* A label for a button to show utility network trace results. */ +"Results" = "결과"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "검색 쿼리"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "북마크 선택"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "시설 선택"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "사이트"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "공간 기준 체계가 불일치합니다."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "시작점"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "표면을 눌러 씬 배치"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "자세한 내용을 보려면 이미지를 탭합니다."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "터미널 구성"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "테스트"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "베이스맵에는 공간 기준 체계가 없습니다."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "알 수 없는 이유로 베이스맵을 불러오지 못했습니다."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "베이스맵에 맵과 호환되지 않는 공간 기준 체계가 있습니다."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "인증서 파일 또는 비밀번호가 잘못되었습니다."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "인증서 파일이 잘못되었습니다."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "맵에 공간 기준 체계가 없습니다."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "비밀번호가 잘못되었습니다."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "URL에 연결할 수 없거나 이미지 데이터가 없습니다."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "추적"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "%2$lld 중 %1$lld 추적"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "추적 구성"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "다시 시도"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "이름이 정의되지 않은 자산 유형"; + +/* A label in reference to a credential username. */ +"Username" = "사용자 이름"; + +/* A value in a set of data contained in a popup. */ +"Value" = "값"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "'%@'에 접근하려면 로그인해야 합니다."; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "확대"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "결과 확대"; + diff --git a/Sources/ArcGISToolkit/Resources/lt.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/lt.lproj/Localizable.strings new file mode 100644 index 000000000..8daaecf73 --- /dev/null +++ b/Sources/ArcGISToolkit/Resources/lt.lproj/Localizable.strings @@ -0,0 +1,298 @@ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld pasirinkta"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Norint pasiekti %@ turinį, reikia sertifikato."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Pridėti naują"; + +/* A section header for advanced options. */ +"Advanced Options" = "Išplėstinės parinktys"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Visos svetainės"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Visos sekimo įvestys ir rezultatai bus prarasti."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Leisti"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Įkeliant vaizdą įvyko klaida: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Priedai"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Atributai"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Reikalingas autentikavimas"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Žymos"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Naršyti"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Atšaukti"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Atšaukti pradžios taško pasirinkimą"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Reikalingas sertifikatas"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Perspėjimas dėl sertifikato patikimumo"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Išvalyti rezultatus"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Spalva"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Kompasas, kryptis %lld laipsniais %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Tęsti"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Nepavyko pasiekti sertifikato failo."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Įspėjimas: „%@“ pateiktas sertifikatas nepasirašytas patikimos institucijos."; + +/* A label for a button used to delete a utility network trace input component or result. */ +"Delete" = "Ištrinti"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Atlikta"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Negalima įtraukti pasikartojančių pradžios taškų."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Nepavyko identifikuoti elemento."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Klaida"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Klaida importuojant sertifikatą"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Klaida įkeliant pagrindo žemėlapį."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Iškylančių išraiškų vertinimas"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Nepavyko nustatyti pradžios taško"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Elemento rezultatai"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Laukas"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Laukai"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Filtruoti įrenginius"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Filtruoti svetaines"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Rasti vietą arba adresą"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Trumpena išilgai krašto"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Funkcijos rezultatai"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Medija"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Režimas"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Pavadinimas"; + +/* A label in reference to a specific utility network. */ +"Network" = "Tinklas"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Naujas ženklas"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Nėra žymų"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Galimų konfigūracijų nėra."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Jokių atitikimų nerasta."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Nieko nerasta"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Ženklų tipų nerasta."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Komunalinių tinklų nerasta."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Nieko nepasirinkta"; + +/* A trace function output result was not provided. */ +"Not Available" = "Nepasiekiama"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "Objekto ID: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "Gerai"; + +/* A label in reference to a credential password. */ +"Password" = "Slaptažodis"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Būtinas slaptažodis"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Įveskite pasirinkto sertifikato slaptažodį."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Nustatykite bent vieną pradžios vietą."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Nustatykite bent dvi pradžios vietas."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "Nepavyko įvertinti iškylančio lango: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Pakartoti paiešką čia"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Rezultatai"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Paieškos užklausa"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Pasirinkti erdvinę žymę"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Pasirinkti įrenginį"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Svetainės"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Koordinačių sistemos neatitikimas."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Pradžios taškai"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Norėdami įkelti sceną, bakstelėkite pavirščių"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Norėdami gauti daugiau informacijos, bakstelėkite atvaizdą."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Terminalo konfigūracija"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "testas"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "Pagrindo žemėlapis neturi koordinačių sistemos."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "Pagrindo žemėlapio nepavyko įkelti dėl nežinomos priežasties."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "Bazinio žemėlapio koordinačių sistema nesuderinama su žemėlapiu."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "Sertifikato failas arba slaptažodis yra neteisingas."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "Sertifikato failas yra neteisingas."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "Pagrindo žemėlapis neturi koordinačių sistemos."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "Slaptažodis neteisingas."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "Nepavyko pasiekti URL arba jame nebuvo vaizdo duomenų."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Ženklas"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Ženklas %1$lld of %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Ženklo konfigūracija"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Bandykite dar kartą"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Išteklių tipas be pavadinimo"; + +/* A label in reference to a credential username. */ +"Username" = "Naudotojo vardas"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Vertė"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Norėdami pasiekti „%@“, turite prisijungti"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Priartinti"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Pritraukti prie rezultato"; + diff --git a/Sources/ArcGISToolkit/Resources/lv.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/lv.lproj/Localizable.strings new file mode 100644 index 000000000..b7f6bd258 --- /dev/null +++ b/Sources/ArcGISToolkit/Resources/lv.lproj/Localizable.strings @@ -0,0 +1,298 @@ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld ir atlasīts"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Lai piekļūtu saturam %@, ir nepieciešams sertifikāts."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Pievienot jaunu"; + +/* A section header for advanced options. */ +"Advanced Options" = "Paplašinātās iespējas"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Visas vietnes"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Tiks zaudētas visas izsekošanas ievades un rezultāti."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Atļaut"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Ielādējot attēlu, radās kļūda: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Pielikumi"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Atribūti"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Ir nepieciešama autentifikācija"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Grāmatzīmes"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Pārlūkot"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Atcelt"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Atcelt sākumpunkta atlasi"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Ir nepieciešams sertifikāts"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Brīdinājums par sertifikāta uzticamību"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Notīrīt visus rezultātus"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Krāsa"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Kompass, virziens %lld grādos %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Turpināt"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Nevarēja piekļūt sertifikāta failam."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Bīstami: '%@' nodrošināto sertifikātu nav parakstījusi uzticama iestāde."; + +/* A label for a button used to delete a utility network trace input component or result. */ +"Delete" = "Dzēst"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Pabeigts"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Dublētos sākumpunktus nevar pievienot."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Elementu nevar identificēt."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Kļūda"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Importējot sertifikātu, radās kļūda"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Ielādējot pamatkarti, radās kļūda."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Tiek novērtēti uznirstošie teksti"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Neizdevās iestatīt sākumpunktu"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Elementu rezultāti"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Lauks"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Lauki"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Filtrēt iespējas"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Filtrēt vietas"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Atrast vietu vai adresi"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Frakcija gar malu"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Funkcijas rezultāti"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Multivide"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Režīms"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Nosaukums"; + +/* A label in reference to a specific utility network. */ +"Network" = "Tīkls"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Jauns trasējums"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Nav grāmatatzīmju"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Konfigurācijas nav pieejamas."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Atbilstība netika atrasta."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Rezultāti nav atrasti"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Nav atrasti trasējuma veidi."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Nav atrasts neviens Utility Network."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Nekas nav izvēlēts"; + +/* A trace function output result was not provided. */ +"Not Available" = "Nav pieejams"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "Objekta ID: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "Labi"; + +/* A label in reference to a credential password. */ +"Password" = "Parole"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Ir jānorāda parole"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Lūdzu, ievadiet izvēlētā sertifikāta paroli."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Lūdzu, iestatiet vismaz 1 sākuma novietojumu."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Lūdzu, iestatiet vismaz 2 sākuma novietojumus."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "Uznirstošais novērtējums neizdevās: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Atkārtot ''Meklēt šeit''"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Rezultāti"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Meklēšanas vaicājums"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Izvēlēties grāmatzīmi"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Izvēlieties infrastruktūras objektu"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Vietnes"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Telpiskās atskaites nesaderība."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Sākumpunkti"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Pieskarieties virsmai, lai novietotu scēnu"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Lai skatītu vairāk informācijas, pieskarieties attēlam."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Beigu konfigurācija"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "tests"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "Pamatkartei nav telpiskās atskaites."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "Pamatkarti neizdevās ielādēt nezināma iemesla dēļ."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "Pamatkartei ir telpiskā atskaite, kas nav saderīga ar karti."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "Sertifikāta fails vai parole bija nederīgi."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "Sertifikāta fails bija nederīgs."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "Kartei nav telpiskās atskaites."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "Parole ir nederīga."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "URL nevarēja sasniegt vai tas nesaturēja attēla datus."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Izsekot"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Izsekot %1$lld of %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Izsekošanas konfigurācija"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Mēģināt vēlreiz"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Nenosaukts aktīva veids"; + +/* A label in reference to a credential username. */ +"Username" = "Lietotājvārds"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Vērtība"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Lai piekļūtu, jums ir jāpierrakstās '%@'"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Tālummaiņa"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Tuvināt rezultātu"; + diff --git a/Sources/ArcGISToolkit/Resources/nb.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/nb.lproj/Localizable.strings index d999533e9..b6673608b 100755 --- a/Sources/ArcGISToolkit/Resources/nb.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/nb.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld valgt"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Det kreves et sertifikat for tilgang til innhold på %@."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Legg til ny"; + +/* A section header for advanced options. */ +"Advanced Options" = "Avanserte alternativer"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Alle nettsteder"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Alle inndata og resultater knyttet til sporing vil gå tapt."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Tillat"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Det oppstod en feil under lasting av bildet: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Vedlegg"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Attributter"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Krever godkjenning"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Bokmerker"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Bla gjennom"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Avbryt"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Avbryt punktvalg"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Sertifikat kreves"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Advarsel om sertifikatklarering"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Fjern all resultater"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Farge"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Kompass, med kurs %lld grader %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Fortsett"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Får ikke tilgang til sertifikatfilen."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Fare: Sertifikatet som er utstedt av \"%@\", er ikke signert av en klarert sertifiseringsinstans."; + +/* A label for a button used to delete a utility network trace input component or result. */ "Delete" = "Slett"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Ferdig"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Dupliserte startpunkter kan ikke legges til."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Elementet kunne ikke identifiseres."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Feil"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Feil ved import av sertifikat"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Feil ved lasting av bakgrunnskart."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Evaluerer popup-uttrykk"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Kunne ikke angi noe startpunkt"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Geoobjektresultater"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Felt"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Felt"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Filtrer fasiliteter"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Filtrer steder"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Finn et sted eller en adresse"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Fraksjon langs kant"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Funksjonresultater"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Media"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Modus"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Navn"; + +/* A label in reference to a specific utility network. */ +"Network" = "Nettverk"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Ny sporing"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Ingen bokmerker"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Ingen konfigurasjoner tilgjengelig."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Ingen matcher funnet."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Fant ingen resultater"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Ingen sporingstyper funnet."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Ingen forsyningsnettverk funnet."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Ingen er valgt"; + +/* A trace function output result was not provided. */ +"Not Available" = "Ikke tilgjengelig"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "Objekt-ID: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "OK"; + +/* A label in reference to a credential password. */ +"Password" = "Passord"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Du må angi et passord"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Skriv inn et passord for det valgte sertifikatet."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Angi minst 1 startlokasjon."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Angi minst 2 startlokasjoner."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "Popup-evaluering mislyktes: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Gjenta søk her"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Resultater"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Søkespørring"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Velg et bokmerke"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Velg en fasilitet"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Nettsteder"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Manglende samsvar i romlig referanse."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Startpunkter"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Trykk på en overflate for å plassere scenen"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Trykk på bildet for å få mer informasjon."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Terminalkonfigurasjon"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "test"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "Bakgrunnskartet har ingen romlig referanse."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "Bakgrunnskartet ble ikke lastet inn av en ukjent årsak."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "Bakgrunnskartet har en romlig referanse som er inkompatibel med kartet."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "Sertifikatfilen eller passordet var ugyldig."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "Sertifikatfilen var ugyldig."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "Kartet har ingen romlig referanse."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "Passordet var ugyldig."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "URL-en kunne ikke nås eller inneholdt ingen bildedata."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Spor"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Spor %1$lld av %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Sporingskonfigurasjon"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Prøv på nytt"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Ressurstype uten navn"; + +/* A label in reference to a credential username. */ +"Username" = "Brukernavn"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Verdi"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Du må logge på for å få tilgang til \"%@\""; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Zoom til"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Zoom til resultatet"; + diff --git a/Sources/ArcGISToolkit/Resources/nl.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/nl.lproj/Localizable.strings index 7836c8f0c..c28bce396 100755 --- a/Sources/ArcGISToolkit/Resources/nl.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/nl.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld geselecteerd"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Er is een certificaat nodig voor het openen van content in %@."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Nieuwe toevoegen"; + +/* A section header for advanced options. */ +"Advanced Options" = "Geavanceerde opties"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Alle sites"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Alle traceringsinvoer en resultaten gaan verloren."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Toestaan"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Er is een fout opgetreden bij het laden van de afbeelding: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Bijlagen"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Attributen"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Authenticatie vereist"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Bladwijzers"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Bladeren"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Annuleren"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Startpuntselectie annuleren"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Certificaat vereist"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Waarschuwing vertrouwensniveau certificaat"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Alle resultaten wissen"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Kleur"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Kompas, richting %lld graden %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Doorgaan"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Kan het certificaatbestand niet openen."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Gevaar: het certificaat dat door '%@' wordt verstrekt, is niet ondertekend door een vertrouwde autoriteit."; + +/* A label for a button used to delete a utility network trace input component or result. */ "Delete" = "Verwijderen"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Gereed"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Er kunnen geen dubbele startpunten worden toegevoegd."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Kan het element niet identificeren."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Fout"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Er is een fout opgetreden bij het importeren van het certificaat"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Er is een fout opgetreden bij het laden van de basiskaart."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Bezig met evalueren pop-upexpressies"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Kan startpunt niet instellen"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Resultaten pbject"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Veld"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Velden"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Faciliteiten filteren"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Locaties filteren"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Een plaats of adres zoeken"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Fractie langs rand"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Resultaten functie"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Media"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Modus"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Naam"; + +/* A label in reference to a specific utility network. */ +"Network" = "Netwerk"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Nieuwe tracering"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Geen bladwijzers"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Er zijn geen configuraties beschikbaar."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Kan geen overeenkomsten vinden."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Kan geen resultaten vinden"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Kan geen traceringstypen vinden."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Kan geen nutsvoorzieningen vinden."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Geen geselecteerd"; + +/* A trace function output result was not provided. */ +"Not Available" = "Niet beschikbaar"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "Object-id: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "OK"; + +/* A label in reference to a credential password. */ +"Password" = "Wachtwoord"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Wachtwoord vereist"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Voer een wachtwoord in voor het gekozen certificaat."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Stel minstens 1 startlocatie in."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Stel minstens 2 startlocaties in."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "Pop-upevaluatie is mislukt: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Zoeken hier herhalen"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Resultaten"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Zoekopdracht"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Selecteer een bladwijzer"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Selecteer een faciliteit"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Sites"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Ruimtelijke referenties komen niet overeen."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Startpunten"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Tik op een oppervlak om de scene te plaatsen"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Tik op de afbeelding voor meer informatie."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Configuratie terminal"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "test"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "De basiskaart heeft geen ruimtelijke referentie"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "Kan de basiskaart om onbekende redenen niet laden."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "De basiskaart heeft een ruimtelijke referentie die niet compatibel is met de kaart."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "Het certificaatbestand of wachtwoord is ongeldig."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "Het certificaatbestand is ongeldig."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "De kaart heeft geen ruimtelijke referentie."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "Het wachtwoord is ongeldig."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "Kan de URL niet bereiken of de URL bevat geen beeldgegevens."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Tracering"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Tracering %1$lld van %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Configuratie tracering"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Opnieuw proberen"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Naamloos type activa"; + +/* A label in reference to a credential username. */ +"Username" = "Gebruikersnaam"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Waarde"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Aanmelding is vereist als u '%@' wilt openen."; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Inzoomen op"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Inzoomen op resultaat"; + diff --git a/Sources/ArcGISToolkit/Resources/no.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/no.lproj/Localizable.strings new file mode 100644 index 000000000..b6673608b --- /dev/null +++ b/Sources/ArcGISToolkit/Resources/no.lproj/Localizable.strings @@ -0,0 +1,298 @@ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld valgt"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Det kreves et sertifikat for tilgang til innhold på %@."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Legg til ny"; + +/* A section header for advanced options. */ +"Advanced Options" = "Avanserte alternativer"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Alle nettsteder"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Alle inndata og resultater knyttet til sporing vil gå tapt."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Tillat"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Det oppstod en feil under lasting av bildet: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Vedlegg"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Attributter"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Krever godkjenning"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Bokmerker"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Bla gjennom"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Avbryt"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Avbryt punktvalg"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Sertifikat kreves"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Advarsel om sertifikatklarering"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Fjern all resultater"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Farge"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Kompass, med kurs %lld grader %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Fortsett"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Får ikke tilgang til sertifikatfilen."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Fare: Sertifikatet som er utstedt av \"%@\", er ikke signert av en klarert sertifiseringsinstans."; + +/* A label for a button used to delete a utility network trace input component or result. */ +"Delete" = "Slett"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Ferdig"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Dupliserte startpunkter kan ikke legges til."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Elementet kunne ikke identifiseres."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Feil"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Feil ved import av sertifikat"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Feil ved lasting av bakgrunnskart."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Evaluerer popup-uttrykk"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Kunne ikke angi noe startpunkt"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Geoobjektresultater"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Felt"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Felt"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Filtrer fasiliteter"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Filtrer steder"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Finn et sted eller en adresse"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Fraksjon langs kant"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Funksjonresultater"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Media"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Modus"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Navn"; + +/* A label in reference to a specific utility network. */ +"Network" = "Nettverk"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Ny sporing"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Ingen bokmerker"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Ingen konfigurasjoner tilgjengelig."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Ingen matcher funnet."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Fant ingen resultater"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Ingen sporingstyper funnet."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Ingen forsyningsnettverk funnet."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Ingen er valgt"; + +/* A trace function output result was not provided. */ +"Not Available" = "Ikke tilgjengelig"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "Objekt-ID: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "OK"; + +/* A label in reference to a credential password. */ +"Password" = "Passord"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Du må angi et passord"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Skriv inn et passord for det valgte sertifikatet."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Angi minst 1 startlokasjon."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Angi minst 2 startlokasjoner."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "Popup-evaluering mislyktes: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Gjenta søk her"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Resultater"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Søkespørring"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Velg et bokmerke"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Velg en fasilitet"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Nettsteder"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Manglende samsvar i romlig referanse."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Startpunkter"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Trykk på en overflate for å plassere scenen"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Trykk på bildet for å få mer informasjon."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Terminalkonfigurasjon"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "test"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "Bakgrunnskartet har ingen romlig referanse."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "Bakgrunnskartet ble ikke lastet inn av en ukjent årsak."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "Bakgrunnskartet har en romlig referanse som er inkompatibel med kartet."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "Sertifikatfilen eller passordet var ugyldig."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "Sertifikatfilen var ugyldig."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "Kartet har ingen romlig referanse."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "Passordet var ugyldig."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "URL-en kunne ikke nås eller inneholdt ingen bildedata."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Spor"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Spor %1$lld av %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Sporingskonfigurasjon"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Prøv på nytt"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Ressurstype uten navn"; + +/* A label in reference to a credential username. */ +"Username" = "Brukernavn"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Verdi"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Du må logge på for å få tilgang til \"%@\""; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Zoom til"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Zoom til resultatet"; + diff --git a/Sources/ArcGISToolkit/Resources/pl.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/pl.lproj/Localizable.strings index b07302d6e..965309142 100755 --- a/Sources/ArcGISToolkit/Resources/pl.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/pl.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "Wybrane: %lld"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Certyfikat jest wymagany do uzyskania dostępu do zasobów w %@."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Dodaj nowe"; + +/* A section header for advanced options. */ +"Advanced Options" = "Opcje zaawansowane"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Wszystkie miejsca"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Wszystkie dane wejściowe i wyniki trasowania zostaną utracone."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Zezwalaj"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Wystąpił błąd podczas wczytywania obrazu: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Załączniki"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Atrybuty"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Wymagane uwierzytelnienie"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Zakładki"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Przeglądaj"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Anuluj"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Anuluj wybór punktu początkowego"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Certyfikat jest wymagany"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Ostrzeżenie o zaufaniu certyfikatu"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Wyczyść wszystkie wyniki"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Kolor"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Kompas, kierunek %lld stopni %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Kontynuuj"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Nie można uzyskać dostępu do pliku certyfikatu."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Niebezpieczeństwo: Certyfikat dostarczony przez '%@' nie jest podpisany przez zaufany organ."; + +/* A label for a button used to delete a utility network trace input component or result. */ "Delete" = "Usuń"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Wykonano"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Nie można dodawać zduplikowanych punktów początkowych."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Element nie mógł zostać zidentyfikowany."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Błąd"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Błąd importowania certyfikatu"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Błąd wczytywania mapy bazowej."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Ocena wyrażeń w oknach podręcznych"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Nie udało się ustawić punktu początkowego"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Wyniki dotyczące obiektów"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Pole"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Pola"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Filtruj placówki"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Filtruj miejsca"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Znajdź miejsce lub adres"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Ułamek wzdłuż krawędzi"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Wyniki funkcji"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Multimedia"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Tryb"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Nazwa"; + +/* A label in reference to a specific utility network. */ +"Network" = "Sieć"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Nowe trasowanie"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Brak zakładek"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Brak dostępnych konfiguracji."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Nie znaleziono dopasowań."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Nie znaleziono wyników"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Nie znaleziono typów trasowania."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Nie znaleziono sieci infrastruktury."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Brak wyboru"; + +/* A trace function output result was not provided. */ +"Not Available" = "Niedostępne"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "ID obiektu: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "OK"; + +/* A label in reference to a credential password. */ +"Password" = "Hasło"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Wymagane hasło"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Wprowadź hasło dla wybranego certyfikatu."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Ustaw co najmniej 1 lokalizację początkową."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Ustaw co najmniej 2 lokalizacje początkowe."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "Ocena okna podręcznego nie powiodła się: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Powtórz wyszukiwanie tutaj"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Wyniki"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Zapytanie wyszukiwania"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Wybierz zakładkę"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Wybierz placówkę"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Witryny"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Niezgodność odniesienia przestrzennego."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Punkty początkowe"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Stuknij powierzchnię, aby umieścić scenę"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Dotknij obrazu, aby uzyskać więcej informacji."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Konfiguracja terminala"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "test"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "Mapa bazowa nie ma odniesienia przestrzennego."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "Nie udało się wczytać mapy bazowej z nieznanego powodu."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "Mapa bazowa ma odniesienie przestrzenne, które jest niezgodne z mapą."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "Plik certyfikatu lub hasło były nieprawidłowe."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "Plik certyfikatu był nieprawidłowy."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "Mapa nie zawiera odniesienia przestrzennego"; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "Hasło jest nieprawidłowe."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "Nie można uzyskać adresu URL lub nie zawiera on danych obrazu."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Trasuj"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Trasowanie %1$lld z %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Konfiguracja trasowania"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Spróbuj ponownie"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Nienazwany typ zasobów"; + +/* A label in reference to a credential username. */ +"Username" = "Nazwa użytkownika"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Wartość"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Musisz się zalogować, aby uzyskać dostęp '%@'"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Powiększ do"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Powiększ do wyników"; + diff --git a/Sources/ArcGISToolkit/Resources/pt-BR.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/pt-BR.lproj/Localizable.strings index 96f80fa44..657d0806a 100755 --- a/Sources/ArcGISToolkit/Resources/pt-BR.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/pt-BR.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld selecionado"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Um certificado é exigido para acessar conteúdo no %@."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Adicionar novo"; + +/* A section header for advanced options. */ +"Advanced Options" = "Opções Avançadas"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Todos os sites"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Todas as entradas e resultados do traçado serão perdidos."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Permitir"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Ocorreu um erro ao carregar a imagem: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Anexos"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Atributos"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Autenticação Exigida"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Marcadores"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Procurar"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Cancelar"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Cancelar seleção do ponto inicial"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Certificado Exigido"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Aviso de Confiança de Certificado"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Apagar todos resultados"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Cor"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Bússola, direção %lld graus %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Continuar"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Não foi possível acessar o arquivo do certificado."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Perigoso: O certificado fornecido por '%@' não está assinado por uma autoridade confiável."; + +/* A label for a button used to delete a utility network trace input component or result. */ "Delete" = "Excluir"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Concluir"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Pontos de partida duplicados não podem ser adicionados."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Não foi possível identificar o elemento."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Erro"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Erro ao importar certificado"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Erro ao carregar mapa base."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Avaliando expressões de pop-up"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Falha ao definir ponto de partida"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Resultados da Feição"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Campo"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Campos"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Filtrar instalações"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Filtrar site"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Encontrar um lugar ou endereço"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Fração ao Longo da Borda"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Resultados da Função"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Mídia"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Modo"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Nome"; + +/* A label in reference to a specific utility network. */ +"Network" = "Rede"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Novo traçado"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Nenhum marcador"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Nenhuma configuração disponível."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Nenhum correspondente encontrado."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Nenhum resultado encontrado"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Nenhum tipo de traçado encontrado."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Nenhuma rede de serviços públicos encontrada."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Nenhum selecionado"; + +/* A trace function output result was not provided. */ +"Not Available" = "Não disponível"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "Object ID: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "OK"; + +/* A label in reference to a credential password. */ +"Password" = "Senha"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Senha Exigida"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Insira uma senha para o certificado escolhido."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Defina pelo menos 1 local inicial."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Defina pelo menos 2 locais iniciais."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "Falha de avaliação de pop-up: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Repetir Pesquisa Aqui"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Resultados"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Pesquisar Consulta"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Selecione um marcador"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Selecione uma instalação"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Sites"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Incompatibilidade de referência espacial."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Pontos Iniciais"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Toque em uma superfície para posicionar a cena"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Toque na imagem para mais informações."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Configuração do Terminal"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "testar"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "O mapa base não tem uma referência espacial."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "O mapa base falhou ao carregar por um motivo desconhecido."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "O mapa base tem uma referência espacial incompatível com o mapa."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "O arquivo de certificado ou a senha eram inválidos."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "O arquivo de certificado era inválido."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "O mapa não tem referência espacial."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "A senha era inválida."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "Não foi possível alcançar a URL ou não contém dados de imagem."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Traçado"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Traçar %1$lld de %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Configuração do Traçado"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Tentar Novamente"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Tipo de Ativo Sem Nome"; + +/* A label in reference to a credential username. */ +"Username" = "Nome de Usuário"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Valor"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Você deve entrar para acessar '%@'"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Zoom Para"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Zoom para resultado"; + diff --git a/Sources/ArcGISToolkit/Resources/pt-PT.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/pt-PT.lproj/Localizable.strings index dc7897dac..b95ae6db0 100755 --- a/Sources/ArcGISToolkit/Resources/pt-PT.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/pt-PT.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld selecionado(s)"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "É necessário um certificado para aceder a conteúdos em %@."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Adicionar novo"; + +/* A section header for advanced options. */ +"Advanced Options" = "Opções Avançadas"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Todos os sites"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Todas as entradas e resultados do rastreio serão perdidos."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Permitir"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Ocorreu um erro ao carregar a imagem: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Anexos"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Atributos"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Autenticação Necessária"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Marcadores"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Procurar"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Cancelar"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Cancelar a seleção do ponto de partida"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Certificado Necessário"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Aviso de Fiabilidade do Certificado"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Limpar todos os resultados"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Cor"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Bússola, direção %lld graus %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Continuar"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Não foi possível aceder ao ficheiro de certificado."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Perigo: o certificado fornecido por '%@' não está assinado por uma autoridade fidedigna."; + +/* A label for a button used to delete a utility network trace input component or result. */ "Delete" = "Eliminar"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Concluído"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Não é possível adicionar pontos de partida duplicados."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Não foi possível identificar o elemento."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Erro"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Erro ao importar o certificado"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Erro ao carregar o mapa base."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "A avaliar expressões pop-up"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Falha ao definir o ponto de partida"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Resultados de Elementos"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Campo"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Campos"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Filtrar instalações"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Filtrar sites"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Encontrar um local ou endereço"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Fração ao Longo da Aresta"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Resultados da Função"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Multimédia"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Modo"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Nome"; + +/* A label in reference to a specific utility network. */ +"Network" = "Rede"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Novo rastreio"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Sem marcadores"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Não existem configurações disponíveis."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Não foram encontradas correspondências."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Nenhum resultado encontrado"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Não foram encontrados tipos de rastreio."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Não foram encontradas redes de serviços públicos."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Nenhum selecionado"; + +/* A trace function output result was not provided. */ +"Not Available" = "Não Disponível"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "ID de Objeto: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "OK"; + +/* A label in reference to a credential password. */ +"Password" = "Palavra-passe"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Palavra-Passe Obrigatória"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Introduza uma palavra-passe para o certificado selecionado."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Defina pelo menos 1 localização de partida."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Defina pelo menos 2 localizações de partida."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "A avaliação de pop-up falhou: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Repetir Pesquisa Aqui"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Resultados"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Consulta de Pesquisa"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Selecione um marcador"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Selecione uma instalação"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Sites"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Incompatibilidade da referência espacial."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Pontos de Partida"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Toque numa superfície para colocar a cena"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Toque na imagem para obter mais informações."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Configuração de Terminal"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "teste"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "O mapa base não tem uma referência espacial."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "O carregamento do mapa base falhou por uma razão desconhecida."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "O mapa base tem uma referência espacial que é incompatível com o mapa."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "A palavra-passe ou o ficheiro de certificado era inválido."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "O ficheiro de certificado era inválido."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "O mapa não tem uma referência espacial."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "A palavra-passe era inválida."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "Não foi possível aceder ao URL ou este não continha dados de imagem."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Rastrear"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Rastrear %1$lld de %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Configuração de Rastreio"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Tente Novamente"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Tipo de Ativo Sem Nome"; + +/* A label in reference to a credential username. */ +"Username" = "Nome de utilizador"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Valor"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Tem de iniciar sessão para aceder a '%@'"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Zoom Para"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Aumentar zoom até ao resultado"; + diff --git a/Sources/ArcGISToolkit/Resources/ro.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/ro.lproj/Localizable.strings index dd4c88c6b..2337dc298 100755 --- a/Sources/ArcGISToolkit/Resources/ro.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/ro.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ -"Delete" = "Ştergere"; +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld selectat"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Este necesar un certificat pentru a accesa conținutul pe %@."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Adăugare nou"; + +/* A section header for advanced options. */ +"Advanced Options" = "Opțiuni avansate"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Toate site-urile"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Toate intrările și rezultatele de urmărire vor fi pierdute."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Permiteți"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "S-a produs o eroare la încărcarea imaginii: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Fișiere atașate"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Atribute"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Autentificare necesară"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Semne de carte"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Răsfoire"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Anulare"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Anulare selecție punct de pornire"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Certificat necesar"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Avertizare încredere certificat"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Golire toate rezultatele"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Culoare"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Busolă, direcție %lld grade %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Continuare"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Nu s-a putut accesa fișierul certificat."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Periculos: certificatul furnizat de „%@” nu este semnat de o autoritate de încredere."; + +/* A label for a button used to delete a utility network trace input component or result. */ +"Delete" = "Ștergere"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Gata"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Punctele de pornire duplicat nu pot fi adăugate."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Elementul nu a putut fi identificat."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Eroare"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Eroare la importarea certificatului"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Eroare la încărcarea hărții de fundal."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Se evaluează expresiile pop-up"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Nu s-a reușit setarea punctului de pornire"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Rezultate obiecte spațiale"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Câmp"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Câmpuri"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Filtrare facilități"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Filtrare site-uri"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Găsire loc sau adresă"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Fracție de-a lungul marginii"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Rezultate funcție"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Media"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Mod"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Nume"; + +/* A label in reference to a specific utility network. */ +"Network" = "Reţea"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Urmărire nouă"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Fără semne de carte"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Nu există configurări disponibile."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Nu s-au găsit asocieri."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Nu a fost găsit niciun rezultat"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Nu s-au găsit tipuri de urmăriri."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Nu s-au găsit rețele de utilități."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Niciunul selectat"; + +/* A trace function output result was not provided. */ +"Not Available" = "Indisponibil"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "ID obiect: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "OK"; + +/* A label in reference to a credential password. */ +"Password" = "Parolă"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Parola este necesară"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Introduceți parola pentru certificatul ales."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Setați cel puțin 1 locație de pornire."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Setați cel puțin 2 locații de pornire."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "Evaluarea popup a eșuat: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Repetați căutarea aici"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Rezultate"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Interogare căutare"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Selectarea unui semn de carte"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Selectați un punct de servicii"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Site-uri"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Neconcordanță referință spațială."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Puncte de pornire"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Atingeți o suprafață pentru a amplasa o scenă"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Atingeți pe imagine pentru mai multe informații."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Configurație terminal"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "test"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "Harta de fundal nu are o referință spațială."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "Harta de fundal nu s-a putut încărca dintr-un motiv necunoscut."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "Harta de fundal are o referință spațială care este incompatibilă cu harta."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "Fișierul certificat sau parola a fost nevalidă."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "Fișierul certificat a fost nevalid."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "Harta nu are o referință spațială."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "Parola a fost nevalidă."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "URL-ul nu a putut fi contactat sau nu conținea date de imagine."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Urmărire"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Urmărire %1$lld din %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Configurare urmărire"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Încercați din nou"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Tip de activ fără nume"; + +/* A label in reference to a credential username. */ +"Username" = "Nume de utilizator"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Valoare"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Trebuie să vă conectați pentru a accesa „%@”"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Transfocare către"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Transfocare la rezultat"; + diff --git a/Sources/ArcGISToolkit/Resources/ru.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/ru.lproj/Localizable.strings index 771988fb9..7016bf36a 100755 --- a/Sources/ArcGISToolkit/Resources/ru.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/ru.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld выбрано"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Для доступа к ресурсам на %@ необходим сертификат"; + +/* A button to add new utility trace starting points. */ +"Add new" = "Добавить новый"; + +/* A section header for advanced options. */ +"Advanced Options" = "Дополнительные опции"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Все сайты"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Все входные данные и результаты трассировки будут потеряны."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Разрешить"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Произошла ошибка при загрузке изображения: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Вложения"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Атрибуты"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Необходима аутентификация"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Закладки"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Обзор"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Отмена"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Отменить выборку стартовой точки"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Требуется сертификат"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Предупреждение сертификата доверия"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Очистить все результаты"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Цвет"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Компас, направление %lld градусы %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Продолжить"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Не удалось получить доступ к файлу сертификата."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Опасно: сертификат, предоставленный '%@', не подписан доверенным органом."; + +/* A label for a button used to delete a utility network trace input component or result. */ "Delete" = "Удалить"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Готово"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Дублирующиеся начальные точки не могут быть добавлены."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Невозможно идентифицировать элемент."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Ошибка"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Ошибка импорта сертификата"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Ошибка загрузки базовой карты."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Оценка всплывающих выражений"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Не удалось установить начальную точку"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Результаты объекта"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Поле"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Поля"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Фильтр объектов"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Фильтр участков"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Найти адрес или место"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Дробление вдоль ребра"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Результаты функции"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Медиа"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Режим"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Имя"; + +/* A label in reference to a specific utility network. */ +"Network" = "Сеть"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Новая трассировка"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Нет закладок"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Нет доступных конфигураций."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Совпадения не найдены."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Результаты не найдены"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Типы трассировки не найдены."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Инженерные сети не найдены"; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Нет выбранных"; + +/* A trace function output result was not provided. */ +"Not Available" = "Недоступно"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "Object ID: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "OK"; + +/* A label in reference to a credential password. */ +"Password" = "Пароль"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Требуется пароль"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Введите пароль для выбранного сертификата."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Укажите хотя бы одну начальную точку."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Укажите хотя бы 2 начальных точки."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "Оценка всплывающих окон не удалась: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Повторить поиск здесь"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Результаты"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Запрос поиска"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Выберите закладку"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Выбрать помещение"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Сайты"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Не совпадает пространственная привязка."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Начальные точки"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Коснитесь поверхности, чтобы разместить сцену"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Нажмите на изображении для получения дополнительной информации."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Настройка терминала"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "тест"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "Базовая карта не имеет пространственной привязки"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "Не удалось загрузить базовую карту по неизвестной причине."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "Пространственная привязка базовой карты несовместима с картой."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "Файл сертификата или пароль недопустим."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "Файл сертификата недопустим."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "Карта не имеет пространственной привязки."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "Недействительный пароль."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "URL-адрес недоступен или не содержит данных изображения."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Трассировать"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Трассировать %1$lld из %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Конфигурация трассировки"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Попробуйте еще раз"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Тип устройства без названия"; + +/* A label in reference to a credential username. */ +"Username" = "Имя пользователя"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Значение"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Для доступа к '%@' необходимо выполнить вход"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Приблизить к"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Приблизить к результату"; + diff --git a/Sources/ArcGISToolkit/Resources/sk.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/sk.lproj/Localizable.strings index d467703e3..3441ab48d 100644 --- a/Sources/ArcGISToolkit/Resources/sk.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/sk.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld vybraných"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Pre prístup k obsahu na %@ je vyžadovaný certifikát."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Pridať nové"; + +/* A section header for advanced options. */ +"Advanced Options" = "Pokročilé nastavenia"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Všetky lokality"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Všetky vstupy a výsledky trasovania budú stratené."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Povoliť"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Pri načítavaní obrázku sa vyskytla chyba:%@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Prílohy"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Atribúty"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Vyžaduje sa overenie"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Záložky"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Prehľadať"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Zrušiť"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Zrušiť výber počiatočného bodu"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Vyžadový certifikát"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Upozornenie na dôveryhodnosť certifikátu"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Vyčistiť všetky výsledky"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Farba"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Kompas, kurz %lld stupňov %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Pokračovať"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Nepodarilo sa získať prístup k súboru certifikátu."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Nebezpečné: Certifikát poskytnutý '%@' nie je podpísaný dôveryhodnou autoritou."; + +/* A label for a button used to delete a utility network trace input component or result. */ "Delete" = "Zmazať"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Hotovo"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Nemožno pridať duplicitné počiatočné body."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Element sa nepodarilo identifikovať."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Chyba"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Chyba pri importovaní certifikátu"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Chyba pri načítavaní podkladovej mapy."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Vyhodnocovanie kontextových výrazov"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Nepodarilo sa nastaviť počiatočný bod"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Výsledky prvkov"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Pole"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Polia"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Filtrovať zariadenia"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Filtrovať lokality"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Nájsť miesto alebo adresu"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Frakcia pozdĺž hrany"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Výsledky funkcie"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Médiá"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Režim"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Názov"; + +/* A label in reference to a specific utility network. */ +"Network" = "Sieť"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Nové trasovanie"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Žiadne záložky"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Nie sú dostupné žiadne konfigurácie."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Neboli nájdené žiadne zhody."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Neboli nájdené žiadne výsledky"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Neboli nájdené žiadne typy trasovania."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Neboli nájdené žiadne utility siete."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Žiadne vybrané"; + +/* A trace function output result was not provided. */ +"Not Available" = "Nie je k dispozícii"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "ID objektu: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "OK"; + +/* A label in reference to a credential password. */ +"Password" = "Heslo"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Vyžaduje sa heslo"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Prosím vložte heslo pre zvolený certifikát."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Prosím zvoľte aspoň 1 počiatočnú lokalitu."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Prosím zvoľte aspoň 2 počiatočné lokality."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "Vyhodnotenie kontextového okna zlyhalo: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Opakujte vyhľadávanie tu"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Výsledky"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Vyhľadávací dopyt"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Vybrať záložku"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Vybrať zariadenie"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Lokality"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Nezhoda priestorových referencii."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Počiatočné body"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Ťuknutím na povrch umiestnite scénu"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Ťuknite na obrázok pre viac informácii."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Konfigurácia terminálu"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "test"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "Podkladová mapa neobsahuje priestorovú referenciu."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "Podkladovú mapu sa z neznámych dôvodov nepodarilo načítať."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "Podkladová mapa obsahuje priestorovú referenciu, ktorá nie je kompatibilná s mapou."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "Súbor certifikátu alebo heslo bolo neplatné."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "Súbor certifikátu bol neplatný."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "Mapa neobsahuje priestorovú referenciu."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "Heslo bolo neplatné."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "URL adresa nebola dostupná alebo neobsahovala obrazové dáta."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Trasovať"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Trasovať %1$lld of %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Konfigurácia trasovania"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Skúste to znova"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Nepomenovaný typ prostriedku"; + +/* A label in reference to a credential username. */ +"Username" = "Používateľské meno"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Hodnota"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Pre prístup k '%@' sa musíte prihlásiť"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Priblížiť na"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Priblížiť na výsledok"; + diff --git a/Sources/ArcGISToolkit/Resources/sl.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/sl.lproj/Localizable.strings new file mode 100644 index 000000000..373569884 --- /dev/null +++ b/Sources/ArcGISToolkit/Resources/sl.lproj/Localizable.strings @@ -0,0 +1,298 @@ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "Izbran %lld"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Za dostop do vsebine na %@ je potreben certifikat."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Dodaj novo"; + +/* A section header for advanced options. */ +"Advanced Options" = "Napredne možnosti"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Vsa spletna mesta"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Vse sledi vnosov in rezultatov bodo izgubljene."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Dovoli"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Med nalaganjem slike: %@ je prišlo do napake."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Priloge"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Atributi"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Zahtevana je avtentikacija pristnosti"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Zaznamki"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Prebrskaj"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Prekliči"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Prekliči izbiro začetne točke"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Certifikat je obvezen"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Opozorilo glede zaupanja certifikatu"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Počisti vse rezultate"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Barva"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Kompas, usmerjenost %lld stopinj %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Nadaljuj"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Dostop do datoteke certifikata ni mogoč."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Nevarno: certifikata, ki ga zagotavlja '%@', ni podpisala zaupanja vredna ustanova."; + +/* A label for a button used to delete a utility network trace input component or result. */ +"Delete" = "Izbriši"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Končano"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Podvojenih začetnih točk ni mogoče dodati."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Elementa ni bilo mogoče prepoznati."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Napaka"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Napaka pri uvažanju certifikata"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Napaka pri nalaganju temeljne karte."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Ovrednotenje pojavnih izrazov"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Začetne točke ni bilo mogoče nastaviti"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Rezultati geoobjektov"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Polje"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Polja"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Filtriranje lokacij"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Filtriranje spletnih mest"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Najdi kraj ali naslov"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Delež ob robu"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Rezultati funkcije"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Mediji"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Način"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Ime"; + +/* A label in reference to a specific utility network. */ +"Network" = "Omrežje"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Nova sled"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Ni zaznamkov"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Na voljo ni nobena konfiguracija."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Ni najdenih zadetkov."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Ni najdenih rezultatov"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Ni najdenih tipov sledi."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Ni najdenih pomožnih omrežij."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Nič ni izbrano"; + +/* A trace function output result was not provided. */ +"Not Available" = "Ni na voljo"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "ID objekta: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "V redu"; + +/* A label in reference to a credential password. */ +"Password" = "Geslo"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Zahtevano je geslo"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Vnesite geslo za izbrani certifikat."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Nastavite vsaj 1 začetno lokacijo."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Nastavite vsaj 2 začetni lokaciji."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "Ovrednotenje pojavnega okna ni uspelo: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Ponovi iskanje tukaj"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Rezultati"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Iskalna poizvedba"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Izberi zaznamek"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Izberi objekt"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Spletna mesta"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Neujemanje koordinatnega sistema."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Začetne točke"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Dotaknite se površine, da postavite prizor"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Za več informacij tapnite na sliko."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Konfiguracija terminala"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "test"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "Temeljna karta nima koordinatnega sistema."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "Temeljna karta se ni mogla naložiti zaradi neznanega razloga."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "Temeljna karta ima koordinatni sistem, ki ni združljiv s karto."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "Datoteka certifikata ali geslo je bilo neveljavno."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "Datoteka certifikata ni bila veljavna."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "Karta nima koordinatnega sistema."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "Geslo je bilo neveljavno."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "URL-ja ni bilo mogoče doseči oziroma ni vseboval podatkov o sliki."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Sled"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Sled %1$lld od %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Konfiguracija sledi"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Poskusite znova"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Neimenovani tip sredstva"; + +/* A label in reference to a credential username. */ +"Username" = "Uporabniško ime"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Vrednost"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Za dostop do '%@' se morate prijaviti"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Povečaj na"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Približaj na rezultat"; + diff --git a/Sources/ArcGISToolkit/Resources/sr.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/sr.lproj/Localizable.strings new file mode 100644 index 000000000..b35e7f587 --- /dev/null +++ b/Sources/ArcGISToolkit/Resources/sr.lproj/Localizable.strings @@ -0,0 +1,298 @@ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld odabrano"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Sertifikat je potreban za pristup na %@."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Dodaj novi"; + +/* A section header for advanced options. */ +"Advanced Options" = "Napredne opcije"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Svi sajtovi"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Svi ulazi za praćenje i rezultati praćenja će biti izgubljeni."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Dozvoli"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Došlo je do greške prilikom učitavanja slike: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Prilozi"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Atributi"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Potvrda identiteta je obavezna"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Obeleživači"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Pregledanje"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Otkaži"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Otkaži selekciju početne tačke"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Potreban je sertifikat"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Upozorenje o poverenju sertifikatu"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Obriši rezultate"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Boja"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Kompas, pravac %lld stepeni %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Nastavi"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Nije moguće pristupiti datoteci sertifikata."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Opasno: Sertifikat koji je obezbeđen '%@' nije potpisan od strane pouzdanog tela."; + +/* A label for a button used to delete a utility network trace input component or result. */ +"Delete" = "Izbriši"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Završeno"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Ne mogu se dodati duple početne tačke."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Element nije mogao da se definiše."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Greška"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Greška pri uvozu sertifikata"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Greška pri učitavanju pozadinske mape."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Ocenjivanje iskačućih izraza"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Neuspešno postavljanje početnih tačaka"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Rezultati Funkcionalnosti"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Polje"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Polja"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Filterisanje objekata"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Filterisanje sajtova"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Pronađi mesto ili adresu"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Razlomak duž ivice"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Rezultati funkcije"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Mediji"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Režim"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Naziv"; + +/* A label in reference to a specific utility network. */ +"Network" = "Mreža"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Novo praćenje"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Bez obeleživača"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Nije dostupna konfiguracija."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Stavke koje se podudaraju nisu pronađene."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Nema pronađenih rezultata"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Nije pronađen nijedan tip praćenja."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Nije pronađena komunalna mreža."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Ništa nije izabrano"; + +/* A trace function output result was not provided. */ +"Not Available" = "Nije dostupno"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "ID objekta: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "U REDU"; + +/* A label in reference to a credential password. */ +"Password" = "Lozinka"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Lozinka je obavezna"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Molimo unesite lozinku za odabrani sertifikat."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Molimo odaberite najmanje 1 početnu lokaciju."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Molimo odaberite najmanje 2 početne lokacije."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "Iskačuća evaluacija neuspešna: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Ponovite pretragu ovde"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Rezultati"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Upit za pretragu"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Izaberite obeleživač"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Izaberite objekat"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Sajtovi"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Nepodudaranje prostorne reference."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Početne tačke"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Dodirnite površinu da postavite scenu"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Za više detalja, kliknite na sliku."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Konfiguracija terminala"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "test"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "Osnovna mapa nema prostornu referencu"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "Učitavanje pozadinske mape nije uspelo iz nepoznatog razloga."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "Osnovna mapa ima prostornu referencu koja nije kompatibilna sa mapom."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "Sertifikat datoteke ili lozinka su nevažeći."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "Nevažeća lozinka sertifikata."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "Osnovna mapa nema prostornu referencu"; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "Nevažeća lozinka."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "Nije moguće pristupiti URL adresi ili ne sadrži podatke o slici."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Praćenje"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Praćenje %1$lld od %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Konfiguracija praćenja"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Pokušajte ponovo"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Neimenovani tip imovine"; + +/* A label in reference to a credential username. */ +"Username" = "Korisničko ime"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Vrednost"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Morate se prijaviti da pristupite '%@'"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Zumiraj do"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Zumirajte na rezultat"; + diff --git a/Sources/ArcGISToolkit/Resources/sv.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/sv.lproj/Localizable.strings index 9f5ce0d25..cb6809ed5 100755 --- a/Sources/ArcGISToolkit/Resources/sv.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/sv.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld har valts"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Ett certifikat krävs för att komma åt innehållet på %@."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Lägg till ny"; + +/* A section header for advanced options. */ +"Advanced Options" = "Avancerade alternativ"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Alla webbplatser"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Alla spårningsindata och resultat går förlorade."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Tillåt"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Ett fel uppstod vid inläsning av bilden: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Bilagor"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Attribut"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Autentisering krävs"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Bokmärken"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Bläddra"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Avbryt"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Avbryt val av startpunkt"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Certifikat krävs"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Certifikatvarning"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Rensa alla resultat"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Färg"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Kompass, riktning %lld grader %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Fortsätt"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Det gick inte att komma åt certifikatfilen."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Farligt: Certifikatet som tillhandahålls av '%@' är inte signerat av en betrodd utfärdare."; + +/* A label for a button used to delete a utility network trace input component or result. */ "Delete" = "Ta bort"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Klart"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Duplicerade startpunkter kan inte läggas till."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Element kunde inte identifieras."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Fel"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Fel vid import av certifikat"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Fel vid inläsning av baskarta."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Utvärdera popup-uttryck"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Det gick inte att ange startpunkt"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Geoobjektresultat"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Fält"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Fält"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Filtrera inrättningar"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Filtrera webbplatser"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Hitta en plats eller adress"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Bråkdel längs kant"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Funktionsresultat"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Medier"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Läge"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Namn"; + +/* A label in reference to a specific utility network. */ +"Network" = "Nätverk"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Nytt spår"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Inga bokmärken"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Inga konfigurationer tillgängliga."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Inga matchningar hittades."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Inga resultat hittades"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Inga spårningstyper hittades."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Inga infrastruktursnätverk hittades."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Inget har valts"; + +/* A trace function output result was not provided. */ +"Not Available" = "Inte tillgänglig"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "Objekt-ID: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "OK"; + +/* A label in reference to a credential password. */ +"Password" = "Lösenord"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Lösenord är obligatoriskt"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Ange ett lösenord för det valda certifikatet."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Välj minst 1 startplats."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Välj minst 2 startplatser."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "Popup-utvärdering misslyckades: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Upprepa sökning här"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Resultat"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Sökfråga"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Välj ett bokmärke"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Välj en anläggning"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Webbplatser"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Spatial referens matchar inte."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Startpunkter"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Tryck på en yta för att placera scenen"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Tryck på bilden för mer information."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Terminalkonfiguration"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "test"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "Baskartan saknar spatial referens."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "Det gick inte att läsa in baskartan av okänd anledning."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "Baskartan har en spatial referens som är inkompatibel med kartan."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "Certifikatfilen eller lösenordet var ogiltig(t)."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "Certifikatfilen var ogiltig."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "Kartan saknar spatial referens."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "Lösenordet var ogiltigt."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "URL:en kunde inte nås eller innehöll inga bilddata."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Spåra"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Spåra %1$lld av %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Spårningskonfiguration"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Försök igen"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Namnlös resurstyp"; + +/* A label in reference to a credential username. */ +"Username" = "Användarnamn"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Värde"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Du måste logga in för att få åtkomst till '%@'"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Zooma till"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Zooma till resultat"; + diff --git a/Sources/ArcGISToolkit/Resources/th.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/th.lproj/Localizable.strings index b3b49f601..da43586cd 100755 --- a/Sources/ArcGISToolkit/Resources/th.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/th.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld ที่เลือก"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "จำเป็นต้องใช้ใบรับรองในการเข้าถึงเนื้อหาบน %@"; + +/* A button to add new utility trace starting points. */ +"Add new" = "เพิ่มรายการใหม่"; + +/* A section header for advanced options. */ +"Advanced Options" = "ตัวเลือกขั้นสูง"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "ไซต์ทั้งหมด"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "อินพุทและผลลัพธ์การติดตามทั้งหมดจะสูญหาย"; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "อนุญาต"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "เกิดข้อผิดพลาดขณะโหลดภาพ: %@"; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "เอกสารแนบ"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "ข้อมูลคุณลักษณะ"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "จำเป็นต้องรับรองความถูกต้อง"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "บุ๊คมาร์ค"; + +/* A label for a button to open the system file browser. */ +"Browse" = "เรียกดู"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "ยกเลิก"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "ยกเลิกการเลือกจุดเริ่มต้น"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "จำเป็นต้องใช้ใบรับรอง"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "คำเตือนการเชื่อถือใบรับรอง"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "ล้างผลลัพธ์ทั้งหมด"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "สี"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "เข็มทิศ, ทิศทาง %lld องศา %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "ดำเนินการต่อ"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "ไม่สามารถเข้าถึงไฟล์ใบรับรองได้"; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "อันตราย: ใบรับรองที่ระบุโดย '%@' ไม่มีลายเซ็นของหน่วยงานที่เชื่อถือได้"; + +/* A label for a button used to delete a utility network trace input component or result. */ "Delete" = "ลบ"; + +/* A button to close the bookmark selection menu. */ +"Done" = "สำเร็จ"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "ไม่สามารถเพิ่มจุดเริ่มต้นซ้ำได้"; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "ไม่สามารถระบุองค์ประกอบได้"; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "ข้อผิดพลาด"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "เกิดข้อผิดพลาดขณะนำเข้าใบรับรอง"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "เกิดข้อผิดพลาดขณะโหลดแผนที่ฐาน"; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "กำลังประเมินนิพจน์ป็อปอัพ"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "ตั้งค่าจุดเริ่มต้นไม่สำเร็จ"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "ผลลัพธ์ฟีเจอร์"; + +/* A field in a set of data contained in a popup. */ +"Field" = "ฟิลด์"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "ฟิลด์"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "กรองสิ่งอำนวยความสะดวก"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "กรองไซต์"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "ค้นหาสถานที่หรือที่อยู่"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "เศษส่วนตามแนวขอบ"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "ผลลัพธ์ฟังก์ชัน"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "มีเดีย"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "โหมด"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "ชื่อ"; + +/* A label in reference to a specific utility network. */ +"Network" = "เครือข่าย"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "การติดตามใหม่"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "ไม่มีบุ๊กมาร์ก"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "ไม่มีการกำหนดค่าที่พร้อมใช้งาน"; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "ไม่พบการจับคู่ที่ตรงกัน"; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "ไม่พบผลลัพธ์"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "ไม่พบประเภทการติดตาม"; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "ไม่พบเครือข่ายสาธารณูปโภค"; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "ไม่ได้เลือก"; + +/* A trace function output result was not provided. */ +"Not Available" = "ไม่พร้อมใช้งาน"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "ID วัตถุ: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "ตกลง"; + +/* A label in reference to a credential password. */ +"Password" = "รหัสผ่าน"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "จำเป็นต้องใช้รหัสผ่าน"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "โปรดป้อนรหัสผ่านสำหรับใบรับรองที่เลือก"; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "โปรดตั้งค่าอย่างน้อย 1 ตำแหน่งเริ่มต้น"; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "โปรดตั้งค่าอย่างน้อย 2 ตำแหน่งเริ่มต้น"; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "ประเมินผลป็อปอัพไม่สำเร็จ: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "ทำซ้ำการค้นหาที่นี่"; + +/* A label for a button to show utility network trace results. */ +"Results" = "ผลลัพธ์"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "คิวรีการค้นหา"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "เลือกบุ๊กมาร์ก"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "เลือกสิ่งอำนวยความสะดวก"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "เว็บไซต์"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "การอ้างอิงเชิงพื้นที่ไม่ตรงกัน"; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "จุดเริ่มต้น"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "แตะที่พื้นผิวเพื่อวางซีน"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "แตะบนภาพเพื่อดูข้อมูลเพิ่มเติม"; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "การกำหนดค่าเทอร์มินัล"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "ทดสอบ"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "แผนที่ฐานไม่มีการอ้างอิงเชิงพื้นที่"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "โหลดแผนที่ฐานไม่สำเร็จเนื่องจากเหตุผลที่ไม่ทราบ"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "แผนที่ฐานมีการอ้างอิงเชิงพื้นที่ซึ่งเข้ากันไม่ได้กับแผนที่"; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "ไฟล์ใบรับรองหรือรหัสผ่านใช้งานไม่ได้"; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "ไฟล์ใบรับรองใช้งานไม่ได้"; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "แผนที่ไม่มีการอ้างอิงเชิงพื้นที่"; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "รหัสผ่านใช้งานไม่ได้"; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "ไม่สามารถเข้าถึง URL ได้ หรือไม่มีข้อมูลภาพ"; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "การติดตาม"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "ติดตาม %1$lld จาก %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "การกำหนดค่าการติดตาม"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "ลองอีกครั้ง"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "ประเภทแอสเซ็ทที่ไม่มีชื่อ"; + +/* A label in reference to a credential username. */ +"Username" = "ชื่อผู้ใช้"; + +/* A value in a set of data contained in a popup. */ +"Value" = "ค่า"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "คุณต้องลงชื่อเข้าใช้เพื่อเข้าถึง '%@'"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "ซูมไปยัง"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "ซูมไปยังผลลัพธ์"; + diff --git a/Sources/ArcGISToolkit/Resources/tr.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/tr.lproj/Localizable.strings index 84c160749..3e6eef796 100755 --- a/Sources/ArcGISToolkit/Resources/tr.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/tr.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld seçildi"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "%@ üzerindeki içeriğe erişmek için bir sertifika gerekiyor."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Yeni ekle"; + +/* A section header for advanced options. */ +"Advanced Options" = "Gelişmiş Seçenekler"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Tüm siteler"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Tüm izleme girişleri ve sonuçları kaybedilecek."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "İzin ver"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Görüntü yüklenirken bir hata oluştu: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Ekler"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Öznitelikler"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Kimlik Doğrulama Gerekiyor"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Yer imleri"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Gözat"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "İptal"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Başlangıç noktası seçimini iptal et"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Sertifika Gerekli"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Sertifika Güven Uyarısı"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Tüm sonuçları temizle"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Renk"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Pusula, başlık %lld derece %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Devam et"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Sertifika dosyasına erişilemedi."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Tehlike: '%@' tarafından sağlanan sertifika güvenilir bir otorite tarafından imzalanmamış."; + +/* A label for a button used to delete a utility network trace input component or result. */ "Delete" = "Sil"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Tamam"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Yinelenen başlangıç noktaları eklenemez."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Öge tanımlanamadı."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Hata"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Sertifikayı içe aktarırken hata"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Altlık harita yüklenirken hata."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Açılır menü ifadeleri değerlendiriliyor"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Başlangıç noktası ayarlanamadı"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Detay Sonuçları"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Alan"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Alanlar"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Tesisleri filtrele"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Siteleri filtrele"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Bir yer veya adres bul"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Kenar Boyunca Kesir"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "İşlev Sonuçları"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Ortam"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Mod"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Adı"; + +/* A label in reference to a specific utility network. */ +"Network" = "Ağ"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Yeni iz"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Yer işareti yok"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Kullanılabilir yapılandırma yok."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Eşleşme bulunamadı."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Herhangi bir sonuç bulunamadı"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "İz türü bulunamadı."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Utility network bulunamadı."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Hiçbiri seçilmedi"; + +/* A trace function output result was not provided. */ +"Not Available" = "Kullanılamıyor"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "Nesne Kimliği: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "Tamam"; + +/* A label in reference to a credential password. */ +"Password" = "Parola"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Parola Gerekiyor"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Seçilen sertifika için lütfen bir parola girin."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Lütfen en az 1 başlangıç konumu ayarlayın."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Lütfen en az 2 başlangıç konumu ayarlayın."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "Açılır menü değerlendirilemedi: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Aramayı Burada Tekrarla"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Sonuçlar"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Arama Sorgusu"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Bir yer işareti seç"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Bir tesis seç"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Siteler"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Mekansal referans eşleşmiyor."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Başlangıç Noktaları"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Sahneyi yerleştirmek için bir yüzeye dokunun"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Daha fazla bilgi için görüntüye dokunun."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Terminal Yapılandırması"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "test"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "Altlık haritada bir mekansal referans yok."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "Bilinmeyen bir nedenle altlık harita yüklenemedi."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "Altlık haritada, haritayla uyumlu olmayan bir mekansal referans var."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "Sertifika dosyası veya parola geçersiz."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "Sertifika dosyası geçersiz."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "Haritada bir mekansal referans yok."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "Parola geçersiz."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "URL adresine erişilemedi veya adres görüntü verisi içermiyor."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "İz"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "İz %1$lld / %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "İz Yapılandırması"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Yeniden Dene"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Adsız Varlık Türü"; + +/* A label in reference to a credential username. */ +"Username" = "Kullanıcı adı"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Değer"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "\"%@\"a erişmek için oturum açmanız gerekiyor"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Yakınlaştır"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Sonuca yakınlaştır"; + diff --git a/Sources/ArcGISToolkit/Resources/uk.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/uk.lproj/Localizable.strings index fca5dd76d..670fea47e 100644 --- a/Sources/ArcGISToolkit/Resources/uk.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/uk.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ -"Delete" = "Видалення"; +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "Вибрано %lld"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Для доступу до вмісту %@ потрібний сертифікат."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Додати новий"; + +/* A section header for advanced options. */ +"Advanced Options" = "Розширені опції"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Всі сайти"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Усі вхідні дані та результати трасування будуть втрачені."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Дозволити"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Під час завантаження зображення сталася помилка: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Прикріплення"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Атрибути"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Потрібна аутентифікація"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Закладки"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Перегляд"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Скасувати"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Скасувати вибір початкової точки"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Потрібен сертифікат"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Попередження про сертифікат довіри"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Очистити всі результати"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Колір"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "Компас, курс %lld градусів %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Продовжити"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Не вдалося отримати доступ до файлу сертифіката."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Небезпечно: сертифікат, наданий '%@', не підписаний довіреним центром."; + +/* A label for a button used to delete a utility network trace input component or result. */ +"Delete" = "Видалити"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Готово"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Неможливо додати повторювані початкові точки."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Не вдалося ідентифікувати елемент."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Помилка"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Помилка імпорту сертифіката"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Помилка завантаження базової карти."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Оцінка спливаючих виразів"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Не вдалося встановити початкову точку"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Результати об’єкта"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Поле"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Поля"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Фільтр пунктів обслуговування"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Фільтр сайтів"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Знайти місце або адресу"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Частка уздовж ребра"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Результати функції"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Середовище"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Режим"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Назва"; + +/* A label in reference to a specific utility network. */ +"Network" = "Мережа"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Нове трасування"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Закладок немає"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Немає доступних конфігурацій."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Збігів не знайдено."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Результатів не знайдено"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Типи трасування не знайдені."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Інженерні мережі не знайдені."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Нічого не вибрано"; + +/* A trace function output result was not provided. */ +"Not Available" = "Недоступно"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "Ідентифікатор об'єкту: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "OK"; + +/* A label in reference to a credential password. */ +"Password" = "Пароль"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Потрібен пароль"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Введіть пароль для вибраного сертифіката."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Задайте принаймні 1 початкове місце розташування."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Задайте принаймні 2 початкових місця розташування."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "Помилка оцінки спливаючого вікна: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Повторіть пошук тут"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Результати"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Пошуковий запит"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Вибрати закладку"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Вибрати пункт обслуговування"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Сайти"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Невідповідність просторової прив’язки."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Початкові точки"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Торкніться поверхні, щоб розмістити сцену"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Торкніться зображення, щоб дізнатися більше."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Конфігурація терміналу"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "тест"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "Базова карта не має просторової прив'язки."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "Базову карту не вдалося завантажити з невідомої причини."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "Базова карта має просторову прив’язку, несумісну з картою."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "Файл сертифіката або пароль недійсні."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "Файл сертифіката недійсний."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "Карта не має просторової прив'язки."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "Пароль недійсний."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "URL-адреса недоступна або не містить даних зображення."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Трасування"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Трасування %1$lld з %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Конфігурація трасування"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Спробуйте знову"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Тип активу без назви"; + +/* A label in reference to a credential username. */ +"Username" = "Ім'я користувача"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Значення"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Щоб отримати доступ, необхідно увійти '%@'"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Масштабувати"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Масштабування до результату"; + diff --git a/Sources/ArcGISToolkit/Resources/vi.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/vi.lproj/Localizable.strings index adbfff45a..e3d2242cc 100755 --- a/Sources/ArcGISToolkit/Resources/vi.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/vi.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld đã chọn"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "Cần có chứng chỉ để truy cập nội dung trên %@."; + +/* A button to add new utility trace starting points. */ +"Add new" = "Thêm mới"; + +/* A section header for advanced options. */ +"Advanced Options" = "Tùy chọn Nâng cao"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "Tất cả các địa điểm"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "Tất cả các đầu vào và kết quả truy dấu sẽ bị mất."; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "Cho phép"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "Đã xảy ra lỗi khi tải hình ảnh: %@."; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "Các tệp đính kèm"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "Thuộc tính"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "Yêu cầu Xác thực"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "Các phạm vi đánh dấu"; + +/* A label for a button to open the system file browser. */ +"Browse" = "Duyệt tìm"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "Hủy"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "Hủy lựa chọn điểm bắt đầu"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "Yêu cầu Chứng chỉ"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "Cảnh báo Độ tin cậy của Chứng chỉ"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "Xóa tất cả các kết quả"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "Màu sắc"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "La bàn, góc %lld đầu mục %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "Tiếp"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "Không thể truy cập tệp chứng chỉ."; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "Nguy hiểm: Chứng chỉ do '%@' cung cấp không được ký bởi cơ quan đáng tin cậy."; + +/* A label for a button used to delete a utility network trace input component or result. */ "Delete" = "Xóa"; + +/* A button to close the bookmark selection menu. */ +"Done" = "Hoàn tất"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "Không thể thêm điểm bắt đầu trùng lặp."; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "Không thể xác định phần tử."; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "Lỗi"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "Lỗi khi nhập chứng chỉ"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "Lỗi khi tải bản đồ nền."; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "Đánh giá biểu thức popup"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "Không thể thiết lập điểm bắt đầu"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "Kết quả Đối tượng"; + +/* A field in a set of data contained in a popup. */ +"Field" = "Trường"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "Trường"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "Lọc cơ sở"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "Lọc địa điểm"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "Tìm địa điểm hoặc địa chỉ"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "Phân số Dọc theo Cạnh"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "Kết quả Hàm"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "Phương tiện truyền thông"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "Chế độ"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "Tên"; + +/* A label in reference to a specific utility network. */ +"Network" = "Mạng"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "Truy dấu mới"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "Không có đánh dấu phạm vi nào"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "Không có cấu hình nào khả dụng."; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "Không tìm thấy các mục trùng khớp."; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "Không tìm thấy kết quả"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "Không tìm thấy loại truy dấu."; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "Không tìm thấy mạng lưới tiện ích."; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "Không được chọn"; + +/* A trace function output result was not provided. */ +"Not Available" = "Không khả dụng"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "ID Đối tượng: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "OK"; + +/* A label in reference to a credential password. */ +"Password" = "Mật khẩu"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "Cần mật khẩu"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "Vui lòng nhập mật khẩu cho chứng chỉ được chọn."; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "Vui lòng đặt ít nhất 1 vị trí bắt đầu."; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "Vui lòng đặt ít nhất 2 vị trí bắt đầu."; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "Không thể đánh giá popup: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "Lặp lại Tìm kiếm Tại đây"; + +/* A label for a button to show utility network trace results. */ +"Results" = "Kết quả"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "Truy vấn Tìm kiếm"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "Chọn một đánh dấu"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "Chọn một cơ sở"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "Sites"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "Tham chiếu không gian không trùng khớp."; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "Điểm Bắt đầu"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "Chạm vào bề mặt để đặt scene"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "Chạm vào hình ảnh để biết thêm thông tin."; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "Cấu hình Thiết bị đầu cuối"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "kiểm tra"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "Bản đồ nền không có mục tham chiếu không gian."; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "Tải bản đồ nền thất bại vì lý do không xác định."; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "Tham chiếu không gian của bản đồ nền không tương thích với bản đồ."; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "Tệp chứng chỉ hoặc mật khẩu không hợp lệ."; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "Tệp chứng chỉ không hợp lệ."; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "Bản đồ không có mục tham chiếu không gian."; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "Mật khẩu không hợp lệ."; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "URL không thể truy cập được hoặc không chứa dữ liệu hình ảnh."; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "Truy dấu"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "Truy dấu %1$lld trong số %2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "Cấu hình truy dấu"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "Thử lại"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "Loại Tài liệu Không có tên"; + +/* A label in reference to a credential username. */ +"Username" = "Tên người dùng"; + +/* A value in a set of data contained in a popup. */ +"Value" = "Giá trị"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "Bạn phải đăng nhập để truy cập '%@'"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "Phóng tới"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "Thu phóng kết quả"; + diff --git a/Sources/ArcGISToolkit/Resources/zh-CN.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/zh-CN.lproj/Localizable.strings new file mode 100644 index 000000000..fa16cfa25 --- /dev/null +++ b/Sources/ArcGISToolkit/Resources/zh-CN.lproj/Localizable.strings @@ -0,0 +1,298 @@ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld 已选"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "要在 %@ 上访问内容,需要具有证书。"; + +/* A button to add new utility trace starting points. */ +"Add new" = "新增"; + +/* A section header for advanced options. */ +"Advanced Options" = "高级选项"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "所有站点"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "所有追踪输入和结果均将丢失。"; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "允许"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "加载图像时出错:%@。"; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "附件"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "属性"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "需要身份验证"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "书签"; + +/* A label for a button to open the system file browser. */ +"Browse" = "浏览"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "取消"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "取消起点选择"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "需要证书"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "证书信任警告"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "清除所有结果"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "颜色"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "罗盘,朝向 %lld 度 %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "继续"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "无法访问证书文件。"; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "危险:'%@' 提供的证书未经受信任的机构签名。"; + +/* A label for a button used to delete a utility network trace input component or result. */ +"Delete" = "删除"; + +/* A button to close the bookmark selection menu. */ +"Done" = "完成"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "无法添加重复的起点。"; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "无法识别元素。"; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "错误"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "导入证书时出错"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "加载底图时出错。"; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "正在评估弹出式表达式"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "设置起始点失败"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "要素结果"; + +/* A field in a set of data contained in a popup. */ +"Field" = "字段"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "字段"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "过滤设施点"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "过滤站点"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "查找地点或地址"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "沿边缘的分数"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "函数结果"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "媒体"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "模式"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "名称"; + +/* A label in reference to a specific utility network. */ +"Network" = "网络"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "新建追踪"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "无书签"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "无可用配置。"; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "未找到匹配项。"; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "未找到任何结果"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "未找到追踪类型。"; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "未找到公共设施网络。"; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "未选择"; + +/* A trace function output result was not provided. */ +"Not Available" = "不可用"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "对象 ID:%@"; + +/* A label for button to proceed with an operation. */ +"OK" = "确定"; + +/* A label in reference to a credential password. */ +"Password" = "密码"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "需要密码"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "请为选择的证书输入密码。"; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "请至少设置 1 个起始位置。"; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "请至少设置2个起始位置。"; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "弹出窗口评估失败:%@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "在此处重复搜索"; + +/* A label for a button to show utility network trace results. */ +"Results" = "结果"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "搜索查询"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "选择书签"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "选择设施点"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "站点"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "空间参考不匹配。"; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "起点"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "点击表面以放置场景"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "点击图像获取详细信息。"; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "终端配置"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "测试"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "底图没有空间参考。"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "由于未知原因,底图加载失败。"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "底图的空间参考与地图不兼容。"; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "证书文件或密码无效。"; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "证书文件无效。"; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "地图无空间参考。"; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "密码无效。"; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "无法访问 URL 或未包含图像数据。"; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "追踪"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "%2$lld 的追踪 %1$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "追踪配置"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "重试"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "未命名资产类型"; + +/* A label in reference to a credential username. */ +"Username" = "用户名"; + +/* A value in a set of data contained in a popup. */ +"Value" = "值"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "您必须登录,才能访问 '%@'"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "缩放至"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "缩放至结果"; + diff --git a/Sources/ArcGISToolkit/Resources/zh-HK.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/zh-HK.lproj/Localizable.strings new file mode 100644 index 000000000..fe543cc44 --- /dev/null +++ b/Sources/ArcGISToolkit/Resources/zh-HK.lproj/Localizable.strings @@ -0,0 +1,298 @@ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "已選擇 %lld"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "需要憑證才能在 %@ 上存取內容。"; + +/* A button to add new utility trace starting points. */ +"Add new" = "新增"; + +/* A section header for advanced options. */ +"Advanced Options" = "進階選項"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "所有網站"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "將遺失所有追蹤輸入和結果。"; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "允許"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "載入圖像時出錯: %@。"; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "附件(A)"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "屬性"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "需要驗證"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "書籤"; + +/* A label for a button to open the system file browser. */ +"Browse" = "瀏覽"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "取消"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "取消起點選擇"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "需要憑證"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "憑證信任警告"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "清除所有結果"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "顏色"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "羅盤儀,航向 %lld 度 %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "繼續"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "無法存取憑證檔。"; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "危險: '%@' 提供的憑證未經信任的機構簽署。"; + +/* A label for a button used to delete a utility network trace input component or result. */ +"Delete" = "刪除"; + +/* A button to close the bookmark selection menu. */ +"Done" = "完成"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "無法新增重複的起點。"; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "無法識別元素。"; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "錯誤"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "匯入憑證時出錯"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "載入底圖時出錯。"; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "正在評估快顯視窗表達式"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "無法設定起點"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "圖徵結果"; + +/* A field in a set of data contained in a popup. */ +"Field" = "欄位"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "欄位"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "篩選機構"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "篩選網站"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "尋找地點或地址"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "沿邊緣分數"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "函數結果"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "媒體"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "模式"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "名稱"; + +/* A label in reference to a specific utility network. */ +"Network" = "網路"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "新增軌跡"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "無書籤"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "無可用配置。"; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "找不到相符項。"; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "找不到任何結果"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "找不到軌跡類型。"; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "找不到公用事業網路。"; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "未選擇"; + +/* A trace function output result was not provided. */ +"Not Available" = "不可用"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "物件 ID: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "確定"; + +/* A label in reference to a credential password. */ +"Password" = "密碼"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "需要密碼"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "請輸入所選憑證的密碼。"; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "請至少設定 1 個起始位置。"; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "請至少設定 2 個起始位置。"; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "快顯視窗評估失敗: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "在這裡重複尋"; + +/* A label for a button to show utility network trace results. */ +"Results" = "結果"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "搜尋查詢"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "選擇書籤"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "選擇機構"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "網站"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "空間參考不符。"; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "起點"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "點選表面以放置場景"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "點擊圖像以取得更多資訊。"; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "終端機配置"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "測試"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "底圖沒有空間參考。"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "因不明原因而無法載入底圖。"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "底圖具有與地圖不相容的空間參考。"; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "憑證檔或密碼無效。"; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "憑證檔無效。"; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "地圖沒有空間參考。"; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "密碼無效。"; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "URL 無法連線或不包含圖像資料。"; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "軌跡"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "軌跡 %1$lld/%2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "軌跡配置"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "重試"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "未命名的資產類型"; + +/* A label in reference to a credential username. */ +"Username" = "使用者名稱"; + +/* A value in a set of data contained in a popup. */ +"Value" = "值"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "您必須登入才能存取 '%@'"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "縮放至"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "縮放至結果"; + diff --git a/Sources/ArcGISToolkit/Resources/zh-Hans-CN.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/zh-Hans-CN.lproj/Localizable.strings index 64d9dea52..fa16cfa25 100755 --- a/Sources/ArcGISToolkit/Resources/zh-Hans-CN.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/zh-Hans-CN.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld 已选"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "要在 %@ 上访问内容,需要具有证书。"; + +/* A button to add new utility trace starting points. */ +"Add new" = "新增"; + +/* A section header for advanced options. */ +"Advanced Options" = "高级选项"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "所有站点"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "所有追踪输入和结果均将丢失。"; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "允许"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "加载图像时出错:%@。"; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "附件"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "属性"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "需要身份验证"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "书签"; + +/* A label for a button to open the system file browser. */ +"Browse" = "浏览"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "取消"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "取消起点选择"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "需要证书"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "证书信任警告"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "清除所有结果"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "颜色"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "罗盘,朝向 %lld 度 %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "继续"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "无法访问证书文件。"; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "危险:'%@' 提供的证书未经受信任的机构签名。"; + +/* A label for a button used to delete a utility network trace input component or result. */ "Delete" = "删除"; + +/* A button to close the bookmark selection menu. */ +"Done" = "完成"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "无法添加重复的起点。"; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "无法识别元素。"; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "错误"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "导入证书时出错"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "加载底图时出错。"; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "正在评估弹出式表达式"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "设置起始点失败"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "要素结果"; + +/* A field in a set of data contained in a popup. */ +"Field" = "字段"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "字段"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "过滤设施点"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "过滤站点"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "查找地点或地址"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "沿边缘的分数"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "函数结果"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "媒体"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "模式"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "名称"; + +/* A label in reference to a specific utility network. */ +"Network" = "网络"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "新建追踪"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "无书签"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "无可用配置。"; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "未找到匹配项。"; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "未找到任何结果"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "未找到追踪类型。"; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "未找到公共设施网络。"; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "未选择"; + +/* A trace function output result was not provided. */ +"Not Available" = "不可用"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "对象 ID:%@"; + +/* A label for button to proceed with an operation. */ +"OK" = "确定"; + +/* A label in reference to a credential password. */ +"Password" = "密码"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "需要密码"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "请为选择的证书输入密码。"; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "请至少设置 1 个起始位置。"; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "请至少设置2个起始位置。"; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "弹出窗口评估失败:%@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "在此处重复搜索"; + +/* A label for a button to show utility network trace results. */ +"Results" = "结果"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "搜索查询"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "选择书签"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "选择设施点"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "站点"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "空间参考不匹配。"; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "起点"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "点击表面以放置场景"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "点击图像获取详细信息。"; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "终端配置"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "测试"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "底图没有空间参考。"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "由于未知原因,底图加载失败。"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "底图的空间参考与地图不兼容。"; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "证书文件或密码无效。"; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "证书文件无效。"; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "地图无空间参考。"; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "密码无效。"; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "无法访问 URL 或未包含图像数据。"; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "追踪"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "%2$lld 的追踪 %1$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "追踪配置"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "重试"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "未命名资产类型"; + +/* A label in reference to a credential username. */ +"Username" = "用户名"; + +/* A value in a set of data contained in a popup. */ +"Value" = "值"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "您必须登录,才能访问 '%@'"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "缩放至"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "缩放至结果"; + diff --git a/Sources/ArcGISToolkit/Resources/zh-Hans.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/zh-Hans.lproj/Localizable.strings index 64d9dea52..fa16cfa25 100755 --- a/Sources/ArcGISToolkit/Resources/zh-Hans.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/zh-Hans.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "%lld 已选"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "要在 %@ 上访问内容,需要具有证书。"; + +/* A button to add new utility trace starting points. */ +"Add new" = "新增"; + +/* A section header for advanced options. */ +"Advanced Options" = "高级选项"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "所有站点"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "所有追踪输入和结果均将丢失。"; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "允许"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "加载图像时出错:%@。"; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "附件"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "属性"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "需要身份验证"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "书签"; + +/* A label for a button to open the system file browser. */ +"Browse" = "浏览"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "取消"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "取消起点选择"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "需要证书"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "证书信任警告"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "清除所有结果"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "颜色"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "罗盘,朝向 %lld 度 %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "继续"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "无法访问证书文件。"; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "危险:'%@' 提供的证书未经受信任的机构签名。"; + +/* A label for a button used to delete a utility network trace input component or result. */ "Delete" = "删除"; + +/* A button to close the bookmark selection menu. */ +"Done" = "完成"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "无法添加重复的起点。"; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "无法识别元素。"; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "错误"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "导入证书时出错"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "加载底图时出错。"; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "正在评估弹出式表达式"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "设置起始点失败"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "要素结果"; + +/* A field in a set of data contained in a popup. */ +"Field" = "字段"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "字段"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "过滤设施点"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "过滤站点"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "查找地点或地址"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "沿边缘的分数"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "函数结果"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "媒体"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "模式"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "名称"; + +/* A label in reference to a specific utility network. */ +"Network" = "网络"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "新建追踪"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "无书签"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "无可用配置。"; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "未找到匹配项。"; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "未找到任何结果"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "未找到追踪类型。"; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "未找到公共设施网络。"; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "未选择"; + +/* A trace function output result was not provided. */ +"Not Available" = "不可用"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "对象 ID:%@"; + +/* A label for button to proceed with an operation. */ +"OK" = "确定"; + +/* A label in reference to a credential password. */ +"Password" = "密码"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "需要密码"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "请为选择的证书输入密码。"; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "请至少设置 1 个起始位置。"; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "请至少设置2个起始位置。"; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "弹出窗口评估失败:%@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "在此处重复搜索"; + +/* A label for a button to show utility network trace results. */ +"Results" = "结果"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "搜索查询"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "选择书签"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "选择设施点"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "站点"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "空间参考不匹配。"; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "起点"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "点击表面以放置场景"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "点击图像获取详细信息。"; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "终端配置"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "测试"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "底图没有空间参考。"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "由于未知原因,底图加载失败。"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "底图的空间参考与地图不兼容。"; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "证书文件或密码无效。"; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "证书文件无效。"; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "地图无空间参考。"; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "密码无效。"; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "无法访问 URL 或未包含图像数据。"; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "追踪"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "%2$lld 的追踪 %1$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "追踪配置"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "重试"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "未命名资产类型"; + +/* A label in reference to a credential username. */ +"Username" = "用户名"; + +/* A value in a set of data contained in a popup. */ +"Value" = "值"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "您必须登录,才能访问 '%@'"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "缩放至"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "缩放至结果"; + diff --git a/Sources/ArcGISToolkit/Resources/zh-Hant-HK.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/zh-Hant-HK.lproj/Localizable.strings index 64d9dea52..fe543cc44 100755 --- a/Sources/ArcGISToolkit/Resources/zh-Hant-HK.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/zh-Hant-HK.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ -"Delete" = "删除"; +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "已選擇 %lld"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "需要憑證才能在 %@ 上存取內容。"; + +/* A button to add new utility trace starting points. */ +"Add new" = "新增"; + +/* A section header for advanced options. */ +"Advanced Options" = "進階選項"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "所有網站"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "將遺失所有追蹤輸入和結果。"; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "允許"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "載入圖像時出錯: %@。"; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "附件(A)"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "屬性"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "需要驗證"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "書籤"; + +/* A label for a button to open the system file browser. */ +"Browse" = "瀏覽"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "取消"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "取消起點選擇"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "需要憑證"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "憑證信任警告"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "清除所有結果"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "顏色"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "羅盤儀,航向 %lld 度 %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "繼續"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "無法存取憑證檔。"; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "危險: '%@' 提供的憑證未經信任的機構簽署。"; + +/* A label for a button used to delete a utility network trace input component or result. */ +"Delete" = "刪除"; + +/* A button to close the bookmark selection menu. */ +"Done" = "完成"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "無法新增重複的起點。"; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "無法識別元素。"; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "錯誤"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "匯入憑證時出錯"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "載入底圖時出錯。"; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "正在評估快顯視窗表達式"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "無法設定起點"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "圖徵結果"; + +/* A field in a set of data contained in a popup. */ +"Field" = "欄位"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "欄位"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "篩選機構"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "篩選網站"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "尋找地點或地址"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "沿邊緣分數"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "函數結果"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "媒體"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "模式"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "名稱"; + +/* A label in reference to a specific utility network. */ +"Network" = "網路"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "新增軌跡"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "無書籤"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "無可用配置。"; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "找不到相符項。"; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "找不到任何結果"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "找不到軌跡類型。"; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "找不到公用事業網路。"; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "未選擇"; + +/* A trace function output result was not provided. */ +"Not Available" = "不可用"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "物件 ID: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "確定"; + +/* A label in reference to a credential password. */ +"Password" = "密碼"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "需要密碼"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "請輸入所選憑證的密碼。"; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "請至少設定 1 個起始位置。"; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "請至少設定 2 個起始位置。"; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "快顯視窗評估失敗: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "在這裡重複尋"; + +/* A label for a button to show utility network trace results. */ +"Results" = "結果"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "搜尋查詢"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "選擇書籤"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "選擇機構"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "網站"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "空間參考不符。"; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "起點"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "點選表面以放置場景"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "點擊圖像以取得更多資訊。"; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "終端機配置"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "測試"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "底圖沒有空間參考。"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "因不明原因而無法載入底圖。"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "底圖具有與地圖不相容的空間參考。"; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "憑證檔或密碼無效。"; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "憑證檔無效。"; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "地圖沒有空間參考。"; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "密碼無效。"; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "URL 無法連線或不包含圖像資料。"; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "軌跡"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "軌跡 %1$lld/%2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "軌跡配置"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "重試"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "未命名的資產類型"; + +/* A label in reference to a credential username. */ +"Username" = "使用者名稱"; + +/* A value in a set of data contained in a popup. */ +"Value" = "值"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "您必須登入才能存取 '%@'"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "縮放至"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "縮放至結果"; + diff --git a/Sources/ArcGISToolkit/Resources/zh-Hant-TW.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/zh-Hant-TW.lproj/Localizable.strings index 64d9dea52..fe543cc44 100755 --- a/Sources/ArcGISToolkit/Resources/zh-Hant-TW.lproj/Localizable.strings +++ b/Sources/ArcGISToolkit/Resources/zh-Hant-TW.lproj/Localizable.strings @@ -1,2 +1,298 @@ -/* No comment provided by engineer. */ -"Delete" = "删除"; +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "已選擇 %lld"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "需要憑證才能在 %@ 上存取內容。"; + +/* A button to add new utility trace starting points. */ +"Add new" = "新增"; + +/* A section header for advanced options. */ +"Advanced Options" = "進階選項"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "所有網站"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "將遺失所有追蹤輸入和結果。"; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "允許"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "載入圖像時出錯: %@。"; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "附件(A)"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "屬性"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "需要驗證"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "書籤"; + +/* A label for a button to open the system file browser. */ +"Browse" = "瀏覽"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "取消"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "取消起點選擇"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "需要憑證"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "憑證信任警告"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "清除所有結果"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "顏色"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "羅盤儀,航向 %lld 度 %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "繼續"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "無法存取憑證檔。"; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "危險: '%@' 提供的憑證未經信任的機構簽署。"; + +/* A label for a button used to delete a utility network trace input component or result. */ +"Delete" = "刪除"; + +/* A button to close the bookmark selection menu. */ +"Done" = "完成"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "無法新增重複的起點。"; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "無法識別元素。"; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "錯誤"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "匯入憑證時出錯"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "載入底圖時出錯。"; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "正在評估快顯視窗表達式"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "無法設定起點"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "圖徵結果"; + +/* A field in a set of data contained in a popup. */ +"Field" = "欄位"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "欄位"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "篩選機構"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "篩選網站"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "尋找地點或地址"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "沿邊緣分數"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "函數結果"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "媒體"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "模式"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "名稱"; + +/* A label in reference to a specific utility network. */ +"Network" = "網路"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "新增軌跡"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "無書籤"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "無可用配置。"; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "找不到相符項。"; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "找不到任何結果"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "找不到軌跡類型。"; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "找不到公用事業網路。"; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "未選擇"; + +/* A trace function output result was not provided. */ +"Not Available" = "不可用"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "物件 ID: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "確定"; + +/* A label in reference to a credential password. */ +"Password" = "密碼"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "需要密碼"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "請輸入所選憑證的密碼。"; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "請至少設定 1 個起始位置。"; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "請至少設定 2 個起始位置。"; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "快顯視窗評估失敗: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "在這裡重複尋"; + +/* A label for a button to show utility network trace results. */ +"Results" = "結果"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "搜尋查詢"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "選擇書籤"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "選擇機構"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "網站"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "空間參考不符。"; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "起點"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "點選表面以放置場景"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "點擊圖像以取得更多資訊。"; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "終端機配置"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "測試"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "底圖沒有空間參考。"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "因不明原因而無法載入底圖。"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "底圖具有與地圖不相容的空間參考。"; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "憑證檔或密碼無效。"; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "憑證檔無效。"; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "地圖沒有空間參考。"; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "密碼無效。"; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "URL 無法連線或不包含圖像資料。"; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "軌跡"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "軌跡 %1$lld/%2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "軌跡配置"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "重試"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "未命名的資產類型"; + +/* A label in reference to a credential username. */ +"Username" = "使用者名稱"; + +/* A value in a set of data contained in a popup. */ +"Value" = "值"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "您必須登入才能存取 '%@'"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "縮放至"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "縮放至結果"; + diff --git a/Sources/ArcGISToolkit/Resources/zh-TW.lproj/Localizable.strings b/Sources/ArcGISToolkit/Resources/zh-TW.lproj/Localizable.strings new file mode 100644 index 000000000..fe543cc44 --- /dev/null +++ b/Sources/ArcGISToolkit/Resources/zh-TW.lproj/Localizable.strings @@ -0,0 +1,298 @@ +/* A label declaring the number of starting points selected for a utility network trace. */ +"%lld selected" = "已選擇 %lld"; + +/* An alert message indicating that a certificate is required to access +content on a remote host. The variable is the host that prompted the challenge. */ +"A certificate is required to access content on %@." = "需要憑證才能在 %@ 上存取內容。"; + +/* A button to add new utility trace starting points. */ +"Add new" = "新增"; + +/* A section header for advanced options. */ +"Advanced Options" = "進階選項"; + +/* A reference to all of the sites defined in a floor aware map. */ +"All sites" = "所有網站"; + +/* A message describing the outcome of clearing all utility network trace results. */ +"All the trace inputs and results will be lost." = "將遺失所有追蹤輸入和結果。"; + +/* A button indicating the user accepts a potentially dangerous action. */ +"Allow" = "允許"; + +/* A fallback message to display when an image cannot be loaded. */ +"An error occurred loading the image: %@." = "載入圖像時出錯: %@。"; + +/* A label in reference to attachments in a popup. */ +"Attachments" = "附件(A)"; + +/* A label in reference to the attributes of a geo element. */ +"Attributes" = "屬性"; + +/* A label indicating authentication is required to proceed. */ +"Authentication Required" = "需要驗證"; + +/* A label in reference to bookmarks contained in a map or scene. */ +"Bookmarks" = "書籤"; + +/* A label for a button to open the system file browser. */ +"Browse" = "瀏覽"; + +/* A label for a button to cancel an operation. */ +"Cancel" = "取消"; + +/* A label for a button to cancel the starting point selection operation. */ +"Cancel starting point selection" = "取消起點選擇"; + +/* A label indicating that a certificate is required to proceed. */ +"Certificate Required" = "需要憑證"; + +/* A label indicating that the remote host's certificate is not trusted. */ +"Certificate Trust Warning" = "憑證信任警告"; + +/* A directive to clear all of the completed utility network traces. */ +"Clear all results" = "清除所有結果"; + +/* A label in reference to the color used to display utility trace result graphics. */ +"Color" = "顏色"; + +/* An compass description to be read by a screen reader describing the +current heading. The first variable being a degree value and the +second being a corresponding cardinal direction (north, northeast, +east, etc.). */ +"Compass, heading %lld degrees %@" = "羅盤儀,航向 %lld 度 %@"; + +/* A label for a button used to continue the authentication operation. */ +"Continue" = "繼續"; + +/* A label indicating a certificate file was inaccessible. */ +"Could not access the certificate file." = "無法存取憑證檔。"; + +/* A warning that the host service (challenge.host) is providing a potentially unsafe certificate. */ +"Dangerous: The certificate provided by '%@' is not signed by a trusted authority." = "危險: '%@' 提供的憑證未經信任的機構簽署。"; + +/* A label for a button used to delete a utility network trace input component or result. */ +"Delete" = "刪除"; + +/* A button to close the bookmark selection menu. */ +"Done" = "完成"; + +/* A message indicating that the user attempted to use a single utility +network element for more than one trace starting point. */ +"Duplicate starting points cannot be added." = "無法新增重複的起點。"; + +/* A label indicating an element could not be identified as a starting point +for a utility network trace. */ +"Element could not be identified." = "無法識別元素。"; + +/* A label in reference to an error that occurred during a utility network trace. */ +"Error" = "錯誤"; + +/* A message indicating that some error occurred while importing a chosen +network certificate. */ +"Error importing certificate" = "匯入憑證時出錯"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to load. */ +"Error loading basemap." = "載入底圖時出錯。"; + +/* A label indicating popup expressions are being evaluated. */ +"Evaluating popup expressions" = "正在評估快顯視窗表達式"; + +/* A message indicating that the chosen utility network element wasn't able +to be used as a trace starting point. */ +"Failed to set starting point" = "無法設定起點"; + +/* A label in reference to utility elements returned as results of a utility network +trace operation. */ +"Feature Results" = "圖徵結果"; + +/* A field in a set of data contained in a popup. */ +"Field" = "欄位"; + +/* A label in reference to fields in a set of data contained in a popup. */ +"Fields" = "欄位"; + +/* A field allowing the user to filter a list of facilities by name. A +facility contains one or more levels in a floor-aware map or scene. */ +"Filter facilities" = "篩選機構"; + +/* A field allowing the user to filter a list of sites by name. A site +contains one or more facilities in a floor-aware map or scene. */ +"Filter sites" = "篩選網站"; + +/* A hint for the user on what to search for in a search bar. */ +"Find a place or address" = "尋找地點或地址"; + +/* A label in reference to a fractional distance along an edge style utility network element. */ +"Fraction Along Edge" = "沿邊緣分數"; + +/* A label in reference to function outputs returned as results of a utility network +trace operation. */ +"Function Results" = "函數結果"; + +/* A label in reference to media elements contained within a popup. */ +"Media" = "媒體"; + +/* The mode in which the utility network trace tool is being used (either creating traces or viewing traces). */ +"Mode" = "模式"; + +/* A label in reference to the user defined name for an individual utility network trace. */ +"Name" = "名稱"; + +/* A label in reference to a specific utility network. */ +"Network" = "網路"; + +/* A label for a button to show new utility network trace configuration options. */ +"New trace" = "新增軌跡"; + +/* A label indicating that no bookmarks are available for selection. */ +"No bookmarks" = "無書籤"; + +/* A statement that no utility trace configurations are available. */ +"No configurations available." = "無可用配置。"; + +/* A statement that no sites or facilities with names matching a filter phrase were found. */ +"No matches found." = "找不到相符項。"; + +/* A message to show when there are no results or suggestions. */ +"No results found" = "找不到任何結果"; + +/* A label indicating that no utility named trace configurations are available. */ +"No trace types found." = "找不到軌跡類型。"; + +/* A label indicating that no utility networks are available. */ +"No utility networks found." = "找不到公用事業網路。"; + +/* A label indicating that no utility network trace configuration has been selected. */ +"None selected" = "未選擇"; + +/* A trace function output result was not provided. */ +"Not Available" = "不可用"; + +/* A string identifying a utility network object. */ +"Object ID: %@" = "物件 ID: %@"; + +/* A label for button to proceed with an operation. */ +"OK" = "確定"; + +/* A label in reference to a credential password. */ +"Password" = "密碼"; + +/* A label indicating that a password is required to proceed with an operation. */ +"Password Required" = "需要密碼"; + +/* A label requesting the password associated with the chosen certificate. */ +"Please enter a password for the chosen certificate." = "請輸入所選憑證的密碼。"; + +/* A label indicating that at least one starting location is required for the +chosen utility network trace configuration. */ +"Please set at least 1 starting location." = "請至少設定 1 個起始位置。"; + +/* A label indicating that at least two starting locations are required for the +chosen utility network trace configuration. */ +"Please set at least 2 starting locations." = "請至少設定 2 個起始位置。"; + +/* An error message shown when a popup cannot be displayed. The +variable provides additional data. */ +"Popup evaluation failed: %@" = "快顯視窗評估失敗: %@"; + +/* A label for button to show when the user has panned the map away +from the original search location. 'Here' is in reference to the +current visible extent of the map or scene. */ +"Repeat Search Here" = "在這裡重複尋"; + +/* A label for a button to show utility network trace results. */ +"Results" = "結果"; + +/* A label in reference to a search query entered by the user. */ +"Search Query" = "搜尋查詢"; + +/* A label prompting the user to make a selection from the available bookmarks. */ +"Select a bookmark" = "選擇書籤"; + +/* A label directing the user to select a facility. A facility contains one +or more levels in a floor-aware map or scene. */ +"Select a facility" = "選擇機構"; + +/* A label in reference to all of the sites in a floor-aware map or scene. */ +"Sites" = "網站"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map or scene. */ +"Spatial reference mismatch." = "空間參考不符。"; + +/* A label in reference to the utility elements chosen as starting points for a utility +network trace operation. */ +"Starting Points" = "起點"; + +/* An instruction to the user to tap on a horizontal surface to +place an ArcGIS Scene. */ +"Tap a surface to place the scene" = "點選表面以放置場景"; + +/* A label indicating that tapping an image will reveal +additional information. */ +"Tap on the image for more information." = "點擊圖像以取得更多資訊。"; + +/* A label in reference to the chosen terminal configuration of a utility network element. */ +"Terminal Configuration" = "終端機配置"; + +/* A label for development purposes only. This is not user visible. */ +"test" = "測試"; + +/* A label indicating the chosen basemap doesn't have a spatial reference. */ +"The basemap does not have a spatial reference." = "底圖沒有空間參考。"; + +/* An error to be displayed when a basemap chosen from the basemap gallery fails to +load for an unknown reason. */ +"The basemap failed to load for an unknown reason." = "因不明原因而無法載入底圖。"; + +/* A label indicating the spatial reference of the chosen basemap doesn't +match the spatial reference of the map. */ +"The basemap has a spatial reference that is incompatible with the map." = "底圖具有與地圖不相容的空間參考。"; + +/* A label indicating the chosen file or given password was invalid. */ +"The certificate file or password was invalid." = "憑證檔或密碼無效。"; + +/* A label indicating the chosen file was invalid. */ +"The certificate file was invalid." = "憑證檔無效。"; + +/* A label indicating the map doesn't have a spatial reference. */ +"The map does not have a spatial reference." = "地圖沒有空間參考。"; + +/* A label indicating the given password was invalid. */ +"The password was invalid." = "密碼無效。"; + +/* Description of error thrown when a remote image could not be loaded. */ +"The URL could not be reached or did not contain image data." = "URL 無法連線或不包含圖像資料。"; + +/* A label for a button to begin a utility network trace operation. */ +"Trace" = "軌跡"; + +/* A label indicating the index of the trace being viewed out of the total number of traces completed. */ +"Trace %1$lld of %2$lld" = "軌跡 %1$lld/%2$lld"; + +/* A label in reference to a utility network trace configuration. */ +"Trace Configuration" = "軌跡配置"; + +/* A label for a button allowing the user to retry an operation. */ +"Try Again" = "重試"; + +/* A label to use in place of a utility element asset type name. */ +"Unnamed Asset Type" = "未命名的資產類型"; + +/* A label in reference to a credential username. */ +"Username" = "使用者名稱"; + +/* A value in a set of data contained in a popup. */ +"Value" = "值"; + +/* A label explaining that credentials are required to authenticate with specified host. +The host is indicated in the variable. */ +"You must sign in to access '%@'" = "您必須登入才能存取 '%@'"; + +/* A button to change the map to the extent of the selected trace. */ +"Zoom To" = "縮放至"; + +/* A user option specifying that a map should automatically change to show completed trace results. */ +"Zoom to result" = "縮放至結果"; + diff --git a/Sources/ArcGISToolkit/Components/Popups/PopupMedia/Images/AsyncImageView.swift b/Sources/ArcGISToolkit/Utility/AsyncImageView.swift similarity index 75% rename from Sources/ArcGISToolkit/Components/Popups/PopupMedia/Images/AsyncImageView.swift rename to Sources/ArcGISToolkit/Utility/AsyncImageView.swift index 28caaa98c..e2e4a4847 100644 --- a/Sources/ArcGISToolkit/Components/Popups/PopupMedia/Images/AsyncImageView.swift +++ b/Sources/ArcGISToolkit/Utility/AsyncImageView.swift @@ -15,9 +15,12 @@ import SwiftUI import ArcGIS /// A view displaying an async image, with error display and progress view. -struct AsyncImageView: View { +public struct AsyncImageView: View { /// The `URL` of the image. - private var url: URL + private var url: URL? + + /// The `LoadableImage` representing the view. + private var loadableImage: LoadableImage? /// The `ContentMode` defining how the image fills the available space. private let contentMode: ContentMode @@ -37,7 +40,7 @@ struct AsyncImageView: View { /// - contentMode: The `ContentMode` defining how the image fills the available space. /// - refreshInterval: The refresh interval, in seconds. A `nil` interval means never refresh. /// - mediaSize: The size of the media's frame. - init( + public init( url: URL, contentMode: ContentMode = .fit, refreshInterval: TimeInterval? = nil, @@ -47,11 +50,31 @@ struct AsyncImageView: View { self.mediaSize = mediaSize self.url = url self.refreshInterval = refreshInterval + loadableImage = nil + + _viewModel = StateObject(wrappedValue: AsyncImageViewModel()) + } + + /// Creates an `AsyncImageView`. + /// - Parameters: + /// - loadableImage: The `LoadableImage` representing the image. + /// - contentMode: The `ContentMode` defining how the image fills the available space. + /// - mediaSize: The size of the media's frame. + public init( + loadableImage: LoadableImage, + contentMode: ContentMode = .fit, + mediaSize: CGSize? = nil + ) { + self.contentMode = contentMode + self.mediaSize = mediaSize + self.loadableImage = loadableImage + refreshInterval = nil + url = nil _viewModel = StateObject(wrappedValue: AsyncImageViewModel()) } - var body: some View { + public var body: some View { ZStack { switch viewModel.result { case .success(let image): @@ -69,7 +92,8 @@ struct AsyncImageView: View { .foregroundColor(.red) Text( "An error occurred loading the image: \(error.localizedDescription).", - bundle: .toolkitModule + bundle: .toolkitModule, + comment: "A fallback message to display when an image cannot be loaded." ) } .padding([.top, .bottom]) @@ -93,12 +117,7 @@ struct AsyncImageView: View { } .onAppear() { viewModel.url = url - viewModel.refreshInterval = refreshInterval - } - .onChange(of: url) { _ in - viewModel.url = url - } - .onChange(of: refreshInterval) { _ in + viewModel.loadableImage = loadableImage viewModel.refreshInterval = refreshInterval } } diff --git a/Sources/ArcGISToolkit/Components/Popups/PopupMedia/Images/AsyncImageViewModel.swift b/Sources/ArcGISToolkit/Utility/AsyncImageViewModel.swift similarity index 68% rename from Sources/ArcGISToolkit/Components/Popups/PopupMedia/Images/AsyncImageViewModel.swift rename to Sources/ArcGISToolkit/Utility/AsyncImageViewModel.swift index 77c02f3b9..d3cac6d5a 100644 --- a/Sources/ArcGISToolkit/Components/Popups/PopupMedia/Images/AsyncImageViewModel.swift +++ b/Sources/ArcGISToolkit/Utility/AsyncImageViewModel.swift @@ -11,8 +11,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -import SwiftUI import ArcGIS +import Combine +import Foundation +import UIKit /// A view model which performs the work necessary to asynchronously download an image /// from a URL and handles refreshing that image at a given time interval. @@ -24,6 +26,13 @@ import ArcGIS } } + /// The `LoadableImage` representing the view. + var loadableImage: LoadableImage? { + didSet { + refresh() + } + } + /// The refresh interval, in milliseconds. A refresh interval of 0 means never refresh. var refreshInterval: TimeInterval? { didSet { @@ -65,9 +74,9 @@ import ArcGIS refresh() } - /// Refreshes the image data from `url` and creates the image. + /// Refreshes the image data from `url` or `loadableImage` and creates the image. private func refresh() { - guard !isRefreshing else { return } + guard !isRefreshing, (url != nil || loadableImage != nil) else { return } // Only refresh if we're not already refreshing. Sometimes the // `refreshInterval` will be shorter than the time it takes to @@ -76,28 +85,43 @@ import ArcGIS // we may never get an image to display. isRefreshing = true Task { [weak self] in - guard let self, let url else { return } + guard let self else { return } do { - let (data, _) = try await ArcGISEnvironment.urlSession.data(from: url) - DispatchQueue.main.async { [weak self] in - if let image = UIImage(data: data) { - self?.result = .success(image) - } else { - // We have data, but couldn't create an image. - self?.result = .failure(LoadImageError()) - } + if let url { + try await loadFromURL(url: url) + } else if let loadableImage { + try await loadFromLoadableImage(loadableImage: loadableImage) } } catch { result = .failure(error) } - - isRefreshing = false - if let refreshInterval, - refreshInterval >= 1 { - progressInterval = Date()...Date().addingTimeInterval(refreshInterval) + } + } + + private func loadFromURL(url: URL) async throws { + let (data, _) = try await ArcGISEnvironment.urlSession.data(from: url) + DispatchQueue.main.async { [weak self] in + if let image = UIImage(data: data) { + self?.result = .success(image) + print("image success: \(url.absoluteString)") + } else { + // We have data, but couldn't create an image. + self?.result = .failure(LoadImageError()) + print("image failure: \(url.absoluteString)") } } + + isRefreshing = false + if let refreshInterval, + refreshInterval >= 1 { + progressInterval = Date()...Date().addingTimeInterval(refreshInterval) + } + } + + private func loadFromLoadableImage(loadableImage: LoadableImage) async throws { + try await loadableImage.load() + result = .success(loadableImage.image) } } @@ -108,7 +132,7 @@ struct LoadImageError: Error { extension LoadImageError: LocalizedError { public var errorDescription: String? { return String( - localized: "The URL could not be reached or did not contain image data", + localized: "The URL could not be reached or did not contain image data.", bundle: .toolkitModule, comment: "Description of error thrown when a remote image could not be loaded." ) diff --git a/Sources/ArcGISToolkit/Utility/CredentialInputView.swift b/Sources/ArcGISToolkit/Utility/CredentialInputView.swift index fb9158d3b..3c4683717 100644 --- a/Sources/ArcGISToolkit/Utility/CredentialInputView.swift +++ b/Sources/ArcGISToolkit/Utility/CredentialInputView.swift @@ -14,12 +14,109 @@ import Foundation import SwiftUI -/// A view that prompts a user to provide credentials. It can be configured to require either a username and -/// password, or a password only. -/// -/// The view is implemented as a wrapper for a UIKit `UIAlertController` because as of iOS 16, -/// SwiftUI alerts don't support visible but disabled buttons. -struct CredentialInputView: UIViewControllerRepresentable { +extension View { + /// Presents user experiences for collecting credentials from the user. + /// - Parameters: + /// - isPresented: A Boolean value indicating whether or not the view is displayed. + /// - fields: The fields shown in the view. + /// - message: Descriptive text that provides more details about the reason for the alert. + /// - title: The title of the alert. + /// - cancelAction: The cancel action. + /// - continueAction: The continue action. + @ViewBuilder func credentialInput( + isPresented: Binding, + fields: CredentialInputSheetView.Fields, + message: String, + title: String, + cancelAction: CredentialInputSheetView.Action, + continueAction: CredentialInputSheetView.Action + ) -> some View { + modifier( + CredentialInputModifier( + isPresented: isPresented, + fields: fields, + message: message, + title: title, + cancelAction: cancelAction, + continueAction: continueAction + ) + ) + } +} + +struct CredentialInputSheetView_Previews: PreviewProvider { + static var previews: some View { + Text( + "test", + bundle: .toolkitModule, + comment: "A label for development purposes only. This is not user visible." + ) + .credentialInput( + isPresented: .constant(true), + fields: .usernamePassword, + message: "You must sign in to access 'arcgis.com'", + title: "Authentication Required", + cancelAction: .init( + title: "Cancel", + handler: { _, _ in + } + ), + continueAction: .init( + title: "Continue", + handler: { username, password in + } + ) + ) + } +} + +/// A view modifier that prompts for credentials. +struct CredentialInputModifier: ViewModifier { + + /// A Boolean value indicating whether or not the view is displayed. + var isPresented: Binding + + /// The fields shown in the view. + let fields: CredentialInputSheetView.Fields + + /// Descriptive text that provides more details about the reason for the alert. + let message: String + + /// The title of the alert. + let title: String + + /// The cancel action. + let cancelAction: CredentialInputSheetView.Action + + /// The continue action. + let continueAction: CredentialInputSheetView.Action + + @ViewBuilder func body(content: Content) -> some View { + content + .sheet(isPresented: isPresented) { + CredentialInputSheetView( + isPresented: isPresented, + fields: fields, + message: message, + title: title, + cancelAction: cancelAction, + continueAction: continueAction + ) + .interactiveDismissDisabled() + } + } +} + +struct CredentialInputSheetView: View { + /// The fields shown in the alert. + private let fields: Fields + + /// Descriptive text that provides more details about the reason for the alert. + private let message: String + + /// The title of the alert. + private let title: String + /// The cancel action. private let cancelAction: Action @@ -27,46 +124,38 @@ struct CredentialInputView: UIViewControllerRepresentable { private let continueAction: Action /// The value in the username field. - /// - /// This member is unused when usage is set to `Usage.passwordOnly`. @State private var username = "" - /// A Boolean value indicating whether or not the view is displayed. - @Binding private var isPresented: Bool - - /// Descriptive text that provides more details about the reason for the alert. - private let message: String - /// The value in the password field. @State private var password = "" - /// The title of the alert. - private let title: String + /// A Boolean value indicating whether or not the view is displayed. + private var isPresented: Binding - /// The fields shown in the alert. - private let fields: Fields + @FocusState private var usernameFieldIsFocused: Bool + + @FocusState private var passwordFieldIsFocused: Bool /// Creates the view. /// - Parameters: - /// - fields: The fields shown in the alert. /// - isPresented: A Boolean value indicating whether or not the view is displayed. + /// - fields: The fields shown in the alert. /// - message: Descriptive text that provides more details about the reason for the alert. /// - title: The title of the alert. /// - cancelAction: The cancel action. /// - continueAction: The continue action. init( - fields: Fields, isPresented: Binding, + fields: Fields, message: String, title: String, cancelAction: Action, continueAction: Action ) { + self.isPresented = isPresented self.cancelAction = cancelAction self.continueAction = continueAction - _isPresented = isPresented - self.fields = fields self.message = message self.title = title @@ -82,141 +171,112 @@ struct CredentialInputView: UIViewControllerRepresentable { } } - /// Creates the alert controller. - /// - Parameter context: A context structure containing information about the current state of the - /// system. - /// - Returns: The alert controller displayed to the user. - private func makeAlertController(context: Context) -> UIAlertController { - let uiAlertController = UIAlertController( - title: title, - message: message, - preferredStyle: .alert + var usernameTextField: some View { + TextField( + String( + localized: "Username", + bundle: .toolkitModule, + comment: "A label in reference to a credential username." + ), + text: $username ) - - let cancelUIAlertAction = UIAlertAction( - title: cancelAction.title, - style: .cancel - ) { _ in - cancelAction.handler(username, password) - } - - let continueUIAlertAction = UIAlertAction( - title: continueAction.title, - style: .default - ) { _ in - continueAction.handler(username, password) - } - - if fields == .usernamePassword { - uiAlertController.addTextField { textField in - textField.addAction( - UIAction { _ in - username = textField.text ?? "" - continueUIAlertAction.isEnabled = isContinueEnabled - }, - for: .editingChanged - ) - textField.autocapitalizationType = .none - textField.autocorrectionType = .no - textField.placeholder = String(localized: "Username", bundle: .toolkitModule) - textField.returnKeyType = .next - textField.textContentType = .username - } - } - - uiAlertController.addTextField { textField in - textField.addAction( - UIAction { _ in - password = textField.text ?? "" - continueUIAlertAction.isEnabled = isContinueEnabled - }, - for: .editingChanged - ) - textField.autocapitalizationType = .none - textField.autocorrectionType = .no - - // Add a coordinator to the password field so that the primary - // keyboard action can be disabled when the field is empty. - textField.delegate = context.coordinator - - textField.isSecureTextEntry = true - textField.placeholder = String(localized: "Password", bundle: .toolkitModule) - textField.returnKeyType = .go - textField.textContentType = .password + .textInputAutocapitalization(.never) + .autocorrectionDisabled(true) + .textContentType(.username) + .focused($usernameFieldIsFocused) + .submitLabel(.next) + .onSubmit { + passwordFieldIsFocused = true } - - cancelUIAlertAction.isEnabled = true - continueUIAlertAction.isEnabled = false - - uiAlertController.addAction(cancelUIAlertAction) - uiAlertController.addAction(continueUIAlertAction) - uiAlertController.preferredAction = continueUIAlertAction - - return uiAlertController - } - - func makeCoordinator() -> Coordinator { - Coordinator(self) - } - - func makeUIViewController(context: Context) -> some UIViewController { - return UIViewController() } - func updateUIViewController( - _ uiViewController: UIViewControllerType, - context: Context - ) { - guard isPresented else { return } - let alertController = makeAlertController(context: context) - // On a physical iOS 16 device, without the following delay, the - // presentation fails and the following warning is logged: "Attempt to - // present UIAlertController on UIViewController whose view is not in - // the window hierarchy." - DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { - uiViewController.present(alertController, animated: true) { - isPresented = false + var passwordTextField: some View { + SecureField( + String( + localized: "Password", + bundle: .toolkitModule, + comment: "A label in reference to a credential password." + ), + text: $password + ) + .submitLabel(.done) + .textInputAutocapitalization(.never) + .autocorrectionDisabled(true) + .textContentType(.password) + .onSubmit { + if isContinueEnabled { + isPresented.wrappedValue = false + continueAction.handler(username, password) } } + .focused($passwordFieldIsFocused) } -} - -extension CredentialInputView { - /// The coordinator for the login view that acts as a delegate to the underlying - /// `UIAlertViewController`. - final class Coordinator: NSObject, UITextFieldDelegate { - /// The view that owns this coordinator. - let parent: CredentialInputView - - /// Creates the coordinator. - /// - Parameter parent: The view that owns this coordinator. - init(_ parent: CredentialInputView) { - self.parent = parent + + var body: some View { + GeometryReader { proxy in + VStack { + VStack(alignment: .center) { + VStack(spacing: 8) { + Text(title) + .font(.title) + .multilineTextAlignment(.center) + Text(message) + .font(.subheadline) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + } + .padding(.vertical) + VStack { + switch fields { + case .password: + passwordTextField + case .usernamePassword: + usernameTextField + Divider() + passwordTextField + } + Divider() + } + .padding([.bottom, .horizontal]) + HStack { + Spacer() + Button(role: .cancel) { + cancelAction.handler("", "") + } label: { + Text(cancelAction.title) + .padding(.horizontal) + } + .buttonStyle(.bordered) + Spacer() + Button { + isPresented.wrappedValue = false + continueAction.handler(username, password) + } label: { + Text(continueAction.title) + .padding(.horizontal) + } + .buttonStyle(.borderedProminent) + .disabled(!isContinueEnabled) + Spacer() + } + Spacer() + } + .padding() + Spacer() + } } - - func textFieldShouldReturn(_ textField: UITextField) -> Bool { - guard !parent.password.isEmpty else { return false } - parent.continueAction.handler( - parent.username, - parent.password - ) - return true + .onAppear { + // Set initial focus of text field. + switch fields { + case .usernamePassword: + usernameFieldIsFocused = true + case .password: + passwordFieldIsFocused = true + } } } } - -extension CredentialInputView { - /// A configuration for an alert action. - struct Action { - /// The title of the action. - let title: String - - /// The block to execute when the action is triggered. - let handler: (String, String) -> Void - } -} - -extension CredentialInputView { +extension CredentialInputSheetView { /// The fields shown in the alert. This determines if the view is intended to require either a username /// and password, or a password only. enum Fields { @@ -228,68 +288,14 @@ extension CredentialInputView { } } -extension View { - /// Presents user experiences for collecting credentials from the user. - /// - Parameters: - /// - fields: The fields shown in the view. - /// - isPresented: A Boolean value indicating whether or not the view is displayed. - /// - message: Descriptive text that provides more details about the reason for the alert. - /// - title: The title of the alert. - /// - cancelAction: The cancel action. - /// - continueAction: The continue action. - @ViewBuilder func credentialInput( - fields: CredentialInputView.Fields, - isPresented: Binding, - message: String, - title: String, - cancelAction: CredentialInputView.Action, - continueAction: CredentialInputView.Action - ) -> some View { - modifier( - CredentialInputModifier( - fields: fields, - isPresented: isPresented, - message: message, - title: title, - cancelAction: cancelAction, - continueAction: continueAction - ) - ) - } -} - -/// A view modifier that prompts for credentials. -struct CredentialInputModifier: ViewModifier { - - /// The fields shown in the view. - let fields: CredentialInputView.Fields - - /// A Boolean value indicating whether or not the view is displayed. - @Binding var isPresented: Bool - - /// Descriptive text that provides more details about the reason for the alert. - let message: String - - /// The title of the alert. - let title: String - - /// The cancel action. - let cancelAction: CredentialInputView.Action - - /// The continue action. - let continueAction: CredentialInputView.Action - - @ViewBuilder func body(content: Content) -> some View { - ZStack { - content - CredentialInputView( - fields: fields, - isPresented: $isPresented, - message: message, - title: title, - cancelAction: cancelAction, - continueAction: continueAction - ) - } +extension CredentialInputSheetView { + /// A configuration for an alert action. + struct Action { + /// The title of the action. + let title: String + + /// The block to execute when the action is triggered. + /// The parameters are the username and the password. + let handler: (String, String) -> Void } } diff --git a/Sources/ArcGISToolkit/Utility/InterfaceOrientationObserverView.swift b/Sources/ArcGISToolkit/Utility/InterfaceOrientationObserverView.swift new file mode 100644 index 000000000..1e42989ef --- /dev/null +++ b/Sources/ArcGISToolkit/Utility/InterfaceOrientationObserverView.swift @@ -0,0 +1,110 @@ +// Copyright 2023 Esri. + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +extension View { + /// Observes interface orientation changes for a given view. + /// - Parameters: + /// - interfaceOrientation: A binding to an interface orientation that will be updated + /// when an interface orientation change is detected. + func observingInterfaceOrientation(_ interfaceOrientation: Binding) -> some View { + background { + InterfaceOrientationObserverView(interfaceOrientation: interfaceOrientation) + } + } +} + +/// A view that is able to update a binding to an interface orientation. +/// This view will detect and report the interface orientation when the view is +/// in a window. +private struct InterfaceOrientationObserverView: UIViewControllerRepresentable { + /// The binding to update when an interface orientation change is detected. + let binding: Binding + + /// Creates an interface orientation observer view. + init(interfaceOrientation: Binding) { + binding = interfaceOrientation + } + + func makeUIViewController(context: Context) -> InterfaceOrientationViewController { + InterfaceOrientationViewController(interfaceOrientation: binding) + } + + func updateUIViewController(_ uiView: InterfaceOrientationViewController, context: Context) {} + + final class InterfaceOrientationViewController: UIViewController { + let binding: Binding + + init(interfaceOrientation: Binding) { + binding = interfaceOrientation + super.init(nibName: nil, bundle: nil) + view.isUserInteractionEnabled = false + view.isHidden = true + view.isOpaque = false + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + self.binding.wrappedValue = self.windowInterfaceOrientation + } + + override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { + // According to the Apple documentation, this is the new way to be notified when the + // interface orientation changes. + // Also, a similar solution is on SO here: https://stackoverflow.com/a/60577486/1687195 + + super.viewWillTransition(to: size, with: coordinator) + + coordinator.animate { _ in + self.binding.wrappedValue = self.windowInterfaceOrientation + } + } + + /// The interface orientation of the window that this view is contained in. + var windowInterfaceOrientation: InterfaceOrientation? { + if let orientation = view.window?.windowScene?.interfaceOrientation { + return InterfaceOrientation(orientation) + } else { + return nil + } + } + } +} + +private extension InterfaceOrientation { + /// Creates an `InterfaceOrientation` from a `UIInterfaceOrientation`. + init?(_ uiInterfaceOrientation: UIInterfaceOrientation) { + switch uiInterfaceOrientation { + case .unknown: + return nil + case .portrait: + self = .portrait + case .portraitUpsideDown: + self = .portraitUpsideDown + case .landscapeLeft: + // UIInterfaceOrientation and InterfaceOrientation have left/right reversed. + self = .landscapeRight + case .landscapeRight: + // UIInterfaceOrientation and InterfaceOrientation have left/right reversed. + self = .landscapeLeft + @unknown default: + assertionFailure("Unknown UIInterfaceOrientation") + return nil + } + } +} diff --git a/Sources/ArcGISToolkit/Extensions/Graphic+ObservableObject.swift b/Sources/ArcGISToolkit/Utility/KeyboardState.swift similarity index 58% rename from Sources/ArcGISToolkit/Extensions/Graphic+ObservableObject.swift rename to Sources/ArcGISToolkit/Utility/KeyboardState.swift index e102a6e80..b92dbcd0e 100644 --- a/Sources/ArcGISToolkit/Extensions/Graphic+ObservableObject.swift +++ b/Sources/ArcGISToolkit/Utility/KeyboardState.swift @@ -1,17 +1,25 @@ -// Copyright 2021 Esri. - +// Copyright 2023 Esri. +// // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at -// http://www.apache.org/licenses/LICENSE-2.0 - +// +// http://www.apache.org/licenses/LICENSE-2.0 +// // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -import SwiftUI -import ArcGIS - -extension Graphic: ObservableObject {} +/// Represents the current state of the device keyboard. +enum KeyboardState { + /// The keyboard will show. + case opening + /// The keyboard did show. + case open + /// The keyboard will hide. + case closing + /// The keyboard did hide. + case closed +} diff --git a/Sources/ArcGISToolkit/Utility/SearchField.swift b/Sources/ArcGISToolkit/Utility/SearchField.swift index 5130a0290..65012a6b2 100644 --- a/Sources/ArcGISToolkit/Utility/SearchField.swift +++ b/Sources/ArcGISToolkit/Utility/SearchField.swift @@ -60,10 +60,15 @@ public struct SearchField: View { // Search text field TextField( - "Search Query", text: query, prompt: Text(prompt) - ) + ) { + Text( + "Search Query", + bundle: .toolkitModule, + comment: "A label in reference to a search query entered by the user." + ) + } .focused(isFocused) // Delete text button diff --git a/Tests/ArcGISToolkitTests/ARTests.swift b/Tests/ArcGISToolkitTests/ARTests.swift new file mode 100644 index 000000000..917e384ec --- /dev/null +++ b/Tests/ArcGISToolkitTests/ARTests.swift @@ -0,0 +1,150 @@ +// Copyright 2023 Esri. + +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 + +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import ArcGIS +import SwiftUI +import XCTest +@testable import ArcGISToolkit + +@MainActor final class ARTests: XCTestCase { + func testFlyoverLocationInitWithDefaults() throws { + let sceneView = SceneView(scene: Scene()) + + let view = FlyoverSceneView( + initialLocation: .init( + latitude: 34.056397, + longitude: -117.195646 + ), + translationFactor: 1_000 + ) { _ in + sceneView + } + + let initialCamera = view.initialCamera + XCTAssertEqual(initialCamera.location.x, -117.195646) + XCTAssertEqual(initialCamera.location.y, 34.056397) + XCTAssertEqual(initialCamera.heading, 0) + XCTAssertEqual(initialCamera.pitch, 90) + XCTAssertEqual(initialCamera.roll, 0) + + XCTAssertEqual(view.translationFactor, 1_000) + XCTAssertTrue(view.shouldOrientToCompass) + } + + func testFlyoverLocationInit() throws { + let sceneView = SceneView(scene: Scene()) + + let view = FlyoverSceneView( + initialLocation: .init( + latitude: 34.056397, + longitude: -117.195646 + ), + translationFactor: 1_000, + initialHeading: 90 + ) { _ in + sceneView + } + + let initialCamera = view.initialCamera + XCTAssertEqual(initialCamera.location.x, -117.195646) + XCTAssertEqual(initialCamera.location.y, 34.056397) + XCTAssertEqual(initialCamera.heading, 90) + XCTAssertEqual(initialCamera.pitch, 90) + XCTAssertEqual(initialCamera.roll, 0) + + XCTAssertEqual(view.translationFactor, 1_000) + XCTAssertFalse(view.shouldOrientToCompass) + } + + func testFlyoverLatLongInitWithDefaults() throws { + let sceneView = SceneView(scene: Scene()) + + let view = FlyoverSceneView( + initialLatitude: 34.056397, + initialLongitude: -117.195646, + initialAltitude: 1_000, + translationFactor: 1_000 + ) { _ in + sceneView + } + + let initialCamera = view.initialCamera + XCTAssertEqual(initialCamera.location.x, -117.195646) + XCTAssertEqual(initialCamera.location.y, 34.056397) + XCTAssertEqual(initialCamera.heading, 0) + XCTAssertEqual(initialCamera.pitch, 90) + XCTAssertEqual(initialCamera.roll, 0) + + XCTAssertEqual(view.translationFactor, 1_000) + XCTAssertTrue(view.shouldOrientToCompass) + } + + func testFlyoverLatLongInit() throws { + let sceneView = SceneView(scene: Scene()) + + let view = FlyoverSceneView( + initialLatitude: 34.056397, + initialLongitude: -117.195646, + initialAltitude: 1_000, + translationFactor: 1_000, + initialHeading: 180 + ) { _ in + sceneView + } + + let initialCamera = view.initialCamera + XCTAssertEqual(initialCamera.location.x, -117.195646) + XCTAssertEqual(initialCamera.location.y, 34.056397) + XCTAssertEqual(initialCamera.heading, 180) + XCTAssertEqual(initialCamera.pitch, 90) + XCTAssertEqual(initialCamera.roll, 0) + + XCTAssertEqual(view.translationFactor, 1_000) + XCTAssertFalse(view.shouldOrientToCompass) + } + + func testTableTopInit() throws { + let sceneView = SceneView(scene: Scene()) + + let view = TableTopSceneView( + anchorPoint: .init(latitude: 34.056397, longitude: -117.195646), + translationFactor: 1_000, + clippingDistance: 1_000 + ) { _ in + sceneView + } + + XCTAssertEqual(view.anchorPoint.x, -117.195646) + XCTAssertEqual(view.anchorPoint.y, 34.056397) + + XCTAssertEqual(view.translationFactor, 1_000) + XCTAssertEqual(view.clippingDistance, 1_000) + XCTAssertFalse(view.initialTransformationIsSet) + XCTAssertFalse(view.coachingOverlayIsHidden) + } + + func testTableTopARCoachingOverlayViewModifier() throws { + let sceneView = SceneView(scene: Scene()) + + let view = TableTopSceneView( + anchorPoint: .init(latitude: 0, longitude: 0), + translationFactor: 1_000, + clippingDistance: 1_000 + ) { _ in + sceneView + } + .coachingOverlayHidden(true) + + XCTAssertTrue(view.coachingOverlayIsHidden) + } +} diff --git a/Tests/ArcGISToolkitTests/BasemapGalleryItemTests.swift b/Tests/ArcGISToolkitTests/BasemapGalleryItemTests.swift index 2c3db5951..18183bc34 100644 --- a/Tests/ArcGISToolkitTests/BasemapGalleryItemTests.swift +++ b/Tests/ArcGISToolkitTests/BasemapGalleryItemTests.swift @@ -43,7 +43,7 @@ final class BasemapGalleryItemTests: XCTestCase { let loading = try XCTUnwrap(isBasemapLoading) XCTAssertFalse(loading, "Item is not loading.") XCTAssertIdentical(item.basemap, basemap) - XCTAssertEqual(item.name, "ArcGIS:LightGray") + XCTAssertEqual(item.name, "ArcGIS Light Gray") XCTAssertNil(item.description) XCTAssertNotNil(item.thumbnail) XCTAssertNil(item.loadBasemapError) diff --git a/Tests/ArcGISToolkitTests/CertificatePickerViewModelTests.swift b/Tests/ArcGISToolkitTests/CertificatePickerViewModelTests.swift index fdc72c1d1..ad13e2b0a 100644 --- a/Tests/ArcGISToolkitTests/CertificatePickerViewModelTests.swift +++ b/Tests/ArcGISToolkitTests/CertificatePickerViewModelTests.swift @@ -21,25 +21,27 @@ import ArcGIS let model = CertificatePickerViewModel(challenge: challenge) XCTAssertNil(model.certificateURL) - XCTAssertTrue(model.showPrompt) + XCTAssertFalse(model.showPrompt) XCTAssertFalse(model.showPicker) XCTAssertFalse(model.showPassword) XCTAssertFalse(model.showCertificateError) XCTAssertEqual(model.challengingHost, "host.com") - model.proceedFromPrompt() + model.proceedToPicker() + // Have to wait here because the proceed function is delayed to avoid a bug. + try? await Task.sleep(nanoseconds: 300_000_000) XCTAssertTrue(model.showPicker) let url = URL(fileURLWithPath: "/does-not-exist.pfx") - model.proceed(withCertificateURL: url) + model.proceedToPasswordEntry(forCertificateWithURL: url) XCTAssertEqual(model.certificateURL, url) XCTAssertTrue(model.showPassword) - model.proceed(withPassword: "1234") + model.proceedToUseCertificate(withPassword: "1234") // Have to yield here because the proceed function kicks off a task. await Task.yield() // Have to wait here because the proceed function waits to avoid a bug. - try? await Task.sleep(nanoseconds: 300_000) + try? await Task.sleep(nanoseconds: 300_000_000) // Another yield seems to be required to deal with timing when running the test // repeatedly. await Task.yield() diff --git a/Tests/ArcGISToolkitTests/ResultTests.swift b/Tests/ArcGISToolkitTests/ResultTests.swift index 85a578e65..4dca675b7 100644 --- a/Tests/ArcGISToolkitTests/ResultTests.swift +++ b/Tests/ArcGISToolkitTests/ResultTests.swift @@ -17,6 +17,7 @@ import XCTest class ResultTests: XCTestCase { /// Tests the conversion of a cancellation error result to `nil.` + @available(*, deprecated) func testCancellationToNil() { var result: Result = .success("hello") XCTAssertNotNil(result.cancellationToNil()) diff --git a/UI Test Runner/UI Test Runner.xcodeproj/project.pbxproj b/UI Test Runner/UI Test Runner.xcodeproj/project.pbxproj index 3389abff7..6aed7d7e0 100644 --- a/UI Test Runner/UI Test Runner.xcodeproj/project.pbxproj +++ b/UI Test Runner/UI Test Runner.xcodeproj/project.pbxproj @@ -11,9 +11,13 @@ 7552A7562A573CBB0023DA5A /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7552A7552A573CBB0023DA5A /* Tests.swift */; }; 7552A7582A573CBD0023DA5A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7552A7572A573CBD0023DA5A /* Assets.xcassets */; }; 7552A75B2A573CBD0023DA5A /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7552A75A2A573CBD0023DA5A /* Preview Assets.xcassets */; }; - 7552A7622A573D810023DA5A /* BookmarksTestView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7552A7612A573D810023DA5A /* BookmarksTestView.swift */; }; + 7552A7622A573D810023DA5A /* BookmarksTestCase1View.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7552A7612A573D810023DA5A /* BookmarksTestCase1View.swift */; }; 7552A76C2A573DFB0023DA5A /* BookmarksTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7552A76B2A573DFB0023DA5A /* BookmarksTests.swift */; }; 7552A7762A573E900023DA5A /* ArcGISToolkit in Frameworks */ = {isa = PBXBuildFile; productRef = 7552A7752A573E900023DA5A /* ArcGISToolkit */; }; + 7584B7552B1A79DD00772AB7 /* BookmarksTestViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7584B7542B1A79DD00772AB7 /* BookmarksTestViews.swift */; }; + 7584B7572B1A7AF100772AB7 /* BookmarksTestCase2View.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7584B7562B1A7AF100772AB7 /* BookmarksTestCase2View.swift */; }; + 7584B7592B1A817A00772AB7 /* BookmarksTestCase3View.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7584B7582B1A817A00772AB7 /* BookmarksTestCase3View.swift */; }; + 7584B75B2B1A824300772AB7 /* BookmarksTestCase4View.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7584B75A2B1A824300772AB7 /* BookmarksTestCase4View.swift */; }; 75B236692A5CB49B00AEFACE /* BasemapGalleryTestView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75B236682A5CB49B00AEFACE /* BasemapGalleryTestView.swift */; }; 75B2366B2A5CB8CE00AEFACE /* BasemapGalleryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75B2366A2A5CB8CE00AEFACE /* BasemapGalleryTests.swift */; }; 75B2366D2A5CC78C00AEFACE /* FloorFilterTestView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75B2366C2A5CC78C00AEFACE /* FloorFilterTestView.swift */; }; @@ -36,10 +40,14 @@ 7552A7552A573CBB0023DA5A /* Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = ""; }; 7552A7572A573CBD0023DA5A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 7552A75A2A573CBD0023DA5A /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; - 7552A7612A573D810023DA5A /* BookmarksTestView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksTestView.swift; sourceTree = ""; }; + 7552A7612A573D810023DA5A /* BookmarksTestCase1View.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksTestCase1View.swift; sourceTree = ""; }; 7552A7642A573DA00023DA5A /* arcgis-maps-sdk-swift-toolkit */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = "arcgis-maps-sdk-swift-toolkit"; path = ..; sourceTree = ""; }; 7552A7692A573DFB0023DA5A /* UITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = UITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 7552A76B2A573DFB0023DA5A /* BookmarksTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksTests.swift; sourceTree = ""; }; + 7584B7542B1A79DD00772AB7 /* BookmarksTestViews.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksTestViews.swift; sourceTree = ""; }; + 7584B7562B1A7AF100772AB7 /* BookmarksTestCase2View.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BookmarksTestCase2View.swift; sourceTree = ""; }; + 7584B7582B1A817A00772AB7 /* BookmarksTestCase3View.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksTestCase3View.swift; sourceTree = ""; }; + 7584B75A2B1A824300772AB7 /* BookmarksTestCase4View.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarksTestCase4View.swift; sourceTree = ""; }; 75B236682A5CB49B00AEFACE /* BasemapGalleryTestView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BasemapGalleryTestView.swift; sourceTree = ""; }; 75B2366A2A5CB8CE00AEFACE /* BasemapGalleryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BasemapGalleryTests.swift; sourceTree = ""; }; 75B2366C2A5CC78C00AEFACE /* FloorFilterTestView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FloorFilterTestView.swift; sourceTree = ""; }; @@ -124,11 +132,23 @@ path = UITests; sourceTree = ""; }; + 7584B7532B1A798B00772AB7 /* BookmarksTestViews */ = { + isa = PBXGroup; + children = ( + 7552A7612A573D810023DA5A /* BookmarksTestCase1View.swift */, + 7584B7562B1A7AF100772AB7 /* BookmarksTestCase2View.swift */, + 7584B7582B1A817A00772AB7 /* BookmarksTestCase3View.swift */, + 7584B75A2B1A824300772AB7 /* BookmarksTestCase4View.swift */, + 7584B7542B1A79DD00772AB7 /* BookmarksTestViews.swift */, + ); + path = BookmarksTestViews; + sourceTree = ""; + }; 75B236672A5CB32700AEFACE /* TestViews */ = { isa = PBXGroup; children = ( 75B236682A5CB49B00AEFACE /* BasemapGalleryTestView.swift */, - 7552A7612A573D810023DA5A /* BookmarksTestView.swift */, + 7584B7532B1A798B00772AB7 /* BookmarksTestViews */, 75B2366C2A5CC78C00AEFACE /* FloorFilterTestView.swift */, ); path = TestViews; @@ -239,8 +259,12 @@ files = ( 7552A7562A573CBB0023DA5A /* Tests.swift in Sources */, 7552A7542A573CBB0023DA5A /* UITestRunner.swift in Sources */, + 7584B7552B1A79DD00772AB7 /* BookmarksTestViews.swift in Sources */, 75B2366D2A5CC78C00AEFACE /* FloorFilterTestView.swift in Sources */, - 7552A7622A573D810023DA5A /* BookmarksTestView.swift in Sources */, + 7552A7622A573D810023DA5A /* BookmarksTestCase1View.swift in Sources */, + 7584B7592B1A817A00772AB7 /* BookmarksTestCase3View.swift in Sources */, + 7584B7572B1A7AF100772AB7 /* BookmarksTestCase2View.swift in Sources */, + 7584B75B2B1A824300772AB7 /* BookmarksTestCase4View.swift in Sources */, 75B236692A5CB49B00AEFACE /* BasemapGalleryTestView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -400,7 +424,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 200.2.0; + MARKETING_VERSION = 200.3.0; PRODUCT_BUNDLE_IDENTIFIER = "com.esri.arcgis-swift-sdk-toolkit-ui-test-runner.UI-Test-Runner"; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; @@ -432,7 +456,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 200.2.0; + MARKETING_VERSION = 200.3.0; PRODUCT_BUNDLE_IDENTIFIER = "com.esri.arcgis-swift-sdk-toolkit-ui-test-runner.UI-Test-Runner"; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; diff --git a/UI Test Runner/UI Test Runner/TestViews/BookmarksTestView.swift b/UI Test Runner/UI Test Runner/TestViews/BookmarksTestViews/BookmarksTestCase1View.swift similarity index 93% rename from UI Test Runner/UI Test Runner/TestViews/BookmarksTestView.swift rename to UI Test Runner/UI Test Runner/TestViews/BookmarksTestViews/BookmarksTestCase1View.swift index 3ceaad6c4..1eaa711f9 100644 --- a/UI Test Runner/UI Test Runner/TestViews/BookmarksTestView.swift +++ b/UI Test Runner/UI Test Runner/TestViews/BookmarksTestViews/BookmarksTestCase1View.swift @@ -15,7 +15,8 @@ import ArcGIS import ArcGISToolkit import SwiftUI -struct BookmarksTestView: View { +/// A view that displays the Bookmarks component initialized with a GeoModel containing bookmarks. +struct BookmarksTestCase1View: View { /// The `Map` with predefined bookmarks. @State private var map = Map(url: URL(string: "https://www.arcgis.com/home/item.html?id=16f1b8ba37b44dc3884afc8d5f454dd2")!)! diff --git a/UI Test Runner/UI Test Runner/TestViews/BookmarksTestViews/BookmarksTestCase2View.swift b/UI Test Runner/UI Test Runner/TestViews/BookmarksTestViews/BookmarksTestCase2View.swift new file mode 100644 index 000000000..53924f798 --- /dev/null +++ b/UI Test Runner/UI Test Runner/TestViews/BookmarksTestViews/BookmarksTestCase2View.swift @@ -0,0 +1,33 @@ +// Copyright 2023 Esri. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import ArcGIS +import ArcGISToolkit +import SwiftUI + +/// A view that displays the Bookmarks component initialized with a GeoModel containing no bookmarks. +struct BookmarksTestCase2View: View { + /// The `Map` with no predefined bookmarks. + @State private var map = Map(basemapStyle: .arcGISCommunity) + + var body: some View { + MapView(map: map) + .sheet(isPresented: .constant(true)) { + Bookmarks( + isPresented: .constant(true), + geoModel: map + ) + } + } +} diff --git a/UI Test Runner/UI Test Runner/TestViews/BookmarksTestViews/BookmarksTestCase3View.swift b/UI Test Runner/UI Test Runner/TestViews/BookmarksTestViews/BookmarksTestCase3View.swift new file mode 100644 index 000000000..c997ea865 --- /dev/null +++ b/UI Test Runner/UI Test Runner/TestViews/BookmarksTestViews/BookmarksTestCase3View.swift @@ -0,0 +1,33 @@ +// Copyright 2023 Esri. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import ArcGIS +import ArcGISToolkit +import SwiftUI + +/// A view that displays the Bookmarks component initialized with no bookmarks. +struct BookmarksTestCase3View: View { + /// The `Map` with no predefined bookmarks. + @State private var map = Map(basemapStyle: .arcGISCommunity) + + var body: some View { + MapView(map: map) + .sheet(isPresented: .constant(true)) { + Bookmarks( + isPresented: .constant(true), + bookmarks: [] + ) + } + } +} diff --git a/UI Test Runner/UI Test Runner/TestViews/BookmarksTestViews/BookmarksTestCase4View.swift b/UI Test Runner/UI Test Runner/TestViews/BookmarksTestViews/BookmarksTestCase4View.swift new file mode 100644 index 000000000..c8b6e9242 --- /dev/null +++ b/UI Test Runner/UI Test Runner/TestViews/BookmarksTestViews/BookmarksTestCase4View.swift @@ -0,0 +1,33 @@ +// Copyright 2023 Esri. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import ArcGIS +import ArcGISToolkit +import SwiftUI + +/// A view that displays the Bookmarks component initialized with bookmarks. +struct BookmarksTestCase4View: View { + /// The `Map` with no predefined bookmarks. + @State private var map = Map(basemapStyle: .arcGISCommunity) + + var body: some View { + MapView(map: map) + .sheet(isPresented: .constant(true)) { + Bookmarks( + isPresented: .constant(true), + bookmarks: [Bookmark(name: "Redlands")] + ) + } + } +} diff --git a/UI Test Runner/UI Test Runner/TestViews/BookmarksTestViews/BookmarksTestViews.swift b/UI Test Runner/UI Test Runner/TestViews/BookmarksTestViews/BookmarksTestViews.swift new file mode 100644 index 000000000..4c27d57d8 --- /dev/null +++ b/UI Test Runner/UI Test Runner/TestViews/BookmarksTestViews/BookmarksTestViews.swift @@ -0,0 +1,26 @@ +// Copyright 2023 Esri. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import SwiftUI + +struct BookmarksTestViews: View { + var body: some View { + List { + NavigationLink("Bookmarks Test Case 1", destination: BookmarksTestCase1View()) + NavigationLink("Bookmarks Test Case 2", destination: BookmarksTestCase2View()) + NavigationLink("Bookmarks Test Case 3", destination: BookmarksTestCase3View()) + NavigationLink("Bookmarks Test Case 4", destination: BookmarksTestCase4View()) + } + } +} diff --git a/UI Test Runner/UI Test Runner/Tests.swift b/UI Test Runner/UI Test Runner/Tests.swift index 92792b4e2..38cc2a11e 100644 --- a/UI Test Runner/UI Test Runner/Tests.swift +++ b/UI Test Runner/UI Test Runner/Tests.swift @@ -18,7 +18,7 @@ struct Tests: View { NavigationView { List { NavigationLink("Basemap Gallery Tests", destination: BasemapGalleryTestView()) - NavigationLink("Bookmarks Tests", destination: BookmarksTestView()) + NavigationLink("Bookmarks Tests", destination: BookmarksTestViews()) NavigationLink("Floor Filter Tests", destination: FloorFilterTestView()) } } diff --git a/UI Test Runner/UITests/BookmarksTests.swift b/UI Test Runner/UITests/BookmarksTests.swift index 363f8f3c3..b0b2b319f 100644 --- a/UI Test Runner/UITests/BookmarksTests.swift +++ b/UI Test Runner/UITests/BookmarksTests.swift @@ -19,7 +19,7 @@ final class BookmarksTests: XCTestCase { } /// Test general usage of the Bookmarks component. - func testBookmarks() throws { + func testCase1() throws { let app = XCUIApplication() app.launch() @@ -27,14 +27,19 @@ final class BookmarksTests: XCTestCase { let bookmarksButton = app.buttons["Bookmarks"].firstMatch let selectABookmarkText = app.staticTexts["Select a bookmark"] let giantSequoiasButton = app.buttons["Giant Sequoias of Willamette Blvd"].firstMatch - let giantSequoiasLabel = app.staticTexts["Giant Sequoias of Willamette Blvd"] + let giantSequoiasLabel = app.staticTexts["Giant Sequoias of Willamette Blvd"].firstMatch let historicLaddsButton = app.buttons["Historic Ladd's Addition"].firstMatch let historicLaddsLabel = app.staticTexts["Historic Ladd's Addition"] + let bookmarksTestCase1Button = app.buttons["Bookmarks Test Case 1"] - // Open the Bookmarks component test view. + // Open the Bookmarks component test views. XCTAssertTrue(bookmarksTestsButton.exists, "The Bookmarks Tests button wasn't found.") bookmarksTestsButton.tap() + // Open the Bookmarks component test view. + XCTAssertTrue(bookmarksTestCase1Button.exists, "The Bookmarks Test Case 1 button wasn't found.") + bookmarksTestCase1Button.tap() + // Open the bookmark selection view. XCTAssertTrue(bookmarksButton.exists, "The Bookmarks button wasn't found.") bookmarksButton.tap() @@ -43,7 +48,7 @@ final class BookmarksTests: XCTestCase { XCTAssertTrue(selectABookmarkText.exists, "The Select a bookmark text wasn't found.") // Select a bookmark and confirm the component notified the test view of the selection. - XCTAssertTrue(giantSequoiasButton.exists, "The Giant Sequoias button wasn't found.") + XCTAssertTrue(giantSequoiasButton.waitForExistence(timeout: 1.0), "The Giant Sequoias button wasn't found.") giantSequoiasButton.tap() // Confirm the selection was made. @@ -63,7 +68,7 @@ final class BookmarksTests: XCTestCase { bookmarksButton.tap() // Select a bookmark and confirm the component notified the test view of the new selection. - XCTAssertTrue(historicLaddsButton.exists, "The Historic Ladd's button wasn't found.") + XCTAssertTrue(historicLaddsButton.waitForExistence(timeout: 1.0), "The Historic Ladd's button wasn't found.") historicLaddsButton.tap() // Confirm the selection was made. @@ -72,4 +77,64 @@ final class BookmarksTests: XCTestCase { "The Historic Ladd's label confirming the bookmark selection wasn't found." ) } + + /// Test using the Bookmarks component with a map with no bookmarks defined. + func testCase2() throws { + let app = XCUIApplication() + app.launch() + + let bookmarksTestsButton = app.buttons["Bookmarks Tests"] + let bookmarksTestCase2Button = app.buttons["Bookmarks Test Case 2"] + let noBookmarks = app.staticTexts["No bookmarks"] + + // Open the Bookmarks component test views. + XCTAssertTrue(bookmarksTestsButton.exists, "The Bookmarks Tests button wasn't found.") + bookmarksTestsButton.tap() + + // Open the Bookmarks component test view. + XCTAssertTrue(bookmarksTestCase2Button.exists, "The Bookmarks Test Case 2 button wasn't found.") + bookmarksTestCase2Button.tap() + + XCTAssertTrue(noBookmarks.waitForExistence(timeout: 5.0), "The \"No Bookmarks\" text wasn't found.") + } + + /// Test using the Bookmarks component no bookmarks defined. + func testCase3() throws { + let app = XCUIApplication() + app.launch() + + let bookmarksTestsButton = app.buttons["Bookmarks Tests"] + let bookmarksTestCase3Button = app.buttons["Bookmarks Test Case 3"] + let noBookmarks = app.staticTexts["No bookmarks"] + + // Open the Bookmarks component test views. + XCTAssertTrue(bookmarksTestsButton.exists, "The Bookmarks Tests button wasn't found.") + bookmarksTestsButton.tap() + + // Open the Bookmarks component test view. + XCTAssertTrue(bookmarksTestCase3Button.exists, "The Bookmarks Test Case 3 button wasn't found.") + bookmarksTestCase3Button.tap() + + XCTAssertTrue(noBookmarks.exists, "The \"No Bookmarks\" text wasn't found.") + } + + /// Test using the Bookmarks component with bookmarks provided directly. + func testCase4() throws { + let app = XCUIApplication() + app.launch() + + let bookmarksTestsButton = app.buttons["Bookmarks Tests"] + let bookmarksTestCase4Button = app.buttons["Bookmarks Test Case 4"] + let redlandsButton = app.buttons["Redlands"].firstMatch + + // Open the Bookmarks component test views. + XCTAssertTrue(bookmarksTestsButton.exists, "The Bookmarks Tests button wasn't found.") + bookmarksTestsButton.tap() + + // Open the Bookmarks component test view. + XCTAssertTrue(bookmarksTestCase4Button.exists, "The Bookmarks Test Case 4 button wasn't found.") + bookmarksTestCase4Button.tap() + + XCTAssertTrue(redlandsButton.exists, "The Redlands button wasn't found.") + } }