diff --git a/.github/ISSUE_TEMPLATE/bug.yaml b/.github/ISSUE_TEMPLATE/bug.yaml
new file mode 100644
index 000000000..c4a1f4911
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug.yaml
@@ -0,0 +1,62 @@
+name: 🐞 Bug
+description: File a bug/issue
+title: "[BUG]
"
+labels: [Bug, Needs Triage]
+body:
+- type: checkboxes
+ attributes:
+ label: Is there an existing issue for this?
+ description: Please search to see if an issue already exists for the bug you encountered.
+ options:
+ - label: I have searched the existing issues
+ required: true
+- type: textarea
+ attributes:
+ label: Current Behavior
+ description: A concise description of what you're experiencing.
+ validations:
+ required: false
+- type: textarea
+ attributes:
+ label: Expected Behavior
+ description: A concise description of what you expected to happen.
+ validations:
+ required: false
+- type: textarea
+ attributes:
+ label: Steps To Reproduce
+ description: Steps to reproduce the behavior.
+ placeholder: |
+ 1. In this environment...
+ 2. With this config...
+ 3. Tap '...'
+ 4. See error...
+ validations:
+ required: false
+- type: textarea
+ attributes:
+ label: Environment
+ description: |
+ You can check the version and build number in the bottom of in-app settings.
+ examples:
+ - **Device**: iPhone X
+ - **OS**: iOS 15.3
+ - **Version**: v1.3.0
+ - **Build**: 103
+ value: |
+ - Device:
+ - OS:
+ - Version:
+ - Build:
+ render: markdown
+ validations:
+ required: false
+- type: textarea
+ attributes:
+ label: Anything else?
+ description: |
+ The server domain? Post links? Anything that will give us more context about the issue you are encountering!
+
+ Tip: You can attach images or video or log files by clicking this area to highlight it and then dragging files in.
+ validations:
+ required: false
\ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/issue.md b/.github/ISSUE_TEMPLATE/issue.md
deleted file mode 100644
index cc2855ede..000000000
--- a/.github/ISSUE_TEMPLATE/issue.md
+++ /dev/null
@@ -1,32 +0,0 @@
-## Description
-
-
-
-## App version
-> You can check the version and build number in app setting footer.
-
-
-- Version: v0.0.0
-- Build: 0
-
-## Detail
-
-### Steps to reproduce
-
-
-
-1. Tap …
-2. …
-
-### Actual Behavior
-
-
-
-The app …
-
-### Expected behavior
-
-
-
-The app …
-
diff --git a/.github/scripts/build.sh b/.github/scripts/build.sh
index 76e65f49f..f5894901a 100755
--- a/.github/scripts/build.sh
+++ b/.github/scripts/build.sh
@@ -7,7 +7,6 @@ set -eo pipefail
xcodebuild -workspace Mastodon.xcworkspace \
-scheme Mastodon \
- -disableAutomaticPackageResolution \
-destination "platform=iOS Simulator,name=iPhone SE (2nd generation)" \
clean \
- build | xcpretty
\ No newline at end of file
+ build | xcpretty
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index b2979d002..a2f99d23e 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -19,8 +19,8 @@ jobs:
steps:
- name: checkout
uses: actions/checkout@v2
- - name: force Xcode 13.1
- run: sudo xcode-select -switch /Applications/Xcode_13.1.app
+ - name: force Xcode 13.2.1
+ run: sudo xcode-select -switch /Applications/Xcode_13.2.1.app
- name: setup
run: exec ./.github/scripts/setup.sh
- name: build
diff --git a/AppShared/AppName.swift b/AppShared/AppName.swift
deleted file mode 100644
index e2d356263..000000000
--- a/AppShared/AppName.swift
+++ /dev/null
@@ -1,12 +0,0 @@
-//
-// AppName.swift
-// AppShared
-//
-// Created by MainasuK Cirno on 2021-4-27.
-//
-
-import Foundation
-
-public enum AppName {
- public static let groupID = "group.org.joinmastodon.app"
-}
diff --git a/AppShared/AppSecret.swift b/AppShared/AppSecret.swift
index 7ef7a0821..1fc5495c7 100644
--- a/AppShared/AppSecret.swift
+++ b/AppShared/AppSecret.swift
@@ -11,6 +11,10 @@ import CryptoKit
import KeychainAccess
import Keys
+enum AppName {
+ public static let groupID = "group.org.joinmastodon.app"
+}
+
public final class AppSecret {
public static let keychain = Keychain(service: "org.joinmastodon.app.keychain", accessGroup: AppName.groupID)
diff --git a/AppShared/Info.plist b/AppShared/Info.plist
index 9fe845c60..73f11cd26 100644
--- a/AppShared/Info.plist
+++ b/AppShared/Info.plist
@@ -15,8 +15,8 @@
CFBundlePackageType
$(PRODUCT_BUNDLE_PACKAGE_TYPE)
CFBundleShortVersionString
- 1.2.0
+ 1.3.0
CFBundleVersion
- 88
+ 109
diff --git a/AppShared/UserDefaults.swift b/AppShared/UserDefaults.swift
index 753a3284f..31f8e27ef 100644
--- a/AppShared/UserDefaults.swift
+++ b/AppShared/UserDefaults.swift
@@ -6,6 +6,7 @@
//
import UIKit
+import MastodonCommon
extension UserDefaults {
public static let shared = UserDefaults(suiteName: AppName.groupID)!
diff --git a/AppStoreSnapshotTestPlan.xctestplan b/AppStoreSnapshotTestPlan.xctestplan
new file mode 100644
index 000000000..8761c4c01
--- /dev/null
+++ b/AppStoreSnapshotTestPlan.xctestplan
@@ -0,0 +1,34 @@
+{
+ "configurations" : [
+ {
+ "id" : "E27ADCCD-D2DF-4255-81D1-21CFC3C33254",
+ "name" : "Configuration 1",
+ "options" : {
+
+ }
+ }
+ ],
+ "defaultOptions" : {
+ "defaultTestExecutionTimeAllowance" : 1800,
+ "testTimeoutsEnabled" : true
+ },
+ "testTargets" : [
+ {
+ "selectedTests" : [
+ "MastodonUISnapshotTests\/testSmoke()",
+ "MastodonUISnapshotTests\/testSnapshotCompose()",
+ "MastodonUISnapshotTests\/testSnapshotHome()",
+ "MastodonUISnapshotTests\/testSnapshotProfile()",
+ "MastodonUISnapshotTests\/testSnapshotSearch()",
+ "MastodonUISnapshotTests\/testSnapshotServerRules()",
+ "MastodonUISnapshotTests\/testSnapshotThread()"
+ ],
+ "target" : {
+ "containerPath" : "container:Mastodon.xcodeproj",
+ "identifier" : "DB427DF225BAA00100D1B89D",
+ "name" : "MastodonUITests"
+ }
+ }
+ ],
+ "version" : 1
+}
diff --git a/CoreDataStack/CoreData.xcdatamodeld/.xccurrentversion b/CoreDataStack/CoreData.xcdatamodeld/.xccurrentversion
deleted file mode 100644
index 3d5e5761c..000000000
--- a/CoreDataStack/CoreData.xcdatamodeld/.xccurrentversion
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
- _XCCurrentVersionName
- CoreData 2.xcdatamodel
-
-
diff --git a/CoreDataStack/CoreData.xcdatamodeld/CoreData 2.xcdatamodel/contents b/CoreDataStack/CoreData.xcdatamodeld/CoreData 2.xcdatamodel/contents
deleted file mode 100644
index 6d576ca15..000000000
--- a/CoreDataStack/CoreData.xcdatamodeld/CoreData 2.xcdatamodel/contents
+++ /dev/null
@@ -1,306 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/CoreDataStack/CoreDataStack.h b/CoreDataStack/CoreDataStack.h
deleted file mode 100644
index 2e729ae7f..000000000
--- a/CoreDataStack/CoreDataStack.h
+++ /dev/null
@@ -1,18 +0,0 @@
-//
-// CoreDataStack.h
-// CoreDataStack
-//
-// Created by MainasuK Cirno on 2021/1/27.
-//
-
-#import
-
-//! Project version number for CoreDataStack.
-FOUNDATION_EXPORT double CoreDataStackVersionNumber;
-
-//! Project version string for CoreDataStack.
-FOUNDATION_EXPORT const unsigned char CoreDataStackVersionString[];
-
-// In this header, you should import all the public headers of your framework using statements like #import
-
-
diff --git a/CoreDataStack/CoreDataStack.swift b/CoreDataStack/CoreDataStack.swift
deleted file mode 100644
index 2dfa0c38c..000000000
--- a/CoreDataStack/CoreDataStack.swift
+++ /dev/null
@@ -1,128 +0,0 @@
-//
-// CoreDataStack.swift
-// CoreDataStack
-//
-// Created by Cirno MainasuK on 2021-1-27.
-//
-
-import os
-import Foundation
-import Combine
-import CoreData
-import AppShared
-
-public final class CoreDataStack {
-
- static let logger = Logger(subsystem: "CoreDataStack", category: "DB")
-
- private(set) var storeDescriptions: [NSPersistentStoreDescription]
- public let didFinishLoad = CurrentValueSubject(false)
-
- init(persistentStoreDescriptions storeDescriptions: [NSPersistentStoreDescription]) {
- self.storeDescriptions = storeDescriptions
- }
-
- public convenience init(databaseName: String = "shared") {
- let storeURL = URL.storeURL(for: AppName.groupID, databaseName: databaseName)
- let storeDescription = NSPersistentStoreDescription(url: storeURL)
- self.init(persistentStoreDescriptions: [storeDescription])
- }
-
- public private(set) lazy var persistentContainer: NSPersistentContainer = {
- /*
- The persistent container for the application. This implementation
- creates and returns a container, having loaded the store for the
- application to it. This property is optional since there are legitimate
- error conditions that could cause the creation of the store to fail.
- */
- let container = CoreDataStack.persistentContainer()
- CoreDataStack.configure(persistentContainer: container, storeDescriptions: storeDescriptions)
- CoreDataStack.load(persistentContainer: container) { [weak self] in
- guard let self = self else { return }
- self.didFinishLoad.value = true
- }
-
- return container
- }()
-
- static func persistentContainer() -> NSPersistentContainer {
- let bundles = [Bundle(for: Status.self)]
- guard let managedObjectModel = NSManagedObjectModel.mergedModel(from: bundles) else {
- fatalError("cannot locate bundles")
- }
-
- let container = NSPersistentContainer(name: "CoreDataStack", managedObjectModel: managedObjectModel)
- return container
- }
-
- static func configure(persistentContainer container: NSPersistentContainer, storeDescriptions: [NSPersistentStoreDescription]) {
- container.persistentStoreDescriptions = storeDescriptions
- }
-
- static func load(persistentContainer container: NSPersistentContainer, callback: @escaping () -> Void) {
- container.loadPersistentStores(completionHandler: { (storeDescription, error) in
- if let error = error as NSError? {
- // Replace this implementation with code to handle the error appropriately.
- // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
-
- /*
- Typical reasons for an error here include:
- * The parent directory does not exist, cannot be created, or disallows writing.
- * The persistent store is not accessible, due to permissions or data protection when the device is locked.
- * The device is out of space.
- * The store could not be migrated to the current model version.
- Check the error message to determine what the actual problem was.
- */
- if let reason = error.userInfo["reason"] as? String,
- (reason == "Can't find mapping model for migration" || reason == "Persistent store migration failed, missing mapping model.") {
- if let storeDescription = container.persistentStoreDescriptions.first, let url = storeDescription.url {
- try? container.persistentStoreCoordinator.destroyPersistentStore(at: url, ofType: NSSQLiteStoreType, options: nil)
- os_log("%{public}s[%{public}ld], %{public}s: cannot migrate model. rebuild database…", ((#file as NSString).lastPathComponent), #line, #function)
- } else {
- assertionFailure()
- }
- }
-
- fatalError("Unresolved error \(error), \(error.userInfo)")
- }
-
- container.viewContext.mergePolicy = NSMergePolicy.mergeByPropertyObjectTrump
-
- // it's looks like the remote notification only trigger when app enter and leave background
- container.viewContext.automaticallyMergesChangesFromParent = true
-
- os_log("%{public}s[%{public}ld], %{public}s: %s", ((#file as NSString).lastPathComponent), #line, #function, storeDescription.debugDescription)
-
- callback()
-
- #if DEBUG
- do {
- let storeURL = URL.storeURL(for: AppName.groupID, databaseName: "shared")
- let data = try Data(contentsOf: storeURL)
- let formatter = ByteCountFormatter()
- formatter.allowedUnits = [.useMB]
- formatter.countStyle = .file
- let size = formatter.string(fromByteCount: Int64(data.count))
- CoreDataStack.logger.log(level: .debug, "\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public): Database size: \(size)")
- } catch {
- CoreDataStack.logger.log(level: .debug, "\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public): Cannot get database size")
- }
- #endif
- })
- }
-
-}
-
-extension CoreDataStack {
-
- public func rebuild() {
- let oldStoreURL = persistentContainer.persistentStoreCoordinator.url(for: persistentContainer.persistentStoreCoordinator.persistentStores.first!)
- try! persistentContainer.persistentStoreCoordinator.destroyPersistentStore(at: oldStoreURL, ofType: NSSQLiteStoreType, options: nil)
-
- CoreDataStack.load(persistentContainer: persistentContainer) { [weak self] in
- guard let self = self else { return }
- self.didFinishLoad.value = true
- }
- }
-
-}
diff --git a/CoreDataStack/Entity/Attachment.swift b/CoreDataStack/Entity/Attachment.swift
deleted file mode 100644
index f3f5d262d..000000000
--- a/CoreDataStack/Entity/Attachment.swift
+++ /dev/null
@@ -1,126 +0,0 @@
-//
-// Attachment.swift
-// CoreDataStack
-//
-// Created by MainasuK Cirno on 2021-2-23.
-//
-
-import CoreData
-import Foundation
-
-public final class Attachment: NSManagedObject {
- public typealias ID = String
-
- @NSManaged public private(set) var id: ID
- @NSManaged public private(set) var domain: String
- @NSManaged public private(set) var typeRaw: String
- @NSManaged public private(set) var url: String
- @NSManaged public private(set) var previewURL: String?
-
- @NSManaged public private(set) var remoteURL: String?
- @NSManaged public private(set) var metaData: Data?
- @NSManaged public private(set) var textURL: String?
- @NSManaged public private(set) var descriptionString: String?
- @NSManaged public private(set) var blurhash: String?
-
- @NSManaged public private(set) var createdAt: Date
- @NSManaged public private(set) var updatedAt: Date
- @NSManaged public private(set) var index: NSNumber
-
- // many-to-one relationship
- @NSManaged public private(set) var status: Status?
-
-}
-
-public extension Attachment {
-
- override func awakeFromInsert() {
- super.awakeFromInsert()
- setPrimitiveValue(Date(), forKey: #keyPath(Attachment.createdAt))
- }
-
- @discardableResult
- static func insert(
- into context: NSManagedObjectContext,
- property: Property
- ) -> Attachment {
- let attachment: Attachment = context.insertObject()
-
- attachment.domain = property.domain
- attachment.index = property.index
-
- attachment.id = property.id
- attachment.typeRaw = property.typeRaw
- attachment.url = property.url
- attachment.previewURL = property.previewURL
-
- attachment.remoteURL = property.remoteURL
- attachment.metaData = property.metaData
- attachment.textURL = property.textURL
- attachment.descriptionString = property.descriptionString
- attachment.blurhash = property.blurhash
-
- attachment.updatedAt = property.networkDate
-
- return attachment
- }
-
- func didUpdate(at networkDate: Date) {
- self.updatedAt = networkDate
- }
-
-}
-
-public extension Attachment {
- struct Property {
- public let domain: String
- public let index: NSNumber
-
- public let id: ID
- public let typeRaw: String
- public let url: String
-
- public let previewURL: String?
- public let remoteURL: String?
- public let metaData: Data?
- public let textURL: String?
- public let descriptionString: String?
- public let blurhash: String?
-
- public let networkDate: Date
-
- public init(
- domain: String,
- index: Int,
- id: Attachment.ID,
- typeRaw: String,
- url: String,
- previewURL: String?,
- remoteURL: String?,
- metaData: Data?,
- textURL: String?,
- descriptionString: String?,
- blurhash: String?,
- networkDate: Date
- ) {
- self.domain = domain
- self.index = NSNumber(value: index)
- self.id = id
- self.typeRaw = typeRaw
- self.url = url
- self.previewURL = previewURL
- self.remoteURL = remoteURL
- self.metaData = metaData
- self.textURL = textURL
- self.descriptionString = descriptionString
- self.blurhash = blurhash
- self.networkDate = networkDate
- }
- }
-}
-
-extension Attachment: Managed {
- public static var defaultSortDescriptors: [NSSortDescriptor] {
- return [NSSortDescriptor(keyPath: \Attachment.createdAt, ascending: false)]
- }
-}
diff --git a/CoreDataStack/Entity/HomeTimelineIndex.swift b/CoreDataStack/Entity/HomeTimelineIndex.swift
deleted file mode 100644
index d52d0c3cd..000000000
--- a/CoreDataStack/Entity/HomeTimelineIndex.swift
+++ /dev/null
@@ -1,102 +0,0 @@
-//
-// HomeTimelineIndex.swift
-// CoreDataStack
-//
-// Created by MainasuK Cirno on 2021/1/27.
-//
-
-import Foundation
-import CoreData
-
-final public class HomeTimelineIndex: NSManagedObject {
-
- public typealias ID = String
- @NSManaged public private(set) var identifier: ID
- @NSManaged public private(set) var domain: String
- @NSManaged public private(set) var userID: String
-
- @NSManaged public private(set) var hasMore: Bool // default NO
-
- @NSManaged public private(set) var createdAt: Date
- @NSManaged public private(set) var deletedAt: Date?
-
-
- // many-to-one relationship
- @NSManaged public private(set) var status: Status
-
-}
-
-extension HomeTimelineIndex {
-
- @discardableResult
- public static func insert(
- into context: NSManagedObjectContext,
- property: Property,
- status: Status
- ) -> HomeTimelineIndex {
- let index: HomeTimelineIndex = context.insertObject()
-
- index.identifier = property.identifier
- index.domain = property.domain
- index.userID = property.userID
- index.createdAt = status.createdAt
-
- index.status = status
-
- return index
- }
-
- public func update(hasMore: Bool) {
- if self.hasMore != hasMore {
- self.hasMore = hasMore
- }
- }
-
- // internal method for status call
- func softDelete() {
- deletedAt = Date()
- }
-
-}
-
-extension HomeTimelineIndex {
- public struct Property {
- public let identifier: String
- public let domain: String
- public let userID: String
-
- public init(domain: String, userID: String) {
- self.identifier = UUID().uuidString + "@" + domain
- self.domain = domain
- self.userID = userID
- }
- }
-}
-
-extension HomeTimelineIndex: Managed {
- public static var defaultSortDescriptors: [NSSortDescriptor] {
- return [NSSortDescriptor(keyPath: \HomeTimelineIndex.createdAt, ascending: false)]
- }
-}
-extension HomeTimelineIndex {
-
- static func predicate(domain: String) -> NSPredicate {
- return NSPredicate(format: "%K == %@", #keyPath(HomeTimelineIndex.domain), domain)
- }
-
- static func predicate(userID: MastodonUser.ID) -> NSPredicate {
- return NSPredicate(format: "%K == %@", #keyPath(HomeTimelineIndex.userID), userID)
- }
-
- public static func predicate(domain: String, userID: MastodonUser.ID) -> NSPredicate {
- return NSCompoundPredicate(andPredicateWithSubpredicates: [
- predicate(domain: domain),
- predicate(userID: userID)
- ])
- }
-
- public static func notDeleted() -> NSPredicate {
- return NSPredicate(format: "%K == nil", #keyPath(HomeTimelineIndex.deletedAt))
- }
-
-}
diff --git a/CoreDataStack/Entity/MastodonUser.swift b/CoreDataStack/Entity/MastodonUser.swift
deleted file mode 100644
index 913aa1f16..000000000
--- a/CoreDataStack/Entity/MastodonUser.swift
+++ /dev/null
@@ -1,407 +0,0 @@
-//
-// MastodonUser.swift
-// CoreDataStack
-//
-// Created by MainasuK Cirno on 2021/1/27.
-//
-
-import CoreData
-import Foundation
-
-final public class MastodonUser: NSManagedObject {
-
- public typealias ID = String
-
- @NSManaged public private(set) var identifier: ID
- @NSManaged public private(set) var domain: String
-
- @NSManaged public private(set) var id: ID
- @NSManaged public private(set) var acct: String
- @NSManaged public private(set) var username: String
- @NSManaged public private(set) var displayName: String
- @NSManaged public private(set) var avatar: String
- @NSManaged public private(set) var avatarStatic: String?
- @NSManaged public private(set) var header: String
- @NSManaged public private(set) var headerStatic: String?
- @NSManaged public private(set) var note: String?
- @NSManaged public private(set) var url: String?
-
- @NSManaged public private(set) var emojisData: Data?
- @NSManaged public private(set) var fieldsData: Data?
-
- @NSManaged public private(set) var statusesCount: NSNumber
- @NSManaged public private(set) var followingCount: NSNumber
- @NSManaged public private(set) var followersCount: NSNumber
-
- @NSManaged public private(set) var locked: Bool
- @NSManaged public private(set) var bot: Bool
- @NSManaged public private(set) var suspended: Bool
-
- @NSManaged public private(set) var createdAt: Date
- @NSManaged public private(set) var updatedAt: Date
-
- // one-to-one relationship
- @NSManaged public private(set) var pinnedStatus: Status?
- @NSManaged public private(set) var mastodonAuthentication: MastodonAuthentication?
-
- // one-to-many relationship
- @NSManaged public private(set) var statuses: Set?
- @NSManaged public private(set) var notifications: Set?
- @NSManaged public private(set) var searchHistories: Set
-
- // many-to-many relationship
- @NSManaged public private(set) var favourite: Set?
- @NSManaged public private(set) var reblogged: Set?
- @NSManaged public private(set) var muted: Set?
- @NSManaged public private(set) var bookmarked: Set?
- @NSManaged public private(set) var votePollOptions: Set?
- @NSManaged public private(set) var votePolls: Set?
- // relationships
- @NSManaged public private(set) var following: Set?
- @NSManaged public private(set) var followingBy: Set?
- @NSManaged public private(set) var followRequested: Set?
- @NSManaged public private(set) var followRequestedBy: Set?
- @NSManaged public private(set) var muting: Set?
- @NSManaged public private(set) var mutingBy: Set?
- @NSManaged public private(set) var blocking: Set?
- @NSManaged public private(set) var blockingBy: Set?
- @NSManaged public private(set) var endorsed: Set?
- @NSManaged public private(set) var endorsedBy: Set?
- @NSManaged public private(set) var domainBlocking: Set?
- @NSManaged public private(set) var domainBlockingBy: Set?
-
-}
-
-extension MastodonUser {
-
- @discardableResult
- public static func insert(
- into context: NSManagedObjectContext,
- property: Property
- ) -> MastodonUser {
- let user: MastodonUser = context.insertObject()
-
- user.identifier = property.identifier
- user.domain = property.domain
-
- user.id = property.id
- user.acct = property.acct
- user.username = property.username
- user.displayName = property.displayName
- user.avatar = property.avatar
- user.avatarStatic = property.avatarStatic
- user.header = property.header
- user.headerStatic = property.headerStatic
- user.note = property.note
- user.url = property.url
- user.emojisData = property.emojisData
- user.fieldsData = property.fieldsData
-
- user.statusesCount = NSNumber(value: property.statusesCount)
- user.followingCount = NSNumber(value: property.followingCount)
- user.followersCount = NSNumber(value: property.followersCount)
-
- user.locked = property.locked
- user.bot = property.bot ?? false
- user.suspended = property.suspended ?? false
-
- // Mastodon do not provide relationship on the `Account`
- // Update relationship via attribute updating interface
-
- user.createdAt = property.createdAt
- user.updatedAt = property.networkDate
-
- return user
- }
-
-
- public func update(acct: String) {
- if self.acct != acct {
- self.acct = acct
- }
- }
- public func update(username: String) {
- if self.username != username {
- self.username = username
- }
- }
- public func update(displayName: String) {
- if self.displayName != displayName {
- self.displayName = displayName
- }
- }
- public func update(avatar: String) {
- if self.avatar != avatar {
- self.avatar = avatar
- }
- }
- public func update(avatarStatic: String?) {
- if self.avatarStatic != avatarStatic {
- self.avatarStatic = avatarStatic
- }
- }
- public func update(header: String) {
- if self.header != header {
- self.header = header
- }
- }
- public func update(headerStatic: String?) {
- if self.headerStatic != headerStatic {
- self.headerStatic = headerStatic
- }
- }
- public func update(note: String?) {
- if self.note != note {
- self.note = note
- }
- }
- public func update(url: String?) {
- if self.url != url {
- self.url = url
- }
- }
- public func update(emojisData: Data?) {
- if self.emojisData != emojisData {
- self.emojisData = emojisData
- }
- }
- public func update(fieldsData: Data?) {
- if self.fieldsData != fieldsData {
- self.fieldsData = fieldsData
- }
- }
- public func update(statusesCount: Int) {
- if self.statusesCount.intValue != statusesCount {
- self.statusesCount = NSNumber(value: statusesCount)
- }
- }
- public func update(followingCount: Int) {
- if self.followingCount.intValue != followingCount {
- self.followingCount = NSNumber(value: followingCount)
- }
- }
- public func update(followersCount: Int) {
- if self.followersCount.intValue != followersCount {
- self.followersCount = NSNumber(value: followersCount)
- }
- }
- public func update(locked: Bool) {
- if self.locked != locked {
- self.locked = locked
- }
- }
- public func update(bot: Bool) {
- if self.bot != bot {
- self.bot = bot
- }
- }
- public func update(suspended: Bool) {
- if self.suspended != suspended {
- self.suspended = suspended
- }
- }
-
- public func update(isFollowing: Bool, by mastodonUser: MastodonUser) {
- if isFollowing {
- if !(self.followingBy ?? Set()).contains(mastodonUser) {
- self.mutableSetValue(forKey: #keyPath(MastodonUser.followingBy)).add(mastodonUser)
- }
- } else {
- if (self.followingBy ?? Set()).contains(mastodonUser) {
- self.mutableSetValue(forKey: #keyPath(MastodonUser.followingBy)).remove(mastodonUser)
- }
- }
- }
- public func update(isFollowRequested: Bool, by mastodonUser: MastodonUser) {
- if isFollowRequested {
- if !(self.followRequestedBy ?? Set()).contains(mastodonUser) {
- self.mutableSetValue(forKey: #keyPath(MastodonUser.followRequestedBy)).add(mastodonUser)
- }
- } else {
- if (self.followRequestedBy ?? Set()).contains(mastodonUser) {
- self.mutableSetValue(forKey: #keyPath(MastodonUser.followRequestedBy)).remove(mastodonUser)
- }
- }
- }
- public func update(isMuting: Bool, by mastodonUser: MastodonUser) {
- if isMuting {
- if !(self.mutingBy ?? Set()).contains(mastodonUser) {
- self.mutableSetValue(forKey: #keyPath(MastodonUser.mutingBy)).add(mastodonUser)
- }
- } else {
- if (self.mutingBy ?? Set()).contains(mastodonUser) {
- self.mutableSetValue(forKey: #keyPath(MastodonUser.mutingBy)).remove(mastodonUser)
- }
- }
- }
- public func update(isBlocking: Bool, by mastodonUser: MastodonUser) {
- if isBlocking {
- if !(self.blockingBy ?? Set()).contains(mastodonUser) {
- self.mutableSetValue(forKey: #keyPath(MastodonUser.blockingBy)).add(mastodonUser)
- }
- } else {
- if (self.blockingBy ?? Set()).contains(mastodonUser) {
- self.mutableSetValue(forKey: #keyPath(MastodonUser.blockingBy)).remove(mastodonUser)
- }
- }
- }
- public func update(isEndorsed: Bool, by mastodonUser: MastodonUser) {
- if isEndorsed {
- if !(self.endorsedBy ?? Set()).contains(mastodonUser) {
- self.mutableSetValue(forKey: #keyPath(MastodonUser.endorsedBy)).add(mastodonUser)
- }
- } else {
- if (self.endorsedBy ?? Set()).contains(mastodonUser) {
- self.mutableSetValue(forKey: #keyPath(MastodonUser.endorsedBy)).remove(mastodonUser)
- }
- }
- }
- public func update(isDomainBlocking: Bool, by mastodonUser: MastodonUser) {
- if isDomainBlocking {
- if !(self.domainBlockingBy ?? Set()).contains(mastodonUser) {
- self.mutableSetValue(forKey: #keyPath(MastodonUser.domainBlockingBy)).add(mastodonUser)
- }
- } else {
- if (self.domainBlockingBy ?? Set()).contains(mastodonUser) {
- self.mutableSetValue(forKey: #keyPath(MastodonUser.domainBlockingBy)).remove(mastodonUser)
- }
- }
- }
-
- public func didUpdate(at networkDate: Date) {
- self.updatedAt = networkDate
- }
-
-}
-
-extension MastodonUser {
- public func findSearchHistory(domain: String, userID: MastodonUser.ID) -> SearchHistory? {
- return searchHistories.first { searchHistory in
- return searchHistory.domain == domain
- && searchHistory.userID == userID
- }
- }
-}
-
-extension MastodonUser {
- public struct Property {
- public let identifier: String
- public let domain: String
-
- public let id: String
- public let acct: String
- public let username: String
- public let displayName: String
- public let avatar: String
- public let avatarStatic: String?
- public let header: String
- public let headerStatic: String?
- public let note: String?
- public let url: String?
- public let emojisData: Data?
- public let fieldsData: Data?
- public let statusesCount: Int
- public let followingCount: Int
- public let followersCount: Int
- public let locked: Bool
- public let bot: Bool?
- public let suspended: Bool?
-
- public let createdAt: Date
- public let networkDate: Date
-
- public init(
- id: String,
- domain: String,
- acct: String,
- username: String,
- displayName: String,
- avatar: String,
- avatarStatic: String?,
- header: String,
- headerStatic: String?,
- note: String?,
- url: String?,
- emojisData: Data?,
- fieldsData: Data?,
- statusesCount: Int,
- followingCount: Int,
- followersCount: Int,
- locked: Bool,
- bot: Bool?,
- suspended: Bool?,
- createdAt: Date,
- networkDate: Date
- ) {
- self.identifier = id + "@" + domain
- self.domain = domain
- self.id = id
- self.acct = acct
- self.username = username
- self.displayName = displayName
- self.avatar = avatar
- self.avatarStatic = avatarStatic
- self.header = header
- self.headerStatic = headerStatic
- self.note = note
- self.url = url
- self.emojisData = emojisData
- self.fieldsData = fieldsData
- self.statusesCount = statusesCount
- self.followingCount = followingCount
- self.followersCount = followersCount
- self.locked = locked
- self.bot = bot
- self.suspended = suspended
- self.createdAt = createdAt
- self.networkDate = networkDate
- }
- }
-}
-
-extension MastodonUser: Managed {
- public static var defaultSortDescriptors: [NSSortDescriptor] {
- return [NSSortDescriptor(keyPath: \MastodonUser.createdAt, ascending: false)]
- }
-}
-
-extension MastodonUser {
-
- static func predicate(domain: String) -> NSPredicate {
- return NSPredicate(format: "%K == %@", #keyPath(MastodonUser.domain), domain)
- }
-
- static func predicate(id: String) -> NSPredicate {
- return NSPredicate(format: "%K == %@", #keyPath(MastodonUser.id), id)
- }
-
- public static func predicate(domain: String, id: String) -> NSPredicate {
- return NSCompoundPredicate(andPredicateWithSubpredicates: [
- MastodonUser.predicate(domain: domain),
- MastodonUser.predicate(id: id)
- ])
- }
-
- static func predicate(ids: [String]) -> NSPredicate {
- return NSPredicate(format: "%K IN %@", #keyPath(MastodonUser.id), ids)
- }
-
- public static func predicate(domain: String, ids: [String]) -> NSPredicate {
- return NSCompoundPredicate(andPredicateWithSubpredicates: [
- MastodonUser.predicate(domain: domain),
- MastodonUser.predicate(ids: ids)
- ])
- }
-
- static func predicate(username: String) -> NSPredicate {
- return NSPredicate(format: "%K == %@", #keyPath(MastodonUser.username), username)
- }
-
- public static func predicate(domain: String, username: String) -> NSPredicate {
- return NSCompoundPredicate(andPredicateWithSubpredicates: [
- MastodonUser.predicate(domain: domain),
- MastodonUser.predicate(username: username)
- ])
- }
-
-}
diff --git a/CoreDataStack/Entity/Mention.swift b/CoreDataStack/Entity/Mention.swift
deleted file mode 100644
index 864ca4948..000000000
--- a/CoreDataStack/Entity/Mention.swift
+++ /dev/null
@@ -1,71 +0,0 @@
-//
-// Mention.swift
-// CoreDataStack
-//
-// Created by sxiaojian on 2021/2/1.
-//
-
-import CoreData
-import Foundation
-
-public final class Mention: NSManagedObject {
- public typealias ID = UUID
-
- @NSManaged public private(set) var index: NSNumber
-
- @NSManaged public private(set) var identifier: ID
- @NSManaged public private(set) var id: String
- @NSManaged public private(set) var createAt: Date
-
- @NSManaged public private(set) var username: String
- @NSManaged public private(set) var acct: String
- @NSManaged public private(set) var url: String
-
- // many-to-one relationship
- @NSManaged public private(set) var status: Status
-}
-
-public extension Mention {
- override func awakeFromInsert() {
- super.awakeFromInsert()
-
- setPrimitiveValue(UUID(), forKey: #keyPath(Mention.identifier))
- }
-
- @discardableResult
- static func insert(
- into context: NSManagedObjectContext,
- property: Property,
- index: Int
- ) -> Mention {
- let mention: Mention = context.insertObject()
- mention.index = NSNumber(value: index)
- mention.id = property.id
- mention.username = property.username
- mention.acct = property.acct
- mention.url = property.url
- return mention
- }
-}
-
-public extension Mention {
- struct Property {
- public let id: String
- public let username: String
- public let acct: String
- public let url: String
-
- public init(id: String, username: String, acct: String, url: String) {
- self.id = id
- self.username = username
- self.acct = acct
- self.url = url
- }
- }
-}
-
-extension Mention: Managed {
- public static var defaultSortDescriptors: [NSSortDescriptor] {
- return [NSSortDescriptor(keyPath: \Mention.createAt, ascending: false)]
- }
-}
diff --git a/CoreDataStack/Entity/Notification.swift b/CoreDataStack/Entity/Notification.swift
deleted file mode 100644
index 04f8e9fdf..000000000
--- a/CoreDataStack/Entity/Notification.swift
+++ /dev/null
@@ -1,115 +0,0 @@
-//
-// MastodonNotification.swift
-// CoreDataStack
-//
-// Created by sxiaojian on 2021/4/13.
-//
-
-import Foundation
-import CoreData
-
-public final class MastodonNotification: NSManagedObject {
- public typealias ID = UUID
- @NSManaged public private(set) var identifier: ID
- @NSManaged public private(set) var id: String
- @NSManaged public private(set) var createAt: Date
- @NSManaged public private(set) var updatedAt: Date
- @NSManaged public private(set) var typeRaw: String
- @NSManaged public private(set) var account: MastodonUser
- @NSManaged public private(set) var status: Status?
-
- @NSManaged public private(set) var domain: String
- @NSManaged public private(set) var userID: String
-}
-
-extension MastodonNotification {
- public override func awakeFromInsert() {
- super.awakeFromInsert()
- setPrimitiveValue(UUID(), forKey: #keyPath(MastodonNotification.identifier))
- }
-}
-
-public extension MastodonNotification {
- @discardableResult
- static func insert(
- into context: NSManagedObjectContext,
- domain: String,
- userID: String,
- networkDate: Date,
- property: Property
- ) -> MastodonNotification {
- let notification: MastodonNotification = context.insertObject()
- notification.id = property.id
- notification.createAt = property.createdAt
- notification.updatedAt = networkDate
- notification.typeRaw = property.typeRaw
- notification.account = property.account
- notification.status = property.status
- notification.domain = domain
- notification.userID = userID
- return notification
- }
-}
-
-public extension MastodonNotification {
- struct Property {
- public init(id: String,
- typeRaw: String,
- account: MastodonUser,
- status: Status?,
- createdAt: Date
- ) {
- self.id = id
- self.typeRaw = typeRaw
- self.account = account
- self.status = status
- self.createdAt = createdAt
- }
-
- public let id: String
- public let typeRaw: String
- public let account: MastodonUser
- public let status: Status?
- public let createdAt: Date
- }
-}
-
-extension MastodonNotification {
- static func predicate(domain: String) -> NSPredicate {
- return NSPredicate(format: "%K == %@", #keyPath(MastodonNotification.domain), domain)
- }
-
- static func predicate(userID: String) -> NSPredicate {
- return NSPredicate(format: "%K == %@", #keyPath(MastodonNotification.userID), userID)
- }
-
- static func predicate(typeRaw: String) -> NSPredicate {
- return NSPredicate(format: "%K == %@", #keyPath(MastodonNotification.typeRaw), typeRaw)
- }
-
- public static func predicate(domain: String, userID: String, typeRaw: String? = nil) -> NSPredicate {
- if let typeRaw = typeRaw {
- return NSCompoundPredicate(andPredicateWithSubpredicates: [
- MastodonNotification.predicate(domain: domain),
- MastodonNotification.predicate(typeRaw: typeRaw),
- MastodonNotification.predicate(userID: userID),
- ])
- } else {
- return NSCompoundPredicate(andPredicateWithSubpredicates: [
- MastodonNotification.predicate(domain: domain),
- MastodonNotification.predicate(userID: userID)
- ])
- }
- }
-
- public static func predicate(validTypesRaws types: [String]) -> NSPredicate {
- return NSPredicate(format: "%K IN %@", #keyPath(MastodonNotification.typeRaw), types)
- }
-
-}
-
-extension MastodonNotification: Managed {
- public static var defaultSortDescriptors: [NSSortDescriptor] {
- return [NSSortDescriptor(keyPath: \MastodonNotification.createAt, ascending: false)]
- }
-}
diff --git a/CoreDataStack/Entity/Poll.swift b/CoreDataStack/Entity/Poll.swift
deleted file mode 100644
index 3ab48b444..000000000
--- a/CoreDataStack/Entity/Poll.swift
+++ /dev/null
@@ -1,145 +0,0 @@
-//
-// Poll.swift
-// CoreDataStack
-//
-// Created by MainasuK Cirno on 2021-3-2.
-//
-
-import Foundation
-import CoreData
-
-public final class Poll: NSManagedObject {
- public typealias ID = String
-
- @NSManaged public private(set) var id: ID
- @NSManaged public private(set) var expiresAt: Date?
- @NSManaged public private(set) var expired: Bool
- @NSManaged public private(set) var multiple: Bool
- @NSManaged public private(set) var votesCount: NSNumber
- @NSManaged public private(set) var votersCount: NSNumber?
-
- @NSManaged public private(set) var createdAt: Date
- @NSManaged public private(set) var updatedAt: Date
-
- // one-to-one relationship
- @NSManaged public private(set) var status: Status
-
- // one-to-many relationship
- @NSManaged public private(set) var options: Set
-
- // many-to-many relationship
- @NSManaged public private(set) var votedBy: Set?
-}
-
-extension Poll {
-
- public override func awakeFromInsert() {
- super.awakeFromInsert()
- setPrimitiveValue(Date(), forKey: #keyPath(Poll.createdAt))
- }
-
- @discardableResult
- public static func insert(
- into context: NSManagedObjectContext,
- property: Property,
- votedBy: MastodonUser?,
- options: [PollOption]
- ) -> Poll {
- let poll: Poll = context.insertObject()
-
- poll.id = property.id
- poll.expiresAt = property.expiresAt
- poll.expired = property.expired
- poll.multiple = property.multiple
- poll.votesCount = property.votesCount
- poll.votersCount = property.votersCount
-
-
- poll.updatedAt = property.networkDate
-
- if let votedBy = votedBy {
- poll.mutableSetValue(forKey: #keyPath(Poll.votedBy)).add(votedBy)
- }
- poll.mutableSetValue(forKey: #keyPath(Poll.options)).addObjects(from: options)
-
- return poll
- }
-
- public func update(expiresAt: Date?) {
- if self.expiresAt != expiresAt {
- self.expiresAt = expiresAt
- }
- }
-
- public func update(expired: Bool) {
- if self.expired != expired {
- self.expired = expired
- }
- }
-
- public func update(votesCount: Int) {
- if self.votesCount.intValue != votesCount {
- self.votesCount = NSNumber(value: votesCount)
- }
- }
-
- public func update(votersCount: Int?) {
- if self.votersCount?.intValue != votersCount {
- self.votersCount = votersCount.flatMap { NSNumber(value: $0) }
- }
- }
-
- public func update(voted: Bool, by: MastodonUser) {
- if voted {
- if !(votedBy ?? Set()).contains(by) {
- mutableSetValue(forKey: #keyPath(Poll.votedBy)).add(by)
- }
- } else {
- if (votedBy ?? Set()).contains(by) {
- mutableSetValue(forKey: #keyPath(Poll.votedBy)).remove(by)
- }
- }
- }
-
- public func didUpdate(at networkDate: Date) {
- self.updatedAt = networkDate
- }
-
-}
-
-extension Poll {
- public struct Property {
- public let id: ID
- public let expiresAt: Date?
- public let expired: Bool
- public let multiple: Bool
- public let votesCount: NSNumber
- public let votersCount: NSNumber?
-
- public let networkDate: Date
-
- public init(
- id: Poll.ID,
- expiresAt: Date?,
- expired: Bool,
- multiple: Bool,
- votesCount: Int,
- votersCount: Int?,
- networkDate: Date
- ) {
- self.id = id
- self.expiresAt = expiresAt
- self.expired = expired
- self.multiple = multiple
- self.votesCount = NSNumber(value: votesCount)
- self.votersCount = votersCount.flatMap { NSNumber(value: $0) }
- self.networkDate = networkDate
- }
- }
-}
-
-extension Poll: Managed {
- public static var defaultSortDescriptors: [NSSortDescriptor] {
- return [NSSortDescriptor(keyPath: \Poll.createdAt, ascending: false)]
- }
-}
diff --git a/CoreDataStack/Entity/PollOption.swift b/CoreDataStack/Entity/PollOption.swift
deleted file mode 100644
index 8917a7533..000000000
--- a/CoreDataStack/Entity/PollOption.swift
+++ /dev/null
@@ -1,98 +0,0 @@
-//
-// PollOption.swift
-// CoreDataStack
-//
-// Created by MainasuK Cirno on 2021-3-2.
-//
-
-import Foundation
-import CoreData
-
-public final class PollOption: NSManagedObject {
- @NSManaged public private(set) var index: NSNumber
- @NSManaged public private(set) var title: String
- @NSManaged public private(set) var votesCount: NSNumber?
-
- @NSManaged public private(set) var createdAt: Date
- @NSManaged public private(set) var updatedAt: Date
-
- // many-to-one relationship
- @NSManaged public private(set) var poll: Poll
-
- // many-to-many relationship
- @NSManaged public private(set) var votedBy: Set?
-}
-
-extension PollOption {
-
- public override func awakeFromInsert() {
- super.awakeFromInsert()
- setPrimitiveValue(Date(), forKey: #keyPath(PollOption.createdAt))
- }
-
- @discardableResult
- public static func insert(
- into context: NSManagedObjectContext,
- property: Property,
- votedBy: MastodonUser?
- ) -> PollOption {
- let option: PollOption = context.insertObject()
-
- option.index = property.index
- option.title = property.title
- option.votesCount = property.votesCount
- option.updatedAt = property.networkDate
-
- if let votedBy = votedBy {
- option.mutableSetValue(forKey: #keyPath(PollOption.votedBy)).add(votedBy)
- }
-
- return option
- }
-
- public func update(votesCount: Int?) {
- if self.votesCount?.intValue != votesCount {
- self.votesCount = votesCount.flatMap { NSNumber(value: $0) }
- }
- }
-
- public func update(voted: Bool, by: MastodonUser) {
- if voted {
- if !(self.votedBy ?? Set()).contains(by) {
- self.mutableSetValue(forKey: #keyPath(PollOption.votedBy)).add(by)
- }
- } else {
- if (self.votedBy ?? Set()).contains(by) {
- self.mutableSetValue(forKey: #keyPath(PollOption.votedBy)).remove(by)
- }
- }
- }
-
- public func didUpdate(at networkDate: Date) {
- self.updatedAt = networkDate
- }
-
-}
-
-extension PollOption {
- public struct Property {
- public let index: NSNumber
- public let title: String
- public let votesCount: NSNumber?
-
- public let networkDate: Date
-
- public init(index: Int, title: String, votesCount: Int?, networkDate: Date) {
- self.index = NSNumber(value: index)
- self.title = title
- self.votesCount = votesCount.flatMap { NSNumber(value: $0) }
- self.networkDate = networkDate
- }
- }
-}
-
-extension PollOption: Managed {
- public static var defaultSortDescriptors: [NSSortDescriptor] {
- return [NSSortDescriptor(keyPath: \PollOption.createdAt, ascending: false)]
- }
-}
diff --git a/CoreDataStack/Entity/SearchHistory.swift b/CoreDataStack/Entity/SearchHistory.swift
deleted file mode 100644
index 05e441906..000000000
--- a/CoreDataStack/Entity/SearchHistory.swift
+++ /dev/null
@@ -1,118 +0,0 @@
-//
-// SearchHistory.swift
-// CoreDataStack
-//
-// Created by sxiaojian on 2021/4/7.
-//
-
-import Foundation
-import CoreData
-
-public final class SearchHistory: NSManagedObject {
- public typealias ID = UUID
- @NSManaged public private(set) var identifier: ID
- @NSManaged public private(set) var domain: String
- @NSManaged public private(set) var userID: MastodonUser.ID
- @NSManaged public private(set) var createAt: Date
- @NSManaged public private(set) var updatedAt: Date
-
- // many-to-one relationship
- @NSManaged public private(set) var account: MastodonUser?
- @NSManaged public private(set) var hashtag: Tag?
- @NSManaged public private(set) var status: Status?
-
-}
-
-extension SearchHistory {
- public override func awakeFromInsert() {
- super.awakeFromInsert()
- setPrimitiveValue(UUID(), forKey: #keyPath(SearchHistory.identifier))
- setPrimitiveValue(Date(), forKey: #keyPath(SearchHistory.createAt))
- setPrimitiveValue(Date(), forKey: #keyPath(SearchHistory.updatedAt))
- }
-
-// public override func willSave() {
-// super.willSave()
-// setPrimitiveValue(Date(), forKey: #keyPath(SearchHistory.updatedAt))
-// }
-
- @discardableResult
- public static func insert(
- into context: NSManagedObjectContext,
- property: Property,
- account: MastodonUser
- ) -> SearchHistory {
- let searchHistory: SearchHistory = context.insertObject()
- searchHistory.domain = property.domain
- searchHistory.userID = property.userID
- searchHistory.account = account
- return searchHistory
- }
-
- @discardableResult
- public static func insert(
- into context: NSManagedObjectContext,
- property: Property,
- hashtag: Tag
- ) -> SearchHistory {
- let searchHistory: SearchHistory = context.insertObject()
- searchHistory.domain = property.domain
- searchHistory.userID = property.userID
- searchHistory.hashtag = hashtag
- return searchHistory
- }
-
- @discardableResult
- public static func insert(
- into context: NSManagedObjectContext,
- property: Property,
- status: Status
- ) -> SearchHistory {
- let searchHistory: SearchHistory = context.insertObject()
- searchHistory.domain = property.domain
- searchHistory.userID = property.userID
- searchHistory.status = status
- return searchHistory
- }
-}
-
-extension SearchHistory {
- public func update(updatedAt: Date) {
- setValue(updatedAt, forKey: #keyPath(SearchHistory.updatedAt))
- }
-}
-
-extension SearchHistory {
- public struct Property {
- public let domain: String
- public let userID: MastodonUser.ID
-
- public init(domain: String, userID: MastodonUser.ID) {
- self.domain = domain
- self.userID = userID
- }
- }
-}
-
-extension SearchHistory: Managed {
- public static var defaultSortDescriptors: [NSSortDescriptor] {
- return [NSSortDescriptor(keyPath: \SearchHistory.updatedAt, ascending: false)]
- }
-}
-
-extension SearchHistory {
- static func predicate(domain: String) -> NSPredicate {
- return NSPredicate(format: "%K == %@", #keyPath(SearchHistory.domain), domain)
- }
-
- static func predicate(userID: String) -> NSPredicate {
- return NSPredicate(format: "%K == %@", #keyPath(SearchHistory.userID), userID)
- }
-
- public static func predicate(domain: String, userID: String) -> NSPredicate {
- return NSCompoundPredicate(andPredicateWithSubpredicates: [
- predicate(domain: domain),
- predicate(userID: userID)
- ])
- }
-}
diff --git a/CoreDataStack/Entity/Status.swift b/CoreDataStack/Entity/Status.swift
deleted file mode 100644
index ee168e418..000000000
--- a/CoreDataStack/Entity/Status.swift
+++ /dev/null
@@ -1,355 +0,0 @@
-//
-// Status.swift
-// CoreDataStack
-//
-// Created by MainasuK Cirno on 2021/1/27.
-//
-
-import CoreData
-import Foundation
-
-public final class Status: NSManagedObject {
- public typealias ID = String
-
- @NSManaged public private(set) var identifier: ID
- @NSManaged public private(set) var domain: String
-
- @NSManaged public private(set) var id: String
- @NSManaged public private(set) var uri: String
- @NSManaged public private(set) var createdAt: Date
- @NSManaged public private(set) var content: String
-
- @NSManaged public private(set) var visibility: String?
- @NSManaged public private(set) var sensitive: Bool
- @NSManaged public private(set) var spoilerText: String?
- @NSManaged public private(set) var application: Application?
-
- @NSManaged public private(set) var emojisData: Data?
-
- // Informational
- @NSManaged public private(set) var reblogsCount: NSNumber
- @NSManaged public private(set) var favouritesCount: NSNumber
- @NSManaged public private(set) var repliesCount: NSNumber?
-
- @NSManaged public private(set) var url: String?
- @NSManaged public private(set) var inReplyToID: Status.ID?
- @NSManaged public private(set) var inReplyToAccountID: MastodonUser.ID?
-
- @NSManaged public private(set) var language: String? // (ISO 639 Part 1 two-letter language code)
- @NSManaged public private(set) var text: String?
-
- // many-to-one relationship
- @NSManaged public private(set) var author: MastodonUser
- @NSManaged public private(set) var reblog: Status?
- @NSManaged public private(set) var replyTo: Status?
-
- // many-to-many relationship
- @NSManaged public private(set) var favouritedBy: Set?
- @NSManaged public private(set) var rebloggedBy: Set?
- @NSManaged public private(set) var mutedBy: Set?
- @NSManaged public private(set) var bookmarkedBy: Set?
-
- // one-to-one relationship
- @NSManaged public private(set) var pinnedBy: MastodonUser?
- @NSManaged public private(set) var poll: Poll?
-
- // one-to-many relationship
- @NSManaged public private(set) var reblogFrom: Set?
- @NSManaged public private(set) var mentions: Set?
- @NSManaged public private(set) var homeTimelineIndexes: Set?
- @NSManaged public private(set) var mediaAttachments: Set?
- @NSManaged public private(set) var replyFrom: Set?
-
- @NSManaged public private(set) var inNotifications: Set?
-
- @NSManaged public private(set) var searchHistories: Set
-
- @NSManaged public private(set) var updatedAt: Date
- @NSManaged public private(set) var deletedAt: Date?
- @NSManaged public private(set) var revealedAt: Date?
-}
-
-extension Status {
-
- @discardableResult
- public static func insert(
- into context: NSManagedObjectContext,
- property: Property,
- author: MastodonUser,
- reblog: Status?,
- application: Application?,
- replyTo: Status?,
- poll: Poll?,
- mentions: [Mention]?,
- mediaAttachments: [Attachment]?,
- favouritedBy: MastodonUser?,
- rebloggedBy: MastodonUser?,
- mutedBy: MastodonUser?,
- bookmarkedBy: MastodonUser?,
- pinnedBy: MastodonUser?
- ) -> Status {
- let status: Status = context.insertObject()
-
- status.identifier = property.identifier
- status.domain = property.domain
-
- status.id = property.id
- status.uri = property.uri
- status.createdAt = property.createdAt
- status.content = property.content
-
- status.visibility = property.visibility
- status.sensitive = property.sensitive
- status.spoilerText = property.spoilerText
- status.application = application
-
- status.emojisData = property.emojisData
-
- status.reblogsCount = property.reblogsCount
- status.favouritesCount = property.favouritesCount
- status.repliesCount = property.repliesCount
-
- status.url = property.url
- status.inReplyToID = property.inReplyToID
- status.inReplyToAccountID = property.inReplyToAccountID
-
- status.language = property.language
- status.text = property.text
-
- status.author = author
- status.reblog = reblog
-
- status.pinnedBy = pinnedBy
- status.poll = poll
-
- if let mentions = mentions {
- status.mutableSetValue(forKey: #keyPath(Status.mentions)).addObjects(from: mentions)
- }
- if let mediaAttachments = mediaAttachments {
- status.mutableSetValue(forKey: #keyPath(Status.mediaAttachments)).addObjects(from: mediaAttachments)
- }
- if let favouritedBy = favouritedBy {
- status.mutableSetValue(forKey: #keyPath(Status.favouritedBy)).add(favouritedBy)
- }
- if let rebloggedBy = rebloggedBy {
- status.mutableSetValue(forKey: #keyPath(Status.rebloggedBy)).add(rebloggedBy)
- }
- if let mutedBy = mutedBy {
- status.mutableSetValue(forKey: #keyPath(Status.mutedBy)).add(mutedBy)
- }
- if let bookmarkedBy = bookmarkedBy {
- status.mutableSetValue(forKey: #keyPath(Status.bookmarkedBy)).add(bookmarkedBy)
- }
-
- status.updatedAt = property.networkDate
-
- return status
- }
-
- public func update(emojisData: Data?) {
- if self.emojisData != emojisData {
- self.emojisData = emojisData
- }
- }
-
- public func update(reblogsCount: NSNumber) {
- if self.reblogsCount.intValue != reblogsCount.intValue {
- self.reblogsCount = reblogsCount
- }
- }
-
- public func update(favouritesCount: NSNumber) {
- if self.favouritesCount.intValue != favouritesCount.intValue {
- self.favouritesCount = favouritesCount
- }
- }
-
- public func update(repliesCount: NSNumber?) {
- guard let count = repliesCount else {
- return
- }
- if self.repliesCount?.intValue != count.intValue {
- self.repliesCount = repliesCount
- }
- }
-
- public func update(replyTo: Status?) {
- if self.replyTo != replyTo {
- self.replyTo = replyTo
- }
- }
-
- public func update(liked: Bool, by mastodonUser: MastodonUser) {
- if liked {
- if !(self.favouritedBy ?? Set()).contains(mastodonUser) {
- self.mutableSetValue(forKey: #keyPath(Status.favouritedBy)).add(mastodonUser)
- }
- } else {
- if (self.favouritedBy ?? Set()).contains(mastodonUser) {
- self.mutableSetValue(forKey: #keyPath(Status.favouritedBy)).remove(mastodonUser)
- }
- }
- }
-
- public func update(reblogged: Bool, by mastodonUser: MastodonUser) {
- if reblogged {
- if !(self.rebloggedBy ?? Set()).contains(mastodonUser) {
- self.mutableSetValue(forKey: #keyPath(Status.rebloggedBy)).add(mastodonUser)
- }
- } else {
- if (self.rebloggedBy ?? Set()).contains(mastodonUser) {
- self.mutableSetValue(forKey: #keyPath(Status.rebloggedBy)).remove(mastodonUser)
- }
- }
- }
-
- public func update(muted: Bool, by mastodonUser: MastodonUser) {
- if muted {
- if !(self.mutedBy ?? Set()).contains(mastodonUser) {
- self.mutableSetValue(forKey: #keyPath(Status.mutedBy)).add(mastodonUser)
- }
- } else {
- if (self.mutedBy ?? Set()).contains(mastodonUser) {
- self.mutableSetValue(forKey: #keyPath(Status.mutedBy)).remove(mastodonUser)
- }
- }
- }
-
- public func update(bookmarked: Bool, by mastodonUser: MastodonUser) {
- if bookmarked {
- if !(self.bookmarkedBy ?? Set()).contains(mastodonUser) {
- self.mutableSetValue(forKey: #keyPath(Status.bookmarkedBy)).add(mastodonUser)
- }
- } else {
- if (self.bookmarkedBy ?? Set()).contains(mastodonUser) {
- self.mutableSetValue(forKey: #keyPath(Status.bookmarkedBy)).remove(mastodonUser)
- }
- }
- }
-
- public func update(isReveal: Bool) {
- revealedAt = isReveal ? Date() : nil
- }
-
- public func didUpdate(at networkDate: Date) {
- self.updatedAt = networkDate
- }
-
-}
-
-extension Status {
- public struct Property {
-
- public let identifier: ID
- public let domain: String
-
- public let id: String
- public let uri: String
- public let createdAt: Date
- public let content: String
-
- public let visibility: String?
- public let sensitive: Bool
- public let spoilerText: String?
-
- public let emojisData: Data?
-
- public let reblogsCount: NSNumber
- public let favouritesCount: NSNumber
- public let repliesCount: NSNumber?
-
- public let url: String?
- public let inReplyToID: Status.ID?
- public let inReplyToAccountID: MastodonUser.ID?
- public let language: String? // (ISO 639 Part @1 two-letter language code)
- public let text: String?
-
- public let networkDate: Date
-
- public init(
- domain: String,
- id: String,
- uri: String,
- createdAt: Date,
- content: String,
- visibility: String?,
- sensitive: Bool,
- spoilerText: String?,
- emojisData: Data?,
- reblogsCount: NSNumber,
- favouritesCount: NSNumber,
- repliesCount: NSNumber?,
- url: String?,
- inReplyToID: Status.ID?,
- inReplyToAccountID: MastodonUser.ID?,
- language: String?,
- text: String?,
- networkDate: Date
- ) {
- self.identifier = id + "@" + domain
- self.domain = domain
- self.id = id
- self.uri = uri
- self.createdAt = createdAt
- self.content = content
- self.visibility = visibility
- self.sensitive = sensitive
- self.spoilerText = spoilerText
- self.emojisData = emojisData
- self.reblogsCount = reblogsCount
- self.favouritesCount = favouritesCount
- self.repliesCount = repliesCount
- self.url = url
- self.inReplyToID = inReplyToID
- self.inReplyToAccountID = inReplyToAccountID
- self.language = language
- self.text = text
- self.networkDate = networkDate
- }
-
- }
-}
-
-extension Status: Managed {
- public static var defaultSortDescriptors: [NSSortDescriptor] {
- return [NSSortDescriptor(keyPath: \Status.createdAt, ascending: false)]
- }
-}
-
-extension Status {
-
- static func predicate(domain: String) -> NSPredicate {
- return NSPredicate(format: "%K == %@", #keyPath(Status.domain), domain)
- }
-
- static func predicate(id: String) -> NSPredicate {
- return NSPredicate(format: "%K == %@", #keyPath(Status.id), id)
- }
-
- public static func predicate(domain: String, id: String) -> NSPredicate {
- return NSCompoundPredicate(andPredicateWithSubpredicates: [
- predicate(domain: domain),
- predicate(id: id)
- ])
- }
-
- static func predicate(ids: [String]) -> NSPredicate {
- return NSPredicate(format: "%K IN %@", #keyPath(Status.id), ids)
- }
-
- public static func predicate(domain: String, ids: [String]) -> NSPredicate {
- return NSCompoundPredicate(andPredicateWithSubpredicates: [
- predicate(domain: domain),
- predicate(ids: ids)
- ])
- }
-
- public static func notDeleted() -> NSPredicate {
- return NSPredicate(format: "%K == nil", #keyPath(Status.deletedAt))
- }
-
- public static func deleted() -> NSPredicate {
- return NSPredicate(format: "%K != nil", #keyPath(Status.deletedAt))
- }
-
-}
diff --git a/CoreDataStack/Entity/Tag.swift b/CoreDataStack/Entity/Tag.swift
deleted file mode 100644
index fa9e098de..000000000
--- a/CoreDataStack/Entity/Tag.swift
+++ /dev/null
@@ -1,112 +0,0 @@
-//
-// Tag.swift
-// CoreDataStack
-//
-// Created by sxiaojian on 2021/2/1.
-//
-
-import CoreData
-import Foundation
-
-public final class Tag: NSManagedObject {
- public typealias ID = UUID
- @NSManaged public private(set) var identifier: ID
- @NSManaged public private(set) var createAt: Date
- @NSManaged public private(set) var updatedAt: Date
-
- @NSManaged public private(set) var name: String
- @NSManaged public private(set) var url: String
-
- // one-to-one relationship
-
- // many-to-many relationship
-
- // one-to-many relationship
- @NSManaged public private(set) var histories: Set?
- @NSManaged public private(set) var searchHistories: Set
-}
-
-public extension Tag {
- override func awakeFromInsert() {
- super.awakeFromInsert()
- setPrimitiveValue(UUID(), forKey: #keyPath(Tag.identifier))
- setPrimitiveValue(Date(), forKey: #keyPath(Tag.createAt))
- setPrimitiveValue(Date(), forKey: #keyPath(Tag.updatedAt))
- }
-
- override func willSave() {
- super.willSave()
- setPrimitiveValue(Date(), forKey: #keyPath(Tag.updatedAt))
- }
-
- @discardableResult
- static func insert(
- into context: NSManagedObjectContext,
- property: Property
- ) -> Tag {
- let tag: Tag = context.insertObject()
- tag.name = property.name
- tag.url = property.url
- if let histories = property.histories {
- tag.mutableSetValue(forKey: #keyPath(Tag.histories)).addObjects(from: histories)
- }
- return tag
- }
-}
-
-extension Tag {
- public func findSearchHistory(domain: String, userID: MastodonUser.ID) -> SearchHistory? {
- return searchHistories.first { searchHistory in
- return searchHistory.domain == domain
- && searchHistory.userID == userID
- }
- }
-}
-
-public extension Tag {
- struct Property {
- public let name: String
- public let url: String
- public let histories: [History]?
-
- public init(name: String, url: String, histories: [History]?) {
- self.name = name
- self.url = url
- self.histories = histories
- }
- }
-}
-
-public extension Tag {
- func updateHistory(index: Int, day: Date, uses: String, account: String) {
- guard let histories = self.histories?.sorted(by: {
- $0.createAt.compare($1.createAt) == .orderedAscending
- }) else { return }
- let history = histories[index]
- history.update(day: day)
- history.update(uses: uses)
- history.update(accounts: account)
- }
-
- func appendHistory(history: History) {
- self.mutableSetValue(forKeyPath: #keyPath(Tag.histories)).add(history)
- }
-
- func update(url: String) {
- if self.url != url {
- self.url = url
- }
- }
-}
-
-extension Tag: Managed {
- public static var defaultSortDescriptors: [NSSortDescriptor] {
- [NSSortDescriptor(keyPath: \Tag.createAt, ascending: false)]
- }
-}
-
-public extension Tag {
- static func predicate(name: String) -> NSPredicate {
- NSPredicate(format: "%K == %@", #keyPath(Tag.name), name)
- }
-}
diff --git a/CoreDataStack/Extension/NSManagedObjectContext.swift b/CoreDataStack/Extension/NSManagedObjectContext.swift
deleted file mode 100644
index e3f6600c7..000000000
--- a/CoreDataStack/Extension/NSManagedObjectContext.swift
+++ /dev/null
@@ -1,49 +0,0 @@
-//
-// NSManagedObjectContext.swift
-// CoreDataStack
-//
-// Created by Cirno MainasuK on 2020-8-10.
-//
-
-import os
-import Foundation
-import Combine
-import CoreData
-
-extension NSManagedObjectContext {
- public func insert() -> T where T: Managed {
- guard let object = NSEntityDescription.insertNewObject(forEntityName: T.entityName, into: self) as? T else {
- fatalError("cannot insert object: \(T.self)")
- }
-
- return object
- }
-
- public func saveOrRollback() throws {
- do {
- guard hasChanges else {
- return
- }
- try save()
- } catch {
- rollback()
-
- os_log("%{public}s[%{public}ld], %{public}s: %s", ((#file as NSString).lastPathComponent), #line, #function, error.localizedDescription)
- throw error
- }
- }
-
- public func performChanges(block: @escaping () -> Void) -> Future, Never> {
- Future { promise in
- self.perform {
- block()
- do {
- try self.saveOrRollback()
- promise(.success(Result.success(())))
- } catch {
- promise(.success(Result.failure(error)))
- }
- }
- }
- }
-}
diff --git a/CoreDataStack/Info.plist b/CoreDataStack/Info.plist
deleted file mode 100644
index 9fe845c60..000000000
--- a/CoreDataStack/Info.plist
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
- CFBundleDevelopmentRegion
- $(DEVELOPMENT_LANGUAGE)
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIdentifier
- $(PRODUCT_BUNDLE_IDENTIFIER)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- $(PRODUCT_NAME)
- CFBundlePackageType
- $(PRODUCT_BUNDLE_PACKAGE_TYPE)
- CFBundleShortVersionString
- 1.2.0
- CFBundleVersion
- 88
-
-
diff --git a/CoreDataStack/Stack/ManagedObjectContextObjectsDidChange.swift b/CoreDataStack/Stack/ManagedObjectContextObjectsDidChange.swift
deleted file mode 100644
index 980a2a5e1..000000000
--- a/CoreDataStack/Stack/ManagedObjectContextObjectsDidChange.swift
+++ /dev/null
@@ -1,62 +0,0 @@
-//
-// ManagedObjectContextObjectsDidChange.swift
-// CoreDataStack
-//
-// Created by sxiaojian on 2021/2/8.
-//
-
-import Foundation
-import CoreData
-
-public struct ManagedObjectContextObjectsDidChangeNotification {
-
- public let notification: Notification
- public let managedObjectContext: NSManagedObjectContext
-
- public init?(notification: Notification) {
- guard notification.name == .NSManagedObjectContextObjectsDidChange,
- let managedObjectContext = notification.object as? NSManagedObjectContext else {
- return nil
- }
-
- self.notification = notification
- self.managedObjectContext = managedObjectContext
- }
-
-}
-
-extension ManagedObjectContextObjectsDidChangeNotification {
-
- public var insertedObjects: Set {
- return objects(forKey: NSInsertedObjectsKey)
- }
-
- public var updatedObjects: Set {
- return objects(forKey: NSUpdatedObjectsKey)
- }
-
- public var deletedObjects: Set {
- return objects(forKey: NSDeletedObjectsKey)
- }
-
- public var refreshedObjects: Set {
- return objects(forKey: NSRefreshedObjectsKey)
- }
-
- public var invalidedObjects: Set {
- return objects(forKey: NSInvalidatedObjectsKey)
- }
-
- public var invalidatedAllObjects: Bool {
- return notification.userInfo?[NSInvalidatedAllObjectsKey] != nil
- }
-
-}
-
-extension ManagedObjectContextObjectsDidChangeNotification {
-
- private func objects(forKey key: String) -> Set {
- return notification.userInfo?[key] as? Set ?? Set()
- }
-
-}
diff --git a/CoreDataStack/Stack/ManagedObjectObserver.swift b/CoreDataStack/Stack/ManagedObjectObserver.swift
deleted file mode 100644
index 3681fee95..000000000
--- a/CoreDataStack/Stack/ManagedObjectObserver.swift
+++ /dev/null
@@ -1,80 +0,0 @@
-//
-// ManagedObjectObserver.swift
-// CoreDataStack
-//
-// Created by sxiaojian on 2021/2/8.
-//
-
-import Foundation
-import CoreData
-import Combine
-
-final public class ManagedObjectObserver {
- private init() { }
-}
-
-extension ManagedObjectObserver {
-
- public static func observe(object: NSManagedObject) -> AnyPublisher {
- guard let context = object.managedObjectContext else {
- return Fail(error: .noManagedObjectContext).eraseToAnyPublisher()
- }
-
- return NotificationCenter.default.publisher(for: .NSManagedObjectContextObjectsDidChange, object: context)
- .tryMap { notification in
- guard let notification = ManagedObjectContextObjectsDidChangeNotification(notification: notification) else {
- throw Error.notManagedObjectChangeNotification
- }
-
- let changeType = ManagedObjectObserver.changeType(of: object, in: notification)
- return Change(
- changeType: changeType,
- changeNotification: notification
- )
- }
- .mapError { error -> Error in
- return (error as? Error) ?? .unknown(error)
- }
- .eraseToAnyPublisher()
- }
-
-}
-
-extension ManagedObjectObserver {
- private static func changeType(of object: NSManagedObject, in notification: ManagedObjectContextObjectsDidChangeNotification) -> ChangeType? {
- let deleted = notification.deletedObjects.union(notification.invalidedObjects)
- if notification.invalidatedAllObjects || deleted.contains(where: { $0 === object }) {
- return .delete
- }
-
- let updated = notification.updatedObjects.union(notification.refreshedObjects)
- if let object = updated.first(where: { $0 === object }) {
- return .update(object)
- }
-
- return nil
- }
-}
-
-extension ManagedObjectObserver {
- public struct Change {
- public let changeType: ChangeType?
- public let changeNotification: ManagedObjectContextObjectsDidChangeNotification
-
- init(changeType: ManagedObjectObserver.ChangeType?, changeNotification: ManagedObjectContextObjectsDidChangeNotification) {
- self.changeType = changeType
- self.changeNotification = changeNotification
- }
-
- }
- public enum ChangeType {
- case delete
- case update(NSManagedObject)
- }
-
- public enum Error: Swift.Error {
- case unknown(Swift.Error)
- case noManagedObjectContext
- case notManagedObjectChangeNotification
- }
-}
diff --git a/CoreDataStackTests/CoreDataStackTests.swift b/CoreDataStackTests/CoreDataStackTests.swift
deleted file mode 100644
index 7248e3b9a..000000000
--- a/CoreDataStackTests/CoreDataStackTests.swift
+++ /dev/null
@@ -1,33 +0,0 @@
-//
-// CoreDataStackTests.swift
-// CoreDataStackTests
-//
-// Created by MainasuK Cirno on 2021/1/27.
-//
-
-import XCTest
-@testable import CoreDataStack
-
-class CoreDataStackTests: XCTestCase {
-
- override func setUpWithError() throws {
- // Put setup code here. This method is called before the invocation of each test method in the class.
- }
-
- override func tearDownWithError() throws {
- // Put teardown code here. This method is called after the invocation of each test method in the class.
- }
-
- func testExample() throws {
- // This is an example of a functional test case.
- // Use XCTAssert and related functions to verify your tests produce the correct results.
- }
-
- func testPerformanceExample() throws {
- // This is an example of a performance test case.
- self.measure {
- // Put the code you want to measure the time of here.
- }
- }
-
-}
diff --git a/CoreDataStackTests/Info.plist b/CoreDataStackTests/Info.plist
deleted file mode 100644
index 9fe845c60..000000000
--- a/CoreDataStackTests/Info.plist
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
- CFBundleDevelopmentRegion
- $(DEVELOPMENT_LANGUAGE)
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIdentifier
- $(PRODUCT_BUNDLE_IDENTIFIER)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- $(PRODUCT_NAME)
- CFBundlePackageType
- $(PRODUCT_BUNDLE_PACKAGE_TYPE)
- CFBundleShortVersionString
- 1.2.0
- CFBundleVersion
- 88
-
-
diff --git a/Documentation/CONTRIBUTING.md b/Documentation/CONTRIBUTING.md
new file mode 100644
index 000000000..cc018445d
--- /dev/null
+++ b/Documentation/CONTRIBUTING.md
@@ -0,0 +1,30 @@
+# Contributing
+
+- File the issue for bug report and feature request
+- Translate the project in our [Crowdin](https://crowdin.com/project/mastodon-for-ios) project
+- Make the Pull Request to contribute
+
+## Bug Report
+File the issue about the bug. Make sure you are installing the latest version app from TestFlight or App Store.
+
+## Translation
+[![Crowdin](https://badges.crowdin.net/mastodon-for-ios/localized.svg)](https://crowdin.com/project/mastodon-for-ios)
+
+The translation will update regularly. Please request language if not listed via issue.
+
+## Pull Request
+
+You can make a pull request directly with small block code changes for bugfix or feature implementations. Before making a pull request with hundred lines of changes to this repository, please first discuss the change you wish to make via issue.
+
+Also, there are lots of existing feature request issues that could be a good-first-issue discussing place.
+
+Follow the git-flow pattern to make your pull request.
+
+1. Ensure you are checkout on the `develop` branch.
+2. Write your codes and test them on **iPad and iPhone**.
+3. Merge the `develop` into your branch then make a Pull Request. Please merge the branch and resolve any conflicts when the `develop` updates. **Do not force push your codes.**
+4. Make sure the permission for your folk is open to the reviewer. Code style fix, conflict resolution, and other changes may be committed by the reviewer directly.
+5. Request a code review and wait for approval. The PR will be merged when it is approved.
+
+## Documentation
+The documents for this app is list under the [Documentation](../Documentation/) folder. We are also welcome contributions for documentation.
\ No newline at end of file
diff --git a/Documentation/Setup.md b/Documentation/Setup.md
new file mode 100644
index 000000000..ede9d4862
--- /dev/null
+++ b/Documentation/Setup.md
@@ -0,0 +1,83 @@
+# Setup
+
+## Requirements
+
+- Xcode 13+
+- Swift 5.5+
+- iOS 14.0+
+
+
+Intell the latest version of Xcode from the App Store or Apple Developer Download website. Also, we assert you have the [Homebrew](https://brew.sh) package manager.
+
+This guide may not suit your machine and actually setup procedure may change in the future. Please file the issue or Pull Request if there are any problems.
+
+## CocoaPods
+The app use [CocoaPods]() and [CocoaPods-Keys](https://github.com/orta/cocoapods-keys). The M1 Mac needs virtual ruby env to workaround compatibility issues.
+
+#### Intel Mac
+
+```zsh
+sudo gem install cocoapods cocoapods-keys
+```
+
+#### M1 Mac
+
+```zsh
+# install the rbenv
+brew install rbenv
+which ruby
+# > /usr/bin/ruby
+echo 'eval "$(rbenv init -)"' >> ~/.zprofile
+source ~/.zprofile
+which ruby
+# > /Users/mainasuk/.rbenv/shims/ruby
+
+# select ruby
+rbenv install --list
+# here we use the latest 3.0.x version
+rbenv install 3.0.3
+rbenv global 3.0.3
+ruby --version
+# > ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [arm64-darwin21]
+
+sudo gem install cocoapods cocoapods-keys
+```
+
+## Bootstrap
+
+```zsh
+# make a clean build
+sudo gem install cocoapods-clean
+pod clean
+
+# make install
+pod install --repo-update
+
+# open workspace
+open Mastodon.xcworkspace
+```
+
+The CocoaPods-Key plugin will request the push notification endpoint. You can fufill the empty string and set it later. To setup the push notification. Please check section `Push Notification` below.
+
+The app requires the `App Group` capability. To make sure it works for your developer membership. Please check [AppSecret.swift](../AppShared/AppSecret.swift) file and set another unique `groupID` and update `App Group` settings.
+
+#### Push Notification (Optional)
+The app is compatible with [toot-relay](https://github.com/DagAgren/toot-relay) APNs. You can set your push notification endpoint via Cocoapod-Keys. There are two endpoints:
+- notification_endpoint: for `RELEASE` usage
+- notification_endpoint_debug: for `DEBUG` usage
+
+Please check the [Establishing a Certificate-Based Connection to APNs
+](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_certificate-based_connection_to_apns) document to generate the certificate and exports the p12 file.
+
+Note:
+Please check and set the `notification.Topic` to the app BundleID in [toot-relay.go](https://github.com/DagAgren/toot-relay/blob/f9d6894040509881fee845972cd38ec6cd8f5a11/toot-relay.go#L112). The server needs use a reverse proxy to port this relay on 443 port with valid domain and HTTPS certificate.
+
+## Start
+1. Open `Mastodon.xcworkspace`
+2. Wait for the Swift Package Dependencies resolved.
+2. Check the signing settings make sure to choose a team. [More info…](https://help.apple.com/xcode/mac/current/#/dev23aab79b4)
+3. Select `Mastodon` scheme and device then run it. (Command + R)
+
+## What's next
+
+We welcome contributions! And if you have an interest to contribute codes. Here is a document that describes the app architecture and what's tech stack it uses.
\ No newline at end of file
diff --git a/Documentation/Snapshot.md b/Documentation/Snapshot.md
new file mode 100644
index 000000000..7140f7a0b
--- /dev/null
+++ b/Documentation/Snapshot.md
@@ -0,0 +1,137 @@
+# Mastodon App Store Snapshot Guide
+This documentation is a guide to create snapshots for App Store. The outer contributor could ignore this.
+
+## Prepare toolkit
+The app use the Xcode UITest generate snapshots attachments. Then use the `xcparse` tool extract the snapshots.
+
+```zsh
+# install xcparse from Homebrew
+brew install chargepoint/xcparse/xcparse
+```
+## How it works
+We use `xcodebuild` CLI tool to trigger UITest.
+
+Set the `name` in `-destination` option to add device for snapshot. For example:
+`-destination 'platform=iOS Simulator,name=iPad Pro (12.9-inch) (5th generation)' \`
+
+You can list the avaiable simulator:
+```zsh
+# list the destinations
+xcodebuild \
+ test \
+ -showdestinations \
+ -derivedDataPath '~/Downloads/MastodonBuild/Derived' \
+ -workspace Mastodon.xcworkspace \
+ -scheme 'Mastodon - Snapshot'
+
+# output
+Available destinations for the "Mastodon - Snapshot" scheme:
+ { platform:iOS Simulator, id:7F6D7727-AD49-4B79-B6F5-AEC538925576, OS:15.2, name:iPad (9th generation) }
+ { platform:iOS Simulator, id:BEB9533C-F786-40E6-8C38-248F6A11FC37, OS:15.2, name:iPad Air (4th generation) }
+ …
+```
+
+#### Note:
+Multiple lines for destination will dispatches the parallel snapshot jobs.
+
+
+## Login before make snapshots
+This script trigger the `MastodonUITests/MastodonUISnapshotTests/testSignInAccount` test case to sign-in the account. The test case may wait for 2FA code or email code. Please input it if needed. Also, you can skip this and sign-in the test account manually.
+
+Replace the `` and `` for test account.
+```zsh
+# build and run test case for auto sign-in
+TEST_RUNNER_login_domain='' \
+ TEST_RUNNER_login_email='' \
+ TEST_RUNNER_login_password='' \
+ xcodebuild \
+ test \
+ -derivedDataPath '~/Downloads/MastodonBuild/Derived' \
+ -workspace Mastodon.xcworkspace \
+ -scheme 'Mastodon - Snapshot' \
+ -sdk iphonesimulator \
+ -destination 'platform=iOS Simulator,name=iPhone 13 Pro Max' \
+ -destination 'platform=iOS Simulator,name=iPhone 8 Plus' \
+ -destination 'platform=iOS Simulator,name=iPad Pro (12.9-inch) (5th generation)' \
+ -testPlan 'AppStoreSnapshotTestPlan' \
+ -only-testing:MastodonUITests/MastodonUISnapshotTests/testSignInAccount
+```
+
+Note:
+UITest may running silent. Open the Simulator.app to make the device display.
+
+## Take and extract snapshots
+
+### 1. Setup status bar
+```zsh
+# boot devices
+xcrun simctl boot 'iPhone 8 Plus'
+xcrun simctl boot 'iPhone 13 Pro Max'
+xcrun simctl boot 'iPad Pro (12.9-inch) (5th generation)'
+
+# setup magic status bar
+xcrun simctl status_bar 'iPhone 13 Pro Max' override --time "9:41" --batteryState charged --batteryLevel 100
+xcrun simctl status_bar 'iPhone 8 Plus' override --time "9:41" --batteryState charged --batteryLevel 100
+xcrun simctl status_bar 'iPad Pro (12.9-inch) (5th generation)' override --time "9:41" --batteryState charged --batteryLevel 100
+```
+
+### 2. Take snapshots
+The `TEST_RUNNER_` prefix will sets env value into test runner.
+
+```zsh
+# take snapshots
+TEST_RUNNER_login_domain='' \
+ TEST_RUNNER_login_email='' \
+ TEST_RUNNER_login_password='' \
+ TEST_RUNNER_thread_id='' \
+ TEST_RUNNER_profile_id='' \
+ xcodebuild \
+ test \
+ -derivedDataPath '~/Downloads/MastodonBuild/Derived' \
+ -workspace Mastodon.xcworkspace \
+ -scheme 'Mastodon - Snapshot' \
+ -sdk iphonesimulator \
+ -destination 'platform=iOS Simulator,name=iPhone 13 Pro Max' \
+ -destination 'platform=iOS Simulator,name=iPhone 8 Plus' \
+ -destination 'platform=iOS Simulator,name=iPad Pro (12.9-inch) (5th generation)' \
+ -test-iterations 3 \
+ -retry-tests-on-failure \
+ -testPlan 'AppStoreSnapshotTestPlan'
+
+# output:
+Test session results, code coverage, and logs:
+ /Users/Me/Downloads/MastodonBuild/Derived/Logs/Test/Test-Mastodon - Snapshot-2022.03.03_18-00-38-+0800.xcresult
+
+** TEST SUCCEEDED **
+```
+
+#### Note:
+Add `-only-testing:MastodonUITests/MastodonUISnapshotTests/testSnapshot…` to run specific test case.
+
+| Task | key | value |
+| ------------------- | -------------- | ----------------------------------------------------- |
+| testSignInAccount | login_domain | The server domain for user login |
+| testSignInAccount | login_email | The user email for login |
+| testSignInAccount | login_password | The user password for login |
+| testSnapshotThread | thread_id | The ID for post which used for thread scene snapshot |
+| testSnapshotProfile | profile_id | The ID for user which used for profile scene snapshot |
+
+### 3. Extract snapshots
+Use `xcparse screenshots ` extracts snapshots.
+
+```zsh
+# scresult path for previous test case
+xcparse screenshots '' ~/Downloads/MastodonBuild/Screenshots/
+
+# output
+100% [============]
+🎊 Export complete! 🎊
+
+# group
+cd ~/Downloads/MastodonBuild/Screenshots/
+mkdir 'iPhone 8 Plus' 'iPhone 13 Pro Max' 'iPad Pro (12.9-inch) (5th generation)'
+find . -name "*iPad*" -type file -print0 | xargs -0 -I {} mv {} './iPad Pro (12.9-inch) (5th generation)'
+find . -name "*iPhone 8*" -type file -print0 | xargs -0 -I {} mv {} './iPhone 8 Plus'
+find . -name "*iPhone 13*" -type file -print0 | xargs -0 -I {} mv {} './iPhone 13 Pro Max'
+
+```
diff --git a/Localization/Localizable.stringsdict b/Localization/Localizable.stringsdict
index ce358b439..4b9a12762 100644
--- a/Localization/Localizable.stringsdict
+++ b/Localization/Localizable.stringsdict
@@ -156,6 +156,28 @@
%ld reblogs
+ plural.count.reply
+
+ NSStringLocalizedFormatKey
+ %#@reply_count@
+ reply_count
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ zero
+ 0 replies
+ one
+ 1 reply
+ few
+ %ld replies
+ many
+ %ld replies
+ other
+ %ld replies
+
+
plural.count.vote
NSStringLocalizedFormatKey
diff --git a/Localization/StringsConvertor/Intents/input/eu_ES/Intents.strings b/Localization/StringsConvertor/Intents/input/eu_ES/Intents.strings
new file mode 100644
index 000000000..dbc27c1cf
--- /dev/null
+++ b/Localization/StringsConvertor/Intents/input/eu_ES/Intents.strings
@@ -0,0 +1,51 @@
+"16wxgf" = "Argitaratu Mastodonen";
+
+"751xkl" = "Testu-edukia";
+
+"CsR7G2" = "Argitaratu Mastodonen";
+
+"HZSGTr" = "Ze eduki argitaratu?";
+
+"HdGikU" = "Argitaratzeak huts egin du";
+
+"KDNTJ4" = "Hutsegitearen arrazoia";
+
+"RHxKOw" = "Argitaratu bidalketa testu-edukiarekin";
+
+"RxSqsb" = "Bidali";
+
+"WCIR3D" = "Argitaratu ${content} Mastodonen";
+
+"ZKJSNu" = "Bidali";
+
+"ZS1XaK" = "${content}";
+
+"ZbSjzC" = "Ikusgaitasuna";
+
+"Zo4jgJ" = "Bidalketaren ikusgaitasuna";
+
+"apSxMG-dYQ5NN" = "'Publikoa'-rekin bat datozen ${count} aukera daude.";
+
+"apSxMG-ehFLjY" = "'Jarraitzaileak soilik'-ekin bat datozen ${count} aukera daude.";
+
+"ayoYEb-dYQ5NN" = "${content}, publikoa";
+
+"ayoYEb-ehFLjY" = "${content}, jarraitzaileak besterik ez";
+
+"dUyuGg" = "Argitaratu Mastodonen";
+
+"dYQ5NN" = "Publikoa";
+
+"ehFLjY" = "Jarraitzaileak soilik";
+
+"gfePDu" = "Argitaratzeak huts egin du. ${failureReason}";
+
+"k7dbKQ" = "Bidalketa behar bezala bidali da.";
+
+"oGiqmY-dYQ5NN" = "Berresteagatik, 'Publikoa' izatea nahi duzu?";
+
+"oGiqmY-ehFLjY" = "Berresteagatik, 'Jarraitzaileak soilik' izatea nahi duzu?";
+
+"rM6dvp" = "URLa";
+
+"ryJLwG" = "Bidalketa behar bezala bidali da. ";
diff --git a/Localization/StringsConvertor/Intents/input/eu_ES/Intents.stringsdict b/Localization/StringsConvertor/Intents/input/eu_ES/Intents.stringsdict
new file mode 100644
index 000000000..9246c3475
--- /dev/null
+++ b/Localization/StringsConvertor/Intents/input/eu_ES/Intents.stringsdict
@@ -0,0 +1,38 @@
+
+
+
+
+ There are ${count} options matching ‘${content}’. - 2
+
+ NSStringLocalizedFormatKey
+ ${content}(e)kin bat datozen %#@count_option@ daude.
+ count_option
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ %ld
+ one
+ Aukera 1
+ other
+ %ld aukera
+
+
+ There are ${count} options matching ‘${visibility}’.
+
+ NSStringLocalizedFormatKey
+ ${visibility}(e)kin bat datozen %#@count_option@ daude.
+ count_option
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ %ld
+ one
+ Aukera 1
+ other
+ %ld aukera
+
+
+
+
diff --git a/Localization/StringsConvertor/Intents/input/fr_FR/Intents.strings b/Localization/StringsConvertor/Intents/input/fr_FR/Intents.strings
index f4fec3000..2703edd42 100644
--- a/Localization/StringsConvertor/Intents/input/fr_FR/Intents.strings
+++ b/Localization/StringsConvertor/Intents/input/fr_FR/Intents.strings
@@ -12,7 +12,7 @@
"RHxKOw" = "Envoyer une publication avec du contenu texte";
-"RxSqsb" = "Post";
+"RxSqsb" = "Publication";
"WCIR3D" = "Publier du ${content} sur Mastodon";
@@ -24,9 +24,9 @@
"Zo4jgJ" = "Visibilité de la publication";
-"apSxMG-dYQ5NN" = "There are ${count} options matching ‘Public’.";
+"apSxMG-dYQ5NN" = "Il y a ${count} options correspondant à « Public ».";
-"apSxMG-ehFLjY" = "There are ${count} options matching ‘Followers Only’.";
+"apSxMG-ehFLjY" = "Il y a ${count} options correspondant à « Abonnés uniquement ».";
"ayoYEb-dYQ5NN" = "${content}, Public";
diff --git a/Localization/StringsConvertor/Intents/input/it_IT/Intents.strings b/Localization/StringsConvertor/Intents/input/it_IT/Intents.strings
new file mode 100644
index 000000000..6877490ba
--- /dev/null
+++ b/Localization/StringsConvertor/Intents/input/it_IT/Intents.strings
@@ -0,0 +1,51 @@
+"16wxgf" = "Post on Mastodon";
+
+"751xkl" = "Text Content";
+
+"CsR7G2" = "Post on Mastodon";
+
+"HZSGTr" = "What content to post?";
+
+"HdGikU" = "Posting failed";
+
+"KDNTJ4" = "Failure Reason";
+
+"RHxKOw" = "Send Post with text content";
+
+"RxSqsb" = "Post";
+
+"WCIR3D" = "Post ${content} on Mastodon";
+
+"ZKJSNu" = "Post";
+
+"ZS1XaK" = "${content}";
+
+"ZbSjzC" = "Visibility";
+
+"Zo4jgJ" = "Post Visibility";
+
+"apSxMG-dYQ5NN" = "There are ${count} options matching ‘Public’.";
+
+"apSxMG-ehFLjY" = "There are ${count} options matching ‘Followers Only’.";
+
+"ayoYEb-dYQ5NN" = "${content}, Public";
+
+"ayoYEb-ehFLjY" = "${content}, Followers Only";
+
+"dUyuGg" = "Post on Mastodon";
+
+"dYQ5NN" = "Public";
+
+"ehFLjY" = "Followers Only";
+
+"gfePDu" = "Posting failed. ${failureReason}";
+
+"k7dbKQ" = "Post was sent successfully.";
+
+"oGiqmY-dYQ5NN" = "Just to confirm, you wanted ‘Public’?";
+
+"oGiqmY-ehFLjY" = "Just to confirm, you wanted ‘Followers Only’?";
+
+"rM6dvp" = "URL";
+
+"ryJLwG" = "Post was sent successfully. ";
diff --git a/Localization/StringsConvertor/Intents/input/it_IT/Intents.stringsdict b/Localization/StringsConvertor/Intents/input/it_IT/Intents.stringsdict
new file mode 100644
index 000000000..18422c772
--- /dev/null
+++ b/Localization/StringsConvertor/Intents/input/it_IT/Intents.stringsdict
@@ -0,0 +1,38 @@
+
+
+
+
+ There are ${count} options matching ‘${content}’. - 2
+
+ NSStringLocalizedFormatKey
+ There are %#@count_option@ matching ‘${content}’.
+ count_option
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ %ld
+ one
+ 1 option
+ other
+ %ld options
+
+
+ There are ${count} options matching ‘${visibility}’.
+
+ NSStringLocalizedFormatKey
+ There are %#@count_option@ matching ‘${visibility}’.
+ count_option
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ %ld
+ one
+ 1 option
+ other
+ %ld options
+
+
+
+
diff --git a/Localization/StringsConvertor/Intents/input/ja_JP/Intents.strings b/Localization/StringsConvertor/Intents/input/ja_JP/Intents.strings
index 6877490ba..411b35c2e 100644
--- a/Localization/StringsConvertor/Intents/input/ja_JP/Intents.strings
+++ b/Localization/StringsConvertor/Intents/input/ja_JP/Intents.strings
@@ -1,51 +1,51 @@
-"16wxgf" = "Post on Mastodon";
+"16wxgf" = "Mastodonに投稿";
-"751xkl" = "Text Content";
+"751xkl" = "テキストコンテンツ";
-"CsR7G2" = "Post on Mastodon";
+"CsR7G2" = "Mastodonに投稿";
"HZSGTr" = "What content to post?";
-"HdGikU" = "Posting failed";
+"HdGikU" = "投稿に失敗しました";
-"KDNTJ4" = "Failure Reason";
+"KDNTJ4" = "失敗の理由";
"RHxKOw" = "Send Post with text content";
-"RxSqsb" = "Post";
+"RxSqsb" = "投稿";
-"WCIR3D" = "Post ${content} on Mastodon";
+"WCIR3D" = "Mastodonに ${content} を投稿";
-"ZKJSNu" = "Post";
+"ZKJSNu" = "投稿";
"ZS1XaK" = "${content}";
-"ZbSjzC" = "Visibility";
+"ZbSjzC" = "公開範囲";
-"Zo4jgJ" = "Post Visibility";
+"Zo4jgJ" = "投稿の公開範囲";
-"apSxMG-dYQ5NN" = "There are ${count} options matching ‘Public’.";
+"apSxMG-dYQ5NN" = "「パブリック」にマッチするオプションが${count}個あります。";
-"apSxMG-ehFLjY" = "There are ${count} options matching ‘Followers Only’.";
+"apSxMG-ehFLjY" = "「フォロワーのみ」にマッチするオプションが${count}個あります。";
-"ayoYEb-dYQ5NN" = "${content}, Public";
+"ayoYEb-dYQ5NN" = "${content}, パブリック";
-"ayoYEb-ehFLjY" = "${content}, Followers Only";
+"ayoYEb-ehFLjY" = "${content}, フォロワーのみ";
-"dUyuGg" = "Post on Mastodon";
+"dUyuGg" = "Mastodonに投稿";
-"dYQ5NN" = "Public";
+"dYQ5NN" = "パブリック";
-"ehFLjY" = "Followers Only";
+"ehFLjY" = "フォロワーのみ";
-"gfePDu" = "Posting failed. ${failureReason}";
+"gfePDu" = "投稿に失敗しました。 ${failureReason}";
-"k7dbKQ" = "Post was sent successfully.";
+"k7dbKQ" = "投稿に成功しました。";
-"oGiqmY-dYQ5NN" = "Just to confirm, you wanted ‘Public’?";
+"oGiqmY-dYQ5NN" = "「パブリック」で間違いないですか?";
-"oGiqmY-ehFLjY" = "Just to confirm, you wanted ‘Followers Only’?";
+"oGiqmY-ehFLjY" = "「フォロワーのみ」で間違いないですか?";
"rM6dvp" = "URL";
-"ryJLwG" = "Post was sent successfully. ";
+"ryJLwG" = "投稿に成功しました。 ";
diff --git a/Localization/StringsConvertor/Intents/input/kab_KAB/Intents.strings b/Localization/StringsConvertor/Intents/input/kab_KAB/Intents.strings
new file mode 100644
index 000000000..532c822f6
--- /dev/null
+++ b/Localization/StringsConvertor/Intents/input/kab_KAB/Intents.strings
@@ -0,0 +1,51 @@
+"16wxgf" = "Asuffeɣ deg Matodon";
+
+"751xkl" = "Agbur n uḍris";
+
+"CsR7G2" = "Asuffeɣ deg Matodon";
+
+"HZSGTr" = "Anwa agbur ara d-yettwasuffɣen?";
+
+"HdGikU" = "Yecceḍ usuffeɣ";
+
+"KDNTJ4" = "Ssebba n tuccḍa";
+
+"RHxKOw" = "Azen tasuffeɣt s ugbur n uḍris";
+
+"RxSqsb" = "Tasuffeɣt";
+
+"WCIR3D" = "Suffeɣ ${content} deg Mastodon";
+
+"ZKJSNu" = "Tasuffeɣt";
+
+"ZS1XaK" = "${content}";
+
+"ZbSjzC" = "Abani";
+
+"Zo4jgJ" = "Abani n tsuffeɣt";
+
+"apSxMG-dYQ5NN" = "Yella ${count} n textiṛiyin yemṣadan d 'Uzayaz'.";
+
+"apSxMG-ehFLjY" = "Yella ${count} n textiṛiyin yemṣadan d 'Yineḍfaren kan'.";
+
+"ayoYEb-dYQ5NN" = "${content}, azayaz";
+
+"ayoYEb-ehFLjY" = "${content}, ineḍfaren kan";
+
+"dUyuGg" = "Asuffeɣ deg Maṣṭudun";
+
+"dYQ5NN" = "Azayez";
+
+"ehFLjY" = "Imeḍfaṛen kan";
+
+"gfePDu" = "Asuffeɣ yecceḍ. ${failureReason}";
+
+"k7dbKQ" = "Tasuffeɣt tettwazen akken iwata.";
+
+"oGiqmY-dYQ5NN" = "I usentem kan, tebɣiḍ 'Azayaz'?";
+
+"oGiqmY-ehFLjY" = "I usentem kan, tebɣiḍ 'Ineḍfaren kan'?";
+
+"rM6dvp" = "URL";
+
+"ryJLwG" = "Tasuffeɣt tettwazen akken iwata. ";
diff --git a/Localization/StringsConvertor/Intents/input/kab_KAB/Intents.stringsdict b/Localization/StringsConvertor/Intents/input/kab_KAB/Intents.stringsdict
new file mode 100644
index 000000000..a8aeeaaf1
--- /dev/null
+++ b/Localization/StringsConvertor/Intents/input/kab_KAB/Intents.stringsdict
@@ -0,0 +1,38 @@
+
+
+
+
+ There are ${count} options matching ‘${content}’. - 2
+
+ NSStringLocalizedFormatKey
+ Llan %#@count_option@ i yemṣaḍan d '${content}'.
+ count_option
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ %ld
+ one
+ 1 textiṛt
+ other
+ %ld textiṛiyin
+
+
+ There are ${count} options matching ‘${visibility}’.
+
+ NSStringLocalizedFormatKey
+ Llan %#@count_option@ i yemṣaḍa, d '${visibility}'.
+ count_option
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ %ld
+ one
+ 1 uɣewwaṛ
+ other
+ %ld iɣewwaṛen
+
+
+
+
diff --git a/Localization/StringsConvertor/Intents/input/sv_FI/Intents.strings b/Localization/StringsConvertor/Intents/input/sv_FI/Intents.strings
index d4531ed64..1be213d45 100644
--- a/Localization/StringsConvertor/Intents/input/sv_FI/Intents.strings
+++ b/Localization/StringsConvertor/Intents/input/sv_FI/Intents.strings
@@ -1,51 +1,51 @@
-"16wxgf" = "Post on Mastodon";
+"16wxgf" = "Julkaise Mastodonissa";
-"751xkl" = "Text Content";
+"751xkl" = "Tekstisisältö";
-"CsR7G2" = "Post on Mastodon";
+"CsR7G2" = "Julkaise Mastodonissa";
-"HZSGTr" = "What content to post?";
+"HZSGTr" = "Mitä sisältöä julkaista?";
-"HdGikU" = "Posting failed";
+"HdGikU" = "Julkaiseminen epäonnistui";
-"KDNTJ4" = "Failure Reason";
+"KDNTJ4" = "Epäonnistumisen syy";
-"RHxKOw" = "Send Post with text content";
+"RHxKOw" = "Lähetä julkaisu teksisisällöllä";
-"RxSqsb" = "Post";
+"RxSqsb" = "Julkaisu";
-"WCIR3D" = "Posta ${content} på Mastodon";
+"WCIR3D" = "Julkaise ${content} Mastodonissa";
-"ZKJSNu" = "Post";
+"ZKJSNu" = "Julkaisu";
"ZS1XaK" = "${content}";
-"ZbSjzC" = "Visibility";
+"ZbSjzC" = "Näkyvyys";
-"Zo4jgJ" = "Post Visibility";
+"Zo4jgJ" = "Julkaisun näkyvyys";
-"apSxMG-dYQ5NN" = "There are ${count} options matching ‘Public’.";
+"apSxMG-dYQ5NN" = "On ${count} vaihtoehtoa, jotka vastaavat ‘Julkinen’.";
-"apSxMG-ehFLjY" = "There are ${count} options matching ‘Followers Only’.";
+"apSxMG-ehFLjY" = "On ${count} vaihtoehtoa, jotka vastaavat ‘Vain seuraajat’.";
-"ayoYEb-dYQ5NN" = "${content}, Public";
+"ayoYEb-dYQ5NN" = "${content}, julkinen";
-"ayoYEb-ehFLjY" = "${content}, Followers Only";
+"ayoYEb-ehFLjY" = "${content}, vain seuraajat";
-"dUyuGg" = "Post on Mastodon";
+"dUyuGg" = "Julkaise Mastodonissa";
-"dYQ5NN" = "Public";
+"dYQ5NN" = "Julkinen";
-"ehFLjY" = "Followers Only";
+"ehFLjY" = "Vain seuraajat";
-"gfePDu" = "Posting failed. ${failureReason}";
+"gfePDu" = "Julkaiseminen epäonnistui. ${failureReason}";
-"k7dbKQ" = "Post was sent successfully.";
+"k7dbKQ" = "Julkaisu lähetettiin onnistuneesti.";
-"oGiqmY-dYQ5NN" = "Just to confirm, you wanted ‘Public’?";
+"oGiqmY-dYQ5NN" = "Vahvitukseksi, halusit ‘Julkinen’?";
-"oGiqmY-ehFLjY" = "Just to confirm, you wanted ‘Followers Only’?";
+"oGiqmY-ehFLjY" = "Vahvitstukseksi, halusit ‘Vain seuraajat’?";
"rM6dvp" = "URL";
-"ryJLwG" = "Post was sent successfully. ";
+"ryJLwG" = "Julkaisu lähetettiin onnistuneesti. ";
diff --git a/Localization/StringsConvertor/Intents/input/sv_FI/Intents.stringsdict b/Localization/StringsConvertor/Intents/input/sv_FI/Intents.stringsdict
index 18422c772..7825b778e 100644
--- a/Localization/StringsConvertor/Intents/input/sv_FI/Intents.stringsdict
+++ b/Localization/StringsConvertor/Intents/input/sv_FI/Intents.stringsdict
@@ -5,7 +5,7 @@
There are ${count} options matching ‘${content}’. - 2
NSStringLocalizedFormatKey
- There are %#@count_option@ matching ‘${content}’.
+ On %#@count_option@, joka/jotka vastaavat sisältöön ‘${content}’.
count_option
NSStringFormatSpecTypeKey
@@ -13,15 +13,15 @@
NSStringFormatValueTypeKey
%ld
one
- 1 option
+ 1 vaihtoehto
other
- %ld options
+ %ld vaihtoehtoa
There are ${count} options matching ‘${visibility}’.
NSStringLocalizedFormatKey
- There are %#@count_option@ matching ‘${visibility}’.
+ On vaihtoehtoa %#@count_option@, joka/jotka vastaavat näkyvyyteen ‘${visibility}’.
count_option
NSStringFormatSpecTypeKey
@@ -29,9 +29,9 @@
NSStringFormatValueTypeKey
%ld
one
- 1 option
+ 1 vaihtoehto
other
- %ld options
+ %ld vaihtoehtoa
diff --git a/Localization/StringsConvertor/Intents/input/sv_SE/Intents.strings b/Localization/StringsConvertor/Intents/input/sv_SE/Intents.strings
index d4531ed64..e81116eee 100644
--- a/Localization/StringsConvertor/Intents/input/sv_SE/Intents.strings
+++ b/Localization/StringsConvertor/Intents/input/sv_SE/Intents.strings
@@ -34,9 +34,9 @@
"dUyuGg" = "Post on Mastodon";
-"dYQ5NN" = "Public";
+"dYQ5NN" = "Publikt";
-"ehFLjY" = "Followers Only";
+"ehFLjY" = "Endast följare";
"gfePDu" = "Posting failed. ${failureReason}";
diff --git a/Localization/StringsConvertor/Sources/StringsConvertor/main.swift b/Localization/StringsConvertor/Sources/StringsConvertor/main.swift
index 6507986be..14266a45e 100644
--- a/Localization/StringsConvertor/Sources/StringsConvertor/main.swift
+++ b/Localization/StringsConvertor/Sources/StringsConvertor/main.swift
@@ -1,11 +1,6 @@
import os.log
import Foundation
-let currentFileURL = URL(fileURLWithPath: "\(#file)", isDirectory: false)
-let packageRootURL = currentFileURL.deletingLastPathComponent().deletingLastPathComponent().deletingLastPathComponent()
-let inputDirectoryURL = packageRootURL.appendingPathComponent("input", isDirectory: true)
-let outputDirectoryURL = packageRootURL.appendingPathComponent("output", isDirectory: true)
-
// conver i18n JSON templates to strings files
private func convert(from inputDirectoryURL: URL, to outputDirectory: URL) {
do {
@@ -17,7 +12,6 @@ private func convert(from inputDirectoryURL: URL, to outputDirectory: URL) {
for inputLanguageDirectoryURL in inputLanguageDirectoryURLs {
let language = inputLanguageDirectoryURL.lastPathComponent
guard let mappedLanguage = map(language: language) else { continue }
- let outputDirectoryURL = outputDirectory.appendingPathComponent(mappedLanguage + ".lproj", isDirectory: true)
os_log("%{public}s[%{public}ld], %{public}s: process %s -> %s", ((#file as NSString).lastPathComponent), #line, #function, language, mappedLanguage)
let fileURLs = try FileManager.default.contentsOfDirectory(
@@ -29,9 +23,19 @@ private func convert(from inputDirectoryURL: URL, to outputDirectory: URL) {
os_log("%{public}s[%{public}ld], %{public}s: process %s", ((#file as NSString).lastPathComponent), #line, #function, jsonURL.debugDescription)
let filename = jsonURL.deletingPathExtension().lastPathComponent
guard let (mappedFilename, keyStyle) = map(filename: filename) else { continue }
- let outputFileURL = outputDirectoryURL.appendingPathComponent(mappedFilename).appendingPathExtension("strings")
+ guard let bundle = bundle(filename: filename) else { continue }
+
+ let outputDirectoryURL = outputDirectory
+ .appendingPathComponent(bundle, isDirectory: true)
+ .appendingPathComponent(mappedLanguage + ".lproj", isDirectory: true)
+
+ let outputFileURL = outputDirectoryURL
+ .appendingPathComponent(mappedFilename)
+ .appendingPathExtension("strings")
+
let strings = try process(url: jsonURL, keyStyle: keyStyle)
try? FileManager.default.createDirectory(at: outputDirectoryURL, withIntermediateDirectories: true, attributes: nil)
+
try strings.write(to: outputFileURL, atomically: true, encoding: .utf8)
}
}
@@ -44,6 +48,7 @@ private func convert(from inputDirectoryURL: URL, to outputDirectory: URL) {
private func map(language: String) -> String? {
switch language {
case "ar_SA": return "ar" // Arabic (Saudi Arabia)
+ case "eu_ES": return "eu-ES" // Basque
case "ca_ES": return "ca" // Catalan
case "zh_CN": return "zh-Hans" // Chinese Simplified
case "nl_NL": return "nl" // Dutch
@@ -51,11 +56,12 @@ private func map(language: String) -> String? {
case "fr_FR": return "fr" // French
case "de_DE": return "de" // German
case "ja_JP": return "ja" // Japanese
- case "kmr_TR": return "ku-TR" // Kurmanji (Kurdish)
+ case "kmr_TR": return "ku" // Kurmanji (Kurdish)
case "ru_RU": return "ru" // Russian
case "gd_GB": return "gd-GB" // Scottish Gaelic
case "es_ES": return "es" // Spanish
case "es_AR": return "es-419" // Spanish, Argentina
+ case "sv_FI": return "sv_FI" // Swedish, Finland
case "th_TH": return "th" // Thai
default: return nil
}
@@ -69,6 +75,14 @@ private func map(filename: String) -> (filename: String, keyStyle: Parser.KeySty
}
}
+private func bundle(filename: String) -> String? {
+ switch filename {
+ case "app": return "module"
+ case "ios-infoPlist": return "main"
+ default: return nil
+ }
+}
+
private func process(url: URL, keyStyle: Parser.KeyStyle) throws -> String {
do {
let data = try Data(contentsOf: url)
@@ -115,9 +129,16 @@ private func move(from inputDirectoryURL: URL, to outputDirectoryURL: URL, pathE
}
}
-// i18n from "input" to "output"
+
+let currentFileURL = URL(fileURLWithPath: "\(#file)", isDirectory: false)
+let packageRootURL = currentFileURL.deletingLastPathComponent().deletingLastPathComponent().deletingLastPathComponent()
+
+let inputDirectoryURL = packageRootURL.appendingPathComponent("input", isDirectory: true)
+let outputDirectoryURL = packageRootURL.appendingPathComponent("output", isDirectory: true)
convert(from: inputDirectoryURL, to: outputDirectoryURL)
-move(from: inputDirectoryURL, to: outputDirectoryURL, pathExtension: "stringsdict")
+
+let moduleDirectoryURL = outputDirectoryURL.appendingPathComponent("module", isDirectory: true)
+move(from: inputDirectoryURL, to: moduleDirectoryURL, pathExtension: "stringsdict")
// i18n from "Intents/input" to "Intents/output"
let intentsDirectoryURL = packageRootURL.appendingPathComponent("Intents", isDirectory: true)
diff --git a/Localization/StringsConvertor/input/ar_SA/app.json b/Localization/StringsConvertor/input/ar_SA/app.json
index 71e0f538f..51b334720 100644
--- a/Localization/StringsConvertor/input/ar_SA/app.json
+++ b/Localization/StringsConvertor/input/ar_SA/app.json
@@ -2,8 +2,8 @@
"common": {
"alerts": {
"common": {
- "please_try_again": "يُرجى المحاولة مرة أُخرى.",
- "please_try_again_later": "يُرجى المحاولة مرة أُخرى لاحقاً."
+ "please_try_again": "يُرجى المُحاولة مرة أُخرى.",
+ "please_try_again_later": "يُرجى المُحاولة مرة أُخرى لاحقًا."
},
"sign_up_failure": {
"title": "إخفاق في التسجيل"
@@ -28,17 +28,17 @@
}
},
"edit_profile_failure": {
- "title": "خطأ في تَحرير الملف الشخصي",
- "message": "لا يمكن تعديل الملف الشخصي. يُرجى المحاولة مرة أُخرى."
+ "title": "خطأ في تَحرير الملف التعريفي",
+ "message": "يتعذَّر تعديل الملف التعريفي. يُرجى المُحاولة مرة أُخرى."
},
"sign_out": {
"title": "تسجيل الخروج",
- "message": "هل أنت متأكد من رغبتك في تسجيل الخروج؟",
+ "message": "هل أنت متأكد من رغبتك في تسجيل الخُروج؟",
"confirm": "تسجيل الخروج"
},
"block_domain": {
- "title": "هل أنتَ مُتأكِّدٌ حقًا مِن رغبتك في حظر %s بالكامل؟ في معظم الحالات، يكون مِنَ الكافي والمُفَضَّل استهداف عدد محدود للحظر أو الكتم. لن ترى محتوى من هذا النطاق وسوف يتم إزالة جميع متابعيك المتواجدين فيه.",
- "block_entire_domain": "حظر النِطاق"
+ "title": "هل أنتَ مُتأكِّدٌ حقًا مِن رغبتك في حظر %s بالكامل؟ في معظم الحالات، يكون مِنَ الكافي والمُفَضَّل استهداف عدد محدود للحظر أو الكتم. لن ترى محتوى من هذا النطاق وسوف يُزال جميع متابعيك المتواجدين فيه.",
+ "block_entire_domain": "حظر النِّطاق"
},
"save_photo_failure": {
"title": "إخفاق في حفظ الصورة",
@@ -46,11 +46,11 @@
},
"delete_post": {
"title": "هل أنت متأكد من رغبتك في حذف هذا المنشور؟",
- "delete": "احذف"
+ "message": "هَل أنتَ مُتأكِدٌ مِن رَغبتِكَ فِي حَذفِ هَذَا المَنشُور؟"
},
"clean_cache": {
"title": "مَحو ذاكرة التخزين المؤقت",
- "message": "تمَّ مَحو ذاكرة التخزين المؤقت %s بنجاح."
+ "message": "تمَّ مَحو %s مِن ذاكرة التخزين المؤقت بنجاح."
}
},
"controls": {
@@ -58,9 +58,9 @@
"back": "العودة",
"next": "التالي",
"previous": "السابق",
- "open": "افتح",
+ "open": "فتح",
"add": "إضافة",
- "remove": "احذف",
+ "remove": "حذف",
"edit": "تحرير",
"save": "حفظ",
"ok": "حسنًا",
@@ -69,7 +69,7 @@
"continue": "واصل",
"compose": "تأليف",
"cancel": "إلغاء",
- "discard": "تجاهل",
+ "discard": "تجاهُل",
"try_again": "المُحاولة مرة أُخرى",
"take_photo": "التقاط صورة",
"save_photo": "حفظ الصورة",
@@ -81,20 +81,21 @@
"share": "المُشارك",
"share_user": "مُشاركة %s",
"share_post": "مشارك المنشور",
- "open_in_safari": "الفتح في Safari",
- "find_people": "ابحث عن أشخاص لمتابعتهم",
- "manually_search": "البحث يدوياً بدلاً من ذلك",
+ "open_in_safari": "الفَتحُ في Safari",
+ "open_in_browser": "الفَتحُ في المُتَصَفِّح",
+ "find_people": "ابحث عن أشخاص لِمُتابعتهم",
+ "manually_search": "البحث يدويًا بدلًا من ذلك",
"skip": "تخطي",
- "reply": "الرَد",
- "report_user": "ابلغ عن %s",
+ "reply": "الرَّد",
+ "report_user": "الإبلاغ عن %s",
"block_domain": "حظر %s",
- "unblock_domain": "إلغاء حظر %s",
+ "unblock_domain": "رفع الحظر عن %s",
"settings": "الإعدادات",
- "delete": "احذف"
+ "delete": "حذف"
},
"tabs": {
- "home": "الخيط الرئيسي",
- "search": "بحث",
+ "home": "الرَّئِيسَة",
+ "search": "البَحث",
"notification": "الإشعارات",
"profile": "الملف التعريفي"
},
@@ -102,17 +103,17 @@
"common": {
"switch_to_tab": "التبديل إلى %s",
"compose_new_post": "تأليف منشور جديد",
- "show_favorites": "إظهار المفضلة",
- "open_settings": "أفتح الإعدادات"
+ "show_favorites": "إظهار المُفضَّلة",
+ "open_settings": "فَتحُ الإعدادات"
},
"timeline": {
"previous_status": "المنشور السابق",
"next_status": "المنشور التالي",
- "open_status": "افتح المنشور",
- "open_author_profile": "افتح الملف التعريفي للمؤلف",
- "open_reblogger_profile": "افتح الملف التعريفي لمشارِك المنشور",
- "reply_status": "رد على المنشور",
- "toggle_reblog": "تبديل إعادة تدوين منشور",
+ "open_status": "فتح المنشور",
+ "open_author_profile": "فتح الملف التعريفي للمؤلف",
+ "open_reblogger_profile": "فتح الملف التعريفي لمُعيد تدوين المنشور",
+ "reply_status": "الرَّد على مَنشور",
+ "toggle_reblog": "تبديل إعادة تدوين مَنشور",
"toggle_favorite": "تبديل المفضلة لِمنشور",
"toggle_content_warning": "تبديل تحذير المُحتَوى",
"preview_image": "معاينة الصورة"
@@ -124,131 +125,148 @@
},
"status": {
"user_reblogged": "أعادَ %s تدوينها",
- "user_replied_to": "رد على %s",
- "show_post": "اظهر المنشور",
- "show_user_profile": "اظهر الملف التعريفي للمستخدم",
- "content_warning": "تحذير عن المحتوى",
- "media_content_warning": "انقر على أي مكان للكشف",
+ "user_replied_to": "رَدًا على %s",
+ "show_post": "إظهار منشور",
+ "show_user_profile": "إظهار الملف التعريفي للمُستخدِم",
+ "content_warning": "تحذير المُحتوى",
+ "media_content_warning": "انقر للكشف",
"poll": {
"vote": "صَوِّت",
"closed": "انتهى"
},
"actions": {
- "reply": "رد",
+ "reply": "الرَّد",
"reblog": "إعادة النشر",
- "unreblog": "تراجع عن إعادة النشر",
- "favorite": "إضافة إلى المفضلة",
- "unfavorite": "إزالة من المفضلة",
- "menu": "القائمة"
+ "unreblog": "التراجُع عن إعادة النشر",
+ "favorite": "التفضيل",
+ "unfavorite": "إزالة التفضيل",
+ "menu": "القائمة",
+ "hide": "إخفاء"
},
"tag": {
"url": "عنوان URL",
- "mention": "أشر إلى",
- "link": "الرابط",
- "hashtag": "الوسم",
- "email": "البريد الإلكتروني",
- "emoji": "إيموجي"
+ "mention": "إشارة",
+ "link": "رابط",
+ "hashtag": "وسم",
+ "email": "بريد إلكتروني",
+ "emoji": "رمز تعبيري"
+ },
+ "visibility": {
+ "unlisted": "يُمكِنُ لِلجَميعِ رُؤيَةُ هَذَا المَنشورِ وَلكِنَّهُ لَا يُعرَضُ فِي الخَطِّ الزَمنيّ العام.",
+ "private": "فَقَطْ مُتابِعينَهُم مَن يُمكِنُهُم رُؤيَةُ هَذَا المَنشُور.",
+ "private_from_me": "فَقَطْ مُتابِعيني أنَا مَن يُمكِنُهُم رُؤيَةُ هَذَا المَنشُور.",
+ "direct": "المُستخدمِونَ المُشارِ إليهم فَقَطْ مَن يُمكِنُهُم رُؤيَةُ هَذَا المَنشُور."
}
},
"friendship": {
- "follow": "اتبع",
+ "follow": "مُتابَعَة",
"following": "مُتابَع",
"request": "إرسال طَلَب",
"pending": "قيد المُراجعة",
"block": "حظر",
"block_user": "حظر %s",
"block_domain": "حظر %s",
- "unblock": "إلغاء الحَظر",
- "unblock_user": "إلغاء حظر %s",
+ "unblock": "رفع الحَظر",
+ "unblock_user": "رفع الحَظر عن %s",
"blocked": "محظور",
- "mute": "أكتم",
- "mute_user": "أكتم %s",
- "unmute": "إلغاء الكتم",
- "unmute_user": "إلغاء كتم %s",
+ "mute": "كَتم",
+ "mute_user": "كَتم %s",
+ "unmute": "رفع الكتم",
+ "unmute_user": "رفع الكتم عن %s",
"muted": "مكتوم",
"edit_info": "تعديل المعلومات"
},
"timeline": {
"filtered": "مُصفَّى",
"timestamp": {
- "now": "الأن"
+ "now": "الآن"
},
"loader": {
- "load_missing_posts": "تحميل المنشورات المَفقودة",
- "loading_missing_posts": "تحميل المزيد من المنشورات...",
- "show_more_replies": "إظهار المزيد من الردود"
+ "load_missing_posts": "تحميل المَنشورات المَفقودَة",
+ "loading_missing_posts": "يَجري تحميل المَنشورات المَفقودَة...",
+ "show_more_replies": "إظهار مَزيد مِنَ الرُّدود"
},
"header": {
- "no_status_found": "لا توجد هناك منشورات",
- "blocking_warning": "لا يُمكنك الاطلاع على الملف الشخصي لهذا المُستخدِم\nحتَّى تَرفعَ الحَظر عنه.\nملفًّكَ الشخصي يَظهَرُ بِمثل هذِهِ الحالة بالنسبةِ لَهُ أيضًا.",
- "user_blocking_warning": "لا يُمكنك الاطلاع على ملف %s الشخصي\nحتَّى تَرفعَ الحَظر عنه.\nملفًّكَ الشخصي يَظهَرُ بِمثل هذِهِ الحالة بالنسبةِ لَهُ أيضًا.",
- "blocked_warning": "لا يُمكِنُكَ عَرض الملف الشخصي لهذا المُستخدِم\nحتَّى يَرفَعَ الحَظر عَنك.",
- "user_blocked_warning": "لا يُمكِنُكَ عَرض ملف %s الشخصي\nحتَّى يَرفَعَ الحَظر عَنك.",
+ "no_status_found": "لَم يُعْثَر على مَنشورات",
+ "blocking_warning": "لا يُمكِنُكَ الاِطلاع على الملف التَعريفي لهذا المُستخدِم\nحتَّى تَرفعَ الحَظر عنه.\nملفُّكَ التَعريفي يَظهَرُ بِمثل هذِهِ الحالة بالنسبةِ لَهُ أيضًا.",
+ "user_blocking_warning": "لا يُمكنك الاطلاع على ملف %s التَعريفي\nحتَّى تَرفعَ الحَظر عنه.\nملفُّكَ التَعريفي يَظهَرُ بِمثل هذِهِ الحالة بالنسبةِ لَهُ أيضًا.",
+ "blocked_warning": "لا يُمكِنُكَ عَرض الملف التَعريفي لهذا المُستخدِم\nحتَّى يَرفَعَ الحَظرَ عَنك.",
+ "user_blocked_warning": "لا يُمكِنُكَ عَرض ملف %s التَعريفي\nحتَّى يَرفَعَ الحَظر عَنك.",
"suspended_warning": "تمَّ إيقاف هذا المُستخدِم.",
- "user_suspended_warning": "لقد أوقِفَ حِساب %s."
+ "user_suspended_warning": "لقد أُوقِفَ حِساب %s."
}
}
}
},
"scene": {
"welcome": {
- "slogan": "شبكات التواصل الاجتماعي\nمرة أُخرى بين يديك."
+ "slogan": "شبكات التواصل الاجتماعي\nمرة أُخرى بين يديك.",
+ "get_started": "ابدأ الآن",
+ "log_in": "تسجيلُ الدخول"
},
"server_picker": {
- "title": "اِختر خادِم،\nأي خادِم.",
+ "title": "اِختر خادِم،\nأيًّا مِنهُم.",
+ "subtitle": "اختر مجتمعًا بناءً على اهتماماتك، منطقتك أو يمكنك حتى اختيارُ مجتمعٍ ذي غرضٍ عام.",
+ "subtitle_extend": "اختر مجتمعًا بناءً على اهتماماتك، منطقتك أو يمكنك حتى اختيارُ مجتمعٍ ذي غرضٍ عام. تُشغَّل جميعُ المجتمعِ مِن قِبَلِ مُنظمَةٍ أو فردٍ مُستقلٍ تمامًا.",
"button": {
"category": {
"all": "الكل",
"all_accessiblity_description": "الفئة: الكل",
"academia": "أكاديمي",
- "activism": "للنشطاء",
+ "activism": "النشطاء",
"food": "الطعام",
- "furry": "فروي",
+ "furry": "مكسو بالفرو",
"games": "ألعاب",
"general": "عام",
"journalism": "صحافة",
"lgbt": "مجتمع الشواذ",
- "regional": "اقليمي",
- "art": "فن",
+ "regional": "إقليمي",
+ "art": "فنون",
"music": "موسيقى",
- "tech": "تكنولوجيا"
+ "tech": "تقنية"
},
- "see_less": "اعرض أقل",
- "see_more": "اعرض المزيد"
+ "see_less": "عرض عناصر أقل",
+ "see_more": "عرض عناصر أكثر"
},
"label": {
- "language": "اللغة",
- "users": "مستخدمون·ات",
+ "language": "اللُّغة",
+ "users": "مُستَخدِم",
"category": "الفئة"
},
"input": {
- "placeholder": "ابحث عن خادم أو انضم إلى سيرفر خاص بك..."
+ "placeholder": "اِبحَث عن خادِم أو انضم إلى آخر خاص بك..."
},
"empty_state": {
- "finding_servers": "البحث عن خوادم متوفرة...",
+ "finding_servers": "يجري إيجاد خوادم متوفِّرَة...",
"bad_network": "حدث خطأٌ ما أثناء تحميل البيانات. تحقَّق من اتصالك بالإنترنت.",
"no_results": "لا توجد نتائج"
}
},
"register": {
- "title": "أخبرنا عنك.",
+ "title": "أخبرنا عن نفسك.",
"input": {
"avatar": {
- "delete": "احذف"
+ "delete": "حذف"
},
"username": {
- "placeholder": "اسم المستخدم",
- "duplicate_prompt": "اسم المستخدم هذا غير متوفر."
+ "placeholder": "اِسم مُستَخدِم",
+ "duplicate_prompt": "اِسم المُستَخدِم هذا مأخوذٌ بالفعل."
},
"display_name": {
- "placeholder": "الاسم المعروض"
+ "placeholder": "اِسم العَرض"
},
"email": {
- "placeholder": "البريد الإلكتروني"
+ "placeholder": "بريد إلكتروني"
},
"password": {
- "placeholder": "الكلمة السرية",
- "hint": "يجب أن تكون كلمتك السرية متكونة من ثمانية أحرف على الأقل"
+ "placeholder": "رمز سري",
+ "require": "رمز المرور الخاص بك يجب أن يحتوي على الأقل:",
+ "character_limit": "ثمانيةُ خانات",
+ "accessibility": {
+ "checked": "مُتَحَققٌ مِنه",
+ "unchecked": "غيرُ مُتَحَققٍ مِنه"
+ },
+ "hint": "يجب أن يكون رمزك السري مكوَّن من ثمان خانات على الأقل"
},
"invite": {
"registration_user_invite_request": "لماذا ترغب في الانضمام؟"
@@ -256,10 +274,10 @@
},
"error": {
"item": {
- "username": "اسم المستخدم",
+ "username": "اِسم المُستَخدِم",
"email": "البريد الإلكتروني",
- "password": "الكلمة السرية",
- "agreement": "الاتفاقية",
+ "password": "الرمز السري",
+ "agreement": "الاِتِّفاقيَّة",
"locale": "اللغة المحلية",
"reason": "السبب"
},
@@ -269,40 +287,40 @@
"taken": "إنَّ %s مُستخدَمٌ بالفعل",
"reserved": "إنَّ %s عبارة عن كلمة مفتاحيَّة محجوزة",
"accepted": "يجب أن يُقبل %s",
- "blank": "%s مطلوب",
+ "blank": "%s مَطلوب",
"invalid": "%s غير صالح",
"too_long": "%s طويل جداً",
- "too_short": "%s قصير جدا",
+ "too_short": "%s قصير جدًا",
"inclusion": "إنَّ %s قيمة غير مدعومة"
},
"special": {
"username_invalid": "يُمكِن أن يحتوي اسم المستخدم على أحرف أبجدية، أرقام وشرطات سفلية فقط",
- "username_too_long": "اسم المستخدم طويل جداً (يجب ألّا يكون أطول من 30 رمز)",
+ "username_too_long": "اِسم المُستَخدِم طويل جداً (يَجِبُ ألّا يكون أطول من ثلاثين خانة)",
"email_invalid": "هذا عنوان بريد إلكتروني غير صالح",
- "password_too_short": "كلمة المرور قصيرة جداً (يجب أن تكون 8 أحرف على الأقل)"
+ "password_too_short": "رمز السر قصير جدًا (يجب أن يتكون من ثمان خانات على الأقل)"
}
}
},
"server_rules": {
"title": "بعض القواعد الأساسية.",
- "subtitle": "تم سنّ هذه القواعد من قبل مشرفي %s.",
- "prompt": "إن اخترت المواصلة، فإنك تخضع لشروط الخدمة وسياسة الخصوصية لـ %s.",
- "terms_of_service": "شروط الخدمة",
- "privacy_policy": "سياسة الخصوصية",
+ "subtitle": "سُنَّت هذه القواعد من قِبل مشرفي %s.",
+ "prompt": "في حال إختيارك للمواصلة، أنت تخضع لشروط الخدمة وسياسة الخصوصية لِـ%s.",
+ "terms_of_service": "شُرُوط الخِدمَة",
+ "privacy_policy": "سِياسَة الخُصُوصيَّة",
"button": {
- "confirm": "انا أوافق"
+ "confirm": "أنا مُوافِق"
}
},
"confirm_email": {
- "title": "شيء واحد أخير.",
- "subtitle": "لقد أرسلنا للتو رسالة بريد إلكتروني إلى %s،\nاضغط على الرابط لتأكيد حسابك.",
+ "title": "شيءٌ أخير.",
+ "subtitle": "لقد أرسلنا للتو بريد إلكتروني إلى %s،\nانقر على الرابط لتأكيد حسابك.",
"button": {
- "open_email_app": "افتح تطبيق البريد الإلكتروني",
- "dont_receive_email": "لم أستلم أبدًا بريدا إلكترونيا"
+ "open_email_app": "فتح تطبيق البريد الإلكتروني",
+ "resend": "إعادَةُ الإرسال"
},
"dont_receive_email": {
"title": "تحقق من بريدك الإلكتروني",
- "description": "تحقق ممَّ إذا كان عنوان بريدك الإلكتروني صحيحًا وكذلك تأكد مِن مجلد البريد غير الهام إذا لم تكن قد فعلت ذلك.",
+ "description": "تحقق ممَّ إذا كان عنوان بريدك الإلكتروني صحيحًا، وكذلك تأكد مِن مجلد البريد غير الهام إذا لم تكن قد فعلت ذلك.",
"resend_email": "إعادة إرسال البريد الإلكتروني"
},
"open_email_app": {
@@ -313,12 +331,12 @@
}
},
"home_timeline": {
- "title": "الخيط الرئيسي",
+ "title": "الرَّئِيسَة",
"navigation_bar_state": {
- "offline": "غير متصل",
+ "offline": "غَير مُتَّصِل",
"new_posts": "إظهار منشورات جديدة",
- "published": "تم نشره!",
- "Publishing": "جارٍ نشر المشاركة…"
+ "published": "تمَّ النَّشر!",
+ "Publishing": "يَجري نَشر المُشارَكَة..."
}
},
"suggestion_account": {
@@ -328,31 +346,31 @@
"compose": {
"title": {
"new_post": "منشور جديد",
- "new_reply": "رد جديد"
+ "new_reply": "رَدٌّ جديد"
},
"media_selection": {
- "camera": "التقط صورة",
+ "camera": "إلتقاط صورة",
"photo_library": "مكتبة الصور",
"browse": "تصفح"
},
"content_input_placeholder": "أخبِرنا بِما يَجُولُ فِي ذِهنَك",
- "compose_action": "انشر",
- "replying_to_user": "رد على %s",
+ "compose_action": "نَشر",
+ "replying_to_user": "رَدًا على %s",
"attachment": {
"photo": "صورة",
- "video": "فيديو",
- "attachment_broken": "هذا ال%s مُعطَّل ويتعذَّر رفعه إلى ماستودون.",
- "description_photo": "صِف الصورة للمكفوفين...",
- "description_video": "صِف المقطع المرئي للمكفوفين..."
+ "video": "مقطع مرئي",
+ "attachment_broken": "هذا ال%s مُعطَّل\nويتعذَّرُ رفعُه إلى ماستودون.",
+ "description_photo": "صِف الصورة للمَكفوفين...",
+ "description_video": "صِف المقطع المرئي للمَكفوفين..."
},
"poll": {
- "duration_time": "المدة: %s",
- "thirty_minutes": "30 دقيقة",
- "one_hour": "ساعة واحدة",
- "six_hours": "6 ساعات",
- "one_day": "يوم واحد",
- "three_days": "3 أيام",
- "seven_days": "7 أيام",
+ "duration_time": "المُدَّة: %s",
+ "thirty_minutes": "ثلاثون دقيقة",
+ "one_hour": "ساعةٌ واحدة",
+ "six_hours": "سِتُّ ساعات",
+ "one_day": "يومٌ واحِد",
+ "three_days": "ثلاثةُ أيام",
+ "seven_days": "سبعةُ أيام",
"option_number": "الخيار %ld"
},
"content_warning": {
@@ -361,33 +379,33 @@
"visibility": {
"public": "للعامة",
"unlisted": "غير مُدرَج",
- "private": "لمتابعيك فقط",
- "direct": "ففط للأشخاص المشار إليهم"
+ "private": "للمُتابِعينَ فقط",
+ "direct": "للأشخاص المُشار إليهم فقط"
},
"auto_complete": {
- "space_to_add": "انقر مساحة لإضافتِها"
+ "space_to_add": "انقر على مساحة لإضافتِها"
},
"accessibility": {
"append_attachment": "إضافة مُرفَق",
"append_poll": "اضافة استطلاع رأي",
"remove_poll": "إزالة الاستطلاع",
- "custom_emoji_picker": "منتقي مخصص للإيموجي",
- "enable_content_warning": "تنشيط تحذير المحتوى",
- "disable_content_warning": "تعطيل تحذير الحتوى",
+ "custom_emoji_picker": "منتقي الرموز التعبيرية المُخصَّص",
+ "enable_content_warning": "تفعيل تحذير المُحتَوى",
+ "disable_content_warning": "تعطيل تحذير المُحتَوى",
"post_visibility_menu": "قائمة ظهور المنشور"
},
"keyboard": {
"discard_post": "تجاهُل المنشور",
"publish_post": "نَشر المَنشُور",
"toggle_poll": "تبديل الاستطلاع",
- "toggle_content_warning": "تبديل تحذير المُحتوى",
+ "toggle_content_warning": "تبديل تحذير المُحتَوى",
"append_attachment_entry": "إضافة مُرفَق - %s",
"select_visibility_entry": "اختر مدى الظهور - %s"
}
},
"profile": {
"dashboard": {
- "posts": "منشورات",
+ "posts": "مَنشورات",
"following": "مُتابَع",
"followers": "متابِع"
},
@@ -395,22 +413,32 @@
"add_row": "إضافة صف",
"placeholder": {
"label": "التسمية",
- "content": "المحتوى"
+ "content": "المُحتَوى"
}
},
"segmented_control": {
- "posts": "منشورات",
- "replies": "ردود",
- "media": "وسائط"
+ "posts": "مَنشورات",
+ "replies": "رُدُود",
+ "posts_and_replies": "المَنشوراتُ وَالرُدود",
+ "media": "وَسائِط",
+ "about": "حَول"
},
"relationship_action_alert": {
- "confirm_unmute_user": {
- "title": "إلغاء كتم الحساب",
- "message": "أكِّد لرفع كتمْ %s"
+ "confirm_mute_user": {
+ "title": "كَتمُ الحِساب",
+ "message": "تأكيدُ كَتم %s"
},
- "confirm_unblock_usre": {
- "title": "إلغاء حظر الحساب",
- "message": "أكِّد لرفع حظر %s"
+ "confirm_unmute_user": {
+ "title": "رفع الكتم عن الحساب",
+ "message": "أكِّد لرفع الكتمْ عن %s"
+ },
+ "confirm_block_user": {
+ "title": "حَظرُ الحِساب",
+ "message": "تأكيدُ حَظر %s"
+ },
+ "confirm_unblock_user": {
+ "title": "رَفعُ الحَظرِ عَنِ الحِساب",
+ "message": "تأكيدُ رَفع الحَظرِ عَن %s"
}
}
},
@@ -421,52 +449,54 @@
"footer": "لا يُمكِن عَرض المُتابَعات مِنَ الخوادم الأُخرى."
},
"search": {
- "title": "بحث",
+ "title": "البحث",
"search_bar": {
- "placeholder": "البحث عن وسوم أو مستخدمين·ات",
+ "placeholder": "البحث عن وسوم أو مستخدمين",
"cancel": "إلغاء"
},
"recommend": {
- "button_text": "طالع الكل",
+ "button_text": "إظهار الكُل",
"hash_tag": {
- "title": "ذات شعبية على ماستدون",
- "description": "الوسوم التي تحظى بقدر كبير من الاهتمام",
+ "title": "ذُو شعبيَّة على ماستودون",
+ "description": "الوُسُومُ الَّتي تَحظى بقدرٍ كبيرٍ مِنَ الاِهتمام",
"people_talking": "%s أشخاص يتحدَّثوا"
},
"accounts": {
- "title": "حسابات قد تعجبك",
- "description": "قد ترغب في متابعة هذه الحسابات",
- "follow": "تابع"
+ "title": "حِساباتٍ قَد تُعجِبُك",
+ "description": "قَد تَرغَب في مُتابَعَةِ هَذِهِ الحِسابات",
+ "follow": "مُتابَعَة"
}
},
"searching": {
"segment": {
- "all": "الكل",
+ "all": "الكُل",
"people": "الأشخاص",
- "hashtags": "الوسوم",
- "posts": "المنشورات"
+ "hashtags": "الوُسُوم",
+ "posts": "المَنشورات"
},
"empty_state": {
- "no_results": "ليس هناك أية نتيجة"
+ "no_results": "لا تُوجَدُ نتائِج"
},
- "recent_search": "عمليات البحث الأخيرة",
+ "recent_search": "عَمَليَّاُت البَحثِ الأخيرَة",
"clear": "مَحو"
}
},
"favorite": {
- "title": "مفضلتك"
+ "title": "مُفضَّلَتُك"
},
"notification": {
"title": {
- "Everything": "الكل",
+ "Everything": "كُلُّ شيء",
"Mentions": "الإشارات"
},
- "user_followed_you": "يتابعك %s",
- "user_favorited your post": "أضاف %s منشورك إلى مفضلته",
- "user_reblogged_your_post": "أعاد %s تدوين مشاركتك",
- "user_mentioned_you": "أشار إليك %s",
- "user_requested_to_follow_you": "طلب %s متابعتك",
- "user_your_poll_has_ended": "%s اِنتهى استطلاعُكَ للرأي",
+ "notification_description": {
+ "followed_you": "بَدَأ بِمُتابَعَتِك",
+ "favorited_your_post": "فَضَّلَ مَنشُورَك",
+ "reblogged_your_post": "أعادَ تَدوينَ مَنشُورَك",
+ "mentioned_you": "أشارَ إليك",
+ "request_to_follow_you": "طَلَبَ مُتابَعتَك",
+ "poll_has_ended": "انتهى استطلاعُ الرأي"
+ },
"keyobard": {
"show_everything": "إظهار كل شيء",
"show_mentions": "إظهار الإشارات"
@@ -480,60 +510,70 @@
"title": "الإعدادات",
"section": {
"appearance": {
- "title": "المظهر",
+ "title": "المَظهر",
"automatic": "تلقائي",
"light": "مضيءٌ دائمًا",
"dark": "مظلمٌ دائِمًا"
},
+ "look_and_feel": {
+ "title": "المَظهَرُ وَالشُّعُور",
+ "use_system": "استخدم النِظام",
+ "really_dark": "مُظلمٌ حَقًّا",
+ "sorta_dark": "مُظلمٌ نوعًا ما",
+ "light": "مُضيء"
+ },
"notifications": {
"title": "الإشعارات",
- "favorites": "الإعجاب بِمنشوراتي",
- "follows": "يتابعني",
- "boosts": "إعادة تدوين منشوراتي",
- "mentions": "الإشارة لي",
+ "favorites": "بِالإعْجاب بِمَنشوري",
+ "follows": "بِمُتابَعَتي",
+ "boosts": "بِإعادَةِ تدوينِ مَنشوري",
+ "mentions": "بِالإشارَةِ إليّ",
"trigger": {
- "anyone": "أي شخص",
- "follower": "مشترِك",
+ "anyone": "أيُّ شخصٍ",
+ "follower": "مُتابِعٌ",
"follow": "أي شخص أُتابِعُه",
- "noone": "لا أحد",
- "title": "إشعاري عِندَ"
+ "noone": "لَا أحد",
+ "title": "أشعِرني عِندما يَقومُ"
}
},
"preference": {
- "title": "التفضيلات",
- "true_black_dark_mode": "النمط الأسود الداكِن الحقيقي",
- "disable_avatar_animation": "تعطيل الصور الرمزية المتحرِّكة",
- "disable_emoji_animation": "تعطيل الرموز التعبيرية المتحرِّكَة",
- "using_default_browser": "اِستخدام المتصفح الافتراضي لفتح الروابط"
+ "title": "التَّفضيلات",
+ "true_black_dark_mode": "النَّمَطُ الأسوَدُ الداكِنُ الحَقيقي",
+ "disable_avatar_animation": "تَعطيلُ الصوَرِ الرمزيَّةِ المُتحرِّكَة",
+ "disable_emoji_animation": "تَعطيلُ الرُموزِ التَّعبيريَّةِ المُتحرِّكَة",
+ "using_default_browser": "اِستِخدامُ المُتصفِّحِ الاِفتراضي لِفتحِ الرَّوابِط"
},
"boring_zone": {
- "title": "المنطقة المملة",
- "account_settings": "إعدادات الحساب",
- "terms": "شروط الخدمة",
- "privacy": "سياسة الخصوصية"
+ "title": "المنطِقَةُ المُملَّة",
+ "account_settings": "إعداداتُ الحِساب",
+ "terms": "شُرُوطُ الخِدمَة",
+ "privacy": "سِياسَةُ الخُصوصيَّة"
},
"spicy_zone": {
- "title": "المنطقة الحارة",
- "clear": "مسح ذاكرة التخزين المؤقت للوسائط",
- "signout": "تسجيل الخروج"
+ "title": "المنطِقَةُ اللَّاذِعَة",
+ "clear": "مَحوُ ذاكِرَةُ التَّخزينِ المُؤقت لِلوسائِط",
+ "signout": "تَسجيلُ الخُروج"
}
},
"footer": {
- "mastodon_description": "ماستدون برنامج مفتوح المصدر. يمكنك المساهمة، أو الإبلاغ عن تقارير الأخطاء على GitHub في %s (%s)"
+ "mastodon_description": "ماستودون بَرنامجٌ مَفتُوحُ المَصدَر. يُمكِنُكَ المُساهَمَةُ، أوِ الإبلاغُ عَنِ المُشكِلات عَن طريق مِنصَّة جيت هاب (GitHub) في %s (%s)"
},
"keyboard": {
"close_settings_window": "إغلاق نافذة الإعدادات"
}
},
"report": {
- "title": "ابلغ عن %s",
- "step1": "الخطوة 1 من 2",
- "step2": "الخطوة 2 من 2",
- "content1": "هل ترغب في إضافة أي مشاركات أُخرى إلى الشكوى؟",
- "content2": "هل هناك أي شيء يجب أن يعرفه المُراقبين حول هذه الشكوى؟",
- "send": "إرسال الشكوى",
+ "title_report": "إبلاغ",
+ "title": "الإبلاغ عن %s",
+ "step1": "الخطوة الأولى مِن أصل اثنتين",
+ "step2": "الخطوة الثانية والأخيرة",
+ "content1": "هل ترغب في إضافة أي منشورات أُخرى إلى البلاغ؟",
+ "content2": "هل هناك أي شيء يجب أن يعرفه المُراقبين حول هذا البلاغ؟",
+ "report_sent_title": "شُكرًا لَكَ على الإبلاغ، سَوفَ نَنظُرُ فِي هَذَا الأمر.",
+ "send": "إرسال البلاغ",
"skip_to_send": "إرسال بدون تعليق",
- "text_placeholder": "اكتب أو الصق تعليقات إضافيَّة"
+ "text_placeholder": "اكتب أو الصق تعليقات إضافيَّة",
+ "reported": "مُبْلَغٌ عَنه"
},
"preview": {
"keyboard": {
@@ -543,14 +583,14 @@
}
},
"account_list": {
- "tab_bar_hint": "المِلف المُحدَّد حاليًا: %s. انقر نقرًا مزدوجًا ثم اضغط مع الاستمرار لإظهار مُبدِّل الحِساب",
- "dismiss_account_switcher": "تجاهُل مبدِّل الحساب",
- "add_account": "إضافة حساب"
+ "tab_bar_hint": "المِلف المُحدَّد حاليًا: %s. انقر نقرًا مزدوجًا مع الاستمرار لإظهار مُبدِّل الحِساب",
+ "dismiss_account_switcher": "تجاهُل مبدِّل الحِساب",
+ "add_account": "إضافَةُ حِساب"
},
"wizard": {
"new_in_mastodon": "جديد في ماستودون",
"multiple_account_switch_intro_description": "بدِّل بين حسابات متعددة عبر الاستمرار بالضغط على زر الملف الشخصي.",
- "accessibility_hint": "انقر نقرًا مزدوجًا لتجاهل النافذة المنبثقة"
+ "accessibility_hint": "انقر نقرًا مزدوجًا لتجاهُل النافذة المنبثقة"
}
}
}
\ No newline at end of file
diff --git a/Localization/StringsConvertor/input/ca_ES/app.json b/Localization/StringsConvertor/input/ca_ES/app.json
index 2ecd587c6..c3aac1e5e 100644
--- a/Localization/StringsConvertor/input/ca_ES/app.json
+++ b/Localization/StringsConvertor/input/ca_ES/app.json
@@ -46,7 +46,7 @@
},
"delete_post": {
"title": "Estàs segur que vols suprimir aquesta publicació?",
- "delete": "Esborra"
+ "message": "Estàs segur que vols suprimir aquesta publicació?"
},
"clean_cache": {
"title": "Neteja la memòria cau",
@@ -82,6 +82,7 @@
"share_user": "Compartir %s",
"share_post": "Compartir Publicació",
"open_in_safari": "Obrir a Safari",
+ "open_in_browser": "Obre al navegador",
"find_people": "Busca persones per seguir",
"manually_search": "Cerca manualment a canvi",
"skip": "Omet",
@@ -139,7 +140,8 @@
"unreblog": "Desfer l'impuls",
"favorite": "Favorit",
"unfavorite": "Desfer Favorit",
- "menu": "Menú"
+ "menu": "Menú",
+ "hide": "Amaga"
},
"tag": {
"url": "URL",
@@ -148,6 +150,12 @@
"hashtag": "Etiqueta",
"email": "Correu electrònic",
"emoji": "Emoji"
+ },
+ "visibility": {
+ "unlisted": "Tothom pot veure aquesta publicació però no es mostra en la línia de temps pública.",
+ "private": "Només els seus seguidors poden veure aquesta publicació.",
+ "private_from_me": "Només els meus seguidors poden veure aquesta publicació.",
+ "direct": "Només l'usuari mencionat pot veure aquesta publicació."
}
},
"friendship": {
@@ -192,10 +200,14 @@
},
"scene": {
"welcome": {
- "slogan": "Xarxa social\nde nou a les teves mans."
+ "slogan": "Xarxa social\nde nou a les teves mans.",
+ "get_started": "Comença",
+ "log_in": "Inicia sessió"
},
"server_picker": {
"title": "Tria un servidor,\nqualsevol servidor.",
+ "subtitle": "Tria una comunitat segons els teus interessos, regió o una de propòsit general.",
+ "subtitle_extend": "Tria una comunitat segons els teus interessos, regió o una de propòsit general. Cada comunitat és operada per una organització totalment independent o individualment.",
"button": {
"category": {
"all": "Totes",
@@ -248,6 +260,12 @@
},
"password": {
"placeholder": "contrasenya",
+ "require": "La teva contrasenya com a mínim necessita:",
+ "character_limit": "8 caràcters",
+ "accessibility": {
+ "checked": "verificat",
+ "unchecked": "no verificat"
+ },
"hint": "La teva contrasenya ha de tenir com a mínim buit caràcters"
},
"invite": {
@@ -298,7 +316,7 @@
"subtitle": "Acabem d'enviar un correu electrònic a %s,\ntoca l'enllaç per a confirmar el teu compte.",
"button": {
"open_email_app": "Obre l'aplicació de correu",
- "dont_receive_email": "No he rebut cap correu electrònic"
+ "resend": "Reenvia"
},
"dont_receive_email": {
"title": "Comprova el teu correu",
@@ -401,16 +419,26 @@
"segmented_control": {
"posts": "Publicacions",
"replies": "Respostes",
- "media": "Mèdia"
+ "posts_and_replies": "Publicacions i Respostes",
+ "media": "Mèdia",
+ "about": "Quant a"
},
"relationship_action_alert": {
+ "confirm_mute_user": {
+ "title": "Silencia el Compte",
+ "message": "Confirma per a silenciar %s"
+ },
"confirm_unmute_user": {
"title": "Desfer silenciar compte",
"message": "Confirma deixar de silenciar a %s"
},
- "confirm_unblock_usre": {
- "title": "Desbloquejar Compte",
- "message": "Confirma desbloquejar a %s"
+ "confirm_block_user": {
+ "title": "Bloqueja el Compte",
+ "message": "Confirma per a bloquejar %s"
+ },
+ "confirm_unblock_user": {
+ "title": "Desbloqueja el Compte",
+ "message": "Confirma per a desbloquejar %s"
}
}
},
@@ -461,12 +489,14 @@
"Everything": "Tot",
"Mentions": "Mencions"
},
- "user_followed_you": "%s et segueix",
- "user_favorited your post": "%s ha afavorit el teu estat",
- "user_reblogged_your_post": "%s ha impulsat el teu estat",
- "user_mentioned_you": "%s t'ha esmentat",
- "user_requested_to_follow_you": "%s ha sol·licitat seguir-te",
- "user_your_poll_has_ended": "%s L'enquesta ha finalitzat",
+ "notification_description": {
+ "followed_you": "et segueix",
+ "favorited_your_post": "ha afavorit la teva publicació",
+ "reblogged_your_post": "ha impulsat la teva publicació",
+ "mentioned_you": "t'ha mencionat",
+ "request_to_follow_you": "ha sol·licitat seguir-te",
+ "poll_has_ended": "la enquesta ha finalitzat"
+ },
"keyobard": {
"show_everything": "Mostrar-ho tot",
"show_mentions": "Mostrar Mencions"
@@ -485,6 +515,13 @@
"light": "Sempre Clara",
"dark": "Sempre Fosca"
},
+ "look_and_feel": {
+ "title": "Aspecte i Comportament",
+ "use_system": "Usa el del Sistema",
+ "really_dark": "Realment Negre",
+ "sorta_dark": "Una Mena de Fosc",
+ "light": "Clar"
+ },
"notifications": {
"title": "Notificacions",
"favorites": "Ha afavorit el meu estat",
@@ -526,14 +563,17 @@
}
},
"report": {
+ "title_report": "Informe",
"title": "Informa sobre %s",
"step1": "Pas 1 de 2",
"step2": "Pas 2 de 2",
"content1": "Hi ha alguna altre publicació que vulguis afegir a l'informe?",
"content2": "Hi ha alguna cosa que els moderadors hagin de saber sobre aquest informe?",
+ "report_sent_title": "Gràcies per informar, ho investigarem.",
"send": "Envia Informe",
"skip_to_send": "Envia sense comentaris",
- "text_placeholder": "Escriu o enganxa comentaris addicionals"
+ "text_placeholder": "Escriu o enganxa comentaris addicionals",
+ "reported": "REPORTAT"
},
"preview": {
"keyboard": {
diff --git a/Localization/StringsConvertor/input/cy_GB/app.json b/Localization/StringsConvertor/input/cy_GB/app.json
index 5c01ae7e0..ad99e178d 100644
--- a/Localization/StringsConvertor/input/cy_GB/app.json
+++ b/Localization/StringsConvertor/input/cy_GB/app.json
@@ -45,8 +45,8 @@
"message": "Please enable the photo library access permission to save the photo."
},
"delete_post": {
- "title": "Are you sure you want to delete this post?",
- "delete": "Delete"
+ "title": "Delete Post",
+ "message": "Are you sure you want to delete this post?"
},
"clean_cache": {
"title": "Clean Cache",
@@ -82,6 +82,7 @@
"share_user": "Share %s",
"share_post": "Share Post",
"open_in_safari": "Open in Safari",
+ "open_in_browser": "Open in Browser",
"find_people": "Find people to follow",
"manually_search": "Manually search instead",
"skip": "Skip",
@@ -139,7 +140,8 @@
"unreblog": "Undo reblog",
"favorite": "Favorite",
"unfavorite": "Unfavorite",
- "menu": "Menu"
+ "menu": "Menu",
+ "hide": "Hide"
},
"tag": {
"url": "URL",
@@ -148,6 +150,12 @@
"hashtag": "Hashtag",
"email": "Email",
"emoji": "Emoji"
+ },
+ "visibility": {
+ "unlisted": "Everyone can see this post but not display in the public timeline.",
+ "private": "Only their followers can see this post.",
+ "private_from_me": "Only my followers can see this post.",
+ "direct": "Only mentioned user can see this post."
}
},
"friendship": {
@@ -192,10 +200,14 @@
},
"scene": {
"welcome": {
- "slogan": "Social networking\nback in your hands."
+ "slogan": "Social networking\nback in your hands.",
+ "get_started": "Get Started",
+ "log_in": "Log In"
},
"server_picker": {
- "title": "Pick a server,\nany server.",
+ "title": "Mastodon is made of users in different communities.",
+ "subtitle": "Pick a community based on your interests, region, or a general purpose one.",
+ "subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": {
"category": {
"all": "All",
@@ -222,7 +234,7 @@
"category": "CATEGORY"
},
"input": {
- "placeholder": "Find a server or join your own..."
+ "placeholder": "Search communities"
},
"empty_state": {
"finding_servers": "Finding available servers...",
@@ -231,7 +243,7 @@
}
},
"register": {
- "title": "Tell us about you.",
+ "title": "Let’s get you set up on %s",
"input": {
"avatar": {
"delete": "Delete"
@@ -248,6 +260,12 @@
},
"password": {
"placeholder": "password",
+ "require": "Your password needs at least:",
+ "character_limit": "8 characters",
+ "accessibility": {
+ "checked": "checked",
+ "unchecked": "unchecked"
+ },
"hint": "Your password needs at least eight characters"
},
"invite": {
@@ -285,7 +303,7 @@
},
"server_rules": {
"title": "Some ground rules.",
- "subtitle": "These rules are set by the admins of %s.",
+ "subtitle": "These are set and enforced by the %s moderators.",
"prompt": "By continuing, you’re subject to the terms of service and privacy policy for %s.",
"terms_of_service": "terms of service",
"privacy_policy": "privacy policy",
@@ -295,10 +313,10 @@
},
"confirm_email": {
"title": "One last thing.",
- "subtitle": "We just sent an email to %s,\ntap the link to confirm your account.",
+ "subtitle": "Tap the link we emailed to you to verify your account.",
"button": {
"open_email_app": "Open Email App",
- "dont_receive_email": "I never got an email"
+ "resend": "Resend"
},
"dont_receive_email": {
"title": "Check your email",
@@ -401,14 +419,24 @@
"segmented_control": {
"posts": "Posts",
"replies": "Replies",
- "media": "Media"
+ "posts_and_replies": "Posts and Replies",
+ "media": "Media",
+ "about": "About"
},
"relationship_action_alert": {
+ "confirm_mute_user": {
+ "title": "Mute Account",
+ "message": "Confirm to mute %s"
+ },
"confirm_unmute_user": {
"title": "Unmute Account",
"message": "Confirm to unmute %s"
},
- "confirm_unblock_usre": {
+ "confirm_block_user": {
+ "title": "Block Account",
+ "message": "Confirm to block %s"
+ },
+ "confirm_unblock_user": {
"title": "Unblock Account",
"message": "Confirm to unblock %s"
}
@@ -461,12 +489,14 @@
"Everything": "Everything",
"Mentions": "Mentions"
},
- "user_followed_you": "%s followed you",
- "user_favorited your post": "%s favorited your post",
- "user_reblogged_your_post": "%s reblogged your post",
- "user_mentioned_you": "%s mentioned you",
- "user_requested_to_follow_you": "%s requested to follow you",
- "user_your_poll_has_ended": "%s Your poll has ended",
+ "notification_description": {
+ "followed_you": "followed you",
+ "favorited_your_post": "favorited your post",
+ "reblogged_your_post": "reblogged your post",
+ "mentioned_you": "mentioned you",
+ "request_to_follow_you": "request to follow you",
+ "poll_has_ended": "poll has ended"
+ },
"keyobard": {
"show_everything": "Show Everything",
"show_mentions": "Show Mentions"
@@ -485,6 +515,13 @@
"light": "Always Light",
"dark": "Always Dark"
},
+ "look_and_feel": {
+ "title": "Look and Feel",
+ "use_system": "Use System",
+ "really_dark": "Really Dark",
+ "sorta_dark": "Sorta Dark",
+ "light": "Light"
+ },
"notifications": {
"title": "Notifications",
"favorites": "Favorites my post",
@@ -526,14 +563,17 @@
}
},
"report": {
+ "title_report": "Report",
"title": "Report %s",
"step1": "Step 1 of 2",
"step2": "Step 2 of 2",
"content1": "Are there any other posts you’d like to add to the report?",
"content2": "Is there anything the moderators should know about this report?",
+ "report_sent_title": "Thanks for reporting, we’ll look into this.",
"send": "Send Report",
"skip_to_send": "Send without comment",
- "text_placeholder": "Type or paste additional comments"
+ "text_placeholder": "Type or paste additional comments",
+ "reported": "REPORTED"
},
"preview": {
"keyboard": {
diff --git a/Localization/StringsConvertor/input/da_DK/app.json b/Localization/StringsConvertor/input/da_DK/app.json
index 5c01ae7e0..ad99e178d 100644
--- a/Localization/StringsConvertor/input/da_DK/app.json
+++ b/Localization/StringsConvertor/input/da_DK/app.json
@@ -45,8 +45,8 @@
"message": "Please enable the photo library access permission to save the photo."
},
"delete_post": {
- "title": "Are you sure you want to delete this post?",
- "delete": "Delete"
+ "title": "Delete Post",
+ "message": "Are you sure you want to delete this post?"
},
"clean_cache": {
"title": "Clean Cache",
@@ -82,6 +82,7 @@
"share_user": "Share %s",
"share_post": "Share Post",
"open_in_safari": "Open in Safari",
+ "open_in_browser": "Open in Browser",
"find_people": "Find people to follow",
"manually_search": "Manually search instead",
"skip": "Skip",
@@ -139,7 +140,8 @@
"unreblog": "Undo reblog",
"favorite": "Favorite",
"unfavorite": "Unfavorite",
- "menu": "Menu"
+ "menu": "Menu",
+ "hide": "Hide"
},
"tag": {
"url": "URL",
@@ -148,6 +150,12 @@
"hashtag": "Hashtag",
"email": "Email",
"emoji": "Emoji"
+ },
+ "visibility": {
+ "unlisted": "Everyone can see this post but not display in the public timeline.",
+ "private": "Only their followers can see this post.",
+ "private_from_me": "Only my followers can see this post.",
+ "direct": "Only mentioned user can see this post."
}
},
"friendship": {
@@ -192,10 +200,14 @@
},
"scene": {
"welcome": {
- "slogan": "Social networking\nback in your hands."
+ "slogan": "Social networking\nback in your hands.",
+ "get_started": "Get Started",
+ "log_in": "Log In"
},
"server_picker": {
- "title": "Pick a server,\nany server.",
+ "title": "Mastodon is made of users in different communities.",
+ "subtitle": "Pick a community based on your interests, region, or a general purpose one.",
+ "subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": {
"category": {
"all": "All",
@@ -222,7 +234,7 @@
"category": "CATEGORY"
},
"input": {
- "placeholder": "Find a server or join your own..."
+ "placeholder": "Search communities"
},
"empty_state": {
"finding_servers": "Finding available servers...",
@@ -231,7 +243,7 @@
}
},
"register": {
- "title": "Tell us about you.",
+ "title": "Let’s get you set up on %s",
"input": {
"avatar": {
"delete": "Delete"
@@ -248,6 +260,12 @@
},
"password": {
"placeholder": "password",
+ "require": "Your password needs at least:",
+ "character_limit": "8 characters",
+ "accessibility": {
+ "checked": "checked",
+ "unchecked": "unchecked"
+ },
"hint": "Your password needs at least eight characters"
},
"invite": {
@@ -285,7 +303,7 @@
},
"server_rules": {
"title": "Some ground rules.",
- "subtitle": "These rules are set by the admins of %s.",
+ "subtitle": "These are set and enforced by the %s moderators.",
"prompt": "By continuing, you’re subject to the terms of service and privacy policy for %s.",
"terms_of_service": "terms of service",
"privacy_policy": "privacy policy",
@@ -295,10 +313,10 @@
},
"confirm_email": {
"title": "One last thing.",
- "subtitle": "We just sent an email to %s,\ntap the link to confirm your account.",
+ "subtitle": "Tap the link we emailed to you to verify your account.",
"button": {
"open_email_app": "Open Email App",
- "dont_receive_email": "I never got an email"
+ "resend": "Resend"
},
"dont_receive_email": {
"title": "Check your email",
@@ -401,14 +419,24 @@
"segmented_control": {
"posts": "Posts",
"replies": "Replies",
- "media": "Media"
+ "posts_and_replies": "Posts and Replies",
+ "media": "Media",
+ "about": "About"
},
"relationship_action_alert": {
+ "confirm_mute_user": {
+ "title": "Mute Account",
+ "message": "Confirm to mute %s"
+ },
"confirm_unmute_user": {
"title": "Unmute Account",
"message": "Confirm to unmute %s"
},
- "confirm_unblock_usre": {
+ "confirm_block_user": {
+ "title": "Block Account",
+ "message": "Confirm to block %s"
+ },
+ "confirm_unblock_user": {
"title": "Unblock Account",
"message": "Confirm to unblock %s"
}
@@ -461,12 +489,14 @@
"Everything": "Everything",
"Mentions": "Mentions"
},
- "user_followed_you": "%s followed you",
- "user_favorited your post": "%s favorited your post",
- "user_reblogged_your_post": "%s reblogged your post",
- "user_mentioned_you": "%s mentioned you",
- "user_requested_to_follow_you": "%s requested to follow you",
- "user_your_poll_has_ended": "%s Your poll has ended",
+ "notification_description": {
+ "followed_you": "followed you",
+ "favorited_your_post": "favorited your post",
+ "reblogged_your_post": "reblogged your post",
+ "mentioned_you": "mentioned you",
+ "request_to_follow_you": "request to follow you",
+ "poll_has_ended": "poll has ended"
+ },
"keyobard": {
"show_everything": "Show Everything",
"show_mentions": "Show Mentions"
@@ -485,6 +515,13 @@
"light": "Always Light",
"dark": "Always Dark"
},
+ "look_and_feel": {
+ "title": "Look and Feel",
+ "use_system": "Use System",
+ "really_dark": "Really Dark",
+ "sorta_dark": "Sorta Dark",
+ "light": "Light"
+ },
"notifications": {
"title": "Notifications",
"favorites": "Favorites my post",
@@ -526,14 +563,17 @@
}
},
"report": {
+ "title_report": "Report",
"title": "Report %s",
"step1": "Step 1 of 2",
"step2": "Step 2 of 2",
"content1": "Are there any other posts you’d like to add to the report?",
"content2": "Is there anything the moderators should know about this report?",
+ "report_sent_title": "Thanks for reporting, we’ll look into this.",
"send": "Send Report",
"skip_to_send": "Send without comment",
- "text_placeholder": "Type or paste additional comments"
+ "text_placeholder": "Type or paste additional comments",
+ "reported": "REPORTED"
},
"preview": {
"keyboard": {
diff --git a/Localization/StringsConvertor/input/de_DE/app.json b/Localization/StringsConvertor/input/de_DE/app.json
index dc8cdf8c0..f62f9f95d 100644
--- a/Localization/StringsConvertor/input/de_DE/app.json
+++ b/Localization/StringsConvertor/input/de_DE/app.json
@@ -46,7 +46,7 @@
},
"delete_post": {
"title": "Bist du dir sicher, dass du diesen Beitrag löschen möchtest?",
- "delete": "Löschen"
+ "message": "Bist du dir sicher, dass du diesen Beitrag löschen willst?"
},
"clean_cache": {
"title": "Zwischenspeicher leeren",
@@ -67,7 +67,7 @@
"done": "Fertig",
"confirm": "Bestätigen",
"continue": "Fortfahren",
- "compose": "Compose",
+ "compose": "Neue Nachricht",
"cancel": "Abbrechen",
"discard": "Verwerfen",
"try_again": "Nochmals versuchen",
@@ -82,6 +82,7 @@
"share_user": "%s teilen",
"share_post": "Beitrag teilen",
"open_in_safari": "In Safari öffnen",
+ "open_in_browser": "Im Browser anzeigen",
"find_people": "Finde Personen zum Folgen",
"manually_search": "Stattdessen manuell suchen",
"skip": "Überspringen",
@@ -139,7 +140,8 @@
"unreblog": "Nicht mehr teilen",
"favorite": "Favorit",
"unfavorite": "Aus Favoriten entfernen",
- "menu": "Menü"
+ "menu": "Menü",
+ "hide": "Verstecken"
},
"tag": {
"url": "URL",
@@ -148,6 +150,12 @@
"hashtag": "Hashtag",
"email": "E-Mail",
"emoji": "Emoji"
+ },
+ "visibility": {
+ "unlisted": "Jeder kann diesen Post sehen, aber nicht in der öffentlichen Timeline zeigen.",
+ "private": "Nur Follower des Authors können diesen Beitrag sehen.",
+ "private_from_me": "Nur meine Follower können diesen Beitrag sehen.",
+ "direct": "Nur erwähnte Benutzer können diesen Beitrag sehen."
}
},
"friendship": {
@@ -192,10 +200,14 @@
},
"scene": {
"welcome": {
- "slogan": "Soziale Netzwerke wieder in deinen Händen."
+ "slogan": "Soziale Netzwerke wieder in deinen Händen.",
+ "get_started": "Erste Schritte",
+ "log_in": "Anmelden"
},
"server_picker": {
"title": "Wähle einen Server,\nbeliebigen Server.",
+ "subtitle": "Wähle eine Gemeinschaft, die auf deinen Interessen, Region oder einem allgemeinen Zweck basiert.",
+ "subtitle_extend": "Wähle eine Gemeinschaft basierend auf deinen Interessen, deiner Region oder einem allgemeinen Zweck. Jede Gemeinschaft wird von einer völlig unabhängigen Organisation oder Einzelperson betrieben.",
"button": {
"category": {
"all": "Alle",
@@ -248,6 +260,12 @@
},
"password": {
"placeholder": "Passwort",
+ "require": "Anforderungen an dein Passwort:",
+ "character_limit": "8 Zeichen",
+ "accessibility": {
+ "checked": "Häkchen gesetzt",
+ "unchecked": "Häkchen entfernt"
+ },
"hint": "Ihr Passwort muss mindestens 8 Zeichen lang sein"
},
"invite": {
@@ -298,7 +316,7 @@
"subtitle": "Wir haben gerade eine E-Mail an %s gesendet,\ntippe darin auf den Link, um Dein Konto zu bestätigen.",
"button": {
"open_email_app": "E-Mail-App öffnen",
- "dont_receive_email": "Ich habe keine E-Mail erhalten."
+ "resend": "Erneut senden"
},
"dont_receive_email": {
"title": "Bitte überprüfe deine E-Mails",
@@ -401,24 +419,34 @@
"segmented_control": {
"posts": "Beiträge",
"replies": "Antworten",
- "media": "Medien"
+ "posts_and_replies": "Beiträge und Antworten",
+ "media": "Medien",
+ "about": "Über"
},
"relationship_action_alert": {
+ "confirm_mute_user": {
+ "title": "Konto stummschalten",
+ "message": "Bestätige %s stumm zu schalten"
+ },
"confirm_unmute_user": {
"title": "Ton einschalten",
"message": "Bestätige um %s nicht mehr stummzuschalten"
},
- "confirm_unblock_usre": {
+ "confirm_block_user": {
+ "title": "Konto blockieren",
+ "message": "Bestätige %s zu blockieren"
+ },
+ "confirm_unblock_user": {
"title": "Konto entsperren",
- "message": "Bestätigen zum Entsperren von %s"
+ "message": "Bestätige %s zu entsperren"
}
}
},
"follower": {
- "footer": "Followers from other servers are not displayed."
+ "footer": "Follower von anderen Servern werden nicht angezeigt."
},
"following": {
- "footer": "Follows from other servers are not displayed."
+ "footer": "Wem das Konto folgt wird von anderen Servern werden nicht angezeigt."
},
"search": {
"title": "Suche",
@@ -461,12 +489,14 @@
"Everything": "Alles",
"Mentions": "Erwähnungen"
},
- "user_followed_you": "%s folgte dir",
- "user_favorited your post": "%s favorisierte deinen Beitrag",
- "user_reblogged_your_post": "%s teilte deinen Beitrag",
- "user_mentioned_you": "%s erwähnte dich",
- "user_requested_to_follow_you": "%s beantragte dir zu folgen",
- "user_your_poll_has_ended": "%s deine Umfrage ist beendet",
+ "notification_description": {
+ "followed_you": "folgt dir",
+ "favorited_your_post": "hat deinen Beitrag favorisiert",
+ "reblogged_your_post": "hat deinen Beitrag geteilt",
+ "mentioned_you": "hat dich erwähnt",
+ "request_to_follow_you": "Folgeanfrage",
+ "poll_has_ended": "Umfrage wurde beendet"
+ },
"keyobard": {
"show_everything": "Alles anzeigen",
"show_mentions": "Erwähnungen anzeigen"
@@ -485,6 +515,13 @@
"light": "Immer hell",
"dark": "Immer dunkel"
},
+ "look_and_feel": {
+ "title": "Erscheinungsbild",
+ "use_system": "Systemeinstellung benutzen",
+ "really_dark": "Wirklich dunkel",
+ "sorta_dark": "Ziemlich dunkel",
+ "light": "Hell"
+ },
"notifications": {
"title": "Benachrichtigungen",
"favorites": "Meinen Beitrag favorisiert",
@@ -507,7 +544,7 @@
"using_default_browser": "Standardbrowser zum Öffnen von Links verwenden"
},
"boring_zone": {
- "title": "Der Langweiliger Bereich",
+ "title": "Der langweilige Bereich",
"account_settings": "Kontoeinstellungen",
"terms": "Allgemeine Geschäftsbedingungen",
"privacy": "Datenschutzerklärung"
@@ -526,14 +563,17 @@
}
},
"report": {
+ "title_report": "Melden",
"title": "%s melden",
"step1": "Schritt 1 von 2",
"step2": "Schritt 2 von 2",
"content1": "Gibt es noch weitere Beiträge, die du der Meldung hinzufügen möchtest?",
"content2": "Gibt es etwas, was die Moderatoren über diese Meldung wissen sollten?",
+ "report_sent_title": "Danke für deine Meldung, wir werden uns damit beschäftigen.",
"send": "Meldung abschicken",
"skip_to_send": "Ohne Kommentar abschicken",
- "text_placeholder": "Zusätzliche Kommentare eingeben oder einfügen"
+ "text_placeholder": "Zusätzliche Kommentare eingeben oder einfügen",
+ "reported": "GEMELDET"
},
"preview": {
"keyboard": {
@@ -544,7 +584,7 @@
},
"account_list": {
"tab_bar_hint": "Aktuell ausgewähltes Profil: %s. Doppeltippen dann gedrückt halten, um den Kontoschalter anzuzeigen",
- "dismiss_account_switcher": "Dismiss Account Switcher",
+ "dismiss_account_switcher": "Dialog zum Wechseln des Kontos schließen",
"add_account": "Konto hinzufügen"
},
"wizard": {
diff --git a/Localization/StringsConvertor/input/en_US/app.json b/Localization/StringsConvertor/input/en_US/app.json
index 5c01ae7e0..ad99e178d 100644
--- a/Localization/StringsConvertor/input/en_US/app.json
+++ b/Localization/StringsConvertor/input/en_US/app.json
@@ -45,8 +45,8 @@
"message": "Please enable the photo library access permission to save the photo."
},
"delete_post": {
- "title": "Are you sure you want to delete this post?",
- "delete": "Delete"
+ "title": "Delete Post",
+ "message": "Are you sure you want to delete this post?"
},
"clean_cache": {
"title": "Clean Cache",
@@ -82,6 +82,7 @@
"share_user": "Share %s",
"share_post": "Share Post",
"open_in_safari": "Open in Safari",
+ "open_in_browser": "Open in Browser",
"find_people": "Find people to follow",
"manually_search": "Manually search instead",
"skip": "Skip",
@@ -139,7 +140,8 @@
"unreblog": "Undo reblog",
"favorite": "Favorite",
"unfavorite": "Unfavorite",
- "menu": "Menu"
+ "menu": "Menu",
+ "hide": "Hide"
},
"tag": {
"url": "URL",
@@ -148,6 +150,12 @@
"hashtag": "Hashtag",
"email": "Email",
"emoji": "Emoji"
+ },
+ "visibility": {
+ "unlisted": "Everyone can see this post but not display in the public timeline.",
+ "private": "Only their followers can see this post.",
+ "private_from_me": "Only my followers can see this post.",
+ "direct": "Only mentioned user can see this post."
}
},
"friendship": {
@@ -192,10 +200,14 @@
},
"scene": {
"welcome": {
- "slogan": "Social networking\nback in your hands."
+ "slogan": "Social networking\nback in your hands.",
+ "get_started": "Get Started",
+ "log_in": "Log In"
},
"server_picker": {
- "title": "Pick a server,\nany server.",
+ "title": "Mastodon is made of users in different communities.",
+ "subtitle": "Pick a community based on your interests, region, or a general purpose one.",
+ "subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": {
"category": {
"all": "All",
@@ -222,7 +234,7 @@
"category": "CATEGORY"
},
"input": {
- "placeholder": "Find a server or join your own..."
+ "placeholder": "Search communities"
},
"empty_state": {
"finding_servers": "Finding available servers...",
@@ -231,7 +243,7 @@
}
},
"register": {
- "title": "Tell us about you.",
+ "title": "Let’s get you set up on %s",
"input": {
"avatar": {
"delete": "Delete"
@@ -248,6 +260,12 @@
},
"password": {
"placeholder": "password",
+ "require": "Your password needs at least:",
+ "character_limit": "8 characters",
+ "accessibility": {
+ "checked": "checked",
+ "unchecked": "unchecked"
+ },
"hint": "Your password needs at least eight characters"
},
"invite": {
@@ -285,7 +303,7 @@
},
"server_rules": {
"title": "Some ground rules.",
- "subtitle": "These rules are set by the admins of %s.",
+ "subtitle": "These are set and enforced by the %s moderators.",
"prompt": "By continuing, you’re subject to the terms of service and privacy policy for %s.",
"terms_of_service": "terms of service",
"privacy_policy": "privacy policy",
@@ -295,10 +313,10 @@
},
"confirm_email": {
"title": "One last thing.",
- "subtitle": "We just sent an email to %s,\ntap the link to confirm your account.",
+ "subtitle": "Tap the link we emailed to you to verify your account.",
"button": {
"open_email_app": "Open Email App",
- "dont_receive_email": "I never got an email"
+ "resend": "Resend"
},
"dont_receive_email": {
"title": "Check your email",
@@ -401,14 +419,24 @@
"segmented_control": {
"posts": "Posts",
"replies": "Replies",
- "media": "Media"
+ "posts_and_replies": "Posts and Replies",
+ "media": "Media",
+ "about": "About"
},
"relationship_action_alert": {
+ "confirm_mute_user": {
+ "title": "Mute Account",
+ "message": "Confirm to mute %s"
+ },
"confirm_unmute_user": {
"title": "Unmute Account",
"message": "Confirm to unmute %s"
},
- "confirm_unblock_usre": {
+ "confirm_block_user": {
+ "title": "Block Account",
+ "message": "Confirm to block %s"
+ },
+ "confirm_unblock_user": {
"title": "Unblock Account",
"message": "Confirm to unblock %s"
}
@@ -461,12 +489,14 @@
"Everything": "Everything",
"Mentions": "Mentions"
},
- "user_followed_you": "%s followed you",
- "user_favorited your post": "%s favorited your post",
- "user_reblogged_your_post": "%s reblogged your post",
- "user_mentioned_you": "%s mentioned you",
- "user_requested_to_follow_you": "%s requested to follow you",
- "user_your_poll_has_ended": "%s Your poll has ended",
+ "notification_description": {
+ "followed_you": "followed you",
+ "favorited_your_post": "favorited your post",
+ "reblogged_your_post": "reblogged your post",
+ "mentioned_you": "mentioned you",
+ "request_to_follow_you": "request to follow you",
+ "poll_has_ended": "poll has ended"
+ },
"keyobard": {
"show_everything": "Show Everything",
"show_mentions": "Show Mentions"
@@ -485,6 +515,13 @@
"light": "Always Light",
"dark": "Always Dark"
},
+ "look_and_feel": {
+ "title": "Look and Feel",
+ "use_system": "Use System",
+ "really_dark": "Really Dark",
+ "sorta_dark": "Sorta Dark",
+ "light": "Light"
+ },
"notifications": {
"title": "Notifications",
"favorites": "Favorites my post",
@@ -526,14 +563,17 @@
}
},
"report": {
+ "title_report": "Report",
"title": "Report %s",
"step1": "Step 1 of 2",
"step2": "Step 2 of 2",
"content1": "Are there any other posts you’d like to add to the report?",
"content2": "Is there anything the moderators should know about this report?",
+ "report_sent_title": "Thanks for reporting, we’ll look into this.",
"send": "Send Report",
"skip_to_send": "Send without comment",
- "text_placeholder": "Type or paste additional comments"
+ "text_placeholder": "Type or paste additional comments",
+ "reported": "REPORTED"
},
"preview": {
"keyboard": {
diff --git a/Localization/StringsConvertor/input/es_AR/app.json b/Localization/StringsConvertor/input/es_AR/app.json
index ed909ecf1..106ffb646 100644
--- a/Localization/StringsConvertor/input/es_AR/app.json
+++ b/Localization/StringsConvertor/input/es_AR/app.json
@@ -46,7 +46,7 @@
},
"delete_post": {
"title": "¿Estás seguro que querés eliminar este mensaje?",
- "delete": "Eliminar"
+ "message": "¿Estás seguro que querés eliminar este mensaje?"
},
"clean_cache": {
"title": "Limpiar caché",
@@ -82,6 +82,7 @@
"share_user": "Compartir %s",
"share_post": "Compartir mensaje",
"open_in_safari": "Abrir en Safari",
+ "open_in_browser": "Abrir en el navegador",
"find_people": "Encontrá cuentas para seguir",
"manually_search": "Buscar manualmente",
"skip": "Omitir",
@@ -139,7 +140,8 @@
"unreblog": "Deshacer adhesión",
"favorite": "Marcar como favorito",
"unfavorite": "Dejar de marcar como favorito",
- "menu": "Menú"
+ "menu": "Menú",
+ "hide": "Ocultar"
},
"tag": {
"url": "Dirección web",
@@ -148,6 +150,12 @@
"hashtag": "Etiqueta",
"email": "Correo electrónico",
"emoji": "Emoji"
+ },
+ "visibility": {
+ "unlisted": "Todo el mundo puede ver este mensaje pero no mostrarse en la línea temporal pública.",
+ "private": "Sólo sus seguidores pueden ver este mensaje.",
+ "private_from_me": "Sólo mis seguidores pueden ver este mensaje.",
+ "direct": "Sólo el usuario mencionado puede ver este mensaje."
}
},
"friendship": {
@@ -192,10 +200,14 @@
},
"scene": {
"welcome": {
- "slogan": "La red social,\nnuevamente en tu poder."
+ "slogan": "La red social,\nnuevamente en tu poder.",
+ "get_started": "Comenzá",
+ "log_in": "Iniciar sesión"
},
"server_picker": {
"title": "Elegí un servidor,\nel que quieras.",
+ "subtitle": "Elegí una comunidad basada en tus intereses, región o una de propósitos generales.",
+ "subtitle_extend": "Elegí una comunidad basada en tus intereses, región o una de propósitos generales. Cada comunidad es operada por una organización o individuo totalmente independiente.",
"button": {
"category": {
"all": "Todas",
@@ -248,6 +260,12 @@
},
"password": {
"placeholder": "contraseña",
+ "require": "Tu contraseña necesita al menos:",
+ "character_limit": "8 caracteres",
+ "accessibility": {
+ "checked": "marcado",
+ "unchecked": "sin marcar"
+ },
"hint": "Tu contraseña necesita al menos ocho caracteres"
},
"invite": {
@@ -298,7 +316,7 @@
"subtitle": "Acabamos de enviar un correo electrónico a %s,\npulsá en el enlace para confirmar tu cuenta.",
"button": {
"open_email_app": "Abrir aplicación de correo electrónico",
- "dont_receive_email": "Nunca recibí un correo electrónico"
+ "resend": "Reenviar"
},
"dont_receive_email": {
"title": "Revisá tu correo electrónico",
@@ -401,14 +419,24 @@
"segmented_control": {
"posts": "Mensajes",
"replies": "Respuestas",
- "media": "Medios"
+ "posts_and_replies": "Mensajes y respuestas",
+ "media": "Medios",
+ "about": "Información"
},
"relationship_action_alert": {
+ "confirm_mute_user": {
+ "title": "Silenciar cuenta",
+ "message": "Confirmá para silenciar a %s"
+ },
"confirm_unmute_user": {
"title": "Dejar de silenciar cuenta",
"message": "Confirmá para dejar de silenciar a %s"
},
- "confirm_unblock_usre": {
+ "confirm_block_user": {
+ "title": "Bloquear cuenta",
+ "message": "Confirmá para desbloquear a %s"
+ },
+ "confirm_unblock_user": {
"title": "Desbloquear cuenta",
"message": "Confirmá para desbloquear a %s"
}
@@ -461,12 +489,14 @@
"Everything": "Todo",
"Mentions": "Menciones"
},
- "user_followed_you": "%s te sigue",
- "user_favorited your post": "%s marcó tu msj. como favorito",
- "user_reblogged_your_post": "%s adhirió a tu mensaje",
- "user_mentioned_you": "%s te mencionó",
- "user_requested_to_follow_you": "%s solicitó seguirte",
- "user_your_poll_has_ended": "%s, tu encuesta finalizó",
+ "notification_description": {
+ "followed_you": "te sigue",
+ "favorited_your_post": "marcó como favorito tu mensaje",
+ "reblogged_your_post": "adhirió a tu mensaje",
+ "mentioned_you": "te mencionó",
+ "request_to_follow_you": "solicitó seguirte",
+ "poll_has_ended": "la encuesta terminó"
+ },
"keyobard": {
"show_everything": "Mostrar todo",
"show_mentions": "Mostrar menciones"
@@ -485,6 +515,13 @@
"light": "Siempre clara",
"dark": "Siempre oscura"
},
+ "look_and_feel": {
+ "title": "Apariencia",
+ "use_system": "Usar sistema",
+ "really_dark": "Oscuro de verdad",
+ "sorta_dark": "Algo oscuro",
+ "light": "Claro"
+ },
"notifications": {
"title": "Notificaciones",
"favorites": "Marcó como favorito mi mensaje",
@@ -526,14 +563,17 @@
}
},
"report": {
+ "title_report": "Denunciar",
"title": "Denunciar a %s",
"step1": "Paso 1 de 2",
"step2": "Paso 2 de 2",
"content1": "¿Hay otros mensajes que te gustaría agregar a la denuncia?",
"content2": "¿Hay algo que los moderadores deban saber sobre esta denuncia?",
+ "report_sent_title": "Gracias por tu denuncia, vamos a revisarla.",
"send": "Enviar denuncia",
"skip_to_send": "Enviar sin comentarios",
- "text_placeholder": "Escribí o pegá comentarios adicionales"
+ "text_placeholder": "Escribí o pegá comentarios adicionales",
+ "reported": "DENUNCIADA"
},
"preview": {
"keyboard": {
diff --git a/Localization/StringsConvertor/input/es_ES/Localizable.stringsdict b/Localization/StringsConvertor/input/es_ES/Localizable.stringsdict
index d31d8825b..186218af6 100644
--- a/Localization/StringsConvertor/input/es_ES/Localizable.stringsdict
+++ b/Localization/StringsConvertor/input/es_ES/Localizable.stringsdict
@@ -13,9 +13,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 unread notification
+ 1 notificación no leída
other
- %ld unread notification
+ %ld notificaciones no leídas
a11y.plural.count.input_limit_exceeds
diff --git a/Localization/StringsConvertor/input/es_ES/app.json b/Localization/StringsConvertor/input/es_ES/app.json
index 72967c40f..cfebae265 100644
--- a/Localization/StringsConvertor/input/es_ES/app.json
+++ b/Localization/StringsConvertor/input/es_ES/app.json
@@ -46,7 +46,7 @@
},
"delete_post": {
"title": "¿Estás seguro de que deseas eliminar esta publicación?",
- "delete": "Eliminar"
+ "message": "¿Estás seguro de que quieres borrar esta publicación?"
},
"clean_cache": {
"title": "Limpiar Caché",
@@ -82,6 +82,7 @@
"share_user": "Compartir %s",
"share_post": "Compartir publicación",
"open_in_safari": "Abrir en Safari",
+ "open_in_browser": "Abrir en el navegador",
"find_people": "Encuentra gente a la que seguir",
"manually_search": "Mejor hacer una búsqueda manual",
"skip": "Omitir",
@@ -139,7 +140,8 @@
"unreblog": "Deshacer reblogueo",
"favorite": "Favorito",
"unfavorite": "No favorito",
- "menu": "Menú"
+ "menu": "Menú",
+ "hide": "Ocultar"
},
"tag": {
"url": "URL",
@@ -148,6 +150,12 @@
"hashtag": "Etiqueta",
"email": "E-mail",
"emoji": "Emoji"
+ },
+ "visibility": {
+ "unlisted": "Todo el mundo puede ver este post pero no mostrar en la línea de tiempo pública.",
+ "private": "Sólo sus seguidores pueden ver este mensaje.",
+ "private_from_me": "Sólo mis seguidores pueden ver este mensaje.",
+ "direct": "Sólo el usuario mencionado puede ver este mensaje."
}
},
"friendship": {
@@ -192,10 +200,14 @@
},
"scene": {
"welcome": {
- "slogan": "Las redes sociales\nde nuevo en tus manos."
+ "slogan": "Las redes sociales\nde nuevo en tus manos.",
+ "get_started": "Empezar",
+ "log_in": "Iniciar sesión"
},
"server_picker": {
"title": "Elige un servidor,\ncualquier servidor.",
+ "subtitle": "Elige una comunidad relacionada con tus intereses, con tu región o una más genérica.",
+ "subtitle_extend": "Elige una comunidad relacionada con tus intereses, con tu región o una más genérica. Cada comunidad está operada por una organización o individuo completamente independiente.",
"button": {
"category": {
"all": "Todas",
@@ -248,6 +260,12 @@
},
"password": {
"placeholder": "contraseña",
+ "require": "Tu contraseña debe contener como mínimo:",
+ "character_limit": "8 caracteres",
+ "accessibility": {
+ "checked": "marcado",
+ "unchecked": "sin marcar"
+ },
"hint": "Tu contraseña necesita tener al menos ocho caracteres"
},
"invite": {
@@ -298,7 +316,7 @@
"subtitle": "Te acabamos de enviar un correo a %s,\npulsa en el enlace para confirmar tu cuenta.",
"button": {
"open_email_app": "Abrir Aplicación de Correo Electrónico",
- "dont_receive_email": "No he recibido el correo electrónico"
+ "resend": "Reenviar"
},
"dont_receive_email": {
"title": "Revisa tu correo electrónico",
@@ -401,15 +419,25 @@
"segmented_control": {
"posts": "Publicaciones",
"replies": "Respuestas",
- "media": "Multimedia"
+ "posts_and_replies": "Publicaciones y respuestas",
+ "media": "Multimedia",
+ "about": "Acerca de"
},
"relationship_action_alert": {
+ "confirm_mute_user": {
+ "title": "Silenciar cuenta",
+ "message": "Confirmar para silenciar %s"
+ },
"confirm_unmute_user": {
"title": "Dejar de Silenciar Cuenta",
"message": "Confirmar para dejar de silenciar a %s"
},
- "confirm_unblock_usre": {
- "title": "Desbloquear Cuenta",
+ "confirm_block_user": {
+ "title": "Bloquear cuenta",
+ "message": "Confirmar para bloquear a %s"
+ },
+ "confirm_unblock_user": {
+ "title": "Desbloquear cuenta",
"message": "Confirmar para desbloquear a %s"
}
}
@@ -461,12 +489,14 @@
"Everything": "Todo",
"Mentions": "Menciones"
},
- "user_followed_you": "%s te ha empezado a seguir",
- "user_favorited your post": "%s marcó tu post como favorito",
- "user_reblogged_your_post": "%s reblogueó tu publicación",
- "user_mentioned_you": "%s te ha mencionado",
- "user_requested_to_follow_you": "%s ha solicitado seguirte",
- "user_your_poll_has_ended": "%s Tu encuesta ha terminado",
+ "notification_description": {
+ "followed_you": "te siguió",
+ "favorited_your_post": "ha marcado como favorita tu publicación",
+ "reblogged_your_post": "reblogueó tu publicación",
+ "mentioned_you": "te mencionó",
+ "request_to_follow_you": "solicitó seguirte",
+ "poll_has_ended": "encuesta ha terminado"
+ },
"keyobard": {
"show_everything": "Mostrar Todo",
"show_mentions": "Mostrar Menciones"
@@ -485,6 +515,13 @@
"light": "Siempre Clara",
"dark": "Siempre Oscura"
},
+ "look_and_feel": {
+ "title": "Apariencia",
+ "use_system": "Uso del sistema",
+ "really_dark": "Realmente Oscuro",
+ "sorta_dark": "Más o Menos Oscuro",
+ "light": "Claro"
+ },
"notifications": {
"title": "Notificaciones",
"favorites": "Marque como favorita mi publicación",
@@ -526,14 +563,17 @@
}
},
"report": {
+ "title_report": "Reportar",
"title": "Reportar %s",
"step1": "Paso 1 de 2",
"step2": "Paso 2 de 2",
"content1": "¿Hay alguna otra publicación que te gustaría añadir al reporte?",
"content2": "¿Hay algo que los moderadores deberían saber acerca de este reporte?",
+ "report_sent_title": "Gracias por reportar, estudiaremos esto.",
"send": "Enviar Reporte",
"skip_to_send": "Enviar sin comentarios",
- "text_placeholder": "Escribe o pega comentarios adicionales"
+ "text_placeholder": "Escribe o pega comentarios adicionales",
+ "reported": "REPORTADO"
},
"preview": {
"keyboard": {
@@ -543,14 +583,14 @@
}
},
"account_list": {
- "tab_bar_hint": "Current selected profile: %s. Double tap then hold to show account switcher",
- "dismiss_account_switcher": "Dismiss Account Switcher",
- "add_account": "Add Account"
+ "tab_bar_hint": "Perfil seleccionado actualmente: %s. Haz un doble toque y mantén pulsado para mostrar el selector de cuentas",
+ "dismiss_account_switcher": "Descartar el selector de cuentas",
+ "add_account": "Añadir cuenta"
},
"wizard": {
- "new_in_mastodon": "New in Mastodon",
- "multiple_account_switch_intro_description": "Switch between multiple accounts by holding the profile button.",
- "accessibility_hint": "Double tap to dismiss this wizard"
+ "new_in_mastodon": "Nuevo en Mastodon",
+ "multiple_account_switch_intro_description": "Cambie entre varias cuentas manteniendo presionado el botón de perfil.",
+ "accessibility_hint": "Haz doble toque para descartar este asistente"
}
}
}
\ No newline at end of file
diff --git a/Localization/StringsConvertor/input/eu_ES/Localizable.stringsdict b/Localization/StringsConvertor/input/eu_ES/Localizable.stringsdict
new file mode 100644
index 000000000..817e8372b
--- /dev/null
+++ b/Localization/StringsConvertor/input/eu_ES/Localizable.stringsdict
@@ -0,0 +1,390 @@
+
+
+
+
+ a11y.plural.count.unread.notification
+
+ NSStringLocalizedFormatKey
+ %#@notification_count_unread_notification@
+ notification_count_unread_notification
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ Irakurri gabeko jakinarazpen bat
+ other
+ Irakurri gabeko %ld jakinarazpen
+
+
+ a11y.plural.count.input_limit_exceeds
+
+ NSStringLocalizedFormatKey
+ Sarrerak %#@character_count@ karaktereko muga gainditzen du
+ character_count
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ karaktere bat
+ other
+ %ld karaktere
+
+
+ a11y.plural.count.input_limit_remains
+
+ NSStringLocalizedFormatKey
+ Sarreraren karaktere muga %#@character_count@ da oraindik
+ character_count
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ karaktere bat
+ other
+ %ld karaktere
+
+
+ plural.count.metric_formatted.post
+
+ NSStringLocalizedFormatKey
+ %@ %#@post_count@
+ post_count
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ bidalketa
+ other
+ bidalketa
+
+
+ plural.count.post
+
+ NSStringLocalizedFormatKey
+ %#@post_count@
+ post_count
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ Bidalketa bat
+ other
+ %ld bidalketa
+
+
+ plural.count.favorite
+
+ NSStringLocalizedFormatKey
+ %#@favorite_count@
+ favorite_count
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ Gogoko bat
+ other
+ %ld gogoko
+
+
+ plural.count.reblog
+
+ NSStringLocalizedFormatKey
+ %#@reblog_count@
+ reblog_count
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ Bultzada bat
+ other
+ %ld bultzada
+
+
+ plural.count.vote
+
+ NSStringLocalizedFormatKey
+ %#@vote_count@
+ vote_count
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ Boto bat
+ other
+ %ld boto
+
+
+ plural.count.voter
+
+ NSStringLocalizedFormatKey
+ %#@voter_count@
+ voter_count
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ Boto-emaile bat
+ other
+ %ld boto-emaile
+
+
+ plural.people_talking
+
+ NSStringLocalizedFormatKey
+ %#@count_people_talking@
+ count_people_talking
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ Pertsona bat hizketan
+ other
+ %ld pertsona hizketan
+
+
+ plural.count.following
+
+ NSStringLocalizedFormatKey
+ %#@count_following@
+ count_following
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ Bat jarraitzen
+ other
+ %ld jarraitzen
+
+
+ plural.count.follower
+
+ NSStringLocalizedFormatKey
+ %#@count_follower@
+ count_follower
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ Jarraitzaile bat
+ other
+ %ld jarraitzaile
+
+
+ date.year.left
+
+ NSStringLocalizedFormatKey
+ %#@count_year_left@
+ count_year_left
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ Urte bat geratzen da
+ other
+ %ld urte geratzen dira
+
+
+ date.month.left
+
+ NSStringLocalizedFormatKey
+ %#@count_month_left@
+ count_month_left
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ Hilabete bat geratzen da
+ other
+ %ld hilabete geratzen dira
+
+
+ date.day.left
+
+ NSStringLocalizedFormatKey
+ %#@count_day_left@
+ count_day_left
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ Egun bat geratzen da
+ other
+ %ld egun geratzen dira
+
+
+ date.hour.left
+
+ NSStringLocalizedFormatKey
+ %#@count_hour_left@
+ count_hour_left
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ Ordu 1 geratzen da
+ other
+ %ld ordu geratzen dira
+
+
+ date.minute.left
+
+ NSStringLocalizedFormatKey
+ %#@count_minute_left@
+ count_minute_left
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ Minutu 1 geratzen da
+ other
+ %ld minutu geratzen dira
+
+
+ date.second.left
+
+ NSStringLocalizedFormatKey
+ %#@count_second_left@
+ count_second_left
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ Segundo 1 geratzen da
+ other
+ %ld segundo geratzen dira
+
+
+ date.year.ago.abbr
+
+ NSStringLocalizedFormatKey
+ %#@count_year_ago_abbr@
+ count_year_ago_abbr
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ Duela urtebete
+ other
+ Duela %ld urte
+
+
+ date.month.ago.abbr
+
+ NSStringLocalizedFormatKey
+ %#@count_month_ago_abbr@
+ count_month_ago_abbr
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ Duela hilabete
+ other
+ Duela %ld hilabete
+
+
+ date.day.ago.abbr
+
+ NSStringLocalizedFormatKey
+ %#@count_day_ago_abbr@
+ count_day_ago_abbr
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ Duela egun bat
+ other
+ Duela %ld egun
+
+
+ date.hour.ago.abbr
+
+ NSStringLocalizedFormatKey
+ %#@count_hour_ago_abbr@
+ count_hour_ago_abbr
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ Duela ordubete
+ other
+ Duela %ld ordu
+
+
+ date.minute.ago.abbr
+
+ NSStringLocalizedFormatKey
+ %#@count_minute_ago_abbr@
+ count_minute_ago_abbr
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ Duela minutu bat
+ other
+ Duela %ld minutu
+
+
+ date.second.ago.abbr
+
+ NSStringLocalizedFormatKey
+ %#@count_second_ago_abbr@
+ count_second_ago_abbr
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ Duela segundo bat
+ other
+ Duela %ld segundo
+
+
+
+
diff --git a/Localization/StringsConvertor/input/eu_ES/app.json b/Localization/StringsConvertor/input/eu_ES/app.json
new file mode 100644
index 000000000..39d06227b
--- /dev/null
+++ b/Localization/StringsConvertor/input/eu_ES/app.json
@@ -0,0 +1,596 @@
+{
+ "common": {
+ "alerts": {
+ "common": {
+ "please_try_again": "Mesedez, saiatu berriro.",
+ "please_try_again_later": "Mesedez beranduago saiatu."
+ },
+ "sign_up_failure": {
+ "title": "Hutsegitea izen-ematean"
+ },
+ "server_error": {
+ "title": "Zerbitzari-errorea"
+ },
+ "vote_failure": {
+ "title": "Hutsegitea botoa ematean",
+ "poll_ended": "Inkesta amaitu da"
+ },
+ "discard_post_content": {
+ "title": "Baztertu zirriborroa",
+ "message": "Berretsi idatzitako bidalketaren edukia baztertzea."
+ },
+ "publish_post_failure": {
+ "title": "Hutsegitea argitaratzean",
+ "message": "Huts egin du bidalketa argitaratzean.\nEgiaztatu Interneteko konexioa.",
+ "attachments_message": {
+ "video_attach_with_photo": "Ezin da irudiak dituen bidalketa batean bideo bat erantsi.",
+ "more_than_one_video": "Ezin da bideo bat baino gehiago erantsi."
+ }
+ },
+ "edit_profile_failure": {
+ "title": "Errorea profila editatzean",
+ "message": "Ezin da profila editatu. Mesedez saiatu berriro."
+ },
+ "sign_out": {
+ "title": "Amaitu saioa",
+ "message": "Ziur saioa amaitu nahi duzula?",
+ "confirm": "Amaitu saioa"
+ },
+ "block_domain": {
+ "title": "Ziur, erabat ziur, %s domeinu osoa blokeatu nahi duzula? Gehienetan erabiltzaile gutxi batzuk blokeatu edo mututzearekin nahikoa da. Ez duzu domeinu horretako edukirik ikusiko eta domeinu horretako zure jarraitzaileak kenduko dira.",
+ "block_entire_domain": "Blokeatu domeinua"
+ },
+ "save_photo_failure": {
+ "title": "Hutsegitea argazkia gordetzean",
+ "message": "Gaitu argazki galeriarako sarbidearen baimena argazkia gordetzeko."
+ },
+ "delete_post": {
+ "title": "Ziur zaude bidalketa hau ezabatu nahi duzula?",
+ "message": "Ziur bidalketa hau ezabatu nahi duzula?"
+ },
+ "clean_cache": {
+ "title": "Garbitu cache-a",
+ "message": "Behar bezala garbitu da %s cache-a."
+ }
+ },
+ "controls": {
+ "actions": {
+ "back": "Atzera",
+ "next": "Hurrengoa",
+ "previous": "Aurrekoa",
+ "open": "Ireki",
+ "add": "Gehitu",
+ "remove": "Kendu",
+ "edit": "Editatu",
+ "save": "Gorde",
+ "ok": "Ados",
+ "done": "Egina",
+ "confirm": "Berretsi",
+ "continue": "Jarraitu",
+ "compose": "Idatzi",
+ "cancel": "Utzi",
+ "discard": "Baztertu",
+ "try_again": "Saiatu berriro",
+ "take_photo": "Atera argazkia",
+ "save_photo": "Gorde argazkia",
+ "copy_photo": "Kopiatu argazkia",
+ "sign_in": "Hasi saioa",
+ "sign_up": "Eman Izena",
+ "see_more": "Ikusi gehiago",
+ "preview": "Aurrebista",
+ "share": "Partekatu",
+ "share_user": "Partekatu %s",
+ "share_post": "Partekatu bidalketa",
+ "open_in_safari": "Ireki Safarin",
+ "open_in_browser": "Ireki nabigatzailean",
+ "find_people": "Bilatu jarraitzeko jendea",
+ "manually_search": "Eskuz bilatu",
+ "skip": "Saltatu",
+ "reply": "Erantzun",
+ "report_user": "Salatu %s",
+ "block_domain": "Blokeatu %s",
+ "unblock_domain": "Desblokeatu %s",
+ "settings": "Ezarpenak",
+ "delete": "Ezabatu"
+ },
+ "tabs": {
+ "home": "Hasiera",
+ "search": "Bilatu",
+ "notification": "Jakinarazpena",
+ "profile": "Profila"
+ },
+ "keyboard": {
+ "common": {
+ "switch_to_tab": "Aldatu %s(e)ra",
+ "compose_new_post": "Idatzi bidalketa berria",
+ "show_favorites": "Erakutsi gogokoak",
+ "open_settings": "Ireki ezarpenak"
+ },
+ "timeline": {
+ "previous_status": "Aurreko bidalketa",
+ "next_status": "Hurrengo bidalketa",
+ "open_status": "Ireki bidalketa",
+ "open_author_profile": "Ireki egilearen profila",
+ "open_reblogger_profile": "Ireki bultzada eman duenaren profila",
+ "reply_status": "Erantzun bidalketari",
+ "toggle_reblog": "Txandakatu bidalketaren bultzada",
+ "toggle_favorite": "Txandakatu bidalketa gogoko egitea",
+ "toggle_content_warning": "Txandakatu edukiaren abisua",
+ "preview_image": "Aurreikusi irudia"
+ },
+ "segmented_control": {
+ "previous_section": "Aurreko sekzioa",
+ "next_section": "Hurrengo sekzioa"
+ }
+ },
+ "status": {
+ "user_reblogged": "%s erabiltzaileak bultzada eman dio",
+ "user_replied_to": "%s(r)i erantzuten",
+ "show_post": "Erakutsi bidalketa",
+ "show_user_profile": "Erakutsi erabiltzailearen profila",
+ "content_warning": "Edukiaren abisua",
+ "media_content_warning": "Ukitu edonon bistaratzeko",
+ "poll": {
+ "vote": "Bozkatu",
+ "closed": "Itxita"
+ },
+ "actions": {
+ "reply": "Erantzun",
+ "reblog": "Bultzada",
+ "unreblog": "Desegin bultzada",
+ "favorite": "Gogokoa",
+ "unfavorite": "Kendu gogokoa",
+ "menu": "Menua",
+ "hide": "Ezkutatu"
+ },
+ "tag": {
+ "url": "URLa",
+ "mention": "Aipatu",
+ "link": "Esteka",
+ "hashtag": "Traola",
+ "email": "Eposta",
+ "emoji": "Emojia"
+ },
+ "visibility": {
+ "unlisted": "Edozeinek ikusi dezake bidalketa hau baina ez da denbora-lerro publikoan bistaratuko.",
+ "private": "Beren jarraitzaileek soilik ikus dezakete bidalketa hau.",
+ "private_from_me": "Nire jarraitzaileek soilik ikus dezakete bidalketa hau.",
+ "direct": "Aipatutako erabiltzaileek soilik ikus dezakete bidalketa hau."
+ }
+ },
+ "friendship": {
+ "follow": "Jarraitu",
+ "following": "Jarraitzen",
+ "request": "Eskaera",
+ "pending": "Zain",
+ "block": "Blokeatu",
+ "block_user": "Blokeatu %s",
+ "block_domain": "Blokeatu %s",
+ "unblock": "Desblokeatu",
+ "unblock_user": "Desblokeatu %s",
+ "blocked": "Blokeatuta",
+ "mute": "Mututu",
+ "mute_user": "Mututu %s",
+ "unmute": "Desmututu",
+ "unmute_user": "Desmututu %s",
+ "muted": "Mutututa",
+ "edit_info": "Editatu informazioa"
+ },
+ "timeline": {
+ "filtered": "Iragazita",
+ "timestamp": {
+ "now": "Orain"
+ },
+ "loader": {
+ "load_missing_posts": "Kargatu falta diren bidalketak",
+ "loading_missing_posts": "Falta diren bidalketak kargatzen...",
+ "show_more_replies": "Erakutsi erantzun gehiago"
+ },
+ "header": {
+ "no_status_found": "Ez da bidalketa aurkitu",
+ "blocking_warning": "Ezin duzu erabiltzaile honen profila ikusi\ndesblokeatzen duzun arte.\nZure profilak itxura hau du berarentzat.",
+ "user_blocking_warning": "Ezin duzu %s erabiltzailearen\nprofila ikusi desblokeatzen duzun arte.\nZure profilak itxura hau du berarentzat.",
+ "blocked_warning": "Ezin duzu erabiltzaile honen profila ikusi\ndesblokeatzen zaituen arte.",
+ "user_blocked_warning": "Ezin duzu %s erabiltzailearen\nprofila ikusi desblokeatzen zaituen arte.",
+ "suspended_warning": "Erabiltzaile hau kanporatua izan da.",
+ "user_suspended_warning": "%s kontua kanporatua izan da."
+ }
+ }
+ }
+ },
+ "scene": {
+ "welcome": {
+ "slogan": "Sare sozialak\nberriz zure eskuetan.",
+ "get_started": "Nola hasi",
+ "log_in": "Hasi saioa"
+ },
+ "server_picker": {
+ "title": "Aukeratu zerbitzari bat,\nedozein zerbitzari.",
+ "subtitle": "Aukeratu komunitate bat zure interes edo lurraldearen arabera, edo erabilera orokorreko bat.",
+ "subtitle_extend": "Aukeratu komunitate bat zure interes edo lurraldearen arabera, edo erabilera orokorreko bat. Komunitate bakoitza erakunde edo norbanako independente batek kudeatzen du.",
+ "button": {
+ "category": {
+ "all": "Guztiak",
+ "all_accessiblity_description": "Kategoria: Guztiak",
+ "academia": "akademia",
+ "activism": "aktibismoa",
+ "food": "janaria",
+ "furry": "furry",
+ "games": "jokoak",
+ "general": "orokorra",
+ "journalism": "kazetaritza",
+ "lgbt": "LGBTQ+",
+ "regional": "herrialdekoa",
+ "art": "artea",
+ "music": "musika",
+ "tech": "teknologia"
+ },
+ "see_less": "Ikusi gutxiago",
+ "see_more": "Ikusi gehiago"
+ },
+ "label": {
+ "language": "HIZKUNTZA",
+ "users": "ERABILTZAILEAK",
+ "category": "KATEGORIA"
+ },
+ "input": {
+ "placeholder": "Bilatu zerbitzari bat edo sortu zurea..."
+ },
+ "empty_state": {
+ "finding_servers": "Erabilgarri dauden zerbitzariak bilatzen...",
+ "bad_network": "Arazoren bat egon da datuak kargatzean. Egiaztatu zure Interneteko konexioa.",
+ "no_results": "Emaitzarik ez"
+ }
+ },
+ "register": {
+ "title": "Hitz egin iezaguzu zuri buruz.",
+ "input": {
+ "avatar": {
+ "delete": "Ezabatu"
+ },
+ "username": {
+ "placeholder": "erabiltzaile-izena",
+ "duplicate_prompt": "Erabiltzaile-izen hau hartuta dago."
+ },
+ "display_name": {
+ "placeholder": "pantaila-izena"
+ },
+ "email": {
+ "placeholder": "eposta"
+ },
+ "password": {
+ "placeholder": "pasahitza",
+ "require": "Zure pasahitzak izan behar ditu gutxienez:",
+ "character_limit": "8 karaktere",
+ "accessibility": {
+ "checked": "hautatuta",
+ "unchecked": "hautatu gabe"
+ },
+ "hint": "Pasahitzak zortzi karaktere izan behar ditu gutxienez"
+ },
+ "invite": {
+ "registration_user_invite_request": "Zergatik elkartu nahi duzu?"
+ }
+ },
+ "error": {
+ "item": {
+ "username": "Erabiltzaile-izena",
+ "email": "Eposta",
+ "password": "Pasahitza",
+ "agreement": "Adostasuna",
+ "locale": "Eskualdeko ezarpenak",
+ "reason": "Arrazoia"
+ },
+ "reason": {
+ "blocked": "%s(e)k onartu gabeko eposta hornitzaile bat erabiltzen du",
+ "unreachable": "dirudienez %s ez da existitzen",
+ "taken": "%s dagoeneko erabiltzen da",
+ "reserved": "%s gako-hitz erreserbatu bat da",
+ "accepted": "%s onartu behar da",
+ "blank": "%s beharrezkoa da",
+ "invalid": "%s baliogabea da",
+ "too_long": "%s luzeegia da",
+ "too_short": "%s laburregia da",
+ "inclusion": "%s ez da onartutako balio bat"
+ },
+ "special": {
+ "username_invalid": "Erabiltzaile-izenak karaktere alfanumerikoak eta azpimarrak soilik eduki ditzake",
+ "username_too_long": "Erabiltzaile-izena luzeegia da (ezin ditu 30 karaktere baino gehiago izan)",
+ "email_invalid": "Hau ez da baliozko eposta helbidea",
+ "password_too_short": "Pasahitza laburregia da (gutxienez 8 karaktere izan behar ditu)"
+ }
+ }
+ },
+ "server_rules": {
+ "title": "Oinarrizko arau batzuk.",
+ "subtitle": "Arau hauek %s instantziako administratzaileek ezarri dituzte.",
+ "prompt": "Jarraituz gero, %s instantziaren zerbitzu-baldintzak eta pribatutasun-gidalerroak onartzen dituzu.",
+ "terms_of_service": "zerbitzu-baldintzak",
+ "privacy_policy": "pribatutasun-gidalerroak",
+ "button": {
+ "confirm": "Ados nago"
+ }
+ },
+ "confirm_email": {
+ "title": "Eta azkenik...",
+ "subtitle": "Eposta bat bidali dizugu %s helbidera,\nsakatu kontua berresteko esteka.",
+ "button": {
+ "open_email_app": "Ireki eposta aplikazioa",
+ "resend": "Berbidali"
+ },
+ "dont_receive_email": {
+ "title": "Begiratu zure eposta",
+ "description": "Egiaztatu zure eposta helbidea zuzena den eta begiratu zaborraren karpeta.",
+ "resend_email": "Birbidali eposta"
+ },
+ "open_email_app": {
+ "title": "Egiaztatu zure sarrerako ontzia.",
+ "description": "Eposta bat bidali dizugu. Egiaztatu zure zaborraren karpeta.",
+ "mail": "Posta",
+ "open_email_client": "Ireki eposta bezeroa"
+ }
+ },
+ "home_timeline": {
+ "title": "Hasiera",
+ "navigation_bar_state": {
+ "offline": "Konexio gabe",
+ "new_posts": "Ikusi bidal. berriak",
+ "published": "Argitaratua!",
+ "Publishing": "Bidalketa argitaratzen..."
+ }
+ },
+ "suggestion_account": {
+ "title": "Bilatu jarraitzeko jendea",
+ "follow_explain": "Norbait jarraitzen duzunean, bere bidalketak zure hasierako denbora-lerroan agertuko zaizkizu."
+ },
+ "compose": {
+ "title": {
+ "new_post": "Bidalketa berria",
+ "new_reply": "Erantzun berria"
+ },
+ "media_selection": {
+ "camera": "Atera argazkia",
+ "photo_library": "Argazki-liburutegia",
+ "browse": "Arakatu"
+ },
+ "content_input_placeholder": "Idatzi edo itsatsi buruan duzuna",
+ "compose_action": "Argitaratu",
+ "replying_to_user": "%s(r)i erantzuten",
+ "attachment": {
+ "photo": "argazkia",
+ "video": "bideoa",
+ "attachment_broken": "%s hondatuta dago eta ezin da\nMastodonera igo.",
+ "description_photo": "Deskribatu argazkia ikusmen arazoak dituztenentzat...",
+ "description_video": "Deskribatu bideoa ikusmen arazoak dituztenentzat..."
+ },
+ "poll": {
+ "duration_time": "Iraupena: %s",
+ "thirty_minutes": "30 minutu",
+ "one_hour": "Ordu 1",
+ "six_hours": "6 ordu",
+ "one_day": "Egun 1",
+ "three_days": "3 egun",
+ "seven_days": "7 egun",
+ "option_number": "%ld aukera"
+ },
+ "content_warning": {
+ "placeholder": "Idatzi abisu zehatz bat hemen..."
+ },
+ "visibility": {
+ "public": "Publikoa",
+ "unlisted": "Zerrendatu gabea",
+ "private": "Jarraitzaileak soilik",
+ "direct": "Aipatzen dudan jendea soilik"
+ },
+ "auto_complete": {
+ "space_to_add": "Sakatu zuriunea gehitzeko"
+ },
+ "accessibility": {
+ "append_attachment": "Gehitu eranskina",
+ "append_poll": "Gehitu inkesta",
+ "remove_poll": "Kendu inkesta",
+ "custom_emoji_picker": "Emoji pertsonalizatuen hautatzailea",
+ "enable_content_warning": "Gaitu edukiaren abisua",
+ "disable_content_warning": "Desgaitu edukiaren abisua",
+ "post_visibility_menu": "Bidalketaren ikusgaitasunaren menua"
+ },
+ "keyboard": {
+ "discard_post": "Baztertu bidalketa",
+ "publish_post": "Argitaratu bidalketa",
+ "toggle_poll": "Txandakatu inkesta",
+ "toggle_content_warning": "Txandakatu edukiaren abisua",
+ "append_attachment_entry": "Gehitu eranskina - %s",
+ "select_visibility_entry": "Hautatu ikusgaitasuna - %s"
+ }
+ },
+ "profile": {
+ "dashboard": {
+ "posts": "bidalketa",
+ "following": "jarraitzen",
+ "followers": "jarraitzaile"
+ },
+ "fields": {
+ "add_row": "Gehitu errenkada",
+ "placeholder": {
+ "label": "Etiketa",
+ "content": "Edukia"
+ }
+ },
+ "segmented_control": {
+ "posts": "Bidalketak",
+ "replies": "Erantzunak",
+ "posts_and_replies": "Bidalketak eta erantzunak",
+ "media": "Multimedia",
+ "about": "Honi buruz"
+ },
+ "relationship_action_alert": {
+ "confirm_mute_user": {
+ "title": "Mututu kontua",
+ "message": "Berretsi %s mututzea"
+ },
+ "confirm_unmute_user": {
+ "title": "Desmututu kontua",
+ "message": "Berretsi %s desmututzea"
+ },
+ "confirm_block_user": {
+ "title": "Blokeatu kontua",
+ "message": "Berretsi %s blokeatzea"
+ },
+ "confirm_unblock_user": {
+ "title": "Desblokeatu kontua",
+ "message": "Berretsi %s desblokeatzea"
+ }
+ }
+ },
+ "follower": {
+ "footer": "Beste zerbitzarietako jarraitzaileak ez dira bistaratzen."
+ },
+ "following": {
+ "footer": "Beste zerbitzarietan jarraitutakoak ez dira bistaratzen."
+ },
+ "search": {
+ "title": "Bilatu",
+ "search_bar": {
+ "placeholder": "Bilatu traolak eta erabiltzaileak",
+ "cancel": "Utzi"
+ },
+ "recommend": {
+ "button_text": "Ikusi guztiak",
+ "hash_tag": {
+ "title": "Mastodoneko joerak",
+ "description": "Deigarri gertatzen ari diren traolak",
+ "people_talking": "%s pertsona hizketan"
+ },
+ "accounts": {
+ "title": "Gustuko izan ditzakezun kontuak",
+ "description": "Kontu hauek jarraitu nahiko dituzu behar bada",
+ "follow": "Jarraitu"
+ }
+ },
+ "searching": {
+ "segment": {
+ "all": "Guztiak",
+ "people": "Jendea",
+ "hashtags": "Traolak",
+ "posts": "Bidalketak"
+ },
+ "empty_state": {
+ "no_results": "Emaitzarik ez"
+ },
+ "recent_search": "Azken bilaketak",
+ "clear": "Garbitu"
+ }
+ },
+ "favorite": {
+ "title": "Zure gogokoak"
+ },
+ "notification": {
+ "title": {
+ "Everything": "Dena",
+ "Mentions": "Aipamenak"
+ },
+ "notification_description": {
+ "followed_you": "zu jarraitzen hasi da",
+ "favorited_your_post": "erabiltzaileak zure bidalketa gogoko du",
+ "reblogged_your_post": "erabiltzaileak bultzada eman dio zure bidalketari",
+ "mentioned_you": "erabiltzaileak aipatu zaitu",
+ "request_to_follow_you": "erabiltzaileak zu jarraitzea eskatu du",
+ "poll_has_ended": "inkesta amaitu da"
+ },
+ "keyobard": {
+ "show_everything": "Erakutsi guztia",
+ "show_mentions": "Erakutsi aipamenak"
+ }
+ },
+ "thread": {
+ "back_title": "Bidalketa",
+ "title": "%s(e)n bidalketa"
+ },
+ "settings": {
+ "title": "Ezarpenak",
+ "section": {
+ "appearance": {
+ "title": "Itxura",
+ "automatic": "Automatikoa",
+ "light": "Beti argia",
+ "dark": "Beti iluna"
+ },
+ "look_and_feel": {
+ "title": "Itxura",
+ "use_system": "Erabili sistemakoa",
+ "really_dark": "Oso iluna",
+ "sorta_dark": "Ilun antzekoa",
+ "light": "Argia"
+ },
+ "notifications": {
+ "title": "Jakinarazpenak",
+ "favorites": "Nire bidalketa gogoko egitean",
+ "follows": "Jarraitzen nau",
+ "boosts": "Nire bidalketa bultzatu du",
+ "mentions": "Aipatu nau",
+ "trigger": {
+ "anyone": "edozein",
+ "follower": "jarraitzaile bat",
+ "follow": "jarraitzen dudan edonor",
+ "noone": "inor ez",
+ "title": "Noiz jakinarazi:"
+ }
+ },
+ "preference": {
+ "title": "Hobespenak",
+ "true_black_dark_mode": "Benetako modu beltz iluna",
+ "disable_avatar_animation": "Desgaitu abatar animatuak",
+ "disable_emoji_animation": "Desgaitu emoji animatuak",
+ "using_default_browser": "Erabili nabigatzaile lehenetsia estekak irekitzeko"
+ },
+ "boring_zone": {
+ "title": "Eremu aspergarria",
+ "account_settings": "Kontuaren ezarpenak",
+ "terms": "Zerbitzu-baldintzak",
+ "privacy": "Pribatutasun-gidalerroak"
+ },
+ "spicy_zone": {
+ "title": "Eremu beroa",
+ "clear": "Garbitu multimediaren cachea",
+ "signout": "Amaitu saioa"
+ }
+ },
+ "footer": {
+ "mastodon_description": "Mastodon software librea da. Arazoen berri eman dezakezu GitHub bidez: %s (%s)"
+ },
+ "keyboard": {
+ "close_settings_window": "Itxi ezarpenen leihoa"
+ }
+ },
+ "report": {
+ "title_report": "Salatu",
+ "title": "Salatu %s",
+ "step1": "1. urratsa 2tik",
+ "step2": "2. urratsa 2tik",
+ "content1": "Salaketan beste bidalketarik gehitu nahi duzu?",
+ "content2": "Moderatzaileek besterik jakin behar dute salaketa honi buruz?",
+ "report_sent_title": "Mila esker salaketagatik, berrikusiko dugu.",
+ "send": "Bidali salaketa",
+ "skip_to_send": "Bidali iruzkinik gabe",
+ "text_placeholder": "Idatzi edo itsatsi iruzkin gehigarriak",
+ "reported": "SALATUA"
+ },
+ "preview": {
+ "keyboard": {
+ "close_preview": "Itxi aurrebista",
+ "show_next": "Erakutsi hurrengoa",
+ "show_previous": "Erakutsi aurrekoa"
+ }
+ },
+ "account_list": {
+ "tab_bar_hint": "Unean hautatutako profila: %s. Ukitu birritan, ondoren eduki sakatuta kontu-aldatzailea erakusteko",
+ "dismiss_account_switcher": "Baztertu kontu-aldatzailea",
+ "add_account": "Gehitu kontua"
+ },
+ "wizard": {
+ "new_in_mastodon": "Berria Mastodonen",
+ "multiple_account_switch_intro_description": "Aldatu hainbat konturen artean profilaren botoia sakatuta edukiz.",
+ "accessibility_hint": "Ukitu birritan morroi hau baztertzeko"
+ }
+ }
+}
\ No newline at end of file
diff --git a/Localization/StringsConvertor/input/eu_ES/ios-infoPlist.json b/Localization/StringsConvertor/input/eu_ES/ios-infoPlist.json
new file mode 100644
index 000000000..bc0457eab
--- /dev/null
+++ b/Localization/StringsConvertor/input/eu_ES/ios-infoPlist.json
@@ -0,0 +1,6 @@
+{
+ "NSCameraUsageDescription": "Bidalketetarako argazkiak ateratzeko erabiltzen da",
+ "NSPhotoLibraryAddUsageDescription": "Argazkiak Argazki-liburutegian gordetzeko erabiltzen da",
+ "NewPostShortcutItemTitle": "Bidalketa berria",
+ "SearchShortcutItemTitle": "Bilatu"
+}
diff --git a/Localization/StringsConvertor/input/fr_FR/Localizable.stringsdict b/Localization/StringsConvertor/input/fr_FR/Localizable.stringsdict
index 4a912e4b3..37f07e67a 100644
--- a/Localization/StringsConvertor/input/fr_FR/Localizable.stringsdict
+++ b/Localization/StringsConvertor/input/fr_FR/Localizable.stringsdict
@@ -37,7 +37,7 @@
a11y.plural.count.input_limit_remains
NSStringLocalizedFormatKey
- Input limit remains %#@character_count@
+ La limite d'entrée reste %#@character_count@
character_count
NSStringFormatSpecTypeKey
diff --git a/Localization/StringsConvertor/input/fr_FR/app.json b/Localization/StringsConvertor/input/fr_FR/app.json
index dd834928a..9941ff99e 100644
--- a/Localization/StringsConvertor/input/fr_FR/app.json
+++ b/Localization/StringsConvertor/input/fr_FR/app.json
@@ -46,7 +46,7 @@
},
"delete_post": {
"title": "Voulez-vous vraiment supprimer ce message ?",
- "delete": "Supprimer"
+ "message": "Voulez-vous vraiment supprimer ce message ?"
},
"clean_cache": {
"title": "Vider le cache",
@@ -67,7 +67,7 @@
"done": "Terminé",
"confirm": "Confirmer",
"continue": "Continuer",
- "compose": "Compose",
+ "compose": "Rédiger",
"cancel": "Annuler",
"discard": "Abandonner",
"try_again": "Réessayer",
@@ -82,6 +82,7 @@
"share_user": "Partager %s",
"share_post": "Partager la publication",
"open_in_safari": "Ouvrir dans Safari",
+ "open_in_browser": "Ouvrir dans le navigateur",
"find_people": "Trouver des personnes à suivre",
"manually_search": "Rechercher manuellement à la place",
"skip": "Passer",
@@ -139,7 +140,8 @@
"unreblog": "Annuler le reblog",
"favorite": "Favori",
"unfavorite": "Retirer des favoris",
- "menu": "Menu"
+ "menu": "Menu",
+ "hide": "Cacher"
},
"tag": {
"url": "URL",
@@ -148,6 +150,12 @@
"hashtag": "Hashtag",
"email": "Courriel",
"emoji": "Émoji"
+ },
+ "visibility": {
+ "unlisted": "Tout le monde peut voir ce message mais ne sera pas affiché sur le fil public.",
+ "private": "Seul·e·s leurs abonné·e·s peuvent voir ce message.",
+ "private_from_me": "Seul·e·s mes abonné·e·s peuvent voir ce message.",
+ "direct": "Seul·e l’utilisateur·rice mentionnée peut voir ce message."
}
},
"friendship": {
@@ -192,10 +200,14 @@
},
"scene": {
"welcome": {
- "slogan": "Le réseau social qui vous rend le contrôle."
+ "slogan": "Le réseau social qui vous rend le contrôle.",
+ "get_started": "Prise en main",
+ "log_in": "Se connecter"
},
"server_picker": {
"title": "Choisissez un serveur,\nn'importe quel serveur.",
+ "subtitle": "Choisissez une communauté en fonction de vos intérêts, de votre région ou de votre objectif général.",
+ "subtitle_extend": "Choisissez une communauté basée sur vos intérêts, votre région ou un but général. Chaque communauté est gérée par une organisation ou un individu entièrement indépendant.",
"button": {
"category": {
"all": "Tout",
@@ -248,6 +260,12 @@
},
"password": {
"placeholder": "mot de passe",
+ "require": "Votre mot de passe doit être composé d’au moins :",
+ "character_limit": "8 caractères",
+ "accessibility": {
+ "checked": "vérifié",
+ "unchecked": "non vérifié"
+ },
"hint": "Votre mot de passe doit contenir au moins 8 caractères"
},
"invite": {
@@ -298,7 +316,7 @@
"subtitle": "Nous venons d’envoyer un courriel à %s,\ntapotez le lien pour confirmer votre compte.",
"button": {
"open_email_app": "Ouvrir l’application de courriel",
- "dont_receive_email": "Je n’ai jamais reçu de courriel"
+ "resend": "Renvoyer"
},
"dont_receive_email": {
"title": "Vérifier vos courriels",
@@ -401,14 +419,24 @@
"segmented_control": {
"posts": "Publications",
"replies": "Réponses",
- "media": "Média"
+ "posts_and_replies": "Messages et réponses",
+ "media": "Média",
+ "about": "À propos"
},
"relationship_action_alert": {
+ "confirm_mute_user": {
+ "title": "Masquer le compte",
+ "message": "Êtes-vous sûr de vouloir mettre en sourdine %s"
+ },
"confirm_unmute_user": {
"title": "Ne plus mettre en sourdine ce compte",
"message": "Êtes-vous sûr de vouloir désactiver la sourdine de %s"
},
- "confirm_unblock_usre": {
+ "confirm_block_user": {
+ "title": "Bloquer le compte",
+ "message": "Confirmer le blocage de %s"
+ },
+ "confirm_unblock_user": {
"title": "Débloquer le compte",
"message": "Confirmer le déblocage de %s"
}
@@ -418,7 +446,7 @@
"footer": "Les abonné·e·s issus des autres serveurs ne sont pas affiché·e·s."
},
"following": {
- "footer": "Follows from other servers are not displayed."
+ "footer": "Les abonnés issus des autres serveurs ne sont pas affichés."
},
"search": {
"title": "Rechercher",
@@ -461,12 +489,14 @@
"Everything": "Tout",
"Mentions": "Mentions"
},
- "user_followed_you": "%s s’est abonné à vous",
- "user_favorited your post": "%s a mis votre pouet en favori",
- "user_reblogged_your_post": "%s a partagé votre publication",
- "user_mentioned_you": "%s vous a mentionné",
- "user_requested_to_follow_you": "%s a demandé à vous suivre",
- "user_your_poll_has_ended": "%s votre sondage est terminé",
+ "notification_description": {
+ "followed_you": "s’est abonné à vous",
+ "favorited_your_post": "a ajouté votre message à ses favoris",
+ "reblogged_your_post": "a partagé votre message",
+ "mentioned_you": "vous a mentionné",
+ "request_to_follow_you": "vous a envoyé une demande d’abonnement",
+ "poll_has_ended": "le sondage est terminé"
+ },
"keyobard": {
"show_everything": "Tout Afficher",
"show_mentions": "Afficher les mentions"
@@ -485,6 +515,13 @@
"light": "Toujours claire",
"dark": "Toujours sombre"
},
+ "look_and_feel": {
+ "title": "Apparence",
+ "use_system": "Utiliser le thème du système",
+ "really_dark": "Très sombre",
+ "sorta_dark": "Légèrement sombre",
+ "light": "Clair"
+ },
"notifications": {
"title": "Notifications",
"favorites": "Ajoute l’une de mes publications à ses favoris",
@@ -526,14 +563,17 @@
}
},
"report": {
+ "title_report": "Signalement",
"title": "Signaler %s",
"step1": "Étape 1 de 2",
"step2": "Étape 2 de 2",
"content1": "Y a-t-il d’autres messages que vous aimeriez ajouter au signalement?",
"content2": "Y a-t-il quelque chose que les modérateurs devraient savoir sur ce rapport ?",
+ "report_sent_title": "Merci de nous l’avoir signalé, nous allons examiner cela.",
"send": "Envoyer le rapport",
"skip_to_send": "Envoyer sans commentaire",
- "text_placeholder": "Tapez ou collez des informations supplémentaires"
+ "text_placeholder": "Tapez ou collez des informations supplémentaires",
+ "reported": "SIGNALÉ"
},
"preview": {
"keyboard": {
@@ -543,8 +583,8 @@
}
},
"account_list": {
- "tab_bar_hint": "Current selected profile: %s. Double tap then hold to show account switcher",
- "dismiss_account_switcher": "Dismiss Account Switcher",
+ "tab_bar_hint": "Profil sélectionné actuel: %s. Double appui puis maintenez enfoncé pour afficher le changement de compte",
+ "dismiss_account_switcher": "Rejeter le commutateur de compte",
"add_account": "Ajouter un compte"
},
"wizard": {
diff --git a/Localization/StringsConvertor/input/gd_GB/app.json b/Localization/StringsConvertor/input/gd_GB/app.json
index b5c66f8f6..520293d40 100644
--- a/Localization/StringsConvertor/input/gd_GB/app.json
+++ b/Localization/StringsConvertor/input/gd_GB/app.json
@@ -46,7 +46,7 @@
},
"delete_post": {
"title": "A bheil thu cinnteach gu bheil thu airson am post seo a sguabadh às?",
- "delete": "Sguab às"
+ "message": "A bheil thu cinnteach gu bheil thu airson am post seo a sguabadh às?"
},
"clean_cache": {
"title": "Falamhaich an tasgadan",
@@ -82,6 +82,7 @@
"share_user": "Co-roinn %s",
"share_post": "Co-roinn am post",
"open_in_safari": "Fosgail ann an Safari",
+ "open_in_browser": "Fosgail sa bhrabhsair",
"find_people": "Lorg daoine a leanas tu",
"manually_search": "Lorg a làimh ’na àite",
"skip": "Leum thairis air",
@@ -139,7 +140,8 @@
"unreblog": "Na brosnaich tuilleadh",
"favorite": "Cuir ris na h-annsachdan",
"unfavorite": "Thoir air falbh o na h-annsachdan",
- "menu": "Clàr-taice"
+ "menu": "Clàr-taice",
+ "hide": "Falaich"
},
"tag": {
"url": "URL",
@@ -148,6 +150,12 @@
"hashtag": "Taga hais",
"email": "Post-d",
"emoji": "Emoji"
+ },
+ "visibility": {
+ "unlisted": "Chì a h-uile duine am post seo ach cha nochd e air an loidhne-ama phoblach.",
+ "private": "Chan fhaic ach an luchd-leantainn aca am post seo.",
+ "private_from_me": "Chan fhaic ach an luchd-leantainn agam am post seo.",
+ "direct": "Chan fhaic ach an cleachdaiche air an dugadh iomradh am post seo."
}
},
"friendship": {
@@ -192,10 +200,14 @@
},
"scene": {
"welcome": {
- "slogan": "A’ cur nan lìonraidhean sòisealta\n’nad làmhan fhèin."
+ "slogan": "A’ cur nan lìonraidhean sòisealta\n’nad làmhan fhèin.",
+ "get_started": "Dèan toiseach-tòiseachaidh",
+ "log_in": "Clàraich a-steach"
},
"server_picker": {
"title": "Tagh frithealaiche sam bith.",
+ "subtitle": "Tagh coimhearsnachd stèidhichte air d’ ùidhean no an roinn-dùthcha agad no tè choitcheann.",
+ "subtitle_extend": "Tagh coimhearsnachd stèidhichte air d’ ùidhean no an roinn-dùthcha agad no tè choitcheann. Tha gach coimhearsnachd ’ga stiùireadh le buidheann no neach gu neo-eisimeileach.",
"button": {
"category": {
"all": "Na h-uile",
@@ -248,6 +260,12 @@
},
"password": {
"placeholder": "facal-faire",
+ "require": "Feumaidh am facal-faire agad co-dhiù:",
+ "character_limit": "8 caractaran",
+ "accessibility": {
+ "checked": "le cromag",
+ "unchecked": "gun chromag"
+ },
"hint": "Feumaidh ochd caractaran a bhith san fhacal-fhaire agad air a char as giorra"
},
"invite": {
@@ -298,7 +316,7 @@
"subtitle": "Tha sinn air post-d a chur gu %s,\nthoir gnogag air a’ chunntas a dhearbhadh a’ chunntais agad.",
"button": {
"open_email_app": "Fosgail aplacaid a’ phuist-d",
- "dont_receive_email": "Cha d’ fhuair mi post-d a-riamh"
+ "resend": "Ath-chuir"
},
"dont_receive_email": {
"title": "Thoir sùil air a’ phost-d agad",
@@ -401,14 +419,24 @@
"segmented_control": {
"posts": "Postaichean",
"replies": "Freagairtean",
- "media": "Meadhanan"
+ "posts_and_replies": "Postaichean ’s freagairtean",
+ "media": "Meadhanan",
+ "about": "Mu dhèidhinn"
},
"relationship_action_alert": {
+ "confirm_mute_user": {
+ "title": "Mùch an cunntas",
+ "message": "Dearbh mùchadh %s"
+ },
"confirm_unmute_user": {
"title": "Dì-mhùch an cunntas",
"message": "Dearbh dì-mhùchadh %s"
},
- "confirm_unblock_usre": {
+ "confirm_block_user": {
+ "title": "Bac an cunntas",
+ "message": "Dearbh bacadh %s"
+ },
+ "confirm_unblock_user": {
"title": "Dì-bhac an cunntas",
"message": "Dearbh dì-bhacadh %s"
}
@@ -461,12 +489,14 @@
"Everything": "A h-uile rud",
"Mentions": "Iomraidhean"
},
- "user_followed_you": "Tha %s a’ leantainn ort a-nis",
- "user_favorited your post": "Is annsa le %s am post agad",
- "user_reblogged_your_post": "Bhrosnaich %s am post agad",
- "user_mentioned_you": "Thug %s iomradh ort",
- "user_requested_to_follow_you": "Dh’iarr %s leantainn ort",
- "user_your_poll_has_ended": "Crìoch cunntais-bheachd aig %s",
+ "notification_description": {
+ "followed_you": "– ’s iad ’gad leantainn a-nis",
+ "favorited_your_post": "– ’s iad air am post agad a chur ris na h-annsachdan aca",
+ "reblogged_your_post": "– ’s iad air am post agad a bhrosnachadh",
+ "mentioned_you": "– ’s iad air iomradh a thoirt ort",
+ "request_to_follow_you": "iarrtas leantainn ort",
+ "poll_has_ended": "thàinig cunntas-bheachd gu crìoch"
+ },
"keyobard": {
"show_everything": "Seall a h-uile càil",
"show_mentions": "Seall na h-iomraidhean"
@@ -485,6 +515,13 @@
"light": "Soilleir an-còmhnaidh",
"dark": "Dorcha an-còmhnaidh"
},
+ "look_and_feel": {
+ "title": "Coltas",
+ "use_system": "Cleachd coltas an t-siostaim",
+ "really_dark": "Glè dhorcha",
+ "sorta_dark": "Caran dorcha",
+ "light": "Soilleir"
+ },
"notifications": {
"title": "Brathan",
"favorites": "Nuair as annsa leotha am post agam",
@@ -526,14 +563,17 @@
}
},
"report": {
+ "title_report": "Dèan gearan",
"title": "Dèan gearan mu %s",
"step1": "Ceum 1 à 2",
"step2": "Ceum 2 à 2",
"content1": "A bheil post sam bith eile ann a bu mhiann leat cur ris a’ ghearan?",
"content2": "A bheil rud sam bith ann a bu mhiann leat innse dha na maoir mun ghearan seo?",
+ "report_sent_title": "Mòran taing airson a’ ghearain, bheir sinn sùil air.",
"send": "Cuir an gearan",
"skip_to_send": "Cuir gun bheachd ris",
- "text_placeholder": "Sgrìobh no cuir ann beachdan a bharrachd"
+ "text_placeholder": "Sgrìobh no cuir ann beachdan a bharrachd",
+ "reported": "CHAIDH GEARAN A DHÈANAMH"
},
"preview": {
"keyboard": {
diff --git a/Localization/StringsConvertor/input/hi_IN/app.json b/Localization/StringsConvertor/input/hi_IN/app.json
index 5c01ae7e0..ad99e178d 100644
--- a/Localization/StringsConvertor/input/hi_IN/app.json
+++ b/Localization/StringsConvertor/input/hi_IN/app.json
@@ -45,8 +45,8 @@
"message": "Please enable the photo library access permission to save the photo."
},
"delete_post": {
- "title": "Are you sure you want to delete this post?",
- "delete": "Delete"
+ "title": "Delete Post",
+ "message": "Are you sure you want to delete this post?"
},
"clean_cache": {
"title": "Clean Cache",
@@ -82,6 +82,7 @@
"share_user": "Share %s",
"share_post": "Share Post",
"open_in_safari": "Open in Safari",
+ "open_in_browser": "Open in Browser",
"find_people": "Find people to follow",
"manually_search": "Manually search instead",
"skip": "Skip",
@@ -139,7 +140,8 @@
"unreblog": "Undo reblog",
"favorite": "Favorite",
"unfavorite": "Unfavorite",
- "menu": "Menu"
+ "menu": "Menu",
+ "hide": "Hide"
},
"tag": {
"url": "URL",
@@ -148,6 +150,12 @@
"hashtag": "Hashtag",
"email": "Email",
"emoji": "Emoji"
+ },
+ "visibility": {
+ "unlisted": "Everyone can see this post but not display in the public timeline.",
+ "private": "Only their followers can see this post.",
+ "private_from_me": "Only my followers can see this post.",
+ "direct": "Only mentioned user can see this post."
}
},
"friendship": {
@@ -192,10 +200,14 @@
},
"scene": {
"welcome": {
- "slogan": "Social networking\nback in your hands."
+ "slogan": "Social networking\nback in your hands.",
+ "get_started": "Get Started",
+ "log_in": "Log In"
},
"server_picker": {
- "title": "Pick a server,\nany server.",
+ "title": "Mastodon is made of users in different communities.",
+ "subtitle": "Pick a community based on your interests, region, or a general purpose one.",
+ "subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": {
"category": {
"all": "All",
@@ -222,7 +234,7 @@
"category": "CATEGORY"
},
"input": {
- "placeholder": "Find a server or join your own..."
+ "placeholder": "Search communities"
},
"empty_state": {
"finding_servers": "Finding available servers...",
@@ -231,7 +243,7 @@
}
},
"register": {
- "title": "Tell us about you.",
+ "title": "Let’s get you set up on %s",
"input": {
"avatar": {
"delete": "Delete"
@@ -248,6 +260,12 @@
},
"password": {
"placeholder": "password",
+ "require": "Your password needs at least:",
+ "character_limit": "8 characters",
+ "accessibility": {
+ "checked": "checked",
+ "unchecked": "unchecked"
+ },
"hint": "Your password needs at least eight characters"
},
"invite": {
@@ -285,7 +303,7 @@
},
"server_rules": {
"title": "Some ground rules.",
- "subtitle": "These rules are set by the admins of %s.",
+ "subtitle": "These are set and enforced by the %s moderators.",
"prompt": "By continuing, you’re subject to the terms of service and privacy policy for %s.",
"terms_of_service": "terms of service",
"privacy_policy": "privacy policy",
@@ -295,10 +313,10 @@
},
"confirm_email": {
"title": "One last thing.",
- "subtitle": "We just sent an email to %s,\ntap the link to confirm your account.",
+ "subtitle": "Tap the link we emailed to you to verify your account.",
"button": {
"open_email_app": "Open Email App",
- "dont_receive_email": "I never got an email"
+ "resend": "Resend"
},
"dont_receive_email": {
"title": "Check your email",
@@ -401,14 +419,24 @@
"segmented_control": {
"posts": "Posts",
"replies": "Replies",
- "media": "Media"
+ "posts_and_replies": "Posts and Replies",
+ "media": "Media",
+ "about": "About"
},
"relationship_action_alert": {
+ "confirm_mute_user": {
+ "title": "Mute Account",
+ "message": "Confirm to mute %s"
+ },
"confirm_unmute_user": {
"title": "Unmute Account",
"message": "Confirm to unmute %s"
},
- "confirm_unblock_usre": {
+ "confirm_block_user": {
+ "title": "Block Account",
+ "message": "Confirm to block %s"
+ },
+ "confirm_unblock_user": {
"title": "Unblock Account",
"message": "Confirm to unblock %s"
}
@@ -461,12 +489,14 @@
"Everything": "Everything",
"Mentions": "Mentions"
},
- "user_followed_you": "%s followed you",
- "user_favorited your post": "%s favorited your post",
- "user_reblogged_your_post": "%s reblogged your post",
- "user_mentioned_you": "%s mentioned you",
- "user_requested_to_follow_you": "%s requested to follow you",
- "user_your_poll_has_ended": "%s Your poll has ended",
+ "notification_description": {
+ "followed_you": "followed you",
+ "favorited_your_post": "favorited your post",
+ "reblogged_your_post": "reblogged your post",
+ "mentioned_you": "mentioned you",
+ "request_to_follow_you": "request to follow you",
+ "poll_has_ended": "poll has ended"
+ },
"keyobard": {
"show_everything": "Show Everything",
"show_mentions": "Show Mentions"
@@ -485,6 +515,13 @@
"light": "Always Light",
"dark": "Always Dark"
},
+ "look_and_feel": {
+ "title": "Look and Feel",
+ "use_system": "Use System",
+ "really_dark": "Really Dark",
+ "sorta_dark": "Sorta Dark",
+ "light": "Light"
+ },
"notifications": {
"title": "Notifications",
"favorites": "Favorites my post",
@@ -526,14 +563,17 @@
}
},
"report": {
+ "title_report": "Report",
"title": "Report %s",
"step1": "Step 1 of 2",
"step2": "Step 2 of 2",
"content1": "Are there any other posts you’d like to add to the report?",
"content2": "Is there anything the moderators should know about this report?",
+ "report_sent_title": "Thanks for reporting, we’ll look into this.",
"send": "Send Report",
"skip_to_send": "Send without comment",
- "text_placeholder": "Type or paste additional comments"
+ "text_placeholder": "Type or paste additional comments",
+ "reported": "REPORTED"
},
"preview": {
"keyboard": {
diff --git a/Localization/StringsConvertor/input/id_ID/app.json b/Localization/StringsConvertor/input/id_ID/app.json
index 6f3171254..c6af04e08 100644
--- a/Localization/StringsConvertor/input/id_ID/app.json
+++ b/Localization/StringsConvertor/input/id_ID/app.json
@@ -46,7 +46,7 @@
},
"delete_post": {
"title": "Apakah Anda yakin ingin menghapus postingan ini?",
- "delete": "Hapus"
+ "message": "Are you sure you want to delete this post?"
},
"clean_cache": {
"title": "Bersihkan Cache",
@@ -82,6 +82,7 @@
"share_user": "Bagikan %s",
"share_post": "Bagikan Postingan",
"open_in_safari": "Buka di Safari",
+ "open_in_browser": "Open in Browser",
"find_people": "Cari orang untuk diikuti",
"manually_search": "Manually search instead",
"skip": "Lewati",
@@ -139,7 +140,8 @@
"unreblog": "Undo reblog",
"favorite": "Favorit",
"unfavorite": "Unfavorite",
- "menu": "Menu"
+ "menu": "Menu",
+ "hide": "Hide"
},
"tag": {
"url": "URL",
@@ -148,6 +150,12 @@
"hashtag": "Tagar",
"email": "Surel",
"emoji": "Emoji"
+ },
+ "visibility": {
+ "unlisted": "Everyone can see this post but not display in the public timeline.",
+ "private": "Only their followers can see this post.",
+ "private_from_me": "Only my followers can see this post.",
+ "direct": "Only mentioned user can see this post."
}
},
"friendship": {
@@ -192,10 +200,14 @@
},
"scene": {
"welcome": {
- "slogan": "Social networking\nback in your hands."
+ "slogan": "Social networking\nback in your hands.",
+ "get_started": "Get Started",
+ "log_in": "Log In"
},
"server_picker": {
"title": "Pilih sebuah server,\nserver manapun.",
+ "subtitle": "Pick a community based on your interests, region, or a general purpose one.",
+ "subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": {
"category": {
"all": "Semua",
@@ -222,7 +234,7 @@
"category": "KATEGORI"
},
"input": {
- "placeholder": "Find a server or join your own..."
+ "placeholder": "Search communities"
},
"empty_state": {
"finding_servers": "Mencari server yang tersedia...",
@@ -248,6 +260,12 @@
},
"password": {
"placeholder": "kata sandi",
+ "require": "Your password needs at least:",
+ "character_limit": "8 characters",
+ "accessibility": {
+ "checked": "checked",
+ "unchecked": "unchecked"
+ },
"hint": "Kata sandi Anda harus memiliki sekurang-kurangnya delapan karakter"
},
"invite": {
@@ -298,7 +316,7 @@
"subtitle": "Kami baru saja mengirim sebuah surel ke %s,\nketuk tautannya untuk mengkonfirmasi akun Anda.",
"button": {
"open_email_app": "Buka Aplikasi Surel",
- "dont_receive_email": "Saya tidak mendapatkan surel"
+ "resend": "Resend"
},
"dont_receive_email": {
"title": "Periksa surel Anda",
@@ -401,15 +419,25 @@
"segmented_control": {
"posts": "Postingan",
"replies": "Balasan",
- "media": "Media"
+ "posts_and_replies": "Posts and Replies",
+ "media": "Media",
+ "about": "About"
},
"relationship_action_alert": {
+ "confirm_mute_user": {
+ "title": "Mute Account",
+ "message": "Confirm to mute %s"
+ },
"confirm_unmute_user": {
"title": "Berhenti Membisukan Akun",
"message": "Confirm to unmute %s"
},
- "confirm_unblock_usre": {
- "title": "Berhenti Memblokir Akun",
+ "confirm_block_user": {
+ "title": "Block Account",
+ "message": "Confirm to block %s"
+ },
+ "confirm_unblock_user": {
+ "title": "Unblock Account",
"message": "Confirm to unblock %s"
}
}
@@ -461,12 +489,14 @@
"Everything": "Segalanya",
"Mentions": "Sebutan"
},
- "user_followed_you": "%s mengikuti Anda",
- "user_favorited your post": "%s favorited your post",
- "user_reblogged_your_post": "%s reblogged your post",
- "user_mentioned_you": "%s menyebut Anda",
- "user_requested_to_follow_you": "%s ingin mengikuti Anda",
- "user_your_poll_has_ended": "%s Japat Anda telah berakhir",
+ "notification_description": {
+ "followed_you": "followed you",
+ "favorited_your_post": "favorited your post",
+ "reblogged_your_post": "reblogged your post",
+ "mentioned_you": "mentioned you",
+ "request_to_follow_you": "request to follow you",
+ "poll_has_ended": "poll has ended"
+ },
"keyobard": {
"show_everything": "Tampilkan Segalanya",
"show_mentions": "Tampilkan Sebutan"
@@ -485,6 +515,13 @@
"light": "Selalu Cerah",
"dark": "Selalu Gelap"
},
+ "look_and_feel": {
+ "title": "Look and Feel",
+ "use_system": "Use System",
+ "really_dark": "Really Dark",
+ "sorta_dark": "Sorta Dark",
+ "light": "Light"
+ },
"notifications": {
"title": "Notifikasi",
"favorites": "Favorites my post",
@@ -526,14 +563,17 @@
}
},
"report": {
+ "title_report": "Report",
"title": "Laporkan %s",
"step1": "Langkah 1 dari 2",
"step2": "Langkah 2 dari 2",
"content1": "Apakah ada postingan lain yang ingin Anda tambahkan ke laporannya?",
"content2": "Ada yang moderator harus tahu tentang laporan ini?",
+ "report_sent_title": "Thanks for reporting, we’ll look into this.",
"send": "Kirim Laporan",
"skip_to_send": "Kirim tanpa komentar",
- "text_placeholder": "Ketik atau tempel komentar tambahan"
+ "text_placeholder": "Ketik atau tempel komentar tambahan",
+ "reported": "REPORTED"
},
"preview": {
"keyboard": {
diff --git a/Mastodon/Resources/en.lproj/Localizable.stringsdict b/Localization/StringsConvertor/input/it_IT/Localizable.stringsdict
similarity index 100%
rename from Mastodon/Resources/en.lproj/Localizable.stringsdict
rename to Localization/StringsConvertor/input/it_IT/Localizable.stringsdict
diff --git a/Localization/StringsConvertor/input/it_IT/app.json b/Localization/StringsConvertor/input/it_IT/app.json
new file mode 100644
index 000000000..ad99e178d
--- /dev/null
+++ b/Localization/StringsConvertor/input/it_IT/app.json
@@ -0,0 +1,596 @@
+{
+ "common": {
+ "alerts": {
+ "common": {
+ "please_try_again": "Please try again.",
+ "please_try_again_later": "Please try again later."
+ },
+ "sign_up_failure": {
+ "title": "Sign Up Failure"
+ },
+ "server_error": {
+ "title": "Server Error"
+ },
+ "vote_failure": {
+ "title": "Vote Failure",
+ "poll_ended": "The poll has ended"
+ },
+ "discard_post_content": {
+ "title": "Discard Draft",
+ "message": "Confirm to discard composed post content."
+ },
+ "publish_post_failure": {
+ "title": "Publish Failure",
+ "message": "Failed to publish the post.\nPlease check your internet connection.",
+ "attachments_message": {
+ "video_attach_with_photo": "Cannot attach a video to a post that already contains images.",
+ "more_than_one_video": "Cannot attach more than one video."
+ }
+ },
+ "edit_profile_failure": {
+ "title": "Edit Profile Error",
+ "message": "Cannot edit profile. Please try again."
+ },
+ "sign_out": {
+ "title": "Sign Out",
+ "message": "Are you sure you want to sign out?",
+ "confirm": "Sign Out"
+ },
+ "block_domain": {
+ "title": "Are you really, really sure you want to block the entire %s? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain and any of your followers from that domain will be removed.",
+ "block_entire_domain": "Block Domain"
+ },
+ "save_photo_failure": {
+ "title": "Save Photo Failure",
+ "message": "Please enable the photo library access permission to save the photo."
+ },
+ "delete_post": {
+ "title": "Delete Post",
+ "message": "Are you sure you want to delete this post?"
+ },
+ "clean_cache": {
+ "title": "Clean Cache",
+ "message": "Successfully cleaned %s cache."
+ }
+ },
+ "controls": {
+ "actions": {
+ "back": "Back",
+ "next": "Next",
+ "previous": "Previous",
+ "open": "Open",
+ "add": "Add",
+ "remove": "Remove",
+ "edit": "Edit",
+ "save": "Save",
+ "ok": "OK",
+ "done": "Done",
+ "confirm": "Confirm",
+ "continue": "Continue",
+ "compose": "Compose",
+ "cancel": "Cancel",
+ "discard": "Discard",
+ "try_again": "Try Again",
+ "take_photo": "Take Photo",
+ "save_photo": "Save Photo",
+ "copy_photo": "Copy Photo",
+ "sign_in": "Sign In",
+ "sign_up": "Sign Up",
+ "see_more": "See More",
+ "preview": "Preview",
+ "share": "Share",
+ "share_user": "Share %s",
+ "share_post": "Share Post",
+ "open_in_safari": "Open in Safari",
+ "open_in_browser": "Open in Browser",
+ "find_people": "Find people to follow",
+ "manually_search": "Manually search instead",
+ "skip": "Skip",
+ "reply": "Reply",
+ "report_user": "Report %s",
+ "block_domain": "Block %s",
+ "unblock_domain": "Unblock %s",
+ "settings": "Settings",
+ "delete": "Delete"
+ },
+ "tabs": {
+ "home": "Home",
+ "search": "Search",
+ "notification": "Notification",
+ "profile": "Profile"
+ },
+ "keyboard": {
+ "common": {
+ "switch_to_tab": "Switch to %s",
+ "compose_new_post": "Compose New Post",
+ "show_favorites": "Show Favorites",
+ "open_settings": "Open Settings"
+ },
+ "timeline": {
+ "previous_status": "Previous Post",
+ "next_status": "Next Post",
+ "open_status": "Open Post",
+ "open_author_profile": "Open Author's Profile",
+ "open_reblogger_profile": "Open Reblogger's Profile",
+ "reply_status": "Reply to Post",
+ "toggle_reblog": "Toggle Reblog on Post",
+ "toggle_favorite": "Toggle Favorite on Post",
+ "toggle_content_warning": "Toggle Content Warning",
+ "preview_image": "Preview Image"
+ },
+ "segmented_control": {
+ "previous_section": "Previous Section",
+ "next_section": "Next Section"
+ }
+ },
+ "status": {
+ "user_reblogged": "%s reblogged",
+ "user_replied_to": "Replied to %s",
+ "show_post": "Show Post",
+ "show_user_profile": "Show user profile",
+ "content_warning": "Content Warning",
+ "media_content_warning": "Tap anywhere to reveal",
+ "poll": {
+ "vote": "Vote",
+ "closed": "Closed"
+ },
+ "actions": {
+ "reply": "Reply",
+ "reblog": "Reblog",
+ "unreblog": "Undo reblog",
+ "favorite": "Favorite",
+ "unfavorite": "Unfavorite",
+ "menu": "Menu",
+ "hide": "Hide"
+ },
+ "tag": {
+ "url": "URL",
+ "mention": "Mention",
+ "link": "Link",
+ "hashtag": "Hashtag",
+ "email": "Email",
+ "emoji": "Emoji"
+ },
+ "visibility": {
+ "unlisted": "Everyone can see this post but not display in the public timeline.",
+ "private": "Only their followers can see this post.",
+ "private_from_me": "Only my followers can see this post.",
+ "direct": "Only mentioned user can see this post."
+ }
+ },
+ "friendship": {
+ "follow": "Follow",
+ "following": "Following",
+ "request": "Request",
+ "pending": "Pending",
+ "block": "Block",
+ "block_user": "Block %s",
+ "block_domain": "Block %s",
+ "unblock": "Unblock",
+ "unblock_user": "Unblock %s",
+ "blocked": "Blocked",
+ "mute": "Mute",
+ "mute_user": "Mute %s",
+ "unmute": "Unmute",
+ "unmute_user": "Unmute %s",
+ "muted": "Muted",
+ "edit_info": "Edit Info"
+ },
+ "timeline": {
+ "filtered": "Filtered",
+ "timestamp": {
+ "now": "Now"
+ },
+ "loader": {
+ "load_missing_posts": "Load missing posts",
+ "loading_missing_posts": "Loading missing posts...",
+ "show_more_replies": "Show more replies"
+ },
+ "header": {
+ "no_status_found": "No Post Found",
+ "blocking_warning": "You can’t view this user's profile\nuntil you unblock them.\nYour profile looks like this to them.",
+ "user_blocking_warning": "You can’t view %s’s profile\nuntil you unblock them.\nYour profile looks like this to them.",
+ "blocked_warning": "You can’t view this user’s profile\nuntil they unblock you.",
+ "user_blocked_warning": "You can’t view %s’s profile\nuntil they unblock you.",
+ "suspended_warning": "This user has been suspended.",
+ "user_suspended_warning": "%s’s account has been suspended."
+ }
+ }
+ }
+ },
+ "scene": {
+ "welcome": {
+ "slogan": "Social networking\nback in your hands.",
+ "get_started": "Get Started",
+ "log_in": "Log In"
+ },
+ "server_picker": {
+ "title": "Mastodon is made of users in different communities.",
+ "subtitle": "Pick a community based on your interests, region, or a general purpose one.",
+ "subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
+ "button": {
+ "category": {
+ "all": "All",
+ "all_accessiblity_description": "Category: All",
+ "academia": "academia",
+ "activism": "activism",
+ "food": "food",
+ "furry": "furry",
+ "games": "games",
+ "general": "general",
+ "journalism": "journalism",
+ "lgbt": "lgbt",
+ "regional": "regional",
+ "art": "art",
+ "music": "music",
+ "tech": "tech"
+ },
+ "see_less": "See Less",
+ "see_more": "See More"
+ },
+ "label": {
+ "language": "LANGUAGE",
+ "users": "USERS",
+ "category": "CATEGORY"
+ },
+ "input": {
+ "placeholder": "Search communities"
+ },
+ "empty_state": {
+ "finding_servers": "Finding available servers...",
+ "bad_network": "Something went wrong while loading the data. Check your internet connection.",
+ "no_results": "No results"
+ }
+ },
+ "register": {
+ "title": "Let’s get you set up on %s",
+ "input": {
+ "avatar": {
+ "delete": "Delete"
+ },
+ "username": {
+ "placeholder": "username",
+ "duplicate_prompt": "This username is taken."
+ },
+ "display_name": {
+ "placeholder": "display name"
+ },
+ "email": {
+ "placeholder": "email"
+ },
+ "password": {
+ "placeholder": "password",
+ "require": "Your password needs at least:",
+ "character_limit": "8 characters",
+ "accessibility": {
+ "checked": "checked",
+ "unchecked": "unchecked"
+ },
+ "hint": "Your password needs at least eight characters"
+ },
+ "invite": {
+ "registration_user_invite_request": "Why do you want to join?"
+ }
+ },
+ "error": {
+ "item": {
+ "username": "Username",
+ "email": "Email",
+ "password": "Password",
+ "agreement": "Agreement",
+ "locale": "Locale",
+ "reason": "Reason"
+ },
+ "reason": {
+ "blocked": "%s contains a disallowed email provider",
+ "unreachable": "%s does not seem to exist",
+ "taken": "%s is already in use",
+ "reserved": "%s is a reserved keyword",
+ "accepted": "%s must be accepted",
+ "blank": "%s is required",
+ "invalid": "%s is invalid",
+ "too_long": "%s is too long",
+ "too_short": "%s is too short",
+ "inclusion": "%s is not a supported value"
+ },
+ "special": {
+ "username_invalid": "Username must only contain alphanumeric characters and underscores",
+ "username_too_long": "Username is too long (can’t be longer than 30 characters)",
+ "email_invalid": "This is not a valid email address",
+ "password_too_short": "Password is too short (must be at least 8 characters)"
+ }
+ }
+ },
+ "server_rules": {
+ "title": "Some ground rules.",
+ "subtitle": "These are set and enforced by the %s moderators.",
+ "prompt": "By continuing, you’re subject to the terms of service and privacy policy for %s.",
+ "terms_of_service": "terms of service",
+ "privacy_policy": "privacy policy",
+ "button": {
+ "confirm": "I Agree"
+ }
+ },
+ "confirm_email": {
+ "title": "One last thing.",
+ "subtitle": "Tap the link we emailed to you to verify your account.",
+ "button": {
+ "open_email_app": "Open Email App",
+ "resend": "Resend"
+ },
+ "dont_receive_email": {
+ "title": "Check your email",
+ "description": "Check if your email address is correct as well as your junk folder if you haven’t.",
+ "resend_email": "Resend Email"
+ },
+ "open_email_app": {
+ "title": "Check your inbox.",
+ "description": "We just sent you an email. Check your junk folder if you haven’t.",
+ "mail": "Mail",
+ "open_email_client": "Open Email Client"
+ }
+ },
+ "home_timeline": {
+ "title": "Home",
+ "navigation_bar_state": {
+ "offline": "Offline",
+ "new_posts": "See new posts",
+ "published": "Published!",
+ "Publishing": "Publishing post..."
+ }
+ },
+ "suggestion_account": {
+ "title": "Find People to Follow",
+ "follow_explain": "When you follow someone, you’ll see their posts in your home feed."
+ },
+ "compose": {
+ "title": {
+ "new_post": "New Post",
+ "new_reply": "New Reply"
+ },
+ "media_selection": {
+ "camera": "Take Photo",
+ "photo_library": "Photo Library",
+ "browse": "Browse"
+ },
+ "content_input_placeholder": "Type or paste what’s on your mind",
+ "compose_action": "Publish",
+ "replying_to_user": "replying to %s",
+ "attachment": {
+ "photo": "photo",
+ "video": "video",
+ "attachment_broken": "This %s is broken and can’t be\nuploaded to Mastodon.",
+ "description_photo": "Describe the photo for the visually-impaired...",
+ "description_video": "Describe the video for the visually-impaired..."
+ },
+ "poll": {
+ "duration_time": "Duration: %s",
+ "thirty_minutes": "30 minutes",
+ "one_hour": "1 Hour",
+ "six_hours": "6 Hours",
+ "one_day": "1 Day",
+ "three_days": "3 Days",
+ "seven_days": "7 Days",
+ "option_number": "Option %ld"
+ },
+ "content_warning": {
+ "placeholder": "Write an accurate warning here..."
+ },
+ "visibility": {
+ "public": "Public",
+ "unlisted": "Unlisted",
+ "private": "Followers only",
+ "direct": "Only people I mention"
+ },
+ "auto_complete": {
+ "space_to_add": "Space to add"
+ },
+ "accessibility": {
+ "append_attachment": "Add Attachment",
+ "append_poll": "Add Poll",
+ "remove_poll": "Remove Poll",
+ "custom_emoji_picker": "Custom Emoji Picker",
+ "enable_content_warning": "Enable Content Warning",
+ "disable_content_warning": "Disable Content Warning",
+ "post_visibility_menu": "Post Visibility Menu"
+ },
+ "keyboard": {
+ "discard_post": "Discard Post",
+ "publish_post": "Publish Post",
+ "toggle_poll": "Toggle Poll",
+ "toggle_content_warning": "Toggle Content Warning",
+ "append_attachment_entry": "Add Attachment - %s",
+ "select_visibility_entry": "Select Visibility - %s"
+ }
+ },
+ "profile": {
+ "dashboard": {
+ "posts": "posts",
+ "following": "following",
+ "followers": "followers"
+ },
+ "fields": {
+ "add_row": "Add Row",
+ "placeholder": {
+ "label": "Label",
+ "content": "Content"
+ }
+ },
+ "segmented_control": {
+ "posts": "Posts",
+ "replies": "Replies",
+ "posts_and_replies": "Posts and Replies",
+ "media": "Media",
+ "about": "About"
+ },
+ "relationship_action_alert": {
+ "confirm_mute_user": {
+ "title": "Mute Account",
+ "message": "Confirm to mute %s"
+ },
+ "confirm_unmute_user": {
+ "title": "Unmute Account",
+ "message": "Confirm to unmute %s"
+ },
+ "confirm_block_user": {
+ "title": "Block Account",
+ "message": "Confirm to block %s"
+ },
+ "confirm_unblock_user": {
+ "title": "Unblock Account",
+ "message": "Confirm to unblock %s"
+ }
+ }
+ },
+ "follower": {
+ "footer": "Followers from other servers are not displayed."
+ },
+ "following": {
+ "footer": "Follows from other servers are not displayed."
+ },
+ "search": {
+ "title": "Search",
+ "search_bar": {
+ "placeholder": "Search hashtags and users",
+ "cancel": "Cancel"
+ },
+ "recommend": {
+ "button_text": "See All",
+ "hash_tag": {
+ "title": "Trending on Mastodon",
+ "description": "Hashtags that are getting quite a bit of attention",
+ "people_talking": "%s people are talking"
+ },
+ "accounts": {
+ "title": "Accounts you might like",
+ "description": "You may like to follow these accounts",
+ "follow": "Follow"
+ }
+ },
+ "searching": {
+ "segment": {
+ "all": "All",
+ "people": "People",
+ "hashtags": "Hashtags",
+ "posts": "Posts"
+ },
+ "empty_state": {
+ "no_results": "No results"
+ },
+ "recent_search": "Recent searches",
+ "clear": "Clear"
+ }
+ },
+ "favorite": {
+ "title": "Your Favorites"
+ },
+ "notification": {
+ "title": {
+ "Everything": "Everything",
+ "Mentions": "Mentions"
+ },
+ "notification_description": {
+ "followed_you": "followed you",
+ "favorited_your_post": "favorited your post",
+ "reblogged_your_post": "reblogged your post",
+ "mentioned_you": "mentioned you",
+ "request_to_follow_you": "request to follow you",
+ "poll_has_ended": "poll has ended"
+ },
+ "keyobard": {
+ "show_everything": "Show Everything",
+ "show_mentions": "Show Mentions"
+ }
+ },
+ "thread": {
+ "back_title": "Post",
+ "title": "Post from %s"
+ },
+ "settings": {
+ "title": "Settings",
+ "section": {
+ "appearance": {
+ "title": "Appearance",
+ "automatic": "Automatic",
+ "light": "Always Light",
+ "dark": "Always Dark"
+ },
+ "look_and_feel": {
+ "title": "Look and Feel",
+ "use_system": "Use System",
+ "really_dark": "Really Dark",
+ "sorta_dark": "Sorta Dark",
+ "light": "Light"
+ },
+ "notifications": {
+ "title": "Notifications",
+ "favorites": "Favorites my post",
+ "follows": "Follows me",
+ "boosts": "Reblogs my post",
+ "mentions": "Mentions me",
+ "trigger": {
+ "anyone": "anyone",
+ "follower": "a follower",
+ "follow": "anyone I follow",
+ "noone": "no one",
+ "title": "Notify me when"
+ }
+ },
+ "preference": {
+ "title": "Preferences",
+ "true_black_dark_mode": "True black dark mode",
+ "disable_avatar_animation": "Disable animated avatars",
+ "disable_emoji_animation": "Disable animated emojis",
+ "using_default_browser": "Use default browser to open links"
+ },
+ "boring_zone": {
+ "title": "The Boring Zone",
+ "account_settings": "Account Settings",
+ "terms": "Terms of Service",
+ "privacy": "Privacy Policy"
+ },
+ "spicy_zone": {
+ "title": "The Spicy Zone",
+ "clear": "Clear Media Cache",
+ "signout": "Sign Out"
+ }
+ },
+ "footer": {
+ "mastodon_description": "Mastodon is open source software. You can report issues on GitHub at %s (%s)"
+ },
+ "keyboard": {
+ "close_settings_window": "Close Settings Window"
+ }
+ },
+ "report": {
+ "title_report": "Report",
+ "title": "Report %s",
+ "step1": "Step 1 of 2",
+ "step2": "Step 2 of 2",
+ "content1": "Are there any other posts you’d like to add to the report?",
+ "content2": "Is there anything the moderators should know about this report?",
+ "report_sent_title": "Thanks for reporting, we’ll look into this.",
+ "send": "Send Report",
+ "skip_to_send": "Send without comment",
+ "text_placeholder": "Type or paste additional comments",
+ "reported": "REPORTED"
+ },
+ "preview": {
+ "keyboard": {
+ "close_preview": "Close Preview",
+ "show_next": "Show Next",
+ "show_previous": "Show Previous"
+ }
+ },
+ "account_list": {
+ "tab_bar_hint": "Current selected profile: %s. Double tap then hold to show account switcher",
+ "dismiss_account_switcher": "Dismiss Account Switcher",
+ "add_account": "Add Account"
+ },
+ "wizard": {
+ "new_in_mastodon": "New in Mastodon",
+ "multiple_account_switch_intro_description": "Switch between multiple accounts by holding the profile button.",
+ "accessibility_hint": "Double tap to dismiss this wizard"
+ }
+ }
+}
\ No newline at end of file
diff --git a/Localization/StringsConvertor/input/it_IT/ios-infoPlist.json b/Localization/StringsConvertor/input/it_IT/ios-infoPlist.json
new file mode 100644
index 000000000..c6db73de0
--- /dev/null
+++ b/Localization/StringsConvertor/input/it_IT/ios-infoPlist.json
@@ -0,0 +1,6 @@
+{
+ "NSCameraUsageDescription": "Used to take photo for post status",
+ "NSPhotoLibraryAddUsageDescription": "Used to save photo into the Photo Library",
+ "NewPostShortcutItemTitle": "New Post",
+ "SearchShortcutItemTitle": "Search"
+}
diff --git a/Localization/StringsConvertor/input/ja_JP/Localizable.stringsdict b/Localization/StringsConvertor/input/ja_JP/Localizable.stringsdict
index c51a9a29d..f1c5e6e25 100644
--- a/Localization/StringsConvertor/input/ja_JP/Localizable.stringsdict
+++ b/Localization/StringsConvertor/input/ja_JP/Localizable.stringsdict
@@ -279,7 +279,7 @@
NSStringFormatValueTypeKey
ld
other
- %ld分前
+ %ldか月前
date.day.ago.abbr
diff --git a/Localization/StringsConvertor/input/ja_JP/app.json b/Localization/StringsConvertor/input/ja_JP/app.json
index 417ca3e3a..7ddfa51c1 100644
--- a/Localization/StringsConvertor/input/ja_JP/app.json
+++ b/Localization/StringsConvertor/input/ja_JP/app.json
@@ -23,7 +23,7 @@
"title": "失敗",
"message": "投稿に失敗しました。\nインターネットに接続されているか確認してください。",
"attachments_message": {
- "video_attach_with_photo": "すでに画像が含まれている投稿に、動画を添付することができません。",
+ "video_attach_with_photo": "すでに画像が含まれている投稿に、動画を添付することはできません。",
"more_than_one_video": "複数の動画を添付することはできません。"
}
},
@@ -46,7 +46,7 @@
},
"delete_post": {
"title": "この投稿を消去しますか?",
- "delete": "消去"
+ "message": "本当に削除しますか?"
},
"clean_cache": {
"title": "キャッシュを消去",
@@ -67,7 +67,7 @@
"done": "完了",
"confirm": "確認",
"continue": "続ける",
- "compose": "Compose",
+ "compose": "新規作成",
"cancel": "キャンセル",
"discard": "破棄",
"try_again": "再実行",
@@ -82,11 +82,12 @@
"share_user": "%sを共有",
"share_post": "投稿を共有",
"open_in_safari": "Safariで開く",
+ "open_in_browser": "ブラウザで開く",
"find_people": "フォローする人を見つける",
"manually_search": "手動で検索する",
"skip": "スキップ",
"reply": "リプライ",
- "report_user": "%sを報告",
+ "report_user": "%sを通報",
"block_domain": "%sをブロック",
"unblock_domain": "%sのブロックを解除",
"settings": "設定",
@@ -139,7 +140,8 @@
"unreblog": "ブーストを戻す",
"favorite": "お気に入り",
"unfavorite": "お気に入り登録を取り消す",
- "menu": "メニュー"
+ "menu": "メニュー",
+ "hide": "非表示"
},
"tag": {
"url": "URL",
@@ -148,6 +150,12 @@
"hashtag": "ハッシュタグ",
"email": "メール",
"emoji": "絵文字"
+ },
+ "visibility": {
+ "unlisted": "この投稿は誰でも見ることができますが、公開タイムラインには表示されません。",
+ "private": "この投稿はフォロワーに限り見ることができます。",
+ "private_from_me": "この投稿はフォロワーに限り見ることができます。",
+ "direct": "この投稿はメンションされたユーザーに限り見ることができます。"
}
},
"friendship": {
@@ -192,10 +200,14 @@
},
"scene": {
"welcome": {
- "slogan": "ソーシャルネットワーキングを、あなたの手の中に."
+ "slogan": "ソーシャルネットワーキングを、あなたの手の中に.",
+ "get_started": "Get Started",
+ "log_in": "ログイン"
},
"server_picker": {
"title": "サーバーを選択",
+ "subtitle": "あなたの興味分野・地域に合ったコミュニティや、汎用のものを選択してください。",
+ "subtitle_extend": "あなたの興味分野・地域に合ったコミュニティや、汎用のものを選択してください。各コミュニティはそれぞれ完全に独立した組織や個人によって運営されています。",
"button": {
"category": {
"all": "すべて",
@@ -203,7 +215,7 @@
"academia": "アカデミア",
"activism": "アクティビズム",
"food": "食べ物",
- "furry": "furry",
+ "furry": "ケモノ",
"games": "ゲーム",
"general": "全般",
"journalism": "言論",
@@ -248,6 +260,12 @@
},
"password": {
"placeholder": "パスワード",
+ "require": "Your password needs at least:",
+ "character_limit": "8 characters",
+ "accessibility": {
+ "checked": "checked",
+ "unchecked": "unchecked"
+ },
"hint": "パスワードは最低でも8文字必要です。"
},
"invite": {
@@ -298,7 +316,7 @@
"subtitle": "先程 %s にメールを送信しました。リンクをタップしてアカウントを確認してください。",
"button": {
"open_email_app": "メールアプリを開く",
- "dont_receive_email": "メールがこない"
+ "resend": "Resend"
},
"dont_receive_email": {
"title": "メールをチェックしてください",
@@ -342,8 +360,8 @@
"photo": "写真",
"video": "動画",
"attachment_broken": "%sは壊れていてMastodonにアップロードできません。",
- "description_photo": "視覚障がい者のために写真を説明",
- "description_video": "視覚障がい者のための映像の説明"
+ "description_photo": "閲覧が難しいユーザーへの画像説明",
+ "description_video": "閲覧が難しいユーザーへの映像説明"
},
"poll": {
"duration_time": "期間: %s",
@@ -401,24 +419,34 @@
"segmented_control": {
"posts": "投稿",
"replies": "リプライ",
- "media": "メディア"
+ "posts_and_replies": "Posts and Replies",
+ "media": "メディア",
+ "about": "About"
},
"relationship_action_alert": {
+ "confirm_mute_user": {
+ "title": "Mute Account",
+ "message": "Confirm to mute %s"
+ },
"confirm_unmute_user": {
"title": "ミュートを解除",
"message": "%sをミュートしますか?"
},
- "confirm_unblock_usre": {
- "title": "ブロックを解除",
- "message": "%sのブロックを解除しますか?"
+ "confirm_block_user": {
+ "title": "Block Account",
+ "message": "Confirm to block %s"
+ },
+ "confirm_unblock_user": {
+ "title": "Unblock Account",
+ "message": "Confirm to unblock %s"
}
}
},
"follower": {
- "footer": "Followers from other servers are not displayed."
+ "footer": "他のサーバーからのフォロワーは表示されません。"
},
"following": {
- "footer": "Follows from other servers are not displayed."
+ "footer": "他のサーバーにいるフォローは表示されません。"
},
"search": {
"title": "検索",
@@ -461,12 +489,14 @@
"Everything": "すべて",
"Mentions": "メンション"
},
- "user_followed_you": "%s にフォローされました",
- "user_favorited your post": "%s がお気に入り登録しました",
- "user_reblogged_your_post": "%s がブーストしました",
- "user_mentioned_you": "%s に返信されました",
- "user_requested_to_follow_you": "%s がフォローリクエストを送信しました",
- "user_your_poll_has_ended": "%s 投票が終了しました",
+ "notification_description": {
+ "followed_you": "followed you",
+ "favorited_your_post": "favorited your post",
+ "reblogged_your_post": "reblogged your post",
+ "mentioned_you": "mentioned you",
+ "request_to_follow_you": "request to follow you",
+ "poll_has_ended": "poll has ended"
+ },
"keyobard": {
"show_everything": "すべて見る",
"show_mentions": "メンションを見る"
@@ -485,6 +515,13 @@
"light": "ライト",
"dark": "ダーク"
},
+ "look_and_feel": {
+ "title": "Look and Feel",
+ "use_system": "Use System",
+ "really_dark": "Really Dark",
+ "sorta_dark": "Sorta Dark",
+ "light": "Light"
+ },
"notifications": {
"title": "通知",
"favorites": "お気に入り登録",
@@ -502,7 +539,7 @@
"preference": {
"title": "環境設定",
"true_black_dark_mode": "真っ黒なダークテーマを使用する",
- "disable_avatar_animation": "アニメーションアバターの無効化する",
+ "disable_avatar_animation": "アバターのアニメーションを無効化する",
"disable_emoji_animation": "絵文字のアニメーションを無効化する",
"using_default_browser": "既定のブラウザでリンクを開く"
},
@@ -526,14 +563,17 @@
}
},
"report": {
- "title": "%sを報告",
+ "title_report": "Report",
+ "title": "%sを通報",
"step1": "ステップ 1/2",
"step2": "ステップ 2/2",
- "content1": "他に報告したい投稿はありますか?",
- "content2": "この報告についてモデレーターに言いたいことはありますか?",
- "send": "報告を送信",
+ "content1": "他に通報したい投稿はありますか?",
+ "content2": "この通報についてモデレーターに伝達しておきたい事項はありますか?",
+ "report_sent_title": "Thanks for reporting, we’ll look into this.",
+ "send": "通報を送信",
"skip_to_send": "コメントなしで送信",
- "text_placeholder": "追加コメントを入力"
+ "text_placeholder": "追加コメントを入力",
+ "reported": "REPORTED"
},
"preview": {
"keyboard": {
@@ -543,14 +583,14 @@
}
},
"account_list": {
- "tab_bar_hint": "Current selected profile: %s. Double tap then hold to show account switcher",
- "dismiss_account_switcher": "Dismiss Account Switcher",
+ "tab_bar_hint": "現在のアカウント: %s. ダブルタップしてアカウント切替画面を表示します",
+ "dismiss_account_switcher": "アカウント切替画面を閉じます",
"add_account": "アカウントを追加"
},
"wizard": {
"new_in_mastodon": "Mastodon の新機能",
"multiple_account_switch_intro_description": "プロフィールボタンを押して複数のアカウントを切り替えます。",
- "accessibility_hint": "Double tap to dismiss this wizard"
+ "accessibility_hint": "チュートリアルを閉じるには、ダブルタップしてください"
}
}
}
\ No newline at end of file
diff --git a/Localization/StringsConvertor/input/kab_KAB/Localizable.stringsdict b/Localization/StringsConvertor/input/kab_KAB/Localizable.stringsdict
new file mode 100644
index 000000000..8a2bac9ec
--- /dev/null
+++ b/Localization/StringsConvertor/input/kab_KAB/Localizable.stringsdict
@@ -0,0 +1,390 @@
+
+
+
+
+ a11y.plural.count.unread.notification
+
+ NSStringLocalizedFormatKey
+ %#@notification_count_unread_notification@
+ notification_count_unread_notification
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ 1 wulɣu ur nettwaɣra
+ other
+ %ld yilɣa ur nettwaɣra
+
+
+ a11y.plural.count.input_limit_exceeds
+
+ NSStringLocalizedFormatKey
+ Talast n unekcum tɛedda %#@character_count@
+ character_count
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ 1 usekkil
+ other
+ %ld yisekkilen
+
+
+ a11y.plural.count.input_limit_remains
+
+ NSStringLocalizedFormatKey
+ Talast n unekcum yeqqim-d seg-s %#@character_count@
+ character_count
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ 1 usekkil
+ other
+ %ld yisekkilen
+
+
+ plural.count.metric_formatted.post
+
+ NSStringLocalizedFormatKey
+ %@ %#@post_count@
+ post_count
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ tasuffeɣt
+ other
+ tisuffaɣ
+
+
+ plural.count.post
+
+ NSStringLocalizedFormatKey
+ %#@post_count@
+ post_count
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ 1 tsuffeɣt
+ other
+ %ld n tsuffaɣ
+
+
+ plural.count.favorite
+
+ NSStringLocalizedFormatKey
+ %#@favorite_count@
+ favorite_count
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ 1unurif
+ other
+ %ld yinurifen
+
+
+ plural.count.reblog
+
+ NSStringLocalizedFormatKey
+ %#@reblog_count@
+ reblog_count
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ 1uɛiwed n usuffeɣ
+ other
+ %ld n uɛiwed n usuffeɣ
+
+
+ plural.count.vote
+
+ NSStringLocalizedFormatKey
+ %#@vote_count@
+ vote_count
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ 1 tefrant
+ other
+ %ld tefranin
+
+
+ plural.count.voter
+
+ NSStringLocalizedFormatKey
+ %#@voter_count@
+ voter_count
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ 1umefran
+ other
+ %ld imefranen
+
+
+ plural.people_talking
+
+ NSStringLocalizedFormatKey
+ %#@count_people_talking@
+ count_people_talking
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ 1 umdan i yettmeslayen
+ other
+ %ld yimdanen i yettmeslayen
+
+
+ plural.count.following
+
+ NSStringLocalizedFormatKey
+ %#@count_following@
+ count_following
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ 1 uneḍfar
+ other
+ %ld yineḍfaren
+
+
+ plural.count.follower
+
+ NSStringLocalizedFormatKey
+ %#@count_follower@
+ count_follower
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ 1 uneḍfar
+ other
+ %ld yineḍfaren
+
+
+ date.year.left
+
+ NSStringLocalizedFormatKey
+ %#@count_year_left@
+ count_year_left
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ Yeqqim-d 1 useggas
+ other
+ Qqimen-d %ld yiseggasen
+
+
+ date.month.left
+
+ NSStringLocalizedFormatKey
+ %#@count_month_left@
+ count_month_left
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ 1 wayyur i d-yeqqimen
+ other
+ %ld wayyuren i d-yeqqimen
+
+
+ date.day.left
+
+ NSStringLocalizedFormatKey
+ %#@count_day_left@
+ count_day_left
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ Yeqqim-d 1 wass
+ other
+ Qqimen-d %ld wussan
+
+
+ date.hour.left
+
+ NSStringLocalizedFormatKey
+ %#@count_hour_left@
+ count_hour_left
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ Yeqqim-d 1 usrag
+ other
+ Qqimen-d %ld yisragen
+
+
+ date.minute.left
+
+ NSStringLocalizedFormatKey
+ %#@count_minute_left@
+ count_minute_left
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ 1 tesdat i d-yeqqimen
+ other
+ %ld tesdatin i d-yeqqimen
+
+
+ date.second.left
+
+ NSStringLocalizedFormatKey
+ %#@count_second_left@
+ count_second_left
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ 1 tasint i d-yeqqimen
+ other
+ %ld tsinin i d-yeqqimen
+
+
+ date.year.ago.abbr
+
+ NSStringLocalizedFormatKey
+ %#@count_year_ago_abbr@
+ count_year_ago_abbr
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ 1 useggas aya
+ other
+ %ld yiseggasen aya
+
+
+ date.month.ago.abbr
+
+ NSStringLocalizedFormatKey
+ %#@count_month_ago_abbr@
+ count_month_ago_abbr
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ 1 wayyur aya
+ other
+ %ld wayyuren aya
+
+
+ date.day.ago.abbr
+
+ NSStringLocalizedFormatKey
+ %#@count_day_ago_abbr@
+ count_day_ago_abbr
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ 1 wass aya
+ other
+ %ld wussan aya
+
+
+ date.hour.ago.abbr
+
+ NSStringLocalizedFormatKey
+ %#@count_hour_ago_abbr@
+ count_hour_ago_abbr
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ 1 usrag aya
+ other
+ %ld yisragen aya
+
+
+ date.minute.ago.abbr
+
+ NSStringLocalizedFormatKey
+ %#@count_minute_ago_abbr@
+ count_minute_ago_abbr
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ 1 tesdat aya
+ other
+ %ld tesdatin aya
+
+
+ date.second.ago.abbr
+
+ NSStringLocalizedFormatKey
+ %#@count_second_ago_abbr@
+ count_second_ago_abbr
+
+ NSStringFormatSpecTypeKey
+ NSStringPluralRuleType
+ NSStringFormatValueTypeKey
+ ld
+ one
+ 1 tasint aya
+ other
+ %ld tsinin aya
+
+
+
+
diff --git a/Localization/StringsConvertor/input/kab_KAB/app.json b/Localization/StringsConvertor/input/kab_KAB/app.json
new file mode 100644
index 000000000..74c167956
--- /dev/null
+++ b/Localization/StringsConvertor/input/kab_KAB/app.json
@@ -0,0 +1,596 @@
+{
+ "common": {
+ "alerts": {
+ "common": {
+ "please_try_again": "Ttxil εreḍ tikelt-nniḍen.",
+ "please_try_again_later": "Ttxil εreḍ tikelt-nniḍen ticki."
+ },
+ "sign_up_failure": {
+ "title": "Tuccḍa deg unekcum"
+ },
+ "server_error": {
+ "title": "Tuccḍa n uqeddac"
+ },
+ "vote_failure": {
+ "title": "Tuccḍa deg ufran",
+ "poll_ended": "Tafrant tfuk"
+ },
+ "discard_post_content": {
+ "title": "Kkes arewway",
+ "message": "Sentem i wakken ad yettusefsax ugbur n tsuffeɣt."
+ },
+ "publish_post_failure": {
+ "title": "Yecceḍ usuffeɣ",
+ "message": "Yecceḍ usuffeɣ n tsuffeɣt.\nMa ulac aɣilif, senqed tuqqna-inek internet.",
+ "attachments_message": {
+ "video_attach_with_photo": "Ur tezmireḍ ara ad tsedduḍ tavidyut deg tsuffeɣt ideg llant yakan tugniwin.",
+ "more_than_one_video": "Ur tezmireḍ ara ad ugar n tvidyut."
+ }
+ },
+ "edit_profile_failure": {
+ "title": "Ẓreg tuccḍa n umaɣnu",
+ "message": "Yegguma ad yettwaẓreg umaɣnu. Ɛreḍ tikkelt-nniḍen."
+ },
+ "sign_out": {
+ "title": "Ffeɣ",
+ "message": "Tebɣiḍ ad teffɣeḍ?",
+ "confirm": "Ffeɣ"
+ },
+ "block_domain": {
+ "title": "D tidet, d tidet tebɣiḍ ad tesweḥleḍ %s akken ma yella? Deg tuget, kra n yisewḥal d ugdal ad yili d ayen iwulmen, yettwafernen. Ur tettwaliḍ ara agbur seg taɣult-nni neɣ kra seg yineḍfaren-ik i tt-yesseqdacen.",
+ "block_entire_domain": "Sewḥel taɣult"
+ },
+ "save_photo_failure": {
+ "title": "Tuccḍa deg usekles n tewlaft",
+ "message": "Ma ulac aɣilif, rmed tasiregt n unekcum ɣer temkarḍit n tewlafin i usekles n tewlaft."
+ },
+ "delete_post": {
+ "title": "Tebɣiḍ s tidet ad tekkseḍ tasuffeɣt-agi?",
+ "message": "Tebɣiḍ s tidet ad tekkseḍ tasuffeɣt-agi?"
+ },
+ "clean_cache": {
+ "title": "Sfeḍ tuffirt",
+ "message": "Yettwasfeḍ %s n tkatut tuffirt akken iwata."
+ }
+ },
+ "controls": {
+ "actions": {
+ "back": "Tuɣalin",
+ "next": "Uḍfir",
+ "previous": "Uzwir",
+ "open": "Ldi",
+ "add": "Rnu",
+ "remove": "Kkes",
+ "edit": "Ẓreg",
+ "save": "Sekles",
+ "ok": "IH",
+ "done": "Immed",
+ "confirm": "Sentem",
+ "continue": "Kemmel",
+ "compose": "Sudes",
+ "cancel": "Sefsex",
+ "discard": "Sefsex",
+ "try_again": "Ɛreḍ tikkelt-nniḍen",
+ "take_photo": "Ṭṭef tawlaft",
+ "save_photo": "Sekles tawlaft",
+ "copy_photo": "Nɣel tawlaft",
+ "sign_in": "Qqen",
+ "sign_up": "Jerred amiḍan",
+ "see_more": "Wali ugar",
+ "preview": "Taskant",
+ "share": "Bḍu",
+ "share_user": "Bḍu %s",
+ "share_post": "Bḍu tasuffeɣt",
+ "open_in_safari": "Ldi deg Safari",
+ "open_in_browser": "Ldi deg yiminig",
+ "find_people": "Af imdanen ara tḍefreḍ",
+ "manually_search": "Anadi s ufus deg wadeg-is",
+ "skip": "Zgel",
+ "reply": "Err",
+ "report_user": "Cetki ɣef %s",
+ "block_domain": "Sewḥel %s",
+ "unblock_domain": "Serreḥ i %s",
+ "settings": "Iɣewwaṛen",
+ "delete": "Kkes"
+ },
+ "tabs": {
+ "home": "Agejdan",
+ "search": "Nadi",
+ "notification": "Tilɣa",
+ "profile": "Amaɣnu"
+ },
+ "keyboard": {
+ "common": {
+ "switch_to_tab": "Ddu ɣer %s",
+ "compose_new_post": "Aru tasuffeɣt tamaynut",
+ "show_favorites": "Sken-d ismenyifen",
+ "open_settings": "Ldi iɣewwaren"
+ },
+ "timeline": {
+ "previous_status": "Amagrad uzwir",
+ "next_status": "Amagrad uḍfir",
+ "open_status": "Ldi tasuffeɣt",
+ "open_author_profile": "Ldi amaɣnu n umeskar",
+ "open_reblogger_profile": "Ldi amaɣnu n win i yulsen asuffeɣ",
+ "reply_status": "Err ɣef tsuffeɣt",
+ "toggle_reblog": "Abeddel n unallas n tsuffeɣt",
+ "toggle_favorite": "Abeddel n usmenyaf i tsuffeɣt",
+ "toggle_content_warning": "Beddel alɣu n ugbur",
+ "preview_image": "Asenqed n tugna"
+ },
+ "segmented_control": {
+ "previous_section": "Tafrant tuzwirt",
+ "next_section": "Tigezmi tuḍfirt"
+ }
+ },
+ "status": {
+ "user_reblogged": "Tettwasuffeɣ-d %s i tikkelt-nniḍen",
+ "user_replied_to": "Yerra ɣef %s",
+ "show_post": "Sken-d tasuffeɣt",
+ "show_user_profile": "Ssken-d amaɣnu n useqdac",
+ "content_warning": "Alɣu n ugbur",
+ "media_content_warning": "Sit anida tebɣiḍ i wakken ad twaliḍ",
+ "poll": {
+ "vote": "Dɣeṛ",
+ "closed": "Ifukk"
+ },
+ "actions": {
+ "reply": "Err",
+ "reblog": "Aɛiwed n usuffeɣ",
+ "unreblog": "Sefsex allus n usuffeɣ",
+ "favorite": "Anurif",
+ "unfavorite": "Kkes seg yismenyifen",
+ "menu": "Umuɣ",
+ "hide": "Ffer"
+ },
+ "tag": {
+ "url": "URL",
+ "mention": "Tabdart",
+ "link": "Aseɣwen",
+ "hashtag": "Ahacṭag",
+ "email": "Imayl",
+ "emoji": "Emuji"
+ },
+ "visibility": {
+ "unlisted": "Yal wa yezmer ad iwali tsuffeɣt-a maca ur d-tettwaskaneḍ ara deg yizirig n wakud azayaz.",
+ "private": "D ineḍfaren-is kan i izemren ad walin tsuffeɣ-a.",
+ "private_from_me": "D ineḍfaren-is kan i izemren ad walin tsuffeɣ-a.",
+ "direct": "D ineḍfaren-is kan i izemren ad walin tsuffeɣ-a."
+ }
+ },
+ "friendship": {
+ "follow": "Ḍfeṛ",
+ "following": "Yettwaḍfar",
+ "request": "Tuttra",
+ "pending": "Yegguni",
+ "block": "Sewḥel",
+ "block_user": "Sewḥel %s",
+ "block_domain": "Sewḥel %s",
+ "unblock": "Serreḥ",
+ "unblock_user": "Serreḥ i %s",
+ "blocked": "Yettusewḥel",
+ "mute": "Sgugem",
+ "mute_user": "Sgugem %s",
+ "unmute": "Kkes asgugem",
+ "unmute_user": "Kkes asgugem ɣef %s",
+ "muted": "Yettwasgugem",
+ "edit_info": "Ẓreg talɣut"
+ },
+ "timeline": {
+ "filtered": "Yettwasizdeg",
+ "timestamp": {
+ "now": "Tura"
+ },
+ "loader": {
+ "load_missing_posts": "Sali tisuffaɣ i iruḥen",
+ "loading_missing_posts": "Asali n tsuffaɣ i iruḥen...",
+ "show_more_replies": "Ssken-d ugar n tririyin"
+ },
+ "header": {
+ "no_status_found": "Ulac tasuffeɣt yettwafen",
+ "blocking_warning": "Ur tezmireḍ ara ad twaliḍ amaɣnu n useqdac-a\nalamma tekkseḍ-as asewḥel.\nAkka i as-d-yettban umaɣnu-inek.",
+ "user_blocking_warning": "Ur tezmireḍ ara ad twaliḍ amaɣnu n %s\nalamma tekkseḍ-as asewḥel.\nAkka i as-d-yettban umaɣnu-inek.",
+ "blocked_warning": "Ur tezmireḍ ara ad twaliḍ amaɣnu n useqdac-a\nAkka i as-d-yettban umaɣnu-inek.",
+ "user_blocked_warning": "Ur tezmireḍ ara ad twaliḍ amaɣnu n %s\nAkka i as-d-yettban umaɣnu-inek.",
+ "suspended_warning": "Yettwaseḥbes useqdac-a.",
+ "user_suspended_warning": "Yettwaseḥbes umiḍan n %s."
+ }
+ }
+ }
+ },
+ "scene": {
+ "welcome": {
+ "slogan": "Izeḍwa inmettiyen\nuɣalen-d ɣer ufus-ik.",
+ "get_started": "Aha bdu tura",
+ "log_in": "Qqen"
+ },
+ "server_picker": {
+ "title": "Mastodon yettwaxdem i yiseqdacen deg waṭas n temɣiwnin.",
+ "subtitle": "Fren tamɣiwent almend n wayen tḥemmleḍ, n tmurt-ik neɣ n yiswi-inek amatu.",
+ "subtitle_extend": "Fren tamɣiwent almend n wayen tḥemmleḍ, n tmurt-ik neɣ n yiswi-inek amatu. Yal tamɣiwent tsedday-itt tkebbanit neɣ amdan ilelliyen.",
+ "button": {
+ "category": {
+ "all": "Akk",
+ "all_accessiblity_description": "Taggayt: Akk",
+ "academia": "akadimi",
+ "activism": "tinuɣmest",
+ "food": "učči",
+ "furry": "furry",
+ "games": "uraren",
+ "general": "amatu",
+ "journalism": "taɣamsa",
+ "lgbt": "lgbt",
+ "regional": "amnaḍan",
+ "art": "taẓuri",
+ "music": "aẓawan",
+ "tech": "atiknikan"
+ },
+ "see_less": "Sken cwiṭ",
+ "see_more": "Wali ugar"
+ },
+ "label": {
+ "language": "TUTLAYT",
+ "users": "ISEQDACEN",
+ "category": "TAGGAYT"
+ },
+ "input": {
+ "placeholder": "Nadi timɣiwnin"
+ },
+ "empty_state": {
+ "finding_servers": "Tifin n yiqeddacen yellan...",
+ "bad_network": "Tella-d tuccḍa lawan n usali n yisefka. Senqed tuqqna-ink internet.",
+ "no_results": "Ulac igemmaḍ"
+ }
+ },
+ "register": {
+ "title": "Aha ad nebdu asbadu ɣef %s",
+ "input": {
+ "avatar": {
+ "delete": "Kkes"
+ },
+ "username": {
+ "placeholder": "isem n useqdac",
+ "duplicate_prompt": "Isem-ayi n umseqdac yettwaṭṭef yakan."
+ },
+ "display_name": {
+ "placeholder": "isem ara d-yettwaskanen"
+ },
+ "email": {
+ "placeholder": "imayl"
+ },
+ "password": {
+ "placeholder": "awal uffir",
+ "require": "Awal-ik uffir yesra ma drus:",
+ "character_limit": "8 n yisekkilen",
+ "accessibility": {
+ "checked": "yettwasenqed",
+ "unchecked": "ur yettwasenqed ara"
+ },
+ "hint": "Awal-ik uffir yesra ma drus ṭam n yisekkilen"
+ },
+ "invite": {
+ "registration_user_invite_request": "Acimi tebγiḍ ad ternuḍ iman-ik?"
+ }
+ },
+ "error": {
+ "item": {
+ "username": "Isem n useqdac",
+ "email": "Imayl",
+ "password": "Awal uffir",
+ "agreement": "Amtawa",
+ "locale": "Tadigant",
+ "reason": "Taɣẓint"
+ },
+ "reason": {
+ "blocked": "%s deg-s asaǧǧăw n yimayl ur nettusireg ara",
+ "unreachable": "%s ur yettban ara yella",
+ "taken": "%s yettwaseqdec yakan",
+ "reserved": "%s d awal uffir yettwaḥarren",
+ "accepted": "%s ilaq ad yettwaqbal",
+ "blank": "isra %s",
+ "invalid": "%s d arameɣtu",
+ "too_long": "%s ɣezzif aṭas",
+ "too_short": "%s wezzil aṭas",
+ "inclusion": "%s mačči d azal yettusefraken"
+ },
+ "special": {
+ "username_invalid": "Isem n useqdac ilaq ad yesɛu kan isekkilen igmumḍinen d wid yettujerrden",
+ "username_too_long": "Isem n useqdac ɣezzif aṭas (ur ilaq ara ad iɛeddi nnig 30 yisekkilen)",
+ "email_invalid": "Tagi mačči d tansa n yimayl tameɣtut",
+ "password_too_short": "Awal uffir wezzil aṭas (ilaq ad yesɛu ma drus 8 yisekkilen)"
+ }
+ }
+ },
+ "server_rules": {
+ "title": "Kra n yilugan igejdanen.",
+ "subtitle": "Ilugan-a ttusbadun sɣur inedbalen n %s.",
+ "prompt": "Mi ara tkemmleḍ, ilaq ad tqebleḍ tiwtilin n yimeẓla d tsertit tabaḍnit n %s.",
+ "terms_of_service": "tiwetlin n useqdec",
+ "privacy_policy": "tasertit tabaḍnit",
+ "button": {
+ "confirm": "Qebleɣ"
+ }
+ },
+ "confirm_email": {
+ "title": "Taɣawsa taneggarut.",
+ "subtitle": "Sit ɣef useɣwen i ak-n-uznen i wakken ad tesneqdeḍ amiḍan-ik.",
+ "button": {
+ "open_email_app": "Ldi asnas n yimayl",
+ "resend": "Ales tuzna"
+ },
+ "dont_receive_email": {
+ "title": "Senqed imayl-ik·im",
+ "description": "Senqed ma yella tansa-inek n imayl d tameɣut akked uspam ma yella ur t-tufiḍ ara.",
+ "resend_email": "Ales tuzna n yimayl"
+ },
+ "open_email_app": {
+ "title": "Sefqed Tanaka-inek.",
+ "description": "Akken kan i ak-n-nuzen imayl. Sefqed aspam ma yella ur t-tufiḍ ara.",
+ "mail": "Imayl",
+ "open_email_client": "Ldi amsaɣ n yimayl"
+ }
+ },
+ "home_timeline": {
+ "title": "Agejdan",
+ "navigation_bar_state": {
+ "offline": "Beṛṛa n tuqqna",
+ "new_posts": "Tissufaɣ timaynutin",
+ "published": "Yettwasuffeɣ!",
+ "Publishing": "Asuffeɣ tasuffeɣt..."
+ }
+ },
+ "suggestion_account": {
+ "title": "Af imdanen ara tḍefreḍ",
+ "follow_explain": "Mi ara teṭṭafareḍ albaɛḍ, ad twaliḍ tisuffaɣ-is deg usuddem-inek agejdan."
+ },
+ "compose": {
+ "title": {
+ "new_post": "Tasuffeɣt tamaynut",
+ "new_reply": "Tiririt tamaynut"
+ },
+ "media_selection": {
+ "camera": "Ṭṭef tawlaft",
+ "photo_library": "Tanedlist n tewlaft",
+ "browse": "Snirem"
+ },
+ "content_input_placeholder": "Aru neɣ senteḍ ayen yellan deg wallaɣ-ik",
+ "compose_action": "Sufeɣ",
+ "replying_to_user": "tiririt ɣef %s",
+ "attachment": {
+ "photo": "tawlaft",
+ "video": "tavidyutt",
+ "attachment_broken": "%s-a yerreẓ, ur yezmir ara\nAd d-yettwasali ɣef Mastodon.",
+ "description_photo": "Glem-d tawlaft i wid yesɛan ugur deg yiẓri...",
+ "description_video": "Glem-d tavidyut i wid yesɛan ugur deg yiẓri..."
+ },
+ "poll": {
+ "duration_time": "Tangazt: %s",
+ "thirty_minutes": "30 n tesdatin",
+ "one_hour": "1 n wesrag",
+ "six_hours": "6 n yisragen",
+ "one_day": "1 n wass",
+ "three_days": "3 n wussan",
+ "seven_days": "7 n wussan",
+ "option_number": "Taxtiṛt %ld"
+ },
+ "content_warning": {
+ "placeholder": "Aru alɣu-inek s telqeyt da..."
+ },
+ "visibility": {
+ "public": "Azayez",
+ "unlisted": "War tabdert",
+ "private": "Imeḍfaṛen kan",
+ "direct": "Imdanen i d-bedreɣ kan"
+ },
+ "auto_complete": {
+ "space_to_add": "Tallunt ara yettwarnun"
+ },
+ "accessibility": {
+ "append_attachment": "Rnu taceqquft yeddan",
+ "append_poll": "Rnu asenqed",
+ "remove_poll": "Kkes asenqed",
+ "custom_emoji_picker": "Amefran n yimujiten udmawanen",
+ "enable_content_warning": "Rmed alɣu n ugbur",
+ "disable_content_warning": "Sens alɣu n ugbur",
+ "post_visibility_menu": "Umuɣ n ubani n tsuffeɣt"
+ },
+ "keyboard": {
+ "discard_post": "Sefsex tasuffeɣt",
+ "publish_post": "Suffeɣ tasuffeɣt",
+ "toggle_poll": "Beddel asenqed",
+ "toggle_content_warning": "Beddel alɣu n ugbur",
+ "append_attachment_entry": "Rnu taceqquft yeddan - %s",
+ "select_visibility_entry": "Fren timeẓriwt - %s"
+ }
+ },
+ "profile": {
+ "dashboard": {
+ "posts": "tisuffaɣ",
+ "following": "iṭafaṛ",
+ "followers": "imeḍfaren"
+ },
+ "fields": {
+ "add_row": "Rnu izirig",
+ "placeholder": {
+ "label": "Tabzimt",
+ "content": "Agbur"
+ }
+ },
+ "segmented_control": {
+ "posts": "Imagraden",
+ "replies": "Tiririyin",
+ "posts_and_replies": "Tisuffaɣ d tririyin",
+ "media": "Amidya",
+ "about": "Ɣef"
+ },
+ "relationship_action_alert": {
+ "confirm_mute_user": {
+ "title": "Sgugem amiḍan",
+ "message": "Sentem asgugem i %s"
+ },
+ "confirm_unmute_user": {
+ "title": "Kkes asgugem i umiḍan",
+ "message": "Sentem tukksa n usgugem i %s"
+ },
+ "confirm_block_user": {
+ "title": "Sewḥel amiḍan",
+ "message": "Sentem asewḥel n %s"
+ },
+ "confirm_unblock_user": {
+ "title": "Kkes asewḥel i umiḍan",
+ "message": "Sentem tukksa n usgugem i %s"
+ }
+ }
+ },
+ "follower": {
+ "footer": "Ineḍfaren seg yiqeddacen-nniḍen ur d-ttwaskanen ara."
+ },
+ "following": {
+ "footer": "Ineḍfaren seg yiqeddacen-nniḍen ur d-ttwaskanen ara."
+ },
+ "search": {
+ "title": "Nadi",
+ "search_bar": {
+ "placeholder": "Nadi hashtags d yiseqdacen",
+ "cancel": "Sefsex"
+ },
+ "recommend": {
+ "button_text": "Wali akk",
+ "hash_tag": {
+ "title": "Ayen mucaɛen ɣef Mastodon",
+ "description": "Hashtags i d-ijebbden aṭas lwelha",
+ "people_talking": "%s yimdanen i yettmeslayen"
+ },
+ "accounts": {
+ "title": "Imiḍanen i tzemreḍ ad tḥemmleḍ",
+ "description": "Ahat tebɣiḍ ad tḍefreḍ imiḍanen-a",
+ "follow": "Ḍfeṛ"
+ }
+ },
+ "searching": {
+ "segment": {
+ "all": "Akk",
+ "people": "Imdanen",
+ "hashtags": "Ihacṭagen",
+ "posts": "Tisuffaɣ"
+ },
+ "empty_state": {
+ "no_results": "Ulac igemmaḍ"
+ },
+ "recent_search": "Inadiyen imaynuten",
+ "clear": "Sfeḍ"
+ }
+ },
+ "favorite": {
+ "title": "Ismenyifen-ik·im"
+ },
+ "notification": {
+ "title": {
+ "Everything": "Akk",
+ "Mentions": "Abdar"
+ },
+ "notification_description": {
+ "followed_you": "iṭṭafar-ik·ikem",
+ "favorited_your_post": "yesmenyef tasuffeɣt-ik·im",
+ "reblogged_your_post": "iɛawed-as asuffeɣ i tsuffeɣt-ik·im",
+ "mentioned_you": "yebder-ik·ikem-id",
+ "request_to_follow_you": "issuter aḍfar-inek",
+ "poll_has_ended": "asenqed iffuk"
+ },
+ "keyobard": {
+ "show_everything": "Sken yal taɣawsa",
+ "show_mentions": "Sken tisedmirin"
+ }
+ },
+ "thread": {
+ "back_title": "Amagrad",
+ "title": "Tasuffeɣt sɣur %s"
+ },
+ "settings": {
+ "title": "Iɣewwaṛen",
+ "section": {
+ "appearance": {
+ "title": "Apparence",
+ "automatic": "Awurman",
+ "light": "Yezga d aceεlal",
+ "dark": "Yezga d aberkan"
+ },
+ "look_and_feel": {
+ "title": "Wali, tḥalfuḍ",
+ "use_system": "Seqdec anagraw",
+ "really_dark": "D aberkan s tidet",
+ "sorta_dark": "D aberkan cwiya",
+ "light": "Aceɛlal"
+ },
+ "notifications": {
+ "title": "Tilɣa",
+ "favorites": "Yerna tasuffeɣt-iw ɣer yismenyafen-ines",
+ "follows": "Yeṭṭafar-iyi",
+ "boosts": "Yules asuffeɣ n tduffeɣt-iw",
+ "mentions": "Ibder-iyi-d",
+ "trigger": {
+ "anyone": "yal yiwen",
+ "follower": "ameḍfar",
+ "follow": "yal win ara ḍefreɣ",
+ "noone": "ula yiwen",
+ "title": "Selɣu-yi-d mi ara"
+ }
+ },
+ "preference": {
+ "title": "Imenyafen",
+ "true_black_dark_mode": "Askar aberkan n tidet",
+ "disable_avatar_animation": "Sens ivaṭaren yettembiwilen",
+ "disable_emoji_animation": "Sens imujiten yettembiwilen",
+ "using_default_browser": "Seqdec iminig amezwer i twaledyawt n yiseɣwan"
+ },
+ "boring_zone": {
+ "title": "Tamnaḍt yessefcalen",
+ "account_settings": "Iɣewwaṛen n umiḍan",
+ "terms": "Tiwtilin n useqdec",
+ "privacy": "Tasertit tabaḍnit"
+ },
+ "spicy_zone": {
+ "title": "Tamnaḍt tamihawt",
+ "clear": "Sfeḍ takatut tuffirt n umidyat",
+ "signout": "Senser"
+ }
+ },
+ "footer": {
+ "mastodon_description": "Maṣṭudun d aseɣzan s uɣbalu yeldin. Tzemreḍ ad temmleḍ uguren deg GitHub %s (%s)"
+ },
+ "keyboard": {
+ "close_settings_window": "Mdel asfaylu n iɣewwaṛen"
+ }
+ },
+ "report": {
+ "title_report": "Aneqqis",
+ "title": "Aneqqis %s",
+ "step1": "Aḥric 1 seg 2",
+ "step2": "Aḥric 2 seg 2",
+ "content1": "Tebɣiḍ ad ternuḍ tisuffaɣ-nniḍen ɣer uneqqis?",
+ "content2": "Yella wayen i ilaqen ad teẓren yimḍebbren ɣef uneqqis-a?",
+ "report_sent_title": "Tanemmirt ɣef uneqqis, ad nwali deg waya.",
+ "send": "Azen aneqis",
+ "skip_to_send": "Azen s war awennit",
+ "text_placeholder": "Aru neɣ senteḍ iwenniten-nniḍen",
+ "reported": "YETTWAMMEL"
+ },
+ "preview": {
+ "keyboard": {
+ "close_preview": "Mdel timeẓri",
+ "show_next": "Sken uḍfir",
+ "show_previous": "Sken udfir"
+ }
+ },
+ "account_list": {
+ "tab_bar_hint": "Amaɣnu amiran yettwafernen: %s. Sit berdayen syen teǧǧeḍ aḍad-ik·im i uskan abeddel n umiḍan",
+ "dismiss_account_switcher": "Sefsex abeddel n umiḍan",
+ "add_account": "Rnu amiḍan"
+ },
+ "wizard": {
+ "new_in_mastodon": "Amaynut deg Maṣṭudun",
+ "multiple_account_switch_intro_description": "Beddel gar waṭas n yimiḍanen s tussda ɣezzifen ɣef tqeffalt n umaɣnu.",
+ "accessibility_hint": "Sin isitiyen i usefsex n umarag-a"
+ }
+ }
+}
\ No newline at end of file
diff --git a/Localization/StringsConvertor/input/kab_KAB/ios-infoPlist.json b/Localization/StringsConvertor/input/kab_KAB/ios-infoPlist.json
new file mode 100644
index 000000000..41128876a
--- /dev/null
+++ b/Localization/StringsConvertor/input/kab_KAB/ios-infoPlist.json
@@ -0,0 +1,6 @@
+{
+ "NSCameraUsageDescription": "Yettwaseqdac i tuṭṭfa n tewlafin deg usuffeɣ n waddaden",
+ "NSPhotoLibraryAddUsageDescription": "Yettwaseqdac i usekles n tewlafin deg temkarḍit n tewlafin",
+ "NewPostShortcutItemTitle": "Tasuffeɣt tamaynut",
+ "SearchShortcutItemTitle": "Nadi"
+}
diff --git a/Localization/StringsConvertor/input/kmr_TR/app.json b/Localization/StringsConvertor/input/kmr_TR/app.json
index c360eb430..5d1d70fb0 100644
--- a/Localization/StringsConvertor/input/kmr_TR/app.json
+++ b/Localization/StringsConvertor/input/kmr_TR/app.json
@@ -45,8 +45,8 @@
"message": "Ji kerema xwe mafê bide gihîştina wênegehê çalak bike da ku wêne werin tomarkirin."
},
"delete_post": {
- "title": "Ma tu dixwazî vê şandiyê jê bibî?",
- "delete": "Jê bibe"
+ "title": "Şandiyê jê bibe",
+ "message": "Ma tu dixwazî vê şandiyê jê bibî?"
},
"clean_cache": {
"title": "Pêşbîrê pak bike",
@@ -82,6 +82,7 @@
"share_user": "%s parve bike",
"share_post": "Şandiyê parve bike",
"open_in_safari": "Di Safariyê de veke",
+ "open_in_browser": "Di gerokê de veke",
"find_people": "Mirovan bo şopandinê bibîne",
"manually_search": "Ji devlê bi destan lêgerînê bike",
"skip": "Derbas bike",
@@ -112,7 +113,7 @@
"open_author_profile": "Profîla nivîskaran veke",
"open_reblogger_profile": "Profîla nivîskaran veke",
"reply_status": "Bersivê bide şandiyê",
- "toggle_reblog": "Ji vû nivîsandin di şandiyê de biguherîne",
+ "toggle_reblog": "Ji nû ve nivîsandin di şandiyê de biguherîne",
"toggle_favorite": "Li ser şandiyê bijarte biguherîne",
"toggle_content_warning": "Hişyariya naverokê biguherîne",
"preview_image": "Pêşdîtina wêneyê"
@@ -123,7 +124,7 @@
}
},
"status": {
- "user_reblogged": "%s ji nû ve hate nivîsandin",
+ "user_reblogged": "%s ji nû ve nivîsand",
"user_replied_to": "Bersiv da %s",
"show_post": "Şandiyê nîşan bide",
"show_user_profile": "Profîla bikarhêner nîşan bide",
@@ -139,7 +140,8 @@
"unreblog": "Ji nû ve nivîsandinê vegere",
"favorite": "Bijarte",
"unfavorite": "Nebijarte",
- "menu": "Kulîn"
+ "menu": "Kulîn",
+ "hide": "Veşêre"
},
"tag": {
"url": "URL",
@@ -148,6 +150,12 @@
"hashtag": "Hashtag",
"email": "E-name",
"emoji": "Emojî"
+ },
+ "visibility": {
+ "unlisted": "Her kes dikare vê şandiyê bibîne lê nayê nîşandan di demnameya gelemperî de.",
+ "private": "Tenê şopînerên wan dikarin vê şandiyê bibînin.",
+ "private_from_me": "Tenê şopînerên min dikarin vê şandiyê bibînin.",
+ "direct": "Tenê bikarhênerê qalkirî dikare vê şandiyê bibîne."
}
},
"friendship": {
@@ -192,10 +200,14 @@
},
"scene": {
"welcome": {
- "slogan": "Torên civakî\ndi destên te de."
+ "slogan": "Torên civakî\ndi destên te de.",
+ "get_started": "Dest pê bike",
+ "log_in": "Têkeve"
},
"server_picker": {
"title": "Rajekarekê hilbijêre,\nHer kîjan rajekar be.",
+ "subtitle": "Li gorî berjewendî, herêm, an jî armancek gelemperî civakekê hilbijêre.",
+ "subtitle_extend": "Li gorî berjewendî, herêm, an jî armancek gelemperî civakekê hilbijêre. Her civakek ji hêla rêxistinek an kesek bi tevahî serbixwe ve tê xebitandin.",
"button": {
"category": {
"all": "Hemû",
@@ -231,7 +243,7 @@
}
},
"register": {
- "title": "Ji me re hinekî qala xwe bike.",
+ "title": "Ji me re hinekî qala xwe bike %s",
"input": {
"avatar": {
"delete": "Jê bibe"
@@ -248,6 +260,12 @@
},
"password": {
"placeholder": "pêborîn",
+ "require": "Pêdiviya pêborîna te ya herî kêm:",
+ "character_limit": "8 tîp",
+ "accessibility": {
+ "checked": "hate kontrolkirin",
+ "unchecked": "nehate kontrolkirin"
+ },
"hint": "Pêborîna te herî kêm divê ji 8 tîpan pêk bê"
},
"invite": {
@@ -285,7 +303,7 @@
},
"server_rules": {
"title": "Hinek rêzikên bingehîn.",
- "subtitle": "Ev rêzik ji aliyê rêvebirên %s ve tên sazkirin.",
+ "subtitle": "Ev rêzik ji aliyê çavdêrên %s ve tên sazkirin.",
"prompt": "Bi domandinê, tu ji bo %s di bin mercên bikaranînê û polîtîkaya nepenîtiyê dipejirînî.",
"terms_of_service": "mercên bikaranînê",
"privacy_policy": "polîtikaya nihêniyê",
@@ -298,7 +316,7 @@
"subtitle": "Me tenê e-nameyek ji %s re şand,\ngirêdanê bitikne da ku ajimêra xwe bidî piştrastkirin.",
"button": {
"open_email_app": "Sepana e-nameyê veke",
- "dont_receive_email": "Min hîç e-nameyeke nesitand"
+ "resend": "Ji nû ve bişîne"
},
"dont_receive_email": {
"title": "E-nameyê xwe kontrol bike",
@@ -401,16 +419,26 @@
"segmented_control": {
"posts": "Şandî",
"replies": "Bersiv",
- "media": "Medya"
+ "posts_and_replies": "Şandî û bersiv",
+ "media": "Medya",
+ "about": "Derbar"
},
"relationship_action_alert": {
+ "confirm_mute_user": {
+ "title": "Ajimêrê bêdeng bike",
+ "message": "Ji bo bêdengkirina %s bipejirîne"
+ },
"confirm_unmute_user": {
"title": "Ajimêrê bêdeng neke",
- "message": "Ji bo vekirina bêdengkirinê bipejirîne %s"
+ "message": "Ji bo vekirina bêdengkirinê %s bipejirîne"
},
- "confirm_unblock_usre": {
+ "confirm_block_user": {
+ "title": "Ajimêr asteng bike",
+ "message": "Ji bo rakirina astengkirinê %s bipejirîne"
+ },
+ "confirm_unblock_user": {
"title": "Astengiyê li ser ajimêr rake",
- "message": "Ji bo rakirina astengkirinê bipejirîne %s"
+ "message": "Ji bo rakirina astengkirinê %s bipejirîne"
}
}
},
@@ -461,12 +489,14 @@
"Everything": "Her tişt",
"Mentions": "Qalkirin"
},
- "user_followed_you": "%s te şopand",
- "user_favorited your post": "%s şandiya te hez kir",
- "user_reblogged_your_post": "%s posta we ji nû ve tomar kir",
- "user_mentioned_you": "%s qale te kir",
- "user_requested_to_follow_you": "%s dixwazê te bişopîne",
- "user_your_poll_has_ended": "Rapirsîya te qediya",
+ "notification_description": {
+ "followed_you": "te şopand",
+ "favorited_your_post": "şandiya te hez kir",
+ "reblogged_your_post": "şandiya te ji nû ve nivisand",
+ "mentioned_you": "qale te kir",
+ "request_to_follow_you": "dixwazê te bişopîne",
+ "poll_has_ended": "rapirsî qediya"
+ },
"keyobard": {
"show_everything": "Her tiştî nîşan bide",
"show_mentions": "Qalkirinan nîşan bike"
@@ -482,9 +512,16 @@
"appearance": {
"title": "Xuyang",
"automatic": "Xweber",
- "light": "Her dem ronî",
+ "light": "Her dem ronahî",
"dark": "Her dem tarî"
},
+ "look_and_feel": {
+ "title": "Xuyang",
+ "use_system": "Pergalê bi kar bîne",
+ "really_dark": "Tarî",
+ "sorta_dark": "Hinekî tarî",
+ "light": "Ronahî"
+ },
"notifications": {
"title": "Agahdarî",
"favorites": "Şandiyên min hez kir",
@@ -500,7 +537,7 @@
}
},
"preference": {
- "title": "Hilbijarte",
+ "title": "Sazkarî",
"true_black_dark_mode": "Moda tarî ya reş a rastîn",
"disable_avatar_animation": "Avatarên anîmasyonî neçalak bike",
"disable_emoji_animation": "Emojiyên anîmasyonî neçalak bike",
@@ -526,14 +563,17 @@
}
},
"report": {
+ "title_report": "Ragihandin",
"title": "%s ragihîne",
"step1": "Gav 1 ji 2",
"step2": "Gav 2 ji 2",
"content1": "Şandiyên din hene ku tu dixwazî tevlî ragihandinê bikî?",
"content2": "Derbarê vê ragihandinê de tiştek heye ku divê çavdêr bizanin?",
+ "report_sent_title": "Spas ji bo ragihandina te, em ê binirxînin.",
"send": "Ragihandinê bişîne",
"skip_to_send": "Bêyî şirove bişîne",
- "text_placeholder": "Şiroveyên daxwazkirê binivîsine an jî pê ve bike"
+ "text_placeholder": "Şiroveyên daxwazkirê binivîsine an jî pê ve bike",
+ "reported": "HATE RAGIHANDIN"
},
"preview": {
"keyboard": {
diff --git a/Localization/StringsConvertor/input/ko_KR/app.json b/Localization/StringsConvertor/input/ko_KR/app.json
index 571b14659..3f9f4c199 100644
--- a/Localization/StringsConvertor/input/ko_KR/app.json
+++ b/Localization/StringsConvertor/input/ko_KR/app.json
@@ -46,7 +46,7 @@
},
"delete_post": {
"title": "정말로 이 게시물을 삭제하시겠습니까?",
- "delete": "삭제"
+ "message": "Are you sure you want to delete this post?"
},
"clean_cache": {
"title": "캐시 삭제",
@@ -82,6 +82,7 @@
"share_user": "%s를 공유",
"share_post": "게시물 공유",
"open_in_safari": "사파리에서 열기",
+ "open_in_browser": "Open in Browser",
"find_people": "팔로우 할 사람들 찾기",
"manually_search": "대신 수동으로 검색하기",
"skip": "건너뛰기",
@@ -139,7 +140,8 @@
"unreblog": "리블로그 취소",
"favorite": "즐겨찾기",
"unfavorite": "즐겨찾기 해제",
- "menu": "메뉴"
+ "menu": "메뉴",
+ "hide": "Hide"
},
"tag": {
"url": "URL",
@@ -148,6 +150,12 @@
"hashtag": "해시태그",
"email": "이메일",
"emoji": "에모지"
+ },
+ "visibility": {
+ "unlisted": "Everyone can see this post but not display in the public timeline.",
+ "private": "Only their followers can see this post.",
+ "private_from_me": "Only my followers can see this post.",
+ "direct": "Only mentioned user can see this post."
}
},
"friendship": {
@@ -192,10 +200,14 @@
},
"scene": {
"welcome": {
- "slogan": "소셜 네트워킹을\n여러분의 손에 돌려드립니다."
+ "slogan": "소셜 네트워킹을\n여러분의 손에 돌려드립니다.",
+ "get_started": "Get Started",
+ "log_in": "Log In"
},
"server_picker": {
"title": "서버를 고르세요,\n아무 서버나 좋습니다.",
+ "subtitle": "Pick a community based on your interests, region, or a general purpose one.",
+ "subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": {
"category": {
"all": "모두",
@@ -222,7 +234,7 @@
"category": "분류"
},
"input": {
- "placeholder": "Find a server or join your own..."
+ "placeholder": "Search communities"
},
"empty_state": {
"finding_servers": "Finding available servers...",
@@ -231,7 +243,7 @@
}
},
"register": {
- "title": "Tell us about you.",
+ "title": "Let’s get you set up on %s",
"input": {
"avatar": {
"delete": "삭제"
@@ -248,6 +260,12 @@
},
"password": {
"placeholder": "암호",
+ "require": "Your password needs at least:",
+ "character_limit": "8 characters",
+ "accessibility": {
+ "checked": "checked",
+ "unchecked": "unchecked"
+ },
"hint": "암호는 최소 8글자 이상이어야 합니다"
},
"invite": {
@@ -285,7 +303,7 @@
},
"server_rules": {
"title": "Some ground rules.",
- "subtitle": "These rules are set by the admins of %s.",
+ "subtitle": "These are set and enforced by the %s moderators.",
"prompt": "By continuing, you’re subject to the terms of service and privacy policy for %s.",
"terms_of_service": "terms of service",
"privacy_policy": "privacy policy",
@@ -295,10 +313,10 @@
},
"confirm_email": {
"title": "마지막으로.",
- "subtitle": "We just sent an email to %s,\ntap the link to confirm your account.",
+ "subtitle": "Tap the link we emailed to you to verify your account.",
"button": {
"open_email_app": "Open Email App",
- "dont_receive_email": "I never got an email"
+ "resend": "Resend"
},
"dont_receive_email": {
"title": "Check your email",
@@ -401,16 +419,26 @@
"segmented_control": {
"posts": "게시물",
"replies": "답글",
- "media": "미디어"
+ "posts_and_replies": "Posts and Replies",
+ "media": "미디어",
+ "about": "About"
},
"relationship_action_alert": {
+ "confirm_mute_user": {
+ "title": "Mute Account",
+ "message": "Confirm to mute %s"
+ },
"confirm_unmute_user": {
"title": "계정 뮤트 해제",
"message": "%s 뮤트 해제 확인"
},
- "confirm_unblock_usre": {
- "title": "계정 차단 해제",
- "message": "%s 차단 해제 확인"
+ "confirm_block_user": {
+ "title": "Block Account",
+ "message": "Confirm to block %s"
+ },
+ "confirm_unblock_user": {
+ "title": "Unblock Account",
+ "message": "Confirm to unblock %s"
}
}
},
@@ -461,12 +489,14 @@
"Everything": "Everything",
"Mentions": "Mentions"
},
- "user_followed_you": "%s followed you",
- "user_favorited your post": "%s favorited your post",
- "user_reblogged_your_post": "%s reblogged your post",
- "user_mentioned_you": "%s mentioned you",
- "user_requested_to_follow_you": "%s requested to follow you",
- "user_your_poll_has_ended": "%s Your poll has ended",
+ "notification_description": {
+ "followed_you": "followed you",
+ "favorited_your_post": "favorited your post",
+ "reblogged_your_post": "reblogged your post",
+ "mentioned_you": "mentioned you",
+ "request_to_follow_you": "request to follow you",
+ "poll_has_ended": "poll has ended"
+ },
"keyobard": {
"show_everything": "Show Everything",
"show_mentions": "Show Mentions"
@@ -485,6 +515,13 @@
"light": "Always Light",
"dark": "Always Dark"
},
+ "look_and_feel": {
+ "title": "Look and Feel",
+ "use_system": "Use System",
+ "really_dark": "Really Dark",
+ "sorta_dark": "Sorta Dark",
+ "light": "Light"
+ },
"notifications": {
"title": "Notifications",
"favorites": "Favorites my post",
@@ -526,14 +563,17 @@
}
},
"report": {
+ "title_report": "Report",
"title": "%s 신고하기",
"step1": "1단계 (총 2단계)",
"step2": "2단계 (총 2단계)",
"content1": "신고에 추가하고 싶은 다른 게시물이 존재하나요?",
"content2": "이 신고에 대해 중재자들이 알아야 할 것이 있나요?",
+ "report_sent_title": "Thanks for reporting, we’ll look into this.",
"send": "신고 전송",
"skip_to_send": "추가설명 없이 보내기",
- "text_placeholder": "추가 설명을 적거나 붙여넣으세요"
+ "text_placeholder": "추가 설명을 적거나 붙여넣으세요",
+ "reported": "REPORTED"
},
"preview": {
"keyboard": {
diff --git a/Localization/StringsConvertor/input/nl_NL/app.json b/Localization/StringsConvertor/input/nl_NL/app.json
index d8ee1e574..ae8f2d2dd 100644
--- a/Localization/StringsConvertor/input/nl_NL/app.json
+++ b/Localization/StringsConvertor/input/nl_NL/app.json
@@ -46,7 +46,7 @@
},
"delete_post": {
"title": "Weet u zeker dat u dit bericht wilt verwijderen?",
- "delete": "Verwijderen"
+ "message": "Are you sure you want to delete this post?"
},
"clean_cache": {
"title": "Cache-geheugen Wissen",
@@ -82,6 +82,7 @@
"share_user": "Delen %s",
"share_post": "Bericht Delen",
"open_in_safari": "Open in Safari",
+ "open_in_browser": "Open in Browser",
"find_people": "Zoek mensen om te volgen",
"manually_search": "Handmatig zoeken",
"skip": "Overslaan",
@@ -139,7 +140,8 @@
"unreblog": "Delen ongedaan maken",
"favorite": "Toevoegen aan Favorieten",
"unfavorite": "Verwijderen uit Favorieten",
- "menu": "Menu"
+ "menu": "Menu",
+ "hide": "Hide"
},
"tag": {
"url": "URL",
@@ -148,6 +150,12 @@
"hashtag": "Hashtag",
"email": "Email",
"emoji": "Emoji"
+ },
+ "visibility": {
+ "unlisted": "Everyone can see this post but not display in the public timeline.",
+ "private": "Only their followers can see this post.",
+ "private_from_me": "Only my followers can see this post.",
+ "direct": "Only mentioned user can see this post."
}
},
"friendship": {
@@ -192,10 +200,14 @@
},
"scene": {
"welcome": {
- "slogan": "Sociale media terug in uw handen."
+ "slogan": "Sociale media terug in uw handen.",
+ "get_started": "Get Started",
+ "log_in": "Log In"
},
"server_picker": {
"title": "Kies een server, welke dan ook.",
+ "subtitle": "Pick a community based on your interests, region, or a general purpose one.",
+ "subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": {
"category": {
"all": "Alles",
@@ -248,6 +260,12 @@
},
"password": {
"placeholder": "wachtwoord",
+ "require": "Your password needs at least:",
+ "character_limit": "8 characters",
+ "accessibility": {
+ "checked": "checked",
+ "unchecked": "unchecked"
+ },
"hint": "Uw wachtwoord moet ten minste acht tekens bevatten"
},
"invite": {
@@ -298,7 +316,7 @@
"subtitle": "We hebben een e-mail gestuurd naar %s,\nklik op de link om uw account te bevestigen.",
"button": {
"open_email_app": "Email Openen",
- "dont_receive_email": "Ik heb geen email ontvangen"
+ "resend": "Resend"
},
"dont_receive_email": {
"title": "Controleer uw emailadres",
@@ -401,16 +419,26 @@
"segmented_control": {
"posts": "Berichten",
"replies": "Reacties",
- "media": "Media"
+ "posts_and_replies": "Posts and Replies",
+ "media": "Media",
+ "about": "About"
},
"relationship_action_alert": {
+ "confirm_mute_user": {
+ "title": "Mute Account",
+ "message": "Confirm to mute %s"
+ },
"confirm_unmute_user": {
"title": "Account Negeren",
"message": "Bevestig om %s te negeren"
},
- "confirm_unblock_usre": {
- "title": "Account niet langer negeren",
- "message": "Bevestig om %s te deblokkeren"
+ "confirm_block_user": {
+ "title": "Block Account",
+ "message": "Confirm to block %s"
+ },
+ "confirm_unblock_user": {
+ "title": "Unblock Account",
+ "message": "Confirm to unblock %s"
}
}
},
@@ -461,12 +489,14 @@
"Everything": "Alles",
"Mentions": "Vermeldingen"
},
- "user_followed_you": "%s followed you",
- "user_favorited your post": "%s favorited your post",
- "user_reblogged_your_post": "%s reblogged your post",
- "user_mentioned_you": "%s mentioned you",
- "user_requested_to_follow_you": "%s requested to follow you",
- "user_your_poll_has_ended": "%s Your poll has ended",
+ "notification_description": {
+ "followed_you": "followed you",
+ "favorited_your_post": "favorited your post",
+ "reblogged_your_post": "reblogged your post",
+ "mentioned_you": "mentioned you",
+ "request_to_follow_you": "request to follow you",
+ "poll_has_ended": "poll has ended"
+ },
"keyobard": {
"show_everything": "Alles weergeven",
"show_mentions": "Vermeldingen weergeven"
@@ -485,6 +515,13 @@
"light": "Altijd Licht",
"dark": "Altijd Donker"
},
+ "look_and_feel": {
+ "title": "Look and Feel",
+ "use_system": "Use System",
+ "really_dark": "Really Dark",
+ "sorta_dark": "Sorta Dark",
+ "light": "Light"
+ },
"notifications": {
"title": "Meldingen",
"favorites": "Mijn bericht als favoriet toevoegt",
@@ -526,14 +563,17 @@
}
},
"report": {
+ "title_report": "Report",
"title": "Rapporteer %s",
"step1": "Stap 1 van 2",
"step2": "Stap 2 van 2",
"content1": "Zijn er nog meer berichten die u aan het rapport wilt toevoegen?",
"content2": "Is er iets anders over dit rapport dat de moderators zouden moeten weten?",
+ "report_sent_title": "Thanks for reporting, we’ll look into this.",
"send": "Stuur rapport",
"skip_to_send": "Verstuur zonder opmerkingen",
- "text_placeholder": "Schrijf of plak aanvullende opmerkingen"
+ "text_placeholder": "Schrijf of plak aanvullende opmerkingen",
+ "reported": "REPORTED"
},
"preview": {
"keyboard": {
diff --git a/Localization/StringsConvertor/input/pt_BR/app.json b/Localization/StringsConvertor/input/pt_BR/app.json
index 5c01ae7e0..ad99e178d 100644
--- a/Localization/StringsConvertor/input/pt_BR/app.json
+++ b/Localization/StringsConvertor/input/pt_BR/app.json
@@ -45,8 +45,8 @@
"message": "Please enable the photo library access permission to save the photo."
},
"delete_post": {
- "title": "Are you sure you want to delete this post?",
- "delete": "Delete"
+ "title": "Delete Post",
+ "message": "Are you sure you want to delete this post?"
},
"clean_cache": {
"title": "Clean Cache",
@@ -82,6 +82,7 @@
"share_user": "Share %s",
"share_post": "Share Post",
"open_in_safari": "Open in Safari",
+ "open_in_browser": "Open in Browser",
"find_people": "Find people to follow",
"manually_search": "Manually search instead",
"skip": "Skip",
@@ -139,7 +140,8 @@
"unreblog": "Undo reblog",
"favorite": "Favorite",
"unfavorite": "Unfavorite",
- "menu": "Menu"
+ "menu": "Menu",
+ "hide": "Hide"
},
"tag": {
"url": "URL",
@@ -148,6 +150,12 @@
"hashtag": "Hashtag",
"email": "Email",
"emoji": "Emoji"
+ },
+ "visibility": {
+ "unlisted": "Everyone can see this post but not display in the public timeline.",
+ "private": "Only their followers can see this post.",
+ "private_from_me": "Only my followers can see this post.",
+ "direct": "Only mentioned user can see this post."
}
},
"friendship": {
@@ -192,10 +200,14 @@
},
"scene": {
"welcome": {
- "slogan": "Social networking\nback in your hands."
+ "slogan": "Social networking\nback in your hands.",
+ "get_started": "Get Started",
+ "log_in": "Log In"
},
"server_picker": {
- "title": "Pick a server,\nany server.",
+ "title": "Mastodon is made of users in different communities.",
+ "subtitle": "Pick a community based on your interests, region, or a general purpose one.",
+ "subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": {
"category": {
"all": "All",
@@ -222,7 +234,7 @@
"category": "CATEGORY"
},
"input": {
- "placeholder": "Find a server or join your own..."
+ "placeholder": "Search communities"
},
"empty_state": {
"finding_servers": "Finding available servers...",
@@ -231,7 +243,7 @@
}
},
"register": {
- "title": "Tell us about you.",
+ "title": "Let’s get you set up on %s",
"input": {
"avatar": {
"delete": "Delete"
@@ -248,6 +260,12 @@
},
"password": {
"placeholder": "password",
+ "require": "Your password needs at least:",
+ "character_limit": "8 characters",
+ "accessibility": {
+ "checked": "checked",
+ "unchecked": "unchecked"
+ },
"hint": "Your password needs at least eight characters"
},
"invite": {
@@ -285,7 +303,7 @@
},
"server_rules": {
"title": "Some ground rules.",
- "subtitle": "These rules are set by the admins of %s.",
+ "subtitle": "These are set and enforced by the %s moderators.",
"prompt": "By continuing, you’re subject to the terms of service and privacy policy for %s.",
"terms_of_service": "terms of service",
"privacy_policy": "privacy policy",
@@ -295,10 +313,10 @@
},
"confirm_email": {
"title": "One last thing.",
- "subtitle": "We just sent an email to %s,\ntap the link to confirm your account.",
+ "subtitle": "Tap the link we emailed to you to verify your account.",
"button": {
"open_email_app": "Open Email App",
- "dont_receive_email": "I never got an email"
+ "resend": "Resend"
},
"dont_receive_email": {
"title": "Check your email",
@@ -401,14 +419,24 @@
"segmented_control": {
"posts": "Posts",
"replies": "Replies",
- "media": "Media"
+ "posts_and_replies": "Posts and Replies",
+ "media": "Media",
+ "about": "About"
},
"relationship_action_alert": {
+ "confirm_mute_user": {
+ "title": "Mute Account",
+ "message": "Confirm to mute %s"
+ },
"confirm_unmute_user": {
"title": "Unmute Account",
"message": "Confirm to unmute %s"
},
- "confirm_unblock_usre": {
+ "confirm_block_user": {
+ "title": "Block Account",
+ "message": "Confirm to block %s"
+ },
+ "confirm_unblock_user": {
"title": "Unblock Account",
"message": "Confirm to unblock %s"
}
@@ -461,12 +489,14 @@
"Everything": "Everything",
"Mentions": "Mentions"
},
- "user_followed_you": "%s followed you",
- "user_favorited your post": "%s favorited your post",
- "user_reblogged_your_post": "%s reblogged your post",
- "user_mentioned_you": "%s mentioned you",
- "user_requested_to_follow_you": "%s requested to follow you",
- "user_your_poll_has_ended": "%s Your poll has ended",
+ "notification_description": {
+ "followed_you": "followed you",
+ "favorited_your_post": "favorited your post",
+ "reblogged_your_post": "reblogged your post",
+ "mentioned_you": "mentioned you",
+ "request_to_follow_you": "request to follow you",
+ "poll_has_ended": "poll has ended"
+ },
"keyobard": {
"show_everything": "Show Everything",
"show_mentions": "Show Mentions"
@@ -485,6 +515,13 @@
"light": "Always Light",
"dark": "Always Dark"
},
+ "look_and_feel": {
+ "title": "Look and Feel",
+ "use_system": "Use System",
+ "really_dark": "Really Dark",
+ "sorta_dark": "Sorta Dark",
+ "light": "Light"
+ },
"notifications": {
"title": "Notifications",
"favorites": "Favorites my post",
@@ -526,14 +563,17 @@
}
},
"report": {
+ "title_report": "Report",
"title": "Report %s",
"step1": "Step 1 of 2",
"step2": "Step 2 of 2",
"content1": "Are there any other posts you’d like to add to the report?",
"content2": "Is there anything the moderators should know about this report?",
+ "report_sent_title": "Thanks for reporting, we’ll look into this.",
"send": "Send Report",
"skip_to_send": "Send without comment",
- "text_placeholder": "Type or paste additional comments"
+ "text_placeholder": "Type or paste additional comments",
+ "reported": "REPORTED"
},
"preview": {
"keyboard": {
diff --git a/Localization/StringsConvertor/input/pt_PT/app.json b/Localization/StringsConvertor/input/pt_PT/app.json
index 5c01ae7e0..ad99e178d 100644
--- a/Localization/StringsConvertor/input/pt_PT/app.json
+++ b/Localization/StringsConvertor/input/pt_PT/app.json
@@ -45,8 +45,8 @@
"message": "Please enable the photo library access permission to save the photo."
},
"delete_post": {
- "title": "Are you sure you want to delete this post?",
- "delete": "Delete"
+ "title": "Delete Post",
+ "message": "Are you sure you want to delete this post?"
},
"clean_cache": {
"title": "Clean Cache",
@@ -82,6 +82,7 @@
"share_user": "Share %s",
"share_post": "Share Post",
"open_in_safari": "Open in Safari",
+ "open_in_browser": "Open in Browser",
"find_people": "Find people to follow",
"manually_search": "Manually search instead",
"skip": "Skip",
@@ -139,7 +140,8 @@
"unreblog": "Undo reblog",
"favorite": "Favorite",
"unfavorite": "Unfavorite",
- "menu": "Menu"
+ "menu": "Menu",
+ "hide": "Hide"
},
"tag": {
"url": "URL",
@@ -148,6 +150,12 @@
"hashtag": "Hashtag",
"email": "Email",
"emoji": "Emoji"
+ },
+ "visibility": {
+ "unlisted": "Everyone can see this post but not display in the public timeline.",
+ "private": "Only their followers can see this post.",
+ "private_from_me": "Only my followers can see this post.",
+ "direct": "Only mentioned user can see this post."
}
},
"friendship": {
@@ -192,10 +200,14 @@
},
"scene": {
"welcome": {
- "slogan": "Social networking\nback in your hands."
+ "slogan": "Social networking\nback in your hands.",
+ "get_started": "Get Started",
+ "log_in": "Log In"
},
"server_picker": {
- "title": "Pick a server,\nany server.",
+ "title": "Mastodon is made of users in different communities.",
+ "subtitle": "Pick a community based on your interests, region, or a general purpose one.",
+ "subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": {
"category": {
"all": "All",
@@ -222,7 +234,7 @@
"category": "CATEGORY"
},
"input": {
- "placeholder": "Find a server or join your own..."
+ "placeholder": "Search communities"
},
"empty_state": {
"finding_servers": "Finding available servers...",
@@ -231,7 +243,7 @@
}
},
"register": {
- "title": "Tell us about you.",
+ "title": "Let’s get you set up on %s",
"input": {
"avatar": {
"delete": "Delete"
@@ -248,6 +260,12 @@
},
"password": {
"placeholder": "password",
+ "require": "Your password needs at least:",
+ "character_limit": "8 characters",
+ "accessibility": {
+ "checked": "checked",
+ "unchecked": "unchecked"
+ },
"hint": "Your password needs at least eight characters"
},
"invite": {
@@ -285,7 +303,7 @@
},
"server_rules": {
"title": "Some ground rules.",
- "subtitle": "These rules are set by the admins of %s.",
+ "subtitle": "These are set and enforced by the %s moderators.",
"prompt": "By continuing, you’re subject to the terms of service and privacy policy for %s.",
"terms_of_service": "terms of service",
"privacy_policy": "privacy policy",
@@ -295,10 +313,10 @@
},
"confirm_email": {
"title": "One last thing.",
- "subtitle": "We just sent an email to %s,\ntap the link to confirm your account.",
+ "subtitle": "Tap the link we emailed to you to verify your account.",
"button": {
"open_email_app": "Open Email App",
- "dont_receive_email": "I never got an email"
+ "resend": "Resend"
},
"dont_receive_email": {
"title": "Check your email",
@@ -401,14 +419,24 @@
"segmented_control": {
"posts": "Posts",
"replies": "Replies",
- "media": "Media"
+ "posts_and_replies": "Posts and Replies",
+ "media": "Media",
+ "about": "About"
},
"relationship_action_alert": {
+ "confirm_mute_user": {
+ "title": "Mute Account",
+ "message": "Confirm to mute %s"
+ },
"confirm_unmute_user": {
"title": "Unmute Account",
"message": "Confirm to unmute %s"
},
- "confirm_unblock_usre": {
+ "confirm_block_user": {
+ "title": "Block Account",
+ "message": "Confirm to block %s"
+ },
+ "confirm_unblock_user": {
"title": "Unblock Account",
"message": "Confirm to unblock %s"
}
@@ -461,12 +489,14 @@
"Everything": "Everything",
"Mentions": "Mentions"
},
- "user_followed_you": "%s followed you",
- "user_favorited your post": "%s favorited your post",
- "user_reblogged_your_post": "%s reblogged your post",
- "user_mentioned_you": "%s mentioned you",
- "user_requested_to_follow_you": "%s requested to follow you",
- "user_your_poll_has_ended": "%s Your poll has ended",
+ "notification_description": {
+ "followed_you": "followed you",
+ "favorited_your_post": "favorited your post",
+ "reblogged_your_post": "reblogged your post",
+ "mentioned_you": "mentioned you",
+ "request_to_follow_you": "request to follow you",
+ "poll_has_ended": "poll has ended"
+ },
"keyobard": {
"show_everything": "Show Everything",
"show_mentions": "Show Mentions"
@@ -485,6 +515,13 @@
"light": "Always Light",
"dark": "Always Dark"
},
+ "look_and_feel": {
+ "title": "Look and Feel",
+ "use_system": "Use System",
+ "really_dark": "Really Dark",
+ "sorta_dark": "Sorta Dark",
+ "light": "Light"
+ },
"notifications": {
"title": "Notifications",
"favorites": "Favorites my post",
@@ -526,14 +563,17 @@
}
},
"report": {
+ "title_report": "Report",
"title": "Report %s",
"step1": "Step 1 of 2",
"step2": "Step 2 of 2",
"content1": "Are there any other posts you’d like to add to the report?",
"content2": "Is there anything the moderators should know about this report?",
+ "report_sent_title": "Thanks for reporting, we’ll look into this.",
"send": "Send Report",
"skip_to_send": "Send without comment",
- "text_placeholder": "Type or paste additional comments"
+ "text_placeholder": "Type or paste additional comments",
+ "reported": "REPORTED"
},
"preview": {
"keyboard": {
diff --git a/Localization/StringsConvertor/input/ro_RO/app.json b/Localization/StringsConvertor/input/ro_RO/app.json
index 3927247ee..b9ef116dc 100644
--- a/Localization/StringsConvertor/input/ro_RO/app.json
+++ b/Localization/StringsConvertor/input/ro_RO/app.json
@@ -45,8 +45,8 @@
"message": "Please enable the photo library access permission to save the photo."
},
"delete_post": {
- "title": "Are you sure you want to delete this post?",
- "delete": "Delete"
+ "title": "Delete Post",
+ "message": "Are you sure you want to delete this post?"
},
"clean_cache": {
"title": "Clean Cache",
@@ -82,6 +82,7 @@
"share_user": "Share %s",
"share_post": "Share Post",
"open_in_safari": "Open in Safari",
+ "open_in_browser": "Open in Browser",
"find_people": "Find people to follow",
"manually_search": "Manually search instead",
"skip": "Skip",
@@ -139,7 +140,8 @@
"unreblog": "Undo reblog",
"favorite": "Favorite",
"unfavorite": "Unfavorite",
- "menu": "Menu"
+ "menu": "Menu",
+ "hide": "Hide"
},
"tag": {
"url": "URL",
@@ -148,6 +150,12 @@
"hashtag": "Hashtag",
"email": "Email",
"emoji": "Emoji"
+ },
+ "visibility": {
+ "unlisted": "Everyone can see this post but not display in the public timeline.",
+ "private": "Only their followers can see this post.",
+ "private_from_me": "Only my followers can see this post.",
+ "direct": "Only mentioned user can see this post."
}
},
"friendship": {
@@ -192,10 +200,14 @@
},
"scene": {
"welcome": {
- "slogan": "Social networking\nback in your hands."
+ "slogan": "Social networking\nback in your hands.",
+ "get_started": "Get Started",
+ "log_in": "Log In"
},
"server_picker": {
- "title": "Pick a server,\nany server.",
+ "title": "Mastodon is made of users in different communities.",
+ "subtitle": "Pick a community based on your interests, region, or a general purpose one.",
+ "subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": {
"category": {
"all": "All",
@@ -222,7 +234,7 @@
"category": "CATEGORY"
},
"input": {
- "placeholder": "Find a server or join your own..."
+ "placeholder": "Search communities"
},
"empty_state": {
"finding_servers": "Finding available servers...",
@@ -231,7 +243,7 @@
}
},
"register": {
- "title": "Tell us about you.",
+ "title": "Let’s get you set up on %s",
"input": {
"avatar": {
"delete": "Delete"
@@ -248,6 +260,12 @@
},
"password": {
"placeholder": "password",
+ "require": "Your password needs at least:",
+ "character_limit": "8 characters",
+ "accessibility": {
+ "checked": "checked",
+ "unchecked": "unchecked"
+ },
"hint": "Your password needs at least eight characters"
},
"invite": {
@@ -285,7 +303,7 @@
},
"server_rules": {
"title": "Some ground rules.",
- "subtitle": "These rules are set by the admins of %s.",
+ "subtitle": "These are set and enforced by the %s moderators.",
"prompt": "By continuing, you’re subject to the terms of service and privacy policy for %s.",
"terms_of_service": "terms of service",
"privacy_policy": "privacy policy",
@@ -295,10 +313,10 @@
},
"confirm_email": {
"title": "One last thing.",
- "subtitle": "We just sent an email to %s,\ntap the link to confirm your account.",
+ "subtitle": "Tap the link we emailed to you to verify your account.",
"button": {
"open_email_app": "Open Email App",
- "dont_receive_email": "I never got an email"
+ "resend": "Resend"
},
"dont_receive_email": {
"title": "Check your email",
@@ -401,14 +419,24 @@
"segmented_control": {
"posts": "Posts",
"replies": "Replies",
- "media": "Media"
+ "posts_and_replies": "Posts and Replies",
+ "media": "Media",
+ "about": "About"
},
"relationship_action_alert": {
+ "confirm_mute_user": {
+ "title": "Mute Account",
+ "message": "Confirm to mute %s"
+ },
"confirm_unmute_user": {
"title": "Unmute Account",
"message": "Confirm to unmute %s"
},
- "confirm_unblock_usre": {
+ "confirm_block_user": {
+ "title": "Block Account",
+ "message": "Confirm to block %s"
+ },
+ "confirm_unblock_user": {
"title": "Unblock Account",
"message": "Confirm to unblock %s"
}
@@ -461,12 +489,14 @@
"Everything": "Everything",
"Mentions": "Mentions"
},
- "user_followed_you": "%s followed you",
- "user_favorited your post": "%s favorited your post",
- "user_reblogged_your_post": "%s reblogged your post",
- "user_mentioned_you": "%s mentioned you",
- "user_requested_to_follow_you": "%s requested to follow you",
- "user_your_poll_has_ended": "%s Your poll has ended",
+ "notification_description": {
+ "followed_you": "followed you",
+ "favorited_your_post": "favorited your post",
+ "reblogged_your_post": "reblogged your post",
+ "mentioned_you": "mentioned you",
+ "request_to_follow_you": "request to follow you",
+ "poll_has_ended": "poll has ended"
+ },
"keyobard": {
"show_everything": "Show Everything",
"show_mentions": "Show Mentions"
@@ -485,6 +515,13 @@
"light": "Always Light",
"dark": "Always Dark"
},
+ "look_and_feel": {
+ "title": "Look and Feel",
+ "use_system": "Use System",
+ "really_dark": "Really Dark",
+ "sorta_dark": "Sorta Dark",
+ "light": "Light"
+ },
"notifications": {
"title": "Notifications",
"favorites": "Favorites my post",
@@ -526,14 +563,17 @@
}
},
"report": {
+ "title_report": "Report",
"title": "Report %s",
"step1": "Step 1 of 2",
"step2": "Step 2 of 2",
"content1": "Are there any other posts you’d like to add to the report?",
"content2": "Is there anything the moderators should know about this report?",
+ "report_sent_title": "Thanks for reporting, we’ll look into this.",
"send": "Send Report",
"skip_to_send": "Send without comment",
- "text_placeholder": "Type or paste additional comments"
+ "text_placeholder": "Type or paste additional comments",
+ "reported": "REPORTED"
},
"preview": {
"keyboard": {
diff --git a/Localization/StringsConvertor/input/ru_RU/app.json b/Localization/StringsConvertor/input/ru_RU/app.json
index c1ad3ee49..58cedfc7f 100644
--- a/Localization/StringsConvertor/input/ru_RU/app.json
+++ b/Localization/StringsConvertor/input/ru_RU/app.json
@@ -46,7 +46,7 @@
},
"delete_post": {
"title": "Вы уверены, что хотите удалить этот пост?",
- "delete": "Удалить"
+ "message": "Are you sure you want to delete this post?"
},
"clean_cache": {
"title": "Очистка кэша",
@@ -67,7 +67,7 @@
"done": "Готово",
"confirm": "Подтвердить",
"continue": "Продолжить",
- "compose": "Compose",
+ "compose": "Написать",
"cancel": "Отмена",
"discard": "Отмена",
"try_again": "Попробовать снова",
@@ -82,6 +82,7 @@
"share_user": "Поделиться %s",
"share_post": "Поделиться постом",
"open_in_safari": "Открыть в Safari",
+ "open_in_browser": "Открыть в браузере",
"find_people": "Подпишитесь на людей",
"manually_search": "Найти вручную",
"skip": "Пропустить",
@@ -139,7 +140,8 @@
"unreblog": "Убрать продвижение",
"favorite": "Добавить в избранное",
"unfavorite": "Убрать из избранного",
- "menu": "Меню"
+ "menu": "Меню",
+ "hide": "Hide"
},
"tag": {
"url": "Ссылка",
@@ -148,6 +150,12 @@
"hashtag": "Хэштег",
"email": "E-mail",
"emoji": "Эмодзи"
+ },
+ "visibility": {
+ "unlisted": "Everyone can see this post but not display in the public timeline.",
+ "private": "Only their followers can see this post.",
+ "private_from_me": "Only my followers can see this post.",
+ "direct": "Only mentioned user can see this post."
}
},
"friendship": {
@@ -192,10 +200,14 @@
},
"scene": {
"welcome": {
- "slogan": "Социальная сеть\nпод вашим контролем."
+ "slogan": "Социальная сеть\nпод вашим контролем.",
+ "get_started": "Get Started",
+ "log_in": "Вход"
},
"server_picker": {
"title": "Выберите сервер,\nлюбой сервер.",
+ "subtitle": "Выберите сообщество на основе своих интересов, региона или общей тематики.",
+ "subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": {
"category": {
"all": "Все",
@@ -248,6 +260,12 @@
},
"password": {
"placeholder": "пароль",
+ "require": "Your password needs at least:",
+ "character_limit": "8 characters",
+ "accessibility": {
+ "checked": "checked",
+ "unchecked": "unchecked"
+ },
"hint": "Пароль должен содержать не менее восьми символов"
},
"invite": {
@@ -298,7 +316,7 @@
"subtitle": "Мы только что отправили письмо на\n%s.\nНажмите на ссылку в нём, чтобы\nподтвердить свою учётную запись.",
"button": {
"open_email_app": "Открыть приложение почты",
- "dont_receive_email": "Я не получил письма"
+ "resend": "Resend"
},
"dont_receive_email": {
"title": "Проверьте свой e-mail адрес",
@@ -401,16 +419,26 @@
"segmented_control": {
"posts": "Посты",
"replies": "Ответы",
- "media": "Медиа"
+ "posts_and_replies": "Posts and Replies",
+ "media": "Медиа",
+ "about": "About"
},
"relationship_action_alert": {
+ "confirm_mute_user": {
+ "title": "Mute Account",
+ "message": "Confirm to mute %s"
+ },
"confirm_unmute_user": {
"title": "Убрать из игнорируемых",
"message": "Убрать %s из игнорируемых?"
},
- "confirm_unblock_usre": {
- "title": "Разблокировать",
- "message": "Убрать %s из списка блокировки?"
+ "confirm_block_user": {
+ "title": "Block Account",
+ "message": "Confirm to block %s"
+ },
+ "confirm_unblock_user": {
+ "title": "Unblock Account",
+ "message": "Confirm to unblock %s"
}
}
},
@@ -461,12 +489,14 @@
"Everything": "Все",
"Mentions": "Упоминания"
},
- "user_followed_you": "%s подписался (-ась)",
- "user_favorited your post": "%s favorited your post",
- "user_reblogged_your_post": "%s reblogged your post",
- "user_mentioned_you": "%s упомянул вас",
- "user_requested_to_follow_you": "%s запрашивает подписку",
- "user_your_poll_has_ended": "%s Your poll has ended",
+ "notification_description": {
+ "followed_you": "followed you",
+ "favorited_your_post": "favorited your post",
+ "reblogged_your_post": "reblogged your post",
+ "mentioned_you": "mentioned you",
+ "request_to_follow_you": "request to follow you",
+ "poll_has_ended": "poll has ended"
+ },
"keyobard": {
"show_everything": "Показать все",
"show_mentions": "Показать упоминания"
@@ -485,6 +515,13 @@
"light": "Светлая тема",
"dark": "Тёмная тема"
},
+ "look_and_feel": {
+ "title": "Look and Feel",
+ "use_system": "Use System",
+ "really_dark": "Really Dark",
+ "sorta_dark": "Sorta Dark",
+ "light": "Light"
+ },
"notifications": {
"title": "Уведомления",
"favorites": "Добавляет мой пост в избранное",
@@ -526,14 +563,17 @@
}
},
"report": {
+ "title_report": "Report",
"title": "Пожаловаться на %s",
"step1": "Шаг 1 из 2",
"step2": "Шаг 2 из 2",
"content1": "Есть ли другие сообщения, которые вы хотите добавить в отчёт?",
"content2": "Есть ли что-то, что модераторы должны знать об этом сообщении?",
+ "report_sent_title": "Thanks for reporting, we’ll look into this.",
"send": "Пожаловаться",
"skip_to_send": "Отправить без комментария",
- "text_placeholder": "Дополнительные комментарии"
+ "text_placeholder": "Дополнительные комментарии",
+ "reported": "REPORTED"
},
"preview": {
"keyboard": {
diff --git a/Localization/StringsConvertor/input/sv_FI/Localizable.stringsdict b/Localization/StringsConvertor/input/sv_FI/Localizable.stringsdict
index 65316e3d0..eec977a68 100644
--- a/Localization/StringsConvertor/input/sv_FI/Localizable.stringsdict
+++ b/Localization/StringsConvertor/input/sv_FI/Localizable.stringsdict
@@ -13,15 +13,15 @@
NSStringFormatValueTypeKey
ld
one
- 1 unread notification
+ 1 lukematon ilmoitus
other
- %ld unread notification
+ %ld lukematonta ilmoitusta
a11y.plural.count.input_limit_exceeds
NSStringLocalizedFormatKey
- Input limit exceeds %#@character_count@
+ Syöterajoitus ylittyy %#@character_count@
character_count
NSStringFormatSpecTypeKey
@@ -29,15 +29,15 @@
NSStringFormatValueTypeKey
ld
one
- 1 character
+ 1 merkki
other
- %ld characters
+ %ld merkkiä
a11y.plural.count.input_limit_remains
NSStringLocalizedFormatKey
- Input limit remains %#@character_count@
+ Syöterajoitus ylittyy %#@character_count@ päästä
character_count
NSStringFormatSpecTypeKey
@@ -45,9 +45,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 character
+ 1 merkki
other
- %ld characters
+ %ld merkkiä
plural.count.metric_formatted.post
@@ -61,9 +61,9 @@
NSStringFormatValueTypeKey
ld
one
- post
+ julkaisu
other
- posts
+ julkaisut
plural.count.post
@@ -77,9 +77,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 post
+ 1 julkaisu
other
- %ld posts
+ %ld julkaisua
plural.count.favorite
@@ -93,9 +93,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 favorite
+ 1 suosikki
other
- %ld favorites
+ %ld suosikkia
plural.count.reblog
@@ -109,9 +109,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 reblog
+ 1 edelleen jako
other
- %ld reblogs
+ %ld edelleen jakoa
plural.count.vote
@@ -125,9 +125,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 vote
+ 1 ääni
other
- %ld votes
+ %ld ääntä
plural.count.voter
@@ -141,9 +141,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 voter
+ 1 vastaaja
other
- %ld voters
+ %ld vastaajaa
plural.people_talking
@@ -157,9 +157,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 people talking
+ 1 ihminen puhuu
other
- %ld people talking
+ %ld ihmistä puhuu
plural.count.following
@@ -173,9 +173,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 following
+ 1 seurataan
other
- %ld following
+ %ld seurataan
plural.count.follower
@@ -189,9 +189,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 följare
+ 1 seuraaja
other
- %ld följare
+ %ld seuraajaa
date.year.left
@@ -205,9 +205,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 year left
+ 1 vuosi jäljellä
other
- %ld years left
+ %ld vuotta jäljellä
date.month.left
@@ -221,9 +221,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 months left
+ 1 kuukausi jäljellä
other
- %ld months left
+ %ld kuukautta jäljellä
date.day.left
@@ -237,9 +237,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 day left
+ 1 päivä jäljellä
other
- %ld days left
+ %ld päivää jäljellä
date.hour.left
@@ -253,9 +253,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 hour left
+ 1 tunti jäljellä
other
- %ld hours left
+ %ld tuntia jäljellä
date.minute.left
@@ -269,9 +269,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 minute left
+ 1 minuutti jäljellä
other
- %ld minutes left
+ %ld minuuttia jäljellä
date.second.left
@@ -285,9 +285,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 second left
+ 1 sekuntti
other
- %ld seconds left
+ %ld sekunttia jäljellä
date.year.ago.abbr
@@ -301,9 +301,9 @@
NSStringFormatValueTypeKey
ld
one
- 1y ago
+ 1v sitten
other
- %ldy ago
+ %ldv sitten
date.month.ago.abbr
@@ -317,9 +317,9 @@
NSStringFormatValueTypeKey
ld
one
- 1M ago
+ 1kk sitten
other
- %ldM ago
+ %ldkk sitten
date.day.ago.abbr
@@ -333,9 +333,9 @@
NSStringFormatValueTypeKey
ld
one
- 1d ago
+ 1pv sitten
other
- %ldd ago
+ %ldpv sitten
date.hour.ago.abbr
@@ -349,9 +349,9 @@
NSStringFormatValueTypeKey
ld
one
- 1h ago
+ 1t sitten
other
- %ldh ago
+ %ldt sitten
date.minute.ago.abbr
@@ -365,9 +365,9 @@
NSStringFormatValueTypeKey
ld
one
- 1m ago
+ 1min sitten
other
- %ldm ago
+ %ldmin sitten
date.second.ago.abbr
@@ -381,9 +381,9 @@
NSStringFormatValueTypeKey
ld
one
- 1s ago
+ 1s sitten
other
- %lds ago
+ %lds sitten
diff --git a/Localization/StringsConvertor/input/sv_FI/app.json b/Localization/StringsConvertor/input/sv_FI/app.json
index 7acf48755..669ee4371 100644
--- a/Localization/StringsConvertor/input/sv_FI/app.json
+++ b/Localization/StringsConvertor/input/sv_FI/app.json
@@ -2,555 +2,595 @@
"common": {
"alerts": {
"common": {
- "please_try_again": "Var god försök igen.",
- "please_try_again_later": "Var god försök igen senare."
+ "please_try_again": "Yritä uudelleen.",
+ "please_try_again_later": "Yritä uudelleen myöhemmin."
},
"sign_up_failure": {
- "title": "Sign Up Failure"
+ "title": "Rekisteröinti epäonnistui"
},
"server_error": {
- "title": "Serverfel"
+ "title": "Palvelinvirhe"
},
"vote_failure": {
"title": "Vote Failure",
- "poll_ended": "Omröstningen har avslutats"
+ "poll_ended": "Kysely on päättynyt"
},
"discard_post_content": {
- "title": "Discard Draft",
+ "title": "Hylkää luonnos",
"message": "Confirm to discard composed post content."
},
"publish_post_failure": {
- "title": "Publish Failure",
- "message": "Failed to publish the post.\nPlease check your internet connection.",
+ "title": "Julkaiseminen epäonnistui",
+ "message": "Julkaisun julkaiseminen epäonnistui.\nTarkista internet-yhteytesi.",
"attachments_message": {
"video_attach_with_photo": "Cannot attach a video to a post that already contains images.",
- "more_than_one_video": "Cannot attach more than one video."
+ "more_than_one_video": "Ei voi liittä yhtä videota enempää."
}
},
"edit_profile_failure": {
- "title": "Edit Profile Error",
- "message": "Cannot edit profile. Please try again."
+ "title": "Virhe profiilin muokkauksessa",
+ "message": "Profiilia ei voida muoka. Yritä uudelleen."
},
"sign_out": {
- "title": "Sign Out",
- "message": "Är du säker på att du vill logga ut?",
- "confirm": "Sign Out"
+ "title": "Kirjaudu ulos",
+ "message": "Haluatko varmasti kirjautua ulos?",
+ "confirm": "Kirjaudu ulos"
},
"block_domain": {
"title": "Are you really, really sure you want to block the entire %s? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain and any of your followers from that domain will be removed.",
- "block_entire_domain": "Block Domain"
+ "block_entire_domain": "Estä verkkotunnus"
},
"save_photo_failure": {
- "title": "Save Photo Failure",
+ "title": "Kuvan tallentaminen epäonnistui",
"message": "Please enable the photo library access permission to save the photo."
},
"delete_post": {
- "title": "Are you sure you want to delete this post?",
- "delete": "Radera"
+ "title": "Haluatko varmasti poistaa tämän julkaisun?",
+ "message": "Are you sure you want to delete this post?"
},
"clean_cache": {
- "title": "Clean Cache",
- "message": "Successfully cleaned %s cache."
+ "title": "Puhdista välimuisti",
+ "message": "%s välimuisti tyhjennetty onnistuneesti."
}
},
"controls": {
"actions": {
- "back": "Back",
- "next": "Next",
- "previous": "Previous",
- "open": "Open",
- "add": "Add",
- "remove": "Remove",
- "edit": "Redigera",
- "save": "Spara",
+ "back": "Takaisin",
+ "next": "Seuraava",
+ "previous": "Edellinen",
+ "open": "Avaa",
+ "add": "Lisää",
+ "remove": "Poista",
+ "edit": "Muokkaa",
+ "save": "Tallenna",
"ok": "OK",
- "done": "Done",
- "confirm": "Confirm",
- "continue": "Fortsätt",
- "compose": "Compose",
- "cancel": "Avbryt",
- "discard": "Discard",
- "try_again": "Försök igen",
- "take_photo": "Take Photo",
- "save_photo": "Save Photo",
- "copy_photo": "Copy Photo",
- "sign_in": "Sign In",
- "sign_up": "Sign Up",
- "see_more": "See More",
- "preview": "Preview",
- "share": "Dela",
- "share_user": "Dela %s",
- "share_post": "Share Post",
- "open_in_safari": "Öppna i Safari",
- "find_people": "Find people to follow",
+ "done": "Valmis",
+ "confirm": "Vahvista",
+ "continue": "Jatka",
+ "compose": "Koosta",
+ "cancel": "Kumoa",
+ "discard": "Hylkää",
+ "try_again": "Yritä uudelleen",
+ "take_photo": "Ota kuva",
+ "save_photo": "Tallenna kuva",
+ "copy_photo": "Kopioi kuva",
+ "sign_in": "Kirjaudu sisään",
+ "sign_up": "Rekisteröidy",
+ "see_more": "Näytä lisää",
+ "preview": "Esikatselu",
+ "share": "Jaa",
+ "share_user": "Jaa %s",
+ "share_post": "Jaa julkaisu",
+ "open_in_safari": "Avaa Safarissa",
+ "open_in_browser": "Open in Browser",
+ "find_people": "Löydä tilejä seurattavaksi",
"manually_search": "Manually search instead",
- "skip": "Skip",
- "reply": "Reply",
- "report_user": "Rapportera %s",
- "block_domain": "Block %s",
- "unblock_domain": "Unblock %s",
- "settings": "Inställningar",
- "delete": "Radera"
+ "skip": "Ohita",
+ "reply": "Vastaa",
+ "report_user": "Ilmianna %s",
+ "block_domain": "Estä %s",
+ "unblock_domain": "Poista esto %s",
+ "settings": "Asetukset",
+ "delete": "Poista"
},
"tabs": {
- "home": "Home",
- "search": "Search",
- "notification": "Notification",
- "profile": "Profil"
+ "home": "Koti",
+ "search": "Haku",
+ "notification": "Ilmoitus",
+ "profile": "Profiili"
},
"keyboard": {
"common": {
- "switch_to_tab": "Switch to %s",
- "compose_new_post": "Compose New Post",
- "show_favorites": "Show Favorites",
- "open_settings": "Open Settings"
+ "switch_to_tab": "Vaihda %s",
+ "compose_new_post": "Koosta uusi julkaisu",
+ "show_favorites": "Näytä suosikit",
+ "open_settings": "Avaa asetukset"
},
"timeline": {
- "previous_status": "Previous Post",
- "next_status": "Next Post",
- "open_status": "Open Post",
- "open_author_profile": "Open Author's Profile",
- "open_reblogger_profile": "Open Reblogger's Profile",
- "reply_status": "Reply to Post",
+ "previous_status": "Edellinen julkaisu",
+ "next_status": "Seuraava julkaisu",
+ "open_status": "Avaa julkaisu",
+ "open_author_profile": "Avaa tekijän profiili",
+ "open_reblogger_profile": "Avaa edelleen jakajan profiili",
+ "reply_status": "Vastaa julkaisuun",
"toggle_reblog": "Toggle Reblog on Post",
"toggle_favorite": "Toggle Favorite on Post",
- "toggle_content_warning": "Toggle Content Warning",
+ "toggle_content_warning": "Vaihda sisältövaroitus",
"preview_image": "Preview Image"
},
"segmented_control": {
"previous_section": "Previous Section",
- "next_section": "Next Section"
+ "next_section": "Seuraava lohko"
}
},
"status": {
- "user_reblogged": "%s reblogged",
- "user_replied_to": "Replied to %s",
- "show_post": "Show Post",
- "show_user_profile": "Show user profile",
- "content_warning": "Content Warning",
- "media_content_warning": "Tap anywhere to reveal",
+ "user_reblogged": "%s jakoi edelleen",
+ "user_replied_to": "Vastasi %s:lle",
+ "show_post": "Näytä julkaisu",
+ "show_user_profile": "Näytä tili",
+ "content_warning": "Sisältövaroitus",
+ "media_content_warning": "Napauta mistä tahansa paljastaaksesi",
"poll": {
"vote": "Vote",
- "closed": "Closed"
+ "closed": "Suljettu"
},
"actions": {
- "reply": "Reply",
- "reblog": "Reblog",
- "unreblog": "Undo reblog",
+ "reply": "Vastaa",
+ "reblog": "Jaa edelleen",
+ "unreblog": "Peru edelleen jako",
"favorite": "Favorite",
"unfavorite": "Unfavorite",
- "menu": "Meny"
+ "menu": "Valikko",
+ "hide": "Dölj"
},
"tag": {
"url": "URL",
"mention": "Mention",
- "link": "Link",
- "hashtag": "Hashtag",
- "email": "Email",
+ "link": "Linkki",
+ "hashtag": "Hashtagi",
+ "email": "Sähköposti",
"emoji": "Emoji"
+ },
+ "visibility": {
+ "unlisted": "Everyone can see this post but not display in the public timeline.",
+ "private": "Only their followers can see this post.",
+ "private_from_me": "Only my followers can see this post.",
+ "direct": "Only mentioned user can see this post."
}
},
"friendship": {
- "follow": "Följ",
- "following": "Följer",
- "request": "Request",
- "pending": "Pending",
- "block": "Block",
- "block_user": "Block %s",
- "block_domain": "Block %s",
- "unblock": "Unblock",
+ "follow": "Seuraa",
+ "following": "Seurataan",
+ "request": "Pyydä",
+ "pending": "Pyydetty",
+ "block": "Estä",
+ "block_user": "Estä %s",
+ "block_domain": "Estä %s",
+ "unblock": "Poista esto",
"unblock_user": "Unblock %s",
- "blocked": "Blocked",
- "mute": "Mute",
- "mute_user": "Mute %s",
- "unmute": "Unmute",
- "unmute_user": "Unmute %s",
- "muted": "Muted",
- "edit_info": "Edit Info"
+ "blocked": "Estetty",
+ "mute": "Mykistä",
+ "mute_user": "Mykistä %s",
+ "unmute": "Poista mykistys",
+ "unmute_user": "Poista mykistys tililtä %s",
+ "muted": "Mykistetty",
+ "edit_info": "Muokkaa profiilia"
},
"timeline": {
- "filtered": "Filtered",
+ "filtered": "Suodatettu",
"timestamp": {
- "now": "Now"
+ "now": "Nyt"
},
"loader": {
- "load_missing_posts": "Load missing posts",
- "loading_missing_posts": "Loading missing posts...",
- "show_more_replies": "Visa fler svar"
+ "load_missing_posts": "Lataa puuttuvat julkaisut",
+ "loading_missing_posts": "Ladataan puuttuvia julkaisuja...",
+ "show_more_replies": "Näytä lisää vastauksia"
},
"header": {
- "no_status_found": "No Post Found",
- "blocking_warning": "You can’t view this user's profile\nuntil you unblock them.\nYour profile looks like this to them.",
- "user_blocking_warning": "You can’t view %s’s profile\nuntil you unblock them.\nYour profile looks like this to them.",
- "blocked_warning": "You can’t view this user’s profile\nuntil they unblock you.",
- "user_blocked_warning": "You can’t view %s’s profile\nuntil they unblock you.",
- "suspended_warning": "This user has been suspended.",
- "user_suspended_warning": "%s’s account has been suspended."
+ "no_status_found": "Julkaisua ei löytynyt",
+ "blocking_warning": "Et voi tarkastella tämän tilin profiilia\nennen kuin poistat sen esto.\nProfiilisi näyttää tältä hänelle.",
+ "user_blocking_warning": "Et voi tarkastella tilin %s profiilia\nennen kuin poistat sen esto.\nProfiilisi näyttää tältä hänelle.",
+ "blocked_warning": "Et voi tarkastella tämän tilin profiilia\nennen kuin hän poistaa eston.",
+ "user_blocked_warning": "Et voi tarkastella tilin %s profiilia\nennen kuin hän poistaa eston.",
+ "suspended_warning": "Tämä tili on lakkautettu.",
+ "user_suspended_warning": "Tili %s on lakkautettu."
}
}
}
},
"scene": {
"welcome": {
- "slogan": "Social networking\nback in your hands."
+ "slogan": "Sosiaalinen verkostoituminen\ntakaisin käsissäsi.",
+ "get_started": "Kom igång",
+ "log_in": "Logga in"
},
"server_picker": {
- "title": "Pick a server,\nany server.",
+ "title": "Valitse palvelin,\nmikä tahansa palvelin.",
+ "subtitle": "Pick a community based on your interests, region, or a general purpose one.",
+ "subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": {
"category": {
- "all": "All",
- "all_accessiblity_description": "Kategori: Alla",
- "academia": "academia",
- "activism": "activism",
- "food": "food",
- "furry": "furry",
- "games": "games",
- "general": "general",
- "journalism": "journalism",
- "lgbt": "lgbt",
- "regional": "regional",
- "art": "art",
- "music": "music",
- "tech": "tech"
+ "all": "Kaikki",
+ "all_accessiblity_description": "Kategoria: Kaikki",
+ "academia": "akateeminen",
+ "activism": "aktivismi",
+ "food": "ruoka",
+ "furry": "turri",
+ "games": "pelit",
+ "general": "yleinen",
+ "journalism": "journalismi",
+ "lgbt": "hlbt",
+ "regional": "alueellinen",
+ "art": "taide",
+ "music": "musiikki",
+ "tech": "tekniikka"
},
- "see_less": "See Less",
- "see_more": "See More"
+ "see_less": "Näytä vähemmän",
+ "see_more": "Näytä lisää"
},
"label": {
- "language": "SPRÅK",
- "users": "ANVÄNDARE",
- "category": "KATEGORI"
+ "language": "KIELI",
+ "users": "TILIÄ",
+ "category": "KATEGORIA"
},
"input": {
- "placeholder": "Find a server or join your own..."
+ "placeholder": "Etsi palvelin tai liity omaan..."
},
"empty_state": {
- "finding_servers": "Finding available servers...",
- "bad_network": "Something went wrong while loading the data. Check your internet connection.",
- "no_results": "Inga resultat"
+ "finding_servers": "Etsistään saatavilla olevia palvelimia...",
+ "bad_network": "Jokin meni pieleen dataa ladatessa. Tarkista internet-yhteytesi.",
+ "no_results": "Ei hakutuloksia"
}
},
"register": {
- "title": "Tell us about you.",
+ "title": "Kerro meille sinusta.",
"input": {
"avatar": {
- "delete": "Radera"
+ "delete": "Poista"
},
"username": {
- "placeholder": "username",
- "duplicate_prompt": "This username is taken."
+ "placeholder": "käyttäjänimi",
+ "duplicate_prompt": "Tämä käyttäjänimi on varattu."
},
"display_name": {
- "placeholder": "display name"
+ "placeholder": "näyttönimi"
},
"email": {
- "placeholder": "email"
+ "placeholder": "sähköposti"
},
"password": {
- "placeholder": "password",
- "hint": "Your password needs at least eight characters"
+ "placeholder": "salasana",
+ "require": "Your password needs at least:",
+ "character_limit": "8 characters",
+ "accessibility": {
+ "checked": "checked",
+ "unchecked": "unchecked"
+ },
+ "hint": "Salasanassasi on oltava vähintään kahdeksan merkkiä"
},
"invite": {
- "registration_user_invite_request": "Why do you want to join?"
+ "registration_user_invite_request": "Miksi haluat liittyä?"
}
},
"error": {
"item": {
- "username": "Användarnamn",
- "email": "Email",
- "password": "Password",
- "agreement": "Agreement",
+ "username": "Käyttäjänimi",
+ "email": "Sähköposti",
+ "password": "Salasana",
+ "agreement": "Hyväksy",
"locale": "Locale",
- "reason": "Reason"
+ "reason": "Syy"
},
"reason": {
- "blocked": "%s contains a disallowed email provider",
- "unreachable": "%s does not seem to exist",
- "taken": "%s is already in use",
+ "blocked": "%s sisältää estetyn sähköpostipalveluntarjoajan",
+ "unreachable": "%s ei näytä olevan olemassa",
+ "taken": "%s on jo käytössä",
"reserved": "%s is a reserved keyword",
- "accepted": "%s must be accepted",
- "blank": "%s is required",
- "invalid": "%s is invalid",
- "too_long": "%s is too long",
- "too_short": "%s is too short",
- "inclusion": "%s is not a supported value"
+ "accepted": "%s täytyy hyväksyä",
+ "blank": "%s vaaditaan",
+ "invalid": "%s on virheellinen",
+ "too_long": "%s on liian pitkä",
+ "too_short": "%s on liian lyhyt",
+ "inclusion": "%s ei ole tuettu arvo"
},
"special": {
- "username_invalid": "Username must only contain alphanumeric characters and underscores",
- "username_too_long": "Username is too long (can’t be longer than 30 characters)",
- "email_invalid": "This is not a valid email address",
- "password_too_short": "Password is too short (must be at least 8 characters)"
+ "username_invalid": "Käyttäjänimi voi sisältää ainoastaan aakkosnumerrisia merkkejä ja alaviivoja",
+ "username_too_long": "Käyttäjänimi on liian pitkä (ei voi olla pidempi kuin 30 merkkiä)",
+ "email_invalid": "Tämä ei ole kelvollinen sähköpostiosoite",
+ "password_too_short": "Salasana on liian lyhyt (täytyy olla vähintään 8 merkkiä)"
}
}
},
"server_rules": {
- "title": "Some ground rules.",
- "subtitle": "These rules are set by the admins of %s.",
- "prompt": "By continuing, you’re subject to the terms of service and privacy policy for %s.",
- "terms_of_service": "terms of service",
- "privacy_policy": "integritetspolicy",
+ "title": "Joitakin perussääntöjä.",
+ "subtitle": "Nämä säännöt ovat %s -palvelun asettamia.",
+ "prompt": "Jatkamalla, hyväksyt palvelun %s palveluehdot ja tietosuojakäytönnön.",
+ "terms_of_service": "käyttöehdot",
+ "privacy_policy": "tietosuojakäytäntö",
"button": {
- "confirm": "I Agree"
+ "confirm": "Hyväksyn"
}
},
"confirm_email": {
- "title": "One last thing.",
- "subtitle": "We just sent an email to %s,\ntap the link to confirm your account.",
+ "title": "Viimeinen asia.",
+ "subtitle": "Lähetimme juuri sähköpostin osoitteeseen %s, napauta siinä olevaa linkkiä vahvistaaksesi tilisi.",
"button": {
- "open_email_app": "Open Email App",
- "dont_receive_email": "I never got an email"
+ "open_email_app": "Avaa sähköpostisovellus",
+ "resend": "Resend"
},
"dont_receive_email": {
- "title": "Check your email",
- "description": "Check if your email address is correct as well as your junk folder if you haven’t.",
- "resend_email": "Resend Email"
+ "title": "Tarkista sähköpostisi",
+ "description": "Tarkista, että sähköpostiosoitteesi on oikea, sekä roskapostikansiosi, jos et vielä ole.",
+ "resend_email": "Lähetä sähköposti uudelleen"
},
"open_email_app": {
- "title": "Check your inbox.",
- "description": "We just sent you an email. Check your junk folder if you haven’t.",
- "mail": "Mail",
- "open_email_client": "Open Email Client"
+ "title": "Tarkasta postilaatikkosi.",
+ "description": "Lähetimme sinulle juuri sähköpostin. Tarkista myös roskapostikansiosi, jos et vielä ole.",
+ "mail": "Sähköposti",
+ "open_email_client": "Avaa sähköpostisovellus"
}
},
"home_timeline": {
- "title": "Home",
+ "title": "Koti",
"navigation_bar_state": {
- "offline": "Offline",
- "new_posts": "See new posts",
- "published": "Published!",
- "Publishing": "Publishing post..."
+ "offline": "Yhteydetön",
+ "new_posts": "Uusia julkaisuja",
+ "published": "Julkaistu!",
+ "Publishing": "Julkaistaan julkaisua..."
}
},
"suggestion_account": {
- "title": "Find People to Follow",
- "follow_explain": "When you follow someone, you’ll see their posts in your home feed."
+ "title": "Löydä tilejä seurattavaksi",
+ "follow_explain": "Kun seuraat jotakuta, näet hänen julkaisunsa kotisyötteessäsi."
},
"compose": {
"title": {
- "new_post": "New Post",
- "new_reply": "New Reply"
+ "new_post": "Uusi julkaisu",
+ "new_reply": "Uusi vastaus"
},
"media_selection": {
- "camera": "Take Photo",
- "photo_library": "Photo Library",
- "browse": "Bläddra"
+ "camera": "Ota kuva",
+ "photo_library": "Kuvakirjasto",
+ "browse": "Selaa"
},
- "content_input_placeholder": "Type or paste what’s on your mind",
- "compose_action": "Publicera",
- "replying_to_user": "replying to %s",
+ "content_input_placeholder": "Kirjoita tai liitä, siitä mitä ajattelet",
+ "compose_action": "Julkaise",
+ "replying_to_user": "vastaamassa tilille %s",
"attachment": {
- "photo": "photo",
+ "photo": "kuva",
"video": "video",
"attachment_broken": "This %s is broken and can’t be\nuploaded to Mastodon.",
- "description_photo": "Describe the photo for the visually-impaired...",
- "description_video": "Describe the video for the visually-impaired..."
+ "description_photo": "Kuvaile kuva näkövammaisille...",
+ "description_video": "Kuvaile video näkövammaisille..."
},
"poll": {
- "duration_time": "Varaktighet: %s",
- "thirty_minutes": "30 minuter",
- "one_hour": "1 Hour",
- "six_hours": "6 Hours",
- "one_day": "1 Day",
- "three_days": "3 Days",
- "seven_days": "7 Days",
- "option_number": "Option %ld"
+ "duration_time": "Kesto: %s",
+ "thirty_minutes": "30 minuuttia",
+ "one_hour": "1 tunti",
+ "six_hours": "6 tuntia",
+ "one_day": "1 päivä",
+ "three_days": "3 päivää",
+ "seven_days": "7 päivää",
+ "option_number": "Vaihtoehto %ld"
},
"content_warning": {
- "placeholder": "Write an accurate warning here..."
+ "placeholder": "Kirjoita tarkka varoitus tähän..."
},
"visibility": {
- "public": "Public",
- "unlisted": "Unlisted",
- "private": "Followers only",
- "direct": "Only people I mention"
+ "public": "Julkinen",
+ "unlisted": "Listaamaton",
+ "private": "Vain seuraajat",
+ "direct": "Vain mainitsemani tilit"
},
"auto_complete": {
"space_to_add": "Space to add"
},
"accessibility": {
- "append_attachment": "Add Attachment",
- "append_poll": "Add Poll",
- "remove_poll": "Remove Poll",
- "custom_emoji_picker": "Custom Emoji Picker",
- "enable_content_warning": "Enable Content Warning",
- "disable_content_warning": "Disable Content Warning",
- "post_visibility_menu": "Post Visibility Menu"
+ "append_attachment": "Lisää liite",
+ "append_poll": "Lisää kysely",
+ "remove_poll": "Poista kysely",
+ "custom_emoji_picker": "Mukautettu emojivalitsin",
+ "enable_content_warning": "Ota sisältövaroitus käyttöön",
+ "disable_content_warning": "Poista sisältövaroitus käytöstä",
+ "post_visibility_menu": "Julkaisun näkyvyysvalikko"
},
"keyboard": {
- "discard_post": "Discard Post",
- "publish_post": "Publish Post",
- "toggle_poll": "Toggle Poll",
- "toggle_content_warning": "Toggle Content Warning",
- "append_attachment_entry": "Add Attachment - %s",
- "select_visibility_entry": "Select Visibility - %s"
+ "discard_post": "Hylkää julkaisu",
+ "publish_post": "Julkaise julkaisu",
+ "toggle_poll": "Vaihda kysely",
+ "toggle_content_warning": "Vaihda sisältövaroitus",
+ "append_attachment_entry": "Lisää liite - %s",
+ "select_visibility_entry": "Valitse näkyvyys - %s"
}
},
"profile": {
"dashboard": {
- "posts": "posts",
- "following": "following",
- "followers": "followers"
+ "posts": "julkaisut",
+ "following": "seurataan",
+ "followers": "seuraajat"
},
"fields": {
- "add_row": "Add Row",
+ "add_row": "Lisää rivi",
"placeholder": {
- "label": "Label",
- "content": "Content"
+ "label": "Nimi",
+ "content": "Sisältö"
}
},
"segmented_control": {
- "posts": "Posts",
- "replies": "Replies",
- "media": "Media"
+ "posts": "Julkaisut",
+ "replies": "Vastaukset",
+ "posts_and_replies": "Posts and Replies",
+ "media": "Media",
+ "about": "Om"
},
"relationship_action_alert": {
- "confirm_unmute_user": {
- "title": "Unmute Account",
- "message": "Confirm to unmute %s"
+ "confirm_mute_user": {
+ "title": "Mute Account",
+ "message": "Confirm to mute %s"
},
- "confirm_unblock_usre": {
+ "confirm_unmute_user": {
+ "title": "Poista tilin mykistys",
+ "message": "Vahvista, että haluat poistaa mykistyksen tililtä %s"
+ },
+ "confirm_block_user": {
+ "title": "Block Account",
+ "message": "Confirm to block %s"
+ },
+ "confirm_unblock_user": {
"title": "Unblock Account",
"message": "Confirm to unblock %s"
}
}
},
"follower": {
- "footer": "Followers from other servers are not displayed."
+ "footer": "Seuraajia muilta palvelimilta ei näytetä."
},
"following": {
- "footer": "Follows from other servers are not displayed."
+ "footer": "Seurauksia muilta palvelimilta ei näytetä."
},
"search": {
- "title": "Search",
+ "title": "Haku",
"search_bar": {
- "placeholder": "Search hashtags and users",
- "cancel": "Avbryt"
+ "placeholder": "Haku",
+ "cancel": "Kumoa"
},
"recommend": {
- "button_text": "See All",
+ "button_text": "Katso kaikki",
"hash_tag": {
- "title": "Trending on Mastodon",
- "description": "Hashtags that are getting quite a bit of attention",
- "people_talking": "%s people are talking"
+ "title": "Trendaavat Mastodonissa",
+ "description": "Hashtagit, jotka saavat melkoisesti huomiota",
+ "people_talking": "%s ihmistä puhuu"
},
"accounts": {
- "title": "Accounts you might like",
- "description": "You may like to follow these accounts",
- "follow": "Följ"
+ "title": "Saatat pitää näistä tileistä",
+ "description": "Haluta ehkä seurata näitä tilejä",
+ "follow": "Seuraa"
}
},
"searching": {
"segment": {
- "all": "All",
- "people": "People",
- "hashtags": "Hashtags",
- "posts": "Posts"
+ "all": "Kaikki",
+ "people": "Tilit",
+ "hashtags": "Hashtagit",
+ "posts": "Julkaisut"
},
"empty_state": {
- "no_results": "Inga resultat"
+ "no_results": "Ei hakutuloksia"
},
- "recent_search": "Recent searches",
- "clear": "Clear"
+ "recent_search": "Viimeaikaiset",
+ "clear": "Tyhjennä"
}
},
"favorite": {
- "title": "Your Favorites"
+ "title": "Omat suosikit"
},
"notification": {
"title": {
- "Everything": "Everything",
- "Mentions": "Mentions"
+ "Everything": "Kaikki",
+ "Mentions": "Maininnat"
+ },
+ "notification_description": {
+ "followed_you": "followed you",
+ "favorited_your_post": "favorited your post",
+ "reblogged_your_post": "reblogged your post",
+ "mentioned_you": "nämnde dig",
+ "request_to_follow_you": "request to follow you",
+ "poll_has_ended": "poll has ended"
},
- "user_followed_you": "%s följde dig",
- "user_favorited your post": "%s favorited your post",
- "user_reblogged_your_post": "%s reblogged your post",
- "user_mentioned_you": "%s nämnde dig",
- "user_requested_to_follow_you": "%s har begärt att följa dig",
- "user_your_poll_has_ended": "%s Omröstningen har avslutats",
"keyobard": {
- "show_everything": "Show Everything",
- "show_mentions": "Show Mentions"
+ "show_everything": "Näytä kaikki",
+ "show_mentions": "Näytä maininnat"
}
},
"thread": {
- "back_title": "Post",
- "title": "Post from %s"
+ "back_title": "Julkaisu",
+ "title": "Julkaisu tililtä %s"
},
"settings": {
- "title": "Inställningar",
+ "title": "Asetukset",
"section": {
"appearance": {
- "title": "Appearance",
- "automatic": "Automatic",
- "light": "Always Light",
- "dark": "Always Dark"
+ "title": "Ulkoasu",
+ "automatic": "Seuraa järjestelmää",
+ "light": "Vaalea",
+ "dark": "Tumma"
+ },
+ "look_and_feel": {
+ "title": "Look and Feel",
+ "use_system": "Use System",
+ "really_dark": "Really Dark",
+ "sorta_dark": "Sorta Dark",
+ "light": "Ljust"
},
"notifications": {
- "title": "Notifications",
+ "title": "Ilmoitukset",
"favorites": "Favorites my post",
- "follows": "Follows me",
- "boosts": "Reblogs my post",
- "mentions": "Mentions me",
+ "follows": "Seuraa minua",
+ "boosts": "Omien julkaisujen edelleen jaot",
+ "mentions": "Mainitsee minut",
"trigger": {
- "anyone": "anyone",
- "follower": "a follower",
- "follow": "anyone I follow",
- "noone": "no one",
- "title": "Notify me when"
+ "anyone": "kuka tahansa",
+ "follower": "seuraaja",
+ "follow": "kuka tahansa, jota seuraan",
+ "noone": "ei kukaan",
+ "title": "Ilmoita minulle, kun"
}
},
"preference": {
- "title": "Preferences",
- "true_black_dark_mode": "True black dark mode",
- "disable_avatar_animation": "Disable animated avatars",
- "disable_emoji_animation": "Disable animated emojis",
- "using_default_browser": "Use default browser to open links"
+ "title": "Lisäasetukset",
+ "true_black_dark_mode": "Todellinen mustan tumma tila",
+ "disable_avatar_animation": "Poista käytöstä animoidut avatarit",
+ "disable_emoji_animation": "Poista käytöstä animoidut emojit",
+ "using_default_browser": "Käytä oletusselainta linkkien avaamiseen"
},
"boring_zone": {
- "title": "The Boring Zone",
- "account_settings": "Account Settings",
- "terms": "Terms of Service",
- "privacy": "Integritetspolicy"
+ "title": "Tylsä alue",
+ "account_settings": "Tiliasetukset",
+ "terms": "Palveluehdot",
+ "privacy": "Tietosuojakäytäntö"
},
"spicy_zone": {
- "title": "The Spicy Zone",
- "clear": "Clear Media Cache",
- "signout": "Logga ut"
+ "title": "Varovainen alue",
+ "clear": "Tyhjennä median välimuisti",
+ "signout": "Kirjaudu ulos"
}
},
"footer": {
- "mastodon_description": "Mastodon is open source software. You can report issues on GitHub at %s (%s)"
+ "mastodon_description": "Mastodon on avoimen lähdekoodin ohjelmisto. Voit raportoida ongelmasta GitHubissa osoitteessa %s (%s)"
},
"keyboard": {
- "close_settings_window": "Close Settings Window"
+ "close_settings_window": "Sulje asetukset"
}
},
"report": {
- "title": "Rapportera %s",
- "step1": "Steg 1 av 2",
- "step2": "Steg 2 av 2",
- "content1": "Are there any other posts you’d like to add to the report?",
- "content2": "Is there anything the moderators should know about this report?",
- "send": "Send Report",
- "skip_to_send": "Send without comment",
- "text_placeholder": "Type or paste additional comments"
+ "title_report": "Report",
+ "title": "Ilmianna %s",
+ "step1": "Vaihe 1/2",
+ "step2": "Vaihe 2/2",
+ "content1": "Onko julkaisuja, joita haluaisit lisätä ilmiantoon?",
+ "content2": "Onko valvojien syytä tietää tästä ilmiannosta?",
+ "report_sent_title": "Thanks for reporting, we’ll look into this.",
+ "send": "Lähetä ilmianto",
+ "skip_to_send": "Lähetä ilman kommentteja",
+ "text_placeholder": "Kirjoita tai liitä lisäkommentteja",
+ "reported": "REPORTED"
},
"preview": {
"keyboard": {
- "close_preview": "Close Preview",
- "show_next": "Show Next",
- "show_previous": "Show Previous"
+ "close_preview": "Sulje esikatselu",
+ "show_next": "Näytä seuraava",
+ "show_previous": "Näytä edellinen"
}
},
"account_list": {
- "tab_bar_hint": "Current selected profile: %s. Double tap then hold to show account switcher",
- "dismiss_account_switcher": "Dismiss Account Switcher",
- "add_account": "Lägg till konto"
+ "tab_bar_hint": "Nykyinen valittu profiili: %s. Kaksoisnapauta ja pidä sitten painettuna näytääksesi tilin vaihtajan",
+ "dismiss_account_switcher": "Sulje tilin vaihtaja",
+ "add_account": "Lisää tili"
},
"wizard": {
- "new_in_mastodon": "New in Mastodon",
- "multiple_account_switch_intro_description": "Switch between multiple accounts by holding the profile button.",
- "accessibility_hint": "Double tap to dismiss this wizard"
+ "new_in_mastodon": "Uutta Mastodonissa",
+ "multiple_account_switch_intro_description": "Vaihda useiden tilien välillä pitämällä profiilipainiketta painettuna.",
+ "accessibility_hint": "Hylkää tämä ohjattu toiminto kaksoisnapauttamalla"
}
}
}
\ No newline at end of file
diff --git a/Localization/StringsConvertor/input/sv_FI/ios-infoPlist.json b/Localization/StringsConvertor/input/sv_FI/ios-infoPlist.json
index c6db73de0..eb389f3b3 100644
--- a/Localization/StringsConvertor/input/sv_FI/ios-infoPlist.json
+++ b/Localization/StringsConvertor/input/sv_FI/ios-infoPlist.json
@@ -1,6 +1,6 @@
{
- "NSCameraUsageDescription": "Used to take photo for post status",
- "NSPhotoLibraryAddUsageDescription": "Used to save photo into the Photo Library",
- "NewPostShortcutItemTitle": "New Post",
- "SearchShortcutItemTitle": "Search"
+ "NSCameraUsageDescription": "Käytetään kuvan ottamiseen julkaisua varten",
+ "NSPhotoLibraryAddUsageDescription": "Käytetään kuvan tallentamiseen kuvakirjastoon",
+ "NewPostShortcutItemTitle": "Uusi julkaisu",
+ "SearchShortcutItemTitle": "Haku"
}
diff --git a/Localization/StringsConvertor/input/sv_SE/Localizable.stringsdict b/Localization/StringsConvertor/input/sv_SE/Localizable.stringsdict
index 65316e3d0..f8da5e395 100644
--- a/Localization/StringsConvertor/input/sv_SE/Localizable.stringsdict
+++ b/Localization/StringsConvertor/input/sv_SE/Localizable.stringsdict
@@ -29,9 +29,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 character
+ 1 tecken
other
- %ld characters
+ %ld tecken
a11y.plural.count.input_limit_remains
@@ -45,9 +45,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 character
+ 1 tecken
other
- %ld characters
+ %ld tecken
plural.count.metric_formatted.post
@@ -125,9 +125,9 @@
NSStringFormatValueTypeKey
ld
one
- 1 vote
+ 1 röst
other
- %ld votes
+ %ld röster
plural.count.voter
@@ -381,7 +381,7 @@
NSStringFormatValueTypeKey
ld
one
- 1s ago
+ 1s sedan
other
%lds ago
diff --git a/Localization/StringsConvertor/input/sv_SE/app.json b/Localization/StringsConvertor/input/sv_SE/app.json
index 7acf48755..59ad0d6ed 100644
--- a/Localization/StringsConvertor/input/sv_SE/app.json
+++ b/Localization/StringsConvertor/input/sv_SE/app.json
@@ -45,11 +45,11 @@
"message": "Please enable the photo library access permission to save the photo."
},
"delete_post": {
- "title": "Are you sure you want to delete this post?",
- "delete": "Radera"
+ "title": "Delete Post",
+ "message": "Are you sure you want to delete this post?"
},
"clean_cache": {
- "title": "Clean Cache",
+ "title": "Rensa cache",
"message": "Successfully cleaned %s cache."
}
},
@@ -64,7 +64,7 @@
"edit": "Redigera",
"save": "Spara",
"ok": "OK",
- "done": "Done",
+ "done": "Klar",
"confirm": "Confirm",
"continue": "Fortsätt",
"compose": "Compose",
@@ -72,8 +72,8 @@
"discard": "Discard",
"try_again": "Försök igen",
"take_photo": "Take Photo",
- "save_photo": "Save Photo",
- "copy_photo": "Copy Photo",
+ "save_photo": "Spara foto",
+ "copy_photo": "Kopiera foto",
"sign_in": "Sign In",
"sign_up": "Sign Up",
"see_more": "See More",
@@ -82,6 +82,7 @@
"share_user": "Dela %s",
"share_post": "Share Post",
"open_in_safari": "Öppna i Safari",
+ "open_in_browser": "Open in Browser",
"find_people": "Find people to follow",
"manually_search": "Manually search instead",
"skip": "Skip",
@@ -139,7 +140,8 @@
"unreblog": "Undo reblog",
"favorite": "Favorite",
"unfavorite": "Unfavorite",
- "menu": "Meny"
+ "menu": "Meny",
+ "hide": "Dölj"
},
"tag": {
"url": "URL",
@@ -148,6 +150,12 @@
"hashtag": "Hashtag",
"email": "Email",
"emoji": "Emoji"
+ },
+ "visibility": {
+ "unlisted": "Everyone can see this post but not display in the public timeline.",
+ "private": "Only their followers can see this post.",
+ "private_from_me": "Only my followers can see this post.",
+ "direct": "Only mentioned user can see this post."
}
},
"friendship": {
@@ -171,7 +179,7 @@
"timeline": {
"filtered": "Filtered",
"timestamp": {
- "now": "Now"
+ "now": "Nu"
},
"loader": {
"load_missing_posts": "Load missing posts",
@@ -192,10 +200,14 @@
},
"scene": {
"welcome": {
- "slogan": "Social networking\nback in your hands."
+ "slogan": "Social networking\nback in your hands.",
+ "get_started": "Kom igång",
+ "log_in": "Logga in"
},
"server_picker": {
- "title": "Pick a server,\nany server.",
+ "title": "Mastodon is made of users in different communities.",
+ "subtitle": "Pick a community based on your interests, region, or a general purpose one.",
+ "subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": {
"category": {
"all": "All",
@@ -222,7 +234,7 @@
"category": "KATEGORI"
},
"input": {
- "placeholder": "Find a server or join your own..."
+ "placeholder": "Search communities"
},
"empty_state": {
"finding_servers": "Finding available servers...",
@@ -231,7 +243,7 @@
}
},
"register": {
- "title": "Tell us about you.",
+ "title": "Let’s get you set up on %s",
"input": {
"avatar": {
"delete": "Radera"
@@ -248,6 +260,12 @@
},
"password": {
"placeholder": "password",
+ "require": "Your password needs at least:",
+ "character_limit": "8 characters",
+ "accessibility": {
+ "checked": "checked",
+ "unchecked": "unchecked"
+ },
"hint": "Your password needs at least eight characters"
},
"invite": {
@@ -258,7 +276,7 @@
"item": {
"username": "Användarnamn",
"email": "Email",
- "password": "Password",
+ "password": "Lösenord",
"agreement": "Agreement",
"locale": "Locale",
"reason": "Reason"
@@ -285,7 +303,7 @@
},
"server_rules": {
"title": "Some ground rules.",
- "subtitle": "These rules are set by the admins of %s.",
+ "subtitle": "These are set and enforced by the %s moderators.",
"prompt": "By continuing, you’re subject to the terms of service and privacy policy for %s.",
"terms_of_service": "terms of service",
"privacy_policy": "integritetspolicy",
@@ -295,10 +313,10 @@
},
"confirm_email": {
"title": "One last thing.",
- "subtitle": "We just sent an email to %s,\ntap the link to confirm your account.",
+ "subtitle": "Tap the link we emailed to you to verify your account.",
"button": {
"open_email_app": "Open Email App",
- "dont_receive_email": "I never got an email"
+ "resend": "Resend"
},
"dont_receive_email": {
"title": "Check your email",
@@ -332,7 +350,7 @@
},
"media_selection": {
"camera": "Take Photo",
- "photo_library": "Photo Library",
+ "photo_library": "Fotobibliotek",
"browse": "Bläddra"
},
"content_input_placeholder": "Type or paste what’s on your mind",
@@ -401,14 +419,24 @@
"segmented_control": {
"posts": "Posts",
"replies": "Replies",
- "media": "Media"
+ "posts_and_replies": "Posts and Replies",
+ "media": "Media",
+ "about": "Om"
},
"relationship_action_alert": {
+ "confirm_mute_user": {
+ "title": "Mute Account",
+ "message": "Confirm to mute %s"
+ },
"confirm_unmute_user": {
"title": "Unmute Account",
"message": "Confirm to unmute %s"
},
- "confirm_unblock_usre": {
+ "confirm_block_user": {
+ "title": "Block Account",
+ "message": "Confirm to block %s"
+ },
+ "confirm_unblock_user": {
"title": "Unblock Account",
"message": "Confirm to unblock %s"
}
@@ -450,7 +478,7 @@
"no_results": "Inga resultat"
},
"recent_search": "Recent searches",
- "clear": "Clear"
+ "clear": "Rensa"
}
},
"favorite": {
@@ -461,12 +489,14 @@
"Everything": "Everything",
"Mentions": "Mentions"
},
- "user_followed_you": "%s följde dig",
- "user_favorited your post": "%s favorited your post",
- "user_reblogged_your_post": "%s reblogged your post",
- "user_mentioned_you": "%s nämnde dig",
- "user_requested_to_follow_you": "%s har begärt att följa dig",
- "user_your_poll_has_ended": "%s Omröstningen har avslutats",
+ "notification_description": {
+ "followed_you": "followed you",
+ "favorited_your_post": "favorited your post",
+ "reblogged_your_post": "reblogged your post",
+ "mentioned_you": "nämnde dig",
+ "request_to_follow_you": "request to follow you",
+ "poll_has_ended": "poll has ended"
+ },
"keyobard": {
"show_everything": "Show Everything",
"show_mentions": "Show Mentions"
@@ -485,6 +515,13 @@
"light": "Always Light",
"dark": "Always Dark"
},
+ "look_and_feel": {
+ "title": "Look and Feel",
+ "use_system": "Use System",
+ "really_dark": "Really Dark",
+ "sorta_dark": "Sorta Dark",
+ "light": "Ljust"
+ },
"notifications": {
"title": "Notifications",
"favorites": "Favorites my post",
@@ -502,14 +539,14 @@
"preference": {
"title": "Preferences",
"true_black_dark_mode": "True black dark mode",
- "disable_avatar_animation": "Disable animated avatars",
- "disable_emoji_animation": "Disable animated emojis",
+ "disable_avatar_animation": "Inaktivera animerade avatarer",
+ "disable_emoji_animation": "Inaktivera animerade emojis",
"using_default_browser": "Use default browser to open links"
},
"boring_zone": {
"title": "The Boring Zone",
- "account_settings": "Account Settings",
- "terms": "Terms of Service",
+ "account_settings": "Kontoinställningar",
+ "terms": "Användarvillkor",
"privacy": "Integritetspolicy"
},
"spicy_zone": {
@@ -526,14 +563,17 @@
}
},
"report": {
+ "title_report": "Report",
"title": "Rapportera %s",
"step1": "Steg 1 av 2",
"step2": "Steg 2 av 2",
"content1": "Are there any other posts you’d like to add to the report?",
"content2": "Is there anything the moderators should know about this report?",
- "send": "Send Report",
+ "report_sent_title": "Thanks for reporting, we’ll look into this.",
+ "send": "Skicka rapport",
"skip_to_send": "Send without comment",
- "text_placeholder": "Type or paste additional comments"
+ "text_placeholder": "Type or paste additional comments",
+ "reported": "REPORTED"
},
"preview": {
"keyboard": {
diff --git a/Localization/StringsConvertor/input/th_TH/app.json b/Localization/StringsConvertor/input/th_TH/app.json
index 7852b5d01..001075b1b 100644
--- a/Localization/StringsConvertor/input/th_TH/app.json
+++ b/Localization/StringsConvertor/input/th_TH/app.json
@@ -45,8 +45,8 @@
"message": "โปรดเปิดใช้งานสิทธิอนุญาตการเข้าถึงคลังรูปภาพเพื่อบันทึกรูปภาพ"
},
"delete_post": {
- "title": "คุณแน่ใจหรือไม่ว่าต้องการลบโพสต์นี้?",
- "delete": "ลบ"
+ "title": "ลบโพสต์",
+ "message": "คุณแน่ใจหรือไม่ว่าต้องการลบโพสต์นี้?"
},
"clean_cache": {
"title": "ล้างแคช",
@@ -82,6 +82,7 @@
"share_user": "แบ่งปัน %s",
"share_post": "แบ่งปันโพสต์",
"open_in_safari": "เปิดใน Safari",
+ "open_in_browser": "เปิดในเบราว์เซอร์",
"find_people": "ค้นหาผู้คนที่จะติดตาม",
"manually_search": "ค้นหาด้วยตนเองแทน",
"skip": "ข้าม",
@@ -139,7 +140,8 @@
"unreblog": "เลิกทำการดัน",
"favorite": "ชื่นชอบ",
"unfavorite": "เลิกชื่นชอบ",
- "menu": "เมนู"
+ "menu": "เมนู",
+ "hide": "ซ่อน"
},
"tag": {
"url": "URL",
@@ -148,6 +150,12 @@
"hashtag": "แฮชแท็ก",
"email": "อีเมล",
"emoji": "อีโมจิ"
+ },
+ "visibility": {
+ "unlisted": "ทุกคนสามารถเห็นโพสต์นี้แต่ไม่แสดงในเส้นเวลาสาธารณะ",
+ "private": "เฉพาะผู้ติดตามของเขาเท่านั้นที่สามารถเห็นโพสต์นี้",
+ "private_from_me": "เฉพาะผู้ติดตามของฉันเท่านั้นที่สามารถเห็นโพสต์นี้",
+ "direct": "เฉพาะผู้ใช้ที่กล่าวถึงเท่านั้นที่สามารถเห็นโพสต์นี้"
}
},
"friendship": {
@@ -180,10 +188,10 @@
},
"header": {
"no_status_found": "ไม่พบโพสต์",
- "blocking_warning": "คุณไม่สามารถดูโปรไฟล์ของผู้ใช้นี้\nจนกว่าคุณจะเลิกปิดกั้นผู้ใช้นี้\nผู้ใช้นี้เห็นโปรไฟล์ของคุณเหมือนกับที่คุณเห็น",
- "user_blocking_warning": "คุณไม่สามารถดูโปรไฟล์ของ %s\nจนกว่าคุณจะเลิกปิดกั้นผู้ใช้นี้\nผู้ใช้นี้เห็นโปรไฟล์ของคุณเหมือนกับที่คุณเห็น",
- "blocked_warning": "คุณไม่สามารถดูโปรไฟล์ของผู้ใช้นี้\nจนกว่าผู้ใช้นี้จะเลิกปิดกั้นคุณ",
- "user_blocked_warning": "คุณไม่สามารถดูโปรไฟล์ของ %s\nจนกว่าผู้ใช้นี้จะเลิกปิดกั้นคุณ",
+ "blocking_warning": "คุณไม่สามารถดูโปรไฟล์ของผู้ใช้นี้\nจนกว่าคุณจะเลิกปิดกั้นเขา\nโปรไฟล์ของคุณมีลักษณะเช่นนี้สำหรับเขา",
+ "user_blocking_warning": "คุณไม่สามารถดูโปรไฟล์ของ %s\nจนกว่าคุณจะเลิกปิดกั้นเขา\nโปรไฟล์ของคุณมีลักษณะเช่นนี้สำหรับเขา",
+ "blocked_warning": "คุณไม่สามารถดูโปรไฟล์ของผู้ใช้นี้\nจนกว่าเขาจะเลิกปิดกั้นคุณ",
+ "user_blocked_warning": "คุณไม่สามารถดูโปรไฟล์ของ %s\nจนกว่าเขาจะเลิกปิดกั้นคุณ",
"suspended_warning": "ผู้ใช้นี้ถูกระงับการใช้งาน",
"user_suspended_warning": "บัญชีของ %s ถูกระงับการใช้งาน"
}
@@ -192,10 +200,14 @@
},
"scene": {
"welcome": {
- "slogan": "ให้เครือข่ายสังคม\nกลับมาอยู่ในมือของคุณ"
+ "slogan": "ให้เครือข่ายสังคม\nกลับมาอยู่ในมือของคุณ",
+ "get_started": "เริ่มต้นใช้งาน",
+ "log_in": "เข้าสู่ระบบ"
},
"server_picker": {
- "title": "เลือกเซิร์ฟเวอร์\nอันไหนก็ได้",
+ "title": "Mastodon ประกอบด้วยผู้ใช้ในชุมชนต่าง ๆ",
+ "subtitle": "เลือกชุมชนตามความสนใจ, ภูมิภาค หรือวัตถุประสงค์ทั่วไปของคุณ",
+ "subtitle_extend": "เลือกชุมชนตามความสนใจ, ภูมิภาค หรือวัตถุประสงค์ทั่วไปของคุณ แต่ละชุมชนดำเนินการโดยองค์กรหรือบุคคลที่เป็นอิสระโดยสิ้นเชิง",
"button": {
"category": {
"all": "ทั้งหมด",
@@ -222,7 +234,7 @@
"category": "หมวดหมู่"
},
"input": {
- "placeholder": "ค้นหาเซิร์ฟเวอร์หรือเข้าร่วมของคุณเอง..."
+ "placeholder": "ค้นหาชุมชน"
},
"empty_state": {
"finding_servers": "กำลังค้นหาเซิร์ฟเวอร์ที่พร้อมใช้งาน...",
@@ -231,7 +243,7 @@
}
},
"register": {
- "title": "บอกเราเกี่ยวกับคุณ",
+ "title": "มาตั้งค่าของคุณใน %s กันเลย",
"input": {
"avatar": {
"delete": "ลบ"
@@ -248,6 +260,12 @@
},
"password": {
"placeholder": "รหัสผ่าน",
+ "require": "รหัสผ่านของคุณต้องมีอย่างน้อย:",
+ "character_limit": "8 ตัวอักษร",
+ "accessibility": {
+ "checked": "กาเครื่องหมายแล้ว",
+ "unchecked": "ไม่ได้กาเครื่องหมาย"
+ },
"hint": "รหัสผ่านของคุณต้องมีอย่างน้อยแปดตัวอักษร"
},
"invite": {
@@ -285,7 +303,7 @@
},
"server_rules": {
"title": "กฎพื้นฐานบางประการ",
- "subtitle": "กฎเหล่านี้ถูกตั้งโดยผู้ดูแลของ %s",
+ "subtitle": "มีการตั้งและบังคับใช้กฎเหล่านี้โดยผู้ควบคุมของ %s",
"prompt": "เมื่อคุณดำเนินการต่อ คุณอยู่ภายใต้เงื่อนไขการให้บริการและนโยบายความเป็นส่วนตัวสำหรับ %s",
"terms_of_service": "เงื่อนไขการให้บริการ",
"privacy_policy": "นโยบายความเป็นส่วนตัว",
@@ -295,10 +313,10 @@
},
"confirm_email": {
"title": "หนึ่งสิ่งสุดท้าย",
- "subtitle": "เราเพิ่งส่งอีเมลไปยัง %s\nแตะที่ลิงก์เพื่อยืนยันบัญชีของคุณ",
+ "subtitle": "แตะลิงก์ที่เราส่งอีเมลถึงคุณเพื่อยืนยันบัญชีของคุณ",
"button": {
"open_email_app": "เปิดแอปอีเมล",
- "dont_receive_email": "ฉันไม่เคยได้รับอีเมล"
+ "resend": "ส่งใหม่"
},
"dont_receive_email": {
"title": "ตรวจสอบอีเมลของคุณ",
@@ -401,14 +419,24 @@
"segmented_control": {
"posts": "โพสต์",
"replies": "การตอบกลับ",
- "media": "สื่อ"
+ "posts_and_replies": "โพสต์และการตอบกลับ",
+ "media": "สื่อ",
+ "about": "เกี่ยวกับ"
},
"relationship_action_alert": {
+ "confirm_mute_user": {
+ "title": "ซ่อนบัญชี",
+ "message": "ยืนยันเพื่อซ่อน %s"
+ },
"confirm_unmute_user": {
"title": "เลิกซ่อนบัญชี",
"message": "ยืนยันเพื่อเลิกซ่อน %s"
},
- "confirm_unblock_usre": {
+ "confirm_block_user": {
+ "title": "ปิดกั้นบัญชี",
+ "message": "ยืนยันเพื่อปิดกั้น %s"
+ },
+ "confirm_unblock_user": {
"title": "เลิกปิดกั้นบัญชี",
"message": "ยืนยันเพื่อเลิกปิดกั้น %s"
}
@@ -461,12 +489,14 @@
"Everything": "ทุกอย่าง",
"Mentions": "การกล่าวถึง"
},
- "user_followed_you": "%s ได้ติดตามคุณ",
- "user_favorited your post": "%s ได้ชื่นชอบโพสต์ของคุณ",
- "user_reblogged_your_post": "%s ได้ดันโพสต์ของคุณ",
- "user_mentioned_you": "%s ได้กล่าวถึงคุณ",
- "user_requested_to_follow_you": "%s ได้ขอติดตามคุณ",
- "user_your_poll_has_ended": "%s โพลของคุณได้สิ้นสุดแล้ว",
+ "notification_description": {
+ "followed_you": "ได้ติดตามคุณ",
+ "favorited_your_post": "ได้ชื่นชอบโพสต์ของคุณ",
+ "reblogged_your_post": "ได้ดันโพสต์ของคุณ",
+ "mentioned_you": "ได้กล่าวถึงคุณ",
+ "request_to_follow_you": "ขอติดตามคุณ",
+ "poll_has_ended": "การสำรวจความคิดเห็นได้สิ้นสุดแล้ว"
+ },
"keyobard": {
"show_everything": "แสดงทุกอย่าง",
"show_mentions": "แสดงการกล่าวถึง"
@@ -485,6 +515,13 @@
"light": "สว่างเสมอ",
"dark": "มืดเสมอ"
},
+ "look_and_feel": {
+ "title": "ลักษณะที่แสดง",
+ "use_system": "ใช้ของระบบ",
+ "really_dark": "มืดมาก",
+ "sorta_dark": "ค่อนข้างมืด",
+ "light": "สว่าง"
+ },
"notifications": {
"title": "การแจ้งเตือน",
"favorites": "ชื่นชอบโพสต์ของฉัน",
@@ -526,14 +563,17 @@
}
},
"report": {
+ "title_report": "รายงาน",
"title": "รายงาน %s",
"step1": "ขั้นตอนที่ 1 จาก 2",
"step2": "ขั้นตอนที่ 2 จาก 2",
"content1": "มีโพสต์อื่นใดที่คุณต้องการเพิ่มไปยังรายงานหรือไม่?",
"content2": "มีสิ่งใดที่ผู้ควบคุมควรทราบเกี่ยวกับรายงานนี้หรือไม่?",
+ "report_sent_title": "ขอบคุณสำหรับการรายงาน เราจะตรวจสอบสิ่งนี้",
"send": "ส่งรายงาน",
"skip_to_send": "ส่งโดยไม่มีความคิดเห็น",
- "text_placeholder": "พิมพ์หรือวางความคิดเห็นเพิ่มเติม"
+ "text_placeholder": "พิมพ์หรือวางความคิดเห็นเพิ่มเติม",
+ "reported": "รายงานแล้ว"
},
"preview": {
"keyboard": {
diff --git a/Localization/StringsConvertor/input/zh_CN/app.json b/Localization/StringsConvertor/input/zh_CN/app.json
index 905afdd86..74ea0529a 100644
--- a/Localization/StringsConvertor/input/zh_CN/app.json
+++ b/Localization/StringsConvertor/input/zh_CN/app.json
@@ -46,7 +46,7 @@
},
"delete_post": {
"title": "确定要删除这条消息吗?",
- "delete": "删除"
+ "message": "确定要删除这个帖子吗?"
},
"clean_cache": {
"title": "清除缓存",
@@ -82,6 +82,7 @@
"share_user": "分享 %s",
"share_post": "分享帖子",
"open_in_safari": "在 Safari 中打开",
+ "open_in_browser": "在浏览器中打开",
"find_people": "查看推荐关注的用户",
"manually_search": "手动搜索用户",
"skip": "跳过",
@@ -139,7 +140,8 @@
"unreblog": "取消转发",
"favorite": "喜欢",
"unfavorite": "取消喜欢",
- "menu": "菜单"
+ "menu": "菜单",
+ "hide": "隐藏"
},
"tag": {
"url": "URL",
@@ -148,6 +150,12 @@
"hashtag": "标签",
"email": "电子邮箱",
"emoji": "表情"
+ },
+ "visibility": {
+ "unlisted": "任何人都可以看到这个帖子,但不会在公开的时间线中显示。",
+ "private": "只有作者的关注者才能看到此帖子。",
+ "private_from_me": "只有我的关注者才能看到此帖子。",
+ "direct": "只有提到的用户才能看到此帖子。"
}
},
"friendship": {
@@ -192,10 +200,14 @@
},
"scene": {
"welcome": {
- "slogan": "社交网络\n回到你的手中。"
+ "slogan": "社交网络\n回到你的手中。",
+ "get_started": "开始使用",
+ "log_in": "登录"
},
"server_picker": {
"title": "挑选一个服务器,\n任意服务器。",
+ "subtitle": "根据你的兴趣、区域或一般目的选择一个社区。",
+ "subtitle_extend": "根据你的兴趣、区域或一般目的选择一个社区。每个社区都由完全独立的组织或个人管理。",
"button": {
"category": {
"all": "全部",
@@ -248,6 +260,12 @@
},
"password": {
"placeholder": "密码",
+ "require": "您的密码至少需要:",
+ "character_limit": "8 个字符",
+ "accessibility": {
+ "checked": "已选中",
+ "unchecked": "未选中"
+ },
"hint": "密码长度至少为 8 个字符"
},
"invite": {
@@ -298,7 +316,7 @@
"subtitle": "我们刚刚向 %s 发送了一封电子邮件,\n点击链接确认你的帐户。",
"button": {
"open_email_app": "打开电子邮件应用",
- "dont_receive_email": "我还没有收到电子邮件"
+ "resend": "重新发送"
},
"dont_receive_email": {
"title": "请检查你的邮箱。",
@@ -401,14 +419,24 @@
"segmented_control": {
"posts": "帖子",
"replies": "回复",
- "media": "媒体"
+ "posts_and_replies": "帖子与回复",
+ "media": "媒体",
+ "about": "关于"
},
"relationship_action_alert": {
+ "confirm_mute_user": {
+ "title": "静音账户",
+ "message": "确认静音 %s"
+ },
"confirm_unmute_user": {
"title": "取消静音账户",
"message": "确认取消静音 %s"
},
- "confirm_unblock_usre": {
+ "confirm_block_user": {
+ "title": "屏蔽帐户",
+ "message": "确认屏蔽 %s"
+ },
+ "confirm_unblock_user": {
"title": "解除屏蔽帐户",
"message": "确认取消屏蔽 %s"
}
@@ -461,12 +489,14 @@
"Everything": "全部",
"Mentions": "提及"
},
- "user_followed_you": "%s 关注了你",
- "user_favorited your post": "%s 喜欢了你的帖子",
- "user_reblogged_your_post": "%s 转发了你的帖子",
- "user_mentioned_you": "%s 提及了你",
- "user_requested_to_follow_you": "%s 向你发送了关注请求",
- "user_your_poll_has_ended": "%s 你的投票已经结束",
+ "notification_description": {
+ "followed_you": "关注了你",
+ "favorited_your_post": "喜欢了你的帖子",
+ "reblogged_your_post": "转发了你的帖子",
+ "mentioned_you": "提及了你",
+ "request_to_follow_you": "关注请求",
+ "poll_has_ended": "投票已结束"
+ },
"keyobard": {
"show_everything": "显示全部",
"show_mentions": "显示提及"
@@ -485,6 +515,13 @@
"light": "浅色",
"dark": "深色"
},
+ "look_and_feel": {
+ "title": "外观和风格",
+ "use_system": "跟随系统",
+ "really_dark": "暗色",
+ "sorta_dark": "深色",
+ "light": "浅色"
+ },
"notifications": {
"title": "通知",
"favorites": "喜欢我的帖子",
@@ -526,14 +563,17 @@
}
},
"report": {
+ "title_report": "举报",
"title": "举报 %s",
"step1": "步骤 1 / 2",
"step2": "步骤 2 / 2",
"content1": "是否有帖子需要举报?",
"content2": "是否有关于此举报的详细描述信息?",
+ "report_sent_title": "感谢提交举报,我们将会进行处理。",
"send": "发送举报",
"skip_to_send": "直接发送",
- "text_placeholder": "输入或粘贴额外的注释"
+ "text_placeholder": "输入或粘贴额外的注释",
+ "reported": "已报告"
},
"preview": {
"keyboard": {
diff --git a/Localization/StringsConvertor/input/zh_TW/app.json b/Localization/StringsConvertor/input/zh_TW/app.json
index 5c01ae7e0..be2442e4b 100644
--- a/Localization/StringsConvertor/input/zh_TW/app.json
+++ b/Localization/StringsConvertor/input/zh_TW/app.json
@@ -2,21 +2,21 @@
"common": {
"alerts": {
"common": {
- "please_try_again": "Please try again.",
- "please_try_again_later": "Please try again later."
+ "please_try_again": "請再試一次。",
+ "please_try_again_later": "請稍候再試。"
},
"sign_up_failure": {
- "title": "Sign Up Failure"
+ "title": "註冊失敗"
},
"server_error": {
- "title": "Server Error"
+ "title": "伺服器錯誤"
},
"vote_failure": {
"title": "Vote Failure",
"poll_ended": "The poll has ended"
},
"discard_post_content": {
- "title": "Discard Draft",
+ "title": "捨棄草稿",
"message": "Confirm to discard composed post content."
},
"publish_post_failure": {
@@ -32,9 +32,9 @@
"message": "Cannot edit profile. Please try again."
},
"sign_out": {
- "title": "Sign Out",
+ "title": "登出",
"message": "Are you sure you want to sign out?",
- "confirm": "Sign Out"
+ "confirm": "登出"
},
"block_domain": {
"title": "Are you really, really sure you want to block the entire %s? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain and any of your followers from that domain will be removed.",
@@ -45,8 +45,8 @@
"message": "Please enable the photo library access permission to save the photo."
},
"delete_post": {
- "title": "Are you sure you want to delete this post?",
- "delete": "Delete"
+ "title": "Delete Post",
+ "message": "Are you sure you want to delete this post?"
},
"clean_cache": {
"title": "Clean Cache",
@@ -61,47 +61,48 @@
"open": "Open",
"add": "Add",
"remove": "Remove",
- "edit": "Edit",
+ "edit": "編輯",
"save": "Save",
"ok": "OK",
- "done": "Done",
+ "done": "完成",
"confirm": "Confirm",
- "continue": "Continue",
+ "continue": "繼續",
"compose": "Compose",
- "cancel": "Cancel",
+ "cancel": "取消",
"discard": "Discard",
"try_again": "Try Again",
"take_photo": "Take Photo",
- "save_photo": "Save Photo",
+ "save_photo": "儲存照片",
"copy_photo": "Copy Photo",
- "sign_in": "Sign In",
- "sign_up": "Sign Up",
+ "sign_in": "登入",
+ "sign_up": "註冊",
"see_more": "See More",
"preview": "Preview",
- "share": "Share",
+ "share": "分享",
"share_user": "Share %s",
"share_post": "Share Post",
"open_in_safari": "Open in Safari",
+ "open_in_browser": "Open in Browser",
"find_people": "Find people to follow",
"manually_search": "Manually search instead",
- "skip": "Skip",
- "reply": "Reply",
+ "skip": "跳過",
+ "reply": "回覆",
"report_user": "Report %s",
- "block_domain": "Block %s",
- "unblock_domain": "Unblock %s",
- "settings": "Settings",
- "delete": "Delete"
+ "block_domain": "封鎖 %s",
+ "unblock_domain": "解除封鎖 %s",
+ "settings": "設定",
+ "delete": "刪除"
},
"tabs": {
- "home": "Home",
- "search": "Search",
- "notification": "Notification",
- "profile": "Profile"
+ "home": "首頁",
+ "search": "搜尋",
+ "notification": "通知",
+ "profile": "個人檔案"
},
"keyboard": {
"common": {
- "switch_to_tab": "Switch to %s",
- "compose_new_post": "Compose New Post",
+ "switch_to_tab": "切換至 %s",
+ "compose_new_post": "發佈貼文",
"show_favorites": "Show Favorites",
"open_settings": "Open Settings"
},
@@ -130,37 +131,44 @@
"content_warning": "Content Warning",
"media_content_warning": "Tap anywhere to reveal",
"poll": {
- "vote": "Vote",
+ "vote": "投票",
"closed": "Closed"
},
"actions": {
- "reply": "Reply",
+ "reply": "回覆",
"reblog": "Reblog",
"unreblog": "Undo reblog",
"favorite": "Favorite",
"unfavorite": "Unfavorite",
- "menu": "Menu"
+ "menu": "Menu",
+ "hide": "Hide"
},
"tag": {
"url": "URL",
"mention": "Mention",
"link": "Link",
"hashtag": "Hashtag",
- "email": "Email",
+ "email": "電子郵件",
"emoji": "Emoji"
+ },
+ "visibility": {
+ "unlisted": "Everyone can see this post but not display in the public timeline.",
+ "private": "Only their followers can see this post.",
+ "private_from_me": "Only my followers can see this post.",
+ "direct": "Only mentioned user can see this post."
}
},
"friendship": {
- "follow": "Follow",
+ "follow": "追蹤",
"following": "Following",
"request": "Request",
"pending": "Pending",
"block": "Block",
- "block_user": "Block %s",
- "block_domain": "Block %s",
- "unblock": "Unblock",
- "unblock_user": "Unblock %s",
- "blocked": "Blocked",
+ "block_user": "封鎖 %s",
+ "block_domain": "封鎖 %s",
+ "unblock": "解除封鎖",
+ "unblock_user": "解除封鎖 %s",
+ "blocked": "已封鎖",
"mute": "Mute",
"mute_user": "Mute %s",
"unmute": "Unmute",
@@ -192,10 +200,14 @@
},
"scene": {
"welcome": {
- "slogan": "Social networking\nback in your hands."
+ "slogan": "Social networking\nback in your hands.",
+ "get_started": "Get Started",
+ "log_in": "登入"
},
"server_picker": {
- "title": "Pick a server,\nany server.",
+ "title": "Mastodon is made of users in different communities.",
+ "subtitle": "Pick a community based on your interests, region, or a general purpose one.",
+ "subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": {
"category": {
"all": "All",
@@ -222,7 +234,7 @@
"category": "CATEGORY"
},
"input": {
- "placeholder": "Find a server or join your own..."
+ "placeholder": "Search communities"
},
"empty_state": {
"finding_servers": "Finding available servers...",
@@ -231,10 +243,10 @@
}
},
"register": {
- "title": "Tell us about you.",
+ "title": "Let’s get you set up on %s",
"input": {
"avatar": {
- "delete": "Delete"
+ "delete": "刪除"
},
"username": {
"placeholder": "username",
@@ -247,7 +259,13 @@
"placeholder": "email"
},
"password": {
- "placeholder": "password",
+ "placeholder": "密碼",
+ "require": "Your password needs at least:",
+ "character_limit": "8 個字元",
+ "accessibility": {
+ "checked": "checked",
+ "unchecked": "unchecked"
+ },
"hint": "Your password needs at least eight characters"
},
"invite": {
@@ -257,8 +275,8 @@
"error": {
"item": {
"username": "Username",
- "email": "Email",
- "password": "Password",
+ "email": "電子郵件",
+ "password": "密碼",
"agreement": "Agreement",
"locale": "Locale",
"reason": "Reason"
@@ -285,7 +303,7 @@
},
"server_rules": {
"title": "Some ground rules.",
- "subtitle": "These rules are set by the admins of %s.",
+ "subtitle": "These are set and enforced by the %s moderators.",
"prompt": "By continuing, you’re subject to the terms of service and privacy policy for %s.",
"terms_of_service": "terms of service",
"privacy_policy": "privacy policy",
@@ -295,10 +313,10 @@
},
"confirm_email": {
"title": "One last thing.",
- "subtitle": "We just sent an email to %s,\ntap the link to confirm your account.",
+ "subtitle": "Tap the link we emailed to you to verify your account.",
"button": {
"open_email_app": "Open Email App",
- "dont_receive_email": "I never got an email"
+ "resend": "Resend"
},
"dont_receive_email": {
"title": "Check your email",
@@ -340,14 +358,14 @@
"replying_to_user": "replying to %s",
"attachment": {
"photo": "photo",
- "video": "video",
+ "video": "影片",
"attachment_broken": "This %s is broken and can’t be\nuploaded to Mastodon.",
"description_photo": "Describe the photo for the visually-impaired...",
"description_video": "Describe the video for the visually-impaired..."
},
"poll": {
"duration_time": "Duration: %s",
- "thirty_minutes": "30 minutes",
+ "thirty_minutes": "30 分鐘",
"one_hour": "1 Hour",
"six_hours": "6 Hours",
"one_day": "1 Day",
@@ -399,16 +417,26 @@
}
},
"segmented_control": {
- "posts": "Posts",
+ "posts": "貼文",
"replies": "Replies",
- "media": "Media"
+ "posts_and_replies": "Posts and Replies",
+ "media": "Media",
+ "about": "About"
},
"relationship_action_alert": {
+ "confirm_mute_user": {
+ "title": "Mute Account",
+ "message": "Confirm to mute %s"
+ },
"confirm_unmute_user": {
"title": "Unmute Account",
"message": "Confirm to unmute %s"
},
- "confirm_unblock_usre": {
+ "confirm_block_user": {
+ "title": "Block Account",
+ "message": "Confirm to block %s"
+ },
+ "confirm_unblock_user": {
"title": "Unblock Account",
"message": "Confirm to unblock %s"
}
@@ -421,10 +449,10 @@
"footer": "Follows from other servers are not displayed."
},
"search": {
- "title": "Search",
+ "title": "搜尋",
"search_bar": {
"placeholder": "Search hashtags and users",
- "cancel": "Cancel"
+ "cancel": "取消"
},
"recommend": {
"button_text": "See All",
@@ -436,7 +464,7 @@
"accounts": {
"title": "Accounts you might like",
"description": "You may like to follow these accounts",
- "follow": "Follow"
+ "follow": "追蹤"
}
},
"searching": {
@@ -444,7 +472,7 @@
"all": "All",
"people": "People",
"hashtags": "Hashtags",
- "posts": "Posts"
+ "posts": "貼文"
},
"empty_state": {
"no_results": "No results"
@@ -461,12 +489,14 @@
"Everything": "Everything",
"Mentions": "Mentions"
},
- "user_followed_you": "%s followed you",
- "user_favorited your post": "%s favorited your post",
- "user_reblogged_your_post": "%s reblogged your post",
- "user_mentioned_you": "%s mentioned you",
- "user_requested_to_follow_you": "%s requested to follow you",
- "user_your_poll_has_ended": "%s Your poll has ended",
+ "notification_description": {
+ "followed_you": "followed you",
+ "favorited_your_post": "favorited your post",
+ "reblogged_your_post": "reblogged your post",
+ "mentioned_you": "mentioned you",
+ "request_to_follow_you": "request to follow you",
+ "poll_has_ended": "poll has ended"
+ },
"keyobard": {
"show_everything": "Show Everything",
"show_mentions": "Show Mentions"
@@ -477,14 +507,21 @@
"title": "Post from %s"
},
"settings": {
- "title": "Settings",
+ "title": "設定",
"section": {
"appearance": {
"title": "Appearance",
- "automatic": "Automatic",
+ "automatic": "自動",
"light": "Always Light",
"dark": "Always Dark"
},
+ "look_and_feel": {
+ "title": "Look and Feel",
+ "use_system": "Use System",
+ "really_dark": "Really Dark",
+ "sorta_dark": "Sorta Dark",
+ "light": "Light"
+ },
"notifications": {
"title": "Notifications",
"favorites": "Favorites my post",
@@ -515,7 +552,7 @@
"spicy_zone": {
"title": "The Spicy Zone",
"clear": "Clear Media Cache",
- "signout": "Sign Out"
+ "signout": "登出"
}
},
"footer": {
@@ -526,14 +563,17 @@
}
},
"report": {
+ "title_report": "Report",
"title": "Report %s",
"step1": "Step 1 of 2",
"step2": "Step 2 of 2",
"content1": "Are there any other posts you’d like to add to the report?",
"content2": "Is there anything the moderators should know about this report?",
+ "report_sent_title": "Thanks for reporting, we’ll look into this.",
"send": "Send Report",
"skip_to_send": "Send without comment",
- "text_placeholder": "Type or paste additional comments"
+ "text_placeholder": "Type or paste additional comments",
+ "reported": "REPORTED"
},
"preview": {
"keyboard": {
diff --git a/Localization/app.json b/Localization/app.json
index 6d3b2fcc2..f0dc0ebf1 100644
--- a/Localization/app.json
+++ b/Localization/app.json
@@ -45,8 +45,8 @@
"message": "Please enable the photo library access permission to save the photo."
},
"delete_post": {
- "title": "Are you sure you want to delete this post?",
- "delete": "Delete"
+ "title": "Delete Post",
+ "message": "Are you sure you want to delete this post?"
},
"clean_cache": {
"title": "Clean Cache",
@@ -130,6 +130,7 @@
"show_user_profile": "Show user profile",
"content_warning": "Content Warning",
"media_content_warning": "Tap anywhere to reveal",
+ "tap_to_reveal": "Tap to reveal",
"poll": {
"vote": "Vote",
"closed": "Closed"
@@ -140,7 +141,12 @@
"unreblog": "Undo reblog",
"favorite": "Favorite",
"unfavorite": "Unfavorite",
- "menu": "Menu"
+ "menu": "Menu",
+ "hide": "Hide",
+ "show_image": "Show image",
+ "show_gif": "Show GIF",
+ "show_video_player": "Show video player",
+ "tap_then_hold_to_show_menu": "Tap then hold to show menu"
},
"tag": {
"url": "URL",
@@ -149,6 +155,12 @@
"hashtag": "Hashtag",
"email": "Email",
"emoji": "Emoji"
+ },
+ "visibility": {
+ "unlisted": "Everyone can see this post but not display in the public timeline.",
+ "private": "Only their followers can see this post.",
+ "private_from_me": "Only my followers can see this post.",
+ "direct": "Only mentioned user can see this post."
}
},
"friendship": {
@@ -193,10 +205,14 @@
},
"scene": {
"welcome": {
- "slogan": "Social networking\nback in your hands."
+ "slogan": "Social networking\nback in your hands.",
+ "get_started": "Get Started",
+ "log_in": "Log In"
},
"server_picker": {
- "title": "Pick a server,\nany server.",
+ "title": "Mastodon is made of users in different communities.",
+ "subtitle": "Pick a community based on your interests, region, or a general purpose one.",
+ "subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": {
"category": {
"all": "All",
@@ -223,7 +239,7 @@
"category": "CATEGORY"
},
"input": {
- "placeholder": "Find a server or join your own..."
+ "placeholder": "Search communities"
},
"empty_state": {
"finding_servers": "Finding available servers...",
@@ -232,7 +248,7 @@
}
},
"register": {
- "title": "Tell us about you.",
+ "title": "Let’s get you set up on %s",
"input": {
"avatar": {
"delete": "Delete"
@@ -249,6 +265,12 @@
},
"password": {
"placeholder": "password",
+ "require": "Your password needs at least:",
+ "character_limit": "8 characters",
+ "accessibility": {
+ "checked": "checked",
+ "unchecked": "unchecked"
+ },
"hint": "Your password needs at least eight characters"
},
"invite": {
@@ -286,7 +308,7 @@
},
"server_rules": {
"title": "Some ground rules.",
- "subtitle": "These rules are set by the admins of %s.",
+ "subtitle": "These are set and enforced by the %s moderators.",
"prompt": "By continuing, you’re subject to the terms of service and privacy policy for %s.",
"terms_of_service": "terms of service",
"privacy_policy": "privacy policy",
@@ -296,10 +318,10 @@
},
"confirm_email": {
"title": "One last thing.",
- "subtitle": "We just sent an email to %s,\ntap the link to confirm your account.",
+ "subtitle": "Tap the link we emailed to you to verify your account.",
"button": {
"open_email_app": "Open Email App",
- "dont_receive_email": "I never got an email"
+ "resend": "Resend"
},
"dont_receive_email": {
"title": "Check your email",
@@ -402,17 +424,33 @@
"segmented_control": {
"posts": "Posts",
"replies": "Replies",
- "media": "Media"
+ "posts_and_replies": "Posts and Replies",
+ "media": "Media",
+ "about": "About"
},
"relationship_action_alert": {
+ "confirm_mute_user": {
+ "title": "Mute Account",
+ "message": "Confirm to mute %s"
+ },
"confirm_unmute_user": {
"title": "Unmute Account",
"message": "Confirm to unmute %s"
},
- "confirm_unblock_usre": {
+ "confirm_block_user": {
+ "title": "Block Account",
+ "message": "Confirm to block %s"
+ },
+ "confirm_unblock_user": {
"title": "Unblock Account",
"message": "Confirm to unblock %s"
}
+ },
+ "accessibility": {
+ "show_avatar_image": "Show avatar image",
+ "edit_avatar_image": "Edit avatar image",
+ "show_banner_image": "Show banner image",
+ "double_tap_to_open_the_list": "Double tap to open the list"
}
},
"follower": {
@@ -462,12 +500,14 @@
"Everything": "Everything",
"Mentions": "Mentions"
},
- "user_followed_you": "%s followed you",
- "user_favorited your post": "%s favorited your post",
- "user_reblogged_your_post": "%s reblogged your post",
- "user_mentioned_you": "%s mentioned you",
- "user_requested_to_follow_you": "%s requested to follow you",
- "user_your_poll_has_ended": "%s Your poll has ended",
+ "notification_description": {
+ "followed_you": "followed you",
+ "favorited_your_post": "favorited your post",
+ "reblogged_your_post": "reblogged your post",
+ "mentioned_you": "mentioned you",
+ "request_to_follow_you": "request to follow you",
+ "poll_has_ended": "poll has ended"
+ },
"keyobard": {
"show_everything": "Show Everything",
"show_mentions": "Show Mentions"
@@ -486,6 +526,13 @@
"light": "Always Light",
"dark": "Always Dark"
},
+ "look_and_feel": {
+ "title": "Look and Feel",
+ "use_system": "Use System",
+ "really_dark": "Really Dark",
+ "sorta_dark": "Sorta Dark",
+ "light": "Light"
+ },
"notifications": {
"title": "Notifications",
"favorites": "Favorites my post",
@@ -505,7 +552,8 @@
"true_black_dark_mode": "True black dark mode",
"disable_avatar_animation": "Disable animated avatars",
"disable_emoji_animation": "Disable animated emojis",
- "using_default_browser": "Use default browser to open links"
+ "using_default_browser": "Use default browser to open links",
+ "open_links_in_mastodon": "Open links in Mastodon"
},
"boring_zone": {
"title": "The Boring Zone",
@@ -527,14 +575,17 @@
}
},
"report": {
+ "title_report": "Report",
"title": "Report %s",
"step1": "Step 1 of 2",
"step2": "Step 2 of 2",
"content1": "Are there any other posts you’d like to add to the report?",
"content2": "Is there anything the moderators should know about this report?",
+ "report_sent_title": "Thanks for reporting, we’ll look into this.",
"send": "Send Report",
"skip_to_send": "Send without comment",
- "text_placeholder": "Type or paste additional comments"
+ "text_placeholder": "Type or paste additional comments",
+ "reported": "REPORTED"
},
"preview": {
"keyboard": {
diff --git a/Mastodon.xcodeproj/project.pbxproj b/Mastodon.xcodeproj/project.pbxproj
index 6b7644e3e..69596a202 100644
--- a/Mastodon.xcodeproj/project.pbxproj
+++ b/Mastodon.xcodeproj/project.pbxproj
@@ -11,64 +11,38 @@
0F2021FB2613262F000C64BF /* HashtagTimelineViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F2021FA2613262F000C64BF /* HashtagTimelineViewController.swift */; };
0F202201261326E6000C64BF /* HashtagTimelineViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F202200261326E6000C64BF /* HashtagTimelineViewModel.swift */; };
0F20220726134DA4000C64BF /* HashtagTimelineViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F20220626134DA4000C64BF /* HashtagTimelineViewModel+Diffable.swift */; };
- 0F20220D26134E3F000C64BF /* HashtagTimelineViewModel+LoadLatestState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F20220C26134E3F000C64BF /* HashtagTimelineViewModel+LoadLatestState.swift */; };
0F202213261351F5000C64BF /* APIService+HashtagTimeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F202212261351F5000C64BF /* APIService+HashtagTimeline.swift */; };
- 0F202227261411BB000C64BF /* HashtagTimelineViewController+Provider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F202226261411BA000C64BF /* HashtagTimelineViewController+Provider.swift */; };
0F20222D261457EE000C64BF /* HashtagTimelineViewModel+LoadOldestState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F20222C261457EE000C64BF /* HashtagTimelineViewModel+LoadOldestState.swift */; };
- 0F20223326145E51000C64BF /* HashtagTimelineViewModel+LoadMiddleState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F20223226145E51000C64BF /* HashtagTimelineViewModel+LoadMiddleState.swift */; };
0F20223926146553000C64BF /* Array.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F20223826146553000C64BF /* Array.swift */; };
0FAA0FDF25E0B57E0017CCDE /* WelcomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FAA0FDE25E0B57E0017CCDE /* WelcomeViewController.swift */; };
0FAA101225E105390017CCDE /* PrimaryActionButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FAA101125E105390017CCDE /* PrimaryActionButton.swift */; };
0FAA101C25E10E760017CCDE /* UIFont.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FAA101B25E10E760017CCDE /* UIFont.swift */; };
0FAA102725E1126A0017CCDE /* MastodonPickServerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FAA102625E1126A0017CCDE /* MastodonPickServerViewController.swift */; };
0FB3D2F725E4C24D00AAD544 /* MastodonPickServerViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FB3D2F625E4C24D00AAD544 /* MastodonPickServerViewModel.swift */; };
- 0FB3D2FE25E4CB6400AAD544 /* PickServerTitleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FB3D2FD25E4CB6400AAD544 /* PickServerTitleCell.swift */; };
- 0FB3D30825E524C600AAD544 /* PickServerCategoriesCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FB3D30725E524C600AAD544 /* PickServerCategoriesCell.swift */; };
+ 0FB3D2FE25E4CB6400AAD544 /* OnboardingHeadlineTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FB3D2FD25E4CB6400AAD544 /* OnboardingHeadlineTableViewCell.swift */; };
0FB3D30F25E525CD00AAD544 /* PickServerCategoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FB3D30E25E525CD00AAD544 /* PickServerCategoryView.swift */; };
0FB3D31E25E534C700AAD544 /* PickServerCategoryCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FB3D31D25E534C700AAD544 /* PickServerCategoryCollectionViewCell.swift */; };
- 0FB3D33225E5F50E00AAD544 /* PickServerSearchCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FB3D33125E5F50E00AAD544 /* PickServerSearchCell.swift */; };
0FB3D33825E6401400AAD544 /* PickServerCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FB3D33725E6401400AAD544 /* PickServerCell.swift */; };
164F0EBC267D4FE400249499 /* BoopSound.caf in Resources */ = {isa = PBXBuildFile; fileRef = 164F0EBB267D4FE400249499 /* BoopSound.caf */; };
18BC7629F65E6DB12CB8416D /* Pods_Mastodon_MastodonUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C030226D3C73DCC23D67452 /* Pods_Mastodon_MastodonUITests.framework */; };
- 2D04F42525C255B9003F936F /* APIService+PublicTimeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D04F42425C255B9003F936F /* APIService+PublicTimeline.swift */; };
- 2D084B8D26258EA3003AA3AF /* NotificationViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D084B8C26258EA3003AA3AF /* NotificationViewModel+Diffable.swift */; };
- 2D084B9326259545003AA3AF /* NotificationViewModel+LoadLatestState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D084B9226259545003AA3AF /* NotificationViewModel+LoadLatestState.swift */; };
- 2D0B7A1D261D839600B44727 /* SearchHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D0B7A1C261D839600B44727 /* SearchHistory.swift */; };
- 2D152A8C25C295CC009AA50C /* StatusView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D152A8B25C295CC009AA50C /* StatusView.swift */; };
- 2D152A9225C2980C009AA50C /* UIFont.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D152A9125C2980C009AA50C /* UIFont.swift */; };
2D198643261BF09500F0B013 /* SearchResultItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D198642261BF09500F0B013 /* SearchResultItem.swift */; };
2D198649261C0B8500F0B013 /* SearchResultSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D198648261C0B8500F0B013 /* SearchResultSection.swift */; };
- 2D206B7225F5D27F00143C56 /* AudioContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D206B7125F5D27F00143C56 /* AudioContainerView.swift */; };
2D206B8625F5FB0900143C56 /* Double.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D206B8525F5FB0900143C56 /* Double.swift */; };
- 2D206B8C25F6015000143C56 /* AudioPlaybackService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D206B8B25F6015000143C56 /* AudioPlaybackService.swift */; };
2D206B9225F60EA700143C56 /* UIControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D206B9125F60EA700143C56 /* UIControl.swift */; };
- 2D24E11D2626D8B100A59D4F /* NotificationStatusTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D24E11C2626D8B100A59D4F /* NotificationStatusTableViewCell.swift */; };
2D24E1232626ED9D00A59D4F /* UIView+Gesture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D24E1222626ED9D00A59D4F /* UIView+Gesture.swift */; };
- 2D24E12D2626FD2E00A59D4F /* NotificationViewModel+LoadOldestState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D24E12C2626FD2E00A59D4F /* NotificationViewModel+LoadOldestState.swift */; };
2D32EAAC25CB96DC00C9ED86 /* TimelineMiddleLoaderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D32EAAB25CB96DC00C9ED86 /* TimelineMiddleLoaderTableViewCell.swift */; };
2D32EABA25CB9B0500C9ED86 /* UIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D32EAB925CB9B0500C9ED86 /* UIView.swift */; };
- 2D32EADA25CBCC3300C9ED86 /* PublicTimelineViewModel+LoadMiddleState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D32EAD925CBCC3300C9ED86 /* PublicTimelineViewModel+LoadMiddleState.swift */; };
- 2D34D9CB261489930081BFC0 /* SearchViewController+Recommend.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D34D9CA261489930081BFC0 /* SearchViewController+Recommend.swift */; };
2D34D9D126148D9E0081BFC0 /* APIService+Recommend.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D34D9D026148D9E0081BFC0 /* APIService+Recommend.swift */; };
2D34D9DB261494120081BFC0 /* APIService+Search.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D34D9DA261494120081BFC0 /* APIService+Search.swift */; };
- 2D34D9E226149C920081BFC0 /* SearchRecommendTagsCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D34D9E126149C920081BFC0 /* SearchRecommendTagsCollectionViewCell.swift */; };
2D35237A26256D920031AF25 /* NotificationSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D35237926256D920031AF25 /* NotificationSection.swift */; };
2D364F7225E66D7500204FDC /* MastodonResendEmailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D364F7125E66D7500204FDC /* MastodonResendEmailViewController.swift */; };
2D364F7825E66D8300204FDC /* MastodonResendEmailViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D364F7725E66D8300204FDC /* MastodonResendEmailViewModel.swift */; };
- 2D38F1C625CD37F400561493 /* ContentOffsetAdjustableTimelineViewControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D38F1C525CD37F400561493 /* ContentOffsetAdjustableTimelineViewControllerDelegate.swift */; };
2D38F1D525CD465300561493 /* HomeTimelineViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D38F1D425CD465300561493 /* HomeTimelineViewController.swift */; };
- 2D38F1DF25CD46A400561493 /* HomeTimelineViewController+Provider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D38F1DE25CD46A400561493 /* HomeTimelineViewController+Provider.swift */; };
2D38F1E525CD46C100561493 /* HomeTimelineViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D38F1E425CD46C100561493 /* HomeTimelineViewModel.swift */; };
2D38F1EB25CD477000561493 /* HomeTimelineViewModel+LoadLatestState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D38F1EA25CD477000561493 /* HomeTimelineViewModel+LoadLatestState.swift */; };
- 2D38F1F125CD477D00561493 /* HomeTimelineViewModel+LoadMiddleState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D38F1F025CD477D00561493 /* HomeTimelineViewModel+LoadMiddleState.swift */; };
2D38F1F725CD47AC00561493 /* HomeTimelineViewModel+LoadOldestState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D38F1F625CD47AC00561493 /* HomeTimelineViewModel+LoadOldestState.swift */; };
- 2D38F1FE25CD481700561493 /* StatusProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D38F1FD25CD481700561493 /* StatusProvider.swift */; };
2D38F20825CD491300561493 /* DisposeBagCollectable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D38F20725CD491300561493 /* DisposeBagCollectable.swift */; };
2D3F9E0425DFA133004262D9 /* UITapGestureRecognizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D3F9E0325DFA133004262D9 /* UITapGestureRecognizer.swift */; };
- 2D42FF7E25C82218004A627A /* ActionToolBarContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D42FF7D25C82218004A627A /* ActionToolBarContainer.swift */; };
- 2D42FF8525C8224F004A627A /* HitTestExpandedButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D42FF8425C8224F004A627A /* HitTestExpandedButton.swift */; };
- 2D42FF8F25C8228A004A627A /* UIButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D42FF8E25C8228A004A627A /* UIButton.swift */; };
- 2D45E5BF25C9549700A6D639 /* PublicTimelineViewModel+State.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D45E5BE25C9549700A6D639 /* PublicTimelineViewModel+State.swift */; };
2D4AD89C263165B500613EFC /* SuggestionAccountCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D4AD89B263165B500613EFC /* SuggestionAccountCollectionViewCell.swift */; };
2D4AD8A226316CD200613EFC /* SelectedAccountSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D4AD8A126316CD200613EFC /* SelectedAccountSection.swift */; };
2D4AD8A826316D3500613EFC /* SelectedAccountItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D4AD8A726316D3500613EFC /* SelectedAccountItem.swift */; };
@@ -81,81 +55,50 @@
2D5A3D3825CF8D9F002347D6 /* ScrollViewContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D5A3D3725CF8D9F002347D6 /* ScrollViewContainer.swift */; };
2D5A3D6225CFD9CB002347D6 /* HomeTimelineViewController+DebugAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D5A3D6125CFD9CB002347D6 /* HomeTimelineViewController+DebugAction.swift */; };
2D607AD826242FC500B70763 /* NotificationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D607AD726242FC500B70763 /* NotificationViewModel.swift */; };
- 2D6125472625436B00299647 /* Notification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D6125462625436B00299647 /* Notification.swift */; };
2D61254D262547C200299647 /* APIService+Notification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D61254C262547C200299647 /* APIService+Notification.swift */; };
- 2D61335825C188A000CAE157 /* APIService+Persist+Status.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D61335725C188A000CAE157 /* APIService+Persist+Status.swift */; };
2D61335E25C1894B00CAE157 /* APIService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D61335D25C1894B00CAE157 /* APIService.swift */; };
2D61336925C18A4F00CAE157 /* AlamofireNetworkActivityIndicator in Frameworks */ = {isa = PBXBuildFile; productRef = 2D61336825C18A4F00CAE157 /* AlamofireNetworkActivityIndicator */; };
2D650FAB25ECDC9300851B58 /* Mastodon+Entity+Error+Detail.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D650FAA25ECDC9300851B58 /* Mastodon+Entity+Error+Detail.swift */; };
2D694A7425F9EB4E0038ADDC /* ContentWarningOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D694A7325F9EB4E0038ADDC /* ContentWarningOverlayView.swift */; };
- 2D69CFF425CA9E2200C3A1B2 /* LoadMoreConfigurableTableViewContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D69CFF325CA9E2200C3A1B2 /* LoadMoreConfigurableTableViewContainer.swift */; };
- 2D69D00A25CAA00300C3A1B2 /* APIService+CoreData+Status.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D69D00925CAA00300C3A1B2 /* APIService+CoreData+Status.swift */; };
2D6DE40026141DF600A63F6A /* SearchViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D6DE3FF26141DF600A63F6A /* SearchViewModel.swift */; };
- 2D76316525C14BD100929FB9 /* PublicTimelineViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D76316425C14BD100929FB9 /* PublicTimelineViewController.swift */; };
- 2D76316B25C14D4C00929FB9 /* PublicTimelineViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D76316A25C14D4C00929FB9 /* PublicTimelineViewModel.swift */; };
- 2D76317D25C14DF500929FB9 /* PublicTimelineViewController+Provider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D76317C25C14DF400929FB9 /* PublicTimelineViewController+Provider.swift */; };
- 2D76318325C14E8F00929FB9 /* PublicTimelineViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D76318225C14E8F00929FB9 /* PublicTimelineViewModel+Diffable.swift */; };
2D76319F25C1521200929FB9 /* StatusSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D76319E25C1521200929FB9 /* StatusSection.swift */; };
2D7631A825C1535600929FB9 /* StatusTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D7631A725C1535600929FB9 /* StatusTableViewCell.swift */; };
- 2D7631B325C159F700929FB9 /* Item.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D7631B225C159F700929FB9 /* Item.swift */; };
2D7867192625B77500211898 /* NotificationItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D7867182625B77500211898 /* NotificationItem.swift */; };
- 2D79E701261EA5550011E398 /* APIService+CoreData+Tag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D79E700261EA5550011E398 /* APIService+CoreData+Tag.swift */; };
2D82B9FF25E7863200E36F0F /* OnboardingViewControllerAppearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D82B9FE25E7863200E36F0F /* OnboardingViewControllerAppearance.swift */; };
2D82BA0525E7897700E36F0F /* MastodonResendEmailViewModelNavigationDelegateShim.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D82BA0425E7897700E36F0F /* MastodonResendEmailViewModelNavigationDelegateShim.swift */; };
2D8434F525FF465D00EECE90 /* HomeTimelineNavigationBarTitleViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D8434F425FF465D00EECE90 /* HomeTimelineNavigationBarTitleViewModel.swift */; };
2D8434FB25FF46B300EECE90 /* HomeTimelineNavigationBarTitleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D8434FA25FF46B300EECE90 /* HomeTimelineNavigationBarTitleView.swift */; };
2D84350525FF858100EECE90 /* UIScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D84350425FF858100EECE90 /* UIScrollView.swift */; };
2D8FCA082637EABB00137F46 /* APIService+FollowRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D8FCA072637EABB00137F46 /* APIService+FollowRequest.swift */; };
- 2D927F0225C7E4F2004F19B8 /* Mention.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D927F0125C7E4F2004F19B8 /* Mention.swift */; };
- 2D927F0825C7E9A8004F19B8 /* Tag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D927F0725C7E9A8004F19B8 /* Tag.swift */; };
- 2D927F0E25C7E9C9004F19B8 /* History.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D927F0D25C7E9C9004F19B8 /* History.swift */; };
- 2D927F1425C7EDD9004F19B8 /* Emoji.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D927F1325C7EDD9004F19B8 /* Emoji.swift */; };
2D939AB525EDD8A90076FA61 /* String.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D939AB425EDD8A90076FA61 /* String.swift */; };
2D939AC825EE14620076FA61 /* CropViewController in Frameworks */ = {isa = PBXBuildFile; productRef = 2D939AC725EE14620076FA61 /* CropViewController */; };
2D939AE825EE1CF80076FA61 /* MastodonRegisterViewController+Avatar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D939AE725EE1CF80076FA61 /* MastodonRegisterViewController+Avatar.swift */; };
2D9DB967263A76FB007C1D71 /* BlockDomainService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9DB966263A76FB007C1D71 /* BlockDomainService.swift */; };
- 2D9DB969263A833E007C1D71 /* DomainBlock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9DB968263A833E007C1D71 /* DomainBlock.swift */; };
2D9DB96B263A91D1007C1D71 /* APIService+DomainBlock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D9DB96A263A91D1007C1D71 /* APIService+DomainBlock.swift */; };
2DA504692601ADE7008F4E6C /* SawToothView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DA504682601ADE7008F4E6C /* SawToothView.swift */; };
2DA6054725F716A2006356F9 /* PlaybackState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DA6054625F716A2006356F9 /* PlaybackState.swift */; };
- 2DA6055125F74407006356F9 /* AudioContainerViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DA6055025F74407006356F9 /* AudioContainerViewModel.swift */; };
2DA7D04425CA52B200804E11 /* TimelineLoaderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DA7D04325CA52B200804E11 /* TimelineLoaderTableViewCell.swift */; };
2DA7D04A25CA52CB00804E11 /* TimelineBottomLoaderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DA7D04925CA52CB00804E11 /* TimelineBottomLoaderTableViewCell.swift */; };
- 2DA7D05725CA693F00804E11 /* Application.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DA7D05625CA693F00804E11 /* Application.swift */; };
2DAC9E38262FC2320062E1A6 /* SuggestionAccountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DAC9E37262FC2320062E1A6 /* SuggestionAccountViewController.swift */; };
2DAC9E3E262FC2400062E1A6 /* SuggestionAccountViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DAC9E3D262FC2400062E1A6 /* SuggestionAccountViewModel.swift */; };
2DAC9E46262FC9FD0062E1A6 /* SuggestionAccountTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DAC9E45262FC9FD0062E1A6 /* SuggestionAccountTableViewCell.swift */; };
2DB72C8C262D764300CE6173 /* Mastodon+Entity+Notification+Type.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DB72C8B262D764300CE6173 /* Mastodon+Entity+Notification+Type.swift */; };
2DCB73FD2615C13900EC03D4 /* SearchRecommendCollectionHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DCB73FC2615C13900EC03D4 /* SearchRecommendCollectionHeader.swift */; };
- 2DE0FAC12615F04D00CDF649 /* RecommendHashTagSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DE0FAC02615F04D00CDF649 /* RecommendHashTagSection.swift */; };
- 2DE0FAC82615F5F000CDF649 /* SearchRecommendAccountsCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DE0FAC72615F5F000CDF649 /* SearchRecommendAccountsCollectionViewCell.swift */; };
2DE0FACE2615F7AD00CDF649 /* RecommendAccountSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DE0FACD2615F7AD00CDF649 /* RecommendAccountSection.swift */; };
2DF123A725C3B0210020F248 /* ActiveLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DF123A625C3B0210020F248 /* ActiveLabel.swift */; };
- 2DF75B9B25D0E27500694EC8 /* StatusProviderFacade.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DF75B9A25D0E27500694EC8 /* StatusProviderFacade.swift */; };
- 2DF75BA125D0E29D00694EC8 /* StatusProvider+StatusTableViewCellDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DF75BA025D0E29D00694EC8 /* StatusProvider+StatusTableViewCellDelegate.swift */; };
2DF75BA725D10E1000694EC8 /* APIService+Favorite.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DF75BA625D10E1000694EC8 /* APIService+Favorite.swift */; };
- 2DF75BB925D1474100694EC8 /* ManagedObjectObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DF75BB825D1474100694EC8 /* ManagedObjectObserver.swift */; };
- 2DF75BC725D1475D00694EC8 /* ManagedObjectContextObjectsDidChange.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DF75BC625D1475D00694EC8 /* ManagedObjectContextObjectsDidChange.swift */; };
- 2DFAD5372617010500F9EE7C /* SearchResultTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DFAD5362617010500F9EE7C /* SearchResultTableViewCell.swift */; };
4278334D6033AEEE0A1C5155 /* Pods_ShareActionExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A32B0CACBF35F4CC3CFAA043 /* Pods_ShareActionExtension.framework */; };
5B24BBDA262DB14800A9381B /* ReportViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B24BBD7262DB14800A9381B /* ReportViewModel.swift */; };
5B24BBDB262DB14800A9381B /* ReportViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B24BBD8262DB14800A9381B /* ReportViewModel+Diffable.swift */; };
5B24BBE2262DB19100A9381B /* APIService+Report.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B24BBE1262DB19100A9381B /* APIService+Report.swift */; };
- 5B8E055826319E47006E3C53 /* ReportFooterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B8E055726319E47006E3C53 /* ReportFooterView.swift */; };
5B90C45E262599800002E742 /* SettingsViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B90C456262599800002E742 /* SettingsViewModel.swift */; };
5B90C45F262599800002E742 /* SettingsToggleTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B90C459262599800002E742 /* SettingsToggleTableViewCell.swift */; };
5B90C460262599800002E742 /* SettingsAppearanceTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B90C45A262599800002E742 /* SettingsAppearanceTableViewCell.swift */; };
5B90C461262599800002E742 /* SettingsLinkTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B90C45B262599800002E742 /* SettingsLinkTableViewCell.swift */; };
5B90C462262599800002E742 /* SettingsSectionHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B90C45C262599800002E742 /* SettingsSectionHeader.swift */; };
- 5B90C46E26259B2C0002E742 /* Subscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B90C46C26259B2C0002E742 /* Subscription.swift */; };
- 5B90C46F26259B2C0002E742 /* Setting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B90C46D26259B2C0002E742 /* Setting.swift */; };
- 5B90C47F26259BA90002E742 /* SubscriptionAlerts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B90C47E26259BA90002E742 /* SubscriptionAlerts.swift */; };
5B90C48526259BF10002E742 /* APIService+Subscriptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B90C48426259BF10002E742 /* APIService+Subscriptions.swift */; };
5B90C48B26259C120002E742 /* APIService+CoreData+Subscriptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B90C48A26259C120002E742 /* APIService+CoreData+Subscriptions.swift */; };
5BB04FD5262E7AFF0043BFF6 /* ReportViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB04FD4262E7AFF0043BFF6 /* ReportViewController.swift */; };
- 5BB04FDB262EA3070043BFF6 /* ReportHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB04FDA262EA3070043BFF6 /* ReportHeaderView.swift */; };
- 5BB04FE9262EFC300043BFF6 /* ReportedStatusTableviewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB04FE8262EFC300043BFF6 /* ReportedStatusTableviewCell.swift */; };
- 5BB04FEF262F0DCB0043BFF6 /* ReportViewModel+Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB04FEE262F0DCB0043BFF6 /* ReportViewModel+Data.swift */; };
5BB04FF5262F0E6D0043BFF6 /* ReportSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB04FF4262F0E6D0043BFF6 /* ReportSection.swift */; };
5D0393902612D259007FE196 /* WebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D03938F2612D259007FE196 /* WebViewController.swift */; };
5D0393962612D266007FE196 /* WebViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D0393952612D266007FE196 /* WebViewModel.swift */; };
@@ -164,13 +107,7 @@
5DDDF1932617442700311060 /* Mastodon+Entity+Account.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DDDF1922617442700311060 /* Mastodon+Entity+Account.swift */; };
5DDDF1992617447F00311060 /* Mastodon+Entity+Tag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DDDF1982617447F00311060 /* Mastodon+Entity+Tag.swift */; };
5DDDF1A92617489F00311060 /* Mastodon+Entity+History.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DDDF1A82617489F00311060 /* Mastodon+Entity+History.swift */; };
- 5DF1054125F886D400D6C0D4 /* VideoPlaybackService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DF1054025F886D400D6C0D4 /* VideoPlaybackService.swift */; };
- 5DF1054725F8870E00D6C0D4 /* VideoPlayerViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DF1054625F8870E00D6C0D4 /* VideoPlayerViewModel.swift */; };
5DF1056425F887CB00D6C0D4 /* AVPlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DF1056325F887CB00D6C0D4 /* AVPlayer.swift */; };
- 5DF1057925F88A1D00D6C0D4 /* PlayerContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DF1057825F88A1D00D6C0D4 /* PlayerContainerView.swift */; };
- 5DF1057F25F88A4100D6C0D4 /* TouchBlockingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DF1057E25F88A4100D6C0D4 /* TouchBlockingView.swift */; };
- 5DF1058525F88AE500D6C0D4 /* NeedsDependency+AVPlayerViewControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DF1058425F88AE500D6C0D4 /* NeedsDependency+AVPlayerViewControllerDelegate.swift */; };
- 5DFC35DF262068D20045711D /* SearchViewController+Follow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DFC35DE262068D20045711D /* SearchViewController+Follow.swift */; };
5E0DEC05797A7E6933788DDB /* Pods_MastodonTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 452147B2903DF38070FE56A2 /* Pods_MastodonTests.framework */; };
5E44BF88AD33646E64727BCF /* Pods_MastodonTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD92E0F10BDE4FE7C4B999F2 /* Pods_MastodonTests.framework */; };
87FFDA5D898A5C42ADCB35E7 /* Pods_Mastodon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A4ABE34829701A4496C5BB64 /* Pods_Mastodon.framework */; };
@@ -183,7 +120,14 @@
DB0140CF25C42AEE00F9F3CF /* OSLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0140CE25C42AEE00F9F3CF /* OSLog.swift */; };
DB01E23326A98F0900C3965B /* MastodonMeta in Frameworks */ = {isa = PBXBuildFile; productRef = DB01E23226A98F0900C3965B /* MastodonMeta */; };
DB01E23526A98F0900C3965B /* MetaTextKit in Frameworks */ = {isa = PBXBuildFile; productRef = DB01E23426A98F0900C3965B /* MetaTextKit */; };
- DB023295267F0AB800031745 /* ASMetaEditableTextNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB023294267F0AB800031745 /* ASMetaEditableTextNode.swift */; };
+ DB023D26279FFB0A005AC798 /* ShareActivityProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB023D25279FFB0A005AC798 /* ShareActivityProvider.swift */; };
+ DB023D2827A0FABD005AC798 /* NotificationTableViewCellDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB023D2727A0FABD005AC798 /* NotificationTableViewCellDelegate.swift */; };
+ DB023D2A27A0FE5C005AC798 /* DataSourceProvider+NotificationTableViewCellDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB023D2927A0FE5C005AC798 /* DataSourceProvider+NotificationTableViewCellDelegate.swift */; };
+ DB023D2C27A10464005AC798 /* NotificationTimelineViewController+DataSourceProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB023D2B27A10464005AC798 /* NotificationTimelineViewController+DataSourceProvider.swift */; };
+ DB025B78278D606A002F581E /* StatusItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB025B77278D606A002F581E /* StatusItem.swift */; };
+ DB025B93278D6501002F581E /* Persistence.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB025B92278D6501002F581E /* Persistence.swift */; };
+ DB025B95278D6530002F581E /* Persistence+MastodonUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB025B94278D6530002F581E /* Persistence+MastodonUser.swift */; };
+ DB025B97278D66D5002F581E /* MastodonUser+Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB025B96278D66D5002F581E /* MastodonUser+Property.swift */; };
DB029E95266A20430062874E /* MastodonAuthenticationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB029E94266A20430062874E /* MastodonAuthenticationController.swift */; };
DB02CDAB26256A9500D0A2AF /* ThreadReplyLoaderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB02CDAA26256A9500D0A2AF /* ThreadReplyLoaderTableViewCell.swift */; };
DB02CDBF2625AE5000D0A2AF /* AdaptiveUserInterfaceStyleBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB02CDBE2625AE5000D0A2AF /* AdaptiveUserInterfaceStyleBarButtonItem.swift */; };
@@ -192,30 +136,61 @@
DB03F7F32689AEA3007B274C /* ComposeRepliedToStatusContentTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB03F7F22689AEA3007B274C /* ComposeRepliedToStatusContentTableViewCell.swift */; };
DB03F7F52689B782007B274C /* ComposeTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB03F7F42689B782007B274C /* ComposeTableView.swift */; };
DB040ED126538E3D00BEE9D8 /* Trie.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB040ED026538E3C00BEE9D8 /* Trie.swift */; };
+ DB0617EB277EF3820030EE79 /* GradientBorderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0617EA277EF3820030EE79 /* GradientBorderView.swift */; };
+ DB0617ED277F02C50030EE79 /* OnboardingNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0617EC277F02C50030EE79 /* OnboardingNavigationController.swift */; };
+ DB0617EF277F12720030EE79 /* NavigationActionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0617EE277F12720030EE79 /* NavigationActionView.swift */; };
+ DB0617F1278413D00030EE79 /* PickServerServerSectionTableHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0617F0278413D00030EE79 /* PickServerServerSectionTableHeaderView.swift */; };
+ DB0617F527855AB90030EE79 /* ServerRuleSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0617F427855AB90030EE79 /* ServerRuleSection.swift */; };
+ DB0617FD27855BFE0030EE79 /* ServerRuleItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0617FC27855BFE0030EE79 /* ServerRuleItem.swift */; };
+ DB0617FF27855D6C0030EE79 /* MastodonServerRulesViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0617FE27855D6C0030EE79 /* MastodonServerRulesViewModel+Diffable.swift */; };
+ DB0618012785732C0030EE79 /* ServerRulesTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0618002785732C0030EE79 /* ServerRulesTableViewCell.swift */; };
+ DB0618032785A7100030EE79 /* RegisterSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0618022785A7100030EE79 /* RegisterSection.swift */; };
+ DB0618052785A73D0030EE79 /* RegisterItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0618042785A73D0030EE79 /* RegisterItem.swift */; };
+ DB0618072785A8880030EE79 /* MastodonRegisterViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0618062785A8880030EE79 /* MastodonRegisterViewModel+Diffable.swift */; };
+ DB06180A2785B2AB0030EE79 /* MastodonRegisterAvatarTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0618092785B2AB0030EE79 /* MastodonRegisterAvatarTableViewCell.swift */; };
DB084B5725CBC56C00F898ED /* Status.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB084B5625CBC56C00F898ED /* Status.swift */; };
DB0AC6FC25CD02E600D75117 /* APIService+Instance.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0AC6FB25CD02E600D75117 /* APIService+Instance.swift */; };
DB0C946526A6FD4D0088FB11 /* AlamofireImage in Frameworks */ = {isa = PBXBuildFile; productRef = DB0C946426A6FD4D0088FB11 /* AlamofireImage */; };
- DB0C946B26A700AB0088FB11 /* MastodonUser+Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0C946A26A700AB0088FB11 /* MastodonUser+Property.swift */; };
- DB0C946C26A700CE0088FB11 /* MastodonUser+Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0C946A26A700AB0088FB11 /* MastodonUser+Property.swift */; };
- DB0C946F26A7D2A80088FB11 /* AvatarImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0C946E26A7D2A80088FB11 /* AvatarImageView.swift */; };
- DB0C947226A7D2D70088FB11 /* AvatarButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0C947126A7D2D70088FB11 /* AvatarButton.swift */; };
DB0C947726A7FE840088FB11 /* NotificationAvatarButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0C947626A7FE840088FB11 /* NotificationAvatarButton.swift */; };
- DB0E91EA26A9675100BD2ACC /* MetaLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0E91E926A9675100BD2ACC /* MetaLabel.swift */; };
DB0EF72B26FDB1D200347686 /* SidebarListCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0EF72A26FDB1D200347686 /* SidebarListCollectionViewCell.swift */; };
DB0EF72E26FDB24F00347686 /* SidebarListContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0EF72D26FDB24F00347686 /* SidebarListContentView.swift */; };
DB0F8150264D1E2500F2A12B /* PickServerLoaderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0F814F264D1E2500F2A12B /* PickServerLoaderTableViewCell.swift */; };
+ DB0FCB68279507EF006C02E2 /* DataSourceFacade+Meta.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0FCB67279507EF006C02E2 /* DataSourceFacade+Meta.swift */; };
+ DB0FCB6C27950E29006C02E2 /* MastodonMentionContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0FCB6B27950E29006C02E2 /* MastodonMentionContainer.swift */; };
+ DB0FCB6E27950E6B006C02E2 /* MastodonMention.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0FCB6D27950E6B006C02E2 /* MastodonMention.swift */; };
+ DB0FCB7027951368006C02E2 /* TimelineMiddleLoaderTableViewCell+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0FCB6F27951368006C02E2 /* TimelineMiddleLoaderTableViewCell+ViewModel.swift */; };
+ DB0FCB7227952986006C02E2 /* NamingState.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0FCB7127952986006C02E2 /* NamingState.swift */; };
+ DB0FCB7427956939006C02E2 /* DataSourceFacade+Status.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0FCB7327956939006C02E2 /* DataSourceFacade+Status.swift */; };
+ DB0FCB76279571C5006C02E2 /* ThreadViewController+DataSourceProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0FCB75279571C5006C02E2 /* ThreadViewController+DataSourceProvider.swift */; };
+ DB0FCB7827957678006C02E2 /* DataSourceProvider+UITableViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0FCB7727957678006C02E2 /* DataSourceProvider+UITableViewDelegate.swift */; };
+ DB0FCB7A279576A2006C02E2 /* DataSourceFacade+Thread.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0FCB79279576A2006C02E2 /* DataSourceFacade+Thread.swift */; };
+ DB0FCB7C2795821F006C02E2 /* StatusThreadRootTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0FCB7B2795821F006C02E2 /* StatusThreadRootTableViewCell.swift */; };
+ DB0FCB7E27958957006C02E2 /* StatusThreadRootTableViewCell+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0FCB7D27958957006C02E2 /* StatusThreadRootTableViewCell+ViewModel.swift */; };
+ DB0FCB8027968F70006C02E2 /* MastodonStatusThreadViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0FCB7F27968F70006C02E2 /* MastodonStatusThreadViewModel.swift */; };
+ DB0FCB822796AC78006C02E2 /* UserTimelineViewController+DataSourceProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0FCB812796AC78006C02E2 /* UserTimelineViewController+DataSourceProvider.swift */; };
+ DB0FCB842796B2A2006C02E2 /* FavoriteViewController+DataSourceProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0FCB832796B2A2006C02E2 /* FavoriteViewController+DataSourceProvider.swift */; };
+ DB0FCB862796BDA1006C02E2 /* SearchSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0FCB852796BDA1006C02E2 /* SearchSection.swift */; };
+ DB0FCB882796BDA9006C02E2 /* SearchItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0FCB872796BDA9006C02E2 /* SearchItem.swift */; };
+ DB0FCB8C2796BF8D006C02E2 /* SearchViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0FCB8B2796BF8D006C02E2 /* SearchViewModel+Diffable.swift */; };
+ DB0FCB8E2796C0B7006C02E2 /* TrendCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0FCB8D2796C0B7006C02E2 /* TrendCollectionViewCell.swift */; };
+ DB0FCB902796C5EB006C02E2 /* APIService+Trend.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0FCB8F2796C5EB006C02E2 /* APIService+Trend.swift */; };
+ DB0FCB922796DE19006C02E2 /* TrendSectionHeaderCollectionReusableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0FCB912796DE19006C02E2 /* TrendSectionHeaderCollectionReusableView.swift */; };
+ DB0FCB942797E2B0006C02E2 /* SearchResultViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0FCB932797E2B0006C02E2 /* SearchResultViewModel+Diffable.swift */; };
+ DB0FCB962797E6C2006C02E2 /* SearchResultViewController+DataSourceProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0FCB952797E6C2006C02E2 /* SearchResultViewController+DataSourceProvider.swift */; };
+ DB0FCB982797F6BF006C02E2 /* UserTableViewCell+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0FCB972797F6BF006C02E2 /* UserTableViewCell+ViewModel.swift */; };
+ DB0FCB9A2797F7AD006C02E2 /* UserView+Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0FCB992797F7AD006C02E2 /* UserView+Configuration.swift */; };
+ DB0FCB9C27980AB6006C02E2 /* HashtagTimelineViewController+DataSourceProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB0FCB9B27980AB6006C02E2 /* HashtagTimelineViewController+DataSourceProvider.swift */; };
DB118A8225E4B6E600FAB162 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DB118A8125E4B6E600FAB162 /* Preview Assets.xcassets */; };
+ DB159C2B27A17BAC0068DC77 /* DataSourceFacade+Media.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB159C2A27A17BAC0068DC77 /* DataSourceFacade+Media.swift */; };
+ DB179267278D5A4A00B71DEB /* MastodonSDK in Frameworks */ = {isa = PBXBuildFile; productRef = DB179266278D5A4A00B71DEB /* MastodonSDK */; };
DB1D186C25EF5BA7003F1F23 /* PollTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB1D186B25EF5BA7003F1F23 /* PollTableView.swift */; };
DB1D61CF26F1B33600DA8662 /* WelcomeViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB1D61CE26F1B33600DA8662 /* WelcomeViewModel.swift */; };
- DB1D842C26551A1C000346B3 /* StatusProvider+StatusTableViewKeyCommandNavigateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB1D842B26551A1C000346B3 /* StatusProvider+StatusTableViewKeyCommandNavigateable.swift */; };
DB1D842E26552C4D000346B3 /* StatusTableViewControllerNavigateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB1D842D26552C4D000346B3 /* StatusTableViewControllerNavigateable.swift */; };
DB1D843026566512000346B3 /* KeyboardPreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB1D842F26566512000346B3 /* KeyboardPreference.swift */; };
DB1D843426579931000346B3 /* TableViewControllerNavigateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB1D843326579931000346B3 /* TableViewControllerNavigateable.swift */; };
- DB1D843626579DB5000346B3 /* StatusProvider+TableViewControllerNavigateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB1D843526579DB5000346B3 /* StatusProvider+TableViewControllerNavigateable.swift */; };
DB1D84382657B275000346B3 /* SegmentedControlNavigateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB1D84372657B275000346B3 /* SegmentedControlNavigateable.swift */; };
DB1E346825F518E20079D7DF /* CategoryPickerSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB1E346725F518E20079D7DF /* CategoryPickerSection.swift */; };
DB1E347825F519300079D7DF /* PickServerItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB1E347725F519300079D7DF /* PickServerItem.swift */; };
- DB1EE7B2267F9525000CC337 /* StatusProvider+StatusNodeDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB1EE7B1267F9525000CC337 /* StatusProvider+StatusNodeDelegate.swift */; };
DB1FD43625F26899004CFCFC /* MastodonPickServerViewModel+LoadIndexedServerState.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB1FD43525F26899004CFCFC /* MastodonPickServerViewModel+LoadIndexedServerState.swift */; };
DB1FD44425F26CCC004CFCFC /* PickServerSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB1FD44325F26CCC004CFCFC /* PickServerSection.swift */; };
DB1FD45025F26FA1004CFCFC /* MastodonPickServerViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB1FD44F25F26FA1004CFCFC /* MastodonPickServerViewModel+Diffable.swift */; };
@@ -225,8 +200,22 @@
DB2B3ABC25E37E15007045F9 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = DB2B3ABE25E37E15007045F9 /* InfoPlist.strings */; };
DB2F073525E8ECF000957B2D /* AuthenticationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB2F073325E8ECF000957B2D /* AuthenticationViewModel.swift */; };
DB2FF510260B113300ADA9FE /* ComposeStatusPollExpiresOptionCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB2FF50F260B113300ADA9FE /* ComposeStatusPollExpiresOptionCollectionViewCell.swift */; };
+ DB336F1C278D697E0031E64B /* MastodonUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB45FAE225CA7181005A8AC7 /* MastodonUser.swift */; };
+ DB336F21278D6D960031E64B /* MastodonEmoji.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB336F20278D6D960031E64B /* MastodonEmoji.swift */; };
+ DB336F23278D6DED0031E64B /* MastodonEmojiContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB336F22278D6DED0031E64B /* MastodonEmojiContainer.swift */; };
+ DB336F28278D6EC70031E64B /* MastodonFieldContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB336F27278D6EC70031E64B /* MastodonFieldContainer.swift */; };
+ DB336F2A278D6F2B0031E64B /* MastodonField.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB336F29278D6F2B0031E64B /* MastodonField.swift */; };
+ DB336F2C278D6FC30031E64B /* Persistence+Status.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB336F2B278D6FC30031E64B /* Persistence+Status.swift */; };
+ DB336F2E278D71AF0031E64B /* Status+Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB336F2D278D71AF0031E64B /* Status+Property.swift */; };
+ DB336F32278D77330031E64B /* Persistence+Poll.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB336F31278D77330031E64B /* Persistence+Poll.swift */; };
+ DB336F34278D77730031E64B /* Persistence+PollOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB336F33278D77730031E64B /* Persistence+PollOption.swift */; };
+ DB336F36278D77A40031E64B /* PollOption+Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB336F35278D77A40031E64B /* PollOption+Property.swift */; };
+ DB336F38278D7AAF0031E64B /* Poll+Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB336F37278D7AAF0031E64B /* Poll+Property.swift */; };
+ DB336F3D278D80040031E64B /* FeedFetchedResultsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB336F3C278D80040031E64B /* FeedFetchedResultsController.swift */; };
+ DB336F3F278E668C0031E64B /* StatusTableViewCell+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB336F3E278E668C0031E64B /* StatusTableViewCell+ViewModel.swift */; };
+ DB336F41278E68480031E64B /* StatusView+Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB336F40278E68480031E64B /* StatusView+Configuration.swift */; };
+ DB336F43278EB1690031E64B /* MediaView+Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB336F42278EB1680031E64B /* MediaView+Configuration.swift */; };
DB35FC1F2612F1D9006193C9 /* ProfileRelationshipActionButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB35FC1E2612F1D9006193C9 /* ProfileRelationshipActionButton.swift */; };
- DB35FC252612FD7A006193C9 /* ProfileFieldView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB35FC242612FD7A006193C9 /* ProfileFieldView.swift */; };
DB36679D268AB91B0027D07F /* ComposeStatusAttachmentTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB36679C268AB91B0027D07F /* ComposeStatusAttachmentTableViewCell.swift */; };
DB36679F268ABAF20027D07F /* ComposeStatusAttachmentSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB36679E268ABAF20027D07F /* ComposeStatusAttachmentSection.swift */; };
DB3667A1268ABB2E0027D07F /* ComposeStatusAttachmentItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB3667A0268ABB2E0027D07F /* ComposeStatusAttachmentItem.swift */; };
@@ -234,7 +223,6 @@
DB3667A6268AE2620027D07F /* ComposeStatusPollSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB3667A5268AE2620027D07F /* ComposeStatusPollSection.swift */; };
DB3667A8268AE2900027D07F /* ComposeStatusPollItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB3667A7268AE2900027D07F /* ComposeStatusPollItem.swift */; };
DB3D0FF325BAA61700EAA174 /* AlamofireImage in Frameworks */ = {isa = PBXBuildFile; productRef = DB3D0FF225BAA61700EAA174 /* AlamofireImage */; };
- DB3D100D25BAA75E00EAA174 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = DB3D100F25BAA75E00EAA174 /* Localizable.strings */; };
DB427DD625BAA00100D1B89D /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB427DD525BAA00100D1B89D /* AppDelegate.swift */; };
DB427DD825BAA00100D1B89D /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB427DD725BAA00100D1B89D /* SceneDelegate.swift */; };
DB427DDD25BAA00100D1B89D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DB427DDB25BAA00100D1B89D /* Main.storyboard */; };
@@ -242,45 +230,36 @@
DB427DE225BAA00100D1B89D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DB427DE025BAA00100D1B89D /* LaunchScreen.storyboard */; };
DB427DED25BAA00100D1B89D /* MastodonTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB427DEC25BAA00100D1B89D /* MastodonTests.swift */; };
DB427DF825BAA00100D1B89D /* MastodonUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB427DF725BAA00100D1B89D /* MastodonUITests.swift */; };
- DB44384F25E8C1FA008912A2 /* CALayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB44384E25E8C1FA008912A2 /* CALayer.swift */; };
DB443CD42694627B00159B29 /* AppearanceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB443CD32694627B00159B29 /* AppearanceView.swift */; };
DB44767B260B3B8C00B66B82 /* CustomEmojiPickerInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB44767A260B3B8C00B66B82 /* CustomEmojiPickerInputView.swift */; };
DB447681260B3ED600B66B82 /* CustomEmojiPickerSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB447680260B3ED600B66B82 /* CustomEmojiPickerSection.swift */; };
DB44768B260B3F2100B66B82 /* CustomEmojiPickerItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB44768A260B3F2100B66B82 /* CustomEmojiPickerItem.swift */; };
DB447691260B406600B66B82 /* CustomEmojiPickerItemCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB447690260B406600B66B82 /* CustomEmojiPickerItemCollectionViewCell.swift */; };
DB447697260B439000B66B82 /* CustomEmojiPickerHeaderCollectionReusableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB447696260B439000B66B82 /* CustomEmojiPickerHeaderCollectionReusableView.swift */; };
- DB4481AD25EE155900BEFB67 /* Poll.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB4481AC25EE155900BEFB67 /* Poll.swift */; };
- DB4481B325EE16D000BEFB67 /* PollOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB4481B225EE16D000BEFB67 /* PollOption.swift */; };
DB4481B925EE289600BEFB67 /* UITableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB4481B825EE289600BEFB67 /* UITableView.swift */; };
- DB4481C625EE2ADA00BEFB67 /* PollSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB4481C525EE2ADA00BEFB67 /* PollSection.swift */; };
- DB4481CC25EE2AFE00BEFB67 /* PollItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB4481CB25EE2AFE00BEFB67 /* PollItem.swift */; };
DB45FAB625CA5485005A8AC7 /* UIAlertController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB45FAB525CA5485005A8AC7 /* UIAlertController.swift */; };
DB45FAD725CA6C76005A8AC7 /* UIBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB45FAD625CA6C76005A8AC7 /* UIBarButtonItem.swift */; };
- DB45FADD25CA6F6B005A8AC7 /* APIService+CoreData+MastodonUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB45FADC25CA6F6B005A8AC7 /* APIService+CoreData+MastodonUser.swift */; };
DB45FAE325CA7181005A8AC7 /* MastodonUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB45FAE225CA7181005A8AC7 /* MastodonUser.swift */; };
- DB45FAED25CA7A9A005A8AC7 /* MastodonAuthentication.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB45FAEC25CA7A9A005A8AC7 /* MastodonAuthentication.swift */; };
DB45FAF925CA80A2005A8AC7 /* APIService+CoreData+MastodonAuthentication.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB45FAF825CA80A2005A8AC7 /* APIService+CoreData+MastodonAuthentication.swift */; };
DB45FB0F25CA87D0005A8AC7 /* AuthenticationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB45FB0E25CA87D0005A8AC7 /* AuthenticationService.swift */; };
DB45FB1D25CA9D23005A8AC7 /* APIService+HomeTimeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB45FB1C25CA9D23005A8AC7 /* APIService+HomeTimeline.swift */; };
DB47229725F9EFAD00DA7F53 /* NSManagedObjectContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB47229625F9EFAD00DA7F53 /* NSManagedObjectContext.swift */; };
+ DB47AB6227CF752B00CD73C7 /* MastodonUISnapshotTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB47AB6127CF752B00CD73C7 /* MastodonUISnapshotTests.swift */; };
DB482A3F261331E8008AE74C /* UserTimelineViewModel+State.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB482A3E261331E8008AE74C /* UserTimelineViewModel+State.swift */; };
- DB482A45261335BA008AE74C /* UserTimelineViewController+Provider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB482A44261335BA008AE74C /* UserTimelineViewController+Provider.swift */; };
DB482A4B261340A7008AE74C /* APIService+UserTimeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB482A4A261340A7008AE74C /* APIService+UserTimeline.swift */; };
DB4924E226312AB200E9DB22 /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB4924E126312AB200E9DB22 /* NotificationService.swift */; };
DB4932B126F1FB5300EF46D4 /* WizardCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB4932B026F1FB5300EF46D4 /* WizardCardView.swift */; };
- DB4932B326F2054200EF46D4 /* CircleAvatarButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB4932B226F2054200EF46D4 /* CircleAvatarButton.swift */; };
DB4932B726F30F0700EF46D4 /* Array.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F20223826146553000C64BF /* Array.swift */; };
DB4932B926F31AD300EF46D4 /* BadgeButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB4932B826F31AD300EF46D4 /* BadgeButton.swift */; };
DB49A61425FF2C5600B98345 /* EmojiService.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB49A61325FF2C5600B98345 /* EmojiService.swift */; };
DB49A61F25FF32AA00B98345 /* EmojiService+CustomEmojiViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB49A61E25FF32AA00B98345 /* EmojiService+CustomEmojiViewModel.swift */; };
DB49A62525FF334C00B98345 /* EmojiService+CustomEmojiViewModel+LoadState.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB49A62425FF334C00B98345 /* EmojiService+CustomEmojiViewModel+LoadState.swift */; };
DB49A62B25FF36C700B98345 /* APIService+CustomEmoji.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB49A62A25FF36C700B98345 /* APIService+CustomEmoji.swift */; };
- DB49A63D25FF609300B98345 /* PlayerContainerView+MediaTypeIndicotorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB49A63C25FF609300B98345 /* PlayerContainerView+MediaTypeIndicotorView.swift */; };
+ DB4AA6B327BA34B6009EC082 /* CellFrameCacheContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB4AA6B227BA34B6009EC082 /* CellFrameCacheContainer.swift */; };
DB4F0963269ED06300D62E92 /* SearchResultViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB4F0962269ED06300D62E92 /* SearchResultViewController.swift */; };
DB4F0966269ED52200D62E92 /* SearchResultViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB4F0965269ED52200D62E92 /* SearchResultViewModel.swift */; };
DB4F0968269ED8AD00D62E92 /* SearchHistoryTableHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB4F0967269ED8AD00D62E92 /* SearchHistoryTableHeaderView.swift */; };
DB4F096A269EDAD200D62E92 /* SearchResultViewModel+State.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB4F0969269EDAD200D62E92 /* SearchResultViewModel+State.swift */; };
- DB4F096C269EFA2000D62E92 /* SearchResultViewController+StatusProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB4F096B269EFA2000D62E92 /* SearchResultViewController+StatusProvider.swift */; };
DB4F097526A037F500D62E92 /* SearchHistoryViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB4F097426A037F500D62E92 /* SearchHistoryViewModel.swift */; };
DB4F097B26A039FF00D62E92 /* SearchHistorySection.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB4F097A26A039FF00D62E92 /* SearchHistorySection.swift */; };
DB4F097D26A03A5B00D62E92 /* SearchHistoryItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB4F097C26A03A5B00D62E92 /* SearchHistoryItem.swift */; };
@@ -290,17 +269,14 @@
DB51D172262832380062B7A1 /* BlurHashDecode.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB51D170262832380062B7A1 /* BlurHashDecode.swift */; };
DB51D173262832380062B7A1 /* BlurHashEncode.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB51D171262832380062B7A1 /* BlurHashEncode.swift */; };
DB552D4F26BBD10C00E481F6 /* OrderedCollections in Frameworks */ = {isa = PBXBuildFile; productRef = DB552D4E26BBD10C00E481F6 /* OrderedCollections */; };
- DB564BD0269F2F83001E39A7 /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = DB564BCE269F2F83001E39A7 /* Localizable.stringsdict */; };
DB564BD3269F3B35001E39A7 /* StatusFilterService.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB564BD2269F3B35001E39A7 /* StatusFilterService.swift */; };
- DB59F0FE25EF5D96001F1DAB /* StatusProvider+UITableViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB59F0FD25EF5D96001F1DAB /* StatusProvider+UITableViewDelegate.swift */; };
- DB59F10425EF5EBC001F1DAB /* TableViewCellHeightCacheableContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB59F10325EF5EBC001F1DAB /* TableViewCellHeightCacheableContainer.swift */; };
DB59F10E25EF724F001F1DAB /* APIService+Poll.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB59F10D25EF724F001F1DAB /* APIService+Poll.swift */; };
- DB59F11825EFA35B001F1DAB /* StripProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB59F11725EFA35B001F1DAB /* StripProgressView.swift */; };
DB5B7295273112B100081888 /* FollowingListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB5B7294273112B100081888 /* FollowingListViewController.swift */; };
DB5B7298273112C800081888 /* FollowingListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB5B7297273112C800081888 /* FollowingListViewModel.swift */; };
- DB5B729A2731137900081888 /* FollowingListViewController+Provider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB5B72992731137900081888 /* FollowingListViewController+Provider.swift */; };
DB5B729C273113C200081888 /* FollowingListViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB5B729B273113C200081888 /* FollowingListViewModel+Diffable.swift */; };
DB5B729E273113F300081888 /* FollowingListViewModel+State.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB5B729D273113F300081888 /* FollowingListViewModel+State.swift */; };
+ DB603111279EB38500A935FE /* DataSourceFacade+Mute.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB603110279EB38500A935FE /* DataSourceFacade+Mute.swift */; };
+ DB603113279EBEBA00A935FE /* DataSourceFacade+Block.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB603112279EBEBA00A935FE /* DataSourceFacade+Block.swift */; };
DB6180DD263918E30018D199 /* MediaPreviewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6180DC263918E30018D199 /* MediaPreviewViewController.swift */; };
DB6180E02639194B0018D199 /* MediaPreviewPagingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6180DF2639194B0018D199 /* MediaPreviewPagingViewController.swift */; };
DB6180E326391A4C0018D199 /* ViewControllerAnimatedTransitioning.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6180E226391A4C0018D199 /* ViewControllerAnimatedTransitioning.swift */; };
@@ -314,11 +290,41 @@
DB6180F626391D580018D199 /* MediaPreviewableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6180F526391D580018D199 /* MediaPreviewableViewController.swift */; };
DB6180F826391D660018D199 /* MediaPreviewingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6180F726391D660018D199 /* MediaPreviewingViewController.swift */; };
DB6180FA26391F2E0018D199 /* MediaPreviewViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6180F926391F2E0018D199 /* MediaPreviewViewModel.swift */; };
- DB63BE7F268DD1070011D3F9 /* NotificationViewController+StatusProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB63BE7E268DD1070011D3F9 /* NotificationViewController+StatusProvider.swift */; };
+ DB63F7452799056400455B82 /* HashtagTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB63F7442799056400455B82 /* HashtagTableViewCell.swift */; };
+ DB63F74727990B0600455B82 /* DataSourceFacade+Hashtag.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB63F74627990B0600455B82 /* DataSourceFacade+Hashtag.swift */; };
+ DB63F7492799126300455B82 /* FollowerListViewController+DataSourceProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB63F7482799126300455B82 /* FollowerListViewController+DataSourceProvider.swift */; };
+ DB63F74B279914A000455B82 /* FollowingListViewController+DataSourceProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB63F74A279914A000455B82 /* FollowingListViewController+DataSourceProvider.swift */; };
+ DB63F74D27993F5B00455B82 /* SearchHistoryUserCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB63F74C27993F5B00455B82 /* SearchHistoryUserCollectionViewCell.swift */; };
+ DB63F74F2799405600455B82 /* SearchHistoryViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB63F74E2799405600455B82 /* SearchHistoryViewModel+Diffable.swift */; };
+ DB63F752279944AA00455B82 /* SearchHistorySectionHeaderCollectionReusableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB63F751279944AA00455B82 /* SearchHistorySectionHeaderCollectionReusableView.swift */; };
+ DB63F7542799491600455B82 /* DataSourceFacade+SearchHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB63F7532799491600455B82 /* DataSourceFacade+SearchHistory.swift */; };
+ DB63F756279949BD00455B82 /* Persistence+SearchHistory.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB63F755279949BD00455B82 /* Persistence+SearchHistory.swift */; };
+ DB63F75A279953F200455B82 /* SearchHistoryUserCollectionViewCell+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB63F759279953F200455B82 /* SearchHistoryUserCollectionViewCell+ViewModel.swift */; };
+ DB63F75C279956D000455B82 /* Persistence+Tag.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB63F75B279956D000455B82 /* Persistence+Tag.swift */; };
+ DB63F75E27995B3B00455B82 /* Tag+Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB63F75D27995B3B00455B82 /* Tag+Property.swift */; };
+ DB63F76227996B6600455B82 /* SearchHistoryViewController+DataSourceProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB63F76127996B6600455B82 /* SearchHistoryViewController+DataSourceProvider.swift */; };
+ DB63F764279A5E3C00455B82 /* NotificationTimelineViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB63F763279A5E3C00455B82 /* NotificationTimelineViewController.swift */; };
+ DB63F767279A5EB300455B82 /* NotificationTimelineViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB63F766279A5EB300455B82 /* NotificationTimelineViewModel.swift */; };
+ DB63F769279A5EBB00455B82 /* NotificationTimelineViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB63F768279A5EBB00455B82 /* NotificationTimelineViewModel+Diffable.swift */; };
+ DB63F76B279A5ED300455B82 /* NotificationTimelineViewModel+LoadOldestState.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB63F76A279A5ED300455B82 /* NotificationTimelineViewModel+LoadOldestState.swift */; };
+ DB63F76F279A7D1100455B82 /* NotificationTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB63F76E279A7D1100455B82 /* NotificationTableViewCell.swift */; };
+ DB63F771279A858500455B82 /* Persistence+Notification.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB63F770279A858500455B82 /* Persistence+Notification.swift */; };
+ DB63F773279A87DC00455B82 /* Notification+Property.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB63F772279A87DC00455B82 /* Notification+Property.swift */; };
+ DB63F775279A997D00455B82 /* NotificationTableViewCell+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB63F774279A997D00455B82 /* NotificationTableViewCell+ViewModel.swift */; };
+ DB63F777279A9A2A00455B82 /* NotificationView+Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB63F776279A9A2A00455B82 /* NotificationView+Configuration.swift */; };
+ DB63F779279ABF9C00455B82 /* DataSourceFacade+Reblog.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB63F778279ABF9C00455B82 /* DataSourceFacade+Reblog.swift */; };
+ DB63F77B279ACAE500455B82 /* DataSourceFacade+Favorite.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB63F77A279ACAE500455B82 /* DataSourceFacade+Favorite.swift */; };
DB647C5926F1EA2700F7F82C /* WizardPreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB647C5826F1EA2700F7F82C /* WizardPreference.swift */; };
+ DB65C63727A2AF6C008BAC2E /* ReportItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB65C63627A2AF6C008BAC2E /* ReportItem.swift */; };
DB66728C25F9F8DC00D60309 /* ComposeViewModel+DataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB66728B25F9F8DC00D60309 /* ComposeViewModel+DataSource.swift */; };
DB66729625F9F91600D60309 /* ComposeStatusSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB66729525F9F91600D60309 /* ComposeStatusSection.swift */; };
DB66729C25F9F91F00D60309 /* ComposeStatusItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB66729B25F9F91F00D60309 /* ComposeStatusItem.swift */; };
+ DB6746E7278ED633008A6B94 /* MastodonAuthenticationBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBC50C0278ED49200AF0CC6 /* MastodonAuthenticationBox.swift */; };
+ DB6746E8278ED639008A6B94 /* MastodonAuthenticationBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBC50C0278ED49200AF0CC6 /* MastodonAuthenticationBox.swift */; };
+ DB6746E9278ED63F008A6B94 /* MastodonAuthenticationBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBC50C0278ED49200AF0CC6 /* MastodonAuthenticationBox.swift */; };
+ DB6746EB278ED8B0008A6B94 /* PollOptionView+Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6746EA278ED8B0008A6B94 /* PollOptionView+Configuration.swift */; };
+ DB6746ED278F45F0008A6B94 /* AutoGenerateProtocolRelayDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6746EC278F45F0008A6B94 /* AutoGenerateProtocolRelayDelegate.swift */; };
+ DB6746F0278F463B008A6B94 /* AutoGenerateProtocolDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6746EF278F463B008A6B94 /* AutoGenerateProtocolDelegate.swift */; };
DB67D08427312970006A36CF /* APIService+Following.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB67D08327312970006A36CF /* APIService+Following.swift */; };
DB67D08627312E67006A36CF /* WizardViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB67D08527312E67006A36CF /* WizardViewController.swift */; };
DB67D089273256D7006A36CF /* StoreReviewPreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB67D088273256D7006A36CF /* StoreReviewPreference.swift */; };
@@ -328,28 +334,31 @@
DB6804832637CD4C00430867 /* AppShared.h in Headers */ = {isa = PBXBuildFile; fileRef = DB6804812637CD4C00430867 /* AppShared.h */; settings = {ATTRIBUTES = (Public, ); }; };
DB6804862637CD4C00430867 /* AppShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB68047F2637CD4C00430867 /* AppShared.framework */; };
DB6804872637CD4C00430867 /* AppShared.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DB68047F2637CD4C00430867 /* AppShared.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- DB6804922637CD8700430867 /* AppName.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6804912637CD8700430867 /* AppName.swift */; };
- DB6804A52637CDCC00430867 /* AppShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB68047F2637CD4C00430867 /* AppShared.framework */; };
DB6804D12637CE4700430867 /* UserDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6804D02637CE4700430867 /* UserDefaults.swift */; };
DB6804FD2637CFEC00430867 /* AppSecret.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6804FC2637CFEC00430867 /* AppSecret.swift */; };
DB6805102637D0F800430867 /* KeychainAccess in Frameworks */ = {isa = PBXBuildFile; productRef = DB68050F2637D0F800430867 /* KeychainAccess */; };
- DB6805262637D7DD00430867 /* AppShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB68047F2637CD4C00430867 /* AppShared.framework */; };
DB68586425E619B700F0A850 /* NSKeyValueObservation.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB68586325E619B700F0A850 /* NSKeyValueObservation.swift */; };
DB68A04A25E9027700CFDF14 /* AdaptiveStatusBarStyleNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB68A04925E9027700CFDF14 /* AdaptiveStatusBarStyleNavigationController.swift */; };
DB68A05D25E9055900CFDF14 /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = DB68A05C25E9055900CFDF14 /* Settings.bundle */; };
DB68A06325E905E000CFDF14 /* UIApplication.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB68A06225E905E000CFDF14 /* UIApplication.swift */; };
+ DB697DD1278F4871004EF2F7 /* AutoGenerateTableViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB697DD0278F4871004EF2F7 /* AutoGenerateTableViewDelegate.swift */; };
+ DB697DD4278F4927004EF2F7 /* StatusTableViewCellDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB697DD3278F4927004EF2F7 /* StatusTableViewCellDelegate.swift */; };
+ DB697DD6278F4C29004EF2F7 /* DataSourceProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB697DD5278F4C29004EF2F7 /* DataSourceProvider.swift */; };
+ DB697DD9278F4CED004EF2F7 /* HomeTimelineViewController+DataSourceProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB697DD8278F4CED004EF2F7 /* HomeTimelineViewController+DataSourceProvider.swift */; };
+ DB697DDB278F4DE3004EF2F7 /* DataSourceProvider+StatusTableViewCellDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB697DDA278F4DE3004EF2F7 /* DataSourceProvider+StatusTableViewCellDelegate.swift */; };
+ DB697DDD278F521D004EF2F7 /* DataSourceFacade.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB697DDC278F521D004EF2F7 /* DataSourceFacade.swift */; };
+ DB697DDF278F524F004EF2F7 /* DataSourceFacade+Profile.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB697DDE278F524F004EF2F7 /* DataSourceFacade+Profile.swift */; };
+ DB697DE1278F5296004EF2F7 /* DataSourceFacade+Model.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB697DE0278F5296004EF2F7 /* DataSourceFacade+Model.swift */; };
DB6B35182601FA3400DC1E11 /* MastodonAttachmentService.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6B35172601FA3400DC1E11 /* MastodonAttachmentService.swift */; };
DB6B351E2601FAEE00DC1E11 /* ComposeStatusAttachmentCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6B351D2601FAEE00DC1E11 /* ComposeStatusAttachmentCollectionViewCell.swift */; };
DB6B74EF272FB55000C70B6E /* FollowerListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6B74EE272FB55000C70B6E /* FollowerListViewController.swift */; };
DB6B74F2272FB67600C70B6E /* FollowerListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6B74F1272FB67600C70B6E /* FollowerListViewModel.swift */; };
DB6B74F4272FBAE700C70B6E /* FollowerListViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6B74F3272FBAE700C70B6E /* FollowerListViewModel+Diffable.swift */; };
DB6B74F6272FBCDB00C70B6E /* FollowerListViewModel+State.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6B74F5272FBCDB00C70B6E /* FollowerListViewModel+State.swift */; };
- DB6B74F8272FBFB100C70B6E /* FollowerListViewController+Provider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6B74F7272FBFB100C70B6E /* FollowerListViewController+Provider.swift */; };
DB6B74FA272FC2B500C70B6E /* APIService+Follower.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6B74F9272FC2B500C70B6E /* APIService+Follower.swift */; };
DB6B74FC272FF55800C70B6E /* UserSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6B74FB272FF55800C70B6E /* UserSection.swift */; };
DB6B74FE272FF59000C70B6E /* UserItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6B74FD272FF59000C70B6E /* UserItem.swift */; };
DB6B7500272FF73800C70B6E /* UserTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6B74FF272FF73800C70B6E /* UserTableViewCell.swift */; };
- DB6B75022730060700C70B6E /* UserProviderFacade+UITableViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6B75012730060700C70B6E /* UserProviderFacade+UITableViewDelegate.swift */; };
DB6B750427300B4000C70B6E /* TimelineFooterTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6B750327300B4000C70B6E /* TimelineFooterTableViewCell.swift */; };
DB6C8C0F25F0A6AE00AAA452 /* Mastodon+Entity+Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6C8C0E25F0A6AE00AAA452 /* Mastodon+Entity+Error.swift */; };
DB6D1B3D2636857500ACB481 /* AppearancePreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6D1B3C2636857500ACB481 /* AppearancePreference.swift */; };
@@ -369,18 +378,12 @@
DB6F5E38264E994A009108F4 /* AutoCompleteTopChevronView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6F5E37264E994A009108F4 /* AutoCompleteTopChevronView.swift */; };
DB71C7CB271D5A0300BE3819 /* LineChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB71C7CA271D5A0300BE3819 /* LineChartView.swift */; };
DB71C7CD271D7F4300BE3819 /* CurveAlgorithm.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB71C7CC271D7F4300BE3819 /* CurveAlgorithm.swift */; };
- DB71FD2C25F86A5100512AE1 /* AvatarStackContainerButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB71FD2B25F86A5100512AE1 /* AvatarStackContainerButton.swift */; };
- DB71FD3625F8A16C00512AE1 /* APIService+Persist+PersistMemo.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB71FD3525F8A16C00512AE1 /* APIService+Persist+PersistMemo.swift */; };
- DB71FD3C25F8A1C500512AE1 /* APIService+Persist+PersistCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB71FD3B25F8A1C500512AE1 /* APIService+Persist+PersistCache.swift */; };
- DB71FD4625F8C6D200512AE1 /* StatusProvider+UITableViewDataSourcePrefetching.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB71FD4525F8C6D200512AE1 /* StatusProvider+UITableViewDataSourcePrefetching.swift */; };
- DB71FD4C25F8C80E00512AE1 /* StatusPrefetchingService.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB71FD4B25F8C80E00512AE1 /* StatusPrefetchingService.swift */; };
DB71FD5225F8CCAA00512AE1 /* APIService+Status.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB71FD5125F8CCAA00512AE1 /* APIService+Status.swift */; };
DB72601C25E36A2100235243 /* MastodonServerRulesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB72601B25E36A2100235243 /* MastodonServerRulesViewController.swift */; };
DB72602725E36A6F00235243 /* MastodonServerRulesViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB72602625E36A6F00235243 /* MastodonServerRulesViewModel.swift */; };
DB7274F4273BB9B200577D95 /* ListBatchFetchViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB7274F3273BB9B200577D95 /* ListBatchFetchViewModel.swift */; };
DB73B490261F030A002E9E9F /* SafariActivity.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB73B48F261F030A002E9E9F /* SafariActivity.swift */; };
DB73BF3B2711885500781945 /* UserDefaults+Notification.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB73BF3A2711885500781945 /* UserDefaults+Notification.swift */; };
- DB73BF4127118B6D00781945 /* Instance.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB73BF4027118B6D00781945 /* Instance.swift */; };
DB73BF43271192BB00781945 /* InstanceService.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB73BF42271192BB00781945 /* InstanceService.swift */; };
DB73BF45271195AC00781945 /* APIService+CoreData+Instance.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB73BF44271195AC00781945 /* APIService+CoreData+Instance.swift */; };
DB73BF47271199CA00781945 /* Instance.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB73BF46271199CA00781945 /* Instance.swift */; };
@@ -391,27 +394,14 @@
DB789A1225F9F2CC0071ACA0 /* ComposeViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB789A1125F9F2CC0071ACA0 /* ComposeViewModel.swift */; };
DB7F48452620241000796008 /* ProfileHeaderViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB7F48442620241000796008 /* ProfileHeaderViewModel.swift */; };
DB8190C62601FF0400020C08 /* AttachmentContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB8190C52601FF0400020C08 /* AttachmentContainerView.swift */; };
+ DB8481152788121200BBEABA /* MastodonRegisterTextFieldTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB8481142788121200BBEABA /* MastodonRegisterTextFieldTableViewCell.swift */; };
+ DB84811727883C2600BBEABA /* MastodonRegisterPasswordHintTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB84811627883C2600BBEABA /* MastodonRegisterPasswordHintTableViewCell.swift */; };
DB852D1926FAEB6B00FC9D81 /* SidebarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB852D1826FAEB6B00FC9D81 /* SidebarViewController.swift */; };
DB852D1C26FB021500FC9D81 /* RootSplitViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB852D1B26FB021500FC9D81 /* RootSplitViewController.swift */; };
DB852D1F26FB037800FC9D81 /* SidebarViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB852D1E26FB037800FC9D81 /* SidebarViewModel.swift */; };
DB87D4452609BE0500D12C0D /* ComposeStatusPollOptionCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB87D4442609BE0500D12C0D /* ComposeStatusPollOptionCollectionViewCell.swift */; };
- DB87D44B2609C11900D12C0D /* PollOptionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB87D44A2609C11900D12C0D /* PollOptionView.swift */; };
DB87D4512609CF1E00D12C0D /* ComposeStatusPollOptionAppendEntryCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB87D4502609CF1E00D12C0D /* ComposeStatusPollOptionAppendEntryCollectionViewCell.swift */; };
- DB87D4572609DD5300D12C0D /* DeleteBackwardResponseTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB87D4562609DD5300D12C0D /* DeleteBackwardResponseTextField.swift */; };
- DB89B9F725C10FD0008580ED /* CoreDataStack.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB89B9EE25C10FD0008580ED /* CoreDataStack.framework */; };
- DB89B9FE25C10FD0008580ED /* CoreDataStackTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB89B9FD25C10FD0008580ED /* CoreDataStackTests.swift */; };
- DB89BA0025C10FD0008580ED /* CoreDataStack.h in Headers */ = {isa = PBXBuildFile; fileRef = DB89B9F025C10FD0008580ED /* CoreDataStack.h */; settings = {ATTRIBUTES = (Public, ); }; };
- DB89BA0325C10FD0008580ED /* CoreDataStack.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB89B9EE25C10FD0008580ED /* CoreDataStack.framework */; };
- DB89BA0425C10FD0008580ED /* CoreDataStack.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DB89B9EE25C10FD0008580ED /* CoreDataStack.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- DB89BA1225C1105C008580ED /* CoreDataStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB89BA1125C1105C008580ED /* CoreDataStack.swift */; };
- DB89BA1B25C1107F008580ED /* Collection.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB89BA1825C1107F008580ED /* Collection.swift */; };
- DB89BA1C25C1107F008580ED /* NSManagedObjectContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB89BA1925C1107F008580ED /* NSManagedObjectContext.swift */; };
- DB89BA1D25C1107F008580ED /* URL.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB89BA1A25C1107F008580ED /* URL.swift */; };
- DB89BA2725C110B4008580ED /* Status.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB89BA2625C110B4008580ED /* Status.swift */; };
- DB89BA3725C1145C008580ED /* CoreData.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = DB89BA3525C1145C008580ED /* CoreData.xcdatamodeld */; };
- DB89BA4325C1165F008580ED /* NetworkUpdatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB89BA4125C1165F008580ED /* NetworkUpdatable.swift */; };
- DB89BA4425C1165F008580ED /* Managed.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB89BA4225C1165F008580ED /* Managed.swift */; };
- DB8AF52525C131D1002E6C99 /* MastodonUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB8AF52425C131D1002E6C99 /* MastodonUser.swift */; };
+ DB894CC427A5490600684B74 /* BlurhashImageCacheService.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB894CC327A5490600684B74 /* BlurhashImageCacheService.swift */; };
DB8AF52E25C13561002E6C99 /* ViewStateStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB8AF52B25C13561002E6C99 /* ViewStateStore.swift */; };
DB8AF52F25C13561002E6C99 /* DocumentStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB8AF52C25C13561002E6C99 /* DocumentStore.swift */; };
DB8AF53025C13561002E6C99 /* AppContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB8AF52D25C13561002E6C99 /* AppContext.swift */; };
@@ -419,14 +409,11 @@
DB8AF54525C13647002E6C99 /* NeedsDependency.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB8AF54325C13647002E6C99 /* NeedsDependency.swift */; };
DB8AF55025C13703002E6C99 /* MainTabBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB8AF54F25C13703002E6C99 /* MainTabBarController.swift */; };
DB8AF55D25C138B7002E6C99 /* UIViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB8AF55C25C138B7002E6C99 /* UIViewController.swift */; };
- DB8AF56825C13E2A002E6C99 /* HomeTimelineIndex.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB8AF56725C13E2A002E6C99 /* HomeTimelineIndex.swift */; };
+ DB8F7076279E954700E1225B /* DataSourceFacade+Follow.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB8F7075279E954700E1225B /* DataSourceFacade+Follow.swift */; };
DB8FABC726AEC7B2008E5AF4 /* Intents.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB8FAB9E26AEC3A2008E5AF4 /* Intents.framework */; };
DB8FABCA26AEC7B2008E5AF4 /* IntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB8FABC926AEC7B2008E5AF4 /* IntentHandler.swift */; };
DB8FABCE26AEC7B2008E5AF4 /* MastodonIntent.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = DB8FABC626AEC7B2008E5AF4 /* MastodonIntent.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
- DB8FABD726AEC873008E5AF4 /* AppShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB68047F2637CD4C00430867 /* AppShared.framework */; };
- DB8FABDC26AEC87B008E5AF4 /* CoreDataStack.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB89B9EE25C10FD0008580ED /* CoreDataStack.framework */; };
DB9282B225F3222800823B15 /* PickServerEmptyStateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB9282B125F3222800823B15 /* PickServerEmptyStateView.swift */; };
- DB92CF7225E7BB98002C1017 /* PollOptionTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB92CF7125E7BB98002C1017 /* PollOptionTableViewCell.swift */; };
DB938EE62623F50700E5B6C1 /* ThreadViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB938EE52623F50700E5B6C1 /* ThreadViewController.swift */; };
DB938EED2623F79B00E5B6C1 /* ThreadViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB938EEC2623F79B00E5B6C1 /* ThreadViewModel.swift */; };
DB938F0326240EA300E5B6C1 /* CachedThreadViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB938F0226240EA300E5B6C1 /* CachedThreadViewModel.swift */; };
@@ -434,15 +421,25 @@
DB938F0F2624119800E5B6C1 /* ThreadViewModel+LoadThreadState.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB938F0E2624119800E5B6C1 /* ThreadViewModel+LoadThreadState.swift */; };
DB938F1526241FDF00E5B6C1 /* APIService+Thread.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB938F1426241FDF00E5B6C1 /* APIService+Thread.swift */; };
DB938F1F2624382F00E5B6C1 /* ThreadViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB938F1E2624382F00E5B6C1 /* ThreadViewModel+Diffable.swift */; };
- DB938F25262438D600E5B6C1 /* ThreadViewController+Provider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB938F24262438D600E5B6C1 /* ThreadViewController+Provider.swift */; };
DB938F3326243D6200E5B6C1 /* TimelineTopLoaderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB938F3226243D6200E5B6C1 /* TimelineTopLoaderTableViewCell.swift */; };
- DB97131F2666078B00BD1E90 /* Date.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB97131E2666078B00BD1E90 /* Date.swift */; };
DB98336B25C9420100AD9700 /* APIService+App.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98336A25C9420100AD9700 /* APIService+App.swift */; };
DB98337125C9443200AD9700 /* APIService+Authentication.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98337025C9443200AD9700 /* APIService+Authentication.swift */; };
DB98337F25C9452D00AD9700 /* APIService+APIError.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98337E25C9452D00AD9700 /* APIService+APIError.swift */; };
- DB98338725C945ED00AD9700 /* Strings.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98338525C945ED00AD9700 /* Strings.swift */; };
- DB98338825C945ED00AD9700 /* Assets.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98338625C945ED00AD9700 /* Assets.swift */; };
DB98339C25C96DE600AD9700 /* APIService+Account.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98339B25C96DE600AD9700 /* APIService+Account.swift */; };
+ DB98EB4727B0DFAA0082E365 /* ReportViewModel+State.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98EB4627B0DFAA0082E365 /* ReportViewModel+State.swift */; };
+ DB98EB4927B0F0CD0082E365 /* ReportStatusTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98EB4827B0F0CD0082E365 /* ReportStatusTableViewCell.swift */; };
+ DB98EB4C27B0F2BC0082E365 /* ReportStatusTableViewCell+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98EB4B27B0F2BC0082E365 /* ReportStatusTableViewCell+ViewModel.swift */; };
+ DB98EB5327B0F9890082E365 /* ReportHeadlineTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98EB5227B0F9890082E365 /* ReportHeadlineTableViewCell.swift */; };
+ DB98EB5627B0FF1B0082E365 /* ReportViewControllerAppearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98EB5527B0FF1B0082E365 /* ReportViewControllerAppearance.swift */; };
+ DB98EB5927B109890082E365 /* ReportSupplementaryViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98EB5827B109890082E365 /* ReportSupplementaryViewController.swift */; };
+ DB98EB5C27B10A730082E365 /* ReportSupplementaryViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98EB5B27B10A730082E365 /* ReportSupplementaryViewModel.swift */; };
+ DB98EB5E27B10A7A0082E365 /* ReportSupplementaryViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98EB5D27B10A7A0082E365 /* ReportSupplementaryViewModel+Diffable.swift */; };
+ DB98EB6027B10E150082E365 /* ReportCommentTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98EB5F27B10E150082E365 /* ReportCommentTableViewCell.swift */; };
+ DB98EB6227B215EB0082E365 /* ReportResultViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98EB6127B215EB0082E365 /* ReportResultViewController.swift */; };
+ DB98EB6527B216500082E365 /* ReportResultViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98EB6427B216500082E365 /* ReportResultViewModel.swift */; };
+ DB98EB6727B216560082E365 /* ReportResultViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98EB6627B216560082E365 /* ReportResultViewModel+Diffable.swift */; };
+ DB98EB6927B21A7C0082E365 /* ReportResultActionTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98EB6827B21A7C0082E365 /* ReportResultActionTableViewCell.swift */; };
+ DB98EB6B27B243470082E365 /* SettingsAppearanceTableViewCell+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98EB6A27B243470082E365 /* SettingsAppearanceTableViewCell+ViewModel.swift */; };
DB9A486C26032AC1008B817C /* AttachmentContainerView+EmptyStateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB9A486B26032AC1008B817C /* AttachmentContainerView+EmptyStateView.swift */; };
DB9A487E2603456B008B817C /* UITextView+Placeholder in Frameworks */ = {isa = PBXBuildFile; productRef = DB9A487D2603456B008B817C /* UITextView+Placeholder */; };
DB9A488A26034D40008B817C /* ComposeViewModel+PublishState.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB9A488926034D40008B817C /* ComposeViewModel+PublishState.swift */; };
@@ -451,10 +448,6 @@
DB9D6BE925E4F5340051B173 /* SearchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB9D6BE825E4F5340051B173 /* SearchViewController.swift */; };
DB9D6BF825E4F5690051B173 /* NotificationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB9D6BF725E4F5690051B173 /* NotificationViewController.swift */; };
DB9D6BFF25E4F5940051B173 /* ProfileViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB9D6BFE25E4F5940051B173 /* ProfileViewController.swift */; };
- DB9D6C0E25E4F9780051B173 /* MosaicImageViewContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB9D6C0D25E4F9780051B173 /* MosaicImageViewContainer.swift */; };
- DB9D6C2425E502C60051B173 /* MosaicImageViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB9D6C2225E502C60051B173 /* MosaicImageViewModel.swift */; };
- DB9D6C2E25E504AC0051B173 /* Attachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB9D6C2D25E504AC0051B173 /* Attachment.swift */; };
- DB9D6C3825E508BE0051B173 /* Attachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB9D6C3725E508BE0051B173 /* Attachment.swift */; };
DB9D7C21269824B80054B3DF /* APIService+Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB9D7C20269824B80054B3DF /* APIService+Filter.swift */; };
DB9E0D6F25EE008500CFDD76 /* UIInterpolatingMotionEffect.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB9E0D6E25EE008500CFDD76 /* UIInterpolatingMotionEffect.swift */; };
DB9F58EC26EF435000E7BBE9 /* AccountViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB9F58EB26EF435000E7BBE9 /* AccountViewController.swift */; };
@@ -462,7 +455,6 @@
DB9F58F126EF512300E7BBE9 /* AccountListTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB9F58F026EF512300E7BBE9 /* AccountListTableViewCell.swift */; };
DBA088DF26958164003EB4B2 /* UserFetchedResultsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBA088DE26958164003EB4B2 /* UserFetchedResultsController.swift */; };
DBA0A11325FB3FC10079C110 /* ComposeToolbarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBA0A11225FB3FC10079C110 /* ComposeToolbarView.swift */; };
- DBA1DB80268F84F80052DB59 /* NotificationType.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBA1DB7F268F84F80052DB59 /* NotificationType.swift */; };
DBA465932696B495002B41DB /* APIService+WebFinger.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBA465922696B495002B41DB /* APIService+WebFinger.swift */; };
DBA465952696E387002B41DB /* AppPreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBA465942696E387002B41DB /* AppPreference.swift */; };
DBA4B0F626C269880077136E /* Intents.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = DBA4B0F926C269880077136E /* Intents.stringsdict */; };
@@ -476,31 +468,23 @@
DBA5E7AB263BD3F5004598BB /* TimelineTableViewCellContextMenuConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBA5E7AA263BD3F5004598BB /* TimelineTableViewCellContextMenuConfiguration.swift */; };
DBA94434265CBB5300C537E1 /* ProfileFieldSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBA94433265CBB5300C537E1 /* ProfileFieldSection.swift */; };
DBA94436265CBB7400C537E1 /* ProfileFieldItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBA94435265CBB7400C537E1 /* ProfileFieldItem.swift */; };
- DBA94438265CBD4D00C537E1 /* ProfileHeaderViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBA94437265CBD4D00C537E1 /* ProfileHeaderViewModel+Diffable.swift */; };
- DBA9443A265CC0FC00C537E1 /* Fields.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBA94439265CC0FC00C537E1 /* Fields.swift */; };
DBA9443E265CFA6400C537E1 /* ProfileFieldCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBA9443D265CFA6400C537E1 /* ProfileFieldCollectionViewCell.swift */; };
DBA94440265D137600C537E1 /* Mastodon+Entity+Field.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBA9443F265D137600C537E1 /* Mastodon+Entity+Field.swift */; };
DBABE3EC25ECAC4B00879EE5 /* WelcomeIllustrationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBABE3EB25ECAC4B00879EE5 /* WelcomeIllustrationView.swift */; };
DBAC6483267D0B21007FE9FD /* DifferenceKit in Frameworks */ = {isa = PBXBuildFile; productRef = DBAC6482267D0B21007FE9FD /* DifferenceKit */; };
- DBAC6485267D0F9E007FE9FD /* StatusNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAC6484267D0F9E007FE9FD /* StatusNode.swift */; };
- DBAC6488267D388B007FE9FD /* ASTableNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAC6487267D388B007FE9FD /* ASTableNode.swift */; };
- DBAC648F267DC84D007FE9FD /* TableNodeDiffableDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAC648E267DC84D007FE9FD /* TableNodeDiffableDataSource.swift */; };
- DBAC6497267DECCB007FE9FD /* TimelineMiddleLoaderNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAC6496267DECCB007FE9FD /* TimelineMiddleLoaderNode.swift */; };
- DBAC6499267DF2C4007FE9FD /* TimelineBottomLoaderNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAC6498267DF2C4007FE9FD /* TimelineBottomLoaderNode.swift */; };
- DBAC649B267DF8C8007FE9FD /* ActivityIndicatorNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAC649A267DF8C8007FE9FD /* ActivityIndicatorNode.swift */; };
DBAC649E267DFE43007FE9FD /* DiffableDataSources in Frameworks */ = {isa = PBXBuildFile; productRef = DBAC649D267DFE43007FE9FD /* DiffableDataSources */; };
DBAC64A1267E6D02007FE9FD /* Fuzi in Frameworks */ = {isa = PBXBuildFile; productRef = DBAC64A0267E6D02007FE9FD /* Fuzi */; };
- DBAE3F682615DD60004B8251 /* UserProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAE3F672615DD60004B8251 /* UserProvider.swift */; };
- DBAE3F822615DDA3004B8251 /* ProfileViewController+UserProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAE3F812615DDA3004B8251 /* ProfileViewController+UserProvider.swift */; };
- DBAE3F882615DDF4004B8251 /* UserProviderFacade.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAE3F872615DDF4004B8251 /* UserProviderFacade.swift */; };
DBAE3F8E2616E0B1004B8251 /* APIService+Block.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAE3F8D2616E0B1004B8251 /* APIService+Block.swift */; };
DBAE3F942616E28B004B8251 /* APIService+Follow.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAE3F932616E28B004B8251 /* APIService+Follow.swift */; };
DBAE3F9E2616E308004B8251 /* APIService+Mute.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAE3F9D2616E308004B8251 /* APIService+Mute.swift */; };
DBAE3FAF26172FC0004B8251 /* RemoteProfileViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAE3FAE26172FC0004B8251 /* RemoteProfileViewModel.swift */; };
- DBAEDE5C267A058D00D25FF5 /* BlurhashImageCacheService.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAEDE5B267A058D00D25FF5 /* BlurhashImageCacheService.swift */; };
- DBAFB7352645463500371D5F /* Emojis.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAFB7342645463500371D5F /* Emojis.swift */; };
DBB3BA2A26A81C020004F2D4 /* FLAnimatedImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBB3BA2926A81C020004F2D4 /* FLAnimatedImageView.swift */; };
DBB3BA2B26A81D060004F2D4 /* FLAnimatedImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBB3BA2926A81C020004F2D4 /* FLAnimatedImageView.swift */; };
+ DBB45B5627B39FC9002DC5A7 /* MediaPreviewVideoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBB45B5527B39FC9002DC5A7 /* MediaPreviewVideoViewController.swift */; };
+ DBB45B5927B39FE4002DC5A7 /* MediaPreviewVideoViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBB45B5827B39FE4002DC5A7 /* MediaPreviewVideoViewModel.swift */; };
+ DBB45B5B27B3A109002DC5A7 /* MediaPreviewTransitionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBB45B5A27B3A109002DC5A7 /* MediaPreviewTransitionViewController.swift */; };
+ DBB45B6027B50A4F002DC5A7 /* RecommendAccountItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBB45B5F27B50A4F002DC5A7 /* RecommendAccountItem.swift */; };
+ DBB45B6227B51112002DC5A7 /* SuggestionAccountViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBB45B6127B51112002DC5A7 /* SuggestionAccountViewModel+Diffable.swift */; };
DBB525082611EAC0002F1F29 /* Tabman in Frameworks */ = {isa = PBXBuildFile; productRef = DBB525072611EAC0002F1F29 /* Tabman */; };
DBB5250E2611EBAF002F1F29 /* ProfileSegmentedViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBB5250D2611EBAF002F1F29 /* ProfileSegmentedViewController.swift */; };
DBB525212611EBD6002F1F29 /* ProfilePagingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBB525202611EBD6002F1F29 /* ProfilePagingViewController.swift */; };
@@ -517,19 +501,12 @@
DBB8AB4826AED09C00F6D281 /* MastodonSDK in Frameworks */ = {isa = PBXBuildFile; productRef = DBB8AB4726AED09C00F6D281 /* MastodonSDK */; };
DBB8AB4A26AED0B500F6D281 /* APIService.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBB8AB4926AED0B500F6D281 /* APIService.swift */; };
DBB8AB4C26AED11300F6D281 /* APIService+APIError.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98337E25C9452D00AD9700 /* APIService+APIError.swift */; };
- DBB8AB4D26AED12B00F6D281 /* Strings.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98338525C945ED00AD9700 /* Strings.swift */; };
- DBB8AB4E26AED12E00F6D281 /* Assets.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98338625C945ED00AD9700 /* Assets.swift */; };
DBB8AB4F26AED13F00F6D281 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DB427DDE25BAA00100D1B89D /* Assets.xcassets */; };
- DBB8AB5026AED14400F6D281 /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = DB564BCE269F2F83001E39A7 /* Localizable.stringsdict */; };
- DBB8AB5126AED14600F6D281 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = DB3D100F25BAA75E00EAA174 /* Localizable.strings */; };
DBB8AB5226AED1B300F6D281 /* APIService+Status+Publish.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBFEF07A26A6BCE8006D7ED1 /* APIService+Status+Publish.swift */; };
- DBB8AB5326AED25100F6D281 /* MastodonAuthenticationBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBFEF07626A691FB006D7ED1 /* MastodonAuthenticationBox.swift */; };
DBB9759C262462E1004620BD /* ThreadMetaView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBB9759B262462E1004620BD /* ThreadMetaView.swift */; };
DBBC24A826A52F9000398BB9 /* ComposeToolbarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBC24A726A52F9000398BB9 /* ComposeToolbarView.swift */; };
DBBC24AA26A5301B00398BB9 /* MastodonSDK in Frameworks */ = {isa = PBXBuildFile; productRef = DBBC24A926A5301B00398BB9 /* MastodonSDK */; };
DBBC24AC26A53D9300398BB9 /* ComposeStatusContentTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBC24AB26A53D9300398BB9 /* ComposeStatusContentTableViewCell.swift */; };
- DBBC24AE26A53DC100398BB9 /* ReplicaStatusView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBC24AD26A53DC100398BB9 /* ReplicaStatusView.swift */; };
- DBBC24B526A540AE00398BB9 /* AvatarConfigurableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBC24B426A540AE00398BB9 /* AvatarConfigurableView.swift */; };
DBBC24B826A5421800398BB9 /* CommonOSLog in Frameworks */ = {isa = PBXBuildFile; productRef = DBBC24B726A5421800398BB9 /* CommonOSLog */; };
DBBC24BC26A542F500398BB9 /* ThemeService.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBC24BB26A542F500398BB9 /* ThemeService.swift */; };
DBBC24C026A5443100398BB9 /* MastodonTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBC24BE26A5443100398BB9 /* MastodonTheme.swift */; };
@@ -540,10 +517,8 @@
DBBC24C826A5456400398BB9 /* ThemeService.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBC24BB26A542F500398BB9 /* ThemeService.swift */; };
DBBC24C926A5456400398BB9 /* MastodonTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBC24BE26A5443100398BB9 /* MastodonTheme.swift */; };
DBBC24CB26A546C000398BB9 /* ThemePreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBD376AB2692ECDB007FEC24 /* ThemePreference.swift */; };
- DBBC24CD26A5471E00398BB9 /* MastodonExtension in Frameworks */ = {isa = PBXBuildFile; productRef = DBBC24CC26A5471E00398BB9 /* MastodonExtension */; };
DBBC24CF26A547AE00398BB9 /* ThemeService+Appearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBC24CE26A547AE00398BB9 /* ThemeService+Appearance.swift */; };
DBBC24D126A5484F00398BB9 /* UITextView+Placeholder in Frameworks */ = {isa = PBXBuildFile; productRef = DBBC24D026A5484F00398BB9 /* UITextView+Placeholder */; };
- DBBC24D226A5488600398BB9 /* AvatarConfigurableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBC24B426A540AE00398BB9 /* AvatarConfigurableView.swift */; };
DBBC24DC26A54BCB00398BB9 /* MastodonRegex.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBC24D626A54BCB00398BB9 /* MastodonRegex.swift */; };
DBBC24DE26A54BCB00398BB9 /* MastodonMetricFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBC24D826A54BCB00398BB9 /* MastodonMetricFormatter.swift */; };
DBBE1B4525F3474B0081417A /* MastodonPickServerAppearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBE1B4425F3474B0081417A /* MastodonPickServerAppearance.swift */; };
@@ -557,26 +532,10 @@
DBC6461826A170AB00B0E31B /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DBC6461626A170AB00B0E31B /* MainInterface.storyboard */; };
DBC6461C26A170AB00B0E31B /* ShareActionExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = DBC6461226A170AB00B0E31B /* ShareActionExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
DBC6462326A1712000B0E31B /* ShareViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBC6462226A1712000B0E31B /* ShareViewModel.swift */; };
- DBC6462526A1720B00B0E31B /* MastodonUI in Frameworks */ = {isa = PBXBuildFile; productRef = DBC6462426A1720B00B0E31B /* MastodonUI */; };
- DBC6462626A1736000B0E31B /* Localizable.stringsdict in Resources */ = {isa = PBXBuildFile; fileRef = DB564BCE269F2F83001E39A7 /* Localizable.stringsdict */; };
- DBC6462726A1736000B0E31B /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = DB3D100F25BAA75E00EAA174 /* Localizable.strings */; };
DBC6462826A1736300B0E31B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DB427DDE25BAA00100D1B89D /* Assets.xcassets */; };
- DBC6462926A1736700B0E31B /* Strings.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98338525C945ED00AD9700 /* Strings.swift */; };
- DBC6462B26A1738900B0E31B /* MastodonUI in Frameworks */ = {isa = PBXBuildFile; productRef = DBC6462A26A1738900B0E31B /* MastodonUI */; };
- DBC6462C26A176B000B0E31B /* Assets.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98338625C945ED00AD9700 /* Assets.swift */; };
- DBC6463326A195DB00B0E31B /* AppShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB68047F2637CD4C00430867 /* AppShared.framework */; };
- DBC6463726A195DB00B0E31B /* CoreDataStack.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB89B9EE25C10FD0008580ED /* CoreDataStack.framework */; };
DBC7A672260C897100E57475 /* StatusContentWarningEditorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBC7A671260C897100E57475 /* StatusContentWarningEditorView.swift */; };
DBC7A67C260DFADE00E57475 /* StatusPublishService.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBC7A67B260DFADE00E57475 /* StatusPublishService.swift */; };
DBCBCBF4267CB070000F5B51 /* Decode85.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBCBCBF3267CB070000F5B51 /* Decode85.swift */; };
- DBCBCBFC2680ADB7000F5B51 /* AsyncHomeTimelineViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBCBCBFB2680ADB7000F5B51 /* AsyncHomeTimelineViewController.swift */; };
- DBCBCBFF2680AE98000F5B51 /* AsyncHomeTimelineViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBCBCBFE2680AE98000F5B51 /* AsyncHomeTimelineViewModel.swift */; };
- DBCBCC012680AF2A000F5B51 /* AsyncHomeTimelineViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBCBCC002680AF2A000F5B51 /* AsyncHomeTimelineViewModel+Diffable.swift */; };
- DBCBCC032680AF6E000F5B51 /* AsyncHomeTimelineViewController+DebugAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBCBCC022680AF6E000F5B51 /* AsyncHomeTimelineViewController+DebugAction.swift */; };
- DBCBCC052680AFB9000F5B51 /* AsyncHomeTimelineViewController+Provider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBCBCC042680AFB9000F5B51 /* AsyncHomeTimelineViewController+Provider.swift */; };
- DBCBCC072680AFEC000F5B51 /* AsyncHomeTimelineViewModel+LoadLatestState.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBCBCC062680AFEC000F5B51 /* AsyncHomeTimelineViewModel+LoadLatestState.swift */; };
- DBCBCC092680B01B000F5B51 /* AsyncHomeTimelineViewModel+LoadMiddleState.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBCBCC082680B01B000F5B51 /* AsyncHomeTimelineViewModel+LoadMiddleState.swift */; };
- DBCBCC0B2680B03F000F5B51 /* AsyncHomeTimelineViewModel+LoadOldestState.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBCBCC0A2680B03F000F5B51 /* AsyncHomeTimelineViewModel+LoadOldestState.swift */; };
DBCBCC0D2680B908000F5B51 /* HomeTimelinePreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBCBCC0C2680B908000F5B51 /* HomeTimelinePreference.swift */; };
DBCBED1726132DB500B49291 /* UserTimelineViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBCBED1626132DB500B49291 /* UserTimelineViewModel+Diffable.swift */; };
DBCBED1D26132E1A00B49291 /* StatusFetchedResultsController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBCBED1C26132E1A00B49291 /* StatusFetchedResultsController.swift */; };
@@ -584,21 +543,24 @@
DBCC3B36261440BA0045B23D /* UINavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBCC3B35261440BA0045B23D /* UINavigationController.swift */; };
DBCC3B8F26148F7B0045B23D /* CachedProfileViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBCC3B8E26148F7B0045B23D /* CachedProfileViewModel.swift */; };
DBCC3B9526157E6E0045B23D /* APIService+Relationship.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBCC3B9426157E6E0045B23D /* APIService+Relationship.swift */; };
- DBCC3B9B261584A00045B23D /* PrivateNote.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBCC3B9A2615849F0045B23D /* PrivateNote.swift */; };
DBCCC71E25F73297007E1AB6 /* APIService+Reblog.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBCCC71D25F73297007E1AB6 /* APIService+Reblog.swift */; };
DBD376AC2692ECDB007FEC24 /* ThemePreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBD376AB2692ECDB007FEC24 /* ThemePreference.swift */; };
DBD376B2269302A4007FEC24 /* UITableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBD376B1269302A4007FEC24 /* UITableViewCell.swift */; };
+ DBD5B1F627BCD3D200BD6B38 /* SuggestionAccountTableViewCell+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBD5B1F527BCD3D200BD6B38 /* SuggestionAccountTableViewCell+ViewModel.swift */; };
+ DBD5B1F827BCFD9D00BD6B38 /* DataSourceProvider+TableViewControllerNavigateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBD5B1F727BCFD9D00BD6B38 /* DataSourceProvider+TableViewControllerNavigateable.swift */; };
+ DBD5B1FA27BD013700BD6B38 /* DataSourceProvider+StatusTableViewControllerNavigateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBD5B1F927BD013700BD6B38 /* DataSourceProvider+StatusTableViewControllerNavigateable.swift */; };
DBD9149025DF6D8D00903DFD /* APIService+Onboarding.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBD9148F25DF6D8D00903DFD /* APIService+Onboarding.swift */; };
DBE0821525CD382600FD6BBD /* MastodonRegisterViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBE0821425CD382600FD6BBD /* MastodonRegisterViewController.swift */; };
DBE0822425CD3F1E00FD6BBD /* MastodonRegisterViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBE0822325CD3F1E00FD6BBD /* MastodonRegisterViewModel.swift */; };
+ DBE3CA6827A39CAB00AFE27B /* AppShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB68047F2637CD4C00430867 /* AppShared.framework */; };
+ DBE3CA6B27A39CAF00AFE27B /* AppShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB68047F2637CD4C00430867 /* AppShared.framework */; };
+ DBE3CA6E27A39CB300AFE27B /* AppShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB68047F2637CD4C00430867 /* AppShared.framework */; };
DBE3CDBB261C427900430CC6 /* TimelineHeaderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBE3CDBA261C427900430CC6 /* TimelineHeaderTableViewCell.swift */; };
DBE3CDCF261C42ED00430CC6 /* TimelineHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBE3CDCE261C42ED00430CC6 /* TimelineHeaderView.swift */; };
DBE3CDEC261C6B2900430CC6 /* FavoriteViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBE3CDEB261C6B2900430CC6 /* FavoriteViewController.swift */; };
DBE3CDFB261C6CA500430CC6 /* FavoriteViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBE3CDFA261C6CA500430CC6 /* FavoriteViewModel.swift */; };
DBE3CE01261D623D00430CC6 /* FavoriteViewModel+State.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBE3CE00261D623D00430CC6 /* FavoriteViewModel+State.swift */; };
DBE3CE07261D6A0E00430CC6 /* FavoriteViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBE3CE06261D6A0E00430CC6 /* FavoriteViewModel+Diffable.swift */; };
- DBE3CE0D261D767100430CC6 /* FavoriteViewController+Provider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBE3CE0C261D767100430CC6 /* FavoriteViewController+Provider.swift */; };
- DBE3CE13261D7D4200430CC6 /* StatusTableViewControllerAspect.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBE3CE12261D7D4200430CC6 /* StatusTableViewControllerAspect.swift */; };
DBE54AC62636C89F004E7C0B /* NotificationPreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBE54AC52636C89F004E7C0B /* NotificationPreference.swift */; };
DBE54ACC2636C8FD004E7C0B /* NotificationPreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBE54AC52636C89F004E7C0B /* NotificationPreference.swift */; };
DBF156DF2701B17600EC00B7 /* SidebarAddAccountCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBF156DE2701B17600EC00B7 /* SidebarAddAccountCollectionViewCell.swift */; };
@@ -616,6 +578,10 @@
DBF96326262EC0A6001D8D25 /* AuthenticationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBF96325262EC0A6001D8D25 /* AuthenticationServices.framework */; };
DBF9814A265E24F500E4BA07 /* ProfileFieldCollectionViewHeaderFooterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBF98149265E24F500E4BA07 /* ProfileFieldCollectionViewHeaderFooterView.swift */; };
DBF9814C265E339500E4BA07 /* ProfileFieldAddEntryCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBF9814B265E339500E4BA07 /* ProfileFieldAddEntryCollectionViewCell.swift */; };
+ DBFEEC96279BDC67004F81DD /* ProfileAboutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBFEEC95279BDC67004F81DD /* ProfileAboutViewController.swift */; };
+ DBFEEC99279BDCDE004F81DD /* ProfileAboutViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBFEEC98279BDCDE004F81DD /* ProfileAboutViewModel.swift */; };
+ DBFEEC9B279BDDD9004F81DD /* ProfileAboutViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBFEEC9A279BDDD9004F81DD /* ProfileAboutViewModel+Diffable.swift */; };
+ DBFEEC9D279C12C1004F81DD /* ProfileFieldEditCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBFEEC9C279C12C1004F81DD /* ProfileFieldEditCollectionViewCell.swift */; };
DBFEF05B26A57715006D7ED1 /* ComposeViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBFEF05726A576EE006D7ED1 /* ComposeViewModel.swift */; };
DBFEF05C26A57715006D7ED1 /* StatusEditorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBFEF05526A576EE006D7ED1 /* StatusEditorView.swift */; };
DBFEF05D26A57715006D7ED1 /* ContentWarningEditorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBFEF05826A576EE006D7ED1 /* ContentWarningEditorView.swift */; };
@@ -628,8 +594,6 @@
DBFEF06F26A690C4006D7ED1 /* APIService+APIError.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98337E25C9452D00AD9700 /* APIService+APIError.swift */; };
DBFEF07326A6913D006D7ED1 /* APIService.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBFEF07226A6913D006D7ED1 /* APIService.swift */; };
DBFEF07526A69192006D7ED1 /* APIService+Media.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB9A488F26035963008B817C /* APIService+Media.swift */; };
- DBFEF07726A691FB006D7ED1 /* MastodonAuthenticationBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBFEF07626A691FB006D7ED1 /* MastodonAuthenticationBox.swift */; };
- DBFEF07826A69209006D7ED1 /* MastodonAuthenticationBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBFEF07626A691FB006D7ED1 /* MastodonAuthenticationBox.swift */; };
DBFEF07B26A6BCE8006D7ED1 /* APIService+Status+Publish.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBFEF07A26A6BCE8006D7ED1 /* APIService+Status+Publish.swift */; };
DBFEF07C26A6BD0A006D7ED1 /* APIService+Status+Publish.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBFEF07A26A6BCE8006D7ED1 /* APIService+Status+Publish.swift */; };
EE93E8E8F9E0C39EAAEBD92F /* Pods_AppShared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F4A2A2D7000E477CA459ADA9 /* Pods_AppShared.framework */; };
@@ -671,34 +635,6 @@
remoteGlobalIDString = DB68047E2637CD4C00430867;
remoteInfo = AppShared;
};
- DB6805282637D7DD00430867 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = DB427DCA25BAA00100D1B89D /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = DB68047E2637CD4C00430867;
- remoteInfo = AppShared;
- };
- DB89B9F825C10FD0008580ED /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = DB427DCA25BAA00100D1B89D /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = DB89B9ED25C10FD0008580ED;
- remoteInfo = CoreDataStack;
- };
- DB89B9FA25C10FD0008580ED /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = DB427DCA25BAA00100D1B89D /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = DB427DD125BAA00100D1B89D;
- remoteInfo = Mastodon;
- };
- DB89BA0125C10FD0008580ED /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = DB427DCA25BAA00100D1B89D /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = DB89B9ED25C10FD0008580ED;
- remoteInfo = CoreDataStack;
- };
DB8FABCC26AEC7B2008E5AF4 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = DB427DCA25BAA00100D1B89D /* Project object */;
@@ -713,13 +649,6 @@
remoteGlobalIDString = DB68047E2637CD4C00430867;
remoteInfo = AppShared;
};
- DB8FABDE26AEC87B008E5AF4 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = DB427DCA25BAA00100D1B89D /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = DB89B9ED25C10FD0008580ED;
- remoteInfo = CoreDataStack;
- };
DBC6461A26A170AB00B0E31B /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = DB427DCA25BAA00100D1B89D /* Project object */;
@@ -734,13 +663,6 @@
remoteGlobalIDString = DB68047E2637CD4C00430867;
remoteInfo = AppShared;
};
- DBC6463926A195DB00B0E31B /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = DB427DCA25BAA00100D1B89D /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = DB89B9ED25C10FD0008580ED;
- remoteInfo = CoreDataStack;
- };
DBF8AE18263293E400C9C23C /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = DB427DCA25BAA00100D1B89D /* Project object */;
@@ -758,7 +680,6 @@
dstSubfolderSpec = 10;
files = (
DB6804872637CD4C00430867 /* AppShared.framework in Embed Frameworks */,
- DB89BA0425C10FD0008580ED /* CoreDataStack.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
@@ -779,69 +700,46 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
+ 0655B257371274BEB7EB1C19 /* Pods-Mastodon.release snapshot.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mastodon.release snapshot.xcconfig"; path = "Target Support Files/Pods-Mastodon/Pods-Mastodon.release snapshot.xcconfig"; sourceTree = ""; };
+ 0827D1674B2523503E8605F6 /* Pods-Mastodon-MastodonUITests.release snapshot.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mastodon-MastodonUITests.release snapshot.xcconfig"; path = "Target Support Files/Pods-Mastodon-MastodonUITests/Pods-Mastodon-MastodonUITests.release snapshot.xcconfig"; sourceTree = ""; };
0F1E2D0A2615C39400C38565 /* DoubleTitleLabelNavigationBarTitleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DoubleTitleLabelNavigationBarTitleView.swift; sourceTree = ""; };
0F2021FA2613262F000C64BF /* HashtagTimelineViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HashtagTimelineViewController.swift; sourceTree = ""; };
0F202200261326E6000C64BF /* HashtagTimelineViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HashtagTimelineViewModel.swift; sourceTree = ""; };
0F20220626134DA4000C64BF /* HashtagTimelineViewModel+Diffable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HashtagTimelineViewModel+Diffable.swift"; sourceTree = ""; };
- 0F20220C26134E3F000C64BF /* HashtagTimelineViewModel+LoadLatestState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HashtagTimelineViewModel+LoadLatestState.swift"; sourceTree = ""; };
0F202212261351F5000C64BF /* APIService+HashtagTimeline.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+HashtagTimeline.swift"; sourceTree = ""; };
- 0F202226261411BA000C64BF /* HashtagTimelineViewController+Provider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HashtagTimelineViewController+Provider.swift"; sourceTree = ""; };
0F20222C261457EE000C64BF /* HashtagTimelineViewModel+LoadOldestState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HashtagTimelineViewModel+LoadOldestState.swift"; sourceTree = ""; };
- 0F20223226145E51000C64BF /* HashtagTimelineViewModel+LoadMiddleState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HashtagTimelineViewModel+LoadMiddleState.swift"; sourceTree = ""; };
0F20223826146553000C64BF /* Array.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Array.swift; sourceTree = ""; };
0FAA0FDE25E0B57E0017CCDE /* WelcomeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeViewController.swift; sourceTree = ""; };
0FAA101125E105390017CCDE /* PrimaryActionButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrimaryActionButton.swift; sourceTree = ""; };
0FAA101B25E10E760017CCDE /* UIFont.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIFont.swift; sourceTree = ""; };
0FAA102625E1126A0017CCDE /* MastodonPickServerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonPickServerViewController.swift; sourceTree = ""; };
0FB3D2F625E4C24D00AAD544 /* MastodonPickServerViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonPickServerViewModel.swift; sourceTree = ""; };
- 0FB3D2FD25E4CB6400AAD544 /* PickServerTitleCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PickServerTitleCell.swift; sourceTree = ""; };
- 0FB3D30725E524C600AAD544 /* PickServerCategoriesCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PickServerCategoriesCell.swift; sourceTree = ""; };
+ 0FB3D2FD25E4CB6400AAD544 /* OnboardingHeadlineTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingHeadlineTableViewCell.swift; sourceTree = ""; };
0FB3D30E25E525CD00AAD544 /* PickServerCategoryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PickServerCategoryView.swift; sourceTree = ""; };
0FB3D31D25E534C700AAD544 /* PickServerCategoryCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PickServerCategoryCollectionViewCell.swift; sourceTree = ""; };
- 0FB3D33125E5F50E00AAD544 /* PickServerSearchCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PickServerSearchCell.swift; sourceTree = ""; };
0FB3D33725E6401400AAD544 /* PickServerCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PickServerCell.swift; sourceTree = ""; };
159AC43EFE0A1F95FCB358A4 /* Pods-MastodonIntent.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MastodonIntent.release.xcconfig"; path = "Target Support Files/Pods-MastodonIntent/Pods-MastodonIntent.release.xcconfig"; sourceTree = ""; };
164F0EBB267D4FE400249499 /* BoopSound.caf */ = {isa = PBXFileReference; lastKnownFileType = file; path = BoopSound.caf; sourceTree = ""; };
1D6D967E77A5357E2C6110D9 /* Pods-Mastodon.asdk - debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mastodon.asdk - debug.xcconfig"; path = "Target Support Files/Pods-Mastodon/Pods-Mastodon.asdk - debug.xcconfig"; sourceTree = ""; };
- 2D04F42425C255B9003F936F /* APIService+PublicTimeline.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+PublicTimeline.swift"; sourceTree = ""; };
- 2D084B8C26258EA3003AA3AF /* NotificationViewModel+Diffable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NotificationViewModel+Diffable.swift"; sourceTree = ""; };
- 2D084B9226259545003AA3AF /* NotificationViewModel+LoadLatestState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NotificationViewModel+LoadLatestState.swift"; sourceTree = ""; };
- 2D0B7A1C261D839600B44727 /* SearchHistory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchHistory.swift; sourceTree = ""; };
- 2D152A8B25C295CC009AA50C /* StatusView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusView.swift; sourceTree = ""; };
- 2D152A9125C2980C009AA50C /* UIFont.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIFont.swift; sourceTree = ""; };
+ 2C12EB4B3699D5D597027962 /* Pods-MastodonIntent.release snapshot.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MastodonIntent.release snapshot.xcconfig"; path = "Target Support Files/Pods-MastodonIntent/Pods-MastodonIntent.release snapshot.xcconfig"; sourceTree = ""; };
2D198642261BF09500F0B013 /* SearchResultItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchResultItem.swift; sourceTree = ""; };
2D198648261C0B8500F0B013 /* SearchResultSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchResultSection.swift; sourceTree = ""; };
- 2D206B7125F5D27F00143C56 /* AudioContainerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioContainerView.swift; sourceTree = ""; };
2D206B8525F5FB0900143C56 /* Double.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Double.swift; sourceTree = ""; };
- 2D206B8B25F6015000143C56 /* AudioPlaybackService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioPlaybackService.swift; sourceTree = ""; };
2D206B9125F60EA700143C56 /* UIControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIControl.swift; sourceTree = ""; };
- 2D24E11C2626D8B100A59D4F /* NotificationStatusTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationStatusTableViewCell.swift; sourceTree = ""; };
2D24E1222626ED9D00A59D4F /* UIView+Gesture.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView+Gesture.swift"; sourceTree = ""; };
- 2D24E12C2626FD2E00A59D4F /* NotificationViewModel+LoadOldestState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NotificationViewModel+LoadOldestState.swift"; sourceTree = ""; };
2D32EAAB25CB96DC00C9ED86 /* TimelineMiddleLoaderTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineMiddleLoaderTableViewCell.swift; sourceTree = ""; };
2D32EAB925CB9B0500C9ED86 /* UIView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIView.swift; sourceTree = ""; };
- 2D32EAD925CBCC3300C9ED86 /* PublicTimelineViewModel+LoadMiddleState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PublicTimelineViewModel+LoadMiddleState.swift"; sourceTree = ""; };
- 2D34D9CA261489930081BFC0 /* SearchViewController+Recommend.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SearchViewController+Recommend.swift"; sourceTree = ""; };
2D34D9D026148D9E0081BFC0 /* APIService+Recommend.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Recommend.swift"; sourceTree = ""; };
2D34D9DA261494120081BFC0 /* APIService+Search.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Search.swift"; sourceTree = ""; };
- 2D34D9E126149C920081BFC0 /* SearchRecommendTagsCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchRecommendTagsCollectionViewCell.swift; sourceTree = ""; };
2D35237926256D920031AF25 /* NotificationSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationSection.swift; sourceTree = ""; };
2D364F7125E66D7500204FDC /* MastodonResendEmailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonResendEmailViewController.swift; sourceTree = ""; };
2D364F7725E66D8300204FDC /* MastodonResendEmailViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonResendEmailViewModel.swift; sourceTree = ""; };
- 2D38F1C525CD37F400561493 /* ContentOffsetAdjustableTimelineViewControllerDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentOffsetAdjustableTimelineViewControllerDelegate.swift; sourceTree = ""; };
2D38F1D425CD465300561493 /* HomeTimelineViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeTimelineViewController.swift; sourceTree = ""; };
- 2D38F1DE25CD46A400561493 /* HomeTimelineViewController+Provider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HomeTimelineViewController+Provider.swift"; sourceTree = ""; };
2D38F1E425CD46C100561493 /* HomeTimelineViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeTimelineViewModel.swift; sourceTree = ""; };
2D38F1EA25CD477000561493 /* HomeTimelineViewModel+LoadLatestState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HomeTimelineViewModel+LoadLatestState.swift"; sourceTree = ""; };
- 2D38F1F025CD477D00561493 /* HomeTimelineViewModel+LoadMiddleState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HomeTimelineViewModel+LoadMiddleState.swift"; sourceTree = ""; };
2D38F1F625CD47AC00561493 /* HomeTimelineViewModel+LoadOldestState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HomeTimelineViewModel+LoadOldestState.swift"; sourceTree = ""; };
- 2D38F1FD25CD481700561493 /* StatusProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusProvider.swift; sourceTree = ""; };
2D38F20725CD491300561493 /* DisposeBagCollectable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DisposeBagCollectable.swift; sourceTree = ""; };
2D3F9E0325DFA133004262D9 /* UITapGestureRecognizer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UITapGestureRecognizer.swift; sourceTree = ""; };
- 2D42FF7D25C82218004A627A /* ActionToolBarContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionToolBarContainer.swift; sourceTree = ""; };
- 2D42FF8425C8224F004A627A /* HitTestExpandedButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HitTestExpandedButton.swift; sourceTree = ""; };
- 2D42FF8E25C8228A004A627A /* UIButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIButton.swift; sourceTree = ""; };
- 2D45E5BE25C9549700A6D639 /* PublicTimelineViewModel+State.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "PublicTimelineViewModel+State.swift"; sourceTree = ""; };
2D4AD89B263165B500613EFC /* SuggestionAccountCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionAccountCollectionViewCell.swift; sourceTree = ""; };
2D4AD8A126316CD200613EFC /* SelectedAccountSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedAccountSection.swift; sourceTree = ""; };
2D4AD8A726316D3500613EFC /* SelectedAccountItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectedAccountItem.swift; sourceTree = ""; };
@@ -853,86 +751,56 @@
2D5A3D3725CF8D9F002347D6 /* ScrollViewContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollViewContainer.swift; sourceTree = ""; };
2D5A3D6125CFD9CB002347D6 /* HomeTimelineViewController+DebugAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HomeTimelineViewController+DebugAction.swift"; sourceTree = ""; };
2D607AD726242FC500B70763 /* NotificationViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationViewModel.swift; sourceTree = ""; };
- 2D6125462625436B00299647 /* Notification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Notification.swift; sourceTree = ""; };
2D61254C262547C200299647 /* APIService+Notification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Notification.swift"; sourceTree = ""; };
- 2D61335725C188A000CAE157 /* APIService+Persist+Status.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Persist+Status.swift"; sourceTree = ""; };
2D61335D25C1894B00CAE157 /* APIService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIService.swift; sourceTree = ""; };
2D650FAA25ECDC9300851B58 /* Mastodon+Entity+Error+Detail.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Mastodon+Entity+Error+Detail.swift"; sourceTree = ""; };
2D694A7325F9EB4E0038ADDC /* ContentWarningOverlayView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentWarningOverlayView.swift; sourceTree = ""; };
- 2D69CFF325CA9E2200C3A1B2 /* LoadMoreConfigurableTableViewContainer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LoadMoreConfigurableTableViewContainer.swift; sourceTree = ""; };
- 2D69D00925CAA00300C3A1B2 /* APIService+CoreData+Status.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "APIService+CoreData+Status.swift"; sourceTree = ""; };
2D6DE3FF26141DF600A63F6A /* SearchViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchViewModel.swift; sourceTree = ""; };
- 2D76316425C14BD100929FB9 /* PublicTimelineViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PublicTimelineViewController.swift; sourceTree = ""; };
- 2D76316A25C14D4C00929FB9 /* PublicTimelineViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PublicTimelineViewModel.swift; sourceTree = ""; };
- 2D76317C25C14DF400929FB9 /* PublicTimelineViewController+Provider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PublicTimelineViewController+Provider.swift"; sourceTree = ""; };
- 2D76318225C14E8F00929FB9 /* PublicTimelineViewModel+Diffable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PublicTimelineViewModel+Diffable.swift"; sourceTree = ""; };
2D76319E25C1521200929FB9 /* StatusSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusSection.swift; sourceTree = ""; };
2D7631A725C1535600929FB9 /* StatusTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusTableViewCell.swift; sourceTree = ""; };
- 2D7631B225C159F700929FB9 /* Item.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Item.swift; sourceTree = ""; };
2D7867182625B77500211898 /* NotificationItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationItem.swift; sourceTree = ""; };
- 2D79E700261EA5550011E398 /* APIService+CoreData+Tag.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "APIService+CoreData+Tag.swift"; sourceTree = ""; };
2D82B9FE25E7863200E36F0F /* OnboardingViewControllerAppearance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingViewControllerAppearance.swift; sourceTree = ""; };
2D82BA0425E7897700E36F0F /* MastodonResendEmailViewModelNavigationDelegateShim.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonResendEmailViewModelNavigationDelegateShim.swift; sourceTree = ""; };
2D8434F425FF465D00EECE90 /* HomeTimelineNavigationBarTitleViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeTimelineNavigationBarTitleViewModel.swift; sourceTree = ""; };
2D8434FA25FF46B300EECE90 /* HomeTimelineNavigationBarTitleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeTimelineNavigationBarTitleView.swift; sourceTree = ""; };
2D84350425FF858100EECE90 /* UIScrollView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIScrollView.swift; sourceTree = ""; };
2D8FCA072637EABB00137F46 /* APIService+FollowRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+FollowRequest.swift"; sourceTree = ""; };
- 2D927F0125C7E4F2004F19B8 /* Mention.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Mention.swift; sourceTree = ""; };
- 2D927F0725C7E9A8004F19B8 /* Tag.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tag.swift; sourceTree = ""; };
- 2D927F0D25C7E9C9004F19B8 /* History.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = History.swift; sourceTree = ""; };
- 2D927F1325C7EDD9004F19B8 /* Emoji.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Emoji.swift; sourceTree = ""; };
2D939AB425EDD8A90076FA61 /* String.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = String.swift; sourceTree = ""; };
2D939AE725EE1CF80076FA61 /* MastodonRegisterViewController+Avatar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MastodonRegisterViewController+Avatar.swift"; sourceTree = ""; };
2D9DB966263A76FB007C1D71 /* BlockDomainService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockDomainService.swift; sourceTree = ""; };
- 2D9DB968263A833E007C1D71 /* DomainBlock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomainBlock.swift; sourceTree = ""; };
2D9DB96A263A91D1007C1D71 /* APIService+DomainBlock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+DomainBlock.swift"; sourceTree = ""; };
2DA504682601ADE7008F4E6C /* SawToothView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SawToothView.swift; sourceTree = ""; };
2DA6054625F716A2006356F9 /* PlaybackState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaybackState.swift; sourceTree = ""; };
- 2DA6055025F74407006356F9 /* AudioContainerViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AudioContainerViewModel.swift; sourceTree = ""; };
2DA7D04325CA52B200804E11 /* TimelineLoaderTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineLoaderTableViewCell.swift; sourceTree = ""; };
2DA7D04925CA52CB00804E11 /* TimelineBottomLoaderTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineBottomLoaderTableViewCell.swift; sourceTree = ""; };
2DA7D05025CA545E00804E11 /* LoadMoreConfigurableTableViewContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadMoreConfigurableTableViewContainer.swift; sourceTree = ""; };
- 2DA7D05625CA693F00804E11 /* Application.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Application.swift; sourceTree = ""; };
2DAC9E37262FC2320062E1A6 /* SuggestionAccountViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionAccountViewController.swift; sourceTree = ""; };
2DAC9E3D262FC2400062E1A6 /* SuggestionAccountViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionAccountViewModel.swift; sourceTree = ""; };
2DAC9E45262FC9FD0062E1A6 /* SuggestionAccountTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuggestionAccountTableViewCell.swift; sourceTree = ""; };
2DB72C8B262D764300CE6173 /* Mastodon+Entity+Notification+Type.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Mastodon+Entity+Notification+Type.swift"; sourceTree = ""; };
2DCB73FC2615C13900EC03D4 /* SearchRecommendCollectionHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchRecommendCollectionHeader.swift; sourceTree = ""; };
- 2DE0FAC02615F04D00CDF649 /* RecommendHashTagSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecommendHashTagSection.swift; sourceTree = ""; };
- 2DE0FAC72615F5F000CDF649 /* SearchRecommendAccountsCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchRecommendAccountsCollectionViewCell.swift; sourceTree = ""; };
2DE0FACD2615F7AD00CDF649 /* RecommendAccountSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecommendAccountSection.swift; sourceTree = ""; };
2DF123A625C3B0210020F248 /* ActiveLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActiveLabel.swift; sourceTree = ""; };
- 2DF75B9A25D0E27500694EC8 /* StatusProviderFacade.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusProviderFacade.swift; sourceTree = ""; };
- 2DF75BA025D0E29D00694EC8 /* StatusProvider+StatusTableViewCellDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "StatusProvider+StatusTableViewCellDelegate.swift"; sourceTree = ""; };
2DF75BA625D10E1000694EC8 /* APIService+Favorite.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Favorite.swift"; sourceTree = ""; };
- 2DF75BB825D1474100694EC8 /* ManagedObjectObserver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManagedObjectObserver.swift; sourceTree = ""; };
- 2DF75BC625D1475D00694EC8 /* ManagedObjectContextObjectsDidChange.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ManagedObjectContextObjectsDidChange.swift; sourceTree = ""; };
- 2DFAD5362617010500F9EE7C /* SearchResultTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchResultTableViewCell.swift; sourceTree = ""; };
2E1F6A67FDF9771D3E064FDC /* Pods-Mastodon.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mastodon.debug.xcconfig"; path = "Target Support Files/Pods-Mastodon/Pods-Mastodon.debug.xcconfig"; sourceTree = ""; };
374AA339A20E0FAC75BCDA6D /* Pods_NotificationService.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_NotificationService.framework; sourceTree = BUILT_PRODUCTS_DIR; };
3B7FD8F28DDA8FBCE5562B78 /* Pods-NotificationService.asdk - debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationService.asdk - debug.xcconfig"; path = "Target Support Files/Pods-NotificationService/Pods-NotificationService.asdk - debug.xcconfig"; sourceTree = ""; };
3C030226D3C73DCC23D67452 /* Pods_Mastodon_MastodonUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Mastodon_MastodonUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 3E08A432F40BA7B9CAA9DB68 /* Pods-AppShared.release snapshot.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AppShared.release snapshot.xcconfig"; path = "Target Support Files/Pods-AppShared/Pods-AppShared.release snapshot.xcconfig"; sourceTree = ""; };
452147B2903DF38070FE56A2 /* Pods_MastodonTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MastodonTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
459EA4F43058CAB47719E963 /* Pods-Mastodon-MastodonUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mastodon-MastodonUITests.debug.xcconfig"; path = "Target Support Files/Pods-Mastodon-MastodonUITests/Pods-Mastodon-MastodonUITests.debug.xcconfig"; sourceTree = ""; };
46DAB0EBDDFB678347CD96FF /* Pods-MastodonTests.asdk - release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MastodonTests.asdk - release.xcconfig"; path = "Target Support Files/Pods-MastodonTests/Pods-MastodonTests.asdk - release.xcconfig"; sourceTree = ""; };
5B24BBD7262DB14800A9381B /* ReportViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReportViewModel.swift; sourceTree = ""; };
5B24BBD8262DB14800A9381B /* ReportViewModel+Diffable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "ReportViewModel+Diffable.swift"; sourceTree = ""; };
5B24BBE1262DB19100A9381B /* APIService+Report.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "APIService+Report.swift"; sourceTree = ""; };
- 5B8E055726319E47006E3C53 /* ReportFooterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReportFooterView.swift; sourceTree = ""; };
5B90C456262599800002E742 /* SettingsViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsViewModel.swift; sourceTree = ""; };
5B90C459262599800002E742 /* SettingsToggleTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsToggleTableViewCell.swift; sourceTree = ""; };
5B90C45A262599800002E742 /* SettingsAppearanceTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsAppearanceTableViewCell.swift; sourceTree = ""; };
5B90C45B262599800002E742 /* SettingsLinkTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsLinkTableViewCell.swift; sourceTree = ""; };
5B90C45C262599800002E742 /* SettingsSectionHeader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsSectionHeader.swift; sourceTree = ""; };
- 5B90C46C26259B2C0002E742 /* Subscription.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Subscription.swift; sourceTree = ""; };
- 5B90C46D26259B2C0002E742 /* Setting.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Setting.swift; sourceTree = ""; };
- 5B90C47E26259BA90002E742 /* SubscriptionAlerts.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SubscriptionAlerts.swift; sourceTree = ""; };
5B90C48426259BF10002E742 /* APIService+Subscriptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "APIService+Subscriptions.swift"; sourceTree = ""; };
5B90C48A26259C120002E742 /* APIService+CoreData+Subscriptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "APIService+CoreData+Subscriptions.swift"; sourceTree = ""; };
5BB04FD4262E7AFF0043BFF6 /* ReportViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReportViewController.swift; sourceTree = ""; };
- 5BB04FDA262EA3070043BFF6 /* ReportHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReportHeaderView.swift; sourceTree = ""; };
- 5BB04FE8262EFC300043BFF6 /* ReportedStatusTableviewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReportedStatusTableviewCell.swift; sourceTree = ""; };
- 5BB04FEE262F0DCB0043BFF6 /* ReportViewModel+Data.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ReportViewModel+Data.swift"; sourceTree = ""; };
5BB04FF4262F0E6D0043BFF6 /* ReportSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReportSection.swift; sourceTree = ""; };
5CE45680252519F42FEA2D13 /* Pods-ShareActionExtension.asdk - release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ShareActionExtension.asdk - release.xcconfig"; path = "Target Support Files/Pods-ShareActionExtension/Pods-ShareActionExtension.asdk - release.xcconfig"; sourceTree = ""; };
5D03938F2612D259007FE196 /* WebViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebViewController.swift; sourceTree = ""; };
@@ -942,13 +810,7 @@
5DDDF1922617442700311060 /* Mastodon+Entity+Account.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Mastodon+Entity+Account.swift"; sourceTree = ""; };
5DDDF1982617447F00311060 /* Mastodon+Entity+Tag.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Mastodon+Entity+Tag.swift"; sourceTree = ""; };
5DDDF1A82617489F00311060 /* Mastodon+Entity+History.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Mastodon+Entity+History.swift"; sourceTree = ""; };
- 5DF1054025F886D400D6C0D4 /* VideoPlaybackService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoPlaybackService.swift; sourceTree = ""; };
- 5DF1054625F8870E00D6C0D4 /* VideoPlayerViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoPlayerViewModel.swift; sourceTree = ""; };
5DF1056325F887CB00D6C0D4 /* AVPlayer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AVPlayer.swift; sourceTree = ""; };
- 5DF1057825F88A1D00D6C0D4 /* PlayerContainerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerContainerView.swift; sourceTree = ""; };
- 5DF1057E25F88A4100D6C0D4 /* TouchBlockingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TouchBlockingView.swift; sourceTree = ""; };
- 5DF1058425F88AE500D6C0D4 /* NeedsDependency+AVPlayerViewControllerDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NeedsDependency+AVPlayerViewControllerDelegate.swift"; sourceTree = ""; };
- 5DFC35DE262068D20045711D /* SearchViewController+Follow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SearchViewController+Follow.swift"; sourceTree = ""; };
6130CBE4B26E3C976ACC1688 /* Pods-ShareActionExtension.asdk - debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ShareActionExtension.asdk - debug.xcconfig"; path = "Target Support Files/Pods-ShareActionExtension/Pods-ShareActionExtension.asdk - debug.xcconfig"; sourceTree = ""; };
75E3471C898DDD9631729B6E /* Pods-Mastodon.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mastodon.release.xcconfig"; path = "Target Support Files/Pods-Mastodon/Pods-Mastodon.release.xcconfig"; sourceTree = ""; };
77EE917BC055E6621C0452B6 /* Pods-ShareActionExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ShareActionExtension.debug.xcconfig"; path = "Target Support Files/Pods-ShareActionExtension/Pods-ShareActionExtension.debug.xcconfig"; sourceTree = ""; };
@@ -956,6 +818,8 @@
819CEC9DCAD8E8E7BD85A7BB /* Pods-Mastodon.asdk.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mastodon.asdk.xcconfig"; path = "Target Support Files/Pods-Mastodon/Pods-Mastodon.asdk.xcconfig"; sourceTree = ""; };
861BE60ED27430771CFD578D /* Pods-MastodonIntent.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MastodonIntent.debug.xcconfig"; path = "Target Support Files/Pods-MastodonIntent/Pods-MastodonIntent.debug.xcconfig"; sourceTree = ""; };
8850E70A1D5FF51432E43653 /* Pods-Mastodon-MastodonUITests.asdk - release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mastodon-MastodonUITests.asdk - release.xcconfig"; path = "Target Support Files/Pods-Mastodon-MastodonUITests/Pods-Mastodon-MastodonUITests.asdk - release.xcconfig"; sourceTree = ""; };
+ 8ADD558BE5B8255E5764A54F /* Pods-NotificationService.release snapshot.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationService.release snapshot.xcconfig"; path = "Target Support Files/Pods-NotificationService/Pods-NotificationService.release snapshot.xcconfig"; sourceTree = ""; };
+ 8E79CCBE51FBC3F7FE8CF49F /* Pods-MastodonTests.release snapshot.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MastodonTests.release snapshot.xcconfig"; path = "Target Support Files/Pods-MastodonTests/Pods-MastodonTests.release snapshot.xcconfig"; sourceTree = ""; };
8ED8C4B1F1BA2DCFF2926BB1 /* Pods-Mastodon-NotificationService.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mastodon-NotificationService.debug.xcconfig"; path = "Target Support Files/Pods-Mastodon-NotificationService/Pods-Mastodon-NotificationService.debug.xcconfig"; sourceTree = ""; };
9553C689FFA9EBC880CAB78D /* Pods-NotificationService.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationService.debug.xcconfig"; path = "Target Support Files/Pods-NotificationService/Pods-NotificationService.debug.xcconfig"; sourceTree = ""; };
95AD0663479892A2109EEFD0 /* Pods-ShareActionExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ShareActionExtension.release.xcconfig"; path = "Target Support Files/Pods-ShareActionExtension/Pods-ShareActionExtension.release.xcconfig"; sourceTree = ""; };
@@ -977,7 +841,14 @@
DB0009A826AEE5DC009B9D2D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.intentdefinition; name = Base; path = Base.lproj/Intents.intentdefinition; sourceTree = ""; };
DB0009AD26AEE5E4009B9D2D /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Intents.strings; sourceTree = ""; };
DB0140CE25C42AEE00F9F3CF /* OSLog.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OSLog.swift; sourceTree = ""; };
- DB023294267F0AB800031745 /* ASMetaEditableTextNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ASMetaEditableTextNode.swift; sourceTree = ""; };
+ DB023D25279FFB0A005AC798 /* ShareActivityProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareActivityProvider.swift; sourceTree = ""; };
+ DB023D2727A0FABD005AC798 /* NotificationTableViewCellDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationTableViewCellDelegate.swift; sourceTree = ""; };
+ DB023D2927A0FE5C005AC798 /* DataSourceProvider+NotificationTableViewCellDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DataSourceProvider+NotificationTableViewCellDelegate.swift"; sourceTree = ""; };
+ DB023D2B27A10464005AC798 /* NotificationTimelineViewController+DataSourceProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NotificationTimelineViewController+DataSourceProvider.swift"; sourceTree = ""; };
+ DB025B77278D606A002F581E /* StatusItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusItem.swift; sourceTree = ""; };
+ DB025B92278D6501002F581E /* Persistence.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Persistence.swift; sourceTree = ""; };
+ DB025B94278D6530002F581E /* Persistence+MastodonUser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Persistence+MastodonUser.swift"; sourceTree = ""; };
+ DB025B96278D66D5002F581E /* MastodonUser+Property.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MastodonUser+Property.swift"; sourceTree = ""; };
DB029E94266A20430062874E /* MastodonAuthenticationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonAuthenticationController.swift; sourceTree = ""; };
DB02CDAA26256A9500D0A2AF /* ThreadReplyLoaderTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThreadReplyLoaderTableViewCell.swift; sourceTree = ""; };
DB02CDBE2625AE5000D0A2AF /* AdaptiveUserInterfaceStyleBarButtonItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdaptiveUserInterfaceStyleBarButtonItem.swift; sourceTree = "