Merge branch 'develop'

This commit is contained in:
Thomas 2020-06-06 18:47:14 +02:00
commit ce858751b1
53 changed files with 1567 additions and 512 deletions

View File

@ -6,8 +6,8 @@ android {
defaultConfig { defaultConfig {
minSdkVersion 19 minSdkVersion 19
targetSdkVersion 29 targetSdkVersion 29
versionCode 368 versionCode 369
versionName "2.35.4" versionName "2.35.5"
multiDexEnabled true multiDexEnabled true
renderscriptTargetApi 28 as int renderscriptTargetApi 28 as int
renderscriptSupportModeEnabled true renderscriptSupportModeEnabled true
@ -89,7 +89,7 @@ dependencies {
annotationProcessor 'com.android.support:support-annotations:28.0.0' annotationProcessor 'com.android.support:support-annotations:28.0.0'
implementation "org.conscrypt:conscrypt-android:2.4.0" implementation "org.conscrypt:conscrypt-android:2.4.0"
implementation "com.evernote:android-job:1.2.6" implementation "com.evernote:android-job:1.2.6"
implementation "com.google.code.gson:gson:2.8.5" implementation "com.google.code.gson:gson:2.8.6"
implementation "com.google.guava:guava:28.2-android" implementation "com.google.guava:guava:28.2-android"
implementation "com.github.chrisbanes:PhotoView:2.3.0" implementation "com.github.chrisbanes:PhotoView:2.3.0"
implementation 'com.r0adkll:slidableactivity:2.1.0' implementation 'com.r0adkll:slidableactivity:2.1.0'

View File

@ -111,6 +111,7 @@
android:name="app.fedilab.android.activities.MainActivity" android:name="app.fedilab.android.activities.MainActivity"
android:configChanges="keyboardHidden|orientation|screenSize" android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/app_name" android:label="@string/app_name"
android:launchMode="singleTask"
android:theme="@style/AppThemeDark_NoActionBar" android:theme="@style/AppThemeDark_NoActionBar"
android:windowSoftInputMode="adjustResize"> android:windowSoftInputMode="adjustResize">
<intent-filter> <intent-filter>

View File

@ -1,12 +0,0 @@
Added
- Unshortened URLs can be copied or shared
- Trends in tags search
- Image are shared/stored from cache
- Message when a media is successfully downloaded
Fixed
- Issue with polls not displayed
- Notifications not stopped
- Pleroma wysiwyg
- Login issue
- Some crashes

View File

@ -1,6 +0,0 @@
Added
- Follow Nitter feeds (ie: Twitter account timelines)
Fixed
- Crash issue when no live notifications
- Trends can't be hidden

View File

@ -1,14 +0,0 @@
Added
- Original & boost dates added separately
- Follow request notifications
- Identity proofs support
Changed
- Media are preloaded when scrolling
- Improve live/delayed notifications
Fixed
- Counter for mentions
- Preview images displayed twice
- Media not saved on Android 10+
- Issue when following instances/pinging tags

View File

@ -1,6 +0,0 @@
Added
- Friendica: Authorize/Reject follow requests
Fixed
- Not cropped media
- Crash when starting the app

View File

@ -1,6 +0,0 @@
Added
- Friendica: Authorize/Reject follow requests
Fixed
- Not cropped media
- Crash when starting the app

View File

@ -1,13 +0,0 @@
Added
- Pixelfed: post media to stories
- Long press bio to open the contextual menu
- Allow to invite with Pleroma
Changed
- Import theme always visible
- Improve login activity
Fixed
- Filter with regex
- Issues with talk back and magnifying glass
- Some crashes

View File

@ -1,5 +0,0 @@
Fixed:
- Mentions with delete & re-draft for Pleroma accounts
- Nitter timelines with refresh
- Remove notification bar for Android 8-
- Fix "No Internet connection" error on some instances when posting

View File

@ -1,13 +0,0 @@
Added:
- Català language
- Push notifications for Friendica & GNU Social
- Add follow/unfollow buttons for Pixelfed
- View your own story (need to wait the endpoint)
- Increase max bio chars to 500 for Pleroma
Fixed:
- Proxy not applied with embedded videos
- Fix no toots that remains displayed on Nitter timelines
- Avoid to lose composed message when not sent
- Notifications not pushed
- Fix some crashes

View File

@ -1,7 +0,0 @@
Added:
- Text selectable for fields in profiles
Fixed:
- Fix the scrolling issue in timelines
- Peertube videos crashes
- Color of the compose menu for the light theme

View File

@ -1,9 +0,0 @@
Added:
- Announcements for Mastodon with reactions
- Pleroma: reactions in posts
Changed:
- Filters changed to speed-up the scroll
Fixed:
- Custom emojis not displayed in compose activity

View File

@ -1,14 +0,0 @@
Added:
- Allow to edit searches
Changed:
- Move the favourite item in menu
Fixed:
- Filters not working
- Crash when sharing http URLs
- Missing ogg image when sharing
- Extra space with quick replies
- Crash when doing searches
- Fix crash when clicking on conversations
- Fix crash when editing profile

View File

@ -1,4 +0,0 @@
Fixed:
- Crash due to a library update
- Missing animate profile pictures
- Fix some color issues

View File

@ -1,9 +0,0 @@
Changed:
- Improve memory management
- Improve scroll
- One logout entry in the menu (it will remove the account from the app)
- Clear push notifications when visiting notifications tab
Fixed:
- Long press to store media download the preview image
- Fix pagination with Nitter timelines

View File

@ -1,11 +0,0 @@
Changed:
- Improve memory management
- Improve scroll
- Poll layouts cleaner
- One logout entry in the menu (it will remove the account from the app)
- Clear push notifications when visiting notifications tab
Fixed:
- Long press to store media download the preview image
- Fix pagination with Nitter timelines
- Avatars not displayed for Peertube

View File

@ -1,8 +0,0 @@
Added:
- Gif support for some keyboards.
- Support animated emoji for reactions
Fixed:
- Crash when playing Youtube videos in timelines
- Announcements not displayed
- A crash due to recent changes

View File

@ -1,9 +0,0 @@
Added:
- Gif support for some keyboards.
- Support animated emoji for reactions
Fixed:
- Crash when playing Youtube videos in timelines
- Announcements not displayed
- A crash due to recent changes
- +Fix a crash due to polls

View File

@ -1,3 +0,0 @@
Fixed:
- Empty content for Friendica/GNU accounts
- Username can't be changed in profile

View File

@ -1,4 +0,0 @@
Fixed:
- Lot of crashes 🥺🥺😱
- Push notifications not working
- Some issues with filters

View File

@ -0,0 +1,10 @@
Added:
- Silesian localization
Changed:
- Add Silesian in language picker
Fixed:
- Some URLs not clickable
- Empty home timeline
- Some crashes when scrolling

View File

@ -6,7 +6,6 @@ import android.content.Context;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.os.Bundle; import android.os.Bundle;
import android.os.StrictMode;
import android.view.ActionMode; import android.view.ActionMode;
import android.view.View; import android.view.View;
import android.widget.Toast; import android.widget.Toast;
@ -25,7 +24,6 @@ import org.jetbrains.annotations.NotNull;
import java.util.Timer; import java.util.Timer;
import app.fedilab.android.BuildConfig;
import app.fedilab.android.helper.Helper; import app.fedilab.android.helper.Helper;
import es.dmoral.toasty.Toasty; import es.dmoral.toasty.Toasty;

View File

@ -593,7 +593,12 @@ public class LoginActivity extends BaseActivity {
editor.putString(Helper.PREF_KEY_OAUTH_TOKEN, token); editor.putString(Helper.PREF_KEY_OAUTH_TOKEN, token);
editor.apply(); editor.apply();
//Update the account with the token; //Update the account with the token;
new UpdateAccountInfoAsyncTask(LoginActivity.this, token, client_id, client_secret, refresh_token, instance, socialNetwork).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); if (instance != null) {
new UpdateAccountInfoAsyncTask(LoginActivity.this, token, client_id, client_secret, refresh_token, instance, socialNetwork).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} else {
connectionButton.setEnabled(true);
Toasty.error(LoginActivity.this, getString(R.string.toast_error), Toast.LENGTH_LONG).show();
}
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
} }

View File

@ -207,6 +207,7 @@ import static app.fedilab.android.helper.Helper.THEME_BLACK;
import static app.fedilab.android.helper.Helper.THEME_DARK; import static app.fedilab.android.helper.Helper.THEME_DARK;
import static app.fedilab.android.helper.Helper.THEME_LIGHT; import static app.fedilab.android.helper.Helper.THEME_LIGHT;
import static app.fedilab.android.helper.Helper.countWithEmoji; import static app.fedilab.android.helper.Helper.countWithEmoji;
import static app.fedilab.android.helper.Helper.isValidContextForGlide;
/** /**
@ -646,7 +647,7 @@ public class TootActivity extends BaseActivity implements UploadStatusDelegate,
} }
} }
public static String manageMentions(Context context, String userIdReply, Status tootReply) { public static String manageMentions(String userIdReply, Status tootReply) {
String contentView = ""; String contentView = "";
//Retrieves mentioned accounts + OP and adds them at the beginin of the toot //Retrieves mentioned accounts + OP and adds them at the beginin of the toot
ArrayList<String> mentionedAccountsAdded = new ArrayList<>(); ArrayList<String> mentionedAccountsAdded = new ArrayList<>();
@ -1340,53 +1341,57 @@ public class TootActivity extends BaseActivity implements UploadStatusDelegate,
it.remove(); it.remove();
} }
if (fileName != null) { if (fileName != null) {
Glide.with(imageView.getContext()) if (isValidContextForGlide(imageView.getContext())) {
.asBitmap() Glide.with(imageView.getContext())
.load(fileName) .asBitmap()
.into(new CustomTarget<Bitmap>() { .load(fileName)
@Override .into(new CustomTarget<Bitmap>() {
public void onResourceReady(@NonNull Bitmap resource, Transition<? super Bitmap> transition) { @Override
imageView.setImageBitmap(resource); public void onResourceReady(@NonNull Bitmap resource, Transition<? super Bitmap> transition) {
} imageView.setImageBitmap(resource);
}
@Override @Override
public void onLoadCleared(@Nullable Drawable placeholder) { public void onLoadCleared(@Nullable Drawable placeholder) {
} }
}); });
}
} }
} }
} else { } else {
String finalUrl = url; if (isValidContextForGlide(imageView.getContext())) {
Glide.with(imageView.getContext()) String finalUrl = url;
.asBitmap() Glide.with(imageView.getContext())
.load(url) .asBitmap()
.error(Glide.with(imageView).asBitmap().load(R.drawable.ic_audio_wave)) .load(url)
.into(new CustomTarget<Bitmap>() { .error(Glide.with(imageView).asBitmap().load(R.drawable.ic_audio_wave))
@Override .into(new CustomTarget<Bitmap>() {
public void onResourceReady(@NonNull Bitmap resource, Transition<? super Bitmap> transition) { @Override
imageView.setImageBitmap(resource); public void onResourceReady(@NonNull Bitmap resource, Transition<? super Bitmap> transition) {
if (displayWYSIWYG()) { imageView.setImageBitmap(resource);
url_for_media = finalUrl; if (displayWYSIWYG()) {
Iterator it = filesMap.entrySet().iterator(); url_for_media = finalUrl;
String fileName = null; Iterator it = filesMap.entrySet().iterator();
while (it.hasNext()) { String fileName = null;
Map.Entry pair = (Map.Entry) it.next(); while (it.hasNext()) {
fileName = (String) pair.getKey(); Map.Entry pair = (Map.Entry) it.next();
it.remove(); fileName = (String) pair.getKey();
} it.remove();
if (fileName != null && fileName.contains("fedilabins_")) { }
wysiwyg.insertImage(resource); if (fileName != null && fileName.contains("fedilabins_")) {
wysiwyg.insertImage(resource);
}
} }
} }
}
@Override @Override
public void onLoadCleared(@Nullable Drawable placeholder) { public void onLoadCleared(@Nullable Drawable placeholder) {
} }
}); });
}
} }
@ -2246,8 +2251,7 @@ public class TootActivity extends BaseActivity implements UploadStatusDelegate,
if (namebar != null && namebar.getParent() != null) if (namebar != null && namebar.getParent() != null)
((ViewGroup) namebar.getParent()).removeView(namebar); ((ViewGroup) namebar.getParent()).removeView(namebar);
} }
List<Attachment> tmp_attachment = new ArrayList<>(); List<Attachment> tmp_attachment = new ArrayList<>(attachments);
tmp_attachment.addAll(attachments);
attachments.removeAll(tmp_attachment); attachments.removeAll(tmp_attachment);
tmp_attachment.clear(); tmp_attachment.clear();
} }
@ -2585,8 +2589,7 @@ public class TootActivity extends BaseActivity implements UploadStatusDelegate,
if (namebar != null && namebar.getParent() != null) if (namebar != null && namebar.getParent() != null)
((ViewGroup) namebar.getParent()).removeView(namebar); ((ViewGroup) namebar.getParent()).removeView(namebar);
} }
List<Attachment> tmp_attachment = new ArrayList<>(); List<Attachment> tmp_attachment = new ArrayList<>(attachments);
tmp_attachment.addAll(attachments);
attachments.removeAll(tmp_attachment); attachments.removeAll(tmp_attachment);
tmp_attachment.clear(); tmp_attachment.clear();
} }
@ -3069,9 +3072,7 @@ public class TootActivity extends BaseActivity implements UploadStatusDelegate,
} }
}); });
imageView.setTag(attachment.getId()); imageView.setTag(attachment.getId());
imageView.setOnClickListener(view -> { imageView.setOnClickListener(view -> imageView.setOnClickListener(view1 -> showAddDescription(attachment)));
imageView.setOnClickListener(view1 -> showAddDescription(attachment));
});
imageView.setOnLongClickListener(view -> { imageView.setOnLongClickListener(view -> {
showRemove(imageView.getId()); showRemove(imageView.getId());
return false; return false;
@ -3396,7 +3397,7 @@ public class TootActivity extends BaseActivity implements UploadStatusDelegate,
private void displayPollPopup() { private void displayPollPopup() {
AlertDialog.Builder alertPoll = new AlertDialog.Builder(TootActivity.this, style); AlertDialog.Builder alertPoll = new AlertDialog.Builder(TootActivity.this, style);
alertPoll.setTitle(R.string.create_poll); alertPoll.setTitle(R.string.create_poll);
View view = getLayoutInflater().inflate(R.layout.popup_poll, null); View view = getLayoutInflater().inflate(R.layout.popup_poll, new LinearLayout(TootActivity.this), false);
alertPoll.setView(view); alertPoll.setView(view);
Spinner poll_choice = view.findViewById(R.id.poll_choice); Spinner poll_choice = view.findViewById(R.id.poll_choice);
Spinner poll_duration = view.findViewById(R.id.poll_duration); Spinner poll_duration = view.findViewById(R.id.poll_duration);

View File

@ -190,7 +190,7 @@ public class WebviewActivity extends BaseActivity {
@Override @Override
public boolean onPrepareOptionsMenu(Menu menu) { public boolean onPrepareOptionsMenu(Menu menu) {
if (!peertubeLink) if (!peertubeLink)
setCount(this, "0"); setCount(WebviewActivity.this, "0");
defaultMenu = menu; defaultMenu = menu;
return super.onPrepareOptionsMenu(menu); return super.onPrepareOptionsMenu(menu);
} }

View File

@ -150,7 +150,9 @@ public class WebviewConnectActivity extends BaseActivity {
} }
}); });
if (instance == null) {
finish();
}
webView.setWebViewClient(new WebViewClient() { webView.setWebViewClient(new WebViewClient() {
@Override @Override
public boolean shouldOverrideUrlLoading(WebView view, String url) { public boolean shouldOverrideUrlLoading(WebView view, String url) {
@ -200,6 +202,7 @@ public class WebviewConnectActivity extends BaseActivity {
}); });
webView.loadUrl(LoginActivity.redirectUserToAuthorizeAndLogin(WebviewConnectActivity.this, clientId, instance)); webView.loadUrl(LoginActivity.redirectUserToAuthorizeAndLogin(WebviewConnectActivity.this, clientId, instance));
} }
@Override @Override

View File

@ -139,7 +139,7 @@ public class Account implements Parcelable {
private String invite_request; private String invite_request;
private String created_by_application_id; private String created_by_application_id;
private String invited_by_account_id; private String invited_by_account_id;
private boolean emojiFound = false; private transient boolean emojiFound = false;
public Account() { public Account() {
} }
@ -202,7 +202,7 @@ public class Account implements Parcelable {
public static void makeAccountNameEmoji(final WeakReference<Context> contextWeakReference, Account account) { public static void makeAccountNameEmoji(final WeakReference<Context> contextWeakReference, Account account) {
Context context = contextWeakReference.get(); Context context = contextWeakReference.get();
if ((context instanceof Activity && ((Activity) context).isFinishing()) || account.getDisplay_name() == null) if ((context instanceof Activity && ((Activity) context).isFinishing()) || account == null || account.getDisplay_name() == null)
return; return;
account.setDisplayNameSpan(new SpannableString(account.getDisplay_name())); account.setDisplayNameSpan(new SpannableString(account.getDisplay_name()));
@ -723,7 +723,7 @@ public class Account implements Parcelable {
int startPositionTar = spannableString.toString().indexOf("@" + this.getMoved_to_account().getAcct()); int startPositionTar = spannableString.toString().indexOf("@" + this.getMoved_to_account().getAcct());
int endPositionTar = startPositionTar + ("@" + this.getMoved_to_account().getAcct()).length(); int endPositionTar = startPositionTar + ("@" + this.getMoved_to_account().getAcct()).length();
final Account idTar = this.getMoved_to_account(); final Account idTar = this.getMoved_to_account();
if (endPositionTar <= spannableString.toString().length() && endPositionTar >= startPositionTar) if (startPositionTar >= 0 && endPositionTar <= spannableString.toString().length() && endPositionTar >= startPositionTar)
spannableString.setSpan(new ClickableSpan() { spannableString.setSpan(new ClickableSpan() {
@Override @Override
public void onClick(@NonNull View textView) { public void onClick(@NonNull View textView) {
@ -801,7 +801,7 @@ public class Account implements Parcelable {
int matchStart = matcher.start(0); int matchStart = matcher.start(0);
int matchEnd = matcher.end(); int matchEnd = matcher.end();
final String url = fieldSpan.toString().substring(matchStart, matchEnd); final String url = fieldSpan.toString().substring(matchStart, matchEnd);
if (matchEnd <= fieldSpan.toString().length() && matchEnd >= matchStart) { if (matchStart >= 0 && matchEnd <= fieldSpan.toString().length() && matchEnd >= matchStart) {
fieldSpan.setSpan(new ClickableSpan() { fieldSpan.setSpan(new ClickableSpan() {
@Override @Override
public void onClick(@NonNull View textView) { public void onClick(@NonNull View textView) {
@ -832,7 +832,7 @@ public class Account implements Parcelable {
int matchStart = matcher.start(0); int matchStart = matcher.start(0);
int matchEnd = matcher.end(); int matchEnd = matcher.end();
final String email = fieldSpan.toString().substring(matchStart, matchEnd); final String email = fieldSpan.toString().substring(matchStart, matchEnd);
if (matchEnd <= fieldSpan.toString().length() && matchEnd >= matchStart) { if (matchStart >= 0 && matchEnd <= fieldSpan.toString().length() && matchEnd >= matchStart) {
fieldSpan.setSpan(new ClickableSpan() { fieldSpan.setSpan(new ClickableSpan() {
@Override @Override
public void onClick(@NonNull View textView) { public void onClick(@NonNull View textView) {
@ -865,7 +865,7 @@ public class Account implements Parcelable {
int matchStart = matcher.start(1); int matchStart = matcher.start(1);
int matchEnd = matcher.end(); int matchEnd = matcher.end();
final String tag = fieldSpan.toString().substring(matchStart, matchEnd); final String tag = fieldSpan.toString().substring(matchStart, matchEnd);
if (matchEnd <= fieldSpan.toString().length() && matchEnd >= matchStart) if (matchStart >= 0 && matchEnd <= fieldSpan.toString().length() && matchEnd >= matchStart)
fieldSpan.setSpan(new ClickableSpan() { fieldSpan.setSpan(new ClickableSpan() {
@Override @Override
public void onClick(@NonNull View textView) { public void onClick(@NonNull View textView) {
@ -935,7 +935,7 @@ public class Account implements Parcelable {
int matchStart = matcher.start(0); int matchStart = matcher.start(0);
int matchEnd = matcher.end(); int matchEnd = matcher.end();
final String url = fieldSpan.toString().substring(matchStart, matchEnd); final String url = fieldSpan.toString().substring(matchStart, matchEnd);
if (matchEnd <= fieldSpan.toString().length() && matchEnd >= matchStart) { if (matchStart >= 0 && matchEnd <= fieldSpan.toString().length() && matchEnd >= matchStart) {
fieldSpan.setSpan(new ClickableSpan() { fieldSpan.setSpan(new ClickableSpan() {
@Override @Override
public void onClick(@NonNull View textView) { public void onClick(@NonNull View textView) {

View File

@ -145,17 +145,17 @@ public class Status implements Parcelable {
private Card card; private Card card;
private String language; private String language;
private boolean isTranslated = false; private boolean isTranslated = false;
private boolean isEmojiFound = false; private transient boolean isEmojiFound = false;
private boolean isPollEmojiFound = false; private transient boolean isPollEmojiFound = false;
private boolean isImageFound = false; private transient boolean isImageFound = false;
private boolean isEmojiTranslateFound = false; private transient boolean isEmojiTranslateFound = false;
private boolean isTranslationShown = false; private boolean isTranslationShown = false;
private boolean isNew = false; private boolean isNew = false;
private boolean isVisible = true; private boolean isVisible = true;
private boolean fetchMore = false; private boolean fetchMore = false;
private String content, contentCW, contentTranslated; private String content, contentCW, contentTranslated;
private SpannableString contentSpan, contentSpanCW, contentSpanTranslated; private SpannableString contentSpan, contentSpanCW, contentSpanTranslated;
private RetrieveFeedsAsyncTask.Type type; private transient RetrieveFeedsAsyncTask.Type type;
private int itemViewType; private int itemViewType;
private String conversationId; private String conversationId;
private boolean isExpanded = false; private boolean isExpanded = false;
@ -184,9 +184,9 @@ public class Status implements Parcelable {
private List<String> imageURL; private List<String> imageURL;
private int viewType; private int viewType;
private boolean isFocused = false; private boolean isFocused = false;
private long db_id; private transient long db_id;
private boolean commentsFetched = false; private transient boolean commentsFetched = false;
private List<Status> comments = new ArrayList<>(); private transient List<Status> comments = new ArrayList<>();
public Status() { public Status() {
} }
@ -423,6 +423,7 @@ public class Status implements Parcelable {
HashMap<String, String> targetedURL = new HashMap<>(); HashMap<String, String> targetedURL = new HashMap<>();
HashMap<String, Account> accountsMentionUnknown = new HashMap<>(); HashMap<String, Account> accountsMentionUnknown = new HashMap<>();
String liveInstance = Helper.getLiveInstance(context); String liveInstance = Helper.getLiveInstance(context);
int i = 1;
while (matcher.find()) { while (matcher.find()) {
String key; String key;
@ -433,14 +434,14 @@ public class Status implements Parcelable {
key = key.substring(1); key = key.substring(1);
if (!key.startsWith("#") && !key.startsWith("@") && !key.trim().equals("") && !Objects.requireNonNull(matcher.group(2)).contains("search?tag=") && !Objects.requireNonNull(matcher.group(2)).contains(liveInstance + "/users/")) { if (!key.startsWith("#") && !key.startsWith("@") && !key.trim().equals("") && !Objects.requireNonNull(matcher.group(2)).contains("search?tag=") && !Objects.requireNonNull(matcher.group(2)).contains(liveInstance + "/users/")) {
String url; String url;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
url = Html.fromHtml(matcher.group(2), Html.FROM_HTML_MODE_LEGACY).toString(); url = Html.fromHtml(matcher.group(2), Html.FROM_HTML_MODE_LEGACY).toString();
} else { } else {
url = Html.fromHtml(matcher.group(2)).toString(); url = Html.fromHtml(matcher.group(2)).toString();
} }
targetedURL.put(key, url); targetedURL.put(key + "|" + i, url);
i++;
} else if (key.startsWith("@") || Objects.requireNonNull(matcher.group(2)).contains(liveInstance + "/users/")) { } else if (key.startsWith("@") || Objects.requireNonNull(matcher.group(2)).contains(liveInstance + "/users/")) {
String acct; String acct;
String url; String url;
@ -524,7 +525,7 @@ public class Status implements Parcelable {
int matchStart = matcher.start(2); int matchStart = matcher.start(2);
int matchEnd = matcher.end(); int matchEnd = matcher.end();
final String twittername = matcher.group(2); final String twittername = matcher.group(2);
if (matchEnd <= spannableStringT.toString().length() && matchEnd >= matchStart) if (matchStart >= 0 && matchEnd <= spannableStringT.toString().length() && matchEnd >= matchStart)
spannableStringT.setSpan(new ClickableSpan() { spannableStringT.setSpan(new ClickableSpan() {
@Override @Override
public void onClick(@NonNull View textView) { public void onClick(@NonNull View textView) {
@ -573,7 +574,7 @@ public class Status implements Parcelable {
endPosition = startPosition + key.length(); endPosition = startPosition + key.length();
} }
//Accounts can be mentioned several times so we have to loop //Accounts can be mentioned several times so we have to loop
if (endPosition <= spannableStringT.toString().length() && endPosition >= startPosition) if (startPosition >= 0 && endPosition <= spannableStringT.toString().length() && endPosition >= startPosition)
spannableStringT.setSpan(new ClickableSpan() { spannableStringT.setSpan(new ClickableSpan() {
@Override @Override
public void onClick(@NonNull View textView) { public void onClick(@NonNull View textView) {
@ -603,14 +604,19 @@ public class Status implements Parcelable {
} }
if (targetedURL.size() > 0) { if (targetedURL.size() > 0) {
Iterator it = targetedURL.entrySet().iterator(); Iterator it = targetedURL.entrySet().iterator();
int endPosition = 0;
while (it.hasNext()) { while (it.hasNext()) {
Map.Entry pair = (Map.Entry) it.next(); Map.Entry pair = (Map.Entry) it.next();
String key = (String) pair.getKey(); String key = ((String) pair.getKey()).split("\\|")[0];
String url = (String) pair.getValue(); String url = (String) pair.getValue();
if (spannableStringT.toString().toLowerCase().contains(key.toLowerCase())) { if (spannableStringT.toString().toLowerCase().contains(key.toLowerCase())) {
//Accounts can be mentioned several times so we have to loop //Accounts can be mentioned several times so we have to loop
int startPosition = spannableStringT.toString().toLowerCase().indexOf(key.toLowerCase()); int startPosition = spannableStringT.toString().toLowerCase().indexOf(key.toLowerCase(), endPosition);
int endPosition = startPosition + key.length(); if (startPosition < 0) {
startPosition = 0;
}
endPosition = startPosition + key.length();
if (key.contains("") && !key.endsWith("")) { if (key.contains("") && !key.endsWith("")) {
key = key.split("")[0] + ""; key = key.split("")[0] + "";
SpannableStringBuilder ssb = new SpannableStringBuilder(); SpannableStringBuilder ssb = new SpannableStringBuilder();
@ -782,7 +788,7 @@ public class Status implements Parcelable {
int matchStart = matcher.start(1); int matchStart = matcher.start(1);
int matchEnd = matcher.end(); int matchEnd = matcher.end();
final String tag = spannableStringT.toString().substring(matchStart, matchEnd); final String tag = spannableStringT.toString().substring(matchStart, matchEnd);
if (matchEnd <= spannableStringT.toString().length() && matchEnd >= matchStart) if (matchStart >= 0 && matchEnd <= spannableStringT.toString().length() && matchEnd >= matchStart)
spannableStringT.setSpan(new ClickableSpan() { spannableStringT.setSpan(new ClickableSpan() {
@Override @Override
public void onClick(@NonNull View textView) { public void onClick(@NonNull View textView) {
@ -791,6 +797,7 @@ public class Status implements Parcelable {
Bundle b = new Bundle(); Bundle b = new Bundle();
b.putString("tag", tag.substring(1)); b.putString("tag", tag.substring(1));
intent.putExtras(b); intent.putExtras(b);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent); context.startActivity(intent);
} }
} }
@ -811,7 +818,7 @@ public class Status implements Parcelable {
int matchStart = matcher.start(1); int matchStart = matcher.start(1);
int matchEnd = matcher.end(); int matchEnd = matcher.end();
final String groupname = spannableStringT.toString().substring(matchStart, matchEnd); final String groupname = spannableStringT.toString().substring(matchStart, matchEnd);
if (matchEnd <= spannableStringT.toString().length() && matchEnd >= matchStart) if (matchStart >= 0 && matchEnd <= spannableStringT.toString().length() && matchEnd >= matchStart)
spannableStringT.setSpan(new ClickableSpan() { spannableStringT.setSpan(new ClickableSpan() {
@Override @Override
public void onClick(@NonNull View textView) { public void onClick(@NonNull View textView) {
@ -864,7 +871,7 @@ public class Status implements Parcelable {
int matchStart = matcherALink.start(); int matchStart = matcherALink.start();
int matchEnd = matcherALink.end(); int matchEnd = matcherALink.end();
final String url = contentSpanTranslated.toString().substring(matcherALink.start(1), matcherALink.end(1)); final String url = contentSpanTranslated.toString().substring(matcherALink.start(1), matcherALink.end(1));
if (matchEnd <= contentSpanTranslated.toString().length() && matchEnd >= matchStart) if (matchStart >= 0 && matchEnd <= contentSpanTranslated.toString().length() && matchEnd >= matchStart)
contentSpanTranslated.setSpan(new ClickableSpan() { contentSpanTranslated.setSpan(new ClickableSpan() {
@Override @Override
public void onClick(@NonNull View textView) { public void onClick(@NonNull View textView) {
@ -1307,7 +1314,7 @@ public class Status implements Parcelable {
} }
public String getContent() { public String getContent() {
return content; return content.replaceAll("\\p{C}", "?");
} }
public void setContent(Context context, String content) { public void setContent(Context context, String content) {

View File

@ -459,7 +459,7 @@ public class PixelfedListAdapter extends RecyclerView.Adapter implements OnPostA
InputMethodManager.SHOW_FORCED, 0); InputMethodManager.SHOW_FORCED, 0);
EditText content_cw = new EditText(context); EditText content_cw = new EditText(context);
content_cw.setText(status.getReblog() != null ? status.getReblog().getSpoiler_text() : status.getSpoiler_text()); content_cw.setText(status.getReblog() != null ? status.getReblog().getSpoiler_text() : status.getSpoiler_text());
String content = TootActivity.manageMentions(context, userId, status.getReblog() != null ? status.getReblog() : status); String content = TootActivity.manageMentions(userId, status.getReblog() != null ? status.getReblog() : status);
TextWatcher textWatcher = PixelfedComposeActivity.initializeTextWatcher(context, social, holder.quick_reply_text, holder.toot_space_left, null, null, PixelfedListAdapter.this, PixelfedListAdapter.this, PixelfedListAdapter.this); TextWatcher textWatcher = PixelfedComposeActivity.initializeTextWatcher(context, social, holder.quick_reply_text, holder.toot_space_left, null, null, PixelfedListAdapter.this, PixelfedListAdapter.this, PixelfedListAdapter.this);
holder.quick_reply_text.addTextChangedListener(textWatcher); holder.quick_reply_text.addTextChangedListener(textWatcher);
holder.quick_reply_text.setText(content); holder.quick_reply_text.setText(content);

View File

@ -480,6 +480,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
public void onPostStatusAction(APIResponse apiResponse) { public void onPostStatusAction(APIResponse apiResponse) {
if (apiResponse.getError() != null) { if (apiResponse.getError() != null) {
Toasty.error(context, apiResponse.getError().getError(), Toast.LENGTH_SHORT).show(); Toasty.error(context, apiResponse.getError().getError(), Toast.LENGTH_SHORT).show();
storeToot();
return; return;
} }
final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE); final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, MODE_PRIVATE);
@ -487,7 +488,6 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
String instance = Helper.getLiveInstance(context); String instance = Helper.getLiveInstance(context);
boolean split_toot = sharedpreferences.getBoolean(Helper.SET_AUTOMATICALLY_SPLIT_TOOTS + userId + instance, false); boolean split_toot = sharedpreferences.getBoolean(Helper.SET_AUTOMATICALLY_SPLIT_TOOTS + userId + instance, false);
if (split_toot && splitToot != null && stepSpliToot < splitToot.size()) { if (split_toot && splitToot != null && stepSpliToot < splitToot.size()) {
String tootContent = splitToot.get(stepSpliToot); String tootContent = splitToot.get(stepSpliToot);
stepSpliToot += 1; stepSpliToot += 1;

View File

@ -2406,6 +2406,10 @@ public class ContentSettingsFragment extends Fragment implements OnRetrieveRemot
editor.putString(Helper.SET_DEFAULT_LOCALE_NEW, "ca"); editor.putString(Helper.SET_DEFAULT_LOCALE_NEW, "ca");
editor.commit(); editor.commit();
break; break;
case 22:
editor.putString(Helper.SET_DEFAULT_LOCALE_NEW, "szl");
editor.commit();
break;
} }
PackageManager packageManager = context.getPackageManager(); PackageManager packageManager = context.getPackageManager();

View File

@ -1062,7 +1062,6 @@ public class DisplayStatusFragment extends Fragment implements OnPostActionInter
@Override @Override
public void onRetrieveFeedsAfterBookmark(APIResponse apiResponse) { public void onRetrieveFeedsAfterBookmark(APIResponse apiResponse) {
if (statusListAdapter == null && pixelfedListAdapter == null) if (statusListAdapter == null && pixelfedListAdapter == null)
return; return;
if (apiResponse == null || (apiResponse.getError() != null && apiResponse.getError().getStatusCode() != 404 && apiResponse.getError().getStatusCode() != 501)) { if (apiResponse == null || (apiResponse.getError() != null && apiResponse.getError().getStatusCode() != 404 && apiResponse.getError().getStatusCode() != 501)) {
@ -1078,36 +1077,42 @@ public class DisplayStatusFragment extends Fragment implements OnPostActionInter
return; return;
} }
List<Status> statuses = apiResponse.getStatuses(); List<Status> statuses = apiResponse.getStatuses();
if (statuses == null || statuses.size() == 0 || this.statuses == null) if (statuses == null || statuses.size() == 0 || this.statuses == null)
return; return;
//Find the position of toots between those already present //Find the position of toots between those already present
int position = 0; int position = 0;
if (position < this.statuses.size() && statuses.get(0).getCreated_at() != null && this.statuses.get(position).getCreated_at() != null) { if (position < this.statuses.size() && statuses.get(0).getCreated_at() != null && this.statuses.get(position).getCreated_at() != null) {
while (position < this.statuses.size() && statuses.get(0).getCreated_at().before(this.statuses.get(position).getCreated_at())) { while (position < this.statuses.size() && statuses.get(0).getCreated_at().before(this.statuses.get(position).getCreated_at())) {
position++; position++;
} }
} }
ArrayList<Status> tmpStatuses = new ArrayList<>(); ArrayList<Status> tmpStatuses = new ArrayList<>();
for (Status tmpStatus : statuses) {
//Put the toot at its place in the list (id desc)
if (!apiResponse.isFetchmore() && this.statuses.size() > 0 && !this.statuses.contains(tmpStatus) && tmpStatus.getCreated_at() != null && this.statuses.get(0).getCreated_at() != null && tmpStatus.getCreated_at().after(this.statuses.get(0).getCreated_at())) { //Element not already added if (this.statuses.size() > 0) {
//Mark status at new ones when their id is greater than the last read toot id for (Status tmpStatus : statuses) {
if ((type == RetrieveFeedsAsyncTask.Type.HOME || type == RetrieveFeedsAsyncTask.Type.PF_HOME) && lastReadTootDate != null && tmpStatus.getCreated_at().after(lastReadTootDate)) { //Put the toot at its place in the list (id desc)
tmpStatus.setNew(true); if (!apiResponse.isFetchmore() && this.statuses.size() > 0 && !this.statuses.contains(tmpStatus) && tmpStatus.getCreated_at() != null && this.statuses.get(0).getCreated_at() != null && tmpStatus.getCreated_at().after(this.statuses.get(0).getCreated_at())) { //Element not already added
MainActivity.countNewStatus++; //Mark status at new ones when their id is greater than the last read toot id
if ((type == RetrieveFeedsAsyncTask.Type.HOME || type == RetrieveFeedsAsyncTask.Type.PF_HOME) && lastReadTootDate != null && tmpStatus.getCreated_at().after(lastReadTootDate)) {
tmpStatus.setNew(true);
MainActivity.countNewStatus++;
}
tmpStatuses.add(tmpStatus);
} else if (apiResponse.isFetchmore() && !this.statuses.contains(tmpStatus)) { //Element not already added
//Mark status at new ones when their id is greater than the last read toot id
if ((type == RetrieveFeedsAsyncTask.Type.HOME || type == RetrieveFeedsAsyncTask.Type.PF_HOME) && lastReadTootDate != null && tmpStatus.getCreated_at().after(lastReadTootDate)) {
tmpStatus.setNew(true);
MainActivity.countNewStatus++;
}
tmpStatuses.add(tmpStatus);
} }
tmpStatuses.add(tmpStatus);
} else if (apiResponse.isFetchmore() && !this.statuses.contains(tmpStatus)) { //Element not already added
//Mark status at new ones when their id is greater than the last read toot id
if ((type == RetrieveFeedsAsyncTask.Type.HOME || type == RetrieveFeedsAsyncTask.Type.PF_HOME) && lastReadTootDate != null && tmpStatus.getCreated_at().after(lastReadTootDate)) {
tmpStatus.setNew(true);
MainActivity.countNewStatus++;
}
tmpStatuses.add(tmpStatus);
} }
} else {
this.statuses.addAll(statuses);
tmpStatuses.addAll(statuses);
} }
try { try {
((MainActivity) context).updateHomeCounter(); ((MainActivity) context).updateHomeCounter();
} catch (Exception ignored) { } catch (Exception ignored) {

View File

@ -3135,6 +3135,7 @@ public class Helper {
finalUrl = "http://" + url; finalUrl = "http://" + url;
b.putString("url", finalUrl); b.putString("url", finalUrl);
intent.putExtras(b); intent.putExtras(b);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent); context.startActivity(intent);
} else { } else {
boolean custom_tabs = sharedpreferences.getBoolean(Helper.SET_CUSTOM_TABS, true); boolean custom_tabs = sharedpreferences.getBoolean(Helper.SET_CUSTOM_TABS, true);
@ -3149,6 +3150,7 @@ public class Helper {
} }
} else { } else {
Intent intent = new Intent(Intent.ACTION_VIEW); Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse(url)); intent.setData(Uri.parse(url));
try { try {
context.startActivity(intent); context.startActivity(intent);
@ -3733,13 +3735,15 @@ public class Helper {
return 20; return 20;
case "ca": case "ca":
return 21; return 21;
case "szl":
return 22;
default: default:
return 0; return 0;
} }
} }
public static String[] getLocales(Context context) { public static String[] getLocales(Context context) {
String[] locale = new String[22]; String[] locale = new String[23];
locale[0] = context.getString(R.string.default_language); locale[0] = context.getString(R.string.default_language);
locale[1] = context.getString(R.string.english); locale[1] = context.getString(R.string.english);
locale[2] = context.getString(R.string.french); locale[2] = context.getString(R.string.french);
@ -3762,6 +3766,7 @@ public class Helper {
locale[19] = context.getString(R.string.norwegian); locale[19] = context.getString(R.string.norwegian);
locale[20] = context.getString(R.string.kabyle); locale[20] = context.getString(R.string.kabyle);
locale[21] = context.getString(R.string.catalan); locale[21] = context.getString(R.string.catalan);
locale[22] = context.getString(R.string.silesian);
return locale; return locale;
} }

View File

@ -126,9 +126,9 @@ public class LiveNotificationDelayedService extends Service {
.setContentTitle(getString(R.string.top_notification)) .setContentTitle(getString(R.string.top_notification))
.setSmallIcon(getNotificationIcon(LiveNotificationDelayedService.this)) .setSmallIcon(getNotificationIcon(LiveNotificationDelayedService.this))
.setContentText(getString(R.string.top_notification_message, String.valueOf(totalAccount), String.valueOf(eventsCount))).build(); .setContentText(getString(R.string.top_notification_message, String.valueOf(totalAccount), String.valueOf(eventsCount))).build();
if( notification != null) { if (notification != null) {
startForeground(1, notification); startForeground(1, notification);
}else{ } else {
return; return;
} }
} }
@ -319,9 +319,9 @@ public class LiveNotificationDelayedService extends Service {
.setSmallIcon(getNotificationIcon(LiveNotificationDelayedService.this)) .setSmallIcon(getNotificationIcon(LiveNotificationDelayedService.this))
.setContentText(getString(R.string.top_notification_message, String.valueOf(totalAccount), String.valueOf(eventsCount))).build(); .setContentText(getString(R.string.top_notification_message, String.valueOf(totalAccount), String.valueOf(eventsCount))).build();
if( notificationChannel != null) { if (notificationChannel != null) {
startForeground(1, notificationChannel); startForeground(1, notificationChannel);
}else{ } else {
return; return;
} }
} }

View File

@ -140,9 +140,9 @@ public class LiveNotificationService extends Service implements NetworkStateRece
.setSmallIcon(getNotificationIcon(LiveNotificationService.this)) .setSmallIcon(getNotificationIcon(LiveNotificationService.this))
.setContentText(getString(R.string.top_notification_message, String.valueOf(totalAccount), String.valueOf(eventsCount))).build(); .setContentText(getString(R.string.top_notification_message, String.valueOf(totalAccount), String.valueOf(eventsCount))).build();
if( notification != null) { if (notification != null) {
startForeground(1, notification); startForeground(1, notification);
}else{ } else {
return; return;
} }
} }
@ -321,9 +321,9 @@ public class LiveNotificationService extends Service implements NetworkStateRece
.setContentTitle(getString(R.string.top_notification)) .setContentTitle(getString(R.string.top_notification))
.setSmallIcon(getNotificationIcon(LiveNotificationService.this)) .setSmallIcon(getNotificationIcon(LiveNotificationService.this))
.setContentText(getString(R.string.top_notification_message, String.valueOf(totalAccount), String.valueOf(eventsCount))).build(); .setContentText(getString(R.string.top_notification_message, String.valueOf(totalAccount), String.valueOf(eventsCount))).build();
if( notificationChannel != null) { if (notificationChannel != null) {
startForeground(1, notificationChannel); startForeground(1, notificationChannel);
}else{ } else {
return; return;
} }
} }

View File

@ -78,7 +78,10 @@ public class StatusCacheDAO {
values.put(Sqlite.COL_ACCOUNT, Helper.accountToStringStorage(status.getAccount())); values.put(Sqlite.COL_ACCOUNT, Helper.accountToStringStorage(status.getAccount()));
values.put(Sqlite.COL_IN_REPLY_TO_ID, status.getIn_reply_to_id()); values.put(Sqlite.COL_IN_REPLY_TO_ID, status.getIn_reply_to_id());
values.put(Sqlite.COL_IN_REPLY_TO_ACCOUNT_ID, status.getIn_reply_to_account_id()); values.put(Sqlite.COL_IN_REPLY_TO_ACCOUNT_ID, status.getIn_reply_to_account_id());
values.put(Sqlite.COL_REBLOG, status.getReblog() != null ? Helper.statusToStringStorage(status.getReblog()) : null); try {
values.put(Sqlite.COL_REBLOG, status.getReblog() != null ? Helper.statusToStringStorage(status.getReblog()) : "");
} catch (Exception ignored) {
}
values.put(Sqlite.COL_CONTENT, status.getContent()); values.put(Sqlite.COL_CONTENT, status.getContent());
values.put(Sqlite.COL_EMOJIS, status.getEmojis() != null ? Helper.emojisToStringStorage(status.getEmojis()) : null); values.put(Sqlite.COL_EMOJIS, status.getEmojis() != null ? Helper.emojisToStringStorage(status.getEmojis()) : null);
values.put(Sqlite.COL_POLL, status.getPoll() != null ? Helper.pollToStringStorage(status.getPoll()) : null); values.put(Sqlite.COL_POLL, status.getPoll() != null ? Helper.pollToStringStorage(status.getPoll()) : null);

View File

@ -1032,9 +1032,9 @@
<string name="set_nitter">استبدل تويتر بـ Nitter</string> <string name="set_nitter">استبدل تويتر بـ Nitter</string>
<string name="set_nitter_indication">إن Nitter واجهة أمامية بديلة لـ Twitter تركز على الخصوصية.</string> <string name="set_nitter_indication">إن Nitter واجهة أمامية بديلة لـ Twitter تركز على الخصوصية.</string>
<string name="set_nitter_host">أدخل مضيفك المخصص أو اتركه فارغًا لاستخدام nitter.net</string> <string name="set_nitter_host">أدخل مضيفك المخصص أو اتركه فارغًا لاستخدام nitter.net</string>
<string name="set_bibliogram">Replace Instagram with Bibliogram</string> <string name="set_bibliogram">استبدال Instagram بـ Bibliogram</string>
<string name="set_bibliogram_indication">Bibliogram is an open source alternative Instagram front-end focused on privacy.</string> <string name="set_bibliogram_indication">Bibliogram هو بديل مفتوح المصدر لـ Instagram يركز على الخصوصية.</string>
<string name="set_bibliogram_host">Enter your custom host or leave blank for using bibliogram.art</string> <string name="set_bibliogram_host">أدخل مضيفك المخصص أو اتركه فارغًا لاستخدام bibliogram.art</string>
<string name="set_hide_status_bar">أخفِ شريط إشعارات Fedilab</string> <string name="set_hide_status_bar">أخفِ شريط إشعارات Fedilab</string>
<string name="set_hide_status_bar_indication">لإخفاء الإشعارات المتبقية على شريط الحالة ، اضغط على زر أيقونة العين ثم قم بإلغاء تحديد: \"العرض على شريط الحالة\"</string> <string name="set_hide_status_bar_indication">لإخفاء الإشعارات المتبقية على شريط الحالة ، اضغط على زر أيقونة العين ثم قم بإلغاء تحديد: \"العرض على شريط الحالة\"</string>
<string name="set_live_type_indication">سيتم تأجيل الإشعارات كل 30 ثانية. الشيء الذي من شأنه أن يسمح باستنزاف أقل للبطارية.</string> <string name="set_live_type_indication">سيتم تأجيل الإشعارات كل 30 ثانية. الشيء الذي من شأنه أن يسمح باستنزاف أقل للبطارية.</string>
@ -1063,9 +1063,9 @@
<string name="join_peertube">انظم إلى PeerTube</string> <string name="join_peertube">انظم إلى PeerTube</string>
<string name="agreement_check_peertube">أبلُغ مِن العُمر 16 سنة على الأقل وأوافق على %1$s هذا الخادم</string> <string name="agreement_check_peertube">أبلُغ مِن العُمر 16 سنة على الأقل وأوافق على %1$s هذا الخادم</string>
<string name="link_color_title">الروابط</string> <string name="link_color_title">الروابط</string>
<string name="link_color">تغيير لون الروابط (عناوين URLs، الإشارات ، العلامات، إلخ.) في الرسائل</string> <string name="link_color">تغيير لون الروابط (عناوين URLs، الإشارات ، الوسوم، إلخ.) في الرسائل</string>
<string name="boost_header_color_title">رأسية إعادات النشر</string> <string name="boost_header_color_title">رأسية إعادات النشر</string>
<string name="displayname_title">تغيير لون اسم العرض في الجزء العلوي من الرسائل</string> <string name="displayname_title">تغيير لون الإسم المعروض في الجزء العلوي من الرسائل</string>
<string name="username_title">تغيير لون اسم المستخدم في الجزء العلوي من الرسائل</string> <string name="username_title">تغيير لون اسم المستخدم في الجزء العلوي من الرسائل</string>
<string name="boost_header_color">يغيّر لون الرأسية الخاصة بإعادة النشر</string> <string name="boost_header_color">يغيّر لون الرأسية الخاصة بإعادة النشر</string>
<string name="background_status_title">المنشورات</string> <string name="background_status_title">المنشورات</string>
@ -1125,7 +1125,7 @@
<string name="share_link">شارك الرابط</string> <string name="share_link">شارك الرابط</string>
<string name="link_copy">تم نسخ رابط العنوان إلى الحافظة</string> <string name="link_copy">تم نسخ رابط العنوان إلى الحافظة</string>
<string name="open_other_app">افتح في تطبيق آخر</string> <string name="open_other_app">افتح في تطبيق آخر</string>
<string name="check_redirect">تحقّق مِن التوجيه</string> <string name="check_redirect">تحقّق مِن إعادة التوجيه</string>
<string name="no_redirect">هذا العنوان لا يحوّل إلى عنوان آخر</string> <string name="no_redirect">هذا العنوان لا يحوّل إلى عنوان آخر</string>
<string name="redirect_detected">%1$s \n\nيُحوّل إلى\n\n %2$s</string> <string name="redirect_detected">%1$s \n\nيُحوّل إلى\n\n %2$s</string>
<string name="set_user_agent">غيّر عميل المستخدم user agent</string> <string name="set_user_agent">غيّر عميل المستخدم user agent</string>
@ -1149,9 +1149,9 @@
<string name="action_disabled">الإجراء مُعطّل</string> <string name="action_disabled">الإجراء مُعطّل</string>
<string name="action_unfollow">إلغاء المتابعة</string> <string name="action_unfollow">إلغاء المتابعة</string>
<string name="error_destination_path">حدث خطأ ما، الرجاء التحقق من مسار التحميلات في الإعدادات.</string> <string name="error_destination_path">حدث خطأ ما، الرجاء التحقق من مسار التحميلات في الإعدادات.</string>
<string name="action_announcements">تصريحات</string> <string name="action_announcements">الإعلانات</string>
<string name="no_announcements">لا توجد تصريحات!</string> <string name="no_announcements">ليس هناك إعلانات!</string>
<string name="add_reaction">إضافة رد فعل</string> <string name="add_reaction">إضافة ردة فعل</string>
<string name="set_custom_tabs_indication">استخدم المتصفح المفضل الخاص بك داخل التطبيق. قم بإلغاء تحديد هذه الميزة لفتح الروابط خارجيا.</string> <string name="set_custom_tabs_indication">استخدم المتصفح المفضل الخاص بك داخل التطبيق. قم بإلغاء تحديد هذه الميزة لفتح الروابط خارجيا.</string>
<string name="set_video_cache">Video cache in MB, zero means no cache.</string> <string name="set_video_cache">ذاكرة التخزين المؤقت للفيديو بالـ MB، صفر تعني مِن دون ذاكرة تخزين المؤقت.</string>
</resources> </resources>

View File

@ -1,191 +1,191 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<string name="navigation_drawer_open">মেনু খুলুন</string> <string name="navigation_drawer_open">মেনু খুল</string>
<string name="navigation_drawer_close">মেনু বন্ধ করুন</string> <string name="navigation_drawer_close">মেনু বন্ধ কর</string>
<string name="action_about">সম্পর্কে</string> <string name="action_about">অ্যাপ সম্পর্কে</string>
<string name="action_about_instance">ইনস্ট্যান্স এর সম্পর্কে</string> <string name="action_about_instance">সংগঠনটা সম্পর্কে</string>
<string name="action_privacy">গোপনীয়তা</string> <string name="action_privacy">গোপনীয়তা</string>
<string name="action_cache">ক্যাশ</string> <string name="action_cache">ক্যাশ</string>
<string name="action_logout">লগ আউট</string> <string name="action_logout">লগআউট</string>
<string name="login">লগইন</string> <string name="login">লগ ইন</string>
<!-- common --> <!-- common -->
<string name="close">বন্ধ</string> <string name="close">বন্ধ করুন</string>
<string name="yes">হ্যাঁ</string> <string name="yes">হ্যাঁ</string>
<string name="no">না</string> <string name="no">না</string>
<string name="cancel">বাতিল</string> <string name="cancel">বাদ দাও</string>
<string name="download">ডাউনলোড</string> <string name="download">ডাউনলোড</string>
<string name="download_file">ডাউনলোড করা হচ্ছে %1$s</string> <string name="download_file">%1$s ডাউনলোড করো</string>
<string name="save_over">মিডিয়া সংরক্ষিত</string> <string name="save_over">মিডিয়া সংরক্ষিত</string>
<string name="download_from" formatted="false">ফাইল: %1$s</string> <string name="download_from" formatted="false">ফাইল: %1$s</string>
<string name="password">পাসওয়ার্ড</string> <string name="password">পাসওয়ার্ড</string>
<string name="email">-মেইল</string> <string name="email">ইমেইল</string>
<string name="accounts">অ্যাকাউন্টগুলি</string> <string name="accounts">অ্যাকাউন্ট</string>
<string name="toots">টুটগুলি</string> <string name="toots">টুট</string>
<string name="tags">ট্যাগগুলি</string> <string name="tags">ট্যাগ</string>
<string name="save">সংরক্ষণ</string> <string name="save">সংরক্ষণ</string>
<string name="restore">পুনঃস্থাপন</string> <string name="restore">সংরক্ষণ ফিরত আনো</string>
<string name="no_result">কোনও ফলাফল পাওয়া যায় নি!</string> <string name="no_result">ফলাফল নেই!</string>
<string name="instance">ইনস্ট্যান্স</string> <string name="instance">সংগঠন</string>
<string name="instance_example">ইনস্ট্যান্স: mastodon.social</string> <string name="instance_example">সংগঠন: mastodon.social</string>
<string name="toast_account_changed" formatted="false">%1$s এখন কাজ করছ</string> <string name="toast_account_changed" formatted="false">এখন %1$s অ্যাকাউন্টের সাথে কাজ কর</string>
<string name="add_account">একটি অ্যাকাউন্ট যোগ করুন</string> <string name="add_account">অ্যাকাউন্ট যোগ করুন</string>
<string name="clipboard">টুটের সামগ্রীটি ক্লিপবোর্ডে অনুলিপি করা হয়েছে</string> <string name="clipboard">টুটের বিষয়বস্তু ক্লিপবোর্ড কপি করা হয়েছে</string>
<string name="clipboard_url">টুটের URL টি ক্লিপবোর্ডে অনুলিপি করা হয়েছে</string> <string name="clipboard_url">টুটের ইউআরএল ক্লিপবোর্ড কপি করা হয়েছে</string>
<string name="change">পরিবর্তন</string> <string name="change">পরিবর্তন করুন</string>
<string name="choose_picture">একটি ছবি নির্বাচন করুন</string> <string name="choose_picture">ছবি নির্বাচন করো</string>
<string name="clear">পরিষ্কার</string> <string name="clear">পরিষ্কার করো</string>
<string name="camera">ক্ামেরা</string> <string name="camera">ক্ামেরা</string>
<string name="delete_all">সব মুছে দিন</string> <string name="delete_all">সব মুছে ফেলো</string>
<string name="translate_toot">টুট টি অনুবাদ করুন</string> <string name="translate_toot">টুট অনুবাদ করো</string>
<string name="schedule">সময়সূচি</string> <string name="schedule">নির্ধারিত সময়ে টুট করো</string>
<string name="text_size">পাঠ্য এবং আইকনের আকার</string> <string name="text_size">লেখা এবং আইকনের মাপ</string>
<string name="text_size_change">বর্তমান পাঠ্য আকার পরিবর্তন করুন:</string> <string name="text_size_change">লেখার বর্তমান আকার পরিবর্তন করুন:</string>
<string name="icon_size_change">বর্তমান আইকন আকার পরিবর্তন করুন:</string> <string name="icon_size_change">লেখার বর্তমান আইকন পরিবর্তন করুন:</string>
<string name="next">পরবর্তী</string> <string name="next">পরবর্তী</string>
<string name="previous">পূর্ববর্তী</string> <string name="previous">পূর্ববর্তী</string>
<string name="open_with">দিয়ে খুলুন</string> <string name="open_with">খুলুন</string>
<string name="validate">যাচাই</string> <string name="validate">যাচাই</string>
<string name="media">মিডিয়া</string> <string name="media">Media</string>
<string name="share_with">সাথে শেয়ার</string> <string name="share_with">Share with</string>
<string name="shared_via">ফেডিলাবের মাধ্যমে ভাগ করা হয়েছে</string> <string name="shared_via">Shared via Fedilab</string>
<string name="replies">উত্তরগুলি</string> <string name="replies">Replies</string>
<string name="username">ব্যবহারকারীর নাম</string> <string name="username">User name</string>
<string name="drafts">ড্রাফটগুলি</string> <string name="drafts">Drafts</string>
<string name="favourite">প্রিয়াগুলি</string> <string name="favourite">Favourites</string>
<string name="follow">নতুন অনুসরণকারী</string> <string name="follow">New followers</string>
<string name="mention">উল্লেখগুলি</string> <string name="mention">Mentions</string>
<string name="reblog">সমর্থনগুলি</string> <string name="reblog">Boosts</string>
<string name="show_boosts">সমর্থনগুলি দেখান</string> <string name="show_boosts">Show boosts</string>
<string name="show_replies">উত্তরগুলি দেখান</string> <string name="show_replies">Show replies</string>
<string name="action_open_in_web">ব্রাউজারে খুলুন</string> <string name="action_open_in_web">Open in browser</string>
<string name="translate">অনুবাদ</string> <string name="translate">Translate</string>
<string name="please_wait">অনুগ্রহ করে, এই ক্রিয়াটি করার আগে কয়েক সেকেন্ড অপেক্ষা করুন।</string> <string name="please_wait">Please, wait few seconds before making this action.</string>
<!--- Menu --> <!--- Menu -->
<string name="home_menu">গৃহ</string> <string name="home_menu">Home</string>
<string name="local_menu">স্থানীয় সময়রেখা</string> <string name="local_menu">Local timeline</string>
<string name="global_menu">সংযুক্ত সময়রেখা</string> <string name="global_menu">Federated timeline</string>
<string name="neutral_menu_title">বিকল্পগুলি</string> <string name="neutral_menu_title">Options</string>
<string name="favorites_menu">প্রিয়াগুলি</string> <string name="favorites_menu">Favourites</string>
<string name="communication_menu_title">যোগাযোগ</string> <string name="communication_menu_title">Communication</string>
<string name="muted_menu">নিঃশব্দ ব্যবহারকারী</string> <string name="muted_menu">Muted users</string>
<string name="blocked_menu">অবরুদ্ধ ব্যবহারকারী</string> <string name="blocked_menu">Blocked users</string>
<string name="notifications">বিজ্ঞপ্তিগুলি</string> <string name="notifications">Notifications</string>
<string name="follow_request">অনুসরণ অনুরোধগুলি</string> <string name="follow_request">Follow requests</string>
<string name="settings">বিন্যাস</string> <string name="settings">Settings</string>
<string name="delete_account_title">একটি অ্যাকাউন্ট মুছেন</string> <string name="delete_account_title">Delete an account</string>
<string name="delete_account_message" formatted="false">আপনি কি এই %1$s একাউন্ট টি এপ্লিকেশন থেকে মুছে ফেলতে চান?</string> <string name="delete_account_message" formatted="false">Delete the account %1$s from the application?</string>
<string name="send_email">একটি ইমেইল পাঠান</string> <string name="send_email">Send an email</string>
<string name="click_to_change">এটি পরিবর্তন করার জন্য পথে ক্লিক করুন</string> <string name="click_to_change">Tap on the path to change it</string>
<string name="failed">ব্যর্থ!</string> <string name="failed">Failed!</string>
<string name="scheduled_toots">নির্ধারিত টুটগুলি</string> <string name="scheduled_toots">Scheduled toots</string>
<string name="disclaimer_full">নীচের তথ্যগুলি ব্যবহারকারীর প্রোফাইলকে অসম্পূর্ণভাবে প্রতিবিম্বিত করতে পারে।</string> <string name="disclaimer_full">Information below may reflect the user\'s profile incompletely.</string>
<string name="insert_emoji">ইমোজি ঢোকান</string> <string name="insert_emoji">Insert emoji</string>
<string name="no_emoji">অ্যাপটি মুহুর্তের জন্য কাস্টম ইমোজিগুলি সংগ্রহ করে নি।</string> <string name="no_emoji">The app did not collect custom emojis for the moment.</string>
<string name="live_notif">লাইভ বিজ্ঞপ্তিগুলি</string> <string name="live_notif">Live notifications</string>
<string name="logout_confirmation">Are you sure you want to logout?</string> <string name="logout_confirmation">Are you sure you want to logout?</string>
<string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string> <string name="logout_account_confirmation">Are you sure you want to logout @%1$s@%2$s?</string>
<!-- Status --> <!-- Status -->
<string name="no_status">প্রদর্শনের জন্য কোন টুট নেই</string> <string name="no_status">No toot to display</string>
<string name="no_stories">No stories to display</string> <string name="no_stories">No stories to display</string>
<string name="stories">Stories</string> <string name="stories">Stories</string>
<string name="reblog_by">%1$s দ্বারা সমর্থন</string> <string name="reblog_by">Boosted by %1$s</string>
<string name="favourite_add">এই টুটটি আপনার পছন্দসইয়ের সাথে যুক্ত করবেন?</string> <string name="favourite_add">Add this toot to your favourites?</string>
<string name="favourite_remove">আপনার পছন্দসই থেকে এই টুট সরাবেন?</string> <string name="favourite_remove">Remove this toot from your favourites?</string>
<string name="reblog_add">এই টুট টি সমর্থন করবেন?</string> <string name="reblog_add">Boost this toot?</string>
<string name="reblog_remove">এই টুট টি অসমর্থন করবেন?</string> <string name="reblog_remove">Unboost this toot?</string>
<string name="pin_add">এই টুট টি পিন করবেন?</string> <string name="pin_add">Pin this toot?</string>
<string name="pin_remove">এই টুট টি আনপিন করবেন?</string> <string name="pin_remove">Unpin this toot?</string>
<string name="more_action_1">নীরব</string> <string name="more_action_1">Mute</string>
<string name="more_action_2">ব্লক</string> <string name="more_action_2">Block</string>
<string name="more_action_3">প্রতিবেদন</string> <string name="more_action_3">Report</string>
<string name="more_action_4">সরান</string> <string name="more_action_4">Remove</string>
<string name="more_action_5">অনুলিপি</string> <string name="more_action_5">Copy</string>
<string name="more_action_6">বিভাজিত</string> <string name="more_action_6">Share</string>
<string name="more_action_7">উল্লেখ</string> <string name="more_action_7">Mention</string>
<string name="more_action_8">সময়যুক্ত নিঃশব্দ</string> <string name="more_action_8">Timed mute</string>
<string name="more_action_9">মুছে &amp; পুনরায় খসড়া</string> <string name="more_action_9">Delete &amp; re-draft</string>
<string-array name="more_action_confirm"> <string-array name="more_action_confirm">
<item>এই অ্যাকাউন্ট নিঃশব্দ করবেন?</item> <item>Mute this account?</item>
<item>এই অ্যাকাউন্ট ব্লক করবেন?</item> <item>Block this account?</item>
<item>এই টুট টি প্রতিবেদন করবেন?</item> <item>Report this toot?</item>
<item>এই ডোমেইন ব্লক করবেন?</item> <item>Block this domain?</item>
<item>এই একাউন্ট টি কে নিঃশব্দ তালিকা থেকে সরাবেন?</item> <item>Unmute this account?</item>
<item>Unblock this account?</item> <item>Unblock this account?</item>
</string-array> </string-array>
<string-array name="action_notification"> <string-array name="action_notification">
<item>বিজ্ঞপ্তি</item> <item>Notify</item>
<item>নিঃশব্দ</item> <item>Silent</item>
</string-array> </string-array>
<string-array name="more_action_owner_confirm"> <string-array name="more_action_owner_confirm">
<item>এই টুট টি মুছে ফেলবেন?</item> <item>Remove this toot?</item>
<item>এই টুট টি মুছে &amp; পুনঃসংশ্লিষ্ট করবেন?</item> <item>Delete &amp; re-draft this toot?</item>
</string-array> </string-array>
<string name="bookmarks">বুকমার্কগুলি</string> <string name="bookmarks">Bookmarks</string>
<string name="bookmark_add">বুকমার্ক তালিকা এ যোগ করুন</string> <string name="bookmark_add">Add to bookmarks</string>
<string name="bookmark_remove">বুকমার্ক মুছে ফেলুন</string> <string name="bookmark_remove">Remove bookmark</string>
<string name="bookmarks_empty">প্রদর্শনের জন্য কোনও বুকমার্ক নেই</string> <string name="bookmarks_empty">No bookmarks to display</string>
<string name="status_bookmarked">বুকমার্কগুলিতে স্ট্যাটাস যুক্ত হয়েছে!</string> <string name="status_bookmarked">Status has been added to bookmarks!</string>
<string name="status_unbookmarked">বুকমার্কগুলি থেকে স্থিতি সরানো হয়েছিল!</string> <string name="status_unbookmarked">Status was removed from bookmarks!</string>
<!-- Date --> <!-- Date -->
<string name="date_seconds">%d সেকেন্ড</string> <string name="date_seconds">%d s</string>
<string name="date_minutes">%d মিনিট</string> <string name="date_minutes">%d m</string>
<string name="date_hours">%d ঘন্টা</string> <string name="date_hours">%d h</string>
<string name="date_day">%d দিন</string> <string name="date_day">%d d</string>
<plurals name="date_seconds_polls"> <plurals name="date_seconds_polls">
<item quantity="one">%d second</item> <item quantity="one">%d second</item>
<item quantity="other">%d সেকেন্ড</item> <item quantity="other">%d seconds</item>
</plurals> </plurals>
<plurals name="date_minutes_polls"> <plurals name="date_minutes_polls">
<item quantity="one">%d minute</item> <item quantity="one">%d minute</item>
<item quantity="other">%d মিনিট</item> <item quantity="other">%d minutes</item>
</plurals> </plurals>
<plurals name="date_hours_polls"> <plurals name="date_hours_polls">
<item quantity="one">%d hour</item> <item quantity="one">%d hour</item>
<item quantity="other">%d ঘণ্টা</item> <item quantity="other">%d hours</item>
</plurals> </plurals>
<plurals name="date_day_polls"> <plurals name="date_day_polls">
<item quantity="one">%d day</item> <item quantity="one">%d day</item>
<item quantity="other">%d দিন</item> <item quantity="other">%d days</item>
</plurals> </plurals>
<!-- TOOT --> <!-- TOOT -->
<string name="toot_cw_placeholder">সতর্কতা</string> <string name="toot_cw_placeholder">Warning</string>
<string name="toot_placeholder">আপনার মনে কি আছে?</string> <string name="toot_placeholder">What is on your mind?</string>
<string name="toot_it">টুট!</string> <string name="toot_it">TOOT!</string>
<string name="queet_it">ক্যুইট!</string> <string name="queet_it">QUEET!</string>
<string name="cw">সঃবঃ</string> <string name="cw">cw</string>
<string name="toot_title">একটি টুট লিখুন</string> <string name="toot_title">Write a toot</string>
<string name="toot_title_reply">একটি টুট এ উত্তর দিন</string> <string name="toot_title_reply">Reply to a toot</string>
<string name="queet_title">একটি ক্যুইট লিখুন</string> <string name="queet_title">Write a queet</string>
<string name="queet_title_reply">একটি ক্যুইট এ উত্তর দিন</string> <string name="queet_title_reply">Reply to a queet</string>
<string name="toot_select_image">একটি মিডিয়া নির্বাচন করুন</string> <string name="toot_select_image">Select a media</string>
<string name="toot_select_image_error">মিডিয়া নির্বাচন করার সময় একটি ত্রুটি ঘটেছে!</string> <string name="toot_select_image_error">An error occurred while selecting the media!</string>
<string name="toot_delete_media">এই মিডিয়া মুছবেন?</string> <string name="toot_delete_media">Delete this media?</string>
<string name="toot_error_no_content">আপনার টুট ফাঁকা!</string> <string name="toot_error_no_content">Your toot is empty!</string>
<string name="toot_visibility_tilte">টুটের দৃশ্যমানতা</string> <string name="toot_visibility_tilte">Visibility of the toot</string>
<string name="toots_visibility_tilte">ডিফল্টরূপে টুটগুলির দৃশ্যমানতা: </string> <string name="toots_visibility_tilte">Visibility of the toots by default: </string>
<string name="toot_sent">টুট পাঠানো হয়েছে!</string> <string name="toot_sent">The toot has been sent!</string>
<string name="toot_reply_content_title">আপনি এই টুটের উত্তর দিচ্ছেন:</string> <string name="toot_reply_content_title">You are replying to this toot:</string>
<string name="toot_sensitive">সংবেদনশীল কন্টেন্ট?</string> <string name="toot_sensitive">Sensitive content?</string>
<string-array name="toot_visibility"> <string-array name="toot_visibility">
<item>জনসাধারণের টাইমলাইনে পোস্ট করুন</item> <item>Post to public timelines</item>
<item>জনসাধারণের টাইমলাইনে পোস্ট করবেন না</item> <item>Do not post to public timelines</item>
<item>শুধুমাত্র অনুসরণকারীদের পোস্ট করুন</item> <item>Post to followers only</item>
<item>শুধুমাত্র উল্লিখিত ব্যবহারকারীদের জন্য পোস্ট করুন</item> <item>Post to mentioned users only</item>
</string-array> </string-array>
<string name="no_draft">কোন খসড়া নেই!</string> <string name="no_draft">No drafts!</string>
<string name="choose_toot">একটি টুট চয়ন করুন</string> <string name="choose_toot">Choose a toot</string>
<string name="choose_accounts">একটি অ্যাকাউন্ট চয়ন করুন</string> <string name="choose_accounts">Choose an account</string>
<string name="select_accounts">কিছু অ্যাকাউন্টগুলি নির্বাচন করুন</string> <string name="select_accounts">Select some accounts</string>
<string name="remove_draft">খসড়া সরান?</string> <string name="remove_draft">Remove draft?</string>
<string name="show_reply">আসল টুটটি প্রদর্শন করতে বোতামে আলতো চাপুন</string> <string name="show_reply">Tap on the button to display the original toot</string>
<string name="upload_form_description">দৃষ্টি প্রতিবন্ধীদের জন্য বর্ণনা করুন</string> <string name="upload_form_description">Describe for the visually impaired</string>
<!-- Instance --> <!-- Instance -->
<string name="instance_no_description">কোন বর্ণনা নাই!</string> <string name="instance_no_description">No description available!</string>
<!-- About --> <!-- About -->
<string name="about_vesrion">রিলিজ %1$s</string> <string name="about_vesrion">Release %1$s</string>
<string name="about_developer">বিকাশকারী:</string> <string name="about_developer">Developer:</string>
<string name="about_license">লাইসেন্স: </string> <string name="about_license">License: </string>
<string name="about_license_action">জিএনইউ জিপিএল ভার্সন ৩</string> <string name="about_license_action">GNU GPL V3</string>
<string name="about_code">Source code: </string> <string name="about_code">Source code: </string>
<string name="about_yandex">Translation of toots:</string> <string name="about_yandex">Translation of toots:</string>
<string name="about_thekinrar">Search instances:</string> <string name="about_thekinrar">Search instances:</string>
@ -250,21 +250,21 @@
<string name="toast_unreblog">The toot is no longer boosted!</string> <string name="toast_unreblog">The toot is no longer boosted!</string>
<string name="toast_favourite">The toot was added to your favourites!</string> <string name="toast_favourite">The toot was added to your favourites!</string>
<string name="toast_unfavourite">The toot was removed from your favourites!</string> <string name="toast_unfavourite">The toot was removed from your favourites!</string>
<string name="toast_report">টুটটির প্রতিবেদন করা হয়েছে!</string> <string name="toast_report">The toot was reported!</string>
<string name="toast_unstatus">টুটটি মুছে ফেলা হয়েছে!</string> <string name="toast_unstatus">The toot was deleted!</string>
<string name="toast_pin">টুটটি পিন করা হয়েছে!</string> <string name="toast_pin">The toot was pinned!</string>
<string name="toast_unpin">টুটটি আনপিন করা হয়েছে!</string> <string name="toast_unpin">The toot was unpinned!</string>
<string name="toast_error">উফফফফ! একটি ত্রুটি ঘটেছে!</string> <string name="toast_error">Oops ! An error occurred!</string>
<string name="toast_code_error">একটি ত্রুটি ঘটেছে! ইনস্ট্যান্স একটি অনুমোদন কোড ফেরায় নি!</string> <string name="toast_code_error">An error occurred! The instance did not return an authorisation code!</string>
<string name="toast_error_instance">ইনস্ট্যান্স এর ডোমেনটি বৈধ বলে মনে হচ্ছে না!</string> <string name="toast_error_instance">The instance domain does not seem to be valid!</string>
<string name="toast_error_loading_account">অ্যাকাউন্টগুলির মধ্যে স্যুইচ করার সময় একটি ত্রুটি ঘটেছে!</string> <string name="toast_error_loading_account">An error occurred while switching between accounts!</string>
<string name="toast_error_search">অনুসন্ধানের সময় একটি ত্রুটি ঘটেছে!</string> <string name="toast_error_search">An error occurred while searching!</string>
<string name="toast_update_credential_ok">প্রোফাইল তথ্য সংরক্ষণ করা হয়েছে!</string> <string name="toast_update_credential_ok">The profile data have been saved!</string>
<string name="nothing_to_do">কোনও পদক্ষেপ নেওয়া যাবে না</string> <string name="nothing_to_do">No action can be taken</string>
<string name="toast_saved">মিডিয়া রক্ষা পেয়েছে!</string> <string name="toast_saved">The media has been saved!</string>
<string name="toast_error_translate">অনুবাদ করার সময় একটি ত্রুটি ঘটেছে!</string> <string name="toast_error_translate">An error occurred while translating!</string>
<string name="toast_error_translations_disabled">অনুবাদসমূহ সেটিংসে অক্ষম রয়েছে</string> <string name="toast_error_translations_disabled">Translations are disabled in settings</string>
<string name="toast_toot_saved">খসড়া সংরক্ষিত করা হয়েছে!</string> <string name="toast_toot_saved">Draft saved!</string>
<string name="toast_error_char_limit">Are you sure this instance allows this number of characters? Usually, this value is close to 500 characters.</string> <string name="toast_error_char_limit">Are you sure this instance allows this number of characters? Usually, this value is close to 500 characters.</string>
<string name="toast_visibility_changed">Visibility of the toots has been changed for the account %1$s</string> <string name="toast_visibility_changed">Visibility of the toots has been changed for the account %1$s</string>
<!-- Settings --> <!-- Settings -->
@ -600,9 +600,7 @@
<item>1 day</item> <item>1 day</item>
<item>1 week</item> <item>1 week</item>
</string-array> </string-array>
<string name="showcase_instance"> In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n <string name="showcase_instance">In this field, you need to write your instance domain.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b>\nYou can start writing first letters and names will be suggested.
You can start writing first letters and names will be suggested.\n\n
⚠ The Login button will only work if the instance name is valid and the instance is up!
</string> </string>
<string name="more_information">More information</string> <string name="more_information">More information</string>
<!-- languages not translated --> <!-- languages not translated -->

View File

@ -991,9 +991,9 @@ Ara ja pots connectar-te al compte escrivint <b>%1$s</b> en el primer camp i fen
<string name="set_nitter">Substitueix Twitter amb Nitter</string> <string name="set_nitter">Substitueix Twitter amb Nitter</string>
<string name="set_nitter_indication">Nitter és una alternativa de codi obert que fa de frontal per Twitter i protegeix la privacitat.</string> <string name="set_nitter_indication">Nitter és una alternativa de codi obert que fa de frontal per Twitter i protegeix la privacitat.</string>
<string name="set_nitter_host">Introdueix aquí el teu servidor personalitzat o deixa-ho en blanc i s\'usarà nitter.net</string> <string name="set_nitter_host">Introdueix aquí el teu servidor personalitzat o deixa-ho en blanc i s\'usarà nitter.net</string>
<string name="set_bibliogram">Substituir Instagram amb Bibliogram</string> <string name="set_bibliogram">Substituir Instagram per Bibliogram</string>
<string name="set_bibliogram_indication">Bibliogram is an open source alternative Instagram front-end focused on privacy.</string> <string name="set_bibliogram_indication">Bibliogram és un frontal alternatiu de codi obert per Instagram que protegeix la privacitat.</string>
<string name="set_bibliogram_host">Enter your custom host or leave blank for using bibliogram.art</string> <string name="set_bibliogram_host">Introdueix aquí el teu servidor personalitzat o deixa-ho en blanc i s\'usarà bibliogram.art</string>
<string name="set_hide_status_bar">Amaga la barra de notificacions de Fedilab</string> <string name="set_hide_status_bar">Amaga la barra de notificacions de Fedilab</string>
<string name="set_hide_status_bar_indication">Per amagar la notificació que queda a la barra d\'estat, toca la icona de l\'ull i després desactiva: \"Mostra a la barra d\'estat\"</string> <string name="set_hide_status_bar_indication">Per amagar la notificació que queda a la barra d\'estat, toca la icona de l\'ull i després desactiva: \"Mostra a la barra d\'estat\"</string>
<string name="set_live_type_indication">S\'ajornaran les notificacions cada 30 segons. Això permet gastar menys la pila.</string> <string name="set_live_type_indication">S\'ajornaran les notificacions cada 30 segons. Això permet gastar menys la pila.</string>
@ -1112,5 +1112,5 @@ Ara ja pots connectar-te al compte escrivint <b>%1$s</b> en el primer camp i fen
<string name="no_announcements">No hi ha avisos!</string> <string name="no_announcements">No hi ha avisos!</string>
<string name="add_reaction">Afegir una reacció</string> <string name="add_reaction">Afegir una reacció</string>
<string name="set_custom_tabs_indication">Utilitza el teu navegador preferit dins l\'aplicació. Desmarca aquesta funció si vols que els enllaços s\'obrin externament.</string> <string name="set_custom_tabs_indication">Utilitza el teu navegador preferit dins l\'aplicació. Desmarca aquesta funció si vols que els enllaços s\'obrin externament.</string>
<string name="set_video_cache">Video cache in MB, zero means no cache.</string> <string name="set_video_cache">Memòria cau de vídeo en MB, el zero vol dir que no hi ha memòria cau.</string>
</resources> </resources>

View File

@ -110,7 +110,7 @@
<item>Anmeld dette toot?</item> <item>Anmeld dette toot?</item>
<item>Blokér dette domæne?</item> <item>Blokér dette domæne?</item>
<item>Fjern \"Gør tavs\" for denne konto?</item> <item>Fjern \"Gør tavs\" for denne konto?</item>
<item>Unblock this account?</item> <item>Afblokér denne konto?</item>
</string-array> </string-array>
<string-array name="action_notification"> <string-array name="action_notification">
<item>Notificér</item> <item>Notificér</item>
@ -1001,9 +1001,9 @@
<string name="set_nitter">Erstat Twitter med Nitter</string> <string name="set_nitter">Erstat Twitter med Nitter</string>
<string name="set_nitter_indication">Nitter er en alternativ open source Twitter front-end med fokus på fortrolighed.</string> <string name="set_nitter_indication">Nitter er en alternativ open source Twitter front-end med fokus på fortrolighed.</string>
<string name="set_nitter_host">Angiv din tilpassede vært eller udfykd ikke for at benytte nitter.net</string> <string name="set_nitter_host">Angiv din tilpassede vært eller udfykd ikke for at benytte nitter.net</string>
<string name="set_bibliogram">Replace Instagram with Bibliogram</string> <string name="set_bibliogram">Erstat Instagram med Bibliogram</string>
<string name="set_bibliogram_indication">Bibliogram is an open source alternative Instagram front-end focused on privacy.</string> <string name="set_bibliogram_indication">Bibliogram er et open source Instagram front-end alternativt fokuseret på datafortrolighed.</string>
<string name="set_bibliogram_host">Enter your custom host or leave blank for using bibliogram.art</string> <string name="set_bibliogram_host">Angiv din tilpassede vært eller lad stå tomt for at benytte bibliogram.art</string>
<string name="set_hide_status_bar">Skjul Fedilab-notifikationsbjælke</string> <string name="set_hide_status_bar">Skjul Fedilab-notifikationsbjælke</string>
<string name="set_hide_status_bar_indication">For at skjule den resterende notifikation på statusbjælken, så klik på øjeikonknappen og fjern derefter markeringen: \"Vises på statusbjælke\"</string> <string name="set_hide_status_bar_indication">For at skjule den resterende notifikation på statusbjælken, så klik på øjeikonknappen og fjern derefter markeringen: \"Vises på statusbjælke\"</string>
<string name="set_live_type_indication">Notifikationer udskydes hvert 30. sekund. Dette vil betyde lavere batteridræning.</string> <string name="set_live_type_indication">Notifikationer udskydes hvert 30. sekund. Dette vil betyde lavere batteridræning.</string>
@ -1122,5 +1122,5 @@
<string name="no_announcements">Ingen meddelelser!</string> <string name="no_announcements">Ingen meddelelser!</string>
<string name="add_reaction">Tilføj en reaktion</string> <string name="add_reaction">Tilføj en reaktion</string>
<string name="set_custom_tabs_indication">Use your favourite browser inside the app. Uncheck this feature to open links externally.</string> <string name="set_custom_tabs_indication">Use your favourite browser inside the app. Uncheck this feature to open links externally.</string>
<string name="set_video_cache">Video cache in MB, zero means no cache.</string> <string name="set_video_cache">Video-cache i MB, nul indikerer ingen cache.</string>
</resources> </resources>

View File

@ -110,7 +110,7 @@
<item>Salatu toot hau?</item> <item>Salatu toot hau?</item>
<item>Blokeatu domeinu hau?</item> <item>Blokeatu domeinu hau?</item>
<item>Desmututu kontu hau?</item> <item>Desmututu kontu hau?</item>
<item>Unblock this account?</item> <item>Desblokeatu kontu hau?</item>
</string-array> </string-array>
<string-array name="action_notification"> <string-array name="action_notification">
<item>Jakinarazi</item> <item>Jakinarazi</item>
@ -1000,9 +1000,9 @@
<string name="set_nitter">Erabili Nitter Twitter-en ordez</string> <string name="set_nitter">Erabili Nitter Twitter-en ordez</string>
<string name="set_nitter_indication">Nitter pribatutasuna aintzat duen Twitter interfaze libre bat da.</string> <string name="set_nitter_indication">Nitter pribatutasuna aintzat duen Twitter interfaze libre bat da.</string>
<string name="set_nitter_host">Sartu zure ostalari pertsonalizatua edo laga hutsik nitter.net erabiltzeko</string> <string name="set_nitter_host">Sartu zure ostalari pertsonalizatua edo laga hutsik nitter.net erabiltzeko</string>
<string name="set_bibliogram">Replace Instagram with Bibliogram</string> <string name="set_bibliogram">Ordeztu Instagram Bibliogram-ekin</string>
<string name="set_bibliogram_indication">Bibliogram is an open source alternative Instagram front-end focused on privacy.</string> <string name="set_bibliogram_indication">Bibliogram pribatutasuna aintzat duen Instagram interfaze libre bat da.</string>
<string name="set_bibliogram_host">Enter your custom host or leave blank for using bibliogram.art</string> <string name="set_bibliogram_host">Sartu zure ostalari pertsonalizatua edo laga hutsik bibliogram.art erabiltzeko</string>
<string name="set_hide_status_bar">Ezkutatu Fedilab jakinarazpen-barra</string> <string name="set_hide_status_bar">Ezkutatu Fedilab jakinarazpen-barra</string>
<string name="set_hide_status_bar_indication">Egoera barran geratzen den jakinarazpena ezkutatzeko, sakatu begiaren ikonoa eta desmarkatu \"Erakutsi egoera-barran\"</string> <string name="set_hide_status_bar_indication">Egoera barran geratzen den jakinarazpena ezkutatzeko, sakatu begiaren ikonoa eta desmarkatu \"Erakutsi egoera-barran\"</string>
<string name="set_live_type_indication">Jakinarazpenak 30 segundo atzeratuko dira. Honela bateria gutxiago erabiliko da.</string> <string name="set_live_type_indication">Jakinarazpenak 30 segundo atzeratuko dira. Honela bateria gutxiago erabiliko da.</string>
@ -1120,6 +1120,6 @@
<string name="action_announcements">Iragarpenak</string> <string name="action_announcements">Iragarpenak</string>
<string name="no_announcements">Iragarpenik ez!</string> <string name="no_announcements">Iragarpenik ez!</string>
<string name="add_reaction">Gehitu erreakzioa</string> <string name="add_reaction">Gehitu erreakzioa</string>
<string name="set_custom_tabs_indication">Use your favourite browser inside the app. Uncheck this feature to open links externally.</string> <string name="set_custom_tabs_indication">Erabili zure gogoko nabigatzailea aplikazio barruan. Desmarkatu ezaugarri hau estekak kanpoan irekitzeko.</string>
<string name="set_video_cache">Video cache in MB, zero means no cache.</string> <string name="set_video_cache">Bideo cachea MB-tan, zerok cacherik ez esan nahi du.</string>
</resources> </resources>

View File

@ -110,7 +110,7 @@
<item>Segnalare questo toot?</item> <item>Segnalare questo toot?</item>
<item>Bloccare questo dominio?</item> <item>Bloccare questo dominio?</item>
<item>Smettere di silenziare questo account?</item> <item>Smettere di silenziare questo account?</item>
<item>Unblock this account?</item> <item>Sbloccare questo account?</item>
</string-array> </string-array>
<string-array name="action_notification"> <string-array name="action_notification">
<item>Notifica</item> <item>Notifica</item>
@ -1001,9 +1001,9 @@
<string name="set_nitter">Sostituisci Twitter con Nitter</string> <string name="set_nitter">Sostituisci Twitter con Nitter</string>
<string name="set_nitter_indication">Nitter è un\'interfaccia alternativa e open source per Twitter, focalizzata sulla privacy.</string> <string name="set_nitter_indication">Nitter è un\'interfaccia alternativa e open source per Twitter, focalizzata sulla privacy.</string>
<string name="set_nitter_host">Inserisci il tuo host personalizzato o lascia vuoto per usare nitter.net</string> <string name="set_nitter_host">Inserisci il tuo host personalizzato o lascia vuoto per usare nitter.net</string>
<string name="set_bibliogram">Replace Instagram with Bibliogram</string> <string name="set_bibliogram">Sostituisci Instagram con Bibliogram</string>
<string name="set_bibliogram_indication">Bibliogram is an open source alternative Instagram front-end focused on privacy.</string> <string name="set_bibliogram_indication">Bibliogram è un\'interfaccia alternativa e open source per Instagram, focalizzata sulla privacy.</string>
<string name="set_bibliogram_host">Enter your custom host or leave blank for using bibliogram.art</string> <string name="set_bibliogram_host">Inserisci il tuo host personalizzato o lascia vuoto per usare bibliogram.art</string>
<string name="set_hide_status_bar">Nascondi barra di notifica di Fedilab</string> <string name="set_hide_status_bar">Nascondi barra di notifica di Fedilab</string>
<string name="set_hide_status_bar_indication">Per nascondere le notifiche rimanenti nella barra di stato, premi il pulsante con l\'icona di un occhio e deseleziona: \"Mostra nella barra di stato\"</string> <string name="set_hide_status_bar_indication">Per nascondere le notifiche rimanenti nella barra di stato, premi il pulsante con l\'icona di un occhio e deseleziona: \"Mostra nella barra di stato\"</string>
<string name="set_live_type_indication">Le notifiche saranno differite ogni 30 secondi. Questo consentirà un minore consumo di batteria.</string> <string name="set_live_type_indication">Le notifiche saranno differite ogni 30 secondi. Questo consentirà un minore consumo di batteria.</string>
@ -1122,5 +1122,5 @@
<string name="no_announcements">Nessun annuncio!</string> <string name="no_announcements">Nessun annuncio!</string>
<string name="add_reaction">Aggiungi una reazione</string> <string name="add_reaction">Aggiungi una reazione</string>
<string name="set_custom_tabs_indication">Usa il tuo browser preferito all\'interno dell\'app. Deseleziona questa funzione per aprire i link esternamente.</string> <string name="set_custom_tabs_indication">Usa il tuo browser preferito all\'interno dell\'app. Deseleziona questa funzione per aprire i link esternamente.</string>
<string name="set_video_cache">Video cache in MB, zero means no cache.</string> <string name="set_video_cache">Cache video in MB, zero significa nessuna cache.</string>
</resources> </resources>

View File

@ -110,7 +110,7 @@
<item>Пожаловаться на этот тут?</item> <item>Пожаловаться на этот тут?</item>
<item>Заблокировать этот домен?</item> <item>Заблокировать этот домен?</item>
<item>Не игнорировать этот аккаунт?</item> <item>Не игнорировать этот аккаунт?</item>
<item>Unblock this account?</item> <item>Разблокировать этот аккаунт?</item>
</string-array> </string-array>
<string-array name="action_notification"> <string-array name="action_notification">
<item>Уведомлять</item> <item>Уведомлять</item>
@ -1017,9 +1017,9 @@
<string name="set_nitter">Заменить Твиттер на Nitter</string> <string name="set_nitter">Заменить Твиттер на Nitter</string>
<string name="set_nitter_indication">Nitter - это альтернатива Twitter с открытым исходным кодом, ориентированная на конфиденциальность.</string> <string name="set_nitter_indication">Nitter - это альтернатива Twitter с открытым исходным кодом, ориентированная на конфиденциальность.</string>
<string name="set_nitter_host">Введите собственный хост или оставьте пустым для использования nitter.net</string> <string name="set_nitter_host">Введите собственный хост или оставьте пустым для использования nitter.net</string>
<string name="set_bibliogram">Replace Instagram with Bibliogram</string> <string name="set_bibliogram">Заменить Instagram на Bibliogram</string>
<string name="set_bibliogram_indication">Bibliogram is an open source alternative Instagram front-end focused on privacy.</string> <string name="set_bibliogram_indication">Bibliogram это альтернативный front-end для Instagram с открытым исходным кодом и сфокусированный на приватности.</string>
<string name="set_bibliogram_host">Enter your custom host or leave blank for using bibliogram.art</string> <string name="set_bibliogram_host">Введите свой собственный хост или оставьте пустым для использования bibliogram.art</string>
<string name="set_hide_status_bar">Скрыть панель уведомлений Fedilab</string> <string name="set_hide_status_bar">Скрыть панель уведомлений Fedilab</string>
<string name="set_hide_status_bar_indication">Чтобы скрыть уведомление в строке состояния, нажмите на кнопку с пиктограммой глаза и снимите флажок: \"Показывать в строке состояния\"</string> <string name="set_hide_status_bar_indication">Чтобы скрыть уведомление в строке состояния, нажмите на кнопку с пиктограммой глаза и снимите флажок: \"Показывать в строке состояния\"</string>
<string name="set_live_type_indication">Уведомления будут появляться на 30 секунд позже. Это позволит уменьшить влияние на батарею.</string> <string name="set_live_type_indication">Уведомления будут появляться на 30 секунд позже. Это позволит уменьшить влияние на батарею.</string>
@ -1137,6 +1137,6 @@
<string name="action_announcements">Объявления</string> <string name="action_announcements">Объявления</string>
<string name="no_announcements">Объявлений пока нет.</string> <string name="no_announcements">Объявлений пока нет.</string>
<string name="add_reaction">Добавить реакцию</string> <string name="add_reaction">Добавить реакцию</string>
<string name="set_custom_tabs_indication">Use your favourite browser inside the app. Uncheck this feature to open links externally.</string> <string name="set_custom_tabs_indication">Используйте ваш любимый браузер внутри приложения. Снимите флажок на эту функцию, чтобы открывать ссылки внешним браузером.</string>
<string name="set_video_cache">Video cache in MB, zero means no cache.</string> <string name="set_video_cache">Кэш видео в MB, ноль означает, нет кэша.</string>
</resources> </resources>

File diff suppressed because it is too large Load Diff

View File

@ -684,7 +684,7 @@
<string name="all">Hepsi</string> <string name="all">Hepsi</string>
<string name="about_opencollective">Uygulamayı destekleyin</string> <string name="about_opencollective">Uygulamayı destekleyin</string>
<string name="more_about_opencollective">Open Collective, grupların hızlı bir şekilde bir birlik oluşturmalarını, para toplamalarını ve onları şeffaf bir şekilde yönetmelerini sağlar.</string> <string name="more_about_opencollective">Open Collective, grupların hızlı bir şekilde bir birlik oluşturmalarını, para toplamalarını ve onları şeffaf bir şekilde yönetmelerini sağlar.</string>
<string name="copy_link">Linki kopyala</string> <string name="copy_link">Bağlantıyı kopyala</string>
<string name="connect_instance">Bağlan</string> <string name="connect_instance">Bağlan</string>
<string name="set_normal">Normal</string> <string name="set_normal">Normal</string>
<string name="set_compact">Kompakt</string> <string name="set_compact">Kompakt</string>
@ -914,7 +914,7 @@
<string name="number_boosts">Number of boosts</string> <string name="number_boosts">Number of boosts</string>
<string name="number_favourites">Favori sayısı</string> <string name="number_favourites">Favori sayısı</string>
<string name="number_mentions">Bahsetme sayısı</string> <string name="number_mentions">Bahsetme sayısı</string>
<string name="number_follows">Number of follows</string> <string name="number_follows">Toplam takip sayısı</string>
<string name="number_polls">Anket sayısı</string> <string name="number_polls">Anket sayısı</string>
<string name="number_replies">Number of replies</string> <string name="number_replies">Number of replies</string>
<string name="number_statuses">Number of statuses</string> <string name="number_statuses">Number of statuses</string>
@ -987,8 +987,8 @@
<string name="set_allow_live_notifications_indication">Canlı bildirimler yalnızca bu hesap için etkinleştirilecek.</string> <string name="set_allow_live_notifications_indication">Canlı bildirimler yalnızca bu hesap için etkinleştirilecek.</string>
<string name="set_clear_cache_exit">Clear cache when leaving</string> <string name="set_clear_cache_exit">Clear cache when leaving</string>
<string name="set_clear_cache_exit_indication">The cache (media, cached messages, data from the built-in browser) will be automatically cleared when leaving the application.</string> <string name="set_clear_cache_exit_indication">The cache (media, cached messages, data from the built-in browser) will be automatically cleared when leaving the application.</string>
<string name="unfollow_confirm">Do you want to unfollow this account?</string> <string name="unfollow_confirm">Bu hesabı takip etmekten vaz geçmek istiyor musunuz?</string>
<string name="set_unfollow_validation">Show confirmation dialog before unfollowing</string> <string name="set_unfollow_validation">Takibi bırakmadan önce onay kutusu göster</string>
<string name="set_invidious">Replace Youtube with Invidio.us</string> <string name="set_invidious">Replace Youtube with Invidio.us</string>
<string name="set_invidious_indication">Invidious is an alternative front-end to YouTube</string> <string name="set_invidious_indication">Invidious is an alternative front-end to YouTube</string>
<string name="set_invidious_host">Enter your custom host or leave blank for using invidio.us</string> <string name="set_invidious_host">Enter your custom host or leave blank for using invidio.us</string>
@ -1021,12 +1021,12 @@
<string name="message_preview">Mesaj önizlemesi</string> <string name="message_preview">Mesaj önizlemesi</string>
<string name="report_mention">Add mentions in each message</string> <string name="report_mention">Add mentions in each message</string>
<string name="fetch_conversation">Görüşme indiriliyor</string> <string name="fetch_conversation">Görüşme indiriliyor</string>
<string name="order_by">Order by</string> <string name="order_by">Sıralama ölçütü</string>
<string name="title_video_peertube">Video başlığı</string> <string name="title_video_peertube">Video başlığı</string>
<string name="join_peertube">Peertube\'e katıl</string> <string name="join_peertube">Peertube\'e katıl</string>
<string name="agreement_check_peertube">16 yaşından büyüğüm ve bu sunucunun %1$s koşullarını kabul ediyorum</string> <string name="agreement_check_peertube">16 yaşından büyüğüm ve bu sunucunun %1$s koşullarını kabul ediyorum</string>
<string name="link_color_title">Linkler</string> <string name="link_color_title">Bağlantılar</string>
<string name="link_color">Mesajlardaki linklerin (URL\'ler, bahsedilmeler, etiketler, vb.) rengini değiştirin</string> <string name="link_color">Mesajlardaki bağlantıların (URL\'ler, bahsedilmeler, etiketler, vb.) rengini değiştirin</string>
<string name="boost_header_color_title">Başlığı tekrar bloglar</string> <string name="boost_header_color_title">Başlığı tekrar bloglar</string>
<string name="displayname_title">Change the color of display name at the top of messages</string> <string name="displayname_title">Change the color of display name at the top of messages</string>
<string name="username_title">Change the color of the user name at the top of messages</string> <string name="username_title">Change the color of the user name at the top of messages</string>
@ -1040,40 +1040,40 @@
<string name="icons_color">Zaman çizelgelerinin alt kısmındaki simgelerin rengi</string> <string name="icons_color">Zaman çizelgelerinin alt kısmındaki simgelerin rengi</string>
<string name="pin_tag">Bu etiketi sabitle</string> <string name="pin_tag">Bu etiketi sabitle</string>
<string name="logo_of_the_instance">Sunucunun logosu</string> <string name="logo_of_the_instance">Sunucunun logosu</string>
<string name="edit_profile">Edit profile</string> <string name="edit_profile">Profili düzenle</string>
<string name="make_an_action">Make an action</string> <string name="make_an_action">Make an action</string>
<string name="translation">Translation</string> <string name="translation">Çeviri</string>
<string name="image_preview">Image preview</string> <string name="image_preview">Resim önizlemesi</string>
<string name="text_color_title">Text color</string> <string name="text_color_title">Metin rengi</string>
<string name="text_color">Change the text color in pots</string> <string name="text_color">Change the text color in pots</string>
<string name="apply_changes">Apply changes</string> <string name="apply_changes">Değişiklikleri uygula</string>
<string name="restart_message">You need to restart the application to apply changes</string> <string name="restart_message">You need to restart the application to apply changes</string>
<string name="restart">Restart</string> <string name="restart">Yeniden Başlat</string>
<string name="pref_custom_theme">Use a custom theme</string> <string name="pref_custom_theme">Kişisel tema kullan</string>
<string name="pref_custom_theme_summary">Allow to override colors of the selected theme above</string> <string name="pref_custom_theme_summary">Yukarıda seçilen temanın renklerini değiştirmeye izin ver</string>
<string name="theming">Theming</string> <string name="theming">Theming</string>
<string name="store_before">Store before</string> <string name="store_before">Store before</string>
<string name="data_export_theme">The theme was exported</string> <string name="data_export_theme">Tema dışa aktarıldı</string>
<string name="data_export_theme_success">The theme has been successfully exported in CSV</string> <string name="data_export_theme_success">Tema CSV dosyası olarak dışa aktarıldı</string>
<string name="pref_colored_status_bar_summary">Apply the primary color to the status bar</string> <string name="pref_colored_status_bar_summary">Apply the primary color to the status bar</string>
<string name="pref_colored_status_bar_title">Status bar color</string> <string name="pref_colored_status_bar_title">Durum çubuğu rengi</string>
<string name="restore_default_theme">Restore a default theme</string> <string name="restore_default_theme">Varsayılan temayı geri yükle</string>
<string name="import_theme">Import a theme</string> <string name="import_theme">Temayı içe aktar</string>
<string name="import_theme_title">Daha önceki dışa aktarmadan bir temayı içe aktarmak için buraya dokunun</string> <string name="import_theme_title">Daha önceden dışa aktarılmış temayı içe aktarmak için dokunun</string>
<string name="export_theme">Export the theme</string> <string name="export_theme">Temayı dışa aktar</string>
<string name="export_theme_title">Mevcut temayı dışa aktarmak için dokunun</string> <string name="export_theme_title">Mevcut temayı dışa aktarmak için dokunun</string>
<string name="theme_file_error">An error occurred when selecting the theme file</string> <string name="theme_file_error">Tema dosyasını seçerken bir hata oluştu</string>
<string name="label_theme_picker">Theme Picker</string> <string name="label_theme_picker">Tema Seçici</string>
<string name="pref_theme_summary">Select a pre-installed theme</string> <string name="pref_theme_summary">Önceden yüklenmiş bir tema seçin</string>
<string name="pref_theme_title">Themes</string> <string name="pref_theme_title">Temalar</string>
<string name="pref_colored_navigation_bar_summary">Apply the primary color to the navigation bar</string> <string name="pref_colored_navigation_bar_summary">Apply the primary color to the navigation bar</string>
<string name="pref_colored_navigation_bar_title">Navigation bar color</string> <string name="pref_colored_navigation_bar_title">Gezinme çubuğu rengi</string>
<string name="pref_background_color_summary">The underlying color of the apps content.</string> <string name="pref_background_color_summary">The underlying color of the apps content.</string>
<string name="pref_background_color_title">Background color</string> <string name="pref_background_color_title">Arka plan rengi</string>
<string name="pref_accent_color_summary">Accents select parts of the UI.</string> <string name="pref_accent_color_summary">Accents select parts of the UI.</string>
<string name="pref_accent_color_title">Accent color</string> <string name="pref_accent_color_title">Vurgu rengi</string>
<string name="pref_primary_color_summary">Displayed most frequently across your app.</string> <string name="pref_primary_color_summary">Displayed most frequently across your app.</string>
<string name="pref_primary_color_title">Primary color</string> <string name="pref_primary_color_title">Birincil renk</string>
<string name="export_bookmarks">Yer imlerini sunucuya dışa aktar</string> <string name="export_bookmarks">Yer imlerini sunucuya dışa aktar</string>
<string name="import_bookmarks">Yer imlerini sunucudan içe aktar</string> <string name="import_bookmarks">Yer imlerini sunucudan içe aktar</string>
<string name="user_count">User count</string> <string name="user_count">User count</string>
@ -1084,9 +1084,9 @@
<string name="release_note_title">What\'s new in %s</string> <string name="release_note_title">What\'s new in %s</string>
<string name="follow_account_update">You can follow my account for updates</string> <string name="follow_account_update">You can follow my account for updates</string>
<string name="no_instance_reccord">Bu sunucu https://instances.social üzerinde mevcut değil</string> <string name="no_instance_reccord">Bu sunucu https://instances.social üzerinde mevcut değil</string>
<string name="display_full_link">Display full link</string> <string name="display_full_link">Tam bağlantıyı görüntüle</string>
<string name="share_link">Share link</string> <string name="share_link">Bağlantıyı paylaş</string>
<string name="link_copy">The URL has been copied to the clipboard</string> <string name="link_copy">URL panoya kopyalandı</string>
<string name="open_other_app">Open with another app</string> <string name="open_other_app">Open with another app</string>
<string name="check_redirect">Check redirect</string> <string name="check_redirect">Check redirect</string>
<string name="no_redirect">This URL does not redirect</string> <string name="no_redirect">This URL does not redirect</string>
@ -1096,25 +1096,25 @@
<string name="set_user_agent_indication">Allows to customize the user agent used for api calls or with the built-in browser.</string> <string name="set_user_agent_indication">Allows to customize the user agent used for api calls or with the built-in browser.</string>
<string name="set_utm_parameters">Remove UTM parameters</string> <string name="set_utm_parameters">Remove UTM parameters</string>
<string name="set_utm_parameters_indication">The app will automatically remove UTM parameters from URLs before visiting a link.</string> <string name="set_utm_parameters_indication">The app will automatically remove UTM parameters from URLs before visiting a link.</string>
<string name="action_trends">Trends</string> <string name="action_trends">Trendler</string>
<string name="trending_now">Trending now</string> <string name="trending_now">Şu an trendlerde</string>
<string name="talking_about">%d people talking</string> <string name="talking_about">%d kişi konuşuyor</string>
<string name="twitter_accounts">Twitter accounts (via Nitter)</string> <string name="twitter_accounts">Twitter hesapları (Nitter üzerinden)</string>
<string name="list_of_twitter_accounts">Twitter usernames space separated</string> <string name="list_of_twitter_accounts">Twitter usernames space separated</string>
<string name="identity_proofs">Identity proofs</string> <string name="identity_proofs">Identity proofs</string>
<string name="verified_user">Verified identity</string> <string name="verified_user">Doğrulanmış kimlik</string>
<string name="verified_by">Verified by %1$s (%2$s)</string> <string name="verified_by">Verified by %1$s (%2$s)</string>
<string name="remove_notification">Delete the notification</string> <string name="remove_notification">Bildirimi sil</string>
<string name="display_more_options">Display more options</string> <string name="display_more_options">Daha fazla seçenek göster</string>
<string name="pixelfed_story">Bir Pixelfed hikayesidir</string> <string name="pixelfed_story">Bir Pixelfed hikayesidir</string>
<string name="story_indication">Bir ortam dosyası yüklerseniz otomatik olarak Pixelfed hikayenize yüklenecektir.</string> <string name="story_indication">Bir ortam dosyası yüklerseniz otomatik olarak Pixelfed hikayenize yüklenecektir.</string>
<string name="added_to_story">Ortam dosyası hikayenize başarıyla eklendi!</string> <string name="added_to_story">Ortam dosyası hikayenize başarıyla eklendi!</string>
<string name="action_disabled">Action disabled</string> <string name="action_disabled">Action disabled</string>
<string name="action_unfollow">Unfollow</string> <string name="action_unfollow">Takibi bırak</string>
<string name="error_destination_path">Something went wrong, please check your download directory in settings.</string> <string name="error_destination_path">Something went wrong, please check your download directory in settings.</string>
<string name="action_announcements">Announcements</string> <string name="action_announcements">Duyurular</string>
<string name="no_announcements">No announcements!</string> <string name="no_announcements">Duyuru yok!</string>
<string name="add_reaction">Add a reaction</string> <string name="add_reaction">Tepki ekle</string>
<string name="set_custom_tabs_indication">Use your favourite browser inside the app. Uncheck this feature to open links externally.</string> <string name="set_custom_tabs_indication">Use your favourite browser inside the app. Uncheck this feature to open links externally.</string>
<string name="set_video_cache">Video cache in MB, zero means no cache.</string> <string name="set_video_cache">Video cache in MB, zero means no cache.</string>
</resources> </resources>

View File

@ -110,7 +110,7 @@
<item>举报这条嘟文吗?</item> <item>举报这条嘟文吗?</item>
<item>是否屏蔽此域名?</item> <item>是否屏蔽此域名?</item>
<item>取消该用户的禁言吗?</item> <item>取消该用户的禁言吗?</item>
<item>Unblock this account?</item> <item>取消屏蔽此帐号?</item>
</string-array> </string-array>
<string-array name="action_notification"> <string-array name="action_notification">
<item>通知</item> <item>通知</item>
@ -993,9 +993,9 @@
<string name="set_nitter">用Nitter取代Twitter</string> <string name="set_nitter">用Nitter取代Twitter</string>
<string name="set_nitter_indication">Niter是一种开放源码的替代的 Twitter 的前端,注重保护隐私。</string> <string name="set_nitter_indication">Niter是一种开放源码的替代的 Twitter 的前端,注重保护隐私。</string>
<string name="set_nitter_host">输入你自定义的主机或者留空以使用 nitter.net</string> <string name="set_nitter_host">输入你自定义的主机或者留空以使用 nitter.net</string>
<string name="set_bibliogram">Replace Instagram with Bibliogram</string> <string name="set_bibliogram">将 Instagram 替换成 Bibliogram</string>
<string name="set_bibliogram_indication">Bibliogram is an open source alternative Instagram front-end focused on privacy.</string> <string name="set_bibliogram_indication">Bibliogram 是个注重隐私的 Instagram 开源替选前端。</string>
<string name="set_bibliogram_host">Enter your custom host or leave blank for using bibliogram.art</string> <string name="set_bibliogram_host">输入你的自定义主机或者留空以使用 bibliogram.art</string>
<string name="set_hide_status_bar">隐藏 Fedilab 通知栏</string> <string name="set_hide_status_bar">隐藏 Fedilab 通知栏</string>
<string name="set_hide_status_bar_indication">要隐藏留在状态栏里的通知,请点击眼睛图标的按钮,然后取消勾选:“在状态栏内显示”</string> <string name="set_hide_status_bar_indication">要隐藏留在状态栏里的通知,请点击眼睛图标的按钮,然后取消勾选:“在状态栏内显示”</string>
<string name="set_live_type_indication">通知将被延迟为每30秒产生。这将允许耗尽较少电池。</string> <string name="set_live_type_indication">通知将被延迟为每30秒产生。这将允许耗尽较少电池。</string>
@ -1114,5 +1114,5 @@
<string name="no_announcements">无通告!</string> <string name="no_announcements">无通告!</string>
<string name="add_reaction">添加回应</string> <string name="add_reaction">添加回应</string>
<string name="set_custom_tabs_indication">在应用内使用您最喜欢的浏览器。取消勾选此功能以对外打开链接。</string> <string name="set_custom_tabs_indication">在应用内使用您最喜欢的浏览器。取消勾选此功能以对外打开链接。</string>
<string name="set_video_cache">Video cache in MB, zero means no cache.</string> <string name="set_video_cache">以 MB 计算的视频缓存量,零表示无缓存。</string>
</resources> </resources>

View File

@ -681,6 +681,7 @@
<!-- languages not translated --> <!-- languages not translated -->
<string name="languages">Languages</string> <string name="languages">Languages</string>
<string name="english" translatable="false">English</string> <string name="english" translatable="false">English</string>
<string name="silesian" translatable="false">ślůnski</string>
<string name="french" translatable="false">Français</string> <string name="french" translatable="false">Français</string>
<string name="arabic" translatable="false">العربية</string> <string name="arabic" translatable="false">العربية</string>
<string name="kabyle" translatable="false">Taqbaylit</string> <string name="kabyle" translatable="false">Taqbaylit</string>

View File

@ -6,7 +6,7 @@ buildscript {
google() google()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.6.2' classpath 'com.android.tools.build:gradle:4.0.0'
// NOTE: Do not place your application dependencies here; they belong // NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files // in the individual module build.gradle files

View File

@ -0,0 +1,10 @@
Added:
- Silesian localization
Changed:
- Add Silesian in language picker
Fixed:
- Some URLs not clickable
- Empty home timeline
- Some crashes when scrolling

View File

@ -0,0 +1,16 @@
Spiyro:
- Mastodon, Pleroma, Pixelfed, Peertube, GNU Social, Friendica.
Aplikacyjo mo szyroke funkcyje (nojbarzij we Pleromie i Mastodonie):
- Sparcie do wielu kōnt
- Planowanie wiadōmości ze masziny
- Planowanie rozgłosōw
- Zokłodki wiadōmości
- Śledzynie i kōntaktowanie sie ze zdalnymi instancyjami
- Wyciszanie kōnt na jakiś czas
- Akcyje na wielu kōntach po dugim prziciśniyńciu
- Przekłady
- Raje kōnsztu
- Raje wideo

View File

@ -0,0 +1 @@
Fedilab to wielofunkcyjny androidowy klijynt zdecyntralizowanego Fediwersum, co sie skłodo ze mikroblogōw, dzielynio sie fotografijami i udostympniano wideo.

View File

@ -1,6 +1,6 @@
#Fri Mar 06 19:14:19 CET 2020 #Sat Jun 06 18:24:49 CEST 2020
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip