Merge branch 'develop'

This commit is contained in:
stom79 2018-08-15 14:38:51 +02:00
commit aa6cd92847
113 changed files with 1555 additions and 384 deletions

View File

@ -1,3 +1,4 @@
## Mastalab is a multi-accounts client for Mastodon [![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [<img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg"/>](https://liberapay.com/tom79/donate)
The number of libraries is minimized and it does not use tracking tools. The source code is free (GPLv3). Any help would be greatly appreciated to fix spelling or for any other suggestions.
@ -7,9 +8,9 @@ The number of libraries is minimized and it does not use tracking tools. The sou
[WIKI](https://github.com/stom79/mastalab/wiki)
[WIKI](https://gitlab.com/tom79/mastalab/wikis/home)
[Release notes](https://github.com/stom79/mastalab/releases)
[Release notes](https://gitlab.com/tom79/mastalab/tags)

View File

@ -7,8 +7,8 @@ android {
applicationId "fr.gouv.etalab.mastodon"
minSdkVersion 15
targetSdkVersion 27
versionCode 123
versionName "1.9.0"
versionCode 124
versionName "1.9.0-test"
}
flavorDimensions "default"
buildTypes {
@ -65,7 +65,7 @@ dependencies {
implementation "com.gongwen:swipeback:$swipebackLibraryVersion"
implementation 'com.github.stom79:country-picker-android:1.2.0'
implementation 'com.github.stom79:mytransl:1.4'
implementation 'com.github.stom79:mytransl:1.5'
playstoreImplementation "io.github.kobakei:ratethisapp:$ratethisappLibraryVersion"

View File

@ -25,7 +25,6 @@ import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.net.Uri;
import android.os.AsyncTask;
@ -34,6 +33,7 @@ import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.TabItem;
import android.support.design.widget.TabLayout;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment;
@ -45,6 +45,8 @@ import android.support.v7.app.AlertDialog;
import android.support.v7.widget.PopupMenu;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.SwitchCompat;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Patterns;
import android.view.Gravity;
import android.view.LayoutInflater;
@ -74,6 +76,7 @@ import java.util.List;
import java.util.Locale;
import java.util.Stack;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import fr.gouv.etalab.mastodon.R;
import fr.gouv.etalab.mastodon.asynctasks.RetrieveInstanceAsyncTask;
@ -101,6 +104,7 @@ import fr.gouv.etalab.mastodon.interfaces.OnRetrieveRemoteAccountInterface;
import fr.gouv.etalab.mastodon.interfaces.OnUpdateAccountInfoInterface;
import fr.gouv.etalab.mastodon.services.BackupStatusService;
import fr.gouv.etalab.mastodon.services.LiveNotificationService;
import fr.gouv.etalab.mastodon.sqlite.SearchDAO;
import fr.gouv.etalab.mastodon.sqlite.Sqlite;
import fr.gouv.etalab.mastodon.asynctasks.RetrieveAccountsAsyncTask;
import fr.gouv.etalab.mastodon.asynctasks.RetrieveFeedsAsyncTask;
@ -118,6 +122,8 @@ import static fr.gouv.etalab.mastodon.helper.Helper.INTENT_ACTION;
import static fr.gouv.etalab.mastodon.helper.Helper.INTENT_TARGETED_ACCOUNT;
import static fr.gouv.etalab.mastodon.helper.Helper.NOTIFICATION_INTENT;
import static fr.gouv.etalab.mastodon.helper.Helper.PREF_KEY_ID;
import static fr.gouv.etalab.mastodon.helper.Helper.SEARCH_KEYWORD;
import static fr.gouv.etalab.mastodon.helper.Helper.SEARCH_TAG;
import static fr.gouv.etalab.mastodon.helper.Helper.THEME_BLACK;
import static fr.gouv.etalab.mastodon.helper.Helper.changeDrawableColor;
import static fr.gouv.etalab.mastodon.helper.Helper.changeUser;
@ -158,6 +164,8 @@ public abstract class BaseMainActivity extends BaseActivity
private String bookmark;
private String userId;
private String instance;
public int countPage;
private PagerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -367,14 +375,14 @@ public abstract class BaseMainActivity extends BaseActivity
viewPager = findViewById(R.id.viewpager);
int countPage = 2;
countPage = 2;
if( sharedpreferences.getBoolean(Helper.SET_DISPLAY_LOCAL, true))
countPage++;
if( sharedpreferences.getBoolean(Helper.SET_DISPLAY_GLOBAL, true))
countPage++;
viewPager.setOffscreenPageLimit(countPage);
main_app_container = findViewById(R.id.main_app_container);
PagerAdapter adapter = new PagerAdapter
adapter = new PagerAdapter
(getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
@ -526,6 +534,7 @@ public abstract class BaseMainActivity extends BaseActivity
startActivity(intent);
toolbar_search.setQuery("", false);
toolbar_search.setIconified(true);
if( main_app_container.getVisibility() == View.VISIBLE){
main_app_container.setVisibility(View.VISIBLE);
viewPager.setVisibility(View.GONE);
@ -673,9 +682,7 @@ public abstract class BaseMainActivity extends BaseActivity
long sizeCache = Helper.cacheSize(getCacheDir());
float cacheSize = 0;
if( sizeCache > 0 ) {
if (sizeCache > 0) {
cacheSize = (float) sizeCache / 1000000.0f;
}
cacheSize = (float) sizeCache / 1000000.0f;
}
final float finalCacheSize = cacheSize;
builder.setMessage(getString(R.string.cache_message, String.format("%s %s", String.format(Locale.getDefault(), "%.2f", cacheSize), getString(R.string.cache_units))))
@ -913,12 +920,28 @@ public abstract class BaseMainActivity extends BaseActivity
}
}
};
refreshSearchTab();
LocalBroadcastManager.getInstance(this).registerReceiver(receive_data, new IntentFilter(Helper.RECEIVE_DATA));
// Retrieves instance
new RetrieveInstanceAsyncTask(getApplicationContext(), BaseMainActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
public void refreshSearchTab(){
Helper.addSearchTag(BaseMainActivity.this, tabLayout, adapter);
}
public void removeSearchTab(String tag){
Helper.removeSearchTag(tag, tabLayout, adapter);
int allTabCount = tabLayout.getTabCount();
if( allTabCount == countPage){
main_app_container.setVisibility(View.GONE);
viewPager.setVisibility(View.VISIBLE);
tabLayout.setVisibility(View.VISIBLE);
toolbarTitle.setVisibility(View.GONE);
}
}
protected abstract void rateThisApp();
@ -1021,6 +1044,27 @@ public abstract class BaseMainActivity extends BaseActivity
@SuppressLint("InflateParams") View dialogView = inflater.inflate(R.layout.filter_regex, null);
dialogBuilder.setView(dialogView);
final EditText editText = dialogView.findViewById(R.id.filter_regex);
Toast alertRegex = Toast.makeText(BaseMainActivity.this, R.string.alert_regex, Toast.LENGTH_LONG);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
try {
//noinspection ResultOfMethodCallIgnored
Pattern.compile("(" + s.toString() + ")", Pattern.CASE_INSENSITIVE);
}catch (Exception e){
if( !alertRegex.getView().isShown()){
alertRegex.show();
}
}
}
});
if( show_filtered != null) {
editText.setText(show_filtered);
editText.setSelection(editText.getText().toString().length());
@ -1105,6 +1149,17 @@ public abstract class BaseMainActivity extends BaseActivity
}else if( extras.getInt(INTENT_ACTION) == BACKUP_INTENT){
Intent myIntent = new Intent(BaseMainActivity.this, OwnerStatusActivity.class);
startActivity(myIntent);
}else if(extras.getInt(INTENT_ACTION) == SEARCH_TAG){
String keyword = extras.getString(SEARCH_KEYWORD);
if( keyword != null){
adapter = new PagerAdapter
(getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(adapter);
for(int i = 0; i < tabLayout.getTabCount() ; i++ ){
if( tabLayout.getTabAt(i).getText() != null && tabLayout.getTabAt(i).getText().equals(keyword))
tabLayout.getTabAt(i).select();
}
}
}
}else if( Intent.ACTION_SEND.equals(action) && type != null ) {
if ("text/plain".equals(type)) {
@ -1287,6 +1342,7 @@ public abstract class BaseMainActivity extends BaseActivity
LocalBroadcastManager.getInstance(this).registerReceiver(receive_federated_data, new IntentFilter(Helper.RECEIVE_FEDERATED_DATA));
LocalBroadcastManager.getInstance(this).registerReceiver(receive_local_data, new IntentFilter(Helper.RECEIVE_LOCAL_DATA));
}
@Override
@ -1344,7 +1400,6 @@ public abstract class BaseMainActivity extends BaseActivity
viewPager.setVisibility(View.GONE);
tabLayout.setVisibility(View.GONE);
toolbarTitle.setVisibility(View.VISIBLE);
appBar.setExpanded(true);
if (id != R.id.nav_drafts && id != R.id.nav_bookmarks ) {
delete_all.setVisibility(View.GONE);
@ -1536,7 +1591,7 @@ public abstract class BaseMainActivity extends BaseActivity
/**
* Page Adapter for settings
*/
private class PagerAdapter extends FragmentStatePagerAdapter {
public class PagerAdapter extends FragmentStatePagerAdapter {
int mNumOfTabs;
private PagerAdapter(FragmentManager fm, int NumOfTabs) {
@ -1544,6 +1599,18 @@ public abstract class BaseMainActivity extends BaseActivity
this.mNumOfTabs = NumOfTabs;
}
public void removeTabPage() {
this.mNumOfTabs--;
notifyDataSetChanged();
}
public void addTabPage(String title) {
TabLayout.Tab tab = tabLayout.newTab();
tab.setText(title);
this.mNumOfTabs++;
notifyDataSetChanged();
}
@Override
public Fragment getItem(int position) {
//Remove the search bar
@ -1552,6 +1619,9 @@ public abstract class BaseMainActivity extends BaseActivity
tabLayout.setVisibility(View.VISIBLE);
toolbar_search.setIconified(true);
}
SQLiteDatabase db = Sqlite.getInstance(BaseMainActivity.this, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
List<String> searches = new SearchDAO(BaseMainActivity.this, db).getAllSearch();
int sizeSearches = (searches ==null)?0:searches.size();
//Selection comes from another menu, no action to do
DisplayStatusFragment statusFragment;
Bundle bundle = new Bundle();
@ -1568,18 +1638,24 @@ public abstract class BaseMainActivity extends BaseActivity
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.LOCAL);
statusFragment.setArguments(bundle);
return statusFragment;
}else if(position == 2){
}else if(position == 2 && display_global){
statusFragment = new DisplayStatusFragment();
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.PUBLIC);
statusFragment.setArguments(bundle);
return statusFragment;
}else if (position == 3){
}else if (position == 3 && display_global && display_local){
statusFragment = new DisplayStatusFragment();
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.PUBLIC);
statusFragment.setArguments(bundle);
return statusFragment;
}else{ //Here it's a search fragment
statusFragment = new DisplayStatusFragment();
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.TAG);
if( tabLayout.getTabAt(position) != null && tabLayout.getTabAt(position).getText() != null)
bundle.putString("tag", tabLayout.getTabAt(position).getText().toString());
statusFragment.setArguments(bundle);
return statusFragment;
}
return null;
}
@NonNull
@ -1607,6 +1683,7 @@ public abstract class BaseMainActivity extends BaseActivity
}
return createdFragment;
}
@Override
public int getCount() {
return mNumOfTabs;

View File

@ -59,7 +59,10 @@ import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.transition.Transition;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import fr.gouv.etalab.mastodon.R;
@ -79,6 +82,7 @@ import fr.gouv.etalab.mastodon.fragments.DisplayStatusFragment;
import fr.gouv.etalab.mastodon.helper.Helper;
import fr.gouv.etalab.mastodon.interfaces.OnPostActionInterface;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveAccountInterface;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveEmojiAccountInterface;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveFeedsAccountInterface;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveFeedsInterface;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveRelationshipInterface;
@ -87,6 +91,7 @@ import fr.gouv.etalab.mastodon.sqlite.AccountDAO;
import fr.gouv.etalab.mastodon.sqlite.Sqlite;
import fr.gouv.etalab.mastodon.sqlite.TempMuteDAO;
import static fr.gouv.etalab.mastodon.helper.Helper.THEME_BLACK;
import static fr.gouv.etalab.mastodon.helper.Helper.THEME_DARK;
import static fr.gouv.etalab.mastodon.helper.Helper.changeDrawableColor;
import static fr.gouv.etalab.mastodon.helper.Helper.withSuffix;
@ -97,7 +102,7 @@ import static fr.gouv.etalab.mastodon.helper.Helper.withSuffix;
* Show account activity class
*/
public class ShowAccountActivity extends BaseActivity implements OnPostActionInterface, OnRetrieveAccountInterface, OnRetrieveFeedsAccountInterface, OnRetrieveRelationshipInterface, OnRetrieveFeedsInterface {
public class ShowAccountActivity extends BaseActivity implements OnPostActionInterface, OnRetrieveAccountInterface, OnRetrieveFeedsAccountInterface, OnRetrieveRelationshipInterface, OnRetrieveFeedsInterface, OnRetrieveEmojiAccountInterface {
private List<Status> statuses;
@ -125,6 +130,8 @@ public class ShowAccountActivity extends BaseActivity implements OnPostActionInt
private Account account;
private boolean show_boosts, show_replies;
public enum action{
FOLLOW,
UNFOLLOW,
@ -413,8 +420,8 @@ public class ShowAccountActivity extends BaseActivity implements OnPostActionInt
accountUrl = account.getUrl();
final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
if( theme == Helper.THEME_DARK){
changeDrawableColor(getApplicationContext(), R.drawable.ic_lock_outline,R.color.mastodonC4);
if( theme == Helper.THEME_BLACK){
changeDrawableColor(getApplicationContext(), R.drawable.ic_lock_outline,R.color.dark_icon);
}else {
changeDrawableColor(getApplicationContext(), R.drawable.ic_lock_outline,R.color.mastodonC4);
}
@ -422,7 +429,7 @@ public class ShowAccountActivity extends BaseActivity implements OnPostActionInt
if (urlHeader.startsWith("/")) {
urlHeader = Helper.getLiveInstanceWithProtocol(ShowAccountActivity.this) + account.getHeader();
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN && !urlHeader.contains("missing.png")) {
if (!urlHeader.contains("missing.png")) {
Glide.with(getApplicationContext())
.asBitmap()
@ -518,7 +525,7 @@ public class ShowAccountActivity extends BaseActivity implements OnPostActionInt
if( account.getMoved_to_account() != null){
TextView account_moved = findViewById(R.id.account_moved);
account_moved.setVisibility(View.VISIBLE);
if( theme == THEME_DARK)
if( theme == THEME_DARK || theme == THEME_BLACK)
changeDrawableColor(ShowAccountActivity.this, R.drawable.ic_card_travel,R.color.dark_icon);
else
changeDrawableColor(ShowAccountActivity.this, R.drawable.ic_card_travel,R.color.black);
@ -532,6 +539,8 @@ public class ShowAccountActivity extends BaseActivity implements OnPostActionInt
account_moved.setMovementMethod(LinkMovementMethod.getInstance());
}
if( account.getAcct().contains("@") )
warning_message.setVisibility(View.VISIBLE);
else
@ -576,10 +585,84 @@ public class ShowAccountActivity extends BaseActivity implements OnPostActionInt
}
});
if ( account.getFields() != null && account.getFields().size() > 0){
HashMap<String, String> fields = account.getFields();
Iterator it = fields.entrySet().iterator();
int i = 1;
LinearLayout fields_container = findViewById(R.id.fields_container);
if( fields_container != null)
fields_container.setVisibility(View.VISIBLE);
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
String label = (String)pair.getKey();
String value = (String)pair.getValue();
LinearLayout field;
TextView labelView;
TextView valueView;
switch(i){
case 1:
field = findViewById(R.id.field1);
labelView = findViewById(R.id.label1);
valueView = findViewById(R.id.value1);
break;
case 2:
field = findViewById(R.id.field2);
labelView = findViewById(R.id.label2);
valueView = findViewById(R.id.value2);
break;
case 3:
field = findViewById(R.id.field3);
labelView = findViewById(R.id.label3);
valueView = findViewById(R.id.value3);
break;
case 4:
field = findViewById(R.id.field4);
labelView = findViewById(R.id.label4);
valueView = findViewById(R.id.value4);
break;
default:
field = findViewById(R.id.field1);
labelView = findViewById(R.id.label1);
valueView = findViewById(R.id.value1);
break;
}
if( field != null && labelView != null && valueView != null) {
switch (theme){
case Helper.THEME_LIGHT:
labelView.setBackgroundColor(ContextCompat.getColor(ShowAccountActivity.this, R.color.notif_light_2));
valueView.setBackgroundColor(ContextCompat.getColor(ShowAccountActivity.this, R.color.notif_light_4));
break;
case Helper.THEME_DARK:
labelView.setBackgroundColor(ContextCompat.getColor(ShowAccountActivity.this, R.color.notif_dark_2));
valueView.setBackgroundColor(ContextCompat.getColor(ShowAccountActivity.this, R.color.notif_dark_4));
break;
case Helper.THEME_BLACK:
labelView.setBackgroundColor(ContextCompat.getColor(ShowAccountActivity.this, R.color.notif_black_2));
valueView.setBackgroundColor(ContextCompat.getColor(ShowAccountActivity.this, R.color.notif_black_4));
break;
default:
labelView.setBackgroundColor(ContextCompat.getColor(ShowAccountActivity.this, R.color.notif_dark_2));
valueView.setBackgroundColor(ContextCompat.getColor(ShowAccountActivity.this, R.color.notif_dark_4));
}
field.setVisibility(View.VISIBLE);
SpannableString spannableValueString = Helper.clickableElementsDescription(ShowAccountActivity.this, value, account.getEmojis());
valueView.setText(spannableValueString, TextView.BufferType.SPANNABLE);
valueView.setMovementMethod(LinkMovementMethod.getInstance());
labelView.setText(label);
}
i++;
// it.remove();
}
}
account_dn.setText(Helper.shortnameToUnicode(account.getDisplay_name(), true));
account_un.setText(String.format("@%s", account.getAcct()));
SpannableString spannableString = Helper.clickableElementsDescription(ShowAccountActivity.this, account.getNote());
account_note.setText(spannableString, TextView.BufferType.SPANNABLE);
SpannableString spannableString = Helper.clickableElementsDescription(ShowAccountActivity.this, account.getNote(), account.getEmojis());
account.setNoteSpan(spannableString);
account.makeEmojisAccount(ShowAccountActivity.this, ShowAccountActivity.this);
account_note.setText(account.getNoteSpan(), TextView.BufferType.SPANNABLE);
account_note.setMovementMethod(LinkMovementMethod.getInstance());
if (tabLayout.getTabAt(0) != null && tabLayout.getTabAt(1) != null && tabLayout.getTabAt(2) != null) {
//noinspection ConstantConditions
@ -827,6 +910,62 @@ public class ShowAccountActivity extends BaseActivity implements OnPostActionInt
}
}
@Override
public void onRetrieveEmojiAccount(Account account) {
account_note.setText(account.getNoteSpan(), TextView.BufferType.SPANNABLE);
if ( account.getFieldsSpan() != null && account.getFieldsSpan().size() > 0){
HashMap<String, SpannableString> fieldsSpan = account.getFieldsSpan();
Iterator it = fieldsSpan.entrySet().iterator();
int i = 1;
LinearLayout fields_container = findViewById(R.id.fields_container);
if( fields_container != null)
fields_container.setVisibility(View.VISIBLE);
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
String label = (String)pair.getKey();
String value = (String)pair.getValue();
LinearLayout field;
TextView labelView;
TextView valueView;
switch(i){
case 1:
field = findViewById(R.id.field1);
labelView = findViewById(R.id.label1);
valueView = findViewById(R.id.value1);
break;
case 2:
field = findViewById(R.id.field2);
labelView = findViewById(R.id.label2);
valueView = findViewById(R.id.value2);
break;
case 3:
field = findViewById(R.id.field3);
labelView = findViewById(R.id.label3);
valueView = findViewById(R.id.value3);
break;
case 4:
field = findViewById(R.id.field4);
labelView = findViewById(R.id.label4);
valueView = findViewById(R.id.value4);
break;
default:
field = findViewById(R.id.field1);
labelView = findViewById(R.id.label1);
valueView = findViewById(R.id.value1);
break;
}
if( field != null && labelView != null && valueView != null) {
field.setVisibility(View.VISIBLE);
valueView.setText(value, TextView.BufferType.SPANNABLE);
valueView.setMovementMethod(LinkMovementMethod.getInstance());
labelView.setText(label);
}
i++;
// it.remove();
}
}
}
public boolean showReplies(){
return show_replies;
}

View File

@ -50,6 +50,7 @@ import android.text.Html;
import android.text.InputFilter;
import android.text.InputType;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
@ -192,6 +193,8 @@ public class TootActivity extends BaseActivity implements OnRetrieveSearcAccount
private String idRedirect;
private String userId, instance;
private Account account;
private ArrayList<String> splitToot;
private int stepSpliToot;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -484,6 +487,17 @@ public class TootActivity extends BaseActivity implements OnRetrieveSearcAccount
toot_it.setEnabled(true);
return;
}
boolean split_toot = sharedpreferences.getBoolean(Helper.SET_AUTOMATICALLY_SPLIT_TOOTS, false);
int split_toot_size = sharedpreferences.getInt(Helper.SET_AUTOMATICALLY_SPLIT_TOOTS_SIZE, Helper.SPLIT_TOOT_SIZE);
String tootContent;
if( !split_toot || (toot_content.getText().toString().trim().length() < split_toot_size)){
tootContent = toot_content.getText().toString().trim();
}else{
splitToot = Helper.splitToots(toot_content.getText().toString().trim(), split_toot_size);
tootContent = splitToot.get(0);
stepSpliToot = 1;
}
Status toot = new Status();
toot.setSensitive(isSensitive);
toot.setMedia_attachments(attachments);
@ -492,7 +506,7 @@ public class TootActivity extends BaseActivity implements OnRetrieveSearcAccount
toot.setVisibility(visibility);
if( tootReply != null)
toot.setIn_reply_to_id(tootReply.getId());
toot.setContent(toot_content.getText().toString().trim());
toot.setContent(tootContent);
new PostStatusAsyncTask(getApplicationContext(), accountReply, toot, TootActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
@ -1549,6 +1563,27 @@ public class TootActivity extends BaseActivity implements OnRetrieveSearcAccount
}
return;
}
final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
boolean split_toot = sharedpreferences.getBoolean(Helper.SET_AUTOMATICALLY_SPLIT_TOOTS, false);
int split_toot_size = sharedpreferences.getInt(Helper.SET_AUTOMATICALLY_SPLIT_TOOTS_SIZE, Helper.SPLIT_TOOT_SIZE);
if( split_toot && (toot_content.getText().toString().trim().length() >= split_toot_size) && stepSpliToot < splitToot.size()){
String tootContent = splitToot.get(stepSpliToot);
stepSpliToot += 1;
Status toot = new Status();
toot.setSensitive(isSensitive);
toot.setMedia_attachments(attachments);
if( toot_cw_content.getText().toString().trim().length() > 0)
toot.setSpoiler_text(toot_cw_content.getText().toString().trim());
toot.setVisibility(visibility);
if( apiResponse.getStatuses() != null)
toot.setIn_reply_to_id(apiResponse.getStatuses().get(0).getId());
toot.setContent(tootContent);
new PostStatusAsyncTask(getApplicationContext(), accountReply, toot, TootActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
return;
}
if(restored != -1){
SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
new StatusStoredDAO(getApplicationContext(), db).remove(restored);
@ -1833,14 +1868,22 @@ public class TootActivity extends BaseActivity implements OnRetrieveSearcAccount
//Sensitive content
toot_sensitive.setChecked(status.isSensitive());
if( status.getSpoiler_text() != null && status.getSpoiler_text().length() > 0 ){
toot_cw_content.setText(status.getSpoiler_text());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
toot_cw_content.setText(Html.fromHtml(status.getSpoiler_text(), Html.FROM_HTML_MODE_LEGACY));
else
//noinspection deprecation
toot_cw_content.setText(Html.fromHtml(status.getSpoiler_text()));
toot_cw_content.setVisibility(View.VISIBLE);
}else {
toot_cw_content.setText("");
toot_cw_content.setVisibility(View.GONE);
}
String content = status.getContent();
toot_content.setText(content);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
toot_content.setText(Html.fromHtml(content, Html.FROM_HTML_MODE_LEGACY));
else
//noinspection deprecation
toot_content.setText(Html.fromHtml(content));
toot_space_left.setText(String.valueOf(toot_content.length()));
toot_content.setSelection(toot_content.getText().length());
switch (status.getVisibility()){

View File

@ -45,6 +45,8 @@ public class PostActionAsyncTask extends AsyncTask<Void, Void, Void> {
private WeakReference<Context> contextReference;
private boolean muteNotifications;
public PostActionAsyncTask(Context context, API.StatusAction apiAction, String targetedId, OnPostActionInterface onPostActionInterface){
this.contextReference = new WeakReference<>(context);
this.listener = onPostActionInterface;

View File

@ -1668,7 +1668,7 @@ public class API {
List<Emojis> emojiList = new ArrayList<>();
try {
JSONArray emojisTag = resobj.getJSONArray("emojis");
if( arrayTag != null){
if( emojisTag != null){
for(int j = 0 ; j < emojisTag.length() ; j++){
JSONObject emojisObj = emojisTag.getJSONObject(j);
Emojis emojis = parseEmojis(emojisObj);
@ -1849,6 +1849,32 @@ public class API {
account.setAvatar_static(resobj.get("avatar_static").toString());
account.setHeader(resobj.get("header").toString());
account.setHeader_static(resobj.get("header_static").toString());
try {
JSONArray fields = resobj.getJSONArray("fields");
HashMap<String, String> fieldsMap = new HashMap<>();
if( fields != null){
for(int j = 0 ; j < fields.length() ; j++){
fieldsMap.put(fields.getJSONObject(j).getString("name"),fields.getJSONObject(j).getString("value"));
}
}
account.setFields(fieldsMap);
}catch (Exception ignored){}
//Retrieves emjis
List<Emojis> emojiList = new ArrayList<>();
try {
JSONArray emojisTag = resobj.getJSONArray("emojis");
if( emojisTag != null){
for(int j = 0 ; j < emojisTag.length() ; j++){
JSONObject emojisObj = emojisTag.getJSONObject(j);
Emojis emojis = parseEmojis(emojisObj);
emojiList.add(emojis);
}
}
account.setEmojis(emojiList);
}catch (Exception e){
account.setEmojis(new ArrayList<>());
}
} catch (JSONException ignored) {}
return account;
}

View File

@ -14,21 +14,40 @@
* see <http://www.gnu.org/licenses>. */
package fr.gouv.etalab.mastodon.client.Entities;
import android.app.Activity;
import android.content.*;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.NonNull;
import android.text.Html;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.TextPaint;
import android.text.style.ClickableSpan;
import android.text.style.ImageSpan;
import android.view.View;
import java.io.Serializable;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.transition.Transition;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import fr.gouv.etalab.mastodon.R;
import fr.gouv.etalab.mastodon.activities.ShowAccountActivity;
import fr.gouv.etalab.mastodon.helper.Helper;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveEmojiAccountInterface;
import static android.text.Html.FROM_HTML_MODE_LEGACY;
/**
* Created by Thomas on 23/04/2017.
@ -50,6 +69,7 @@ public class Account implements Parcelable {
private String following_count_str;
private String statuses_count_str;
private String note;
private SpannableString noteSpan;
private String url;
private String avatar;
private String avatar_static;
@ -62,6 +82,13 @@ public class Account implements Parcelable {
private boolean isMakingAction = false;
private Account moved_to_account;
private boolean muting_notifications;
private int metaDataSize;
private HashMap<String, String> fields = new HashMap<>();
private HashMap<String, SpannableString> fieldsSpan = new HashMap<>();
private List<Emojis> emojis;
private Account account;
public followAction getFollowType() {
return followType;
@ -95,6 +122,25 @@ public class Account implements Parcelable {
this.muting_notifications = muting_notifications;
}
public void setFields(HashMap<String, String> fields) {
this.fields = fields;
}
public HashMap<String, String> getFields() {
return fields;
}
public void setFieldsSpan(HashMap<String, SpannableString> fieldsSpan) {
this.fieldsSpan = fieldsSpan;
}
public HashMap<String, SpannableString> getFieldsSpan() {
return fieldsSpan;
}
public enum followAction{
FOLLOW,
NOT_FOLLOW,
@ -122,9 +168,17 @@ public class Account implements Parcelable {
header_static = in.readString();
token = in.readString();
instance = in.readString();
metaDataSize = in.readInt();
for(int i = 0; i < metaDataSize; i++){
String key = in.readString();
String value = in.readString();
fields.put(key,value);
}
}
public Account(){}
public Account(){
this.account = this;
}
public static final Creator<Account> CREATOR = new Creator<Account>() {
@Override
@ -210,6 +264,14 @@ public class Account implements Parcelable {
this.statuses_count = statuses_count;
}
public SpannableString getNoteSpan() {
return noteSpan;
}
public void setNoteSpan(SpannableString noteSpan) {
this.noteSpan = noteSpan;
}
public String getNote() {
return note;
}
@ -274,6 +336,14 @@ public class Account implements Parcelable {
this.instance = instance;
}
public List<Emojis> getEmojis() {
return emojis;
}
public void setEmojis(List<Emojis> emojis) {
this.emojis = emojis;
}
@Override
public int describeContents() {
return 0;
@ -297,6 +367,14 @@ public class Account implements Parcelable {
dest.writeString(header_static);
dest.writeString(token);
dest.writeString(instance);
metaDataSize = fields.size();
dest.writeInt(metaDataSize);
for (Map.Entry<String, String> entry : fields.entrySet()) {
dest.writeString(entry.getKey());
dest.writeString(entry.getValue());
}
}
public boolean isFollowing() {
@ -362,4 +440,96 @@ public class Account implements Parcelable {
}
return spannableString;
}
public void makeEmojisAccount(final Context context, final OnRetrieveEmojiAccountInterface listener){
if( ((Activity)context).isFinishing() )
return;
SpannableString spannableStringNote = null;
if( account.getNote() != null) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
spannableStringNote = new SpannableString(Html.fromHtml(account.getNote(), FROM_HTML_MODE_LEGACY));
else
//noinspection deprecation
spannableStringNote = new SpannableString(Html.fromHtml(account.getNote()));
}
final List<Emojis> emojis = account.getEmojis();
if( emojis != null && emojis.size() > 0 ) {
final int[] i = {0};
for (final Emojis emoji : emojis) {
final SpannableString finalSpannableStringNote = spannableStringNote;
fields = account.getFields();
Glide.with(context)
.asBitmap()
.load(emoji.getUrl())
/*.listener(new RequestListener<Bitmap>() {
@Override
public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
return false;
}
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) {
i[0]++;
if( i[0] == (emojis.size())) {
if( finalSpannableStringNote != null)
account.setNoteSpan(finalSpannableStringNote);
listener.onRetrieveEmojiAccount(account);
}
return false;
}
})*/
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, Transition<? super Bitmap> transition) {
final String targetedEmoji = ":" + emoji.getShortcode() + ":";
if (finalSpannableStringNote != null && finalSpannableStringNote.toString().contains(targetedEmoji)) {
//emojis can be used several times so we have to loop
for (int startPosition = -1; (startPosition = finalSpannableStringNote.toString().indexOf(targetedEmoji, startPosition + 1)) != -1; startPosition++) {
final int endPosition = startPosition + targetedEmoji.length();
if(endPosition <= finalSpannableStringNote.toString().length() && endPosition >= startPosition)
finalSpannableStringNote.setSpan(
new ImageSpan(context,
Bitmap.createScaledBitmap(resource, (int) Helper.convertDpToPixel(20, context),
(int) Helper.convertDpToPixel(20, context), false)), startPosition,
endPosition, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
}
}
Iterator it = account.getFields().entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
SpannableString fieldSpan = new SpannableString((String)pair.getValue());
if (fieldSpan.toString().contains(targetedEmoji)) {
//emojis can be used several times so we have to loop
for (int startPosition = -1; (startPosition = fieldSpan.toString().indexOf(targetedEmoji, startPosition + 1)) != -1; startPosition++) {
final int endPosition = startPosition + targetedEmoji.length();
if(endPosition <= fieldSpan.toString().length() && endPosition >= startPosition)
fieldSpan.setSpan(
new ImageSpan(context,
Bitmap.createScaledBitmap(resource, (int) Helper.convertDpToPixel(20, context),
(int) Helper.convertDpToPixel(20, context), false)), startPosition,
endPosition, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
}
fieldsSpan.put((String)pair.getKey(), fieldSpan);
}
it.remove();
}
i[0]++;
if( i[0] == (emojis.size())) {
if( finalSpannableStringNote != null)
account.setNoteSpan(finalSpannableStringNote);
listener.onRetrieveEmojiAccount(account);
}
}
});
}
}
}
}

View File

@ -19,6 +19,7 @@ import android.app.Activity;
import android.content.*;
import android.content.Context;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Parcel;
@ -659,6 +660,31 @@ public class Status implements Parcelable{
matcher = Patterns.WEB_URL.matcher(spannableString);
else
matcher = Helper.urlPattern.matcher(spannableString);*/
matcher = Helper.twitterPattern.matcher(spannableString);
while (matcher.find()){
int matchStart = matcher.start(2);
int matchEnd = matcher.end();
final String twittername = spannableString.toString().substring(matchStart, matchEnd);
if( matchStart >= 0 && matchEnd <= spannableString.toString().length() && matchEnd >= matchStart)
spannableString.setSpan(new ClickableSpan() {
@Override
public void onClick(View textView) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://twitter.com/"+twittername.substring(1).replace("@twitter.com","")));
context.startActivity(intent);
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setUnderlineText(false);
}
}, matchStart, matchEnd, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
if( matchStart >= 0 && matchEnd <= spannableString.toString().length() && matchEnd >= matchStart)
spannableString.setSpan(new ForegroundColorSpan(ContextCompat.getColor(context, (theme==Helper.THEME_DARK||theme==Helper.THEME_BLACK)?R.color.mastodonC2:R.color.mastodonC4)), matchStart, matchEnd,
Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
}
matcher = Patterns.WEB_URL.matcher(spannableString);
while (matcher.find()){
int matchStart = matcher.start(1);

View File

@ -429,7 +429,7 @@ public class HttpsConnection {
final int currentProgress = (downloadedFileSize * 100) / contentSize;
((MediaActivity) context).runOnUiThread(new Runnable() {
public void run() {
listener.onUpdateProgress(currentProgress);
listener.onUpdateProgress(currentProgress>0?currentProgress:101);
}
});
}
@ -519,7 +519,7 @@ public class HttpsConnection {
final int currentProgress = (downloadedFileSize * 100) / contentSize;
((MediaActivity) context).runOnUiThread(new Runnable() {
public void run() {
listener.onUpdateProgress(currentProgress);
listener.onUpdateProgress(currentProgress>0?currentProgress:101);
}
});
}
@ -1068,7 +1068,7 @@ public class HttpsConnection {
final int progress = 100 * bytesTransferred / totalSize;
((TootActivity) context).runOnUiThread(new Runnable() {
public void run() {
listener.onUpdateProgress(progress);
listener.onUpdateProgress(progress>0?progress:101);
}
});
request.flush();
@ -1214,7 +1214,7 @@ public class HttpsConnection {
final int progress = 100 * bytesTransferred / totalSize;
((TootActivity)context).runOnUiThread(new Runnable() {
public void run() {
listener.onUpdateProgress(progress);
listener.onUpdateProgress(progress>0?progress:101);
}});
request.flush();
}

View File

@ -34,6 +34,7 @@ import android.widget.TextView;
import java.util.List;
import fr.gouv.etalab.mastodon.R;
import fr.gouv.etalab.mastodon.activities.BaseMainActivity;
import fr.gouv.etalab.mastodon.activities.HashTagActivity;
import fr.gouv.etalab.mastodon.helper.Helper;
import fr.gouv.etalab.mastodon.sqlite.SearchDAO;
@ -138,6 +139,7 @@ public class SearchTootsListAdapter extends BaseAdapter {
if( searches.size() == 0 && textviewNoAction != null && textviewNoAction.getVisibility() == View.GONE)
textviewNoAction.setVisibility(View.VISIBLE);
dialog.dismiss();
((BaseMainActivity)context).removeSearchTab(search);
}
})
.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() {

View File

@ -115,6 +115,7 @@ import fr.gouv.etalab.mastodon.interfaces.OnRetrieveRepliesInterface;
import fr.gouv.etalab.mastodon.sqlite.AccountDAO;
import fr.gouv.etalab.mastodon.sqlite.Sqlite;
import fr.gouv.etalab.mastodon.sqlite.StatusCacheDAO;
import fr.gouv.etalab.mastodon.sqlite.StatusStoredDAO;
import fr.gouv.etalab.mastodon.sqlite.TempMuteDAO;
import static fr.gouv.etalab.mastodon.activities.MainActivity.currentLocale;
@ -144,7 +145,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
private final int COMPACT_STATUS = 3;
private int conversationPosition;
private List<String> timedMute;
private boolean redraft;
public StatusListAdapter(Context context, List<String> timedMute, RetrieveFeedsAsyncTask.Type type, String targetedId, boolean isOnWifi, int behaviorWithAttachments, int translator, List<Status> statuses){
@ -159,6 +160,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
this.targetedId = targetedId;
this.translator = translator;
this.timedMute = timedMute;
redraft = false;
}
public StatusListAdapter(Context context, RetrieveFeedsAsyncTask.Type type, String targetedId, boolean isOnWifi, int behaviorWithAttachments, int translator, List<Status> statuses){
@ -172,6 +174,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
this.type = type;
this.targetedId = targetedId;
this.translator = translator;
redraft = false;
}
public StatusListAdapter(Context context, int position, String targetedId, boolean isOnWifi, int behaviorWithAttachments, int translator, List<Status> statuses){
@ -185,6 +188,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
this.conversationPosition = position;
this.targetedId = targetedId;
this.translator = translator;
redraft = false;
}
public void updateMuted(List<String> timedMute){
@ -391,16 +395,20 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
filter = sharedpreferences.getString(Helper.SET_FILTER_REGEX_PUBLIC, null);
if( filter != null && filter.length() > 0){
Pattern filterPattern = Pattern.compile("(" + filter + ")", Pattern.CASE_INSENSITIVE);
String content;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
content = Html.fromHtml(status.getContent(), Html.FROM_HTML_MODE_LEGACY).toString();
else
//noinspection deprecation
content = Html.fromHtml(status.getContent()).toString();
Matcher matcher = filterPattern.matcher(content);
if(matcher.find())
return HIDDEN_STATUS;
try {
Pattern filterPattern = Pattern.compile("(" + filter + ")", Pattern.CASE_INSENSITIVE);
String content;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
content = Html.fromHtml(status.getContent(), Html.FROM_HTML_MODE_LEGACY).toString();
else
//noinspection deprecation
content = Html.fromHtml(status.getContent()).toString();
Matcher matcher = filterPattern.matcher(content);
if (matcher.find())
return HIDDEN_STATUS;
}catch (Exception e){
return DISPLAYED_STATUS;
}
}
if( type == RetrieveFeedsAsyncTask.Type.HOME) {
if (status.getReblog() != null && !sharedpreferences.getBoolean(Helper.SET_SHOW_BOOSTS, true))
@ -563,7 +571,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
holder.yandex_translate.setVisibility(View.VISIBLE);
break;
default:
holder.yandex_translate.setVisibility(View.VISIBLE);
holder.yandex_translate.setVisibility(View.GONE);
}
//Manages theme for icon colors
@ -1255,6 +1263,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
popup.getMenu().findItem(R.id.action_timed_mute).setVisible(false);
stringArrayConf = context.getResources().getStringArray(R.array.more_action_owner_confirm);
}else {
popup.getMenu().findItem(R.id.action_redraft).setVisible(false);
popup.getMenu().findItem(R.id.action_remove).setVisible(false);
stringArrayConf = context.getResources().getStringArray(R.array.more_action_confirm);
if( type != RetrieveFeedsAsyncTask.Type.HOME){
@ -1266,6 +1275,17 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
AlertDialog.Builder builderInner;
final API.StatusAction doAction;
switch (item.getItemId()) {
case R.id.action_redraft:
builderInner = new AlertDialog.Builder(context);
builderInner.setTitle(stringArrayConf[1]);
redraft = true;
doAction = API.StatusAction.UNSTATUS;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
builderInner.setMessage(Html.fromHtml(status.getContent(), Html.FROM_HTML_MODE_LEGACY));
else
//noinspection deprecation
builderInner.setMessage(Html.fromHtml(status.getContent()));
break;
case R.id.action_remove:
builderInner = new AlertDialog.Builder(context);
builderInner.setTitle(stringArrayConf[0]);
@ -1519,6 +1539,14 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
if(doAction == API.StatusAction.UNSTATUS ){
String targetedId = status.getId();
new PostActionAsyncTask(context, doAction, targetedId, StatusListAdapter.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
if( redraft ){
long id = new StatusStoredDAO(context, db).insertStatus(status, null);
Intent intentToot = new Intent(context, TootActivity.class);
Bundle b = new Bundle();
b.putLong("restored", id);
intentToot.putExtras(b);
context.startActivity(intentToot);
}
}else if(doAction == API.StatusAction.REPORT ){
String comment = null;
if( finalInput.getText() != null)
@ -1960,9 +1988,29 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
private void translateToot(Status status){
//Manages translations
final MyTransL myTransL = MyTransL.getInstance(MyTransL.translatorEngine.YANDEX);
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
int trans = sharedpreferences.getInt(Helper.SET_TRANSLATOR, Helper.TRANS_YANDEX);
MyTransL.translatorEngine et = MyTransL.translatorEngine.YANDEX;
String api_key = null;
if( trans == Helper.TRANS_YANDEX) {
et = MyTransL.translatorEngine.YANDEX;
}else if( trans == Helper.TRANS_DEEPL) {
et = MyTransL.translatorEngine.DEEPL;
}
final MyTransL myTransL = MyTransL.getInstance(et);
myTransL.setObfuscation(true);
myTransL.setYandexAPIKey(Helper.YANDEX_KEY);
if( trans == Helper.TRANS_YANDEX) {
api_key = sharedpreferences.getString(Helper.SET_YANDEX_API_KEY, Helper.YANDEX_KEY);
myTransL.setYandexAPIKey(api_key);
}else if( trans == Helper.TRANS_DEEPL) {
api_key = sharedpreferences.getString(Helper.SET_DEEPL_API_KEY, "");
myTransL.setDeeplAPIKey(api_key);
}
if( !status.isTranslated() ){
String statusToTranslate;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
@ -1987,6 +2035,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
}
@Override
public void onFail(HttpsConnectionException e) {
e.printStackTrace();
Toast.makeText(context, R.string.toast_error_translate, Toast.LENGTH_LONG).show();
}
});

View File

@ -17,6 +17,7 @@ package fr.gouv.etalab.mastodon.fragments;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
@ -37,6 +38,7 @@ import android.widget.RelativeLayout;
import java.util.ArrayList;
import java.util.List;
import fr.gouv.etalab.mastodon.activities.BaseMainActivity;
import fr.gouv.etalab.mastodon.activities.MainActivity;
import fr.gouv.etalab.mastodon.drawers.SearchTootsListAdapter;
import fr.gouv.etalab.mastodon.helper.Helper;
@ -44,6 +46,9 @@ import fr.gouv.etalab.mastodon.sqlite.SearchDAO;
import fr.gouv.etalab.mastodon.sqlite.Sqlite;
import fr.gouv.etalab.mastodon.R;
import static fr.gouv.etalab.mastodon.helper.Helper.INTENT_ACTION;
import static fr.gouv.etalab.mastodon.helper.Helper.SEARCH_KEYWORD;
import static fr.gouv.etalab.mastodon.helper.Helper.SEARCH_TAG;
import static fr.gouv.etalab.mastodon.helper.Helper.changeDrawableColor;
@ -110,19 +115,12 @@ public class DisplaySearchFragment extends Fragment {
return;
}
new SearchDAO(context, db).insertSearch(keyword);
searches.add(keyword);
if( textviewNoAction.getVisibility() == View.VISIBLE)
textviewNoAction.setVisibility(View.GONE);
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
if( theme == Helper.THEME_LIGHT){
changeDrawableColor(context, R.drawable.ic_keyboard_arrow_right,R.color.black);
}else if(theme == Helper.THEME_DARK){
changeDrawableColor(context, R.drawable.ic_keyboard_arrow_right,R.color.dark_text);
}else if(theme == Helper.THEME_BLACK) {
changeDrawableColor(context, R.drawable.ic_keyboard_arrow_right,R.color.dark_text);
}
searchTootsListAdapter.notifyDataSetChanged();
if( getActivity() != null)
getActivity().recreate();
Intent intent = new Intent(context, MainActivity.class);
intent.putExtra(INTENT_ACTION, SEARCH_TAG);
intent.putExtra(SEARCH_KEYWORD, keyword);
startActivity(intent);
}
});
AlertDialog alertDialog = dialogBuilder.create();

View File

@ -33,6 +33,8 @@ import android.provider.DocumentsContract;
import android.provider.MediaStore;
import android.support.v4.app.Fragment;
import android.support.v7.widget.SwitchCompat;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -40,6 +42,7 @@ import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.SeekBar;
@ -57,6 +60,7 @@ import fr.gouv.etalab.mastodon.R;
import static android.app.Activity.RESULT_OK;
import static fr.gouv.etalab.mastodon.helper.Helper.CHANGE_THEME_INTENT;
import static fr.gouv.etalab.mastodon.helper.Helper.INTENT_ACTION;
import static fr.gouv.etalab.mastodon.helper.Helper.SET_YANDEX_API_KEY;
import static fr.gouv.etalab.mastodon.helper.Helper.changeDrawableColor;
@ -71,6 +75,8 @@ public class SettingsFragment extends Fragment {
private static final int ACTIVITY_CHOOSE_FILE = 411;
private TextView set_folder;
int count1, count2, count3 = 0;
private EditText your_api_key;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
@ -170,6 +176,36 @@ public class SettingsFragment extends Fragment {
editor.apply();
}
});
your_api_key = rootView.findViewById(R.id.translation_key);
your_api_key.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
SharedPreferences.Editor editor = sharedpreferences.edit();
int translatore = sharedpreferences.getInt(Helper.SET_TRANSLATOR, Helper.TRANS_YANDEX);
String store = null;
if( translatore == Helper.TRANS_YANDEX)
store = Helper.SET_YANDEX_API_KEY;
else if( translatore == Helper.TRANS_DEEPL)
store = Helper.SET_DEEPL_API_KEY;
if( store != null)
if( s != null && s.length() > 0)
editor.putString(store, s.toString().trim());
else
editor.putString(store, null);
editor.apply();
}
});
boolean notif_validation_fav = sharedpreferences.getBoolean(Helper.SET_NOTIF_VALIDATION_FAV, false);
final CheckBox set_share_validation_fav = rootView.findViewById(R.id.set_share_validation_fav);
@ -635,6 +671,19 @@ public class SettingsFragment extends Fragment {
}
});
boolean split_toot = sharedpreferences.getBoolean(Helper.SET_AUTOMATICALLY_SPLIT_TOOTS, false);
final CheckBox set_split_toot = rootView.findViewById(R.id.set_automatically_split_toot);
set_split_toot.setChecked(split_toot);
set_split_toot.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean(Helper.SET_AUTOMATICALLY_SPLIT_TOOTS, set_split_toot.isChecked());
editor.apply();
}
});
//Translators
final Spinner translation_layout_spinner = rootView.findViewById(R.id.translation_layout_spinner);
ArrayAdapter<CharSequence> adapterTrans = ArrayAdapter.createFromResource(getContext(),
@ -645,11 +694,20 @@ public class SettingsFragment extends Fragment {
switch (sharedpreferences.getInt(Helper.SET_TRANSLATOR, Helper.TRANS_YANDEX)){
case Helper.TRANS_YANDEX:
positionSpinnerTrans = 0;
your_api_key.setVisibility(View.VISIBLE);
your_api_key.setText(sharedpreferences.getString(Helper.SET_YANDEX_API_KEY, ""));
break;
case Helper.TRANS_DEEPL:
positionSpinnerTrans = 1;
your_api_key.setVisibility(View.VISIBLE);
your_api_key.setText(sharedpreferences.getString(Helper.SET_DEEPL_API_KEY, ""));
break;
case Helper.TRANS_NONE:
positionSpinnerTrans = 1;
positionSpinnerTrans = 2;
your_api_key.setVisibility(View.GONE);
break;
default:
your_api_key.setVisibility(View.VISIBLE);
positionSpinnerTrans = 0;
}
translation_layout_spinner.setSelection(positionSpinnerTrans);
@ -660,10 +718,21 @@ public class SettingsFragment extends Fragment {
SharedPreferences.Editor editor = sharedpreferences.edit();
switch (position){
case 0:
your_api_key.setVisibility(View.VISIBLE);
editor.putInt(Helper.SET_TRANSLATOR, Helper.TRANS_YANDEX);
editor.apply();
if( sharedpreferences.getString(Helper.SET_DEEPL_API_KEY, null) != null)
your_api_key.setText(sharedpreferences.getString(Helper.SET_DEEPL_API_KEY, ""));
break;
case 1:
your_api_key.setVisibility(View.VISIBLE);
editor.putInt(Helper.SET_TRANSLATOR, Helper.TRANS_DEEPL);
editor.apply();
if( sharedpreferences.getString(SET_YANDEX_API_KEY, null) != null)
your_api_key.setText(sharedpreferences.getString(SET_YANDEX_API_KEY, null));
break;
case 2:
your_api_key.setVisibility(View.GONE);
set_trans_forced.isChecked();
editor.putBoolean(Helper.SET_TRANS_FORCED, false);
editor.putInt(Helper.SET_TRANSLATOR, Helper.TRANS_NONE);

View File

@ -33,6 +33,7 @@ import android.provider.MediaStore;
import android.provider.OpenableColumns;
import android.support.annotation.Nullable;
import android.support.customtabs.CustomTabsIntent;
import android.support.design.widget.TabLayout;
import android.support.media.ExifInterface;
import android.support.v4.app.FragmentActivity;
import android.support.v4.graphics.drawable.DrawableCompat;
@ -66,10 +67,12 @@ import android.support.v4.app.NotificationCompat;
import android.support.v4.app.NotificationManagerCompat;
import android.support.v4.content.ContextCompat;
import android.text.Html;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.TextPaint;
import android.text.style.ClickableSpan;
import android.text.style.ImageSpan;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.Patterns;
@ -137,6 +140,7 @@ import java.util.regex.Pattern;
import fr.gouv.etalab.mastodon.BuildConfig;
import fr.gouv.etalab.mastodon.R;
import fr.gouv.etalab.mastodon.activities.BaseMainActivity;
import fr.gouv.etalab.mastodon.activities.HashTagActivity;
import fr.gouv.etalab.mastodon.activities.LoginActivity;
import fr.gouv.etalab.mastodon.activities.MainActivity;
@ -154,6 +158,7 @@ import fr.gouv.etalab.mastodon.client.Entities.Status;
import fr.gouv.etalab.mastodon.client.Entities.Tag;
import fr.gouv.etalab.mastodon.client.Entities.Version;
import fr.gouv.etalab.mastodon.sqlite.AccountDAO;
import fr.gouv.etalab.mastodon.sqlite.SearchDAO;
import fr.gouv.etalab.mastodon.sqlite.Sqlite;
import static android.content.Context.DOWNLOAD_SERVICE;
@ -206,7 +211,7 @@ public class Helper {
public static final String SHOULD_CONTINUE_STREAMING = "should_continue_streaming";
public static final String SHOULD_CONTINUE_STREAMING_FEDERATED = "should_continue_streaming_federated";
public static final String SHOULD_CONTINUE_STREAMING_LOCAL = "should_continue_streaming_local";
public static final String SEARCH_KEYWORD = "search_keyword";
public static final String CLIP_BOARD = "clipboard";
//Notifications
public static final int NOTIFICATION_INTENT = 1;
@ -215,6 +220,7 @@ public class Helper {
public static final int CHANGE_USER_INTENT = 4;
public static final int ADD_USER_INTENT = 5;
public static final int BACKUP_INTENT = 6;
public static final int SEARCH_TAG = 7;
//Settings
public static final String SET_TOOTS_PER_PAGE = "set_toots_per_page";
public static final String SET_ACCOUNTS_PER_PAGE = "set_accounts_per_page";
@ -258,6 +264,7 @@ public class Helper {
public static final int LED_COLOUR = 0;
public static final int TRANS_YANDEX = 0;
public static final int TRANS_DEEPL = 1;
public static final int TRANS_NONE = 2;
public static final String SET_TRANS_FORCED = "set_trans_forced";
@ -292,6 +299,8 @@ public class Helper {
public static final String SET_DISPLAY_GLOBAL = "set_display_global";
public static final String SET_ALLOW_CROSS_ACTIONS = "set_allow_cross_actions";
public static final String SET_DISPLAY_BOOST_COUNT = "set_display_boost_count";
public static final String SET_AUTOMATICALLY_SPLIT_TOOTS = "set_automatically_split_toots";
public static final String SET_AUTOMATICALLY_SPLIT_TOOTS_SIZE = "set_automatically_split_toots_size";
//End points
public static final String EP_AUTHORIZE = "/oauth/authorize";
@ -306,6 +315,7 @@ public class Helper {
//Refresh job
public static final int MINUTES_BETWEEN_NOTIFICATIONS_REFRESH = 15;
public static final int MINUTES_BETWEEN_HOME_TIMELINE = 30;
public static final int SPLIT_TOOT_SIZE = 500;
//Translate wait time
public static final String LAST_TRANSLATION_TIME = "last_translation_time";
@ -323,6 +333,8 @@ public class Helper {
//User agent
public static final String USER_AGENT = "Mastalab/"+ BuildConfig.VERSION_NAME + " Android/"+ Build.VERSION.RELEASE;
public static final String SET_YANDEX_API_KEY = "set_yandex_api_key";
public static final String SET_DEEPL_API_KEY = "set_deepl_api_key";
private static boolean menuAccountsOpened = false;
@ -336,6 +348,7 @@ public class Helper {
Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
public static final Pattern hashtagPattern = Pattern.compile("(#[\\w_À-ú-]+)");
public static final Pattern twitterPattern = Pattern.compile("((@[\\w]+)@twitter\\.com)");
private static final Pattern mentionPattern = Pattern.compile("(@[\\w]+)");
@ -577,7 +590,7 @@ public class Helper {
@Override
public void onClick(View v) {
tvDate.setText(Helper.shortDateTime(context, date));
tvDate.setText(Helper.dateDiffFull(date));
new CountDownTimer((5 * 1000), 1000) {
@ -1314,7 +1327,7 @@ public class Helper {
* @param fullContent String, should be the st
* @return TextView
*/
public static SpannableString clickableElementsDescription(final Context context, String fullContent) {
public static SpannableString clickableElementsDescription(final Context context, String fullContent, List<Emojis> emojis) {
SpannableString spannableString;
fullContent = Helper.shortnameToUnicode(fullContent, true);
@ -2145,4 +2158,83 @@ public class Helper {
Log.v(Helper.TAG, content);
}
}
public static void addSearchTag(Context context, TabLayout tableLayout, BaseMainActivity.PagerAdapter pagerAdapter){
SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
List<String> searches = new SearchDAO(context, db).getAllSearch();
int countInitialTab = ((BaseMainActivity) context).countPage;
int allTabCount = tableLayout.getTabCount();
if( allTabCount > countInitialTab){
while(allTabCount > countInitialTab){
removeTab(tableLayout, pagerAdapter, allTabCount-1);
allTabCount -=1;
}
}
if( searches != null) {
for (String search : searches) {
addTab(tableLayout, pagerAdapter, search);
}
if( searches.size() > 0 ){
tableLayout.setTabGravity(TabLayout.GRAVITY_FILL);
tableLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
}
}
}
public static void removeSearchTag(String keyword, TabLayout tableLayout, BaseMainActivity.PagerAdapter pagerAdapter){
int selection = -1;
for(int i = 0; i < tableLayout.getTabCount() ; i++ ){
if( tableLayout.getTabAt(i).getText() != null && tableLayout.getTabAt(i).getText().equals(keyword)) {
selection = i;
break;
}
}
if( selection != -1)
removeTab(tableLayout, pagerAdapter, selection);
}
private static void removeTab(TabLayout tableLayout, BaseMainActivity.PagerAdapter pagerAdapter, int position) {
if (tableLayout.getTabCount() >= position) {
tableLayout.removeTabAt(position);
pagerAdapter.removeTabPage();
}
}
private static void addTab(TabLayout tableLayout, BaseMainActivity.PagerAdapter pagerAdapter, String title) {
tableLayout.addTab(tableLayout.newTab().setText(title));
pagerAdapter.addTabPage(title);
}
/**
* Allows to split the toot by dot "." for sentences - adds number at the end automatically
* @param content String initial content
* @param maxChars int the max chars per toot (minus 10 to write the page: 1/x, 2/x etc.)
* @return ArrayList<String> split toot
*/
public static ArrayList<String> splitToots(String content, int maxChars){
String[] splitContent = content.split("\\.");
ArrayList<String> splitToot = new ArrayList<>();
StringBuilder tempContent = new StringBuilder(splitContent[0]);
for(int i= 0 ; i < splitContent.length ; i++){
if( i < (splitContent.length-1) && (tempContent.length() + splitContent[i+1].length()) < (maxChars-10)) {
tempContent.append(".").append(splitContent[i + 1]);
}else {
splitToot.add(tempContent.toString());
if( i < (splitContent.length-1) )
tempContent = new StringBuilder(splitContent[i+1]);
}
}
int i=1;
ArrayList<String> reply = new ArrayList<>();
for(String newContent : splitToot){
reply.add((i-1), newContent + " - " + i + "/" + splitToot.size());
i++;
}
return reply;
}
}

View File

@ -0,0 +1,26 @@
/* Copyright 2018 Thomas Schneider
*
* This file is a part of Mastalab
*
* This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation; either version 3 of the
* License, or (at your option) any later version.
*
* Mastalab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details.
*
* You should have received a copy of the GNU General Public License along with Mastalab; if not,
* see <http://www.gnu.org/licenses>. */
package fr.gouv.etalab.mastodon.interfaces;
import fr.gouv.etalab.mastodon.client.Entities.Account;
/**
* Created by Thomas on 15/08/2018.
* Interface when retrieving emojis for accounts
*/
public interface OnRetrieveEmojiAccountInterface {
void onRetrieveEmojiAccount(Account account);
}

View File

@ -215,6 +215,114 @@
android:maxLines="4"
android:autoLink="web"
android:layout_height="wrap_content" />
<!-- Fields container -->
<LinearLayout
android:visibility="gone"
android:id="@+id/fields_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!-- Fields 1 to 4 -->
<LinearLayout
android:id="@+id/field1"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/label1"
android:padding="5dp"
android:minHeight="20dp"
android:layout_gravity="center"
android:gravity="center"
android:textSize="16sp"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent" />
<TextView
android:id="@+id/value1"
android:layout_width="0dp"
android:layout_gravity="center"
android:gravity="center"
android:layout_weight="2"
android:layout_height="match_parent" />
</LinearLayout>
<LinearLayout
android:id="@+id/field2"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/label2"
android:padding="5dp"
android:minHeight="20dp"
android:layout_width="0dp"
android:textSize="16sp"
android:layout_gravity="center"
android:gravity="center"
android:layout_weight="1"
android:layout_height="match_parent" />
<TextView
android:id="@+id/value2"
android:layout_width="0dp"
android:layout_gravity="center"
android:gravity="center"
android:layout_weight="2"
android:layout_height="match_parent" />
</LinearLayout>
<LinearLayout
android:id="@+id/field3"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/label3"
android:padding="5dp"
android:minHeight="20dp"
android:textSize="16sp"
android:layout_gravity="center"
android:gravity="center"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent" />
<TextView
android:id="@+id/value3"
android:layout_gravity="center"
android:gravity="center"
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="match_parent" />
</LinearLayout>
<LinearLayout
android:id="@+id/field4"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/label4"
android:padding="5dp"
android:minHeight="20dp"
android:textSize="16sp"
android:layout_gravity="center"
android:gravity="center"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent" />
<TextView
android:id="@+id/value4"
android:layout_gravity="center"
android:gravity="center"
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="match_parent" />
</LinearLayout>
</LinearLayout>
<!-- End Fields container -->
</LinearLayout>
</RelativeLayout>

View File

@ -178,6 +178,12 @@
android:text="@string/set_share_details"
android:layout_height="wrap_content" />
<CheckBox
android:id="@+id/set_automatically_split_toot"
android:layout_width="wrap_content"
android:text="@string/set_automatically_split_toot"
android:layout_height="wrap_content" />
<!-- Resize pictures -->
<LinearLayout
android:layout_marginTop="10dp"
@ -197,29 +203,39 @@
android:layout_height="wrap_content" />
</LinearLayout>
<!-- TABS Layout -->
<!-- Translation engine -->
<LinearLayout
android:layout_marginTop="10dp"
android:id="@+id/translation_layout_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_gravity="center_vertical"
android:layout_width="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/about_yandex"/>
<Spinner
android:id="@+id/translation_layout_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<CheckBox
android:layout_marginLeft="10dp"
android:layout_marginStart="10dp"
android:id="@+id/set_trans_forced"
android:layout_width="wrap_content"
android:layout_gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_gravity="center_vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/about_yandex"/>
<Spinner
android:id="@+id/translation_layout_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<CheckBox
android:layout_marginLeft="10dp"
android:layout_marginStart="10dp"
android:id="@+id/set_trans_forced"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<EditText
android:hint="@string/your_api_key"
android:id="@+id/translation_key"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>

View File

@ -211,6 +211,114 @@
android:layout_width="match_parent"
android:autoLink="web"
android:layout_height="wrap_content" />
<!-- Fields container -->
<LinearLayout
android:visibility="gone"
android:id="@+id/fields_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!-- Fields 1 to 4 -->
<LinearLayout
android:id="@+id/field1"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/label1"
android:padding="5dp"
android:minHeight="20dp"
android:layout_gravity="center"
android:gravity="center"
android:textSize="16sp"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent" />
<TextView
android:id="@+id/value1"
android:layout_width="0dp"
android:layout_gravity="center"
android:gravity="center"
android:layout_weight="2"
android:layout_height="match_parent" />
</LinearLayout>
<LinearLayout
android:id="@+id/field2"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/label2"
android:padding="5dp"
android:minHeight="20dp"
android:layout_width="0dp"
android:textSize="16sp"
android:layout_gravity="center"
android:gravity="center"
android:layout_weight="1"
android:layout_height="match_parent" />
<TextView
android:id="@+id/value2"
android:layout_width="0dp"
android:layout_gravity="center"
android:gravity="center"
android:layout_weight="2"
android:layout_height="match_parent" />
</LinearLayout>
<LinearLayout
android:id="@+id/field3"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/label3"
android:padding="5dp"
android:minHeight="20dp"
android:textSize="16sp"
android:layout_gravity="center"
android:gravity="center"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent" />
<TextView
android:id="@+id/value3"
android:layout_gravity="center"
android:gravity="center"
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="match_parent" />
</LinearLayout>
<LinearLayout
android:id="@+id/field4"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/label4"
android:padding="5dp"
android:minHeight="20dp"
android:textSize="16sp"
android:layout_gravity="center"
android:gravity="center"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent" />
<TextView
android:id="@+id/value4"
android:layout_gravity="center"
android:gravity="center"
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="match_parent" />
</LinearLayout>
</LinearLayout>
<!-- End Fields container -->
</LinearLayout>
</RelativeLayout>

View File

@ -382,6 +382,7 @@
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_marginBottom="10dp"
android:baselineAligned="false">
<RelativeLayout
android:layout_width="0dp"
@ -576,7 +577,9 @@
</LinearLayout>
<ImageView
android:layout_gravity="center_horizontal"
android:layout_marginTop="5dp"
android:gravity="center_vertical"
android:layout_marginLeft="20dp"
android:layout_marginStart="20dp"
android:id="@+id/new_element"
android:visibility="gone"
android:src="@drawable/ic_fiber_new"

View File

@ -77,6 +77,8 @@
android:text="@string/set_preview_reply"
android:layout_height="wrap_content" />
<LinearLayout
android:id="@+id/set_preview_reply_pp_container"
android:layout_width="match_parent"
@ -177,6 +179,12 @@
android:text="@string/set_share_details"
android:layout_height="wrap_content" />
<CheckBox
android:id="@+id/set_automatically_split_toot"
android:layout_width="wrap_content"
android:text="@string/set_automatically_split_toot"
android:layout_height="wrap_content" />
<!-- Resize pictures -->
<LinearLayout
android:layout_marginTop="10dp"
@ -202,21 +210,32 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_gravity="center_vertical"
android:layout_width="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/about_yandex"/>
<Spinner
android:id="@+id/translation_layout_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<CheckBox
android:layout_marginLeft="10dp"
android:layout_marginStart="10dp"
android:id="@+id/set_trans_forced"
android:layout_width="wrap_content"
android:layout_gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_gravity="center_vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/about_yandex"/>
<Spinner
android:id="@+id/translation_layout_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<CheckBox
android:layout_marginLeft="10dp"
android:layout_marginStart="10dp"
android:id="@+id/set_trans_forced"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<EditText
android:hint="@string/your_api_key"
android:id="@+id/translation_key"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>

View File

@ -19,8 +19,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_vertical">
>
<ImageView
android:id="@+id/tab_icon"
android:layout_centerInParent="true"
@ -29,18 +28,19 @@
android:layout_height="25dp"
tools:ignore="ContentDescription" />
<TextView
android:id="@+id/tab_counter"
android:visibility="gone"
android:layout_marginLeft="5dp"
android:layout_marginStart="5dp"
android:id="@+id/tab_counter"
android:layout_alignRight="@+id/tab_icon"
android:layout_alignEnd="@+id/tab_icon"
android:paddingLeft="2dp"
android:paddingRight="2dp"
android:layout_alignParentEnd="true"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:gravity="center"
android:textSize="12sp"
android:textColor="@color/mastodonC1"
android:background="@drawable/shape_counter"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>

View File

@ -17,6 +17,10 @@
android:id="@+id/action_report"
android:title="@string/more_action_3"
app:showAsAction="never" />
<item
android:id="@+id/action_redraft"
android:title="@string/more_action_9"
app:showAsAction="never" />
<item
android:id="@+id/action_remove"
android:title="@string/more_action_4"

View File

@ -118,6 +118,7 @@
<string name="more_action_6">Share</string>
<string name="more_action_7">Mention</string>
<string name="more_action_8">Timed mute</string>
<string name="more_action_9">Delete &amp; re-draft</string>
<string-array name="more_action_confirm">
<item>Mute this account?</item>
<item>Block this account?</item>
@ -125,6 +126,7 @@
</string-array>
<string-array name="more_action_owner_confirm">
<item>Remove this toot?</item>
<item>Delete &amp; re-draft this toot?</item>
</string-array>
<plurals name="preview_replies">
<item quantity="one">%d reply</item>
@ -165,7 +167,7 @@
<item>Post to followers only</item>
<item>Post to mentioned users only</item>
</string-array>
<string name="no_draft">No draft!</string>
<string name="no_draft">No drafts!</string>
<string name="choose_toot">Choose a toot</string>
<string name="choose_accounts">Choose an account</string>
<string name="select_accounts">Select some accounts</string>
@ -306,6 +308,7 @@
<string name="set_preview_reply_pp">Display profile pictures?</string>
<string name="set_multiaccount_actions">Allow interactions between accounts?</string>
<string name="set_fit_preview">Fit preview images</string>
<string name="set_automatically_split_toot">Automatically split toots over 500 chars in replies</string>
<string name="note_no_space">You have reached the 160 characters allowed!</string>
<string name="username_no_space">You have reached the 30 characters allowed!</string>
<string name="settings_title_hour">Time slot for notifications:</string>
@ -328,8 +331,10 @@
</string-array>
<string-array name="settings_translation">
<item>Yandex</item>
<item>DeepL</item>
<item>No</item>
</string-array>
<string name="your_api_key">Your API key, you can leave blank for Yandex</string>
<string-array name="settings_theme">
<item>Dark</item>
<item>Light</item>
@ -489,4 +494,5 @@
<string name="set_compact_mode">Compact mode</string>
<string name="set_share_details">Add toot details when sharing</string>
<string name="support_the_app_on_liberapay">Support the app on Liberapay</string>
<string name="alert_regex">There is an error in the regular expression!</string>
</resources>

View File

@ -118,6 +118,7 @@
<string name="more_action_6">شارك</string>
<string name="more_action_7">أذكر</string>
<string name="more_action_8">فترة الكتم</string>
<string name="more_action_9">Delete &amp; re-draft</string>
<string-array name="more_action_confirm">
<item>هل تود كتم هذا الحساب ؟</item>
<item>هل تود حجب هذا الحساب ؟</item>
@ -125,6 +126,7 @@
</string-array>
<string-array name="more_action_owner_confirm">
<item>هل تود حذف هذا التبويق ؟</item>
<item>Delete &amp; re-draft this toot?</item>
</string-array>
<plurals name="preview_replies">
<item quantity="zero">%d replies</item>
@ -188,7 +190,7 @@
<string name="about_thekinrar">البحث عن مثيلات الخوادم :</string>
<string name="about_thekinrar_action">instances.social</string>
<string name="thanks_text_logo">مصمم الأيقونات :</string>
<string name="thanks_text_banner">Banner designer:</string>
<string name="thanks_text_banner">مصمم الشعار :</string>
<!-- Conversation -->
<string name="conversation">محادثة</string>
<!-- Accounts -->
@ -317,7 +319,8 @@
<string name="set_preview_reply">إظهار عدد الردود على الخيط الرئيسي</string>
<string name="set_preview_reply_pp">هل تود عرض الصور الرمزية للحسابات ؟</string>
<string name="set_multiaccount_actions">السماح للتفاعلات بين الحسابات ؟</string>
<string name="set_fit_preview">Fit preview images</string>
<string name="set_fit_preview">تكافؤ معاينة الصور</string>
<string name="set_automatically_split_toot">Automatically split toots over 500 chars in replies</string>
<string name="note_no_space">لقد بلغت حد الـ 160 حرف المسموح به !</string>
<string name="username_no_space">لقد بلغت حد الـ 30 حرف المسموح به !</string>
<string name="settings_title_hour">الفترة المتاحة للإخطارات :</string>
@ -341,11 +344,13 @@
<string-array name="settings_translation">
<item>يانديكس</item>
<item>لا</item>
<item>No</item>
</string-array>
<string name="your_api_key">Your API key, you can leave blank for Yandex</string>
<string-array name="settings_theme">
<item>Dark</item>
<item>Light</item>
<item>Black</item>
<item>مظلمة</item>
<item>فاتحة</item>
<item>سوداء</item>
</string-array>
<string-array name="settings_resize_picture">
<item>لا</item>
@ -493,8 +498,9 @@
<string name="poxy_port">المنفذ</string>
<string name="poxy_login">إسم المستخدم</string>
<string name="poxy_password">كلمة السر</string>
<string name="set_theme">Theme:</string>
<string name="set_compact_mode">Compact mode</string>
<string name="set_share_details">Add toot details when sharing</string>
<string name="support_the_app_on_liberapay">Support the app on Liberapay</string>
<string name="set_theme">السمة :</string>
<string name="set_compact_mode">الوضع المختصر</string>
<string name="set_share_details">إضافة التفاصيل عند مشاركة تبويق ما</string>
<string name="support_the_app_on_liberapay">إدعم التطبيق على ليبيراباي</string>
<string name="alert_regex">هناك خطأ في العبارة المنطقية !</string>
</resources>

View File

@ -118,6 +118,7 @@
<string name="more_action_6">Comparteix</string>
<string name="more_action_7">Menciona</string>
<string name="more_action_8">Silencia temporalment</string>
<string name="more_action_9">Delete &amp; re-draft</string>
<string-array name="more_action_confirm">
<item>Vols silenciar aquest compte?</item>
<item>Vols blocar aquest compte?</item>
@ -125,6 +126,7 @@
</string-array>
<string-array name="more_action_owner_confirm">
<item>Vols suprimir aquest toot?</item>
<item>Delete &amp; re-draft this toot?</item>
</string-array>
<plurals name="preview_replies">
<item quantity="one">%d reply</item>
@ -165,7 +167,7 @@
<item>Post to followers only</item>
<item>Post to mentioned users only</item>
</string-array>
<string name="no_draft">No draft!</string>
<string name="no_draft">No drafts!</string>
<string name="choose_toot">Choose a toot</string>
<string name="choose_accounts">Choose an account</string>
<string name="select_accounts">Select some accounts</string>
@ -306,6 +308,7 @@
<string name="set_preview_reply_pp">Display profile pictures?</string>
<string name="set_multiaccount_actions">Allow interactions between accounts?</string>
<string name="set_fit_preview">Fit preview images</string>
<string name="set_automatically_split_toot">Automatically split toots over 500 chars in replies</string>
<string name="note_no_space">You have reached the 160 characters allowed!</string>
<string name="username_no_space">You have reached the 30 characters allowed!</string>
<string name="settings_title_hour">Time slot for notifications:</string>
@ -329,7 +332,9 @@
<string-array name="settings_translation">
<item>Yandex</item>
<item>No</item>
<item>No</item>
</string-array>
<string name="your_api_key">Your API key, you can leave blank for Yandex</string>
<string-array name="settings_theme">
<item>Dark</item>
<item>Light</item>
@ -489,4 +494,5 @@
<string name="set_compact_mode">Compact mode</string>
<string name="set_share_details">Add toot details when sharing</string>
<string name="support_the_app_on_liberapay">Support the app on Liberapay</string>
<string name="alert_regex">There is an error in the regular expression!</string>
</resources>

View File

@ -118,6 +118,7 @@
<string name="more_action_6">Share</string>
<string name="more_action_7">Mention</string>
<string name="more_action_8">Timed mute</string>
<string name="more_action_9">Delete &amp; re-draft</string>
<string-array name="more_action_confirm">
<item>Mute this account?</item>
<item>Block this account?</item>
@ -125,6 +126,7 @@
</string-array>
<string-array name="more_action_owner_confirm">
<item>Remove this toot?</item>
<item>Delete &amp; re-draft this toot?</item>
</string-array>
<plurals name="preview_replies">
<item quantity="one">%d reply</item>
@ -167,7 +169,7 @@
<item>Post to followers only</item>
<item>Post to mentioned users only</item>
</string-array>
<string name="no_draft">No draft!</string>
<string name="no_draft">No drafts!</string>
<string name="choose_toot">Choose a toot</string>
<string name="choose_accounts">Choose an account</string>
<string name="select_accounts">Select some accounts</string>
@ -312,6 +314,7 @@
<string name="set_preview_reply_pp">Display profile pictures?</string>
<string name="set_multiaccount_actions">Allow interactions between accounts?</string>
<string name="set_fit_preview">Fit preview images</string>
<string name="set_automatically_split_toot">Automatically split toots over 500 chars in replies</string>
<string name="note_no_space">You have reached the 160 characters allowed!</string>
<string name="username_no_space">You have reached the 30 characters allowed!</string>
<string name="settings_title_hour">Time slot for notifications:</string>
@ -334,8 +337,10 @@
</string-array>
<string-array name="settings_translation">
<item>Yandex</item>
<item>DeepL</item>
<item>No</item>
</string-array>
<string name="your_api_key">Your API key, you can leave blank for Yandex</string>
<string-array name="settings_theme">
<item>Dark</item>
<item>Light</item>
@ -495,4 +500,5 @@
<string name="set_compact_mode">Compact mode</string>
<string name="set_share_details">Add toot details when sharing</string>
<string name="support_the_app_on_liberapay">Support the app on Liberapay</string>
<string name="alert_regex">There is an error in the regular expression!</string>
</resources>

View File

@ -118,6 +118,7 @@
<string name="more_action_6">Share</string>
<string name="more_action_7">Mention</string>
<string name="more_action_8">Timed mute</string>
<string name="more_action_9">Delete &amp; re-draft</string>
<string-array name="more_action_confirm">
<item>Mute this account?</item>
<item>Block this account?</item>
@ -125,6 +126,7 @@
</string-array>
<string-array name="more_action_owner_confirm">
<item>Remove this toot?</item>
<item>Delete &amp; re-draft this toot?</item>
</string-array>
<plurals name="preview_replies">
<item quantity="one">%d reply</item>
@ -165,7 +167,7 @@
<item>Post to followers only</item>
<item>Post to mentioned users only</item>
</string-array>
<string name="no_draft">No draft!</string>
<string name="no_draft">No drafts!</string>
<string name="choose_toot">Choose a toot</string>
<string name="choose_accounts">Choose an account</string>
<string name="select_accounts">Select some accounts</string>
@ -306,6 +308,7 @@
<string name="set_preview_reply_pp">Display profile pictures?</string>
<string name="set_multiaccount_actions">Allow interactions between accounts?</string>
<string name="set_fit_preview">Fit preview images</string>
<string name="set_automatically_split_toot">Automatically split toots over 500 chars in replies</string>
<string name="note_no_space">You have reached the 160 characters allowed!</string>
<string name="username_no_space">You have reached the 30 characters allowed!</string>
<string name="settings_title_hour">Time slot for notifications:</string>
@ -328,8 +331,10 @@
</string-array>
<string-array name="settings_translation">
<item>Yandex</item>
<item>DeepL</item>
<item>No</item>
</string-array>
<string name="your_api_key">Your API key, you can leave blank for Yandex</string>
<string-array name="settings_theme">
<item>Dark</item>
<item>Light</item>
@ -489,4 +494,5 @@
<string name="set_compact_mode">Compact mode</string>
<string name="set_share_details">Add toot details when sharing</string>
<string name="support_the_app_on_liberapay">Support the app on Liberapay</string>
<string name="alert_regex">There is an error in the regular expression!</string>
</resources>

View File

@ -33,7 +33,7 @@
<string name="no_result">Kein Ergebnis!</string>
<string name="instance">Instanz</string>
<string name="instance_example">Instanz: mastodon.social</string>
<string name="toast_account_changed" formatted="false">Funktioniert jetzt mit dem Konto %1$s</string>
<string name="toast_account_changed" formatted="false">Konto %1$s wird verwendet</string>
<string name="add_account">Konto hinzufügen</string>
<string name="clipboard">Der Inhalt des Toots wurde in die Zwischenablage kopiert</string>
<string name="change">Ändern</string>
@ -61,7 +61,7 @@
<string name="drafts">Entwürfe</string>
<string name="new_data">Neue Beiträge sind verfügbar! Jetzt anzeigen?</string>
<string name="favourite">Favoriten</string>
<string name="follow">Neue Anhänger</string>
<string name="follow">Neue Folgende</string>
<string name="mention">Erwähnungen</string>
<string name="reblog">Geteilte Beiträge</string>
<string name="show_boosts">Geteilte Beiträge anzeigen</string>
@ -118,6 +118,7 @@
<string name="more_action_6">Teilen</string>
<string name="more_action_7">Erwähnen</string>
<string name="more_action_8">Zeitlich begrenzt stummschalten</string>
<string name="more_action_9">Delete &amp; re-draft</string>
<string-array name="more_action_confirm">
<item>Nutzer stummschalten?</item>
<item>Diesen Nutzer blockieren?</item>
@ -125,6 +126,7 @@
</string-array>
<string-array name="more_action_owner_confirm">
<item>Entferne diesen Toot?</item>
<item>Delete &amp; re-draft this toot?</item>
</string-array>
<plurals name="preview_replies">
<item quantity="one">%d Antwort</item>
@ -162,7 +164,7 @@
<string-array name="toot_visibility">
<item>Absenden an öffentliche Zeitleiste</item>
<item>Nicht an öffentliche Zeitleiste absenden</item>
<item>Nur an Follower senden</item>
<item>Nur an Folgende senden</item>
<item>Nur an erwähnten Nutzer absenden</item>
</string-array>
<string name="no_draft">Keine Entwürfe vorhanden!</string>
@ -192,9 +194,9 @@
<string name="no_follow_request">Keine Folgen-Anfrage</string>
<string name="status_cnt">Toots \n
%1$s</string>
<string name="following_cnt">Following \n
<string name="following_cnt">Folgt \n
%1$s</string>
<string name="followers_cnt">Followers \n
<string name="followers_cnt">Folgende \n
%1$s</string>
<string name="pins_cnt">Angeheftet\n
%d</string>
@ -233,7 +235,7 @@
<string name="delete_notification_all">Alle Benachrichtigungen wurden gelöscht!</string>
<!-- HEADER -->
<string name="following">Folgt</string>
<string name="followers">Followers</string>
<string name="followers">Folgende</string>
<string name="pinned_toots">Angeheftet</string>
<!-- TOAST -->
<string name="client_error">Fehler beim Laden der Client ID!</string>
@ -310,6 +312,7 @@
<string name="set_preview_reply_pp">Profilbilder anzeigen?</string>
<string name="set_multiaccount_actions">Interaktionen zwischen deinen Konten erlauben?</string>
<string name="set_fit_preview">Vorschaubilder anpassen</string>
<string name="set_automatically_split_toot">Automatically split toots over 500 chars in replies</string>
<string name="note_no_space">Du hast die Grenze von 160 Zeichen erreicht!</string>
<string name="username_no_space">Du hast die Grenze von 30 Zeichen erreicht!</string>
<string name="settings_title_hour">Zeitfenster für Benachrichtigungen:</string>
@ -333,11 +336,13 @@
<string-array name="settings_translation">
<item>Yandex</item>
<item>Nein</item>
<item>No</item>
</string-array>
<string name="your_api_key">Your API key, you can leave blank for Yandex</string>
<string-array name="settings_theme">
<item>Dark</item>
<item>Light</item>
<item>Black</item>
<item>Dunkel</item>
<item>Hell</item>
<item>Schwarz</item>
</string-array>
<string-array name="settings_resize_picture">
<item>Nein</item>
@ -474,8 +479,9 @@ Die Anwendung <b>nutzt keine Trackingwergzeuge</b>(Zielgruppenbestimmung, Fehler
<string name="poxy_port">Port</string>
<string name="poxy_login">Login</string>
<string name="poxy_password">Passwort</string>
<string name="set_theme">Theme:</string>
<string name="set_compact_mode">Compact mode</string>
<string name="set_share_details">Add toot details when sharing</string>
<string name="support_the_app_on_liberapay">Support the app on Liberapay</string>
<string name="set_theme">Layout:</string>
<string name="set_compact_mode">Kompakte Darstellung</string>
<string name="set_share_details">Toot Details beim Teilen hinzufügen</string>
<string name="support_the_app_on_liberapay">Unterstütze die app auf Liberapay</string>
<string name="alert_regex">Es gibt einen Fehler im regulären Ausdruck!</string>
</resources>

View File

@ -118,6 +118,7 @@
<string name="more_action_6">Share</string>
<string name="more_action_7">Mention</string>
<string name="more_action_8">Timed mute</string>
<string name="more_action_9">Delete &amp; re-draft</string>
<string-array name="more_action_confirm">
<item>Mute this account?</item>
<item>Block this account?</item>
@ -125,6 +126,7 @@
</string-array>
<string-array name="more_action_owner_confirm">
<item>Remove this toot?</item>
<item>Delete &amp; re-draft this toot?</item>
</string-array>
<plurals name="preview_replies">
<item quantity="one">%d reply</item>
@ -165,7 +167,7 @@
<item>Post to followers only</item>
<item>Post to mentioned users only</item>
</string-array>
<string name="no_draft">No draft!</string>
<string name="no_draft">No drafts!</string>
<string name="choose_toot">Choose a toot</string>
<string name="choose_accounts">Choose an account</string>
<string name="select_accounts">Select some accounts</string>
@ -306,6 +308,7 @@
<string name="set_preview_reply_pp">Display profile pictures?</string>
<string name="set_multiaccount_actions">Allow interactions between accounts?</string>
<string name="set_fit_preview">Fit preview images</string>
<string name="set_automatically_split_toot">Automatically split toots over 500 chars in replies</string>
<string name="note_no_space">You have reached the 160 characters allowed!</string>
<string name="username_no_space">You have reached the 30 characters allowed!</string>
<string name="settings_title_hour">Time slot for notifications:</string>
@ -328,8 +331,10 @@
</string-array>
<string-array name="settings_translation">
<item>Yandex</item>
<item>DeepL</item>
<item>No</item>
</string-array>
<string name="your_api_key">Your API key, you can leave blank for Yandex</string>
<string-array name="settings_theme">
<item>Dark</item>
<item>Light</item>
@ -489,4 +494,5 @@
<string name="set_compact_mode">Compact mode</string>
<string name="set_share_details">Add toot details when sharing</string>
<string name="support_the_app_on_liberapay">Support the app on Liberapay</string>
<string name="alert_regex">There is an error in the regular expression!</string>
</resources>

View File

@ -118,6 +118,7 @@
<string name="more_action_6">Compartir</string>
<string name="more_action_7">Mencionar</string>
<string name="more_action_8">Silenciado temporal</string>
<string name="more_action_9">Borrar &amp; redactar</string>
<string-array name="more_action_confirm">
<item>¿Silenciar esta cuenta?</item>
<item>¿Bloquear esta cuenta?</item>
@ -125,6 +126,7 @@
</string-array>
<string-array name="more_action_owner_confirm">
<item>¿Remover este toot?</item>
<item>Borrar &amp; redactar este Toot?</item>
</string-array>
<plurals name="preview_replies">
<item quantity="one">%d respuesta</item>
@ -306,6 +308,7 @@
<string name="set_preview_reply_pp">¿Mostrar imágenes de perfil?</string>
<string name="set_multiaccount_actions">¿Permitir interacciones entre cuentas?</string>
<string name="set_fit_preview">Ajustar vista previa de imágenes</string>
<string name="set_automatically_split_toot">Automatically split toots over 500 chars in replies</string>
<string name="note_no_space">¡Has alcanzado los 160 caracteres permitidos!</string>
<string name="username_no_space">¡Has alcanzado los 30 caracteres permitidos!</string>
<string name="settings_title_hour">Espacio de tiempo para notificaciones:</string>
@ -329,11 +332,13 @@
<string-array name="settings_translation">
<item>Yandex</item>
<item>No</item>
<item>No</item>
</string-array>
<string name="your_api_key">Tu llave API, puedes dejar en blanco para Yandex</string>
<string-array name="settings_theme">
<item>Dark</item>
<item>Light</item>
<item>Black</item>
<item>Oscuro</item>
<item>Claro</item>
<item>Negro</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
@ -480,8 +485,9 @@ Gracias a: </string>
<string name="poxy_port">Puerto</string>
<string name="poxy_login">Usuario</string>
<string name="poxy_password">Contraseña</string>
<string name="set_theme">Theme:</string>
<string name="set_compact_mode">Compact mode</string>
<string name="set_share_details">Add toot details when sharing</string>
<string name="support_the_app_on_liberapay">Support the app on Liberapay</string>
<string name="set_theme">Tema:</string>
<string name="set_compact_mode">Modo compacto</string>
<string name="set_share_details">Agregar datos del toot al compartir</string>
<string name="support_the_app_on_liberapay">Apoya la aplicación en Liberapay</string>
<string name="alert_regex">Hay un error en la expresión regular!</string>
</resources>

View File

@ -101,13 +101,13 @@
<string name="no_status">Ez dago toot-ik bistaratzeko</string>
<string name="fav_added">Toot-a gogokoetara gehitu da</string>
<string name="fav_removed">Toot-a gogokoetatik kendu da!</string>
<string name="reblog_added">Toot-a bultzatu da!</string>
<string name="reblog_removed">Toot-a ez dago jada bultzatua!</string>
<string name="reblog_by">%1$s(e)k bultzatua</string>
<string name="reblog_added">Toot-ari bultzada eman zaio!</string>
<string name="reblog_removed">Toot-ari bultzada kendu zaio!</string>
<string name="reblog_by">%1$s(e)n bultzada</string>
<string name="favourite_add">Gehitu toot hau zure gogokoetara?</string>
<string name="favourite_remove">Kendu toot hau zure gogokoetatik?</string>
<string name="reblog_add">Bultzatu toot hau?</string>
<string name="reblog_remove">Desbultzatu toot hau?</string>
<string name="reblog_add">Bultzada eman toot honi?</string>
<string name="reblog_remove">Bultzada kendu toot honi?</string>
<string name="pin_add">Finkatu toot hau?</string>
<string name="pin_remove">Desfinkatu toot hau?</string>
<string name="more_action_1">Mututu</string>
@ -118,6 +118,7 @@
<string name="more_action_6">Partekatu</string>
<string name="more_action_7">Aipatu</string>
<string name="more_action_8">Denbora baterako mutututa</string>
<string name="more_action_9">Ezabatu eta berridatzi</string>
<string-array name="more_action_confirm">
<item>Mututu kontu hau?</item>
<item>Blokeatu kontu hau?</item>
@ -125,6 +126,7 @@
</string-array>
<string-array name="more_action_owner_confirm">
<item>Kendu toot hau?</item>
<item>Ezabatu eta berridatzi toot hau?</item>
</string-array>
<plurals name="preview_replies">
<item quantity="one">erantzun %d</item>
@ -158,7 +160,7 @@
<string name="toots_visibility_tilte">Toot-en lehenetsitako ikusgaitasuna: </string>
<string name="toot_sent">Toot-a bidali da!</string>
<string name="toot_reply_content_title">Toot honi erantzuten ari zara:</string>
<string name="toot_sensitive">Eduki mingarria?</string>
<string name="toot_sensitive">Eduki hunkigarria?</string>
<string-array name="toot_visibility">
<item>Argitaratu denbora-lerro publikoetan</item>
<item>Ez argitaratu denbora-lerro publikoetan</item>
@ -211,7 +213,7 @@
<!-- Notifications -->
<string name="no_notifications">Jakinarazpenik ez bistaratzeko</string>
<string name="notif_mention">erabiltzaileak aipatu zaitu</string>
<string name="notif_reblog">erabiltzaileak zure mezua bultzatu du</string>
<string name="notif_reblog">erabiltzaileak zure mezuari bultzada eman dio</string>
<string name="notif_favourite">erabiltzaileak zure mezua gogoko du</string>
<string name="notif_follow">zu jarraitzen hasi da</string>
<string name="notif_pouet">%1$s erabiltzailearen toot berria</string>
@ -240,8 +242,8 @@
<string name="toast_unmute">Kontua ez dago jada mututua!</string>
<string name="toast_follow">Kontua jarraitzen hasi zara!</string>
<string name="toast_unfollow">Ez duzu jada kontu hau jarraitzen!</string>
<string name="toast_reblog">Toot-a bultzatu da!</string>
<string name="toast_unreblog">Toot-a ez dago jada bultzatua!</string>
<string name="toast_reblog">Toot-ari bultzada eman zaio!</string>
<string name="toast_unreblog">Toot-ari bultzada kendu zaio!</string>
<string name="toast_favourite">Toot-a zure gogokoetara gehitu da!</string>
<string name="toast_unfavourite">Toot-a zure gogokoetatik kendu da!</string>
<string name="toast_report">Toot-a salatu da!</string>
@ -274,7 +276,7 @@
<string name="load_attachment">Kargatu irudiak</string>
<string name="load_attachment_spoiler">Erakutsi gehiago…</string>
<string name="load_attachment_spoiler_less">Erakutsi gutxiago…</string>
<string name="load_sensitive_attachment">Eduki mingarria</string>
<string name="load_sensitive_attachment">Eduki hunkigarria</string>
<string name="set_display_reply">Erakutsi aurreko mezua erantzunetan</string>
<string name="set_display_local">Bistaratu denbora-lerro lokala</string>
<string name="set_display_global">Bistaratu denbora-lerro federatua</string>
@ -286,10 +288,10 @@
<string name="settings_title_notifications">Kudeatu jakinarazpenak</string>
<string name="set_notif_follow">Jakinarazi norbaitek jarraitzen zaituenean</string>
<string name="set_notif_follow_ask">Jakinarazi norbait zu jarraitzeko eskaera egiten duenean</string>
<string name="set_notif_follow_share">Jakinarazi norbaitek zure mezua bultzatzen duenean</string>
<string name="set_notif_follow_share">Jakinarazi norbaitek zure mezuari bultzada ematean</string>
<string name="set_notif_follow_add">Jakinarazi norbaitek zure mezua gogoko duenean</string>
<string name="set_notif_follow_mention">Jakinarazi norbaitek aipatzen zaituenean</string>
<string name="set_share_validation">Erakutsi berrespen elkarrizketa-koadroa bultzatu aurretik</string>
<string name="set_share_validation">Erakutsi berrespen elkarrizketa-koadroa bultzada eman aurretik</string>
<string name="set_share_validation_fav">Erakutsi baieztapen elkarrizketa-koadroa gogokoetara erantsi aurretik</string>
<string name="settings_title_more_options">Ezarpen aurreratuak</string>
<string name="set_wifi_only">Jakinarazi WIFI bidez besterik ez</string>
@ -306,6 +308,7 @@
<string name="set_preview_reply_pp">Bistaratu profileko argazkiak?</string>
<string name="set_multiaccount_actions">Baimendu kontuen arteko interakzioa?</string>
<string name="set_fit_preview">Doitu irudien aurrebistak</string>
<string name="set_automatically_split_toot">Automatikoki zatitu 500 karakteretik gorako toot-ak erantzunetan</string>
<string name="note_no_space">Baimendutako 160 karaktereetara heldu zara!</string>
<string name="username_no_space">Baimendutako 30 karaktereetara heldu zara!</string>
<string name="settings_title_hour">Jakinarazpenen denbora-tartea:</string>
@ -329,7 +332,9 @@
<string-array name="settings_translation">
<item>Yandex</item>
<item>Ez</item>
<item>Ez</item>
</string-array>
<string name="your_api_key">Zure API gakoa, Tandex erabiltzeko hutsik laga dezakezu</string>
<string-array name="settings_theme">
<item>Iluna</item>
<item>Argia</item>
@ -459,7 +464,7 @@ Eskerrik asko Stéphane logoagatik. </string>
<string name="action_lists_owner">Zure zerrendak</string>
<!-- Migration -->
<string name="account_moved_to">%1$s %2$s(e)ra mugitu da</string>
<string name="show_boost_count">Erakutsi bultzatutako/gogokoen kopurua</string>
<string name="show_boost_count">Erakutsi bultzada/gogoko kopurua</string>
<string name="issue_login_title">Autentifikazioa ez dabil?</string>
<string name="issue_login_message">
<b>Hona lagundu dezaketen egiaztaketa batzuk:</b>\n\n
@ -486,6 +491,7 @@ Eskerrik asko Stéphane logoagatik. </string>
<string name="poxy_password">Pasahitza</string>
<string name="set_theme">Itxura:</string>
<string name="set_compact_mode">Modu trinkoa</string>
<string name="set_share_details">Add toot details when sharing</string>
<string name="support_the_app_on_liberapay">Support the app on Liberapay</string>
<string name="set_share_details">Gehitu toot-aren xehetasunak partekatzean</string>
<string name="support_the_app_on_liberapay">Babestu aplikazioa Liberapay bidez</string>
<string name="alert_regex">Errore bat dago adierazpen erregularrean!</string>
</resources>

View File

@ -118,6 +118,7 @@
<string name="more_action_6">Share</string>
<string name="more_action_7">Mention</string>
<string name="more_action_8">Timed mute</string>
<string name="more_action_9">Delete &amp; re-draft</string>
<string-array name="more_action_confirm">
<item>Mute this account?</item>
<item>Block this account?</item>
@ -125,6 +126,7 @@
</string-array>
<string-array name="more_action_owner_confirm">
<item>Remove this toot?</item>
<item>Delete &amp; re-draft this toot?</item>
</string-array>
<plurals name="preview_replies">
<item quantity="one">%d reply</item>
@ -165,7 +167,7 @@
<item>Post to followers only</item>
<item>Post to mentioned users only</item>
</string-array>
<string name="no_draft">No draft!</string>
<string name="no_draft">No drafts!</string>
<string name="choose_toot">Choose a toot</string>
<string name="choose_accounts">Choose an account</string>
<string name="select_accounts">Select some accounts</string>
@ -306,6 +308,7 @@
<string name="set_preview_reply_pp">Display profile pictures?</string>
<string name="set_multiaccount_actions">Allow interactions between accounts?</string>
<string name="set_fit_preview">Fit preview images</string>
<string name="set_automatically_split_toot">Automatically split toots over 500 chars in replies</string>
<string name="note_no_space">You have reached the 160 characters allowed!</string>
<string name="username_no_space">You have reached the 30 characters allowed!</string>
<string name="settings_title_hour">Time slot for notifications:</string>
@ -328,8 +331,10 @@
</string-array>
<string-array name="settings_translation">
<item>Yandex</item>
<item>DeepL</item>
<item>No</item>
</string-array>
<string name="your_api_key">Your API key, you can leave blank for Yandex</string>
<string-array name="settings_theme">
<item>Dark</item>
<item>Light</item>
@ -489,4 +494,5 @@
<string name="set_compact_mode">Compact mode</string>
<string name="set_share_details">Add toot details when sharing</string>
<string name="support_the_app_on_liberapay">Support the app on Liberapay</string>
<string name="alert_regex">There is an error in the regular expression!</string>
</resources>

View File

@ -118,6 +118,7 @@
<string name="more_action_6">Partager</string>
<string name="more_action_7">Mentionner</string>
<string name="more_action_8">Temporairement muet</string>
<string name="more_action_9">Delete &amp; re-draft</string>
<string-array name="more_action_confirm">
<item>Masquer ce compte ?</item>
<item>Bloquer ce compte ?</item>
@ -125,6 +126,7 @@
</string-array>
<string-array name="more_action_owner_confirm">
<item>Supprimer ce pouet ?</item>
<item>Delete &amp; re-draft this toot?</item>
</string-array>
<plurals name="preview_replies">
<item quantity="one">%d réponse</item>
@ -184,7 +186,7 @@
<string name="about_thekinrar">Recherche d\'instances :</string>
<string name="about_thekinrar_action">instances.social</string>
<string name="thanks_text_logo">Concepteur de l\'icône : </string>
<string name="thanks_text_banner">Banner designer:</string>
<string name="thanks_text_banner">Concepteur de la bannière :</string>
<!-- Conversation -->
<string name="conversation">Conversation</string>
<!-- Accounts -->
@ -305,7 +307,8 @@
<string name="set_preview_reply">Afficher le nombre de réponses sur la page d\'accueil</string>
<string name="set_preview_reply_pp">Afficher les images de profil ?</string>
<string name="set_multiaccount_actions">Permettre les interactions entre comptes ?</string>
<string name="set_fit_preview">Fit preview images</string>
<string name="set_fit_preview">Voir l\'aperçu d\'image en entier</string>
<string name="set_automatically_split_toot">Automatically split toots over 500 chars in replies</string>
<string name="note_no_space">Vous avez atteint les 160 caractères autorisés !</string>
<string name="username_no_space">Vous avez atteint les 30 caractères autorisés !</string>
<string name="settings_title_hour">Plage horaire pour les notifications :</string>
@ -329,11 +332,13 @@
<string-array name="settings_translation">
<item>Yandex</item>
<item>Non</item>
<item>No</item>
</string-array>
<string name="your_api_key">Your API key, you can leave blank for Yandex</string>
<string-array name="settings_theme">
<item>Dark</item>
<item>Light</item>
<item>Black</item>
<item>Sombre</item>
<item>Clair</item>
<item>Noir</item>
</string-array>
<string-array name="settings_resize_picture">
<item>Non</item>
@ -441,7 +446,7 @@
<string name="thanks_text_dev">
Merci à :
</string>
<string name="filter_regex">Filtrer avec une expression rationnelle</string>
<string name="filter_regex">Filtrer avec une expression régulière</string>
<string name="search">Rechercher</string>
<string name="delete">Supprimer</string>
<string name="fetch_more_toots">Retrouver plus de pouets…</string>
@ -483,8 +488,9 @@
<string name="poxy_port">Port</string>
<string name="poxy_login">Identifiant</string>
<string name="poxy_password">Mot de passe</string>
<string name="set_theme">Theme:</string>
<string name="set_compact_mode">Compact mode</string>
<string name="set_share_details">Add toot details when sharing</string>
<string name="support_the_app_on_liberapay">Support the app on Liberapay</string>
<string name="set_theme">Thèmes :</string>
<string name="set_compact_mode">Mode compact</string>
<string name="set_share_details">Ajouter les détails du pouet en le partageant</string>
<string name="support_the_app_on_liberapay">Soutenir l\'app sur Liberpay</string>
<string name="alert_regex">Il y a une erreur dans l\'expression régulière !</string>
</resources>

View File

@ -118,6 +118,7 @@
<string name="more_action_6">Share</string>
<string name="more_action_7">Mention</string>
<string name="more_action_8">Timed mute</string>
<string name="more_action_9">Delete &amp; re-draft</string>
<string-array name="more_action_confirm">
<item>Mute this account?</item>
<item>Block this account?</item>
@ -125,6 +126,7 @@
</string-array>
<string-array name="more_action_owner_confirm">
<item>Remove this toot?</item>
<item>Delete &amp; re-draft this toot?</item>
</string-array>
<plurals name="preview_replies">
<item quantity="one">%d reply</item>
@ -167,7 +169,7 @@
<item>Post to followers only</item>
<item>Post to mentioned users only</item>
</string-array>
<string name="no_draft">No draft!</string>
<string name="no_draft">No drafts!</string>
<string name="choose_toot">Choose a toot</string>
<string name="choose_accounts">Choose an account</string>
<string name="select_accounts">Select some accounts</string>
@ -312,6 +314,7 @@
<string name="set_preview_reply_pp">Display profile pictures?</string>
<string name="set_multiaccount_actions">Allow interactions between accounts?</string>
<string name="set_fit_preview">Fit preview images</string>
<string name="set_automatically_split_toot">Automatically split toots over 500 chars in replies</string>
<string name="note_no_space">You have reached the 160 characters allowed!</string>
<string name="username_no_space">You have reached the 30 characters allowed!</string>
<string name="settings_title_hour">Time slot for notifications:</string>
@ -334,8 +337,10 @@
</string-array>
<string-array name="settings_translation">
<item>Yandex</item>
<item>DeepL</item>
<item>No</item>
</string-array>
<string name="your_api_key">Your API key, you can leave blank for Yandex</string>
<string-array name="settings_theme">
<item>Dark</item>
<item>Light</item>
@ -495,4 +500,5 @@
<string name="set_compact_mode">Compact mode</string>
<string name="set_share_details">Add toot details when sharing</string>
<string name="support_the_app_on_liberapay">Support the app on Liberapay</string>
<string name="alert_regex">There is an error in the regular expression!</string>
</resources>

View File

@ -118,6 +118,7 @@
<string name="more_action_6">Share</string>
<string name="more_action_7">Mention</string>
<string name="more_action_8">Timed mute</string>
<string name="more_action_9">Delete &amp; re-draft</string>
<string-array name="more_action_confirm">
<item>Mute this account?</item>
<item>Block this account?</item>
@ -125,6 +126,7 @@
</string-array>
<string-array name="more_action_owner_confirm">
<item>Remove this toot?</item>
<item>Delete &amp; re-draft this toot?</item>
</string-array>
<plurals name="preview_replies">
<item quantity="one">%d reply</item>
@ -165,7 +167,7 @@
<item>Post to followers only</item>
<item>Post to mentioned users only</item>
</string-array>
<string name="no_draft">No draft!</string>
<string name="no_draft">No drafts!</string>
<string name="choose_toot">Choose a toot</string>
<string name="choose_accounts">Choose an account</string>
<string name="select_accounts">Select some accounts</string>
@ -306,6 +308,7 @@
<string name="set_preview_reply_pp">Display profile pictures?</string>
<string name="set_multiaccount_actions">Allow interactions between accounts?</string>
<string name="set_fit_preview">Fit preview images</string>
<string name="set_automatically_split_toot">Automatically split toots over 500 chars in replies</string>
<string name="note_no_space">You have reached the 160 characters allowed!</string>
<string name="username_no_space">You have reached the 30 characters allowed!</string>
<string name="settings_title_hour">Time slot for notifications:</string>
@ -328,8 +331,10 @@
</string-array>
<string-array name="settings_translation">
<item>Yandex</item>
<item>DeepL</item>
<item>No</item>
</string-array>
<string name="your_api_key">Your API key, you can leave blank for Yandex</string>
<string-array name="settings_theme">
<item>Dark</item>
<item>Light</item>
@ -489,4 +494,5 @@
<string name="set_compact_mode">Compact mode</string>
<string name="set_share_details">Add toot details when sharing</string>
<string name="support_the_app_on_liberapay">Support the app on Liberapay</string>
<string name="alert_regex">There is an error in the regular expression!</string>
</resources>

View File

@ -118,6 +118,7 @@
<string name="more_action_6">Տարածել</string>
<string name="more_action_7">Հիշատակել</string>
<string name="more_action_8">Ժամանակավոր խլացում</string>
<string name="more_action_9">Delete &amp; re-draft</string>
<string-array name="more_action_confirm">
<item>Խլացնե՞լ այս հաշիվը</item>
<item>Արգելափակե՞լ այս հաշիվը</item>
@ -125,6 +126,7 @@
</string-array>
<string-array name="more_action_owner_confirm">
<item>Հեռացնե՞լ այս թութը</item>
<item>Delete &amp; re-draft this toot?</item>
</string-array>
<plurals name="preview_replies">
<item quantity="one">%d արձագանք</item>
@ -306,6 +308,7 @@
<string name="set_preview_reply_pp">Ցուցադրե՞լ անձնանկարները</string>
<string name="set_multiaccount_actions">Թույլատրե՞լ հաշիվների միջև փոխհարաբերությունները</string>
<string name="set_fit_preview">Fit preview images</string>
<string name="set_automatically_split_toot">Automatically split toots over 500 chars in replies</string>
<string name="note_no_space">Դու հատե՛լ ես թույլատրված 160 նիշերի սահմանը</string>
<string name="username_no_space">Դու հատե՛լ ես թույլատրված 30 նիշերի սահմանը</string>
<string name="settings_title_hour">Ծանուցվելու ժամանակահատվածը՝</string>
@ -329,7 +332,9 @@
<string-array name="settings_translation">
<item>Յանդեքս</item>
<item>Ոչ</item>
<item>No</item>
</string-array>
<string name="your_api_key">Your API key, you can leave blank for Yandex</string>
<string-array name="settings_theme">
<item>Dark</item>
<item>Light</item>
@ -488,4 +493,5 @@
<string name="set_compact_mode">Compact mode</string>
<string name="set_share_details">Add toot details when sharing</string>
<string name="support_the_app_on_liberapay">Support the app on Liberapay</string>
<string name="alert_regex">There is an error in the regular expression!</string>
</resources>

View File

@ -118,6 +118,7 @@
<string name="more_action_6">Bagikan</string>
<string name="more_action_7">Menyebut</string>
<string name="more_action_8">Mematikan waktu</string>
<string name="more_action_9">Delete &amp; re-draft</string>
<string-array name="more_action_confirm">
<item>Bisukan akun ini?</item>
<item>Blok akun ini?</item>
@ -125,6 +126,7 @@
</string-array>
<string-array name="more_action_owner_confirm">
<item>Menghapus kutipan ini?</item>
<item>Delete &amp; re-draft this toot?</item>
</string-array>
<plurals name="preview_replies">
<item quantity="other">%d balasan</item>
@ -303,6 +305,7 @@
<string name="set_preview_reply_pp">Tampilkan gambar profil?</string>
<string name="set_multiaccount_actions">Izinkan interaksi antar akun?</string>
<string name="set_fit_preview">Fit preview images</string>
<string name="set_automatically_split_toot">Automatically split toots over 500 chars in replies</string>
<string name="note_no_space">Kamu telah mencapai 160 karakter yang diizinkan!</string>
<string name="username_no_space">Kamu telah mencapai 30 karakter yang diizinkan!</string>
<string name="settings_title_hour">Slot waktu untuk pemberitahuan:</string>
@ -326,7 +329,9 @@
<string-array name="settings_translation">
<item>Yandex</item>
<item>Tidak</item>
<item>No</item>
</string-array>
<string name="your_api_key">Your API key, you can leave blank for Yandex</string>
<string-array name="settings_theme">
<item>Dark</item>
<item>Light</item>
@ -488,4 +493,5 @@ https://yandex.ru/legal/confidential/?lang=en
<string name="set_compact_mode">Compact mode</string>
<string name="set_share_details">Add toot details when sharing</string>
<string name="support_the_app_on_liberapay">Support the app on Liberapay</string>
<string name="alert_regex">There is an error in the regular expression!</string>
</resources>

View File

@ -118,6 +118,7 @@
<string name="more_action_6">Condividi</string>
<string name="more_action_7">Menziona</string>
<string name="more_action_8">Silenzio temporizzato</string>
<string name="more_action_9">Delete &amp; re-draft</string>
<string-array name="more_action_confirm">
<item>Silenziare questo account?</item>
<item>Bloccare questo account?</item>
@ -125,6 +126,7 @@
</string-array>
<string-array name="more_action_owner_confirm">
<item>Rimuovere questo toot?</item>
<item>Delete &amp; re-draft this toot?</item>
</string-array>
<plurals name="preview_replies">
<item quantity="one">%d risposta</item>
@ -306,6 +308,7 @@
<string name="set_preview_reply_pp">Visualizzare la foto del profilo?</string>
<string name="set_multiaccount_actions">Permetti interazioni tra gli account?</string>
<string name="set_fit_preview">Adatta anteprima immagini</string>
<string name="set_automatically_split_toot">Automatically split toots over 500 chars in replies</string>
<string name="note_no_space">Hai raggiunto i 160 caratteri permessi!</string>
<string name="username_no_space">Hai raggiunto i 30 caratteri permessi!</string>
<string name="settings_title_hour">Slot di tempo per le notifiche:</string>
@ -329,11 +332,13 @@
<string-array name="settings_translation">
<item>Yandex</item>
<item>No</item>
<item>No</item>
</string-array>
<string name="your_api_key">Your API key, you can leave blank for Yandex</string>
<string-array name="settings_theme">
<item>Dark</item>
<item>Light</item>
<item>Black</item>
<item>Scuro</item>
<item>Chiaro</item>
<item>Nero</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
@ -442,7 +447,7 @@ Per favore, conferma le notifiche push che vuoi ricevere.
<string name="thanks_text_dev">
Grazie anche a:
</string>
<string name="filter_regex">Filtrati tramite espressioni regolari</string>
<string name="filter_regex">Filtra tramite espressioni regolari</string>
<string name="search">Cerca</string>
<string name="delete">Elimina</string>
<string name="fetch_more_toots">Recupera altri toot…</string>
@ -485,8 +490,9 @@ Per favore, conferma le notifiche push che vuoi ricevere.
<string name="poxy_port">Porta</string>
<string name="poxy_login">Login</string>
<string name="poxy_password">Password</string>
<string name="set_theme">Theme:</string>
<string name="set_compact_mode">Compact mode</string>
<string name="set_share_details">Add toot details when sharing</string>
<string name="support_the_app_on_liberapay">Support the app on Liberapay</string>
<string name="set_theme">Tema:</string>
<string name="set_compact_mode">Modalità compatta</string>
<string name="set_share_details">Aggiungi dettagli del toot quando condividi</string>
<string name="support_the_app_on_liberapay">Supporta l\'app su Liberapay</string>
<string name="alert_regex">C\'è un errore nell\'espressione regolare!</string>
</resources>

View File

@ -118,6 +118,7 @@
<string name="more_action_6">共有</string>
<string name="more_action_7">メンション</string>
<string name="more_action_8">時限ミュート</string>
<string name="more_action_9">Delete &amp; re-draft</string>
<string-array name="more_action_confirm">
<item>このアカウントをミュートしますか?</item>
<item>このアカウントをブロックしますか?</item>
@ -125,6 +126,7 @@
</string-array>
<string-array name="more_action_owner_confirm">
<item>このトゥートを削除しますか?</item>
<item>Delete &amp; re-draft this toot?</item>
</string-array>
<plurals name="preview_replies">
<item quantity="other">%d が返信</item>
@ -132,7 +134,7 @@
<string name="set_display_bookmark_button">ブックマークボタンを表示する</string>
<string name="bookmarks">ブックマーク</string>
<string name="bookmark_add">ブックマークに追加する</string>
<string name="bookmark_remove">Remove bookmark</string>
<string name="bookmark_remove">ブックマークを削除</string>
<string name="bookmarks_empty">ブックマークがありません</string>
<string name="status_bookmarked">トゥートがブックマークに追加されました!</string>
<string name="status_unbookmarked">トゥートがブックマークから削除されました!</string>
@ -183,7 +185,7 @@
<string name="about_thekinrar">インスタンスを検索:</string>
<string name="about_thekinrar_action">instances.social</string>
<string name="thanks_text_logo">アイコンデザイナー:</string>
<string name="thanks_text_banner">Banner designer:</string>
<string name="thanks_text_banner">バナー デザイナー:</string>
<!-- Conversation -->
<string name="conversation">会話</string>
<!-- Accounts -->
@ -296,13 +298,14 @@
<string name="set_nsfw_timeout">NSFWビューのタイムアウト秒、0はオフを意味します</string>
<string name="settings_title_profile">プロフィールを編集</string>
<string name="set_profile_description">バイオ…</string>
<string name="set_lock_account">Lock account</string>
<string name="set_lock_account">アカウントをロック</string>
<string name="set_save_changes">変更内容を保存</string>
<string name="set_header_picture_overlay">ヘッダー画像を選択</string>
<string name="set_preview_reply">ホームタイムラインに返信件数を表示する</string>
<string name="set_preview_reply_pp">プロフィール画像を表示しますか?</string>
<string name="set_multiaccount_actions">アカウント間のやりとりを許可しますか?</string>
<string name="set_fit_preview">Fit preview images</string>
<string name="set_fit_preview">プレビュー画像をフィットさせる</string>
<string name="set_automatically_split_toot">Automatically split toots over 500 chars in replies</string>
<string name="note_no_space">160文字の制限に達しました</string>
<string name="username_no_space">30文字の制限に達しました。</string>
<string name="settings_title_hour">通知のタイムスロット:</string>
@ -326,7 +329,9 @@
<string-array name="settings_translation">
<item>Yandex</item>
<item>いいえ</item>
<item>No</item>
</string-array>
<string name="your_api_key">Your API key, you can leave blank for Yandex</string>
<string-array name="settings_theme">
<item>Dark</item>
<item>Light</item>
@ -474,8 +479,9 @@
<string name="poxy_port">ポート</string>
<string name="poxy_login">ログイン</string>
<string name="poxy_password">パスワード</string>
<string name="set_theme">Theme:</string>
<string name="set_compact_mode">Compact mode</string>
<string name="set_share_details">Add toot details when sharing</string>
<string name="support_the_app_on_liberapay">Support the app on Liberapay</string>
<string name="set_theme">テーマ:</string>
<string name="set_compact_mode">コンパクト モード</string>
<string name="set_share_details">共有時にトゥートの詳細を付加する</string>
<string name="support_the_app_on_liberapay">Liberapayでアプリを支援</string>
<string name="alert_regex">正規表現に誤りがあります!</string>
</resources>

View File

@ -118,6 +118,7 @@
<string name="more_action_6">Share</string>
<string name="more_action_7">Mention</string>
<string name="more_action_8">Timed mute</string>
<string name="more_action_9">Delete &amp; re-draft</string>
<string-array name="more_action_confirm">
<item>Mute this account?</item>
<item>Block this account?</item>
@ -125,6 +126,7 @@
</string-array>
<string-array name="more_action_owner_confirm">
<item>Remove this toot?</item>
<item>Delete &amp; re-draft this toot?</item>
</string-array>
<plurals name="preview_replies">
<item quantity="other">%d replies</item>
@ -164,7 +166,7 @@
<item>Post to followers only</item>
<item>Post to mentioned users only</item>
</string-array>
<string name="no_draft">No draft!</string>
<string name="no_draft">No drafts!</string>
<string name="choose_toot">Choose a toot</string>
<string name="choose_accounts">Choose an account</string>
<string name="select_accounts">Select some accounts</string>
@ -303,6 +305,7 @@
<string name="set_preview_reply_pp">Display profile pictures?</string>
<string name="set_multiaccount_actions">Allow interactions between accounts?</string>
<string name="set_fit_preview">Fit preview images</string>
<string name="set_automatically_split_toot">Automatically split toots over 500 chars in replies</string>
<string name="note_no_space">You have reached the 160 characters allowed!</string>
<string name="username_no_space">You have reached the 30 characters allowed!</string>
<string name="settings_title_hour">Time slot for notifications:</string>
@ -325,8 +328,10 @@
</string-array>
<string-array name="settings_translation">
<item>Yandex</item>
<item>DeepL</item>
<item>No</item>
</string-array>
<string name="your_api_key">Your API key, you can leave blank for Yandex</string>
<string-array name="settings_theme">
<item>Dark</item>
<item>Light</item>
@ -486,4 +491,5 @@
<string name="set_compact_mode">Compact mode</string>
<string name="set_share_details">Add toot details when sharing</string>
<string name="support_the_app_on_liberapay">Support the app on Liberapay</string>
<string name="alert_regex">There is an error in the regular expression!</string>
</resources>

View File

@ -7,8 +7,8 @@
<string name="action_about_instance">Over deze Mastodonserver</string>
<string name="action_privacy">Privacy</string>
<string name="action_cache">Buffer</string>
<string name="action_logout">Uitloggen</string>
<string name="login">Inloggen</string>
<string name="action_logout">Afmelden</string>
<string name="login">Aanmelden</string>
<!-- common -->
<string name="close">Sluiten</string>
<string name="yes">Ja</string>
@ -102,12 +102,12 @@
<string name="fav_added">De toot is aan jouw favorieten toegevoegd</string>
<string name="fav_removed">De toot is uit jouw favorieten verwijderd!</string>
<string name="reblog_added">De toot is geboost!</string>
<string name="reblog_removed">De toot is niet meer geboost!</string>
<string name="reblog_removed">De toot wordt niet langer geboost!</string>
<string name="reblog_by">Geboost door %1$s</string>
<string name="favourite_add">Deze toot aan jouw favorieten toevoegen?</string>
<string name="favourite_remove">Deze toot uit jouw favorieten verwijderen?</string>
<string name="reblog_add">Deze toot boosten?</string>
<string name="reblog_remove">Deze toot niet meer boosten?</string>
<string name="reblog_remove">Deze toot niet langer boosten?</string>
<string name="pin_add">Deze toot aan jouw profielpagina vastmaken?</string>
<string name="pin_remove">Deze toot van profielpagina losmaken?</string>
<string name="more_action_1">Negeren</string>
@ -118,6 +118,7 @@
<string name="more_action_6">Delen</string>
<string name="more_action_7">Vermelden</string>
<string name="more_action_8">Tijdelijk negeren</string>
<string name="more_action_9">Delete &amp; re-draft</string>
<string-array name="more_action_confirm">
<item>Account negeren?</item>
<item>Account blokkeren?</item>
@ -125,6 +126,7 @@
</string-array>
<string-array name="more_action_owner_confirm">
<item>Toot verwijderen?</item>
<item>Delete &amp; re-draft this toot?</item>
</string-array>
<plurals name="preview_replies">
<item quantity="one">%d reactie</item>
@ -184,7 +186,7 @@
<string name="about_thekinrar">Servers zoeken:</string>
<string name="about_thekinrar_action">instances.social</string>
<string name="thanks_text_logo">Ontwerper pictogram:</string>
<string name="thanks_text_banner">Banner designer:</string>
<string name="thanks_text_banner">Banner-ontwerper:</string>
<!-- Conversation -->
<string name="conversation">Conversatie</string>
<!-- Accounts -->
@ -207,7 +209,7 @@
<!-- timed mute -->
<string name="timed_mute_date_error">De tijd om te negeren moet langer duren dan een minuut.</string>
<string name="timed_mute_date">%1$s wordt tot %2$s genegeerd.\n Ga naar het profiel van dit account om het negeren op te heffen.</string>
<string name="timed_mute_profile">%1$s wordt tot %2$s genegeerd.\n Klik hier om dit account niet meer te negeren.</string>
<string name="timed_mute_profile">%1$s wordt tot %2$s genegeerd.\n Klik hier om dit account niet langer te negeren.</string>
<!-- Notifications -->
<string name="no_notifications">Je hebt nog geen meldingen</string>
<string name="notif_mention">vermeldde jou</string>
@ -237,13 +239,13 @@
<string name="toast_block">Account is geblokkeerd!</string>
<string name="toast_unblock">Account is gedeblokkeerd!</string>
<string name="toast_mute">Account wordt nu genegeerd!</string>
<string name="toast_unmute">Account wordt niet meer genegeerd!</string>
<string name="toast_unmute">Account wordt niet langer genegeerd!</string>
<string name="toast_follow">Account wordt nu gevolgd!</string>
<string name="toast_unfollow">Account wordt niet meer gevolgd!</string>
<string name="toast_unfollow">Account wordt niet langer gevolgd!</string>
<string name="toast_reblog">Toot is geboost!</string>
<string name="toast_unreblog">Toot wordt niet meer geboost!</string>
<string name="toast_unreblog">Toot wordt niet langer geboost!</string>
<string name="toast_favourite">Toot is als favoriet gemarkeerd!</string>
<string name="toast_unfavourite">Toot is niet meer als favoriet gemarkeerd!</string>
<string name="toast_unfavourite">Toot wordt niet langer als favoriet gemarkeerd!</string>
<string name="toast_report">Toot is gerapporteerd!</string>
<string name="toast_unstatus">Toot is verwijderd!</string>
<string name="toast_pin">Toot is vastgezet!</string>
@ -253,7 +255,7 @@
<string name="toast_error_instance">De domeinnaam van de Mastodonserver is onjuist!</string>
<string name="toast_error_loading_account">Er ging wat mis tijdens het omschakelen van accounts!</string>
<string name="toast_error_search">Er ging wat mis tijdens het zoeken!</string>
<string name="toast_error_login">Kan niet inloggen!</string>
<string name="toast_error_login">Kan niet aanmelden!</string>
<string name="toast_update_credential_ok">De profielgegevens zijn opgeslagen!</string>
<string name="nothing_to_do">Er valt niets te doen</string>
<string name="toast_saved">Media is opgeslagen!</string>
@ -305,7 +307,8 @@
<string name="set_preview_reply">Aantal reacties per toot op jouw start-tijdlijn tonen</string>
<string name="set_preview_reply_pp">Avatars bij aantal reacties tonen?</string>
<string name="set_multiaccount_actions">Interactie tussen ingestelde accounts toestaan?</string>
<string name="set_fit_preview">Fit preview images</string>
<string name="set_fit_preview">Voorbeeldafbeeldingen passend maken</string>
<string name="set_automatically_split_toot">Automatically split toots over 500 chars in replies</string>
<string name="note_no_space">Je hebt het limiet van 160 karakters bereikt!</string>
<string name="username_no_space">Je hebt het limiet van 30 karakters bereikt!</string>
<string name="settings_title_hour">Op welk moment van de dag zijn meldingen toegestaan:</string>
@ -329,11 +332,13 @@
<string-array name="settings_translation">
<item>Yandex</item>
<item>Nee</item>
<item>No</item>
</string-array>
<string name="your_api_key">Your API key, you can leave blank for Yandex</string>
<string-array name="settings_theme">
<item>Dark</item>
<item>Light</item>
<item>Black</item>
<item>Donker</item>
<item>Licht</item>
<item>Zwart</item>
</string-array>
<string-array name="settings_resize_picture">
<item>Niet</item>
@ -360,7 +365,7 @@
<string name="action_unblock">Deblokkeren</string>
<string name="action_mute">Negeren</string>
<string name="action_no_action">Geen actie</string>
<string name="action_unmute">Niet meer negeren</string>
<string name="action_unmute">Niet langer negeren</string>
<string name="request_sent">Verzoek verzonden</string>
<string name="followed_by">Volgt jou</string>
<string name="action_search">Zoeken</string>
@ -485,8 +490,9 @@
<string name="poxy_port">Poort</string>
<string name="poxy_login">Gebruikersnaam</string>
<string name="poxy_password">Wachtwoord</string>
<string name="set_theme">Theme:</string>
<string name="set_compact_mode">Compact mode</string>
<string name="set_share_details">Add toot details when sharing</string>
<string name="support_the_app_on_liberapay">Support the app on Liberapay</string>
<string name="set_theme">Thema:</string>
<string name="set_compact_mode">Compacte modus</string>
<string name="set_share_details">Volledige toot delen</string>
<string name="support_the_app_on_liberapay">Ondersteun de app op Liberapay</string>
<string name="alert_regex">Er zit een fout in de reguliere expressie!</string>
</resources>

View File

@ -118,6 +118,7 @@
<string name="more_action_6">Dele</string>
<string name="more_action_7">Nevne</string>
<string name="more_action_8">Timed mute</string>
<string name="more_action_9">Delete &amp; re-draft</string>
<string-array name="more_action_confirm">
<item>Slå av denne kontoen?</item>
<item>Blokker denne kontoen?</item>
@ -125,6 +126,7 @@
</string-array>
<string-array name="more_action_owner_confirm">
<item>Fjern denne tooten?</item>
<item>Delete &amp; re-draft this toot?</item>
</string-array>
<plurals name="preview_replies">
<item quantity="one">%d svar</item>
@ -306,6 +308,7 @@
<string name="set_preview_reply_pp">Vis profilbilder?</string>
<string name="set_multiaccount_actions">Tillat samhandling mellom kontoer?</string>
<string name="set_fit_preview">Fit preview images</string>
<string name="set_automatically_split_toot">Automatically split toots over 500 chars in replies</string>
<string name="note_no_space">Du har nådd de 160 tegnene som er tillatt!</string>
<string name="username_no_space">Du har nådd de 30 tegnene som er tillatt!</string>
<string name="settings_title_hour">Tidsspor for varsler:</string>
@ -329,7 +332,9 @@
<string-array name="settings_translation">
<item>Yandex</item>
<item>Nei</item>
<item>No</item>
</string-array>
<string name="your_api_key">Your API key, you can leave blank for Yandex</string>
<string-array name="settings_theme">
<item>Dark</item>
<item>Light</item>
@ -481,4 +486,5 @@ Takk til: </string>
<string name="set_compact_mode">Compact mode</string>
<string name="set_share_details">Add toot details when sharing</string>
<string name="support_the_app_on_liberapay">Support the app on Liberapay</string>
<string name="alert_regex">There is an error in the regular expression!</string>
</resources>

View File

@ -118,6 +118,7 @@
<string name="more_action_6">Udostępnij</string>
<string name="more_action_7">Wspomnij</string>
<string name="more_action_8">Czasowe wyciszenie</string>
<string name="more_action_9">Delete &amp; re-draft</string>
<string-array name="more_action_confirm">
<item>Wyciszyć?</item>
<item>Zablokować?</item>
@ -125,6 +126,7 @@
</string-array>
<string-array name="more_action_owner_confirm">
<item>Usunąć ten wpis?</item>
<item>Delete &amp; re-draft this toot?</item>
</string-array>
<plurals name="preview_replies">
<item quantity="one">%d odpowiedzi</item>
@ -312,6 +314,7 @@
<string name="set_preview_reply_pp">Wyświetlać obrazy profilowe?</string>
<string name="set_multiaccount_actions">Zezwalać na interakcje między kontami?</string>
<string name="set_fit_preview">Pokaż całość</string>
<string name="set_automatically_split_toot">Automatically split toots over 500 chars in replies</string>
<string name="note_no_space">Przekroczono limit 160 dozwolonych znaków!</string>
<string name="username_no_space">Przekroczono limit 30 dozwolonych znaków!</string>
<string name="settings_title_hour">Odstęp czasu dla powiadomień:</string>
@ -335,7 +338,9 @@
<string-array name="settings_translation">
<item>Yandex</item>
<item>Brak</item>
<item>No</item>
</string-array>
<string name="your_api_key">Your API key, you can leave blank for Yandex</string>
<string-array name="settings_theme">
<item>Dark</item>
<item>Light</item>
@ -492,4 +497,5 @@ Podziękowania dla: </string>
<string name="set_compact_mode">Compact mode</string>
<string name="set_share_details">Add toot details when sharing</string>
<string name="support_the_app_on_liberapay">Support the app on Liberapay</string>
<string name="alert_regex">There is an error in the regular expression!</string>
</resources>

View File

@ -15,8 +15,8 @@
<string name="no">Não</string>
<string name="cancel">Cancelar</string>
<string name="download">Baixar</string>
<string name="download_file">Baixar %1$s</string>
<string name="download_over">Download completo</string>
<string name="download_file">%1$s baixado</string>
<string name="download_over">Transferência concluída</string>
<string name="save_file">Salvar %1$s</string>
<string name="save_over">Mídia salva</string>
<string name="download_from" formatted="false">Arquivo: %1$s</string>
@ -28,7 +28,7 @@
<string name="token">Token</string>
<string name="save">Salvar</string>
<string name="restore">Restaurar</string>
<string name="two_factor_authentification">Autenticação em dois passos?</string>
<string name="two_factor_authentification">Autenticação de dois fatores?</string>
<string name="other_instance">Outra instância que não mastodon.etalab.gouv.fr?</string>
<string name="no_result">Sem resultados!</string>
<string name="instance">Instância</string>
@ -40,7 +40,7 @@
<string name="choose_picture">Selecione uma imagem…</string>
<string name="clear">Limpar</string>
<string name="microphone">Microfone</string>
<string name="camera">Camera</string>
<string name="camera">Câmera</string>
<string name="speech_prompt">Por favor, diga algo</string>
<string name="speech_not_supported">Desculpe! Seu aparelho não suporta entrada por voz!</string>
<string name="delete_all">Excluir tudo</string>
@ -64,11 +64,11 @@
<string name="follow">Novos seguidores</string>
<string name="mention">Menções</string>
<string name="reblog">Compartilhamentos</string>
<string name="show_boosts">Show boosts</string>
<string name="show_replies">Show replies</string>
<string name="action_open_in_web">Open in browser</string>
<string name="translate">Translate</string>
<string name="please_wait">Please, wait few seconds before making this action.</string>
<string name="show_boosts">Mostrar compartilhamentos</string>
<string name="show_replies">Mostrar respostas</string>
<string name="action_open_in_web">Abrir no navegador</string>
<string name="translate">Traduzir</string>
<string name="please_wait">Por favor, espere alguns segundos antes de fazer esta ação.</string>
<!--- Menu -->
<string name="home_menu">Página inicial</string>
<string name="local_menu">Timeline local</string>
@ -80,7 +80,7 @@
<string name="blocked_menu">Usuários bloqueados</string>
<string name="remote_follow_menu">Seguir remotamente</string>
<string name="notifications">Notificações</string>
<string name="follow_request">Solicitações de seguidor</string>
<string name="follow_request">Solicitação para seguir</string>
<string name="optimization">Otimização</string>
<string name="settings">Configurações</string>
<string name="profile">Perfil</string>
@ -93,10 +93,10 @@
<string name="click_to_change">Clique no caminho para mudá-lo</string>
<string name="failed">Falhou!</string>
<string name="scheduled_toots">Toots agendados</string>
<string name="disclaimer_full">Information below may reflect the user\'s profile incompletely.</string>
<string name="disclaimer_full">As informações abaixo podem refletir o perfil do usuário incompletamente.</string>
<string name="insert_emoji">Inserir Emoji</string>
<string name="no_emoji">The app did not collect custom emojis for the moment.</string>
<string name="live_notif">Live notifications</string>
<string name="no_emoji">O app não recolhe emojis personalizado para o momento.</string>
<string name="live_notif">Notificações ao vivo</string>
<!-- Status -->
<string name="no_status">Sem toots para exibir</string>
<string name="fav_added">Toot adicionado aos favoritos</string>
@ -117,7 +117,8 @@
<string name="more_action_5">Copiar</string>
<string name="more_action_6">Compartilhar</string>
<string name="more_action_7">Mencionar</string>
<string name="more_action_8">Timed mute</string>
<string name="more_action_8">Mudo cronometrado</string>
<string name="more_action_9">Delete &amp; re-draft</string>
<string-array name="more_action_confirm">
<item>Silenciar esta conta?</item>
<item>Bloquear esta conta?</item>
@ -125,18 +126,19 @@
</string-array>
<string-array name="more_action_owner_confirm">
<item>Excluir este toot?</item>
<item>Delete &amp; re-draft this toot?</item>
</string-array>
<plurals name="preview_replies">
<item quantity="one">%d resposta</item>
<item quantity="other">%d respostas</item>
</plurals>
<string name="set_display_bookmark_button">Display the bookmark button</string>
<string name="bookmarks">Bookmarks</string>
<string name="bookmark_add">Add to bookmarks</string>
<string name="bookmark_remove">Remove bookmark</string>
<string name="bookmarks_empty">No bookmarks to display</string>
<string name="status_bookmarked">Status has been added to bookmarks!</string>
<string name="status_unbookmarked">Status was removed from bookmarks!</string>
<string name="set_display_bookmark_button">Exibir o botão de favorito</string>
<string name="bookmarks">Favoritos</string>
<string name="bookmark_add">Adicionar aos favoritos</string>
<string name="bookmark_remove">Remover dos favoritos</string>
<string name="bookmarks_empty">Não há favoritos para exibir</string>
<string name="status_bookmarked">Status foi adicionado aos favoritos!</string>
<string name="status_unbookmarked">Status foi removido dos favoritos!</string>
<!-- Date -->
<string name="date_seconds">%d s</string>
<string name="date_minutes">%d m</string>
@ -168,10 +170,10 @@
<string name="no_draft">Sem rascunhos!</string>
<string name="choose_toot">Escolha um toot</string>
<string name="choose_accounts">Escolha uma conta</string>
<string name="select_accounts">Select some accounts</string>
<string name="select_accounts">Selecione algumas contas</string>
<string name="remove_draft">Excluir rascunho?</string>
<string name="show_reply">Clique no botão para exibir toot original</string>
<string name="upload_form_description">Describe for the visually impaired</string>
<string name="upload_form_description">Descreva para os deficientes visuais</string>
<!-- Instance -->
<string name="instance_no_description">Sem descrição!</string>
<!-- About -->
@ -184,15 +186,15 @@
<string name="about_thekinrar">Busca de instâncias:</string>
<string name="about_thekinrar_action">instances.social</string>
<string name="thanks_text_logo">Designer do ícone:</string>
<string name="thanks_text_banner">Banner designer:</string>
<string name="thanks_text_banner">Designer do banner:</string>
<!-- Conversation -->
<string name="conversation">Conversa</string>
<!-- Accounts -->
<string name="no_accounts">Sem contas para exibir</string>
<string name="no_follow_request">Sem solicitações de seguidor</string>
<string name="status_cnt">Toots \n %1$s</string>
<string name="following_cnt">Following \n %1$s</string>
<string name="followers_cnt">Followers \n %1$s</string>
<string name="following_cnt">Seguindo \n %1$s</string>
<string name="followers_cnt">Seguidores \n %1$s</string>
<string name="pins_cnt">Fixado \n %d</string>
<string name="authorize">Autorizar</string>
<string name="reject">Rejeitar</string>
@ -205,9 +207,9 @@
<string name="toot_scheduled_date">A data de agendamento deve ser após o momento atual!</string>
<string name="warning_battery">Economia de bateria ativada! Pode não funcionar como esperado.</string>
<!-- timed mute -->
<string name="timed_mute_date_error">The time for muting should be greater than one minute.</string>
<string name="timed_mute_date">%1$s has been muted until %2$s.\n You can unmute this account from his/her profile page.</string>
<string name="timed_mute_profile">%1$s is muted until %2$s.\n Click here to unmute the account.</string>
<string name="timed_mute_date_error">O tempo de bloqueio deve ser maior do que um minuto.</string>
<string name="timed_mute_date">%1$s foi silenciado até %2$s. \n Você pode reativar essa conta de sua página de perfil.</string>
<string name="timed_mute_profile">%1$s está silenciado até %2$s. \n Clique aqui para reativar a conta.</string>
<!-- Notifications -->
<string name="no_notifications">Sem notificações para exibir</string>
<string name="notif_mention">mencionou você</string>
@ -273,12 +275,12 @@
<string name="set_attachment_action">Carregar mídia</string>
<string name="load_attachment">Carregar imagens</string>
<string name="load_attachment_spoiler">Mostrar mais…</string>
<string name="load_attachment_spoiler_less">Show less…</string>
<string name="load_attachment_spoiler_less">Exibir menos…</string>
<string name="load_sensitive_attachment">Conteúdo sensível</string>
<string name="set_display_reply">Exibir mensagem anterior nas respostas</string>
<string name="set_display_local">Exibir timeline local</string>
<string name="set_display_global">Exibir timeline federada</string>
<string name="set_disable_gif">Disable GIF avatars</string>
<string name="set_disable_gif">Desabilitar avatares GIF</string>
<string name="set_folder_title">Caminho: </string>
<string name="set_auto_store_toot">Salvar rascunhos automaticamente</string>
<string name="set_bubble_counter">Exibir contadores</string>
@ -299,13 +301,14 @@
<string name="set_nsfw_timeout">Tempo até visualização de NSFW expirar (segundos, 0 significa desligado)</string>
<string name="settings_title_profile">Editar perfil</string>
<string name="set_profile_description">Bio…</string>
<string name="set_lock_account">Lock account</string>
<string name="set_lock_account">Bloquear conta</string>
<string name="set_save_changes">Salvar mudanças</string>
<string name="set_header_picture_overlay">Escolher cabeçalho</string>
<string name="set_preview_reply">Exibir número de respostas na página inicial</string>
<string name="set_preview_reply_pp">Exibir imagens de perfil?</string>
<string name="set_multiaccount_actions">Permitir interações entre contas?</string>
<string name="set_fit_preview">Fit preview images</string>
<string name="set_fit_preview">Ajuste da visualização de imagens</string>
<string name="set_automatically_split_toot">Automatically split toots over 500 chars in replies</string>
<string name="note_no_space">Você já usou os 160 caracteres permitidos!</string>
<string name="username_no_space">Você já usou os 30 caracteres permitidos!</string>
<string name="settings_title_hour">Horário das notificações:</string>
@ -316,9 +319,9 @@
<string name="settings_hour_init">Horário de início</string>
<string name="settings_hour_end">Horário de fim</string>
<string name="embedded_browser">Usar navegador interno</string>
<string name="custom_tabs">Custom tabs</string>
<string name="custom_tabs">Abas personalizadas</string>
<string name="use_javascript">Habilitar Javascript</string>
<string name="expand_cw">Automatically expand cw</string>
<string name="expand_cw">Expandir cw automaticamente</string>
<string name="use_cookies">Habilitar cookies de terceiros</string>
<string name="settings_ui_layout">Modelo das timelines: </string>
<string-array name="settings_menu_tabs">
@ -329,15 +332,17 @@
<string-array name="settings_translation">
<item>Yandex</item>
<item>Não</item>
<item>No</item>
</string-array>
<string name="your_api_key">Your API key, you can leave blank for Yandex</string>
<string-array name="settings_theme">
<item>Dark</item>
<item>Light</item>
<item>Black</item>
<item>Escuro</item>
<item>Claro</item>
<item>Preto</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
<item>512 Kb</item>
<item>Não</item>
<item>512 kb</item>
<item>1 Mb</item>
<item>2 Mb</item>
</string-array>
@ -364,8 +369,8 @@
<string name="request_sent">Solicitação enviada</string>
<string name="followed_by">Segue você</string>
<string name="action_search">Busca</string>
<string name="set_capitalize">First letter in capital for replies</string>
<string name="set_resize_picture">Resize pictures</string>
<string name="set_capitalize">Primeira letra maiúscula para respostas</string>
<string name="set_resize_picture">Redimensionar fotos</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Notificações</string>
<string name="settings_popup_message">
@ -380,25 +385,25 @@
<string name="cache_units">Mb</string>
<string name="toast_cache_clear">Cache limpo! %1$s foram liberados</string>
<!-- ACTIVITY CACHE -->
<string name="action_sync">Synchronize</string>
<string name="action_filter">Filter</string>
<string name="owner_cached_toots">Your toots</string>
<string name="v_public">Public</string>
<string name="v_unlisted">Unlisted</string>
<string name="v_private">Private</string>
<string name="v_direct">Direct</string>
<string name="v_keywords">Some keywords</string>
<string name="show_media">Show media</string>
<string name="show_pinned">Show pinned</string>
<string name="filter_no_result">No matching result found!</string>
<string name="data_backup_toots">Backup toots for %1$s</string>
<string name="data_backup_success">%1$s new toots have been imported</string>
<string name="action_sync">Sincronizar</string>
<string name="action_filter">Filtro</string>
<string name="owner_cached_toots">Seus toots</string>
<string name="v_public">Público</string>
<string name="v_unlisted">Não Listado</string>
<string name="v_private">Privado</string>
<string name="v_direct">Direto</string>
<string name="v_keywords">Algumas palavras-chave</string>
<string name="show_media">Exibir mídia</string>
<string name="show_pinned">Mostrar fixado</string>
<string name="filter_no_result">Nenhum resultado correspondente encontrado!</string>
<string name="data_backup_toots">Fazer backup dos toots por %1$s</string>
<string name="data_backup_success">%1$s novos toots foram importados</string>
<string-array name="filter_select">
<item>No</item>
<item>Only</item>
<item>Both</item>
<item>Não</item>
<item>Apenas</item>
<item>Ambos</item>
</string-array>
<string name="owner_cached_toots_empty">No toots were found in database. Please, use the synchronize button from the menu to retrieve them.</string>
<string name="owner_cached_toots_empty">Nenhum toot foi encontrado no banco de dados. Por favor, use o botão de sincronização no menu para recuperá-los.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Dados salvos</string>
<string name="privacy_data">
@ -425,11 +430,11 @@
</string>
<string name="privacy_API_title">Rastreamento e bibliotecas</string>
<string name="privacy_API">
The application <b>does not use tracking tools</b> (audience measurement, error reporting, etc.) and does not contain any advertising.\n\n
The use of libraries is minimized: \n
- <b>Glide</b>: To manage media\n
- <b>Android-Job</b>: To manage services\n
- <b>PhotoView</b>: To manage images\n
O aplicativo <b>não usa ferramentas de rastreamento</b> (medição de audiência, relatórios de erro, etc) e não contém qualquer propaganda.\n\n
O uso de bibliotecas é minimizado: \n
- <b>Glide</b>: Para gerenciar mídia\n
- <b>Android-Job</b>: Para gerenciar serviços\n
- <b>PhotoView</b>: Para gerenciar imagens\n
</string>
<string name="privacy_API_yandex_title">Tradução de toots</string>
<string name="privacy_API_yandex_authorizations">
@ -442,51 +447,52 @@
<string name="thanks_text_dev">
Agradecimentos a:
</string>
<string name="filter_regex">Filter out by regular expressions</string>
<string name="search">Search</string>
<string name="delete">Delete</string>
<string name="fetch_more_toots">Fetch more toots…</string>
<string name="filter_regex">Filtrar por expressões regulares</string>
<string name="search">Busca</string>
<string name="delete">Apagar</string>
<string name="fetch_more_toots">Buscar mais toots…</string>
<!-- About lists -->
<string name="action_lists">Lists</string>
<string name="action_lists_confirm_delete">Are you sure you want to permanently delete this list?</string>
<string name="action_lists_empty_content">There is nothing in this list yet. When members of this list post new statuses, they will appear here.</string>
<string name="action_lists_add_to">Add to list</string>
<string name="action_lists_remove_from">Remove from list</string>
<string name="action_lists_create">Add list</string>
<string name="action_lists_delete">Delete list</string>
<string name="action_lists_update">Edit list</string>
<string name="action_lists_title_placeholder">New list title</string>
<string name="action_lists_search_users">Search among people you follow</string>
<string name="action_lists_owner">Your lists</string>
<string name="action_lists">Listas</string>
<string name="action_lists_confirm_delete">Tem certeza que deseja apagar permanentemente esta lista?</string>
<string name="action_lists_empty_content">Não há nada nesta lista ainda. Quando membros desta lista postarem novos status, eles aparecerão aqui.</string>
<string name="action_lists_add_to">Adicionar à lista</string>
<string name="action_lists_remove_from">Remover da lista</string>
<string name="action_lists_create">Adicionar lista</string>
<string name="action_lists_delete">Apagar lista</string>
<string name="action_lists_update">Editar lista</string>
<string name="action_lists_title_placeholder">Título da nova lista</string>
<string name="action_lists_search_users">Procure entre pessoas que você segue</string>
<string name="action_lists_owner">Suas listas</string>
<!-- Migration -->
<string name="account_moved_to">%1$s has moved to %2$s</string>
<string name="show_boost_count">Show boosts/favourites count</string>
<string name="issue_login_title">Authentication does not work?</string>
<string name="account_moved_to">%1$s foi movido para %2$s</string>
<string name="show_boost_count">Mostrar a contagem de compartilhamentos/favoritos</string>
<string name="issue_login_title">Autenticação não funciona?</string>
<string name="issue_login_message">
<b>Here are some checks that might help:</b>\n\n
- Check there is no spelling mistakes in the instance name\n\n
- Check that your instance is not down\n\n
- If you use the two-factor authentication (2FA), please use the link at the bottom (once the instance name is filled)\n\n
- You can also use this link without using the 2FA\n\n
- If it still does not work, please raise an issue on Github at https://github.com/stom79/mastalab/issues
<b>Aqui estão algumas verificações que podem ajudar:</b>\n\n
- Verifique se não há erros de digitação no nome da instância\n\n
- Verifique se a sua instância não está fora do ar\n\n
- Se você utiliza a autenticação de dois fatores (2FA), use o link na parte inferior (uma vez que o nome da instância estiver preenchido) \n\n
- Você também pode usar este link sem usar o 2FA\n\n
- Se ainda não funcionar, por favor, crie um issue no Github em https://github.com/stom79/mastalab/issues
</string>
<string name="media_ready">Media has been loaded. Click here to display it.</string>
<string name="data_export_start">This action can be quite long. You will be notified when it will be finished.</string>
<string name="data_export_running">Still running, please wait</string>
<string name="data_export">Export statuses</string>
<string name="data_export_toots">Export statuses for %1$s</string>
<string name="data_export_success">%1$s toots out of %2$s have been exported.</string>
<string name="data_export_error">Something went wrong when exporting data for %1$s</string>
<string name="media_ready">A mídia foi carregada. Clique aqui para exibi-la.</string>
<string name="data_export_start">Esta ação pode ser bastante longa. Você será notificado quando ela será terminada.</string>
<string name="data_export_running">Ainda em execução, por favor aguarde</string>
<string name="data_export">Exportar status</string>
<string name="data_export_toots">Exportar status para %1$s</string>
<string name="data_export_success">%1$s toots de %2$s foram exportados.</string>
<string name="data_export_error">Algo deu errado enquanto exportava dados para %1$s</string>
<!-- Proxy -->
<string name="proxy_set">Proxy</string>
<string name="proxy_type">Type</string>
<string name="proxy_enable">Enable proxy?</string>
<string name="poxy_host">Host</string>
<string name="poxy_port">Port</string>
<string name="proxy_type">Tipo</string>
<string name="proxy_enable">Habilitar o proxy?</string>
<string name="poxy_host">Servidor</string>
<string name="poxy_port">Porta</string>
<string name="poxy_login">Login</string>
<string name="poxy_password">Password</string>
<string name="set_theme">Theme:</string>
<string name="set_compact_mode">Compact mode</string>
<string name="set_share_details">Add toot details when sharing</string>
<string name="support_the_app_on_liberapay">Support the app on Liberapay</string>
<string name="poxy_password">Senha</string>
<string name="set_theme">Tema:</string>
<string name="set_compact_mode">Modo compacto</string>
<string name="set_share_details">Adicionar detalhes do toot quando compartilhar</string>
<string name="support_the_app_on_liberapay">Suporte a app na Liberapay</string>
<string name="alert_regex">Há um erro na expressão regular!</string>
</resources>

View File

@ -118,6 +118,7 @@
<string name="more_action_6">Distribuie</string>
<string name="more_action_7">Menționează</string>
<string name="more_action_8">Timed mute</string>
<string name="more_action_9">Delete &amp; re-draft</string>
<string-array name="more_action_confirm">
<item>Dezactivează acest cont?</item>
<item>Blochează acest cont?</item>
@ -125,6 +126,7 @@
</string-array>
<string-array name="more_action_owner_confirm">
<item>Eliminați această notiță?</item>
<item>Delete &amp; re-draft this toot?</item>
</string-array>
<plurals name="preview_replies">
<item quantity="one">%d răspuns</item>
@ -309,6 +311,7 @@
<string name="set_preview_reply_pp">Afișează poze de profil?</string>
<string name="set_multiaccount_actions">Permite interacțiuni între conturi?</string>
<string name="set_fit_preview">Fit preview images</string>
<string name="set_automatically_split_toot">Automatically split toots over 500 chars in replies</string>
<string name="note_no_space">Ai atins 160 de caractere permise!</string>
<string name="username_no_space">Ai atins 30 de caractere permise!</string>
<string name="settings_title_hour">Fus orar pentru notificări:</string>
@ -332,7 +335,9 @@
<string-array name="settings_translation">
<item>Yandex</item>
<item>Nu</item>
<item>No</item>
</string-array>
<string name="your_api_key">Your API key, you can leave blank for Yandex</string>
<string-array name="settings_theme">
<item>Dark</item>
<item>Light</item>
@ -489,4 +494,5 @@ Vă mulțumesc:
<string name="set_compact_mode">Compact mode</string>
<string name="set_share_details">Add toot details when sharing</string>
<string name="support_the_app_on_liberapay">Support the app on Liberapay</string>
<string name="alert_regex">There is an error in the regular expression!</string>
</resources>

View File

@ -90,7 +90,7 @@
<string name="send_email">Отправить эл. письмо</string>
<string name="choose_file">Выберите файл</string>
<string name="choose_file_error">Файл не найден!</string>
<string name="click_to_change">Нажмите на путь для изменения</string>
<string name="click_to_change">Нажмите для изменения</string>
<string name="failed">Ошибка!</string>
<string name="scheduled_toots">Запланированные toots</string>
<string name="disclaimer_full">Информация, представленная ниже, не может отражать профиль пользователя полностью.</string>
@ -118,6 +118,7 @@
<string name="more_action_6">Поделиться</string>
<string name="more_action_7">Упомянуть</string>
<string name="more_action_8">Временно заглушить</string>
<string name="more_action_9">Delete &amp; re-draft</string>
<string-array name="more_action_confirm">
<item>Заглушить этот аккаунт?</item>
<item>Блокировать этот аккаунт?</item>
@ -125,6 +126,7 @@
</string-array>
<string-array name="more_action_owner_confirm">
<item>Удалить этот toot?</item>
<item>Delete &amp; re-draft this toot?</item>
</string-array>
<plurals name="preview_replies">
<item quantity="one">%d ответ</item>
@ -244,8 +246,8 @@
<string name="toast_unblock">Аккаунт больше не заблокирован!</string>
<string name="toast_mute">Аккаунт был приглушён!</string>
<string name="toast_unmute">Аккаунт более не пригушён!</string>
<string name="toast_follow">За аккаунтом следуют подписчики!</string>
<string name="toast_unfollow">Аккаунт более не читаемый!</string>
<string name="toast_follow">Вы подписались на этот аккаунт!</string>
<string name="toast_unfollow">Вы больше не подписаны!</string>
<string name="toast_reblog">Toot был поднят!</string>
<string name="toast_unreblog">Toot более не поднят!</string>
<string name="toast_favourite">Toot был добавлен в избранные!</string>
@ -284,7 +286,7 @@
<string name="set_display_reply">Отображать предыдущее сообщение в ответах</string>
<string name="set_display_local">Отображать локальную ленту</string>
<string name="set_display_global">Отображать ленту федерации</string>
<string name="set_disable_gif">Отключить GIF-аватары</string>
<string name="set_disable_gif">Использовать GIF-аватары</string>
<string name="set_folder_title">Путь: </string>
<string name="set_auto_store_toot">Сохранять черновики автоматически</string>
<string name="set_bubble_counter">Показывать счётчики</string>
@ -311,7 +313,8 @@
<string name="set_preview_reply">Отображать количество ответов в домашней ленте</string>
<string name="set_preview_reply_pp">Отображение изображения профиля?</string>
<string name="set_multiaccount_actions">Разрешить взаимодействие между аккаунтами?</string>
<string name="set_fit_preview">Fit preview images</string>
<string name="set_fit_preview">Показ масштабируемых изображений</string>
<string name="set_automatically_split_toot">Automatically split toots over 500 chars in replies</string>
<string name="note_no_space">Вы достигли 160 символов!</string>
<string name="username_no_space">Вы достигли 30 символов!</string>
<string name="settings_title_hour">Промежутки времени для уведомлений:</string>
@ -335,11 +338,13 @@
<string-array name="settings_translation">
<item>Яндекс</item>
<item>Нет</item>
<item>No</item>
</string-array>
<string name="your_api_key">Your API key, you can leave blank for Yandex</string>
<string-array name="settings_theme">
<item>Dark</item>
<item>Light</item>
<item>Black</item>
<item>Темное</item>
<item>Светлое</item>
<item>Черное</item>
</string-array>
<string-array name="settings_resize_picture">
<item>Нет</item>
@ -347,7 +352,7 @@
<item>1 Мб</item>
<item>2 Мб</item>
</string-array>
<string name="set_led_colour">Задать цвет LED:</string>
<string name="set_led_colour">Цвет светодиода:</string>
<string-array name="led_colours">
<item>Синий</item>
<item>Бирюзовый</item>
@ -431,8 +436,8 @@
<string name="privacy_API_title">Отслеживание и Библиотеки</string>
<string name="privacy_API">
Приложение <b>не использует инструменты для отслеживания</b> (замеры аудитории, отчёты об ошибках, и т. д.) и не содержит какой-либо рекламы.\n\n
Использование библиотек минимизированно: \n
- <b>Glide</b>: Для управления файлами\n
Использование библиотек минимизированно: \n
- <b>Glide</b>: Для управления файлами\n
- <b>Android-Job</b>: Для управления сервисами\n
- <b>PhotoView</b>: Для управления изображениями\n
</string>
@ -489,8 +494,9 @@
<string name="poxy_port">Порт</string>
<string name="poxy_login">Логин</string>
<string name="poxy_password">Пароль</string>
<string name="set_theme">Theme:</string>
<string name="set_compact_mode">Compact mode</string>
<string name="set_theme">Оформление:</string>
<string name="set_compact_mode">Компактный режим</string>
<string name="set_share_details">Add toot details when sharing</string>
<string name="support_the_app_on_liberapay">Support the app on Liberapay</string>
<string name="alert_regex">There is an error in the regular expression!</string>
</resources>

View File

@ -118,6 +118,7 @@
<string name="more_action_6">Подели</string>
<string name="more_action_7">Спомени</string>
<string name="more_action_8">Временски ограничено ућуткивање</string>
<string name="more_action_9">Избриши &amp; и поново изради</string>
<string-array name="more_action_confirm">
<item>Ућуткај овај налог?</item>
<item>Блокирај овај налог?</item>
@ -125,6 +126,7 @@
</string-array>
<string-array name="more_action_owner_confirm">
<item>Уклони овај тут?</item>
<item>Избриши &amp; и поново напиши овај тут?</item>
</string-array>
<plurals name="preview_replies">
<item quantity="one">%d одговор</item>
@ -309,6 +311,7 @@
<string name="set_preview_reply_pp">Прикажи профилну слику?</string>
<string name="set_multiaccount_actions">Дозволи интеракције између налога?</string>
<string name="set_fit_preview">Прилагоди преглед слике да стане</string>
<string name="set_automatically_split_toot">Automatically split toots over 500 chars in replies</string>
<string name="note_no_space">Достигли сте дозвољених 160 карактера!</string>
<string name="username_no_space">Достигли сте дозвољених 30 карактера!</string>
<string name="settings_title_hour">Термин за обавештења:</string>
@ -332,11 +335,13 @@
<string-array name="settings_translation">
<item>Yandex</item>
<item>Не</item>
<item>Не</item>
</string-array>
<string name="your_api_key">Ваш API кључ, можете оставити празно за Yandex</string>
<string-array name="settings_theme">
<item>Dark</item>
<item>Light</item>
<item>Black</item>
<item>Тамна</item>
<item>Светла</item>
<item>Црна</item>
</string-array>
<string-array name="settings_resize_picture">
<item>Не</item>
@ -488,8 +493,9 @@
<string name="poxy_port">Порт</string>
<string name="poxy_login">Пријава</string>
<string name="poxy_password">Лозинка</string>
<string name="set_theme">Theme:</string>
<string name="set_compact_mode">Compact mode</string>
<string name="set_share_details">Add toot details when sharing</string>
<string name="support_the_app_on_liberapay">Support the app on Liberapay</string>
<string name="set_theme">Тема:</string>
<string name="set_compact_mode">Сажети режим</string>
<string name="set_share_details">Додај детаље тута приликом дељења</string>
<string name="support_the_app_on_liberapay">Подржи апликацију на Liberapay-у</string>
<string name="alert_regex">Постоји грешка у регуларном изразу!</string>
</resources>

View File

@ -1,57 +1,57 @@
<?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com-->
<resources>
<string name="navigation_drawer_open">Open the menu</string>
<string name="navigation_drawer_close">Close the menu</string>
<string name="action_about">About</string>
<string name="action_about_instance">About the instance</string>
<string name="action_privacy">Privacy</string>
<string name="navigation_drawer_open">Öppna menyn</string>
<string name="navigation_drawer_close">Stäng menyn</string>
<string name="action_about">Om</string>
<string name="action_about_instance">Om instansen</string>
<string name="action_privacy">Sekretess</string>
<string name="action_cache">Cache</string>
<string name="action_logout">Logout</string>
<string name="login">Login</string>
<string name="action_logout">Logga ut</string>
<string name="login">Logga in</string>
<!-- common -->
<string name="close">Close</string>
<string name="yes">Yes</string>
<string name="no">No</string>
<string name="cancel">Cancel</string>
<string name="download">Download</string>
<string name="download_file">Download %1$s</string>
<string name="download_over">Download complete</string>
<string name="save_file">Save %1$s</string>
<string name="save_over">Media saved</string>
<string name="download_from" formatted="false">File: %1$s</string>
<string name="password">Password</string>
<string name="email">Email</string>
<string name="accounts">Accounts</string>
<string name="close">Stäng</string>
<string name="yes">Ja</string>
<string name="no">Nej</string>
<string name="cancel">Avbryt</string>
<string name="download">Nerladdning</string>
<string name="download_file">Nerladdning %1$s</string>
<string name="download_over">Nedladdning klar</string>
<string name="save_file">Spara %1$s</string>
<string name="save_over">Media sparad</string>
<string name="download_from" formatted="false">Fil: %1$s</string>
<string name="password">Lösenord</string>
<string name="email">E-post</string>
<string name="accounts">Konton</string>
<string name="toots">Toots</string>
<string name="tags">Tags</string>
<string name="tags">Taggar</string>
<string name="token">Token</string>
<string name="save">Save</string>
<string name="restore">Restore</string>
<string name="two_factor_authentification">Two-step authentication?</string>
<string name="other_instance">Other instance than mastodon.etalab.gouv.fr?</string>
<string name="no_result">No results!</string>
<string name="instance">Instance</string>
<string name="instance_example">Instance: mastodon.social</string>
<string name="toast_account_changed" formatted="false">Now works with the account %1$s</string>
<string name="add_account">Add an account</string>
<string name="clipboard">The content of the toot has been copied to the clipboard</string>
<string name="change">Change</string>
<string name="choose_picture">Select a picture</string>
<string name="clear">Clean</string>
<string name="microphone">Microphone</string>
<string name="camera">Camera</string>
<string name="speech_prompt">Please, say something</string>
<string name="speech_not_supported">Sorry! Your device does not support the voice input!</string>
<string name="delete_all">Delete all</string>
<string name="translate_toot">Translate this toot.</string>
<string name="schedule">Schedule</string>
<string name="text_size">Text and icon sizes</string>
<string name="text_size_change">Change the current text size:</string>
<string name="icon_size_change">Change the current icon size:</string>
<string name="next">Next</string>
<string name="previous">Previous</string>
<string name="open_with">Open with</string>
<string name="save">Spara</string>
<string name="restore">Återställ</string>
<string name="two_factor_authentification">Tvåfaktorsautentisering?</string>
<string name="other_instance">Annan instans än mastodon.etalab.gouv.fr?</string>
<string name="no_result">Inga resultat!</string>
<string name="instance">Instans</string>
<string name="instance_example">Instans: mastodon.social</string>
<string name="toast_account_changed" formatted="false">Fungerar nu med kontot %1$s</string>
<string name="add_account">Lägg till ett konto</string>
<string name="clipboard">Tootens innehåll har kopierats till urklipp</string>
<string name="change">Ändra</string>
<string name="choose_picture">Välj en bild</string>
<string name="clear">Rengör</string>
<string name="microphone">Mikrofon</string>
<string name="camera">Kamera</string>
<string name="speech_prompt">Var god säg något</string>
<string name="speech_not_supported">Tyvärr stöder inte din enhet röstinmatning!</string>
<string name="delete_all">Radera alla</string>
<string name="translate_toot">Översätt detta toot.</string>
<string name="schedule">Schema</string>
<string name="text_size">Storlek av text och ikoner</string>
<string name="text_size_change">Ändra textstorleken:</string>
<string name="icon_size_change">Ändra ikonstorleken:</string>
<string name="next">Nästa</string>
<string name="previous">Föregående</string>
<string name="open_with">Öppna med</string>
<string name="validate">Validate</string>
<string name="media">Media</string>
<string name="share_with">Share with</string>
@ -104,9 +104,9 @@
<string name="reblog_added">The toot was boosted!</string>
<string name="reblog_removed">The toot is no longer boosted!</string>
<string name="reblog_by">Boosted by %1$s</string>
<string name="favourite_add">Add this toot to your favourites?</string>
<string name="favourite_remove">Remove this toot from your favourites?</string>
<string name="reblog_add">Boost this toot?</string>
<string name="favourite_add">Lägg till detta toot till dina favoriter?</string>
<string name="favourite_remove">Ta bort detta toot från dina favoriter?</string>
<string name="reblog_add">Boosta detta toot?</string>
<string name="reblog_remove">Unboost this toot?</string>
<string name="pin_add">Pin this toot?</string>
<string name="pin_remove">Unpin this toot?</string>
@ -118,6 +118,7 @@
<string name="more_action_6">Share</string>
<string name="more_action_7">Mention</string>
<string name="more_action_8">Timed mute</string>
<string name="more_action_9">Delete &amp; re-draft</string>
<string-array name="more_action_confirm">
<item>Mute this account?</item>
<item>Block this account?</item>
@ -125,6 +126,7 @@
</string-array>
<string-array name="more_action_owner_confirm">
<item>Remove this toot?</item>
<item>Delete &amp; re-draft this toot?</item>
</string-array>
<plurals name="preview_replies">
<item quantity="one">%d reply</item>
@ -165,7 +167,7 @@
<item>Post to followers only</item>
<item>Post to mentioned users only</item>
</string-array>
<string name="no_draft">No draft!</string>
<string name="no_draft">No drafts!</string>
<string name="choose_toot">Choose a toot</string>
<string name="choose_accounts">Choose an account</string>
<string name="select_accounts">Select some accounts</string>
@ -306,6 +308,7 @@
<string name="set_preview_reply_pp">Display profile pictures?</string>
<string name="set_multiaccount_actions">Allow interactions between accounts?</string>
<string name="set_fit_preview">Fit preview images</string>
<string name="set_automatically_split_toot">Automatically split toots over 500 chars in replies</string>
<string name="note_no_space">You have reached the 160 characters allowed!</string>
<string name="username_no_space">You have reached the 30 characters allowed!</string>
<string name="settings_title_hour">Time slot for notifications:</string>
@ -328,8 +331,10 @@
</string-array>
<string-array name="settings_translation">
<item>Yandex</item>
<item>DeepL</item>
<item>No</item>
</string-array>
<string name="your_api_key">Your API key, you can leave blank for Yandex</string>
<string-array name="settings_theme">
<item>Dark</item>
<item>Light</item>
@ -489,4 +494,5 @@
<string name="set_compact_mode">Compact mode</string>
<string name="set_share_details">Add toot details when sharing</string>
<string name="support_the_app_on_liberapay">Support the app on Liberapay</string>
<string name="alert_regex">There is an error in the regular expression!</string>
</resources>

View File

@ -118,6 +118,7 @@
<string name="more_action_6">Paylaş</string>
<string name="more_action_7">Bahset</string>
<string name="more_action_8">Zamanlanmış susturma</string>
<string name="more_action_9">Delete &amp; re-draft</string>
<string-array name="more_action_confirm">
<item>Bu hesabı sustur?</item>
<item>Bu hesabı engelle?</item>
@ -125,6 +126,7 @@
</string-array>
<string-array name="more_action_owner_confirm">
<item>Bu modülğ sil?</item>
<item>Delete &amp; re-draft this toot?</item>
</string-array>
<plurals name="preview_replies">
<item quantity="one">%d cevap</item>
@ -306,6 +308,7 @@
<string name="set_preview_reply_pp">Profil resimleri görüntülensin mi?</string>
<string name="set_multiaccount_actions">Hesapları arasındaki etkileşimler izin verilsin mi?</string>
<string name="set_fit_preview">Fit preview images</string>
<string name="set_automatically_split_toot">Automatically split toots over 500 chars in replies</string>
<string name="note_no_space">160 karakter sınırına ulaştınız!</string>
<string name="username_no_space">30 karakter sınırına ulaştınız!</string>
<string name="settings_title_hour">Bildirimler için zaman aralığı:</string>
@ -329,7 +332,9 @@
<string-array name="settings_translation">
<item>Yandex</item>
<item>Hayır</item>
<item>No</item>
</string-array>
<string name="your_api_key">Your API key, you can leave blank for Yandex</string>
<string-array name="settings_theme">
<item>Dark</item>
<item>Light</item>
@ -482,4 +487,5 @@ Teşekkürler: </string>
<string name="set_compact_mode">Compact mode</string>
<string name="set_share_details">Add toot details when sharing</string>
<string name="support_the_app_on_liberapay">Support the app on Liberapay</string>
<string name="alert_regex">There is an error in the regular expression!</string>
</resources>

Some files were not shown because too many files have changed in this diff Show More