Release v1.3.0 (#347)

* New translations app.json (Thai)

* New translations app.json (Spanish)

* New translations Localizable.stringsdict (Spanish)

* New translations app.json (Thai)

* New translations app.json (Thai)

* feat: adapt the app to async & await. Update timeline UI

* fix: update the Xcode version to fix the CI failure

* fix: remove unavailable framework import

* fix: project dependency issue

* feat: add content warning for post spoiler

* feat: add content warning for post media

* chore: update version to 1.3.0 (92)

* New translations app.json (French)

* New translations Intents.strings (French)

* New translations app.json (Thai)

* feat: update report flow

* feat: update setting scene UI

* feat: update status content warning UI

* feat: add notification gap fetcher

* chore: update version to 1.3.0 (93)

* feat: add video player for audio/video kind media

* chore: update version to 1.3.0 (94)

* fix: text strip wrong color in the Dark Mode issue

* chore: remove spoiler toggle animation for table cell

* fix: add missing shadow for compose publish button

* fix: add missing margin for timeline with horizontal regular size class

* fix: profile segmented controls missing margin issue

* fix: the profile segmented control use wrong selection tint color under force light UI style issue

* fix: add notification count clear logic back

* fix: add missing home timeline bottom fetcher

* fix: [WIP] add suggestion account scene back

* New translations app.json (Kabyle)

* New translations ios-infoPlist.json (Kabyle)

* New translations Localizable.stringsdict (Kabyle)

* New translations Intents.strings (Kabyle)

* New translations Intents.stringsdict (Kabyle)

* feat: make the home timeline readable for VoiceOver

* chore: update version to 1.3.0 (95)

* New translations app.json (French)

* New translations Intents.strings (French)

* New translations app.json (Kabyle)

* New translations ios-infoPlist.json (Kabyle)

* New translations Localizable.stringsdict (Kabyle)

* New translations Intents.strings (Kabyle)

* New translations Intents.stringsdict (Kabyle)

* New translations Localizable.stringsdict (French)

* New translations app.json (Kabyle)

* New translations app.json (French)

* chore: update action toolbar icons

* fix: instal state missing issue

* fix: follow push notification deep-link not works issue

* fix: foreground notification not trigger tab bell icon update issue

* feat: add notification timeline fetcher

* feat: add content warning toggle button

* chore: update version to 1.3.0 (96)

* New translations app.json (Thai)

* New translations app.json (Russian)

* New translations app.json (Kurmanji (Kurdish))

* New translations app.json (Scottish Gaelic)

* New translations app.json (Welsh)

* New translations app.json (Hindi)

* New translations app.json (Spanish, Argentina)

* New translations app.json (Indonesian)

* New translations app.json (Portuguese, Brazilian)

* New translations app.json (English)

* New translations app.json (Chinese Traditional)

* New translations app.json (Chinese Simplified)

* New translations app.json (Swedish)

* New translations app.json (Portuguese)

* New translations app.json (Dutch)

* New translations app.json (Korean)

* New translations app.json (Japanese)

* New translations app.json (Basque)

* New translations app.json (German)

* New translations app.json (Danish)

* New translations app.json (Catalan)

* New translations app.json (Arabic)

* New translations app.json (Spanish)

* New translations app.json (Romanian)

* New translations app.json (Kabyle)

* New translations app.json (French)

* New translations app.json (Swedish, Finland)

* New translations app.json (Spanish, Argentina)

* New translations app.json (Kurmanji (Kurdish))

* fix: notification i18n word typo

* New translations app.json (Thai)

* New translations app.json (Swedish)

* New translations Localizable.stringsdict (Swedish)

* New translations app.json (Swedish, Finland)

* New translations app.json (Kurmanji (Kurdish))

* New translations app.json (Scottish Gaelic)

* New translations app.json (Welsh)

* New translations app.json (Hindi)

* New translations app.json (Indonesian)

* New translations app.json (Portuguese, Brazilian)

* New translations app.json (English)

* New translations app.json (Chinese Traditional)

* New translations app.json (Chinese Simplified)

* New translations app.json (Russian)

* New translations app.json (Portuguese)

* New translations app.json (Dutch)

* New translations app.json (Korean)

* New translations app.json (Japanese)

* New translations app.json (Basque)

* New translations app.json (German)

* New translations app.json (Danish)

* New translations app.json (Catalan)

* New translations app.json (Arabic)

* New translations app.json (Spanish)

* New translations app.json (Romanian)

* New translations app.json (Kabyle)

* New translations app.json (French)

* New translations Intents.strings (Swedish)

* New translations app.json (Swedish)

* New translations Localizable.stringsdict (Japanese)

* New translations app.json (Thai)

* New translations app.json (Thai)

* New translations Localizable.stringsdict (Swedish)

* New translations app.json (Kabyle)

* New translations ios-infoPlist.json (Kabyle)

* New translations app.json (Kabyle)

* New translations app.json (French)

* New translations app.json (French)

* feat: restore scroll-to-top tap gesture for TabBar

* feat: add cell height cache for user timeline

* feat: display no results when profile field empty

* New translations app.json (Chinese Traditional)

* New translations app.json (Chinese Traditional)

* New translations Intents.strings (Japanese)

* feat: make status detail accessible

* chore: restore the appearance settings

* chore: update version to 1.3.0 (97)

* New translations app.json (Kabyle)

* New translations Intents.strings (Japanese)

* New translations app.json (Swedish)

* New translations app.json (Basque)

* New translations app.json (Basque)

* chore: add a11y hint for profile dashboard

* feat: add media interaction for notification timeline

* New translations app.json (Chinese Simplified)

* New translations app.json (Chinese Simplified)

* chore: update i18n strings

* fix: setting switch use wrong tint color issue

* chore: restore RTL layout for post content

* chore: update profile relationship button UI

* chore: update color panel

* fix: post reblog header may display empty reblogger name issue

* fix: wrong reply header redirect logic issue

* feat: restore post filter supports

* chore: update version to 1.3.0 (98)

* chore: update post content sensitive style

* fix: blurhash image not display during image loading issue

* chore: update version to 1.3.0 (99)

* feat: restore user recommend scene

* chore: update badge tint color

* feat: restore keyboard shortcut supports

* chore: update version to 1.3.0 (100)

* fix: relationship background use wrong color when force dark style

* fix: player button icon not reset issue

* chore: update version to 1.3.0 (101)

* fix: profile relationship button fill the width on iPad issue

* fix: inputAssistantItem duplicate setup issue

* chore: update textView minimum height from 88 to 64

* chore: update version to 1.3.0 (102)

* chore: update status timeline margin

* chore: update sidebar background color

* fix: split view column state after size class transition not stable issue

* chore: update notification timeline margin

* chore: update profile header and segmented bar margin

* fix: profile segmented bar use wrong tint color when force Dark Mode issue

* chore: update horizontal compact mode notification timeline margin looks like

* chore: update version to 1.3.0 (103)

* feat: dismiss image preview when tap empty area

* chore: update version to 1.3.0 (104)

* New translations app.json (Italian)

* New translations ios-infoPlist.json (Italian)

* New translations Localizable.stringsdict (Italian)

* New translations Intents.strings (Italian)

* New translations Intents.stringsdict (Italian)

* New translations app.json (Kabyle)

* New translations app.json (Kabyle)

* New translations app.json (Kabyle)

* New translations app.json (Kabyle)

* New translations app.json (Kabyle)

* New translations app.json (Kabyle)

* New translations app.json (Japanese)

* New translations app.json (Kabyle)

* New translations app.json (Kabyle)

* New translations app.json (Kabyle)

* New translations app.json (Kabyle)

* New translations app.json (Kabyle)

* New translations app.json (Kabyle)

* New translations app.json (Kabyle)

* New translations app.json (Spanish)

* New translations app.json (Kabyle)

* New translations app.json (Kabyle)

* New translations app.json (Kabyle)

* New translations ios-infoPlist.json (Kabyle)

* New translations Localizable.stringsdict (Kabyle)

* New translations Localizable.stringsdict (Kabyle)

* New translations Intents.strings (Kabyle)

* New translations app.json (Kabyle)

* New translations Intents.strings (Kabyle)

* New translations Intents.stringsdict (Kabyle)

* New translations app.json (Kabyle)

* New translations app.json (Scottish Gaelic)

* New translations app.json (Scottish Gaelic)

* New translations app.json (Thai)

* New translations app.json (Thai)

* feat: add UITests for snapshots

* feat: add snapshot UITest and document

* New translations app.json (Thai)

* feat: add notification snapshot

* chore: add domain and update guide for the snapshot UITest

* chore: use the first photo for compose snapshot

* New translations app.json (Thai)

* New translations app.json (German)

* New translations app.json (German)

* chore: update settings scene UI

* chore: update i18n for open link words

* chore: update i18n resources

* fix: share extension not accept plaintext content issue. resolve #335

* chore: update version to 1.3.0 (105)

* New translations app.json (Japanese)

* New translations app.json (Japanese)

* New translations app.json (Japanese)

* feat: add onion domain ATS exception rule. resolve #338

* chore: update app version footer and i18n strings

* chore: update version to 1.3.0 (106)

* chore: update version to 1.3.0 (108)

* Handle onboarding authentication errors in /api/v1/instance

* New translations app.json (Kurmanji (Kurdish))

* New translations app.json (Kurmanji (Kurdish))

* chore: update Xcode schemes index

* chore: update the snapshot documents and UITests

* chore: update i18n resources. resolve #343

* chore: retain the API model semantic

* fix: force LTR for some text fields. #318

* fix: textView break IME input issue. resolve #342

* chore: update version to 1.3.0 (109)

* chore: update README

* chore: fix typo

* chore: add bug report template and contributing document

Co-authored-by: Eugen Rochko <eugen@zeonfederated.com>
Co-authored-by: Zac West <zacwest@gmail.com>
This commit is contained in:
CMK 2022-03-29 17:51:14 +08:00 committed by GitHub
parent feb748676f
commit 6153839157
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
993 changed files with 47043 additions and 36508 deletions

62
.github/ISSUE_TEMPLATE/bug.yaml vendored Normal file
View File

@ -0,0 +1,62 @@
name: 🐞 Bug
description: File a bug/issue
title: "[BUG] <title>"
labels: [Bug, Needs Triage]
body:
- type: checkboxes
attributes:
label: Is there an existing issue for this?
description: Please search to see if an issue already exists for the bug you encountered.
options:
- label: I have searched the existing issues
required: true
- type: textarea
attributes:
label: Current Behavior
description: A concise description of what you're experiencing.
validations:
required: false
- type: textarea
attributes:
label: Expected Behavior
description: A concise description of what you expected to happen.
validations:
required: false
- type: textarea
attributes:
label: Steps To Reproduce
description: Steps to reproduce the behavior.
placeholder: |
1. In this environment...
2. With this config...
3. Tap '...'
4. See error...
validations:
required: false
- type: textarea
attributes:
label: Environment
description: |
You can check the version and build number in the bottom of in-app settings.
examples:
- **Device**: iPhone X
- **OS**: iOS 15.3
- **Version**: v1.3.0
- **Build**: 103
value: |
- Device:
- OS:
- Version:
- Build:
render: markdown
validations:
required: false
- type: textarea
attributes:
label: Anything else?
description: |
The server domain? Post links? Anything that will give us more context about the issue you are encountering!
Tip: You can attach images or video or log files by clicking this area to highlight it and then dragging files in.
validations:
required: false

View File

@ -1,32 +0,0 @@
## Description
<!--Brief description for bug-->
## App version
> You can check the version and build number in app setting footer.
<!--Version Code here-->
- Version: v0.0.0
- Build: 0
## Detail
### Steps to reproduce
<!--How to reproduce this bug?-->
1. Tap …
2. …
### Actual Behavior
<!--What happened?-->
The app …
### Expected behavior
<!--What is the expected behavior-->
The app …

View File

@ -7,7 +7,6 @@ set -eo pipefail
xcodebuild -workspace Mastodon.xcworkspace \ xcodebuild -workspace Mastodon.xcworkspace \
-scheme Mastodon \ -scheme Mastodon \
-disableAutomaticPackageResolution \
-destination "platform=iOS Simulator,name=iPhone SE (2nd generation)" \ -destination "platform=iOS Simulator,name=iPhone SE (2nd generation)" \
clean \ clean \
build | xcpretty build | xcpretty

View File

@ -19,8 +19,8 @@ jobs:
steps: steps:
- name: checkout - name: checkout
uses: actions/checkout@v2 uses: actions/checkout@v2
- name: force Xcode 13.1 - name: force Xcode 13.2.1
run: sudo xcode-select -switch /Applications/Xcode_13.1.app run: sudo xcode-select -switch /Applications/Xcode_13.2.1.app
- name: setup - name: setup
run: exec ./.github/scripts/setup.sh run: exec ./.github/scripts/setup.sh
- name: build - name: build

View File

@ -11,6 +11,10 @@ import CryptoKit
import KeychainAccess import KeychainAccess
import Keys import Keys
enum AppName {
public static let groupID = "group.org.joinmastodon.app"
}
public final class AppSecret { public final class AppSecret {
public static let keychain = Keychain(service: "org.joinmastodon.app.keychain", accessGroup: AppName.groupID) public static let keychain = Keychain(service: "org.joinmastodon.app.keychain", accessGroup: AppName.groupID)

View File

@ -15,8 +15,8 @@
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string> <string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>1.2.0</string> <string>1.3.0</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>88</string> <string>109</string>
</dict> </dict>
</plist> </plist>

View File

@ -6,6 +6,7 @@
// //
import UIKit import UIKit
import MastodonCommon
extension UserDefaults { extension UserDefaults {
public static let shared = UserDefaults(suiteName: AppName.groupID)! public static let shared = UserDefaults(suiteName: AppName.groupID)!

View File

@ -0,0 +1,34 @@
{
"configurations" : [
{
"id" : "E27ADCCD-D2DF-4255-81D1-21CFC3C33254",
"name" : "Configuration 1",
"options" : {
}
}
],
"defaultOptions" : {
"defaultTestExecutionTimeAllowance" : 1800,
"testTimeoutsEnabled" : true
},
"testTargets" : [
{
"selectedTests" : [
"MastodonUISnapshotTests\/testSmoke()",
"MastodonUISnapshotTests\/testSnapshotCompose()",
"MastodonUISnapshotTests\/testSnapshotHome()",
"MastodonUISnapshotTests\/testSnapshotProfile()",
"MastodonUISnapshotTests\/testSnapshotSearch()",
"MastodonUISnapshotTests\/testSnapshotServerRules()",
"MastodonUISnapshotTests\/testSnapshotThread()"
],
"target" : {
"containerPath" : "container:Mastodon.xcodeproj",
"identifier" : "DB427DF225BAA00100D1B89D",
"name" : "MastodonUITests"
}
}
],
"version" : 1
}

View File

@ -1,18 +0,0 @@
//
// CoreDataStack.h
// CoreDataStack
//
// Created by MainasuK Cirno on 2021/1/27.
//
#import <Foundation/Foundation.h>
//! Project version number for CoreDataStack.
FOUNDATION_EXPORT double CoreDataStackVersionNumber;
//! Project version string for CoreDataStack.
FOUNDATION_EXPORT const unsigned char CoreDataStackVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <CoreDataStack/PublicHeader.h>

View File

@ -1,126 +0,0 @@
//
// Attachment.swift
// CoreDataStack
//
// Created by MainasuK Cirno on 2021-2-23.
//
import CoreData
import Foundation
public final class Attachment: NSManagedObject {
public typealias ID = String
@NSManaged public private(set) var id: ID
@NSManaged public private(set) var domain: String
@NSManaged public private(set) var typeRaw: String
@NSManaged public private(set) var url: String
@NSManaged public private(set) var previewURL: String?
@NSManaged public private(set) var remoteURL: String?
@NSManaged public private(set) var metaData: Data?
@NSManaged public private(set) var textURL: String?
@NSManaged public private(set) var descriptionString: String?
@NSManaged public private(set) var blurhash: String?
@NSManaged public private(set) var createdAt: Date
@NSManaged public private(set) var updatedAt: Date
@NSManaged public private(set) var index: NSNumber
// many-to-one relationship
@NSManaged public private(set) var status: Status?
}
public extension Attachment {
override func awakeFromInsert() {
super.awakeFromInsert()
setPrimitiveValue(Date(), forKey: #keyPath(Attachment.createdAt))
}
@discardableResult
static func insert(
into context: NSManagedObjectContext,
property: Property
) -> Attachment {
let attachment: Attachment = context.insertObject()
attachment.domain = property.domain
attachment.index = property.index
attachment.id = property.id
attachment.typeRaw = property.typeRaw
attachment.url = property.url
attachment.previewURL = property.previewURL
attachment.remoteURL = property.remoteURL
attachment.metaData = property.metaData
attachment.textURL = property.textURL
attachment.descriptionString = property.descriptionString
attachment.blurhash = property.blurhash
attachment.updatedAt = property.networkDate
return attachment
}
func didUpdate(at networkDate: Date) {
self.updatedAt = networkDate
}
}
public extension Attachment {
struct Property {
public let domain: String
public let index: NSNumber
public let id: ID
public let typeRaw: String
public let url: String
public let previewURL: String?
public let remoteURL: String?
public let metaData: Data?
public let textURL: String?
public let descriptionString: String?
public let blurhash: String?
public let networkDate: Date
public init(
domain: String,
index: Int,
id: Attachment.ID,
typeRaw: String,
url: String,
previewURL: String?,
remoteURL: String?,
metaData: Data?,
textURL: String?,
descriptionString: String?,
blurhash: String?,
networkDate: Date
) {
self.domain = domain
self.index = NSNumber(value: index)
self.id = id
self.typeRaw = typeRaw
self.url = url
self.previewURL = previewURL
self.remoteURL = remoteURL
self.metaData = metaData
self.textURL = textURL
self.descriptionString = descriptionString
self.blurhash = blurhash
self.networkDate = networkDate
}
}
}
extension Attachment: Managed {
public static var defaultSortDescriptors: [NSSortDescriptor] {
return [NSSortDescriptor(keyPath: \Attachment.createdAt, ascending: false)]
}
}

View File

@ -1,102 +0,0 @@
//
// HomeTimelineIndex.swift
// CoreDataStack
//
// Created by MainasuK Cirno on 2021/1/27.
//
import Foundation
import CoreData
final public class HomeTimelineIndex: NSManagedObject {
public typealias ID = String
@NSManaged public private(set) var identifier: ID
@NSManaged public private(set) var domain: String
@NSManaged public private(set) var userID: String
@NSManaged public private(set) var hasMore: Bool // default NO
@NSManaged public private(set) var createdAt: Date
@NSManaged public private(set) var deletedAt: Date?
// many-to-one relationship
@NSManaged public private(set) var status: Status
}
extension HomeTimelineIndex {
@discardableResult
public static func insert(
into context: NSManagedObjectContext,
property: Property,
status: Status
) -> HomeTimelineIndex {
let index: HomeTimelineIndex = context.insertObject()
index.identifier = property.identifier
index.domain = property.domain
index.userID = property.userID
index.createdAt = status.createdAt
index.status = status
return index
}
public func update(hasMore: Bool) {
if self.hasMore != hasMore {
self.hasMore = hasMore
}
}
// internal method for status call
func softDelete() {
deletedAt = Date()
}
}
extension HomeTimelineIndex {
public struct Property {
public let identifier: String
public let domain: String
public let userID: String
public init(domain: String, userID: String) {
self.identifier = UUID().uuidString + "@" + domain
self.domain = domain
self.userID = userID
}
}
}
extension HomeTimelineIndex: Managed {
public static var defaultSortDescriptors: [NSSortDescriptor] {
return [NSSortDescriptor(keyPath: \HomeTimelineIndex.createdAt, ascending: false)]
}
}
extension HomeTimelineIndex {
static func predicate(domain: String) -> NSPredicate {
return NSPredicate(format: "%K == %@", #keyPath(HomeTimelineIndex.domain), domain)
}
static func predicate(userID: MastodonUser.ID) -> NSPredicate {
return NSPredicate(format: "%K == %@", #keyPath(HomeTimelineIndex.userID), userID)
}
public static func predicate(domain: String, userID: MastodonUser.ID) -> NSPredicate {
return NSCompoundPredicate(andPredicateWithSubpredicates: [
predicate(domain: domain),
predicate(userID: userID)
])
}
public static func notDeleted() -> NSPredicate {
return NSPredicate(format: "%K == nil", #keyPath(HomeTimelineIndex.deletedAt))
}
}

View File

@ -1,407 +0,0 @@
//
// MastodonUser.swift
// CoreDataStack
//
// Created by MainasuK Cirno on 2021/1/27.
//
import CoreData
import Foundation
final public class MastodonUser: NSManagedObject {
public typealias ID = String
@NSManaged public private(set) var identifier: ID
@NSManaged public private(set) var domain: String
@NSManaged public private(set) var id: ID
@NSManaged public private(set) var acct: String
@NSManaged public private(set) var username: String
@NSManaged public private(set) var displayName: String
@NSManaged public private(set) var avatar: String
@NSManaged public private(set) var avatarStatic: String?
@NSManaged public private(set) var header: String
@NSManaged public private(set) var headerStatic: String?
@NSManaged public private(set) var note: String?
@NSManaged public private(set) var url: String?
@NSManaged public private(set) var emojisData: Data?
@NSManaged public private(set) var fieldsData: Data?
@NSManaged public private(set) var statusesCount: NSNumber
@NSManaged public private(set) var followingCount: NSNumber
@NSManaged public private(set) var followersCount: NSNumber
@NSManaged public private(set) var locked: Bool
@NSManaged public private(set) var bot: Bool
@NSManaged public private(set) var suspended: Bool
@NSManaged public private(set) var createdAt: Date
@NSManaged public private(set) var updatedAt: Date
// one-to-one relationship
@NSManaged public private(set) var pinnedStatus: Status?
@NSManaged public private(set) var mastodonAuthentication: MastodonAuthentication?
// one-to-many relationship
@NSManaged public private(set) var statuses: Set<Status>?
@NSManaged public private(set) var notifications: Set<MastodonNotification>?
@NSManaged public private(set) var searchHistories: Set<SearchHistory>
// many-to-many relationship
@NSManaged public private(set) var favourite: Set<Status>?
@NSManaged public private(set) var reblogged: Set<Status>?
@NSManaged public private(set) var muted: Set<Status>?
@NSManaged public private(set) var bookmarked: Set<Status>?
@NSManaged public private(set) var votePollOptions: Set<PollOption>?
@NSManaged public private(set) var votePolls: Set<Poll>?
// relationships
@NSManaged public private(set) var following: Set<MastodonUser>?
@NSManaged public private(set) var followingBy: Set<MastodonUser>?
@NSManaged public private(set) var followRequested: Set<MastodonUser>?
@NSManaged public private(set) var followRequestedBy: Set<MastodonUser>?
@NSManaged public private(set) var muting: Set<MastodonUser>?
@NSManaged public private(set) var mutingBy: Set<MastodonUser>?
@NSManaged public private(set) var blocking: Set<MastodonUser>?
@NSManaged public private(set) var blockingBy: Set<MastodonUser>?
@NSManaged public private(set) var endorsed: Set<MastodonUser>?
@NSManaged public private(set) var endorsedBy: Set<MastodonUser>?
@NSManaged public private(set) var domainBlocking: Set<MastodonUser>?
@NSManaged public private(set) var domainBlockingBy: Set<MastodonUser>?
}
extension MastodonUser {
@discardableResult
public static func insert(
into context: NSManagedObjectContext,
property: Property
) -> MastodonUser {
let user: MastodonUser = context.insertObject()
user.identifier = property.identifier
user.domain = property.domain
user.id = property.id
user.acct = property.acct
user.username = property.username
user.displayName = property.displayName
user.avatar = property.avatar
user.avatarStatic = property.avatarStatic
user.header = property.header
user.headerStatic = property.headerStatic
user.note = property.note
user.url = property.url
user.emojisData = property.emojisData
user.fieldsData = property.fieldsData
user.statusesCount = NSNumber(value: property.statusesCount)
user.followingCount = NSNumber(value: property.followingCount)
user.followersCount = NSNumber(value: property.followersCount)
user.locked = property.locked
user.bot = property.bot ?? false
user.suspended = property.suspended ?? false
// Mastodon do not provide relationship on the `Account`
// Update relationship via attribute updating interface
user.createdAt = property.createdAt
user.updatedAt = property.networkDate
return user
}
public func update(acct: String) {
if self.acct != acct {
self.acct = acct
}
}
public func update(username: String) {
if self.username != username {
self.username = username
}
}
public func update(displayName: String) {
if self.displayName != displayName {
self.displayName = displayName
}
}
public func update(avatar: String) {
if self.avatar != avatar {
self.avatar = avatar
}
}
public func update(avatarStatic: String?) {
if self.avatarStatic != avatarStatic {
self.avatarStatic = avatarStatic
}
}
public func update(header: String) {
if self.header != header {
self.header = header
}
}
public func update(headerStatic: String?) {
if self.headerStatic != headerStatic {
self.headerStatic = headerStatic
}
}
public func update(note: String?) {
if self.note != note {
self.note = note
}
}
public func update(url: String?) {
if self.url != url {
self.url = url
}
}
public func update(emojisData: Data?) {
if self.emojisData != emojisData {
self.emojisData = emojisData
}
}
public func update(fieldsData: Data?) {
if self.fieldsData != fieldsData {
self.fieldsData = fieldsData
}
}
public func update(statusesCount: Int) {
if self.statusesCount.intValue != statusesCount {
self.statusesCount = NSNumber(value: statusesCount)
}
}
public func update(followingCount: Int) {
if self.followingCount.intValue != followingCount {
self.followingCount = NSNumber(value: followingCount)
}
}
public func update(followersCount: Int) {
if self.followersCount.intValue != followersCount {
self.followersCount = NSNumber(value: followersCount)
}
}
public func update(locked: Bool) {
if self.locked != locked {
self.locked = locked
}
}
public func update(bot: Bool) {
if self.bot != bot {
self.bot = bot
}
}
public func update(suspended: Bool) {
if self.suspended != suspended {
self.suspended = suspended
}
}
public func update(isFollowing: Bool, by mastodonUser: MastodonUser) {
if isFollowing {
if !(self.followingBy ?? Set()).contains(mastodonUser) {
self.mutableSetValue(forKey: #keyPath(MastodonUser.followingBy)).add(mastodonUser)
}
} else {
if (self.followingBy ?? Set()).contains(mastodonUser) {
self.mutableSetValue(forKey: #keyPath(MastodonUser.followingBy)).remove(mastodonUser)
}
}
}
public func update(isFollowRequested: Bool, by mastodonUser: MastodonUser) {
if isFollowRequested {
if !(self.followRequestedBy ?? Set()).contains(mastodonUser) {
self.mutableSetValue(forKey: #keyPath(MastodonUser.followRequestedBy)).add(mastodonUser)
}
} else {
if (self.followRequestedBy ?? Set()).contains(mastodonUser) {
self.mutableSetValue(forKey: #keyPath(MastodonUser.followRequestedBy)).remove(mastodonUser)
}
}
}
public func update(isMuting: Bool, by mastodonUser: MastodonUser) {
if isMuting {
if !(self.mutingBy ?? Set()).contains(mastodonUser) {
self.mutableSetValue(forKey: #keyPath(MastodonUser.mutingBy)).add(mastodonUser)
}
} else {
if (self.mutingBy ?? Set()).contains(mastodonUser) {
self.mutableSetValue(forKey: #keyPath(MastodonUser.mutingBy)).remove(mastodonUser)
}
}
}
public func update(isBlocking: Bool, by mastodonUser: MastodonUser) {
if isBlocking {
if !(self.blockingBy ?? Set()).contains(mastodonUser) {
self.mutableSetValue(forKey: #keyPath(MastodonUser.blockingBy)).add(mastodonUser)
}
} else {
if (self.blockingBy ?? Set()).contains(mastodonUser) {
self.mutableSetValue(forKey: #keyPath(MastodonUser.blockingBy)).remove(mastodonUser)
}
}
}
public func update(isEndorsed: Bool, by mastodonUser: MastodonUser) {
if isEndorsed {
if !(self.endorsedBy ?? Set()).contains(mastodonUser) {
self.mutableSetValue(forKey: #keyPath(MastodonUser.endorsedBy)).add(mastodonUser)
}
} else {
if (self.endorsedBy ?? Set()).contains(mastodonUser) {
self.mutableSetValue(forKey: #keyPath(MastodonUser.endorsedBy)).remove(mastodonUser)
}
}
}
public func update(isDomainBlocking: Bool, by mastodonUser: MastodonUser) {
if isDomainBlocking {
if !(self.domainBlockingBy ?? Set()).contains(mastodonUser) {
self.mutableSetValue(forKey: #keyPath(MastodonUser.domainBlockingBy)).add(mastodonUser)
}
} else {
if (self.domainBlockingBy ?? Set()).contains(mastodonUser) {
self.mutableSetValue(forKey: #keyPath(MastodonUser.domainBlockingBy)).remove(mastodonUser)
}
}
}
public func didUpdate(at networkDate: Date) {
self.updatedAt = networkDate
}
}
extension MastodonUser {
public func findSearchHistory(domain: String, userID: MastodonUser.ID) -> SearchHistory? {
return searchHistories.first { searchHistory in
return searchHistory.domain == domain
&& searchHistory.userID == userID
}
}
}
extension MastodonUser {
public struct Property {
public let identifier: String
public let domain: String
public let id: String
public let acct: String
public let username: String
public let displayName: String
public let avatar: String
public let avatarStatic: String?
public let header: String
public let headerStatic: String?
public let note: String?
public let url: String?
public let emojisData: Data?
public let fieldsData: Data?
public let statusesCount: Int
public let followingCount: Int
public let followersCount: Int
public let locked: Bool
public let bot: Bool?
public let suspended: Bool?
public let createdAt: Date
public let networkDate: Date
public init(
id: String,
domain: String,
acct: String,
username: String,
displayName: String,
avatar: String,
avatarStatic: String?,
header: String,
headerStatic: String?,
note: String?,
url: String?,
emojisData: Data?,
fieldsData: Data?,
statusesCount: Int,
followingCount: Int,
followersCount: Int,
locked: Bool,
bot: Bool?,
suspended: Bool?,
createdAt: Date,
networkDate: Date
) {
self.identifier = id + "@" + domain
self.domain = domain
self.id = id
self.acct = acct
self.username = username
self.displayName = displayName
self.avatar = avatar
self.avatarStatic = avatarStatic
self.header = header
self.headerStatic = headerStatic
self.note = note
self.url = url
self.emojisData = emojisData
self.fieldsData = fieldsData
self.statusesCount = statusesCount
self.followingCount = followingCount
self.followersCount = followersCount
self.locked = locked
self.bot = bot
self.suspended = suspended
self.createdAt = createdAt
self.networkDate = networkDate
}
}
}
extension MastodonUser: Managed {
public static var defaultSortDescriptors: [NSSortDescriptor] {
return [NSSortDescriptor(keyPath: \MastodonUser.createdAt, ascending: false)]
}
}
extension MastodonUser {
static func predicate(domain: String) -> NSPredicate {
return NSPredicate(format: "%K == %@", #keyPath(MastodonUser.domain), domain)
}
static func predicate(id: String) -> NSPredicate {
return NSPredicate(format: "%K == %@", #keyPath(MastodonUser.id), id)
}
public static func predicate(domain: String, id: String) -> NSPredicate {
return NSCompoundPredicate(andPredicateWithSubpredicates: [
MastodonUser.predicate(domain: domain),
MastodonUser.predicate(id: id)
])
}
static func predicate(ids: [String]) -> NSPredicate {
return NSPredicate(format: "%K IN %@", #keyPath(MastodonUser.id), ids)
}
public static func predicate(domain: String, ids: [String]) -> NSPredicate {
return NSCompoundPredicate(andPredicateWithSubpredicates: [
MastodonUser.predicate(domain: domain),
MastodonUser.predicate(ids: ids)
])
}
static func predicate(username: String) -> NSPredicate {
return NSPredicate(format: "%K == %@", #keyPath(MastodonUser.username), username)
}
public static func predicate(domain: String, username: String) -> NSPredicate {
return NSCompoundPredicate(andPredicateWithSubpredicates: [
MastodonUser.predicate(domain: domain),
MastodonUser.predicate(username: username)
])
}
}

View File

@ -1,71 +0,0 @@
//
// Mention.swift
// CoreDataStack
//
// Created by sxiaojian on 2021/2/1.
//
import CoreData
import Foundation
public final class Mention: NSManagedObject {
public typealias ID = UUID
@NSManaged public private(set) var index: NSNumber
@NSManaged public private(set) var identifier: ID
@NSManaged public private(set) var id: String
@NSManaged public private(set) var createAt: Date
@NSManaged public private(set) var username: String
@NSManaged public private(set) var acct: String
@NSManaged public private(set) var url: String
// many-to-one relationship
@NSManaged public private(set) var status: Status
}
public extension Mention {
override func awakeFromInsert() {
super.awakeFromInsert()
setPrimitiveValue(UUID(), forKey: #keyPath(Mention.identifier))
}
@discardableResult
static func insert(
into context: NSManagedObjectContext,
property: Property,
index: Int
) -> Mention {
let mention: Mention = context.insertObject()
mention.index = NSNumber(value: index)
mention.id = property.id
mention.username = property.username
mention.acct = property.acct
mention.url = property.url
return mention
}
}
public extension Mention {
struct Property {
public let id: String
public let username: String
public let acct: String
public let url: String
public init(id: String, username: String, acct: String, url: String) {
self.id = id
self.username = username
self.acct = acct
self.url = url
}
}
}
extension Mention: Managed {
public static var defaultSortDescriptors: [NSSortDescriptor] {
return [NSSortDescriptor(keyPath: \Mention.createAt, ascending: false)]
}
}

View File

@ -1,115 +0,0 @@
//
// MastodonNotification.swift
// CoreDataStack
//
// Created by sxiaojian on 2021/4/13.
//
import Foundation
import CoreData
public final class MastodonNotification: NSManagedObject {
public typealias ID = UUID
@NSManaged public private(set) var identifier: ID
@NSManaged public private(set) var id: String
@NSManaged public private(set) var createAt: Date
@NSManaged public private(set) var updatedAt: Date
@NSManaged public private(set) var typeRaw: String
@NSManaged public private(set) var account: MastodonUser
@NSManaged public private(set) var status: Status?
@NSManaged public private(set) var domain: String
@NSManaged public private(set) var userID: String
}
extension MastodonNotification {
public override func awakeFromInsert() {
super.awakeFromInsert()
setPrimitiveValue(UUID(), forKey: #keyPath(MastodonNotification.identifier))
}
}
public extension MastodonNotification {
@discardableResult
static func insert(
into context: NSManagedObjectContext,
domain: String,
userID: String,
networkDate: Date,
property: Property
) -> MastodonNotification {
let notification: MastodonNotification = context.insertObject()
notification.id = property.id
notification.createAt = property.createdAt
notification.updatedAt = networkDate
notification.typeRaw = property.typeRaw
notification.account = property.account
notification.status = property.status
notification.domain = domain
notification.userID = userID
return notification
}
}
public extension MastodonNotification {
struct Property {
public init(id: String,
typeRaw: String,
account: MastodonUser,
status: Status?,
createdAt: Date
) {
self.id = id
self.typeRaw = typeRaw
self.account = account
self.status = status
self.createdAt = createdAt
}
public let id: String
public let typeRaw: String
public let account: MastodonUser
public let status: Status?
public let createdAt: Date
}
}
extension MastodonNotification {
static func predicate(domain: String) -> NSPredicate {
return NSPredicate(format: "%K == %@", #keyPath(MastodonNotification.domain), domain)
}
static func predicate(userID: String) -> NSPredicate {
return NSPredicate(format: "%K == %@", #keyPath(MastodonNotification.userID), userID)
}
static func predicate(typeRaw: String) -> NSPredicate {
return NSPredicate(format: "%K == %@", #keyPath(MastodonNotification.typeRaw), typeRaw)
}
public static func predicate(domain: String, userID: String, typeRaw: String? = nil) -> NSPredicate {
if let typeRaw = typeRaw {
return NSCompoundPredicate(andPredicateWithSubpredicates: [
MastodonNotification.predicate(domain: domain),
MastodonNotification.predicate(typeRaw: typeRaw),
MastodonNotification.predicate(userID: userID),
])
} else {
return NSCompoundPredicate(andPredicateWithSubpredicates: [
MastodonNotification.predicate(domain: domain),
MastodonNotification.predicate(userID: userID)
])
}
}
public static func predicate(validTypesRaws types: [String]) -> NSPredicate {
return NSPredicate(format: "%K IN %@", #keyPath(MastodonNotification.typeRaw), types)
}
}
extension MastodonNotification: Managed {
public static var defaultSortDescriptors: [NSSortDescriptor] {
return [NSSortDescriptor(keyPath: \MastodonNotification.createAt, ascending: false)]
}
}

View File

@ -1,145 +0,0 @@
//
// Poll.swift
// CoreDataStack
//
// Created by MainasuK Cirno on 2021-3-2.
//
import Foundation
import CoreData
public final class Poll: NSManagedObject {
public typealias ID = String
@NSManaged public private(set) var id: ID
@NSManaged public private(set) var expiresAt: Date?
@NSManaged public private(set) var expired: Bool
@NSManaged public private(set) var multiple: Bool
@NSManaged public private(set) var votesCount: NSNumber
@NSManaged public private(set) var votersCount: NSNumber?
@NSManaged public private(set) var createdAt: Date
@NSManaged public private(set) var updatedAt: Date
// one-to-one relationship
@NSManaged public private(set) var status: Status
// one-to-many relationship
@NSManaged public private(set) var options: Set<PollOption>
// many-to-many relationship
@NSManaged public private(set) var votedBy: Set<MastodonUser>?
}
extension Poll {
public override func awakeFromInsert() {
super.awakeFromInsert()
setPrimitiveValue(Date(), forKey: #keyPath(Poll.createdAt))
}
@discardableResult
public static func insert(
into context: NSManagedObjectContext,
property: Property,
votedBy: MastodonUser?,
options: [PollOption]
) -> Poll {
let poll: Poll = context.insertObject()
poll.id = property.id
poll.expiresAt = property.expiresAt
poll.expired = property.expired
poll.multiple = property.multiple
poll.votesCount = property.votesCount
poll.votersCount = property.votersCount
poll.updatedAt = property.networkDate
if let votedBy = votedBy {
poll.mutableSetValue(forKey: #keyPath(Poll.votedBy)).add(votedBy)
}
poll.mutableSetValue(forKey: #keyPath(Poll.options)).addObjects(from: options)
return poll
}
public func update(expiresAt: Date?) {
if self.expiresAt != expiresAt {
self.expiresAt = expiresAt
}
}
public func update(expired: Bool) {
if self.expired != expired {
self.expired = expired
}
}
public func update(votesCount: Int) {
if self.votesCount.intValue != votesCount {
self.votesCount = NSNumber(value: votesCount)
}
}
public func update(votersCount: Int?) {
if self.votersCount?.intValue != votersCount {
self.votersCount = votersCount.flatMap { NSNumber(value: $0) }
}
}
public func update(voted: Bool, by: MastodonUser) {
if voted {
if !(votedBy ?? Set()).contains(by) {
mutableSetValue(forKey: #keyPath(Poll.votedBy)).add(by)
}
} else {
if (votedBy ?? Set()).contains(by) {
mutableSetValue(forKey: #keyPath(Poll.votedBy)).remove(by)
}
}
}
public func didUpdate(at networkDate: Date) {
self.updatedAt = networkDate
}
}
extension Poll {
public struct Property {
public let id: ID
public let expiresAt: Date?
public let expired: Bool
public let multiple: Bool
public let votesCount: NSNumber
public let votersCount: NSNumber?
public let networkDate: Date
public init(
id: Poll.ID,
expiresAt: Date?,
expired: Bool,
multiple: Bool,
votesCount: Int,
votersCount: Int?,
networkDate: Date
) {
self.id = id
self.expiresAt = expiresAt
self.expired = expired
self.multiple = multiple
self.votesCount = NSNumber(value: votesCount)
self.votersCount = votersCount.flatMap { NSNumber(value: $0) }
self.networkDate = networkDate
}
}
}
extension Poll: Managed {
public static var defaultSortDescriptors: [NSSortDescriptor] {
return [NSSortDescriptor(keyPath: \Poll.createdAt, ascending: false)]
}
}

View File

@ -1,98 +0,0 @@
//
// PollOption.swift
// CoreDataStack
//
// Created by MainasuK Cirno on 2021-3-2.
//
import Foundation
import CoreData
public final class PollOption: NSManagedObject {
@NSManaged public private(set) var index: NSNumber
@NSManaged public private(set) var title: String
@NSManaged public private(set) var votesCount: NSNumber?
@NSManaged public private(set) var createdAt: Date
@NSManaged public private(set) var updatedAt: Date
// many-to-one relationship
@NSManaged public private(set) var poll: Poll
// many-to-many relationship
@NSManaged public private(set) var votedBy: Set<MastodonUser>?
}
extension PollOption {
public override func awakeFromInsert() {
super.awakeFromInsert()
setPrimitiveValue(Date(), forKey: #keyPath(PollOption.createdAt))
}
@discardableResult
public static func insert(
into context: NSManagedObjectContext,
property: Property,
votedBy: MastodonUser?
) -> PollOption {
let option: PollOption = context.insertObject()
option.index = property.index
option.title = property.title
option.votesCount = property.votesCount
option.updatedAt = property.networkDate
if let votedBy = votedBy {
option.mutableSetValue(forKey: #keyPath(PollOption.votedBy)).add(votedBy)
}
return option
}
public func update(votesCount: Int?) {
if self.votesCount?.intValue != votesCount {
self.votesCount = votesCount.flatMap { NSNumber(value: $0) }
}
}
public func update(voted: Bool, by: MastodonUser) {
if voted {
if !(self.votedBy ?? Set()).contains(by) {
self.mutableSetValue(forKey: #keyPath(PollOption.votedBy)).add(by)
}
} else {
if (self.votedBy ?? Set()).contains(by) {
self.mutableSetValue(forKey: #keyPath(PollOption.votedBy)).remove(by)
}
}
}
public func didUpdate(at networkDate: Date) {
self.updatedAt = networkDate
}
}
extension PollOption {
public struct Property {
public let index: NSNumber
public let title: String
public let votesCount: NSNumber?
public let networkDate: Date
public init(index: Int, title: String, votesCount: Int?, networkDate: Date) {
self.index = NSNumber(value: index)
self.title = title
self.votesCount = votesCount.flatMap { NSNumber(value: $0) }
self.networkDate = networkDate
}
}
}
extension PollOption: Managed {
public static var defaultSortDescriptors: [NSSortDescriptor] {
return [NSSortDescriptor(keyPath: \PollOption.createdAt, ascending: false)]
}
}

View File

@ -1,118 +0,0 @@
//
// SearchHistory.swift
// CoreDataStack
//
// Created by sxiaojian on 2021/4/7.
//
import Foundation
import CoreData
public final class SearchHistory: NSManagedObject {
public typealias ID = UUID
@NSManaged public private(set) var identifier: ID
@NSManaged public private(set) var domain: String
@NSManaged public private(set) var userID: MastodonUser.ID
@NSManaged public private(set) var createAt: Date
@NSManaged public private(set) var updatedAt: Date
// many-to-one relationship
@NSManaged public private(set) var account: MastodonUser?
@NSManaged public private(set) var hashtag: Tag?
@NSManaged public private(set) var status: Status?
}
extension SearchHistory {
public override func awakeFromInsert() {
super.awakeFromInsert()
setPrimitiveValue(UUID(), forKey: #keyPath(SearchHistory.identifier))
setPrimitiveValue(Date(), forKey: #keyPath(SearchHistory.createAt))
setPrimitiveValue(Date(), forKey: #keyPath(SearchHistory.updatedAt))
}
// public override func willSave() {
// super.willSave()
// setPrimitiveValue(Date(), forKey: #keyPath(SearchHistory.updatedAt))
// }
@discardableResult
public static func insert(
into context: NSManagedObjectContext,
property: Property,
account: MastodonUser
) -> SearchHistory {
let searchHistory: SearchHistory = context.insertObject()
searchHistory.domain = property.domain
searchHistory.userID = property.userID
searchHistory.account = account
return searchHistory
}
@discardableResult
public static func insert(
into context: NSManagedObjectContext,
property: Property,
hashtag: Tag
) -> SearchHistory {
let searchHistory: SearchHistory = context.insertObject()
searchHistory.domain = property.domain
searchHistory.userID = property.userID
searchHistory.hashtag = hashtag
return searchHistory
}
@discardableResult
public static func insert(
into context: NSManagedObjectContext,
property: Property,
status: Status
) -> SearchHistory {
let searchHistory: SearchHistory = context.insertObject()
searchHistory.domain = property.domain
searchHistory.userID = property.userID
searchHistory.status = status
return searchHistory
}
}
extension SearchHistory {
public func update(updatedAt: Date) {
setValue(updatedAt, forKey: #keyPath(SearchHistory.updatedAt))
}
}
extension SearchHistory {
public struct Property {
public let domain: String
public let userID: MastodonUser.ID
public init(domain: String, userID: MastodonUser.ID) {
self.domain = domain
self.userID = userID
}
}
}
extension SearchHistory: Managed {
public static var defaultSortDescriptors: [NSSortDescriptor] {
return [NSSortDescriptor(keyPath: \SearchHistory.updatedAt, ascending: false)]
}
}
extension SearchHistory {
static func predicate(domain: String) -> NSPredicate {
return NSPredicate(format: "%K == %@", #keyPath(SearchHistory.domain), domain)
}
static func predicate(userID: String) -> NSPredicate {
return NSPredicate(format: "%K == %@", #keyPath(SearchHistory.userID), userID)
}
public static func predicate(domain: String, userID: String) -> NSPredicate {
return NSCompoundPredicate(andPredicateWithSubpredicates: [
predicate(domain: domain),
predicate(userID: userID)
])
}
}

View File

@ -1,355 +0,0 @@
//
// Status.swift
// CoreDataStack
//
// Created by MainasuK Cirno on 2021/1/27.
//
import CoreData
import Foundation
public final class Status: NSManagedObject {
public typealias ID = String
@NSManaged public private(set) var identifier: ID
@NSManaged public private(set) var domain: String
@NSManaged public private(set) var id: String
@NSManaged public private(set) var uri: String
@NSManaged public private(set) var createdAt: Date
@NSManaged public private(set) var content: String
@NSManaged public private(set) var visibility: String?
@NSManaged public private(set) var sensitive: Bool
@NSManaged public private(set) var spoilerText: String?
@NSManaged public private(set) var application: Application?
@NSManaged public private(set) var emojisData: Data?
// Informational
@NSManaged public private(set) var reblogsCount: NSNumber
@NSManaged public private(set) var favouritesCount: NSNumber
@NSManaged public private(set) var repliesCount: NSNumber?
@NSManaged public private(set) var url: String?
@NSManaged public private(set) var inReplyToID: Status.ID?
@NSManaged public private(set) var inReplyToAccountID: MastodonUser.ID?
@NSManaged public private(set) var language: String? // (ISO 639 Part 1 two-letter language code)
@NSManaged public private(set) var text: String?
// many-to-one relationship
@NSManaged public private(set) var author: MastodonUser
@NSManaged public private(set) var reblog: Status?
@NSManaged public private(set) var replyTo: Status?
// many-to-many relationship
@NSManaged public private(set) var favouritedBy: Set<MastodonUser>?
@NSManaged public private(set) var rebloggedBy: Set<MastodonUser>?
@NSManaged public private(set) var mutedBy: Set<MastodonUser>?
@NSManaged public private(set) var bookmarkedBy: Set<MastodonUser>?
// one-to-one relationship
@NSManaged public private(set) var pinnedBy: MastodonUser?
@NSManaged public private(set) var poll: Poll?
// one-to-many relationship
@NSManaged public private(set) var reblogFrom: Set<Status>?
@NSManaged public private(set) var mentions: Set<Mention>?
@NSManaged public private(set) var homeTimelineIndexes: Set<HomeTimelineIndex>?
@NSManaged public private(set) var mediaAttachments: Set<Attachment>?
@NSManaged public private(set) var replyFrom: Set<Status>?
@NSManaged public private(set) var inNotifications: Set<MastodonNotification>?
@NSManaged public private(set) var searchHistories: Set<SearchHistory>
@NSManaged public private(set) var updatedAt: Date
@NSManaged public private(set) var deletedAt: Date?
@NSManaged public private(set) var revealedAt: Date?
}
extension Status {
@discardableResult
public static func insert(
into context: NSManagedObjectContext,
property: Property,
author: MastodonUser,
reblog: Status?,
application: Application?,
replyTo: Status?,
poll: Poll?,
mentions: [Mention]?,
mediaAttachments: [Attachment]?,
favouritedBy: MastodonUser?,
rebloggedBy: MastodonUser?,
mutedBy: MastodonUser?,
bookmarkedBy: MastodonUser?,
pinnedBy: MastodonUser?
) -> Status {
let status: Status = context.insertObject()
status.identifier = property.identifier
status.domain = property.domain
status.id = property.id
status.uri = property.uri
status.createdAt = property.createdAt
status.content = property.content
status.visibility = property.visibility
status.sensitive = property.sensitive
status.spoilerText = property.spoilerText
status.application = application
status.emojisData = property.emojisData
status.reblogsCount = property.reblogsCount
status.favouritesCount = property.favouritesCount
status.repliesCount = property.repliesCount
status.url = property.url
status.inReplyToID = property.inReplyToID
status.inReplyToAccountID = property.inReplyToAccountID
status.language = property.language
status.text = property.text
status.author = author
status.reblog = reblog
status.pinnedBy = pinnedBy
status.poll = poll
if let mentions = mentions {
status.mutableSetValue(forKey: #keyPath(Status.mentions)).addObjects(from: mentions)
}
if let mediaAttachments = mediaAttachments {
status.mutableSetValue(forKey: #keyPath(Status.mediaAttachments)).addObjects(from: mediaAttachments)
}
if let favouritedBy = favouritedBy {
status.mutableSetValue(forKey: #keyPath(Status.favouritedBy)).add(favouritedBy)
}
if let rebloggedBy = rebloggedBy {
status.mutableSetValue(forKey: #keyPath(Status.rebloggedBy)).add(rebloggedBy)
}
if let mutedBy = mutedBy {
status.mutableSetValue(forKey: #keyPath(Status.mutedBy)).add(mutedBy)
}
if let bookmarkedBy = bookmarkedBy {
status.mutableSetValue(forKey: #keyPath(Status.bookmarkedBy)).add(bookmarkedBy)
}
status.updatedAt = property.networkDate
return status
}
public func update(emojisData: Data?) {
if self.emojisData != emojisData {
self.emojisData = emojisData
}
}
public func update(reblogsCount: NSNumber) {
if self.reblogsCount.intValue != reblogsCount.intValue {
self.reblogsCount = reblogsCount
}
}
public func update(favouritesCount: NSNumber) {
if self.favouritesCount.intValue != favouritesCount.intValue {
self.favouritesCount = favouritesCount
}
}
public func update(repliesCount: NSNumber?) {
guard let count = repliesCount else {
return
}
if self.repliesCount?.intValue != count.intValue {
self.repliesCount = repliesCount
}
}
public func update(replyTo: Status?) {
if self.replyTo != replyTo {
self.replyTo = replyTo
}
}
public func update(liked: Bool, by mastodonUser: MastodonUser) {
if liked {
if !(self.favouritedBy ?? Set()).contains(mastodonUser) {
self.mutableSetValue(forKey: #keyPath(Status.favouritedBy)).add(mastodonUser)
}
} else {
if (self.favouritedBy ?? Set()).contains(mastodonUser) {
self.mutableSetValue(forKey: #keyPath(Status.favouritedBy)).remove(mastodonUser)
}
}
}
public func update(reblogged: Bool, by mastodonUser: MastodonUser) {
if reblogged {
if !(self.rebloggedBy ?? Set()).contains(mastodonUser) {
self.mutableSetValue(forKey: #keyPath(Status.rebloggedBy)).add(mastodonUser)
}
} else {
if (self.rebloggedBy ?? Set()).contains(mastodonUser) {
self.mutableSetValue(forKey: #keyPath(Status.rebloggedBy)).remove(mastodonUser)
}
}
}
public func update(muted: Bool, by mastodonUser: MastodonUser) {
if muted {
if !(self.mutedBy ?? Set()).contains(mastodonUser) {
self.mutableSetValue(forKey: #keyPath(Status.mutedBy)).add(mastodonUser)
}
} else {
if (self.mutedBy ?? Set()).contains(mastodonUser) {
self.mutableSetValue(forKey: #keyPath(Status.mutedBy)).remove(mastodonUser)
}
}
}
public func update(bookmarked: Bool, by mastodonUser: MastodonUser) {
if bookmarked {
if !(self.bookmarkedBy ?? Set()).contains(mastodonUser) {
self.mutableSetValue(forKey: #keyPath(Status.bookmarkedBy)).add(mastodonUser)
}
} else {
if (self.bookmarkedBy ?? Set()).contains(mastodonUser) {
self.mutableSetValue(forKey: #keyPath(Status.bookmarkedBy)).remove(mastodonUser)
}
}
}
public func update(isReveal: Bool) {
revealedAt = isReveal ? Date() : nil
}
public func didUpdate(at networkDate: Date) {
self.updatedAt = networkDate
}
}
extension Status {
public struct Property {
public let identifier: ID
public let domain: String
public let id: String
public let uri: String
public let createdAt: Date
public let content: String
public let visibility: String?
public let sensitive: Bool
public let spoilerText: String?
public let emojisData: Data?
public let reblogsCount: NSNumber
public let favouritesCount: NSNumber
public let repliesCount: NSNumber?
public let url: String?
public let inReplyToID: Status.ID?
public let inReplyToAccountID: MastodonUser.ID?
public let language: String? // (ISO 639 Part @1 two-letter language code)
public let text: String?
public let networkDate: Date
public init(
domain: String,
id: String,
uri: String,
createdAt: Date,
content: String,
visibility: String?,
sensitive: Bool,
spoilerText: String?,
emojisData: Data?,
reblogsCount: NSNumber,
favouritesCount: NSNumber,
repliesCount: NSNumber?,
url: String?,
inReplyToID: Status.ID?,
inReplyToAccountID: MastodonUser.ID?,
language: String?,
text: String?,
networkDate: Date
) {
self.identifier = id + "@" + domain
self.domain = domain
self.id = id
self.uri = uri
self.createdAt = createdAt
self.content = content
self.visibility = visibility
self.sensitive = sensitive
self.spoilerText = spoilerText
self.emojisData = emojisData
self.reblogsCount = reblogsCount
self.favouritesCount = favouritesCount
self.repliesCount = repliesCount
self.url = url
self.inReplyToID = inReplyToID
self.inReplyToAccountID = inReplyToAccountID
self.language = language
self.text = text
self.networkDate = networkDate
}
}
}
extension Status: Managed {
public static var defaultSortDescriptors: [NSSortDescriptor] {
return [NSSortDescriptor(keyPath: \Status.createdAt, ascending: false)]
}
}
extension Status {
static func predicate(domain: String) -> NSPredicate {
return NSPredicate(format: "%K == %@", #keyPath(Status.domain), domain)
}
static func predicate(id: String) -> NSPredicate {
return NSPredicate(format: "%K == %@", #keyPath(Status.id), id)
}
public static func predicate(domain: String, id: String) -> NSPredicate {
return NSCompoundPredicate(andPredicateWithSubpredicates: [
predicate(domain: domain),
predicate(id: id)
])
}
static func predicate(ids: [String]) -> NSPredicate {
return NSPredicate(format: "%K IN %@", #keyPath(Status.id), ids)
}
public static func predicate(domain: String, ids: [String]) -> NSPredicate {
return NSCompoundPredicate(andPredicateWithSubpredicates: [
predicate(domain: domain),
predicate(ids: ids)
])
}
public static func notDeleted() -> NSPredicate {
return NSPredicate(format: "%K == nil", #keyPath(Status.deletedAt))
}
public static func deleted() -> NSPredicate {
return NSPredicate(format: "%K != nil", #keyPath(Status.deletedAt))
}
}

View File

@ -1,112 +0,0 @@
//
// Tag.swift
// CoreDataStack
//
// Created by sxiaojian on 2021/2/1.
//
import CoreData
import Foundation
public final class Tag: NSManagedObject {
public typealias ID = UUID
@NSManaged public private(set) var identifier: ID
@NSManaged public private(set) var createAt: Date
@NSManaged public private(set) var updatedAt: Date
@NSManaged public private(set) var name: String
@NSManaged public private(set) var url: String
// one-to-one relationship
// many-to-many relationship
// one-to-many relationship
@NSManaged public private(set) var histories: Set<History>?
@NSManaged public private(set) var searchHistories: Set<SearchHistory>
}
public extension Tag {
override func awakeFromInsert() {
super.awakeFromInsert()
setPrimitiveValue(UUID(), forKey: #keyPath(Tag.identifier))
setPrimitiveValue(Date(), forKey: #keyPath(Tag.createAt))
setPrimitiveValue(Date(), forKey: #keyPath(Tag.updatedAt))
}
override func willSave() {
super.willSave()
setPrimitiveValue(Date(), forKey: #keyPath(Tag.updatedAt))
}
@discardableResult
static func insert(
into context: NSManagedObjectContext,
property: Property
) -> Tag {
let tag: Tag = context.insertObject()
tag.name = property.name
tag.url = property.url
if let histories = property.histories {
tag.mutableSetValue(forKey: #keyPath(Tag.histories)).addObjects(from: histories)
}
return tag
}
}
extension Tag {
public func findSearchHistory(domain: String, userID: MastodonUser.ID) -> SearchHistory? {
return searchHistories.first { searchHistory in
return searchHistory.domain == domain
&& searchHistory.userID == userID
}
}
}
public extension Tag {
struct Property {
public let name: String
public let url: String
public let histories: [History]?
public init(name: String, url: String, histories: [History]?) {
self.name = name
self.url = url
self.histories = histories
}
}
}
public extension Tag {
func updateHistory(index: Int, day: Date, uses: String, account: String) {
guard let histories = self.histories?.sorted(by: {
$0.createAt.compare($1.createAt) == .orderedAscending
}) else { return }
let history = histories[index]
history.update(day: day)
history.update(uses: uses)
history.update(accounts: account)
}
func appendHistory(history: History) {
self.mutableSetValue(forKeyPath: #keyPath(Tag.histories)).add(history)
}
func update(url: String) {
if self.url != url {
self.url = url
}
}
}
extension Tag: Managed {
public static var defaultSortDescriptors: [NSSortDescriptor] {
[NSSortDescriptor(keyPath: \Tag.createAt, ascending: false)]
}
}
public extension Tag {
static func predicate(name: String) -> NSPredicate {
NSPredicate(format: "%K == %@", #keyPath(Tag.name), name)
}
}

View File

@ -1,49 +0,0 @@
//
// NSManagedObjectContext.swift
// CoreDataStack
//
// Created by Cirno MainasuK on 2020-8-10.
//
import os
import Foundation
import Combine
import CoreData
extension NSManagedObjectContext {
public func insert<T: NSManagedObject>() -> T where T: Managed {
guard let object = NSEntityDescription.insertNewObject(forEntityName: T.entityName, into: self) as? T else {
fatalError("cannot insert object: \(T.self)")
}
return object
}
public func saveOrRollback() throws {
do {
guard hasChanges else {
return
}
try save()
} catch {
rollback()
os_log("%{public}s[%{public}ld], %{public}s: %s", ((#file as NSString).lastPathComponent), #line, #function, error.localizedDescription)
throw error
}
}
public func performChanges(block: @escaping () -> Void) -> Future<Result<Void, Error>, Never> {
Future { promise in
self.perform {
block()
do {
try self.saveOrRollback()
promise(.success(Result.success(())))
} catch {
promise(.success(Result.failure(error)))
}
}
}
}
}

View File

@ -1,22 +0,0 @@
<?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>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>1.2.0</string>
<key>CFBundleVersion</key>
<string>88</string>
</dict>
</plist>

View File

@ -1,33 +0,0 @@
//
// CoreDataStackTests.swift
// CoreDataStackTests
//
// Created by MainasuK Cirno on 2021/1/27.
//
import XCTest
@testable import CoreDataStack
class CoreDataStackTests: XCTestCase {
override func setUpWithError() throws {
// Put setup code here. This method is called before the invocation of each test method in the class.
}
override func tearDownWithError() throws {
// Put teardown code here. This method is called after the invocation of each test method in the class.
}
func testExample() throws {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct results.
}
func testPerformanceExample() throws {
// This is an example of a performance test case.
self.measure {
// Put the code you want to measure the time of here.
}
}
}

View File

@ -1,22 +0,0 @@
<?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>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>1.2.0</string>
<key>CFBundleVersion</key>
<string>88</string>
</dict>
</plist>

View File

@ -0,0 +1,30 @@
# Contributing
- File the issue for bug report and feature request
- Translate the project in our [Crowdin](https://crowdin.com/project/mastodon-for-ios) project
- Make the Pull Request to contribute
## Bug Report
File the issue about the bug. Make sure you are installing the latest version app from TestFlight or App Store.
## Translation
[![Crowdin](https://badges.crowdin.net/mastodon-for-ios/localized.svg)](https://crowdin.com/project/mastodon-for-ios)
The translation will update regularly. Please request language if not listed via issue.
## Pull Request
You can make a pull request directly with small block code changes for bugfix or feature implementations. Before making a pull request with hundred lines of changes to this repository, please first discuss the change you wish to make via issue.
Also, there are lots of existing feature request issues that could be a good-first-issue discussing place.
Follow the git-flow pattern to make your pull request.
1. Ensure you are checkout on the `develop` branch.
2. Write your codes and test them on **iPad and iPhone**.
3. Merge the `develop` into your branch then make a Pull Request. Please merge the branch and resolve any conflicts when the `develop` updates. **Do not force push your codes.**
4. Make sure the permission for your folk is open to the reviewer. Code style fix, conflict resolution, and other changes may be committed by the reviewer directly.
5. Request a code review and wait for approval. The PR will be merged when it is approved.
## Documentation
The documents for this app is list under the [Documentation](../Documentation/) folder. We are also welcome contributions for documentation.

83
Documentation/Setup.md Normal file
View File

@ -0,0 +1,83 @@
# Setup
## Requirements
- Xcode 13+
- Swift 5.5+
- iOS 14.0+
Intell the latest version of Xcode from the App Store or Apple Developer Download website. Also, we assert you have the [Homebrew](https://brew.sh) package manager.
This guide may not suit your machine and actually setup procedure may change in the future. Please file the issue or Pull Request if there are any problems.
## CocoaPods
The app use [CocoaPods]() and [CocoaPods-Keys](https://github.com/orta/cocoapods-keys). The M1 Mac needs virtual ruby env to workaround compatibility issues.
#### Intel Mac
```zsh
sudo gem install cocoapods cocoapods-keys
```
#### M1 Mac
```zsh
# install the rbenv
brew install rbenv
which ruby
# > /usr/bin/ruby
echo 'eval "$(rbenv init -)"' >> ~/.zprofile
source ~/.zprofile
which ruby
# > /Users/mainasuk/.rbenv/shims/ruby
# select ruby
rbenv install --list
# here we use the latest 3.0.x version
rbenv install 3.0.3
rbenv global 3.0.3
ruby --version
# > ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [arm64-darwin21]
sudo gem install cocoapods cocoapods-keys
```
## Bootstrap
```zsh
# make a clean build
sudo gem install cocoapods-clean
pod clean
# make install
pod install --repo-update
# open workspace
open Mastodon.xcworkspace
```
The CocoaPods-Key plugin will request the push notification endpoint. You can fufill the empty string and set it later. To setup the push notification. Please check section `Push Notification` below.
The app requires the `App Group` capability. To make sure it works for your developer membership. Please check [AppSecret.swift](../AppShared/AppSecret.swift) file and set another unique `groupID` and update `App Group` settings.
#### Push Notification (Optional)
The app is compatible with [toot-relay](https://github.com/DagAgren/toot-relay) APNs. You can set your push notification endpoint via Cocoapod-Keys. There are two endpoints:
- notification_endpoint: for `RELEASE` usage
- notification_endpoint_debug: for `DEBUG` usage
Please check the [Establishing a Certificate-Based Connection to APNs
](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_certificate-based_connection_to_apns) document to generate the certificate and exports the p12 file.
Note:
Please check and set the `notification.Topic` to the app BundleID in [toot-relay.go](https://github.com/DagAgren/toot-relay/blob/f9d6894040509881fee845972cd38ec6cd8f5a11/toot-relay.go#L112). The server needs use a reverse proxy to port this relay on 443 port with valid domain and HTTPS certificate.
## Start
1. Open `Mastodon.xcworkspace`
2. Wait for the Swift Package Dependencies resolved.
2. Check the signing settings make sure to choose a team. [More info…](https://help.apple.com/xcode/mac/current/#/dev23aab79b4)
3. Select `Mastodon` scheme and device then run it. (Command + R)
## What's next
We welcome contributions! And if you have an interest to contribute codes. Here is a document that describes the app architecture and what's tech stack it uses.

137
Documentation/Snapshot.md Normal file
View File

@ -0,0 +1,137 @@
# Mastodon App Store Snapshot Guide
This documentation is a guide to create snapshots for App Store. The outer contributor could ignore this.
## Prepare toolkit
The app use the Xcode UITest generate snapshots attachments. Then use the `xcparse` tool extract the snapshots.
```zsh
# install xcparse from Homebrew
brew install chargepoint/xcparse/xcparse
```
## How it works
We use `xcodebuild` CLI tool to trigger UITest.
Set the `name` in `-destination` option to add device for snapshot. For example:
`-destination 'platform=iOS Simulator,name=iPad Pro (12.9-inch) (5th generation)' \`
You can list the avaiable simulator:
```zsh
# list the destinations
xcodebuild \
test \
-showdestinations \
-derivedDataPath '~/Downloads/MastodonBuild/Derived' \
-workspace Mastodon.xcworkspace \
-scheme 'Mastodon - Snapshot'
# output
Available destinations for the "Mastodon - Snapshot" scheme:
{ platform:iOS Simulator, id:7F6D7727-AD49-4B79-B6F5-AEC538925576, OS:15.2, name:iPad (9th generation) }
{ platform:iOS Simulator, id:BEB9533C-F786-40E6-8C38-248F6A11FC37, OS:15.2, name:iPad Air (4th generation) }
```
#### Note:
Multiple lines for destination will dispatches the parallel snapshot jobs.
## Login before make snapshots
This script trigger the `MastodonUITests/MastodonUISnapshotTests/testSignInAccount` test case to sign-in the account. The test case may wait for 2FA code or email code. Please input it if needed. Also, you can skip this and sign-in the test account manually.
Replace the `<Email>` and `<Password>` for test account.
```zsh
# build and run test case for auto sign-in
TEST_RUNNER_login_domain='<Domain>' \
TEST_RUNNER_login_email='<Email>' \
TEST_RUNNER_login_password='<Password>' \
xcodebuild \
test \
-derivedDataPath '~/Downloads/MastodonBuild/Derived' \
-workspace Mastodon.xcworkspace \
-scheme 'Mastodon - Snapshot' \
-sdk iphonesimulator \
-destination 'platform=iOS Simulator,name=iPhone 13 Pro Max' \
-destination 'platform=iOS Simulator,name=iPhone 8 Plus' \
-destination 'platform=iOS Simulator,name=iPad Pro (12.9-inch) (5th generation)' \
-testPlan 'AppStoreSnapshotTestPlan' \
-only-testing:MastodonUITests/MastodonUISnapshotTests/testSignInAccount
```
Note:
UITest may running silent. Open the Simulator.app to make the device display.
## Take and extract snapshots
### 1. Setup status bar
```zsh
# boot devices
xcrun simctl boot 'iPhone 8 Plus'
xcrun simctl boot 'iPhone 13 Pro Max'
xcrun simctl boot 'iPad Pro (12.9-inch) (5th generation)'
# setup magic status bar
xcrun simctl status_bar 'iPhone 13 Pro Max' override --time "9:41" --batteryState charged --batteryLevel 100
xcrun simctl status_bar 'iPhone 8 Plus' override --time "9:41" --batteryState charged --batteryLevel 100
xcrun simctl status_bar 'iPad Pro (12.9-inch) (5th generation)' override --time "9:41" --batteryState charged --batteryLevel 100
```
### 2. Take snapshots
The `TEST_RUNNER_` prefix will sets env value into test runner.
```zsh
# take snapshots
TEST_RUNNER_login_domain='<domain.com>' \
TEST_RUNNER_login_email='<email>' \
TEST_RUNNER_login_password='<email>' \
TEST_RUNNER_thread_id='<thread_id>' \
TEST_RUNNER_profile_id='<profile_id>' \
xcodebuild \
test \
-derivedDataPath '~/Downloads/MastodonBuild/Derived' \
-workspace Mastodon.xcworkspace \
-scheme 'Mastodon - Snapshot' \
-sdk iphonesimulator \
-destination 'platform=iOS Simulator,name=iPhone 13 Pro Max' \
-destination 'platform=iOS Simulator,name=iPhone 8 Plus' \
-destination 'platform=iOS Simulator,name=iPad Pro (12.9-inch) (5th generation)' \
-test-iterations 3 \
-retry-tests-on-failure \
-testPlan 'AppStoreSnapshotTestPlan'
# output:
Test session results, code coverage, and logs:
/Users/Me/Downloads/MastodonBuild/Derived/Logs/Test/Test-Mastodon - Snapshot-2022.03.03_18-00-38-+0800.xcresult
** TEST SUCCEEDED **
```
#### Note:
Add `-only-testing:MastodonUITests/MastodonUISnapshotTests/testSnapshot…` to run specific test case.
| Task | key | value |
| ------------------- | -------------- | ----------------------------------------------------- |
| testSignInAccount | login_domain | The server domain for user login |
| testSignInAccount | login_email | The user email for login |
| testSignInAccount | login_password | The user password for login |
| testSnapshotThread | thread_id | The ID for post which used for thread scene snapshot |
| testSnapshotProfile | profile_id | The ID for user which used for profile scene snapshot |
### 3. Extract snapshots
Use `xcparse screenshots <path_for_xcresult> <path_for_destination>` extracts snapshots.
```zsh
# scresult path for previous test case
xcparse screenshots '<path_for_xcresult>' ~/Downloads/MastodonBuild/Screenshots/
# output
100% [============]
🎊 Export complete! 🎊
# group
cd ~/Downloads/MastodonBuild/Screenshots/
mkdir 'iPhone 8 Plus' 'iPhone 13 Pro Max' 'iPad Pro (12.9-inch) (5th generation)'
find . -name "*iPad*" -type file -print0 | xargs -0 -I {} mv {} './iPad Pro (12.9-inch) (5th generation)'
find . -name "*iPhone 8*" -type file -print0 | xargs -0 -I {} mv {} './iPhone 8 Plus'
find . -name "*iPhone 13*" -type file -print0 | xargs -0 -I {} mv {} './iPhone 13 Pro Max'
```

View File

@ -156,6 +156,28 @@
<string>%ld reblogs</string> <string>%ld reblogs</string>
</dict> </dict>
</dict> </dict>
<key>plural.count.reply</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reply_count@</string>
<key>reply_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>zero</key>
<string>0 replies</string>
<key>one</key>
<string>1 reply</string>
<key>few</key>
<string>%ld replies</string>
<key>many</key>
<string>%ld replies</string>
<key>other</key>
<string>%ld replies</string>
</dict>
</dict>
<key>plural.count.vote</key> <key>plural.count.vote</key>
<dict> <dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>

View File

@ -0,0 +1,51 @@
"16wxgf" = "Argitaratu Mastodonen";
"751xkl" = "Testu-edukia";
"CsR7G2" = "Argitaratu Mastodonen";
"HZSGTr" = "Ze eduki argitaratu?";
"HdGikU" = "Argitaratzeak huts egin du";
"KDNTJ4" = "Hutsegitearen arrazoia";
"RHxKOw" = "Argitaratu bidalketa testu-edukiarekin";
"RxSqsb" = "Bidali";
"WCIR3D" = "Argitaratu ${content} Mastodonen";
"ZKJSNu" = "Bidali";
"ZS1XaK" = "${content}";
"ZbSjzC" = "Ikusgaitasuna";
"Zo4jgJ" = "Bidalketaren ikusgaitasuna";
"apSxMG-dYQ5NN" = "'Publikoa'-rekin bat datozen ${count} aukera daude.";
"apSxMG-ehFLjY" = "'Jarraitzaileak soilik'-ekin bat datozen ${count} aukera daude.";
"ayoYEb-dYQ5NN" = "${content}, publikoa";
"ayoYEb-ehFLjY" = "${content}, jarraitzaileak besterik ez";
"dUyuGg" = "Argitaratu Mastodonen";
"dYQ5NN" = "Publikoa";
"ehFLjY" = "Jarraitzaileak soilik";
"gfePDu" = "Argitaratzeak huts egin du. ${failureReason}";
"k7dbKQ" = "Bidalketa behar bezala bidali da.";
"oGiqmY-dYQ5NN" = "Berresteagatik, 'Publikoa' izatea nahi duzu?";
"oGiqmY-ehFLjY" = "Berresteagatik, 'Jarraitzaileak soilik' izatea nahi duzu?";
"rM6dvp" = "URLa";
"ryJLwG" = "Bidalketa behar bezala bidali da. ";

View File

@ -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>${content}(e)kin bat datozen %#@count_option@ daude.</string>
<key>count_option</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>%ld</string>
<key>one</key>
<string>Aukera 1</string>
<key>other</key>
<string>%ld aukera</string>
</dict>
</dict>
<key>There are ${count} options matching ${visibility}.</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>${visibility}(e)kin bat datozen %#@count_option@ daude.</string>
<key>count_option</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>%ld</string>
<key>one</key>
<string>Aukera 1</string>
<key>other</key>
<string>%ld aukera</string>
</dict>
</dict>
</dict>
</plist>

View File

@ -12,7 +12,7 @@
"RHxKOw" = "Envoyer une publication avec du contenu texte"; "RHxKOw" = "Envoyer une publication avec du contenu texte";
"RxSqsb" = "Post"; "RxSqsb" = "Publication";
"WCIR3D" = "Publier du ${content} sur Mastodon"; "WCIR3D" = "Publier du ${content} sur Mastodon";
@ -24,9 +24,9 @@
"Zo4jgJ" = "Visibilité de la publication"; "Zo4jgJ" = "Visibilité de la publication";
"apSxMG-dYQ5NN" = "There are ${count} options matching Public."; "apSxMG-dYQ5NN" = "Il y a ${count} options correspondant à « Public ».";
"apSxMG-ehFLjY" = "There are ${count} options matching Followers Only."; "apSxMG-ehFLjY" = "Il y a ${count} options correspondant à « Abonnés uniquement ».";
"ayoYEb-dYQ5NN" = "${content}, Public"; "ayoYEb-dYQ5NN" = "${content}, Public";

View File

@ -0,0 +1,51 @@
"16wxgf" = "Post on Mastodon";
"751xkl" = "Text Content";
"CsR7G2" = "Post on Mastodon";
"HZSGTr" = "What content to post?";
"HdGikU" = "Posting failed";
"KDNTJ4" = "Failure Reason";
"RHxKOw" = "Send Post with text content";
"RxSqsb" = "Post";
"WCIR3D" = "Post ${content} on Mastodon";
"ZKJSNu" = "Post";
"ZS1XaK" = "${content}";
"ZbSjzC" = "Visibility";
"Zo4jgJ" = "Post Visibility";
"apSxMG-dYQ5NN" = "There are ${count} options matching Public.";
"apSxMG-ehFLjY" = "There are ${count} options matching Followers Only.";
"ayoYEb-dYQ5NN" = "${content}, Public";
"ayoYEb-ehFLjY" = "${content}, Followers Only";
"dUyuGg" = "Post on Mastodon";
"dYQ5NN" = "Public";
"ehFLjY" = "Followers Only";
"gfePDu" = "Posting failed. ${failureReason}";
"k7dbKQ" = "Post was sent successfully.";
"oGiqmY-dYQ5NN" = "Just to confirm, you wanted Public?";
"oGiqmY-ehFLjY" = "Just to confirm, you wanted Followers Only?";
"rM6dvp" = "URL";
"ryJLwG" = "Post was sent successfully. ";

View File

@ -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>There are %#@count_option@ matching ${content}.</string>
<key>count_option</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>%ld</string>
<key>one</key>
<string>1 option</string>
<key>other</key>
<string>%ld options</string>
</dict>
</dict>
<key>There are ${count} options matching ${visibility}.</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>There are %#@count_option@ matching ${visibility}.</string>
<key>count_option</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>%ld</string>
<key>one</key>
<string>1 option</string>
<key>other</key>
<string>%ld options</string>
</dict>
</dict>
</dict>
</plist>

View File

@ -1,51 +1,51 @@
"16wxgf" = "Post on Mastodon"; "16wxgf" = "Mastodonに投稿";
"751xkl" = "Text Content"; "751xkl" = "テキストコンテンツ";
"CsR7G2" = "Post on Mastodon"; "CsR7G2" = "Mastodonに投稿";
"HZSGTr" = "What content to post?"; "HZSGTr" = "What content to post?";
"HdGikU" = "Posting failed"; "HdGikU" = "投稿に失敗しました";
"KDNTJ4" = "Failure Reason"; "KDNTJ4" = "失敗の理由";
"RHxKOw" = "Send Post with text content"; "RHxKOw" = "Send Post with text content";
"RxSqsb" = "Post"; "RxSqsb" = "投稿";
"WCIR3D" = "Post ${content} on Mastodon"; "WCIR3D" = "Mastodonに ${content} を投稿";
"ZKJSNu" = "Post"; "ZKJSNu" = "投稿";
"ZS1XaK" = "${content}"; "ZS1XaK" = "${content}";
"ZbSjzC" = "Visibility"; "ZbSjzC" = "公開範囲";
"Zo4jgJ" = "Post Visibility"; "Zo4jgJ" = "投稿の公開範囲";
"apSxMG-dYQ5NN" = "There are ${count} options matching Public."; "apSxMG-dYQ5NN" = "「パブリック」にマッチするオプションが${count}個あります。";
"apSxMG-ehFLjY" = "There are ${count} options matching Followers Only."; "apSxMG-ehFLjY" = "「フォロワーのみ」にマッチするオプションが${count}個あります。";
"ayoYEb-dYQ5NN" = "${content}, Public"; "ayoYEb-dYQ5NN" = "${content}, パブリック";
"ayoYEb-ehFLjY" = "${content}, Followers Only"; "ayoYEb-ehFLjY" = "${content}, フォロワーのみ";
"dUyuGg" = "Post on Mastodon"; "dUyuGg" = "Mastodonに投稿";
"dYQ5NN" = "Public"; "dYQ5NN" = "パブリック";
"ehFLjY" = "Followers Only"; "ehFLjY" = "フォロワーのみ";
"gfePDu" = "Posting failed. ${failureReason}"; "gfePDu" = "投稿に失敗しました。 ${failureReason}";
"k7dbKQ" = "Post was sent successfully."; "k7dbKQ" = "投稿に成功しました。";
"oGiqmY-dYQ5NN" = "Just to confirm, you wanted Public?"; "oGiqmY-dYQ5NN" = "「パブリック」で間違いないですか?";
"oGiqmY-ehFLjY" = "Just to confirm, you wanted Followers Only?"; "oGiqmY-ehFLjY" = "「フォロワーのみ」で間違いないですか?";
"rM6dvp" = "URL"; "rM6dvp" = "URL";
"ryJLwG" = "Post was sent successfully. "; "ryJLwG" = "投稿に成功しました。 ";

View File

@ -0,0 +1,51 @@
"16wxgf" = "Asuffeɣ deg Matodon";
"751xkl" = "Agbur n uḍris";
"CsR7G2" = "Asuffeɣ deg Matodon";
"HZSGTr" = "Anwa agbur ara d-yettwasuffɣen?";
"HdGikU" = "Yecceḍ usuffeɣ";
"KDNTJ4" = "Ssebba n tuccḍa";
"RHxKOw" = "Azen tasuffeɣt s ugbur n uḍris";
"RxSqsb" = "Tasuffeɣt";
"WCIR3D" = "Suffeɣ ${content} deg Mastodon";
"ZKJSNu" = "Tasuffeɣt";
"ZS1XaK" = "${content}";
"ZbSjzC" = "Abani";
"Zo4jgJ" = "Abani n tsuffeɣt";
"apSxMG-dYQ5NN" = "Yella ${count} n textiṛiyin yemṣadan d 'Uzayaz'.";
"apSxMG-ehFLjY" = "Yella ${count} n textiṛiyin yemṣadan d 'Yineḍfaren kan'.";
"ayoYEb-dYQ5NN" = "${content}, azayaz";
"ayoYEb-ehFLjY" = "${content}, ineḍfaren kan";
"dUyuGg" = "Asuffeɣ deg Maṣṭudun";
"dYQ5NN" = "Azayez";
"ehFLjY" = "Imeḍfaṛen kan";
"gfePDu" = "Asuffeɣ yecceḍ. ${failureReason}";
"k7dbKQ" = "Tasuffeɣt tettwazen akken iwata.";
"oGiqmY-dYQ5NN" = "I usentem kan, tebɣiḍ 'Azayaz'?";
"oGiqmY-ehFLjY" = "I usentem kan, tebɣiḍ 'Ineḍfaren kan'?";
"rM6dvp" = "URL";
"ryJLwG" = "Tasuffeɣt tettwazen akken iwata. ";

View File

@ -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>Llan %#@count_option@ i yemṣaḍan d '${content}'.</string>
<key>count_option</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>%ld</string>
<key>one</key>
<string>1 textiṛt</string>
<key>other</key>
<string>%ld textiṛiyin</string>
</dict>
</dict>
<key>There are ${count} options matching ${visibility}.</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>Llan %#@count_option@ i yemṣaḍa, d '${visibility}'.</string>
<key>count_option</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>%ld</string>
<key>one</key>
<string>1 uɣewwaṛ</string>
<key>other</key>
<string>%ld iɣewwaṛen</string>
</dict>
</dict>
</dict>
</plist>

View File

@ -1,51 +1,51 @@
"16wxgf" = "Post on Mastodon"; "16wxgf" = "Julkaise Mastodonissa";
"751xkl" = "Text Content"; "751xkl" = "Tekstisisältö";
"CsR7G2" = "Post on Mastodon"; "CsR7G2" = "Julkaise Mastodonissa";
"HZSGTr" = "What content to post?"; "HZSGTr" = "Mitä sisältöä julkaista?";
"HdGikU" = "Posting failed"; "HdGikU" = "Julkaiseminen epäonnistui";
"KDNTJ4" = "Failure Reason"; "KDNTJ4" = "Epäonnistumisen syy";
"RHxKOw" = "Send Post with text content"; "RHxKOw" = "Lähetä julkaisu teksisisällöllä";
"RxSqsb" = "Post"; "RxSqsb" = "Julkaisu";
"WCIR3D" = "Posta ${content} på Mastodon"; "WCIR3D" = "Julkaise ${content} Mastodonissa";
"ZKJSNu" = "Post"; "ZKJSNu" = "Julkaisu";
"ZS1XaK" = "${content}"; "ZS1XaK" = "${content}";
"ZbSjzC" = "Visibility"; "ZbSjzC" = "Näkyvyys";
"Zo4jgJ" = "Post Visibility"; "Zo4jgJ" = "Julkaisun näkyvyys";
"apSxMG-dYQ5NN" = "There are ${count} options matching Public."; "apSxMG-dYQ5NN" = "On ${count} vaihtoehtoa, jotka vastaavat Julkinen.";
"apSxMG-ehFLjY" = "There are ${count} options matching Followers Only."; "apSxMG-ehFLjY" = "On ${count} vaihtoehtoa, jotka vastaavat Vain seuraajat.";
"ayoYEb-dYQ5NN" = "${content}, Public"; "ayoYEb-dYQ5NN" = "${content}, julkinen";
"ayoYEb-ehFLjY" = "${content}, Followers Only"; "ayoYEb-ehFLjY" = "${content}, vain seuraajat";
"dUyuGg" = "Post on Mastodon"; "dUyuGg" = "Julkaise Mastodonissa";
"dYQ5NN" = "Public"; "dYQ5NN" = "Julkinen";
"ehFLjY" = "Followers Only"; "ehFLjY" = "Vain seuraajat";
"gfePDu" = "Posting failed. ${failureReason}"; "gfePDu" = "Julkaiseminen epäonnistui. ${failureReason}";
"k7dbKQ" = "Post was sent successfully."; "k7dbKQ" = "Julkaisu lähetettiin onnistuneesti.";
"oGiqmY-dYQ5NN" = "Just to confirm, you wanted Public?"; "oGiqmY-dYQ5NN" = "Vahvitukseksi, halusit Julkinen?";
"oGiqmY-ehFLjY" = "Just to confirm, you wanted Followers Only?"; "oGiqmY-ehFLjY" = "Vahvitstukseksi, halusit Vain seuraajat?";
"rM6dvp" = "URL"; "rM6dvp" = "URL";
"ryJLwG" = "Post was sent successfully. "; "ryJLwG" = "Julkaisu lähetettiin onnistuneesti. ";

View File

@ -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>On %#@count_option@, joka/jotka vastaavat sisältöön ${content}.</string>
<key>count_option</key> <key>count_option</key>
<dict> <dict>
<key>NSStringFormatSpecTypeKey</key> <key>NSStringFormatSpecTypeKey</key>
@ -13,15 +13,15 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>%ld</string> <string>%ld</string>
<key>one</key> <key>one</key>
<string>1 option</string> <string>1 vaihtoehto</string>
<key>other</key> <key>other</key>
<string>%ld options</string> <string>%ld vaihtoehtoa</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>On vaihtoehtoa %#@count_option@, joka/jotka vastaavat näkyvyyteen ${visibility}.</string>
<key>count_option</key> <key>count_option</key>
<dict> <dict>
<key>NSStringFormatSpecTypeKey</key> <key>NSStringFormatSpecTypeKey</key>
@ -29,9 +29,9 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>%ld</string> <string>%ld</string>
<key>one</key> <key>one</key>
<string>1 option</string> <string>1 vaihtoehto</string>
<key>other</key> <key>other</key>
<string>%ld options</string> <string>%ld vaihtoehtoa</string>
</dict> </dict>
</dict> </dict>
</dict> </dict>

View File

@ -34,9 +34,9 @@
"dUyuGg" = "Post on Mastodon"; "dUyuGg" = "Post on Mastodon";
"dYQ5NN" = "Public"; "dYQ5NN" = "Publikt";
"ehFLjY" = "Followers Only"; "ehFLjY" = "Endast följare";
"gfePDu" = "Posting failed. ${failureReason}"; "gfePDu" = "Posting failed. ${failureReason}";

View File

@ -1,11 +1,6 @@
import os.log import os.log
import Foundation import Foundation
let currentFileURL = URL(fileURLWithPath: "\(#file)", isDirectory: false)
let packageRootURL = currentFileURL.deletingLastPathComponent().deletingLastPathComponent().deletingLastPathComponent()
let inputDirectoryURL = packageRootURL.appendingPathComponent("input", isDirectory: true)
let outputDirectoryURL = packageRootURL.appendingPathComponent("output", isDirectory: true)
// conver i18n JSON templates to strings files // conver i18n JSON templates to strings files
private func convert(from inputDirectoryURL: URL, to outputDirectory: URL) { private func convert(from inputDirectoryURL: URL, to outputDirectory: URL) {
do { do {
@ -17,7 +12,6 @@ private func convert(from inputDirectoryURL: URL, to outputDirectory: URL) {
for inputLanguageDirectoryURL in inputLanguageDirectoryURLs { for inputLanguageDirectoryURL in inputLanguageDirectoryURLs {
let language = inputLanguageDirectoryURL.lastPathComponent let language = inputLanguageDirectoryURL.lastPathComponent
guard let mappedLanguage = map(language: language) else { continue } guard let mappedLanguage = map(language: language) else { continue }
let outputDirectoryURL = outputDirectory.appendingPathComponent(mappedLanguage + ".lproj", isDirectory: true)
os_log("%{public}s[%{public}ld], %{public}s: process %s -> %s", ((#file as NSString).lastPathComponent), #line, #function, language, mappedLanguage) os_log("%{public}s[%{public}ld], %{public}s: process %s -> %s", ((#file as NSString).lastPathComponent), #line, #function, language, mappedLanguage)
let fileURLs = try FileManager.default.contentsOfDirectory( let fileURLs = try FileManager.default.contentsOfDirectory(
@ -29,9 +23,19 @@ private func convert(from inputDirectoryURL: URL, to outputDirectory: URL) {
os_log("%{public}s[%{public}ld], %{public}s: process %s", ((#file as NSString).lastPathComponent), #line, #function, jsonURL.debugDescription) os_log("%{public}s[%{public}ld], %{public}s: process %s", ((#file as NSString).lastPathComponent), #line, #function, jsonURL.debugDescription)
let filename = jsonURL.deletingPathExtension().lastPathComponent let filename = jsonURL.deletingPathExtension().lastPathComponent
guard let (mappedFilename, keyStyle) = map(filename: filename) else { continue } guard let (mappedFilename, keyStyle) = map(filename: filename) else { continue }
let outputFileURL = outputDirectoryURL.appendingPathComponent(mappedFilename).appendingPathExtension("strings") guard let bundle = bundle(filename: filename) else { continue }
let outputDirectoryURL = outputDirectory
.appendingPathComponent(bundle, isDirectory: true)
.appendingPathComponent(mappedLanguage + ".lproj", isDirectory: true)
let outputFileURL = outputDirectoryURL
.appendingPathComponent(mappedFilename)
.appendingPathExtension("strings")
let strings = try process(url: jsonURL, keyStyle: keyStyle) let strings = try process(url: jsonURL, keyStyle: keyStyle)
try? FileManager.default.createDirectory(at: outputDirectoryURL, withIntermediateDirectories: true, attributes: nil) try? FileManager.default.createDirectory(at: outputDirectoryURL, withIntermediateDirectories: true, attributes: nil)
try strings.write(to: outputFileURL, atomically: true, encoding: .utf8) try strings.write(to: outputFileURL, atomically: true, encoding: .utf8)
} }
} }
@ -44,6 +48,7 @@ private func convert(from inputDirectoryURL: URL, to outputDirectory: URL) {
private func map(language: String) -> String? { private func map(language: String) -> String? {
switch language { switch language {
case "ar_SA": return "ar" // Arabic (Saudi Arabia) case "ar_SA": return "ar" // Arabic (Saudi Arabia)
case "eu_ES": return "eu-ES" // Basque
case "ca_ES": return "ca" // Catalan case "ca_ES": return "ca" // Catalan
case "zh_CN": return "zh-Hans" // Chinese Simplified case "zh_CN": return "zh-Hans" // Chinese Simplified
case "nl_NL": return "nl" // Dutch case "nl_NL": return "nl" // Dutch
@ -51,11 +56,12 @@ 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 "kmr_TR": return "ku" // 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
case "es_AR": return "es-419" // Spanish, Argentina case "es_AR": return "es-419" // Spanish, Argentina
case "sv_FI": return "sv_FI" // Swedish, Finland
case "th_TH": return "th" // Thai case "th_TH": return "th" // Thai
default: return nil default: return nil
} }
@ -69,6 +75,14 @@ private func map(filename: String) -> (filename: String, keyStyle: Parser.KeySty
} }
} }
private func bundle(filename: String) -> String? {
switch filename {
case "app": return "module"
case "ios-infoPlist": return "main"
default: return nil
}
}
private func process(url: URL, keyStyle: Parser.KeyStyle) throws -> String { private func process(url: URL, keyStyle: Parser.KeyStyle) throws -> String {
do { do {
let data = try Data(contentsOf: url) let data = try Data(contentsOf: url)
@ -115,9 +129,16 @@ private func move(from inputDirectoryURL: URL, to outputDirectoryURL: URL, pathE
} }
} }
// i18n from "input" to "output"
let currentFileURL = URL(fileURLWithPath: "\(#file)", isDirectory: false)
let packageRootURL = currentFileURL.deletingLastPathComponent().deletingLastPathComponent().deletingLastPathComponent()
let inputDirectoryURL = packageRootURL.appendingPathComponent("input", isDirectory: true)
let outputDirectoryURL = packageRootURL.appendingPathComponent("output", isDirectory: true)
convert(from: inputDirectoryURL, to: outputDirectoryURL) convert(from: inputDirectoryURL, to: outputDirectoryURL)
move(from: inputDirectoryURL, to: outputDirectoryURL, pathExtension: "stringsdict")
let moduleDirectoryURL = outputDirectoryURL.appendingPathComponent("module", isDirectory: true)
move(from: inputDirectoryURL, to: moduleDirectoryURL, pathExtension: "stringsdict")
// i18n from "Intents/input" to "Intents/output" // i18n from "Intents/input" to "Intents/output"
let intentsDirectoryURL = packageRootURL.appendingPathComponent("Intents", isDirectory: true) let intentsDirectoryURL = packageRootURL.appendingPathComponent("Intents", isDirectory: true)

View File

@ -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,17 +28,17 @@
} }
}, },
"edit_profile_failure": { "edit_profile_failure": {
"title": "خطأ في تَحرير الملف الشخصي", "title": "خطأ في تَحرير الملف التعريفي",
"message": "لا يمكن تعديل الملف الشخصي. يُرجى المحاولة مرة أُخرى." "message": "يتعذَّر تعديل الملف التعريفي. يُرجى المُحاولة مرة أُخرى."
}, },
"sign_out": { "sign_out": {
"title": "تسجيل الخروج", "title": "تسجيل الخروج",
"message": "هل أنت متأكد من رغبتك في تسجيل الخروج؟", "message": "هل أنت متأكد من رغبتك في تسجيل الخُروج؟",
"confirm": "تسجيل الخروج" "confirm": "تسجيل الخروج"
}, },
"block_domain": { "block_domain": {
"title": "هل أنتَ مُتأكِّدٌ حقًا مِن رغبتك في حظر %s بالكامل؟ في معظم الحالات، يكون مِنَ الكافي والمُفَضَّل استهداف عدد محدود للحظر أو الكتم. لن ترى محتوى من هذا النطاق وسوف يتم إزالة جميع متابعيك المتواجدين فيه.", "title": "هل أنتَ مُتأكِّدٌ حقًا مِن رغبتك في حظر %s بالكامل؟ في معظم الحالات، يكون مِنَ الكافي والمُفَضَّل استهداف عدد محدود للحظر أو الكتم. لن ترى محتوى من هذا النطاق وسوف يُزال جميع متابعيك المتواجدين فيه.",
"block_entire_domain": "حظر النِطاق" "block_entire_domain": "حظر النِّطاق"
}, },
"save_photo_failure": { "save_photo_failure": {
"title": "إخفاق في حفظ الصورة", "title": "إخفاق في حفظ الصورة",
@ -46,11 +46,11 @@
}, },
"delete_post": { "delete_post": {
"title": "هل أنت متأكد من رغبتك في حذف هذا المنشور؟", "title": "هل أنت متأكد من رغبتك في حذف هذا المنشور؟",
"delete": "احذف" "message": "هَل أنتَ مُتأكِدٌ مِن رَغبتِكَ فِي حَذفِ هَذَا المَنشُور؟"
}, },
"clean_cache": { "clean_cache": {
"title": "مَحو ذاكرة التخزين المؤقت", "title": "مَحو ذاكرة التخزين المؤقت",
"message": "تمَّ مَحو ذاكرة التخزين المؤقت %s بنجاح." "message": "تمَّ مَحو %s مِن ذاكرة التخزين المؤقت بنجاح."
} }
}, },
"controls": { "controls": {
@ -58,9 +58,9 @@
"back": "العودة", "back": "العودة",
"next": "التالي", "next": "التالي",
"previous": "السابق", "previous": "السابق",
"open": "افتح", "open": "فتح",
"add": "إضافة", "add": "إضافة",
"remove": "احذف", "remove": "حذف",
"edit": "تحرير", "edit": "تحرير",
"save": "حفظ", "save": "حفظ",
"ok": "حسنًا", "ok": "حسنًا",
@ -69,7 +69,7 @@
"continue": "واصل", "continue": "واصل",
"compose": "تأليف", "compose": "تأليف",
"cancel": "إلغاء", "cancel": "إلغاء",
"discard": "تجاهل", "discard": "تجاهُل",
"try_again": "المُحاولة مرة أُخرى", "try_again": "المُحاولة مرة أُخرى",
"take_photo": "التقاط صورة", "take_photo": "التقاط صورة",
"save_photo": "حفظ الصورة", "save_photo": "حفظ الصورة",
@ -81,20 +81,21 @@
"share": "المُشارك", "share": "المُشارك",
"share_user": "مُشاركة %s", "share_user": "مُشاركة %s",
"share_post": "مشارك المنشور", "share_post": "مشارك المنشور",
"open_in_safari": "الفتح في Safari", "open_in_safari": "الفَتحُ في Safari",
"find_people": "ابحث عن أشخاص لمتابعتهم", "open_in_browser": "الفَتحُ في المُتَصَفِّح",
"manually_search": "البحث يدوياً بدلاً من ذلك", "find_people": "ابحث عن أشخاص لِمُتابعتهم",
"manually_search": "البحث يدويًا بدلًا من ذلك",
"skip": "تخطي", "skip": "تخطي",
"reply": "الرَد", "reply": "الرَّد",
"report_user": "ابلغ عن %s", "report_user": "الإبلاغ عن %s",
"block_domain": "حظر %s", "block_domain": "حظر %s",
"unblock_domain": "إلغاء حظر %s", "unblock_domain": "رفع الحظر عن %s",
"settings": "الإعدادات", "settings": "الإعدادات",
"delete": "احذف" "delete": "حذف"
}, },
"tabs": { "tabs": {
"home": "الخيط الرئيسي", "home": "الرَّئِيسَة",
"search": "بحث", "search": "البَحث",
"notification": "الإشعارات", "notification": "الإشعارات",
"profile": "الملف التعريفي" "profile": "الملف التعريفي"
}, },
@ -102,17 +103,17 @@
"common": { "common": {
"switch_to_tab": "التبديل إلى %s", "switch_to_tab": "التبديل إلى %s",
"compose_new_post": "تأليف منشور جديد", "compose_new_post": "تأليف منشور جديد",
"show_favorites": "إظهار المفضلة", "show_favorites": "إظهار المُفضَّلة",
"open_settings": "أفتح الإعدادات" "open_settings": "فَتحُ الإعدادات"
}, },
"timeline": { "timeline": {
"previous_status": "المنشور السابق", "previous_status": "المنشور السابق",
"next_status": "المنشور التالي", "next_status": "المنشور التالي",
"open_status": "افتح المنشور", "open_status": "فتح المنشور",
"open_author_profile": "افتح الملف التعريفي للمؤلف", "open_author_profile": "فتح الملف التعريفي للمؤلف",
"open_reblogger_profile": "افتح الملف التعريفي لمشارِك المنشور", "open_reblogger_profile": "فتح الملف التعريفي لمُعيد تدوين المنشور",
"reply_status": "رد على المنشور", "reply_status": "الرَّد على مَنشور",
"toggle_reblog": "تبديل إعادة تدوين منشور", "toggle_reblog": "تبديل إعادة تدوين مَنشور",
"toggle_favorite": "تبديل المفضلة لِمنشور", "toggle_favorite": "تبديل المفضلة لِمنشور",
"toggle_content_warning": "تبديل تحذير المُحتَوى", "toggle_content_warning": "تبديل تحذير المُحتَوى",
"preview_image": "معاينة الصورة" "preview_image": "معاينة الصورة"
@ -124,131 +125,148 @@
}, },
"status": { "status": {
"user_reblogged": "أعادَ %s تدوينها", "user_reblogged": "أعادَ %s تدوينها",
"user_replied_to": د على %s", "user_replied_to": َدًا على %s",
"show_post": "اظهر المنشور", "show_post": "إظهار منشور",
"show_user_profile": "اظهر الملف التعريفي للمستخدم", "show_user_profile": "إظهار الملف التعريفي للمُستخدِم",
"content_warning": "تحذير عن المحتوى", "content_warning": "تحذير المُحتوى",
"media_content_warning": "انقر على أي مكان للكشف", "media_content_warning": "انقر للكشف",
"poll": { "poll": {
"vote": "صَوِّت", "vote": "صَوِّت",
"closed": "انتهى" "closed": "انتهى"
}, },
"actions": { "actions": {
"reply": "رد", "reply": "الرَّد",
"reblog": "إعادة النشر", "reblog": "إعادة النشر",
"unreblog": "تراجع عن إعادة النشر", "unreblog": "التراجُع عن إعادة النشر",
"favorite": "إضافة إلى المفضلة", "favorite": "التفضيل",
"unfavorite": "إزالة من المفضلة", "unfavorite": "إزالة التفضيل",
"menu": "القائمة" "menu": "القائمة",
"hide": "إخفاء"
}, },
"tag": { "tag": {
"url": "عنوان URL", "url": "عنوان URL",
"mention": "أشر إلى", "mention": "إشارة",
"link": "الرابط", "link": "رابط",
"hashtag": "الوسم", "hashtag": "وسم",
"email": "البريد الإلكتروني", "email": "بريد إلكتروني",
"emoji": "إيموجي" "emoji": "رمز تعبيري"
},
"visibility": {
"unlisted": "يُمكِنُ لِلجَميعِ رُؤيَةُ هَذَا المَنشورِ وَلكِنَّهُ لَا يُعرَضُ فِي الخَطِّ الزَمنيّ العام.",
"private": "فَقَطْ مُتابِعينَهُم مَن يُمكِنُهُم رُؤيَةُ هَذَا المَنشُور.",
"private_from_me": "فَقَطْ مُتابِعيني أنَا مَن يُمكِنُهُم رُؤيَةُ هَذَا المَنشُور.",
"direct": "المُستخدمِونَ المُشارِ إليهم فَقَطْ مَن يُمكِنُهُم رُؤيَةُ هَذَا المَنشُور."
} }
}, },
"friendship": { "friendship": {
"follow": "اتبع", "follow": "مُتابَعَة",
"following": "مُتابَع", "following": "مُتابَع",
"request": "إرسال طَلَب", "request": "إرسال طَلَب",
"pending": "قيد المُراجعة", "pending": "قيد المُراجعة",
"block": "حظر", "block": "حظر",
"block_user": "حظر %s", "block_user": "حظر %s",
"block_domain": "حظر %s", "block_domain": "حظر %s",
"unblock": "إلغاء الحَظر", "unblock": "رفع الحَظر",
"unblock_user": "إلغاء حظر %s", "unblock_user": "رفع الحَظر عن %s",
"blocked": "محظور", "blocked": "محظور",
"mute": "أكتم", "mute": "كَتم",
"mute_user": "أكتم %s", "mute_user": "كَتم %s",
"unmute": "إلغاء الكتم", "unmute": "رفع الكتم",
"unmute_user": "إلغاء كتم %s", "unmute_user": "رفع الكتم عن %s",
"muted": "مكتوم", "muted": "مكتوم",
"edit_info": "تعديل المعلومات" "edit_info": "تعديل المعلومات"
}, },
"timeline": { "timeline": {
"filtered": "مُصفَّى", "filtered": "مُصفَّى",
"timestamp": { "timestamp": {
"now": "الأن" "now": "الآن"
}, },
"loader": { "loader": {
"load_missing_posts": "تحميل المنشورات المَفقودة", "load_missing_posts": "تحميل المَنشورات المَفقودَة",
"loading_missing_posts": "تحميل المزيد من المنشورات...", "loading_missing_posts": "يَجري تحميل المَنشورات المَفقودَة...",
"show_more_replies": "إظهار المزيد من الردود" "show_more_replies": "إظهار مَزيد مِنَ الرُّدود"
}, },
"header": { "header": {
"no_status_found": ا توجد هناك منشورات", "no_status_found": َم يُعْثَر على مَنشورات",
"blocking_warning": "لا يُمكنك الاطلاع على الملف الشخصي لهذا المُستخدِم\nحتَّى تَرفعَ الحَظر عنه.\nملفًّكَ الشخصي يَظهَرُ بِمثل هذِهِ الحالة بالنسبةِ لَهُ أيضًا.", "blocking_warning": "لا يُمكِنُكَ الاِطلاع على الملف التَعريفي لهذا المُستخدِم\nحتَّى تَرفعَ الحَظر عنه.\nملفُّكَ التَعريفي يَظهَرُ بِمثل هذِهِ الحالة بالنسبةِ لَهُ أيضًا.",
"user_blocking_warning": "لا يُمكنك الاطلاع على ملف %s الشخصي\nحتَّى تَرفعَ الحَظر عنه.\nملفًّكَ الشخصي يَظهَرُ بِمثل هذِهِ الحالة بالنسبةِ لَهُ أيضًا.", "user_blocking_warning": "لا يُمكنك الاطلاع على ملف %s التَعريفي\nحتَّى تَرفعَ الحَظر عنه.\nملفُّكَ التَعريفي يَظهَرُ بِمثل هذِهِ الحالة بالنسبةِ لَهُ أيضًا.",
"blocked_warning": "لا يُمكِنُكَ عَرض الملف الشخصي لهذا المُستخدِم\nحتَّى يَرفَعَ الحَظر عَنك.", "blocked_warning": "لا يُمكِنُكَ عَرض الملف التَعريفي لهذا المُستخدِم\nحتَّى يَرفَعَ الحَظرَ عَنك.",
"user_blocked_warning": "لا يُمكِنُكَ عَرض ملف %s الشخصي\nحتَّى يَرفَعَ الحَظر عَنك.", "user_blocked_warning": "لا يُمكِنُكَ عَرض ملف %s التَعريفي\nحتَّى يَرفَعَ الحَظر عَنك.",
"suspended_warning": "تمَّ إيقاف هذا المُستخدِم.", "suspended_warning": "تمَّ إيقاف هذا المُستخدِم.",
"user_suspended_warning": "لقد أوقِفَ حِساب %s." "user_suspended_warning": "لقد أُوقِفَ حِساب %s."
} }
} }
} }
}, },
"scene": { "scene": {
"welcome": { "welcome": {
"slogan": "شبكات التواصل الاجتماعي\nمرة أُخرى بين يديك." "slogan": "شبكات التواصل الاجتماعي\nمرة أُخرى بين يديك.",
"get_started": "ابدأ الآن",
"log_in": "تسجيلُ الدخول"
}, },
"server_picker": { "server_picker": {
"title": "اِختر خادِم،\nأي خادِم.", "title": "اِختر خادِم،\nأيًّا مِنهُم.",
"subtitle": "اختر مجتمعًا بناءً على اهتماماتك، منطقتك أو يمكنك حتى اختيارُ مجتمعٍ ذي غرضٍ عام.",
"subtitle_extend": "اختر مجتمعًا بناءً على اهتماماتك، منطقتك أو يمكنك حتى اختيارُ مجتمعٍ ذي غرضٍ عام. تُشغَّل جميعُ المجتمعِ مِن قِبَلِ مُنظمَةٍ أو فردٍ مُستقلٍ تمامًا.",
"button": { "button": {
"category": { "category": {
"all": "الكل", "all": "الكل",
"all_accessiblity_description": "الفئة: الكل", "all_accessiblity_description": "الفئة: الكل",
"academia": "أكاديمي", "academia": "أكاديمي",
"activism": "للنشطاء", "activism": "النشطاء",
"food": "الطعام", "food": "الطعام",
"furry": "فروي", "furry": "مكسو بالفرو",
"games": "ألعاب", "games": "ألعاب",
"general": "عام", "general": "عام",
"journalism": "صحافة", "journalism": "صحافة",
"lgbt": "مجتمع الشواذ", "lgbt": "مجتمع الشواذ",
"regional": "اقليمي", "regional": "إقليمي",
"art": "فن", "art": "فنون",
"music": "موسيقى", "music": "موسيقى",
"tech": كنولوجيا" "tech": قنية"
}, },
"see_less": "اعرض أقل", "see_less": "عرض عناصر أقل",
"see_more": "اعرض المزيد" "see_more": "عرض عناصر أكثر"
}, },
"label": { "label": {
"language": "اللغة", "language": "اللُّغة",
"users": ستخدمون·ات", "users": ُستَخدِم",
"category": "الفئة" "category": "الفئة"
}, },
"input": { "input": {
"placeholder": "ابحث عن خادم أو انضم إلى سيرفر خاص بك..." "placeholder": "اِبحَث عن خادِم أو انضم إلى آخر خاص بك..."
}, },
"empty_state": { "empty_state": {
"finding_servers": "البحث عن خوادم متوفرة...", "finding_servers": "يجري إيجاد خوادم متوفِّرَة...",
"bad_network": "حدث خطأٌ ما أثناء تحميل البيانات. تحقَّق من اتصالك بالإنترنت.", "bad_network": "حدث خطأٌ ما أثناء تحميل البيانات. تحقَّق من اتصالك بالإنترنت.",
"no_results": "لا توجد نتائج" "no_results": "لا توجد نتائج"
} }
}, },
"register": { "register": {
"title": "أخبرنا عنك.", "title": "أخبرنا عن نفسك.",
"input": { "input": {
"avatar": { "avatar": {
"delete": "احذف" "delete": "حذف"
}, },
"username": { "username": {
"placeholder": "اسم المستخدم", "placeholder": "اِسم مُستَخدِم",
"duplicate_prompt": "اسم المستخدم هذا غير متوفر." "duplicate_prompt": "اِسم المُستَخدِم هذا مأخوذٌ بالفعل."
}, },
"display_name": { "display_name": {
"placeholder": "الاسم المعروض" "placeholder": "اِسم العَرض"
}, },
"email": { "email": {
"placeholder": "البريد الإلكتروني" "placeholder": "بريد إلكتروني"
}, },
"password": { "password": {
"placeholder": "الكلمة السرية", "placeholder": "رمز سري",
"hint": "يجب أن تكون كلمتك السرية متكونة من ثمانية أحرف على الأقل" "require": "رمز المرور الخاص بك يجب أن يحتوي على الأقل:",
"character_limit": "ثمانيةُ خانات",
"accessibility": {
"checked": "مُتَحَققٌ مِنه",
"unchecked": "غيرُ مُتَحَققٍ مِنه"
},
"hint": "يجب أن يكون رمزك السري مكوَّن من ثمان خانات على الأقل"
}, },
"invite": { "invite": {
"registration_user_invite_request": "لماذا ترغب في الانضمام؟" "registration_user_invite_request": "لماذا ترغب في الانضمام؟"
@ -256,10 +274,10 @@
}, },
"error": { "error": {
"item": { "item": {
"username": "اسم المستخدم", "username": "اِسم المُستَخدِم",
"email": "البريد الإلكتروني", "email": "البريد الإلكتروني",
"password": "الكلمة السرية", "password": "الرمز السري",
"agreement": "الاتفاقية", "agreement": "الاِتِّفاقيَّة",
"locale": "اللغة المحلية", "locale": "اللغة المحلية",
"reason": "السبب" "reason": "السبب"
}, },
@ -269,40 +287,40 @@
"taken": "إنَّ %s مُستخدَمٌ بالفعل", "taken": "إنَّ %s مُستخدَمٌ بالفعل",
"reserved": "إنَّ %s عبارة عن كلمة مفتاحيَّة محجوزة", "reserved": "إنَّ %s عبارة عن كلمة مفتاحيَّة محجوزة",
"accepted": "يجب أن يُقبل %s", "accepted": "يجب أن يُقبل %s",
"blank": "%s مطلوب", "blank": "%s مَطلوب",
"invalid": "%s غير صالح", "invalid": "%s غير صالح",
"too_long": "%s طويل جداً", "too_long": "%s طويل جداً",
"too_short": "%s قصير جدا", "too_short": "%s قصير جدًا",
"inclusion": "إنَّ %s قيمة غير مدعومة" "inclusion": "إنَّ %s قيمة غير مدعومة"
}, },
"special": { "special": {
"username_invalid": "يُمكِن أن يحتوي اسم المستخدم على أحرف أبجدية، أرقام وشرطات سفلية فقط", "username_invalid": "يُمكِن أن يحتوي اسم المستخدم على أحرف أبجدية، أرقام وشرطات سفلية فقط",
"username_too_long": "اسم المستخدم طويل جداً (يجب ألّا يكون أطول من 30 رمز)", "username_too_long": "اِسم المُستَخدِم طويل جداً (يَجِبُ ألّا يكون أطول من ثلاثين خانة)",
"email_invalid": "هذا عنوان بريد إلكتروني غير صالح", "email_invalid": "هذا عنوان بريد إلكتروني غير صالح",
"password_too_short": "كلمة المرور قصيرة جداً (يجب أن تكون 8 أحرف على الأقل)" "password_too_short": "رمز السر قصير جدًا (يجب أن يتكون من ثمان خانات على الأقل)"
} }
} }
}, },
"server_rules": { "server_rules": {
"title": "بعض القواعد الأساسية.", "title": "بعض القواعد الأساسية.",
"subtitle": "تم سنّ هذه القواعد من قبل مشرفي %s.", "subtitle": "سُنَّت هذه القواعد من قِبل مشرفي %s.",
"prompt": "إن اخترت المواصلة، فإنك تخضع لشروط الخدمة وسياسة الخصوصية لـ %s.", "prompt": "في حال إختيارك للمواصلة، أنت تخضع لشروط الخدمة وسياسة الخصوصية لِـ%s.",
"terms_of_service": روط الخدمة", "terms_of_service": ُرُوط الخِدمَة",
"privacy_policy": ياسة الخصوصية", "privacy_policy": ِياسَة الخُصُوصيَّة",
"button": { "button": {
"confirm": "انا أوافق" "confirm": "أنا مُوافِق"
} }
}, },
"confirm_email": { "confirm_email": {
"title": "شيء واحد أخير.", "title": "شيءٌ أخير.",
"subtitle": "لقد أرسلنا للتو رسالة بريد إلكتروني إلى %s،\nاضغط على الرابط لتأكيد حسابك.", "subtitle": "لقد أرسلنا للتو بريد إلكتروني إلى %s،\nانقر على الرابط لتأكيد حسابك.",
"button": { "button": {
"open_email_app": "افتح تطبيق البريد الإلكتروني", "open_email_app": "فتح تطبيق البريد الإلكتروني",
"dont_receive_email": "لم أستلم أبدًا بريدا إلكترونيا" "resend": "إعادَةُ الإرسال"
}, },
"dont_receive_email": { "dont_receive_email": {
"title": "تحقق من بريدك الإلكتروني", "title": "تحقق من بريدك الإلكتروني",
"description": "تحقق ممَّ إذا كان عنوان بريدك الإلكتروني صحيحًا وكذلك تأكد مِن مجلد البريد غير الهام إذا لم تكن قد فعلت ذلك.", "description": "تحقق ممَّ إذا كان عنوان بريدك الإلكتروني صحيحًا، وكذلك تأكد مِن مجلد البريد غير الهام إذا لم تكن قد فعلت ذلك.",
"resend_email": "إعادة إرسال البريد الإلكتروني" "resend_email": "إعادة إرسال البريد الإلكتروني"
}, },
"open_email_app": { "open_email_app": {
@ -313,12 +331,12 @@
} }
}, },
"home_timeline": { "home_timeline": {
"title": "الخيط الرئيسي", "title": "الرَّئِيسَة",
"navigation_bar_state": { "navigation_bar_state": {
"offline": ير متصل", "offline": َير مُتَّصِل",
"new_posts": "إظهار منشورات جديدة", "new_posts": "إظهار منشورات جديدة",
"published": "تم نشره!", "published": "تمَّ النَّشر!",
"Publishing": "جارٍ نشر المشاركة…" "Publishing": "يَجري نَشر المُشارَكَة..."
} }
}, },
"suggestion_account": { "suggestion_account": {
@ -328,31 +346,31 @@
"compose": { "compose": {
"title": { "title": {
"new_post": "منشور جديد", "new_post": "منشور جديد",
"new_reply": د جديد" "new_reply": َدٌّ جديد"
}, },
"media_selection": { "media_selection": {
"camera": "التقط صورة", "camera": "إلتقاط صورة",
"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": {
"photo": "صورة", "photo": "صورة",
"video": "فيديو", "video": "مقطع مرئي",
"attachment_broken": "هذا ال%s مُعطَّل ويتعذَّر رفعه إلى ماستودون.", "attachment_broken": "هذا ال%s مُعطَّل\nويتعذَّرُ رفعُه إلى ماستودون.",
"description_photo": "صِف الصورة للمكفوفين...", "description_photo": "صِف الصورة للمَكفوفين...",
"description_video": "صِف المقطع المرئي للمكفوفين..." "description_video": "صِف المقطع المرئي للمَكفوفين..."
}, },
"poll": { "poll": {
"duration_time": "المدة: %s", "duration_time": "المُدَّة: %s",
"thirty_minutes": "30 دقيقة", "thirty_minutes": "ثلاثون دقيقة",
"one_hour": "ساعة واحدة", "one_hour": "ساعةٌ واحدة",
"six_hours": "6 ساعات", "six_hours": "سِتُّ ساعات",
"one_day": "يوم واحد", "one_day": "يومٌ واحِد",
"three_days": "3 أيام", "three_days": "ثلاثةُ أيام",
"seven_days": "7 أيام", "seven_days": "سبعةُ أيام",
"option_number": "الخيار %ld" "option_number": "الخيار %ld"
}, },
"content_warning": { "content_warning": {
@ -361,33 +379,33 @@
"visibility": { "visibility": {
"public": "للعامة", "public": "للعامة",
"unlisted": "غير مُدرَج", "unlisted": "غير مُدرَج",
"private": متابعيك فقط", "private": لمُتابِعينَ فقط",
"direct": "ففط للأشخاص المشار إليهم" "direct": "للأشخاص المُشار إليهم فقط"
}, },
"auto_complete": { "auto_complete": {
"space_to_add": "انقر مساحة لإضافتِها" "space_to_add": "انقر على مساحة لإضافتِها"
}, },
"accessibility": { "accessibility": {
"append_attachment": "إضافة مُرفَق", "append_attachment": "إضافة مُرفَق",
"append_poll": "اضافة استطلاع رأي", "append_poll": "اضافة استطلاع رأي",
"remove_poll": "إزالة الاستطلاع", "remove_poll": "إزالة الاستطلاع",
"custom_emoji_picker": "منتقي مخصص للإيموجي", "custom_emoji_picker": "منتقي الرموز التعبيرية المُخصَّص",
"enable_content_warning": نشيط تحذير المحتوى", "enable_content_warning": فعيل تحذير المُحتَوى",
"disable_content_warning": "تعطيل تحذير الحتوى", "disable_content_warning": "تعطيل تحذير المُحتَوى",
"post_visibility_menu": "قائمة ظهور المنشور" "post_visibility_menu": "قائمة ظهور المنشور"
}, },
"keyboard": { "keyboard": {
"discard_post": "تجاهُل المنشور", "discard_post": "تجاهُل المنشور",
"publish_post": "نَشر المَنشُور", "publish_post": "نَشر المَنشُور",
"toggle_poll": "تبديل الاستطلاع", "toggle_poll": "تبديل الاستطلاع",
"toggle_content_warning": "تبديل تحذير المُحتوى", "toggle_content_warning": "تبديل تحذير المُحتَوى",
"append_attachment_entry": "إضافة مُرفَق - %s", "append_attachment_entry": "إضافة مُرفَق - %s",
"select_visibility_entry": "اختر مدى الظهور - %s" "select_visibility_entry": "اختر مدى الظهور - %s"
} }
}, },
"profile": { "profile": {
"dashboard": { "dashboard": {
"posts": نشورات", "posts": َنشورات",
"following": "مُتابَع", "following": "مُتابَع",
"followers": "متابِع" "followers": "متابِع"
}, },
@ -395,22 +413,32 @@
"add_row": "إضافة صف", "add_row": "إضافة صف",
"placeholder": { "placeholder": {
"label": "التسمية", "label": "التسمية",
"content": "المحتوى" "content": "المُحتَوى"
} }
}, },
"segmented_control": { "segmented_control": {
"posts": "منشورات", "posts": "مَنشورات",
"replies": "ردود", "replies": "رُدُود",
"media": "وسائط" "posts_and_replies": "المَنشوراتُ وَالرُدود",
"media": "وَسائِط",
"about": "حَول"
}, },
"relationship_action_alert": { "relationship_action_alert": {
"confirm_unmute_user": { "confirm_mute_user": {
"title": "إلغاء كتم الحساب", "title": "كَتمُ الحِساب",
"message": "أكِّد لرفع كتمْ %s" "message": "تأكيدُ كَتم %s"
}, },
"confirm_unblock_usre": { "confirm_unmute_user": {
"title": "إلغاء حظر الحساب", "title": "رفع الكتم عن الحساب",
"message": "أكِّد لرفع حظر %s" "message": "أكِّد لرفع الكتمْ عن %s"
},
"confirm_block_user": {
"title": "حَظرُ الحِساب",
"message": "تأكيدُ حَظر %s"
},
"confirm_unblock_user": {
"title": "رَفعُ الحَظرِ عَنِ الحِساب",
"message": "تأكيدُ رَفع الحَظرِ عَن %s"
} }
} }
}, },
@ -421,52 +449,54 @@
"footer": "لا يُمكِن عَرض المُتابَعات مِنَ الخوادم الأُخرى." "footer": "لا يُمكِن عَرض المُتابَعات مِنَ الخوادم الأُخرى."
}, },
"search": { "search": {
"title": "بحث", "title": "البحث",
"search_bar": { "search_bar": {
"placeholder": "البحث عن وسوم أو مستخدمين·ات", "placeholder": "البحث عن وسوم أو مستخدمين",
"cancel": "إلغاء" "cancel": "إلغاء"
}, },
"recommend": { "recommend": {
"button_text": "طالع الكل", "button_text": "إظهار الكُل",
"hash_tag": { "hash_tag": {
"title": ات شعبية على ماستدون", "title": ُو شعبيَّة على ماستودون",
"description": "الوسوم التي تحظى بقدر كبير من الاهتمام", "description": "الوُسُومُ الَّتي تَحظى بقدرٍ كبيرٍ مِنَ الاِهتمام",
"people_talking": "%s أشخاص يتحدَّثوا" "people_talking": "%s أشخاص يتحدَّثوا"
}, },
"accounts": { "accounts": {
"title": سابات قد تعجبك", "title": ِساباتٍ قَد تُعجِبُك",
"description": د ترغب في متابعة هذه الحسابات", "description": َد تَرغَب في مُتابَعَةِ هَذِهِ الحِسابات",
"follow": "تابع" "follow": "مُتابَعَة"
} }
}, },
"searching": { "searching": {
"segment": { "segment": {
"all": "الكل", "all": "الكُل",
"people": "الأشخاص", "people": "الأشخاص",
"hashtags": "الوسوم", "hashtags": "الوُسُوم",
"posts": "المنشورات" "posts": "المَنشورات"
}, },
"empty_state": { "empty_state": {
"no_results": يس هناك أية نتيجة" "no_results": ا تُوجَدُ نتائِج"
}, },
"recent_search": مليات البحث الأخيرة", "recent_search": َمَليَّاُت البَحثِ الأخيرَة",
"clear": "مَحو" "clear": "مَحو"
} }
}, },
"favorite": { "favorite": {
"title": فضلتك" "title": ُفضَّلَتُك"
}, },
"notification": { "notification": {
"title": { "title": {
"Everything": "الكل", "Everything": "كُلُّ شيء",
"Mentions": "الإشارات" "Mentions": "الإشارات"
}, },
"user_followed_you": "يتابعك %s", "notification_description": {
"user_favorited your post": "أضاف %s منشورك إلى مفضلته", "followed_you": "بَدَأ بِمُتابَعَتِك",
"user_reblogged_your_post": "أعاد %s تدوين مشاركتك", "favorited_your_post": "فَضَّلَ مَنشُورَك",
"user_mentioned_you": "أشار إليك %s", "reblogged_your_post": "أعادَ تَدوينَ مَنشُورَك",
"user_requested_to_follow_you": "طلب %s متابعتك", "mentioned_you": "أشارَ إليك",
"user_your_poll_has_ended": "%s اِنتهى استطلاعُكَ للرأي", "request_to_follow_you": "طَلَبَ مُتابَعتَك",
"poll_has_ended": "انتهى استطلاعُ الرأي"
},
"keyobard": { "keyobard": {
"show_everything": "إظهار كل شيء", "show_everything": "إظهار كل شيء",
"show_mentions": "إظهار الإشارات" "show_mentions": "إظهار الإشارات"
@ -480,60 +510,70 @@
"title": "الإعدادات", "title": "الإعدادات",
"section": { "section": {
"appearance": { "appearance": {
"title": "المظهر", "title": "المَظهر",
"automatic": "تلقائي", "automatic": "تلقائي",
"light": "مضيءٌ دائمًا", "light": "مضيءٌ دائمًا",
"dark": "مظلمٌ دائِمًا" "dark": "مظلمٌ دائِمًا"
}, },
"look_and_feel": {
"title": "المَظهَرُ وَالشُّعُور",
"use_system": "استخدم النِظام",
"really_dark": "مُظلمٌ حَقًّا",
"sorta_dark": "مُظلمٌ نوعًا ما",
"light": "مُضيء"
},
"notifications": { "notifications": {
"title": "الإشعارات", "title": "الإشعارات",
"favorites": "الإعجاب بِمنشوراتي", "favorites": "بِالإعْجاب بِمَنشوري",
"follows": "يتابعني", "follows": "بِمُتابَعَتي",
"boosts": "إعادة تدوين منشوراتي", "boosts": "بِإعادَةِ تدوينِ مَنشوري",
"mentions": "الإشارة لي", "mentions": "بِالإشارَةِ إليّ",
"trigger": { "trigger": {
"anyone": "أي شخص", "anyone": "أيُّ شخصٍ",
"follower": شترِك", "follower": ُتابِعٌ",
"follow": "أي شخص أُتابِعُه", "follow": "أي شخص أُتابِعُه",
"noone": ا أحد", "noone": َا أحد",
"title": "إشعاري عِندَ" "title": "أشعِرني عِندما يَقومُ"
} }
}, },
"preference": { "preference": {
"title": "التفضيلات", "title": "التَّفضيلات",
"true_black_dark_mode": "النمط الأسود الداكِن الحقيقي", "true_black_dark_mode": "النَّمَطُ الأسوَدُ الداكِنُ الحَقيقي",
"disable_avatar_animation": عطيل الصور الرمزية المتحرِّكة", "disable_avatar_animation": َعطيلُ الصوَرِ الرمزيَّةِ المُتحرِّكَة",
"disable_emoji_animation": عطيل الرموز التعبيرية المتحرِّكَة", "disable_emoji_animation": َعطيلُ الرُموزِ التَّعبيريَّةِ المُتحرِّكَة",
"using_default_browser": "اِستخدام المتصفح الافتراضي لفتح الروابط" "using_default_browser": "اِستِخدامُ المُتصفِّحِ الاِفتراضي لِفتحِ الرَّوابِط"
}, },
"boring_zone": { "boring_zone": {
"title": "المنطقة المملة", "title": "المنطِقَةُ المُملَّة",
"account_settings": "إعدادات الحساب", "account_settings": "إعداداتُ الحِساب",
"terms": روط الخدمة", "terms": ُرُوطُ الخِدمَة",
"privacy": ياسة الخصوصية" "privacy": ِياسَةُ الخُصوصيَّة"
}, },
"spicy_zone": { "spicy_zone": {
"title": "المنطقة الحارة", "title": "المنطِقَةُ اللَّاذِعَة",
"clear": سح ذاكرة التخزين المؤقت للوسائط", "clear": َحوُ ذاكِرَةُ التَّخزينِ المُؤقت لِلوسائِط",
"signout": سجيل الخروج" "signout": َسجيلُ الخُروج"
} }
}, },
"footer": { "footer": {
"mastodon_description": "ماستدون برنامج مفتوح المصدر. يمكنك المساهمة، أو الإبلاغ عن تقارير الأخطاء على GitHub في %s (%s)" "mastodon_description": "ماستودون بَرنامجٌ مَفتُوحُ المَصدَر. يُمكِنُكَ المُساهَمَةُ، أوِ الإبلاغُ عَنِ المُشكِلات عَن طريق مِنصَّة جيت هاب (GitHub) في %s (%s)"
}, },
"keyboard": { "keyboard": {
"close_settings_window": "إغلاق نافذة الإعدادات" "close_settings_window": "إغلاق نافذة الإعدادات"
} }
}, },
"report": { "report": {
"title": "ابلغ عن %s", "title_report": "إبلاغ",
"step1": "الخطوة 1 من 2", "title": "الإبلاغ عن %s",
"step2": "الخطوة 2 من 2", "step1": "الخطوة الأولى مِن أصل اثنتين",
"content1": "هل ترغب في إضافة أي مشاركات أُخرى إلى الشكوى؟", "step2": "الخطوة الثانية والأخيرة",
"content2": "هل هناك أي شيء يجب أن يعرفه المُراقبين حول هذه الشكوى؟", "content1": "هل ترغب في إضافة أي منشورات أُخرى إلى البلاغ؟",
"send": "إرسال الشكوى", "content2": "هل هناك أي شيء يجب أن يعرفه المُراقبين حول هذا البلاغ؟",
"report_sent_title": "شُكرًا لَكَ على الإبلاغ، سَوفَ نَنظُرُ فِي هَذَا الأمر.",
"send": "إرسال البلاغ",
"skip_to_send": "إرسال بدون تعليق", "skip_to_send": "إرسال بدون تعليق",
"text_placeholder": "اكتب أو الصق تعليقات إضافيَّة" "text_placeholder": "اكتب أو الصق تعليقات إضافيَّة",
"reported": "مُبْلَغٌ عَنه"
}, },
"preview": { "preview": {
"keyboard": { "keyboard": {
@ -543,14 +583,14 @@
} }
}, },
"account_list": { "account_list": {
"tab_bar_hint": "المِلف المُحدَّد حاليًا: %s. انقر نقرًا مزدوجًا ثم اضغط مع الاستمرار لإظهار مُبدِّل الحِساب", "tab_bar_hint": "المِلف المُحدَّد حاليًا: %s. انقر نقرًا مزدوجًا مع الاستمرار لإظهار مُبدِّل الحِساب",
"dismiss_account_switcher": "تجاهُل مبدِّل الحساب", "dismiss_account_switcher": "تجاهُل مبدِّل الحِساب",
"add_account": "إضافة حساب" "add_account": "إضافَةُ حِساب"
}, },
"wizard": { "wizard": {
"new_in_mastodon": "جديد في ماستودون", "new_in_mastodon": "جديد في ماستودون",
"multiple_account_switch_intro_description": "بدِّل بين حسابات متعددة عبر الاستمرار بالضغط على زر الملف الشخصي.", "multiple_account_switch_intro_description": "بدِّل بين حسابات متعددة عبر الاستمرار بالضغط على زر الملف الشخصي.",
"accessibility_hint": "انقر نقرًا مزدوجًا لتجاهل النافذة المنبثقة" "accessibility_hint": "انقر نقرًا مزدوجًا لتجاهُل النافذة المنبثقة"
} }
} }
} }

View File

@ -46,7 +46,7 @@
}, },
"delete_post": { "delete_post": {
"title": "Estàs segur que vols suprimir aquesta publicació?", "title": "Estàs segur que vols suprimir aquesta publicació?",
"delete": "Esborra" "message": "Estàs segur que vols suprimir aquesta publicació?"
}, },
"clean_cache": { "clean_cache": {
"title": "Neteja la memòria cau", "title": "Neteja la memòria cau",
@ -82,6 +82,7 @@
"share_user": "Compartir %s", "share_user": "Compartir %s",
"share_post": "Compartir Publicació", "share_post": "Compartir Publicació",
"open_in_safari": "Obrir a Safari", "open_in_safari": "Obrir a Safari",
"open_in_browser": "Obre al navegador",
"find_people": "Busca persones per seguir", "find_people": "Busca persones per seguir",
"manually_search": "Cerca manualment a canvi", "manually_search": "Cerca manualment a canvi",
"skip": "Omet", "skip": "Omet",
@ -139,7 +140,8 @@
"unreblog": "Desfer l'impuls", "unreblog": "Desfer l'impuls",
"favorite": "Favorit", "favorite": "Favorit",
"unfavorite": "Desfer Favorit", "unfavorite": "Desfer Favorit",
"menu": "Menú" "menu": "Menú",
"hide": "Amaga"
}, },
"tag": { "tag": {
"url": "URL", "url": "URL",
@ -148,6 +150,12 @@
"hashtag": "Etiqueta", "hashtag": "Etiqueta",
"email": "Correu electrònic", "email": "Correu electrònic",
"emoji": "Emoji" "emoji": "Emoji"
},
"visibility": {
"unlisted": "Tothom pot veure aquesta publicació però no es mostra en la línia de temps pública.",
"private": "Només els seus seguidors poden veure aquesta publicació.",
"private_from_me": "Només els meus seguidors poden veure aquesta publicació.",
"direct": "Només l'usuari mencionat pot veure aquesta publicació."
} }
}, },
"friendship": { "friendship": {
@ -192,10 +200,14 @@
}, },
"scene": { "scene": {
"welcome": { "welcome": {
"slogan": "Xarxa social\nde nou a les teves mans." "slogan": "Xarxa social\nde nou a les teves mans.",
"get_started": "Comença",
"log_in": "Inicia sessió"
}, },
"server_picker": { "server_picker": {
"title": "Tria un servidor,\nqualsevol servidor.", "title": "Tria un servidor,\nqualsevol servidor.",
"subtitle": "Tria una comunitat segons els teus interessos, regió o una de propòsit general.",
"subtitle_extend": "Tria una comunitat segons els teus interessos, regió o una de propòsit general. Cada comunitat és operada per una organització totalment independent o individualment.",
"button": { "button": {
"category": { "category": {
"all": "Totes", "all": "Totes",
@ -248,6 +260,12 @@
}, },
"password": { "password": {
"placeholder": "contrasenya", "placeholder": "contrasenya",
"require": "La teva contrasenya com a mínim necessita:",
"character_limit": "8 caràcters",
"accessibility": {
"checked": "verificat",
"unchecked": "no verificat"
},
"hint": "La teva contrasenya ha de tenir com a mínim buit caràcters" "hint": "La teva contrasenya ha de tenir com a mínim buit caràcters"
}, },
"invite": { "invite": {
@ -298,7 +316,7 @@
"subtitle": "Acabem d'enviar un correu electrònic a %s,\ntoca l'enllaç per a confirmar el teu compte.", "subtitle": "Acabem d'enviar un correu electrònic a %s,\ntoca l'enllaç per a confirmar el teu compte.",
"button": { "button": {
"open_email_app": "Obre l'aplicació de correu", "open_email_app": "Obre l'aplicació de correu",
"dont_receive_email": "No he rebut cap correu electrònic" "resend": "Reenvia"
}, },
"dont_receive_email": { "dont_receive_email": {
"title": "Comprova el teu correu", "title": "Comprova el teu correu",
@ -401,16 +419,26 @@
"segmented_control": { "segmented_control": {
"posts": "Publicacions", "posts": "Publicacions",
"replies": "Respostes", "replies": "Respostes",
"media": "Mèdia" "posts_and_replies": "Publicacions i Respostes",
"media": "Mèdia",
"about": "Quant a"
}, },
"relationship_action_alert": { "relationship_action_alert": {
"confirm_mute_user": {
"title": "Silencia el Compte",
"message": "Confirma per a silenciar %s"
},
"confirm_unmute_user": { "confirm_unmute_user": {
"title": "Desfer silenciar compte", "title": "Desfer silenciar compte",
"message": "Confirma deixar de silenciar a %s" "message": "Confirma deixar de silenciar a %s"
}, },
"confirm_unblock_usre": { "confirm_block_user": {
"title": "Desbloquejar Compte", "title": "Bloqueja el Compte",
"message": "Confirma desbloquejar a %s" "message": "Confirma per a bloquejar %s"
},
"confirm_unblock_user": {
"title": "Desbloqueja el Compte",
"message": "Confirma per a desbloquejar %s"
} }
} }
}, },
@ -461,12 +489,14 @@
"Everything": "Tot", "Everything": "Tot",
"Mentions": "Mencions" "Mentions": "Mencions"
}, },
"user_followed_you": "%s et segueix", "notification_description": {
"user_favorited your post": "%s ha afavorit el teu estat", "followed_you": "et segueix",
"user_reblogged_your_post": "%s ha impulsat el teu estat", "favorited_your_post": "ha afavorit la teva publicació",
"user_mentioned_you": "%s t'ha esmentat", "reblogged_your_post": "ha impulsat la teva publicació",
"user_requested_to_follow_you": "%s ha sol·licitat seguir-te", "mentioned_you": "t'ha mencionat",
"user_your_poll_has_ended": "%s L'enquesta ha finalitzat", "request_to_follow_you": "ha sol·licitat seguir-te",
"poll_has_ended": "la enquesta ha finalitzat"
},
"keyobard": { "keyobard": {
"show_everything": "Mostrar-ho tot", "show_everything": "Mostrar-ho tot",
"show_mentions": "Mostrar Mencions" "show_mentions": "Mostrar Mencions"
@ -485,6 +515,13 @@
"light": "Sempre Clara", "light": "Sempre Clara",
"dark": "Sempre Fosca" "dark": "Sempre Fosca"
}, },
"look_and_feel": {
"title": "Aspecte i Comportament",
"use_system": "Usa el del Sistema",
"really_dark": "Realment Negre",
"sorta_dark": "Una Mena de Fosc",
"light": "Clar"
},
"notifications": { "notifications": {
"title": "Notificacions", "title": "Notificacions",
"favorites": "Ha afavorit el meu estat", "favorites": "Ha afavorit el meu estat",
@ -526,14 +563,17 @@
} }
}, },
"report": { "report": {
"title_report": "Informe",
"title": "Informa sobre %s", "title": "Informa sobre %s",
"step1": "Pas 1 de 2", "step1": "Pas 1 de 2",
"step2": "Pas 2 de 2", "step2": "Pas 2 de 2",
"content1": "Hi ha alguna altre publicació que vulguis afegir a l'informe?", "content1": "Hi ha alguna altre publicació que vulguis afegir a l'informe?",
"content2": "Hi ha alguna cosa que els moderadors hagin de saber sobre aquest informe?", "content2": "Hi ha alguna cosa que els moderadors hagin de saber sobre aquest informe?",
"report_sent_title": "Gràcies per informar, ho investigarem.",
"send": "Envia Informe", "send": "Envia Informe",
"skip_to_send": "Envia sense comentaris", "skip_to_send": "Envia sense comentaris",
"text_placeholder": "Escriu o enganxa comentaris addicionals" "text_placeholder": "Escriu o enganxa comentaris addicionals",
"reported": "REPORTAT"
}, },
"preview": { "preview": {
"keyboard": { "keyboard": {

View File

@ -45,8 +45,8 @@
"message": "Please enable the photo library access permission to save the photo." "message": "Please enable the photo library access permission to save the photo."
}, },
"delete_post": { "delete_post": {
"title": "Are you sure you want to delete this post?", "title": "Delete Post",
"delete": "Delete" "message": "Are you sure you want to delete this post?"
}, },
"clean_cache": { "clean_cache": {
"title": "Clean Cache", "title": "Clean Cache",
@ -82,6 +82,7 @@
"share_user": "Share %s", "share_user": "Share %s",
"share_post": "Share Post", "share_post": "Share Post",
"open_in_safari": "Open in Safari", "open_in_safari": "Open in Safari",
"open_in_browser": "Open in Browser",
"find_people": "Find people to follow", "find_people": "Find people to follow",
"manually_search": "Manually search instead", "manually_search": "Manually search instead",
"skip": "Skip", "skip": "Skip",
@ -139,7 +140,8 @@
"unreblog": "Undo reblog", "unreblog": "Undo reblog",
"favorite": "Favorite", "favorite": "Favorite",
"unfavorite": "Unfavorite", "unfavorite": "Unfavorite",
"menu": "Menu" "menu": "Menu",
"hide": "Hide"
}, },
"tag": { "tag": {
"url": "URL", "url": "URL",
@ -148,6 +150,12 @@
"hashtag": "Hashtag", "hashtag": "Hashtag",
"email": "Email", "email": "Email",
"emoji": "Emoji" "emoji": "Emoji"
},
"visibility": {
"unlisted": "Everyone can see this post but not display in the public timeline.",
"private": "Only their followers can see this post.",
"private_from_me": "Only my followers can see this post.",
"direct": "Only mentioned user can see this post."
} }
}, },
"friendship": { "friendship": {
@ -192,10 +200,14 @@
}, },
"scene": { "scene": {
"welcome": { "welcome": {
"slogan": "Social networking\nback in your hands." "slogan": "Social networking\nback in your hands.",
"get_started": "Get Started",
"log_in": "Log In"
}, },
"server_picker": { "server_picker": {
"title": "Pick a server,\nany server.", "title": "Mastodon is made of users in different communities.",
"subtitle": "Pick a community based on your interests, region, or a general purpose one.",
"subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": { "button": {
"category": { "category": {
"all": "All", "all": "All",
@ -222,7 +234,7 @@
"category": "CATEGORY" "category": "CATEGORY"
}, },
"input": { "input": {
"placeholder": "Find a server or join your own..." "placeholder": "Search communities"
}, },
"empty_state": { "empty_state": {
"finding_servers": "Finding available servers...", "finding_servers": "Finding available servers...",
@ -231,7 +243,7 @@
} }
}, },
"register": { "register": {
"title": "Tell us about you.", "title": "Lets get you set up on %s",
"input": { "input": {
"avatar": { "avatar": {
"delete": "Delete" "delete": "Delete"
@ -248,6 +260,12 @@
}, },
"password": { "password": {
"placeholder": "password", "placeholder": "password",
"require": "Your password needs at least:",
"character_limit": "8 characters",
"accessibility": {
"checked": "checked",
"unchecked": "unchecked"
},
"hint": "Your password needs at least eight characters" "hint": "Your password needs at least eight characters"
}, },
"invite": { "invite": {
@ -285,7 +303,7 @@
}, },
"server_rules": { "server_rules": {
"title": "Some ground rules.", "title": "Some ground rules.",
"subtitle": "These rules are set by the admins of %s.", "subtitle": "These are set and enforced by the %s moderators.",
"prompt": "By continuing, youre subject to the terms of service and privacy policy for %s.", "prompt": "By continuing, youre subject to the terms of service and privacy policy for %s.",
"terms_of_service": "terms of service", "terms_of_service": "terms of service",
"privacy_policy": "privacy policy", "privacy_policy": "privacy policy",
@ -295,10 +313,10 @@
}, },
"confirm_email": { "confirm_email": {
"title": "One last thing.", "title": "One last thing.",
"subtitle": "We just sent an email to %s,\ntap the link to confirm your account.", "subtitle": "Tap the link we emailed to you to verify your account.",
"button": { "button": {
"open_email_app": "Open Email App", "open_email_app": "Open Email App",
"dont_receive_email": "I never got an email" "resend": "Resend"
}, },
"dont_receive_email": { "dont_receive_email": {
"title": "Check your email", "title": "Check your email",
@ -401,14 +419,24 @@
"segmented_control": { "segmented_control": {
"posts": "Posts", "posts": "Posts",
"replies": "Replies", "replies": "Replies",
"media": "Media" "posts_and_replies": "Posts and Replies",
"media": "Media",
"about": "About"
}, },
"relationship_action_alert": { "relationship_action_alert": {
"confirm_mute_user": {
"title": "Mute Account",
"message": "Confirm to mute %s"
},
"confirm_unmute_user": { "confirm_unmute_user": {
"title": "Unmute Account", "title": "Unmute Account",
"message": "Confirm to unmute %s" "message": "Confirm to unmute %s"
}, },
"confirm_unblock_usre": { "confirm_block_user": {
"title": "Block Account",
"message": "Confirm to block %s"
},
"confirm_unblock_user": {
"title": "Unblock Account", "title": "Unblock Account",
"message": "Confirm to unblock %s" "message": "Confirm to unblock %s"
} }
@ -461,12 +489,14 @@
"Everything": "Everything", "Everything": "Everything",
"Mentions": "Mentions" "Mentions": "Mentions"
}, },
"user_followed_you": "%s followed you", "notification_description": {
"user_favorited your post": "%s favorited your post", "followed_you": "followed you",
"user_reblogged_your_post": "%s reblogged your post", "favorited_your_post": "favorited your post",
"user_mentioned_you": "%s mentioned you", "reblogged_your_post": "reblogged your post",
"user_requested_to_follow_you": "%s requested to follow you", "mentioned_you": "mentioned you",
"user_your_poll_has_ended": "%s Your poll has ended", "request_to_follow_you": "request to follow you",
"poll_has_ended": "poll has ended"
},
"keyobard": { "keyobard": {
"show_everything": "Show Everything", "show_everything": "Show Everything",
"show_mentions": "Show Mentions" "show_mentions": "Show Mentions"
@ -485,6 +515,13 @@
"light": "Always Light", "light": "Always Light",
"dark": "Always Dark" "dark": "Always Dark"
}, },
"look_and_feel": {
"title": "Look and Feel",
"use_system": "Use System",
"really_dark": "Really Dark",
"sorta_dark": "Sorta Dark",
"light": "Light"
},
"notifications": { "notifications": {
"title": "Notifications", "title": "Notifications",
"favorites": "Favorites my post", "favorites": "Favorites my post",
@ -526,14 +563,17 @@
} }
}, },
"report": { "report": {
"title_report": "Report",
"title": "Report %s", "title": "Report %s",
"step1": "Step 1 of 2", "step1": "Step 1 of 2",
"step2": "Step 2 of 2", "step2": "Step 2 of 2",
"content1": "Are there any other posts youd like to add to the report?", "content1": "Are there any other posts youd like to add to the report?",
"content2": "Is there anything the moderators should know about this report?", "content2": "Is there anything the moderators should know about this report?",
"report_sent_title": "Thanks for reporting, well look into this.",
"send": "Send Report", "send": "Send Report",
"skip_to_send": "Send without comment", "skip_to_send": "Send without comment",
"text_placeholder": "Type or paste additional comments" "text_placeholder": "Type or paste additional comments",
"reported": "REPORTED"
}, },
"preview": { "preview": {
"keyboard": { "keyboard": {

View File

@ -45,8 +45,8 @@
"message": "Please enable the photo library access permission to save the photo." "message": "Please enable the photo library access permission to save the photo."
}, },
"delete_post": { "delete_post": {
"title": "Are you sure you want to delete this post?", "title": "Delete Post",
"delete": "Delete" "message": "Are you sure you want to delete this post?"
}, },
"clean_cache": { "clean_cache": {
"title": "Clean Cache", "title": "Clean Cache",
@ -82,6 +82,7 @@
"share_user": "Share %s", "share_user": "Share %s",
"share_post": "Share Post", "share_post": "Share Post",
"open_in_safari": "Open in Safari", "open_in_safari": "Open in Safari",
"open_in_browser": "Open in Browser",
"find_people": "Find people to follow", "find_people": "Find people to follow",
"manually_search": "Manually search instead", "manually_search": "Manually search instead",
"skip": "Skip", "skip": "Skip",
@ -139,7 +140,8 @@
"unreblog": "Undo reblog", "unreblog": "Undo reblog",
"favorite": "Favorite", "favorite": "Favorite",
"unfavorite": "Unfavorite", "unfavorite": "Unfavorite",
"menu": "Menu" "menu": "Menu",
"hide": "Hide"
}, },
"tag": { "tag": {
"url": "URL", "url": "URL",
@ -148,6 +150,12 @@
"hashtag": "Hashtag", "hashtag": "Hashtag",
"email": "Email", "email": "Email",
"emoji": "Emoji" "emoji": "Emoji"
},
"visibility": {
"unlisted": "Everyone can see this post but not display in the public timeline.",
"private": "Only their followers can see this post.",
"private_from_me": "Only my followers can see this post.",
"direct": "Only mentioned user can see this post."
} }
}, },
"friendship": { "friendship": {
@ -192,10 +200,14 @@
}, },
"scene": { "scene": {
"welcome": { "welcome": {
"slogan": "Social networking\nback in your hands." "slogan": "Social networking\nback in your hands.",
"get_started": "Get Started",
"log_in": "Log In"
}, },
"server_picker": { "server_picker": {
"title": "Pick a server,\nany server.", "title": "Mastodon is made of users in different communities.",
"subtitle": "Pick a community based on your interests, region, or a general purpose one.",
"subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": { "button": {
"category": { "category": {
"all": "All", "all": "All",
@ -222,7 +234,7 @@
"category": "CATEGORY" "category": "CATEGORY"
}, },
"input": { "input": {
"placeholder": "Find a server or join your own..." "placeholder": "Search communities"
}, },
"empty_state": { "empty_state": {
"finding_servers": "Finding available servers...", "finding_servers": "Finding available servers...",
@ -231,7 +243,7 @@
} }
}, },
"register": { "register": {
"title": "Tell us about you.", "title": "Lets get you set up on %s",
"input": { "input": {
"avatar": { "avatar": {
"delete": "Delete" "delete": "Delete"
@ -248,6 +260,12 @@
}, },
"password": { "password": {
"placeholder": "password", "placeholder": "password",
"require": "Your password needs at least:",
"character_limit": "8 characters",
"accessibility": {
"checked": "checked",
"unchecked": "unchecked"
},
"hint": "Your password needs at least eight characters" "hint": "Your password needs at least eight characters"
}, },
"invite": { "invite": {
@ -285,7 +303,7 @@
}, },
"server_rules": { "server_rules": {
"title": "Some ground rules.", "title": "Some ground rules.",
"subtitle": "These rules are set by the admins of %s.", "subtitle": "These are set and enforced by the %s moderators.",
"prompt": "By continuing, youre subject to the terms of service and privacy policy for %s.", "prompt": "By continuing, youre subject to the terms of service and privacy policy for %s.",
"terms_of_service": "terms of service", "terms_of_service": "terms of service",
"privacy_policy": "privacy policy", "privacy_policy": "privacy policy",
@ -295,10 +313,10 @@
}, },
"confirm_email": { "confirm_email": {
"title": "One last thing.", "title": "One last thing.",
"subtitle": "We just sent an email to %s,\ntap the link to confirm your account.", "subtitle": "Tap the link we emailed to you to verify your account.",
"button": { "button": {
"open_email_app": "Open Email App", "open_email_app": "Open Email App",
"dont_receive_email": "I never got an email" "resend": "Resend"
}, },
"dont_receive_email": { "dont_receive_email": {
"title": "Check your email", "title": "Check your email",
@ -401,14 +419,24 @@
"segmented_control": { "segmented_control": {
"posts": "Posts", "posts": "Posts",
"replies": "Replies", "replies": "Replies",
"media": "Media" "posts_and_replies": "Posts and Replies",
"media": "Media",
"about": "About"
}, },
"relationship_action_alert": { "relationship_action_alert": {
"confirm_mute_user": {
"title": "Mute Account",
"message": "Confirm to mute %s"
},
"confirm_unmute_user": { "confirm_unmute_user": {
"title": "Unmute Account", "title": "Unmute Account",
"message": "Confirm to unmute %s" "message": "Confirm to unmute %s"
}, },
"confirm_unblock_usre": { "confirm_block_user": {
"title": "Block Account",
"message": "Confirm to block %s"
},
"confirm_unblock_user": {
"title": "Unblock Account", "title": "Unblock Account",
"message": "Confirm to unblock %s" "message": "Confirm to unblock %s"
} }
@ -461,12 +489,14 @@
"Everything": "Everything", "Everything": "Everything",
"Mentions": "Mentions" "Mentions": "Mentions"
}, },
"user_followed_you": "%s followed you", "notification_description": {
"user_favorited your post": "%s favorited your post", "followed_you": "followed you",
"user_reblogged_your_post": "%s reblogged your post", "favorited_your_post": "favorited your post",
"user_mentioned_you": "%s mentioned you", "reblogged_your_post": "reblogged your post",
"user_requested_to_follow_you": "%s requested to follow you", "mentioned_you": "mentioned you",
"user_your_poll_has_ended": "%s Your poll has ended", "request_to_follow_you": "request to follow you",
"poll_has_ended": "poll has ended"
},
"keyobard": { "keyobard": {
"show_everything": "Show Everything", "show_everything": "Show Everything",
"show_mentions": "Show Mentions" "show_mentions": "Show Mentions"
@ -485,6 +515,13 @@
"light": "Always Light", "light": "Always Light",
"dark": "Always Dark" "dark": "Always Dark"
}, },
"look_and_feel": {
"title": "Look and Feel",
"use_system": "Use System",
"really_dark": "Really Dark",
"sorta_dark": "Sorta Dark",
"light": "Light"
},
"notifications": { "notifications": {
"title": "Notifications", "title": "Notifications",
"favorites": "Favorites my post", "favorites": "Favorites my post",
@ -526,14 +563,17 @@
} }
}, },
"report": { "report": {
"title_report": "Report",
"title": "Report %s", "title": "Report %s",
"step1": "Step 1 of 2", "step1": "Step 1 of 2",
"step2": "Step 2 of 2", "step2": "Step 2 of 2",
"content1": "Are there any other posts youd like to add to the report?", "content1": "Are there any other posts youd like to add to the report?",
"content2": "Is there anything the moderators should know about this report?", "content2": "Is there anything the moderators should know about this report?",
"report_sent_title": "Thanks for reporting, well look into this.",
"send": "Send Report", "send": "Send Report",
"skip_to_send": "Send without comment", "skip_to_send": "Send without comment",
"text_placeholder": "Type or paste additional comments" "text_placeholder": "Type or paste additional comments",
"reported": "REPORTED"
}, },
"preview": { "preview": {
"keyboard": { "keyboard": {

View File

@ -46,7 +46,7 @@
}, },
"delete_post": { "delete_post": {
"title": "Bist du dir sicher, dass du diesen Beitrag löschen möchtest?", "title": "Bist du dir sicher, dass du diesen Beitrag löschen möchtest?",
"delete": "Löschen" "message": "Bist du dir sicher, dass du diesen Beitrag löschen willst?"
}, },
"clean_cache": { "clean_cache": {
"title": "Zwischenspeicher leeren", "title": "Zwischenspeicher leeren",
@ -67,7 +67,7 @@
"done": "Fertig", "done": "Fertig",
"confirm": "Bestätigen", "confirm": "Bestätigen",
"continue": "Fortfahren", "continue": "Fortfahren",
"compose": "Compose", "compose": "Neue Nachricht",
"cancel": "Abbrechen", "cancel": "Abbrechen",
"discard": "Verwerfen", "discard": "Verwerfen",
"try_again": "Nochmals versuchen", "try_again": "Nochmals versuchen",
@ -82,6 +82,7 @@
"share_user": "%s teilen", "share_user": "%s teilen",
"share_post": "Beitrag teilen", "share_post": "Beitrag teilen",
"open_in_safari": "In Safari öffnen", "open_in_safari": "In Safari öffnen",
"open_in_browser": "Im Browser anzeigen",
"find_people": "Finde Personen zum Folgen", "find_people": "Finde Personen zum Folgen",
"manually_search": "Stattdessen manuell suchen", "manually_search": "Stattdessen manuell suchen",
"skip": "Überspringen", "skip": "Überspringen",
@ -139,7 +140,8 @@
"unreblog": "Nicht mehr teilen", "unreblog": "Nicht mehr teilen",
"favorite": "Favorit", "favorite": "Favorit",
"unfavorite": "Aus Favoriten entfernen", "unfavorite": "Aus Favoriten entfernen",
"menu": "Menü" "menu": "Menü",
"hide": "Verstecken"
}, },
"tag": { "tag": {
"url": "URL", "url": "URL",
@ -148,6 +150,12 @@
"hashtag": "Hashtag", "hashtag": "Hashtag",
"email": "E-Mail", "email": "E-Mail",
"emoji": "Emoji" "emoji": "Emoji"
},
"visibility": {
"unlisted": "Jeder kann diesen Post sehen, aber nicht in der öffentlichen Timeline zeigen.",
"private": "Nur Follower des Authors können diesen Beitrag sehen.",
"private_from_me": "Nur meine Follower können diesen Beitrag sehen.",
"direct": "Nur erwähnte Benutzer können diesen Beitrag sehen."
} }
}, },
"friendship": { "friendship": {
@ -192,10 +200,14 @@
}, },
"scene": { "scene": {
"welcome": { "welcome": {
"slogan": "Soziale Netzwerke wieder in deinen Händen." "slogan": "Soziale Netzwerke wieder in deinen Händen.",
"get_started": "Erste Schritte",
"log_in": "Anmelden"
}, },
"server_picker": { "server_picker": {
"title": "Wähle einen Server,\nbeliebigen Server.", "title": "Wähle einen Server,\nbeliebigen Server.",
"subtitle": "Wähle eine Gemeinschaft, die auf deinen Interessen, Region oder einem allgemeinen Zweck basiert.",
"subtitle_extend": "Wähle eine Gemeinschaft basierend auf deinen Interessen, deiner Region oder einem allgemeinen Zweck. Jede Gemeinschaft wird von einer völlig unabhängigen Organisation oder Einzelperson betrieben.",
"button": { "button": {
"category": { "category": {
"all": "Alle", "all": "Alle",
@ -248,6 +260,12 @@
}, },
"password": { "password": {
"placeholder": "Passwort", "placeholder": "Passwort",
"require": "Anforderungen an dein Passwort:",
"character_limit": "8 Zeichen",
"accessibility": {
"checked": "Häkchen gesetzt",
"unchecked": "Häkchen entfernt"
},
"hint": "Ihr Passwort muss mindestens 8 Zeichen lang sein" "hint": "Ihr Passwort muss mindestens 8 Zeichen lang sein"
}, },
"invite": { "invite": {
@ -298,7 +316,7 @@
"subtitle": "Wir haben gerade eine E-Mail an %s gesendet,\ntippe darin auf den Link, um Dein Konto zu bestätigen.", "subtitle": "Wir haben gerade eine E-Mail an %s gesendet,\ntippe darin auf den Link, um Dein Konto zu bestätigen.",
"button": { "button": {
"open_email_app": "E-Mail-App öffnen", "open_email_app": "E-Mail-App öffnen",
"dont_receive_email": "Ich habe keine E-Mail erhalten." "resend": "Erneut senden"
}, },
"dont_receive_email": { "dont_receive_email": {
"title": "Bitte überprüfe deine E-Mails", "title": "Bitte überprüfe deine E-Mails",
@ -401,24 +419,34 @@
"segmented_control": { "segmented_control": {
"posts": "Beiträge", "posts": "Beiträge",
"replies": "Antworten", "replies": "Antworten",
"media": "Medien" "posts_and_replies": "Beiträge und Antworten",
"media": "Medien",
"about": "Über"
}, },
"relationship_action_alert": { "relationship_action_alert": {
"confirm_mute_user": {
"title": "Konto stummschalten",
"message": "Bestätige %s stumm zu schalten"
},
"confirm_unmute_user": { "confirm_unmute_user": {
"title": "Ton einschalten", "title": "Ton einschalten",
"message": "Bestätige um %s nicht mehr stummzuschalten" "message": "Bestätige um %s nicht mehr stummzuschalten"
}, },
"confirm_unblock_usre": { "confirm_block_user": {
"title": "Konto blockieren",
"message": "Bestätige %s zu blockieren"
},
"confirm_unblock_user": {
"title": "Konto entsperren", "title": "Konto entsperren",
"message": "Bestätigen zum Entsperren von %s" "message": "Bestätige %s zu entsperren"
} }
} }
}, },
"follower": { "follower": {
"footer": "Followers from other servers are not displayed." "footer": "Follower von anderen Servern werden nicht angezeigt."
}, },
"following": { "following": {
"footer": "Follows from other servers are not displayed." "footer": "Wem das Konto folgt wird von anderen Servern werden nicht angezeigt."
}, },
"search": { "search": {
"title": "Suche", "title": "Suche",
@ -461,12 +489,14 @@
"Everything": "Alles", "Everything": "Alles",
"Mentions": "Erwähnungen" "Mentions": "Erwähnungen"
}, },
"user_followed_you": "%s folgte dir", "notification_description": {
"user_favorited your post": "%s favorisierte deinen Beitrag", "followed_you": "folgt dir",
"user_reblogged_your_post": "%s teilte deinen Beitrag", "favorited_your_post": "hat deinen Beitrag favorisiert",
"user_mentioned_you": "%s erwähnte dich", "reblogged_your_post": "hat deinen Beitrag geteilt",
"user_requested_to_follow_you": "%s beantragte dir zu folgen", "mentioned_you": "hat dich erwähnt",
"user_your_poll_has_ended": "%s deine Umfrage ist beendet", "request_to_follow_you": "Folgeanfrage",
"poll_has_ended": "Umfrage wurde beendet"
},
"keyobard": { "keyobard": {
"show_everything": "Alles anzeigen", "show_everything": "Alles anzeigen",
"show_mentions": "Erwähnungen anzeigen" "show_mentions": "Erwähnungen anzeigen"
@ -485,6 +515,13 @@
"light": "Immer hell", "light": "Immer hell",
"dark": "Immer dunkel" "dark": "Immer dunkel"
}, },
"look_and_feel": {
"title": "Erscheinungsbild",
"use_system": "Systemeinstellung benutzen",
"really_dark": "Wirklich dunkel",
"sorta_dark": "Ziemlich dunkel",
"light": "Hell"
},
"notifications": { "notifications": {
"title": "Benachrichtigungen", "title": "Benachrichtigungen",
"favorites": "Meinen Beitrag favorisiert", "favorites": "Meinen Beitrag favorisiert",
@ -507,7 +544,7 @@
"using_default_browser": "Standardbrowser zum Öffnen von Links verwenden" "using_default_browser": "Standardbrowser zum Öffnen von Links verwenden"
}, },
"boring_zone": { "boring_zone": {
"title": "Der Langweiliger Bereich", "title": "Der langweilige Bereich",
"account_settings": "Kontoeinstellungen", "account_settings": "Kontoeinstellungen",
"terms": "Allgemeine Geschäftsbedingungen", "terms": "Allgemeine Geschäftsbedingungen",
"privacy": "Datenschutzerklärung" "privacy": "Datenschutzerklärung"
@ -526,14 +563,17 @@
} }
}, },
"report": { "report": {
"title_report": "Melden",
"title": "%s melden", "title": "%s melden",
"step1": "Schritt 1 von 2", "step1": "Schritt 1 von 2",
"step2": "Schritt 2 von 2", "step2": "Schritt 2 von 2",
"content1": "Gibt es noch weitere Beiträge, die du der Meldung hinzufügen möchtest?", "content1": "Gibt es noch weitere Beiträge, die du der Meldung hinzufügen möchtest?",
"content2": "Gibt es etwas, was die Moderatoren über diese Meldung wissen sollten?", "content2": "Gibt es etwas, was die Moderatoren über diese Meldung wissen sollten?",
"report_sent_title": "Danke für deine Meldung, wir werden uns damit beschäftigen.",
"send": "Meldung abschicken", "send": "Meldung abschicken",
"skip_to_send": "Ohne Kommentar abschicken", "skip_to_send": "Ohne Kommentar abschicken",
"text_placeholder": "Zusätzliche Kommentare eingeben oder einfügen" "text_placeholder": "Zusätzliche Kommentare eingeben oder einfügen",
"reported": "GEMELDET"
}, },
"preview": { "preview": {
"keyboard": { "keyboard": {
@ -544,7 +584,7 @@
}, },
"account_list": { "account_list": {
"tab_bar_hint": "Aktuell ausgewähltes Profil: %s. Doppeltippen dann gedrückt halten, um den Kontoschalter anzuzeigen", "tab_bar_hint": "Aktuell ausgewähltes Profil: %s. Doppeltippen dann gedrückt halten, um den Kontoschalter anzuzeigen",
"dismiss_account_switcher": "Dismiss Account Switcher", "dismiss_account_switcher": "Dialog zum Wechseln des Kontos schließen",
"add_account": "Konto hinzufügen" "add_account": "Konto hinzufügen"
}, },
"wizard": { "wizard": {

View File

@ -45,8 +45,8 @@
"message": "Please enable the photo library access permission to save the photo." "message": "Please enable the photo library access permission to save the photo."
}, },
"delete_post": { "delete_post": {
"title": "Are you sure you want to delete this post?", "title": "Delete Post",
"delete": "Delete" "message": "Are you sure you want to delete this post?"
}, },
"clean_cache": { "clean_cache": {
"title": "Clean Cache", "title": "Clean Cache",
@ -82,6 +82,7 @@
"share_user": "Share %s", "share_user": "Share %s",
"share_post": "Share Post", "share_post": "Share Post",
"open_in_safari": "Open in Safari", "open_in_safari": "Open in Safari",
"open_in_browser": "Open in Browser",
"find_people": "Find people to follow", "find_people": "Find people to follow",
"manually_search": "Manually search instead", "manually_search": "Manually search instead",
"skip": "Skip", "skip": "Skip",
@ -139,7 +140,8 @@
"unreblog": "Undo reblog", "unreblog": "Undo reblog",
"favorite": "Favorite", "favorite": "Favorite",
"unfavorite": "Unfavorite", "unfavorite": "Unfavorite",
"menu": "Menu" "menu": "Menu",
"hide": "Hide"
}, },
"tag": { "tag": {
"url": "URL", "url": "URL",
@ -148,6 +150,12 @@
"hashtag": "Hashtag", "hashtag": "Hashtag",
"email": "Email", "email": "Email",
"emoji": "Emoji" "emoji": "Emoji"
},
"visibility": {
"unlisted": "Everyone can see this post but not display in the public timeline.",
"private": "Only their followers can see this post.",
"private_from_me": "Only my followers can see this post.",
"direct": "Only mentioned user can see this post."
} }
}, },
"friendship": { "friendship": {
@ -192,10 +200,14 @@
}, },
"scene": { "scene": {
"welcome": { "welcome": {
"slogan": "Social networking\nback in your hands." "slogan": "Social networking\nback in your hands.",
"get_started": "Get Started",
"log_in": "Log In"
}, },
"server_picker": { "server_picker": {
"title": "Pick a server,\nany server.", "title": "Mastodon is made of users in different communities.",
"subtitle": "Pick a community based on your interests, region, or a general purpose one.",
"subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": { "button": {
"category": { "category": {
"all": "All", "all": "All",
@ -222,7 +234,7 @@
"category": "CATEGORY" "category": "CATEGORY"
}, },
"input": { "input": {
"placeholder": "Find a server or join your own..." "placeholder": "Search communities"
}, },
"empty_state": { "empty_state": {
"finding_servers": "Finding available servers...", "finding_servers": "Finding available servers...",
@ -231,7 +243,7 @@
} }
}, },
"register": { "register": {
"title": "Tell us about you.", "title": "Lets get you set up on %s",
"input": { "input": {
"avatar": { "avatar": {
"delete": "Delete" "delete": "Delete"
@ -248,6 +260,12 @@
}, },
"password": { "password": {
"placeholder": "password", "placeholder": "password",
"require": "Your password needs at least:",
"character_limit": "8 characters",
"accessibility": {
"checked": "checked",
"unchecked": "unchecked"
},
"hint": "Your password needs at least eight characters" "hint": "Your password needs at least eight characters"
}, },
"invite": { "invite": {
@ -285,7 +303,7 @@
}, },
"server_rules": { "server_rules": {
"title": "Some ground rules.", "title": "Some ground rules.",
"subtitle": "These rules are set by the admins of %s.", "subtitle": "These are set and enforced by the %s moderators.",
"prompt": "By continuing, youre subject to the terms of service and privacy policy for %s.", "prompt": "By continuing, youre subject to the terms of service and privacy policy for %s.",
"terms_of_service": "terms of service", "terms_of_service": "terms of service",
"privacy_policy": "privacy policy", "privacy_policy": "privacy policy",
@ -295,10 +313,10 @@
}, },
"confirm_email": { "confirm_email": {
"title": "One last thing.", "title": "One last thing.",
"subtitle": "We just sent an email to %s,\ntap the link to confirm your account.", "subtitle": "Tap the link we emailed to you to verify your account.",
"button": { "button": {
"open_email_app": "Open Email App", "open_email_app": "Open Email App",
"dont_receive_email": "I never got an email" "resend": "Resend"
}, },
"dont_receive_email": { "dont_receive_email": {
"title": "Check your email", "title": "Check your email",
@ -401,14 +419,24 @@
"segmented_control": { "segmented_control": {
"posts": "Posts", "posts": "Posts",
"replies": "Replies", "replies": "Replies",
"media": "Media" "posts_and_replies": "Posts and Replies",
"media": "Media",
"about": "About"
}, },
"relationship_action_alert": { "relationship_action_alert": {
"confirm_mute_user": {
"title": "Mute Account",
"message": "Confirm to mute %s"
},
"confirm_unmute_user": { "confirm_unmute_user": {
"title": "Unmute Account", "title": "Unmute Account",
"message": "Confirm to unmute %s" "message": "Confirm to unmute %s"
}, },
"confirm_unblock_usre": { "confirm_block_user": {
"title": "Block Account",
"message": "Confirm to block %s"
},
"confirm_unblock_user": {
"title": "Unblock Account", "title": "Unblock Account",
"message": "Confirm to unblock %s" "message": "Confirm to unblock %s"
} }
@ -461,12 +489,14 @@
"Everything": "Everything", "Everything": "Everything",
"Mentions": "Mentions" "Mentions": "Mentions"
}, },
"user_followed_you": "%s followed you", "notification_description": {
"user_favorited your post": "%s favorited your post", "followed_you": "followed you",
"user_reblogged_your_post": "%s reblogged your post", "favorited_your_post": "favorited your post",
"user_mentioned_you": "%s mentioned you", "reblogged_your_post": "reblogged your post",
"user_requested_to_follow_you": "%s requested to follow you", "mentioned_you": "mentioned you",
"user_your_poll_has_ended": "%s Your poll has ended", "request_to_follow_you": "request to follow you",
"poll_has_ended": "poll has ended"
},
"keyobard": { "keyobard": {
"show_everything": "Show Everything", "show_everything": "Show Everything",
"show_mentions": "Show Mentions" "show_mentions": "Show Mentions"
@ -485,6 +515,13 @@
"light": "Always Light", "light": "Always Light",
"dark": "Always Dark" "dark": "Always Dark"
}, },
"look_and_feel": {
"title": "Look and Feel",
"use_system": "Use System",
"really_dark": "Really Dark",
"sorta_dark": "Sorta Dark",
"light": "Light"
},
"notifications": { "notifications": {
"title": "Notifications", "title": "Notifications",
"favorites": "Favorites my post", "favorites": "Favorites my post",
@ -526,14 +563,17 @@
} }
}, },
"report": { "report": {
"title_report": "Report",
"title": "Report %s", "title": "Report %s",
"step1": "Step 1 of 2", "step1": "Step 1 of 2",
"step2": "Step 2 of 2", "step2": "Step 2 of 2",
"content1": "Are there any other posts youd like to add to the report?", "content1": "Are there any other posts youd like to add to the report?",
"content2": "Is there anything the moderators should know about this report?", "content2": "Is there anything the moderators should know about this report?",
"report_sent_title": "Thanks for reporting, well look into this.",
"send": "Send Report", "send": "Send Report",
"skip_to_send": "Send without comment", "skip_to_send": "Send without comment",
"text_placeholder": "Type or paste additional comments" "text_placeholder": "Type or paste additional comments",
"reported": "REPORTED"
}, },
"preview": { "preview": {
"keyboard": { "keyboard": {

View File

@ -46,7 +46,7 @@
}, },
"delete_post": { "delete_post": {
"title": "¿Estás seguro que querés eliminar este mensaje?", "title": "¿Estás seguro que querés eliminar este mensaje?",
"delete": "Eliminar" "message": "¿Estás seguro que querés eliminar este mensaje?"
}, },
"clean_cache": { "clean_cache": {
"title": "Limpiar caché", "title": "Limpiar caché",
@ -82,6 +82,7 @@
"share_user": "Compartir %s", "share_user": "Compartir %s",
"share_post": "Compartir mensaje", "share_post": "Compartir mensaje",
"open_in_safari": "Abrir en Safari", "open_in_safari": "Abrir en Safari",
"open_in_browser": "Abrir en el navegador",
"find_people": "Encontrá cuentas para seguir", "find_people": "Encontrá cuentas para seguir",
"manually_search": "Buscar manualmente", "manually_search": "Buscar manualmente",
"skip": "Omitir", "skip": "Omitir",
@ -139,7 +140,8 @@
"unreblog": "Deshacer adhesión", "unreblog": "Deshacer adhesión",
"favorite": "Marcar como favorito", "favorite": "Marcar como favorito",
"unfavorite": "Dejar de marcar como favorito", "unfavorite": "Dejar de marcar como favorito",
"menu": "Menú" "menu": "Menú",
"hide": "Ocultar"
}, },
"tag": { "tag": {
"url": "Dirección web", "url": "Dirección web",
@ -148,6 +150,12 @@
"hashtag": "Etiqueta", "hashtag": "Etiqueta",
"email": "Correo electrónico", "email": "Correo electrónico",
"emoji": "Emoji" "emoji": "Emoji"
},
"visibility": {
"unlisted": "Todo el mundo puede ver este mensaje pero no mostrarse en la línea temporal pública.",
"private": "Sólo sus seguidores pueden ver este mensaje.",
"private_from_me": "Sólo mis seguidores pueden ver este mensaje.",
"direct": "Sólo el usuario mencionado puede ver este mensaje."
} }
}, },
"friendship": { "friendship": {
@ -192,10 +200,14 @@
}, },
"scene": { "scene": {
"welcome": { "welcome": {
"slogan": "La red social,\nnuevamente en tu poder." "slogan": "La red social,\nnuevamente en tu poder.",
"get_started": "Comenzá",
"log_in": "Iniciar sesión"
}, },
"server_picker": { "server_picker": {
"title": "Elegí un servidor,\nel que quieras.", "title": "Elegí un servidor,\nel que quieras.",
"subtitle": "Elegí una comunidad basada en tus intereses, región o una de propósitos generales.",
"subtitle_extend": "Elegí una comunidad basada en tus intereses, región o una de propósitos generales. Cada comunidad es operada por una organización o individuo totalmente independiente.",
"button": { "button": {
"category": { "category": {
"all": "Todas", "all": "Todas",
@ -248,6 +260,12 @@
}, },
"password": { "password": {
"placeholder": "contraseña", "placeholder": "contraseña",
"require": "Tu contraseña necesita al menos:",
"character_limit": "8 caracteres",
"accessibility": {
"checked": "marcado",
"unchecked": "sin marcar"
},
"hint": "Tu contraseña necesita al menos ocho caracteres" "hint": "Tu contraseña necesita al menos ocho caracteres"
}, },
"invite": { "invite": {
@ -298,7 +316,7 @@
"subtitle": "Acabamos de enviar un correo electrónico a %s,\npulsá en el enlace para confirmar tu cuenta.", "subtitle": "Acabamos de enviar un correo electrónico a %s,\npulsá en el enlace para confirmar tu cuenta.",
"button": { "button": {
"open_email_app": "Abrir aplicación de correo electrónico", "open_email_app": "Abrir aplicación de correo electrónico",
"dont_receive_email": "Nunca recibí un correo electrónico" "resend": "Reenviar"
}, },
"dont_receive_email": { "dont_receive_email": {
"title": "Revisá tu correo electrónico", "title": "Revisá tu correo electrónico",
@ -401,14 +419,24 @@
"segmented_control": { "segmented_control": {
"posts": "Mensajes", "posts": "Mensajes",
"replies": "Respuestas", "replies": "Respuestas",
"media": "Medios" "posts_and_replies": "Mensajes y respuestas",
"media": "Medios",
"about": "Información"
}, },
"relationship_action_alert": { "relationship_action_alert": {
"confirm_mute_user": {
"title": "Silenciar cuenta",
"message": "Confirmá para silenciar a %s"
},
"confirm_unmute_user": { "confirm_unmute_user": {
"title": "Dejar de silenciar cuenta", "title": "Dejar de silenciar cuenta",
"message": "Confirmá para dejar de silenciar a %s" "message": "Confirmá para dejar de silenciar a %s"
}, },
"confirm_unblock_usre": { "confirm_block_user": {
"title": "Bloquear cuenta",
"message": "Confirmá para desbloquear a %s"
},
"confirm_unblock_user": {
"title": "Desbloquear cuenta", "title": "Desbloquear cuenta",
"message": "Confirmá para desbloquear a %s" "message": "Confirmá para desbloquear a %s"
} }
@ -461,12 +489,14 @@
"Everything": "Todo", "Everything": "Todo",
"Mentions": "Menciones" "Mentions": "Menciones"
}, },
"user_followed_you": "%s te sigue", "notification_description": {
"user_favorited your post": "%s marcó tu msj. como favorito", "followed_you": "te sigue",
"user_reblogged_your_post": "%s adhirió a tu mensaje", "favorited_your_post": "marcó como favorito tu mensaje",
"user_mentioned_you": "%s te mencionó", "reblogged_your_post": "adhirió a tu mensaje",
"user_requested_to_follow_you": "%s solicitó seguirte", "mentioned_you": "te mencionó",
"user_your_poll_has_ended": "%s, tu encuesta finalizó", "request_to_follow_you": "solicitó seguirte",
"poll_has_ended": "la encuesta terminó"
},
"keyobard": { "keyobard": {
"show_everything": "Mostrar todo", "show_everything": "Mostrar todo",
"show_mentions": "Mostrar menciones" "show_mentions": "Mostrar menciones"
@ -485,6 +515,13 @@
"light": "Siempre clara", "light": "Siempre clara",
"dark": "Siempre oscura" "dark": "Siempre oscura"
}, },
"look_and_feel": {
"title": "Apariencia",
"use_system": "Usar sistema",
"really_dark": "Oscuro de verdad",
"sorta_dark": "Algo oscuro",
"light": "Claro"
},
"notifications": { "notifications": {
"title": "Notificaciones", "title": "Notificaciones",
"favorites": "Marcó como favorito mi mensaje", "favorites": "Marcó como favorito mi mensaje",
@ -526,14 +563,17 @@
} }
}, },
"report": { "report": {
"title_report": "Denunciar",
"title": "Denunciar a %s", "title": "Denunciar a %s",
"step1": "Paso 1 de 2", "step1": "Paso 1 de 2",
"step2": "Paso 2 de 2", "step2": "Paso 2 de 2",
"content1": "¿Hay otros mensajes que te gustaría agregar a la denuncia?", "content1": "¿Hay otros mensajes que te gustaría agregar a la denuncia?",
"content2": "¿Hay algo que los moderadores deban saber sobre esta denuncia?", "content2": "¿Hay algo que los moderadores deban saber sobre esta denuncia?",
"report_sent_title": "Gracias por tu denuncia, vamos a revisarla.",
"send": "Enviar denuncia", "send": "Enviar denuncia",
"skip_to_send": "Enviar sin comentarios", "skip_to_send": "Enviar sin comentarios",
"text_placeholder": "Escribí o pegá comentarios adicionales" "text_placeholder": "Escribí o pegá comentarios adicionales",
"reported": "DENUNCIADA"
}, },
"preview": { "preview": {
"keyboard": { "keyboard": {

View File

@ -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 notificación no leída</string>
<key>other</key> <key>other</key>
<string>%ld unread notification</string> <string>%ld notificaciones no leídas</string>
</dict> </dict>
</dict> </dict>
<key>a11y.plural.count.input_limit_exceeds</key> <key>a11y.plural.count.input_limit_exceeds</key>

View File

@ -46,7 +46,7 @@
}, },
"delete_post": { "delete_post": {
"title": "¿Estás seguro de que deseas eliminar esta publicación?", "title": "¿Estás seguro de que deseas eliminar esta publicación?",
"delete": "Eliminar" "message": "¿Estás seguro de que quieres borrar esta publicación?"
}, },
"clean_cache": { "clean_cache": {
"title": "Limpiar Caché", "title": "Limpiar Caché",
@ -82,6 +82,7 @@
"share_user": "Compartir %s", "share_user": "Compartir %s",
"share_post": "Compartir publicación", "share_post": "Compartir publicación",
"open_in_safari": "Abrir en Safari", "open_in_safari": "Abrir en Safari",
"open_in_browser": "Abrir en el navegador",
"find_people": "Encuentra gente a la que seguir", "find_people": "Encuentra gente a la que seguir",
"manually_search": "Mejor hacer una búsqueda manual", "manually_search": "Mejor hacer una búsqueda manual",
"skip": "Omitir", "skip": "Omitir",
@ -139,7 +140,8 @@
"unreblog": "Deshacer reblogueo", "unreblog": "Deshacer reblogueo",
"favorite": "Favorito", "favorite": "Favorito",
"unfavorite": "No favorito", "unfavorite": "No favorito",
"menu": "Menú" "menu": "Menú",
"hide": "Ocultar"
}, },
"tag": { "tag": {
"url": "URL", "url": "URL",
@ -148,6 +150,12 @@
"hashtag": "Etiqueta", "hashtag": "Etiqueta",
"email": "E-mail", "email": "E-mail",
"emoji": "Emoji" "emoji": "Emoji"
},
"visibility": {
"unlisted": "Todo el mundo puede ver este post pero no mostrar en la línea de tiempo pública.",
"private": "Sólo sus seguidores pueden ver este mensaje.",
"private_from_me": "Sólo mis seguidores pueden ver este mensaje.",
"direct": "Sólo el usuario mencionado puede ver este mensaje."
} }
}, },
"friendship": { "friendship": {
@ -192,10 +200,14 @@
}, },
"scene": { "scene": {
"welcome": { "welcome": {
"slogan": "Las redes sociales\nde nuevo en tus manos." "slogan": "Las redes sociales\nde nuevo en tus manos.",
"get_started": "Empezar",
"log_in": "Iniciar sesión"
}, },
"server_picker": { "server_picker": {
"title": "Elige un servidor,\ncualquier servidor.", "title": "Elige un servidor,\ncualquier servidor.",
"subtitle": "Elige una comunidad relacionada con tus intereses, con tu región o una más genérica.",
"subtitle_extend": "Elige una comunidad relacionada con tus intereses, con tu región o una más genérica. Cada comunidad está operada por una organización o individuo completamente independiente.",
"button": { "button": {
"category": { "category": {
"all": "Todas", "all": "Todas",
@ -248,6 +260,12 @@
}, },
"password": { "password": {
"placeholder": "contraseña", "placeholder": "contraseña",
"require": "Tu contraseña debe contener como mínimo:",
"character_limit": "8 caracteres",
"accessibility": {
"checked": "marcado",
"unchecked": "sin marcar"
},
"hint": "Tu contraseña necesita tener al menos ocho caracteres" "hint": "Tu contraseña necesita tener al menos ocho caracteres"
}, },
"invite": { "invite": {
@ -298,7 +316,7 @@
"subtitle": "Te acabamos de enviar un correo a %s,\npulsa en el enlace para confirmar tu cuenta.", "subtitle": "Te acabamos de enviar un correo a %s,\npulsa en el enlace para confirmar tu cuenta.",
"button": { "button": {
"open_email_app": "Abrir Aplicación de Correo Electrónico", "open_email_app": "Abrir Aplicación de Correo Electrónico",
"dont_receive_email": "No he recibido el correo electrónico" "resend": "Reenviar"
}, },
"dont_receive_email": { "dont_receive_email": {
"title": "Revisa tu correo electrónico", "title": "Revisa tu correo electrónico",
@ -401,15 +419,25 @@
"segmented_control": { "segmented_control": {
"posts": "Publicaciones", "posts": "Publicaciones",
"replies": "Respuestas", "replies": "Respuestas",
"media": "Multimedia" "posts_and_replies": "Publicaciones y respuestas",
"media": "Multimedia",
"about": "Acerca de"
}, },
"relationship_action_alert": { "relationship_action_alert": {
"confirm_mute_user": {
"title": "Silenciar cuenta",
"message": "Confirmar para silenciar %s"
},
"confirm_unmute_user": { "confirm_unmute_user": {
"title": "Dejar de Silenciar Cuenta", "title": "Dejar de Silenciar Cuenta",
"message": "Confirmar para dejar de silenciar a %s" "message": "Confirmar para dejar de silenciar a %s"
}, },
"confirm_unblock_usre": { "confirm_block_user": {
"title": "Desbloquear Cuenta", "title": "Bloquear cuenta",
"message": "Confirmar para bloquear a %s"
},
"confirm_unblock_user": {
"title": "Desbloquear cuenta",
"message": "Confirmar para desbloquear a %s" "message": "Confirmar para desbloquear a %s"
} }
} }
@ -461,12 +489,14 @@
"Everything": "Todo", "Everything": "Todo",
"Mentions": "Menciones" "Mentions": "Menciones"
}, },
"user_followed_you": "%s te ha empezado a seguir", "notification_description": {
"user_favorited your post": "%s marcó tu post como favorito", "followed_you": "te siguió",
"user_reblogged_your_post": "%s reblogueó tu publicación", "favorited_your_post": "ha marcado como favorita tu publicación",
"user_mentioned_you": "%s te ha mencionado", "reblogged_your_post": "reblogueó tu publicación",
"user_requested_to_follow_you": "%s ha solicitado seguirte", "mentioned_you": "te mencionó",
"user_your_poll_has_ended": "%s Tu encuesta ha terminado", "request_to_follow_you": "solicitó seguirte",
"poll_has_ended": "encuesta ha terminado"
},
"keyobard": { "keyobard": {
"show_everything": "Mostrar Todo", "show_everything": "Mostrar Todo",
"show_mentions": "Mostrar Menciones" "show_mentions": "Mostrar Menciones"
@ -485,6 +515,13 @@
"light": "Siempre Clara", "light": "Siempre Clara",
"dark": "Siempre Oscura" "dark": "Siempre Oscura"
}, },
"look_and_feel": {
"title": "Apariencia",
"use_system": "Uso del sistema",
"really_dark": "Realmente Oscuro",
"sorta_dark": "Más o Menos Oscuro",
"light": "Claro"
},
"notifications": { "notifications": {
"title": "Notificaciones", "title": "Notificaciones",
"favorites": "Marque como favorita mi publicación", "favorites": "Marque como favorita mi publicación",
@ -526,14 +563,17 @@
} }
}, },
"report": { "report": {
"title_report": "Reportar",
"title": "Reportar %s", "title": "Reportar %s",
"step1": "Paso 1 de 2", "step1": "Paso 1 de 2",
"step2": "Paso 2 de 2", "step2": "Paso 2 de 2",
"content1": "¿Hay alguna otra publicación que te gustaría añadir al reporte?", "content1": "¿Hay alguna otra publicación que te gustaría añadir al reporte?",
"content2": "¿Hay algo que los moderadores deberían saber acerca de este reporte?", "content2": "¿Hay algo que los moderadores deberían saber acerca de este reporte?",
"report_sent_title": "Gracias por reportar, estudiaremos esto.",
"send": "Enviar Reporte", "send": "Enviar Reporte",
"skip_to_send": "Enviar sin comentarios", "skip_to_send": "Enviar sin comentarios",
"text_placeholder": "Escribe o pega comentarios adicionales" "text_placeholder": "Escribe o pega comentarios adicionales",
"reported": "REPORTADO"
}, },
"preview": { "preview": {
"keyboard": { "keyboard": {
@ -543,14 +583,14 @@
} }
}, },
"account_list": { "account_list": {
"tab_bar_hint": "Current selected profile: %s. Double tap then hold to show account switcher", "tab_bar_hint": "Perfil seleccionado actualmente: %s. Haz un doble toque y mantén pulsado para mostrar el selector de cuentas",
"dismiss_account_switcher": "Dismiss Account Switcher", "dismiss_account_switcher": "Descartar el selector de cuentas",
"add_account": "Add Account" "add_account": "Añadir cuenta"
}, },
"wizard": { "wizard": {
"new_in_mastodon": "New in Mastodon", "new_in_mastodon": "Nuevo en Mastodon",
"multiple_account_switch_intro_description": "Switch between multiple accounts by holding the profile button.", "multiple_account_switch_intro_description": "Cambie entre varias cuentas manteniendo presionado el botón de perfil.",
"accessibility_hint": "Double tap to dismiss this wizard" "accessibility_hint": "Haz doble toque para descartar este asistente"
} }
} }
} }

View File

@ -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>Irakurri gabeko jakinarazpen bat</string>
<key>other</key>
<string>Irakurri gabeko %ld jakinarazpen</string>
</dict>
</dict>
<key>a11y.plural.count.input_limit_exceeds</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>Sarrerak %#@character_count@ karaktereko muga gainditzen du</string>
<key>character_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>karaktere bat</string>
<key>other</key>
<string>%ld karaktere</string>
</dict>
</dict>
<key>a11y.plural.count.input_limit_remains</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>Sarreraren karaktere muga %#@character_count@ da oraindik</string>
<key>character_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>karaktere bat</string>
<key>other</key>
<string>%ld karaktere</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>bidalketa</string>
<key>other</key>
<string>bidalketa</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>Bidalketa bat</string>
<key>other</key>
<string>%ld bidalketa</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>Gogoko bat</string>
<key>other</key>
<string>%ld gogoko</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>Bultzada bat</string>
<key>other</key>
<string>%ld bultzada</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>Boto bat</string>
<key>other</key>
<string>%ld boto</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>Boto-emaile bat</string>
<key>other</key>
<string>%ld boto-emaile</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>Pertsona bat hizketan</string>
<key>other</key>
<string>%ld pertsona hizketan</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>Bat jarraitzen</string>
<key>other</key>
<string>%ld jarraitzen</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>Jarraitzaile bat</string>
<key>other</key>
<string>%ld jarraitzaile</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>Urte bat geratzen da</string>
<key>other</key>
<string>%ld urte geratzen dira</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>Hilabete bat geratzen da</string>
<key>other</key>
<string>%ld hilabete geratzen dira</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>Egun bat geratzen da</string>
<key>other</key>
<string>%ld egun geratzen dira</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>Ordu 1 geratzen da</string>
<key>other</key>
<string>%ld ordu geratzen dira</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>Minutu 1 geratzen da</string>
<key>other</key>
<string>%ld minutu geratzen dira</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>Segundo 1 geratzen da</string>
<key>other</key>
<string>%ld segundo geratzen dira</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>Duela urtebete</string>
<key>other</key>
<string>Duela %ld urte</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>Duela hilabete</string>
<key>other</key>
<string>Duela %ld hilabete</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>Duela egun bat</string>
<key>other</key>
<string>Duela %ld egun</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>Duela ordubete</string>
<key>other</key>
<string>Duela %ld ordu</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>Duela minutu bat</string>
<key>other</key>
<string>Duela %ld minutu</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>Duela segundo bat</string>
<key>other</key>
<string>Duela %ld segundo</string>
</dict>
</dict>
</dict>
</plist>

View File

@ -0,0 +1,596 @@
{
"common": {
"alerts": {
"common": {
"please_try_again": "Mesedez, saiatu berriro.",
"please_try_again_later": "Mesedez beranduago saiatu."
},
"sign_up_failure": {
"title": "Hutsegitea izen-ematean"
},
"server_error": {
"title": "Zerbitzari-errorea"
},
"vote_failure": {
"title": "Hutsegitea botoa ematean",
"poll_ended": "Inkesta amaitu da"
},
"discard_post_content": {
"title": "Baztertu zirriborroa",
"message": "Berretsi idatzitako bidalketaren edukia baztertzea."
},
"publish_post_failure": {
"title": "Hutsegitea argitaratzean",
"message": "Huts egin du bidalketa argitaratzean.\nEgiaztatu Interneteko konexioa.",
"attachments_message": {
"video_attach_with_photo": "Ezin da irudiak dituen bidalketa batean bideo bat erantsi.",
"more_than_one_video": "Ezin da bideo bat baino gehiago erantsi."
}
},
"edit_profile_failure": {
"title": "Errorea profila editatzean",
"message": "Ezin da profila editatu. Mesedez saiatu berriro."
},
"sign_out": {
"title": "Amaitu saioa",
"message": "Ziur saioa amaitu nahi duzula?",
"confirm": "Amaitu saioa"
},
"block_domain": {
"title": "Ziur, erabat ziur, %s domeinu osoa blokeatu nahi duzula? Gehienetan erabiltzaile gutxi batzuk blokeatu edo mututzearekin nahikoa da. Ez duzu domeinu horretako edukirik ikusiko eta domeinu horretako zure jarraitzaileak kenduko dira.",
"block_entire_domain": "Blokeatu domeinua"
},
"save_photo_failure": {
"title": "Hutsegitea argazkia gordetzean",
"message": "Gaitu argazki galeriarako sarbidearen baimena argazkia gordetzeko."
},
"delete_post": {
"title": "Ziur zaude bidalketa hau ezabatu nahi duzula?",
"message": "Ziur bidalketa hau ezabatu nahi duzula?"
},
"clean_cache": {
"title": "Garbitu cache-a",
"message": "Behar bezala garbitu da %s cache-a."
}
},
"controls": {
"actions": {
"back": "Atzera",
"next": "Hurrengoa",
"previous": "Aurrekoa",
"open": "Ireki",
"add": "Gehitu",
"remove": "Kendu",
"edit": "Editatu",
"save": "Gorde",
"ok": "Ados",
"done": "Egina",
"confirm": "Berretsi",
"continue": "Jarraitu",
"compose": "Idatzi",
"cancel": "Utzi",
"discard": "Baztertu",
"try_again": "Saiatu berriro",
"take_photo": "Atera argazkia",
"save_photo": "Gorde argazkia",
"copy_photo": "Kopiatu argazkia",
"sign_in": "Hasi saioa",
"sign_up": "Eman Izena",
"see_more": "Ikusi gehiago",
"preview": "Aurrebista",
"share": "Partekatu",
"share_user": "Partekatu %s",
"share_post": "Partekatu bidalketa",
"open_in_safari": "Ireki Safarin",
"open_in_browser": "Ireki nabigatzailean",
"find_people": "Bilatu jarraitzeko jendea",
"manually_search": "Eskuz bilatu",
"skip": "Saltatu",
"reply": "Erantzun",
"report_user": "Salatu %s",
"block_domain": "Blokeatu %s",
"unblock_domain": "Desblokeatu %s",
"settings": "Ezarpenak",
"delete": "Ezabatu"
},
"tabs": {
"home": "Hasiera",
"search": "Bilatu",
"notification": "Jakinarazpena",
"profile": "Profila"
},
"keyboard": {
"common": {
"switch_to_tab": "Aldatu %s(e)ra",
"compose_new_post": "Idatzi bidalketa berria",
"show_favorites": "Erakutsi gogokoak",
"open_settings": "Ireki ezarpenak"
},
"timeline": {
"previous_status": "Aurreko bidalketa",
"next_status": "Hurrengo bidalketa",
"open_status": "Ireki bidalketa",
"open_author_profile": "Ireki egilearen profila",
"open_reblogger_profile": "Ireki bultzada eman duenaren profila",
"reply_status": "Erantzun bidalketari",
"toggle_reblog": "Txandakatu bidalketaren bultzada",
"toggle_favorite": "Txandakatu bidalketa gogoko egitea",
"toggle_content_warning": "Txandakatu edukiaren abisua",
"preview_image": "Aurreikusi irudia"
},
"segmented_control": {
"previous_section": "Aurreko sekzioa",
"next_section": "Hurrengo sekzioa"
}
},
"status": {
"user_reblogged": "%s erabiltzaileak bultzada eman dio",
"user_replied_to": "%s(r)i erantzuten",
"show_post": "Erakutsi bidalketa",
"show_user_profile": "Erakutsi erabiltzailearen profila",
"content_warning": "Edukiaren abisua",
"media_content_warning": "Ukitu edonon bistaratzeko",
"poll": {
"vote": "Bozkatu",
"closed": "Itxita"
},
"actions": {
"reply": "Erantzun",
"reblog": "Bultzada",
"unreblog": "Desegin bultzada",
"favorite": "Gogokoa",
"unfavorite": "Kendu gogokoa",
"menu": "Menua",
"hide": "Ezkutatu"
},
"tag": {
"url": "URLa",
"mention": "Aipatu",
"link": "Esteka",
"hashtag": "Traola",
"email": "Eposta",
"emoji": "Emojia"
},
"visibility": {
"unlisted": "Edozeinek ikusi dezake bidalketa hau baina ez da denbora-lerro publikoan bistaratuko.",
"private": "Beren jarraitzaileek soilik ikus dezakete bidalketa hau.",
"private_from_me": "Nire jarraitzaileek soilik ikus dezakete bidalketa hau.",
"direct": "Aipatutako erabiltzaileek soilik ikus dezakete bidalketa hau."
}
},
"friendship": {
"follow": "Jarraitu",
"following": "Jarraitzen",
"request": "Eskaera",
"pending": "Zain",
"block": "Blokeatu",
"block_user": "Blokeatu %s",
"block_domain": "Blokeatu %s",
"unblock": "Desblokeatu",
"unblock_user": "Desblokeatu %s",
"blocked": "Blokeatuta",
"mute": "Mututu",
"mute_user": "Mututu %s",
"unmute": "Desmututu",
"unmute_user": "Desmututu %s",
"muted": "Mutututa",
"edit_info": "Editatu informazioa"
},
"timeline": {
"filtered": "Iragazita",
"timestamp": {
"now": "Orain"
},
"loader": {
"load_missing_posts": "Kargatu falta diren bidalketak",
"loading_missing_posts": "Falta diren bidalketak kargatzen...",
"show_more_replies": "Erakutsi erantzun gehiago"
},
"header": {
"no_status_found": "Ez da bidalketa aurkitu",
"blocking_warning": "Ezin duzu erabiltzaile honen profila ikusi\ndesblokeatzen duzun arte.\nZure profilak itxura hau du berarentzat.",
"user_blocking_warning": "Ezin duzu %s erabiltzailearen\nprofila ikusi desblokeatzen duzun arte.\nZure profilak itxura hau du berarentzat.",
"blocked_warning": "Ezin duzu erabiltzaile honen profila ikusi\ndesblokeatzen zaituen arte.",
"user_blocked_warning": "Ezin duzu %s erabiltzailearen\nprofila ikusi desblokeatzen zaituen arte.",
"suspended_warning": "Erabiltzaile hau kanporatua izan da.",
"user_suspended_warning": "%s kontua kanporatua izan da."
}
}
}
},
"scene": {
"welcome": {
"slogan": "Sare sozialak\nberriz zure eskuetan.",
"get_started": "Nola hasi",
"log_in": "Hasi saioa"
},
"server_picker": {
"title": "Aukeratu zerbitzari bat,\nedozein zerbitzari.",
"subtitle": "Aukeratu komunitate bat zure interes edo lurraldearen arabera, edo erabilera orokorreko bat.",
"subtitle_extend": "Aukeratu komunitate bat zure interes edo lurraldearen arabera, edo erabilera orokorreko bat. Komunitate bakoitza erakunde edo norbanako independente batek kudeatzen du.",
"button": {
"category": {
"all": "Guztiak",
"all_accessiblity_description": "Kategoria: Guztiak",
"academia": "akademia",
"activism": "aktibismoa",
"food": "janaria",
"furry": "furry",
"games": "jokoak",
"general": "orokorra",
"journalism": "kazetaritza",
"lgbt": "LGBTQ+",
"regional": "herrialdekoa",
"art": "artea",
"music": "musika",
"tech": "teknologia"
},
"see_less": "Ikusi gutxiago",
"see_more": "Ikusi gehiago"
},
"label": {
"language": "HIZKUNTZA",
"users": "ERABILTZAILEAK",
"category": "KATEGORIA"
},
"input": {
"placeholder": "Bilatu zerbitzari bat edo sortu zurea..."
},
"empty_state": {
"finding_servers": "Erabilgarri dauden zerbitzariak bilatzen...",
"bad_network": "Arazoren bat egon da datuak kargatzean. Egiaztatu zure Interneteko konexioa.",
"no_results": "Emaitzarik ez"
}
},
"register": {
"title": "Hitz egin iezaguzu zuri buruz.",
"input": {
"avatar": {
"delete": "Ezabatu"
},
"username": {
"placeholder": "erabiltzaile-izena",
"duplicate_prompt": "Erabiltzaile-izen hau hartuta dago."
},
"display_name": {
"placeholder": "pantaila-izena"
},
"email": {
"placeholder": "eposta"
},
"password": {
"placeholder": "pasahitza",
"require": "Zure pasahitzak izan behar ditu gutxienez:",
"character_limit": "8 karaktere",
"accessibility": {
"checked": "hautatuta",
"unchecked": "hautatu gabe"
},
"hint": "Pasahitzak zortzi karaktere izan behar ditu gutxienez"
},
"invite": {
"registration_user_invite_request": "Zergatik elkartu nahi duzu?"
}
},
"error": {
"item": {
"username": "Erabiltzaile-izena",
"email": "Eposta",
"password": "Pasahitza",
"agreement": "Adostasuna",
"locale": "Eskualdeko ezarpenak",
"reason": "Arrazoia"
},
"reason": {
"blocked": "%s(e)k onartu gabeko eposta hornitzaile bat erabiltzen du",
"unreachable": "dirudienez %s ez da existitzen",
"taken": "%s dagoeneko erabiltzen da",
"reserved": "%s gako-hitz erreserbatu bat da",
"accepted": "%s onartu behar da",
"blank": "%s beharrezkoa da",
"invalid": "%s baliogabea da",
"too_long": "%s luzeegia da",
"too_short": "%s laburregia da",
"inclusion": "%s ez da onartutako balio bat"
},
"special": {
"username_invalid": "Erabiltzaile-izenak karaktere alfanumerikoak eta azpimarrak soilik eduki ditzake",
"username_too_long": "Erabiltzaile-izena luzeegia da (ezin ditu 30 karaktere baino gehiago izan)",
"email_invalid": "Hau ez da baliozko eposta helbidea",
"password_too_short": "Pasahitza laburregia da (gutxienez 8 karaktere izan behar ditu)"
}
}
},
"server_rules": {
"title": "Oinarrizko arau batzuk.",
"subtitle": "Arau hauek %s instantziako administratzaileek ezarri dituzte.",
"prompt": "Jarraituz gero, %s instantziaren zerbitzu-baldintzak eta pribatutasun-gidalerroak onartzen dituzu.",
"terms_of_service": "zerbitzu-baldintzak",
"privacy_policy": "pribatutasun-gidalerroak",
"button": {
"confirm": "Ados nago"
}
},
"confirm_email": {
"title": "Eta azkenik...",
"subtitle": "Eposta bat bidali dizugu %s helbidera,\nsakatu kontua berresteko esteka.",
"button": {
"open_email_app": "Ireki eposta aplikazioa",
"resend": "Berbidali"
},
"dont_receive_email": {
"title": "Begiratu zure eposta",
"description": "Egiaztatu zure eposta helbidea zuzena den eta begiratu zaborraren karpeta.",
"resend_email": "Birbidali eposta"
},
"open_email_app": {
"title": "Egiaztatu zure sarrerako ontzia.",
"description": "Eposta bat bidali dizugu. Egiaztatu zure zaborraren karpeta.",
"mail": "Posta",
"open_email_client": "Ireki eposta bezeroa"
}
},
"home_timeline": {
"title": "Hasiera",
"navigation_bar_state": {
"offline": "Konexio gabe",
"new_posts": "Ikusi bidal. berriak",
"published": "Argitaratua!",
"Publishing": "Bidalketa argitaratzen..."
}
},
"suggestion_account": {
"title": "Bilatu jarraitzeko jendea",
"follow_explain": "Norbait jarraitzen duzunean, bere bidalketak zure hasierako denbora-lerroan agertuko zaizkizu."
},
"compose": {
"title": {
"new_post": "Bidalketa berria",
"new_reply": "Erantzun berria"
},
"media_selection": {
"camera": "Atera argazkia",
"photo_library": "Argazki-liburutegia",
"browse": "Arakatu"
},
"content_input_placeholder": "Idatzi edo itsatsi buruan duzuna",
"compose_action": "Argitaratu",
"replying_to_user": "%s(r)i erantzuten",
"attachment": {
"photo": "argazkia",
"video": "bideoa",
"attachment_broken": "%s hondatuta dago eta ezin da\nMastodonera igo.",
"description_photo": "Deskribatu argazkia ikusmen arazoak dituztenentzat...",
"description_video": "Deskribatu bideoa ikusmen arazoak dituztenentzat..."
},
"poll": {
"duration_time": "Iraupena: %s",
"thirty_minutes": "30 minutu",
"one_hour": "Ordu 1",
"six_hours": "6 ordu",
"one_day": "Egun 1",
"three_days": "3 egun",
"seven_days": "7 egun",
"option_number": "%ld aukera"
},
"content_warning": {
"placeholder": "Idatzi abisu zehatz bat hemen..."
},
"visibility": {
"public": "Publikoa",
"unlisted": "Zerrendatu gabea",
"private": "Jarraitzaileak soilik",
"direct": "Aipatzen dudan jendea soilik"
},
"auto_complete": {
"space_to_add": "Sakatu zuriunea gehitzeko"
},
"accessibility": {
"append_attachment": "Gehitu eranskina",
"append_poll": "Gehitu inkesta",
"remove_poll": "Kendu inkesta",
"custom_emoji_picker": "Emoji pertsonalizatuen hautatzailea",
"enable_content_warning": "Gaitu edukiaren abisua",
"disable_content_warning": "Desgaitu edukiaren abisua",
"post_visibility_menu": "Bidalketaren ikusgaitasunaren menua"
},
"keyboard": {
"discard_post": "Baztertu bidalketa",
"publish_post": "Argitaratu bidalketa",
"toggle_poll": "Txandakatu inkesta",
"toggle_content_warning": "Txandakatu edukiaren abisua",
"append_attachment_entry": "Gehitu eranskina - %s",
"select_visibility_entry": "Hautatu ikusgaitasuna - %s"
}
},
"profile": {
"dashboard": {
"posts": "bidalketa",
"following": "jarraitzen",
"followers": "jarraitzaile"
},
"fields": {
"add_row": "Gehitu errenkada",
"placeholder": {
"label": "Etiketa",
"content": "Edukia"
}
},
"segmented_control": {
"posts": "Bidalketak",
"replies": "Erantzunak",
"posts_and_replies": "Bidalketak eta erantzunak",
"media": "Multimedia",
"about": "Honi buruz"
},
"relationship_action_alert": {
"confirm_mute_user": {
"title": "Mututu kontua",
"message": "Berretsi %s mututzea"
},
"confirm_unmute_user": {
"title": "Desmututu kontua",
"message": "Berretsi %s desmututzea"
},
"confirm_block_user": {
"title": "Blokeatu kontua",
"message": "Berretsi %s blokeatzea"
},
"confirm_unblock_user": {
"title": "Desblokeatu kontua",
"message": "Berretsi %s desblokeatzea"
}
}
},
"follower": {
"footer": "Beste zerbitzarietako jarraitzaileak ez dira bistaratzen."
},
"following": {
"footer": "Beste zerbitzarietan jarraitutakoak ez dira bistaratzen."
},
"search": {
"title": "Bilatu",
"search_bar": {
"placeholder": "Bilatu traolak eta erabiltzaileak",
"cancel": "Utzi"
},
"recommend": {
"button_text": "Ikusi guztiak",
"hash_tag": {
"title": "Mastodoneko joerak",
"description": "Deigarri gertatzen ari diren traolak",
"people_talking": "%s pertsona hizketan"
},
"accounts": {
"title": "Gustuko izan ditzakezun kontuak",
"description": "Kontu hauek jarraitu nahiko dituzu behar bada",
"follow": "Jarraitu"
}
},
"searching": {
"segment": {
"all": "Guztiak",
"people": "Jendea",
"hashtags": "Traolak",
"posts": "Bidalketak"
},
"empty_state": {
"no_results": "Emaitzarik ez"
},
"recent_search": "Azken bilaketak",
"clear": "Garbitu"
}
},
"favorite": {
"title": "Zure gogokoak"
},
"notification": {
"title": {
"Everything": "Dena",
"Mentions": "Aipamenak"
},
"notification_description": {
"followed_you": "zu jarraitzen hasi da",
"favorited_your_post": "erabiltzaileak zure bidalketa gogoko du",
"reblogged_your_post": "erabiltzaileak bultzada eman dio zure bidalketari",
"mentioned_you": "erabiltzaileak aipatu zaitu",
"request_to_follow_you": "erabiltzaileak zu jarraitzea eskatu du",
"poll_has_ended": "inkesta amaitu da"
},
"keyobard": {
"show_everything": "Erakutsi guztia",
"show_mentions": "Erakutsi aipamenak"
}
},
"thread": {
"back_title": "Bidalketa",
"title": "%s(e)n bidalketa"
},
"settings": {
"title": "Ezarpenak",
"section": {
"appearance": {
"title": "Itxura",
"automatic": "Automatikoa",
"light": "Beti argia",
"dark": "Beti iluna"
},
"look_and_feel": {
"title": "Itxura",
"use_system": "Erabili sistemakoa",
"really_dark": "Oso iluna",
"sorta_dark": "Ilun antzekoa",
"light": "Argia"
},
"notifications": {
"title": "Jakinarazpenak",
"favorites": "Nire bidalketa gogoko egitean",
"follows": "Jarraitzen nau",
"boosts": "Nire bidalketa bultzatu du",
"mentions": "Aipatu nau",
"trigger": {
"anyone": "edozein",
"follower": "jarraitzaile bat",
"follow": "jarraitzen dudan edonor",
"noone": "inor ez",
"title": "Noiz jakinarazi:"
}
},
"preference": {
"title": "Hobespenak",
"true_black_dark_mode": "Benetako modu beltz iluna",
"disable_avatar_animation": "Desgaitu abatar animatuak",
"disable_emoji_animation": "Desgaitu emoji animatuak",
"using_default_browser": "Erabili nabigatzaile lehenetsia estekak irekitzeko"
},
"boring_zone": {
"title": "Eremu aspergarria",
"account_settings": "Kontuaren ezarpenak",
"terms": "Zerbitzu-baldintzak",
"privacy": "Pribatutasun-gidalerroak"
},
"spicy_zone": {
"title": "Eremu beroa",
"clear": "Garbitu multimediaren cachea",
"signout": "Amaitu saioa"
}
},
"footer": {
"mastodon_description": "Mastodon software librea da. Arazoen berri eman dezakezu GitHub bidez: %s (%s)"
},
"keyboard": {
"close_settings_window": "Itxi ezarpenen leihoa"
}
},
"report": {
"title_report": "Salatu",
"title": "Salatu %s",
"step1": "1. urratsa 2tik",
"step2": "2. urratsa 2tik",
"content1": "Salaketan beste bidalketarik gehitu nahi duzu?",
"content2": "Moderatzaileek besterik jakin behar dute salaketa honi buruz?",
"report_sent_title": "Mila esker salaketagatik, berrikusiko dugu.",
"send": "Bidali salaketa",
"skip_to_send": "Bidali iruzkinik gabe",
"text_placeholder": "Idatzi edo itsatsi iruzkin gehigarriak",
"reported": "SALATUA"
},
"preview": {
"keyboard": {
"close_preview": "Itxi aurrebista",
"show_next": "Erakutsi hurrengoa",
"show_previous": "Erakutsi aurrekoa"
}
},
"account_list": {
"tab_bar_hint": "Unean hautatutako profila: %s. Ukitu birritan, ondoren eduki sakatuta kontu-aldatzailea erakusteko",
"dismiss_account_switcher": "Baztertu kontu-aldatzailea",
"add_account": "Gehitu kontua"
},
"wizard": {
"new_in_mastodon": "Berria Mastodonen",
"multiple_account_switch_intro_description": "Aldatu hainbat konturen artean profilaren botoia sakatuta edukiz.",
"accessibility_hint": "Ukitu birritan morroi hau baztertzeko"
}
}
}

View File

@ -0,0 +1,6 @@
{
"NSCameraUsageDescription": "Bidalketetarako argazkiak ateratzeko erabiltzen da",
"NSPhotoLibraryAddUsageDescription": "Argazkiak Argazki-liburutegian gordetzeko erabiltzen da",
"NewPostShortcutItemTitle": "Bidalketa berria",
"SearchShortcutItemTitle": "Bilatu"
}

View File

@ -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>Input limit remains %#@character_count@</string> <string>La limite d'entrée reste %#@character_count@</string>
<key>character_count</key> <key>character_count</key>
<dict> <dict>
<key>NSStringFormatSpecTypeKey</key> <key>NSStringFormatSpecTypeKey</key>

View File

@ -46,7 +46,7 @@
}, },
"delete_post": { "delete_post": {
"title": "Voulez-vous vraiment supprimer ce message ?", "title": "Voulez-vous vraiment supprimer ce message ?",
"delete": "Supprimer" "message": "Voulez-vous vraiment supprimer ce message ?"
}, },
"clean_cache": { "clean_cache": {
"title": "Vider le cache", "title": "Vider le cache",
@ -67,7 +67,7 @@
"done": "Terminé", "done": "Terminé",
"confirm": "Confirmer", "confirm": "Confirmer",
"continue": "Continuer", "continue": "Continuer",
"compose": "Compose", "compose": "Rédiger",
"cancel": "Annuler", "cancel": "Annuler",
"discard": "Abandonner", "discard": "Abandonner",
"try_again": "Réessayer", "try_again": "Réessayer",
@ -82,6 +82,7 @@
"share_user": "Partager %s", "share_user": "Partager %s",
"share_post": "Partager la publication", "share_post": "Partager la publication",
"open_in_safari": "Ouvrir dans Safari", "open_in_safari": "Ouvrir dans Safari",
"open_in_browser": "Ouvrir dans le navigateur",
"find_people": "Trouver des personnes à suivre", "find_people": "Trouver des personnes à suivre",
"manually_search": "Rechercher manuellement à la place", "manually_search": "Rechercher manuellement à la place",
"skip": "Passer", "skip": "Passer",
@ -139,7 +140,8 @@
"unreblog": "Annuler le reblog", "unreblog": "Annuler le reblog",
"favorite": "Favori", "favorite": "Favori",
"unfavorite": "Retirer des favoris", "unfavorite": "Retirer des favoris",
"menu": "Menu" "menu": "Menu",
"hide": "Cacher"
}, },
"tag": { "tag": {
"url": "URL", "url": "URL",
@ -148,6 +150,12 @@
"hashtag": "Hashtag", "hashtag": "Hashtag",
"email": "Courriel", "email": "Courriel",
"emoji": "Émoji" "emoji": "Émoji"
},
"visibility": {
"unlisted": "Tout le monde peut voir ce message mais ne sera pas affiché sur le fil public.",
"private": "Seul·e·s leurs abonné·e·s peuvent voir ce message.",
"private_from_me": "Seul·e·s mes abonné·e·s peuvent voir ce message.",
"direct": "Seul·e lutilisateur·rice mentionnée peut voir ce message."
} }
}, },
"friendship": { "friendship": {
@ -192,10 +200,14 @@
}, },
"scene": { "scene": {
"welcome": { "welcome": {
"slogan": "Le réseau social qui vous rend le contrôle." "slogan": "Le réseau social qui vous rend le contrôle.",
"get_started": "Prise en main",
"log_in": "Se connecter"
}, },
"server_picker": { "server_picker": {
"title": "Choisissez un serveur,\nn'importe quel serveur.", "title": "Choisissez un serveur,\nn'importe quel serveur.",
"subtitle": "Choisissez une communauté en fonction de vos intérêts, de votre région ou de votre objectif général.",
"subtitle_extend": "Choisissez une communauté basée sur vos intérêts, votre région ou un but général. Chaque communauté est gérée par une organisation ou un individu entièrement indépendant.",
"button": { "button": {
"category": { "category": {
"all": "Tout", "all": "Tout",
@ -248,6 +260,12 @@
}, },
"password": { "password": {
"placeholder": "mot de passe", "placeholder": "mot de passe",
"require": "Votre mot de passe doit être composé dau moins :",
"character_limit": "8 caractères",
"accessibility": {
"checked": "vérifié",
"unchecked": "non vérifié"
},
"hint": "Votre mot de passe doit contenir au moins 8 caractères" "hint": "Votre mot de passe doit contenir au moins 8 caractères"
}, },
"invite": { "invite": {
@ -298,7 +316,7 @@
"subtitle": "Nous venons denvoyer un courriel à %s,\ntapotez le lien pour confirmer votre compte.", "subtitle": "Nous venons denvoyer un courriel à %s,\ntapotez le lien pour confirmer votre compte.",
"button": { "button": {
"open_email_app": "Ouvrir lapplication de courriel", "open_email_app": "Ouvrir lapplication de courriel",
"dont_receive_email": "Je nai jamais reçu de courriel" "resend": "Renvoyer"
}, },
"dont_receive_email": { "dont_receive_email": {
"title": "Vérifier vos courriels", "title": "Vérifier vos courriels",
@ -401,14 +419,24 @@
"segmented_control": { "segmented_control": {
"posts": "Publications", "posts": "Publications",
"replies": "Réponses", "replies": "Réponses",
"media": "Média" "posts_and_replies": "Messages et réponses",
"media": "Média",
"about": "À propos"
}, },
"relationship_action_alert": { "relationship_action_alert": {
"confirm_mute_user": {
"title": "Masquer le compte",
"message": "Êtes-vous sûr de vouloir mettre en sourdine %s"
},
"confirm_unmute_user": { "confirm_unmute_user": {
"title": "Ne plus mettre en sourdine ce compte", "title": "Ne plus mettre en sourdine ce compte",
"message": "Êtes-vous sûr de vouloir désactiver la sourdine de %s" "message": "Êtes-vous sûr de vouloir désactiver la sourdine de %s"
}, },
"confirm_unblock_usre": { "confirm_block_user": {
"title": "Bloquer le compte",
"message": "Confirmer le blocage de %s"
},
"confirm_unblock_user": {
"title": "Débloquer le compte", "title": "Débloquer le compte",
"message": "Confirmer le déblocage de %s" "message": "Confirmer le déblocage de %s"
} }
@ -418,7 +446,7 @@
"footer": "Les abonné·e·s issus des autres serveurs ne sont pas affiché·e·s." "footer": "Les abonné·e·s issus des autres serveurs ne sont pas affiché·e·s."
}, },
"following": { "following": {
"footer": "Follows from other servers are not displayed." "footer": "Les abonnés issus des autres serveurs ne sont pas affichés."
}, },
"search": { "search": {
"title": "Rechercher", "title": "Rechercher",
@ -461,12 +489,14 @@
"Everything": "Tout", "Everything": "Tout",
"Mentions": "Mentions" "Mentions": "Mentions"
}, },
"user_followed_you": "%s sest abonné à vous", "notification_description": {
"user_favorited your post": "%s a mis votre pouet en favori", "followed_you": "sest abonné à vous",
"user_reblogged_your_post": "%s a partagé votre publication", "favorited_your_post": "a ajouté votre message à ses favoris",
"user_mentioned_you": "%s vous a mentionné", "reblogged_your_post": "a partagé votre message",
"user_requested_to_follow_you": "%s a demandé à vous suivre", "mentioned_you": "vous a mentionné",
"user_your_poll_has_ended": "%s votre sondage est terminé", "request_to_follow_you": "vous a envoyé une demande dabonnement",
"poll_has_ended": "le sondage est terminé"
},
"keyobard": { "keyobard": {
"show_everything": "Tout Afficher", "show_everything": "Tout Afficher",
"show_mentions": "Afficher les mentions" "show_mentions": "Afficher les mentions"
@ -485,6 +515,13 @@
"light": "Toujours claire", "light": "Toujours claire",
"dark": "Toujours sombre" "dark": "Toujours sombre"
}, },
"look_and_feel": {
"title": "Apparence",
"use_system": "Utiliser le thème du système",
"really_dark": "Très sombre",
"sorta_dark": "Légèrement sombre",
"light": "Clair"
},
"notifications": { "notifications": {
"title": "Notifications", "title": "Notifications",
"favorites": "Ajoute lune de mes publications à ses favoris", "favorites": "Ajoute lune de mes publications à ses favoris",
@ -526,14 +563,17 @@
} }
}, },
"report": { "report": {
"title_report": "Signalement",
"title": "Signaler %s", "title": "Signaler %s",
"step1": "Étape 1 de 2", "step1": "Étape 1 de 2",
"step2": "Étape 2 de 2", "step2": "Étape 2 de 2",
"content1": "Y a-t-il dautres messages que vous aimeriez ajouter au signalement?", "content1": "Y a-t-il dautres messages que vous aimeriez ajouter au signalement?",
"content2": "Y a-t-il quelque chose que les modérateurs devraient savoir sur ce rapport ?", "content2": "Y a-t-il quelque chose que les modérateurs devraient savoir sur ce rapport ?",
"report_sent_title": "Merci de nous lavoir signalé, nous allons examiner cela.",
"send": "Envoyer le rapport", "send": "Envoyer le rapport",
"skip_to_send": "Envoyer sans commentaire", "skip_to_send": "Envoyer sans commentaire",
"text_placeholder": "Tapez ou collez des informations supplémentaires" "text_placeholder": "Tapez ou collez des informations supplémentaires",
"reported": "SIGNALÉ"
}, },
"preview": { "preview": {
"keyboard": { "keyboard": {
@ -543,8 +583,8 @@
} }
}, },
"account_list": { "account_list": {
"tab_bar_hint": "Current selected profile: %s. Double tap then hold to show account switcher", "tab_bar_hint": "Profil sélectionné actuel: %s. Double appui puis maintenez enfoncé pour afficher le changement de compte",
"dismiss_account_switcher": "Dismiss Account Switcher", "dismiss_account_switcher": "Rejeter le commutateur de compte",
"add_account": "Ajouter un compte" "add_account": "Ajouter un compte"
}, },
"wizard": { "wizard": {

View File

@ -46,7 +46,7 @@
}, },
"delete_post": { "delete_post": {
"title": "A bheil thu cinnteach gu bheil thu airson am post seo a sguabadh às?", "title": "A bheil thu cinnteach gu bheil thu airson am post seo a sguabadh às?",
"delete": "Sguab às" "message": "A bheil thu cinnteach gu bheil thu airson am post seo a sguabadh às?"
}, },
"clean_cache": { "clean_cache": {
"title": "Falamhaich an tasgadan", "title": "Falamhaich an tasgadan",
@ -82,6 +82,7 @@
"share_user": "Co-roinn %s", "share_user": "Co-roinn %s",
"share_post": "Co-roinn am post", "share_post": "Co-roinn am post",
"open_in_safari": "Fosgail ann an Safari", "open_in_safari": "Fosgail ann an Safari",
"open_in_browser": "Fosgail sa bhrabhsair",
"find_people": "Lorg daoine a leanas tu", "find_people": "Lorg daoine a leanas tu",
"manually_search": "Lorg a làimh na àite", "manually_search": "Lorg a làimh na àite",
"skip": "Leum thairis air", "skip": "Leum thairis air",
@ -139,7 +140,8 @@
"unreblog": "Na brosnaich tuilleadh", "unreblog": "Na brosnaich tuilleadh",
"favorite": "Cuir ris na h-annsachdan", "favorite": "Cuir ris na h-annsachdan",
"unfavorite": "Thoir air falbh o na h-annsachdan", "unfavorite": "Thoir air falbh o na h-annsachdan",
"menu": "Clàr-taice" "menu": "Clàr-taice",
"hide": "Falaich"
}, },
"tag": { "tag": {
"url": "URL", "url": "URL",
@ -148,6 +150,12 @@
"hashtag": "Taga hais", "hashtag": "Taga hais",
"email": "Post-d", "email": "Post-d",
"emoji": "Emoji" "emoji": "Emoji"
},
"visibility": {
"unlisted": "Chì a h-uile duine am post seo ach cha nochd e air an loidhne-ama phoblach.",
"private": "Chan fhaic ach an luchd-leantainn aca am post seo.",
"private_from_me": "Chan fhaic ach an luchd-leantainn agam am post seo.",
"direct": "Chan fhaic ach an cleachdaiche air an dugadh iomradh am post seo."
} }
}, },
"friendship": { "friendship": {
@ -192,10 +200,14 @@
}, },
"scene": { "scene": {
"welcome": { "welcome": {
"slogan": "A cur nan lìonraidhean sòisealta\nnad làmhan fhèin." "slogan": "A cur nan lìonraidhean sòisealta\nnad làmhan fhèin.",
"get_started": "Dèan toiseach-tòiseachaidh",
"log_in": "Clàraich a-steach"
}, },
"server_picker": { "server_picker": {
"title": "Tagh frithealaiche sam bith.", "title": "Tagh frithealaiche sam bith.",
"subtitle": "Tagh coimhearsnachd stèidhichte air d ùidhean no an roinn-dùthcha agad no tè choitcheann.",
"subtitle_extend": "Tagh coimhearsnachd stèidhichte air d ùidhean no an roinn-dùthcha agad no tè choitcheann. Tha gach coimhearsnachd ga stiùireadh le buidheann no neach gu neo-eisimeileach.",
"button": { "button": {
"category": { "category": {
"all": "Na h-uile", "all": "Na h-uile",
@ -248,6 +260,12 @@
}, },
"password": { "password": {
"placeholder": "facal-faire", "placeholder": "facal-faire",
"require": "Feumaidh am facal-faire agad co-dhiù:",
"character_limit": "8 caractaran",
"accessibility": {
"checked": "le cromag",
"unchecked": "gun chromag"
},
"hint": "Feumaidh ochd caractaran a bhith san fhacal-fhaire agad air a char as giorra" "hint": "Feumaidh ochd caractaran a bhith san fhacal-fhaire agad air a char as giorra"
}, },
"invite": { "invite": {
@ -298,7 +316,7 @@
"subtitle": "Tha sinn air post-d a chur gu %s,\nthoir gnogag air a chunntas a dhearbhadh a chunntais agad.", "subtitle": "Tha sinn air post-d a chur gu %s,\nthoir gnogag air a chunntas a dhearbhadh a chunntais agad.",
"button": { "button": {
"open_email_app": "Fosgail aplacaid a phuist-d", "open_email_app": "Fosgail aplacaid a phuist-d",
"dont_receive_email": "Cha d fhuair mi post-d a-riamh" "resend": "Ath-chuir"
}, },
"dont_receive_email": { "dont_receive_email": {
"title": "Thoir sùil air a phost-d agad", "title": "Thoir sùil air a phost-d agad",
@ -401,14 +419,24 @@
"segmented_control": { "segmented_control": {
"posts": "Postaichean", "posts": "Postaichean",
"replies": "Freagairtean", "replies": "Freagairtean",
"media": "Meadhanan" "posts_and_replies": "Postaichean s freagairtean",
"media": "Meadhanan",
"about": "Mu dhèidhinn"
}, },
"relationship_action_alert": { "relationship_action_alert": {
"confirm_mute_user": {
"title": "Mùch an cunntas",
"message": "Dearbh mùchadh %s"
},
"confirm_unmute_user": { "confirm_unmute_user": {
"title": "Dì-mhùch an cunntas", "title": "Dì-mhùch an cunntas",
"message": "Dearbh dì-mhùchadh %s" "message": "Dearbh dì-mhùchadh %s"
}, },
"confirm_unblock_usre": { "confirm_block_user": {
"title": "Bac an cunntas",
"message": "Dearbh bacadh %s"
},
"confirm_unblock_user": {
"title": "Dì-bhac an cunntas", "title": "Dì-bhac an cunntas",
"message": "Dearbh dì-bhacadh %s" "message": "Dearbh dì-bhacadh %s"
} }
@ -461,12 +489,14 @@
"Everything": "A h-uile rud", "Everything": "A h-uile rud",
"Mentions": "Iomraidhean" "Mentions": "Iomraidhean"
}, },
"user_followed_you": "Tha %s a leantainn ort a-nis", "notification_description": {
"user_favorited your post": "Is annsa le %s am post agad", "followed_you": " s iad gad leantainn a-nis",
"user_reblogged_your_post": "Bhrosnaich %s am post agad", "favorited_your_post": " s iad air am post agad a chur ris na h-annsachdan aca",
"user_mentioned_you": "Thug %s iomradh ort", "reblogged_your_post": " s iad air am post agad a bhrosnachadh",
"user_requested_to_follow_you": "Dhiarr %s leantainn ort", "mentioned_you": " s iad air iomradh a thoirt ort",
"user_your_poll_has_ended": "Crìoch cunntais-bheachd aig %s", "request_to_follow_you": "iarrtas leantainn ort",
"poll_has_ended": "thàinig cunntas-bheachd gu crìoch"
},
"keyobard": { "keyobard": {
"show_everything": "Seall a h-uile càil", "show_everything": "Seall a h-uile càil",
"show_mentions": "Seall na h-iomraidhean" "show_mentions": "Seall na h-iomraidhean"
@ -485,6 +515,13 @@
"light": "Soilleir an-còmhnaidh", "light": "Soilleir an-còmhnaidh",
"dark": "Dorcha an-còmhnaidh" "dark": "Dorcha an-còmhnaidh"
}, },
"look_and_feel": {
"title": "Coltas",
"use_system": "Cleachd coltas an t-siostaim",
"really_dark": "Glè dhorcha",
"sorta_dark": "Caran dorcha",
"light": "Soilleir"
},
"notifications": { "notifications": {
"title": "Brathan", "title": "Brathan",
"favorites": "Nuair as annsa leotha am post agam", "favorites": "Nuair as annsa leotha am post agam",
@ -526,14 +563,17 @@
} }
}, },
"report": { "report": {
"title_report": "Dèan gearan",
"title": "Dèan gearan mu %s", "title": "Dèan gearan mu %s",
"step1": "Ceum 1 à 2", "step1": "Ceum 1 à 2",
"step2": "Ceum 2 à 2", "step2": "Ceum 2 à 2",
"content1": "A bheil post sam bith eile ann a bu mhiann leat cur ris a ghearan?", "content1": "A bheil post sam bith eile ann a bu mhiann leat cur ris a ghearan?",
"content2": "A bheil rud sam bith ann a bu mhiann leat innse dha na maoir mun ghearan seo?", "content2": "A bheil rud sam bith ann a bu mhiann leat innse dha na maoir mun ghearan seo?",
"report_sent_title": "Mòran taing airson a ghearain, bheir sinn sùil air.",
"send": "Cuir an gearan", "send": "Cuir an gearan",
"skip_to_send": "Cuir gun bheachd ris", "skip_to_send": "Cuir gun bheachd ris",
"text_placeholder": "Sgrìobh no cuir ann beachdan a bharrachd" "text_placeholder": "Sgrìobh no cuir ann beachdan a bharrachd",
"reported": "CHAIDH GEARAN A DHÈANAMH"
}, },
"preview": { "preview": {
"keyboard": { "keyboard": {

View File

@ -45,8 +45,8 @@
"message": "Please enable the photo library access permission to save the photo." "message": "Please enable the photo library access permission to save the photo."
}, },
"delete_post": { "delete_post": {
"title": "Are you sure you want to delete this post?", "title": "Delete Post",
"delete": "Delete" "message": "Are you sure you want to delete this post?"
}, },
"clean_cache": { "clean_cache": {
"title": "Clean Cache", "title": "Clean Cache",
@ -82,6 +82,7 @@
"share_user": "Share %s", "share_user": "Share %s",
"share_post": "Share Post", "share_post": "Share Post",
"open_in_safari": "Open in Safari", "open_in_safari": "Open in Safari",
"open_in_browser": "Open in Browser",
"find_people": "Find people to follow", "find_people": "Find people to follow",
"manually_search": "Manually search instead", "manually_search": "Manually search instead",
"skip": "Skip", "skip": "Skip",
@ -139,7 +140,8 @@
"unreblog": "Undo reblog", "unreblog": "Undo reblog",
"favorite": "Favorite", "favorite": "Favorite",
"unfavorite": "Unfavorite", "unfavorite": "Unfavorite",
"menu": "Menu" "menu": "Menu",
"hide": "Hide"
}, },
"tag": { "tag": {
"url": "URL", "url": "URL",
@ -148,6 +150,12 @@
"hashtag": "Hashtag", "hashtag": "Hashtag",
"email": "Email", "email": "Email",
"emoji": "Emoji" "emoji": "Emoji"
},
"visibility": {
"unlisted": "Everyone can see this post but not display in the public timeline.",
"private": "Only their followers can see this post.",
"private_from_me": "Only my followers can see this post.",
"direct": "Only mentioned user can see this post."
} }
}, },
"friendship": { "friendship": {
@ -192,10 +200,14 @@
}, },
"scene": { "scene": {
"welcome": { "welcome": {
"slogan": "Social networking\nback in your hands." "slogan": "Social networking\nback in your hands.",
"get_started": "Get Started",
"log_in": "Log In"
}, },
"server_picker": { "server_picker": {
"title": "Pick a server,\nany server.", "title": "Mastodon is made of users in different communities.",
"subtitle": "Pick a community based on your interests, region, or a general purpose one.",
"subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": { "button": {
"category": { "category": {
"all": "All", "all": "All",
@ -222,7 +234,7 @@
"category": "CATEGORY" "category": "CATEGORY"
}, },
"input": { "input": {
"placeholder": "Find a server or join your own..." "placeholder": "Search communities"
}, },
"empty_state": { "empty_state": {
"finding_servers": "Finding available servers...", "finding_servers": "Finding available servers...",
@ -231,7 +243,7 @@
} }
}, },
"register": { "register": {
"title": "Tell us about you.", "title": "Lets get you set up on %s",
"input": { "input": {
"avatar": { "avatar": {
"delete": "Delete" "delete": "Delete"
@ -248,6 +260,12 @@
}, },
"password": { "password": {
"placeholder": "password", "placeholder": "password",
"require": "Your password needs at least:",
"character_limit": "8 characters",
"accessibility": {
"checked": "checked",
"unchecked": "unchecked"
},
"hint": "Your password needs at least eight characters" "hint": "Your password needs at least eight characters"
}, },
"invite": { "invite": {
@ -285,7 +303,7 @@
}, },
"server_rules": { "server_rules": {
"title": "Some ground rules.", "title": "Some ground rules.",
"subtitle": "These rules are set by the admins of %s.", "subtitle": "These are set and enforced by the %s moderators.",
"prompt": "By continuing, youre subject to the terms of service and privacy policy for %s.", "prompt": "By continuing, youre subject to the terms of service and privacy policy for %s.",
"terms_of_service": "terms of service", "terms_of_service": "terms of service",
"privacy_policy": "privacy policy", "privacy_policy": "privacy policy",
@ -295,10 +313,10 @@
}, },
"confirm_email": { "confirm_email": {
"title": "One last thing.", "title": "One last thing.",
"subtitle": "We just sent an email to %s,\ntap the link to confirm your account.", "subtitle": "Tap the link we emailed to you to verify your account.",
"button": { "button": {
"open_email_app": "Open Email App", "open_email_app": "Open Email App",
"dont_receive_email": "I never got an email" "resend": "Resend"
}, },
"dont_receive_email": { "dont_receive_email": {
"title": "Check your email", "title": "Check your email",
@ -401,14 +419,24 @@
"segmented_control": { "segmented_control": {
"posts": "Posts", "posts": "Posts",
"replies": "Replies", "replies": "Replies",
"media": "Media" "posts_and_replies": "Posts and Replies",
"media": "Media",
"about": "About"
}, },
"relationship_action_alert": { "relationship_action_alert": {
"confirm_mute_user": {
"title": "Mute Account",
"message": "Confirm to mute %s"
},
"confirm_unmute_user": { "confirm_unmute_user": {
"title": "Unmute Account", "title": "Unmute Account",
"message": "Confirm to unmute %s" "message": "Confirm to unmute %s"
}, },
"confirm_unblock_usre": { "confirm_block_user": {
"title": "Block Account",
"message": "Confirm to block %s"
},
"confirm_unblock_user": {
"title": "Unblock Account", "title": "Unblock Account",
"message": "Confirm to unblock %s" "message": "Confirm to unblock %s"
} }
@ -461,12 +489,14 @@
"Everything": "Everything", "Everything": "Everything",
"Mentions": "Mentions" "Mentions": "Mentions"
}, },
"user_followed_you": "%s followed you", "notification_description": {
"user_favorited your post": "%s favorited your post", "followed_you": "followed you",
"user_reblogged_your_post": "%s reblogged your post", "favorited_your_post": "favorited your post",
"user_mentioned_you": "%s mentioned you", "reblogged_your_post": "reblogged your post",
"user_requested_to_follow_you": "%s requested to follow you", "mentioned_you": "mentioned you",
"user_your_poll_has_ended": "%s Your poll has ended", "request_to_follow_you": "request to follow you",
"poll_has_ended": "poll has ended"
},
"keyobard": { "keyobard": {
"show_everything": "Show Everything", "show_everything": "Show Everything",
"show_mentions": "Show Mentions" "show_mentions": "Show Mentions"
@ -485,6 +515,13 @@
"light": "Always Light", "light": "Always Light",
"dark": "Always Dark" "dark": "Always Dark"
}, },
"look_and_feel": {
"title": "Look and Feel",
"use_system": "Use System",
"really_dark": "Really Dark",
"sorta_dark": "Sorta Dark",
"light": "Light"
},
"notifications": { "notifications": {
"title": "Notifications", "title": "Notifications",
"favorites": "Favorites my post", "favorites": "Favorites my post",
@ -526,14 +563,17 @@
} }
}, },
"report": { "report": {
"title_report": "Report",
"title": "Report %s", "title": "Report %s",
"step1": "Step 1 of 2", "step1": "Step 1 of 2",
"step2": "Step 2 of 2", "step2": "Step 2 of 2",
"content1": "Are there any other posts youd like to add to the report?", "content1": "Are there any other posts youd like to add to the report?",
"content2": "Is there anything the moderators should know about this report?", "content2": "Is there anything the moderators should know about this report?",
"report_sent_title": "Thanks for reporting, well look into this.",
"send": "Send Report", "send": "Send Report",
"skip_to_send": "Send without comment", "skip_to_send": "Send without comment",
"text_placeholder": "Type or paste additional comments" "text_placeholder": "Type or paste additional comments",
"reported": "REPORTED"
}, },
"preview": { "preview": {
"keyboard": { "keyboard": {

View File

@ -46,7 +46,7 @@
}, },
"delete_post": { "delete_post": {
"title": "Apakah Anda yakin ingin menghapus postingan ini?", "title": "Apakah Anda yakin ingin menghapus postingan ini?",
"delete": "Hapus" "message": "Are you sure you want to delete this post?"
}, },
"clean_cache": { "clean_cache": {
"title": "Bersihkan Cache", "title": "Bersihkan Cache",
@ -82,6 +82,7 @@
"share_user": "Bagikan %s", "share_user": "Bagikan %s",
"share_post": "Bagikan Postingan", "share_post": "Bagikan Postingan",
"open_in_safari": "Buka di Safari", "open_in_safari": "Buka di Safari",
"open_in_browser": "Open in Browser",
"find_people": "Cari orang untuk diikuti", "find_people": "Cari orang untuk diikuti",
"manually_search": "Manually search instead", "manually_search": "Manually search instead",
"skip": "Lewati", "skip": "Lewati",
@ -139,7 +140,8 @@
"unreblog": "Undo reblog", "unreblog": "Undo reblog",
"favorite": "Favorit", "favorite": "Favorit",
"unfavorite": "Unfavorite", "unfavorite": "Unfavorite",
"menu": "Menu" "menu": "Menu",
"hide": "Hide"
}, },
"tag": { "tag": {
"url": "URL", "url": "URL",
@ -148,6 +150,12 @@
"hashtag": "Tagar", "hashtag": "Tagar",
"email": "Surel", "email": "Surel",
"emoji": "Emoji" "emoji": "Emoji"
},
"visibility": {
"unlisted": "Everyone can see this post but not display in the public timeline.",
"private": "Only their followers can see this post.",
"private_from_me": "Only my followers can see this post.",
"direct": "Only mentioned user can see this post."
} }
}, },
"friendship": { "friendship": {
@ -192,10 +200,14 @@
}, },
"scene": { "scene": {
"welcome": { "welcome": {
"slogan": "Social networking\nback in your hands." "slogan": "Social networking\nback in your hands.",
"get_started": "Get Started",
"log_in": "Log In"
}, },
"server_picker": { "server_picker": {
"title": "Pilih sebuah server,\nserver manapun.", "title": "Pilih sebuah server,\nserver manapun.",
"subtitle": "Pick a community based on your interests, region, or a general purpose one.",
"subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": { "button": {
"category": { "category": {
"all": "Semua", "all": "Semua",
@ -222,7 +234,7 @@
"category": "KATEGORI" "category": "KATEGORI"
}, },
"input": { "input": {
"placeholder": "Find a server or join your own..." "placeholder": "Search communities"
}, },
"empty_state": { "empty_state": {
"finding_servers": "Mencari server yang tersedia...", "finding_servers": "Mencari server yang tersedia...",
@ -248,6 +260,12 @@
}, },
"password": { "password": {
"placeholder": "kata sandi", "placeholder": "kata sandi",
"require": "Your password needs at least:",
"character_limit": "8 characters",
"accessibility": {
"checked": "checked",
"unchecked": "unchecked"
},
"hint": "Kata sandi Anda harus memiliki sekurang-kurangnya delapan karakter" "hint": "Kata sandi Anda harus memiliki sekurang-kurangnya delapan karakter"
}, },
"invite": { "invite": {
@ -298,7 +316,7 @@
"subtitle": "Kami baru saja mengirim sebuah surel ke %s,\nketuk tautannya untuk mengkonfirmasi akun Anda.", "subtitle": "Kami baru saja mengirim sebuah surel ke %s,\nketuk tautannya untuk mengkonfirmasi akun Anda.",
"button": { "button": {
"open_email_app": "Buka Aplikasi Surel", "open_email_app": "Buka Aplikasi Surel",
"dont_receive_email": "Saya tidak mendapatkan surel" "resend": "Resend"
}, },
"dont_receive_email": { "dont_receive_email": {
"title": "Periksa surel Anda", "title": "Periksa surel Anda",
@ -401,15 +419,25 @@
"segmented_control": { "segmented_control": {
"posts": "Postingan", "posts": "Postingan",
"replies": "Balasan", "replies": "Balasan",
"media": "Media" "posts_and_replies": "Posts and Replies",
"media": "Media",
"about": "About"
}, },
"relationship_action_alert": { "relationship_action_alert": {
"confirm_mute_user": {
"title": "Mute Account",
"message": "Confirm to mute %s"
},
"confirm_unmute_user": { "confirm_unmute_user": {
"title": "Berhenti Membisukan Akun", "title": "Berhenti Membisukan Akun",
"message": "Confirm to unmute %s" "message": "Confirm to unmute %s"
}, },
"confirm_unblock_usre": { "confirm_block_user": {
"title": "Berhenti Memblokir Akun", "title": "Block Account",
"message": "Confirm to block %s"
},
"confirm_unblock_user": {
"title": "Unblock Account",
"message": "Confirm to unblock %s" "message": "Confirm to unblock %s"
} }
} }
@ -461,12 +489,14 @@
"Everything": "Segalanya", "Everything": "Segalanya",
"Mentions": "Sebutan" "Mentions": "Sebutan"
}, },
"user_followed_you": "%s mengikuti Anda", "notification_description": {
"user_favorited your post": "%s favorited your post", "followed_you": "followed you",
"user_reblogged_your_post": "%s reblogged your post", "favorited_your_post": "favorited your post",
"user_mentioned_you": "%s menyebut Anda", "reblogged_your_post": "reblogged your post",
"user_requested_to_follow_you": "%s ingin mengikuti Anda", "mentioned_you": "mentioned you",
"user_your_poll_has_ended": "%s Japat Anda telah berakhir", "request_to_follow_you": "request to follow you",
"poll_has_ended": "poll has ended"
},
"keyobard": { "keyobard": {
"show_everything": "Tampilkan Segalanya", "show_everything": "Tampilkan Segalanya",
"show_mentions": "Tampilkan Sebutan" "show_mentions": "Tampilkan Sebutan"
@ -485,6 +515,13 @@
"light": "Selalu Cerah", "light": "Selalu Cerah",
"dark": "Selalu Gelap" "dark": "Selalu Gelap"
}, },
"look_and_feel": {
"title": "Look and Feel",
"use_system": "Use System",
"really_dark": "Really Dark",
"sorta_dark": "Sorta Dark",
"light": "Light"
},
"notifications": { "notifications": {
"title": "Notifikasi", "title": "Notifikasi",
"favorites": "Favorites my post", "favorites": "Favorites my post",
@ -526,14 +563,17 @@
} }
}, },
"report": { "report": {
"title_report": "Report",
"title": "Laporkan %s", "title": "Laporkan %s",
"step1": "Langkah 1 dari 2", "step1": "Langkah 1 dari 2",
"step2": "Langkah 2 dari 2", "step2": "Langkah 2 dari 2",
"content1": "Apakah ada postingan lain yang ingin Anda tambahkan ke laporannya?", "content1": "Apakah ada postingan lain yang ingin Anda tambahkan ke laporannya?",
"content2": "Ada yang moderator harus tahu tentang laporan ini?", "content2": "Ada yang moderator harus tahu tentang laporan ini?",
"report_sent_title": "Thanks for reporting, well look into this.",
"send": "Kirim Laporan", "send": "Kirim Laporan",
"skip_to_send": "Kirim tanpa komentar", "skip_to_send": "Kirim tanpa komentar",
"text_placeholder": "Ketik atau tempel komentar tambahan" "text_placeholder": "Ketik atau tempel komentar tambahan",
"reported": "REPORTED"
}, },
"preview": { "preview": {
"keyboard": { "keyboard": {

View File

@ -0,0 +1,596 @@
{
"common": {
"alerts": {
"common": {
"please_try_again": "Please try again.",
"please_try_again_later": "Please try again later."
},
"sign_up_failure": {
"title": "Sign Up Failure"
},
"server_error": {
"title": "Server Error"
},
"vote_failure": {
"title": "Vote Failure",
"poll_ended": "The poll has ended"
},
"discard_post_content": {
"title": "Discard Draft",
"message": "Confirm to discard composed post content."
},
"publish_post_failure": {
"title": "Publish Failure",
"message": "Failed to publish the post.\nPlease check your internet connection.",
"attachments_message": {
"video_attach_with_photo": "Cannot attach a video to a post that already contains images.",
"more_than_one_video": "Cannot attach more than one video."
}
},
"edit_profile_failure": {
"title": "Edit Profile Error",
"message": "Cannot edit profile. Please try again."
},
"sign_out": {
"title": "Sign Out",
"message": "Are you sure you want to sign out?",
"confirm": "Sign Out"
},
"block_domain": {
"title": "Are you really, really sure you want to block the entire %s? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain and any of your followers from that domain will be removed.",
"block_entire_domain": "Block Domain"
},
"save_photo_failure": {
"title": "Save Photo Failure",
"message": "Please enable the photo library access permission to save the photo."
},
"delete_post": {
"title": "Delete Post",
"message": "Are you sure you want to delete this post?"
},
"clean_cache": {
"title": "Clean Cache",
"message": "Successfully cleaned %s cache."
}
},
"controls": {
"actions": {
"back": "Back",
"next": "Next",
"previous": "Previous",
"open": "Open",
"add": "Add",
"remove": "Remove",
"edit": "Edit",
"save": "Save",
"ok": "OK",
"done": "Done",
"confirm": "Confirm",
"continue": "Continue",
"compose": "Compose",
"cancel": "Cancel",
"discard": "Discard",
"try_again": "Try Again",
"take_photo": "Take Photo",
"save_photo": "Save Photo",
"copy_photo": "Copy Photo",
"sign_in": "Sign In",
"sign_up": "Sign Up",
"see_more": "See More",
"preview": "Preview",
"share": "Share",
"share_user": "Share %s",
"share_post": "Share Post",
"open_in_safari": "Open in Safari",
"open_in_browser": "Open in Browser",
"find_people": "Find people to follow",
"manually_search": "Manually search instead",
"skip": "Skip",
"reply": "Reply",
"report_user": "Report %s",
"block_domain": "Block %s",
"unblock_domain": "Unblock %s",
"settings": "Settings",
"delete": "Delete"
},
"tabs": {
"home": "Home",
"search": "Search",
"notification": "Notification",
"profile": "Profile"
},
"keyboard": {
"common": {
"switch_to_tab": "Switch to %s",
"compose_new_post": "Compose New Post",
"show_favorites": "Show Favorites",
"open_settings": "Open Settings"
},
"timeline": {
"previous_status": "Previous Post",
"next_status": "Next Post",
"open_status": "Open Post",
"open_author_profile": "Open Author's Profile",
"open_reblogger_profile": "Open Reblogger's Profile",
"reply_status": "Reply to Post",
"toggle_reblog": "Toggle Reblog on Post",
"toggle_favorite": "Toggle Favorite on Post",
"toggle_content_warning": "Toggle Content Warning",
"preview_image": "Preview Image"
},
"segmented_control": {
"previous_section": "Previous Section",
"next_section": "Next Section"
}
},
"status": {
"user_reblogged": "%s reblogged",
"user_replied_to": "Replied to %s",
"show_post": "Show Post",
"show_user_profile": "Show user profile",
"content_warning": "Content Warning",
"media_content_warning": "Tap anywhere to reveal",
"poll": {
"vote": "Vote",
"closed": "Closed"
},
"actions": {
"reply": "Reply",
"reblog": "Reblog",
"unreblog": "Undo reblog",
"favorite": "Favorite",
"unfavorite": "Unfavorite",
"menu": "Menu",
"hide": "Hide"
},
"tag": {
"url": "URL",
"mention": "Mention",
"link": "Link",
"hashtag": "Hashtag",
"email": "Email",
"emoji": "Emoji"
},
"visibility": {
"unlisted": "Everyone can see this post but not display in the public timeline.",
"private": "Only their followers can see this post.",
"private_from_me": "Only my followers can see this post.",
"direct": "Only mentioned user can see this post."
}
},
"friendship": {
"follow": "Follow",
"following": "Following",
"request": "Request",
"pending": "Pending",
"block": "Block",
"block_user": "Block %s",
"block_domain": "Block %s",
"unblock": "Unblock",
"unblock_user": "Unblock %s",
"blocked": "Blocked",
"mute": "Mute",
"mute_user": "Mute %s",
"unmute": "Unmute",
"unmute_user": "Unmute %s",
"muted": "Muted",
"edit_info": "Edit Info"
},
"timeline": {
"filtered": "Filtered",
"timestamp": {
"now": "Now"
},
"loader": {
"load_missing_posts": "Load missing posts",
"loading_missing_posts": "Loading missing posts...",
"show_more_replies": "Show more replies"
},
"header": {
"no_status_found": "No Post Found",
"blocking_warning": "You cant view this user's profile\nuntil you unblock them.\nYour profile looks like this to them.",
"user_blocking_warning": "You cant view %ss profile\nuntil you unblock them.\nYour profile looks like this to them.",
"blocked_warning": "You cant view this users profile\nuntil they unblock you.",
"user_blocked_warning": "You cant view %ss profile\nuntil they unblock you.",
"suspended_warning": "This user has been suspended.",
"user_suspended_warning": "%ss account has been suspended."
}
}
}
},
"scene": {
"welcome": {
"slogan": "Social networking\nback in your hands.",
"get_started": "Get Started",
"log_in": "Log In"
},
"server_picker": {
"title": "Mastodon is made of users in different communities.",
"subtitle": "Pick a community based on your interests, region, or a general purpose one.",
"subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": {
"category": {
"all": "All",
"all_accessiblity_description": "Category: All",
"academia": "academia",
"activism": "activism",
"food": "food",
"furry": "furry",
"games": "games",
"general": "general",
"journalism": "journalism",
"lgbt": "lgbt",
"regional": "regional",
"art": "art",
"music": "music",
"tech": "tech"
},
"see_less": "See Less",
"see_more": "See More"
},
"label": {
"language": "LANGUAGE",
"users": "USERS",
"category": "CATEGORY"
},
"input": {
"placeholder": "Search communities"
},
"empty_state": {
"finding_servers": "Finding available servers...",
"bad_network": "Something went wrong while loading the data. Check your internet connection.",
"no_results": "No results"
}
},
"register": {
"title": "Lets get you set up on %s",
"input": {
"avatar": {
"delete": "Delete"
},
"username": {
"placeholder": "username",
"duplicate_prompt": "This username is taken."
},
"display_name": {
"placeholder": "display name"
},
"email": {
"placeholder": "email"
},
"password": {
"placeholder": "password",
"require": "Your password needs at least:",
"character_limit": "8 characters",
"accessibility": {
"checked": "checked",
"unchecked": "unchecked"
},
"hint": "Your password needs at least eight characters"
},
"invite": {
"registration_user_invite_request": "Why do you want to join?"
}
},
"error": {
"item": {
"username": "Username",
"email": "Email",
"password": "Password",
"agreement": "Agreement",
"locale": "Locale",
"reason": "Reason"
},
"reason": {
"blocked": "%s contains a disallowed email provider",
"unreachable": "%s does not seem to exist",
"taken": "%s is already in use",
"reserved": "%s is a reserved keyword",
"accepted": "%s must be accepted",
"blank": "%s is required",
"invalid": "%s is invalid",
"too_long": "%s is too long",
"too_short": "%s is too short",
"inclusion": "%s is not a supported value"
},
"special": {
"username_invalid": "Username must only contain alphanumeric characters and underscores",
"username_too_long": "Username is too long (cant be longer than 30 characters)",
"email_invalid": "This is not a valid email address",
"password_too_short": "Password is too short (must be at least 8 characters)"
}
}
},
"server_rules": {
"title": "Some ground rules.",
"subtitle": "These are set and enforced by the %s moderators.",
"prompt": "By continuing, youre subject to the terms of service and privacy policy for %s.",
"terms_of_service": "terms of service",
"privacy_policy": "privacy policy",
"button": {
"confirm": "I Agree"
}
},
"confirm_email": {
"title": "One last thing.",
"subtitle": "Tap the link we emailed to you to verify your account.",
"button": {
"open_email_app": "Open Email App",
"resend": "Resend"
},
"dont_receive_email": {
"title": "Check your email",
"description": "Check if your email address is correct as well as your junk folder if you havent.",
"resend_email": "Resend Email"
},
"open_email_app": {
"title": "Check your inbox.",
"description": "We just sent you an email. Check your junk folder if you havent.",
"mail": "Mail",
"open_email_client": "Open Email Client"
}
},
"home_timeline": {
"title": "Home",
"navigation_bar_state": {
"offline": "Offline",
"new_posts": "See new posts",
"published": "Published!",
"Publishing": "Publishing post..."
}
},
"suggestion_account": {
"title": "Find People to Follow",
"follow_explain": "When you follow someone, youll see their posts in your home feed."
},
"compose": {
"title": {
"new_post": "New Post",
"new_reply": "New Reply"
},
"media_selection": {
"camera": "Take Photo",
"photo_library": "Photo Library",
"browse": "Browse"
},
"content_input_placeholder": "Type or paste whats on your mind",
"compose_action": "Publish",
"replying_to_user": "replying to %s",
"attachment": {
"photo": "photo",
"video": "video",
"attachment_broken": "This %s is broken and cant be\nuploaded to Mastodon.",
"description_photo": "Describe the photo for the visually-impaired...",
"description_video": "Describe the video for the visually-impaired..."
},
"poll": {
"duration_time": "Duration: %s",
"thirty_minutes": "30 minutes",
"one_hour": "1 Hour",
"six_hours": "6 Hours",
"one_day": "1 Day",
"three_days": "3 Days",
"seven_days": "7 Days",
"option_number": "Option %ld"
},
"content_warning": {
"placeholder": "Write an accurate warning here..."
},
"visibility": {
"public": "Public",
"unlisted": "Unlisted",
"private": "Followers only",
"direct": "Only people I mention"
},
"auto_complete": {
"space_to_add": "Space to add"
},
"accessibility": {
"append_attachment": "Add Attachment",
"append_poll": "Add Poll",
"remove_poll": "Remove Poll",
"custom_emoji_picker": "Custom Emoji Picker",
"enable_content_warning": "Enable Content Warning",
"disable_content_warning": "Disable Content Warning",
"post_visibility_menu": "Post Visibility Menu"
},
"keyboard": {
"discard_post": "Discard Post",
"publish_post": "Publish Post",
"toggle_poll": "Toggle Poll",
"toggle_content_warning": "Toggle Content Warning",
"append_attachment_entry": "Add Attachment - %s",
"select_visibility_entry": "Select Visibility - %s"
}
},
"profile": {
"dashboard": {
"posts": "posts",
"following": "following",
"followers": "followers"
},
"fields": {
"add_row": "Add Row",
"placeholder": {
"label": "Label",
"content": "Content"
}
},
"segmented_control": {
"posts": "Posts",
"replies": "Replies",
"posts_and_replies": "Posts and Replies",
"media": "Media",
"about": "About"
},
"relationship_action_alert": {
"confirm_mute_user": {
"title": "Mute Account",
"message": "Confirm to mute %s"
},
"confirm_unmute_user": {
"title": "Unmute Account",
"message": "Confirm to unmute %s"
},
"confirm_block_user": {
"title": "Block Account",
"message": "Confirm to block %s"
},
"confirm_unblock_user": {
"title": "Unblock Account",
"message": "Confirm to unblock %s"
}
}
},
"follower": {
"footer": "Followers from other servers are not displayed."
},
"following": {
"footer": "Follows from other servers are not displayed."
},
"search": {
"title": "Search",
"search_bar": {
"placeholder": "Search hashtags and users",
"cancel": "Cancel"
},
"recommend": {
"button_text": "See All",
"hash_tag": {
"title": "Trending on Mastodon",
"description": "Hashtags that are getting quite a bit of attention",
"people_talking": "%s people are talking"
},
"accounts": {
"title": "Accounts you might like",
"description": "You may like to follow these accounts",
"follow": "Follow"
}
},
"searching": {
"segment": {
"all": "All",
"people": "People",
"hashtags": "Hashtags",
"posts": "Posts"
},
"empty_state": {
"no_results": "No results"
},
"recent_search": "Recent searches",
"clear": "Clear"
}
},
"favorite": {
"title": "Your Favorites"
},
"notification": {
"title": {
"Everything": "Everything",
"Mentions": "Mentions"
},
"notification_description": {
"followed_you": "followed you",
"favorited_your_post": "favorited your post",
"reblogged_your_post": "reblogged your post",
"mentioned_you": "mentioned you",
"request_to_follow_you": "request to follow you",
"poll_has_ended": "poll has ended"
},
"keyobard": {
"show_everything": "Show Everything",
"show_mentions": "Show Mentions"
}
},
"thread": {
"back_title": "Post",
"title": "Post from %s"
},
"settings": {
"title": "Settings",
"section": {
"appearance": {
"title": "Appearance",
"automatic": "Automatic",
"light": "Always Light",
"dark": "Always Dark"
},
"look_and_feel": {
"title": "Look and Feel",
"use_system": "Use System",
"really_dark": "Really Dark",
"sorta_dark": "Sorta Dark",
"light": "Light"
},
"notifications": {
"title": "Notifications",
"favorites": "Favorites my post",
"follows": "Follows me",
"boosts": "Reblogs my post",
"mentions": "Mentions me",
"trigger": {
"anyone": "anyone",
"follower": "a follower",
"follow": "anyone I follow",
"noone": "no one",
"title": "Notify me when"
}
},
"preference": {
"title": "Preferences",
"true_black_dark_mode": "True black dark mode",
"disable_avatar_animation": "Disable animated avatars",
"disable_emoji_animation": "Disable animated emojis",
"using_default_browser": "Use default browser to open links"
},
"boring_zone": {
"title": "The Boring Zone",
"account_settings": "Account Settings",
"terms": "Terms of Service",
"privacy": "Privacy Policy"
},
"spicy_zone": {
"title": "The Spicy Zone",
"clear": "Clear Media Cache",
"signout": "Sign Out"
}
},
"footer": {
"mastodon_description": "Mastodon is open source software. You can report issues on GitHub at %s (%s)"
},
"keyboard": {
"close_settings_window": "Close Settings Window"
}
},
"report": {
"title_report": "Report",
"title": "Report %s",
"step1": "Step 1 of 2",
"step2": "Step 2 of 2",
"content1": "Are there any other posts youd like to add to the report?",
"content2": "Is there anything the moderators should know about this report?",
"report_sent_title": "Thanks for reporting, well look into this.",
"send": "Send Report",
"skip_to_send": "Send without comment",
"text_placeholder": "Type or paste additional comments",
"reported": "REPORTED"
},
"preview": {
"keyboard": {
"close_preview": "Close Preview",
"show_next": "Show Next",
"show_previous": "Show Previous"
}
},
"account_list": {
"tab_bar_hint": "Current selected profile: %s. Double tap then hold to show account switcher",
"dismiss_account_switcher": "Dismiss Account Switcher",
"add_account": "Add Account"
},
"wizard": {
"new_in_mastodon": "New in Mastodon",
"multiple_account_switch_intro_description": "Switch between multiple accounts by holding the profile button.",
"accessibility_hint": "Double tap to dismiss this wizard"
}
}
}

View File

@ -0,0 +1,6 @@
{
"NSCameraUsageDescription": "Used to take photo for post status",
"NSPhotoLibraryAddUsageDescription": "Used to save photo into the Photo Library",
"NewPostShortcutItemTitle": "New Post",
"SearchShortcutItemTitle": "Search"
}

View File

@ -279,7 +279,7 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>ld</string> <string>ld</string>
<key>other</key> <key>other</key>
<string>%ld前</string> <string>%ldか月前</string>
</dict> </dict>
</dict> </dict>
<key>date.day.ago.abbr</key> <key>date.day.ago.abbr</key>

View File

@ -23,7 +23,7 @@
"title": "失敗", "title": "失敗",
"message": "投稿に失敗しました。\nインターネットに接続されているか確認してください。", "message": "投稿に失敗しました。\nインターネットに接続されているか確認してください。",
"attachments_message": { "attachments_message": {
"video_attach_with_photo": "すでに画像が含まれている投稿に、動画を添付することできません。", "video_attach_with_photo": "すでに画像が含まれている投稿に、動画を添付することできません。",
"more_than_one_video": "複数の動画を添付することはできません。" "more_than_one_video": "複数の動画を添付することはできません。"
} }
}, },
@ -46,7 +46,7 @@
}, },
"delete_post": { "delete_post": {
"title": "この投稿を消去しますか?", "title": "この投稿を消去しますか?",
"delete": "消去" "message": "本当に削除しますか?"
}, },
"clean_cache": { "clean_cache": {
"title": "キャッシュを消去", "title": "キャッシュを消去",
@ -67,7 +67,7 @@
"done": "完了", "done": "完了",
"confirm": "確認", "confirm": "確認",
"continue": "続ける", "continue": "続ける",
"compose": "Compose", "compose": "新規作成",
"cancel": "キャンセル", "cancel": "キャンセル",
"discard": "破棄", "discard": "破棄",
"try_again": "再実行", "try_again": "再実行",
@ -82,11 +82,12 @@
"share_user": "%sを共有", "share_user": "%sを共有",
"share_post": "投稿を共有", "share_post": "投稿を共有",
"open_in_safari": "Safariで開く", "open_in_safari": "Safariで開く",
"open_in_browser": "ブラウザで開く",
"find_people": "フォローする人を見つける", "find_people": "フォローする人を見つける",
"manually_search": "手動で検索する", "manually_search": "手動で検索する",
"skip": "スキップ", "skip": "スキップ",
"reply": "リプライ", "reply": "リプライ",
"report_user": "%sを", "report_user": "%sを報",
"block_domain": "%sをブロック", "block_domain": "%sをブロック",
"unblock_domain": "%sのブロックを解除", "unblock_domain": "%sのブロックを解除",
"settings": "設定", "settings": "設定",
@ -139,7 +140,8 @@
"unreblog": "ブーストを戻す", "unreblog": "ブーストを戻す",
"favorite": "お気に入り", "favorite": "お気に入り",
"unfavorite": "お気に入り登録を取り消す", "unfavorite": "お気に入り登録を取り消す",
"menu": "メニュー" "menu": "メニュー",
"hide": "非表示"
}, },
"tag": { "tag": {
"url": "URL", "url": "URL",
@ -148,6 +150,12 @@
"hashtag": "ハッシュタグ", "hashtag": "ハッシュタグ",
"email": "メール", "email": "メール",
"emoji": "絵文字" "emoji": "絵文字"
},
"visibility": {
"unlisted": "この投稿は誰でも見ることができますが、公開タイムラインには表示されません。",
"private": "この投稿はフォロワーに限り見ることができます。",
"private_from_me": "この投稿はフォロワーに限り見ることができます。",
"direct": "この投稿はメンションされたユーザーに限り見ることができます。"
} }
}, },
"friendship": { "friendship": {
@ -192,10 +200,14 @@
}, },
"scene": { "scene": {
"welcome": { "welcome": {
"slogan": "ソーシャルネットワーキングを、あなたの手の中に." "slogan": "ソーシャルネットワーキングを、あなたの手の中に.",
"get_started": "Get Started",
"log_in": "ログイン"
}, },
"server_picker": { "server_picker": {
"title": "サーバーを選択", "title": "サーバーを選択",
"subtitle": "あなたの興味分野・地域に合ったコミュニティや、汎用のものを選択してください。",
"subtitle_extend": "あなたの興味分野・地域に合ったコミュニティや、汎用のものを選択してください。各コミュニティはそれぞれ完全に独立した組織や個人によって運営されています。",
"button": { "button": {
"category": { "category": {
"all": "すべて", "all": "すべて",
@ -203,7 +215,7 @@
"academia": "アカデミア", "academia": "アカデミア",
"activism": "アクティビズム", "activism": "アクティビズム",
"food": "食べ物", "food": "食べ物",
"furry": "furry", "furry": "ケモノ",
"games": "ゲーム", "games": "ゲーム",
"general": "全般", "general": "全般",
"journalism": "言論", "journalism": "言論",
@ -248,6 +260,12 @@
}, },
"password": { "password": {
"placeholder": "パスワード", "placeholder": "パスワード",
"require": "Your password needs at least:",
"character_limit": "8 characters",
"accessibility": {
"checked": "checked",
"unchecked": "unchecked"
},
"hint": "パスワードは最低でも8文字必要です。" "hint": "パスワードは最低でも8文字必要です。"
}, },
"invite": { "invite": {
@ -298,7 +316,7 @@
"subtitle": "先程 %s にメールを送信しました。リンクをタップしてアカウントを確認してください。", "subtitle": "先程 %s にメールを送信しました。リンクをタップしてアカウントを確認してください。",
"button": { "button": {
"open_email_app": "メールアプリを開く", "open_email_app": "メールアプリを開く",
"dont_receive_email": "メールがこない" "resend": "Resend"
}, },
"dont_receive_email": { "dont_receive_email": {
"title": "メールをチェックしてください", "title": "メールをチェックしてください",
@ -342,8 +360,8 @@
"photo": "写真", "photo": "写真",
"video": "動画", "video": "動画",
"attachment_broken": "%sは壊れていてMastodonにアップロードできません。", "attachment_broken": "%sは壊れていてMastodonにアップロードできません。",
"description_photo": "視覚障がい者のために写真を説明", "description_photo": "閲覧が難しいユーザーへの画像説明",
"description_video": "視覚障がい者のための映像の説明" "description_video": "閲覧が難しいユーザーへの映像説明"
}, },
"poll": { "poll": {
"duration_time": "期間: %s", "duration_time": "期間: %s",
@ -401,24 +419,34 @@
"segmented_control": { "segmented_control": {
"posts": "投稿", "posts": "投稿",
"replies": "リプライ", "replies": "リプライ",
"media": "メディア" "posts_and_replies": "Posts and Replies",
"media": "メディア",
"about": "About"
}, },
"relationship_action_alert": { "relationship_action_alert": {
"confirm_mute_user": {
"title": "Mute Account",
"message": "Confirm to mute %s"
},
"confirm_unmute_user": { "confirm_unmute_user": {
"title": "ミュートを解除", "title": "ミュートを解除",
"message": "%sをミュートしますか" "message": "%sをミュートしますか"
}, },
"confirm_unblock_usre": { "confirm_block_user": {
"title": "ブロックを解除", "title": "Block Account",
"message": "%sのブロックを解除しますか" "message": "Confirm to block %s"
},
"confirm_unblock_user": {
"title": "Unblock Account",
"message": "Confirm to unblock %s"
} }
} }
}, },
"follower": { "follower": {
"footer": "Followers from other servers are not displayed." "footer": "他のサーバーからのフォロワーは表示されません。"
}, },
"following": { "following": {
"footer": "Follows from other servers are not displayed." "footer": "他のサーバーにいるフォローは表示されません。"
}, },
"search": { "search": {
"title": "検索", "title": "検索",
@ -461,12 +489,14 @@
"Everything": "すべて", "Everything": "すべて",
"Mentions": "メンション" "Mentions": "メンション"
}, },
"user_followed_you": "%s にフォローされました", "notification_description": {
"user_favorited your post": "%s がお気に入り登録しました", "followed_you": "followed you",
"user_reblogged_your_post": "%s がブーストしました", "favorited_your_post": "favorited your post",
"user_mentioned_you": "%s に返信されました", "reblogged_your_post": "reblogged your post",
"user_requested_to_follow_you": "%s がフォローリクエストを送信しました", "mentioned_you": "mentioned you",
"user_your_poll_has_ended": "%s 投票が終了しました", "request_to_follow_you": "request to follow you",
"poll_has_ended": "poll has ended"
},
"keyobard": { "keyobard": {
"show_everything": "すべて見る", "show_everything": "すべて見る",
"show_mentions": "メンションを見る" "show_mentions": "メンションを見る"
@ -485,6 +515,13 @@
"light": "ライト", "light": "ライト",
"dark": "ダーク" "dark": "ダーク"
}, },
"look_and_feel": {
"title": "Look and Feel",
"use_system": "Use System",
"really_dark": "Really Dark",
"sorta_dark": "Sorta Dark",
"light": "Light"
},
"notifications": { "notifications": {
"title": "通知", "title": "通知",
"favorites": "お気に入り登録", "favorites": "お気に入り登録",
@ -502,7 +539,7 @@
"preference": { "preference": {
"title": "環境設定", "title": "環境設定",
"true_black_dark_mode": "真っ黒なダークテーマを使用する", "true_black_dark_mode": "真っ黒なダークテーマを使用する",
"disable_avatar_animation": "アニメーションアバターの無効化する", "disable_avatar_animation": "アバターのアニメーションを無効化する",
"disable_emoji_animation": "絵文字のアニメーションを無効化する", "disable_emoji_animation": "絵文字のアニメーションを無効化する",
"using_default_browser": "既定のブラウザでリンクを開く" "using_default_browser": "既定のブラウザでリンクを開く"
}, },
@ -526,14 +563,17 @@
} }
}, },
"report": { "report": {
"title": "%sを報告", "title_report": "Report",
"title": "%sを通報",
"step1": "ステップ 1/2", "step1": "ステップ 1/2",
"step2": "ステップ 2/2", "step2": "ステップ 2/2",
"content1": "他に報告したい投稿はありますか?", "content1": "他に通報したい投稿はありますか?",
"content2": "この報告についてモデレーターに言いたいことはありますか?", "content2": "この通報についてモデレーターに伝達しておきたい事項はありますか?",
"send": "報告を送信", "report_sent_title": "Thanks for reporting, well look into this.",
"send": "通報を送信",
"skip_to_send": "コメントなしで送信", "skip_to_send": "コメントなしで送信",
"text_placeholder": "追加コメントを入力" "text_placeholder": "追加コメントを入力",
"reported": "REPORTED"
}, },
"preview": { "preview": {
"keyboard": { "keyboard": {
@ -543,14 +583,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": "アカウントを追加"
}, },
"wizard": { "wizard": {
"new_in_mastodon": "Mastodon の新機能", "new_in_mastodon": "Mastodon の新機能",
"multiple_account_switch_intro_description": "プロフィールボタンを押して複数のアカウントを切り替えます。", "multiple_account_switch_intro_description": "プロフィールボタンを押して複数のアカウントを切り替えます。",
"accessibility_hint": "Double tap to dismiss this wizard" "accessibility_hint": "チュートリアルを閉じるには、ダブルタップしてください"
} }
} }
} }

View File

@ -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 wulɣu ur nettwaɣra</string>
<key>other</key>
<string>%ld yilɣa ur nettwaɣra</string>
</dict>
</dict>
<key>a11y.plural.count.input_limit_exceeds</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>Talast n unekcum tɛedda %#@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 usekkil</string>
<key>other</key>
<string>%ld yisekkilen</string>
</dict>
</dict>
<key>a11y.plural.count.input_limit_remains</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>Talast n unekcum yeqqim-d seg-s %#@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 usekkil</string>
<key>other</key>
<string>%ld yisekkilen</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>tasuffeɣt</string>
<key>other</key>
<string>tisuffaɣ</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 tsuffeɣt</string>
<key>other</key>
<string>%ld n tsuffaɣ</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>1unurif</string>
<key>other</key>
<string>%ld yinurifen</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>1uɛiwed n usuffeɣ</string>
<key>other</key>
<string>%ld n uɛiwed n usuffeɣ</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 tefrant</string>
<key>other</key>
<string>%ld tefranin</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>1umefran</string>
<key>other</key>
<string>%ld imefranen</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 umdan i yettmeslayen</string>
<key>other</key>
<string>%ld yimdanen i yettmeslayen</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 uneḍfar</string>
<key>other</key>
<string>%ld yineḍfaren</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 uneḍfar</string>
<key>other</key>
<string>%ld yineḍfaren</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>Yeqqim-d 1 useggas</string>
<key>other</key>
<string>Qqimen-d %ld yiseggasen</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 wayyur i d-yeqqimen</string>
<key>other</key>
<string>%ld wayyuren i d-yeqqimen</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>Yeqqim-d 1 wass</string>
<key>other</key>
<string>Qqimen-d %ld wussan</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>Yeqqim-d 1 usrag</string>
<key>other</key>
<string>Qqimen-d %ld yisragen</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 tesdat i d-yeqqimen</string>
<key>other</key>
<string>%ld tesdatin i d-yeqqimen</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 tasint i d-yeqqimen</string>
<key>other</key>
<string>%ld tsinin i d-yeqqimen</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 useggas aya</string>
<key>other</key>
<string>%ld yiseggasen aya</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 wayyur aya</string>
<key>other</key>
<string>%ld wayyuren aya</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 wass aya</string>
<key>other</key>
<string>%ld wussan aya</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 usrag aya</string>
<key>other</key>
<string>%ld yisragen aya</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 tesdat aya</string>
<key>other</key>
<string>%ld tesdatin aya</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 tasint aya</string>
<key>other</key>
<string>%ld tsinin aya</string>
</dict>
</dict>
</dict>
</plist>

View File

@ -0,0 +1,596 @@
{
"common": {
"alerts": {
"common": {
"please_try_again": "Ttxil εreḍ tikelt-nniḍen.",
"please_try_again_later": "Ttxil εreḍ tikelt-nniḍen ticki."
},
"sign_up_failure": {
"title": "Tuccḍa deg unekcum"
},
"server_error": {
"title": "Tuccḍa n uqeddac"
},
"vote_failure": {
"title": "Tuccḍa deg ufran",
"poll_ended": "Tafrant tfuk"
},
"discard_post_content": {
"title": "Kkes arewway",
"message": "Sentem i wakken ad yettusefsax ugbur n tsuffeɣt."
},
"publish_post_failure": {
"title": "Yecceḍ usuffeɣ",
"message": "Yecceḍ usuffeɣ n tsuffeɣt.\nMa ulac aɣilif, senqed tuqqna-inek internet.",
"attachments_message": {
"video_attach_with_photo": "Ur tezmireḍ ara ad tsedduḍ tavidyut deg tsuffeɣt ideg llant yakan tugniwin.",
"more_than_one_video": "Ur tezmireḍ ara ad ugar n tvidyut."
}
},
"edit_profile_failure": {
"title": "Ẓreg tuccḍa n umaɣnu",
"message": "Yegguma ad yettwaẓreg umaɣnu. Ɛreḍ tikkelt-nniḍen."
},
"sign_out": {
"title": "Ffeɣ",
"message": "Tebɣiḍ ad teffɣeḍ?",
"confirm": "Ffeɣ"
},
"block_domain": {
"title": "D tidet, d tidet tebɣiḍ ad tesweḥleḍ %s akken ma yella? Deg tuget, kra n yisewḥal d ugdal ad yili d ayen iwulmen, yettwafernen. Ur tettwaliḍ ara agbur seg taɣult-nni neɣ kra seg yineḍfaren-ik i tt-yesseqdacen.",
"block_entire_domain": "Sewḥel taɣult"
},
"save_photo_failure": {
"title": "Tuccḍa deg usekles n tewlaft",
"message": "Ma ulac aɣilif, rmed tasiregt n unekcum ɣer temkarḍit n tewlafin i usekles n tewlaft."
},
"delete_post": {
"title": "Tebɣiḍ s tidet ad tekkseḍ tasuffeɣt-agi?",
"message": "Tebɣiḍ s tidet ad tekkseḍ tasuffeɣt-agi?"
},
"clean_cache": {
"title": "Sfeḍ tuffirt",
"message": "Yettwasfeḍ %s n tkatut tuffirt akken iwata."
}
},
"controls": {
"actions": {
"back": "Tuɣalin",
"next": "Uḍfir",
"previous": "Uzwir",
"open": "Ldi",
"add": "Rnu",
"remove": "Kkes",
"edit": "Ẓreg",
"save": "Sekles",
"ok": "IH",
"done": "Immed",
"confirm": "Sentem",
"continue": "Kemmel",
"compose": "Sudes",
"cancel": "Sefsex",
"discard": "Sefsex",
"try_again": "Ɛreḍ tikkelt-nniḍen",
"take_photo": "Ṭṭef tawlaft",
"save_photo": "Sekles tawlaft",
"copy_photo": "Nɣel tawlaft",
"sign_in": "Qqen",
"sign_up": "Jerred amiḍan",
"see_more": "Wali ugar",
"preview": "Taskant",
"share": "Bḍu",
"share_user": "Bḍu %s",
"share_post": "Bḍu tasuffeɣt",
"open_in_safari": "Ldi deg Safari",
"open_in_browser": "Ldi deg yiminig",
"find_people": "Af imdanen ara tḍefreḍ",
"manually_search": "Anadi s ufus deg wadeg-is",
"skip": "Zgel",
"reply": "Err",
"report_user": "Cetki ɣef %s",
"block_domain": "Sewḥel %s",
"unblock_domain": "Serreḥ i %s",
"settings": "Iɣewwaṛen",
"delete": "Kkes"
},
"tabs": {
"home": "Agejdan",
"search": "Nadi",
"notification": "Tilɣa",
"profile": "Amaɣnu"
},
"keyboard": {
"common": {
"switch_to_tab": "Ddu ɣer %s",
"compose_new_post": "Aru tasuffeɣt tamaynut",
"show_favorites": "Sken-d ismenyifen",
"open_settings": "Ldi iɣewwaren"
},
"timeline": {
"previous_status": "Amagrad uzwir",
"next_status": "Amagrad uḍfir",
"open_status": "Ldi tasuffeɣt",
"open_author_profile": "Ldi amaɣnu n umeskar",
"open_reblogger_profile": "Ldi amaɣnu n win i yulsen asuffeɣ",
"reply_status": "Err ɣef tsuffeɣt",
"toggle_reblog": "Abeddel n unallas n tsuffeɣt",
"toggle_favorite": "Abeddel n usmenyaf i tsuffeɣt",
"toggle_content_warning": "Beddel alɣu n ugbur",
"preview_image": "Asenqed n tugna"
},
"segmented_control": {
"previous_section": "Tafrant tuzwirt",
"next_section": "Tigezmi tuḍfirt"
}
},
"status": {
"user_reblogged": "Tettwasuffeɣ-d %s i tikkelt-nniḍen",
"user_replied_to": "Yerra ɣef %s",
"show_post": "Sken-d tasuffeɣt",
"show_user_profile": "Ssken-d amaɣnu n useqdac",
"content_warning": "Alɣu n ugbur",
"media_content_warning": "Sit anida tebɣiḍ i wakken ad twaliḍ",
"poll": {
"vote": "Dɣeṛ",
"closed": "Ifukk"
},
"actions": {
"reply": "Err",
"reblog": "Aɛiwed n usuffeɣ",
"unreblog": "Sefsex allus n usuffeɣ",
"favorite": "Anurif",
"unfavorite": "Kkes seg yismenyifen",
"menu": "Umuɣ",
"hide": "Ffer"
},
"tag": {
"url": "URL",
"mention": "Tabdart",
"link": "Aseɣwen",
"hashtag": "Ahacṭag",
"email": "Imayl",
"emoji": "Emuji"
},
"visibility": {
"unlisted": "Yal wa yezmer ad iwali tsuffeɣt-a maca ur d-tettwaskaneḍ ara deg yizirig n wakud azayaz.",
"private": "D ineḍfaren-is kan i izemren ad walin tsuffeɣ-a.",
"private_from_me": "D ineḍfaren-is kan i izemren ad walin tsuffeɣ-a.",
"direct": "D ineḍfaren-is kan i izemren ad walin tsuffeɣ-a."
}
},
"friendship": {
"follow": "Ḍfeṛ",
"following": "Yettwaḍfar",
"request": "Tuttra",
"pending": "Yegguni",
"block": "Sewḥel",
"block_user": "Sewḥel %s",
"block_domain": "Sewḥel %s",
"unblock": "Serreḥ",
"unblock_user": "Serreḥ i %s",
"blocked": "Yettusewḥel",
"mute": "Sgugem",
"mute_user": "Sgugem %s",
"unmute": "Kkes asgugem",
"unmute_user": "Kkes asgugem ɣef %s",
"muted": "Yettwasgugem",
"edit_info": "Ẓreg talɣut"
},
"timeline": {
"filtered": "Yettwasizdeg",
"timestamp": {
"now": "Tura"
},
"loader": {
"load_missing_posts": "Sali tisuffaɣ i iruḥen",
"loading_missing_posts": "Asali n tsuffaɣ i iruḥen...",
"show_more_replies": "Ssken-d ugar n tririyin"
},
"header": {
"no_status_found": "Ulac tasuffeɣt yettwafen",
"blocking_warning": "Ur tezmireḍ ara ad twaliḍ amaɣnu n useqdac-a\nalamma tekkseḍ-as asewḥel.\nAkka i as-d-yettban umaɣnu-inek.",
"user_blocking_warning": "Ur tezmireḍ ara ad twaliḍ amaɣnu n %s\nalamma tekkseḍ-as asewḥel.\nAkka i as-d-yettban umaɣnu-inek.",
"blocked_warning": "Ur tezmireḍ ara ad twaliḍ amaɣnu n useqdac-a\nAkka i as-d-yettban umaɣnu-inek.",
"user_blocked_warning": "Ur tezmireḍ ara ad twaliḍ amaɣnu n %s\nAkka i as-d-yettban umaɣnu-inek.",
"suspended_warning": "Yettwaseḥbes useqdac-a.",
"user_suspended_warning": "Yettwaseḥbes umiḍan n %s."
}
}
}
},
"scene": {
"welcome": {
"slogan": "Izeḍwa inmettiyen\nuɣalen-d ɣer ufus-ik.",
"get_started": "Aha bdu tura",
"log_in": "Qqen"
},
"server_picker": {
"title": "Mastodon yettwaxdem i yiseqdacen deg waṭas n temɣiwnin.",
"subtitle": "Fren tamɣiwent almend n wayen tḥemmleḍ, n tmurt-ik neɣ n yiswi-inek amatu.",
"subtitle_extend": "Fren tamɣiwent almend n wayen tḥemmleḍ, n tmurt-ik neɣ n yiswi-inek amatu. Yal tamɣiwent tsedday-itt tkebbanit neɣ amdan ilelliyen.",
"button": {
"category": {
"all": "Akk",
"all_accessiblity_description": "Taggayt: Akk",
"academia": "akadimi",
"activism": "tinuɣmest",
"food": "učči",
"furry": "furry",
"games": "uraren",
"general": "amatu",
"journalism": "taɣamsa",
"lgbt": "lgbt",
"regional": "amnaḍan",
"art": "taẓuri",
"music": "aẓawan",
"tech": "atiknikan"
},
"see_less": "Sken cwiṭ",
"see_more": "Wali ugar"
},
"label": {
"language": "TUTLAYT",
"users": "ISEQDACEN",
"category": "TAGGAYT"
},
"input": {
"placeholder": "Nadi timɣiwnin"
},
"empty_state": {
"finding_servers": "Tifin n yiqeddacen yellan...",
"bad_network": "Tella-d tuccḍa lawan n usali n yisefka. Senqed tuqqna-ink internet.",
"no_results": "Ulac igemmaḍ"
}
},
"register": {
"title": "Aha ad nebdu asbadu ɣef %s",
"input": {
"avatar": {
"delete": "Kkes"
},
"username": {
"placeholder": "isem n useqdac",
"duplicate_prompt": "Isem-ayi n umseqdac yettwaṭṭef yakan."
},
"display_name": {
"placeholder": "isem ara d-yettwaskanen"
},
"email": {
"placeholder": "imayl"
},
"password": {
"placeholder": "awal uffir",
"require": "Awal-ik uffir yesra ma drus:",
"character_limit": "8 n yisekkilen",
"accessibility": {
"checked": "yettwasenqed",
"unchecked": "ur yettwasenqed ara"
},
"hint": "Awal-ik uffir yesra ma drus ṭam n yisekkilen"
},
"invite": {
"registration_user_invite_request": "Acimi tebγiḍ ad ternuḍ iman-ik?"
}
},
"error": {
"item": {
"username": "Isem n useqdac",
"email": "Imayl",
"password": "Awal uffir",
"agreement": "Amtawa",
"locale": "Tadigant",
"reason": "Taɣẓint"
},
"reason": {
"blocked": "%s deg-s asaǧǧăw n yimayl ur nettusireg ara",
"unreachable": "%s ur yettban ara yella",
"taken": "%s yettwaseqdec yakan",
"reserved": "%s d awal uffir yettwaḥarren",
"accepted": "%s ilaq ad yettwaqbal",
"blank": "isra %s",
"invalid": "%s d arameɣtu",
"too_long": "%s ɣezzif aṭas",
"too_short": "%s wezzil aṭas",
"inclusion": "%s mačči d azal yettusefraken"
},
"special": {
"username_invalid": "Isem n useqdac ilaq ad yesɛu kan isekkilen igmumḍinen d wid yettujerrden",
"username_too_long": "Isem n useqdac ɣezzif aṭas (ur ilaq ara ad iɛeddi nnig 30 yisekkilen)",
"email_invalid": "Tagi mačči d tansa n yimayl tameɣtut",
"password_too_short": "Awal uffir wezzil aṭas (ilaq ad yesɛu ma drus 8 yisekkilen)"
}
}
},
"server_rules": {
"title": "Kra n yilugan igejdanen.",
"subtitle": "Ilugan-a ttusbadun sɣur inedbalen n %s.",
"prompt": "Mi ara tkemmleḍ, ilaq ad tqebleḍ tiwtilin n yimeẓla d tsertit tabaḍnit n %s.",
"terms_of_service": "tiwetlin n useqdec",
"privacy_policy": "tasertit tabaḍnit",
"button": {
"confirm": "Qebleɣ"
}
},
"confirm_email": {
"title": "Taɣawsa taneggarut.",
"subtitle": "Sit ɣef useɣwen i ak-n-uznen i wakken ad tesneqdeḍ amiḍan-ik.",
"button": {
"open_email_app": "Ldi asnas n yimayl",
"resend": "Ales tuzna"
},
"dont_receive_email": {
"title": "Senqed imayl-ik·im",
"description": "Senqed ma yella tansa-inek n imayl d tameɣut akked uspam ma yella ur t-tufiḍ ara.",
"resend_email": "Ales tuzna n yimayl"
},
"open_email_app": {
"title": "Sefqed Tanaka-inek.",
"description": "Akken kan i ak-n-nuzen imayl. Sefqed aspam ma yella ur t-tufiḍ ara.",
"mail": "Imayl",
"open_email_client": "Ldi amsaɣ n yimayl"
}
},
"home_timeline": {
"title": "Agejdan",
"navigation_bar_state": {
"offline": "Beṛṛa n tuqqna",
"new_posts": "Tissufaɣ timaynutin",
"published": "Yettwasuffeɣ!",
"Publishing": "Asuffeɣ tasuffeɣt..."
}
},
"suggestion_account": {
"title": "Af imdanen ara tḍefreḍ",
"follow_explain": "Mi ara teṭṭafareḍ albaɛḍ, ad twaliḍ tisuffaɣ-is deg usuddem-inek agejdan."
},
"compose": {
"title": {
"new_post": "Tasuffeɣt tamaynut",
"new_reply": "Tiririt tamaynut"
},
"media_selection": {
"camera": "Ṭṭef tawlaft",
"photo_library": "Tanedlist n tewlaft",
"browse": "Snirem"
},
"content_input_placeholder": "Aru neɣ senteḍ ayen yellan deg wallaɣ-ik",
"compose_action": "Sufeɣ",
"replying_to_user": "tiririt ɣef %s",
"attachment": {
"photo": "tawlaft",
"video": "tavidyutt",
"attachment_broken": "%s-a yerreẓ, ur yezmir ara\nAd d-yettwasali ɣef Mastodon.",
"description_photo": "Glem-d tawlaft i wid yesɛan ugur deg yiẓri...",
"description_video": "Glem-d tavidyut i wid yesɛan ugur deg yiẓri..."
},
"poll": {
"duration_time": "Tangazt: %s",
"thirty_minutes": "30 n tesdatin",
"one_hour": "1 n wesrag",
"six_hours": "6 n yisragen",
"one_day": "1 n wass",
"three_days": "3 n wussan",
"seven_days": "7 n wussan",
"option_number": "Taxtiṛt %ld"
},
"content_warning": {
"placeholder": "Aru alɣu-inek s telqeyt da..."
},
"visibility": {
"public": "Azayez",
"unlisted": "War tabdert",
"private": "Imeḍfaṛen kan",
"direct": "Imdanen i d-bedreɣ kan"
},
"auto_complete": {
"space_to_add": "Tallunt ara yettwarnun"
},
"accessibility": {
"append_attachment": "Rnu taceqquft yeddan",
"append_poll": "Rnu asenqed",
"remove_poll": "Kkes asenqed",
"custom_emoji_picker": "Amefran n yimujiten udmawanen",
"enable_content_warning": "Rmed alɣu n ugbur",
"disable_content_warning": "Sens alɣu n ugbur",
"post_visibility_menu": "Umuɣ n ubani n tsuffeɣt"
},
"keyboard": {
"discard_post": "Sefsex tasuffeɣt",
"publish_post": "Suffeɣ tasuffeɣt",
"toggle_poll": "Beddel asenqed",
"toggle_content_warning": "Beddel alɣu n ugbur",
"append_attachment_entry": "Rnu taceqquft yeddan - %s",
"select_visibility_entry": "Fren timeẓriwt - %s"
}
},
"profile": {
"dashboard": {
"posts": "tisuffaɣ",
"following": "iṭafaṛ",
"followers": "imeḍfaren"
},
"fields": {
"add_row": "Rnu izirig",
"placeholder": {
"label": "Tabzimt",
"content": "Agbur"
}
},
"segmented_control": {
"posts": "Imagraden",
"replies": "Tiririyin",
"posts_and_replies": "Tisuffaɣ d tririyin",
"media": "Amidya",
"about": "Ɣef"
},
"relationship_action_alert": {
"confirm_mute_user": {
"title": "Sgugem amiḍan",
"message": "Sentem asgugem i %s"
},
"confirm_unmute_user": {
"title": "Kkes asgugem i umiḍan",
"message": "Sentem tukksa n usgugem i %s"
},
"confirm_block_user": {
"title": "Sewḥel amiḍan",
"message": "Sentem asewḥel n %s"
},
"confirm_unblock_user": {
"title": "Kkes asewḥel i umiḍan",
"message": "Sentem tukksa n usgugem i %s"
}
}
},
"follower": {
"footer": "Ineḍfaren seg yiqeddacen-nniḍen ur d-ttwaskanen ara."
},
"following": {
"footer": "Ineḍfaren seg yiqeddacen-nniḍen ur d-ttwaskanen ara."
},
"search": {
"title": "Nadi",
"search_bar": {
"placeholder": "Nadi hashtags d yiseqdacen",
"cancel": "Sefsex"
},
"recommend": {
"button_text": "Wali akk",
"hash_tag": {
"title": "Ayen mucaɛen ɣef Mastodon",
"description": "Hashtags i d-ijebbden aṭas lwelha",
"people_talking": "%s yimdanen i yettmeslayen"
},
"accounts": {
"title": "Imiḍanen i tzemreḍ ad tḥemmleḍ",
"description": "Ahat tebɣiḍ ad tḍefreḍ imiḍanen-a",
"follow": "Ḍfeṛ"
}
},
"searching": {
"segment": {
"all": "Akk",
"people": "Imdanen",
"hashtags": "Ihacṭagen",
"posts": "Tisuffaɣ"
},
"empty_state": {
"no_results": "Ulac igemmaḍ"
},
"recent_search": "Inadiyen imaynuten",
"clear": "Sfeḍ"
}
},
"favorite": {
"title": "Ismenyifen-ik·im"
},
"notification": {
"title": {
"Everything": "Akk",
"Mentions": "Abdar"
},
"notification_description": {
"followed_you": "iṭṭafar-ik·ikem",
"favorited_your_post": "yesmenyef tasuffeɣt-ik·im",
"reblogged_your_post": "iɛawed-as asuffeɣ i tsuffeɣt-ik·im",
"mentioned_you": "yebder-ik·ikem-id",
"request_to_follow_you": "issuter aḍfar-inek",
"poll_has_ended": "asenqed iffuk"
},
"keyobard": {
"show_everything": "Sken yal taɣawsa",
"show_mentions": "Sken tisedmirin"
}
},
"thread": {
"back_title": "Amagrad",
"title": "Tasuffeɣt sɣur %s"
},
"settings": {
"title": "Iɣewwaṛen",
"section": {
"appearance": {
"title": "Apparence",
"automatic": "Awurman",
"light": "Yezga d aceεlal",
"dark": "Yezga d aberkan"
},
"look_and_feel": {
"title": "Wali, tḥalfuḍ",
"use_system": "Seqdec anagraw",
"really_dark": "D aberkan s tidet",
"sorta_dark": "D aberkan cwiya",
"light": "Aceɛlal"
},
"notifications": {
"title": "Tilɣa",
"favorites": "Yerna tasuffeɣt-iw ɣer yismenyafen-ines",
"follows": "Yeṭṭafar-iyi",
"boosts": "Yules asuffeɣ n tduffeɣt-iw",
"mentions": "Ibder-iyi-d",
"trigger": {
"anyone": "yal yiwen",
"follower": "ameḍfar",
"follow": "yal win ara ḍefreɣ",
"noone": "ula yiwen",
"title": "Selɣu-yi-d mi ara"
}
},
"preference": {
"title": "Imenyafen",
"true_black_dark_mode": "Askar aberkan n tidet",
"disable_avatar_animation": "Sens ivaṭaren yettembiwilen",
"disable_emoji_animation": "Sens imujiten yettembiwilen",
"using_default_browser": "Seqdec iminig amezwer i twaledyawt n yiseɣwan"
},
"boring_zone": {
"title": "Tamnaḍt yessefcalen",
"account_settings": "Iɣewwaṛen n umiḍan",
"terms": "Tiwtilin n useqdec",
"privacy": "Tasertit tabaḍnit"
},
"spicy_zone": {
"title": "Tamnaḍt tamihawt",
"clear": "Sfeḍ takatut tuffirt n umidyat",
"signout": "Senser"
}
},
"footer": {
"mastodon_description": "Maṣṭudun d aseɣzan s uɣbalu yeldin. Tzemreḍ ad temmleḍ uguren deg GitHub %s (%s)"
},
"keyboard": {
"close_settings_window": "Mdel asfaylu n iɣewwaṛen"
}
},
"report": {
"title_report": "Aneqqis",
"title": "Aneqqis %s",
"step1": "Aḥric 1 seg 2",
"step2": "Aḥric 2 seg 2",
"content1": "Tebɣiḍ ad ternuḍ tisuffaɣ-nniḍen ɣer uneqqis?",
"content2": "Yella wayen i ilaqen ad teẓren yimḍebbren ɣef uneqqis-a?",
"report_sent_title": "Tanemmirt ɣef uneqqis, ad nwali deg waya.",
"send": "Azen aneqis",
"skip_to_send": "Azen s war awennit",
"text_placeholder": "Aru neɣ senteḍ iwenniten-nniḍen",
"reported": "YETTWAMMEL"
},
"preview": {
"keyboard": {
"close_preview": "Mdel timeẓri",
"show_next": "Sken uḍfir",
"show_previous": "Sken udfir"
}
},
"account_list": {
"tab_bar_hint": "Amaɣnu amiran yettwafernen: %s. Sit berdayen syen teǧǧeḍ aḍad-ik·im i uskan abeddel n umiḍan",
"dismiss_account_switcher": "Sefsex abeddel n umiḍan",
"add_account": "Rnu amiḍan"
},
"wizard": {
"new_in_mastodon": "Amaynut deg Maṣṭudun",
"multiple_account_switch_intro_description": "Beddel gar waṭas n yimiḍanen s tussda ɣezzifen ɣef tqeffalt n umaɣnu.",
"accessibility_hint": "Sin isitiyen i usefsex n umarag-a"
}
}
}

View File

@ -0,0 +1,6 @@
{
"NSCameraUsageDescription": "Yettwaseqdac i tuṭṭfa n tewlafin deg usuffeɣ n waddaden",
"NSPhotoLibraryAddUsageDescription": "Yettwaseqdac i usekles n tewlafin deg temkarḍit n tewlafin",
"NewPostShortcutItemTitle": "Tasuffeɣt tamaynut",
"SearchShortcutItemTitle": "Nadi"
}

View File

@ -45,8 +45,8 @@
"message": "Ji kerema xwe mafê bide gihîştina wênegehê çalak bike da ku wêne werin tomarkirin." "message": "Ji kerema xwe mafê bide gihîştina wênegehê çalak bike da ku wêne werin tomarkirin."
}, },
"delete_post": { "delete_post": {
"title": "Ma tu dixwazî vê şandiyê jê bibî?", "title": "Şandiyê jê bibe",
"delete": "Jê bibe" "message": "Ma tu dixwazî vê şandiyê jê bibî?"
}, },
"clean_cache": { "clean_cache": {
"title": "Pêşbîrê pak bike", "title": "Pêşbîrê pak bike",
@ -82,6 +82,7 @@
"share_user": "%s parve bike", "share_user": "%s parve bike",
"share_post": "Şandiyê parve bike", "share_post": "Şandiyê parve bike",
"open_in_safari": "Di Safariyê de veke", "open_in_safari": "Di Safariyê de veke",
"open_in_browser": "Di gerokê de veke",
"find_people": "Mirovan bo şopandinê bibîne", "find_people": "Mirovan bo şopandinê bibîne",
"manually_search": "Ji devlê bi destan lêgerînê bike", "manually_search": "Ji devlê bi destan lêgerînê bike",
"skip": "Derbas bike", "skip": "Derbas bike",
@ -112,7 +113,7 @@
"open_author_profile": "Profîla nivîskaran veke", "open_author_profile": "Profîla nivîskaran veke",
"open_reblogger_profile": "Profîla nivîskaran veke", "open_reblogger_profile": "Profîla nivîskaran veke",
"reply_status": "Bersivê bide şandiyê", "reply_status": "Bersivê bide şandiyê",
"toggle_reblog": "Ji nivîsandin di şandiyê de biguherîne", "toggle_reblog": "Ji nû ve nivîsandin di şandiyê de biguherîne",
"toggle_favorite": "Li ser şandiyê bijarte biguherîne", "toggle_favorite": "Li ser şandiyê bijarte biguherîne",
"toggle_content_warning": "Hişyariya naverokê biguherîne", "toggle_content_warning": "Hişyariya naverokê biguherîne",
"preview_image": "Pêşdîtina wêneyê" "preview_image": "Pêşdîtina wêneyê"
@ -123,7 +124,7 @@
} }
}, },
"status": { "status": {
"user_reblogged": "%s ji nû ve hate nivîsandin", "user_reblogged": "%s ji nû ve nivîsand",
"user_replied_to": "Bersiv da %s", "user_replied_to": "Bersiv da %s",
"show_post": "Şandiyê nîşan bide", "show_post": "Şandiyê nîşan bide",
"show_user_profile": "Profîla bikarhêner nîşan bide", "show_user_profile": "Profîla bikarhêner nîşan bide",
@ -139,7 +140,8 @@
"unreblog": "Ji nû ve nivîsandinê vegere", "unreblog": "Ji nû ve nivîsandinê vegere",
"favorite": "Bijarte", "favorite": "Bijarte",
"unfavorite": "Nebijarte", "unfavorite": "Nebijarte",
"menu": "Kulîn" "menu": "Kulîn",
"hide": "Veşêre"
}, },
"tag": { "tag": {
"url": "URL", "url": "URL",
@ -148,6 +150,12 @@
"hashtag": "Hashtag", "hashtag": "Hashtag",
"email": "E-name", "email": "E-name",
"emoji": "Emojî" "emoji": "Emojî"
},
"visibility": {
"unlisted": "Her kes dikare vê şandiyê bibîne lê nayê nîşandan di demnameya gelemperî de.",
"private": "Tenê şopînerên wan dikarin vê şandiyê bibînin.",
"private_from_me": "Tenê şopînerên min dikarin vê şandiyê bibînin.",
"direct": "Tenê bikarhênerê qalkirî dikare vê şandiyê bibîne."
} }
}, },
"friendship": { "friendship": {
@ -192,10 +200,14 @@
}, },
"scene": { "scene": {
"welcome": { "welcome": {
"slogan": "Torên civakî\ndi destên te de." "slogan": "Torên civakî\ndi destên te de.",
"get_started": "Dest pê bike",
"log_in": "Têkeve"
}, },
"server_picker": { "server_picker": {
"title": "Rajekarekê hilbijêre,\nHer kîjan rajekar be.", "title": "Rajekarekê hilbijêre,\nHer kîjan rajekar be.",
"subtitle": "Li gorî berjewendî, herêm, an jî armancek gelemperî civakekê hilbijêre.",
"subtitle_extend": "Li gorî berjewendî, herêm, an jî armancek gelemperî civakekê hilbijêre. Her civakek ji hêla rêxistinek an kesek bi tevahî serbixwe ve tê xebitandin.",
"button": { "button": {
"category": { "category": {
"all": "Hemû", "all": "Hemû",
@ -231,7 +243,7 @@
} }
}, },
"register": { "register": {
"title": "Ji me re hinekî qala xwe bike.", "title": "Ji me re hinekî qala xwe bike %s",
"input": { "input": {
"avatar": { "avatar": {
"delete": "Jê bibe" "delete": "Jê bibe"
@ -248,6 +260,12 @@
}, },
"password": { "password": {
"placeholder": "pêborîn", "placeholder": "pêborîn",
"require": "Pêdiviya pêborîna te ya herî kêm:",
"character_limit": "8 tîp",
"accessibility": {
"checked": "hate kontrolkirin",
"unchecked": "nehate kontrolkirin"
},
"hint": "Pêborîna te herî kêm divê ji 8 tîpan pêk bê" "hint": "Pêborîna te herî kêm divê ji 8 tîpan pêk bê"
}, },
"invite": { "invite": {
@ -285,7 +303,7 @@
}, },
"server_rules": { "server_rules": {
"title": "Hinek rêzikên bingehîn.", "title": "Hinek rêzikên bingehîn.",
"subtitle": "Ev rêzik ji aliyê rêvebirên %s ve tên sazkirin.", "subtitle": "Ev rêzik ji aliyê çavdêrên %s ve tên sazkirin.",
"prompt": "Bi domandinê, tu ji bo %s di bin mercên bikaranînê û polîtîkaya nepenîtiyê dipejirînî.", "prompt": "Bi domandinê, tu ji bo %s di bin mercên bikaranînê û polîtîkaya nepenîtiyê dipejirînî.",
"terms_of_service": "mercên bikaranînê", "terms_of_service": "mercên bikaranînê",
"privacy_policy": "polîtikaya nihêniyê", "privacy_policy": "polîtikaya nihêniyê",
@ -298,7 +316,7 @@
"subtitle": "Me tenê e-nameyek ji %s re şand,\ngirêdanê bitikne da ku ajimêra xwe bidî piştrastkirin.", "subtitle": "Me tenê e-nameyek ji %s re şand,\ngirêdanê bitikne da ku ajimêra xwe bidî piştrastkirin.",
"button": { "button": {
"open_email_app": "Sepana e-nameyê veke", "open_email_app": "Sepana e-nameyê veke",
"dont_receive_email": "Min hîç e-nameyeke nesitand" "resend": "Ji nû ve bişîne"
}, },
"dont_receive_email": { "dont_receive_email": {
"title": "E-nameyê xwe kontrol bike", "title": "E-nameyê xwe kontrol bike",
@ -401,16 +419,26 @@
"segmented_control": { "segmented_control": {
"posts": "Şandî", "posts": "Şandî",
"replies": "Bersiv", "replies": "Bersiv",
"media": "Medya" "posts_and_replies": "Şandî û bersiv",
"media": "Medya",
"about": "Derbar"
}, },
"relationship_action_alert": { "relationship_action_alert": {
"confirm_mute_user": {
"title": "Ajimêrê bêdeng bike",
"message": "Ji bo bêdengkirina %s bipejirîne"
},
"confirm_unmute_user": { "confirm_unmute_user": {
"title": "Ajimêrê bêdeng neke", "title": "Ajimêrê bêdeng neke",
"message": "Ji bo vekirina bêdengkirinê bipejirîne %s" "message": "Ji bo vekirina bêdengkirinê %s bipejirîne"
}, },
"confirm_unblock_usre": { "confirm_block_user": {
"title": "Ajimêr asteng bike",
"message": "Ji bo rakirina astengkirinê %s bipejirîne"
},
"confirm_unblock_user": {
"title": "Astengiyê li ser ajimêr rake", "title": "Astengiyê li ser ajimêr rake",
"message": "Ji bo rakirina astengkirinê bipejirîne %s" "message": "Ji bo rakirina astengkirinê %s bipejirîne"
} }
} }
}, },
@ -461,12 +489,14 @@
"Everything": "Her tişt", "Everything": "Her tişt",
"Mentions": "Qalkirin" "Mentions": "Qalkirin"
}, },
"user_followed_you": "%s te şopand", "notification_description": {
"user_favorited your post": "%s şandiya te hez kir", "followed_you": "te şopand",
"user_reblogged_your_post": "%s posta we ji nû ve tomar kir", "favorited_your_post": "şandiya te hez kir",
"user_mentioned_you": "%s qale te kir", "reblogged_your_post": "şandiya te ji nû ve nivisand",
"user_requested_to_follow_you": "%s dixwazê te bişopîne", "mentioned_you": "qale te kir",
"user_your_poll_has_ended": "Rapirsîya te qediya", "request_to_follow_you": "dixwazê te bişopîne",
"poll_has_ended": "rapirsî qediya"
},
"keyobard": { "keyobard": {
"show_everything": "Her tiştî nîşan bide", "show_everything": "Her tiştî nîşan bide",
"show_mentions": "Qalkirinan nîşan bike" "show_mentions": "Qalkirinan nîşan bike"
@ -482,9 +512,16 @@
"appearance": { "appearance": {
"title": "Xuyang", "title": "Xuyang",
"automatic": "Xweber", "automatic": "Xweber",
"light": "Her dem ronî", "light": "Her dem ronahî",
"dark": "Her dem tarî" "dark": "Her dem tarî"
}, },
"look_and_feel": {
"title": "Xuyang",
"use_system": "Pergalê bi kar bîne",
"really_dark": "Tarî",
"sorta_dark": "Hinekî tarî",
"light": "Ronahî"
},
"notifications": { "notifications": {
"title": "Agahdarî", "title": "Agahdarî",
"favorites": "Şandiyên min hez kir", "favorites": "Şandiyên min hez kir",
@ -500,7 +537,7 @@
} }
}, },
"preference": { "preference": {
"title": "Hilbijarte", "title": "Sazkarî",
"true_black_dark_mode": "Moda tarî ya reş a rastîn", "true_black_dark_mode": "Moda tarî ya reş a rastîn",
"disable_avatar_animation": "Avatarên anîmasyonî neçalak bike", "disable_avatar_animation": "Avatarên anîmasyonî neçalak bike",
"disable_emoji_animation": "Emojiyên anîmasyonî neçalak bike", "disable_emoji_animation": "Emojiyên anîmasyonî neçalak bike",
@ -526,14 +563,17 @@
} }
}, },
"report": { "report": {
"title_report": "Ragihandin",
"title": "%s ragihîne", "title": "%s ragihîne",
"step1": "Gav 1 ji 2", "step1": "Gav 1 ji 2",
"step2": "Gav 2 ji 2", "step2": "Gav 2 ji 2",
"content1": "Şandiyên din hene ku tu dixwazî tevlî ragihandinê bikî?", "content1": "Şandiyên din hene ku tu dixwazî tevlî ragihandinê bikî?",
"content2": "Derbarê vê ragihandinê de tiştek heye ku divê çavdêr bizanin?", "content2": "Derbarê vê ragihandinê de tiştek heye ku divê çavdêr bizanin?",
"report_sent_title": "Spas ji bo ragihandina te, em ê binirxînin.",
"send": "Ragihandinê bişîne", "send": "Ragihandinê bişîne",
"skip_to_send": "Bêyî şirove bişîne", "skip_to_send": "Bêyî şirove bişîne",
"text_placeholder": "Şiroveyên daxwazkirê binivîsine an jî pê ve bike" "text_placeholder": "Şiroveyên daxwazkirê binivîsine an jî pê ve bike",
"reported": "HATE RAGIHANDIN"
}, },
"preview": { "preview": {
"keyboard": { "keyboard": {

View File

@ -46,7 +46,7 @@
}, },
"delete_post": { "delete_post": {
"title": "정말로 이 게시물을 삭제하시겠습니까?", "title": "정말로 이 게시물을 삭제하시겠습니까?",
"delete": "삭제" "message": "Are you sure you want to delete this post?"
}, },
"clean_cache": { "clean_cache": {
"title": "캐시 삭제", "title": "캐시 삭제",
@ -82,6 +82,7 @@
"share_user": "%s를 공유", "share_user": "%s를 공유",
"share_post": "게시물 공유", "share_post": "게시물 공유",
"open_in_safari": "사파리에서 열기", "open_in_safari": "사파리에서 열기",
"open_in_browser": "Open in Browser",
"find_people": "팔로우 할 사람들 찾기", "find_people": "팔로우 할 사람들 찾기",
"manually_search": "대신 수동으로 검색하기", "manually_search": "대신 수동으로 검색하기",
"skip": "건너뛰기", "skip": "건너뛰기",
@ -139,7 +140,8 @@
"unreblog": "리블로그 취소", "unreblog": "리블로그 취소",
"favorite": "즐겨찾기", "favorite": "즐겨찾기",
"unfavorite": "즐겨찾기 해제", "unfavorite": "즐겨찾기 해제",
"menu": "메뉴" "menu": "메뉴",
"hide": "Hide"
}, },
"tag": { "tag": {
"url": "URL", "url": "URL",
@ -148,6 +150,12 @@
"hashtag": "해시태그", "hashtag": "해시태그",
"email": "이메일", "email": "이메일",
"emoji": "에모지" "emoji": "에모지"
},
"visibility": {
"unlisted": "Everyone can see this post but not display in the public timeline.",
"private": "Only their followers can see this post.",
"private_from_me": "Only my followers can see this post.",
"direct": "Only mentioned user can see this post."
} }
}, },
"friendship": { "friendship": {
@ -192,10 +200,14 @@
}, },
"scene": { "scene": {
"welcome": { "welcome": {
"slogan": "소셜 네트워킹을\n여러분의 손에 돌려드립니다." "slogan": "소셜 네트워킹을\n여러분의 손에 돌려드립니다.",
"get_started": "Get Started",
"log_in": "Log In"
}, },
"server_picker": { "server_picker": {
"title": "서버를 고르세요,\n아무 서버나 좋습니다.", "title": "서버를 고르세요,\n아무 서버나 좋습니다.",
"subtitle": "Pick a community based on your interests, region, or a general purpose one.",
"subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": { "button": {
"category": { "category": {
"all": "모두", "all": "모두",
@ -222,7 +234,7 @@
"category": "분류" "category": "분류"
}, },
"input": { "input": {
"placeholder": "Find a server or join your own..." "placeholder": "Search communities"
}, },
"empty_state": { "empty_state": {
"finding_servers": "Finding available servers...", "finding_servers": "Finding available servers...",
@ -231,7 +243,7 @@
} }
}, },
"register": { "register": {
"title": "Tell us about you.", "title": "Lets get you set up on %s",
"input": { "input": {
"avatar": { "avatar": {
"delete": "삭제" "delete": "삭제"
@ -248,6 +260,12 @@
}, },
"password": { "password": {
"placeholder": "암호", "placeholder": "암호",
"require": "Your password needs at least:",
"character_limit": "8 characters",
"accessibility": {
"checked": "checked",
"unchecked": "unchecked"
},
"hint": "암호는 최소 8글자 이상이어야 합니다" "hint": "암호는 최소 8글자 이상이어야 합니다"
}, },
"invite": { "invite": {
@ -285,7 +303,7 @@
}, },
"server_rules": { "server_rules": {
"title": "Some ground rules.", "title": "Some ground rules.",
"subtitle": "These rules are set by the admins of %s.", "subtitle": "These are set and enforced by the %s moderators.",
"prompt": "By continuing, youre subject to the terms of service and privacy policy for %s.", "prompt": "By continuing, youre subject to the terms of service and privacy policy for %s.",
"terms_of_service": "terms of service", "terms_of_service": "terms of service",
"privacy_policy": "privacy policy", "privacy_policy": "privacy policy",
@ -295,10 +313,10 @@
}, },
"confirm_email": { "confirm_email": {
"title": "마지막으로.", "title": "마지막으로.",
"subtitle": "We just sent an email to %s,\ntap the link to confirm your account.", "subtitle": "Tap the link we emailed to you to verify your account.",
"button": { "button": {
"open_email_app": "Open Email App", "open_email_app": "Open Email App",
"dont_receive_email": "I never got an email" "resend": "Resend"
}, },
"dont_receive_email": { "dont_receive_email": {
"title": "Check your email", "title": "Check your email",
@ -401,16 +419,26 @@
"segmented_control": { "segmented_control": {
"posts": "게시물", "posts": "게시물",
"replies": "답글", "replies": "답글",
"media": "미디어" "posts_and_replies": "Posts and Replies",
"media": "미디어",
"about": "About"
}, },
"relationship_action_alert": { "relationship_action_alert": {
"confirm_mute_user": {
"title": "Mute Account",
"message": "Confirm to mute %s"
},
"confirm_unmute_user": { "confirm_unmute_user": {
"title": "계정 뮤트 해제", "title": "계정 뮤트 해제",
"message": "%s 뮤트 해제 확인" "message": "%s 뮤트 해제 확인"
}, },
"confirm_unblock_usre": { "confirm_block_user": {
"title": "계정 차단 해제", "title": "Block Account",
"message": "%s 차단 해제 확인" "message": "Confirm to block %s"
},
"confirm_unblock_user": {
"title": "Unblock Account",
"message": "Confirm to unblock %s"
} }
} }
}, },
@ -461,12 +489,14 @@
"Everything": "Everything", "Everything": "Everything",
"Mentions": "Mentions" "Mentions": "Mentions"
}, },
"user_followed_you": "%s followed you", "notification_description": {
"user_favorited your post": "%s favorited your post", "followed_you": "followed you",
"user_reblogged_your_post": "%s reblogged your post", "favorited_your_post": "favorited your post",
"user_mentioned_you": "%s mentioned you", "reblogged_your_post": "reblogged your post",
"user_requested_to_follow_you": "%s requested to follow you", "mentioned_you": "mentioned you",
"user_your_poll_has_ended": "%s Your poll has ended", "request_to_follow_you": "request to follow you",
"poll_has_ended": "poll has ended"
},
"keyobard": { "keyobard": {
"show_everything": "Show Everything", "show_everything": "Show Everything",
"show_mentions": "Show Mentions" "show_mentions": "Show Mentions"
@ -485,6 +515,13 @@
"light": "Always Light", "light": "Always Light",
"dark": "Always Dark" "dark": "Always Dark"
}, },
"look_and_feel": {
"title": "Look and Feel",
"use_system": "Use System",
"really_dark": "Really Dark",
"sorta_dark": "Sorta Dark",
"light": "Light"
},
"notifications": { "notifications": {
"title": "Notifications", "title": "Notifications",
"favorites": "Favorites my post", "favorites": "Favorites my post",
@ -526,14 +563,17 @@
} }
}, },
"report": { "report": {
"title_report": "Report",
"title": "%s 신고하기", "title": "%s 신고하기",
"step1": "1단계 (총 2단계)", "step1": "1단계 (총 2단계)",
"step2": "2단계 (총 2단계)", "step2": "2단계 (총 2단계)",
"content1": "신고에 추가하고 싶은 다른 게시물이 존재하나요?", "content1": "신고에 추가하고 싶은 다른 게시물이 존재하나요?",
"content2": "이 신고에 대해 중재자들이 알아야 할 것이 있나요?", "content2": "이 신고에 대해 중재자들이 알아야 할 것이 있나요?",
"report_sent_title": "Thanks for reporting, well look into this.",
"send": "신고 전송", "send": "신고 전송",
"skip_to_send": "추가설명 없이 보내기", "skip_to_send": "추가설명 없이 보내기",
"text_placeholder": "추가 설명을 적거나 붙여넣으세요" "text_placeholder": "추가 설명을 적거나 붙여넣으세요",
"reported": "REPORTED"
}, },
"preview": { "preview": {
"keyboard": { "keyboard": {

View File

@ -46,7 +46,7 @@
}, },
"delete_post": { "delete_post": {
"title": "Weet u zeker dat u dit bericht wilt verwijderen?", "title": "Weet u zeker dat u dit bericht wilt verwijderen?",
"delete": "Verwijderen" "message": "Are you sure you want to delete this post?"
}, },
"clean_cache": { "clean_cache": {
"title": "Cache-geheugen Wissen", "title": "Cache-geheugen Wissen",
@ -82,6 +82,7 @@
"share_user": "Delen %s", "share_user": "Delen %s",
"share_post": "Bericht Delen", "share_post": "Bericht Delen",
"open_in_safari": "Open in Safari", "open_in_safari": "Open in Safari",
"open_in_browser": "Open in Browser",
"find_people": "Zoek mensen om te volgen", "find_people": "Zoek mensen om te volgen",
"manually_search": "Handmatig zoeken", "manually_search": "Handmatig zoeken",
"skip": "Overslaan", "skip": "Overslaan",
@ -139,7 +140,8 @@
"unreblog": "Delen ongedaan maken", "unreblog": "Delen ongedaan maken",
"favorite": "Toevoegen aan Favorieten", "favorite": "Toevoegen aan Favorieten",
"unfavorite": "Verwijderen uit Favorieten", "unfavorite": "Verwijderen uit Favorieten",
"menu": "Menu" "menu": "Menu",
"hide": "Hide"
}, },
"tag": { "tag": {
"url": "URL", "url": "URL",
@ -148,6 +150,12 @@
"hashtag": "Hashtag", "hashtag": "Hashtag",
"email": "Email", "email": "Email",
"emoji": "Emoji" "emoji": "Emoji"
},
"visibility": {
"unlisted": "Everyone can see this post but not display in the public timeline.",
"private": "Only their followers can see this post.",
"private_from_me": "Only my followers can see this post.",
"direct": "Only mentioned user can see this post."
} }
}, },
"friendship": { "friendship": {
@ -192,10 +200,14 @@
}, },
"scene": { "scene": {
"welcome": { "welcome": {
"slogan": "Sociale media terug in uw handen." "slogan": "Sociale media terug in uw handen.",
"get_started": "Get Started",
"log_in": "Log In"
}, },
"server_picker": { "server_picker": {
"title": "Kies een server, welke dan ook.", "title": "Kies een server, welke dan ook.",
"subtitle": "Pick a community based on your interests, region, or a general purpose one.",
"subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": { "button": {
"category": { "category": {
"all": "Alles", "all": "Alles",
@ -248,6 +260,12 @@
}, },
"password": { "password": {
"placeholder": "wachtwoord", "placeholder": "wachtwoord",
"require": "Your password needs at least:",
"character_limit": "8 characters",
"accessibility": {
"checked": "checked",
"unchecked": "unchecked"
},
"hint": "Uw wachtwoord moet ten minste acht tekens bevatten" "hint": "Uw wachtwoord moet ten minste acht tekens bevatten"
}, },
"invite": { "invite": {
@ -298,7 +316,7 @@
"subtitle": "We hebben een e-mail gestuurd naar %s,\nklik op de link om uw account te bevestigen.", "subtitle": "We hebben een e-mail gestuurd naar %s,\nklik op de link om uw account te bevestigen.",
"button": { "button": {
"open_email_app": "Email Openen", "open_email_app": "Email Openen",
"dont_receive_email": "Ik heb geen email ontvangen" "resend": "Resend"
}, },
"dont_receive_email": { "dont_receive_email": {
"title": "Controleer uw emailadres", "title": "Controleer uw emailadres",
@ -401,16 +419,26 @@
"segmented_control": { "segmented_control": {
"posts": "Berichten", "posts": "Berichten",
"replies": "Reacties", "replies": "Reacties",
"media": "Media" "posts_and_replies": "Posts and Replies",
"media": "Media",
"about": "About"
}, },
"relationship_action_alert": { "relationship_action_alert": {
"confirm_mute_user": {
"title": "Mute Account",
"message": "Confirm to mute %s"
},
"confirm_unmute_user": { "confirm_unmute_user": {
"title": "Account Negeren", "title": "Account Negeren",
"message": "Bevestig om %s te negeren" "message": "Bevestig om %s te negeren"
}, },
"confirm_unblock_usre": { "confirm_block_user": {
"title": "Account niet langer negeren", "title": "Block Account",
"message": "Bevestig om %s te deblokkeren" "message": "Confirm to block %s"
},
"confirm_unblock_user": {
"title": "Unblock Account",
"message": "Confirm to unblock %s"
} }
} }
}, },
@ -461,12 +489,14 @@
"Everything": "Alles", "Everything": "Alles",
"Mentions": "Vermeldingen" "Mentions": "Vermeldingen"
}, },
"user_followed_you": "%s followed you", "notification_description": {
"user_favorited your post": "%s favorited your post", "followed_you": "followed you",
"user_reblogged_your_post": "%s reblogged your post", "favorited_your_post": "favorited your post",
"user_mentioned_you": "%s mentioned you", "reblogged_your_post": "reblogged your post",
"user_requested_to_follow_you": "%s requested to follow you", "mentioned_you": "mentioned you",
"user_your_poll_has_ended": "%s Your poll has ended", "request_to_follow_you": "request to follow you",
"poll_has_ended": "poll has ended"
},
"keyobard": { "keyobard": {
"show_everything": "Alles weergeven", "show_everything": "Alles weergeven",
"show_mentions": "Vermeldingen weergeven" "show_mentions": "Vermeldingen weergeven"
@ -485,6 +515,13 @@
"light": "Altijd Licht", "light": "Altijd Licht",
"dark": "Altijd Donker" "dark": "Altijd Donker"
}, },
"look_and_feel": {
"title": "Look and Feel",
"use_system": "Use System",
"really_dark": "Really Dark",
"sorta_dark": "Sorta Dark",
"light": "Light"
},
"notifications": { "notifications": {
"title": "Meldingen", "title": "Meldingen",
"favorites": "Mijn bericht als favoriet toevoegt", "favorites": "Mijn bericht als favoriet toevoegt",
@ -526,14 +563,17 @@
} }
}, },
"report": { "report": {
"title_report": "Report",
"title": "Rapporteer %s", "title": "Rapporteer %s",
"step1": "Stap 1 van 2", "step1": "Stap 1 van 2",
"step2": "Stap 2 van 2", "step2": "Stap 2 van 2",
"content1": "Zijn er nog meer berichten die u aan het rapport wilt toevoegen?", "content1": "Zijn er nog meer berichten die u aan het rapport wilt toevoegen?",
"content2": "Is er iets anders over dit rapport dat de moderators zouden moeten weten?", "content2": "Is er iets anders over dit rapport dat de moderators zouden moeten weten?",
"report_sent_title": "Thanks for reporting, well look into this.",
"send": "Stuur rapport", "send": "Stuur rapport",
"skip_to_send": "Verstuur zonder opmerkingen", "skip_to_send": "Verstuur zonder opmerkingen",
"text_placeholder": "Schrijf of plak aanvullende opmerkingen" "text_placeholder": "Schrijf of plak aanvullende opmerkingen",
"reported": "REPORTED"
}, },
"preview": { "preview": {
"keyboard": { "keyboard": {

View File

@ -45,8 +45,8 @@
"message": "Please enable the photo library access permission to save the photo." "message": "Please enable the photo library access permission to save the photo."
}, },
"delete_post": { "delete_post": {
"title": "Are you sure you want to delete this post?", "title": "Delete Post",
"delete": "Delete" "message": "Are you sure you want to delete this post?"
}, },
"clean_cache": { "clean_cache": {
"title": "Clean Cache", "title": "Clean Cache",
@ -82,6 +82,7 @@
"share_user": "Share %s", "share_user": "Share %s",
"share_post": "Share Post", "share_post": "Share Post",
"open_in_safari": "Open in Safari", "open_in_safari": "Open in Safari",
"open_in_browser": "Open in Browser",
"find_people": "Find people to follow", "find_people": "Find people to follow",
"manually_search": "Manually search instead", "manually_search": "Manually search instead",
"skip": "Skip", "skip": "Skip",
@ -139,7 +140,8 @@
"unreblog": "Undo reblog", "unreblog": "Undo reblog",
"favorite": "Favorite", "favorite": "Favorite",
"unfavorite": "Unfavorite", "unfavorite": "Unfavorite",
"menu": "Menu" "menu": "Menu",
"hide": "Hide"
}, },
"tag": { "tag": {
"url": "URL", "url": "URL",
@ -148,6 +150,12 @@
"hashtag": "Hashtag", "hashtag": "Hashtag",
"email": "Email", "email": "Email",
"emoji": "Emoji" "emoji": "Emoji"
},
"visibility": {
"unlisted": "Everyone can see this post but not display in the public timeline.",
"private": "Only their followers can see this post.",
"private_from_me": "Only my followers can see this post.",
"direct": "Only mentioned user can see this post."
} }
}, },
"friendship": { "friendship": {
@ -192,10 +200,14 @@
}, },
"scene": { "scene": {
"welcome": { "welcome": {
"slogan": "Social networking\nback in your hands." "slogan": "Social networking\nback in your hands.",
"get_started": "Get Started",
"log_in": "Log In"
}, },
"server_picker": { "server_picker": {
"title": "Pick a server,\nany server.", "title": "Mastodon is made of users in different communities.",
"subtitle": "Pick a community based on your interests, region, or a general purpose one.",
"subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": { "button": {
"category": { "category": {
"all": "All", "all": "All",
@ -222,7 +234,7 @@
"category": "CATEGORY" "category": "CATEGORY"
}, },
"input": { "input": {
"placeholder": "Find a server or join your own..." "placeholder": "Search communities"
}, },
"empty_state": { "empty_state": {
"finding_servers": "Finding available servers...", "finding_servers": "Finding available servers...",
@ -231,7 +243,7 @@
} }
}, },
"register": { "register": {
"title": "Tell us about you.", "title": "Lets get you set up on %s",
"input": { "input": {
"avatar": { "avatar": {
"delete": "Delete" "delete": "Delete"
@ -248,6 +260,12 @@
}, },
"password": { "password": {
"placeholder": "password", "placeholder": "password",
"require": "Your password needs at least:",
"character_limit": "8 characters",
"accessibility": {
"checked": "checked",
"unchecked": "unchecked"
},
"hint": "Your password needs at least eight characters" "hint": "Your password needs at least eight characters"
}, },
"invite": { "invite": {
@ -285,7 +303,7 @@
}, },
"server_rules": { "server_rules": {
"title": "Some ground rules.", "title": "Some ground rules.",
"subtitle": "These rules are set by the admins of %s.", "subtitle": "These are set and enforced by the %s moderators.",
"prompt": "By continuing, youre subject to the terms of service and privacy policy for %s.", "prompt": "By continuing, youre subject to the terms of service and privacy policy for %s.",
"terms_of_service": "terms of service", "terms_of_service": "terms of service",
"privacy_policy": "privacy policy", "privacy_policy": "privacy policy",
@ -295,10 +313,10 @@
}, },
"confirm_email": { "confirm_email": {
"title": "One last thing.", "title": "One last thing.",
"subtitle": "We just sent an email to %s,\ntap the link to confirm your account.", "subtitle": "Tap the link we emailed to you to verify your account.",
"button": { "button": {
"open_email_app": "Open Email App", "open_email_app": "Open Email App",
"dont_receive_email": "I never got an email" "resend": "Resend"
}, },
"dont_receive_email": { "dont_receive_email": {
"title": "Check your email", "title": "Check your email",
@ -401,14 +419,24 @@
"segmented_control": { "segmented_control": {
"posts": "Posts", "posts": "Posts",
"replies": "Replies", "replies": "Replies",
"media": "Media" "posts_and_replies": "Posts and Replies",
"media": "Media",
"about": "About"
}, },
"relationship_action_alert": { "relationship_action_alert": {
"confirm_mute_user": {
"title": "Mute Account",
"message": "Confirm to mute %s"
},
"confirm_unmute_user": { "confirm_unmute_user": {
"title": "Unmute Account", "title": "Unmute Account",
"message": "Confirm to unmute %s" "message": "Confirm to unmute %s"
}, },
"confirm_unblock_usre": { "confirm_block_user": {
"title": "Block Account",
"message": "Confirm to block %s"
},
"confirm_unblock_user": {
"title": "Unblock Account", "title": "Unblock Account",
"message": "Confirm to unblock %s" "message": "Confirm to unblock %s"
} }
@ -461,12 +489,14 @@
"Everything": "Everything", "Everything": "Everything",
"Mentions": "Mentions" "Mentions": "Mentions"
}, },
"user_followed_you": "%s followed you", "notification_description": {
"user_favorited your post": "%s favorited your post", "followed_you": "followed you",
"user_reblogged_your_post": "%s reblogged your post", "favorited_your_post": "favorited your post",
"user_mentioned_you": "%s mentioned you", "reblogged_your_post": "reblogged your post",
"user_requested_to_follow_you": "%s requested to follow you", "mentioned_you": "mentioned you",
"user_your_poll_has_ended": "%s Your poll has ended", "request_to_follow_you": "request to follow you",
"poll_has_ended": "poll has ended"
},
"keyobard": { "keyobard": {
"show_everything": "Show Everything", "show_everything": "Show Everything",
"show_mentions": "Show Mentions" "show_mentions": "Show Mentions"
@ -485,6 +515,13 @@
"light": "Always Light", "light": "Always Light",
"dark": "Always Dark" "dark": "Always Dark"
}, },
"look_and_feel": {
"title": "Look and Feel",
"use_system": "Use System",
"really_dark": "Really Dark",
"sorta_dark": "Sorta Dark",
"light": "Light"
},
"notifications": { "notifications": {
"title": "Notifications", "title": "Notifications",
"favorites": "Favorites my post", "favorites": "Favorites my post",
@ -526,14 +563,17 @@
} }
}, },
"report": { "report": {
"title_report": "Report",
"title": "Report %s", "title": "Report %s",
"step1": "Step 1 of 2", "step1": "Step 1 of 2",
"step2": "Step 2 of 2", "step2": "Step 2 of 2",
"content1": "Are there any other posts youd like to add to the report?", "content1": "Are there any other posts youd like to add to the report?",
"content2": "Is there anything the moderators should know about this report?", "content2": "Is there anything the moderators should know about this report?",
"report_sent_title": "Thanks for reporting, well look into this.",
"send": "Send Report", "send": "Send Report",
"skip_to_send": "Send without comment", "skip_to_send": "Send without comment",
"text_placeholder": "Type or paste additional comments" "text_placeholder": "Type or paste additional comments",
"reported": "REPORTED"
}, },
"preview": { "preview": {
"keyboard": { "keyboard": {

View File

@ -45,8 +45,8 @@
"message": "Please enable the photo library access permission to save the photo." "message": "Please enable the photo library access permission to save the photo."
}, },
"delete_post": { "delete_post": {
"title": "Are you sure you want to delete this post?", "title": "Delete Post",
"delete": "Delete" "message": "Are you sure you want to delete this post?"
}, },
"clean_cache": { "clean_cache": {
"title": "Clean Cache", "title": "Clean Cache",
@ -82,6 +82,7 @@
"share_user": "Share %s", "share_user": "Share %s",
"share_post": "Share Post", "share_post": "Share Post",
"open_in_safari": "Open in Safari", "open_in_safari": "Open in Safari",
"open_in_browser": "Open in Browser",
"find_people": "Find people to follow", "find_people": "Find people to follow",
"manually_search": "Manually search instead", "manually_search": "Manually search instead",
"skip": "Skip", "skip": "Skip",
@ -139,7 +140,8 @@
"unreblog": "Undo reblog", "unreblog": "Undo reblog",
"favorite": "Favorite", "favorite": "Favorite",
"unfavorite": "Unfavorite", "unfavorite": "Unfavorite",
"menu": "Menu" "menu": "Menu",
"hide": "Hide"
}, },
"tag": { "tag": {
"url": "URL", "url": "URL",
@ -148,6 +150,12 @@
"hashtag": "Hashtag", "hashtag": "Hashtag",
"email": "Email", "email": "Email",
"emoji": "Emoji" "emoji": "Emoji"
},
"visibility": {
"unlisted": "Everyone can see this post but not display in the public timeline.",
"private": "Only their followers can see this post.",
"private_from_me": "Only my followers can see this post.",
"direct": "Only mentioned user can see this post."
} }
}, },
"friendship": { "friendship": {
@ -192,10 +200,14 @@
}, },
"scene": { "scene": {
"welcome": { "welcome": {
"slogan": "Social networking\nback in your hands." "slogan": "Social networking\nback in your hands.",
"get_started": "Get Started",
"log_in": "Log In"
}, },
"server_picker": { "server_picker": {
"title": "Pick a server,\nany server.", "title": "Mastodon is made of users in different communities.",
"subtitle": "Pick a community based on your interests, region, or a general purpose one.",
"subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": { "button": {
"category": { "category": {
"all": "All", "all": "All",
@ -222,7 +234,7 @@
"category": "CATEGORY" "category": "CATEGORY"
}, },
"input": { "input": {
"placeholder": "Find a server or join your own..." "placeholder": "Search communities"
}, },
"empty_state": { "empty_state": {
"finding_servers": "Finding available servers...", "finding_servers": "Finding available servers...",
@ -231,7 +243,7 @@
} }
}, },
"register": { "register": {
"title": "Tell us about you.", "title": "Lets get you set up on %s",
"input": { "input": {
"avatar": { "avatar": {
"delete": "Delete" "delete": "Delete"
@ -248,6 +260,12 @@
}, },
"password": { "password": {
"placeholder": "password", "placeholder": "password",
"require": "Your password needs at least:",
"character_limit": "8 characters",
"accessibility": {
"checked": "checked",
"unchecked": "unchecked"
},
"hint": "Your password needs at least eight characters" "hint": "Your password needs at least eight characters"
}, },
"invite": { "invite": {
@ -285,7 +303,7 @@
}, },
"server_rules": { "server_rules": {
"title": "Some ground rules.", "title": "Some ground rules.",
"subtitle": "These rules are set by the admins of %s.", "subtitle": "These are set and enforced by the %s moderators.",
"prompt": "By continuing, youre subject to the terms of service and privacy policy for %s.", "prompt": "By continuing, youre subject to the terms of service and privacy policy for %s.",
"terms_of_service": "terms of service", "terms_of_service": "terms of service",
"privacy_policy": "privacy policy", "privacy_policy": "privacy policy",
@ -295,10 +313,10 @@
}, },
"confirm_email": { "confirm_email": {
"title": "One last thing.", "title": "One last thing.",
"subtitle": "We just sent an email to %s,\ntap the link to confirm your account.", "subtitle": "Tap the link we emailed to you to verify your account.",
"button": { "button": {
"open_email_app": "Open Email App", "open_email_app": "Open Email App",
"dont_receive_email": "I never got an email" "resend": "Resend"
}, },
"dont_receive_email": { "dont_receive_email": {
"title": "Check your email", "title": "Check your email",
@ -401,14 +419,24 @@
"segmented_control": { "segmented_control": {
"posts": "Posts", "posts": "Posts",
"replies": "Replies", "replies": "Replies",
"media": "Media" "posts_and_replies": "Posts and Replies",
"media": "Media",
"about": "About"
}, },
"relationship_action_alert": { "relationship_action_alert": {
"confirm_mute_user": {
"title": "Mute Account",
"message": "Confirm to mute %s"
},
"confirm_unmute_user": { "confirm_unmute_user": {
"title": "Unmute Account", "title": "Unmute Account",
"message": "Confirm to unmute %s" "message": "Confirm to unmute %s"
}, },
"confirm_unblock_usre": { "confirm_block_user": {
"title": "Block Account",
"message": "Confirm to block %s"
},
"confirm_unblock_user": {
"title": "Unblock Account", "title": "Unblock Account",
"message": "Confirm to unblock %s" "message": "Confirm to unblock %s"
} }
@ -461,12 +489,14 @@
"Everything": "Everything", "Everything": "Everything",
"Mentions": "Mentions" "Mentions": "Mentions"
}, },
"user_followed_you": "%s followed you", "notification_description": {
"user_favorited your post": "%s favorited your post", "followed_you": "followed you",
"user_reblogged_your_post": "%s reblogged your post", "favorited_your_post": "favorited your post",
"user_mentioned_you": "%s mentioned you", "reblogged_your_post": "reblogged your post",
"user_requested_to_follow_you": "%s requested to follow you", "mentioned_you": "mentioned you",
"user_your_poll_has_ended": "%s Your poll has ended", "request_to_follow_you": "request to follow you",
"poll_has_ended": "poll has ended"
},
"keyobard": { "keyobard": {
"show_everything": "Show Everything", "show_everything": "Show Everything",
"show_mentions": "Show Mentions" "show_mentions": "Show Mentions"
@ -485,6 +515,13 @@
"light": "Always Light", "light": "Always Light",
"dark": "Always Dark" "dark": "Always Dark"
}, },
"look_and_feel": {
"title": "Look and Feel",
"use_system": "Use System",
"really_dark": "Really Dark",
"sorta_dark": "Sorta Dark",
"light": "Light"
},
"notifications": { "notifications": {
"title": "Notifications", "title": "Notifications",
"favorites": "Favorites my post", "favorites": "Favorites my post",
@ -526,14 +563,17 @@
} }
}, },
"report": { "report": {
"title_report": "Report",
"title": "Report %s", "title": "Report %s",
"step1": "Step 1 of 2", "step1": "Step 1 of 2",
"step2": "Step 2 of 2", "step2": "Step 2 of 2",
"content1": "Are there any other posts youd like to add to the report?", "content1": "Are there any other posts youd like to add to the report?",
"content2": "Is there anything the moderators should know about this report?", "content2": "Is there anything the moderators should know about this report?",
"report_sent_title": "Thanks for reporting, well look into this.",
"send": "Send Report", "send": "Send Report",
"skip_to_send": "Send without comment", "skip_to_send": "Send without comment",
"text_placeholder": "Type or paste additional comments" "text_placeholder": "Type or paste additional comments",
"reported": "REPORTED"
}, },
"preview": { "preview": {
"keyboard": { "keyboard": {

View File

@ -45,8 +45,8 @@
"message": "Please enable the photo library access permission to save the photo." "message": "Please enable the photo library access permission to save the photo."
}, },
"delete_post": { "delete_post": {
"title": "Are you sure you want to delete this post?", "title": "Delete Post",
"delete": "Delete" "message": "Are you sure you want to delete this post?"
}, },
"clean_cache": { "clean_cache": {
"title": "Clean Cache", "title": "Clean Cache",
@ -82,6 +82,7 @@
"share_user": "Share %s", "share_user": "Share %s",
"share_post": "Share Post", "share_post": "Share Post",
"open_in_safari": "Open in Safari", "open_in_safari": "Open in Safari",
"open_in_browser": "Open in Browser",
"find_people": "Find people to follow", "find_people": "Find people to follow",
"manually_search": "Manually search instead", "manually_search": "Manually search instead",
"skip": "Skip", "skip": "Skip",
@ -139,7 +140,8 @@
"unreblog": "Undo reblog", "unreblog": "Undo reblog",
"favorite": "Favorite", "favorite": "Favorite",
"unfavorite": "Unfavorite", "unfavorite": "Unfavorite",
"menu": "Menu" "menu": "Menu",
"hide": "Hide"
}, },
"tag": { "tag": {
"url": "URL", "url": "URL",
@ -148,6 +150,12 @@
"hashtag": "Hashtag", "hashtag": "Hashtag",
"email": "Email", "email": "Email",
"emoji": "Emoji" "emoji": "Emoji"
},
"visibility": {
"unlisted": "Everyone can see this post but not display in the public timeline.",
"private": "Only their followers can see this post.",
"private_from_me": "Only my followers can see this post.",
"direct": "Only mentioned user can see this post."
} }
}, },
"friendship": { "friendship": {
@ -192,10 +200,14 @@
}, },
"scene": { "scene": {
"welcome": { "welcome": {
"slogan": "Social networking\nback in your hands." "slogan": "Social networking\nback in your hands.",
"get_started": "Get Started",
"log_in": "Log In"
}, },
"server_picker": { "server_picker": {
"title": "Pick a server,\nany server.", "title": "Mastodon is made of users in different communities.",
"subtitle": "Pick a community based on your interests, region, or a general purpose one.",
"subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": { "button": {
"category": { "category": {
"all": "All", "all": "All",
@ -222,7 +234,7 @@
"category": "CATEGORY" "category": "CATEGORY"
}, },
"input": { "input": {
"placeholder": "Find a server or join your own..." "placeholder": "Search communities"
}, },
"empty_state": { "empty_state": {
"finding_servers": "Finding available servers...", "finding_servers": "Finding available servers...",
@ -231,7 +243,7 @@
} }
}, },
"register": { "register": {
"title": "Tell us about you.", "title": "Lets get you set up on %s",
"input": { "input": {
"avatar": { "avatar": {
"delete": "Delete" "delete": "Delete"
@ -248,6 +260,12 @@
}, },
"password": { "password": {
"placeholder": "password", "placeholder": "password",
"require": "Your password needs at least:",
"character_limit": "8 characters",
"accessibility": {
"checked": "checked",
"unchecked": "unchecked"
},
"hint": "Your password needs at least eight characters" "hint": "Your password needs at least eight characters"
}, },
"invite": { "invite": {
@ -285,7 +303,7 @@
}, },
"server_rules": { "server_rules": {
"title": "Some ground rules.", "title": "Some ground rules.",
"subtitle": "These rules are set by the admins of %s.", "subtitle": "These are set and enforced by the %s moderators.",
"prompt": "By continuing, youre subject to the terms of service and privacy policy for %s.", "prompt": "By continuing, youre subject to the terms of service and privacy policy for %s.",
"terms_of_service": "terms of service", "terms_of_service": "terms of service",
"privacy_policy": "privacy policy", "privacy_policy": "privacy policy",
@ -295,10 +313,10 @@
}, },
"confirm_email": { "confirm_email": {
"title": "One last thing.", "title": "One last thing.",
"subtitle": "We just sent an email to %s,\ntap the link to confirm your account.", "subtitle": "Tap the link we emailed to you to verify your account.",
"button": { "button": {
"open_email_app": "Open Email App", "open_email_app": "Open Email App",
"dont_receive_email": "I never got an email" "resend": "Resend"
}, },
"dont_receive_email": { "dont_receive_email": {
"title": "Check your email", "title": "Check your email",
@ -401,14 +419,24 @@
"segmented_control": { "segmented_control": {
"posts": "Posts", "posts": "Posts",
"replies": "Replies", "replies": "Replies",
"media": "Media" "posts_and_replies": "Posts and Replies",
"media": "Media",
"about": "About"
}, },
"relationship_action_alert": { "relationship_action_alert": {
"confirm_mute_user": {
"title": "Mute Account",
"message": "Confirm to mute %s"
},
"confirm_unmute_user": { "confirm_unmute_user": {
"title": "Unmute Account", "title": "Unmute Account",
"message": "Confirm to unmute %s" "message": "Confirm to unmute %s"
}, },
"confirm_unblock_usre": { "confirm_block_user": {
"title": "Block Account",
"message": "Confirm to block %s"
},
"confirm_unblock_user": {
"title": "Unblock Account", "title": "Unblock Account",
"message": "Confirm to unblock %s" "message": "Confirm to unblock %s"
} }
@ -461,12 +489,14 @@
"Everything": "Everything", "Everything": "Everything",
"Mentions": "Mentions" "Mentions": "Mentions"
}, },
"user_followed_you": "%s followed you", "notification_description": {
"user_favorited your post": "%s favorited your post", "followed_you": "followed you",
"user_reblogged_your_post": "%s reblogged your post", "favorited_your_post": "favorited your post",
"user_mentioned_you": "%s mentioned you", "reblogged_your_post": "reblogged your post",
"user_requested_to_follow_you": "%s requested to follow you", "mentioned_you": "mentioned you",
"user_your_poll_has_ended": "%s Your poll has ended", "request_to_follow_you": "request to follow you",
"poll_has_ended": "poll has ended"
},
"keyobard": { "keyobard": {
"show_everything": "Show Everything", "show_everything": "Show Everything",
"show_mentions": "Show Mentions" "show_mentions": "Show Mentions"
@ -485,6 +515,13 @@
"light": "Always Light", "light": "Always Light",
"dark": "Always Dark" "dark": "Always Dark"
}, },
"look_and_feel": {
"title": "Look and Feel",
"use_system": "Use System",
"really_dark": "Really Dark",
"sorta_dark": "Sorta Dark",
"light": "Light"
},
"notifications": { "notifications": {
"title": "Notifications", "title": "Notifications",
"favorites": "Favorites my post", "favorites": "Favorites my post",
@ -526,14 +563,17 @@
} }
}, },
"report": { "report": {
"title_report": "Report",
"title": "Report %s", "title": "Report %s",
"step1": "Step 1 of 2", "step1": "Step 1 of 2",
"step2": "Step 2 of 2", "step2": "Step 2 of 2",
"content1": "Are there any other posts youd like to add to the report?", "content1": "Are there any other posts youd like to add to the report?",
"content2": "Is there anything the moderators should know about this report?", "content2": "Is there anything the moderators should know about this report?",
"report_sent_title": "Thanks for reporting, well look into this.",
"send": "Send Report", "send": "Send Report",
"skip_to_send": "Send without comment", "skip_to_send": "Send without comment",
"text_placeholder": "Type or paste additional comments" "text_placeholder": "Type or paste additional comments",
"reported": "REPORTED"
}, },
"preview": { "preview": {
"keyboard": { "keyboard": {

View File

@ -46,7 +46,7 @@
}, },
"delete_post": { "delete_post": {
"title": "Вы уверены, что хотите удалить этот пост?", "title": "Вы уверены, что хотите удалить этот пост?",
"delete": "Удалить" "message": "Are you sure you want to delete this post?"
}, },
"clean_cache": { "clean_cache": {
"title": "Очистка кэша", "title": "Очистка кэша",
@ -67,7 +67,7 @@
"done": "Готово", "done": "Готово",
"confirm": "Подтвердить", "confirm": "Подтвердить",
"continue": "Продолжить", "continue": "Продолжить",
"compose": "Compose", "compose": "Написать",
"cancel": "Отмена", "cancel": "Отмена",
"discard": "Отмена", "discard": "Отмена",
"try_again": "Попробовать снова", "try_again": "Попробовать снова",
@ -82,6 +82,7 @@
"share_user": "Поделиться %s", "share_user": "Поделиться %s",
"share_post": "Поделиться постом", "share_post": "Поделиться постом",
"open_in_safari": "Открыть в Safari", "open_in_safari": "Открыть в Safari",
"open_in_browser": "Открыть в браузере",
"find_people": "Подпишитесь на людей", "find_people": "Подпишитесь на людей",
"manually_search": "Найти вручную", "manually_search": "Найти вручную",
"skip": "Пропустить", "skip": "Пропустить",
@ -139,7 +140,8 @@
"unreblog": "Убрать продвижение", "unreblog": "Убрать продвижение",
"favorite": "Добавить в избранное", "favorite": "Добавить в избранное",
"unfavorite": "Убрать из избранного", "unfavorite": "Убрать из избранного",
"menu": "Меню" "menu": "Меню",
"hide": "Hide"
}, },
"tag": { "tag": {
"url": "Ссылка", "url": "Ссылка",
@ -148,6 +150,12 @@
"hashtag": "Хэштег", "hashtag": "Хэштег",
"email": "E-mail", "email": "E-mail",
"emoji": "Эмодзи" "emoji": "Эмодзи"
},
"visibility": {
"unlisted": "Everyone can see this post but not display in the public timeline.",
"private": "Only their followers can see this post.",
"private_from_me": "Only my followers can see this post.",
"direct": "Only mentioned user can see this post."
} }
}, },
"friendship": { "friendship": {
@ -192,10 +200,14 @@
}, },
"scene": { "scene": {
"welcome": { "welcome": {
"slogan": "Социальная сеть\nпод вашим контролем." "slogan": "Социальная сеть\nпод вашим контролем.",
"get_started": "Get Started",
"log_in": "Вход"
}, },
"server_picker": { "server_picker": {
"title": "Выберите сервер,\nлюбой сервер.", "title": "Выберите сервер,\nлюбой сервер.",
"subtitle": "Выберите сообщество на основе своих интересов, региона или общей тематики.",
"subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": { "button": {
"category": { "category": {
"all": "Все", "all": "Все",
@ -248,6 +260,12 @@
}, },
"password": { "password": {
"placeholder": "пароль", "placeholder": "пароль",
"require": "Your password needs at least:",
"character_limit": "8 characters",
"accessibility": {
"checked": "checked",
"unchecked": "unchecked"
},
"hint": "Пароль должен содержать не менее восьми символов" "hint": "Пароль должен содержать не менее восьми символов"
}, },
"invite": { "invite": {
@ -298,7 +316,7 @@
"subtitle": "Мы только что отправили письмо на\n%s.\nНажмите на ссылку в нём, чтобы\nподтвердить свою учётную запись.", "subtitle": "Мы только что отправили письмо на\n%s.\nНажмите на ссылку в нём, чтобы\nподтвердить свою учётную запись.",
"button": { "button": {
"open_email_app": "Открыть приложение почты", "open_email_app": "Открыть приложение почты",
"dont_receive_email": "Я не получил письма" "resend": "Resend"
}, },
"dont_receive_email": { "dont_receive_email": {
"title": "Проверьте свой e-mail адрес", "title": "Проверьте свой e-mail адрес",
@ -401,16 +419,26 @@
"segmented_control": { "segmented_control": {
"posts": "Посты", "posts": "Посты",
"replies": "Ответы", "replies": "Ответы",
"media": "Медиа" "posts_and_replies": "Posts and Replies",
"media": "Медиа",
"about": "About"
}, },
"relationship_action_alert": { "relationship_action_alert": {
"confirm_mute_user": {
"title": "Mute Account",
"message": "Confirm to mute %s"
},
"confirm_unmute_user": { "confirm_unmute_user": {
"title": "Убрать из игнорируемых", "title": "Убрать из игнорируемых",
"message": "Убрать %s из игнорируемых?" "message": "Убрать %s из игнорируемых?"
}, },
"confirm_unblock_usre": { "confirm_block_user": {
"title": "Разблокировать", "title": "Block Account",
"message": "Убрать %s из списка блокировки?" "message": "Confirm to block %s"
},
"confirm_unblock_user": {
"title": "Unblock Account",
"message": "Confirm to unblock %s"
} }
} }
}, },
@ -461,12 +489,14 @@
"Everything": "Все", "Everything": "Все",
"Mentions": "Упоминания" "Mentions": "Упоминания"
}, },
"user_followed_you": "%s подписался (-ась)", "notification_description": {
"user_favorited your post": "%s favorited your post", "followed_you": "followed you",
"user_reblogged_your_post": "%s reblogged your post", "favorited_your_post": "favorited your post",
"user_mentioned_you": "%s упомянул вас", "reblogged_your_post": "reblogged your post",
"user_requested_to_follow_you": "%s запрашивает подписку", "mentioned_you": "mentioned you",
"user_your_poll_has_ended": "%s Your poll has ended", "request_to_follow_you": "request to follow you",
"poll_has_ended": "poll has ended"
},
"keyobard": { "keyobard": {
"show_everything": "Показать все", "show_everything": "Показать все",
"show_mentions": "Показать упоминания" "show_mentions": "Показать упоминания"
@ -485,6 +515,13 @@
"light": "Светлая тема", "light": "Светлая тема",
"dark": "Тёмная тема" "dark": "Тёмная тема"
}, },
"look_and_feel": {
"title": "Look and Feel",
"use_system": "Use System",
"really_dark": "Really Dark",
"sorta_dark": "Sorta Dark",
"light": "Light"
},
"notifications": { "notifications": {
"title": "Уведомления", "title": "Уведомления",
"favorites": "Добавляет мой пост в избранное", "favorites": "Добавляет мой пост в избранное",
@ -526,14 +563,17 @@
} }
}, },
"report": { "report": {
"title_report": "Report",
"title": "Пожаловаться на %s", "title": "Пожаловаться на %s",
"step1": "Шаг 1 из 2", "step1": "Шаг 1 из 2",
"step2": "Шаг 2 из 2", "step2": "Шаг 2 из 2",
"content1": "Есть ли другие сообщения, которые вы хотите добавить в отчёт?", "content1": "Есть ли другие сообщения, которые вы хотите добавить в отчёт?",
"content2": "Есть ли что-то, что модераторы должны знать об этом сообщении?", "content2": "Есть ли что-то, что модераторы должны знать об этом сообщении?",
"report_sent_title": "Thanks for reporting, well look into this.",
"send": "Пожаловаться", "send": "Пожаловаться",
"skip_to_send": "Отправить без комментария", "skip_to_send": "Отправить без комментария",
"text_placeholder": "Дополнительные комментарии" "text_placeholder": "Дополнительные комментарии",
"reported": "REPORTED"
}, },
"preview": { "preview": {
"keyboard": { "keyboard": {

View File

@ -13,15 +13,15 @@
<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 lukematon ilmoitus</string>
<key>other</key> <key>other</key>
<string>%ld unread notification</string> <string>%ld lukematonta ilmoitusta</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>Syöterajoitus ylittyy %#@character_count@</string>
<key>character_count</key> <key>character_count</key>
<dict> <dict>
<key>NSStringFormatSpecTypeKey</key> <key>NSStringFormatSpecTypeKey</key>
@ -29,15 +29,15 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>ld</string> <string>ld</string>
<key>one</key> <key>one</key>
<string>1 character</string> <string>1 merkki</string>
<key>other</key> <key>other</key>
<string>%ld characters</string> <string>%ld merkkiä</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>Syöterajoitus ylittyy %#@character_count@ päästä</string>
<key>character_count</key> <key>character_count</key>
<dict> <dict>
<key>NSStringFormatSpecTypeKey</key> <key>NSStringFormatSpecTypeKey</key>
@ -45,9 +45,9 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>ld</string> <string>ld</string>
<key>one</key> <key>one</key>
<string>1 character</string> <string>1 merkki</string>
<key>other</key> <key>other</key>
<string>%ld characters</string> <string>%ld merkkiä</string>
</dict> </dict>
</dict> </dict>
<key>plural.count.metric_formatted.post</key> <key>plural.count.metric_formatted.post</key>
@ -61,9 +61,9 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>ld</string> <string>ld</string>
<key>one</key> <key>one</key>
<string>post</string> <string>julkaisu</string>
<key>other</key> <key>other</key>
<string>posts</string> <string>julkaisut</string>
</dict> </dict>
</dict> </dict>
<key>plural.count.post</key> <key>plural.count.post</key>
@ -77,9 +77,9 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>ld</string> <string>ld</string>
<key>one</key> <key>one</key>
<string>1 post</string> <string>1 julkaisu</string>
<key>other</key> <key>other</key>
<string>%ld posts</string> <string>%ld julkaisua</string>
</dict> </dict>
</dict> </dict>
<key>plural.count.favorite</key> <key>plural.count.favorite</key>
@ -93,9 +93,9 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>ld</string> <string>ld</string>
<key>one</key> <key>one</key>
<string>1 favorite</string> <string>1 suosikki</string>
<key>other</key> <key>other</key>
<string>%ld favorites</string> <string>%ld suosikkia</string>
</dict> </dict>
</dict> </dict>
<key>plural.count.reblog</key> <key>plural.count.reblog</key>
@ -109,9 +109,9 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>ld</string> <string>ld</string>
<key>one</key> <key>one</key>
<string>1 reblog</string> <string>1 edelleen jako</string>
<key>other</key> <key>other</key>
<string>%ld reblogs</string> <string>%ld edelleen jakoa</string>
</dict> </dict>
</dict> </dict>
<key>plural.count.vote</key> <key>plural.count.vote</key>
@ -125,9 +125,9 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>ld</string> <string>ld</string>
<key>one</key> <key>one</key>
<string>1 vote</string> <string>1 ääni</string>
<key>other</key> <key>other</key>
<string>%ld votes</string> <string>%ld ääntä</string>
</dict> </dict>
</dict> </dict>
<key>plural.count.voter</key> <key>plural.count.voter</key>
@ -141,9 +141,9 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>ld</string> <string>ld</string>
<key>one</key> <key>one</key>
<string>1 voter</string> <string>1 vastaaja</string>
<key>other</key> <key>other</key>
<string>%ld voters</string> <string>%ld vastaajaa</string>
</dict> </dict>
</dict> </dict>
<key>plural.people_talking</key> <key>plural.people_talking</key>
@ -157,9 +157,9 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>ld</string> <string>ld</string>
<key>one</key> <key>one</key>
<string>1 people talking</string> <string>1 ihminen puhuu</string>
<key>other</key> <key>other</key>
<string>%ld people talking</string> <string>%ld ihmistä puhuu</string>
</dict> </dict>
</dict> </dict>
<key>plural.count.following</key> <key>plural.count.following</key>
@ -173,9 +173,9 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>ld</string> <string>ld</string>
<key>one</key> <key>one</key>
<string>1 following</string> <string>1 seurataan</string>
<key>other</key> <key>other</key>
<string>%ld following</string> <string>%ld seurataan</string>
</dict> </dict>
</dict> </dict>
<key>plural.count.follower</key> <key>plural.count.follower</key>
@ -189,9 +189,9 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>ld</string> <string>ld</string>
<key>one</key> <key>one</key>
<string>1 följare</string> <string>1 seuraaja</string>
<key>other</key> <key>other</key>
<string>%ld följare</string> <string>%ld seuraajaa</string>
</dict> </dict>
</dict> </dict>
<key>date.year.left</key> <key>date.year.left</key>
@ -205,9 +205,9 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>ld</string> <string>ld</string>
<key>one</key> <key>one</key>
<string>1 year left</string> <string>1 vuosi jäljellä</string>
<key>other</key> <key>other</key>
<string>%ld years left</string> <string>%ld vuotta jäljellä</string>
</dict> </dict>
</dict> </dict>
<key>date.month.left</key> <key>date.month.left</key>
@ -221,9 +221,9 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>ld</string> <string>ld</string>
<key>one</key> <key>one</key>
<string>1 months left</string> <string>1 kuukausi jäljellä</string>
<key>other</key> <key>other</key>
<string>%ld months left</string> <string>%ld kuukautta jäljellä</string>
</dict> </dict>
</dict> </dict>
<key>date.day.left</key> <key>date.day.left</key>
@ -237,9 +237,9 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>ld</string> <string>ld</string>
<key>one</key> <key>one</key>
<string>1 day left</string> <string>1 päivä jäljellä</string>
<key>other</key> <key>other</key>
<string>%ld days left</string> <string>%ld päivää jäljellä</string>
</dict> </dict>
</dict> </dict>
<key>date.hour.left</key> <key>date.hour.left</key>
@ -253,9 +253,9 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>ld</string> <string>ld</string>
<key>one</key> <key>one</key>
<string>1 hour left</string> <string>1 tunti jäljellä</string>
<key>other</key> <key>other</key>
<string>%ld hours left</string> <string>%ld tuntia jäljellä</string>
</dict> </dict>
</dict> </dict>
<key>date.minute.left</key> <key>date.minute.left</key>
@ -269,9 +269,9 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>ld</string> <string>ld</string>
<key>one</key> <key>one</key>
<string>1 minute left</string> <string>1 minuutti jäljellä</string>
<key>other</key> <key>other</key>
<string>%ld minutes left</string> <string>%ld minuuttia jäljellä</string>
</dict> </dict>
</dict> </dict>
<key>date.second.left</key> <key>date.second.left</key>
@ -285,9 +285,9 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>ld</string> <string>ld</string>
<key>one</key> <key>one</key>
<string>1 second left</string> <string>1 sekuntti</string>
<key>other</key> <key>other</key>
<string>%ld seconds left</string> <string>%ld sekunttia jäljellä</string>
</dict> </dict>
</dict> </dict>
<key>date.year.ago.abbr</key> <key>date.year.ago.abbr</key>
@ -301,9 +301,9 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>ld</string> <string>ld</string>
<key>one</key> <key>one</key>
<string>1y ago</string> <string>1v sitten</string>
<key>other</key> <key>other</key>
<string>%ldy ago</string> <string>%ldv sitten</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>1M ago</string> <string>1kk sitten</string>
<key>other</key> <key>other</key>
<string>%ldM ago</string> <string>%ldkk sitten</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>1d ago</string> <string>1pv sitten</string>
<key>other</key> <key>other</key>
<string>%ldd ago</string> <string>%ldpv sitten</string>
</dict> </dict>
</dict> </dict>
<key>date.hour.ago.abbr</key> <key>date.hour.ago.abbr</key>
@ -349,9 +349,9 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>ld</string> <string>ld</string>
<key>one</key> <key>one</key>
<string>1h ago</string> <string>1t sitten</string>
<key>other</key> <key>other</key>
<string>%ldh ago</string> <string>%ldt sitten</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>1m ago</string> <string>1min sitten</string>
<key>other</key> <key>other</key>
<string>%ldm ago</string> <string>%ldmin sitten</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>1s ago</string> <string>1s sitten</string>
<key>other</key> <key>other</key>
<string>%lds ago</string> <string>%lds sitten</string>
</dict> </dict>
</dict> </dict>
</dict> </dict>

View File

@ -2,555 +2,595 @@
"common": { "common": {
"alerts": { "alerts": {
"common": { "common": {
"please_try_again": "Var god försök igen.", "please_try_again": "Yritä uudelleen.",
"please_try_again_later": "Var god försök igen senare." "please_try_again_later": "Yritä uudelleen myöhemmin."
}, },
"sign_up_failure": { "sign_up_failure": {
"title": "Sign Up Failure" "title": "Rekisteröinti epäonnistui"
}, },
"server_error": { "server_error": {
"title": "Serverfel" "title": "Palvelinvirhe"
}, },
"vote_failure": { "vote_failure": {
"title": "Vote Failure", "title": "Vote Failure",
"poll_ended": "Omröstningen har avslutats" "poll_ended": "Kysely on päättynyt"
}, },
"discard_post_content": { "discard_post_content": {
"title": "Discard Draft", "title": "Hylkää luonnos",
"message": "Confirm to discard composed post content." "message": "Confirm to discard composed post content."
}, },
"publish_post_failure": { "publish_post_failure": {
"title": "Publish Failure", "title": "Julkaiseminen epäonnistui",
"message": "Failed to publish the post.\nPlease check your internet connection.", "message": "Julkaisun julkaiseminen epäonnistui.\nTarkista internet-yhteytesi.",
"attachments_message": { "attachments_message": {
"video_attach_with_photo": "Cannot attach a video to a post that already contains images.", "video_attach_with_photo": "Cannot attach a video to a post that already contains images.",
"more_than_one_video": "Cannot attach more than one video." "more_than_one_video": "Ei voi liittä yhtä videota enempää."
} }
}, },
"edit_profile_failure": { "edit_profile_failure": {
"title": "Edit Profile Error", "title": "Virhe profiilin muokkauksessa",
"message": "Cannot edit profile. Please try again." "message": "Profiilia ei voida muoka. Yritä uudelleen."
}, },
"sign_out": { "sign_out": {
"title": "Sign Out", "title": "Kirjaudu ulos",
"message": "Är du säker på att du vill logga ut?", "message": "Haluatko varmasti kirjautua ulos?",
"confirm": "Sign Out" "confirm": "Kirjaudu ulos"
}, },
"block_domain": { "block_domain": {
"title": "Are you really, really sure you want to block the entire %s? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain and any of your followers from that domain will be removed.", "title": "Are you really, really sure you want to block the entire %s? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain and any of your followers from that domain will be removed.",
"block_entire_domain": "Block Domain" "block_entire_domain": "Estä verkkotunnus"
}, },
"save_photo_failure": { "save_photo_failure": {
"title": "Save Photo Failure", "title": "Kuvan tallentaminen epäonnistui",
"message": "Please enable the photo library access permission to save the photo." "message": "Please enable the photo library access permission to save the photo."
}, },
"delete_post": { "delete_post": {
"title": "Are you sure you want to delete this post?", "title": "Haluatko varmasti poistaa tämän julkaisun?",
"delete": "Radera" "message": "Are you sure you want to delete this post?"
}, },
"clean_cache": { "clean_cache": {
"title": "Clean Cache", "title": "Puhdista välimuisti",
"message": "Successfully cleaned %s cache." "message": "%s välimuisti tyhjennetty onnistuneesti."
} }
}, },
"controls": { "controls": {
"actions": { "actions": {
"back": "Back", "back": "Takaisin",
"next": "Next", "next": "Seuraava",
"previous": "Previous", "previous": "Edellinen",
"open": "Open", "open": "Avaa",
"add": "Add", "add": "Lisää",
"remove": "Remove", "remove": "Poista",
"edit": "Redigera", "edit": "Muokkaa",
"save": "Spara", "save": "Tallenna",
"ok": "OK", "ok": "OK",
"done": "Done", "done": "Valmis",
"confirm": "Confirm", "confirm": "Vahvista",
"continue": "Fortsätt", "continue": "Jatka",
"compose": "Compose", "compose": "Koosta",
"cancel": "Avbryt", "cancel": "Kumoa",
"discard": "Discard", "discard": "Hylkää",
"try_again": "Försök igen", "try_again": "Yritä uudelleen",
"take_photo": "Take Photo", "take_photo": "Ota kuva",
"save_photo": "Save Photo", "save_photo": "Tallenna kuva",
"copy_photo": "Copy Photo", "copy_photo": "Kopioi kuva",
"sign_in": "Sign In", "sign_in": "Kirjaudu sisään",
"sign_up": "Sign Up", "sign_up": "Rekisteröidy",
"see_more": "See More", "see_more": "Näytä lisää",
"preview": "Preview", "preview": "Esikatselu",
"share": "Dela", "share": "Jaa",
"share_user": "Dela %s", "share_user": "Jaa %s",
"share_post": "Share Post", "share_post": "Jaa julkaisu",
"open_in_safari": "Öppna i Safari", "open_in_safari": "Avaa Safarissa",
"find_people": "Find people to follow", "open_in_browser": "Open in Browser",
"find_people": "Löydä tilejä seurattavaksi",
"manually_search": "Manually search instead", "manually_search": "Manually search instead",
"skip": "Skip", "skip": "Ohita",
"reply": "Reply", "reply": "Vastaa",
"report_user": "Rapportera %s", "report_user": "Ilmianna %s",
"block_domain": "Block %s", "block_domain": "Estä %s",
"unblock_domain": "Unblock %s", "unblock_domain": "Poista esto %s",
"settings": "Inställningar", "settings": "Asetukset",
"delete": "Radera" "delete": "Poista"
}, },
"tabs": { "tabs": {
"home": "Home", "home": "Koti",
"search": "Search", "search": "Haku",
"notification": "Notification", "notification": "Ilmoitus",
"profile": "Profil" "profile": "Profiili"
}, },
"keyboard": { "keyboard": {
"common": { "common": {
"switch_to_tab": "Switch to %s", "switch_to_tab": "Vaihda %s",
"compose_new_post": "Compose New Post", "compose_new_post": "Koosta uusi julkaisu",
"show_favorites": "Show Favorites", "show_favorites": "Näytä suosikit",
"open_settings": "Open Settings" "open_settings": "Avaa asetukset"
}, },
"timeline": { "timeline": {
"previous_status": "Previous Post", "previous_status": "Edellinen julkaisu",
"next_status": "Next Post", "next_status": "Seuraava julkaisu",
"open_status": "Open Post", "open_status": "Avaa julkaisu",
"open_author_profile": "Open Author's Profile", "open_author_profile": "Avaa tekijän profiili",
"open_reblogger_profile": "Open Reblogger's Profile", "open_reblogger_profile": "Avaa edelleen jakajan profiili",
"reply_status": "Reply to Post", "reply_status": "Vastaa julkaisuun",
"toggle_reblog": "Toggle Reblog on Post", "toggle_reblog": "Toggle Reblog on Post",
"toggle_favorite": "Toggle Favorite on Post", "toggle_favorite": "Toggle Favorite on Post",
"toggle_content_warning": "Toggle Content Warning", "toggle_content_warning": "Vaihda sisältövaroitus",
"preview_image": "Preview Image" "preview_image": "Preview Image"
}, },
"segmented_control": { "segmented_control": {
"previous_section": "Previous Section", "previous_section": "Previous Section",
"next_section": "Next Section" "next_section": "Seuraava lohko"
} }
}, },
"status": { "status": {
"user_reblogged": "%s reblogged", "user_reblogged": "%s jakoi edelleen",
"user_replied_to": "Replied to %s", "user_replied_to": "Vastasi %s:lle",
"show_post": "Show Post", "show_post": "Näytä julkaisu",
"show_user_profile": "Show user profile", "show_user_profile": "Näytä tili",
"content_warning": "Content Warning", "content_warning": "Sisältövaroitus",
"media_content_warning": "Tap anywhere to reveal", "media_content_warning": "Napauta mistä tahansa paljastaaksesi",
"poll": { "poll": {
"vote": "Vote", "vote": "Vote",
"closed": "Closed" "closed": "Suljettu"
}, },
"actions": { "actions": {
"reply": "Reply", "reply": "Vastaa",
"reblog": "Reblog", "reblog": "Jaa edelleen",
"unreblog": "Undo reblog", "unreblog": "Peru edelleen jako",
"favorite": "Favorite", "favorite": "Favorite",
"unfavorite": "Unfavorite", "unfavorite": "Unfavorite",
"menu": "Meny" "menu": "Valikko",
"hide": "Dölj"
}, },
"tag": { "tag": {
"url": "URL", "url": "URL",
"mention": "Mention", "mention": "Mention",
"link": "Link", "link": "Linkki",
"hashtag": "Hashtag", "hashtag": "Hashtagi",
"email": "Email", "email": "Sähköposti",
"emoji": "Emoji" "emoji": "Emoji"
},
"visibility": {
"unlisted": "Everyone can see this post but not display in the public timeline.",
"private": "Only their followers can see this post.",
"private_from_me": "Only my followers can see this post.",
"direct": "Only mentioned user can see this post."
} }
}, },
"friendship": { "friendship": {
"follow": "Följ", "follow": "Seuraa",
"following": "Följer", "following": "Seurataan",
"request": "Request", "request": "Pyydä",
"pending": "Pending", "pending": "Pyydetty",
"block": "Block", "block": "Estä",
"block_user": "Block %s", "block_user": "Estä %s",
"block_domain": "Block %s", "block_domain": "Estä %s",
"unblock": "Unblock", "unblock": "Poista esto",
"unblock_user": "Unblock %s", "unblock_user": "Unblock %s",
"blocked": "Blocked", "blocked": "Estetty",
"mute": "Mute", "mute": "Mykistä",
"mute_user": "Mute %s", "mute_user": "Mykistä %s",
"unmute": "Unmute", "unmute": "Poista mykistys",
"unmute_user": "Unmute %s", "unmute_user": "Poista mykistys tililtä %s",
"muted": "Muted", "muted": "Mykistetty",
"edit_info": "Edit Info" "edit_info": "Muokkaa profiilia"
}, },
"timeline": { "timeline": {
"filtered": "Filtered", "filtered": "Suodatettu",
"timestamp": { "timestamp": {
"now": "Now" "now": "Nyt"
}, },
"loader": { "loader": {
"load_missing_posts": "Load missing posts", "load_missing_posts": "Lataa puuttuvat julkaisut",
"loading_missing_posts": "Loading missing posts...", "loading_missing_posts": "Ladataan puuttuvia julkaisuja...",
"show_more_replies": "Visa fler svar" "show_more_replies": "Näytä lisää vastauksia"
}, },
"header": { "header": {
"no_status_found": "No Post Found", "no_status_found": "Julkaisua ei löytynyt",
"blocking_warning": "You cant view this user's profile\nuntil you unblock them.\nYour profile looks like this to them.", "blocking_warning": "Et voi tarkastella tämän tilin profiilia\nennen kuin poistat sen esto.\nProfiilisi näyttää tältä hänelle.",
"user_blocking_warning": "You cant view %ss profile\nuntil you unblock them.\nYour profile looks like this to them.", "user_blocking_warning": "Et voi tarkastella tilin %s profiilia\nennen kuin poistat sen esto.\nProfiilisi näyttää tältä hänelle.",
"blocked_warning": "You cant view this users profile\nuntil they unblock you.", "blocked_warning": "Et voi tarkastella tämän tilin profiilia\nennen kuin hän poistaa eston.",
"user_blocked_warning": "You cant view %ss profile\nuntil they unblock you.", "user_blocked_warning": "Et voi tarkastella tilin %s profiilia\nennen kuin hän poistaa eston.",
"suspended_warning": "This user has been suspended.", "suspended_warning": "Tämä tili on lakkautettu.",
"user_suspended_warning": "%ss account has been suspended." "user_suspended_warning": "Tili %s on lakkautettu."
} }
} }
} }
}, },
"scene": { "scene": {
"welcome": { "welcome": {
"slogan": "Social networking\nback in your hands." "slogan": "Sosiaalinen verkostoituminen\ntakaisin käsissäsi.",
"get_started": "Kom igång",
"log_in": "Logga in"
}, },
"server_picker": { "server_picker": {
"title": "Pick a server,\nany server.", "title": "Valitse palvelin,\nmikä tahansa palvelin.",
"subtitle": "Pick a community based on your interests, region, or a general purpose one.",
"subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": { "button": {
"category": { "category": {
"all": "All", "all": "Kaikki",
"all_accessiblity_description": "Kategori: Alla", "all_accessiblity_description": "Kategoria: Kaikki",
"academia": "academia", "academia": "akateeminen",
"activism": "activism", "activism": "aktivismi",
"food": "food", "food": "ruoka",
"furry": "furry", "furry": "turri",
"games": "games", "games": "pelit",
"general": "general", "general": "yleinen",
"journalism": "journalism", "journalism": "journalismi",
"lgbt": "lgbt", "lgbt": "hlbt",
"regional": "regional", "regional": "alueellinen",
"art": "art", "art": "taide",
"music": "music", "music": "musiikki",
"tech": "tech" "tech": "tekniikka"
}, },
"see_less": "See Less", "see_less": "Näytä vähemmän",
"see_more": "See More" "see_more": "Näytä lisää"
}, },
"label": { "label": {
"language": "SPRÅK", "language": "KIELI",
"users": "ANVÄNDARE", "users": "TILIÄ",
"category": "KATEGORI" "category": "KATEGORIA"
}, },
"input": { "input": {
"placeholder": "Find a server or join your own..." "placeholder": "Etsi palvelin tai liity omaan..."
}, },
"empty_state": { "empty_state": {
"finding_servers": "Finding available servers...", "finding_servers": "Etsistään saatavilla olevia palvelimia...",
"bad_network": "Something went wrong while loading the data. Check your internet connection.", "bad_network": "Jokin meni pieleen dataa ladatessa. Tarkista internet-yhteytesi.",
"no_results": "Inga resultat" "no_results": "Ei hakutuloksia"
} }
}, },
"register": { "register": {
"title": "Tell us about you.", "title": "Kerro meille sinusta.",
"input": { "input": {
"avatar": { "avatar": {
"delete": "Radera" "delete": "Poista"
}, },
"username": { "username": {
"placeholder": "username", "placeholder": "käyttäjänimi",
"duplicate_prompt": "This username is taken." "duplicate_prompt": "Tämä käyttäjänimi on varattu."
}, },
"display_name": { "display_name": {
"placeholder": "display name" "placeholder": "näyttönimi"
}, },
"email": { "email": {
"placeholder": "email" "placeholder": "sähköposti"
}, },
"password": { "password": {
"placeholder": "password", "placeholder": "salasana",
"hint": "Your password needs at least eight characters" "require": "Your password needs at least:",
"character_limit": "8 characters",
"accessibility": {
"checked": "checked",
"unchecked": "unchecked"
},
"hint": "Salasanassasi on oltava vähintään kahdeksan merkkiä"
}, },
"invite": { "invite": {
"registration_user_invite_request": "Why do you want to join?" "registration_user_invite_request": "Miksi haluat liittyä?"
} }
}, },
"error": { "error": {
"item": { "item": {
"username": "Användarnamn", "username": "Käyttäjänimi",
"email": "Email", "email": "Sähköposti",
"password": "Password", "password": "Salasana",
"agreement": "Agreement", "agreement": "Hyväksy",
"locale": "Locale", "locale": "Locale",
"reason": "Reason" "reason": "Syy"
}, },
"reason": { "reason": {
"blocked": "%s contains a disallowed email provider", "blocked": "%s sisältää estetyn sähköpostipalveluntarjoajan",
"unreachable": "%s does not seem to exist", "unreachable": "%s ei näytä olevan olemassa",
"taken": "%s is already in use", "taken": "%s on jo käytössä",
"reserved": "%s is a reserved keyword", "reserved": "%s is a reserved keyword",
"accepted": "%s must be accepted", "accepted": "%s täytyy hyväksyä",
"blank": "%s is required", "blank": "%s vaaditaan",
"invalid": "%s is invalid", "invalid": "%s on virheellinen",
"too_long": "%s is too long", "too_long": "%s on liian pitkä",
"too_short": "%s is too short", "too_short": "%s on liian lyhyt",
"inclusion": "%s is not a supported value" "inclusion": "%s ei ole tuettu arvo"
}, },
"special": { "special": {
"username_invalid": "Username must only contain alphanumeric characters and underscores", "username_invalid": "Käyttäjänimi voi sisältää ainoastaan aakkosnumerrisia merkkejä ja alaviivoja",
"username_too_long": "Username is too long (cant be longer than 30 characters)", "username_too_long": "Käyttäjänimi on liian pitkä (ei voi olla pidempi kuin 30 merkkiä)",
"email_invalid": "This is not a valid email address", "email_invalid": "Tämä ei ole kelvollinen sähköpostiosoite",
"password_too_short": "Password is too short (must be at least 8 characters)" "password_too_short": "Salasana on liian lyhyt (täytyy olla vähintään 8 merkkiä)"
} }
} }
}, },
"server_rules": { "server_rules": {
"title": "Some ground rules.", "title": "Joitakin perussääntöjä.",
"subtitle": "These rules are set by the admins of %s.", "subtitle": "Nämä säännöt ovat %s -palvelun asettamia.",
"prompt": "By continuing, youre subject to the terms of service and privacy policy for %s.", "prompt": "Jatkamalla, hyväksyt palvelun %s palveluehdot ja tietosuojakäytönnön.",
"terms_of_service": "terms of service", "terms_of_service": "käyttöehdot",
"privacy_policy": "integritetspolicy", "privacy_policy": "tietosuojakäytäntö",
"button": { "button": {
"confirm": "I Agree" "confirm": "Hyväksyn"
} }
}, },
"confirm_email": { "confirm_email": {
"title": "One last thing.", "title": "Viimeinen asia.",
"subtitle": "We just sent an email to %s,\ntap the link to confirm your account.", "subtitle": "Lähetimme juuri sähköpostin osoitteeseen %s, napauta siinä olevaa linkkiä vahvistaaksesi tilisi.",
"button": { "button": {
"open_email_app": "Open Email App", "open_email_app": "Avaa sähköpostisovellus",
"dont_receive_email": "I never got an email" "resend": "Resend"
}, },
"dont_receive_email": { "dont_receive_email": {
"title": "Check your email", "title": "Tarkista sähköpostisi",
"description": "Check if your email address is correct as well as your junk folder if you havent.", "description": "Tarkista, että sähköpostiosoitteesi on oikea, sekä roskapostikansiosi, jos et vielä ole.",
"resend_email": "Resend Email" "resend_email": "Lähetä sähköposti uudelleen"
}, },
"open_email_app": { "open_email_app": {
"title": "Check your inbox.", "title": "Tarkasta postilaatikkosi.",
"description": "We just sent you an email. Check your junk folder if you havent.", "description": "Lähetimme sinulle juuri sähköpostin. Tarkista myös roskapostikansiosi, jos et vielä ole.",
"mail": "Mail", "mail": "Sähköposti",
"open_email_client": "Open Email Client" "open_email_client": "Avaa sähköpostisovellus"
} }
}, },
"home_timeline": { "home_timeline": {
"title": "Home", "title": "Koti",
"navigation_bar_state": { "navigation_bar_state": {
"offline": "Offline", "offline": "Yhteydetön",
"new_posts": "See new posts", "new_posts": "Uusia julkaisuja",
"published": "Published!", "published": "Julkaistu!",
"Publishing": "Publishing post..." "Publishing": "Julkaistaan julkaisua..."
} }
}, },
"suggestion_account": { "suggestion_account": {
"title": "Find People to Follow", "title": "Löydä tilejä seurattavaksi",
"follow_explain": "When you follow someone, youll see their posts in your home feed." "follow_explain": "Kun seuraat jotakuta, näet hänen julkaisunsa kotisyötteessäsi."
}, },
"compose": { "compose": {
"title": { "title": {
"new_post": "New Post", "new_post": "Uusi julkaisu",
"new_reply": "New Reply" "new_reply": "Uusi vastaus"
}, },
"media_selection": { "media_selection": {
"camera": "Take Photo", "camera": "Ota kuva",
"photo_library": "Photo Library", "photo_library": "Kuvakirjasto",
"browse": "Bläddra" "browse": "Selaa"
}, },
"content_input_placeholder": "Type or paste whats on your mind", "content_input_placeholder": "Kirjoita tai liitä, siitä mitä ajattelet",
"compose_action": "Publicera", "compose_action": "Julkaise",
"replying_to_user": "replying to %s", "replying_to_user": "vastaamassa tilille %s",
"attachment": { "attachment": {
"photo": "photo", "photo": "kuva",
"video": "video", "video": "video",
"attachment_broken": "This %s is broken and cant be\nuploaded to Mastodon.", "attachment_broken": "This %s is broken and cant be\nuploaded to Mastodon.",
"description_photo": "Describe the photo for the visually-impaired...", "description_photo": "Kuvaile kuva näkövammaisille...",
"description_video": "Describe the video for the visually-impaired..." "description_video": "Kuvaile video näkövammaisille..."
}, },
"poll": { "poll": {
"duration_time": "Varaktighet: %s", "duration_time": "Kesto: %s",
"thirty_minutes": "30 minuter", "thirty_minutes": "30 minuuttia",
"one_hour": "1 Hour", "one_hour": "1 tunti",
"six_hours": "6 Hours", "six_hours": "6 tuntia",
"one_day": "1 Day", "one_day": "1 päivä",
"three_days": "3 Days", "three_days": "3 päivää",
"seven_days": "7 Days", "seven_days": "7 päivää",
"option_number": "Option %ld" "option_number": "Vaihtoehto %ld"
}, },
"content_warning": { "content_warning": {
"placeholder": "Write an accurate warning here..." "placeholder": "Kirjoita tarkka varoitus tähän..."
}, },
"visibility": { "visibility": {
"public": "Public", "public": "Julkinen",
"unlisted": "Unlisted", "unlisted": "Listaamaton",
"private": "Followers only", "private": "Vain seuraajat",
"direct": "Only people I mention" "direct": "Vain mainitsemani tilit"
}, },
"auto_complete": { "auto_complete": {
"space_to_add": "Space to add" "space_to_add": "Space to add"
}, },
"accessibility": { "accessibility": {
"append_attachment": "Add Attachment", "append_attachment": "Lisää liite",
"append_poll": "Add Poll", "append_poll": "Lisää kysely",
"remove_poll": "Remove Poll", "remove_poll": "Poista kysely",
"custom_emoji_picker": "Custom Emoji Picker", "custom_emoji_picker": "Mukautettu emojivalitsin",
"enable_content_warning": "Enable Content Warning", "enable_content_warning": "Ota sisältövaroitus käyttöön",
"disable_content_warning": "Disable Content Warning", "disable_content_warning": "Poista sisältövaroitus käytöstä",
"post_visibility_menu": "Post Visibility Menu" "post_visibility_menu": "Julkaisun näkyvyysvalikko"
}, },
"keyboard": { "keyboard": {
"discard_post": "Discard Post", "discard_post": "Hylkää julkaisu",
"publish_post": "Publish Post", "publish_post": "Julkaise julkaisu",
"toggle_poll": "Toggle Poll", "toggle_poll": "Vaihda kysely",
"toggle_content_warning": "Toggle Content Warning", "toggle_content_warning": "Vaihda sisältövaroitus",
"append_attachment_entry": "Add Attachment - %s", "append_attachment_entry": "Lisää liite - %s",
"select_visibility_entry": "Select Visibility - %s" "select_visibility_entry": "Valitse näkyvyys - %s"
} }
}, },
"profile": { "profile": {
"dashboard": { "dashboard": {
"posts": "posts", "posts": "julkaisut",
"following": "following", "following": "seurataan",
"followers": "followers" "followers": "seuraajat"
}, },
"fields": { "fields": {
"add_row": "Add Row", "add_row": "Lisää rivi",
"placeholder": { "placeholder": {
"label": "Label", "label": "Nimi",
"content": "Content" "content": "Sisältö"
} }
}, },
"segmented_control": { "segmented_control": {
"posts": "Posts", "posts": "Julkaisut",
"replies": "Replies", "replies": "Vastaukset",
"media": "Media" "posts_and_replies": "Posts and Replies",
"media": "Media",
"about": "Om"
}, },
"relationship_action_alert": { "relationship_action_alert": {
"confirm_unmute_user": { "confirm_mute_user": {
"title": "Unmute Account", "title": "Mute Account",
"message": "Confirm to unmute %s" "message": "Confirm to mute %s"
}, },
"confirm_unblock_usre": { "confirm_unmute_user": {
"title": "Poista tilin mykistys",
"message": "Vahvista, että haluat poistaa mykistyksen tililtä %s"
},
"confirm_block_user": {
"title": "Block Account",
"message": "Confirm to block %s"
},
"confirm_unblock_user": {
"title": "Unblock Account", "title": "Unblock Account",
"message": "Confirm to unblock %s" "message": "Confirm to unblock %s"
} }
} }
}, },
"follower": { "follower": {
"footer": "Followers from other servers are not displayed." "footer": "Seuraajia muilta palvelimilta ei näytetä."
}, },
"following": { "following": {
"footer": "Follows from other servers are not displayed." "footer": "Seurauksia muilta palvelimilta ei näytetä."
}, },
"search": { "search": {
"title": "Search", "title": "Haku",
"search_bar": { "search_bar": {
"placeholder": "Search hashtags and users", "placeholder": "Haku",
"cancel": "Avbryt" "cancel": "Kumoa"
}, },
"recommend": { "recommend": {
"button_text": "See All", "button_text": "Katso kaikki",
"hash_tag": { "hash_tag": {
"title": "Trending on Mastodon", "title": "Trendaavat Mastodonissa",
"description": "Hashtags that are getting quite a bit of attention", "description": "Hashtagit, jotka saavat melkoisesti huomiota",
"people_talking": "%s people are talking" "people_talking": "%s ihmistä puhuu"
}, },
"accounts": { "accounts": {
"title": "Accounts you might like", "title": "Saatat pitää näistä tileistä",
"description": "You may like to follow these accounts", "description": "Haluta ehkä seurata näitä tilejä",
"follow": "Följ" "follow": "Seuraa"
} }
}, },
"searching": { "searching": {
"segment": { "segment": {
"all": "All", "all": "Kaikki",
"people": "People", "people": "Tilit",
"hashtags": "Hashtags", "hashtags": "Hashtagit",
"posts": "Posts" "posts": "Julkaisut"
}, },
"empty_state": { "empty_state": {
"no_results": "Inga resultat" "no_results": "Ei hakutuloksia"
}, },
"recent_search": "Recent searches", "recent_search": "Viimeaikaiset",
"clear": "Clear" "clear": "Tyhjennä"
} }
}, },
"favorite": { "favorite": {
"title": "Your Favorites" "title": "Omat suosikit"
}, },
"notification": { "notification": {
"title": { "title": {
"Everything": "Everything", "Everything": "Kaikki",
"Mentions": "Mentions" "Mentions": "Maininnat"
},
"notification_description": {
"followed_you": "followed you",
"favorited_your_post": "favorited your post",
"reblogged_your_post": "reblogged your post",
"mentioned_you": "nämnde dig",
"request_to_follow_you": "request to follow you",
"poll_has_ended": "poll has ended"
}, },
"user_followed_you": "%s följde dig",
"user_favorited your post": "%s favorited your post",
"user_reblogged_your_post": "%s reblogged your post",
"user_mentioned_you": "%s nämnde dig",
"user_requested_to_follow_you": "%s har begärt att följa dig",
"user_your_poll_has_ended": "%s Omröstningen har avslutats",
"keyobard": { "keyobard": {
"show_everything": "Show Everything", "show_everything": "Näytä kaikki",
"show_mentions": "Show Mentions" "show_mentions": "Näytä maininnat"
} }
}, },
"thread": { "thread": {
"back_title": "Post", "back_title": "Julkaisu",
"title": "Post from %s" "title": "Julkaisu tililtä %s"
}, },
"settings": { "settings": {
"title": "Inställningar", "title": "Asetukset",
"section": { "section": {
"appearance": { "appearance": {
"title": "Appearance", "title": "Ulkoasu",
"automatic": "Automatic", "automatic": "Seuraa järjestelmää",
"light": "Always Light", "light": "Vaalea",
"dark": "Always Dark" "dark": "Tumma"
},
"look_and_feel": {
"title": "Look and Feel",
"use_system": "Use System",
"really_dark": "Really Dark",
"sorta_dark": "Sorta Dark",
"light": "Ljust"
}, },
"notifications": { "notifications": {
"title": "Notifications", "title": "Ilmoitukset",
"favorites": "Favorites my post", "favorites": "Favorites my post",
"follows": "Follows me", "follows": "Seuraa minua",
"boosts": "Reblogs my post", "boosts": "Omien julkaisujen edelleen jaot",
"mentions": "Mentions me", "mentions": "Mainitsee minut",
"trigger": { "trigger": {
"anyone": "anyone", "anyone": "kuka tahansa",
"follower": "a follower", "follower": "seuraaja",
"follow": "anyone I follow", "follow": "kuka tahansa, jota seuraan",
"noone": "no one", "noone": "ei kukaan",
"title": "Notify me when" "title": "Ilmoita minulle, kun"
} }
}, },
"preference": { "preference": {
"title": "Preferences", "title": "Lisäasetukset",
"true_black_dark_mode": "True black dark mode", "true_black_dark_mode": "Todellinen mustan tumma tila",
"disable_avatar_animation": "Disable animated avatars", "disable_avatar_animation": "Poista käytöstä animoidut avatarit",
"disable_emoji_animation": "Disable animated emojis", "disable_emoji_animation": "Poista käytöstä animoidut emojit",
"using_default_browser": "Use default browser to open links" "using_default_browser": "Käytä oletusselainta linkkien avaamiseen"
}, },
"boring_zone": { "boring_zone": {
"title": "The Boring Zone", "title": "Tylsä alue",
"account_settings": "Account Settings", "account_settings": "Tiliasetukset",
"terms": "Terms of Service", "terms": "Palveluehdot",
"privacy": "Integritetspolicy" "privacy": "Tietosuojakäytäntö"
}, },
"spicy_zone": { "spicy_zone": {
"title": "The Spicy Zone", "title": "Varovainen alue",
"clear": "Clear Media Cache", "clear": "Tyhjennä median välimuisti",
"signout": "Logga ut" "signout": "Kirjaudu ulos"
} }
}, },
"footer": { "footer": {
"mastodon_description": "Mastodon is open source software. You can report issues on GitHub at %s (%s)" "mastodon_description": "Mastodon on avoimen lähdekoodin ohjelmisto. Voit raportoida ongelmasta GitHubissa osoitteessa %s (%s)"
}, },
"keyboard": { "keyboard": {
"close_settings_window": "Close Settings Window" "close_settings_window": "Sulje asetukset"
} }
}, },
"report": { "report": {
"title": "Rapportera %s", "title_report": "Report",
"step1": "Steg 1 av 2", "title": "Ilmianna %s",
"step2": "Steg 2 av 2", "step1": "Vaihe 1/2",
"content1": "Are there any other posts youd like to add to the report?", "step2": "Vaihe 2/2",
"content2": "Is there anything the moderators should know about this report?", "content1": "Onko julkaisuja, joita haluaisit lisätä ilmiantoon?",
"send": "Send Report", "content2": "Onko valvojien syytä tietää tästä ilmiannosta?",
"skip_to_send": "Send without comment", "report_sent_title": "Thanks for reporting, well look into this.",
"text_placeholder": "Type or paste additional comments" "send": "Lähetä ilmianto",
"skip_to_send": "Lähetä ilman kommentteja",
"text_placeholder": "Kirjoita tai liitä lisäkommentteja",
"reported": "REPORTED"
}, },
"preview": { "preview": {
"keyboard": { "keyboard": {
"close_preview": "Close Preview", "close_preview": "Sulje esikatselu",
"show_next": "Show Next", "show_next": "Näytä seuraava",
"show_previous": "Show Previous" "show_previous": "Näytä edellinen"
} }
}, },
"account_list": { "account_list": {
"tab_bar_hint": "Current selected profile: %s. Double tap then hold to show account switcher", "tab_bar_hint": "Nykyinen valittu profiili: %s. Kaksoisnapauta ja pidä sitten painettuna näytääksesi tilin vaihtajan",
"dismiss_account_switcher": "Dismiss Account Switcher", "dismiss_account_switcher": "Sulje tilin vaihtaja",
"add_account": "Lägg till konto" "add_account": "Lisää tili"
}, },
"wizard": { "wizard": {
"new_in_mastodon": "New in Mastodon", "new_in_mastodon": "Uutta Mastodonissa",
"multiple_account_switch_intro_description": "Switch between multiple accounts by holding the profile button.", "multiple_account_switch_intro_description": "Vaihda useiden tilien välillä pitämällä profiilipainiketta painettuna.",
"accessibility_hint": "Double tap to dismiss this wizard" "accessibility_hint": "Hylkää tämä ohjattu toiminto kaksoisnapauttamalla"
} }
} }
} }

View File

@ -1,6 +1,6 @@
{ {
"NSCameraUsageDescription": "Used to take photo for post status", "NSCameraUsageDescription": "Käytetään kuvan ottamiseen julkaisua varten",
"NSPhotoLibraryAddUsageDescription": "Used to save photo into the Photo Library", "NSPhotoLibraryAddUsageDescription": "Käytetään kuvan tallentamiseen kuvakirjastoon",
"NewPostShortcutItemTitle": "New Post", "NewPostShortcutItemTitle": "Uusi julkaisu",
"SearchShortcutItemTitle": "Search" "SearchShortcutItemTitle": "Haku"
} }

View File

@ -29,9 +29,9 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>ld</string> <string>ld</string>
<key>one</key> <key>one</key>
<string>1 character</string> <string>1 tecken</string>
<key>other</key> <key>other</key>
<string>%ld characters</string> <string>%ld tecken</string>
</dict> </dict>
</dict> </dict>
<key>a11y.plural.count.input_limit_remains</key> <key>a11y.plural.count.input_limit_remains</key>
@ -45,9 +45,9 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>ld</string> <string>ld</string>
<key>one</key> <key>one</key>
<string>1 character</string> <string>1 tecken</string>
<key>other</key> <key>other</key>
<string>%ld characters</string> <string>%ld tecken</string>
</dict> </dict>
</dict> </dict>
<key>plural.count.metric_formatted.post</key> <key>plural.count.metric_formatted.post</key>
@ -125,9 +125,9 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>ld</string> <string>ld</string>
<key>one</key> <key>one</key>
<string>1 vote</string> <string>1 röst</string>
<key>other</key> <key>other</key>
<string>%ld votes</string> <string>%ld röster</string>
</dict> </dict>
</dict> </dict>
<key>plural.count.voter</key> <key>plural.count.voter</key>
@ -381,7 +381,7 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>ld</string> <string>ld</string>
<key>one</key> <key>one</key>
<string>1s ago</string> <string>1s sedan</string>
<key>other</key> <key>other</key>
<string>%lds ago</string> <string>%lds ago</string>
</dict> </dict>

View File

@ -45,11 +45,11 @@
"message": "Please enable the photo library access permission to save the photo." "message": "Please enable the photo library access permission to save the photo."
}, },
"delete_post": { "delete_post": {
"title": "Are you sure you want to delete this post?", "title": "Delete Post",
"delete": "Radera" "message": "Are you sure you want to delete this post?"
}, },
"clean_cache": { "clean_cache": {
"title": "Clean Cache", "title": "Rensa cache",
"message": "Successfully cleaned %s cache." "message": "Successfully cleaned %s cache."
} }
}, },
@ -64,7 +64,7 @@
"edit": "Redigera", "edit": "Redigera",
"save": "Spara", "save": "Spara",
"ok": "OK", "ok": "OK",
"done": "Done", "done": "Klar",
"confirm": "Confirm", "confirm": "Confirm",
"continue": "Fortsätt", "continue": "Fortsätt",
"compose": "Compose", "compose": "Compose",
@ -72,8 +72,8 @@
"discard": "Discard", "discard": "Discard",
"try_again": "Försök igen", "try_again": "Försök igen",
"take_photo": "Take Photo", "take_photo": "Take Photo",
"save_photo": "Save Photo", "save_photo": "Spara foto",
"copy_photo": "Copy Photo", "copy_photo": "Kopiera foto",
"sign_in": "Sign In", "sign_in": "Sign In",
"sign_up": "Sign Up", "sign_up": "Sign Up",
"see_more": "See More", "see_more": "See More",
@ -82,6 +82,7 @@
"share_user": "Dela %s", "share_user": "Dela %s",
"share_post": "Share Post", "share_post": "Share Post",
"open_in_safari": "Öppna i Safari", "open_in_safari": "Öppna i Safari",
"open_in_browser": "Open in Browser",
"find_people": "Find people to follow", "find_people": "Find people to follow",
"manually_search": "Manually search instead", "manually_search": "Manually search instead",
"skip": "Skip", "skip": "Skip",
@ -139,7 +140,8 @@
"unreblog": "Undo reblog", "unreblog": "Undo reblog",
"favorite": "Favorite", "favorite": "Favorite",
"unfavorite": "Unfavorite", "unfavorite": "Unfavorite",
"menu": "Meny" "menu": "Meny",
"hide": "Dölj"
}, },
"tag": { "tag": {
"url": "URL", "url": "URL",
@ -148,6 +150,12 @@
"hashtag": "Hashtag", "hashtag": "Hashtag",
"email": "Email", "email": "Email",
"emoji": "Emoji" "emoji": "Emoji"
},
"visibility": {
"unlisted": "Everyone can see this post but not display in the public timeline.",
"private": "Only their followers can see this post.",
"private_from_me": "Only my followers can see this post.",
"direct": "Only mentioned user can see this post."
} }
}, },
"friendship": { "friendship": {
@ -171,7 +179,7 @@
"timeline": { "timeline": {
"filtered": "Filtered", "filtered": "Filtered",
"timestamp": { "timestamp": {
"now": "Now" "now": "Nu"
}, },
"loader": { "loader": {
"load_missing_posts": "Load missing posts", "load_missing_posts": "Load missing posts",
@ -192,10 +200,14 @@
}, },
"scene": { "scene": {
"welcome": { "welcome": {
"slogan": "Social networking\nback in your hands." "slogan": "Social networking\nback in your hands.",
"get_started": "Kom igång",
"log_in": "Logga in"
}, },
"server_picker": { "server_picker": {
"title": "Pick a server,\nany server.", "title": "Mastodon is made of users in different communities.",
"subtitle": "Pick a community based on your interests, region, or a general purpose one.",
"subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": { "button": {
"category": { "category": {
"all": "All", "all": "All",
@ -222,7 +234,7 @@
"category": "KATEGORI" "category": "KATEGORI"
}, },
"input": { "input": {
"placeholder": "Find a server or join your own..." "placeholder": "Search communities"
}, },
"empty_state": { "empty_state": {
"finding_servers": "Finding available servers...", "finding_servers": "Finding available servers...",
@ -231,7 +243,7 @@
} }
}, },
"register": { "register": {
"title": "Tell us about you.", "title": "Lets get you set up on %s",
"input": { "input": {
"avatar": { "avatar": {
"delete": "Radera" "delete": "Radera"
@ -248,6 +260,12 @@
}, },
"password": { "password": {
"placeholder": "password", "placeholder": "password",
"require": "Your password needs at least:",
"character_limit": "8 characters",
"accessibility": {
"checked": "checked",
"unchecked": "unchecked"
},
"hint": "Your password needs at least eight characters" "hint": "Your password needs at least eight characters"
}, },
"invite": { "invite": {
@ -258,7 +276,7 @@
"item": { "item": {
"username": "Användarnamn", "username": "Användarnamn",
"email": "Email", "email": "Email",
"password": "Password", "password": "Lösenord",
"agreement": "Agreement", "agreement": "Agreement",
"locale": "Locale", "locale": "Locale",
"reason": "Reason" "reason": "Reason"
@ -285,7 +303,7 @@
}, },
"server_rules": { "server_rules": {
"title": "Some ground rules.", "title": "Some ground rules.",
"subtitle": "These rules are set by the admins of %s.", "subtitle": "These are set and enforced by the %s moderators.",
"prompt": "By continuing, youre subject to the terms of service and privacy policy for %s.", "prompt": "By continuing, youre subject to the terms of service and privacy policy for %s.",
"terms_of_service": "terms of service", "terms_of_service": "terms of service",
"privacy_policy": "integritetspolicy", "privacy_policy": "integritetspolicy",
@ -295,10 +313,10 @@
}, },
"confirm_email": { "confirm_email": {
"title": "One last thing.", "title": "One last thing.",
"subtitle": "We just sent an email to %s,\ntap the link to confirm your account.", "subtitle": "Tap the link we emailed to you to verify your account.",
"button": { "button": {
"open_email_app": "Open Email App", "open_email_app": "Open Email App",
"dont_receive_email": "I never got an email" "resend": "Resend"
}, },
"dont_receive_email": { "dont_receive_email": {
"title": "Check your email", "title": "Check your email",
@ -332,7 +350,7 @@
}, },
"media_selection": { "media_selection": {
"camera": "Take Photo", "camera": "Take Photo",
"photo_library": "Photo Library", "photo_library": "Fotobibliotek",
"browse": "Bläddra" "browse": "Bläddra"
}, },
"content_input_placeholder": "Type or paste whats on your mind", "content_input_placeholder": "Type or paste whats on your mind",
@ -401,14 +419,24 @@
"segmented_control": { "segmented_control": {
"posts": "Posts", "posts": "Posts",
"replies": "Replies", "replies": "Replies",
"media": "Media" "posts_and_replies": "Posts and Replies",
"media": "Media",
"about": "Om"
}, },
"relationship_action_alert": { "relationship_action_alert": {
"confirm_mute_user": {
"title": "Mute Account",
"message": "Confirm to mute %s"
},
"confirm_unmute_user": { "confirm_unmute_user": {
"title": "Unmute Account", "title": "Unmute Account",
"message": "Confirm to unmute %s" "message": "Confirm to unmute %s"
}, },
"confirm_unblock_usre": { "confirm_block_user": {
"title": "Block Account",
"message": "Confirm to block %s"
},
"confirm_unblock_user": {
"title": "Unblock Account", "title": "Unblock Account",
"message": "Confirm to unblock %s" "message": "Confirm to unblock %s"
} }
@ -450,7 +478,7 @@
"no_results": "Inga resultat" "no_results": "Inga resultat"
}, },
"recent_search": "Recent searches", "recent_search": "Recent searches",
"clear": "Clear" "clear": "Rensa"
} }
}, },
"favorite": { "favorite": {
@ -461,12 +489,14 @@
"Everything": "Everything", "Everything": "Everything",
"Mentions": "Mentions" "Mentions": "Mentions"
}, },
"user_followed_you": "%s följde dig", "notification_description": {
"user_favorited your post": "%s favorited your post", "followed_you": "followed you",
"user_reblogged_your_post": "%s reblogged your post", "favorited_your_post": "favorited your post",
"user_mentioned_you": "%s nämnde dig", "reblogged_your_post": "reblogged your post",
"user_requested_to_follow_you": "%s har begärt att följa dig", "mentioned_you": "nämnde dig",
"user_your_poll_has_ended": "%s Omröstningen har avslutats", "request_to_follow_you": "request to follow you",
"poll_has_ended": "poll has ended"
},
"keyobard": { "keyobard": {
"show_everything": "Show Everything", "show_everything": "Show Everything",
"show_mentions": "Show Mentions" "show_mentions": "Show Mentions"
@ -485,6 +515,13 @@
"light": "Always Light", "light": "Always Light",
"dark": "Always Dark" "dark": "Always Dark"
}, },
"look_and_feel": {
"title": "Look and Feel",
"use_system": "Use System",
"really_dark": "Really Dark",
"sorta_dark": "Sorta Dark",
"light": "Ljust"
},
"notifications": { "notifications": {
"title": "Notifications", "title": "Notifications",
"favorites": "Favorites my post", "favorites": "Favorites my post",
@ -502,14 +539,14 @@
"preference": { "preference": {
"title": "Preferences", "title": "Preferences",
"true_black_dark_mode": "True black dark mode", "true_black_dark_mode": "True black dark mode",
"disable_avatar_animation": "Disable animated avatars", "disable_avatar_animation": "Inaktivera animerade avatarer",
"disable_emoji_animation": "Disable animated emojis", "disable_emoji_animation": "Inaktivera animerade emojis",
"using_default_browser": "Use default browser to open links" "using_default_browser": "Use default browser to open links"
}, },
"boring_zone": { "boring_zone": {
"title": "The Boring Zone", "title": "The Boring Zone",
"account_settings": "Account Settings", "account_settings": "Kontoinställningar",
"terms": "Terms of Service", "terms": "Användarvillkor",
"privacy": "Integritetspolicy" "privacy": "Integritetspolicy"
}, },
"spicy_zone": { "spicy_zone": {
@ -526,14 +563,17 @@
} }
}, },
"report": { "report": {
"title_report": "Report",
"title": "Rapportera %s", "title": "Rapportera %s",
"step1": "Steg 1 av 2", "step1": "Steg 1 av 2",
"step2": "Steg 2 av 2", "step2": "Steg 2 av 2",
"content1": "Are there any other posts youd like to add to the report?", "content1": "Are there any other posts youd like to add to the report?",
"content2": "Is there anything the moderators should know about this report?", "content2": "Is there anything the moderators should know about this report?",
"send": "Send Report", "report_sent_title": "Thanks for reporting, well look into this.",
"send": "Skicka rapport",
"skip_to_send": "Send without comment", "skip_to_send": "Send without comment",
"text_placeholder": "Type or paste additional comments" "text_placeholder": "Type or paste additional comments",
"reported": "REPORTED"
}, },
"preview": { "preview": {
"keyboard": { "keyboard": {

View File

@ -45,8 +45,8 @@
"message": "โปรดเปิดใช้งานสิทธิอนุญาตการเข้าถึงคลังรูปภาพเพื่อบันทึกรูปภาพ" "message": "โปรดเปิดใช้งานสิทธิอนุญาตการเข้าถึงคลังรูปภาพเพื่อบันทึกรูปภาพ"
}, },
"delete_post": { "delete_post": {
"title": "คุณแน่ใจหรือไม่ว่าต้องการลบโพสต์นี้?", "title": "ลบโพสต์",
"delete": "ลบ" "message": "คุณแน่ใจหรือไม่ว่าต้องการลบโพสต์นี้?"
}, },
"clean_cache": { "clean_cache": {
"title": "ล้างแคช", "title": "ล้างแคช",
@ -82,6 +82,7 @@
"share_user": "แบ่งปัน %s", "share_user": "แบ่งปัน %s",
"share_post": "แบ่งปันโพสต์", "share_post": "แบ่งปันโพสต์",
"open_in_safari": "เปิดใน Safari", "open_in_safari": "เปิดใน Safari",
"open_in_browser": "เปิดในเบราว์เซอร์",
"find_people": "ค้นหาผู้คนที่จะติดตาม", "find_people": "ค้นหาผู้คนที่จะติดตาม",
"manually_search": "ค้นหาด้วยตนเองแทน", "manually_search": "ค้นหาด้วยตนเองแทน",
"skip": "ข้าม", "skip": "ข้าม",
@ -139,7 +140,8 @@
"unreblog": "เลิกทำการดัน", "unreblog": "เลิกทำการดัน",
"favorite": "ชื่นชอบ", "favorite": "ชื่นชอบ",
"unfavorite": "เลิกชื่นชอบ", "unfavorite": "เลิกชื่นชอบ",
"menu": "เมนู" "menu": "เมนู",
"hide": "ซ่อน"
}, },
"tag": { "tag": {
"url": "URL", "url": "URL",
@ -148,6 +150,12 @@
"hashtag": "แฮชแท็ก", "hashtag": "แฮชแท็ก",
"email": "อีเมล", "email": "อีเมล",
"emoji": "อีโมจิ" "emoji": "อีโมจิ"
},
"visibility": {
"unlisted": "ทุกคนสามารถเห็นโพสต์นี้แต่ไม่แสดงในเส้นเวลาสาธารณะ",
"private": "เฉพาะผู้ติดตามของเขาเท่านั้นที่สามารถเห็นโพสต์นี้",
"private_from_me": "เฉพาะผู้ติดตามของฉันเท่านั้นที่สามารถเห็นโพสต์นี้",
"direct": "เฉพาะผู้ใช้ที่กล่าวถึงเท่านั้นที่สามารถเห็นโพสต์นี้"
} }
}, },
"friendship": { "friendship": {
@ -180,10 +188,10 @@
}, },
"header": { "header": {
"no_status_found": "ไม่พบโพสต์", "no_status_found": "ไม่พบโพสต์",
"blocking_warning": "คุณไม่สามารถดูโปรไฟล์ของผู้ใช้นี้\nจนกว่าคุณจะเลิกปิดกั้นผู้ใช้นี้\nผู้ใช้นี้เห็นโปรไฟล์ของคุณเหมือนกับที่คุณเห็น", "blocking_warning": "คุณไม่สามารถดูโปรไฟล์ของผู้ใช้นี้\nจนกว่าคุณจะเลิกปิดกั้นเขา\nโปรไฟล์ของคุณมีลักษณะเช่นนี้สำหรับเขา",
"user_blocking_warning": "คุณไม่สามารถดูโปรไฟล์ของ %s\nจนกว่าคุณจะเลิกปิดกั้นผู้ใช้นี้\nผู้ใช้นี้เห็นโปรไฟล์ของคุณเหมือนกับที่คุณเห็น", "user_blocking_warning": "คุณไม่สามารถดูโปรไฟล์ของ %s\nจนกว่าคุณจะเลิกปิดกั้นเขา\nโปรไฟล์ของคุณมีลักษณะเช่นนี้สำหรับเขา",
"blocked_warning": "คุณไม่สามารถดูโปรไฟล์ของผู้ใช้นี้\nจนกว่าผู้ใช้นี้จะเลิกปิดกั้นคุณ", "blocked_warning": "คุณไม่สามารถดูโปรไฟล์ของผู้ใช้นี้\nจนกว่าเขาจะเลิกปิดกั้นคุณ",
"user_blocked_warning": "คุณไม่สามารถดูโปรไฟล์ของ %s\nจนกว่าผู้ใช้นี้จะเลิกปิดกั้นคุณ", "user_blocked_warning": "คุณไม่สามารถดูโปรไฟล์ของ %s\nจนกว่าเขาจะเลิกปิดกั้นคุณ",
"suspended_warning": "ผู้ใช้นี้ถูกระงับการใช้งาน", "suspended_warning": "ผู้ใช้นี้ถูกระงับการใช้งาน",
"user_suspended_warning": "บัญชีของ %s ถูกระงับการใช้งาน" "user_suspended_warning": "บัญชีของ %s ถูกระงับการใช้งาน"
} }
@ -192,10 +200,14 @@
}, },
"scene": { "scene": {
"welcome": { "welcome": {
"slogan": "ให้เครือข่ายสังคม\nกลับมาอยู่ในมือของคุณ" "slogan": "ให้เครือข่ายสังคม\nกลับมาอยู่ในมือของคุณ",
"get_started": "เริ่มต้นใช้งาน",
"log_in": "เข้าสู่ระบบ"
}, },
"server_picker": { "server_picker": {
"title": "เลือกเซิร์ฟเวอร์\nอันไหนก็ได้", "title": "Mastodon ประกอบด้วยผู้ใช้ในชุมชนต่าง ๆ",
"subtitle": "เลือกชุมชนตามความสนใจ, ภูมิภาค หรือวัตถุประสงค์ทั่วไปของคุณ",
"subtitle_extend": "เลือกชุมชนตามความสนใจ, ภูมิภาค หรือวัตถุประสงค์ทั่วไปของคุณ แต่ละชุมชนดำเนินการโดยองค์กรหรือบุคคลที่เป็นอิสระโดยสิ้นเชิง",
"button": { "button": {
"category": { "category": {
"all": "ทั้งหมด", "all": "ทั้งหมด",
@ -222,7 +234,7 @@
"category": "หมวดหมู่" "category": "หมวดหมู่"
}, },
"input": { "input": {
"placeholder": "ค้นหาเซิร์ฟเวอร์หรือเข้าร่วมของคุณเอง..." "placeholder": "ค้นหาชุมชน"
}, },
"empty_state": { "empty_state": {
"finding_servers": "กำลังค้นหาเซิร์ฟเวอร์ที่พร้อมใช้งาน...", "finding_servers": "กำลังค้นหาเซิร์ฟเวอร์ที่พร้อมใช้งาน...",
@ -231,7 +243,7 @@
} }
}, },
"register": { "register": {
"title": "บอกเราเกี่ยวกับคุณ", "title": "มาตั้งค่าของคุณใน %s กันเลย",
"input": { "input": {
"avatar": { "avatar": {
"delete": "ลบ" "delete": "ลบ"
@ -248,6 +260,12 @@
}, },
"password": { "password": {
"placeholder": "รหัสผ่าน", "placeholder": "รหัสผ่าน",
"require": "รหัสผ่านของคุณต้องมีอย่างน้อย:",
"character_limit": "8 ตัวอักษร",
"accessibility": {
"checked": "กาเครื่องหมายแล้ว",
"unchecked": "ไม่ได้กาเครื่องหมาย"
},
"hint": "รหัสผ่านของคุณต้องมีอย่างน้อยแปดตัวอักษร" "hint": "รหัสผ่านของคุณต้องมีอย่างน้อยแปดตัวอักษร"
}, },
"invite": { "invite": {
@ -285,7 +303,7 @@
}, },
"server_rules": { "server_rules": {
"title": "กฎพื้นฐานบางประการ", "title": "กฎพื้นฐานบางประการ",
"subtitle": "กฎเหล่านี้ถูกตั้งโดยผู้ดูแลของ %s", "subtitle": "มีการตั้งและบังคับใช้กฎเหล่านี้โดยผู้ควบคุมของ %s",
"prompt": "เมื่อคุณดำเนินการต่อ คุณอยู่ภายใต้เงื่อนไขการให้บริการและนโยบายความเป็นส่วนตัวสำหรับ %s", "prompt": "เมื่อคุณดำเนินการต่อ คุณอยู่ภายใต้เงื่อนไขการให้บริการและนโยบายความเป็นส่วนตัวสำหรับ %s",
"terms_of_service": "เงื่อนไขการให้บริการ", "terms_of_service": "เงื่อนไขการให้บริการ",
"privacy_policy": "นโยบายความเป็นส่วนตัว", "privacy_policy": "นโยบายความเป็นส่วนตัว",
@ -295,10 +313,10 @@
}, },
"confirm_email": { "confirm_email": {
"title": "หนึ่งสิ่งสุดท้าย", "title": "หนึ่งสิ่งสุดท้าย",
"subtitle": "เราเพิ่งส่งอีเมลไปยัง %s\nแตะที่ลิงก์เพื่อยืนยันบัญชีของคุณ", "subtitle": "แตะลิงก์ที่เราส่งอีเมลถึงคุณเพื่อยืนยันบัญชีของคุณ",
"button": { "button": {
"open_email_app": "เปิดแอปอีเมล", "open_email_app": "เปิดแอปอีเมล",
"dont_receive_email": "ฉันไม่เคยได้รับอีเมล" "resend": "ส่งใหม่"
}, },
"dont_receive_email": { "dont_receive_email": {
"title": "ตรวจสอบอีเมลของคุณ", "title": "ตรวจสอบอีเมลของคุณ",
@ -401,14 +419,24 @@
"segmented_control": { "segmented_control": {
"posts": "โพสต์", "posts": "โพสต์",
"replies": "การตอบกลับ", "replies": "การตอบกลับ",
"media": "สื่อ" "posts_and_replies": "โพสต์และการตอบกลับ",
"media": "สื่อ",
"about": "เกี่ยวกับ"
}, },
"relationship_action_alert": { "relationship_action_alert": {
"confirm_mute_user": {
"title": "ซ่อนบัญชี",
"message": "ยืนยันเพื่อซ่อน %s"
},
"confirm_unmute_user": { "confirm_unmute_user": {
"title": "เลิกซ่อนบัญชี", "title": "เลิกซ่อนบัญชี",
"message": "ยืนยันเพื่อเลิกซ่อน %s" "message": "ยืนยันเพื่อเลิกซ่อน %s"
}, },
"confirm_unblock_usre": { "confirm_block_user": {
"title": "ปิดกั้นบัญชี",
"message": "ยืนยันเพื่อปิดกั้น %s"
},
"confirm_unblock_user": {
"title": "เลิกปิดกั้นบัญชี", "title": "เลิกปิดกั้นบัญชี",
"message": "ยืนยันเพื่อเลิกปิดกั้น %s" "message": "ยืนยันเพื่อเลิกปิดกั้น %s"
} }
@ -461,12 +489,14 @@
"Everything": "ทุกอย่าง", "Everything": "ทุกอย่าง",
"Mentions": "การกล่าวถึง" "Mentions": "การกล่าวถึง"
}, },
"user_followed_you": "%s ได้ติดตามคุณ", "notification_description": {
"user_favorited your post": "%s ได้ชื่นชอบโพสต์ของคุณ", "followed_you": "ได้ติดตามคุณ",
"user_reblogged_your_post": "%s ได้ดันโพสต์ของคุณ", "favorited_your_post": "ได้ชื่นชอบโพสต์ของคุณ",
"user_mentioned_you": "%s ได้กล่าวถึงคุณ", "reblogged_your_post": "ได้ดันโพสต์ของคุณ",
"user_requested_to_follow_you": "%s ได้ขอติดตามคุณ", "mentioned_you": "ได้กล่าวถึงคุณ",
"user_your_poll_has_ended": "%s โพลของคุณได้สิ้นสุดแล้ว", "request_to_follow_you": "ขอติดตามคุณ",
"poll_has_ended": "การสำรวจความคิดเห็นได้สิ้นสุดแล้ว"
},
"keyobard": { "keyobard": {
"show_everything": "แสดงทุกอย่าง", "show_everything": "แสดงทุกอย่าง",
"show_mentions": "แสดงการกล่าวถึง" "show_mentions": "แสดงการกล่าวถึง"
@ -485,6 +515,13 @@
"light": "สว่างเสมอ", "light": "สว่างเสมอ",
"dark": "มืดเสมอ" "dark": "มืดเสมอ"
}, },
"look_and_feel": {
"title": "ลักษณะที่แสดง",
"use_system": "ใช้ของระบบ",
"really_dark": "มืดมาก",
"sorta_dark": "ค่อนข้างมืด",
"light": "สว่าง"
},
"notifications": { "notifications": {
"title": "การแจ้งเตือน", "title": "การแจ้งเตือน",
"favorites": "ชื่นชอบโพสต์ของฉัน", "favorites": "ชื่นชอบโพสต์ของฉัน",
@ -526,14 +563,17 @@
} }
}, },
"report": { "report": {
"title_report": "รายงาน",
"title": "รายงาน %s", "title": "รายงาน %s",
"step1": "ขั้นตอนที่ 1 จาก 2", "step1": "ขั้นตอนที่ 1 จาก 2",
"step2": "ขั้นตอนที่ 2 จาก 2", "step2": "ขั้นตอนที่ 2 จาก 2",
"content1": "มีโพสต์อื่นใดที่คุณต้องการเพิ่มไปยังรายงานหรือไม่?", "content1": "มีโพสต์อื่นใดที่คุณต้องการเพิ่มไปยังรายงานหรือไม่?",
"content2": "มีสิ่งใดที่ผู้ควบคุมควรทราบเกี่ยวกับรายงานนี้หรือไม่?", "content2": "มีสิ่งใดที่ผู้ควบคุมควรทราบเกี่ยวกับรายงานนี้หรือไม่?",
"report_sent_title": "ขอบคุณสำหรับการรายงาน เราจะตรวจสอบสิ่งนี้",
"send": "ส่งรายงาน", "send": "ส่งรายงาน",
"skip_to_send": "ส่งโดยไม่มีความคิดเห็น", "skip_to_send": "ส่งโดยไม่มีความคิดเห็น",
"text_placeholder": "พิมพ์หรือวางความคิดเห็นเพิ่มเติม" "text_placeholder": "พิมพ์หรือวางความคิดเห็นเพิ่มเติม",
"reported": "รายงานแล้ว"
}, },
"preview": { "preview": {
"keyboard": { "keyboard": {

View File

@ -46,7 +46,7 @@
}, },
"delete_post": { "delete_post": {
"title": "确定要删除这条消息吗?", "title": "确定要删除这条消息吗?",
"delete": "删除" "message": "确定要删除这个帖子吗?"
}, },
"clean_cache": { "clean_cache": {
"title": "清除缓存", "title": "清除缓存",
@ -82,6 +82,7 @@
"share_user": "分享 %s", "share_user": "分享 %s",
"share_post": "分享帖子", "share_post": "分享帖子",
"open_in_safari": "在 Safari 中打开", "open_in_safari": "在 Safari 中打开",
"open_in_browser": "在浏览器中打开",
"find_people": "查看推荐关注的用户", "find_people": "查看推荐关注的用户",
"manually_search": "手动搜索用户", "manually_search": "手动搜索用户",
"skip": "跳过", "skip": "跳过",
@ -139,7 +140,8 @@
"unreblog": "取消转发", "unreblog": "取消转发",
"favorite": "喜欢", "favorite": "喜欢",
"unfavorite": "取消喜欢", "unfavorite": "取消喜欢",
"menu": "菜单" "menu": "菜单",
"hide": "隐藏"
}, },
"tag": { "tag": {
"url": "URL", "url": "URL",
@ -148,6 +150,12 @@
"hashtag": "标签", "hashtag": "标签",
"email": "电子邮箱", "email": "电子邮箱",
"emoji": "表情" "emoji": "表情"
},
"visibility": {
"unlisted": "任何人都可以看到这个帖子,但不会在公开的时间线中显示。",
"private": "只有作者的关注者才能看到此帖子。",
"private_from_me": "只有我的关注者才能看到此帖子。",
"direct": "只有提到的用户才能看到此帖子。"
} }
}, },
"friendship": { "friendship": {
@ -192,10 +200,14 @@
}, },
"scene": { "scene": {
"welcome": { "welcome": {
"slogan": "社交网络\n回到你的手中。" "slogan": "社交网络\n回到你的手中。",
"get_started": "开始使用",
"log_in": "登录"
}, },
"server_picker": { "server_picker": {
"title": "挑选一个服务器,\n任意服务器。", "title": "挑选一个服务器,\n任意服务器。",
"subtitle": "根据你的兴趣、区域或一般目的选择一个社区。",
"subtitle_extend": "根据你的兴趣、区域或一般目的选择一个社区。每个社区都由完全独立的组织或个人管理。",
"button": { "button": {
"category": { "category": {
"all": "全部", "all": "全部",
@ -248,6 +260,12 @@
}, },
"password": { "password": {
"placeholder": "密码", "placeholder": "密码",
"require": "您的密码至少需要:",
"character_limit": "8 个字符",
"accessibility": {
"checked": "已选中",
"unchecked": "未选中"
},
"hint": "密码长度至少为 8 个字符" "hint": "密码长度至少为 8 个字符"
}, },
"invite": { "invite": {
@ -298,7 +316,7 @@
"subtitle": "我们刚刚向 %s 发送了一封电子邮件,\n点击链接确认你的帐户。", "subtitle": "我们刚刚向 %s 发送了一封电子邮件,\n点击链接确认你的帐户。",
"button": { "button": {
"open_email_app": "打开电子邮件应用", "open_email_app": "打开电子邮件应用",
"dont_receive_email": "我还没有收到电子邮件" "resend": "重新发送"
}, },
"dont_receive_email": { "dont_receive_email": {
"title": "请检查你的邮箱。", "title": "请检查你的邮箱。",
@ -401,14 +419,24 @@
"segmented_control": { "segmented_control": {
"posts": "帖子", "posts": "帖子",
"replies": "回复", "replies": "回复",
"media": "媒体" "posts_and_replies": "帖子与回复",
"media": "媒体",
"about": "关于"
}, },
"relationship_action_alert": { "relationship_action_alert": {
"confirm_mute_user": {
"title": "静音账户",
"message": "确认静音 %s"
},
"confirm_unmute_user": { "confirm_unmute_user": {
"title": "取消静音账户", "title": "取消静音账户",
"message": "确认取消静音 %s" "message": "确认取消静音 %s"
}, },
"confirm_unblock_usre": { "confirm_block_user": {
"title": "屏蔽帐户",
"message": "确认屏蔽 %s"
},
"confirm_unblock_user": {
"title": "解除屏蔽帐户", "title": "解除屏蔽帐户",
"message": "确认取消屏蔽 %s" "message": "确认取消屏蔽 %s"
} }
@ -461,12 +489,14 @@
"Everything": "全部", "Everything": "全部",
"Mentions": "提及" "Mentions": "提及"
}, },
"user_followed_you": "%s 关注了你", "notification_description": {
"user_favorited your post": "%s 喜欢了你的帖子", "followed_you": "关注了你",
"user_reblogged_your_post": "%s 转发了你的帖子", "favorited_your_post": "喜欢了你的帖子",
"user_mentioned_you": "%s 提及了你", "reblogged_your_post": "转发了你的帖子",
"user_requested_to_follow_you": "%s 向你发送了关注请求", "mentioned_you": "提及了你",
"user_your_poll_has_ended": "%s 你的投票已经结束", "request_to_follow_you": "关注请求",
"poll_has_ended": "投票已结束"
},
"keyobard": { "keyobard": {
"show_everything": "显示全部", "show_everything": "显示全部",
"show_mentions": "显示提及" "show_mentions": "显示提及"
@ -485,6 +515,13 @@
"light": "浅色", "light": "浅色",
"dark": "深色" "dark": "深色"
}, },
"look_and_feel": {
"title": "外观和风格",
"use_system": "跟随系统",
"really_dark": "暗色",
"sorta_dark": "深色",
"light": "浅色"
},
"notifications": { "notifications": {
"title": "通知", "title": "通知",
"favorites": "喜欢我的帖子", "favorites": "喜欢我的帖子",
@ -526,14 +563,17 @@
} }
}, },
"report": { "report": {
"title_report": "举报",
"title": "举报 %s", "title": "举报 %s",
"step1": "步骤 1 / 2", "step1": "步骤 1 / 2",
"step2": "步骤 2 / 2", "step2": "步骤 2 / 2",
"content1": "是否有帖子需要举报?", "content1": "是否有帖子需要举报?",
"content2": "是否有关于此举报的详细描述信息?", "content2": "是否有关于此举报的详细描述信息?",
"report_sent_title": "感谢提交举报,我们将会进行处理。",
"send": "发送举报", "send": "发送举报",
"skip_to_send": "直接发送", "skip_to_send": "直接发送",
"text_placeholder": "输入或粘贴额外的注释" "text_placeholder": "输入或粘贴额外的注释",
"reported": "已报告"
}, },
"preview": { "preview": {
"keyboard": { "keyboard": {

View File

@ -2,21 +2,21 @@
"common": { "common": {
"alerts": { "alerts": {
"common": { "common": {
"please_try_again": "Please try again.", "please_try_again": "請再試一次。",
"please_try_again_later": "Please try again later." "please_try_again_later": "請稍候再試。"
}, },
"sign_up_failure": { "sign_up_failure": {
"title": "Sign Up Failure" "title": "註冊失敗"
}, },
"server_error": { "server_error": {
"title": "Server Error" "title": "伺服器錯誤"
}, },
"vote_failure": { "vote_failure": {
"title": "Vote Failure", "title": "Vote Failure",
"poll_ended": "The poll has ended" "poll_ended": "The poll has ended"
}, },
"discard_post_content": { "discard_post_content": {
"title": "Discard Draft", "title": "捨棄草稿",
"message": "Confirm to discard composed post content." "message": "Confirm to discard composed post content."
}, },
"publish_post_failure": { "publish_post_failure": {
@ -32,9 +32,9 @@
"message": "Cannot edit profile. Please try again." "message": "Cannot edit profile. Please try again."
}, },
"sign_out": { "sign_out": {
"title": "Sign Out", "title": "登出",
"message": "Are you sure you want to sign out?", "message": "Are you sure you want to sign out?",
"confirm": "Sign Out" "confirm": "登出"
}, },
"block_domain": { "block_domain": {
"title": "Are you really, really sure you want to block the entire %s? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain and any of your followers from that domain will be removed.", "title": "Are you really, really sure you want to block the entire %s? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain and any of your followers from that domain will be removed.",
@ -45,8 +45,8 @@
"message": "Please enable the photo library access permission to save the photo." "message": "Please enable the photo library access permission to save the photo."
}, },
"delete_post": { "delete_post": {
"title": "Are you sure you want to delete this post?", "title": "Delete Post",
"delete": "Delete" "message": "Are you sure you want to delete this post?"
}, },
"clean_cache": { "clean_cache": {
"title": "Clean Cache", "title": "Clean Cache",
@ -61,47 +61,48 @@
"open": "Open", "open": "Open",
"add": "Add", "add": "Add",
"remove": "Remove", "remove": "Remove",
"edit": "Edit", "edit": "編輯",
"save": "Save", "save": "Save",
"ok": "OK", "ok": "OK",
"done": "Done", "done": "完成",
"confirm": "Confirm", "confirm": "Confirm",
"continue": "Continue", "continue": "繼續",
"compose": "Compose", "compose": "Compose",
"cancel": "Cancel", "cancel": "取消",
"discard": "Discard", "discard": "Discard",
"try_again": "Try Again", "try_again": "Try Again",
"take_photo": "Take Photo", "take_photo": "Take Photo",
"save_photo": "Save Photo", "save_photo": "儲存照片",
"copy_photo": "Copy Photo", "copy_photo": "Copy Photo",
"sign_in": "Sign In", "sign_in": "登入",
"sign_up": "Sign Up", "sign_up": "註冊",
"see_more": "See More", "see_more": "See More",
"preview": "Preview", "preview": "Preview",
"share": "Share", "share": "分享",
"share_user": "Share %s", "share_user": "Share %s",
"share_post": "Share Post", "share_post": "Share Post",
"open_in_safari": "Open in Safari", "open_in_safari": "Open in Safari",
"open_in_browser": "Open in Browser",
"find_people": "Find people to follow", "find_people": "Find people to follow",
"manually_search": "Manually search instead", "manually_search": "Manually search instead",
"skip": "Skip", "skip": "跳過",
"reply": "Reply", "reply": "回覆",
"report_user": "Report %s", "report_user": "Report %s",
"block_domain": "Block %s", "block_domain": "封鎖 %s",
"unblock_domain": "Unblock %s", "unblock_domain": "解除封鎖 %s",
"settings": "Settings", "settings": "設定",
"delete": "Delete" "delete": "刪除"
}, },
"tabs": { "tabs": {
"home": "Home", "home": "首頁",
"search": "Search", "search": "搜尋",
"notification": "Notification", "notification": "通知",
"profile": "Profile" "profile": "個人檔案"
}, },
"keyboard": { "keyboard": {
"common": { "common": {
"switch_to_tab": "Switch to %s", "switch_to_tab": "切換至 %s",
"compose_new_post": "Compose New Post", "compose_new_post": "發佈貼文",
"show_favorites": "Show Favorites", "show_favorites": "Show Favorites",
"open_settings": "Open Settings" "open_settings": "Open Settings"
}, },
@ -130,37 +131,44 @@
"content_warning": "Content Warning", "content_warning": "Content Warning",
"media_content_warning": "Tap anywhere to reveal", "media_content_warning": "Tap anywhere to reveal",
"poll": { "poll": {
"vote": "Vote", "vote": "投票",
"closed": "Closed" "closed": "Closed"
}, },
"actions": { "actions": {
"reply": "Reply", "reply": "回覆",
"reblog": "Reblog", "reblog": "Reblog",
"unreblog": "Undo reblog", "unreblog": "Undo reblog",
"favorite": "Favorite", "favorite": "Favorite",
"unfavorite": "Unfavorite", "unfavorite": "Unfavorite",
"menu": "Menu" "menu": "Menu",
"hide": "Hide"
}, },
"tag": { "tag": {
"url": "URL", "url": "URL",
"mention": "Mention", "mention": "Mention",
"link": "Link", "link": "Link",
"hashtag": "Hashtag", "hashtag": "Hashtag",
"email": "Email", "email": "電子郵件",
"emoji": "Emoji" "emoji": "Emoji"
},
"visibility": {
"unlisted": "Everyone can see this post but not display in the public timeline.",
"private": "Only their followers can see this post.",
"private_from_me": "Only my followers can see this post.",
"direct": "Only mentioned user can see this post."
} }
}, },
"friendship": { "friendship": {
"follow": "Follow", "follow": "追蹤",
"following": "Following", "following": "Following",
"request": "Request", "request": "Request",
"pending": "Pending", "pending": "Pending",
"block": "Block", "block": "Block",
"block_user": "Block %s", "block_user": "封鎖 %s",
"block_domain": "Block %s", "block_domain": "封鎖 %s",
"unblock": "Unblock", "unblock": "解除封鎖",
"unblock_user": "Unblock %s", "unblock_user": "解除封鎖 %s",
"blocked": "Blocked", "blocked": "已封鎖",
"mute": "Mute", "mute": "Mute",
"mute_user": "Mute %s", "mute_user": "Mute %s",
"unmute": "Unmute", "unmute": "Unmute",
@ -192,10 +200,14 @@
}, },
"scene": { "scene": {
"welcome": { "welcome": {
"slogan": "Social networking\nback in your hands." "slogan": "Social networking\nback in your hands.",
"get_started": "Get Started",
"log_in": "登入"
}, },
"server_picker": { "server_picker": {
"title": "Pick a server,\nany server.", "title": "Mastodon is made of users in different communities.",
"subtitle": "Pick a community based on your interests, region, or a general purpose one.",
"subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": { "button": {
"category": { "category": {
"all": "All", "all": "All",
@ -222,7 +234,7 @@
"category": "CATEGORY" "category": "CATEGORY"
}, },
"input": { "input": {
"placeholder": "Find a server or join your own..." "placeholder": "Search communities"
}, },
"empty_state": { "empty_state": {
"finding_servers": "Finding available servers...", "finding_servers": "Finding available servers...",
@ -231,10 +243,10 @@
} }
}, },
"register": { "register": {
"title": "Tell us about you.", "title": "Lets get you set up on %s",
"input": { "input": {
"avatar": { "avatar": {
"delete": "Delete" "delete": "刪除"
}, },
"username": { "username": {
"placeholder": "username", "placeholder": "username",
@ -247,7 +259,13 @@
"placeholder": "email" "placeholder": "email"
}, },
"password": { "password": {
"placeholder": "password", "placeholder": "密碼",
"require": "Your password needs at least:",
"character_limit": "8 個字元",
"accessibility": {
"checked": "checked",
"unchecked": "unchecked"
},
"hint": "Your password needs at least eight characters" "hint": "Your password needs at least eight characters"
}, },
"invite": { "invite": {
@ -257,8 +275,8 @@
"error": { "error": {
"item": { "item": {
"username": "Username", "username": "Username",
"email": "Email", "email": "電子郵件",
"password": "Password", "password": "密碼",
"agreement": "Agreement", "agreement": "Agreement",
"locale": "Locale", "locale": "Locale",
"reason": "Reason" "reason": "Reason"
@ -285,7 +303,7 @@
}, },
"server_rules": { "server_rules": {
"title": "Some ground rules.", "title": "Some ground rules.",
"subtitle": "These rules are set by the admins of %s.", "subtitle": "These are set and enforced by the %s moderators.",
"prompt": "By continuing, youre subject to the terms of service and privacy policy for %s.", "prompt": "By continuing, youre subject to the terms of service and privacy policy for %s.",
"terms_of_service": "terms of service", "terms_of_service": "terms of service",
"privacy_policy": "privacy policy", "privacy_policy": "privacy policy",
@ -295,10 +313,10 @@
}, },
"confirm_email": { "confirm_email": {
"title": "One last thing.", "title": "One last thing.",
"subtitle": "We just sent an email to %s,\ntap the link to confirm your account.", "subtitle": "Tap the link we emailed to you to verify your account.",
"button": { "button": {
"open_email_app": "Open Email App", "open_email_app": "Open Email App",
"dont_receive_email": "I never got an email" "resend": "Resend"
}, },
"dont_receive_email": { "dont_receive_email": {
"title": "Check your email", "title": "Check your email",
@ -340,14 +358,14 @@
"replying_to_user": "replying to %s", "replying_to_user": "replying to %s",
"attachment": { "attachment": {
"photo": "photo", "photo": "photo",
"video": "video", "video": "影片",
"attachment_broken": "This %s is broken and cant be\nuploaded to Mastodon.", "attachment_broken": "This %s is broken and cant be\nuploaded to Mastodon.",
"description_photo": "Describe the photo for the visually-impaired...", "description_photo": "Describe the photo for the visually-impaired...",
"description_video": "Describe the video for the visually-impaired..." "description_video": "Describe the video for the visually-impaired..."
}, },
"poll": { "poll": {
"duration_time": "Duration: %s", "duration_time": "Duration: %s",
"thirty_minutes": "30 minutes", "thirty_minutes": "30 分鐘",
"one_hour": "1 Hour", "one_hour": "1 Hour",
"six_hours": "6 Hours", "six_hours": "6 Hours",
"one_day": "1 Day", "one_day": "1 Day",
@ -399,16 +417,26 @@
} }
}, },
"segmented_control": { "segmented_control": {
"posts": "Posts", "posts": "貼文",
"replies": "Replies", "replies": "Replies",
"media": "Media" "posts_and_replies": "Posts and Replies",
"media": "Media",
"about": "About"
}, },
"relationship_action_alert": { "relationship_action_alert": {
"confirm_mute_user": {
"title": "Mute Account",
"message": "Confirm to mute %s"
},
"confirm_unmute_user": { "confirm_unmute_user": {
"title": "Unmute Account", "title": "Unmute Account",
"message": "Confirm to unmute %s" "message": "Confirm to unmute %s"
}, },
"confirm_unblock_usre": { "confirm_block_user": {
"title": "Block Account",
"message": "Confirm to block %s"
},
"confirm_unblock_user": {
"title": "Unblock Account", "title": "Unblock Account",
"message": "Confirm to unblock %s" "message": "Confirm to unblock %s"
} }
@ -421,10 +449,10 @@
"footer": "Follows from other servers are not displayed." "footer": "Follows from other servers are not displayed."
}, },
"search": { "search": {
"title": "Search", "title": "搜尋",
"search_bar": { "search_bar": {
"placeholder": "Search hashtags and users", "placeholder": "Search hashtags and users",
"cancel": "Cancel" "cancel": "取消"
}, },
"recommend": { "recommend": {
"button_text": "See All", "button_text": "See All",
@ -436,7 +464,7 @@
"accounts": { "accounts": {
"title": "Accounts you might like", "title": "Accounts you might like",
"description": "You may like to follow these accounts", "description": "You may like to follow these accounts",
"follow": "Follow" "follow": "追蹤"
} }
}, },
"searching": { "searching": {
@ -444,7 +472,7 @@
"all": "All", "all": "All",
"people": "People", "people": "People",
"hashtags": "Hashtags", "hashtags": "Hashtags",
"posts": "Posts" "posts": "貼文"
}, },
"empty_state": { "empty_state": {
"no_results": "No results" "no_results": "No results"
@ -461,12 +489,14 @@
"Everything": "Everything", "Everything": "Everything",
"Mentions": "Mentions" "Mentions": "Mentions"
}, },
"user_followed_you": "%s followed you", "notification_description": {
"user_favorited your post": "%s favorited your post", "followed_you": "followed you",
"user_reblogged_your_post": "%s reblogged your post", "favorited_your_post": "favorited your post",
"user_mentioned_you": "%s mentioned you", "reblogged_your_post": "reblogged your post",
"user_requested_to_follow_you": "%s requested to follow you", "mentioned_you": "mentioned you",
"user_your_poll_has_ended": "%s Your poll has ended", "request_to_follow_you": "request to follow you",
"poll_has_ended": "poll has ended"
},
"keyobard": { "keyobard": {
"show_everything": "Show Everything", "show_everything": "Show Everything",
"show_mentions": "Show Mentions" "show_mentions": "Show Mentions"
@ -477,14 +507,21 @@
"title": "Post from %s" "title": "Post from %s"
}, },
"settings": { "settings": {
"title": "Settings", "title": "設定",
"section": { "section": {
"appearance": { "appearance": {
"title": "Appearance", "title": "Appearance",
"automatic": "Automatic", "automatic": "自動",
"light": "Always Light", "light": "Always Light",
"dark": "Always Dark" "dark": "Always Dark"
}, },
"look_and_feel": {
"title": "Look and Feel",
"use_system": "Use System",
"really_dark": "Really Dark",
"sorta_dark": "Sorta Dark",
"light": "Light"
},
"notifications": { "notifications": {
"title": "Notifications", "title": "Notifications",
"favorites": "Favorites my post", "favorites": "Favorites my post",
@ -515,7 +552,7 @@
"spicy_zone": { "spicy_zone": {
"title": "The Spicy Zone", "title": "The Spicy Zone",
"clear": "Clear Media Cache", "clear": "Clear Media Cache",
"signout": "Sign Out" "signout": "登出"
} }
}, },
"footer": { "footer": {
@ -526,14 +563,17 @@
} }
}, },
"report": { "report": {
"title_report": "Report",
"title": "Report %s", "title": "Report %s",
"step1": "Step 1 of 2", "step1": "Step 1 of 2",
"step2": "Step 2 of 2", "step2": "Step 2 of 2",
"content1": "Are there any other posts youd like to add to the report?", "content1": "Are there any other posts youd like to add to the report?",
"content2": "Is there anything the moderators should know about this report?", "content2": "Is there anything the moderators should know about this report?",
"report_sent_title": "Thanks for reporting, well look into this.",
"send": "Send Report", "send": "Send Report",
"skip_to_send": "Send without comment", "skip_to_send": "Send without comment",
"text_placeholder": "Type or paste additional comments" "text_placeholder": "Type or paste additional comments",
"reported": "REPORTED"
}, },
"preview": { "preview": {
"keyboard": { "keyboard": {

View File

@ -45,8 +45,8 @@
"message": "Please enable the photo library access permission to save the photo." "message": "Please enable the photo library access permission to save the photo."
}, },
"delete_post": { "delete_post": {
"title": "Are you sure you want to delete this post?", "title": "Delete Post",
"delete": "Delete" "message": "Are you sure you want to delete this post?"
}, },
"clean_cache": { "clean_cache": {
"title": "Clean Cache", "title": "Clean Cache",
@ -130,6 +130,7 @@
"show_user_profile": "Show user profile", "show_user_profile": "Show user profile",
"content_warning": "Content Warning", "content_warning": "Content Warning",
"media_content_warning": "Tap anywhere to reveal", "media_content_warning": "Tap anywhere to reveal",
"tap_to_reveal": "Tap to reveal",
"poll": { "poll": {
"vote": "Vote", "vote": "Vote",
"closed": "Closed" "closed": "Closed"
@ -140,7 +141,12 @@
"unreblog": "Undo reblog", "unreblog": "Undo reblog",
"favorite": "Favorite", "favorite": "Favorite",
"unfavorite": "Unfavorite", "unfavorite": "Unfavorite",
"menu": "Menu" "menu": "Menu",
"hide": "Hide",
"show_image": "Show image",
"show_gif": "Show GIF",
"show_video_player": "Show video player",
"tap_then_hold_to_show_menu": "Tap then hold to show menu"
}, },
"tag": { "tag": {
"url": "URL", "url": "URL",
@ -149,6 +155,12 @@
"hashtag": "Hashtag", "hashtag": "Hashtag",
"email": "Email", "email": "Email",
"emoji": "Emoji" "emoji": "Emoji"
},
"visibility": {
"unlisted": "Everyone can see this post but not display in the public timeline.",
"private": "Only their followers can see this post.",
"private_from_me": "Only my followers can see this post.",
"direct": "Only mentioned user can see this post."
} }
}, },
"friendship": { "friendship": {
@ -193,10 +205,14 @@
}, },
"scene": { "scene": {
"welcome": { "welcome": {
"slogan": "Social networking\nback in your hands." "slogan": "Social networking\nback in your hands.",
"get_started": "Get Started",
"log_in": "Log In"
}, },
"server_picker": { "server_picker": {
"title": "Pick a server,\nany server.", "title": "Mastodon is made of users in different communities.",
"subtitle": "Pick a community based on your interests, region, or a general purpose one.",
"subtitle_extend": "Pick a community based on your interests, region, or a general purpose one. Each community is operated by an entirely independent organization or individual.",
"button": { "button": {
"category": { "category": {
"all": "All", "all": "All",
@ -223,7 +239,7 @@
"category": "CATEGORY" "category": "CATEGORY"
}, },
"input": { "input": {
"placeholder": "Find a server or join your own..." "placeholder": "Search communities"
}, },
"empty_state": { "empty_state": {
"finding_servers": "Finding available servers...", "finding_servers": "Finding available servers...",
@ -232,7 +248,7 @@
} }
}, },
"register": { "register": {
"title": "Tell us about you.", "title": "Lets get you set up on %s",
"input": { "input": {
"avatar": { "avatar": {
"delete": "Delete" "delete": "Delete"
@ -249,6 +265,12 @@
}, },
"password": { "password": {
"placeholder": "password", "placeholder": "password",
"require": "Your password needs at least:",
"character_limit": "8 characters",
"accessibility": {
"checked": "checked",
"unchecked": "unchecked"
},
"hint": "Your password needs at least eight characters" "hint": "Your password needs at least eight characters"
}, },
"invite": { "invite": {
@ -286,7 +308,7 @@
}, },
"server_rules": { "server_rules": {
"title": "Some ground rules.", "title": "Some ground rules.",
"subtitle": "These rules are set by the admins of %s.", "subtitle": "These are set and enforced by the %s moderators.",
"prompt": "By continuing, youre subject to the terms of service and privacy policy for %s.", "prompt": "By continuing, youre subject to the terms of service and privacy policy for %s.",
"terms_of_service": "terms of service", "terms_of_service": "terms of service",
"privacy_policy": "privacy policy", "privacy_policy": "privacy policy",
@ -296,10 +318,10 @@
}, },
"confirm_email": { "confirm_email": {
"title": "One last thing.", "title": "One last thing.",
"subtitle": "We just sent an email to %s,\ntap the link to confirm your account.", "subtitle": "Tap the link we emailed to you to verify your account.",
"button": { "button": {
"open_email_app": "Open Email App", "open_email_app": "Open Email App",
"dont_receive_email": "I never got an email" "resend": "Resend"
}, },
"dont_receive_email": { "dont_receive_email": {
"title": "Check your email", "title": "Check your email",
@ -402,17 +424,33 @@
"segmented_control": { "segmented_control": {
"posts": "Posts", "posts": "Posts",
"replies": "Replies", "replies": "Replies",
"media": "Media" "posts_and_replies": "Posts and Replies",
"media": "Media",
"about": "About"
}, },
"relationship_action_alert": { "relationship_action_alert": {
"confirm_mute_user": {
"title": "Mute Account",
"message": "Confirm to mute %s"
},
"confirm_unmute_user": { "confirm_unmute_user": {
"title": "Unmute Account", "title": "Unmute Account",
"message": "Confirm to unmute %s" "message": "Confirm to unmute %s"
}, },
"confirm_unblock_usre": { "confirm_block_user": {
"title": "Block Account",
"message": "Confirm to block %s"
},
"confirm_unblock_user": {
"title": "Unblock Account", "title": "Unblock Account",
"message": "Confirm to unblock %s" "message": "Confirm to unblock %s"
} }
},
"accessibility": {
"show_avatar_image": "Show avatar image",
"edit_avatar_image": "Edit avatar image",
"show_banner_image": "Show banner image",
"double_tap_to_open_the_list": "Double tap to open the list"
} }
}, },
"follower": { "follower": {
@ -462,12 +500,14 @@
"Everything": "Everything", "Everything": "Everything",
"Mentions": "Mentions" "Mentions": "Mentions"
}, },
"user_followed_you": "%s followed you", "notification_description": {
"user_favorited your post": "%s favorited your post", "followed_you": "followed you",
"user_reblogged_your_post": "%s reblogged your post", "favorited_your_post": "favorited your post",
"user_mentioned_you": "%s mentioned you", "reblogged_your_post": "reblogged your post",
"user_requested_to_follow_you": "%s requested to follow you", "mentioned_you": "mentioned you",
"user_your_poll_has_ended": "%s Your poll has ended", "request_to_follow_you": "request to follow you",
"poll_has_ended": "poll has ended"
},
"keyobard": { "keyobard": {
"show_everything": "Show Everything", "show_everything": "Show Everything",
"show_mentions": "Show Mentions" "show_mentions": "Show Mentions"
@ -486,6 +526,13 @@
"light": "Always Light", "light": "Always Light",
"dark": "Always Dark" "dark": "Always Dark"
}, },
"look_and_feel": {
"title": "Look and Feel",
"use_system": "Use System",
"really_dark": "Really Dark",
"sorta_dark": "Sorta Dark",
"light": "Light"
},
"notifications": { "notifications": {
"title": "Notifications", "title": "Notifications",
"favorites": "Favorites my post", "favorites": "Favorites my post",
@ -505,7 +552,8 @@
"true_black_dark_mode": "True black dark mode", "true_black_dark_mode": "True black dark mode",
"disable_avatar_animation": "Disable animated avatars", "disable_avatar_animation": "Disable animated avatars",
"disable_emoji_animation": "Disable animated emojis", "disable_emoji_animation": "Disable animated emojis",
"using_default_browser": "Use default browser to open links" "using_default_browser": "Use default browser to open links",
"open_links_in_mastodon": "Open links in Mastodon"
}, },
"boring_zone": { "boring_zone": {
"title": "The Boring Zone", "title": "The Boring Zone",
@ -527,14 +575,17 @@
} }
}, },
"report": { "report": {
"title_report": "Report",
"title": "Report %s", "title": "Report %s",
"step1": "Step 1 of 2", "step1": "Step 1 of 2",
"step2": "Step 2 of 2", "step2": "Step 2 of 2",
"content1": "Are there any other posts youd like to add to the report?", "content1": "Are there any other posts youd like to add to the report?",
"content2": "Is there anything the moderators should know about this report?", "content2": "Is there anything the moderators should know about this report?",
"report_sent_title": "Thanks for reporting, well look into this.",
"send": "Send Report", "send": "Send Report",
"skip_to_send": "Send without comment", "skip_to_send": "Send without comment",
"text_placeholder": "Type or paste additional comments" "text_placeholder": "Type or paste additional comments",
"reported": "REPORTED"
}, },
"preview": { "preview": {
"keyboard": { "keyboard": {

File diff suppressed because it is too large Load Diff

View File

@ -48,16 +48,6 @@
ReferencedContainer = "container:Mastodon.xcodeproj"> ReferencedContainer = "container:Mastodon.xcodeproj">
</BuildableReference> </BuildableReference>
</TestableReference> </TestableReference>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "DB89B9F525C10FD0008580ED"
BuildableName = "CoreDataStackTests.xctest"
BlueprintName = "CoreDataStackTests"
ReferencedContainer = "container:Mastodon.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables> </Testables>
</TestAction> </TestAction>
<LaunchAction <LaunchAction

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<Scheme <Scheme
LastUpgradeVersion = "1250" LastUpgradeVersion = "1250"
version = "1.3"> version = "1.7">
<BuildAction <BuildAction
parallelizeBuildables = "YES" parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"> buildImplicitDependencies = "YES">
@ -20,16 +20,12 @@
ReferencedContainer = "container:Mastodon.xcodeproj"> ReferencedContainer = "container:Mastodon.xcodeproj">
</BuildableReference> </BuildableReference>
</BuildActionEntry> </BuildActionEntry>
</BuildActionEntries> <BuildActionEntry
</BuildAction> buildForTesting = "NO"
<TestAction buildForRunning = "NO"
buildConfiguration = "ASDK - Debug" buildForProfiling = "NO"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" buildForArchiving = "NO"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" buildForAnalyzing = "NO">
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
<TestableReference
skipped = "NO">
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
BlueprintIdentifier = "DB427DE725BAA00100D1B89D" BlueprintIdentifier = "DB427DE725BAA00100D1B89D"
@ -37,9 +33,13 @@
BlueprintName = "MastodonTests" BlueprintName = "MastodonTests"
ReferencedContainer = "container:Mastodon.xcodeproj"> ReferencedContainer = "container:Mastodon.xcodeproj">
</BuildableReference> </BuildableReference>
</TestableReference> </BuildActionEntry>
<TestableReference <BuildActionEntry
skipped = "NO"> buildForTesting = "NO"
buildForRunning = "NO"
buildForProfiling = "NO"
buildForArchiving = "NO"
buildForAnalyzing = "NO">
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
BlueprintIdentifier = "DB427DF225BAA00100D1B89D" BlueprintIdentifier = "DB427DF225BAA00100D1B89D"
@ -47,28 +47,32 @@
BlueprintName = "MastodonUITests" BlueprintName = "MastodonUITests"
ReferencedContainer = "container:Mastodon.xcodeproj"> ReferencedContainer = "container:Mastodon.xcodeproj">
</BuildableReference> </BuildableReference>
</TestableReference> </BuildActionEntry>
<TestableReference </BuildActionEntries>
skipped = "NO"> </BuildAction>
<BuildableReference <TestAction
BuildableIdentifier = "primary" buildConfiguration = "Release Snapshot"
BlueprintIdentifier = "DB89B9F525C10FD0008580ED"
BuildableName = "CoreDataStackTests.xctest"
BlueprintName = "CoreDataStackTests"
ReferencedContainer = "container:Mastodon.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "ASDK - Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<TestPlans>
<TestPlanReference
reference = "container:AppStoreSnapshotTestPlan.xctestplan"
default = "YES">
</TestPlanReference>
</TestPlans>
</TestAction>
<LaunchAction
buildConfiguration = "Release Snapshot"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
disableMainThreadChecker = "YES"
launchStyle = "0" launchStyle = "0"
useCustomWorkingDirectory = "NO" useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO" ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES" debugDocumentVersioning = "YES"
debugServiceExtension = "internal" debugServiceExtension = "internal"
enableGPUValidationMode = "1"
allowLocationSimulation = "YES"> allowLocationSimulation = "YES">
<BuildableProductRunnable <BuildableProductRunnable
runnableDebuggingMode = "0"> runnableDebuggingMode = "0">
@ -82,7 +86,7 @@
</BuildableProductRunnable> </BuildableProductRunnable>
</LaunchAction> </LaunchAction>
<ProfileAction <ProfileAction
buildConfiguration = "ASDK - Release" buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES" shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = "" savedToolIdentifier = ""
useCustomWorkingDirectory = "NO" useCustomWorkingDirectory = "NO"
@ -99,10 +103,10 @@
</BuildableProductRunnable> </BuildableProductRunnable>
</ProfileAction> </ProfileAction>
<AnalyzeAction <AnalyzeAction
buildConfiguration = "ASDK - Debug"> buildConfiguration = "Debug">
</AnalyzeAction> </AnalyzeAction>
<ArchiveAction <ArchiveAction
buildConfiguration = "ASDK - Release" buildConfiguration = "Release"
revealArchiveInOrganizer = "YES"> revealArchiveInOrganizer = "YES">
</ArchiveAction> </ArchiveAction>
</Scheme> </Scheme>

View File

@ -32,6 +32,9 @@
reference = "container:Mastodon/Mastodon.xctestplan" reference = "container:Mastodon/Mastodon.xctestplan"
default = "YES"> default = "YES">
</TestPlanReference> </TestPlanReference>
<TestPlanReference
reference = "container:AppStoreSnapshotTestPlan copy.xctestplan">
</TestPlanReference>
</TestPlans> </TestPlans>
<Testables> <Testables>
<TestableReference <TestableReference

View File

@ -1,97 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1250"
wasCreatedForAppExtension = "YES"
version = "2.0">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "DBF8AE12263293E400C9C23C"
BuildableName = "NotificationService.appex"
BlueprintName = "NotificationService"
ReferencedContainer = "container:Mastodon.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "DB427DD125BAA00100D1B89D"
BuildableName = "Mastodon.app"
BlueprintName = "Mastodon"
ReferencedContainer = "container:Mastodon.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = ""
selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
launchStyle = "0"
askForAppToLaunch = "Yes"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES"
launchAutomaticallySubstyle = "2">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "DB427DD125BAA00100D1B89D"
BuildableName = "Mastodon.app"
BlueprintName = "Mastodon"
ReferencedContainer = "container:Mastodon.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES"
askForAppToLaunch = "Yes"
launchAutomaticallySubstyle = "2">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "DB427DD125BAA00100D1B89D"
BuildableName = "Mastodon.app"
BlueprintName = "Mastodon"
ReferencedContainer = "container:Mastodon.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@ -6,28 +6,30 @@
<dict> <dict>
<key>AppShared.xcscheme_^#shared#^_</key> <key>AppShared.xcscheme_^#shared#^_</key>
<dict> <dict>
<key>isShown</key>
<true/>
<key>orderHint</key> <key>orderHint</key>
<integer>44</integer> <integer>3</integer>
</dict> </dict>
<key>CoreDataStack.xcscheme_^#shared#^_</key> <key>CoreDataStack.xcscheme_^#shared#^_</key>
<dict> <dict>
<key>orderHint</key> <key>orderHint</key>
<integer>45</integer> <integer>27</integer>
</dict>
<key>Mastodon - ASDK.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>4</integer>
</dict> </dict>
<key>Mastodon - RTL.xcscheme_^#shared#^_</key> <key>Mastodon - RTL.xcscheme_^#shared#^_</key>
<dict> <dict>
<key>orderHint</key> <key>orderHint</key>
<integer>17</integer> <integer>18</integer>
</dict> </dict>
<key>Mastodon - Release.xcscheme_^#shared#^_</key> <key>Mastodon - Release.xcscheme_^#shared#^_</key>
<dict> <dict>
<key>orderHint</key> <key>orderHint</key>
<integer>3</integer> <integer>1</integer>
</dict>
<key>Mastodon - Snapshot.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>2</integer>
</dict> </dict>
<key>Mastodon - ar.xcscheme_^#shared#^_</key> <key>Mastodon - ar.xcscheme_^#shared#^_</key>
<dict> <dict>
@ -102,7 +104,7 @@
<key>MastodonIntent.xcscheme_^#shared#^_</key> <key>MastodonIntent.xcscheme_^#shared#^_</key>
<dict> <dict>
<key>orderHint</key> <key>orderHint</key>
<integer>43</integer> <integer>49</integer>
</dict> </dict>
<key>MastodonIntents.xcscheme_^#shared#^_</key> <key>MastodonIntents.xcscheme_^#shared#^_</key>
<dict> <dict>
@ -117,15 +119,41 @@
<key>NotificationService.xcscheme_^#shared#^_</key> <key>NotificationService.xcscheme_^#shared#^_</key>
<dict> <dict>
<key>orderHint</key> <key>orderHint</key>
<integer>7</integer> <integer>51</integer>
</dict> </dict>
<key>ShareActionExtension.xcscheme_^#shared#^_</key> <key>ShareActionExtension.xcscheme_^#shared#^_</key>
<dict> <dict>
<key>orderHint</key> <key>orderHint</key>
<integer>42</integer> <integer>50</integer>
</dict> </dict>
</dict> </dict>
<key>SuppressBuildableAutocreation</key> <key>SuppressBuildableAutocreation</key>
<dict/> <dict>
<key>DB427DD125BAA00100D1B89D</key>
<dict>
<key>primary</key>
<true/>
</dict>
<key>DB427DE725BAA00100D1B89D</key>
<dict>
<key>primary</key>
<true/>
</dict>
<key>DB427DF225BAA00100D1B89D</key>
<dict>
<key>primary</key>
<true/>
</dict>
<key>DB68047E2637CD4C00430867</key>
<dict>
<key>primary</key>
<true/>
</dict>
<key>DB89B9F525C10FD0008580ED</key>
<dict>
<key>primary</key>
<true/>
</dict>
</dict>
</dict> </dict>
</plist> </plist>

View File

@ -6,8 +6,8 @@
"repositoryURL": "https://github.com/Alamofire/Alamofire.git", "repositoryURL": "https://github.com/Alamofire/Alamofire.git",
"state": { "state": {
"branch": null, "branch": null,
"revision": "d120af1e8638c7da36c8481fd61a66c0c08dc4fc", "revision": "f82c23a8a7ef8dc1a49a8bfc6a96883e79121864",
"version": "5.4.4" "version": "5.5.0"
} }
}, },
{ {
@ -57,7 +57,7 @@
}, },
{ {
"package": "FLAnimatedImage", "package": "FLAnimatedImage",
"repositoryURL": "https://github.com/Flipboard/FLAnimatedImage", "repositoryURL": "https://github.com/Flipboard/FLAnimatedImage.git",
"state": { "state": {
"branch": null, "branch": null,
"revision": "e7f9fd4681ae41bf6f3056db08af4f401d61da52", "revision": "e7f9fd4681ae41bf6f3056db08af4f401d61da52",
@ -96,8 +96,8 @@
"repositoryURL": "https://github.com/TwidereProject/MetaTextKit.git", "repositoryURL": "https://github.com/TwidereProject/MetaTextKit.git",
"state": { "state": {
"branch": null, "branch": null,
"revision": "7af4182f64329440a4656f2cba307cb5848e496a", "revision": "3ea336d3de7938dc112084c596a646e697b0feee",
"version": "2.1.2" "version": "2.2.1"
} }
}, },
{ {
@ -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": "a72df4849408da7e5d3c1b586797b7c601c41d1b", "revision": "2c53f531f1bedd253f55d85105409c28ed4a922c",
"version": "5.12.1" "version": "5.12.3"
} }
}, },
{ {
@ -195,8 +195,8 @@
"repositoryURL": "https://github.com/uias/Tabman", "repositoryURL": "https://github.com/uias/Tabman",
"state": { "state": {
"branch": null, "branch": null,
"revision": "f43489cdd743ba7ad86a422ebb5fcbf34e333df4", "revision": "a9f10cb862a32e6a22549836af013abd6b0692d3",
"version": "2.11.1" "version": "2.12.0"
} }
}, },
{ {
@ -213,8 +213,17 @@
"repositoryURL": "https://github.com/TimOliver/TOCropViewController.git", "repositoryURL": "https://github.com/TimOliver/TOCropViewController.git",
"state": { "state": {
"branch": null, "branch": null,
"revision": "dad97167bf1be16aeecd109130900995dd01c515", "revision": "d0470491f56e734731bbf77991944c0dfdee3e0e",
"version": "2.6.0" "version": "2.6.1"
}
},
{
"package": "UITextView+Placeholder",
"repositoryURL": "https://github.com/MainasuK/UITextView-Placeholder.git",
"state": {
"branch": null,
"revision": "20f513ded04a040cdf5467f0891849b1763ede3b",
"version": "1.4.1"
} }
} }
] ]

7
Mastodon/.sourcery.yml Normal file
View File

@ -0,0 +1,7 @@
sources:
- .
- ../MastodonSDK/Sources
templates:
- ./Template
output:
Generated

View File

@ -7,6 +7,8 @@
import UIKit import UIKit
import SafariServices import SafariServices
import MastodonAsset
import MastodonLocalization
final class SafariActivity: UIActivity { final class SafariActivity: UIActivity {
@ -22,7 +24,7 @@ final class SafariActivity: UIActivity {
} }
override var activityTitle: String? { override var activityTitle: String? {
return L10n.Common.Controls.Actions.openInSafari return UserDefaults.shared.preferredUsingDefaultBrowser ? L10n.Common.Controls.Actions.openInBrowser : L10n.Common.Controls.Actions.openInSafari
} }
override var activityImage: UIImage? { override var activityImage: UIImage? {
@ -55,8 +57,10 @@ final class SafariActivity: UIActivity {
return return
} }
sceneCoordinator?.present(scene: .safari(url: url as URL), from: nil, transition: .safariPresent(animated: true, completion: nil)) Task {
activityDidFinish(true) await sceneCoordinator?.present(scene: .safari(url: url as URL), from: nil, transition: .safariPresent(animated: true, completion: nil))
activityDidFinish(true)
}
} }
} }

View File

@ -0,0 +1,13 @@
//
// ShareActivityProvider.swift
// Mastodon
//
// Created by MainasuK on 2022-1-25.
//
import UIKit
protocol ShareActivityProvider {
var activities: [Any] { get }
var applicationActivities: [UIActivity] { get }
}

View File

@ -10,6 +10,8 @@ import SafariServices
import CoreDataStack import CoreDataStack
import MastodonSDK import MastodonSDK
import PanModal import PanModal
import MastodonAsset
import MastodonLocalization
final public class SceneCoordinator { final public class SceneCoordinator {
@ -43,7 +45,7 @@ final public class SceneCoordinator {
return Just(nil).eraseToAnyPublisher() return Just(nil).eraseToAnyPublisher()
} }
let accessToken = pushNotification._accessToken // use raw accessToken value without normalize let accessToken = pushNotification.accessToken // use raw accessToken value without normalize
if currentActiveAuthenticationBox.userAuthorization.accessToken == accessToken { if currentActiveAuthenticationBox.userAuthorization.accessToken == accessToken {
// do nothing if notification for current account // do nothing if notification for current account
return Just(pushNotification).eraseToAnyPublisher() return Just(pushNotification).eraseToAnyPublisher()
@ -157,11 +159,6 @@ extension SceneCoordinator {
case mastodonConfirmEmail(viewModel: MastodonConfirmEmailViewModel) case mastodonConfirmEmail(viewModel: MastodonConfirmEmailViewModel)
case mastodonResendEmail(viewModel: MastodonResendEmailViewModel) case mastodonResendEmail(viewModel: MastodonResendEmailViewModel)
case mastodonWebView(viewModel:WebViewModel) case mastodonWebView(viewModel:WebViewModel)
#if ASDK
// ASDK
case asyncHome
#endif
// search // search
case searchDetail(viewModel: SearchDetailViewModel) case searchDetail(viewModel: SearchDetailViewModel)
@ -187,6 +184,8 @@ extension SceneCoordinator {
// report // report
case report(viewModel: ReportViewModel) case report(viewModel: ReportViewModel)
case reportSupplementary(viewModel: ReportSupplementaryViewModel)
case reportResult(viewModel: ReportResultViewModel)
// suggestion account // suggestion account
case suggestionAccount(viewModel: SuggestionAccountViewModel) case suggestionAccount(viewModel: SuggestionAccountViewModel)
@ -199,10 +198,6 @@ extension SceneCoordinator {
case alertController(alertController: UIAlertController) case alertController(alertController: UIAlertController)
case activityViewController(activityViewController: UIActivityViewController, sourceView: UIView?, barButtonItem: UIBarButtonItem?) case activityViewController(activityViewController: UIActivityViewController, sourceView: UIView?, barButtonItem: UIBarButtonItem?)
#if DEBUG
case publicTimeline
#endif
var isOnboarding: Bool { var isOnboarding: Bool {
switch self { switch self {
case .welcome, case .welcome,
@ -216,7 +211,7 @@ extension SceneCoordinator {
return false return false
} }
} }
} } // end enum Scene { }
} }
extension SceneCoordinator { extension SceneCoordinator {
@ -260,7 +255,7 @@ extension SceneCoordinator {
DispatchQueue.main.async { DispatchQueue.main.async {
self.present( self.present(
scene: .welcome, scene: .welcome,
from: nil, from: self.sceneDelegate.window?.rootViewController,
transition: .modal(animated: animated, completion: nil) transition: .modal(animated: animated, completion: nil)
) )
} }
@ -271,6 +266,7 @@ extension SceneCoordinator {
} }
@discardableResult @discardableResult
@MainActor
func present(scene: Scene, from sender: UIViewController?, transition: Transition) -> UIViewController? { func present(scene: Scene, from sender: UIViewController?, transition: Transition) -> UIViewController? {
guard let viewController = get(scene: scene) else { guard let viewController = get(scene: scene) else {
return nil return nil
@ -311,7 +307,7 @@ extension SceneCoordinator {
case .modal(let animated, let completion): case .modal(let animated, let completion):
let modalNavigationController: UINavigationController = { let modalNavigationController: UINavigationController = {
if scene.isOnboarding { if scene.isOnboarding {
return AdaptiveStatusBarStyleNavigationController(rootViewController: viewController) return OnboardingNavigationController(rootViewController: viewController)
} else { } else {
return UINavigationController(rootViewController: viewController) return UINavigationController(rootViewController: viewController)
} }
@ -412,11 +408,6 @@ private extension SceneCoordinator {
let _viewController = WebViewController() let _viewController = WebViewController()
_viewController.viewModel = viewModel _viewController.viewModel = viewModel
viewController = _viewController viewController = _viewController
#if ASDK
case .asyncHome:
let _viewController = AsyncHomeTimelineViewController()
viewController = _viewController
#endif
case .searchDetail(let viewModel): case .searchDetail(let viewModel):
let _viewController = SearchDetailViewController() let _viewController = SearchDetailViewController()
_viewController.viewModel = viewModel _viewController.viewModel = viewModel
@ -452,6 +443,18 @@ private extension SceneCoordinator {
let _viewController = FollowingListViewController() let _viewController = FollowingListViewController()
_viewController.viewModel = viewModel _viewController.viewModel = viewModel
viewController = _viewController viewController = _viewController
case .report(let viewModel):
let _viewController = ReportViewController()
_viewController.viewModel = viewModel
viewController = _viewController
case .reportSupplementary(let viewModel):
let _viewController = ReportSupplementaryViewController()
_viewController.viewModel = viewModel
viewController = _viewController
case .reportResult(let viewModel):
let _viewController = ReportResultViewController()
_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
@ -487,16 +490,6 @@ private extension SceneCoordinator {
let _viewController = SettingsViewController() let _viewController = SettingsViewController()
_viewController.viewModel = viewModel _viewController.viewModel = viewModel
viewController = _viewController viewController = _viewController
case .report(let viewModel):
let _viewController = ReportViewController()
_viewController.viewModel = viewModel
viewController = _viewController
#if DEBUG
case .publicTimeline:
let _viewController = PublicTimelineViewController()
_viewController.viewModel = PublicTimelineViewModel(context: appContext)
viewController = _viewController
#endif
} }
setupDependency(for: viewController as? NeedsDependency) setupDependency(for: viewController as? NeedsDependency)

View File

@ -0,0 +1,15 @@
//
// SelectedAccountItem.swift
// Mastodon
//
// Created by sxiaojian on 2021/4/22.
//
import CoreData
import Foundation
import CoreDataStack
enum SelectedAccountItem: Hashable {
case account(ManagedObjectRecord<MastodonUser>)
case placeHolder(uuid: UUID)
}

View File

@ -17,15 +17,17 @@ enum SelectedAccountSection: Equatable, Hashable {
extension SelectedAccountSection { extension SelectedAccountSection {
static func collectionViewDiffableDataSource( static func collectionViewDiffableDataSource(
for collectionView: UICollectionView, collectionView: UICollectionView,
managedObjectContext: NSManagedObjectContext context: AppContext
) -> UICollectionViewDiffableDataSource<SelectedAccountSection, SelectedAccountItem> { ) -> UICollectionViewDiffableDataSource<SelectedAccountSection, SelectedAccountItem> {
UICollectionViewDiffableDataSource(collectionView: collectionView) { collectionView, indexPath, item -> UICollectionViewCell? in UICollectionViewDiffableDataSource(collectionView: collectionView) { collectionView, indexPath, item -> UICollectionViewCell? in
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: String(describing: SuggestionAccountCollectionViewCell.self), for: indexPath) as! SuggestionAccountCollectionViewCell let cell = collectionView.dequeueReusableCell(withReuseIdentifier: String(describing: SuggestionAccountCollectionViewCell.self), for: indexPath) as! SuggestionAccountCollectionViewCell
switch item { switch item {
case .accountObjectID(let objectID): case .account(let record):
let user = managedObjectContext.object(with: objectID) as! MastodonUser context.managedObjectContext.performAndWait {
cell.config(with: user) guard let user = record.object(in: context.managedObjectContext) else { return }
cell.config(with: user)
}
case .placeHolder: case .placeHolder:
cell.configAsPlaceHolder() cell.configAsPlaceHolder()
} }

View File

@ -8,6 +8,8 @@
import UIKit import UIKit
import MastodonSDK import MastodonSDK
import MastodonMeta import MastodonMeta
import MastodonAsset
import MastodonLocalization
enum AutoCompleteSection: Equatable, Hashable { enum AutoCompleteSection: Equatable, Hashable {
case main case main
@ -80,7 +82,7 @@ extension AutoCompleteSection {
} }
cell.subtitleLabel.text = "@" + account.acct cell.subtitleLabel.text = "@" + account.acct
cell.avatarImageView.isHidden = false cell.avatarImageView.isHidden = false
cell.configure(with: AvatarConfigurableViewConfiguration(avatarImageURL: URL(string: account.avatar))) cell.avatarImageView.configure(configuration: .init(url: URL(string: account.avatar)))
} }
private static func configureEmoji(cell: AutoCompleteTableViewCell, emoji: Mastodon.Entity.Emoji, isFirst: Bool) { private static func configureEmoji(cell: AutoCompleteTableViewCell, emoji: Mastodon.Entity.Emoji, isFirst: Bool) {
@ -90,7 +92,7 @@ extension AutoCompleteSection {
// cell.subtitleLabel.text = isFirst ? L10n.Scene.Compose.AutoComplete.spaceToAdd : " " // cell.subtitleLabel.text = isFirst ? L10n.Scene.Compose.AutoComplete.spaceToAdd : " "
cell.subtitleLabel.text = " " cell.subtitleLabel.text = " "
cell.avatarImageView.isHidden = false cell.avatarImageView.isHidden = false
cell.configure(with: AvatarConfigurableViewConfiguration(avatarImageURL: URL(string: emoji.url))) cell.avatarImageView.configure(configuration: .init(url: URL(string: emoji.url)))
} }
} }

View File

@ -9,11 +9,12 @@ import Foundation
import Combine import Combine
import CoreData import CoreData
import MastodonMeta import MastodonMeta
import CoreDataStack
/// Note: update Equatable when change case /// Note: update Equatable when change case
enum ComposeStatusItem { enum ComposeStatusItem {
case replyTo(statusObjectID: NSManagedObjectID) case replyTo(record: ManagedObjectRecord<Status>)
case input(replyToStatusObjectID: NSManagedObjectID?, attribute: ComposeStatusAttribute) case input(replyTo: ManagedObjectRecord<Status>?, attribute: ComposeStatusAttribute)
case attachment(attachmentAttribute: ComposeStatusAttachmentAttribute) case attachment(attachmentAttribute: ComposeStatusAttachmentAttribute)
case pollOption(pollOptionAttributes: [ComposeStatusPollItem.PollOptionAttribute], pollExpiresOptionAttribute: ComposeStatusPollItem.PollExpiresOptionAttribute) case pollOption(pollOptionAttributes: [ComposeStatusPollItem.PollOptionAttribute], pollExpiresOptionAttribute: ComposeStatusPollItem.PollExpiresOptionAttribute)
} }
@ -21,26 +22,21 @@ enum ComposeStatusItem {
extension ComposeStatusItem: Hashable { } extension ComposeStatusItem: Hashable { }
extension ComposeStatusItem { extension ComposeStatusItem {
final class ComposeStatusAttribute: Equatable, Hashable { final class ComposeStatusAttribute: Hashable {
private let id = UUID() private let id = UUID()
let avatarURL = CurrentValueSubject<URL?, Never>(nil)
let displayName = CurrentValueSubject<String?, Never>(nil)
let emojiMeta = CurrentValueSubject<MastodonContent.Emojis, Never>([:])
let username = CurrentValueSubject<String?, Never>(nil)
let composeContent = CurrentValueSubject<String?, Never>(nil)
let isContentWarningComposing = CurrentValueSubject<Bool, Never>(false) @Published var author: ManagedObjectRecord<MastodonUser>?
let contentWarningContent = CurrentValueSubject<String, Never>("")
@Published var composeContent: String?
@Published var isContentWarningComposing = false
@Published var contentWarningContent = ""
static func == (lhs: ComposeStatusAttribute, rhs: ComposeStatusAttribute) -> Bool { static func == (lhs: ComposeStatusAttribute, rhs: ComposeStatusAttribute) -> Bool {
return lhs.avatarURL.value == rhs.avatarURL.value && return lhs.author == rhs.author
lhs.displayName.value == rhs.displayName.value && && lhs.composeContent == rhs.composeContent
lhs.emojiMeta.value == rhs.emojiMeta.value && && lhs.isContentWarningComposing == rhs.isContentWarningComposing
lhs.username.value == rhs.username.value && && lhs.contentWarningContent == rhs.contentWarningContent
lhs.composeContent.value == rhs.composeContent.value &&
lhs.isContentWarningComposing.value == rhs.isContentWarningComposing.value &&
lhs.contentWarningContent.value == rhs.contentWarningContent.value
} }
func hash(into hasher: inout Hasher) { func hash(into hasher: inout Hasher) {

View File

@ -7,6 +7,8 @@
import Foundation import Foundation
import Combine import Combine
import MastodonAsset
import MastodonLocalization
enum ComposeStatusPollItem { enum ComposeStatusPollItem {
case pollOption(attribute: PollOptionAttribute) case pollOption(attribute: PollOptionAttribute)

Some files were not shown because too many files have changed in this diff Show More