Merge remote-tracking branch 'tuskyapp/develop' into master

This commit is contained in:
kyori19 2020-08-01 21:40:50 +09:00
commit 79ddb9b67c
65 changed files with 1277 additions and 345 deletions

View File

@ -124,7 +124,7 @@ dependencies {
implementation "androidx.appcompat:appcompat:1.2.0-rc01"
implementation "androidx.fragment:fragment-ktx:1.2.5"
implementation "androidx.browser:browser:1.2.0"
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
implementation "androidx.recyclerview:recyclerview:1.1.0"
implementation "androidx.exifinterface:exifinterface:1.2.0"
implementation "androidx.cardview:cardview:1.0.0"
@ -172,7 +172,7 @@ dependencies {
implementation "com.github.connyduck:sparkbutton:4.0.0"
implementation 'com.github.MikeOrtiz:TouchImageView:3.0.1'
implementation "com.github.chrisbanes:PhotoView:2.3.0"
implementation "com.mikepenz:materialdrawer:$materialdrawerVersion"
implementation "com.mikepenz:materialdrawer-iconics:$materialdrawerVersion"

View File

@ -58,6 +58,7 @@ import com.keylesspalace.tusky.interfaces.LinkListener
import com.keylesspalace.tusky.interfaces.ReselectableFragment
import com.keylesspalace.tusky.pager.AccountPagerAdapter
import com.keylesspalace.tusky.util.*
import com.keylesspalace.tusky.view.showMuteAccountDialog
import com.keylesspalace.tusky.viewmodel.AccountViewModel
import dagger.android.DispatchingAndroidInjector
import dagger.android.HasAndroidInjector
@ -352,8 +353,6 @@ class AccountActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidI
swipeToRefreshLayout.isRefreshing = isRefreshing == true
})
swipeToRefreshLayout.setColorSchemeResources(R.color.tusky_blue)
swipeToRefreshLayout.setProgressBackgroundColorSchemeColor(ThemeUtils.getColor(this,
android.R.attr.colorBackground))
}
private fun onAccountChanged(account: Account?) {
@ -382,7 +381,7 @@ class AccountActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidI
invalidateOptionsMenu()
accountMuteButton.setOnClickListener {
viewModel.changeMuteState()
viewModel.unmuteAccount()
updateMuteButton()
}
}
@ -703,13 +702,15 @@ class AccountActivity : BottomSheetActivity(), ActionButtonActivity, HasAndroidI
private fun toggleMute() {
if (viewModel.relationshipData.value?.data?.muting != true) {
AlertDialog.Builder(this)
.setMessage(getString(R.string.dialog_mute_warning, loadedAccount?.username))
.setPositiveButton(android.R.string.ok) { _, _ -> viewModel.changeMuteState() }
.setNegativeButton(android.R.string.cancel, null)
.show()
loadedAccount?.let {
showMuteAccountDialog(
this,
it.username,
{ notifications -> viewModel.muteAccount(notifications) }
)
}
} else {
viewModel.changeMuteState()
viewModel.unmuteAccount()
}
}

View File

@ -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));
}
}
}

View File

@ -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) }
}
}

View File

@ -8,6 +8,7 @@ import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.core.view.ViewCompat;
import androidx.preference.PreferenceManager;
import androidx.recyclerview.widget.RecyclerView;
@ -17,10 +18,14 @@ import com.keylesspalace.tusky.interfaces.AccountActionListener;
import com.keylesspalace.tusky.util.CustomEmojiHelper;
import com.keylesspalace.tusky.util.ImageLoadingHelper;
import java.util.HashMap;
public class MutesAdapter extends AccountAdapter {
private HashMap<String, Boolean> mutingNotificationsMap;
public MutesAdapter(AccountActionListener accountActionListener) {
super(accountActionListener);
mutingNotificationsMap = new HashMap<String, Boolean>();
}
@NonNull
@ -45,19 +50,31 @@ public class MutesAdapter extends AccountAdapter {
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
if (getItemViewType(position) == VIEW_TYPE_ACCOUNT) {
MutedUserViewHolder holder = (MutedUserViewHolder) viewHolder;
holder.setupWithAccount(accountList.get(position));
Account account = accountList.get(position);
holder.setupWithAccount(account, mutingNotificationsMap.get(account.getId()));
holder.setupActionListener(accountActionListener);
}
}
public void updateMutingNotifications(String id, boolean mutingNotifications, int position) {
mutingNotificationsMap.put(id, mutingNotifications);
notifyItemChanged(position);
}
public void updateMutingNotificationsMap(HashMap<String, Boolean> newMutingNotificationsMap) {
mutingNotificationsMap.putAll(newMutingNotificationsMap);
notifyDataSetChanged();
}
static class MutedUserViewHolder extends RecyclerView.ViewHolder {
private ImageView avatar;
private TextView username;
private TextView displayName;
private ImageButton unmute;
private ImageButton muteNotifications;
private String id;
private boolean animateAvatar;
private boolean notifications;
MutedUserViewHolder(View itemView) {
super(itemView);
@ -65,11 +82,12 @@ public class MutesAdapter extends AccountAdapter {
username = itemView.findViewById(R.id.muted_user_username);
displayName = itemView.findViewById(R.id.muted_user_display_name);
unmute = itemView.findViewById(R.id.muted_user_unmute);
muteNotifications = itemView.findViewById(R.id.muted_user_mute_notifications);
animateAvatar = PreferenceManager.getDefaultSharedPreferences(itemView.getContext())
.getBoolean("animateGifAvatars", false);
}
void setupWithAccount(Account account) {
void setupWithAccount(Account account, Boolean mutingNotifications) {
id = account.getId();
CharSequence emojifiedName = CustomEmojiHelper.emojify(account.getName(), account.getEmojis(), displayName);
displayName.setText(emojifiedName);
@ -79,11 +97,39 @@ public class MutesAdapter extends AccountAdapter {
int avatarRadius = avatar.getContext().getResources()
.getDimensionPixelSize(R.dimen.avatar_radius_48dp);
ImageLoadingHelper.loadAvatar(account.getAvatar(), avatar, avatarRadius, animateAvatar);
String unmuteString = unmute.getContext().getString(R.string.action_unmute_desc, formattedUsername);
unmute.setContentDescription(unmuteString);
ViewCompat.setTooltipText(unmute, unmuteString);
if (mutingNotifications == null) {
muteNotifications.setEnabled(false);
notifications = true;
} else {
muteNotifications.setEnabled(true);
notifications = mutingNotifications;
}
if (notifications) {
muteNotifications.setImageResource(R.drawable.ic_notifications_24dp);
String unmuteNotificationsString = muteNotifications.getContext()
.getString(R.string.action_unmute_notifications_desc, formattedUsername);
muteNotifications.setContentDescription(unmuteNotificationsString);
ViewCompat.setTooltipText(muteNotifications, unmuteNotificationsString);
} else {
muteNotifications.setImageResource(R.drawable.ic_notifications_off_24dp);
String muteNotificationsString = muteNotifications.getContext()
.getString(R.string.action_mute_notifications_desc, formattedUsername);
muteNotifications.setContentDescription(muteNotificationsString);
ViewCompat.setTooltipText(muteNotifications, muteNotificationsString);
}
}
void setupActionListener(final AccountActionListener listener) {
unmute.setOnClickListener(v -> listener.onMute(false, id, getAdapterPosition()));
avatar.setOnClickListener(v -> listener.onViewAccount(id));
unmute.setOnClickListener(v -> listener.onMute(false, id, getAdapterPosition(), false));
muteNotifications.setOnClickListener(
v -> listener.onMute(true, id, getAdapterPosition(), !notifications));
itemView.setOnClickListener(v -> listener.onViewAccount(id));
}
}
}

View File

@ -355,7 +355,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));
}
}

View File

@ -33,9 +33,9 @@ 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.chrisbanes.photoview.PhotoView
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,8 +50,8 @@ 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 = PhotoView(this).apply {
maximumScale = 6f
}
val displayMetrics = DisplayMetrics()

View File

@ -104,7 +104,6 @@ class ConversationsFragment : SFragment(), StatusActionListener, Injectable, Res
viewModel.refresh()
}
swipeRefreshLayout.setColorSchemeResources(R.color.tusky_blue)
swipeRefreshLayout.setProgressBackgroundColorSchemeColor(ThemeUtils.getColor(swipeRefreshLayout.context, android.R.attr.colorBackground))
}
private fun onTopLoaded() {

View File

@ -102,7 +102,6 @@ class ReportStatusesFragment : Fragment(), Injectable, AdapterHandler {
private fun setupSwipeRefreshLayout() {
swipeRefreshLayout.setColorSchemeResources(R.color.tusky_blue)
swipeRefreshLayout.setProgressBackgroundColorSchemeColor(ThemeUtils.getColor(swipeRefreshLayout.context, android.R.attr.colorBackground))
swipeRefreshLayout.setOnRefreshListener {
snackbarErrorRetry?.dismiss()

View File

@ -59,8 +59,6 @@ class ScheduledTootActivity : BaseActivity(), ScheduledTootActionListener, Injec
swipeRefreshLayout.setOnRefreshListener(this::refreshStatuses)
swipeRefreshLayout.setColorSchemeResources(R.color.tusky_blue)
swipeRefreshLayout.setProgressBackgroundColorSchemeColor(
ThemeUtils.getColor(this, android.R.attr.colorBackground))
scheduledTootList.setHasFixedSize(true)
scheduledTootList.layoutManager = LinearLayoutManager(this)

View File

@ -245,8 +245,8 @@ class SearchViewModel @Inject constructor(
return accountManager.getAllAccountsOrderedByActive()
}
fun muteAccount(accountId: String) {
timelineCases.mute(accountId)
fun muteAccount(accountId: String, notifications: Boolean) {
timelineCases.mute(accountId, notifications)
}
fun pinAccount(status: Status, isPin: Boolean) {

View File

@ -58,9 +58,6 @@ abstract class SearchFragment<T> : Fragment(),
private fun setupSwipeRefreshLayout() {
swipeRefreshLayout.setOnRefreshListener(this)
swipeRefreshLayout.setColorSchemeResources(R.color.tusky_blue)
swipeRefreshLayout.setProgressBackgroundColorSchemeColor(
ThemeUtils.getColor(swipeRefreshLayout.context, android.R.attr.colorBackground)
)
}
private fun subscribeObservables() {

View File

@ -40,6 +40,7 @@ import com.keylesspalace.tusky.interfaces.StatusActionListener
import com.keylesspalace.tusky.util.CardViewMode
import com.keylesspalace.tusky.util.NetworkState
import com.keylesspalace.tusky.util.StatusDisplayOptions
import com.keylesspalace.tusky.view.showMuteAccountDialog
import com.keylesspalace.tusky.viewdata.AttachmentViewData
import com.keylesspalace.tusky.viewdata.StatusViewData
import com.uber.autodispose.android.lifecycle.AndroidLifecycleScopeProvider.from
@ -377,11 +378,11 @@ class SearchNotestockFragment : SearchFragment<Pair<Status, StatusViewData.Concr
}
private fun onMute(accountId: String, accountUsername: String) {
AlertDialog.Builder(requireContext())
.setMessage(getString(R.string.dialog_mute_warning, accountUsername))
.setPositiveButton(android.R.string.ok) { _, _ -> viewModel.muteAccount(accountId) }
.setNegativeButton(android.R.string.cancel, null)
.show()
showMuteAccountDialog(
this.requireActivity(),
accountUsername,
{ notifications -> viewModel.muteAccount(accountId, notifications) }
)
}
private fun accountIsInMentions(account: AccountEntity?, mentions: Array<Mention>): Boolean {
@ -486,4 +487,4 @@ class SearchNotestockFragment : SearchFragment<Pair<Status, StatusViewData.Concr
}
}
}
}

View File

@ -26,6 +26,8 @@ import android.net.Uri
import android.os.Environment
import android.util.Log
import android.view.View
import android.widget.CheckBox
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.PopupMenu
@ -55,6 +57,7 @@ import com.keylesspalace.tusky.interfaces.StatusActionListener
import com.keylesspalace.tusky.util.CardViewMode
import com.keylesspalace.tusky.util.NetworkState
import com.keylesspalace.tusky.util.StatusDisplayOptions
import com.keylesspalace.tusky.view.showMuteAccountDialog
import com.keylesspalace.tusky.viewdata.AttachmentViewData
import com.keylesspalace.tusky.viewdata.StatusViewData
import com.uber.autodispose.android.lifecycle.AndroidLifecycleScopeProvider.from
@ -398,11 +401,11 @@ class SearchStatusesFragment : SearchFragment<Pair<Status, StatusViewData.Concre
}
private fun onMute(accountId: String, accountUsername: String) {
AlertDialog.Builder(requireContext())
.setMessage(getString(R.string.dialog_mute_warning, accountUsername))
.setPositiveButton(android.R.string.ok) { _, _ -> viewModel.muteAccount(accountId) }
.setNegativeButton(android.R.string.cancel, null)
.show()
showMuteAccountDialog(
this.requireActivity(),
accountUsername,
{ notifications -> viewModel.muteAccount(accountId, notifications) }
)
}
private fun accountIsInMentions(account: AccountEntity?, mentions: Array<Mention>): Boolean {

View File

@ -23,6 +23,7 @@ data class Relationship (
@SerializedName("followed_by") val followedBy: Boolean,
val blocking: Boolean,
val muting: Boolean,
@SerializedName("muting_notifications") val mutingNotifications: Boolean,
val requested: Boolean,
@SerializedName("showing_reblogs") val showingReblogs: Boolean,
@SerializedName("domain_blocking") val blockingDomain: Boolean

View File

@ -24,6 +24,7 @@ import androidx.lifecycle.Lifecycle
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.SimpleItemAnimator
import com.google.android.material.snackbar.Snackbar
import com.keylesspalace.tusky.AccountActivity
import com.keylesspalace.tusky.AccountListActivity.Type
@ -48,6 +49,7 @@ import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import java.io.IOException
import java.util.HashMap
import javax.inject.Inject
@ -80,6 +82,7 @@ class AccountListFragment : BaseFragment(), AccountActionListener, Injectable {
recyclerView.setHasFixedSize(true)
val layoutManager = LinearLayoutManager(view.context)
recyclerView.layoutManager = layoutManager
(recyclerView.itemAnimator as SimpleItemAnimator).supportsChangeAnimations = false
recyclerView.addItemDecoration(DividerItemDecoration(view.context, DividerItemDecoration.VERTICAL))
@ -112,50 +115,55 @@ class AccountListFragment : BaseFragment(), AccountActionListener, Injectable {
}
}
override fun onMute(mute: Boolean, id: String, position: Int) {
override fun onMute(mute: Boolean, id: String, position: Int, notifications: Boolean) {
val callback = object : Callback<Relationship> {
override fun onResponse(call: Call<Relationship>, response: Response<Relationship>) {
if (response.isSuccessful) {
onMuteSuccess(mute, id, position)
onMuteSuccess(mute, id, position, notifications)
} else {
onMuteFailure(mute, id)
onMuteFailure(mute, id, notifications)
}
}
override fun onFailure(call: Call<Relationship>, t: Throwable) {
onMuteFailure(mute, id)
onMuteFailure(mute, id, notifications)
}
}
val call = if (!mute) {
api.unmuteAccount(id)
} else {
api.muteAccount(id)
api.muteAccount(id, notifications)
}
callList.add(call)
call.enqueue(callback)
}
private fun onMuteSuccess(muted: Boolean, id: String, position: Int) {
private fun onMuteSuccess(muted: Boolean, id: String, position: Int, notifications: Boolean) {
val mutesAdapter = adapter as MutesAdapter
if (muted) {
mutesAdapter.updateMutingNotifications(id, notifications, position)
return
}
val mutesAdapter = adapter as MutesAdapter
val unmutedUser = mutesAdapter.removeItem(position)
if (unmutedUser != null) {
Snackbar.make(recyclerView, R.string.confirmation_unmuted, Snackbar.LENGTH_LONG)
.setAction(R.string.action_undo) {
mutesAdapter.addItem(unmutedUser, position)
onMute(true, id, position)
onMute(true, id, position, notifications)
}
.show()
}
}
private fun onMuteFailure(mute: Boolean, accountId: String) {
private fun onMuteFailure(mute: Boolean, accountId: String, notifications: Boolean) {
val verb = if (mute) {
"mute"
if (notifications) {
"mute (notifications = true)"
} else {
"mute (notifications = false)"
}
} else {
"unmute"
}
@ -321,6 +329,10 @@ class AccountListFragment : BaseFragment(), AccountActionListener, Injectable {
adapter.update(accounts)
}
if (adapter is MutesAdapter) {
fetchRelationships(accounts.map { it.id })
}
bottomId = fromId
fetching = false
@ -337,6 +349,38 @@ class AccountListFragment : BaseFragment(), AccountActionListener, Injectable {
}
}
private fun fetchRelationships(ids: List<String>) {
val callback = object : Callback<List<Relationship>> {
override fun onResponse(call: Call<List<Relationship>>, response: Response<List<Relationship>>) {
val body = response.body()
if (response.isSuccessful && body != null) {
onFetchRelationshipsSuccess(body)
} else {
onFetchRelationshipsFailure(ids)
}
}
override fun onFailure(call: Call<List<Relationship>>, t: Throwable) {
onFetchRelationshipsFailure(ids)
}
}
val call = api.relationships(ids)
callList.add(call)
call.enqueue(callback)
}
private fun onFetchRelationshipsSuccess(relationships: List<Relationship>) {
val mutesAdapter = adapter as MutesAdapter
var mutingNotificationsMap = HashMap<String, Boolean>()
relationships.map { mutingNotificationsMap.put(it.id, it.mutingNotifications) }
mutesAdapter.updateMutingNotificationsMap(mutingNotificationsMap)
}
private fun onFetchRelationshipsFailure(ids: List<String>) {
Log.e(TAG, "Fetch failure for relationships of accounts: $ids")
}
private fun onFetchAccountsFailure(throwable: Throwable) {
fetching = false
Log.e(TAG, "Fetch failure", throwable)

View File

@ -188,7 +188,6 @@ class AccountMediaFragment : BaseFragment(), RefreshableFragment, Injectable {
refresh()
}
swipeRefreshLayout.setColorSchemeResources(R.color.tusky_blue)
swipeRefreshLayout.setProgressBackgroundColorSchemeColor(ThemeUtils.getColor(view.context, android.R.attr.colorBackground))
}
statusView.visibility = View.GONE

View File

@ -226,7 +226,6 @@ public class NotificationsFragment extends SFragment implements
swipeRefreshLayout.setOnRefreshListener(this);
swipeRefreshLayout.setColorSchemeResources(R.color.tusky_blue);
swipeRefreshLayout.setProgressBackgroundColorSchemeColor(ThemeUtils.getColor(context, android.R.attr.colorBackground));
loadNotificationsFilter();
@ -832,7 +831,7 @@ public class NotificationsFragment extends SFragment implements
}
@Override
public void onMute(boolean mute, String id, int position) {
public void onMute(boolean mute, String id, int position, boolean notifications) {
// No muting from notifications yet
}

View File

@ -20,6 +20,7 @@ import android.app.DownloadManager;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
@ -29,6 +30,8 @@ import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
@ -60,6 +63,7 @@ import com.keylesspalace.tusky.entity.PollOption;
import com.keylesspalace.tusky.entity.Status;
import com.keylesspalace.tusky.network.MastodonApi;
import com.keylesspalace.tusky.network.TimelineCases;
import com.keylesspalace.tusky.view.MuteAccountDialog;
import com.keylesspalace.tusky.viewdata.AttachmentViewData;
import java.util.ArrayList;
@ -71,6 +75,8 @@ import java.util.regex.Pattern;
import javax.inject.Inject;
import kotlin.Unit;
import io.reactivex.android.schedulers.AndroidSchedulers;
import retrofit2.Call;
import retrofit2.Callback;
@ -358,11 +364,14 @@ public abstract class SFragment extends BaseFragment implements Injectable {
}
private void onMute(String accountId, String accountUsername) {
new AlertDialog.Builder(requireContext())
.setMessage(getString(R.string.dialog_mute_warning, accountUsername))
.setPositiveButton(android.R.string.ok, (__, ___) -> timelineCases.mute(accountId))
.setNegativeButton(android.R.string.cancel, null)
.show();
MuteAccountDialog.showMuteAccountDialog(
this.getActivity(),
accountUsername,
(notifications) -> {
timelineCases.mute(accountId, notifications);
return Unit.INSTANCE;
}
);
}
private void onBlock(String accountId, String accountUsername) {

View File

@ -531,11 +531,8 @@ public class TimelineFragment extends SFragment implements
private void setupSwipeRefreshLayout() {
swipeRefreshLayout.setEnabled(isSwipeToRefreshEnabled);
if (isSwipeToRefreshEnabled) {
Context context = swipeRefreshLayout.getContext();
swipeRefreshLayout.setOnRefreshListener(this);
swipeRefreshLayout.setColorSchemeResources(R.color.tusky_blue);
swipeRefreshLayout.setProgressBackgroundColorSchemeColor(ThemeUtils.getColor(context,
android.R.attr.colorBackground));
}
}

View File

@ -29,6 +29,7 @@ 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.Target
import com.github.chrisbanes.photoview.PhotoViewAttacher
import com.keylesspalace.tusky.R
import com.keylesspalace.tusky.entity.Attachment
import com.keylesspalace.tusky.util.hide
@ -45,6 +46,7 @@ class ViewImageFragment : ViewMediaFragment() {
fun onPhotoTap()
}
private lateinit var attacher: PhotoViewAttacher
private lateinit var photoActionsListener: PhotoActionsListener
private lateinit var toolbar: View
private var transition = BehaviorSubject.create<Unit>()
@ -61,9 +63,68 @@ class ViewImageFragment : ViewMediaFragment() {
photoActionsListener = context as PhotoActionsListener
}
@SuppressLint("ClickableViewAccessibility")
override fun setupMediaView(url: String, previewUrl: String?) {
descriptionView = mediaDescription
photoView.transitionName = url
attacher = PhotoViewAttacher(photoView).apply {
// This prevents conflicts with ViewPager
setAllowParentInterceptOnEdge(true)
// Clicking outside the photo closes the viewer.
setOnOutsidePhotoTapListener { photoActionsListener.onDismiss() }
setOnClickListener { onMediaTap() }
/* A vertical swipe motion also closes the viewer. This is especially useful when the photo
* mostly fills the screen so clicking outside is difficult. */
setOnSingleFlingListener { _, _, velocityX, velocityY ->
var result = false
if (abs(velocityY) > abs(velocityX)) {
photoActionsListener.onDismiss()
result = true
}
result
}
}
val gestureDetector = GestureDetector(requireContext(), object : GestureDetector.SimpleOnGestureListener() {
override fun onSingleTapConfirmed(e: MotionEvent?): Boolean {
onMediaTap()
return true
}
})
var lastY = 0f
photoView.setOnTouchListener { v, event ->
// This part is for scaling/translating on vertical move.
// We use raw coordinates to get the correct ones during scaling
gestureDetector.onTouchEvent(event)
if (event.action == MotionEvent.ACTION_DOWN) {
lastY = event.rawY
} else if (event.pointerCount == 1
&& attacher.scale == 1f
&& event.action == MotionEvent.ACTION_MOVE
) {
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.
if (photoView.translationY != 0f || abs(diff) > 40) {
photoView.translationY += (diff)
val scale = (-abs(photoView.translationY) / 720 + 1).coerceAtLeast(0.5f)
photoView.scaleY = scale
photoView.scaleX = scale
lastY = event.rawY
return@setOnTouchListener true
}
} else if (event.action == MotionEvent.ACTION_UP || event.action == MotionEvent.ACTION_CANCEL) {
onGestureEnd()
}
attacher.onTouch(v, event)
}
startedTransition = false
loadImageFromNetwork(url, previewUrl, photoView)
}
@ -74,64 +135,9 @@ class ViewImageFragment : ViewMediaFragment() {
return inflater.inflate(R.layout.fragment_view_image, container, false)
}
@SuppressLint("ClickableViewAccessibility")
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val gestureDetector = GestureDetector(requireContext(), object : GestureDetector.SimpleOnGestureListener() {
override fun onSingleTapConfirmed(e: MotionEvent?): Boolean {
onMediaTap()
return true
}
})
var lastY = 0f
photoView.setOnTouchListener { _, event ->
// 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) {
lastY = event.rawY
} else if (!photoView.isZoomed && event.action == MotionEvent.ACTION_MOVE) {
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.
if (photoView.translationY != 0f || abs(diff) > 40) {
photoView.translationY += (diff)
val scale = (-abs(photoView.translationY) / 720 + 1).coerceAtLeast(0.5f)
photoView.scaleY = scale
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
}
}
result
}
val arguments = this.requireArguments()
val attachment = arguments.getParcelable<Attachment>(ARG_ATTACHMENT)
@ -199,6 +205,7 @@ class ViewImageFragment : ViewMediaFragment() {
.load(previewUrl)
.dontAnimate()
.onlyRetrieveFromCache(true)
.centerInside()
.addListener(ImageRequestListener(true, isThumnailRequest = true)))
else it
}
@ -207,6 +214,7 @@ class ViewImageFragment : ViewMediaFragment() {
.centerInside()
.addListener(ImageRequestListener(false, isThumnailRequest = false))
)
.centerInside()
.addListener(ImageRequestListener(true, isThumnailRequest = false))
.into(photoView)
}
@ -267,7 +275,13 @@ class ViewImageFragment : ViewMediaFragment() {
// another branch. take() will unsubscribe after we have it to not leak menmory
transition
.take(1)
.subscribe { target.onResourceReady(resource, null) }
.subscribe {
target.onResourceReady(resource, null)
// It's needed. Don't ask why, I don't know, setImageDrawable() should
// do it by itself but somehow it doesn't work automatically.
// Just do it. If you don't, image will jump around when touched.
attacher.update()
}
}
return true
}

View File

@ -153,8 +153,6 @@ public final class ViewThreadFragment extends SFragment implements
swipeRefreshLayout = rootView.findViewById(R.id.swipeRefreshLayout);
swipeRefreshLayout.setOnRefreshListener(this);
swipeRefreshLayout.setColorSchemeResources(R.color.tusky_blue);
swipeRefreshLayout.setProgressBackgroundColorSchemeColor(
ThemeUtils.getColor(context, android.R.attr.colorBackground));
recyclerView = rootView.findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);

View File

@ -17,7 +17,7 @@ package com.keylesspalace.tusky.interfaces;
public interface AccountActionListener {
void onViewAccount(String id);
void onMute(final boolean mute, final String id, final int position);
void onMute(final boolean mute, final String id, final int position, final boolean notifications);
void onBlock(final boolean block, final String id, final int position);
void onRespondToFollowRequest(final boolean accept, final String id, final int position);
}

View File

@ -317,9 +317,11 @@ interface MastodonApi {
@Path("id") accountId: String
): Call<Relationship>
@FormUrlEncoded
@POST("api/v1/accounts/{id}/mute")
fun muteAccount(
@Path("id") accountId: String
@Path("id") accountId: String,
@Field("notifications") notifications: Boolean
): Call<Relationship>
@POST("api/v1/accounts/{id}/unmute")

View File

@ -36,7 +36,7 @@ interface TimelineCases {
fun reblog(status: Status, reblog: Boolean): Single<Status>
fun favourite(status: Status, favourite: Boolean): Single<Status>
fun bookmark(status: Status, bookmark: Boolean): Single<Status>
fun mute(id: String)
fun mute(id: String, notifications: Boolean)
fun block(id: String)
fun delete(id: String): Single<DeletedStatus>
fun pin(status: Status, pin: Boolean)
@ -107,8 +107,8 @@ class TimelineCasesImpl(
}
}
override fun mute(id: String) {
val call = mastodonApi.muteAccount(id)
override fun mute(id: String, notifications: Boolean) {
val call = mastodonApi.muteAccount(id, notifications)
call.enqueue(object : Callback<Relationship> {
override fun onResponse(call: Call<Relationship>, response: Response<Relationship>) {}

View File

@ -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
}
}

View File

@ -0,0 +1,27 @@
@file:JvmName("MuteAccountDialog")
package com.keylesspalace.tusky.view
import android.app.Activity
import android.widget.CheckBox
import android.widget.TextView
import androidx.appcompat.app.AlertDialog
import com.keylesspalace.tusky.R
fun showMuteAccountDialog(
activity: Activity,
accountUsername: String,
onOk: (notifications: Boolean) -> Unit
) {
val view = activity.layoutInflater.inflate(R.layout.dialog_mute_account, null)
(view.findViewById(R.id.warning) as TextView).text =
activity.getString(R.string.dialog_mute_warning, accountUsername)
val checkbox: CheckBox = view.findViewById(R.id.checkbox)
checkbox.setChecked(true)
AlertDialog.Builder(activity)
.setView(view)
.setPositiveButton(android.R.string.ok) { _, _ -> onOk(checkbox.isChecked) }
.setNegativeButton(android.R.string.cancel, null)
.show()
}

View File

@ -148,12 +148,12 @@ class AccountViewModel @Inject constructor(
}
}
fun changeMuteState() {
if (relationshipData.value?.data?.muting == true) {
changeRelationship(RelationShipAction.UNMUTE)
} else {
changeRelationship(RelationShipAction.MUTE)
}
fun muteAccount(notifications: Boolean) {
changeRelationship(RelationShipAction.MUTE, notifications)
}
fun unmuteAccount() {
changeRelationship(RelationShipAction.UNMUTE)
}
fun blockDomain(instance: String) {
@ -203,7 +203,10 @@ class AccountViewModel @Inject constructor(
}
}
private fun changeRelationship(relationshipAction: RelationShipAction, showReblogs: Boolean = true) {
/**
* @param parameter showReblogs if RelationShipAction.FOLLOW, notifications if MUTE
*/
private fun changeRelationship(relationshipAction: RelationShipAction, parameter: Boolean? = null) {
val relation = relationshipData.value?.data
val account = accountData.value?.data
@ -254,11 +257,11 @@ class AccountViewModel @Inject constructor(
}
val call = when (relationshipAction) {
RelationShipAction.FOLLOW -> mastodonApi.followAccount(accountId, showReblogs)
RelationShipAction.FOLLOW -> mastodonApi.followAccount(accountId, parameter ?: true)
RelationShipAction.UNFOLLOW -> mastodonApi.unfollowAccount(accountId)
RelationShipAction.BLOCK -> mastodonApi.blockAccount(accountId)
RelationShipAction.UNBLOCK -> mastodonApi.unblockAccount(accountId)
RelationShipAction.MUTE -> mastodonApi.muteAccount(accountId)
RelationShipAction.MUTE -> mastodonApi.muteAccount(accountId, parameter ?: true)
RelationShipAction.UNMUTE -> mastodonApi.unmuteAccount(accountId)
}

View File

@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M0 0h24v24H0z" />
<path
android:fillColor="#000000"
android:pathData="M20 18.69L7.84 6.14 5.27 3.49 4 4.76l2.8 2.8v0.01c-0.52 0.99 -0.8 2.16-0.8 3.42v5l-2 2v1h13.73l2 2L21 19.72l-1-1.03zM12 22c1.11 0 2-0.89 2-2h-4c0 1.11 0.89 2 2 2zm6-7.32V11c0-3.08-1.64-5.64-4.5-6.32V4c0-0.83-0.67-1.5-1.5-1.5s-1.5 0.67 -1.5 1.5v0.68c-0.15 0.03 -0.29 0.08 -0.42 0.12 -0.1 0.03 -0.2 0.07 -0.3 0.11 h-0.01c-0.01 0-0.01 0-0.02 0.01 -0.23 0.09 -0.46 0.2 -0.68 0.31 0 0-0.01 0-0.01 0.01 L18 14.68z" />
</vector>

View File

@ -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"

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical"
android:paddingTop="20dp"
android:paddingLeft="20dp"
android:paddingRight="20dp">
<TextView android:id="@+id/warning"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:paddingBottom="20dp"
tools:text="@string/dialog_mute_warning"/>
<CheckBox android:id="@+id/checkbox"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:textColor="@color/textColorTertiary"
app:buttonTint="@color/compound_button_color"
android:text="@string/dialog_mute_hide_notifications"/>
</LinearLayout>

View File

@ -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"

View File

@ -7,7 +7,7 @@
android:clickable="true"
android:focusable="true">
<com.ortiz.touchview.TouchImageView
<com.github.chrisbanes.photoview.PhotoView
android:id="@+id/photoView"
android:layout_width="match_parent"
android:layout_height="match_parent" />

View File

@ -22,14 +22,26 @@
style="@style/TuskyImageButton"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_toStartOf="@id/muted_user_mute_notifications"
android:layout_centerVertical="true"
android:layout_gravity="center_vertical"
android:layout_marginStart="12dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:padding="4dp"
app:srcCompat="@drawable/ic_unmute_24dp" />
<ImageButton
android:id="@+id/muted_user_mute_notifications"
style="@style/TuskyImageButton"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_gravity="center_vertical"
android:layout_marginStart="12dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:contentDescription="@string/action_unmute"
android:padding="4dp"
app:srcCompat="@drawable/ic_unmute_24dp" />
app:srcCompat="@drawable/ic_notifications_24dp" />
<LinearLayout
android:layout_width="wrap_content"

View File

@ -494,4 +494,8 @@
<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>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="title_tab_preferences">ⵉⵛⵛⴰⵔⴻⵏ</string>
<string name="action_view_account_preferences">ⵉⵖⴻⵡⵡⴰⵕⴻⵏ ⵓⵎⵉⴸⴰⵏ</string>
<string name="action_view_preferences">ⵉⵖⴻⵡⵡⴰⵕⴻⵏ</string>
<string name="pref_title_proxy_settings">ⴰⵒⵕⵓⴽⵙⵉ</string>
<string name="action_view_blocks">ⵉⵎⵙⴻⵇⴷⴰⵛⴻⵏ ⵜⵙⵡⴰⵃⵍⴻⵎ</string>
</resources>

View File

@ -366,14 +366,12 @@
<string name="notification_clear_text">আপনি কি আপনার সমস্ত বিজ্ঞপ্তি স্থায়ীভাবে মুছে ফেলতে চান\?</string>
<string name="compose_preview_image_description">ছবি %s এর জন্য ক্রিয়া</string>
<string name="poll_info_format"> <!-- ১৫ ভোট • ১ ঘন্টা বাকি --> %1$s • %2$s</string>
<string name="poll_info_time_relative">%s বাকি</string>
<string name="poll_info_time_absolute">%s এ শেষ হবে</string>
<string name="poll_info_closed">বন্ধ</string>
<string name="poll_vote">ভোট</string>
<string name="poll_ended_voted">আপনি ভোট দিয়েছেন যে নির্বাচন এ সেটি শেষ হয়েছে</string>
<string name="poll_ended_created">আপনি তৈরি একটি নির্বাচন শেষ হয়েছে</string>
<string name="button_continue">চালিয়ে যান</string>
<string name="button_back">পিছনে যান</string>
<string name="button_done">সম্পন্ন</string>
@ -416,4 +414,9 @@
<string name="action_reset_schedule">রিসেট</string>
<string name="about_powered_by_tusky">টাস্কি দ্বারা চালিত</string>
<string name="post_lookup_error_format">%s পোস্ট অনুসন্ধানে ত্রুটি</string>
<string name="action_view_bookmarks">বুকমার্কগুলি</string>
<string name="action_bookmark">বুকমার্ক</string>
<string name="notification_follow_request_format">%s আপনাকে অনুসরণ করার জন্য অনুরোধ করেছে</string>
<string name="title_bookmarks">বুকমার্কগুলি</string>
<string name="error_audio_upload_size">অডিও ফাইলগুলি অবশ্যই MB এর চেয়ে কম হওয়া উচিত।</string>
</resources>

View File

@ -463,4 +463,13 @@
<string name="action_unmute_conversation">No silenciar la conversació</string>
<string name="action_mute_conversation">Conversació muda</string>
<string name="notification_follow_request_format">%s ha sol·licitat seguir-te</string>
<string name="pref_main_nav_position_option_bottom">A baix</string>
<string name="pref_main_nav_position_option_top">A dalt</string>
<string name="pref_main_nav_position">Posició de navegació principal</string>
<string name="pref_title_gradient_for_media">Mostra els degradats de colors per als mitjans ocults</string>
<string name="dialog_mute_hide_notifications">Amagar notificacions</string>
<string name="action_unmute_domain">Deixar de silenciar %s</string>
<string name="action_mute_notifications_desc">Desactivar les notificacions per %s</string>
<string name="action_unmute_notifications_desc">Activar les notificacions per %s</string>
<string name="action_unmute_desc">Notificar %s</string>
</resources>

View File

@ -29,7 +29,7 @@
<string name="title_followers">Dilynwyr</string>
<string name="title_favourites">Ffefrynnau</string>
<string name="title_mutes">Defnyddwyr mud</string>
<string name="title_blocks">Defnyddwyr wediu blocio</string>
<string name="title_blocks">Defnyddwyr wedi\'u blocio</string>
<string name="title_follow_requests">Dilyn ceisiadau</string>
<string name="title_edit_profile">Golygu\'ch Proffil</string>
<string name="title_saved_toot">Drafftiau</string>
@ -291,4 +291,5 @@
<string name="title_links_dialog">Cysylltiadau</string>
<string name="action_open_reblogged_by">Dangos hybiadau</string>
<string name="notification_follow_request_name">Dilyn ceisiadau</string>
<string name="action_bookmark">Nod tudalen</string>
</resources>

View File

@ -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">Yuito 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">Yuito 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://accelf.net/yuito
</string>
<string name="about_project_site">Website des Projekts:
\n https://accelf.net/yuito</string>
<string name="about_bug_feature_request_site"> Fehlermeldungen &amp; Verbesserungsvorschläge:\n
https://github.com/accelforce/Yuito/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,11 +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="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>
@ -454,4 +451,17 @@
<item quantity="other">%s Personen</item>
</plurals>
<string name="pref_title_gradient_for_media">Farbverlauf für versteckte Medien anzeigen</string>
</resources>
<string name="abbreviated_seconds_ago">%dS</string>
<string name="abbreviated_hours_ago">%dSt.</string>
<string name="abbreviated_years_ago">%dJ.</string>
<string name="abbreviated_in_days">in %dT.</string>
<string name="abbreviated_in_years">in %dJ.</string>
<string name="abbreviated_minutes_ago">%dMin.</string>
<string name="abbreviated_days_ago">%dT.</string>
<string name="abbreviated_in_seconds">in %dSek.</string>
<string name="abbreviated_in_minutes">in %dMin.</string>
<string name="abbreviated_in_hours">in %dSt.</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>

View File

@ -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>

View File

@ -466,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>

View File

@ -340,7 +340,7 @@
<string name="license_cc_by_sa_4">نگارش ۴ CC-BY-SA</string>
<plurals name="favs">
<item quantity="one"><b>%1$s</b> پسند</item>
<item quantity="other"><b>%1$s</b> پسند</item>
<item quantity="other"></item>
</plurals>
<plurals name="reblogs">
<item quantity="one"><b>%s</b> تقویت</item>

View File

@ -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 nest 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 denvoi 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 lenvoi du pouet.</string>
<string name="title_home">Accueil</string>
<string name="title_notifications">Notifications</string>
@ -152,7 +152,7 @@
\n\nPour plus dinformations, 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 dabonnement ?</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 %da</string>
<string name="abbreviated_in_days">en %dj</string>
<string name="abbreviated_in_hours">en %dh</string>
<string name="abbreviated_in_minutes">en %dmin</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">%dmin</string>
<string name="abbreviated_seconds_ago">%ds</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>
@ -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>
@ -475,5 +475,13 @@
<string name="pref_title_enable_swipe_for_tabs">Activer les gestes de glissement pour passer dun onglet à lautre</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 en couleur pour les médias cachés</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>
<string name="dialog_mute_hide_notifications">Cacher les notifications</string>
<string name="action_mute_notifications_desc">Silencier les notifications de %s</string>
<string name="action_unmute_notifications_desc">Ne plus silencier les notifications de %s</string>
<string name="action_unmute_desc">Ne plus silencier %s</string>
</resources>

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="action_login">हिंदी</string>
<string name="action_login">मास्टोडन के साथ लॉगिन करें</string>
<string name="title_favourites">पसंदीदा</string>
<string name="title_saved_toot">Drafts</string>
<string name="title_saved_toot">ड्राफ्ट</string>
<string name="action_logout">लॉग आउट</string>
<string name="action_view_preferences">पसंद</string>
<string name="action_view_account_preferences">खाता प्राथमिकताएं</string>
@ -28,4 +28,240 @@
<string name="action_close">बंद करें</string>
<string name="action_view_profile">प्रोफाइल</string>
<string name="description_visiblity_private">फॉलोअर्स</string>
<string name="error_image_upload_size">फ़ाइल 8 एमबी से कम होनी चाहिए।</string>
<string name="error_media_upload_sending">अपलोड विफल रहा।</string>
<string name="error_media_download_permission">मीडिया को स्टोर करने की अनुमति आवश्यक है।</string>
<string name="error_media_upload_permission">मीडिया पढ़ने की अनुमति आवश्यक है।</string>
<string name="error_media_upload_opening">वह फ़ाइल नहीं खोली जा सकी।</string>
<string name="error_media_upload_type">उस प्रकार की फ़ाइल अपलोड नहीं की जा सकती।</string>
<string name="error_audio_upload_size">ऑडियो फाइलें 40 एमबी से कम होनी चाहिए।</string>
<string name="error_generic">एक त्रुटि हुई।</string>
<string name="action_reset_schedule">रीसेट</string>
<string name="error_video_upload_size">वीडियो फ़ाइलें 40 एमबी से कम होनी चाहिए।</string>
<string name="error_retrieving_oauth_token">लॉगिन टोकन प्राप्त करने में विफल।</string>
<string name="error_authorization_denied">प्राधिकरण करने के से इनकार कर दिया।</string>
<string name="error_authorization_unknown">एक अज्ञात प्राधिकरण त्रुटि हुई।</string>
<string name="error_no_web_browser_found">उपयोग करने के लिए वेब ब्राउज़र नहीं मिला।</string>
<string name="error_invalid_domain">अमान्य डोमेन दर्ज किया गया</string>
<string name="error_empty">यह खाली नहीं हो सकता।</string>
<string name="error_network">नेटवर्क त्रुटि हुई! कृपया अपना कनेक्शन जांचें और पुनः प्रयास करें!</string>
<string name="title_lists">सूचियाँ</string>
<string name="action_lists">सूचियाँ</string>
<string name="description_poll">जनमत के विकल्प: %1$s, %2$s, %3$s, %4$s; %5$s</string>
<string name="action_view_bookmarks">बुकमार्क</string>
<string name="edit_poll">संपादित करें</string>
<string name="pref_title_notification_filter_poll">जनमत खत्म हो गया हैं</string>
<string name="action_add_poll">जनमत शुरू करें</string>
<string name="create_poll_title">जनमत</string>
<string name="title_accounts">खाते</string>
<string name="button_done">पूर्ण</string>
<string name="button_back">पीछे</string>
<string name="button_continue">जारी रखें</string>
<string name="poll_vote">वोट</string>
<string name="poll_info_closed">बन्द है</string>
<string name="compose_shortcut_short_label">लिखें</string>
<string name="title_statuses_pinned">पिन की गई</string>
<string name="title_statuses">पोस्ट</string>
<string name="title_home">घर</string>
<string name="license_description">टस्की में निम्नलिखित ओपन सोर्स परियोजनाओं से कोड और संपत्ति हैं:</string>
<string name="restart_emoji">इन परिवर्तनों को लागू करने के लिए आपको टस्की को पुनः आरंभ करना होगा</string>
<string name="about_tusky_account">टस्की की प्रोफाइल</string>
<string name="about_bug_feature_request_site">बग रिपोर्ट और सुविधा अनुरोध:
\n https://github.com/tuskyapp/Tusky/issues</string>
<string name="about_project_site">परियोजना की वेबसाइट:
\n https://tusky.app</string>
<string name="about_tusky_license">टस्की स्वतंत्र और ओपन-सोर्स सॉफ्टवेयर है। यह GNU जनरल पब्लिक लाइसेंस संस्करण 3 के तहत लाइसेंस प्राप्त है। आप लाइसेंस यहां देख सकते हैं: https://www.gnu.org/licenses/gpl-3.0.en.html</string>
<string name="about_powered_by_tusky">टस्की द्वारा संचालित</string>
<string name="about_tusky_version">टस्की %s</string>
<string name="description_account_locked">बंद खाता</string>
<string name="notification_summary_small">%1$s तथा %2$s</string>
<string name="notification_summary_medium">%1$s, %2$s, तथा %3$s</string>
<string name="notification_summary_large">%1$s, %2$s, %3$s तथा %4$d अन्य लोग</string>
<string name="notification_poll_name">जनमत</string>
<string name="notification_favourite_name">पसंदीदा</string>
<string name="status_text_size_largest">सबसे बड़ा</string>
<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="post_privacy_unlisted">असूचीबद्ध</string>
<string name="post_privacy_public">सार्वजनिक</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_failed_to_sync">सेटिंग्स सिंक करने में विफल</string>
<string name="pref_default_media_sensitivity">हमेशा मीडिया को संवेदनशील के रूप में चिह्नित करें</string>
<string name="pref_default_post_privacy">डिफ़ॉल्ट पोस्ट गोपनीयता</string>
<string name="pref_title_show_media_preview">मीडिया पूर्वावलोकन डाउनलोड करें</string>
<string name="pref_title_show_replies">जवाब दिखाएँ</string>
<string name="pref_title_status_tabs">टैब्स</string>
<string name="pref_title_gradient_for_media">छिपे हुए मीडिया के लिए रंगीन ग्रेडिएंट दिखाएं</string>
<string name="pref_title_bot_overlay">बॉट के लिए संकेतक दिखाएं</string>
<string name="pref_title_language">भाषा</string>
<string name="pref_title_hide_follow_button">स्क्रॉल करते समय कंपोज बटन को छिपाएं</string>
<string name="pref_title_custom_tabs">क्रोम कस्टम टैब का उपयोग करें</string>
<string name="pref_title_browser_settings">ब्राउज़र</string>
<string name="app_theme_system">सिस्टम डिज़ाइन का उपयोग करें</string>
<string name="app_theme_auto">सूर्यास्त के समय स्वचालित</string>
<string name="app_theme_black">काला</string>
<string name="app_them_dark">अंधेर</string>
<string name="pref_title_timeline_filters">फिल्टर</string>
<string name="pref_title_appearance_settings">दिखावट</string>
<string name="pref_title_notification_filter_mentions">उल्लेख किया</string>
<string name="pref_title_notification_filters">मुझे सूचित करें जब</string>
<string name="pref_title_notification_alert_light">रोशनी के साथ सूचित करें</string>
<string name="pref_title_notification_alert_vibrate">कंपन के साथ सूचित करें</string>
<string name="pref_title_notification_alert_sound">एक ध्वनि के साथ सूचित करें</string>
<string name="pref_title_notifications_enabled">सूचनाएं</string>
<string name="pref_title_edit_notification_settings">सूचनाएं</string>
<string name="visibility_direct">प्रत्यक्ष: केवल उल्लिखित उपयोगकर्ताओं को पोस्ट करें</string>
<string name="visibility_private">केवल अनुयायियों: केवल अनुयायियों के लिए पोस्ट करें</string>
<string name="visibility_unlisted">असूचीबद्ध: सार्वजनिक टाइमलाइन में न दिखाएं</string>
<string name="visibility_public">सार्वजनिक: सार्वजनिक टाइमलाइन पर पोस्ट करें</string>
<string name="dialog_mute_warning">म्यूट @%s\?</string>
<string name="mute_domain_warning_dialog_ok">संपूर्ण डोमेन छिपाएं</string>
<string name="dialog_download_image">डाउनलोड</string>
<string name="dialog_message_uploading_media">अपलोड हो रहा है…</string>
<string name="login_connection">कनेक्ट कर रहे…</string>
<string name="label_header">हैडर</string>
<string name="label_avatar">अवतार</string>
<string name="label_quick_reply">जवाब दें…</string>
<string name="search_no_results">कोई परिणाम नहीं</string>
<string name="hint_search">खोज…</string>
<string name="hint_note">जीवनी</string>
<string name="hint_display_name">प्रदर्शित होने वाला नाम</string>
<string name="hint_content_warning">विषय वस्तु चेतावनी</string>
<string name="hint_compose">क्या हो रहा है\?</string>
<string name="status_sent_long">उत्तर सफलतापूर्वक भेजा गया।</string>
<string name="status_sent">भेज दिया!</string>
<string name="confirmation_reported">भेज दिया!</string>
<string name="downloading_media">मीडिया डाउनलोड हो रहा है</string>
<string name="download_media">मीडिया डाउनलोड करें</string>
<string name="title_links_dialog">लिंक</string>
<string name="action_copy_link">लिंक कॉपी करें</string>
<string name="action_open_media_n">मीडिया खोलें #%d</string>
<string name="title_mentions_dialog">ज़िक्र</string>
<string name="title_hashtags_dialog">हैशटैग</string>
<string name="action_open_faved_by">पसंदीदा दिखाएँ</string>
<string name="action_hashtags">हैशटैग</string>
<string name="action_mentions">ज़िक्र</string>
<string name="action_add_tab">ऐड टैब</string>
<string name="action_schedule_toot">अनुसूची टूट</string>
<string name="action_emoji_keyboard">इमोजी कीबोर्ड</string>
<string name="action_content_warning">विषय वस्तु चेतावनी</string>
<string name="action_toggle_visibility">टूट दृश्यता</string>
<string name="action_access_scheduled_toot">अनुसूचित टूट</string>
<string name="action_accept">स्वीकार करें</string>
<string name="action_access_saved_toot">प्रारूप</string>
<string name="action_reject">अस्वीकार करें</string>
<string name="action_undo">पूर्ववत करें</string>
<string name="action_edit_own_profile">संपादित करें</string>
<string name="action_save">सेव</string>
<string name="action_hide_media">मीडिया छिपाओ</string>
<string name="action_mention">ज़िक्र</string>
<string name="action_unmute_conversation">बातचीत को अनम्यूट करें</string>
<string name="action_unmute_domain">अनम्यूट %s</string>
<string name="action_unmute">अनम्यूट</string>
<string name="action_mute">म्यूट</string>
<string name="action_mute_domain">म्यूट %s</string>
<string name="action_mute_conversation">बातचीत को म्यूट करें</string>
<string name="action_share">शेयर</string>
<string name="action_photo_take">फोटो खींचिए</string>
<string name="action_add_media">ऐड मीडिया</string>
<string name="action_open_in_web">ब्राउज़र में खोलें</string>
<string name="action_view_media">मीडिया</string>
<string name="error_sender_account_gone">टूट भेजने में त्रुटि।</string>
<string name="action_bookmark">बुकमार्क</string>
<string name="action_reblog">बढ़ावा दें</string>
<string name="action_quick_reply">तुरंत जवाब</string>
<string name="report_comment_hint">अतिरिक्त टिप्पणियां\?</string>
<string name="report_username_format">रिपोर्ट @%s</string>
<string name="notification_favourite_format">%s ने आपके टूट का समर्थन किया</string>
<string name="notification_reblog_format">%s ने आपके टूट को बढावा दिया</string>
<string name="footer_empty">यहाँ कुछ नहीं। ताज़ा करने के लिए नीचे खींचो!</string>
<string name="message_empty">यहाँ कुछ नहीं।</string>
<string name="status_content_warning_show_less">कम दिखाएं</string>
<string name="status_content_warning_show_more">और दिखाओ</string>
<string name="status_sensitive_media_directions">देखने के लिए क्लिक करें</string>
<string name="status_media_hidden_title">मीडिया छिपा हुआ</string>
<string name="status_sensitive_media_title">संवेदनशील विषय वस्तु</string>
<string name="status_username_format">\@%s</string>
<string name="title_licenses">लाइसेंस</string>
<string name="title_view_thread">टूट</string>
<string name="title_scheduled_toot">अनुसूचित टूट</string>
<string name="title_domain_mutes">छिपे हुए डोमेन</string>
<string name="title_mutes">म्यूट किए गए उपयोगकर्ताओं</string>
<string name="title_bookmarks">बुकमार्क</string>
<string name="title_tab_preferences">टैब्स</string>
<string name="title_direct_messages">सीधे संदेश</string>
<string name="title_public_federated">संघीय</string>
<string name="title_public_local">स्थानीय</string>
<string name="title_notifications">सूचनाएं</string>
<string name="add_poll_choice">विकल्प जोड़ें</string>
<string name="poll_new_choice_hint">विकल्प %d</string>
<string name="poll_allow_multiple_choices">कई विकल्प</string>
<string name="poll_duration_7_days">7 दिन</string>
<string name="poll_duration_3_days">3 दिन</string>
<string name="poll_duration_1_day">1 दिन</string>
<string name="poll_duration_6_hours">6 घंटे</string>
<string name="poll_duration_1_hour">1 घंटा</string>
<string name="poll_duration_30_min">30 मिनिट</string>
<string name="poll_duration_5_min">5 मिनट</string>
<plurals name="poll_timespan_seconds">
<item quantity="one">%d सेकेंड</item>
<item quantity="other">%d सेकेंड</item>
</plurals>
<plurals name="poll_timespan_minutes">
<item quantity="one">%d मिनट</item>
<item quantity="other">%d मिनट</item>
</plurals>
<plurals name="poll_timespan_hours">
<item quantity="one">%d घंटा</item>
<item quantity="other">%d घंटे</item>
</plurals>
<plurals name="poll_timespan_days">
<item quantity="one">%d दिन</item>
<item quantity="other">%d दिन</item>
</plurals>
<string name="poll_ended_created">आपके द्वारा बनाया गया एक जनमत समाप्त हो गया है</string>
<string name="poll_ended_voted">आपके द्वारा मतदान किया गया जनमत समाप्त हो गया है</string>
<string name="poll_info_time_absolute">%s समाप्त होगा</string>
<string name="poll_info_time_relative">%s शेष</string>
<plurals name="poll_info_people">
<item quantity="one">%s व्यक्ति</item>
<item quantity="other">%s लोग</item>
</plurals>
<plurals name="poll_info_votes">
<item quantity="one">%s वोट</item>
<item quantity="other">%s वोट</item>
</plurals>
<string name="hashtags">हैशटैग</string>
<string name="poll_info_format"> <!-- 15 वोट • 1 घंटा बाकी --> %1$s • %2$s</string>
<string name="list">सूची</string>
<string name="description_status_bookmarked">बुकमार्क किया हुआ</string>
<string name="hint_list_name">सूची का नाम</string>
<string name="description_status_media_no_description_placeholder">कोई विवरण नहीं</string>
<string name="description_status_media">मीडिया: %s</string>
<string name="profile_metadata_add">जानकारी जोड़ें</string>
<string name="license_cc_by_sa_4">CC-BY-SA 4.0</string>
<string name="license_cc_by_4">CC-BY 4.0</string>
<string name="profile_metadata_label">प्रोफ़ाइल मेटाडेटा</string>
<string name="download_failed">डाउनलोड विफल</string>
<string name="action_open_toot">टूट खोलें</string>
<string name="performing_lookup_title">देखने की क्रिया जारी…</string>
<string name="system_default">सिस्टम डिफ़ॉल्ट</string>
<string name="emoji_style">इमोजी का अंदाज</string>
<string name="send_toot_notification_cancel_title">भेजना रद्द हो गया</string>
<string name="send_toot_notification_channel_name">टूट भेज रहे</string>
<string name="send_toot_notification_title">टूट भेज रहे…</string>
<string name="compose_save_draft">लिखने को सुरक्षित करें\?</string>
<string name="lock_account_label">खाता लॉक करें</string>
<string name="action_set_caption">कैप्शन सेट करें</string>
<string name="title_list_timeline">सूची टाइमलाइन</string>
<string name="add_account_name">खाता जोड़ो</string>
<string name="filter_dialog_whole_word">पूरा शब्द</string>
<string name="filter_edit_dialog_title">फ़िल्टर संपादित करें</string>
<string name="filter_addition_dialog_title">फिल्टर लगाएं</string>
<string name="pref_title_public_filter_keywords">सार्वजनिक टाइमलाइन</string>
<string name="load_more_placeholder_text">और लोड करें</string>
</resources>

View File

@ -33,7 +33,7 @@
<string name="title_followers">Követő</string>
<string name="title_favourites">Kedvencek</string>
<string name="title_mutes">Némított felhasználók</string>
<string name="title_blocks">Blokkolt felhasználók</string>
<string name="title_blocks">Letiltott felhasználók</string>
<string name="title_follow_requests">Követési kérelmek</string>
<string name="title_edit_profile">Profilod szerkesztése</string>
<string name="title_saved_toot">Piszkozatok</string>

View File

@ -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_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 %dmin</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_seconds_ago">%ds</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>

View File

@ -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>
@ -268,4 +268,8 @@
<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>
<string name="no_scheduled_status">Ulac ɣur-k·m ula d yiwet n tjewwiqt yettwasɣawsen.</string>
<string name="action_access_scheduled_toot">Tijewwiqin yettwasɣawsen</string>
<string name="title_scheduled_toot">Tijewwiqin yettwasɣawsen</string>
</resources>

View File

@ -51,7 +51,7 @@
<string name="action_reblog">ബൂസ്റ്റ്</string>
<string name="action_unreblog">ബൂസ്റ്റ് പിൻവലിക്കുക</string>
<string name="action_favourite">ഇഷ്ടപ്പെട്ടവ</string>
<string name="action_unfavourite">ഇഷ്ടപ്പെട്ടവയിൽ നിന്നും കളയുക</string>
<string name="action_unfavourite">ഇഷ്ടപ്പെട്ടവ ഒഴിവാക്കുക</string>
<string name="action_more">കൂടുതൽ</string>
<string name="action_follow">പിന്തുടരുക</string>
<string name="action_unfollow">പിരിയുക</string>
@ -59,4 +59,46 @@
<string name="action_view_follow_requests">പിന്‍തുടരുവാനുള്ള അഭ്യര്‍ത്ഥനകള്‍</string>
<string name="title_domain_mutes">മറയ്ക്കപ്പെട്ട ഡൊമൈനുകൾ</string>
<string name="description_visiblity_private">പിന്തുടരുന്നവർ</string>
<string name="footer_empty">പുതിയത് ലഭിക്കാൻ താഴേക്ക് വലിക്കുക</string>
<string name="message_empty">ലഭ്യമല്ല</string>
<string name="status_content_show_less">ചുരുക്കുക</string>
<string name="status_content_show_more">വിപുലപ്പെടുത്തുക</string>
<string name="status_content_warning_show_less">അൽപ്പം കാണിക്കൂ</string>
<string name="status_content_warning_show_more">കൂടുതൽ കാണിക്കൂ</string>
<string name="status_sensitive_media_directions">തുറന്ന് കാണുവാൻ</string>
<string name="status_media_hidden_title">മറയ്ക്കപ്പെട്ട മീഡിയ</string>
<string name="status_sensitive_media_title">സെൻസിറ്റീവ് ഉള്ളടക്കം</string>
<string name="status_boosted_format">ബൂസ്റ്റഡ്</string>
<string name="title_licenses">അനുവാദം</string>
<string name="title_scheduled_toot">മുന്‍നിശ്ചയിച്ച ടൂറ്റ്‌സ്</string>
<string name="title_bookmarks">ബുക് മാർക്ക്</string>
<string name="action_reset_schedule">പുനഃക്രമീകരിക്കുക</string>
<string name="action_open_in_web">ബ്രൗസറിൽ തുറക്കുക</string>
<string name="action_view_media">മാധ്യമം</string>
<string name="action_view_domain_mutes">മറച്ചുവെച്ച ഡൊമൈനുകൾ</string>
<string name="action_view_blocks">നിരോധിച്ച ഉപയോഗതാക്കൾ</string>
<string name="action_view_mutes">നിശ്ശബ്ദമാക്കിയ ഉപയോഗതാക്കൾ</string>
<string name="action_view_bookmarks">ബൂക്കമാർക്ക്</string>
<string name="action_view_favourites">ഇഷ്ടപ്പെട്ടത്</string>
<string name="action_view_profile">പ്രൊഫൈൽ</string>
<string name="action_close">നിർത്തുക</string>
<string name="action_send_public">ടൂട്ട്!</string>
<string name="action_send">ടൂട്ട്</string>
<string name="action_delete_and_redraft">നീക്കം ചെയ്യത് പുതിയത് എഴുതുക</string>
<string name="action_delete">നീക്കം ചെയ്യുക</string>
<string name="action_edit">തിരുത്ത്</string>
<string name="action_report">അറിയിക്കുക</string>
<string name="action_show_reblogs">ബൂട്ട്‌സ് കാണിക്കുക</string>
<string name="action_hide_reblogs">ബൂട്ട്‌സ് മറയ്‌ക്കുക</string>
<string name="action_unblock">നിരോധനം നീക്കുക</string>
<string name="action_block">നിരോധിക്കുക</string>
<string name="action_logout_confirm">ഈ അക്കൗണ്ടിൽ നിന്നും പുറത്തു പോകാൻ ഉറപ്പിച്ചോ %1$s\?</string>
<string name="action_compose">എഴുതുക</string>
<string name="action_quick_reply">പെട്ടന്നുള്ള മറുപടി</string>
<string name="report_comment_hint">കൂടുതൽ പറയാൻ ഉണ്ടോ\?</string>
<string name="report_username_format">അറിയിക്കുക @%s</string>
<string name="notification_follow_request_format">പിന്തുടരാൻ അപേക്ഷിക്കുന്നു</string>
<string name="notification_follow_format">%s നിങ്ങളെ പിന്തുടരുന്നു</string>
<string name="notification_favourite_format">നിങ്ങളുടെ ടൂറ്റ്‌സ് ഫാവ്</string>
<string name="notification_reblog_format">നിങ്ങളുടെ ടൂറ്റ്‌സ് ബൂസ്റ്റ് ചെയ്യപ്പെട്ടു</string>
</resources>

View File

@ -87,7 +87,7 @@
<string name="action_view_media">Media</string>
<string name="action_open_in_web">Åpne i nettleser</string>
<string name="action_add_media">Legg til media</string>
<string name="action_photo_take">Ta et bilde</string>
<string name="action_photo_take">Ta bilde</string>
<string name="action_share">Del</string>
<string name="action_mute">Demp bruker</string>
<string name="action_unmute">Fjern demping</string>
@ -210,7 +210,7 @@
\n https://github.com/accelforce/Yuito/issues</string>
<string name="about_tusky_account">Yuitos Mastodon-profil</string>
<string name="status_share_content">Del inneholdet i tootet</string>
<string name="status_share_link">Del link til tootet</string>
<string name="status_share_link">Del link til toot</string>
<string name="status_media_images">Bilder</string>
<string name="status_media_video">Video</string>
<string name="state_follow_requested">Forespørsel sendt</string>
@ -297,7 +297,7 @@
<string name="license_cc_by_4">CC-BY 4.0</string>
<string name="license_cc_by_sa_4">CC-BY-SA 4.0</string>
<string name="profile_metadata_label">Profilmetadata</string>
<string name="profile_metadata_add">legg til profilmetadata</string>
<string name="profile_metadata_add">legg til data</string>
<string name="profile_metadata_label_label">Ledetekst</string>
<string name="profile_metadata_content_label">Innhold</string>
<string name="pref_title_absolute_time">Bruk absolutt tid</string>
@ -324,7 +324,7 @@
<string name="description_status_reblogged">Reblogged</string>
<string name="description_status_favourited">Favorisert</string>
<string name="description_visiblity_public">Offentlig</string>
<string name="description_visiblity_unlisted">Ikke offentlige tidslinjer</string>
<string name="description_visiblity_unlisted">Ikke listet</string>
<string name="description_visiblity_private">Følgere</string>
<string name="description_visiblity_direct">Direkte</string>
<string name="hint_list_name">Listenavn</string>
@ -458,4 +458,9 @@
<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>
<string name="dialog_mute_hide_notifications">Skjul varsler</string>
<string name="action_mute_notifications_desc">Demp varsler fra %s</string>
<string name="action_unmute_notifications_desc">Fjern demping av varsler fra %s</string>
<string name="action_unmute_desc">Fjern demping av %s</string>
</resources>

View File

@ -59,7 +59,7 @@
<string name="action_block">Zablokuj</string>
<string name="action_unblock">Odblokuj</string>
<string name="action_hide_reblogs">Ukryj podbicia</string>
<string name="action_show_reblogs">Pokaż podbicia</string>
<string name="action_show_reblogs">Pokazuj podbicia</string>
<string name="action_report">Zgłoś</string>
<string name="action_delete">Usuń</string>
<string name="action_send">Wyślij</string>
@ -291,7 +291,7 @@
<string name="action_view_domain_mutes">Ukryte domeny</string>
<string name="action_add_poll">Dodaj głosowanie</string>
<string name="action_mute_domain">Wycisz %s</string>
<string name="action_add_tab">Dodaj zakładkę</string>
<string name="action_add_tab">Dodaj zakłądkę</string>
<string name="action_open_reblogger">Otwórz konto osoby podbijającej</string>
<string name="action_open_reblogged_by">Pokaż podbicia</string>
<string name="action_open_media_n">Otwórz media #%d</string>
@ -401,7 +401,8 @@
<plurals name="poll_timespan_hours">
<item quantity="one">%d godzina</item>
<item quantity="few">%d godziny</item>
<item quantity="many">%d godzin</item>
<item quantity="many"/>
<item quantity="other"/>
</plurals>
<plurals name="poll_timespan_minutes">
<item quantity="one">%d minuta</item>
@ -434,7 +435,7 @@
<string name="poll_duration_1_day">1 dzień</string>
<string name="poll_duration_3_days">3 dni</string>
<string name="poll_duration_7_days">7 dni</string>
<string name="add_poll_choice">Dodaj opcję</string>
<string name="add_poll_choice">Dodaj wybór</string>
<string name="poll_allow_multiple_choices">Kilka opcji</string>
<string name="poll_new_choice_hint">Opcja %d</string>
<string name="edit_poll">Edytuj</string>
@ -454,7 +455,7 @@
<string name="error_audio_upload_size">Pliki audio muszą być mniejsze niż 40MB.</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>
<string name="warning_scheduling_interval">Mastodon umożliwia wysłanie minimalnie 5 minut od zaplanowania.</string>
<string name="notification_follow_request_name">Prośby o możliwość śledzenia</string>
<string name="pref_title_confirm_reblogs">Pytaj o potwierdzenie przed podbiciem</string>
<string name="add_hashtag_title">Dodaj hashtag</string>
@ -462,4 +463,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>

View File

@ -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_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>
@ -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 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,9 +217,9 @@
-->
<string name="about_project_site">Site do projeto:\n
https://accelf.net/yuito</string>
<string name="about_bug_feature_request_site">Reporte bugs &amp; requisite funcionalidades:\n
https://github.com/accelforce/Yuito/issues</string>
<string name="about_tusky_account">Perfil do Yuito</string>
<string name="about_bug_feature_request_site">Reporte bugs e solicite funcionalidades:
\n https://github.com/accelforce/Yuito/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>
<string name="status_media_images">Imagens</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 Yuito para aplicar essas mudanças</string>
<string name="restart_required">É necessário reiniciar o aplicativo</string>
<string name="restart_emoji">É necessário reiniciar o Yuito 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 Yuito 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"> 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>
@ -453,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>

View File

@ -495,4 +495,8 @@
<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>

View File

@ -471,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>

View File

@ -259,7 +259,7 @@
<string name="unpin_action">விடுவி</string>
<string name="pin_action">பொருத்து</string>
<string name="action_view_account_preferences">கணக்கரின் முன்னுரிமைகள்</string>
<string name="error_network">"பிணைய பிழை ஏற்பட்டது! உங்கள் இணைப்பைச் சரிபார்த்து மீண்டும் முயற்சிக்கவும்!"</string>
<string name="error_network">பிணைய பிழை ஏற்பட்டது! உங்கள் இணைப்பைச் சரிபார்த்து மீண்டும் முயற்சிக்கவும்!</string>
<string name="error_video_upload_size">காணொளி 40MB க்கும் குறைவாக இருக்க வேண்டும்.</string>
<string name="error_sender_account_gone">டூத் அனுப்ப இயலவில்லை</string>
<string name="title_direct_messages">நேரடி தகவல்</string>

View File

@ -47,8 +47,7 @@
<plurals name="poll_info_votes">
<item quantity="other">%s โหวต</item>
</plurals>
<string name="poll_info_format">" &lt;!-- 15 votes • 1 hour left --&gt; %1$s • %2$s"<!-- 15 votes • 1 hour left -->
%1$s • %2$s</string>
<string name="poll_info_format"> <!-- 15 votes • 1 hour left --> %1$s • %2$s</string>
<string name="compose_preview_image_description">การกระทำสำหรับภาพ %s</string>
<string name="notification_clear_text">ต้องการลบการแจ้งเตือนทั้งหมดอย่างสมบูรณ์\?</string>
<string name="compose_shortcut_short_label">เขียน</string>
@ -181,7 +180,7 @@
\nhttps://github.com/tuskyapp/Tusky/issues</string>
<string name="about_project_site">เว็บไซต์โปรเจกต์:
\nhttps://tusky.app</string>
<string name="about_tusky_license">Tusky คือซอฟต์แวร์เสรีและโอเพนซอร์ส &lt;!-- --&gt; ภายใต้สัญญาอนุญาต GNU General Public License Version 3 &lt;!-- --&gt;ดูสัญญาที่ : 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 +205,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 +213,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>
@ -268,19 +267,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 และ &lt;a href=\"https://instances.social\"&gt;อีกมากมาย!&lt;/a&gt;
\n
\nถ้ายังไม่มีบัญชี สามารถใส่ชื่อ Instance ที่ต้องการจะร่วมแล้วสร้างบัญชีที่นั่น
\n
\nInstance คือที่ที่หนึ่งไว้โฮสต์บัญชีคุณ แต่คุณยังสามารถสื่อสาร ติดตามบุคคลบน Instance อื่นได้เหมือนอยู่บนไซต์เดียวกัน
\n
\nพบข้อมูลเพิ่มเติมได้ที่ &lt;a href=\"https://joinmastodon.org\"&gt;joinmastodon.org&lt;/a&gt; "<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>
<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> </string>
<string name="label_header">ภาพหัวบน</string>
<string name="login_connection">กำลังเชื่อมต่อ…</string>
<string name="label_avatar">อวตาร</string>
@ -326,7 +319,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>
@ -397,7 +390,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>
@ -453,4 +446,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>

View File

@ -3,7 +3,7 @@
<string name="error_generic">Bir hata oluştu.</string>
<string name="error_network">Bir ağ hatası oluştu! Lütfen bağlantınızı kontrol edin ve tekrar deneyin!</string>
<string name="error_empty">Bu alan boş bırakılamaz.</string>
<string name="error_invalid_domain">Girilen etki alanı geçersiz.</string>
<string name="error_invalid_domain">Girilen alan adı geçersiz.</string>
<string name="error_failed_app_registration">Kimliği bu sunucuda doğrulayamadı.</string>
<string name="error_no_web_browser_found">Kullanılabilen tarayıcı bulunmadı.</string>
<string name="error_authorization_unknown">ıklanmayan kimlik doğrulama hata oluştu.</string>
@ -184,7 +184,7 @@
<string name="post_privacy_unlisted">Liste dışı</string>
<string name="post_privacy_followers_only">Sadece takipçiler</string>
<string name="pref_status_text_size">Durum metin boyutu</string>
<string name="status_text_size_smallest">Çok küçük</string>
<string name="status_text_size_smallest">En küçük</string>
<string name="status_text_size_small">Küçük</string>
<string name="status_text_size_medium">Orta</string>
<string name="status_text_size_large">Büyük</string>

View File

@ -0,0 +1,453 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="notification_clear_text">Bạn có muốn xóa toàn bộ thông báo\?</string>
<string name="send_toot_notification_saved_content">Đã lưu vào nháp một bản sao của tút</string>
<string name="send_toot_notification_cancel_title">Hủy đăng</string>
<string name="send_toot_notification_channel_name">Đăng Tút</string>
<string name="send_toot_notification_title">Đang đăng…</string>
<string name="notification_title_summary">%d tương tác mới</string>
<string name="notification_summary_small">%1$s và %2$s</string>
<string name="notification_summary_medium">%1$s, %2$s, và %3$s</string>
<string name="notification_summary_large">%1$s, %2$s, %3$s và 4$d người khác</string>
<string name="notification_mention_format">%s nhắc tới bạn</string>
<string name="notification_mention_name">Lượt nhắc mới</string>
<string name="notification_follow_request_format">%s yêu cầu theo dõi bạn</string>
<string name="notification_follow_format">%s theo dõi bạn</string>
<string name="notification_favourite_format">%s thích tút của bạn</string>
<string name="notification_reblog_format">%s chia sẻ tút của bạn</string>
<string name="post_lookup_error_format">Lỗi khi tìm tút %s</string>
<string name="error_no_custom_emojis">Máy chủ %s không có emoji tùy chỉnh</string>
<string name="send_toot_notification_error_title">Lỗi khi đăng tút</string>
<string name="error_failed_set_caption">Thêm nội dung thất bại</string>
<string name="error_delete_list">Không thể xóa danh sách</string>
<string name="error_rename_list">Không thể đổi tên danh sách</string>
<string name="error_create_list">Không thể tạo danh sách</string>
<string name="error_sender_account_gone">Xảy ra lỗi khi đăng tút.</string>
<string name="error_media_upload_sending">Tải lên không thành công.</string>
<string name="error_media_upload_image_or_video">Không thể đính kèm ảnh và video cùng một lúc.</string>
<string name="error_media_download_permission">Cần có quyền truy cập bộ sưu tập.</string>
<string name="error_media_upload_permission">Cần có quyền đọc tập tin.</string>
<string name="error_media_upload_opening">Không thể mở tập tin.</string>
<string name="error_media_upload_type">Không hỗ trợ định dạng này.</string>
<string name="error_audio_upload_size">Kích cỡ audio tối đa 40MB.</string>
<string name="error_video_upload_size">Kích cỡ video tối đa 40MB.</string>
<string name="error_image_upload_size">Kích cỡ hình ảnh tối đa là 8MB.</string>
<string name="error_compose_character_limit">Vượt quá số ký tự cho phép!</string>
<string name="error_retrieving_oauth_token">Lấy token đăng nhập thất bại.</string>
<string name="error_authorization_denied">Truy cập bị từ chối.</string>
<string name="error_authorization_unknown">Xảy ra lỗi khi cố gắng truy cập.</string>
<string name="error_no_web_browser_found">Không tìm thấy trình duyệt web.</string>
<string name="error_invalid_domain">Tài khoản không đúng</string>
<string name="error_empty">Không được để trống.</string>
<string name="error_network">Không có Internet! Xin kiểm tra kết nối và thử lại!</string>
<string name="error_generic">Đã có lỗi xảy ra.</string>
<string name="error_failed_app_registration">Máy chủ này không cấp quyền truy cập.</string>
<string name="title_lists">Danh sách</string>
<string name="action_lists">Danh sách</string>
<string name="about_title_activity">Ứng dụng này</string>
<string name="action_reset_schedule">Làm tươi</string>
<string name="action_search">Tìm kiếm</string>
<string name="action_edit_profile">Chỉnh sửa trang cá nhân</string>
<string name="action_view_account_preferences">Tài khoản</string>
<string name="action_view_preferences">Cài đặt</string>
<string name="action_logout">Đăng xuất</string>
<string name="button_done">Xong</string>
<string name="action_send_public">TÚT!</string>
<string name="button_back">Quay lại</string>
<string name="button_continue">Tiếp tục</string>
<string name="filter_dialog_update_button">Cập nhật</string>
<string name="filter_dialog_remove_button">NGƯNG</string>
<string name="action_send">TÚT</string>
<string name="action_login">Đăng nhập Mastodon</string>
<string name="dialog_redraft_toot_warning">Xóa và viết lại tút này\?</string>
<string name="dialog_delete_toot_warning">Xóa tút này\?</string>
<string name="dialog_unfollow_warning">Hủy theo dõi người này\?</string>
<string name="dialog_message_cancel_follow_request">Hủy yêu cầu theo dõi\?</string>
<string name="dialog_download_image">Tải về</string>
<string name="dialog_message_uploading_media">Đang tải…</string>
<string name="dialog_title_finishing_media_upload">Đã tải xong tập tin</string>
<string name="dialog_whats_an_instance">Bạn phải nhập một tên miền, ví dụ mastodon.social, icosahedron.website, social.tchncs.de, và <a href="https://instances.social">nhiều hơn nữa!</a>
\n
\nNếu chưa có tài khoản, bạn phải tạo tài khoản trước ở đó.
\n
\nMột máy chủ là một cộng đồng nơi mà tài khoản của bạn lưu trữ trên đó, nhưng bạn cũng có thể giao tiếp và theo dõi với mọi người trên các máy chủ khác một cách dễ dàng.
\n
\nTham khảo thêm tại <a href="https://joinmastodon.org">joinmastodon.org</a>. </string>
<string name="login_connection">Đang kết nối…</string>
<string name="label_header">Ảnh bìa</string>
<string name="label_avatar">Ảnh đại diện</string>
<string name="label_quick_reply">Trả lời…</string>
<string name="search_no_results">Không tìm thấy</string>
<string name="hint_search">Tìm kiếm…</string>
<string name="hint_note">Tiểu sử</string>
<string name="hint_display_name">Tên hiển thị</string>
<string name="hint_content_warning">Nội dung nhạy cảm</string>
<string name="hint_compose">Chuyện gì đang xảy ra\?</string>
<string name="hint_domain">Bạn ở máy chủ nào\?</string>
<string name="status_sent_long">Trả lời đã được gửi đi.</string>
<string name="status_sent">Đã đăng!</string>
<string name="confirmation_domain_unmuted">Đã bỏ ẩn %s</string>
<string name="confirmation_unmuted">Đã bỏ ẩn người dùng</string>
<string name="confirmation_unblocked">Đã bỏ chặn người dùng</string>
<string name="confirmation_reported">Đã gửi!</string>
<string name="send_media_to">Chia sẻ tập tin với…</string>
<string name="send_status_link_to">Chia sẻ URL tút với…</string>
<string name="send_status_content_to">Chia sẻ tút với…</string>
<string name="downloading_media">Lưu tập tin về máy</string>
<string name="download_media">Lưu tập tin về máy</string>
<string name="action_share_as">Chia sẻ với tư cách …</string>
<string name="action_open_as">Mở với tư cách %s</string>
<string name="action_copy_link">Copy link</string>
<string name="download_image">Đang tải %1$s</string>
<string name="action_open_media_n">Mở tập tin #%d</string>
<string name="title_links_dialog">Links</string>
<string name="title_mentions_dialog">Lượt nhắc tới</string>
<string name="title_hashtags_dialog">Hashtags</string>
<string name="action_open_faved_by">Xem lượt thích</string>
<string name="action_open_reblogged_by">Xem lượt chia sẻ</string>
<string name="action_open_reblogger">Xem lượt chia sẻ</string>
<string name="action_hashtags">Hashtags</string>
<string name="action_mentions">Lượt nhắc tới</string>
<string name="action_links">Links</string>
<string name="action_add_tab">Thêm Tab</string>
<string name="action_schedule_toot">Lên lịch</string>
<string name="action_emoji_keyboard">Emoji</string>
<string name="action_content_warning">Nội dung nhạy cảm</string>
<string name="action_toggle_visibility">Công khai</string>
<string name="action_access_scheduled_toot">Tút đã lên lịch</string>
<string name="action_access_saved_toot">Nháp</string>
<string name="action_reject">Từ chối</string>
<string name="action_accept">Đồng ý</string>
<string name="action_undo">Trở về</string>
<string name="action_edit_own_profile">Sửa</string>
<string name="action_save">Lưu</string>
<string name="action_open_drawer">Mở ngăn kéo</string>
<string name="action_hide_media">Làm mờ hình ảnh</string>
<string name="action_mention">Nhắc tới</string>
<string name="action_unmute_conversation">Bỏ ẩn cuộc trò chuyện</string>
<string name="action_mute_conversation">Ẩn cuộc trò chuyện</string>
<string name="action_unmute_domain">Bỏ ẩn</string>
<string name="action_mute_domain">Ẩn %s</string>
<string name="action_unmute">Bỏ ẩn</string>
<string name="action_mute">Ẩn</string>
<string name="action_share">Chia sẻ</string>
<string name="action_photo_take">Chụp hình</string>
<string name="action_add_poll">Tạo bình chọn</string>
<string name="action_add_media">Thêm tệp</string>
<string name="action_open_in_web">Mở trong trình duyệt</string>
<string name="action_view_media">Bộ sưu tập</string>
<string name="action_view_follow_requests">Yêu cầu theo dõi</string>
<string name="action_view_domain_mutes">Máy chủ đã ẩn</string>
<string name="action_view_blocks">Người dùng đã chặn</string>
<string name="action_view_mutes">Người dùng đã ẩn</string>
<string name="action_view_bookmarks">Đã lưu</string>
<string name="action_view_favourites">Lượt thích</string>
<string name="action_view_profile">Trang cá nhân</string>
<string name="action_close">Đóng</string>
<string name="action_retry">Thử lại</string>
<string name="action_delete_and_redraft">Xóa &amp; viết lại</string>
<string name="action_delete">Xóa</string>
<string name="action_edit">Chỉnh sửa</string>
<string name="action_report">Báo cáo</string>
<string name="action_show_reblogs">Hiện lượt chia sẻ</string>
<string name="action_hide_reblogs">Ẩn lượt chia sẻ</string>
<string name="action_unblock">Bỏ chặn</string>
<string name="action_block">Chặn</string>
<string name="action_unfollow">Ngưng theo dõi</string>
<string name="action_follow">Theo dõi</string>
<string name="action_logout_confirm">Bạn có muốn đăng xuất tài khoản %1$s\?</string>
<string name="action_compose">Viết tút</string>
<string name="action_more">Thêm</string>
<string name="action_unfavourite">Bỏ lưu</string>
<string name="action_bookmark">Lưu</string>
<string name="action_favourite">Thích</string>
<string name="action_unreblog">Hủy chia sẻ</string>
<string name="action_reblog">Chia sẻ</string>
<string name="action_reply">Trả lời</string>
<string name="action_quick_reply">Trả lời nhanh</string>
<string name="report_comment_hint">Ghi chú\?</string>
<string name="report_username_format">Báo cáo @%s</string>
<string name="footer_empty">Trượt xuống để tải nội dung!</string>
<string name="message_empty">Trống.</string>
<string name="status_content_show_less">Thu gọn</string>
<string name="status_content_show_more">Xem thêm</string>
<string name="status_content_warning_show_less">Thu gọn</string>
<string name="status_content_warning_show_more">Mở rộng</string>
<string name="status_sensitive_media_directions">Hiển thị</string>
<string name="status_media_hidden_title">Nội dung bị ẩn</string>
<string name="status_sensitive_media_title">Nội dung nhạy cảm</string>
<string name="status_boosted_format">%s chia sẻ</string>
<string name="status_username_format">\@%s</string>
<string name="title_licenses">Giấy phép</string>
<string name="title_scheduled_toot">Tút đã lên lịch</string>
<string name="title_edit_profile">Chỉnh sửa trang cá nhân</string>
<string name="title_follow_requests">Yêu cầu theo dõi</string>
<string name="title_domain_mutes">Máy chủ đã ẩn</string>
<string name="title_blocks">Người dùng đã chặn</string>
<string name="title_mutes">Người dùng đã ẩn</string>
<string name="title_bookmarks">Đã lưu</string>
<string name="title_followers">Người theo dõi</string>
<string name="title_follows">Đang theo dõi</string>
<string name="title_statuses_pinned">Đã ghim</string>
<string name="title_statuses_with_replies">Trả lời</string>
<string name="title_statuses">Tút</string>
<string name="title_view_thread">Tút</string>
<string name="title_tab_preferences">Tabs</string>
<string name="title_direct_messages">Tin nhắn</string>
<string name="title_public_federated">Mạng liên kết</string>
<string name="title_public_local">Máy chủ</string>
<string name="title_notifications">Thông báo</string>
<string name="title_home">Bảng tin</string>
<string name="title_saved_toot">Nháp</string>
<string name="title_favourites">Lượt thích</string>
<string name="link_whats_an_instance">Máy chủ là gì\?</string>
<string name="pref_title_show_media_preview">Tải xem trước hình ảnh</string>
<string name="pref_title_show_replies">Hiện lượt trả lời</string>
<string name="pref_title_show_boosts">Hiện lượt chia sẻ</string>
<string name="pref_title_status_tabs">Tabs</string>
<string name="pref_title_status_filter">Lọc bảng tin</string>
<string name="pref_title_gradient_for_media">Che mờ nội dung nhạy cảm</string>
<string name="pref_title_animate_gif_avatars">Hiện ảnh đại diện GIF</string>
<string name="pref_title_bot_overlay">Hiện tút từ tài khoản Bot</string>
<string name="pref_title_language">Ngôn ngữ</string>
<string name="pref_title_hide_follow_button">Ẩn nút viết tút khi xem bảng tin</string>
<string name="pref_title_custom_tabs">Sử dụng tab Chrome</string>
<string name="pref_title_browser_settings">Trình duyệt</string>
<string name="app_theme_system">Sử dụng mặc định của thiết bị</string>
<string name="app_theme_auto">Tự động khi trời tối</string>
<string name="app_theme_black">Đen</string>
<string name="app_theme_light">Sáng</string>
<string name="app_them_dark">Tối</string>
<string name="pref_title_timeline_filters">Lọc</string>
<string name="pref_title_timelines">Bảng tin</string>
<string name="pref_title_app_theme">Chủ đề</string>
<string name="pref_title_appearance_settings">Giao diện</string>
<string name="pref_title_notification_filter_poll">cuộc bình chọn kết thúc</string>
<string name="pref_title_notification_filter_favourites">tút được thích</string>
<string name="pref_title_notification_filter_reblogs">tút được chia sẻ</string>
<string name="pref_title_notification_filter_follow_requests">yêu cầu theo dõi</string>
<string name="pref_title_notification_filter_follows">lượt theo dõi</string>
<string name="pref_title_notification_filter_mentions">nhắc tới</string>
<string name="pref_title_notification_filters">Thông báo tôi khi</string>
<string name="pref_title_notification_alert_light">Kèm đèn sáng</string>
<string name="pref_title_notification_alert_vibrate">Kèm rung</string>
<string name="pref_title_notification_alert_sound">Kèm theo tiếng bíp</string>
<string name="pref_title_notification_alerts">Báo động</string>
<string name="pref_title_notifications_enabled">Thông báo</string>
<string name="pref_title_edit_notification_settings">Thông báo</string>
<string name="visibility_direct">Nhắn tin: Chỉ người được nhắc tới mới thấy</string>
<string name="visibility_private">Chỉ người theo dõi: Chỉ ai theo dõi mới xem được</string>
<string name="visibility_unlisted">Đóng: Công khai nhưng không hiện trên bảng tin</string>
<string name="visibility_public">Công khai: Mọi người đều có thể thấy</string>
<string name="dialog_mute_warning">Ẩn @%s\?</string>
<string name="dialog_block_warning">Chặn @%s\?</string>
<string name="mute_domain_warning_dialog_ok">Ẩn toàn bộ máy chủ</string>
<string name="mute_domain_warning">Bạn có muốn chặn %s\? Bạn sẽ không thấy bất kỳ nội dung nào từ máy chủ này nữa. Người theo dõi bạn ở máy chủ này cũng sẽ bị xóa.</string>
<string name="notification_follow_request_name">Yêu Cầu Theo Dõi</string>
<string name="notification_follow_description">Thông báo về người theo dõi mới</string>
<string name="notification_follow_name">Người theo dõi mới</string>
<string name="notification_mention_descriptions">Thông báo về lược nhắc tới</string>
<string name="status_text_size_largest">To nhất</string>
<string name="status_text_size_large">To</string>
<string name="status_text_size_medium">Trung bình</string>
<string name="status_text_size_small">Nhỏ vừa</string>
<string name="status_text_size_smallest">Nhỏ</string>
<string name="pref_status_text_size">Kích thức phông chữ</string>
<string name="post_privacy_followers_only">Chỉ người theo dõi</string>
<string name="post_privacy_unlisted">Mở</string>
<string name="post_privacy_public">Công khai</string>
<string name="pref_main_nav_position_option_bottom">Dưới màn hình</string>
<string name="pref_main_nav_position_option_top">Trên màn hình</string>
<string name="pref_main_nav_position">Vị trí menu</string>
<string name="pref_failed_to_sync">Đồng bộ hoá thất bại</string>
<string name="pref_publishing">Đăng (đồng bộ với server)</string>
<string name="pref_default_media_sensitivity">Luôn đánh dấu nội dung là nhạy cảm</string>
<string name="pref_default_post_privacy">Trạng thái tút mặc định</string>
<string name="pref_title_http_proxy_server">HTTP proxy server</string>
<string name="pref_title_http_proxy_port">HTTP proxy port</string>
<string name="pref_title_http_proxy_enable">Bật HTTP proxy</string>
<string name="pref_title_http_proxy_settings">HTTP proxy</string>
<string name="pref_title_proxy_settings">Proxy</string>
<string name="notification_boost_description">Thông báo khi của bạn được chia sẻ</string>
<string name="notification_boost_name">Chia Sẻ</string>
<string name="notification_follow_request_description">Thông báo về lượt yêu cầu theo dõi</string>
<string name="about_bug_feature_request_site">Báo lỗi và đề xuất tính năng:
\n https://github.com/tuskyapp/Tusky/issues</string>
<string name="about_project_site">Trang chủ:
\n https://tusky.app</string>
<string name="about_tusky_license">Tusky là phần mềm mã nguồn mở, được phân phối với giấy phép GNU General Public License Version 3. Bạn có thể tham khảo thêm tại: https://www.gnu.org/licenses/gpl-3.0.en.html</string>
<string name="about_powered_by_tusky">Powered by Tusky</string>
<string name="about_tusky_version">Tusky %s</string>
<string name="description_account_locked">Tài khoản bị khóa</string>
<string name="notification_poll_description">Thông báo khi những cuộc bình chọn kết thúc</string>
<string name="notification_poll_name">Bình Chọn</string>
<string name="notification_favourite_description">Thông báo khi ai đó thích tút của bạn</string>
<string name="notification_favourite_name">Lượt thích</string>
<string name="filter_dialog_whole_word">Toàn bộ câu</string>
<string name="filter_edit_dialog_title">Sửa bộ lọc</string>
<string name="filter_addition_dialog_title">Thêm bộ lọc</string>
<string name="pref_title_thread_filter_keywords">Chủ đề thảo luận</string>
<string name="pref_title_public_filter_keywords">Bảng tin</string>
<string name="load_more_placeholder_text">xem thêm</string>
<string name="replying_to">Trả lời @%s</string>
<string name="title_media">Bộ sưu tập</string>
<string name="pref_title_alway_open_spoiler">Luôn hiện nội dung bị ẩn</string>
<string name="pref_title_alway_show_sensitive_media">Luôn hiện nội dung nhạy cảm</string>
<string name="follows_you">Đang theo dõi bạn</string>
<string name="abbreviated_seconds_ago">%d giây trước</string>
<string name="abbreviated_minutes_ago">%d phút trước</string>
<string name="abbreviated_hours_ago">%d giờ trước</string>
<string name="abbreviated_days_ago">%d ngày trước</string>
<string name="abbreviated_years_ago">%d năm trước</string>
<string name="abbreviated_in_seconds">in %ds</string>
<string name="abbreviated_in_minutes">in %d phút</string>
<string name="abbreviated_in_hours">in %d giờ</string>
<string name="abbreviated_in_days">in %d ngày</string>
<string name="abbreviated_in_years">in %d năm</string>
<string name="state_follow_requested">Yêu cầu theo dõi</string>
<string name="status_media_video"/>
<string name="status_media_images"/>
<string name="status_share_link"/>
<string name="status_share_content"/>
<string name="about_tusky_account"/>
<string name="pref_title_confirm_reblogs">Hiện xác nhận trước khi chia sẻ</string>
<string name="pref_title_show_cards_in_timelines">Hiện xem trước của link</string>
<string name="warning_scheduling_interval">Mastodon giới hạn tối thiểu 5 phút.</string>
<string name="no_scheduled_status">Bạn không có tút đã lên lịch.</string>
<string name="no_saved_status">Bạn không có bản nháp nào.</string>
<string name="edit_poll">Sửa</string>
<string name="poll_new_choice_hint">Lựa chọn %d</string>
<string name="poll_allow_multiple_choices">Cho phép chọn nhiều lựa chọn</string>
<string name="add_poll_choice">Thêm lựa chọn</string>
<string name="poll_duration_7_days">7 ngày</string>
<string name="poll_duration_3_days">3 ngày</string>
<string name="poll_duration_1_day">1 ngày</string>
<string name="poll_duration_6_hours">6 giờ</string>
<string name="poll_duration_1_hour">1 giờ</string>
<string name="poll_duration_30_min">30 phút</string>
<string name="poll_duration_5_min">5 phút</string>
<string name="create_poll_title">Bình chọn</string>
<string name="pref_title_enable_swipe_for_tabs">Sử dụng thao tác cử chỉ để chuyển qua lại giữa các tab</string>
<string name="pref_title_show_notifications_filter">Hiện bộ lọc thông báo</string>
<string name="failed_search">Không thể tìm thấy</string>
<string name="title_accounts">Tài khoản</string>
<string name="report_description_remote_instance">Tài khoản này thuộc máy chủ khác. Gửi báo cáo ẩn danh\?</string>
<string name="report_description_1">Báo cáo này sẽ được gửi tới kiểm duyệt viên máy chủ của bạn. Hãy cung cấp nội dung vì sao bạn báo cáo người này bên dưới:</string>
<string name="failed_fetch_statuses">Không tải được tút</string>
<string name="failed_report">Báo cáo thất bại</string>
<string name="report_remote_instance">Dời sang %s</string>
<string name="hint_additional_info">Thêm ghi chú</string>
<string name="report_sent_success">Đã gửi báo cáo @%s</string>
<plurals name="poll_timespan_seconds">
<item quantity="other">%d giây</item>
</plurals>
<plurals name="poll_timespan_minutes">
<item quantity="other">%d phút</item>
</plurals>
<plurals name="poll_timespan_hours">
<item quantity="other">%d giờ</item>
</plurals>
<plurals name="poll_timespan_days">
<item quantity="other">%d ngày</item>
</plurals>
<string name="poll_ended_created">Cuộc bình chọn bạn tạo đã kết thúc</string>
<string name="poll_ended_voted">Một cuộc bình chọn mà bạn tham gia đã kết thúc</string>
<string name="poll_vote">Bình chọn</string>
<string name="poll_info_closed">Kết thúc</string>
<string name="poll_info_time_absolute">kết thúc lúc %s</string>
<string name="poll_info_time_relative">%s nữa kết thúc</string>
<plurals name="poll_info_people">
<item quantity="other">%s người</item>
</plurals>
<plurals name="poll_info_votes">
<item quantity="other">%s phiếu</item>
</plurals>
<string name="poll_info_format"> <!-- 15 phiếu • 1 tiếng nữa kết thúc --> %1$s • %2$s</string>
<string name="compose_preview_image_description">Mô tả cho hình %s</string>
<string name="compose_shortcut_short_label">Viết</string>
<string name="compose_shortcut_long_label">Viết tút</string>
<string name="filter_apply">Áp dụng</string>
<string name="notifications_apply_filter">Lọc</string>
<string name="notifications_clear">Làm trống</string>
<string name="list">Danh sách</string>
<string name="select_list_title">Chọn danh sách</string>
<string name="hashtags">Hashtags</string>
<string name="edit_hashtag_hint">Hashtag mà không #</string>
<string name="add_hashtag_title">Thêm hashtag</string>
<string name="hint_list_name">Tên danh sách</string>
<string name="description_poll">Những lựa chọn: %1$s, %2$s, %3$s, %4$s; %5$s</string>
<string name="description_visiblity_direct">Tin nhắn</string>
<string name="description_visiblity_private">Người theo dõi</string>
<string name="description_visiblity_unlisted">Mở</string>
<string name="description_visiblity_public">Công khai</string>
<string name="description_status_bookmarked">Đã lưu</string>
<string name="description_status_favourited">Đã thích</string>
<string name="description_status_reblogged">Đã chia sẻ</string>
<string name="description_status_media_no_description_placeholder">Không có mô tả</string>
<string name="description_status_cw">Nội dung nhạy cảm: %s</string>
<string name="max_tab_number_reached">mở rộng tối đa %1$d tab</string>
<string name="conversation_more_recipients">%1$s, %2$s và %3$d người nữa</string>
<string name="conversation_2_recipients">%1$s và %2$s</string>
<string name="conversation_1_recipients">%1$s</string>
<string name="title_favourited_by">Thích bởi</string>
<string name="title_reblogged_by">Chia sẻ bởi</string>
<plurals name="reblogs">
<item quantity="other"><b>%s</b> Chia sẻ</item>
</plurals>
<plurals name="favs">
<item quantity="other"><b>%1$s</b> Thích</item>
</plurals>
<string name="pin_action">Ghim</string>
<string name="unpin_action">Gỡ ghim</string>
<string name="label_remote_account">Thông tin có thể hiển thị không đầy đủ. Nhấn để mở xem chi tiết trên trình duyệt.</string>
<string name="pref_title_absolute_time">Sử dụng thời gian trên thiết bị</string>
<string name="profile_metadata_content_label">Nội dung</string>
<string name="profile_metadata_label_label">Nhãn</string>
<string name="profile_metadata_add">thêm nội dung</string>
<string name="profile_metadata_label">Metadata</string>
<string name="license_cc_by_sa_4">CC-BY-SA 4.0</string>
<string name="license_cc_by_4">CC-BY 4.0</string>
<string name="license_apache_2">Licensed under the Apache License (sao chép bên dưới)</string>
<string name="license_description">Tusky có sử dụng mã nguồn từ những dự án mã nguồn mở sau:</string>
<string name="unreblog_private">Hủy chia sẻ</string>
<string name="reblog_private">Chia sẻ với người đăng</string>
<string name="account_moved_description">%1$s đã dời sang:</string>
<string name="profile_badge_bot_text">Tài khoản Bot</string>
<string name="download_failed">Tải về thất bại</string>
<string name="caption_notoemoji">Bộ Google</string>
<string name="caption_twemoji">Bộ Mastodon chính thức</string>
<string name="caption_blobmoji">Bộ Blob dành cho Android phiên bản từ 4.4 đến 7.1</string>
<string name="caption_systememoji">Sử dụng emoji mặc định của thiết bị</string>
<string name="restart">Khởi động lại</string>
<string name="later">Để sau</string>
<string name="restart_emoji">Bạn cần khởi động lại Tusky để áp dụng các thiết lập</string>
<string name="restart_required">Yêu cầu khởi động lại ứng dụng</string>
<string name="action_open_toot">Mở tút</string>
<string name="expand_collapse_all_statuses">Mở rộng/Thu gọn toàn bộ tút</string>
<string name="performing_lookup_title">Đang tìm kiếm…</string>
<string name="download_fonts">Bạn cần tải về bộ emoji này trước</string>
<string name="system_default">Mặc định của thiết bị</string>
<string name="emoji_style">Kiểu Emoji</string>
<string name="copy_to_clipboard_success">Đã chép vào clipboard</string>
<string name="action_compose_shortcut">Viết</string>
<string name="compose_save_draft">Lưu nháp\?</string>
<string name="lock_account_label_description">Tự bạn sẽ phê duyệt người theo dõi</string>
<string name="lock_account_label">Tài khoản riêng tư</string>
<string name="action_remove">Hủy bỏ</string>
<string name="action_set_caption">Mô tả</string>
<string name="hint_describe_for_visually_impaired">Mô tả dành cho người khiếm thị
\n(giới hạn %d chữ)</string>
<string name="compose_active_account_description">Đăng bằng tài khoản %1$s</string>
<string name="action_add_to_list">Thêm tài khoản vào danh sách</string>
<string name="action_remove_from_list">Xóa tài khoản khỏi danh sách</string>
<string name="hint_search_people_list">Tìm người dùng</string>
<string name="action_edit_list">Sửa danh sách</string>
<string name="action_delete_list">Xóa danh sách</string>
<string name="action_rename_list">Đổi tên danh sách</string>
<string name="action_create_list">Tạo danh sách</string>
<string name="title_list_timeline">Danh sách bảng tin</string>
<string name="add_account_description">Thêm tài khoản Mastodon</string>
<string name="add_account_name">Thêm tài khoản</string>
<string name="filter_add_description">Thêm mô tả</string>
<string name="filter_dialog_whole_word_description">Khi từ khóa là chữ và số, nó sẽ chỉ được áp dụng nếu nó phù hợp với toàn bộ từ</string>
</resources>

View File

@ -141,7 +141,7 @@
<string name="label_quick_reply">回复…</string>
<string name="label_avatar">头像</string>
<string name="label_header">标题</string>
<string name="link_whats_an_instance">需要帮助</string>
<string name="link_whats_an_instance">什么是实例</string>
<string name="login_connection">正在连接…</string>
<string name="dialog_whats_an_instance">请输入你帐号所在的 Mastodon 站点的域名,比如 pawoo.netacg.mnwxw.moe<a href="https://instances.social">等等</a>
\n\n还没有 Mastodon 帐号?你也可以输入想注册的 Mastodon 站点的域名,然后在该服务器创建新的帐号并授权 Yuito 登入。

View File

@ -133,7 +133,7 @@
<string name="status_sent_long">成功发布回复</string>
<string name="hint_domain">域名</string>
<string name="hint_compose">有什么新鲜事?</string>
<string name="hint_content_warning">设置内容提醒信息</string>
<string name="hint_content_warning">内容提醒</string>
<string name="hint_display_name">昵称</string>
<string name="hint_note">简介</string>
<string name="hint_search">搜索…</string>
@ -370,7 +370,6 @@
私信
</string>
<string name="hint_list_name">列表名</string>
<string name="edit_hashtag_hint">话题名(不含前面的 # 号)</string>
<string name="notifications_clear">清空</string>
<string name="notifications_apply_filter">分类</string>

View File

@ -30,7 +30,7 @@
<string name="title_statuses_with_replies">嘟文和回覆</string>
<string name="title_statuses_pinned">已置頂</string>
<string name="title_follows">正在關注</string>
<string name="title_followers">關注者</string>
<string name="title_followers">關注者</string>
<string name="title_favourites">我的收藏</string>
<string name="title_mutes">被靜音的使用者</string>
<string name="title_blocks">被封鎖的使用者</string>

View File

@ -63,6 +63,7 @@
<item>বাংলা</item>
<item>فارسی</item>
<item>தமிழ்</item>
<item>ภาษาไทย</item>
<item>한국어</item>
<item>中文(台灣)</item>
<item>中文(新加坡)</item>
@ -101,6 +102,7 @@
<item>bn-in</item>
<item>fa</item>
<item>ta</item>
<item>th</item>
<item>ko</item>
<item>zh-TW</item>
<item>zh-SG</item>

View File

@ -113,6 +113,9 @@
<string name="action_share">Share</string>
<string name="action_mute">Mute</string>
<string name="action_unmute">Unmute</string>
<string name="action_unmute_desc">Unmute %s</string>
<string name="action_unmute_notifications_desc">Unmute notifications from %s</string>
<string name="action_mute_notifications_desc">Mute notifications from %s</string>
<string name="action_mute_domain">Mute %s</string>
<string name="action_unmute_domain">Unmute %s</string>
<string name="action_mute_conversation">Mute conversation</string>
@ -213,6 +216,7 @@
<string name="mute_domain_warning_dialog_ok">Hide entire domain</string>
<string name="dialog_block_warning">Block @%s?</string>
<string name="dialog_mute_warning">Mute @%s?</string>
<string name="dialog_mute_hide_notifications">Hide notifications</string>
<string name="visibility_public">Public: Post to public timelines</string>
<string name="visibility_unlisted">Unlisted: Do not show in public timelines</string>

View File

@ -77,6 +77,8 @@
<item name="minTouchTargetSize">32dp</item> <!-- this affects RadioButton size -->
<item name="elevationOverlayEnabled">false</item> <!-- disable the automatic tinting of surfaces with elevation in dark mode -->
<item name="swipeRefreshLayoutProgressSpinnerBackgroundColor">?attr/colorSurface</item>
<item name="colorInfo">@color/colorInfo</item>
</style>