diff --git a/.github/workflows/check_versions.yml b/.github/workflows/check_versions.yml new file mode 100644 index 00000000000..be1c0ff0b25 --- /dev/null +++ b/.github/workflows/check_versions.yml @@ -0,0 +1,21 @@ +# Checks the PR label against the app version, fails if they do not match. +# This is to prevent unwanted PRs from being merged into main. +name: Check PR and App Versions + +on: + pull_request: + types: + - opened + branches: + - 'main' + workflow_dispatch: # allows workflow to be triggered manually + +jobs: + check-version: + runs-on: macOS-latest + steps: + - uses: actions/checkout@v4 + - name: Check PR label and App Versions + continue-on-error: false + run: | + echo "Testing" diff --git a/ContinueReadingWidget/Info.plist b/ContinueReadingWidget/Info.plist index 321c90fbd63..8be131e1f7b 100644 --- a/ContinueReadingWidget/Info.plist +++ b/ContinueReadingWidget/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType XPC! CFBundleShortVersionString - 7.7.1 + 7.7.2 CFBundleVersion 0 NSExtension diff --git a/NotificationServiceExtension/Info.plist b/NotificationServiceExtension/Info.plist index 82265380777..9695b4a8784 100644 --- a/NotificationServiceExtension/Info.plist +++ b/NotificationServiceExtension/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType $(PRODUCT_BUNDLE_PACKAGE_TYPE) CFBundleShortVersionString - 7.7.1 + 7.7.2 CFBundleVersion $(CURRENT_PROJECT_VERSION) NSExtension diff --git a/WMF Framework/Event Platform/EventPlatformClient.swift b/WMF Framework/Event Platform/EventPlatformClient.swift index 5d5b314605f..410e28d2ee9 100644 --- a/WMF Framework/Event Platform/EventPlatformClient.swift +++ b/WMF Framework/Event Platform/EventPlatformClient.swift @@ -160,7 +160,7 @@ import WMFData case watchlist = "/analytics/mobile_apps/ios_watchlists/4.1.0" case appInteraction = "/analytics/mobile_apps/app_interaction/1.1.0" case imageRecommendation = "/analytics/mobile_apps/android_image_recommendation_event/1.1.0" - case articleLinkInteraction = "/analytics/mobile_apps/ios_article_link_interaction/1.0.0" + case articleLinkInteraction = "/analytics/mobile_apps/ios_article_link_interaction/2.0.0" } /** diff --git a/WMF Framework/Info.plist b/WMF Framework/Info.plist index aeafa43a073..24377358cf9 100644 --- a/WMF Framework/Info.plist +++ b/WMF Framework/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 7.7.1 + 7.7.2 CFBundleVersion 0 NSPrincipalClass diff --git a/Widgets/Info.plist b/Widgets/Info.plist index 6cc39bbb710..96f8a075186 100644 --- a/Widgets/Info.plist +++ b/Widgets/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType $(PRODUCT_BUNDLE_PACKAGE_TYPE) CFBundleShortVersionString - 7.7.1 + 7.7.2 CFBundleVersion $(CURRENT_PROJECT_VERSION) NSExtension diff --git a/Wikipedia Stickers/Info.plist b/Wikipedia Stickers/Info.plist index 66cb02c091e..5108aa2d736 100644 --- a/Wikipedia Stickers/Info.plist +++ b/Wikipedia Stickers/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType XPC! CFBundleShortVersionString - 7.7.1 + 7.7.2 CFBundleVersion 0 UIRequiredDeviceCapabilities diff --git a/Wikipedia/Code/AltTextArticleEditorOnboardingPresenter.swift b/Wikipedia/Code/AltTextArticleEditorOnboardingPresenter.swift index 0da0418dc9a..5282be83ffd 100644 --- a/Wikipedia/Code/AltTextArticleEditorOnboardingPresenter.swift +++ b/Wikipedia/Code/AltTextArticleEditorOnboardingPresenter.swift @@ -84,9 +84,9 @@ final class AltTextArticleEditorOnboardingPresenter { let sheetLocalizedStrings = WMFAltTextExperimentModalSheetViewModel.LocalizedStrings(title: addAltTextTitle, nextButton: CommonStrings.nextTitle, textViewPlaceholder: textViewPlaceholder, textViewBottomDescription: textViewBottomDescription, characterCounterWarning: characterCounterWarningText, characterCounterFormat: characterCounterFormat, guidance: guidanceText) let bottomSheetViewModel = WMFAltTextExperimentModalSheetViewModel(altTextViewModel: altTextViewModel, localizedStrings: sheetLocalizedStrings) - - if let articleViewController = ArticleViewController(articleURL: articleViewController.articleURL, dataStore: articleViewController.dataStore, theme: articleViewController.theme, altTextExperimentViewModel: altTextViewModel, needsAltTextExperimentSheet: true, altTextBottomSheetViewModel: bottomSheetViewModel, altTextDelegate: articleViewController) { - + + if let articleViewController = ArticleViewController(articleURL: articleViewController.articleURL, dataStore: articleViewController.dataStore, theme: articleViewController.theme, source: .undefined, altTextExperimentViewModel: altTextViewModel, needsAltTextExperimentSheet: true, altTextBottomSheetViewModel: bottomSheetViewModel, altTextDelegate: articleViewController) { + self.articleViewController?.navigationController?.pushViewController(articleViewController, animated: true) } } diff --git a/Wikipedia/Code/AltTextImageRecommendationsOnboardingPresenter.swift b/Wikipedia/Code/AltTextImageRecommendationsOnboardingPresenter.swift index 31eaf716ee3..3eb3730b3e7 100644 --- a/Wikipedia/Code/AltTextImageRecommendationsOnboardingPresenter.swift +++ b/Wikipedia/Code/AltTextImageRecommendationsOnboardingPresenter.swift @@ -69,7 +69,7 @@ final class AltTextImageRecommendationsOnboardingPresenter { if let siteURL = imageRecommendationsViewModel.project.siteURL, let articleURL = siteURL.wmf_URL(withTitle: articleTitle), - let articleViewController = ArticleViewController(articleURL: articleURL, dataStore: exploreViewController.dataStore, theme: exploreViewController.theme, altTextExperimentViewModel: altTextViewModel, needsAltTextExperimentSheet: true, altTextBottomSheetViewModel: bottomSheetViewModel, altTextDelegate: exploreViewController) { + let articleViewController = ArticleViewController(articleURL: articleURL, dataStore: exploreViewController.dataStore, theme: exploreViewController.theme, source: .undefined, altTextExperimentViewModel: altTextViewModel, needsAltTextExperimentSheet: true, altTextBottomSheetViewModel: bottomSheetViewModel, altTextDelegate: exploreViewController) { imageRecommendationsViewController.navigationController?.pushViewController(articleViewController, animated: true) } diff --git a/Wikipedia/Code/ArticleCollectionViewController.swift b/Wikipedia/Code/ArticleCollectionViewController.swift index 92d8b8990e2..54109402682 100644 --- a/Wikipedia/Code/ArticleCollectionViewController.swift +++ b/Wikipedia/Code/ArticleCollectionViewController.swift @@ -2,12 +2,13 @@ import UIKit @objc(WMFArticleCollectionViewController) class ArticleCollectionViewController: ColumnarCollectionViewController, EditableCollection, MEPEventsProviding, CollectionViewContextMenuShowing { + @objc var dataStore: MWKDataStore! var cellLayoutEstimate: ColumnarCollectionViewLayoutHeightEstimate? var editController: CollectionViewEditController! var contentGroup: WMFContentGroup? - + override func viewDidLoad() { super.viewDidLoad() layoutManager.register(ArticleRightAlignedImageCollectionViewCell.self, forCellWithReuseIdentifier: ArticleRightAlignedImageCollectionViewCell.identifier, addPlaceholder: true) @@ -142,7 +143,7 @@ class ArticleCollectionViewController: ColumnarCollectionViewController, Editabl previewedIndexPath = indexPath - guard let articleViewController = ArticleViewController(articleURL: articleURL, dataStore: dataStore, theme: self.theme) else { + guard let articleViewController = ArticleViewController(articleURL: articleURL, dataStore: dataStore, theme: self.theme, source: .undefined) else { return nil } articleViewController.articlePreviewingDelegate = self @@ -181,7 +182,6 @@ extension ArticleCollectionViewController { collectionView.deselectItem(at: indexPath, animated: true) return } - navigate(to: articleURL) } diff --git a/Wikipedia/Code/ArticleLinkInteractionFunnel.swift b/Wikipedia/Code/ArticleLinkInteractionFunnel.swift index 5098b08c1f8..d8c7cfb6102 100644 --- a/Wikipedia/Code/ArticleLinkInteractionFunnel.swift +++ b/Wikipedia/Code/ArticleLinkInteractionFunnel.swift @@ -14,24 +14,39 @@ final class ArticleLinkInteractionFunnel { let action: Action let pageID: Int let wikiID: String - + let source: Int? + enum CodingKeys: String, CodingKey { case action = "action" case pageID = "page_id" case wikiID = "wiki_db" + case source } } - private func logEvent(action: ArticleLinkInteractionFunnel.Action, pageID: Int, project: WikimediaProject) { - + private func logEvent(action: ArticleLinkInteractionFunnel.Action, pageID: Int, project: WikimediaProject, source: Int? = nil) { + let wikiID = project.notificationsApiWikiIdentifier - let event: ArticleLinkInteractionFunnel.Event = ArticleLinkInteractionFunnel.Event(action: action, pageID: pageID, wikiID: wikiID) + let event: ArticleLinkInteractionFunnel.Event = ArticleLinkInteractionFunnel.Event(action: action, pageID: pageID, wikiID: wikiID, source: source) EventPlatformClient.shared.submit(stream: .articleLinkInteraction, event: event) } - func logArticleView(pageID: Int, project: WikimediaProject) { - logEvent(action: .navigate, pageID: pageID, project: project) + func logArticleView(pageID: Int, project: WikimediaProject, source: ArticleSource? = nil) { + // Avoid sending 0 to backend. It doesn't throw an error, but is unexpected + let loggingSource = source == .undefined ? nil : source?.rawValue + logEvent(action: .navigate, pageID: pageID, project: project, source: loggingSource) } } +@objc +public enum ArticleSource: Int { + case undefined = 0 // temporary + case search = 1 + case history = 4 + case places = 9 +} + +public struct ArticleSourceUserInfoKeys { + static let articleSource = "articleSource" +} diff --git a/Wikipedia/Code/ArticleLocationCollectionViewController.swift b/Wikipedia/Code/ArticleLocationCollectionViewController.swift index 6cacce84849..70edd522a85 100644 --- a/Wikipedia/Code/ArticleLocationCollectionViewController.swift +++ b/Wikipedia/Code/ArticleLocationCollectionViewController.swift @@ -12,15 +12,17 @@ class ArticleLocationCollectionViewController: ColumnarCollectionViewController, private var previewedIndexPath: IndexPath? private let contentGroup: WMFContentGroup? private let needsCloseButton: Bool + var articleSource: ArticleSource let contentGroupIDURIString: String? - required init(articleURLs: [URL], dataStore: MWKDataStore, contentGroup: WMFContentGroup?, theme: Theme, needsCloseButton: Bool = false) { + required init(articleURLs: [URL], dataStore: MWKDataStore, contentGroup: WMFContentGroup?, theme: Theme, needsCloseButton: Bool = false, source: ArticleSource) { self.articleURLs = articleURLs self.dataStore = dataStore self.contentGroup = contentGroup contentGroupIDURIString = contentGroup?.objectID.uriRepresentation().absoluteString self.needsCloseButton = needsCloseButton + self.articleSource = source super.init(nibName: nil, bundle: nil) self.theme = theme if needsCloseButton { @@ -34,6 +36,7 @@ class ArticleLocationCollectionViewController: ColumnarCollectionViewController, self.contentGroup = nil self.contentGroupIDURIString = nil self.needsCloseButton = false + self.articleSource = .undefined super.init(coder: aDecoder) if needsCloseButton { hidesBottomBarWhenPushed = true @@ -185,15 +188,17 @@ extension ArticleLocationCollectionViewController: LocationManagerDelegate { // MARK: - UICollectionViewDelegate extension ArticleLocationCollectionViewController { func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { - navigate(to: articleURLs[indexPath.item]) + let userInfo: [AnyHashable:Any]? = [ArticleSourceUserInfoKeys.articleSource: articleSource.rawValue] + navigate(to: articleURLs[indexPath.item], userInfo: userInfo) } } // MARK: - CollectionViewContextMenuShowing extension ArticleLocationCollectionViewController: CollectionViewContextMenuShowing { func articleViewController(for indexPath: IndexPath) -> ArticleViewController? { + let articleURL = articleURL(at: indexPath) - let articleViewController = ArticleViewController(articleURL: articleURL, dataStore: dataStore, theme: theme) + let articleViewController = ArticleViewController(articleURL: articleURL, dataStore: dataStore, theme: theme, source: articleSource) return articleViewController } diff --git a/Wikipedia/Code/ArticleViewController+LinkPreviewing.swift b/Wikipedia/Code/ArticleViewController+LinkPreviewing.swift index b94c93bf485..5626bd99253 100644 --- a/Wikipedia/Code/ArticleViewController+LinkPreviewing.swift +++ b/Wikipedia/Code/ArticleViewController+LinkPreviewing.swift @@ -122,7 +122,7 @@ extension ArticleViewController: ArticleContextMenuPresenting, WKUIDelegate { return nil } - let articleVC = ArticleViewController(articleURL: newArticleURL, dataStore: dataStore, theme: theme) + let articleVC = ArticleViewController(articleURL: newArticleURL, dataStore: dataStore, theme: theme, source: .undefined) articleVC?.articlePreviewingDelegate = self articleVC?.wmf_addPeekableChildViewController(for: newArticleURL, dataStore: dataStore, theme: theme) return articleVC diff --git a/Wikipedia/Code/ArticleViewController.swift b/Wikipedia/Code/ArticleViewController.swift index ab182e4cab7..e4d17bad9d6 100644 --- a/Wikipedia/Code/ArticleViewController.swift +++ b/Wikipedia/Code/ArticleViewController.swift @@ -173,15 +173,17 @@ class ArticleViewController: ThemeableViewController, HintPresenting, UIScrollVi private var finishedLoadingArticleDuringPeek = false - convenience init?(articleURL: URL, dataStore: MWKDataStore, theme: Theme, schemeHandler: SchemeHandler? = nil, altTextExperimentViewModel: WMFAltTextExperimentViewModel, needsAltTextExperimentSheet: Bool, altTextBottomSheetViewModel: WMFAltTextExperimentModalSheetViewModel?, altTextDelegate: AltTextDelegate?) { - self.init(articleURL: articleURL, dataStore: dataStore, theme: theme) + internal var articleViewSource: ArticleSource + + convenience init?(articleURL: URL, dataStore: MWKDataStore, theme: Theme, source: ArticleSource, schemeHandler: SchemeHandler? = nil, altTextExperimentViewModel: WMFAltTextExperimentViewModel, needsAltTextExperimentSheet: Bool, altTextBottomSheetViewModel: WMFAltTextExperimentModalSheetViewModel?, altTextDelegate: AltTextDelegate?) { + self.init(articleURL: articleURL, dataStore: dataStore, theme: theme, source: source) self.altTextExperimentViewModel = altTextExperimentViewModel self.altTextBottomSheetViewModel = altTextBottomSheetViewModel self.needsAltTextExperimentSheet = needsAltTextExperimentSheet self.altTextDelegate = altTextDelegate } - @objc init?(articleURL: URL, dataStore: MWKDataStore, theme: Theme, schemeHandler: SchemeHandler? = nil) { + @objc init?(articleURL: URL, dataStore: MWKDataStore, theme: Theme, source: ArticleSource, schemeHandler: SchemeHandler? = nil) { guard let article = dataStore.fetchOrCreateArticle(with: articleURL) else { return nil @@ -195,6 +197,7 @@ class ArticleViewController: ThemeableViewController, HintPresenting, UIScrollVi self.dataStore = dataStore self.schemeHandler = schemeHandler ?? SchemeHandler(scheme: "app", session: dataStore.session) self.cacheController = cacheController + self.articleViewSource = source super.init(nibName: nil, bundle: nil) self.theme = theme @@ -355,13 +358,13 @@ class ArticleViewController: ThemeableViewController, HintPresenting, UIScrollVi view.isUserInteractionEnabled = true return view }() - + lazy var searchBarButtonItem: UIBarButtonItem = { let button = UIBarButtonItem(image: UIImage(named: "search"), style: .plain, target: self, action: #selector(userDidTapSearchButton)) button.accessibilityLabel = CommonStrings.searchButtonAccessibilityLabel return button }() - + override func updateViewConstraints() { super.updateViewConstraints() updateLeadImageMargins() @@ -482,8 +485,7 @@ class ArticleViewController: ThemeableViewController, HintPresenting, UIScrollVi self.showSurveyAnnouncementPanel(surveyAnnouncementResult: result, linkState: self.articleAsLivingDocController.surveyLinkState) } - - + } override func viewWillAppear(_ animated: Bool) { @@ -651,7 +653,6 @@ class ArticleViewController: ThemeableViewController, HintPresenting, UIScrollVi self.shareIfNecessary() self.restoreScrollStateIfNecessary() - self.logPageViewAfterArticleLoad() self.articleLoadWaitGroup = nil } @@ -663,7 +664,7 @@ class ArticleViewController: ThemeableViewController, HintPresenting, UIScrollVi let project = WikimediaProject(siteURL: siteURL) { if !isBeingPresentedAsPeek { - ArticleLinkInteractionFunnel.shared.logArticleView(pageID: pageID.intValue, project: project) + ArticleLinkInteractionFunnel.shared.logArticleView(pageID: pageID.intValue, project: project, source: articleViewSource) } else { // Set flag, will log later in viewDidAppear() finishedLoadingArticleDuringPeek = true @@ -685,7 +686,7 @@ class ArticleViewController: ThemeableViewController, HintPresenting, UIScrollVi return } - ArticleLinkInteractionFunnel.shared.logArticleView(pageID: pageID.intValue, project: project) + ArticleLinkInteractionFunnel.shared.logArticleView(pageID: pageID.intValue, project: project, source: articleViewSource) } private func setupForAltTextExperiment() { diff --git a/Wikipedia/Code/ExploreViewController.swift b/Wikipedia/Code/ExploreViewController.swift index c765dcea839..0af37a4278a 100644 --- a/Wikipedia/Code/ExploreViewController.swift +++ b/Wikipedia/Code/ExploreViewController.swift @@ -611,7 +611,7 @@ class ExploreViewController: ColumnarCollectionViewController, ExploreCardViewCo return } - if let vc = group.detailViewControllerForPreviewItemAtIndex(0, dataStore: dataStore, theme: theme) { + if let vc = group.detailViewControllerForPreviewItemAtIndex(0, dataStore: dataStore, theme: theme, source: .undefined) { if vc is WMFImageGalleryViewController { present(vc, animated: true) } else { @@ -749,7 +749,7 @@ class ExploreViewController: ColumnarCollectionViewController, ExploreCardViewCo func exploreCardViewController(_ exploreCardViewController: ExploreCardViewController, didSelectItemAtIndexPath indexPath: IndexPath) { guard let contentGroup = exploreCardViewController.contentGroup, - let vc = contentGroup.detailViewControllerForPreviewItemAtIndex(indexPath.row, dataStore: dataStore, theme: theme, imageRecDelegate: self, imageRecLoggingDelegate: self) else { + let vc = contentGroup.detailViewControllerForPreviewItemAtIndex(indexPath.row, dataStore: dataStore, theme: theme, source: .undefined, imageRecDelegate: self, imageRecLoggingDelegate: self) else { return } @@ -868,7 +868,7 @@ class ExploreViewController: ColumnarCollectionViewController, ExploreCardViewCo func viewController(for contentGroup: WMFContentGroup, at itemIndex: Int) -> UIViewController? { previewed.context = contentGroup - if let viewControllerToCommit = contentGroup.detailViewControllerForPreviewItemAtIndex(itemIndex, dataStore: dataStore, theme: theme) { + if let viewControllerToCommit = contentGroup.detailViewControllerForPreviewItemAtIndex(itemIndex, dataStore: dataStore, theme: theme, source: .undefined) { if let potd = viewControllerToCommit as? WMFImageGalleryViewController { potd.setOverlayViewTopBarHidden(true) } else if let avc = viewControllerToCommit as? ArticleViewController { @@ -1472,7 +1472,7 @@ extension ExploreViewController: WMFImageRecommendationsDelegate { guard let siteURL = project.siteURL, let articleURL = siteURL.wmf_URL(withTitle: title), - let articleViewController = ArticleViewController(articleURL: articleURL, dataStore: dataStore, theme: theme) else { + let articleViewController = ArticleViewController(articleURL: articleURL, dataStore: dataStore, theme: theme, source: .undefined) else { return } diff --git a/Wikipedia/Code/HistoryViewController.swift b/Wikipedia/Code/HistoryViewController.swift index c066d4ccf10..9ba9caa459e 100644 --- a/Wikipedia/Code/HistoryViewController.swift +++ b/Wikipedia/Code/HistoryViewController.swift @@ -165,7 +165,21 @@ class HistoryViewController: ArticleFetchedResultsViewController, WMFNavigationB } } } - + + override func previewingViewController(for indexPath: IndexPath, at location: CGPoint) -> UIViewController? { + guard let vc = super.previewingViewController(for: indexPath, at: location) else { + return nil + } + + guard let articleVC = (vc as? ArticleViewController) else { + return nil + } + + articleVC.articleViewSource = .history + + return articleVC + } + private func configureNavigationBar() { var titleConfig: WMFNavigationBarTitleConfig = WMFNavigationBarTitleConfig(title: CommonStrings.historyTabTitle, customView: nil, alignment: .leadingCompact) @@ -245,6 +259,16 @@ class HistoryViewController: ArticleFetchedResultsViewController, WMFNavigationB configureNavigationBar() } + override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + guard let articleURL = articleURL(at: indexPath) else { + collectionView.deselectItem(at: indexPath, animated: true) + return + } + + let userInfo: [AnyHashable:Any]? = [ArticleSourceUserInfoKeys.articleSource: ArticleSource.history.rawValue] + navigate(to: articleURL, userInfo: userInfo) + } + func updateVisibleHeaders() { for indexPath in collectionView.indexPathsForVisibleSupplementaryElements(ofKind: UICollectionView.elementKindSectionHeader) { guard let headerView = collectionView.supplementaryView(forElementKind: UICollectionView.elementKindSectionHeader, at: indexPath) as? CollectionViewHeader else { diff --git a/Wikipedia/Code/NavigationStateController.swift b/Wikipedia/Code/NavigationStateController.swift index a7152646fe9..f2c5f634e99 100644 --- a/Wikipedia/Code/NavigationStateController.swift +++ b/Wikipedia/Code/NavigationStateController.swift @@ -68,8 +68,8 @@ final class NavigationStateController: NSObject { return } - let viewControllerToPush = ArticleViewController(articleURL: articleURL, dataStore: dataStore, theme: theme) - + let viewControllerToPush = ArticleViewController(articleURL: articleURL, dataStore: dataStore, theme: theme, source: .undefined) + guard let viewControllerToPush else { completion() return diff --git a/Wikipedia/Code/NewsViewController.swift b/Wikipedia/Code/NewsViewController.swift index 61b82915b83..647556188af 100644 --- a/Wikipedia/Code/NewsViewController.swift +++ b/Wikipedia/Code/NewsViewController.swift @@ -224,7 +224,7 @@ extension NewsViewController: MEPEventsProviding { // MARK: - NestedCollectionViewContextMenuDelegate extension NewsViewController: NestedCollectionViewContextMenuDelegate { func contextMenu(with contentGroup: WMFContentGroup? = nil, for articleURL: URL? = nil, at itemIndex: Int) -> UIContextMenuConfiguration? { - guard let articleURL = articleURL, let vc = ArticleViewController(articleURL: articleURL, dataStore: dataStore, theme: theme) else { + guard let articleURL = articleURL, let vc = ArticleViewController(articleURL: articleURL, dataStore: dataStore, theme: theme, source: .undefined) else { return nil } vc.articlePreviewingDelegate = self diff --git a/Wikipedia/Code/OnThisDayViewController.swift b/Wikipedia/Code/OnThisDayViewController.swift index 016d2d275cb..df5a93064e8 100644 --- a/Wikipedia/Code/OnThisDayViewController.swift +++ b/Wikipedia/Code/OnThisDayViewController.swift @@ -232,7 +232,7 @@ extension OnThisDayViewController: MEPEventsProviding { extension OnThisDayViewController: NestedCollectionViewContextMenuDelegate { func contextMenu(with contentGroup: WMFContentGroup? = nil, for articleURL: URL? = nil, at itemIndex: Int) -> UIContextMenuConfiguration? { - guard let articleURL = articleURL, let vc = ArticleViewController(articleURL: articleURL, dataStore: dataStore, theme: theme) else { + guard let articleURL = articleURL, let vc = ArticleViewController(articleURL: articleURL, dataStore: dataStore, theme: theme, source: .undefined) else { return nil } vc.articlePreviewingDelegate = self diff --git a/Wikipedia/Code/PlacesViewController.swift b/Wikipedia/Code/PlacesViewController.swift index f60e5e03e08..d8911b79c99 100644 --- a/Wikipedia/Code/PlacesViewController.swift +++ b/Wikipedia/Code/PlacesViewController.swift @@ -86,10 +86,11 @@ class PlacesViewController: ArticleLocationCollectionViewController, UISearchBar required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) + self.articleSource = .places self.wikidataFetcher = WikidataFetcher(session: dataStore.session, configuration: dataStore.configuration) } - required init(articleURLs: [URL], dataStore: MWKDataStore, contentGroup: WMFContentGroup?, theme: Theme, needsCloseButton: Bool = false) { + required init(articleURLs: [URL], dataStore: MWKDataStore, contentGroup: WMFContentGroup?, theme: Theme, needsCloseButton: Bool = false, source: ArticleSource) { fatalError("init(articleURLs:dataStore:contentGroup:theme:needsCloseButton:) has not been implemented") } @@ -114,7 +115,7 @@ class PlacesViewController: ArticleLocationCollectionViewController, UISearchBar override func viewDidLoad() { - listViewController = ArticleLocationCollectionViewController(articleURLs: [], dataStore: dataStore, contentGroup: nil, theme: theme) + listViewController = ArticleLocationCollectionViewController(articleURLs: [], dataStore: dataStore, contentGroup: nil, theme: theme, source: .places) listViewController.needsConfigNavBar = false addChild(listViewController) listViewController.view.frame = listContainerView.bounds @@ -1753,7 +1754,8 @@ class PlacesViewController: ArticleLocationCollectionViewController, UISearchBar } switch action { case .read: - navigate(to: url) + let userInfo: [AnyHashable: Any]? = [ArticleSourceUserInfoKeys.articleSource: ArticleSource.places.rawValue] + navigate(to: url, userInfo: userInfo) break case .save: let didSave = dataStore.savedPageList.toggleSavedPage(for: url) diff --git a/Wikipedia/Code/RandomArticleViewController.swift b/Wikipedia/Code/RandomArticleViewController.swift index c70de5fa2e0..13c0d5be724 100644 --- a/Wikipedia/Code/RandomArticleViewController.swift +++ b/Wikipedia/Code/RandomArticleViewController.swift @@ -106,7 +106,7 @@ class RandomArticleViewController: ArticleViewController { DispatchQueue.main.async { guard let articleURL = articleURL, - let randomVC = RandomArticleViewController(articleURL: articleURL, dataStore: self.dataStore, theme: self.theme) + let randomVC = RandomArticleViewController(articleURL: articleURL, dataStore: self.dataStore, theme: self.theme, source: .undefined) else { WMFAlertManager.sharedInstance.showErrorAlert(error ?? RequestError.unexpectedResponse, sticky: true, dismissPreviousAlerts: true) return diff --git a/Wikipedia/Code/ReadingListEntryCollectionViewController.swift b/Wikipedia/Code/ReadingListEntryCollectionViewController.swift index 250ae12079f..69a9a60d11b 100644 --- a/Wikipedia/Code/ReadingListEntryCollectionViewController.swift +++ b/Wikipedia/Code/ReadingListEntryCollectionViewController.swift @@ -458,7 +458,7 @@ extension ReadingListEntryCollectionViewController: CollectionViewContextMenuSho func previewingViewController(for indexPath: IndexPath, at location: CGPoint) -> UIViewController? { guard !editController.isActive, // don't allow previewing when swipe actions are active let articleURL = articleURL(at: indexPath), - let articleViewController = ArticleViewController(articleURL: articleURL, dataStore: dataStore, theme: theme) else { + let articleViewController = ArticleViewController(articleURL: articleURL, dataStore: dataStore, theme: theme, source: .undefined) else { return nil } diff --git a/Wikipedia/Code/SceneDelegate.swift b/Wikipedia/Code/SceneDelegate.swift index ed711c846a5..386eabc5224 100644 --- a/Wikipedia/Code/SceneDelegate.swift +++ b/Wikipedia/Code/SceneDelegate.swift @@ -99,7 +99,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { userActivity.userInfo = userInfo _ = appViewController.processUserActivity(userActivity, animated: false) { [weak self] in - + guard let self else { return } diff --git a/Wikipedia/Code/SearchResultsViewController.swift b/Wikipedia/Code/SearchResultsViewController.swift index 85527fa1a2b..ce691a595d8 100644 --- a/Wikipedia/Code/SearchResultsViewController.swift +++ b/Wikipedia/Code/SearchResultsViewController.swift @@ -9,7 +9,6 @@ class SearchResultsViewController: ArticleCollectionViewController { reload() } } - var tappedSearchResultAction: ((URL, IndexPath) -> Void)? override func viewDidLoad() { @@ -89,7 +88,20 @@ class SearchResultsViewController: ArticleCollectionViewController { override func configure(cell: ArticleRightAlignedImageCollectionViewCell, forItemAt indexPath: IndexPath, layoutOnly: Bool) { configure(cell: cell, forItemAt: indexPath, layoutOnly: layoutOnly, configureForCompact: true) } - + + override func previewingViewController(for indexPath: IndexPath, at location: CGPoint) -> UIViewController? { + guard let vc = super.previewingViewController(for: indexPath, at: location) else { + return nil + } + + guard let articleVC = (vc as? ArticleViewController) else { + return nil + } + + articleVC.articleViewSource = .search + return articleVC + } + private func configure(cell: ArticleRightAlignedImageCollectionViewCell, forItemAt indexPath: IndexPath, layoutOnly: Bool, configureForCompact: Bool) { guard indexPath.item < results.count else { return diff --git a/Wikipedia/Code/SearchViewController.swift b/Wikipedia/Code/SearchViewController.swift index 9048036269a..1a4d61c8178 100644 --- a/Wikipedia/Code/SearchViewController.swift +++ b/Wikipedia/Code/SearchViewController.swift @@ -85,7 +85,7 @@ class SearchViewController: ArticleCollectionViewController, WMFNavigationBarCon private let source: EventLoggingSource // MARK: - Funcs - + @objc required init(source: EventLoggingSource) { self.source = source super.init(nibName: nil, bundle: nil) @@ -94,7 +94,7 @@ class SearchViewController: ArticleCollectionViewController, WMFNavigationBarCon @MainActor required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } - + override func viewDidLoad() { super.viewDidLoad() embedResultsViewController() @@ -429,7 +429,7 @@ class SearchViewController: ArticleCollectionViewController, WMFNavigationBarCon if let navigateToSearchResultAction { navigateToSearchResultAction(articleURL) } else { - let userInfo: [AnyHashable : Any] = [RoutingUserInfoKeys.source: RoutingUserInfoSourceValue.search.rawValue] + let userInfo: [AnyHashable : Any] = [RoutingUserInfoKeys.source: RoutingUserInfoSourceValue.search.rawValue, ArticleSourceUserInfoKeys.articleSource : ArticleSource.search.rawValue] navigate(to: articleURL, userInfo: userInfo) } } diff --git a/Wikipedia/Code/ViewControllerRouter.swift b/Wikipedia/Code/ViewControllerRouter.swift index 6634cb74144..a3f474f5279 100644 --- a/Wikipedia/Code/ViewControllerRouter.swift +++ b/Wikipedia/Code/ViewControllerRouter.swift @@ -95,7 +95,8 @@ class ViewControllerRouter: NSObject { let destination = router.destination(for: url, permanentUsername: permanentUsername) switch destination { case .article(let articleURL): - appViewController.swiftCompatibleShowArticle(with: articleURL, animated: true, completion: completion) + let articleSource = articleSource(from: userInfo) + appViewController.swiftCompatibleShowArticle(with: articleURL, source: articleSource.rawValue, animated: true, completion: completion) return true case .externalLink(let linkURL): appViewController.navigate(to: linkURL, useSafari: true) @@ -210,7 +211,15 @@ class ViewControllerRouter: NSObject { return source } - + + private func articleSource(from userInfo:[AnyHashable: Any]?) -> ArticleSource { + guard let sourceString = userInfo?[ArticleSourceUserInfoKeys.articleSource] as? Int, + let source = ArticleSource(rawValue: sourceString) else { + return .undefined + } + return source + } + private func watchlistTargetNavigationController() -> UINavigationController? { var targetNavigationController: UINavigationController? = appViewController.currentTabNavigationController if let presentedNavigationController = appViewController.presentedViewController as? UINavigationController, diff --git a/Wikipedia/Code/WMFAppViewController.h b/Wikipedia/Code/WMFAppViewController.h index 7d991e298cf..39e72121b88 100644 --- a/Wikipedia/Code/WMFAppViewController.h +++ b/Wikipedia/Code/WMFAppViewController.h @@ -37,7 +37,7 @@ extern NSString *const WMFLanguageVariantAlertsLibraryVersion; // NSNumber - (void)showImportedReadingList:(ReadingList *)readingList; /// Returning WMFArticleViewController (which is ArticleViewController in Swift) makes this not work from Swift -- (void)swiftCompatibleShowArticleWithURL:(NSURL *)articleURL animated:(BOOL)animated completion:(nonnull dispatch_block_t)completion; +- (void)swiftCompatibleShowArticleWithURL:(NSURL *)articleURL source:(NSInteger)source animated:(BOOL)animated completion:(nonnull dispatch_block_t)completion; NS_ASSUME_NONNULL_END diff --git a/Wikipedia/Code/WMFAppViewController.m b/Wikipedia/Code/WMFAppViewController.m index 563d936640c..ab438b19a13 100644 --- a/Wikipedia/Code/WMFAppViewController.m +++ b/Wikipedia/Code/WMFAppViewController.m @@ -1140,7 +1140,7 @@ - (void)processShortcutItem:(UIApplicationShortcutItem *)item completion:(void ( } else if ([item.type isEqualToString:WMFIconShortcutTypeNearby]) { [self showNearbyAnimated:NO]; } else if ([item.type isEqualToString:WMFIconShortcutTypeContinueReading]) { - [self showLastReadArticleAnimated:NO]; + [self showLastReadArticleAnimated:NO source:ArticleSourceUndefined]; } if (completion) { completion(YES); @@ -1224,7 +1224,7 @@ - (BOOL)processUserActivity:(NSUserActivity *)activity animated:(BOOL)animated c if (group) { switch (group.detailType) { case WMFFeedDisplayTypePhoto: { - UIViewController *vc = [group detailViewControllerForPreviewItemAtIndex:0 dataStore:self.dataStore theme:self.theme]; + UIViewController *vc = [group detailViewControllerForPreviewItemAtIndex:0 dataStore:self.dataStore theme:self.theme source: ArticleSourceUndefined]; [self.currentTabNavigationController presentViewController:vc animated:false completion:nil]; } default: { @@ -1337,14 +1337,15 @@ - (NSURL *)contentURLForActivity:(NSUserActivity *)activity { #pragma mark - Utilities -- (WMFArticleViewController *)showArticleWithURL:(NSURL *)articleURL animated:(BOOL)animated { +- (WMFArticleViewController *)showArticleWithURL:(NSURL *)articleURL source:(NSInteger)source animated:(BOOL)animated { return [self showArticleWithURL:articleURL + source:source animated:animated completion:^{ }]; } -- (WMFArticleViewController *)showArticleWithURL:(NSURL *)articleURL animated:(BOOL)animated completion:(nonnull dispatch_block_t)completion { +- (WMFArticleViewController *)showArticleWithURL:(NSURL *)articleURL source:(NSInteger)source animated:(BOOL)animated completion:(nonnull dispatch_block_t)completion { if (!articleURL.wmf_title) { completion(); return nil; @@ -1369,8 +1370,8 @@ - (WMFArticleViewController *)showArticleWithURL:(NSURL *)articleURL animated:(B if (nc.presentedViewController) { [nc dismissViewControllerAnimated:NO completion:NULL]; } - - WMFArticleViewController *articleVC = [[WMFArticleViewController alloc] initWithArticleURL:articleURL dataStore:self.dataStore theme:self.theme schemeHandler:nil]; + + WMFArticleViewController *articleVC = [[WMFArticleViewController alloc] initWithArticleURL:articleURL dataStore:self.dataStore theme:self.theme source:source schemeHandler:nil]; articleVC.loadCompletion = completion; #if DEBUG @@ -1390,8 +1391,8 @@ - (WMFArticleViewController *)showArticleWithURL:(NSURL *)articleURL animated:(B return articleVC; } -- (void)swiftCompatibleShowArticleWithURL:(NSURL *)articleURL animated:(BOOL)animated completion:(nonnull dispatch_block_t)completion { - [self showArticleWithURL:articleURL animated:animated completion:completion]; +- (void)swiftCompatibleShowArticleWithURL:(NSURL *)articleURL source:(NSInteger)source animated:(BOOL)animated completion:(nonnull dispatch_block_t)completion { + [self showArticleWithURL:articleURL source:source animated:animated completion:completion]; } - (BOOL)shouldShowExploreScreenOnLaunch { @@ -1615,9 +1616,9 @@ - (void)showExplore { #pragma mark - Last Read Article -- (void)showLastReadArticleAnimated:(BOOL)animated { +- (void)showLastReadArticleAnimated:(BOOL)animated source:(NSInteger)source { NSURL *lastRead = [self.dataStore.viewContext wmf_openArticleURL]; - [self showArticleWithURL:lastRead animated:animated]; + [self showArticleWithURL:lastRead source:source animated:animated]; } #pragma mark - Show Search diff --git a/Wikipedia/Code/WMFContentGroup+DetailViewControllers.swift b/Wikipedia/Code/WMFContentGroup+DetailViewControllers.swift index e4898132289..3db0e3a2500 100644 --- a/Wikipedia/Code/WMFContentGroup+DetailViewControllers.swift +++ b/Wikipedia/Code/WMFContentGroup+DetailViewControllers.swift @@ -3,23 +3,23 @@ import WMFComponents extension WMFContentGroup { - @objc(detailViewControllerForPreviewItemAtIndex:dataStore:theme:) - public func detailViewControllerForPreviewItemAtIndex(_ index: Int, dataStore: MWKDataStore, theme: Theme) -> UIViewController? { - detailViewControllerForPreviewItemAtIndex(index, dataStore: dataStore, theme: theme, imageRecDelegate: nil, imageRecLoggingDelegate: nil) + @objc(detailViewControllerForPreviewItemAtIndex:dataStore:theme:source:) + public func detailViewControllerForPreviewItemAtIndex(_ index: Int, dataStore: MWKDataStore, theme: Theme, source: ArticleSource) -> UIViewController? { + detailViewControllerForPreviewItemAtIndex(index, dataStore: dataStore, theme: theme, source: source, imageRecDelegate: nil, imageRecLoggingDelegate: nil) } - public func detailViewControllerForPreviewItemAtIndex(_ index: Int, dataStore: MWKDataStore, theme: Theme, imageRecDelegate: WMFImageRecommendationsDelegate?, imageRecLoggingDelegate: WMFImageRecommendationsLoggingDelegate?) -> UIViewController? { + public func detailViewControllerForPreviewItemAtIndex(_ index: Int, dataStore: MWKDataStore, theme: Theme, source: ArticleSource, imageRecDelegate: WMFImageRecommendationsDelegate?, imageRecLoggingDelegate: WMFImageRecommendationsLoggingDelegate?) -> UIViewController? { switch detailType { case .page: guard let articleURL = previewArticleURLForItemAtIndex(index) else { return nil } - return ArticleViewController(articleURL: articleURL, dataStore: dataStore, theme: theme) + return ArticleViewController(articleURL: articleURL, dataStore: dataStore, theme: theme, source: source) case .pageWithRandomButton: guard let articleURL = previewArticleURLForItemAtIndex(index) else { return nil } - return RandomArticleViewController(articleURL: articleURL, dataStore: dataStore, theme: theme) + return RandomArticleViewController(articleURL: articleURL, dataStore: dataStore, theme: theme, source: source) case .gallery: guard let date = self.date else { return nil @@ -52,7 +52,7 @@ extension WMFContentGroup { guard let articleURLs = contentURLs else { break } - vc = ArticleLocationCollectionViewController(articleURLs: articleURLs, dataStore: dataStore, contentGroup: self, theme: theme, needsCloseButton: true) + vc = ArticleLocationCollectionViewController(articleURLs: articleURLs, dataStore: dataStore, contentGroup: self, theme: theme, needsCloseButton: true, source: .undefined) case .news: guard let stories = fullContent?.object as? [WMFFeedNewsStory] else { break diff --git a/Wikipedia/Code/WMFFirstRandomViewController.m b/Wikipedia/Code/WMFFirstRandomViewController.m index 8f0c3eee668..d628fcd225e 100644 --- a/Wikipedia/Code/WMFFirstRandomViewController.m +++ b/Wikipedia/Code/WMFFirstRandomViewController.m @@ -43,7 +43,7 @@ - (void)viewDidAppear:(BOOL)animated { [[WMFAlertManager sharedInstance] showErrorAlert:error ?: [WMFFetcher unexpectedResponseError] sticky:NO dismissPreviousAlerts:NO tapCallBack:NULL]; return; } - WMFRandomArticleViewController *randomArticleVC = [[WMFRandomArticleViewController alloc] initWithArticleURL:articleURL dataStore:self.dataStore theme:self.theme schemeHandler:nil]; + WMFRandomArticleViewController *randomArticleVC = [[WMFRandomArticleViewController alloc] initWithArticleURL:articleURL dataStore:self.dataStore theme:self.theme source: ArticleSourceUndefined schemeHandler:nil]; NSMutableArray *viewControllers = [self.navigationController.viewControllers mutableCopy]; [viewControllers replaceObjectAtIndex:viewControllers.count - 1 withObject:randomArticleVC]; [self.navigationController setViewControllers:viewControllers]; diff --git a/Wikipedia/Experimental-Info.plist b/Wikipedia/Experimental-Info.plist index 7a93038d2fb..d76d5259966 100644 --- a/Wikipedia/Experimental-Info.plist +++ b/Wikipedia/Experimental-Info.plist @@ -28,7 +28,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 7.7.1 + 7.7.2 CFBundleSignature ???? CFBundleURLTypes diff --git a/Wikipedia/Local-Info.plist b/Wikipedia/Local-Info.plist index 9b052e7712f..a2bbb013739 100644 --- a/Wikipedia/Local-Info.plist +++ b/Wikipedia/Local-Info.plist @@ -28,7 +28,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 7.7.1 + 7.7.2 CFBundleSignature ???? CFBundleURLTypes diff --git a/Wikipedia/Localizations/ast.lproj/Localizable.strings b/Wikipedia/Localizations/ast.lproj/Localizable.strings index 8289b7daf06..9b869ebd5d3 100644 --- a/Wikipedia/Localizations/ast.lproj/Localizable.strings +++ b/Wikipedia/Localizations/ast.lproj/Localizable.strings @@ -570,7 +570,7 @@ "welcome-explore-continue-button" = "Primeros pasos"; "welcome-explore-new-ways-title" = "Nueves formes d'esplorar"; "welcome-explore-tell-me-more-done-button" = "Entendílo"; -"welcome-intro-free-encyclopedia-description" = "Wikipedia ta escrita n'andecha por voluntarios, y contien más de 40 millones d'artículos en más de 300 llingües."; +"welcome-intro-free-encyclopedia-description" = "Wikipedia ta escrita n'andecha por voluntarios, y contién más de 40 millones d'artículos en más de 300 llingües."; "welcome-intro-free-encyclopedia-more" = "Saber más sobre Wikipedia"; "welcome-intro-free-encyclopedia-more-about" = "Tocante a Wikipedia"; "welcome-intro-free-encyclopedia-more-description" = "Wikipedia ye un proyectu global pa crear enciclopedies llibres en toles llingües del mundu. Virtualmente cualquiera con accesu a Internet tien llibertá pa participar apurriendo información neutral y con referencies."; diff --git a/Wikipedia/Localizations/az.lproj/Localizable.strings b/Wikipedia/Localizations/az.lproj/Localizable.strings index e49a0257e35..f3b8e4cd4ae 100644 --- a/Wikipedia/Localizations/az.lproj/Localizable.strings +++ b/Wikipedia/Localizations/az.lproj/Localizable.strings @@ -7,6 +7,7 @@ // Author: Tsevener // Author: Wertuose // Author: Şeyx Şamil +// Author: Əkrəm // Author: Əkrəm Cəfər "aaald-added-text-description-2" = "$1 əlavə edildi"; diff --git a/Wikipedia/Localizations/be-tarask.lproj/Localizable.strings b/Wikipedia/Localizations/be-tarask.lproj/Localizable.strings index 1543487e35f..9190b75c6fc 100644 --- a/Wikipedia/Localizations/be-tarask.lproj/Localizable.strings +++ b/Wikipedia/Localizations/be-tarask.lproj/Localizable.strings @@ -82,6 +82,7 @@ "nearby-distance-label-km" = "$1 км"; "nearby-distance-label-meters" = "$1 м"; "nearby-distance-label-miles" = "$1 міл"; +"notifications-center-type-title-email-from-other-user" = "Э-ліст ад іншага карыстальніка"; "page-protected-can-not-edit" = "Вы ня маеце правоў рэдагаваць гэтую старонку"; "page-protected-can-not-edit-title" = "Гэтая старонка абароненая"; "potd-description-prefix" = "Выява дня за $1"; diff --git a/Wikipedia/Localizations/ce.lproj/Localizable.strings b/Wikipedia/Localizations/ce.lproj/Localizable.strings index fef901f297b..803f39febfb 100644 --- a/Wikipedia/Localizations/ce.lproj/Localizable.strings +++ b/Wikipedia/Localizations/ce.lproj/Localizable.strings @@ -14,7 +14,7 @@ // Fuzzy "about-testers" = "тестераш"; "about-wikipedia" = "Википеди"; -"account-creation-logging-in" = "Системин чудахар..."; +"account-creation-logging-in" = "Системин чу дахар..."; "account-group-title" = "Хьан хьесапан запись"; "action-previous-revision-accessibility" = "Хьалхара верси"; "action-save" = "Ӏалашйан"; diff --git a/Wikipedia/Localizations/cs.lproj/Localizable.strings b/Wikipedia/Localizations/cs.lproj/Localizable.strings index 3718e179c8c..a4afab4740e 100644 --- a/Wikipedia/Localizations/cs.lproj/Localizable.strings +++ b/Wikipedia/Localizations/cs.lproj/Localizable.strings @@ -113,6 +113,7 @@ "action-cancel" = "Zrušit"; "action-discard-edits" = "Zahodit úpravy"; "action-find-in-page" = "Najít na stránce"; +"action-keep-editing" = "Pokračujte v editování"; "action-language-accessibility" = "Změnit jazyk"; "action-move-to" = "Přesunout do…"; "action-move-to-reading-list" = "Přesunout do seznamu k přečtení"; @@ -138,6 +139,12 @@ "advanced-settings-title" = "Pokročilé nastavení"; "alt-text-add-button-title" = "Přidat"; "alt-text-do-not-add-button-title" = "Nepřidávat"; +"alt-text-email-fifth-line" = "[Snímky obrazovky nebo odkazy]"; +"alt-text-experiment-caption-title" = "Popisek obrázku"; +"alt-text-experiment-edit-summary" = "Přidán alternativní text"; +"alt-text-experiment-onboarding-item-1-title" = "Ponechte to krátké a jasné."; +"alt-text-experiment-onboarding-item-2-subtitle" = "Nepřidávejte prosím svůj vlastní výzkum, interpertace nebo svůj úhel pohledu."; +"alt-text-experiment-onboarding-tooltip-3-title" = "Přidejte popis"; "announcements-dismiss" = "Zrušit"; "app-store-keywords" = "Wikipedie, reference, wiki, encyklopedie, info, znalosti, výzkum, informace, objevování, učení"; "app-store-release-notes" = "Plně přizpůsobitelné a snadnější čtení zdroje informací. Lokalizace, vylepšení výkonu a opravy chyb."; @@ -180,6 +187,7 @@ "chinese-variants-alert-body" = "Aplikace wikipedie nyní podporuje následující Čínské varianty jako primární nebo sekundární jazyky v aplikaci, aby bylo jednodušší číst, hledat nebo upravovat ve vaší oblíbené variantě.\n\n简体 Čínština, Zjednodušená (zh-hans)\n香港繁體 Hong Kongská tradiční (zh-hk)\n澳門繁體 Macauská tradiční (zh-mo)\n大马简体 Malajská zjednodušená (zh-my)\n新加坡简体 Singapurská zjednodušená (zh-sg)\n臺灣正體 Taiwanská Tradiční (zh-tw)"; "chinese-variants-alert-title" = "Aktualizace podpory čínských variant"; "clear-title-accessibility-label" = "Vymazat"; +"clearing-cache-in-progress" = "Probíhá čištění cache."; "close-button-accessibility-label" = "Zavřít"; "compass-direction" = "na $1. hodině"; "continue-reading-empty-description" = "Procházet další články na Wikipedii"; diff --git a/Wikipedia/Localizations/fi.lproj/Localizable.strings b/Wikipedia/Localizations/fi.lproj/Localizable.strings index a5b07847e94..a295fa5b428 100644 --- a/Wikipedia/Localizations/fi.lproj/Localizable.strings +++ b/Wikipedia/Localizations/fi.lproj/Localizable.strings @@ -971,6 +971,7 @@ "saved-default-reading-list-tag" = "Tätä listaa ei voi poistaa"; "saved-pages-image-download-error" = "Tämän tallennetun sivun kuvien lataaminen epäonnistui."; "saved-pages-progress-syncing" = "Artikkelin lataus käynnissä..."; +"saved-reading-lists-search-placeholder" = "Hae lukulistoista"; "saved-reading-lists-title" = "Lukulistat"; "saved-search-default-text" = "Hae tallennetuista artikkeleista"; "saved-title" = "Tallennettu"; diff --git a/Wikipedia/Localizations/pa.lproj/Localizable.strings b/Wikipedia/Localizations/pa.lproj/Localizable.strings index faf19e4325d..6e12d6f7deb 100644 --- a/Wikipedia/Localizations/pa.lproj/Localizable.strings +++ b/Wikipedia/Localizations/pa.lproj/Localizable.strings @@ -549,8 +549,7 @@ "main-menu-terms-of-use" = "ਵਰਤੋਂ ਦੀਆਂ ਸ਼ਰਤਾਂ"; "main-menu-title" = "ਹੋਰ"; "main-menu-zero-faq" = "ਵਿਕੀਪੀਡੀਆ ਜ਼ੀਰੋ ਬਾਬਤ ਆਮ ਸੁਆਲ"; -// Fuzzy -"microsite-yir-english-edits-bytes-slide-title" = "3. 4 ਅਰਬ ਬਾਈਟਾਂ ਜੋਡ਼ਿਆਂ"; +"microsite-yir-english-edits-bytes-slide-title" = "4 ਅਰਬ ਬਾਈਟਾਂ ਜੋੜਿਆਂ"; "more-languages-tooltip-title" = "ਭਾਸ਼ਾ ਜੋੜੋ"; "more-menu" = "ਹੋਰ"; "navbar-title-mode-edit-wikitext-preview" = "ਝਾਤ"; @@ -637,6 +636,7 @@ "on-this-day-detail-header-title" = "{{PLURAL:$1| $1 ਇਤਿਹਾਸਕ ਘਟਨਾ| $1 ਇਤਿਹਾਸਕ ਘਟਨਾਵਾਂ}}"; "on-this-day-footer" = "ਇਸ ਦਿਨ ਦੀਆਂ ਹੋਰ ਇਤਿਹਾਸਕ ਘਟਨਾਵਾਂ"; "on-this-day-footer-showing-event-count" = "ਇਸ ਦਿਨ ਦੀਆਂ {{PLURAL:$1| $1 ਹੋਰ ਇਤਿਹਾਸਕ ਘਟਨਾ| $1 ਹੋਰ ਇਤਿਹਾਸਕ ਘਟਨਾਵਾਂ}}"; +"on-this-day-no-internet-error" = "ਕੋਈ ਡਾਟਾ ਮੌਜ਼ੂਦ ਨਹੀਂ ਏ"; "on-this-day-sub-title-for-date-from-language-wikipedia" = "$2 ਵਿਕੀਪੀਡੀਆ ਤੋਂ $1"; "on-this-day-title" = "ਅੱਜ ਦੇ ਦਿਨ"; "page-history-anonymous-edits" = "ਗੁਮਨਾਮ ਵੱਲੋਂ ਸੋਧਾਂ"; @@ -661,6 +661,9 @@ "page-similar-titles" = "ਮਿਲਦੇ-ਜੁਲਦੇ ਸਫ਼ੇ"; "panel-compare-revisions-title" = "ਸੋਧਾਂ ਦੀ ਤੁਲਨਾ ਕਰੋ"; "panel-not-logged-in-continue-edit-action-title" = "ਦਾਖਲ ਹੋਏ ਬਿਨਾਂ ਸੋਧ ਕਰੋ"; +"panel-not-logged-in-title" = "ਤੁਸੀਂ ਦਾਖ਼ਲ ਨਹੀਂ ਹੋ"; +"pictured" = "ਤਸਵੀਰ ਵਿੱਚ"; +"places-accessibility-clear-saved-searches" = "ਸੰਭਾਲੀਆਂ ਖੋਜਾਂ ਸਾਫ਼ ਕਰੋ"; "places-accessibility-group" = "$1 ਲੇਖ"; "places-accessibility-show-as-list" = "ਸੂਚੀ ਵਜੋਂ ਵਿਖਾਓ"; "places-accessibility-show-as-map" = "ਨਕਸ਼ੇ ਵਜੋਂ ਵਿਖਾਓ"; @@ -671,7 +674,9 @@ "places-filter-top-articles" = "ਸਭ ਤੋਂ ਵੱਧ ਪੜ੍ਹੇ ਜਾਣ ਵਾਲੇ"; "places-filter-top-articles-count" = "{{PLURAL:$1| $1 ਲੇਖ}}"; "places-filter-top-read-articles" = "ਸਭ ਤੋਂ ਵੱਧ ਪੜ੍ਹੇ ਗਏ ਲੇਖ"; +"places-list-title'" = "ਸੂਚੀ"; "places-location-enabled" = "ਟਿਕਾਣਾ ਚਾਲੂ ਕੀਤਾ ਗਿਆ"; +"places-map-title" = "ਨਕਸ਼ਾ"; "places-no-saved-articles-have-location" = "ਤੁਹਾਡੇ ਸੰਭਾਲੇ ਲੇਖਾਂ ਵਿੱਚੋਂ ਕਿਸੇ ਵਿੱਚ ਵੀ ਟਿਕਾਣਾ ਜਾਣਕਾਰੀ ਨਹੀਂ ਹੈ"; "places-search-default-text" = "ਥਾਵਾਂ ਲੱਭੋ"; "places-search-did-you-mean" = "ਕੀ ਤੁਹਾਡਾ ਮਤਲਬ $1 ਸੀ?"; @@ -689,12 +694,12 @@ "preference-summary-eventlogging-opt-in" = "ਇਸ ਐਪ ਨੂੰ ਚੰਗੇਰੀ ਬਣਾਉਣ ਵਾਸਤੇ ਵਿਕੀਮੀਡੀਆ ਨੂੰ ਤੁਹਾਡੇ ਇਸ ਐਪ ਨੂੰ ਵਰਤਣ ਦੇ ਤਰੀਕੇ ਬਾਬਤ ਜਾਣਕਾਰੀ ਇਕੱਠੀ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿਉ।"; "privacy-policy-title" = "ਨਿੱਜਤਾ ਨੀਤੀ"; "problem-with-feature-title" = "ਵਿਸ਼ੇਸ਼ਤਾ ਨਾਲ ਸਮੱਸਿਆ"; -// Fuzzy "profile-page-join-title" = "ਵਿਕੀਪੀਡੀਆ ਨਾਲ ਜੁੜੋ / ਦਾਖਲ ਹੋਵੋ"; "profile-page-title-logged-out" = "ਖਾਤਾ"; "project-name-mediawiki" = "ਮੀਡੀਆਵਿਕੀ"; "project-name-wikibooks" = "ਵਿਕੀਕਿਤਾਬਾਂ"; "project-name-wikidata" = "ਵਿਕੀਡਾਟਾ"; +"project-name-wikimedia-commons" = "ਵਿਕੀਮੀਡੀਆ ਭਾਈਚਾਰਾ"; "project-name-wikinews" = "ਵਿਕੀਖ਼ਬਰਾਂ"; "project-name-wikiquote" = "ਵਿਕੀਹਵਾਲਾ"; "project-name-wikisource" = "ਵਿਕੀਸਰੋਤ"; @@ -774,6 +779,8 @@ "saved-all-articles-title" = "ਸਾਰੇ ਲੇਖ"; "saved-default-reading-list-tag" = "ਇਸ ਸੂਚੀ ਨੂੰ ਮਿਟਾਇਆ ਨਹੀਂ ਜਾ ਸਕਦਾ ਹੈ"; "saved-pages-image-download-error" = "ਇਸ ਸਾਂਭੇ ਹੋਏ ਸਾਫ਼ ਲਈ ਤਸਵੀਰਾਂ ਉਤਾਰੀਆਂ ਨਹੀਂ ਜਾ ਸਕੀਆਂ।"; +"saved-pages-progress-syncing" = "ਲੇਖ ਉਤਾਰੇ ਦਾ ਕੰਮ ਚੱਲ ਰਿਹਾ ਹੈ..."; +"saved-reading-lists-search-placeholder" = "ਪੜ੍ਹਨਵਾਲੀ ਸੂਚੀਆਂ ਲੱਭੋ"; "saved-reading-lists-title" = "ਪੜ੍ਹਣ ਦੀ ਸੂਚੀਆਂ"; "saved-search-default-text" = "ਸੰਭਾਲੇ ਲੇਖਾਂ ਦੀ ਖੋਜ ਕਰੋ"; "saved-title" = "ਸੰਭਾਲਿਆ"; @@ -1034,26 +1041,21 @@ "year-in-review-feature-announcement-body-personalized" = "ਵਿਕੀਪੀਡੀਆ ਐਪ ਉੱਤੇ ਤੁਹਾਡੇ ਵੱਲੋਂ ਪਡ਼੍ਹੇ ਗਏ ਲੇਖਾਂ ਬਾਰੇ ਸੂਝ ਵੇਖੋ, ਆਪਣਾ ਸਫ਼ਰ ਸਾਂਝਾਂ ਕਰੋ ਅਤੇ ਆਪਣੇ ਸਾਲ ਦੀਆਂ ਮੁੱਖ ਗੱਲਾਂ ਲੱਭੋ।"; "year-in-review-feature-announcement-title" = "ਸਮੀਖਿਆ ਵਿੱਚ ਵਿਕੀਪੀਡੀਆ ਦੀ ਪਡ਼ਚੋਲ ਕਰੋ"; "year-in-review-feature-announcement-title-personalized" = "ਸਮੀਖਿਆ ਵਿੱਚ ਆਪਣੇ ਵਿਕੀਪੀਡੀਆ ਸਾਲ ਦੀ ਪਡ਼ਚੋਲ ਕਰੋ"; -// Fuzzy -"year-in-review-feature-explore-body-personalized" = "ਵਿਕੀਪੀਡੀਆ ਐਪ 'ਤੇ ਤੁਸੀਂ ਕਿਹੜੇ ਲੇਖ ਪੜ੍ਹਦੇ ਹੋ ਅਤੇ ਤੁਹਾਡੇ ਵੱਲੋ ਕੀਤੇ ਗਏ ਸੋਧਾ ਬਾਰੇ ਜਾਣਕਾਰੀ ਵੇਖੋ। ਤੁਹਾਡਾ ਪੜ੍ਹਨ ਦਾ ਇਤਿਹਾਸ ਸੁਰੱਖਿਅਤ ਰੱਖਿਆ ਗਿਆ ਹੈ। ਪੜ੍ਹਨ ਦੀ ਜਾਣਕਾਰੀ ਦੀ ਗਣਨਾ ਤੁਹਾਡੇ ਜੰਤਰ 'ਤੇ ਸਥਾਨਕ ਤੌਰ 'ਤੇ ਭੰਡਾਰ ਕੀਤੇ ਡੇਟਾ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਗਣਨਾ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।"; +"year-in-review-feature-explore-body-personalized" = "ਵਿਕੀਪੀਡੀਆ ਐਪ 'ਤੇ ਤੁਸੀਂ ਕਿਹੜੇ ਲੇਖ ਪੜ੍ਹਦੇ ਹੋ ਅਤੇ 2024 ਵਿੱਚ ਤੁਹਾਡੇ ਵੱਲੋ ਕੀਤੇ ਗਏ ਸੋਧਾ ਬਾਰੇ ਜਾਣਕਾਰੀ ਵੇਖੋ। ਤੁਹਾਡਾ ਪੜ੍ਹਨ ਦਾ ਇਤਿਹਾਸ ਸੁਰੱਖਿਅਤ ਰੱਖਿਆ ਗਿਆ ਹੈ। ਪੜ੍ਹਨ ਦੀ ਜਾਣਕਾਰੀ ਦੀ ਗਣਨਾ ਤੁਹਾਡੇ ਜੰਤਰ 'ਤੇ ਸਥਾਨਕ ਤੌਰ 'ਤੇ ਭੰਡਾਰ ਕੀਤੇ ਡੇਟਾ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਗਣਨਾ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।"; "year-in-review-finish" = "ਖ਼ਤਮ"; -// Fuzzy "year-in-review-login-subtitle" = "ਵਧੇਰੇ ਵਿਅਕਤੀਗਤ ਜਾਣਕਾਰੀ ਲਈ ਯੋਗ ਬਣਨ ਵਾਸਤੇ ਦਾਖ਼ਲ ਹੋਵੋ ਜਾਂ ਇੱਕ ਖਾਤਾ ਬਣਾਓ"; "year-in-review-login-title" = "ਆਪਣੇ ਸਾਲ ਦੀ ਸਮੀਖਿਆ ਵਿੱਚ ਸੁਧਾਰ ਕਰੋ"; "year-in-review-personalized-day-subtitle-format" = "ਤੁਸੀਂ $1 ਤੇ ਸਭ ਤੋਂ ਵੱਧ ਲੇਖ ਪੜ੍ਹਦੇ ਹੋ। ਇਹ ਸਪੱਸ਼ਟ ਹੈ ਕਿ ਨਵੀਂ ਸਮੱਗਰੀ ਦੀ ਪੜਚੋਲ ਕਰਨ ਲਈ $1 ਤੁਹਾਡਾ ਪ੍ਰਮੁੱਖ ਦਿਨ ਹੈ। ਆਪਣੇ ਪੜ੍ਹਨ ਦੇ ਸਮੇਂ ਦਾ ਵੱਧ ਤੋਂ ਵੱਧ ਲਾਹਾ ਲੇਣ ਲਈ ਧੰਨਵਾਦ!"; "year-in-review-personalized-day-title-format" = "ਤੁਸੀਂ ਸਭ ਤੋਂ ਵੱਧ $1 'ਤੇ ਪਡ਼੍ਹਦੇ ਹੋ।"; "year-in-review-personalized-donate-title" = "ਤੁਹਾਡੀ ਦਰਿਆਦਿਲੀ ਨੇ ਵਿਕੀਪੀਡੀਆ ਨੂੰ ਬਣਾਈ ਰੱਖਣ ਵਿੱਚ ਮਦਦ ਕੀਤੀ ਏ"; -// Fuzzy "year-in-review-personalized-edit-views-subtitle-format" = "ਦੁਨੀਆ ਭਰ ਦੇ ਪਾਠਕ ਤੁਹਾਡੇ ਯੋਗਦਾਨ ਦੀ ਸ਼ਲਾਘਾ ਕਰਦੇ ਹਨ। ਪਿਛਲੇ 2 ਮਹੀਨਿਆਂ ਵਿੱਚ, ਤੁਹਾਡੇ ਵੱਲੋਂ ਸੋਧੇ ਲੇਖਾਂ ਨੂੰ ਕੁੱਲ $1 ਵਾਰ ਵੇਖੇ ਗਏ ਹਨ। ਤੁਹਾਡੇ ਵਰਗੇ ਸੋਧਕਾਂ ਦਾ ਧੰਨਵਾਦ, ਵਿਕੀਪੀਡੀਆ ਦੁਨੀਆ ਲਈ ਇੱਕ ਨਿਰੰਤਰ ਸੁਧਾਰ, ਤੱਥ-ਅਧਾਰਤ ਅਤੇ ਭਰੋਸੇਯੋਗ ਗਿਆਨ ਸਰੋਤ ਹੈ।"; "year-in-review-personalized-edit-views-title-format" = "ਤੁਹਾਡੇ ਸੋਧਾਂ ਨੂੰ ਹਾਲ ਹੀ ਵਿੱਚ $1 ਤੋਂ ਵੱਧ ਵਾਰ ਵੇਖਿਆ ਗਿਆ ਸੀ"; "year-in-review-personalized-editing-subtitle-format" = "ਤੁਸੀਂ ਵਿਕੀਪੀਡੀਆ {{PLURAL:$1| $1 ਵਾਰ| $1 ਵਾਰੀ}} ਸੋਧਿਆ। ਦੁਨੀਆ ਭਰ ਵਿੱਚ ਵਿਕੀਮੀਡੀਆ ਪ੍ਰੋਜੈਕਟਾਂ ਵਿੱਚ ਇੱਕ ਫਰਕ ਲਿਆਉਣ ਵਾਲੇ ਸਵੈ-ਸੇਵੀ ਸੋਧਕਾਂ ਵਿੱਚੋਂ ਇੱਕ ਹੋਣ ਲਈ ਤੁਹਾਡਾ ਧੰਨਵਾਦ।"; "year-in-review-personalized-editing-subtitle-format-500plus" = "ਤੁਸੀਂ ਵਿਕੀਪੀਡੀਆ ਨੂੰ 500 ਤੋਂ ਵੱਧ ਵਾਰ ਸੋਧਿਆ ਹੈ। ਦੁਨੀਆ ਭਰ ਵਿੱਚ ਵਿਕੀਮੀਡੀਆ ਪ੍ਰੋਜੈਕਟਾਂ ਵਿੱਚ ਇੱਕ ਫਰਕ ਲਿਆਉਣ ਵਾਲੇ ਸਵੈ-ਸੇਵੀ ਸੋਧਕਾਂ ਵਿੱਚੋਂ ਇੱਕ ਹੋਣ ਲਈ ਤੁਹਾਡਾ ਧੰਨਵਾਦ।"; "year-in-review-personalized-editing-title-format" = "ਤੁਸੀਂ ਵਿਕੀਪੀਡੀਆ {{PLURAL:$1| $1 ਵਾਰ}} ਸੋਧਿਆ"; "year-in-review-personalized-editing-title-format-500plus" = "ਤੁਸੀਂ ਵਿਕੀਪੀਡੀਆ ਨੂੰ 500 + ਵਾਰ ਸੋਧਿਆ ਹੈ।"; -// Fuzzy -"year-in-review-personalized-reading-subtitle-format" = "ਇਸ ਸਾਲ, ਤੁਸੀਂ {{PLURAL:$1|$1 ਲੇਖ ਪੜ੍ਹਿਆ ਹੈ|$1 ਲੇਖ ਪੜ੍ਹੇ ਹਨ}}। ਵਿਕੀਪੀਡੀਆ ਵਿੱਚ $3 ਤੋਂ ਵੱਧ ਸਰਗਰਮ ਭਾਸ਼ਾਵਾਂ ਵਿੱਚ $2 ਲੱਖ ਲੇਖ ਉਪਲਬਧ ਸਨ। ਤੁਸੀਂ ਗਿਆਨ ਨੂੰ ਵਧਾਉਣ ਅਤੇ ਵੱਖ-ਵੱਖ ਵਿਸ਼ਿਆਂ ਦੀ ਪੜਚੋਲ ਕਰਨ ਵਿੱਚ ਲੱਖਾਂ ਲੋਕਾਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਏ।"; -// Fuzzy -"year-in-review-personalized-reading-title-format" = "ਤੁਸੀਂ ਇਸ ਸਾਲ {{PLURAL:$1| $1 ਲੇਖ ਪੜ੍ਹਿਆ| $1 ਲੇਖ ਪੜ੍ਹੇ}}"; +"year-in-review-personalized-reading-subtitle-format" = "ਤੁਸੀਂ {{PLURAL:$1|$1 ਲੇਖ ਪੜ੍ਹਿਆ ਹੈ|$1 ਲੇਖ ਪੜ੍ਹੇ ਹਨ}}। ਵਿਕੀਪੀਡੀਆ ਵਿੱਚ $3 ਤੋਂ ਵੱਧ ਸਰਗਰਮ ਭਾਸ਼ਾਵਾਂ ਵਿੱਚ $2 ਲੱਖ ਲੇਖ ਉਪਲਬਧ ਸਨ। ਤੁਸੀਂ ਗਿਆਨ ਨੂੰ ਵਧਾਉਣ ਅਤੇ ਵੱਖ-ਵੱਖ ਵਿਸ਼ਿਆਂ ਦੀ ਪੜਚੋਲ ਕਰਨ ਵਿੱਚ ਲੱਖਾਂ ਲੋਕਾਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਏ।"; +"year-in-review-personalized-reading-title-format" = "ਤੁਸੀਂ {{PLURAL:$1| $1 ਲੇਖ ਪੜ੍ਹਿਆ ਏ| $1 ਲੇਖ ਪੜ੍ਹੇ ਹਨ}}"; "year-in-review-personalized-saved-title-format" = "ਤੁਸੀਂ {{PLURAL:$1| $1 ਲੇਖ ਸਾੰਭਿਆ|$1 ਲੇਖ ਸਾਂਭੇ}}"; "year-in-review-share-text" = "ਇਹ ਮੇਰੀ ਵਿਕੀਪੀਡੀਆ ਸਾਲ ਦੀ ਸਮੀਖਿਆ ਹੈ। ਵਿਕੀਪੀਡੀਆ iOS ਐਪ ਨਾਲ ਬਣਾਇਆ ਗਿਆ"; "year-in-review-survey-additional-thoughts" = "ਕੋਈ ਹੋਰ ਵਿਚਾਰ?"; diff --git a/Wikipedia/Localizations/se.lproj/Localizable.strings b/Wikipedia/Localizations/se.lproj/Localizable.strings index 631f3a97c44..b9ad216563a 100644 --- a/Wikipedia/Localizations/se.lproj/Localizable.strings +++ b/Wikipedia/Localizations/se.lproj/Localizable.strings @@ -111,13 +111,14 @@ "action-unsave" = "Sihko vurkejumi"; "action-unsaved-accessibility-notification" = "Artihkal ii leat šat vurkejuvvon"; "action-update" = "Ođasmahte"; -"add-articles-to-reading-list" = "Lasit {{PLURAL:$1|$1 artihkkala}} lohkanlistui"; +"add-articles-to-reading-list" = "Lasit {{PLURAL:$1|$1 artihkkala}} lohkanlistui"; "advanced-settings-title" = "Lasseásahusat"; "alt-text-add-button-title" = "Lasit"; "alt-text-do-not-add-button-title" = "Ale lasit"; "alt-text-email-fifth-line" = "[Šearbmagovat dahje liŋkkat]"; "alt-text-experiment-caption-title" = "Govvateaksta"; "alt-text-experiment-onboarding-secondary-button-title" = "Čájet ovdamearkkaid"; +"alt-text-experiment-onboarding-tooltip-3-title" = "Lasit govvádusa"; "announcements-dismiss" = "Gidde"; "app-store-keywords" = "Wikipedia, gáldu, wiki, encyklopediija, diehtu, máhttu, info, fuomášupmi, oahppan"; "app-store-release-notes" = "Áibbas heivehahtti ja eanet logahahtti guorahallansiidu. Báikkálašvuohta, doaibmabuorideamit ja boasttudivvumat."; @@ -714,7 +715,7 @@ "notifications-center-filters-types-item-title-all" = "Buot šlájat"; "notifications-center-filters-types-section-title" = "Almmuhustiipa"; "notifications-center-go-to-article" = "Artihkal"; -"notifications-center-go-to-article-talk-format" = "$1 digaštallan"; +"notifications-center-go-to-article-talk-format" = "Siiddu $1 ságastallansiidu"; "notifications-center-go-to-diff" = "Erohus"; "notifications-center-go-to-talk-page" = "Ságastallansiidu"; "notifications-center-go-to-user-page" = "{{GRAMMAR:genitive|$1}} geavaheaddjisiidu"; @@ -908,6 +909,7 @@ "reading-list-create-new-list-reading-list-name" = "Lohkanlisttu namma"; "reading-list-create-new-list-title" = "Ráhkat ođđa listtu"; "reading-list-deleted-accessibility-notification" = "Lohkanlistu sihkkojuvvui"; +"reading-list-detail-search-placeholder" = "Oza lohkanlisttus"; "reading-list-do-not-keep-button-title" = "Ii, sihko artihkkaliid ovttadagas"; "reading-list-entry-limit-exceeded-message" = "Fertet unnidit artihkkaliid logu dán listtus $1:ii vai sáhtát joatkit dán listtu artihkkaliid synkroniseremiin."; "reading-list-entry-limit-exceeded-title" = "Don leat rihkkon ráji mii lea {{PLURAL:$1|$1 artihkal|$1 artihkkala}} juohke geavaheaddjidovddaldaga namas."; @@ -995,6 +997,7 @@ "saved-default-reading-list-tag" = "Listu ii sáhte sihkkojuvvot"; "saved-pages-image-download-error" = "Ii nagodan viežžat govaid dan vurkejuvvon siidui."; "saved-pages-progress-syncing" = "Viežžame artihkkaliid..."; +"saved-reading-lists-search-placeholder" = "Oza lohkanlisttuin"; "saved-reading-lists-title" = "Lohkanlisttut"; "saved-search-default-text" = "Oza vurkejuvvon artihkkaliin"; "saved-title" = "Vurkejuvvon"; diff --git a/Wikipedia/Localizations/shn.lproj/InfoPlist.strings b/Wikipedia/Localizations/shn.lproj/InfoPlist.strings index 7bbf7ef2771..1608a0fc204 100644 --- a/Wikipedia/Localizations/shn.lproj/InfoPlist.strings +++ b/Wikipedia/Localizations/shn.lproj/InfoPlist.strings @@ -1,4 +1,4 @@ -// Messages for Shan (ၽႃႇသႃႇတႆး ) +// Messages for Shan (တႆး) // Exported from translatewiki.net // Author: Saimawnkham diff --git a/Wikipedia/Localizations/shn.lproj/Localizable.strings b/Wikipedia/Localizations/shn.lproj/Localizable.strings index 7599a42df98..3b887234b2f 100644 --- a/Wikipedia/Localizations/shn.lproj/Localizable.strings +++ b/Wikipedia/Localizations/shn.lproj/Localizable.strings @@ -1,4 +1,4 @@ -// Messages for Shan (ၽႃႇသႃႇတႆး ) +// Messages for Shan (တႆး) // Exported from translatewiki.net // Author: Nemo bis // Author: Saimawnkham diff --git a/Wikipedia/Localizations/tr.lproj/Localizable.strings b/Wikipedia/Localizations/tr.lproj/Localizable.strings index f7fc20253b2..b4649a37613 100644 --- a/Wikipedia/Localizations/tr.lproj/Localizable.strings +++ b/Wikipedia/Localizations/tr.lproj/Localizable.strings @@ -29,6 +29,7 @@ // Author: Mirzali // Author: MrSchipunov // Author: MuratTheTurkish +// Author: Nabbegat // Author: Nemo bis // Author: Rapsar // Author: Sadrettin @@ -162,7 +163,7 @@ "announcements-dismiss" = "Kapat"; "app-store-keywords" = "Vikipedi, referans, viki, ansiklopedi, bilgi, bilgilenme, araştırma, bilme, keşfet, öğren"; "app-store-release-notes" = "Tamamen özelleştirilebilir beslemeleri keşfedin. Yerelleştirme, performans iyileştirmeleri ve hata düzeltmeleri."; -"app-store-short-description" = "Size yakın yerler keşfetmek, çevrimdışı makaleler okumak ve okuma deneyiminizi özelleştirmek için Vikipedi uygulamasını indirin."; +"app-store-short-description" = "Size yakın yerler keşfetmek, çevrimdışı maddeler okumak ve okuma deneyiminizi özelleştirmek için Vikipedi uygulamasını indirin."; "app-store-subtitle" = "Özgür ansiklopedi"; "appearance-settings-adjust-text-sizing" = "Madde metin boyutunu ayarla"; "appearance-settings-expand-tables" = "Tabloları genişlet"; @@ -358,7 +359,7 @@ "edit-watch-this-page-text" = "Bu sayfayı izle"; "editing-welcome-be-bold-subtitle" = "Maddeleri güncellerken dikkatsiz değil cesur olun. Hata yapmaktan çekinmeyin. Sayfanın her eski sürümü kaydedilir böylece hatalar topluluğumuz tarafından kolayca düzeltilebilir."; "editing-welcome-be-bold-title" = "Sizin sözünüz önemli"; -"editing-welcome-citations-subtitle" = "Bütün içerik doğrulanabilir olmalıdır. Katkı yapanlar, bir makaleye yeni bilgi eklerken, onu doğrudan destekleyen metin içi atıflar da sunmalıdır."; +"editing-welcome-citations-subtitle" = "Bütün içerik doğrulanabilir olmalıdır. Katkı yapanlar, bir maddeye yeni bilgi eklerken, onu doğrudan destekleyen metin içi atıflar da sunmalıdır."; "editing-welcome-citations-title" = "Güvenilir kaynaklara atıf yapın"; "editing-welcome-impartial-tone-subtitle" = "Maddelerin tarafsız bir bakış açısıyla yazılması için gayret gösteriyoruz. Düzenlerken güvenilir bir kaynak olarak tanımlandığı şekilde dünyanın adil bir şekilde temsil edilmesini sağlayın."; "editing-welcome-impartial-tone-title" = "Tarafsız bir bakış açısıyla yazın"; @@ -432,7 +433,7 @@ "empty-insert-media-title" = "Wikimedia Commons'tan bir dosya seç"; "empty-no-article-message" = "Üzgünüz, madde yüklenemedi"; "empty-no-feed-action-message" = "Hâlâ kaydedilen sayfaları okuyabilirsiniz"; -"empty-no-feed-message" = "İnternet bağlantınız olduğunda, size önerilen makaleleri görebilirsiniz"; +"empty-no-feed-message" = "İnternet bağlantınız olduğunda, size önerilen maddeleri görebilirsiniz"; "empty-no-history-message" = "Okuduklarını buradan takip et"; "empty-no-history-title" = "Görüntülenebilecek bir geçmiş yok"; "empty-no-other-article-languages-message" = "Bu madde henüz başka hiç bir dilde yazılmadı"; diff --git a/Wikipedia/Localizations/uk.lproj/Localizable.strings b/Wikipedia/Localizations/uk.lproj/Localizable.strings index 50c98e42400..ba8a27549eb 100644 --- a/Wikipedia/Localizations/uk.lproj/Localizable.strings +++ b/Wikipedia/Localizations/uk.lproj/Localizable.strings @@ -754,6 +754,14 @@ "microsite-yir-english-edits-bytes-slide-title" = "Додано 4 мільярди байтів"; "microsite-yir-english-edits-slide-subtitle" = "Волонтери внесли 98 222 407 змін у понад 300 мовних версіях Вікіпедії. В англійській Вікіпедії було зроблено понад 37 мільйонів змін. Щогодини щодня волонтери працюють над покращенням Вікіпедії."; "microsite-yir-english-edits-slide-title" = "Цього року редактори внесли 98 мільйонів змін"; +"microsite-yir-english-non-donor-slide-subtitle" = "З вашою допомогою Фонд Вікімедіа — некомерційна організація, що стоїть за Вікіпедією — продовжуватиме забезпечувати відсутність реклами і надійність інформації, на яку ви покладаєтеся, водночас підтримуючи безперебійну роботу Вікіпедії за допомогою найсучасніших інструментів і технологій. Будь ласка, розгляньте можливість зробити пожертву сьогодні. [Докладніше про нашу роботу]($1)."; +"microsite-yir-english-non-donor-slide-title" = "У Вікіпедії розміщено 0 рекламних оголошень"; +"microsite-yir-english-reading-slide-subtitle" = "У 2024 році люди витратили приблизно 2,9 мільярда годин — понад 331 000 років! — на читання англомовної Вікіпедії. Вікіпедія тут, коли ви хочете дізнатися про наш мінливий світ, виграти парі серед друзів або відповісти на запитання допитливої дитини."; +"microsite-yir-english-reading-slide-title" = "Ми витратили 2,9 мільярда годин на читання"; +"microsite-yir-english-saved-reading-slide-subtitle" = "Активні користувачі iOS App мали понад 62,2 мільйона списків читання. Додавання статей до списків читання дає вам доступ до статей навіть у режимі офлайн. Ви також можете увійти в систему, щоб синхронізувати списки читання на різних пристроях."; +"microsite-yir-english-saved-reading-slide-title" = "У нас було понад 62,2 мільйона списків читання"; +"microsite-yir-english-top-read-slide-subtitle" = "5 найвідвідуваніших статей англомовної Вікіпедії:\n\n1. $1 \n2. $2 \n3. $3 \n4. $4 \n5. $5 \nДокладніше в $6нашому спеціальному дописі блогу $7."; +"microsite-yir-english-top-read-slide-title" = "Найпопулярніші статті англійської Вікіпедії"; "more-languages-tooltip-description" = "Шукати у Вікіпедії майже 300 мовами"; "more-languages-tooltip-title" = "Додати мови"; "more-menu" = "Більше"; @@ -765,6 +773,7 @@ "nearby-distance-label-miles" = "$1 миль"; "new-password-instructions" = "Ви увійшли до системи за допомогою тимчасового пароля. Аби завершити вхід, встановіть новий пароль тут."; "new-password-title" = "Встановіть свій пароль"; +"next-action-title" = "Далі"; "no-email-account-alert" = "Будь ласка, налаштуйте обліковий запис електронної пошти на вашому пристрої і спробуйте знову."; "no-internet-connection" = "Немає з'єднання з інтернетом"; "no-internet-connection-article-reload" = "Можливо, доступна новіша версія цієї статті, але вона не може бути завантажена через відсутність підключення до Інтернету"; @@ -954,7 +963,9 @@ "places-filter-top-articles" = "Найчитаніше"; "places-filter-top-articles-count" = "$1 {{PLURAL:$1|стаття|статей}}"; "places-filter-top-read-articles" = "Найчитаніші статті"; +"places-list-title'" = "Список"; "places-location-enabled" = "Місце розташування увімкнено"; +"places-map-title" = "Мапа"; "places-no-saved-articles-have-location" = "Жодна зі збережених вами статей не має інформації про розташування"; "places-search-articles-that-match" = "$1 підходить для «$2»"; "places-search-default-text" = "Шукати місця"; @@ -974,6 +985,18 @@ "potd-widget-description" = "Насолоджуйтеся чудовою щоденною світлиною, обраною нашою спільнотою."; "potd-widget-title" = "Зображення дня"; "preference-summary-eventlogging-opt-in" = "Дозвольте Фондові Вікімедіа збирати відомості про те, як ви користуєтеся додатком, аби вдосконалити його"; +"privacy-policy-title" = "Політика конфіденційності"; +"problem-with-feature-title" = "Проблема з функцією"; +"profile-button-accessibility-hint" = "Переходить до перегляду профілю."; +"profile-button-accessibility-label" = "Профіль"; +"profile-button-badge-accessibility-label" = "Профіль із значком непрочитаного"; +"profile-page-donate-subtext" = "Або підтримайте Вікіпедію пожертвою, щоб вона залишалася безкоштовною та доступною для всіх у всьому світі."; +"profile-page-join-subtext" = "Зареєструйте обліковий запис у Вікіпедії, щоб відстежувати свій внесок, зберігати статті в автономному режимі та синхронізувати їх на різних пристроях."; +"profile-page-join-title" = "Увійти / приєднатися до Вікіпедії"; +"profile-page-logged-out-year-in-review-subtext" = "Увійдіть або створіть обліковий запис, щоб наступного року отримати покращений огляд за рік"; +"profile-page-title-logged-out" = "Обліковий запис"; +"profile-year-in-review-login-subtitle" = "Увійдіть або створіть обліковий запис, щоб знову переглянути «Огляд року» та мати право на отримання більш персоналізованої статистики."; +"profile-year-in-review-login-title" = "Увійдіть, щоб отримати доступ до огляду року"; "project-name-mediawiki" = "MediaWiki"; "project-name-wikibooks" = "Вікіпідручник"; "project-name-wikidata" = "Вікідані"; @@ -998,6 +1021,7 @@ "reading-list-create-new-list-reading-list-name" = "Назва читального списку"; "reading-list-create-new-list-title" = "Створити новий список"; "reading-list-deleted-accessibility-notification" = "Читальний список вилучено"; +"reading-list-detail-search-placeholder" = "Пошук у читальному списку"; "reading-list-do-not-keep-button-title" = "Ні, вилучити статті з приладу"; "reading-list-entry-limit-exceeded-message" = "Будь ласка, зменшіть число статей у цьому списку до $1, аби відновити їхню синхронізацію."; "reading-list-entry-limit-exceeded-title" = "Ви перевищили ліміт у {{PLURAL:$1|$1 статтю|$1 статті|$1 статей}} для облікового запису."; @@ -1095,6 +1119,7 @@ "saved-default-reading-list-tag" = "Цей список не можна вилучити"; "saved-pages-image-download-error" = "Не вдалося завантажити малюнки для цієї збереженої сторінки."; "saved-pages-progress-syncing" = "Стаття завантажується…"; +"saved-reading-lists-search-placeholder" = "Пошук у списках читання"; "saved-reading-lists-title" = "Читальні списки"; "saved-search-default-text" = "Знайти збережені статті"; "saved-title" = "Збережене"; @@ -1137,6 +1162,8 @@ "settings-notifications-push-notifications" = "Push-сповіщення"; "settings-notifications-system-turn-on" = "Увімкнути сповіщення"; "settings-notifications-trending" = "У тренді поточних подій"; +"settings-off" = "Вимк."; +"settings-on" = "Увімк."; "settings-primary-language" = "Основна"; "settings-primary-language-details" = "Перша мова в цьому списку використовується як основна мова додатку."; "settings-search-footer-text" = "Відкривати після запуску вкладинку «Пошук» замість стрічки"; @@ -1155,6 +1182,7 @@ "settings-storage-and-syncing-show-default-reading-list-title" = "Показувати «Збережене»"; "settings-storage-and-syncing-title" = "Збереження та синхронізація статей"; "settings-title" = "Налаштування"; +"settings-year-in-review-header" = "Вимкнення «Огляду року» призведе до вилучення всіх збережених персоналізованих статистичних даних і приховування «Огляду року»."; "share-a-fact-made-with" = "Створено за допомоги додатку Вікіпедія"; "share-article-name-on-wikipedia" = "\"$1\" у Wikipedia:"; "share-building" = "Створення картки «Поділися фактом»..."; @@ -1169,6 +1197,11 @@ "share-social-mention-format" = "«$1» у Вікіпедії: $2"; "sort-by-recently-added-action" = "Нещодавно додані"; "sort-by-title-action" = "Назва"; +"suggested-edits-title" = "Пропоновані редагування"; +"survey-instructions" = "Виберіть один або кілька варіантів"; +"survey-other-placeholder" = "Інше"; +"survey-submit" = "Надіслати"; +"survey-title" = "Причина"; "table-of-contents-button-label" = "Вміст"; "table-of-contents-close-accessibility-hint" = "Закрити"; "table-of-contents-close-accessibility-label" = "Закрити зміст"; @@ -1212,6 +1245,7 @@ "talk-page-reply-button-accessibility-label" = "Відповісти $1"; "talk-page-reply-depth-accessibility-label" = "Глибина відповіді: $1"; "talk-page-reply-placeholder-format" = "Відповісти $1"; +"talk-page-reply-terms-and-licenses-ccsa4" = "Ваша відповідь буде автоматично підписана вашим іменем користувача. Зберігаючи зміни, ви погоджуєтеся з $1Умовами використання$2 і видаєте свій внесок згідно з ліцензіями $3CC BY-SA 4.0$4 і $5GFDL$6."; "talk-page-revision-history" = "Історія редагувань"; "talk-page-rply-close-button-accessibility-hint" = "Закрити вікно відповіді"; "talk-page-share-button" = "Поділитися сторінкою обговорення"; @@ -1221,6 +1255,7 @@ "talk-page-subscription-failed-alert" = "Не вдалося підписатися на тему, повторіть спробу."; "talk-page-title-article-talk" = "Обговорення статті"; "talk-page-title-user-talk" = "Обговорення користувача"; +"talk-page-topic-compose-terms-and-licenses-ccsa4" = "Публікуючи зміни, ви погоджуєтеся з $1Умовами використання$2 та невідклично оприлюднюєте свій внесок за ліцензіями $3CC BY-SA 4.0$4 і $5GFDL$6."; "talk-page-unsubscribe-to-topic" = "Відписатись"; "talk-page-unsubscribed-alert-subtitle" = "Ви більше не будете отримувати сповіщення про нові коментарі в цій темі."; "talk-page-unsubscribed-alert-title" = "Ви скасували підписку."; @@ -1232,6 +1267,7 @@ "talk-pages-coffee-roll-read-more" = "Читати більше"; "talk-pages-comment-added-alert-title" = "Ваш коментар був доданий"; "talk-pages-compose-close-confirmation-keep" = "Продовжити Редагування"; +"talk-pages-edit-source" = "Редагувати код"; "talk-pages-empty-view-body-article" = "Сторінки обговорення — це місце, де люди обговорюють, як зробити вміст Вікіпедії якнайкращим. **Почніть із додавання нової теми для обговорення**, щоб зв'язатися та співпрацювати зі спільнотою вікіпедистів."; "talk-pages-empty-view-body-user" = "Сторінки обговорення — це місце, де люди обговорюють, як зробити вміст Вікіпедії якнайкращим. Почніть нове обговорення, щоб зв'язатися та співпрацювати з $1. Написане вами буде видимим для інших людей."; "talk-pages-empty-view-button-article-add-topic" = "Додати нову тему"; @@ -1243,6 +1279,7 @@ "talk-pages-topic-compose-body-placeholder" = "Опис"; "talk-pages-topic-compose-body-placeholder-accessibility" = "Опис теми"; "talk-pages-topic-compose-close-confirmation-discard-reply" = "Скасувати відповідь"; +"talk-pages-topic-compose-close-confirmation-discard-topic" = "Відкинути тему"; "talk-pages-topic-compose-close-confirmation-title" = "Ви впевнені, що хочете скасувати цю нову тему?"; "talk-pages-topic-compose-navbar-title" = "Тема"; "talk-pages-topic-compose-title-placeholder" = "Назва теми"; @@ -1253,6 +1290,7 @@ "talk-pages-user-groups" = "Групи користувача"; "talk-pages-user-logs" = "Журнали"; "talk-pages-view-title" = "Обговорення"; +"terms-of-use-title" = "Умови використання"; "theme-black-display-name" = "Чорна"; "theme-dark-display-name" = "Темна"; "theme-default-display-name" = "Типова"; @@ -1262,6 +1300,8 @@ "top-read-widget-description" = "Дізнайтеся, що світ читає у Вікіпедії сьогодні."; "top-read-widget-readers-count" = "$1 читачів"; "top-read-widget-title" = "Найчитаніше"; +"try-now-title" = "Спробувати зараз"; +"tutorial-title" = "Посібник"; "two-factor-login-continue" = "Продовжити вхід"; "two-factor-login-instructions" = "Будь ласка, введіть код двофакторної верифікації"; "two-factor-login-title" = "Вхід до вашого облікового запису"; @@ -1327,6 +1367,7 @@ "watchlist-filter-user-registration-header" = "Реєстрація користувача і його досвід"; "watchlist-filter-user-registration-options-registered" = "Зареєстровані"; "watchlist-filter-user-registration-options-unregistered" = "Незареєстровані"; +"watchlist-filters-add-language" = "Додати мову…"; "watchlist-number-filters" = "Змініть [{{PLURAL:$1|$1 фільтр|$1 фільтри|$1 фільтрів}}](wikipedia://watchlist/filter), щоб побачити більше елементів списку спостереження"; "watchlist-onboarding-button-title" = "Дізнатися більше про список спостереження"; "watchlist-onboarding-title" = "Представляємо ваш список спостереження"; @@ -1342,6 +1383,7 @@ "watchlist-user-button-user-talk-page" = "Сторінка обговорення користувача"; "watchlist-watch-subtitle" = "Натиснувши на зірочку або дію «Переглянути» на нижній панелі інструментів статті, ви можете додати цю сторінку до свого списку спостереження."; "watchlist-watch-title" = "Спостерігайте за статтями"; +"welcome-data-privacy-title" = "Дані та конфіденційність"; "welcome-exploration-explore-feed-description" = "Рекомендовані записи та щоденні статті від нашої спільноти"; "welcome-exploration-explore-feed-title" = "Стрічка"; "welcome-exploration-on-this-day-description" = "Перенестися назад у часі, аби дізнатися, що сталося сьогодні в історії"; @@ -1363,6 +1405,8 @@ "welcome-notifications-tell-me-more-creation" = "Сповіщення створюються і доставляються до вашого пристрою через відповідний додаток, а не через наші (чи сторонні) сервери."; "welcome-notifications-tell-me-more-storage" = "Налаштування сповіщень зберігаються на пристрої і не базуються на конфіденційній інформації чи діяльності."; "welcome-notifications-tell-me-more-title" = "Більше про сповіщення"; +"welcome-privacy-subtitle" = "Ми вважаємо, що ви не маєте надавати особисту інформацію, щоб брати участь у русі вільних знань. Дані про використання, зібрані для цієї програми, є анонімними."; +"welcome-privacy-terms-button-text" = "Дізнайтеся більше про нашу політику конфіденційності та умови використання"; "widget-onthisday-description" = "Дізнайтеся, що сталося цього дня в історії."; "widget-onthisday-placeholder-article-snippet" = "Вільна онлайн-енциклопедія, яку може редагувати будь-хто"; "widget-onthisday-placeholder-event-snippet" = "Вікіпедія, вільна вікі-енциклопедія, з'явилася онлайн."; @@ -1381,4 +1425,76 @@ "wikitext-upload-save-anonymously-or-login" = "Редагування будуть приписані ІР-адресі вашого пристрою. Якщо ви $1авторизуєтеся$2, ваші дії будуть більш конфіденційними."; "wikitext-upload-save-anonymously-warning" = "Редагування буде приписано ІР-адресі вашого пристрою. Якщо ви $1, ваші дії будуть більш конфіденційними."; "wikitext-upload-save-sign-in" = "Увійти"; +"wikitext-upload-save-terms-and-licenses-ccsa4" = "Публікуючи зміни, ви погоджуєтеся з $1Умовами використання$2 і з тим, що розміщуєте свій внесок за ліцензіями $3CC BY-SA 4.0$4 і $5GFDL$6. Ви також погоджуєтеся, що зазначене гіперпосилання чи URL задовольняє ліцензію Creative Commons."; "wikitext-upload-save-terms-name" = "Умови використання"; +"year-in-review-base-donate-subtitle" = "З вашою допомогою Фонд Вікімедіа — некомерційна організація, що стоїть за Вікіпедією — продовжуватиме забезпечувати відсутність реклами і надійність інформації, на яку ви покладаєтеся, водночас підтримуючи безперебійну роботу Вікіпедії за допомогою найсучасніших інструментів і технологій. Будь ласка, розгляньте можливість зробити пожертву сьогодні. [Докладніше про нашу роботу]($1)."; +"year-in-review-base-donate-title" = "У Вікіпедії розміщено 0 рекламних оголошень"; +"year-in-review-base-editors-subtitle" = "Спільнота волонтерів-редакторів Вікіпедії зробила понад 555 647 редагувань у програмці для iOS. Серцем і душею Вікіпедії є наша глобальна спільнота волонтерів, донорів і мільярдів читачів, таких як ви, — усі вони об'єдналися, щоб ділитися необмеженим доступом до надійної інформації."; +"year-in-review-base-editors-title" = "Редактори програмки для iOS зробили понад $1 редагувань"; +"year-in-review-base-edits-subtitle" = "Вікіпедія редагувалася із середньою швидкістю $1 за хвилину. Статті створюються спільно та вдосконалюються з надійних джерел. Усі ми маємо знання, якими можемо поділитися, [дізнайтеся, як взяти участь]($2)."; +"year-in-review-base-edits-title" = "Вікіпедію редагували $1 разів на хвилину"; +"year-in-review-base-reading-subtitle" = "У Вікіпедії було більше $1 мільйонів статей понад $2 активними мовами. Ви приєдналися до мільйонів у розширенні знань і дослідженні різноманітних тем."; +"year-in-review-base-reading-title" = "Вікіпедія була доступна понад 300 мовами"; +"year-in-review-base-saved-subtitle" = "Активні користувачі iOS App мали понад 62,2 мільйона списків читання. Додавання статей до списків читання дає вам доступ до статей навіть у режимі офлайн. Ви також можете увійти в систему, щоб синхронізувати списки читання на різних пристроях."; +"year-in-review-base-saved-title" = "У нас було понад $1 мільйона списків читання"; +"year-in-review-base-viewed-subtitle" = "Користувачі програмки для iOS переглянули статті Вікіпедії $1 мільярда разів. Для людей у всьому світі Вікіпедія є першою зупинкою при відповіді на запитання, пошуку інформації для навчання чи роботи або коли вони дізнаються новий факт."; +"year-in-review-base-viewed-title" = "Ми переглянули статті Вікіпедії $1 мільярда разів"; +"year-in-review-button-title" = "Огляд року"; +"year-in-review-collective-article-views" = "Анімована ілюстрація екрана комп'ютера з відкритим веббраузером, у якому згори донизу прогортується стаття Вікіпедії"; +"year-in-review-collective-edits" = "Ілюстрація двох елементів пазла Вікіпедії, кожен з яких несе «в руках» частину інформації."; +"year-in-review-collective-edits-per-minute" = "Годинник, який цокає і символізує час, проведений людьми за читанням Вікіпедії."; +"year-in-review-collective-explore" = "Анімована ілюстрація, на якій зображено глобус Вікіпедії, оточений будівельними риштуваннями, що символізують спільні зусилля людей у всьому світі зі створення проєкту. Довкола видно міський пейзаж, що підкреслює зв’язок Вікіпедії з людством і світовою культурою."; +"year-in-review-collective-languages" = "Анімована ілюстрація каменя з вигравіруваним написом на позначення різних мов, що символізує те, як Вікіпедія спільно збирає знання про різні культури та регіони."; +"year-in-review-collective-saved-articles" = "Глобус-пазл із логотипом Вікіпедії, що символізує глобальну співпрацю."; +"year-in-review-collective-zero-ads" = "Лого Вікімедіа"; +"year-in-review-day-friday" = "п'ятниці"; +"year-in-review-day-monday" = "понеділки"; +"year-in-review-day-saturday" = "суботи"; +"year-in-review-day-sunday" = "неділі"; +"year-in-review-day-thursday" = "четверги"; +"year-in-review-day-tuesday" = "вівторки"; +"year-in-review-day-wednesday" = "середи"; +"year-in-review-donate" = "Пожертвувати"; +"year-in-review-donate-now" = "Пожертвувати зараз"; +"year-in-review-english-edits" = "Графік, що показує 10 найбільш редагованих мовних версій Вікіпедії у 2024 році: англійська з понад 31 мільйоном редагувань, німецька з 5 508 570 редагуваннями, французька з 5 276 385 редагуваннями, іспанська з 4 786 205 редагуваннями, російська з 3 303 066 редагуваннями, італійська з 3 200 398 редагуваннями, японська з 2 973 657 редагуваннями, китайська з 2 505 032 редагуваннями, польська з 1 383 808 редагуваннями, українська з 1 376 980 редагуваннями. Загальна кількість редагувань у всіх версіях Вікіпедії у 2024 році становить 81 987 181."; +"year-in-review-feature-announcement-body" = "Перегляньте статистику того, які статті ми читали та редагували, і діліться найважливішими моментами нашого року у Вікіпедії."; +"year-in-review-feature-announcement-body-personalized" = "Переглядайте статистику про статті, які ви читали в програмці Вікіпедії, діліться своєю подорожжю та відкривайте найцікавіші моменти свого року."; +"year-in-review-feature-announcement-title" = "Перегляньте Вікіпедію в огляді"; +"year-in-review-feature-announcement-title-personalized" = "Ознайомтеся зі своїм оглядом року у Вікіпедії"; +"year-in-review-feature-explore-body" = "Вікіпедія є найбільшим ресурсом знань, будь-коли створеним в історії світу, і вона є вільнодоступною для всіх і всюди. Ось огляд 2024 року через призму Вікіпедії."; +"year-in-review-feature-explore-body-personalized" = "Переглядайте статистику того, які статті ви читали в програмці Вікіпедії, а також редагування, які ви зробили у 2024 році. Ваша історія читання зберігається під захистом. Статистика читання обчислюється на основі локально збережених даних на вашому пристрої."; +"year-in-review-finish" = "Завершити"; +"year-in-review-login-subtitle" = "Увійдіть або створіть обліковий запис, щоб отримати більш персоналізовану статистику"; +"year-in-review-login-title" = "Покращте свій огляд року"; +"year-in-review-personalized-day-subtitle-format" = "Днем, коли ви читали найбільше статей, стали $1. Зрозуміло, що $1 — ваші улюблені дня для відкриття нового контенту. Дякуємо, що використали час на читання з максимальною користю!"; +"year-in-review-personalized-day-title-format" = "Днем, коли ви найбільше читали, стали $1."; +"year-in-review-personalized-donate-subtitle" = "Дякуємо, що інвестуєте в майбутнє вільних знань. Цього року Фонд Вікімедіа вдосконалював технології, щоб краще обслуговувати кожного читача та волонтера, розробляв інструменти, які сприяють співпраці, і підтримував Вікіпедію ще більшою кількістю мов. [Докладніше про нашу роботу]($1)."; +"year-in-review-personalized-donate-title" = "Ваша щедрість допомогла Вікіпедії процвітати"; +"year-in-review-personalized-donation-thank-you" = "Лого Вікімедіа"; +"year-in-review-personalized-edit-views-subtitle-format" = "Читачі в усьому світі цінують ваш внесок. Загальна кількість переглядів, які отримали редаговані вами статті за останні 2 місяці — $1. Завдяки таким редакторам, як ви, Вікіпедія є постійно вдосконалюваним, заснованим на фактах і надійним ресурсом знань для світу"; +"year-in-review-personalized-edit-views-title-format" = "Останнім часом ваші зміни переглянули понад $1 разів"; +"year-in-review-personalized-editing-subtitle-format" = "Ви редагували Вікіпедію {{PLURAL:$1|$1 раз|$1 рази|$1 разів}}. Дякуємо вам приналежність до волонтерів-редакторів по всьому світу, які змінюють проєкти Вікімедіа на краще."; +"year-in-review-personalized-editing-subtitle-format-500plus" = "Ви редагували Вікіпедію понад 500 разів. Дякуємо вам приналежність до волонтерів-редакторів по всьому світу, які змінюють проєкти Вікімедіа на краще."; +"year-in-review-personalized-editing-title-format" = "Ви редагували Вікіпедію {{PLURAL:$1|$1 раз|$1 рази|$1 разів}}"; +"year-in-review-personalized-editing-title-format-500plus" = "Ви редагували Вікіпедію понад 500 разів"; +"year-in-review-personalized-explore" = "Анімована ілюстрація руки, що тримає в пальцях глобус Вікіпедії, який поступово перетворюється на маленький шматочок пазла, що символізує індивідуальний внесок у платформу."; +"year-in-review-personalized-reading-subtitle-format" = "Ви прочитали {{PLURAL:$1|$1 статтю|$1 статті|$1 статей}}. У Вікіпедії було доступно $2 мільйона статей понад $3 активними мовами. Ви приєдналися до мільйонів у розширенні знань і дослідженні різноманітних тем."; +"year-in-review-personalized-reading-title-format" = "Ви прочитали $1 {{PLURAL:$1|статтю|статті|статей}}"; +"year-in-review-personalized-saved-articles" = "Ілюстрація шматочка пазла в будівельній касці з комп'ютерними екранами позаду."; +"year-in-review-personalized-saved-subtitle-format" = "Ви зберегли {{PLURAL:$1|$1 статтю|$1 статті|$1 статей}} цього року, зокрема $2, $3 і $4. Кожна збережена стаття відображає ваші інтереси та допомагає створити персональну базу знань у Вікіпедії."; +"year-in-review-personalized-saved-title-format" = "Ви зберегли $1 {{PLURAL:$1|статтю|статті|статей}}"; +"year-in-review-personalized-user-edits" = "Анімована ілюстрація, на якій байти складаються один на одного, символізуючи постійне створення вільного знання."; +"year-in-review-personalized-weekday" = "Годинник, який цокає і символізує час, проведений людьми за читанням Вікіпедії."; +"year-in-review-personalized-you-read" = "Фрагмент пазла з логотипом Вікімедіа заходить зліва."; +"year-in-review-personalized-your-edits-views" = "Ілюстрація, на якій зображено фрагмент пазла Вікіпедії поруч з олівцем."; +"year-in-review-share-text" = "Ось мій огляд Вікіпедії за рік. Створено за допомогою програмки Вікіпедії для iOS"; +"year-in-review-survey-additional-thoughts" = "Є ще якісь думки?"; +"year-in-review-survey-neutral" = "Нейтрально"; +"year-in-review-survey-satisfied" = "Задоволений/а"; +"year-in-review-survey-subtitle" = "Допоможіть покращити огляд Вікіпедії за рік. Ви задоволені цією функцією? Що б хотілося побачити наступного року?"; +"year-in-review-survey-title" = "Опитування задоволеності"; +"year-in-review-survey-unsatisfied" = "Незадоволений/а"; +"year-in-review-survey-very-satisfied" = "Дуже задоволений/а"; +"year-in-review-survey-very-unsatisfied" = "Дуже незадоволений/а"; +"year-in-review-wikipedia-w-accessibility-label" = "Логотип Вікіпедії"; +"year-in-review-wmf-logo-accessibility-label" = "Логотип Фонду Вікімедіа"; diff --git a/Wikipedia/Staging-Info.plist b/Wikipedia/Staging-Info.plist index c5674cba6b6..69efa4c1564 100644 --- a/Wikipedia/Staging-Info.plist +++ b/Wikipedia/Staging-Info.plist @@ -28,7 +28,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 7.7.1 + 7.7.2 CFBundleSignature ???? CFBundleURLTypes diff --git a/Wikipedia/Wikipedia-Info.plist b/Wikipedia/Wikipedia-Info.plist index 73341bb37f5..33921da4a66 100644 --- a/Wikipedia/Wikipedia-Info.plist +++ b/Wikipedia/Wikipedia-Info.plist @@ -28,7 +28,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 7.7.1 + 7.7.2 CFBundleSignature ???? CFBundleURLTypes diff --git a/Wikipedia/iOS Native Localizations/ast.lproj/Localizable.strings b/Wikipedia/iOS Native Localizations/ast.lproj/Localizable.strings index cc588e2628b..8ddee71f6ec 100644 Binary files a/Wikipedia/iOS Native Localizations/ast.lproj/Localizable.strings and b/Wikipedia/iOS Native Localizations/ast.lproj/Localizable.strings differ diff --git a/Wikipedia/iOS Native Localizations/be-tarask.lproj/Localizable.strings b/Wikipedia/iOS Native Localizations/be-tarask.lproj/Localizable.strings index a7d90290984..e7e39a187e9 100644 Binary files a/Wikipedia/iOS Native Localizations/be-tarask.lproj/Localizable.strings and b/Wikipedia/iOS Native Localizations/be-tarask.lproj/Localizable.strings differ diff --git a/Wikipedia/iOS Native Localizations/ce.lproj/Localizable.strings b/Wikipedia/iOS Native Localizations/ce.lproj/Localizable.strings index add7df9449b..2776532250b 100644 Binary files a/Wikipedia/iOS Native Localizations/ce.lproj/Localizable.strings and b/Wikipedia/iOS Native Localizations/ce.lproj/Localizable.strings differ diff --git a/Wikipedia/iOS Native Localizations/cs.lproj/Localizable.strings b/Wikipedia/iOS Native Localizations/cs.lproj/Localizable.strings index e9155adf5ae..32da82e4253 100644 Binary files a/Wikipedia/iOS Native Localizations/cs.lproj/Localizable.strings and b/Wikipedia/iOS Native Localizations/cs.lproj/Localizable.strings differ diff --git a/Wikipedia/iOS Native Localizations/fi.lproj/Localizable.strings b/Wikipedia/iOS Native Localizations/fi.lproj/Localizable.strings index 92530166010..b9d957eeb83 100644 Binary files a/Wikipedia/iOS Native Localizations/fi.lproj/Localizable.strings and b/Wikipedia/iOS Native Localizations/fi.lproj/Localizable.strings differ diff --git a/Wikipedia/iOS Native Localizations/pa.lproj/Localizable.strings b/Wikipedia/iOS Native Localizations/pa.lproj/Localizable.strings index 65ff133589e..0f1ea89d0fd 100644 Binary files a/Wikipedia/iOS Native Localizations/pa.lproj/Localizable.strings and b/Wikipedia/iOS Native Localizations/pa.lproj/Localizable.strings differ diff --git a/Wikipedia/iOS Native Localizations/pa.lproj/Localizable.stringsdict b/Wikipedia/iOS Native Localizations/pa.lproj/Localizable.stringsdict index a6a15ba4348..6889df7cd99 100644 --- a/Wikipedia/iOS Native Localizations/pa.lproj/Localizable.stringsdict +++ b/Wikipedia/iOS Native Localizations/pa.lproj/Localizable.stringsdict @@ -635,7 +635,7 @@ year-in-review-personalized-reading-subtitle-format NSStringLocalizedFormatKey - ਇਸ ਸਾਲ, ਤੁਸੀਂ %#@v1@। ਵਿਕੀਪੀਡੀਆ ਵਿੱਚ %3$@ ਤੋਂ ਵੱਧ ਸਰਗਰਮ ਭਾਸ਼ਾਵਾਂ ਵਿੱਚ %2$@ ਲੱਖ ਲੇਖ ਉਪਲਬਧ ਸਨ। ਤੁਸੀਂ ਗਿਆਨ ਨੂੰ ਵਧਾਉਣ ਅਤੇ ਵੱਖ-ਵੱਖ ਵਿਸ਼ਿਆਂ ਦੀ ਪੜਚੋਲ ਕਰਨ ਵਿੱਚ ਲੱਖਾਂ ਲੋਕਾਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਏ। + ਤੁਸੀਂ %#@v1@। ਵਿਕੀਪੀਡੀਆ ਵਿੱਚ %3$@ ਤੋਂ ਵੱਧ ਸਰਗਰਮ ਭਾਸ਼ਾਵਾਂ ਵਿੱਚ %2$@ ਲੱਖ ਲੇਖ ਉਪਲਬਧ ਸਨ। ਤੁਸੀਂ ਗਿਆਨ ਨੂੰ ਵਧਾਉਣ ਅਤੇ ਵੱਖ-ਵੱਖ ਵਿਸ਼ਿਆਂ ਦੀ ਪੜਚੋਲ ਕਰਨ ਵਿੱਚ ਲੱਖਾਂ ਲੋਕਾਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਏ। v1 NSStringFormatSpecTypeKey @@ -651,7 +651,7 @@ year-in-review-personalized-reading-title-format NSStringLocalizedFormatKey - ਤੁਸੀਂ ਇਸ ਸਾਲ %#@v1@ + ਤੁਸੀਂ %#@v1@ v1 NSStringFormatSpecTypeKey @@ -659,9 +659,9 @@ NSStringFormatValueTypeKey d one - %1$d ਲੇਖ ਪੜ੍ਹਿਆ + %1$d ਲੇਖ ਪੜ੍ਹਿਆ ਏ other - %1$d ਲੇਖ ਪੜ੍ਹੇ + %1$d ਲੇਖ ਪੜ੍ਹੇ ਹਨ year-in-review-personalized-saved-title-format diff --git a/Wikipedia/iOS Native Localizations/se.lproj/Localizable.strings b/Wikipedia/iOS Native Localizations/se.lproj/Localizable.strings index 90f8717ca5c..ac90b78d3c7 100644 Binary files a/Wikipedia/iOS Native Localizations/se.lproj/Localizable.strings and b/Wikipedia/iOS Native Localizations/se.lproj/Localizable.strings differ diff --git a/Wikipedia/iOS Native Localizations/se.lproj/Localizable.stringsdict b/Wikipedia/iOS Native Localizations/se.lproj/Localizable.stringsdict index b873737157d..a93ddb4af42 100644 --- a/Wikipedia/iOS Native Localizations/se.lproj/Localizable.stringsdict +++ b/Wikipedia/iOS Native Localizations/se.lproj/Localizable.stringsdict @@ -82,7 +82,7 @@ add-articles-to-reading-list NSStringLocalizedFormatKey - Lasit %#@v1@ lohkanlistui + Lasit %#@v1@ lohkanlistui v1 NSStringFormatSpecTypeKey diff --git a/Wikipedia/iOS Native Localizations/tr.lproj/Localizable.strings b/Wikipedia/iOS Native Localizations/tr.lproj/Localizable.strings index 953dfc2b99b..716f290e1d4 100644 Binary files a/Wikipedia/iOS Native Localizations/tr.lproj/Localizable.strings and b/Wikipedia/iOS Native Localizations/tr.lproj/Localizable.strings differ diff --git a/Wikipedia/iOS Native Localizations/uk.lproj/Localizable.strings b/Wikipedia/iOS Native Localizations/uk.lproj/Localizable.strings index 4aa043167a0..a57d7e01006 100644 Binary files a/Wikipedia/iOS Native Localizations/uk.lproj/Localizable.strings and b/Wikipedia/iOS Native Localizations/uk.lproj/Localizable.strings differ diff --git a/Wikipedia/iOS Native Localizations/uk.lproj/Localizable.stringsdict b/Wikipedia/iOS Native Localizations/uk.lproj/Localizable.stringsdict index a52052a63d9..631f58ab438 100644 --- a/Wikipedia/iOS Native Localizations/uk.lproj/Localizable.stringsdict +++ b/Wikipedia/iOS Native Localizations/uk.lproj/Localizable.stringsdict @@ -881,5 +881,101 @@ %1$d фільтрів + year-in-review-personalized-editing-subtitle-format + + NSStringLocalizedFormatKey + Ви редагували Вікіпедію %#@v1@. Дякуємо вам приналежність до волонтерів-редакторів по всьому світу, які змінюють проєкти Вікімедіа на краще. + v1 + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + %1$d раз + other + %1$d разів + + + year-in-review-personalized-editing-title-format + + NSStringLocalizedFormatKey + Ви редагували Вікіпедію %#@v1@ + v1 + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + %1$d раз + other + %1$d разів + + + year-in-review-personalized-reading-subtitle-format + + NSStringLocalizedFormatKey + Ви прочитали %#@v1@. У Вікіпедії було доступно %2$@ мільйона статей понад %3$@ активними мовами. Ви приєдналися до мільйонів у розширенні знань і дослідженні різноманітних тем. + v1 + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + %1$d статтю + other + %1$d статей + + + year-in-review-personalized-reading-title-format + + NSStringLocalizedFormatKey + Ви прочитали %1$d %#@v1@ + v1 + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + статтю + other + статей + + + year-in-review-personalized-saved-subtitle-format + + NSStringLocalizedFormatKey + Ви зберегли %#@v1@ цього року, зокрема %2$@, %3$@ і %4$@. Кожна збережена стаття відображає ваші інтереси та допомагає створити персональну базу знань у Вікіпедії. + v1 + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + %1$d статтю + other + %1$d статей + + + year-in-review-personalized-saved-title-format + + NSStringLocalizedFormatKey + Ви зберегли %1$d %#@v1@ + v1 + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + one + статтю + other + статей + + diff --git a/WikipediaUnitTests/Code/ArticleViewControllerTests.swift b/WikipediaUnitTests/Code/ArticleViewControllerTests.swift index 17223a6a602..20d2bb94d48 100644 --- a/WikipediaUnitTests/Code/ArticleViewControllerTests.swift +++ b/WikipediaUnitTests/Code/ArticleViewControllerTests.swift @@ -50,7 +50,7 @@ class ArticleViewControllerTests: XCTestCase { let theme = Theme.light let url = URL(string: "https://en.wikipedia.org/wiki/Dog")! let schemeHandler = MockSchemeHandler(scheme: "app", session: dataStore.session) - guard let articleVC = ArticleViewController(articleURL: url, dataStore: dataStore, theme: theme, schemeHandler: schemeHandler) else { + guard let articleVC = ArticleViewController(articleURL: url, dataStore: dataStore, theme: theme, source: .undefined, schemeHandler: schemeHandler) else { XCTFail("Failure initializing Article View Controller") return } diff --git a/WikipediaUnitTests/Code/TWNStringsTests.m b/WikipediaUnitTests/Code/TWNStringsTests.m index b1638758f7e..df6218749ce 100644 --- a/WikipediaUnitTests/Code/TWNStringsTests.m +++ b/WikipediaUnitTests/Code/TWNStringsTests.m @@ -80,6 +80,30 @@ + (NSArray *)twnLprojFiles { return twnLprojFiles; } ++ (NSArray *)twnLFilePaths { + static dispatch_once_t onceToken; + static NSArray *twnLFilePaths; + dispatch_once(&onceToken, ^{ + NSFileManager *fileManager = [NSFileManager defaultManager]; + NSString *localizationPath = [TWNStringsTests twnLocalizationsDirectory]; + + NSArray *lprojDirectories = [[[fileManager contentsOfDirectoryAtPath:localizationPath error:nil] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"pathExtension='lproj'"]] valueForKey:@"lowercaseString"]; + + // Generate full paths of Localizable.strings + NSMutableArray *localizationFilePaths = [NSMutableArray array]; + + for (NSString *lprojDir in lprojDirectories) { + NSString *localizablePath = [localizationPath stringByAppendingPathComponent:[lprojDir stringByAppendingPathComponent:@"Localizable.strings"]]; + + if ([fileManager fileExistsAtPath:localizablePath]) { + [localizationFilePaths addObject:localizablePath]; + } + } + twnLFilePaths = [localizationFilePaths copy]; + }); + return twnLFilePaths; +} + + (NSArray *)iOSLprojFiles { static dispatch_once_t onceToken; static NSArray *iOSLprojFiles; @@ -426,6 +450,41 @@ - (void)testIncomingTranslationStringForBracketSubstitutionsNotPresentInEN { } } +- (void)testLocalizableStringsSingleSemicolonEnd { + NSArray *localizationFiles = [TWNStringsTests twnLFilePaths]; // Fetch all Localizable.strings file paths + + XCTAssertTrue(localizationFiles.count > 0, @"No Localizable.strings files found"); + + for (NSString *filePath in localizationFiles) { + NSError *error = nil; + NSString *fileContents = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error]; + + XCTAssertNil(error, @"Error reading file %@: %@", filePath, error.localizedDescription); + XCTAssertNotNil(fileContents, @"File contents should not be nil for file %@", filePath); + + // Split file into lines + NSArray *lines = [fileContents componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]; + + // Check each line for multiple semicolons at the end + for (NSString *line in lines) { + // Trim trailing whitespace + NSString *trimmedLine = [line stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; + + // Skip empty lines and comment lines + if (trimmedLine.length == 0 || [trimmedLine hasPrefix:@"//"] || [trimmedLine hasPrefix:@"/*"]) { + continue; + } + + // Count semicolons at the end of the line + NSRange range = [trimmedLine rangeOfString:@";+$" options:NSRegularExpressionSearch]; + NSUInteger semicolonCount = (range.location != NSNotFound) ? range.length : 0; + + // Fail if multiple semicolons exist at the end of the line + XCTAssertLessThanOrEqual(semicolonCount, 1, @"File %@ has a line with multiple semicolons at the end: %@", filePath, trimmedLine); + } + } +} + - (void)tearDown { [super tearDown]; } diff --git a/WikipediaUnitTests/Info.plist b/WikipediaUnitTests/Info.plist index 36a070a0d66..738be2bda87 100644 --- a/WikipediaUnitTests/Info.plist +++ b/WikipediaUnitTests/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType BNDL CFBundleShortVersionString - 7.7.1 + 7.7.2 CFBundleSignature ???? CFBundleVersion diff --git a/WikipediaUnitTests/Manual Tests/ArticleManualPerformanceTests.swift b/WikipediaUnitTests/Manual Tests/ArticleManualPerformanceTests.swift index 2529f630990..a3b33ec1cf4 100644 --- a/WikipediaUnitTests/Manual Tests/ArticleManualPerformanceTests.swift +++ b/WikipediaUnitTests/Manual Tests/ArticleManualPerformanceTests.swift @@ -46,7 +46,7 @@ class ArticleManualPerformanceTests: XCTestCase { self.measure { - guard let articleVC = ArticleViewController(articleURL: articleURL, dataStore: dataStore, theme: .light) else { + guard let articleVC = ArticleViewController(articleURL: articleURL, dataStore: dataStore, theme: .light, source: .undefined) else { XCTFail("Unable to instantiate ArticleViewController") return } @@ -80,7 +80,7 @@ class ArticleManualPerformanceTests: XCTestCase { self.measure { - guard let articleVC = ArticleViewController(articleURL: articleURL, dataStore: dataStore, theme: .light) else { + guard let articleVC = ArticleViewController(articleURL: articleURL, dataStore: dataStore, theme: .light, source: .undefined) else { XCTFail("Unable to instantiate ArticleViewController") return } diff --git a/fastlane/metadata/tr/description.txt b/fastlane/metadata/tr/description.txt index 9b52b40af8a..2147e1bb0a5 100644 --- a/fastlane/metadata/tr/description.txt +++ b/fastlane/metadata/tr/description.txt @@ -1 +1 @@ -Size yakın yerler keşfetmek, çevrimdışı makaleler okumak ve okuma deneyiminizi özelleştirmek için Vikipedi uygulamasını indirin. \ No newline at end of file +Size yakın yerler keşfetmek, çevrimdışı maddeler okumak ve okuma deneyiminizi özelleştirmek için Vikipedi uygulamasını indirin. \ No newline at end of file