diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/requests/announcements/AddAnnouncementReaction.java b/mastodon/src/main/java/org/joinmastodon/android/api/requests/announcements/AddAnnouncementReaction.java new file mode 100644 index 000000000..f92167cd2 --- /dev/null +++ b/mastodon/src/main/java/org/joinmastodon/android/api/requests/announcements/AddAnnouncementReaction.java @@ -0,0 +1,11 @@ +package org.joinmastodon.android.api.requests.announcements; + +import org.joinmastodon.android.api.MastodonAPIRequest; +import org.joinmastodon.android.model.Status; + +public class AddAnnouncementReaction extends MastodonAPIRequest { + public AddAnnouncementReaction(String id, String emoji) { + super(HttpMethod.PUT, "/announcements/" + id + "/reactions/" + emoji, Object.class); + setRequestBody(new Object()); + } +} diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/requests/announcements/DeleteAnnouncementReaction.java b/mastodon/src/main/java/org/joinmastodon/android/api/requests/announcements/DeleteAnnouncementReaction.java new file mode 100644 index 000000000..e1a667f36 --- /dev/null +++ b/mastodon/src/main/java/org/joinmastodon/android/api/requests/announcements/DeleteAnnouncementReaction.java @@ -0,0 +1,9 @@ +package org.joinmastodon.android.api.requests.announcements; + +import org.joinmastodon.android.api.MastodonAPIRequest; + +public class DeleteAnnouncementReaction extends MastodonAPIRequest { + public DeleteAnnouncementReaction(String id, String emoji) { + super(HttpMethod.DELETE, "/announcements/" + id + "/reactions/" + emoji, Object.class); + } +} diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/AnnouncementsFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/AnnouncementsFragment.java index 430c1205b..ad9f48781 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/AnnouncementsFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/AnnouncementsFragment.java @@ -26,6 +26,8 @@ import org.joinmastodon.android.model.HeaderPaginationList; import org.joinmastodon.android.model.Instance; import org.joinmastodon.android.model.ScheduledStatus; import org.joinmastodon.android.model.Status; +import org.joinmastodon.android.ui.displayitems.DummyStatusDisplayItem; +import org.joinmastodon.android.ui.displayitems.EmojiReactionsStatusDisplayItem; import org.joinmastodon.android.ui.displayitems.HeaderStatusDisplayItem; import org.joinmastodon.android.ui.displayitems.StatusDisplayItem; import org.joinmastodon.android.ui.displayitems.TextStatusDisplayItem; @@ -69,10 +71,12 @@ public class AnnouncementsFragment extends BaseStatusListFragment Status fakeStatus = a.toStatus(); TextStatusDisplayItem textItem = new TextStatusDisplayItem(a.id, HtmlParser.parse(a.content, a.emojis, a.mentions, a.tags, accountID), this, fakeStatus, true); textItem.textSelectable = true; - return List.of( - HeaderStatusDisplayItem.fromAnnouncement(a, fakeStatus, instanceUser, this, accountID, this::onMarkAsRead), - textItem - ); + + List items=new ArrayList<>(); + items.add(HeaderStatusDisplayItem.fromAnnouncement(a, fakeStatus, instanceUser, this, accountID, this::onMarkAsRead)); + items.add(textItem); + if(!isInstanceAkkoma()) items.add(new EmojiReactionsStatusDisplayItem(a.id, this, fakeStatus, accountID, false, true)); + return items; } public void onMarkAsRead(String id) { diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java index 366cf5155..43550d929 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java @@ -1186,6 +1186,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList ); name.setVisibility(View.GONE); + rolesView.setVisibility(View.GONE); username.setVisibility(View.GONE); bio.setVisibility(View.GONE); countersLayout.setVisibility(View.GONE); @@ -1234,6 +1235,7 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList nameEditWrap.setVisibility(View.GONE); bioEditWrap.setVisibility(View.GONE); name.setVisibility(View.VISIBLE); + rolesView.setVisibility(View.VISIBLE); username.setVisibility(View.VISIBLE); bio.setVisibility(View.VISIBLE); countersLayout.setVisibility(View.VISIBLE); diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/StatusListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/StatusListFragment.java index 8213cec8d..fcb3890c5 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/StatusListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/StatusListFragment.java @@ -237,7 +237,7 @@ public abstract class StatusListFragment extends BaseStatusListFragment footer.rebind(); }else if(holder instanceof ExtendedFooterStatusDisplayItem.Holder footer && footer.getItem().status==s.getContentStatus()){ footer.rebind(); - }else if(holder instanceof EmojiReactionsStatusDisplayItem.Holder reactions && ev.viewHolder!=holder){ + }else if(holder instanceof EmojiReactionsStatusDisplayItem.Holder reactions && reactions.getItem().status==s.getContentStatus() && ev.viewHolder!=holder){ reactions.rebind(); } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ThreadFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ThreadFragment.java index fc1edcca1..31a981a7a 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ThreadFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ThreadFragment.java @@ -417,6 +417,10 @@ public class ThreadFragment extends StatusListFragment implements ProvidesAssist adapter.notifyDataSetChanged(); } + public Status getMainStatus(){ + return mainStatus; + } + @Override public boolean isItemEnabled(String id){ return !id.equals(mainStatus.id) || !mainStatus.filterRevealed; diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/report/ReportAddPostsChoiceFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/report/ReportAddPostsChoiceFragment.java index 548d1ed1c..dad96fa4f 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/report/ReportAddPostsChoiceFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/report/ReportAddPostsChoiceFragment.java @@ -102,7 +102,6 @@ public class ReportAddPostsChoiceFragment extends StatusListFragment{ selectedIDs.remove(id); else selectedIDs.add(id); - btn.setEnabled(!selectedIDs.isEmpty()); CheckableHeaderStatusDisplayItem.Holder holder=findHolderOfType(id, CheckableHeaderStatusDisplayItem.Holder.class); if(holder!=null) holder.rebind(); @@ -112,7 +111,6 @@ public class ReportAddPostsChoiceFragment extends StatusListFragment{ public void onViewCreated(View view, Bundle savedInstanceState){ super.onViewCreated(view, savedInstanceState); btn=view.findViewById(R.id.btn_next); - btn.setEnabled(!selectedIDs.isEmpty()); btn.setOnClickListener(this::onButtonClick); buttonBar=view.findViewById(R.id.button_bar); diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/Announcement.java b/mastodon/src/main/java/org/joinmastodon/android/model/Announcement.java index 1d54b5215..76d37fe49 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/Announcement.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/Announcement.java @@ -1,9 +1,11 @@ package org.joinmastodon.android.model; +import org.joinmastodon.android.api.ObjectValidationException; import org.joinmastodon.android.api.RequiredField; import org.parceler.Parcel; import java.time.Instant; +import java.util.ArrayList; import java.util.List; @Parcel @@ -20,6 +22,7 @@ public class Announcement extends BaseModel implements DisplayItemsParent { public Instant updatedAt; public boolean read; public List emojis; + public List reactions; public List mentions; public List tags; @@ -41,10 +44,17 @@ public class Announcement extends BaseModel implements DisplayItemsParent { '}'; } - public Status toStatus() { - Status s = Status.ofFake(id, content, publishedAt); - s.createdAt = startsAt != null ? startsAt : publishedAt; - if (updatedAt != null) s.editedAt = updatedAt; + @Override + public void postprocess() throws ObjectValidationException{ + super.postprocess(); + if(reactions==null) reactions=new ArrayList<>(); + } + + public Status toStatus() { + Status s=Status.ofFake(id, content, publishedAt); + s.createdAt=startsAt != null ? startsAt : publishedAt; + s.reactions=reactions; + if(updatedAt != null) s.editedAt=updatedAt; return s; } diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/EmojiReaction.java b/mastodon/src/main/java/org/joinmastodon/android/model/EmojiReaction.java index ed73d31a8..a0fa142a9 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/EmojiReaction.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/EmojiReaction.java @@ -2,8 +2,14 @@ package org.joinmastodon.android.model; import org.parceler.Parcel; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import me.grishka.appkit.imageloader.requests.ImageLoaderRequest; +import me.grishka.appkit.imageloader.requests.UrlImageLoaderRequest; +import me.grishka.appkit.utils.V; + @Parcel public class EmojiReaction { public List accounts; @@ -13,4 +19,38 @@ public class EmojiReaction { public String name; public String url; public String staticUrl; + + public transient ImageLoaderRequest request; + + public static EmojiReaction of(Emoji info, Account me){ + EmojiReaction reaction=new EmojiReaction(); + reaction.me=true; + reaction.count=1; + reaction.name=info.shortcode; + reaction.url=info.url; + reaction.staticUrl=info.staticUrl; + reaction.accounts=new ArrayList<>(Collections.singleton(me)); + reaction.accountIds=new ArrayList<>(Collections.singleton(me.id)); + reaction.request=new UrlImageLoaderRequest(info.url, V.sp(24), V.sp(24)); + return reaction; + } + + public static EmojiReaction of(String emoji, Account me){ + EmojiReaction reaction=new EmojiReaction(); + reaction.me=true; + reaction.count=1; + reaction.name=emoji; + reaction.accounts=new ArrayList<>(Collections.singleton(me)); + reaction.accountIds=new ArrayList<>(Collections.singleton(me.id)); + return reaction; + } + + public void add(Account self){ + if(accounts==null) accounts=new ArrayList<>(); + if(accountIds==null) accountIds=new ArrayList<>(); + count++; + me=true; + accounts.add(self); + accountIds.add(self.id); + } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/Status.java b/mastodon/src/main/java/org/joinmastodon/android/model/Status.java index 745b5a62d..c10d82a26 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/Status.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/Status.java @@ -106,7 +106,7 @@ public class Status extends BaseModel implements DisplayItemsParent, Searchable{ t.postprocess(); for(Emoji e:emojis) e.postprocess(); - if (mediaAttachments == null) mediaAttachments = List.of(); + if (mediaAttachments == null) mediaAttachments=List.of(); for(Attachment a:mediaAttachments) a.postprocess(); account.postprocess(); @@ -181,8 +181,7 @@ public class Status extends BaseModel implements DisplayItemsParent, Searchable{ reblogged=ev.reblogged; bookmarked=ev.bookmarked; pinned=ev.pinned; - reactions.clear(); - reactions.addAll(ev.reactions); + reactions=ev.reactions; } public Status getContentStatus(){ @@ -208,17 +207,18 @@ public class Status extends BaseModel implements DisplayItemsParent, Searchable{ } public static Status ofFake(String id, String text, Instant createdAt) { - Status s = new Status(); - s.id = id; - s.mediaAttachments = List.of(); - s.createdAt = createdAt; - s.content = s.text = text; - s.spoilerText = ""; - s.visibility = StatusPrivacy.PUBLIC; - s.mentions = List.of(); - s.tags = List.of(); - s.emojis = List.of(); - s.filtered = List.of(); + Status s=new Status(); + s.id=id; + s.mediaAttachments=List.of(); + s.createdAt=createdAt; + s.content=s.text=text; + s.spoilerText=""; + s.visibility=StatusPrivacy.PUBLIC; + s.reactions=List.of(); + s.mentions=List.of(); + s.tags =List.of(); + s.emojis=List.of(); + s.filtered=List.of(); return s; } @@ -230,21 +230,21 @@ public class Status extends BaseModel implements DisplayItemsParent, Searchable{ public static class StatusDeserializer implements JsonDeserializer { @Override public Status deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { - JsonObject obj = json.getAsJsonObject(); + JsonObject obj=json.getAsJsonObject(); - Status quote = null; + Status quote=null; if (obj.has("quote") && obj.get("quote").isJsonObject()) - quote = gson.fromJson(obj.get("quote"), Status.class); + quote=gson.fromJson(obj.get("quote"), Status.class); obj.remove("quote"); - Status reblog = null; + Status reblog=null; if (obj.has("reblog")) - reblog = gson.fromJson(obj.get("reblog"), Status.class); + reblog=gson.fromJson(obj.get("reblog"), Status.class); obj.remove("reblog"); - Status status = gsonWithoutDeserializer.fromJson(json, Status.class); - status.quote = quote; - status.reblog = reblog; + Status status=gsonWithoutDeserializer.fromJson(json, Status.class); + status.quote=quote; + status.reblog=reblog; return status; } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/DummyStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/DummyStatusDisplayItem.java index 19f7f819b..6d9ea36b6 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/DummyStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/DummyStatusDisplayItem.java @@ -4,16 +4,16 @@ import android.content.Context; import android.view.ViewGroup; import android.widget.Space; +import androidx.recyclerview.widget.RecyclerView; + import org.joinmastodon.android.fragments.BaseStatusListFragment; import me.grishka.appkit.utils.V; public class DummyStatusDisplayItem extends StatusDisplayItem { - private final boolean addMediaGridMargin; - public DummyStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, boolean addMediaGridMargin) { + public DummyStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment) { super(parentID, parentFragment); - this.addMediaGridMargin = addMediaGridMargin; } @Override @@ -22,19 +22,21 @@ public class DummyStatusDisplayItem extends StatusDisplayItem { } public static class Holder extends StatusDisplayItem.Holder { + private final RecyclerView.LayoutParams params; + public Holder(Context context) { super(new Space(context)); - } + params=new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0); - @Override - public void onBind(DummyStatusDisplayItem item) { // BetterItemAnimator appears not to handle InsetStatusItemDecoration's getItemOffsets // correctly, causing removed inset views to jump while animating. i don't quite // understand it, but this workaround appears to work. // see InsetStatusItemDecoration#getItemOffsets - ViewGroup.MarginLayoutParams params = new ViewGroup.MarginLayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0); - params.setMargins(0, item.addMediaGridMargin ? V.dp(0) : 0, 0, V.dp(16)); + params.setMargins(0, 0, 0, V.dp(16)); itemView.setLayoutParams(params); } + + @Override + public void onBind(DummyStatusDisplayItem item) {} } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/EmojiReactionsStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/EmojiReactionsStatusDisplayItem.java index 3690e3bb7..9f5830c7b 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/EmojiReactionsStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/EmojiReactionsStatusDisplayItem.java @@ -1,15 +1,19 @@ package org.joinmastodon.android.ui.displayitems; import android.app.Activity; +import android.content.Context; import android.graphics.Paint; import android.graphics.drawable.Animatable; import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Bundle; -import android.view.MotionEvent; +import android.util.DisplayMetrics; +import android.util.Pair; import android.view.View; import android.view.ViewGroup; -import android.widget.Button; +import android.widget.ImageButton; +import android.widget.LinearLayout; +import android.widget.ProgressBar; import androidx.annotation.NonNull; import androidx.recyclerview.widget.LinearLayoutManager; @@ -18,21 +22,26 @@ import androidx.recyclerview.widget.RecyclerView; import org.joinmastodon.android.E; import org.joinmastodon.android.R; import org.joinmastodon.android.api.MastodonAPIRequest; +import org.joinmastodon.android.api.requests.announcements.AddAnnouncementReaction; +import org.joinmastodon.android.api.requests.announcements.DeleteAnnouncementReaction; import org.joinmastodon.android.api.requests.statuses.AddStatusReaction; import org.joinmastodon.android.api.requests.statuses.DeleteStatusReaction; import org.joinmastodon.android.api.requests.statuses.PleromaAddStatusReaction; import org.joinmastodon.android.api.requests.statuses.PleromaDeleteStatusReaction; +import org.joinmastodon.android.api.session.AccountSession; +import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.events.StatusCountersUpdatedEvent; import org.joinmastodon.android.fragments.BaseStatusListFragment; import org.joinmastodon.android.fragments.account_list.StatusEmojiReactionsListFragment; +import org.joinmastodon.android.model.Account; +import org.joinmastodon.android.model.Announcement; +import org.joinmastodon.android.model.Emoji; import org.joinmastodon.android.model.EmojiReaction; import org.joinmastodon.android.model.Status; +import org.joinmastodon.android.ui.CustomEmojiPopupKeyboard; import org.joinmastodon.android.ui.utils.TextDrawable; import org.joinmastodon.android.ui.utils.UiUtils; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; +import org.joinmastodon.android.ui.views.ProgressBarButton; import me.grishka.appkit.Nav; import me.grishka.appkit.api.Callback; @@ -50,23 +59,21 @@ import me.grishka.appkit.views.UsableRecyclerView; public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem { public final Status status; private final Drawable placeholder; - private List requests; + private final boolean hideAdd, forAnnouncement; + private final String accountID; + private boolean hidden; - public EmojiReactionsStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Status status) { + public EmojiReactionsStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Status status, String accountID, boolean hideAdd, boolean forAnnouncement) { super(parentID, parentFragment); this.status=status; + this.hideAdd=hideAdd; + this.forAnnouncement=forAnnouncement; + this.accountID=accountID; placeholder=parentFragment.getContext().getDrawable(R.drawable.image_placeholder).mutate(); placeholder.setBounds(0, 0, V.sp(24), V.sp(24)); + updateHidden(); } - private void refresh(Holder holder) { - requests=status.reactions.stream() - .map(e->e.url!=null ? new UrlImageLoaderRequest(e.url, V.sp(24), V.sp(24)) : null) - .collect(Collectors.toList()); - holder.list.setPadding(holder.list.getPaddingLeft(), - status.reactions.isEmpty() ? 0 : V.dp(8), holder.list.getPaddingRight(), 0); - } - @Override public int getImageCount(){ return (int) status.reactions.stream().filter(r->r.url != null).count(); @@ -74,7 +81,7 @@ public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem { @Override public ImageLoaderRequest getImageRequest(int index){ - return requests.get(index); + return status.reactions.get(index).request; } @Override @@ -82,31 +89,183 @@ public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem { return Type.EMOJI_REACTIONS; } - public static class Holder extends StatusDisplayItem.Holder implements ImageLoaderViewHolder { - private final UsableRecyclerView list; + public boolean isHidden(){ + return hidden; + } - public Holder(Activity activity, ViewGroup parent) { - super(new UsableRecyclerView(activity) { + private void updateHidden(){ + hidden=status.reactions.isEmpty() && hideAdd; + } + + // borrowed from ProfileFragment + private void setActionProgressVisible(Holder.EmojiReactionViewHolder vh, boolean visible){ + if(vh==null) return; + vh.progress.setVisibility(visible ? View.VISIBLE : View.GONE); + if(visible) + vh.progress.setIndeterminateTintList(vh.btn.getTextColors()); + vh.btn.setClickable(!visible); + } + + private MastodonAPIRequest createRequest(String name, int count, boolean delete, Holder.EmojiReactionViewHolder vh, Runnable cb, Runnable err){ + setActionProgressVisible(vh, true); + boolean ak=parentFragment.isInstanceAkkoma(); + boolean keepSpinning=delete && count == 1; + if(forAnnouncement){ + MastodonAPIRequest req=delete + ? new DeleteAnnouncementReaction(status.id, name) + : new AddAnnouncementReaction(status.id, name); + return req.setCallback(new Callback<>(){ @Override - public boolean onTouchEvent(MotionEvent e){ - super.onTouchEvent(e); - // to pass through touch events (i.e. clicking the status) to the parent view - return false; + public void onSuccess(Object result){ + if(!keepSpinning) setActionProgressVisible(vh, false); + cb.run(); + } + @Override + public void onError(ErrorResponse error){ + setActionProgressVisible(vh, false); + error.showToast(parentFragment.getContext()); + if(err!=null) err.run(); } }); - list=(UsableRecyclerView) itemView; - list.setPadding(V.dp(12), 0, V.dp(12), 0); - list.setClipToPadding(false); + }else{ + MastodonAPIRequest req=delete + ? (ak ? new PleromaDeleteStatusReaction(status.id, name) : new DeleteStatusReaction(status.id, name)) + : (ak ? new PleromaAddStatusReaction(status.id, name) : new AddStatusReaction(status.id, name)); + return req.setCallback(new Callback<>(){ + @Override + public void onSuccess(Status result){ + if(!keepSpinning) setActionProgressVisible(vh, false); + cb.run(); + } + @Override + public void onError(ErrorResponse error){ + setActionProgressVisible(vh, false); + error.showToast(parentFragment.getContext()); + if(err!=null) err.run(); + } + }); + } + } + + public static class Holder extends StatusDisplayItem.Holder implements ImageLoaderViewHolder, CustomEmojiPopupKeyboard.Listener { + private final UsableRecyclerView list; + private final LinearLayout root, line; + private CustomEmojiPopupKeyboard emojiKeyboard; + private final View space; + private final ImageButton addButton; + private final ProgressBar progress; + private final EmojiReactionsAdapter adapter; + private final ListImageLoaderWrapper imgLoader; + + public Holder(Activity activity, ViewGroup parent) { + super(activity, R.layout.display_item_emoji_reactions, parent); + root=(LinearLayout) itemView; + line=findViewById(R.id.line); + list=findViewById(R.id.list); + imgLoader=new ListImageLoaderWrapper(activity, list, new RecyclerViewDelegate(list), null); + list.setAdapter(adapter=new EmojiReactionsAdapter(this, imgLoader)); + addButton=findViewById(R.id.add_btn); + progress=findViewById(R.id.progress); + addButton.setOnClickListener(this::onReactClick); + space=findViewById(R.id.space); + list.setLayoutManager(new LinearLayoutManager(activity, LinearLayoutManager.HORIZONTAL, false)); } @Override public void onBind(EmojiReactionsStatusDisplayItem item) { - ListImageLoaderWrapper imgLoader=new ListImageLoaderWrapper(item.parentFragment.getContext(), list, new RecyclerViewDelegate(list), null); - list.setAdapter(new EmojiReactionsAdapter(this, imgLoader)); - list.setLayoutManager(new LinearLayoutManager(item.parentFragment.getContext(), LinearLayoutManager.HORIZONTAL, false)); - item.refresh(this); + if(emojiKeyboard != null) root.removeView(emojiKeyboard.getView()); + AccountSession session=item.parentFragment.getSession(); + item.status.reactions.forEach(r-> + r.request=r.url != null ? new UrlImageLoaderRequest(r.url, V.sp(24), V.sp(24)) : null); + emojiKeyboard=new CustomEmojiPopupKeyboard( + (Activity) item.parentFragment.getContext(), + AccountSessionManager.getInstance().getCustomEmojis(session.domain), + session.domain, true); + emojiKeyboard.setListener(this); + space.setVisibility(View.GONE); + root.addView(emojiKeyboard.getView()); + item.updateHidden(); + root.setVisibility(item.hidden ? View.GONE : View.VISIBLE); + line.setVisibility(item.hidden ? View.GONE : View.VISIBLE); + line.setPadding( + list.getPaddingLeft(), + item.hidden ? 0 : V.dp(8), + list.getPaddingRight(), + item.forAnnouncement ? V.dp(8) : 0 + ); + imgLoader.updateImages(); + adapter.notifyDataSetChanged(); } + private void hideEmojiKeyboard(){ + space.setVisibility(View.GONE); + addButton.setSelected(false); + if(emojiKeyboard.isVisible()) emojiKeyboard.toggleKeyboardPopup(null); + } + + @Override + public void onEmojiSelected(Emoji emoji) { + addEmojiReaction(emoji.shortcode, emoji); + hideEmojiKeyboard(); + } + + @Override + public void onEmojiSelected(String emoji){ + addEmojiReaction(emoji, null); + hideEmojiKeyboard(); + } + + private void addEmojiReaction(String emoji, Emoji info) { + if(item.status.reactions.stream().filter(r->r.name.equals(emoji) && r.me).findAny().isPresent()) return; + progress.setVisibility(View.VISIBLE); + addButton.setClickable(false); + addButton.setAlpha(0.55f); + + Runnable resetBtn=()->{ + progress.setVisibility(View.GONE); + addButton.setClickable(true); + addButton.setAlpha(1f); + }; + Account me=AccountSessionManager.get(item.accountID).self; + EmojiReaction existing=null; + for(int i=0; i{ + resetBtn.run(); + if(finalExisting==null){ + item.status.reactions.add(0, info!=null ? EmojiReaction.of(info, me) : EmojiReaction.of(emoji, me)); + adapter.notifyItemRangeInserted(0, 1); + }else{ + finalExisting.add(me); + adapter.notifyItemChanged(item.status.reactions.indexOf(finalExisting)); + } + E.post(new StatusCountersUpdatedEvent(item.status, adapter.parentHolder)); + }, resetBtn).exec(item.accountID); + } + + @Override + public void onBackspace() {} + + private void onReactClick(View v){ + emojiKeyboard.toggleKeyboardPopup(null); + v.setSelected(emojiKeyboard.isVisible()); + space.setVisibility(emojiKeyboard.isVisible() ? View.VISIBLE : View.GONE); + DisplayMetrics displayMetrics = new DisplayMetrics(); + int[] locationOnScreen = new int[2]; + ((Activity) v.getContext()).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); + v.getLocationOnScreen(locationOnScreen); + double fromScreenTop = (double) locationOnScreen[1] / displayMetrics.heightPixels; + if (fromScreenTop > 0.75) { + item.parentFragment.scrollBy(0, (int) (displayMetrics.heightPixels * 0.3)); + } + } + @Override public void setImage(int index, Drawable image){ View child=list.getChildAt(index); @@ -116,11 +275,11 @@ public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem { @Override public void clearImage(int index){ + if(item.status.reactions.get(index).url==null) return; setImage(index, item.placeholder); } private class EmojiReactionsAdapter extends UsableRecyclerView.Adapter implements ImageLoaderRecyclerAdapter{ - RecyclerView list; ListImageLoaderWrapper imgLoader; Holder parentHolder; @@ -130,28 +289,15 @@ public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem { this.imgLoader=imgLoader; } - @Override - public void onAttachedToRecyclerView(@NonNull RecyclerView list){ - super.onAttachedToRecyclerView(list); - this.list=list; - } - @NonNull @Override public EmojiReactionViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType){ - Button btn=new Button(parent.getContext(), null, 0, R.style.Widget_Mastodon_M3_Button_Outlined_Icon); - ViewGroup.MarginLayoutParams params=new ViewGroup.MarginLayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); - params.setMarginEnd(V.dp(8)); - btn.setLayoutParams(params); - btn.setCompoundDrawableTintList(null); - btn.setBackgroundResource(R.drawable.bg_button_m3_tonal); - btn.setCompoundDrawables(item.placeholder, null, null, null); - return new EmojiReactionViewHolder(btn, item); + return new EmojiReactionViewHolder(parent.getContext(), list); } @Override public void onBindViewHolder(EmojiReactionViewHolder holder, int position){ - holder.bind(item.status.reactions.get(position)); + holder.bind(Pair.create(item, item.status.reactions.get(position))); super.onBindViewHolder(holder, position); } @@ -167,18 +313,19 @@ public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem { @Override public ImageLoaderRequest getImageRequest(int position, int image){ - return item.requests.get(position); + return item.status.reactions.get(position).request; } } - private static class EmojiReactionViewHolder extends BindableViewHolder implements ImageLoaderViewHolder{ - private final Button btn; - private final EmojiReactionsStatusDisplayItem parent; + private static class EmojiReactionViewHolder extends BindableViewHolder> implements ImageLoaderViewHolder{ + private final ProgressBarButton btn; + private final ProgressBar progress; - public EmojiReactionViewHolder(@NonNull View itemView, EmojiReactionsStatusDisplayItem parent){ - super(itemView); - btn=(Button) itemView; - this.parent=parent; + public EmojiReactionViewHolder(Context context, RecyclerView list){ + super(context, R.layout.item_emoji_reaction, list); + btn=findViewById(R.id.btn); + progress=findViewById(R.id.progress); + itemView.setClickable(true); } @Override @@ -190,66 +337,54 @@ public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem { @Override public void clearImage(int index){ - setImage(index, parent.placeholder); + setImage(index, item.first.placeholder); } @Override - public void onBind(EmojiReaction item){ - btn.setText(UiUtils.abbreviateNumber(item.count)); - btn.setContentDescription(item.name); - if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)btn.setTooltipText(item.name); - if(item.url==null){ + public void onBind(Pair item){ + item.first.setActionProgressVisible(this, false); + EmojiReactionsStatusDisplayItem parent=item.first; + EmojiReaction reaction=item.second; + btn.setText(UiUtils.abbreviateNumber(reaction.count)); + btn.setContentDescription(reaction.name); + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) btn.setTooltipText(reaction.name); + if(reaction.url==null){ Paint p=new Paint(); p.setTextSize(V.sp(18)); - TextDrawable drawable=new TextDrawable(p, item.name); + TextDrawable drawable=new TextDrawable(p, reaction.name); btn.setCompoundDrawablesRelative(drawable, null, null, null); }else{ - btn.setCompoundDrawablesRelative(parent.placeholder, null, null, null); + btn.setCompoundDrawablesRelative(item.first.placeholder, null, null, null); } - btn.setSelected(item.me); - btn.setOnClickListener(e -> { - boolean deleting=item.me; - boolean ak=parent.parentFragment.isInstanceAkkoma(); - MastodonAPIRequest req = deleting - ? (ak ? new PleromaDeleteStatusReaction(parent.status.id, item.name) : new DeleteStatusReaction(parent.status.id, item.name)) - : (ak ? new PleromaAddStatusReaction(parent.status.id, item.name) : new AddStatusReaction(parent.status.id, item.name)); - req.setCallback(new Callback<>() { - @Override - public void onSuccess(Status result) { - List oldList=new ArrayList<>(parent.status.reactions); - parent.status.reactions.clear(); - parent.status.reactions.addAll(result.reactions); - EmojiReactionsAdapter adapter = (EmojiReactionsAdapter) getBindingAdapter(); + btn.setSelected(reaction.me); + btn.setOnClickListener(e->{ + boolean deleting=reaction.me; + parent.createRequest(reaction.name, reaction.count, deleting, this, ()->{ + EmojiReactionsAdapter adapter = (EmojiReactionsAdapter) getBindingAdapter(); + for(int i=0; i e1.name.equals(e2.name)); - - // update the existing reactions' counts - for(int i=0; ir.name.equals(newReaction.name)).findAny().ifPresent(r->{ - if(newReaction.count!=r.count) adapter.notifyItemChanged(index); - }); - } - parent.refresh(adapter.parentHolder); - adapter.imgLoader.updateImages(); - E.post(new StatusCountersUpdatedEvent(result, adapter.parentHolder)); - } - - @Override - public void onError(ErrorResponse error) { - error.showToast(itemView.getContext()); - } - }) - .exec(parent.parentFragment.getAccountID()); + E.post(new StatusCountersUpdatedEvent(parent.status, adapter.parentHolder)); + adapter.parentHolder.imgLoader.updateImages(); + }, null).exec(parent.parentFragment.getAccountID()); }); if (parent.parentFragment.isInstanceAkkoma()) { // glitch-soc doesn't have this, afaik btn.setOnLongClickListener(e->{ - EmojiReaction emojiReaction=parent.status.reactions.stream().filter(r->r.name.equals(item.name)).findAny().orElseThrow(); + EmojiReaction emojiReaction=parent.status.reactions.get(getAbsoluteAdapterPosition()); Bundle args=new Bundle(); args.putString("account", parent.parentFragment.getAccountID()); args.putString("statusID", parent.status.id); diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java index ad165fbfe..6745457f2 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java @@ -5,14 +5,7 @@ import android.app.Dialog; import android.content.Context; import android.content.Intent; import android.graphics.drawable.Drawable; -import android.os.Build; import android.os.Bundle; -import android.text.Editable; -import android.text.TextWatcher; -import android.util.DisplayMetrics; -import android.os.VibrationEffect; -import android.os.Vibrator; -import android.view.HapticFeedbackConstants; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; @@ -21,41 +14,26 @@ import android.view.ViewGroup; import android.view.accessibility.AccessibilityNodeInfo; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; -import android.view.inputmethod.InputMethodManager; -import android.view.animation.AnimationSet; -import android.view.animation.BounceInterpolator; -import android.view.animation.RotateAnimation; import android.widget.Button; -import android.widget.EditText; import android.widget.FrameLayout; -import android.widget.LinearLayout; import android.widget.TextView; -import android.widget.Toast; import org.joinmastodon.android.GlobalUserPreferences; import org.joinmastodon.android.R; -import org.joinmastodon.android.api.MastodonAPIRequest; -import org.joinmastodon.android.api.requests.statuses.AddStatusReaction; -import org.joinmastodon.android.api.requests.statuses.PleromaAddStatusReaction; import org.joinmastodon.android.api.session.AccountSession; import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.fragments.BaseStatusListFragment; import org.joinmastodon.android.fragments.ComposeFragment; -import org.joinmastodon.android.model.Emoji; import org.joinmastodon.android.model.Instance; import org.joinmastodon.android.model.Status; import org.joinmastodon.android.model.StatusPrivacy; -import org.joinmastodon.android.ui.CustomEmojiPopupKeyboard; import org.joinmastodon.android.ui.M3AlertDialogBuilder; import org.joinmastodon.android.ui.utils.UiUtils; import org.parceler.Parcels; import java.util.function.Consumer; -import java.util.regex.Pattern; import me.grishka.appkit.Nav; -import me.grishka.appkit.api.Callback; -import me.grishka.appkit.api.ErrorResponse; import me.grishka.appkit.utils.CubicBezierInterpolator; import me.grishka.appkit.utils.V; @@ -76,14 +54,8 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ } public static class Holder extends StatusDisplayItem.Holder{ - private final FrameLayout reactLayout; private final TextView replies, boosts, favorites; - private final View reply, boost, favorite, share, bookmark, react; - private final InputMethodManager imm; - private CustomEmojiPopupKeyboard emojiKeyboard; - private LinearLayout emojiKeyboardContainer; - private boolean reactKeyboardVisible; - private final Activity activity; + private final View reply, boost, favorite, share, bookmark; private static final Animation opacityOut, opacityIn; private static AnimationSet animSet; @@ -130,10 +102,6 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ public Holder(Activity activity, ViewGroup parent){ super(activity, R.layout.display_item_footer, parent); - this.activity = activity; - - reactLayout=findViewById(R.id.react_layout); - emojiKeyboardContainer=findViewById(R.id.footer_emoji_keyboard_container); replies=findViewById(R.id.reply); boosts=findViewById(R.id.boost); @@ -144,7 +112,6 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ favorite=findViewById(R.id.favorite_btn); share=findViewById(R.id.share_btn); bookmark=findViewById(R.id.bookmark_btn); - react=findViewById(R.id.react_btn); reply.setOnTouchListener(this::onButtonTouch); reply.setOnClickListener(this::onReplyClick); @@ -158,9 +125,6 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ favorite.setOnClickListener(this::onFavoriteClick); favorite.setOnLongClickListener(this::onFavoriteLongClick); favorite.setAccessibilityDelegate(buttonAccessibilityDelegate); - react.setOnTouchListener(this::onButtonTouch); - react.setOnClickListener(this::onReactClick); - react.setAccessibilityDelegate(buttonAccessibilityDelegate); bookmark.setOnTouchListener(this::onButtonTouch); bookmark.setOnClickListener(this::onBookmarkClick); bookmark.setOnLongClickListener(this::onBookmarkLongClick); @@ -169,8 +133,6 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ share.setOnClickListener(this::onShareClick); share.setOnLongClickListener(this::onShareLongClick); share.setAccessibilityDelegate(buttonAccessibilityDelegate); - - imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); } @Override @@ -187,11 +149,6 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ bookmark.setSelected(item.status.bookmarked); boost.setEnabled(item.status.isReblogPermitted(item.accountID)); - AccountSession accountSession=AccountSessionManager.get(item.accountID); - reactLayout.setVisibility(accountSession.getLocalPreferences().emojiReactionsEnabled - ? View.VISIBLE - : View.GONE); - int nextPos = getAbsoluteAdapterPosition() + 1; boolean nextIsWarning = item.parentFragment.getDisplayItems().size() > nextPos && item.parentFragment.getDisplayItems().get(nextPos) instanceof WarningFilteredStatusDisplayItem; @@ -203,28 +160,6 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ condenseBottom ? V.dp(-5) : 0); itemView.requestLayout(); - - reactKeyboardVisible=false; - emojiKeyboard=new CustomEmojiPopupKeyboard(activity, AccountSessionManager.getInstance().getCustomEmojis(accountSession.domain), accountSession.domain, true, item.accountID); - emojiKeyboard.setListener(new CustomEmojiPopupKeyboard.Listener(){ - @Override - public void onEmojiSelected(Emoji emoji) { - addEmojiReaction(emoji.shortcode); - emojiKeyboard.toggleKeyboardPopup(null); - } - - @Override - public void onEmojiSelected(String emoji){ - addEmojiReaction(emoji); - emojiKeyboard.toggleKeyboardPopup(null); - } - - @Override - public void onBackspace() {} - }); - - emojiKeyboardContainer.removeAllViews(); - emojiKeyboardContainer.addView(emojiKeyboard.getView()); } private void bindText(TextView btn, long count){ @@ -468,29 +403,6 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ return true; } - private boolean resetReact(View v){ - if(!reactKeyboardVisible) return false; - if(emojiKeyboard.isVisible()) emojiKeyboard.toggleKeyboardPopup(null); - reactKeyboardVisible=false; - v.setAlpha(1); - v.startAnimation(opacityIn); - return true; - } - - private void onReactClick(View v){ - if (resetReact(v)) return; - reactKeyboardVisible=true; - emojiKeyboard.toggleKeyboardPopup(null); - DisplayMetrics displayMetrics = new DisplayMetrics(); - int[] locationOnScreen = new int[2]; - activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); - v.getLocationOnScreen(locationOnScreen); - double fromScreenTop = (double) locationOnScreen[1] / displayMetrics.heightPixels; - if (fromScreenTop > 0.75) { - item.parentFragment.scrollBy(0, (int) (displayMetrics.heightPixels * 0.3)); - } - } - private void onBookmarkClick(View v){ if(item.status.isRemote){ UiUtils.lookupStatus(v.getContext(), @@ -552,51 +464,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ return R.string.add_bookmark; if(id==R.id.share_btn) return R.string.button_share; - if(id==R.id.react_btn) - return R.string.sk_button_react; return 0; } - - private void addEmojiReaction(String emoji) { - MastodonAPIRequest req = item.parentFragment.isInstanceAkkoma() - ? new PleromaAddStatusReaction(item.status.id, emoji) - : new AddStatusReaction(item.status.id, emoji); - req.setCallback(new Callback<>() { - @Override - public void onSuccess(Status result) { - item.parentFragment.updateEmojiReactions(result, getItemID()); - } - - @Override - public void onError(ErrorResponse error) { - error.showToast(item.parentFragment.getContext()); - } - }) - .exec(item.accountID); - reactKeyboardVisible=false; - react.startAnimation(opacityIn); - } - - private static void vibrateForAction(View view, boolean isPositive) { - if (!GlobalUserPreferences.hapticFeedback) return; - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - view.performHapticFeedback(isPositive ? HapticFeedbackConstants.CONFIRM : HapticFeedbackConstants.REJECT); - } else { - Vibrator vibrator = view.getContext().getSystemService(Vibrator.class); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - vibrator.vibrate(VibrationEffect.createPredefined(isPositive ? VibrationEffect.EFFECT_CLICK : VibrationEffect.EFFECT_DOUBLE_CLICK)); - } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - VibrationEffect effect = isPositive - ? VibrationEffect.createOneShot(75L, 128) - : VibrationEffect.createWaveform(new long[]{0L, 75L, 75L, 75L}, new int[]{0, 128, 0, 128}, -1); - vibrator.vibrate(effect); - } else { - if (isPositive) vibrator.vibrate(75L); - else vibrator.vibrate(new long[]{0L, 75L, 75L, 75L}, -1); - } - } - } } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/SpoilerStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/SpoilerStatusDisplayItem.java index 851b00f25..54b755985 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/SpoilerStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/SpoilerStatusDisplayItem.java @@ -92,7 +92,7 @@ public class SpoilerStatusDisplayItem extends StatusDisplayItem{ itemView.getPaddingLeft(), itemView.getPaddingTop(), itemView.getPaddingRight(), - item.inset || GlobalUserPreferences.spectatorMode ? itemView.getPaddingTop() : 0 + item.inset ? itemView.getPaddingTop() : 0 ); } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java index 0d46da705..a62feed76 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java @@ -18,6 +18,7 @@ import org.joinmastodon.android.fragments.HashtagTimelineFragment; import org.joinmastodon.android.fragments.HomeTabFragment; import org.joinmastodon.android.fragments.ListTimelineFragment; import org.joinmastodon.android.fragments.ProfileFragment; +import org.joinmastodon.android.fragments.ScheduledStatusListFragment; import org.joinmastodon.android.fragments.ThreadFragment; import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.Attachment; @@ -49,7 +50,7 @@ import me.grishka.appkit.views.UsableRecyclerView; public abstract class StatusDisplayItem{ public final String parentID; - public final BaseStatusListFragment parentFragment; + public final BaseStatusListFragment parentFragment; public boolean inset; public int index; public boolean @@ -78,7 +79,7 @@ public abstract class StatusDisplayItem{ this.isDirectDescendant = isDirectDescendant; } - public StatusDisplayItem(String parentID, BaseStatusListFragment parentFragment){ + public StatusDisplayItem(String parentID, BaseStatusListFragment parentFragment){ this.parentID=parentID; this.parentFragment=parentFragment; } @@ -257,7 +258,7 @@ public abstract class StatusDisplayItem{ }else if(!hasSpoiler && header!=null){ header.needBottomPadding=true; }else if(hasSpoiler){ - contentItems.add(new DummyStatusDisplayItem(parentID, fragment, true)); + contentItems.add(new DummyStatusDisplayItem(parentID, fragment)); } List imageAttachments=statusForContent.mediaAttachments.stream().filter(att->att.type.isImage()).collect(Collectors.toList()); @@ -293,11 +294,14 @@ public abstract class StatusDisplayItem{ if(contentItems!=items && statusForContent.spoilerRevealed){ items.addAll(contentItems); } - if((flags & FLAG_NO_EMOJI_REACTIONS)==0 && AccountSessionManager.get(accountID).getLocalPreferences().emojiReactionsEnabled){ - items.add(new EmojiReactionsStatusDisplayItem(parentID, fragment, statusForContent)); + if((flags & FLAG_NO_EMOJI_REACTIONS)==0 + && AccountSessionManager.get(accountID).getLocalPreferences().emojiReactionsEnabled){ + boolean isMainStatus=fragment instanceof ThreadFragment t && t.getMainStatus().id.equals(statusForContent.id); + items.add(new EmojiReactionsStatusDisplayItem(parentID, fragment, statusForContent, accountID, !isMainStatus, false)); } + FooterStatusDisplayItem footer=null; if((flags & FLAG_NO_FOOTER)==0){ - FooterStatusDisplayItem footer=new FooterStatusDisplayItem(parentID, fragment, statusForContent, accountID); + footer=new FooterStatusDisplayItem(parentID, fragment, statusForContent, accountID); footer.hideCounts=hideCounts; items.add(footer); if(status.hasGapAfter && !(fragment instanceof ThreadFragment)) @@ -306,10 +310,12 @@ public abstract class StatusDisplayItem{ int i=1; boolean inset=(flags & FLAG_INSET)!=0; // add inset dummy so last content item doesn't clip out of inset bounds - if (inset) { - items.add(new DummyStatusDisplayItem(parentID, fragment, - !contentItems.isEmpty() && contentItems - .get(contentItems.size() - 1) instanceof MediaGridStatusDisplayItem)); + if(inset || footer==null){ + items.add(new DummyStatusDisplayItem(parentID, fragment)); + // in case we ever need the dummy to display a margin for the media grid again: + // (i forgot why we apparently don't need this anymore) + // !contentItems.isEmpty() && contentItems + // .get(contentItems.size() - 1) instanceof MediaGridStatusDisplayItem)); } for(StatusDisplayItem item:items){ item.inset=inset; diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java index f3a21bfd0..49de5f1aa 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java @@ -21,6 +21,7 @@ import org.joinmastodon.android.api.requests.statuses.TranslateStatus; import org.joinmastodon.android.api.session.AccountSession; import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.fragments.BaseStatusListFragment; +import org.joinmastodon.android.fragments.ThreadFragment; import org.joinmastodon.android.model.Instance; import org.joinmastodon.android.model.Status; import org.joinmastodon.android.model.StatusPrivacy; @@ -31,6 +32,8 @@ import org.joinmastodon.android.ui.utils.UiUtils; import org.joinmastodon.android.ui.views.LinkedTextView; import org.joinmastodon.android.utils.StatusTextEncoder; +import java.util.ArrayList; +import java.util.List; import java.util.Locale; import java.util.regex.Pattern; @@ -183,13 +186,19 @@ public class TextStatusDisplayItem extends StatusDisplayItem{ readMore.setText(item.status.textExpanded ? R.string.sk_collapse : R.string.sk_expand); // remove additional padding when (transparently padded) translate button is visible - int nextPos = getAbsoluteAdapterPosition() + 1; + int nextPos=getAbsoluteAdapterPosition() + 1; int bottomPadding=V.dp(12); - if(item.parentFragment.getDisplayItems().size() > nextPos){ - if(item.parentFragment.getDisplayItems().get(nextPos) instanceof FooterStatusDisplayItem) bottomPadding=V.dp(6); - if(item.parentFragment.getDisplayItems().get(nextPos) instanceof EmojiReactionsStatusDisplayItem){ - bottomPadding=item.status.reactions.isEmpty() ? V.dp(6) : 0; + List displayItems=item.parentFragment.getDisplayItems(); + if(displayItems.size() > nextPos){ + StatusDisplayItem next=displayItems.get(nextPos); + if(next instanceof EmojiReactionsStatusDisplayItem e && e.isHidden()){ + next=displayItems.size() > ++nextPos ? displayItems.get(nextPos) : null; } + + if(next instanceof FooterStatusDisplayItem) bottomPadding=V.dp(6); + else if((!item.inset && next instanceof DummyStatusDisplayItem) + || next instanceof EmojiReactionsStatusDisplayItem e && !e.isHidden() + ) bottomPadding=0; } itemView.setPadding(itemView.getPaddingLeft(), itemView.getPaddingTop(), itemView.getPaddingRight(), bottomPadding); @@ -226,7 +235,7 @@ public class TextStatusDisplayItem extends StatusDisplayItem{ // compensate for spoiler's bottom margin ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) itemView.getLayoutParams(); - params.setMargins(params.leftMargin, (item.inset || GlobalUserPreferences.spectatorMode) && hasSpoiler ? V.dp(-16) : 0, + params.setMargins(params.leftMargin, item.inset && hasSpoiler ? V.dp(-16) : 0, params.rightMargin, params.bottomMargin); } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/views/EmojiReactionsRecyclerView.java b/mastodon/src/main/java/org/joinmastodon/android/ui/views/EmojiReactionsRecyclerView.java new file mode 100644 index 000000000..eaba1f6f5 --- /dev/null +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/views/EmojiReactionsRecyclerView.java @@ -0,0 +1,44 @@ +package org.joinmastodon.android.ui.views; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import me.grishka.appkit.views.UsableRecyclerView; + +public class EmojiReactionsRecyclerView extends UsableRecyclerView{ + public EmojiReactionsRecyclerView(Context context){ + super(context); + } + + public EmojiReactionsRecyclerView(Context context, AttributeSet attrs){ + super(context, attrs); + } + + public EmojiReactionsRecyclerView(Context context, AttributeSet attrs, int defStyle){ + super(context, attrs, defStyle); + } + + @Override + public boolean onTouchEvent(MotionEvent e){ + super.onTouchEvent(e); + // to pass through touch events (i.e. clicking the status) to the parent view + return false; + } + + // https://stackoverflow.com/questions/55372837/is-there-a-way-to-make-recyclerview-requiresfadingedge-unaffected-by-paddingtop + @Override + protected boolean isPaddingOffsetRequired() { + return true; + } + + @Override + protected int getLeftPaddingOffset(){ + return -getPaddingLeft(); + } + + @Override + protected int getRightPaddingOffset() { + return getPaddingRight(); + } +} diff --git a/mastodon/src/main/res/drawable/ic_drag_handle_24px.xml b/mastodon/src/main/res/drawable/ic_drag_handle_24px.xml deleted file mode 100644 index 7428dd8b4..000000000 --- a/mastodon/src/main/res/drawable/ic_drag_handle_24px.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/mastodon/src/main/res/layout/display_item_emoji_reactions.xml b/mastodon/src/main/res/layout/display_item_emoji_reactions.xml new file mode 100644 index 000000000..2881fa5d7 --- /dev/null +++ b/mastodon/src/main/res/layout/display_item_emoji_reactions.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mastodon/src/main/res/layout/display_item_footer.xml b/mastodon/src/main/res/layout/display_item_footer.xml index 93007cce1..b63a32e1f 100644 --- a/mastodon/src/main/res/layout/display_item_footer.xml +++ b/mastodon/src/main/res/layout/display_item_footer.xml @@ -126,40 +126,6 @@ - - - - - - - - - + + + + diff --git a/mastodon/src/main/res/layout/onboarding_profile_field.xml b/mastodon/src/main/res/layout/onboarding_profile_field.xml index cd4d854c8..b649442a3 100644 --- a/mastodon/src/main/res/layout/onboarding_profile_field.xml +++ b/mastodon/src/main/res/layout/onboarding_profile_field.xml @@ -1,28 +1,29 @@ + android:background="?colorM3Background" + tools:ignore="RtlSymmetry"> + android:src="@drawable/ic_fluent_re_order_dots_vertical_24_regular"/> - - + + + + \ No newline at end of file diff --git a/mastodon/src/main/res/values-ar-rSA/strings.xml b/mastodon/src/main/res/values-ar-rSA/strings.xml index 71c1d2750..f724dcb03 100644 --- a/mastodon/src/main/res/values-ar-rSA/strings.xml +++ b/mastodon/src/main/res/values-ar-rSA/strings.xml @@ -4,11 +4,18 @@ التالي جارٍ جلب معلومات الخادم… خطأ + لا يبدو أنّ %s كخادم ماستدون. حسنًا جَارٍ الإعدَادُ لِلمُصادَقَة… يُنهي المصادقة… + %s إعادة نشر ردًا على %s الإشعارات + %s بَدَأ بِمُتابَعَتِك + %s أرسَلَ طَلَبًا لِمُتابَعَتِك + %s أعجَبه منشورك + قام %s بإعادة نشر منشورك + الاطلاع على نتائج استطلاع الرأي الذي صوّت فيه شارك الإعدادات انشر @@ -37,7 +44,8 @@ حَول تابِع مُتابَع - حرّر الملف الشخصي + تعديل الملف الشخصي + شارك الصفحة الشخصية كَتمُ %s إلغاء الكَتم عن @%s حَظرُ %s @@ -117,8 +125,16 @@ تبقى %d يومًا تبقى %d يوم - انتهى - اكتم الحساب + + %,d صوت + %,d صوت واحد + صوتين + %,d أصوات + %,d صوتا + %,d صوتا + + مغلق + كتم الحساب أكّد كتم %s اكتم ارفع الكتم عن الحساب @@ -135,17 +151,20 @@ محجوب صَوّت احذف + احذف المنشور أمتأكد من حذف هذا المنشور؟ يحذف… تشغيل الصوت شغّل ألبث + الخروج أضف حساباً ابحث وُسُوم الأخبار لأجلك - الذِكر + كلها + الإشارات لا أحد يتحدث شخص واحد يتحدث @@ -155,11 +174,16 @@ %d شخص يتحدثون بلّغ عن %s + ما المُشكِلَةُ فِي هَذَا المَنشُور؟ + ما المُشكِلَة مَعَ %s؟ اختر أفضل تطابق + لا يعجبني ألا ترغب برؤيته + إنه غير مرغوب فيه روابط خبيثة أو تفاعل كاذب أو ردود متكررة ينتهك قواعد الخادم تعلم أنه ينتهك قواعد محددة + إنَّهُ شَيءٌ آخَر لا تندرج هذه المشكلة ضمن فئات أخرى ما هي القواعد المنتهكة؟ اختر كل ما ينطبق @@ -168,8 +192,14 @@ هل لديك شيء آخر لتخبرنا به؟ تعليقات إضافية يرسل البلاغ… + شُكرًا لَكَ على الإبلاغ، سَوفَ نتحرى عن الأمر. + في أثناء مراجعتنا للبلاغ، يمكنك اتخاذ إجراء ضد %s: ألغ متابعة %s ألغ المتابعة + لن ترى مشاركاتهم. لكن لا يزال بإمكانهم متابعتك ورؤية مشاركاتك ولن يعرفوا أنه تم كتم صوتها. + لن ترى مشاركاتهم. ولن يتمكنوا من رؤية مشاركاتك أو متابعتك. سيكونون قادرين على معرفة أنهم محظورون. + لا تريد أن ترى هذا؟ + فيما يلي خياراتك للتحكم بما يُعرَض عليك في ماستدون: العودة اسم الخادم أو عنوان URL قواعد الخادم @@ -196,23 +226,39 @@ تقني تحقق من صندوق الوارد الخاص بك + اضغط على الرابط الذي أرسلناه إليك للتحقق من %s. سننتظر هنا. + ألم تحصل على رابط؟ أعد الإرسال افتح تطبيق البريد الإلكتروني أُرسلت رسالة التأكيد + عَبِّر عَمَّ يَجُولُ فِي ذِهنِك تحذير من المحتوى احفظ أضف نصًا بديلًا علني للمُتابِعينَ فقط + للمشار إليهم فقط + الحديثة تخطى متابعُون جُدُد المفضلة - الذِكر + المشاركات + الإشارات استطلاع رأي اختر حسابًا يرجى تسجيل الدخول إلى حساب ماستدون أولًا + + لا يمكن إرفاق أكثر من ملف واحد + لا يمكن إرفاق أكثر من ملف واحد + لا يمكنك إرفاق أكثر من %d ملفين + لا يمكن إرفاق أكثر من %d ملفات + لا يمكن إرفاق أكثر من %d ملفات + لا يمكن إرفاق أكثر من %d ملف + نوع الملف %s غير مدعوم الملف %1$s يتجاوز حدّ %2$s مب + المظهر + استخدام مظهر الجهاز فاتح داكن السلوك @@ -225,9 +271,13 @@ امسح التخزين المؤقت للوسائط تطبيق ماستدون لأندرويد نسخة %1$s (%2$d) مُسح التخزين المؤقت للوسائط + تسجيل الخروج من %s؟ + وصف المؤلف هذه الوسائط بأنها حساسة. + انتقل إلى الصفحة الشخصية لـ %s مزيد من الخيارات منشور جديد ردّ + شارك فضّل شارك وسائط بدون وصف @@ -239,7 +289,11 @@ عارض الوسائط تابع %s ألغ متابعة %s + أنت تتابع الآن %s + طَلَبَ %s مُتابَعتك افتح في المتصفح + اخف مشاركات %s + أظهر مشاركات %s لماذا تريد الانضمام؟ هذا سوف يساعدنا في مراجعة تطبيقك. امسح @@ -253,7 +307,13 @@ خطأ أثناء حفظ الملف حُفظ الملف ينزّل… + لا يوجد تطبيق لمعالجة هذا الإجراء + المحلي + هذه هي المشاركات التي تكتسب شعبية عبر ماستدون. + هذه هي القصص الإخبارية التي يُتحدّث عنها على ماستدون. + هذه هي جميع المشاركات من جميع المستخدمين في الخادم الخاص بك (%s). + قد تعجبك هذه الحسابات استنادا إلى حسابات أخرى تتابعها. استعرض المنشورات الجديدة حمّل المَنشورات المَفقودَة رُدّ المتابعة @@ -285,6 +345,14 @@ %,d تفضيلًا %,d تفضيل + + %,d إعادة نشر + إعادة نشر واحدة + أعيد نشره مرّتان + أعيد نشره %,d مرة + أعيد نشره %,d مرات + أعيد نشره %,d مرات + %1$s عبر %2$s الآن تاريخ التعديل @@ -347,6 +415,7 @@ مرحبا بك مجددًا قم بتسجيل الدخول باستخدام الخادم حيث قمتَ بإنشاء حسابك فيه. رابط الخادم + سوف نختار خادماً بناءً على لغتك إذا قمت بالمتابعة دون إجراء إختيار. أي لغة تسجيل فوري مراجعة يدوية @@ -359,6 +428,7 @@ أوقيانوسيا لا يقبل استقبال أعضاء جدد المصالح الخاصة + كلمات المرور غير متطابقة اختر لي إضافة صف إعداد الملف الشخصي @@ -367,21 +437,265 @@ مشهور على ماستدون اتبع الكل لا أوافق + بالمختصر: نحن لا نجمع أو نعالج أي شيء. لا أوافق %s نبذة عنك متابعة المستخدمين… + %1$s لا يسمح بالاشتراكات من %2$s. جرب خادما واحدا أو <a>اختر خادما مختلفا</a>. + إظهاره على أي حال + إعادة الإخفاء + اختر واحدا أو أكثر + حفظ التغييرات + المميزة + الخيط + عرض الكل + الحسابات + رابط متحقق منه + إظهار + إخفاء + الانضمام إلى %s + اختر خادما آخر + أو + تعلم المزيد + أهلًا بك على ماستدون + ماستدون شبكة اجتماعية لامركزية، بمعنى أنه ليس هناك شركة واحدة تتحكم فيها. وهي تتألف من العديد من الخوادم التي تدار بشكل مستقل، وجميعها متصلة معا. + ما هي الخوادم؟ + + رابط الافتتاح… + هذا الرابط غير مدعوم في التطبيق + تسجيل الخروج من جميع الحسابات + أتريد تسجيل الخروج من جميع الحسابات؟ + حاول مجددًا + أخفق في الإرسال + صورة %s + فيديو %s + مقطع صوتي %s + ملف %s + صورة + فيديو + مقطع صوتي + GIF + ملف + %d%% تم الرفع + إضافة خيار للاستطلاع + مدة الاستطلاع + النوع + اختر واحدا + خيارات متعددة + حذف خيار من الاستطلاع + نمط الاستطلاع + نص بديل + المساعدة + ما هو النص البديل؟ + يوفر النص البديل أوصافا للصور للأشخاص الذين يعانون من إعاقات بصرية أو اتصالات ذات نطاق ترددي منخفض أو أولئك الذين يبحثون عن سياق إضافي.\n\nيمكنك تحسين إمكانية الوصول والفهم للجميع من خلال كتابة نص بديل واضح وموجز وموضوعي.\n\n التقاط العناصر المهمة\n
  • تلخيص النص في الصور
  • \n
  • استخدام بنية الجملة العادية
  • \n
  • تجنب المعلومات الزائدة
  • \n
  • التركيز على الاتجاهات والنتائج الرئيسية في العناصر المرئية المعقدة (مثل الرسوم البيانية أو الخرائط)
+ تعديل المنشور + لم يتم التحقق من الرابط + تصفح الرموز التعبيرية + العثور على الأشخاص الذين تبحث عنهم + تعذر العثور على أي نتائج لمصطلحات البحث هذه + اللغة + الافتراضية + النظام + اكتشاف اللغة + تعذر اكتشاف اللغة + الكشف عن + وسائط مخفية + منشور مخفي + الإبلاغ عن المنشور + الحساب من خادم آخر. هل تودّ إرسال نسخة مجهولة المصدر من هذا التقرير هناك أيضا؟ + تحويله إلى %s + تم الإبلاغ عنه + لعدم رؤية مشاركاتهم في خلاصة ملخصك بعد الآن، ألغِ متابعتهم. + كتم %s + لقد حظرت هذا المستخدم من قبل، لذلك لا يوجد شيء آخر عليك القيام به خلال مراجعة بلاغك. + لقد قمت بالفعل بحظر هذا المستخدم، لذلك لا يوجد شيء آخر عليك القيام به.\n\nشكرا للمساعدة في الحفاظ على ماستدون مكانا آمنا للجميع! + حظر %s + اعتبار الكل كمقروء + الشاشة + عوامل التصفية + نظرة عامة وقواعد ومشرفين + عن %s + اللغة الافتراضية للمنشور + إضافة تذكير بالنصوص البديلة + السؤال قبل إلغاء متابعة شخص ما + اسأل قبل إعادة النشر + السؤال قبل حذف المشاركات + إيقاف الكل + إيقاف + أيا كان + الأشخاص الذين تتابعهم + الأشخاص الذين تتابعهم + لا أحد + تلقي الإشعارات من + الإشارات والردود + إيقاف جميع الإشعارات مؤقتًا + + %d أسبوع + أسبوع واحد + أسبوعان + %d أسابيع + %d أسبوعًا + %d أسابيع + + %1$s في %2$s + اليوم + أمس + غدًا + ينتهي %s + سيتم استئناف الإشعارات %s. + استأنف الآن + الانتقال إلى إعدادات الإشعارات + عن + القواعد + المدير + للاتصال بالمدير + شغل الإشعارات من إعدادات جهازك لرؤية التحديثات من أي مكان. + المزيد من الإعدادات + إظهار تحذيرات المحتوى + فلرتة الوسائط التي تم وضع علامة عليها على أنها حساسة + عدد التفاعل مع المنشورات + رموز تعبيرية مخصصة في أسماء العرض + + في %d ثانية + في ثانية واحدة + في ثانيتين + في %d ثوانٍ + في %d ثانية + في %d ثوان + + + في %d دقيقة + في دقيقة واحدة + في دقيقتين + في %d دقائق + في %d دقيقة + في %d دقائق + + + في %d ساعة + خلال ساعة واحدة + خلال ساعتان + خلال %d ساعات + خلال %d ساعة + خلال %d ساعات + + + منذ %d ساعات + منذ ساعة واحدة + منذ ساعتان + منذ %d ساعات + منذ %d ساعة + منذ %d ساعات + + تفتقد الوسائط إلى نص بديل + + %s من صورك يفتقر إلى نص بديل. أتردد النشر على أي حال؟ + %s من صورك يفتقر إلى نص بديل. أتردد النشر على أي حال؟ + %s من صورك يفتقر إلى نص بديل. أتردد النشر على أي حال؟ + %s من صورك يفتقر إلى نص بديل. أتردد النشر على أي حال؟ + %s من صورك يفتقر إلى نص بديل. أتردد النشر على أي حال؟ + %s من صورك يفتقر إلى نص بديل. أتردد النشر على أي حال؟ + + + %s من مرفقات الوسائط الخاصة بك يفتقر لنص بديل. نشر على أي حال؟ + %s من مرفقات الوسائط الخاصة بك يفتقر لنص بديل. نشر على أي حال؟ + %s من مرفقات الوسائط الخاصة بك يفتقر لنص بديل. نشر على أي حال؟ + %s من مرفقات الوسائط الخاصة بك يفتقر لنص بديل. نشر على أي حال؟ + %s من مرفقات الوسائط الخاصة بك يفتقر لنص بديل. نشر على أي حال؟ + %s من مرفقات الوسائط الخاصة بك يفتقر لنص بديل. نشر على أي حال؟ + + واحد + اثنان + ثلاثة + أربعة + مَنشور + أتريد إلغاء متابعة %s؟ + نشِط + خامل + إضافة عامل تصفية + تعديل عامل التصفية + المدة + الكلمات المحظورة + كتم الصوت من + عرض مع تحذير المحتوى + الاستمرار في عرض المشاركات التي تطابق هذا الفلتر، ولكن خلف تحذير حول المحتوى + حذف عامل التصفية + إلى الأبد + ينتهي %s + + %d كلمة أو عبارة مكتومة + %d كلمة أو عبارة مكتومة + %d كلمتان أو عبارتان مكتومتان + %d كلمة أو عبارة مكتومة + %d كلمة أو عبارة مكتومة + %d كلمة أو عبارة مكتومة + + %1$s و %2$s + %1$s و %2$s و %3$s + %1$s, %2$s, و %3$d والمزيد + الخيط الزمني الرئيسي والقوائم + الإشعارات + الخيوط الزمنية العامة + سلاسل المحادثات والردود + الصفحات التعريفية + العنوان + حذف عامل التصفية \"%s\"؟ + سيتم حذف هذا الفلتر من حسابك على جميع الأجهزة. + إضافة كلمة مكتومة + تحرير كلمة مكتومة + إضافة + كلمة أو عبارة + الكلمات غير حساسة لحالة الأحرف وتتطابق مع الكلمات الكاملة فقط.\n\nإذا قمت بتصفية الكلمة الرئيسية \"Apple\" ، فستخفي المشاركات التي تحتوي على \"apple\" أو \"aPpLe\" ولكن ليس \"pineapple.\" + حذف الكلمة \"%s\"؟ + اختر + اختيار الكل + مدة التصفية + مخصص + + حذف %d كلمات؟ + حذف كلمة واحدة؟ + حذف كلمتان؟ + حذف %d كلمات؟ + حذف %d كلمة؟ + حذف %d كلمات؟ + + + تم تحديد %d + تم تحديد %d + %d تم تحديدها + %d تم تحديدها + %d تم تحديدها + %d تم تحديدها + + لا يمكن أن يكون فارغاً + موجود بالفعل في القائمة + تحديث التطبيق جاهز + الإصدار %s + جارٍ التنزيل (%d%%) + تطابق عامل التصفية \"%s\" + البحث في ماستدون + امسح الكل + فتح الرابط التشعبي في ماستدون + منشورات تحتوي على “%s” + الانتقال إلى %s + منشورات تحتوي على “%s” + أشخاص لديهم \"%s\" + مُنذُ %dث + مُنذُ %dش + مُنذُ %dس + مُنذُ %dي diff --git a/mastodon/src/main/res/values-da-rDK/strings.xml b/mastodon/src/main/res/values-da-rDK/strings.xml index 6f8fc87d2..974cd66a4 100644 --- a/mastodon/src/main/res/values-da-rDK/strings.xml +++ b/mastodon/src/main/res/values-da-rDK/strings.xml @@ -4,24 +4,24 @@ Næste Henter serverinfo… Fejl - %s er vist ikke en Mastodon-server. - Ok + %s lader ikke til at være en Mastodon-server. + OK Forbereder godkendelse… Afslutter godkendelse… %s fremhævede Som svar til %s - Meddelelser + Notifikationer %s begyndte at følge dig %s har sendt dig en følgeanmodning %s favoritmarkerede dit indlæg %s boostede dit indlæg - Se resultaterne af en afstemning, som du har deltaget i + Se resultaterne af en afstemning, hvori du deltog Del Indstillinger - Offentliggør + Publicér Kassér kladde? Kassér - Fortryd + Afbryd følger følgere @@ -38,13 +38,13 @@ Følger Redigér profil Del profil - Skjul %s (mute) - Vis %s igen (unmute) - Bloker %s - Fjern blokering af %s - Indberet %s - Bloker %s - Fjern blokering af %s + Gør tavs %s + Vis %s igen + Blokér %s + Afblokér %s + Anmeld %s + Blokér %s + Afblokér %s %,d indlæg %,d indlæg @@ -52,7 +52,7 @@ Tilmeldt Udført Indlæser… - Mærkat + Etiket Indhold Gemmer… Indlæg fra %s @@ -85,30 +85,34 @@ %d dag tilbage %d dage tilbage + + %,d stemme + %,d stemmer + Lukket - Skjul konto - Bekræft at du vil skjule %s - Skjul (mute) - Vis bruger igen (unmute) - Bekræft at du vil se %s igen - Vis igen (unmute) - Bloker bruger - Bloker domæne - Bekræft at du vil blokere %s - Bloker - Fjern blokering af bruger - Fjern blokering af domæne - Bekræft at du vil fjerne blokering af %s - Fjern blokering + Tavsgør konto + Bekræft tavsgørelse af %s + Tavsgør + Vis konto igen + Bekræft, at %s ikke længere er tavsgjort + Ophæv tavsgørelse + Blokér konto + Blokér domæne + Bekræft blokering af %s + Blokér + Afblokér konto + Afblokér domæne + Bekræft afblokeringen af %s + Afblokér Blokeret Stem Slet Slet indlæg - Er du sikker på, at du vil slette dette indlæg? + Sikker på, at dette indlæg skal slettes? Sletter… - Afspilning af lyd + Lydafspilning Afspil - Sæt på pause + Pausér Log ud Tilføj konto Søg @@ -118,47 +122,47 @@ Alt Omtaler - %d person deltager - %d personer deltager + %d person taler + %d personer taler - Indberet %s + Anmeld %s Hvad er der galt med dette indlæg? Hvad er der galt med %s? - Vælg en passende grund - Jeg bryder mig ikke om det + Vælg bedste match + Bryder mig ikke om det Det er ikke noget, man ønsker at se Det er spam - Ondsindede links, falske interaktioner, eller gentagne svar - Det overtræder serverreglerne - Du kender til specifikke regler som det er i strid med - Det er noget andet - Problemet passer ikke ind i andre kategorier + Ondsindede links, falske interaktioner eller gentagne svar + Det overtræder serverregler + Du er bekendt med, at det overtræder bestemte regler + Drejer sig om noget andet + Ingen kategori modsvarer problematikken Hvilke regler overtrædes? Vælg alle relevante - Er der indlæg, som kan bekræfte denne anmeldelse? + Er der indlæg, som understøtter denne anmeldelse? Vælg alle relevante Er der andet, vi bør vide? Yderligere kommentarer - Sender rapport… - Tak for anmeldelsen. Den vil blive undersøgt nærmere. - Mens vi gennemgår anmeldelsen, kan du selv skride til handling mod %s: + Indsender rapport… + Tak for anmeldelsen. Vi vil se nærmere på dette. + Mens vi gennemgår anmeldelsen, kan du tage skridt mod %s: Følg ikke længere %s Følg ikke længere - Du vil ikke se vedkommendes indlæg. Vedkommende kan stadig se dine indlæg og følge dig. Vedkommende vil ikke kunne se, at de er blevet skjult. - Du vil ikke se vedkommendes indlæg. Vedkommende vil ikke kunne se dine indlæg eller følge dig. Vedkommende vil kunne se, at de er blokeret. - Ønsker du ikke at se det her? + Du vil ikke se indlæg fra vedkommende, der dog stadig kan se dine indlæg og følge dig, men ikke være bekendt med tavsgørelsen. + Du vil ikke se indlæg fra vedkommende, der hverken kan se dine indlæg eller følge dig, men vil være bekendt med blokeringen. + Ønsker du ikke at se dette? Her er mulighederne for at styre, hvad du ser på Mastodon: - Tilbage - Server-navn eller URL + Retur + Servernavn eller -URL Serverregler - Ved at fortsætte accepterer du at følge følgende regler, der er vedtaget og håndhævet af %ss moderatorer. + Ved at fortsætte accepterer du at overholde flg. regler, som angivet og håndhævet af %s moderatorerne. Opret konto Navn Brugernavn - Email + E-mail Adgangskode Bekræft adgangskode - Inkluder store bogstaver, specialtegn og tal for at gøre din adgangskode stærkere. + Benyt majuskler, specialtegn og tal for at øge adgangskodens styrke. Forskning og højere uddannelser Aktivisme Alt @@ -174,51 +178,55 @@ Teknologi Tjek din indbakke - Tryk på det tilsendte link for at bekræfte %s. Vi venter til du kommer tilbage. - Har du ikke modtaget et link? + Tryk på det modtage link for at bekræfte %s. Vi venter her så længe. + Modtog intet link? Send igen - Åben email-app - Bekræftelses-email sendt - Skriv eller indsæt hvad du har på hjerte + Åbn e-mail app + Bekræftelsesmail sendt + Angiv eller indsæt, hvad du tænker på Indholdsadvarsel Gem Tilføj alternativ tekst Offentlig - Kun følgere + Kun Følgere Kun nævnte personer Nylige - Spring over - Nye følgere + Overspring + Nye Følgere Favoritmarkeringer Fremhævninger Omtaler Afstemninger Vælg konto - Log venligst ind på Mastodon først - Filen %s er af en type der ikke understøttes - Størrelsen på filen %1$s overskrider grænsen på %2$s MB + Log ind på Mastodon først + + Maks. %d medievedhæftning kan tilføjes + Maks. %d medievedhæftninger kan tilføjes + + Filen %s er af en uunderstøttet type + Filen %1$s overskrider begrænsningen på %2$s MB Udseende Brug enhedens indstillinger for udseende Lys Mørk - Opførsel - Spil animerede avatarer og emoji + Adfærd + Afspil animerede avatarer og emojier Benyt in-app browser - Meddelelser + Notifikationer Bidrag til Mastodon - Vilkår og Betingelser - Privatlivspolitik + Tjenestevilkår + Fortrolighedspolitik Ryd mediecache Mastodon til Android v%1$s (%2$d) Mediecache ryddet Log ud af %s? - Forfatteren markerede dette medie som følsomt. + Forfatteren markerede dette medie som sensitivt. Gå til %ss profil Flere muligheder Nyt indlæg Svar Fremhæv - Favorit + Gør til favorit Del Medier uden beskrivelse Tilføj medier @@ -239,7 +247,7 @@ Ryd Overskriftsbillede Profilbillede - Omarranger + Omarrangér Download Tilladelse kræves Appen skal have adgang til din lagerplads for at gemme denne fil. @@ -247,11 +255,13 @@ Fejl under lagring af fil Fil gemt Downloader… - Der er ingen app til at udføre denne handling + Ingen app til at håndtere denne handling Lokalt - Her er de indlæg, der tiltrækker sig opmærksomhed på tværs af Mastodon. + Her er de indlæg, som vinder indpas på tværs af Mastodon. Her er de nyheder, der bliver talt om på Mastodon. + Disse er alle indlæg fra alle brugere på din server (%s). + Baseret på andre, du følger, vil du måske synes om disse konti. Se nye indlæg Indlæs manglende indlæg Følg Tilbage @@ -272,14 +282,14 @@ %,d favoritmarkeringer - %,d indlæg - %,d indlæg + %,d fremhævning + %,d fremhævninger %1$s via %2$s nu Rediger historik Senest ændret: %s - lige nu + netop nu %d sekund siden %d sekunder siden @@ -288,11 +298,11 @@ %d minut siden %d minutter siden - redigerede %s + redigeret %s Oprindeligt indlæg Tekst redigeret Indholdsadvarsel tilføjet - Indholdsadvarsel tilføjet + Indholdsadvarsel redigeret Indholdsadvarsel fjernet Afstemning tilføjet Afstemning redigeret @@ -300,11 +310,11 @@ Medier tilføjet Medier fjernet Medie omarrangeret - Marker som følsom - Markeret ikke følsom + Markeret sensitivt + Markeret ikke-sensitivt Indlæg redigeret - Rediger - Fortryd ændringer? + Redigér + Kassér ændringer? Upload mislykkedes %d bytes %.2f KB @@ -315,20 +325,21 @@ Download (%s) - Installer - Dit privatliv - Selvom Mastodon-appen ikke indsamler data, kan den server du tilmelder dig gennem, have en anden politik.\n\nHvis du er uenig i politikken for %s, kan du gå tilbage og vælge en anden server. + Installér + Din fortrolighed + Selvom Mastodon-appen ikke indsamler data, kan serveren, via hvilken man tilmelder sig, have en anden politik.\n\nEr man uenig i politikken for %s, kan man gå tilbage og vælge en anden server. Jeg accepterer Denne liste er tom - Denne server er ikke åben for nye tilmeldinger. + Denne server accepterer ikke nye tilmeldinger. Kopieret til udklipsholderen Bogmærk Fjern bogmærke Bogmærker Dine Favoritter Velkommen tilbage - Log ind med serveren hvor du oprettede din bruger. + Log ind med serveren, på hvilken din konto blev oprettet. Server-URL + En server baseret på dit sprog vælges, hvis du fortsætter uden selv at vælge. Hvilket som helst sprog Øjeblikkelig tilmelding Manuel evaluering @@ -341,6 +352,7 @@ Oceania Ikke åben for nye medlemmer Særlige Interesser + Adgangskoder matcher ikke Vælg for mig Tilføj række Profilopsætning @@ -349,12 +361,14 @@ Populært på Mastodon Følg alle Ikke enig + TL;DR: Vi indsamler eller behandler ikke noget. Uenig med %s Biografi Følger brugere … + %1$s tillader ikke tilmeldinger fra %2$s. Prøv en anden eller <a>vælg en anden server</a>. Vis alligevel Genskjul Vælg en eller flere @@ -367,21 +381,127 @@ Vis Skjul Tilmeld dig %s + Vælg en anden server eller Få mere at vide Velkommen til Mastodon Mastodon er et decentraliseret socialt netværk, hvilket betyder at ingen enkelt virksomhed styrer det. Det består af mange uafhængige servere, alle forbundet sammen. Hvad er servere? + Åbner link… + Linket er ikke understøttet i appen + Log ud af alle konti + Log ud af alle konti? + Forsøg igen + Mislykkedes at indsende indlæg + %s billede + %s video + %s lyd + %s fil + Billede + Video + Lyd + GIF + Fil + %d%% uploadet + Tilføj afstemningsmulighed + Afstemningslængde + Stil + Vælg én + Multivalg + Slet afstemningsvalg + Afstemningsstil + Alt text + Hjælp + Hvad er alt tekst? + Alt tekst vil sige billedbeskrivelser til personer med synshandikap, forbindelser med lav båndbredde eller dem, som søger ekstra kontekst.\n\nMan kan forbedre tilgængelighed og forståelse for alle ved at skrive klar, kortfattet og objektiv alt-tekst.\n\n
  • Fang vigtige elementer
  • \n
  • Opsummér tekst i billeder
  • \n
  • Brug regulær sætningsstruktur
  • \n
  • Undgå overflødig information
  • \n
  • Fokus på tendenser og vigtige fund i kompleks grafik (såsom diagrammer/kort)
+ Redigere opslag + Intet bekræftet link + Gennemse emoji + Find den, man leder efter + Ingen resultater for disse søgeord + Sprog + Standard + System + Detektere sprog + Kan ikke detektere sprog + Detekteret + Medie skjult + Indlæg skjult + Anmeld indlæg + Kontoen er fra en anden server. Send også en anonymiseret kopi af anmeldelsen dertil? + Videresend til %s + Anmeldt + For ikke længere at se vedkommendes indlæg i hjemmefeedet, ophør med at følge. + Tavsgjorde %s + Tre + Fire + Indlæg + Følg ikke længere %s? + Aktiv + Inaktiv + Tilføj filter + Redigér filter + Varighed + Tavsgjorte (skjulte) ord + Tavsgør fra + Vis med indholdsadvarsel + Viser stadig indlæg matchende dette filter, men bag en indholdsadvarsel + Slet filter + For evigt + Slutter %s + + %d tavsgjort (skjult) ord/sætning + %d tavsgjorte (skjulte) ord/sætninger + + %1$s og %2$s + %1$s, %2$s og %3$s + %1$s, %2$s og %3$d flere + Hjem og lister + Notifikationer + Offentlige tidslinjer + Tråde og svar + Profiler + Titel + Slet filter “%s”? + Dette filter slettes fra din konto på alle enheder. + Tilføj tavsgjort (skjult) ord + Redigér tavsgjort (skjult) ord + Tilføj + Ord/sætning + Ord er versalfølsomme og matcher kun fulde ord.\n\nFiltreres nøgleordet “Apple,” vil det skjule indlæg indeholdende “apple” eller “aPpLe”, men ikke “pineapple”. + Slet ordet “%s”? + Vælg + Vælg alle + Filtervarighed + Tilpasset + + Slet %d ord? + Slet %d ord? + + + %d valgt + %d valgt + + Obligatorisk felt + Allerede på listen + App-opdatering klar + Version %s + Downloader (%d%%) + Matcher filter “%s” + Søg i Mastodon + Ryd alle + Åbn URL i Mastodon + Indlæg med “%s” diff --git a/mastodon/src/main/res/values-de-rDE/strings_sk.xml b/mastodon/src/main/res/values-de-rDE/strings_sk.xml index d6c28b62b..a237f83b5 100644 --- a/mastodon/src/main/res/values-de-rDE/strings_sk.xml +++ b/mastodon/src/main/res/values-de-rDE/strings_sk.xml @@ -329,10 +329,23 @@ Nur lokale Beiträge anzeigen\? Hashtag darf nicht leer sein Erweiterte Optionen ausblenden - Fediverse durchsuchen + Fediverse durchsuchen Timeline wechseln Instanz Pillen-förmigen Indikator für aktiven Tab deaktivieren Stockfinster-Modus GIF + UnifiedPush verwenden + Kein Verteiler gefunden + Damit UnifiedPush-Benachrichtigungen funktionieren, muss ein Verteiler installiert sein. Mehr Informationen auf https://unifiedpush.org + Pronomen in der Timeline anzeigen + Tonwiedergabe überlagern + Musik im Hintergrund nicht pausieren, wenn in der App Medien abgespielt werden + Verteiler auswählen + Pronomen in Threads anzeigen + Pronomen in User-Auflistungen anzeigen + Start + Suche + Benachrichtigungen + Profil \ No newline at end of file diff --git a/mastodon/src/main/res/values-es-rES/strings_sk.xml b/mastodon/src/main/res/values-es-rES/strings_sk.xml index 0c1bbcaaf..580ea33b7 100644 --- a/mastodon/src/main/res/values-es-rES/strings_sk.xml +++ b/mastodon/src/main/res/values-es-rES/strings_sk.xml @@ -256,7 +256,7 @@ Minimizar publicaciones largas ¿Corregir adjuntos\? Algunos adjuntos no han terminado de subirse. - Añadir \"re:\" a Advertencias de Contenido para + Prefijo CW con \"re:\" al responder Modo espectador Ocultar los botones de interacción Seguir desde otra cuenta @@ -273,8 +273,8 @@ Mostrar hilo Línea compacta compartida/respondida Confirmación antes de impulsar - reaccionó con %s - reaccionó + %1$s reaccionó con %2$s + %s reaccionó Tipo del contenido Sin especificar Texto sin formato @@ -292,18 +292,18 @@ Compartir o abrir con una cuenta Abrir en la app Compartir con una cuenta - Mostrar Avisos de Contenido para respuestas de - nadie - autor - todos + Revelar automáticamente los CW iguales en las respuestas + Nunca + Respuestas del mismo autor + Respuestas de todos No se pudo abrir en la aplicación no hay información remota disponible No se pudo cargar el perfil a través de %s Cargar la información desde las instancias remotas Intenta obtener listas más precisas de seguidores, Me gusta y promociones cargando la información desde la instancia de origen. - Todas - Ninguna - A otros + Responder a cualquiera + Nunca + Solo en respuesta a otros \"Reenviar denuncia\" activado por defecto Hacer una lista exclusiva Cronología @@ -328,4 +328,49 @@ Por favor, ten en cuenta que es el servidor el gestiona estas operaciones. Puede que no sea factible combinarlas. Ciencia Cama + GIF + Mostrar el contenido + Pronombres + Cambiar la línea de tiempo + Instancia + Desactivar el indicador de pestaña activa en forma de pastilla + Modo negro intenso + Buscar en el Fediverso + Selecciona un distribuidor + No se ha encontrado ningún distribuidor + Mostrar pronombres en los listados de usuarios + Inicio + Buscar + Notificaciones + Perfil + Duración + Indefinido + 5 minutos + 30 minutos + 1 hora + 6 horas + 1 día + 3 días + 7 días + Has sido mencionado por %s + Superposición del audio + Permitir que los medios que ya se están reproduciendo sigan reproduciéndose, superponiéndose a la nueva reproducción + Usar UnifiedPush + Es necesario instalar un distribuidor para que funcionen las notificaciones de UnifiedPush. Para obtener más información, visita https://unifiedpush.org/ + Mostrar pronombres en líneas de tiempo + Mostrar pronombres en los hilos + Mostrar las etiquetas de las pestañas en la barra de navegación + Mostrar las reacciones con los emoticonos en las líneas de tiempo + + Un usuario reaccionó con %2$s + %1$,d usuarios reaccionaron con %2$s + %1$,d usuarios reaccionaron con %2$s + + Necesitas escribir un emoticono + Escribe para reaccionar con un emoticono + Activar las reacciones con los emoticonos + Muestra las reacciones con los emoticonos a los mensajes y te permite interactuar con ellos. Algunas versiones modificadas de Mastodon lo soportan, pero Mastodon no. + Las reacciones con los emoticonos deben mostrarse en las líneas de tiempo. Si esta opción está desactivada, las reacciones con los emoticonos solo se mostrarán al ver un hilo. + Reacciona con un emoticono + Pulsa de nuevo para el Teclado del sistema \ No newline at end of file diff --git a/mastodon/src/main/res/values-eu-rES/strings.xml b/mastodon/src/main/res/values-eu-rES/strings.xml index 8cfe5d2ea..2e893b1d4 100644 --- a/mastodon/src/main/res/values-eu-rES/strings.xml +++ b/mastodon/src/main/res/values-eu-rES/strings.xml @@ -4,9 +4,11 @@ Hurrengoa Zerbitzariaren informazioa berreskuratzen… Errorea + %s(e)k ez dirudi Mastodon instantzia bat denik. Ados Autentifikaziorako prestatzen… Autentikazioa bukatzen… + %s(e)k bultzatu du %s-(r)i erantzunez Jakinarazpenak Partekatu @@ -95,27 +97,35 @@ Blokeatuta Bozkatu Ezabatu + Ezabatu bidalketa Ziur bidalketa hau ezabatu nahi duzula? Ezabatzen… Audioa erreproduzitzen Jo Pausatu + Itxi saioa Gehitu kontua Bilatu Traolak Berriak Zuretzat + Dena Aipamenak Pertsona %d hizketan %d pertsona hizketan Salatu %s + Zer du txarra argitalpen honek? + Zer du txarra %s? Aukeratu egokiena + Ez dut gustukoa Ikusi nahi ez dudan zerbait da + Spama da Esteka maltzurrak, gezurrezko elkarrekintzak edo erantzun errepikakorrak Zerbitzariaren arauak hausten ditu Arau zehatzak urratzen dituela badakizu + Beste zerbait da Arazoa ezin da beste kategorietan sailkatu Ze arau hautsi ditu? Hautatu dagozkion guztiak @@ -124,8 +134,11 @@ Beste zerbait jakin beharko genuke? Iruzkin gehigarriak Txostena bidaltzen… + Mila esker salaketagatik, berrikusiko dugu. %s jarraitzeari utzi Utzi jarraitzeari + Ez duzu hau ikusi nahi? + Hemen dituzu Mastodonen ikusiko duzuna kontrolatzeko aukerak: Atzera Zerbitzari izena edo URLa Zerbitzariaren arauak @@ -151,23 +164,34 @@ Teknologia Egiaztatu zure sarrerako ontzia + Ez duzu estekarik jaso? Berbidali Ireki eposta aplikazioa Berretzi eposta bidaltzea + Idatzi edo itsatsi buruan duzuna Edukiaren abisua Gorde Gehitu ordezko testua Publikoa Jarraitzaileak soilik + Aipatzen dudan jendea soilik + Azkenaldikoak Saltatu Jarraitzaile berriak Gogokoak + Bultzadak Aipamenak Inkestak Aukeratu kontua Mesedez, hasi saioa lehenengo Mastodonen + + Ezin duzu multimedia fitxategi %d baino gehiago gehitu + Ezin dituzu %d baino multimedia fitxategi gehiago gehitu + %s fitxategi mota ez da bateragarria %1$s fitxategiak %2$s MB-eko tamainaren muga gainditzen du + Itxura + Erabili sistemaren diseinua Argia Iluna Jokabidea @@ -180,9 +204,13 @@ Garbitu multimediaren cachea Mastodon Android-entzat v%1$s (%2$d) Multimediaren cachea garbitua + Itxi saioa %s? + Egileak multimedia hau hunkigarritzat markatu du. + Joan %s-(r)en profilera Aukera gehiago Bidalketa berria Erantzun + Bultzada Gogokoa Partekatu Deskribapenik gabeko multimedia @@ -194,6 +222,7 @@ Multimedia ikuskatzailea Jarraitu %s Utzi %s jarraitzeari + %s jarraitzen ari zara Ireki nabigatzailean Zergatik elkartu nahi duzu? Honek zure eskaera berrikustean lagunduko digu. @@ -208,6 +237,9 @@ Errorea fitxategia gordetzerakoan Fitxategia gorde da Jeisten… + Ez dago ekintza hau kudeatu dezkeen aplikaziorik + Lokala + Hauek dira zure Mastodon txokoan beraien lekua hartzen ari diren argitalpenak. Ikusi bidalketa berriak Falta diren bidalketak kargatu @@ -290,22 +322,118 @@ Asia Ozeania Ez da kide berririk onartzen + Pasahitzak ez datoz bat + Aukeratu niretzat Gehitu errenkada + Mastodonen pil-pilean Jarraitu denak Ez ados Biografia + Erakutsi hala ere + Aukeratu bat edo gehiago + Gorde aldaketak + Nabarmenak + Denbora-lerroa + Ikusi guztia + Kontuak + Erakutsi + Ezkutatu + Aukeratu beste zerbitzari bat + edo + Ikasi gehiago + Ongi etorri Mastodon-era + Zer dira zerbitzariak? + Lotura irekitzen… + Berriro saiatu + Irudia + Bideoa + Audioa + GIF-a + Fitxategia + Gehitu inkesta aukera + Estiloa + Aukeratu bat + Aukera anitza + Ezabatu inkesta aukera + Laguntza + Editatu argitalpena + Esploratu emojiak + Hizkuntza + Lehenetsia + Sistema + Hizkuntza detektatzen + Ezin da hizkuntza detektatu + Detektatuta + Multimedia ezkutatua + Salatua + Mututu %s + Blokeatu %s + Markatu denak irakurrita bezala + Bistaratzea + Iragazkiak + %s(r)i buruz + Pausatu denak + Itzali + Edozein + Zu jarraitzen zaituzten pertsonak + Zuk jarraitzen dituzun pertsonak + Bat ere ez + Pausatu jakinarazpen guztiak + gaur + atzo + bihar + Honi buruz + Arauak + Administratzailea + Erakutsi eduki abisuak + + Ordu %d barru + %d ordu barru + + Bat + Bi + Hiru + Lau + Bidalketa + %s jarraitzeari utzi? + Aktiboa + Ez aktiboa + Gehitu iragazkia + Editatu iragazkia + Iraupena + Mutututako hitzak + Erakutsi eduki abisuarekin + Ezabatu iragazkia + Betirakoa + %1$s eta %2$s + %1$s, %2$s, eta %3$s + %1$s, %2$s, eta beste %3$d + Jakinarazpenak + Denbora-lerro publikoak + Profilak + Izenburua + Ezabatu \"%s\" iragazkia”? + Gehitu + Hautatu + Hautatu dena + Pertsonalizatua + Ezin da hutsik egon + Bertsioa: %s + Bilatu Mastodonen + Garbitu dena + Ireki URLa Mastodonen diff --git a/mastodon/src/main/res/values-fa/strings_sk.xml b/mastodon/src/main/res/values-fa/strings_sk.xml index 49571204f..f4bdfb5d9 100644 --- a/mastodon/src/main/res/values-fa/strings_sk.xml +++ b/mastodon/src/main/res/values-fa/strings_sk.xml @@ -85,7 +85,7 @@ حذف آگاهی %s از ترجمه پشتیبانی می‌کند! رونوشت پیوند فرسته - قبلا برگزیده بوده است + قبلا پسندیده بوده است برگزیدن با حساب دیگر فرسته‌های ارسال نشده تقویت با حساب دیگر @@ -160,7 +160,7 @@ در پاسخ بازکردن در کاره هیچوقت - دیگران + فقط درپاسخ به دیگران برنامه‌ریزی یا پیش‌نویس ویرایش سیاهه ستاره @@ -183,7 +183,7 @@ آگاهی‌های فرسته برای %s خاموش شد اینها جدیدترین فرسته‌های شبکه هستند که توسط سرپرستان نمونه شما انتخاب شده‌اند. زبان‌های اخیراً استفاده شده را پاک‌سازی کنید - تخته‌رنگ رنگی + تخته‌رنگ آیا مطمئنید که می خواهید زبان های اخیراً استفاده شده خود را پاک کنید؟ منبع پیدا نشد به‌عنوان %s پسندیده شد @@ -207,7 +207,7 @@ به خانه سنجاق شد انتشار به هرصورت غیرفعال‌کردن یادآوری برای افزودن متن جایگزین - تخته‌رنگ رنگی + تخته‌رنگ برچسب برگ‌ها مهم @@ -239,8 +239,8 @@ بارگذاری برخی از پیوست‌ها به پایان نرسیده است. نهفتن دکمه های تعامل هیچوقت - نویسنده - هرکس + پاسخ های همان نویسنده + پاسخ های همه درپاسخ به هرکسی هم‌رسانی یا با حساب باز کنید MFM @@ -309,7 +309,7 @@ %1$s با %2$s واکنش نشان داد %s واکنش نشان داد هم‌رسانی با حساب - پیشوند CW با “re:” در پاسخ به + وارد کردن پیشوند CW با “re:” هنگام پاسخ دادن رفع مشکل پیوست‌ها؟ بارگیری اطلاعات از نمونه های راه دور بارگیری نمایه از طریق %s شکست خورد @@ -333,4 +333,43 @@ نشانگر برگه فعال قرصی را ازکار بندازید اعضای یک سیاهه انحصاری در خط زمانی خانه شما نشان داده نمی شوند - اگر نمونه شما از آن پشتیبانی کند. این به شما امکان می‌دهد هنگام نوشتن فرسته‌های جدید، نوع محتوا را از قبل انتخاب کنید و مقدار تنظیم‌شده در \"ترجیحات‌های ارسال\" را لغو کنید. + CW های برابر را در پاسخ‌ها به صورت خودکار آشکار کنید + پیش‌فرض سوئیچ “گزارش هدایت ” + جستجوی فدیورس + انتخاب یک توزیع کننده + هیچ توزیع‌کننده ای پیدا نشد + نمایش ضمایر در خطوط زمانی + نمایش ضمایر در رشته‌ها + نمایش ضمایر در سیاهه کاربران + خانه + جست‌وجو + آگاهی‌ها + نمایه + نشان دادن برچسب‌های برگه در نوار پیمایش + مدت زمان + نامعین + 5 دقیقه + 30 دقیقه + ۱ ساعت + 6 ساعت + ۱ روز + 3 روز + شما توسط %s نام‌برده شده اید + استفاده از UnifiedPush + 7 روز + برای کارکردن آگاهی‌های UnifiedPush باید یک توزیع‌کننده نصب کنید. برای اطلاعات بیشتر به https://unifiedpush.org/ مراجعه کنید. + پوشش صوتی + به رسانه‌ای که از قبل پخش می‌شود اجازه دهید به پخش ادامه دهد و پخش جدید را پوشش دهد + واکنش با ایموجی + دوباره برای کیبورد سامانه ضربه بزنید + باید یک ایموجی تایپ کنید + برای واکنش با ایموجی تایپ کنید + + یک کاربر با %2$s واکنش نشان داد + %1$,d کاربر با %2$s واکنش نشان دادند + + به‌کار انداختن واکنش های ایموجی + نمایش واکنش های ایموجی در خطوط زمانی + اینکه آیا واکنش های ایموجی باید در خطوط زمانی نمایش داده شود یا خیر. اگر این گزینه خاموش باشد، واکنش های ایموجی فقط هنگام مشاهده یک موضوع نمایش داده می شود. + واکنش‌های ایموجی را به فرسته‌ها نشان می‌دهد و به شما امکان می‌دهد با آنها تعامل داشته باشید. برخی از نسخه های اصلاح شده ماستودون از این پشتیبانی می کنند، اما ماستودون اینطور نیست. \ No newline at end of file diff --git a/mastodon/src/main/res/values-fr-rFR/strings.xml b/mastodon/src/main/res/values-fr-rFR/strings.xml index 2f97e39bf..673cad72c 100644 --- a/mastodon/src/main/res/values-fr-rFR/strings.xml +++ b/mastodon/src/main/res/values-fr-rFR/strings.xml @@ -35,7 +35,7 @@ Médias À propos Suivre - Abonné·e·s + Abonné·e Modifier le profil Partager le profil Masquer %s @@ -225,6 +225,7 @@ Paramètres supplémentaires Nouveau message Répondre + Booster Ajouter aux favoris Partager Média sans description @@ -256,7 +257,11 @@ Téléchargement… Aucune application ne permet de gérer cette action Local + Ce sont les messages qui gagnent en popularité sur Mastodon. + Voici les actualités dont on parle sur Mastodon. + Voici tous les messages de tous les comptes de votre serveur (%s). + Vous pourriez aimer ces comptes en fonction des autres que vous suivez. Voir les nouveaux messages Charger les messages manquants Suivre en retour @@ -276,6 +281,10 @@ %,d favori %,d favoris + + %,d partage + %,d partages + %1$s via %2$s à l’instant Historique des modifications @@ -359,58 +368,218 @@ Utilisateurs suivants… + %1$s n’autorise pas les inscriptions à partir de %2$s. Essayez-en un autre ou <a>choisissez un autre serveur</a>. Afficher quand même Cacher Choisir un ou plusieurs + Enregistrer les modifications + En vedette + Fil + Tout afficher + Comptes + Lien vérifié + Afficher + Masquer Rejoindre %s + Choisir un autre serveur ou En savoir plus Bienvenue sur Mastodon + Mastodon est un réseau social décentralisé, ce qui signifie qu’aucune entreprise ne le contrôle. Il est composé de plusieurs serveurs indépendants, tous connectés ensemble. + Que sont les serveurs ? + Ouverture du lien… + Ce lien n’est pas pris en charge dans l’application Se déconnecter de tous les comptes Se déconnecter de tous les comptes ? Réessayer + Échec de l\'envoi du message + image %s + vidéo %s + audio %s + fichier %s Image Vidéo Audio GIF Fichier %d%% transférés + Ajouter une option de sondage Durée du sondage Type Choix unique Choix multiple + Supprimer l\'option du sondage Type de sondage + Texte alternatif Aide + Qu’est-ce que le texte alternatif ? + Un texte alternatif fournit une description de l\'image aux personnes avec un handicap visuel ou une connexion limitée ou qui souhaitent avoir un contexte supplémentaire.\n\nVous pouvez améliorer l\'accessibilité et la compression de tout le monde en écrivant un texte alternatif clair, concis et objectif.\n\n
  • Identifiez les éléments importants
  • \n
  • Résumez le texte présent à l\'image
  • \n
  • Utilisez une structure de phrase normale
  • \n
  • Évitez les informations redondantes
  • \n
  • Pour les visuels complexes (tels que les diagrammes ou les cartes), indiquez les tendances ou points-clés
+ Modifier la publication + Aucun lien vérifié + Parcourir les émojis + Trouvez qui vous cherchez + Aucun résultat avec ces mots-clefs Langue + Par défaut + Système + Détection de la langue + Impossible de détecter la langue + Détectée + Média masqué + Publication masquée + Signaler la publication + Le compte provient d’un autre serveur. Envoyer également une copie anonyme du rapport ? + Transférer à %s + Signalé + Pour ne plus voir leurs messages dans votre fil d\'accueil, désabonnez-vous de ces comptes. + %s masqué·e + Vous avez déjà bloqué ce compte, vous n\'avez rien d\'autre à faire en attendant la revue de votre rapport. + Vous avez déjà bloqué ce compte, il n\'y a rien d\'autre à faire.\n\nMerci d\'aider à ce que Mastodon soit un espace sûr pour toutes et tous ! + %s bloqué·e + Marque tout comme lu Affichage Filtres + Aperçu, règles, modérateur·rice·s A propos de %s + Langue de publication par défaut + Ajouter des rappels de texte alternatif + Demander confirmation avant de se désabonner d\'un compte + Demander avant de booster + Demander confirmation avant la suppression des messages + Tout mettre en pause + Désactivée + Tout le monde + Personnes qui vous suivent + Personnes que vous suivez + De personne + Recevoir des notifications de + Mentions et réponses + Mettre en pause toutes les notifications + + %d semaine + %d semaines + + %1$s à %2$s + aujourd’hui + hier + demain + Se termine à %s + Reprise des notifications à %s. + Reprendre maintenant + Aller aux paramètres des notifications + À propos + Règles + Administrateur·rice + Contacter l’admin + Activez les notifications dans les paramètres de votre appareil pour être tenu·e au courant où que vous soyez. Paramètres supplémentaires Afficher les avertissements de contenu Cacher les médias marqués comme sensibles Compteurs d\'interaction de publication Émoticônes personnalisées dans les noms + + dans %d secondes + dans %d secondes + + + dans %d minute + dans %d minutes + + + dans %d heure + dans %d heures + + + Il y a %d heure + Il y a %d heures + + Texte alternatif manquant pour les médias + + %s de vos images n\'a pas de texte alternatif. Envoyer quand même ? + %s de vos images n\'ont pas de texte alternatif. Envoyer quand même ? + + + %s de vos média joint n\'a pas de texte alternatif. Envoyer quand même ? + %s de vos médias joints n\'ont pas de texte alternatif. Envoyer quand même ? + + Un + Deux + Trois + Quatre + Publier + Ne plus suivre %s ? + Actif + Désactivé Ajouter un filtre + Modifier le filtre Durée + Mots masqués + Masquer à partir de + Afficher avec l\'avertissement de contenu + Continuer d\'afficher les messages correspondant à ce filtre en ajoutant un avertissement de convenu + Supprimer le filtre Toujours + Se termine à %s + + %d phrase ou mot masqué + %d phrases ou mots masqués + + %1$s et %2$s + %1$s, %2$s ainsi que %3$s + %1$s, %2$s ainsi que %3$d autres + Accueil et listes + Notifications + Fils publics + Fils et réponses + Profils Titre + Supprimer le filtre « %s » ? + Ce filtre sera supprimé de votre compte, sur tous vos appareils. + Ajouter un mot à masquer + Ajouter un mot à masquer + Ajouter + Mot ou expression + Les mots ne sont pas sensibles à la casse et la correspondance porte sur les mots entiers.\n\nPar exemple, si vous filtrez le mot-clé « Chat », cela masquera les messages qui contiennent « chat » ou « ChAt », mais pas « chaton ». + Supprimer le mot « %s » ? + Sélectionner + Tout sélectionner Durée du filtre Personnalisée + + Supprimer %d mot ? + Supprimer %d mots ? + + + %d sélectionné(e) + %d sélectionné(e)s + + Ne peut pas être vide + Déjà dans la liste + Mise à jour de l’application prête + Version %s + Téléchargement (%d%%) + Correspond au filtre « %s » Rechercher sur Mastodon + Effacer tout Ouvrir l\'URL dans Mastodon + Publications ayant « %s » Aller à %s + Publications ayant « %s » + Personnes ayant « %s » + il y a %ds + il y a %dm Il y a %dh Il y a %dj diff --git a/mastodon/src/main/res/values-fr-rFR/strings_sk.xml b/mastodon/src/main/res/values-fr-rFR/strings_sk.xml index c12317a08..7d4d2b42f 100644 --- a/mastodon/src/main/res/values-fr-rFR/strings_sk.xml +++ b/mastodon/src/main/res/values-fr-rFR/strings_sk.xml @@ -336,4 +336,42 @@ Mode noir absolu GIF Désactiver l\'indicateur d\'onglet actif en forme de punaise + Chercher sur le Fediverse + Choisissez un distributeur + Aucun distributeur trouvé + Afficher les pronoms dans les fils de discussion + Afficher les pronoms dans les listes d\'utilisateurs + Accueil + Recherche + Notifications + Profil + Durée + Indéfini + 5 minutes + 30 minutes + 1 heure + 6 heures + 1 jour + 3 jours + 7 jours + Vous avez été mentionné par %s + Superposition audio + Autoriser les médias déjà en cours de lecture à continuer à jouer, en superposant la nouvelle lecture + Utiliser UnifiedPush + Vous devez installer un distributeur pour que les notifications UnifiedPush fonctionnent. Pour plus d\'informations, visitez https://unifiedpush.org/ + Afficher les pronoms dans les timelines + Afficher les étiquettes des onglets dans la barre de navigation + Activer les réactions emoji + Affiche les réactions emoji aux messages et vous permet d\'interagir avec elles. Certaines versions modifiées de Mastodon le supportent, mais pas Mastodon. + Afficher les réactions emoji dans les timelines + Si les réactions emoji doivent être affichées sur les timelines. Si cette option est désactivée, les réactions emoji ne seront affichées que lors de l\'affichage d\'un fil de discussion. + + Un utilisateur a réagi avec %2$s + %1$,d utilisateurs ont réagi avec %2$s + %1$,d utilisateurs ont réagi avec %2$s + + Réagissez avec des emojis + Appuyez à nouveau pour le clavier système + Tapez pour réagir avec un emoji + Vous devez saisir un emoji \ No newline at end of file diff --git a/mastodon/src/main/res/values-in-rID/strings_sk.xml b/mastodon/src/main/res/values-in-rID/strings_sk.xml index f0f8bbdeb..befeec8b4 100644 --- a/mastodon/src/main/res/values-in-rID/strings_sk.xml +++ b/mastodon/src/main/res/values-in-rID/strings_sk.xml @@ -60,10 +60,10 @@ contoh.social Merah Diterjemahkan menggunakan %s - Hiu menyapamu! Untuk memulai, silakan memasukkan nama domain instansi Anda di bawah. + Hiu menyapamu! Untuk memulai, silakan memasukkan nama domain server Anda di bawah. Nonaktifkan mengusap antara tab Atur profil - Atur profil + Atur penyaring Aktifkan menghapus notifikasi Teks tombol Terbitkan Ubah teks tombol Terbitkan @@ -258,7 +258,7 @@ Sembunyikan tombol interaksi Ikuti dari akun lain Diikuti dari %s - Awali balasan peringatan konten dengan “re:” + Awali peringatan konten dengan “re:” saat membalas Tutup kiriman yang sangat panjang Perbaiki lampiran\? Beberapa lampiran belum selesai diunggah. @@ -271,11 +271,11 @@ Balasan kepada saya Mengirim balasan ke %s Baris “Membalas ke” di atas avatar - Tampilkan utasan + Tampilkan utas Baris berbagi/balasan Konfirmasi sebelum membagikan ulang - bereaksi dengan %s - bereaksi + %1$s bereaksi dengan %2$s + %s bereaksi Teks biasa HTML Markdown @@ -295,16 +295,16 @@ Bagikan atau buka dengan akun info jarak jauh tidak tersedia Muat info dari server jarak jauh - Coba mendapatkan pendaftaran akurat untuk pengikut cr + Coba mendapatkan pendaftaran akurat untuk pengikut, favorit, dan pembagian dengan memuat informasi dari asal server. Gagal memuat profil melalui %s Tidak dapat buka dalam aplikasi - Tampilkan peringatan konten yang sama dari - bukan siapa pun - pembuat - semuanya - semuanya - bukan siapa pun - lainnya + Buka peringatan konten yang sama secara otomatis dalam balasan + Tidak pernah + Balasan dari pembuat yang sama + Balasan dari semuanya + Membalas ke siapa pun + Tidak pernah + Hanya dalam balasan ke lainnya “Laporan diteruskan” ubah bawaan Umpan Buat daftar ekslusif @@ -329,4 +329,47 @@ Tampilkan opsi tingkat lanjut Sembunyikan opsi tingkat lanjut Gelas kimia + GIF + Kata ganti + Ubah lini masa + Server + Mode gelap gulita + Tampilkan konten + Nonaktifkan indikator tab berbentuk pil yang aktif + Cari di Fediverse + Tidak ada distributor yang ditemukan + Tampilkan kata ganti dalam utas + Tampilkan kata gamti dalam daftar pengguna + Beranda + Cari + Notifikasi + Profil + Durasi + Selamanya + 5 menit + 30 menit + 1 jam + 6 jam + 1 hari + 3 hari + 7 hari + Anda disebut oleh %s + Hamparan audio + Perbolehkan memainkan media yang sudah diputar untuk terus memutar, menghamparkan pemutaran baru + Gunakan UnifiedPush + Pilih distributor + Anda perlu memasang sebuah distributor supaya notifikasi UnifiedPush bekerja. Untuk informasi lanjut, kunjungi https://unifiedpush.org/ + Tampilkan kata ganti dalam lini masa + Tampilkan label tab dalam bilah navigasi + Tampilkan reaksi emoji di lini masa + + %1$,d pengguna bereaksi dengan %2$s + + Anda perlu mengetik sebuah emoji + Ketik untuk bereaksi dengan sebuah emoji + Aktifkan reaksi emoji + Menampilkan reaksi emoji di kiriman dan memungkinkan Anda untuk berinteraksi. Beberapa versi Mastodon yang dimodifikasi mendukung ini, tetapi Mastodon sendiri tidak mendukungnya. + "Menentukan apakah reaksi emoji ditampilkan di lini masa. Jika opsi ini mati, reaksi emoji hanya akan ditampilkan ketika melihat sebuah utas." + Bereaksi dengan emoji + Ketuk lagi untuk Papan Ketik Sistem \ No newline at end of file diff --git a/mastodon/src/main/res/values-it-rIT/strings_sk.xml b/mastodon/src/main/res/values-it-rIT/strings_sk.xml index a14e4bbf3..e05b8d883 100644 --- a/mastodon/src/main/res/values-it-rIT/strings_sk.xml +++ b/mastodon/src/main/res/values-it-rIT/strings_sk.xml @@ -150,7 +150,7 @@ Registro delle modifiche Testo alternativo mancante Pubblica comunque - Timeline + Linee temporali Post Aggiungi Timeline @@ -218,8 +218,8 @@ Cuffie Umano Mappamondo - Modifica timeline - Modifica timeline + Modifica le timeline + Modifica le timeline Modifica un post boostato Post modificati Allega file @@ -314,8 +314,8 @@ …o qualsiasi di questi …e ognuno di questi …ma nessuno di questi - Inserisci hashtag… - Inserisci hashtag… + Inserisci l\'hashtag… + Inserisci l\'hashtag… Nota che il server gestisce queste operazioni. Combinarle poterebbe non essere supportato. Mostra post solo locali\? L\'hashtag non deve essere vuoto @@ -334,4 +334,5 @@ Feed Crea lista esclusiva I membri di una lista esclusiva non appariranno nella tua timeline home - se la tua istanza lo supporta. + Cerca nel Fediverso \ No newline at end of file diff --git a/mastodon/src/main/res/values-nl-rNL/strings_sk.xml b/mastodon/src/main/res/values-nl-rNL/strings_sk.xml index 3edbcd20b..905de8020 100644 --- a/mastodon/src/main/res/values-nl-rNL/strings_sk.xml +++ b/mastodon/src/main/res/values-nl-rNL/strings_sk.xml @@ -255,12 +255,12 @@ Quoting %s Zichtbaarheid reactie Alle reacties - iedereen - auteur - niemand - niemand - iedereen - Toon dezelfde CW\'s in reacties van + Reacties van iedereen + Reacties van dezelfde auteur + Nooit + Nooit + Als reactie op iemand + Dezelfde CW\'s automatisch tonen in reacties Laad informatie van remote instances (servers) remote info niet beschikbaar Probeer meer accurate informatie te krijgen van volgers, favorieten en boosts, door informatie te laden van de originele instance (server). @@ -277,4 +277,37 @@ Toon geavanceerde opties Open in app Verberg geavanceerde opties + Gebruik emoji reacties + + Eén persoon reageerde met %2$s + %1$,d personen reageerden met %2$s + + 30 minuten + 5 minuten + Onbepaald + Duur + Type om te reageren met een emoji + 7 dagen + 3 dagen + 1 dag + 6 uur + 1 uur + Reageer met emoji + Tik nogmaals voor systeem toetsenbord + Toon emoji reacties in tijdlijnen + Deel met account + HTML + Alleen tekst + Niet gespecificeerd + Standaard formaat + Markdown + BBCode + MFM + Meldingen + Zoek + Home + Deel of open met account + Instance informatie tijdelijk niet beschikbaar + Toon tab labels op navigatiebalk + Profiel \ No newline at end of file diff --git a/mastodon/src/main/res/values-nn/strings_sk.xml b/mastodon/src/main/res/values-nn/strings_sk.xml new file mode 100644 index 000000000..b41a33f3d --- /dev/null +++ b/mastodon/src/main/res/values-nn/strings_sk.xml @@ -0,0 +1,374 @@ + + + Slett og skriv på nytt + Slett og skriv innlegg på nytt + Fest til profil + Fest innlegg til profil + Vil du feste dette innlegget til profilen din\? + Festar innlegg… + Løys frå profil + Tilgjengelege språk + %1$s (%2$s) + Fjern nyleg brukte språk + Er du sikker på at du vil fjerne nyleg brukte språk\? + Velkomen! + Haien seier hei! For å starte, skriv inn domenenamnet til din heime-instans nedanfor. + eksempel.social + Megalodon + Festa + Omset + Språk: %s + Omsett ved hjelp av %s + Er du sikker på at du vil løyse dette innlegget frå profilen\? + Løyser innleg frå profil… + Ikkje lista + Vis svar + Lydoverlag + Siterer %s + Vising av svar + Alle svar + Svar til dei eg følgjer + Svar til meg + Vis framhevingar + Last nye innlegg automatisk + Vis interaksjonsteljar + Megalodon v%1$s (%2$d) + Merk media som ømtolig + Aktiviert varsling av innlegg frå %s + Deaktivert varsling av innlegg frå %s + Fødererasjon + Dette er dei seinaste innlegga frå nettverket kuratert av dine lokale administratorar. + Megalodon %s er klar for nedlasting. + Sjekk for oppdatering + Ingen tilgjengelege oppdateringar + Lister + Følgjeførespurnader + Aksepter følgjeførespurnad + Avslå følgjeførespurnad + Lister med %s + Ignorer åtvaringar om ømtoleg innhald + Aktiver rullande tekst i tittelrader + Bidra til Megalodon + Innlegg + Innleggsvarsel + Fargepalett + System + Rosa + Lilla + Grøn + Blå + Brun + Raud + Gul + Tillat fleire val + Er du sikker på at du vil slette og skrive dette innlegget på nytt\? + Løys innlegg frå profil + Bildeforklaring + Lat allereie spelande media halde fram med å spele under den nye avspelinga + Dette er dei seinaste innlegga av folk i føderasjonen din. + Megalodon %s er lasta ned og kan no installerast. + Vis føderert tidsline + Vis original + Slå av sveiping mellom faner + Tilpass profil + Publiseringsinnstillingar + Konfigurer filter + Tryggleiksinnstillingar + Reglar + Om appen + Slett varsling + Doner + Slett varsling + Vis emoji-reaksjonar i tidslinjer + Styrer om emoji-reaksjonar skal visast i tidslinjer. Dersom denne innstillinga er av, vil emoji-reaksjonar kun bli viste når ein ser på ein tråd. + Reager med emoji + Trykk igjen for systemtastatur + Du må skrive inn ein emoji + Skriv for å reagere med ein emoji + Varigheit + Ubestemt + 5 minuttar + 30 minuttar + 6 timar + 1 dag + 3 dagar + 7 dagar + Du vart nemnd av %s + Ressurs ikkje funnen + Er du sikker på at du vil slette denne varslinga\? + Framhev med annan konto + %s støttar omsetjing! + Planlegg + Er du sikker på at du vil slette dette planlagde innlegget\? + Innlegg må planleggjast om minimum 10 minuttar frå no. + Marker som utkast + Planlegg innlegg + Vis kun ei varsling + Du må installere ein distributør for at UnifiedPush-varslingar skal fungere. For meir informasjon, gå til https://unifiedpush.org/ + Minst eitt av vedlegga manglar forklaring. + Formel + Personar + Legg til tidslinje + Indikator for manglande alternativ bildetekst + Legg til emneknagg… + Merk at tenaren handterer desse operasjonane. Å kombinere dei er kanskje ikkje støtta. + Heimeinstansen din må støtte lokale innlegg for at dette skal fungere. Dei fleste modifiserte versjonar av Mastodon støttar dette, men Mastodon gjer det ikkje. + Aktiver dette dersom heimeinstansen din køyrer Glitch. Trengst ikkje for Hometown eller Akkoma. + Resultat av rundspørjing + Opplasting ikkje fullført for vedlegg. + Kompakt framhev-/svar-linje + Gjer det mogleg å spesifisere innhaldstype, slik som Markdown, ved oppretting av innlegg. Merk at ikkje alle instansar har støtte for dette. + fjerninformasjon ikkje tilgjengeleg + Prøv å hente meir nøyaktig informasjon om følgere, likarklikk og framhevingar ved å laste informasjonen frå opphavsinstansen. + Aktiver emoji-reaksjonar + Viser emoji-reaksjonar til innlegg og let deg interagere med desse. Enkelte tilpassa versjonar av Mastodon har støtte for dette, men Mastodon har ikkje. + + Ein brukar reagerte med %2$s + %1$,d brukarar reagerte med %2$s + + 1 time + Plan eller utkast + Ikkje planlegg + Ikkje lag utkast + Reduser rørsler i animasjonar + Kunngjeringar + Marker som lest + Om instans + Bruk UnifiedPush + Vel ein distributør + Ingen distributør funnen + Lage + Lag liste + Listenamn + Vis svar til + listemedlemer + følgde brukarar + ingen + Slett liste + Er du sikker på at du vil slette lista \"%s\"\? + Tilpass liste + Dine lister + Heime + Lokal + Føderasjon + Boble + Skriv for å starte søk + Fjern følgjar + Fjern %s som følgjar ved å blokkere og straks avblokkere\? + Fjern + Vellukka fjerning av følgjar + Endringslogg + Manglande altenativ bildetekst + Publiser likevel + Skru av påminning om alternativ bildetekst + Om du aktiverer varsling av innlegg frå enkelte personar, vil dei nye innlegga deira hamne her. + Tidslinjer + Innlegg + Legg til + Tidslinje + Liste + Emneknagg + Fest tidslinje + Løys tidslinje + Festa til Heime + Løyst frå Heime + Fjern + Ikon + Hjarte + Stjerne + By + Katt + Hund + Hare + Skjelpadde + Ballong + Bilde + Robot + Språk + Stad + Megafon + Mikrofon + Mikroskop + Keyboard + Kaffi + Latter + Nyhende + Pi + Fargepalett + Akademikarhatt + Etikett + Stetoskop + Vêr + Spel + Kode + Lyspære + Tog + Filmklappar + Lauv + Idrett + Blendar + Musikk + Helse + Viktig + Prat + Skjold + Bok + Sykkel + Kart + Ryggsekk + Stresskoffert + Brann + Insekt + Pizza + Klubbe + Målar + Høyretelefon + Menneske + Globus + Teiknestift + Flaum + Beger + Seng + Søppelkorg + Verifisert + Dokter + Diamant + Paraply + Tilpass tidslinje + Tilpass tidslinjer + Innlegg med emneknaggar… + …eller nokre av desse + …og alle desse + …men ingen av desse + Legg til emneknaggar… + Vis kun lokale innlegg\? + Emneknagg kan ikkje vera tom + ALT + GIF + Endra + Endra innlegg + Endrar eit framheva innlegg + Legg ved fil + Søker… + Ingen resultat + Lagre utkast\? + Vil du lagre endringane dine til dette utkastet eller publisere det no\? + Ingen alternativ bildetekst tilgjengeleg + Indikator for alternativ bildetekst + Tillat tidlegversjonar + \"Sjå nye innlegg\"-knapp + kun lokal + nemnde + · + Kun lokal instans + Instans-eigenskapar + Tenar støttar lokale innlegg + Lokalmodus for Glitch + Aldri + Svar frå same forfattar + Svar frå alle + Som svar til alle + Aldri + Kun i svar til andre + Standarinnstilling for \"Vidaresend rapport\"-brytar + Eksklusiv liste + Gjer lista eksklusiv + Medlemer i ei eksklusiv liste vil ikkje bli vist i heime-tidslinja di – dersom instansen din har støtte for dette. + Vis avanserte alternativ + Skjul avanserte alternativ + Vis innhald + Pronomen + Bytt tidslinje + Instans + Deaktiver pilleforma aktiv faneindikator + Bekmørk modus + Søk i Fødiverset + Vis pronomen i tidslinjer + Vis pronomen i trådar + Vis pronomen i lister over brukarar + Heime + Søk + Varslingar + Profil + Vis fanetitlar i navigeringsrada + Slett alle varslingar + Slett alt + Er du sikker på at du vil slette alle varslingar\? + Aktiver sletting av varslingar + Tilpass publiseringsknapp + Tekst på publiseringsknapp + Omsett kun opna innlegg + %s støttar tilsynelatande ikkje omsetjing. + Leitar i Fødiverset + Leitar på %s + Angre framheving + Framhev og gjer synleg + Kommenter dette + Emneknaggar du følgjer + Kopier link til innlegg + Opne med annan konto + Lag bokmerke med annan konto + Bokmerke laga som %s + Bokmerke finst frå før + Marker som favoritt med annan konto + Markert som favoritt som %s + Markert som favoritt frå før + Framheva som %s + Framheva frå før + Svar med annan konto + Einskaplege ikon for alle varslingar + Vidaresend til %s + Ikkje sendte innlegg + Utkast + Slett utkast + Er du sikker på at du vil slette dette utkastet\? + Slett planlagt innlegg + Lag utkast eller planlegg sending + Innlegg vil bli lagra som utkast. + Planlagt til + Utkast lagra + Innlegg planlagt + Planlagt tid er for tidleg + Lagre utkast\? + Lagre endringar\? + registrert + rapportert + %1$s har reagert med %2$s + %s har reagert + Registreringar + Nye rapportar + Tenarversjon: %s + Set \"re:\" som prefix til CW ved svar + Filtrert: %s + Utvid + Minimer + Fikse vedlegg\? + Skjul interaksjonsknappar + Følg frå annan konto + Følgd frå %s + Auto-skjul knappen for å legge til nytt innlegg + Sendt svar til %s + Som svar + \"Som svar til\"-linje over profilbilde + Vis tråd + Stadfest før framheving + Innhaldstype + Uspesifisert + Enkel tekst + HTML + Markdown + BBCode + MFM + Aktiver innleggsformatering + Standard innhaldstype + Gjer det mogleg å la ein innhaldstype vera førehandsvald ved skriving av nye innlegg, slik at denne overstyrer innstillingane i \"Innleggspreferansar\". + Instansinformasjon mellombels utilgjengeleg + Opne i app + Kunne ikkje opne i app + Del med konto + Del eller opne med konto + Kunne ikkje laste profilen via %s + Last informasjon frå fjerninstansar + Automatisk avsløring av like CW-ar i svar + Minimer svært lange innlegg + \ No newline at end of file diff --git a/mastodon/src/main/res/values-no-rNO/strings.xml b/mastodon/src/main/res/values-no-rNO/strings.xml index 9ce839d38..f6fdb6bdc 100644 --- a/mastodon/src/main/res/values-no-rNO/strings.xml +++ b/mastodon/src/main/res/values-no-rNO/strings.xml @@ -6,7 +6,7 @@ Feil %s ser ikke ut til å være en Mastodon server. OK - Forbereder for autentisering… + Forbereder autentisering… Ferdigstiller autentisering… Fremhevet av %s Som svar på %s @@ -90,7 +90,7 @@ %,d stemmer Lukket - Demp Konto + Demp konto Bekreft demping av %s Demp Opphev demping av konto @@ -179,7 +179,7 @@ Sjekk innboksen din Trykk på linken vi sendte deg for å verifisere %s. Vi venter her. - Fikk du ikke lenken? + Fikk du ikke linken? Send på nytt Åpne e-post appen Bekreftelse e-post er sendt diff --git a/mastodon/src/main/res/values-pl-rPL/strings_sk.xml b/mastodon/src/main/res/values-pl-rPL/strings_sk.xml index 6c063beec..377d58c3c 100644 --- a/mastodon/src/main/res/values-pl-rPL/strings_sk.xml +++ b/mastodon/src/main/res/values-pl-rPL/strings_sk.xml @@ -285,5 +285,28 @@ Włącz formatowanie wpisu Otwórz w aplikacji Udostępnij z kontem - To są najnowsze posty z sieci wybrane przez administratorów Twojej instancji. + Nigdy + zdalne informacje są niedostępne + Nigdy + Łóżko + Zweryfikowano + Doktor + Diament + Parasol + Kosz na śmieci + Dodaj oś czasu + Wprowadź hasztag… + Wprowadź hasztagi… + Wpisy zawierające hasztag… + Kanał + GIF + Markdown + Lista wykluczonych + Pokaż zaawansowane opcje + Zaimki + Instancja + Pokaż zawartość + Przełącz oś czasu + Wyszukaj w Fediwersum + Ukryj zaawansowane opcje \ No newline at end of file diff --git a/mastodon/src/main/res/values-pt-rBR/strings_sk.xml b/mastodon/src/main/res/values-pt-rBR/strings_sk.xml index a18920698..3aad47b5d 100644 --- a/mastodon/src/main/res/values-pt-rBR/strings_sk.xml +++ b/mastodon/src/main/res/values-pt-rBR/strings_sk.xml @@ -261,15 +261,14 @@ Todas as respostas Respostas para meus seguidores Respostas para mim - reagiu com %s - reagiu + %1$s reagiu com %2$s + %s reagiu Usuários se inscrevendo Novas relatórios reportado - Revelar Avisos de Conteúdo em respostas de - ninguém - autor - todo mundo + Nunca + Respostas do mesmo autor + Respostas de todos Não foi possível abrir no app Compartilhar com conta Compartilhar ou abrir com conta @@ -277,9 +276,9 @@ Falha em carregar o perfil via %s Carregar informações de instâncias remotas Tentar buscar listagens mais precisas de seguidores, curtidas e impulsos carregando a informação pela instância de origem. - todo mundo - ninguém - outros + Em resposta a qualquer um + Nunca + Apenas em resposta a outros Tipo de conteúdo Não especificado Texto simples @@ -309,4 +308,29 @@ Lista exclusiva Tornar lista exclusiva Membros de uma lista exclusiva não irão aparecer na sua linha do tempo inicial - somente se sua instância suportar. + Cama + Verificado + Diamante + Guarda-chuva + Adicionar linha do tempo + …ou qualquer um destes + …e cada um destes + …mas nenhum desses + Insira a hashtag… + Insira as hashtags… + Mostrar apenas postagens locais\? + A hashtag não deve estar vazia + Béquer + Doutor + Postagens contendo hashtag… + Observe que o servidor lida com essas operações. A combinação deles pode não ser suportada. + GIF + Mostrar opções avançadas + Ocultar opções avançadas + Mostrar conteúdo + Pronomes + Instância + Alternar linha do tempo + Modo preto + Pesquisar no Fediverso \ No newline at end of file diff --git a/mastodon/src/main/res/values-pt-rPT/strings.xml b/mastodon/src/main/res/values-pt-rPT/strings.xml index 99ee3c79b..46ac5c7e1 100644 --- a/mastodon/src/main/res/values-pt-rPT/strings.xml +++ b/mastodon/src/main/res/values-pt-rPT/strings.xml @@ -4,11 +4,15 @@ Seguinte A carregar informação do servidor… Erro + %s não parece ser um servidor Mastodon. OK A preparar a autenticação… A finalizar a autenticação… + %s reforçou Responder a %s Notificações + %s começou a seguir-te + %s assinalou a sua publicação como favorita Partilhar Configurações Publicar @@ -30,6 +34,7 @@ Seguir A seguir Editar Perfil + Partilhar perfil Silenciar %s Deixar de silenciar @%s Bloquear %s @@ -77,6 +82,10 @@ %d dia restante %d dias restantes + + %,d voto + %,d votos + Fechado Silenciar Conta Confirme para silenciar %s diff --git a/mastodon/src/main/res/values-ro-rRO/strings_sk.xml b/mastodon/src/main/res/values-ro-rRO/strings_sk.xml index 22767f78e..b4c4d3838 100644 --- a/mastodon/src/main/res/values-ro-rRO/strings_sk.xml +++ b/mastodon/src/main/res/values-ro-rRO/strings_sk.xml @@ -338,4 +338,29 @@ Mod negru complet Dezactivați glisarea între file Dezactivați indicatorul de filă activă în formă de pastilă + Căutați în Fedivers + Folosiți UnifiedPush + Alegeți un distribuitor + Niciun distribuitor găsit + Trebuie să instalați un distribuitor pentru ca notificările UnifiedPush să funcționeze. Pentru mai multe informații, vizitați https://unifiedpush.org/ + Afișați pronume în cronologii + Afișați pronume în fire de conversații + Afișați pronume în listările utilizatorilor + Acasă + Căutați + Notificări + Profil + Afișați etichetele filelor în bara de navigare + Durație + Indefinită + 5 minute + 30 minute + 1 oră + 6 ore + 1 zi + 3 zile + 7 zile + Suprapunere audio + Permiteți continuarea redării media curente, suprapunând noua redare + Ați fost menționați de către %s \ No newline at end of file diff --git a/mastodon/src/main/res/values-ru-rRU/strings.xml b/mastodon/src/main/res/values-ru-rRU/strings.xml index b66ed6a4d..e7d5a383b 100644 --- a/mastodon/src/main/res/values-ru-rRU/strings.xml +++ b/mastodon/src/main/res/values-ru-rRU/strings.xml @@ -4,12 +4,17 @@ Далее Получение информации о сервере… Ошибка + %s не является сервером Mastodon. OK Подготовка к авторизации… Завершение авторизации… %s продвинул(а) В ответ %s Уведомления + %s подписался(ась) на вас + %s отправил(а) вам запрос на подписку + %s добавил(а) в избранное ваш пост + %s продвинул(а) ваш пост Посмотреть результаты опроса, в котором вы проголосовали Поделиться Настройки @@ -35,7 +40,7 @@ О себе Подписаться В подписках - Редактировать профиль + Изменить профиль Поделиться профилем Игнорировать %s Убрать %s из игнорируемых @@ -100,14 +105,20 @@ Осталось %d дней Осталось %d дней + + %,d голос + %,d голоса + %,d голосов + %,d голосов + Завершён - Игнорировать аккаунт + Игнорировать Игнорировать %s? Игнорировать - Убрать из игнорируемых + Не игнорировать Убрать %s из игнорируемых? Убрать из игнорируемых - Заблокировать аккаунт + Заблокировать Заблокировать узел Заблокировать %s? Заблокировать @@ -130,6 +141,7 @@ Хэштеги Новости Для вас + Все Упоминания %d человек обсуждает @@ -147,6 +159,7 @@ Вредоносные ссылки, фальшивое взаимодействие или повторяющиеся ответы Нарушаются правила сервера Вы знаете, что подобное нарушает определенные правила + Это что-то другое Проблема не попадает ни под одну из категорий Какие правила нарушены? Выберите все подходящие варианты @@ -156,8 +169,13 @@ Дополнительные комментарии Отправка жалобы… Спасибо за обращение, мы его рассмотрим. + Пока мы проверяем это, вы можете принять меры против %s: Отписаться от %s Отписаться + Вы не будете видеть их посты. Они по-прежнему могут подписываться на вас и видеть ваши посты, но не будут знать, что они в списке игнорируемых. + Вы не будете видеть их посты. Они не смогут видеть ваши посты или подписываться на вас. Они поймут, что они заблокированы. + Не хотите видеть это? + Вот несколько опций управления тем, что вы видите в Mastodon: Назад Имя сервера или URL Правила сервера @@ -184,14 +202,19 @@ Технологии Проверьте входящие сообщения + Нажмите на ссылку, которую мы вам отправили, чтобы подтвердить %s. Мы подождем здесь. + Не получили ссылку? Отправить заново Открыть почту Письмо подтверждения отправлено + Напишите то, о чём думаете Предупреждение о содержании Сохранить Добавить альтернативный текст Публичный Для подписчиков + Для упомянутых + Недавние Пропустить Новые подписчики Избранное @@ -200,8 +223,16 @@ Опросы Выберите аккаунт Сначала войдите в Mastodon + + Можно добавить не более %d вложения + Можно добавить не более %d вложений + Можно добавить не более %d вложений + Можно добавить не более %d вложений + Тип файла %s не поддерживается Размер файла %1$s превышает ограничение в %2$s МБ + Внешний вид + Как на устройстве Светлый Тёмный Поведение @@ -211,17 +242,20 @@ Внести вклад в Mastodon Условия использования Политика конфиденциальности - Очистить кэш медиа + Очистить кэш данных Mastodon для Android v%1$s (%2$d) - Кэш медиа очищен + Кэш очищен + Выйти из %s? + Автор отметил что это материал деликатного характера. + Перейти в профиль %s Дополнительные настройки Новый пост Ответить Продвинуть Добавить в избранное Поделиться - Медиа без описания - Добавить медиа + Файлы без описания + Добавить файл Добавить опрос Эмодзи Домашняя лента @@ -229,6 +263,7 @@ Просмотрщик медиа Подписаться на %s Вы отписались от %s + Вы подписались на %s Отправлен запрос на подписку %s Открыть в браузере Скрыть продвигаемые от %s @@ -236,8 +271,8 @@ Почему вы хотите присоединиться? Это поможет нам рассмотреть вашу заявку. Очистить - Изображение шапки - Аватарка + Обложка профиля + Фото профиля Изменить порядок Скачать Требуется доступ @@ -246,7 +281,13 @@ Ошабка при сохранении файла Файл сохранён Скачивание… + Нет приложения для обработки этого действия + Локальные + Эти посты набирают популярность в Mastodon. + Это новости, о которых говорят в Mastodon. + Это все посты от всех пользователей на вашем сервере (%s). + Вам могут понравиться эти учетные записи, основаные на ваших подписках. Показать новые Загрузить недостающие посты Подписаться в ответ @@ -295,21 +336,21 @@ %d минут назад %d минут назад - редактировано %s - Начальное сообщение - Текст отредактирован + изменено %s + Оригинальный пост + Текст изменён Предупреждение о содержании добавлено - Предупреждение о содержании отредактировано + Предупреждение о содержании изменено Предупреждение о содержании удалено Опрос добавлен Опрос изменён Опрос удалён Файл добавлен Файл удалён - Файл переупорядочен - Отметить как «не для всех» - Снять отметку «не для всех» - Публикация изменена + Файлы переупорядочены + Отметить как «деликатный» + Снять отметку «деликатный» + Пост изменён Редактировать Отменить изменения? Сбой загрузки @@ -336,6 +377,7 @@ С возвращением Войдите на сервер, на котором вы создали свою учётную запись. URL-адрес сервера + Мы выберем сервер на основе вашего языка, если вы продолжите, не сделав выбор. Любой язык Мгновенная регистрация Ручная проверка @@ -348,6 +390,7 @@ Океания Не принимает новых участников Особые интересы + Пароли не совпадают Выбрать за меня Добавить строку Настройка профиля @@ -356,12 +399,14 @@ Популярно на Mastodon Подписаться на всех Отклонить + TL;DR: Мы ничего не собираем и не обрабатываем. Отклонить %s О себе Подписка на пользователей… + %1$s не позволяет зарегистрироваться от %2$s. Попробуйте другой или <a>выберите другой сервер</a>. Все равно показать Спрятать повторно Выберите один или более @@ -369,7 +414,7 @@ Избранное Лента Посмотреть все - Учётные записи + Аккаунты Подтвержденная ссылка Показать Скрыть @@ -381,15 +426,218 @@ Mastodon - это децентрализованная социальная сеть, то есть ни одна компания не контролирует ее. Она состоит из множества независимо управляемых серверов, соединенных вместе. Что такое сервер? + Открытие ссылки… + Эта ссылка не поддерживается в приложении + Выйти из всех аккаунтов + Выйти из всех аккаунтов? + Повторить + Не удалось отправить + %s изображение + %s видео + %s аудиозапись + %s файл + Изображение + Видео + Аудио + GIF + Файл + %d%% загружен + Добавить вариант ответа + Срок + Стиль + Только один + Несколько + Удалить опцию опроса + Стиль опроса + Альтернативный текст + Помощь + Что такое альтернативный текст? + Альтернативный текст содержит описания изображений для людей с ограничениями и тех, кому нужен дополнительный контекст.\n\nВы можете улучшить доступность и понимание для всех, написав четкий, краткий и объективный альтернативный текст.\n\n
  • Фиксируйте важные элементы
  • \n
  • Описывайте изображение
  • \n
  • Используйте правильную структуру предложений
  • \n
  • Избегайте избыточной информации
  • \n
  • Сосредоточьтесь на основных и ключевых визуальных элементах (таких как диаграммы или карты)
+ Изменить пост + Не подтвержденная ссылка + Просмотр эмодзи + Найдите тех, кого ищете + Ничего не найдено по этому запросу + Язык + По умолчанию + Система + Определение языка + Не удается определить язык + Определён + Файлы скрыты + Пост скрыт + Пожаловаться + Аккаунт принадлежит другому серверу. Отправить туда анонимную копию этого отчета? + Переслать на %s + Сообщено + Чтобы больше не видеть их посты в вашей ленте, отмените подписку на них. + Игнорировать %s + Вы уже заблокировали этого пользователя, так что вам больше ничего не нужно делать, пока мы просматриваем ваше обращение. + Вы уже заблокировали этого пользователя, так что вам больше ничего не нужно делать.\n\nСпасибо, что помогаете сделать Mastodon безопасным для всех! + Заблокировать %s + Отметить всё как прочитанное + Отображение + Фильтры + Обзор, правила, модераторы + О %s + Язык по умолчанию + Напоминать об альтернативном тексте + Подтверждать отписку + Подтверждать продвижение + Подтверждать удаление поста + Приостановить все + Отключено + Всех + Тех, кто на меня подписан(а) + Тех, на кого я подписан(а) + Никого + Получать уведомления от + Упоминания и ответы + Просмотреть все уведомления + + %d неделя + %d недели + %d недель + %d недель + + %1$s в %2$s + сегодня + вчера + завтра + Закончится %s + Уведомления возобновятся %s. + Возобновить + Перейти к настройкам уведомлений + О нас + Правила + Администратор + Написать администратору + Включите уведомления из настроек вашего устройства, чтобы увидеть обновления откуда угодно. + Еще больше настроек + Показывать предупреждения о содержании + Скрывать материал деликатного характера + Показывать количество взаимодействий под постами + Пользовательские эмодзи в именах + + через %d секунду + через %d секунд(ы) + через %d секунд(ы) + через %d секунд(ы) + + + через %d минуту + через %d минут(ы) + через %d минут(ы) + через %d минут(ы) + + + через %d час + через %d часа(ов) + через %d часов + через %d часов + + + %d час назад + %d часов(-а) назад + %d часов(-а) назад + %d часов(-а) назад + + В материале отсутствует альтернативный текст + + В %s вашем изображении отсутствует альтернативный текст. Опубликовать в любом случае? + В %s ваших изображениях отсутствует альтернативный текст. Опубликовать в любом случае? + В %s ваших изображениях отсутствует альтернативный текст. Опубликовать в любом случае? + В %s ваших изображениях отсутствует альтернативный текст. Опубликовать в любом случае? + + + В %s вашем файле отсутствует альтернативный текст. Опубликовать в любом случае? + В %s ваших файлах отсутствует альтернативный текст. Опубликовать в любом случае? + В %s ваших файлах отсутствует альтернативный текст. Опубликовать в любом случае? + В %s ваших файлах отсутствует альтернативный текст. Опубликовать в любом случае? + + Один + Два + Три + Четыре + Пост + Отписаться от %s? + Активный + Неактивный + Добавить фильтр + Изменить фильтр + Продолжительность + Игнорируемые слова + Игнорировать + Показывать предупреждения о содержании + Показывать посты, которые соответствуют этому фильтру, но с предупреждением о содержании + Удалить фильтр + Всегда + Закончится %s + + %d игнорируемое слово или фраза + %d игнорируемых слов(а) или фраз + %d игнорируемых слов(а) или фраз + %d игнорируемых слов(а) или фраз + + %1$s и %2$s + %1$s, %2$s и %3$s + %1$s, %2$s и ещё %3$d + Главная & списки + Уведомления + Публичная лента + Темы & ответы + Профили + Название + Удалить фильтр “%s”? + Этот фильтр будет удален из аккаунта на всех ваших устройствах. + Добавить игнорируемое слово + Изменить игнорируемое слово + Добавить + Слово или фраза + Слова не чувствительны к регистру и соответствуют только целым словам.\n\nЕсли вы отфильтруете ключевое слово “Apple”, оно скроет посты, содержащие “apple” или “aPpLe” но не “pineapple.” + Удалить слово “%s”? + Выбрать + Выбрать все + Продолжительность фильтра + Другое + + Удалить %d слово? + Удалить %d слова? + Удалить %d слов? + Удалить %d слов? + + + Выбрано %d + Выбрано %d + Выбрано %d + Выбрано %d + + Не может быть пустым + Уже в списке + Приложение готово к обновлению + Версия %s + Скачивание (%d%%) + Соответствует фильтру “%s” + Поиск в Mastodon + Очистить все + Открывать ссылки в Mastodon + Посты с “%s” + Перейти в %s + Посты с “%s” + Аккаунты с “%s” + %d сек. назад + %d мин. назад + %d ч. назад + %d д. назад diff --git a/mastodon/src/main/res/values-ru-rRU/strings_sk.xml b/mastodon/src/main/res/values-ru-rRU/strings_sk.xml index 1a469f24e..67f35d5a1 100644 --- a/mastodon/src/main/res/values-ru-rRU/strings_sk.xml +++ b/mastodon/src/main/res/values-ru-rRU/strings_sk.xml @@ -270,66 +270,57 @@ Ответы мне Подтверждение перед продвижением Компактная строка продвижения/ответа - отреагировал с %s - отреагировал + %1$s отреагировал: %2$s + %s отреагировал Отправлен ответ на %s Показать тему - Тип контента - Не указан - Обычный текст + Новости + Никогда + Ответы от этого автора + Ответы ото всех + Поделиться с учётной записью + В ответ кому угодно + Никогда + Зонт + Хим. стакан + Кровать + Мусорное ведро + Проверен + Доктор + Алмаз + Добавить ленту + Посты с хештегом… + ...или любые из этих + ...и все из этих + ...но без этих + Введите хештег… + Введите хештеги… + Пожалуйста, имейте в виду, что эти операции обрабатываются сервером. Совмещение может не поддерживаться. + Отображать только местные посты\? + Хештег не может быть пустым HTML Markdown - BBCode - MFM - Включить форматирование публикаций - Позволяет устанавливать тип разметки, такой как Markdown, при создании публикации. Имейте в виду, что не все инстансы поддерживают это. - Тип контента по умолчанию - Это позволяет вам предварительно выбирать тип контента при создании новых публикаций, переопределяя значение, установленное в “Настройках публикации”. - Кнопка \"Показать новые посты\" + BB-код + Скрыть дополнительные опции + Круг + GIF + Обычный текст + Включить форматирование постов + Тип содержимого по умолчанию + Информация о сервере временно недоступна Открыть в приложении - Не удалось открыть в приложении - Поделиться или открыть с помощью учетной записи - дистанционная информация недоступна - Загрузка информации из других инстансов - Выявить одинаковые предупреждения в чатах - Никогда - Тот же автор - Обсуждения - Всегда - Это самые последние сообщения из сети, созданные администраторами вашего экземпляра. - Пузырь - Информация об инстансе временно недоступна - Поделиться с аккаунтом - Не удалось загрузить профиль через %s - Попробуйте получить более точные данные о подписчиках, лайках и увеличениях, загрузив информацию из инстанса автора. - Лента - Другим - Переключатель «Переслать отчет» по умолчанию - Участники эксклюзивного списка не будут отображаться на вашей домашней ленте– если ваш инстанс поддерживает это. - Никто - Автор - Все - Все - Никто - Эксклюзивный список - Сделайте список эксклюзивным - Кровать - Корзина - Верифицированный - Врач - Бриллиант - Зонтик - Добавить ленту - Посты, содержащие хэштег… - ...или любой из этих - ...но ни одно из этих - Введите хэштег… - Введите хэштеги… - Показывать только локальные записи\? - Хэштег не должен быть пустым - Показать дополнительные параметры - Мерный стакан - ...и каждый из этих - Пожалуйста, обратите внимание, что сервер обрабатывает эти операции. Возможно, их объединение не поддерживается. - Скрыть дополнительные параметры + Не удалось загрузить профиль с %s + Загрузить информацию с удалённых серверов + Показать дополнительные опции + Показать содержимое + Произношение + Сервер + Невозможно открыть в приложении + Поделиться или открыть с учётной записью + удалённая информация недоступна + Переключить ленту + Тип содержимого + Не указано + Это недавние посты из сети, управляемой администраторами этого сервера. + Искать в Федивёрсе \ No newline at end of file diff --git a/mastodon/src/main/res/values-sl-rSI/strings.xml b/mastodon/src/main/res/values-sl-rSI/strings.xml index 15b04e858..eb85902f4 100644 --- a/mastodon/src/main/res/values-sl-rSI/strings.xml +++ b/mastodon/src/main/res/values-sl-rSI/strings.xml @@ -15,6 +15,7 @@ %s vam je poslal_a zahtevo za sledenje %s je vzljubil/a vašo objavo %s je izpostavila/a vašo objavo + Pokaži rezultate ankete, v kateri sem sodeloval_a Deli Nastavitve Objavi @@ -40,6 +41,7 @@ Sledi Sledi Uredi profil + Profil v skupno rabo Utišaj %s Odtišaj %s Blokiraj %s @@ -206,6 +208,7 @@ Javno Samo sledilci Samo osebe, ki jih omenjam + Nedavno Preskoči Novi sledilci Priljubljeni @@ -230,6 +233,8 @@ Počisti medijski predpomnilnik Mastodon za Android v%1$s (%2$d) Predpomnilnik medijev počiščen + Ali se želite odjaviti iz %s? + Avtor je to vsebino označil kot občutljivo. Pojdi na profil %s Več možnosti Nova objava @@ -265,6 +270,7 @@ Datoteka shranjena Prejemanje … Ni programa za ravnanje s tem dejanjem + Krajevno To so objave, ki plenijo pozornost po Mastodonu. Pokaži nove objave @@ -424,8 +430,13 @@ Označi vse kot prebrano Filtri + O programu %s Privzeti jezik objave + Premor za vse + Izklopljeno Nihče + Omembe in odgovori + Zaustavi vsa obvestila danes včeraj @@ -436,20 +447,28 @@ O programu Pravila Skrbnik + Še več nastavitev Pokaži opozorilo o vsebini Skrij medij, ki je označen kot občutljiv Ena + Objavi + Dejaven + Nedejaven Dodaj filter Uredi filter Trajanje + Utišane besede + Pokaži z oporozilom o vsebini Izbriši filter Za vedno Obvestila Javne časovnice + Niti in odgovori Profili Naslov + Ali želite izbrisati filter »%s«? Dodaj Beseda ali besedna zveza Izberi vse @@ -457,12 +476,18 @@ Po meri Ne sme biti prazno Že na seznamu + Posodobitev aplikacije je pripravljena Različica %s Prenos %d%% + Se ujema s filtrom »%s« + Išči v Mastodonu Počisti vse Odpri URL v Mastodonu + Objave s/z »%s« Pojdi na %s + Objave s/z »%s« + Osebe s/z »%s« pred %d s pred %d meseci diff --git a/mastodon/src/main/res/values-sl-rSI/strings_sk.xml b/mastodon/src/main/res/values-sl-rSI/strings_sk.xml index 62500d854..b4f165883 100644 --- a/mastodon/src/main/res/values-sl-rSI/strings_sk.xml +++ b/mastodon/src/main/res/values-sl-rSI/strings_sk.xml @@ -252,7 +252,7 @@ Merilnik Razširi Nekatere priloge se niso naložile do konca. - CW predpona odgovora z »re:« + CW predpona odgovora z “re:” Strni Strni zelo dolge objave Filtrirano: %s @@ -312,4 +312,28 @@ %1$s se je odzval z %2$s %s se je odzval To so najnovejše objave iz omrežja, ki so jih kurirali skrbniki vaše instance. + Samodejno razkrij enake CW-je v odgovorih + Nikoli + Odgovori istega avtorja + Odgovori vseh + V odgovor komurkoli + Nikoli + Samo v odgovoru drugim + Člani ekskluzivnega seznama ne bodo prikazani na vaši domači časovnici – če to podpira vaša instanca. + Prikaži napredne možnosti + Skrij napredne možnosti + Ekskluzivni seznam + Naj bo seznam ekskluziven + Privzeto stikalo “Posreduj poročilo” + Spremljan od %s + To vam omogoča, da pri ustvarjanju novih objav predhodno izberete vrsto vsebine, s čimer prepišete vrednost, nastavljeno v »Nastavitvah objav«. + Poskusite pridobiti natančnejše sezname za sledilce, všečke in spodbude, tako da naložite informacije iz originalne instance. + Prikaži vsebino + Zaimki + Preklopi časovnico + Instanca + Onemogoči indikator aktivnega zavihka v obliki tabletke + Čisto črni način + Odgovori meni + Iskanje v Fediverse \ No newline at end of file diff --git a/mastodon/src/main/res/values-sv-rSE/strings.xml b/mastodon/src/main/res/values-sv-rSE/strings.xml index 5f20b3b0e..85df43fac 100644 --- a/mastodon/src/main/res/values-sv-rSE/strings.xml +++ b/mastodon/src/main/res/values-sv-rSE/strings.xml @@ -4,12 +4,14 @@ Nästa Hämtar serverinfo… Fel + %s verkar inte vara en mastodon server. OK Förbereder för autentisering… Slutför autentisering… %s boostade Som svar på %s Notiser + %s följde dig Dela Inställningar Publicera @@ -120,6 +122,7 @@ Rapportera %s Välj den bästa träffen + Jag gillar det inte Det är inget som du vill se Det är skräppost Skadliga länkar, bedrägligt beteende eller repetitiva svar @@ -169,6 +172,7 @@ Lägg till alternativtext Offentlig Endast följare + Nyligen Hoppa över Nya följare Favoriter @@ -333,6 +337,7 @@ Visa Dölj Gå med %s + Välj en annan server eller Läs mer Välkommen till Mastodon @@ -343,6 +348,10 @@ Logga ut från alla konton? Försök igen + %s bild + %s video + %s ljud + %s fil Ljud GIF Fil @@ -358,6 +367,7 @@ Översikt, regler och moderatorer Om %s + Fråga innan du raderar inlägg Ingen %d vecka diff --git a/mastodon/src/main/res/values-th-rTH/strings.xml b/mastodon/src/main/res/values-th-rTH/strings.xml index 50ff2f6fa..a7c1b334d 100644 --- a/mastodon/src/main/res/values-th-rTH/strings.xml +++ b/mastodon/src/main/res/values-th-rTH/strings.xml @@ -354,7 +354,7 @@ ซ่อนใหม่ เลือกจำนวนหนึ่งหรือมากกว่า บันทึกการเปลี่ยนแปลง - แนะนำ + น่าสนใจ เส้นเวลา ดูทั้งหมด บัญชี @@ -509,7 +509,7 @@ %1$s และ %2$s %1$s, %2$s และ %3$s - %1$s, %2$s และเพิ่มเติมอีก %3$d + %1$s, %2$s และอีก %3$d เพิ่มเติม หน้าแรกและรายการ การแจ้งเตือน เส้นเวลาสาธารณะ diff --git a/mastodon/src/main/res/values-uk-rUA/strings_sk.xml b/mastodon/src/main/res/values-uk-rUA/strings_sk.xml index 2e25dedc0..53b2d1596 100644 --- a/mastodon/src/main/res/values-uk-rUA/strings_sk.xml +++ b/mastodon/src/main/res/values-uk-rUA/strings_sk.xml @@ -335,4 +335,43 @@ GIF Показати матеріали Вимкнути індикатор активної вкладки у формі таблетки + Пошук у Федівсесвіті + Постачальника не знайдено + Головна + Пошук + Профіль + Тривалість + Нескінченно + 5 хвилин + 30 хвилин + 1 година + 6 годин + 1 день + 3 дні + 7 днів + Вас згадує %s + Показувати займенники у стрічках + Показувати займенники у списках користувачів + Накладення звуку + Дозволити продовжувати відтворення вже відтворюваного медіафайлу, накладаючи на нього нове відтворення + Використовувати UnifiedPush + Вибрати постачальника + Щоб сповіщення UnifiedPush працювали, потрібно встановити постачальника. Для отримання додаткової інформації відвідайте https://unifiedpush.org/ + Сповіщення + Показувати ярлики вкладок на панелі навігації + Показувати займенники у гілках + Показувати реакції емоджі у стрічках + + Один користувач зреагував %2$s + %1$,d користувачі зреагували %2$s + %1$,d користувачів зреагували %2$s + %1$,d користувачів зреагували %2$s + + Реагуйте за допомогою емоджі + Торкніться ще раз, щоб відкрити системну клавіатуру + Увімкнути реакції з емоджі + Показує реакції емоджі на дописи та дає змогу взаємодіяти з ними. Деякі модифіковані версії Mastodon підтримують цю функцію, але Mastodon не підтримує. + Вам потрібно ввести емоджі + Введіть, щоб відреагувати з емоджі + Чи відображати реакції емоджі у стрічках. Якщо цю опцію вимкнено, реакції емоджі показуватимуться лише під час перегляду гілки. \ No newline at end of file diff --git a/mastodon/src/main/res/values-vi-rVN/strings.xml b/mastodon/src/main/res/values-vi-rVN/strings.xml index c6d99afc5..3b7255a8d 100644 --- a/mastodon/src/main/res/values-vi-rVN/strings.xml +++ b/mastodon/src/main/res/values-vi-rVN/strings.xml @@ -78,7 +78,7 @@ %,d người bình chọn - Kết thúc + Đóng Ẩn người này Bạn muốn ẩn %s? Ẩn @@ -219,7 +219,7 @@ Thêm media Tạo bình chọn Emoji - Bảng tin + Trang chính Hồ sơ của tôi Xem media Theo dõi %s diff --git a/mastodon/src/main/res/values-zh-rCN/strings.xml b/mastodon/src/main/res/values-zh-rCN/strings.xml index 397a1d577..a66a0939b 100644 --- a/mastodon/src/main/res/values-zh-rCN/strings.xml +++ b/mastodon/src/main/res/values-zh-rCN/strings.xml @@ -313,7 +313,7 @@ 还没有内容 此实例不接受新注册。 复制成功 - 添加到书签 + 添加书签 移除书签 书签 你喜欢的 @@ -368,7 +368,7 @@ 欢迎来到Mastodon Mastodon 是去中心化的社交网络,这意味着它不由任何企业独控。它是由众多独立运行的实例共同联结而成的。 是什么实例? - + 打开链接… 应用不支持该链接 登出所有账户 diff --git a/mastodon/src/main/res/values-zh-rTW/strings_sk.xml b/mastodon/src/main/res/values-zh-rTW/strings_sk.xml index 5c7888ede..89d16caf2 100644 --- a/mastodon/src/main/res/values-zh-rTW/strings_sk.xml +++ b/mastodon/src/main/res/values-zh-rTW/strings_sk.xml @@ -1,6 +1,6 @@ - 嘟文 + 鋪文 嘟文通知 允許複選 翻譯 diff --git a/mastodon/src/main/res/values/strings.xml b/mastodon/src/main/res/values/strings.xml index 59f5f493a..077d7fac0 100644 --- a/mastodon/src/main/res/values/strings.xml +++ b/mastodon/src/main/res/values/strings.xml @@ -393,7 +393,7 @@ Welcome to Mastodon Mastodon is a decentralized social network, meaning no single company controls it. It’s made up of many independently-run servers, all connected together. What are servers? - + Every Mastodon account is hosted on a server — each with its own values, rules, & admins. No matter which one you pick, you can follow and interact with people on any server. Opening link… This link is not supported in the app Log out of all accounts diff --git a/metadata/fa-IR/changelogs/51.txt b/metadata/fa-IR/changelogs/51.txt new file mode 100644 index 000000000..f3dd545f7 --- /dev/null +++ b/metadata/fa-IR/changelogs/51.txt @@ -0,0 +1,6 @@ +- امکان باز کردن فرسته اصلی را در حین پاسخ دادن (با کلیک برروی خط "در پاسخ به ...") +- ادغام تغییرات بالادست و رفع اشکال +- کد استفاده نشده ”App Center“ را حذف کنید +- اضافه کردن نسخه بدون خط زمانی فدریتد برای فروشگاه Play +- افزودن URI تغییر مسیر سفارشی برای ورود آسان تر +- تغییر پیوند مشارکت diff --git a/metadata/fa-IR/changelogs/55.txt b/metadata/fa-IR/changelogs/55.txt new file mode 100644 index 000000000..5bcc7aac8 --- /dev/null +++ b/metadata/fa-IR/changelogs/55.txt @@ -0,0 +1,4 @@ +- رندر شکسته تگ های HTML را برطرف کنید و قالب بندی Markdown رندر را فعال کنید +- پروژه ترجمه Weblate راه‌اندازی +- اضافه کردن ضامن برای جدول زمانی فدریتد +- نسخه های 52-54 تنظیمات کوچکی برای انتشار در Google Play بودند diff --git a/metadata/fa-IR/changelogs/56.txt b/metadata/fa-IR/changelogs/56.txt new file mode 100644 index 000000000..79c42d7ba --- /dev/null +++ b/metadata/fa-IR/changelogs/56.txt @@ -0,0 +1,6 @@ +- تم‌های رنگی سفارشی توسط @LucasGGamerM +- لوگوی متنی جدید "مگالودون" ارسال شده توسط @LucasGGamerM +- جستجوی بهتر ایموجی هنگام نوشتن +- رای گیری بهینه شده (نمایش رای خود، دکمه رای همیشه نمایش داده شود، قطع نکردن پاسخ های طولانی) +- افزودن تنظیمات آگاهی فشار برای آگاهی‌های فرسته +- رفع اشکال diff --git a/metadata/fa-IR/changelogs/59.txt b/metadata/fa-IR/changelogs/59.txt new file mode 100644 index 000000000..69c67e98e --- /dev/null +++ b/metadata/fa-IR/changelogs/59.txt @@ -0,0 +1,6 @@ +- افزودن انتخابگر زبان +- افزودن تابع ترجمه +- بهبود معنایی برای رأی گیری در نظرسنجی‌ها (دکمه های رادیویی و چک باکس) +- افزودن گزینه‌ای تا امکان رای دادن به چندین گزینه در نظرسنجی ها فراهم شود +- صفحه ورود جدید +- رفع اشکال diff --git a/metadata/fa-IR/changelogs/61.txt b/metadata/fa-IR/changelogs/61.txt new file mode 100644 index 000000000..6de641236 --- /dev/null +++ b/metadata/fa-IR/changelogs/61.txt @@ -0,0 +1,5 @@ +- تم های رنگی جدید: متریال یو و قرمز +- رنگ های خاکستری تیره جدید برای همه تم ها +- نماد تقویت متمایزتر +- انیمیشن برای دکمه های تعامل +- رفع اشکال (کرش در برخی از فرسته‌ها، "سیاهه‌ها با"، زبان فرسته پیش فرض) diff --git a/metadata/fa-IR/short_description.txt b/metadata/fa-IR/short_description.txt new file mode 100644 index 000000000..f1de125f7 --- /dev/null +++ b/metadata/fa-IR/short_description.txt @@ -0,0 +1 @@ +ماستودون برای اندروید اما صورتی است و ویژگی‌های بیشتری دارد diff --git a/metadata/fa-IR/title.txt b/metadata/fa-IR/title.txt new file mode 100644 index 000000000..5d31fbd2a --- /dev/null +++ b/metadata/fa-IR/title.txt @@ -0,0 +1 @@ +مگالودون diff --git a/metadata/pt-BR/changelogs/76.txt b/metadata/pt-BR/changelogs/76.txt new file mode 100644 index 000000000..249701bad --- /dev/null +++ b/metadata/pt-BR/changelogs/76.txt @@ -0,0 +1,6 @@ +- Filtros aprimorados, incluindo compatibilidade com "Ocultar com aviso" +- Página de perfil redesenhada com metadados diretamente abaixo da biografia +- Função Recolher/expandir para postagens muito longas +- Opção para prefixar automaticamente as respostas CWs com “re:” +- Opção para ocultar botões de interação na linha do tempo +- Várias correções de bugs, ajustes e melhorias diff --git a/metadata/pt-BR/changelogs/77.txt b/metadata/pt-BR/changelogs/77.txt new file mode 100644 index 000000000..0be45d412 --- /dev/null +++ b/metadata/pt-BR/changelogs/77.txt @@ -0,0 +1,4 @@ +- Pressione e segure o botão seguir para seguir perfis de outra conta +- Opção para abrir perfis em outra conta +- Ocultar automaticamente o botão de composição ao rolar a linha do tempo +- Correção de falha ao abrir os perfis do administrador do servidor diff --git a/metadata/pt-BR/changelogs/83.txt b/metadata/pt-BR/changelogs/83.txt new file mode 100644 index 000000000..bf8aee1e3 --- /dev/null +++ b/metadata/pt-BR/changelogs/83.txt @@ -0,0 +1,5 @@ +- Curtir/marcar/responder diretamente na aba de notificação +- Cabeçalhos mais bonitos e consistentes para reblogs e respostas na linha do tempo +- Ponto de notificação (que ainda não carrega as notificações) +- Para usuários do Akkoma: Visibilidade de resposta, respostas de tópicos classificados, citações, … +- Correções de falhas e pequenos ajustes diff --git a/metadata/pt-BR/changelogs/94.txt b/metadata/pt-BR/changelogs/94.txt new file mode 100644 index 000000000..69525ffa1 --- /dev/null +++ b/metadata/pt-BR/changelogs/94.txt @@ -0,0 +1,8 @@ +- Visualização de thread melhorada e mais clara +- Abra contas/postagens compartilhando um site para o Megalodon +- Carregar seguidores/favoritos/… listagens da instância de origem +- Melhorias de compatibilidade para servidores não-Mastodon +- Opção para definir o tipo de conteúdo da publicação +- Suporte para copiar URL de aplicativos recentes em dispositivos Pixel +- Revelação automática de CWs iguais em threads +- Correções de bugs e melhorias na interface do usuário diff --git a/metadata/ru/changelogs/65.txt b/metadata/ru/changelogs/65.txt new file mode 100644 index 000000000..1f6d9c920 --- /dev/null +++ b/metadata/ru/changelogs/65.txt @@ -0,0 +1,10 @@ +- Черновики и отложенные посты +- Отображение изначального поста при ответе +- Фильтры, совместимые с Mastodon 4.0 (пока без функционала "скрыть с предупреждением") +- Долгое нажатие для взаимодействия с постами (ответить, продвинуть, оценить, добавить в закладки) с другого авторизованного аккаунта +- Иконки во всех меню +- Переключение пересылаемых репортов +- Добавление упоминаний при использовании функции "" +- Опция +- Опция +- Исправления ошибок diff --git a/metadata/ru/changelogs/67.txt b/metadata/ru/changelogs/67.txt new file mode 100644 index 000000000..991be57eb --- /dev/null +++ b/metadata/ru/changelogs/67.txt @@ -0,0 +1,10 @@ +- Новая домашняя вкладка с публичными лентами +- Отображение анонсов сервера +- Масштабирование текста в соответствие с настройками системы +- Улучшена фильтрация (...) +- Список +- Удаление подписчиков по мягкой блокировке +- Запрет на связи с фашистами +- Исправлен +- Исправления и улучшения интерфейса +- Список изменений добавлен к проверщику обновлений diff --git a/metadata/sl/changelogs/94.txt b/metadata/sl/changelogs/94.txt new file mode 100644 index 000000000..b64953d97 --- /dev/null +++ b/metadata/sl/changelogs/94.txt @@ -0,0 +1,8 @@ +- Izboljšan, jasnejši pogled tem +- Odprite račune/objave z deljenjem spletne strani z Megalodonom +- Naloži sezname sledilcev/priljubljenih/… iz originalne instance +- Izboljšave združljivosti za strežnike, ki niso Mastodon-ovi +- Možnost nastavitve vrste vsebine objave +- Podpora za kopiranje URL-jev iz "nedavnih aplikacij" v napravah Pixel +- Samodejno razkrij enake CW-je v temah +- Popravki napak in izboljšave uporabniškega vmesnika