Compare commits
14 Commits
5428fb2154
...
f5110420a8
Author | SHA1 | Date |
---|---|---|
Isak Alexander | f5110420a8 | |
Criss | a239dc3638 | |
Karol Kosek | ba7f71742f | |
Isak Alexander | d551a2eb3f | |
Isak Alexander | 318c9b49ef | |
Alibek Omarov | 1e26196e9e | |
Konrad Pozniak | 08780eade8 | |
Mélanie Chauvel | 9d2da9e79e | |
Alibek Omarov | 918ca049bf | |
Alibek Omarov | 23e602e3d1 | |
Alibek Omarov | 9c29cf1640 | |
Alibek Omarov | ef6343faaa | |
Alibek Omarov | 205e3b8863 | |
Alibek Omarov | dddd6554f9 |
|
@ -178,7 +178,9 @@ dependencies {
|
|||
|
||||
implementation "com.github.connyduck:sparkbutton:4.0.0"
|
||||
|
||||
implementation 'com.github.MikeOrtiz:TouchImageView:3.0.1'
|
||||
implementation 'com.github.piasy:BigImageViewer:1.6.5'
|
||||
implementation 'com.github.piasy:GlideImageLoader:1.6.5'
|
||||
implementation 'com.github.piasy:GlideImageViewFactory:1.6.5'
|
||||
|
||||
implementation "com.mikepenz:materialdrawer:$materialdrawerVersion"
|
||||
implementation "com.mikepenz:materialdrawer-iconics:$materialdrawerVersion"
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
<resources>
|
||||
|
||||
<string name="about_tusky_license">Husky ist freie Open-Source-Software.
|
||||
Es ist lizenziert unter der GNU General Public License Version 3.
|
||||
Du kannst dir die Lizenz hier anschauen: https://www.gnu.org/licenses/gpl-3.0.de.html</string>
|
||||
<string name="about_tusky_license">Husky ist freie eine quelloffene Software. Es ist lizenziert unter der GNU General Public License Version 3. Du kannst dir die Lizenz hier anschauen: https://www.gnu.org/licenses/gpl-3.0.de.html</string>
|
||||
|
||||
|
||||
<string name="about_tusky_account">Huskys Profil</string>
|
||||
|
@ -17,15 +15,14 @@
|
|||
<string name="about_tusky_version">Husky %s</string>
|
||||
|
||||
|
||||
<string name="about_powered_by_tusky">Powered by Husky</string>
|
||||
<string name="about_powered_by_tusky">Angetrieben durch Husky</string>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<string name="about_project_site"> Webseite des Projekts:\n
|
||||
https://husky.fwgs.ru
|
||||
</string>
|
||||
<string name="about_project_site">Website des Projekts:
|
||||
\n https://husky.fwgs.ru</string>
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -18,4 +18,52 @@
|
|||
<string name="pref_title_hide_muted_users">Ignorierte Nutzer verstecken</string>
|
||||
<string name="pref_title_notification_filter_emoji">Reaktionen auf meine Nachrichten</string>
|
||||
<string name="action_reply_to">Antwort auf</string>
|
||||
<string name="action_sticker">Sticker</string>
|
||||
<string name="pref_title_enable_big_emojis">Große eigene Emoji aktivieren</string>
|
||||
<string name="pref_title_enable_experimental_stickers">Experimentelle Pleroma-FE Sticker aktiveren (wenn verfügbar)</string>
|
||||
<string name="action_send">POSTEN</string>
|
||||
<string name="action_send_public">POSTEN!</string>
|
||||
<string name="action_toggle_visibility">Beitragssichtbarkeit</string>
|
||||
<string name="action_reblog">Wiederholen</string>
|
||||
<string name="action_hide_reblogs">Widerholungen verbergen</string>
|
||||
<string name="action_show_reblogs">Wiederholungen anzeigen</string>
|
||||
<string name="action_open_reblogger">Wiederholungsauthor anzeigen</string>
|
||||
<string name="action_open_reblogged_by">Wiederholungen anzeigen</string>
|
||||
<string name="action_schedule_toot">Beitrag planen</string>
|
||||
<string name="error_sticker_fetch">Es passierte ein Fehler bei dem Empfang des Stickers</string>
|
||||
<string name="send_status_link_to">Beitrags-URL teilen mit…</string>
|
||||
<string name="send_status_content_to">Beitrag teilen mit…</string>
|
||||
<string name="send_toot_notification_title">Beitrag wird gesendet…</string>
|
||||
<string name="send_toot_notification_error_title">Fehler beim Senden des Beitrages</string>
|
||||
<string name="send_toot_notification_channel_name">Beiträge werden gesendet</string>
|
||||
<string name="send_toot_notification_saved_content">Eine Kopier des Beitrages wurde in den Entwurfen gesichert</string>
|
||||
<string name="status_share_content">Inhalt des Beitrages teilen</string>
|
||||
<string name="action_unreblog">Wiederholung entfernen</string>
|
||||
<string name="action_access_scheduled_toot">Geplante Beiträe</string>
|
||||
<string name="dialog_redraft_toot_warning">Löschen und Beitrag neu verfassen\?</string>
|
||||
<string name="notification_boost_description">Benachrichtigungen, wenn deine Beiträge wiederholt werden</string>
|
||||
<string name="status_boosted_format">%s wiederholte</string>
|
||||
<string name="compose_shortcut_long_label">Beitrag verfassen</string>
|
||||
<string name="unreblog_private">Wiederholung entfernen</string>
|
||||
<string name="action_open_toot">Beitrag öffnen</string>
|
||||
<string name="reblog_private">Für originale Audienz wiederholen</string>
|
||||
<string name="description_status_reblogged">Wiederholt</string>
|
||||
<string name="dialog_delete_toot_warning">Diesen Beitrag löschen\?</string>
|
||||
<string name="error_sender_account_gone">Fehler beim Senden des Beitrages.</string>
|
||||
<string name="notification_reblog_format">%s hat deinen Beitrag wiederholt</string>
|
||||
<string name="notification_favourite_format">%s hat deinen Beitrag favorisiert</string>
|
||||
<string name="notification_boost_name">Wiederholt</string>
|
||||
<string name="notification_favourite_description">Benachrichigungen, wenn deine Beiträge favorisiert wurden</string>
|
||||
<string name="pref_title_confirm_reblogs">Bestätigung vor dem Löschen anzeigen</string>
|
||||
<string name="pref_title_notification_filter_reblogs">Meine Beiträge wurden wiederholt</string>
|
||||
<string name="pref_title_show_boosts">Wiederholungen anzeigen</string>
|
||||
<string name="pref_title_alway_open_spoiler">Beiträge mit sensiblen Inhalten immer anzeigen</string>
|
||||
<plurals name="reblogs">
|
||||
<item quantity="one"><b>%s</b> wiederholt</item>
|
||||
<item quantity="other"><b>%s</b> wiederholten</item>
|
||||
</plurals>
|
||||
<string name="status_share_link">Link zum Beitrag teilen</string>
|
||||
<string name="title_scheduled_toot">Geplante Beiträge</string>
|
||||
<string name="title_reblogged_by">Wiederholt von</string>
|
||||
<string name="title_view_thread">Beitrag</string>
|
||||
</resources>
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="notification_favourite_format">%s favourited your post</string>
|
||||
</resources>
|
|
@ -60,4 +60,5 @@
|
|||
<string name="send_toot_notification_saved_content">Kopia postu została zapisana jako szkic</string>
|
||||
<string name="error_sender_account_gone">Wysyłanie postu nie powiodło się.</string>
|
||||
<string name="pref_title_alway_open_spoiler">Nie ukrywaj zawartości multimedialnej oznaczonej jako wrażliwa</string>
|
||||
<string name="action_access_scheduled_toot">Zaplanowane posty</string>
|
||||
</resources>
|
|
@ -11,7 +11,7 @@
|
|||
<string name="about_tusky_account">Perfil do Husky</string>
|
||||
|
||||
|
||||
<string name="restart_emoji">É preciso reiniciar o Husky para aplicar essas mudanças</string>
|
||||
<string name="restart_emoji">É necessário reiniciar o Husky para aplicar essas mudanças</string>
|
||||
|
||||
|
||||
<string name="license_description">O Husky contém código e recursos dos seguintes projetos de código aberto:</string>
|
||||
|
@ -29,8 +29,8 @@
|
|||
|
||||
|
||||
|
||||
<string name="about_bug_feature_request_site">Reporte bugs & requisite funcionalidades:\n
|
||||
https://git.mentality.rip/FWGS/Husky/issues</string>
|
||||
<string name="about_bug_feature_request_site">Reporte bugs e solicite funcionalidades:
|
||||
\n https://git.mentality.rip/FWGS/Husky/issues</string>
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="action_emoji_react">Reagera</string>
|
||||
<string name="action_emoji_unreact">Ta bort reaktion</string>
|
||||
<string name="action_emoji_reacted_by">Vem reagerade</string>
|
||||
<string name="action_enable_formatting_syntax">Aktivera %s</string>
|
||||
<string name="action_disable_formatting_syntax">Avaktivera %s</string>
|
||||
<string name="title_emoji_reacted_by">%s reagerade av</string>
|
||||
<string name="hint_appname">Applikationsmanamn</string>
|
||||
<string name="admin">Administratör</string>
|
||||
<string name="action_sticker">Klistermärken</string>
|
||||
<string name="error_media_upload_size">Filstorleken är större än vad instanser tillåter</string>
|
||||
<string name="error_sticker_fetch">Ett fel inträffade vid hämtning av klistermärke</string>
|
||||
<string name="notification_emoji_name">Emoji Reaktioner</string>
|
||||
<string name="pref_title_hide_muted_users">Dölj tystade användare</string>
|
||||
<string name="pref_title_enable_big_emojis">Aktivera större anpassade emojis</string>
|
||||
<string name="action_toggle_visibility">Inläggssynlighet</string>
|
||||
<string name="action_schedule_toot">Schemalägg inlägg</string>
|
||||
<string name="action_reblog">Repetera</string>
|
||||
<string name="action_unreblog">Ta bort repetering</string>
|
||||
<string name="action_hide_reblogs">Dölj repeteringar</string>
|
||||
<string name="action_show_reblogs">Visa repeteringar</string>
|
||||
<string name="action_send">SKICKA</string>
|
||||
<string name="action_send_public">SKICKA!</string>
|
||||
<string name="action_reply_to">Svara till</string>
|
||||
<string name="hint_website">Applikationswebbplats</string>
|
||||
<string name="moderator">Moderator</string>
|
||||
<string name="notification_emoji_format">%s reagerade med %s på ditt inlägg</string>
|
||||
<string name="notification_emoji_description">Aviseringar på nya emoji-reaktioner</string>
|
||||
<string name="pref_title_default_formatting">Syntax på formatteringsstandard (om instansen stödjer det)</string>
|
||||
<string name="pref_title_notification_filter_emoji">reaktioner på mina inlägg med emojis</string>
|
||||
<string name="pref_title_enable_experimental_stickers">Aktivera experimentell Pleroma-FE klistermärke (om möjligt)</string>
|
||||
<string name="action_open_reblogged_by">Visa repeteringar</string>
|
||||
<string name="action_access_scheduled_toot">Schemalagda inlägg</string>
|
||||
<string name="reblog_private">Repetera till den ursprungliga målgruppen</string>
|
||||
<string name="unreblog_private">Ta bort repetering</string>
|
||||
<string name="action_open_toot">Öppna inlägg</string>
|
||||
<string name="compose_shortcut_long_label">Skriv inlägg</string>
|
||||
<string name="dialog_delete_toot_warning">Ta bort detta inlägg\?</string>
|
||||
<string name="action_open_reblogger">Öppna avsändaren av repeteringen</string>
|
||||
<string name="description_status_reblogged">Repeterat</string>
|
||||
</resources>
|
|
@ -9,7 +9,7 @@
|
|||
<string name="about_tusky_account">บัญชีทางการของ Husky</string>
|
||||
|
||||
|
||||
<string name="about_tusky_license">Husky คือซอฟต์แวร์เสรีและโอเพนซอร์ส <!-- --> ภายใต้สัญญาอนุญาต GNU General Public License Version 3 <!-- -->ดูสัญญาที่ : https://www.gnu.org/licenses/gpl-3.0.ja.html</string>
|
||||
<string name="about_tusky_license">Husky คือซอฟต์แวร์เสรีและโอเพนซอร์ส ภายใต้สัญญาอนุญาต GNU General Public License Version 3 ดูสัญญาที่ : https://www.gnu.org/licenses/gpl-3.0.ja.html</string>
|
||||
|
||||
|
||||
<string name="about_powered_by_tusky">ขับเคลื่อนด้วย Husky</string>
|
||||
|
@ -44,19 +44,13 @@
|
|||
|
||||
|
||||
|
||||
<string name="dialog_whats_an_instance">"ใส่ที่อยู่หรือโดเมนของ Instance ได้ที่นี่ เช่น shitposter.club blob.cat expired.mentality.rip และ <a href=\"https://fediverse.network/pleroma?count=peers\">อีกมากมาย!</a>
|
||||
<string name="dialog_whats_an_instance">ใส่ที่อยู่หรือโดเมนของ Instance ได้ที่นี่ เช่น shitposter.club blob.cat expired.mentality.rip และ <a href="https://fediverse.network/pleroma?count=peers">อีกมากมาย!</a>
|
||||
\n
|
||||
\nถ้ายังไม่มีบัญชี สามารถใส่ชื่อ Instance ที่ต้องการจะร่วมแล้วสร้างบัญชีที่นั่น
|
||||
\n
|
||||
\nInstance คือที่ที่หนึ่งไว้โฮสต์บัญชีคุณ แต่คุณยังสามารถสื่อสาร ติดตามบุคคลบน Instance อื่นได้เหมือนอยู่บนไซต์เดียวกัน
|
||||
\n
|
||||
\nพบข้อมูลเพิ่มเติมได้ที่ <a href=\"https://joinmastodon.org\">joinmastodon.org</a> "<a href="https://fediverse.network/pleroma?count=peers">more!</a>
|
||||
\n\nIf you don\'t yet have an account, you can enter the name of the instance you\'d like to
|
||||
join and create an account there.\n\nAn instance is a single place where your account is
|
||||
hosted, but you can easily communicate with and follow folks on other instances as though
|
||||
you were on the same site.
|
||||
\n\nMore info can be found at <a href="https://joinmastodon.org">joinmastodon.org</a>.
|
||||
</string>
|
||||
\nพบข้อมูลเพิ่มเติมได้ที่ <a href="https://joinmastodon.org">joinmastodon.org</a> </string>
|
||||
|
||||
|
||||
</resources>
|
||||
|
|
|
@ -33,13 +33,14 @@
|
|||
<string name="action_toggle_visibility">Post visibility</string>
|
||||
<string name="action_schedule_toot">Schedule post</string>
|
||||
<string name="action_reblog">Repeat</string>
|
||||
<string name="action_unreblog">Remove repeats</string>
|
||||
<string name="action_unreblog">Remove repeat</string>
|
||||
<string name="action_hide_reblogs">Hide repeats</string>
|
||||
<string name="action_show_reblogs">Show repeats</string>
|
||||
<string name="action_send">POST</string>
|
||||
<string name="action_send_public">POST!</string>
|
||||
<string name="action_open_reblogger">Open repeat author</string>
|
||||
<string name="action_open_reblogged_by">Show repeats</string>
|
||||
<string name="action_access_scheduled_toot">Scheduled posts</string>
|
||||
<string name="reblog_private">Repeat to original audience</string>
|
||||
<string name="unreblog_private">Remove repeat</string>
|
||||
<string name="action_open_toot">Open post</string>
|
||||
|
|
|
@ -22,6 +22,8 @@ import android.util.Log
|
|||
import androidx.emoji.text.EmojiCompat
|
||||
import androidx.preference.PreferenceManager
|
||||
import androidx.work.WorkManager
|
||||
import com.github.piasy.biv.BigImageViewer
|
||||
import com.github.piasy.biv.loader.glide.GlideCustomImageLoader
|
||||
import com.keylesspalace.tusky.components.notifications.NotificationWorkerFactory
|
||||
import com.keylesspalace.tusky.di.AppInjector
|
||||
import com.keylesspalace.tusky.util.*
|
||||
|
@ -73,6 +75,8 @@ class TuskyApplication : Application(), HasAndroidInjector {
|
|||
RxJavaPlugins.setErrorHandler {
|
||||
Log.w("RxJava", "undeliverable exception", it)
|
||||
}
|
||||
|
||||
BigImageViewer.initialize(GlideCustomImageLoader.with(this))
|
||||
}
|
||||
|
||||
override fun attachBaseContext(base: Context) {
|
||||
|
|
|
@ -103,7 +103,7 @@ public class BlocksAdapter extends AccountAdapter {
|
|||
listener.onBlock(false, id, position);
|
||||
}
|
||||
});
|
||||
avatar.setOnClickListener(v -> listener.onViewAccount(id));
|
||||
itemView.setOnClickListener(v -> listener.onViewAccount(id));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -44,6 +44,6 @@ internal class FollowRequestViewHolder(itemView: View, private val showHeader: B
|
|||
listener.onRespondToFollowRequest(false, id, position)
|
||||
}
|
||||
}
|
||||
itemView.avatar.setOnClickListener { listener.onViewAccount(id) }
|
||||
itemView.setOnClickListener { listener.onViewAccount(id) }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -83,7 +83,7 @@ public class MutesAdapter extends AccountAdapter {
|
|||
|
||||
void setupActionListener(final AccountActionListener listener) {
|
||||
unmute.setOnClickListener(v -> listener.onMute(false, id, getAdapterPosition()));
|
||||
avatar.setOnClickListener(v -> listener.onViewAccount(id));
|
||||
itemView.setOnClickListener(v -> listener.onViewAccount(id));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -366,7 +366,7 @@ public class NotificationsAdapter extends RecyclerView.Adapter {
|
|||
}
|
||||
|
||||
void setupButtons(final NotificationActionListener listener, final String accountId) {
|
||||
avatar.setOnClickListener(v -> listener.onViewAccount(accountId));
|
||||
itemView.setOnClickListener(v -> listener.onViewAccount(accountId));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -33,9 +33,11 @@ import at.connyduck.sparkbutton.helpers.Utils
|
|||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.request.target.CustomTarget
|
||||
import com.bumptech.glide.request.transition.Transition
|
||||
import com.github.piasy.biv.loader.glide.GlideCustomImageLoader
|
||||
import com.github.piasy.biv.view.BigImageView
|
||||
import com.github.piasy.biv.view.GlideImageViewFactory
|
||||
import com.keylesspalace.tusky.R
|
||||
import com.keylesspalace.tusky.util.withLifecycleContext
|
||||
import com.ortiz.touchview.TouchImageView
|
||||
|
||||
// https://github.com/tootsuite/mastodon/blob/1656663/app/models/media_attachment.rb#L94
|
||||
private const val MEDIA_DESCRIPTION_CHARACTER_LIMIT = 420
|
||||
|
@ -50,9 +52,9 @@ fun <T> T.makeCaptionDialog(existingDescription: String?,
|
|||
dialogLayout.setPadding(padding, padding, padding, padding)
|
||||
|
||||
dialogLayout.orientation = LinearLayout.VERTICAL
|
||||
val imageView = TouchImageView(this).apply {
|
||||
maxZoom = 6f
|
||||
}
|
||||
val imageView = BigImageView(this)
|
||||
// imageView.ssiv.maxScale = 6f
|
||||
imageView.setImageViewFactory(GlideImageViewFactory())
|
||||
|
||||
val displayMetrics = DisplayMetrics()
|
||||
windowManager.defaultDisplay.getMetrics(displayMetrics)
|
||||
|
@ -98,18 +100,9 @@ fun <T> T.makeCaptionDialog(existingDescription: String?,
|
|||
|
||||
// Load the image and manually set it into the ImageView because it doesn't have a fixed
|
||||
// size. Maybe we should limit the size of CustomTarget
|
||||
Glide.with(this)
|
||||
.load(previewUri)
|
||||
.into(object : CustomTarget<Drawable>() {
|
||||
override fun onLoadCleared(placeholder: Drawable?) {}
|
||||
|
||||
override fun onResourceReady(resource: Drawable, transition: Transition<in Drawable>?) {
|
||||
imageView.setImageDrawable(resource)
|
||||
}
|
||||
})
|
||||
imageView.showImage(previewUri)
|
||||
}
|
||||
|
||||
|
||||
private fun Activity.showFailedCaptionMessage() {
|
||||
Toast.makeText(this, R.string.error_failed_set_caption, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
|
|
|
@ -20,15 +20,22 @@ import android.animation.AnimatorListenerAdapter
|
|||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.*
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import androidx.exifinterface.media.ExifInterface
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.load.DataSource
|
||||
import com.bumptech.glide.load.engine.GlideException
|
||||
import com.bumptech.glide.request.RequestListener
|
||||
import com.bumptech.glide.request.target.CustomTarget
|
||||
import com.bumptech.glide.request.target.Target
|
||||
import com.bumptech.glide.request.transition.Transition
|
||||
import com.github.piasy.biv.BigImageViewer
|
||||
import com.github.piasy.biv.loader.ImageLoader
|
||||
import com.github.piasy.biv.view.GlideImageViewFactory
|
||||
import com.keylesspalace.tusky.R
|
||||
import com.keylesspalace.tusky.entity.Attachment
|
||||
import com.keylesspalace.tusky.util.hide
|
||||
|
@ -36,7 +43,11 @@ import com.keylesspalace.tusky.util.visible
|
|||
import io.reactivex.subjects.BehaviorSubject
|
||||
import kotlinx.android.synthetic.main.activity_view_media.*
|
||||
import kotlinx.android.synthetic.main.fragment_view_image.*
|
||||
import java.io.File
|
||||
import java.lang.Exception
|
||||
import kotlin.math.abs
|
||||
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
|
||||
|
||||
|
||||
class ViewImageFragment : ViewMediaFragment() {
|
||||
interface PhotoActionsListener {
|
||||
|
@ -47,7 +58,6 @@ class ViewImageFragment : ViewMediaFragment() {
|
|||
|
||||
private lateinit var photoActionsListener: PhotoActionsListener
|
||||
private lateinit var toolbar: View
|
||||
private var transition = BehaviorSubject.create<Unit>()
|
||||
private var shouldStartTransition = false
|
||||
|
||||
// Volatile: Image requests happen on background thread and we want to see updates to it
|
||||
|
@ -55,6 +65,10 @@ class ViewImageFragment : ViewMediaFragment() {
|
|||
@Volatile
|
||||
private var startedTransition = false
|
||||
|
||||
private var uri = Uri.EMPTY
|
||||
private var previewUri = Uri.EMPTY
|
||||
private var showingPreview = false
|
||||
|
||||
override lateinit var descriptionView: TextView
|
||||
override fun onAttach(context: Context) {
|
||||
super.onAttach(context)
|
||||
|
@ -65,37 +79,45 @@ class ViewImageFragment : ViewMediaFragment() {
|
|||
descriptionView = mediaDescription
|
||||
photoView.transitionName = url
|
||||
startedTransition = false
|
||||
loadImageFromNetwork(url, previewUrl, photoView)
|
||||
uri = Uri.parse(url)
|
||||
if(previewUrl != null && !previewUrl.equals(url)) {
|
||||
previewUri = Uri.parse(previewUrl)
|
||||
}
|
||||
loadImageFromNetwork()
|
||||
}
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
|
||||
toolbar = activity!!.toolbar
|
||||
this.transition = BehaviorSubject.create()
|
||||
return inflater.inflate(R.layout.fragment_view_image, container, false)
|
||||
}
|
||||
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
private lateinit var gestureDetector : GestureDetector
|
||||
|
||||
val gestureDetector = GestureDetector(requireContext(), object : GestureDetector.SimpleOnGestureListener() {
|
||||
override fun onSingleTapConfirmed(e: MotionEvent?): Boolean {
|
||||
onMediaTap()
|
||||
return true
|
||||
}
|
||||
})
|
||||
private val imageOnTouchListener = object : View.OnTouchListener {
|
||||
private var lastY = 0.0f
|
||||
private var swipeStartedWithOneFinger = false
|
||||
|
||||
var lastY = 0f
|
||||
photoView.setOnTouchListener { _, event ->
|
||||
override fun onTouch(v: View, event: MotionEvent): Boolean {
|
||||
// This part is for scaling/translating on vertical move.
|
||||
// We use raw coordinates to get the correct ones during scaling
|
||||
var result = true
|
||||
|
||||
gestureDetector.onTouchEvent(event)
|
||||
|
||||
if (event.action == MotionEvent.ACTION_DOWN) {
|
||||
if(event.pointerCount != 1) {
|
||||
swipeStartedWithOneFinger = false
|
||||
return false
|
||||
}
|
||||
|
||||
when(event.action) {
|
||||
MotionEvent.ACTION_DOWN -> {
|
||||
swipeStartedWithOneFinger = true
|
||||
lastY = event.rawY
|
||||
} else if (!photoView.isZoomed && event.action == MotionEvent.ACTION_MOVE) {
|
||||
}
|
||||
MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
|
||||
onGestureEnd()
|
||||
swipeStartedWithOneFinger = false
|
||||
}
|
||||
MotionEvent.ACTION_MOVE -> {
|
||||
if(swipeStartedWithOneFinger && photoView.ssiv.scale <= photoView.ssiv.minScale) {
|
||||
val diff = event.rawY - lastY
|
||||
// This code is to prevent transformations during page scrolling
|
||||
// If we are already translating or we reached the threshold, then transform.
|
||||
|
@ -106,32 +128,29 @@ class ViewImageFragment : ViewMediaFragment() {
|
|||
photoView.scaleX = scale
|
||||
lastY = event.rawY
|
||||
}
|
||||
return@setOnTouchListener true
|
||||
} else if (event.action == MotionEvent.ACTION_UP || event.action == MotionEvent.ACTION_CANCEL) {
|
||||
onGestureEnd()
|
||||
} else if (event.pointerCount >= 2 || photoView.canScrollHorizontally(1) && photoView.canScrollHorizontally(-1)) {
|
||||
// Starting from here is adapted code from TouchImageView to play nice with pager.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Can scroll horizontally checks if there's still a part of the image.
|
||||
// That can be scrolled until you reach the edge multi-touch event.
|
||||
val parent = view.parent
|
||||
result = when (event.action) {
|
||||
MotionEvent.ACTION_DOWN, MotionEvent.ACTION_MOVE -> {
|
||||
// Disallow RecyclerView to intercept touch events.
|
||||
parent.requestDisallowInterceptTouchEvent(true)
|
||||
// Disable touch on view
|
||||
false
|
||||
}
|
||||
MotionEvent.ACTION_UP -> {
|
||||
// Allow RecyclerView to intercept touch events.
|
||||
parent.requestDisallowInterceptTouchEvent(false)
|
||||
true
|
||||
}
|
||||
else -> true
|
||||
return false
|
||||
}
|
||||
}
|
||||
result
|
||||
|
||||
|
||||
@SuppressLint("ClickableViewAccessibility")
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
gestureDetector = GestureDetector(requireContext(), object : GestureDetector.SimpleOnGestureListener() {
|
||||
override fun onSingleTapConfirmed(e: MotionEvent?): Boolean {
|
||||
onMediaTap()
|
||||
return true
|
||||
}
|
||||
})
|
||||
|
||||
// photoView.setOnTouchListener(this)
|
||||
photoView.setImageLoaderCallback(imageLoaderCallback)
|
||||
photoView.setImageViewFactory(GlideImageViewFactory())
|
||||
|
||||
val arguments = this.requireArguments()
|
||||
val attachment = arguments.getParcelable<Attachment>(ARG_ATTACHMENT)
|
||||
|
@ -181,99 +200,92 @@ class ViewImageFragment : ViewMediaFragment() {
|
|||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
Glide.with(this).clear(photoView)
|
||||
transition.onComplete()
|
||||
super.onDestroyView()
|
||||
photoView.ssiv?.recycle()
|
||||
}
|
||||
|
||||
private fun loadImageFromNetwork(url: String, previewUrl: String?, photoView: ImageView) {
|
||||
val glide = Glide.with(this)
|
||||
// Request image from the any cache
|
||||
glide
|
||||
.load(url)
|
||||
.dontAnimate()
|
||||
.onlyRetrieveFromCache(true)
|
||||
.let {
|
||||
if (previewUrl != null)
|
||||
it.thumbnail(glide
|
||||
.load(previewUrl)
|
||||
.dontAnimate()
|
||||
.onlyRetrieveFromCache(true)
|
||||
.addListener(ImageRequestListener(true, isThumnailRequest = true)))
|
||||
else it
|
||||
}
|
||||
//Request image from the network on fail load image from cache
|
||||
.error(glide.load(url)
|
||||
.centerInside()
|
||||
.addListener(ImageRequestListener(false, isThumnailRequest = false))
|
||||
)
|
||||
.addListener(ImageRequestListener(true, isThumnailRequest = false))
|
||||
.into(photoView)
|
||||
}
|
||||
|
||||
/**
|
||||
* We start transition as soon as we think reasonable but we must take care about couple of
|
||||
* things>
|
||||
* - Do not change image in the middle of transition. It messes up the view.
|
||||
* - Do not transition for the views which don't require it. Starting transition from
|
||||
* multiple fragments does weird things
|
||||
* - Do not wait to transition until the image loads from network
|
||||
*
|
||||
* Preview, cached image, network image, x - failed, o - succeeded
|
||||
* P C N - start transition after...
|
||||
* x x x - the cache fails
|
||||
* x x o - the cache fails
|
||||
* x o o - the cache succeeds
|
||||
* o x o - the preview succeeds. Do not start on cache.
|
||||
* o o o - the preview succeeds. Do not start on cache.
|
||||
*
|
||||
* So start transition after the first success or after anything with the cache
|
||||
*
|
||||
* @param isCacheRequest - is this listener for request image from cache or from the network
|
||||
*/
|
||||
private inner class ImageRequestListener(
|
||||
private val isCacheRequest: Boolean,
|
||||
private val isThumnailRequest: Boolean) : RequestListener<Drawable> {
|
||||
|
||||
override fun onLoadFailed(e: GlideException?, model: Any, target: Target<Drawable>,
|
||||
isFirstResource: Boolean): Boolean {
|
||||
// If cache for full image failed complete transition
|
||||
if (isCacheRequest && !isThumnailRequest && shouldStartTransition
|
||||
&& !startedTransition) {
|
||||
photoActionsListener.onBringUp()
|
||||
}
|
||||
// Hide progress bar only on fail request from internet
|
||||
if (!isCacheRequest) progressBar?.hide()
|
||||
// We don't want to overwrite preview with null when main image fails to load
|
||||
return !isCacheRequest
|
||||
}
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
override fun onResourceReady(resource: Drawable, model: Any, target: Target<Drawable>,
|
||||
dataSource: DataSource, isFirstResource: Boolean): Boolean {
|
||||
progressBar?.hide() // Always hide the progress bar on success
|
||||
|
||||
if (!startedTransition || !shouldStartTransition) {
|
||||
// Set this right away so that we don't have to concurrent post() requests
|
||||
startedTransition = true
|
||||
// post() because load() replaces image with null. Sometimes after we set
|
||||
// the thumbnail.
|
||||
photoView.post {
|
||||
target.onResourceReady(resource, null)
|
||||
if (shouldStartTransition) photoActionsListener.onBringUp()
|
||||
}
|
||||
private inner class DummyCacheTarget(val ctx: Context, val requestPreview : Boolean) : CustomTarget<File>() {
|
||||
override fun onLoadCleared(placeholder: Drawable?) {}
|
||||
override fun onLoadFailed(errorDrawable: Drawable?) {
|
||||
if(requestPreview) {
|
||||
// no preview, no full image in cache, load full image
|
||||
// forget about fancy transition
|
||||
showingPreview = false
|
||||
photoView.showImage(uri)
|
||||
} else {
|
||||
// This wait for transition. If there's no transition then we should hit
|
||||
// another branch. take() will unsubscribe after we have it to not leak menmory
|
||||
transition
|
||||
.take(1)
|
||||
.subscribe { target.onResourceReady(resource, null) }
|
||||
// let's start downloading full image that we supposedly don't have
|
||||
BigImageViewer.prefetch(uri)
|
||||
|
||||
// meanwhile poke cache about preview image
|
||||
Glide.with(ctx).asFile()
|
||||
.load(previewUri)
|
||||
.dontAnimate()
|
||||
.onlyRetrieveFromCache(true)
|
||||
.into(DummyCacheTarget(ctx, true))
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onResourceReady(resource: File, transition: Transition<in File>?) {
|
||||
showingPreview = requestPreview
|
||||
if(requestPreview) {
|
||||
// have preview cached but not full image
|
||||
photoView.showImage(previewUri, uri, true)
|
||||
} else {
|
||||
photoView.showImage(uri)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun loadImageFromNetwork() {
|
||||
Glide.with(this).asFile()
|
||||
.load(uri)
|
||||
.onlyRetrieveFromCache(true)
|
||||
.dontAnimate()
|
||||
.into(DummyCacheTarget(context!!, false))
|
||||
}
|
||||
|
||||
override fun onTransitionEnd() {
|
||||
this.transition.onNext(Unit)
|
||||
// if we had preview, load full image, as transition has ended
|
||||
if (showingPreview) {
|
||||
showingPreview = false
|
||||
photoView.loadMainImageNow()
|
||||
}
|
||||
}
|
||||
|
||||
private val imageLoaderCallback = object : ImageLoader.Callback {
|
||||
override fun onSuccess(image: File?) {
|
||||
if(!showingPreview) {
|
||||
progressBar?.hide()
|
||||
photoView.ssiv?.let {
|
||||
it.orientation = SubsamplingScaleImageView.ORIENTATION_USE_EXIF
|
||||
it.setOnTouchListener(imageOnTouchListener)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onFail(error: Exception?) {
|
||||
progressBar?.hide()
|
||||
}
|
||||
|
||||
override fun onCacheHit(imageType: Int, image: File?) {
|
||||
// image is here, bring up the activity!
|
||||
photoActionsListener.onBringUp()
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
// cache miss but image is downloading, bring up the activity
|
||||
photoActionsListener.onBringUp()
|
||||
}
|
||||
|
||||
override fun onCacheMiss(imageType: Int, image: File?) {
|
||||
// this callback is useless because it's called after
|
||||
// image is downloaded or pulled from cache
|
||||
// so in case of cache miss, onStart is used
|
||||
}
|
||||
|
||||
override fun onFinish() {}
|
||||
override fun onProgress(progress: Int) {
|
||||
// TODO: make use of it :)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,74 +0,0 @@
|
|||
/* Copyright 2019 Joel Pyska
|
||||
*
|
||||
* This file is a part of Tusky.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under the terms of the
|
||||
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
|
||||
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||||
* Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with Tusky; if not,
|
||||
* see <http://www.gnu.org/licenses>. */
|
||||
|
||||
package com.keylesspalace.tusky.util
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.view.MotionEvent
|
||||
import com.google.android.material.appbar.AppBarLayout
|
||||
import androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
|
||||
|
||||
/**
|
||||
* Disable AppBar scroll if content view empty or don't need to scroll
|
||||
*/
|
||||
class AppBarLayoutNoEmptyScrollBehavior : AppBarLayout.Behavior {
|
||||
|
||||
constructor() : super()
|
||||
|
||||
constructor (context: Context, attrs: AttributeSet) : super(context, attrs)
|
||||
|
||||
private fun isRecyclerViewScrollable(appBar: AppBarLayout, recyclerView: RecyclerView?): Boolean {
|
||||
if (recyclerView == null)
|
||||
return false
|
||||
var recyclerViewHeight = recyclerView.height // Height includes RecyclerView plus AppBarLayout at same level
|
||||
val appCompatHeight = appBar.height
|
||||
recyclerViewHeight -= appCompatHeight
|
||||
|
||||
return recyclerView.computeVerticalScrollRange() > recyclerViewHeight
|
||||
}
|
||||
|
||||
override fun onStartNestedScroll(parent: CoordinatorLayout, child: AppBarLayout, directTargetChild: View, target: View, nestedScrollAxes: Int, type: Int): Boolean {
|
||||
return if (isRecyclerViewScrollable(child, getRecyclerView(parent))) {
|
||||
super.onStartNestedScroll(parent, child, directTargetChild, target, nestedScrollAxes, type)
|
||||
} else false
|
||||
}
|
||||
|
||||
override fun onTouchEvent(parent: CoordinatorLayout, child: AppBarLayout, ev: MotionEvent): Boolean {
|
||||
//Prevent scroll on app bar drag
|
||||
return if (child.isShown && !isRecyclerViewScrollable(child, getRecyclerView(parent)))
|
||||
true
|
||||
else
|
||||
super.onTouchEvent(parent, child, ev)
|
||||
}
|
||||
|
||||
private fun getRecyclerView(parent: ViewGroup): RecyclerView? {
|
||||
for (i in 0 until parent.childCount) {
|
||||
val child = parent.getChildAt(i)
|
||||
if (child is RecyclerView)
|
||||
return child
|
||||
else if (child is ViewGroup) {
|
||||
val childRecyclerView = getRecyclerView(child)
|
||||
if (childRecyclerView is RecyclerView)
|
||||
return childRecyclerView
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
}
|
|
@ -17,15 +17,13 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/colorSurface"
|
||||
app:elevation="0dp"
|
||||
app:layout_behavior="com.keylesspalace.tusky.util.AppBarLayoutNoEmptyScrollBehavior">
|
||||
app:elevation="0dp">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/topButtonsLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
app:layout_scrollFlags="scroll|enterAlways">
|
||||
android:orientation="horizontal">
|
||||
|
||||
<Button
|
||||
android:id="@+id/buttonClear"
|
||||
|
|
|
@ -11,15 +11,13 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/colorSurface"
|
||||
app:elevation="0dp"
|
||||
app:layout_behavior="com.keylesspalace.tusky.util.AppBarLayoutNoEmptyScrollBehavior">
|
||||
app:elevation="0dp">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/topButtonsLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
app:layout_scrollFlags="scroll|enterAlways">
|
||||
android:orientation="horizontal">
|
||||
|
||||
<Button
|
||||
android:id="@+id/buttonClear"
|
||||
|
|
|
@ -7,10 +7,12 @@
|
|||
android:clickable="true"
|
||||
android:focusable="true">
|
||||
|
||||
<com.ortiz.touchview.TouchImageView
|
||||
<com.github.piasy.biv.view.BigImageView
|
||||
android:id="@+id/photoView"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
android:layout_height="match_parent"
|
||||
app:initScaleType="fitCenter"
|
||||
app:optimizeDisplay="false" />
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/progressBar"
|
||||
|
|
|
@ -2,14 +2,16 @@
|
|||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item android:id="@+id/action_open_in_web"
|
||||
android:icon="@drawable/ic_exit_to_app_24px"
|
||||
android:iconTint="@color/textColorPrimary"
|
||||
android:title="@string/action_open_in_web"
|
||||
app:showAsAction="always" />
|
||||
|
||||
<item android:id="@+id/action_mention"
|
||||
android:title="@string/action_mention"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item android:id="@+id/action_open_in_web"
|
||||
android:title="@string/action_open_in_web"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item android:id="@+id/action_follow"
|
||||
android:title="@string/action_follow"
|
||||
app:showAsAction="never" />
|
||||
|
@ -32,5 +34,6 @@
|
|||
|
||||
<item
|
||||
android:id="@+id/action_report"
|
||||
android:title="@string/action_report" />
|
||||
android:title="@string/action_report"
|
||||
app:showAsAction="never" />
|
||||
</menu>
|
|
@ -5,17 +5,17 @@
|
|||
android:id="@+id/action_open_in_external_app"
|
||||
android:icon="@drawable/ic_exit_to_app_24px"
|
||||
android:title="@string/action_open_in_external_app"
|
||||
app:showAsAction="ifRoom" />
|
||||
app:showAsAction="always" />
|
||||
<item
|
||||
android:id="@+id/action_download"
|
||||
android:icon="@drawable/ic_file_download_black_24dp"
|
||||
android:title="@string/dialog_download_image"
|
||||
app:showAsAction="ifRoom" />
|
||||
app:showAsAction="always" />
|
||||
<item
|
||||
android:id="@+id/action_share_media"
|
||||
android:icon="@drawable/ic_menu_share_24dp"
|
||||
android:title="@string/action_share"
|
||||
app:showAsAction="ifRoom" />
|
||||
app:showAsAction="always" />
|
||||
<item
|
||||
android:id="@+id/action_copy_media_link"
|
||||
android:title="@string/action_copy_link"
|
||||
|
|
|
@ -468,7 +468,6 @@
|
|||
<string name="description_status_bookmarked">أضيف إلى الفواصل المرجعية</string>
|
||||
<string name="select_list_title">اختر قائمة</string>
|
||||
<string name="list">القائمة</string>
|
||||
<string name="gradient_for_media">اظهر ألوانا متدرّجة للوسائط المخفية</string>
|
||||
<string name="no_saved_status">ليس لديك أية مسودات.</string>
|
||||
<string name="no_scheduled_status">ليس لديك أية منشورات مُبرمَجة للنشر.</string>
|
||||
<string name="error_audio_upload_size">يجب أن يكون حجم الملفات الصوتية أقل مِن 40 ميغابايت.</string>
|
||||
|
@ -494,4 +493,9 @@
|
|||
<string name="notification_follow_request_format">%s طلبَ متابعتك</string>
|
||||
<string name="hashtags">الوسوم</string>
|
||||
<string name="add_hashtag_title">إضافة وسم</string>
|
||||
<string name="pref_title_gradient_for_media">اظهر ألوانا متدرّجة للوسائط المخفية</string>
|
||||
<string name="pref_main_nav_position">موضع التنقل الرئيسي</string>
|
||||
<string name="pref_main_nav_position_option_bottom">الأسفل</string>
|
||||
<string name="pref_main_nav_position_option_top">الأعلى</string>
|
||||
<string name="action_unmute_domain">إلغاء كتم %s</string>
|
||||
</resources>
|
|
@ -442,7 +442,6 @@
|
|||
<string name="select_list_title">Seleccionar la llista</string>
|
||||
<string name="list">Llista</string>
|
||||
<string name="post_lookup_error_format">S\'ha produït un error en cercar la publicació %s</string>
|
||||
<string name="gradient_for_media">Mostra degradats de colors per a contingut multimèdia ocult</string>
|
||||
<string name="no_scheduled_status">No tens cap estat planificat.</string>
|
||||
<string name="error_audio_upload_size">Els fitxers d\'àudio han de ser més petits que 40MB.</string>
|
||||
<string name="no_saved_status">No tens cap esborrany.</string>
|
||||
|
|
|
@ -8,10 +8,10 @@
|
|||
<string name="error_no_web_browser_found">Kein Webbrowser gefunden.</string>
|
||||
<string name="error_authorization_unknown">Ein undefinierbarer Autorisierungsfehler ist aufgetreten.</string>
|
||||
<string name="error_authorization_denied">Autorisierung fehlgeschlagen.</string>
|
||||
<string name="error_retrieving_oauth_token">Es konnte kein Login-Token abgerufen werden.</string>
|
||||
<string name="error_retrieving_oauth_token">Es konnte kein Anmeldungstoken abgerufen werden.</string>
|
||||
<string name="error_compose_character_limit">Der Beitrag ist zu lang!</string>
|
||||
<string name="error_image_upload_size">Die Datei muss kleiner als 8MB sein.</string>
|
||||
<string name="error_video_upload_size">Videodateien müssen kleiner als 40MB sein.</string>
|
||||
<string name="error_image_upload_size">Die Datei muss kleiner als 8 MB sein.</string>
|
||||
<string name="error_video_upload_size">Videodateien müssen kleiner als 40 MB sein.</string>
|
||||
<string name="error_media_upload_type">Dieser Dateityp darf nicht hochgeladen werden.</string>
|
||||
<string name="error_media_upload_opening">Die Datei konnte nicht geöffnet werden.</string>
|
||||
<string name="error_media_upload_permission">Leseberechtigung für die Mediendatei wird benötigt.</string>
|
||||
|
@ -63,8 +63,8 @@
|
|||
<string name="action_more">Mehr</string>
|
||||
<string name="action_compose">Schreiben</string>
|
||||
<string name="action_login">Anmelden mit Mastodon</string>
|
||||
<string name="action_logout">Ausloggen</string>
|
||||
<string name="action_logout_confirm">Bist du sicher, dass du dich aus dem Konto %1$s ausloggen möchtest?</string>
|
||||
<string name="action_logout">Abmelden</string>
|
||||
<string name="action_logout_confirm">Bist du sicher, dass du dich aus dem Konto %1$s abmelden möchtest\?</string>
|
||||
<string name="action_follow">Folgen</string>
|
||||
<string name="action_unfollow">Entfolgen</string>
|
||||
<string name="action_block">Blockieren</string>
|
||||
|
@ -92,7 +92,7 @@
|
|||
<string name="action_mute">Stummschalten</string>
|
||||
<string name="action_unmute">Lautschalten</string>
|
||||
<string name="action_mention">Erwähnen</string>
|
||||
<string name="action_hide_media">Verstecke Medien</string>
|
||||
<string name="action_hide_media">Medien verstecken</string>
|
||||
<string name="action_open_drawer">Drawer öffnen</string>
|
||||
<string name="action_save">Speichern</string>
|
||||
<string name="action_edit_profile">Profil bearbeiten</string>
|
||||
|
@ -138,7 +138,7 @@
|
|||
<string name="label_avatar">Profilbild</string>
|
||||
<string name="label_header">Titelbild</string>
|
||||
<string name="link_whats_an_instance">Was ist eine Instanz?</string>
|
||||
<string name="login_connection">Verbinden…</string>
|
||||
<string name="login_connection">Verbinden …</string>
|
||||
<string name="dialog_whats_an_instance">Die Adresse einer Instanz oder Domain kann
|
||||
hier eingegeben werden, wie z.B. mastodon.social, icosahedron.website, social.tchncs.de, und
|
||||
<a href="https://instances.social">mehr!</a>
|
||||
|
@ -149,7 +149,7 @@
|
|||
\n\nWeitere Informationen gibt es auf <a href="https://joinmastodon.org">joinmastodon.org</a>.
|
||||
</string>
|
||||
<string name="dialog_title_finishing_media_upload">Stelle Medienupload fertig</string>
|
||||
<string name="dialog_message_uploading_media">Lade hoch…</string>
|
||||
<string name="dialog_message_uploading_media">Lade hoch …</string>
|
||||
<string name="dialog_download_image">Herunterladen</string>
|
||||
<string name="dialog_message_cancel_follow_request">Folgeanfrage zurückziehen?</string>
|
||||
<string name="dialog_unfollow_warning">Willst du diesem Profil wirklich nicht mehr folgen?</string>
|
||||
|
@ -220,18 +220,15 @@
|
|||
<string name="notification_title_summary">%d neue Interaktionen</string>
|
||||
<string name="description_account_locked">Gesperrtes Profil</string>
|
||||
<string name="about_title_activity">Über</string>
|
||||
<string name="about_tusky_license">Tusky ist freie Open-Source-Software.
|
||||
Es ist lizenziert unter der GNU General Public License Version 3.
|
||||
Du kannst dir die Lizenz hier anschauen: https://www.gnu.org/licenses/gpl-3.0.de.html</string>
|
||||
<string name="about_tusky_license">Tusky ist freie eine quelloffene Software. Es ist lizenziert unter der GNU General Public License Version 3. Du kannst dir die Lizenz hier anschauen: https://www.gnu.org/licenses/gpl-3.0.de.html</string>
|
||||
<!-- note to translators:
|
||||
* you should think of “free” as in “free speech,” not as in “free beer”.
|
||||
We sometimes call it “libre software,” borrowing the French or Spanish word for “free” as in freedom,
|
||||
to show we do not mean the software is gratis. Source: https://www.gnu.org/philosophy/free-sw.html
|
||||
* the url can be changed to link to the localized version of the license.
|
||||
-->
|
||||
<string name="about_project_site"> Webseite des Projekts:\n
|
||||
https://tusky.app
|
||||
</string>
|
||||
<string name="about_project_site">Website des Projekts:
|
||||
\n https://tusky.app</string>
|
||||
<string name="about_bug_feature_request_site"> Fehlermeldungen & Verbesserungsvorschläge:\n
|
||||
https://github.com/tuskyapp/Tusky/issues
|
||||
</string>
|
||||
|
@ -407,7 +404,7 @@
|
|||
<string name="poll_duration_1_day">1 Tag</string>
|
||||
<string name="poll_duration_3_days">3 Tage</string>
|
||||
<string name="poll_duration_7_days">7 Tage</string>
|
||||
<string name="edit_poll">Editieren</string>
|
||||
<string name="edit_poll">Bearbeiten</string>
|
||||
<string name="about_tusky_version">Tusky %s</string>
|
||||
<string name="action_add_poll">Umfrage hinzufügen</string>
|
||||
<string name="pref_title_alway_open_spoiler">Beiträge mit Inhaltswarnungen immer ausklappen</string>
|
||||
|
@ -424,13 +421,11 @@
|
|||
<string name="action_access_scheduled_toot">Geplante Beiträge</string>
|
||||
<string name="action_schedule_toot">Plane Beitrag</string>
|
||||
<string name="action_reset_schedule">Zurücksetzen</string>
|
||||
<string name="error_audio_upload_size">Audiodateien müssen kleiner als 40MB sein.</string>
|
||||
<string name="error_audio_upload_size">Audiodateien müssen kleiner als 40 MB sein.</string>
|
||||
<string name="title_bookmarks">Lesezeichen</string>
|
||||
<string name="action_bookmark">Lesezeichen</string>
|
||||
<string name="action_view_bookmarks">Lesezeichen</string>
|
||||
<string name="gradient_for_media">Bunten Farbverlauf für versteckte Medien anzeigen</string>
|
||||
<string name="about_powered_by_tusky">Powered by Tusky</string>
|
||||
|
||||
<string name="about_powered_by_tusky">Angetrieben durch Tusky</string>
|
||||
<string name="description_status_bookmarked">Als Lesezeichen gespeichert</string>
|
||||
<string name="select_list_title">Liste auswählen</string>
|
||||
<string name="list">Liste</string>
|
||||
|
@ -448,4 +443,25 @@
|
|||
<string name="notification_follow_request_format">"%s möchte dir folgen"</string>
|
||||
<string name="hashtags">Hashtags</string>
|
||||
<string name="add_hashtag_title">Hashtag hinzufügen</string>
|
||||
<string name="pref_title_confirm_reblogs">Bestätigungsdialog vor dem Teilen eines Beitrags</string>
|
||||
<string name="pref_title_show_cards_in_timelines">Linkvorschauen in Timelines anzeigen</string>
|
||||
<string name="pref_title_enable_swipe_for_tabs">Wischgeste zum Wechseln zwischen Tabs</string>
|
||||
<plurals name="poll_info_people">
|
||||
<item quantity="one">%s Person</item>
|
||||
<item quantity="other">%s Personen</item>
|
||||
</plurals>
|
||||
<string name="pref_title_gradient_for_media">Farbverlauf für versteckte Medien anzeigen</string>
|
||||
<string name="abbreviated_seconds_ago">%d Sek.</string>
|
||||
<string name="abbreviated_hours_ago">%d St.</string>
|
||||
<string name="abbreviated_years_ago">%d J.</string>
|
||||
<string name="abbreviated_in_days">in %d T.</string>
|
||||
<string name="abbreviated_in_years">in %d J.</string>
|
||||
<string name="abbreviated_minutes_ago">%d Min.</string>
|
||||
<string name="abbreviated_days_ago">%d T.</string>
|
||||
<string name="abbreviated_in_seconds">in %d Sek.</string>
|
||||
<string name="abbreviated_in_minutes">in %d Min.</string>
|
||||
<string name="abbreviated_in_hours">in %d St.</string>
|
||||
<string name="pref_main_nav_position_option_bottom">Unten</string>
|
||||
<string name="pref_main_nav_position_option_top">Oben</string>
|
||||
<string name="action_unmute_domain">%s nicht mehr verstecken</string>
|
||||
</resources>
|
|
@ -18,4 +18,6 @@
|
|||
<string name="title_favourites">Favourites</string>
|
||||
<string name="error_authorization_denied">Authorisation was denied.</string>
|
||||
<string name="error_authorization_unknown">An unidentified authorisation error occurred.</string>
|
||||
<string name="action_logout">Log out</string>
|
||||
<string name="pref_title_gradient_for_media">Show colourful gradients for hidden media</string>
|
||||
</resources>
|
|
@ -363,7 +363,6 @@
|
|||
<string name="pref_title_animate_gif_avatars">Moviĝi GIF profilbildojn</string>
|
||||
<string name="notification_poll_name">Enketoj</string>
|
||||
<string name="notification_poll_description">Sciigoj pri enketoj kiuj finiĝis</string>
|
||||
|
||||
<string name="edit_hashtag_hint">Kradvortoj sen #</string>
|
||||
<string name="notifications_clear">Viŝi</string>
|
||||
<string name="notifications_apply_filter">Filtri</string>
|
||||
|
@ -450,7 +449,6 @@
|
|||
<string name="list">Listo</string>
|
||||
<string name="post_lookup_error_format">Eraro dum elserĉo de la mesaĝo %s</string>
|
||||
<string name="error_audio_upload_size">Aŭdia dosiero devas esti malpli ol 40MB.</string>
|
||||
<string name="gradient_for_media">Montri buntajn transirojn por kaŝitaj aŭdovidaĵoj</string>
|
||||
<string name="no_saved_status">Vi ne havas iun ajn malneton.</string>
|
||||
<string name="no_scheduled_status">Vi ne havas iun ajn planitan mesaĝon.</string>
|
||||
<string name="notification_follow_request_name">Petoj de sekvado</string>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<string name="error_generic">Ha ocurrido un error.</string>
|
||||
<string name="error_network">¡Se ha producido un error de red! ¡Por favor, comprueba tu conexión e inténtalo de nuevo!</string>
|
||||
<string name="error_empty">Este campo no puede estar vacío.</string>
|
||||
<string name="error_invalid_domain">Nombre de dominio incorrecto</string>
|
||||
<string name="error_invalid_domain">Nombre de dominio no válido</string>
|
||||
<string name="error_failed_app_registration">Fallo de autenticación con esta instancia.</string>
|
||||
<string name="error_no_web_browser_found">No se ha encontrado ningún navegador web.</string>
|
||||
<string name="error_authorization_unknown">Ocurrió un error de autorización no identificado.</string>
|
||||
|
@ -446,7 +446,6 @@
|
|||
<string name="select_list_title">Seleccionar lista</string>
|
||||
<string name="list">Lista</string>
|
||||
<string name="error_audio_upload_size">Los ficheros de audio deben ser menores de 40MB.</string>
|
||||
<string name="gradient_for_media">Mostrar degradados coloridos para el contenido multimedia oculto</string>
|
||||
<string name="no_saved_status">No tienes ningún borrador.</string>
|
||||
<string name="no_scheduled_status">No tienes ningún estado programado.</string>
|
||||
<string name="warning_scheduling_interval">Mastodon tiene un intervalo de programación mínimo de 5 minutos.</string>
|
||||
|
@ -467,4 +466,9 @@
|
|||
<string name="hashtags">Etiquetas</string>
|
||||
<string name="add_hashtag_title">Añadir etiqueta</string>
|
||||
<string name="notification_follow_request_format">%s solicita seguirte</string>
|
||||
<string name="pref_main_nav_position_option_bottom">Fondo</string>
|
||||
<string name="pref_main_nav_position_option_top">Arriba</string>
|
||||
<string name="pref_main_nav_position">Posición de navegación principal</string>
|
||||
<string name="pref_title_gradient_for_media">Mostrar degradados colorido para los medios ocultos</string>
|
||||
<string name="action_unmute_domain">Dejar de silenciar %s</string>
|
||||
</resources>
|
|
@ -441,7 +441,6 @@
|
|||
<string name="description_status_bookmarked">Laster-markatuta</string>
|
||||
<string name="poll_info_time_relative">%s geratzen da</string>
|
||||
<string name="error_audio_upload_size">Audioak 40MB baino gutxiago izan behar ditu.</string>
|
||||
<string name="gradient_for_media">Erakutsi degradatu koloretsuak ezkutuko multimedia-edukirako</string>
|
||||
<string name="select_list_title">Aukeratu zerrenda</string>
|
||||
<string name="list">Zerrenda</string>
|
||||
<string name="no_saved_status">Ez duzu zirriborrorik.</string>
|
||||
|
|
|
@ -437,7 +437,6 @@
|
|||
<string name="title_bookmarks">نشانکها</string>
|
||||
<string name="action_bookmark">نشانک</string>
|
||||
<string name="action_view_bookmarks">نشانکها</string>
|
||||
<string name="gradient_for_media">نمایش گرادیان رنگی برای رسانهٔ نهفته</string>
|
||||
<string name="description_status_bookmarked">نشانشده</string>
|
||||
<string name="select_list_title">گزینش فهرست</string>
|
||||
<string name="list">فهرست</string>
|
||||
|
|
|
@ -12,12 +12,12 @@
|
|||
<string name="error_compose_character_limit">Votre pouet est trop long !</string>
|
||||
<string name="error_image_upload_size">Le fichier doit faire moins de 8 Mo.</string>
|
||||
<string name="error_video_upload_size">Les fichiers vidéos doivent faire moins de 40 Mo.</string>
|
||||
<string name="error_media_upload_type">Ce type de fichier n’est pas accepté.</string>
|
||||
<string name="error_media_upload_type">Ce type de fichier ne peut pas être téléversé.</string>
|
||||
<string name="error_media_upload_opening">Le fichier ne peut pas être ouvert.</string>
|
||||
<string name="error_media_upload_permission">Permission requise pour lire le média.</string>
|
||||
<string name="error_media_download_permission">Permission requise pour enregistrer le média.</string>
|
||||
<string name="error_media_upload_image_or_video">Un même pouet ne peut contenir à la fois une vidéo et une image.</string>
|
||||
<string name="error_media_upload_sending">Échec d’envoi du média.</string>
|
||||
<string name="error_media_upload_sending">Échec du téléversement du média.</string>
|
||||
<string name="error_sender_account_gone">Erreur lors de l’envoi du pouet.</string>
|
||||
<string name="title_home">Accueil</string>
|
||||
<string name="title_notifications">Notifications</string>
|
||||
|
@ -152,7 +152,7 @@
|
|||
\n\nPour plus d’informations, consultez <a href="https://joinmastodon.org">joinmastodon.org</a>.
|
||||
</string>
|
||||
<string name="dialog_title_finishing_media_upload">Mise en ligne des médias</string>
|
||||
<string name="dialog_message_uploading_media">Envoi en cours…</string>
|
||||
<string name="dialog_message_uploading_media">Téléversement en cours…</string>
|
||||
<string name="dialog_download_image">Télécharger</string>
|
||||
<string name="dialog_message_cancel_follow_request">Révoquer la demande d’abonnement ?</string>
|
||||
<string name="dialog_unfollow_warning">Ne plus suivre ce compte ?</string>
|
||||
|
@ -246,16 +246,16 @@
|
|||
<string name="status_media_video">Vidéo</string>
|
||||
<string name="state_follow_requested">Demande de suivi effectuée</string>
|
||||
<!--These are for timestamps on statuses. For example: "16s" or "2d"-->
|
||||
<string name="abbreviated_in_years">en %da</string>
|
||||
<string name="abbreviated_in_days">en %dj</string>
|
||||
<string name="abbreviated_in_hours">en %dh</string>
|
||||
<string name="abbreviated_in_minutes">en %dm</string>
|
||||
<string name="abbreviated_in_seconds">en %ds</string>
|
||||
<string name="abbreviated_years_ago">%da</string>
|
||||
<string name="abbreviated_days_ago">%dj</string>
|
||||
<string name="abbreviated_hours_ago">%dh</string>
|
||||
<string name="abbreviated_minutes_ago">%dm</string>
|
||||
<string name="abbreviated_seconds_ago">%ds</string>
|
||||
<string name="abbreviated_in_years">en %d a</string>
|
||||
<string name="abbreviated_in_days">en %d j</string>
|
||||
<string name="abbreviated_in_hours">en %d h</string>
|
||||
<string name="abbreviated_in_minutes">en %d min</string>
|
||||
<string name="abbreviated_in_seconds">en %d s</string>
|
||||
<string name="abbreviated_years_ago">%d a</string>
|
||||
<string name="abbreviated_days_ago">%d j</string>
|
||||
<string name="abbreviated_hours_ago">%d h</string>
|
||||
<string name="abbreviated_minutes_ago">%d min</string>
|
||||
<string name="abbreviated_seconds_ago">%d s</string>
|
||||
<string name="follows_you">Vous suit</string>
|
||||
<string name="pref_title_alway_show_sensitive_media">Toujours afficher le contenu sensible</string>
|
||||
<string name="title_media">Média</string>
|
||||
|
@ -404,7 +404,7 @@
|
|||
<string name="compose_preview_image_description">Actions pour l’image %s</string>
|
||||
<string name="poll_info_format"> <!-- 15 votes • 1 heure restante --> %1$s • %2$s</string>
|
||||
<string name="poll_ended_voted">Un sondage auquel vous avez participé vient de se terminer</string>
|
||||
<string name="description_poll">Sondage avec des choix : %1$s, %2$s, %3$s, %4$s; %5$s</string>
|
||||
<string name="description_poll">Sondage avec des choix : %1$s, %2$s, %3$s, %4$s ; %5$s</string>
|
||||
<string name="title_domain_mutes">Domaines cachés</string>
|
||||
<string name="action_view_domain_mutes">Domaines cachés</string>
|
||||
<string name="action_mute_domain">Masquer %s</string>
|
||||
|
@ -440,7 +440,7 @@
|
|||
<string name="add_poll_choice">Ajouter un choix</string>
|
||||
<string name="poll_allow_multiple_choices">Choix multiples</string>
|
||||
<string name="poll_new_choice_hint">Choix %d</string>
|
||||
<string name="edit_poll">Éditer</string>
|
||||
<string name="edit_poll">Modifier</string>
|
||||
<string name="title_scheduled_toot">Pouets programmés</string>
|
||||
<string name="action_edit">Éditer</string>
|
||||
<string name="action_access_scheduled_toot">Pouets planifiés</string>
|
||||
|
@ -455,7 +455,6 @@
|
|||
<string name="select_list_title">Sélectionner la liste</string>
|
||||
<string name="list">Liste</string>
|
||||
<string name="error_audio_upload_size">Les fichiers audio doivent être inférieurs à 40 Mo.</string>
|
||||
<string name="gradient_for_media">Afficher des dégradés en couleur pour les médias cachés</string>
|
||||
<string name="no_saved_status">Vous n’avez aucun brouillon.</string>
|
||||
<string name="no_scheduled_status">Vous n’avez aucun pouet planifié.</string>
|
||||
<string name="warning_scheduling_interval">L’intervalle minimum de planification sur Mastodon est de 5 minutes.</string>
|
||||
|
@ -476,4 +475,9 @@
|
|||
<string name="pref_title_enable_swipe_for_tabs">Activer les gestes de glissement pour passer d’un onglet à l’autre</string>
|
||||
<string name="hashtags">Hashtags</string>
|
||||
<string name="add_hashtag_title">Ajouter hashtag</string>
|
||||
<string name="pref_title_gradient_for_media">Afficher des dégradés colorés pour les médias cachés</string>
|
||||
<string name="pref_main_nav_position_option_bottom">Bas</string>
|
||||
<string name="pref_main_nav_position_option_top">Haut</string>
|
||||
<string name="pref_main_nav_position">Position de navigation principale</string>
|
||||
<string name="action_unmute_domain">Ne plus masquer %s</string>
|
||||
</resources>
|
|
@ -367,7 +367,6 @@
|
|||
<string name="description_visiblity_direct">Közvetlen</string>
|
||||
<string name="description_poll">Szavazás válaszokkal: %1$s, %2$s, %3$s, %4$s; %5$s</string>
|
||||
<string name="hint_list_name">Lista neve</string>
|
||||
|
||||
<string name="edit_hashtag_hint">Hashtag # nélkül</string>
|
||||
<string name="notifications_clear">Törlés</string>
|
||||
<string name="notifications_apply_filter">Szűrés</string>
|
||||
|
@ -378,8 +377,8 @@
|
|||
<string name="compose_preview_image_description">Műveletek a %s képpel</string>
|
||||
<string name="poll_info_format"> <!-- 15 szavazat • 1 óra maradt --> %1$s • %2$s</string>
|
||||
<plurals name="poll_info_votes">
|
||||
<item quantity="one"></item>
|
||||
<item quantity="other"></item>
|
||||
<item quantity="one"/>
|
||||
<item quantity="other"/>
|
||||
</plurals>
|
||||
<string name="poll_info_time_relative">%s maradt</string>
|
||||
<string name="poll_info_time_absolute">vége %s</string>
|
||||
|
@ -444,7 +443,6 @@
|
|||
<string name="select_list_title">Lista kiválasztása</string>
|
||||
<string name="list">Lista</string>
|
||||
<string name="error_audio_upload_size">A hangfájlok mérete 40MB-nál kisebb kell legyen.</string>
|
||||
<string name="gradient_for_media">Színes átmenet mutatása rejtett médiánál</string>
|
||||
<string name="no_saved_status">Nincs egy vázlatod sem.</string>
|
||||
<string name="no_scheduled_status">Nincs egy ütemezett tülköd sem.</string>
|
||||
<string name="warning_scheduling_interval">A Mastodonban a legrövidebb ütemezhető időintervallum 5 perc.</string>
|
||||
|
|
|
@ -206,7 +206,6 @@
|
|||
<string name="pref_title_language">Tungumál</string>
|
||||
<string name="pref_title_bot_overlay">Birta merki á róbótum</string>
|
||||
<string name="pref_title_animate_gif_avatars">Sýna hreyfingar GIF-auðkennismynda</string>
|
||||
<string name="gradient_for_media">Sýna skæra litstigla í stað falins myndefnis</string>
|
||||
<string name="pref_title_status_filter">Síun tímalínu</string>
|
||||
<string name="pref_title_status_tabs">Flipar</string>
|
||||
<string name="pref_title_show_boosts">Sýna endurbirtingar</string>
|
||||
|
@ -345,7 +344,6 @@
|
|||
<string name="label_remote_account">Ekki er víst að upplýsingarnar hér að neðan endurspegli notandasniðið að fullu. Opnaðu fullt notandasnið í vafra.</string>
|
||||
<string name="unpin_action">Losa</string>
|
||||
<string name="pin_action">Festa</string>
|
||||
|
||||
<string name="title_reblogged_by">Endurbirt af</string>
|
||||
<string name="title_favourited_by">Sett í eftirlæti af</string>
|
||||
<string name="conversation_1_recipients">%1$s</string>
|
||||
|
@ -364,7 +362,6 @@
|
|||
<string name="description_visiblity_direct">Beint</string>
|
||||
<string name="description_poll">Könnun með valkostunum: %1$s, %2$s, %3$s, %4$s; %5$s</string>
|
||||
<string name="hint_list_name">Heiti á lista</string>
|
||||
|
||||
<string name="edit_hashtag_hint">Myllumerki án #</string>
|
||||
<string name="select_list_title">Veldu lista</string>
|
||||
<string name="list">Listi</string>
|
||||
|
|
|
@ -10,8 +10,8 @@
|
|||
<string name="error_authorization_denied">L\'autorizzazione è stata negata.</string>
|
||||
<string name="error_retrieving_oauth_token">Errore nell\'acquisizione del token di accesso.</string>
|
||||
<string name="error_compose_character_limit">Lo stato è troppo lungo!</string>
|
||||
<string name="error_image_upload_size">La dimensione dei file immagine deve essere inferiore a 8MB.</string>
|
||||
<string name="error_video_upload_size">La dimensione dei file video deve essere inferiore a 40MB.</string>
|
||||
<string name="error_image_upload_size">La dimensione dei file immagine deve essere inferiore a 8 MB.</string>
|
||||
<string name="error_video_upload_size">La dimensione dei file video deve essere inferiore a 40 MB.</string>
|
||||
<string name="error_media_upload_type">Questo tipo di file non può essere caricato.</string>
|
||||
<string name="error_media_upload_opening">Questo file non può essere aperto.</string>
|
||||
<string name="error_media_upload_permission">Il permesso di lettura della scheda sd è richiesto.</string>
|
||||
|
@ -240,16 +240,16 @@
|
|||
<string name="status_media_video">Video</string>
|
||||
<string name="state_follow_requested">In attesa di approvazione</string>
|
||||
<!--These are for timestamps on statuses. For example: "16s" or "2d"-->
|
||||
<string name="abbreviated_in_years">in %da</string>
|
||||
<string name="abbreviated_in_days">in %dg</string>
|
||||
<string name="abbreviated_in_hours">in %do</string>
|
||||
<string name="abbreviated_in_minutes">in %dm</string>
|
||||
<string name="abbreviated_in_seconds">in %ds</string>
|
||||
<string name="abbreviated_years_ago">%da</string>
|
||||
<string name="abbreviated_days_ago">%dg</string>
|
||||
<string name="abbreviated_hours_ago">%do</string>
|
||||
<string name="abbreviated_minutes_ago">%dm</string>
|
||||
<string name="abbreviated_seconds_ago">%ds</string>
|
||||
<string name="abbreviated_in_years">in %d a</string>
|
||||
<string name="abbreviated_in_days">in %d g</string>
|
||||
<string name="abbreviated_in_hours">in %d o</string>
|
||||
<string name="abbreviated_in_minutes">in %d min</string>
|
||||
<string name="abbreviated_in_seconds">in %d s</string>
|
||||
<string name="abbreviated_years_ago">%d a</string>
|
||||
<string name="abbreviated_days_ago">%d g</string>
|
||||
<string name="abbreviated_hours_ago">%d o</string>
|
||||
<string name="abbreviated_minutes_ago">%d min</string>
|
||||
<string name="abbreviated_seconds_ago">%d s</string>
|
||||
<string name="follows_you">Seguono te</string>
|
||||
<string name="pref_title_alway_show_sensitive_media">Mostra sempre tutto il contenuto sensibile</string>
|
||||
<string name="title_media">Media</string>
|
||||
|
@ -358,11 +358,8 @@
|
|||
<string name="hint_list_name">Nome della lista</string>
|
||||
<string name="download_media">Scarica media</string>
|
||||
<string name="downloading_media">Scaricando media</string>
|
||||
|
||||
<string name="compose_shortcut_long_label">Componi Toot</string>
|
||||
|
||||
<string name="edit_hashtag_hint">Hashtag senza #</string>
|
||||
|
||||
<string name="compose_shortcut_short_label">Componi</string>
|
||||
<string name="notifications_clear">Pulisci</string>
|
||||
<string name="notifications_apply_filter">Filtra</string>
|
||||
|
@ -451,6 +448,20 @@
|
|||
<string name="title_scheduled_toot">Toot programmati</string>
|
||||
<string name="action_access_scheduled_toot">Toot programmati</string>
|
||||
<string name="action_schedule_toot">Programma un toot</string>
|
||||
<string name="action_reset_schedule">RIpristina</string>
|
||||
<string name="action_reset_schedule">Ripristina</string>
|
||||
<string name="poll_info_format"> <!-- 15 votes • 1 hour left --> %1$s • %2$s</string>
|
||||
<string name="no_saved_status">Non hai bozze.</string>
|
||||
<plurals name="poll_info_people">
|
||||
<item quantity="one">%s persona</item>
|
||||
<item quantity="other">%s persone</item>
|
||||
</plurals>
|
||||
<string name="hashtags">Hashtag</string>
|
||||
<string name="add_hashtag_title">Aggiungi hashtag</string>
|
||||
<string name="dialog_mute_warning">Silenziare @%s\?</string>
|
||||
<string name="dialog_block_warning">Bloccare @%s\?</string>
|
||||
<string name="action_unmute_domain">Smetti di silenziare %s</string>
|
||||
<string name="action_unmute_conversation">Smetti di silenziare conversazione</string>
|
||||
<string name="action_mute_conversation">Silenzia conversazione</string>
|
||||
<string name="notification_follow_request_format">%s ha chiesto di seguirti</string>
|
||||
<string name="error_audio_upload_size">La dimensione dei file audio deve essere inferiore a 40 MB.</string>
|
||||
</resources>
|
|
@ -22,12 +22,12 @@
|
|||
<string name="status_content_warning_show_more">Zeṛ ugar</string>
|
||||
<string name="status_content_warning_show_less">Zeṛ kra kan</string>
|
||||
<string name="message_empty">Ulac walu da.</string>
|
||||
<string name="notification_follow_format">%s yeṭafar-ik-id</string>
|
||||
<string name="notification_follow_format">%s yeṭṭafar-ik·ikem-id</string>
|
||||
<string name="action_reply">Err</string>
|
||||
<string name="action_more">Ugar</string>
|
||||
<string name="action_compose">Azen</string>
|
||||
<string name="action_follow">Ḍfeṛ</string>
|
||||
<string name="action_unfollow">Ur ṭafaṛ ara</string>
|
||||
<string name="action_unfollow">Ur ṭṭafar ara</string>
|
||||
<string name="action_edit">Ẓreg</string>
|
||||
<string name="action_delete">Kkes</string>
|
||||
<string name="action_delete_and_redraft">Kkes tɛiwdeḍ tira</string>
|
||||
|
@ -87,7 +87,7 @@
|
|||
<string name="about_tusky_account">Amaɣnu n Tusky</string>
|
||||
<string name="status_media_images">Tugniwin</string>
|
||||
<string name="status_media_video">Tibidyutin</string>
|
||||
<string name="follows_you">Yeṭafaṛ-ik-id</string>
|
||||
<string name="follows_you">Yeṭṭafar-ik·ikem-id</string>
|
||||
<string name="filter_dialog_remove_button">Kkes</string>
|
||||
<string name="filter_dialog_update_button">Lqem</string>
|
||||
<string name="add_account_name">Rnu amiḍan</string>
|
||||
|
@ -136,8 +136,8 @@
|
|||
<string name="notifications_apply_filter">Sizdeg</string>
|
||||
<string name="title_accounts">Imiḍanen</string>
|
||||
<string name="add_poll_choice">Rnu yiwen wefran</string>
|
||||
<string name="report_username_format">Ccetki ɣef @%s</string>
|
||||
<string name="action_report">Ccetki fell-as</string>
|
||||
<string name="report_username_format">Cetki ɣef @%s</string>
|
||||
<string name="action_report">Cetki fell-as</string>
|
||||
<string name="action_reject">Ggami</string>
|
||||
<string name="download_image">Yessidired %1$s</string>
|
||||
<string name="send_media_to">Bḍu tugna s…</string>
|
||||
|
@ -145,7 +145,7 @@
|
|||
<string name="dialog_message_uploading_media">Issalay…</string>
|
||||
<string name="pref_title_notification_filter_poll">fukken kran n wadɣaren</string>
|
||||
<string name="pref_title_timeline_filters">Imzizdigen</string>
|
||||
<string name="app_theme_auto">Akken yella yiṭij</string>
|
||||
<string name="app_theme_auto">Awurman akken yella yiṭij</string>
|
||||
<string name="pref_title_browser_settings">Iminig</string>
|
||||
<string name="pref_title_show_replies">Sken-d tiririyin</string>
|
||||
<string name="pref_title_http_proxy_settings">Apṛuksi HTTP</string>
|
||||
|
@ -194,7 +194,7 @@
|
|||
</plurals>
|
||||
<string name="button_continue">Kemmel</string>
|
||||
<string name="button_back">Uɣal</string>
|
||||
<string name="failed_report">Tella-d tuccḍa deg ccetki</string>
|
||||
<string name="failed_report">Tella-d tuccḍa deg cetki</string>
|
||||
<string name="failed_search">Tucḍa n unadi</string>
|
||||
<string name="create_poll_title">Assenqed</string>
|
||||
<string name="poll_duration_5_min">5 n tisdidin</string>
|
||||
|
@ -205,7 +205,7 @@
|
|||
<string name="poll_duration_3_days">3 n wussan</string>
|
||||
<string name="poll_duration_7_days">7 n wussan</string>
|
||||
<string name="poll_new_choice_hint">Tafrant %d</string>
|
||||
<string name="title_follows">Ig ṭafaṛ</string>
|
||||
<string name="title_follows">Ig ṭṭafar</string>
|
||||
<string name="title_followers">Imeḍfaṛen</string>
|
||||
<string name="hint_search_people_list">Nadi ɣef medden ar at ḍfereḍ</string>
|
||||
<string name="description_visiblity_private">Imeḍfaṛen</string>
|
||||
|
@ -213,7 +213,7 @@
|
|||
<string name="action_mentions">Tibdarin</string>
|
||||
<string name="title_mentions_dialog">Tibdarin</string>
|
||||
<string name="title_links_dialog">Iseɣwan</string>
|
||||
<string name="confirmation_reported">Yettwaceyyaɛ!</string>
|
||||
<string name="confirmation_reported">Yettwaceyyeɛ!</string>
|
||||
<string name="status_sent">Yettwaceyyaɛ!</string>
|
||||
<string name="search_no_results">Ula d yiwen n ugmuḍ</string>
|
||||
<string name="post_privacy_followers_only">I yimeḍfaṛen kan</string>
|
||||
|
@ -267,4 +267,6 @@
|
|||
<item quantity="one">%s n wemdan</item>
|
||||
<item quantity="other">%s n yemdanen</item>
|
||||
</plurals>
|
||||
<string name="report_remote_instance">Bren-it ɣer %s</string>
|
||||
<string name="pref_title_app_theme">Asentel n wesnas</string>
|
||||
</resources>
|
|
@ -80,7 +80,7 @@
|
|||
<string name="action_retry">다시 시도</string>
|
||||
<string name="action_close">닫기</string>
|
||||
<string name="action_view_profile">프로필</string>
|
||||
<string name="action_view_preferences">환경설정</string>
|
||||
<string name="action_view_preferences">설정</string>
|
||||
<string name="action_view_account_preferences">계정 설정</string>
|
||||
<string name="action_view_favourites">즐겨찾기</string>
|
||||
<string name="action_view_mutes">뮤트한 유저</string>
|
||||
|
|
|
@ -440,7 +440,6 @@
|
|||
<string name="action_access_scheduled_toot">Ingeplande toots</string>
|
||||
<string name="action_schedule_toot">Ingeplande toot</string>
|
||||
<string name="action_reset_schedule">Herstellen</string>
|
||||
<string name="gradient_for_media">Wazige kleurovergangen voor verborgen media tonen</string>
|
||||
<string name="about_powered_by_tusky">Powered by Tusky</string>
|
||||
<string name="pref_title_alway_open_spoiler">Altijd toots met tekstwaarschuwingen uitklappen</string>
|
||||
<string name="description_status_bookmarked">Als bladwijzer toegevoegd</string>
|
||||
|
|
|
@ -433,7 +433,6 @@
|
|||
<string name="description_status_bookmarked">Bokmerke lagt til</string>
|
||||
<string name="select_list_title">Velg liste</string>
|
||||
<string name="list">Liste</string>
|
||||
<string name="gradient_for_media">Vis fargegradienter for skjult media</string>
|
||||
<string name="no_scheduled_status">Du har ingen planlagte statuser.</string>
|
||||
<string name="no_saved_status">Du har ikke lagret noen kladder.</string>
|
||||
<string name="error_audio_upload_size">Lydfiler må være mindre enn 40MB.</string>
|
||||
|
@ -454,4 +453,10 @@
|
|||
<string name="action_mute_conversation">Demp samtale</string>
|
||||
<string name="hashtags">Stikkord</string>
|
||||
<string name="add_hashtag_title">Legg til stikkord</string>
|
||||
<string name="notification_follow_request_format">%s ønsker å følge deg</string>
|
||||
<string name="pref_title_gradient_for_media">Vis fargerike gradienter for skjult media</string>
|
||||
<string name="pref_main_nav_position_option_bottom">Bunn</string>
|
||||
<string name="pref_main_nav_position_option_top">Topp</string>
|
||||
<string name="pref_main_nav_position">Plassering av hovednavigasjon</string>
|
||||
<string name="action_unmute_domain">Fjern demping av %s</string>
|
||||
</resources>
|
|
@ -445,7 +445,6 @@
|
|||
<string name="select_list_title">Seleccionar la list</string>
|
||||
<string name="list">Lista</string>
|
||||
<string name="error_audio_upload_size">Los fichièrs àudio devon èsser inferiors a 40 Mo.</string>
|
||||
<string name="gradient_for_media">Mostrar los degradats de colors pels contenguts resconduts</string>
|
||||
<string name="no_saved_status">Avètz pas cap de borrolhon.</string>
|
||||
<string name="no_scheduled_status">Avètz pas cap de tut planificat.</string>
|
||||
<string name="warning_scheduling_interval">L’interval minimum de planificacion sus Mastodon e de 5 minutas.</string>
|
||||
|
|
|
@ -452,7 +452,6 @@
|
|||
<string name="select_list_title">Wybierz listę</string>
|
||||
<string name="list">Lista</string>
|
||||
<string name="error_audio_upload_size">Pliki audio muszą być mniejsze niż 40MB.</string>
|
||||
<string name="gradient_for_media">Pokaż kolorowe gradienty dla ukrytych mediów</string>
|
||||
<string name="no_saved_status">Nie masz żadnych szkiców.</string>
|
||||
<string name="no_scheduled_status">Nie masz żadnych zaplanowanych wpisów.</string>
|
||||
<string name="warning_scheduling_interval">Mastodon umożliwia wysłanie minimalnie 5 minut od zaplanowania</string>
|
||||
|
@ -463,4 +462,10 @@
|
|||
<string name="dialog_block_warning">Zablokować @%s\?</string>
|
||||
<string name="action_unmute_conversation">Cofnij wyciszenie rozmowy</string>
|
||||
<string name="action_mute_conversation">Wycisz rozmowę</string>
|
||||
<plurals name="poll_info_people">
|
||||
<item quantity="one">%s osoba</item>
|
||||
<item quantity="few">%s osoby</item>
|
||||
<item quantity="many">%s osób</item>
|
||||
<item quantity="other">%s osób</item>
|
||||
</plurals>
|
||||
</resources>
|
|
@ -3,11 +3,11 @@
|
|||
<string name="error_generic">Ocorreu um erro.</string>
|
||||
<string name="error_empty">Não pode estar vazio.</string>
|
||||
<string name="error_invalid_domain">Instância inválida</string>
|
||||
<string name="error_failed_app_registration">Falha ao autenticar com esta instância.</string>
|
||||
<string name="error_no_web_browser_found">Navegador não foi encontrado.</string>
|
||||
<string name="error_authorization_unknown">Ocorreu um erro não-identificado de autorização.</string>
|
||||
<string name="error_failed_app_registration">Erro ao autenticar com esta instância.</string>
|
||||
<string name="error_no_web_browser_found">Nenhum navegador foi encontrado.</string>
|
||||
<string name="error_authorization_unknown">Ocorreu um erro não identificado de autorização.</string>
|
||||
<string name="error_authorization_denied">Autorização negada.</string>
|
||||
<string name="error_retrieving_oauth_token">Falha ao adquirir token de entrada.</string>
|
||||
<string name="error_retrieving_oauth_token">Erro ao adquirir token de entrada.</string>
|
||||
<string name="error_compose_character_limit">O toot é muito longo!</string>
|
||||
<string name="error_image_upload_size">O arquivo deve ser menor que 8MB.</string>
|
||||
<string name="error_video_upload_size">Vídeos devem ser menores que 40MB.</string>
|
||||
|
@ -16,7 +16,7 @@
|
|||
<string name="error_media_upload_permission">Permissão para ler mídia é necessária.</string>
|
||||
<string name="error_media_download_permission">Permissão para armazenar mídia é necessária.</string>
|
||||
<string name="error_media_upload_image_or_video">Imagens e vídeos não podem ser anexados no mesmo toot.</string>
|
||||
<string name="error_media_upload_sending">Falha no envio.</string>
|
||||
<string name="error_media_upload_sending">Erro ao enviar.</string>
|
||||
<string name="error_sender_account_gone">Erro ao enviar toot.</string>
|
||||
<string name="title_home">Página inicial</string>
|
||||
<string name="title_notifications">Editar notificações</string>
|
||||
|
@ -33,24 +33,24 @@
|
|||
<string name="title_mutes">Usuários silenciados</string>
|
||||
<string name="title_blocks">Usuários bloqueados</string>
|
||||
<string name="title_follow_requests">Seguidores pendentes</string>
|
||||
<string name="title_edit_profile">Editar seu perfil</string>
|
||||
<string name="title_edit_profile">Editar perfil</string>
|
||||
<string name="title_saved_toot">Rascunhos</string>
|
||||
<string name="title_licenses">Licenças</string>
|
||||
<string name="status_boosted_format">%s deu boost</string>
|
||||
<string name="status_sensitive_media_title">Mídia sensível</string>
|
||||
<string name="status_media_hidden_title">Mídia oculta</string>
|
||||
<string name="status_media_hidden_title">Mídia sensível</string>
|
||||
<string name="status_sensitive_media_directions">Toque para ver</string>
|
||||
<string name="status_content_warning_show_more">Mostrar mais</string>
|
||||
<string name="status_content_warning_show_less">Mostrar menos</string>
|
||||
<string name="footer_empty">Nada aqui. Arraste para atualizar!</string>
|
||||
<string name="notification_reblog_format">%s compartilhou o seu toot</string>
|
||||
<string name="notification_reblog_format">%s deu boost no seu toot</string>
|
||||
<string name="notification_favourite_format">%s favoritou seu toot</string>
|
||||
<string name="notification_follow_format">%s te seguiu</string>
|
||||
<string name="report_username_format">Denunciar @%s</string>
|
||||
<string name="report_comment_hint">Comentários adicionais?</string>
|
||||
<string name="action_quick_reply">Resposta rápida</string>
|
||||
<string name="action_reply">Responder</string>
|
||||
<string name="action_reblog">Boost</string>
|
||||
<string name="action_reblog">Dar boost</string>
|
||||
<string name="action_unreblog">Desfazer boost</string>
|
||||
<string name="action_favourite">Favoritar</string>
|
||||
<string name="action_unfavourite">Desfavoritar</string>
|
||||
|
@ -83,7 +83,7 @@
|
|||
<string name="action_photo_take">Tirar foto</string>
|
||||
<string name="action_share">Compartilhar</string>
|
||||
<string name="action_mute">Silenciar</string>
|
||||
<string name="action_unmute">Desativar silêncio</string>
|
||||
<string name="action_unmute">Desfazer silêncio</string>
|
||||
<string name="action_mention">Mencionar</string>
|
||||
<string name="action_hide_media">Ocultar mídia</string>
|
||||
<string name="action_open_drawer">Abrir gaveta</string>
|
||||
|
@ -109,8 +109,8 @@
|
|||
<string name="action_copy_link">Copiar link</string>
|
||||
<string name="action_open_as">Abrir como %s</string>
|
||||
<string name="action_share_as">Compartilhar como …</string>
|
||||
<string name="send_status_link_to">Compartilhar link do toot no…</string>
|
||||
<string name="send_status_content_to">Compartilhar toot no…</string>
|
||||
<string name="send_status_link_to">Compartilhar link do toot em…</string>
|
||||
<string name="send_status_content_to">Compartilhar toot em…</string>
|
||||
<string name="send_media_to">Compartilhar mídia via…</string>
|
||||
<string name="confirmation_reported">Enviado!</string>
|
||||
<string name="confirmation_unblocked">Usuário desbloqueado</string>
|
||||
|
@ -142,20 +142,20 @@
|
|||
<string name="dialog_message_cancel_follow_request">Recusar o seguidor pendente\?</string>
|
||||
<string name="dialog_unfollow_warning">Deixar de seguir esta conta?</string>
|
||||
<string name="dialog_delete_toot_warning">Excluir este toot?</string>
|
||||
<string name="visibility_public">Público: Postar em timelines públicas</string>
|
||||
<string name="visibility_unlisted">Não-listado: Não postar em timelines públicas</string>
|
||||
<string name="visibility_private">Privado: Postar apenas para seguidores</string>
|
||||
<string name="visibility_direct">Direto: Postar para apenas usuários mencionados</string>
|
||||
<string name="pref_title_edit_notification_settings">Editar Notificações</string>
|
||||
<string name="visibility_public">Público: Postar em linhas públicas</string>
|
||||
<string name="visibility_unlisted">Não-listado: Não postar em linhas públicas</string>
|
||||
<string name="visibility_private">Privado: Postar só para seguidores</string>
|
||||
<string name="visibility_direct">Direto: Postar só para mencionados</string>
|
||||
<string name="pref_title_edit_notification_settings">Editar notificações</string>
|
||||
<string name="pref_title_notifications_enabled">Notificações</string>
|
||||
<string name="pref_title_notification_alerts">Alertas</string>
|
||||
<string name="pref_title_notification_alert_sound">Notificar com som</string>
|
||||
<string name="pref_title_notification_alert_vibrate">Notificar com vibração</string>
|
||||
<string name="pref_title_notification_alert_light">Notificar com luz</string>
|
||||
<string name="pref_title_notification_filters">Notifique-me quando</string>
|
||||
<string name="pref_title_notification_filter_mentions">mencionado</string>
|
||||
<string name="pref_title_notification_filter_follows">seguido</string>
|
||||
<string name="pref_title_notification_filter_reblogs">minhas postagens forem compartilhadas</string>
|
||||
<string name="pref_title_notification_filter_mentions">me mencionarem</string>
|
||||
<string name="pref_title_notification_filter_follows">me seguirem</string>
|
||||
<string name="pref_title_notification_filter_reblogs">derem boosts nos meus toots</string>
|
||||
<string name="pref_title_notification_filter_favourites">favoritarem meus toots</string>
|
||||
<string name="pref_title_appearance_settings">Aparência</string>
|
||||
<string name="pref_title_app_theme">Temas</string>
|
||||
|
@ -167,7 +167,7 @@
|
|||
<string name="app_theme_system">Usar o tema do sistema</string>
|
||||
<string name="pref_title_browser_settings">Navegador</string>
|
||||
<string name="pref_title_custom_tabs">Usar abas do Chrome</string>
|
||||
<string name="pref_title_hide_follow_button">Esconder compositor ao rolar a página</string>
|
||||
<string name="pref_title_hide_follow_button">Ocultar compositor ao rolar a tela</string>
|
||||
<string name="pref_title_status_filter">Filtro da linha do tempo</string>
|
||||
<string name="pref_title_status_tabs">Abas</string>
|
||||
<string name="pref_title_show_boosts">Mostrar boosts</string>
|
||||
|
@ -181,10 +181,10 @@
|
|||
<string name="pref_default_post_privacy">Privacidade padrão dos toots</string>
|
||||
<string name="pref_default_media_sensitivity">Sempre marcar mídia como sensível</string>
|
||||
<string name="pref_publishing">Publicação</string>
|
||||
<string name="pref_failed_to_sync">Falha ao sincronizar configurações</string>
|
||||
<string name="pref_failed_to_sync">Erro ao sincronizar configurações</string>
|
||||
<string name="post_privacy_public">Público</string>
|
||||
<string name="post_privacy_unlisted">Não-listado</string>
|
||||
<string name="pref_status_text_size">Tamanho da fonte dos toots</string>
|
||||
<string name="pref_status_text_size">Tamanho da fonte</string>
|
||||
<string name="status_text_size_smallest">Menor</string>
|
||||
<string name="status_text_size_small">Pequeno</string>
|
||||
<string name="status_text_size_medium">Médio</string>
|
||||
|
@ -217,8 +217,8 @@
|
|||
-->
|
||||
<string name="about_project_site">Site do projeto:\n
|
||||
https://tusky.app</string>
|
||||
<string name="about_bug_feature_request_site">Reporte bugs & requisite funcionalidades:\n
|
||||
https://github.com/tuskyapp/Tusky/issues</string>
|
||||
<string name="about_bug_feature_request_site">Reporte bugs e solicite funcionalidades:
|
||||
\n https://github.com/tuskyapp/Tusky/issues</string>
|
||||
<string name="about_tusky_account">Perfil do Tusky</string>
|
||||
<string name="status_share_content">Compartilhar conteúdo do toot</string>
|
||||
<string name="status_share_link">Compartilhar link do toot</string>
|
||||
|
@ -236,10 +236,10 @@
|
|||
<string name="abbreviated_hours_ago">%dh</string>
|
||||
<string name="abbreviated_minutes_ago">%dm</string>
|
||||
<string name="abbreviated_seconds_ago">%ds</string>
|
||||
<string name="follows_you">Segue você</string>
|
||||
<string name="follows_you">Te segue</string>
|
||||
<string name="pref_title_alway_show_sensitive_media">Sempre mostrar mídia sensível</string>
|
||||
<string name="title_media">Mídia</string>
|
||||
<string name="replying_to">Respondendo a @%s</string>
|
||||
<string name="replying_to">Respondendo @%s</string>
|
||||
<string name="load_more_placeholder_text">carregar mais</string>
|
||||
<string name="add_account_name">Adicionar conta</string>
|
||||
<string name="add_account_description">Adicionar nova conta Mastodon</string>
|
||||
|
@ -247,7 +247,7 @@
|
|||
<string name="title_lists">Listas</string>
|
||||
<string name="title_list_timeline">Linha da lista</string>
|
||||
<string name="compose_active_account_description">Usando a conta %1$s</string>
|
||||
<string name="error_failed_set_caption">Falha ao incluir descrição</string>
|
||||
<string name="error_failed_set_caption">Erro ao incluir descrição</string>
|
||||
<string name="action_set_caption">Descrever</string>
|
||||
<string name="action_remove">Remover</string>
|
||||
<string name="lock_account_label">Trancar conta</string>
|
||||
|
@ -267,18 +267,18 @@
|
|||
<string name="performing_lookup_title">Realizando consulta…</string>
|
||||
<string name="expand_collapse_all_statuses">Expandir/Ocultar todos os toots</string>
|
||||
<string name="action_open_toot">Abrir toot</string>
|
||||
<string name="restart_required">É preciso reiniciar o aplicativo</string>
|
||||
<string name="restart_emoji">É preciso reiniciar o Tusky para aplicar essas mudanças</string>
|
||||
<string name="restart_required">É necessário reiniciar o aplicativo</string>
|
||||
<string name="restart_emoji">É necessário reiniciar o Tusky para aplicar essas mudanças</string>
|
||||
<string name="later">Depois</string>
|
||||
<string name="restart">Reiniciar</string>
|
||||
<string name="caption_systememoji">Pacote de emojis padrão do seu dispositivo</string>
|
||||
<string name="caption_blobmoji">Emojis padrão do Android da versão 4.4 até 7.1</string>
|
||||
<string name="caption_twemoji">Pacote de emojis padrão do Mastodon</string>
|
||||
<string name="download_failed">O download falhou</string>
|
||||
<string name="download_failed">Erro ao baixar</string>
|
||||
<string name="profile_badge_bot_text">Robô</string>
|
||||
<string name="account_moved_description">%1$s mudou-se para:</string>
|
||||
<string name="reblog_private">Dar boost para audiência original</string>
|
||||
<string name="unreblog_private">Retirar compartilhamento</string>
|
||||
<string name="unreblog_private">Desfazer boost</string>
|
||||
<string name="license_description">O Tusky contém código e recursos dos seguintes projetos de código aberto:</string>
|
||||
<string name="license_apache_2">Licenciado sob a licença Apache (cópia abaixo)</string>
|
||||
<string name="profile_metadata_label">Metadados do perfil</string>
|
||||
|
@ -306,17 +306,17 @@
|
|||
<string name="download_media">Baixar mídia</string>
|
||||
<string name="downloading_media">Baixando mídia</string>
|
||||
<string name="dialog_redraft_toot_warning">Excluir e rascunhar este toot\?</string>
|
||||
<string name="pref_title_notification_filter_poll">Enquetes terminaram</string>
|
||||
<string name="pref_title_notification_filter_poll">enquetes terminarem</string>
|
||||
<string name="pref_title_timeline_filters">Filtros</string>
|
||||
<string name="pref_title_language">Idioma</string>
|
||||
<string name="post_privacy_followers_only">Apenas para seguidores</string>
|
||||
<string name="post_privacy_followers_only">Só para seguidores</string>
|
||||
<string name="notification_poll_name">Enquetes</string>
|
||||
<string name="notification_poll_description">Notificar enquetes que já terminaram</string>
|
||||
<string name="pref_title_public_filter_keywords">Timelines públicas</string>
|
||||
<string name="pref_title_public_filter_keywords">Linhas públicas</string>
|
||||
<string name="pref_title_thread_filter_keywords">Conversas</string>
|
||||
<string name="filter_addition_dialog_title">Criar filtro</string>
|
||||
<string name="filter_edit_dialog_title">Editar filtro</string>
|
||||
<string name="filter_dialog_remove_button">Remover</string>
|
||||
<string name="filter_dialog_remove_button">Excluir</string>
|
||||
<string name="filter_dialog_update_button">Atualizar</string>
|
||||
<string name="filter_add_description">Frase para filtrar</string>
|
||||
<string name="error_create_list">Não foi possível criar lista</string>
|
||||
|
@ -354,7 +354,7 @@
|
|||
<string name="description_status_reblogged">Você deu boost</string>
|
||||
<string name="description_status_favourited">Favoritado</string>
|
||||
<string name="description_visiblity_unlisted">Não-listado</string>
|
||||
<string name="description_visiblity_direct">Direta</string>
|
||||
<string name="description_visiblity_direct">Direto</string>
|
||||
<string name="hint_list_name">Nome da lista</string>
|
||||
<string name="edit_hashtag_hint">Hashtag sem #</string>
|
||||
<string name="notifications_clear">Limpar</string>
|
||||
|
@ -365,12 +365,12 @@
|
|||
<string name="pref_title_bot_overlay">Mostrar indicador de robôs</string>
|
||||
<string name="notification_clear_text">Você tem certeza de que quer limpar permanentemente todas as suas notificações\?</string>
|
||||
<string name="compose_preview_image_description">Opções para imagem %s</string>
|
||||
<string name="poll_info_format"> <!-- 15 votes • 1 hour left --> %1$s • %2$s</string>
|
||||
<string name="poll_info_format"> <!-- 15 votos • 1 hora restante --> %1$s • %2$s</string>
|
||||
<plurals name="poll_info_votes">
|
||||
<item quantity="one">%s voto</item>
|
||||
<item quantity="other">%s votos</item>
|
||||
</plurals>
|
||||
<string name="poll_info_time_relative">%s restando</string>
|
||||
<string name="poll_info_time_relative">%s restante</string>
|
||||
<string name="poll_info_time_absolute">termina em %s</string>
|
||||
<string name="poll_info_closed">Terminou</string>
|
||||
<string name="poll_vote">Votar</string>
|
||||
|
@ -401,8 +401,8 @@
|
|||
<string name="report_sent_success">\@%s denunciado com sucesso</string>
|
||||
<string name="hint_additional_info">Comentários adicionais</string>
|
||||
<string name="report_remote_instance">Encaminhar para %s</string>
|
||||
<string name="failed_report">Falha na denúncia</string>
|
||||
<string name="failed_fetch_statuses">Falha ao carregar toots</string>
|
||||
<string name="failed_report">Erro ao denunciar</string>
|
||||
<string name="failed_fetch_statuses">Erro ao carregar toots</string>
|
||||
<string name="report_description_1">A denúncia será enviada aos moderadores da instância. Você pode explicar por que você denunciou a conta:</string>
|
||||
<string name="report_description_remote_instance">A conta está em outra instância. Enviar uma cópia anônima da denúncia para lá\?</string>
|
||||
<string name="title_domain_mutes">Instâncias bloqueadas</string>
|
||||
|
@ -443,7 +443,6 @@
|
|||
<string name="description_status_bookmarked">Salvo</string>
|
||||
<string name="select_list_title">Selecionar lista</string>
|
||||
<string name="list">Lista</string>
|
||||
<string name="gradient_for_media">Mostrar blur em mídias ocultas</string>
|
||||
<string name="no_scheduled_status">Sem toots agendados.</string>
|
||||
<string name="error_audio_upload_size">Áudios devem ser menores que 40MB.</string>
|
||||
<string name="no_saved_status">Sem rascunhos.</string>
|
||||
|
@ -454,7 +453,7 @@
|
|||
<string name="action_unmute_conversation">Desfazer silêncio</string>
|
||||
<string name="dialog_block_warning">Bloquear @%s\?</string>
|
||||
<string name="dialog_mute_warning">Silenciar @%s\?</string>
|
||||
<string name="pref_title_notification_filter_follow_requests">pedirem para me seguir</string>
|
||||
<string name="pref_title_notification_filter_follow_requests">quiserem me seguir</string>
|
||||
<string name="notification_follow_request_description">Notificar sobre seguidores pendentes</string>
|
||||
<plurals name="poll_info_people">
|
||||
<item quantity="one">%s pessoa</item>
|
||||
|
@ -465,4 +464,8 @@
|
|||
<string name="pref_title_confirm_reblogs">Solicitar confirmação antes de dar boost</string>
|
||||
<string name="hashtags">Hashtags</string>
|
||||
<string name="add_hashtag_title">Adicionar hashtag</string>
|
||||
<string name="pref_title_gradient_for_media">Mostrar blur em mídia sensível</string>
|
||||
<string name="pref_main_nav_position_option_bottom">Inferior</string>
|
||||
<string name="pref_main_nav_position_option_top">Superior</string>
|
||||
<string name="pref_main_nav_position">Posição do menu</string>
|
||||
</resources>
|
|
@ -471,7 +471,6 @@
|
|||
<string name="select_list_title">Выбрать список</string>
|
||||
<string name="list">Список</string>
|
||||
<string name="error_audio_upload_size">Аудиофайлы должны быть меньше 40МБ.</string>
|
||||
<string name="gradient_for_media">Показывать цветные градиенты для скрытых медиа</string>
|
||||
<string name="post_lookup_error_format">Ошибка поиска поста %s</string>
|
||||
<string name="no_saved_status">У вас нет черновиков.</string>
|
||||
<string name="no_scheduled_status">У вас нет запланированных постов.</string>
|
||||
|
@ -493,4 +492,11 @@
|
|||
<string name="action_unmute_conversation">Показать обсуждение</string>
|
||||
<string name="action_mute_conversation">Заглушить обсуждение</string>
|
||||
<string name="notification_follow_request_format">запрос на подписку от %s</string>
|
||||
<string name="hashtags">Тэги</string>
|
||||
<string name="add_hashtag_title">Добавить тэг</string>
|
||||
<string name="pref_title_gradient_for_media">Отображать цветные градиенты для скрытых изображений</string>
|
||||
<string name="pref_main_nav_position_option_bottom">Снизу</string>
|
||||
<string name="pref_main_nav_position_option_top">Сверху</string>
|
||||
<string name="pref_main_nav_position">Расположение панели навигации</string>
|
||||
<string name="action_unmute_domain">Отменить глушение %s</string>
|
||||
</resources>
|
|
@ -450,7 +450,6 @@
|
|||
<string name="description_status_bookmarked">Bokmärkt</string>
|
||||
<string name="select_list_title">Välj lista</string>
|
||||
<string name="list">Lista</string>
|
||||
<string name="gradient_for_media">Visa färgglada gradienter för gömd media</string>
|
||||
<string name="no_scheduled_status">Du har inga schemalagda statusar.</string>
|
||||
<string name="error_audio_upload_size">Ljudfiler måste vara mindre än 40MB.</string>
|
||||
<string name="no_saved_status">Du har inga utkast.</string>
|
||||
|
@ -472,4 +471,9 @@
|
|||
<string name="notification_follow_request_format">%s vill följa dig</string>
|
||||
<string name="add_hashtag_title">Lägg till hashtag</string>
|
||||
<string name="hashtags">Hashtaggar</string>
|
||||
<string name="pref_main_nav_position_option_top">Topp</string>
|
||||
<string name="pref_main_nav_position_option_bottom">Botten</string>
|
||||
<string name="pref_main_nav_position">Standard navigationsposition</string>
|
||||
<string name="pref_title_gradient_for_media">Visa färgglada gradienter för gömd media</string>
|
||||
<string name="action_unmute_domain">Ta bort tystad %s</string>
|
||||
</resources>
|
|
@ -181,7 +181,7 @@
|
|||
\nhttps://github.com/tuskyapp/Tusky/issues</string>
|
||||
<string name="about_project_site">เว็บไซต์โปรเจกต์:
|
||||
\nhttps://tusky.app</string>
|
||||
<string name="about_tusky_license">Tusky คือซอฟต์แวร์เสรีและโอเพนซอร์ส <!-- --> ภายใต้สัญญาอนุญาต GNU General Public License Version 3 <!-- -->ดูสัญญาที่ : https://www.gnu.org/licenses/gpl-3.0.ja.html</string>
|
||||
<string name="about_tusky_license">Tusky คือซอฟต์แวร์เสรีและโอเพนซอร์ส ภายใต้สัญญาอนุญาต GNU General Public License Version 3 ดูสัญญาที่ : https://www.gnu.org/licenses/gpl-3.0.ja.html</string>
|
||||
<string name="about_powered_by_tusky">ขับเคลื่อนด้วย Tusky</string>
|
||||
<string name="about_tusky_version">Tusky %s</string>
|
||||
<string name="description_account_locked">บัญชีไม่สาธารณะ</string>
|
||||
|
@ -206,7 +206,7 @@
|
|||
<string name="status_text_size_large">ใหญ่</string>
|
||||
<string name="status_text_size_medium">กลาง</string>
|
||||
<string name="status_text_size_small">เล็ก</string>
|
||||
<string name="status_text_size_smallest">เล็กสุด</string>
|
||||
<string name="status_text_size_smallest">เล็กมาก</string>
|
||||
<string name="pref_status_text_size">ขนาดอักษร Toot</string>
|
||||
<string name="post_privacy_followers_only">เฉพาะผู้ติดตาม</string>
|
||||
<string name="post_privacy_unlisted">ไม่อยู่ในรายการ</string>
|
||||
|
@ -214,7 +214,7 @@
|
|||
<string name="pref_failed_to_sync">ซิงค์การตั้งค่าล้มเหลว</string>
|
||||
<string name="pref_publishing">กำลังเผยแพร่ (synced with server)</string>
|
||||
<string name="pref_default_media_sensitivity">ใส่เครื่องหมายว่าเป็นสื่ออ่อนไหวเสมอ</string>
|
||||
<string name="pref_default_post_privacy">ความเป็นส่วนตัวโพสต์ปริยาย</string>
|
||||
<string name="pref_default_post_privacy">ค่าปริยายความเป็นส่วนตัวของโพสต์</string>
|
||||
<string name="pref_title_http_proxy_port">พอร์ตพร็อกซี่ HTTP</string>
|
||||
<string name="pref_title_http_proxy_server">เซิร์ฟเวอร์พร็อกซี่ HTTP</string>
|
||||
<string name="pref_title_http_proxy_enable">เปิดใช้งานพร็อกซี่ HTTP</string>
|
||||
|
@ -225,7 +225,6 @@
|
|||
<string name="pref_title_show_boosts">แสดงบูสต์</string>
|
||||
<string name="pref_title_status_tabs">แท็บ</string>
|
||||
<string name="pref_title_status_filter">คัดกรองไทม์ไลน์</string>
|
||||
<string name="gradient_for_media">แสดงสื่อที่ซ่อนไว้แบบไล่หลากสี</string>
|
||||
<string name="pref_title_animate_gif_avatars">อวตาร GIF เคลื่อนไหวได้</string>
|
||||
<string name="pref_title_bot_overlay">แสดงสัญลักษณ์ว่าเป็นบอต</string>
|
||||
<string name="pref_title_language">ภาษา</string>
|
||||
|
@ -269,19 +268,13 @@
|
|||
<string name="dialog_download_image">ดาวน์โหลด</string>
|
||||
<string name="dialog_message_uploading_media">กำลังอัปโหลด…</string>
|
||||
<string name="dialog_title_finishing_media_upload">กำลังอัปโหลดสื่อใกล้เสร็จ</string>
|
||||
<string name="dialog_whats_an_instance">"ใส่ที่อยู่หรือโดเมนของ Instance ได้ที่นี่ เช่น mastodon.social icosahedron.website social.tchncs.de และ <a href=\"https://instances.social\">อีกมากมาย!</a>
|
||||
<string name="dialog_whats_an_instance">ใส่ที่อยู่หรือโดเมนของ Instance ได้ที่นี่ เช่น mastodon.social icosahedron.website social.tchncs.de และ <a href="https://instances.social">อีกมากมาย!</a>
|
||||
\n
|
||||
\nถ้ายังไม่มีบัญชี สามารถใส่ชื่อ Instance ที่ต้องการจะร่วมแล้วสร้างบัญชีที่นั่น
|
||||
\n
|
||||
\nInstance คือที่ที่หนึ่งไว้โฮสต์บัญชีคุณ แต่คุณยังสามารถสื่อสาร ติดตามบุคคลบน Instance อื่นได้เหมือนอยู่บนไซต์เดียวกัน
|
||||
\n
|
||||
\nพบข้อมูลเพิ่มเติมได้ที่ <a href=\"https://joinmastodon.org\">joinmastodon.org</a> "<a href="https://instances.social">more!</a>
|
||||
\n\nIf you don\'t yet have an account, you can enter the name of the instance you\'d like to
|
||||
join and create an account there.\n\nAn instance is a single place where your account is
|
||||
hosted, but you can easily communicate with and follow folks on other instances as though
|
||||
you were on the same site.
|
||||
\n\nMore info can be found at <a href="https://joinmastodon.org">joinmastodon.org</a>.
|
||||
</string>
|
||||
\nพบข้อมูลเพิ่มเติมได้ที่ <a href="https://joinmastodon.org">joinmastodon.org</a> </string>
|
||||
<string name="label_header">ภาพหัวบน</string>
|
||||
<string name="login_connection">กำลังเชื่อมต่อ…</string>
|
||||
<string name="label_avatar">อวตาร</string>
|
||||
|
@ -327,7 +320,7 @@
|
|||
<string name="action_access_saved_toot">ฉบับร่าง</string>
|
||||
<string name="action_reject">ปฏิเสธ</string>
|
||||
<string name="action_accept">ยอมรับ</string>
|
||||
<string name="action_undo">ย้อนการกระทำ</string>
|
||||
<string name="action_undo">ยกเลิก</string>
|
||||
<string name="action_edit_own_profile">แก้ไข</string>
|
||||
<string name="action_save">บันทึก</string>
|
||||
<string name="action_open_drawer">เปิดเมนู</string>
|
||||
|
@ -398,7 +391,7 @@
|
|||
<string name="title_follow_requests">คำขอติดตาม</string>
|
||||
<string name="title_domain_mutes">โดเมนที่ซ่อนไว้</string>
|
||||
<string name="title_blocks">ผู้ใช้ที่ถูกบล็อก</string>
|
||||
<string name="title_mutes">ผู้ใช้ที่ทำให้เป็นใบ้</string>
|
||||
<string name="title_mutes">ผู้ใช้ที่ปิดเสียงไว้</string>
|
||||
<string name="title_bookmarks">คั่นหน้า</string>
|
||||
<string name="title_followers">ผู้ติดตาม</string>
|
||||
<string name="title_follows">ติดตาม</string>
|
||||
|
@ -454,4 +447,9 @@
|
|||
<string name="post_lookup_error_format">การค้นหาโพสต์ %s เกิดข้อผิดผลาด</string>
|
||||
<string name="edit_poll">แก้ไข</string>
|
||||
<string name="poll_new_choice_hint">ตัวเลือกที่ %d</string>
|
||||
<string name="pref_main_nav_position_option_bottom">ล่าง</string>
|
||||
<string name="pref_main_nav_position_option_top">บน</string>
|
||||
<string name="pref_main_nav_position">ตำแหน่งการนำทางหลัก</string>
|
||||
<string name="pref_title_gradient_for_media">แสดงการไล่ระดับสีสันสำหรับสื่อที่ถูกซ่อนไว้</string>
|
||||
<string name="action_unmute_domain">เลิกปิดเสียง %s</string>
|
||||
</resources>
|
|
@ -433,7 +433,6 @@
|
|||
<string name="profile_badge_bot_text">Alt Metin</string>
|
||||
<string name="confirmation_domain_unmuted">%s gizleme</string>
|
||||
<string name="mute_domain_warning_dialog_ok">Alan adından herşeyi gizle</string>
|
||||
<string name="gradient_for_media">Gizli medya için renkli degradeleri göster</string>
|
||||
<string name="pref_title_alway_open_spoiler">Hassas içerikleri göster</string>
|
||||
<string name="poll_info_time_absolute">bitiş %s</string>
|
||||
<string name="failed_report">Bildirilemedi</string>
|
||||
|
|
|
@ -418,7 +418,6 @@
|
|||
<string name="confirmation_domain_unmuted">%s 已解除静音</string>
|
||||
<string name="mute_domain_warning_dialog_ok">隐藏整个域</string>
|
||||
<string name="pref_title_animate_gif_avatars">动画GIF头像</string>
|
||||
<string name="gradient_for_media">显示隐藏媒体的彩色渐变</string>
|
||||
<string name="about_powered_by_tusky">由Tusky提供支持</string>
|
||||
<string name="pref_title_alway_open_spoiler">始终扩展标有内容警告的嘟文</string>
|
||||
<string name="filter_dialog_whole_word">整个单词</string>
|
||||
|
|
|
@ -14,7 +14,12 @@ allprojects {
|
|||
repositories {
|
||||
google()
|
||||
jcenter()
|
||||
maven { url "https://jitpack.io" }
|
||||
maven {
|
||||
url "http://dl.bintray.com/piasy/maven"
|
||||
}
|
||||
maven {
|
||||
url "https://jitpack.io"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue