Merge pull request #302 from mastodon/feature/new-iPad
Update for new iPad design
This commit is contained in:
commit
6dcc8d1f9e
|
@ -17,6 +17,6 @@
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>1.2.0</string>
|
<string>1.2.0</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>71</string>
|
<string>82</string>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
//
|
||||||
|
// UserDefaults+Notification.swift
|
||||||
|
// AppShared
|
||||||
|
//
|
||||||
|
// Created by Cirno MainasuK on 2021-10-9.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
import CryptoKit
|
||||||
|
|
||||||
|
extension UserDefaults {
|
||||||
|
// always use hash value (SHA256) from accessToken as key
|
||||||
|
private static func deriveKey(from accessToken: String, prefix: String) -> String {
|
||||||
|
let digest = SHA256.hash(data: Data(accessToken.utf8))
|
||||||
|
let bytes = [UInt8](digest)
|
||||||
|
let hex = bytes.toHexString()
|
||||||
|
let key = prefix + "@" + hex
|
||||||
|
return key
|
||||||
|
}
|
||||||
|
|
||||||
|
private static let notificationCountKeyPrefix = "notification_count"
|
||||||
|
|
||||||
|
public func getNotificationCountWithAccessToken(accessToken: String) -> Int {
|
||||||
|
let prefix = UserDefaults.notificationCountKeyPrefix
|
||||||
|
let key = UserDefaults.deriveKey(from: accessToken, prefix: prefix)
|
||||||
|
return integer(forKey: key)
|
||||||
|
}
|
||||||
|
|
||||||
|
public func setNotificationCountWithAccessToken(accessToken: String, value: Int) {
|
||||||
|
let prefix = UserDefaults.notificationCountKeyPrefix
|
||||||
|
let key = UserDefaults.deriveKey(from: accessToken, prefix: prefix)
|
||||||
|
setValue(value, forKey: key)
|
||||||
|
}
|
||||||
|
|
||||||
|
public func increaseNotificationCount(accessToken: String) {
|
||||||
|
let count = getNotificationCountWithAccessToken(accessToken: accessToken)
|
||||||
|
setNotificationCountWithAccessToken(accessToken: accessToken, value: count + 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -6,39 +6,8 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
import CryptoKit
|
|
||||||
|
|
||||||
extension UserDefaults {
|
extension UserDefaults {
|
||||||
public static let shared = UserDefaults(suiteName: AppName.groupID)!
|
public static let shared = UserDefaults(suiteName: AppName.groupID)!
|
||||||
}
|
}
|
||||||
|
|
||||||
extension UserDefaults {
|
|
||||||
// always use hash value (SHA256) from accessToken as key
|
|
||||||
private static func deriveKey(from accessToken: String, prefix: String) -> String {
|
|
||||||
let digest = SHA256.hash(data: Data(accessToken.utf8))
|
|
||||||
let bytes = [UInt8](digest)
|
|
||||||
let hex = bytes.toHexString()
|
|
||||||
let key = prefix + "@" + hex
|
|
||||||
return key
|
|
||||||
}
|
|
||||||
|
|
||||||
private static let notificationCountKeyPrefix = "notification_count"
|
|
||||||
|
|
||||||
public func getNotificationCountWithAccessToken(accessToken: String) -> Int {
|
|
||||||
let prefix = UserDefaults.notificationCountKeyPrefix
|
|
||||||
let key = UserDefaults.deriveKey(from: accessToken, prefix: prefix)
|
|
||||||
return integer(forKey: key)
|
|
||||||
}
|
|
||||||
|
|
||||||
public func setNotificationCountWithAccessToken(accessToken: String, value: Int) {
|
|
||||||
let prefix = UserDefaults.notificationCountKeyPrefix
|
|
||||||
let key = UserDefaults.deriveKey(from: accessToken, prefix: prefix)
|
|
||||||
setValue(value, forKey: key)
|
|
||||||
}
|
|
||||||
|
|
||||||
public func increaseNotificationCount(accessToken: String) {
|
|
||||||
let count = getNotificationCountWithAccessToken(accessToken: accessToken)
|
|
||||||
setNotificationCountWithAccessToken(accessToken: accessToken, value: count + 1)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
@ -63,6 +63,13 @@
|
||||||
<attribute name="userID" attributeType="String"/>
|
<attribute name="userID" attributeType="String"/>
|
||||||
<relationship name="status" maxCount="1" deletionRule="Nullify" destinationEntity="Status" inverseName="homeTimelineIndexes" inverseEntity="Status"/>
|
<relationship name="status" maxCount="1" deletionRule="Nullify" destinationEntity="Status" inverseName="homeTimelineIndexes" inverseEntity="Status"/>
|
||||||
</entity>
|
</entity>
|
||||||
|
<entity name="Instance" representedClassName=".Instance" syncable="YES">
|
||||||
|
<attribute name="configurationRaw" optional="YES" attributeType="Binary"/>
|
||||||
|
<attribute name="createdAt" attributeType="Date" usesScalarValueType="NO"/>
|
||||||
|
<attribute name="domain" attributeType="String"/>
|
||||||
|
<attribute name="updatedAt" attributeType="Date" usesScalarValueType="NO"/>
|
||||||
|
<relationship name="authentications" toMany="YES" deletionRule="Nullify" destinationEntity="MastodonAuthentication" inverseName="instance" inverseEntity="MastodonAuthentication"/>
|
||||||
|
</entity>
|
||||||
<entity name="MastodonAuthentication" representedClassName=".MastodonAuthentication" syncable="YES">
|
<entity name="MastodonAuthentication" representedClassName=".MastodonAuthentication" syncable="YES">
|
||||||
<attribute name="activedAt" attributeType="Date" usesScalarValueType="NO"/>
|
<attribute name="activedAt" attributeType="Date" usesScalarValueType="NO"/>
|
||||||
<attribute name="appAccessToken" attributeType="String"/>
|
<attribute name="appAccessToken" attributeType="String"/>
|
||||||
|
@ -75,6 +82,7 @@
|
||||||
<attribute name="userAccessToken" attributeType="String"/>
|
<attribute name="userAccessToken" attributeType="String"/>
|
||||||
<attribute name="userID" attributeType="String"/>
|
<attribute name="userID" attributeType="String"/>
|
||||||
<attribute name="username" attributeType="String"/>
|
<attribute name="username" attributeType="String"/>
|
||||||
|
<relationship name="instance" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Instance" inverseName="authentications" inverseEntity="Instance"/>
|
||||||
<relationship name="user" maxCount="1" deletionRule="Nullify" destinationEntity="MastodonUser" inverseName="mastodonAuthentication" inverseEntity="MastodonUser"/>
|
<relationship name="user" maxCount="1" deletionRule="Nullify" destinationEntity="MastodonUser" inverseName="mastodonAuthentication" inverseEntity="MastodonUser"/>
|
||||||
</entity>
|
</entity>
|
||||||
<entity name="MastodonNotification" representedClassName=".MastodonNotification" syncable="YES">
|
<entity name="MastodonNotification" representedClassName=".MastodonNotification" syncable="YES">
|
||||||
|
@ -191,7 +199,6 @@
|
||||||
<relationship name="status" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Status" inverseName="searchHistories" inverseEntity="Status"/>
|
<relationship name="status" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="Status" inverseName="searchHistories" inverseEntity="Status"/>
|
||||||
</entity>
|
</entity>
|
||||||
<entity name="Setting" representedClassName=".Setting" syncable="YES">
|
<entity name="Setting" representedClassName=".Setting" syncable="YES">
|
||||||
<attribute name="appearanceRaw" attributeType="String"/>
|
|
||||||
<attribute name="createdAt" attributeType="Date" usesScalarValueType="NO"/>
|
<attribute name="createdAt" attributeType="Date" usesScalarValueType="NO"/>
|
||||||
<attribute name="domain" attributeType="String"/>
|
<attribute name="domain" attributeType="String"/>
|
||||||
<attribute name="preferredStaticAvatar" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
|
<attribute name="preferredStaticAvatar" attributeType="Boolean" defaultValueString="NO" usesScalarValueType="YES"/>
|
||||||
|
@ -281,7 +288,7 @@
|
||||||
<element name="Emoji" positionX="0" positionY="0" width="128" height="134"/>
|
<element name="Emoji" positionX="0" positionY="0" width="128" height="134"/>
|
||||||
<element name="History" positionX="0" positionY="0" width="128" height="119"/>
|
<element name="History" positionX="0" positionY="0" width="128" height="119"/>
|
||||||
<element name="HomeTimelineIndex" positionX="0" positionY="0" width="128" height="134"/>
|
<element name="HomeTimelineIndex" positionX="0" positionY="0" width="128" height="134"/>
|
||||||
<element name="MastodonAuthentication" positionX="0" positionY="0" width="128" height="209"/>
|
<element name="MastodonAuthentication" positionX="0" positionY="0" width="128" height="224"/>
|
||||||
<element name="MastodonNotification" positionX="9" positionY="162" width="128" height="164"/>
|
<element name="MastodonNotification" positionX="9" positionY="162" width="128" height="164"/>
|
||||||
<element name="MastodonUser" positionX="0" positionY="0" width="128" height="734"/>
|
<element name="MastodonUser" positionX="0" positionY="0" width="128" height="734"/>
|
||||||
<element name="Mention" positionX="0" positionY="0" width="128" height="149"/>
|
<element name="Mention" positionX="0" positionY="0" width="128" height="149"/>
|
||||||
|
@ -289,10 +296,11 @@
|
||||||
<element name="PollOption" positionX="0" positionY="0" width="128" height="134"/>
|
<element name="PollOption" positionX="0" positionY="0" width="128" height="134"/>
|
||||||
<element name="PrivateNote" positionX="0" positionY="0" width="128" height="89"/>
|
<element name="PrivateNote" positionX="0" positionY="0" width="128" height="89"/>
|
||||||
<element name="SearchHistory" positionX="0" positionY="0" width="128" height="149"/>
|
<element name="SearchHistory" positionX="0" positionY="0" width="128" height="149"/>
|
||||||
<element name="Setting" positionX="72" positionY="162" width="128" height="179"/>
|
<element name="Setting" positionX="72" positionY="162" width="128" height="164"/>
|
||||||
<element name="Status" positionX="0" positionY="0" width="128" height="599"/>
|
<element name="Status" positionX="0" positionY="0" width="128" height="599"/>
|
||||||
<element name="Subscription" positionX="81" positionY="171" width="128" height="179"/>
|
<element name="Subscription" positionX="81" positionY="171" width="128" height="179"/>
|
||||||
<element name="SubscriptionAlerts" positionX="72" positionY="162" width="128" height="14"/>
|
<element name="SubscriptionAlerts" positionX="72" positionY="162" width="128" height="14"/>
|
||||||
<element name="Tag" positionX="0" positionY="0" width="128" height="134"/>
|
<element name="Tag" positionX="0" positionY="0" width="128" height="134"/>
|
||||||
|
<element name="Instance" positionX="45" positionY="162" width="128" height="104"/>
|
||||||
</elements>
|
</elements>
|
||||||
</model>
|
</model>
|
|
@ -0,0 +1,70 @@
|
||||||
|
//
|
||||||
|
// Instance.swift
|
||||||
|
// CoreDataStack
|
||||||
|
//
|
||||||
|
// Created by Cirno MainasuK on 2021-10-9.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import CoreData
|
||||||
|
|
||||||
|
public final class Instance: NSManagedObject {
|
||||||
|
@NSManaged public var domain: String
|
||||||
|
|
||||||
|
@NSManaged public private(set) var createdAt: Date
|
||||||
|
@NSManaged public private(set) var updatedAt: Date
|
||||||
|
|
||||||
|
@NSManaged public private(set) var configurationRaw: Data?
|
||||||
|
|
||||||
|
// MARK: one-to-many relationships
|
||||||
|
@NSManaged public var authentications: Set<MastodonAuthentication>
|
||||||
|
}
|
||||||
|
|
||||||
|
extension Instance {
|
||||||
|
public override func awakeFromInsert() {
|
||||||
|
super.awakeFromInsert()
|
||||||
|
let now = Date()
|
||||||
|
setPrimitiveValue(now, forKey: #keyPath(Instance.createdAt))
|
||||||
|
setPrimitiveValue(now, forKey: #keyPath(Instance.updatedAt))
|
||||||
|
}
|
||||||
|
|
||||||
|
@discardableResult
|
||||||
|
public static func insert(
|
||||||
|
into context: NSManagedObjectContext,
|
||||||
|
property: Property
|
||||||
|
) -> Instance {
|
||||||
|
let instance: Instance = context.insertObject()
|
||||||
|
instance.domain = property.domain
|
||||||
|
return instance
|
||||||
|
}
|
||||||
|
|
||||||
|
public func update(configurationRaw: Data?) {
|
||||||
|
self.configurationRaw = configurationRaw
|
||||||
|
}
|
||||||
|
|
||||||
|
public func didUpdate(at networkDate: Date) {
|
||||||
|
self.updatedAt = networkDate
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension Instance {
|
||||||
|
public struct Property {
|
||||||
|
public let domain: String
|
||||||
|
|
||||||
|
public init(domain: String) {
|
||||||
|
self.domain = domain
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension Instance: Managed {
|
||||||
|
public static var defaultSortDescriptors: [NSSortDescriptor] {
|
||||||
|
return [NSSortDescriptor(keyPath: \Instance.createdAt, ascending: false)]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension Instance {
|
||||||
|
public static func predicate(domain: String) -> NSPredicate {
|
||||||
|
return NSPredicate(format: "%K == %@", #keyPath(Instance.domain), domain)
|
||||||
|
}
|
||||||
|
}
|
|
@ -30,6 +30,9 @@ final public class MastodonAuthentication: NSManagedObject {
|
||||||
// one-to-one relationship
|
// one-to-one relationship
|
||||||
@NSManaged public private(set) var user: MastodonUser
|
@NSManaged public private(set) var user: MastodonUser
|
||||||
|
|
||||||
|
// many-to-one relationship
|
||||||
|
@NSManaged public private(set) var instance: Instance?
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extension MastodonAuthentication {
|
extension MastodonAuthentication {
|
||||||
|
@ -97,6 +100,12 @@ extension MastodonAuthentication {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public func update(instance: Instance) {
|
||||||
|
if self.instance != instance {
|
||||||
|
self.instance = instance
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public func didUpdate(at networkDate: Date) {
|
public func didUpdate(at networkDate: Date) {
|
||||||
self.updatedAt = networkDate
|
self.updatedAt = networkDate
|
||||||
}
|
}
|
||||||
|
@ -143,7 +152,7 @@ extension MastodonAuthentication: Managed {
|
||||||
|
|
||||||
extension MastodonAuthentication {
|
extension MastodonAuthentication {
|
||||||
|
|
||||||
static func predicate(domain: String) -> NSPredicate {
|
public static func predicate(domain: String) -> NSPredicate {
|
||||||
return NSPredicate(format: "%K == %@", #keyPath(MastodonAuthentication.domain), domain)
|
return NSPredicate(format: "%K == %@", #keyPath(MastodonAuthentication.domain), domain)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -158,4 +167,8 @@ extension MastodonAuthentication {
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static func predicate(userAccessToken: String) -> NSPredicate {
|
||||||
|
return NSPredicate(format: "%K == %@", #keyPath(MastodonAuthentication.userAccessToken), userAccessToken)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@ public final class Setting: NSManagedObject {
|
||||||
@NSManaged public var domain: String
|
@NSManaged public var domain: String
|
||||||
@NSManaged public var userID: String
|
@NSManaged public var userID: String
|
||||||
|
|
||||||
@NSManaged public var appearanceRaw: String
|
// @NSManaged public var appearanceRaw: String
|
||||||
@NSManaged public var preferredTrueBlackDarkMode: Bool
|
@NSManaged public var preferredTrueBlackDarkMode: Bool
|
||||||
@NSManaged public var preferredStaticAvatar: Bool
|
@NSManaged public var preferredStaticAvatar: Bool
|
||||||
@NSManaged public var preferredStaticEmoji: Bool
|
@NSManaged public var preferredStaticEmoji: Bool
|
||||||
|
@ -41,17 +41,17 @@ extension Setting {
|
||||||
property: Property
|
property: Property
|
||||||
) -> Setting {
|
) -> Setting {
|
||||||
let setting: Setting = context.insertObject()
|
let setting: Setting = context.insertObject()
|
||||||
setting.appearanceRaw = property.appearanceRaw
|
// setting.appearanceRaw = property.appearanceRaw
|
||||||
setting.domain = property.domain
|
setting.domain = property.domain
|
||||||
setting.userID = property.userID
|
setting.userID = property.userID
|
||||||
return setting
|
return setting
|
||||||
}
|
}
|
||||||
|
|
||||||
public func update(appearanceRaw: String) {
|
// public func update(appearanceRaw: String) {
|
||||||
guard appearanceRaw != self.appearanceRaw else { return }
|
// guard appearanceRaw != self.appearanceRaw else { return }
|
||||||
self.appearanceRaw = appearanceRaw
|
// self.appearanceRaw = appearanceRaw
|
||||||
didUpdate(at: Date())
|
// didUpdate(at: Date())
|
||||||
}
|
// }
|
||||||
|
|
||||||
public func update(preferredTrueBlackDarkMode: Bool) {
|
public func update(preferredTrueBlackDarkMode: Bool) {
|
||||||
guard preferredTrueBlackDarkMode != self.preferredTrueBlackDarkMode else { return }
|
guard preferredTrueBlackDarkMode != self.preferredTrueBlackDarkMode else { return }
|
||||||
|
@ -87,12 +87,16 @@ extension Setting {
|
||||||
public struct Property {
|
public struct Property {
|
||||||
public let domain: String
|
public let domain: String
|
||||||
public let userID: String
|
public let userID: String
|
||||||
public let appearanceRaw: String
|
// public let appearanceRaw: String
|
||||||
|
|
||||||
public init(domain: String, userID: String, appearanceRaw: String) {
|
public init(
|
||||||
|
domain: String,
|
||||||
|
userID: String
|
||||||
|
// appearanceRaw: String
|
||||||
|
) {
|
||||||
self.domain = domain
|
self.domain = domain
|
||||||
self.userID = userID
|
self.userID = userID
|
||||||
self.appearanceRaw = appearanceRaw
|
// self.appearanceRaw = appearanceRaw
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,6 @@
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>1.2.0</string>
|
<string>1.2.0</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>71</string>
|
<string>82</string>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|
|
@ -17,6 +17,6 @@
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>1.2.0</string>
|
<string>1.2.0</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>71</string>
|
<string>82</string>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|
|
@ -1,22 +1,22 @@
|
||||||
"16wxgf" = "Post on Mastodon";
|
"16wxgf" = "النَشر على ماستودون";
|
||||||
|
|
||||||
"751xkl" = "محتوى نصي";
|
"751xkl" = "محتوى نصي";
|
||||||
|
|
||||||
"CsR7G2" = "انشر على ماستدون";
|
"CsR7G2" = "انشر على ماستدون";
|
||||||
|
|
||||||
"HZSGTr" = "What content to post?";
|
"HZSGTr" = "ما المُحتوى المُراد نشره؟";
|
||||||
|
|
||||||
"HdGikU" = "Posting failed";
|
"HdGikU" = "فَشَلَ النشر";
|
||||||
|
|
||||||
"KDNTJ4" = "سبب الإخفاق";
|
"KDNTJ4" = "سبب الإخفاق";
|
||||||
|
|
||||||
"RHxKOw" = "Send Post with text content";
|
"RHxKOw" = "إرسال مَنشور يَحوي نص";
|
||||||
|
|
||||||
"RxSqsb" = "Post";
|
"RxSqsb" = "مَنشور";
|
||||||
|
|
||||||
"WCIR3D" = "Post ${content} on Mastodon";
|
"WCIR3D" = "نَشر ${content} على ماستودون";
|
||||||
|
|
||||||
"ZKJSNu" = "Post";
|
"ZKJSNu" = "مَنشور";
|
||||||
|
|
||||||
"ZS1XaK" = "${content}";
|
"ZS1XaK" = "${content}";
|
||||||
|
|
||||||
|
@ -24,13 +24,13 @@
|
||||||
|
|
||||||
"Zo4jgJ" = "مدى ظهور المنشور";
|
"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" = "النشر على ماستدون";
|
"dUyuGg" = "النشر على ماستدون";
|
||||||
|
|
||||||
|
@ -38,13 +38,13 @@
|
||||||
|
|
||||||
"ehFLjY" = "لمتابعيك فقط";
|
"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";
|
"rM6dvp" = "عنوان URL";
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<key>There are ${count} options matching ‘${content}’. - 2</key>
|
<key>There are ${count} options matching ‘${content}’. - 2</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSStringLocalizedFormatKey</key>
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
<string>There are %#@count_option@ matching ‘${content}’.</string>
|
<string>هُناك %#@count_option@ تتطابق مَعَ '${content}'.</string>
|
||||||
<key>count_option</key>
|
<key>count_option</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSStringFormatSpecTypeKey</key>
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
@ -13,23 +13,23 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>%ld</string>
|
<string>%ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld options</string>
|
<string>لا خيار</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 option</string>
|
<string>خيار واحد</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld options</string>
|
<string>خياران</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld options</string>
|
<string>%ld خيارات</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld options</string>
|
<string>%ld خيارًا</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld options</string>
|
<string>%ld خيار</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>There are ${count} options matching ‘${visibility}’.</key>
|
<key>There are ${count} options matching ‘${visibility}’.</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSStringLocalizedFormatKey</key>
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
<string>There are %#@count_option@ matching ‘${visibility}’.</string>
|
<string>هُناك %#@count_option@ تتطابق مَعَ '${visibility}'.</string>
|
||||||
<key>count_option</key>
|
<key>count_option</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSStringFormatSpecTypeKey</key>
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
@ -37,17 +37,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>%ld</string>
|
<string>%ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld options</string>
|
<string>لا خيار</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 option</string>
|
<string>خيار واحد</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld options</string>
|
<string>خياران</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld options</string>
|
<string>%ld خيارات</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld options</string>
|
<string>%ld خيارًا</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld options</string>
|
<string>%ld خيار</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
"16wxgf" = "Di Mastodon de biweşîne";
|
||||||
|
|
||||||
|
"751xkl" = "Naveroka nivîsê";
|
||||||
|
|
||||||
|
"CsR7G2" = "Di Mastodon de biweşîne";
|
||||||
|
|
||||||
|
"HZSGTr" = "Kîjan naverok bila bê şandin?";
|
||||||
|
|
||||||
|
"HdGikU" = "Şandin têkçû";
|
||||||
|
|
||||||
|
"KDNTJ4" = "Sedema têkçûnê";
|
||||||
|
|
||||||
|
"RHxKOw" = "Bi naveroka nivîsî şandiyan bişîne";
|
||||||
|
|
||||||
|
"RxSqsb" = "Şandî";
|
||||||
|
|
||||||
|
"WCIR3D" = "${content} biweşîne di Mastodon de";
|
||||||
|
|
||||||
|
"ZKJSNu" = "Şandî";
|
||||||
|
|
||||||
|
"ZS1XaK" = "${content}";
|
||||||
|
|
||||||
|
"ZbSjzC" = "Xuyanî";
|
||||||
|
|
||||||
|
"Zo4jgJ" = "Xuyaniya şandiyê";
|
||||||
|
|
||||||
|
"apSxMG-dYQ5NN" = "Vebijarkên ${count} hene ku li gorî 'Giştî' ne.";
|
||||||
|
|
||||||
|
"apSxMG-ehFLjY" = "Vebijarkên ${count} hene ku li gorî 'Tenê Şopandin' hene.";
|
||||||
|
|
||||||
|
"ayoYEb-dYQ5NN" = "${content}, Giştî";
|
||||||
|
|
||||||
|
"ayoYEb-ehFLjY" = "${content}, Tenê şopînêr";
|
||||||
|
|
||||||
|
"dUyuGg" = "Li ser Mastodon bişînin";
|
||||||
|
|
||||||
|
"dYQ5NN" = "Gelemperî";
|
||||||
|
|
||||||
|
"ehFLjY" = "Tenê şopîneran";
|
||||||
|
|
||||||
|
"gfePDu" = "Weşandin bi ser neket. ${failureReason}";
|
||||||
|
|
||||||
|
"k7dbKQ" = "Şandî bi serkeftî hate şandin.";
|
||||||
|
|
||||||
|
"oGiqmY-dYQ5NN" = "Tenê ji bo pejirandinê, we 'Giştî' dixwest?";
|
||||||
|
|
||||||
|
"oGiqmY-ehFLjY" = "Tenê ji bo piştrastkirinê, we 'Tenê Şopdarên' dixwest?";
|
||||||
|
|
||||||
|
"rM6dvp" = "Girêdan";
|
||||||
|
|
||||||
|
"ryJLwG" = "Bi serkeftî hat şandin. ";
|
|
@ -0,0 +1,38 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>There are ${count} options matching ‘${content}’. - 2</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_option@ heye ku bi ‘${content}’ re têkildar e.</string>
|
||||||
|
<key>count_option</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>%ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 vebijêrk</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld vebijêrk</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>There are ${count} options matching ‘${visibility}’.</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_option@ heye ku bi ‘${visibility}’ re têkildar e.</string>
|
||||||
|
<key>count_option</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>%ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 vebijêrk</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld vebijêrk</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
|
@ -51,6 +51,7 @@ private func map(language: String) -> String? {
|
||||||
case "fr_FR": return "fr" // French
|
case "fr_FR": return "fr" // French
|
||||||
case "de_DE": return "de" // German
|
case "de_DE": return "de" // German
|
||||||
case "ja_JP": return "ja" // Japanese
|
case "ja_JP": return "ja" // Japanese
|
||||||
|
case "kmr_TR": return "ku-TR" // Kurmanji (Kurdish)
|
||||||
case "ru_RU": return "ru" // Russian
|
case "ru_RU": return "ru" // Russian
|
||||||
case "gd_GB": return "gd-GB" // Scottish Gaelic
|
case "gd_GB": return "gd-GB" // Scottish Gaelic
|
||||||
case "es_ES": return "es" // Spanish
|
case "es_ES": return "es" // Spanish
|
||||||
|
|
|
@ -15,21 +15,21 @@
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld unread notification</string>
|
<string>%ld unread notification</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 unread notification</string>
|
<string>إشعار واحِد غير مقروء</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld unread notification</string>
|
<string>إشعاران غير مقروءان</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld unread notification</string>
|
<string>%ld unread notification</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld unread notification</string>
|
<string>%ld إشعارًا غيرَ مقروء</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld unread notification</string>
|
<string>%ld إشعار غير مقروء</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>a11y.plural.count.input_limit_exceeds</key>
|
<key>a11y.plural.count.input_limit_exceeds</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSStringLocalizedFormatKey</key>
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
<string>Input limit exceeds %#@character_count@</string>
|
<string>تمَّ تجاوز حدّ الإدخال %#@character_count@</string>
|
||||||
<key>character_count</key>
|
<key>character_count</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSStringFormatSpecTypeKey</key>
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
@ -37,23 +37,23 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld characters</string>
|
<string>لا حرف</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 character</string>
|
<string>حرفٌ واحِد</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld characters</string>
|
<string>حرفان اثنان</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld characters</string>
|
<string>%ld حُرُوف</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld characters</string>
|
<string>%ld حرفًا</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld characters</string>
|
<string>%ld حَرف</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>a11y.plural.count.input_limit_remains</key>
|
<key>a11y.plural.count.input_limit_remains</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSStringLocalizedFormatKey</key>
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
<string>Input limit remains %#@character_count@</string>
|
<string>يتبقَّى على حدّ الإدخال %#@character_count@</string>
|
||||||
<key>character_count</key>
|
<key>character_count</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSStringFormatSpecTypeKey</key>
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
@ -61,17 +61,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld characters</string>
|
<string>لا حرف</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 character</string>
|
<string>حرفٌ واحِد</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld characters</string>
|
<string>حرفان اثنان</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld characters</string>
|
<string>%ld حُرُوف</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld characters</string>
|
<string>%ld حرفًا</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld characters</string>
|
<string>%ld حَرف</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>plural.count.metric_formatted.post</key>
|
<key>plural.count.metric_formatted.post</key>
|
||||||
|
@ -85,17 +85,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>posts</string>
|
<string>لا منشور</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>post</string>
|
<string>منشور</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>posts</string>
|
<string>منشوران</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>posts</string>
|
<string>منشورات</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>posts</string>
|
<string>منشورًا</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>posts</string>
|
<string>منشور</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>plural.count.post</key>
|
<key>plural.count.post</key>
|
||||||
|
@ -109,17 +109,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld posts</string>
|
<string>لا منشور</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 post</string>
|
<string>منشورٌ واحِد</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld posts</string>
|
<string>منشورانِ اثنان</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld posts</string>
|
<string>%ld منشورات</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld posts</string>
|
<string>%ld منشورًا</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld posts</string>
|
<string>%ld منشور</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>plural.count.favorite</key>
|
<key>plural.count.favorite</key>
|
||||||
|
@ -133,17 +133,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld favorites</string>
|
<string>لا إعجاب</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 favorite</string>
|
<string>إعجابٌ واحِد</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld favorites</string>
|
<string>إعجابانِ اثنان</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld favorites</string>
|
<string>%ld إعجابات</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld favorites</string>
|
<string>%ld إعجابًا</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld favorites</string>
|
<string>%ld إعجاب</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>plural.count.reblog</key>
|
<key>plural.count.reblog</key>
|
||||||
|
@ -157,17 +157,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld reblogs</string>
|
<string>لا إعاد تدوين</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 reblog</string>
|
<string>إعادةُ تدوينٍ واحِدة</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld reblogs</string>
|
<string>إعادتا تدوين</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld reblogs</string>
|
<string>%ld إعاداتِ تدوين</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld reblogs</string>
|
<string>%ld إعادةٍ للتدوين</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld reblogs</string>
|
<string>%ld إعادة تدوين</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>plural.count.vote</key>
|
<key>plural.count.vote</key>
|
||||||
|
@ -181,17 +181,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld votes</string>
|
<string>لا صوت</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 vote</string>
|
<string>صوتٌ واحِد</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld votes</string>
|
<string>صوتانِ اثنان</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld votes</string>
|
<string>%ld أصوات</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld votes</string>
|
<string>%ld صوتًا</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld votes</string>
|
<string>%ld صوت</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>plural.count.voter</key>
|
<key>plural.count.voter</key>
|
||||||
|
@ -205,17 +205,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld voters</string>
|
<string>لا مُصوِّتون</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 voter</string>
|
<string>مُصوِّتٌ واحِد</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld voters</string>
|
<string>مُصوِّتانِ اثنان</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld voters</string>
|
<string>%ld مُصوِّتين</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld voters</string>
|
<string>%ld مُصوِّتًا</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld voters</string>
|
<string>%ld مُصوِّت</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>plural.people_talking</key>
|
<key>plural.people_talking</key>
|
||||||
|
@ -229,17 +229,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld people talking</string>
|
<string>لا أحَدَ يتحدَّث</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 people talking</string>
|
<string>شخصٌ واحدٌ يتحدَّث</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld people talking</string>
|
<string>شخصانِ اثنان يتحدَّثا</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld people talking</string>
|
<string>%ld أشخاصٍ يتحدَّثون</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld people talking</string>
|
<string>%ld شخصًا يتحدَّثون</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld people talking</string>
|
<string>%ld شخصٍ يتحدَّثون</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>plural.count.following</key>
|
<key>plural.count.following</key>
|
||||||
|
@ -253,17 +253,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld following</string>
|
<string>لا مُتابَع</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 following</string>
|
<string>مُتابَعٌ واحد</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld following</string>
|
<string>مُتابَعانِ</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld following</string>
|
<string>%ld مُتابَعين</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld following</string>
|
<string>%ld مُتابَعًا</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld following</string>
|
<string>%ld مُتابَع</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>plural.count.follower</key>
|
<key>plural.count.follower</key>
|
||||||
|
@ -279,15 +279,15 @@
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld followers</string>
|
<string>%ld followers</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 follower</string>
|
<string>مُتابِعٌ واحد</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld followers</string>
|
<string>مُتابِعانِ اثنان</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld followers</string>
|
<string>%ld مُتابِعين</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld followers</string>
|
<string>%ld مُتابِعًا</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld followers</string>
|
<string>%ld مُتابِع</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.year.left</key>
|
<key>date.year.left</key>
|
||||||
|
@ -301,17 +301,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld years left</string>
|
<string>تتبقى لَحظة</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 year left</string>
|
<string>تتبقى سنة</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld years left</string>
|
<string>تتبقى سنتين</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld years left</string>
|
<string>تتبقى %ld سنوات</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld years left</string>
|
<string>تتبقى %ld سنةً</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld years left</string>
|
<string>تتبقى %ld سنة</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.month.left</key>
|
<key>date.month.left</key>
|
||||||
|
@ -325,17 +325,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld months left</string>
|
<string>تتبقى لَحظة</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 months left</string>
|
<string>يتبقى شهر</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld months left</string>
|
<string>يتبقى شهرين</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld months left</string>
|
<string>يتبقى %ld أشهر</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld months left</string>
|
<string>يتبقى %ld شهرًا</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld months left</string>
|
<string>يتبقى %ld شهر</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.day.left</key>
|
<key>date.day.left</key>
|
||||||
|
@ -349,17 +349,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld days left</string>
|
<string>تتبقى لحظة</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 day left</string>
|
<string>يتبقى يوم</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld days left</string>
|
<string>يتبقى يومين</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld days left</string>
|
<string>يتبقى %ld أيام</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld days left</string>
|
<string>يتبقى %ld يومًا</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld days left</string>
|
<string>يتبقى %ld يوم</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.hour.left</key>
|
<key>date.hour.left</key>
|
||||||
|
@ -373,17 +373,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld hours left</string>
|
<string>تتبقى لَحظة</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 hour left</string>
|
<string>تتبقى ساعة</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld hours left</string>
|
<string>تتبقى ساعتين</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld hours left</string>
|
<string>تتبقى %ld ساعات</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld hours left</string>
|
<string>تتبقى %ld ساعةً</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld hours left</string>
|
<string>تتبقى %ld ساعة</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.minute.left</key>
|
<key>date.minute.left</key>
|
||||||
|
@ -397,17 +397,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld minutes left</string>
|
<string>تتبقى لَحظة</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 minute left</string>
|
<string>تتبقى دقيقة</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld minutes left</string>
|
<string>تتبقى دقيقتين</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld minutes left</string>
|
<string>تتبقى %ld دقائق</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld minutes left</string>
|
<string>تتبقى %ld دقيقةً</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld minutes left</string>
|
<string>تتبقى %ld دقيقة</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.second.left</key>
|
<key>date.second.left</key>
|
||||||
|
@ -421,17 +421,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld seconds left</string>
|
<string>تتبقى لَحظة</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 second left</string>
|
<string>تتبقى ثانية</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld seconds left</string>
|
<string>تتبقى ثانيتين</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld seconds left</string>
|
<string>تتبقى %ld ثوان</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld seconds left</string>
|
<string>تتبقى %ld ثانيةً</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld seconds left</string>
|
<string>تتبقى %ld ثانية</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.year.ago.abbr</key>
|
<key>date.year.ago.abbr</key>
|
||||||
|
@ -445,17 +445,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ldy ago</string>
|
<string>مُنذُ لَحظة</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1y ago</string>
|
<string>مُنذُ سنة</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ldy ago</string>
|
<string>مُنذُ سنتين</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ldy ago</string>
|
<string>مُنذُ %ld سنين</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ldy ago</string>
|
<string>مُنذُ %ld سنةً</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ldy ago</string>
|
<string>مُنذُ %ld سنة</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.month.ago.abbr</key>
|
<key>date.month.ago.abbr</key>
|
||||||
|
@ -469,17 +469,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ldM ago</string>
|
<string>مُنذُ لَحظة</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1M ago</string>
|
<string>مُنذُ شهر</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ldM ago</string>
|
<string>مُنذُ شهرين</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ldM ago</string>
|
<string>مُنذُ %ld أشهُر</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ldM ago</string>
|
<string>مُنذُ %ld شهرًا</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ldM ago</string>
|
<string>مُنذُ %ld شهر</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.day.ago.abbr</key>
|
<key>date.day.ago.abbr</key>
|
||||||
|
@ -493,17 +493,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ldd ago</string>
|
<string>مُنذُ لَحظة</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1d ago</string>
|
<string>مُنذُ يوم</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ldd ago</string>
|
<string>مُنذُ يومين</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ldd ago</string>
|
<string>مُنذُ %ld أيام</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ldd ago</string>
|
<string>مُنذُ %ld يومًا</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ldd ago</string>
|
<string>مُنذُ %ld يوم</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.hour.ago.abbr</key>
|
<key>date.hour.ago.abbr</key>
|
||||||
|
@ -517,17 +517,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ldh ago</string>
|
<string>مُنذُ لَحظة</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1h ago</string>
|
<string>مُنذُ ساعة</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ldh ago</string>
|
<string>مُنذُ ساعتين</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ldh ago</string>
|
<string>مُنذُ %ld ساعات</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ldh ago</string>
|
<string>مُنذُ %ld ساعةًَ</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ldh ago</string>
|
<string>مُنذُ %ld ساعة</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.minute.ago.abbr</key>
|
<key>date.minute.ago.abbr</key>
|
||||||
|
@ -541,17 +541,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ldm ago</string>
|
<string>مُنذُ لَحظة</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1m ago</string>
|
<string>مُنذُ دقيقة</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ldm ago</string>
|
<string>مُنذُ دقيقتان</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ldm ago</string>
|
<string>مُنذُ %ld دقائق</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ldm ago</string>
|
<string>مُنذُ %ld دقيقةً</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ldm ago</string>
|
<string>مُنذُ %ld دقيقة</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.second.ago.abbr</key>
|
<key>date.second.ago.abbr</key>
|
||||||
|
@ -565,17 +565,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%lds ago</string>
|
<string>مُنذُ لَحظة</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1s ago</string>
|
<string>مُنذُ ثانية</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%lds ago</string>
|
<string>مُنذُ ثانيتين</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%lds ago</string>
|
<string>مُنذُ %ld ثوان</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%lds ago</string>
|
<string>مُنذُ %ld ثانية</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%lds ago</string>
|
<string>مُنذُ %ld ثانية</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
"common": {
|
"common": {
|
||||||
"alerts": {
|
"alerts": {
|
||||||
"common": {
|
"common": {
|
||||||
"please_try_again": "الرجاء المحاولة مرة أخرى.",
|
"please_try_again": "يُرجى المحاولة مرة أُخرى.",
|
||||||
"please_try_again_later": "الرجاء المحاولة مرة أخرى لاحقاً."
|
"please_try_again_later": "يُرجى المحاولة مرة أُخرى لاحقاً."
|
||||||
},
|
},
|
||||||
"sign_up_failure": {
|
"sign_up_failure": {
|
||||||
"title": "فشل التسجيل"
|
"title": "فشل التسجيل"
|
||||||
|
@ -28,8 +28,8 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"edit_profile_failure": {
|
"edit_profile_failure": {
|
||||||
"title": "Edit Profile Error",
|
"title": "خطأ في تَحرير الملف الشخصي",
|
||||||
"message": "لا يمكن تعديل الملف الشخصي. الرجاء المحاولة مرة أخرى."
|
"message": "لا يمكن تعديل الملف الشخصي. يُرجى المحاولة مرة أُخرى."
|
||||||
},
|
},
|
||||||
"sign_out": {
|
"sign_out": {
|
||||||
"title": "تسجيل الخروج",
|
"title": "تسجيل الخروج",
|
||||||
|
@ -49,8 +49,8 @@
|
||||||
"delete": "احذف"
|
"delete": "احذف"
|
||||||
},
|
},
|
||||||
"clean_cache": {
|
"clean_cache": {
|
||||||
"title": "تنظيف ذاكرة التخزين المؤقت",
|
"title": "مَحو ذاكرة التخزين المؤقت",
|
||||||
"message": "تم تنظيف ذاكرة التخزين المؤقت %s بنجاح."
|
"message": "تمَّ مَحو ذاكرة التخزين المؤقت %s بنجاح."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"controls": {
|
"controls": {
|
||||||
|
@ -64,17 +64,17 @@
|
||||||
"edit": "تعديل",
|
"edit": "تعديل",
|
||||||
"save": "حفظ",
|
"save": "حفظ",
|
||||||
"ok": "حسنًا",
|
"ok": "حسنًا",
|
||||||
"done": "تم",
|
"done": "تمّ",
|
||||||
"confirm": "تأكيد",
|
"confirm": "تأكيد",
|
||||||
"continue": "واصل",
|
"continue": "واصل",
|
||||||
"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": "شارك",
|
||||||
|
@ -122,7 +122,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"status": {
|
"status": {
|
||||||
"user_reblogged": "%s reblogged",
|
"user_reblogged": "أعادَ %s تدوينها",
|
||||||
"user_replied_to": "رد على %s",
|
"user_replied_to": "رد على %s",
|
||||||
"show_post": "اظهر المنشور",
|
"show_post": "اظهر المنشور",
|
||||||
"show_user_profile": "اظهر الملف التعريفي للمستخدم",
|
"show_user_profile": "اظهر الملف التعريفي للمستخدم",
|
||||||
|
@ -152,8 +152,8 @@
|
||||||
"friendship": {
|
"friendship": {
|
||||||
"follow": "اتبع",
|
"follow": "اتبع",
|
||||||
"following": "مُتابَع",
|
"following": "مُتابَع",
|
||||||
"request": "Request",
|
"request": "إرسال طَلَب",
|
||||||
"pending": "Pending",
|
"pending": "قيد المُراجعة",
|
||||||
"block": "حظر",
|
"block": "حظر",
|
||||||
"block_user": "حظر %s",
|
"block_user": "حظر %s",
|
||||||
"block_domain": "حظر %s",
|
"block_domain": "حظر %s",
|
||||||
|
@ -168,12 +168,12 @@
|
||||||
"edit_info": "تعديل المعلومات"
|
"edit_info": "تعديل المعلومات"
|
||||||
},
|
},
|
||||||
"timeline": {
|
"timeline": {
|
||||||
"filtered": "Filtered",
|
"filtered": "مُصفَّى",
|
||||||
"timestamp": {
|
"timestamp": {
|
||||||
"now": "الأن"
|
"now": "الأن"
|
||||||
},
|
},
|
||||||
"loader": {
|
"loader": {
|
||||||
"load_missing_posts": "Load missing posts",
|
"load_missing_posts": "تحميل المنشورات المَفقودة",
|
||||||
"loading_missing_posts": "تحميل المزيد من المنشورات...",
|
"loading_missing_posts": "تحميل المزيد من المنشورات...",
|
||||||
"show_more_replies": "إظهار المزيد من الردود"
|
"show_more_replies": "إظهار المزيد من الردود"
|
||||||
},
|
},
|
||||||
|
@ -194,19 +194,19 @@
|
||||||
"slogan": "Social networking\nback in your hands."
|
"slogan": "Social networking\nback in your hands."
|
||||||
},
|
},
|
||||||
"server_picker": {
|
"server_picker": {
|
||||||
"title": "Pick a server,\nany server.",
|
"title": "اِختر خادِم،\nأي خادِم.",
|
||||||
"button": {
|
"button": {
|
||||||
"category": {
|
"category": {
|
||||||
"all": "الكل",
|
"all": "الكل",
|
||||||
"all_accessiblity_description": "الفئة: الكل",
|
"all_accessiblity_description": "الفئة: الكل",
|
||||||
"academia": "academia",
|
"academia": "أكاديمي",
|
||||||
"activism": "للنشطاء",
|
"activism": "للنشطاء",
|
||||||
"food": "الطعام",
|
"food": "الطعام",
|
||||||
"furry": "فروي",
|
"furry": "فروي",
|
||||||
"games": "ألعاب",
|
"games": "ألعاب",
|
||||||
"general": "عام",
|
"general": "عام",
|
||||||
"journalism": "صحافة",
|
"journalism": "صحافة",
|
||||||
"lgbt": "lgbt",
|
"lgbt": "مجتمع الشواذ",
|
||||||
"regional": "اقليمي",
|
"regional": "اقليمي",
|
||||||
"art": "فن",
|
"art": "فن",
|
||||||
"music": "موسيقى",
|
"music": "موسيقى",
|
||||||
|
@ -302,20 +302,20 @@
|
||||||
"dont_receive_email": {
|
"dont_receive_email": {
|
||||||
"title": "تحقق من بريدك الإلكتروني",
|
"title": "تحقق من بريدك الإلكتروني",
|
||||||
"description": "Check if your email address is correct as well as your junk folder if you haven’t.",
|
"description": "Check if your email address is correct as well as your junk folder if you haven’t.",
|
||||||
"resend_email": "Resend Email"
|
"resend_email": "إعادة إرسال البريد الإلكتروني"
|
||||||
},
|
},
|
||||||
"open_email_app": {
|
"open_email_app": {
|
||||||
"title": "Check your inbox.",
|
"title": "تحقَّق من بريدك الوارِد.",
|
||||||
"description": "We just sent you an email. Check your junk folder if you haven’t.",
|
"description": "We just sent you an email. Check your junk folder if you haven’t.",
|
||||||
"mail": "البريد",
|
"mail": "البريد",
|
||||||
"open_email_client": "Open Email Client"
|
"open_email_client": "فتح عميل البريد الإلكتروني"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"home_timeline": {
|
"home_timeline": {
|
||||||
"title": "الخيط الرئيسي",
|
"title": "الخيط الرئيسي",
|
||||||
"navigation_bar_state": {
|
"navigation_bar_state": {
|
||||||
"offline": "غير متصل",
|
"offline": "غير متصل",
|
||||||
"new_posts": "See new posts",
|
"new_posts": "إظهار منشورات جديدة",
|
||||||
"published": "تم نشره!",
|
"published": "تم نشره!",
|
||||||
"Publishing": "جارٍ نشر المشاركة…"
|
"Publishing": "جارٍ نشر المشاركة…"
|
||||||
}
|
}
|
||||||
|
@ -334,7 +334,7 @@
|
||||||
"photo_library": "مكتبة الصور",
|
"photo_library": "مكتبة الصور",
|
||||||
"browse": "تصفح"
|
"browse": "تصفح"
|
||||||
},
|
},
|
||||||
"content_input_placeholder": "ما الذي يجول ببالك",
|
"content_input_placeholder": "أخبِرنا بِما يَجُولُ فِي ذِهنَك",
|
||||||
"compose_action": "انشر",
|
"compose_action": "انشر",
|
||||||
"replying_to_user": "رد على %s",
|
"replying_to_user": "رد على %s",
|
||||||
"attachment": {
|
"attachment": {
|
||||||
|
@ -367,7 +367,7 @@
|
||||||
"space_to_add": "Space to add"
|
"space_to_add": "Space to add"
|
||||||
},
|
},
|
||||||
"accessibility": {
|
"accessibility": {
|
||||||
"append_attachment": "Add Attachment",
|
"append_attachment": "إضافة مُرفَق",
|
||||||
"append_poll": "اضافة استطلاع رأي",
|
"append_poll": "اضافة استطلاع رأي",
|
||||||
"remove_poll": "إزالة الاستطلاع",
|
"remove_poll": "إزالة الاستطلاع",
|
||||||
"custom_emoji_picker": "منتقي مخصص للإيموجي",
|
"custom_emoji_picker": "منتقي مخصص للإيموجي",
|
||||||
|
@ -376,11 +376,11 @@
|
||||||
"post_visibility_menu": "Post Visibility Menu"
|
"post_visibility_menu": "Post Visibility Menu"
|
||||||
},
|
},
|
||||||
"keyboard": {
|
"keyboard": {
|
||||||
"discard_post": "Discard Post",
|
"discard_post": "تجاهُل المنشور",
|
||||||
"publish_post": "Publish Post",
|
"publish_post": "نَشر المَنشُور",
|
||||||
"toggle_poll": "Toggle Poll",
|
"toggle_poll": "تبديل الاستطلاع",
|
||||||
"toggle_content_warning": "Toggle Content Warning",
|
"toggle_content_warning": "تبديل تحذير المُحتوى",
|
||||||
"append_attachment_entry": "Add Attachment - %s",
|
"append_attachment_entry": "إضافة مُرفَق - %s",
|
||||||
"select_visibility_entry": "اختر مدى الظهور - %s"
|
"select_visibility_entry": "اختر مدى الظهور - %s"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -393,7 +393,7 @@
|
||||||
"fields": {
|
"fields": {
|
||||||
"add_row": "إضافة صف",
|
"add_row": "إضافة صف",
|
||||||
"placeholder": {
|
"placeholder": {
|
||||||
"label": "Label",
|
"label": "التسمية",
|
||||||
"content": "المحتوى"
|
"content": "المحتوى"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -424,7 +424,7 @@
|
||||||
"hash_tag": {
|
"hash_tag": {
|
||||||
"title": "ذات شعبية على ماستدون",
|
"title": "ذات شعبية على ماستدون",
|
||||||
"description": "Hashtags that are getting quite a bit of attention",
|
"description": "Hashtags that are getting quite a bit of attention",
|
||||||
"people_talking": "%s people are talking"
|
"people_talking": "%s أشخاص يتحدَّثوا"
|
||||||
},
|
},
|
||||||
"accounts": {
|
"accounts": {
|
||||||
"title": "حسابات قد تعجبك",
|
"title": "حسابات قد تعجبك",
|
||||||
|
@ -459,15 +459,15 @@
|
||||||
"user_reblogged_your_post": "أعاد %s تدوين مشاركتك",
|
"user_reblogged_your_post": "أعاد %s تدوين مشاركتك",
|
||||||
"user_mentioned_you": "أشار إليك %s",
|
"user_mentioned_you": "أشار إليك %s",
|
||||||
"user_requested_to_follow_you": "طلب %s متابعتك",
|
"user_requested_to_follow_you": "طلب %s متابعتك",
|
||||||
"user_your_poll_has_ended": "%s Your poll has ended",
|
"user_your_poll_has_ended": "%s اِنتهى استطلاعُكَ للرأي",
|
||||||
"keyobard": {
|
"keyobard": {
|
||||||
"show_everything": "إظهار كل شيء",
|
"show_everything": "إظهار كل شيء",
|
||||||
"show_mentions": "Show Mentions"
|
"show_mentions": "إظهار الإشارات"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"thread": {
|
"thread": {
|
||||||
"back_title": "Post",
|
"back_title": "منشور",
|
||||||
"title": "Post from %s"
|
"title": "مَنشور مِن %s"
|
||||||
},
|
},
|
||||||
"settings": {
|
"settings": {
|
||||||
"title": "الإعدادات",
|
"title": "الإعدادات",
|
||||||
|
@ -475,29 +475,29 @@
|
||||||
"appearance": {
|
"appearance": {
|
||||||
"title": "المظهر",
|
"title": "المظهر",
|
||||||
"automatic": "تلقائي",
|
"automatic": "تلقائي",
|
||||||
"light": "Always Light",
|
"light": "مضيءٌ دائمًا",
|
||||||
"dark": "Always Dark"
|
"dark": "مظلمٌ دائِمًا"
|
||||||
},
|
},
|
||||||
"notifications": {
|
"notifications": {
|
||||||
"title": "الإشعارات",
|
"title": "الإشعارات",
|
||||||
"favorites": "Favorites my post",
|
"favorites": "الإعجاب بِمنشوراتي",
|
||||||
"follows": "يتابعني",
|
"follows": "يتابعني",
|
||||||
"boosts": "Reblogs my post",
|
"boosts": "إعادة تدوين منشوراتي",
|
||||||
"mentions": "Mentions me",
|
"mentions": "الإشارة لي",
|
||||||
"trigger": {
|
"trigger": {
|
||||||
"anyone": "anyone",
|
"anyone": "أي شخص",
|
||||||
"follower": "مشترِك",
|
"follower": "مشترِك",
|
||||||
"follow": "anyone I follow",
|
"follow": "أي شخص أُتابِعُه",
|
||||||
"noone": "no one",
|
"noone": "لا أحد",
|
||||||
"title": "Notify me when"
|
"title": "إشعاري عِندَ"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"preference": {
|
"preference": {
|
||||||
"title": "التفضيلات",
|
"title": "التفضيلات",
|
||||||
"true_black_dark_mode": "True black dark mode",
|
"true_black_dark_mode": "النمط الأسود الداكِن الحقيقي",
|
||||||
"disable_avatar_animation": "Disable animated avatars",
|
"disable_avatar_animation": "تعطيل الصور الرمزية المتحرِّكة",
|
||||||
"disable_emoji_animation": "Disable animated emojis",
|
"disable_emoji_animation": "تعطيل الرموز التعبيرية المتحرِّكَة",
|
||||||
"using_default_browser": "Use default browser to open links"
|
"using_default_browser": "اِستخدام المتصفح الافتراضي لفتح الروابط"
|
||||||
},
|
},
|
||||||
"boring_zone": {
|
"boring_zone": {
|
||||||
"title": "المنطقة المملة",
|
"title": "المنطقة المملة",
|
||||||
|
@ -537,13 +537,13 @@
|
||||||
},
|
},
|
||||||
"account_list": {
|
"account_list": {
|
||||||
"tab_bar_hint": "Current selected profile: %s. Double tap then hold to show account switcher",
|
"tab_bar_hint": "Current selected profile: %s. Double tap then hold to show account switcher",
|
||||||
"dismiss_account_switcher": "Dismiss Account Switcher",
|
"dismiss_account_switcher": "تجاهُل مبدِّل الحساب",
|
||||||
"add_account": "Add Account"
|
"add_account": "إضافة حساب"
|
||||||
},
|
},
|
||||||
"wizard": {
|
"wizard": {
|
||||||
"new_in_mastodon": "New in Mastodon",
|
"new_in_mastodon": "جديد في ماستودون",
|
||||||
"multiple_account_switch_intro_description": "Switch between multiple accounts by holding the profile button.",
|
"multiple_account_switch_intro_description": "Switch between multiple accounts by holding the profile button.",
|
||||||
"accessibility_hint": "Double tap to dismiss this wizard"
|
"accessibility_hint": "انقر نقرًا مزدوجًا لتجاهل النافذة المنبثقة"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"NSCameraUsageDescription": "Used to take photo for post status",
|
"NSCameraUsageDescription": "يُستخدم لالتقاط الصورة عِندَ نشر الحالات",
|
||||||
"NSPhotoLibraryAddUsageDescription": "Used to save photo into the Photo Library",
|
"NSPhotoLibraryAddUsageDescription": "يُستخدم لحِفظ الصورة في مكتبة الصور",
|
||||||
"NewPostShortcutItemTitle": "منشور جديد",
|
"NewPostShortcutItemTitle": "منشور جديد",
|
||||||
"SearchShortcutItemTitle": "البحث"
|
"SearchShortcutItemTitle": "البحث"
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
<key>a11y.plural.count.input_limit_exceeds</key>
|
<key>a11y.plural.count.input_limit_exceeds</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSStringLocalizedFormatKey</key>
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
<string>El límit d’entrada supera a %#@character_count@</string>
|
<string>El límit de la entrada supera a %#@character_count@</string>
|
||||||
<key>character_count</key>
|
<key>character_count</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSStringFormatSpecTypeKey</key>
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
@ -37,7 +37,7 @@
|
||||||
<key>a11y.plural.count.input_limit_remains</key>
|
<key>a11y.plural.count.input_limit_remains</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSStringLocalizedFormatKey</key>
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
<string>El límit d’entrada continua sent %#@character_count@</string>
|
<string>El límit de la entrada continua sent %#@character_count@</string>
|
||||||
<key>character_count</key>
|
<key>character_count</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSStringFormatSpecTypeKey</key>
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
@ -111,7 +111,7 @@
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 impuls</string>
|
<string>1 impuls</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld impuls</string>
|
<string>%ld impulsos</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>plural.count.vote</key>
|
<key>plural.count.vote</key>
|
||||||
|
@ -301,9 +301,9 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>fa 1a</string>
|
<string>fa 1 any</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>fa %ldy anys</string>
|
<string>fa %ld anys</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.month.ago.abbr</key>
|
<key>date.month.ago.abbr</key>
|
||||||
|
@ -317,9 +317,9 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>fa 1M</string>
|
<string>fa 1 mes</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>fa %ldM mesos</string>
|
<string>fa %ld mesos</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.day.ago.abbr</key>
|
<key>date.day.ago.abbr</key>
|
||||||
|
@ -333,9 +333,9 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>fa 1d</string>
|
<string>fa 1 día</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>fa %ldd dies</string>
|
<string>fa %ld dies</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.hour.ago.abbr</key>
|
<key>date.hour.ago.abbr</key>
|
||||||
|
@ -351,7 +351,7 @@
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>fa 1h</string>
|
<string>fa 1h</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>fa %ldh hores</string>
|
<string>fa %ld hores</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.minute.ago.abbr</key>
|
<key>date.minute.ago.abbr</key>
|
||||||
|
@ -365,9 +365,9 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>fa 1m</string>
|
<string>fa 1 minut</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>fa %ldm minuts</string>
|
<string>fa %ld minuts</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.second.ago.abbr</key>
|
<key>date.second.ago.abbr</key>
|
||||||
|
@ -381,9 +381,9 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>fa 1s</string>
|
<string>fa 1 segon</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>fa %lds seg</string>
|
<string>fa %ld segons</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
|
|
|
@ -13,9 +13,9 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 unread notification</string>
|
<string>1 ungelesene Benachrichtigung</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld unread notification</string>
|
<string>%ld ungelesene Benachrichtigungen</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>a11y.plural.count.input_limit_exceeds</key>
|
<key>a11y.plural.count.input_limit_exceeds</key>
|
||||||
|
|
|
@ -536,14 +536,14 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"account_list": {
|
"account_list": {
|
||||||
"tab_bar_hint": "Current selected profile: %s. Double tap then hold to show account switcher",
|
"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": "Dismiss Account Switcher",
|
||||||
"add_account": "Add Account"
|
"add_account": "Konto hinzufügen"
|
||||||
},
|
},
|
||||||
"wizard": {
|
"wizard": {
|
||||||
"new_in_mastodon": "New in Mastodon",
|
"new_in_mastodon": "Neu in Mastodon",
|
||||||
"multiple_account_switch_intro_description": "Switch between multiple accounts by holding the profile button.",
|
"multiple_account_switch_intro_description": "Wechsel zwischen mehreren Konten durch drücken der Profil-Schaltfläche.",
|
||||||
"accessibility_hint": "Double tap to dismiss this wizard"
|
"accessibility_hint": "Doppeltippen, um diesen Assistenten zu schließen"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -13,13 +13,13 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 unread notification</string>
|
<string>%ld bhrath nach deach a leughadh</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld unread notification</string>
|
<string>%ld bhrath nach deach a leughadh</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld unread notification</string>
|
<string>%ld brathan nach deach a leughadh</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld unread notification</string>
|
<string>%ld brath nach deach a leughadh</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>a11y.plural.count.input_limit_exceeds</key>
|
<key>a11y.plural.count.input_limit_exceeds</key>
|
||||||
|
|
|
@ -536,14 +536,14 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"account_list": {
|
"account_list": {
|
||||||
"tab_bar_hint": "Current selected profile: %s. Double tap then hold to show account switcher",
|
"tab_bar_hint": "A’ phròifil air a taghadh: %s. Thoir gnogag dhùbailte is cùm sìos a ghearradh leum gu cunntas eile",
|
||||||
"dismiss_account_switcher": "Dismiss Account Switcher",
|
"dismiss_account_switcher": "Leig seachad taghadh a’ chunntais",
|
||||||
"add_account": "Add Account"
|
"add_account": "Cuir cunntas ris"
|
||||||
},
|
},
|
||||||
"wizard": {
|
"wizard": {
|
||||||
"new_in_mastodon": "New in Mastodon",
|
"new_in_mastodon": "Na tha ùr ann am Mastodon",
|
||||||
"multiple_account_switch_intro_description": "Switch between multiple accounts by holding the profile button.",
|
"multiple_account_switch_intro_description": "Geàrr leum eadar iomadh cunntas le cumail sìos putan na pròifil.",
|
||||||
"accessibility_hint": "Double tap to dismiss this wizard"
|
"accessibility_hint": "Thoir gnogag dhùbailte a’ leigeil seachad an draoidh seo"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -13,7 +13,7 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld unread notification</string>
|
<string>%ld 件の未読通知</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>a11y.plural.count.input_limit_exceeds</key>
|
<key>a11y.plural.count.input_limit_exceeds</key>
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld characters</string>
|
<string>%ld 文字</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>a11y.plural.count.input_limit_remains</key>
|
<key>a11y.plural.count.input_limit_remains</key>
|
||||||
|
@ -41,7 +41,7 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld characters</string>
|
<string>%ld 文字</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>plural.count.metric_formatted.post</key>
|
<key>plural.count.metric_formatted.post</key>
|
||||||
|
@ -111,7 +111,7 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld votes</string>
|
<string>%ld票</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>plural.count.voter</key>
|
<key>plural.count.voter</key>
|
||||||
|
@ -195,7 +195,7 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld months left</string>
|
<string>%ldか月前</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.day.left</key>
|
<key>date.day.left</key>
|
||||||
|
@ -279,7 +279,7 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ldM ago</string>
|
<string>%ld分前</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.day.ago.abbr</key>
|
<key>date.day.ago.abbr</key>
|
||||||
|
|
|
@ -191,7 +191,7 @@
|
||||||
},
|
},
|
||||||
"scene": {
|
"scene": {
|
||||||
"welcome": {
|
"welcome": {
|
||||||
"slogan": "Social networking\nback in your hands."
|
"slogan": "ソーシャルネットワーキングを、あなたの手の中に."
|
||||||
},
|
},
|
||||||
"server_picker": {
|
"server_picker": {
|
||||||
"title": "サーバーを選択",
|
"title": "サーバーを選択",
|
||||||
|
@ -538,11 +538,11 @@
|
||||||
"account_list": {
|
"account_list": {
|
||||||
"tab_bar_hint": "Current selected profile: %s. Double tap then hold to show account switcher",
|
"tab_bar_hint": "Current selected profile: %s. Double tap then hold to show account switcher",
|
||||||
"dismiss_account_switcher": "Dismiss Account Switcher",
|
"dismiss_account_switcher": "Dismiss Account Switcher",
|
||||||
"add_account": "Add Account"
|
"add_account": "アカウントを追加"
|
||||||
},
|
},
|
||||||
"wizard": {
|
"wizard": {
|
||||||
"new_in_mastodon": "New in Mastodon",
|
"new_in_mastodon": "Mastodon の新機能",
|
||||||
"multiple_account_switch_intro_description": "Switch between multiple accounts by holding the profile button.",
|
"multiple_account_switch_intro_description": "プロフィールボタンを押して複数のアカウントを切り替えます。",
|
||||||
"accessibility_hint": "Double tap to dismiss this wizard"
|
"accessibility_hint": "Double tap to dismiss this wizard"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,390 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>a11y.plural.count.unread.notification</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@notification_count_unread_notification@</string>
|
||||||
|
<key>notification_count_unread_notification</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 agahdariya nexwendî</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld agahdariyên nexwendî</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>a11y.plural.count.input_limit_exceeds</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>Sînorê têketinê derbas kir %#@character_count@</string>
|
||||||
|
<key>character_count</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 tîp</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld tîp</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>a11y.plural.count.input_limit_remains</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>Sînorê têketinê %#@character_count@ maye</string>
|
||||||
|
<key>character_count</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 tîp</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld tîp</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>plural.count.metric_formatted.post</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%@ %#@post_count@</string>
|
||||||
|
<key>post_count</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>şandî</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>şandî</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>plural.count.post</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@post_count@</string>
|
||||||
|
<key>post_count</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 şandî</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld şandî</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>plural.count.favorite</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@favorite_count@</string>
|
||||||
|
<key>favorite_count</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 hezkirin</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld hezkirin</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>plural.count.reblog</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@reblog_count@</string>
|
||||||
|
<key>reblog_count</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 reblog</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld reblogs</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>plural.count.vote</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@vote_count@</string>
|
||||||
|
<key>vote_count</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 deng</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld deng</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>plural.count.voter</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@voter_count@</string>
|
||||||
|
<key>voter_count</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 hilbijêr</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld hilbijêr</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>plural.people_talking</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_people_talking@</string>
|
||||||
|
<key>count_people_talking</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 mirov diaxive</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld mirov diaxive</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>plural.count.following</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_following@</string>
|
||||||
|
<key>count_following</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 dişopîne</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld dişopîne</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>plural.count.follower</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_follower@</string>
|
||||||
|
<key>count_follower</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 şopîner</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld şopîner</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>date.year.left</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_year_left@</string>
|
||||||
|
<key>count_year_left</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 sal berê</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld sal berê</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>date.month.left</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_month_left@</string>
|
||||||
|
<key>count_month_left</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 meh berê</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld meh berê</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>date.day.left</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_day_left@</string>
|
||||||
|
<key>count_day_left</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 roj berê</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld roj berê</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>date.hour.left</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_hour_left@</string>
|
||||||
|
<key>count_hour_left</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 demjimêr berê</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld demjimêr berê</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>date.minute.left</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_minute_left@</string>
|
||||||
|
<key>count_minute_left</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 xulek berê</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld xulek berê</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>date.second.left</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_second_left@</string>
|
||||||
|
<key>count_second_left</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 çirke berê</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld çirke berê</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>date.year.ago.abbr</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_year_ago_abbr@</string>
|
||||||
|
<key>count_year_ago_abbr</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 sal berê</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld sal berê</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>date.month.ago.abbr</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_month_ago_abbr@</string>
|
||||||
|
<key>count_month_ago_abbr</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 xulek berê</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld xulek berê</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>date.day.ago.abbr</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_day_ago_abbr@</string>
|
||||||
|
<key>count_day_ago_abbr</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 roj berê</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld roj berê</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>date.hour.ago.abbr</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_hour_ago_abbr@</string>
|
||||||
|
<key>count_hour_ago_abbr</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 demjimêr berê</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld demjimêr berê</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>date.minute.ago.abbr</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_minute_ago_abbr@</string>
|
||||||
|
<key>count_minute_ago_abbr</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 xulek berê</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld xulek berê</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>date.second.ago.abbr</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_second_ago_abbr@</string>
|
||||||
|
<key>count_second_ago_abbr</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 çirke berê</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld çirke berê</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
|
@ -0,0 +1,549 @@
|
||||||
|
{
|
||||||
|
"common": {
|
||||||
|
"alerts": {
|
||||||
|
"common": {
|
||||||
|
"please_try_again": "Ji kerema xwe dîsa biceribîne.",
|
||||||
|
"please_try_again_later": "Ji kerema xwe paşê dîsa biceribîne."
|
||||||
|
},
|
||||||
|
"sign_up_failure": {
|
||||||
|
"title": "Tomarkirin têkçû"
|
||||||
|
},
|
||||||
|
"server_error": {
|
||||||
|
"title": "Çewtiya rajekar"
|
||||||
|
},
|
||||||
|
"vote_failure": {
|
||||||
|
"title": "Dengdayîn têkçû",
|
||||||
|
"poll_ended": "Rapirsîya qediya"
|
||||||
|
},
|
||||||
|
"discard_post_content": {
|
||||||
|
"title": "Reşnivîs jêbibe",
|
||||||
|
"message": "Piştrast bikin ku naveroka posteyê ya hatîye nivîsandin jê bibin."
|
||||||
|
},
|
||||||
|
"publish_post_failure": {
|
||||||
|
"title": "Weşandin têkçû",
|
||||||
|
"message": "Weşandina şandiyê têkçû.\nJkx girêdana înternetê xwe kontrol bike.",
|
||||||
|
"attachments_message": {
|
||||||
|
"video_attach_with_photo": "Nikare vîdyoyekê tevlî şandiyê ku berê wêne tê de heye bike.",
|
||||||
|
"more_than_one_video": "Nikare ji bêtirî yek vîdyoyekê tevlî şandiyê bike."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"edit_profile_failure": {
|
||||||
|
"title": "Çewtiya profîlê biguherîne",
|
||||||
|
"message": "Nikare profîlê serrast bike. Jkx dîsa biceribîne."
|
||||||
|
},
|
||||||
|
"sign_out": {
|
||||||
|
"title": "Derkeve",
|
||||||
|
"message": "Ma tu dixwazî ku derkevî?",
|
||||||
|
"confirm": "Derkeve"
|
||||||
|
},
|
||||||
|
"block_domain": {
|
||||||
|
"title": "Tu ji xwe bawerî, bi rastî tu dixwazî hemû %s asteng bikî? Di gelek rewşan de asteng kirin an jî bêdeng kirin têrê dike û tê tercîh kirin. Tu nikarî naveroka vê navperê di demnameyê an jî agahdariyên xwe de bibînî. Şopînerên te yê di vê navperê were jêbirin.",
|
||||||
|
"block_entire_domain": "Navperê asteng bike"
|
||||||
|
},
|
||||||
|
"save_photo_failure": {
|
||||||
|
"title": "Tomarkirina wêneyê têkçû",
|
||||||
|
"message": "Ji kerema xwe destûra gihîştina pirtûkxaneya wêneyê çalak bikin da ku wêneyê hilînin."
|
||||||
|
},
|
||||||
|
"delete_post": {
|
||||||
|
"title": "Ma tu dixwazî vê şandiyê jê bibî?",
|
||||||
|
"delete": "Jê bibe"
|
||||||
|
},
|
||||||
|
"clean_cache": {
|
||||||
|
"title": "Pêşbîrê paqij bike",
|
||||||
|
"message": "Pêşbîra %s biserketî hate paqijkirin."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"controls": {
|
||||||
|
"actions": {
|
||||||
|
"back": "Vegere",
|
||||||
|
"next": "Pêş",
|
||||||
|
"previous": "Paş",
|
||||||
|
"open": "Veke",
|
||||||
|
"add": "Tevlî bike",
|
||||||
|
"remove": "Rake",
|
||||||
|
"edit": "Serrast bike",
|
||||||
|
"save": "Tomar bike",
|
||||||
|
"ok": "BAŞ E",
|
||||||
|
"done": "Qediya",
|
||||||
|
"confirm": "Bipejirîne",
|
||||||
|
"continue": "Bidomîne",
|
||||||
|
"cancel": "Dev jê berde",
|
||||||
|
"discard": "Biavêje",
|
||||||
|
"try_again": "Dîsa biceribîne",
|
||||||
|
"take_photo": "Wêne bikişîne",
|
||||||
|
"save_photo": "Wêneyê hilîne",
|
||||||
|
"copy_photo": "Wêne kopî bikin",
|
||||||
|
"sign_in": "Têkeve",
|
||||||
|
"sign_up": "Tomar bibe",
|
||||||
|
"see_more": "Bêtir bibîne",
|
||||||
|
"preview": "Pêşdîtin",
|
||||||
|
"share": "Parve bike",
|
||||||
|
"share_user": "%s parve bike",
|
||||||
|
"share_post": "Şandiyê parve bike",
|
||||||
|
"open_in_safari": "Di Safariyê de veke",
|
||||||
|
"find_people": "Kesên ku bişopînin bibînin",
|
||||||
|
"manually_search": "Ji devlê i destan lêgerînê bike",
|
||||||
|
"skip": "Derbas bike",
|
||||||
|
"reply": "Bersivê bide",
|
||||||
|
"report_user": "%s ragihîne",
|
||||||
|
"block_domain": "%s asteng bike",
|
||||||
|
"unblock_domain": "%s asteng neke",
|
||||||
|
"settings": "Sazkarî",
|
||||||
|
"delete": "Jê bibe"
|
||||||
|
},
|
||||||
|
"tabs": {
|
||||||
|
"home": "Serrûpel",
|
||||||
|
"search": "Bigere",
|
||||||
|
"notification": "Agahdarî",
|
||||||
|
"profile": "Profîl"
|
||||||
|
},
|
||||||
|
"keyboard": {
|
||||||
|
"common": {
|
||||||
|
"switch_to_tab": "Biguherîne bo %s",
|
||||||
|
"compose_new_post": "Şandiyeke nû binivsîne",
|
||||||
|
"show_favorites": "Bijarteyan nîşan bide",
|
||||||
|
"open_settings": "Sazkariyan Veke"
|
||||||
|
},
|
||||||
|
"timeline": {
|
||||||
|
"previous_status": "Şandeya paş",
|
||||||
|
"next_status": "Şandiya pêş",
|
||||||
|
"open_status": "Şandiyê veke",
|
||||||
|
"open_author_profile": "Profîla nivîskaran veke",
|
||||||
|
"open_reblogger_profile": "Profîla nivîskaran veke",
|
||||||
|
"reply_status": "Bersivê bide şandiyê",
|
||||||
|
"toggle_reblog": "Toggle Reblog on Post",
|
||||||
|
"toggle_favorite": "Di postê da Bijartin veke/bigire",
|
||||||
|
"toggle_content_warning": "Hişyariya naverokê veke/bigire",
|
||||||
|
"preview_image": "Wêneya pêşdîtinê"
|
||||||
|
},
|
||||||
|
"segmented_control": {
|
||||||
|
"previous_section": "Beşa berê",
|
||||||
|
"next_section": "Beşa paşê"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"user_reblogged": "%s ji nû ve hat blogkirin",
|
||||||
|
"user_replied_to": "Bersiv da %s",
|
||||||
|
"show_post": "Şandiyê nîşan bide",
|
||||||
|
"show_user_profile": "Profîla bikarhêner nîşan bide",
|
||||||
|
"content_warning": "Hişyariya naverokê",
|
||||||
|
"media_content_warning": "Ji bo aşkerakirinê derekî bitikîne",
|
||||||
|
"poll": {
|
||||||
|
"vote": "Deng",
|
||||||
|
"closed": "Girtî"
|
||||||
|
},
|
||||||
|
"actions": {
|
||||||
|
"reply": "Bersivê bide",
|
||||||
|
"reblog": "Ji nû ve blog",
|
||||||
|
"unreblog": "Ji nû ve blogkirin betal bikin",
|
||||||
|
"favorite": "Bijartî",
|
||||||
|
"unfavorite": "Nebijare",
|
||||||
|
"menu": "Menû"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"url": "URL",
|
||||||
|
"mention": "Behs",
|
||||||
|
"link": "Girêdan",
|
||||||
|
"hashtag": "Etîket",
|
||||||
|
"email": "E-name",
|
||||||
|
"emoji": "E-name"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"friendship": {
|
||||||
|
"follow": "Bişopîne",
|
||||||
|
"following": "Dişopîne",
|
||||||
|
"request": "Daxwazên şopandinê",
|
||||||
|
"pending": "Tê nirxandin",
|
||||||
|
"block": "Asteng bike",
|
||||||
|
"block_user": "%s asteng bike",
|
||||||
|
"block_domain": "%s asteng bike",
|
||||||
|
"unblock": "Astengiyê rake",
|
||||||
|
"unblock_user": "%s asteng neke",
|
||||||
|
"blocked": "Astengkirî",
|
||||||
|
"mute": "Bêdeng bike",
|
||||||
|
"mute_user": "%s bêdeng bike",
|
||||||
|
"unmute": "Bêdeng neke",
|
||||||
|
"unmute_user": "%s bêdeng neke",
|
||||||
|
"muted": "Bêdengkirî",
|
||||||
|
"edit_info": "Zanyariyan serrast bike"
|
||||||
|
},
|
||||||
|
"timeline": {
|
||||||
|
"filtered": "Parzûnkirî",
|
||||||
|
"timestamp": {
|
||||||
|
"now": "Niha"
|
||||||
|
},
|
||||||
|
"loader": {
|
||||||
|
"load_missing_posts": "Barkirina posteyên kêm",
|
||||||
|
"loading_missing_posts": "Barkirina posteyên kêm...",
|
||||||
|
"show_more_replies": "Bêtir bersivan nîşan bide"
|
||||||
|
},
|
||||||
|
"header": {
|
||||||
|
"no_status_found": "Şandî nehate dîtin",
|
||||||
|
"blocking_warning": "Tu nikarî profîla vî bikarhênerî bibînî\nHeta ku tu wan asteng bikî.\nProfîla te ji wan ra wiha xuya dike.",
|
||||||
|
"user_blocking_warning": "Tu nikarî profîla %s bibînî\nHeta ku tu wan asteng bikî.\nProfîla te ji wan ra wiha xuya dike.",
|
||||||
|
"blocked_warning": "Tu nikarî profîla vî bikarhênerî bibînî\nheta ku astengîya te rakin.",
|
||||||
|
"user_blocked_warning": "Tu nikarî profîla %s bibînî\nHeta ku astengîya te rakin.",
|
||||||
|
"suspended_warning": "Ev bikarhêner hat sekinandin.",
|
||||||
|
"user_suspended_warning": "Hesaba %s hat sekinandin."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"scene": {
|
||||||
|
"welcome": {
|
||||||
|
"slogan": "Torên civakî\ndi destên te de."
|
||||||
|
},
|
||||||
|
"server_picker": {
|
||||||
|
"title": "Rajekarekê hilbijêre,\nHer kîjan rajekar be.",
|
||||||
|
"button": {
|
||||||
|
"category": {
|
||||||
|
"all": "Hemû",
|
||||||
|
"all_accessiblity_description": "Beş: Hemû",
|
||||||
|
"academia": "akademî",
|
||||||
|
"activism": "çalakî",
|
||||||
|
"food": "xwarin",
|
||||||
|
"furry": "furry",
|
||||||
|
"games": "lîsk",
|
||||||
|
"general": "giştî",
|
||||||
|
"journalism": "rojnamevanî",
|
||||||
|
"lgbt": "lgbt",
|
||||||
|
"regional": "herêmî",
|
||||||
|
"art": "huner",
|
||||||
|
"music": "muzîk",
|
||||||
|
"tech": "teknolojî"
|
||||||
|
},
|
||||||
|
"see_less": "Kêmtir bibîne",
|
||||||
|
"see_more": "Bêtir bibîne"
|
||||||
|
},
|
||||||
|
"label": {
|
||||||
|
"language": "ZIMAN",
|
||||||
|
"users": "BIKARHÊNER",
|
||||||
|
"category": "KATEGORÎ"
|
||||||
|
},
|
||||||
|
"input": {
|
||||||
|
"placeholder": "Serverek bibînin an jî beşdarî ya xwe bibin..."
|
||||||
|
},
|
||||||
|
"empty_state": {
|
||||||
|
"finding_servers": "Dîtina serverên berdest...",
|
||||||
|
"bad_network": "Di dema barkirina daneyan da tiştek xelet derket. Girêdana xwe ya înternetê kontrol bike.",
|
||||||
|
"no_results": "Encam nade"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"register": {
|
||||||
|
"title": "Ji me re hinekî qala xwe bike.",
|
||||||
|
"input": {
|
||||||
|
"avatar": {
|
||||||
|
"delete": "Jê bibe"
|
||||||
|
},
|
||||||
|
"username": {
|
||||||
|
"placeholder": "navê bikarhêner",
|
||||||
|
"duplicate_prompt": "Navê vê bikarhêner tê girtin."
|
||||||
|
},
|
||||||
|
"display_name": {
|
||||||
|
"placeholder": "navê nîşanê"
|
||||||
|
},
|
||||||
|
"email": {
|
||||||
|
"placeholder": "e-name"
|
||||||
|
},
|
||||||
|
"password": {
|
||||||
|
"placeholder": "şîfre",
|
||||||
|
"hint": "Şîfreya we herî kêm heşt tîpan hewce dike"
|
||||||
|
},
|
||||||
|
"invite": {
|
||||||
|
"registration_user_invite_request": "Tu çima dixwazî beşdar bibî?"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"item": {
|
||||||
|
"username": "Navê bikarhêner",
|
||||||
|
"email": "E-name",
|
||||||
|
"password": "Şîfre",
|
||||||
|
"agreement": "Lihevhatin",
|
||||||
|
"locale": "Herêm",
|
||||||
|
"reason": "Sedem"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"blocked": "%s peydekerê e-nameya bêdestûr dihewîne",
|
||||||
|
"unreachable": "%s xuya nake",
|
||||||
|
"taken": "%s jixwe tê bikaranîn",
|
||||||
|
"reserved": "%s peyveke mifteya veqetandî ye",
|
||||||
|
"accepted": "%s divê were qebûlkirin",
|
||||||
|
"blank": "%s pêwist e",
|
||||||
|
"invalid": "%s ne derbasdar e",
|
||||||
|
"too_long": "%s gelekî dirêj e",
|
||||||
|
"too_short": "%s pir kurt e",
|
||||||
|
"inclusion": "%s nirxeke ku tê destekirin nîn e"
|
||||||
|
},
|
||||||
|
"special": {
|
||||||
|
"username_invalid": "Navê bikarhêner divê tenê tîpên alfanumerîk û binxet hebe",
|
||||||
|
"username_too_long": "Navê bikarhêner pir dirêj e (ji 30 tîpan dirêjtir nabe)",
|
||||||
|
"email_invalid": "Ev ne navnîşana e-nameyek derbasdar e",
|
||||||
|
"password_too_short": "Şîfre pir kurt e (divê herî kêm 8 tîpan be)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"server_rules": {
|
||||||
|
"title": "Hin qaîdeyên bingehîn.",
|
||||||
|
"subtitle": "Ev rêzik ji aliyê rêvebirên %s ve tên sazkirin.",
|
||||||
|
"prompt": "Bi berdewamî, hûn ji bo %s di bin şertên polîtîkaya xizmet û nepenîtiyê da ne.",
|
||||||
|
"terms_of_service": "şert û mercên xizmetê",
|
||||||
|
"privacy_policy": "polîtîkaya nepenîtiyê",
|
||||||
|
"button": {
|
||||||
|
"confirm": "Ez tev dibim"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"confirm_email": {
|
||||||
|
"title": "Tiştekî dawî.",
|
||||||
|
"subtitle": "We just sent an email to %s,\ntap the link to confirm your account.",
|
||||||
|
"button": {
|
||||||
|
"open_email_app": "Sepana e-nameyê veke",
|
||||||
|
"dont_receive_email": "Min hîç e-nameyeke nesitand"
|
||||||
|
},
|
||||||
|
"dont_receive_email": {
|
||||||
|
"title": "E-nameyê xwe kontrol bike",
|
||||||
|
"description": "Kontrol bike ka navnîşana e-nameya te rast e û her wiha peldanka xwe ya spam.",
|
||||||
|
"resend_email": "E-namyê yê dîsa bişîne"
|
||||||
|
},
|
||||||
|
"open_email_app": {
|
||||||
|
"title": "Check your inbox.",
|
||||||
|
"description": "We just sent you an email. Check your junk folder if you haven’t.",
|
||||||
|
"mail": "E-name",
|
||||||
|
"open_email_client": "Rajegirê e-nameyê veke"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"home_timeline": {
|
||||||
|
"title": "Serrûpel",
|
||||||
|
"navigation_bar_state": {
|
||||||
|
"offline": "Derhêl",
|
||||||
|
"new_posts": "Şandiyên nû bibîne",
|
||||||
|
"published": "Hate weşandin!",
|
||||||
|
"Publishing": "Şandî tê weşandin..."
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"suggestion_account": {
|
||||||
|
"title": "Kesên bo ku bişopînî bibîne",
|
||||||
|
"follow_explain": "Gava tu kesekî dişopînî, tu yê şandiyê wan di serrûpelê de bibîne."
|
||||||
|
},
|
||||||
|
"compose": {
|
||||||
|
"title": {
|
||||||
|
"new_post": "Şandiya nû",
|
||||||
|
"new_reply": "Bersiva nû"
|
||||||
|
},
|
||||||
|
"media_selection": {
|
||||||
|
"camera": "Wêne bikişîne",
|
||||||
|
"photo_library": "Wênegeh",
|
||||||
|
"browse": "Bigere"
|
||||||
|
},
|
||||||
|
"content_input_placeholder": "Type or paste what’s on your mind",
|
||||||
|
"compose_action": "Biweşîne",
|
||||||
|
"replying_to_user": "bersiv bide %s",
|
||||||
|
"attachment": {
|
||||||
|
"photo": "wêne",
|
||||||
|
"video": "vîdyo",
|
||||||
|
"attachment_broken": "Ev %s naxebite û nayê barkirin\n li ser Mastodon.",
|
||||||
|
"description_photo": "Describe the photo for the visually-impaired...",
|
||||||
|
"description_video": "Describe the video for the visually-impaired..."
|
||||||
|
},
|
||||||
|
"poll": {
|
||||||
|
"duration_time": "Dirêjî: %s",
|
||||||
|
"thirty_minutes": "30 xulek",
|
||||||
|
"one_hour": "1 Demjimêr",
|
||||||
|
"six_hours": "6 Demjimêr",
|
||||||
|
"one_day": "1 Roj",
|
||||||
|
"three_days": "3 Roj",
|
||||||
|
"seven_days": "7 Roj",
|
||||||
|
"option_number": "Vebijêrk %ld"
|
||||||
|
},
|
||||||
|
"content_warning": {
|
||||||
|
"placeholder": "Write an accurate warning here..."
|
||||||
|
},
|
||||||
|
"visibility": {
|
||||||
|
"public": "Gelemperî",
|
||||||
|
"unlisted": "Nerêzokkirî",
|
||||||
|
"private": "Tenê şopîneran",
|
||||||
|
"direct": "Tenê mirovên ku min qalkirî"
|
||||||
|
},
|
||||||
|
"auto_complete": {
|
||||||
|
"space_to_add": "Space to add"
|
||||||
|
},
|
||||||
|
"accessibility": {
|
||||||
|
"append_attachment": "Pêvek tevlî bike",
|
||||||
|
"append_poll": "Rapirsî tevlî bike",
|
||||||
|
"remove_poll": "Rapirsî rake",
|
||||||
|
"custom_emoji_picker": "Custom Emoji Picker",
|
||||||
|
"enable_content_warning": "Enable Content Warning",
|
||||||
|
"disable_content_warning": "Hişyariya naverokê neçalak bike",
|
||||||
|
"post_visibility_menu": "Menuya Xuyabûna Şandiyê"
|
||||||
|
},
|
||||||
|
"keyboard": {
|
||||||
|
"discard_post": "Şandî bihelîne",
|
||||||
|
"publish_post": "Şandiye bide weşan",
|
||||||
|
"toggle_poll": "Anketê veke/bigire",
|
||||||
|
"toggle_content_warning": "Hişyariya naverokê veke/bigire",
|
||||||
|
"append_attachment_entry": "Pêvek lê zêde bike - %s",
|
||||||
|
"select_visibility_entry": "Xuyanîbûn hilbijêre - %s"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"profile": {
|
||||||
|
"dashboard": {
|
||||||
|
"posts": "şandîyan",
|
||||||
|
"following": "dişopîne",
|
||||||
|
"followers": "şopîneran"
|
||||||
|
},
|
||||||
|
"fields": {
|
||||||
|
"add_row": "Rêzê lê zêde bike",
|
||||||
|
"placeholder": {
|
||||||
|
"label": "Nîşan",
|
||||||
|
"content": "Naverok"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"segmented_control": {
|
||||||
|
"posts": "Şandîyan",
|
||||||
|
"replies": "Bersivan",
|
||||||
|
"media": "Medya"
|
||||||
|
},
|
||||||
|
"relationship_action_alert": {
|
||||||
|
"confirm_unmute_user": {
|
||||||
|
"title": "Hesabê ji bê deng rake",
|
||||||
|
"message": "Ji bo vekirina bê dengkirinê bipejirin %s"
|
||||||
|
},
|
||||||
|
"confirm_unblock_usre": {
|
||||||
|
"title": "Hesabê ji bloke rake",
|
||||||
|
"message": "Ji bo rakirina blokê bipejirin %s"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"search": {
|
||||||
|
"title": "Bigere",
|
||||||
|
"search_bar": {
|
||||||
|
"placeholder": "Li etîketan û bikarhêneran bigerin",
|
||||||
|
"cancel": "Betal kirin"
|
||||||
|
},
|
||||||
|
"recommend": {
|
||||||
|
"button_text": "Hemûyé bibîne",
|
||||||
|
"hash_tag": {
|
||||||
|
"title": "Trend li ser Mastodon",
|
||||||
|
"description": "Etîketên ku pir balê dikişînin",
|
||||||
|
"people_talking": "%s kes diaxivin"
|
||||||
|
},
|
||||||
|
"accounts": {
|
||||||
|
"title": "Hesabên ku hûn dikarin hez bikin",
|
||||||
|
"description": "Dibe ku tu bixwazî van hesaban bişopînî",
|
||||||
|
"follow": "Bişopîne"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"searching": {
|
||||||
|
"segment": {
|
||||||
|
"all": "Hemû",
|
||||||
|
"people": "Mirov",
|
||||||
|
"hashtags": "Etîketan",
|
||||||
|
"posts": "Şandîyan"
|
||||||
|
},
|
||||||
|
"empty_state": {
|
||||||
|
"no_results": "Encam tune"
|
||||||
|
},
|
||||||
|
"recent_search": "Lêgerînên dawî",
|
||||||
|
"clear": "Paqij bike"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"favorite": {
|
||||||
|
"title": "Bijareyên te"
|
||||||
|
},
|
||||||
|
"notification": {
|
||||||
|
"title": {
|
||||||
|
"Everything": "Her tişt",
|
||||||
|
"Mentions": "Behs"
|
||||||
|
},
|
||||||
|
"user_followed_you": "%s te şopand",
|
||||||
|
"user_favorited your post": "%s posta we bijarte",
|
||||||
|
"user_reblogged_your_post": "%s posta we ji nû ve tomar kir",
|
||||||
|
"user_mentioned_you": "%s behsa te kir",
|
||||||
|
"user_requested_to_follow_you": "%s daxwaza şopandina te kir",
|
||||||
|
"user_your_poll_has_ended": "%s Anketa te qediya",
|
||||||
|
"keyobard": {
|
||||||
|
"show_everything": "Her tiştî nîşan bide",
|
||||||
|
"show_mentions": "Behskirîya nîşan bike"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"thread": {
|
||||||
|
"back_title": "Şandî",
|
||||||
|
"title": "Post from %s"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"title": "Sazkarî",
|
||||||
|
"section": {
|
||||||
|
"appearance": {
|
||||||
|
"title": "Xuyang",
|
||||||
|
"automatic": "Xweber",
|
||||||
|
"light": "Her dem ronî",
|
||||||
|
"dark": "Her dem tarî"
|
||||||
|
},
|
||||||
|
"notifications": {
|
||||||
|
"title": "Agahdarî",
|
||||||
|
"favorites": "Şandiyên min hez kir",
|
||||||
|
"follows": "Min şopand",
|
||||||
|
"boosts": "Reblogs my post",
|
||||||
|
"mentions": "Qale min kir",
|
||||||
|
"trigger": {
|
||||||
|
"anyone": "her kes",
|
||||||
|
"follower": "şopînerek",
|
||||||
|
"follow": "her kesê ku dişopînim",
|
||||||
|
"noone": "ne yek",
|
||||||
|
"title": "Min agahdar bike gava"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"preference": {
|
||||||
|
"title": "Hilbijarte",
|
||||||
|
"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": "%s ragihîne",
|
||||||
|
"step1": "Gav 1 ji 2",
|
||||||
|
"step2": "Gav 2 ji 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": "Ragihandinê bişîne",
|
||||||
|
"skip_to_send": "Bêyî şirove bişîne",
|
||||||
|
"text_placeholder": "Type or paste additional comments"
|
||||||
|
},
|
||||||
|
"preview": {
|
||||||
|
"keyboard": {
|
||||||
|
"close_preview": "Pêşdîtin bigire",
|
||||||
|
"show_next": "A pêş nîşan bide",
|
||||||
|
"show_previous": "A paş nîşan bide"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"account_list": {
|
||||||
|
"tab_bar_hint": "Profîla hilbijartî ya niha: %s. Du caran bitikîne û paşê dest bide ser da ku guhêrbara ajimêr were nîşandan",
|
||||||
|
"dismiss_account_switcher": "Dismiss Account Switcher",
|
||||||
|
"add_account": "Ajimêr tevlî bike"
|
||||||
|
},
|
||||||
|
"wizard": {
|
||||||
|
"new_in_mastodon": "Nû di Mastodon de",
|
||||||
|
"multiple_account_switch_intro_description": "Dest bide ser bişkoja profîlê da ku di navbera gelek ajimêrann de biguherînî.",
|
||||||
|
"accessibility_hint": "Double tap to dismiss this wizard"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"NSCameraUsageDescription": "Bo kişandina wêneyê ji bo rewşa şandiyan tê bikaranîn",
|
||||||
|
"NSPhotoLibraryAddUsageDescription": "Ji bo tomarkirina wêneyê di pirtûkxaneya wêneyan de tê bikaranîn",
|
||||||
|
"NewPostShortcutItemTitle": "Şandiya nû",
|
||||||
|
"SearchShortcutItemTitle": "Bigere"
|
||||||
|
}
|
|
@ -13,7 +13,7 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld unread notification</string>
|
<string>%ld การแจ้งเตือนที่ยังไม่ได้อ่าน</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>a11y.plural.count.input_limit_exceeds</key>
|
<key>a11y.plural.count.input_limit_exceeds</key>
|
||||||
|
|
|
@ -536,14 +536,14 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"account_list": {
|
"account_list": {
|
||||||
"tab_bar_hint": "Current selected profile: %s. Double tap then hold to show account switcher",
|
"tab_bar_hint": "โปรไฟล์ที่เลือกในปัจจุบัน: %s แตะสองครั้งแล้วกดค้างไว้เพื่อแสดงตัวสลับบัญชี",
|
||||||
"dismiss_account_switcher": "Dismiss Account Switcher",
|
"dismiss_account_switcher": "ปิดตัวสลับบัญชี",
|
||||||
"add_account": "Add Account"
|
"add_account": "เพิ่มบัญชี"
|
||||||
},
|
},
|
||||||
"wizard": {
|
"wizard": {
|
||||||
"new_in_mastodon": "New in Mastodon",
|
"new_in_mastodon": "มาใหม่ใน Mastodon",
|
||||||
"multiple_account_switch_intro_description": "Switch between multiple accounts by holding the profile button.",
|
"multiple_account_switch_intro_description": "สลับระหว่างหลายบัญชีโดยกดปุ่มโปรไฟล์ค้างไว้",
|
||||||
"accessibility_hint": "Double tap to dismiss this wizard"
|
"accessibility_hint": "แตะสองครั้งเพื่อปิดตัวช่วยสร้างนี้"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -67,6 +67,7 @@
|
||||||
"done": "Done",
|
"done": "Done",
|
||||||
"confirm": "Confirm",
|
"confirm": "Confirm",
|
||||||
"continue": "Continue",
|
"continue": "Continue",
|
||||||
|
"compose": "Compose",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"discard": "Discard",
|
"discard": "Discard",
|
||||||
"try_again": "Try Again",
|
"try_again": "Try Again",
|
||||||
|
@ -413,6 +414,12 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"follower": {
|
||||||
|
"footer": "Followers from other servers are not displayed."
|
||||||
|
},
|
||||||
|
"following": {
|
||||||
|
"footer": "Follows from other servers are not displayed."
|
||||||
|
},
|
||||||
"search": {
|
"search": {
|
||||||
"title": "Search",
|
"title": "Search",
|
||||||
"search_bar": {
|
"search_bar": {
|
||||||
|
|
|
@ -187,6 +187,8 @@
|
||||||
DB029E95266A20430062874E /* MastodonAuthenticationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB029E94266A20430062874E /* MastodonAuthenticationController.swift */; };
|
DB029E95266A20430062874E /* MastodonAuthenticationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB029E94266A20430062874E /* MastodonAuthenticationController.swift */; };
|
||||||
DB02CDAB26256A9500D0A2AF /* ThreadReplyLoaderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB02CDAA26256A9500D0A2AF /* ThreadReplyLoaderTableViewCell.swift */; };
|
DB02CDAB26256A9500D0A2AF /* ThreadReplyLoaderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB02CDAA26256A9500D0A2AF /* ThreadReplyLoaderTableViewCell.swift */; };
|
||||||
DB02CDBF2625AE5000D0A2AF /* AdaptiveUserInterfaceStyleBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB02CDBE2625AE5000D0A2AF /* AdaptiveUserInterfaceStyleBarButtonItem.swift */; };
|
DB02CDBF2625AE5000D0A2AF /* AdaptiveUserInterfaceStyleBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB02CDBE2625AE5000D0A2AF /* AdaptiveUserInterfaceStyleBarButtonItem.swift */; };
|
||||||
|
DB03A793272A7E5700EE37C5 /* SidebarListHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB03A792272A7E5700EE37C5 /* SidebarListHeaderView.swift */; };
|
||||||
|
DB03A795272A981400EE37C5 /* ContentSplitViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB03A794272A981400EE37C5 /* ContentSplitViewController.swift */; };
|
||||||
DB03F7F32689AEA3007B274C /* ComposeRepliedToStatusContentTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB03F7F22689AEA3007B274C /* ComposeRepliedToStatusContentTableViewCell.swift */; };
|
DB03F7F32689AEA3007B274C /* ComposeRepliedToStatusContentTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB03F7F22689AEA3007B274C /* ComposeRepliedToStatusContentTableViewCell.swift */; };
|
||||||
DB03F7F52689B782007B274C /* ComposeTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB03F7F42689B782007B274C /* ComposeTableView.swift */; };
|
DB03F7F52689B782007B274C /* ComposeTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB03F7F42689B782007B274C /* ComposeTableView.swift */; };
|
||||||
DB040ED126538E3D00BEE9D8 /* Trie.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB040ED026538E3C00BEE9D8 /* Trie.swift */; };
|
DB040ED126538E3D00BEE9D8 /* Trie.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB040ED026538E3C00BEE9D8 /* Trie.swift */; };
|
||||||
|
@ -331,6 +333,17 @@
|
||||||
DB68A06325E905E000CFDF14 /* UIApplication.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB68A06225E905E000CFDF14 /* UIApplication.swift */; };
|
DB68A06325E905E000CFDF14 /* UIApplication.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB68A06225E905E000CFDF14 /* UIApplication.swift */; };
|
||||||
DB6B35182601FA3400DC1E11 /* MastodonAttachmentService.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6B35172601FA3400DC1E11 /* MastodonAttachmentService.swift */; };
|
DB6B35182601FA3400DC1E11 /* MastodonAttachmentService.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6B35172601FA3400DC1E11 /* MastodonAttachmentService.swift */; };
|
||||||
DB6B351E2601FAEE00DC1E11 /* ComposeStatusAttachmentCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6B351D2601FAEE00DC1E11 /* ComposeStatusAttachmentCollectionViewCell.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 */; };
|
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 */; };
|
DB6D1B3D2636857500ACB481 /* AppearancePreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6D1B3C2636857500ACB481 /* AppearancePreference.swift */; };
|
||||||
DB6D1B44263691CF00ACB481 /* Mastodon+API+Subscriptions+Policy.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6D1B43263691CF00ACB481 /* Mastodon+API+Subscriptions+Policy.swift */; };
|
DB6D1B44263691CF00ACB481 /* Mastodon+API+Subscriptions+Policy.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6D1B43263691CF00ACB481 /* Mastodon+API+Subscriptions+Policy.swift */; };
|
||||||
|
@ -347,6 +360,8 @@
|
||||||
DB6D9F9726367249008423CD /* SettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6D9F9626367249008423CD /* SettingsViewController.swift */; };
|
DB6D9F9726367249008423CD /* SettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6D9F9626367249008423CD /* SettingsViewController.swift */; };
|
||||||
DB6F5E35264E78E7009108F4 /* AutoCompleteViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6F5E34264E78E7009108F4 /* AutoCompleteViewController.swift */; };
|
DB6F5E35264E78E7009108F4 /* AutoCompleteViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6F5E34264E78E7009108F4 /* AutoCompleteViewController.swift */; };
|
||||||
DB6F5E38264E994A009108F4 /* AutoCompleteTopChevronView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6F5E37264E994A009108F4 /* AutoCompleteTopChevronView.swift */; };
|
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 */; };
|
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 */; };
|
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 */; };
|
DB71FD3C25F8A1C500512AE1 /* APIService+Persist+PersistCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB71FD3B25F8A1C500512AE1 /* APIService+Persist+PersistCache.swift */; };
|
||||||
|
@ -356,6 +371,13 @@
|
||||||
DB72601C25E36A2100235243 /* MastodonServerRulesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB72601B25E36A2100235243 /* MastodonServerRulesViewController.swift */; };
|
DB72601C25E36A2100235243 /* MastodonServerRulesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB72601B25E36A2100235243 /* MastodonServerRulesViewController.swift */; };
|
||||||
DB72602725E36A6F00235243 /* MastodonServerRulesViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB72602625E36A6F00235243 /* MastodonServerRulesViewModel.swift */; };
|
DB72602725E36A6F00235243 /* MastodonServerRulesViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB72602625E36A6F00235243 /* MastodonServerRulesViewModel.swift */; };
|
||||||
DB73B490261F030A002E9E9F /* SafariActivity.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB73B48F261F030A002E9E9F /* SafariActivity.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 */; };
|
||||||
|
DB73BF4927140BA300781945 /* UICollectionViewDiffableDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB73BF4827140BA300781945 /* UICollectionViewDiffableDataSource.swift */; };
|
||||||
|
DB73BF4B27140C0800781945 /* UITableViewDiffableDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB73BF4A27140C0800781945 /* UITableViewDiffableDataSource.swift */; };
|
||||||
DB75BF1E263C1C1B00EDBF1F /* CustomScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB75BF1D263C1C1B00EDBF1F /* CustomScheduler.swift */; };
|
DB75BF1E263C1C1B00EDBF1F /* CustomScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB75BF1D263C1C1B00EDBF1F /* CustomScheduler.swift */; };
|
||||||
DB789A0B25F9F2950071ACA0 /* ComposeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB789A0A25F9F2950071ACA0 /* ComposeViewController.swift */; };
|
DB789A0B25F9F2950071ACA0 /* ComposeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB789A0A25F9F2950071ACA0 /* ComposeViewController.swift */; };
|
||||||
DB789A1225F9F2CC0071ACA0 /* ComposeViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB789A1125F9F2CC0071ACA0 /* ComposeViewModel.swift */; };
|
DB789A1225F9F2CC0071ACA0 /* ComposeViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB789A1125F9F2CC0071ACA0 /* ComposeViewModel.swift */; };
|
||||||
|
@ -454,7 +476,6 @@
|
||||||
DBAC6483267D0B21007FE9FD /* DifferenceKit in Frameworks */ = {isa = PBXBuildFile; productRef = DBAC6482267D0B21007FE9FD /* DifferenceKit */; };
|
DBAC6483267D0B21007FE9FD /* DifferenceKit in Frameworks */ = {isa = PBXBuildFile; productRef = DBAC6482267D0B21007FE9FD /* DifferenceKit */; };
|
||||||
DBAC6485267D0F9E007FE9FD /* StatusNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAC6484267D0F9E007FE9FD /* StatusNode.swift */; };
|
DBAC6485267D0F9E007FE9FD /* StatusNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAC6484267D0F9E007FE9FD /* StatusNode.swift */; };
|
||||||
DBAC6488267D388B007FE9FD /* ASTableNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAC6487267D388B007FE9FD /* ASTableNode.swift */; };
|
DBAC6488267D388B007FE9FD /* ASTableNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAC6487267D388B007FE9FD /* ASTableNode.swift */; };
|
||||||
DBAC648A267DC355007FE9FD /* NSDiffableDataSourceSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAC6489267DC355007FE9FD /* NSDiffableDataSourceSnapshot.swift */; };
|
|
||||||
DBAC648F267DC84D007FE9FD /* TableNodeDiffableDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAC648E267DC84D007FE9FD /* TableNodeDiffableDataSource.swift */; };
|
DBAC648F267DC84D007FE9FD /* TableNodeDiffableDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAC648E267DC84D007FE9FD /* TableNodeDiffableDataSource.swift */; };
|
||||||
DBAC6497267DECCB007FE9FD /* TimelineMiddleLoaderNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAC6496267DECCB007FE9FD /* TimelineMiddleLoaderNode.swift */; };
|
DBAC6497267DECCB007FE9FD /* TimelineMiddleLoaderNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAC6496267DECCB007FE9FD /* TimelineMiddleLoaderNode.swift */; };
|
||||||
DBAC6499267DF2C4007FE9FD /* TimelineBottomLoaderNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAC6498267DF2C4007FE9FD /* TimelineBottomLoaderNode.swift */; };
|
DBAC6499267DF2C4007FE9FD /* TimelineBottomLoaderNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBAC6498267DF2C4007FE9FD /* TimelineBottomLoaderNode.swift */; };
|
||||||
|
@ -950,6 +971,8 @@
|
||||||
DB029E94266A20430062874E /* MastodonAuthenticationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonAuthenticationController.swift; sourceTree = "<group>"; };
|
DB029E94266A20430062874E /* MastodonAuthenticationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonAuthenticationController.swift; sourceTree = "<group>"; };
|
||||||
DB02CDAA26256A9500D0A2AF /* ThreadReplyLoaderTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThreadReplyLoaderTableViewCell.swift; sourceTree = "<group>"; };
|
DB02CDAA26256A9500D0A2AF /* ThreadReplyLoaderTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThreadReplyLoaderTableViewCell.swift; sourceTree = "<group>"; };
|
||||||
DB02CDBE2625AE5000D0A2AF /* AdaptiveUserInterfaceStyleBarButtonItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdaptiveUserInterfaceStyleBarButtonItem.swift; sourceTree = "<group>"; };
|
DB02CDBE2625AE5000D0A2AF /* AdaptiveUserInterfaceStyleBarButtonItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdaptiveUserInterfaceStyleBarButtonItem.swift; sourceTree = "<group>"; };
|
||||||
|
DB03A792272A7E5700EE37C5 /* SidebarListHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarListHeaderView.swift; sourceTree = "<group>"; };
|
||||||
|
DB03A794272A981400EE37C5 /* ContentSplitViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentSplitViewController.swift; sourceTree = "<group>"; };
|
||||||
DB03F7F22689AEA3007B274C /* ComposeRepliedToStatusContentTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeRepliedToStatusContentTableViewCell.swift; sourceTree = "<group>"; };
|
DB03F7F22689AEA3007B274C /* ComposeRepliedToStatusContentTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeRepliedToStatusContentTableViewCell.swift; sourceTree = "<group>"; };
|
||||||
DB03F7F42689B782007B274C /* ComposeTableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeTableView.swift; sourceTree = "<group>"; };
|
DB03F7F42689B782007B274C /* ComposeTableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeTableView.swift; sourceTree = "<group>"; };
|
||||||
DB040ED026538E3C00BEE9D8 /* Trie.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Trie.swift; sourceTree = "<group>"; };
|
DB040ED026538E3C00BEE9D8 /* Trie.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Trie.swift; sourceTree = "<group>"; };
|
||||||
|
@ -1120,6 +1143,17 @@
|
||||||
DB68A06225E905E000CFDF14 /* UIApplication.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIApplication.swift; sourceTree = "<group>"; };
|
DB68A06225E905E000CFDF14 /* UIApplication.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIApplication.swift; sourceTree = "<group>"; };
|
||||||
DB6B35172601FA3400DC1E11 /* MastodonAttachmentService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonAttachmentService.swift; sourceTree = "<group>"; };
|
DB6B35172601FA3400DC1E11 /* MastodonAttachmentService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonAttachmentService.swift; sourceTree = "<group>"; };
|
||||||
DB6B351D2601FAEE00DC1E11 /* ComposeStatusAttachmentCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeStatusAttachmentCollectionViewCell.swift; sourceTree = "<group>"; };
|
DB6B351D2601FAEE00DC1E11 /* ComposeStatusAttachmentCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeStatusAttachmentCollectionViewCell.swift; sourceTree = "<group>"; };
|
||||||
|
DB6B74EE272FB55000C70B6E /* FollowerListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowerListViewController.swift; sourceTree = "<group>"; };
|
||||||
|
DB6B74F1272FB67600C70B6E /* FollowerListViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowerListViewModel.swift; sourceTree = "<group>"; };
|
||||||
|
DB6B74F3272FBAE700C70B6E /* FollowerListViewModel+Diffable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "FollowerListViewModel+Diffable.swift"; sourceTree = "<group>"; };
|
||||||
|
DB6B74F5272FBCDB00C70B6E /* FollowerListViewModel+State.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "FollowerListViewModel+State.swift"; sourceTree = "<group>"; };
|
||||||
|
DB6B74F7272FBFB100C70B6E /* FollowerListViewController+Provider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "FollowerListViewController+Provider.swift"; sourceTree = "<group>"; };
|
||||||
|
DB6B74F9272FC2B500C70B6E /* APIService+Follower.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Follower.swift"; sourceTree = "<group>"; };
|
||||||
|
DB6B74FB272FF55800C70B6E /* UserSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserSection.swift; sourceTree = "<group>"; };
|
||||||
|
DB6B74FD272FF59000C70B6E /* UserItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserItem.swift; sourceTree = "<group>"; };
|
||||||
|
DB6B74FF272FF73800C70B6E /* UserTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserTableViewCell.swift; sourceTree = "<group>"; };
|
||||||
|
DB6B75012730060700C70B6E /* UserProviderFacade+UITableViewDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UserProviderFacade+UITableViewDelegate.swift"; sourceTree = "<group>"; };
|
||||||
|
DB6B750327300B4000C70B6E /* TimelineFooterTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineFooterTableViewCell.swift; sourceTree = "<group>"; };
|
||||||
DB6C8C0E25F0A6AE00AAA452 /* Mastodon+Entity+Error.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Mastodon+Entity+Error.swift"; sourceTree = "<group>"; };
|
DB6C8C0E25F0A6AE00AAA452 /* Mastodon+Entity+Error.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Mastodon+Entity+Error.swift"; sourceTree = "<group>"; };
|
||||||
DB6D1B3C2636857500ACB481 /* AppearancePreference.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppearancePreference.swift; sourceTree = "<group>"; };
|
DB6D1B3C2636857500ACB481 /* AppearancePreference.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppearancePreference.swift; sourceTree = "<group>"; };
|
||||||
DB6D1B43263691CF00ACB481 /* Mastodon+API+Subscriptions+Policy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Mastodon+API+Subscriptions+Policy.swift"; sourceTree = "<group>"; };
|
DB6D1B43263691CF00ACB481 /* Mastodon+API+Subscriptions+Policy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Mastodon+API+Subscriptions+Policy.swift"; sourceTree = "<group>"; };
|
||||||
|
@ -1135,6 +1169,8 @@
|
||||||
DB6D9F9626367249008423CD /* SettingsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsViewController.swift; sourceTree = "<group>"; };
|
DB6D9F9626367249008423CD /* SettingsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsViewController.swift; sourceTree = "<group>"; };
|
||||||
DB6F5E34264E78E7009108F4 /* AutoCompleteViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoCompleteViewController.swift; sourceTree = "<group>"; };
|
DB6F5E34264E78E7009108F4 /* AutoCompleteViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoCompleteViewController.swift; sourceTree = "<group>"; };
|
||||||
DB6F5E37264E994A009108F4 /* AutoCompleteTopChevronView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoCompleteTopChevronView.swift; sourceTree = "<group>"; };
|
DB6F5E37264E994A009108F4 /* AutoCompleteTopChevronView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoCompleteTopChevronView.swift; sourceTree = "<group>"; };
|
||||||
|
DB71C7CA271D5A0300BE3819 /* LineChartView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LineChartView.swift; sourceTree = "<group>"; };
|
||||||
|
DB71C7CC271D7F4300BE3819 /* CurveAlgorithm.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurveAlgorithm.swift; sourceTree = "<group>"; };
|
||||||
DB71FD2B25F86A5100512AE1 /* AvatarStackContainerButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvatarStackContainerButton.swift; sourceTree = "<group>"; };
|
DB71FD2B25F86A5100512AE1 /* AvatarStackContainerButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvatarStackContainerButton.swift; sourceTree = "<group>"; };
|
||||||
DB71FD3525F8A16C00512AE1 /* APIService+Persist+PersistMemo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Persist+PersistMemo.swift"; sourceTree = "<group>"; };
|
DB71FD3525F8A16C00512AE1 /* APIService+Persist+PersistMemo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Persist+PersistMemo.swift"; sourceTree = "<group>"; };
|
||||||
DB71FD3B25F8A1C500512AE1 /* APIService+Persist+PersistCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Persist+PersistCache.swift"; sourceTree = "<group>"; };
|
DB71FD3B25F8A1C500512AE1 /* APIService+Persist+PersistCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Persist+PersistCache.swift"; sourceTree = "<group>"; };
|
||||||
|
@ -1144,6 +1180,13 @@
|
||||||
DB72601B25E36A2100235243 /* MastodonServerRulesViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonServerRulesViewController.swift; sourceTree = "<group>"; };
|
DB72601B25E36A2100235243 /* MastodonServerRulesViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonServerRulesViewController.swift; sourceTree = "<group>"; };
|
||||||
DB72602625E36A6F00235243 /* MastodonServerRulesViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonServerRulesViewModel.swift; sourceTree = "<group>"; };
|
DB72602625E36A6F00235243 /* MastodonServerRulesViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonServerRulesViewModel.swift; sourceTree = "<group>"; };
|
||||||
DB73B48F261F030A002E9E9F /* SafariActivity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SafariActivity.swift; sourceTree = "<group>"; };
|
DB73B48F261F030A002E9E9F /* SafariActivity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SafariActivity.swift; sourceTree = "<group>"; };
|
||||||
|
DB73BF3A2711885500781945 /* UserDefaults+Notification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UserDefaults+Notification.swift"; sourceTree = "<group>"; };
|
||||||
|
DB73BF4027118B6D00781945 /* Instance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Instance.swift; sourceTree = "<group>"; };
|
||||||
|
DB73BF42271192BB00781945 /* InstanceService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstanceService.swift; sourceTree = "<group>"; };
|
||||||
|
DB73BF44271195AC00781945 /* APIService+CoreData+Instance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+CoreData+Instance.swift"; sourceTree = "<group>"; };
|
||||||
|
DB73BF46271199CA00781945 /* Instance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Instance.swift; sourceTree = "<group>"; };
|
||||||
|
DB73BF4827140BA300781945 /* UICollectionViewDiffableDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UICollectionViewDiffableDataSource.swift; sourceTree = "<group>"; };
|
||||||
|
DB73BF4A27140C0800781945 /* UITableViewDiffableDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UITableViewDiffableDataSource.swift; sourceTree = "<group>"; };
|
||||||
DB75BF1D263C1C1B00EDBF1F /* CustomScheduler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomScheduler.swift; sourceTree = "<group>"; };
|
DB75BF1D263C1C1B00EDBF1F /* CustomScheduler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomScheduler.swift; sourceTree = "<group>"; };
|
||||||
DB789A0A25F9F2950071ACA0 /* ComposeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeViewController.swift; sourceTree = "<group>"; };
|
DB789A0A25F9F2950071ACA0 /* ComposeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeViewController.swift; sourceTree = "<group>"; };
|
||||||
DB789A1125F9F2CC0071ACA0 /* ComposeViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeViewModel.swift; sourceTree = "<group>"; };
|
DB789A1125F9F2CC0071ACA0 /* ComposeViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeViewModel.swift; sourceTree = "<group>"; };
|
||||||
|
@ -1270,7 +1313,6 @@
|
||||||
DBABE3EB25ECAC4B00879EE5 /* WelcomeIllustrationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeIllustrationView.swift; sourceTree = "<group>"; };
|
DBABE3EB25ECAC4B00879EE5 /* WelcomeIllustrationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeIllustrationView.swift; sourceTree = "<group>"; };
|
||||||
DBAC6484267D0F9E007FE9FD /* StatusNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusNode.swift; sourceTree = "<group>"; };
|
DBAC6484267D0F9E007FE9FD /* StatusNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusNode.swift; sourceTree = "<group>"; };
|
||||||
DBAC6487267D388B007FE9FD /* ASTableNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ASTableNode.swift; sourceTree = "<group>"; };
|
DBAC6487267D388B007FE9FD /* ASTableNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ASTableNode.swift; sourceTree = "<group>"; };
|
||||||
DBAC6489267DC355007FE9FD /* NSDiffableDataSourceSnapshot.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSDiffableDataSourceSnapshot.swift; sourceTree = "<group>"; };
|
|
||||||
DBAC648E267DC84D007FE9FD /* TableNodeDiffableDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableNodeDiffableDataSource.swift; sourceTree = "<group>"; };
|
DBAC648E267DC84D007FE9FD /* TableNodeDiffableDataSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableNodeDiffableDataSource.swift; sourceTree = "<group>"; };
|
||||||
DBAC6496267DECCB007FE9FD /* TimelineMiddleLoaderNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineMiddleLoaderNode.swift; sourceTree = "<group>"; };
|
DBAC6496267DECCB007FE9FD /* TimelineMiddleLoaderNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineMiddleLoaderNode.swift; sourceTree = "<group>"; };
|
||||||
DBAC6498267DF2C4007FE9FD /* TimelineBottomLoaderNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineBottomLoaderNode.swift; sourceTree = "<group>"; };
|
DBAC6498267DF2C4007FE9FD /* TimelineBottomLoaderNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineBottomLoaderNode.swift; sourceTree = "<group>"; };
|
||||||
|
@ -1345,6 +1387,11 @@
|
||||||
DBD376AB2692ECDB007FEC24 /* ThemePreference.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemePreference.swift; sourceTree = "<group>"; };
|
DBD376AB2692ECDB007FEC24 /* ThemePreference.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemePreference.swift; sourceTree = "<group>"; };
|
||||||
DBD376B1269302A4007FEC24 /* UITableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UITableViewCell.swift; sourceTree = "<group>"; };
|
DBD376B1269302A4007FEC24 /* UITableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UITableViewCell.swift; sourceTree = "<group>"; };
|
||||||
DBD9148F25DF6D8D00903DFD /* APIService+Onboarding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Onboarding.swift"; sourceTree = "<group>"; };
|
DBD9148F25DF6D8D00903DFD /* APIService+Onboarding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Onboarding.swift"; sourceTree = "<group>"; };
|
||||||
|
DBDC1CF9272C0FD600055C3D /* ku-TR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ku-TR"; path = "ku-TR.lproj/Intents.strings"; sourceTree = "<group>"; };
|
||||||
|
DBDC1CFA272C0FD600055C3D /* ku-TR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "ku-TR"; path = "ku-TR.lproj/Localizable.stringsdict"; sourceTree = "<group>"; };
|
||||||
|
DBDC1CFB272C0FD600055C3D /* ku-TR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ku-TR"; path = "ku-TR.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
||||||
|
DBDC1CFC272C0FD600055C3D /* ku-TR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ku-TR"; path = "ku-TR.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
|
||||||
|
DBDC1CFD272C0FD600055C3D /* ku-TR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "ku-TR"; path = "ku-TR.lproj/Intents.stringsdict"; sourceTree = "<group>"; };
|
||||||
DBE0821425CD382600FD6BBD /* MastodonRegisterViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonRegisterViewController.swift; sourceTree = "<group>"; };
|
DBE0821425CD382600FD6BBD /* MastodonRegisterViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonRegisterViewController.swift; sourceTree = "<group>"; };
|
||||||
DBE0822325CD3F1E00FD6BBD /* MastodonRegisterViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonRegisterViewModel.swift; sourceTree = "<group>"; };
|
DBE0822325CD3F1E00FD6BBD /* MastodonRegisterViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonRegisterViewModel.swift; sourceTree = "<group>"; };
|
||||||
DBE3CDBA261C427900430CC6 /* TimelineHeaderTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineHeaderTableViewCell.swift; sourceTree = "<group>"; };
|
DBE3CDBA261C427900430CC6 /* TimelineHeaderTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineHeaderTableViewCell.swift; sourceTree = "<group>"; };
|
||||||
|
@ -1738,6 +1785,7 @@
|
||||||
2D5A3D0125CF8640002347D6 /* Vender */ = {
|
2D5A3D0125CF8640002347D6 /* Vender */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
DB71C7CC271D7F4300BE3819 /* CurveAlgorithm.swift */,
|
||||||
2D5A3D0225CF8742002347D6 /* ControlContainableScrollViews.swift */,
|
2D5A3D0225CF8742002347D6 /* ControlContainableScrollViews.swift */,
|
||||||
DB51D170262832380062B7A1 /* BlurHashDecode.swift */,
|
DB51D170262832380062B7A1 /* BlurHashDecode.swift */,
|
||||||
DB51D171262832380062B7A1 /* BlurHashEncode.swift */,
|
DB51D171262832380062B7A1 /* BlurHashEncode.swift */,
|
||||||
|
@ -1771,6 +1819,7 @@
|
||||||
DB297B1A2679FAE200704C90 /* PlaceholderImageCacheService.swift */,
|
DB297B1A2679FAE200704C90 /* PlaceholderImageCacheService.swift */,
|
||||||
DBAEDE5B267A058D00D25FF5 /* BlurhashImageCacheService.swift */,
|
DBAEDE5B267A058D00D25FF5 /* BlurhashImageCacheService.swift */,
|
||||||
DB564BD2269F3B35001E39A7 /* StatusFilterService.swift */,
|
DB564BD2269F3B35001E39A7 /* StatusFilterService.swift */,
|
||||||
|
DB73BF42271192BB00781945 /* InstanceService.swift */,
|
||||||
);
|
);
|
||||||
path = Service;
|
path = Service;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -1839,6 +1888,7 @@
|
||||||
2D4AD8A126316CD200613EFC /* SelectedAccountSection.swift */,
|
2D4AD8A126316CD200613EFC /* SelectedAccountSection.swift */,
|
||||||
DB6D9F7C26358ED4008423CD /* SettingsSection.swift */,
|
DB6D9F7C26358ED4008423CD /* SettingsSection.swift */,
|
||||||
DBA94433265CBB5300C537E1 /* ProfileFieldSection.swift */,
|
DBA94433265CBB5300C537E1 /* ProfileFieldSection.swift */,
|
||||||
|
DB6B74FB272FF55800C70B6E /* UserSection.swift */,
|
||||||
);
|
);
|
||||||
path = Section;
|
path = Section;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -1882,8 +1932,10 @@
|
||||||
2DA7D04925CA52CB00804E11 /* TimelineBottomLoaderTableViewCell.swift */,
|
2DA7D04925CA52CB00804E11 /* TimelineBottomLoaderTableViewCell.swift */,
|
||||||
2D32EAAB25CB96DC00C9ED86 /* TimelineMiddleLoaderTableViewCell.swift */,
|
2D32EAAB25CB96DC00C9ED86 /* TimelineMiddleLoaderTableViewCell.swift */,
|
||||||
DBE3CDBA261C427900430CC6 /* TimelineHeaderTableViewCell.swift */,
|
DBE3CDBA261C427900430CC6 /* TimelineHeaderTableViewCell.swift */,
|
||||||
|
DB6B750327300B4000C70B6E /* TimelineFooterTableViewCell.swift */,
|
||||||
DB02CDAA26256A9500D0A2AF /* ThreadReplyLoaderTableViewCell.swift */,
|
DB02CDAA26256A9500D0A2AF /* ThreadReplyLoaderTableViewCell.swift */,
|
||||||
DB92CF7125E7BB98002C1017 /* PollOptionTableViewCell.swift */,
|
DB92CF7125E7BB98002C1017 /* PollOptionTableViewCell.swift */,
|
||||||
|
DB6B74FF272FF73800C70B6E /* UserTableViewCell.swift */,
|
||||||
);
|
);
|
||||||
path = TableviewCell;
|
path = TableviewCell;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -1892,6 +1944,7 @@
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
2D7631B225C159F700929FB9 /* Item.swift */,
|
2D7631B225C159F700929FB9 /* Item.swift */,
|
||||||
|
DB6B74FD272FF59000C70B6E /* UserItem.swift */,
|
||||||
2D198642261BF09500F0B013 /* SearchResultItem.swift */,
|
2D198642261BF09500F0B013 /* SearchResultItem.swift */,
|
||||||
DB4F097C26A03A5B00D62E92 /* SearchHistoryItem.swift */,
|
DB4F097C26A03A5B00D62E92 /* SearchHistoryItem.swift */,
|
||||||
2D4AD8A726316D3500613EFC /* SelectedAccountItem.swift */,
|
2D4AD8A726316D3500613EFC /* SelectedAccountItem.swift */,
|
||||||
|
@ -1941,6 +1994,7 @@
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
2DCB73FC2615C13900EC03D4 /* SearchRecommendCollectionHeader.swift */,
|
2DCB73FC2615C13900EC03D4 /* SearchRecommendCollectionHeader.swift */,
|
||||||
|
DB71C7CA271D5A0300BE3819 /* LineChartView.swift */,
|
||||||
);
|
);
|
||||||
path = View;
|
path = View;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -2079,6 +2133,7 @@
|
||||||
DBAFB7342645463500371D5F /* Emojis.swift */,
|
DBAFB7342645463500371D5F /* Emojis.swift */,
|
||||||
DBA94439265CC0FC00C537E1 /* Fields.swift */,
|
DBA94439265CC0FC00C537E1 /* Fields.swift */,
|
||||||
DBA1DB7F268F84F80052DB59 /* NotificationType.swift */,
|
DBA1DB7F268F84F80052DB59 /* NotificationType.swift */,
|
||||||
|
DB73BF46271199CA00781945 /* Instance.swift */,
|
||||||
);
|
);
|
||||||
path = CoreDataStack;
|
path = CoreDataStack;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -2105,6 +2160,7 @@
|
||||||
DBF156DE2701B17600EC00B7 /* SidebarAddAccountCollectionViewCell.swift */,
|
DBF156DE2701B17600EC00B7 /* SidebarAddAccountCollectionViewCell.swift */,
|
||||||
DB0EF72A26FDB1D200347686 /* SidebarListCollectionViewCell.swift */,
|
DB0EF72A26FDB1D200347686 /* SidebarListCollectionViewCell.swift */,
|
||||||
DB0EF72D26FDB24F00347686 /* SidebarListContentView.swift */,
|
DB0EF72D26FDB24F00347686 /* SidebarListContentView.swift */,
|
||||||
|
DB03A792272A7E5700EE37C5 /* SidebarListHeaderView.swift */,
|
||||||
);
|
);
|
||||||
path = View;
|
path = View;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -2259,6 +2315,7 @@
|
||||||
2D34D9D026148D9E0081BFC0 /* APIService+Recommend.swift */,
|
2D34D9D026148D9E0081BFC0 /* APIService+Recommend.swift */,
|
||||||
2D34D9DA261494120081BFC0 /* APIService+Search.swift */,
|
2D34D9DA261494120081BFC0 /* APIService+Search.swift */,
|
||||||
0F202212261351F5000C64BF /* APIService+HashtagTimeline.swift */,
|
0F202212261351F5000C64BF /* APIService+HashtagTimeline.swift */,
|
||||||
|
DB6B74F9272FC2B500C70B6E /* APIService+Follower.swift */,
|
||||||
DBCC3B9426157E6E0045B23D /* APIService+Relationship.swift */,
|
DBCC3B9426157E6E0045B23D /* APIService+Relationship.swift */,
|
||||||
5B24BBE1262DB19100A9381B /* APIService+Report.swift */,
|
5B24BBE1262DB19100A9381B /* APIService+Report.swift */,
|
||||||
DBAE3F932616E28B004B8251 /* APIService+Follow.swift */,
|
DBAE3F932616E28B004B8251 /* APIService+Follow.swift */,
|
||||||
|
@ -2280,6 +2337,7 @@
|
||||||
2D79E700261EA5550011E398 /* APIService+CoreData+Tag.swift */,
|
2D79E700261EA5550011E398 /* APIService+CoreData+Tag.swift */,
|
||||||
DB6D9F56263577D2008423CD /* APIService+CoreData+Setting.swift */,
|
DB6D9F56263577D2008423CD /* APIService+CoreData+Setting.swift */,
|
||||||
5B90C48A26259C120002E742 /* APIService+CoreData+Subscriptions.swift */,
|
5B90C48A26259C120002E742 /* APIService+CoreData+Subscriptions.swift */,
|
||||||
|
DB73BF44271195AC00781945 /* APIService+CoreData+Instance.swift */,
|
||||||
);
|
);
|
||||||
path = CoreData;
|
path = CoreData;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -2454,6 +2512,7 @@
|
||||||
DB6804912637CD8700430867 /* AppName.swift */,
|
DB6804912637CD8700430867 /* AppName.swift */,
|
||||||
DB6804FC2637CFEC00430867 /* AppSecret.swift */,
|
DB6804FC2637CFEC00430867 /* AppSecret.swift */,
|
||||||
DB6804D02637CE4700430867 /* UserDefaults.swift */,
|
DB6804D02637CE4700430867 /* UserDefaults.swift */,
|
||||||
|
DB73BF3A2711885500781945 /* UserDefaults+Notification.swift */,
|
||||||
);
|
);
|
||||||
path = AppShared;
|
path = AppShared;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -2476,6 +2535,18 @@
|
||||||
path = NavigationController;
|
path = NavigationController;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
DB6B74F0272FB55400C70B6E /* Follower */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
DB6B74EE272FB55000C70B6E /* FollowerListViewController.swift */,
|
||||||
|
DB6B74F7272FBFB100C70B6E /* FollowerListViewController+Provider.swift */,
|
||||||
|
DB6B74F1272FB67600C70B6E /* FollowerListViewModel.swift */,
|
||||||
|
DB6B74F3272FBAE700C70B6E /* FollowerListViewModel+Diffable.swift */,
|
||||||
|
DB6B74F5272FBCDB00C70B6E /* FollowerListViewModel+State.swift */,
|
||||||
|
);
|
||||||
|
path = Follower;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
DB6C8C0525F0921200AAA452 /* MastodonSDK */ = {
|
DB6C8C0525F0921200AAA452 /* MastodonSDK */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
@ -2565,6 +2636,7 @@
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
DB852D1B26FB021500FC9D81 /* RootSplitViewController.swift */,
|
DB852D1B26FB021500FC9D81 /* RootSplitViewController.swift */,
|
||||||
|
DB03A794272A981400EE37C5 /* ContentSplitViewController.swift */,
|
||||||
DB852D1A26FAED0100FC9D81 /* Sidebar */,
|
DB852D1A26FAED0100FC9D81 /* Sidebar */,
|
||||||
DB8AF54E25C13703002E6C99 /* MainTab */,
|
DB8AF54E25C13703002E6C99 /* MainTab */,
|
||||||
);
|
);
|
||||||
|
@ -2636,6 +2708,7 @@
|
||||||
5B90C46D26259B2C0002E742 /* Setting.swift */,
|
5B90C46D26259B2C0002E742 /* Setting.swift */,
|
||||||
5B90C46C26259B2C0002E742 /* Subscription.swift */,
|
5B90C46C26259B2C0002E742 /* Subscription.swift */,
|
||||||
5B90C47E26259BA90002E742 /* SubscriptionAlerts.swift */,
|
5B90C47E26259BA90002E742 /* SubscriptionAlerts.swift */,
|
||||||
|
DB73BF4027118B6D00781945 /* Instance.swift */,
|
||||||
);
|
);
|
||||||
path = Entity;
|
path = Entity;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -2716,7 +2789,6 @@
|
||||||
DB0E91E926A9675100BD2ACC /* MetaLabel.swift */,
|
DB0E91E926A9675100BD2ACC /* MetaLabel.swift */,
|
||||||
DB68586325E619B700F0A850 /* NSKeyValueObservation.swift */,
|
DB68586325E619B700F0A850 /* NSKeyValueObservation.swift */,
|
||||||
DB47229625F9EFAD00DA7F53 /* NSManagedObjectContext.swift */,
|
DB47229625F9EFAD00DA7F53 /* NSManagedObjectContext.swift */,
|
||||||
DBAC6489267DC355007FE9FD /* NSDiffableDataSourceSnapshot.swift */,
|
|
||||||
DB0140CE25C42AEE00F9F3CF /* OSLog.swift */,
|
DB0140CE25C42AEE00F9F3CF /* OSLog.swift */,
|
||||||
2D939AB425EDD8A90076FA61 /* String.swift */,
|
2D939AB425EDD8A90076FA61 /* String.swift */,
|
||||||
DB68A06225E905E000CFDF14 /* UIApplication.swift */,
|
DB68A06225E905E000CFDF14 /* UIApplication.swift */,
|
||||||
|
@ -2736,6 +2808,8 @@
|
||||||
DB9E0D6E25EE008500CFDD76 /* UIInterpolatingMotionEffect.swift */,
|
DB9E0D6E25EE008500CFDD76 /* UIInterpolatingMotionEffect.swift */,
|
||||||
DBCC3B2F261440A50045B23D /* UITabBarController.swift */,
|
DBCC3B2F261440A50045B23D /* UITabBarController.swift */,
|
||||||
DBCC3B35261440BA0045B23D /* UINavigationController.swift */,
|
DBCC3B35261440BA0045B23D /* UINavigationController.swift */,
|
||||||
|
DB73BF4827140BA300781945 /* UICollectionViewDiffableDataSource.swift */,
|
||||||
|
DB73BF4A27140C0800781945 /* UITableViewDiffableDataSource.swift */,
|
||||||
);
|
);
|
||||||
path = Extension;
|
path = Extension;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -2827,6 +2901,7 @@
|
||||||
DBB525462611ED57002F1F29 /* Header */,
|
DBB525462611ED57002F1F29 /* Header */,
|
||||||
DBB5253B2611ECF5002F1F29 /* Timeline */,
|
DBB5253B2611ECF5002F1F29 /* Timeline */,
|
||||||
DBE3CDF1261C6B3100430CC6 /* Favorite */,
|
DBE3CDF1261C6B3100430CC6 /* Favorite */,
|
||||||
|
DB6B74F0272FB55400C70B6E /* Follower */,
|
||||||
DB9D6BFE25E4F5940051B173 /* ProfileViewController.swift */,
|
DB9D6BFE25E4F5940051B173 /* ProfileViewController.swift */,
|
||||||
DBAE3F812615DDA3004B8251 /* ProfileViewController+UserProvider.swift */,
|
DBAE3F812615DDA3004B8251 /* ProfileViewController+UserProvider.swift */,
|
||||||
DBB5255D2611F07A002F1F29 /* ProfileViewModel.swift */,
|
DBB5255D2611F07A002F1F29 /* ProfileViewModel.swift */,
|
||||||
|
@ -2947,6 +3022,7 @@
|
||||||
children = (
|
children = (
|
||||||
DBAE3F672615DD60004B8251 /* UserProvider.swift */,
|
DBAE3F672615DD60004B8251 /* UserProvider.swift */,
|
||||||
DBAE3F872615DDF4004B8251 /* UserProviderFacade.swift */,
|
DBAE3F872615DDF4004B8251 /* UserProviderFacade.swift */,
|
||||||
|
DB6B75012730060700C70B6E /* UserProviderFacade+UITableViewDelegate.swift */,
|
||||||
);
|
);
|
||||||
path = UserProvider;
|
path = UserProvider;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -3500,6 +3576,7 @@
|
||||||
ru,
|
ru,
|
||||||
"gd-GB",
|
"gd-GB",
|
||||||
th,
|
th,
|
||||||
|
"ku-TR",
|
||||||
);
|
);
|
||||||
mainGroup = DB427DC925BAA00100D1B89D;
|
mainGroup = DB427DC925BAA00100D1B89D;
|
||||||
packageReferences = (
|
packageReferences = (
|
||||||
|
@ -3849,6 +3926,7 @@
|
||||||
DBA94440265D137600C537E1 /* Mastodon+Entity+Field.swift in Sources */,
|
DBA94440265D137600C537E1 /* Mastodon+Entity+Field.swift in Sources */,
|
||||||
DB49A61425FF2C5600B98345 /* EmojiService.swift in Sources */,
|
DB49A61425FF2C5600B98345 /* EmojiService.swift in Sources */,
|
||||||
DBBF1DC7265251D400E5B703 /* AutoCompleteViewModel+State.swift in Sources */,
|
DBBF1DC7265251D400E5B703 /* AutoCompleteViewModel+State.swift in Sources */,
|
||||||
|
DB03A793272A7E5700EE37C5 /* SidebarListHeaderView.swift in Sources */,
|
||||||
DB4FFC2B269EC39600D62E92 /* SearchToSearchDetailViewControllerAnimatedTransitioning.swift in Sources */,
|
DB4FFC2B269EC39600D62E92 /* SearchToSearchDetailViewControllerAnimatedTransitioning.swift in Sources */,
|
||||||
DBCC3B9526157E6E0045B23D /* APIService+Relationship.swift in Sources */,
|
DBCC3B9526157E6E0045B23D /* APIService+Relationship.swift in Sources */,
|
||||||
2D7631B325C159F700929FB9 /* Item.swift in Sources */,
|
2D7631B325C159F700929FB9 /* Item.swift in Sources */,
|
||||||
|
@ -3911,6 +3989,7 @@
|
||||||
DB71FD4625F8C6D200512AE1 /* StatusProvider+UITableViewDataSourcePrefetching.swift in Sources */,
|
DB71FD4625F8C6D200512AE1 /* StatusProvider+UITableViewDataSourcePrefetching.swift in Sources */,
|
||||||
DB297B1B2679FAE200704C90 /* PlaceholderImageCacheService.swift in Sources */,
|
DB297B1B2679FAE200704C90 /* PlaceholderImageCacheService.swift in Sources */,
|
||||||
2D8FCA082637EABB00137F46 /* APIService+FollowRequest.swift in Sources */,
|
2D8FCA082637EABB00137F46 /* APIService+FollowRequest.swift in Sources */,
|
||||||
|
DB03A795272A981400EE37C5 /* ContentSplitViewController.swift in Sources */,
|
||||||
2D152A8C25C295CC009AA50C /* StatusView.swift in Sources */,
|
2D152A8C25C295CC009AA50C /* StatusView.swift in Sources */,
|
||||||
DBBC24DE26A54BCB00398BB9 /* MastodonMetricFormatter.swift in Sources */,
|
DBBC24DE26A54BCB00398BB9 /* MastodonMetricFormatter.swift in Sources */,
|
||||||
DBB3BA2A26A81C020004F2D4 /* FLAnimatedImageView.swift in Sources */,
|
DBB3BA2A26A81C020004F2D4 /* FLAnimatedImageView.swift in Sources */,
|
||||||
|
@ -3927,6 +4006,7 @@
|
||||||
DB75BF1E263C1C1B00EDBF1F /* CustomScheduler.swift in Sources */,
|
DB75BF1E263C1C1B00EDBF1F /* CustomScheduler.swift in Sources */,
|
||||||
0FAA102725E1126A0017CCDE /* MastodonPickServerViewController.swift in Sources */,
|
0FAA102725E1126A0017CCDE /* MastodonPickServerViewController.swift in Sources */,
|
||||||
DB59F0FE25EF5D96001F1DAB /* StatusProvider+UITableViewDelegate.swift in Sources */,
|
DB59F0FE25EF5D96001F1DAB /* StatusProvider+UITableViewDelegate.swift in Sources */,
|
||||||
|
DB6B74FE272FF59000C70B6E /* UserItem.swift in Sources */,
|
||||||
DB68586425E619B700F0A850 /* NSKeyValueObservation.swift in Sources */,
|
DB68586425E619B700F0A850 /* NSKeyValueObservation.swift in Sources */,
|
||||||
DBE3CE07261D6A0E00430CC6 /* FavoriteViewModel+Diffable.swift in Sources */,
|
DBE3CE07261D6A0E00430CC6 /* FavoriteViewModel+Diffable.swift in Sources */,
|
||||||
2D61335825C188A000CAE157 /* APIService+Persist+Status.swift in Sources */,
|
2D61335825C188A000CAE157 /* APIService+Persist+Status.swift in Sources */,
|
||||||
|
@ -3943,7 +4023,6 @@
|
||||||
DBBC24DC26A54BCB00398BB9 /* MastodonRegex.swift in Sources */,
|
DBBC24DC26A54BCB00398BB9 /* MastodonRegex.swift in Sources */,
|
||||||
2D69D00A25CAA00300C3A1B2 /* APIService+CoreData+Status.swift in Sources */,
|
2D69D00A25CAA00300C3A1B2 /* APIService+CoreData+Status.swift in Sources */,
|
||||||
DB4481C625EE2ADA00BEFB67 /* PollSection.swift in Sources */,
|
DB4481C625EE2ADA00BEFB67 /* PollSection.swift in Sources */,
|
||||||
DBAC648A267DC355007FE9FD /* NSDiffableDataSourceSnapshot.swift in Sources */,
|
|
||||||
DBCBED1726132DB500B49291 /* UserTimelineViewModel+Diffable.swift in Sources */,
|
DBCBED1726132DB500B49291 /* UserTimelineViewModel+Diffable.swift in Sources */,
|
||||||
DB71FD4C25F8C80E00512AE1 /* StatusPrefetchingService.swift in Sources */,
|
DB71FD4C25F8C80E00512AE1 /* StatusPrefetchingService.swift in Sources */,
|
||||||
2DE0FACE2615F7AD00CDF649 /* RecommendAccountSection.swift in Sources */,
|
2DE0FACE2615F7AD00CDF649 /* RecommendAccountSection.swift in Sources */,
|
||||||
|
@ -3993,6 +4072,7 @@
|
||||||
DBAE3FAF26172FC0004B8251 /* RemoteProfileViewModel.swift in Sources */,
|
DBAE3FAF26172FC0004B8251 /* RemoteProfileViewModel.swift in Sources */,
|
||||||
DBE3CE0D261D767100430CC6 /* FavoriteViewController+Provider.swift in Sources */,
|
DBE3CE0D261D767100430CC6 /* FavoriteViewController+Provider.swift in Sources */,
|
||||||
2D084B9326259545003AA3AF /* NotificationViewModel+LoadLatestState.swift in Sources */,
|
2D084B9326259545003AA3AF /* NotificationViewModel+LoadLatestState.swift in Sources */,
|
||||||
|
DB73BF47271199CA00781945 /* Instance.swift in Sources */,
|
||||||
DB0F8150264D1E2500F2A12B /* PickServerLoaderTableViewCell.swift in Sources */,
|
DB0F8150264D1E2500F2A12B /* PickServerLoaderTableViewCell.swift in Sources */,
|
||||||
DB98337F25C9452D00AD9700 /* APIService+APIError.swift in Sources */,
|
DB98337F25C9452D00AD9700 /* APIService+APIError.swift in Sources */,
|
||||||
DB9E0D6F25EE008500CFDD76 /* UIInterpolatingMotionEffect.swift in Sources */,
|
DB9E0D6F25EE008500CFDD76 /* UIInterpolatingMotionEffect.swift in Sources */,
|
||||||
|
@ -4002,6 +4082,7 @@
|
||||||
DB59F11825EFA35B001F1DAB /* StripProgressView.swift in Sources */,
|
DB59F11825EFA35B001F1DAB /* StripProgressView.swift in Sources */,
|
||||||
DB59F10425EF5EBC001F1DAB /* TableViewCellHeightCacheableContainer.swift in Sources */,
|
DB59F10425EF5EBC001F1DAB /* TableViewCellHeightCacheableContainer.swift in Sources */,
|
||||||
DBF9814C265E339500E4BA07 /* ProfileFieldAddEntryCollectionViewCell.swift in Sources */,
|
DBF9814C265E339500E4BA07 /* ProfileFieldAddEntryCollectionViewCell.swift in Sources */,
|
||||||
|
DB73BF4927140BA300781945 /* UICollectionViewDiffableDataSource.swift in Sources */,
|
||||||
DBA5E7AB263BD3F5004598BB /* TimelineTableViewCellContextMenuConfiguration.swift in Sources */,
|
DBA5E7AB263BD3F5004598BB /* TimelineTableViewCellContextMenuConfiguration.swift in Sources */,
|
||||||
DB73B490261F030A002E9E9F /* SafariActivity.swift in Sources */,
|
DB73B490261F030A002E9E9F /* SafariActivity.swift in Sources */,
|
||||||
DB6D1B44263691CF00ACB481 /* Mastodon+API+Subscriptions+Policy.swift in Sources */,
|
DB6D1B44263691CF00ACB481 /* Mastodon+API+Subscriptions+Policy.swift in Sources */,
|
||||||
|
@ -4015,6 +4096,7 @@
|
||||||
5B90C45E262599800002E742 /* SettingsViewModel.swift in Sources */,
|
5B90C45E262599800002E742 /* SettingsViewModel.swift in Sources */,
|
||||||
2D82B9FF25E7863200E36F0F /* OnboardingViewControllerAppearance.swift in Sources */,
|
2D82B9FF25E7863200E36F0F /* OnboardingViewControllerAppearance.swift in Sources */,
|
||||||
5DF1054725F8870E00D6C0D4 /* VideoPlayerViewModel.swift in Sources */,
|
5DF1054725F8870E00D6C0D4 /* VideoPlayerViewModel.swift in Sources */,
|
||||||
|
DB73BF43271192BB00781945 /* InstanceService.swift in Sources */,
|
||||||
DBA9443A265CC0FC00C537E1 /* Fields.swift in Sources */,
|
DBA9443A265CC0FC00C537E1 /* Fields.swift in Sources */,
|
||||||
2DE0FAC12615F04D00CDF649 /* RecommendHashTagSection.swift in Sources */,
|
2DE0FAC12615F04D00CDF649 /* RecommendHashTagSection.swift in Sources */,
|
||||||
DBA5E7A5263BD28C004598BB /* ContextMenuImagePreviewViewModel.swift in Sources */,
|
DBA5E7A5263BD28C004598BB /* ContextMenuImagePreviewViewModel.swift in Sources */,
|
||||||
|
@ -4054,6 +4136,9 @@
|
||||||
DB9A486C26032AC1008B817C /* AttachmentContainerView+EmptyStateView.swift in Sources */,
|
DB9A486C26032AC1008B817C /* AttachmentContainerView+EmptyStateView.swift in Sources */,
|
||||||
5D0393902612D259007FE196 /* WebViewController.swift in Sources */,
|
5D0393902612D259007FE196 /* WebViewController.swift in Sources */,
|
||||||
DB4481CC25EE2AFE00BEFB67 /* PollItem.swift in Sources */,
|
DB4481CC25EE2AFE00BEFB67 /* PollItem.swift in Sources */,
|
||||||
|
DB6B74FA272FC2B500C70B6E /* APIService+Follower.swift in Sources */,
|
||||||
|
DB6B74F4272FBAE700C70B6E /* FollowerListViewModel+Diffable.swift in Sources */,
|
||||||
|
DB6B74F2272FB67600C70B6E /* FollowerListViewModel.swift in Sources */,
|
||||||
DB44767B260B3B8C00B66B82 /* CustomEmojiPickerInputView.swift in Sources */,
|
DB44767B260B3B8C00B66B82 /* CustomEmojiPickerInputView.swift in Sources */,
|
||||||
0F20222D261457EE000C64BF /* HashtagTimelineViewModel+LoadOldestState.swift in Sources */,
|
0F20222D261457EE000C64BF /* HashtagTimelineViewModel+LoadOldestState.swift in Sources */,
|
||||||
DB0009A626AEE5DC009B9D2D /* Intents.intentdefinition in Sources */,
|
DB0009A626AEE5DC009B9D2D /* Intents.intentdefinition in Sources */,
|
||||||
|
@ -4066,6 +4151,7 @@
|
||||||
DB35FC1F2612F1D9006193C9 /* ProfileRelationshipActionButton.swift in Sources */,
|
DB35FC1F2612F1D9006193C9 /* ProfileRelationshipActionButton.swift in Sources */,
|
||||||
DBC7A672260C897100E57475 /* StatusContentWarningEditorView.swift in Sources */,
|
DBC7A672260C897100E57475 /* StatusContentWarningEditorView.swift in Sources */,
|
||||||
DB3667A6268AE2620027D07F /* ComposeStatusPollSection.swift in Sources */,
|
DB3667A6268AE2620027D07F /* ComposeStatusPollSection.swift in Sources */,
|
||||||
|
DB6B750427300B4000C70B6E /* TimelineFooterTableViewCell.swift in Sources */,
|
||||||
DB59F10E25EF724F001F1DAB /* APIService+Poll.swift in Sources */,
|
DB59F10E25EF724F001F1DAB /* APIService+Poll.swift in Sources */,
|
||||||
DB852D1F26FB037800FC9D81 /* SidebarViewModel.swift in Sources */,
|
DB852D1F26FB037800FC9D81 /* SidebarViewModel.swift in Sources */,
|
||||||
DB47229725F9EFAD00DA7F53 /* NSManagedObjectContext.swift in Sources */,
|
DB47229725F9EFAD00DA7F53 /* NSManagedObjectContext.swift in Sources */,
|
||||||
|
@ -4082,6 +4168,7 @@
|
||||||
DBF156E42702DB3F00EC00B7 /* HandleTapAction.swift in Sources */,
|
DBF156E42702DB3F00EC00B7 /* HandleTapAction.swift in Sources */,
|
||||||
DB023295267F0AB800031745 /* ASMetaEditableTextNode.swift in Sources */,
|
DB023295267F0AB800031745 /* ASMetaEditableTextNode.swift in Sources */,
|
||||||
2D5981A125E4A593000FB903 /* MastodonConfirmEmailViewModel.swift in Sources */,
|
2D5981A125E4A593000FB903 /* MastodonConfirmEmailViewModel.swift in Sources */,
|
||||||
|
DB6B74F6272FBCDB00C70B6E /* FollowerListViewModel+State.swift in Sources */,
|
||||||
DB4F096C269EFA2000D62E92 /* SearchResultViewController+StatusProvider.swift in Sources */,
|
DB4F096C269EFA2000D62E92 /* SearchResultViewController+StatusProvider.swift in Sources */,
|
||||||
DB87D4452609BE0500D12C0D /* ComposeStatusPollOptionCollectionViewCell.swift in Sources */,
|
DB87D4452609BE0500D12C0D /* ComposeStatusPollOptionCollectionViewCell.swift in Sources */,
|
||||||
DB9F58EF26EF491E00E7BBE9 /* AccountListViewModel.swift in Sources */,
|
DB9F58EF26EF491E00E7BBE9 /* AccountListViewModel.swift in Sources */,
|
||||||
|
@ -4097,7 +4184,9 @@
|
||||||
DB1E346825F518E20079D7DF /* CategoryPickerSection.swift in Sources */,
|
DB1E346825F518E20079D7DF /* CategoryPickerSection.swift in Sources */,
|
||||||
2D61254D262547C200299647 /* APIService+Notification.swift in Sources */,
|
2D61254D262547C200299647 /* APIService+Notification.swift in Sources */,
|
||||||
DB040ED126538E3D00BEE9D8 /* Trie.swift in Sources */,
|
DB040ED126538E3D00BEE9D8 /* Trie.swift in Sources */,
|
||||||
|
DB73BF4B27140C0800781945 /* UITableViewDiffableDataSource.swift in Sources */,
|
||||||
DBB525642612C988002F1F29 /* MeProfileViewModel.swift in Sources */,
|
DBB525642612C988002F1F29 /* MeProfileViewModel.swift in Sources */,
|
||||||
|
DB6B74EF272FB55000C70B6E /* FollowerListViewController.swift in Sources */,
|
||||||
5BB04FE9262EFC300043BFF6 /* ReportedStatusTableviewCell.swift in Sources */,
|
5BB04FE9262EFC300043BFF6 /* ReportedStatusTableviewCell.swift in Sources */,
|
||||||
DBAE3F822615DDA3004B8251 /* ProfileViewController+UserProvider.swift in Sources */,
|
DBAE3F822615DDA3004B8251 /* ProfileViewController+UserProvider.swift in Sources */,
|
||||||
DBBC24C426A544B900398BB9 /* Theme.swift in Sources */,
|
DBBC24C426A544B900398BB9 /* Theme.swift in Sources */,
|
||||||
|
@ -4139,8 +4228,10 @@
|
||||||
DB49A63D25FF609300B98345 /* PlayerContainerView+MediaTypeIndicotorView.swift in Sources */,
|
DB49A63D25FF609300B98345 /* PlayerContainerView+MediaTypeIndicotorView.swift in Sources */,
|
||||||
DB6180F826391D660018D199 /* MediaPreviewingViewController.swift in Sources */,
|
DB6180F826391D660018D199 /* MediaPreviewingViewController.swift in Sources */,
|
||||||
DB0140CF25C42AEE00F9F3CF /* OSLog.swift in Sources */,
|
DB0140CF25C42AEE00F9F3CF /* OSLog.swift in Sources */,
|
||||||
|
DB6B75022730060700C70B6E /* UserProviderFacade+UITableViewDelegate.swift in Sources */,
|
||||||
DB44384F25E8C1FA008912A2 /* CALayer.swift in Sources */,
|
DB44384F25E8C1FA008912A2 /* CALayer.swift in Sources */,
|
||||||
2D34D9CB261489930081BFC0 /* SearchViewController+Recommend.swift in Sources */,
|
2D34D9CB261489930081BFC0 /* SearchViewController+Recommend.swift in Sources */,
|
||||||
|
DB71C7CB271D5A0300BE3819 /* LineChartView.swift in Sources */,
|
||||||
DB938F1526241FDF00E5B6C1 /* APIService+Thread.swift in Sources */,
|
DB938F1526241FDF00E5B6C1 /* APIService+Thread.swift in Sources */,
|
||||||
DB482A45261335BA008AE74C /* UserTimelineViewController+Provider.swift in Sources */,
|
DB482A45261335BA008AE74C /* UserTimelineViewController+Provider.swift in Sources */,
|
||||||
2D206B8625F5FB0900143C56 /* Double.swift in Sources */,
|
2D206B8625F5FB0900143C56 /* Double.swift in Sources */,
|
||||||
|
@ -4190,6 +4281,7 @@
|
||||||
DB0C946B26A700AB0088FB11 /* MastodonUser+Property.swift in Sources */,
|
DB0C946B26A700AB0088FB11 /* MastodonUser+Property.swift in Sources */,
|
||||||
DB8AF54425C13647002E6C99 /* SceneCoordinator.swift in Sources */,
|
DB8AF54425C13647002E6C99 /* SceneCoordinator.swift in Sources */,
|
||||||
5DF1058525F88AE500D6C0D4 /* NeedsDependency+AVPlayerViewControllerDelegate.swift in Sources */,
|
5DF1058525F88AE500D6C0D4 /* NeedsDependency+AVPlayerViewControllerDelegate.swift in Sources */,
|
||||||
|
DB73BF45271195AC00781945 /* APIService+CoreData+Instance.swift in Sources */,
|
||||||
DB1D84382657B275000346B3 /* SegmentedControlNavigateable.swift in Sources */,
|
DB1D84382657B275000346B3 /* SegmentedControlNavigateable.swift in Sources */,
|
||||||
DB447697260B439000B66B82 /* CustomEmojiPickerHeaderCollectionReusableView.swift in Sources */,
|
DB447697260B439000B66B82 /* CustomEmojiPickerHeaderCollectionReusableView.swift in Sources */,
|
||||||
DB45FAF925CA80A2005A8AC7 /* APIService+CoreData+MastodonAuthentication.swift in Sources */,
|
DB45FAF925CA80A2005A8AC7 /* APIService+CoreData+MastodonAuthentication.swift in Sources */,
|
||||||
|
@ -4202,12 +4294,14 @@
|
||||||
DBE54AC62636C89F004E7C0B /* NotificationPreference.swift in Sources */,
|
DBE54AC62636C89F004E7C0B /* NotificationPreference.swift in Sources */,
|
||||||
2D5A3D2825CF8BC9002347D6 /* HomeTimelineViewModel+Diffable.swift in Sources */,
|
2D5A3D2825CF8BC9002347D6 /* HomeTimelineViewModel+Diffable.swift in Sources */,
|
||||||
DB98339C25C96DE600AD9700 /* APIService+Account.swift in Sources */,
|
DB98339C25C96DE600AD9700 /* APIService+Account.swift in Sources */,
|
||||||
|
DB6B74FC272FF55800C70B6E /* UserSection.swift in Sources */,
|
||||||
2DF75BA725D10E1000694EC8 /* APIService+Favorite.swift in Sources */,
|
2DF75BA725D10E1000694EC8 /* APIService+Favorite.swift in Sources */,
|
||||||
DB9D6C3825E508BE0051B173 /* Attachment.swift in Sources */,
|
DB9D6C3825E508BE0051B173 /* Attachment.swift in Sources */,
|
||||||
5DFC35DF262068D20045711D /* SearchViewController+Follow.swift in Sources */,
|
5DFC35DF262068D20045711D /* SearchViewController+Follow.swift in Sources */,
|
||||||
DB8AF52E25C13561002E6C99 /* ViewStateStore.swift in Sources */,
|
DB8AF52E25C13561002E6C99 /* ViewStateStore.swift in Sources */,
|
||||||
DB1D61CF26F1B33600DA8662 /* WelcomeViewModel.swift in Sources */,
|
DB1D61CF26F1B33600DA8662 /* WelcomeViewModel.swift in Sources */,
|
||||||
2DA7D04A25CA52CB00804E11 /* TimelineBottomLoaderTableViewCell.swift in Sources */,
|
2DA7D04A25CA52CB00804E11 /* TimelineBottomLoaderTableViewCell.swift in Sources */,
|
||||||
|
DB71C7CD271D7F4300BE3819 /* CurveAlgorithm.swift in Sources */,
|
||||||
DBD376B2269302A4007FEC24 /* UITableViewCell.swift in Sources */,
|
DBD376B2269302A4007FEC24 /* UITableViewCell.swift in Sources */,
|
||||||
DB4F0966269ED52200D62E92 /* SearchResultViewModel.swift in Sources */,
|
DB4F0966269ED52200D62E92 /* SearchResultViewModel.swift in Sources */,
|
||||||
DBAC6499267DF2C4007FE9FD /* TimelineBottomLoaderNode.swift in Sources */,
|
DBAC6499267DF2C4007FE9FD /* TimelineBottomLoaderNode.swift in Sources */,
|
||||||
|
@ -4217,6 +4311,7 @@
|
||||||
0F202227261411BB000C64BF /* HashtagTimelineViewController+Provider.swift in Sources */,
|
0F202227261411BB000C64BF /* HashtagTimelineViewController+Provider.swift in Sources */,
|
||||||
2D7631A825C1535600929FB9 /* StatusTableViewCell.swift in Sources */,
|
2D7631A825C1535600929FB9 /* StatusTableViewCell.swift in Sources */,
|
||||||
2D76316525C14BD100929FB9 /* PublicTimelineViewController.swift in Sources */,
|
2D76316525C14BD100929FB9 /* PublicTimelineViewController.swift in Sources */,
|
||||||
|
DB6B7500272FF73800C70B6E /* UserTableViewCell.swift in Sources */,
|
||||||
DB1D842E26552C4D000346B3 /* StatusTableViewControllerNavigateable.swift in Sources */,
|
DB1D842E26552C4D000346B3 /* StatusTableViewControllerNavigateable.swift in Sources */,
|
||||||
DB938F1F2624382F00E5B6C1 /* ThreadViewModel+Diffable.swift in Sources */,
|
DB938F1F2624382F00E5B6C1 /* ThreadViewModel+Diffable.swift in Sources */,
|
||||||
2D69CFF425CA9E2200C3A1B2 /* LoadMoreConfigurableTableViewContainer.swift in Sources */,
|
2D69CFF425CA9E2200C3A1B2 /* LoadMoreConfigurableTableViewContainer.swift in Sources */,
|
||||||
|
@ -4247,6 +4342,7 @@
|
||||||
DB647C5726F1E97300F7F82C /* MainTabBarController+Wizard.swift in Sources */,
|
DB647C5726F1E97300F7F82C /* MainTabBarController+Wizard.swift in Sources */,
|
||||||
DB6F5E38264E994A009108F4 /* AutoCompleteTopChevronView.swift in Sources */,
|
DB6F5E38264E994A009108F4 /* AutoCompleteTopChevronView.swift in Sources */,
|
||||||
DBB525412611ED54002F1F29 /* ProfileHeaderViewController.swift in Sources */,
|
DBB525412611ED54002F1F29 /* ProfileHeaderViewController.swift in Sources */,
|
||||||
|
DB6B74F8272FBFB100C70B6E /* FollowerListViewController+Provider.swift in Sources */,
|
||||||
DB9D6BFF25E4F5940051B173 /* ProfileViewController.swift in Sources */,
|
DB9D6BFF25E4F5940051B173 /* ProfileViewController.swift in Sources */,
|
||||||
DB4932B326F2054200EF46D4 /* CircleAvatarButton.swift in Sources */,
|
DB4932B326F2054200EF46D4 /* CircleAvatarButton.swift in Sources */,
|
||||||
0FB3D30825E524C600AAD544 /* PickServerCategoriesCell.swift in Sources */,
|
0FB3D30825E524C600AAD544 /* PickServerCategoriesCell.swift in Sources */,
|
||||||
|
@ -4304,6 +4400,7 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
DB6804D12637CE4700430867 /* UserDefaults.swift in Sources */,
|
DB6804D12637CE4700430867 /* UserDefaults.swift in Sources */,
|
||||||
|
DB73BF3B2711885500781945 /* UserDefaults+Notification.swift in Sources */,
|
||||||
DB4932B726F30F0700EF46D4 /* Array.swift in Sources */,
|
DB4932B726F30F0700EF46D4 /* Array.swift in Sources */,
|
||||||
DB6804922637CD8700430867 /* AppName.swift in Sources */,
|
DB6804922637CD8700430867 /* AppName.swift in Sources */,
|
||||||
DB6804FD2637CFEC00430867 /* AppSecret.swift in Sources */,
|
DB6804FD2637CFEC00430867 /* AppSecret.swift in Sources */,
|
||||||
|
@ -4324,6 +4421,7 @@
|
||||||
2D927F0E25C7E9C9004F19B8 /* History.swift in Sources */,
|
2D927F0E25C7E9C9004F19B8 /* History.swift in Sources */,
|
||||||
DBCC3B9B261584A00045B23D /* PrivateNote.swift in Sources */,
|
DBCC3B9B261584A00045B23D /* PrivateNote.swift in Sources */,
|
||||||
DB89BA3725C1145C008580ED /* CoreData.xcdatamodeld in Sources */,
|
DB89BA3725C1145C008580ED /* CoreData.xcdatamodeld in Sources */,
|
||||||
|
DB73BF4127118B6D00781945 /* Instance.swift in Sources */,
|
||||||
DB8AF52525C131D1002E6C99 /* MastodonUser.swift in Sources */,
|
DB8AF52525C131D1002E6C99 /* MastodonUser.swift in Sources */,
|
||||||
DB89BA1B25C1107F008580ED /* Collection.swift in Sources */,
|
DB89BA1B25C1107F008580ED /* Collection.swift in Sources */,
|
||||||
DB4481AD25EE155900BEFB67 /* Poll.swift in Sources */,
|
DB4481AD25EE155900BEFB67 /* Poll.swift in Sources */,
|
||||||
|
@ -4520,6 +4618,7 @@
|
||||||
DB4B777F26CA4EFA00B087B3 /* ru */,
|
DB4B777F26CA4EFA00B087B3 /* ru */,
|
||||||
DB4B778426CA500E00B087B3 /* gd-GB */,
|
DB4B778426CA500E00B087B3 /* gd-GB */,
|
||||||
DB4B779226CA50BA00B087B3 /* th */,
|
DB4B779226CA50BA00B087B3 /* th */,
|
||||||
|
DBDC1CF9272C0FD600055C3D /* ku-TR */,
|
||||||
);
|
);
|
||||||
name = Intents.intentdefinition;
|
name = Intents.intentdefinition;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -4540,6 +4639,7 @@
|
||||||
DB4B778226CA4EFA00B087B3 /* ru */,
|
DB4B778226CA4EFA00B087B3 /* ru */,
|
||||||
DB4B778726CA500E00B087B3 /* gd-GB */,
|
DB4B778726CA500E00B087B3 /* gd-GB */,
|
||||||
DB4B779526CA50BA00B087B3 /* th */,
|
DB4B779526CA50BA00B087B3 /* th */,
|
||||||
|
DBDC1CFC272C0FD600055C3D /* ku-TR */,
|
||||||
);
|
);
|
||||||
name = InfoPlist.strings;
|
name = InfoPlist.strings;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -4560,6 +4660,7 @@
|
||||||
DB4B778126CA4EFA00B087B3 /* ru */,
|
DB4B778126CA4EFA00B087B3 /* ru */,
|
||||||
DB4B778626CA500E00B087B3 /* gd-GB */,
|
DB4B778626CA500E00B087B3 /* gd-GB */,
|
||||||
DB4B779426CA50BA00B087B3 /* th */,
|
DB4B779426CA50BA00B087B3 /* th */,
|
||||||
|
DBDC1CFB272C0FD600055C3D /* ku-TR */,
|
||||||
);
|
);
|
||||||
name = Localizable.strings;
|
name = Localizable.strings;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -4596,6 +4697,7 @@
|
||||||
DB4B778026CA4EFA00B087B3 /* ru */,
|
DB4B778026CA4EFA00B087B3 /* ru */,
|
||||||
DB4B778526CA500E00B087B3 /* gd-GB */,
|
DB4B778526CA500E00B087B3 /* gd-GB */,
|
||||||
DB4B779326CA50BA00B087B3 /* th */,
|
DB4B779326CA50BA00B087B3 /* th */,
|
||||||
|
DBDC1CFA272C0FD600055C3D /* ku-TR */,
|
||||||
);
|
);
|
||||||
name = Localizable.stringsdict;
|
name = Localizable.stringsdict;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -4616,6 +4718,7 @@
|
||||||
DB4B779026CA504900B087B3 /* fr */,
|
DB4B779026CA504900B087B3 /* fr */,
|
||||||
DB4B779126CA504A00B087B3 /* ja */,
|
DB4B779126CA504A00B087B3 /* ja */,
|
||||||
DB4B779626CA50BA00B087B3 /* th */,
|
DB4B779626CA50BA00B087B3 /* th */,
|
||||||
|
DBDC1CFD272C0FD600055C3D /* ku-TR */,
|
||||||
);
|
);
|
||||||
name = Intents.stringsdict;
|
name = Intents.stringsdict;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -4760,7 +4863,7 @@
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = Mastodon/Mastodon.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Mastodon/Mastodon.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 71;
|
CURRENT_PROJECT_VERSION = 82;
|
||||||
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
|
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
|
||||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||||
INFOPLIST_FILE = Mastodon/Info.plist;
|
INFOPLIST_FILE = Mastodon/Info.plist;
|
||||||
|
@ -4789,7 +4892,7 @@
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = Mastodon/Mastodon.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Mastodon/Mastodon.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 71;
|
CURRENT_PROJECT_VERSION = 82;
|
||||||
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
|
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
|
||||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||||
INFOPLIST_FILE = Mastodon/Info.plist;
|
INFOPLIST_FILE = Mastodon/Info.plist;
|
||||||
|
@ -4897,11 +5000,11 @@
|
||||||
APPLICATION_EXTENSION_API_ONLY = YES;
|
APPLICATION_EXTENSION_API_ONLY = YES;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 71;
|
CURRENT_PROJECT_VERSION = 82;
|
||||||
DEFINES_MODULE = YES;
|
DEFINES_MODULE = YES;
|
||||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 71;
|
DYLIB_CURRENT_VERSION = 82;
|
||||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||||
INFOPLIST_FILE = AppShared/Info.plist;
|
INFOPLIST_FILE = AppShared/Info.plist;
|
||||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||||
|
@ -4928,11 +5031,11 @@
|
||||||
APPLICATION_EXTENSION_API_ONLY = YES;
|
APPLICATION_EXTENSION_API_ONLY = YES;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 71;
|
CURRENT_PROJECT_VERSION = 82;
|
||||||
DEFINES_MODULE = YES;
|
DEFINES_MODULE = YES;
|
||||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 71;
|
DYLIB_CURRENT_VERSION = 82;
|
||||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||||
INFOPLIST_FILE = AppShared/Info.plist;
|
INFOPLIST_FILE = AppShared/Info.plist;
|
||||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||||
|
@ -4957,11 +5060,11 @@
|
||||||
APPLICATION_EXTENSION_API_ONLY = YES;
|
APPLICATION_EXTENSION_API_ONLY = YES;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 71;
|
CURRENT_PROJECT_VERSION = 82;
|
||||||
DEFINES_MODULE = YES;
|
DEFINES_MODULE = YES;
|
||||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 71;
|
DYLIB_CURRENT_VERSION = 82;
|
||||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||||
INFOPLIST_FILE = CoreDataStack/Info.plist;
|
INFOPLIST_FILE = CoreDataStack/Info.plist;
|
||||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||||
|
@ -4987,11 +5090,11 @@
|
||||||
APPLICATION_EXTENSION_API_ONLY = YES;
|
APPLICATION_EXTENSION_API_ONLY = YES;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 71;
|
CURRENT_PROJECT_VERSION = 82;
|
||||||
DEFINES_MODULE = YES;
|
DEFINES_MODULE = YES;
|
||||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 71;
|
DYLIB_CURRENT_VERSION = 82;
|
||||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||||
INFOPLIST_FILE = CoreDataStack/Info.plist;
|
INFOPLIST_FILE = CoreDataStack/Info.plist;
|
||||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||||
|
@ -5054,7 +5157,7 @@
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_ENTITLEMENTS = MastodonIntent/MastodonIntent.entitlements;
|
CODE_SIGN_ENTITLEMENTS = MastodonIntent/MastodonIntent.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 71;
|
CURRENT_PROJECT_VERSION = 82;
|
||||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||||
INFOPLIST_FILE = MastodonIntent/Info.plist;
|
INFOPLIST_FILE = MastodonIntent/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
@ -5079,7 +5182,7 @@
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_ENTITLEMENTS = MastodonIntent/MastodonIntent.entitlements;
|
CODE_SIGN_ENTITLEMENTS = MastodonIntent/MastodonIntent.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 71;
|
CURRENT_PROJECT_VERSION = 82;
|
||||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||||
INFOPLIST_FILE = MastodonIntent/Info.plist;
|
INFOPLIST_FILE = MastodonIntent/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
@ -5104,7 +5207,7 @@
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_ENTITLEMENTS = MastodonIntent/MastodonIntent.entitlements;
|
CODE_SIGN_ENTITLEMENTS = MastodonIntent/MastodonIntent.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 71;
|
CURRENT_PROJECT_VERSION = 82;
|
||||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||||
INFOPLIST_FILE = MastodonIntent/Info.plist;
|
INFOPLIST_FILE = MastodonIntent/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
@ -5129,7 +5232,7 @@
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_ENTITLEMENTS = MastodonIntent/MastodonIntent.entitlements;
|
CODE_SIGN_ENTITLEMENTS = MastodonIntent/MastodonIntent.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 71;
|
CURRENT_PROJECT_VERSION = 82;
|
||||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||||
INFOPLIST_FILE = MastodonIntent/Info.plist;
|
INFOPLIST_FILE = MastodonIntent/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
@ -5154,7 +5257,7 @@
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_ENTITLEMENTS = ShareActionExtension/ShareActionExtension.entitlements;
|
CODE_SIGN_ENTITLEMENTS = ShareActionExtension/ShareActionExtension.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 71;
|
CURRENT_PROJECT_VERSION = 82;
|
||||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||||
INFOPLIST_FILE = ShareActionExtension/Info.plist;
|
INFOPLIST_FILE = ShareActionExtension/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
@ -5179,7 +5282,7 @@
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_ENTITLEMENTS = ShareActionExtension/ShareActionExtension.entitlements;
|
CODE_SIGN_ENTITLEMENTS = ShareActionExtension/ShareActionExtension.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 71;
|
CURRENT_PROJECT_VERSION = 82;
|
||||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||||
INFOPLIST_FILE = ShareActionExtension/Info.plist;
|
INFOPLIST_FILE = ShareActionExtension/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
@ -5204,7 +5307,7 @@
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_ENTITLEMENTS = ShareActionExtension/ShareActionExtension.entitlements;
|
CODE_SIGN_ENTITLEMENTS = ShareActionExtension/ShareActionExtension.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 71;
|
CURRENT_PROJECT_VERSION = 82;
|
||||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||||
INFOPLIST_FILE = ShareActionExtension/Info.plist;
|
INFOPLIST_FILE = ShareActionExtension/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
@ -5229,7 +5332,7 @@
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_ENTITLEMENTS = ShareActionExtension/ShareActionExtension.entitlements;
|
CODE_SIGN_ENTITLEMENTS = ShareActionExtension/ShareActionExtension.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 71;
|
CURRENT_PROJECT_VERSION = 82;
|
||||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||||
INFOPLIST_FILE = ShareActionExtension/Info.plist;
|
INFOPLIST_FILE = ShareActionExtension/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
@ -5320,7 +5423,7 @@
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = Mastodon/Mastodon.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Mastodon/Mastodon.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 71;
|
CURRENT_PROJECT_VERSION = 82;
|
||||||
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
|
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
|
||||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||||
INFOPLIST_FILE = Mastodon/Info.plist;
|
INFOPLIST_FILE = Mastodon/Info.plist;
|
||||||
|
@ -5387,11 +5490,11 @@
|
||||||
APPLICATION_EXTENSION_API_ONLY = YES;
|
APPLICATION_EXTENSION_API_ONLY = YES;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 71;
|
CURRENT_PROJECT_VERSION = 82;
|
||||||
DEFINES_MODULE = YES;
|
DEFINES_MODULE = YES;
|
||||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 71;
|
DYLIB_CURRENT_VERSION = 82;
|
||||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||||
INFOPLIST_FILE = CoreDataStack/Info.plist;
|
INFOPLIST_FILE = CoreDataStack/Info.plist;
|
||||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||||
|
@ -5436,7 +5539,7 @@
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
|
CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 71;
|
CURRENT_PROJECT_VERSION = 82;
|
||||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||||
INFOPLIST_FILE = NotificationService/Info.plist;
|
INFOPLIST_FILE = NotificationService/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
@ -5461,11 +5564,11 @@
|
||||||
APPLICATION_EXTENSION_API_ONLY = YES;
|
APPLICATION_EXTENSION_API_ONLY = YES;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 71;
|
CURRENT_PROJECT_VERSION = 82;
|
||||||
DEFINES_MODULE = YES;
|
DEFINES_MODULE = YES;
|
||||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 71;
|
DYLIB_CURRENT_VERSION = 82;
|
||||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||||
INFOPLIST_FILE = AppShared/Info.plist;
|
INFOPLIST_FILE = AppShared/Info.plist;
|
||||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||||
|
@ -5557,7 +5660,7 @@
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = Mastodon/Mastodon.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Mastodon/Mastodon.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 71;
|
CURRENT_PROJECT_VERSION = 82;
|
||||||
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
|
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
|
||||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||||
INFOPLIST_FILE = Mastodon/Info.plist;
|
INFOPLIST_FILE = Mastodon/Info.plist;
|
||||||
|
@ -5624,11 +5727,11 @@
|
||||||
APPLICATION_EXTENSION_API_ONLY = YES;
|
APPLICATION_EXTENSION_API_ONLY = YES;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 71;
|
CURRENT_PROJECT_VERSION = 82;
|
||||||
DEFINES_MODULE = YES;
|
DEFINES_MODULE = YES;
|
||||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 71;
|
DYLIB_CURRENT_VERSION = 82;
|
||||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||||
INFOPLIST_FILE = CoreDataStack/Info.plist;
|
INFOPLIST_FILE = CoreDataStack/Info.plist;
|
||||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||||
|
@ -5673,7 +5776,7 @@
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
|
CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 71;
|
CURRENT_PROJECT_VERSION = 82;
|
||||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||||
INFOPLIST_FILE = NotificationService/Info.plist;
|
INFOPLIST_FILE = NotificationService/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
@ -5698,11 +5801,11 @@
|
||||||
APPLICATION_EXTENSION_API_ONLY = YES;
|
APPLICATION_EXTENSION_API_ONLY = YES;
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 71;
|
CURRENT_PROJECT_VERSION = 82;
|
||||||
DEFINES_MODULE = YES;
|
DEFINES_MODULE = YES;
|
||||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
DYLIB_CURRENT_VERSION = 71;
|
DYLIB_CURRENT_VERSION = 82;
|
||||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||||
INFOPLIST_FILE = AppShared/Info.plist;
|
INFOPLIST_FILE = AppShared/Info.plist;
|
||||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||||
|
@ -5728,7 +5831,7 @@
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
|
CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 71;
|
CURRENT_PROJECT_VERSION = 82;
|
||||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||||
INFOPLIST_FILE = NotificationService/Info.plist;
|
INFOPLIST_FILE = NotificationService/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
@ -5752,7 +5855,7 @@
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
|
CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 71;
|
CURRENT_PROJECT_VERSION = 82;
|
||||||
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
DEVELOPMENT_TEAM = 5Z4GVSS33P;
|
||||||
INFOPLIST_FILE = NotificationService/Info.plist;
|
INFOPLIST_FILE = NotificationService/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
|
|
@ -7,12 +7,12 @@
|
||||||
<key>AppShared.xcscheme_^#shared#^_</key>
|
<key>AppShared.xcscheme_^#shared#^_</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>56</integer>
|
<integer>42</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>CoreDataStack.xcscheme_^#shared#^_</key>
|
<key>CoreDataStack.xcscheme_^#shared#^_</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>54</integer>
|
<integer>43</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>Mastodon - ASDK.xcscheme_^#shared#^_</key>
|
<key>Mastodon - ASDK.xcscheme_^#shared#^_</key>
|
||||||
<dict>
|
<dict>
|
||||||
|
@ -97,7 +97,7 @@
|
||||||
<key>MastodonIntent.xcscheme_^#shared#^_</key>
|
<key>MastodonIntent.xcscheme_^#shared#^_</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>51</integer>
|
<integer>44</integer>
|
||||||
</dict>
|
</dict>
|
||||||
<key>MastodonIntents.xcscheme_^#shared#^_</key>
|
<key>MastodonIntents.xcscheme_^#shared#^_</key>
|
||||||
<dict>
|
<dict>
|
||||||
|
@ -117,7 +117,7 @@
|
||||||
<key>ShareActionExtension.xcscheme_^#shared#^_</key>
|
<key>ShareActionExtension.xcscheme_^#shared#^_</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>orderHint</key>
|
<key>orderHint</key>
|
||||||
<integer>55</integer>
|
<integer>41</integer>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>SuppressBuildableAutocreation</key>
|
<key>SuppressBuildableAutocreation</key>
|
||||||
|
|
|
@ -141,8 +141,8 @@
|
||||||
"repositoryURL": "https://github.com/SDWebImage/SDWebImage.git",
|
"repositoryURL": "https://github.com/SDWebImage/SDWebImage.git",
|
||||||
"state": {
|
"state": {
|
||||||
"branch": null,
|
"branch": null,
|
||||||
"revision": "76dd4b49110b8624317fc128e7fa0d8a252018bc",
|
"revision": "a72df4849408da7e5d3c1b586797b7c601c41d1b",
|
||||||
"version": "5.11.1"
|
"version": "5.12.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -216,15 +216,6 @@
|
||||||
"revision": "dad97167bf1be16aeecd109130900995dd01c515",
|
"revision": "dad97167bf1be16aeecd109130900995dd01c515",
|
||||||
"version": "2.6.0"
|
"version": "2.6.0"
|
||||||
}
|
}
|
||||||
},
|
|
||||||
{
|
|
||||||
"package": "UITextView+Placeholder",
|
|
||||||
"repositoryURL": "https://github.com/MainasuK/UITextView-Placeholder",
|
|
||||||
"state": {
|
|
||||||
"branch": null,
|
|
||||||
"revision": "20f513ded04a040cdf5467f0891849b1763ede3b",
|
|
||||||
"version": "1.4.1"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
|
@ -5,20 +5,24 @@
|
||||||
// Created by Cirno MainasuK on 2021-1-27.
|
// Created by Cirno MainasuK on 2021-1-27.
|
||||||
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
import Combine
|
||||||
import SafariServices
|
import SafariServices
|
||||||
import CoreDataStack
|
import CoreDataStack
|
||||||
|
import MastodonSDK
|
||||||
import PanModal
|
import PanModal
|
||||||
|
|
||||||
final public class SceneCoordinator {
|
final public class SceneCoordinator {
|
||||||
|
|
||||||
|
private var disposeBag = Set<AnyCancellable>()
|
||||||
|
|
||||||
private weak var scene: UIScene!
|
private weak var scene: UIScene!
|
||||||
private weak var sceneDelegate: SceneDelegate!
|
private weak var sceneDelegate: SceneDelegate!
|
||||||
private weak var appContext: AppContext!
|
private weak var appContext: AppContext!
|
||||||
private(set) weak var tabBarController: MainTabBarController!
|
|
||||||
|
|
||||||
let id = UUID().uuidString
|
let id = UUID().uuidString
|
||||||
|
|
||||||
weak var splitViewController: RootSplitViewController?
|
private(set) weak var tabBarController: MainTabBarController!
|
||||||
|
private(set) weak var splitViewController: RootSplitViewController?
|
||||||
|
|
||||||
private(set) var secondaryStackHashValues = Set<Int>()
|
private(set) var secondaryStackHashValues = Set<Int>()
|
||||||
|
|
||||||
|
@ -28,6 +32,104 @@ final public class SceneCoordinator {
|
||||||
self.appContext = appContext
|
self.appContext = appContext
|
||||||
|
|
||||||
scene.session.sceneCoordinator = self
|
scene.session.sceneCoordinator = self
|
||||||
|
|
||||||
|
appContext.notificationService.requestRevealNotificationPublisher
|
||||||
|
.receive(on: DispatchQueue.main)
|
||||||
|
.compactMap { [weak self] pushNotification -> AnyPublisher<MastodonPushNotification?, Never> in
|
||||||
|
guard let self = self else { return Just(nil).eraseToAnyPublisher() }
|
||||||
|
// skip if no available account
|
||||||
|
guard let currentActiveAuthenticationBox = appContext.authenticationService.activeMastodonAuthenticationBox.value else {
|
||||||
|
return Just(nil).eraseToAnyPublisher()
|
||||||
|
}
|
||||||
|
|
||||||
|
let accessToken = pushNotification._accessToken // use raw accessToken value without normalize
|
||||||
|
if currentActiveAuthenticationBox.userAuthorization.accessToken == accessToken {
|
||||||
|
// do nothing if notification for current account
|
||||||
|
return Just(pushNotification).eraseToAnyPublisher()
|
||||||
|
} else {
|
||||||
|
// switch to notification's account
|
||||||
|
let request = MastodonAuthentication.sortedFetchRequest
|
||||||
|
request.predicate = MastodonAuthentication.predicate(userAccessToken: accessToken)
|
||||||
|
request.returnsObjectsAsFaults = false
|
||||||
|
request.fetchLimit = 1
|
||||||
|
do {
|
||||||
|
guard let authentication = try appContext.managedObjectContext.fetch(request).first else {
|
||||||
|
return Just(nil).eraseToAnyPublisher()
|
||||||
|
}
|
||||||
|
let domain = authentication.domain
|
||||||
|
let userID = authentication.userID
|
||||||
|
return appContext.authenticationService.activeMastodonUser(domain: domain, userID: userID)
|
||||||
|
.receive(on: DispatchQueue.main)
|
||||||
|
.map { [weak self] result -> MastodonPushNotification? in
|
||||||
|
guard let self = self else { return nil }
|
||||||
|
switch result {
|
||||||
|
case .success:
|
||||||
|
// reset view hierarchy
|
||||||
|
self.setup()
|
||||||
|
return pushNotification
|
||||||
|
case .failure:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.delay(for: 1, scheduler: DispatchQueue.main) // set delay to slow transition (not must)
|
||||||
|
.eraseToAnyPublisher()
|
||||||
|
} catch {
|
||||||
|
assertionFailure(error.localizedDescription)
|
||||||
|
return Just(nil).eraseToAnyPublisher()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.switchToLatest()
|
||||||
|
.receive(on: DispatchQueue.main)
|
||||||
|
.sink { [weak self] pushNotification in
|
||||||
|
guard let self = self else { return }
|
||||||
|
guard let pushNotification = pushNotification else { return }
|
||||||
|
|
||||||
|
// redirect to notification tab
|
||||||
|
self.switchToTabBar(tab: .notification)
|
||||||
|
|
||||||
|
|
||||||
|
// Delay in next run loop
|
||||||
|
DispatchQueue.main.async { [weak self] in
|
||||||
|
guard let self = self else { return }
|
||||||
|
|
||||||
|
// Note:
|
||||||
|
// show (push) on phone and pad
|
||||||
|
let from: UIViewController? = {
|
||||||
|
if let splitViewController = self.splitViewController {
|
||||||
|
if splitViewController.compactMainTabBarViewController.topMost?.view.window != nil {
|
||||||
|
// compact
|
||||||
|
return splitViewController.compactMainTabBarViewController.topMost
|
||||||
|
} else {
|
||||||
|
// expand
|
||||||
|
return splitViewController.contentSplitViewController.mainTabBarController.topMost
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return self.tabBarController.topMost
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
// show notification related content
|
||||||
|
guard let type = Mastodon.Entity.Notification.NotificationType(rawValue: pushNotification.notificationType) else { return }
|
||||||
|
let notificationID = String(pushNotification.notificationID)
|
||||||
|
|
||||||
|
switch type {
|
||||||
|
case .follow:
|
||||||
|
let profileViewModel = RemoteProfileViewModel(context: appContext, notificationID: notificationID)
|
||||||
|
self.present(scene: .profile(viewModel: profileViewModel), from: from, transition: .show)
|
||||||
|
case .followRequest:
|
||||||
|
// do nothing
|
||||||
|
break
|
||||||
|
case .mention, .reblog, .favourite, .poll, .status:
|
||||||
|
let threadViewModel = RemoteThreadViewModel(context: appContext, notificationID: notificationID)
|
||||||
|
self.present(scene: .thread(viewModel: threadViewModel), from: from, transition: .show)
|
||||||
|
case ._other:
|
||||||
|
assertionFailure()
|
||||||
|
break
|
||||||
|
}
|
||||||
|
} // end DispatchQueue.main.async
|
||||||
|
}
|
||||||
|
.store(in: &disposeBag)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,6 +138,7 @@ extension SceneCoordinator {
|
||||||
case show // push
|
case show // push
|
||||||
case showDetail // replace
|
case showDetail // replace
|
||||||
case modal(animated: Bool, completion: (() -> Void)? = nil)
|
case modal(animated: Bool, completion: (() -> Void)? = nil)
|
||||||
|
case popover(sourceView: UIView)
|
||||||
case panModal
|
case panModal
|
||||||
case custom(transitioningDelegate: UIViewControllerTransitioningDelegate)
|
case custom(transitioningDelegate: UIViewControllerTransitioningDelegate)
|
||||||
case customPush
|
case customPush
|
||||||
|
@ -75,6 +178,7 @@ extension SceneCoordinator {
|
||||||
case accountList
|
case accountList
|
||||||
case profile(viewModel: ProfileViewModel)
|
case profile(viewModel: ProfileViewModel)
|
||||||
case favorite(viewModel: FavoriteViewModel)
|
case favorite(viewModel: FavoriteViewModel)
|
||||||
|
case follower(viewModel: FollowerListViewModel)
|
||||||
|
|
||||||
// setting
|
// setting
|
||||||
case settings(viewModel: SettingsViewModel)
|
case settings(viewModel: SettingsViewModel)
|
||||||
|
@ -124,6 +228,7 @@ extension SceneCoordinator {
|
||||||
default:
|
default:
|
||||||
let splitViewController = RootSplitViewController(context: appContext, coordinator: self)
|
let splitViewController = RootSplitViewController(context: appContext, coordinator: self)
|
||||||
self.splitViewController = splitViewController
|
self.splitViewController = splitViewController
|
||||||
|
self.tabBarController = splitViewController.contentSplitViewController.mainTabBarController
|
||||||
sceneDelegate.window?.rootViewController = splitViewController
|
sceneDelegate.window?.rootViewController = splitViewController
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -178,18 +283,7 @@ extension SceneCoordinator {
|
||||||
|
|
||||||
switch transition {
|
switch transition {
|
||||||
case .show:
|
case .show:
|
||||||
if let splitViewController = splitViewController, !splitViewController.isCollapsed,
|
|
||||||
let supplementaryViewController = splitViewController.viewController(for: .supplementary) as? UINavigationController,
|
|
||||||
(supplementaryViewController === presentingViewController || supplementaryViewController.viewControllers.contains(presentingViewController)) ||
|
|
||||||
(presentingViewController is UserTimelineViewController && presentingViewController.view.isDescendant(of: supplementaryViewController.view))
|
|
||||||
{
|
|
||||||
fallthrough
|
|
||||||
} else {
|
|
||||||
if secondaryStackHashValues.contains(presentingViewController.hashValue) {
|
|
||||||
secondaryStackHashValues.insert(viewController.hashValue)
|
|
||||||
}
|
|
||||||
presentingViewController.show(viewController, sender: sender)
|
presentingViewController.show(viewController, sender: sender)
|
||||||
}
|
|
||||||
case .showDetail:
|
case .showDetail:
|
||||||
secondaryStackHashValues.insert(viewController.hashValue)
|
secondaryStackHashValues.insert(viewController.hashValue)
|
||||||
let navigationController = AdaptiveStatusBarStyleNavigationController(rootViewController: viewController)
|
let navigationController = AdaptiveStatusBarStyleNavigationController(rootViewController: viewController)
|
||||||
|
@ -214,8 +308,17 @@ extension SceneCoordinator {
|
||||||
assertionFailure()
|
assertionFailure()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
presentingViewController.presentPanModal(panModalPresentable)
|
|
||||||
|
|
||||||
|
// https://github.com/slackhq/PanModal/issues/74#issuecomment-572426441
|
||||||
|
panModalPresentable.modalPresentationStyle = .custom
|
||||||
|
panModalPresentable.modalPresentationCapturesStatusBarAppearance = true
|
||||||
|
panModalPresentable.transitioningDelegate = PanModalPresentationDelegate.default
|
||||||
|
presentingViewController.present(panModalPresentable, animated: true, completion: nil)
|
||||||
|
//presentingViewController.presentPanModal(panModalPresentable)
|
||||||
|
case .popover(let sourceView):
|
||||||
|
viewController.modalPresentationStyle = .popover
|
||||||
|
viewController.popoverPresentationController?.sourceView = sourceView
|
||||||
|
(splitViewController ?? presentingViewController)?.present(viewController, animated: true, completion: nil)
|
||||||
case .custom(let transitioningDelegate):
|
case .custom(let transitioningDelegate):
|
||||||
viewController.modalPresentationStyle = .custom
|
viewController.modalPresentationStyle = .custom
|
||||||
viewController.transitioningDelegate = transitioningDelegate
|
viewController.transitioningDelegate = transitioningDelegate
|
||||||
|
@ -247,7 +350,13 @@ extension SceneCoordinator {
|
||||||
}
|
}
|
||||||
|
|
||||||
func switchToTabBar(tab: MainTabBarController.Tab) {
|
func switchToTabBar(tab: MainTabBarController.Tab) {
|
||||||
|
splitViewController?.contentSplitViewController.currentSupplementaryTab = tab
|
||||||
|
|
||||||
|
splitViewController?.compactMainTabBarViewController.selectedIndex = tab.rawValue
|
||||||
|
splitViewController?.compactMainTabBarViewController.currentTab.value = tab
|
||||||
|
|
||||||
tabBarController.selectedIndex = tab.rawValue
|
tabBarController.selectedIndex = tab.rawValue
|
||||||
|
tabBarController.currentTab.value = tab
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -316,6 +425,10 @@ private extension SceneCoordinator {
|
||||||
let _viewController = FavoriteViewController()
|
let _viewController = FavoriteViewController()
|
||||||
_viewController.viewModel = viewModel
|
_viewController.viewModel = viewModel
|
||||||
viewController = _viewController
|
viewController = _viewController
|
||||||
|
case .follower(let viewModel):
|
||||||
|
let _viewController = FollowerListViewController()
|
||||||
|
_viewController.viewModel = viewModel
|
||||||
|
viewController = _viewController
|
||||||
case .suggestionAccount(let viewModel):
|
case .suggestionAccount(let viewModel):
|
||||||
let _viewController = SuggestionAccountViewController()
|
let _viewController = SuggestionAccountViewController()
|
||||||
_viewController.viewModel = viewModel
|
_viewController.viewModel = viewModel
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
//
|
||||||
|
// UserItem.swift
|
||||||
|
// Mastodon
|
||||||
|
//
|
||||||
|
// Created by Cirno MainasuK on 2021-11-1.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import CoreData
|
||||||
|
|
||||||
|
enum UserItem: Hashable {
|
||||||
|
case follower(objectID: NSManagedObjectID)
|
||||||
|
case bottomLoader
|
||||||
|
case bottomHeader(text: String)
|
||||||
|
}
|
|
@ -32,24 +32,8 @@ extension SearchHistorySection {
|
||||||
}
|
}
|
||||||
return cell
|
return cell
|
||||||
case .status:
|
case .status:
|
||||||
|
// Should not show status in the history list
|
||||||
return UITableViewCell()
|
return UITableViewCell()
|
||||||
// let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: StatusTableViewCell.self), for: indexPath) as! StatusTableViewCell
|
|
||||||
// if let status = try? dependency.context.managedObjectContext.existingObject(with: statusObjectID) as? Status {
|
|
||||||
// let activeMastodonAuthenticationBox = dependency.context.authenticationService.activeMastodonAuthenticationBox.value
|
|
||||||
// let requestUserID = activeMastodonAuthenticationBox?.userID ?? ""
|
|
||||||
// StatusSection.configure(
|
|
||||||
// cell: cell,
|
|
||||||
// tableView: tableView,
|
|
||||||
// timelineContext: .search,
|
|
||||||
// dependency: dependency,
|
|
||||||
// readableLayoutFrame: tableView.readableContentGuide.layoutFrame,
|
|
||||||
// status: status,
|
|
||||||
// requestUserID: requestUserID,
|
|
||||||
// statusItemAttribute: attribute
|
|
||||||
// )
|
|
||||||
// }
|
|
||||||
// cell.delegate = statusTableViewCellDelegate
|
|
||||||
// return cell
|
|
||||||
} // end switch
|
} // end switch
|
||||||
} // end UITableViewDiffableDataSource
|
} // end UITableViewDiffableDataSource
|
||||||
} // end func
|
} // end func
|
||||||
|
|
|
@ -41,21 +41,17 @@ extension SettingsSection {
|
||||||
switch item {
|
switch item {
|
||||||
case .appearance(let objectID):
|
case .appearance(let objectID):
|
||||||
let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: SettingsAppearanceTableViewCell.self), for: indexPath) as! SettingsAppearanceTableViewCell
|
let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: SettingsAppearanceTableViewCell.self), for: indexPath) as! SettingsAppearanceTableViewCell
|
||||||
managedObjectContext.performAndWait {
|
UserDefaults.shared.observe(\.customUserInterfaceStyle, options: [.initial, .new]) { [weak cell] defaults, _ in
|
||||||
let setting = managedObjectContext.object(with: objectID) as! Setting
|
|
||||||
cell.update(with: setting.appearance)
|
|
||||||
ManagedObjectObserver.observe(object: setting)
|
|
||||||
.receive(on: DispatchQueue.main)
|
|
||||||
.sink(receiveCompletion: { _ in
|
|
||||||
// do nothing
|
|
||||||
}, receiveValue: { [weak cell] change in
|
|
||||||
guard let cell = cell else { return }
|
guard let cell = cell else { return }
|
||||||
guard case .update(let object) = change.changeType,
|
switch defaults.customUserInterfaceStyle {
|
||||||
let setting = object as? Setting else { return }
|
case .unspecified: cell.update(with: .automatic)
|
||||||
cell.update(with: setting.appearance)
|
case .dark: cell.update(with: .dark)
|
||||||
})
|
case .light: cell.update(with: .light)
|
||||||
.store(in: &cell.disposeBag)
|
@unknown default:
|
||||||
|
assertionFailure()
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
.store(in: &cell.observations)
|
||||||
cell.delegate = settingsAppearanceTableViewCellDelegate
|
cell.delegate = settingsAppearanceTableViewCellDelegate
|
||||||
return cell
|
return cell
|
||||||
case .notification(let objectID, let switchMode):
|
case .notification(let objectID, let switchMode):
|
||||||
|
|
|
@ -639,7 +639,7 @@ extension StatusSection {
|
||||||
) {
|
) {
|
||||||
if status.reblog != nil {
|
if status.reblog != nil {
|
||||||
cell.statusView.headerContainerView.isHidden = false
|
cell.statusView.headerContainerView.isHidden = false
|
||||||
cell.statusView.headerIconLabel.attributedText = StatusView.iconAttributedString(image: StatusView.reblogIconImage)
|
cell.statusView.headerIconLabel.configure(attributedString: StatusView.iconAttributedString(image: StatusView.reblogIconImage))
|
||||||
let headerText: String = {
|
let headerText: String = {
|
||||||
let author = status.author
|
let author = status.author
|
||||||
let name = author.displayName.isEmpty ? author.username : author.displayName
|
let name = author.displayName.isEmpty ? author.username : author.displayName
|
||||||
|
@ -657,7 +657,7 @@ extension StatusSection {
|
||||||
cell.statusView.headerInfoLabel.isAccessibilityElement = true
|
cell.statusView.headerInfoLabel.isAccessibilityElement = true
|
||||||
} else if status.inReplyToID != nil {
|
} else if status.inReplyToID != nil {
|
||||||
cell.statusView.headerContainerView.isHidden = false
|
cell.statusView.headerContainerView.isHidden = false
|
||||||
cell.statusView.headerIconLabel.attributedText = StatusView.iconAttributedString(image: StatusView.replyIconImage)
|
cell.statusView.headerIconLabel.configure(attributedString: StatusView.iconAttributedString(image: StatusView.replyIconImage))
|
||||||
let headerText: String = {
|
let headerText: String = {
|
||||||
guard let replyTo = status.replyTo else {
|
guard let replyTo = status.replyTo else {
|
||||||
return L10n.Common.Controls.Status.userRepliedTo("-")
|
return L10n.Common.Controls.Status.userRepliedTo("-")
|
||||||
|
@ -720,6 +720,15 @@ extension StatusSection {
|
||||||
statusItemAttribute: Item.StatusAttribute
|
statusItemAttribute: Item.StatusAttribute
|
||||||
) {
|
) {
|
||||||
// set content
|
// set content
|
||||||
|
let paragraphStyle = cell.statusView.contentMetaText.paragraphStyle
|
||||||
|
if let language = (status.reblog ?? status).language {
|
||||||
|
let direction = Locale.characterDirection(forLanguage: language)
|
||||||
|
paragraphStyle.alignment = direction == .rightToLeft ? .right : .left
|
||||||
|
} else {
|
||||||
|
paragraphStyle.alignment = .natural
|
||||||
|
}
|
||||||
|
cell.statusView.contentMetaText.paragraphStyle = paragraphStyle
|
||||||
|
|
||||||
if let content = content {
|
if let content = content {
|
||||||
cell.statusView.contentMetaText.configure(content: content)
|
cell.statusView.contentMetaText.configure(content: content)
|
||||||
cell.statusView.contentMetaText.textView.accessibilityLabel = content.trimmed
|
cell.statusView.contentMetaText.textView.accessibilityLabel = content.trimmed
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
//
|
||||||
|
// UserSection.swift
|
||||||
|
// Mastodon
|
||||||
|
//
|
||||||
|
// Created by Cirno MainasuK on 2021-11-1.
|
||||||
|
//
|
||||||
|
|
||||||
|
import os.log
|
||||||
|
import UIKit
|
||||||
|
import CoreData
|
||||||
|
import CoreDataStack
|
||||||
|
import MetaTextKit
|
||||||
|
import MastodonMeta
|
||||||
|
|
||||||
|
enum UserSection: Hashable {
|
||||||
|
case main
|
||||||
|
}
|
||||||
|
|
||||||
|
extension UserSection {
|
||||||
|
|
||||||
|
static let logger = Logger(subsystem: "StatusSection", category: "logic")
|
||||||
|
|
||||||
|
static func tableViewDiffableDataSource(
|
||||||
|
for tableView: UITableView,
|
||||||
|
dependency: NeedsDependency,
|
||||||
|
managedObjectContext: NSManagedObjectContext
|
||||||
|
) -> UITableViewDiffableDataSource<UserSection, UserItem> {
|
||||||
|
UITableViewDiffableDataSource(tableView: tableView) { [
|
||||||
|
weak dependency
|
||||||
|
] tableView, indexPath, item -> UITableViewCell? in
|
||||||
|
guard let dependency = dependency else { return UITableViewCell() }
|
||||||
|
switch item {
|
||||||
|
case .follower(let objectID):
|
||||||
|
let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: UserTableViewCell.self), for: indexPath) as! UserTableViewCell
|
||||||
|
managedObjectContext.performAndWait {
|
||||||
|
let user = managedObjectContext.object(with: objectID) as! MastodonUser
|
||||||
|
configure(cell: cell, user: user)
|
||||||
|
}
|
||||||
|
return cell
|
||||||
|
case .bottomLoader:
|
||||||
|
let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: TimelineBottomLoaderTableViewCell.self), for: indexPath) as! TimelineBottomLoaderTableViewCell
|
||||||
|
cell.startAnimating()
|
||||||
|
return cell
|
||||||
|
case .bottomHeader(let text):
|
||||||
|
let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: TimelineFooterTableViewCell.self), for: indexPath) as! TimelineFooterTableViewCell
|
||||||
|
cell.messageLabel.text = text
|
||||||
|
return cell
|
||||||
|
} // end switch
|
||||||
|
} // end UITableViewDiffableDataSource
|
||||||
|
} // end static func tableViewDiffableDataSource { … }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
extension UserSection {
|
||||||
|
|
||||||
|
static func configure(
|
||||||
|
cell: UserTableViewCell,
|
||||||
|
user: MastodonUser
|
||||||
|
) {
|
||||||
|
cell.configure(user: user)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
//
|
||||||
|
// Instance.swift
|
||||||
|
// Mastodon
|
||||||
|
//
|
||||||
|
// Created by Cirno MainasuK on 2021-10-9.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
import CoreDataStack
|
||||||
|
import MastodonSDK
|
||||||
|
|
||||||
|
extension Instance {
|
||||||
|
var configuration: Mastodon.Entity.Instance.Configuration? {
|
||||||
|
guard let configurationRaw = configurationRaw else { return nil }
|
||||||
|
guard let configuration = try? JSONDecoder().decode(Mastodon.Entity.Instance.Configuration.self, from: configurationRaw) else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return configuration
|
||||||
|
}
|
||||||
|
|
||||||
|
static func encode(configuration: Mastodon.Entity.Instance.Configuration) -> Data? {
|
||||||
|
return try? JSONEncoder().encode(configuration)
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,9 +11,9 @@ import MastodonSDK
|
||||||
|
|
||||||
extension Setting {
|
extension Setting {
|
||||||
|
|
||||||
var appearance: SettingsItem.AppearanceMode {
|
// var appearance: SettingsItem.AppearanceMode {
|
||||||
return SettingsItem.AppearanceMode(rawValue: appearanceRaw) ?? .automatic
|
// return SettingsItem.AppearanceMode(rawValue: appearanceRaw) ?? .automatic
|
||||||
}
|
// }
|
||||||
|
|
||||||
var activeSubscription: Subscription? {
|
var activeSubscription: Subscription? {
|
||||||
return (subscriptions ?? Set())
|
return (subscriptions ?? Set())
|
||||||
|
|
|
@ -111,6 +111,24 @@ extension MetaLabel {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extension MetaLabel {
|
||||||
|
func configure(attributedString: NSAttributedString) {
|
||||||
|
let attributedString = NSMutableAttributedString(attributedString: attributedString)
|
||||||
|
|
||||||
|
MetaText.setAttributes(
|
||||||
|
for: attributedString,
|
||||||
|
textAttributes: textAttributes,
|
||||||
|
linkAttributes: linkAttributes,
|
||||||
|
paragraphStyle: paragraphStyle,
|
||||||
|
content: PlaintextMetaContent(string: "")
|
||||||
|
)
|
||||||
|
|
||||||
|
textStorage.setAttributedString(attributedString)
|
||||||
|
self.attributedText = attributedString
|
||||||
|
setNeedsDisplay()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct PlaintextMetaContent: MetaContent {
|
struct PlaintextMetaContent: MetaContent {
|
||||||
let string: String
|
let string: String
|
||||||
let entities: [Meta.Entity] = []
|
let entities: [Meta.Entity] = []
|
||||||
|
|
|
@ -1,24 +0,0 @@
|
||||||
//
|
|
||||||
// NSDiffableDataSourceSnapshot.swift
|
|
||||||
// Mastodon
|
|
||||||
//
|
|
||||||
// Created by Cirno MainasuK on 2021-6-19.
|
|
||||||
//
|
|
||||||
|
|
||||||
import UIKit
|
|
||||||
|
|
||||||
//extension NSDiffableDataSourceSnapshot {
|
|
||||||
// func itemIdentifier(for indexPath: IndexPath) -> ItemIdentifierType? {
|
|
||||||
// guard 0..<numberOfSections ~= indexPath.section else {
|
|
||||||
// return nil
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// let items = itemIdentifiers(inSection: sectionIdentifiers[indexPath.section])
|
|
||||||
//
|
|
||||||
// guard 0..<items.endIndex ~= indexPath.item else {
|
|
||||||
// return nil
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// return items[indexPath.item]
|
|
||||||
// }
|
|
||||||
//}
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
//
|
||||||
|
// UICollectionViewDiffableDataSource.swift
|
||||||
|
// Mastodon
|
||||||
|
//
|
||||||
|
// Created by Cirno MainasuK on 2021-10-11.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
// ref: https://www.jessesquires.com/blog/2021/07/08/diffable-data-source-behavior-changes-and-reconfiguring-cells-in-ios-15/
|
||||||
|
extension UICollectionViewDiffableDataSource {
|
||||||
|
func reloadData(
|
||||||
|
snapshot: NSDiffableDataSourceSnapshot<SectionIdentifierType, ItemIdentifierType>,
|
||||||
|
completion: (() -> Void)? = nil
|
||||||
|
) {
|
||||||
|
if #available(iOS 15.0, *) {
|
||||||
|
self.applySnapshotUsingReloadData(snapshot, completion: completion)
|
||||||
|
} else {
|
||||||
|
self.apply(snapshot, animatingDifferences: false, completion: completion)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func applySnapshot(
|
||||||
|
_ snapshot: NSDiffableDataSourceSnapshot<SectionIdentifierType, ItemIdentifierType>,
|
||||||
|
animated: Bool,
|
||||||
|
completion: (() -> Void)? = nil) {
|
||||||
|
|
||||||
|
if #available(iOS 15.0, *) {
|
||||||
|
self.apply(snapshot, animatingDifferences: animated, completion: completion)
|
||||||
|
} else {
|
||||||
|
if animated {
|
||||||
|
self.apply(snapshot, animatingDifferences: true, completion: completion)
|
||||||
|
} else {
|
||||||
|
UIView.performWithoutAnimation {
|
||||||
|
self.apply(snapshot, animatingDifferences: true, completion: completion)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
//
|
||||||
|
// UITableViewDiffableDataSource.swift
|
||||||
|
// Mastodon
|
||||||
|
//
|
||||||
|
// Created by Cirno MainasuK on 2021-10-11.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
// ref: https://www.jessesquires.com/blog/2021/07/08/diffable-data-source-behavior-changes-and-reconfiguring-cells-in-ios-15/
|
||||||
|
extension UITableViewDiffableDataSource {
|
||||||
|
func reloadData(
|
||||||
|
snapshot: NSDiffableDataSourceSnapshot<SectionIdentifierType, ItemIdentifierType>,
|
||||||
|
completion: (() -> Void)? = nil
|
||||||
|
) {
|
||||||
|
if #available(iOS 15.0, *) {
|
||||||
|
self.applySnapshotUsingReloadData(snapshot, completion: completion)
|
||||||
|
} else {
|
||||||
|
self.apply(snapshot, animatingDifferences: false, completion: completion)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func applySnapshot(
|
||||||
|
_ snapshot: NSDiffableDataSourceSnapshot<SectionIdentifierType, ItemIdentifierType>,
|
||||||
|
animated: Bool,
|
||||||
|
completion: (() -> Void)? = nil) {
|
||||||
|
|
||||||
|
if #available(iOS 15.0, *) {
|
||||||
|
self.apply(snapshot, animatingDifferences: animated, completion: completion)
|
||||||
|
} else {
|
||||||
|
if animated {
|
||||||
|
self.apply(snapshot, animatingDifferences: true, completion: completion)
|
||||||
|
} else {
|
||||||
|
UIView.performWithoutAnimation {
|
||||||
|
self.apply(snapshot, animatingDifferences: true, completion: completion)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -96,6 +96,9 @@ internal enum Asset {
|
||||||
internal static let usernameGray = ColorAsset(name: "Scene/Profile/Banner/username.gray")
|
internal static let usernameGray = ColorAsset(name: "Scene/Profile/Banner/username.gray")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
internal enum Sidebar {
|
||||||
|
internal static let logo = ImageAsset(name: "Scene/Sidebar/logo")
|
||||||
|
}
|
||||||
internal enum Welcome {
|
internal enum Welcome {
|
||||||
internal enum Illustration {
|
internal enum Illustration {
|
||||||
internal static let backgroundCyan = ColorAsset(name: "Scene/Welcome/illustration/background.cyan")
|
internal static let backgroundCyan = ColorAsset(name: "Scene/Welcome/illustration/background.cyan")
|
||||||
|
@ -160,23 +163,6 @@ internal enum Asset {
|
||||||
internal static let tabBarItemInactiveIconColor = ColorAsset(name: "Theme/system/tab.bar.item.inactive.icon.color")
|
internal static let tabBarItemInactiveIconColor = ColorAsset(name: "Theme/system/tab.bar.item.inactive.icon.color")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
internal enum Deprecated {
|
|
||||||
internal enum Background {
|
|
||||||
internal static let danger = ColorAsset(name: "_Deprecated/Background/danger")
|
|
||||||
internal static let onboardingBackground = ColorAsset(name: "_Deprecated/Background/onboarding.background")
|
|
||||||
internal static let secondaryGroupedSystemBackground = ColorAsset(name: "_Deprecated/Background/secondary.grouped.system.background")
|
|
||||||
internal static let secondarySystemBackground = ColorAsset(name: "_Deprecated/Background/secondary.system.background")
|
|
||||||
internal static let systemBackground = ColorAsset(name: "_Deprecated/Background/system.background")
|
|
||||||
internal static let systemElevatedBackground = ColorAsset(name: "_Deprecated/Background/system.elevated.background")
|
|
||||||
internal static let systemGroupedBackground = ColorAsset(name: "_Deprecated/Background/system.grouped.background")
|
|
||||||
internal static let tertiarySystemBackground = ColorAsset(name: "_Deprecated/Background/tertiary.system.background")
|
|
||||||
internal static let tertiarySystemGroupedBackground = ColorAsset(name: "_Deprecated/Background/tertiary.system.grouped.background")
|
|
||||||
}
|
|
||||||
internal enum Compose {
|
|
||||||
internal static let background = ColorAsset(name: "_Deprecated/Compose/background")
|
|
||||||
internal static let toolbarBackground = ColorAsset(name: "_Deprecated/Compose/toolbar.background")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// swiftlint:enable identifier_name line_length nesting type_body_length type_name
|
// swiftlint:enable identifier_name line_length nesting type_body_length type_name
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
</dict>
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>71</string>
|
<string>82</string>
|
||||||
<key>ITSAppUsesNonExemptEncryption</key>
|
<key>ITSAppUsesNonExemptEncryption</key>
|
||||||
<false/>
|
<false/>
|
||||||
<key>LSApplicationQueriesSchemes</key>
|
<key>LSApplicationQueriesSchemes</key>
|
||||||
|
@ -111,5 +111,7 @@
|
||||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||||
</array>
|
</array>
|
||||||
|
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||||
|
<true/>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
//
|
||||||
|
// UserProviderFacade+UITableViewDelegate.swift
|
||||||
|
// Mastodon
|
||||||
|
//
|
||||||
|
// Created by Cirno MainasuK on 2021-11-1.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Combine
|
||||||
|
import CoreDataStack
|
||||||
|
import MastodonSDK
|
||||||
|
import os.log
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
extension UserTableViewCellDelegate where Self: UserProvider {
|
||||||
|
|
||||||
|
func handleTableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
||||||
|
guard let cell = tableView.cellForRow(at: indexPath) else { return }
|
||||||
|
let user = self.mastodonUser(for: cell)
|
||||||
|
UserProviderFacade.coordinatorToUserProfileScene(provider: self, user: user)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -221,8 +221,6 @@ extension UserProviderFacade {
|
||||||
state: .off
|
state: .off
|
||||||
) { [weak provider, weak sourceView, weak barButtonItem] _ in
|
) { [weak provider, weak sourceView, weak barButtonItem] _ in
|
||||||
guard let provider = provider else { return }
|
guard let provider = provider else { return }
|
||||||
guard let sourceView = sourceView else { return }
|
|
||||||
guard let barButtonItem = barButtonItem else { return }
|
|
||||||
let activityViewController = createActivityViewControllerForMastodonUser(mastodonUser: shareUser, dependency: provider)
|
let activityViewController = createActivityViewControllerForMastodonUser(mastodonUser: shareUser, dependency: provider)
|
||||||
provider.coordinator.present(
|
provider.coordinator.present(
|
||||||
scene: .activityViewController(
|
scene: .activityViewController(
|
||||||
|
@ -247,8 +245,6 @@ extension UserProviderFacade {
|
||||||
state: .off
|
state: .off
|
||||||
) { [weak provider, weak sourceView, weak barButtonItem] _ in
|
) { [weak provider, weak sourceView, weak barButtonItem] _ in
|
||||||
guard let provider = provider else { return }
|
guard let provider = provider else { return }
|
||||||
guard let sourceView = sourceView else { return }
|
|
||||||
guard let barButtonItem = barButtonItem else { return }
|
|
||||||
let activityViewController = createActivityViewControllerForMastodonUser(status: shareStatus, dependency: provider)
|
let activityViewController = createActivityViewControllerForMastodonUser(status: shareStatus, dependency: provider)
|
||||||
provider.coordinator.present(
|
provider.coordinator.present(
|
||||||
scene: .activityViewController(
|
scene: .activityViewController(
|
||||||
|
@ -273,7 +269,6 @@ extension UserProviderFacade {
|
||||||
state: .off
|
state: .off
|
||||||
) { [weak provider, weak cell] _ in
|
) { [weak provider, weak cell] _ in
|
||||||
guard let provider = provider else { return }
|
guard let provider = provider else { return }
|
||||||
guard let cell = cell else { return }
|
|
||||||
|
|
||||||
UserProviderFacade.toggleUserMuteRelationship(
|
UserProviderFacade.toggleUserMuteRelationship(
|
||||||
provider: provider,
|
provider: provider,
|
||||||
|
@ -304,7 +299,6 @@ extension UserProviderFacade {
|
||||||
state: .off
|
state: .off
|
||||||
) { [weak provider, weak cell] _ in
|
) { [weak provider, weak cell] _ in
|
||||||
guard let provider = provider else { return }
|
guard let provider = provider else { return }
|
||||||
guard let cell = cell else { return }
|
|
||||||
|
|
||||||
UserProviderFacade.toggleUserBlockRelationship(
|
UserProviderFacade.toggleUserBlockRelationship(
|
||||||
provider: provider,
|
provider: provider,
|
||||||
|
@ -364,7 +358,6 @@ extension UserProviderFacade {
|
||||||
state: .off
|
state: .off
|
||||||
) { [weak provider, weak cell] _ in
|
) { [weak provider, weak cell] _ in
|
||||||
guard let provider = provider else { return }
|
guard let provider = provider else { return }
|
||||||
guard let cell = cell else { return }
|
|
||||||
provider.context.blockDomainService.unblockDomain(userProvider: provider, cell: cell)
|
provider.context.blockDomainService.unblockDomain(userProvider: provider, cell: cell)
|
||||||
}
|
}
|
||||||
children.append(unblockDomainAction)
|
children.append(unblockDomainAction)
|
||||||
|
@ -378,14 +371,12 @@ extension UserProviderFacade {
|
||||||
state: .off
|
state: .off
|
||||||
) { [weak provider, weak cell] _ in
|
) { [weak provider, weak cell] _ in
|
||||||
guard let provider = provider else { return }
|
guard let provider = provider else { return }
|
||||||
guard let cell = cell else { return }
|
|
||||||
|
|
||||||
let alertController = UIAlertController(title: L10n.Common.Alerts.BlockDomain.title(mastodonUser.domainFromAcct), message: nil, preferredStyle: .alert)
|
let alertController = UIAlertController(title: L10n.Common.Alerts.BlockDomain.title(mastodonUser.domainFromAcct), message: nil, preferredStyle: .alert)
|
||||||
let cancelAction = UIAlertAction(title: L10n.Common.Controls.Actions.cancel, style: .default) { _ in }
|
let cancelAction = UIAlertAction(title: L10n.Common.Controls.Actions.cancel, style: .default) { _ in }
|
||||||
alertController.addAction(cancelAction)
|
alertController.addAction(cancelAction)
|
||||||
let blockDomainAction = UIAlertAction(title: L10n.Common.Alerts.BlockDomain.blockEntireDomain, style: .destructive) { [weak provider, weak cell] _ in
|
let blockDomainAction = UIAlertAction(title: L10n.Common.Alerts.BlockDomain.blockEntireDomain, style: .destructive) { [weak provider, weak cell] _ in
|
||||||
guard let provider = provider else { return }
|
guard let provider = provider else { return }
|
||||||
guard let cell = cell else { return }
|
|
||||||
provider.context.blockDomainService.blockDomain(userProvider: provider, cell: cell)
|
provider.context.blockDomainService.blockDomain(userProvider: provider, cell: cell)
|
||||||
}
|
}
|
||||||
alertController.addAction(blockDomainAction)
|
alertController.addAction(blockDomainAction)
|
||||||
|
@ -449,3 +440,25 @@ extension UserProviderFacade {
|
||||||
return activityViewController
|
return activityViewController
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extension UserProviderFacade {
|
||||||
|
static func coordinatorToUserProfileScene(provider: UserProvider, user: Future<MastodonUser?, Never>) {
|
||||||
|
user
|
||||||
|
.sink { [weak provider] mastodonUser in
|
||||||
|
guard let provider = provider else { return }
|
||||||
|
guard let mastodonUser = mastodonUser else { return }
|
||||||
|
let profileViewModel = CachedProfileViewModel(context: provider.context, mastodonUser: mastodonUser)
|
||||||
|
DispatchQueue.main.async {
|
||||||
|
if provider.navigationController == nil {
|
||||||
|
let from = provider.presentingViewController ?? provider
|
||||||
|
provider.dismiss(animated: true) {
|
||||||
|
provider.coordinator.present(scene: .profile(viewModel: profileViewModel), from: from, transition: .show)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
provider.coordinator.present(scene: .profile(viewModel: profileViewModel), from: provider, transition: .show)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.store(in: &provider.disposeBag)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
15
Mastodon/Resources/Assets.xcassets/Scene/Sidebar/logo.imageset/Contents.json
vendored
Normal file
15
Mastodon/Resources/Assets.xcassets/Scene/Sidebar/logo.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "logo.pdf",
|
||||||
|
"idiom" : "universal"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
},
|
||||||
|
"properties" : {
|
||||||
|
"preserves-vector-representation" : true
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,108 @@
|
||||||
|
%PDF-1.7
|
||||||
|
|
||||||
|
1 0 obj
|
||||||
|
<< >>
|
||||||
|
endobj
|
||||||
|
|
||||||
|
2 0 obj
|
||||||
|
<< /Length 3 0 R >>
|
||||||
|
stream
|
||||||
|
/DeviceRGB CS
|
||||||
|
/DeviceRGB cs
|
||||||
|
q
|
||||||
|
1.000000 0.000000 -0.000000 1.000000 0.000000 -0.103455 cm
|
||||||
|
0.168627 0.564706 0.850980 scn
|
||||||
|
27.796436 10.091343 m
|
||||||
|
33.035133 10.719734 37.596470 13.962151 38.169762 16.924883 c
|
||||||
|
39.073063 21.591980 38.998501 28.314186 38.998501 28.314186 c
|
||||||
|
38.998501 37.425270 33.056084 40.095867 33.056084 40.095867 c
|
||||||
|
30.059872 41.478233 24.914881 42.059555 19.569633 42.103455 c
|
||||||
|
19.438305 42.103455 l
|
||||||
|
14.093056 42.059555 8.951445 41.478233 5.955006 40.095867 c
|
||||||
|
5.955006 40.095867 0.012361 37.425270 0.012361 28.314186 c
|
||||||
|
0.012361 27.761837 0.009520 27.180878 0.006561 26.576080 c
|
||||||
|
-0.001656 24.896429 -0.010772 23.032921 0.037591 21.087820 c
|
||||||
|
0.253392 12.177679 1.663759 3.396290 9.864657 1.215820 c
|
||||||
|
13.645910 0.210445 16.892391 0.000000 19.507011 0.144371 c
|
||||||
|
24.248556 0.408443 26.910255 1.844212 26.910255 1.844212 c
|
||||||
|
26.753922 5.300014 l
|
||||||
|
26.753922 5.300014 23.365528 4.226753 19.560173 4.357544 c
|
||||||
|
15.789957 4.487431 11.809797 4.765984 11.200012 9.415886 c
|
||||||
|
11.143697 9.824329 11.115539 10.261055 11.115539 10.719732 c
|
||||||
|
11.115539 10.719732 14.816599 9.810978 19.507011 9.595104 c
|
||||||
|
22.375050 9.462955 25.064680 9.763912 27.796436 10.091343 c
|
||||||
|
h
|
||||||
|
31.989010 16.575367 m
|
||||||
|
31.989010 27.607372 l
|
||||||
|
31.989010 29.862061 31.417519 31.653776 30.269808 32.979347 c
|
||||||
|
29.085829 34.304916 27.535576 34.984444 25.611385 34.984444 c
|
||||||
|
23.384670 34.984444 21.698582 34.124794 20.583984 32.405266 c
|
||||||
|
19.500023 30.580288 l
|
||||||
|
18.416286 32.405266 l
|
||||||
|
17.301464 34.124794 15.615376 34.984444 13.388884 34.984444 c
|
||||||
|
11.464469 34.984444 9.914215 34.304916 8.730462 32.979347 c
|
||||||
|
7.582527 31.653776 7.011036 29.862061 7.011036 27.607372 c
|
||||||
|
7.011036 16.575367 l
|
||||||
|
11.361976 16.575367 l
|
||||||
|
11.361976 27.283108 l
|
||||||
|
11.361976 29.540287 12.307401 30.685961 14.198477 30.685961 c
|
||||||
|
16.289360 30.685961 17.337505 29.326900 17.337505 26.639557 c
|
||||||
|
17.337505 20.778585 l
|
||||||
|
21.662764 20.778585 l
|
||||||
|
21.662764 26.639557 l
|
||||||
|
21.662764 29.326900 22.710684 30.685961 24.801567 30.685961 c
|
||||||
|
26.692642 30.685961 27.638069 29.540287 27.638069 27.283108 c
|
||||||
|
27.638069 16.575367 l
|
||||||
|
31.989010 16.575367 l
|
||||||
|
h
|
||||||
|
f*
|
||||||
|
n
|
||||||
|
Q
|
||||||
|
|
||||||
|
endstream
|
||||||
|
endobj
|
||||||
|
|
||||||
|
3 0 obj
|
||||||
|
2035
|
||||||
|
endobj
|
||||||
|
|
||||||
|
4 0 obj
|
||||||
|
<< /Annots []
|
||||||
|
/Type /Page
|
||||||
|
/MediaBox [ 0.000000 0.000000 39.000000 42.000000 ]
|
||||||
|
/Resources 1 0 R
|
||||||
|
/Contents 2 0 R
|
||||||
|
/Parent 5 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
|
||||||
|
5 0 obj
|
||||||
|
<< /Kids [ 4 0 R ]
|
||||||
|
/Count 1
|
||||||
|
/Type /Pages
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
|
||||||
|
6 0 obj
|
||||||
|
<< /Type /Catalog
|
||||||
|
/Pages 5 0 R
|
||||||
|
>>
|
||||||
|
endobj
|
||||||
|
|
||||||
|
xref
|
||||||
|
0 7
|
||||||
|
0000000000 65535 f
|
||||||
|
0000000010 00000 n
|
||||||
|
0000000034 00000 n
|
||||||
|
0000002125 00000 n
|
||||||
|
0000002148 00000 n
|
||||||
|
0000002321 00000 n
|
||||||
|
0000002395 00000 n
|
||||||
|
trailer
|
||||||
|
<< /ID [ (some) (id) ]
|
||||||
|
/Root 6 0 R
|
||||||
|
/Size 7
|
||||||
|
>>
|
||||||
|
startxref
|
||||||
|
2454
|
||||||
|
%%EOF
|
|
@ -5,9 +5,9 @@
|
||||||
"color-space" : "srgb",
|
"color-space" : "srgb",
|
||||||
"components" : {
|
"components" : {
|
||||||
"alpha" : "1.000",
|
"alpha" : "1.000",
|
||||||
"blue" : "0.549",
|
"blue" : "0x99",
|
||||||
"green" : "0.510",
|
"green" : "0x99",
|
||||||
"red" : "0.431"
|
"red" : "0x99"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"idiom" : "universal"
|
"idiom" : "universal"
|
||||||
|
@ -23,9 +23,9 @@
|
||||||
"color-space" : "srgb",
|
"color-space" : "srgb",
|
||||||
"components" : {
|
"components" : {
|
||||||
"alpha" : "1.000",
|
"alpha" : "1.000",
|
||||||
"blue" : "200",
|
"blue" : "0x99",
|
||||||
"green" : "174",
|
"green" : "0x99",
|
||||||
"red" : "155"
|
"red" : "0x99"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"idiom" : "universal"
|
"idiom" : "universal"
|
||||||
|
|
|
@ -23,9 +23,9 @@
|
||||||
"color-space" : "srgb",
|
"color-space" : "srgb",
|
||||||
"components" : {
|
"components" : {
|
||||||
"alpha" : "1.000",
|
"alpha" : "1.000",
|
||||||
"blue" : "46",
|
"blue" : "0x2E",
|
||||||
"green" : "44",
|
"green" : "0x2C",
|
||||||
"red" : "44"
|
"red" : "0x2C"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"idiom" : "universal"
|
"idiom" : "universal"
|
||||||
|
|
|
@ -23,9 +23,9 @@
|
||||||
"color-space" : "srgb",
|
"color-space" : "srgb",
|
||||||
"components" : {
|
"components" : {
|
||||||
"alpha" : "1.000",
|
"alpha" : "1.000",
|
||||||
"blue" : "0.263",
|
"blue" : "0x2E",
|
||||||
"green" : "0.208",
|
"green" : "0x2C",
|
||||||
"red" : "0.192"
|
"red" : "0x2C"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"idiom" : "universal"
|
"idiom" : "universal"
|
||||||
|
|
|
@ -5,9 +5,9 @@
|
||||||
"color-space" : "srgb",
|
"color-space" : "srgb",
|
||||||
"components" : {
|
"components" : {
|
||||||
"alpha" : "1.000",
|
"alpha" : "1.000",
|
||||||
"blue" : "0.549",
|
"blue" : "0x99",
|
||||||
"green" : "0.510",
|
"green" : "0x99",
|
||||||
"red" : "0.431"
|
"red" : "0x99"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"idiom" : "universal"
|
"idiom" : "universal"
|
||||||
|
@ -23,9 +23,9 @@
|
||||||
"color-space" : "srgb",
|
"color-space" : "srgb",
|
||||||
"components" : {
|
"components" : {
|
||||||
"alpha" : "1.000",
|
"alpha" : "1.000",
|
||||||
"blue" : "140",
|
"blue" : "0x99",
|
||||||
"green" : "130",
|
"green" : "0x99",
|
||||||
"red" : "110"
|
"red" : "0x99"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"idiom" : "universal"
|
"idiom" : "universal"
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
{
|
|
||||||
"colors" : [
|
|
||||||
{
|
|
||||||
"color" : {
|
|
||||||
"color-space" : "srgb",
|
|
||||||
"components" : {
|
|
||||||
"alpha" : "1.000",
|
|
||||||
"blue" : "0.353",
|
|
||||||
"green" : "0.251",
|
|
||||||
"red" : "0.875"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"idiom" : "universal"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"author" : "xcode",
|
|
||||||
"version" : 1
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,20 +0,0 @@
|
||||||
{
|
|
||||||
"colors" : [
|
|
||||||
{
|
|
||||||
"color" : {
|
|
||||||
"color-space" : "srgb",
|
|
||||||
"components" : {
|
|
||||||
"alpha" : "1.000",
|
|
||||||
"blue" : "0.910",
|
|
||||||
"green" : "0.882",
|
|
||||||
"red" : "0.851"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"idiom" : "universal"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"author" : "xcode",
|
|
||||||
"version" : 1
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,38 +0,0 @@
|
||||||
{
|
|
||||||
"colors" : [
|
|
||||||
{
|
|
||||||
"color" : {
|
|
||||||
"color-space" : "srgb",
|
|
||||||
"components" : {
|
|
||||||
"alpha" : "1.000",
|
|
||||||
"blue" : "0.996",
|
|
||||||
"green" : "1.000",
|
|
||||||
"red" : "0.996"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"idiom" : "universal"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"appearances" : [
|
|
||||||
{
|
|
||||||
"appearance" : "luminosity",
|
|
||||||
"value" : "dark"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"color" : {
|
|
||||||
"color-space" : "srgb",
|
|
||||||
"components" : {
|
|
||||||
"alpha" : "1.000",
|
|
||||||
"blue" : "0.263",
|
|
||||||
"green" : "0.208",
|
|
||||||
"red" : "0.192"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"idiom" : "universal"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"author" : "xcode",
|
|
||||||
"version" : 1
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,38 +0,0 @@
|
||||||
{
|
|
||||||
"colors" : [
|
|
||||||
{
|
|
||||||
"color" : {
|
|
||||||
"color-space" : "srgb",
|
|
||||||
"components" : {
|
|
||||||
"alpha" : "1.000",
|
|
||||||
"blue" : "0.910",
|
|
||||||
"green" : "0.882",
|
|
||||||
"red" : "0.851"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"idiom" : "universal"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"appearances" : [
|
|
||||||
{
|
|
||||||
"appearance" : "luminosity",
|
|
||||||
"value" : "dark"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"color" : {
|
|
||||||
"color-space" : "srgb",
|
|
||||||
"components" : {
|
|
||||||
"alpha" : "1.000",
|
|
||||||
"blue" : "0.133",
|
|
||||||
"green" : "0.106",
|
|
||||||
"red" : "0.098"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"idiom" : "universal"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"author" : "xcode",
|
|
||||||
"version" : 1
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,38 +0,0 @@
|
||||||
{
|
|
||||||
"colors" : [
|
|
||||||
{
|
|
||||||
"color" : {
|
|
||||||
"color-space" : "srgb",
|
|
||||||
"components" : {
|
|
||||||
"alpha" : "1.000",
|
|
||||||
"blue" : "0.996",
|
|
||||||
"green" : "1.000",
|
|
||||||
"red" : "0.996"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"idiom" : "universal"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"appearances" : [
|
|
||||||
{
|
|
||||||
"appearance" : "luminosity",
|
|
||||||
"value" : "dark"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"color" : {
|
|
||||||
"color-space" : "srgb",
|
|
||||||
"components" : {
|
|
||||||
"alpha" : "1.000",
|
|
||||||
"blue" : "0.216",
|
|
||||||
"green" : "0.173",
|
|
||||||
"red" : "0.157"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"idiom" : "universal"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"author" : "xcode",
|
|
||||||
"version" : 1
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,38 +0,0 @@
|
||||||
{
|
|
||||||
"colors" : [
|
|
||||||
{
|
|
||||||
"color" : {
|
|
||||||
"color-space" : "srgb",
|
|
||||||
"components" : {
|
|
||||||
"alpha" : "1.000",
|
|
||||||
"blue" : "1.000",
|
|
||||||
"green" : "1.000",
|
|
||||||
"red" : "1.000"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"idiom" : "universal"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"appearances" : [
|
|
||||||
{
|
|
||||||
"appearance" : "luminosity",
|
|
||||||
"value" : "dark"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"color" : {
|
|
||||||
"color-space" : "srgb",
|
|
||||||
"components" : {
|
|
||||||
"alpha" : "1.000",
|
|
||||||
"blue" : "0.216",
|
|
||||||
"green" : "0.173",
|
|
||||||
"red" : "0.157"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"idiom" : "universal"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"author" : "xcode",
|
|
||||||
"version" : 1
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,38 +0,0 @@
|
||||||
{
|
|
||||||
"colors" : [
|
|
||||||
{
|
|
||||||
"color" : {
|
|
||||||
"color-space" : "srgb",
|
|
||||||
"components" : {
|
|
||||||
"alpha" : "1.000",
|
|
||||||
"blue" : "0.910",
|
|
||||||
"green" : "0.882",
|
|
||||||
"red" : "0.851"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"idiom" : "universal"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"appearances" : [
|
|
||||||
{
|
|
||||||
"appearance" : "luminosity",
|
|
||||||
"value" : "dark"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"color" : {
|
|
||||||
"color-space" : "srgb",
|
|
||||||
"components" : {
|
|
||||||
"alpha" : "1.000",
|
|
||||||
"blue" : "0.133",
|
|
||||||
"green" : "0.106",
|
|
||||||
"red" : "0.098"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"idiom" : "universal"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"author" : "xcode",
|
|
||||||
"version" : 1
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,38 +0,0 @@
|
||||||
{
|
|
||||||
"colors" : [
|
|
||||||
{
|
|
||||||
"color" : {
|
|
||||||
"color-space" : "srgb",
|
|
||||||
"components" : {
|
|
||||||
"alpha" : "1.000",
|
|
||||||
"blue" : "0.996",
|
|
||||||
"green" : "1.000",
|
|
||||||
"red" : "0.996"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"idiom" : "universal"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"appearances" : [
|
|
||||||
{
|
|
||||||
"appearance" : "luminosity",
|
|
||||||
"value" : "dark"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"color" : {
|
|
||||||
"color-space" : "srgb",
|
|
||||||
"components" : {
|
|
||||||
"alpha" : "1.000",
|
|
||||||
"blue" : "0.216",
|
|
||||||
"green" : "0.173",
|
|
||||||
"red" : "0.157"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"idiom" : "universal"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"author" : "xcode",
|
|
||||||
"version" : 1
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,38 +0,0 @@
|
||||||
{
|
|
||||||
"colors" : [
|
|
||||||
{
|
|
||||||
"color" : {
|
|
||||||
"color-space" : "srgb",
|
|
||||||
"components" : {
|
|
||||||
"alpha" : "1.000",
|
|
||||||
"blue" : "0.910",
|
|
||||||
"green" : "0.882",
|
|
||||||
"red" : "0.851"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"idiom" : "universal"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"appearances" : [
|
|
||||||
{
|
|
||||||
"appearance" : "luminosity",
|
|
||||||
"value" : "dark"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"color" : {
|
|
||||||
"color-space" : "srgb",
|
|
||||||
"components" : {
|
|
||||||
"alpha" : "1.000",
|
|
||||||
"blue" : "0.263",
|
|
||||||
"green" : "0.208",
|
|
||||||
"red" : "0.192"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"idiom" : "universal"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"author" : "xcode",
|
|
||||||
"version" : 1
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
{
|
|
||||||
"info" : {
|
|
||||||
"author" : "xcode",
|
|
||||||
"version" : 1
|
|
||||||
},
|
|
||||||
"properties" : {
|
|
||||||
"provides-namespace" : true
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,38 +0,0 @@
|
||||||
{
|
|
||||||
"colors" : [
|
|
||||||
{
|
|
||||||
"color" : {
|
|
||||||
"color-space" : "srgb",
|
|
||||||
"components" : {
|
|
||||||
"alpha" : "1.000",
|
|
||||||
"blue" : "1.000",
|
|
||||||
"green" : "1.000",
|
|
||||||
"red" : "1.000"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"idiom" : "universal"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"appearances" : [
|
|
||||||
{
|
|
||||||
"appearance" : "luminosity",
|
|
||||||
"value" : "dark"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"color" : {
|
|
||||||
"color-space" : "srgb",
|
|
||||||
"components" : {
|
|
||||||
"alpha" : "1.000",
|
|
||||||
"blue" : "0.216",
|
|
||||||
"green" : "0.173",
|
|
||||||
"red" : "0.157"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"idiom" : "universal"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"author" : "xcode",
|
|
||||||
"version" : 1
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,38 +0,0 @@
|
||||||
{
|
|
||||||
"colors" : [
|
|
||||||
{
|
|
||||||
"color" : {
|
|
||||||
"color-space" : "srgb",
|
|
||||||
"components" : {
|
|
||||||
"alpha" : "1.000",
|
|
||||||
"blue" : "0.871",
|
|
||||||
"green" : "0.847",
|
|
||||||
"red" : "0.839"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"idiom" : "universal"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"appearances" : [
|
|
||||||
{
|
|
||||||
"appearance" : "luminosity",
|
|
||||||
"value" : "dark"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"color" : {
|
|
||||||
"color-space" : "srgb",
|
|
||||||
"components" : {
|
|
||||||
"alpha" : "0.920",
|
|
||||||
"blue" : "0.125",
|
|
||||||
"green" : "0.125",
|
|
||||||
"red" : "0.125"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"idiom" : "universal"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"author" : "xcode",
|
|
||||||
"version" : 1
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,9 +0,0 @@
|
||||||
{
|
|
||||||
"info" : {
|
|
||||||
"author" : "xcode",
|
|
||||||
"version" : 1
|
|
||||||
},
|
|
||||||
"properties" : {
|
|
||||||
"provides-namespace" : true
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,4 +1,4 @@
|
||||||
"NSCameraUsageDescription" = "Used to take photo for post status";
|
"NSCameraUsageDescription" = "يُستخدم لالتقاط الصورة عِندَ نشر الحالات";
|
||||||
"NSPhotoLibraryAddUsageDescription" = "Used to save photo into the Photo Library";
|
"NSPhotoLibraryAddUsageDescription" = "يُستخدم لحِفظ الصورة في مكتبة الصور";
|
||||||
"NewPostShortcutItemTitle" = "منشور جديد";
|
"NewPostShortcutItemTitle" = "منشور جديد";
|
||||||
"SearchShortcutItemTitle" = "البحث";
|
"SearchShortcutItemTitle" = "البحث";
|
|
@ -1,15 +1,15 @@
|
||||||
"Common.Alerts.BlockDomain.BlockEntireDomain" = "حظر النطاق";
|
"Common.Alerts.BlockDomain.BlockEntireDomain" = "حظر النطاق";
|
||||||
"Common.Alerts.BlockDomain.Title" = "Are you really, really sure you want to block the entire %@? 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.";
|
"Common.Alerts.BlockDomain.Title" = "Are you really, really sure you want to block the entire %@? 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.";
|
||||||
"Common.Alerts.CleanCache.Message" = "تم تنظيف ذاكرة التخزين المؤقت %@ بنجاح.";
|
"Common.Alerts.CleanCache.Message" = "تمَّ مَحو ذاكرة التخزين المؤقت %@ بنجاح.";
|
||||||
"Common.Alerts.CleanCache.Title" = "تنظيف ذاكرة التخزين المؤقت";
|
"Common.Alerts.CleanCache.Title" = "مَحو ذاكرة التخزين المؤقت";
|
||||||
"Common.Alerts.Common.PleaseTryAgain" = "الرجاء المحاولة مرة أخرى.";
|
"Common.Alerts.Common.PleaseTryAgain" = "يُرجى المحاولة مرة أُخرى.";
|
||||||
"Common.Alerts.Common.PleaseTryAgainLater" = "الرجاء المحاولة مرة أخرى لاحقاً.";
|
"Common.Alerts.Common.PleaseTryAgainLater" = "يُرجى المحاولة مرة أُخرى لاحقاً.";
|
||||||
"Common.Alerts.DeletePost.Delete" = "احذف";
|
"Common.Alerts.DeletePost.Delete" = "احذف";
|
||||||
"Common.Alerts.DeletePost.Title" = "هل أنت متأكد من أنك تريد حذف هذا المنشور؟";
|
"Common.Alerts.DeletePost.Title" = "هل أنت متأكد من أنك تريد حذف هذا المنشور؟";
|
||||||
"Common.Alerts.DiscardPostContent.Message" = "Confirm to discard composed post content.";
|
"Common.Alerts.DiscardPostContent.Message" = "Confirm to discard composed post content.";
|
||||||
"Common.Alerts.DiscardPostContent.Title" = "تجاهل المسودة";
|
"Common.Alerts.DiscardPostContent.Title" = "تجاهل المسودة";
|
||||||
"Common.Alerts.EditProfileFailure.Message" = "لا يمكن تعديل الملف الشخصي. الرجاء المحاولة مرة أخرى.";
|
"Common.Alerts.EditProfileFailure.Message" = "لا يمكن تعديل الملف الشخصي. يُرجى المحاولة مرة أُخرى.";
|
||||||
"Common.Alerts.EditProfileFailure.Title" = "Edit Profile Error";
|
"Common.Alerts.EditProfileFailure.Title" = "خطأ في تَحرير الملف الشخصي";
|
||||||
"Common.Alerts.PublishPostFailure.AttachmentsMessage.MoreThanOneVideo" = "Cannot attach more than one video.";
|
"Common.Alerts.PublishPostFailure.AttachmentsMessage.MoreThanOneVideo" = "Cannot attach more than one video.";
|
||||||
"Common.Alerts.PublishPostFailure.AttachmentsMessage.VideoAttachWithPhoto" = "Cannot attach a video to a post that already contains images.";
|
"Common.Alerts.PublishPostFailure.AttachmentsMessage.VideoAttachWithPhoto" = "Cannot attach a video to a post that already contains images.";
|
||||||
"Common.Alerts.PublishPostFailure.Message" = "Failed to publish the post.
|
"Common.Alerts.PublishPostFailure.Message" = "Failed to publish the post.
|
||||||
|
@ -33,7 +33,7 @@ Please check your internet connection.";
|
||||||
"Common.Controls.Actions.CopyPhoto" = "نسخ الصورة";
|
"Common.Controls.Actions.CopyPhoto" = "نسخ الصورة";
|
||||||
"Common.Controls.Actions.Delete" = "احذف";
|
"Common.Controls.Actions.Delete" = "احذف";
|
||||||
"Common.Controls.Actions.Discard" = "تجاهل";
|
"Common.Controls.Actions.Discard" = "تجاهل";
|
||||||
"Common.Controls.Actions.Done" = "تم";
|
"Common.Controls.Actions.Done" = "تمّ";
|
||||||
"Common.Controls.Actions.Edit" = "تعديل";
|
"Common.Controls.Actions.Edit" = "تعديل";
|
||||||
"Common.Controls.Actions.FindPeople" = "ابحث عن أشخاص لمتابعتهم";
|
"Common.Controls.Actions.FindPeople" = "ابحث عن أشخاص لمتابعتهم";
|
||||||
"Common.Controls.Actions.ManuallySearch" = "البحث يدوياً بدلاً من ذلك";
|
"Common.Controls.Actions.ManuallySearch" = "البحث يدوياً بدلاً من ذلك";
|
||||||
|
@ -53,11 +53,11 @@ Please check your internet connection.";
|
||||||
"Common.Controls.Actions.Share" = "شارك";
|
"Common.Controls.Actions.Share" = "شارك";
|
||||||
"Common.Controls.Actions.SharePost" = "شارك المنشور";
|
"Common.Controls.Actions.SharePost" = "شارك المنشور";
|
||||||
"Common.Controls.Actions.ShareUser" = "شارك %@";
|
"Common.Controls.Actions.ShareUser" = "شارك %@";
|
||||||
"Common.Controls.Actions.SignIn" = "لِج";
|
"Common.Controls.Actions.SignIn" = "تسجيل الدخول";
|
||||||
"Common.Controls.Actions.SignUp" = "انشئ حسابًا";
|
"Common.Controls.Actions.SignUp" = "إنشاء حِساب";
|
||||||
"Common.Controls.Actions.Skip" = "تخطي";
|
"Common.Controls.Actions.Skip" = "تخطي";
|
||||||
"Common.Controls.Actions.TakePhoto" = "التقط صورة";
|
"Common.Controls.Actions.TakePhoto" = "التقط صورة";
|
||||||
"Common.Controls.Actions.TryAgain" = "حاول مرة أخرى";
|
"Common.Controls.Actions.TryAgain" = "المُحاولة مرة أُخرى";
|
||||||
"Common.Controls.Actions.UnblockDomain" = "إلغاء حظر %@";
|
"Common.Controls.Actions.UnblockDomain" = "إلغاء حظر %@";
|
||||||
"Common.Controls.Friendship.Block" = "حظر";
|
"Common.Controls.Friendship.Block" = "حظر";
|
||||||
"Common.Controls.Friendship.BlockDomain" = "حظر %@";
|
"Common.Controls.Friendship.BlockDomain" = "حظر %@";
|
||||||
|
@ -69,8 +69,8 @@ Please check your internet connection.";
|
||||||
"Common.Controls.Friendship.Mute" = "أكتم";
|
"Common.Controls.Friendship.Mute" = "أكتم";
|
||||||
"Common.Controls.Friendship.MuteUser" = "أكتم %@";
|
"Common.Controls.Friendship.MuteUser" = "أكتم %@";
|
||||||
"Common.Controls.Friendship.Muted" = "مكتوم";
|
"Common.Controls.Friendship.Muted" = "مكتوم";
|
||||||
"Common.Controls.Friendship.Pending" = "Pending";
|
"Common.Controls.Friendship.Pending" = "قيد المُراجعة";
|
||||||
"Common.Controls.Friendship.Request" = "Request";
|
"Common.Controls.Friendship.Request" = "إرسال طَلَب";
|
||||||
"Common.Controls.Friendship.Unblock" = "إلغاء الحَظر";
|
"Common.Controls.Friendship.Unblock" = "إلغاء الحَظر";
|
||||||
"Common.Controls.Friendship.UnblockUser" = "إلغاء حظر %@";
|
"Common.Controls.Friendship.UnblockUser" = "إلغاء حظر %@";
|
||||||
"Common.Controls.Friendship.Unmute" = "إلغاء الكتم";
|
"Common.Controls.Friendship.Unmute" = "إلغاء الكتم";
|
||||||
|
@ -109,13 +109,13 @@ Please check your internet connection.";
|
||||||
"Common.Controls.Status.Tag.Link" = "الرابط";
|
"Common.Controls.Status.Tag.Link" = "الرابط";
|
||||||
"Common.Controls.Status.Tag.Mention" = "أشر إلى";
|
"Common.Controls.Status.Tag.Mention" = "أشر إلى";
|
||||||
"Common.Controls.Status.Tag.Url" = "عنوان URL";
|
"Common.Controls.Status.Tag.Url" = "عنوان URL";
|
||||||
"Common.Controls.Status.UserReblogged" = "%@ reblogged";
|
"Common.Controls.Status.UserReblogged" = "أعادَ %@ تدوينها";
|
||||||
"Common.Controls.Status.UserRepliedTo" = "رد على %@";
|
"Common.Controls.Status.UserRepliedTo" = "رد على %@";
|
||||||
"Common.Controls.Tabs.Home" = "الخيط الرئيسي";
|
"Common.Controls.Tabs.Home" = "الخيط الرئيسي";
|
||||||
"Common.Controls.Tabs.Notification" = "الإشعارات";
|
"Common.Controls.Tabs.Notification" = "الإشعارات";
|
||||||
"Common.Controls.Tabs.Profile" = "الملف التعريفي";
|
"Common.Controls.Tabs.Profile" = "الملف التعريفي";
|
||||||
"Common.Controls.Tabs.Search" = "بحث";
|
"Common.Controls.Tabs.Search" = "بحث";
|
||||||
"Common.Controls.Timeline.Filtered" = "Filtered";
|
"Common.Controls.Timeline.Filtered" = "مُصفَّى";
|
||||||
"Common.Controls.Timeline.Header.BlockedWarning" = "You can’t view this user’s profile
|
"Common.Controls.Timeline.Header.BlockedWarning" = "You can’t view this user’s profile
|
||||||
until they unblock you.";
|
until they unblock you.";
|
||||||
"Common.Controls.Timeline.Header.BlockingWarning" = "You can’t view this user's profile
|
"Common.Controls.Timeline.Header.BlockingWarning" = "You can’t view this user's profile
|
||||||
|
@ -129,14 +129,14 @@ until they unblock you.";
|
||||||
until you unblock them.
|
until you unblock them.
|
||||||
Your profile looks like this to them.";
|
Your profile looks like this to them.";
|
||||||
"Common.Controls.Timeline.Header.UserSuspendedWarning" = "%@’s account has been suspended.";
|
"Common.Controls.Timeline.Header.UserSuspendedWarning" = "%@’s account has been suspended.";
|
||||||
"Common.Controls.Timeline.Loader.LoadMissingPosts" = "Load missing posts";
|
"Common.Controls.Timeline.Loader.LoadMissingPosts" = "تحميل المنشورات المَفقودة";
|
||||||
"Common.Controls.Timeline.Loader.LoadingMissingPosts" = "تحميل المزيد من المنشورات...";
|
"Common.Controls.Timeline.Loader.LoadingMissingPosts" = "تحميل المزيد من المنشورات...";
|
||||||
"Common.Controls.Timeline.Loader.ShowMoreReplies" = "إظهار المزيد من الردود";
|
"Common.Controls.Timeline.Loader.ShowMoreReplies" = "إظهار المزيد من الردود";
|
||||||
"Common.Controls.Timeline.Timestamp.Now" = "الأن";
|
"Common.Controls.Timeline.Timestamp.Now" = "الأن";
|
||||||
"Scene.AccountList.AddAccount" = "Add Account";
|
"Scene.AccountList.AddAccount" = "إضافة حساب";
|
||||||
"Scene.AccountList.DismissAccountSwitcher" = "Dismiss Account Switcher";
|
"Scene.AccountList.DismissAccountSwitcher" = "تجاهُل مبدِّل الحساب";
|
||||||
"Scene.AccountList.TabBarHint" = "Current selected profile: %@. Double tap then hold to show account switcher";
|
"Scene.AccountList.TabBarHint" = "Current selected profile: %@. Double tap then hold to show account switcher";
|
||||||
"Scene.Compose.Accessibility.AppendAttachment" = "Add Attachment";
|
"Scene.Compose.Accessibility.AppendAttachment" = "إضافة مُرفَق";
|
||||||
"Scene.Compose.Accessibility.AppendPoll" = "اضافة استطلاع رأي";
|
"Scene.Compose.Accessibility.AppendPoll" = "اضافة استطلاع رأي";
|
||||||
"Scene.Compose.Accessibility.CustomEmojiPicker" = "منتقي مخصص للإيموجي";
|
"Scene.Compose.Accessibility.CustomEmojiPicker" = "منتقي مخصص للإيموجي";
|
||||||
"Scene.Compose.Accessibility.DisableContentWarning" = "تعطيل تحذير الحتوى";
|
"Scene.Compose.Accessibility.DisableContentWarning" = "تعطيل تحذير الحتوى";
|
||||||
|
@ -151,14 +151,14 @@ uploaded to Mastodon.";
|
||||||
"Scene.Compose.Attachment.Video" = "فيديو";
|
"Scene.Compose.Attachment.Video" = "فيديو";
|
||||||
"Scene.Compose.AutoComplete.SpaceToAdd" = "Space to add";
|
"Scene.Compose.AutoComplete.SpaceToAdd" = "Space to add";
|
||||||
"Scene.Compose.ComposeAction" = "انشر";
|
"Scene.Compose.ComposeAction" = "انشر";
|
||||||
"Scene.Compose.ContentInputPlaceholder" = "ما الذي يجول ببالك";
|
"Scene.Compose.ContentInputPlaceholder" = "أخبِرنا بِما يَجُولُ فِي ذِهنَك";
|
||||||
"Scene.Compose.ContentWarning.Placeholder" = "Write an accurate warning here...";
|
"Scene.Compose.ContentWarning.Placeholder" = "Write an accurate warning here...";
|
||||||
"Scene.Compose.Keyboard.AppendAttachmentEntry" = "Add Attachment - %@";
|
"Scene.Compose.Keyboard.AppendAttachmentEntry" = "إضافة مُرفَق - %@";
|
||||||
"Scene.Compose.Keyboard.DiscardPost" = "Discard Post";
|
"Scene.Compose.Keyboard.DiscardPost" = "تجاهُل المنشور";
|
||||||
"Scene.Compose.Keyboard.PublishPost" = "Publish Post";
|
"Scene.Compose.Keyboard.PublishPost" = "نَشر المَنشُور";
|
||||||
"Scene.Compose.Keyboard.SelectVisibilityEntry" = "اختر مدى الظهور - %@";
|
"Scene.Compose.Keyboard.SelectVisibilityEntry" = "اختر مدى الظهور - %@";
|
||||||
"Scene.Compose.Keyboard.ToggleContentWarning" = "Toggle Content Warning";
|
"Scene.Compose.Keyboard.ToggleContentWarning" = "تبديل تحذير المُحتوى";
|
||||||
"Scene.Compose.Keyboard.TogglePoll" = "Toggle Poll";
|
"Scene.Compose.Keyboard.TogglePoll" = "تبديل الاستطلاع";
|
||||||
"Scene.Compose.MediaSelection.Browse" = "تصفح";
|
"Scene.Compose.MediaSelection.Browse" = "تصفح";
|
||||||
"Scene.Compose.MediaSelection.Camera" = "التقط صورة";
|
"Scene.Compose.MediaSelection.Camera" = "التقط صورة";
|
||||||
"Scene.Compose.MediaSelection.PhotoLibrary" = "مكتبة الصور";
|
"Scene.Compose.MediaSelection.PhotoLibrary" = "مكتبة الصور";
|
||||||
|
@ -180,23 +180,23 @@ uploaded to Mastodon.";
|
||||||
"Scene.ConfirmEmail.Button.DontReceiveEmail" = "لم أستلم أبدًا بريدا إلكترونيا";
|
"Scene.ConfirmEmail.Button.DontReceiveEmail" = "لم أستلم أبدًا بريدا إلكترونيا";
|
||||||
"Scene.ConfirmEmail.Button.OpenEmailApp" = "افتح تطبيق البريد الإلكتروني";
|
"Scene.ConfirmEmail.Button.OpenEmailApp" = "افتح تطبيق البريد الإلكتروني";
|
||||||
"Scene.ConfirmEmail.DontReceiveEmail.Description" = "Check if your email address is correct as well as your junk folder if you haven’t.";
|
"Scene.ConfirmEmail.DontReceiveEmail.Description" = "Check if your email address is correct as well as your junk folder if you haven’t.";
|
||||||
"Scene.ConfirmEmail.DontReceiveEmail.ResendEmail" = "Resend Email";
|
"Scene.ConfirmEmail.DontReceiveEmail.ResendEmail" = "إعادة إرسال البريد الإلكتروني";
|
||||||
"Scene.ConfirmEmail.DontReceiveEmail.Title" = "تحقق من بريدك الإلكتروني";
|
"Scene.ConfirmEmail.DontReceiveEmail.Title" = "تحقق من بريدك الإلكتروني";
|
||||||
"Scene.ConfirmEmail.OpenEmailApp.Description" = "We just sent you an email. Check your junk folder if you haven’t.";
|
"Scene.ConfirmEmail.OpenEmailApp.Description" = "We just sent you an email. Check your junk folder if you haven’t.";
|
||||||
"Scene.ConfirmEmail.OpenEmailApp.Mail" = "البريد";
|
"Scene.ConfirmEmail.OpenEmailApp.Mail" = "البريد";
|
||||||
"Scene.ConfirmEmail.OpenEmailApp.OpenEmailClient" = "Open Email Client";
|
"Scene.ConfirmEmail.OpenEmailApp.OpenEmailClient" = "فتح عميل البريد الإلكتروني";
|
||||||
"Scene.ConfirmEmail.OpenEmailApp.Title" = "Check your inbox.";
|
"Scene.ConfirmEmail.OpenEmailApp.Title" = "تحقَّق من بريدك الوارِد.";
|
||||||
"Scene.ConfirmEmail.Subtitle" = "لقد أرسلنا للتو رسالة بريد إلكتروني إلى %@،
|
"Scene.ConfirmEmail.Subtitle" = "لقد أرسلنا للتو رسالة بريد إلكتروني إلى %@،
|
||||||
اضغط على الرابط لتأكيد حسابك.";
|
اضغط على الرابط لتأكيد حسابك.";
|
||||||
"Scene.ConfirmEmail.Title" = "شيء واحد أخير.";
|
"Scene.ConfirmEmail.Title" = "شيء واحد أخير.";
|
||||||
"Scene.Favorite.Title" = "مفضلتك";
|
"Scene.Favorite.Title" = "مفضلتك";
|
||||||
"Scene.HomeTimeline.NavigationBarState.NewPosts" = "See new posts";
|
"Scene.HomeTimeline.NavigationBarState.NewPosts" = "إظهار منشورات جديدة";
|
||||||
"Scene.HomeTimeline.NavigationBarState.Offline" = "غير متصل";
|
"Scene.HomeTimeline.NavigationBarState.Offline" = "غير متصل";
|
||||||
"Scene.HomeTimeline.NavigationBarState.Published" = "تم نشره!";
|
"Scene.HomeTimeline.NavigationBarState.Published" = "تم نشره!";
|
||||||
"Scene.HomeTimeline.NavigationBarState.Publishing" = "جارٍ نشر المشاركة…";
|
"Scene.HomeTimeline.NavigationBarState.Publishing" = "جارٍ نشر المشاركة…";
|
||||||
"Scene.HomeTimeline.Title" = "الخيط الرئيسي";
|
"Scene.HomeTimeline.Title" = "الخيط الرئيسي";
|
||||||
"Scene.Notification.Keyobard.ShowEverything" = "إظهار كل شيء";
|
"Scene.Notification.Keyobard.ShowEverything" = "إظهار كل شيء";
|
||||||
"Scene.Notification.Keyobard.ShowMentions" = "Show Mentions";
|
"Scene.Notification.Keyobard.ShowMentions" = "إظهار الإشارات";
|
||||||
"Scene.Notification.Title.Everything" = "الكل";
|
"Scene.Notification.Title.Everything" = "الكل";
|
||||||
"Scene.Notification.Title.Mentions" = "الإشارات";
|
"Scene.Notification.Title.Mentions" = "الإشارات";
|
||||||
"Scene.Notification.UserFavorited Your Post" = "أضاف %@ منشورك إلى مفضلته";
|
"Scene.Notification.UserFavorited Your Post" = "أضاف %@ منشورك إلى مفضلته";
|
||||||
|
@ -204,7 +204,7 @@ uploaded to Mastodon.";
|
||||||
"Scene.Notification.UserMentionedYou" = "أشار إليك %@";
|
"Scene.Notification.UserMentionedYou" = "أشار إليك %@";
|
||||||
"Scene.Notification.UserRebloggedYourPost" = "أعاد %@ تدوين مشاركتك";
|
"Scene.Notification.UserRebloggedYourPost" = "أعاد %@ تدوين مشاركتك";
|
||||||
"Scene.Notification.UserRequestedToFollowYou" = "طلب %@ متابعتك";
|
"Scene.Notification.UserRequestedToFollowYou" = "طلب %@ متابعتك";
|
||||||
"Scene.Notification.UserYourPollHasEnded" = "%@ Your poll has ended";
|
"Scene.Notification.UserYourPollHasEnded" = "%@ اِنتهى استطلاعُكَ للرأي";
|
||||||
"Scene.Preview.Keyboard.ClosePreview" = "إغلاق المعاينة";
|
"Scene.Preview.Keyboard.ClosePreview" = "إغلاق المعاينة";
|
||||||
"Scene.Preview.Keyboard.ShowNext" = "إظهار التالي";
|
"Scene.Preview.Keyboard.ShowNext" = "إظهار التالي";
|
||||||
"Scene.Preview.Keyboard.ShowPrevious" = "إظهار السابق";
|
"Scene.Preview.Keyboard.ShowPrevious" = "إظهار السابق";
|
||||||
|
@ -213,7 +213,7 @@ uploaded to Mastodon.";
|
||||||
"Scene.Profile.Dashboard.Posts" = "منشورات";
|
"Scene.Profile.Dashboard.Posts" = "منشورات";
|
||||||
"Scene.Profile.Fields.AddRow" = "إضافة صف";
|
"Scene.Profile.Fields.AddRow" = "إضافة صف";
|
||||||
"Scene.Profile.Fields.Placeholder.Content" = "المحتوى";
|
"Scene.Profile.Fields.Placeholder.Content" = "المحتوى";
|
||||||
"Scene.Profile.Fields.Placeholder.Label" = "Label";
|
"Scene.Profile.Fields.Placeholder.Label" = "التسمية";
|
||||||
"Scene.Profile.RelationshipActionAlert.ConfirmUnblockUsre.Message" = "Confirm to unblock %@";
|
"Scene.Profile.RelationshipActionAlert.ConfirmUnblockUsre.Message" = "Confirm to unblock %@";
|
||||||
"Scene.Profile.RelationshipActionAlert.ConfirmUnblockUsre.Title" = "إلغاء حظر الحساب";
|
"Scene.Profile.RelationshipActionAlert.ConfirmUnblockUsre.Title" = "إلغاء حظر الحساب";
|
||||||
"Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "Confirm to unmute %@";
|
"Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "Confirm to unmute %@";
|
||||||
|
@ -263,7 +263,7 @@ uploaded to Mastodon.";
|
||||||
"Scene.Search.Recommend.Accounts.Title" = "حسابات قد تعجبك";
|
"Scene.Search.Recommend.Accounts.Title" = "حسابات قد تعجبك";
|
||||||
"Scene.Search.Recommend.ButtonText" = "طالع الكل";
|
"Scene.Search.Recommend.ButtonText" = "طالع الكل";
|
||||||
"Scene.Search.Recommend.HashTag.Description" = "Hashtags that are getting quite a bit of attention";
|
"Scene.Search.Recommend.HashTag.Description" = "Hashtags that are getting quite a bit of attention";
|
||||||
"Scene.Search.Recommend.HashTag.PeopleTalking" = "%@ people are talking";
|
"Scene.Search.Recommend.HashTag.PeopleTalking" = "%@ أشخاص يتحدَّثوا";
|
||||||
"Scene.Search.Recommend.HashTag.Title" = "ذات شعبية على ماستدون";
|
"Scene.Search.Recommend.HashTag.Title" = "ذات شعبية على ماستدون";
|
||||||
"Scene.Search.SearchBar.Cancel" = "إلغاء";
|
"Scene.Search.SearchBar.Cancel" = "إلغاء";
|
||||||
"Scene.Search.SearchBar.Placeholder" = "البحث عن وسوم أو مستخدمين·ات";
|
"Scene.Search.SearchBar.Placeholder" = "البحث عن وسوم أو مستخدمين·ات";
|
||||||
|
@ -275,7 +275,7 @@ uploaded to Mastodon.";
|
||||||
"Scene.Search.Searching.Segment.People" = "الأشخاص";
|
"Scene.Search.Searching.Segment.People" = "الأشخاص";
|
||||||
"Scene.Search.Searching.Segment.Posts" = "المنشورات";
|
"Scene.Search.Searching.Segment.Posts" = "المنشورات";
|
||||||
"Scene.Search.Title" = "بحث";
|
"Scene.Search.Title" = "بحث";
|
||||||
"Scene.ServerPicker.Button.Category.Academia" = "academia";
|
"Scene.ServerPicker.Button.Category.Academia" = "أكاديمي";
|
||||||
"Scene.ServerPicker.Button.Category.Activism" = "للنشطاء";
|
"Scene.ServerPicker.Button.Category.Activism" = "للنشطاء";
|
||||||
"Scene.ServerPicker.Button.Category.All" = "الكل";
|
"Scene.ServerPicker.Button.Category.All" = "الكل";
|
||||||
"Scene.ServerPicker.Button.Category.AllAccessiblityDescription" = "الفئة: الكل";
|
"Scene.ServerPicker.Button.Category.AllAccessiblityDescription" = "الفئة: الكل";
|
||||||
|
@ -285,7 +285,7 @@ uploaded to Mastodon.";
|
||||||
"Scene.ServerPicker.Button.Category.Games" = "ألعاب";
|
"Scene.ServerPicker.Button.Category.Games" = "ألعاب";
|
||||||
"Scene.ServerPicker.Button.Category.General" = "عام";
|
"Scene.ServerPicker.Button.Category.General" = "عام";
|
||||||
"Scene.ServerPicker.Button.Category.Journalism" = "صحافة";
|
"Scene.ServerPicker.Button.Category.Journalism" = "صحافة";
|
||||||
"Scene.ServerPicker.Button.Category.Lgbt" = "lgbt";
|
"Scene.ServerPicker.Button.Category.Lgbt" = "مجتمع الشواذ";
|
||||||
"Scene.ServerPicker.Button.Category.Music" = "موسيقى";
|
"Scene.ServerPicker.Button.Category.Music" = "موسيقى";
|
||||||
"Scene.ServerPicker.Button.Category.Regional" = "اقليمي";
|
"Scene.ServerPicker.Button.Category.Regional" = "اقليمي";
|
||||||
"Scene.ServerPicker.Button.Category.Tech" = "تكنولوجيا";
|
"Scene.ServerPicker.Button.Category.Tech" = "تكنولوجيا";
|
||||||
|
@ -298,8 +298,8 @@ uploaded to Mastodon.";
|
||||||
"Scene.ServerPicker.Label.Category" = "الفئة";
|
"Scene.ServerPicker.Label.Category" = "الفئة";
|
||||||
"Scene.ServerPicker.Label.Language" = "اللغة";
|
"Scene.ServerPicker.Label.Language" = "اللغة";
|
||||||
"Scene.ServerPicker.Label.Users" = "مستخدمون·ات";
|
"Scene.ServerPicker.Label.Users" = "مستخدمون·ات";
|
||||||
"Scene.ServerPicker.Title" = "Pick a server,
|
"Scene.ServerPicker.Title" = "اِختر خادِم،
|
||||||
any server.";
|
أي خادِم.";
|
||||||
"Scene.ServerRules.Button.Confirm" = "انا أوافق";
|
"Scene.ServerRules.Button.Confirm" = "انا أوافق";
|
||||||
"Scene.ServerRules.PrivacyPolicy" = "سياسة الخصوصية";
|
"Scene.ServerRules.PrivacyPolicy" = "سياسة الخصوصية";
|
||||||
"Scene.ServerRules.Prompt" = "إن اخترت المواصلة، فإنك تخضع لشروط الخدمة وسياسة الخصوصية لـ %@.";
|
"Scene.ServerRules.Prompt" = "إن اخترت المواصلة، فإنك تخضع لشروط الخدمة وسياسة الخصوصية لـ %@.";
|
||||||
|
@ -309,38 +309,38 @@ any server.";
|
||||||
"Scene.Settings.Footer.MastodonDescription" = "ماستدون برنامج مفتوح المصدر. يمكنك المساهمة، أو الإبلاغ عن تقارير الأخطاء، على غيت هب %@ (%@)";
|
"Scene.Settings.Footer.MastodonDescription" = "ماستدون برنامج مفتوح المصدر. يمكنك المساهمة، أو الإبلاغ عن تقارير الأخطاء، على غيت هب %@ (%@)";
|
||||||
"Scene.Settings.Keyboard.CloseSettingsWindow" = "إغلاق نافذة الإعدادات";
|
"Scene.Settings.Keyboard.CloseSettingsWindow" = "إغلاق نافذة الإعدادات";
|
||||||
"Scene.Settings.Section.Appearance.Automatic" = "تلقائي";
|
"Scene.Settings.Section.Appearance.Automatic" = "تلقائي";
|
||||||
"Scene.Settings.Section.Appearance.Dark" = "Always Dark";
|
"Scene.Settings.Section.Appearance.Dark" = "مظلمٌ دائِمًا";
|
||||||
"Scene.Settings.Section.Appearance.Light" = "Always Light";
|
"Scene.Settings.Section.Appearance.Light" = "مضيءٌ دائمًا";
|
||||||
"Scene.Settings.Section.Appearance.Title" = "المظهر";
|
"Scene.Settings.Section.Appearance.Title" = "المظهر";
|
||||||
"Scene.Settings.Section.BoringZone.AccountSettings" = "إعدادات الحساب";
|
"Scene.Settings.Section.BoringZone.AccountSettings" = "إعدادات الحساب";
|
||||||
"Scene.Settings.Section.BoringZone.Privacy" = "سياسة الخصوصية";
|
"Scene.Settings.Section.BoringZone.Privacy" = "سياسة الخصوصية";
|
||||||
"Scene.Settings.Section.BoringZone.Terms" = "شروط الخدمة";
|
"Scene.Settings.Section.BoringZone.Terms" = "شروط الخدمة";
|
||||||
"Scene.Settings.Section.BoringZone.Title" = "المنطقة المملة";
|
"Scene.Settings.Section.BoringZone.Title" = "المنطقة المملة";
|
||||||
"Scene.Settings.Section.Notifications.Boosts" = "Reblogs my post";
|
"Scene.Settings.Section.Notifications.Boosts" = "إعادة تدوين منشوراتي";
|
||||||
"Scene.Settings.Section.Notifications.Favorites" = "Favorites my post";
|
"Scene.Settings.Section.Notifications.Favorites" = "الإعجاب بِمنشوراتي";
|
||||||
"Scene.Settings.Section.Notifications.Follows" = "يتابعني";
|
"Scene.Settings.Section.Notifications.Follows" = "يتابعني";
|
||||||
"Scene.Settings.Section.Notifications.Mentions" = "Mentions me";
|
"Scene.Settings.Section.Notifications.Mentions" = "الإشارة لي";
|
||||||
"Scene.Settings.Section.Notifications.Title" = "الإشعارات";
|
"Scene.Settings.Section.Notifications.Title" = "الإشعارات";
|
||||||
"Scene.Settings.Section.Notifications.Trigger.Anyone" = "anyone";
|
"Scene.Settings.Section.Notifications.Trigger.Anyone" = "أي شخص";
|
||||||
"Scene.Settings.Section.Notifications.Trigger.Follow" = "anyone I follow";
|
"Scene.Settings.Section.Notifications.Trigger.Follow" = "أي شخص أُتابِعُه";
|
||||||
"Scene.Settings.Section.Notifications.Trigger.Follower" = "مشترِك";
|
"Scene.Settings.Section.Notifications.Trigger.Follower" = "مشترِك";
|
||||||
"Scene.Settings.Section.Notifications.Trigger.Noone" = "no one";
|
"Scene.Settings.Section.Notifications.Trigger.Noone" = "لا أحد";
|
||||||
"Scene.Settings.Section.Notifications.Trigger.Title" = "Notify me when";
|
"Scene.Settings.Section.Notifications.Trigger.Title" = "إشعاري عِندَ";
|
||||||
"Scene.Settings.Section.Preference.DisableAvatarAnimation" = "Disable animated avatars";
|
"Scene.Settings.Section.Preference.DisableAvatarAnimation" = "تعطيل الصور الرمزية المتحرِّكة";
|
||||||
"Scene.Settings.Section.Preference.DisableEmojiAnimation" = "Disable animated emojis";
|
"Scene.Settings.Section.Preference.DisableEmojiAnimation" = "تعطيل الرموز التعبيرية المتحرِّكَة";
|
||||||
"Scene.Settings.Section.Preference.Title" = "التفضيلات";
|
"Scene.Settings.Section.Preference.Title" = "التفضيلات";
|
||||||
"Scene.Settings.Section.Preference.TrueBlackDarkMode" = "True black dark mode";
|
"Scene.Settings.Section.Preference.TrueBlackDarkMode" = "النمط الأسود الداكِن الحقيقي";
|
||||||
"Scene.Settings.Section.Preference.UsingDefaultBrowser" = "Use default browser to open links";
|
"Scene.Settings.Section.Preference.UsingDefaultBrowser" = "اِستخدام المتصفح الافتراضي لفتح الروابط";
|
||||||
"Scene.Settings.Section.SpicyZone.Clear" = "مسح ذاكرة التخزين المؤقت للوسائط";
|
"Scene.Settings.Section.SpicyZone.Clear" = "مسح ذاكرة التخزين المؤقت للوسائط";
|
||||||
"Scene.Settings.Section.SpicyZone.Signout" = "تسجيل الخروج";
|
"Scene.Settings.Section.SpicyZone.Signout" = "تسجيل الخروج";
|
||||||
"Scene.Settings.Section.SpicyZone.Title" = "المنطقة الحارة";
|
"Scene.Settings.Section.SpicyZone.Title" = "المنطقة الحارة";
|
||||||
"Scene.Settings.Title" = "الإعدادات";
|
"Scene.Settings.Title" = "الإعدادات";
|
||||||
"Scene.SuggestionAccount.FollowExplain" = "When you follow someone, you’ll see their posts in your home feed.";
|
"Scene.SuggestionAccount.FollowExplain" = "When you follow someone, you’ll see their posts in your home feed.";
|
||||||
"Scene.SuggestionAccount.Title" = "ابحث عن أشخاص لمتابعتهم";
|
"Scene.SuggestionAccount.Title" = "ابحث عن أشخاص لمتابعتهم";
|
||||||
"Scene.Thread.BackTitle" = "Post";
|
"Scene.Thread.BackTitle" = "منشور";
|
||||||
"Scene.Thread.Title" = "Post from %@";
|
"Scene.Thread.Title" = "مَنشور مِن %@";
|
||||||
"Scene.Welcome.Slogan" = "Social networking
|
"Scene.Welcome.Slogan" = "Social networking
|
||||||
back in your hands.";
|
back in your hands.";
|
||||||
"Scene.Wizard.AccessibilityHint" = "Double tap to dismiss this wizard";
|
"Scene.Wizard.AccessibilityHint" = "انقر نقرًا مزدوجًا لتجاهل النافذة المنبثقة";
|
||||||
"Scene.Wizard.MultipleAccountSwitchIntroDescription" = "Switch between multiple accounts by holding the profile button.";
|
"Scene.Wizard.MultipleAccountSwitchIntroDescription" = "Switch between multiple accounts by holding the profile button.";
|
||||||
"Scene.Wizard.NewInMastodon" = "New in Mastodon";
|
"Scene.Wizard.NewInMastodon" = "جديد في ماستودون";
|
|
@ -15,21 +15,21 @@
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld unread notification</string>
|
<string>%ld unread notification</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 unread notification</string>
|
<string>إشعار واحِد غير مقروء</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld unread notification</string>
|
<string>إشعاران غير مقروءان</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld unread notification</string>
|
<string>%ld unread notification</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld unread notification</string>
|
<string>%ld إشعارًا غيرَ مقروء</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld unread notification</string>
|
<string>%ld إشعار غير مقروء</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>a11y.plural.count.input_limit_exceeds</key>
|
<key>a11y.plural.count.input_limit_exceeds</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSStringLocalizedFormatKey</key>
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
<string>Input limit exceeds %#@character_count@</string>
|
<string>تمَّ تجاوز حدّ الإدخال %#@character_count@</string>
|
||||||
<key>character_count</key>
|
<key>character_count</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSStringFormatSpecTypeKey</key>
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
@ -37,23 +37,23 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld characters</string>
|
<string>لا حرف</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 character</string>
|
<string>حرفٌ واحِد</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld characters</string>
|
<string>حرفان اثنان</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld characters</string>
|
<string>%ld حُرُوف</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld characters</string>
|
<string>%ld حرفًا</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld characters</string>
|
<string>%ld حَرف</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>a11y.plural.count.input_limit_remains</key>
|
<key>a11y.plural.count.input_limit_remains</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSStringLocalizedFormatKey</key>
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
<string>Input limit remains %#@character_count@</string>
|
<string>يتبقَّى على حدّ الإدخال %#@character_count@</string>
|
||||||
<key>character_count</key>
|
<key>character_count</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSStringFormatSpecTypeKey</key>
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
@ -61,17 +61,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld characters</string>
|
<string>لا حرف</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 character</string>
|
<string>حرفٌ واحِد</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld characters</string>
|
<string>حرفان اثنان</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld characters</string>
|
<string>%ld حُرُوف</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld characters</string>
|
<string>%ld حرفًا</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld characters</string>
|
<string>%ld حَرف</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>plural.count.metric_formatted.post</key>
|
<key>plural.count.metric_formatted.post</key>
|
||||||
|
@ -85,17 +85,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>posts</string>
|
<string>لا منشور</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>post</string>
|
<string>منشور</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>posts</string>
|
<string>منشوران</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>posts</string>
|
<string>منشورات</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>posts</string>
|
<string>منشورًا</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>posts</string>
|
<string>منشور</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>plural.count.post</key>
|
<key>plural.count.post</key>
|
||||||
|
@ -109,17 +109,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld posts</string>
|
<string>لا منشور</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 post</string>
|
<string>منشورٌ واحِد</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld posts</string>
|
<string>منشورانِ اثنان</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld posts</string>
|
<string>%ld منشورات</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld posts</string>
|
<string>%ld منشورًا</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld posts</string>
|
<string>%ld منشور</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>plural.count.favorite</key>
|
<key>plural.count.favorite</key>
|
||||||
|
@ -133,17 +133,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld favorites</string>
|
<string>لا إعجاب</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 favorite</string>
|
<string>إعجابٌ واحِد</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld favorites</string>
|
<string>إعجابانِ اثنان</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld favorites</string>
|
<string>%ld إعجابات</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld favorites</string>
|
<string>%ld إعجابًا</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld favorites</string>
|
<string>%ld إعجاب</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>plural.count.reblog</key>
|
<key>plural.count.reblog</key>
|
||||||
|
@ -157,17 +157,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld reblogs</string>
|
<string>لا إعاد تدوين</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 reblog</string>
|
<string>إعادةُ تدوينٍ واحِدة</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld reblogs</string>
|
<string>إعادتا تدوين</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld reblogs</string>
|
<string>%ld إعاداتِ تدوين</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld reblogs</string>
|
<string>%ld إعادةٍ للتدوين</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld reblogs</string>
|
<string>%ld إعادة تدوين</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>plural.count.vote</key>
|
<key>plural.count.vote</key>
|
||||||
|
@ -181,17 +181,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld votes</string>
|
<string>لا صوت</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 vote</string>
|
<string>صوتٌ واحِد</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld votes</string>
|
<string>صوتانِ اثنان</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld votes</string>
|
<string>%ld أصوات</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld votes</string>
|
<string>%ld صوتًا</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld votes</string>
|
<string>%ld صوت</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>plural.count.voter</key>
|
<key>plural.count.voter</key>
|
||||||
|
@ -205,17 +205,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld voters</string>
|
<string>لا مُصوِّتون</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 voter</string>
|
<string>مُصوِّتٌ واحِد</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld voters</string>
|
<string>مُصوِّتانِ اثنان</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld voters</string>
|
<string>%ld مُصوِّتين</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld voters</string>
|
<string>%ld مُصوِّتًا</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld voters</string>
|
<string>%ld مُصوِّت</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>plural.people_talking</key>
|
<key>plural.people_talking</key>
|
||||||
|
@ -229,17 +229,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld people talking</string>
|
<string>لا أحَدَ يتحدَّث</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 people talking</string>
|
<string>شخصٌ واحدٌ يتحدَّث</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld people talking</string>
|
<string>شخصانِ اثنان يتحدَّثا</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld people talking</string>
|
<string>%ld أشخاصٍ يتحدَّثون</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld people talking</string>
|
<string>%ld شخصًا يتحدَّثون</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld people talking</string>
|
<string>%ld شخصٍ يتحدَّثون</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>plural.count.following</key>
|
<key>plural.count.following</key>
|
||||||
|
@ -253,17 +253,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld following</string>
|
<string>لا مُتابَع</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 following</string>
|
<string>مُتابَعٌ واحد</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld following</string>
|
<string>مُتابَعانِ</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld following</string>
|
<string>%ld مُتابَعين</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld following</string>
|
<string>%ld مُتابَعًا</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld following</string>
|
<string>%ld مُتابَع</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>plural.count.follower</key>
|
<key>plural.count.follower</key>
|
||||||
|
@ -279,15 +279,15 @@
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld followers</string>
|
<string>%ld followers</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 follower</string>
|
<string>مُتابِعٌ واحد</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld followers</string>
|
<string>مُتابِعانِ اثنان</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld followers</string>
|
<string>%ld مُتابِعين</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld followers</string>
|
<string>%ld مُتابِعًا</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld followers</string>
|
<string>%ld مُتابِع</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.year.left</key>
|
<key>date.year.left</key>
|
||||||
|
@ -301,17 +301,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld years left</string>
|
<string>تتبقى لَحظة</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 year left</string>
|
<string>تتبقى سنة</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld years left</string>
|
<string>تتبقى سنتين</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld years left</string>
|
<string>تتبقى %ld سنوات</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld years left</string>
|
<string>تتبقى %ld سنةً</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld years left</string>
|
<string>تتبقى %ld سنة</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.month.left</key>
|
<key>date.month.left</key>
|
||||||
|
@ -325,17 +325,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld months left</string>
|
<string>تتبقى لَحظة</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 months left</string>
|
<string>يتبقى شهر</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld months left</string>
|
<string>يتبقى شهرين</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld months left</string>
|
<string>يتبقى %ld أشهر</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld months left</string>
|
<string>يتبقى %ld شهرًا</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld months left</string>
|
<string>يتبقى %ld شهر</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.day.left</key>
|
<key>date.day.left</key>
|
||||||
|
@ -349,17 +349,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld days left</string>
|
<string>تتبقى لحظة</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 day left</string>
|
<string>يتبقى يوم</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld days left</string>
|
<string>يتبقى يومين</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld days left</string>
|
<string>يتبقى %ld أيام</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld days left</string>
|
<string>يتبقى %ld يومًا</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld days left</string>
|
<string>يتبقى %ld يوم</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.hour.left</key>
|
<key>date.hour.left</key>
|
||||||
|
@ -373,17 +373,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld hours left</string>
|
<string>تتبقى لَحظة</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 hour left</string>
|
<string>تتبقى ساعة</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld hours left</string>
|
<string>تتبقى ساعتين</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld hours left</string>
|
<string>تتبقى %ld ساعات</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld hours left</string>
|
<string>تتبقى %ld ساعةً</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld hours left</string>
|
<string>تتبقى %ld ساعة</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.minute.left</key>
|
<key>date.minute.left</key>
|
||||||
|
@ -397,17 +397,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld minutes left</string>
|
<string>تتبقى لَحظة</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 minute left</string>
|
<string>تتبقى دقيقة</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld minutes left</string>
|
<string>تتبقى دقيقتين</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld minutes left</string>
|
<string>تتبقى %ld دقائق</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld minutes left</string>
|
<string>تتبقى %ld دقيقةً</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld minutes left</string>
|
<string>تتبقى %ld دقيقة</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.second.left</key>
|
<key>date.second.left</key>
|
||||||
|
@ -421,17 +421,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ld seconds left</string>
|
<string>تتبقى لَحظة</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 second left</string>
|
<string>تتبقى ثانية</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld seconds left</string>
|
<string>تتبقى ثانيتين</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld seconds left</string>
|
<string>تتبقى %ld ثوان</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ld seconds left</string>
|
<string>تتبقى %ld ثانيةً</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld seconds left</string>
|
<string>تتبقى %ld ثانية</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.year.ago.abbr</key>
|
<key>date.year.ago.abbr</key>
|
||||||
|
@ -445,17 +445,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ldy ago</string>
|
<string>مُنذُ لَحظة</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1y ago</string>
|
<string>مُنذُ سنة</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ldy ago</string>
|
<string>مُنذُ سنتين</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ldy ago</string>
|
<string>مُنذُ %ld سنين</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ldy ago</string>
|
<string>مُنذُ %ld سنةً</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ldy ago</string>
|
<string>مُنذُ %ld سنة</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.month.ago.abbr</key>
|
<key>date.month.ago.abbr</key>
|
||||||
|
@ -469,17 +469,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ldM ago</string>
|
<string>مُنذُ لَحظة</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1M ago</string>
|
<string>مُنذُ شهر</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ldM ago</string>
|
<string>مُنذُ شهرين</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ldM ago</string>
|
<string>مُنذُ %ld أشهُر</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ldM ago</string>
|
<string>مُنذُ %ld شهرًا</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ldM ago</string>
|
<string>مُنذُ %ld شهر</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.day.ago.abbr</key>
|
<key>date.day.ago.abbr</key>
|
||||||
|
@ -493,17 +493,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ldd ago</string>
|
<string>مُنذُ لَحظة</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1d ago</string>
|
<string>مُنذُ يوم</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ldd ago</string>
|
<string>مُنذُ يومين</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ldd ago</string>
|
<string>مُنذُ %ld أيام</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ldd ago</string>
|
<string>مُنذُ %ld يومًا</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ldd ago</string>
|
<string>مُنذُ %ld يوم</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.hour.ago.abbr</key>
|
<key>date.hour.ago.abbr</key>
|
||||||
|
@ -517,17 +517,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ldh ago</string>
|
<string>مُنذُ لَحظة</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1h ago</string>
|
<string>مُنذُ ساعة</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ldh ago</string>
|
<string>مُنذُ ساعتين</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ldh ago</string>
|
<string>مُنذُ %ld ساعات</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ldh ago</string>
|
<string>مُنذُ %ld ساعةًَ</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ldh ago</string>
|
<string>مُنذُ %ld ساعة</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.minute.ago.abbr</key>
|
<key>date.minute.ago.abbr</key>
|
||||||
|
@ -541,17 +541,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%ldm ago</string>
|
<string>مُنذُ لَحظة</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1m ago</string>
|
<string>مُنذُ دقيقة</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ldm ago</string>
|
<string>مُنذُ دقيقتان</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ldm ago</string>
|
<string>مُنذُ %ld دقائق</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%ldm ago</string>
|
<string>مُنذُ %ld دقيقةً</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ldm ago</string>
|
<string>مُنذُ %ld دقيقة</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.second.ago.abbr</key>
|
<key>date.second.ago.abbr</key>
|
||||||
|
@ -565,17 +565,17 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>zero</key>
|
<key>zero</key>
|
||||||
<string>%lds ago</string>
|
<string>مُنذُ لَحظة</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1s ago</string>
|
<string>مُنذُ ثانية</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%lds ago</string>
|
<string>مُنذُ ثانيتين</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%lds ago</string>
|
<string>مُنذُ %ld ثوان</string>
|
||||||
<key>many</key>
|
<key>many</key>
|
||||||
<string>%lds ago</string>
|
<string>مُنذُ %ld ثانية</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%lds ago</string>
|
<string>مُنذُ %ld ثانية</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
<key>a11y.plural.count.input_limit_exceeds</key>
|
<key>a11y.plural.count.input_limit_exceeds</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSStringLocalizedFormatKey</key>
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
<string>El límit d’entrada supera a %#@character_count@</string>
|
<string>El límit de la entrada supera a %#@character_count@</string>
|
||||||
<key>character_count</key>
|
<key>character_count</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSStringFormatSpecTypeKey</key>
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
@ -37,7 +37,7 @@
|
||||||
<key>a11y.plural.count.input_limit_remains</key>
|
<key>a11y.plural.count.input_limit_remains</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSStringLocalizedFormatKey</key>
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
<string>El límit d’entrada continua sent %#@character_count@</string>
|
<string>El límit de la entrada continua sent %#@character_count@</string>
|
||||||
<key>character_count</key>
|
<key>character_count</key>
|
||||||
<dict>
|
<dict>
|
||||||
<key>NSStringFormatSpecTypeKey</key>
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
@ -111,7 +111,7 @@
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 impuls</string>
|
<string>1 impuls</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld impuls</string>
|
<string>%ld impulsos</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>plural.count.vote</key>
|
<key>plural.count.vote</key>
|
||||||
|
@ -301,9 +301,9 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>fa 1a</string>
|
<string>fa 1 any</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>fa %ldy anys</string>
|
<string>fa %ld anys</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.month.ago.abbr</key>
|
<key>date.month.ago.abbr</key>
|
||||||
|
@ -317,9 +317,9 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>fa 1M</string>
|
<string>fa 1 mes</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>fa %ldM mesos</string>
|
<string>fa %ld mesos</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.day.ago.abbr</key>
|
<key>date.day.ago.abbr</key>
|
||||||
|
@ -333,9 +333,9 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>fa 1d</string>
|
<string>fa 1 día</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>fa %ldd dies</string>
|
<string>fa %ld dies</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.hour.ago.abbr</key>
|
<key>date.hour.ago.abbr</key>
|
||||||
|
@ -351,7 +351,7 @@
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>fa 1h</string>
|
<string>fa 1h</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>fa %ldh hores</string>
|
<string>fa %ld hores</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.minute.ago.abbr</key>
|
<key>date.minute.ago.abbr</key>
|
||||||
|
@ -365,9 +365,9 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>fa 1m</string>
|
<string>fa 1 minut</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>fa %ldm minuts</string>
|
<string>fa %ld minuts</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.second.ago.abbr</key>
|
<key>date.second.ago.abbr</key>
|
||||||
|
@ -381,9 +381,9 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>fa 1s</string>
|
<string>fa 1 segon</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>fa %lds seg</string>
|
<string>fa %ld segons</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
|
|
|
@ -133,9 +133,9 @@ Dein Profil sieht für diesen Benutzer auch so aus.";
|
||||||
"Common.Controls.Timeline.Loader.LoadingMissingPosts" = "Lade fehlende Beiträge...";
|
"Common.Controls.Timeline.Loader.LoadingMissingPosts" = "Lade fehlende Beiträge...";
|
||||||
"Common.Controls.Timeline.Loader.ShowMoreReplies" = "Weitere Antworten anzeigen";
|
"Common.Controls.Timeline.Loader.ShowMoreReplies" = "Weitere Antworten anzeigen";
|
||||||
"Common.Controls.Timeline.Timestamp.Now" = "Gerade";
|
"Common.Controls.Timeline.Timestamp.Now" = "Gerade";
|
||||||
"Scene.AccountList.AddAccount" = "Add Account";
|
"Scene.AccountList.AddAccount" = "Konto hinzufügen";
|
||||||
"Scene.AccountList.DismissAccountSwitcher" = "Dismiss Account Switcher";
|
"Scene.AccountList.DismissAccountSwitcher" = "Dismiss Account Switcher";
|
||||||
"Scene.AccountList.TabBarHint" = "Current selected profile: %@. Double tap then hold to show account switcher";
|
"Scene.AccountList.TabBarHint" = "Aktuell ausgewähltes Profil: %@. Doppeltippen dann gedrückt halten, um den Kontoschalter anzuzeigen";
|
||||||
"Scene.Compose.Accessibility.AppendAttachment" = "Anhang hinzufügen";
|
"Scene.Compose.Accessibility.AppendAttachment" = "Anhang hinzufügen";
|
||||||
"Scene.Compose.Accessibility.AppendPoll" = "Umfrage hinzufügen";
|
"Scene.Compose.Accessibility.AppendPoll" = "Umfrage hinzufügen";
|
||||||
"Scene.Compose.Accessibility.CustomEmojiPicker" = "Benutzerdefinierter Emojiwähler";
|
"Scene.Compose.Accessibility.CustomEmojiPicker" = "Benutzerdefinierter Emojiwähler";
|
||||||
|
@ -340,6 +340,6 @@ beliebigen Server.";
|
||||||
"Scene.Thread.BackTitle" = "Beitrag";
|
"Scene.Thread.BackTitle" = "Beitrag";
|
||||||
"Scene.Thread.Title" = "Beitrag von %@";
|
"Scene.Thread.Title" = "Beitrag von %@";
|
||||||
"Scene.Welcome.Slogan" = "Soziale Netzwerke wieder in deinen Händen.";
|
"Scene.Welcome.Slogan" = "Soziale Netzwerke wieder in deinen Händen.";
|
||||||
"Scene.Wizard.AccessibilityHint" = "Double tap to dismiss this wizard";
|
"Scene.Wizard.AccessibilityHint" = "Doppeltippen, um diesen Assistenten zu schließen";
|
||||||
"Scene.Wizard.MultipleAccountSwitchIntroDescription" = "Switch between multiple accounts by holding the profile button.";
|
"Scene.Wizard.MultipleAccountSwitchIntroDescription" = "Wechsel zwischen mehreren Konten durch drücken der Profil-Schaltfläche.";
|
||||||
"Scene.Wizard.NewInMastodon" = "New in Mastodon";
|
"Scene.Wizard.NewInMastodon" = "Neu in Mastodon";
|
|
@ -13,9 +13,9 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 unread notification</string>
|
<string>1 ungelesene Benachrichtigung</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld unread notification</string>
|
<string>%ld ungelesene Benachrichtigungen</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>a11y.plural.count.input_limit_exceeds</key>
|
<key>a11y.plural.count.input_limit_exceeds</key>
|
||||||
|
|
|
@ -133,9 +133,9 @@ Seo an coltas a th’ air a’ phròifil agad dhaibh-san.";
|
||||||
"Common.Controls.Timeline.Loader.LoadingMissingPosts" = "A’ luchdadh nam post a tha a dhìth…";
|
"Common.Controls.Timeline.Loader.LoadingMissingPosts" = "A’ luchdadh nam post a tha a dhìth…";
|
||||||
"Common.Controls.Timeline.Loader.ShowMoreReplies" = "Seall barrachd freagairtean";
|
"Common.Controls.Timeline.Loader.ShowMoreReplies" = "Seall barrachd freagairtean";
|
||||||
"Common.Controls.Timeline.Timestamp.Now" = "An-dràsta";
|
"Common.Controls.Timeline.Timestamp.Now" = "An-dràsta";
|
||||||
"Scene.AccountList.AddAccount" = "Add Account";
|
"Scene.AccountList.AddAccount" = "Cuir cunntas ris";
|
||||||
"Scene.AccountList.DismissAccountSwitcher" = "Dismiss Account Switcher";
|
"Scene.AccountList.DismissAccountSwitcher" = "Leig seachad taghadh a’ chunntais";
|
||||||
"Scene.AccountList.TabBarHint" = "Current selected profile: %@. Double tap then hold to show account switcher";
|
"Scene.AccountList.TabBarHint" = "A’ phròifil air a taghadh: %@. Thoir gnogag dhùbailte is cùm sìos a ghearradh leum gu cunntas eile";
|
||||||
"Scene.Compose.Accessibility.AppendAttachment" = "Cuir ceanglachan ris";
|
"Scene.Compose.Accessibility.AppendAttachment" = "Cuir ceanglachan ris";
|
||||||
"Scene.Compose.Accessibility.AppendPoll" = "Cuir cunntas-bheachd ris";
|
"Scene.Compose.Accessibility.AppendPoll" = "Cuir cunntas-bheachd ris";
|
||||||
"Scene.Compose.Accessibility.CustomEmojiPicker" = "Roghnaichear nan Emoji gnàthaichte";
|
"Scene.Compose.Accessibility.CustomEmojiPicker" = "Roghnaichear nan Emoji gnàthaichte";
|
||||||
|
@ -340,6 +340,6 @@ thoir gnogag air a’ chunntas a dhearbhadh a’ chunntais agad.";
|
||||||
"Scene.Thread.Title" = "Post le %@";
|
"Scene.Thread.Title" = "Post le %@";
|
||||||
"Scene.Welcome.Slogan" = "A’ cur nan lìonraidhean sòisealta
|
"Scene.Welcome.Slogan" = "A’ cur nan lìonraidhean sòisealta
|
||||||
’nad làmhan fhèin.";
|
’nad làmhan fhèin.";
|
||||||
"Scene.Wizard.AccessibilityHint" = "Double tap to dismiss this wizard";
|
"Scene.Wizard.AccessibilityHint" = "Thoir gnogag dhùbailte a’ leigeil seachad an draoidh seo";
|
||||||
"Scene.Wizard.MultipleAccountSwitchIntroDescription" = "Switch between multiple accounts by holding the profile button.";
|
"Scene.Wizard.MultipleAccountSwitchIntroDescription" = "Geàrr leum eadar iomadh cunntas le cumail sìos putan na pròifil.";
|
||||||
"Scene.Wizard.NewInMastodon" = "New in Mastodon";
|
"Scene.Wizard.NewInMastodon" = "Na tha ùr ann am Mastodon";
|
|
@ -13,13 +13,13 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>one</key>
|
<key>one</key>
|
||||||
<string>1 unread notification</string>
|
<string>%ld bhrath nach deach a leughadh</string>
|
||||||
<key>two</key>
|
<key>two</key>
|
||||||
<string>%ld unread notification</string>
|
<string>%ld bhrath nach deach a leughadh</string>
|
||||||
<key>few</key>
|
<key>few</key>
|
||||||
<string>%ld unread notification</string>
|
<string>%ld brathan nach deach a leughadh</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld unread notification</string>
|
<string>%ld brath nach deach a leughadh</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>a11y.plural.count.input_limit_exceeds</key>
|
<key>a11y.plural.count.input_limit_exceeds</key>
|
||||||
|
|
|
@ -129,7 +129,7 @@
|
||||||
"Common.Controls.Timeline.Loader.LoadingMissingPosts" = "読込中...";
|
"Common.Controls.Timeline.Loader.LoadingMissingPosts" = "読込中...";
|
||||||
"Common.Controls.Timeline.Loader.ShowMoreReplies" = "リプライをもっとみる";
|
"Common.Controls.Timeline.Loader.ShowMoreReplies" = "リプライをもっとみる";
|
||||||
"Common.Controls.Timeline.Timestamp.Now" = "今";
|
"Common.Controls.Timeline.Timestamp.Now" = "今";
|
||||||
"Scene.AccountList.AddAccount" = "Add Account";
|
"Scene.AccountList.AddAccount" = "アカウントを追加";
|
||||||
"Scene.AccountList.DismissAccountSwitcher" = "Dismiss Account Switcher";
|
"Scene.AccountList.DismissAccountSwitcher" = "Dismiss Account Switcher";
|
||||||
"Scene.AccountList.TabBarHint" = "Current selected profile: %@. Double tap then hold to show account switcher";
|
"Scene.AccountList.TabBarHint" = "Current selected profile: %@. Double tap then hold to show account switcher";
|
||||||
"Scene.Compose.Accessibility.AppendAttachment" = "アタッチメントの追加";
|
"Scene.Compose.Accessibility.AppendAttachment" = "アタッチメントの追加";
|
||||||
|
@ -332,8 +332,7 @@
|
||||||
"Scene.SuggestionAccount.Title" = "フォローする人を探す";
|
"Scene.SuggestionAccount.Title" = "フォローする人を探す";
|
||||||
"Scene.Thread.BackTitle" = "投稿";
|
"Scene.Thread.BackTitle" = "投稿";
|
||||||
"Scene.Thread.Title" = "%@の投稿";
|
"Scene.Thread.Title" = "%@の投稿";
|
||||||
"Scene.Welcome.Slogan" = "Social networking
|
"Scene.Welcome.Slogan" = "ソーシャルネットワーキングを、あなたの手の中に.";
|
||||||
back in your hands.";
|
|
||||||
"Scene.Wizard.AccessibilityHint" = "Double tap to dismiss this wizard";
|
"Scene.Wizard.AccessibilityHint" = "Double tap to dismiss this wizard";
|
||||||
"Scene.Wizard.MultipleAccountSwitchIntroDescription" = "Switch between multiple accounts by holding the profile button.";
|
"Scene.Wizard.MultipleAccountSwitchIntroDescription" = "プロフィールボタンを押して複数のアカウントを切り替えます。";
|
||||||
"Scene.Wizard.NewInMastodon" = "New in Mastodon";
|
"Scene.Wizard.NewInMastodon" = "Mastodon の新機能";
|
|
@ -13,7 +13,7 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld unread notification</string>
|
<string>%ld 件の未読通知</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>a11y.plural.count.input_limit_exceeds</key>
|
<key>a11y.plural.count.input_limit_exceeds</key>
|
||||||
|
@ -27,7 +27,7 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld characters</string>
|
<string>%ld 文字</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>a11y.plural.count.input_limit_remains</key>
|
<key>a11y.plural.count.input_limit_remains</key>
|
||||||
|
@ -41,7 +41,7 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld characters</string>
|
<string>%ld 文字</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>plural.count.metric_formatted.post</key>
|
<key>plural.count.metric_formatted.post</key>
|
||||||
|
@ -111,7 +111,7 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld votes</string>
|
<string>%ld票</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>plural.count.voter</key>
|
<key>plural.count.voter</key>
|
||||||
|
@ -195,7 +195,7 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld months left</string>
|
<string>%ldか月前</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.day.left</key>
|
<key>date.day.left</key>
|
||||||
|
@ -279,7 +279,7 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ldM ago</string>
|
<string>%ld分前</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>date.day.ago.abbr</key>
|
<key>date.day.ago.abbr</key>
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
"NSCameraUsageDescription" = "Bo kişandina wêneyê ji bo rewşa şandiyan tê bikaranîn";
|
||||||
|
"NSPhotoLibraryAddUsageDescription" = "Ji bo tomarkirina wêneyê di pirtûkxaneya wêneyan de tê bikaranîn";
|
||||||
|
"NewPostShortcutItemTitle" = "Şandiya nû";
|
||||||
|
"SearchShortcutItemTitle" = "Bigere";
|
|
@ -0,0 +1,346 @@
|
||||||
|
"Common.Alerts.BlockDomain.BlockEntireDomain" = "Navperê asteng bike";
|
||||||
|
"Common.Alerts.BlockDomain.Title" = "Tu ji xwe bawerî, bi rastî tu dixwazî hemû %@ asteng bikî? Di gelek rewşan de asteng kirin an jî bêdeng kirin têrê dike û tê tercîh kirin. Tu nikarî naveroka vê navperê di demnameyê an jî agahdariyên xwe de bibînî. Şopînerên te yê di vê navperê were jêbirin.";
|
||||||
|
"Common.Alerts.CleanCache.Message" = "Pêşbîra %@ biserketî hate paqijkirin.";
|
||||||
|
"Common.Alerts.CleanCache.Title" = "Pêşbîrê paqij bike";
|
||||||
|
"Common.Alerts.Common.PleaseTryAgain" = "Ji kerema xwe dîsa biceribîne.";
|
||||||
|
"Common.Alerts.Common.PleaseTryAgainLater" = "Ji kerema xwe paşê dîsa biceribîne.";
|
||||||
|
"Common.Alerts.DeletePost.Delete" = "Jê bibe";
|
||||||
|
"Common.Alerts.DeletePost.Title" = "Ma tu dixwazî vê şandiyê jê bibî?";
|
||||||
|
"Common.Alerts.DiscardPostContent.Message" = "Piştrast bikin ku naveroka posteyê ya hatîye nivîsandin jê bibin.";
|
||||||
|
"Common.Alerts.DiscardPostContent.Title" = "Reşnivîs jêbibe";
|
||||||
|
"Common.Alerts.EditProfileFailure.Message" = "Nikare profîlê serrast bike. Jkx dîsa biceribîne.";
|
||||||
|
"Common.Alerts.EditProfileFailure.Title" = "Çewtiya profîlê biguherîne";
|
||||||
|
"Common.Alerts.PublishPostFailure.AttachmentsMessage.MoreThanOneVideo" = "Nikare ji bêtirî yek vîdyoyekê tevlî şandiyê bike.";
|
||||||
|
"Common.Alerts.PublishPostFailure.AttachmentsMessage.VideoAttachWithPhoto" = "Nikare vîdyoyekê tevlî şandiyê ku berê wêne tê de heye bike.";
|
||||||
|
"Common.Alerts.PublishPostFailure.Message" = "Weşandina şandiyê têkçû.
|
||||||
|
Jkx girêdana înternetê xwe kontrol bike.";
|
||||||
|
"Common.Alerts.PublishPostFailure.Title" = "Weşandin têkçû";
|
||||||
|
"Common.Alerts.SavePhotoFailure.Message" = "Ji kerema xwe destûra gihîştina pirtûkxaneya wêneyê çalak bikin da ku wêneyê hilînin.";
|
||||||
|
"Common.Alerts.SavePhotoFailure.Title" = "Tomarkirina wêneyê têkçû";
|
||||||
|
"Common.Alerts.ServerError.Title" = "Çewtiya rajekar";
|
||||||
|
"Common.Alerts.SignOut.Confirm" = "Derkeve";
|
||||||
|
"Common.Alerts.SignOut.Message" = "Ma tu dixwazî ku derkevî?";
|
||||||
|
"Common.Alerts.SignOut.Title" = "Derkeve";
|
||||||
|
"Common.Alerts.SignUpFailure.Title" = "Tomarkirin têkçû";
|
||||||
|
"Common.Alerts.VoteFailure.PollEnded" = "Rapirsîya qediya";
|
||||||
|
"Common.Alerts.VoteFailure.Title" = "Dengdayîn têkçû";
|
||||||
|
"Common.Controls.Actions.Add" = "Tevlî bike";
|
||||||
|
"Common.Controls.Actions.Back" = "Vegere";
|
||||||
|
"Common.Controls.Actions.BlockDomain" = "%@ asteng bike";
|
||||||
|
"Common.Controls.Actions.Cancel" = "Dev jê berde";
|
||||||
|
"Common.Controls.Actions.Confirm" = "Bipejirîne";
|
||||||
|
"Common.Controls.Actions.Continue" = "Bidomîne";
|
||||||
|
"Common.Controls.Actions.CopyPhoto" = "Wêne kopî bikin";
|
||||||
|
"Common.Controls.Actions.Delete" = "Jê bibe";
|
||||||
|
"Common.Controls.Actions.Discard" = "Biavêje";
|
||||||
|
"Common.Controls.Actions.Done" = "Qediya";
|
||||||
|
"Common.Controls.Actions.Edit" = "Serrast bike";
|
||||||
|
"Common.Controls.Actions.FindPeople" = "Kesên ku bişopînin bibînin";
|
||||||
|
"Common.Controls.Actions.ManuallySearch" = "Ji devlê i destan lêgerînê bike";
|
||||||
|
"Common.Controls.Actions.Next" = "Pêş";
|
||||||
|
"Common.Controls.Actions.Ok" = "BAŞ E";
|
||||||
|
"Common.Controls.Actions.Open" = "Veke";
|
||||||
|
"Common.Controls.Actions.OpenInSafari" = "Di Safariyê de veke";
|
||||||
|
"Common.Controls.Actions.Preview" = "Pêşdîtin";
|
||||||
|
"Common.Controls.Actions.Previous" = "Paş";
|
||||||
|
"Common.Controls.Actions.Remove" = "Rake";
|
||||||
|
"Common.Controls.Actions.Reply" = "Bersivê bide";
|
||||||
|
"Common.Controls.Actions.ReportUser" = "%@ ragihîne";
|
||||||
|
"Common.Controls.Actions.Save" = "Tomar bike";
|
||||||
|
"Common.Controls.Actions.SavePhoto" = "Wêneyê hilîne";
|
||||||
|
"Common.Controls.Actions.SeeMore" = "Bêtir bibîne";
|
||||||
|
"Common.Controls.Actions.Settings" = "Sazkarî";
|
||||||
|
"Common.Controls.Actions.Share" = "Parve bike";
|
||||||
|
"Common.Controls.Actions.SharePost" = "Şandiyê parve bike";
|
||||||
|
"Common.Controls.Actions.ShareUser" = "%@ parve bike";
|
||||||
|
"Common.Controls.Actions.SignIn" = "Têkeve";
|
||||||
|
"Common.Controls.Actions.SignUp" = "Tomar bibe";
|
||||||
|
"Common.Controls.Actions.Skip" = "Derbas bike";
|
||||||
|
"Common.Controls.Actions.TakePhoto" = "Wêne bikişîne";
|
||||||
|
"Common.Controls.Actions.TryAgain" = "Dîsa biceribîne";
|
||||||
|
"Common.Controls.Actions.UnblockDomain" = "%@ asteng neke";
|
||||||
|
"Common.Controls.Friendship.Block" = "Asteng bike";
|
||||||
|
"Common.Controls.Friendship.BlockDomain" = "%@ asteng bike";
|
||||||
|
"Common.Controls.Friendship.BlockUser" = "%@ asteng bike";
|
||||||
|
"Common.Controls.Friendship.Blocked" = "Astengkirî";
|
||||||
|
"Common.Controls.Friendship.EditInfo" = "Zanyariyan serrast bike";
|
||||||
|
"Common.Controls.Friendship.Follow" = "Bişopîne";
|
||||||
|
"Common.Controls.Friendship.Following" = "Dişopîne";
|
||||||
|
"Common.Controls.Friendship.Mute" = "Bêdeng bike";
|
||||||
|
"Common.Controls.Friendship.MuteUser" = "%@ bêdeng bike";
|
||||||
|
"Common.Controls.Friendship.Muted" = "Bêdengkirî";
|
||||||
|
"Common.Controls.Friendship.Pending" = "Tê nirxandin";
|
||||||
|
"Common.Controls.Friendship.Request" = "Daxwazên şopandinê";
|
||||||
|
"Common.Controls.Friendship.Unblock" = "Astengiyê rake";
|
||||||
|
"Common.Controls.Friendship.UnblockUser" = "%@ asteng neke";
|
||||||
|
"Common.Controls.Friendship.Unmute" = "Bêdeng neke";
|
||||||
|
"Common.Controls.Friendship.UnmuteUser" = "%@ bêdeng neke";
|
||||||
|
"Common.Controls.Keyboard.Common.ComposeNewPost" = "Şandiyeke nû binivsîne";
|
||||||
|
"Common.Controls.Keyboard.Common.OpenSettings" = "Sazkariyan Veke";
|
||||||
|
"Common.Controls.Keyboard.Common.ShowFavorites" = "Bijarteyan nîşan bide";
|
||||||
|
"Common.Controls.Keyboard.Common.SwitchToTab" = "Biguherîne bo %@";
|
||||||
|
"Common.Controls.Keyboard.SegmentedControl.NextSection" = "Beşa paşê";
|
||||||
|
"Common.Controls.Keyboard.SegmentedControl.PreviousSection" = "Beşa berê";
|
||||||
|
"Common.Controls.Keyboard.Timeline.NextStatus" = "Şandiya pêş";
|
||||||
|
"Common.Controls.Keyboard.Timeline.OpenAuthorProfile" = "Profîla nivîskaran veke";
|
||||||
|
"Common.Controls.Keyboard.Timeline.OpenRebloggerProfile" = "Profîla nivîskaran veke";
|
||||||
|
"Common.Controls.Keyboard.Timeline.OpenStatus" = "Şandiyê veke";
|
||||||
|
"Common.Controls.Keyboard.Timeline.PreviewImage" = "Wêneya pêşdîtinê";
|
||||||
|
"Common.Controls.Keyboard.Timeline.PreviousStatus" = "Şandeya paş";
|
||||||
|
"Common.Controls.Keyboard.Timeline.ReplyStatus" = "Bersivê bide şandiyê";
|
||||||
|
"Common.Controls.Keyboard.Timeline.ToggleContentWarning" = "Hişyariya naverokê veke/bigire";
|
||||||
|
"Common.Controls.Keyboard.Timeline.ToggleFavorite" = "Di postê da Bijartin veke/bigire";
|
||||||
|
"Common.Controls.Keyboard.Timeline.ToggleReblog" = "Toggle Reblog on Post";
|
||||||
|
"Common.Controls.Status.Actions.Favorite" = "Bijartî";
|
||||||
|
"Common.Controls.Status.Actions.Menu" = "Menû";
|
||||||
|
"Common.Controls.Status.Actions.Reblog" = "Ji nû ve blog";
|
||||||
|
"Common.Controls.Status.Actions.Reply" = "Bersivê bide";
|
||||||
|
"Common.Controls.Status.Actions.Unfavorite" = "Nebijare";
|
||||||
|
"Common.Controls.Status.Actions.Unreblog" = "Ji nû ve blogkirin betal bikin";
|
||||||
|
"Common.Controls.Status.ContentWarning" = "Hişyariya naverokê";
|
||||||
|
"Common.Controls.Status.MediaContentWarning" = "Ji bo aşkerakirinê derekî bitikîne";
|
||||||
|
"Common.Controls.Status.Poll.Closed" = "Girtî";
|
||||||
|
"Common.Controls.Status.Poll.Vote" = "Deng";
|
||||||
|
"Common.Controls.Status.ShowPost" = "Şandiyê nîşan bide";
|
||||||
|
"Common.Controls.Status.ShowUserProfile" = "Profîla bikarhêner nîşan bide";
|
||||||
|
"Common.Controls.Status.Tag.Email" = "E-name";
|
||||||
|
"Common.Controls.Status.Tag.Emoji" = "E-name";
|
||||||
|
"Common.Controls.Status.Tag.Hashtag" = "Etîket";
|
||||||
|
"Common.Controls.Status.Tag.Link" = "Girêdan";
|
||||||
|
"Common.Controls.Status.Tag.Mention" = "Behs";
|
||||||
|
"Common.Controls.Status.Tag.Url" = "URL";
|
||||||
|
"Common.Controls.Status.UserReblogged" = "%@ ji nû ve hat blogkirin";
|
||||||
|
"Common.Controls.Status.UserRepliedTo" = "Bersiv da %@";
|
||||||
|
"Common.Controls.Tabs.Home" = "Serrûpel";
|
||||||
|
"Common.Controls.Tabs.Notification" = "Agahdarî";
|
||||||
|
"Common.Controls.Tabs.Profile" = "Profîl";
|
||||||
|
"Common.Controls.Tabs.Search" = "Bigere";
|
||||||
|
"Common.Controls.Timeline.Filtered" = "Parzûnkirî";
|
||||||
|
"Common.Controls.Timeline.Header.BlockedWarning" = "Tu nikarî profîla vî bikarhênerî bibînî
|
||||||
|
heta ku astengîya te rakin.";
|
||||||
|
"Common.Controls.Timeline.Header.BlockingWarning" = "Tu nikarî profîla vî bikarhênerî bibînî
|
||||||
|
Heta ku tu wan asteng bikî.
|
||||||
|
Profîla te ji wan ra wiha xuya dike.";
|
||||||
|
"Common.Controls.Timeline.Header.NoStatusFound" = "Şandî nehate dîtin";
|
||||||
|
"Common.Controls.Timeline.Header.SuspendedWarning" = "Ev bikarhêner hat sekinandin.";
|
||||||
|
"Common.Controls.Timeline.Header.UserBlockedWarning" = "Tu nikarî profîla %@ bibînî
|
||||||
|
Heta ku astengîya te rakin.";
|
||||||
|
"Common.Controls.Timeline.Header.UserBlockingWarning" = "Tu nikarî profîla %@ bibînî
|
||||||
|
Heta ku tu wan asteng bikî.
|
||||||
|
Profîla te ji wan ra wiha xuya dike.";
|
||||||
|
"Common.Controls.Timeline.Header.UserSuspendedWarning" = "Hesaba %@ hat sekinandin.";
|
||||||
|
"Common.Controls.Timeline.Loader.LoadMissingPosts" = "Barkirina posteyên kêm";
|
||||||
|
"Common.Controls.Timeline.Loader.LoadingMissingPosts" = "Barkirina posteyên kêm...";
|
||||||
|
"Common.Controls.Timeline.Loader.ShowMoreReplies" = "Bêtir bersivan nîşan bide";
|
||||||
|
"Common.Controls.Timeline.Timestamp.Now" = "Niha";
|
||||||
|
"Scene.AccountList.AddAccount" = "Ajimêr tevlî bike";
|
||||||
|
"Scene.AccountList.DismissAccountSwitcher" = "Dismiss Account Switcher";
|
||||||
|
"Scene.AccountList.TabBarHint" = "Profîla hilbijartî ya niha: %@. Du caran bitikîne û paşê dest bide ser da ku guhêrbara ajimêr were nîşandan";
|
||||||
|
"Scene.Compose.Accessibility.AppendAttachment" = "Pêvek tevlî bike";
|
||||||
|
"Scene.Compose.Accessibility.AppendPoll" = "Rapirsî tevlî bike";
|
||||||
|
"Scene.Compose.Accessibility.CustomEmojiPicker" = "Custom Emoji Picker";
|
||||||
|
"Scene.Compose.Accessibility.DisableContentWarning" = "Hişyariya naverokê neçalak bike";
|
||||||
|
"Scene.Compose.Accessibility.EnableContentWarning" = "Enable Content Warning";
|
||||||
|
"Scene.Compose.Accessibility.PostVisibilityMenu" = "Menuya Xuyabûna Şandiyê";
|
||||||
|
"Scene.Compose.Accessibility.RemovePoll" = "Rapirsî rake";
|
||||||
|
"Scene.Compose.Attachment.AttachmentBroken" = "Ev %@ naxebite û nayê barkirin
|
||||||
|
li ser Mastodon.";
|
||||||
|
"Scene.Compose.Attachment.DescriptionPhoto" = "Describe the photo for the visually-impaired...";
|
||||||
|
"Scene.Compose.Attachment.DescriptionVideo" = "Describe the video for the visually-impaired...";
|
||||||
|
"Scene.Compose.Attachment.Photo" = "wêne";
|
||||||
|
"Scene.Compose.Attachment.Video" = "vîdyo";
|
||||||
|
"Scene.Compose.AutoComplete.SpaceToAdd" = "Space to add";
|
||||||
|
"Scene.Compose.ComposeAction" = "Biweşîne";
|
||||||
|
"Scene.Compose.ContentInputPlaceholder" = "Type or paste what’s on your mind";
|
||||||
|
"Scene.Compose.ContentWarning.Placeholder" = "Write an accurate warning here...";
|
||||||
|
"Scene.Compose.Keyboard.AppendAttachmentEntry" = "Pêvek lê zêde bike - %@";
|
||||||
|
"Scene.Compose.Keyboard.DiscardPost" = "Şandî bihelîne";
|
||||||
|
"Scene.Compose.Keyboard.PublishPost" = "Şandiye bide weşan";
|
||||||
|
"Scene.Compose.Keyboard.SelectVisibilityEntry" = "Xuyanîbûn hilbijêre - %@";
|
||||||
|
"Scene.Compose.Keyboard.ToggleContentWarning" = "Hişyariya naverokê veke/bigire";
|
||||||
|
"Scene.Compose.Keyboard.TogglePoll" = "Anketê veke/bigire";
|
||||||
|
"Scene.Compose.MediaSelection.Browse" = "Bigere";
|
||||||
|
"Scene.Compose.MediaSelection.Camera" = "Wêne bikişîne";
|
||||||
|
"Scene.Compose.MediaSelection.PhotoLibrary" = "Wênegeh";
|
||||||
|
"Scene.Compose.Poll.DurationTime" = "Dirêjî: %@";
|
||||||
|
"Scene.Compose.Poll.OneDay" = "1 Roj";
|
||||||
|
"Scene.Compose.Poll.OneHour" = "1 Demjimêr";
|
||||||
|
"Scene.Compose.Poll.OptionNumber" = "Vebijêrk %ld";
|
||||||
|
"Scene.Compose.Poll.SevenDays" = "7 Roj";
|
||||||
|
"Scene.Compose.Poll.SixHours" = "6 Demjimêr";
|
||||||
|
"Scene.Compose.Poll.ThirtyMinutes" = "30 xulek";
|
||||||
|
"Scene.Compose.Poll.ThreeDays" = "3 Roj";
|
||||||
|
"Scene.Compose.ReplyingToUser" = "bersiv bide %@";
|
||||||
|
"Scene.Compose.Title.NewPost" = "Şandiya nû";
|
||||||
|
"Scene.Compose.Title.NewReply" = "Bersiva nû";
|
||||||
|
"Scene.Compose.Visibility.Direct" = "Tenê mirovên ku min qalkirî";
|
||||||
|
"Scene.Compose.Visibility.Private" = "Tenê şopîneran";
|
||||||
|
"Scene.Compose.Visibility.Public" = "Gelemperî";
|
||||||
|
"Scene.Compose.Visibility.Unlisted" = "Nerêzokkirî";
|
||||||
|
"Scene.ConfirmEmail.Button.DontReceiveEmail" = "Min hîç e-nameyeke nesitand";
|
||||||
|
"Scene.ConfirmEmail.Button.OpenEmailApp" = "Sepana e-nameyê veke";
|
||||||
|
"Scene.ConfirmEmail.DontReceiveEmail.Description" = "Kontrol bike ka navnîşana e-nameya te rast e û her wiha peldanka xwe ya spam.";
|
||||||
|
"Scene.ConfirmEmail.DontReceiveEmail.ResendEmail" = "E-namyê yê dîsa bişîne";
|
||||||
|
"Scene.ConfirmEmail.DontReceiveEmail.Title" = "E-nameyê xwe kontrol bike";
|
||||||
|
"Scene.ConfirmEmail.OpenEmailApp.Description" = "We just sent you an email. Check your junk folder if you haven’t.";
|
||||||
|
"Scene.ConfirmEmail.OpenEmailApp.Mail" = "E-name";
|
||||||
|
"Scene.ConfirmEmail.OpenEmailApp.OpenEmailClient" = "Rajegirê e-nameyê veke";
|
||||||
|
"Scene.ConfirmEmail.OpenEmailApp.Title" = "Check your inbox.";
|
||||||
|
"Scene.ConfirmEmail.Subtitle" = "We just sent an email to %@,
|
||||||
|
tap the link to confirm your account.";
|
||||||
|
"Scene.ConfirmEmail.Title" = "Tiştekî dawî.";
|
||||||
|
"Scene.Favorite.Title" = "Bijareyên te";
|
||||||
|
"Scene.HomeTimeline.NavigationBarState.NewPosts" = "Şandiyên nû bibîne";
|
||||||
|
"Scene.HomeTimeline.NavigationBarState.Offline" = "Derhêl";
|
||||||
|
"Scene.HomeTimeline.NavigationBarState.Published" = "Hate weşandin!";
|
||||||
|
"Scene.HomeTimeline.NavigationBarState.Publishing" = "Şandî tê weşandin...";
|
||||||
|
"Scene.HomeTimeline.Title" = "Serrûpel";
|
||||||
|
"Scene.Notification.Keyobard.ShowEverything" = "Her tiştî nîşan bide";
|
||||||
|
"Scene.Notification.Keyobard.ShowMentions" = "Behskirîya nîşan bike";
|
||||||
|
"Scene.Notification.Title.Everything" = "Her tişt";
|
||||||
|
"Scene.Notification.Title.Mentions" = "Behs";
|
||||||
|
"Scene.Notification.UserFavorited Your Post" = "%@ posta we bijarte";
|
||||||
|
"Scene.Notification.UserFollowedYou" = "%@ te şopand";
|
||||||
|
"Scene.Notification.UserMentionedYou" = "%@ behsa te kir";
|
||||||
|
"Scene.Notification.UserRebloggedYourPost" = "%@ posta we ji nû ve tomar kir";
|
||||||
|
"Scene.Notification.UserRequestedToFollowYou" = "%@ daxwaza şopandina te kir";
|
||||||
|
"Scene.Notification.UserYourPollHasEnded" = "%@ Anketa te qediya";
|
||||||
|
"Scene.Preview.Keyboard.ClosePreview" = "Pêşdîtin bigire";
|
||||||
|
"Scene.Preview.Keyboard.ShowNext" = "A pêş nîşan bide";
|
||||||
|
"Scene.Preview.Keyboard.ShowPrevious" = "A paş nîşan bide";
|
||||||
|
"Scene.Profile.Dashboard.Followers" = "şopîneran";
|
||||||
|
"Scene.Profile.Dashboard.Following" = "dişopîne";
|
||||||
|
"Scene.Profile.Dashboard.Posts" = "şandîyan";
|
||||||
|
"Scene.Profile.Fields.AddRow" = "Rêzê lê zêde bike";
|
||||||
|
"Scene.Profile.Fields.Placeholder.Content" = "Naverok";
|
||||||
|
"Scene.Profile.Fields.Placeholder.Label" = "Nîşan";
|
||||||
|
"Scene.Profile.RelationshipActionAlert.ConfirmUnblockUsre.Message" = "Ji bo rakirina blokê bipejirin %@";
|
||||||
|
"Scene.Profile.RelationshipActionAlert.ConfirmUnblockUsre.Title" = "Hesabê ji bloke rake";
|
||||||
|
"Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Message" = "Ji bo vekirina bê dengkirinê bipejirin %@";
|
||||||
|
"Scene.Profile.RelationshipActionAlert.ConfirmUnmuteUser.Title" = "Hesabê ji bê deng rake";
|
||||||
|
"Scene.Profile.SegmentedControl.Media" = "Medya";
|
||||||
|
"Scene.Profile.SegmentedControl.Posts" = "Şandîyan";
|
||||||
|
"Scene.Profile.SegmentedControl.Replies" = "Bersivan";
|
||||||
|
"Scene.Register.Error.Item.Agreement" = "Lihevhatin";
|
||||||
|
"Scene.Register.Error.Item.Email" = "E-name";
|
||||||
|
"Scene.Register.Error.Item.Locale" = "Herêm";
|
||||||
|
"Scene.Register.Error.Item.Password" = "Şîfre";
|
||||||
|
"Scene.Register.Error.Item.Reason" = "Sedem";
|
||||||
|
"Scene.Register.Error.Item.Username" = "Navê bikarhêner";
|
||||||
|
"Scene.Register.Error.Reason.Accepted" = "%@ divê were qebûlkirin";
|
||||||
|
"Scene.Register.Error.Reason.Blank" = "%@ pêwist e";
|
||||||
|
"Scene.Register.Error.Reason.Blocked" = "%@ peydekerê e-nameya bêdestûr dihewîne";
|
||||||
|
"Scene.Register.Error.Reason.Inclusion" = "%@ nirxeke ku tê destekirin nîn e";
|
||||||
|
"Scene.Register.Error.Reason.Invalid" = "%@ ne derbasdar e";
|
||||||
|
"Scene.Register.Error.Reason.Reserved" = "%@ peyveke mifteya veqetandî ye";
|
||||||
|
"Scene.Register.Error.Reason.Taken" = "%@ jixwe tê bikaranîn";
|
||||||
|
"Scene.Register.Error.Reason.TooLong" = "%@ gelekî dirêj e";
|
||||||
|
"Scene.Register.Error.Reason.TooShort" = "%@ pir kurt e";
|
||||||
|
"Scene.Register.Error.Reason.Unreachable" = "%@ xuya nake";
|
||||||
|
"Scene.Register.Error.Special.EmailInvalid" = "Ev ne navnîşana e-nameyek derbasdar e";
|
||||||
|
"Scene.Register.Error.Special.PasswordTooShort" = "Şîfre pir kurt e (divê herî kêm 8 tîpan be)";
|
||||||
|
"Scene.Register.Error.Special.UsernameInvalid" = "Navê bikarhêner divê tenê tîpên alfanumerîk û binxet hebe";
|
||||||
|
"Scene.Register.Error.Special.UsernameTooLong" = "Navê bikarhêner pir dirêj e (ji 30 tîpan dirêjtir nabe)";
|
||||||
|
"Scene.Register.Input.Avatar.Delete" = "Jê bibe";
|
||||||
|
"Scene.Register.Input.DisplayName.Placeholder" = "navê nîşanê";
|
||||||
|
"Scene.Register.Input.Email.Placeholder" = "e-name";
|
||||||
|
"Scene.Register.Input.Invite.RegistrationUserInviteRequest" = "Tu çima dixwazî beşdar bibî?";
|
||||||
|
"Scene.Register.Input.Password.Hint" = "Şîfreya we herî kêm heşt tîpan hewce dike";
|
||||||
|
"Scene.Register.Input.Password.Placeholder" = "şîfre";
|
||||||
|
"Scene.Register.Input.Username.DuplicatePrompt" = "Navê vê bikarhêner tê girtin.";
|
||||||
|
"Scene.Register.Input.Username.Placeholder" = "navê bikarhêner";
|
||||||
|
"Scene.Register.Title" = "Ji me re hinekî qala xwe bike.";
|
||||||
|
"Scene.Report.Content1" = "Are there any other posts you’d like to add to the report?";
|
||||||
|
"Scene.Report.Content2" = "Is there anything the moderators should know about this report?";
|
||||||
|
"Scene.Report.Send" = "Ragihandinê bişîne";
|
||||||
|
"Scene.Report.SkipToSend" = "Bêyî şirove bişîne";
|
||||||
|
"Scene.Report.Step1" = "Gav 1 ji 2";
|
||||||
|
"Scene.Report.Step2" = "Gav 2 ji 2";
|
||||||
|
"Scene.Report.TextPlaceholder" = "Type or paste additional comments";
|
||||||
|
"Scene.Report.Title" = "%@ ragihîne";
|
||||||
|
"Scene.Search.Recommend.Accounts.Description" = "Dibe ku tu bixwazî van hesaban bişopînî";
|
||||||
|
"Scene.Search.Recommend.Accounts.Follow" = "Bişopîne";
|
||||||
|
"Scene.Search.Recommend.Accounts.Title" = "Hesabên ku hûn dikarin hez bikin";
|
||||||
|
"Scene.Search.Recommend.ButtonText" = "Hemûyé bibîne";
|
||||||
|
"Scene.Search.Recommend.HashTag.Description" = "Etîketên ku pir balê dikişînin";
|
||||||
|
"Scene.Search.Recommend.HashTag.PeopleTalking" = "%@ kes diaxivin";
|
||||||
|
"Scene.Search.Recommend.HashTag.Title" = "Trend li ser Mastodon";
|
||||||
|
"Scene.Search.SearchBar.Cancel" = "Betal kirin";
|
||||||
|
"Scene.Search.SearchBar.Placeholder" = "Li etîketan û bikarhêneran bigerin";
|
||||||
|
"Scene.Search.Searching.Clear" = "Paqij bike";
|
||||||
|
"Scene.Search.Searching.EmptyState.NoResults" = "Encam tune";
|
||||||
|
"Scene.Search.Searching.RecentSearch" = "Lêgerînên dawî";
|
||||||
|
"Scene.Search.Searching.Segment.All" = "Hemû";
|
||||||
|
"Scene.Search.Searching.Segment.Hashtags" = "Etîketan";
|
||||||
|
"Scene.Search.Searching.Segment.People" = "Mirov";
|
||||||
|
"Scene.Search.Searching.Segment.Posts" = "Şandîyan";
|
||||||
|
"Scene.Search.Title" = "Bigere";
|
||||||
|
"Scene.ServerPicker.Button.Category.Academia" = "akademî";
|
||||||
|
"Scene.ServerPicker.Button.Category.Activism" = "çalakî";
|
||||||
|
"Scene.ServerPicker.Button.Category.All" = "Hemû";
|
||||||
|
"Scene.ServerPicker.Button.Category.AllAccessiblityDescription" = "Beş: Hemû";
|
||||||
|
"Scene.ServerPicker.Button.Category.Art" = "huner";
|
||||||
|
"Scene.ServerPicker.Button.Category.Food" = "xwarin";
|
||||||
|
"Scene.ServerPicker.Button.Category.Furry" = "furry";
|
||||||
|
"Scene.ServerPicker.Button.Category.Games" = "lîsk";
|
||||||
|
"Scene.ServerPicker.Button.Category.General" = "giştî";
|
||||||
|
"Scene.ServerPicker.Button.Category.Journalism" = "rojnamevanî";
|
||||||
|
"Scene.ServerPicker.Button.Category.Lgbt" = "lgbt";
|
||||||
|
"Scene.ServerPicker.Button.Category.Music" = "muzîk";
|
||||||
|
"Scene.ServerPicker.Button.Category.Regional" = "herêmî";
|
||||||
|
"Scene.ServerPicker.Button.Category.Tech" = "teknolojî";
|
||||||
|
"Scene.ServerPicker.Button.SeeLess" = "Kêmtir bibîne";
|
||||||
|
"Scene.ServerPicker.Button.SeeMore" = "Bêtir bibîne";
|
||||||
|
"Scene.ServerPicker.EmptyState.BadNetwork" = "Di dema barkirina daneyan da tiştek xelet derket. Girêdana xwe ya înternetê kontrol bike.";
|
||||||
|
"Scene.ServerPicker.EmptyState.FindingServers" = "Dîtina serverên berdest...";
|
||||||
|
"Scene.ServerPicker.EmptyState.NoResults" = "Encam nade";
|
||||||
|
"Scene.ServerPicker.Input.Placeholder" = "Serverek bibînin an jî beşdarî ya xwe bibin...";
|
||||||
|
"Scene.ServerPicker.Label.Category" = "KATEGORÎ";
|
||||||
|
"Scene.ServerPicker.Label.Language" = "ZIMAN";
|
||||||
|
"Scene.ServerPicker.Label.Users" = "BIKARHÊNER";
|
||||||
|
"Scene.ServerPicker.Title" = "Rajekarekê hilbijêre,
|
||||||
|
Her kîjan rajekar be.";
|
||||||
|
"Scene.ServerRules.Button.Confirm" = "Ez tev dibim";
|
||||||
|
"Scene.ServerRules.PrivacyPolicy" = "polîtîkaya nepenîtiyê";
|
||||||
|
"Scene.ServerRules.Prompt" = "Bi berdewamî, hûn ji bo %@ di bin şertên polîtîkaya xizmet û nepenîtiyê da ne.";
|
||||||
|
"Scene.ServerRules.Subtitle" = "Ev rêzik ji aliyê rêvebirên %@ ve tên sazkirin.";
|
||||||
|
"Scene.ServerRules.TermsOfService" = "şert û mercên xizmetê";
|
||||||
|
"Scene.ServerRules.Title" = "Hin qaîdeyên bingehîn.";
|
||||||
|
"Scene.Settings.Footer.MastodonDescription" = "Mastodon is open source software. You can report issues on GitHub at %@ (%@)";
|
||||||
|
"Scene.Settings.Keyboard.CloseSettingsWindow" = "Close Settings Window";
|
||||||
|
"Scene.Settings.Section.Appearance.Automatic" = "Xweber";
|
||||||
|
"Scene.Settings.Section.Appearance.Dark" = "Her dem tarî";
|
||||||
|
"Scene.Settings.Section.Appearance.Light" = "Her dem ronî";
|
||||||
|
"Scene.Settings.Section.Appearance.Title" = "Xuyang";
|
||||||
|
"Scene.Settings.Section.BoringZone.AccountSettings" = "Account Settings";
|
||||||
|
"Scene.Settings.Section.BoringZone.Privacy" = "Privacy Policy";
|
||||||
|
"Scene.Settings.Section.BoringZone.Terms" = "Terms of Service";
|
||||||
|
"Scene.Settings.Section.BoringZone.Title" = "The Boring Zone";
|
||||||
|
"Scene.Settings.Section.Notifications.Boosts" = "Reblogs my post";
|
||||||
|
"Scene.Settings.Section.Notifications.Favorites" = "Şandiyên min hez kir";
|
||||||
|
"Scene.Settings.Section.Notifications.Follows" = "Min şopand";
|
||||||
|
"Scene.Settings.Section.Notifications.Mentions" = "Qale min kir";
|
||||||
|
"Scene.Settings.Section.Notifications.Title" = "Agahdarî";
|
||||||
|
"Scene.Settings.Section.Notifications.Trigger.Anyone" = "her kes";
|
||||||
|
"Scene.Settings.Section.Notifications.Trigger.Follow" = "her kesê ku dişopînim";
|
||||||
|
"Scene.Settings.Section.Notifications.Trigger.Follower" = "şopînerek";
|
||||||
|
"Scene.Settings.Section.Notifications.Trigger.Noone" = "ne yek";
|
||||||
|
"Scene.Settings.Section.Notifications.Trigger.Title" = "Min agahdar bike gava";
|
||||||
|
"Scene.Settings.Section.Preference.DisableAvatarAnimation" = "Disable animated avatars";
|
||||||
|
"Scene.Settings.Section.Preference.DisableEmojiAnimation" = "Disable animated emojis";
|
||||||
|
"Scene.Settings.Section.Preference.Title" = "Hilbijarte";
|
||||||
|
"Scene.Settings.Section.Preference.TrueBlackDarkMode" = "True black dark mode";
|
||||||
|
"Scene.Settings.Section.Preference.UsingDefaultBrowser" = "Use default browser to open links";
|
||||||
|
"Scene.Settings.Section.SpicyZone.Clear" = "Clear Media Cache";
|
||||||
|
"Scene.Settings.Section.SpicyZone.Signout" = "Sign Out";
|
||||||
|
"Scene.Settings.Section.SpicyZone.Title" = "The Spicy Zone";
|
||||||
|
"Scene.Settings.Title" = "Sazkarî";
|
||||||
|
"Scene.SuggestionAccount.FollowExplain" = "Gava tu kesekî dişopînî, tu yê şandiyê wan di serrûpelê de bibîne.";
|
||||||
|
"Scene.SuggestionAccount.Title" = "Kesên bo ku bişopînî bibîne";
|
||||||
|
"Scene.Thread.BackTitle" = "Şandî";
|
||||||
|
"Scene.Thread.Title" = "Post from %@";
|
||||||
|
"Scene.Welcome.Slogan" = "Torên civakî
|
||||||
|
di destên te de.";
|
||||||
|
"Scene.Wizard.AccessibilityHint" = "Double tap to dismiss this wizard";
|
||||||
|
"Scene.Wizard.MultipleAccountSwitchIntroDescription" = "Dest bide ser bişkoja profîlê da ku di navbera gelek ajimêrann de biguherînî.";
|
||||||
|
"Scene.Wizard.NewInMastodon" = "Nû di Mastodon de";
|
|
@ -0,0 +1,390 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>a11y.plural.count.unread.notification</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@notification_count_unread_notification@</string>
|
||||||
|
<key>notification_count_unread_notification</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 agahdariya nexwendî</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld agahdariyên nexwendî</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>a11y.plural.count.input_limit_exceeds</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>Sînorê têketinê derbas kir %#@character_count@</string>
|
||||||
|
<key>character_count</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 tîp</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld tîp</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>a11y.plural.count.input_limit_remains</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>Sînorê têketinê %#@character_count@ maye</string>
|
||||||
|
<key>character_count</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 tîp</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld tîp</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>plural.count.metric_formatted.post</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%@ %#@post_count@</string>
|
||||||
|
<key>post_count</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>şandî</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>şandî</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>plural.count.post</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@post_count@</string>
|
||||||
|
<key>post_count</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 şandî</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld şandî</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>plural.count.favorite</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@favorite_count@</string>
|
||||||
|
<key>favorite_count</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 hezkirin</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld hezkirin</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>plural.count.reblog</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@reblog_count@</string>
|
||||||
|
<key>reblog_count</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 reblog</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld reblogs</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>plural.count.vote</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@vote_count@</string>
|
||||||
|
<key>vote_count</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 deng</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld deng</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>plural.count.voter</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@voter_count@</string>
|
||||||
|
<key>voter_count</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 hilbijêr</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld hilbijêr</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>plural.people_talking</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_people_talking@</string>
|
||||||
|
<key>count_people_talking</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 mirov diaxive</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld mirov diaxive</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>plural.count.following</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_following@</string>
|
||||||
|
<key>count_following</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 dişopîne</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld dişopîne</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>plural.count.follower</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_follower@</string>
|
||||||
|
<key>count_follower</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 şopîner</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld şopîner</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>date.year.left</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_year_left@</string>
|
||||||
|
<key>count_year_left</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 sal berê</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld sal berê</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>date.month.left</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_month_left@</string>
|
||||||
|
<key>count_month_left</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 meh berê</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld meh berê</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>date.day.left</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_day_left@</string>
|
||||||
|
<key>count_day_left</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 roj berê</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld roj berê</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>date.hour.left</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_hour_left@</string>
|
||||||
|
<key>count_hour_left</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 demjimêr berê</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld demjimêr berê</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>date.minute.left</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_minute_left@</string>
|
||||||
|
<key>count_minute_left</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 xulek berê</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld xulek berê</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>date.second.left</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_second_left@</string>
|
||||||
|
<key>count_second_left</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 çirke berê</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld çirke berê</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>date.year.ago.abbr</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_year_ago_abbr@</string>
|
||||||
|
<key>count_year_ago_abbr</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 sal berê</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld sal berê</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>date.month.ago.abbr</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_month_ago_abbr@</string>
|
||||||
|
<key>count_month_ago_abbr</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 xulek berê</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld xulek berê</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>date.day.ago.abbr</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_day_ago_abbr@</string>
|
||||||
|
<key>count_day_ago_abbr</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 roj berê</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld roj berê</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>date.hour.ago.abbr</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_hour_ago_abbr@</string>
|
||||||
|
<key>count_hour_ago_abbr</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 demjimêr berê</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld demjimêr berê</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>date.minute.ago.abbr</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_minute_ago_abbr@</string>
|
||||||
|
<key>count_minute_ago_abbr</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 xulek berê</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld xulek berê</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>date.second.ago.abbr</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringLocalizedFormatKey</key>
|
||||||
|
<string>%#@count_second_ago_abbr@</string>
|
||||||
|
<key>count_second_ago_abbr</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSStringFormatSpecTypeKey</key>
|
||||||
|
<string>NSStringPluralRuleType</string>
|
||||||
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
|
<string>ld</string>
|
||||||
|
<key>one</key>
|
||||||
|
<string>1 çirke berê</string>
|
||||||
|
<key>other</key>
|
||||||
|
<string>%ld çirke berê</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
|
@ -133,9 +133,9 @@
|
||||||
"Common.Controls.Timeline.Loader.LoadingMissingPosts" = "กำลังโหลดโพสต์ที่ขาดหายไป...";
|
"Common.Controls.Timeline.Loader.LoadingMissingPosts" = "กำลังโหลดโพสต์ที่ขาดหายไป...";
|
||||||
"Common.Controls.Timeline.Loader.ShowMoreReplies" = "แสดงการตอบกลับเพิ่มเติม";
|
"Common.Controls.Timeline.Loader.ShowMoreReplies" = "แสดงการตอบกลับเพิ่มเติม";
|
||||||
"Common.Controls.Timeline.Timestamp.Now" = "ตอนนี้";
|
"Common.Controls.Timeline.Timestamp.Now" = "ตอนนี้";
|
||||||
"Scene.AccountList.AddAccount" = "Add Account";
|
"Scene.AccountList.AddAccount" = "เพิ่มบัญชี";
|
||||||
"Scene.AccountList.DismissAccountSwitcher" = "Dismiss Account Switcher";
|
"Scene.AccountList.DismissAccountSwitcher" = "ปิดตัวสลับบัญชี";
|
||||||
"Scene.AccountList.TabBarHint" = "Current selected profile: %@. Double tap then hold to show account switcher";
|
"Scene.AccountList.TabBarHint" = "โปรไฟล์ที่เลือกในปัจจุบัน: %@ แตะสองครั้งแล้วกดค้างไว้เพื่อแสดงตัวสลับบัญชี";
|
||||||
"Scene.Compose.Accessibility.AppendAttachment" = "เพิ่มไฟล์แนบ";
|
"Scene.Compose.Accessibility.AppendAttachment" = "เพิ่มไฟล์แนบ";
|
||||||
"Scene.Compose.Accessibility.AppendPoll" = "เพิ่มการสำรวจความคิดเห็น";
|
"Scene.Compose.Accessibility.AppendPoll" = "เพิ่มการสำรวจความคิดเห็น";
|
||||||
"Scene.Compose.Accessibility.CustomEmojiPicker" = "ตัวเลือกอีโมจิที่กำหนดเอง";
|
"Scene.Compose.Accessibility.CustomEmojiPicker" = "ตัวเลือกอีโมจิที่กำหนดเอง";
|
||||||
|
@ -341,6 +341,6 @@
|
||||||
"Scene.Thread.Title" = "โพสต์จาก %@";
|
"Scene.Thread.Title" = "โพสต์จาก %@";
|
||||||
"Scene.Welcome.Slogan" = "ให้เครือข่ายสังคม
|
"Scene.Welcome.Slogan" = "ให้เครือข่ายสังคม
|
||||||
กลับมาอยู่ในมือของคุณ";
|
กลับมาอยู่ในมือของคุณ";
|
||||||
"Scene.Wizard.AccessibilityHint" = "Double tap to dismiss this wizard";
|
"Scene.Wizard.AccessibilityHint" = "แตะสองครั้งเพื่อปิดตัวช่วยสร้างนี้";
|
||||||
"Scene.Wizard.MultipleAccountSwitchIntroDescription" = "Switch between multiple accounts by holding the profile button.";
|
"Scene.Wizard.MultipleAccountSwitchIntroDescription" = "สลับระหว่างหลายบัญชีโดยกดปุ่มโปรไฟล์ค้างไว้";
|
||||||
"Scene.Wizard.NewInMastodon" = "New in Mastodon";
|
"Scene.Wizard.NewInMastodon" = "มาใหม่ใน Mastodon";
|
|
@ -13,7 +13,7 @@
|
||||||
<key>NSStringFormatValueTypeKey</key>
|
<key>NSStringFormatValueTypeKey</key>
|
||||||
<string>ld</string>
|
<string>ld</string>
|
||||||
<key>other</key>
|
<key>other</key>
|
||||||
<string>%ld unread notification</string>
|
<string>%ld การแจ้งเตือนที่ยังไม่ได้อ่าน</string>
|
||||||
</dict>
|
</dict>
|
||||||
</dict>
|
</dict>
|
||||||
<key>a11y.plural.count.input_limit_exceeds</key>
|
<key>a11y.plural.count.input_limit_exceeds</key>
|
||||||
|
|
|
@ -111,8 +111,10 @@ extension AccountListViewController {
|
||||||
|
|
||||||
viewModel.dataSourceDidUpdate
|
viewModel.dataSourceDidUpdate
|
||||||
.receive(on: DispatchQueue.main)
|
.receive(on: DispatchQueue.main)
|
||||||
.sink { [weak self] in
|
.sink { [weak self, weak presentingViewController] in
|
||||||
guard let self = self else { return }
|
guard let self = self else { return }
|
||||||
|
// the presentingViewController may deinit
|
||||||
|
guard let _ = presentingViewController else { return }
|
||||||
self.hasLoaded = true
|
self.hasLoaded = true
|
||||||
self.panModalSetNeedsLayoutUpdate()
|
self.panModalSetNeedsLayoutUpdate()
|
||||||
self.panModalTransition(to: .shortForm)
|
self.panModalTransition(to: .shortForm)
|
||||||
|
|
|
@ -52,13 +52,35 @@ extension AddAccountTableViewCell {
|
||||||
iconImageView.setContentHuggingPriority(.defaultLow, for: .horizontal)
|
iconImageView.setContentHuggingPriority(.defaultLow, for: .horizontal)
|
||||||
iconImageView.setContentHuggingPriority(.defaultLow, for: .vertical)
|
iconImageView.setContentHuggingPriority(.defaultLow, for: .vertical)
|
||||||
|
|
||||||
|
// layout the same placeholder UI from `AccountListTableViewCell`
|
||||||
|
let placeholderLabelContainerStackView = UIStackView()
|
||||||
|
placeholderLabelContainerStackView.axis = .vertical
|
||||||
|
placeholderLabelContainerStackView.distribution = .equalCentering
|
||||||
|
placeholderLabelContainerStackView.spacing = 2
|
||||||
|
placeholderLabelContainerStackView.distribution = .fillProportionally
|
||||||
|
placeholderLabelContainerStackView.translatesAutoresizingMaskIntoConstraints = false
|
||||||
|
contentView.addSubview(placeholderLabelContainerStackView)
|
||||||
|
NSLayoutConstraint.activate([
|
||||||
|
placeholderLabelContainerStackView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 8),
|
||||||
|
placeholderLabelContainerStackView.leadingAnchor.constraint(equalTo: iconImageView.trailingAnchor, constant: 10),
|
||||||
|
contentView.bottomAnchor.constraint(equalTo: placeholderLabelContainerStackView.bottomAnchor, constant: 10),
|
||||||
|
iconImageView.heightAnchor.constraint(equalTo: placeholderLabelContainerStackView.heightAnchor, multiplier: 0.8).priority(.required - 10),
|
||||||
|
])
|
||||||
|
let _nameLabel = MetaLabel(style: .accountListName)
|
||||||
|
_nameLabel.configure(content: PlaintextMetaContent(string: " "))
|
||||||
|
let _usernameLabel = MetaLabel(style: .accountListUsername)
|
||||||
|
_usernameLabel.configure(content: PlaintextMetaContent(string: " "))
|
||||||
|
placeholderLabelContainerStackView.addArrangedSubview(_nameLabel)
|
||||||
|
placeholderLabelContainerStackView.addArrangedSubview(_usernameLabel)
|
||||||
|
placeholderLabelContainerStackView.isHidden = true
|
||||||
|
|
||||||
titleLabel.translatesAutoresizingMaskIntoConstraints = false
|
titleLabel.translatesAutoresizingMaskIntoConstraints = false
|
||||||
contentView.addSubview(titleLabel)
|
contentView.addSubview(titleLabel)
|
||||||
NSLayoutConstraint.activate([
|
NSLayoutConstraint.activate([
|
||||||
titleLabel.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 15),
|
titleLabel.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 15),
|
||||||
titleLabel.leadingAnchor.constraint(equalTo: iconImageView.trailingAnchor, constant: 10),
|
titleLabel.leadingAnchor.constraint(equalTo: iconImageView.trailingAnchor, constant: 10),
|
||||||
contentView.bottomAnchor.constraint(equalTo: titleLabel.bottomAnchor, constant: 15),
|
contentView.bottomAnchor.constraint(equalTo: titleLabel.bottomAnchor, constant: 15),
|
||||||
iconImageView.heightAnchor.constraint(equalTo: titleLabel.heightAnchor, multiplier: 1.0).priority(.required - 10),
|
// iconImageView.heightAnchor.constraint(equalTo: titleLabel.heightAnchor, multiplier: 1.0).priority(.required - 10),
|
||||||
titleLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
|
titleLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@ final class AutoCompleteTableViewCell: UITableViewCell {
|
||||||
|
|
||||||
let titleLabel: MetaLabel = {
|
let titleLabel: MetaLabel = {
|
||||||
let label = MetaLabel(style: .autoCompletion)
|
let label = MetaLabel(style: .autoCompletion)
|
||||||
|
label.isUserInteractionEnabled = false
|
||||||
return label
|
return label
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
|
|
@ -413,7 +413,7 @@ extension ComposeViewController {
|
||||||
.receive(on: DispatchQueue.main)
|
.receive(on: DispatchQueue.main)
|
||||||
.sink { [weak self] attachmentServices in
|
.sink { [weak self] attachmentServices in
|
||||||
guard let self = self else { return }
|
guard let self = self else { return }
|
||||||
let isEnabled = attachmentServices.count < 4
|
let isEnabled = attachmentServices.count < self.viewModel.maxMediaAttachments
|
||||||
self.composeToolbarView.mediaBarButtonItem.isEnabled = isEnabled
|
self.composeToolbarView.mediaBarButtonItem.isEnabled = isEnabled
|
||||||
self.composeToolbarView.mediaButton.isEnabled = isEnabled
|
self.composeToolbarView.mediaButton.isEnabled = isEnabled
|
||||||
self.resetImagePicker()
|
self.resetImagePicker()
|
||||||
|
@ -450,7 +450,7 @@ extension ComposeViewController {
|
||||||
.receive(on: DispatchQueue.main)
|
.receive(on: DispatchQueue.main)
|
||||||
.sink { [weak self] characterCount in
|
.sink { [weak self] characterCount in
|
||||||
guard let self = self else { return }
|
guard let self = self else { return }
|
||||||
let count = ComposeViewModel.composeContentLimit - characterCount
|
let count = self.viewModel.composeContentLimit - characterCount
|
||||||
self.composeToolbarView.characterCountLabel.text = "\(count)"
|
self.composeToolbarView.characterCountLabel.text = "\(count)"
|
||||||
self.characterCountLabel.text = "\(count)"
|
self.characterCountLabel.text = "\(count)"
|
||||||
let font: UIFont
|
let font: UIFont
|
||||||
|
@ -651,7 +651,7 @@ extension ComposeViewController {
|
||||||
}
|
}
|
||||||
|
|
||||||
private func resetImagePicker() {
|
private func resetImagePicker() {
|
||||||
let selectionLimit = max(1, 4 - viewModel.attachmentServices.value.count)
|
let selectionLimit = max(1, viewModel.maxMediaAttachments - viewModel.attachmentServices.value.count)
|
||||||
let configuration = ComposeViewController.createPhotoLibraryPickerConfiguration(selectionLimit: selectionLimit)
|
let configuration = ComposeViewController.createPhotoLibraryPickerConfiguration(selectionLimit: selectionLimit)
|
||||||
photoLibraryPicker = createImagePicker(configuration: configuration)
|
photoLibraryPicker = createImagePicker(configuration: configuration)
|
||||||
}
|
}
|
||||||
|
@ -1275,7 +1275,6 @@ extension ComposeViewController: AutoCompleteViewControllerDelegate {
|
||||||
case .bottomLoader:
|
case .bottomLoader:
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
text.append(" ")
|
|
||||||
return text
|
return text
|
||||||
}()
|
}()
|
||||||
guard let replacedText = _replacedText else { return }
|
guard let replacedText = _replacedText else { return }
|
||||||
|
@ -1286,6 +1285,9 @@ extension ComposeViewController: AutoCompleteViewControllerDelegate {
|
||||||
|
|
||||||
let range = NSRange(info.toHighlightEndRange, in: text)
|
let range = NSRange(info.toHighlightEndRange, in: text)
|
||||||
textEditorView.textStorage.replaceCharacters(in: range, with: replacedText)
|
textEditorView.textStorage.replaceCharacters(in: range, with: replacedText)
|
||||||
|
DispatchQueue.main.async {
|
||||||
|
textEditorView.textView.insertText(" ") // trigger textView delegate update
|
||||||
|
}
|
||||||
viewModel.autoCompleteInfo.value = nil
|
viewModel.autoCompleteInfo.value = nil
|
||||||
|
|
||||||
switch item {
|
switch item {
|
||||||
|
|
|
@ -49,15 +49,6 @@ extension ComposeViewModel {
|
||||||
}
|
}
|
||||||
.store(in: &disposeBag)
|
.store(in: &disposeBag)
|
||||||
|
|
||||||
// composeStatusPollTableViewCell.collectionViewHeightDidUpdate
|
|
||||||
// .receive(on: DispatchQueue.main)
|
|
||||||
// .sink { [weak self] _ in
|
|
||||||
// guard let _ = self else { return }
|
|
||||||
// tableView.beginUpdates()
|
|
||||||
// tableView.endUpdates()
|
|
||||||
// }
|
|
||||||
// .store(in: &disposeBag)
|
|
||||||
|
|
||||||
attachmentServices
|
attachmentServices
|
||||||
.removeDuplicates()
|
.removeDuplicates()
|
||||||
.receive(on: DispatchQueue.main)
|
.receive(on: DispatchQueue.main)
|
||||||
|
@ -100,7 +91,7 @@ extension ComposeViewModel {
|
||||||
for attribute in pollOptionAttributes {
|
for attribute in pollOptionAttributes {
|
||||||
items.append(.pollOption(attribute: attribute))
|
items.append(.pollOption(attribute: attribute))
|
||||||
}
|
}
|
||||||
if pollOptionAttributes.count < 4 {
|
if pollOptionAttributes.count < self.maxPollOptions {
|
||||||
items.append(.pollOptionAppendEntry)
|
items.append(.pollOptionAppendEntry)
|
||||||
}
|
}
|
||||||
items.append(.pollExpiresOption(attribute: self.pollExpiresOptionAttribute))
|
items.append(.pollExpiresOption(attribute: self.pollExpiresOptionAttribute))
|
||||||
|
@ -246,7 +237,7 @@ extension ComposeViewModel: UITableViewDataSource {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
cell.statusView.headerContainerView.isHidden = false
|
cell.statusView.headerContainerView.isHidden = false
|
||||||
cell.statusView.headerIconLabel.attributedText = StatusView.iconAttributedString(image: StatusView.replyIconImage)
|
cell.statusView.headerIconLabel.configure(attributedString: StatusView.iconAttributedString(image: StatusView.replyIconImage))
|
||||||
let headerText: String = {
|
let headerText: String = {
|
||||||
let author = replyTo.author
|
let author = replyTo.author
|
||||||
let name = author.displayName.isEmpty ? author.username : author.displayName
|
let name = author.displayName.isEmpty ? author.username : author.displayName
|
||||||
|
|
|
@ -15,7 +15,6 @@ import MastodonSDK
|
||||||
|
|
||||||
final class ComposeViewModel: NSObject {
|
final class ComposeViewModel: NSObject {
|
||||||
|
|
||||||
static let composeContentLimit: Int = 500
|
|
||||||
|
|
||||||
var disposeBag = Set<AnyCancellable>()
|
var disposeBag = Set<AnyCancellable>()
|
||||||
|
|
||||||
|
@ -38,6 +37,24 @@ final class ComposeViewModel: NSObject {
|
||||||
var isViewAppeared = false
|
var isViewAppeared = false
|
||||||
|
|
||||||
// output
|
// output
|
||||||
|
let instanceConfiguration: Mastodon.Entity.Instance.Configuration?
|
||||||
|
var composeContentLimit: Int {
|
||||||
|
guard let maxCharacters = instanceConfiguration?.statuses?.maxCharacters else { return 500 }
|
||||||
|
return max(1, maxCharacters)
|
||||||
|
}
|
||||||
|
var maxMediaAttachments: Int {
|
||||||
|
guard let maxMediaAttachments = instanceConfiguration?.statuses?.maxMediaAttachments else {
|
||||||
|
return 4
|
||||||
|
}
|
||||||
|
// FIXME: update timeline media preview UI
|
||||||
|
return min(4, max(1, maxMediaAttachments))
|
||||||
|
// return max(1, maxMediaAttachments)
|
||||||
|
}
|
||||||
|
var maxPollOptions: Int {
|
||||||
|
guard let maxOptions = instanceConfiguration?.polls?.maxOptions else { return 4 }
|
||||||
|
return max(2, maxOptions)
|
||||||
|
}
|
||||||
|
|
||||||
let composeStatusContentTableViewCell = ComposeStatusContentTableViewCell()
|
let composeStatusContentTableViewCell = ComposeStatusContentTableViewCell()
|
||||||
let composeStatusAttachmentTableViewCell = ComposeStatusAttachmentTableViewCell()
|
let composeStatusAttachmentTableViewCell = ComposeStatusAttachmentTableViewCell()
|
||||||
let composeStatusPollTableViewCell = ComposeStatusPollTableViewCell()
|
let composeStatusPollTableViewCell = ComposeStatusPollTableViewCell()
|
||||||
|
@ -128,8 +145,12 @@ final class ComposeViewModel: NSObject {
|
||||||
}
|
}
|
||||||
return CurrentValueSubject(visibility)
|
return CurrentValueSubject(visibility)
|
||||||
}()
|
}()
|
||||||
self.activeAuthentication = CurrentValueSubject(context.authenticationService.activeMastodonAuthentication.value)
|
let _activeAuthentication = context.authenticationService.activeMastodonAuthentication.value
|
||||||
|
self.activeAuthentication = CurrentValueSubject(_activeAuthentication)
|
||||||
self.activeAuthenticationBox = CurrentValueSubject(context.authenticationService.activeMastodonAuthenticationBox.value)
|
self.activeAuthenticationBox = CurrentValueSubject(context.authenticationService.activeMastodonAuthenticationBox.value)
|
||||||
|
// set limit
|
||||||
|
let _instanceConfiguration = _activeAuthentication?.instance?.configuration
|
||||||
|
self.instanceConfiguration = _instanceConfiguration
|
||||||
super.init()
|
super.init()
|
||||||
// end init
|
// end init
|
||||||
|
|
||||||
|
@ -151,7 +172,9 @@ final class ComposeViewModel: NSObject {
|
||||||
.sorted(by: { $0.index.intValue < $1.index.intValue })
|
.sorted(by: { $0.index.intValue < $1.index.intValue })
|
||||||
.filter { $0.id != composeAuthor?.id }
|
.filter { $0.id != composeAuthor?.id }
|
||||||
for mention in mentions {
|
for mention in mentions {
|
||||||
mentionAccts.append("@" + mention.acct)
|
let acct = "@" + mention.acct
|
||||||
|
guard !mentionAccts.contains(acct) else { continue }
|
||||||
|
mentionAccts.append(acct)
|
||||||
}
|
}
|
||||||
for acct in mentionAccts {
|
for acct in mentionAccts {
|
||||||
UITextChecker.learnWord(acct)
|
UITextChecker.learnWord(acct)
|
||||||
|
@ -241,8 +264,9 @@ final class ComposeViewModel: NSObject {
|
||||||
let isComposeContentEmpty = composeStatusAttribute.composeContent
|
let isComposeContentEmpty = composeStatusAttribute.composeContent
|
||||||
.map { ($0 ?? "").isEmpty }
|
.map { ($0 ?? "").isEmpty }
|
||||||
let isComposeContentValid = characterCount
|
let isComposeContentValid = characterCount
|
||||||
.map { characterCount -> Bool in
|
.compactMap { [weak self] characterCount -> Bool in
|
||||||
return characterCount <= ComposeViewModel.composeContentLimit
|
guard let self = self else { return characterCount <= 500 }
|
||||||
|
return characterCount <= self.composeContentLimit
|
||||||
}
|
}
|
||||||
let isMediaEmpty = attachmentServices
|
let isMediaEmpty = attachmentServices
|
||||||
.map { $0.isEmpty }
|
.map { $0.isEmpty }
|
||||||
|
@ -379,7 +403,7 @@ final class ComposeViewModel: NSObject {
|
||||||
.receive(on: DispatchQueue.main)
|
.receive(on: DispatchQueue.main)
|
||||||
.sink(receiveValue: { [weak self] isPollComposing, attachmentServices in
|
.sink(receiveValue: { [weak self] isPollComposing, attachmentServices in
|
||||||
guard let self = self else { return }
|
guard let self = self else { return }
|
||||||
let shouldMediaDisable = isPollComposing || attachmentServices.count >= 4
|
let shouldMediaDisable = isPollComposing || attachmentServices.count >= self.maxMediaAttachments
|
||||||
let shouldPollDisable = attachmentServices.count > 0
|
let shouldPollDisable = attachmentServices.count > 0
|
||||||
|
|
||||||
self.isMediaToolbarButtonEnabled.value = !shouldMediaDisable
|
self.isMediaToolbarButtonEnabled.value = !shouldMediaDisable
|
||||||
|
@ -453,7 +477,7 @@ extension ComposeViewModel {
|
||||||
|
|
||||||
extension ComposeViewModel {
|
extension ComposeViewModel {
|
||||||
func createNewPollOptionIfPossible() {
|
func createNewPollOptionIfPossible() {
|
||||||
guard pollOptionAttributes.value.count < 4 else { return }
|
guard pollOptionAttributes.value.count < maxPollOptions else { return }
|
||||||
|
|
||||||
let attribute = ComposeStatusPollItem.PollOptionAttribute()
|
let attribute = ComposeStatusPollItem.PollOptionAttribute()
|
||||||
pollOptionAttributes.value = pollOptionAttributes.value + [attribute]
|
pollOptionAttributes.value = pollOptionAttributes.value + [attribute]
|
||||||
|
@ -486,7 +510,7 @@ extension ComposeViewModel {
|
||||||
|
|
||||||
// check exclusive limit:
|
// check exclusive limit:
|
||||||
// - up to 1 video
|
// - up to 1 video
|
||||||
// - up to 4 photos
|
// - up to N photos
|
||||||
func checkAttachmentPrecondition() throws {
|
func checkAttachmentPrecondition() throws {
|
||||||
let attachmentServices = self.attachmentServices.value
|
let attachmentServices = self.attachmentServices.value
|
||||||
guard !attachmentServices.isEmpty else { return }
|
guard !attachmentServices.isEmpty else { return }
|
||||||
|
|
|
@ -262,7 +262,7 @@ extension ComposeToolbarView {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static func configureToolbarButtonAppearance(button: UIButton) {
|
private static func configureToolbarButtonAppearance(button: UIButton) {
|
||||||
button.tintColor = Asset.Colors.brandBlue.color
|
button.tintColor = ThemeService.tintColor
|
||||||
button.setBackgroundImage(.placeholder(size: ComposeToolbarView.toolbarButtonSize, color: .systemFill), for: .highlighted)
|
button.setBackgroundImage(.placeholder(size: ComposeToolbarView.toolbarButtonSize, color: .systemFill), for: .highlighted)
|
||||||
button.layer.masksToBounds = true
|
button.layer.masksToBounds = true
|
||||||
button.layer.cornerRadius = 5
|
button.layer.cornerRadius = 5
|
||||||
|
|
|
@ -45,9 +45,10 @@ final class ReplicaStatusView: UIView {
|
||||||
return attributedString
|
return attributedString
|
||||||
}
|
}
|
||||||
|
|
||||||
let headerIconLabel: UILabel = {
|
let headerIconLabel: MetaLabel = {
|
||||||
let label = UILabel()
|
let label = MetaLabel(style: .statusHeader)
|
||||||
label.attributedText = ReplicaStatusView.iconAttributedString(image: ReplicaStatusView.reblogIconImage)
|
let attributedString = StatusView.iconAttributedString(image: StatusView.reblogIconImage)
|
||||||
|
label.configure(attributedString: attributedString)
|
||||||
return label
|
return label
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ class HashtagTimelineViewController: UIViewController, NeedsDependency, MediaPre
|
||||||
|
|
||||||
let composeBarButtonItem: UIBarButtonItem = {
|
let composeBarButtonItem: UIBarButtonItem = {
|
||||||
let barButtonItem = UIBarButtonItem()
|
let barButtonItem = UIBarButtonItem()
|
||||||
barButtonItem.tintColor = Asset.Colors.brandBlue.color
|
// barButtonItem.tintColor = Asset.Colors.brandBlue.color
|
||||||
barButtonItem.image = UIImage(systemName: "square.and.pencil")?.withRenderingMode(.alwaysTemplate)
|
barButtonItem.image = UIImage(systemName: "square.and.pencil")?.withRenderingMode(.alwaysTemplate)
|
||||||
return barButtonItem
|
return barButtonItem
|
||||||
}()
|
}()
|
||||||
|
|
|
@ -89,7 +89,7 @@ extension HashtagTimelineViewModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
diffableDataSource.apply(newSnapshot, animatingDifferences: false) {
|
diffableDataSource.reloadData(snapshot: newSnapshot) {
|
||||||
tableView.scrollToRow(at: difference.targetIndexPath, at: .top, animated: false)
|
tableView.scrollToRow(at: difference.targetIndexPath, at: .top, animated: false)
|
||||||
tableView.contentOffset.y = tableView.contentOffset.y - difference.offset
|
tableView.contentOffset.y = tableView.contentOffset.y - difference.offset
|
||||||
self.isFetchingLatestTimeline.value = false
|
self.isFetchingLatestTimeline.value = false
|
||||||
|
|
|
@ -14,6 +14,7 @@ import CoreDataStack
|
||||||
import FLEX
|
import FLEX
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import MastodonUI
|
import MastodonUI
|
||||||
|
import MastodonSDK
|
||||||
|
|
||||||
extension HomeTimelineViewController {
|
extension HomeTimelineViewController {
|
||||||
var debugMenu: UIMenu {
|
var debugMenu: UIMenu {
|
||||||
|
@ -27,6 +28,7 @@ extension HomeTimelineViewController {
|
||||||
moveMenu,
|
moveMenu,
|
||||||
dropMenu,
|
dropMenu,
|
||||||
miscMenu,
|
miscMenu,
|
||||||
|
notificationMenu,
|
||||||
UIAction(title: "Settings", image: UIImage(systemName: "gear"), attributes: []) { [weak self] action in
|
UIAction(title: "Settings", image: UIImage(systemName: "gear"), attributes: []) { [weak self] action in
|
||||||
guard let self = self else { return }
|
guard let self = self else { return }
|
||||||
self.showSettings(action)
|
self.showSettings(action)
|
||||||
|
@ -175,6 +177,25 @@ extension HomeTimelineViewController {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var notificationMenu: UIMenu {
|
||||||
|
return UIMenu(
|
||||||
|
title: "Notification…",
|
||||||
|
image: UIImage(systemName: "bell.badge"),
|
||||||
|
identifier: nil,
|
||||||
|
options: [],
|
||||||
|
children: [
|
||||||
|
UIAction(title: "Profile", image: UIImage(systemName: "person.badge.plus"), attributes: []) { [weak self] action in
|
||||||
|
guard let self = self else { return }
|
||||||
|
self.showNotification(action, notificationType: .follow)
|
||||||
|
},
|
||||||
|
UIAction(title: "Status", image: UIImage(systemName: "list.bullet.rectangle"), attributes: []) { [weak self] action in
|
||||||
|
guard let self = self else { return }
|
||||||
|
self.showNotification(action, notificationType: .mention)
|
||||||
|
},
|
||||||
|
]
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extension HomeTimelineViewController {
|
extension HomeTimelineViewController {
|
||||||
|
@ -412,6 +433,63 @@ extension HomeTimelineViewController {
|
||||||
coordinator.present(scene: .alertController(alertController: alertController), from: self, transition: .alertController(animated: true, completion: nil))
|
coordinator.present(scene: .alertController(alertController: alertController), from: self, transition: .alertController(animated: true, completion: nil))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func showNotification(_ sender: UIAction, notificationType: Mastodon.Entity.Notification.NotificationType) {
|
||||||
|
guard let authenticationBox = self.context.authenticationService.activeMastodonAuthenticationBox.value else { return }
|
||||||
|
|
||||||
|
let alertController = UIAlertController(title: "Enter notification ID", message: nil, preferredStyle: .alert)
|
||||||
|
alertController.addTextField()
|
||||||
|
|
||||||
|
let showAction = UIAlertAction(title: "Show", style: .default) { [weak self, weak alertController] _ in
|
||||||
|
guard let self = self else { return }
|
||||||
|
guard let textField = alertController?.textFields?.first,
|
||||||
|
let text = textField.text,
|
||||||
|
let notificationID = Int(text)
|
||||||
|
else { return }
|
||||||
|
|
||||||
|
let pushNotification = MastodonPushNotification(
|
||||||
|
_accessToken: authenticationBox.userAuthorization.accessToken,
|
||||||
|
notificationID: notificationID,
|
||||||
|
notificationType: notificationType.rawValue,
|
||||||
|
preferredLocale: nil,
|
||||||
|
icon: nil,
|
||||||
|
title: "",
|
||||||
|
body: ""
|
||||||
|
)
|
||||||
|
self.context.notificationService.requestRevealNotificationPublisher.send(pushNotification)
|
||||||
|
}
|
||||||
|
alertController.addAction(showAction)
|
||||||
|
|
||||||
|
// for multiple accounts debug
|
||||||
|
let boxes = self.context.authenticationService.mastodonAuthenticationBoxes.value // already sorted
|
||||||
|
if boxes.count >= 2 {
|
||||||
|
let accessToken = boxes[1].userAuthorization.accessToken
|
||||||
|
let showForSecondaryAction = UIAlertAction(title: "Show for Secondary", style: .default) { [weak self, weak alertController] _ in
|
||||||
|
guard let self = self else { return }
|
||||||
|
guard let textField = alertController?.textFields?.first,
|
||||||
|
let text = textField.text,
|
||||||
|
let notificationID = Int(text)
|
||||||
|
else { return }
|
||||||
|
|
||||||
|
let pushNotification = MastodonPushNotification(
|
||||||
|
_accessToken: accessToken,
|
||||||
|
notificationID: notificationID,
|
||||||
|
notificationType: notificationType.rawValue,
|
||||||
|
preferredLocale: nil,
|
||||||
|
icon: nil,
|
||||||
|
title: "",
|
||||||
|
body: ""
|
||||||
|
)
|
||||||
|
self.context.notificationService.requestRevealNotificationPublisher.send(pushNotification)
|
||||||
|
}
|
||||||
|
alertController.addAction(showForSecondaryAction)
|
||||||
|
}
|
||||||
|
|
||||||
|
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
|
||||||
|
alertController.addAction(cancelAction)
|
||||||
|
|
||||||
|
self.coordinator.present(scene: .alertController(alertController: alertController), from: self, transition: .alertController(animated: true, completion: nil))
|
||||||
|
}
|
||||||
|
|
||||||
@objc private func showSettings(_ sender: UIAction) {
|
@objc private func showSettings(_ sender: UIAction) {
|
||||||
guard let currentSetting = context.settingService.currentSetting.value else { return }
|
guard let currentSetting = context.settingService.currentSetting.value else { return }
|
||||||
let settingsViewModel = SettingsViewModel(context: context, setting: currentSetting)
|
let settingsViewModel = SettingsViewModel(context: context, setting: currentSetting)
|
||||||
|
|
|
@ -46,14 +46,14 @@ final class HomeTimelineViewController: UIViewController, NeedsDependency, Media
|
||||||
|
|
||||||
let settingBarButtonItem: UIBarButtonItem = {
|
let settingBarButtonItem: UIBarButtonItem = {
|
||||||
let barButtonItem = UIBarButtonItem()
|
let barButtonItem = UIBarButtonItem()
|
||||||
barButtonItem.tintColor = Asset.Colors.brandBlue.color
|
barButtonItem.tintColor = ThemeService.tintColor
|
||||||
barButtonItem.image = UIImage(systemName: "gear")?.withRenderingMode(.alwaysTemplate)
|
barButtonItem.image = UIImage(systemName: "gear")?.withRenderingMode(.alwaysTemplate)
|
||||||
return barButtonItem
|
return barButtonItem
|
||||||
}()
|
}()
|
||||||
|
|
||||||
let composeBarButtonItem: UIBarButtonItem = {
|
let composeBarButtonItem: UIBarButtonItem = {
|
||||||
let barButtonItem = UIBarButtonItem()
|
let barButtonItem = UIBarButtonItem()
|
||||||
barButtonItem.tintColor = Asset.Colors.brandBlue.color
|
barButtonItem.tintColor = ThemeService.tintColor
|
||||||
barButtonItem.image = UIImage(systemName: "square.and.pencil")?.withRenderingMode(.alwaysTemplate)
|
barButtonItem.image = UIImage(systemName: "square.and.pencil")?.withRenderingMode(.alwaysTemplate)
|
||||||
return barButtonItem
|
return barButtonItem
|
||||||
}()
|
}()
|
||||||
|
@ -114,6 +114,24 @@ extension HomeTimelineViewController {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
.store(in: &disposeBag)
|
.store(in: &disposeBag)
|
||||||
|
#if DEBUG
|
||||||
|
// long press to trigger debug menu
|
||||||
|
settingBarButtonItem.menu = debugMenu
|
||||||
|
#else
|
||||||
|
settingBarButtonItem.target = self
|
||||||
|
settingBarButtonItem.action = #selector(HomeTimelineViewController.settingBarButtonItemPressed(_:))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
viewModel.displayComposeBarButtonItem
|
||||||
|
.receive(on: DispatchQueue.main)
|
||||||
|
.sink { [weak self] displayComposeBarButtonItem in
|
||||||
|
guard let self = self else { return }
|
||||||
|
self.navigationItem.rightBarButtonItem = displayComposeBarButtonItem ? self.composeBarButtonItem : nil
|
||||||
|
}
|
||||||
|
.store(in: &disposeBag)
|
||||||
|
composeBarButtonItem.target = self
|
||||||
|
composeBarButtonItem.action = #selector(HomeTimelineViewController.composeBarButtonItemPressed(_:))
|
||||||
|
|
||||||
navigationItem.titleView = titleView
|
navigationItem.titleView = titleView
|
||||||
titleView.delegate = self
|
titleView.delegate = self
|
||||||
|
|
||||||
|
@ -126,18 +144,6 @@ extension HomeTimelineViewController {
|
||||||
}
|
}
|
||||||
.store(in: &disposeBag)
|
.store(in: &disposeBag)
|
||||||
|
|
||||||
#if DEBUG
|
|
||||||
// long press to trigger debug menu
|
|
||||||
settingBarButtonItem.menu = debugMenu
|
|
||||||
#else
|
|
||||||
settingBarButtonItem.target = self
|
|
||||||
settingBarButtonItem.action = #selector(HomeTimelineViewController.settingBarButtonItemPressed(_:))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
navigationItem.rightBarButtonItem = composeBarButtonItem
|
|
||||||
composeBarButtonItem.target = self
|
|
||||||
composeBarButtonItem.action = #selector(HomeTimelineViewController.composeBarButtonItemPressed(_:))
|
|
||||||
|
|
||||||
tableView.refreshControl = refreshControl
|
tableView.refreshControl = refreshControl
|
||||||
refreshControl.addTarget(self, action: #selector(HomeTimelineViewController.refreshControlValueChanged(_:)), for: .valueChanged)
|
refreshControl.addTarget(self, action: #selector(HomeTimelineViewController.refreshControlValueChanged(_:)), for: .valueChanged)
|
||||||
|
|
||||||
|
|
|
@ -119,7 +119,7 @@ extension HomeTimelineViewModel: NSFetchedResultsControllerDelegate {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
diffableDataSource.apply(newSnapshot, animatingDifferences: false) {
|
diffableDataSource.reloadData(snapshot: newSnapshot) {
|
||||||
tableView.scrollToRow(at: difference.targetIndexPath, at: .top, animated: false)
|
tableView.scrollToRow(at: difference.targetIndexPath, at: .top, animated: false)
|
||||||
tableView.contentOffset.y = tableView.contentOffset.y - difference.offset
|
tableView.contentOffset.y = tableView.contentOffset.y - difference.offset
|
||||||
self.isFetchingLatestTimeline.value = false
|
self.isFetchingLatestTimeline.value = false
|
||||||
|
|
|
@ -30,6 +30,8 @@ final class HomeTimelineViewModel: NSObject {
|
||||||
let homeTimelineNavigationBarTitleViewModel: HomeTimelineNavigationBarTitleViewModel
|
let homeTimelineNavigationBarTitleViewModel: HomeTimelineNavigationBarTitleViewModel
|
||||||
let lastAutomaticFetchTimestamp = CurrentValueSubject<Date?, Never>(nil)
|
let lastAutomaticFetchTimestamp = CurrentValueSubject<Date?, Never>(nil)
|
||||||
let scrollPositionRecord = CurrentValueSubject<ScrollPositionRecord?, Never>(nil)
|
let scrollPositionRecord = CurrentValueSubject<ScrollPositionRecord?, Never>(nil)
|
||||||
|
let displaySettingBarButtonItem = CurrentValueSubject<Bool, Never>(true)
|
||||||
|
let displayComposeBarButtonItem = CurrentValueSubject<Bool, Never>(true)
|
||||||
|
|
||||||
weak var contentOffsetAdjustableTimelineViewControllerDelegate: ContentOffsetAdjustableTimelineViewControllerDelegate?
|
weak var contentOffsetAdjustableTimelineViewControllerDelegate: ContentOffsetAdjustableTimelineViewControllerDelegate?
|
||||||
weak var tableView: UITableView?
|
weak var tableView: UITableView?
|
||||||
|
@ -70,7 +72,6 @@ final class HomeTimelineViewModel: NSObject {
|
||||||
let loadMiddleSateMachineList = CurrentValueSubject<[NSManagedObjectID: GKStateMachine], Never>([:]) // TimelineIndex.objectID : middle loading state machine
|
let loadMiddleSateMachineList = CurrentValueSubject<[NSManagedObjectID: GKStateMachine], Never>([:]) // TimelineIndex.objectID : middle loading state machine
|
||||||
var diffableDataSource: UITableViewDiffableDataSource<StatusSection, Item>?
|
var diffableDataSource: UITableViewDiffableDataSource<StatusSection, Item>?
|
||||||
var cellFrameCache = NSCache<NSNumber, NSValue>()
|
var cellFrameCache = NSCache<NSNumber, NSValue>()
|
||||||
let displaySettingBarButtonItem = CurrentValueSubject<Bool, Never>(true)
|
|
||||||
|
|
||||||
init(context: AppContext) {
|
init(context: AppContext) {
|
||||||
self.context = context
|
self.context = context
|
||||||
|
|
|
@ -20,6 +20,8 @@ final class MastodonConfirmEmailViewController: UIViewController, NeedsDependenc
|
||||||
|
|
||||||
var viewModel: MastodonConfirmEmailViewModel!
|
var viewModel: MastodonConfirmEmailViewModel!
|
||||||
|
|
||||||
|
let stackView = UIStackView()
|
||||||
|
|
||||||
let largeTitleLabel: UILabel = {
|
let largeTitleLabel: UILabel = {
|
||||||
let label = UILabel()
|
let label = UILabel()
|
||||||
label.font = UIFontMetrics(forTextStyle: .largeTitle).scaledFont(for: UIFont.systemFont(ofSize: 34, weight: .bold))
|
label.font = UIFontMetrics(forTextStyle: .largeTitle).scaledFont(for: UIFont.systemFont(ofSize: 34, weight: .bold))
|
||||||
|
@ -72,9 +74,10 @@ extension MastodonConfirmEmailViewController {
|
||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
|
|
||||||
setupOnboardingAppearance()
|
setupOnboardingAppearance()
|
||||||
|
configureTitleLabel()
|
||||||
|
configureMargin()
|
||||||
|
|
||||||
// stackView
|
// stackView
|
||||||
let stackView = UIStackView()
|
|
||||||
stackView.axis = .vertical
|
stackView.axis = .vertical
|
||||||
stackView.distribution = .fill
|
stackView.distribution = .fill
|
||||||
stackView.spacing = 10
|
stackView.spacing = 10
|
||||||
|
@ -92,8 +95,8 @@ extension MastodonConfirmEmailViewController {
|
||||||
stackView.translatesAutoresizingMaskIntoConstraints = false
|
stackView.translatesAutoresizingMaskIntoConstraints = false
|
||||||
NSLayoutConstraint.activate([
|
NSLayoutConstraint.activate([
|
||||||
stackView.topAnchor.constraint(equalTo: view.readableContentGuide.topAnchor),
|
stackView.topAnchor.constraint(equalTo: view.readableContentGuide.topAnchor),
|
||||||
stackView.leadingAnchor.constraint(equalTo: view.readableContentGuide.leadingAnchor),
|
stackView.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor),
|
||||||
stackView.trailingAnchor.constraint(equalTo: view.readableContentGuide.trailingAnchor),
|
stackView.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor),
|
||||||
stackView.bottomAnchor.constraint(equalTo: view.readableContentGuide.bottomAnchor),
|
stackView.bottomAnchor.constraint(equalTo: view.readableContentGuide.bottomAnchor),
|
||||||
])
|
])
|
||||||
NSLayoutConstraint.activate([
|
NSLayoutConstraint.activate([
|
||||||
|
@ -139,6 +142,38 @@ extension MastodonConfirmEmailViewController {
|
||||||
.store(in: &self.disposeBag)
|
.store(in: &self.disposeBag)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
|
||||||
|
super.traitCollectionDidChange(previousTraitCollection)
|
||||||
|
|
||||||
|
configureTitleLabel()
|
||||||
|
configureMargin()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
extension MastodonConfirmEmailViewController {
|
||||||
|
private func configureTitleLabel() {
|
||||||
|
switch traitCollection.horizontalSizeClass {
|
||||||
|
case .regular:
|
||||||
|
navigationItem.largeTitleDisplayMode = .always
|
||||||
|
navigationItem.title = L10n.Scene.ConfirmEmail.title.replacingOccurrences(of: "\n", with: " ")
|
||||||
|
largeTitleLabel.isHidden = true
|
||||||
|
default:
|
||||||
|
navigationItem.largeTitleDisplayMode = .never
|
||||||
|
navigationItem.title = nil
|
||||||
|
largeTitleLabel.isHidden = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func configureMargin() {
|
||||||
|
switch traitCollection.horizontalSizeClass {
|
||||||
|
case .regular:
|
||||||
|
let margin = MastodonConfirmEmailViewController.viewEdgeMargin
|
||||||
|
stackView.layoutMargins = UIEdgeInsets(top: 18, left: margin, bottom: 23, right: margin)
|
||||||
|
default:
|
||||||
|
stackView.layoutMargins = UIEdgeInsets(top: 10, left: 0, bottom: 23, right: 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension MastodonConfirmEmailViewController {
|
extension MastodonConfirmEmailViewController {
|
||||||
|
|
|
@ -29,6 +29,8 @@ final class MastodonPickServerViewController: UIViewController, NeedsDependency
|
||||||
private var expandServerDomainSet = Set<String>()
|
private var expandServerDomainSet = Set<String>()
|
||||||
|
|
||||||
private let emptyStateView = PickServerEmptyStateView()
|
private let emptyStateView = PickServerEmptyStateView()
|
||||||
|
private var emptyStateViewLeadingLayoutConstraint: NSLayoutConstraint!
|
||||||
|
private var emptyStateViewTrailingLayoutConstraint: NSLayoutConstraint!
|
||||||
let tableViewTopPaddingView = UIView() // fix empty state view background display when tableView bounce scrolling
|
let tableViewTopPaddingView = UIView() // fix empty state view background display when tableView bounce scrolling
|
||||||
var tableViewTopPaddingViewHeightLayoutConstraint: NSLayoutConstraint!
|
var tableViewTopPaddingViewHeightLayoutConstraint: NSLayoutConstraint!
|
||||||
|
|
||||||
|
@ -52,13 +54,14 @@ final class MastodonPickServerViewController: UIViewController, NeedsDependency
|
||||||
return tableView
|
return tableView
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
let buttonContainer = UIView()
|
||||||
let nextStepButton: PrimaryActionButton = {
|
let nextStepButton: PrimaryActionButton = {
|
||||||
let button = PrimaryActionButton()
|
let button = PrimaryActionButton()
|
||||||
button.setTitle(L10n.Common.Controls.Actions.signUp, for: .normal)
|
button.setTitle(L10n.Common.Controls.Actions.signUp, for: .normal)
|
||||||
button.translatesAutoresizingMaskIntoConstraints = false
|
button.translatesAutoresizingMaskIntoConstraints = false
|
||||||
return button
|
return button
|
||||||
}()
|
}()
|
||||||
var nextStepButtonBottomLayoutConstraint: NSLayoutConstraint!
|
var buttonContainerBottomLayoutConstraint: NSLayoutConstraint!
|
||||||
|
|
||||||
var mastodonAuthenticationController: MastodonAuthenticationController?
|
var mastodonAuthenticationController: MastodonAuthenticationController?
|
||||||
|
|
||||||
|
@ -77,6 +80,8 @@ extension MastodonPickServerViewController {
|
||||||
|
|
||||||
setupOnboardingAppearance()
|
setupOnboardingAppearance()
|
||||||
defer { setupNavigationBarBackgroundView() }
|
defer { setupNavigationBarBackgroundView() }
|
||||||
|
configureTitleLabel()
|
||||||
|
configureMargin()
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(systemName: "ellipsis.circle"), style: .plain, target: nil, action: nil)
|
navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(systemName: "ellipsis.circle"), style: .plain, target: nil, action: nil)
|
||||||
|
@ -89,14 +94,24 @@ extension MastodonPickServerViewController {
|
||||||
navigationItem.rightBarButtonItem?.menu = UIMenu(title: "Debug Tool", image: nil, identifier: nil, options: [], children: children)
|
navigationItem.rightBarButtonItem?.menu = UIMenu(title: "Debug Tool", image: nil, identifier: nil, options: [], children: children)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
view.addSubview(nextStepButton)
|
buttonContainer.translatesAutoresizingMaskIntoConstraints = false
|
||||||
nextStepButtonBottomLayoutConstraint = view.bottomAnchor.constraint(equalTo: nextStepButton.bottomAnchor, constant: 0).priority(.defaultHigh)
|
buttonContainer.preservesSuperviewLayoutMargins = true
|
||||||
|
view.addSubview(buttonContainer)
|
||||||
|
buttonContainerBottomLayoutConstraint = view.bottomAnchor.constraint(equalTo: buttonContainer.bottomAnchor, constant: 0).priority(.defaultHigh)
|
||||||
NSLayoutConstraint.activate([
|
NSLayoutConstraint.activate([
|
||||||
nextStepButton.leadingAnchor.constraint(equalTo: view.readableContentGuide.leadingAnchor, constant: MastodonPickServerViewController.actionButtonMargin),
|
buttonContainer.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||||
view.readableContentGuide.trailingAnchor.constraint(equalTo: nextStepButton.trailingAnchor, constant: MastodonPickServerViewController.actionButtonMargin),
|
buttonContainer.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||||
|
view.safeAreaLayoutGuide.bottomAnchor.constraint(greaterThanOrEqualTo: buttonContainer.bottomAnchor, constant: WelcomeViewController.viewBottomPaddingHeight),
|
||||||
|
buttonContainerBottomLayoutConstraint,
|
||||||
|
])
|
||||||
|
|
||||||
|
view.addSubview(nextStepButton)
|
||||||
|
NSLayoutConstraint.activate([
|
||||||
|
nextStepButton.topAnchor.constraint(equalTo: buttonContainer.topAnchor),
|
||||||
|
nextStepButton.leadingAnchor.constraint(equalTo: buttonContainer.layoutMarginsGuide.leadingAnchor),
|
||||||
|
buttonContainer.layoutMarginsGuide.trailingAnchor.constraint(equalTo: nextStepButton.trailingAnchor),
|
||||||
|
nextStepButton.bottomAnchor.constraint(equalTo: buttonContainer.bottomAnchor),
|
||||||
nextStepButton.heightAnchor.constraint(equalToConstant: MastodonPickServerViewController.actionButtonHeight).priority(.defaultHigh),
|
nextStepButton.heightAnchor.constraint(equalToConstant: MastodonPickServerViewController.actionButtonHeight).priority(.defaultHigh),
|
||||||
view.safeAreaLayoutGuide.bottomAnchor.constraint(greaterThanOrEqualTo: nextStepButton.bottomAnchor, constant: WelcomeViewController.viewBottomPaddingHeight),
|
|
||||||
nextStepButtonBottomLayoutConstraint,
|
|
||||||
])
|
])
|
||||||
|
|
||||||
// fix AutoLayout warning when observe before view appear
|
// fix AutoLayout warning when observe before view appear
|
||||||
|
@ -127,16 +142,18 @@ extension MastodonPickServerViewController {
|
||||||
tableView.topAnchor.constraint(equalTo: view.topAnchor),
|
tableView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||||
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||||
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||||
nextStepButton.topAnchor.constraint(equalTo: tableView.bottomAnchor, constant: 7),
|
buttonContainer.topAnchor.constraint(equalTo: tableView.bottomAnchor, constant: 7),
|
||||||
])
|
])
|
||||||
|
|
||||||
emptyStateView.translatesAutoresizingMaskIntoConstraints = false
|
emptyStateView.translatesAutoresizingMaskIntoConstraints = false
|
||||||
view.addSubview(emptyStateView)
|
view.addSubview(emptyStateView)
|
||||||
|
emptyStateViewLeadingLayoutConstraint = emptyStateView.leadingAnchor.constraint(equalTo: tableView.leadingAnchor)
|
||||||
|
emptyStateViewTrailingLayoutConstraint = tableView.trailingAnchor.constraint(equalTo: emptyStateView.trailingAnchor)
|
||||||
NSLayoutConstraint.activate([
|
NSLayoutConstraint.activate([
|
||||||
emptyStateView.topAnchor.constraint(equalTo: view.topAnchor),
|
emptyStateView.topAnchor.constraint(equalTo: view.topAnchor),
|
||||||
emptyStateView.leadingAnchor.constraint(equalTo: tableView.readableContentGuide.leadingAnchor),
|
emptyStateViewLeadingLayoutConstraint,
|
||||||
emptyStateView.trailingAnchor.constraint(equalTo: tableView.readableContentGuide.trailingAnchor),
|
emptyStateViewTrailingLayoutConstraint,
|
||||||
nextStepButton.topAnchor.constraint(equalTo: emptyStateView.bottomAnchor, constant: 21),
|
buttonContainer.topAnchor.constraint(equalTo: emptyStateView.bottomAnchor, constant: 21),
|
||||||
])
|
])
|
||||||
view.sendSubviewToBack(emptyStateView)
|
view.sendSubviewToBack(emptyStateView)
|
||||||
|
|
||||||
|
@ -154,18 +171,18 @@ extension MastodonPickServerViewController {
|
||||||
|
|
||||||
// guard external keyboard connected
|
// guard external keyboard connected
|
||||||
guard isShow, state == .dock, GCKeyboard.coalesced != nil else {
|
guard isShow, state == .dock, GCKeyboard.coalesced != nil else {
|
||||||
self.nextStepButtonBottomLayoutConstraint.constant = WelcomeViewController.viewBottomPaddingHeight
|
self.buttonContainerBottomLayoutConstraint.constant = WelcomeViewController.viewBottomPaddingHeight
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
let externalKeyboardToolbarHeight = self.view.frame.maxY - endFrame.minY
|
let externalKeyboardToolbarHeight = self.view.frame.maxY - endFrame.minY
|
||||||
guard externalKeyboardToolbarHeight > 0 else {
|
guard externalKeyboardToolbarHeight > 0 else {
|
||||||
self.nextStepButtonBottomLayoutConstraint.constant = WelcomeViewController.viewBottomPaddingHeight
|
self.buttonContainerBottomLayoutConstraint.constant = WelcomeViewController.viewBottomPaddingHeight
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
UIView.animate(withDuration: 0.3) {
|
UIView.animate(withDuration: 0.3) {
|
||||||
self.nextStepButtonBottomLayoutConstraint.constant = externalKeyboardToolbarHeight + 16
|
self.buttonContainerBottomLayoutConstraint.constant = externalKeyboardToolbarHeight + 16
|
||||||
self.view.layoutIfNeeded()
|
self.view.layoutIfNeeded()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -274,7 +291,32 @@ extension MastodonPickServerViewController {
|
||||||
viewModel.viewWillAppear.send()
|
viewModel.viewWillAppear.send()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
|
||||||
|
super.traitCollectionDidChange(previousTraitCollection)
|
||||||
|
|
||||||
|
setupNavigationBarAppearance()
|
||||||
|
updateEmptyStateViewLayout()
|
||||||
|
configureTitleLabel()
|
||||||
|
configureMargin()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
extension MastodonPickServerViewController {
|
||||||
|
private func configureTitleLabel() {
|
||||||
|
guard UIDevice.current.userInterfaceIdiom == .pad else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
switch traitCollection.horizontalSizeClass {
|
||||||
|
case .regular:
|
||||||
|
navigationItem.largeTitleDisplayMode = .always
|
||||||
|
navigationItem.title = L10n.Scene.ServerPicker.title.replacingOccurrences(of: "\n", with: " ")
|
||||||
|
default:
|
||||||
|
navigationItem.largeTitleDisplayMode = .never
|
||||||
|
navigationItem.title = nil
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extension MastodonPickServerViewController {
|
extension MastodonPickServerViewController {
|
||||||
|
@ -426,43 +468,6 @@ extension MastodonPickServerViewController: UITableViewDelegate {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
|
|
||||||
let headerView = UIView()
|
|
||||||
headerView.backgroundColor = Asset.Theme.Mastodon.systemGroupedBackground.color
|
|
||||||
return headerView
|
|
||||||
}
|
|
||||||
|
|
||||||
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
|
|
||||||
guard let diffableDataSource = viewModel.diffableDataSource else {
|
|
||||||
return .leastNonzeroMagnitude
|
|
||||||
}
|
|
||||||
let sections = diffableDataSource.snapshot().sectionIdentifiers
|
|
||||||
let section = sections[section]
|
|
||||||
switch section {
|
|
||||||
case .header:
|
|
||||||
return 20
|
|
||||||
case .category:
|
|
||||||
// Since category view has a blur shadow effect, its height need to be large than the actual height,
|
|
||||||
// Thus we reduce the section header's height by 10, and make the category cell height 60+20(10 inset for top and bottom)
|
|
||||||
return 10
|
|
||||||
case .search:
|
|
||||||
// Same reason as above
|
|
||||||
return 10
|
|
||||||
case .servers:
|
|
||||||
return .leastNonzeroMagnitude
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
|
|
||||||
let footerView = UIView()
|
|
||||||
footerView.backgroundColor = .yellow
|
|
||||||
return footerView
|
|
||||||
}
|
|
||||||
|
|
||||||
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
|
|
||||||
return .leastNonzeroMagnitude
|
|
||||||
}
|
|
||||||
|
|
||||||
func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? {
|
func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? {
|
||||||
guard let diffableDataSource = viewModel.diffableDataSource else { return nil }
|
guard let diffableDataSource = viewModel.diffableDataSource else { return nil }
|
||||||
guard let item = diffableDataSource.itemIdentifier(for: indexPath) else { return nil }
|
guard let item = diffableDataSource.itemIdentifier(for: indexPath) else { return nil }
|
||||||
|
@ -521,6 +526,26 @@ extension MastodonPickServerViewController {
|
||||||
let rectInTableView = tableView.rectForRow(at: indexPath)
|
let rectInTableView = tableView.rectForRow(at: indexPath)
|
||||||
|
|
||||||
emptyStateView.topPaddingViewTopLayoutConstraint.constant = rectInTableView.maxY
|
emptyStateView.topPaddingViewTopLayoutConstraint.constant = rectInTableView.maxY
|
||||||
|
|
||||||
|
switch traitCollection.horizontalSizeClass {
|
||||||
|
case .regular:
|
||||||
|
emptyStateViewLeadingLayoutConstraint.constant = MastodonPickServerViewController.viewEdgeMargin
|
||||||
|
emptyStateViewTrailingLayoutConstraint.constant = MastodonPickServerViewController.viewEdgeMargin
|
||||||
|
default:
|
||||||
|
let margin = tableView.layoutMarginsGuide.layoutFrame.origin.x
|
||||||
|
emptyStateViewLeadingLayoutConstraint.constant = margin
|
||||||
|
emptyStateViewTrailingLayoutConstraint.constant = margin
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func configureMargin() {
|
||||||
|
switch traitCollection.horizontalSizeClass {
|
||||||
|
case .regular:
|
||||||
|
let margin = MastodonPickServerViewController.viewEdgeMargin
|
||||||
|
buttonContainer.layoutMargins = UIEdgeInsets(top: 0, left: margin, bottom: 0, right: margin)
|
||||||
|
default:
|
||||||
|
buttonContainer.layoutMargins = .zero
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue