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 \
-scheme Mastodon \
-disableAutomaticPackageResolution \
-destination "platform=iOS Simulator,name=iPhone SE (2nd generation)" \
clean \
build | xcpretty
build | xcpretty

View File

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

View File

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

View File

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

View File

@ -6,6 +6,7 @@
//
import UIKit
import MastodonCommon
extension UserDefaults {
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>
</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>
<dict>
<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";
"RxSqsb" = "Post";
"RxSqsb" = "Publication";
"WCIR3D" = "Publier du ${content} sur Mastodon";
@ -24,9 +24,9 @@
"Zo4jgJ" = "Visibilité de la publication";
"apSxMG-dYQ5NN" = "There are ${count} options matching Public.";
"apSxMG-dYQ5NN" = "Il y a ${count} options correspondant à « Public ».";
"apSxMG-ehFLjY" = "There are ${count} options matching Followers Only.";
"apSxMG-ehFLjY" = "Il y a ${count} options correspondant à « Abonnés uniquement ».";
"ayoYEb-dYQ5NN" = "${content}, Public";

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

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}";
"ZbSjzC" = "Visibility";
"ZbSjzC" = "Näkyvyys";
"Zo4jgJ" = "Post Visibility";
"Zo4jgJ" = "Julkaisun näkyvyys";
"apSxMG-dYQ5NN" = "There are ${count} options matching Public.";
"apSxMG-dYQ5NN" = "On ${count} vaihtoehtoa, jotka vastaavat Julkinen.";
"apSxMG-ehFLjY" = "There are ${count} options matching Followers Only.";
"apSxMG-ehFLjY" = "On ${count} vaihtoehtoa, jotka vastaavat Vain seuraajat.";
"ayoYEb-dYQ5NN" = "${content}, Public";
"ayoYEb-dYQ5NN" = "${content}, julkinen";
"ayoYEb-ehFLjY" = "${content}, Followers Only";
"ayoYEb-ehFLjY" = "${content}, vain seuraajat";
"dUyuGg" = "Post on Mastodon";
"dUyuGg" = "Julkaise Mastodonissa";
"dYQ5NN" = "Public";
"dYQ5NN" = "Julkinen";
"ehFLjY" = "Followers Only";
"ehFLjY" = "Vain seuraajat";
"gfePDu" = "Posting failed. ${failureReason}";
"gfePDu" = "Julkaiseminen epäonnistui. ${failureReason}";
"k7dbKQ" = "Post was sent successfully.";
"k7dbKQ" = "Julkaisu lähetettiin onnistuneesti.";
"oGiqmY-dYQ5NN" = "Just to confirm, you wanted Public?";
"oGiqmY-dYQ5NN" = "Vahvitukseksi, halusit Julkinen?";
"oGiqmY-ehFLjY" = "Just to confirm, you wanted Followers Only?";
"oGiqmY-ehFLjY" = "Vahvitstukseksi, halusit Vain seuraajat?";
"rM6dvp" = "URL";
"ryJLwG" = "Post was sent successfully. ";
"ryJLwG" = "Julkaisu lähetettiin onnistuneesti. ";

View File

@ -5,7 +5,7 @@
<key>There are ${count} options matching ${content}. - 2</key>
<dict>
<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>
<dict>
<key>NSStringFormatSpecTypeKey</key>
@ -13,15 +13,15 @@
<key>NSStringFormatValueTypeKey</key>
<string>%ld</string>
<key>one</key>
<string>1 option</string>
<string>1 vaihtoehto</string>
<key>other</key>
<string>%ld options</string>
<string>%ld vaihtoehtoa</string>
</dict>
</dict>
<key>There are ${count} options matching ${visibility}.</key>
<dict>
<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>
<dict>
<key>NSStringFormatSpecTypeKey</key>
@ -29,9 +29,9 @@
<key>NSStringFormatValueTypeKey</key>
<string>%ld</string>
<key>one</key>
<string>1 option</string>
<string>1 vaihtoehto</string>
<key>other</key>
<string>%ld options</string>
<string>%ld vaihtoehtoa</string>
</dict>
</dict>
</dict>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -13,9 +13,9 @@
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 unread notification</string>
<string>1 notificación no leída</string>
<key>other</key>
<string>%ld unread notification</string>
<string>%ld notificaciones no leídas</string>
</dict>
</dict>
<key>a11y.plural.count.input_limit_exceeds</key>

View File

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

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

View File

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

View File

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

View File

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

View File

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

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>
<string>ld</string>
<key>other</key>
<string>%ld前</string>
<string>%ldか月前</string>
</dict>
</dict>
<key>date.day.ago.abbr</key>

View File

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

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

@ -32,6 +32,9 @@
reference = "container:Mastodon/Mastodon.xctestplan"
default = "YES">
</TestPlanReference>
<TestPlanReference
reference = "container:AppStoreSnapshotTestPlan copy.xctestplan">
</TestPlanReference>
</TestPlans>
<Testables>
<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>
<key>AppShared.xcscheme_^#shared#^_</key>
<dict>
<key>isShown</key>
<true/>
<key>orderHint</key>
<integer>44</integer>
<integer>3</integer>
</dict>
<key>CoreDataStack.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>45</integer>
</dict>
<key>Mastodon - ASDK.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>4</integer>
<integer>27</integer>
</dict>
<key>Mastodon - RTL.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>17</integer>
<integer>18</integer>
</dict>
<key>Mastodon - Release.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>3</integer>
<integer>1</integer>
</dict>
<key>Mastodon - Snapshot.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>2</integer>
</dict>
<key>Mastodon - ar.xcscheme_^#shared#^_</key>
<dict>
@ -102,7 +104,7 @@
<key>MastodonIntent.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>43</integer>
<integer>49</integer>
</dict>
<key>MastodonIntents.xcscheme_^#shared#^_</key>
<dict>
@ -117,15 +119,41 @@
<key>NotificationService.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>7</integer>
<integer>51</integer>
</dict>
<key>ShareActionExtension.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>42</integer>
<integer>50</integer>
</dict>
</dict>
<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>
</plist>

View File

@ -6,8 +6,8 @@
"repositoryURL": "https://github.com/Alamofire/Alamofire.git",
"state": {
"branch": null,
"revision": "d120af1e8638c7da36c8481fd61a66c0c08dc4fc",
"version": "5.4.4"
"revision": "f82c23a8a7ef8dc1a49a8bfc6a96883e79121864",
"version": "5.5.0"
}
},
{
@ -57,7 +57,7 @@
},
{
"package": "FLAnimatedImage",
"repositoryURL": "https://github.com/Flipboard/FLAnimatedImage",
"repositoryURL": "https://github.com/Flipboard/FLAnimatedImage.git",
"state": {
"branch": null,
"revision": "e7f9fd4681ae41bf6f3056db08af4f401d61da52",
@ -96,8 +96,8 @@
"repositoryURL": "https://github.com/TwidereProject/MetaTextKit.git",
"state": {
"branch": null,
"revision": "7af4182f64329440a4656f2cba307cb5848e496a",
"version": "2.1.2"
"revision": "3ea336d3de7938dc112084c596a646e697b0feee",
"version": "2.2.1"
}
},
{
@ -141,8 +141,8 @@
"repositoryURL": "https://github.com/SDWebImage/SDWebImage.git",
"state": {
"branch": null,
"revision": "a72df4849408da7e5d3c1b586797b7c601c41d1b",
"version": "5.12.1"
"revision": "2c53f531f1bedd253f55d85105409c28ed4a922c",
"version": "5.12.3"
}
},
{
@ -195,8 +195,8 @@
"repositoryURL": "https://github.com/uias/Tabman",
"state": {
"branch": null,
"revision": "f43489cdd743ba7ad86a422ebb5fcbf34e333df4",
"version": "2.11.1"
"revision": "a9f10cb862a32e6a22549836af013abd6b0692d3",
"version": "2.12.0"
}
},
{
@ -213,8 +213,17 @@
"repositoryURL": "https://github.com/TimOliver/TOCropViewController.git",
"state": {
"branch": null,
"revision": "dad97167bf1be16aeecd109130900995dd01c515",
"version": "2.6.0"
"revision": "d0470491f56e734731bbf77991944c0dfdee3e0e",
"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 SafariServices
import MastodonAsset
import MastodonLocalization
final class SafariActivity: UIActivity {
@ -22,7 +24,7 @@ final class SafariActivity: UIActivity {
}
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? {
@ -55,8 +57,10 @@ final class SafariActivity: UIActivity {
return
}
sceneCoordinator?.present(scene: .safari(url: url as URL), from: nil, transition: .safariPresent(animated: true, completion: nil))
activityDidFinish(true)
Task {
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 MastodonSDK
import PanModal
import MastodonAsset
import MastodonLocalization
final public class SceneCoordinator {
@ -43,7 +45,7 @@ final public class SceneCoordinator {
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 {
// do nothing if notification for current account
return Just(pushNotification).eraseToAnyPublisher()
@ -157,11 +159,6 @@ extension SceneCoordinator {
case mastodonConfirmEmail(viewModel: MastodonConfirmEmailViewModel)
case mastodonResendEmail(viewModel: MastodonResendEmailViewModel)
case mastodonWebView(viewModel:WebViewModel)
#if ASDK
// ASDK
case asyncHome
#endif
// search
case searchDetail(viewModel: SearchDetailViewModel)
@ -187,6 +184,8 @@ extension SceneCoordinator {
// report
case report(viewModel: ReportViewModel)
case reportSupplementary(viewModel: ReportSupplementaryViewModel)
case reportResult(viewModel: ReportResultViewModel)
// suggestion account
case suggestionAccount(viewModel: SuggestionAccountViewModel)
@ -199,10 +198,6 @@ extension SceneCoordinator {
case alertController(alertController: UIAlertController)
case activityViewController(activityViewController: UIActivityViewController, sourceView: UIView?, barButtonItem: UIBarButtonItem?)
#if DEBUG
case publicTimeline
#endif
var isOnboarding: Bool {
switch self {
case .welcome,
@ -216,7 +211,7 @@ extension SceneCoordinator {
return false
}
}
}
} // end enum Scene { }
}
extension SceneCoordinator {
@ -260,7 +255,7 @@ extension SceneCoordinator {
DispatchQueue.main.async {
self.present(
scene: .welcome,
from: nil,
from: self.sceneDelegate.window?.rootViewController,
transition: .modal(animated: animated, completion: nil)
)
}
@ -271,6 +266,7 @@ extension SceneCoordinator {
}
@discardableResult
@MainActor
func present(scene: Scene, from sender: UIViewController?, transition: Transition) -> UIViewController? {
guard let viewController = get(scene: scene) else {
return nil
@ -311,7 +307,7 @@ extension SceneCoordinator {
case .modal(let animated, let completion):
let modalNavigationController: UINavigationController = {
if scene.isOnboarding {
return AdaptiveStatusBarStyleNavigationController(rootViewController: viewController)
return OnboardingNavigationController(rootViewController: viewController)
} else {
return UINavigationController(rootViewController: viewController)
}
@ -412,11 +408,6 @@ private extension SceneCoordinator {
let _viewController = WebViewController()
_viewController.viewModel = viewModel
viewController = _viewController
#if ASDK
case .asyncHome:
let _viewController = AsyncHomeTimelineViewController()
viewController = _viewController
#endif
case .searchDetail(let viewModel):
let _viewController = SearchDetailViewController()
_viewController.viewModel = viewModel
@ -452,6 +443,18 @@ private extension SceneCoordinator {
let _viewController = FollowingListViewController()
_viewController.viewModel = viewModel
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):
let _viewController = SuggestionAccountViewController()
_viewController.viewModel = viewModel
@ -487,16 +490,6 @@ private extension SceneCoordinator {
let _viewController = SettingsViewController()
_viewController.viewModel = viewModel
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)

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

View File

@ -8,6 +8,8 @@
import UIKit
import MastodonSDK
import MastodonMeta
import MastodonAsset
import MastodonLocalization
enum AutoCompleteSection: Equatable, Hashable {
case main
@ -80,7 +82,7 @@ extension AutoCompleteSection {
}
cell.subtitleLabel.text = "@" + account.acct
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) {
@ -90,7 +92,7 @@ extension AutoCompleteSection {
// cell.subtitleLabel.text = isFirst ? L10n.Scene.Compose.AutoComplete.spaceToAdd : " "
cell.subtitleLabel.text = " "
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 CoreData
import MastodonMeta
import CoreDataStack
/// Note: update Equatable when change case
enum ComposeStatusItem {
case replyTo(statusObjectID: NSManagedObjectID)
case input(replyToStatusObjectID: NSManagedObjectID?, attribute: ComposeStatusAttribute)
case replyTo(record: ManagedObjectRecord<Status>)
case input(replyTo: ManagedObjectRecord<Status>?, attribute: ComposeStatusAttribute)
case attachment(attachmentAttribute: ComposeStatusAttachmentAttribute)
case pollOption(pollOptionAttributes: [ComposeStatusPollItem.PollOptionAttribute], pollExpiresOptionAttribute: ComposeStatusPollItem.PollExpiresOptionAttribute)
}
@ -21,26 +22,21 @@ enum ComposeStatusItem {
extension ComposeStatusItem: Hashable { }
extension ComposeStatusItem {
final class ComposeStatusAttribute: Equatable, Hashable {
final class ComposeStatusAttribute: Hashable {
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)
let contentWarningContent = CurrentValueSubject<String, Never>("")
@Published var author: ManagedObjectRecord<MastodonUser>?
@Published var composeContent: String?
@Published var isContentWarningComposing = false
@Published var contentWarningContent = ""
static func == (lhs: ComposeStatusAttribute, rhs: ComposeStatusAttribute) -> Bool {
return lhs.avatarURL.value == rhs.avatarURL.value &&
lhs.displayName.value == rhs.displayName.value &&
lhs.emojiMeta.value == rhs.emojiMeta.value &&
lhs.username.value == rhs.username.value &&
lhs.composeContent.value == rhs.composeContent.value &&
lhs.isContentWarningComposing.value == rhs.isContentWarningComposing.value &&
lhs.contentWarningContent.value == rhs.contentWarningContent.value
return lhs.author == rhs.author
&& lhs.composeContent == rhs.composeContent
&& lhs.isContentWarningComposing == rhs.isContentWarningComposing
&& lhs.contentWarningContent == rhs.contentWarningContent
}
func hash(into hasher: inout Hasher) {

View File

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

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