Merge remote-tracking branch 'megalodon_weblate/main'

# Conflicts:
#	mastodon/build.gradle
#	mastodon/src/main/java/org/joinmastodon/android/model/TimelineDefinition.java
#	mastodon/src/main/res/values-pt-rBR/strings_sk.xml
This commit is contained in:
LucasGGamerM 2023-06-15 14:58:12 -03:00
commit 1beba48b66
22 changed files with 335 additions and 62 deletions

View file

@ -30,6 +30,9 @@
*;
}
# i don't know how proguard works
-keep class org.joinmastodon.android.** { *; }
# Keep all enums for debugging purposes
-keepnames public enum * {
*;
@ -86,3 +89,6 @@
-keep,allowobfuscation,allowshrinking class * extends com.google.gson.reflect.TypeToken
##---------------End: proguard configuration for Gson ----------
-dontobfuscate

View file

@ -4,16 +4,18 @@ import org.joinmastodon.android.api.MastodonAPIRequest;
import org.joinmastodon.android.model.ListTimeline;
public class CreateList extends MastodonAPIRequest<ListTimeline> {
public CreateList(String title, ListTimeline.RepliesPolicy repliesPolicy) {
public CreateList(String title, boolean exclusive, ListTimeline.RepliesPolicy repliesPolicy) {
super(HttpMethod.POST, "/lists", ListTimeline.class);
Request req = new Request();
req.title = title;
req.exclusive = exclusive;
req.repliesPolicy = repliesPolicy;
setRequestBody(req);
}
public static class Request {
public String title;
public boolean exclusive;
public ListTimeline.RepliesPolicy repliesPolicy;
}
}

View file

@ -4,10 +4,11 @@ import org.joinmastodon.android.api.MastodonAPIRequest;
import org.joinmastodon.android.model.ListTimeline;
public class UpdateList extends MastodonAPIRequest<ListTimeline> {
public UpdateList(String id, String title, ListTimeline.RepliesPolicy repliesPolicy) {
public UpdateList(String id, String title, boolean exclusive, ListTimeline.RepliesPolicy repliesPolicy) {
super(HttpMethod.PUT, "/lists/" + id, ListTimeline.class);
CreateList.Request req = new CreateList.Request();
req.title = title;
req.exclusive = exclusive;
req.repliesPolicy = repliesPolicy;
setRequestBody(req);
}

View file

@ -6,10 +6,12 @@ public class ListUpdatedCreatedEvent {
public final String id;
public final String title;
public final ListTimeline.RepliesPolicy repliesPolicy;
public final boolean exclusive;
public ListUpdatedCreatedEvent(String id, String title, ListTimeline.RepliesPolicy repliesPolicy) {
public ListUpdatedCreatedEvent(String id, String title, boolean exclusive, ListTimeline.RepliesPolicy repliesPolicy) {
this.id = id;
this.title = title;
this.exclusive = exclusive;
this.repliesPolicy = repliesPolicy;
}
}

View file

@ -498,6 +498,7 @@ public class HomeTabFragment extends MastodonToolbarFragment implements Scrollab
} else if ((list = listItems.get(id)) != null) {
args.putString("listID", list.id);
args.putString("listTitle", list.title);
args.putBoolean("listIsExclusive", list.exclusive);
if (list.repliesPolicy != null) args.putInt("repliesPolicy", list.repliesPolicy.ordinal());
Nav.go(getActivity(), ListTimelineFragment.class, args);
} else if ((hashtag = hashtagsItems.get(id)) != null) {

View file

@ -24,7 +24,7 @@ import org.joinmastodon.android.model.Status;
import org.joinmastodon.android.model.TimelineDefinition;
import org.joinmastodon.android.ui.M3AlertDialogBuilder;
import org.joinmastodon.android.ui.utils.UiUtils;
import org.joinmastodon.android.ui.views.ListTimelineEditor;
import org.joinmastodon.android.ui.views.ListEditor;
import org.joinmastodon.android.utils.StatusFilterPredicate;
import java.util.List;
@ -36,12 +36,12 @@ import me.grishka.appkit.api.ErrorResponse;
import me.grishka.appkit.api.SimpleCallback;
import me.grishka.appkit.utils.V;
public class ListTimelineFragment extends PinnableStatusListFragment {
private String listID;
private String listTitle;
@Nullable
private ListTimeline.RepliesPolicy repliesPolicy;
private boolean exclusive;
@Override
protected boolean wantsComposeButton() {
@ -54,6 +54,7 @@ public class ListTimelineFragment extends PinnableStatusListFragment {
Bundle args = getArguments();
listID = args.getString("listID");
listTitle = args.getString("listTitle");
exclusive = args.getBoolean("listIsExclusive");
repliesPolicy = ListTimeline.RepliesPolicy.values()[args.getInt("repliesPolicy", 0)];
setTitle(listTitle);
@ -88,8 +89,8 @@ public class ListTimelineFragment extends PinnableStatusListFragment {
public boolean onOptionsItemSelected(MenuItem item) {
if (super.onOptionsItemSelected(item)) return true;
if (item.getItemId() == R.id.edit) {
ListTimelineEditor editor = new ListTimelineEditor(getContext());
editor.applyList(listTitle, repliesPolicy);
ListEditor editor = new ListEditor(getContext());
editor.applyList(listTitle, exclusive, repliesPolicy);
new M3AlertDialogBuilder(getActivity())
.setTitle(R.string.sk_edit_list_title)
.setIcon(R.drawable.ic_fluent_people_28_regular)
@ -97,14 +98,15 @@ public class ListTimelineFragment extends PinnableStatusListFragment {
.setPositiveButton(R.string.save, (d, which) -> {
String newTitle = editor.getTitle().trim();
setTitle(newTitle);
new UpdateList(listID, newTitle, editor.getRepliesPolicy()).setCallback(new Callback<>() {
new UpdateList(listID, newTitle, editor.isExclusive(), editor.getRepliesPolicy()).setCallback(new Callback<>() {
@Override
public void onSuccess(ListTimeline list) {
if (getActivity() == null) return;
setTitle(list.title);
listTitle = list.title;
repliesPolicy = list.repliesPolicy;
E.post(new ListUpdatedCreatedEvent(listID, listTitle, repliesPolicy));
exclusive = list.exclusive;
E.post(new ListUpdatedCreatedEvent(listID, listTitle, exclusive, repliesPolicy));
}
@Override
@ -127,7 +129,7 @@ public class ListTimelineFragment extends PinnableStatusListFragment {
@Override
protected TimelineDefinition makeTimelineDefinition() {
return TimelineDefinition.ofList(listID, listTitle);
return TimelineDefinition.ofList(listID, listTitle, exclusive);
}
@Override

View file

@ -27,7 +27,7 @@ import org.joinmastodon.android.events.ListUpdatedCreatedEvent;
import org.joinmastodon.android.model.ListTimeline;
import org.joinmastodon.android.ui.DividerItemDecoration;
import org.joinmastodon.android.ui.M3AlertDialogBuilder;
import org.joinmastodon.android.ui.views.ListTimelineEditor;
import org.joinmastodon.android.ui.views.ListEditor;
import org.joinmastodon.android.utils.ProvidesAssistContent;
import java.util.ArrayList;
@ -91,18 +91,18 @@ public class ListsFragment extends RecyclerFragment<ListTimeline> implements Scr
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.create) {
ListTimelineEditor editor = new ListTimelineEditor(getContext());
ListEditor editor = new ListEditor(getContext());
new M3AlertDialogBuilder(getActivity())
.setTitle(R.string.sk_create_list_title)
.setIcon(R.drawable.ic_fluent_people_add_28_regular)
.setView(editor)
.setPositiveButton(R.string.sk_create, (d, which) ->
new CreateList(editor.getTitle(), editor.getRepliesPolicy()).setCallback(new Callback<>() {
new CreateList(editor.getTitle(), editor.isExclusive(), editor.getRepliesPolicy()).setCallback(new Callback<>() {
@Override
public void onSuccess(ListTimeline list) {
data.add(0, list);
adapter.notifyItemRangeInserted(0, 1);
E.post(new ListUpdatedCreatedEvent(list.id, list.title, list.repliesPolicy));
E.post(new ListUpdatedCreatedEvent(list.id, list.title, list.exclusive, list.repliesPolicy));
}
@Override
@ -185,6 +185,7 @@ public class ListsFragment extends RecyclerFragment<ListTimeline> implements Scr
if (item.id.equals(event.id)) {
item.title = event.title;
item.repliesPolicy = event.repliesPolicy;
item.exclusive = event.exclusive;
adapter.notifyItemChanged(i);
break;
}
@ -242,7 +243,9 @@ public class ListsFragment extends RecyclerFragment<ListTimeline> implements Scr
@Override
public void onBind(ListTimeline item) {
title.setText(item.title);
title.setCompoundDrawablesRelativeWithIntrinsicBounds(itemView.getContext().getDrawable(R.drawable.ic_fluent_people_24_regular), null, null, null);
title.setCompoundDrawablesRelativeWithIntrinsicBounds(itemView.getContext().getDrawable(
item.exclusive ? R.drawable.ic_fluent_rss_24_regular : R.drawable.ic_fluent_people_24_regular
), null, null, null);
if (profileAccountId != null) {
Boolean checked = userInList.get(item.id);
listToggle.setVisibility(View.VISIBLE);
@ -263,6 +266,7 @@ public class ListsFragment extends RecyclerFragment<ListTimeline> implements Scr
args.putString("account", accountID);
args.putString("listID", item.id);
args.putString("listTitle", item.title);
args.putBoolean("listIsExclusive", item.exclusive);
if (item.repliesPolicy != null) args.putInt("repliesPolicy", item.repliesPolicy.ordinal());
Nav.go(getActivity(), ListTimelineFragment.class, args);
}

View file

@ -27,7 +27,7 @@ public class Filter extends BaseModel{
public FilterAction filterAction;
@SerializedName("context")
private List<FilterContext> _context;
protected List<FilterContext> _context;
private transient Pattern pattern;

View file

@ -14,6 +14,7 @@ public class ListTimeline extends BaseModel {
@RequiredField
public String title;
public RepliesPolicy repliesPolicy;
public boolean exclusive;
@NonNull
@Override
@ -22,6 +23,7 @@ public class ListTimeline extends BaseModel {
"id='" + id + '\'' +
", title='" + title + '\'' +
", repliesPolicy=" + repliesPolicy +
", exclusive=" + exclusive +
'}';
}

View file

@ -13,7 +13,7 @@ public class Poll extends BaseModel{
@RequiredField
public String id;
public Instant expiresAt;
private boolean expired;
protected boolean expired;
public boolean multiple;
public int votersCount;
public int votesCount;

View file

@ -32,18 +32,21 @@ public class TimelineDefinition {
private @Nullable String listId;
private @Nullable String listTitle;
private boolean listIsExclusive;
private @Nullable String domain;
private @Nullable String hashtagName;
public static TimelineDefinition ofList(String listId, String listTitle) {
public static TimelineDefinition ofList(String listId, String listTitle, boolean listIsExclusive) {
TimelineDefinition def = new TimelineDefinition(TimelineType.LIST);
def.listId = listId;
def.listTitle = listTitle;
def.listIsExclusive = listIsExclusive;
return def;
}
public static TimelineDefinition ofList(ListTimeline list) {
return ofList(list.id, list.title);
return ofList(list.id, list.title, list.exclusive);
}
public static TimelineDefinition ofHashtag(String hashtag) {
@ -108,7 +111,7 @@ public class TimelineDefinition {
case LOCAL -> Icon.LOCAL;
case FEDERATED -> Icon.FEDERATED;
case POST_NOTIFICATIONS -> Icon.POST_NOTIFICATIONS;
case LIST -> Icon.LIST;
case LIST -> listIsExclusive ? Icon.EXCLUSIVE_LIST : Icon.LIST;
case HASHTAG -> Icon.HASHTAG;
case CUSTOM_LOCAL_TIMELINE -> Icon.CUSTOM_LOCAL_TIMELINE;
case BUBBLE -> Icon.BUBBLE;
@ -169,6 +172,7 @@ public class TimelineDefinition {
def.title = title;
def.listId = listId;
def.listTitle = listTitle;
def.listIsExclusive = listIsExclusive;
def.hashtagName = hashtagName;
def.domain = domain;
def.icon = icon == null ? null : Icon.values()[icon.ordinal()];
@ -179,6 +183,7 @@ public class TimelineDefinition {
if (type == TimelineType.LIST) {
args.putString("listTitle", title);
args.putString("listID", listId);
args.putBoolean("listIsExclusive", listIsExclusive);
} else if (type == TimelineType.HASHTAG) {
args.putString("hashtag", hashtagName);
} else if (type == TimelineType.CUSTOM_LOCAL_TIMELINE) {
@ -196,6 +201,7 @@ public class TimelineDefinition {
CITY(R.drawable.ic_fluent_city_24_regular, R.string.sk_icon_city),
IMAGE(R.drawable.ic_fluent_image_24_regular, R.string.sk_icon_image),
NEWS(R.drawable.ic_fluent_news_24_regular, R.string.sk_icon_news),
FEED(R.drawable.ic_fluent_rss_24_regular, R.string.sk_icon_feed),
COLOR_PALETTE(R.drawable.ic_fluent_color_24_regular, R.string.sk_icon_color_palette),
CAT(R.drawable.ic_fluent_animal_cat_24_regular, R.string.sk_icon_cat),
DOG(R.drawable.ic_fluent_animal_dog_24_regular, R.string.sk_icon_dog),
@ -250,6 +256,7 @@ public class TimelineDefinition {
FEDERATED(R.drawable.ic_fluent_earth_24_regular, R.string.sk_timeline_federated, true),
POST_NOTIFICATIONS(R.drawable.ic_fluent_chat_24_regular, R.string.sk_timeline_posts, true),
LIST(R.drawable.ic_fluent_people_24_regular, R.string.sk_list, true),
EXCLUSIVE_LIST(R.drawable.ic_fluent_rss_24_regular, R.string.sk_exclusive_list, true),
HASHTAG(R.drawable.ic_fluent_number_symbol_24_regular, R.string.sk_hashtag, true),
CUSTOM_LOCAL_TIMELINE(R.drawable.ic_fluent_people_community_24_regular, R.string.sk_timeline_local, true),
BUBBLE(R.drawable.ic_fluent_circle_24_regular, R.string.sk_timeline_bubble, true);

View file

@ -9,6 +9,7 @@ import android.view.MenuItem;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.PopupMenu;
import android.widget.Switch;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@ -16,18 +17,20 @@ import androidx.annotation.Nullable;
import org.joinmastodon.android.R;
import org.joinmastodon.android.model.ListTimeline;
public class ListTimelineEditor extends LinearLayout {
public class ListEditor extends LinearLayout {
private ListTimeline.RepliesPolicy policy = null;
private final TextInputFrameLayout input;
private final Button button;
private final Switch exclusiveSwitch;
@SuppressLint("ClickableViewAccessibility")
public ListTimelineEditor(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
public ListEditor(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
LayoutInflater.from(context).inflate(R.layout.list_timeline_editor, this);
button = findViewById(R.id.button);
input = findViewById(R.id.input);
exclusiveSwitch = findViewById(R.id.exclusive_checkbox);
PopupMenu popupMenu = new PopupMenu(context, button, Gravity.CENTER_HORIZONTAL);
popupMenu.inflate(R.menu.list_reply_policies);
@ -36,12 +39,15 @@ public class ListTimelineEditor extends LinearLayout {
button.setOnTouchListener(popupMenu.getDragToOpenListener());
button.setOnClickListener(v->popupMenu.show());
input.getEditText().setHint(context.getString(R.string.sk_list_name_hint));
findViewById(R.id.exclusive)
.setOnClickListener(v -> exclusiveSwitch.setChecked(!exclusiveSwitch.isChecked()));
setRepliesPolicy(ListTimeline.RepliesPolicy.LIST);
}
public void applyList(String title, @Nullable ListTimeline.RepliesPolicy policy) {
public void applyList(String title, boolean exclusive, @Nullable ListTimeline.RepliesPolicy policy) {
input.getEditText().setText(title);
exclusiveSwitch.setChecked(exclusive);
if (policy != null) setRepliesPolicy(policy);
}
@ -53,6 +59,10 @@ public class ListTimelineEditor extends LinearLayout {
return policy;
}
public boolean isExclusive() {
return exclusiveSwitch.isChecked();
}
public void setRepliesPolicy(@NonNull ListTimeline.RepliesPolicy policy) {
this.policy = policy;
switch (policy) {
@ -73,15 +83,15 @@ public class ListTimelineEditor extends LinearLayout {
return true;
}
public ListTimelineEditor(Context context, AttributeSet attrs, int defStyleAttr) {
public ListEditor(Context context, AttributeSet attrs, int defStyleAttr) {
this(context, attrs, defStyleAttr, 0);
}
public ListTimelineEditor(Context context, AttributeSet attrs) {
public ListEditor(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public ListTimelineEditor(Context context) {
public ListEditor(Context context) {
this(context, null);
}
}

View file

@ -0,0 +1,5 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
<path android:pathData="M6.75 7.5C6.345 7.5 6 7.183 6 6.778V6.723C6 6.33 6.305 6.002 6.698 6H6.75C12.963 6 18 11.037 18 17.25v0.052C17.998 17.695 17.67 18 17.277 18h-0.055c-0.405 0-0.722-0.345-0.722-0.75 0-5.385-4.365-9.75-9.75-9.75z" android:fillColor="@color/fluent_default_icon_tint"/>
<path android:pathData="M13.294 18c0.38 0 0.701-0.287 0.705-0.666L14 17.25C14 13.246 10.754 10 6.75 10H6.666C6.287 10.006 6 10.328 6 10.707v0.09C6 11.195 6.351 11.5 6.75 11.5c3.176 0 5.75 2.574 5.75 5.75 0 0.399 0.305 0.75 0.704 0.75h0.09zM9 16.5C9 17.328 8.328 18 7.5 18S6 17.328 6 16.5 6.672 15 7.5 15 9 15.672 9 16.5z" android:fillColor="@color/fluent_default_icon_tint"/>
<path android:pathData="M6.25 3C4.455 3 3 4.455 3 6.25v11.5C3 19.545 4.455 21 6.25 21h11.5c1.795 0 3.25-1.455 3.25-3.25V6.25C21 4.455 19.545 3 17.75 3H6.25zM4.5 6.25c0-0.966 0.784-1.75 1.75-1.75h11.5c0.966 0 1.75 0.784 1.75 1.75v11.5c0 0.966-0.784 1.75-1.75 1.75H6.25c-0.966 0-1.75-0.784-1.75-1.75V6.25z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View file

@ -39,4 +39,53 @@
android:id="@+id/input"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:id="@+id/exclusive"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="8dp"
android:minHeight="48dp"
android:gravity="center_vertical"
android:layoutDirection="locale">
<ImageView
android:id="@+id/icon"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginHorizontal="16dp"
android:importantForAccessibility="no"
android:tint="?android:textColorPrimary"
android:src="@drawable/ic_fluent_rss_24_regular"/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginStart="16dp"
android:paddingVertical="8dp"
android:textSize="16sp"
android:textColor="?android:textColorPrimary"
android:text="@string/sk_list_exclusive_switch" />
<Switch
android:id="@+id/exclusive_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="12dp"
android:duplicateParentState="true"
android:focusable="false"
android:clickable="false"/>
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginBottom="8dp"
android:textSize="14sp"
android:text="@string/sk_list_exclusive_switch_explanation" />
</LinearLayout>

View file

@ -14,4 +14,21 @@
<string name="sk_accept_follow_request">قبول طلب المتابعة</string>
<string name="sk_reject_follow_request">رفض طلب المتابعة</string>
<string name="sk_lists_with_user">قوائم بها %s</string>
<string name="sk_confirm_unpin_post">أتريد فك المنشور من ملفك الشخصي؟</string>
<string name="sk_confirm_pin_post">أتريد تثبيت هذا المنشور في ملفك الشخصي؟</string>
<string name="sk_pinning">يثبت المنشور…</string>
<string name="sk_unpin_post">فك من ملفك الشخصي</string>
<string name="sk_confirm_unpin_post_title">فك المنشور من ملفك الشخصي</string>
<string name="sk_unpinning">يفك المنشور…</string>
<string name="sk_image_description">وصف الصورة</string>
<string name="sk_settings_show_replies">أظهر الردود</string>
<string name="sk_quoting_user">اقتباس %s</string>
<string name="sk_settings_reply_visibility_all">كل الردود</string>
<string name="sk_settings_reply_visibility_following">ردود على متابِعي</string>
<string name="sk_settings_reply_visibility_self">ردود عليَّ</string>
<string name="sk_settings_load_new_posts">تحميل المنشورات الجديدة تلقائيًا</string>
<string name="sk_user_post_notifications_on">شغِّل إشعارات النشر لـ %s</string>
<string name="sk_user_post_notifications_off">عطل إشعارات النشر لـ %s</string>
<string name="sk_check_for_update">تحقق من وجود تحديثات</string>
<string name="sk_no_update_available">لا يتوفر تحديث</string>
</resources>

View file

@ -41,9 +41,9 @@
<string name="sk_already_bookmarked">Dagoeneko laster-marka da</string>
<string name="sk_favorite_as">Beste kontu baten gogokoa</string>
<string name="sk_favorited_as">%s bezela dago gogokoetan</string>
<string name="sk_reblog_as">Beste kontu batekin bultzatua</string>
<string name="sk_reblog_as">Bultzatu beste kontu batekin</string>
<string name="sk_reblogged_as">%s bezela bultzatua</string>
<string name="sk_already_reblogged">Dagoeneko bultzatua izan da</string>
<string name="sk_already_reblogged">Jada bultzatu da</string>
<string name="sk_reply_as">Erantzun beste kontu batekin</string>
<string name="sk_translate_post">Itzuli</string>
<string name="sk_tabs_disable_swipe">Desgaitu fitxen arteko joan-etorria</string>
@ -75,9 +75,9 @@
<string name="sk_clear_all_notifications_confirm_action">Ezabatu denak</string>
<string name="sk_clear_all_notifications_confirm">Ziur al zaude jakinarazpen guztiak ezabatu nahi dituzula\?</string>
<string name="sk_loading_fediverse_resource_title">Fedibertsoan bilatzen</string>
<string name="sk_undo_reblog">Bultzada desegin</string>
<string name="sk_undo_reblog">Desegin bultzada</string>
<string name="sk_quote_post">Honen inguruan argitaratu</string>
<string name="sk_reblog_with_visibility">Bultzada ikusgarria</string>
<string name="sk_reblog_with_visibility">Bultzatu ikusgarritasunarekin</string>
<string name="sk_hashtags_you_follow">Jarraitzen dituzun Hashtag-ak</string>
<string name="sk_copy_link_to_post">Kopiatu link-a argitaratzeko</string>
<string name="sk_loading_resource_on_instance_title">%s-n bilatzen</string>
@ -219,7 +219,7 @@
<string name="sk_alt_button">ALT</string>
<string name="sk_post_edited">Editatua</string>
<string name="sk_notification_type_update">Editatutako argitalpenak</string>
<string name="sk_notify_update">Bultzatutako bidalketa editatu</string>
<string name="sk_notify_update">Bultzatutako bidalketa editatu da</string>
<string name="sk_no_results">Emaitzarik ez</string>
<string name="sk_save_draft">Zirriborroa gorde\?</string>
<string name="sk_no_alt_text">Ez dago testu alternatiborik eskuragarri</string>
@ -232,7 +232,7 @@
<string name="sk_alt_text_missing_title">Testu alternatiboa falta da</string>
<string name="sk_searching">Bilatzen…</string>
<string name="sk_save_draft_message">Zirriborro honetako aldaketak gorde edo argitaratu nahi dituzu\?</string>
<string name="sk_settings_prefix_reply_cw_with_re">Gehitu \"re:\" hasieran edukiaren abisuen erantzunetan</string>
<string name="sk_settings_prefix_reply_cw_with_re">Gehitu \"re:\" edukiaren abisuen erantzunen hasieran</string>
<string name="sk_filtered">Iragazita: %s</string>
<string name="sk_expand">Zabaldu</string>
<string name="sk_collapse">Itxi</string>
@ -267,8 +267,23 @@
<string name="sk_settings_reply_visibility_following">Jarraitzen ditudanei eginiko erantzunak</string>
<string name="sk_reply_line_above_avatar">\"Honi erantzunez\" abatarraren gaineko lerroa</string>
<string name="sk_show_thread">Erakutsi haria</string>
<string name="sk_compact_reblog_reply_line">Bultzada/erantzun lerro trinkoa</string>
<string name="sk_compact_reblog_reply_line">Bultzada-/erantzun-lerro trinkoa</string>
<string name="sk_quoting_user">%s aipatzen</string>
<string name="sk_settings_reply_visibility_self">Niri eginiko erantzunak</string>
<string name="sk_notification_action_replied">%s-(r)i erantzun</string>
<string name="sk_bubble_timeline_info_banner">Hauexek dira zure instantziako administratzaileek saretik aukeratutako azken bidalketak.</string>
<string name="sk_content_type">Edukiaren mota</string>
<string name="sk_content_type_unspecified">Zehaztu gabea</string>
<string name="sk_content_type_plain">Testu arrunta</string>
<string name="sk_content_type_html">HTML</string>
<string name="sk_content_type_markdown">Markdown</string>
<string name="sk_content_type_bbcode">BBCode</string>
<string name="sk_content_type_mfm">MFM</string>
<string name="sk_settings_content_types">Gaitu bidalketaren formateatzea</string>
<string name="sk_settings_content_types_explanation">Markdown bezalako eduki-mota ezartzea ahalbidetzen du bidalketa bat sortzerakoan. Gogoan izan instantzia guztiek ez dutela hau baimentzen.</string>
<string name="sk_settings_default_content_type">Eduki-mota lehenetsia</string>
<string name="sk_settings_confirm_before_reblog">Berretsi bultzatu aurretik</string>
<string name="sk_reacted_with">%s bezala erreakzionatuta</string>
<string name="sk_reacted">erreakzionatuta</string>
<string name="sk_timeline_bubble">Burbuila</string>
</resources>

View file

@ -61,7 +61,7 @@
<string name="sk_content_type_html">HTML</string>
<string name="sk_content_type_plain">متن ساده</string>
<string name="sk_check_for_update">بررسی برای به‌روزرسانی</string>
<string name="sk_settings_support_local_only">کارساز از فرسته فقط محلی پشتیبانی می‌کند</string>
<string name="sk_settings_support_local_only">پشتیبانی کارساز از ارسال فرسته فقط محلی</string>
<string name="sk_settings_show_boosts">نمایش تقویت‌ها</string>
<string name="sk_notification_type_update">فرسته‌های ویرایش شده</string>
<string name="sk_update_ready">مگالودون %s بارگیری شده و آماده نصب است.</string>
@ -70,4 +70,100 @@
<string name="sk_confirm_delete_draft_title">حذف پیش نویس</string>
<string name="sk_draft">پیش‌نویس</string>
<string name="sk_draft_saved">پیش نویس ذخیره شد</string>
<string name="sk_delete_and_redraft">حذف و بازنویسی</string>
<string name="sk_confirm_delete_and_redraft_title">حذف و بازنویسی فرسته</string>
<string name="sk_confirm_delete_and_redraft">آیا مطمئنید که می‌خواهید این فرسته را حذف و بازنویسی کنید؟</string>
<string name="sk_confirm_pin_post">آیا می‌خواهید این فرسته را به نمایه خود سنجاق کنید؟</string>
<string name="sk_confirm_unpin_post">آیا می‌خواهید سنجاق این فرسته را بردارید؟</string>
<string name="sk_lists_with_user">سیاهه‌هایی با %s</string>
<string name="sk_settings_app_version">مگالودون v%1$s (%2$d)</string>
<string name="sk_settings_posting">ترجیحات ارسال فرسته</string>
<string name="sk_translated_using">با استفاده از %s ترجمه شده است</string>
<string name="sk_translate_show_original">نمایش اصلی</string>
<string name="sk_example_domain">example.social</string>
<string name="sk_delete_notification">حذف آگاهی</string>
<string name="sk_delete_notification_confirm_action">حذف آگاهی</string>
<string name="sk_settings_translation_availability_note_available">%s از ترجمه پشتیبانی می‌کند!</string>
<string name="sk_copy_link_to_post">رونوشت پیوند فرسته</string>
<string name="sk_already_favorited">قبلا برگزیده بوده است</string>
<string name="sk_favorite_as">برگزیدن با حساب دیگر</string>
<string name="sk_unsent_posts">فرسته‌های ارسال نشده</string>
<string name="sk_reblog_as">تقویت با حساب دیگر</string>
<string name="sk_already_reblogged">قبلا تقویت شده است</string>
<string name="sk_reply_as">پاسخ با حساب دیگر</string>
<string name="sk_bookmark_as">نشانک‌گذاری با حساب دیگر</string>
<string name="sk_forward_report_to">هدایت به %s</string>
<string name="sk_schedule">زمان‌بندی</string>
<string name="sk_compose_scheduled">برنامه‌ریزی شده برای</string>
<string name="sk_post_scheduled">فرسته برنامه‌ریزی شد</string>
<string name="sk_confirm_save_draft">ذخیره پیش نویس؟</string>
<string name="sk_confirm_save_changes">ذخیره تغییرات؟</string>
<string name="sk_mark_as_draft">علامت‌گذاری به عنوان پیش نویس</string>
<string name="sk_schedule_post">برنامه‌ریزی فرسته</string>
<string name="sk_compose_no_draft">پیش‌نویس نکن</string>
<string name="sk_announcements">اطلاعیه‌ها</string>
<string name="sk_settings_about_instance">درباره نمونه</string>
<string name="sk_create">ایجاد کردن</string>
<string name="sk_create_list_title">ایجاد سیاهه</string>
<string name="sk_list_name_hint">اسم سیاهه</string>
<string name="sk_delete_list">حذف سیاهه</string>
<string name="sk_your_lists">سیاهه شما</string>
<string name="sk_timeline_local">محلی</string>
<string name="sk_do_remove_follower">حذف کردن</string>
<string name="sk_confirm_delete_scheduled_post_title">حذف فرسته برنامه‌ریزی شده</string>
<string name="sk_draft_or_schedule">پیش نویس یا برنامه‌ریزی</string>
<string name="sk_compose_no_schedule">برنامه‌ریزی نکن</string>
<string name="sk_list_replies_policy_none">هیچکس</string>
<string name="sk_timeline_home">خانه</string>
<string name="sk_timelines">خط زمانی‌ها</string>
<string name="sk_timeline_posts">فرسته‌ها</string>
<string name="sk_timelines_add">افزودن</string>
<string name="sk_timeline">خط زمانی</string>
<string name="sk_list">سیاهه</string>
<string name="sk_hashtag">برچسب</string>
<string name="sk_remove">حذف کردن</string>
<string name="sk_timeline_icon">نقشک</string>
<string name="sk_icon_city">شهر</string>
<string name="sk_icon_cat">گربه</string>
<string name="sk_icon_dog">سگ</string>
<string name="sk_icon_rabbit">خرگوش</string>
<string name="sk_icon_turtle">لاک‌پشت</string>
<string name="sk_icon_image">تصویر</string>
<string name="sk_icon_bot">ربات</string>
<string name="sk_icon_language">زبان</string>
<string name="sk_icon_location">مکان</string>
<string name="sk_icon_microphone">میکروفون</string>
<string name="sk_icon_coffee">قهوه</string>
<string name="sk_icon_news">اخبار</string>
<string name="sk_icon_games">بازی</string>
<string name="sk_icon_code">کد</string>
<string name="sk_icon_train">قطار</string>
<string name="sk_icon_music">موسیقی</string>
<string name="sk_icon_people">مردم</string>
<string name="sk_icon_health">سلامتی</string>
<string name="sk_icon_chat">گپ</string>
<string name="sk_icon_book">کتاب</string>
<string name="sk_icon_bicycle">دوچرخه</string>
<string name="sk_icon_map">نقشه</string>
<string name="sk_icon_backpack">کوله پشتی</string>
<string name="sk_icon_fire">آتش</string>
<string name="sk_icon_pizza">پیتزا</string>
<string name="sk_icon_headphones">هدفون</string>
<string name="sk_icon_human">انسان</string>
<string name="sk_icon_pin">سنجاق</string>
<string name="sk_edit_timeline">ویرایش خط زمانی</string>
<string name="sk_settings_see_new_posts_button">دکمه \"مشاهده فرسته‌های جدید\"</string>
<string name="sk_local_only">فقط نمونه محلی</string>
<string name="sk_instance_features">ویژگی های نمونه</string>
<string name="sk_new_reports">گزارش‌های جدید</string>
<string name="sk_reported">گزارش شد</string>
<string name="sk_in_reply">در پاسخ</string>
<string name="sk_open_in_app">بازکردن در کاره</string>
<string name="sk_settings_prefix_replies_never">هیچکس</string>
<string name="sk_settings_prefix_replies_to_others">دیگران</string>
<string name="sk_schedule_or_draft">برنامه‌ریزی یا پیش‌نویس</string>
<string name="sk_edit_list_title">ویرایش سیاهه</string>
<string name="sk_icon_star">ستاره</string>
<string name="sk_confirm_delete_draft">آیا مطمئنید که می‌خواهید این فرسته پیش نویس شده را حذف کنید؟</string>
<string name="sk_changelog">گزارش تغییرات</string>
</resources>

View file

@ -13,7 +13,7 @@
<string name="sk_delete_and_redraft">Törlés és újraszövegezés</string>
<string name="sk_pin_post">Pin a profilhoz</string>
<string name="sk_confirm_pin_post_title">Hozzászólás rögzítése a profilhoz</string>
<string name="sk_pinning">Pinning poszt</string>
<string name="sk_pinning">Bejegyzés kitűzése</string>
<string name="sk_unpin_post">Unpin a profilból</string>
<string name="sk_confirm_unpin_post_title">Hozzászólás feloldása a profilból</string>
<string name="sk_unpinning">Unpinning poszt…</string>
@ -124,4 +124,7 @@
<string name="sk_poll_allow_multiple">Több választási lehetőség engedélyezése</string>
<string name="sk_tabs_disable_swipe">Lapok közötti lapozás letiltása</string>
<string name="sk_settings_about">Az alkalmazásról</string>
<string name="sk_quoting_user">%s említése</string>
<string name="sk_settings_reply_visibility">Válasz láthatósága</string>
<string name="sk_settings_reply_visibility_all">Összes válasz</string>
</resources>

View file

@ -78,8 +78,8 @@
<string name="sk_clear_all_notifications">Limpar todas as notificações</string>
<string name="sk_clear_all_notifications_confirm_action">Excluir tudo</string>
<string name="sk_loading_fediverse_resource_title">Procurando no Fediverso</string>
<string name="sk_undo_reblog">Desfazer reblog</string>
<string name="sk_reblog_with_visibility">Reblogar com visibilidade</string>
<string name="sk_undo_reblog">Desfazer impulso</string>
<string name="sk_reblog_with_visibility">Impulsionar com visibilidade</string>
<string name="sk_hashtags_you_follow">Hashtags que você segue</string>
<string name="sk_copy_link_to_post">Copiar link da publicação</string>
<string name="sk_loading_resource_on_instance_title">Procurando em %s</string>
@ -94,8 +94,8 @@
<string name="sk_already_bookmarked">Já salvo</string>
<string name="sk_already_favorited">Já favoritado</string>
<string name="sk_reply_as">Responder com outra conta</string>
<string name="sk_already_reblogged">reblogado</string>
<string name="sk_reblog_as">Reblogar com outra conta</string>
<string name="sk_already_reblogged">impulsionado</string>
<string name="sk_reblog_as">Impulsionar com outra conta</string>
<string name="sk_schedule">Agendar</string>
<string name="sk_draft">Rascunho</string>
<string name="sk_unsent_posts">Publicações não enviadas</string>
@ -115,7 +115,7 @@
<string name="sk_mark_as_draft">Marcar como rascunho</string>
<string name="sk_bookmarked_as">Salvo em %s</string>
<string name="sk_favorited_as">Favoritado em %s</string>
<string name="sk_reblogged_as">Reblogou como %s</string>
<string name="sk_reblogged_as">Impulsionou como %s</string>
<string name="sk_settings_uniform_icon_for_notifications">Padronizar ícone para todas as notificações</string>
<string name="sk_quote_post">Publique sobre isso</string>
<string name="sk_draft_or_schedule">Rascunhar ou agendar</string>
@ -192,7 +192,7 @@
<string name="sk_attach_file">Anexar arquivo</string>
<string name="sk_post_edited">editado</string>
<string name="sk_notification_type_update">Publicações editadas</string>
<string name="sk_notify_update">Editarem uma publicação reblogada</string>
<string name="sk_notify_update">Editarem uma publicação impulsionada</string>
<string name="sk_icon_train">Trem</string>
<string name="sk_alt_text_missing_title">Sem texto descritivo</string>
<string name="sk_alt_text_missing">Pelo menos um anexo não contém uma descrição.</string>
@ -251,27 +251,58 @@
<string name="sk_unfinished_attachments">Corrigir anexos\?</string>
<string name="sk_settings_glitch_mode_explanation">Habilite isso se sua instância inicial for executada no Glitch. Não é necessário para Hometown ou Akkoma.</string>
<string name="sk_collapse">Mostrar menos</string>
<string name="sk_settings_prefix_reply_cw_with_re">Adicionar \"re:\" nas respostas com Avisos de Conteúdo</string>
<string name="sk_settings_prefix_reply_cw_with_re">Adicionar \"re:\" nos Avisos de Conteúdo em resposta a</string>
<string name="sk_spectator_mode">Modo espectador</string>
<string name="sk_quoting_user">Citando %s</string>
<string name="sk_settings_reply_visibility_all">Todas as respostas</string>
<string name="sk_settings_reply_visibility">Visibilidade da resposta</string>
<string name="sk_settings_reply_visibility_self">Respostas para mim</string>
<string name="sk_timeline_bubble">Bolha</string>
<string name="sk_bubble_timeline_info_banner">Esses são as publicações mais recentes da rede com curadoria dos administradores da sua instância.</string>
<string name="sk_signed_up">se inscreveu</string>
<string name="sk_reported">reportado</string>
<string name="sk_sign_ups">Usuários se inscrevendo</string>
<string name="sk_new_reports">Novas reportagens</string>
<string name="sk_settings_hide_interaction">Esconder botões de interação</string>
<string name="sk_follow_as">Seguir com outra conta</string>
<string name="sk_followed_as">Seguindo por %s</string>
<string name="sk_settings_hide_fab">Ocultar compositor ao rolar a tela</string>
<string name="sk_in_reply">Em resposta</string>
<string name="sk_show_thread">Mostrar fio</string>
<string name="sk_quoting_user">Citando %s</string>
<string name="sk_settings_reply_visibility">Visibilidade das respostas</string>
<string name="sk_settings_reply_visibility_all">Todas as respostas</string>
<string name="sk_settings_reply_visibility_following">Respostas para meus seguidores</string>
<string name="sk_settings_show_new_posts_button">Botão \"Ver novas publicações\"</string>
<string name="sk_settings_collapse_long_posts">Colapsar postagens muito longas</string>
<string name="sk_settings_reply_visibility_self">Respostas para mim</string>
<string name="sk_reacted_with">reagiu com %s</string>
<string name="sk_reacted">reagiu</string>
<string name="sk_sign_ups">Usuários se inscrevendo</string>
<string name="sk_new_reports">Novas relatórios</string>
<string name="sk_reported">reportado</string>
<string name="sk_settings_auto_reveal_equal_spoilers">Revelar Avisos de Conteúdo em respostas de</string>
<string name="sk_settings_auto_reveal_nobody">ninguém</string>
<string name="sk_settings_auto_reveal_author">autor</string>
<string name="sk_settings_auto_reveal_anyone">todo mundo</string>
<string name="sk_open_in_app_failed">Não foi possível abrir no app</string>
<string name="sk_external_share_title">Compartilhar com conta</string>
<string name="sk_external_share_or_open_title">Compartilhar ou abrir com conta</string>
<string name="sk_no_remote_info_hint">informação remota indisponível</string>
<string name="sk_error_loading_profile">Falha em carregar o perfil via %s</string>
<string name="sk_settings_allow_remote_loading">Carregar informações de instâncias remotas</string>
<string name="sk_settings_allow_remote_loading_explanation">Tentar buscar listagens mais precisas de seguidores, curtidas e impulsos carregando a informação pela instância de origem.</string>
<string name="sk_settings_prefix_replies_always">todo mundo</string>
<string name="sk_settings_prefix_replies_never">ninguém</string>
<string name="sk_settings_prefix_replies_to_others">outros</string>
<string name="sk_content_type">Tipo de conteúdo</string>
<string name="sk_content_type_unspecified">Não especificado</string>
<string name="sk_content_type_plain">Texto simples</string>
<string name="sk_content_type_html">HTML</string>
<string name="sk_content_type_markdown">Markdown</string>
<string name="sk_content_type_bbcode">BBCode</string>
<string name="sk_content_type_mfm">MFM</string>
<string name="sk_settings_content_types">Habilitar formatação de publicação</string>
<string name="sk_settings_content_types_explanation">Permite configurar um tipo de conteúdo como o Markdown na criação de uma publicação. Lembre-se que nem todas as instâncias suportam isso.</string>
<string name="sk_settings_default_content_type">Tipo de conteúdo padrão</string>
<string name="sk_settings_default_content_type_explanation">Permite pré-selecionar um tipo de conteúdo quando criar novas publicações, substituindo o valor definido em \"Preferências de publicação\".</string>
<string name="sk_settings_forward_report_default">\"Encaminhar denúncia\" interruptor padrão</string>
<string name="sk_in_reply">Em resposta</string>
<string name="sk_settings_hide_interaction">Esconder botões de interação</string>
<string name="sk_follow_as">Seguir em outra conta</string>
<string name="sk_followed_as">Seguido como %s</string>
<string name="sk_notification_action_replied">Resposta enviada para %s</string>
<string name="sk_reply_line_above_avatar">Linha \"Em resposta para\" acima do avatar</string>
<string name="sk_compact_reblog_reply_line">Linha resposta/reblog compacta</string>
<string name="sk_settings_confirm_before_reblog">Confirmar antes de reblogar</string>
<string name="sk_reply_line_above_avatar">Em resposta a</string>
<string name="sk_compact_reblog_reply_line">Linha compacta resposta/impulsionar</string>
<string name="sk_settings_confirm_before_reblog">Confirmar antes de impulsionar</string>
<string name="sk_settings_collapse_long_posts">Colapsar publicações muito longas</string>
<string name="sk_settings_hide_fab">Esconder automaticamente o botão Escrever</string>
<string name="sk_show_thread">Mostrar fio</string>
<string name="sk_instance_info_unavailable">Informação de instância temporariamente inacessível</string>
<string name="sk_open_in_app">Abrir no app</string>
</resources>

View file

@ -254,7 +254,7 @@
<string name="sk_expand">Розгорнути</string>
<string name="sk_collapse">Згорнути</string>
<string name="sk_unfinished_attachments">Виправити вкладення\?</string>
<string name="sk_settings_prefix_reply_cw_with_re">Префікс «re:» під час відповіді CW</string>
<string name="sk_settings_prefix_reply_cw_with_re">Префікс CW під час відповіді</string>
<string name="sk_settings_collapse_long_posts">Згортати надто довгі дописи</string>
<string name="sk_unfinished_attachments_message">Деякі вкладення не повністю завантажилися.</string>
<string name="sk_spectator_mode">Режим глядача</string>
@ -296,5 +296,13 @@
<string name="sk_no_remote_info_hint">віддалена інформація недоступна</string>
<string name="sk_settings_allow_remote_loading">Завантажити інформацію з віддалених серверів</string>
<string name="sk_settings_allow_remote_loading_explanation">Спробуйте отримати точніші списки підписників, вподобань і поширень, завантаживши інформацію з джерела.</string>
<string name="sk_error_loading_profile">Не вдалося завантажити профіль на ваш домашній сервер.</string>
<string name="sk_error_loading_profile">Не вдалося завантажити профіль через %s</string>
<string name="sk_settings_auto_reveal_equal_spoilers">Виявити ті самі CW у відповідях від</string>
<string name="sk_settings_auto_reveal_nobody">нікого</string>
<string name="sk_settings_auto_reveal_author">автора</string>
<string name="sk_settings_auto_reveal_anyone">будь-кого</string>
<string name="sk_settings_prefix_replies_always">усіх</string>
<string name="sk_settings_prefix_replies_never">нікого</string>
<string name="sk_settings_prefix_replies_to_others">іншим</string>
<string name="sk_settings_forward_report_default">Усталений перемикач “Пересилати звіт”</string>
</resources>

View file

@ -227,6 +227,7 @@
<string name="sk_icon_human">Human</string>
<string name="sk_icon_globe">Globe</string>
<string name="sk_icon_pin">Pin</string>
<string name="sk_icon_feed">Feed</string>
<string name="sk_edit_timeline">Edit timeline</string>
<string name="sk_edit_timelines">Edit timelines</string>
<string name="sk_alt_button">ALT</string>
@ -305,4 +306,7 @@
<string name="sk_settings_prefix_replies_never">nobody</string>
<string name="sk_settings_prefix_replies_to_others">others</string>
<string name="sk_settings_forward_report_default">“Forward report” switch default</string>
<string name="sk_exclusive_list">Exclusive list</string>
<string name="sk_list_exclusive_switch">Make list exclusive</string>
<string name="sk_list_exclusive_switch_explanation">Members of an exclusive list will not show up on your home timeline if your instance supports it.</string>
</resources>

View file

@ -0,0 +1,8 @@
- Удосконалений, чіткіший перегляд тем
- Відкривайте облікові записи/дописи, поділившись вебсайтом з Megalodon
- Завантажуйте списки підписників/вибраного/... з початкового сервера
- Поліпшено сумісність з серверами, що не належать до Mastodon
- Можливість налаштувати тип вмісту допису
- Підтримка копіювання URL з Недавніх застосунків на пристроях Pixel
- Автовиявлення однакових CW у потоках
- Виправлення помилок та покращення інтерфейсу