Merge remote-tracking branch 'megalodon_main/main'
# Conflicts: # mastodon/src/main/java/org/joinmastodon/android/api/session/AccountLocalPreferences.java
This commit is contained in:
@@ -42,7 +42,7 @@ public class AccountLocalPreferences{
|
||||
public boolean keepOnlyLatestNotification;
|
||||
|
||||
public boolean emojiReactionsEnabled;
|
||||
public boolean emojiReactionsInTimelines;
|
||||
public ShowEmojiReactions showEmojiReactions;
|
||||
|
||||
private final static Type recentLanguagesType = new TypeToken<ArrayList<String>>() {}.getType();
|
||||
private final static Type timelinesType = new TypeToken<ArrayList<TimelineDefinition>>() {}.getType();
|
||||
@@ -73,7 +73,7 @@ public class AccountLocalPreferences{
|
||||
timelineReplyVisibility=prefs.getString("timelineReplyVisibility", null);
|
||||
keepOnlyLatestNotification=prefs.getBoolean("keepOnlyLatestNotification", false);
|
||||
emojiReactionsEnabled=prefs.getBoolean("emojiReactionsEnabled", session.getInstance().isPresent() && session.getInstance().get().isAkkoma());
|
||||
emojiReactionsInTimelines=prefs.getBoolean("emojiReactionsInTimelines", true);
|
||||
showEmojiReactions=ShowEmojiReactions.valueOf(prefs.getString("showEmojiReactions", ShowEmojiReactions.HIDE_EMPTY.name()));
|
||||
|
||||
// MOSHIDON
|
||||
recentEmojis=fromJson(prefs.getString("recentEmojis", "{}"), recentEmojisType, new HashMap<>());
|
||||
@@ -109,10 +109,16 @@ public class AccountLocalPreferences{
|
||||
.putString("timelineReplyVisibility", timelineReplyVisibility)
|
||||
.putBoolean("keepOnlyLatestNotification", keepOnlyLatestNotification)
|
||||
.putBoolean("emojiReactionsEnabled", emojiReactionsEnabled)
|
||||
.putBoolean("emojiReactionsInTimelines", emojiReactionsInTimelines)
|
||||
.putString("showEmojiReactions", showEmojiReactions.name())
|
||||
|
||||
// MOSHIDON
|
||||
.putString("recentEmojis", gson.toJson(recentEmojis))
|
||||
.apply();
|
||||
}
|
||||
|
||||
public enum ShowEmojiReactions{
|
||||
HIDE_EMPTY,
|
||||
ONLY_OPENED,
|
||||
ALWAYS
|
||||
}
|
||||
}
|
||||
|
||||
@@ -247,8 +247,7 @@ public class NotificationsListFragment extends BaseStatusListFragment<Notificati
|
||||
@Subscribe
|
||||
public void onStatusCountersUpdated(StatusCountersUpdatedEvent ev){
|
||||
for(Notification n:data){
|
||||
if (n.status == null) continue;
|
||||
if(n.status.getContentStatus().id.equals(ev.id)){
|
||||
if(n.status!=null && n.status.getContentStatus().id.equals(ev.id)){
|
||||
n.status.getContentStatus().update(ev);
|
||||
AccountSessionManager.get(accountID).getCacheController().updateNotification(n);
|
||||
for(int i=0;i<list.getChildCount();i++){
|
||||
@@ -262,8 +261,7 @@ public class NotificationsListFragment extends BaseStatusListFragment<Notificati
|
||||
}
|
||||
}
|
||||
for(Notification n:preloadedData){
|
||||
if (n.status == null) continue;
|
||||
if(n.status.getContentStatus().id.equals(ev.id)){
|
||||
if(n.status!=null && n.status.getContentStatus().id.equals(ev.id)){
|
||||
n.status.getContentStatus().update(ev);
|
||||
AccountSessionManager.get(accountID).getCacheController().updateNotification(n);
|
||||
}
|
||||
@@ -273,7 +271,7 @@ public class NotificationsListFragment extends BaseStatusListFragment<Notificati
|
||||
@Subscribe
|
||||
public void onEmojiReactionsChanged(EmojiReactionsUpdatedEvent ev){
|
||||
for(Notification n : data){
|
||||
if(n.status.getContentStatus().id.equals(ev.id)){
|
||||
if(n.status!=null && n.status.getContentStatus().id.equals(ev.id)){
|
||||
n.status.getContentStatus().update(ev);
|
||||
AccountSessionManager.get(accountID).getCacheController().updateNotification(n);
|
||||
for(int i=0; i<list.getChildCount(); i++){
|
||||
@@ -287,7 +285,7 @@ public class NotificationsListFragment extends BaseStatusListFragment<Notificati
|
||||
}
|
||||
}
|
||||
for(Notification n : preloadedData){
|
||||
if(n.status.getContentStatus().id.equals(ev.id)){
|
||||
if(n.status!=null && n.status.getContentStatus().id.equals(ev.id)){
|
||||
n.status.getContentStatus().update(ev);
|
||||
AccountSessionManager.get(accountID).getCacheController().updateNotification(n);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package org.joinmastodon.android.fragments;
|
||||
|
||||
import static org.joinmastodon.android.api.session.AccountLocalPreferences.ShowEmojiReactions.ONLY_OPENED;
|
||||
|
||||
import android.content.res.Configuration;
|
||||
import android.os.Bundle;
|
||||
|
||||
@@ -7,6 +9,7 @@ import com.squareup.otto.Subscribe;
|
||||
|
||||
import org.joinmastodon.android.E;
|
||||
import org.joinmastodon.android.GlobalUserPreferences;
|
||||
import org.joinmastodon.android.api.session.AccountLocalPreferences;
|
||||
import org.joinmastodon.android.api.session.AccountSessionManager;
|
||||
import org.joinmastodon.android.events.EmojiReactionsUpdatedEvent;
|
||||
import org.joinmastodon.android.MainActivity;
|
||||
@@ -40,9 +43,10 @@ public abstract class StatusListFragment extends BaseStatusListFragment<Status>
|
||||
protected List<StatusDisplayItem> buildDisplayItems(Status s){
|
||||
boolean isMainThreadStatus = this instanceof ThreadFragment t && s.id.equals(t.mainStatus.id);
|
||||
int flags = 0;
|
||||
AccountLocalPreferences lp=getLocalPrefs();
|
||||
if (GlobalUserPreferences.spectatorMode)
|
||||
flags |= StatusDisplayItem.FLAG_NO_FOOTER;
|
||||
if (!getLocalPrefs().emojiReactionsInTimelines)
|
||||
if (!lp.emojiReactionsEnabled || lp.showEmojiReactions==ONLY_OPENED)
|
||||
flags |= StatusDisplayItem.FLAG_NO_EMOJI_REACTIONS;
|
||||
return StatusDisplayItem.buildItems(this, s, accountID, s, knownAccounts, getFilterContext(), isMainThreadStatus ? 0 : flags);
|
||||
}
|
||||
|
||||
@@ -2,10 +2,14 @@ package org.joinmastodon.android.fragments.settings;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.annotation.StringRes;
|
||||
|
||||
import org.joinmastodon.android.E;
|
||||
import org.joinmastodon.android.R;
|
||||
import org.joinmastodon.android.api.session.AccountLocalPreferences;
|
||||
import org.joinmastodon.android.api.session.AccountSession;
|
||||
import org.joinmastodon.android.api.session.AccountSessionManager;
|
||||
import org.joinmastodon.android.events.StatusDisplaySettingsChangedEvent;
|
||||
import org.joinmastodon.android.fragments.HasAccountID;
|
||||
import org.joinmastodon.android.model.ContentType;
|
||||
import org.joinmastodon.android.model.viewmodel.CheckableListItem;
|
||||
@@ -15,12 +19,13 @@ import org.joinmastodon.android.ui.utils.UiUtils;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
import me.grishka.appkit.Nav;
|
||||
|
||||
public class SettingsInstanceFragment extends BaseSettingsFragment<Void> implements HasAccountID{
|
||||
private CheckableListItem<Void> contentTypesItem, emojiReactionsItem, emojiReactionsInTimelinesItem, localOnlyItem, glitchModeItem;
|
||||
private ListItem<Void> defaultContentTypeItem;
|
||||
private CheckableListItem<Void> contentTypesItem, emojiReactionsItem, localOnlyItem, glitchModeItem;
|
||||
private ListItem<Void> defaultContentTypeItem, showEmojiReactionsItem;
|
||||
private AccountLocalPreferences lp;
|
||||
|
||||
@Override
|
||||
@@ -37,14 +42,14 @@ public class SettingsInstanceFragment extends BaseSettingsFragment<Void> impleme
|
||||
contentTypesItem=new CheckableListItem<>(R.string.sk_settings_content_types, R.string.sk_settings_content_types_explanation, CheckableListItem.Style.SWITCH, lp.contentTypesEnabled, R.drawable.ic_fluent_text_edit_style_24_regular, this::onContentTypeClick),
|
||||
defaultContentTypeItem=new ListItem<>(R.string.sk_settings_default_content_type, lp.defaultContentType.getName(), R.drawable.ic_fluent_text_bold_24_regular, this::onDefaultContentTypeClick, 0, true),
|
||||
emojiReactionsItem=new CheckableListItem<>(R.string.sk_settings_emoji_reactions, R.string.sk_settings_emoji_reactions_explanation, CheckableListItem.Style.SWITCH, lp.emojiReactionsEnabled, R.drawable.ic_fluent_emoji_laugh_24_regular, this::onEmojiReactionsClick),
|
||||
emojiReactionsInTimelinesItem=new CheckableListItem<>(R.string.sk_settings_emoji_reactions_in_lists, R.string.sk_settings_emoji_reactions_in_lists_explanation, CheckableListItem.Style.SWITCH, lp.emojiReactionsInTimelines, R.drawable.ic_fluent_emoji_24_regular, ()->toggleCheckableItem(emojiReactionsInTimelinesItem), true),
|
||||
showEmojiReactionsItem=new ListItem<>(R.string.sk_settings_show_emoji_reactions, getShowEmojiReactionsString(), R.drawable.ic_fluent_emoji_24_regular, this::onShowEmojiReactionsClick, 0, true),
|
||||
localOnlyItem=new CheckableListItem<>(R.string.sk_settings_support_local_only, R.string.sk_settings_local_only_explanation, CheckableListItem.Style.SWITCH, lp.localOnlySupported, R.drawable.ic_fluent_eye_24_regular, this::onLocalOnlyClick),
|
||||
glitchModeItem=new CheckableListItem<>(R.string.sk_settings_glitch_instance, R.string.sk_settings_glitch_mode_explanation, CheckableListItem.Style.SWITCH, lp.glitchInstance, R.drawable.ic_fluent_eye_24_filled, ()->toggleCheckableItem(glitchModeItem))
|
||||
));
|
||||
contentTypesItem.checkedChangeListener=checked->onContentTypeClick();
|
||||
defaultContentTypeItem.isEnabled=contentTypesItem.checked;
|
||||
emojiReactionsItem.checkedChangeListener=checked->onEmojiReactionsClick();
|
||||
emojiReactionsInTimelinesItem.isEnabled=emojiReactionsItem.checked;
|
||||
showEmojiReactionsItem.isEnabled=emojiReactionsItem.checked;
|
||||
localOnlyItem.checkedChangeListener=checked->onLocalOnlyClick();
|
||||
glitchModeItem.isEnabled=localOnlyItem.checked;
|
||||
}
|
||||
@@ -57,10 +62,10 @@ public class SettingsInstanceFragment extends BaseSettingsFragment<Void> impleme
|
||||
super.onHidden();
|
||||
lp.contentTypesEnabled=contentTypesItem.checked;
|
||||
lp.emojiReactionsEnabled=emojiReactionsItem.checked;
|
||||
lp.emojiReactionsInTimelines=emojiReactionsInTimelinesItem.checked;
|
||||
lp.localOnlySupported=localOnlyItem.checked;
|
||||
lp.glitchInstance=glitchModeItem.checked;
|
||||
lp.save();
|
||||
E.post(new StatusDisplaySettingsChangedEvent(accountID));
|
||||
}
|
||||
|
||||
private void onServerClick(){
|
||||
@@ -107,10 +112,34 @@ public class SettingsInstanceFragment extends BaseSettingsFragment<Void> impleme
|
||||
.show();
|
||||
}
|
||||
|
||||
private void onShowEmojiReactionsClick(){
|
||||
int selected=lp.showEmojiReactions.ordinal();
|
||||
int[] newSelected={selected};
|
||||
new M3AlertDialogBuilder(getActivity())
|
||||
.setTitle(R.string.sk_settings_show_emoji_reactions)
|
||||
.setSingleChoiceItems((String[]) IntStream.of(R.string.sk_settings_show_emoji_reactions_hide_empty, R.string.sk_settings_show_emoji_reactions_only_opened, R.string.sk_settings_show_emoji_reactions_always).mapToObj(this::getString).toArray(String[]::new),
|
||||
selected, (dlg, item)->newSelected[0]=item)
|
||||
.setPositiveButton(R.string.ok, (dlg, item)->{
|
||||
lp.showEmojiReactions=AccountLocalPreferences.ShowEmojiReactions.values()[newSelected[0]];
|
||||
showEmojiReactionsItem.subtitleRes=getShowEmojiReactionsString();
|
||||
rebindItem(showEmojiReactionsItem);
|
||||
})
|
||||
.setNegativeButton(R.string.cancel, null)
|
||||
.show();
|
||||
}
|
||||
|
||||
private @StringRes int getShowEmojiReactionsString(){
|
||||
return switch(lp.showEmojiReactions){
|
||||
case HIDE_EMPTY -> R.string.sk_settings_show_emoji_reactions_hide_empty;
|
||||
case ONLY_OPENED -> R.string.sk_settings_show_emoji_reactions_only_opened;
|
||||
case ALWAYS -> R.string.sk_settings_show_emoji_reactions_always;
|
||||
};
|
||||
}
|
||||
|
||||
private void onEmojiReactionsClick(){
|
||||
toggleCheckableItem(emojiReactionsItem);
|
||||
emojiReactionsInTimelinesItem.checked=emojiReactionsInTimelinesItem.isEnabled=emojiReactionsItem.checked;
|
||||
rebindItem(emojiReactionsInTimelinesItem);
|
||||
showEmojiReactionsItem.isEnabled=emojiReactionsItem.checked;
|
||||
rebindItem(showEmojiReactionsItem);
|
||||
}
|
||||
|
||||
private void onLocalOnlyClick(){
|
||||
|
||||
@@ -41,6 +41,12 @@ public class Emoji extends BaseModel{
|
||||
this.staticUrl = staticUrl;
|
||||
}
|
||||
|
||||
public String getUrl(boolean playGifs){
|
||||
String idealUrl=playGifs ? url : staticUrl;
|
||||
if(idealUrl==null) return url==null ? staticUrl : url;
|
||||
return idealUrl;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(){
|
||||
return "Emoji{"+
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.joinmastodon.android.model;
|
||||
|
||||
import org.joinmastodon.android.GlobalUserPreferences;
|
||||
import org.parceler.Parcel;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -22,6 +23,12 @@ public class EmojiReaction {
|
||||
|
||||
public transient ImageLoaderRequest request;
|
||||
|
||||
public String getUrl(boolean playGifs){
|
||||
String idealUrl=playGifs ? url : staticUrl;
|
||||
if(idealUrl==null) return url==null ? staticUrl : url;
|
||||
return idealUrl;
|
||||
}
|
||||
|
||||
public static EmojiReaction of(Emoji info, Account me){
|
||||
EmojiReaction reaction=new EmojiReaction();
|
||||
reaction.me=true;
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -21,6 +21,7 @@ import androidx.recyclerview.widget.LinearSmoothScroller;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import org.joinmastodon.android.E;
|
||||
import org.joinmastodon.android.GlobalUserPreferences;
|
||||
import org.joinmastodon.android.R;
|
||||
import org.joinmastodon.android.api.MastodonAPIRequest;
|
||||
import org.joinmastodon.android.api.requests.announcements.AddAnnouncementReaction;
|
||||
@@ -59,7 +60,7 @@ import me.grishka.appkit.views.UsableRecyclerView;
|
||||
public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem {
|
||||
public final Status status;
|
||||
private final Drawable placeholder;
|
||||
private final boolean hideEmpty, forAnnouncement;
|
||||
private final boolean hideEmpty, forAnnouncement, playGifs;
|
||||
private final String accountID;
|
||||
private static final float ALPHA_DISABLED=0.55f;
|
||||
|
||||
@@ -71,11 +72,12 @@ public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem {
|
||||
this.accountID=accountID;
|
||||
placeholder=parentFragment.getContext().getDrawable(R.drawable.image_placeholder).mutate();
|
||||
placeholder.setBounds(0, 0, V.sp(24), V.sp(24));
|
||||
playGifs=GlobalUserPreferences.playGifs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getImageCount(){
|
||||
return (int) status.reactions.stream().filter(r->r.url != null).count();
|
||||
return (int) status.reactions.stream().filter(r->r.getUrl(playGifs)!=null).count();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -169,8 +171,9 @@ public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem {
|
||||
public void onBind(EmojiReactionsStatusDisplayItem item) {
|
||||
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);
|
||||
item.status.reactions.forEach(r->r.request=r.getUrl(item.playGifs)!=null
|
||||
? new UrlImageLoaderRequest(r.getUrl(item.playGifs), V.sp(24), V.sp(24))
|
||||
: null);
|
||||
emojiKeyboard=new CustomEmojiPopupKeyboard(
|
||||
(Activity) item.parentFragment.getContext(),
|
||||
AccountSessionManager.getInstance().getCustomEmojis(session.domain),
|
||||
@@ -283,7 +286,7 @@ public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem {
|
||||
|
||||
@Override
|
||||
public void clearImage(int index){
|
||||
if(item.status.reactions.get(index).url==null) return;
|
||||
if(item.status.reactions.get(index).getUrl(item.playGifs)==null) return;
|
||||
setImage(index, item.placeholder);
|
||||
}
|
||||
|
||||
@@ -316,7 +319,7 @@ public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem {
|
||||
|
||||
@Override
|
||||
public int getImageCountForItem(int position){
|
||||
return item.status.reactions.get(position).url == null ? 0 : 1;
|
||||
return item.status.reactions.get(position).getUrl(item.playGifs)==null ? 0 : 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -356,7 +359,7 @@ public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem {
|
||||
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){
|
||||
if(reaction.getUrl(parent.playGifs)==null){
|
||||
Paint p=new Paint();
|
||||
p.setTextSize(V.sp(18));
|
||||
TextDrawable drawable=new TextDrawable(p, reaction.name);
|
||||
@@ -402,7 +405,7 @@ public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem {
|
||||
args.putString("statusID", parent.status.id);
|
||||
int atSymbolIndex = emojiReaction.name.indexOf("@");
|
||||
args.putString("emoji", atSymbolIndex != -1 ? emojiReaction.name.substring(0, atSymbolIndex) : emojiReaction.name);
|
||||
args.putString("url", emojiReaction.url);
|
||||
args.putString("url", emojiReaction.getUrl(parent.playGifs));
|
||||
args.putInt("count", emojiReaction.count);
|
||||
Nav.go(parent.parentFragment.getActivity(), StatusEmojiReactionsListFragment.class, args);
|
||||
return true;
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
package org.joinmastodon.android.ui.displayitems;
|
||||
|
||||
import static org.joinmastodon.android.api.session.AccountLocalPreferences.ShowEmojiReactions.ALWAYS;
|
||||
import static org.joinmastodon.android.api.session.AccountLocalPreferences.ShowEmojiReactions.ONLY_OPENED;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Fragment;
|
||||
import android.content.Context;
|
||||
@@ -12,6 +15,7 @@ import android.view.ViewGroup;
|
||||
|
||||
import org.joinmastodon.android.GlobalUserPreferences;
|
||||
import org.joinmastodon.android.R;
|
||||
import org.joinmastodon.android.api.session.AccountLocalPreferences;
|
||||
import org.joinmastodon.android.api.session.AccountSessionManager;
|
||||
import org.joinmastodon.android.fragments.BaseStatusListFragment;
|
||||
import org.joinmastodon.android.fragments.HashtagTimelineFragment;
|
||||
@@ -280,10 +284,12 @@ public abstract class StatusDisplayItem{
|
||||
if(contentItems!=items && statusForContent.spoilerRevealed){
|
||||
items.addAll(contentItems);
|
||||
}
|
||||
if((flags & FLAG_NO_EMOJI_REACTIONS)==0 && fragment.getLocalPrefs().emojiReactionsEnabled &&
|
||||
(fragment.getLocalPrefs().emojiReactionsInTimelines || fragment instanceof ThreadFragment)){
|
||||
AccountLocalPreferences lp=fragment.getLocalPrefs();
|
||||
if((flags & FLAG_NO_EMOJI_REACTIONS)==0 && lp.emojiReactionsEnabled &&
|
||||
(lp.showEmojiReactions!=ONLY_OPENED || fragment instanceof ThreadFragment)){
|
||||
boolean isMainStatus=fragment instanceof ThreadFragment t && t.getMainStatus().id.equals(statusForContent.id);
|
||||
items.add(new EmojiReactionsStatusDisplayItem(parentID, fragment, statusForContent, accountID, !isMainStatus, false));
|
||||
boolean showAddButton=lp.showEmojiReactions==ALWAYS || isMainStatus;
|
||||
items.add(new EmojiReactionsStatusDisplayItem(parentID, fragment, statusForContent, accountID, !showAddButton, false));
|
||||
}
|
||||
FooterStatusDisplayItem footer=null;
|
||||
if((flags & FLAG_NO_FOOTER)==0){
|
||||
|
||||
@@ -373,4 +373,9 @@
|
||||
<string name="sk_settings_emoji_reactions_in_lists_explanation">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.</string>
|
||||
<string name="sk_button_react">Reacciona con un emoticono</string>
|
||||
<string name="sk_again_for_system_keyboard">Pulsa de nuevo para el Teclado del sistema</string>
|
||||
<plurals name="sk_posts_count_label">
|
||||
<item quantity="one">tema</item>
|
||||
<item quantity="many">temas</item>
|
||||
<item quantity="other">temas</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -374,4 +374,9 @@
|
||||
<string name="sk_again_for_system_keyboard">Appuyez à nouveau pour le clavier système</string>
|
||||
<string name="sk_enter_emoji_hint">Tapez pour réagir avec un emoji</string>
|
||||
<string name="sk_enter_emoji_toast">Vous devez saisir un emoji</string>
|
||||
<plurals name="sk_posts_count_label">
|
||||
<item quantity="one">message</item>
|
||||
<item quantity="many">messages</item>
|
||||
<item quantity="other">messages</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -1,3 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
</resources>
|
||||
<string name="sk_app_name">मेगालोडॉन</string>
|
||||
<string name="sk_pinned_posts">पिन किया गया</string>
|
||||
<string name="sk_delete_and_redraft">हटाएं और पुनः ड्राफ्ट करें</string>
|
||||
<string name="sk_confirm_delete_and_redraft_title">हटाएं और पोस्ट को पुनः ड्राफ्ट करें</string>
|
||||
<string name="sk_pin_post">प्रोफाइल पर पिन करें</string>
|
||||
<string name="sk_confirm_pin_post_title">पोस्ट को प्रोफाइल पर पिन करें</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_visibility_unlisted">असूचित</string>
|
||||
<string name="sk_confirm_delete_and_redraft">क्या आप निश्चित हैं कि आप इस पोस्ट को हटाकर पुनः ड्राफ़्ट करना चाहते हैं\?</string>
|
||||
<string name="sk_confirm_unpin_post">क्या आप निश्चित हैं कि आपको यह पोस्ट अनपिन करनी है\?</string>
|
||||
<string name="sk_confirm_pin_post">क्या आप इस पोस्ट को अपनी प्रोफाइल पर पिन करना चाहते हैं\?</string>
|
||||
</resources>
|
||||
@@ -372,4 +372,7 @@
|
||||
<string name="sk_settings_emoji_reactions_in_lists_explanation">"Menentukan apakah reaksi emoji ditampilkan di lini masa. Jika opsi ini mati, reaksi emoji hanya akan ditampilkan ketika melihat sebuah utas."</string>
|
||||
<string name="sk_button_react">Bereaksi dengan emoji</string>
|
||||
<string name="sk_again_for_system_keyboard">Ketuk lagi untuk Papan Ketik Sistem</string>
|
||||
<plurals name="sk_posts_count_label">
|
||||
<item quantity="other">kiriman</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -310,4 +310,8 @@
|
||||
<string name="sk_instance_info_unavailable">Instance informatie tijdelijk niet beschikbaar</string>
|
||||
<string name="sk_settings_show_labels_in_navigation_bar">Toon tab labels op navigatiebalk</string>
|
||||
<string name="sk_tab_profile">Profiel</string>
|
||||
<plurals name="sk_posts_count_label">
|
||||
<item quantity="one">bericht</item>
|
||||
<item quantity="other">berichten</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -369,4 +369,5 @@
|
||||
<string name="sk_notification_mention">Você foi mencionado por %s</string>
|
||||
<string name="sk_settings_auto_reveal_equal_spoilers">Revelar automaticamente Avisos de Conteúdo nas respostas</string>
|
||||
<string name="sk_icon_recycle_bin">Lixeira de reciclagem</string>
|
||||
<string name="sk_tab_search">Pesquisar</string>
|
||||
</resources>
|
||||
@@ -1,3 +1,78 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
</resources>
|
||||
<string name="sk_delete_and_redraft">ลบแล้วร่างใหม่</string>
|
||||
<string name="sk_confirm_delete_and_redraft_title">ลบแล้วร่างโพสต์ใหม่</string>
|
||||
<string name="sk_pin_post">ปักหมุดไปยังโปรไฟล์</string>
|
||||
<string name="sk_confirm_pin_post_title">ปักหมุดโพสต์ไปยังโปรไฟล์</string>
|
||||
<string name="sk_pinning">กำลังปักหมุดโพสต์…</string>
|
||||
<string name="sk_unpin_post">เลิกปักหมุดจากโปรไฟล์</string>
|
||||
<string name="sk_confirm_unpin_post_title">เลิกปักหมุดโพสต์จากโปรไฟล์</string>
|
||||
<string name="sk_confirm_unpin_post">คุณแน่ใจหรือไม่ว่าต้องการเลิกปักหมุดโพสต์นี้\?</string>
|
||||
<string name="sk_unpinning">กำลังเลิกปักหมุดโพสต์…</string>
|
||||
<string name="sk_image_description">คำอธิบายภาพ</string>
|
||||
<string name="sk_pinned_posts">ปักหมุด</string>
|
||||
<string name="sk_confirm_delete_and_redraft">คุณแน่ใจหรือไม่ว่าต้องการลบและร่างโพสต์นี้ใหม่\?</string>
|
||||
<string name="sk_confirm_pin_post">คุณต้องการปักหมุดโพสต์นี้ไปยังโปรไฟล์ของคุณหรือไม่\?</string>
|
||||
<string name="sk_poll_allow_multiple">อนุญาตหลายตัวเลือก</string>
|
||||
<string name="sk_clear_recent_languages">ล้างภาษาที่ใช้ล่าสุด</string>
|
||||
<string name="sk_welcome_title">ยินดีต้อนรับ!</string>
|
||||
<string name="sk_app_name">Megalodon</string>
|
||||
<string name="sk_visibility_unlisted">ไม่อยู่ในรายการ</string>
|
||||
<string name="sk_settings_show_replies">แสดงการตอบกลับ</string>
|
||||
<string name="sk_translate_show_original">แสดงต้นฉบับ</string>
|
||||
<string name="sk_translated_using">แปลด้วย %s</string>
|
||||
<string name="sk_post_language">ภาษา: %s</string>
|
||||
<string name="sk_available_languages">ภาษาที่ใช้งานได้</string>
|
||||
<string name="sk_language_name">%1$s (%2$s)</string>
|
||||
<string name="sk_confirm_clear_recent_languages">คุณแน่ใจหรือไม่ว่าต้องการล้างภาษาที่ใช้ล่าสุด\?</string>
|
||||
<string name="sk_example_domain">example.social</string>
|
||||
<string name="sk_translate_post">แปล</string>
|
||||
<string name="sk_settings_translate_only_opened">แปลเฉพาะโพสต์ที่เปิดอยู่</string>
|
||||
<string name="sk_settings_rules">กฎ</string>
|
||||
<string name="sk_settings_profile">ตั้งค่าโปรไฟล์</string>
|
||||
<string name="sk_settings_about">เกี่ยวกับแอป</string>
|
||||
<string name="sk_settings_donate">บริจาค</string>
|
||||
<string name="sk_color_palette_material3">ระบบ</string>
|
||||
<string name="sk_color_palette_pink">ชมพู</string>
|
||||
<string name="sk_color_palette_purple">ม่วง</string>
|
||||
<string name="sk_color_palette_green">เขียว</string>
|
||||
<string name="sk_color_palette_blue">ฟ้า</string>
|
||||
<string name="sk_color_palette_brown">น้ำตาล</string>
|
||||
<string name="sk_settings_color_palette">ชุดสี</string>
|
||||
<string name="sk_delete_notification">ลบการแจ้งเตือน</string>
|
||||
<string name="sk_delete_notification_confirm_action">ลบการแจ้งเตือน</string>
|
||||
<string name="sk_delete_notification_confirm">คุณแน่ใจหรือไม่ว่าต้องการลบการแจ้งเตือนนี้\?</string>
|
||||
<string name="sk_clear_all_notifications_confirm_action">ลบทั้งหมด</string>
|
||||
<string name="sk_clear_all_notifications_confirm">คุณแน่ใจหรือไม่ว่าต้องการล้างการแจ้งเตือนทั้งหมด\?</string>
|
||||
<string name="sk_lists_with_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_quoting_user">กำลังอ้างอิง %s</string>
|
||||
<string name="sk_settings_reply_visibility">การมองเห็นการตอบกลับ</string>
|
||||
<string name="sk_settings_show_boosts">แสดงการดัน</string>
|
||||
<string name="sk_settings_continues_playback">ซ้อนทับเสียง</string>
|
||||
<string name="sk_settings_continues_playback_summary">อนุญาตให้สื่อที่กำลังเล่นอยู่แล้วเล่นต่อไปได้ โดยซ้อนทับการเล่นใหม่</string>
|
||||
<string name="sk_settings_load_new_posts">โหลดโพสต์ใหม่อัตโนมัติ</string>
|
||||
<string name="sk_settings_app_version">Megalodon รุ่น %1$s (%2$d)</string>
|
||||
<string name="sk_mark_media_as_sensitive">ทำเครื่องหมายสื่อว่าละเอียดอ่อน</string>
|
||||
<string name="sk_user_post_notifications_off">ปิดการแจ้งเตือนโพสต์สำหรับ %s แล้ว</string>
|
||||
<string name="sk_federated_timeline">ที่ติดต่อกับภายนอก</string>
|
||||
<string name="sk_color_palette_red">แดง</string>
|
||||
<string name="sk_settings_publish_button_text">ข้อความปุ่มเผยแพร่</string>
|
||||
<string name="sk_check_for_update">ตรวจสอบอัปเดต</string>
|
||||
<string name="sk_no_update_available">ไม่มีการอัปเดต</string>
|
||||
<string name="sk_list_timelines">รายการ</string>
|
||||
<string name="sk_follow_requests">คำขอติดตาม</string>
|
||||
<string name="sk_accept_follow_request">ยอมรับคำขอติดตาม</string>
|
||||
<string name="sk_reject_follow_request">ปฏิเสธคำขอติดตาม</string>
|
||||
<string name="sk_color_palette_yellow">เหลือง</string>
|
||||
<string name="sk_settings_show_interaction_counts">แสดงจำนวนการโต้ตอบ</string>
|
||||
<string name="sk_notification_type_status">โพสต์</string>
|
||||
<string name="sk_user_post_notifications_on">เปิดการแจ้งเตือนโพสต์สำหรับ %s แล้ว</string>
|
||||
<string name="sk_notification_type_posts">การแจ้งเตือนโพสต์</string>
|
||||
<string name="sk_update_available">Megalodon รุ่น %s พร้อมให้ดาวน์โหลดแล้ว</string>
|
||||
<string name="sk_settings_tabs_disable_swipe">ปิดใช้การปัดระหว่างแท็บ</string>
|
||||
<string name="sk_update_ready">Megalodon รุ่น %s ดาวน์โหลดเสร็จและพร้อมให้ติดตั้งแล้ว</string>
|
||||
<string name="sk_clear_all_notifications">ล้างการแจ้งเตือนทั้งหมด</string>
|
||||
</resources>
|
||||
@@ -374,4 +374,10 @@
|
||||
<string name="sk_enter_emoji_toast">Вам потрібно ввести емоджі</string>
|
||||
<string name="sk_enter_emoji_hint">Введіть, щоб відреагувати з емоджі</string>
|
||||
<string name="sk_settings_emoji_reactions_in_lists_explanation">Чи відображати реакції емоджі у стрічках. Якщо цю опцію вимкнено, реакції емоджі показуватимуться лише під час перегляду гілки.</string>
|
||||
<plurals name="sk_posts_count_label">
|
||||
<item quantity="one">допис</item>
|
||||
<item quantity="few">дописи</item>
|
||||
<item quantity="many">дописів</item>
|
||||
<item quantity="other">дописів</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -352,8 +352,10 @@
|
||||
<string name="sk_settings_show_labels_in_navigation_bar">Show tab labels in the navigation bar</string>
|
||||
<string name="sk_settings_emoji_reactions">Enable emoji reactions</string>
|
||||
<string name="sk_settings_emoji_reactions_explanation">Displays emoji reactions to posts and lets you interact with them. Some modified versions of Mastodon support this, but Mastodon doesn\'t.</string>
|
||||
<string name="sk_settings_emoji_reactions_in_lists">Show emoji reactions in timelines</string>
|
||||
<string name="sk_settings_emoji_reactions_in_lists_explanation">Whether emoji reactions should be displayed on timelines. If this option is off, emoji reactions will only be displayed when viewing a thread.</string>
|
||||
<string name="sk_settings_show_emoji_reactions">Show emoji reactions in timelines</string>
|
||||
<string name="sk_settings_show_emoji_reactions_hide_empty">Hide empty emoji reactions</string>
|
||||
<string name="sk_settings_show_emoji_reactions_only_opened">Only when post is opened</string>
|
||||
<string name="sk_settings_show_emoji_reactions_always">Always show add button</string>
|
||||
<plurals name="sk_users_reacted_with">
|
||||
<item quantity="one">One user reacted with %2$s</item>
|
||||
<item quantity="other">%1$,d users reacted with %2$s</item>
|
||||
|
||||
Reference in New Issue
Block a user