Merge branch 'release/1.3.0' into develop

This commit is contained in:
CMK 2022-03-30 10:34:42 +08:00
commit a81a2276a4
277 changed files with 12040 additions and 4525 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

@ -17,6 +17,6 @@
<key>CFBundleShortVersionString</key>
<string>1.3.0</string>
<key>CFBundleVersion</key>
<string>96</string>
<string>109</string>
</dict>
</plist>

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

@ -0,0 +1,34 @@
# Acknowledgments
- [AlamofireImage](https://github.com/Alamofire/AlamofireImage)
- [AlamofireNetworkActivityIndicator](https://github.com/Alamofire/AlamofireNetworkActivityIndicator)
- [Alamofire](https://github.com/Alamofire/Alamofire)
- [CommonOSLog](https://github.com/mainasuk/CommonOSLog)
- [CryptoSwift](https://github.com/krzyzanowskim/CryptoSwift)
- [DateToolSwift](https://github.com/MatthewYork/DateTools)
- [DiffableDataSources](https://github.com/ra1028/DiffableDataSources)
- [DifferenceKit](https://github.com/ra1028/DifferenceKit)
- [FLAnimatedImage](https://github.com/Flipboard/FLAnimatedImage)
- [FLEX](https://github.com/FLEXTool/FLEX)
- [FPSIndicator](https://github.com/MainasuK/FPSIndicator)
- [Fuzi](https://github.com/cezheng/Fuzi)
- [Kanna](https://github.com/tid-kijyun/Kanna)
- [KeychainAccess](https://github.com/kishikawakatsumi/KeychainAccess.git)
- [Kingfisher](https://github.com/onevcat/Kingfisher)
- [MetaTextKit](https://github.com/TwidereProject/MetaTextKit)
- [Nuke-FLAnimatedImage-Plugin](https://github.com/kean/Nuke-FLAnimatedImage-Plugin)
- [Nuke](https://github.com/kean/Nuke)
- [Pageboy](https://github.com/uias/Pageboy#the-basics)
- [PanModal](https://github.com/slackhq/PanModal.git)
- [SDWebImage](https://github.com/SDWebImage/SDWebImage)
- [swift-collections](https://github.com/apple/swift-collections)
- [swift-nio](https://github.com/apple/swift-nio)
- [SwiftGen](https://github.com/SwiftGen/SwiftGen)
- [SwiftUI-Introspect](https://github.com/siteline/SwiftUI-Introspect)
- [SwiftyJSON](https://github.com/SwiftyJSON/SwiftyJSON)
- [Tabman](https://github.com/uias/Tabman)
- [TwidereX-iOS](https://github.com/TwidereProject/TwidereX-iOS)
- [ThirdPartyMailer](https://github.com/vtourraine/ThirdPartyMailer)
- [TOCropViewController](https://github.com/TimOliver/TOCropViewController)
- [TwitterProfile](https://github.com/OfTheWolf/TwitterProfile)
- [UITextView-Placeholder](https://github.com/devxoul/UITextView-Placeholder)

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

@ -56,7 +56,7 @@ 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

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,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 unread notification</string>
<key>other</key>
<string>%ld unread notification</string>
</dict>
</dict>
<key>a11y.plural.count.input_limit_exceeds</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>Input limit exceeds %#@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 character</string>
<key>other</key>
<string>%ld characters</string>
</dict>
</dict>
<key>a11y.plural.count.input_limit_remains</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>Input limit remains %#@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 character</string>
<key>other</key>
<string>%ld characters</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>post</string>
<key>other</key>
<string>posts</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 post</string>
<key>other</key>
<string>%ld posts</string>
</dict>
</dict>
<key>plural.count.favorite</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@favorite_count@</string>
<key>favorite_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 favorite</string>
<key>other</key>
<string>%ld favorites</string>
</dict>
</dict>
<key>plural.count.reblog</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@reblog_count@</string>
<key>reblog_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 reblog</string>
<key>other</key>
<string>%ld reblogs</string>
</dict>
</dict>
<key>plural.count.vote</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@vote_count@</string>
<key>vote_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 vote</string>
<key>other</key>
<string>%ld votes</string>
</dict>
</dict>
<key>plural.count.voter</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@voter_count@</string>
<key>voter_count</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 voter</string>
<key>other</key>
<string>%ld voters</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 people talking</string>
<key>other</key>
<string>%ld people talking</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 following</string>
<key>other</key>
<string>%ld following</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 follower</string>
<key>other</key>
<string>%ld followers</string>
</dict>
</dict>
<key>date.year.left</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count_year_left@</string>
<key>count_year_left</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 year left</string>
<key>other</key>
<string>%ld years left</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 months left</string>
<key>other</key>
<string>%ld months left</string>
</dict>
</dict>
<key>date.day.left</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count_day_left@</string>
<key>count_day_left</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 day left</string>
<key>other</key>
<string>%ld days left</string>
</dict>
</dict>
<key>date.hour.left</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@count_hour_left@</string>
<key>count_hour_left</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>ld</string>
<key>one</key>
<string>1 hour left</string>
<key>other</key>
<string>%ld hours left</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 minute left</string>
<key>other</key>
<string>%ld minutes left</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 second left</string>
<key>other</key>
<string>%ld seconds left</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>1y ago</string>
<key>other</key>
<string>%ldy ago</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>1M ago</string>
<key>other</key>
<string>%ldM ago</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>1d ago</string>
<key>other</key>
<string>%ldd ago</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>1h ago</string>
<key>other</key>
<string>%ldh ago</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>1m ago</string>
<key>other</key>
<string>%ldm ago</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>1s ago</string>
<key>other</key>
<string>%lds ago</string>
</dict>
</dict>
</dict>
</plist>

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

@ -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"
@ -141,7 +142,11 @@
"favorite": "Favorite",
"unfavorite": "Unfavorite",
"menu": "Menu",
"hide": "Hide"
"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",
@ -440,6 +445,12 @@
"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": {
@ -541,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",

View File

@ -37,7 +37,6 @@
2D35237A26256D920031AF25 /* NotificationSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D35237926256D920031AF25 /* NotificationSection.swift */; };
2D364F7225E66D7500204FDC /* MastodonResendEmailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D364F7125E66D7500204FDC /* MastodonResendEmailViewController.swift */; };
2D364F7825E66D8300204FDC /* MastodonResendEmailViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D364F7725E66D8300204FDC /* MastodonResendEmailViewModel.swift */; };
2D38F1C625CD37F400561493 /* ContentOffsetAdjustableTimelineViewControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D38F1C525CD37F400561493 /* ContentOffsetAdjustableTimelineViewControllerDelegate.swift */; };
2D38F1D525CD465300561493 /* HomeTimelineViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D38F1D425CD465300561493 /* HomeTimelineViewController.swift */; };
2D38F1E525CD46C100561493 /* HomeTimelineViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D38F1E425CD46C100561493 /* HomeTimelineViewModel.swift */; };
2D38F1EB25CD477000561493 /* HomeTimelineViewModel+LoadLatestState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D38F1EA25CD477000561493 /* HomeTimelineViewModel+LoadLatestState.swift */; };
@ -245,6 +244,7 @@
DB45FB0F25CA87D0005A8AC7 /* AuthenticationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB45FB0E25CA87D0005A8AC7 /* AuthenticationService.swift */; };
DB45FB1D25CA9D23005A8AC7 /* APIService+HomeTimeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB45FB1C25CA9D23005A8AC7 /* APIService+HomeTimeline.swift */; };
DB47229725F9EFAD00DA7F53 /* NSManagedObjectContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB47229625F9EFAD00DA7F53 /* NSManagedObjectContext.swift */; };
DB47AB6227CF752B00CD73C7 /* MastodonUISnapshotTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB47AB6127CF752B00CD73C7 /* MastodonUISnapshotTests.swift */; };
DB482A3F261331E8008AE74C /* UserTimelineViewModel+State.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB482A3E261331E8008AE74C /* UserTimelineViewModel+State.swift */; };
DB482A4B261340A7008AE74C /* APIService+UserTimeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB482A4A261340A7008AE74C /* APIService+UserTimeline.swift */; };
DB4924E226312AB200E9DB22 /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB4924E126312AB200E9DB22 /* NotificationService.swift */; };
@ -255,6 +255,7 @@
DB49A61F25FF32AA00B98345 /* EmojiService+CustomEmojiViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB49A61E25FF32AA00B98345 /* EmojiService+CustomEmojiViewModel.swift */; };
DB49A62525FF334C00B98345 /* EmojiService+CustomEmojiViewModel+LoadState.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB49A62425FF334C00B98345 /* EmojiService+CustomEmojiViewModel+LoadState.swift */; };
DB49A62B25FF36C700B98345 /* APIService+CustomEmoji.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB49A62A25FF36C700B98345 /* APIService+CustomEmoji.swift */; };
DB4AA6B327BA34B6009EC082 /* CellFrameCacheContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB4AA6B227BA34B6009EC082 /* CellFrameCacheContainer.swift */; };
DB4F0963269ED06300D62E92 /* SearchResultViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB4F0962269ED06300D62E92 /* SearchResultViewController.swift */; };
DB4F0966269ED52200D62E92 /* SearchResultViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB4F0965269ED52200D62E92 /* SearchResultViewModel.swift */; };
DB4F0968269ED8AD00D62E92 /* SearchHistoryTableHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB4F0967269ED8AD00D62E92 /* SearchHistoryTableHeaderView.swift */; };
@ -482,7 +483,6 @@
DBB45B5627B39FC9002DC5A7 /* MediaPreviewVideoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBB45B5527B39FC9002DC5A7 /* MediaPreviewVideoViewController.swift */; };
DBB45B5927B39FE4002DC5A7 /* MediaPreviewVideoViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBB45B5827B39FE4002DC5A7 /* MediaPreviewVideoViewModel.swift */; };
DBB45B5B27B3A109002DC5A7 /* MediaPreviewTransitionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBB45B5A27B3A109002DC5A7 /* MediaPreviewTransitionViewController.swift */; };
DBB45B5E27B4EB22002DC5A7 /* AdaptiveMarginStatusTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBB45B5D27B4EB22002DC5A7 /* AdaptiveMarginStatusTableViewCell.swift */; };
DBB45B6027B50A4F002DC5A7 /* RecommendAccountItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBB45B5F27B50A4F002DC5A7 /* RecommendAccountItem.swift */; };
DBB45B6227B51112002DC5A7 /* SuggestionAccountViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBB45B6127B51112002DC5A7 /* SuggestionAccountViewModel+Diffable.swift */; };
DBB525082611EAC0002F1F29 /* Tabman in Frameworks */ = {isa = PBXBuildFile; productRef = DBB525072611EAC0002F1F29 /* Tabman */; };
@ -546,6 +546,9 @@
DBCCC71E25F73297007E1AB6 /* APIService+Reblog.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBCCC71D25F73297007E1AB6 /* APIService+Reblog.swift */; };
DBD376AC2692ECDB007FEC24 /* ThemePreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBD376AB2692ECDB007FEC24 /* ThemePreference.swift */; };
DBD376B2269302A4007FEC24 /* UITableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBD376B1269302A4007FEC24 /* UITableViewCell.swift */; };
DBD5B1F627BCD3D200BD6B38 /* SuggestionAccountTableViewCell+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBD5B1F527BCD3D200BD6B38 /* SuggestionAccountTableViewCell+ViewModel.swift */; };
DBD5B1F827BCFD9D00BD6B38 /* DataSourceProvider+TableViewControllerNavigateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBD5B1F727BCFD9D00BD6B38 /* DataSourceProvider+TableViewControllerNavigateable.swift */; };
DBD5B1FA27BD013700BD6B38 /* DataSourceProvider+StatusTableViewControllerNavigateable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBD5B1F927BD013700BD6B38 /* DataSourceProvider+StatusTableViewControllerNavigateable.swift */; };
DBD9149025DF6D8D00903DFD /* APIService+Onboarding.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBD9148F25DF6D8D00903DFD /* APIService+Onboarding.swift */; };
DBE0821525CD382600FD6BBD /* MastodonRegisterViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBE0821425CD382600FD6BBD /* MastodonRegisterViewController.swift */; };
DBE0822425CD3F1E00FD6BBD /* MastodonRegisterViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBE0822325CD3F1E00FD6BBD /* MastodonRegisterViewModel.swift */; };
@ -558,7 +561,6 @@
DBE3CDFB261C6CA500430CC6 /* FavoriteViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBE3CDFA261C6CA500430CC6 /* FavoriteViewModel.swift */; };
DBE3CE01261D623D00430CC6 /* FavoriteViewModel+State.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBE3CE00261D623D00430CC6 /* FavoriteViewModel+State.swift */; };
DBE3CE07261D6A0E00430CC6 /* FavoriteViewModel+Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBE3CE06261D6A0E00430CC6 /* FavoriteViewModel+Diffable.swift */; };
DBE3CE13261D7D4200430CC6 /* StatusTableViewControllerAspect.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBE3CE12261D7D4200430CC6 /* StatusTableViewControllerAspect.swift */; };
DBE54AC62636C89F004E7C0B /* NotificationPreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBE54AC52636C89F004E7C0B /* NotificationPreference.swift */; };
DBE54ACC2636C8FD004E7C0B /* NotificationPreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBE54AC52636C89F004E7C0B /* NotificationPreference.swift */; };
DBF156DF2701B17600EC00B7 /* SidebarAddAccountCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBF156DE2701B17600EC00B7 /* SidebarAddAccountCollectionViewCell.swift */; };
@ -698,6 +700,8 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
0655B257371274BEB7EB1C19 /* Pods-Mastodon.release snapshot.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mastodon.release snapshot.xcconfig"; path = "Target Support Files/Pods-Mastodon/Pods-Mastodon.release snapshot.xcconfig"; sourceTree = "<group>"; };
0827D1674B2523503E8605F6 /* Pods-Mastodon-MastodonUITests.release snapshot.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mastodon-MastodonUITests.release snapshot.xcconfig"; path = "Target Support Files/Pods-Mastodon-MastodonUITests/Pods-Mastodon-MastodonUITests.release snapshot.xcconfig"; sourceTree = "<group>"; };
0F1E2D0A2615C39400C38565 /* DoubleTitleLabelNavigationBarTitleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DoubleTitleLabelNavigationBarTitleView.swift; sourceTree = "<group>"; };
0F2021FA2613262F000C64BF /* HashtagTimelineViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HashtagTimelineViewController.swift; sourceTree = "<group>"; };
0F202200261326E6000C64BF /* HashtagTimelineViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HashtagTimelineViewModel.swift; sourceTree = "<group>"; };
@ -717,6 +721,7 @@
159AC43EFE0A1F95FCB358A4 /* Pods-MastodonIntent.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MastodonIntent.release.xcconfig"; path = "Target Support Files/Pods-MastodonIntent/Pods-MastodonIntent.release.xcconfig"; sourceTree = "<group>"; };
164F0EBB267D4FE400249499 /* BoopSound.caf */ = {isa = PBXFileReference; lastKnownFileType = file; path = BoopSound.caf; sourceTree = "<group>"; };
1D6D967E77A5357E2C6110D9 /* Pods-Mastodon.asdk - debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mastodon.asdk - debug.xcconfig"; path = "Target Support Files/Pods-Mastodon/Pods-Mastodon.asdk - debug.xcconfig"; sourceTree = "<group>"; };
2C12EB4B3699D5D597027962 /* Pods-MastodonIntent.release snapshot.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MastodonIntent.release snapshot.xcconfig"; path = "Target Support Files/Pods-MastodonIntent/Pods-MastodonIntent.release snapshot.xcconfig"; sourceTree = "<group>"; };
2D198642261BF09500F0B013 /* SearchResultItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchResultItem.swift; sourceTree = "<group>"; };
2D198648261C0B8500F0B013 /* SearchResultSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchResultSection.swift; sourceTree = "<group>"; };
2D206B8525F5FB0900143C56 /* Double.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Double.swift; sourceTree = "<group>"; };
@ -729,7 +734,6 @@
2D35237926256D920031AF25 /* NotificationSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationSection.swift; sourceTree = "<group>"; };
2D364F7125E66D7500204FDC /* MastodonResendEmailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonResendEmailViewController.swift; sourceTree = "<group>"; };
2D364F7725E66D8300204FDC /* MastodonResendEmailViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonResendEmailViewModel.swift; sourceTree = "<group>"; };
2D38F1C525CD37F400561493 /* ContentOffsetAdjustableTimelineViewControllerDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentOffsetAdjustableTimelineViewControllerDelegate.swift; sourceTree = "<group>"; };
2D38F1D425CD465300561493 /* HomeTimelineViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeTimelineViewController.swift; sourceTree = "<group>"; };
2D38F1E425CD46C100561493 /* HomeTimelineViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeTimelineViewModel.swift; sourceTree = "<group>"; };
2D38F1EA25CD477000561493 /* HomeTimelineViewModel+LoadLatestState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HomeTimelineViewModel+LoadLatestState.swift"; sourceTree = "<group>"; };
@ -782,6 +786,7 @@
374AA339A20E0FAC75BCDA6D /* Pods_NotificationService.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_NotificationService.framework; sourceTree = BUILT_PRODUCTS_DIR; };
3B7FD8F28DDA8FBCE5562B78 /* Pods-NotificationService.asdk - debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationService.asdk - debug.xcconfig"; path = "Target Support Files/Pods-NotificationService/Pods-NotificationService.asdk - debug.xcconfig"; sourceTree = "<group>"; };
3C030226D3C73DCC23D67452 /* Pods_Mastodon_MastodonUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Mastodon_MastodonUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
3E08A432F40BA7B9CAA9DB68 /* Pods-AppShared.release snapshot.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AppShared.release snapshot.xcconfig"; path = "Target Support Files/Pods-AppShared/Pods-AppShared.release snapshot.xcconfig"; sourceTree = "<group>"; };
452147B2903DF38070FE56A2 /* Pods_MastodonTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MastodonTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
459EA4F43058CAB47719E963 /* Pods-Mastodon-MastodonUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mastodon-MastodonUITests.debug.xcconfig"; path = "Target Support Files/Pods-Mastodon-MastodonUITests/Pods-Mastodon-MastodonUITests.debug.xcconfig"; sourceTree = "<group>"; };
46DAB0EBDDFB678347CD96FF /* Pods-MastodonTests.asdk - release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MastodonTests.asdk - release.xcconfig"; path = "Target Support Files/Pods-MastodonTests/Pods-MastodonTests.asdk - release.xcconfig"; sourceTree = "<group>"; };
@ -813,6 +818,8 @@
819CEC9DCAD8E8E7BD85A7BB /* Pods-Mastodon.asdk.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mastodon.asdk.xcconfig"; path = "Target Support Files/Pods-Mastodon/Pods-Mastodon.asdk.xcconfig"; sourceTree = "<group>"; };
861BE60ED27430771CFD578D /* Pods-MastodonIntent.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MastodonIntent.debug.xcconfig"; path = "Target Support Files/Pods-MastodonIntent/Pods-MastodonIntent.debug.xcconfig"; sourceTree = "<group>"; };
8850E70A1D5FF51432E43653 /* Pods-Mastodon-MastodonUITests.asdk - release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mastodon-MastodonUITests.asdk - release.xcconfig"; path = "Target Support Files/Pods-Mastodon-MastodonUITests/Pods-Mastodon-MastodonUITests.asdk - release.xcconfig"; sourceTree = "<group>"; };
8ADD558BE5B8255E5764A54F /* Pods-NotificationService.release snapshot.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationService.release snapshot.xcconfig"; path = "Target Support Files/Pods-NotificationService/Pods-NotificationService.release snapshot.xcconfig"; sourceTree = "<group>"; };
8E79CCBE51FBC3F7FE8CF49F /* Pods-MastodonTests.release snapshot.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MastodonTests.release snapshot.xcconfig"; path = "Target Support Files/Pods-MastodonTests/Pods-MastodonTests.release snapshot.xcconfig"; sourceTree = "<group>"; };
8ED8C4B1F1BA2DCFF2926BB1 /* Pods-Mastodon-NotificationService.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Mastodon-NotificationService.debug.xcconfig"; path = "Target Support Files/Pods-Mastodon-NotificationService/Pods-Mastodon-NotificationService.debug.xcconfig"; sourceTree = "<group>"; };
9553C689FFA9EBC880CAB78D /* Pods-NotificationService.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationService.debug.xcconfig"; path = "Target Support Files/Pods-NotificationService/Pods-NotificationService.debug.xcconfig"; sourceTree = "<group>"; };
95AD0663479892A2109EEFD0 /* Pods-ShareActionExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ShareActionExtension.release.xcconfig"; path = "Target Support Files/Pods-ShareActionExtension/Pods-ShareActionExtension.release.xcconfig"; sourceTree = "<group>"; };
@ -969,6 +976,8 @@
DB45FB0E25CA87D0005A8AC7 /* AuthenticationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationService.swift; sourceTree = "<group>"; };
DB45FB1C25CA9D23005A8AC7 /* APIService+HomeTimeline.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+HomeTimeline.swift"; sourceTree = "<group>"; };
DB47229625F9EFAD00DA7F53 /* NSManagedObjectContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSManagedObjectContext.swift; sourceTree = "<group>"; };
DB47AB6127CF752B00CD73C7 /* MastodonUISnapshotTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonUISnapshotTests.swift; sourceTree = "<group>"; };
DB47AB6327CF858400CD73C7 /* AppStoreSnapshotTestPlan.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = AppStoreSnapshotTestPlan.xctestplan; sourceTree = "<group>"; };
DB482A3E261331E8008AE74C /* UserTimelineViewModel+State.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UserTimelineViewModel+State.swift"; sourceTree = "<group>"; };
DB482A4A261340A7008AE74C /* APIService+UserTimeline.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+UserTimeline.swift"; sourceTree = "<group>"; };
DB4924E126312AB200E9DB22 /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = "<group>"; };
@ -978,6 +987,7 @@
DB49A61E25FF32AA00B98345 /* EmojiService+CustomEmojiViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "EmojiService+CustomEmojiViewModel.swift"; sourceTree = "<group>"; };
DB49A62425FF334C00B98345 /* EmojiService+CustomEmojiViewModel+LoadState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "EmojiService+CustomEmojiViewModel+LoadState.swift"; sourceTree = "<group>"; };
DB49A62A25FF36C700B98345 /* APIService+CustomEmoji.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+CustomEmoji.swift"; sourceTree = "<group>"; };
DB4AA6B227BA34B6009EC082 /* CellFrameCacheContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CellFrameCacheContainer.swift; sourceTree = "<group>"; };
DB4B777F26CA4EFA00B087B3 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Intents.strings; sourceTree = "<group>"; };
DB4B778226CA4EFA00B087B3 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = "<group>"; };
DB4B778326CA4EFA00B087B3 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ru; path = ru.lproj/Intents.stringsdict; sourceTree = "<group>"; };
@ -1228,7 +1238,6 @@
DBB45B5527B39FC9002DC5A7 /* MediaPreviewVideoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaPreviewVideoViewController.swift; sourceTree = "<group>"; };
DBB45B5827B39FE4002DC5A7 /* MediaPreviewVideoViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaPreviewVideoViewModel.swift; sourceTree = "<group>"; };
DBB45B5A27B3A109002DC5A7 /* MediaPreviewTransitionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaPreviewTransitionViewController.swift; sourceTree = "<group>"; };
DBB45B5D27B4EB22002DC5A7 /* AdaptiveMarginStatusTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdaptiveMarginStatusTableViewCell.swift; sourceTree = "<group>"; };
DBB45B5F27B50A4F002DC5A7 /* RecommendAccountItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecommendAccountItem.swift; sourceTree = "<group>"; };
DBB45B6127B51112002DC5A7 /* SuggestionAccountViewModel+Diffable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SuggestionAccountViewModel+Diffable.swift"; sourceTree = "<group>"; };
DBB5250D2611EBAF002F1F29 /* ProfileSegmentedViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileSegmentedViewController.swift; sourceTree = "<group>"; };
@ -1280,10 +1289,10 @@
DBCCC71D25F73297007E1AB6 /* APIService+Reblog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Reblog.swift"; sourceTree = "<group>"; };
DBD376AB2692ECDB007FEC24 /* ThemePreference.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThemePreference.swift; sourceTree = "<group>"; };
DBD376B1269302A4007FEC24 /* UITableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UITableViewCell.swift; sourceTree = "<group>"; };
DBD5B1F527BCD3D200BD6B38 /* SuggestionAccountTableViewCell+ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SuggestionAccountTableViewCell+ViewModel.swift"; sourceTree = "<group>"; };
DBD5B1F727BCFD9D00BD6B38 /* DataSourceProvider+TableViewControllerNavigateable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DataSourceProvider+TableViewControllerNavigateable.swift"; sourceTree = "<group>"; };
DBD5B1F927BD013700BD6B38 /* DataSourceProvider+StatusTableViewControllerNavigateable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DataSourceProvider+StatusTableViewControllerNavigateable.swift"; sourceTree = "<group>"; };
DBD9148F25DF6D8D00903DFD /* APIService+Onboarding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Onboarding.swift"; sourceTree = "<group>"; };
DBDC1CF9272C0FD600055C3D /* ku-TR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ku-TR"; path = "ku-TR.lproj/Intents.strings"; sourceTree = "<group>"; };
DBDC1CFC272C0FD600055C3D /* ku-TR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ku-TR"; path = "ku-TR.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
DBDC1CFD272C0FD600055C3D /* ku-TR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "ku-TR"; path = "ku-TR.lproj/Intents.stringsdict"; sourceTree = "<group>"; };
DBE0821425CD382600FD6BBD /* MastodonRegisterViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonRegisterViewController.swift; sourceTree = "<group>"; };
DBE0822325CD3F1E00FD6BBD /* MastodonRegisterViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonRegisterViewModel.swift; sourceTree = "<group>"; };
DBE3CDBA261C427900430CC6 /* TimelineHeaderTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineHeaderTableViewCell.swift; sourceTree = "<group>"; };
@ -1292,8 +1301,10 @@
DBE3CDFA261C6CA500430CC6 /* FavoriteViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FavoriteViewModel.swift; sourceTree = "<group>"; };
DBE3CE00261D623D00430CC6 /* FavoriteViewModel+State.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "FavoriteViewModel+State.swift"; sourceTree = "<group>"; };
DBE3CE06261D6A0E00430CC6 /* FavoriteViewModel+Diffable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "FavoriteViewModel+Diffable.swift"; sourceTree = "<group>"; };
DBE3CE12261D7D4200430CC6 /* StatusTableViewControllerAspect.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusTableViewControllerAspect.swift; sourceTree = "<group>"; };
DBE54AC52636C89F004E7C0B /* NotificationPreference.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationPreference.swift; sourceTree = "<group>"; };
DBEB19E927E4F37B00B0E80E /* ku */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ku; path = ku.lproj/Intents.strings; sourceTree = "<group>"; };
DBEB19EA27E4F37B00B0E80E /* ku */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ku; path = ku.lproj/InfoPlist.strings; sourceTree = "<group>"; };
DBEB19EB27E4F37B00B0E80E /* ku */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ku; path = ku.lproj/Intents.stringsdict; sourceTree = "<group>"; };
DBF156DE2701B17600EC00B7 /* SidebarAddAccountCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarAddAccountCollectionViewCell.swift; sourceTree = "<group>"; };
DBF156E02702DA6800EC00B7 /* Mastodon-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Mastodon-Bridging-Header.h"; sourceTree = "<group>"; };
DBF156E12702DA6900EC00B7 /* UIStatusBarManager+HandleTapAction.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "UIStatusBarManager+HandleTapAction.m"; sourceTree = "<group>"; };
@ -1335,6 +1346,7 @@
ECA373ABA86BE3C2D7ED878E /* Pods-AppShared.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AppShared.release.xcconfig"; path = "Target Support Files/Pods-AppShared/Pods-AppShared.release.xcconfig"; sourceTree = "<group>"; };
EE13214BC0246BE5210CCC10 /* Pods-AppShared.asdk.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AppShared.asdk.xcconfig"; path = "Target Support Files/Pods-AppShared/Pods-AppShared.asdk.xcconfig"; sourceTree = "<group>"; };
F31E7502A7E3945B98C6CBAF /* Pods-NotificationService.asdk.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationService.asdk.xcconfig"; path = "Target Support Files/Pods-NotificationService/Pods-NotificationService.asdk.xcconfig"; sourceTree = "<group>"; };
F43DF6E8AB8C87914A64FC48 /* Pods-ShareActionExtension.release snapshot.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ShareActionExtension.release snapshot.xcconfig"; path = "Target Support Files/Pods-ShareActionExtension/Pods-ShareActionExtension.release snapshot.xcconfig"; sourceTree = "<group>"; };
F4A2A2D7000E477CA459ADA9 /* Pods_AppShared.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AppShared.framework; sourceTree = BUILT_PRODUCTS_DIR; };
F4C94BD75C96D0EFF5F6D961 /* Pods_MastodonIntent.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MastodonIntent.framework; sourceTree = BUILT_PRODUCTS_DIR; };
F920AD4EC23B0D00F5CCA58E /* Pods-MastodonIntent.asdk - release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MastodonIntent.asdk - release.xcconfig"; path = "Target Support Files/Pods-MastodonIntent/Pods-MastodonIntent.asdk - release.xcconfig"; sourceTree = "<group>"; };
@ -1536,6 +1548,13 @@
C3789232A52F43529CA67E95 /* Pods-MastodonIntent.asdk - debug.xcconfig */,
F920AD4EC23B0D00F5CCA58E /* Pods-MastodonIntent.asdk - release.xcconfig */,
159AC43EFE0A1F95FCB358A4 /* Pods-MastodonIntent.release.xcconfig */,
3E08A432F40BA7B9CAA9DB68 /* Pods-AppShared.release snapshot.xcconfig */,
0655B257371274BEB7EB1C19 /* Pods-Mastodon.release snapshot.xcconfig */,
0827D1674B2523503E8605F6 /* Pods-Mastodon-MastodonUITests.release snapshot.xcconfig */,
2C12EB4B3699D5D597027962 /* Pods-MastodonIntent.release snapshot.xcconfig */,
8E79CCBE51FBC3F7FE8CF49F /* Pods-MastodonTests.release snapshot.xcconfig */,
8ADD558BE5B8255E5764A54F /* Pods-NotificationService.release snapshot.xcconfig */,
F43DF6E8AB8C87914A64FC48 /* Pods-ShareActionExtension.release snapshot.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
@ -1668,14 +1687,13 @@
isa = PBXGroup;
children = (
DB697DD7278F4C34004EF2F7 /* Provider */,
DB0FCB7127952986006C02E2 /* NamingState.swift */,
2D5A3D3725CF8D9F002347D6 /* ScrollViewContainer.swift */,
2D38F1C525CD37F400561493 /* ContentOffsetAdjustableTimelineViewControllerDelegate.swift */,
DB4AA6B227BA34B6009EC082 /* CellFrameCacheContainer.swift */,
2D38F20725CD491300561493 /* DisposeBagCollectable.swift */,
DBE3CE12261D7D4200430CC6 /* StatusTableViewControllerAspect.swift */,
DB1D84372657B275000346B3 /* SegmentedControlNavigateable.swift */,
DB1D843326579931000346B3 /* TableViewControllerNavigateable.swift */,
DB1D842D26552C4D000346B3 /* StatusTableViewControllerNavigateable.swift */,
DB0FCB7127952986006C02E2 /* NamingState.swift */,
);
path = Protocol;
sourceTree = "<group>";
@ -1742,7 +1760,6 @@
DBE3CDBA261C427900430CC6 /* TimelineHeaderTableViewCell.swift */,
DB6B750327300B4000C70B6E /* TimelineFooterTableViewCell.swift */,
DB02CDAA26256A9500D0A2AF /* ThreadReplyLoaderTableViewCell.swift */,
DBB45B5D27B4EB22002DC5A7 /* AdaptiveMarginStatusTableViewCell.swift */,
);
path = TableviewCell;
sourceTree = "<group>";
@ -1771,6 +1788,7 @@
isa = PBXGroup;
children = (
2DAC9E45262FC9FD0062E1A6 /* SuggestionAccountTableViewCell.swift */,
DBD5B1F527BCD3D200BD6B38 /* SuggestionAccountTableViewCell+ViewModel.swift */,
);
path = TableViewCell;
sourceTree = "<group>";
@ -2078,6 +2096,7 @@
children = (
DBF53F5F25C14E88008AAC7B /* Mastodon.xctestplan */,
DBF53F6025C14E9D008AAC7B /* MastodonSDK.xctestplan */,
DB47AB6327CF858400CD73C7 /* AppStoreSnapshotTestPlan.xctestplan */,
DB3D0FED25BAA42200EAA174 /* MastodonSDK */,
DB427DD425BAA00100D1B89D /* Mastodon */,
DB427DEB25BAA00100D1B89D /* MastodonTests */,
@ -2144,6 +2163,7 @@
isa = PBXGroup;
children = (
DB427DF725BAA00100D1B89D /* MastodonUITests.swift */,
DB47AB6127CF752B00CD73C7 /* MastodonUISnapshotTests.swift */,
DB427DF925BAA00100D1B89D /* Info.plist */,
);
path = MastodonUITests;
@ -2494,6 +2514,8 @@
DB697DDA278F4DE3004EF2F7 /* DataSourceProvider+StatusTableViewCellDelegate.swift */,
DB023D2927A0FE5C005AC798 /* DataSourceProvider+NotificationTableViewCellDelegate.swift */,
DB0FCB7727957678006C02E2 /* DataSourceProvider+UITableViewDelegate.swift */,
DBD5B1F727BCFD9D00BD6B38 /* DataSourceProvider+TableViewControllerNavigateable.swift */,
DBD5B1F927BD013700BD6B38 /* DataSourceProvider+StatusTableViewControllerNavigateable.swift */,
);
path = Provider;
sourceTree = "<group>";
@ -2649,11 +2671,11 @@
DB9D6BFD25E4F57B0051B173 /* Notification */,
DB938EEB2623F52600E5B6C1 /* Thread */,
5B24BBD6262DB14800A9381B /* Report */,
DB9D6BEE25E4F5370051B173 /* Search */,
DB789A1025F9F29B0071ACA0 /* Compose */,
DB6180DE263919350018D199 /* MediaPreview */,
2DAC9E36262FC20B0062E1A6 /* SuggestionAccount */,
DB9D6C0825E4F5A60051B173 /* Profile */,
DB9D6BEE25E4F5370051B173 /* Search */,
5B90C455262599800002E742 /* Settings */,
);
path = Scene;
@ -3416,9 +3438,9 @@
ru,
"gd-GB",
th,
"ku-TR",
"eu-ES",
"sv-FI",
ku,
);
mainGroup = DB427DC925BAA00100D1B89D;
packageReferences = (
@ -3835,9 +3857,9 @@
DBA465952696E387002B41DB /* AppPreference.swift in Sources */,
2D8434F525FF465D00EECE90 /* HomeTimelineNavigationBarTitleViewModel.swift in Sources */,
DB938F0F2624119800E5B6C1 /* ThreadViewModel+LoadThreadState.swift in Sources */,
DBB45B5E27B4EB22002DC5A7 /* AdaptiveMarginStatusTableViewCell.swift in Sources */,
DB6180F226391CF40018D199 /* MediaPreviewImageViewModel.swift in Sources */,
DBA5E7A3263AD0A3004598BB /* PhotoLibraryService.swift in Sources */,
DBD5B1F627BCD3D200BD6B38 /* SuggestionAccountTableViewCell+ViewModel.swift in Sources */,
5DDDF1932617442700311060 /* Mastodon+Entity+Account.swift in Sources */,
DB63F767279A5EB300455B82 /* NotificationTimelineViewModel.swift in Sources */,
2D607AD826242FC500B70763 /* NotificationViewModel.swift in Sources */,
@ -4049,7 +4071,6 @@
DB8AF55025C13703002E6C99 /* MainTabBarController.swift in Sources */,
DB023D2C27A10464005AC798 /* NotificationTimelineViewController+DataSourceProvider.swift in Sources */,
DB9D6BE925E4F5340051B173 /* SearchViewController.swift in Sources */,
2D38F1C625CD37F400561493 /* ContentOffsetAdjustableTimelineViewControllerDelegate.swift in Sources */,
DBF1D257269DBAC600C1C08A /* SearchDetailViewModel.swift in Sources */,
DB03F7F52689B782007B274C /* ComposeTableView.swift in Sources */,
DBB45B5927B39FE4002DC5A7 /* MediaPreviewVideoViewModel.swift in Sources */,
@ -4064,6 +4085,7 @@
DB73BF4B27140C0800781945 /* UITableViewDiffableDataSource.swift in Sources */,
DBB525642612C988002F1F29 /* MeProfileViewModel.swift in Sources */,
DB6B74EF272FB55000C70B6E /* FollowerListViewController.swift in Sources */,
DB4AA6B327BA34B6009EC082 /* CellFrameCacheContainer.swift in Sources */,
DB0FCB942797E2B0006C02E2 /* SearchResultViewModel+Diffable.swift in Sources */,
DB63F752279944AA00455B82 /* SearchHistorySectionHeaderCollectionReusableView.swift in Sources */,
DBBC24C426A544B900398BB9 /* Theme.swift in Sources */,
@ -4127,6 +4149,7 @@
DB1FD45025F26FA1004CFCFC /* MastodonPickServerViewModel+Diffable.swift in Sources */,
DBD376AC2692ECDB007FEC24 /* ThemePreference.swift in Sources */,
DB4F097D26A03A5B00D62E92 /* SearchHistoryItem.swift in Sources */,
DBD5B1FA27BD013700BD6B38 /* DataSourceProvider+StatusTableViewControllerNavigateable.swift in Sources */,
DB68046C2636DC9E00430867 /* MastodonNotification.swift in Sources */,
DBAE3F9E2616E308004B8251 /* APIService+Mute.swift in Sources */,
DB427DD625BAA00100D1B89D /* AppDelegate.swift in Sources */,
@ -4240,6 +4263,7 @@
DB0FCB962797E6C2006C02E2 /* SearchResultViewController+DataSourceProvider.swift in Sources */,
DB66729C25F9F91F00D60309 /* ComposeStatusItem.swift in Sources */,
DB6180E326391A4C0018D199 /* ViewControllerAnimatedTransitioning.swift in Sources */,
DBD5B1F827BCFD9D00BD6B38 /* DataSourceProvider+TableViewControllerNavigateable.swift in Sources */,
0FB3D31E25E534C700AAD544 /* PickServerCategoryCollectionViewCell.swift in Sources */,
DB0FCB882796BDA9006C02E2 /* SearchItem.swift in Sources */,
DB336F3D278D80040031E64B /* FeedFetchedResultsController.swift in Sources */,
@ -4250,7 +4274,6 @@
2D6DE40026141DF600A63F6A /* SearchViewModel.swift in Sources */,
DB51D172262832380062B7A1 /* BlurHashDecode.swift in Sources */,
DBCCC71E25F73297007E1AB6 /* APIService+Reblog.swift in Sources */,
DBE3CE13261D7D4200430CC6 /* StatusTableViewControllerAspect.swift in Sources */,
DB0617FD27855BFE0030EE79 /* ServerRuleItem.swift in Sources */,
5BB04FD5262E7AFF0043BFF6 /* ReportViewController.swift in Sources */,
DBAE3F942616E28B004B8251 /* APIService+Follow.swift in Sources */,
@ -4269,6 +4292,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
DB47AB6227CF752B00CD73C7 /* MastodonUISnapshotTests.swift in Sources */,
DB427DF825BAA00100D1B89D /* MastodonUITests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -4415,9 +4439,9 @@
DB4B777F26CA4EFA00B087B3 /* ru */,
DB4B778426CA500E00B087B3 /* gd-GB */,
DB4B779226CA50BA00B087B3 /* th */,
DBDC1CF9272C0FD600055C3D /* ku-TR */,
DB126A4C278C063F005726EE /* eu-ES */,
DB126A56278C088D005726EE /* sv-FI */,
DBEB19E927E4F37B00B0E80E /* ku */,
);
name = Intents.intentdefinition;
sourceTree = "<group>";
@ -4438,9 +4462,9 @@
DB4B778226CA4EFA00B087B3 /* ru */,
DB4B778726CA500E00B087B3 /* gd-GB */,
DB4B779526CA50BA00B087B3 /* th */,
DBDC1CFC272C0FD600055C3D /* ku-TR */,
DB126A4F278C063F005726EE /* eu-ES */,
DB126A59278C088D005726EE /* sv-FI */,
DBEB19EA27E4F37B00B0E80E /* ku */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
@ -4477,9 +4501,9 @@
DB4B779026CA504900B087B3 /* fr */,
DB4B779126CA504A00B087B3 /* ja */,
DB4B779626CA50BA00B087B3 /* th */,
DBDC1CFD272C0FD600055C3D /* ku-TR */,
DB126A50278C063F005726EE /* eu-ES */,
DB126A5A278C088D005726EE /* sv-FI */,
DBEB19EB27E4F37B00B0E80E /* ku */,
);
name = Intents.stringsdict;
sourceTree = "<group>";
@ -4624,7 +4648,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Mastodon/Mastodon.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 96;
CURRENT_PROJECT_VERSION = 109;
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = Mastodon/Info.plist;
@ -4653,7 +4677,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Mastodon/Mastodon.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 96;
CURRENT_PROJECT_VERSION = 109;
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = Mastodon/Info.plist;
@ -4761,11 +4785,11 @@
APPLICATION_EXTENSION_API_ONLY = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 96;
CURRENT_PROJECT_VERSION = 109;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 96;
DYLIB_CURRENT_VERSION = 109;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = AppShared/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
@ -4792,11 +4816,11 @@
APPLICATION_EXTENSION_API_ONLY = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 96;
CURRENT_PROJECT_VERSION = 109;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 96;
DYLIB_CURRENT_VERSION = 109;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = AppShared/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
@ -4821,7 +4845,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = MastodonIntent/MastodonIntent.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 96;
CURRENT_PROJECT_VERSION = 109;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = MastodonIntent/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@ -4846,7 +4870,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = MastodonIntent/MastodonIntent.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 96;
CURRENT_PROJECT_VERSION = 109;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = MastodonIntent/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@ -4871,7 +4895,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = ShareActionExtension/ShareActionExtension.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 96;
CURRENT_PROJECT_VERSION = 109;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = ShareActionExtension/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@ -4896,7 +4920,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = ShareActionExtension/ShareActionExtension.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 96;
CURRENT_PROJECT_VERSION = 109;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = ShareActionExtension/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@ -4915,13 +4939,244 @@
};
name = Release;
};
DBEB19E127E4658E00B0E80E /* Release Snapshot */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
INTENTS_CODEGEN_LANGUAGE = Swift;
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = SNAPSHOT;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
};
name = "Release Snapshot";
};
DBEB19E227E4658E00B0E80E /* Release Snapshot */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 0655B257371274BEB7EB1C19 /* Pods-Mastodon.release snapshot.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Mastodon/Mastodon.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 109;
DEVELOPMENT_ASSET_PATHS = "Mastodon/Resources/Preview\\ Assets.xcassets";
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = Mastodon/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.7;
PRODUCT_BUNDLE_IDENTIFIER = org.joinmastodon.app;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "Mastodon/Vender/Mastodon-Bridging-Header.h";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
};
name = "Release Snapshot";
};
DBEB19E327E4658E00B0E80E /* Release Snapshot */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 8E79CCBE51FBC3F7FE8CF49F /* Pods-MastodonTests.release snapshot.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = MastodonTests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = org.joinmastodon.MastodonTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Mastodon.app/Mastodon";
};
name = "Release Snapshot";
};
DBEB19E427E4658E00B0E80E /* Release Snapshot */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 0827D1674B2523503E8605F6 /* Pods-Mastodon-MastodonUITests.release snapshot.xcconfig */;
buildSettings = {
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = MastodonUITests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = org.joinmastodon.MastodonUITests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
TEST_TARGET_NAME = Mastodon;
};
name = "Release Snapshot";
};
DBEB19E527E4658E00B0E80E /* Release Snapshot */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 3E08A432F40BA7B9CAA9DB68 /* Pods-AppShared.release snapshot.xcconfig */;
buildSettings = {
APPLICATION_EXTENSION_API_ONLY = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 109;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 109;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = AppShared/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
PRODUCT_BUNDLE_IDENTIFIER = org.joinmastodon.app.AppShared;
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = "Release Snapshot";
};
DBEB19E627E4658E00B0E80E /* Release Snapshot */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 8ADD558BE5B8255E5764A54F /* Pods-NotificationService.release snapshot.xcconfig */;
buildSettings = {
CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 109;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = NotificationService/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.0.7;
PRODUCT_BUNDLE_IDENTIFIER = org.joinmastodon.app.NotificationService;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
};
name = "Release Snapshot";
};
DBEB19E727E4658E00B0E80E /* Release Snapshot */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = F43DF6E8AB8C87914A64FC48 /* Pods-ShareActionExtension.release snapshot.xcconfig */;
buildSettings = {
CODE_SIGN_ENTITLEMENTS = ShareActionExtension/ShareActionExtension.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 109;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = ShareActionExtension/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.0.7;
PRODUCT_BUNDLE_IDENTIFIER = org.joinmastodon.app.ShareActionExtension;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "APP_EXTENSION $(inherited)";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
};
name = "Release Snapshot";
};
DBEB19E827E4658E00B0E80E /* Release Snapshot */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 2C12EB4B3699D5D597027962 /* Pods-MastodonIntent.release snapshot.xcconfig */;
buildSettings = {
CODE_SIGN_ENTITLEMENTS = MastodonIntent/MastodonIntent.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 109;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = MastodonIntent/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
MARKETING_VERSION = 1.0.7;
PRODUCT_BUNDLE_IDENTIFIER = org.joinmastodon.app.MastodonIntent;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "APP_EXTENSION $(inherited)";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
};
name = "Release Snapshot";
};
DBF8AE1C263293E400C9C23C /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 9553C689FFA9EBC880CAB78D /* Pods-NotificationService.debug.xcconfig */;
buildSettings = {
CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 96;
CURRENT_PROJECT_VERSION = 109;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = NotificationService/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@ -4945,7 +5200,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = NotificationService/NotificationService.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 96;
CURRENT_PROJECT_VERSION = 109;
DEVELOPMENT_TEAM = 5Z4GVSS33P;
INFOPLIST_FILE = NotificationService/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
@ -4971,6 +5226,7 @@
buildConfigurations = (
DB427DFA25BAA00100D1B89D /* Debug */,
DB427DFB25BAA00100D1B89D /* Release */,
DBEB19E127E4658E00B0E80E /* Release Snapshot */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
@ -4980,6 +5236,7 @@
buildConfigurations = (
DB427DFD25BAA00100D1B89D /* Debug */,
DB427DFE25BAA00100D1B89D /* Release */,
DBEB19E227E4658E00B0E80E /* Release Snapshot */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
@ -4989,6 +5246,7 @@
buildConfigurations = (
DB427E0025BAA00100D1B89D /* Debug */,
DB427E0125BAA00100D1B89D /* Release */,
DBEB19E327E4658E00B0E80E /* Release Snapshot */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
@ -4998,6 +5256,7 @@
buildConfigurations = (
DB427E0325BAA00100D1B89D /* Debug */,
DB427E0425BAA00100D1B89D /* Release */,
DBEB19E427E4658E00B0E80E /* Release Snapshot */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
@ -5007,6 +5266,7 @@
buildConfigurations = (
DB6804892637CD4C00430867 /* Debug */,
DB68048A2637CD4C00430867 /* Release */,
DBEB19E527E4658E00B0E80E /* Release Snapshot */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
@ -5016,6 +5276,7 @@
buildConfigurations = (
DB8FABD026AEC7B2008E5AF4 /* Debug */,
DB8FABD326AEC7B2008E5AF4 /* Release */,
DBEB19E827E4658E00B0E80E /* Release Snapshot */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
@ -5025,6 +5286,7 @@
buildConfigurations = (
DBC6461D26A170AB00B0E31B /* Debug */,
DBC6462026A170AB00B0E31B /* Release */,
DBEB19E727E4658E00B0E80E /* Release Snapshot */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
@ -5034,6 +5296,7 @@
buildConfigurations = (
DBF8AE1C263293E400C9C23C /* Debug */,
DBF8AE1D263293E400C9C23C /* Release */,
DBEB19E627E4658E00B0E80E /* Release Snapshot */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;

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,26 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1250"
wasCreatedForAppExtension = "YES"
version = "2.0">
version = "1.7">
<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"
@ -35,28 +20,60 @@
ReferencedContainer = "container:Mastodon.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "NO"
buildForRunning = "NO"
buildForProfiling = "NO"
buildForArchiving = "NO"
buildForAnalyzing = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "DB427DE725BAA00100D1B89D"
BuildableName = "MastodonTests.xctest"
BlueprintName = "MastodonTests"
ReferencedContainer = "container:Mastodon.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "NO"
buildForRunning = "NO"
buildForProfiling = "NO"
buildForArchiving = "NO"
buildForAnalyzing = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "DB427DF225BAA00100D1B89D"
BuildableName = "MastodonUITests.xctest"
BlueprintName = "MastodonUITests"
ReferencedContainer = "container:Mastodon.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
buildConfiguration = "Release Snapshot"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<TestPlans>
<TestPlanReference
reference = "container:AppStoreSnapshotTestPlan.xctestplan"
default = "YES">
</TestPlanReference>
</TestPlans>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = ""
selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
buildConfiguration = "Release Snapshot"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
disableMainThreadChecker = "YES"
launchStyle = "0"
askForAppToLaunch = "Yes"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES"
launchAutomaticallySubstyle = "2">
enableGPUValidationMode = "1"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
@ -73,9 +90,7 @@
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES"
askForAppToLaunch = "Yes"
launchAutomaticallySubstyle = "2">
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference

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

@ -6,8 +6,10 @@
<dict>
<key>AppShared.xcscheme_^#shared#^_</key>
<dict>
<key>isShown</key>
<true/>
<key>orderHint</key>
<integer>33</integer>
<integer>3</integer>
</dict>
<key>CoreDataStack.xcscheme_^#shared#^_</key>
<dict>
@ -17,13 +19,18 @@
<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>1</integer>
</dict>
<key>Mastodon - Snapshot.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>2</integer>
</dict>
<key>Mastodon - ar.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
@ -97,7 +104,7 @@
<key>MastodonIntent.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>32</integer>
<integer>49</integer>
</dict>
<key>MastodonIntents.xcscheme_^#shared#^_</key>
<dict>
@ -112,12 +119,12 @@
<key>NotificationService.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>2</integer>
<integer>51</integer>
</dict>
<key>ShareActionExtension.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>31</integer>
<integer>50</integer>
</dict>
</dict>
<key>SuppressBuildableAutocreation</key>
@ -137,6 +144,11 @@
<key>primary</key>
<true/>
</dict>
<key>DB68047E2637CD4C00430867</key>
<dict>
<key>primary</key>
<true/>
</dict>
<key>DB89B9F525C10FD0008580ED</key>
<dict>
<key>primary</key>

View File

@ -55,6 +55,15 @@
"version": "1.2.0"
}
},
{
"package": "FLAnimatedImage",
"repositoryURL": "https://github.com/Flipboard/FLAnimatedImage.git",
"state": {
"branch": null,
"revision": "e7f9fd4681ae41bf6f3056db08af4f401d61da52",
"version": "1.0.16"
}
},
{
"package": "FPSIndicator",
"repositoryURL": "https://github.com/MainasuK/FPSIndicator.git",
@ -207,6 +216,15 @@
"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"
}
}
]
},

View File

@ -24,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? {

View File

@ -22,12 +22,17 @@ final class UserFetchedResultsController: NSObject {
// input
@Published var domain: String? = nil
@Published var userIDs: [Mastodon.Entity.Account.ID] = []
@Published var additionalPredicate: NSPredicate?
// output
let _objectIDs = CurrentValueSubject<[NSManagedObjectID], Never>([])
@Published var records: [ManagedObjectRecord<MastodonUser>] = []
init(managedObjectContext: NSManagedObjectContext, domain: String?, additionalTweetPredicate: NSPredicate?) {
init(
managedObjectContext: NSManagedObjectContext,
domain: String?,
additionalPredicate: NSPredicate?
) {
self.domain = domain ?? ""
self.fetchedResultsController = {
let fetchRequest = MastodonUser.sortedFetchRequest
@ -43,6 +48,7 @@ final class UserFetchedResultsController: NSObject {
return controller
}()
self.additionalPredicate = additionalPredicate
super.init()
// debounce output to prevent UI update issues
@ -53,15 +59,16 @@ final class UserFetchedResultsController: NSObject {
fetchedResultsController.delegate = self
Publishers.CombineLatest(
Publishers.CombineLatest3(
self.$domain.removeDuplicates(),
self.$userIDs.removeDuplicates()
self.$userIDs.removeDuplicates(),
self.$additionalPredicate.removeDuplicates()
)
.receive(on: DispatchQueue.main)
.sink { [weak self] domain, ids in
.sink { [weak self] domain, ids, additionalPredicate in
guard let self = self else { return }
var predicates = [MastodonUser.predicate(domain: domain ?? "", ids: ids)]
if let additionalPredicate = additionalTweetPredicate {
if let additionalPredicate = additionalPredicate {
predicates.append(additionalPredicate)
}
self.fetchedResultsController.fetchRequest.predicate = NSCompoundPredicate(andPredicateWithSubpredicates: predicates)

View File

@ -24,6 +24,8 @@ extension NotificationSection {
struct Configuration {
weak var notificationTableViewCellDelegate: NotificationTableViewCellDelegate?
let filterContext: Mastodon.Entity.Filter.Context?
let activeFilters: Published<[Mastodon.Entity.Filter]>.Publisher?
}
static func diffableDataSource(
@ -58,57 +60,6 @@ extension NotificationSection {
cell.activityIndicatorView.startAnimating()
return cell
}
// switch notificationItem {
// case .notification(let objectID, let attribute):
// guard let notification = try? managedObjectContext.existingObject(with: objectID) as? MastodonNotification,
// !notification.isDeleted
// else { return UITableViewCell() }
//
// let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: NotificationStatusTableViewCell.self), for: indexPath) as! NotificationStatusTableViewCell
// configure(
// tableView: tableView,
// cell: cell,
// notification: notification,
// dependency: dependency,
// attribute: attribute
// )
// cell.delegate = delegate
// cell.isAccessibilityElement = true
// NotificationSection.configureStatusAccessibilityLabel(cell: cell)
// return cell
//
// case .notificationStatus(objectID: let objectID, attribute: let attribute):
// guard let notification = try? managedObjectContext.existingObject(with: objectID) as? MastodonNotification,
// !notification.isDeleted,
// let status = notification.status,
// let requestUserID = dependency.context.authenticationService.activeMastodonAuthenticationBox.value?.userID
// else { return UITableViewCell() }
// let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: StatusTableViewCell.self), for: indexPath) as! StatusTableViewCell
//
// // configure cell
// StatusSection.configureStatusTableViewCell(
// cell: cell,
// tableView: tableView,
// timelineContext: .notifications,
// dependency: dependency,
// readableLayoutFrame: tableView.readableContentGuide.layoutFrame,
// status: status,
// requestUserID: requestUserID,
// statusItemAttribute: attribute
// )
// cell.statusView.headerContainerView.isHidden = true // set header hide
// cell.statusView.actionToolbarContainer.isHidden = true // set toolbar hide
// cell.statusView.actionToolbarPlaceholderPaddingView.isHidden = false
// cell.delegate = statusTableViewCellDelegate
// cell.isAccessibilityElement = true
// StatusSection.configureStatusAccessibilityLabel(cell: cell)
// return cell
//
// case .bottomLoader:
// let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: TimelineBottomLoaderTableViewCell.self)) as! TimelineBottomLoaderTableViewCell
// cell.startAnimating()
// return cell
// }
}
}
}
@ -142,163 +93,17 @@ extension NotificationSection {
viewModel: viewModel,
delegate: configuration.notificationTableViewCellDelegate
)
cell.notificationView.statusView.viewModel.filterContext = configuration.filterContext
cell.notificationView.quoteStatusView.viewModel.filterContext = configuration.filterContext
configuration.activeFilters?
.assign(to: \.activeFilters, on: cell.notificationView.statusView.viewModel)
.store(in: &cell.disposeBag)
configuration.activeFilters?
.assign(to: \.activeFilters, on: cell.notificationView.quoteStatusView.viewModel)
.store(in: &cell.disposeBag)
}
// static func configure(
// tableView: UITableView,
// cell: NotificationStatusTableViewCell,
// notification: MastodonNotification,
// dependency: NeedsDependency,
// attribute: Item.StatusAttribute
// ) {
// // configure author
// cell.configure(
// with: AvatarConfigurableViewConfiguration(
// avatarImageURL: notification.account.avatarImageURL()
// )
// )
//
// func createActionImage() -> UIImage? {
// return UIImage(
// systemName: notification.notificationType.actionImageName,
// withConfiguration: UIImage.SymbolConfiguration(
// pointSize: 12, weight: .semibold
// )
// )?
// .withTintColor(.systemBackground)
// .af.imageAspectScaled(toFit: CGSize(width: 14, height: 14))
// }
//
// cell.avatarButton.badgeImageView.backgroundColor = notification.notificationType.color
// cell.avatarButton.badgeImageView.image = createActionImage()
// cell.traitCollectionDidChange
// .receive(on: DispatchQueue.main)
// .sink { [weak cell] in
// guard let cell = cell else { return }
// cell.avatarButton.badgeImageView.image = createActionImage()
// }
// .store(in: &cell.disposeBag)
//
// // configure author name, notification description, timestamp
// let nameText = notification.account.displayNameWithFallback
// let titleLabelText: String = {
// switch notification.notificationType {
// case .favourite: return L10n.Scene.Notification.userFavoritedYourPost(nameText)
// case .follow: return L10n.Scene.Notification.userFollowedYou(nameText)
// case .followRequest: return L10n.Scene.Notification.userRequestedToFollowYou(nameText)
// case .mention: return L10n.Scene.Notification.userMentionedYou(nameText)
// case .poll: return L10n.Scene.Notification.userYourPollHasEnded(nameText)
// case .reblog: return L10n.Scene.Notification.userRebloggedYourPost(nameText)
// default: return ""
// }
// }()
//
// do {
// let nameContent = MastodonContent(content: nameText, emojis: notification.account.emojiMeta)
// let nameMetaContent = try MastodonMetaContent.convert(document: nameContent)
//
// let mastodonContent = MastodonContent(content: titleLabelText, emojis: notification.account.emojiMeta)
// let metaContent = try MastodonMetaContent.convert(document: mastodonContent)
//
// cell.titleLabel.configure(content: metaContent)
//
// if let nameRange = metaContent.string.range(of: nameMetaContent.string) {
// let nsRange = NSRange(nameRange, in: metaContent.string)
// cell.titleLabel.textStorage.addAttributes([
// .font: UIFontMetrics(forTextStyle: .headline).scaledFont(for: .systemFont(ofSize: 15, weight: .semibold), maximumPointSize: 20),
// .foregroundColor: Asset.Colors.brandBlue.color,
// ], range: nsRange)
// }
//
// } catch {
// let metaContent = PlaintextMetaContent(string: titleLabelText)
// cell.titleLabel.configure(content: metaContent)
// }
//
// let createAt = notification.createAt
// cell.timestampLabel.text = createAt.localizedSlowedTimeAgoSinceNow
// AppContext.shared.timestampUpdatePublisher
// .receive(on: DispatchQueue.main)
// .sink { [weak cell] _ in
// guard let cell = cell else { return }
// cell.timestampLabel.text = createAt.localizedSlowedTimeAgoSinceNow
// }
// .store(in: &cell.disposeBag)
//
// // configure follow request (if exist)
// if case .followRequest = notification.notificationType {
// cell.acceptButton.publisher(for: .touchUpInside)
// .sink { [weak cell] _ in
// guard let cell = cell else { return }
// cell.delegate?.notificationTableViewCell(cell, notification: notification, acceptButtonDidPressed: cell.acceptButton)
// }
// .store(in: &cell.disposeBag)
// cell.rejectButton.publisher(for: .touchUpInside)
// .sink { [weak cell] _ in
// guard let cell = cell else { return }
// cell.delegate?.notificationTableViewCell(cell, notification: notification, rejectButtonDidPressed: cell.rejectButton)
// }
// .store(in: &cell.disposeBag)
// cell.buttonStackView.isHidden = false
// } else {
// cell.buttonStackView.isHidden = true
// }
//
// // configure status (if exist)
// if let status = notification.status {
// let frame = CGRect(
// x: 0,
// y: 0,
// width: tableView.readableContentGuide.layoutFrame.width - NotificationStatusTableViewCell.statusPadding.left - NotificationStatusTableViewCell.statusPadding.right,
// height: tableView.readableContentGuide.layoutFrame.height
// )
// StatusSection.configure(
// cell: cell,
// tableView: tableView,
// timelineContext: .notifications,
// dependency: dependency,
// readableLayoutFrame: frame,
// status: status,
// requestUserID: notification.userID,
// statusItemAttribute: attribute
// )
// cell.statusContainerView.isHidden = false
// cell.containerStackView.alignment = .top
// cell.containerStackViewBottomLayoutConstraint.constant = 0
// } else {
// if case .followRequest = notification.notificationType {
// cell.containerStackView.alignment = .top
// } else {
// cell.containerStackView.alignment = .center
// }
// cell.statusContainerView.isHidden = true
// cell.containerStackViewBottomLayoutConstraint.constant = 5 // 5pt margin when no status view
// }
// }
//
// static func configureStatusAccessibilityLabel(cell: NotificationStatusTableViewCell) {
// // FIXME:
// cell.accessibilityLabel = {
// var accessibilityViews: [UIView?] = []
// accessibilityViews.append(contentsOf: [
// cell.titleLabel,
// cell.timestampLabel,
// cell.statusView
// ])
// if !cell.statusContainerView.isHidden {
// if !cell.statusView.headerContainerView.isHidden {
// accessibilityViews.append(cell.statusView.headerInfoLabel)
// }
// accessibilityViews.append(contentsOf: [
// cell.statusView.nameMetaLabel,
// cell.statusView.dateLabel,
// cell.statusView.contentMetaText.textView,
// ])
// }
// return accessibilityViews
// .compactMap { $0?.accessibilityLabel }
// .joined(separator: " ")
// }()
// }
}

View File

@ -8,7 +8,7 @@
import Foundation
enum RegisterItem: Hashable {
case header
case header(domain: String)
case avatar
case name
case username

View File

@ -14,6 +14,7 @@ enum ProfileFieldItem: Hashable {
case field(field: FieldValue)
case editField(field: FieldValue)
case addEntry
case noResult
}
extension ProfileFieldItem {

View File

@ -107,6 +107,22 @@ extension ProfileFieldSection {
cell.backgroundConfiguration = backgroundConfiguration
}
let noResultCellRegistration = UICollectionView.CellRegistration<UICollectionViewListCell, ProfileFieldItem> { cell, indexPath, item in
guard case .noResult = item else { return }
var contentConfiguration = cell.defaultContentConfiguration()
contentConfiguration.text = L10n.Scene.Search.Searching.EmptyState.noResults // FIXME:
contentConfiguration.textProperties.alignment = .center
cell.contentConfiguration = contentConfiguration
var backgroundConfiguration = UIBackgroundConfiguration.listPlainCell()
backgroundConfiguration.backgroundColorTransformer = .init { _ in
return .secondarySystemBackground
}
cell.backgroundConfiguration = backgroundConfiguration
}
let dataSource = UICollectionViewDiffableDataSource<ProfileFieldSection, ProfileFieldItem>(collectionView: collectionView) { collectionView, indexPath, item in
switch item {
case .field:
@ -127,6 +143,12 @@ extension ProfileFieldSection {
for: indexPath,
item: item
)
case .noResult:
return collectionView.dequeueConfiguredReusableCell(
using: noResultCellRegistration,
for: indexPath,
item: item
)
}
}

View File

@ -146,10 +146,15 @@ extension RecommendAccountSection {
case .account(let record):
context.managedObjectContext.performAndWait {
guard let user = record.object(in: context.managedObjectContext) else { return }
cell.config(with: user)
cell.configure(user: user)
}
context.authenticationService.activeMastodonAuthenticationBox
.map { $0 as UserIdentifier? }
.assign(to: \.userIdentifier, on: cell.viewModel)
.store(in: &cell.disposeBag)
cell.delegate = configuration.suggestionAccountTableViewCellDelegate
}
cell.delegate = configuration.suggestionAccountTableViewCellDelegate
return cell
}
}

View File

@ -21,8 +21,11 @@ extension SearchSection {
) -> UICollectionViewDiffableDataSource<SearchSection, SearchItem> {
let trendCellRegister = UICollectionView.CellRegistration<TrendCollectionViewCell, Mastodon.Entity.Tag> { cell, indexPath, item in
cell.primaryLabel.text = "#" + item.name
cell.secondaryLabel.text = L10n.Scene.Search.Recommend.HashTag.peopleTalking(item.talkingPeopleCount ?? 0)
let primaryLabelText = "#" + item.name
let secondaryLabelText = L10n.Scene.Search.Recommend.HashTag.peopleTalking(item.talkingPeopleCount ?? 0)
cell.primaryLabel.text = primaryLabelText
cell.secondaryLabel.text = secondaryLabelText
cell.lineChartView.data = (item.history ?? [])
.sorted(by: { $0.day < $1.day }) // latest last
@ -32,6 +35,12 @@ extension SearchSection {
}
return CGFloat(point)
}
cell.isAccessibilityElement = true
cell.accessibilityLabel = [
primaryLabelText,
secondaryLabelText
].joined(separator: ", ")
}
let dataSource = UICollectionViewDiffableDataSource<SearchSection, SearchItem>(

View File

@ -13,6 +13,7 @@ import MastodonLocalization
enum SettingsItem {
case appearance(record: ManagedObjectRecord<Setting>)
case appearancePreference(record: ManagedObjectRecord<Setting>, appearanceType: AppearanceType)
case preference(settingRecord: ManagedObjectRecord<Setting>, preferenceType: PreferenceType)
case notification(settingRecord: ManagedObjectRecord<Setting>, switchMode: NotificationSwitchMode)
case boringZone(item: Link)
@ -23,11 +24,18 @@ extension SettingsItem {
enum AppearanceMode: String {
case system
case reallyDark
case sortaDark
case dark
case light
}
enum AppearanceType: Hashable {
case preferredTrueDarkMode
var title: String {
return L10n.Scene.Settings.Section.Preference.trueBlackDarkMode
}
}
enum NotificationSwitchMode: CaseIterable, Hashable {
case favorite
case follow
@ -94,9 +102,13 @@ extension SettingsItem {
extension SettingsItem: Hashable {
func hash(into hasher: inout Hasher) {
switch self {
case .appearance(let settingObjectID):
case .appearance(let record):
hasher.combine(String(describing: SettingsItem.AppearanceMode.self))
hasher.combine(settingObjectID)
hasher.combine(record)
case .appearancePreference(let record, let appearanceType):
hasher.combine(String(describing: SettingsItem.AppearanceType.self))
hasher.combine(record)
hasher.combine(appearanceType)
case .notification(let settingObjectID, let switchMode):
hasher.combine(String(describing: SettingsItem.notification.self))
hasher.combine(settingObjectID)

View File

@ -13,6 +13,7 @@ import MastodonLocalization
enum SettingsSection: Hashable {
case appearance
case appearancePreference
case preference
case notifications
case boringZone
@ -20,7 +21,8 @@ enum SettingsSection: Hashable {
var title: String {
switch self {
case .appearance: return "Look and Feel" // TODO: i18n
case .appearance: return L10n.Scene.Settings.Section.LookAndFeel.title
case .appearancePreference: return ""
case .preference: return ""
case .notifications: return L10n.Scene.Settings.Section.Notifications.title
case .boringZone: return L10n.Scene.Settings.Section.BoringZone.title
@ -49,6 +51,26 @@ extension SettingsSection {
}
cell.delegate = settingsAppearanceTableViewCellDelegate
return cell
case .appearancePreference(let record, let appearanceType):
let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: SettingsToggleTableViewCell.self), for: indexPath) as! SettingsToggleTableViewCell
cell.delegate = settingsToggleCellDelegate
managedObjectContext.performAndWait {
guard let setting = record.object(in: managedObjectContext) else { return }
SettingsSection.configureSettingToggle(cell: cell, item: item, setting: setting)
ManagedObjectObserver.observe(object: setting)
.receive(on: DispatchQueue.main)
.sink(receiveCompletion: { _ in
// do nothing
}, receiveValue: { [weak cell] change in
guard let cell = cell else { return }
guard case .update(let object) = change.changeType,
let setting = object as? Setting else { return }
SettingsSection.configureSettingToggle(cell: cell, item: item, setting: setting)
})
.store(in: &cell.disposeBag)
}
return cell
case .preference(let record, _):
let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: SettingsToggleTableViewCell.self), for: indexPath) as! SettingsToggleTableViewCell
cell.delegate = settingsToggleCellDelegate
@ -107,17 +129,29 @@ extension SettingsSection {
item: SettingsItem,
setting: Setting
) {
guard case let .preference(_, preferenceType) = item else { return }
cell.textLabel?.text = preferenceType.title
switch preferenceType {
case .disableAvatarAnimation:
cell.switchButton.isOn = setting.preferredStaticAvatar
case .disableEmojiAnimation:
cell.switchButton.isOn = setting.preferredStaticEmoji
case .useDefaultBrowser:
cell.switchButton.isOn = setting.preferredUsingDefaultBrowser
switch item {
case .appearancePreference(_, let appearanceType):
cell.textLabel?.text = appearanceType.title
switch appearanceType {
case .preferredTrueDarkMode:
cell.switchButton.isOn = setting.preferredTrueBlackDarkMode
}
case .preference(_, let preferenceType):
cell.textLabel?.text = preferenceType.title
switch preferenceType {
case .disableAvatarAnimation:
cell.switchButton.isOn = setting.preferredStaticAvatar
case .disableEmojiAnimation:
cell.switchButton.isOn = setting.preferredStaticEmoji
case .useDefaultBrowser:
cell.switchButton.isOn = setting.preferredUsingDefaultBrowser
}
default:
assertionFailure()
}
}

View File

@ -28,6 +28,8 @@ extension StatusSection {
struct Configuration {
weak var statusTableViewCellDelegate: StatusTableViewCellDelegate?
weak var timelineMiddleLoaderTableViewCellDelegate: TimelineMiddleLoaderTableViewCellDelegate?
let filterContext: Mastodon.Entity.Filter.Context?
let activeFilters: Published<[Mastodon.Entity.Filter]>.Publisher?
}
static func diffableDataSource(
@ -258,6 +260,11 @@ extension StatusSection {
viewModel: viewModel,
delegate: configuration.statusTableViewCellDelegate
)
cell.statusView.viewModel.filterContext = configuration.filterContext
configuration.activeFilters?
.assign(to: \.activeFilters, on: cell.statusView.viewModel)
.store(in: &cell.disposeBag)
}
static func configure(
@ -282,6 +289,11 @@ extension StatusSection {
viewModel: viewModel,
delegate: configuration.statusTableViewCellDelegate
)
cell.statusView.viewModel.filterContext = configuration.filterContext
configuration.activeFilters?
.assign(to: \.activeFilters, on: cell.statusView.viewModel)
.store(in: &cell.disposeBag)
}
static func configure(
@ -296,133 +308,3 @@ extension StatusSection {
}
}
extension StatusSection {
enum TimelineContext {
case home
case notifications
case `public`
case thread
case account
case favorite
case hashtag
case report
case search
var filterContext: Mastodon.Entity.Filter.Context? {
switch self {
case .home: return .home
case .notifications: return .notifications
case .public: return .public
case .thread: return .thread
case .account: return .account
default: return nil
}
}
}
private static func needsFilterStatus(
content: MastodonMetaContent?,
filters: [Mastodon.Entity.Filter],
timelineContext: TimelineContext
) -> AnyPublisher<Bool, Never> {
guard let content = content,
let currentFilterContext = timelineContext.filterContext,
!filters.isEmpty else {
return Just(false).eraseToAnyPublisher()
}
return Future<Bool, Never> { promise in
DispatchQueue.global(qos: .userInteractive).async {
var wordFilters: [Mastodon.Entity.Filter] = []
var nonWordFilters: [Mastodon.Entity.Filter] = []
for filter in filters {
guard filter.context.contains(where: { $0 == currentFilterContext }) else { continue }
if filter.wholeWord {
wordFilters.append(filter)
} else {
nonWordFilters.append(filter)
}
}
let text = content.original.lowercased()
var needsFilter = false
for filter in nonWordFilters {
guard text.contains(filter.phrase.lowercased()) else { continue }
needsFilter = true
break
}
if needsFilter {
DispatchQueue.main.async {
promise(.success(true))
}
return
}
let tokenizer = NLTokenizer(unit: .word)
tokenizer.string = text
let phraseWords = wordFilters.map { $0.phrase.lowercased() }
tokenizer.enumerateTokens(in: text.startIndex..<text.endIndex) { range, _ in
let word = String(text[range])
if phraseWords.contains(word) {
needsFilter = true
return false
} else {
return true
}
}
DispatchQueue.main.async {
promise(.success(needsFilter))
}
}
}
.eraseToAnyPublisher()
}
}
class StatusContentOperation: Operation {
let logger = Logger(subsystem: "StatusContentOperation", category: "logic")
// input
let statusObjectID: NSManagedObjectID
let mastodonContent: MastodonContent
// output
var result: Result<MastodonMetaContent, Error>?
init(
statusObjectID: NSManagedObjectID,
mastodonContent: MastodonContent
) {
self.statusObjectID = statusObjectID
self.mastodonContent = mastodonContent
super.init()
}
override func main() {
guard !isCancelled else { return }
// logger.debug("\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public): prcoess \(self.statusObjectID)")
do {
let content = try MastodonMetaContent.convert(document: mastodonContent)
result = .success(content)
// logger.debug("\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public): process success \(self.statusObjectID)")
} catch {
result = .failure(error)
// logger.debug("\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public): process fail \(self.statusObjectID)")
}
}
override func cancel() {
// logger.debug("\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public): cancel \(self.statusObjectID.debugDescription)")
super.cancel()
}
}

View File

@ -2,7 +2,13 @@
// DO NOT EDIT
// sourcery:inline:FollowingListViewController.AutoGenerateTableViewDelegate
// sourcery:inline:UserTimelineViewController.AutoGenerateTableViewDelegate
// Generated using Sourcery
// DO NOT EDIT
@ -10,11 +16,20 @@ func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
aspectTableView(tableView, didSelectRowAt: indexPath)
}
func tableView(_ tableView: UITableView, contextMenuConfigurationForRowAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? {
return aspectTableView(tableView, contextMenuConfigurationForRowAt: indexPath, point: point)
}
func tableView(_ tableView: UITableView, previewForHighlightingContextMenuWithConfiguration configuration: UIContextMenuConfiguration) -> UITargetedPreview? {
return aspectTableView(tableView, previewForHighlightingContextMenuWithConfiguration: configuration)
}
func tableView(_ tableView: UITableView, previewForDismissingContextMenuWithConfiguration configuration: UIContextMenuConfiguration) -> UITargetedPreview? {
return aspectTableView(tableView, previewForDismissingContextMenuWithConfiguration: configuration)
}
func tableView(_ tableView: UITableView, willPerformPreviewActionForMenuWith configuration: UIContextMenuConfiguration, animator: UIContextMenuInteractionCommitAnimating) {
aspectTableView(tableView, willPerformPreviewActionForMenuWith: configuration, animator: animator)
}
// sourcery:end

View File

@ -2,6 +2,19 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>onion</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
<key>CADisableMinimumFrameDurationOnPhone</key>
<true/>
<key>CFBundleDevelopmentRegion</key>
@ -30,7 +43,7 @@
</dict>
</array>
<key>CFBundleVersion</key>
<string>96</string>
<string>109</string>
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
<key>LSApplicationQueriesSchemes</key>

View File

@ -0,0 +1,29 @@
//
// CellFrameCacheContainer.swift
// TwidereX
//
// Created by Cirno MainasuK on 2021-10-13.
// Copyright © 2021 Twidere. All rights reserved.
//
import UIKit
protocol CellFrameCacheContainer {
var cellFrameCache: NSCache<NSNumber, NSValue> { get }
func keyForCache(tableView: UITableView, indexPath: IndexPath) -> NSNumber?
}
extension CellFrameCacheContainer {
func cacheCellFrame(tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) {
guard let key = keyForCache(tableView: tableView, indexPath: indexPath) else { return }
let value = NSValue(cgRect: cell.frame)
cellFrameCache.setObject(value, forKey: key)
}
func retrieveCellFrame(tableView: UITableView, indexPath: IndexPath) -> CGRect? {
guard let key = keyForCache(tableView: tableView, indexPath: indexPath) else { return nil }
guard let frame = cellFrameCache.object(forKey: key)?.cgRectValue else { return nil }
return frame
}
}

View File

@ -1,13 +0,0 @@
//
// ContentOffsetAdjustableTimelineViewControllerDelegate.swift
// Mastodon
//
// Created by sxiaojian on 2021/2/5.
//
import UIKit
protocol ContentOffsetAdjustableTimelineViewControllerDelegate: AnyObject {
func navigationBar() -> UINavigationBar?
}

View File

@ -10,6 +10,7 @@ import CoreDataStack
import MastodonUI
import MastodonLocalization
// Delete
extension DataSourceFacade {
static func responseToDeleteStatus(
@ -25,6 +26,7 @@ extension DataSourceFacade {
}
// Share
extension DataSourceFacade {
@MainActor
@ -74,6 +76,7 @@ extension DataSourceFacade {
}
}
// ActionToolBar
extension DataSourceFacade {
@MainActor
static func responseToActionToolbar(
@ -133,6 +136,7 @@ extension DataSourceFacade {
}
// menu
extension DataSourceFacade {
struct MenuContext {

View File

@ -102,6 +102,119 @@ extension NotificationTableViewCellDelegate where Self: DataSourceProvider {
}
}
private struct NotificationMediaTransitionContext {
let status: ManagedObjectRecord<Status>
let needsToggleMediaSensitive: Bool
}
extension NotificationTableViewCellDelegate where Self: DataSourceProvider & MediaPreviewableViewController {
func tableViewCell(
_ cell: UITableViewCell,
notificationView: NotificationView,
statusView: StatusView,
mediaGridContainerView: MediaGridContainerView,
mediaView: MediaView,
didSelectMediaViewAt index: Int
) {
Task {
let source = DataSourceItem.Source(tableViewCell: cell, indexPath: nil)
guard let item = await item(from: source) else {
assertionFailure()
return
}
guard case let .notification(record) = item else {
assertionFailure("only works for status data provider")
return
}
let managedObjectContext = self.context.managedObjectContext
let _mediaTransitionContext: NotificationMediaTransitionContext? = try await managedObjectContext.perform {
guard let notification = record.object(in: managedObjectContext) else { return nil }
guard let _status = notification.status else { return nil }
let status = _status.reblog ?? _status
return NotificationMediaTransitionContext(
status: .init(objectID: status.objectID),
needsToggleMediaSensitive: status.isMediaSensitiveToggled ? !status.sensitive : status.sensitive
)
}
guard let mediaTransitionContext = _mediaTransitionContext else { return }
guard !mediaTransitionContext.needsToggleMediaSensitive else {
try await DataSourceFacade.responseToToggleSensitiveAction(
dependency: self,
status: mediaTransitionContext.status
)
return
}
try await DataSourceFacade.coordinateToMediaPreviewScene(
dependency: self,
status: mediaTransitionContext.status,
previewContext: DataSourceFacade.AttachmentPreviewContext(
containerView: .mediaGridContainerView(mediaGridContainerView),
mediaView: mediaView,
index: index
)
)
} // end Task
}
func tableViewCell(
_ cell: UITableViewCell,
notificationView: NotificationView,
quoteStatusView: StatusView,
mediaGridContainerView: MediaGridContainerView,
mediaView: MediaView,
didSelectMediaViewAt index: Int
) {
Task {
let source = DataSourceItem.Source(tableViewCell: cell, indexPath: nil)
guard let item = await item(from: source) else {
assertionFailure()
return
}
guard case let .notification(record) = item else {
assertionFailure("only works for status data provider")
return
}
let managedObjectContext = self.context.managedObjectContext
let _mediaTransitionContext: NotificationMediaTransitionContext? = try await managedObjectContext.perform {
guard let notification = record.object(in: managedObjectContext) else { return nil }
guard let _status = notification.status else { return nil }
let status = _status.reblog ?? _status
return NotificationMediaTransitionContext(
status: .init(objectID: status.objectID),
needsToggleMediaSensitive: status.isMediaSensitiveToggled ? !status.sensitive : status.sensitive
)
}
guard let mediaTransitionContext = _mediaTransitionContext else { return }
guard !mediaTransitionContext.needsToggleMediaSensitive else {
try await DataSourceFacade.responseToToggleSensitiveAction(
dependency: self,
status: mediaTransitionContext.status
)
return
}
try await DataSourceFacade.coordinateToMediaPreviewScene(
dependency: self,
status: mediaTransitionContext.status,
previewContext: DataSourceFacade.AttachmentPreviewContext(
containerView: .mediaGridContainerView(mediaGridContainerView),
mediaView: mediaView,
index: index
)
)
} // end Task
}
}
// MARK: - Status Toolbar
extension NotificationTableViewCellDelegate where Self: DataSourceProvider {
func tableViewCell(
@ -142,7 +255,6 @@ extension NotificationTableViewCellDelegate where Self: DataSourceProvider {
}
}
// MARK: - Status Author Avatar
extension NotificationTableViewCellDelegate where Self: DataSourceProvider {
func tableViewCell(

View File

@ -28,11 +28,36 @@ extension StatusTableViewCellDelegate where Self: DataSourceProvider {
assertionFailure("only works for status data provider")
return
}
await DataSourceFacade.coordinateToProfileScene(
provider: self,
target: .reblog, // keep the wrapper for header author
status: status
)
switch await statusView.viewModel.header {
case .none:
break
case .reply:
let _replyToAuthor: ManagedObjectRecord<MastodonUser>? = try? await context.managedObjectContext.perform {
guard let status = status.object(in: self.context.managedObjectContext) else { return nil }
guard let inReplyToAccountID = status.inReplyToAccountID else { return nil }
let request = MastodonUser.sortedFetchRequest
request.predicate = MastodonUser.predicate(domain: status.author.domain, id: inReplyToAccountID)
request.fetchLimit = 1
guard let author = self.context.managedObjectContext.safeFetch(request).first else { return nil }
return .init(objectID: author.objectID)
}
guard let replyToAuthor = _replyToAuthor else {
return
}
await DataSourceFacade.coordinateToProfileScene(
provider: self,
user: replyToAuthor
)
case .repost:
await DataSourceFacade.coordinateToProfileScene(
provider: self,
target: .reblog, // keep the wrapper for header author
status: status
)
}
}
}

View File

@ -0,0 +1,191 @@
//
// DataSourceProvider+StatusTableViewControllerNavigateable.swift
// Mastodon
//
// Created by MainasuK on 2022-2-16.
//
import os.log
import UIKit
import CoreDataStack
extension StatusTableViewControllerNavigateableCore where Self: DataSourceProvider & StatusTableViewControllerNavigateableRelay {
var statusNavigationKeyCommands: [UIKeyCommand] {
StatusTableViewNavigation.allCases.map { navigation in
UIKeyCommand(
title: navigation.title,
image: nil,
action: #selector(Self.statusKeyCommandHandlerRelay(_:)),
input: navigation.input,
modifierFlags: navigation.modifierFlags,
propertyList: navigation.propertyList,
alternates: [],
discoverabilityTitle: nil,
attributes: [],
state: .off
)
}
}
}
extension StatusTableViewControllerNavigateableCore where Self: DataSourceProvider {
func statusKeyCommandHandler(_ sender: UIKeyCommand) {
guard let rawValue = sender.propertyList as? String,
let navigation = StatusTableViewNavigation(rawValue: rawValue) else { return }
os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s: %s", ((#file as NSString).lastPathComponent), #line, #function, navigation.title)
Task {
switch navigation {
case .openAuthorProfile: await openAuthorProfile(target: .status)
case .openRebloggerProfile: await openAuthorProfile(target: .reblog)
case .replyStatus: await replyStatus()
case .toggleReblog: await toggleReblog()
case .toggleFavorite: await toggleFavorite()
case .toggleContentWarning: await toggleContentWarning()
case .previewImage: await previewImage()
}
}
}
}
// status coordinate
extension StatusTableViewControllerNavigateableCore where Self: DataSourceProvider {
@MainActor
private func statusRecord() async -> ManagedObjectRecord<Status>? {
guard let indexPathForSelectedRow = tableView.indexPathForSelectedRow else { return nil }
let source = DataSourceItem.Source(indexPath: indexPathForSelectedRow)
guard let item = await item(from: source) else { return nil }
switch item {
case .status(let record):
return record
case .notification(let record):
let _statusRecord: ManagedObjectRecord<Status>? = try? await context.managedObjectContext.perform {
guard let notification = record.object(in: self.context.managedObjectContext) else { return nil }
guard let status = notification.status else { return nil }
return .init(objectID: status.objectID)
}
guard let statusRecord = _statusRecord else {
return nil
}
return statusRecord
default:
return nil
}
}
@MainActor
private func openAuthorProfile(target: DataSourceFacade.StatusTarget) async {
guard let status = await statusRecord() else { return }
await DataSourceFacade.coordinateToProfileScene(
provider: self,
target: target,
status: status
)
}
@MainActor
private func replyStatus() async {
guard let status = await statusRecord() else { return }
guard let authenticationBox = self.context.authenticationService.activeMastodonAuthenticationBox.value else { return }
let selectionFeedbackGenerator = UISelectionFeedbackGenerator()
selectionFeedbackGenerator.selectionChanged()
let composeViewModel = ComposeViewModel(
context: self.context,
composeKind: .reply(status: status),
authenticationBox: authenticationBox
)
self.coordinator.present(
scene: .compose(viewModel: composeViewModel),
from: self,
transition: .modal(animated: true, completion: nil)
)
}
@MainActor
private func previewImage() async {
guard let status = await statusRecord() else { return }
guard let provider = self as? (DataSourceProvider & MediaPreviewableViewController) else { return }
guard let indexPathForSelectedRow = tableView.indexPathForSelectedRow,
let cell = tableView.cellForRow(at: indexPathForSelectedRow) as? StatusTableViewCell
else { return }
guard let mediaView = cell.statusView.mediaGridContainerView.mediaViews.first else { return }
do {
try await DataSourceFacade.coordinateToMediaPreviewScene(
dependency: provider,
status: status,
previewContext: DataSourceFacade.AttachmentPreviewContext(
containerView: .mediaGridContainerView(cell.statusView.mediaGridContainerView),
mediaView: mediaView,
index: 0
)
)
} catch {
assertionFailure()
}
}
}
// toggle
extension StatusTableViewControllerNavigateableCore where Self: DataSourceProvider {
@MainActor
private func toggleReblog() async {
guard let status = await statusRecord() else { return }
guard let authenticationBox = self.context.authenticationService.activeMastodonAuthenticationBox.value else { return }
do {
try await DataSourceFacade.responseToStatusReblogAction(
provider: self,
status: status,
authenticationBox: authenticationBox
)
} catch {
assertionFailure()
}
}
@MainActor
private func toggleFavorite() async {
guard let status = await statusRecord() else { return }
guard let authenticationBox = self.context.authenticationService.activeMastodonAuthenticationBox.value else { return }
do {
try await DataSourceFacade.responseToStatusFavoriteAction(
provider: self,
status: status,
authenticationBox: authenticationBox
)
} catch {
assertionFailure()
}
}
@MainActor
private func toggleContentWarning() async {
guard let status = await statusRecord() else { return }
do {
try await DataSourceFacade.responseToToggleSensitiveAction(
dependency: self,
status: status
)
} catch {
assertionFailure()
}
}
}

View File

@ -0,0 +1,156 @@
//
// DataSourceProvider+TableViewControllerNavigateable.swift
// Mastodon
//
// Created by MainasuK on 2022-2-16.
//
import os.log
import UIKit
extension TableViewControllerNavigateableCore where Self: TableViewControllerNavigateableRelay {
var navigationKeyCommands: [UIKeyCommand] {
TableViewNavigation.allCases.map { navigation in
UIKeyCommand(
title: navigation.title,
image: nil,
action: #selector(Self.navigateKeyCommandHandlerRelay(_:)),
input: navigation.input,
modifierFlags: navigation.modifierFlags,
propertyList: navigation.propertyList,
alternates: [],
discoverabilityTitle: nil,
attributes: [],
state: .off
)
}
}
}
extension TableViewControllerNavigateableCore {
func navigateKeyCommandHandler(_ sender: UIKeyCommand) {
guard let rawValue = sender.propertyList as? String,
let navigation = TableViewNavigation(rawValue: rawValue) else { return }
os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s: %s", ((#file as NSString).lastPathComponent), #line, #function, navigation.title)
switch navigation {
case .up: navigate(direction: .up)
case .down: navigate(direction: .down)
case .back: back()
case .open: open()
}
}
}
// navigate status up/down
extension TableViewControllerNavigateableCore where Self: DataSourceProvider {
func navigate(direction: TableViewNavigationDirection) {
if let indexPathForSelectedRow = tableView.indexPathForSelectedRow {
// navigate up/down on the current selected item
Task {
await navigateToStatus(direction: direction, indexPath: indexPathForSelectedRow)
}
} else {
// set first visible item selected
navigateToFirstVisibleStatus()
}
}
@MainActor
private func navigateToStatus(
direction: TableViewNavigationDirection,
indexPath: IndexPath
) async {
let row: Int = {
let index = indexPath.row
switch direction {
case .up: return index - 1
case .down: return index + 1
}
}()
let indexPath = IndexPath(row: row , section: indexPath.section)
guard indexPath.section >= 0, indexPath.section < tableView.numberOfSections,
indexPath.row >= 0, indexPath.row < tableView.numberOfRows(inSection: indexPath.section)
else { return }
let scrollPosition: UITableView.ScrollPosition = overrideNavigationScrollPosition ?? Self.navigateScrollPosition(tableView: tableView, indexPath: indexPath)
tableView.selectRow(at: indexPath, animated: true, scrollPosition: scrollPosition)
}
private func navigateToFirstVisibleStatus() {
guard var indexPathsForVisibleRows = tableView.indexPathsForVisibleRows?.sorted() else { return }
if indexPathsForVisibleRows.first?.row != 0 {
// drop first when visible not the first cell of table
indexPathsForVisibleRows.removeFirst()
}
guard let indexPath = indexPathsForVisibleRows.first else { return }
let scrollPosition: UITableView.ScrollPosition = overrideNavigationScrollPosition ?? Self.navigateScrollPosition(tableView: tableView, indexPath: indexPath)
tableView.selectRow(at: indexPath, animated: true, scrollPosition: scrollPosition)
}
static func validNavigateableItem(_ item: DataSourceItem) -> Bool {
switch item {
case .status,
.notification:
return true
default:
return false
}
}
}
extension TableViewControllerNavigateableCore {
// check is visible and not the first and last
static func navigateScrollPosition(tableView: UITableView, indexPath: IndexPath) -> UITableView.ScrollPosition {
let middleVisibleIndexPaths = (tableView.indexPathsForVisibleRows ?? [])
.sorted()
.dropFirst()
.dropLast()
guard middleVisibleIndexPaths.contains(indexPath) else {
return .top
}
guard middleVisibleIndexPaths.count > 2 else {
return .middle
}
return .none
}
}
extension TableViewControllerNavigateableCore where Self: DataSourceProvider {
func open() {
guard let indexPathForSelectedRow = tableView.indexPathForSelectedRow else { return }
let source = DataSourceItem.Source(indexPath: indexPathForSelectedRow)
Task { @MainActor in
guard let item = await item(from: source) else { return }
switch item {
case .status(let record):
await DataSourceFacade.coordinateToStatusThreadScene(
provider: self,
target: .status,
status: record
)
case .notification(let record):
assertionFailure()
default:
assertionFailure()
}
} // end Task
// StatusProviderFacade.coordinateToStatusThreadScene(for: .primary, provider: self, indexPath: indexPathForSelectedRow)
}
}
extension TableViewControllerNavigateableCore where Self: UIViewController {
func back() {
UserDefaults.shared.backKeyCommandPressDate = Date()
navigationController?.popViewController(animated: true)
}
}

View File

@ -8,12 +8,12 @@
import UIKit
protocol ScrollViewContainer: UIViewController {
var scrollView: UIScrollView { get }
var scrollView: UIScrollView? { get }
func scrollToTop(animated: Bool)
}
extension ScrollViewContainer {
func scrollToTop(animated: Bool) {
scrollView.scrollRectToVisible(CGRect(origin: .zero, size: CGSize(width: 1, height: 1)), animated: animated)
scrollView?.scrollRectToVisible(CGRect(origin: .zero, size: CGSize(width: 1, height: 1)), animated: animated)
}
}

View File

@ -1,182 +0,0 @@
////
//// StatusTableViewControllerAspect.swift
//// Mastodon
////
//// Created by MainasuK Cirno on 2021-4-7.
////
//
//import UIKit
//import AVKit
//import GameController
//
//// Check List Last Updated
//// - HomeViewController: 2021/7/15
//// - FavoriteViewController: 2021/4/30
//// - HashtagTimelineViewController: 2021/4/30
//// - UserTimelineViewController: 2021/4/30
//// - ThreadViewController: 2021/4/30
//// - SearchResultViewController: 2021/7/15
//// * StatusTableViewControllerAspect: 2021/7/15
//
//// (Fake) Aspect protocol to group common protocol extension implementations
//// Needs update related view controller when aspect interface changes
//
///// Status related operations aspect
///// Please check the aspect methods (Option+Click) and add hook to implement features
///// - UI
///// - Media
///// - Data Source
//protocol StatusTableViewControllerAspect: UIViewController {
// var tableView: UITableView { get }
//}
//
//// MARK: - UIViewController [A]
//
//// [A1] aspectViewWillAppear(_:)
//extension StatusTableViewControllerAspect {
// /// [UI] hook to deselect row in the transitioning for the table view
// func aspectViewWillAppear(_ animated: Bool) {
// if GCKeyboard.coalesced != nil, let backKeyCommandPressDate = UserDefaults.shared.backKeyCommandPressDate {
// guard backKeyCommandPressDate.timeIntervalSinceNow <= -0.5 else {
// // break if interval greater than 0.5s
// return
// }
// }
// tableView.deselectRow(with: transitionCoordinator, animated: animated)
// }
//}
//
//// [A2] aspectViewDidDisappear(_:)
//extension StatusTableViewControllerAspect where Self: NeedsDependency {
// /// [Media] hook to notify video service
// func aspectViewDidDisappear(_ animated: Bool) {
// context.videoPlaybackService.viewDidDisappear(from: self)
// context.audioPlaybackService.viewDidDisappear(from: self)
// }
//}
//
//// MARK: - UITableViewDelegate [B]
//
//// [B1] aspectTableView(_:estimatedHeightForRowAt:)
//extension StatusTableViewControllerAspect where Self: LoadMoreConfigurableTableViewContainer {
// /// [Data Source] hook to notify table view bottom loader
// func aspectScrollViewDidScroll(_ scrollView: UIScrollView) {
// handleScrollViewDidScroll(scrollView)
// }
//}
//
//// [B2] aspectTableView(_:estimatedHeightForRowAt:)
//extension StatusTableViewControllerAspect where Self: TableViewCellHeightCacheableContainer {
// /// [UI] hook to estimate table view cell height from cache
// func aspectTableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
// handleTableView(tableView, estimatedHeightForRowAt: indexPath)
// }
//}
//
//// [B3] aspectTableView(_:willDisplay:forRowAt:)
//extension StatusTableViewControllerAspect where Self: StatusTableViewCellDelegate & StatusProvider {
// func aspectTableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
// handleTableView(tableView, willDisplay: cell, forRowAt: indexPath)
// }
//}
//
//// [B4] aspectTableView(_:didEndDisplaying:forRowAt:)
//extension StatusTableViewControllerAspect where Self: StatusTableViewCellDelegate & StatusProvider {
// /// [Media] hook to notify video service
// func aspectTableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) {
// handleTableView(tableView, didEndDisplaying: cell, forRowAt: indexPath)
// }
//}
//
//extension StatusTableViewControllerAspect where Self: TableViewCellHeightCacheableContainer {
// /// [UI] hook to cache table view cell height
// func aspectTableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) {
// cacheTableView(tableView, didEndDisplaying: cell, forRowAt: indexPath)
// }
//}
//
//extension StatusTableViewControllerAspect where Self: StatusProvider & StatusTableViewCellDelegate & TableViewCellHeightCacheableContainer {
// /// [Media] hook to notify video service
// /// [UI] hook to cache table view cell height
// func aspectTableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) {
// handleTableView(tableView, didEndDisplaying: cell, forRowAt: indexPath)
// cacheTableView(tableView, didEndDisplaying: cell, forRowAt: indexPath)
// }
//}
//
//// [B5] aspectTableView(_:didSelectRowAt:)
//extension StatusTableViewControllerAspect where Self: StatusTableViewCellDelegate & StatusProvider {
// /// [UI] hook to coordinator to thread
// func aspectTableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// handleTableView(tableView, didSelectRowAt: indexPath)
// }
//}
//
//// [B6] aspectTableView(_:contextMenuConfigurationForRowAt:point:)
//extension StatusTableViewControllerAspect where Self: StatusTableViewCellDelegate & StatusProvider {
// // [UI] hook to display context menu for images
// func aspectTableView(_ tableView: UITableView, contextMenuConfigurationForRowAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? {
// return handleTableView(tableView, contextMenuConfigurationForRowAt: indexPath, point: point)
// }
//}
//
//// [B7] aspectTableView(_:contextMenuConfigurationForRowAt:point:)
//extension StatusTableViewControllerAspect where Self: StatusTableViewCellDelegate & StatusProvider {
// // [UI] hook to configure context menu for images
// func aspectTableView(_ tableView: UITableView, previewForHighlightingContextMenuWithConfiguration configuration: UIContextMenuConfiguration) -> UITargetedPreview? {
// return handleTableView(tableView, previewForHighlightingContextMenuWithConfiguration: configuration)
// }
//}
//
//// [B8] aspectTableView(_:previewForDismissingContextMenuWithConfiguration:)
//extension StatusTableViewControllerAspect where Self: StatusTableViewCellDelegate & StatusProvider {
// // [UI] hook to configure context menu for images
// func aspectTableView(_ tableView: UITableView, previewForDismissingContextMenuWithConfiguration configuration: UIContextMenuConfiguration) -> UITargetedPreview? {
// return handleTableView(tableView, previewForDismissingContextMenuWithConfiguration: configuration)
// }
//}
//
//// [B9] aspectTableView(_:willPerformPreviewActionForMenuWith:animator:)
//extension StatusTableViewControllerAspect where Self: StatusTableViewCellDelegate & StatusProvider {
// // [UI] hook to configure context menu preview action
// func aspectTableView(_ tableView: UITableView, willPerformPreviewActionForMenuWith configuration: UIContextMenuConfiguration, animator: UIContextMenuInteractionCommitAnimating) {
// handleTableView(tableView, willPerformPreviewActionForMenuWith: configuration, animator: animator)
// }
//}
//
//// MARK: - UITableViewDataSourcePrefetching [C]
//
//// [C1] aspectTableView(:prefetchRowsAt)
//extension StatusTableViewControllerAspect where Self: UITableViewDataSourcePrefetching & StatusTableViewCellDelegate & StatusProvider {
// /// [Data Source] hook to prefetch status
// func aspectTableView(_ tableView: UITableView, prefetchRowsAt indexPaths: [IndexPath]) {
// handleTableView(tableView, prefetchRowsAt: indexPaths)
// }
//}
//
//// [C2] aspectTableView(:prefetchRowsAt)
//extension StatusTableViewControllerAspect where Self: UITableViewDataSourcePrefetching & StatusTableViewCellDelegate & StatusProvider {
// /// [Data Source] hook to cancel prefetch status
// func aspectTableView(_ tableView: UITableView, cancelPrefetchingForRowsAt indexPaths: [IndexPath]) {
// handleTableView(tableView, cancelPrefetchingForRowsAt: indexPaths)
// }
//}
//
//// MARK: - AVPlayerViewControllerDelegate & NeedsDependency [D]
//
//// [D1] aspectPlayerViewController(_:willBeginFullScreenPresentationWithAnimationCoordinator:)
//extension StatusTableViewControllerAspect where Self: AVPlayerViewControllerDelegate & NeedsDependency {
// /// [Media] hook to mark transitioning to video service
// func aspectPlayerViewController(_ playerViewController: AVPlayerViewController, willBeginFullScreenPresentationWithAnimationCoordinator coordinator: UIViewControllerTransitionCoordinator) {
// handlePlayerViewController(playerViewController, willBeginFullScreenPresentationWithAnimationCoordinator: coordinator)
// }
//}
//
//// [D2] aspectPlayerViewController(_:willEndFullScreenPresentationWithAnimationCoordinator:)
//extension StatusTableViewControllerAspect where Self: AVPlayerViewControllerDelegate & NeedsDependency {
// /// [Media] hook to mark transitioning to video service
// func aspectPlayerViewController(_ playerViewController: AVPlayerViewController, willEndFullScreenPresentationWithAnimationCoordinator coordinator: UIViewControllerTransitionCoordinator) {
// handlePlayerViewController(playerViewController, willEndFullScreenPresentationWithAnimationCoordinator: coordinator)
// }
//}
//

View File

@ -1,7 +1,7 @@
{
"images" : [
{
"filename" : "Home Black.png",
"filename" : "IMG_1010.jpg",
"idiom" : "universal"
}
],

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

View File

@ -1,4 +0,0 @@
"NSCameraUsageDescription" = "Bo kişandina wêneyê ji bo rewşa şandiyan tê bikaranîn";
"NSPhotoLibraryAddUsageDescription" = "Ji bo tomarkirina wêneyê di pirtûkxaneya wêneyan de tê bikaranîn";
"NewPostShortcutItemTitle" = "Şandiya nû";
"SearchShortcutItemTitle" = "Bigere";

View File

@ -0,0 +1,4 @@
"NSCameraUsageDescription" = "Used to take photo for post status";
"NSPhotoLibraryAddUsageDescription" = "Used to save photo into the Photo Library";
"NewPostShortcutItemTitle" = "New Post";
"SearchShortcutItemTitle" = "Search";

View File

@ -26,10 +26,10 @@ final class BadgeButton: UIButton {
extension BadgeButton {
private func _init() {
titleLabel?.font = UIFontMetrics(forTextStyle: .caption1).scaledFont(for: .systemFont(ofSize: 13, weight: .medium))
setBackgroundColor(Asset.Colors.badgeBackground.color, for: .normal)
setTitleColor(.white, for: .normal)
setBackgroundColor(.systemBackground, for: .normal)
setTitleColor(.label, for: .normal)
contentEdgeInsets = UIEdgeInsets(top: 5, left: 5, bottom: 5, right: 5)
contentEdgeInsets = UIEdgeInsets(top: 6, left: 6, bottom: 6, right: 6)
}
override func layoutSubviews() {

View File

@ -381,7 +381,7 @@ extension ComposeViewController {
// bind publish bar button state
viewModel.$isPublishBarButtonItemEnabled
.receive(on: DispatchQueue.main)
.assign(to: \.isEnabled, on: publishBarButtonItem)
.assign(to: \.isEnabled, on: publishButton)
.store(in: &disposeBag)
// bind media button toolbar state
@ -669,21 +669,30 @@ extension ComposeViewController {
}
private func setupBackgroundColor(theme: Theme) {
view.backgroundColor = theme.systemElevatedBackgroundColor
tableView.backgroundColor = theme.systemElevatedBackgroundColor
let backgroundColor = UIColor(dynamicProvider: { traitCollection in
switch traitCollection.userInterfaceStyle {
case .light:
return .systemBackground
default:
return theme.systemElevatedBackgroundColor
}
})
view.backgroundColor = backgroundColor
tableView.backgroundColor = backgroundColor
composeToolbarBackgroundView.backgroundColor = theme.composeToolbarBackgroundColor
}
// keyboard shortcutBar
private func setupInputAssistantItem(item: UITextInputAssistantItem) {
let groups = [UIBarButtonItemGroup(barButtonItems: [
let barButtonItems = [
composeToolbarView.mediaBarButtonItem,
composeToolbarView.pollBarButtonItem,
composeToolbarView.contentWarningBarButtonItem,
composeToolbarView.visibilityBarButtonItem,
], representativeItem: nil)]
]
let group = UIBarButtonItemGroup(barButtonItems: barButtonItems, representativeItem: nil)
item.trailingBarButtonGroups = groups
item.trailingBarButtonGroups = [group]
}
private func configureToolbarDisplay(keyboardHasShortcutBar: Bool) {
@ -761,15 +770,6 @@ extension ComposeViewController: UITextViewDelegate {
setupInputAssistantItem(item: textView.inputAssistantItem)
return true
}
func textViewDidBeginEditing(_ textView: UITextView) {
switch textView {
case textEditorView.textView:
setupInputAssistantItem(item: textView.inputAssistantItem)
default:
assertionFailure()
}
}
func textViewDidChange(_ textView: UITextView) {
switch textView {
@ -915,14 +915,25 @@ extension ComposeViewController: UITextViewDelegate {
// MARK: - ComposeToolbarViewDelegate
extension ComposeViewController: ComposeToolbarViewDelegate {
func composeToolbarView(_ composeToolbarView: ComposeToolbarView, cameraButtonDidPressed sender: Any, mediaSelectionType type: ComposeToolbarView.MediaSelectionType) {
func composeToolbarView(_ composeToolbarView: ComposeToolbarView, mediaButtonDidPressed sender: Any, mediaSelectionType type: ComposeToolbarView.MediaSelectionType) {
switch type {
case .photoLibrary:
present(photoLibraryPicker, animated: true, completion: nil)
case .camera:
present(imagePickerController, animated: true, completion: nil)
case .browse:
#if SNAPSHOT
guard let image = UIImage(named: "Athens") else { return }
let attachmentService = MastodonAttachmentService(
context: context,
image: image,
initialAuthenticationBox: viewModel.authenticationBox
)
viewModel.attachmentServices = viewModel.attachmentServices + [attachmentService]
#else
present(documentPickerController, animated: true, completion: nil)
#endif
}
}

View File

@ -131,14 +131,9 @@ extension ComposeStatusContentTableViewCell {
metaText.textView.leadingAnchor.constraint(equalTo: textEditorViewContainerView.layoutMarginsGuide.leadingAnchor),
metaText.textView.trailingAnchor.constraint(equalTo: textEditorViewContainerView.layoutMarginsGuide.trailingAnchor),
metaText.textView.bottomAnchor.constraint(equalTo: textEditorViewContainerView.bottomAnchor),
metaText.textView.heightAnchor.constraint(greaterThanOrEqualToConstant: 88).priority(.defaultHigh),
metaText.textView.heightAnchor.constraint(greaterThanOrEqualToConstant: 64).priority(.defaultHigh),
])
statusContentWarningEditorView.textView.delegate = self
// statusView.nameTrialingDotLabel.isHidden = true
// statusView.dateLabel.isHidden = true
// statusContentWarningEditorView.isHidden = true
// statusView.statusContainerStackView.isHidden = true
}
}
@ -166,7 +161,10 @@ extension ComposeStatusContentTableViewCell: UITextViewDelegate {
logger.debug("\((#file as NSString).lastPathComponent, privacy: .public)[\(#line, privacy: .public)], \(#function, privacy: .public): text: \(textView.text ?? "<nil>")")
guard textView === statusContentWarningEditorView.textView else { return }
// replace line break with space
textView.text = textView.text.replacingOccurrences(of: "\n", with: " ")
// needs check input state to prevent break the IME
if textView.markedTextRange == nil {
textView.text = textView.text.replacingOccurrences(of: "\n", with: " ")
}
contentWarningContent.send(textView.text)
}

View File

@ -13,7 +13,7 @@ import MastodonAsset
import MastodonLocalization
protocol ComposeToolbarViewDelegate: AnyObject {
func composeToolbarView(_ composeToolbarView: ComposeToolbarView, cameraButtonDidPressed sender: Any, mediaSelectionType type: ComposeToolbarView.MediaSelectionType)
func composeToolbarView(_ composeToolbarView: ComposeToolbarView, mediaButtonDidPressed sender: Any, mediaSelectionType type: ComposeToolbarView.MediaSelectionType)
func composeToolbarView(_ composeToolbarView: ComposeToolbarView, pollButtonDidPressed sender: Any)
func composeToolbarView(_ composeToolbarView: ComposeToolbarView, emojiButtonDidPressed sender: Any)
func composeToolbarView(_ composeToolbarView: ComposeToolbarView, contentWarningButtonDidPressed sender: Any)
@ -304,21 +304,21 @@ extension ComposeToolbarView {
let photoLibraryAction = UIAction(title: L10n.Scene.Compose.MediaSelection.photoLibrary, image: UIImage(systemName: "rectangle.on.rectangle"), identifier: nil, discoverabilityTitle: nil, attributes: [], state: .off) { [weak self] _ in
guard let self = self else { return }
os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s: mediaSelectionType: .photoLibrary", ((#file as NSString).lastPathComponent), #line, #function)
self.delegate?.composeToolbarView(self, cameraButtonDidPressed: self.mediaButton, mediaSelectionType: .photoLibrary)
self.delegate?.composeToolbarView(self, mediaButtonDidPressed: self.mediaButton, mediaSelectionType: .photoLibrary)
}
children.append(photoLibraryAction)
if UIImagePickerController.isSourceTypeAvailable(.camera) {
let cameraAction = UIAction(title: L10n.Scene.Compose.MediaSelection.camera, image: UIImage(systemName: "camera"), identifier: nil, discoverabilityTitle: nil, attributes: [], state: .off, handler: { [weak self] _ in
guard let self = self else { return }
os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s: mediaSelectionType: .camera", ((#file as NSString).lastPathComponent), #line, #function)
self.delegate?.composeToolbarView(self, cameraButtonDidPressed: self.mediaButton, mediaSelectionType: .camera)
self.delegate?.composeToolbarView(self, mediaButtonDidPressed: self.mediaButton, mediaSelectionType: .camera)
})
children.append(cameraAction)
}
let browseAction = UIAction(title: L10n.Scene.Compose.MediaSelection.browse, image: UIImage(systemName: "ellipsis"), identifier: nil, discoverabilityTitle: nil, attributes: [], state: .off) { [weak self] _ in
guard let self = self else { return }
os_log(.info, log: .debug, "%{public}s[%{public}ld], %{public}s: mediaSelectionType: .browse", ((#file as NSString).lastPathComponent), #line, #function)
self.delegate?.composeToolbarView(self, cameraButtonDidPressed: self.mediaButton, mediaSelectionType: .browse)
self.delegate?.composeToolbarView(self, mediaButtonDidPressed: self.mediaButton, mediaSelectionType: .browse)
}
children.append(browseAction)

View File

@ -21,7 +21,9 @@ extension HashtagTimelineViewModel {
context: context,
configuration: StatusSection.Configuration(
statusTableViewCellDelegate: statusTableViewCellDelegate,
timelineMiddleLoaderTableViewCellDelegate: nil
timelineMiddleLoaderTableViewCellDelegate: nil,
filterContext: .none,
activeFilters: nil
)
)

View File

@ -6,7 +6,7 @@
//
#if DEBUG
#if DEBUG || SNAPSHOT
import os.log
import UIKit
import CoreData

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