Merge branch 'develop'

This commit is contained in:
tom79 2019-05-25 19:26:38 +02:00
commit 3873a83311
94 changed files with 2705 additions and 1858 deletions

View File

@ -6,8 +6,8 @@ android {
defaultConfig {
minSdkVersion 16
targetSdkVersion 28
versionCode 270
versionName "2.0.2"
versionCode 273
versionName "2.1.0"
multiDexEnabled true
renderscriptTargetApi 28 as int
renderscriptSupportModeEnabled true
@ -36,9 +36,11 @@ android {
productFlavors {
fdroid {
applicationId "fr.gouv.etalab.mastodon"
buildConfigField "boolean", "DONATIONS", "true"
}
playstore {
applicationId "app.fedilab.android"
buildConfigField "boolean", "DONATIONS", "false"
}
}
packagingOptions {
@ -54,8 +56,8 @@ allprojects {
}
ext.supportLibraryVersion = '28.0.0'
ext.glideLibraryVersion = '4.8.0'
ext.conscryptLibraryVersion = '2.0.0'
ext.evernoteLibraryVersion = '1.2.6'
ext.conscryptLibraryVersion = '2.1.0'
ext.evernoteLibraryVersion = '1.3.0-rc1'
ext.gsonLibraryVersion = '2.8.2'
ext.guavaLibraryVersion = '24.1-android'
ext.photoViewLibraryVersion = '2.1.3'

View File

@ -38,6 +38,7 @@ import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import app.fedilab.android.BuildConfig;
import app.fedilab.android.client.Entities.Account;
import app.fedilab.android.client.Entities.Error;
import app.fedilab.android.client.Entities.Relationship;
@ -209,6 +210,11 @@ public class AboutActivity extends BaseActivity implements OnRetrieveRemoteAccou
startActivity(browserIntent);
}
});
if(BuildConfig.DONATIONS){
about_support.setVisibility(View.VISIBLE);
}else{
about_support.setVisibility(View.GONE);
}
Button paypal = findViewById(R.id.about_support_paypal);
paypal.setOnClickListener(new View.OnClickListener() {
@ -219,6 +225,13 @@ public class AboutActivity extends BaseActivity implements OnRetrieveRemoteAccou
}
});
if(BuildConfig.DONATIONS){
paypal.setVisibility(View.VISIBLE);
}else{
paypal.setVisibility(View.GONE);
}
TextView about_website = findViewById(R.id.about_website);
about_website.setOnClickListener(new View.OnClickListener() {

View File

@ -65,6 +65,7 @@ import android.widget.TextView;
import android.widget.Toast;
import java.lang.reflect.Method;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
@ -72,6 +73,7 @@ import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import app.fedilab.android.BuildConfig;
import app.fedilab.android.client.APIResponse;
import app.fedilab.android.client.Entities.Account;
import app.fedilab.android.client.Entities.Filters;
@ -105,6 +107,7 @@ import app.fedilab.android.services.LiveNotificationService;
import app.fedilab.android.sqlite.AccountDAO;
import app.fedilab.android.sqlite.InstancesDAO;
import app.fedilab.android.sqlite.Sqlite;
import app.fedilab.android.sqlite.TimelineCacheDAO;
import app.fedilab.android.sqlite.TimelinesDAO;
import es.dmoral.toasty.Toasty;
import app.fedilab.android.R;
@ -1055,6 +1058,16 @@ public abstract class BaseMainActivity extends BaseActivity
navigationView.getMenu().findItem(R.id.nav_list).setVisible(false);
}
}
if (!BuildConfig.DONATIONS) {
MenuItem openCollectiveItem = navigationView.getMenu().findItem(R.id.nav_opencollective);
if( openCollectiveItem != null){
openCollectiveItem.setVisible(false);
}
MenuItem partnerShipItem = navigationView.getMenu().findItem(R.id.nav_partnership);
if( partnerShipItem != null){
partnerShipItem.setVisible(false);
}
}
LinearLayout owner_container = headerLayout.findViewById(R.id.main_header_container);
owner_container.setOnClickListener(new View.OnClickListener() {
@ -1135,6 +1148,17 @@ public abstract class BaseMainActivity extends BaseActivity
// Retrieves filters
new ManageFiltersAsyncTask(getApplicationContext(), GET_ALL_FILTER, null, BaseMainActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
/* Clean cache for statuses */
AsyncTask.execute(new Runnable() {
@Override
public void run() {
Date date = new Date( System.currentTimeMillis() - TimeUnit.DAYS.toMillis(10));
String dateString = Helper.dateToString(date);
new TimelineCacheDAO(BaseMainActivity.this, db).removeAfterDate(dateString);
}
});
}
private void manageTimelineList(boolean displayed){
@ -1705,6 +1729,7 @@ public abstract class BaseMainActivity extends BaseActivity
}
@Override
public void onRetrieveMetaData(boolean error, String sharedSubject, String sharedText, String image, String title, String description) {
Bundle b = new Bundle();
@ -2037,6 +2062,12 @@ public abstract class BaseMainActivity extends BaseActivity
bundle.putString("remote_instance", "peertube.social");
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE);
}else if( tl.getType() == ManageTimelines.Type.INSTANCE){
if( tl.getRemoteInstance().getFilteredWith() == null){
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE);
}else{
bundle.putString("currentfilter", tl.getRemoteInstance().getFilteredWith());
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE_FILTERED);
}
bundle.putString("remote_instance", tl.getRemoteInstance().getHost()!=null?tl.getRemoteInstance().getHost():"");
bundle.putString("instanceType", tl.getRemoteInstance().getType());
}else if( tl.getType() == ManageTimelines.Type.LIST){
@ -2128,20 +2159,28 @@ public abstract class BaseMainActivity extends BaseActivity
public void updateHomeCounter(){
if( tabLayout.getTabAt(0) == null )
return;
//noinspection ConstantConditions
View tabHome = tabLayout.getTabAt(0).getCustomView();
if( tabHome == null)
return;
TextView tabCounterHome = tabHome.findViewById(R.id.tab_counter);
tabCounterHome.setText(String.valueOf(countNewStatus));
if( countNewStatus> 0){
//New data are available
//The fragment is not displayed, so the counter is displayed
tabCounterHome.setVisibility(View.VISIBLE);
}else {
tabCounterHome.setVisibility(View.GONE);
int i = 0;
if( timelines != null && timelines.size() > 0){
for(ManageTimelines tl: timelines){
if( tl.getType() == ManageTimelines.Type.HOME){
if( tabLayout.getTabCount() > i) {
View tabHome = tabLayout.getTabAt(i).getCustomView();
if( tabHome != null){
TextView tabCounterHome = tabHome.findViewById(R.id.tab_counter);
tabCounterHome.setText(String.valueOf(countNewStatus));
if( countNewStatus> 0){
//New data are available
//The fragment is not displayed, so the counter is displayed
tabCounterHome.setVisibility(View.VISIBLE);
}else {
tabCounterHome.setVisibility(View.GONE);
}
}
}
}
i++;
}
}
}

View File

@ -133,6 +133,10 @@ public class InstanceActivity extends BaseActivity implements OnRetrieveInstance
return;
}
final Instance instance = apiResponse.getInstance();
if( instance == null){
Toasty.error(getApplicationContext(), getString(R.string.toast_error), Toast.LENGTH_LONG).show();
return;
}
TextView instance_title = findViewById(R.id.instance_title);
TextView instance_description = findViewById(R.id.instance_description);
TextView instance_version = findViewById(R.id.instance_version);

View File

@ -153,7 +153,7 @@ public class InstanceHealthActivity extends BaseActivity {
try {
HashMap<String, String> parameters = new HashMap<>();
parameters.put("name", instance.trim());
final String response = new HttpsConnection(InstanceHealthActivity.this).get("https://instances.social/api/1.0/instances/show", 30, parameters, Helper.THEKINRAR_SECRET_TOKEN );
final String response = new HttpsConnection(InstanceHealthActivity.this, instance).get("https://instances.social/api/1.0/instances/show", 30, parameters, Helper.THEKINRAR_SECRET_TOKEN );
if( response != null)
instanceSocial = API.parseInstanceSocialResponse(getApplicationContext(), new JSONObject(response));
runOnUiThread(new Runnable() {

View File

@ -16,6 +16,7 @@ package app.fedilab.android.activities;
import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
@ -149,7 +150,7 @@ public class LoginActivity extends BaseActivity {
@Override
public void run() {
try {
final String response = new HttpsConnection(LoginActivity.this).post(Helper.instanceWithProtocol(instance) + action, 30, parameters, null);
final String response = new HttpsConnection(LoginActivity.this, instance).post(Helper.instanceWithProtocol(LoginActivity.this, instance) + action, 30, parameters, null);
JSONObject resobj;
try {
resobj = new JSONObject(response);
@ -354,7 +355,7 @@ public class LoginActivity extends BaseActivity {
@Override
public void run() {
try {
final String response = new HttpsConnection(LoginActivity.this).get("https://instances.social/api/1.0" + action, 30, parameters, Helper.THEKINRAR_SECRET_TOKEN);
final String response = new HttpsConnection(LoginActivity.this, instance).get("https://instances.social/api/1.0" + action, 30, parameters, Helper.THEKINRAR_SECRET_TOKEN);
runOnUiThread(new Runnable() {
public void run() {
isLoadingInstance = false;
@ -542,9 +543,9 @@ public class LoginActivity extends BaseActivity {
try {
String response;
if( socialNetwork == UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE)
response = new HttpsConnection(LoginActivity.this).get(Helper.instanceWithProtocol(instance) + actionToken, 30, parameters, null );
response = new HttpsConnection(LoginActivity.this, instance).get(Helper.instanceWithProtocol(getApplicationContext(),instance) + actionToken, 30, parameters, null );
else
response = new HttpsConnection(LoginActivity.this).post(Helper.instanceWithProtocol(instance) + actionToken, 30, parameters, null );
response = new HttpsConnection(LoginActivity.this, instance).post(Helper.instanceWithProtocol(getApplicationContext(), instance) + actionToken, 30, parameters, null );
runOnUiThread(new Runnable() {
public void run() {
JSONObject resobj;
@ -647,9 +648,9 @@ public class LoginActivity extends BaseActivity {
try {
String response;
if( socialNetwork != UpdateAccountInfoAsyncTask.SOCIAL.GNU)
response = new HttpsConnection(LoginActivity.this).post(Helper.instanceWithProtocol(instance) + finalOauthUrl, 30, parameters, null );
response = new HttpsConnection(LoginActivity.this, instance).post(Helper.instanceWithProtocol(getApplicationContext(),instance) + finalOauthUrl, 30, parameters, null );
else {
response = new HttpsConnection(LoginActivity.this).get(Helper.instanceWithProtocol(instance) + finalOauthUrl, 30, null, basicAuth);
response = new HttpsConnection(LoginActivity.this, instance).get(Helper.instanceWithProtocol(getApplicationContext(),instance) + finalOauthUrl, 30, null, basicAuth);
}
runOnUiThread(new Runnable() {
public void run() {
@ -751,7 +752,7 @@ public class LoginActivity extends BaseActivity {
i.putExtra("instance", instance);
startActivity(i);
}else{
String url = redirectUserToAuthorizeAndLogin(socialNetwork, client_id, instance);
String url = redirectUserToAuthorizeAndLogin(getApplicationContext(), socialNetwork, client_id, instance);
Helper.openBrowser(LoginActivity.this, url);
@ -848,13 +849,13 @@ public class LoginActivity extends BaseActivity {
}
public static String redirectUserToAuthorizeAndLogin(UpdateAccountInfoAsyncTask.SOCIAL socialNetwork, String clientId, String instance) {
public static String redirectUserToAuthorizeAndLogin(Context context, UpdateAccountInfoAsyncTask.SOCIAL socialNetwork, String clientId, String instance) {
String queryString = Helper.CLIENT_ID + "="+ clientId;
queryString += "&" + Helper.REDIRECT_URI + "="+ Uri.encode(Helper.REDIRECT_CONTENT_WEB);
queryString += "&" + Helper.RESPONSE_TYPE +"=code";
if( socialNetwork != UpdateAccountInfoAsyncTask.SOCIAL.PIXELFED )
queryString += "&" + Helper.SCOPE +"=" + Helper.OAUTH_SCOPES;
return Helper.instanceWithProtocol(instance) + Helper.EP_AUTHORIZE + "?" + queryString;
return Helper.instanceWithProtocol(context, instance) + Helper.EP_AUTHORIZE + "?" + queryString;
}

View File

@ -115,6 +115,7 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
private boolean scheduleHidden, scheduleHiddenDescription;
private SimpleExoPlayer player;
private boolean isSHaring;
private String instance;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -146,6 +147,7 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
}
}
});
instance = Helper.getLiveInstance(MediaActivity.this);
mSwipeBackLayout.attachToActivity(this);
attachments = getIntent().getParcelableArrayListExtra("mediaArray");
if( getIntent().getExtras() != null)
@ -177,7 +179,7 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
if( attachment != null ) {
progress.setText("0 %");
progress.setVisibility(View.VISIBLE);
new HttpsConnection(MediaActivity.this).download(attachment.getUrl(), MediaActivity.this);
new HttpsConnection(MediaActivity.this, instance).download(attachment.getUrl(), MediaActivity.this);
}
}else {
if (Build.VERSION.SDK_INT >= 23) {
@ -200,7 +202,7 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
if( attachment != null ) {
progress.setText("0 %");
progress.setVisibility(View.VISIBLE);
new HttpsConnection(MediaActivity.this).download(attachment.getUrl(), MediaActivity.this);
new HttpsConnection(MediaActivity.this, instance).download(attachment.getUrl(), MediaActivity.this);
}
}else {
if (Build.VERSION.SDK_INT >= 23) {
@ -329,6 +331,8 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
if (media_description.getVisibility() == View.VISIBLE) {
media_description.setVisibility(View.GONE);
}
if (videoView.getVisibility() == View.VISIBLE)
videoView.hideController();
}
} else {
action_bar_container.setVisibility(View.VISIBLE);
@ -341,6 +345,8 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
media_description.setText("");
media_description.setVisibility(View.GONE);
}
if (videoView.getVisibility() == View.VISIBLE)
videoView.showController();
}
@ -441,7 +447,7 @@ public class MediaActivity extends BaseActivity implements OnDownloadInterface {
pbar_inf.setIndeterminate(false);
pbar_inf.setScaleY(3f);
try {
HttpsURLConnection.setDefaultSSLSocketFactory(new TLSSocketFactory());
HttpsURLConnection.setDefaultSSLSocketFactory(new TLSSocketFactory(instance));
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {

View File

@ -134,7 +134,7 @@ public class PeertubeActivity extends BaseActivity implements OnRetrievePeertube
private ImageView my_pp, send;
private TextView add_comment_read;
private EditText add_comment_write;
private String instance;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -206,7 +206,7 @@ public class PeertubeActivity extends BaseActivity implements OnRetrievePeertube
});
SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
String instance = sharedpreferences.getString(Helper.PREF_INSTANCE, Helper.getLiveInstance(getApplicationContext()));
instance = sharedpreferences.getString(Helper.PREF_INSTANCE, Helper.getLiveInstance(getApplicationContext()));
Account account = new AccountDAO(getApplicationContext(), db).getUniqAccount(userId, instance);
Helper.loadGiF(getApplicationContext(), account.getAvatar(), my_pp);
Bundle b = getIntent().getExtras();
@ -544,7 +544,7 @@ public class PeertubeActivity extends BaseActivity implements OnRetrievePeertube
}
try {
HttpsURLConnection.setDefaultSSLSocketFactory(new TLSSocketFactory());
HttpsURLConnection.setDefaultSSLSocketFactory(new TLSSocketFactory(instance));
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {

View File

@ -90,11 +90,11 @@ public class ReorderTimelinesActivity extends BaseActivity implements OnStartDra
private TextView undo_action;
private List<ManageTimelines> timelines;
private ReorderTabAdapter adapter;
private boolean actionCanBeApplied;
private ManageTimelines timeline;
private boolean isLoadingInstance;
private String oldSearch;
private int theme;
private String instance;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -125,6 +125,7 @@ public class ReorderTimelinesActivity extends BaseActivity implements OnStartDra
style = R.style.Dialog;
}
if( getSupportActionBar() != null)
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
ActionBar actionBar = getSupportActionBar();
@ -171,15 +172,15 @@ public class ReorderTimelinesActivity extends BaseActivity implements OnStartDra
public void run() {
try {
if(radioGroup.getCheckedRadioButtonId() == R.id.mastodon_instance)
new HttpsConnection(ReorderTimelinesActivity.this).get("https://" + instanceName + "/api/v1/timelines/public?local=true", 10, null, null);
new HttpsConnection(ReorderTimelinesActivity.this, null).get("https://" + instanceName + "/api/v1/timelines/public?local=true", 10, null, null);
else if( radioGroup.getCheckedRadioButtonId() == R.id.peertube_instance)
new HttpsConnection(ReorderTimelinesActivity.this).get("https://" + instanceName + "/api/v1/videos/", 10, null, null);
new HttpsConnection(ReorderTimelinesActivity.this, null).get("https://" + instanceName + "/api/v1/videos/", 10, null, null);
else if( radioGroup.getCheckedRadioButtonId() == R.id.pixelfed_instance) {
new HttpsConnection(ReorderTimelinesActivity.this).get("https://" + instanceName + "/api/v1/timelines/public", 10, null, null);
new HttpsConnection(ReorderTimelinesActivity.this, null).get("https://" + instanceName + "/api/v1/timelines/public", 10, null, null);
}else if( radioGroup.getCheckedRadioButtonId() == R.id.misskey_instance) {
new HttpsConnection(ReorderTimelinesActivity.this).post("https://" + instanceName + "/api/notes/local-timeline", 10, null, null);
new HttpsConnection(ReorderTimelinesActivity.this, null).post("https://" + instanceName + "/api/notes/local-timeline", 10, null, null);
}else if( radioGroup.getCheckedRadioButtonId() == R.id.gnu_instance) {
new HttpsConnection(ReorderTimelinesActivity.this).get("https://" + instanceName + "/api/statuses/public_timeline.json", 10, null, null);
new HttpsConnection(ReorderTimelinesActivity.this, null).get("https://" + instanceName + "/api/statuses/public_timeline.json", 10, null, null);
}
runOnUiThread(new Runnable() {
@ -278,7 +279,7 @@ public class ReorderTimelinesActivity extends BaseActivity implements OnStartDra
@Override
public void run() {
try {
final String response = new HttpsConnection(ReorderTimelinesActivity.this).get("https://instances.social/api/1.0" + action, 30, parameters, Helper.THEKINRAR_SECRET_TOKEN);
final String response = new HttpsConnection(ReorderTimelinesActivity.this, null).get("https://instances.social/api/1.0" + action, 30, parameters, Helper.THEKINRAR_SECRET_TOKEN);
runOnUiThread(new Runnable() {
public void run() {
isLoadingInstance = false;
@ -383,43 +384,40 @@ public class ReorderTimelinesActivity extends BaseActivity implements OnStartDra
break;
}
undo_action.setPaintFlags(undo_action.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
actionCanBeApplied = true;
Runnable runnable = new Runnable() {
@Override
public void run() {
undo_container.setVisibility(View.GONE);
SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
switch (manageTimelines.getType()){
case TAG:
new SearchDAO(getApplicationContext(), db).remove(manageTimelines.getTagTimeline().getName());
new TimelinesDAO(getApplicationContext(), db).remove(manageTimelines);
break;
case INSTANCE:
new InstancesDAO(getApplicationContext(), db).remove(manageTimelines.getRemoteInstance().getHost());
new TimelinesDAO(getApplicationContext(), db).remove(manageTimelines);
break;
case LIST:
timeline = manageTimelines;
new ManageListsAsyncTask(getApplicationContext(), ManageListsAsyncTask.action.DELETE_LIST,null, null, manageTimelines.getListTimeline().getId(), null, ReorderTimelinesActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
new TimelinesDAO(getApplicationContext(), db).remove(timeline);
break;
}
updated = true;
}
};
Handler handler = new Handler();
handler.postDelayed(runnable, 4000);
undo_action.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timelines.add(position, manageTimelines);
adapter.notifyItemInserted(position);
undo_container.setVisibility(View.GONE);
actionCanBeApplied = false;
handler.removeCallbacks(runnable);
}
});
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
undo_container.setVisibility(View.GONE);
SQLiteDatabase db = Sqlite.getInstance(getApplicationContext(), Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
if( actionCanBeApplied){
switch (manageTimelines.getType()){
case TAG:
new SearchDAO(getApplicationContext(), db).remove(manageTimelines.getTagTimeline().getName());
new TimelinesDAO(getApplicationContext(), db).remove(manageTimelines);
break;
case INSTANCE:
new InstancesDAO(getApplicationContext(), db).remove(manageTimelines.getRemoteInstance().getHost());
new TimelinesDAO(getApplicationContext(), db).remove(manageTimelines);
break;
case LIST:
timeline = manageTimelines;
new ManageListsAsyncTask(getApplicationContext(), ManageListsAsyncTask.action.DELETE_LIST,null, null, manageTimelines.getListTimeline().getId(), null, ReorderTimelinesActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
new TimelinesDAO(getApplicationContext(), db).remove(timeline);
break;
}
updated = true;
}
}
}, 2000);
}
@Override

View File

@ -1099,14 +1099,14 @@ public class ShowAccountActivity extends BaseActivity implements OnPostActionInt
if( !peertubeAccount) {
//Here we can't know if the instance is a Mastodon one or not
try { //Testing Mastodon
new HttpsConnection(ShowAccountActivity.this).get("https://" + finalInstanceName + "/api/v1/timelines/public?local=true", 10, null, null);
new HttpsConnection(ShowAccountActivity.this, null).get("https://" + finalInstanceName + "/api/v1/timelines/public?local=true", 10, null, null);
}catch (Exception ignored){
new HttpsConnection(ShowAccountActivity.this).get("https://" + finalInstanceName + "/api/v1/videos/", 10, null, null);
new HttpsConnection(ShowAccountActivity.this, null).get("https://" + finalInstanceName + "/api/v1/videos/", 10, null, null);
peertubeAccount = true;
}
}
else
new HttpsConnection(ShowAccountActivity.this).get("https://" + finalInstanceName + "/api/v1/videos/", 10, null, null);
new HttpsConnection(ShowAccountActivity.this, null).get("https://" + finalInstanceName + "/api/v1/videos/", 10, null, null);
runOnUiThread(new Runnable() {
public void run() {

View File

@ -199,7 +199,8 @@ public class TootActivity extends BaseActivity implements OnPostActionInterface,
private AlertDialog alertDialogEmoji;
private String mentionAccount;
private Status idRedirect;
private String userId, instance;
private String userId;
private static String instance;
private Account account;
private ArrayList<String> splitToot;
private int stepSpliToot;
@ -467,7 +468,7 @@ public class TootActivity extends BaseActivity implements OnPostActionInterface,
picture_scrollview.setVisibility(View.VISIBLE);
toot_picture.setEnabled(false);
toot_it.setEnabled(false);
new HttpsConnection(TootActivity.this).upload(bs, fileMention, accountReply!=null?accountReply.getToken():null, TootActivity.this);
new HttpsConnection(TootActivity.this, instance).upload(bs, fileMention, account, TootActivity.this);
}
});
@ -513,7 +514,7 @@ public class TootActivity extends BaseActivity implements OnPostActionInterface,
toot_space_left.setText(String.valueOf(toot_content.length()));
}
if (image != null) {
new HttpsConnection(TootActivity.this).download(image, TootActivity.this);
new HttpsConnection(TootActivity.this, instance).download(image, TootActivity.this);
}
int selectionBefore = toot_content.getSelectionStart();
toot_content.setText(String.format("\n%s", sharedContent));
@ -809,7 +810,7 @@ public class TootActivity extends BaseActivity implements OnPostActionInterface,
}
picture_scrollview.setVisibility(View.VISIBLE);
try {
new asyncPicture(TootActivity.this, accountReply, fileUri).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
new asyncPicture(TootActivity.this, account, fileUri).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
count++;
} catch (Exception e) {
e.printStackTrace();
@ -894,9 +895,9 @@ public class TootActivity extends BaseActivity implements OnPostActionInterface,
String mime = cr.getType(data.getData());
if(mime != null && (mime.toLowerCase().contains("video") || mime.toLowerCase().contains("gif")) ) {
InputStream inputStream = getContentResolver().openInputStream(data.getData());
new HttpsConnection(TootActivity.this).upload(inputStream, filename, accountReply!=null?accountReply.getToken():null, TootActivity.this);
new HttpsConnection(TootActivity.this, instance).upload(inputStream, filename, account, TootActivity.this);
} else if(mime != null && mime.toLowerCase().contains("image")) {
new asyncPicture(TootActivity.this, accountReply, data.getData()).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
new asyncPicture(TootActivity.this, account, data.getData()).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}else {
Toasty.error(getApplicationContext(),getString(R.string.toot_select_image_error),Toast.LENGTH_LONG).show();
}
@ -915,7 +916,7 @@ public class TootActivity extends BaseActivity implements OnPostActionInterface,
toot_content.setSelection(toot_content.getText().length());
}
}else if (requestCode == TAKE_PHOTO && resultCode == RESULT_OK) {
new asyncPicture(TootActivity.this, accountReply, photoFileUri).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
new asyncPicture(TootActivity.this, account, photoFileUri).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
}
@ -936,13 +937,13 @@ public class TootActivity extends BaseActivity implements OnPostActionInterface,
ByteArrayInputStream bs;
WeakReference<Activity> activityWeakReference;
android.net.Uri uriFile;
Account accountReply;
Account account;
boolean error = false;
asyncPicture(Activity activity, Account accountReply, android.net.Uri uri){
asyncPicture(Activity activity, Account account, android.net.Uri uri){
this.activityWeakReference = new WeakReference<>(activity);
this.uriFile = uri;
this.accountReply = accountReply;
this.account = account;
}
@Override
@ -979,7 +980,7 @@ public class TootActivity extends BaseActivity implements OnPostActionInterface,
toot_it.setEnabled(false);
String filename = Helper.getFileName(this.activityWeakReference.get(), uriFile);
filesMap.put(filename, uriFile);
new HttpsConnection(this.activityWeakReference.get()).upload(bs, filename, accountReply != null ? accountReply.getToken() : null, (TootActivity) this.activityWeakReference.get());
new HttpsConnection(this.activityWeakReference.get(), instance).upload(bs, filename,account, (TootActivity) this.activityWeakReference.get());
}
}
}
@ -1002,9 +1003,9 @@ public class TootActivity extends BaseActivity implements OnPostActionInterface,
String mime = cr.getType(imageUri);
if(mime != null && (mime.toLowerCase().contains("video") || mime.toLowerCase().contains("gif")) ) {
InputStream inputStream = getContentResolver().openInputStream(imageUri);
new HttpsConnection(TootActivity.this).upload(inputStream, filename, accountReply!=null?accountReply.getToken():null, TootActivity.this);
new HttpsConnection(TootActivity.this, instance).upload(inputStream, filename, account, TootActivity.this);
} else if(mime != null && mime.toLowerCase().contains("image")) {
new asyncPicture(TootActivity.this, accountReply, intent.getData()).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
new asyncPicture(TootActivity.this, account, intent.getData()).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}else {
Toasty.error(getApplicationContext(),getString(R.string.toot_select_image_error),Toast.LENGTH_LONG).show();
}
@ -1414,7 +1415,8 @@ public class TootActivity extends BaseActivity implements OnPostActionInterface,
final DatePicker datePicker = dialogView.findViewById(R.id.date_picker);
final TimePicker timePicker = dialogView.findViewById(R.id.time_picker);
timePicker.setIs24HourView(true);
if (android.text.format.DateFormat.is24HourFormat(getApplicationContext()))
timePicker.setIs24HourView(true);
Button date_time_cancel = dialogView.findViewById(R.id.date_time_cancel);
final ImageButton date_time_previous = dialogView.findViewById(R.id.date_time_previous);
final ImageButton date_time_next = dialogView.findViewById(R.id.date_time_next);
@ -1525,7 +1527,8 @@ public class TootActivity extends BaseActivity implements OnPostActionInterface,
}*/
SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, 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);
int split_toot_size = sharedpreferences.getInt(Helper.SET_AUTOMATICALLY_SPLIT_TOOTS_SIZE+userId+instance, Helper.SPLIT_TOOT_SIZE);
String tootContent;
if( toot_cw_content.getText() != null && toot_cw_content.getText().toString().trim().length() > 0 )
split_toot_size -= toot_cw_content.getText().toString().trim().length();
@ -1554,17 +1557,17 @@ public class TootActivity extends BaseActivity implements OnPostActionInterface,
}
if( timestamp == null)
if( scheduledstatus == null)
new PostStatusAsyncTask(getApplicationContext(), accountReply, toot, TootActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
new PostStatusAsyncTask(getApplicationContext(), account, toot, TootActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
else {
toot.setScheduled_at(Helper.dateToString(scheduledstatus.getScheduled_date()));
scheduledstatus.setStatus(toot);
isScheduled = true;
new PostActionAsyncTask(getApplicationContext(), API.StatusAction.DELETESCHEDULED, scheduledstatus, TootActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
new PostStatusAsyncTask(getApplicationContext(), accountReply, toot, TootActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
new PostStatusAsyncTask(getApplicationContext(), account, toot, TootActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
else {
toot.setScheduled_at(timestamp);
new PostStatusAsyncTask(getApplicationContext(), accountReply, toot, TootActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
new PostStatusAsyncTask(getApplicationContext(), account, toot, TootActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
}
@ -1796,7 +1799,7 @@ public class TootActivity extends BaseActivity implements OnPostActionInterface,
toot_picture_container.setVisibility(View.VISIBLE);
toot_picture.setEnabled(false);
toot_it.setEnabled(false);
new HttpsConnection(TootActivity.this).upload(bs, filename, accountReply!=null?accountReply.getToken():null, TootActivity.this);
new HttpsConnection(TootActivity.this, instance).upload(bs, filename, account, TootActivity.this);
}
}
@ -1856,7 +1859,7 @@ public class TootActivity extends BaseActivity implements OnPostActionInterface,
builderInner.setPositiveButton(R.string.validate, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
new UpdateDescriptionAttachmentAsyncTask(getApplicationContext(), attachment.getId(), input.getText().toString(), accountReply,TootActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
new UpdateDescriptionAttachmentAsyncTask(getApplicationContext(), attachment.getId(), input.getText().toString(), account,TootActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
attachment.setDescription(input.getText().toString());
addBorder();
dialog.dismiss();
@ -1987,7 +1990,7 @@ public class TootActivity extends BaseActivity implements OnPostActionInterface,
}
final SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, 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);
int split_toot_size = sharedpreferences.getInt(Helper.SET_AUTOMATICALLY_SPLIT_TOOTS_SIZE+userId+instance, Helper.SPLIT_TOOT_SIZE);
int cwSize = toot_cw_content.getText().toString().trim().length();
int size = toot_content.getText().toString().trim().length() + cwSize;
@ -2004,7 +2007,7 @@ public class TootActivity extends BaseActivity implements OnPostActionInterface,
if( apiResponse.getStatuses() != null && apiResponse.getStatuses().size() > 0)
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);
new PostStatusAsyncTask(getApplicationContext(), account, toot, TootActivity.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
return;
}

View File

@ -55,6 +55,7 @@ import app.fedilab.android.sqlite.DomainBlockDAO;
import app.fedilab.android.sqlite.Sqlite;
import app.fedilab.android.webview.MastalabWebChromeClient;
import app.fedilab.android.webview.MastalabWebViewClient;
import app.fedilab.android.webview.ProxyHelper;
import es.dmoral.toasty.Toasty;
import app.fedilab.android.R;
@ -111,6 +112,15 @@ public class WebviewActivity extends BaseActivity {
FrameLayout webview_container = findViewById(R.id.webview_container);
final ViewGroup videoLayout = findViewById(R.id.videoLayout); // Your own view, read class comments
webView.getSettings().setJavaScriptEnabled(true);
boolean proxyEnabled = sharedpreferences.getBoolean(Helper.SET_PROXY_ENABLED, false);
if( proxyEnabled ){
String host = sharedpreferences.getString(Helper.SET_PROXY_HOST, "127.0.0.1");
int port = sharedpreferences.getInt(Helper.SET_PROXY_PORT, 8118);
ProxyHelper.setProxy(getApplicationContext(), webView,host, port,WebviewActivity.class.getName());
}
MastalabWebChromeClient mastalabWebChromeClient = new MastalabWebChromeClient(WebviewActivity.this, webView, webview_container, videoLayout);
mastalabWebChromeClient.setOnToggledFullscreen(new MastalabWebChromeClient.ToggledFullscreenCallback() {
@Override

View File

@ -42,10 +42,13 @@ import android.widget.Toast;
import org.json.JSONException;
import org.json.JSONObject;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.util.HashMap;
import app.fedilab.android.client.HttpsConnection;
import app.fedilab.android.helper.Helper;
import app.fedilab.android.webview.ProxyHelper;
import es.dmoral.toasty.Toasty;
import app.fedilab.android.R;
import app.fedilab.android.asynctasks.UpdateAccountInfoAsyncTask;
@ -129,6 +132,12 @@ public class WebviewConnectActivity extends BaseActivity {
}
});
boolean proxyEnabled = sharedpreferences.getBoolean(Helper.SET_PROXY_ENABLED, false);
if( proxyEnabled ){
String host = sharedpreferences.getString(Helper.SET_PROXY_HOST, "127.0.0.1");
int port = sharedpreferences.getInt(Helper.SET_PROXY_PORT, 8118);
ProxyHelper.setProxy(getApplicationContext(), webView,host, port,WebviewConnectActivity.class.getName());
}
webView.setWebViewClient(new WebViewClient() {
@SuppressWarnings("deprecation")
@ -156,7 +165,7 @@ public class WebviewConnectActivity extends BaseActivity {
@Override
public void run() {
try {
final String response = new HttpsConnection(WebviewConnectActivity.this).post(Helper.instanceWithProtocol(instance) + action, 30, parameters, null);
final String response = new HttpsConnection(WebviewConnectActivity.this, instance).post(Helper.instanceWithProtocol(getApplicationContext(), instance) + action, 30, parameters, null);
JSONObject resobj;
try {
resobj = new JSONObject(response);
@ -179,7 +188,7 @@ public class WebviewConnectActivity extends BaseActivity {
}
});
webView.loadUrl(LoginActivity.redirectUserToAuthorizeAndLogin(social, clientId, instance));
webView.loadUrl(LoginActivity.redirectUserToAuthorizeAndLogin(getApplicationContext(), social, clientId, instance));
}

View File

@ -21,6 +21,7 @@ import java.lang.ref.WeakReference;
import app.fedilab.android.client.API;
import app.fedilab.android.client.APIResponse;
import app.fedilab.android.helper.Helper;
import app.fedilab.android.interfaces.OnRetrieveFeedsAfterBookmarkInterface;
@ -36,18 +37,20 @@ public class RetrieveFeedsAfterBookmarkAsyncTask extends AsyncTask<Void, Void, V
private OnRetrieveFeedsAfterBookmarkInterface listener;
private WeakReference<Context> contextReference;
private String max_id;
private boolean fetchMore;
public RetrieveFeedsAfterBookmarkAsyncTask(Context context, String max_id, OnRetrieveFeedsAfterBookmarkInterface onRetrieveFeedsAfterBookmarkInterface){
public RetrieveFeedsAfterBookmarkAsyncTask(Context context, String max_id, boolean fetchMore, OnRetrieveFeedsAfterBookmarkInterface onRetrieveFeedsAfterBookmarkInterface){
this.contextReference = new WeakReference<>(context);
this.listener = onRetrieveFeedsAfterBookmarkInterface;
this.max_id = max_id;
this.fetchMore = fetchMore;
}
@Override
protected Void doInBackground(Void... params) {
API api = new API(this.contextReference.get());
apiResponse = api.getHomeTimeline(max_id);
apiResponse.setFetchmore(fetchMore);
return null;
}

View File

@ -27,9 +27,11 @@ import app.fedilab.android.client.APIResponse;
import app.fedilab.android.client.Entities.ManageTimelines;
import app.fedilab.android.client.Entities.Peertube;
import app.fedilab.android.client.Entities.RemoteInstance;
import app.fedilab.android.client.Entities.RetrieveFeedsParam;
import app.fedilab.android.client.GNUAPI;
import app.fedilab.android.client.PeertubeAPI;
import app.fedilab.android.helper.FilterToots;
import app.fedilab.android.helper.Helper;
import app.fedilab.android.sqlite.InstancesDAO;
import app.fedilab.android.sqlite.PeertubeFavoritesDAO;
import app.fedilab.android.sqlite.Sqlite;
@ -61,7 +63,9 @@ public class RetrieveFeedsAsyncTask extends AsyncTask<Void, Void, Void> {
private String instanceName,remoteInstance, name;
private boolean cached = false;
private int timelineId;
private String currentfilter;
private String social;
public enum Type{
HOME,
LOCAL,
@ -76,6 +80,7 @@ public class RetrieveFeedsAsyncTask extends AsyncTask<Void, Void, Void> {
CONTEXT,
TAG,
REMOTE_INSTANCE,
REMOTE_INSTANCE_FILTERED,
ART,
PEERTUBE,
NOTIFICATION,
@ -182,6 +187,24 @@ public class RetrieveFeedsAsyncTask extends AsyncTask<Void, Void, Void> {
this.action = Type.REMOTE_INSTANCE;
}
public RetrieveFeedsAsyncTask(Context context, RetrieveFeedsParam retrieveFeedsParam, OnRetrieveFeedsInterface onRetrieveFeedsInterface){
this.contextReference = new WeakReference<>(context);
this.listener = onRetrieveFeedsInterface;
this.action = retrieveFeedsParam.getAction();
this.max_id = retrieveFeedsParam.getMax_id();
this.targetedID = retrieveFeedsParam.getTargetedID();
this.tag = retrieveFeedsParam.getTag();
this.showMediaOnly = retrieveFeedsParam.isShowMediaOnly();
this.showPinned = retrieveFeedsParam.isShowPinned();
this.showReply = retrieveFeedsParam.isShowReply();
this.name = retrieveFeedsParam.getName();
this.currentfilter = retrieveFeedsParam.getCurrentfilter();
this.social = retrieveFeedsParam.getSocial();
this.instanceName = retrieveFeedsParam.getInstanceName();
this.remoteInstance = retrieveFeedsParam.getRemoteInstance();
}
@Override
protected Void doInBackground(Void... params) {
API api = new API(this.contextReference.get());
@ -207,6 +230,24 @@ public class RetrieveFeedsAsyncTask extends AsyncTask<Void, Void, Void> {
case CONVERSATION:
apiResponse = api.getConversationTimeline(max_id);
break;
case REMOTE_INSTANCE_FILTERED:
if( this.social != null && this.social.equals("MASTODON")) {
apiResponse = api.getPublicTimelineTag(this.currentfilter, true, max_id,this.remoteInstance);
if( apiResponse != null){
List<app.fedilab.android.client.Entities.Status> statusesTemp = apiResponse.getStatuses();
if( statusesTemp != null){
for(app.fedilab.android.client.Entities.Status status: statusesTemp){
status.setType(action);
}
}
}
} else if(this.social != null && this.social.equals("GNU") ) {
GNUAPI gnuapi = new GNUAPI(this.contextReference.get());
apiResponse = gnuapi.searchRemote(this.remoteInstance,currentfilter,max_id);
}else {
apiResponse = api.searchPeertube(this.remoteInstance, currentfilter);
}
break;
case REMOTE_INSTANCE:
if( this.name != null && this.remoteInstance != null){ //For Peertube channels
apiResponse = api.getPeertubeChannelVideos(this.remoteInstance, this.name);

View File

@ -89,7 +89,7 @@ public class RetrieveMetaDataAsyncTask extends AsyncTask<Void, Void, Void> {
Pattern descriptionPattern = Pattern.compile("meta[ a-zA-Z=\"'-]+property=[\"']og:description[\"']\\s+content=[\"']([^>]*)[\"']");
Pattern imagePattern = Pattern.compile("meta[ a-zA-Z=\"'-]+property=[\"']og:image[\"']\\s+content=[\"']([^>]*)[\"']");
try {
String response = new HttpsConnection(this.contextWeakReference.get()).get(potentialUrl);
String response = new HttpsConnection(this.contextWeakReference.get(), null).get(potentialUrl);
Matcher matcherTitle = titlePattern.matcher(response);
Matcher matcherDescription = descriptionPattern.matcher(response);
Matcher matcherImage = imagePattern.matcher(response);

View File

@ -41,7 +41,7 @@ public class RetrieveRemoteDataAsyncTask extends AsyncTask<Void, Void, Void> {
public RetrieveRemoteDataAsyncTask(Context context, String username, String instance, OnRetrieveRemoteAccountInterface onRetrieveRemoteAccountInterface){
this.url = Helper.instanceWithProtocol(instance) + "/@" + username;
this.url = Helper.instanceWithProtocol(context, instance) + "/@" + username;
this.listener = onRetrieveRemoteAccountInterface;
this.contextReference = new WeakReference<>(context);
}

View File

@ -179,10 +179,34 @@ public class API {
}
public InstanceNodeInfo getNodeInfo(String domain){
//Try to guess URL scheme for the onion instance
String scheme = "https";
if( domain.endsWith(".onion")){
try {
new HttpsConnection(context, domain).get("http://" + domain, 30, null, null);
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(Helper.SET_ONION_SCHEME + domain, "http");
scheme = "http";
editor.apply();
} catch (IOException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (HttpsConnection.HttpsConnectionException e) {
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(Helper.SET_ONION_SCHEME + domain, "https");
editor.apply();
}
}
String response;
InstanceNodeInfo instanceNodeInfo = new InstanceNodeInfo();
try {
response = new HttpsConnection(context).get("https://" + domain + "/.well-known/nodeinfo", 30, null, null);
response = new HttpsConnection(context, domain).get(scheme+"://" + domain + "/.well-known/nodeinfo", 30, null, null);
JSONArray jsonArray = new JSONObject(response).getJSONArray("links");
ArrayList<NodeInfo> nodeInfos = new ArrayList<>();
try {
@ -198,7 +222,7 @@ public class API {
}
if( nodeInfos.size() > 0){
NodeInfo nodeInfo = nodeInfos.get(0);
response = new HttpsConnection(context).get(nodeInfo.getHref(), 30, null, null);
response = new HttpsConnection(context, this.instance).get(nodeInfo.getHref(), 30, null, null);
JSONObject resobj = new JSONObject(response);
JSONObject jsonObject = resobj.getJSONObject("software");
String name = jsonObject.getString("name").toUpperCase();
@ -229,7 +253,7 @@ public class API {
e.printStackTrace();
} catch (HttpsConnection.HttpsConnectionException e) {
try {
response = new HttpsConnection(context).get("https://" + domain + "/api/v1/instance", 30, null, null);
response = new HttpsConnection(context, this.instance).get(scheme+"://" + domain + "/api/v1/instance", 30, null, null);
JSONObject jsonObject = new JSONObject(response);
instanceNodeInfo.setName("MASTODON");
instanceNodeInfo.setVersion(jsonObject.getString("version"));
@ -288,7 +312,7 @@ public class API {
*/
public APIResponse getInstance() {
try {
String response = new HttpsConnection(context).get(getAbsoluteUrl("/instance"), 30, null, prefKeyOauthTokenT);
String response = new HttpsConnection(context, this.instance).get(getAbsoluteUrl("/instance"), 30, null, prefKeyOauthTokenT);
Instance instanceEntity = parseInstance(new JSONObject(response));
apiResponse.setInstance(instanceEntity);
} catch (HttpsConnection.HttpsConnectionException e) {
@ -343,7 +367,7 @@ public class API {
requestParams.put("source[sensitive]", String.valueOf(sensitive));
}
try {
new HttpsConnection(context).patch(getAbsoluteUrl("/accounts/update_credentials"), 60, requestParams, avatar, avatarName, header, headerName, prefKeyOauthTokenT);
new HttpsConnection(context, this.instance).patch(getAbsoluteUrl("/accounts/update_credentials"), 60, requestParams, avatar, avatarName, header, headerName, prefKeyOauthTokenT);
} catch (HttpsConnection.HttpsConnectionException e) {
e.printStackTrace();
setError(e.getStatusCode(), e);
@ -368,7 +392,7 @@ public class API {
setError(500, new Throwable("An error occured!"));
return null;
}
String response = new HttpsConnection(context).get(getAbsoluteUrl("/accounts/verify_credentials"), 60, null, prefKeyOauthTokenT);
String response = new HttpsConnection(context, this.instance).get(getAbsoluteUrl("/accounts/verify_credentials"), 60, null, prefKeyOauthTokenT);
account = parseAccountResponse(context, new JSONObject(response));
if( account.getSocial().equals("PLEROMA")){
isPleromaAdmin(account.getAcct());
@ -396,7 +420,7 @@ public class API {
new AccountDAO(context, db).updateAccountCredential(targetedAccount);
String response;
try {
response = new HttpsConnection(context).get(getAbsoluteUrl("/accounts/verify_credentials"), 60, null, targetedAccount.getToken());
response = new HttpsConnection(context, this.instance).get(getAbsoluteUrl("/accounts/verify_credentials"), 60, null, targetedAccount.getToken());
account = parseAccountResponse(context, new JSONObject(response));
if( account.getSocial().equals("PLEROMA")){
isPleromaAdmin(account.getAcct());
@ -440,7 +464,7 @@ public class API {
params.put("client_secret", client_secret);
params.put("refresh_token", refresh_token);
try {
String response = new HttpsConnection(context).post(getAbsoluteUrl("/oauth/token"), 60, params, null);
String response = new HttpsConnection(context, this.instance).post(getAbsoluteUrl("/oauth/token"), 60, params, null);
JSONObject resobj = new JSONObject(response);
String token = resobj.get("access_token").toString();
if( resobj.has("refresh_token"))
@ -472,7 +496,7 @@ public class API {
account = new Account();
try {
String response = new HttpsConnection(context).get(getAbsoluteUrl(String.format("/accounts/%s",accountId)), 60, null, prefKeyOauthTokenT);
String response = new HttpsConnection(context, this.instance).get(getAbsoluteUrl(String.format("/accounts/%s",accountId)), 60, null, prefKeyOauthTokenT);
account = parseAccountResponse(context, new JSONObject(response));
final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
@ -506,7 +530,7 @@ public class API {
HashMap<String, String> params = new HashMap<>();
params.put("id",accountId);
try {
String response = new HttpsConnection(context).get(getAbsoluteUrl("/accounts/relationships"), 60, params, prefKeyOauthTokenT);
String response = new HttpsConnection(context, this.instance).get(getAbsoluteUrl("/accounts/relationships"), 60, params, prefKeyOauthTokenT);
relationships = parseRelationshipResponse(new JSONArray(response));
if( relationships != null && relationships.size() > 0)
relationship = relationships.get(0);
@ -543,7 +567,7 @@ public class API {
params.put("id[]", parameters.toString());
List<Relationship> relationships = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl("/accounts/relationships"), 60, params, prefKeyOauthTokenT);
relationships = parseRelationshipResponse(new JSONArray(response));
apiResponse.setSince_id(httpsConnection.getSince_id());
@ -654,7 +678,7 @@ public class API {
}
statuses = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl(String.format("/accounts/%s/statuses", accountId)), 60, params, prefKeyOauthTokenT);
statuses = parseStatuses(context, new JSONArray(response));
apiResponse.setSince_id(httpsConnection.getSince_id());
@ -693,7 +717,7 @@ public class API {
params.put("limit", "80");
accounts = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl(String.format("/statuses/%s/reblogged_by", statusId)), 60, params, prefKeyOauthTokenT);
accounts = parseAccountResponse(new JSONArray(response));
apiResponse.setSince_id(httpsConnection.getSince_id());
@ -731,7 +755,7 @@ public class API {
params.put("limit", "80");
accounts = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl(String.format("/statuses/%s/favourited_by", statusId)), 60, params, prefKeyOauthTokenT);
accounts = parseAccountResponse(new JSONArray(response));
apiResponse.setSince_id(httpsConnection.getSince_id());
@ -763,7 +787,7 @@ public class API {
statuses = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl(String.format("/statuses/%s", statusId)), 60, null, prefKeyOauthTokenT);
Status status = parseStatuses(context, new JSONObject(response));
statuses.add(status);
@ -791,7 +815,7 @@ public class API {
public APIResponse getStatusbyIdAndCache(String statusId) {
statuses = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl(String.format("/statuses/%s", statusId)), 60, null, prefKeyOauthTokenT);
Status status = parseStatuses(context, new JSONObject(response));
SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
@ -821,7 +845,7 @@ public class API {
public app.fedilab.android.client.Entities.Context getStatusContext(String statusId) {
app.fedilab.android.client.Entities.Context statusContext = new app.fedilab.android.client.Entities.Context();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl(String.format("/statuses/%s/context", statusId)), 60, null, prefKeyOauthTokenT);
statusContext = parseContext(new JSONObject(response));
} catch (HttpsConnection.HttpsConnectionException e) {
@ -884,7 +908,7 @@ public class API {
params.put("limit",String.valueOf(limit));
conversations = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl("/conversations"), 60, params, prefKeyOauthTokenT);
apiResponse.setSince_id(httpsConnection.getSince_id());
apiResponse.setMax_id(httpsConnection.getMax_id());
@ -931,7 +955,7 @@ public class API {
params.put("limit",String.valueOf(limit));
statuses = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl("/timelines/direct"), 60, params, prefKeyOauthTokenT);
apiResponse.setSince_id(httpsConnection.getSince_id());
apiResponse.setMax_id(httpsConnection.getMax_id());
@ -991,29 +1015,39 @@ public class API {
SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
statuses = new TimelineCacheDAO(context, db).get(max_id);
if( statuses != null){
Iterator<Status> i = statuses.iterator();
List<String> ids = new ArrayList<>();
while (i.hasNext()) {
Status s = i.next();
if( ids.contains(s.getId())) {
i.remove();
new TimelineCacheDAO(context, db).remove(s.getId());
}else{
ids.add(s.getId());
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
boolean remember_position_home = sharedpreferences.getBoolean(Helper.SET_REMEMBER_POSITION_HOME, true);
if( remember_position_home ){
if( statuses != null){
Iterator<Status> i = statuses.iterator();
List<String> ids = new ArrayList<>();
while (i.hasNext()) {
Status s = i.next();
if( ids.contains(s.getId())) {
i.remove();
new TimelineCacheDAO(context, db).remove(s.getId());
}else{
ids.add(s.getId());
}
}
}
}
if( statuses == null){
return getHomeTimeline(max_id);
}else{
if( statuses.size() > 0) {
apiResponse.setSince_id(String.valueOf(Long.parseLong(statuses.get(0).getId())+1));
apiResponse.setMax_id(String.valueOf(Long.parseLong(statuses.get(statuses.size() - 1).getId())-1));
if( statuses == null){
return getHomeTimeline(max_id);
}else{
if( statuses.size() > 0) {
if( statuses.get(0).getId().matches("\\d+")){
apiResponse.setSince_id(String.valueOf(Long.parseLong(statuses.get(0).getId())+1));
apiResponse.setMax_id(String.valueOf(Long.parseLong(statuses.get(statuses.size() - 1).getId())-1));
}else{
apiResponse.setSince_id(statuses.get(0).getId());
apiResponse.setMax_id(statuses.get(statuses.size() - 1).getId());
}
}
apiResponse.setStatuses(statuses);
return apiResponse;
}
apiResponse.setStatuses(statuses);
return apiResponse;
}else{
return getHomeTimeline(max_id);
}
}
@ -1040,7 +1074,7 @@ public class API {
params.put("limit",String.valueOf(limit));
statuses = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl("/timelines/home"), 60, params, prefKeyOauthTokenT);
apiResponse.setSince_id(httpsConnection.getSince_id());
apiResponse.setMax_id(httpsConnection.getMax_id());
@ -1075,7 +1109,7 @@ public class API {
params.put("max_id", max_id);
statuses = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get("https://"+remoteInstance+"/api/statuses/public_timeline.json", 60, params, prefKeyOauthTokenT);
statuses = GNUAPI.parseStatuses(context, new JSONArray(response));
if( statuses.size() > 0) {
@ -1110,7 +1144,7 @@ public class API {
params.put("page", max_id);
statuses = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrlRemote(remoteInstance, "/timelines/public/"), 60, params, prefKeyOauthTokenT);
apiResponse.setSince_id(httpsConnection.getSince_id());
apiResponse.setMax_id(httpsConnection.getMax_id());
@ -1137,7 +1171,7 @@ public class API {
List<Account> accounts = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(String.format("https://"+instance+"/api/v1/accounts/%s/video-channels", name), 60, null, null);
JSONArray jsonArray = new JSONObject(response).getJSONArray("data");
accounts = parseAccountResponsePeertube(context, instance, jsonArray);
@ -1165,7 +1199,7 @@ public class API {
List<Peertube> peertubes = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(String.format("https://"+instance+"/api/v1/video-channels/%s/videos", name), 60, null, null);
JSONArray jsonArray = new JSONObject(response).getJSONArray("data");
peertubes = parsePeertube(instance, jsonArray);
@ -1200,7 +1234,7 @@ public class API {
params.put("count", "20");
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get("https://"+instance+"/api/v1/videos", 60, params, null);
JSONArray jsonArray = new JSONObject(response).getJSONArray("data");
peertubes = parsePeertube(instance, jsonArray);
@ -1228,7 +1262,7 @@ public class API {
Peertube peertube = null;
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(String.format("https://"+instance+"/api/v1/videos/%s", videoId), 60, null, null);
JSONObject jsonObject = new JSONObject(response);
peertube = parseSinglePeertube(context, instance, jsonObject);
@ -1258,6 +1292,8 @@ public class API {
public APIResponse searchPeertube(String instance, String query) {
HashMap<String, String> params = new HashMap<>();
params.put("count", "50");
if( query == null)
return null;
try {
params.put("search", URLEncoder.encode(query, "UTF-8"));
} catch (UnsupportedEncodingException e) {
@ -1265,7 +1301,7 @@ public class API {
}
List<Peertube> peertubes = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get("https://"+instance+"/api/v1/search/videos", 60, params, null);
JSONArray jsonArray = new JSONObject(response).getJSONArray("data");
peertubes = parsePeertube(instance, jsonArray);
@ -1291,7 +1327,7 @@ public class API {
public APIResponse getSinglePeertubeComments(String instance, String videoId) {
statuses = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(String.format("https://"+instance+"/api/v1/videos/%s/comment-threads", videoId), 60, null, null);
JSONObject jsonObject = new JSONObject(response);
statuses = parseSinglePeertubeComments(context, instance, jsonObject);
@ -1318,7 +1354,7 @@ public class API {
List<HowToVideo> howToVideos = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get("https://peertube.social/api/v1/video-channels/mastalab_channel/videos", 60, null, null);
JSONArray jsonArray = new JSONObject(response).getJSONArray("data");
howToVideos = parseHowTos(jsonArray);
@ -1359,7 +1395,7 @@ public class API {
try {
statuses = new ArrayList<>();
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.postMisskey("https://"+instance+"/api/notes", 60, params, null);
statuses = parseNotes(context, instance, new JSONArray(response));
if( statuses != null && statuses.size() > 0){
@ -1442,7 +1478,7 @@ public class API {
params.put("limit",String.valueOf(limit));
statuses = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String url;
if( instanceName == null)
url = getAbsoluteUrl("/timelines/public");
@ -1454,6 +1490,7 @@ public class API {
statuses = parseStatuses(context, new JSONArray(response));
} catch (HttpsConnection.HttpsConnectionException e) {
setError(e.getStatusCode(), e);
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (IOException e) {
@ -1501,7 +1538,7 @@ public class API {
params.put("limit",String.valueOf(limit));
statuses = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String url;
url = getAbsoluteUr2l("/discover/posts");
String response = httpsConnection.get(url, 60, params, prefKeyOauthTokenT);
@ -1549,7 +1586,7 @@ public class API {
private APIResponse getArtTimeline(boolean local, String tag, String max_id, String since_id, List<String> any, List<String> all, List<String> none){
if( tag == null)
tag = "mastoart";
APIResponse apiResponse = getPublicTimelineTag(tag, local, true, max_id, since_id, tootPerPage, any, all, none);
APIResponse apiResponse = getPublicTimelineTag(tag, local, true, max_id, since_id, tootPerPage, any, all, none, null);
APIResponse apiResponseReply = new APIResponse();
if( apiResponse != null){
apiResponseReply.setMax_id(apiResponse.getMax_id());
@ -1582,7 +1619,19 @@ public class API {
*/
@SuppressWarnings("SameParameterValue")
public APIResponse getPublicTimelineTag(String tag, boolean local, String max_id, List<String> any, List<String> all, List<String> none){
return getPublicTimelineTag(tag, local, false, max_id, null, tootPerPage, any, all, none);
return getPublicTimelineTag(tag, local, false, max_id, null, tootPerPage, any, all, none, null);
}
/**
* Retrieves public tag timeline *synchronously*
* @param tag String
* @param local boolean only local timeline
* @param max_id String id max
* @return APIResponse
*/
@SuppressWarnings("SameParameterValue")
public APIResponse getPublicTimelineTag(String tag, boolean local, String max_id, String instance){
return getPublicTimelineTag(tag, local, false, max_id, null, tootPerPage, null, null, null, instance);
}
/**
@ -1594,7 +1643,7 @@ public class API {
*/
@SuppressWarnings("SameParameterValue")
public APIResponse getPublicTimelineTagSinceId(String tag, boolean local, String since_id, List<String> any, List<String> all, List<String> none){
return getPublicTimelineTag(tag, local, false, null, since_id, tootPerPage, any, all, none);
return getPublicTimelineTag(tag, local, false, null, since_id, tootPerPage, any, all, none, null);
}
/**
* Retrieves public tag timeline *synchronously*
@ -1606,7 +1655,7 @@ public class API {
* @return APIResponse
*/
@SuppressWarnings("SameParameterValue")
private APIResponse getPublicTimelineTag(String tag, boolean local, boolean onlymedia, String max_id, String since_id, int limit, List<String> any, List<String> all, List<String> none){
private APIResponse getPublicTimelineTag(String tag, boolean local, boolean onlymedia, String max_id, String since_id, int limit, List<String> any, List<String> all, List<String> none, String instance){
HashMap<String, String> params = new HashMap<>();
if( local)
@ -1660,12 +1709,16 @@ public class API {
return null;
try {
String query = tag.trim();
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
if( MainActivity.social != UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE)
try {
query = URLEncoder.encode(query, "UTF-8");
} catch (UnsupportedEncodingException ignored) {}
String response = httpsConnection.get(getAbsoluteUrl(String.format("/timelines/tag/%s",query)), 60, params, prefKeyOauthTokenT);
String response;
if( instance == null)
response = httpsConnection.get(getAbsoluteUrl(String.format("/timelines/tag/%s",query)), 60, params, prefKeyOauthTokenT);
else
response = httpsConnection.get(getAbsoluteUrlRemote(instance, String.format("/timelines/tag/%s",query)), 60, params, null);
apiResponse.setSince_id(httpsConnection.getSince_id());
apiResponse.setMax_id(httpsConnection.getMax_id());
statuses = parseStatuses(context, new JSONArray(response));
@ -1745,7 +1798,7 @@ public class API {
params.put("limit",String.valueOf(limit));
accounts = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl(action), 60, params, prefKeyOauthTokenT);
apiResponse.setSince_id(httpsConnection.getSince_id());
apiResponse.setMax_id(httpsConnection.getMax_id());
@ -1781,7 +1834,7 @@ public class API {
results = new Results();
accounts = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get("https://opencollective.com/mastalab/members/all.json", 60, null, prefKeyOauthTokenT);
accounts = parseOpencollectiveAccountResponse(context, type, new JSONArray(response));
} catch (HttpsConnection.HttpsConnectionException e) {
@ -1815,7 +1868,7 @@ public class API {
params.put("limit","80");
domains = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl("/domain_blocks"), 60, params, prefKeyOauthTokenT);
apiResponse.setSince_id(httpsConnection.getSince_id());
apiResponse.setMax_id(httpsConnection.getMax_id());
@ -1848,7 +1901,7 @@ public class API {
domains = new ArrayList<>();
HttpsConnection httpsConnection;
try {
httpsConnection = new HttpsConnection(context);
httpsConnection = new HttpsConnection(context, this.instance);
httpsConnection.delete(getAbsoluteUrl("/domain_blocks"), 60, params, prefKeyOauthTokenT);
actionCode = httpsConnection.getActionCode();
} catch (HttpsConnection.HttpsConnectionException e) {
@ -1891,7 +1944,7 @@ public class API {
params.put("limit",String.valueOf(limit));
accounts = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl("/follow_requests"), 60, params, prefKeyOauthTokenT);
apiResponse.setSince_id(httpsConnection.getSince_id());
apiResponse.setMax_id(httpsConnection.getMax_id());
@ -1940,7 +1993,7 @@ public class API {
params.put("limit",String.valueOf(limit));
statuses = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl("/favourites"), 60, params, prefKeyOauthTokenT);
apiResponse.setSince_id(httpsConnection.getSince_id());
apiResponse.setMax_id(httpsConnection.getMax_id());
@ -1982,7 +2035,7 @@ public class API {
HashMap<String, String> params = new HashMap<>();
params.put("notifications", Boolean.toString(muteNotifications));
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
httpsConnection.post(getAbsoluteUrl(String.format("/accounts/%s/mute", targetedId)), 60, params, prefKeyOauthTokenT);
actionCode = httpsConnection.getActionCode();
} catch (HttpsConnection.HttpsConnectionException e) {
@ -2137,7 +2190,7 @@ public class API {
}
if(statusAction != StatusAction.UNSTATUS ) {
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String resp = httpsConnection.post(getAbsoluteUrl(action), 60, params, prefKeyOauthTokenT);
actionCode = httpsConnection.getActionCode();
if( statusAction == StatusAction.REBLOG || statusAction == StatusAction.UNREBLOG || statusAction == StatusAction.FAVOURITE || statusAction == StatusAction.UNFAVOURITE) {
@ -2163,7 +2216,7 @@ public class API {
}
}else{
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
httpsConnection.delete(getAbsoluteUrl(action), 60, null, prefKeyOauthTokenT);
actionCode = httpsConnection.getActionCode();
SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
@ -2201,7 +2254,7 @@ public class API {
}
List<StoredStatus> storedStatus = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = null;
int responseCode = -1;
if( call.equals("GET"))
@ -2277,7 +2330,7 @@ public class API {
}
jsonObject.add("choices",jchoices);
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.postJson(getAbsoluteUrl(String.format("/polls/%s/votes", pollId)), 60, jsonObject, prefKeyOauthTokenT);
return parsePoll(context, new JSONObject(response));
} catch (HttpsConnection.HttpsConnectionException e) {
@ -2303,7 +2356,7 @@ public class API {
public Poll getPoll(Status status){
try {
Poll _p = (status.getReblog() != null)?status.getReblog().getPoll():status.getPoll();
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl(String.format("/polls/%s", _p.getId())), 60, null, prefKeyOauthTokenT);
Poll poll = parsePoll(context, new JSONObject(response));
Bundle b = new Bundle();
@ -2374,7 +2427,7 @@ public class API {
jsonObject.addProperty("visibility", status.getVisibility());
statuses = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.postJson(getAbsoluteUrl("/statuses"), 60, jsonObject, prefKeyOauthTokenT);
apiResponse.setSince_id(httpsConnection.getSince_id());
apiResponse.setMax_id(httpsConnection.getMax_id());
@ -2413,7 +2466,7 @@ public class API {
action = "/notifications/dismiss";
}
try {
new HttpsConnection(context).post(getAbsoluteUrl(action), 60, params, prefKeyOauthTokenT);
new HttpsConnection(context, this.instance).post(getAbsoluteUrl(action), 60, params, prefKeyOauthTokenT);
} catch (HttpsConnection.HttpsConnectionException e) {
setError(e.getStatusCode(), e);
} catch (NoSuchAlgorithmException e) {
@ -2553,7 +2606,7 @@ public class API {
List<Notification> notifications = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl("/notifications"), 60, params, prefKeyOauthTokenT);
apiResponse.setSince_id(httpsConnection.getSince_id());
apiResponse.setMax_id(httpsConnection.getMax_id());
@ -2592,7 +2645,7 @@ public class API {
params.put("description", description);
}
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.put(getAbsoluteUrl(String.format("/media/%s", mediaId)), 240, params, prefKeyOauthTokenT);
attachment = parseAttachmentResponse(new JSONObject(response));
} catch (HttpsConnection.HttpsConnectionException e) {
@ -2628,7 +2681,7 @@ public class API {
params.put("q", query);
}
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl("/search"), 60, params, prefKeyOauthTokenT);
results = parseResultsResponse(new JSONObject(response));
apiResponse.setResults(results);
@ -2680,7 +2733,7 @@ public class API {
}
params.put("limit", "20");
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUr2l("/search"), 60, params, prefKeyOauthTokenT);
results = parseResultsResponse(new JSONObject(response));
apiResponse.setSince_id(httpsConnection.getSince_id());
@ -2733,7 +2786,7 @@ public class API {
params.put("limit", String.valueOf(count));
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl("/accounts/search"), 60, params, prefKeyOauthTokenT);
accounts = parseAccountResponse(new JSONArray(response));
apiResponse.setSince_id(httpsConnection.getSince_id());
@ -2764,7 +2817,7 @@ public class API {
public APIResponse getCustomEmoji() {
List<Emojis> emojis = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl("/custom_emojis"), 60, null, prefKeyOauthTokenT);
emojis = parseEmojis(new JSONArray(response));
apiResponse.setSince_id(httpsConnection.getSince_id());
@ -2799,7 +2852,7 @@ public class API {
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
boolean isAdmin;
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(String.format(Helper.getLiveInstanceWithProtocol(context)+"/api/pleroma/admin/permission_group/%s/admin",nickname), 60, null, prefKeyOauthTokenT);
//Call didn't return a 404, so the account is admin
isAdmin = true;
@ -2819,7 +2872,7 @@ public class API {
public APIResponse getCustomPleromaEmoji() {
List<Emojis> emojis = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(Helper.getLiveInstanceWithProtocol(context)+"/api/pleroma/emoji", 60, null, prefKeyOauthTokenT);
emojis = parsePleromaEmojis(new JSONObject(response));
@ -2846,7 +2899,7 @@ public class API {
List<Filters> filters = null;
try {
String response = new HttpsConnection(context).get(getAbsoluteUrl("/filters"), 60, null, prefKeyOauthTokenT);
String response = new HttpsConnection(context, this.instance).get(getAbsoluteUrl("/filters"), 60, null, prefKeyOauthTokenT);
filters = parseFilters(new JSONArray(response));
} catch (HttpsConnection.HttpsConnectionException e) {
setError(e.getStatusCode(), e);
@ -2873,7 +2926,7 @@ public class API {
List<Filters> filters = new ArrayList<>();
Filters filter;
try {
String response = new HttpsConnection(context).get(getAbsoluteUrl(String.format("/filters/%s", filterId)), 60, null, prefKeyOauthTokenT);
String response = new HttpsConnection(context, this.instance).get(getAbsoluteUrl(String.format("/filters/%s", filterId)), 60, null, prefKeyOauthTokenT);
filter = parseFilter(new JSONObject(response));
filters.add(filter);
} catch (HttpsConnection.HttpsConnectionException e) {
@ -2912,7 +2965,7 @@ public class API {
params.put("expires_in", String.valueOf(filter.getExpires_in()));
ArrayList<Filters> filters = new ArrayList<>();
try {
String response = new HttpsConnection(context).post(getAbsoluteUrl("/filters"), 60, params, prefKeyOauthTokenT);
String response = new HttpsConnection(context, this.instance).post(getAbsoluteUrl("/filters"), 60, params, prefKeyOauthTokenT);
Filters resfilter = parseFilter(new JSONObject(response));
filters.add(resfilter);
} catch (HttpsConnection.HttpsConnectionException e) {
@ -2938,7 +2991,7 @@ public class API {
public int deleteFilters(Filters filter){
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
httpsConnection.delete(getAbsoluteUrl(String.format("/filters/%s", filter.getId())), 60, null, prefKeyOauthTokenT);
actionCode = httpsConnection.getActionCode();
} catch (HttpsConnection.HttpsConnectionException e) {
@ -2973,7 +3026,7 @@ public class API {
params.put("expires_in", String.valueOf(filter.getExpires_in()));
ArrayList<Filters> filters = new ArrayList<>();
try {
String response = new HttpsConnection(context).put(getAbsoluteUrl(String.format("/filters/%s", filter.getId())), 60, params, prefKeyOauthTokenT);
String response = new HttpsConnection(context, this.instance).put(getAbsoluteUrl(String.format("/filters/%s", filter.getId())), 60, params, prefKeyOauthTokenT);
Filters resfilter = parseFilter(new JSONObject(response));
filters.add(resfilter);
} catch (HttpsConnection.HttpsConnectionException e) {
@ -2999,7 +3052,7 @@ public class API {
apiResponse = new APIResponse();
List<app.fedilab.android.client.Entities.List> lists = new ArrayList<>();
try {
String response = new HttpsConnection(context).get(getAbsoluteUrl("/lists"), 60, null, prefKeyOauthTokenT);
String response = new HttpsConnection(context, this.instance).get(getAbsoluteUrl("/lists"), 60, null, prefKeyOauthTokenT);
lists = parseLists(new JSONArray(response));
} catch (HttpsConnection.HttpsConnectionException e) {
setError(e.getStatusCode(), e);
@ -3026,7 +3079,7 @@ public class API {
List<app.fedilab.android.client.Entities.List> lists = new ArrayList<>();
app.fedilab.android.client.Entities.List list;
try {
String response = new HttpsConnection(context).get(getAbsoluteUrl(String.format("/accounts/%s/lists", userId)), 60, null, prefKeyOauthTokenT);
String response = new HttpsConnection(context, this.instance).get(getAbsoluteUrl(String.format("/accounts/%s/lists", userId)), 60, null, prefKeyOauthTokenT);
list = parseList(new JSONObject(response));
lists.add(list);
} catch (HttpsConnection.HttpsConnectionException e) {
@ -3064,7 +3117,7 @@ public class API {
params.put("limit",String.valueOf(limit));
statuses = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl(String.format("/timelines/list/%s",list_id)), 60, params, prefKeyOauthTokenT);
apiResponse.setSince_id(httpsConnection.getSince_id());
apiResponse.setMax_id(httpsConnection.getMax_id());
@ -3102,7 +3155,7 @@ public class API {
limit = 50;
params.put("limit",String.valueOf(limit));
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl(String.format("/lists/%s/accounts", listId)), 60, params, prefKeyOauthTokenT);
accounts = parseAccountResponse(new JSONArray(response));
apiResponse.setSince_id(httpsConnection.getSince_id());
@ -3135,7 +3188,7 @@ public class API {
List<app.fedilab.android.client.Entities.List> lists = new ArrayList<>();
app.fedilab.android.client.Entities.List list;
try {
String response = new HttpsConnection(context).get(getAbsoluteUrl(String.format("/lists/%s",id)), 60, null, prefKeyOauthTokenT);
String response = new HttpsConnection(context, this.instance).get(getAbsoluteUrl(String.format("/lists/%s",id)), 60, null, prefKeyOauthTokenT);
list = parseList(new JSONObject(response));
lists.add(list);
} catch (HttpsConnection.HttpsConnectionException e) {
@ -3173,7 +3226,7 @@ public class API {
params.put("account_ids[]", parameters.toString());
}
try {
new HttpsConnection(context).post(getAbsoluteUrl(String.format("/lists/%s/accounts", id)), 60, params, prefKeyOauthTokenT);
new HttpsConnection(context, this.instance).post(getAbsoluteUrl(String.format("/lists/%s/accounts", id)), 60, params, prefKeyOauthTokenT);
} catch (HttpsConnection.HttpsConnectionException e) {
setError(e.getStatusCode(), e);
} catch (NoSuchAlgorithmException e) {
@ -3194,7 +3247,7 @@ public class API {
*/
public int deleteAccountFromList(String id, String[] account_ids){
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
StringBuilder parameters = new StringBuilder();
HashMap<String, String> params = new HashMap<>();
for(String val: account_ids)
@ -3230,7 +3283,7 @@ public class API {
List<app.fedilab.android.client.Entities.List> lists = new ArrayList<>();
app.fedilab.android.client.Entities.List list;
try {
String response = new HttpsConnection(context).post(getAbsoluteUrl("/lists"), 60, params, prefKeyOauthTokenT);
String response = new HttpsConnection(context, this.instance).post(getAbsoluteUrl("/lists"), 60, params, prefKeyOauthTokenT);
list = parseList(new JSONObject(response));
lists.add(list);
} catch (HttpsConnection.HttpsConnectionException e) {
@ -3263,7 +3316,7 @@ public class API {
List<app.fedilab.android.client.Entities.List> lists = new ArrayList<>();
app.fedilab.android.client.Entities.List list;
try {
String response = new HttpsConnection(context).put(getAbsoluteUrl(String.format("/lists/%s", id)), 60, params, prefKeyOauthTokenT);
String response = new HttpsConnection(context, this.instance).put(getAbsoluteUrl(String.format("/lists/%s", id)), 60, params, prefKeyOauthTokenT);
list = parseList(new JSONObject(response));
lists.add(list);
} catch (HttpsConnection.HttpsConnectionException e) {
@ -3289,7 +3342,7 @@ public class API {
*/
public int deleteList(String id){
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
httpsConnection.delete(getAbsoluteUrl(String.format("/lists/%s", id)), 60, null, prefKeyOauthTokenT);
actionCode = httpsConnection.getActionCode();
} catch (HttpsConnection.HttpsConnectionException e) {
@ -3309,7 +3362,7 @@ public class API {
public ArrayList<String> getCommunitywikiList() {
ArrayList<String> list = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrlCommunitywiki("/list"), 60, null, prefKeyOauthTokenT);
JSONArray jsonArray = new JSONArray(response);
@ -3339,7 +3392,7 @@ public class API {
public ArrayList<String> getCommunitywikiList(String name) {
ArrayList<String> list = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrlCommunitywiki(String.format("/list/%s", name)), 60, null, prefKeyOauthTokenT);
JSONArray jsonArray = new JSONArray(response);
@ -4956,10 +5009,10 @@ public class API {
private String getAbsoluteUrl(String action) {
return Helper.instanceWithProtocol(this.instance) + "/api/v1" + action;
return Helper.instanceWithProtocol(this.context, this.instance) + "/api/v1" + action;
}
private String getAbsoluteUr2l(String action) {
return Helper.instanceWithProtocol(this.instance) + "/api/v2" + action;
return Helper.instanceWithProtocol(this.context, this.instance) + "/api/v2" + action;
}
private String getAbsoluteUrlRemote(String remote, String action) {
return "https://" + remote + "/api/v1" + action;

View File

@ -58,6 +58,8 @@ public class APIResponse {
private String since_id, max_id;
private Instance instance;
private List<StoredStatus> storedStatuses;
private boolean fetchmore = false;
public List<Account> getAccounts() {
return accounts;
}
@ -209,4 +211,12 @@ public class APIResponse {
public void setResults(Results results) {
this.results = results;
}
public boolean isFetchmore() {
return fetchmore;
}
public void setFetchmore(boolean fetchmore) {
this.fetchmore = fetchmore;
}
}

View File

@ -56,7 +56,7 @@ public class CustomSharing {
public CustomSharingResponse customShare(String encodedCustomSharingURL) {
String HTTPResponse = "";
try {
HTTPResponse = new HttpsConnection(context).get(encodedCustomSharingURL);
HTTPResponse = new HttpsConnection(context, null).get(encodedCustomSharingURL);
} catch (HttpsConnection.HttpsConnectionException e) {
e.printStackTrace();
setError(e.getStatusCode(), e);

View File

@ -44,6 +44,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.regex.Pattern;
import app.fedilab.android.sqlite.InstancesDAO;
import es.dmoral.toasty.Toasty;
import app.fedilab.android.R;
import app.fedilab.android.activities.BaseMainActivity;
@ -74,6 +75,7 @@ public class ManageTimelines {
private RemoteInstance remoteInstance;
private TagTimeline tagTimeline;
private List listTimeline;
private String currentFilter;
private boolean notif_follow, notif_add, notif_mention, notif_share, notif_poll;
@ -392,6 +394,17 @@ public class ManageTimelines {
}
});
}
}else if( tl.getType() == Type.INSTANCE && (tl.getRemoteInstance().getType().equals("MASTODON") || tl.getRemoteInstance().getType().equals("PEERTUBE") || tl.getRemoteInstance().getType().equals("PLEROMA")|| tl.getRemoteInstance().getType().equals("GNU"))) {
if( tabStrip != null && tabStrip.getChildCount() > position) {
int finalPosition = position;
tabStrip.getChildAt(position).setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
instanceClick(context, tl, tabStrip, finalPosition);
return true;
}
});
}
}else if (tl.getType() == Type.LIST){
if( tabStrip != null && tabStrip.getChildCount() > position) {
tabStrip.getChildAt(position).setOnLongClickListener(new View.OnLongClickListener() {
@ -940,4 +953,202 @@ public class ManageTimelines {
}
private void instanceClick(Context context, ManageTimelines tl, LinearLayout tabStrip, int position){
PopupMenu popup = new PopupMenu(context, tabStrip.getChildAt(position));
SQLiteDatabase db = Sqlite.getInstance(context, DB_NAME, null, Sqlite.DB_VERSION).open();
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
int theme = sharedpreferences.getInt(Helper.SET_THEME, Helper.THEME_DARK);
int style;
if (theme == Helper.THEME_DARK) {
style = R.style.DialogDark;
} else if (theme == Helper.THEME_BLACK){
style = R.style.DialogBlack;
}else {
style = R.style.Dialog;
}
remoteInstance = tl.getRemoteInstance();
if( remoteInstance == null)
return;
currentFilter = remoteInstance.getFilteredWith();
final boolean[] changes = {false};
String title;
if( currentFilter == null) {
title = "" + context.getString(R.string.all);
}else{
title = context.getString(R.string.all);
}
MenuItem itemall = popup.getMenu().add(0, 0, Menu.NONE, title);
itemall.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
item.setActionView(new View(context));
item.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
return false;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
return false;
}
});
changes[0] = true;
FragmentTransaction fragTransaction = ((MainActivity)context).getSupportFragmentManager().beginTransaction();
DisplayStatusFragment displayStatusFragment = (DisplayStatusFragment) mPageReferenceMap.get(tl.getPosition());
if( displayStatusFragment == null)
return false;
tl.getRemoteInstance().setFilteredWith(null);
remoteInstance.setFilteredWith(null);
currentFilter = null;
new InstancesDAO(context, db).updateInstance(remoteInstance);
tl.setRemoteInstance(remoteInstance);
new TimelinesDAO(context, db).updateRemoteInstance(tl);
fragTransaction.detach(displayStatusFragment);
Bundle bundle = new Bundle();
bundle.putString("remote_instance", tl.getRemoteInstance().getHost()!=null?tl.getRemoteInstance().getHost():"");
bundle.putString("instanceType", tl.getRemoteInstance().getType());
bundle.putInt("timelineId", tl.getId());
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE);
displayStatusFragment.setArguments(bundle);
fragTransaction.attach(displayStatusFragment);
fragTransaction.commit();
popup.getMenu().close();
return false;
}
});
java.util.List<String> tags = remoteInstance.getTags();
if( tags != null && tags.size() > 0){
java.util.Collections.sort(tags);
for(String tag: tags){
if( tag == null || tag.length() == 0 )
continue;
if( currentFilter != null && currentFilter.equals(tag)) {
title = "" + tag;
}else{
title = tag;
}
MenuItem item = popup.getMenu().add(0, 0, Menu.NONE, title);
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
FragmentTransaction fragTransaction = ((MainActivity)context).getSupportFragmentManager().beginTransaction();
DisplayStatusFragment displayStatusFragment = (DisplayStatusFragment) mPageReferenceMap.get(tl.getPosition());
if( displayStatusFragment == null)
return false;
tl.getRemoteInstance().setFilteredWith(tag);
remoteInstance.setFilteredWith(tag);
new InstancesDAO(context, db).updateInstance(remoteInstance);
tl.setRemoteInstance(remoteInstance);
new TimelinesDAO(context, db).updateRemoteInstance(tl);
currentFilter = tl.getRemoteInstance().getFilteredWith();
fragTransaction.detach(displayStatusFragment);
Bundle bundle = new Bundle();
bundle.putString("remote_instance", tl.getRemoteInstance().getHost()!=null?tl.getRemoteInstance().getHost():"");
bundle.putString("instanceType", tl.getRemoteInstance().getType());
bundle.putInt("timelineId", tl.getId());
bundle.putString("currentfilter", tl.getRemoteInstance().getFilteredWith());
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE_FILTERED);
displayStatusFragment.setArguments(bundle);
fragTransaction.attach(displayStatusFragment);
fragTransaction.commit();
return false;
}
});
}
}
MenuItem itemadd = popup.getMenu().add(0, 0, Menu.NONE, context.getString(R.string.add_tags));
itemadd.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
item.setActionView(new View(context));
item.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
return false;
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
return false;
}
});
changes[0] = true;
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context, style);
LayoutInflater inflater = ((MainActivity)context).getLayoutInflater();
@SuppressLint("InflateParams") View dialogView = inflater.inflate(R.layout.tags_instance, null);
dialogBuilder.setView(dialogView);
final EditText editText = dialogView.findViewById(R.id.filter_words);
if(remoteInstance.getTags() != null) {
String valuesTag = "";
for(String val: remoteInstance.getTags())
valuesTag += val+" ";
editText.setText(valuesTag);
editText.setSelection(editText.getText().toString().length());
}
dialogBuilder.setPositiveButton(R.string.validate, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
String[] values = editText.getText().toString().trim().split("\\s+");
java.util.List<String> tags =
new ArrayList<>(Arrays.asList(values));
remoteInstance.setTags(tags);
new InstancesDAO(context, db).updateInstance(remoteInstance);
tl.setRemoteInstance(remoteInstance);
new TimelinesDAO(context, db).updateRemoteInstance(tl);
popup.getMenu().clear();
popup.getMenu().close();
instanceClick(context, tl, tabStrip, position);
}
});
AlertDialog alertDialog = dialogBuilder.create();
alertDialog.show();
return false;
}
});
popup.setOnDismissListener(new PopupMenu.OnDismissListener() {
@Override
public void onDismiss(PopupMenu menu) {
if(changes[0]) {
FragmentTransaction fragTransaction = ((MainActivity)context).getSupportFragmentManager().beginTransaction();
DisplayStatusFragment displayStatusFragment = (DisplayStatusFragment) mPageReferenceMap.get(tl.getPosition());
if( displayStatusFragment == null)
return;
fragTransaction.detach(displayStatusFragment);
Bundle bundle = new Bundle();
bundle.putString("remote_instance", tl.getRemoteInstance().getHost()!=null?tl.getRemoteInstance().getHost():"");
bundle.putString("instanceType", tl.getRemoteInstance().getType());
bundle.putInt("timelineId", tl.getId());
if( currentFilter == null){
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE);
}else{
bundle.putString("currentfilter", tl.getRemoteInstance().getFilteredWith());
bundle.putSerializable("type", RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE_FILTERED);
}
displayStatusFragment.setArguments(bundle);
fragTransaction.attach(displayStatusFragment);
fragTransaction.commit();
}
}
});
popup.show();
}
}

View File

@ -18,6 +18,8 @@ package app.fedilab.android.client.Entities;
import android.os.Parcel;
import android.os.Parcelable;
import java.util.List;
/**
* Created by Thomas on 05/10/2018.
* Manages following instances
@ -29,6 +31,8 @@ public class RemoteInstance implements Parcelable {
private String type;
private String id;
private String dbID;
private List<String> tags;
private String filteredWith;
public RemoteInstance(){}
@ -65,6 +69,22 @@ public class RemoteInstance implements Parcelable {
this.dbID = dbID;
}
public List<String> getTags() {
return tags;
}
public void setTags(List<String> tags) {
this.tags = tags;
}
public String getFilteredWith() {
return filteredWith;
}
public void setFilteredWith(String filteredWith) {
this.filteredWith = filteredWith;
}
@Override
public int describeContents() {
return 0;
@ -76,6 +96,8 @@ public class RemoteInstance implements Parcelable {
dest.writeString(this.type);
dest.writeString(this.id);
dest.writeString(this.dbID);
dest.writeStringList(this.tags);
dest.writeString(this.filteredWith);
}
protected RemoteInstance(Parcel in) {
@ -83,9 +105,11 @@ public class RemoteInstance implements Parcelable {
this.type = in.readString();
this.id = in.readString();
this.dbID = in.readString();
this.tags = in.createStringArrayList();
this.filteredWith = in.readString();
}
public static final Parcelable.Creator<RemoteInstance> CREATOR = new Parcelable.Creator<RemoteInstance>() {
public static final Creator<RemoteInstance> CREATOR = new Creator<RemoteInstance>() {
@Override
public RemoteInstance createFromParcel(Parcel source) {
return new RemoteInstance(source);

View File

@ -0,0 +1,149 @@
package app.fedilab.android.client.Entities;
/* Copyright 2019 Thomas Schneider
*
* This file is a part of Fedilab
*
* 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.
*
* Fedilab 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 Fedilab; if not,
* see <http://www.gnu.org/licenses>. */
import app.fedilab.android.asynctasks.RetrieveFeedsAsyncTask;
import app.fedilab.android.helper.FilterToots;
public class RetrieveFeedsParam {
private FilterToots filterToots;
private String max_id;
private RetrieveFeedsAsyncTask.Type action;
private String targetedID;
private String instanceName;
private String tag;
private String currentfilter;
private String remoteInstance;
private int timelineId;
private boolean showMediaOnly;
private boolean showPinned;
private boolean showReply;
private String name;
private String social;
public FilterToots getFilterToots() {
return filterToots;
}
public void setFilterToots(FilterToots filterToots) {
this.filterToots = filterToots;
}
public String getMax_id() {
return max_id;
}
public void setMax_id(String max_id) {
this.max_id = max_id;
}
public RetrieveFeedsAsyncTask.Type getAction() {
return action;
}
public void setAction(RetrieveFeedsAsyncTask.Type action) {
this.action = action;
}
public String getTargetedID() {
return targetedID;
}
public void setTargetedID(String targetedID) {
this.targetedID = targetedID;
}
public String getInstanceName() {
return instanceName;
}
public void setInstanceName(String instanceName) {
this.instanceName = instanceName;
}
public String getTag() {
return tag;
}
public void setTag(String tag) {
this.tag = tag;
}
public int getTimelineId() {
return timelineId;
}
public void setTimelineId(int timelineId) {
this.timelineId = timelineId;
}
public boolean isShowMediaOnly() {
return showMediaOnly;
}
public void setShowMediaOnly(boolean showMediaOnly) {
this.showMediaOnly = showMediaOnly;
}
public boolean isShowPinned() {
return showPinned;
}
public void setShowPinned(boolean showPinned) {
this.showPinned = showPinned;
}
public boolean isShowReply() {
return showReply;
}
public void setShowReply(boolean showReply) {
this.showReply = showReply;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCurrentfilter() {
return currentfilter;
}
public void setCurrentfilter(String currentfilter) {
this.currentfilter = currentfilter;
}
public String getRemoteInstance() {
return remoteInstance;
}
public void setRemoteInstance(String remoteInstance) {
this.remoteInstance = remoteInstance;
}
public String getSocial() {
return social;
}
public void setSocial(String social) {
this.social = social;
}
}

View File

@ -136,6 +136,7 @@ public class Status implements Parcelable{
private int media_height;
private boolean cached = false;
private boolean autoHiddenCW = false;
@Override
public void writeToParcel(Parcel dest, int flags) {
@ -195,6 +196,7 @@ public class Status implements Parcelable{
dest.writeParcelable(this.poll, flags);
dest.writeInt(this.media_height);
dest.writeByte(this.cached ? (byte) 1 : (byte) 0);
dest.writeByte(this.autoHiddenCW ? (byte) 1 : (byte) 0);
}
protected Status(Parcel in) {
@ -256,6 +258,7 @@ public class Status implements Parcelable{
this.poll = in.readParcelable(Poll.class.getClassLoader());
this.media_height = in.readInt();
this.cached = in.readByte() != 0;
this.autoHiddenCW = in.readByte() != 0;
}
public static final Creator<Status> CREATOR = new Creator<Status>() {
@ -1363,4 +1366,12 @@ public class Status implements Parcelable{
public void setcached(boolean cached) {
this.cached = cached;
}
public boolean isAutoHiddenCW() {
return autoHiddenCW;
}
public void setAutoHiddenCW(boolean autoHiddenCW) {
this.autoHiddenCW = autoHiddenCW;
}
}

View File

@ -159,9 +159,9 @@ public class GNUAPI {
requestParams.put("locked",privacy== accountPrivacy.LOCKED?"true":"false");
try {
if( requestParams.size() > 0)
new HttpsConnection(context).patch(getAbsoluteUrl("/accounts/update_profile"), 60, requestParams, avatar, null, null, null, prefKeyOauthTokenT);
new HttpsConnection(context, this.instance).patch(getAbsoluteUrl("/accounts/update_profile"), 60, requestParams, avatar, null, null, null, prefKeyOauthTokenT);
if( avatar!= null && avatarName != null)
new HttpsConnection(context).patch(getAbsoluteUrl("/accounts/update_profile_image"), 60, null, avatar, avatarName, null, null, prefKeyOauthTokenT);
new HttpsConnection(context, this.instance).patch(getAbsoluteUrl("/accounts/update_profile_image"), 60, null, avatar, avatarName, null, null, prefKeyOauthTokenT);
} catch (HttpsConnection.HttpsConnectionException e) {
e.printStackTrace();
@ -183,7 +183,7 @@ public class GNUAPI {
public Account verifyCredentials() {
account = new Account();
try {
String response = new HttpsConnection(context).get(getAbsoluteUrl("/account/verify_credentials.json"), 60, null, prefKeyOauthTokenT);
String response = new HttpsConnection(context, this.instance).get(getAbsoluteUrl("/account/verify_credentials.json"), 60, null, prefKeyOauthTokenT);
account = parseAccountResponse(context, new JSONObject(response));
} catch (HttpsConnection.HttpsConnectionException e) {
setError(e.getStatusCode(), e);
@ -211,7 +211,7 @@ public class GNUAPI {
HashMap<String, String> params = new HashMap<>();
params.put("user_id",accountId);
try {
String response = new HttpsConnection(context).get(getAbsoluteUrl("/users/show.json"), 60, params, prefKeyOauthTokenT);
String response = new HttpsConnection(context, this.instance).get(getAbsoluteUrl("/users/show.json"), 60, params, prefKeyOauthTokenT);
account = parseAccountResponse(context, new JSONObject(response));
} catch (HttpsConnection.HttpsConnectionException e) {
setError(e.getStatusCode(), e);
@ -244,11 +244,11 @@ public class GNUAPI {
String response;
if(MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.GNU) {
params.put("target_id",accountId);
response = new HttpsConnection(context).get(getAbsoluteUrl("/friendships/show.json"), 60, params, prefKeyOauthTokenT);
response = new HttpsConnection(context, this.instance).get(getAbsoluteUrl("/friendships/show.json"), 60, params, prefKeyOauthTokenT);
relationship = parseRelationshipResponse(new JSONObject(response));
}else if(MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.FRIENDICA) {
params.put("user_id",accountId);
response = new HttpsConnection(context).get(getAbsoluteUrl("/users/show.json"), 60, params, prefKeyOauthTokenT);
response = new HttpsConnection(context, this.instance).get(getAbsoluteUrl("/users/show.json"), 60, params, prefKeyOauthTokenT);
JSONObject resobj = new JSONObject(response);
try {
relationship = new Relationship();
@ -307,7 +307,7 @@ public class GNUAPI {
params.put("target_id[]", parameters.toString());
List<Relationship> relationships = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl("/friendships/show.json"), 60, params, prefKeyOauthTokenT);
relationships = parseRelationshipResponse(new JSONArray(response));
apiResponse.setSince_id(httpsConnection.getSince_id());
@ -409,7 +409,7 @@ public class GNUAPI {
params.put("count", String.valueOf(limit));
statuses = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl("/statuses/user_timeline.json"), 60, params, prefKeyOauthTokenT);
statuses = parseStatuses(context, new JSONArray(response));
if( statuses.size() > 0) {
@ -450,7 +450,7 @@ public class GNUAPI {
params.put("limit", "80");
accounts = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl(String.format("/statuses/%s/reblogged_by", statusId)), 60, params, prefKeyOauthTokenT);
accounts = parseAccountResponse(new JSONArray(response));
apiResponse.setSince_id(httpsConnection.getSince_id());
@ -488,7 +488,7 @@ public class GNUAPI {
params.put("limit", "80");
accounts = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl(String.format("/statuses/%s/favourited_by", statusId)), 60, params, prefKeyOauthTokenT);
accounts = parseAccountResponse(new JSONArray(response));
apiResponse.setSince_id(httpsConnection.getSince_id());
@ -520,7 +520,7 @@ public class GNUAPI {
statuses = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl(String.format("/statuses/%s", statusId)), 60, null, prefKeyOauthTokenT);
Status status = parseStatuses(context, new JSONObject(response));
statuses.add(status);
@ -548,7 +548,7 @@ public class GNUAPI {
public app.fedilab.android.client.Entities.Context getStatusContext(String statusId, boolean directtimeline) {
app.fedilab.android.client.Entities.Context statusContext = new app.fedilab.android.client.Entities.Context();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response;
if( !directtimeline)
response = httpsConnection.get(getAbsoluteUrl(String.format("/statusnet/conversation/%s.json", statusId)), 60, null, prefKeyOauthTokenT);
@ -625,7 +625,7 @@ public class GNUAPI {
params.put("limit",String.valueOf(limit));
List<Conversation> conversations = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl("/direct_messages.json"), 60, params, prefKeyOauthTokenT);
apiResponse.setSince_id(httpsConnection.getSince_id());
apiResponse.setMax_id(httpsConnection.getMax_id());
@ -672,7 +672,7 @@ public class GNUAPI {
params.put("count",String.valueOf(limit));
statuses = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl("/direct_messages.json"), 60, params, prefKeyOauthTokenT);
statuses = parseStatuses(context, new JSONArray(response));
if( statuses.size() > 0) {
@ -745,7 +745,7 @@ public class GNUAPI {
//Current user
statuses = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl("/statuses/home_timeline.json"), 60, params, prefKeyOauthTokenT);
statuses = parseStatuses(context, new JSONArray(response));
if( statuses.size() > 0) {
@ -834,7 +834,7 @@ public class GNUAPI {
params.put("count",String.valueOf(limit));
statuses = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String url;
if(local)
url = getAbsoluteUrl("/statuses/public_timeline.json");
@ -987,7 +987,7 @@ public class GNUAPI {
return null;
try {
String query = tag.trim();
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
if( MainActivity.social != UpdateAccountInfoAsyncTask.SOCIAL.PEERTUBE)
try {
query = URLEncoder.encode(query, "UTF-8");
@ -1075,7 +1075,7 @@ public class GNUAPI {
params.put("user_id",targetedId);
accounts = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl(action), 60, params, prefKeyOauthTokenT);
apiResponse.setSince_id(httpsConnection.getSince_id());
apiResponse.setMax_id(httpsConnection.getMax_id());
@ -1132,7 +1132,7 @@ public class GNUAPI {
params.put("limit",String.valueOf(limit));
accounts = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl("/follow_requests"), 60, params, prefKeyOauthTokenT);
apiResponse.setSince_id(httpsConnection.getSince_id());
apiResponse.setMax_id(httpsConnection.getMax_id());
@ -1181,7 +1181,7 @@ public class GNUAPI {
params.put("count",String.valueOf(limit));
statuses = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl("/favorites.json"), 60, params, prefKeyOauthTokenT);
statuses = parseStatuses(context, new JSONArray(response));
if( statuses.size() > 0) {
@ -1225,7 +1225,7 @@ public class GNUAPI {
HashMap<String, String> params = new HashMap<>();
params.put("notifications", Boolean.toString(muteNotifications));
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
httpsConnection.post(getAbsoluteUrl(String.format("/accounts/%s/mute", targetedId)), 60, params, prefKeyOauthTokenT);
actionCode = httpsConnection.getActionCode();
} catch (HttpsConnection.HttpsConnectionException e) {
@ -1382,7 +1382,7 @@ public class GNUAPI {
}
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String resp = httpsConnection.post(getAbsoluteUrl(action), 60, params, prefKeyOauthTokenT);
actionCode = httpsConnection.getActionCode();
if( statusAction == API.StatusAction.REBLOG || statusAction == API.StatusAction.UNREBLOG || statusAction == API.StatusAction.FAVOURITE || statusAction == API.StatusAction.UNFAVOURITE) {
@ -1463,7 +1463,7 @@ public class GNUAPI {
params.put("possibly_sensitive", Boolean.toString(status.isSensitive()));
statuses = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response;
if( !status.getVisibility().equals("direct"))
response = httpsConnection.post(getAbsoluteUrl("/statuses/update.json"), 60, params, prefKeyOauthTokenT);
@ -1565,7 +1565,7 @@ public class GNUAPI {
return apiResponse;
}
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(url, 60, params, prefKeyOauthTokenT);
apiResponse.setSince_id(httpsConnection.getSince_id());
apiResponse.setMax_id(httpsConnection.getMax_id());
@ -1628,7 +1628,7 @@ public class GNUAPI {
params.put("description", description);
}
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.put(getAbsoluteUrl(String.format("/media/%s", mediaId)), 240, params, prefKeyOauthTokenT);
attachment = parseAttachmentResponse(new JSONObject(response));
} catch (HttpsConnection.HttpsConnectionException e) {
@ -1646,6 +1646,44 @@ public class GNUAPI {
}
/**
* Retrieves Accounts and feeds when searching *synchronously*
*
* @param query String search
* @return Results
*/
public APIResponse searchRemote(String instance, String query, String max_id) {
HashMap<String, String> params = new HashMap<>();
try {
query = URLEncoder.encode(query, "UTF-8");
} catch (UnsupportedEncodingException ignored) {}
if (max_id != null)
params.put("max_id", max_id);
try {
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteRemoteUrl(instance, "/statusnet/tags/timeline/"+query.trim().toLowerCase().replaceAll("\\#","")+".json"), 60, params, null);
List<Status> statuses = parseStatuses(context, new JSONArray(response));
if( statuses.size() > 0) {
apiResponse.setSince_id(String.valueOf(Long.parseLong(statuses.get(0).getId())+1));
apiResponse.setMax_id(String.valueOf(Long.parseLong(statuses.get(statuses.size() - 1).getId())-1));
}
apiResponse.setStatuses(statuses);
} catch (HttpsConnection.HttpsConnectionException e) {
setError(e.getStatusCode(), e);
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return apiResponse;
}
/**
* Retrieves Accounts and feeds when searching *synchronously*
*
@ -1665,7 +1703,7 @@ public class GNUAPI {
params.put("q", query);
}
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl("/users/search.json"), 60, params, prefKeyOauthTokenT);
List<Account> accounts = parseAccountResponse(new JSONArray(response));
results.setAccounts(accounts);
@ -1700,7 +1738,7 @@ public class GNUAPI {
if (max_id != null)
params.put("max_id", max_id);
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl("/statusnet/tags/timeline/"+query.trim().toLowerCase().replaceAll("\\#","")+".json"), 60, params, null);
List<Status> statuses = parseStatuses(context, new JSONArray(response));
if( statuses.size() > 0) {
@ -1755,7 +1793,7 @@ public class GNUAPI {
params.put("limit", String.valueOf(count));
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl("/accounts/search"), 60, params, prefKeyOauthTokenT);
accounts = parseAccountResponse(new JSONArray(response));
apiResponse.setSince_id(httpsConnection.getSince_id());
@ -2357,8 +2395,10 @@ public class GNUAPI {
private String getAbsoluteUrl(String action) {
return Helper.instanceWithProtocol(this.instance) + "/api" + action;
return Helper.instanceWithProtocol(this.context, this.instance) + "/api" + action;
}
private String getAbsoluteRemoteUrl(String instance, String action) {
return Helper.instanceWithProtocol(this.context,instance) + "/api" + action;
}
}

View File

@ -12,6 +12,7 @@ import java.io.InputStream;
import java.lang.ref.WeakReference;
import app.fedilab.android.client.HttpsConnection;
import app.fedilab.android.helper.Helper;
/**
* Created by Thomas on 13/12/2017.
@ -30,7 +31,8 @@ public class CustomStreamFetcher implements DataFetcher<InputStream> {
@Override
public void loadData(@NonNull Priority priority, @NonNull DataCallback<? super InputStream> callback) {
callback.onDataReady(new HttpsConnection(this.contextWeakReference.get()).getPicture(url.toStringUrl()));
String instance = Helper.getLiveInstance(this.contextWeakReference.get());
callback.onDataReady(new HttpsConnection(this.contextWeakReference.get(), instance).getPicture(url.toStringUrl()));
}
@Override

View File

@ -14,6 +14,7 @@ package app.fedilab.android.client;
* You should have received a copy of the GNU General Public License along with Fedilab; if not,
* see <http://www.gnu.org/licenses>. */
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
import android.database.sqlite.SQLiteDatabase;
@ -54,7 +55,9 @@ import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;
import app.fedilab.android.R;
import app.fedilab.android.activities.MainActivity;
@ -88,9 +91,10 @@ public class HttpsConnection {
private int CHUNK_SIZE = 4096;
private SharedPreferences sharedpreferences;
private Proxy proxy;
private String instance;
public HttpsConnection(Context context){
public HttpsConnection(Context context, String instance){
this.instance = instance;
this.context = context;
sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
boolean proxyEnabled = sharedpreferences.getBoolean(Helper.SET_PROXY_ENABLED, false);
@ -121,6 +125,16 @@ public class HttpsConnection {
}
}
if( instance != null && instance.endsWith(".onion")) {
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
@SuppressLint("BadHostnameVerifier")
@Override
public boolean verify(String arg0, SSLSession arg1) {
return true;
}
});
}
}
@ -155,7 +169,7 @@ public class HttpsConnection {
httpsURLConnection.setRequestProperty("User-Agent", Helper.USER_AGENT);
httpsURLConnection.setRequestProperty("Content-Type", "application/json");
httpsURLConnection.setRequestProperty("Accept", "application/json");
httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory());
httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory(this.instance));
if (token != null && !token.startsWith("Basic "))
httpsURLConnection.setRequestProperty("Authorization", "Bearer " + token);
else if( token != null && token.startsWith("Basic "))
@ -250,7 +264,7 @@ public class HttpsConnection {
httpsURLConnection.setRequestProperty("Content-Type", "application/json");
httpsURLConnection.setRequestProperty("Accept", "application/json");
httpsURLConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36");
httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory());
httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory(this.instance));
httpsURLConnection.setRequestMethod("GET");
String response;
if (httpsURLConnection.getResponseCode() >= 200 && httpsURLConnection.getResponseCode() < 400) {
@ -338,7 +352,7 @@ public class HttpsConnection {
httpsURLConnection.setRequestProperty("User-Agent", Helper.USER_AGENT);
httpsURLConnection.setConnectTimeout(timeout * 1000);
httpsURLConnection.setDoOutput(true);
httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory());
httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory(this.instance));
httpsURLConnection.setRequestMethod("POST");
if (token != null && !token.startsWith("Basic "))
httpsURLConnection.setRequestProperty("Authorization", "Bearer " + token);
@ -444,7 +458,7 @@ public class HttpsConnection {
httpsURLConnection.setRequestProperty("User-Agent", Helper.USER_AGENT);
httpsURLConnection.setConnectTimeout(timeout * 1000);
httpsURLConnection.setDoOutput(true);
httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory());
httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory(this.instance));
httpsURLConnection.setRequestProperty("Content-Type", "application/json");
httpsURLConnection.setRequestProperty("Accept", "application/json");
httpsURLConnection.setRequestMethod("POST");
@ -534,7 +548,7 @@ public class HttpsConnection {
httpsURLConnection.setRequestProperty("User-Agent", Helper.USER_AGENT);
httpsURLConnection.setConnectTimeout(timeout * 1000);
httpsURLConnection.setDoOutput(true);
httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory());
httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory(this.instance));
httpsURLConnection.setRequestMethod("POST");
if (token != null && !token.startsWith("Basic "))
httpsURLConnection.setRequestProperty("Authorization", "Bearer " + token);
@ -772,7 +786,7 @@ public class HttpsConnection {
httpsURLConnection = (HttpsURLConnection) url.openConnection(proxy);
else
httpsURLConnection = (HttpsURLConnection) url.openConnection();
httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory());
httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory(this.instance));
httpsURLConnection.setRequestProperty("User-Agent", Helper.USER_AGENT);
int responseCode = httpsURLConnection.getResponseCode();
// always check HTTP response code first
@ -867,7 +881,7 @@ public class HttpsConnection {
httpsURLConnection = (HttpsURLConnection) url.openConnection();
httpsURLConnection.setRequestProperty("User-Agent", Helper.USER_AGENT);
httpsURLConnection.setConnectTimeout(timeout * 1000);
httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory());
httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory(this.instance));
httpsURLConnection.setDoInput(true);
httpsURLConnection.setDoOutput(true);
httpsURLConnection.setUseCaches(false);
@ -1085,7 +1099,7 @@ public class HttpsConnection {
httpsURLConnection = (HttpsURLConnection) url.openConnection();
httpsURLConnection.setRequestProperty("User-Agent", Helper.USER_AGENT);
httpsURLConnection.setConnectTimeout(timeout * 1000);
httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory());
httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory(this.instance));
if( Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT ){
httpsURLConnection.setRequestMethod("PATCH");
}else {
@ -1207,8 +1221,14 @@ public class HttpsConnection {
* @param inputStream InputStream of the file to upload
* @param listener - OnRetrieveAttachmentInterface: listener to send information about attachment once uploaded.
*/
public void upload(final InputStream inputStream, String fname, String tokenUsed, final OnRetrieveAttachmentInterface listener) {
public void upload(final InputStream inputStream, String fname, Account account, final OnRetrieveAttachmentInterface listener) {
final String fileName = FileNameCleaner.cleanFileName(fname);
SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
if( account == null){
return;
}
this.instance = account.getInstance();
String token = account.getToken();
if( Helper.getLiveInstanceWithProtocol(context).startsWith("https://")) {
new Thread(new Runnable() {
@Override
@ -1218,15 +1238,6 @@ public class HttpsConnection {
String twoHyphens = "--";
String boundary = "*****" + Long.toString(System.currentTimeMillis()) + "*****";
String lineEnd = "\r\n";
String token;
if( tokenUsed == null)
token = sharedpreferences.getString(Helper.PREF_KEY_OAUTH_TOKEN, null);
else
token = tokenUsed;
SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
String instance = sharedpreferences.getString(Helper.PREF_INSTANCE, Helper.getLiveInstance(context));
Account account = new AccountDAO(context, db).getUniqAccount(userId, instance);
URL url;
if(MainActivity.social != UpdateAccountInfoAsyncTask.SOCIAL.GNU && MainActivity.social != UpdateAccountInfoAsyncTask.SOCIAL.FRIENDICA)
url = new URL("https://" + account.getInstance() + "/api/v1/media");
@ -1266,7 +1277,7 @@ public class HttpsConnection {
httpsURLConnection.setFixedLengthStreamingMode(lengthSent);
httpsURLConnection.setRequestProperty("User-Agent", Helper.USER_AGENT);
httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory());
httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory(instance));
httpsURLConnection.setDoInput(true);
httpsURLConnection.setDoOutput(true);
httpsURLConnection.setUseCaches(false);
@ -1392,11 +1403,6 @@ public class HttpsConnection {
String twoHyphens = "--";
String boundary = "*****" + Long.toString(System.currentTimeMillis()) + "*****";
String lineEnd = "\r\n";
String token;
if( tokenUsed == null)
token = sharedpreferences.getString(Helper.PREF_KEY_OAUTH_TOKEN, null);
else
token = tokenUsed;
SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
String instance = sharedpreferences.getString(Helper.PREF_INSTANCE, Helper.getLiveInstance(context));
@ -1571,7 +1577,7 @@ public class HttpsConnection {
httpsURLConnection = (HttpsURLConnection) url.openConnection();
httpsURLConnection.setRequestProperty("User-Agent", Helper.USER_AGENT);
httpsURLConnection.setConnectTimeout(timeout * 1000);
httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory());
httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory(this.instance));
if (token != null && !token.startsWith("Basic "))
httpsURLConnection.setRequestProperty("Authorization", "Bearer " + token);
else if( token != null && token.startsWith("Basic "))
@ -1699,7 +1705,7 @@ public class HttpsConnection {
else
httpsURLConnection = (HttpsURLConnection) url.openConnection();
httpsURLConnection.setRequestProperty("User-Agent", Helper.USER_AGENT);
httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory());
httpsURLConnection.setSSLSocketFactory(new TLSSocketFactory(this.instance));
if (token != null && !token.startsWith("Basic "))
httpsURLConnection.setRequestProperty("Authorization", "Bearer " + token);
else if( token != null && token.startsWith("Basic "))

View File

@ -143,7 +143,7 @@ public class PeertubeAPI {
*/
public APIResponse getInstance() {
try {
String response = new HttpsConnection(context).get(getAbsoluteUrl("/instance"), 30, null, prefKeyOauthTokenT);
String response = new HttpsConnection(context, this.instance).get(getAbsoluteUrl("/instance"), 30, null, prefKeyOauthTokenT);
Instance instanceEntity = parseInstance(new JSONObject(response));
apiResponse.setInstance(instanceEntity);
} catch (HttpsConnection.HttpsConnectionException e) {
@ -213,7 +213,7 @@ public class PeertubeAPI {
params.put("scheduleUpdate","null");
List<Peertube> peertubes = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
httpsConnection.put(getAbsoluteUrl(String.format("/videos/%s", peertube.getId())), 60, params, prefKeyOauthTokenT);
peertubes.add(peertube);
} catch (HttpsConnection.HttpsConnectionException e) {
@ -264,7 +264,7 @@ public class PeertubeAPI {
}
}
try {
new HttpsConnection(context).patch(getAbsoluteUrl("/accounts/update_credentials"), 60, requestParams, avatar, avatarName, header, headerName, prefKeyOauthTokenT);
new HttpsConnection(context, this.instance).patch(getAbsoluteUrl("/accounts/update_credentials"), 60, requestParams, avatar, avatarName, header, headerName, prefKeyOauthTokenT);
} catch (HttpsConnection.HttpsConnectionException e) {
e.printStackTrace();
setError(e.getStatusCode(), e);
@ -288,7 +288,7 @@ public class PeertubeAPI {
PeertubeInformation peertubeInformation = new PeertubeInformation();
try {
String response = new HttpsConnection(context).get(getAbsoluteUrl("/videos/categories"), 60, null, null);
String response = new HttpsConnection(context, this.instance).get(getAbsoluteUrl("/videos/categories"), 60, null, null);
JSONObject categories = new JSONObject(response);
LinkedHashMap<Integer, String> _pcategories = new LinkedHashMap<>();
for( int i = 1 ; i <= categories.length() ; i++){
@ -297,7 +297,7 @@ public class PeertubeAPI {
}
peertubeInformation.setCategories(_pcategories);
response = new HttpsConnection(context).get(getAbsoluteUrl("/videos/languages"), 60, null, null);
response = new HttpsConnection(context, this.instance).get(getAbsoluteUrl("/videos/languages"), 60, null, null);
JSONObject languages = new JSONObject(response);
LinkedHashMap<String, String> _languages = new LinkedHashMap<>();
Iterator<String> iter = languages.keys();
@ -309,7 +309,7 @@ public class PeertubeAPI {
}
peertubeInformation.setLanguages(_languages);
response = new HttpsConnection(context).get(getAbsoluteUrl("/videos/privacies"), 60, null, null);
response = new HttpsConnection(context, this.instance).get(getAbsoluteUrl("/videos/privacies"), 60, null, null);
JSONObject privacies = new JSONObject(response);
LinkedHashMap<Integer, String> _pprivacies = new LinkedHashMap<>();
for( int i = 1 ; i <= privacies.length() ; i++){
@ -319,7 +319,7 @@ public class PeertubeAPI {
peertubeInformation.setPrivacies(_pprivacies);
response = new HttpsConnection(context).get(getAbsoluteUrl("/videos/licences"), 60, null, null);
response = new HttpsConnection(context, this.instance).get(getAbsoluteUrl("/videos/licences"), 60, null, null);
JSONObject licences = new JSONObject(response);
LinkedHashMap<Integer, String> _plicences = new LinkedHashMap<>();
for( int i = 1 ; i <= licences.length() ; i++){
@ -335,7 +335,7 @@ public class PeertubeAPI {
lang = PeertubeInformation.langueMapped.get(Locale.getDefault().getLanguage());
if( lang != null && !lang.startsWith("en")) {
response = new HttpsConnection(context).get(String.format("https://" + instance + "/client/locales/%s/server.json", lang), 60, null, null);
response = new HttpsConnection(context, this.instance).get(String.format("https://" + instance + "/client/locales/%s/server.json", lang), 60, null, null);
JSONObject translations = new JSONObject(response);
LinkedHashMap<String, String> _translations = new LinkedHashMap<>();
Iterator<String> itertrans = translations.keys();
@ -368,7 +368,7 @@ public class PeertubeAPI {
public Account verifyCredentials() {
account = new Account();
try {
String response = new HttpsConnection(context).get(getAbsoluteUrl("/users/me"), 60, null, prefKeyOauthTokenT);
String response = new HttpsConnection(context, this.instance).get(getAbsoluteUrl("/users/me"), 60, null, prefKeyOauthTokenT);
JSONObject accountObject = new JSONObject(response).getJSONObject("account");
account = parseAccountResponsePeertube(context, accountObject);
} catch (NoSuchAlgorithmException e) {
@ -397,9 +397,10 @@ public class PeertubeAPI {
}if( values.containsKey("refresh_token") && values.get("refresh_token") != null)
targetedAccount.setRefresh_token(values.get("refresh_token"));
new AccountDAO(context, db).updateAccount(targetedAccount);
String response;
try {
response = new HttpsConnection(context).get(getAbsoluteUrl("/users/me"), 60, null, targetedAccount.getToken());
response = new HttpsConnection(context, this.instance).get(getAbsoluteUrl("/users/me"), 60, null, targetedAccount.getToken());
JSONObject accountObject = new JSONObject(response).getJSONObject("account");
account = parseAccountResponsePeertube(context, accountObject);
} catch (IOException e1) {
@ -433,14 +434,13 @@ public class PeertubeAPI {
params.put("client_secret", client_secret);
params.put("refresh_token", refresh_token);
try {
String response = new HttpsConnection(context).post(getAbsoluteUrl("/users/token"), 60, params, null);
String response = new HttpsConnection(context, this.instance).post(getAbsoluteUrl("/users/token"), 60, params, null);
JSONObject resobj = new JSONObject(response);
String token = resobj.get("access_token").toString();
if( resobj.has("refresh_token"))
refresh_token = resobj.get("refresh_token").toString();
newValues.put("access_token",token);
newValues.put("refresh_token",refresh_token);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (IOException e) {
@ -465,7 +465,7 @@ public class PeertubeAPI {
account = new Account();
try {
String response = new HttpsConnection(context).get(getAbsoluteUrl(String.format("/accounts/%s",accountId)), 60, null, prefKeyOauthTokenT);
String response = new HttpsConnection(context, this.instance).get(getAbsoluteUrl(String.format("/accounts/%s",accountId)), 60, null, prefKeyOauthTokenT);
account = parseAccountResponsePeertube(context, new JSONObject(response));
} catch (HttpsConnection.HttpsConnectionException e) {
setError(e.getStatusCode(), e);
@ -494,7 +494,7 @@ public class PeertubeAPI {
params.put("uris", uri);
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl("/users/me/subscriptions/exist"), 60, params, prefKeyOauthTokenT);
return new JSONObject(response).getBoolean(uri);
} catch (HttpsConnection.HttpsConnectionException e) {
@ -558,7 +558,7 @@ public class PeertubeAPI {
List<Peertube> peertubes = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl("/users/me/videos"), 60, params, prefKeyOauthTokenT);
JSONArray jsonArray = new JSONObject(response).getJSONArray("data");
@ -566,6 +566,7 @@ public class PeertubeAPI {
} catch (HttpsConnection.HttpsConnectionException e) {
if( e.getStatusCode() == 401){ //Avoid the issue with the refresh token
SQLiteDatabase db = Sqlite.getInstance(context, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
@ -580,8 +581,9 @@ public class PeertubeAPI {
if (refresh_token != null)
account.setRefresh_token(refresh_token);
new AccountDAO(context, db).updateAccount(account);
prefKeyOauthTokenT = newtoken;
}
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response;
try {
response = httpsConnection.get(getAbsoluteUrl("/users/me/videos"), 60, params, prefKeyOauthTokenT);
@ -637,7 +639,7 @@ public class PeertubeAPI {
params.put("count", String.valueOf(limit));
List<Peertube> peertubes = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl(String.format("/accounts/%s/videos", acct)), 60, params, prefKeyOauthTokenT);
JSONArray jsonArray = new JSONObject(response).getJSONArray("data");
peertubes = parsePeertube(jsonArray);
@ -699,7 +701,7 @@ public class PeertubeAPI {
params.put("count", String.valueOf(limit));
List<PeertubeNotification> peertubeNotifications = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl("/users/me/notifications"), 60, params, prefKeyOauthTokenT);
JSONArray jsonArray = new JSONObject(response).getJSONArray("data");
peertubeNotifications = parsePeertubeNotifications(jsonArray);
@ -754,7 +756,7 @@ public class PeertubeAPI {
List<Peertube> peertubes = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl(String.format("/video-channels/%s/videos", acct)), 60, params, prefKeyOauthTokenT);
JSONArray jsonArray = new JSONObject(response).getJSONArray("data");
@ -871,7 +873,7 @@ public class PeertubeAPI {
params.put("nsfw", String.valueOf(nsfw));
List<Peertube> peertubes = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl(action), 60, params, prefKeyOauthTokenT);
if( !action.equals("/overviews/videos")) {
JSONArray values = new JSONObject(response).getJSONArray("data");
@ -955,7 +957,7 @@ public class PeertubeAPI {
List<Account> accounts = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl(String.format("/accounts/%s/video-channels", name)), 60, null, null);
JSONArray jsonArray = new JSONObject(response).getJSONArray("data");
accounts = parseAccountResponsePeertube(context, instance, jsonArray);
@ -983,7 +985,7 @@ public class PeertubeAPI {
List<Peertube> peertubes = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(String.format("https://"+instance+"/api/v1/video-channels/%s/videos", name), 60, null, null);
JSONArray jsonArray = new JSONObject(response).getJSONArray("data");
peertubes = parsePeertube(jsonArray);
@ -1015,7 +1017,7 @@ public class PeertubeAPI {
params.put("start", max_id);
params.put("count", "50");
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get("https://"+instance+"/api/v1/videos", 60, params, null);
JSONArray jsonArray = new JSONObject(response).getJSONArray("data");
peertubes = parsePeertube(jsonArray);
@ -1042,7 +1044,7 @@ public class PeertubeAPI {
Peertube peertube = null;
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(String.format("https://"+instance+"/api/v1/videos/%s", videoId), 60, null, token);
JSONObject jsonObject = new JSONObject(response);
peertube = parseSinglePeertube(context, instance, jsonObject);
@ -1079,7 +1081,7 @@ public class PeertubeAPI {
}
List<Peertube> peertubes = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get("https://"+instance+"/api/v1/search/videos", 60, params, null);
JSONArray jsonArray = new JSONObject(response).getJSONArray("data");
peertubes = parsePeertube(jsonArray);
@ -1105,7 +1107,7 @@ public class PeertubeAPI {
public APIResponse getSinglePeertubeComments(String instance, String videoId) {
statuses = new ArrayList<>();
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(String.format("https://"+instance+"/api/v1/videos/%s/comment-threads", videoId), 60, null, null);
JSONObject jsonObject = new JSONObject(response);
statuses = parseSinglePeertubeComments(context, instance, jsonObject);
@ -1136,7 +1138,7 @@ public class PeertubeAPI {
@SuppressWarnings("SameParameterValue")
public String getRating(String id){
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.get(getAbsoluteUrl(String.format("/users/me/videos/%s/rating",id)), 60, null, prefKeyOauthTokenT);
return new JSONObject(response).get("rating").toString();
} catch (HttpsConnection.HttpsConnectionException e) {
@ -1235,7 +1237,7 @@ public class PeertubeAPI {
return -1;
}
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
if( actionCall.equals("POST"))
httpsConnection.post(getAbsoluteUrl(action), 60, params, prefKeyOauthTokenT);
else if( actionCall.equals("DELETE"))
@ -1273,7 +1275,7 @@ public class PeertubeAPI {
params.put("description", description);
}
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
String response = httpsConnection.put(getAbsoluteUrl(String.format("/media/%s", mediaId)), 240, params, prefKeyOauthTokenT);
attachment = parseAttachmentResponse(new JSONObject(response));
} catch (HttpsConnection.HttpsConnectionException e) {
@ -1301,7 +1303,7 @@ public class PeertubeAPI {
List<Filters> filters = null;
try {
String response = new HttpsConnection(context).get(getAbsoluteUrl("/filters"), 60, null, prefKeyOauthTokenT);
String response = new HttpsConnection(context, this.instance).get(getAbsoluteUrl("/filters"), 60, null, prefKeyOauthTokenT);
filters = parseFilters(new JSONArray(response));
} catch (HttpsConnection.HttpsConnectionException e) {
setError(e.getStatusCode(), e);
@ -1328,7 +1330,7 @@ public class PeertubeAPI {
List<Filters> filters = new ArrayList<>();
Filters filter;
try {
String response = new HttpsConnection(context).get(getAbsoluteUrl(String.format("/filters/%s", filterId)), 60, null, prefKeyOauthTokenT);
String response = new HttpsConnection(context, this.instance).get(getAbsoluteUrl(String.format("/filters/%s", filterId)), 60, null, prefKeyOauthTokenT);
filter = parseFilter(new JSONObject(response));
filters.add(filter);
} catch (HttpsConnection.HttpsConnectionException e) {
@ -1367,7 +1369,7 @@ public class PeertubeAPI {
params.put("expires_in", String.valueOf(filter.getExpires_in()));
ArrayList<Filters> filters = new ArrayList<>();
try {
String response = new HttpsConnection(context).post(getAbsoluteUrl("/filters"), 60, params, prefKeyOauthTokenT);
String response = new HttpsConnection(context, this.instance).post(getAbsoluteUrl("/filters"), 60, params, prefKeyOauthTokenT);
Filters resfilter = parseFilter(new JSONObject(response));
filters.add(resfilter);
} catch (HttpsConnection.HttpsConnectionException e) {
@ -1393,7 +1395,7 @@ public class PeertubeAPI {
public int deleteFilters(Filters filter){
try {
HttpsConnection httpsConnection = new HttpsConnection(context);
HttpsConnection httpsConnection = new HttpsConnection(context, this.instance);
httpsConnection.delete(getAbsoluteUrl(String.format("/filters/%s", filter.getId())), 60, null, prefKeyOauthTokenT);
actionCode = httpsConnection.getActionCode();
} catch (HttpsConnection.HttpsConnectionException e) {
@ -1428,7 +1430,7 @@ public class PeertubeAPI {
params.put("expires_in", String.valueOf(filter.getExpires_in()));
ArrayList<Filters> filters = new ArrayList<>();
try {
String response = new HttpsConnection(context).put(getAbsoluteUrl(String.format("/filters/%s", filter.getId())), 60, params, prefKeyOauthTokenT);
String response = new HttpsConnection(context, this.instance).put(getAbsoluteUrl(String.format("/filters/%s", filter.getId())), 60, params, prefKeyOauthTokenT);
Filters resfilter = parseFilter(new JSONObject(response));
filters.add(resfilter);
} catch (HttpsConnection.HttpsConnectionException e) {
@ -1454,7 +1456,7 @@ public class PeertubeAPI {
List<app.fedilab.android.client.Entities.List> lists = new ArrayList<>();
try {
String response = new HttpsConnection(context).get(getAbsoluteUrl("/lists"), 60, null, prefKeyOauthTokenT);
String response = new HttpsConnection(context, this.instance).get(getAbsoluteUrl("/lists"), 60, null, prefKeyOauthTokenT);
lists = parseLists(new JSONArray(response));
} catch (HttpsConnection.HttpsConnectionException e) {
setError(e.getStatusCode(), e);
@ -1481,7 +1483,7 @@ public class PeertubeAPI {
List<app.fedilab.android.client.Entities.List> lists = new ArrayList<>();
app.fedilab.android.client.Entities.List list;
try {
String response = new HttpsConnection(context).get(getAbsoluteUrl(String.format("/accounts/%s/lists", userId)), 60, null, prefKeyOauthTokenT);
String response = new HttpsConnection(context, this.instance).get(getAbsoluteUrl(String.format("/accounts/%s/lists", userId)), 60, null, prefKeyOauthTokenT);
list = parseList(new JSONObject(response));
lists.add(list);
} catch (HttpsConnection.HttpsConnectionException e) {
@ -2265,7 +2267,7 @@ public class PeertubeAPI {
private String getAbsoluteUrl(String action) {
return Helper.instanceWithProtocol(this.instance) + "/api/v1" + action;
return Helper.instanceWithProtocol(this.context, this.instance) + "/api/v1" + action;
}
private String getAbsoluteUrlRemote(String remote, String action) {
return "https://" + remote + "/api/v1" + action;

View File

@ -2,17 +2,20 @@ package app.fedilab.android.client;
import android.content.SharedPreferences;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLEngine;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import app.fedilab.android.activities.MainApplication;
import app.fedilab.android.helper.Helper;
@ -26,12 +29,36 @@ public class TLSSocketFactory extends SSLSocketFactory {
private SSLSocketFactory sSLSocketFactory;
private SSLContext sslContext;
private boolean isOnion;
public TLSSocketFactory() throws KeyManagementException, NoSuchAlgorithmException {
public TLSSocketFactory(String instance) throws KeyManagementException, NoSuchAlgorithmException {
sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, null, null);
if( instance == null || !instance.endsWith(".onion")) {
sslContext = SSLContext.getInstance("TLS");
isOnion = false;
sslContext.init(null, null, null);
}else{
sslContext = SSLContext.getInstance("SSL");
isOnion = true;
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(
java.security.cert.X509Certificate[] certs, String authType) {
}
}
};
sslContext.init(null, trustAllCerts, null);
}
sSLSocketFactory = sslContext.getSocketFactory();
}
public SSLContext getSSLContext(){
@ -84,15 +111,19 @@ public class TLSSocketFactory extends SSLSocketFactory {
private Socket enableTLSOnSocket(Socket socket) {
if((socket instanceof SSLSocket)) {
boolean security_provider = false;
try {
SharedPreferences sharedpreferences = MainApplication.getApp().getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
security_provider = sharedpreferences.getBoolean(Helper.SET_SECURITY_PROVIDER, true);
}catch (Exception ignored){}
if( security_provider)
((SSLSocket)socket).setEnabledProtocols(new String[] {"TLSv1.1", "TLSv1.2", "TLSv1.3"});
else
((SSLSocket)socket).setEnabledProtocols(new String[] {"TLSv1.1", "TLSv1.2"});
if( !isOnion){
boolean security_provider = false;
try {
SharedPreferences sharedpreferences = MainApplication.getApp().getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE);
security_provider = sharedpreferences.getBoolean(Helper.SET_SECURITY_PROVIDER, true);
}catch (Exception ignored){}
if( security_provider)
((SSLSocket)socket).setEnabledProtocols(new String[] {"TLSv1.1", "TLSv1.2", "TLSv1.3"});
else
((SSLSocket)socket).setEnabledProtocols(new String[] {"TLSv1.1", "TLSv1.2"});
}else{
((SSLSocket)socket).setEnabledProtocols(new String[] {"TLSv1.1", "TLSv1.2",});
}
}
return socket;
}

View File

@ -62,7 +62,7 @@ public class ConversationDecoration extends RecyclerView.ItemDecoration{
if( consoleMode)
leftSide = (int) Helper.convertDpToPixel(6, context);
else if( compactMode)
leftSide = (int) Helper.convertDpToPixel(12, context);
leftSide = (int) Helper.convertDpToPixel(3, context);
else
leftSide = (int) Helper.convertDpToPixel(28, context);

View File

@ -281,6 +281,8 @@ public class ScheduledTootsListAdapter extends BaseAdapter implements OnPostActi
final DatePicker datePicker = dialogView.findViewById(R.id.date_picker);
final TimePicker timePicker = dialogView.findViewById(R.id.time_picker);
if (android.text.format.DateFormat.is24HourFormat(context))
timePicker.setIs24HourView(true);
Button date_time_cancel = dialogView.findViewById(R.id.date_time_cancel);
final ImageButton date_time_previous = dialogView.findViewById(R.id.date_time_previous);
final ImageButton date_time_next = dialogView.findViewById(R.id.date_time_next);

View File

@ -538,19 +538,6 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
}
status.setItemViewType(viewHolder.getItemViewType());
if( status.getReblog() == null){
if( status.getAccount().isBot()){
holder.status_account_bot.setVisibility(View.VISIBLE);
}else {
holder.status_account_bot.setVisibility(View.GONE);
}
}else{
if( status.getReblog().getAccount().isBot()){
holder.status_account_bot.setVisibility(View.VISIBLE);
}else {
holder.status_account_bot.setVisibility(View.GONE);
}
}
boolean displayBookmarkButton = sharedpreferences.getBoolean(Helper.SET_SHOW_BOOKMARK, false);
boolean fullAttachement = sharedpreferences.getBoolean(Helper.SET_FULL_PREVIEW, false);
@ -573,8 +560,26 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
boolean isModerator = sharedpreferences.getBoolean(Helper.PREF_IS_MODERATOR, false);
boolean isAdmin = sharedpreferences.getBoolean(Helper.PREF_IS_ADMINISTRATOR, false);
boolean new_badge = sharedpreferences.getBoolean(Helper.SET_DISPLAY_NEW_BADGE, true);
boolean bot_icon = sharedpreferences.getBoolean(Helper.SET_DISPLAY_BOT_ICON, true);
int translator = sharedpreferences.getInt(Helper.SET_TRANSLATOR, Helper.TRANS_YANDEX);
int behaviorWithAttachments = sharedpreferences.getInt(Helper.SET_ATTACHMENT_ACTION, Helper.ATTACHMENT_ALWAYS);
if (status.getReblog() == null) {
if (bot_icon && status.getAccount().isBot()) {
holder.status_account_bot.setVisibility(View.VISIBLE);
} else {
holder.status_account_bot.setVisibility(View.GONE);
}
} else {
if (bot_icon && status.getReblog().getAccount().isBot()) {
holder.status_account_bot.setVisibility(View.VISIBLE);
} else {
holder.status_account_bot.setVisibility(View.GONE);
}
}
if (type != RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE && !isCompactMode && !isConsoleMode && displayBookmarkButton)
holder.status_bookmark.setVisibility(View.VISIBLE);
else
@ -781,7 +786,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
});
}
boolean new_badge = sharedpreferences.getBoolean(Helper.SET_DISPLAY_NEW_BADGE, true);
if (status.isNew() && new_badge)
holder.new_element.setVisibility(View.VISIBLE);
else
@ -794,23 +799,6 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
holder.status_privacy.getLayoutParams().width = (int) Helper.convertDpToPixel((20 * iconSizePercent / 100), context);
/*if ((isCompactMode || isConsoleMode) && type == RetrieveFeedsAsyncTask.Type.CONTEXT && getItemViewType(viewHolder.getAdapterPosition()) != FOCUSED_STATUS && viewHolder.getAdapterPosition() != 0) {
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT
);
params.setMargins((int) Helper.convertDpToPixel(25, context), 0, 0, 0);
holder.main_container.setLayoutParams(params);
} else if ((isCompactMode || isConsoleMode) && type == RetrieveFeedsAsyncTask.Type.CONTEXT && getItemViewType(viewHolder.getAdapterPosition()) == FOCUSED_STATUS && viewHolder.getAdapterPosition() != 0) {
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT
);
params.setMargins((int) Helper.convertDpToPixel(20, context), 0, 0, 0);
holder.main_container.setLayoutParams(params);
}*/
if (getItemViewType(viewHolder.getAdapterPosition()) == FOCUSED_STATUS) {
holder.status_content.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16 * textSizePercent / 100);
holder.status_account_displayname.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16 * textSizePercent / 100);
@ -1019,24 +1007,6 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
Helper.changeDrawableColor(context, holder.hide_preview, R.color.white);
Helper.changeDrawableColor(context, holder.hide_preview_h, R.color.white);
}
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
LinearLayout.LayoutParams paramsB = new LinearLayout.LayoutParams((int)Helper.convertDpToPixel(60, context), LinearLayout.LayoutParams.WRAP_CONTENT);
/*if( status.getReblog() == null && !isCompactMode && !isConsoleMode && getItemViewType(viewHolder.getAdapterPosition()) != FOCUSED_STATUS){
params.setMargins(0,-(int)Helper.convertDpToPixel(10, context),0,0);
if (status.getSpoiler_text() != null && status.getSpoiler_text().trim().length() > 0 )
paramsB.setMargins(0,(int)Helper.convertDpToPixel(10, context),0,0);
else
paramsB.setMargins(0,(int)Helper.convertDpToPixel(15, context),0,0);
}else if( !isCompactMode && !isConsoleMode && getItemViewType(viewHolder.getAdapterPosition()) != FOCUSED_STATUS){
if( status.getContent() == null || status.getContent().trim().equals("")) {
params.setMargins(0, -(int) Helper.convertDpToPixel(20, context), 0, 0);
paramsB.setMargins(0,(int) Helper.convertDpToPixel(20, context),0,0);
}else {
params.setMargins(0, 0, 0, 0);
paramsB.setMargins(0,0,0,0);
}
}*/
if (!status.isClickable())
Status.transform(context, status);
@ -1111,6 +1081,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
translateToot(status);
}
});
if( isConsoleMode){
String starting = "";
String acct = status.getAccount().getAcct();
@ -1162,8 +1133,6 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
SpannableString startingSpan = new SpannableString(starting);
if( acctReblogSpan != null) {
for(URLSpan span : urls)
acctReblogSpan.removeSpan(span);
acctReblogSpan.setSpan(new ClickableSpan() {
@ -1205,7 +1174,6 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
startingSpan = new SpannableString(TextUtils.concat(acctSpan, " ", acctReblogSpan));
}else
startingSpan = acctSpan;
if( status.getReblog() == null && status.getSpoiler_text() != null && status.getSpoiler_text().length() > 0) {
holder.status_spoiler.setText(TextUtils.concat(startingSpan, " ", status.getContentSpanCW()), TextView.BufferType.SPANNABLE);
holder.status_content.setText(status.getContentSpan(), TextView.BufferType.SPANNABLE);
@ -1258,7 +1226,6 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
}
});
holder.status_bookmark.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@ -1315,6 +1282,16 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
ppurl = status.getReblog().getAccount().getAvatar();
holder.status_account_displayname.setVisibility(View.VISIBLE);
holder.status_account_displayname.setText(context.getResources().getString(R.string.reblog_by, status.getAccount().getUsername()));
holder.status_account_displayname.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, ShowAccountActivity.class);
Bundle b = new Bundle();
b.putParcelable("account", status.getAccount());
intent.putExtras(b);
context.startActivity(intent);
}
});
if (status.getReblog().getAccount().getDisplay_name().length() > 0)
holder.status_account_displayname_owner.setText(status.getDisplayNameSpan(), TextView.BufferType.SPANNABLE);
else
@ -1509,13 +1486,13 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
if ((getItemViewType(viewHolder.getAdapterPosition()) != COMPACT_STATUS) && getItemViewType(viewHolder.getAdapterPosition()) != CONSOLE_STATUS && (trans_forced || (translator != Helper.TRANS_NONE && currentLocale != null && differentLanguage))) {
if (status.getSpoiler_text() != null && status.getSpoiler_text().length() > 0) {
if (status.isSpoilerShown() || getItemViewType(viewHolder.getAdapterPosition()) == FOCUSED_STATUS) {
if (status.isSpoilerShown() || expand_cw || getItemViewType(viewHolder.getAdapterPosition()) == FOCUSED_STATUS) {
holder.status_translate.setVisibility(View.VISIBLE);
} else {
holder.status_translate.setVisibility(View.GONE);
}
} else if (status.getReblog() != null && status.getReblog().getSpoiler_text() != null && status.getReblog().getSpoiler_text().length() > 0) {
if (status.isSpoilerShown() || getItemViewType(viewHolder.getAdapterPosition()) == FOCUSED_STATUS) {
if (status.isSpoilerShown() || expand_cw || getItemViewType(viewHolder.getAdapterPosition()) == FOCUSED_STATUS) {
holder.status_translate.setVisibility(View.VISIBLE);
} else {
holder.status_translate.setVisibility(View.GONE);
@ -1539,7 +1516,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
if (status.getReblog() == null) {
if (status.getSpoiler_text() != null && status.getSpoiler_text().trim().length() > 0) {
holder.status_spoiler_container.setVisibility(View.VISIBLE);
if (!status.isSpoilerShown() && !expand_cw && !status.isShowSpoiler()) {
if (!status.isSpoilerShown() && (!expand_cw || status.isAutoHiddenCW())) {
holder.status_content_container.setVisibility(View.GONE);
if (status.getMentions().size() > 0)
holder.status_spoiler_mention_container.setVisibility(View.VISIBLE);
@ -1547,9 +1524,18 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
holder.status_spoiler_mention_container.setVisibility(View.GONE);
holder.status_spoiler_button.setText(context.getString(R.string.load_attachment_spoiler));
} else {
holder.status_content_container.setVisibility(View.VISIBLE);
holder.status_spoiler_mention_container.setVisibility(View.GONE);
holder.status_spoiler_button.setText(context.getString(R.string.load_attachment_spoiler_less));
if( !status.isAutoHiddenCW()) {
holder.status_content_container.setVisibility(View.VISIBLE);
holder.status_spoiler_mention_container.setVisibility(View.GONE);
holder.status_spoiler_button.setText(context.getString(R.string.load_attachment_spoiler_less));
}else{
holder.status_content_container.setVisibility(View.GONE);
if (status.getMentions().size() > 0)
holder.status_spoiler_mention_container.setVisibility(View.VISIBLE);
else
holder.status_spoiler_mention_container.setVisibility(View.GONE);
holder.status_spoiler_button.setText(context.getString(R.string.load_attachment_spoiler));
}
}
} else {
holder.status_spoiler_container.setVisibility(View.GONE);
@ -1559,7 +1545,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
} else {
if (status.getReblog().getSpoiler_text() != null && status.getReblog().getSpoiler_text().trim().length() > 0) {
holder.status_spoiler_container.setVisibility(View.VISIBLE);
if (!status.isSpoilerShown() && !expand_cw) {
if (!status.isSpoilerShown() && (!expand_cw || status.isAutoHiddenCW())) {
holder.status_content_container.setVisibility(View.GONE);
if (status.getMentions().size() > 0)
holder.status_spoiler_mention_container.setVisibility(View.VISIBLE);
@ -1567,9 +1553,18 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
holder.status_spoiler_mention_container.setVisibility(View.GONE);
holder.status_spoiler_button.setText(context.getString(R.string.load_attachment_spoiler));
} else {
holder.status_content_container.setVisibility(View.VISIBLE);
holder.status_spoiler_mention_container.setVisibility(View.GONE);
holder.status_spoiler_button.setText(context.getString(R.string.load_attachment_spoiler_less));
if( !status.isAutoHiddenCW()) {
holder.status_content_container.setVisibility(View.VISIBLE);
holder.status_spoiler_mention_container.setVisibility(View.GONE);
holder.status_spoiler_button.setText(context.getString(R.string.load_attachment_spoiler_less));
}else {
holder.status_content_container.setVisibility(View.GONE);
if (status.getMentions().size() > 0)
holder.status_spoiler_mention_container.setVisibility(View.VISIBLE);
else
holder.status_spoiler_mention_container.setVisibility(View.GONE);
holder.status_spoiler_button.setText(context.getString(R.string.load_attachment_spoiler));
}
}
} else {
holder.status_spoiler_container.setVisibility(View.GONE);
@ -1731,16 +1726,10 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
if (status.isTranslationShown() && status.getContentSpanTranslated() != null) {
holder.status_content_translated.setText(status.getContentSpanTranslated(), TextView.BufferType.SPANNABLE);
holder.status_content.setVisibility(View.GONE);
holder.status_content_translated_container.setVisibility(View.VISIBLE);
} else { //Toot is not translated
holder.status_content.setVisibility(View.VISIBLE);
holder.status_content_translated_container.setVisibility(View.GONE);
}
if( !isConsoleMode && contentCheck.trim().length() < 2 && !contentCheck.trim().matches("\\w+"))
holder.status_content.setVisibility(View.GONE);
else
holder.status_content.setVisibility(View.VISIBLE);
switch (status.getVisibility()) {
case "direct":
@ -2150,6 +2139,11 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
holder.status_spoiler_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if( expand_cw && !status.isSpoilerShown() ){
status.setAutoHiddenCW(true);
}else{
status.setAutoHiddenCW(false);
}
status.setSpoilerShown(!status.isSpoilerShown());
notifyStatusChanged(status);
}

View File

@ -151,7 +151,7 @@ public class DisplaySearchTagsFragment extends Fragment implements OnRetrieveSea
public void scrollToTop(){
if( lv_search_tags != null) {
if( lv_search_tags != null && searchTagsAdapter != null) {
lv_search_tags.setAdapter(searchTagsAdapter);
}
}

View File

@ -30,7 +30,6 @@ import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
@ -50,6 +49,7 @@ import app.fedilab.android.client.Entities.Account;
import app.fedilab.android.client.Entities.Conversation;
import app.fedilab.android.client.Entities.Peertube;
import app.fedilab.android.client.Entities.RemoteInstance;
import app.fedilab.android.client.Entities.RetrieveFeedsParam;
import app.fedilab.android.client.Entities.Status;
import app.fedilab.android.client.Entities.TagTimeline;
import app.fedilab.android.drawers.ArtListAdapter;
@ -126,6 +126,7 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
private BroadcastReceiver receive_data;
private Date lastReadTootDate, initialBookMarkDate, updatedBookMarkDate;
private int timelineId;
private String currentfilter;
public DisplayStatusFragment(){
}
@ -156,6 +157,7 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
instanceType = bundle.getString("instanceType", "MASTODON");
ischannel = bundle.getBoolean("ischannel",false);
timelineId = bundle.getInt("timelineId");
currentfilter = bundle.getString("currentfilter", null);
}
if( ischannel)
@ -537,7 +539,9 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
//Only for the Home timeline
if( type == RetrieveFeedsAsyncTask.Type.HOME && !firstTootsLoaded){
asyncTask = new RetrieveFeedsAfterBookmarkAsyncTask(context, null, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
boolean remember_position_home = sharedpreferences.getBoolean(Helper.SET_REMEMBER_POSITION_HOME, true);
if( remember_position_home)
asyncTask = new RetrieveFeedsAfterBookmarkAsyncTask(context, null, false,DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
firstTootsLoaded = true;
}
//Let's deal with statuses
@ -682,7 +686,7 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
public void retrieveMissingToots(String sinceId){
if( type == RetrieveFeedsAsyncTask.Type.HOME)
asyncTask = new RetrieveFeedsAfterBookmarkAsyncTask(context, null, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
asyncTask = new RetrieveFeedsAfterBookmarkAsyncTask(context, null, false,DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
if (type == RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE )
asyncTask = new RetrieveMissingFeedsAsyncTask(context, remoteInstance, sinceId, type, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
else if(type == RetrieveFeedsAsyncTask.Type.TAG)
@ -707,7 +711,7 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
}
if( statuses.size() > 0)
initialBookMarkDate = statuses.get(0).getCreated_at();
asyncTask = new RetrieveFeedsAfterBookmarkAsyncTask(context, null, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
asyncTask = new RetrieveFeedsAfterBookmarkAsyncTask(context, null, false,DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
}
@ -820,18 +824,27 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
public void onRetrieveMissingFeeds(List<Status> statuses) {
if(swipeRefreshLayout == null)
return;
//Clean label new
swipeRefreshLayout.setRefreshing(false);
if( isSwipped && this.statuses != null && this.statuses.size() > 0) {
for (Status status : this.statuses) {
status.setNew(false);
}
if( instanceType.equals("MASTODON") || instanceType.equals("MISSKEY")|| instanceType.equals("GNU"))
statusListAdapter.notifyItemRangeChanged(0, this.statuses.size());
else if( instanceType.equals("PIXELFED"))
pixelfedListAdapter.notifyItemRangeChanged(0, this.statuses.size());
else if( instanceType.equals("ART"))
artListAdapter.notifyItemRangeChanged(0, this.statuses.size());
switch (instanceType) {
case "MASTODON":
case "MISSKEY":
case "GNU":
statusListAdapter.notifyItemRangeChanged(0, this.statuses.size());
break;
case "PIXELFED":
pixelfedListAdapter.notifyItemRangeChanged(0, this.statuses.size());
break;
case "ART":
artListAdapter.notifyItemRangeChanged(0, this.statuses.size());
break;
}
}
isSwipped = false;
if( statuses != null && statuses.size() > 0) {
@ -908,11 +921,12 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
}
public void fetchMore(String max_id){
asyncTask = new RetrieveFeedsAfterBookmarkAsyncTask(context, max_id, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
asyncTask = new RetrieveFeedsAfterBookmarkAsyncTask(context, max_id, true,DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
@Override
public void onRetrieveFeedsAfterBookmark(APIResponse apiResponse) {
if( statusListAdapter == null)
return;
if( apiResponse == null || (apiResponse.getError() != null && apiResponse.getError().getStatusCode() != 404) ){
@ -925,10 +939,12 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
return;
}
List<Status> statuses = apiResponse.getStatuses();
if( statuses == null || statuses.size() == 0 || this.statuses == null )
return;
//Find the position of toots between those already present
int position = 0;
if( position < this.statuses.size() && statuses.get(0).getCreated_at() != null && this.statuses.get(position).getCreated_at() != null) {
while (position < this.statuses.size() && statuses.get(0).getCreated_at().before(this.statuses.get(position).getCreated_at())) {
position++;
@ -937,7 +953,14 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
ArrayList<Status> tmpStatuses = new ArrayList<>();
for (Status tmpStatus : statuses) {
//Put the toot at its place in the list (id desc)
if( !this.statuses.contains(tmpStatus) ) { //Element not already added
if( !apiResponse.isFetchmore() && !this.statuses.contains(tmpStatus) && tmpStatus.getCreated_at().after(this.statuses.get(0).getCreated_at())) { //Element not already added
//Mark status at new ones when their id is greater than the last read toot id
if (type == RetrieveFeedsAsyncTask.Type.HOME && lastReadTootDate != null && tmpStatus.getCreated_at().after(lastReadTootDate) ) {
tmpStatus.setNew(true);
MainActivity.countNewStatus++;
}
tmpStatuses.add(tmpStatus);
}else if( apiResponse.isFetchmore() && !this.statuses.contains(tmpStatus)) { //Element not already added
//Mark status at new ones when their id is greater than the last read toot id
if (type == RetrieveFeedsAsyncTask.Type.HOME && lastReadTootDate != null && tmpStatus.getCreated_at().after(lastReadTootDate) ) {
tmpStatus.setNew(true);
@ -999,13 +1022,25 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
asyncTask = new RetrieveFeedsAsyncTask(context, remoteInstance, remote_channel_name, null, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} else
asyncTask = new RetrievePeertubeSearchAsyncTask(context, remoteInstance, search_peertube, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}else if(type == RetrieveFeedsAsyncTask.Type.REMOTE_INSTANCE_FILTERED){
RetrieveFeedsParam retrieveFeedsParam = new RetrieveFeedsParam();
retrieveFeedsParam.setAction(type);
retrieveFeedsParam.setCurrentfilter(currentfilter);
retrieveFeedsParam.setRemoteInstance(remoteInstance);
retrieveFeedsParam.setMax_id(max_id);
retrieveFeedsParam.setSocial(instanceType);
asyncTask = new RetrieveFeedsAsyncTask(context, retrieveFeedsParam, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}else if( type == RetrieveFeedsAsyncTask.Type.LIST){
new ManageListsAsyncTask(context,targetedId, max_id ,null, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}else {
if( !pagination) {
if (type == RetrieveFeedsAsyncTask.Type.HOME) {
if (context instanceof BaseMainActivity) {
asyncTask = new RetrieveFeedsAsyncTask(context, type, initialBookMark, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
boolean remember_position_home = sharedpreferences.getBoolean(Helper.SET_REMEMBER_POSITION_HOME, true);
if(remember_position_home )
asyncTask = new RetrieveFeedsAsyncTask(context, type, initialBookMark, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
else
asyncTask = new RetrieveFeedsAsyncTask(context, type, null, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
} else { //Most classical search will be done by this call
asyncTask = new RetrieveFeedsAsyncTask(context, type, null, DisplayStatusFragment.this).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);

View File

@ -464,6 +464,19 @@ public class SettingsFragment extends Fragment {
}
});
boolean remember_position_home = sharedpreferences.getBoolean(Helper.SET_REMEMBER_POSITION_HOME, true);
final CheckBox set_remember_position = rootView.findViewById(R.id.set_remember_position);
set_remember_position.setChecked(remember_position_home);
set_remember_position.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean(Helper.SET_REMEMBER_POSITION_HOME, set_remember_position.isChecked());
editor.apply();
}
});
boolean old_direct_timeline = sharedpreferences.getBoolean(Helper.SET_OLD_DIRECT_TIMELINE, false);
final CheckBox set_old_direct_timeline = rootView.findViewById(R.id.set_old_direct_timeline);
set_old_direct_timeline.setChecked(old_direct_timeline);
@ -591,6 +604,19 @@ public class SettingsFragment extends Fragment {
}
});
boolean bot_icon = sharedpreferences.getBoolean(Helper.SET_DISPLAY_BOT_ICON, true);
final CheckBox set_bot_icon = rootView.findViewById(R.id.set_display_bot_icon);
set_bot_icon.setChecked(bot_icon);
set_bot_icon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean(Helper.SET_DISPLAY_BOT_ICON, set_bot_icon.isChecked());
editor.apply();
}
});
boolean fit_preview = sharedpreferences.getBoolean(Helper.SET_FULL_PREVIEW, false);
final CheckBox set_fit_preview = rootView.findViewById(R.id.set_fit_preview);
set_fit_preview.setChecked(fit_preview);
@ -1069,8 +1095,35 @@ public class SettingsFragment extends Fragment {
}
});
int split_size_val = sharedpreferences.getInt(Helper.SET_AUTOMATICALLY_SPLIT_TOOTS_SIZE+userId+instance, Helper.SPLIT_TOOT_SIZE);
LinearLayout set_split_container = rootView.findViewById(R.id.set_split_container);
//split size
SeekBar split_size = rootView.findViewById(R.id.set_split_size);
final TextView split_text = rootView.findViewById(R.id.set_split_text);
split_size.setProgress(0);
split_text.setText(String.valueOf(split_size_val));
split_size.setMax(5);
split_size.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
int newProgress = (progress + 1) * Helper.SPLIT_TOOT_SIZE;
split_text.setText(String.valueOf(newProgress));
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putInt(Helper.SET_AUTOMATICALLY_SPLIT_TOOTS_SIZE+userId+instance, newProgress);
editor.apply();
}
});
boolean split_toot = sharedpreferences.getBoolean(Helper.SET_AUTOMATICALLY_SPLIT_TOOTS, false);
if( !split_toot){
set_split_container.setVisibility(View.GONE);
}
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() {
@ -1079,6 +1132,11 @@ public class SettingsFragment extends Fragment {
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putBoolean(Helper.SET_AUTOMATICALLY_SPLIT_TOOTS, set_split_toot.isChecked());
editor.apply();
if( set_split_toot.isChecked()){
set_split_container.setVisibility(View.VISIBLE);
}else{
set_split_container.setVisibility(View.GONE);
}
}
});

View File

@ -327,7 +327,8 @@ public class Helper {
public static final String SET_BLUR_SENSITIVE = "set_blur_sensitive";
public static final String SET_LONG_PRESS_MEDIA = "set_long_press_media";
public static final String SET_DISPLAY_TIMELINE_IN_LIST = "set_display_timeline_in_list";
public static final String SET_ONION_SCHEME = "set_onion_scheme";
public static final String SET_REMEMBER_POSITION_HOME = "set_remember_position";
public static final int S_NO = 0;
static final int S_512KO = 1;
public static final int S_1MO = 2;
@ -385,6 +386,7 @@ public class Helper {
public static final String SET_EXPAND_MEDIA = "set_expand_media";
public static final String SET_DISPLAY_FOLLOW_INSTANCE = "set_display_follow_instance";
public static final String SET_DISPLAY_NEW_BADGE = "set_display_new_badge";
public static final String SET_DISPLAY_BOT_ICON = "set_display_bot_icon";
public static final String SET_EMBEDDED_BROWSER = "set_embedded_browser";
public static final String SET_CUSTOM_TABS = "set_custom_tabs";
public static final String SET_JAVASCRIPT = "set_javascript";
@ -1232,16 +1234,19 @@ public class Helper {
}
public static String getLiveInstanceWithProtocol(Context context) {
return instanceWithProtocol(getLiveInstance(context));
return instanceWithProtocol(context, getLiveInstance(context));
}
public static String instanceWithProtocol(String instance){
public static String instanceWithProtocol(Context context, String instance){
if( instance == null)
return null;
if( instance.endsWith(".onion"))
return "http://" + instance;
else
if( instance.endsWith(".onion")) {
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
String scheme = sharedpreferences.getString(SET_ONION_SCHEME+instance, "http");
return scheme + "://" + instance;
}else {
return "https://" + instance;
}
}

View File

@ -228,7 +228,7 @@ public class LiveNotificationService extends Service implements NetworkStateRece
}
if( Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT ) {
try {
AsyncHttpClient.getDefaultInstance().getSSLSocketMiddleware().setSSLContext(new TLSSocketFactory().getSSLContext());
AsyncHttpClient.getDefaultInstance().getSSLSocketMiddleware().setSSLContext(new TLSSocketFactory(account.getInstance()).getSSLContext());
AsyncHttpClient.getDefaultInstance().getSSLSocketMiddleware().setConnectAllAddresses(true);
} catch (KeyManagementException e) {
e.printStackTrace();

View File

@ -109,7 +109,7 @@ public class StreamingFederatedTimelineService extends IntentService {
Account finalAccountStream = accountStream;
if( Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT ) {
try {
AsyncHttpClient.getDefaultInstance().getSSLSocketMiddleware().setSSLContext(new TLSSocketFactory().getSSLContext());
AsyncHttpClient.getDefaultInstance().getSSLSocketMiddleware().setSSLContext(new TLSSocketFactory(accountStream.getInstance()).getSSLContext());
AsyncHttpClient.getDefaultInstance().getSSLSocketMiddleware().setConnectAllAddresses(true);
} catch (KeyManagementException e) {
e.printStackTrace();

View File

@ -109,7 +109,7 @@ public class StreamingHomeTimelineService extends IntentService {
Account finalAccountStream = accountStream;
if( Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT ) {
try {
AsyncHttpClient.getDefaultInstance().getSSLSocketMiddleware().setSSLContext(new TLSSocketFactory().getSSLContext());
AsyncHttpClient.getDefaultInstance().getSSLSocketMiddleware().setSSLContext(new TLSSocketFactory(accountStream.getInstance()).getSSLContext());
AsyncHttpClient.getDefaultInstance().getSSLSocketMiddleware().setConnectAllAddresses(true);
} catch (KeyManagementException e) {
e.printStackTrace();

View File

@ -110,7 +110,7 @@ public class StreamingLocalTimelineService extends IntentService {
Account finalAccountStream = accountStream;
if( Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT ) {
try {
AsyncHttpClient.getDefaultInstance().getSSLSocketMiddleware().setSSLContext(new TLSSocketFactory().getSSLContext());
AsyncHttpClient.getDefaultInstance().getSSLSocketMiddleware().setSSLContext(new TLSSocketFactory(accountStream.getInstance()).getSSLContext());
AsyncHttpClient.getDefaultInstance().getSSLSocketMiddleware().setConnectAllAddresses(true);
} catch (KeyManagementException e) {
e.printStackTrace();

View File

@ -25,6 +25,7 @@ import java.util.Date;
import java.util.List;
import app.fedilab.android.client.Entities.RemoteInstance;
import app.fedilab.android.client.Entities.TagTimeline;
import app.fedilab.android.helper.Helper;
@ -64,6 +65,28 @@ public class InstancesDAO {
}catch (Exception ignored) {}
}
//------- UPDATES -------
/**
* update instance in database
* @param remoteInstance RemoteInstance
*/
public void updateInstance(RemoteInstance remoteInstance) {
ContentValues values = new ContentValues();
List<String> tags = remoteInstance.getTags();
values.put(Sqlite.COL_FILTERED_WITH, remoteInstance.getFilteredWith());
if( tags != null && tags.size() > 0) {
values.put(Sqlite.COL_TAGS, Helper.arrayToStringStorage(tags));
}
try{
db.update(Sqlite.TABLE_INSTANCES, values, Sqlite.COL_INSTANCE + " = ? ", new String[]{String.valueOf(remoteInstance.getHost())});
}catch (Exception ignored) {ignored.printStackTrace();}
}
public void insertInstance(String instanceName, String type) {
insertInstance(instanceName, "null", type);
}
@ -102,6 +125,7 @@ public class InstancesDAO {
Cursor c = db.query(Sqlite.TABLE_INSTANCES, null, null, null, null, null, Sqlite.COL_INSTANCE + " ASC", null);
return cursorToListSearch(c);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
@ -136,7 +160,11 @@ public class InstancesDAO {
RemoteInstance remoteInstance = new RemoteInstance();
remoteInstance.setDbID(c.getString(c.getColumnIndex(Sqlite.COL_ID)));
remoteInstance.setId(c.getString(c.getColumnIndex(Sqlite.COL_USER_ID)));
try {
remoteInstance.setTags(Helper.restoreArrayFromString(c.getString(c.getColumnIndex(Sqlite.COL_TAGS))));
}catch (Exception ignored){}
remoteInstance.setHost(c.getString(c.getColumnIndex(Sqlite.COL_INSTANCE)));
remoteInstance.setFilteredWith(c.getString(c.getColumnIndex(Sqlite.COL_FILTERED_WITH)));
remoteInstance.setType(c.getString(c.getColumnIndex(Sqlite.COL_INSTANCE_TYPE)) == null?"MASTODON":c.getString(c.getColumnIndex(Sqlite.COL_INSTANCE_TYPE)));
remoteInstances.add(remoteInstance);
}

View File

@ -45,7 +45,7 @@ import app.fedilab.android.R;
public class Sqlite extends SQLiteOpenHelper {
public static final int DB_VERSION = 30;
public static final int DB_VERSION = 31;
public static final String DB_NAME = "mastodon_etalab_db";
public static SQLiteDatabase db;
private static Sqlite sInstance;
@ -89,6 +89,8 @@ public class Sqlite extends SQLiteOpenHelper {
//Table for timelines
public static final String TABLE_TIMELINES = "TIMELINES";
//Table for timelines
public static final String TABLE_REMOTE_INSTANCE_TAGS = "REMOTE_INSTANCE_TAGS";
static final String COL_USER_ID = "USER_ID";
@ -225,9 +227,10 @@ public class Sqlite extends SQLiteOpenHelper {
+ TABLE_STATUSES_CACHE + "(" + COL_INSTANCE +"," + COL_STATUS_ID + ")";
static final String COL_INSTANCE_TYPE = "INSTANCE_TYPE";
static final String COL_FILTERED_WITH = "FILTERED_WITH";
private final String CREATE_TABLE_INSTANCES = "CREATE TABLE " + TABLE_INSTANCES + " ("
+ COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ COL_INSTANCE + " TEXT NOT NULL, " + COL_USER_ID + " TEXT NOT NULL, " + COL_INSTANCE_TYPE + " TEXT, " + COL_DATE_CREATION + " TEXT NOT NULL)";
+ COL_INSTANCE + " TEXT NOT NULL, " + COL_USER_ID + " TEXT NOT NULL, " + COL_INSTANCE_TYPE + " TEXT, " + COL_TAGS + " TEXT, " + COL_FILTERED_WITH + " TEXT, "+ COL_DATE_CREATION + " TEXT NOT NULL)";
static final String COL_UUID = "UUID";
@ -290,6 +293,9 @@ public class Sqlite extends SQLiteOpenHelper {
+ COL_CACHE + " TEXT NOT NULL, "
+ COL_DATE + " TEXT NOT NULL)";
public Sqlite(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@ -410,6 +416,11 @@ public class Sqlite extends SQLiteOpenHelper {
db.execSQL("ALTER TABLE " + TABLE_USER_ACCOUNT + " ADD COLUMN " + COL_SENSITIVE + " INTEGER DEFAULT 0");
case 29:
db.execSQL(CREATE_TABLE_TIMELINE_CACHE);
case 30:
if( oldVersion > 11) {
db.execSQL("ALTER TABLE " + TABLE_INSTANCES + " ADD COLUMN " + COL_TAGS + " TEXT");
db.execSQL("ALTER TABLE " + TABLE_INSTANCES + " ADD COLUMN " + COL_FILTERED_WITH + " TEXT");
}
default:
break;
}

View File

@ -103,6 +103,18 @@ public class TimelineCacheDAO {
return db.delete(Sqlite.TABLE_TIMELINE_CACHE, Sqlite.COL_STATUS_ID + " = \""+ statusId +"\" AND " + Sqlite.COL_INSTANCE + " = \"" + instance + "\" AND " + Sqlite.COL_USER_ID + " = \"" + userId + "\"", null);
}
/***
* Remove stored status
* @return int
*/
public int removeAfterDate(String date) {
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);
String instance = Helper.getLiveInstance(context);
return db.delete(Sqlite.TABLE_TIMELINE_CACHE, Sqlite.COL_DATE + " < \""+ date +"\" AND " + Sqlite.COL_INSTANCE + " = \"" + instance + "\" AND " + Sqlite.COL_USER_ID + " = \"" + userId + "\"", null);
}
/***
* Remove stored status
* @return int

View File

@ -95,6 +95,17 @@ public class TimelinesDAO {
new String[]{String.valueOf(timeline.getId())});
}
//------- UPDATE -------
public void updateRemoteInstance(ManageTimelines timeline) {
ContentValues values = new ContentValues();
values.put(Sqlite.COL_DISPLAYED, timeline.isDisplayed());
if( timeline.getTagTimeline() != null)
values.put(Sqlite.COL_REMOTE_INSTANCE, Helper.remoteInstanceToStringStorage(timeline.getRemoteInstance()));
db.update(Sqlite.TABLE_TIMELINES,
values, Sqlite.COL_ID + " = ? ",
new String[]{String.valueOf(timeline.getId())});
}
public int countVisibleTimelines(){
SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, Context.MODE_PRIVATE);
String userId = sharedpreferences.getString(Helper.PREF_KEY_ID, null);

View File

@ -17,10 +17,12 @@ package app.fedilab.android.webview;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Bitmap;
import android.net.http.SslError;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.webkit.SslErrorHandler;
import android.webkit.WebResourceResponse;
import android.webkit.WebView;
import android.webkit.WebViewClient;
@ -34,6 +36,7 @@ import java.util.List;
import app.fedilab.android.R;
import app.fedilab.android.activities.WebviewActivity;
import app.fedilab.android.helper.Helper;
/**
* Created by Thomas on 25/06/2017.
@ -104,6 +107,16 @@ public class MastalabWebViewClient extends WebViewClient {
return this.domains;
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
String instance = Helper.getLiveInstance(activity);
if( instance != null && instance.endsWith(".onion")) {
handler.proceed();
}else{
super.onReceivedSslError(view, handler, error);
}
}
@Override
public void onPageStarted (WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);

View File

@ -0,0 +1,177 @@
package app.fedilab.android.webview;
/* Copyright 2019 Thomas Schneider
*
* This file is a part of Fedilab
*
* 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.
*
* Fedilab 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 Fedilab; if not,
* see <http://www.gnu.org/licenses>. */
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.net.Proxy;
import android.os.Build;
import android.os.Parcelable;
import android.util.ArrayMap;
import android.webkit.WebView;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class ProxyHelper {
public static void setProxy(Context context, WebView webview, String host, int port, String applicationClassName) {
if (Build.VERSION.SDK_INT <= 18) {
setProxyJB(webview, host, port);
}
// 4.4 (KK) & 5.0 (Lollipop)
else {
setProxyKKPlus(context, webview, host, port, applicationClassName);
}
}
@SuppressWarnings("all")
private static boolean setProxyICS(WebView webview, String host, int port) {
try
{
Class jwcjb = Class.forName("android.webkit.JWebCoreJavaBridge");
Class params[] = new Class[1];
params[0] = Class.forName("android.net.ProxyProperties");
Method updateProxyInstance = jwcjb.getDeclaredMethod("updateProxy", params);
Class wv = Class.forName("android.webkit.WebView");
Field mWebViewCoreField = wv.getDeclaredField("mWebViewCore");
Object mWebViewCoreFieldInstance = getFieldValueSafely(mWebViewCoreField, webview);
Class wvc = Class.forName("android.webkit.WebViewCore");
Field mBrowserFrameField = wvc.getDeclaredField("mBrowserFrame");
Object mBrowserFrame = getFieldValueSafely(mBrowserFrameField, mWebViewCoreFieldInstance);
Class bf = Class.forName("android.webkit.BrowserFrame");
Field sJavaBridgeField = bf.getDeclaredField("sJavaBridge");
Object sJavaBridge = getFieldValueSafely(sJavaBridgeField, mBrowserFrame);
Class ppclass = Class.forName("android.net.ProxyProperties");
Class pparams[] = new Class[3];
pparams[0] = String.class;
pparams[1] = int.class;
pparams[2] = String.class;
Constructor ppcont = ppclass.getConstructor(pparams);
updateProxyInstance.invoke(sJavaBridge, ppcont.newInstance(host, port, null));
return true;
}
catch (Exception ex) {
return false;
}
}
/**
* Set Proxy for Android 4.1 - 4.3.
*/
@SuppressWarnings("all")
private static boolean setProxyJB(WebView webview, String host, int port) {
try {
Class wvcClass = Class.forName("android.webkit.WebViewClassic");
Class wvParams[] = new Class[1];
wvParams[0] = Class.forName("android.webkit.WebView");
Method fromWebView = wvcClass.getDeclaredMethod("fromWebView", wvParams);
Object webViewClassic = fromWebView.invoke(null, webview);
Class wv = Class.forName("android.webkit.WebViewClassic");
Field mWebViewCoreField = wv.getDeclaredField("mWebViewCore");
Object mWebViewCoreFieldInstance = getFieldValueSafely(mWebViewCoreField, webViewClassic);
Class wvc = Class.forName("android.webkit.WebViewCore");
Field mBrowserFrameField = wvc.getDeclaredField("mBrowserFrame");
Object mBrowserFrame = getFieldValueSafely(mBrowserFrameField, mWebViewCoreFieldInstance);
Class bf = Class.forName("android.webkit.BrowserFrame");
Field sJavaBridgeField = bf.getDeclaredField("sJavaBridge");
Object sJavaBridge = getFieldValueSafely(sJavaBridgeField, mBrowserFrame);
Class ppclass = Class.forName("android.net.ProxyProperties");
Class pparams[] = new Class[3];
pparams[0] = String.class;
pparams[1] = int.class;
pparams[2] = String.class;
Constructor ppcont = ppclass.getConstructor(pparams);
Class jwcjb = Class.forName("android.webkit.JWebCoreJavaBridge");
Class params[] = new Class[1];
params[0] = Class.forName("android.net.ProxyProperties");
Method updateProxyInstance = jwcjb.getDeclaredMethod("updateProxy", params);
updateProxyInstance.invoke(sJavaBridge, ppcont.newInstance(host, port, null));
} catch (Exception ex) {
return false;
}
return true;
}
// from https://stackoverflow.com/questions/19979578/android-webview-set-proxy-programatically-kitkat
@SuppressLint("NewApi")
@SuppressWarnings("all")
private static void setProxyKKPlus(Context appContext, WebView webView, String host, int port, String applicationClassName) {
System.setProperty("http.proxyHost", host);
System.setProperty("http.proxyPort", port + "");
System.setProperty("https.proxyHost", host);
System.setProperty("https.proxyPort", port + "");
try {
Class applictionCls = Class.forName("android.app.Application");
Field loadedApkField = applictionCls.getDeclaredField("mLoadedApk");
loadedApkField.setAccessible(true);
Object loadedApk = loadedApkField.get(appContext);
Class loadedApkCls = Class.forName("android.app.LoadedApk");
Field receiversField = loadedApkCls.getDeclaredField("mReceivers");
receiversField.setAccessible(true);
ArrayMap receivers = (ArrayMap) receiversField.get(loadedApk);
for (Object receiverMap : receivers.values()) {
for (Object rec : ((ArrayMap) receiverMap).keySet()) {
Class clazz = rec.getClass();
if (clazz.getName().contains("ProxyChangeListener")) {
Method onReceiveMethod = clazz.getDeclaredMethod("onReceive", Context.class, Intent.class);
Intent intent = new Intent(Proxy.PROXY_CHANGE_ACTION);
onReceiveMethod.invoke(rec, appContext, intent);
}
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
private static Object getFieldValueSafely(Field field, Object classInstance) throws IllegalArgumentException, IllegalAccessException {
boolean oldAccessibleValue = field.isAccessible();
field.setAccessible(true);
Object result = field.get(classInstance);
field.setAccessible(oldAccessibleValue);
return result;
}
}

View File

@ -98,6 +98,14 @@
android:background="?colorAccent" />
</LinearLayout>
<CheckBox
android:id="@+id/set_remember_position"
android:layout_width="wrap_content"
android:layout_marginTop="@dimen/settings_checkbox_margin"
android:layout_marginBottom="@dimen/settings_checkbox_margin"
android:text="@string/set_remember_position"
android:layout_height="wrap_content" />
<CheckBox
android:id="@+id/set_old_direct_timeline"
android:layout_width="wrap_content"
@ -251,6 +259,15 @@
android:text="@string/set_display_bookmark_button"
android:layout_height="wrap_content" />
<!-- DISPLAY BOT ICON -->
<CheckBox
android:id="@+id/set_display_bot_icon"
android:layout_width="wrap_content"
android:layout_marginTop="@dimen/settings_checkbox_margin"
android:layout_marginBottom="@dimen/settings_checkbox_margin"
android:text="@string/set_display_bot_icon"
android:layout_height="wrap_content" />
<!-- FIT PREVIEWS -->
<CheckBox
android:id="@+id/set_fit_preview"
@ -350,7 +367,26 @@
android:layout_marginBottom="@dimen/settings_checkbox_margin"
android:text="@string/set_automatically_split_toot"
android:layout_height="wrap_content" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_gravity="center_vertical"
android:id="@+id/set_split_container"
android:layout_height="wrap_content">
<TextView
android:id="@+id/set_split_text"
android:gravity="end"
android:layout_width="50dp"
android:layout_marginEnd="10dp"
android:layout_marginRight="10dp"
android:layout_height="wrap_content" />
<SeekBar
android:layout_gravity="center_vertical"
android:id="@+id/set_split_size"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</SeekBar>
</LinearLayout>
<CheckBox
android:id="@+id/set_display_emoji"
android:layout_width="wrap_content"

View File

@ -24,10 +24,10 @@
android:paddingTop="10dp"
android:divider="?android:dividerHorizontal"
android:showDividers="end"
android:layout_marginStart="5dp"
android:layout_marginEnd="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"

View File

@ -102,6 +102,14 @@
android:background="?colorAccent" />
</LinearLayout>
<CheckBox
android:id="@+id/set_remember_position"
android:layout_width="wrap_content"
android:layout_marginTop="@dimen/settings_checkbox_margin"
android:layout_marginBottom="@dimen/settings_checkbox_margin"
android:text="@string/set_remember_position"
android:layout_height="wrap_content" />
<CheckBox
android:id="@+id/set_old_direct_timeline"
android:layout_width="wrap_content"
@ -257,6 +265,15 @@
android:text="@string/set_display_bookmark_button"
android:layout_height="wrap_content" />
<!-- DISPLAY BOT ICON -->
<CheckBox
android:id="@+id/set_display_bot_icon"
android:layout_width="wrap_content"
android:layout_marginTop="@dimen/settings_checkbox_margin"
android:layout_marginBottom="@dimen/settings_checkbox_margin"
android:text="@string/set_display_bot_icon"
android:layout_height="wrap_content" />
<!-- FIT PREVIEWS -->
<CheckBox
android:id="@+id/set_fit_preview"
@ -356,6 +373,26 @@
android:layout_marginBottom="@dimen/settings_checkbox_margin"
android:text="@string/set_automatically_split_toot"
android:layout_height="wrap_content" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_gravity="center_vertical"
android:id="@+id/set_split_container"
android:layout_height="wrap_content">
<TextView
android:id="@+id/set_split_text"
android:gravity="end"
android:layout_width="50dp"
android:layout_marginEnd="10dp"
android:layout_marginRight="10dp"
android:layout_height="wrap_content" />
<SeekBar
android:layout_gravity="center_vertical"
android:id="@+id/set_split_size"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</SeekBar>
</LinearLayout>
<CheckBox
android:id="@+id/set_display_emoji"

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/filter_words"
android:inputType="text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/some_tags"
android:maxLines="1"
/>
</LinearLayout>

View File

@ -320,7 +320,7 @@
<string name="set_save_changes">Save changes</string>
<string name="set_header_picture_overlay">Choose a header picture</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="set_automatically_split_toot">Automatically split toots in replies when chars are over:</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_time_from">Between</string>
@ -387,10 +387,9 @@
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push notifications</string>
<string name="settings_popup_message">"
Please, confirm push notifications that you want to receive.
<string name="settings_popup_message"> Please, confirm push notifications that you want to receive.
You can enable or disable these notifications later in settings (Notifications tab).
"</string>
</string>
<string name="settings_popup_timeline">For unread toots in home time-line?</string>
<string name="settings_popup_notification">For unread notifications?</string>
<!-- CACHE -->
@ -427,44 +426,38 @@
<string name="owner_cached_toots_empty">No toots were found in database. Please, use the synchronize button from the menu to retrieve them.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Recorded data</string>
<string name="privacy_data">"
Only basic information from accounts are stored on the device.
<string name="privacy_data"> Only basic information from accounts are stored on the device.
These data are strictly confidential and can only be used by the application.
Deleting the application immediately removes these data.\n
&#9888; Login and passwords are never stored. They are only used during a secure authentication (SSL) with an instance.
"</string>
</string>
<string name="privacy_authorizations_title">Permissions:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: Used to detect if the device is connected to a WIFI network.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: Used to detect if the device is connected to a WIFI network.\n
- <b>INTERNET</b>: Used for queries to an instance.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: Used to store media or to move the app on a SD card.\n
- <b>READ_EXTERNAL_STORAGE</b>: Used to add media to toots.\n
- <b>BOOT_COMPLETED</b>: Used to start the notification service.\n
- <b>WAKE_LOCK</b>: Used during the notification service.
"</string>
</string>
<string name="privacy_API_authorizations_title">API permissions:</string>
<string name="privacy_API_authorizations">"
- <b>Read</b>: Read data.\n
<string name="privacy_API_authorizations"> - <b>Read</b>: Read data.\n
- <b>Write</b>: Post statuses and upload media for statuses.\n
- <b>Follow</b>: Follow, unfollow, block, unblock.\n\n
<b>&#9888; These actions are carried out only when user requests them.</b>
"</string>
</string>
<string name="privacy_API_title">Tracking and Libraries</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
<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
"</string>
</string>
<string name="privacy_API_yandex_title">Translation of toots</string>
<string name="privacy_API_yandex_authorizations">"
The application offers the ability to translate toots using the locale of the device and the Yandex API.\n
<string name="privacy_API_yandex_authorizations"> The application offers the ability to translate toots using the locale of the device and the Yandex API.\n
Yandex has its proper privacy-policy which can be found here: https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
Thank you to:
"</string>
</string>
<string name="thanks_text_dev"> Thank you to:
</string>
<string name="filter_regex">Filter out by regular expressions</string>
<string name="search">Search</string>
<string name="delete">Delete</string>
@ -485,14 +478,13 @@
<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="issue_login_message">"
<b>Here are some checks that might help:</b>\n\n
<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 GitLab at https://gitlab.com/tom79/mastalab/issues
"</string>
</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>
@ -678,17 +670,14 @@
<item>1 day</item>
<item>1 week</item>
</string-array>
<string name="showcase_instance">"
In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
<string name="showcase_instance"> In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
You can start writing first letters and names will be suggested.\n\n
⚠ The Login button will only work if the instance name is valid and the instance is up!
"</string>
<string name="showcase_uid">"
In this field, write the email that is attached to your Mastodon account.
"</string>
<string name="showcase_pwd">"
Last step is to enter your password and click on Login.
"</string>
</string>
<string name="showcase_uid"> In this field, write the email that is attached to your Mastodon account.
</string>
<string name="showcase_pwd"> Last step is to enter your password and click on Login.
</string>
<string name="more_information">More information</string>
<string name="showcase_2FA">If you use 2FA (Two-factor authentication), you need to use this link.\nYou can also use it if you do not want to enter your credentials here.</string>
<!-- languages not translated -->
@ -709,6 +698,7 @@
<string name="some_words_any">Any of these words (space-separated)</string>
<string name="some_words_all">All these words (space-separated)</string>
<string name="some_words_none">None of these words (space-separated)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Change column name</string>
<string name="no_misskey_instance">No Misskey instances</string>
<string name="misskey_instance">Misskey instance</string>
@ -853,6 +843,9 @@
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d vote</item>
<item quantity="other">%d votes</item>

View File

@ -336,7 +336,7 @@
<string name="set_save_changes">حفظ التغييرات</string>
<string name="set_header_picture_overlay">اختيار الصورة الرأسية</string>
<string name="set_fit_preview">تكافؤ معاينة الصور</string>
<string name="set_automatically_split_toot">تقسيم التبويقات التي تفوق الـ 500 حرف عند الرد</string>
<string name="set_automatically_split_toot">تقسيم التبويقات على شكل ردود عندما تفوق عدد الحروف:</string>
<string name="note_no_space">لقد بلغت حد الـ 160 حرف المسموح به!</string>
<string name="username_no_space">لقد بلغت حد الـ 30 حرف المسموح به!</string>
<string name="settings_time_from">بين</string>
@ -403,10 +403,9 @@
<string name="set_resize_picture">تعديل حجم الصور</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">الإشعارات المدفوعة</string>
<string name="settings_popup_message">"
الرجاء التأكّد مِن الإشعارات المدفوعة التي تودّ تلقيها.
<string name="settings_popup_message"> الرجاء التأكّد مِن الإشعارات المدفوعة التي تودّ تلقيها.
بإمكانك تفعيل أو تعطيل هذه الإشعارات لاحقًا عبر الإعدادات (في تبويب الإخطارات).
"</string>
</string>
<string name="settings_popup_timeline">للتبويقات غير المقروءة على الخط الزمني الرئيسي ؟</string>
<string name="settings_popup_notification">للإشعارات غير المقروءة ؟</string>
<!-- CACHE -->
@ -443,41 +442,36 @@
<string name="owner_cached_toots_empty">لم يتم العثور على أي تبويق في قاعدة البيانات. يرجى استخدام زر المزامنة المتواجد في القائمة لجلبها.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">البيانات المسجلة</string>
<string name="privacy_data">"
لا يقوم التطبيق إلا بحفظ معلومات عن الحسابات في الجهاز.
<string name="privacy_data"> لا يقوم التطبيق إلا بحفظ معلومات عن الحسابات في الجهاز.
تبقى هذه البايانات سرية و لا تُستخدَم إلا لتشغيل التطبيق.
إنّ حذف التطبيق يؤدي إلى إزالة هذه البيانات.\n
&#9888; لا يقوم التطبيق بحفظ إسم المستخدم و الكلمات السرية. يقوم التطبيق باستخدمها و فقط عند الإتصال الآمن و المصادقة عبر (SSL) مع مثيل خادوم.
"</string>
</string>
<string name="privacy_authorizations_title">التصريحات:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: تستخدم للكشف عن إذا كان الجهاز متصلا بشبكة واي فاي.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: تستخدم للكشف عن إذا كان الجهاز متصلا بشبكة واي فاي.\n
- <b>INTERNET</b>: تستخدم لطلبات الاستعلامات على مثيلات الخوادم.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: تستخدم لتخزين الوسائط أو نقل التطبيق على بطاقة SD.\n
- <b>READ_EXTERNAL_STORAGE</b>: تستخدم لإضافة الوسائط في التبويقات.\n
- <b>BOOT_COMPLETED</b>: يستخدم لبدء تشغيل خدمة الإشعار.\n
- <b>WAKE_LOCK</b>: تستخدم في خدمة الإشعارات.
"</string>
</string>
<string name="privacy_API_authorizations_title">تصريحات خدمة برمجة التطبيقات API:</string>
<string name="privacy_API_authorizations">"
- <b>القراءة</b>: قراءة البيانات.\n
<string name="privacy_API_authorizations"> - <b>القراءة</b>: قراءة البيانات.\n
- <b>الكتابة</b>: نشر المنشورات و رفع الصور الخاصة بالمنشورات.\n
- <b>المتابعة</b>: المتابعة و إلغاء المتابعة و الحظر و إلغاء الحظر.\n\n
<b>&#9888; يقوم التطبيق بهذه الإجراءات عند طلب المُستخدِم لاستعمالها.</b>
"</string>
</string>
<string name="privacy_API_title">التعقب و المكتبات</string>
<string name="privacy_API">"
إنّ التطبيق <b>لا يستخدم أدوات للتعقّب</b> (لقياس الجمهور، للإبلاغ عن الأخطاء، إلخ.) ولا يحتوي على أية إعلانات تجارية.\n\n
<string name="privacy_API"> إنّ التطبيق <b>لا يستخدم أدوات للتعقّب</b> (لقياس الجمهور، للإبلاغ عن الأخطاء، إلخ.) ولا يحتوي على أية إعلانات تجارية.\n\n
تم التقليل من استخدام المكتبات: \n
- <b>Glide</b>: لإدارة الوسائط\n
- <b>Android-Job</b>: لإدارة الخدمات\n
- <b>PhotoView</b>: لإدارة الصور\n
"</string>
</string>
<string name="privacy_API_yandex_title">ترجمة التبويقات</string>
<string name="privacy_API_yandex_authorizations">"
يوفر التطبيق امكانية ترجمة التبويقات باستخدام لغة الجهاز وواجهة برمجة التطبيقات Yandex API.\n
<string name="privacy_API_yandex_authorizations"> يوفر التطبيق امكانية ترجمة التبويقات باستخدام لغة الجهاز وواجهة برمجة التطبيقات Yandex API.\n
لدى ياندكس سياستهم الخاصة بشأن الخصوصية و يمكن العثور عليها هنا: https://yandex.ru/legal/confidential/?lang=en
"</string>
</string>
<string name="thanks_text_dev">الشكر لـ :</string>
<string name="filter_regex">التصفية بواسطة العبارات المنطقية</string>
<string name="search">البحث</string>
@ -499,14 +493,13 @@
<string name="account_moved_to">%1$s انتقلَ إلى %2$s</string>
<string name="show_boost_count">عرض عدد الترقيات والمفضلة</string>
<string name="issue_login_title">هل المصادقة لا تعمل؟</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 GitLab at https://gitlab.com/tom79/mastalab/issues
"</string>
<string name="issue_login_message"> <b>وهنا بعض الاختبارات التي قد تساعدكم:</b>\n\n
- تحققوا من عدم وجود الأخطاء الإملائية في اسم مثيل الخادم\n\n
- تحققوا مِن أنّ مثيل الخادم يشتغل\n\n
- إذا كنتم تستخدمون المصادقة بخطوتين (2FA) الرجاء استخدام الرابط في الأسفل (يجب إدخال اسم السيرفر أولا)\n\n
- يمكنكم أيضا استخدام هذا الرابط بدون استخدام 2FA\n\n
- إذا كان لا يزال لا يعمل ، يرجى إرسال تقرير على GitLab إلى https://gitlab.com/tom79/mastalab/issues
</string>
<string name="media_ready">تم تحميل الوسائط. اضغط هنا للعرض.</string>
<string name="data_export_start">يمكن أن تستغرق هذه العملية وقتًا طويلًا. سوف نقوم بإشعارك عند تتمتها.</string>
<string name="data_export_running">جارٍ التشغيل، الرجاء الانتظار…</string>
@ -561,7 +554,7 @@
<string name="context_public">الخطوط الزمنية العمومية</string>
<string name="context_notification">الإشعارات</string>
<string name="context_conversation">المحادثات</string>
<string name="filter_keyword_explanations">سوف يتم العثور عليه مهما كانت حالة الأحرف في النص أو حتى و إن كان داخل الويب و فيه تحذير عن المحتوى</string>
<string name="filter_keyword_explanations">سوف يتم العثور عليه بغض النظر عن حالة الأحرف في النص أو حتى و إن كان فيه تحذير عن المحتوى</string>
<string name="context_drop">حذف بدلًا مِن الإخفاء</string>
<string name="context_drop_explanations">سوف تختفي التبويقات المُصفّاة إلى الأبد، حتى و إن تم حذف عامل التصفية لاحقًا</string>
<string name="context_whole_word_explanations">إذا كانت الكلمة أو الجملة مكونة من الأرقام والحروف فقط سوف يتم تطبيقها فقط عند مطابقة الكلمة ككل</string>
@ -692,17 +685,14 @@
<item>يوم واحد</item>
<item>أسبوع واحد</item>
</string-array>
<string name="showcase_instance">"
In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
You can start writing first letters and names will be suggested.\n\n
⚠ The Login button will only work if the instance name is valid and the instance is up!
"</string>
<string name="showcase_uid">"
في هذا الحقل، قم بكتابة عنوان بريك الإلكتروني المرتبط بحسابك على ماستدون.
"</string>
<string name="showcase_pwd">"
هذه هي الخطوة الأخيرة. ادخل كلمتك السرية ثم انقر على تسجيل الدخول.
"</string>
<string name="showcase_instance"> في هذا الحقل تحتاج إلى كتابة اسم المضيف.\nعلى سبيل المثال ، إن أنشأتم حسابكم على https://mastodon.social\nتكفي كتابة <b>mastodon.social</b> (دون https://)\n
يمكنكم الشروع في كتابة الحروف الأولى وستُقترَحُ عليكم أسماء.\n\n
⚠ زِرّ \"تسجيل الدخول\" سوف يعمل فقط إذا كان الخادم شغّالاً واسمه صالح!
</string>
<string name="showcase_uid"> في هذا الحقل، قم بكتابة عنوان بريك الإلكتروني المرتبط بحسابك على ماستدون.
</string>
<string name="showcase_pwd"> هذه هي الخطوة الأخيرة. ادخل كلمتك السرية ثم انقر على تسجيل الدخول.
</string>
<string name="more_information">تفاصيل أكثر</string>
<string name="showcase_2FA">إن كنت قد قمت بتفعيل المصادقة بخطوتين (2FA)، يمكنك استخدام هذا الرابط.\nيمكنك استخدامه كذلك إن كنت لا ترغب في ادخال بيانات تسجيل الدخول الخاصة بك هنا.</string>
<!-- languages not translated -->
@ -723,6 +713,7 @@
<string name="some_words_any">أي من هذه الكلمات (مفصولة بمسافة)</string>
<string name="some_words_all">كافة هذه الكلمات (مفصولة بمسافة)</string>
<string name="some_words_none">لاشيء من هذه الكلمات (مفصولة بمسافة)</string>
<string name="some_tags">أضف بعض الكلمات للتصفية (مفصولة بمسافة)</string>
<string name="change_tag_column">تغيير اسم العمود</string>
<string name="no_misskey_instance">لا توجد أية مثيلات خوادم ميسكي</string>
<string name="misskey_instance">مثيل خادم ميسكي</string>
@ -802,7 +793,7 @@
<string name="set_optimize_loading">تحسين مدة التحميل</string>
<string name="all">الكل</string>
<string name="about_opencollective">ادعم التطبيق</string>
<string name="more_about_opencollective">Open Collective enables groups to quickly set up a collective, raise funds and manage them transparently.</string>
<string name="more_about_opencollective">فتح الجماعية تمكن الجماعات إلى المسارعة الجماعية ، جمع الأموال وإدارتها بشفافية.</string>
<string name="copy_link">انسخ الرابط</string>
<string name="connect_instance">اتصل</string>
<string name="set_normal">عادي</string>
@ -855,7 +846,7 @@
<string name="undo">إلغاء</string>
<string name="visible_tabs_needed">يجب الإبقاء على لسانَين ظاهرين!</string>
<string name="action_reorder_timeline">إعادة ترتيب الخيوط الزمنية</string>
<string name="warning_list_deletion">Use the lists entry for deleting this list!</string>
<string name="warning_list_deletion">استخدم القوائم قصد حذف هذه القائمة!</string>
<string name="warning_main_timeline">الخيوط الرئيسية يمكن فقط إخفاءها!</string>
<string name="action_bbcode">BBCode</string>
<string name="add_timeline">إضافة خيط زمني</string>
@ -865,8 +856,11 @@
<string name="set_forward_tags">نقل الوسوم في الردود</string>
<string name="set_long_press_media">اضغط مطولاً لحفظ الوسائط</string>
<string name="set_blur_sensitive">تعتيم الوسائط الحساسة</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_timeline_in_list">عرض الخيوط الزمنية في قائمة</string>
<string name="display_timeline">عرض الخيوط الزمنية</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">إدارة الوسوم</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="zero">لا صوت</item>
<item quantity="one">صوت واحد</item>

View File

@ -387,9 +387,8 @@
<string name="set_resize_picture">Redimensiona les fotos</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Notificacions emergents</string>
<string name="settings_popup_message">"
Sisplau, confirma les notificacions emergents que vols rebre.
Pots habilitar o deshabilitar les notificacions més endavant als ajustaments (Pestanya de notificacions). "</string>
<string name="settings_popup_message">Sisplau, confirma les notificacions emergents que vols rebre.
Pots habilitar o deshabilitar les notificacions més endavant als ajustaments (Pestanya de notificacions). </string>
<string name="settings_popup_timeline">Per als toots no llegits a la pissarra pròpia?</string>
<string name="settings_popup_notification">Per a notificacions no llegides?</string>
<!-- CACHE -->
@ -426,42 +425,36 @@ Pots habilitar o deshabilitar les notificacions més endavant als ajustaments (P
<string name="owner_cached_toots_empty">No s\'han trobat toots a la base de dades. Sisplau, feu ús del botó de sincronitzar del menú per recobrar-los.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Dades gravades</string>
<string name="privacy_data">"
Només es guarda al dispositiu la informació bàsica dels comptes.
<string name="privacy_data">Només es guarda al dispositiu la informació bàsica dels comptes.
Aquestes dades són estrictament confidencials i només les pot usar l\'aplicació.
Quan s\'esborra l\'aplicació s\'eliminen les dades immediatament.\n
&#9888; Els noms d\'usuari i contrasenyes no s\'emmagatzemen mai. Només s\'utilitzen durant una autentificació segura (SSL) en una instància. "</string>
&#9888; Els noms d\'usuari i contrasenyes no s\'emmagatzemen mai. Només s\'utilitzen durant una autentificació segura (SSL) en una instància. </string>
<string name="privacy_authorizations_title">Permisos:</string>
<string name="privacy_authorizations">"
- <b>ESTAT_ACCES_XARXA</b>: Usat per detectar si el dispositiu està connectat a una xarxa WIFI.\n
<string name="privacy_authorizations">- <b>ESTAT_ACCES_XARXA</b>: Usat per detectar si el dispositiu està connectat a una xarxa WIFI.\n
- <b>INTERNET</b>: Usat per a requeriments a una instància.\n
- <b>ESCRIURE_MAGATZEM_EXTERN</b>: Usat per emmagatzemar mèdia o moure l\'app a una tarja SD.\n
- <b>LLEGIR_MAGATZEM_EXTERN</b>: Usat per afegir mèdia als toots.\n
- <b>BOOT_COMPLET</b>: Usat per iniciar el servei de notificació.\n
- <b>DESPERTA_BLOCATGE</b>: Usat durant el servei de notificació. "</string>
- <b>DESPERTA_BLOCATGE</b>: Usat durant el servei de notificació. </string>
<string name="privacy_API_authorizations_title">Permisos d\'API:</string>
<string name="privacy_API_authorizations">"
- <b>Lectura</b>: Lectura de dades.\n
<string name="privacy_API_authorizations"> - <b>Lectura</b>: Lectura de dades.\n
- <b>Escriptura</b>: Defineix els estatus i carrega mèdia per a estatus.\n
- <b>Seguiments</b>: segueix, desegueix, bloca, desbloca.\n\n
<b>&#9888; Aquestes accions es realitzen només a petició de l\'usuari.</b>
"</string>
</string>
<string name="privacy_API_title">Rastreig i llibreries</string>
<string name="privacy_API">"
L\' aplicació <b>no fa ús d\'eines de rastreig</b> (mesures d\'audiència, informes d\'errors, etc.) i no conté publicitat.\n\n
<string name="privacy_API"> L\' aplicació <b>no fa ús d\'eines de rastreig</b> (mesures d\'audiència, informes d\'errors, etc.) i no conté publicitat.\n\n
es minimitza l\'ús de les biblioteques: \n
- <b>Lliscar</b>: Per gestionar els mèdia\n
- <b>Tasques-Android</b>: Per gestionar serveis\n
- <b>FotoVista</b>: Per gestionar imatges\n
"</string>
</string>
<string name="privacy_API_yandex_title">Traducció dels toots</string>
<string name="privacy_API_yandex_authorizations">"
L\'aplicació permet la traducció de toots a través de la configuració regional del dispositiu i l\'API Yandex.\n
<string name="privacy_API_yandex_authorizations"> L\'aplicació permet la traducció de toots a través de la configuració regional del dispositiu i l\'API Yandex.\n
Yandex té la seva pròpia política de privacitat, disponible aquí: https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
Agraïments:
"</string>
</string>
<string name="thanks_text_dev"> Agraïments:
</string>
<string name="filter_regex">Filtratge mitjançant expressions regulars</string>
<string name="search">Cerca</string>
<string name="delete">Suprimeix</string>
@ -482,9 +475,8 @@ Quan s\'esborra l\'aplicació s\'eliminen les dades immediatament.\n
<string name="account_moved_to">%1$s s\'ha traslladat a %2$s</string>
<string name="show_boost_count">Mostra el recompte de difusions/preferits</string>
<string name="issue_login_title">L\'autenticació falla?</string>
<string name="issue_login_message">"
<b>Aquí hi ha algunes comprovacions potencialment útils:</b>\n\n
- Comprova que no hi hagi errors de picatge en el nom de la instància\n\n - Comprova que no tinguis la instància inactiva\n\n - Si tens l\'autenticació de dos factors (2FA), prova l\'enllaç de la part inferior (després d\'entrar el nom de la instància)\n\n - L\'enllaç el pots fer servir encara que no tinguis la 2FA\n\n - Si encara no rutlla, sisplau obre fil del GitLab a https://gitlab.com/tom79/mastalab/issues "</string>
<string name="issue_login_message"> <b>Aquí hi ha algunes comprovacions potencialment útils:</b>\n\n
- Comprova que no hi hagi errors de picatge en el nom de la instància\n\n - Comprova que no tinguis la instància inactiva\n\n - Si tens l\'autenticació de dos factors (2FA), prova l\'enllaç de la part inferior (després d\'entrar el nom de la instància)\n\n - L\'enllaç el pots fer servir encara que no tinguis la 2FA\n\n - Si encara no rutlla, sisplau obre fil del GitLab a https://gitlab.com/tom79/mastalab/issues </string>
<string name="media_ready">S\'ha carregat el mèdia. Clica aquí per mostrar-lo.</string>
<string name="data_export_start">Aquesta acció pot durar temps. Rebràs un avís quan estigui enllestida.</string>
<string name="data_export_running">Segueix processant, espereu sisplau…</string>
@ -639,7 +631,7 @@ Quan s\'esborra l\'aplicació s\'eliminen les dades immediatament.\n
<string name="schedule_boost">Temporalitza difusió</string>
<string name="boost_scheduled">Aquesta difusió s\'ha temporalitzat!</string>
<string name="no_scheduled_boosts">No hi ha temporalitzacions de difusió per mostrar!</string>
<string name="no_scheduled_boosts_indications"><![CDATA[Obre el menú d\'un toot i selecciona <b>Temporalitza la difusió</b>.]]></string>
<string name="no_scheduled_boosts_indications"><![CDATA[Obre el menú d'un toot i selecciona <b>Temporalitza la difusió</b>.]]></string>
<string name="art_menu">Pissarra de l\'art</string>
<string name="open_menu">Obrir menú</string>
<string name="go_back">Torna</string>
@ -670,17 +662,14 @@ Quan s\'esborra l\'aplicació s\'eliminen les dades immediatament.\n
<item>1 dia</item>
<item>1 setmana</item>
</string-array>
<string name="showcase_instance">"
En aquest camp, cal que hi escriguis el nom del servidor de la teva instància.\nPer exemple, si has creat el compte a https://mastodon.social\n Només cal escriure <b>mastodon.social</b> (sense https://)\n
<string name="showcase_instance"> En aquest camp, cal que hi escriguis el nom del servidor de la teva instància.\nPer exemple, si has creat el compte a https://mastodon.social\n Només cal escriure <b>mastodon.social</b> (sense https://)\n
Pots començar amb les primeres lletres i ja se suggeriran noms.\n\n
⚠ El botó d\'inici de sessió només funcionarà si el nom d\'instància és vàlid i la instància està activa!
"</string>
<string name="showcase_uid">"
En aquest camp, hi escrius el correu electrònic associat al teu compte de mastodont.
"</string>
<string name="showcase_pwd">"
L\'últim pas consisteix en introduir la contrasenya i clicar a \"Inici de sessió\".
"</string>
</string>
<string name="showcase_uid"> En aquest camp, hi escrius el correu electrònic associat al teu compte de mastodont.
</string>
<string name="showcase_pwd"> L\'últim pas consisteix en introduir la contrasenya i clicar a \"Inici de sessió\".
</string>
<string name="more_information">Més informació</string>
<string name="showcase_2FA">Si fas ús del 2FA (autenticació de dos factors), et cal emprar aquest enllaç.\nTambé pots utilitzar-lo si no vols introduir les credencials aquí.</string>
<!-- languages not translated -->
@ -701,6 +690,7 @@ Quan s\'esborra l\'aplicació s\'eliminen les dades immediatament.\n
<string name="some_words_any">Qualsevol d\'aquestes paraules (separades-per-espais)</string>
<string name="some_words_all">Totes aquestes paraules (separades-per-espais)</string>
<string name="some_words_none">Cap d\'aquestes paraules (separades per espais)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Canvi de nom de columna</string>
<string name="no_misskey_instance">No hi ha instàncies de Misskey</string>
<string name="misskey_instance">Instància Misskey</string>
@ -759,12 +749,12 @@ Quan s\'esborra l\'aplicació s\'eliminen les dades immediatament.\n
<string name="peertube_comment_on_video"><![CDATA[<b>%1$s</b> ha comentat el teu vídeo <b>%2$s</b>]]></string>
<string name="peertube_follow_channel"><![CDATA[<b>%1$s</b> segueix el teu canal <b>%2$s</b>]]></string>
<string name="peertube_follow_account"><![CDATA[<b>%1$s</b> segueix el teu compte]]></string>
<string name="peertube_video_published"><![CDATA[S\'ha publicat el teu vídeo <b>%1$s</b>]]></string>
<string name="peertube_video_published"><![CDATA[S'ha publicat el teu vídeo <b>%1$s</b>]]></string>
<string name="peertube_video_import_success"><![CDATA[Ha reeixit la importació del teu vídeo <b>%1$s</b>]]></string>
<string name="peertube_video_import_error"><![CDATA[Ha fallat la importació del vídeo <b>%1$s</b>]]></string>
<string name="peertube_video_from_subscription"><![CDATA[<b>%1$s</b> ha publicat un nou vídeo: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Han posat el teu vídeo <b>%1$s</b> en una llista negra]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Han tret el teu vídeo <b>%1$s</b> d\'una llista negra]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Han tret el teu vídeo <b>%1$s</b> d'una llista negra]]></string>
<string name="export_data">Exportar dades</string>
<string name="import_data">Importar dades</string>
<string name="toot_select_import">Selecciona el document a importar</string>
@ -843,8 +833,11 @@ Quan s\'esborra l\'aplicació s\'eliminen les dades immediatament.\n
<string name="set_forward_tags">Incloure etiquetes a les respostes</string>
<string name="set_long_press_media">Pitjada llarga per emmagatzemar mèdia</string>
<string name="set_blur_sensitive">Tornar borrosos els mèdia sensibles</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_timeline_in_list">Mostra pissarres com a llista</string>
<string name="display_timeline">Mostra pissarres</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d vot</item>
<item quantity="other">%d vots</item>

View File

@ -395,10 +395,9 @@
<string name="set_resize_picture">Změnit velikost obrázků</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push oznámení</string>
<string name="settings_popup_message">"
Prosím potvrďte push oznámení, která chcete dostávat.
<string name="settings_popup_message"> Prosím potvrďte push oznámení, která chcete dostávat.
Toto nastavení můžete změnit později v Nastavení (záložka Oznámení).
"</string>
</string>
<string name="settings_popup_timeline">Pro nepřečtené tooty v domovské časové ose?</string>
<string name="settings_popup_notification">Pro nepřečtená oznámení?</string>
<!-- CACHE -->
@ -435,42 +434,36 @@
<string name="owner_cached_toots_empty">V databázi nebyly nalezeny žádné tooty. Prosím použijte synchronizační tlačítko v menu pro obnovení.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Zaznamenaná data</string>
<string name="privacy_data">"
V zařízení jsou uloženy pouze základní informace o účtech.
<string name="privacy_data">V zařízení jsou uloženy pouze základní informace o účtech.
Tyto informace jsou přísně tajné a mohou být použity pouze aplikací.
Smazaní aplikace okamžitě odstraní tyto údaje.\n
Uživatelské jméno a heslo nejsou nikdy ukládány. Jsou použity pouze během bezpečného přihlášení (SSL) k instanci. "</string>
Uživatelské jméno a heslo nejsou nikdy ukládány. Jsou použity pouze během bezpečného přihlášení (SSL) k instanci. </string>
<string name="privacy_authorizations_title">Oprávnění:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: Použito k detekci WiFi připojení.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: Použito k detekci WiFi připojení.\n
- <b>INTERNET</b>: Použito ke komunikaci s instancí.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: Použito k ukládání médií nebo k přesunu aplikace na SD kartu.\n
- <b>READ_EXTERNAL_STORAGE</b>: Použito pro přidání medií k tootům.\n
- <b>BOOT_COMPLETED</b>: Použito k aktivaci oznamovací služby.\n
- <b>WAKE_LOCK</b>: Použito během oznamovací služby.
"</string>
</string>
<string name="privacy_API_authorizations_title">API oprávnění:</string>
<string name="privacy_API_authorizations">"
- <b>Čtení</b>: Čtení dat.\n
<string name="privacy_API_authorizations"> - <b>Čtení</b>: Čtení dat.\n
- <b>Zápis</b>: Zveřejňování příspěvků a nahrávání médií k příspěvkům.\n
- <b>Sledování</b>: Sledování, zrušení sledování, blokování, odblokování.\n\n
<b>&#9888; Tyto akce jsou vykonány pouze na vyžádání uživatele.</b>
"</string>
</string>
<string name="privacy_API_title">Sledování a Knihovny</string>
<string name="privacy_API">"
Aplikace <b>nepoužívá sledovací nástroje</b> (měření návštěvnosti, hlášení chyb, atd.) a neobsahuje reklamy.\n\n
<string name="privacy_API"> Aplikace <b>nepoužívá sledovací nástroje</b> (měření návštěvnosti, hlášení chyb, atd.) a neobsahuje reklamy.\n\n
Použití knihoven je minimální: \n
- <b>Glide</b>: Správa médií\n
- <b>Android-Job</b>: Správa služeb\n
- <b>PhotoView</b>: Správa obrázků\n
"</string>
</string>
<string name="privacy_API_yandex_title">Překlad tootů</string>
<string name="privacy_API_yandex_authorizations">"
Aplikace umožňuje překlad tootů do jazyka zařízení s použitím služby Yandex API.\n
<string name="privacy_API_yandex_authorizations"> Aplikace umožňuje překlad tootů do jazyka zařízení s použitím služby Yandex API.\n
Yandex má svá vlastní pravidla pro soukromí uživatelských dat zde: https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
Poděkování: "</string>
</string>
<string name="thanks_text_dev">Poděkování: </string>
<string name="filter_regex">Filtrování regulárními výrazy</string>
<string name="search">Hledat</string>
<string name="delete">Odstranit</string>
@ -491,14 +484,13 @@ Poděkování: "</string>
<string name="account_moved_to">%1$s se přesunul do %2$s</string>
<string name="show_boost_count">Zobrazit počet boostů/oblíbení</string>
<string name="issue_login_title">Přihlášení nefunguje?</string>
<string name="issue_login_message">"
<b>Zde jsou kontroly, které by vám mohly pomoct:</b>\n\n
<string name="issue_login_message"> <b>Zde jsou kontroly, které by vám mohly pomoct:</b>\n\n
- Zkontrolujte, že ve jmménu instance není překlep\n\n
- Ověřte, že vaše instance běží\n\n
- V případě, že používáte dvoufaktorovou autentizaci (2FA), použijte prosím odkaz dole (jakmile je vyplněno jméno instance)\n\n
- Můžete také použít tento link bez použití 2FA\n\n
- Pokud problém přetrvává, vytvořte tiket na https://gitlab.com/tom79/mastalab/issues
"</string>
</string>
<string name="media_ready">Média byla nahrána. Klikněte pro zobrazení.</string>
<string name="data_export_start">Tato akce může trvat dlouho. Po dokončení obdržíte oznámení.</string>
<string name="data_export_running">Zpracovávám, prosím čekejte…</string>
@ -684,16 +676,13 @@ Poděkování: "</string>
<item>1 den</item>
<item>1 týden</item>
</string-array>
<string name="showcase_instance">"
V tomto políčku vyplňte jméno vaší instance.\nPokud jste například vytvořili váš účet na https://mastodon.social\nvyplňte pouze <b>mastodon.social</b> (bez https://)\n
<string name="showcase_instance"> V tomto políčku vyplňte jméno vaší instance.\nPokud jste například vytvořili váš účet na https://mastodon.social\nvyplňte pouze <b>mastodon.social</b> (bez https://)\n
Začněte psát první znaky pro návrh.\n\n
⚠ Tlačítko přihlášení bude fungovat pouze v případě, že je jméno instance platné a instance běží!
"</string>
<string name="showcase_uid">"
V tomto poli vyplňte email, který je svázaný s vaším účtem Mastodon.
"</string>
<string name="showcase_pwd">"
Jako poslední krok vložte své heslo a klepňete na Login. "</string>
</string>
<string name="showcase_uid"> V tomto poli vyplňte email, který je svázaný s vaším účtem Mastodon.
</string>
<string name="showcase_pwd">Jako poslední krok vložte své heslo a klepňete na Login. </string>
<string name="more_information">Více informací</string>
<string name="showcase_2FA">V případě, že používáte 2FA (dvoufaktorovou autentizaci), použijte tento odkaz.\nMůžete jej také použít, pokud nechcete vložit své přihlašovací údaje tady.</string>
<!-- languages not translated -->
@ -714,6 +703,7 @@ Jako poslední krok vložte své heslo a klepňete na Login. "</string>
<string name="some_words_any">Kterékoliv slovo (odělené mezerami)</string>
<string name="some_words_all">Všechna slova (oddělená mezerami)</string>
<string name="some_words_none">Žádné z těchto slov (oddělené mezerami)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Změnit název sloupce</string>
<string name="no_misskey_instance">Žádná Misskey instance</string>
<string name="misskey_instance">Misskey instance</string>
@ -858,6 +848,9 @@ Jako poslední krok vložte své heslo a klepňete na Login. "</string>
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d hlas</item>
<item quantity="few">%d hlasy</item>

View File

@ -403,10 +403,9 @@
<string name="set_resize_picture">Newid maint lluniau</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Hysbysiadau push</string>
<string name="settings_popup_message">"
Cadarnhewch yr hysbysiadau push yr ydych am eu derbyn.
<string name="settings_popup_message"> Cadarnhewch yr hysbysiadau push yr ydych am eu derbyn.
Mae modd galluogi neu diffodd yr hysbysiadau hyn wedyn yn gosodiadau (Tab hysbysiadau).
"</string>
</string>
<string name="settings_popup_timeline">Ar gyfer tŵtiau heb eu darllen yn y ffrwd?</string>
<string name="settings_popup_notification">Ar gyfer hysbysiadau heb eu darllen?</string>
<!-- CACHE -->
@ -443,43 +442,37 @@
<string name="owner_cached_toots_empty">Ni ganfyddwyd unrhyw dŵtiau yn y gronfa data. Defnyddiwch y botwm cydamseru o\'r ddewislen i\'w dychwelyd.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Data a gofnodwyd</string>
<string name="privacy_data">"
Ond gwybodaeth syml o\'r cyfrifoedd sy\'n cael ei gadw ar y ddyfais.
<string name="privacy_data"> Ond gwybodaeth syml o\'r cyfrifoedd sy\'n cael ei gadw ar y ddyfais.
Mae\'r data yma\'n gwbl gyfrinachol ac ond yn gallu cael ei ddefnyddio gan y rhaglen.
Mae dileu y rhaglen yn cael gwared ar y data yma\'n syth.\n
&#9888; Nid yw\'r manylion mewngofnodi na cyfrineiriau yn cael eu storio. Maent ond yn cael eu defnyddio yn ystod dilysu (SSL) gyda achos.
"</string>
</string>
<string name="privacy_authorizations_title">Caniatad:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: Defnyddir er mwyn gweld os yw\'r ddyfais wedi ei gysylltu a rhwydwaith WIFI.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: Defnyddir er mwyn gweld os yw\'r ddyfais wedi ei gysylltu a rhwydwaith WIFI.\n
- <b>INTERNET</b>: Defnyddir er mwyn gnweud holiadau i achos.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: Defnyddir er mwyn storio cyfryngau neu i symud yr ap ar gerdyn SD.\n
- <b>READ_EXTERNAL_STORAGE</b>: Defnyddir er mwyn ychwanegu cyfryngau i dŵtiau\n
- <b>BOOT_COMPLETED</b>: Defnyddir er mwyn cychwyn y gwasanaeth hysbysu.\n
- <b>WAKE_LOCK</b>: Defnyddir yn ystod y gwasanaeth hysbysu.
"</string>
</string>
<string name="privacy_API_authorizations_title">Caniatad API:</string>
<string name="privacy_API_authorizations">"
- <b>Darllen</b>: Darllen data.\n
<string name="privacy_API_authorizations"> - <b>Darllen</b>: Darllen data.\n
- <b>Ysgrifennu</b>: Postio statws ac uwchlwytho cyfryngau ar gyfer statws.\n
- <b>Dilyn</b>: Dilyn, dad-ddilyn, blocio a dad-flocio.\n\n
<b>&#9888; Ceith y rhain ond eu gweithredu pan y mae defnyddiwr yn gwneud cais amdanynt.</b>
"</string>
</string>
<string name="privacy_API_title">Tracio a Llyfrgelloedd</string>
<string name="privacy_API">"
Nid yw\'r rhaglen hwn <b>yn defnyddio offerynnau tracio</b> (mesur cynulleidfa, adrodd gwallau, a. y. y. b) ac nid oes hysbysebu chwaith.\n\n
<string name="privacy_API"> Nid yw\'r rhaglen hwn <b>yn defnyddio offerynnau tracio</b> (mesur cynulleidfa, adrodd gwallau, a. y. y. b) ac nid oes hysbysebu chwaith.\n\n
Mae defnydd llyfrgelloedd yn gyfyngedig: \n
- <b>Glide</b>: I reoli cyfryngau\n
- <b>Android-Job</b>: I reoli gwasanaethau\n
- <b>PhotoView</b>: I reoli delweddau\n
"</string>
</string>
<string name="privacy_API_yandex_title">Cyfieithiadau o\'r tŵtiau</string>
<string name="privacy_API_yandex_authorizations">"
Mae\'r rhaglen yn caniatau y gallu i gyfieithu toots gan ddefnyddio lleoliad y ddyfais ac API Yandex.\n
<string name="privacy_API_yandex_authorizations"> Mae\'r rhaglen yn caniatau y gallu i gyfieithu toots gan ddefnyddio lleoliad y ddyfais ac API Yandex.\n
Mae gan Yandex bolisi preifatrwydd, mae modd ei weld yma: https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
Diolch i: "</string>
</string>
<string name="thanks_text_dev">Diolch i: </string>
<string name="filter_regex">Hidlo drwy ddefnyddio mynegiadau rheolaidd</string>
<string name="search">Chwilio</string>
<string name="delete">Dileu</string>
@ -500,14 +493,13 @@ Diolch i: "</string>
<string name="account_moved_to">Mae %1$s wedi symud i %2$s</string>
<string name="show_boost_count">Dangos nifer hybiadau/ffefrynnau</string>
<string name="issue_login_title">Dilysu ddim yn gweithio?</string>
<string name="issue_login_message">"
<b>Dyma ambell wiriad all fod yn help:</b>\n\n
<string name="issue_login_message"> <b>Dyma ambell wiriad all fod yn help:</b>\n\n
- Gwiriwch nad oes camgymeriad sillafu yn enw\'r achos\n\n
- Gwiriwch nad yw eich achos i lawr\n\n
- Os ydych yn defnyddio dilysu dau gam (2FA), defnyddiwch y ddolen ar y gwaelod (unwaith y mae enw\'r achos wedi\'i lenwi)\n\n
- Mae modd defnyddio\'r ddolen yma heb ddefnyddio 2FA\n\n
- Os yw dal ddim yn gweithio, codwch y mater ar GitLab: https://gitlab.com/tom79/mastalab/issues
"</string>
</string>
<string name="media_ready">Mae\'r cyfryngau wedi eu llwytho. Cliciwch yma i\'w harddangos.</string>
<string name="data_export_start">Mae\'r weithred yma\'n gallu cymryd amser. Cewch eich hysbysu pan y mae wedi gorffen.</string>
<string name="data_export_running">Dal i redeg, arhoswch os gwelwch yn dda…</string>
@ -693,17 +685,14 @@ Diolch i: "</string>
<item>1 diwrnod</item>
<item>1 wythnos</item>
</string-array>
<string name="showcase_instance">"
Yn y maes hwn mae angen i chi ysgrifennu enw lletywr eich achos.\nEr enghraifft, os wnaethoch chi greu eich cyfrif ar https://mastodon.social\nYsgrifennwch <b>mastodon.social</b> (heb https://)\n
<string name="showcase_instance"> Yn y maes hwn mae angen i chi ysgrifennu enw lletywr eich achos.\nEr enghraifft, os wnaethoch chi greu eich cyfrif ar https://mastodon.social\nYsgrifennwch <b>mastodon.social</b> (heb https://)\n
Mae modd i chi ddechrau ysgrifennu llythrennau cychwynol a bydd enwau yn cael eu hawgrymu.\n\n
⚠ Bydd y botwm Mewngofnodi ond yn gweithio os yw enw\'r achos yn ddilys a bod yr achos yn weithredol!
"</string>
<string name="showcase_uid">"
Yn y maes hwn, ysgrifennwch yr ebost sydd wedi ei gysylltu a\'ch cyfrif Mastodon.
"</string>
<string name="showcase_pwd">"
Y cam olaf yw i fewnosod eich cyfrinair a clicio ar Mengofnodi.
"</string>
</string>
<string name="showcase_uid"> Yn y maes hwn, ysgrifennwch yr ebost sydd wedi ei gysylltu a\'ch cyfrif Mastodon.
</string>
<string name="showcase_pwd"> Y cam olaf yw i fewnosod eich cyfrinair a clicio ar Mengofnodi.
</string>
<string name="more_information">Mwy o wybodaeth</string>
<string name="showcase_2FA">Os ydych yn defnyddio 2FA (Dilysu dau gam), mae angen i chi ddefnyddio\'r ddolen yma. \nMae modd i chi ddefnyddio os nad ydych eisiau mewnosod eich cymwysterau yma.</string>
<!-- languages not translated -->
@ -724,6 +713,7 @@ Diolch i: "</string>
<string name="some_words_any">Unrhyw un o\'r geiriau hyn (a gofod rhyngddynt)</string>
<string name="some_words_all">Yr holl eiriau hyn (a gofod rhyngddynt)</string>
<string name="some_words_none">Dim un o\'r geiriau hyn (a gofod rhyngddynt)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Newid enw\'r golofn</string>
<string name="no_misskey_instance">Dim achosion Misskey</string>
<string name="misskey_instance">Achos Misskey</string>
@ -782,12 +772,12 @@ Diolch i: "</string>
<string name="peertube_comment_on_video"><![CDATA[Nath <b>%1$s</b> wneud sylw ar eich fideo <b>%2$s</b>]]></string>
<string name="peertube_follow_channel"><![CDATA[Mae <b>%1$s</b> yn dilyn eich sianel <b>%2$s</b>]]></string>
<string name="peertube_follow_account"><![CDATA[Mae <b>%1$s</b> yn dilyn eich cyfrif]]></string>
<string name="peertube_video_published"><![CDATA[Mae eich fideo <b>%1$s</b> wedi\'i gyhoeddi]]></string>
<string name="peertube_video_import_success"><![CDATA[Mae\'r fideo a fewnforiwyd <b>%1$s</b> wedi llwyddo]]></string>
<string name="peertube_video_import_error"><![CDATA[Mae\'r fideo a fewnforiwyd <b>%1$s</b> wedi methu]]></string>
<string name="peertube_video_published"><![CDATA[Mae eich fideo <b>%1$s</b> wedi'i gyhoeddi]]></string>
<string name="peertube_video_import_success"><![CDATA[Mae'r fideo a fewnforiwyd <b>%1$s</b> wedi llwyddo]]></string>
<string name="peertube_video_import_error"><![CDATA[Mae'r fideo a fewnforiwyd <b>%1$s</b> wedi methu]]></string>
<string name="peertube_video_from_subscription"><![CDATA[Cyhoeddodd <b>%1$s</b> fideo newydd: <b>%2$s</b>]]></string>
<string name="peertube_video_blacklist"><![CDATA[Mae eich fideo <b>%1$s</b> wedi ei osod ar y rhestr ddu]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Mae eich fideo <b>%1$s</b> wedi ei dynnu o\'r rhestr ddu]]></string>
<string name="peertube_video_unblacklist"><![CDATA[Mae eich fideo <b>%1$s</b> wedi ei dynnu o'r rhestr ddu]]></string>
<string name="export_data">Allforio data</string>
<string name="import_data">Mewnforio Data</string>
<string name="toot_select_import">Dewiswch ddogfen i\'w fewnforio</string>
@ -868,6 +858,9 @@ Diolch i: "</string>
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="zero">%d votes</item>
<item quantity="one">%d vote</item>

View File

@ -320,7 +320,7 @@
<string name="set_save_changes">Save changes</string>
<string name="set_header_picture_overlay">Choose a header picture</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="set_automatically_split_toot">Automatically split toots in replies when chars are over:</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_time_from">Between</string>
@ -387,10 +387,9 @@
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push notifications</string>
<string name="settings_popup_message">"
Please, confirm push notifications that you want to receive.
<string name="settings_popup_message"> Please, confirm push notifications that you want to receive.
You can enable or disable these notifications later in settings (Notifications tab).
"</string>
</string>
<string name="settings_popup_timeline">For unread toots in home time-line?</string>
<string name="settings_popup_notification">For unread notifications?</string>
<!-- CACHE -->
@ -427,44 +426,38 @@
<string name="owner_cached_toots_empty">No toots were found in database. Please, use the synchronize button from the menu to retrieve them.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Recorded data</string>
<string name="privacy_data">"
Only basic information from accounts are stored on the device.
<string name="privacy_data"> Only basic information from accounts are stored on the device.
These data are strictly confidential and can only be used by the application.
Deleting the application immediately removes these data.\n
&#9888; Login and passwords are never stored. They are only used during a secure authentication (SSL) with an instance.
"</string>
</string>
<string name="privacy_authorizations_title">Permissions:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: Used to detect if the device is connected to a WIFI network.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: Used to detect if the device is connected to a WIFI network.\n
- <b>INTERNET</b>: Used for queries to an instance.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: Used to store media or to move the app on a SD card.\n
- <b>READ_EXTERNAL_STORAGE</b>: Used to add media to toots.\n
- <b>BOOT_COMPLETED</b>: Used to start the notification service.\n
- <b>WAKE_LOCK</b>: Used during the notification service.
"</string>
</string>
<string name="privacy_API_authorizations_title">API permissions:</string>
<string name="privacy_API_authorizations">"
- <b>Read</b>: Read data.\n
<string name="privacy_API_authorizations"> - <b>Read</b>: Read data.\n
- <b>Write</b>: Post statuses and upload media for statuses.\n
- <b>Follow</b>: Follow, unfollow, block, unblock.\n\n
<b>&#9888; These actions are carried out only when user requests them.</b>
"</string>
</string>
<string name="privacy_API_title">Tracking and Libraries</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
<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
"</string>
</string>
<string name="privacy_API_yandex_title">Translation of toots</string>
<string name="privacy_API_yandex_authorizations">"
The application offers the ability to translate toots using the locale of the device and the Yandex API.\n
<string name="privacy_API_yandex_authorizations"> The application offers the ability to translate toots using the locale of the device and the Yandex API.\n
Yandex has its proper privacy-policy which can be found here: https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
Thank you to:
"</string>
</string>
<string name="thanks_text_dev"> Thank you to:
</string>
<string name="filter_regex">Filter out by regular expressions</string>
<string name="search">Search</string>
<string name="delete">Delete</string>
@ -485,14 +478,13 @@
<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="issue_login_message">"
<b>Here are some checks that might help:</b>\n\n
<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 GitLab at https://gitlab.com/tom79/mastalab/issues
"</string>
</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>
@ -678,17 +670,14 @@
<item>1 day</item>
<item>1 week</item>
</string-array>
<string name="showcase_instance">"
In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
<string name="showcase_instance"> In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
You can start writing first letters and names will be suggested.\n\n
⚠ The Login button will only work if the instance name is valid and the instance is up!
"</string>
<string name="showcase_uid">"
In this field, write the email that is attached to your Mastodon account.
"</string>
<string name="showcase_pwd">"
Last step is to enter your password and click on Login.
"</string>
</string>
<string name="showcase_uid"> In this field, write the email that is attached to your Mastodon account.
</string>
<string name="showcase_pwd"> Last step is to enter your password and click on Login.
</string>
<string name="more_information">More information</string>
<string name="showcase_2FA">If you use 2FA (Two-factor authentication), you need to use this link.\nYou can also use it if you do not want to enter your credentials here.</string>
<!-- languages not translated -->
@ -709,6 +698,7 @@
<string name="some_words_any">Any of these words (space-separated)</string>
<string name="some_words_all">All these words (space-separated)</string>
<string name="some_words_none">None of these words (space-separated)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Change column name</string>
<string name="no_misskey_instance">No Misskey instances</string>
<string name="misskey_instance">Misskey instance</string>
@ -853,6 +843,9 @@
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d vote</item>
<item quantity="other">%d votes</item>

View File

@ -387,15 +387,14 @@
<string name="set_resize_picture">Bildgröße verändern</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push Benachrichtigungen</string>
<string name="settings_popup_message">"
Bitte bestätige welche Push Benachrichtigungen du erhalten möchtest. Diese können später im Benachrichtungsreiter aktiviert oder deaktiviert werden. "</string>
<string name="settings_popup_message">Bitte bestätige welche Push Benachrichtigungen du erhalten möchtest. Diese können später im Benachrichtungsreiter aktiviert oder deaktiviert werden. </string>
<string name="settings_popup_timeline">Für ungelesene Toots auf der Startleiste?</string>
<string name="settings_popup_notification">Für ungelesene Benachrichtigungen?</string>
<!-- CACHE -->
<string name="cache_title">Speicher leeren</string>
<string name="cache_message">"Es sind %1$s Daten im Speicher.\n
<string name="cache_message">Es sind %1$s Daten im Speicher.\n
\n
Möchtest du diese löschen?"</string>
Möchtest du diese löschen?</string>
<string name="cache_units">MB</string>
<string name="toast_cache_clear">Speicher wurde geleert! %1$s wurden freigeben</string>
<!-- ACTIVITY CUSTOM SHARING -->
@ -427,35 +426,31 @@ Bitte bestätige welche Push Benachrichtigungen du erhalten möchtest. Diese kö
<string name="owner_cached_toots_empty">Keine Toots in der Datenbank gefunden. Drücke oben auf den Synchronisierungsknopf um sie abzurufen.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Aufgezeichnete Daten</string>
<string name="privacy_data">"
Auf dem Gerät werden nur allgemeine Informationen aus den Konten gespeichert.
<string name="privacy_data">Auf dem Gerät werden nur allgemeine Informationen aus den Konten gespeichert.
Diese Daten sind streng vertraulich und können nur von der Anwendung verwendet werden.
Durch das Löschen der Anwendung werden diese Daten sofort entfernt.\n
&#9888; Anmeldedaten und Passwörter werden nie gespeichert. Sie werden nur bei einer sicheren Authentifizierung (SSL) mit einer Instanz verwendet."</string>
&#9888; Anmeldedaten und Passwörter werden nie gespeichert. Sie werden nur bei einer sicheren Authentifizierung (SSL) mit einer Instanz verwendet.</string>
<string name="privacy_authorizations_title">Berechtigungen:</string>
<string name="privacy_authorizations">"- <b>ACCESS_NETWORK_STATE</b>: Erkennen von bestehenden Verbindungen zu WIFI Netzwerken.\n
<string name="privacy_authorizations">- <b>ACCESS_NETWORK_STATE</b>: Erkennen von bestehenden Verbindungen zu WIFI Netzwerken.\n
- <b>INTERNET</b>: Genutzt für Anfragen an eine Instanz.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: Dateien speichern oder App auf SD Karte verschieben.\n
- <b>READ_EXTERNAL_STORAGE</b>: Dateianhänge für toots.\n
- <b>BOOT_COMPLETED</b>: Benachrichtigungsdienst starten.\n
- <b>WAKE_LOCK</b>: Benachrichtigungsdienst."</string>
- <b>WAKE_LOCK</b>: Benachrichtigungsdienst.</string>
<string name="privacy_API_authorizations_title">API Berechtigungen:</string>
<string name="privacy_API_authorizations">"
<b>Lesen</b>: Daten lesen.\n
<string name="privacy_API_authorizations"><b>Lesen</b>: Daten lesen.\n
<b>Schreiben</b>: Beiträge veröffentlichen und Dateien hochladen.\n
<b>Folgen</b>: Folgen, nicht mehr folgen, blockieren, nicht mehr blockieren.\n\n
<b>&#9888; Diese Aktionen werden nur auf Verlangen des Benutzers durchgeführt.</b> "</string>
<b>&#9888; Diese Aktionen werden nur auf Verlangen des Benutzers durchgeführt.</b> </string>
<string name="privacy_API_title">Tracking und Bibliotheken</string>
<string name="privacy_API">"
Die Anwendung <b>nutzt keine Trackingwergzeuge</b>(Zielgruppenbestimmung, Fehlerberichte, etc.) und enthält keinerlei Werbung.\n\n
<string name="privacy_API">Die Anwendung <b>nutzt keine Trackingwergzeuge</b>(Zielgruppenbestimmung, Fehlerberichte, etc.) und enthält keinerlei Werbung.\n\n
Die Nutzung von Bibliotheken ist minimiert:\n
-<b>Glide</b>: Medien verwalten\n
-<b>Android-Job</b>: Dienste verwalten\n
-<b>PhotoView</b>: Bilder verwalten\n
"</string>
</string>
<string name="privacy_API_yandex_title">Übersetzen von Toots</string>
<string name="privacy_API_yandex_authorizations">"
Die Anwendung bietet die Möglichkeit, Toots mit Hilfe des Gebietsschemas des Geräts und der Yandex-API zu übersetzen.\nYandex verfügt über eine eigene Datenschutzrichtlinie, die Sie hier finden können: https://yandex.ru/legal/confidential/?lang=en"</string>
<string name="privacy_API_yandex_authorizations">Die Anwendung bietet die Möglichkeit, Toots mit Hilfe des Gebietsschemas des Geräts und der Yandex-API zu übersetzen.\nYandex verfügt über eine eigene Datenschutzrichtlinie, die Sie hier finden können: https://yandex.ru/legal/confidential/?lang=en</string>
<string name="thanks_text_dev">Danke an:</string>
<string name="filter_regex">Mit regulären Ausdrücken filtern</string>
<string name="search">Suche</string>
@ -477,13 +472,12 @@ Die Anwendung bietet die Möglichkeit, Toots mit Hilfe des Gebietsschemas des Ge
<string name="account_moved_to">%1$s wurde verschoben nach %2$s</string>
<string name="show_boost_count">Zeige Anzahl für geteilt/favorisiert</string>
<string name="issue_login_title">Authentifizierung funktioniert nicht?</string>
<string name="issue_login_message">"
<b>Hier sind einige Vorschläge die helfen könnten:</b>\n\n
<string name="issue_login_message"><b>Hier sind einige Vorschläge die helfen könnten:</b>\n\n
- Prüfe ob der Instanzname richtig geschrieben ist\n\n
- Prüfe ob die Instanz online ist\n\n
- Benutze den Link unten falls du Zweifaktor-Authentifizierung (2FA) nutzt (nachdem der Instanzname eingetragen wurde)\n\n
- Du kannst diesen Link auch ohne 2FA benutzen\n\n
- Erstelle ein issue bei Github falls es dennoch nicht funktioniert: https://github.com/stom79/mastalab/issues "</string>
- Erstelle ein issue bei Github falls es dennoch nicht funktioniert: https://github.com/stom79/mastalab/issues </string>
<string name="media_ready">Media wurde geladen. Hier klicken zum anzeigen.</string>
<string name="data_export_start">Diese Aktion kann sehr lange dauern. Du wirst benachrichtigt wenn sie abgeschlossen wurde.</string>
<string name="data_export_running">Läuft noch, bitte warten…</string>
@ -669,15 +663,12 @@ Die Anwendung bietet die Möglichkeit, Toots mit Hilfe des Gebietsschemas des Ge
<item>1 Tag</item>
<item>1 Woche</item>
</string-array>
<string name="showcase_instance">"
In diesem Feld müssen Sie Ihren Instanz-Hostnamen eingeben.\nWenn Sie zum Beispiel ein Konto auf https://mastodon.social erstellt haben\nschreiben Sie einfach <b>mastodon.social</b> (ohne https://)\n
<string name="showcase_instance">In diesem Feld müssen Sie Ihren Instanz-Hostnamen eingeben.\nWenn Sie zum Beispiel ein Konto auf https://mastodon.social erstellt haben\nschreiben Sie einfach <b>mastodon.social</b> (ohne https://)\n
Sobald Sie die ersten Buchstaben eintippen, werden Namensvorschläge angezeigt\n\n
⚠ Die Schaltfläche „Anmelden” funktioniert nur, wenn der Instanzname gültig und die Instanz erreuchbar ist!"</string>
<string name="showcase_uid">"
Tragen Sie hier die E-Mail-Adresse ein, die mit ihrem Mastodon-Account verbunden ist. "</string>
<string name="showcase_pwd">"
Als letzten Schritt gib bitte dein Passwort ein und klicke auf Anmelden.
"</string>
⚠ Die Schaltfläche „Anmelden” funktioniert nur, wenn der Instanzname gültig und die Instanz erreuchbar ist!</string>
<string name="showcase_uid">Tragen Sie hier die E-Mail-Adresse ein, die mit ihrem Mastodon-Account verbunden ist. </string>
<string name="showcase_pwd">Als letzten Schritt gib bitte dein Passwort ein und klicke auf Anmelden.
</string>
<string name="more_information">Mehr Informationen</string>
<string name="showcase_2FA">Falls du 2FA (Zwei-Faktor-Authentisierung) verwendest, musst du diesen Link verwenden.\nDu kannst ihn ebenfalls verwenden, wenn du eine Zugangsdaten hier nicht eingeben möchtest.</string>
<!-- languages not translated -->
@ -698,6 +689,7 @@ Als letzten Schritt gib bitte dein Passwort ein und klicke auf Anmelden.
<string name="some_words_any">Eines dieser Wörter (durch Leerzeichen getrennt)</string>
<string name="some_words_all">Alle diese Wörter (durch Leerzeichen getrennt)</string>
<string name="some_words_none">Keines dieser Wörter (durch Leerzeichen getrennt)</string>
<string name="some_tags">Fügen Sie einige Wörter zum Filter hinzu (durch Leerzeichen getrennt)</string>
<string name="change_tag_column">Spaltenname ändern</string>
<string name="no_misskey_instance">Keine Misskey-Instanzen</string>
<string name="misskey_instance">Misskey Instanz</string>
@ -842,6 +834,9 @@ Als letzten Schritt gib bitte dein Passwort ein und klicke auf Anmelden.
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Zeitleisten in einer Liste anzeigen</string>
<string name="display_timeline">Zeitleisten anzeigen</string>
<string name="set_display_bot_icon">Bot-Konten als Toots kennzeichnen</string>
<string name="add_tags">Schlagwörter verwalten</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d Stimme</item>
<item quantity="other">%d Stimmen</item>

View File

@ -387,10 +387,9 @@
<string name="set_resize_picture">Προσαρμογή του μεγέθους των εικόνων</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Ειδοποιήσεις προωθήσεων</string>
<string name="settings_popup_message">"
Παρακαλώ, επιβεβαίωσε τις ειδοποιήσεις προωθήσεων, που θα ήθελες να λαμβάνεις.
<string name="settings_popup_message"> Παρακαλώ, επιβεβαίωσε τις ειδοποιήσεις προωθήσεων, που θα ήθελες να λαμβάνεις.
Μπορείς να ενεργοποιήσεις ή να απενεργοποιήσεις αυτές τις ειδοποιήσεις, αργότερα, στις ρυθμίσεις (στην καρτέλα Ειδοποιήσεων).
"</string>
</string>
<string name="settings_popup_timeline">Για τις μη διαβασμένες φωνές στην σπιτική χρονοστήλη;</string>
<string name="settings_popup_notification">Για τις μη διαβασμένες ειδοποιήσεις;</string>
<!-- CACHE -->
@ -427,44 +426,38 @@
<string name="owner_cached_toots_empty">Δεν βρέθηκαν φωνές στην βάση δεδομένων. Παρακαλώ, για να τις λάβεις, χρησιμοποίησε το πλήκτρο συγχρονισμού από τον κατάλογο των επιλογών.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Αρχειοθετημένα δεδομένα</string>
<string name="privacy_data">"
Στη συσκευή, αποθηκεύονται μόνο βασικές πληροφορίες των λογαριασμών.
<string name="privacy_data"> Στη συσκευή, αποθηκεύονται μόνο βασικές πληροφορίες των λογαριασμών.
Αυτά τα δεδομένα είναι αυστηρώς εμπιστευτικά, και μπορούν να χρησιμοποιηθούν μόνο από την εφαρμογή.
Η διαγραφή της εφαρμογής άμεσα απομακρύνει και αυτά τα δεδομένα.\n
&#9888; Ποτέ δεν αποθηκεύονται η σύνδεση και το συνθηματικό. Χρησιμοποιούνται μόνο κατά την ασφαλή ταυτοποίηση (SSL), με μία υπόσταση.
"</string>
</string>
<string name="privacy_authorizations_title">Δικαιώματα:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: Used to detect if the device is connected to a WIFI network.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: Used to detect if the device is connected to a WIFI network.\n
- <b>INTERNET</b>: Used for queries to an instance.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: Used to store media or to move the app on a SD card.\n
- <b>READ_EXTERNAL_STORAGE</b>: Used to add media to toots.\n
- <b>BOOT_COMPLETED</b>: Used to start the notification service.\n
- <b>WAKE_LOCK</b>: Used during the notification service.
"</string>
</string>
<string name="privacy_API_authorizations_title">Δικαιώματα API:</string>
<string name="privacy_API_authorizations">"
- <b>Read</b>: Read data.\n
<string name="privacy_API_authorizations"> - <b>Read</b>: Read data.\n
- <b>Write</b>: Post statuses and upload media for statuses.\n
- <b>Follow</b>: Follow, unfollow, block, unblock.\n\n
<b>&#9888; These actions are carried out only when user requests them.</b>
"</string>
</string>
<string name="privacy_API_title">Παρακολούθηση και Βιβλιοθήκες</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
<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
"</string>
</string>
<string name="privacy_API_yandex_title">Μετάφραση των φωνών</string>
<string name="privacy_API_yandex_authorizations">"
The application offers the ability to translate toots using the locale of the device and the Yandex API.\n
<string name="privacy_API_yandex_authorizations"> The application offers the ability to translate toots using the locale of the device and the Yandex API.\n
Yandex has its proper privacy-policy which can be found here: https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
Ευχαριστίες στους:
"</string>
</string>
<string name="thanks_text_dev"> Ευχαριστίες στους:
</string>
<string name="filter_regex">Απομάκρυνση σύμφωνα με τις κανονικές εκφράσεις</string>
<string name="search">Αναζήτηση</string>
<string name="delete">Διαγραφή</string>
@ -485,14 +478,13 @@
<string name="account_moved_to">Το %1$s έχει πάει στο %2$s</string>
<string name="show_boost_count">Εμφάνιση του μετρητή των ενισχυμένων και των αγαπημένων</string>
<string name="issue_login_title">Μήπως δεν δουλεύει η έλεγχος ταυτότητας;</string>
<string name="issue_login_message">"
<b>Here are some checks that might help:</b>\n\n
<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 GitLab at https://gitlab.com/tom79/mastalab/issues
"</string>
</string>
<string name="media_ready">Φορτώθηκε το πολυμέσο. Κλίκαρε εδώ για να προβληθεί.</string>
<string name="data_export_start">Αυτή η ενέργεια μπορεί να είναι χρονοβόρα. Θα ειδοποιηθείς, όταν θα ολοκληρωθεί.</string>
<string name="data_export_running">Ακόμη τρέχει· παρακαλώ, περίμενε…</string>
@ -678,17 +670,14 @@
<item>1 ημέρα</item>
<item>1 εβδομάδα</item>
</string-array>
<string name="showcase_instance">"
Σε αυτό το πεδίο, χρειάζεται να συμπληρώσεις το όνομα του οικοδεσπότη της υπόστασής σου.\nΓια παράδειγμα, αν δημιούργησες τον λογαριασμό σου στο https://mastodon.social\nΑπλά γράψε <b>mastodon.social</b> (χωρίς το https://)\n
<string name="showcase_instance"> Σε αυτό το πεδίο, χρειάζεται να συμπληρώσεις το όνομα του οικοδεσπότη της υπόστασής σου.\nΓια παράδειγμα, αν δημιούργησες τον λογαριασμό σου στο https://mastodon.social\nΑπλά γράψε <b>mastodon.social</b> (χωρίς το https://)\n
Μπορείς να ξεκινήσεις να γράφεις τα πρώτα γράμματα, και θα προταθούν ολόκληρες οι ονομασίες.\n\n
Το πλήκτρο Σύνδεσης λειτουργεί, μόνο όταν είναι έγκυρο το όνομα της υπόστασης, και είναι η υπόσταση σε λειτουργία!
"</string>
<string name="showcase_uid">"
Στο αυτό πεδίο, εισήγαγε το λογαριασμό του ηλεκτρονικού ταχυδρομείου, ο οποίος είναι συνδεμένος με το λογαριασμό σου στο Μαστόδοντο.
"</string>
<string name="showcase_pwd">"
Τα τελευταία βήματα, είναι η εισαγωγή του συνθηματικού, και το κλικάρισμα στη Σύνδεση.
"</string>
</string>
<string name="showcase_uid"> Στο αυτό πεδίο, εισήγαγε το λογαριασμό του ηλεκτρονικού ταχυδρομείου, ο οποίος είναι συνδεμένος με το λογαριασμό σου στο Μαστόδοντο.
</string>
<string name="showcase_pwd"> Τα τελευταία βήματα, είναι η εισαγωγή του συνθηματικού, και το κλικάρισμα στη Σύνδεση.
</string>
<string name="more_information">Περισσότερες πληροφορίες</string>
<string name="showcase_2FA">Αν χρησιμοποιείς 2FA (έλεγχο ταυτότητας δύο παραγόντων), θα πρέπει να χρησιμοποιήσεις και αυτόν τον δεσμό.\nΕπίσης, μπορείς να τον χρησιμοποιήσεις, αν δεν θες να εισάγεις, εδώ, τα διαπιστευτήριά σου.</string>
<!-- languages not translated -->
@ -709,6 +698,7 @@
<string name="some_words_any">Με οποιαδήποτε από αυτές τις λέξεις (διαχωρισμένες με κενά)</string>
<string name="some_words_all">Με όλες αυτές τις λέξεις (διαχωρισμένες με κενά)</string>
<string name="some_words_none">Με καμία από αυτές τις λέξεις (διαχωρισμένες με κενά)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Αλλαγή του ονόματος της στήλης</string>
<string name="no_misskey_instance">Καμία υπόσταση Misskey</string>
<string name="misskey_instance">Υπόσταση Misskey</string>
@ -853,6 +843,9 @@
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d vote</item>
<item quantity="other">%d ψήφοι</item>

View File

@ -387,9 +387,8 @@
<string name="set_resize_picture">Redimensionar imágenes</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Notificaciones Push</string>
<string name="settings_popup_message">"
Por favor, confirma notificaciones push que quieres recibir.
Tú puede activar o desactivar esas notificaciones después en configuración (pestaña de notificaciones). "</string>
<string name="settings_popup_message">Por favor, confirma notificaciones push que quieres recibir.
Tú puede activar o desactivar esas notificaciones después en configuración (pestaña de notificaciones). </string>
<string name="settings_popup_timeline">¿Para toots no leídos en el timeline del inicio?</string>
<string name="settings_popup_notification">¿Para notificaciones sin leer?</string>
<!-- CACHE -->
@ -426,41 +425,35 @@ Tú puede activar o desactivar esas notificaciones después en configuración (p
<string name="owner_cached_toots_empty">No toots fueron encontrados en la base de datos. Por favor, utilice el botón de sincronizar de el menú para recuperarlos.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Data grabada</string>
<string name="privacy_data">"
Solo la información básica de las cuentas son guardadas en el dispositivo.
<string name="privacy_data">Solo la información básica de las cuentas son guardadas en el dispositivo.
Esa data es estrictamente confidencial y solo puede ser usada por la aplicación.
Al borrar la aplicación inmediatamente elimina esa data.\n
&#9888; Usuario y contraseñas nunca son guardados. Estos son solo usados durante la autenticación de seguridad (SSL) con una instancia.
"</string>
</string>
<string name="privacy_authorizations_title">Permisos:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: Usado para detectar si el dispositivo esta conectado a una red WI-Fi.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: Usado para detectar si el dispositivo esta conectado a una red WI-Fi.\n
- <b>INTERNET</b>: Usado por para una instancia.\n
- <b>ESCRIBIR_ALMACENAMIENTO_EXTERNO</b>: Usado para almacenar contenido multimedia o para mover la aplicación a una tarjeta SD.\n
- <b>LEER_ALMACENAMIENTO_EXTERNO</b>: Usado para agregar contenido multimedia a toots.\n
- <b>INICIO_COMPLETADO</b>: Usado para iniciar servicios de notificación.\n
- <b>WAKE_LOCK</b>: Usado para notificación de servicio. "</string>
- <b>WAKE_LOCK</b>: Usado para notificación de servicio. </string>
<string name="privacy_API_authorizations_title">Permisos API:</string>
<string name="privacy_API_authorizations">"
- <b>Leer</b>: Leer data.\n
<string name="privacy_API_authorizations">- <b>Leer</b>: Leer data.\n
- <b>Escribir</b>: Publicar estados y subir contenido multimedia para estados.\n
- <b>Follow</b>: Seguir, dejar de seguir, bloquear, desbloquear.\n\n
<b>&#9888; Esas acciones son llevadas solo cuando el usuario lo pida</b>
"</string>
</string>
<string name="privacy_API_title">Rastreadores y librerías</string>
<string name="privacy_API">"
La aplicación <b>no usa herramientas de rastreo</b> (medidores de audiencia, reportadores de error, entre otro) y no contiene ninguna publicidad.\n\n
<string name="privacy_API">La aplicación <b>no usa herramientas de rastreo</b> (medidores de audiencia, reportadores de error, entre otro) y no contiene ninguna publicidad.\n\n
El uso de librerías es minimizado:\n
-<b>Glide</b>: Para gestionar media\n
-<b>Android-Job</b>: Para gestionar servicios\n
<b>PhotoView</b> Para gestionar imágenes\n "</string>
<b>PhotoView</b> Para gestionar imágenes\n </string>
<string name="privacy_API_yandex_title">Traducción de los toots</string>
<string name="privacy_API_yandex_authorizations">"
La aplicación ofrece la habilidad de traducir toots usando la localización del dipositivo y el Yandex API\n
<string name="privacy_API_yandex_authorizations">La aplicación ofrece la habilidad de traducir toots usando la localización del dipositivo y el Yandex API\n
Yandex tine su propia política de privacidad la cual puede ser encontrada aquí:
https://yandex.ru/legal/confidential/?lang=en "</string>
<string name="thanks_text_dev">"
Gracias a: "</string>
https://yandex.ru/legal/confidential/?lang=en </string>
<string name="thanks_text_dev">Gracias a: </string>
<string name="filter_regex">Filtrar por expresiones regulares</string>
<string name="search">Buscar</string>
<string name="delete">Eliminar</string>
@ -481,13 +474,12 @@ Gracias a: "</string>
<string name="account_moved_to">%1$s se ha movido a %2$s</string>
<string name="show_boost_count">Mostrar contador de retoots/favoritos</string>
<string name="issue_login_title">¿No funciona la autenticación?</string>
<string name="issue_login_message">"
<b>Aquí hay una lista de vistos que pueden ayudar </b>\n\n
<string name="issue_login_message"><b>Aquí hay una lista de vistos que pueden ayudar </b>\n\n
-Revisa que no hay ningún error de escritura en la instancia del nombre \n\n
-Revisa que tu instancia no está caída \n\n
-Si tu usas el factor de autenticación de dos pasos (2FA), por favor usa el link al pie (una vez que el nombre de la instancia esta lleno) \n\n
-Puedes usar también este link sin usar el \"Fa \n\n
-Si eso todavía no funciona, por favor notifica el problema en Github https://github.com/stom79/mastalab/issues "</string>
-Si eso todavía no funciona, por favor notifica el problema en Github https://github.com/stom79/mastalab/issues </string>
<string name="media_ready">Se ha cargado el archivo. Haz clic aquí para mostrarlo.</string>
<string name="data_export_start">Este proceso puede ser bastante largo. Recibirás una notificación cuando esté finalizado.</string>
<string name="data_export_running">Todavía en curso, por favor espera…</string>
@ -673,16 +665,13 @@ Gracias a: "</string>
<item>1 día</item>
<item>1 semana</item>
</string-array>
<string name="showcase_instance">"
En este campo, debe escribir el nombre de host de su instancia. \ Npor ejemplo, si creó su cuenta en https: //mastodon.social \ nSólo escriba <b> mastodon.social </b> (sin https: //) \norte
<string name="showcase_instance">En este campo, debe escribir el nombre de host de su instancia. \ Npor ejemplo, si creó su cuenta en https: //mastodon.social \ nSólo escriba <b> mastodon.social </b> (sin https: //) \norte
         Puede comenzar a escribir las primeras letras y se sugerirán los nombres. \ N \ n
         ⚠ El botón Iniciar sesión solo funcionará si el nombre de la instancia es válido y la instancia está activa! "</string>
<string name="showcase_uid">"
En este campo, escriba el correo electrónico que está conectado a tu cuenta de Mastodon.
"</string>
<string name="showcase_pwd">"
Último paso es introducir su contraseña y haga clic en Inicio de sesión.
"</string>
         ⚠ El botón Iniciar sesión solo funcionará si el nombre de la instancia es válido y la instancia está activa! </string>
<string name="showcase_uid"> En este campo, escriba el correo electrónico que está conectado a tu cuenta de Mastodon.
</string>
<string name="showcase_pwd"> Último paso es introducir su contraseña y haga clic en Inicio de sesión.
</string>
<string name="more_information">Más información</string>
<string name="showcase_2FA">Si utilizas 2FA (autenticación de dos factores), es necesario utilizar este enlace. \nTu también puedes utilizarlo si no deseas ingresar tus credenciales aquí.</string>
<!-- languages not translated -->
@ -703,6 +692,7 @@ En este campo, debe escribir el nombre de host de su instancia. \ Npor ejemplo,
<string name="some_words_any">Cualquiera de estas palabras (separados por espacios)</string>
<string name="some_words_all">Todas estas palabras (separados por espacios)</string>
<string name="some_words_none">Ninguna de estas palabras (separados por espacios)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Cambiar nombre de columna</string>
<string name="no_misskey_instance">No hay instancias Misskey</string>
<string name="misskey_instance">Instancia Misskey</string>
@ -847,6 +837,9 @@ En este campo, debe escribir el nombre de host de su instancia. \ Npor ejemplo,
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d vote</item>
<item quantity="other">%d votes</item>

View File

@ -6,7 +6,7 @@
<string name="action_about">Honi buruz</string>
<string name="action_about_instance">Instantziari buruz</string>
<string name="action_privacy">Pribatutasuna</string>
<string name="action_cache">Cache-a</string>
<string name="action_cache">Cachea</string>
<string name="action_logout">Amaitu saioa</string>
<string name="login">Hasi saioa</string>
<!-- common -->
@ -387,10 +387,9 @@
<string name="set_resize_picture">Aldatu irudien tamaina</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push jakinarazpenak</string>
<string name="settings_popup_message">"
Berretsi jaso nahi dituzun push jakinarazpenak.
<string name="settings_popup_message"> Berretsi jaso nahi dituzun push jakinarazpenak.
Jakinarazpen hauek gero ezarpenetan aktibatu edo desaktibatu ditzakezu (Jakinarazpenak fitxa).
"</string>
</string>
<string name="settings_popup_timeline">Irakurri gabeko toot-ak hasiera denbora-lerroan?</string>
<string name="settings_popup_notification">Irakurri gabeko jakinarazpenentzat?</string>
<!-- CACHE -->
@ -427,44 +426,38 @@
<string name="owner_cached_toots_empty">Ez da toot-ik aurkitu datu-basean. Erabili menuko sinkronizatu botoia eskuratzeko.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Grabatutako datuak</string>
<string name="privacy_data">"
Kontuen oinarrizko informazioa besterik ez da gordetzen gailuetan
<string name="privacy_data"> Kontuen oinarrizko informazioa besterik ez da gordetzen gailuetan
Datu hauek guztiz konfidentzialak dira eta bakarrik aplikazioak erabili ditzake.
Aplikazioa ezabatzean datu hauek ere ezabatzen dira.\n
&#9888; Saioa eta pasahitzak ez dira inoiz gordetzen. Instantzia batekin autentifikazio segurua (SSL) ezartzean besterik ez dira erabiltzen.
"</string>
</string>
<string name="privacy_authorizations_title">Baimenak:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: Gailua WIFI sare batera konektatuta dagoen egiaztatzeko erabiltzen da.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: Gailua WIFI sare batera konektatuta dagoen egiaztatzeko erabiltzen da.\n
- <b>INTERNET</b>: Instantzia bati itaunketak egiteko erabiltzen da.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: Multimedia gordetzeko edo aplikazioa SD txartelera eramateko erabiltzen da.\n
- <b>READ_EXTERNAL_STORAGE</b>: Toot-etara multimedia gehitzeko erabilytzen da.\n
- <b>BOOT_COMPLETED</b>: Jakinarazpen zerbitzua abiatzeko erabiltzen da.\n
- <b>WAKE_LOCK</b>: Jakinarazpen zerbitzuan zehar erabiltzen da.
"</string>
</string>
<string name="privacy_API_authorizations_title">APIaren baimenak:</string>
<string name="privacy_API_authorizations">"
- <b>Irakurri</b>: Irakurri datuak.\n
<string name="privacy_API_authorizations"> - <b>Irakurri</b>: Irakurri datuak.\n
- <b>Idatzi</b>: Bidali mezuak eta igo mezuetarako multimedia.\n
- <b>Jarraitu</b>: Jarraitu, jarraitzeari utzi, blokeatu, desblokeatu.\n\n
<b>&#9888; Ekintza hauek erabiltzaileak eskatuta besterik ez dira burutzen.</b>
"</string>
</string>
<string name="privacy_API_title">Jarraipena eta liburutegiak</string>
<string name="privacy_API">"
Aplikazioak <b>ez du jarraipen tresnarik erabiltzen</b> (audientziaren neurria, erroreen jakinarazpena, eta abar.) eta ez du publizitaterik.\n\n
<string name="privacy_API"> Aplikazioak <b>ez du jarraipen tresnarik erabiltzen</b> (audientziaren neurria, erroreen jakinarazpena, eta abar.) eta ez du publizitaterik.\n\n
Liburutegien erabilera minimizatu da: \n
- <b>Glide</b>: Multimedia kudeatzeko\n
- <b>Android-Job</b>: Zerbitzuak kudeatzeko\n
- <b>PhotoView</b>: Irudiak kudeatzeko\n
"</string>
</string>
<string name="privacy_API_yandex_title">Toot-en itzulpena</string>
<string name="privacy_API_yandex_authorizations">"
Aplikazioak ttot-ak itzultzeko aukera ematen du gailuaren locale eta Yandex API-a erabiliz.\n
<string name="privacy_API_yandex_authorizations"> Aplikazioak ttot-ak itzultzeko aukera ematen du gailuaren locale eta Yandex API-a erabiliz.\n
Yandex-ek bere pribatutasun politika du eta hemen aurkitu daiteke: https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
Eskerrik asko:
"</string>
</string>
<string name="thanks_text_dev"> Eskerrik asko:
</string>
<string name="filter_regex">Iragazi adierazpen erregularrak erabiliz</string>
<string name="search">Bilatu</string>
<string name="delete">Ezabatu</string>
@ -485,14 +478,13 @@
<string name="account_moved_to">%1$s %2$s(e)ra mugitu da</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
<string name="issue_login_message"> <b>Hona lagundu dezaketen egiaztaketa batzuk:</b>\n\n
- Egiaztatu ez dagoela akatsik instantziaren izenean\n\n
- Egiaztatu instantzia ez dagoela erorita\n\n
- Bi faktoreetako autentifikazioa erabiltzen baduzu (2FA), erabili beheko esteka (behin instantziaren izena bete eta gero)\n\n
- Esteka hori erabili dezakezu 2FA erabiltzen ez baduzu ere\n\n
- Oraindik ez badabil, ireki arazo bat Github kontu honetan https://github.com/stom79/mastalab/issues
"</string>
</string>
<string name="media_ready">Multimedia kargatu da. Egin klik hemen berau bistaratzeko.</string>
<string name="data_export_start">Ekintza honek denbora behar dezake. Bukatzean jakinaraziko zaizu.</string>
<string name="data_export_running">Oraindik abian, itxaron mesedez…</string>
@ -678,16 +670,13 @@
<item>egun 1</item>
<item>aste 1</item>
</string-array>
<string name="showcase_instance">"
Eremu honetan, zure instantziaren hostalari izena idatzi behar duzu.\nAdibidez, zure kontua https://mastodon.eus helbidean sortu baduzu\nIdatzi <b>mastodon.eus</b> (https:// gabe)\n
<string name="showcase_instance"> Eremu honetan, zure instantziaren hostalari izena idatzi behar duzu.\nAdibidez, zure kontua https://mastodon.eus helbidean sortu baduzu\nIdatzi <b>mastodon.eus</b> (https:// gabe)\n
Idazten hasi zaitezke eta izenak proposatuko zaizkizu.\n\n
⚠ Hasi saioa botoiak instantzia baliogarria bada eta funtzionamenduan badago funtzionatuko du, bestela ez!
"</string>
<string name="showcase_uid">"
Eremu honetan, idatzi zure Mastodon kontura lotutako e-mail helbidea.
"</string>
<string name="showcase_pwd">"
Azken urratsa zure pasahitza sartzea da eta Hasi saioa botoia sakatzea. "</string>
</string>
<string name="showcase_uid"> Eremu honetan, idatzi zure Mastodon kontura lotutako e-mail helbidea.
</string>
<string name="showcase_pwd">Azken urratsa zure pasahitza sartzea da eta Hasi saioa botoia sakatzea. </string>
<string name="more_information">Informazio gehiago</string>
<string name="showcase_2FA">2FA (bi faktoreetako autentifikazioa) erabiltzen baduzu, esteka hau erabili behar duzu.\nHemen zure kredentzialak sartu nahi ez badituzu erabili dezakezu baita ere.</string>
<!-- languages not translated -->
@ -708,6 +697,7 @@ Azken urratsa zure pasahitza sartzea da eta Hasi saioa botoia sakatzea. "</st
<string name="some_words_any">Hitz hauetako edozein (zuriunez banatuta)</string>
<string name="some_words_all">Hitz hauek guztiak (zuriunez banatuta)</string>
<string name="some_words_none">Hitz hauetako bat ere ez (zuriunez banatuta)</string>
<string name="some_tags">Gehitu iragazi beharreko hitzak (zuriuneekin bereizita)</string>
<string name="change_tag_column">Aldatu zutabearen izena</string>
<string name="no_misskey_instance">Misskey instantziarik ez</string>
<string name="misskey_instance">Misskey instantzia</string>
@ -834,9 +824,9 @@ Azken urratsa zure pasahitza sartzea da eta Hasi saioa botoia sakatzea. "</st
<string name="move_timeline">Aldatu denbora-lerroa lekuz</string>
<string name="hide_timeline">Ezkutatu denbora-lerroa</string>
<string name="reorder_timelines">Antolatu denbora-lerroak</string>
<string name="reorder_list_deleted">List permanently deleted</string>
<string name="reorder_instance_removed">Followed instance removed</string>
<string name="reorder_tag_removed">Pinned tag removed</string>
<string name="reorder_list_deleted">Zerrenda behin betiko ezabatuta</string>
<string name="reorder_instance_removed">Jarraitutako instantzia kenduta</string>
<string name="reorder_tag_removed">Finkatutako etiketa kenduta</string>
<string name="undo">Desegin</string>
<string name="visible_tabs_needed">Bi fitxa ikusgai mantendu behar dituzu!</string>
<string name="action_reorder_timeline">Antolatu denbora-lerroak</string>
@ -845,13 +835,16 @@ Azken urratsa zure pasahitza sartzea da eta Hasi saioa botoia sakatzea. "</st
<string name="action_bbcode">BBCode</string>
<string name="add_timeline">Gehitu denbora-lerro bat</string>
<string name="set_sensitive_content">Beti markatu multimedia mingarri gisa</string>
<string name="gnu_instance">GNU instance</string>
<string name="cached_status">Cached status</string>
<string name="set_forward_tags">Forward tags in replies</string>
<string name="set_long_press_media">Long press to store media</string>
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="gnu_instance">GNU instantzia</string>
<string name="cached_status">Cacheatutako mezua</string>
<string name="set_forward_tags">Birbidali etiketak erantzunetan</string>
<string name="set_long_press_media">Sakatu luze multimedia gordetzeko</string>
<string name="set_blur_sensitive">Lausotu multimedia hunkigarria</string>
<string name="set_display_timeline_in_list">Bistaratu denbora-lerroak zerrenda batean</string>
<string name="display_timeline">Bistaratu denbora-lerroak</string>
<string name="set_display_bot_icon">Markatu bot kontuak toot-etan</string>
<string name="add_tags">Kudeatu etiketak</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">boto %d</item>
<item quantity="other">%d boto</item>

View File

@ -320,7 +320,7 @@
<string name="set_save_changes">Save changes</string>
<string name="set_header_picture_overlay">Choose a header picture</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="set_automatically_split_toot">Automatically split toots in replies when chars are over:</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_time_from">Between</string>
@ -387,10 +387,9 @@
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push notifications</string>
<string name="settings_popup_message">"
Please, confirm push notifications that you want to receive.
<string name="settings_popup_message"> Please, confirm push notifications that you want to receive.
You can enable or disable these notifications later in settings (Notifications tab).
"</string>
</string>
<string name="settings_popup_timeline">For unread toots in home time-line?</string>
<string name="settings_popup_notification">For unread notifications?</string>
<!-- CACHE -->
@ -427,44 +426,38 @@
<string name="owner_cached_toots_empty">No toots were found in database. Please, use the synchronize button from the menu to retrieve them.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Recorded data</string>
<string name="privacy_data">"
Only basic information from accounts are stored on the device.
<string name="privacy_data"> Only basic information from accounts are stored on the device.
These data are strictly confidential and can only be used by the application.
Deleting the application immediately removes these data.\n
&#9888; Login and passwords are never stored. They are only used during a secure authentication (SSL) with an instance.
"</string>
</string>
<string name="privacy_authorizations_title">Permissions:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: Used to detect if the device is connected to a WIFI network.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: Used to detect if the device is connected to a WIFI network.\n
- <b>INTERNET</b>: Used for queries to an instance.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: Used to store media or to move the app on a SD card.\n
- <b>READ_EXTERNAL_STORAGE</b>: Used to add media to toots.\n
- <b>BOOT_COMPLETED</b>: Used to start the notification service.\n
- <b>WAKE_LOCK</b>: Used during the notification service.
"</string>
</string>
<string name="privacy_API_authorizations_title">API permissions:</string>
<string name="privacy_API_authorizations">"
- <b>Read</b>: Read data.\n
<string name="privacy_API_authorizations"> - <b>Read</b>: Read data.\n
- <b>Write</b>: Post statuses and upload media for statuses.\n
- <b>Follow</b>: Follow, unfollow, block, unblock.\n\n
<b>&#9888; These actions are carried out only when user requests them.</b>
"</string>
</string>
<string name="privacy_API_title">Tracking and Libraries</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
<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
"</string>
</string>
<string name="privacy_API_yandex_title">Translation of toots</string>
<string name="privacy_API_yandex_authorizations">"
The application offers the ability to translate toots using the locale of the device and the Yandex API.\n
<string name="privacy_API_yandex_authorizations"> The application offers the ability to translate toots using the locale of the device and the Yandex API.\n
Yandex has its proper privacy-policy which can be found here: https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
Thank you to:
"</string>
</string>
<string name="thanks_text_dev"> Thank you to:
</string>
<string name="filter_regex">Filter out by regular expressions</string>
<string name="search">Search</string>
<string name="delete">Delete</string>
@ -485,14 +478,13 @@
<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="issue_login_message">"
<b>Here are some checks that might help:</b>\n\n
<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 GitLab at https://gitlab.com/tom79/mastalab/issues
"</string>
</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>
@ -678,17 +670,14 @@
<item>1 day</item>
<item>1 week</item>
</string-array>
<string name="showcase_instance">"
In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
<string name="showcase_instance"> In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
You can start writing first letters and names will be suggested.\n\n
⚠ The Login button will only work if the instance name is valid and the instance is up!
"</string>
<string name="showcase_uid">"
In this field, write the email that is attached to your Mastodon account.
"</string>
<string name="showcase_pwd">"
Last step is to enter your password and click on Login.
"</string>
</string>
<string name="showcase_uid"> In this field, write the email that is attached to your Mastodon account.
</string>
<string name="showcase_pwd"> Last step is to enter your password and click on Login.
</string>
<string name="more_information">More information</string>
<string name="showcase_2FA">If you use 2FA (Two-factor authentication), you need to use this link.\nYou can also use it if you do not want to enter your credentials here.</string>
<!-- languages not translated -->
@ -709,6 +698,7 @@
<string name="some_words_any">Any of these words (space-separated)</string>
<string name="some_words_all">All these words (space-separated)</string>
<string name="some_words_none">None of these words (space-separated)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Change column name</string>
<string name="no_misskey_instance">No Misskey instances</string>
<string name="misskey_instance">Misskey instance</string>
@ -853,6 +843,9 @@
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d vote</item>
<item quantity="other">%d votes</item>

View File

@ -320,7 +320,7 @@
<string name="set_save_changes">Save changes</string>
<string name="set_header_picture_overlay">Choose a header picture</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="set_automatically_split_toot">Automatically split toots in replies when chars are over:</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_time_from">Between</string>
@ -387,10 +387,9 @@
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push notifications</string>
<string name="settings_popup_message">"
Please, confirm push notifications that you want to receive.
<string name="settings_popup_message"> Please, confirm push notifications that you want to receive.
You can enable or disable these notifications later in settings (Notifications tab).
"</string>
</string>
<string name="settings_popup_timeline">For unread toots in home time-line?</string>
<string name="settings_popup_notification">For unread notifications?</string>
<!-- CACHE -->
@ -427,44 +426,38 @@
<string name="owner_cached_toots_empty">No toots were found in database. Please, use the synchronize button from the menu to retrieve them.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Recorded data</string>
<string name="privacy_data">"
Only basic information from accounts are stored on the device.
<string name="privacy_data"> Only basic information from accounts are stored on the device.
These data are strictly confidential and can only be used by the application.
Deleting the application immediately removes these data.\n
&#9888; Login and passwords are never stored. They are only used during a secure authentication (SSL) with an instance.
"</string>
</string>
<string name="privacy_authorizations_title">Permissions:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: Used to detect if the device is connected to a WIFI network.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: Used to detect if the device is connected to a WIFI network.\n
- <b>INTERNET</b>: Used for queries to an instance.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: Used to store media or to move the app on a SD card.\n
- <b>READ_EXTERNAL_STORAGE</b>: Used to add media to toots.\n
- <b>BOOT_COMPLETED</b>: Used to start the notification service.\n
- <b>WAKE_LOCK</b>: Used during the notification service.
"</string>
</string>
<string name="privacy_API_authorizations_title">API permissions:</string>
<string name="privacy_API_authorizations">"
- <b>Read</b>: Read data.\n
<string name="privacy_API_authorizations"> - <b>Read</b>: Read data.\n
- <b>Write</b>: Post statuses and upload media for statuses.\n
- <b>Follow</b>: Follow, unfollow, block, unblock.\n\n
<b>&#9888; These actions are carried out only when user requests them.</b>
"</string>
</string>
<string name="privacy_API_title">Tracking and Libraries</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
<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
"</string>
</string>
<string name="privacy_API_yandex_title">Translation of toots</string>
<string name="privacy_API_yandex_authorizations">"
The application offers the ability to translate toots using the locale of the device and the Yandex API.\n
<string name="privacy_API_yandex_authorizations"> The application offers the ability to translate toots using the locale of the device and the Yandex API.\n
Yandex has its proper privacy-policy which can be found here: https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
Thank you to:
"</string>
</string>
<string name="thanks_text_dev"> Thank you to:
</string>
<string name="filter_regex">Filter out by regular expressions</string>
<string name="search">Search</string>
<string name="delete">Delete</string>
@ -485,14 +478,13 @@
<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="issue_login_message">"
<b>Here are some checks that might help:</b>\n\n
<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 GitLab at https://gitlab.com/tom79/mastalab/issues
"</string>
</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>
@ -678,17 +670,14 @@
<item>1 day</item>
<item>1 week</item>
</string-array>
<string name="showcase_instance">"
In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
<string name="showcase_instance"> In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
You can start writing first letters and names will be suggested.\n\n
⚠ The Login button will only work if the instance name is valid and the instance is up!
"</string>
<string name="showcase_uid">"
In this field, write the email that is attached to your Mastodon account.
"</string>
<string name="showcase_pwd">"
Last step is to enter your password and click on Login.
"</string>
</string>
<string name="showcase_uid"> In this field, write the email that is attached to your Mastodon account.
</string>
<string name="showcase_pwd"> Last step is to enter your password and click on Login.
</string>
<string name="more_information">More information</string>
<string name="showcase_2FA">If you use 2FA (Two-factor authentication), you need to use this link.\nYou can also use it if you do not want to enter your credentials here.</string>
<!-- languages not translated -->
@ -709,6 +698,7 @@
<string name="some_words_any">Any of these words (space-separated)</string>
<string name="some_words_all">All these words (space-separated)</string>
<string name="some_words_none">None of these words (space-separated)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Change column name</string>
<string name="no_misskey_instance">No Misskey instances</string>
<string name="misskey_instance">Misskey instance</string>
@ -853,6 +843,9 @@
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d vote</item>
<item quantity="other">%d votes</item>

View File

@ -387,10 +387,9 @@
<string name="set_resize_picture">Redimensionner les images</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Notifications poussées</string>
<string name="settings_popup_message">"
Veuillez confirmer les notifications que vous souhaitez recevoir.
<string name="settings_popup_message"> Veuillez confirmer les notifications que vous souhaitez recevoir.
Vous pourrez les activer ou les désactiver plus tard dans les paramètres (onglet Notifications).
"</string>
</string>
<string name="settings_popup_timeline">Pour les pouets non lus sur la page daccueil</string>
<string name="settings_popup_notification">Pour les notifications non lues ?</string>
<!-- CACHE -->
@ -427,43 +426,37 @@
<string name="owner_cached_toots_empty">Aucun pouet trouvé en base de données. Veuillez utiliser le bouton synchroniser du menu pour les importer.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Données enregistrées</string>
<string name="privacy_data">"
Seules les informations de base des comptes connectés sont enregistrées sur lappareil.
<string name="privacy_data"> Seules les informations de base des comptes connectés sont enregistrées sur lappareil.
Ces données sont strictement confidentielles et ne sont utilisables que par lapplication. La suppression de lapplication entraîne immédiatement la suppression de ces données.\n
&#9888; Les identifiants et les mots de passe ne sont jamais enregistrés, ils ne sont utilisés que lors de lauthentification sécurisée (SSL) vers linstance.
"</string>
</string>
<string name="privacy_authorizations_title">Autorisations de lapplication:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b> : Utilisée pour savoir si lappareil est connecté au WIFI.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b> : Utilisée pour savoir si lappareil est connecté au WIFI.\n
- <b>INTERNET</b> : Utilisée pour les requêtes vers linstance.\n
- <b>WRITE_EXTERNAL_STORAGE</b> : Utilisée pour télécharger les médias / déplacer sur la carte SD.\n
- <b>READ_EXTERNAL_STORAGE</b> : Utilisée pour ajouter des médias aux pouets.\n
- <b>BOOT_COMPLETED</b> : Utilisée pour lancer le service de notifications quand lappareil démarre.\n
- <b>WAKE_LOCK</b> : Utilisée lors du service de notifications.
"</string>
</string>
<string name="privacy_API_authorizations_title">Autorisations de lAPI:</string>
<string name="privacy_API_authorizations">"
- <b>Read</b>: Lire les données du compte.\n
<string name="privacy_API_authorizations"> - <b>Read</b>: Lire les données du compte.\n
- <b>Write</b>: Envoyer des messages et attacher des médias aux messages.\n
- <b>Follow</b>: Sabonner, se désabonner, bloquer, débloquer.\n\n
<b>&#9888; Ces actions ne sont réalisées quà la demande de lutilisateur·rice.</b>
"</string>
</string>
<string name="privacy_API_title">Suivi et bibliothèques</string>
<string name="privacy_API">"
Lapplication nutilise <b>aucun outil de suivi</b> (mesure d\'audience, rapport derreurs, etc.) et elle ne comporte aucune publicité.\n\n
<string name="privacy_API"> Lapplication nutilise <b>aucun outil de suivi</b> (mesure d\'audience, rapport derreurs, etc.) et elle ne comporte aucune publicité.\n\n
Lutilisation de bibliothèques est réduite au strict minimum :\n
- <b>Glid</b>: Pour la gestion des médias\n
- <b>Android-Job</b>: Pour la gestion des services\n
- <b>PhotoView</b>: Pour la gestion des images\n
"</string>
</string>
<string name="privacy_API_yandex_title">Traduction des pouets</string>
<string name="privacy_API_yandex_authorizations">"
Lapplication offre la possibilité de traduire les pouets en utilisant les paramètres régionaux de lappareil et lAPI de Yandex.\n
<string name="privacy_API_yandex_authorizations"> Lapplication offre la possibilité de traduire les pouets en utilisant les paramètres régionaux de lappareil et lAPI de Yandex.\n
Yandex a sa propre politique de confidentialité qui peut être consultée à l\'adresse suivante: https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
Merci à :
"</string>
</string>
<string name="thanks_text_dev"> Merci à :
</string>
<string name="filter_regex">Filtrer avec une expression régulière</string>
<string name="search">Rechercher</string>
<string name="delete">Supprimer</string>
@ -484,13 +477,12 @@
<string name="account_moved_to">%1$s a été déplacé vers %2$s</string>
<string name="show_boost_count">Afficher le nombre de partages/favoris</string>
<string name="issue_login_title">Problème de connexion ?</string>
<string name="issue_login_message">"
<b>Voici quelques vérifications qui pourraient aider:</b> \n\n
<string name="issue_login_message"><b>Voici quelques vérifications qui pourraient aider:</b> \n\n
- Vérifier quil ny a pas derreur dans le nom de linstance\n\n
- Vérifiez que votre instance est fonctionnelle\n\n
- Si vous utilisez lauthentification en deux étapes (2FA), veuillez utiliser le lien en bas (une fois le nom de linstance renseigné) \n\n
- Vous pouvez également utiliser ce lien sans utiliser la 2FA\n\n
- Si cela ne fonctionne toujours pas, vous pouvez reporter ce problème sur Github: https://github.com/stom79/mastalab/issues "</string>
- Si cela ne fonctionne toujours pas, vous pouvez reporter ce problème sur Github: https://github.com/stom79/mastalab/issues </string>
<string name="media_ready">Limage a été chargée. Cliquez ici pour lafficher.</string>
<string name="data_export_start">Cela peut être assez long. Vous serez notifié·e une fois lexportation finie.</string>
<string name="data_export_running">Exportation en cours, veuillez patienter…</string>
@ -676,16 +668,13 @@
<item>1 jour</item>
<item>1 semaine</item>
</string-array>
<string name="showcase_instance">"
Renseignez le nom de domaine de votre instance dans ce champs.\nPar exemple, si vous avez créé un compte sur https://mastodon.social\nécrivez simplement <b>mastodon.social</b>(sans le https://)\n
<string name="showcase_instance">Renseignez le nom de domaine de votre instance dans ce champs.\nPar exemple, si vous avez créé un compte sur https://mastodon.social\nécrivez simplement <b>mastodon.social</b>(sans le https://)\n
Commencez à saisir les premières lettres et des domaines vous seront suggérés. \n\n
Le bouton de connexion sactivera une fois quun domaine valide sera renseigné et que linstance est active ! "</string>
<string name="showcase_uid">"
Dans ce champs, saisissez ladresse de courrier relative à votre compte Mastodon et/ou Pleroma.
"</string>
<string name="showcase_pwd">"
Dernière étape consiste à saisir votre mot de passe puis cliquer sur «Connexion».
"</string>
Le bouton de connexion sactivera une fois quun domaine valide sera renseigné et que linstance est active ! </string>
<string name="showcase_uid"> Dans ce champs, saisissez ladresse de courrier relative à votre compte Mastodon et/ou Pleroma.
</string>
<string name="showcase_pwd"> Dernière étape consiste à saisir votre mot de passe puis cliquer sur «Connexion».
</string>
<string name="more_information">Plus dinformations</string>
<string name="showcase_2FA">Si vous utilisez 2FA (authentification à deux facteurs), vous devez utiliser ce lien. \nVous pouvez également lutiliser si vous ne souhaitez pas saisir vos identifiants ici.</string>
<!-- languages not translated -->
@ -706,6 +695,7 @@ Le bouton de connexion sactivera une fois quun domaine valide sera renseig
<string name="some_words_any">Nimporte lequel de ces mots (séparés par des espaces)</string>
<string name="some_words_all">Tous ces mots (séparés par des espaces)</string>
<string name="some_words_none">Aucun de ces mots (séparés par des espaces)</string>
<string name="some_tags">Ajouter quelques mots à filtrer (séparés par un espace)</string>
<string name="change_tag_column">Renommer la colonne</string>
<string name="no_misskey_instance">Aucune instance Misskey</string>
<string name="misskey_instance">Instance Misskey</string>
@ -848,8 +838,11 @@ Le bouton de connexion sactivera une fois quun domaine valide sera renseig
<string name="set_forward_tags">Transférer les tags dans les réponses</string>
<string name="set_long_press_media">Appui long pour stocker les médias</string>
<string name="set_blur_sensitive">Flouter les médias sensibles</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_timeline_in_list">Afficher les fils publics en liste</string>
<string name="display_timeline">Afficher les fils publics</string>
<string name="set_display_bot_icon">Marquer les comptes bot dans les pouets</string>
<string name="add_tags">Gestion des étiquettes</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d voix</item>
<item quantity="other">%d voix</item>

View File

@ -387,10 +387,9 @@
<string name="set_resize_picture">Escalar imaxes</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Notificacións Push</string>
<string name="settings_popup_message">"
Por favor, confirme cales son as notificacións push que quere recibir.
<string name="settings_popup_message">Por favor, confirme cales son as notificacións push que quere recibir.
Posteriormente pode activar ou desactivar estas notificacións en Axustes (pestana Notificacións).
"</string>
</string>
<string name="settings_popup_timeline">Para os toots non lidos no Inicio?</string>
<string name="settings_popup_notification">Para as notificacións non lidas?</string>
<!-- CACHE -->
@ -427,44 +426,38 @@ Por favor, confirme cales son as notificacións push que quere recibir.
<string name="owner_cached_toots_empty">Non se atoparon toots na base de datos. Por favor, utilice o botón de sincronización no menú para obtelos.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Datos gravados</string>
<string name="privacy_data">"
Só se garda no dispositivo a información básica das contas.
<string name="privacy_data">Só se garda no dispositivo a información básica das contas.
Estos datos son totalmente confidenciais e só poden ser utilizados pola aplicación.
Eliminando a aplicación eliminará inmediatamente estos datos.\n
&#9888; Usuario e Contrasinal nunca se gardan. Só se utilizan no proceso de autenticación (SSL) coa instancia.
"</string>
</string>
<string name="privacy_authorizations_title">Permisos:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: Utilizado para detectar si o dispositivo está conectado a unha rede WiFi.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: Utilizado para detectar si o dispositivo está conectado a unha rede WiFi.\n
- <b>INTERNET</b>: Utilizado para as consultas a instancia.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: Utilizado para gardar medios ou mover a app a tarxeta SD.\n
- <b>READ_EXTERNAL_STORAGE</b>: Utilizado para engadir medios aos toots.\n
- <b>BOOT_COMPLETED</b>: Utilizado para iniciar o servizo de notificacións.\n
- <b>WAKE_LOCK</b>: Utilizado durante o servizo de notificacións.
"</string>
</string>
<string name="privacy_API_authorizations_title">Permisos API:</string>
<string name="privacy_API_authorizations">"
- <b>Lectura</b>: Ler datos.\n
<string name="privacy_API_authorizations"> - <b>Lectura</b>: Ler datos.\n
- <b>Escritura</b>: Publicar estados e subir medios para os estados.\n
- <b>Seguimento</b>: Seguir, deixar de seguir, bloquear, desbloquear.\n\n
<b>&#9888; Estas accións só se realizan a petición da usuaria.</b>
"</string>
</string>
<string name="privacy_API_title">Rastrexo e Bibliotecas</string>
<string name="privacy_API">"
A aplicación <b>non utiliza ferramentas de rastrexo</b> (medida de audiencias, reporte de fallos, etc.) e non contén publicidade.\n\n
<string name="privacy_API"> A aplicación <b>non utiliza ferramentas de rastrexo</b> (medida de audiencias, reporte de fallos, etc.) e non contén publicidade.\n\n
O uso de bibliotecas foi minimizado: \n
- <b>Glide</b>: Para xestionar medios\n
- <b>Android-Job</b>: Para xestionar servizos\n
- <b>PhotoView</b>: Para xestionar imaxes\n
"</string>
</string>
<string name="privacy_API_yandex_title">Tradución dos toots</string>
<string name="privacy_API_yandex_authorizations">"
A aplicación ofrece a posibilidade de traducir os toots utilizando o idioma do dispositivo e a API de Yandex.\n
<string name="privacy_API_yandex_authorizations">A aplicación ofrece a posibilidade de traducir os toots utilizando o idioma do dispositivo e a API de Yandex.\n
Yandex ten a súa propia política de intimidade, que pode atopar aquí: https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
Grazas a:
"</string>
</string>
<string name="thanks_text_dev">Grazas a:
</string>
<string name="filter_regex">Filtrado de expresións regulares</string>
<string name="search">Buscar</string>
<string name="delete">Eliminar</string>
@ -485,14 +478,13 @@ Grazas a:
<string name="account_moved_to">%1$s mudouse a %2$s</string>
<string name="show_boost_count">Mostrar a conta de promocións/favoritos</string>
<string name="issue_login_title">Non funciona a autenticación?</string>
<string name="issue_login_message">"
<b>Aquí ten unhas comprobacións que poderían axudarlle:</b>\n\n
<string name="issue_login_message"> <b>Aquí ten unhas comprobacións que poderían axudarlle:</b>\n\n
- Comprobe que non ten fallos escribindo o nome da instancia\n\n
- Comprobe que a súa instancia está a funcionar\n\n
- Si utiliza autenticación de doble factor (2FA), utilice a ligazón inferior (unha vez escriba o nome da instancia)\n\n
- Pode utilizar tamén esta ligazón sin ter que usar a 2FA\n\n
- Si aínda non pode conectar, por favor suba o problema a Github en https://github.com/stom79/mastalab/issues
"</string>
</string>
<string name="media_ready">Cargáronse os medios. Pulse aquí para mostralos.</string>
<string name="data_export_start">Esta acción podería prolongarse. Notificarémoslle cando esté rematada.</string>
<string name="data_export_running">Aínda a traballar, agarde por favor…</string>
@ -678,18 +670,15 @@ Grazas a:
<item>1 día</item>
<item>1 semana</item>
</string-array>
<string name="showcase_instance">"
En este campo, debe escribir o nome do servidor da súa instancia.\nPor exemplo, se creou a súa conta en https://mastodon.social\ndebe escribir <b>mastodon.social</b> (sen https://)\n
<string name="showcase_instance"> En este campo, debe escribir o nome do servidor da súa instancia.\nPor exemplo, se creou a súa conta en https://mastodon.social\ndebe escribir <b>mastodon.social</b> (sen https://)\n
Pode iniciar a escribir o nome e irá obtendo suxestións de servidores.\n\n
⚠ O botón de conexión só estará activo se o nome da instancia é válido e a instancia está activa!
"</string>
<string name="showcase_uid">"
En este campo, escriba o correo electrónico ligado a súa conta en Mastodon.
"</string>
<string name="showcase_pwd">"
O último paso é introducir o contrasinal e pulsa en Conectar.
</string>
<string name="showcase_uid"> En este campo, escriba o correo electrónico ligado a súa conta en Mastodon.
</string>
<string name="showcase_pwd"> O último paso é introducir o contrasinal e pulsa en Conectar.
"</string>
</string>
<string name="more_information">Máis información</string>
<string name="showcase_2FA">Se utiliza 2FA (doble factor de autenticación), debe utilizar esta ligazón.\nTamén pode utilizalo se non quere introducir as súas credenciais aquí.</string>
<!-- languages not translated -->
@ -710,6 +699,7 @@ Grazas a:
<string name="some_words_any">Calquera de estas palabras (separadas por espazos)</string>
<string name="some_words_all">Todas estas palabras (separadas por espazos)</string>
<string name="some_words_none">Ningunha de estas palabras (separadas por espazos)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Cambiar o nome da columna</string>
<string name="no_misskey_instance">Sen instancias Misskey</string>
<string name="misskey_instance">Instancia Misskey</string>
@ -849,11 +839,14 @@ Grazas a:
<string name="set_sensitive_content">Marcar os medios sempre como sensibles</string>
<string name="gnu_instance">Instancia GNU</string>
<string name="cached_status">Estado almacenado</string>
<string name="set_forward_tags">Forward tags in replies</string>
<string name="set_long_press_media">Long press to store media</string>
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_forward_tags">Incluír etiquetas nas respostas</string>
<string name="set_long_press_media">Manter pulsado para gardar medios</string>
<string name="set_blur_sensitive">Difuminar medios sensibles</string>
<string name="set_display_timeline_in_list">Mostrar liñas temporais nunha lista</string>
<string name="display_timeline">Mostrar liñas temporais</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d voto</item>
<item quantity="other">%d votos</item>

View File

@ -328,7 +328,7 @@
<string name="set_save_changes">Save changes</string>
<string name="set_header_picture_overlay">Choose a header picture</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="set_automatically_split_toot">Automatically split toots in replies when chars are over:</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_time_from">Between</string>
@ -395,10 +395,9 @@
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push notifications</string>
<string name="settings_popup_message">"
Please, confirm push notifications that you want to receive.
<string name="settings_popup_message"> Please, confirm push notifications that you want to receive.
You can enable or disable these notifications later in settings (Notifications tab).
"</string>
</string>
<string name="settings_popup_timeline">For unread toots in home time-line?</string>
<string name="settings_popup_notification">For unread notifications?</string>
<!-- CACHE -->
@ -435,44 +434,38 @@
<string name="owner_cached_toots_empty">No toots were found in database. Please, use the synchronize button from the menu to retrieve them.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Recorded data</string>
<string name="privacy_data">"
Only basic information from accounts are stored on the device.
<string name="privacy_data"> Only basic information from accounts are stored on the device.
These data are strictly confidential and can only be used by the application.
Deleting the application immediately removes these data.\n
&#9888; Login and passwords are never stored. They are only used during a secure authentication (SSL) with an instance.
"</string>
</string>
<string name="privacy_authorizations_title">Permissions:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: Used to detect if the device is connected to a WIFI network.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: Used to detect if the device is connected to a WIFI network.\n
- <b>INTERNET</b>: Used for queries to an instance.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: Used to store media or to move the app on a SD card.\n
- <b>READ_EXTERNAL_STORAGE</b>: Used to add media to toots.\n
- <b>BOOT_COMPLETED</b>: Used to start the notification service.\n
- <b>WAKE_LOCK</b>: Used during the notification service.
"</string>
</string>
<string name="privacy_API_authorizations_title">API permissions:</string>
<string name="privacy_API_authorizations">"
- <b>Read</b>: Read data.\n
<string name="privacy_API_authorizations"> - <b>Read</b>: Read data.\n
- <b>Write</b>: Post statuses and upload media for statuses.\n
- <b>Follow</b>: Follow, unfollow, block, unblock.\n\n
<b>&#9888; These actions are carried out only when user requests them.</b>
"</string>
</string>
<string name="privacy_API_title">Tracking and Libraries</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
<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
"</string>
</string>
<string name="privacy_API_yandex_title">Translation of toots</string>
<string name="privacy_API_yandex_authorizations">"
The application offers the ability to translate toots using the locale of the device and the Yandex API.\n
<string name="privacy_API_yandex_authorizations"> The application offers the ability to translate toots using the locale of the device and the Yandex API.\n
Yandex has its proper privacy-policy which can be found here: https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
Thank you to:
"</string>
</string>
<string name="thanks_text_dev"> Thank you to:
</string>
<string name="filter_regex">Filter out by regular expressions</string>
<string name="search">Search</string>
<string name="delete">Delete</string>
@ -493,14 +486,13 @@
<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="issue_login_message">"
<b>Here are some checks that might help:</b>\n\n
<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 GitLab at https://gitlab.com/tom79/mastalab/issues
"</string>
</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>
@ -686,17 +678,14 @@
<item>1 day</item>
<item>1 week</item>
</string-array>
<string name="showcase_instance">"
In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
<string name="showcase_instance"> In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
You can start writing first letters and names will be suggested.\n\n
⚠ The Login button will only work if the instance name is valid and the instance is up!
"</string>
<string name="showcase_uid">"
In this field, write the email that is attached to your Mastodon account.
"</string>
<string name="showcase_pwd">"
Last step is to enter your password and click on Login.
"</string>
</string>
<string name="showcase_uid"> In this field, write the email that is attached to your Mastodon account.
</string>
<string name="showcase_pwd"> Last step is to enter your password and click on Login.
</string>
<string name="more_information">More information</string>
<string name="showcase_2FA">If you use 2FA (Two-factor authentication), you need to use this link.\nYou can also use it if you do not want to enter your credentials here.</string>
<!-- languages not translated -->
@ -717,6 +706,7 @@
<string name="some_words_any">Any of these words (space-separated)</string>
<string name="some_words_all">All these words (space-separated)</string>
<string name="some_words_none">None of these words (space-separated)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Change column name</string>
<string name="no_misskey_instance">No Misskey instances</string>
<string name="misskey_instance">Misskey instance</string>
@ -861,6 +851,9 @@
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d vote</item>
<item quantity="two">%d votes</item>

View File

@ -387,10 +387,9 @@
<string name="set_resize_picture">चित्रो का नाप बदलें</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">पुश सूचनाएँ</string>
<string name="settings_popup_message">"
कृप्या उन पुश सूचनाएं को पक्का करें जो आप पाना चाहते हैं।
<string name="settings_popup_message">कृप्या उन पुश सूचनाएं को पक्का करें जो आप पाना चाहते हैं।
आप सूचनाओं को बाद में सेटिंग्स में जाकर सक्रिय या निश्क्रिय कर सकते हैं (सूचनाएं टैब)। "</string>
आप सूचनाओं को बाद में सेटिंग्स में जाकर सक्रिय या निश्क्रिय कर सकते हैं (सूचनाएं टैब)। </string>
<string name="settings_popup_timeline">मुख्यपृष्ट में अपठित लेखो के लिये?</string>
<string name="settings_popup_notification">अपठित सूचनाओं के लिये?</string>
<!-- CACHE -->
@ -427,38 +426,32 @@
<string name="owner_cached_toots_empty">डेटाबेस में कोई लेख नहीं मिला। उन्हें वापस पाने के लिये मेन्यू में मौजूद सिंक बटन का इस्तेमाल करें।</string>
<!-- PRIVACY -->
<string name="privacy_data_title">अभिलिखित डेटा</string>
<string name="privacy_data">"
खातों की सिर्फ़ साधारण जानकारी उपकरण में रखी जाती है।
<string name="privacy_data">खातों की सिर्फ़ साधारण जानकारी उपकरण में रखी जाती है।
यह डेटा बिलकुल गोपनीय है और इसका उपयोग सिर्फ़ यह एेप कर सकता है।
एेप के मिटाते ही यह डेटा तुरंत नष्ट हो जाता है।\n
&#9888; लाॅगइन और पासवर्ड कभी रखे नहीं जाते। उनका उपयोग केवल किसी इंस्टंस के साथ सुरक्षित प्रमाणीकरण (SSL) के दौरान किया जाता है। "</string>
&#9888; लाॅगइन और पासवर्ड कभी रखे नहीं जाते। उनका उपयोग केवल किसी इंस्टंस के साथ सुरक्षित प्रमाणीकरण (SSL) के दौरान किया जाता है। </string>
<string name="privacy_authorizations_title">अनुमतियां:</string>
<string name="privacy_authorizations">"
- <b>एेकस्स_नैटवर्क_स्टेट</b>: यह पता लगाने के लिये कि उपकरण वाईफाई से जुड़ा है या नहीं।\n
<string name="privacy_authorizations">- <b>एेकस्स_नैटवर्क_स्टेट</b>: यह पता लगाने के लिये कि उपकरण वाईफाई से जुड़ा है या नहीं।\n
- <b>इंटर्नेट</b>: इंस्टंस से परिप्रश्न करने के लिये।\n
- <b>राइट_एेक्सटर्नल_स्टोरेज</b>: मीडिया संचित या एेप को एेसडी कार्ड में डालने के लिये।\n
- <b>पढ़े_एेक्सटर्नल_स्टोरेज</b>: लेखों में मीडिया जोड़ने के लिये।\n
- <b>बूट_समाप्त</b>: सूचना सेवा शुरू करने के लिये।\n
- <b>वेक_लौक</b>: सूचना सेवा के दौरान उपयोग करने के लिये। "</string>
- <b>वेक_लौक</b>: सूचना सेवा के दौरान उपयोग करने के लिये। </string>
<string name="privacy_API_authorizations_title">एपीआई अनुमतियां:</string>
<string name="privacy_API_authorizations">"
- <b>पढ़ें</b>: डेटा पढ़ें।\n
<string name="privacy_API_authorizations">- <b>पढ़ें</b>: डेटा पढ़ें।\n
- <b>लिखें</b>: लेख प्रकाशित करें और मीडिया अपलोड करें।\n
- <b>अनुसरण</b>: अनुसरण, अंफ़ौलो, अवरुद्ध, मुक्त।\n\n
- <b>&#9888; केवल उपयोगकर्ता की गुज़ारिश पर यह क्रियाएं की जाती हैं।</b> "</string>
- <b>&#9888; केवल उपयोगकर्ता की गुज़ारिश पर यह क्रियाएं की जाती हैं।</b> </string>
<string name="privacy_API_title">ट्रैकिंग एवं संग्रहालय</string>
<string name="privacy_API">"
यह एेप <b>ट्रैकिंग साधन का उपयोग नहीं करता</b> (श्रोता मापन, त्रुटि रिपोर्ट आदी) और इसमें कोई विज्ञापन नहीं है।\n\n
<string name="privacy_API">यह एेप <b>ट्रैकिंग साधन का उपयोग नहीं करता</b> (श्रोता मापन, त्रुटि रिपोर्ट आदी) और इसमें कोई विज्ञापन नहीं है।\n\n
संग्रहालयो के उपयोग कम किया है: \n
- <b>ग्लाइड</b>: मीडिया को संभालने के लिये\n
- <b>एंड्राॅयड-जाॅब</b>: सेवाएं संभालने के लिये\n
- <b>फ़ोटोव्यू</b>: चित्रो को संभालने के लिये\n "</string>
- <b>फ़ोटोव्यू</b>: चित्रो को संभालने के लिये\n </string>
<string name="privacy_API_yandex_title">लेखों का अनुवाद</string>
<string name="privacy_API_yandex_authorizations">"
यह एेप लेखों का अनुवाद करने की काबिलियत प्रदान करता है उपकरण का स्थान और यैंडैक्स एपीआई की मदद से।\n
यैंडैक्स की अपनी गोपनीयता नीति है जो यहाँ मौजूद है: https://yandex.ru/legal/confidential/?lang=en "</string>
<string name="thanks_text_dev">"
इनको धन्यवाद: "</string>
<string name="privacy_API_yandex_authorizations">यह एेप लेखों का अनुवाद करने की काबिलियत प्रदान करता है उपकरण का स्थान और यैंडैक्स एपीआई की मदद से।\n
यैंडैक्स की अपनी गोपनीयता नीति है जो यहाँ मौजूद है: https://yandex.ru/legal/confidential/?lang=en </string>
<string name="thanks_text_dev">इनको धन्यवाद: </string>
<string name="filter_regex">आम अभिव्यंजनाओ के अनुसार छाटें</string>
<string name="search">खोजें</string>
<string name="delete">मिटाएं</string>
@ -479,13 +472,12 @@
<string name="account_moved_to">%1$s %2$s पे चले गये है</string>
<string name="show_boost_count">बूस्ट/पसंदीदा की गिनती दिखाएं</string>
<string name="issue_login_title">प्रमाणीकरण काम नहीं कर रहा?</string>
<string name="issue_login_message">"
<b>यह कुछ चैक्स हैं जो मदद करें:</b>\n\n
<string name="issue_login_message"><b>यह कुछ चैक्स हैं जो मदद करें:</b>\n\n
- जांचे कि इंस्टंस के नाम में कोई गलती तो नहीं ह\n\n
- जांचे की आपका इंस्टंस कहीं बंद तो नहीं है\n\n
- अगर आप दो-चरणीय प्रमाणीकरण (2FA) का उपयोग करते है तो कृप्या नीचे दिये लिंक का इस्तेमाल करें (इंस्टंस का नाम डालने के बाद)\n\n
- आप इस लिंक का उपयोग दो-चरणीय प्रमाणीकरण के बिना भी कर सकते हैं\n\n
- अगर यह फिर भी काम नहीं कर रहा तो कृप्या गिटलैब पे रिपोर्ट करें https://gitlab.com/tom79/mastalab/issues "</string>
- अगर यह फिर भी काम नहीं कर रहा तो कृप्या गिटलैब पे रिपोर्ट करें https://gitlab.com/tom79/mastalab/issues </string>
<string name="media_ready">मीडिया को लोड कर दिया है। देखने के लिये यहाँ क्लिक करें।</string>
<string name="data_export_start">यह क्रिया काफी लंबी हो सकती है। पूरा होने पे आपको सूचित कर दिया जाएगा।</string>
<string name="data_export_running">चालू है, कृप्या प्रतीक्षा करे...</string>
@ -671,14 +663,11 @@
<item>१ दिन</item>
<item>१ सप्ताह</item>
</string-array>
<string name="showcase_instance">"
यहाँ अपने इंस्टंस के मेज़बान का नाम डालें।\nउदाहरण, अगर आपने https://mastodon.social\n पे खाता बनाया है तो बस लिखें <b>mastodon.social</b> (https:// के बिना)\n
<string name="showcase_instance">यहाँ अपने इंस्टंस के मेज़बान का नाम डालें।\nउदाहरण, अगर आपने https://mastodon.social\n पे खाता बनाया है तो बस लिखें <b>mastodon.social</b> (https:// के बिना)\n
आप जब पहले अक्षर लिखना शुरू करेंगे तब नामों का सुझाव दिया जाएगा।\n\n
⚠ लाॅगइन बटन सिर्फ़ तब काम करेगा जब इंसटंस का नाम वैध है और इंस्टंस काम कर रहा है! "</string>
<string name="showcase_uid">"
यहाँ अपने मैस्टोडाॅन खाते से जुड़े ईमेल को लिखें। "</string>
<string name="showcase_pwd">"
आखरी चरण में अपना पासवर्ड डाले और फिर लाॅगइन पे क्लिक करें। "</string>
⚠ लाॅगइन बटन सिर्फ़ तब काम करेगा जब इंसटंस का नाम वैध है और इंस्टंस काम कर रहा है! </string>
<string name="showcase_uid">यहाँ अपने मैस्टोडाॅन खाते से जुड़े ईमेल को लिखें। </string>
<string name="showcase_pwd">आखरी चरण में अपना पासवर्ड डाले और फिर लाॅगइन पे क्लिक करें। </string>
<string name="more_information">अधिक जानकारी</string>
<string name="showcase_2FA">अगर आप 2FA (दो-चरणीय प्रमाणीकरण) चालू करना चाहते है तो फिर इस लिंक का उपयोग करें।\nअगर आपको अपना ईमेल और पासवर्ड यहाँ नहीं डालना है तब इसे इस्तेमाल करें।</string>
<!-- languages not translated -->
@ -699,6 +688,7 @@
<string name="some_words_any">कोई भी शब्द (स्पेस से अलग किये हूए)</string>
<string name="some_words_all">सभी शब्द (स्पेस से अलग किये हूए)</string>
<string name="some_words_none">कोई भी शब्द नहीं (स्पेस से अलग किये हूए)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">काॅलम क नाम बदलें</string>
<string name="no_misskey_instance">No Misskey instances</string>
<string name="misskey_instance">Misskey instance</string>
@ -843,6 +833,9 @@
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d vote</item>
<item quantity="other">%d votes</item>

View File

@ -387,10 +387,9 @@
<string name="set_resize_picture">Képek átméretezése</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push-értesítések</string>
<string name="settings_popup_message">"
Kérjük erősítsd meg, mely push-értesítéseket szeretnéd megkapni.
<string name="settings_popup_message"> Kérjük erősítsd meg, mely push-értesítéseket szeretnéd megkapni.
Ezeket az értesítéseket később ki- vagy bekapcsolhatod (Értesítések lapon).
"</string>
</string>
<string name="settings_popup_timeline">For unread toots in home time-line?</string>
<string name="settings_popup_notification">For unread notifications?</string>
<!-- CACHE -->
@ -427,42 +426,36 @@
<string name="owner_cached_toots_empty">Nem találtunk tootokat az adatbázisban. Kérjük, letöltésükhöz használd a szinkronizálás gombot.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Rögzített adatok</string>
<string name="privacy_data">"
A készüléken csak a fiókok alapadatait tároljuk.
<string name="privacy_data"> A készüléken csak a fiókok alapadatait tároljuk.
Ezek az adatok szigorúan bizalmasak és csak az alkalmazás fér hozzá.
Az alkalmazás eltávolítása azonnal törli ezeket az adatokat.\n
&#9888; Felhasználónevet és jelszavakat sohasem tárolunk. Csak a szerverre való biztonságos (SSL) bejentkezés során használjuk.
"</string>
</string>
<string name="privacy_authorizations_title">Engedélyek:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: Arra használjuk, hogy megállapítsuk, a kliens WiFi-hálózathoz kapcsolódik-e.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: Arra használjuk, hogy megállapítsuk, a kliens WiFi-hálózathoz kapcsolódik-e.\n
- <b>INTERNET</b>: Szerverek lekérdezésekor használatos.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: Média vagy magának alkalmazásnak az SD-kártyára áthelyezéséhez használatos.\n
- <b>READ_EXTERNAL_STORAGE</b>: Médiát ad hozzá toothoz.\n
- <b>BOOT_COMPLETED</b>: Az értesítési szolgáltatás indítására használatos.\n
- <b>WAKE_LOCK</b>: Az értesítési szolgáltatás használja működés közben.
"</string>
</string>
<string name="privacy_API_authorizations_title">API jogosultságok:</string>
<string name="privacy_API_authorizations">"
- <b>Olvas</b>: Adat olvasása.\n
<string name="privacy_API_authorizations"> - <b>Olvas</b>: Adat olvasása.\n
- <b>Írás</b>: Posztok létrehozása és média csatolása posztokhoz..\n
- <b>Követ</b>: Követés, követés megszűntetése, letiltás és tiltás feloldása. \n\n
<b>&#9888; Ezek az akciók csak akkor hajtódnak végre, amikor a felhasználó kéri.</b>
"</string>
</string>
<string name="privacy_API_title">Követés és könyvtárak</string>
<string name="privacy_API">"
Az alkalmazás<b>nem használ követési eszközöket</b> (hallgatóság mérése, hibajelentés, stb.) és nem tartalmaz hirdetéseket.\n\n
<string name="privacy_API"> Az alkalmazás<b>nem használ követési eszközöket</b> (hallgatóság mérése, hibajelentés, stb.) és nem tartalmaz hirdetéseket.\n\n
A könyvtárak használata minimalizált: \n
- <b>Glide</b>: Médiák kezelése\n
- <b>Android-Job</b>: Szolgáltatások kezelése\n
- <b>PhotoView</b>: Képek kezelése\n
"</string>
</string>
<string name="privacy_API_yandex_title">Tootok fordítása</string>
<string name="privacy_API_yandex_authorizations">"
Az alkalmazás lehetővé teszi a tootok lefordítását az eszköz nyelvi beállításainak megfelelően, a Yandex API segítségével.\n
A Yandexnek megvan a saját adatvédelmi szabályzata, ami itt található: https://yandex.ru/legal/confidential/?lang=en "</string>
<string name="thanks_text_dev">"
Köszönet a következőknek: "</string>
<string name="privacy_API_yandex_authorizations">Az alkalmazás lehetővé teszi a tootok lefordítását az eszköz nyelvi beállításainak megfelelően, a Yandex API segítségével.\n
A Yandexnek megvan a saját adatvédelmi szabályzata, ami itt található: https://yandex.ru/legal/confidential/?lang=en </string>
<string name="thanks_text_dev">Köszönet a következőknek: </string>
<string name="filter_regex">Szűrés reguláris kifejezések használatával</string>
<string name="search">Keresés</string>
<string name="delete">Törlés</string>
@ -483,14 +476,13 @@ Köszönet a következőknek: "</string>
<string name="account_moved_to">%1$s elköltözött ide: %2$s</string>
<string name="show_boost_count">Mutasd az újratootok/kedvenc posztok számát</string>
<string name="issue_login_title">Nem sikeres a hitelesítés?</string>
<string name="issue_login_message">"
<b>Íme néhány hasznos tipp:</b>\n\n
<string name="issue_login_message"> <b>Íme néhány hasznos tipp:</b>\n\n
- Ellenőrizd, hogy nem gépelted-e el a szerver nevét.\n\n
- Ellenőrizd, hogy a szervered elérhető\n\n
- Használd az alsó linket, ha két faktoros hitelesítést (2FA) használsz (miután kitöltötted a szerver nevét)\n\n
- Ezt a linket 2FA nélkül is használhatod\n\n
- Ha még mindig nem sikerül bejelentkezni, jelentsd a GitLabon a https://gitlab.com/tom79/mastalab/issues címen
"</string>
</string>
<string name="media_ready">Betöltöttük a médiát. Klikkelj ide a megjelenítéshez.</string>
<string name="data_export_start">Ez a folyamat sokáig tarthat. Értesítünk majd, amikor befejeződött.</string>
<string name="data_export_running">Még nem fejeztük be, kérlek várj még…</string>
@ -676,17 +668,14 @@ Köszönet a következőknek: "</string>
<item>1 nap</item>
<item>1 hét</item>
</string-array>
<string name="showcase_instance">"
Ebbe a mezőbe, írd a szervered host-nevét.\nPéldául, ha a fiókodat a https://mastodon.social\n címen nyitottad, akkor írd, hogy <b>mastodon.social</b> (https:// nélkül)\n
<string name="showcase_instance"> Ebbe a mezőbe, írd a szervered host-nevét.\nPéldául, ha a fiókodat a https://mastodon.social\n címen nyitottad, akkor írd, hogy <b>mastodon.social</b> (https:// nélkül)\n
Kezdd beírni az első néhány betűt és a többit segítünk kiegészíteni.\n\n
⚠ A Bejelentkezés gomb csak akkor fog működni, ha a szervernév érvényes és a szerver elérhető!
"</string>
<string name="showcase_uid">"
Ebbe a mezőbe írd az e-mailcímet, ami a Mastodon-fiókodhoz tartozik.
"</string>
<string name="showcase_pwd">"
Utolsó lépésként írd be a jelszót és klikkelj a Belépés gombra.
"</string>
</string>
<string name="showcase_uid"> Ebbe a mezőbe írd az e-mailcímet, ami a Mastodon-fiókodhoz tartozik.
</string>
<string name="showcase_pwd"> Utolsó lépésként írd be a jelszót és klikkelj a Belépés gombra.
</string>
<string name="more_information">További információ</string>
<string name="showcase_2FA">Ha 2FA-t (kétfaktoros hitelesítést) használsz, ezt a linket kell használnod.\nAkkor is használhatod, ha nem akarod ide írni a bejelentkezési adataidat.</string>
<!-- languages not translated -->
@ -707,6 +696,7 @@ Köszönet a következőknek: "</string>
<string name="some_words_any">Bármelyik a következő szavakból (szóközzel elválasztva)</string>
<string name="some_words_all">Minden szó (szóközzel elválasztva)</string>
<string name="some_words_none">Egyik szó sem (szóközzel elválasztva)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Oszlop nevének megváltoztatása</string>
<string name="no_misskey_instance">Nincs Misskey szerver</string>
<string name="misskey_instance">Misskey szerver</string>
@ -847,10 +837,13 @@ Köszönet a következőknek: "</string>
<string name="gnu_instance">GNU szerver</string>
<string name="cached_status">Cached status</string>
<string name="set_forward_tags">Címkék továbbítasa a válaszokban</string>
<string name="set_long_press_media">Long press to store media</string>
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_long_press_media">Nyomd meg hosszan a média tárolásához</string>
<string name="set_blur_sensitive">Érzékeny média homályosítása</string>
<string name="set_display_timeline_in_list">Idővonalak megjelenítése listában</string>
<string name="display_timeline">Idővonalak megjelenítése</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d szavazat</item>
<item quantity="other">%d szavazat</item>

View File

@ -320,7 +320,7 @@
<string name="set_save_changes">Պահել փոփոխությունները</string>
<string name="set_header_picture_overlay">Ընտրել գլխավոր նկար</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="set_automatically_split_toot">Automatically split toots in replies when chars are over:</string>
<string name="note_no_space">Դու հատե՛լ ես թույլատրված 160 նիշերի սահմանը</string>
<string name="username_no_space">Դու հատե՛լ ես թույլատրված 30 նիշերի սահմանը</string>
<string name="settings_time_from">Սկսած՝</string>
@ -387,10 +387,9 @@
<string name="set_resize_picture">Չափափոխել նկարները</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Փուշ ծանուցումներ</string>
<string name="settings_popup_message">"
Հաստատիր այն փուշ ծանուցումները, որոնք ցանկանում ես ստանալ։
<string name="settings_popup_message"> Հաստատիր այն փուշ ծանուցումները, որոնք ցանկանում ես ստանալ։
Հետագայում կարող ես անջատել կամ միացնել այս ծանուցումները կարգավորումներից։
"</string>
</string>
<string name="settings_popup_timeline">Հարազատ հոսքում չկարդացած թթերի համա՞ր</string>
<string name="settings_popup_notification">Չկարդացած ծանուցումների համա՞ր</string>
<!-- CACHE -->
@ -427,43 +426,37 @@
<string name="owner_cached_toots_empty">No toots were found in database. Please, use the synchronize button from the menu to retrieve them.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Հավաքած բովանդակություն</string>
<string name="privacy_data">"
Հաշիվներից սարքում պահվում են զուտ հիմնական տեղեկությունները։
<string name="privacy_data"> Հաշիվներից սարքում պահվում են զուտ հիմնական տեղեկությունները։
Այս տեղեկությունները հույժ գաղտնի են և կարող են օգտագործվել միայն հավելվածի կողմից։
Հավելվածը ջնջելու դեպքում այդ տեղեկություններն իսկույն կհեռացվեն սարքից։\n
&#9888; Ծածկանուններն ու գաղտնաբառերը երբեք չեն պահվում։ Դրանք օգտագործվում են միայն հանգույցի հետ ապահով իսկորոշման(SSL) ընթացքում։
"</string>
</string>
<string name="privacy_authorizations_title">Թույլտվություններ.</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>. Օգտագործվում է սարքի կապը WIFI-ին ստուգելու համար։\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>. Օգտագործվում է սարքի կապը WIFI-ին ստուգելու համար։\n
- <b>INTERNET</b> Օգտագործվում է հանգույցին հարցումներ ուղարկելու համար։\n
- <b>WRITE_EXTERNAL_STORAGE</b> Օգտագործվում է մեդիայի պահման կամ հավելվածն SD քարտ տեղափոխելու համար։\n
- <b>READ_EXTERNAL_STORAGE</b> Օգտագործվում է թթին մեդիա կցելու համար։\n
- <b>BOOT_COMPLETED</b> Օգտագործվում է ծանուցման ծառայությունը գործարկելու համար։\n
- <b>WAKE_LOCK</b>. Օգտագործվում է ծանուցման ծառայության մատուցման ընթացքում։
"</string>
</string>
<string name="privacy_API_authorizations_title">API-ի թույլտվություններ․</string>
<string name="privacy_API_authorizations">"
-<b>Կարդալ</b> Կարդալ տվյալները։\n
<string name="privacy_API_authorizations"> -<b>Կարդալ</b> Կարդալ տվյալները։\n
-<b>Գրել</b> Գրառումներ անել և վերբեռնել մեդիա դրանց համար։\n
-<b>Հետևել</b> Հետևել, չհետևել, արգելափակել, ապաարգելափակել։\n\n
<b>&#9888; Այս գործողություններն իրականացվում են միայն օգտատիրոջ հայցով։</b>
"</string>
</string>
<string name="privacy_API_title">Հսկում ու գրադարաններ</string>
<string name="privacy_API">"
Հավելվածը <b>չի՛ օգտագործում հսկող գործիքներ</b> (լսարանի չափում, սխալանքների զեկուցում և այլն) և չի՛ պարունակում որևէ գովազդ։\n\n
<string name="privacy_API"> Հավելվածը <b>չի՛ օգտագործում հսկող գործիքներ</b> (լսարանի չափում, սխալանքների զեկուցում և այլն) և չի՛ պարունակում որևէ գովազդ։\n\n
Գրադարանների օգտագործումը հասցված է նվազագույնի՝\n
֊<b>Glide</b>՝ մեդիան կառավարելու համար\n
֊<b>Android-Job</b>՝ ծառայությունները կառավարելու համար\n
֊<b>PhotoView</b>՝ նկրները կառավարելու համար\n
"</string>
</string>
<string name="privacy_API_yandex_title">Թթերի թարգմանություն</string>
<string name="privacy_API_yandex_authorizations">"
Հավելվածը հնարավորություն է ընձեռում թարգմանել թթերը՝ օգտագործելով սարքի տեղույթը և Յանդեքսի API-ը։\n
Յանդեքսն ունի սեփական գաղնիության քաղաքականությունը, որը կարող ես գտնել այստեղ․ https://yandex.ru/legal/confidential/?lang=en "</string>
<string name="thanks_text_dev">"
Շնորհակալություն ներքոհիշյալներին․
"</string>
<string name="privacy_API_yandex_authorizations"> Հավելվածը հնարավորություն է ընձեռում թարգմանել թթերը՝ օգտագործելով սարքի տեղույթը և Յանդեքսի API-ը։\n
Յանդեքսն ունի սեփական գաղնիության քաղաքականությունը, որը կարող ես գտնել այստեղ․ https://yandex.ru/legal/confidential/?lang=en </string>
<string name="thanks_text_dev"> Շնորհակալություն ներքոհիշյալներին․
</string>
<string name="filter_regex">Ֆիլտրել ըստ կանոնավոր արտահայտությունների</string>
<string name="search">Փնտրել</string>
<string name="delete">Ջնջել</string>
@ -484,14 +477,13 @@
<string name="account_moved_to">%1$s-ը տեղափոխվել է %2$s</string>
<string name="show_boost_count">Ցուցադրել տարածումների/հավանումների հաշվիչ</string>
<string name="issue_login_title">Իսկորոշումը չի՞ աշխատում</string>
<string name="issue_login_message">"
<b>Ահա մի քանի բան, որոնք կարող են օգնել․</b>\n\n
<string name="issue_login_message"> <b>Ահա մի քանի բան, որոնք կարող են օգնել․</b>\n\n
Համոզվիր, որ ոչ մի սխալ թույլ չես տվել՝ հանգույցի անվան մեջ\n\n
Ստուգիր արդյոք քո հանգույցն անխափան աշխատում է, թե ոչ\n\n
Եթե օգտվում ես երկքայլ իսկորոշումից(2FA)՝ օգտագործիր ներքևի հղումը(հանգույցի անվանումը լրացնելուց հետո)\n\n
Կարող ես օգտագործել վերոհիշյալ հղումը նաև առանց երկքայլ իսկորոշումն օգտագործելու\n\n
Եթե այս ամենից հետո դեռ չի աշխատում, քեզ այլ բան չի մնում քան խնդրի մասին բարձրաձայնելը Github-ում՝ հետևյալ հղումով․ https://github.com/stom79/mastalab/issues
"</string>
</string>
<string name="media_ready">Մեդիան բեռնվել է։ Կտտացրու այստեղ՝ այն ցուցադրելու համար։</string>
<string name="data_export_start">Այս գործողությունը բավական երկար կարող է տևել։ Դու կծանուցվես դրա ավարտի մասին։</string>
<string name="data_export_running">Դեռ բեռնվում է, սպասի՛ր…</string>
@ -677,17 +669,14 @@
<item>1 օր</item>
<item>1 շաբաթ</item>
</string-array>
<string name="showcase_instance">"
In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
<string name="showcase_instance"> In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
You can start writing first letters and names will be suggested.\n\n
⚠ The Login button will only work if the instance name is valid and the instance is up!
"</string>
<string name="showcase_uid">"
In this field, write the email that is attached to your Mastodon account.
"</string>
<string name="showcase_pwd">"
Last step is to enter your password and click on Login.
"</string>
</string>
<string name="showcase_uid"> In this field, write the email that is attached to your Mastodon account.
</string>
<string name="showcase_pwd"> Last step is to enter your password and click on Login.
</string>
<string name="more_information">More information</string>
<string name="showcase_2FA">If you use 2FA (Two-factor authentication), you need to use this link.\nYou can also use it if you do not want to enter your credentials here.</string>
<!-- languages not translated -->
@ -708,6 +697,7 @@
<string name="some_words_any">Any of these words (space-separated)</string>
<string name="some_words_all">All these words (space-separated)</string>
<string name="some_words_none">None of these words (space-separated)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Change column name</string>
<string name="no_misskey_instance">No Misskey instances</string>
<string name="misskey_instance">Misskey instance</string>
@ -852,6 +842,9 @@
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d vote</item>
<item quantity="other">%d votes</item>

View File

@ -316,7 +316,7 @@
<string name="set_save_changes">Simpan perubahan</string>
<string name="set_header_picture_overlay">Pilih gambar header</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="set_automatically_split_toot">Automatically split toots in replies when chars are over:</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_time_from">Antara</string>
@ -383,10 +383,9 @@
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Tolak pemberitahuan</string>
<string name="settings_popup_message">"
Tolong konfirmasi penolakan pemberitahuan yang ingin Anda terima.
<string name="settings_popup_message"> Tolong konfirmasi penolakan pemberitahuan yang ingin Anda terima.
Anda dapat mengaktifkan atau menonaktifkan pemberitahuan ini di setelan (Tab pemberitahuan).
"</string>
</string>
<string name="settings_popup_timeline">Untuk kutipan yang belum dibaca di beranda kronologi?</string>
<string name="settings_popup_notification">Untuk pemberitahuan yang belum dibaca?</string>
<!-- CACHE -->
@ -423,45 +422,39 @@
<string name="owner_cached_toots_empty">No toots were found in database. Please, use the synchronize button from the menu to retrieve them.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Data terekam</string>
<string name="privacy_data">"
Hanya informasi dasar dari akun yang tersimpan pada perangkat.
<string name="privacy_data"> Hanya informasi dasar dari akun yang tersimpan pada perangkat.
Data ini sangat rahasia dan hanya bisa digunakan oleh aplikasi.
Menghapus aplikasi segera menghapus data ini.\n
&#9888; masuk dan kata sandi tidak pernah disimpan. Mereka hanya digunakan selama otentikasi aman (SSL) dengan sebuah tuntutan.
"</string>
</string>
<string name="privacy_authorizations_title">Izin:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: Digunakan untuk mendeteksi perangkat terhubung ke jaringan WIFI.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: Digunakan untuk mendeteksi perangkat terhubung ke jaringan WIFI.\n
- <b>INTERNET</b>: Digunakan untuk menanyakan suatu hal.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: Digunakan untuk menyimpan media atau memindahkan aplikasi ke kartu SD.\n
- <b>READ_EXTERNAL_STORAGE</b>: Digunakan untuk menambahkan media ke kutipan.\n
- <b>BOOT_COMPLETED</b>: Digunakan untuk memulai layanan pemberitahuan.\n
- <b>WAKE_LOCK</b>: Digunakan selama layanan pemberitahuan.
"</string>
</string>
<string name="privacy_API_authorizations_title">Izin API:</string>
<string name="privacy_API_authorizations">"
- <b>Read</b>: Membaca data.\
<string name="privacy_API_authorizations"> - <b>Read</b>: Membaca data.\
- <b>Write</b>: Posting status dan unggah media untuk status.\n
- <b>Follow</b>: Ikuti, berhenti ikuti, blokir, buka blokir.\n\n
<b>&#9888; Tindakan ini hanya saat pengguna memintanya.</b>
"</string>
</string>
<string name="privacy_API_title">Pelacakan dan Perpustakaan</string>
<string name="privacy_API">"
Aplikasi <b>tidak menggunakan alat pelacak</b> (pengukuran pemirsa, kesalahan pelaporan, dll.) dan tidak berisi iklan apapun.\n\n
<string name="privacy_API"> Aplikasi <b>tidak menggunakan alat pelacak</b> (pengukuran pemirsa, kesalahan pelaporan, dll.) dan tidak berisi iklan apapun.\n\n
Penggunaan perpustakaan diminimalkan: \n
- <b>Luncuran</b>: Untuk mengelola media\n
- <b>Kerja Android</b>: Untuk mengelola layanan\n
- <b>Tampilan Foto</b>: Untuk mengelola gambar\n
"</string>
</string>
<string name="privacy_API_yandex_title">Terjemahan dari kutipan</string>
<string name="privacy_API_yandex_authorizations">"
Aplikasi ini menawarkan kemampuan untuk menerjemahkan kutipan menggunakan perangkat lokal dan API Yandex.\n
<string name="privacy_API_yandex_authorizations"> Aplikasi ini menawarkan kemampuan untuk menerjemahkan kutipan menggunakan perangkat lokal dan API Yandex.\n
Yandex memiliki kebijakan privasi yang tepat yang dapat ditemukan disini:
https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
Terima kasih untuk:
"</string>
</string>
<string name="thanks_text_dev"> Terima kasih untuk:
</string>
<string name="filter_regex">Saring dengan ekspresi reguler</string>
<string name="search">Cari</string>
<string name="delete">Hapus</string>
@ -482,15 +475,14 @@ https://yandex.ru/legal/confidential/?lang=en
<string name="account_moved_to">%1$s telah dipindahkan ke%2$s</string>
<string name="show_boost_count">Tampilkan dorongan/jumlah favorit</string>
<string name="issue_login_title">Otentikasi tidak bekerja?</string>
<string name="issue_login_message">"
<b>Disini ada beberapa pemeriksaan untuk membantu:
<string name="issue_login_message"><b>Disini ada beberapa pemeriksaan untuk membantu:
</b>\n\n
- Periksa bahwa tidak ada kealahan dalam pengejaan contoh nama\n\n
- Periksa bahwa contoh tidak down\n\n
- Jika anda menggunakan two-factor authentication (2FA), gunakan link dibawah ini (begitu nama contoh terisi)\n\n
- Anda juga dapat menggunakan link tersebut tanpa menggunakan 2FA\n\n
- Jika hal tersebut tidak bekerja, anda dapat melaporkan masalah tersebut pada Github di https://github.com/stom79/mastalab/issues
"</string>
</string>
<string name="media_ready">Media telah berhasil dimuat. Klik disini untuk menampilkannya.</string>
<string name="data_export_start">Tindakan cukup lama, Anda akan mendapatkan notifikasi ketika tindakan ini telah selesai.</string>
<string name="data_export_running">Masih berjalan, tunggu sebentar…</string>
@ -676,17 +668,14 @@ https://yandex.ru/legal/confidential/?lang=en
<item>1 day</item>
<item>1 week</item>
</string-array>
<string name="showcase_instance">"
In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
<string name="showcase_instance"> In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
You can start writing first letters and names will be suggested.\n\n
⚠ The Login button will only work if the instance name is valid and the instance is up!
"</string>
<string name="showcase_uid">"
In this field, write the email that is attached to your Mastodon account.
"</string>
<string name="showcase_pwd">"
Last step is to enter your password and click on Login.
"</string>
</string>
<string name="showcase_uid"> In this field, write the email that is attached to your Mastodon account.
</string>
<string name="showcase_pwd"> Last step is to enter your password and click on Login.
</string>
<string name="more_information">More information</string>
<string name="showcase_2FA">If you use 2FA (Two-factor authentication), you need to use this link.\nYou can also use it if you do not want to enter your credentials here.</string>
<!-- languages not translated -->
@ -707,6 +696,7 @@ https://yandex.ru/legal/confidential/?lang=en
<string name="some_words_any">Any of these words (space-separated)</string>
<string name="some_words_all">All these words (space-separated)</string>
<string name="some_words_none">None of these words (space-separated)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Change column name</string>
<string name="no_misskey_instance">No Misskey instances</string>
<string name="misskey_instance">Misskey instance</string>
@ -851,6 +841,9 @@ https://yandex.ru/legal/confidential/?lang=en
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="other">%d votes</item>
</plurals>

View File

@ -171,10 +171,10 @@
<string name="toot_reply_content_title">Stai rispondendo a questo toot:</string>
<string name="toot_sensitive">Contenuto sensibile?</string>
<string-array name="toot_visibility">
<item>Posta nella timeline pubblica</item>
<item>Non postare nella timeline pubblica</item>
<item>Posta solo nei follower</item>
<item>Posta solo agli utenti menzionati</item>
<item>Pubblica nella timeline pubblica</item>
<item>Non pubblicare nella timeline pubblica</item>
<item>Pubblica solo verso i follower</item>
<item>Pubblica solo verso gli utenti menzionati</item>
</string-array>
<string name="no_draft">Nessuna bozza!</string>
<string name="choose_toot">Seleziona un toot</string>
@ -213,10 +213,10 @@
<string name="remove_scheduled">Eliminare toot programmato?</string>
<string name="media_count">Media: %d</string>
<string name="toot_scheduled">Il toot è stato programmato!</string>
<string name="toot_scheduled_date">La data di programmazione deve essere maggiore dell\'ora corrente!</string>
<string name="warning_battery">Il risparmio batteria è attivato! Potrebbe non funzionare correttamente.</string>
<string name="toot_scheduled_date">La data di programmazione deve essere successiva all\'ora corrente!</string>
<string name="warning_battery">Il risparmio batteria è attivo! Potrebbe non funzionare correttamente.</string>
<!-- timed mute -->
<string name="timed_mute_date_error">Il tempo per il silenziamento deve essere maggiore di un minuto.</string>
<string name="timed_mute_date_error">Il tempo di silenziamento deve essere maggiore di un minuto.</string>
<string name="timed_mute_date">%1$s è stato silenziato fino al %2$s.\n Puoi smettere di silenziare questo account dalla sua pagina di profilo.</string>
<string name="timed_mute_profile">%1$s è silenziato fino al%2$s.\n Fai clic qui per non silenziare l\'account.</string>
<!-- Notifications -->
@ -231,8 +231,8 @@
<item quantity="other">e %d altre notifiche</item>
</plurals>
<plurals name="other_notif_hometimeline">
<item quantity="one">e un altro toot per scoprire</item>
<item quantity="other">e un altro toot per scoprire</item>
<item quantity="one">e un altro toot da scoprire</item>
<item quantity="other">e altri %d toot da scoprire</item>
</plurals>
<plurals name="likes">
<item quantity="one">%d mi piace</item>
@ -387,10 +387,9 @@
<string name="set_resize_picture">Ridimensiona foto</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Notifiche push</string>
<string name="settings_popup_message">"
Per favore, conferma le notifiche push che vuoi ricevere.
<string name="settings_popup_message">Per favore, conferma le notifiche push che vuoi ricevere.
Puoi abilitare o disabilitar queste notifiche dopo nelle impostazioni (Scheda notifiche).
"</string>
</string>
<string name="settings_popup_timeline">Per i toot non letti nella timeline home?</string>
<string name="settings_popup_notification">Per le notifiche non lette?</string>
<!-- CACHE -->
@ -427,44 +426,38 @@ Per favore, conferma le notifiche push che vuoi ricevere.
<string name="owner_cached_toots_empty">Nessun toot è stato trovato nel database. Per favore, utilizza il pulsante di sincronizzazione dal menu per recuperarli.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Dati registrati</string>
<string name="privacy_data">"
Sul dispositivo sono salvati sono le informazioni basilari degli account.
<string name="privacy_data"> Sul dispositivo sono salvati sono le informazioni basilari degli account.
TQuesti sono strettamente confidenziali e possono essere utilizzati sono dall\'applicazione.
Eliminando l\'applicazione rimuoverà immediatamente questi dati.\n
&#9888; Login e password non vengono mai salvati. Vengono solo usati durante una autenticazione sicura (SSL) con un istanza.
"</string>
</string>
<string name="privacy_authorizations_title">Permessi:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: Usato per determinare se il dispositivo è connesso ad una rete WIFI.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: Usato per determinare se il dispositivo è connesso ad una rete WIFI.\n
- <b>INTERNET</b>: Usato per le ricerche di un isatnza.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: Usato per salvare i media o per spostare l\'app su una scheda SD.\n
- <b>READ_EXTERNAL_STORAGE</b>: Usato per aggiungere media ai toot.\n
- <b>BOOT_COMPLETED</b>: Usato per avviare il servizio di notifica.\n
- <b>WAKE_LOCK</b>: Usato durante il servizio di notifica.
"</string>
</string>
<string name="privacy_API_authorizations_title">Permessi API:</string>
<string name="privacy_API_authorizations">"
- <b>Read</b>: Legge dati.\n
<string name="privacy_API_authorizations"> - <b>Read</b>: Legge dati.\n
- <b>Write</b>: Posta gli stati e carica i media per gli stati.\n
- <b>Follow</b>: Seguire, non seguire, bloccare, sbloccare.\n\n
<b>&#9888; Queste azioni sono utilizzare solo quando l\'utente le richiede.</b>
"</string>
</string>
<string name="privacy_API_title">Tracciamento e librerie</string>
<string name="privacy_API">"
L\'applicazione <b>non utilizza tool di tracciamento</b> (audience measurement, error reporting, ecc.) e non contiene pubblicità.\n\n
<string name="privacy_API"> L\'applicazione <b>non utilizza tool di tracciamento</b> (audience measurement, error reporting, ecc.) e non contiene pubblicità.\n\n
L\'utilizzo di librerie è minimizzato: \n
- <b>Glide</b>: Per gestire i media\n
- <b>Android-Job</b>: Per gestire i servizi\n
- <b>PhotoView</b>: Per gestire le immagini\n
"</string>
</string>
<string name="privacy_API_yandex_title">Traduzione del toot</string>
<string name="privacy_API_yandex_authorizations">"
L\'applicazione offre la possibilità di tradurre i toot utilizzando il dispositivo locale e le API di Yandex.\n
<string name="privacy_API_yandex_authorizations"> L\'applicazione offre la possibilità di tradurre i toot utilizzando il dispositivo locale e le API di Yandex.\n
Yandex ha la propria privacy policy che può essere trovata qui: https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
Grazie anche a:
"</string>
</string>
<string name="thanks_text_dev"> Grazie anche a:
</string>
<string name="filter_regex">Filtra tramite espressioni regolari</string>
<string name="search">Cerca</string>
<string name="delete">Elimina</string>
@ -485,14 +478,13 @@ Per favore, conferma le notifiche push che vuoi ricevere.
<string name="account_moved_to">%1$s è stato spostato su %2$s</string>
<string name="show_boost_count">Mostra conteggio ricondivisi/favoriti</string>
<string name="issue_login_title">L\'autenticazione non funziona?</string>
<string name="issue_login_message">"
<b>Qui ci sono alcuni controlli che possono aiutare:</b>\n\n
<string name="issue_login_message"> <b>Qui ci sono alcuni controlli che possono aiutare:</b>\n\n
- Controlla che non ci siano errori di trascrizione nel nome dell\'istanza\n\n
- Controlla che la tua istanza sia raggiungibile\n\n
- Se usi l\'autenticazione a due fattori (2FA), usa il link in basso (una volta che il nome dell\'istanza è stato inserito)\n\n
- Puoi anche usare questo link senza usare la 2FA\n\n
- Se ancora continua a non funzionare, apri un issue su Github all\'indirizzo https://github.com/stom79/mastalab/issues
"</string>
</string>
<string name="media_ready">Il media è stato caricato. Fai clic qui per visualizzarlo.</string>
<string name="data_export_start">Questa azione richiede molto tempo. Verrai avvisato quando sarà finita.</string>
<string name="data_export_running">Ancora in corso, attendere prego…</string>
@ -678,17 +670,14 @@ Per favore, conferma le notifiche push che vuoi ricevere.
<item>1 giorno</item>
<item>1 settimana</item>
</string-array>
<string name="showcase_instance">"
In questo campo, devi scrivere il nome della tua istanza.\nPer esempio, se hai creato il tuo account su https://mastodon.social\nscrivi solo <b>mastodon.social</b> (senza https://)\n
<string name="showcase_instance"> In questo campo, devi scrivere il nome della tua istanza.\nPer esempio, se hai creato il tuo account su https://mastodon.social\nscrivi solo <b>mastodon.social</b> (senza https://)\n
Puoi iniziare a digitare le prime lettere ed i nomi verranno suggeriti.\n\n
⚠ Il pulsante di accesso funzionerà solo se il nome dell\'istanza è valido e l\'istanza è online!
"</string>
<string name="showcase_uid">"
In questo campo, scrivi l\'indirizzo email collegato al tuo account Mastodon.
"</string>
<string name="showcase_pwd">"
L\'ultimo passaggio è inserire la tua password e premere Accedi.
"</string>
</string>
<string name="showcase_uid"> In questo campo, scrivi l\'indirizzo email collegato al tuo account Mastodon.
</string>
<string name="showcase_pwd"> L\'ultimo passaggio è inserire la tua password e premere Accedi.
</string>
<string name="more_information">Più informazioni</string>
<string name="showcase_2FA">Se utilizzi il 2FA (Autenticazione a 2 fattori), hai bisogno di questo collegamento.\nPuoi anche usarlo se non vuoi inserire le tue credenziali qui.</string>
<!-- languages not translated -->
@ -709,6 +698,7 @@ Per favore, conferma le notifiche push che vuoi ricevere.
<string name="some_words_any">Qualsiasi tra queste parole (separate da spazi)</string>
<string name="some_words_all">Tutte queste parole (separate da spazi)</string>
<string name="some_words_none">Nessuna di queste parole (separate da spazi)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Rinomina colonna</string>
<string name="no_misskey_instance">Nessuna istanza Misskey</string>
<string name="misskey_instance">Istanza Misskey</string>
@ -849,10 +839,13 @@ Per favore, conferma le notifiche push che vuoi ricevere.
<string name="gnu_instance">Istanza GNU</string>
<string name="cached_status">Stato in cache</string>
<string name="set_forward_tags">Inoltra le etichette nelle risposte</string>
<string name="set_long_press_media">Long press to store media</string>
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_long_press_media">Premere a lungo per salvare media</string>
<string name="set_blur_sensitive">Sfoca media con contenuti sensibili</string>
<string name="set_display_timeline_in_list">Mostra le timeline in un elenco</string>
<string name="display_timeline">Mostra timeline</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d voto</item>
<item quantity="other">%d voti</item>

View File

@ -300,14 +300,14 @@
<string name="set_notif_follow_share">トゥートがブーストされたときに通知</string>
<string name="set_notif_follow_add">トゥートがお気に入りに追加されたときに通知</string>
<string name="set_notif_follow_mention">メンションを受け取ったときに通知</string>
<string name="set_notif_follow_poll">投票の終了を通知する</string>
<string name="set_notif_follow_poll">投票が終了したら通知する</string>
<string name="set_share_validation">ブースト前に確認ダイアログを表示する</string>
<string name="set_share_validation_fav">お気に入りに追加する前に確認ダイアログを表示する</string>
<string name="set_wifi_only">WIFI接続時のみ通知</string>
<string name="set_notify">通知する</string>
<string name="set_notify">通知する</string>
<string name="set_notif_silent">サイレント通知</string>
<string name="set_night_mode">夜間モード</string>
<string name="set_nsfw_timeout">NSFWビューのタイムアウト秒、0はオフを意味します</string>
<string name="set_nsfw_timeout">NSFWビューのタイムアウト(秒、0でオフ)</string>
<string name="settings_title_profile">プロフィールを編集</string>
<string name="settings_title_custom_sharing">カスタム共有</string>
<string name="settings_custom_sharing_url">カスタム共有URL&#8230;</string>
@ -332,8 +332,8 @@
<string name="use_cookies">サードパーティのCookieを許可する</string>
<string name="settings_ui_layout">タイムラインのレイアウト: </string>
<string-array name="battery_profiles">
<item>通常のバッテリー消費</item>
<item>程度のバッテリー消費</item>
<item>バッテリー消費</item>
<item>中バッテリー消費</item>
<item>低バッテリー消費</item>
</string-array>
<string-array name="settings_menu_tabs">
@ -379,13 +379,12 @@
<string name="request_sent">リクエスト送信</string>
<string name="followed_by">あなたをフォロー</string>
<string name="action_search">検索</string>
<string name="set_capitalize">返信用の最初の文字列</string>
<string name="set_capitalize">返信で最初の文字を大文字にする</string>
<string name="set_resize_picture">画像をリサイズ</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">プッシュ通知</string>
<string name="settings_popup_message">"
受信したいプッシュ通知を確認してください。
後でこれらの通知を設定で有効または無効にすることができます(通知タブ)。 "</string>
<string name="settings_popup_message">受信したいプッシュ通知を確認してください。
後でこれらの通知を設定で有効または無効にすることができます(通知タブ)。 </string>
<string name="settings_popup_timeline">ホームタイムラインでの未読トゥートは?</string>
<string name="settings_popup_notification">未読の通知は?</string>
<!-- CACHE -->
@ -422,38 +421,32 @@
<string name="owner_cached_toots_empty">トゥートがデータベースに見つかりませんでした。取得するには、メニューから同期ボタンを使用してください。</string>
<!-- PRIVACY -->
<string name="privacy_data_title">記録されたデータ</string>
<string name="privacy_data">"
アカウントの基本情報のみがデバイスに保存されます。
<string name="privacy_data">アカウントの基本情報のみがデバイスに保存されます。
         これらのデータは厳密に機密情報であり、アプリケーションによってのみ使用できます。
         アプリケーションを削除すると、すぐにこれらのデータが削除されます。\ n
         ⚠ログインとパスワードは保存されません。 これらは、インスタンスとのセキュア認証SSL中にのみ使用されます。 "</string>
         ⚠ログインとパスワードは保存されません。 これらは、インスタンスとのセキュア認証SSL中にのみ使用されます。 </string>
<string name="privacy_authorizations_title">権限:</string>
<string name="privacy_authorizations">"
- <b> ACCESS_NETWORK_STATE </b>端末がWIFIネットワークに接続されているかどうかを検出するために使用します。\n
<string name="privacy_authorizations"> - <b> ACCESS_NETWORK_STATE </b>端末がWIFIネットワークに接続されているかどうかを検出するために使用します。\n
        - <b>インターネット</b>:インスタンスへのクエリに使用されます。\n
        - <b> WRITE_EXTERNAL_STORAGE </b>メディアを保存したり、SDカードにアプリを移動したりするのに使用します。\n
        - <b> READ_EXTERNAL_STORAGE </b>:トゥートにメディアを追加するために使用します。\n
        - <b> BOOT_COMPLETED </b>:通知サービスを開始するために使用されます。\n
        - <b> WAKE_LOCK </b>:通知サービスで使用されます。 "</string>
        - <b> WAKE_LOCK </b>:通知サービスで使用されます。 </string>
<string name="privacy_API_authorizations_title">API権限</string>
<string name="privacy_API_authorizations">"
- <b>読み取り</b>:データを読み取ります。\n
<string name="privacy_API_authorizations"> - <b>読み取り</b>:データを読み取ります。\n
        - <b>書き込み</b>:トゥートの投稿とメディアのアップロードを行います。\n
        - <b>フォロー</b>:フォロー、フォロー解除、ブロック、ブロック解除を行います。\n\n
        <b>&#9888; これらの操作は、ユーザーが要求したときにのみ実行されます。</b> "</string>
        <b>&#9888; これらの操作は、ユーザーが要求したときにのみ実行されます。</b> </string>
<string name="privacy_API_title">トラッキングとライブラリ</string>
<string name="privacy_API">"
アプリケーションは<b>トラッキングツールを使用していません</b>(オーディエンス測定、エラー報告など)。広告は含まれていません。\n\n
<string name="privacy_API"> アプリケーションは<b>トラッキングツールを使用していません</b>(オーディエンス測定、エラー報告など)。広告は含まれていません。\n\n
        ライブラリの使用は最小限です:\n
        - <b>Glide</b>: メディアの管理\n
        - <b>Android-Job</b>: サービスの管理\n
        - <b>PhotoView</b>: 画像の管理\n "</string>
        - <b>PhotoView</b>: 画像の管理\n </string>
<string name="privacy_API_yandex_title">トゥートの翻訳</string>
<string name="privacy_API_yandex_authorizations">"
このアプリケーションは、デバイスのロケールとYandex APIを使用してトゥートを翻訳する機能を提供します。\n
        Yandexは適切なプライバシーポリシーを持っています: https://yandex.ru/legal/confidential/?lang=ja "</string>
<string name="thanks_text_dev">"
感謝: "</string>
<string name="privacy_API_yandex_authorizations"> このアプリケーションは、デバイスのロケールとYandex APIを使用してトゥートを翻訳する機能を提供します。\n
        Yandexは適切なプライバシーポリシーを持っています: https://yandex.ru/legal/confidential/?lang=ja </string>
<string name="thanks_text_dev"> 感謝: </string>
<string name="filter_regex">正規表現でフィルタする</string>
<string name="search">検索</string>
<string name="delete">削除</string>
@ -474,14 +467,13 @@
<string name="account_moved_to">%1$s は %2$s へ引越しました</string>
<string name="show_boost_count">ブースト/お気に入りの数を表示</string>
<string name="issue_login_title">認証が機能していませんか?</string>
<string name="issue_login_message">"
<b>役立つかもしれない確認事項:</b>\n\n
<string name="issue_login_message"> <b>役立つかもしれない確認事項:</b>\n\n
- インスタンス名の記述に間違いが無いかをチェック\n\n
- インスタンスがダウンしていないかをチェック\n\n
- もし2段階認証2FAを利用している場合は、下部のリンクを使用してください先にインスタンス名を入力\n\n
- このリンクは、2FAを利用していなくても使用することができます\n\n
- もしまだ解決しない場合、Githubhttps://github.com/stom79/mastalab/issuesにissueを投稿してください
"</string>
</string>
<string name="media_ready">メディアが読み込まれました。表示するにはここをクリックします。</string>
<string name="data_export_start">この操作には時間がかかることがあります。完了すると通知されます。</string>
<string name="data_export_running">実行中です。お待ちください...</string>
@ -576,8 +568,8 @@
<string name="channel_notif_media">メディアのダウンロード</string>
<string name="set_notif_sound">通知サウンドを変更</string>
<string name="select_sound">音の選択</string>
<string name="set_enable_time_slot">タイムスロットを有効化</string>
<string name="how_to_videos">操作解説ビデオ</string>
<string name="set_enable_time_slot">時間帯管理を有効化</string>
<string name="how_to_videos">操作解説動画</string>
<string name="retrieve_remote_conversation">リモートスレッドの取得中です!</string>
<string name="no_blocked_domain">ブロックしたドメインはありません!</string>
<string name="unblock_domain_confirm">ドメインのブロックを解除</string>
@ -591,7 +583,7 @@
<string name="comment">コメント</string>
<string name="peertube_instance">Peertubeインスタンス</string>
<string name="set_display_direct">プライベートメッセージのタイムラインを表示</string>
<string name="set_keep_background_process">アプリが閉じているときもバックグラウンドプロセスを保持</string>
<string name="set_keep_background_process">アプリが閉じているときもバックグラウンドプロセスを実行する</string>
<string name="no_comments">右上のボタンをタップして最初のコメントを投稿しましょう!</string>
<string name="number_view_video">%s 回再生</string>
<string name="duration_video">長さ: %s</string>
@ -611,10 +603,10 @@
<string name="channels">チャンネル</string>
<string name="set_display_emoji">Emoji Oneを使用する</string>
<string name="information">情報</string>
<string name="set_display_card">全てのトゥートのプレビューを表示</string>
<string name="set_display_card">全てのトゥートでプレビューを表示する</string>
<string name="thanks_text_ux">新しいUX/UIデザイナー</string>
<string name="set_old_direct_timeline">Mastodon 2.6以前のダイレクトタイムラインを使用</string>
<string name="set_display_video_preview">ビデオプレビューを表示</string>
<string name="set_old_direct_timeline">Mastodon 2.6以前のダイレクトタイムラインを使用する</string>
<string name="set_display_video_preview">動画プレビューを表示する</string>
<string name="thanks_text_support">Gitlabでのサポート</string>
<string name="action_bug_report">バグ報告</string>
<string name="no_mail_client">メールクライアントがインストールされていません。</string>
@ -667,13 +659,13 @@
<item>1 日</item>
<item>1 週間</item>
</string-array>
<string name="showcase_instance">" このフィールドにはサーバーのホスト名を入力してください。\n例えば、https://mastodon.socialでアカウントを作成した場合\n<b>mastodon.social</b>とだけ入力してください(https://を除く)\n
<string name="showcase_instance"> このフィールドにはサーバーのホスト名を入力してください。\n例えば、https://mastodon.socialでアカウントを作成した場合\n<b>mastodon.social</b>とだけ入力してください(https://を除く)\n
最初の文字を入力するとそれに続く名前がサジェストされます。\n\n
⚠ログインボタンはサーバー名が有効で、サーバーが稼働しているときのみ有効です!"</string>
<string name="showcase_uid">" このフィールドには、Mastodonアカウントに関連付けられたメールアドレスを入力してください。
"</string>
<string name="showcase_pwd">" 最後にパスワードを入力してログインをタップしてください。
"</string>
⚠ログインボタンはサーバー名が有効で、サーバーが稼働しているときのみ有効です!</string>
<string name="showcase_uid"> このフィールドには、Mastodonアカウントに関連付けられたメールアドレスを入力してください。
</string>
<string name="showcase_pwd"> 最後にパスワードを入力してログインをタップしてください。
</string>
<string name="more_information">詳しい情報</string>
<string name="showcase_2FA">2FA(2段階認証)を利用している場合、このリンクを使用してください。\nログイン情報をここに入力したくない場合にも利用できます。</string>
<!-- languages not translated -->
@ -694,6 +686,7 @@
<string name="some_words_any">これらの単語を除く(スペースで区切り)</string>
<string name="some_words_all">含める単語(スペースで区切り)</string>
<string name="some_words_none">除外する単語(スペースで区切り)</string>
<string name="some_tags">フィルターする単語を追加(スペースで区切り)</string>
<string name="change_tag_column">カラムの名前を変更</string>
<string name="no_misskey_instance">Misskeyのインスタンスはありません</string>
<string name="misskey_instance">Misskeyインスタンス</string>
@ -811,7 +804,7 @@
<string name="settings_category_notif_customize">カスタマイズ</string>
<string name="settings_category_notif_categories">カテゴリ</string>
<string name="settings_category_notif_news">ニュース</string>
<string name="settings_category_notif_time_slot">タイムスロット</string>
<string name="settings_category_notif_time_slot">時間帯</string>
<string name="settings_category_notif_advanced">上級者向け</string>
<string name="set_display_new_badge">未読のトゥートに「new」バッジを表示する</string>
<string name="set_display_peertube">Peertubeのタイムラインを表示する</string>
@ -833,11 +826,14 @@
<string name="set_sensitive_content">メディアを常に閲覧注意としてマークする</string>
<string name="gnu_instance">GNUインスタンス</string>
<string name="cached_status">キャッシュされたステータス</string>
<string name="set_forward_tags">Forward tags in replies</string>
<string name="set_long_press_media">Long press to store media</string>
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_forward_tags">返信でタグを先頭に付加する</string>
<string name="set_long_press_media">長押しでメディアを保存</string>
<string name="set_blur_sensitive">閲覧注意のメディアをぼかす</string>
<string name="set_display_timeline_in_list">リストでタイムラインを表示する</string>
<string name="display_timeline">タイムラインを表示</string>
<string name="set_display_bot_icon">トゥート内でbotアカウントをマークする</string>
<string name="add_tags">タグ管理</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="other">%d票</item>
</plurals>

View File

@ -320,7 +320,7 @@
<string name="set_save_changes">Sekles ibeddilen</string>
<string name="set_header_picture_overlay">Choose a header picture</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="set_automatically_split_toot">Automatically split toots in replies when chars are over:</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_time_from">Ger</string>
@ -387,10 +387,9 @@
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push notifications</string>
<string name="settings_popup_message">"
Please, confirm push notifications that you want to receive.
<string name="settings_popup_message"> Please, confirm push notifications that you want to receive.
You can enable or disable these notifications later in settings (Notifications tab).
"</string>
</string>
<string name="settings_popup_timeline">For unread toots in home time-line?</string>
<string name="settings_popup_notification">For unread notifications?</string>
<!-- CACHE -->
@ -427,44 +426,38 @@
<string name="owner_cached_toots_empty">No toots were found in database. Please, use the synchronize button from the menu to retrieve them.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Recorded data</string>
<string name="privacy_data">"
Only basic information from accounts are stored on the device.
<string name="privacy_data"> Only basic information from accounts are stored on the device.
These data are strictly confidential and can only be used by the application.
Deleting the application immediately removes these data.\n
&#9888; Login and passwords are never stored. They are only used during a secure authentication (SSL) with an instance.
"</string>
</string>
<string name="privacy_authorizations_title">Issirgen:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: Used to detect if the device is connected to a WIFI network.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: Used to detect if the device is connected to a WIFI network.\n
- <b>INTERNET</b>: Used for queries to an instance.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: Used to store media or to move the app on a SD card.\n
- <b>READ_EXTERNAL_STORAGE</b>: Used to add media to toots.\n
- <b>BOOT_COMPLETED</b>: Used to start the notification service.\n
- <b>WAKE_LOCK</b>: Used during the notification service.
"</string>
</string>
<string name="privacy_API_authorizations_title">API permissions:</string>
<string name="privacy_API_authorizations">"
- <b>Read</b>: Read data.\n
<string name="privacy_API_authorizations"> - <b>Read</b>: Read data.\n
- <b>Write</b>: Post statuses and upload media for statuses.\n
- <b>Follow</b>: Follow, unfollow, block, unblock.\n\n
<b>&#9888; These actions are carried out only when user requests them.</b>
"</string>
</string>
<string name="privacy_API_title">Tracking and Libraries</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
<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
"</string>
</string>
<string name="privacy_API_yandex_title">Translation of toots</string>
<string name="privacy_API_yandex_authorizations">"
The application offers the ability to translate toots using the locale of the device and the Yandex API.\n
<string name="privacy_API_yandex_authorizations"> The application offers the ability to translate toots using the locale of the device and the Yandex API.\n
Yandex has its proper privacy-policy which can be found here: https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
Tanmirt i:
"</string>
</string>
<string name="thanks_text_dev"> Tanmirt i:
</string>
<string name="filter_regex">Filter out by regular expressions</string>
<string name="search">Nadi</string>
<string name="delete">Kkes</string>
@ -485,14 +478,13 @@
<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="issue_login_message">"
<b>Here are some checks that might help:</b>\n\n
<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 GitLab at https://gitlab.com/tom79/mastalab/issues
"</string>
</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>
@ -678,17 +670,14 @@
<item>1 wass</item>
<item>1 umalas</item>
</string-array>
<string name="showcase_instance">"
In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
<string name="showcase_instance"> In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
You can start writing first letters and names will be suggested.\n\n
⚠ The Login button will only work if the instance name is valid and the instance is up!
"</string>
<string name="showcase_uid">"
In this field, write the email that is attached to your Mastodon account.
"</string>
<string name="showcase_pwd">"
Last step is to enter your password and click on Login.
"</string>
</string>
<string name="showcase_uid"> In this field, write the email that is attached to your Mastodon account.
</string>
<string name="showcase_pwd"> Last step is to enter your password and click on Login.
</string>
<string name="more_information">Ugar n telγut</string>
<string name="showcase_2FA">If you use 2FA (Two-factor authentication), you need to use this link.\nYou can also use it if you do not want to enter your credentials here.</string>
<!-- languages not translated -->
@ -709,6 +698,7 @@
<string name="some_words_any">Any of these words (space-separated)</string>
<string name="some_words_all">All these words (space-separated)</string>
<string name="some_words_none">None of these words (space-separated)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Beddel isem n wejgu</string>
<string name="no_misskey_instance">No Misskey instances</string>
<string name="misskey_instance">Misskey instance</string>
@ -853,6 +843,9 @@
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d vote</item>
<item quantity="other">%d votes</item>

View File

@ -186,10 +186,10 @@
<string name="instance_no_description">No description available!</string>
<!-- About -->
<string name="about_vesrion">Release %1$s</string>
<string name="about_developer">Developer:</string>
<string name="about_license">License: </string>
<string name="about_developer">개발자:</string>
<string name="about_license">라이센스: </string>
<string name="about_license_action">GNU GPL V3</string>
<string name="about_code">Source code: </string>
<string name="about_code">소스 코드: </string>
<string name="about_yandex">Translation of toots:</string>
<string name="about_thekinrar">Search instances:</string>
<string name="about_thekinrar_action">instances.social</string>
@ -316,7 +316,7 @@
<string name="set_save_changes">Save changes</string>
<string name="set_header_picture_overlay">Choose a header picture</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="set_automatically_split_toot">Automatically split toots in replies when chars are over:</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_time_from">Between</string>
@ -337,8 +337,8 @@
<item>Low battery drain</item>
</string-array>
<string-array name="settings_menu_tabs">
<item>Tabs</item>
<item>Menu</item>
<item></item>
<item>메뉴</item>
<item>Tabs and menu</item>
</string-array>
<string-array name="settings_translation">
@ -350,7 +350,7 @@
<string-array name="settings_theme">
<item>Dark</item>
<item>Light</item>
<item>Black</item>
<item>블랙</item>
</string-array>
<string-array name="settings_resize_picture">
<item>No</item>
@ -383,10 +383,9 @@
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push notifications</string>
<string name="settings_popup_message">"
Please, confirm push notifications that you want to receive.
<string name="settings_popup_message"> Please, confirm push notifications that you want to receive.
You can enable or disable these notifications later in settings (Notifications tab).
"</string>
</string>
<string name="settings_popup_timeline">For unread toots in home time-line?</string>
<string name="settings_popup_notification">For unread notifications?</string>
<!-- CACHE -->
@ -395,7 +394,7 @@
<string name="cache_units">Mb</string>
<string name="toast_cache_clear">Cache was cleared! %1$s were released</string>
<!-- ACTIVITY CUSTOM SHARING -->
<string name="title_header_custom_sharing">Title</string>
<string name="title_header_custom_sharing">제목</string>
<string name="title_hint_custom_sharing">Title&#8230;</string>
<string name="description_header_custom_sharing">Description</string>
<string name="description_hint_custom_sharing">Description&#8230;</string>
@ -423,50 +422,44 @@
<string name="owner_cached_toots_empty">No toots were found in database. Please, use the synchronize button from the menu to retrieve them.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Recorded data</string>
<string name="privacy_data">"
Only basic information from accounts are stored on the device.
<string name="privacy_data"> Only basic information from accounts are stored on the device.
These data are strictly confidential and can only be used by the application.
Deleting the application immediately removes these data.\n
&#9888; Login and passwords are never stored. They are only used during a secure authentication (SSL) with an instance.
"</string>
</string>
<string name="privacy_authorizations_title">Permissions:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: Used to detect if the device is connected to a WIFI network.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: Used to detect if the device is connected to a WIFI network.\n
- <b>INTERNET</b>: Used for queries to an instance.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: Used to store media or to move the app on a SD card.\n
- <b>READ_EXTERNAL_STORAGE</b>: Used to add media to toots.\n
- <b>BOOT_COMPLETED</b>: Used to start the notification service.\n
- <b>WAKE_LOCK</b>: Used during the notification service.
"</string>
</string>
<string name="privacy_API_authorizations_title">API permissions:</string>
<string name="privacy_API_authorizations">"
- <b>Read</b>: Read data.\n
<string name="privacy_API_authorizations"> - <b>Read</b>: Read data.\n
- <b>Write</b>: Post statuses and upload media for statuses.\n
- <b>Follow</b>: Follow, unfollow, block, unblock.\n\n
<b>&#9888; These actions are carried out only when user requests them.</b>
"</string>
</string>
<string name="privacy_API_title">Tracking and Libraries</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
<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
"</string>
</string>
<string name="privacy_API_yandex_title">Translation of toots</string>
<string name="privacy_API_yandex_authorizations">"
The application offers the ability to translate toots using the locale of the device and the Yandex API.\n
<string name="privacy_API_yandex_authorizations"> The application offers the ability to translate toots using the locale of the device and the Yandex API.\n
Yandex has its proper privacy-policy which can be found here: https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
Thank you to:
"</string>
</string>
<string name="thanks_text_dev"> Thank you to:
</string>
<string name="filter_regex">Filter out by regular expressions</string>
<string name="search">Search</string>
<string name="delete">Delete</string>
<string name="search">검색</string>
<string name="delete">삭제</string>
<string name="fetch_more_toots">Fetch more toots…</string>
<!-- About lists -->
<string name="action_lists">Lists</string>
<string name="action_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>
@ -481,14 +474,13 @@
<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="issue_login_message">"
<b>Here are some checks that might help:</b>\n\n
<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 GitLab at https://gitlab.com/tom79/mastalab/issues
"</string>
</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>
@ -505,8 +497,8 @@
<string name="proxy_enable">Enable proxy?</string>
<string name="poxy_host">Host</string>
<string name="poxy_port">Port</string>
<string name="poxy_login">Login</string>
<string name="poxy_password">Password</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>
@ -609,15 +601,15 @@
<string name="bookmark_add_peertube">The video has been added to bookmarks!</string>
<string name="bookmark_remove_peertube">The video has been removed from bookmarks!</string>
<string name="bookmark_peertube_empty">There is no Peertube videos in your favourites!</string>
<string name="channel">Channel</string>
<string name="channel">채널</string>
<string name="no_peertube_channels">No Peertube channels</string>
<string name="no_peertube_instances">No Peertube instances</string>
<string name="no_mastodon_instances">No Mastodon instances</string>
<string name="no_lists">No lists</string>
<string name="videos">Videos</string>
<string name="channels">Channels</string>
<string name="videos">동영상</string>
<string name="channels">채널</string>
<string name="set_display_emoji">Use Emoji One</string>
<string name="information">Information</string>
<string name="information">정보</string>
<string name="set_display_card">Display previews in all toots</string>
<string name="thanks_text_ux">New UX/UI designer</string>
<string name="set_old_direct_timeline">Use the direct timeline prior to Mastodon 2.6</string>
@ -654,7 +646,7 @@
<string name="add_new">Add new</string>
<string name="mastohost_logo">MastoHost logo</string>
<string name="emoji_picker">Emoji picker</string>
<string name="refresh">Refresh</string>
<string name="refresh">새로고침</string>
<string name="expand_conversation">Expand the conversation</string>
<string name="remove_account">Remove an account</string>
<string name="delete_domain">Delete the blocked domain</string>
@ -667,24 +659,21 @@
<string name="media_description">Add description for media (for the visually impaired)</string>
<string-array name="filter_expire">
<item>Never</item>
<item>30 minutes</item>
<item>1 hour</item>
<item>6 hours</item>
<item>12 hours</item>
<item>1 day</item>
<item>1 week</item>
<item>30 </item>
<item>1 시간</item>
<item>6 시간</item>
<item>12 시간</item>
<item>1 </item>
<item>1 </item>
</string-array>
<string name="showcase_instance">"
In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
<string name="showcase_instance"> In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
You can start writing first letters and names will be suggested.\n\n
⚠ The Login button will only work if the instance name is valid and the instance is up!
"</string>
<string name="showcase_uid">"
In this field, write the email that is attached to your Mastodon account.
"</string>
<string name="showcase_pwd">"
Last step is to enter your password and click on Login.
"</string>
</string>
<string name="showcase_uid"> In this field, write the email that is attached to your Mastodon account.
</string>
<string name="showcase_pwd"> Last step is to enter your password and click on Login.
</string>
<string name="more_information">More information</string>
<string name="showcase_2FA">If you use 2FA (Two-factor authentication), you need to use this link.\nYou can also use it if you do not want to enter your credentials here.</string>
<!-- languages not translated -->
@ -705,6 +694,7 @@
<string name="some_words_any">Any of these words (space-separated)</string>
<string name="some_words_all">All these words (space-separated)</string>
<string name="some_words_none">None of these words (space-separated)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Change column name</string>
<string name="no_misskey_instance">No Misskey instances</string>
<string name="misskey_instance">Misskey instance</string>
@ -726,7 +716,7 @@
<string name="categories">Categories</string>
<string name="license">License</string>
<string name="category">Category</string>
<string name="language">Language</string>
<string name="language">언어</string>
<string name="peertube_nsfw">This video contains mature or explicit content</string>
<string name="peertube_enable_comments">Enable video comments</string>
<string name="update_video">Update video</string>
@ -785,8 +775,8 @@
<string name="all">All</string>
<string name="about_opencollective">Support the app</string>
<string name="more_about_opencollective">Open Collective enables groups to quickly set up a collective, raise funds and manage them transparently.</string>
<string name="copy_link">Copy link</string>
<string name="connect_instance">Connect</string>
<string name="copy_link">링크 복사</string>
<string name="connect_instance">연결</string>
<string name="set_normal">Normal</string>
<string name="set_compact">Compact</string>
<string name="set_console">Console</string>
@ -807,7 +797,7 @@
<string name="poll">Poll</string>
<string name="polls">Polls</string>
<string name="create_poll">Create a poll</string>
<string name="poll_choice_1">Choice 1</string>
<string name="poll_choice_1">선택 1</string>
<string name="poll_choice_2">Choice 2</string>
<string name="poll_choice_3">Choice 3</string>
<string name="poll_choice_4">Choice 4</string>
@ -820,10 +810,10 @@
<string name="notif_poll">A poll you have voted in has ended</string>
<string name="notif_poll_self">A poll you tooted has ended</string>
<string name="settings_category_notif_customize">Customize</string>
<string name="settings_category_notif_categories">Categories</string>
<string name="settings_category_notif_categories">카테고리</string>
<string name="settings_category_notif_news">News</string>
<string name="settings_category_notif_time_slot">Time slot</string>
<string name="settings_category_notif_advanced">Advanced</string>
<string name="settings_category_notif_advanced">고급</string>
<string name="set_display_new_badge">Display \'new\' badge on unread toots</string>
<string name="set_display_peertube">Display Peertube timeline</string>
<string name="peertube_menu">Peertube</string>
@ -849,6 +839,9 @@
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="other">%d votes</item>
</plurals>
@ -857,13 +850,13 @@
<item>Multiple choices</item>
</string-array>
<string-array name="poll_duration">
<item>5 minutes</item>
<item>30 minutes</item>
<item>1 hour</item>
<item>6 hours</item>
<item>1 day</item>
<item>3 days</item>
<item>7 days</item>
<item>5 </item>
<item>30 </item>
<item>1 시간</item>
<item>6 시간</item>
<item>1 </item>
<item>3 </item>
<item>7 </item>
</string-array>
<string-array name="settings_video_mode">
<item>Webview</item>

View File

@ -320,7 +320,7 @@
<string name="set_save_changes">Save changes</string>
<string name="set_header_picture_overlay">Choose a header picture</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="set_automatically_split_toot">Automatically split toots in replies when chars are over:</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_time_from">Between</string>
@ -387,10 +387,9 @@
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push notifications</string>
<string name="settings_popup_message">"
Please, confirm push notifications that you want to receive.
<string name="settings_popup_message"> Please, confirm push notifications that you want to receive.
You can enable or disable these notifications later in settings (Notifications tab).
"</string>
</string>
<string name="settings_popup_timeline">For unread toots in home time-line?</string>
<string name="settings_popup_notification">For unread notifications?</string>
<!-- CACHE -->
@ -427,44 +426,38 @@
<string name="owner_cached_toots_empty">No toots were found in database. Please, use the synchronize button from the menu to retrieve them.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Recorded data</string>
<string name="privacy_data">"
Only basic information from accounts are stored on the device.
<string name="privacy_data"> Only basic information from accounts are stored on the device.
These data are strictly confidential and can only be used by the application.
Deleting the application immediately removes these data.\n
&#9888; Login and passwords are never stored. They are only used during a secure authentication (SSL) with an instance.
"</string>
</string>
<string name="privacy_authorizations_title">Permissions:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: Used to detect if the device is connected to a WIFI network.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: Used to detect if the device is connected to a WIFI network.\n
- <b>INTERNET</b>: Used for queries to an instance.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: Used to store media or to move the app on a SD card.\n
- <b>READ_EXTERNAL_STORAGE</b>: Used to add media to toots.\n
- <b>BOOT_COMPLETED</b>: Used to start the notification service.\n
- <b>WAKE_LOCK</b>: Used during the notification service.
"</string>
</string>
<string name="privacy_API_authorizations_title">API permissions:</string>
<string name="privacy_API_authorizations">"
- <b>Read</b>: Read data.\n
<string name="privacy_API_authorizations"> - <b>Read</b>: Read data.\n
- <b>Write</b>: Post statuses and upload media for statuses.\n
- <b>Follow</b>: Follow, unfollow, block, unblock.\n\n
<b>&#9888; These actions are carried out only when user requests them.</b>
"</string>
</string>
<string name="privacy_API_title">Tracking and Libraries</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
<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
"</string>
</string>
<string name="privacy_API_yandex_title">Translation of toots</string>
<string name="privacy_API_yandex_authorizations">"
The application offers the ability to translate toots using the locale of the device and the Yandex API.\n
<string name="privacy_API_yandex_authorizations"> The application offers the ability to translate toots using the locale of the device and the Yandex API.\n
Yandex has its proper privacy-policy which can be found here: https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
Thank you to:
"</string>
</string>
<string name="thanks_text_dev"> Thank you to:
</string>
<string name="filter_regex">Filter out by regular expressions</string>
<string name="search">Search</string>
<string name="delete">Delete</string>
@ -485,14 +478,13 @@
<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="issue_login_message">"
<b>Here are some checks that might help:</b>\n\n
<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 GitLab at https://gitlab.com/tom79/mastalab/issues
"</string>
</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>
@ -678,17 +670,14 @@
<item>1 day</item>
<item>1 week</item>
</string-array>
<string name="showcase_instance">"
In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
<string name="showcase_instance"> In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
You can start writing first letters and names will be suggested.\n\n
⚠ The Login button will only work if the instance name is valid and the instance is up!
"</string>
<string name="showcase_uid">"
In this field, write the email that is attached to your Mastodon account.
"</string>
<string name="showcase_pwd">"
Last step is to enter your password and click on Login.
"</string>
</string>
<string name="showcase_uid"> In this field, write the email that is attached to your Mastodon account.
</string>
<string name="showcase_pwd"> Last step is to enter your password and click on Login.
</string>
<string name="more_information">More information</string>
<string name="showcase_2FA">If you use 2FA (Two-factor authentication), you need to use this link.\nYou can also use it if you do not want to enter your credentials here.</string>
<!-- languages not translated -->
@ -709,6 +698,7 @@
<string name="some_words_any">Any of these words (space-separated)</string>
<string name="some_words_all">All these words (space-separated)</string>
<string name="some_words_none">None of these words (space-separated)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Change column name</string>
<string name="no_misskey_instance">No Misskey instances</string>
<string name="misskey_instance">Misskey instance</string>
@ -853,6 +843,9 @@
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d vote</item>
<item quantity="other">%d votes</item>

View File

@ -320,7 +320,7 @@
<string name="set_save_changes">Save changes</string>
<string name="set_header_picture_overlay">Choose a header picture</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="set_automatically_split_toot">Automatically split toots in replies when chars are over:</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_time_from">Between</string>
@ -387,10 +387,9 @@
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push notifications</string>
<string name="settings_popup_message">"
Please, confirm push notifications that you want to receive.
<string name="settings_popup_message"> Please, confirm push notifications that you want to receive.
You can enable or disable these notifications later in settings (Notifications tab).
"</string>
</string>
<string name="settings_popup_timeline">For unread toots in home time-line?</string>
<string name="settings_popup_notification">For unread notifications?</string>
<!-- CACHE -->
@ -427,44 +426,38 @@
<string name="owner_cached_toots_empty">No toots were found in database. Please, use the synchronize button from the menu to retrieve them.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Recorded data</string>
<string name="privacy_data">"
Only basic information from accounts are stored on the device.
<string name="privacy_data"> Only basic information from accounts are stored on the device.
These data are strictly confidential and can only be used by the application.
Deleting the application immediately removes these data.\n
&#9888; Login and passwords are never stored. They are only used during a secure authentication (SSL) with an instance.
"</string>
</string>
<string name="privacy_authorizations_title">Permissions:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: Used to detect if the device is connected to a WIFI network.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: Used to detect if the device is connected to a WIFI network.\n
- <b>INTERNET</b>: Used for queries to an instance.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: Used to store media or to move the app on a SD card.\n
- <b>READ_EXTERNAL_STORAGE</b>: Used to add media to toots.\n
- <b>BOOT_COMPLETED</b>: Used to start the notification service.\n
- <b>WAKE_LOCK</b>: Used during the notification service.
"</string>
</string>
<string name="privacy_API_authorizations_title">API permissions:</string>
<string name="privacy_API_authorizations">"
- <b>Read</b>: Read data.\n
<string name="privacy_API_authorizations"> - <b>Read</b>: Read data.\n
- <b>Write</b>: Post statuses and upload media for statuses.\n
- <b>Follow</b>: Follow, unfollow, block, unblock.\n\n
<b>&#9888; These actions are carried out only when user requests them.</b>
"</string>
</string>
<string name="privacy_API_title">Tracking and Libraries</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
<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
"</string>
</string>
<string name="privacy_API_yandex_title">Translation of toots</string>
<string name="privacy_API_yandex_authorizations">"
The application offers the ability to translate toots using the locale of the device and the Yandex API.\n
<string name="privacy_API_yandex_authorizations"> The application offers the ability to translate toots using the locale of the device and the Yandex API.\n
Yandex has its proper privacy-policy which can be found here: https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
Thank you to:
"</string>
</string>
<string name="thanks_text_dev"> Thank you to:
</string>
<string name="filter_regex">Filter out by regular expressions</string>
<string name="search">Search</string>
<string name="delete">Delete</string>
@ -485,14 +478,13 @@
<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="issue_login_message">"
<b>Here are some checks that might help:</b>\n\n
<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 GitLab at https://gitlab.com/tom79/mastalab/issues
"</string>
</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>
@ -678,17 +670,14 @@
<item>1 day</item>
<item>1 week</item>
</string-array>
<string name="showcase_instance">"
In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
<string name="showcase_instance"> In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
You can start writing first letters and names will be suggested.\n\n
⚠ The Login button will only work if the instance name is valid and the instance is up!
"</string>
<string name="showcase_uid">"
In this field, write the email that is attached to your Mastodon account.
"</string>
<string name="showcase_pwd">"
Last step is to enter your password and click on Login.
"</string>
</string>
<string name="showcase_uid"> In this field, write the email that is attached to your Mastodon account.
</string>
<string name="showcase_pwd"> Last step is to enter your password and click on Login.
</string>
<string name="more_information">More information</string>
<string name="showcase_2FA">If you use 2FA (Two-factor authentication), you need to use this link.\nYou can also use it if you do not want to enter your credentials here.</string>
<!-- languages not translated -->
@ -709,6 +698,7 @@
<string name="some_words_any">Any of these words (space-separated)</string>
<string name="some_words_all">All these words (space-separated)</string>
<string name="some_words_none">None of these words (space-separated)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Change column name</string>
<string name="no_misskey_instance">No Misskey instances</string>
<string name="misskey_instance">Misskey instance</string>
@ -853,6 +843,9 @@
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d vote</item>
<item quantity="other">%d votes</item>

View File

@ -387,10 +387,9 @@
<string name="set_resize_picture">Afbeeldingen schalen</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Pushmeldingen</string>
<string name="settings_popup_message">"
Bevestig de pushmeldingen die jij wilt ontvangen.
<string name="settings_popup_message"> Bevestig de pushmeldingen die jij wilt ontvangen.
Je kan deze later in- en uitschakelen in jouw instellingen (onder meldingen).
"</string>
</string>
<string name="settings_popup_timeline">Voor ongelezen toots in jouw start-tijdlijn?</string>
<string name="settings_popup_notification">Voor ongelezen meldingen?</string>
<!-- CACHE -->
@ -427,44 +426,38 @@
<string name="owner_cached_toots_empty">Er zijn geen toots in de database gevonden. Gebruik de synchronisatieknop om deze op te halen.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Recorded data:</string>
<string name="privacy_data">"
Only basic information from accounts are stored on the device.
<string name="privacy_data"> Only basic information from accounts are stored on the device.
These data are strictly confidential and can only be used by the application.
Deleting the application immediately removes these data.\n
&#9888; Login and passwords are never stored. They are only used during a secure authentication (SSL) with an instance.
"</string>
</string>
<string name="privacy_authorizations_title">Permissions:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: Used to detect if the device is connected to a WIFI network.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: Used to detect if the device is connected to a WIFI network.\n
- <b>INTERNET</b>: Used for queries to an instance.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: Used to store media or to move the app on a SD card.\n
- <b>READ_EXTERNAL_STORAGE</b>: Used to add media to toots.\n
- <b>BOOT_COMPLETED</b>: Used to start the notification service.\n
- <b>WAKE_LOCK</b>: Used during the notification service.
"</string>
</string>
<string name="privacy_API_authorizations_title">API permissions:</string>
<string name="privacy_API_authorizations">"
- <b>Read</b>: Read data.\n
<string name="privacy_API_authorizations"> - <b>Read</b>: Read data.\n
- <b>Write</b>: Post statuses and upload media for statuses.\n
- <b>Follow</b>: Follow, unfollow, block, unblock.\n\n
<b>&#9888; These actions are carried out only when user requests them.</b>
"</string>
</string>
<string name="privacy_API_title">Tracking and Libraries:</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
<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
"</string>
</string>
<string name="privacy_API_yandex_title">Translation of toots</string>
<string name="privacy_API_yandex_authorizations">"
The application offers the ability to translate toots using the locale of the device and the Yandex API.\n
<string name="privacy_API_yandex_authorizations"> The application offers the ability to translate toots using the locale of the device and the Yandex API.\n
Yandex has its proper privacy-policy which can be found here: https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
Met dank aan:
"</string>
</string>
<string name="thanks_text_dev"> Met dank aan:
</string>
<string name="filter_regex">Wegfilteren met reguliere expressies</string>
<string name="search">Zoeken</string>
<string name="delete">Verwijderen</string>
@ -485,14 +478,13 @@
<string name="account_moved_to">%1$s is naar %2$s verhuisd</string>
<string name="show_boost_count">Aantal boosts/favorieten tonen</string>
<string name="issue_login_title">Problemen met aanmelden?</string>
<string name="issue_login_message">"
<b>Hier zijn enkele suggesties die wellicht helpen:</b>\n\n
<string name="issue_login_message"> <b>Hier zijn enkele suggesties die wellicht helpen:</b>\n\n
- Controleer of er geen spelfout in de domeinnaam van de server zit\n\n
- Controleer of er de server niet offline is\n\n
- Wanneer je tweestapsverificatie gebruikt, gebruik dan (nadat je de domeinnaam van de server hebt ingevuld) de link daaronder.\n\n
- Je kan deze link ook gebruiken zonder dat je van tweestapsverificatie gebruikt maakt (wanneer het op dit aanmeldscherm niet lukt).\n\n
- Wanneer het nu nog steeds niet lukt, maak dan een nieuwe issue aan op Github via https://github.com/stom79/mastalab/issues
"</string>
</string>
<string name="media_ready">Media is geladen. Klik hier om het te tonen.</string>
<string name="data_export_start">Deze actie kan vrij lang duren. Je krijgt een melding wanneer het klaar is.</string>
<string name="data_export_running">Nog steeds bezig, nog even wachten…</string>
@ -678,14 +670,11 @@
<item>1 dag</item>
<item>1 week</item>
</string-array>
<string name="showcase_instance">"
In dit veld moet je de hostnaam van jouw server invullen.\nVoorbeeld: als je jouw account hebt aangemaakt op https://mastodon.social\n vul je <b>mastodon.social</b> in (dus zonder https://)\n
<string name="showcase_instance">In dit veld moet je de hostnaam van jouw server invullen.\nVoorbeeld: als je jouw account hebt aangemaakt op https://mastodon.social\n vul je <b>mastodon.social</b> in (dus zonder https://)\n
Je kunt beginnen met typen en er zullen namen gesuggereerd worden.\n\n
⚠ De inlogknop werkt alleen als de naam van de server geldig is, en de server online is! "</string>
<string name="showcase_uid">"
In dit veld vul je het e-mailadres in dat is gekoppeld aan jouw Mastodonaccount. "</string>
<string name="showcase_pwd">"
De laatste stap is het invoeren van je wachtwoord en het klikken op inloggen. "</string>
⚠ De inlogknop werkt alleen als de naam van de server geldig is, en de server online is! </string>
<string name="showcase_uid">In dit veld vul je het e-mailadres in dat is gekoppeld aan jouw Mastodonaccount. </string>
<string name="showcase_pwd">De laatste stap is het invoeren van je wachtwoord en het klikken op inloggen. </string>
<string name="more_information">Meer informatie</string>
<string name="showcase_2FA">Als je 2FA (tweestapsverificatie) gebruikt, moet je deze link gebruiken.\nJe kunt het ook gebruiken als je jouw gegevens hier niet wilt invullen.</string>
<!-- languages not translated -->
@ -706,6 +695,7 @@ De laatste stap is het invoeren van je wachtwoord en het klikken op inloggen.
<string name="some_words_any">Eén van deze woorden (door spaties gescheiden)</string>
<string name="some_words_all">Al deze woorden (door spaties gescheiden)</string>
<string name="some_words_none">Geen van deze woorden (door spaties gescheiden)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Kolomnaam wijzigen</string>
<string name="no_misskey_instance">Geen Misskeyservers</string>
<string name="misskey_instance">Misskeyserver</string>
@ -850,6 +840,9 @@ De laatste stap is het invoeren van je wachtwoord en het klikken op inloggen.
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d stem</item>
<item quantity="other">%d stemmen</item>

View File

@ -387,9 +387,8 @@
<string name="set_resize_picture">Endre størrelsen på bilder</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push-varsler</string>
<string name="settings_popup_message">"
Vennligst bekreft push notifications som du vil motta.
Du kan aktivere eller deaktivere disse meldingene senere i innstillingene (Meldinger-fanen). "</string>
<string name="settings_popup_message">Vennligst bekreft push notifications som du vil motta.
Du kan aktivere eller deaktivere disse meldingene senere i innstillingene (Meldinger-fanen). </string>
<string name="settings_popup_timeline">For uleste toots i hjemmetidslinjen?</string>
<string name="settings_popup_notification">For uleste varsler?</string>
<!-- CACHE -->
@ -426,38 +425,32 @@ Du kan aktivere eller deaktivere disse meldingene senere i innstillingene (Meldi
<string name="owner_cached_toots_empty">Ingen toots ble funnet. Bruk Oppdater-knappen oppe til høyre for å hente dem.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Lagrede data</string>
<string name="privacy_data">"
Bare grunnleggende informasjon fra kontoer lagres på enheten.
<string name="privacy_data">Bare grunnleggende informasjon fra kontoer lagres på enheten.
Disse dataene er strengt konfidensielle og kan bare brukes av applikasjonen.
 Hvis du sletter programmet, fjernes disse dataene. \n
 &#9888; Brukernavn og passord lagres aldri. De brukes kun under sikker autentisering (SSL) med en instans. "</string>
 &#9888; Brukernavn og passord lagres aldri. De brukes kun under sikker autentisering (SSL) med en instans. </string>
<string name="privacy_authorizations_title">Tillatelser:</string>
<string name="privacy_authorizations">"
<b> ACCESS_NETWORK_STATE </b>: Brukes til å oppdage om enheten er koblet til et WIFI-nettverk. \n
<string name="privacy_authorizations"><b> ACCESS_NETWORK_STATE </b>: Brukes til å oppdage om enheten er koblet til et WIFI-nettverk. \n
         - <b> INTERNET </b>: Brukes for spørringer til en instans. \n
         - <b> WRITE_EXTERNAL_STORAGE </b>: Brukes til å lagre media eller flytte appen på et SD-kort. \n
         - <b> READ_EXTERNAL_STORAGE </b>: Brukes til å legge til media til toots. \n
         - <b> BOOT_COMPLETED </b>: Brukes til å starte varslingstjenesten. \n
         - <b> WAKE_LOCK </b>: Brukes under varsling. "</string>
         - <b> WAKE_LOCK </b>: Brukes under varsling. </string>
<string name="privacy_API_authorizations_title">API-tillatelser:</string>
<string name="privacy_API_authorizations">"
- <b>Les</b>: Les data. \n
<string name="privacy_API_authorizations">- <b>Les</b>: Les data. \n
- <b>Skriv</b>: Legg inn statuser og last opp medier for statuser. \n
- <b>Følg</b>: Følg, unollow, block, unblock. \n \n
<b>⚠ Disse handlingene utføres bare når brukeren ber om dem.</b> "</string>
<b>⚠ Disse handlingene utføres bare når brukeren ber om dem.</b> </string>
<string name="privacy_API_title">Sporing og biblioteker</string>
<string name="privacy_API">"
Applikasjonen<b> bruker ikke sporingsverktøy </b> (målgruppemåling, feilrapportering, etc.), og inneholder ingen reklame. \n \n
<string name="privacy_API">Applikasjonen<b> bruker ikke sporingsverktøy </b> (målgruppemåling, feilrapportering, etc.), og inneholder ingen reklame. \n \n
         Bruken av biblioteker er minmal: \n
         - <b>Glide</b>: For å administrere media \n
         - <b>Android-job</b>: For å administrere tjenester \n
         - <b>PhotoView</b>: For å administrere bilder \n "</string>
         - <b>PhotoView</b>: For å administrere bilder \n </string>
<string name="privacy_API_yandex_title">Oversettelse av toots</string>
<string name="privacy_API_yandex_authorizations">"
Programmet tilbyr muligheten til å oversette toots ved hjelp av lokasjonen til enheten og Yandex APIet. \n
         Yandex har sin egen personvernerklæring som finnes her: https://yandex.ru/legal/confidential/?lang=en "</string>
<string name="thanks_text_dev">"
Takk til: "</string>
<string name="privacy_API_yandex_authorizations">Programmet tilbyr muligheten til å oversette toots ved hjelp av lokasjonen til enheten og Yandex APIet. \n
         Yandex har sin egen personvernerklæring som finnes her: https://yandex.ru/legal/confidential/?lang=en </string>
<string name="thanks_text_dev">Takk til: </string>
<string name="filter_regex">Filtrer ut med regulære uttrykk</string>
<string name="search">Søk</string>
<string name="delete">Slett</string>
@ -478,13 +471,12 @@ Takk til: "</string>
<string name="account_moved_to">%1$s er flyttet til %2$s</string>
<string name="show_boost_count">Vis antall boosts/favoritter</string>
<string name="issue_login_title">Får du ikke logget inn?</string>
<string name="issue_login_message">"
<b>Her er noen ting du kan sjekke:</b>\n\n
<string name="issue_login_message"><b>Her er noen ting du kan sjekke:</b>\n\n
- Kontroller at det ikke er noen skrivefeil i adressen til instansen\n\n
- Kontroller at instansen ikke er nede (offline)\n\n
- Hvis du bruker tofaktorautentisering (2FA), vennligst benytt linken på bunnen (etter at adressen til instansen er fylt inn)\n\n
- Du kan også benytte denne linken for å logge inn med 2FA\n\n
- Hvis det fortsatt ikke fungerer å koble til instansen, vennligst opprett en sak på GitLab, https://gitlab.com/tom79/mastalab/issues\n\n "</string>
- Hvis det fortsatt ikke fungerer å koble til instansen, vennligst opprett en sak på GitLab, https://gitlab.com/tom79/mastalab/issues\n\n </string>
<string name="media_ready">Mediet er lastet. Klikk her for å vise.</string>
<string name="data_export_start">Denne handlingen kan ta lang tid. Du vil bli varslet når det er ferdig.</string>
<string name="data_export_running">Kjører fortsatt, vennligst vent…</string>
@ -670,14 +662,11 @@ Takk til: "</string>
<item>1 dag</item>
<item>1 uke</item>
</string-array>
<string name="showcase_instance">"
I dette feltet skriver du adressen til instansen. Hvis du opprettet en konto på https://mastodon.social\n, skriv <b>mastodon.social</b> (uten https://)\n
<string name="showcase_instance">I dette feltet skriver du adressen til instansen. Hvis du opprettet en konto på https://mastodon.social\n, skriv <b>mastodon.social</b> (uten https://)\n
Adresser vil bli foreslått når du begynner å skrive.\n\n
⚠ Logg inn-knappen vil bare fungere hvis navnet på instansen er gyldig, og instansen er oppe (online)! "</string>
<string name="showcase_uid">"
Skriv e-postadressen tilknyttet Mastodon-kontoen din i dette feltet. "</string>
<string name="showcase_pwd">"
Siste steg er å oppgi passordet ditt, og trykke Logg inn. "</string>
⚠ Logg inn-knappen vil bare fungere hvis navnet på instansen er gyldig, og instansen er oppe (online)! </string>
<string name="showcase_uid">Skriv e-postadressen tilknyttet Mastodon-kontoen din i dette feltet. </string>
<string name="showcase_pwd">Siste steg er å oppgi passordet ditt, og trykke Logg inn. </string>
<string name="more_information">Mer informasjon</string>
<string name="showcase_2FA">Hvis du bruker tofaktorautentisering (2FA), må du benytte deg av denne linken.\nDu kan også benytte deg av linken dersom du ikke vil skrive inn brukernavn og passord her, men heller logge inn via instansen.</string>
<!-- languages not translated -->
@ -698,6 +687,7 @@ Siste steg er å oppgi passordet ditt, og trykke Logg inn. "</string>
<string name="some_words_any">Hvilke som helst av disse stikkordene (separert med mellomrom)</string>
<string name="some_words_all">Alle disse ordene (separert med mellomrom)</string>
<string name="some_words_none">Ingen av disse stikkordene (separert med mellomrom)</string>
<string name="some_tags">Legg noen ord til filteret (skill dem med mellomrom)</string>
<string name="change_tag_column">Endre kolonnenavn</string>
<string name="no_misskey_instance">Ingen Misskey-instanser</string>
<string name="misskey_instance">Misskey-instans</string>
@ -840,8 +830,11 @@ Siste steg er å oppgi passordet ditt, og trykke Logg inn. "</string>
<string name="set_forward_tags">Videresend emneord i svar</string>
<string name="set_long_press_media">Langt trykk for å lagre media</string>
<string name="set_blur_sensitive">Dim sensitiv media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_timeline_in_list">Vis tidslinjer i en liste</string>
<string name="display_timeline">Vis tidslinjer</string>
<string name="set_display_bot_icon">Marker robot-kontoer i toots</string>
<string name="add_tags">Administrer stikkord</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d stemme</item>
<item quantity="other">%d stemmer</item>

View File

@ -320,7 +320,7 @@
<string name="set_save_changes">Save changes</string>
<string name="set_header_picture_overlay">Choose a header picture</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="set_automatically_split_toot">Automatically split toots in replies when chars are over:</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_time_from">Between</string>
@ -387,10 +387,9 @@
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push notifications</string>
<string name="settings_popup_message">"
Please, confirm push notifications that you want to receive.
<string name="settings_popup_message"> Please, confirm push notifications that you want to receive.
You can enable or disable these notifications later in settings (Notifications tab).
"</string>
</string>
<string name="settings_popup_timeline">For unread toots in home time-line?</string>
<string name="settings_popup_notification">For unread notifications?</string>
<!-- CACHE -->
@ -427,44 +426,38 @@
<string name="owner_cached_toots_empty">No toots were found in database. Please, use the synchronize button from the menu to retrieve them.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Recorded data</string>
<string name="privacy_data">"
Only basic information from accounts are stored on the device.
<string name="privacy_data"> Only basic information from accounts are stored on the device.
These data are strictly confidential and can only be used by the application.
Deleting the application immediately removes these data.\n
&#9888; Login and passwords are never stored. They are only used during a secure authentication (SSL) with an instance.
"</string>
</string>
<string name="privacy_authorizations_title">Permissions:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: Used to detect if the device is connected to a WIFI network.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: Used to detect if the device is connected to a WIFI network.\n
- <b>INTERNET</b>: Used for queries to an instance.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: Used to store media or to move the app on a SD card.\n
- <b>READ_EXTERNAL_STORAGE</b>: Used to add media to toots.\n
- <b>BOOT_COMPLETED</b>: Used to start the notification service.\n
- <b>WAKE_LOCK</b>: Used during the notification service.
"</string>
</string>
<string name="privacy_API_authorizations_title">API permissions:</string>
<string name="privacy_API_authorizations">"
- <b>Read</b>: Read data.\n
<string name="privacy_API_authorizations"> - <b>Read</b>: Read data.\n
- <b>Write</b>: Post statuses and upload media for statuses.\n
- <b>Follow</b>: Follow, unfollow, block, unblock.\n\n
<b>&#9888; These actions are carried out only when user requests them.</b>
"</string>
</string>
<string name="privacy_API_title">Tracking and Libraries</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
<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
"</string>
</string>
<string name="privacy_API_yandex_title">Translation of toots</string>
<string name="privacy_API_yandex_authorizations">"
The application offers the ability to translate toots using the locale of the device and the Yandex API.\n
<string name="privacy_API_yandex_authorizations"> The application offers the ability to translate toots using the locale of the device and the Yandex API.\n
Yandex has its proper privacy-policy which can be found here: https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
Thank you to:
"</string>
</string>
<string name="thanks_text_dev"> Thank you to:
</string>
<string name="filter_regex">Filter out by regular expressions</string>
<string name="search">Search</string>
<string name="delete">Delete</string>
@ -485,14 +478,13 @@
<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="issue_login_message">"
<b>Here are some checks that might help:</b>\n\n
<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 GitLab at https://gitlab.com/tom79/mastalab/issues
"</string>
</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>
@ -678,17 +670,14 @@
<item>1 day</item>
<item>1 week</item>
</string-array>
<string name="showcase_instance">"
In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
<string name="showcase_instance"> In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
You can start writing first letters and names will be suggested.\n\n
⚠ The Login button will only work if the instance name is valid and the instance is up!
"</string>
<string name="showcase_uid">"
In this field, write the email that is attached to your Mastodon account.
"</string>
<string name="showcase_pwd">"
Last step is to enter your password and click on Login.
"</string>
</string>
<string name="showcase_uid"> In this field, write the email that is attached to your Mastodon account.
</string>
<string name="showcase_pwd"> Last step is to enter your password and click on Login.
</string>
<string name="more_information">More information</string>
<string name="showcase_2FA">If you use 2FA (Two-factor authentication), you need to use this link.\nYou can also use it if you do not want to enter your credentials here.</string>
<!-- languages not translated -->
@ -709,6 +698,7 @@
<string name="some_words_any">Any of these words (space-separated)</string>
<string name="some_words_all">All these words (space-separated)</string>
<string name="some_words_none">None of these words (space-separated)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Change column name</string>
<string name="no_misskey_instance">No Misskey instances</string>
<string name="misskey_instance">Misskey instance</string>
@ -853,6 +843,9 @@
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d vote</item>
<item quantity="other">%d votes</item>

View File

@ -395,9 +395,8 @@
<string name="set_resize_picture">Zmniejszanie zdjęć</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Powiadomienia</string>
<string name="settings_popup_message">"
Wskaż, jakie powiadomienia chcesz otrzymywać.
Możesz włączyć i wyłączyć te powiadomienia w ustawieniach powiadomień. "</string>
<string name="settings_popup_message">Wskaż, jakie powiadomienia chcesz otrzymywać.
Możesz włączyć i wyłączyć te powiadomienia w ustawieniach powiadomień. </string>
<string name="settings_popup_timeline">Dla nieprzeczytanych wpisów w lokalnej osi czasu?</string>
<string name="settings_popup_notification">Dla nieprzeczytanych powiadomień?</string>
<!-- CACHE -->
@ -434,43 +433,37 @@ Wskaż, jakie powiadomienia chcesz otrzymywać.
<string name="owner_cached_toots_empty">Nie znaleziono wpisów. Proszę użyć funkcji synchronizacji w celu pobrania nowych wpisów.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Przechowywane dane</string>
<string name="privacy_data">"
Tylko podstawowe informacje o koncie są przechowywane na urządzeniu.
<string name="privacy_data"> Tylko podstawowe informacje o koncie są przechowywane na urządzeniu.
Te dane nie są dostępne dla innych aplikacji.
Dezinstalacja aplikacji natychmiastowo usuwa wszystkie dane.\n
&#9888; Dane logowania nie są przechowywane na urządzeniu. Są użyte tylko podczas pierwszego logowania i przekazywane do instancji szyfrowanym kanałem SSL.
"</string>
</string>
<string name="privacy_authorizations_title">Uprawnienia:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: Pozwala sprawdzić, czy urządzenie jest połączone z siecią WiFi.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: Pozwala sprawdzić, czy urządzenie jest połączone z siecią WiFi.\n
- <b>INTERNET</b>: Pozwala na połączenie z instancją.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: Pozwala na zachowywanie multimediów i przeniesienie aplikacji na kartę SD.\n
- <b>READ_EXTERNAL_STORAGE</b>: Pozwala dodać zawartość do wpisów.\n
- <b>BOOT_COMPLETED</b>: Pozwala wyświetlać powiadomienia po włączeniu urządzenia.\n
- <b>WAKE_LOCK</b>: Pozwala wyświetlać powiadomienia w tle.
"</string>
</string>
<string name="privacy_API_authorizations_title">Uprawnienia API:</string>
<string name="privacy_API_authorizations">"
- <b>Odczyt</b>: Możliwość odczytu danych.\n
<string name="privacy_API_authorizations"> - <b>Odczyt</b>: Możliwość odczytu danych.\n
- <b>Zapis</b>: Wysyłanie wpisów i załączanie multimediów.\n
- <b>Śledzenie</b>: Śledzenie i blokowanie.\n\n
<b>&#9888; Te uprawnienia są wykorzystywane wyłącznie na Twoje żądanie.</b>
"</string>
</string>
<string name="privacy_API_title">Śledzenie i biblioteki</string>
<string name="privacy_API">"
Mastalab <b>nie śledzi Twojej aktywności</b> (zbieranie wrażliwych danych, zgłaszanie błędów) i nie zawiera reklam.\n\n
<string name="privacy_API"> Mastalab <b>nie śledzi Twojej aktywności</b> (zbieranie wrażliwych danych, zgłaszanie błędów) i nie zawiera reklam.\n\n
Używane biblioteki: \n
- <b>Glide</b>: zarządzanie zawartością multimedialną\n
- <b>Android-Job</b>: zarządzanie usługami\n
- <b>PhotoView</b>: zarządzanie obrazami\n
"</string>
</string>
<string name="privacy_API_yandex_title">Automatyczne tłumaczenie wpisów:</string>
<string name="privacy_API_yandex_authorizations">"
Mastalab oferuje automatyczne tłumaczenie wpisów na wybrany język przy pomocy API Yandex.\n
<string name="privacy_API_yandex_authorizations"> Mastalab oferuje automatyczne tłumaczenie wpisów na wybrany język przy pomocy API Yandex.\n
Polityka prywatności usługi Yandex jest dostępna w języku angielskim tutaj: https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
Podziękowania dla: "</string>
</string>
<string name="thanks_text_dev">Podziękowania dla: </string>
<string name="filter_regex">Filtruj przez wyrażenia regularne</string>
<string name="search">Szukaj</string>
<string name="delete">Usuń</string>
@ -491,14 +484,13 @@ Podziękowania dla: "</string>
<string name="account_moved_to">%1$s przeniósł się do %2$s</string>
<string name="show_boost_count">Pokaż liczbę podbić i polubień</string>
<string name="issue_login_title">Problem z uwierzytelnieniem?</string>
<string name="issue_login_message">"
<b>Spróbuj zastosować się do poniższych rad:</b>\n\n
<string name="issue_login_message"> <b>Spróbuj zastosować się do poniższych rad:</b>\n\n
- Sprawdź, czy nazwa instancji została poprawnie przepisana\n\n
- Sprawdź, czy instancja jest dostępna\n\n
- Jeśli używasz dwustopniowego uwierzytelniania (2FA), kliknij w link poniżej (po wpisaniu nazwy instancji)\n\n
- Możesz użyć tego linku nawet gdy nie używasz 2FA\n\n
- Jeśli wciąż nie możesz się zalogować, proszę zgłoś problem tutaj: https://github.com/stom79/mastalab/issues
"</string>
</string>
<string name="media_ready">Załadowano zawartość multimedialną. Naciśnij tutaj, aby ją wyświetlić.</string>
<string name="data_export_start">To działanie może trochę potrwać. Powiadomimy cię o jego zakończeniu.</string>
<string name="data_export_running">Wciąż pracuję, proszę czekać…</string>
@ -684,16 +676,11 @@ Podziękowania dla: "</string>
<item>1 dzień</item>
<item>1 tydzień</item>
</string-array>
<string name="showcase_instance">"
W tym polu, musisz wpisać nazwę hosta instancji.\nNa przykład, jeżeli konto było zakładane na https://mastodon.social\npo prostu wpisz <b>mastodon.social</b> (bez https://)\n
<string name="showcase_instance"> W tym polu, musisz wpisać nazwę hosta instancji.\nNa przykład, jeżeli konto było zakładane na https://mastodon.social\npo prostu wpisz <b>mastodon.social</b> (bez https://)\n
Po wpisaniu kilku liter pojawią sie sugestie.\n\n
⚠ Przycisk logowania zadziała tylko jeśli wpisana nazwa jest poprawna i a sama instancja działa!
"</string>
<string name="showcase_uid">"
Wpisz adres email przypisany do twojego konta Mastodon. "</string>
<string name="showcase_pwd">"
W ostatnim kroku wpisz hasło i kliknij zaloguj. "</string>
⚠ Przycisk logowania zadziała tylko jeśli wpisana nazwa jest poprawna i a sama instancja działa!</string>
<string name="showcase_uid">Wpisz adres email przypisany do twojego konta Mastodon. </string>
<string name="showcase_pwd">W ostatnim kroku wpisz hasło i kliknij zaloguj. </string>
<string name="more_information">Więcej informacji</string>
<string name="showcase_2FA">Jeśli używasz uwierzytelniania dwu-etapowego, musisz skorzystać z tego linka.\nMożesz też go użyć jeśli nie chcesz wpisywać twoich danych tutaj.</string>
<!-- languages not translated -->
@ -714,6 +701,7 @@ W ostatnim kroku wpisz hasło i kliknij zaloguj. "</string>
<string name="some_words_any">Dowolne z tych słów (oddzielone spacją)</string>
<string name="some_words_all">Wszystkie z tych słów (rozdzielone spacją)</string>
<string name="some_words_none">Żadne z tych słów (rozedzielone spacją)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Zmień nazwę kolumny</string>
<string name="no_misskey_instance">Brak instancji Misskey</string>
<string name="misskey_instance">Instancja Misskey</string>
@ -858,6 +846,9 @@ W ostatnim kroku wpisz hasło i kliknij zaloguj. "</string>
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d vote</item>
<item quantity="few">%d votes</item>

View File

@ -387,9 +387,9 @@
<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">" Por favor, confirme que notificações você quer receber.
<string name="settings_popup_message"> Por favor, confirme que notificações você quer receber.
Você pode ativar ou desativar essas notificações mais tarde em configurações (na aba Notificações).
"</string>
</string>
<string name="settings_popup_timeline">Para toots não lidos na página inicial?</string>
<string name="settings_popup_notification">Para notificações não lidas?</string>
<!-- CACHE -->
@ -426,39 +426,38 @@
<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">" Apenas informação básica das contas é armazenada no aparelho.
<string name="privacy_data"> Apenas informação básica das contas é armazenada no aparelho.
Estes dados são estritamente confidenciais e só podem ser usados pelo aplicativo.
Desinstalar o aplicativo imediatamente remove esses dados.\n
&#9888; Credenciais nunca são armazenadas. Elas só são usadas durante a autenticação segura (SSL) com uma instância.
"</string>
</string>
<string name="privacy_authorizations_title">Permissões:</string>
<string name="privacy_authorizations">" - <b>ACCESS_NETWORK_STATE</b>: Usada para detectar se o aparelho está conectado a uma rede Wi-Fi.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: Usada para detectar se o aparelho está conectado a uma rede Wi-Fi.\n
- <b>INTERNET</b>: Usado para consultar instâncias.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: Usada para armazenar mídia ou mover o aplicativo para o cartão SD.\n
- <b>READ_EXTERNAL_STORAGE</b>: Usada para adicionar mídia aos toots.\n
- <b>BOOT_COMPLETED</b>: Usada para iniciar o serviço de notificação.\n
- <b>WAKE_LOCK</b>: Usada durante o serviço de notificação.
"</string>
</string>
<string name="privacy_API_authorizations_title">Permissões da API:</string>
<string name="privacy_API_authorizations">"
- <b>Leitura</b>: Ler dados.\n
<string name="privacy_API_authorizations"> - <b>Leitura</b>: Ler dados.\n
- <b>Escrita</b>: Publicar toots e enviar mídia nos toots.\n
- <b>Seguir</b>: Seguir, deixar de seguir, bloquear e desbloquear.\n\n
<b>&#9888; Essas ações são realizadas apenas quando o usuário solicitá-las.</b>
"</string>
</string>
<string name="privacy_API_title">Rastreio e Bibliotecas</string>
<string name="privacy_API">" O aplicativo <b>não usa ferramentas de rastreio</b> (medição de audiência, relatórios de erro, etc) e não contém qualquer propaganda.\n\n
<string name="privacy_API"> O aplicativo <b>não usa ferramentas de rastreio</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>
<string name="privacy_API_yandex_title">Tradução de toots</string>
<string name="privacy_API_yandex_authorizations">" O aplicativo oferece a habilidade de traduzir toots usando o idioma do aparelho e a API do Yandex.\n
<string name="privacy_API_yandex_authorizations"> O aplicativo oferece a habilidade de traduzir toots usando o idioma do aparelho e a API do Yandex.\n
Yandex tem a sua própria política de privacidade, que pode ser lida aqui: https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">" Agradecimentos aos:
"</string>
</string>
<string name="thanks_text_dev"> Agradecimentos aos:
</string>
<string name="filter_regex">Filtrar por expressões regulares</string>
<string name="search">Pesquisa</string>
<string name="delete">Remover</string>
@ -479,13 +478,13 @@
<string name="account_moved_to">%1$s mudou-se para %2$s</string>
<string name="show_boost_count">Mostrar número de boosts/favoritos</string>
<string name="issue_login_title">Falha ao autenticar?</string>
<string name="issue_login_message">" <b>Aqui estão algumas verificações que podem ajudar:</b>\n\n
<string name="issue_login_message"> <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>
<string name="media_ready">A mídia foi carregada. Toque aqui para vê-la.</string>
<string name="data_export_start">Esta ação pode ser demorada. Você será notificado quando ela terminar.</string>
<string name="data_export_running">Ainda em execução, por favor, aguarde…</string>
@ -671,14 +670,14 @@
<item>1 dia</item>
<item>1 semana</item>
</string-array>
<string name="showcase_instance">" Neste campo, você precisa digitar o nome da sua instância.\nPor exemplo, se você criou sua conta em https://mastodon.social\nApenas digite <b>mastodon.social</b> (sem https://)\n
<string name="showcase_instance"> Neste campo, você precisa digitar o nome da sua instância.\nPor exemplo, se você criou sua conta em https://mastodon.social\nApenas digite <b>mastodon.social</b> (sem https://)\n
Você pode começar digitando as primeiras letras e nomes serão sugeridos.\n\n
⚠ O botão de login só funcionará se o nome da instância for válido e a instância estiver ativa!
"</string>
<string name="showcase_uid">" Neste campo, digite o e-mail usado na sua conta Mastodon.
"</string>
<string name="showcase_pwd">" O último passo é digitar sua senha e tocar em Entrar.
"</string>
</string>
<string name="showcase_uid"> Neste campo, digite o e-mail usado na sua conta Mastodon.
</string>
<string name="showcase_pwd"> O último passo é digitar sua senha e tocar em Entrar.
</string>
<string name="more_information">Mais informação</string>
<string name="showcase_2FA">Se você usar 2FA (autenticação de dois fatores), você precisa usar este link.\nVocê também pode usá-lo se você não quiser inserir suas credenciais aqui.</string>
<!-- languages not translated -->
@ -699,6 +698,7 @@
<string name="some_words_any">Qualquer uma destas palavras (separadas por espaço)</string>
<string name="some_words_all">Todas estas palavras (separadas por espaço)</string>
<string name="some_words_none">Nenhuma destas palavras (separadas por espaço)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Mudar nome da aba</string>
<string name="no_misskey_instance">Sem instâncias Misskey</string>
<string name="misskey_instance">Instância Misskey</string>
@ -843,6 +843,9 @@
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d voto</item>
<item quantity="other">%d votos</item>

View File

@ -324,7 +324,7 @@
<string name="set_save_changes">Salvează modificările</string>
<string name="set_header_picture_overlay">Alege poză de profil</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="set_automatically_split_toot">Automatically split toots in replies when chars are over:</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_time_from">Între</string>
@ -391,9 +391,8 @@
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Notificări instant</string>
<string name="settings_popup_message">"
Vă rugăm să confirmați notificările instant pe care doriți să le primiți
Puteți să activați sau dezactivați aceste setări, mai târziu (Fereastra de notificații). "</string>
<string name="settings_popup_message">Vă rugăm să confirmați notificările instant pe care doriți să le primiți
Puteți să activați sau dezactivați aceste setări, mai târziu (Fereastra de notificații). </string>
<string name="settings_popup_timeline">Penru notițe necitite în cronologia de acasă?</string>
<string name="settings_popup_notification">Pentru notificări necitite?</string>
<!-- CACHE -->
@ -430,43 +429,37 @@ Vă rugăm să confirmați notificările instant pe care doriți să le primiți
<string name="owner_cached_toots_empty">No toots were found in database. Please, use the synchronize button from the menu to retrieve them.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Date înregistrate</string>
<string name="privacy_data">"
Doar infomațiile de bază ale conturilor sunt stocate pe aparat.
<string name="privacy_data">Doar infomațiile de bază ale conturilor sunt stocate pe aparat.
Aceste date sunt strict confidențiale și pot fi folosite doar de aplicație.
Ștergerea aplicației duce la pierderea datelor.\n
&#9888; Autentificarea și parolele nu sunt niciodate stocate. Sunt folosite doar într-o autentificare sigură (SSL). "</string>
&#9888; Autentificarea și parolele nu sunt niciodate stocate. Sunt folosite doar într-o autentificare sigură (SSL). </string>
<string name="privacy_authorizations_title">Permisiuni:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: Folosit la detectarea daca aparatul este conectat la o rețea de WIFI.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: Folosit la detectarea daca aparatul este conectat la o rețea de WIFI.\n
- <b>INTERNET</b>: Folosit pentru intergogări la o instanță.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: Folosit pentru a stoca media sau pentru a muta aplicația pe un card SD.\n
- <b>READ_EXTERNAL_STORAGE</b>: Folosit să adauge media la notițe.\n
- <b>BOOT_COMPLETED</b>: Folosit la pornirea serviciului de notificare.\n
- <b>WAKE_LOCK</b>: Folosit în timpul serviciului de notificare.
"</string>
</string>
<string name="privacy_API_authorizations_title">Permisiuni API:</string>
<string name="privacy_API_authorizations">"
- <b>Citește</b>: Citește date.\n
<string name="privacy_API_authorizations">- <b>Citește</b>: Citește date.\n
- <b>Scrie</b>: Postează statusuri și încarcă media pentru statusuri.\n
- <b>Urmărește</b>: Urmărește, nu mai urmări, blochează, deblochează.\n\n
<b>&#9888; Aceste acțiuni s efectuează doar la cererea utilizatorului.</b>
"</string>
</string>
<string name="privacy_API_title">Urmărire și biblioteci</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
<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
"</string>
</string>
<string name="privacy_API_yandex_title">Traducerea notițelor</string>
<string name="privacy_API_yandex_authorizations">"
Alpicația oferă posibilitatea de a traduce notițe folosind local-ul aparatului și API-ul Yandex.\n
<string name="privacy_API_yandex_authorizations">Alpicația oferă posibilitatea de a traduce notițe folosind local-ul aparatului și API-ul Yandex.\n
Yandex are propria politică de confidențialitate care poate fi găsită aici:
https://yandex.ru/legal/confidential/?lang=en "</string>
<string name="thanks_text_dev">"
Vă mulțumesc:
"</string>
https://yandex.ru/legal/confidential/?lang=en </string>
<string name="thanks_text_dev">Vă mulțumesc:
</string>
<string name="filter_regex">Filtrează expresii usuale</string>
<string name="search">Căutare</string>
<string name="delete">Șterge</string>
@ -487,14 +480,13 @@ Vă mulțumesc:
<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="issue_login_message">"
<b>Here are some checks that might help:</b>\n\n
<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 GitLab at https://gitlab.com/tom79/mastalab/issues
"</string>
</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>
@ -680,17 +672,14 @@ Vă mulțumesc:
<item>1 day</item>
<item>1 week</item>
</string-array>
<string name="showcase_instance">"
In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
<string name="showcase_instance"> In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
You can start writing first letters and names will be suggested.\n\n
⚠ The Login button will only work if the instance name is valid and the instance is up!
"</string>
<string name="showcase_uid">"
In this field, write the email that is attached to your Mastodon account.
"</string>
<string name="showcase_pwd">"
Last step is to enter your password and click on Login.
"</string>
</string>
<string name="showcase_uid"> In this field, write the email that is attached to your Mastodon account.
</string>
<string name="showcase_pwd"> Last step is to enter your password and click on Login.
</string>
<string name="more_information">More information</string>
<string name="showcase_2FA">If you use 2FA (Two-factor authentication), you need to use this link.\nYou can also use it if you do not want to enter your credentials here.</string>
<!-- languages not translated -->
@ -711,6 +700,7 @@ Vă mulțumesc:
<string name="some_words_any">Any of these words (space-separated)</string>
<string name="some_words_all">All these words (space-separated)</string>
<string name="some_words_none">None of these words (space-separated)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Change column name</string>
<string name="no_misskey_instance">No Misskey instances</string>
<string name="misskey_instance">Misskey instance</string>
@ -855,6 +845,9 @@ Vă mulțumesc:
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d vote</item>
<item quantity="few">%d votes</item>

View File

@ -395,10 +395,9 @@
<string name="set_resize_picture">Изменить размер изображений</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push-уведомления</string>
<string name="settings_popup_message">"
Пожалуйста, подтвердите push-уведомления, которые вы хотите получить.
<string name="settings_popup_message"> Пожалуйста, подтвердите push-уведомления, которые вы хотите получить.
Вы можете включить или отключить эти уведомления позже в настройках (вкладка \'Уведомления\').
"</string>
</string>
<string name="settings_popup_timeline">Для непрочитанных тутов в домашней ленте?</string>
<string name="settings_popup_notification">Для непрочитанных уведомлений?</string>
<!-- CACHE -->
@ -435,44 +434,38 @@
<string name="owner_cached_toots_empty">В базе данных тутов не найдено. Пожалуйста, используйте кнопку синхронизации в меню для их получения.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Записанные данные</string>
<string name="privacy_data">"
На устройстве хранятся только основные сведения из аккаунтов.
<string name="privacy_data"> На устройстве хранятся только основные сведения из аккаунтов.
Эти данные являются строго конфиденциальными и могут использоваться только приложением.
Удаление приложения немедленно удалит эти данные.\n
&#9888; Логин и пароли никогда не сохраняются. Они используются только во время безопасной аутентификации (SSL) с сервером.
"</string>
</string>
<string name="privacy_authorizations_title">Разрешения:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: Используется для определения, подключено ли устройство к сети WIFI.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: Используется для определения, подключено ли устройство к сети WIFI.\n
- <b>INTERNET</b>: Используется для запросов к серверу.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: Используется для хранения мультимедиа или для перемещения приложения на SD-карту.\n
- <b>READ_EXTERNAL_STORAGE</b>: Используется для добавления мультимедиа в туты.\n
- <b>BOOT_COMPLETED</b>: Используется для запуска службы уведомлений.\n
- <b>WAKE_LOCK</b>: Используется во время службы уведомлений.
"</string>
</string>
<string name="privacy_API_authorizations_title">Разрешения API:</string>
<string name="privacy_API_authorizations">"
- <b>Чтение</b>: Чтение данных.\n
<string name="privacy_API_authorizations"> - <b>Чтение</b>: Чтение данных.\n
- <b>Запись</b>: Публикация статусов и загрузка файлов для статусов.\n
- <b>Подписка</b>: Подписка, отписка, блокировка, разблокировка.\n\n
<b>&#9888; Эти действия выполняются только при запросе их пользователем.</b>
"</string>
</string>
<string name="privacy_API_title">Отслеживание и библиотеки</string>
<string name="privacy_API">"
Это приложение <b>не использует инструменты отслеживания</b> (измерение аудитории, отчет об ошибках и т. д.) и не содержит никакой рекламы.\n\n
<string name="privacy_API"> Это приложение <b>не использует инструменты отслеживания</b> (измерение аудитории, отчет об ошибках и т. д.) и не содержит никакой рекламы.\n\n
Использование библиотек сведено к минимуму: \n
- <b>Glide</b>: Для управления файлами\n
- <b>Android-Job</b>: Для управления сервисами\n
- <b>PhotoView</b>: Для управления изображениями\n
"</string>
</string>
<string name="privacy_API_yandex_title">Перевод тутов</string>
<string name="privacy_API_yandex_authorizations">"
Приложение предлагает возможность переводить туты, используя язык устройства и Яндекс API.\n
<string name="privacy_API_yandex_authorizations"> Приложение предлагает возможность переводить туты, используя язык устройства и Яндекс API.\n
Яндекс имеет собственную политику конфиденциальности, условия которой можно найти здесь: https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
Спасибо:
"</string>
</string>
<string name="thanks_text_dev"> Спасибо:
</string>
<string name="filter_regex">Отфильтровать по регулярным выражениям</string>
<string name="search">Поиск</string>
<string name="delete">Удалить</string>
@ -493,14 +486,13 @@
<string name="account_moved_to">%1$s был перенесен в %2$s</string>
<string name="show_boost_count">Показать количество продвигаемых/избранных</string>
<string name="issue_login_title">Аутентификация не работает?</string>
<string name="issue_login_message">"
<b>Вот некоторые подсказки, которые могут помочь:</b>\n\n
<string name="issue_login_message"> <b>Вот некоторые подсказки, которые могут помочь:</b>\n\n
- Проверьте, нет ли орфографических ошибок в имени сервера\n\n
- Убедитесь в доступности вашего сервера\n\n
- Если вы используете двухфакторную аутентификацию (2FA), используйте ссылку внизу (после заполнения имени сервера)\n\n
- Вы также можете использовать эту ссылку без использования 2FA\n\n
- Если все перечисленное вам не помогло, создайте проблему на Github: https://github.com/stom79/mastalab/issues
"</string>
</string>
<string name="media_ready">Медиафайл загружен. Нажмите здесь, для его отображения.</string>
<string name="data_export_start">Это действие может продолжаться довольно долго. Вы будете уведомлены, когда оно будет завершено.</string>
<string name="data_export_running">Все еще работает, подождите…</string>
@ -686,17 +678,14 @@
<item>1 день</item>
<item>1 неделя</item>
</string-array>
<string name="showcase_instance">"
В этом поле вам нужно указать имя хоста вашего сервера.\nНапример, если вы создали свою учетную запись на https://mastodon.social\nJust write <b>mastodon.social</b> (без https://)\n
<string name="showcase_instance"> В этом поле вам нужно указать имя хоста вашего сервера.\nНапример, если вы создали свою учетную запись на https://mastodon.social\nJust write <b>mastodon.social</b> (без https://)\n
Вы можете начать писать первые буквы, чтобы получить предложения имен.\n\n
⚠ Кнопка входа в систему будет работать только случае, если сервер включен и его имя корректно!
"</string>
<string name="showcase_uid">"
В этом поле укажите адрес электронной почты, который привязан к вашему аккаунту Mastodon.
"</string>
<string name="showcase_pwd">"
Последний шаг - введите свой пароль и нажмите Войти.
"</string>
</string>
<string name="showcase_uid"> В этом поле укажите адрес электронной почты, который привязан к вашему аккаунту Mastodon.
</string>
<string name="showcase_pwd"> Последний шаг - введите свой пароль и нажмите Войти.
</string>
<string name="more_information">Дополнительная информация</string>
<string name="showcase_2FA">Если вы используете 2FA (двухфакторную аутентификацию), вам нужно использовать эту ссылку.\nТакже вы можете ее использовать, если не хотите вводить здесь свои учетные данные.</string>
<!-- languages not translated -->
@ -717,6 +706,7 @@
<string name="some_words_any">Любое из этих слов (через пробел)</string>
<string name="some_words_all">Все эти слова (через пробел)</string>
<string name="some_words_none">Ни одно из этих слов (через пробел)</string>
<string name="some_tags">Добавьте слова в фильтр (через пробел)</string>
<string name="change_tag_column">Изменить имя столбца</string>
<string name="no_misskey_instance">Нет серверов Misskey</string>
<string name="misskey_instance">Сервер Misskey</string>
@ -861,6 +851,9 @@
<string name="set_blur_sensitive">Размытие деликатного контента</string>
<string name="set_display_timeline_in_list">Показывать список лент в списке</string>
<string name="display_timeline">Отображать ленты</string>
<string name="set_display_bot_icon">Отметить аккаунты ботов в тутах</string>
<string name="add_tags">Управлять тегами</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d голос</item>
<item quantity="few">%d голоса</item>

View File

@ -320,7 +320,7 @@
<string name="set_save_changes">වෙනස් කිරීම් සුරකින්න</string>
<string name="set_header_picture_overlay">Choose a header picture</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="set_automatically_split_toot">Automatically split toots in replies when chars are over:</string>
<string name="note_no_space">ලබා දී ඇති අකුරු 160 ක සීමාවට ඔබ ළඟා වී ඇත!</string>
<string name="username_no_space">ලබා දී ඇති අකුරු 30 ක සීමාවට ඔබ ළඟා වී ඇත!</string>
<string name="settings_time_from">Between</string>
@ -387,10 +387,9 @@
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push notifications</string>
<string name="settings_popup_message">"
Please, confirm push notifications that you want to receive.
<string name="settings_popup_message"> Please, confirm push notifications that you want to receive.
You can enable or disable these notifications later in settings (Notifications tab).
"</string>
</string>
<string name="settings_popup_timeline">For unread toots in home time-line?</string>
<string name="settings_popup_notification">For unread notifications?</string>
<!-- CACHE -->
@ -427,44 +426,38 @@
<string name="owner_cached_toots_empty">No toots were found in database. Please, use the synchronize button from the menu to retrieve them.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Recorded data</string>
<string name="privacy_data">"
Only basic information from accounts are stored on the device.
<string name="privacy_data"> Only basic information from accounts are stored on the device.
These data are strictly confidential and can only be used by the application.
Deleting the application immediately removes these data.\n
&#9888; Login and passwords are never stored. They are only used during a secure authentication (SSL) with an instance.
"</string>
</string>
<string name="privacy_authorizations_title">අවසරයන්:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: Used to detect if the device is connected to a WIFI network.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: Used to detect if the device is connected to a WIFI network.\n
- <b>INTERNET</b>: Used for queries to an instance.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: Used to store media or to move the app on a SD card.\n
- <b>READ_EXTERNAL_STORAGE</b>: Used to add media to toots.\n
- <b>BOOT_COMPLETED</b>: Used to start the notification service.\n
- <b>WAKE_LOCK</b>: Used during the notification service.
"</string>
</string>
<string name="privacy_API_authorizations_title">API permissions:</string>
<string name="privacy_API_authorizations">"
- <b>Read</b>: Read data.\n
<string name="privacy_API_authorizations"> - <b>Read</b>: Read data.\n
- <b>Write</b>: Post statuses and upload media for statuses.\n
- <b>Follow</b>: Follow, unfollow, block, unblock.\n\n
<b>&#9888; These actions are carried out only when user requests them.</b>
"</string>
</string>
<string name="privacy_API_title">Tracking and Libraries</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
<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
"</string>
</string>
<string name="privacy_API_yandex_title">Translation of toots</string>
<string name="privacy_API_yandex_authorizations">"
The application offers the ability to translate toots using the locale of the device and the Yandex API.\n
<string name="privacy_API_yandex_authorizations"> The application offers the ability to translate toots using the locale of the device and the Yandex API.\n
Yandex has its proper privacy-policy which can be found here: https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
Thank you to:
"</string>
</string>
<string name="thanks_text_dev"> Thank you to:
</string>
<string name="filter_regex">Filter out by regular expressions</string>
<string name="search">සෙවීම</string>
<string name="delete">ඉවත් කරන්න</string>
@ -485,14 +478,13 @@
<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="issue_login_message">"
<b>Here are some checks that might help:</b>\n\n
<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 GitLab at https://gitlab.com/tom79/mastalab/issues
"</string>
</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>
@ -678,16 +670,13 @@
<item>දින 1</item>
<item>සති 1</item>
</string-array>
<string name="showcase_instance">"
In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
<string name="showcase_instance"> In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
You can start writing first letters and names will be suggested.\n\n
⚠ The Login button will only work if the instance name is valid and the instance is up!
"</string>
<string name="showcase_uid">"
මෙම ක්ෂේත්‍රයේ, ඔබගේ මැස්ටොඩෝන් ගිණුමට සම්බන්ධ කර ඇති විද්‍යුත් තැපැල් ලිපිනය ලියන්න. "</string>
<string name="showcase_pwd">"
අවසාන පියවර ලෙස ඔබේ මුරපදය ඇතුළත් කර \'පුරන්න\' මත ඔබන්න.
"</string>
</string>
<string name="showcase_uid">මෙම ක්ෂේත්‍රයේ, ඔබගේ මැස්ටොඩෝන් ගිණුමට සම්බන්ධ කර ඇති විද්‍යුත් තැපැල් ලිපිනය ලියන්න. </string>
<string name="showcase_pwd"> අවසාන පියවර ලෙස ඔබේ මුරපදය ඇතුළත් කර \'පුරන්න\' මත ඔබන්න.
</string>
<string name="more_information">තවත් තොරතුරු</string>
<string name="showcase_2FA">ඔබ 2FA (ද්වි-සාධක සහතික කිරීම) භාවිත කරන්නෙ නම්, ඔබ මෙම සබැඳිය භාවිත කිරීමට අවශ්‍ය යි.\nමෙහි ඔබේ තොරතුරු ඇතුළත් කිරීමට උවමනා නැතිනම් ද ඔබට එය භාවිත කළ හැකි යි.</string>
<!-- languages not translated -->
@ -708,6 +697,7 @@
<string name="some_words_any">Any of these words (space-separated)</string>
<string name="some_words_all">All these words (space-separated)</string>
<string name="some_words_none">None of these words (space-separated)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Change column name</string>
<string name="no_misskey_instance">No Misskey instances</string>
<string name="misskey_instance">Misskey instance</string>
@ -852,6 +842,9 @@
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d vote</item>
<item quantity="other">%d votes</item>

View File

@ -395,10 +395,9 @@
<string name="set_resize_picture">Prilagajanje velikosti slik</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Potisna obvestila</string>
<string name="settings_popup_message">"
Prosimo, potrdite potisna obvestila, ki jih želite prejemati.
<string name="settings_popup_message"> Prosimo, potrdite potisna obvestila, ki jih želite prejemati.
Te nastavitve lahko kasneje omogočite ali onemogočite v nastavitvah (na zavihku Obvestila).
"</string>
</string>
<string name="settings_popup_timeline">Za neprebrane objave Toot domače časovnice?</string>
<string name="settings_popup_notification">Za neprebrana obvestila?</string>
<!-- CACHE -->
@ -435,44 +434,38 @@
<string name="owner_cached_toots_empty">V podatkovni zbirki ni objav Toot. Prosimo, uporabite gumb Sinhroniziraj v meniju, da jih pridobite.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Zabeleženi podatki</string>
<string name="privacy_data">"
Le osnovni podatki o računih se hranijo na napravi.
<string name="privacy_data"> Le osnovni podatki o računih se hranijo na napravi.
Ti podatki so strogo zaupne narave in jih lahko uporablja le aplikacija.
Ob brisanju aplikacije takoj odstranite tudi vse podatke.\n
&#9888; Prijavni podatki in gesla se nikoli ne shranjujejo. Uporabljeni so le med varno avtentifikacijo (SSL) z instanco.
"</string>
</string>
<string name="privacy_authorizations_title">Dovoljenja:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: Se uporablja za zaznavo ali je naprava povezana v omrežje WiFi.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: Se uporablja za zaznavo ali je naprava povezana v omrežje WiFi.\n
- <b>INTERNET</b>: Se uporablja za poizvedbe na strežniški instanci.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: Se uporablja za shranjevanje vsebin ali za možnost premika aplikacije na SD-kartico.\n
- <b>READ_EXTERNAL_STORAGE</b>: Se uporablja za dodajanje vsebin v objave Toot.\n
- <b>BOOT_COMPLETED</b>: Se uporablja za zagon storitve za obveščanje.\n
- <b>WAKE_LOCK</b>: Se uporalbja med delovanjem storitve za obveščanje.
"</string>
</string>
<string name="privacy_API_authorizations_title">Dovoljenja za API:</string>
<string name="privacy_API_authorizations">"
- <b>Branje</b>: Branje podatkov.\n
<string name="privacy_API_authorizations"> - <b>Branje</b>: Branje podatkov.\n
- <b>Pisanje</b>: Objava statusov in prilaganje vsebin le-tem.\n
- <b>Spremljanje</b>: Spremljanje, prekinitev spremljanj, blokiranje, odblokiranje.\n\n
<b>&#9888; Te akcije se izvedejo le, ko jih zahteva uporabnik.</b>
"</string>
</string>
<string name="privacy_API_title">Sledenje in knjižnice</string>
<string name="privacy_API">"
Aplikacija <b>ne uporablja analitičnih orodij</b> (merjenje občinstva, spremljanje napak, itd.) in ne vsebuje oglasov.\n\n
<string name="privacy_API"> Aplikacija <b>ne uporablja analitičnih orodij</b> (merjenje občinstva, spremljanje napak, itd.) in ne vsebuje oglasov.\n\n
Uporaba knjižnic je omejena na: \n
- <b>Glide</b>: za uporavljanje medijskih vsebin\n
- <b>Android-Job</b>: za upravljanje sistemskih storitev\n
- <b>PhotoView</b>: za upravljanje slik\n
"</string>
</string>
<string name="privacy_API_yandex_title">Prevajanje objav Toot</string>
<string name="privacy_API_yandex_authorizations">"
Aplikacija omogoča prevajanje objav Toot s pomočjo nastavitev jezika vaše naprave in API-vmesnika Yandex.\n
<string name="privacy_API_yandex_authorizations"> Aplikacija omogoča prevajanje objav Toot s pomočjo nastavitev jezika vaše naprave in API-vmesnika Yandex.\n
Yandex ima svoj Pravilnik o zasebnosti, ki ga lahko najdete na naslovu: https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
Zahvala:
"</string>
</string>
<string name="thanks_text_dev"> Zahvala:
</string>
<string name="filter_regex">Filtriraj s pomočjo regularnih izrazov</string>
<string name="search">Išči</string>
<string name="delete">Izbriši</string>
@ -493,14 +486,13 @@
<string name="account_moved_to">%1$s je premaknjen na %2$s</string>
<string name="show_boost_count">Prikazuj števec ojačanj in priljulbjenih</string>
<string name="issue_login_title">Prijava ne deluje?</string>
<string name="issue_login_message">"
<b>Sledi nekaj točk, ki so vam lahko v pomoč:</b>\n\n
<string name="issue_login_message"> <b>Sledi nekaj točk, ki so vam lahko v pomoč:</b>\n\n
- Preverite, da nimate napak v imenu instance.\n\n
- Preverite, da je instanca deujoča.\n\n
- Če uporabljate dvostopenjsko prijavljanje (2FA), uporabite spodnjo povezavo (zatem, ko je vpisano ime instance).\n\n
- To povezavo lahko uporabite tudi brez dvostopenjskega prijavljanja.\n\n
- Če našteto ne pomaga, prosimo, prijavite napako na GitLab naslovu: https://gitlab.com/tom79/mastalab/issues
"</string>
</string>
<string name="media_ready">Vsebina je naložena. Pritisnite tu, da jo prikažete.</string>
<string name="data_export_start">Ta akcija lahko traja precej dolgo. Obvestili vas bomo, ko bo zaključeno.</string>
<string name="data_export_running">Se še izvaja. Prosimo, počakajte …</string>
@ -686,17 +678,14 @@
<item>1 dan</item>
<item>1 teden</item>
</string-array>
<string name="showcase_instance">"
V to polje vpišite ime gostitelja vaše instance.\nNaprimer: Če ste ustarili račun na strežniku: https://mastodon.social\nVpišite le ime:<b>mastodon.social</b> (brez https://)\n
<string name="showcase_instance"> V to polje vpišite ime gostitelja vaše instance.\nNaprimer: Če ste ustarili račun na strežniku: https://mastodon.social\nVpišite le ime:<b>mastodon.social</b> (brez https://)\n
Ob vpisu prvih nekaj črk vam bomo podali namige možnih imen gostiteljev.\n\n
⚠ Gumb Prijava deluje le, ko je instanca strežnika veljavna in delujoča!
"</string>
<string name="showcase_uid">"
V to polje vpišite naslov e-pošte, ki je vezana na vaš račun Mastodon.
"</string>
<string name="showcase_pwd">"
Zadnji korak je vpis gesla in potrditev s pritiskom na gumb Prijava.
"</string>
</string>
<string name="showcase_uid"> V to polje vpišite naslov e-pošte, ki je vezana na vaš račun Mastodon.
</string>
<string name="showcase_pwd"> Zadnji korak je vpis gesla in potrditev s pritiskom na gumb Prijava.
</string>
<string name="more_information">Več informacij</string>
<string name="showcase_2FA">Uporabite to povezavo, če uporabljate dvostopenjsko prijavljanje (2FA).\nLahko jo uporabite tudi, če tu ne želite vnašati svojih prijavnih podatkov.</string>
<!-- languages not translated -->
@ -717,6 +706,7 @@
<string name="some_words_any">Katerakoli od teh besed (ločene s presledkom)</string>
<string name="some_words_all">Vse te besede (ločene s presledkom)</string>
<string name="some_words_none">Nobena od teh besed (ločene s presledkom)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Preimenuj stolpec</string>
<string name="no_misskey_instance">Ni instanc Misskey</string>
<string name="misskey_instance">Instanca Misskey</string>
@ -861,6 +851,9 @@
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d vote</item>
<item quantity="two">%d votes</item>

View File

@ -391,10 +391,9 @@
<string name="set_resize_picture">Мењај величине слика</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Брза обавештења</string>
<string name="settings_popup_message">"
Потврдите која брза обавештења желите да примате.
<string name="settings_popup_message"> Потврдите која брза обавештења желите да примате.
Можете укључити и искључити ова обавештења накнадно у подешавањима (језичак за Обавештења).
"</string>
</string>
<string name="settings_popup_timeline">За непрочитане тутове у сопственој лајни?</string>
<string name="settings_popup_notification">За непрочитана обавештења?</string>
<!-- CACHE -->
@ -431,44 +430,38 @@
<string name="owner_cached_toots_empty">Нема тутова у бази. Користите дугме за синхронизацију да их преузмете.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Снимљени подаци</string>
<string name="privacy_data">"
Само основне информације о налозима су ускладиштене на уређају.
<string name="privacy_data"> Само основне информације о налозима су ускладиштене на уређају.
Ови подаци су строго поверљиви и може их користити само ова апликација.
Брисање апликација моментално брише ове податке.\n
&#9888; Пријаве и лозинке се никад не складиште. Користе се само за време безбедног (SSL) пријављивања са инстанцом.
"</string>
</string>
<string name="privacy_authorizations_title">Дозволе:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: Користи се да види да ли је уређај накачен на бежичну мрежу.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: Користи се да види да ли је уређај накачен на бежичну мрежу.\n
- <b>INTERNET</b>: Користи се да прича са инстанцом.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: Користи се да ускладишти мултимедију или да помери апликацију на SD картицу.\n
- <b>READ_EXTERNAL_STORAGE</b>: Користи се да дода мултимедију на тутове.\n
- <b>BOOT_COMPLETED</b>: Користи се да стартује сервис за обавештења.\n
- <b>WAKE_LOCK</b>: Користи се током рада сервиса за обавештења.
"</string>
</string>
<string name="privacy_API_authorizations_title">API дозволе:</string>
<string name="privacy_API_authorizations">"
- <b>Читај</b>: Чита податке.\n
<string name="privacy_API_authorizations"> - <b>Читај</b>: Чита податке.\n
- <b>Пиши</b>: Шаље статусе и отпрема мултимедију за статусе.\n
- <b>Прати</b>: Прати, уклаља праћења, блокира, одблокира.\n\n
<b>&#9888; Ове акције се изводе само када их корисник захтева.</b>
"</string>
</string>
<string name="privacy_API_title">Праћење и библиотеке</string>
<string name="privacy_API">"
Апликација <b> не користи за праћење алатке </b>&gt; (мерење публике, грешке за извештавање, итд.) и не садржи никакве рекламе.\n\n
<string name="privacy_API"> Апликација <b> не користи за праћење алатке </b>&gt; (мерење публике, грешке за извештавање, итд.) и не садржи никакве рекламе.\n\n
Употреба библиотека је минимизована: \n
- <b>Glide</b>: за управљање мултимедијом\n
- <b>Android-Job</b>: за управљање сервисима\n
- <b>PhotoView</b>: за управљање сликама\n
"</string>
</string>
<string name="privacy_API_yandex_title">Превод тутова</string>
<string name="privacy_API_yandex_authorizations">"
Апликација нуди могућност да преводи тутове на језик уређаја користећи Yandex API.\n
<string name="privacy_API_yandex_authorizations"> Апликација нуди могућност да преводи тутове на језик уређаја користећи Yandex API.\n
Yandex има своју конкретну политику приватности која се може наћи овде: https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
Хвала Вам на:
"</string>
</string>
<string name="thanks_text_dev"> Хвала Вам на:
</string>
<string name="filter_regex">Филтрирај по регуларним изразима</string>
<string name="search">Претрага</string>
<string name="delete">Обриши</string>
@ -489,14 +482,13 @@
<string name="account_moved_to">%1$s се померио на %2$s</string>
<string name="show_boost_count">Прикажи број подржаних/омиљених</string>
<string name="issue_login_title">Пријављивање не ради?</string>
<string name="issue_login_message">"
<b>Ево неких провера које могу да помогну:</b>\n\n
<string name="issue_login_message"> <b>Ево неких провера које могу да помогну:</b>\n\n
- Проверите да нема грешака у куцању имена инстанце\n\n
- Проверите да ли је инстанца жива и ради\n\n
- Ако користите двофакторско пријављивање (2FA), користите линк на дну (када попуните име инстанце)\n\n
- Линк испод можете користити и без да користите 2FA\n\n
- Ако ништа ни даље не ради, пријавите нам проблем на Github-у, на https://github.com/stom79/mastalab/issues
"</string>
</string>
<string name="media_ready">Мултимедија је учитана. Кликните овде да је прикажете.</string>
<string name="data_export_start">Ова акција може да потраје. Бићете обавештени када се заврши.</string>
<string name="data_export_running">Још увек се извршава, сачекајте…</string>
@ -682,17 +674,14 @@
<item>1 дан</item>
<item>Недељу дана</item>
</string-array>
<string name="showcase_instance">"
In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
<string name="showcase_instance"> In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
You can start writing first letters and names will be suggested.\n\n
⚠ The Login button will only work if the instance name is valid and the instance is up!
"</string>
<string name="showcase_uid">"
In this field, write the email that is attached to your Mastodon account.
"</string>
<string name="showcase_pwd">"
Последњи корак је да унесете Вашу лозинку и да кликнете на пријаву.
"</string>
</string>
<string name="showcase_uid"> In this field, write the email that is attached to your Mastodon account.
</string>
<string name="showcase_pwd"> Последњи корак је да унесете Вашу лозинку и да кликнете на пријаву.
</string>
<string name="more_information">Више информација</string>
<string name="showcase_2FA">If you use 2FA (Two-factor authentication), you need to use this link.\nYou can also use it if you do not want to enter your credentials here.</string>
<!-- languages not translated -->
@ -713,6 +702,7 @@
<string name="some_words_any">Било која од ових речи (одвојених белинама)</string>
<string name="some_words_all">Све ове речи (одвојене белинама)</string>
<string name="some_words_none">Ниједна од ових речи (одвојених белинама)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Измени име колоне</string>
<string name="no_misskey_instance">Нема Misskey инстанци</string>
<string name="misskey_instance">Misskey инстанца</string>
@ -857,6 +847,9 @@
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d vote</item>
<item quantity="few">%d votes</item>

View File

@ -387,10 +387,9 @@
<string name="set_resize_picture">Ändra storlek på bilder</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push-meddelanden</string>
<string name="settings_popup_message">"
Bekräfta push-meddelanden som du vill ta emot.
<string name="settings_popup_message"> Bekräfta push-meddelanden som du vill ta emot.
Du kan aktivera eller inaktivera dessa meddelanden senare i inställningar (fliken aviseringar).
"</string>
</string>
<string name="settings_popup_timeline">För olästa toots i hemtidslinjen?</string>
<string name="settings_popup_notification">För olästa meddelanden?</string>
<!-- CACHE -->
@ -427,44 +426,38 @@
<string name="owner_cached_toots_empty">Ingen toots hittades i databasen. Använd gärna knappen Synkronisera från menyn för att hämta dem.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Sparad data</string>
<string name="privacy_data">"
Endast grundläggande information från konton lagras på enheten.
<string name="privacy_data"> Endast grundläggande information från konton lagras på enheten.
Uppgifterna är konfidentiella och kan endast användas av programmet.
Borttagning av programmet tar omedelbart bort dessa data.\n
&#9888; Inloggning och lösenord lagras aldrig. De används endast under en säker autentisering (SSL) med en instans.
"</string>
</string>
<string name="privacy_authorizations_title">Behörigheter:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: Används för att upptäcka om enheten är ansluten till ett trådlöst nätverk.\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: Används för att upptäcka om enheten är ansluten till ett trådlöst nätverk.\n
- <b>INTERNET</b>: Används för frågor till en instans.\n
- <b>WRITE_EXTERNAL_STORAGE</b>: Används för att lagra media eller flytta appen på ett SD-kort.\n
- <b>READ_EXTERNAL_STORAGE</b>: Används för att lägga till media till toots.\n
- <b>BOOT_COMPLETED</b>: Används för att starta meddelandetjänsten.\n
- <b>WAKE_LOCK</b>: Används under meddelandetjänsten.
"</string>
</string>
<string name="privacy_API_authorizations_title">API-rättigheter:</string>
<string name="privacy_API_authorizations">"
- <b>Read</b>: Läs data.\n
<string name="privacy_API_authorizations"> - <b>Read</b>: Läs data.\n
- <b>Write</b>: Posta statusar och ladda upp media till statusar.\n
- <b>Follow</b>: Följ, av följ, blockera, avblockera.\n\n
<b>&#9888; Dessa händelser sker endast när användaren begär det.</b>
"</string>
</string>
<string name="privacy_API_title">Spårning och bibliotek</string>
<string name="privacy_API">"
Applikationen <b>använder inga tracking-verktyg</b> (publikmätning, felrapportering etc.) och innehåller ingen reklam.\n\n
<string name="privacy_API"> Applikationen <b>använder inga tracking-verktyg</b> (publikmätning, felrapportering etc.) och innehåller ingen reklam.\n\n
Användanded av tredje-parts bibliotek är minimerad: \n
- <b>Glide</b>: Till att hantera media\n
- <b>Android-Job</b>: Till att hantera services\n
- <b>PhotoView</b>: Till att hantera bilder\n
"</string>
</string>
<string name="privacy_API_yandex_title">Översättning av toots</string>
<string name="privacy_API_yandex_authorizations">"
Applikationen erbjuder möjligheten att översätta toots med hjälp av språket på enheten och Yandex API..\n
<string name="privacy_API_yandex_authorizations"> Applikationen erbjuder möjligheten att översätta toots med hjälp av språket på enheten och Yandex API..\n
Yandex har sin integritetspolicy här: https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
Tack till:
"</string>
</string>
<string name="thanks_text_dev"> Tack till:
</string>
<string name="filter_regex">Filtrera ut av reguljära uttryck</string>
<string name="search">Sök</string>
<string name="delete">Ta bort</string>
@ -485,14 +478,13 @@
<string name="account_moved_to">%1$s har flyttats till %2$s</string>
<string name="show_boost_count">Visa knuffar/favoriter antal</string>
<string name="issue_login_title">Autentisering fungerar inte?</string>
<string name="issue_login_message">"
<b>Här är några kontroller som kan hjälpa:</b>\n\n
<string name="issue_login_message"> <b>Här är några kontroller som kan hjälpa:</b>\n\n
- Kontrollera att det inte finns stavfel i instans namn\n\n
- Kontrollera att din instans inte är nere\n\n
- Om du använder tvåstegsfaktor autentisering (2FA), vänligen använd länken längst ner (när instansnamnet är ifyllt)\n\n
- Du kan också använda denna länk utan att använda 2FA\n\n
- Om det fortfarande inte fungerar, vänligen be om hjälp på GitLab https://gitlab.com/tom79/mastalab/issues
"</string>
</string>
<string name="media_ready">Media har laddats, klicka här för att visa.</string>
<string name="data_export_start">Denna åtgärd kan ta ganska lång tid. Du kommer att meddelas när den är färdig.</string>
<string name="data_export_running">Körs fortfarande, vänligen vänta…</string>
@ -678,17 +670,14 @@
<item>1 dag</item>
<item>1 vecka</item>
</string-array>
<string name="showcase_instance">"
I det här fältet måste du skriva din instans värdnamn.\nTill exempel om du skapade ditt konto på https://mastodon.social\n skriv <b>mastodon.social</b> (utan https://)\n
<string name="showcase_instance"> I det här fältet måste du skriva din instans värdnamn.\nTill exempel om du skapade ditt konto på https://mastodon.social\n skriv <b>mastodon.social</b> (utan https://)\n
Börja skriv de första bokstäverna, sen kommer förslag att visas.\n\n
⚠ Inloggningsknappen fungerar bara om instansnamnet är giltig och instansen körs!
"</string>
<string name="showcase_uid">"
I det här fältet ange den e-post som är kopplad till kontot på Mastodon.
"</string>
<string name="showcase_pwd">"
Sista steget är att ange ditt lösenord och klicka sen på Login.
"</string>
</string>
<string name="showcase_uid"> I det här fältet ange den e-post som är kopplad till kontot på Mastodon.
</string>
<string name="showcase_pwd"> Sista steget är att ange ditt lösenord och klicka sen på Login.
</string>
<string name="more_information">Mer information</string>
<string name="showcase_2FA">Om du använder 2FA (två-faktorn autentisering), så måste du använda denna länk.\nDu kan också använda den om du inte vill ange dina autentiseringsuppgifter här.</string>
<!-- languages not translated -->
@ -709,6 +698,7 @@
<string name="some_words_any">Någon av dessa ord (mellanrumsseparerade)</string>
<string name="some_words_all">Alla dessa ord (mellanrumsseparerade)</string>
<string name="some_words_none">Inga av dessa ord (mellanrumsseparerade)</string>
<string name="some_tags">Lägg till några ord att filtrera (separera med mellanslag)</string>
<string name="change_tag_column">Ändra kolumnnamn</string>
<string name="no_misskey_instance">Inga Misskey-instanser</string>
<string name="misskey_instance">Misskey-instans</string>
@ -853,6 +843,9 @@
<string name="set_blur_sensitive">Censurera känslig media</string>
<string name="set_display_timeline_in_list">Visa tidslinjer i en lista</string>
<string name="display_timeline">Visa tidslinjer</string>
<string name="set_display_bot_icon">Markera robotkonton i toot</string>
<string name="add_tags">Hantera taggar</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d röst</item>
<item quantity="other">%d röster</item>

View File

@ -387,9 +387,8 @@
<string name="set_resize_picture">Resimleri yeniden boyutlandır</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Anlık Bildirimler</string>
<string name="settings_popup_message">"
Lütfen, almak istediğiniz bildirimleri onaylayın.
         Bu bildirimleri daha sonra ayarlarda etkinleştirebilir veya devre dışı bırakabilirsiniz (Bildirimler sekmesi). "</string>
<string name="settings_popup_message">Lütfen, almak istediğiniz bildirimleri onaylayın.
         Bu bildirimleri daha sonra ayarlarda etkinleştirebilir veya devre dışı bırakabilirsiniz (Bildirimler sekmesi). </string>
<string name="settings_popup_timeline">Evdeki zaman çizgisindeki okunmamış toots için mi?</string>
<string name="settings_popup_notification">Okunmamış bildirimler için?</string>
<!-- CACHE -->
@ -426,39 +425,33 @@ Lütfen, almak istediğiniz bildirimleri onaylayın.
<string name="owner_cached_toots_empty">Veritabanında toot bulunamadı. Menüdeki eşitle tuşunu kullan.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Kaydedilen veri</string>
<string name="privacy_data">"
Hesaplardan yalnızca temel bilgiler cihazda saklanır.
<string name="privacy_data">Hesaplardan yalnızca temel bilgiler cihazda saklanır.
         Bu veriler kesinlikle gizlidir ve yalnızca uygulama tarafından kullanılabilir.
         Uygulamanın silinmesi, bu verileri derhal kaldırır. \ N
         ⚠ Oturum açma ve parolalar asla saklanmaz. Yalnızca sunucu ile güvenli giriş (SSL) için kullanılırlar. "</string>
         ⚠ Oturum açma ve parolalar asla saklanmaz. Yalnızca sunucu ile güvenli giriş (SSL) için kullanılırlar. </string>
<string name="privacy_authorizations_title">Izinler:</string>
<string name="privacy_authorizations">"
- <b> ACCESS_NETWORK_STATE </b>: Aygıtın bir WIFI ağına bağlı olup olmadığını saptamak için kullanılır. \n
<string name="privacy_authorizations">- <b> ACCESS_NETWORK_STATE </b>: Aygıtın bir WIFI ağına bağlı olup olmadığını saptamak için kullanılır. \n
         - <b> INTERNET </b>: Bir sunucuyu sorgulamak için kullanılır. \n
         - <b> WRITE_EXTERNAL_STORAGE </b>: Medyayı saklamak veya uygulamayı bir SD karta taşımak için kullanılır. \n
         - <b> READ_EXTERNAL_STORAGE </b>: Toot\'a medya eklemek için kullanılır.\n
         - <b> BOOT_COMPLETED </b>: Bildirim hizmetini başlatmak için kullanılır. \n
         - <b> WAKE_LOCK </b>: Bildirim hizmeti sırasında kullanılır. "</string>
         - <b> WAKE_LOCK </b>: Bildirim hizmeti sırasında kullanılır. </string>
<string name="privacy_API_authorizations_title">API izinleri:</string>
<string name="privacy_API_authorizations">"
- <b> Oku </b>: Veri okunur. \n
<string name="privacy_API_authorizations">- <b> Oku </b>: Veri okunur. \n
         - <b> Yaz </b>: Durumu yayınlar ve durumlar için ortam yükler. \n
         - <b> Takip et </b>: Takip etme, takipten vazgeçme, engelleme, engeli kaldırma.\n\n
         <b> &#9888; Bu eylemler, yalnızca kullanıcı istekleri üzerine gerçekleşir. </b> "</string>
         <b> &#9888; Bu eylemler, yalnızca kullanıcı istekleri üzerine gerçekleşir. </b> </string>
<string name="privacy_API_title">İzleme ve kütüphaneler</string>
<string name="privacy_API">"
Bu uygulama <b>takip araçları kullanmaz</b> (kitle ölçme, hata raporlama vs.) ve herhangi bir reklam içermez.\n\n
<string name="privacy_API"> Bu uygulama <b>takip araçları kullanmaz</b> (kitle ölçme, hata raporlama vs.) ve herhangi bir reklam içermez.\n\n
Kütüphane kullanımı en aza indirilmiştir: \n
- <b>Glide</b>: Medya kontrolü\n
- <b>Android-Job</b>: Servis kontrolü\n
- <b>PhotoView</b>: Resim kontrolü\n
"</string>
</string>
<string name="privacy_API_yandex_title">Toot tercümesi</string>
<string name="privacy_API_yandex_authorizations">"
Uygulama cihazın yerel ayarını ve Yandex API\'sini kullanarak toot tercüme olanağı sunar. \ N
         Yandex\'in şu adreste bulunabilecek uygun gizlilik politikası vardır: https://yandex.ru/legal/confidential/?lang=en "</string>
<string name="thanks_text_dev">"
Teşekkürler: "</string>
<string name="privacy_API_yandex_authorizations">Uygulama cihazın yerel ayarını ve Yandex API\'sini kullanarak toot tercüme olanağı sunar. \ N
         Yandex\'in şu adreste bulunabilecek uygun gizlilik politikası vardır: https://yandex.ru/legal/confidential/?lang=en </string>
<string name="thanks_text_dev">Teşekkürler: </string>
<string name="filter_regex">Düzenli ifadelerle filtreleme</string>
<string name="search">Ara</string>
<string name="delete">Sil</string>
@ -479,14 +472,13 @@ Teşekkürler: "</string>
<string name="account_moved_to">%1$s, %2$s\'e taşındı</string>
<string name="show_boost_count">Hızlandırmaları göster/Favori sayısı</string>
<string name="issue_login_title">Kimlik doğrulama çalışmıyor?</string>
<string name="issue_login_message">"
<b>Yardımı olabilecek bazı kontroller:</b>\n\n
<string name="issue_login_message"> <b>Yardımı olabilecek bazı kontroller:</b>\n\n
- Sunucu adını kontrol et\n\n
- Sunucunda hata olmadığından emin ol\n\n
- İki aşamalı doğrulama (2FA) kullanıyorsan, alttaki bağlantıyı kullan (sunucu adı doldurulduktan sonra)\n\n
- Bağlantıyı 2FA olmadan da kullanabilirsin\n\n
- Eğer hala çalışmıyorsa, Gitlab üzerinde hata kaydı aç: https://gitlab.com/tom79/mastalab/issues
"</string>
</string>
<string name="media_ready">Medya yüklendi. Görüntülemek için tıkla.</string>
<string name="data_export_start">Bu işlem oldukça uzun sürebilir. Bitince haberdar olacaksın.</string>
<string name="data_export_running">Hâlâ çalışıyor, lütfen bekle…</string>
@ -672,17 +664,14 @@ Teşekkürler: "</string>
<item>1 day</item>
<item>1 week</item>
</string-array>
<string name="showcase_instance">"
In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
<string name="showcase_instance"> In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
You can start writing first letters and names will be suggested.\n\n
⚠ The Login button will only work if the instance name is valid and the instance is up!
"</string>
<string name="showcase_uid">"
In this field, write the email that is attached to your Mastodon account.
"</string>
<string name="showcase_pwd">"
Last step is to enter your password and click on Login.
"</string>
</string>
<string name="showcase_uid"> In this field, write the email that is attached to your Mastodon account.
</string>
<string name="showcase_pwd"> Last step is to enter your password and click on Login.
</string>
<string name="more_information">More information</string>
<string name="showcase_2FA">If you use 2FA (Two-factor authentication), you need to use this link.\nYou can also use it if you do not want to enter your credentials here.</string>
<!-- languages not translated -->
@ -703,6 +692,7 @@ Teşekkürler: "</string>
<string name="some_words_any">Any of these words (space-separated)</string>
<string name="some_words_all">All these words (space-separated)</string>
<string name="some_words_none">None of these words (space-separated)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Change column name</string>
<string name="no_misskey_instance">No Misskey instances</string>
<string name="misskey_instance">Misskey instance</string>
@ -847,6 +837,9 @@ Teşekkürler: "</string>
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d vote</item>
<item quantity="other">%d votes</item>

View File

@ -395,8 +395,7 @@
<string name="set_resize_picture">Змінити розмір зображень</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push-сповіщення</string>
<string name="settings_popup_message">"
Будь ласка, потрібно підтвердити отримання push-сповіщень. Ви можете змінити налаштування пізніше (вкладка сповіщень). "</string>
<string name="settings_popup_message">Будь ласка, потрібно підтвердити отримання push-сповіщень. Ви можете змінити налаштування пізніше (вкладка сповіщень). </string>
<string name="settings_popup_timeline">Для непрочитаних дмухів у домашній стрічці?</string>
<string name="settings_popup_notification">Для непрочитаних сповіщень?</string>
<!-- CACHE -->
@ -433,36 +432,30 @@
<string name="owner_cached_toots_empty">Жодного дмуху не знайдено в базі даних. Будь ласка, використовуйте кнопку синхронізації в меню, щоб отримати їх.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Записані дані</string>
<string name="privacy_data">"
Тільки основна інформація з облікових записів зберігається на пристрої. Ці дані залишаються суворо конфіденційними і можуть використовуватися лише додатком. У разі видалення додаток одразу видаляє ці дані. \n
<string name="privacy_data">Тільки основна інформація з облікових записів зберігається на пристрої. Ці дані залишаються суворо конфіденційними і можуть використовуватися лише додатком. У разі видалення додаток одразу видаляє ці дані. \n
&#9888; Логіни та паролі не зберігаються. Вони використовуються тільки під час безпечної аутентифікації (SSL) на екземплярі.
"</string>
</string>
<string name="privacy_authorizations_title">Дозволи:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>: використовується для виявлення, чи пристрій підключено до Wi-Fi мережі. \n - <b>Інтернет</b>: використовується для запитів до до екземпляра. \n - <b>WRITE_EXTERNAL_STORAGE</b>: використовується для зберігання медіа або переміщення програми на карту SD \n - <b>READ_EXTERNAL_STORAGE</b>: використовується для додавання медіа до тутів. \n - <b>BOOT_COMPLETED</b>: використовується для запуску служби сповіщень. \n - <b>WAKE_LOCK</b>: Використовується під час роботи служби сповіщень.
"</string>
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>: використовується для виявлення, чи пристрій підключено до Wi-Fi мережі. \n - <b>Інтернет</b>: використовується для запитів до до екземпляра. \n - <b>WRITE_EXTERNAL_STORAGE</b>: використовується для зберігання медіа або переміщення програми на карту SD \n - <b>READ_EXTERNAL_STORAGE</b>: використовується для додавання медіа до тутів. \n - <b>BOOT_COMPLETED</b>: використовується для запуску служби сповіщень. \n - <b>WAKE_LOCK</b>: Використовується під час роботи служби сповіщень.
</string>
<string name="privacy_API_authorizations_title">API дозволи:</string>
<string name="privacy_API_authorizations">"
- <b>Читати</b>: Читати дані.\n
<string name="privacy_API_authorizations">- <b>Читати</b>: Читати дані.\n
- <b>Писати</b>: Постити статуси і завантажувати медіа-файли.\n
- <b>Підписка</b>: Підписка, відписка, блок, розблок.\n\n
<b>&#9888; Ці дії відбуваються тільки за запитом користувача.</b>
"</string>
</string>
<string name="privacy_API_title">Бібліотеки</string>
<string name="privacy_API">"
Додаток <b>не відслідковує користувача</b> І не містить реклами.\n\n
<string name="privacy_API">Додаток <b>не відслідковує користувача</b> І не містить реклами.\n\n
Використання сторонніх бібліотек мінімізоване: \n
- <b>Glide</b>: для управління медіа-файлами\n
- <b>Android-Job</b>: Для управління сервісами\n
- <b>PhotoView</b>: Для управління зображеннями\n
"</string>
</string>
<string name="privacy_API_yandex_title">Переклад дмухів</string>
<string name="privacy_API_yandex_authorizations">"
Додаток перекладає дмухи через Yandex API.\n
<string name="privacy_API_yandex_authorizations">Додаток перекладає дмухи через Yandex API.\n
Умови конфіденційності Yandex можна знайти за посиланням: https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
Подяки: "</string>
</string>
<string name="thanks_text_dev">Подяки: </string>
<string name="filter_regex">Відфільтруйте регулярним виразом</string>
<string name="search">Пошук</string>
<string name="delete">Видалити</string>
@ -483,14 +476,13 @@
<string name="account_moved_to">%1$s відправлено до %2$s</string>
<string name="show_boost_count">Показати лічильники передмухнутого/обраного</string>
<string name="issue_login_title">Автентифікація не працює?</string>
<string name="issue_login_message">"
<b>Деякі поради, що можуть допомогти:</b>\n\n
<string name="issue_login_message"> <b>Деякі поради, що можуть допомогти:</b>\n\n
- Перевірте правильність написання назви екземпляру\n\n
- Перевірте, чи екземпляр працює\n\n
- Якщо використовуєте двофакторну авторизацію (2FA), будь ласка скористайтеся посиланням внизу, коли назву екземпляру заповнено\n\n
- Також можна використовувати посилання без 2FA\n\n
- Якщо все одно не працює, повідомте нам на GitHub: https://github.com/stom79/mastalab/issues
"</string>
</string>
<string name="media_ready">Медіа-файл завантажений. Натисніть щоб відобразити.</string>
<string name="data_export_start">Ця дія довготривала, ви отримаєте сповіщення після закінчення.</string>
<string name="data_export_running">Почекайте, будь ласка…</string>
@ -676,17 +668,14 @@
<item>1 день</item>
<item>1 тиждень</item>
</string-array>
<string name="showcase_instance">"
In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
<string name="showcase_instance"> In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
You can start writing first letters and names will be suggested.\n\n
⚠ The Login button will only work if the instance name is valid and the instance is up!
"</string>
<string name="showcase_uid">"
In this field, write the email that is attached to your Mastodon account.
"</string>
<string name="showcase_pwd">"
Last step is to enter your password and click on Login.
"</string>
</string>
<string name="showcase_uid"> In this field, write the email that is attached to your Mastodon account.
</string>
<string name="showcase_pwd"> Last step is to enter your password and click on Login.
</string>
<string name="more_information">More information</string>
<string name="showcase_2FA">If you use 2FA (Two-factor authentication), you need to use this link.\nYou can also use it if you do not want to enter your credentials here.</string>
<!-- languages not translated -->
@ -707,6 +696,7 @@
<string name="some_words_any">Any of these words (space-separated)</string>
<string name="some_words_all">All these words (space-separated)</string>
<string name="some_words_none">None of these words (space-separated)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Change column name</string>
<string name="no_misskey_instance">No Misskey instances</string>
<string name="misskey_instance">Misskey instance</string>
@ -851,6 +841,9 @@
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d vote</item>
<item quantity="few">%d votes</item>

View File

@ -226,12 +226,12 @@
<string name="notif_follow">đã theo bạn</string>
<string name="notif_pouet">Thổi còi mới từ %1$s</string>
<plurals name="other_notifications">
<item quantity="other">"và một thông báo khác
và %d thông báo khác"</item>
<item quantity="other">và một thông báo khác
và %d thông báo khác</item>
</plurals>
<plurals name="other_notif_hometimeline">
<item quantity="other">"và một cái còi khác để khám phá
và %d toots khác để khám phá"</item>
<item quantity="other">và một cái còi khác để khám phá
và %d toots khác để khám phá</item>
</plurals>
<plurals name="likes">
<item quantity="other">%d likes</item>
@ -318,7 +318,7 @@ và %d toots khác để khám phá"</item>
<string name="set_save_changes">Lưu thay đổi</string>
<string name="set_header_picture_overlay">Chọn một hình ảnh tiêu đề</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="set_automatically_split_toot">Automatically split toots in replies when chars are over:</string>
<string name="note_no_space">Bạn đã đạt đến 160 ký tự cho phép!</string>
<string name="username_no_space">Bạn đã đạt đến 30 ký tự!</string>
<string name="settings_time_from">Giữa</string>
@ -385,10 +385,9 @@ và %d toots khác để khám phá"</item>
<string name="set_resize_picture">Resize pictures</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">Push thông báo</string>
<string name="settings_popup_message">"
Vui lòng xác nhận thông báo đẩy mà bạn muốn nhận.
<string name="settings_popup_message">Vui lòng xác nhận thông báo đẩy mà bạn muốn nhận.
Bạn có thể bật hoặc tắt các thông báo này sau trong cài đặt (tab Thông báo).
"</string>
</string>
<string name="settings_popup_timeline">Đối với những con rồng chưa đọc trong dòng thời gian ở nhà?</string>
<string name="settings_popup_notification">Đối với thông báo chưa đọc?</string>
<!-- CACHE -->
@ -425,40 +424,34 @@ Vui lòng xác nhận thông báo đẩy mà bạn muốn nhận.
<string name="owner_cached_toots_empty">No toots were found in database. Please, use the synchronize button from the menu to retrieve them.</string>
<!-- PRIVACY -->
<string name="privacy_data_title">Dữ liệu đã ghi</string>
<string name="privacy_data">"
Chỉ có thông tin cơ bản từ các tài khoản được lưu trữ trên thiết bị.
<string name="privacy_data">Chỉ có thông tin cơ bản từ các tài khoản được lưu trữ trên thiết bị.
Những dữ liệu này là bí mật và chỉ có thể được sử dụng bởi các ứng dụng.
Xóa ứng dụng sẽ xóa ngay các dữ liệu này.\n
&#9888; Đăng nhập và mật khẩu không bao giờ được lưu trữ. Chúng chỉ được sử dụng trong quá trình xác thực an toàn (SSL) với một cá thể.
"</string>
</string>
<string name="privacy_authorizations_title">Quyền:</string>
<string name="privacy_authorizations">"
-<b>ACCESS_NETWORK_STATE</b>: Được dùng để phát hiện nếu thiết bị được kết nối với mạng WIFI.\n
<string name="privacy_authorizations">-<b>ACCESS_NETWORK_STATE</b>: Được dùng để phát hiện nếu thiết bị được kết nối với mạng WIFI.\n
         -<b>INTERNET</b>: Được sử dụng cho truy vấn đến một cá thể.\n
         -<b>WRITE_EXTERNAL_STORAGE</b>: Được sử dụng để lưu trữ phương tiện hoặc để di chuyển ứng dụng trên thẻ SD.\n
         -<b>READ_EXTERNAL_STORAGE</b>: Được sử dụng để thêm phương tiện vào toots.\n
         -<b>BOOT_COMPLETED</b>: Được sử dụng để bắt đầu dịch vụ thông báo.\n
         -<b>WAKE_LOCK</b>: Được sử dụng trong dịch vụ thông báo. "</string>
         -<b>WAKE_LOCK</b>: Được sử dụng trong dịch vụ thông báo. </string>
<string name="privacy_API_authorizations_title">Quyền của API:</string>
<string name="privacy_API_authorizations">"
-<b>Đọc</b>: Đọc dữ liệu.\n
<string name="privacy_API_authorizations">-<b>Đọc</b>: Đọc dữ liệu.\n
         -<b>Viết</b>: Đăng trạng thái và phương tiện tải lên cho các trạng thái.\n
         - <b> Thực hiện theo</b>: Theo dõi, hủy theo dõi, chặn, bỏ chặn.\n\n
         <b>&#9888; Những hành động này chỉ được thực hiện khi người dùng yêu cầu họ.</b> "</string>
         <b>&#9888; Những hành động này chỉ được thực hiện khi người dùng yêu cầu họ.</b> </string>
<string name="privacy_API_title">Theo dõi và Thư viện</string>
<string name="privacy_API">"
Ứng dụng<b>không sử dụng công cụ theo dõi</b>(đo lường đối tượng, báo cáo lỗi, v. v.) và không chứa bất kỳ quảng cáo nào.\n\n
<string name="privacy_API">Ứng dụng<b>không sử dụng công cụ theo dõi</b>(đo lường đối tượng, báo cáo lỗi, v. v.) và không chứa bất kỳ quảng cáo nào.\n\n
         Việc sử dụng thư viện được giảm thiểu:\n
         -<b>Glide </b>: Để quản lý phương tiện truyền thông\n
         -<b>Android-Job</b>: Để quản lý các dịch vụ\n
         -<b>PhotoView</b>: Để quản lý hình ảnh\n "</string>
         -<b>PhotoView</b>: Để quản lý hình ảnh\n </string>
<string name="privacy_API_yandex_title">Dịch thổi còi</string>
<string name="privacy_API_yandex_authorizations">"
Ứng dụng cung cấp khả năng dịch toots bằng cách sử dụng miền địa phương của thiết bị và API Yandex.\n
<string name="privacy_API_yandex_authorizations">Ứng dụng cung cấp khả năng dịch toots bằng cách sử dụng miền địa phương của thiết bị và API Yandex.\n
Yandex có chính sách riêng tư phù hợp của nó có thể được tìm thấy ở đây: https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
Cảm ơn bạn: "</string>
</string>
<string name="thanks_text_dev">Cảm ơn bạn: </string>
<string name="filter_regex">Lọc theo biểu thức thông thường</string>
<string name="search">Tìm kiếm</string>
<string name="delete">Xóa bỏ</string>
@ -479,14 +472,13 @@ Cảm ơn bạn: "</string>
<string name="account_moved_to">%1$s đã chuyển sang %2$s</string>
<string name="show_boost_count">Hiển thị số lần tăng/số lần yêu thích</string>
<string name="issue_login_title">Xác thực không hoạt động?</string>
<string name="issue_login_message">"
<b>Dưới đây là một số kiểm tra có thể giúp:</b>\n\n
<string name="issue_login_message"><b>Dưới đây là một số kiểm tra có thể giúp:</b>\n\n
- Kiểm tra không có lỗi chính tả trong tên dụ\n\n
- Kiểm tra rằng trường hợp của bạn không xuống\n\n
- Nếu bạn sử dụng xác thực hai yếu tố (2FA), vui lòng sử dụng liên kết ở cuối (khi tên cá thể được điền)\n\n
- Bạn cũng có thể sử dụng liên kết này mà không sử dụng 2FA\n\n
- Nếu vẫn không hoạt động, vui lòng nêu lên một vấn đề về Github tại https://github.com/stom79/mastalab/issues
"</string>
</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>
@ -672,17 +664,14 @@ Cảm ơn bạn: "</string>
<item>1 ngày</item>
<item>1 tuần</item>
</string-array>
<string name="showcase_instance">"
In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
<string name="showcase_instance"> In this field, you need to write your instance host name.\nFor example, if you created your account on https://mastodon.social\nJust write <b>mastodon.social</b> (without https://)\n
You can start writing first letters and names will be suggested.\n\n
⚠ The Login button will only work if the instance name is valid and the instance is up!
"</string>
<string name="showcase_uid">"
In this field, write the email that is attached to your Mastodon account.
"</string>
<string name="showcase_pwd">"
Last step is to enter your password and click on Login.
"</string>
</string>
<string name="showcase_uid"> In this field, write the email that is attached to your Mastodon account.
</string>
<string name="showcase_pwd"> Last step is to enter your password and click on Login.
</string>
<string name="more_information">More information</string>
<string name="showcase_2FA">If you use 2FA (Two-factor authentication), you need to use this link.\nYou can also use it if you do not want to enter your credentials here.</string>
<!-- languages not translated -->
@ -703,6 +692,7 @@ Cảm ơn bạn: "</string>
<string name="some_words_any">Any of these words (space-separated)</string>
<string name="some_words_all">All these words (space-separated)</string>
<string name="some_words_none">None of these words (space-separated)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Change column name</string>
<string name="no_misskey_instance">No Misskey instances</string>
<string name="misskey_instance">Misskey instance</string>
@ -847,6 +837,9 @@ Cảm ơn bạn: "</string>
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="other">%d votes</item>
</plurals>

View File

@ -383,10 +383,9 @@
<string name="set_resize_picture">调整图片大小</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">推送通知</string>
<string name="settings_popup_message">"
请确认要接收的推送通知。
<string name="settings_popup_message"> 请确认要接收的推送通知。
您可以稍后在设置(通知选项卡)中启用或禁用这些通知。
"</string>
</string>
<string name="settings_popup_timeline">针对主页时间线的未读嘟文?</string>
<string name="settings_popup_notification">针对未读通知?</string>
<!-- CACHE -->
@ -423,44 +422,38 @@
<string name="owner_cached_toots_empty">在数据库中未发现嘟文,请使用菜单中的同步按钮来检索它们。</string>
<!-- PRIVACY -->
<string name="privacy_data_title">记录的数据</string>
<string name="privacy_data">"
只有帐户中的基本信息才会存储在设备上。
<string name="privacy_data"> 只有帐户中的基本信息才会存储在设备上。
这些数据是严格保密的,而且只能由应用程序使用。
删除应用程序将立即删除这些数据。\n
&#9888; 从不存储登录和密码。它们仅在与实例进行安全身份验证SSL时使用。
"</string>
</string>
<string name="privacy_authorizations_title">权限:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>:用于检测设备是否连接到 WIFI 网络。\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>:用于检测设备是否连接到 WIFI 网络。\n
- <b>INTERNET</b>:用于查询实例。\n
- <b>WRITE_EXTERNAL_STORAGE</b>:用于存储媒体或将应用程序移动到 SD 卡上。\n
- <b>READ_EXTERNAL_STORAGE</b>:用于添加媒体到嘟文。\n
- <b>BOOT_COMPLETED</b>:用于启动通知服务。\n
- <b>WAKE_LOCK</b>:在通知服务期间使用。
"</string>
</string>
<string name="privacy_API_authorizations_title">API 权限:</string>
<string name="privacy_API_authorizations">"
- <b>Read</b>:读取数据。\n
<string name="privacy_API_authorizations"> - <b>Read</b>:读取数据。\n
- <b>Write</b>:发布状态并上传用在状态上的媒体。 \n
- <b>Follow</b>:关注、取消关注、屏蔽、取消屏蔽。\n\n
<b>&#9888; 这些操作仅在用户请求时执行。</b>
"</string>
</string>
<string name="privacy_API_title">跟踪和库</string>
<string name="privacy_API">"
本应用程序 <b>不使用跟踪工具</b>(受众测量、错误报告等),并且不包含任何广告。\n\n
<string name="privacy_API"> 本应用程序 <b>不使用跟踪工具</b>(受众测量、错误报告等),并且不包含任何广告。\n\n
所使用的库也是最为精简的:\n
-<b>Glide</b>:用于管理媒体\n
-<b>Android-Job</b>:用于管理服务\n
-<b>PhotoView</b>:用于管理图像\n
"</string>
</string>
<string name="privacy_API_yandex_title">嘟文的翻译</string>
<string name="privacy_API_yandex_authorizations">"
本应用程序提供了使用设备的区域设置和 Yandex API 进行翻译的功能。\n
<string name="privacy_API_yandex_authorizations"> 本应用程序提供了使用设备的区域设置和 Yandex API 进行翻译的功能。\n
Yandex 有适当的隐私政策可以在这里找到https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
致谢:
"</string>
</string>
<string name="thanks_text_dev"> 致谢:
</string>
<string name="filter_regex">按正则表达式进行筛选</string>
<string name="search">搜索​​​​</string>
<string name="delete">删除</string>
@ -481,14 +474,13 @@
<string name="account_moved_to">%1$s 已被移动到 %2$s</string>
<string name="show_boost_count">显示转嘟/收藏数目</string>
<string name="issue_login_title">身份验证不起作用?</string>
<string name="issue_login_message">"
<b>以下是一些可能有用的检查:</b>\n\n
<string name="issue_login_message"> <b>以下是一些可能有用的检查:</b>\n\n
- 检查实例名是否拼写错误\n\n
- 检查您的实例是否下线\n\n
- 如果您使用双因素身份验证2FA请使用底部的链接实例名填好后\n\n
- 您也可以使用这个链接但不使用双因素身份验证2FA\n\n
- 如果仍不工作,请向 https://github.com/stom79/mastalab/issues 提交问题。
"</string>
</string>
<string name="media_ready">媒体已加载。单击此处显示。</string>
<string name="data_export_start">此操作可能会很久。完成时会通知您。</string>
<string name="data_export_running">仍在运行,请稍候……</string>
@ -674,17 +666,14 @@
<item>1 天</item>
<item>1 星期</item>
</string-array>
<string name="showcase_instance">"
您需要在此字段中填入您的实例主机名。\n例如您在 https://mastodon.social\n 上创建了帐户,直接填入 <b>mastodon.social</b>(不需要 https://\n
<string name="showcase_instance"> 您需要在此字段中填入您的实例主机名。\n例如您在 https://mastodon.social\n 上创建了帐户,直接填入 <b>mastodon.social</b>(不需要 https://\n
您开始填入首个字母后会提示主机名。\n\n
⚠ 登入按钮只有在实例名有效且该实例已上线时有效!
"</string>
<string name="showcase_uid">"
在此字段中,填写连接到您 Mastondon 帐户的电子邮件。
"</string>
<string name="showcase_pwd">"
最后一步是输入您的密码,然后点击登入。
"</string>
</string>
<string name="showcase_uid"> 在此字段中,填写连接到您 Mastondon 帐户的电子邮件。
</string>
<string name="showcase_pwd"> 最后一步是输入您的密码,然后点击登入。
</string>
<string name="more_information">更多信息</string>
<string name="showcase_2FA">如果您使用 2FA双因素身份验证则需要使用此链接。\n如果您不想在此处输入凭据也可以使用它。</string>
<!-- languages not translated -->
@ -705,6 +694,7 @@
<string name="some_words_any">任一关键词(以空格隔开)</string>
<string name="some_words_all">全部关键词(以空格隔开)</string>
<string name="some_words_none">除开关键词(以空格隔开)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">更改列名称</string>
<string name="no_misskey_instance">没有 Misskey 实例</string>
<string name="misskey_instance">Misskey 实例</string>
@ -849,6 +839,9 @@
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="other">%d 票</item>
</plurals>

View File

@ -383,10 +383,9 @@
<string name="set_resize_picture">調整圖片大小</string>
<!-- Quick settings for notifications -->
<string name="settings_popup_title">推播通知</string>
<string name="settings_popup_message">"
請確認要接收的推播通知。
<string name="settings_popup_message"> 請確認要接收的推播通知。
您稍後可以在設定(通知分頁)中啟用或停用這些通知。
"</string>
</string>
<string name="settings_popup_timeline">針對家時間軸的未讀嘟文?</string>
<string name="settings_popup_notification">針對未讀通知?</string>
<!-- CACHE -->
@ -423,44 +422,38 @@
<string name="owner_cached_toots_empty">在資料庫中找不到嘟文。請從選單中使用同步按鈕以擷取它們。</string>
<!-- PRIVACY -->
<string name="privacy_data_title">已記錄的資料</string>
<string name="privacy_data">"
只有帳號中的基本資訊才會儲存在裝置上。\n
<string name="privacy_data"> 只有帳號中的基本資訊才會儲存在裝置上。\n
這些資料嚴格保密,僅能由應用程式使用。\n
刪除應用程式將會立即移除這些資料。\n
&#9888; 不會儲存密碼與登入資訊。它們僅會在有安全驗證 (SSL) 的站台上使用。
"</string>
</string>
<string name="privacy_authorizations_title">權限:</string>
<string name="privacy_authorizations">"
- <b>ACCESS_NETWORK_STATE</b>:用於偵測裝置是否連線至 WIFI 網路。\n
<string name="privacy_authorizations"> - <b>ACCESS_NETWORK_STATE</b>:用於偵測裝置是否連線至 WIFI 網路。\n
- <b>INTERNET</b>:用於查詢站台。\n
- <b>WRITE_EXTERNAL_STORAGE</b>:用於儲存媒體或將應用程式移動到記憶卡上。\n
- <b>READ_EXTERNAL_STORAGE</b>:用於將媒體新增到嘟文中。\n
- <b>BOOT_COMPLETED</b>:用於啟動通知服務。\n
- <b>WAKE_LOCK</b>:在通知服務期間使用。
"</string>
</string>
<string name="privacy_API_authorizations_title">API 權限:</string>
<string name="privacy_API_authorizations">"
- <b>Read</b>:讀取資料。\n
<string name="privacy_API_authorizations"> - <b>Read</b>:讀取資料。\n
- <b>Write</b>:貼出狀態與為狀態上傳媒體。\n
- <b>Follow</b>:關注、取消關注、阻擋、取消阻擋。\n\n
<b>&#9888; 這些動作僅在使用者要求執行時才會執行。</b>
"</string>
</string>
<string name="privacy_API_title">追蹤與函式庫</string>
<string name="privacy_API">"
本應用程式<b>不使用追蹤工具</b>(粉絲追蹤、錯誤回報等等)且不包含任何廣告。\n\n
<string name="privacy_API"> 本應用程式<b>不使用追蹤工具</b>(粉絲追蹤、錯誤回報等等)且不包含任何廣告。\n\n
使用的函式庫也盡量減到最少:\n
- <b>Glide</b>:管理媒體\n
- <b>Android-Job</b>:管理服務\n
- <b>PhotoView</b>:管理圖片\n
"</string>
</string>
<string name="privacy_API_yandex_title">嘟文翻譯</string>
<string name="privacy_API_yandex_authorizations">"
該應用程式提供了使用裝置的語系設定與 Yandex API 進行翻譯的功能。\n
<string name="privacy_API_yandex_authorizations"> 該應用程式提供了使用裝置的語系設定與 Yandex API 進行翻譯的功能。\n
Yandex 有適當的隱私權政策可以在這裡找到https://yandex.ru/legal/confidential/?lang=en
"</string>
<string name="thanks_text_dev">"
感謝您:
"</string>
</string>
<string name="thanks_text_dev"> 感謝您:
</string>
<string name="filter_regex">按正規表達式進行過濾</string>
<string name="search">搜尋</string>
<string name="delete">刪除</string>
@ -481,14 +474,13 @@ Yandex 有適當的隱私權政策可以在這裡找到https://yandex.ru/l
<string name="account_moved_to">%1$s 已經移動到 %2$s</string>
<string name="show_boost_count">顯示嘟文/最愛計數</string>
<string name="issue_login_title">身份驗證無法運作?</string>
<string name="issue_login_message">"
<b>這裡有一些可能會有幫助的檢查:</b>\n\n
<string name="issue_login_message"> <b>這裡有一些可能會有幫助的檢查:</b>\n\n
- 檢查站台名稱沒有拼字錯誤\n\n
- 檢查您的站台是否仍在運行\n\n
- 若您使用雙因素驗證 (2FA),請使用下方的連結(填寫站台名稱後)\n\n
- 您也可以在不使用 2FA 的狀況下使用此連結\n\n
- 若還是無法運作,請在 GitHub 上回報問題,網址為 https://github.com/stom79/mastalab/issues
"</string>
</string>
<string name="media_ready">媒體已載入。點選這裡以顯示。</string>
<string name="data_export_start">此動作可能會很久,您將在完成時收到通知。</string>
<string name="data_export_running">仍在執行中,請稍候……</string>
@ -674,17 +666,14 @@ Yandex 有適當的隱私權政策可以在這裡找到https://yandex.ru/l
<item>1 天</item>
<item>1 週</item>
</string-array>
<string name="showcase_instance">"
在此欄位,您必須填寫您的站台主機名稱。\n舉例來說如果您在 https://mastodon.social 上建立帳號\n只要填寫 <b>mastodon.social</b>(不要填寫 https://\n
<string name="showcase_instance"> 在此欄位,您必須填寫您的站台主機名稱。\n舉例來說如果您在 https://mastodon.social 上建立帳號\n只要填寫 <b>mastodon.social</b>(不要填寫 https://\n
您可以填寫首字母,然後就會有建議的名稱。\n\n
⚠ 登入按鈕將只在站台名稱有效且站台正常運作時才會運作!
"</string>
<string name="showcase_uid">"
在此欄位,填寫要連結到您的 Mastodon 帳號的電子郵件。
"</string>
<string name="showcase_pwd">"
最後一步是輸入您的密碼並點選登入。
"</string>
</string>
<string name="showcase_uid"> 在此欄位,填寫要連結到您的 Mastodon 帳號的電子郵件。
</string>
<string name="showcase_pwd"> 最後一步是輸入您的密碼並點選登入。
</string>
<string name="more_information">更多資訊</string>
<string name="showcase_2FA">如果您使用雙因素驗證,您必須使用此連結。\n您也可以在不想在此輸入憑證時使用它。</string>
<!-- languages not translated -->
@ -705,6 +694,7 @@ Yandex 有適當的隱私權政策可以在這裡找到https://yandex.ru/l
<string name="some_words_any">這些字詞的其中一個(以空格分開)</string>
<string name="some_words_all">這些字詞全部(以空格分開)</string>
<string name="some_words_none">這些字詞都不要(以空格分開)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">變更欄位名稱</string>
<string name="no_misskey_instance">沒有 Misskey 站台</string>
<string name="misskey_instance">Misskey 站台</string>
@ -849,6 +839,9 @@ Yandex 有適當的隱私權政策可以在這裡找到https://yandex.ru/l
<string name="set_blur_sensitive">將敏感內容模糊化</string>
<string name="set_display_timeline_in_list">以清單顯示時間軸</string>
<string name="display_timeline">顯示時間軸</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="other">%d 人投票</item>
</plurals>

View File

@ -341,7 +341,7 @@
<string name="set_save_changes">Save changes</string>
<string name="set_header_picture_overlay">Choose a header picture</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="set_automatically_split_toot">Automatically split toots in replies when chars are over:</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>
@ -800,6 +800,7 @@
<string name="some_words_any">Any of these words (space-separated)</string>
<string name="some_words_all">All these words (space-separated)</string>
<string name="some_words_none">None of these words (space-separated)</string>
<string name="some_tags">Add some words to filter (space-separated)</string>
<string name="change_tag_column">Change column name</string>
<string name="no_misskey_instance">No Misskey instances</string>
<string name="misskey_instance">Misskey instance</string>
@ -946,6 +947,9 @@
<string name="set_blur_sensitive">Blur sensitive media</string>
<string name="set_display_timeline_in_list">Display timelines in a list</string>
<string name="display_timeline">Display timelines</string>
<string name="set_display_bot_icon">Mark bot accounts in toots</string>
<string name="add_tags">Manage tags</string>
<string name="set_remember_position">Remember the position in Home timeline</string>
<plurals name="number_of_vote">
<item quantity="one">%d vote</item>

View File

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

View File

@ -0,0 +1,16 @@
Added
- Filter followed instances with tags
- Allow do disable the remember position feature
- Bot icon can be disabled
- Support onion instances over SSL
- Booster accounts are clickable
- Proxy available for the built-in browser
Fixed
- Fixed conversations in compact mode
- Crashes when importing data with Pleroma
- Issue when attaching media with cross-account actions
- Statuses with one char or emoji
- Top bar hidden with media player.
- Some old toots at the top
- Some crashes