diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java index c578452eb..5d1f9bdb4 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java @@ -551,10 +551,14 @@ public abstract class BaseStatusListFragment exten protected void updatePoll(String itemID, Status status, Poll poll){ status.poll=poll; int firstOptionIndex=-1, footerIndex=-1; + int spoilerFirstOptionIndex=-1, spoilerFooterIndex=-1; + SpoilerStatusDisplayItem spoilerItem=null; int i=0; for(StatusDisplayItem item:displayItems){ if(item.parentID.equals(itemID)){ - if(item instanceof PollOptionStatusDisplayItem && firstOptionIndex==-1){ + if(item instanceof SpoilerStatusDisplayItem){ + spoilerItem=(SpoilerStatusDisplayItem) item; + }else if(item instanceof PollOptionStatusDisplayItem && firstOptionIndex==-1){ firstOptionIndex=i; }else if(item instanceof PollFooterStatusDisplayItem){ footerIndex=i; @@ -567,8 +571,16 @@ public abstract class BaseStatusListFragment exten throw new IllegalStateException("Can't find all poll items in displayItems"); List pollItems=displayItems.subList(firstOptionIndex, footerIndex+1); int prevSize=pollItems.size(); + if(spoilerItem!=null){ + spoilerFirstOptionIndex=spoilerItem.contentItems.indexOf(pollItems.get(0)); + spoilerFooterIndex=spoilerItem.contentItems.indexOf(pollItems.get(pollItems.size()-1)); + } pollItems.clear(); StatusDisplayItem.buildPollItems(itemID, this, poll, pollItems, status); + if(spoilerItem!=null){ + spoilerItem.contentItems.subList(spoilerFirstOptionIndex, spoilerFooterIndex+1).clear(); + spoilerItem.contentItems.addAll(spoilerFirstOptionIndex, pollItems); + } if(prevSize!=pollItems.size()){ adapter.notifyItemRangeRemoved(firstOptionIndex, prevSize); adapter.notifyItemRangeInserted(firstOptionIndex, pollItems.size()); diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java index 949c312e4..455887473 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java @@ -215,7 +215,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr public Instance instance; public Status editingStatus; - private ScheduledStatus scheduledStatus; + public ScheduledStatus scheduledStatus; private boolean redraftStatus; private Uri photoUri; @@ -758,7 +758,8 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr .setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, V.dp(16))); } - replyText.setText(getString(quote!=null? R.string.sk_quoting_user : R.string.in_reply_to, status.account.getDisplayName())); + replyText.setText(HtmlParser.parseCustomEmoji(getString(quote!=null? R.string.sk_quoting_user : R.string.in_reply_to, status.account.getDisplayName()), status.account.emojis)); + UiUtils.loadCustomEmojiInTextView(replyText); int visibilityNameRes = switch (status.visibility) { case PUBLIC -> R.string.visibility_public; case UNLISTED -> R.string.sk_visibility_unlisted; diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeTimelineFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeTimelineFragment.java index 8c00be228..6decae1fe 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeTimelineFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeTimelineFragment.java @@ -8,10 +8,14 @@ import android.view.View; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; +import org.joinmastodon.android.E; import org.joinmastodon.android.GlobalUserPreferences; import org.joinmastodon.android.api.requests.markers.SaveMarkers; +import org.joinmastodon.android.api.requests.statuses.GetStatusByID; import org.joinmastodon.android.api.requests.timelines.GetHomeTimeline; import org.joinmastodon.android.api.session.AccountSessionManager; +import org.joinmastodon.android.events.StatusCountersUpdatedEvent; +import org.joinmastodon.android.events.StatusUpdatedEvent; import org.joinmastodon.android.model.CacheablePaginatedResponse; import org.joinmastodon.android.model.FilterContext; import org.joinmastodon.android.model.Status; @@ -23,9 +27,11 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Set; +import java.util.function.Function; import java.util.stream.Collectors; import me.grishka.appkit.api.Callback; @@ -51,6 +57,7 @@ public class HomeTimelineFragment extends StatusListFragment { @Override protected void doLoadData(int offset, int count){ + String maxID=this.maxID; AccountSessionManager.getInstance() .getAccount(accountID).getCacheController() .getHomeTimeline(offset>0 ? maxID : null, count, refreshing, new SimpleCallback<>(this){ @@ -58,7 +65,8 @@ public class HomeTimelineFragment extends StatusListFragment { public void onSuccess(CacheablePaginatedResponse> result){ if(getActivity()==null) return; boolean empty=result.items.isEmpty(); - maxID=result.maxID; + if(result.isFromCache()) refreshCachedData(result, maxID); + HomeTimelineFragment.this.maxID=result.maxID; AccountSessionManager.get(accountID).filterStatuses(result.items, getFilterContext()); onDataLoaded(result.items, !empty); if(result.isFromCache() && GlobalUserPreferences.loadNewPosts) @@ -67,6 +75,53 @@ public class HomeTimelineFragment extends StatusListFragment { }); } + private void handleRefreshedData(List result, List cachedList){ + Map refreshed=result.stream().collect(Collectors.toMap(Status::getID, Function.identity())); + for(Status cached : cachedList){ + if(refreshed.containsKey(cached.id)){ + Status updated=refreshed.get(cached.id); + if(updated.editedAt!=null && cached.editedAt!=null && updated.editedAt.isAfter(cached.editedAt)) + E.post(new StatusUpdatedEvent(updated)); + else + E.post(new StatusCountersUpdatedEvent(updated.getContentStatus())); + }else{ + removeStatus(cached); + } + } + } + + private void refreshCachedData(CacheablePaginatedResponse> result, String maxID){ + List cachedList=new ArrayList<>(result.items); + if(cachedList.isEmpty()) return; + if(maxID==null){ + // fetch top status manually so we can use its id as the max_id to fetch the rest + Status firstFromCache=cachedList.get(0); + maxID=firstFromCache.id; + cachedList.remove(0); + new GetStatusByID(maxID).setCallback(new Callback<>(){ + @Override + public void onSuccess(Status result){ + handleRefreshedData( + Collections.singletonList(result), + Collections.singletonList(firstFromCache) + ); + } + + @Override + public void onError(ErrorResponse ignored){} + }).exec(accountID); + } + new GetHomeTimeline(maxID, null, cachedList.size(), null, getSession().getLocalPreferences().timelineReplyVisibility).setCallback(new Callback<>(){ + @Override + public void onSuccess(List result){ + handleRefreshedData(result, cachedList); + } + + @Override + public void onError(ErrorResponse ignored){} + }).exec(accountID); + } + @Override public void onViewCreated(View view, Bundle savedInstanceState){ super.onViewCreated(view, savedInstanceState); diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/ScheduledStatus.java b/mastodon/src/main/java/org/joinmastodon/android/model/ScheduledStatus.java index 309bb4646..0f2af6cb6 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/ScheduledStatus.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/ScheduledStatus.java @@ -6,6 +6,7 @@ import org.joinmastodon.android.model.Poll.Option; import org.parceler.Parcel; import java.time.Instant; +import java.time.temporal.ChronoUnit; import java.util.List; import java.util.stream.Collectors; @@ -27,10 +28,10 @@ public class ScheduledStatus extends BaseModel implements DisplayItemsParent{ @Override public void postprocess() throws ObjectValidationException { super.postprocess(); - if (mediaAttachments == null) mediaAttachments = List.of(); + if(mediaAttachments==null) mediaAttachments=List.of(); for(Attachment a:mediaAttachments) a.postprocess(); - if (params != null) params.postprocess(); + if(params!=null) params.postprocess(); } @Parcel @@ -53,7 +54,7 @@ public class ScheduledStatus extends BaseModel implements DisplayItemsParent{ @Override public void postprocess() throws ObjectValidationException { super.postprocess(); - if (poll != null) poll.postprocess(); + if(poll!=null) poll.postprocess(); } } @@ -67,25 +68,26 @@ public class ScheduledStatus extends BaseModel implements DisplayItemsParent{ public boolean hideTotals; public Poll toPoll() { - Poll p = new Poll(); - p.voted = true; - p.emojis = List.of(); - p.ownVotes = List.of(); - p.multiple = multiple; - p.options = options.stream().map(Option::new).collect(Collectors.toList()); + Poll p=new Poll(); + p.voted=true; + p.emojis=List.of(); + p.ownVotes=List.of(); + p.multiple=multiple; + p.options=options.stream().map(Option::new).collect(Collectors.toList()); + p.expiresAt=Instant.now().plus(Integer.parseInt(expiresIn)+1, ChronoUnit.SECONDS); return p; } } public Status toStatus() { - Status s = Status.ofFake(id, params.text, scheduledAt); - s.mediaAttachments = mediaAttachments; - s.inReplyToId = params.inReplyToId > 0 ? "" + params.inReplyToId : null; - s.spoilerText = params.spoilerText; - s.visibility = params.visibility; - s.language = params.language; - s.sensitive = params.sensitive; - if (params.poll != null) s.poll = params.poll.toPoll(); + Status s=Status.ofFake(id, params.text, scheduledAt); + s.mediaAttachments=mediaAttachments; + s.inReplyToId=params.inReplyToId>0 ? ""+params.inReplyToId : null; + s.spoilerText=params.spoilerText; + s.visibility=params.visibility; + s.language=params.language; + s.sensitive=params.sensitive; + if(params.poll!=null) s.poll=params.poll.toPoll(); return s; } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java index aaa743610..b5c447d0e 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java @@ -566,7 +566,8 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{ follow.setIcon(following ? R.drawable.ic_fluent_person_delete_24_regular : R.drawable.ic_fluent_person_add_24_regular); manageUserLists.setVisible(relationship != null && relationship.following); manageUserLists.setTitle(item.parentFragment.getString(R.string.sk_lists_with_user, username)); - UiUtils.insetPopupMenuIcon(item.parentFragment.getContext(), follow); + // ic_fluent_person_add_24_regular actually has a width of 25dp -.- + UiUtils.insetPopupMenuIcon(item.parentFragment.getContext(), follow, following ? 0 : V.dp(-1)); } workaroundChangingMenuItemWidths(menu, username); diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/NotificationHeaderStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/NotificationHeaderStatusDisplayItem.java index a8cb58cd4..a91f5170b 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/NotificationHeaderStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/NotificationHeaderStatusDisplayItem.java @@ -6,6 +6,7 @@ import static org.joinmastodon.android.ui.utils.UiUtils.generateFormattedString; import android.annotation.SuppressLint; import android.app.Activity; import android.content.res.ColorStateList; +import android.graphics.drawable.Animatable; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.text.SpannableStringBuilder; @@ -143,6 +144,8 @@ public class NotificationHeaderStatusDisplayItem extends StatusDisplayItem{ item.emojiHelper.setImageDrawable(index-1, image); text.invalidate(); } + if(image instanceof Animatable) + ((Animatable) image).start(); } @Override diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java index 34b84f051..dcd0070fe 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java @@ -814,8 +814,8 @@ public class UiUtils { button.setText(relationship.followedBy ? R.string.follow_back : R.string.button_follow); styleRes=R.style.Widget_Mastodon_M3_Button_Filled; }else{ - button.setText(R.string.button_following); - styleRes=R.style.Widget_Mastodon_M3_Button_Tonal; + button.setText(relationship.followedBy ? R.string.sk_button_mutuals : R.string.button_following); + styleRes=relationship.followedBy ? R.style.Widget_Mastodon_M3_Button_Tonal_Outlined : R.style.Widget_Mastodon_M3_Button_Tonal; } TypedArray ta=button.getContext().obtainStyledAttributes(styleRes, new int[]{android.R.attr.background}); @@ -941,17 +941,26 @@ public class UiUtils { } public static void insetPopupMenuIcon(Context context, MenuItem item) { - ColorStateList iconTint = ColorStateList.valueOf(UiUtils.getThemeColor(context, android.R.attr.textColorSecondary)); - insetPopupMenuIcon(item, iconTint); + insetPopupMenuIcon(context, item, 0); } - public static void insetPopupMenuIcon(MenuItem item, ColorStateList iconTint) { - Drawable icon = item.getIcon().mutate(); - if (Build.VERSION.SDK_INT >= 26) item.setIconTintList(iconTint); + public static void insetPopupMenuIcon(Context context, MenuItem item, int addWidth) { + ColorStateList iconTint = ColorStateList.valueOf(UiUtils.getThemeColor(context, android.R.attr.textColorSecondary)); + insetPopupMenuIcon(item, iconTint, addWidth); + } + + /** + * @param addWidth set if icon is too wide/narrow. if icon is 25dp in width, set to -1dp + */ + public static void insetPopupMenuIcon(MenuItem item, ColorStateList iconTint, int addWidth) { + Drawable icon=item.getIcon().mutate(); + if(Build.VERSION.SDK_INT>=26) item.setIconTintList(iconTint); else icon.setTintList(iconTint); - icon = new InsetDrawable(icon, V.dp(8), 0, V.dp(8), 0); + int pad=V.dp(8); + boolean rtl=icon.getLayoutDirection()==View.LAYOUT_DIRECTION_RTL; + icon=new InsetDrawable(icon, rtl ? pad+addWidth : pad, 0, rtl ? pad : addWidth+pad, 0); item.setIcon(icon); - SpannableStringBuilder ssb = new SpannableStringBuilder(item.getTitle()); + SpannableStringBuilder ssb = new SpannableStringBuilder(item.getTitle()); item.setTitle(ssb); } @@ -985,7 +994,7 @@ public class UiUtils { if (subMenu != null) enableMenuIcons(context, subMenu, exclude); if (item.getIcon() == null || Arrays.stream(exclude).anyMatch(id -> id == item.getItemId())) continue; - insetPopupMenuIcon(item, iconTint); + insetPopupMenuIcon(item, iconTint, 0); } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/viewcontrollers/ComposePollViewController.java b/mastodon/src/main/java/org/joinmastodon/android/ui/viewcontrollers/ComposePollViewController.java index 3311ce418..aa72ec724 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/viewcontrollers/ComposePollViewController.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/viewcontrollers/ComposePollViewController.java @@ -134,7 +134,9 @@ public class ComposePollViewController{ DraftPollOption opt=createDraftPollOption(false); opt.edit.setText(eopt.title); } - if(fragment.editingStatus.poll.expiresAt!=null) + if(fragment.scheduledStatus!=null && fragment.scheduledStatus.params.poll!=null) + pollDuration=Integer.parseInt(fragment.scheduledStatus.params.poll.expiresIn); + else if(fragment.editingStatus.poll.expiresAt!=null) pollDuration=(int)fragment.editingStatus.poll.expiresAt.minus(fragment.editingStatus.createdAt.toEpochMilli(), ChronoUnit.MILLIS).getEpochSecond(); updatePollOptionHints(); pollDurationValue.setText(UiUtils.formatDuration(fragment.getContext(), pollDuration)); diff --git a/mastodon/src/main/res/drawable/bg_button_m3_tonal_outlined.xml b/mastodon/src/main/res/drawable/bg_button_m3_tonal_outlined.xml new file mode 100644 index 000000000..d06d0a9f6 --- /dev/null +++ b/mastodon/src/main/res/drawable/bg_button_m3_tonal_outlined.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mastodon/src/main/res/drawable/ic_fluent_prohibited_24_regular.xml b/mastodon/src/main/res/drawable/ic_fluent_prohibited_24_regular.xml deleted file mode 100644 index e971bcf5d..000000000 --- a/mastodon/src/main/res/drawable/ic_fluent_prohibited_24_regular.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/mastodon/src/main/res/values-de-rDE/strings.xml b/mastodon/src/main/res/values-de-rDE/strings.xml index f794a83ef..3b9a6e7cc 100644 --- a/mastodon/src/main/res/values-de-rDE/strings.xml +++ b/mastodon/src/main/res/values-de-rDE/strings.xml @@ -262,6 +262,7 @@ Dies sind alle Beiträge von allen Benutzern auf deinem Server (%s). Dir könnten diese Konten gefallen, basierend auf Leuten, denen du folgst. + Neue Beiträge Weitere Beiträge laden Zurückfolgen Ausstehend @@ -386,7 +387,7 @@ Willkommen auf Mastodon Mastodon ist ein dezentrales, soziales Netzwerk. Das bedeutet, dass es nicht von einem einzigen Unternehmen kontrolliert wird. Das Netzwerk besteht aus unabhängig voneinander betriebenen Servern, die miteinander verbunden sind. Was sind Server? - + Jedes Mastodon-Konto wird auf einem Server erstellt – jeder mit eigenen Werten, Regeln & Administrator*innen. Du kannst trotzdem mit Personen interagieren, die ihr Konto auf einem anderen Server erstellt haben. Link wird geöffnet… Dieser Link wird in der App nicht unterstützt Von allen Konten abmelden @@ -582,9 +583,49 @@ vor %d Stunden vor %d Tagen + Übersetzen aus %s + Übersetzt aus %1$s mit %2$s + Original anzeigen + Übersetzung fehlgeschlagen. Möglicherweise haben die Administrator*innen die Übersetzungen auf diesem Server nicht aktiviert oder dieser Server läuft mit einer älteren Version von Mastodon, in der Übersetzungen noch nicht unterstützt wurden. + Datenschutz und Reichweite + Profil und Beiträge in Suchalgorithmen berücksichtigen + Öffentliche Beiträge in die Suchergebnisse einbeziehen + Fehler bei Videowiedergabe + Folge ich + Listen + Gefolgte Hashtags + Du hast noch keine Listen. + Du folgst keinen Hashtags. + Listen verwalten + Hashtags verwalten + Dropdown-Menü + Liste bearbeiten + Mitglieder auflisten + Liste löschen + „%s“ löschen? + Mitglieder in „Folge ich“ ausblenden + Wenn jemand in dieser Liste ist, sollen deren Beiträge nicht in der „Folge ich“-Timeline angezeigt werden. + Listenname + Mit Antworten von + Niemandem + Mitgliedern der Liste + Benutzer*innen, denen ich folge + Mitglieder entfernen? + Entfernen + Mitglied hinzufügen + Suche nach Leuten, denen du folgst + Zur Liste hinzufügen… + Zur Liste hinzufügen - Neue Beiträge anzeigen + Listen mit %s verwalten + Aus Liste entfernen + Mitglied entfernen? + Halte Interessen im Blick, indem du Hashtags folgst + Gefolge Hashtags erscheinen hier + Startseite mit Listen organisieren + Deine werden hier erscheinen + Konten hinzufügen oder wechseln 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 ca92c4d93..3543a1249 100644 --- a/mastodon/src/main/res/values-de-rDE/strings_sk.xml +++ b/mastodon/src/main/res/values-de-rDE/strings_sk.xml @@ -415,4 +415,5 @@ Standard-Sichtbarkeit für Posts Neue Follower_innen manuell genehmigen Start-Timeline geleert + Befreundet \ 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 a44f60ba5..a845a2734 100644 --- a/mastodon/src/main/res/values-eu-rES/strings.xml +++ b/mastodon/src/main/res/values-eu-rES/strings.xml @@ -84,6 +84,10 @@ %d egun falta da %d egun falta dira + + Boto %,d + %,d boto + Itxita Mututu kontua Berretsi %s mututzea diff --git a/mastodon/src/main/res/values-gl-rES/strings_sk.xml b/mastodon/src/main/res/values-gl-rES/strings_sk.xml index 1c579e4b6..88acf3640 100644 --- a/mastodon/src/main/res/values-gl-rES/strings_sk.xml +++ b/mastodon/src/main/res/values-gl-rES/strings_sk.xml @@ -256,7 +256,7 @@ Filtrados: %s Expandir Contraer publicacións moi longas - Arranxar arquivos adxuntos\? + Subindo arquivos adxuntos Modo espectador Ocultar botóns de interacción Seguir dende outra conta @@ -330,10 +330,10 @@ GIF Debe instalar un distribuidor para que as notificacións UnifiedPush funcionen. Para máis información, visita https://unifiedpush.org/ Non se atopou ningún distribuidor - Estas son publicacións que están a gañar tracción no teu servidor. + Estas publicacións están a gañar tracción no Fediverso. Escoller un distribuidor Superposición de audio - Estas son as novas historias das que se está a falar no teu servidor. + Destas novas historias se está a falar en todo o Fediverso. Empregar UnifiedPush Desactivar o indicador de lapela activa en forma de pílula Perfil @@ -373,7 +373,7 @@ Buscar unha liña de axuda 1 hora 6 horas - Escribe para reaccionar cunha emoticona + Escribe unha emoticona ou busca 7 días Non amosar outra vez https://findahelpline.com/es @@ -396,4 +396,12 @@ Contas bloqueadas Contas silenciadas Empregados recentemente + Establecer como predefinido + Defecto (%s) + Visibilidade de publicación por defecto + Ligazóns subliñadas + Aprobar manualmente novos seguidores + Caché da cronoloxía de inicio borrada + Borrar a caché da cronoloxía de inicio + Editar texto alternativo \ No newline at end of file diff --git a/mastodon/src/main/res/values-is-rIS/strings.xml b/mastodon/src/main/res/values-is-rIS/strings.xml index 7a0959dd2..6cb2330bf 100644 --- a/mastodon/src/main/res/values-is-rIS/strings.xml +++ b/mastodon/src/main/res/values-is-rIS/strings.xml @@ -639,4 +639,6 @@ %,d nýleg færsla %,d nýlegar færslur + Skref %1$d af %2$d + Búa til diff --git a/mastodon/src/main/res/values-th-rTH/strings.xml b/mastodon/src/main/res/values-th-rTH/strings.xml index 545e318fd..70235c4fd 100644 --- a/mastodon/src/main/res/values-th-rTH/strings.xml +++ b/mastodon/src/main/res/values-th-rTH/strings.xml @@ -608,4 +608,10 @@ %,d โพสต์ล่าสุด + สร้างรายการ + ขั้นตอนที่ %1$d จาก %2$d + สร้าง + จัดการสมาชิกของรายการ + ยังไม่มีสมาชิก + ค้นหาผู้ใช้ที่จะเพิ่ม diff --git a/mastodon/src/main/res/values-vi-rVN/strings.xml b/mastodon/src/main/res/values-vi-rVN/strings.xml index 45d0532a1..6055fec21 100644 --- a/mastodon/src/main/res/values-vi-rVN/strings.xml +++ b/mastodon/src/main/res/values-vi-rVN/strings.xml @@ -249,6 +249,7 @@ Đây là những tút từ người trên máy chủ của bạn (%s) Có thể bạn quen những người này chăng?! + Những tút mới Tải tút chưa đọc Theo dõi lại Đang chờ @@ -599,8 +600,12 @@ Quản lý danh sách %s xuất hiện trên Xóa khỏi danh sách Xóa người này? + Theo dõi những hashtag bạn thích + Chúng sẽ xuất hiện ở đây + Sắp xếp bảng tin bằng Danh sách + Danh sách sẽ xuất hiện ở đây + Thêm hoặc đổi tài khoản %,d tút mới - Đọc những tút mới diff --git a/mastodon/src/main/res/values-zh-rCN/strings_sk.xml b/mastodon/src/main/res/values-zh-rCN/strings_sk.xml index d207644ad..f99a0394c 100644 --- a/mastodon/src/main/res/values-zh-rCN/strings_sk.xml +++ b/mastodon/src/main/res/values-zh-rCN/strings_sk.xml @@ -2,29 +2,29 @@ 置顶 删除并重新编辑 - 删除并重新编辑嘟文 - 确定要删除并重新编辑此嘟文吗? + 删除并重新编辑帖文 + 确定要删除并重新编辑此帖文吗? 置顶 - 置顶嘟文 - 你确定要在资料页置顶此嘟文吗? - 正在置顶嘟文… + 置顶帖文 + 你确定要在资料页置顶此帖文吗? + 正在置顶帖文… 取消置顶 - 取消嘟文置顶 - 你确定不再置顶此嘟文吗? + 取消帖文置顶 + 你确定不再置顶此帖文吗? 正在取消置顶… 图片描述 不公开 联邦时间轴 - 这些是互联实例中最新发布的嘟文。 + 这些是互联实例中最新发布的帖文。 Megalodon 显示回复 显示转嘟 - 自动加载新嘟文 + 自动加载新帖文 显示互动次数 Megalodon v%1$s (%2$d) 标记为敏感媒体 - 启用 %s 的嘟文通知 - 关闭 %s 的嘟文通知 + 启用 %s 的帖文通知 + 关闭 %s 的帖文通知 Megalodon %s 已经可以下载了。 Megalodon %s 已下载,准备安装。 检查更新 @@ -45,8 +45,8 @@ - 嘟文 - 嘟文通知 + 帖文 + 帖文通知 翻译 显示原文 允许多选 @@ -84,8 +84,8 @@ 在联邦宇宙上查找 撤销转嘟 转嘟可见性 - 引用此嘟文 - 复制嘟文链接 + 引用此帖文 + 复制帖文链接 你关注的标签 在 %s 上查找 找不到资源 @@ -101,27 +101,27 @@ 已转嘟过 用其他账号回复 所有通知的统一图标 - 未发送的嘟文 + 未发送的帖文 删除草稿 草稿 定时 - 删除定时嘟文 - 你确定要删除此定时嘟文吗? + 删除定时帖文 + 你确定要删除此定时帖文吗? 草稿或定时 - 嘟文将保存为草稿。 + 帖文将保存为草稿。 定时于 草稿已保存 - 嘟文已定时 + 帖文已定时 转嘟给 %s - 你确定要删除此嘟文草稿吗? + 你确定要删除此帖文草稿吗? 定时时间过早 - 嘟文只能设置为 10 分钟或更晚发送。 + 帖文只能设置为 10 分钟或更晚发送。 保存为草稿? 保存更改? 保存草稿? 保存更改? 标记为草稿 - 定时嘟文 + 定时帖文 不要定时 不要标记为草稿 减少动画效果 @@ -151,14 +151,14 @@ 本站 至少有一个附件不包含描述。 仍然发布 - 如果你为某些人启用了嘟文通知,其新嘟文将显示在此处。 + 如果你为某些人启用了帖文通知,其新帖文将显示在此处。 时间线 编辑时间线 ALT 编辑 - 编辑嘟文 + 编辑帖文 缺少 ALT 文本 - 嘟文 + 帖文 添加 时间线 列表 @@ -223,7 +223,7 @@ 耳机 人类 地球 - 编辑已转嘟嘟文 + 编辑已转嘟帖文 钉子 通过屏蔽并立即解除屏蔽以移除%s的关注者身份? 拍板 @@ -248,7 +248,7 @@ 如果你的主实例运行 Glitch,请启用此功能。Hometown 或 Akkoma 不需要启用。 用户注册 新举报 - “查看新嘟文” 按钮 + “查看新帖文” 按钮 服务器版本: %s 投票结果 展开 @@ -256,7 +256,7 @@ 正在上传附件 部分附件尚未上传完毕。 已过滤:%s - 折叠很长的嘟文 + 折叠很长的帖文 回复时在 CW 前加上 “re:” 旁观模式 隐藏互动按钮 @@ -287,7 +287,7 @@ Markdown BBCode MFM - 启用嘟文格式 + 启用帖文格式 允许在创建文章时设置类似Markdown的内容类型。注意,不是所有的实例都支持这个。 默认的内容类型 Bubble @@ -319,7 +319,7 @@ 禁用药丸状的活跃选项卡指示器 全黑模式 在时间线上显示性别代词 - 显示对嘟文的表情回应,并允许你添加自己的表情回应。许多 Fediverse 服务器支持此功能,但 Mastodon 不支持。 + 显示对帖文的表情回应,并允许你添加自己的表情回应。许多 Fediverse 服务器支持此功能,但 Mastodon 不支持。 在时间线中显示表情回应 是否在时间线中显示表情回应。如果此选项为关闭,则只有在查看对话时才会显示表情回应。 用表情回应 @@ -349,12 +349,12 @@ 医生 钻石 雨伞 - 包含标签的嘟文… + 包含标签的帖文… …但都不包含 …或包含其中任何一个 输入标签… 输入标签… - 仅显示本地嘟文? + 仅显示本地帖文? 标签不可为空 GIF 回复至任何人 @@ -370,29 +370,29 @@ 个人资料 在导航栏中显示选项卡标签 %1$s 回应了 %2$s - 这些都是实例管理员从网络中最新精选出来的嘟文。 + 这些都是实例管理员从网络中最新精选出来的帖文。 搜索联邦宇宙 %d 秒 - 仅当嘟文被打开时 + 仅当帖文被打开时 %d 时 隐藏空的表情回应 在时间线中显示表情回应 - 嘟文 + 帖文 自杀 - 加载较新的嘟文 + 加载较新的帖文 %d 天 始终显示添加按钮 查找求助热线 下次不再显示 - 这些嘟文正在联邦宇宙上引起关注。 - 加载较旧的嘟文 + 这些帖文正在联邦宇宙上引起关注。 + 加载较旧的帖文 以防你遇到困难… %d 分 如果你正在寻找一个不自杀的迹象,这就是。如果你遇到困难,请考虑拨打当地的自杀热线。 这些新闻故事正在联邦宇宙上被讨论。 - 嘟文包含媒体 + 帖文包含媒体 已屏蔽账号 已静音账号 使用心形作为收藏图标 @@ -401,4 +401,8 @@ 默认(%s) 链接加下划线 编辑 ALT 文本 + 默认发帖可见性 + 手动批准新关注者 + 已清除主页时间线缓存 + 清除主页时间线缓存 \ No newline at end of file diff --git a/mastodon/src/main/res/values-zh-rTW/strings.xml b/mastodon/src/main/res/values-zh-rTW/strings.xml index ddadb8a83..a66262662 100644 --- a/mastodon/src/main/res/values-zh-rTW/strings.xml +++ b/mastodon/src/main/res/values-zh-rTW/strings.xml @@ -608,4 +608,10 @@ %,d 最近發嘟 + 新增列表 + %2$d 中之第 %1$d 步 + 新增 + 管理列表成員 + 尚無成員 + 尋找欲新增之使用者 diff --git a/mastodon/src/main/res/values/strings_sk.xml b/mastodon/src/main/res/values/strings_sk.xml index aa2a893d0..5717077c7 100644 --- a/mastodon/src/main/res/values/strings_sk.xml +++ b/mastodon/src/main/res/values/strings_sk.xml @@ -416,4 +416,5 @@ Cleared home timeline cache Manually approve new followers Default posting visibility + Mutuals \ No newline at end of file diff --git a/mastodon/src/main/res/values/styles.xml b/mastodon/src/main/res/values/styles.xml index 70854b068..2f87cb04d 100644 --- a/mastodon/src/main/res/values/styles.xml +++ b/mastodon/src/main/res/values/styles.xml @@ -228,6 +228,9 @@ +