Merge branch 'main' into upgrade

This commit is contained in:
Rohit Verma 2024-08-28 20:09:03 +05:30 committed by GitHub
commit d9494abf24
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
18 changed files with 395 additions and 317 deletions

View file

@ -47,7 +47,7 @@ dependencies {
implementation 'com.jakewharton.timber:timber:4.7.1'
implementation 'com.github.deano2390:MaterialShowcaseView:1.2.0'
implementation "com.google.android.material:material:1.12.0"
implementation "com.google.android.material:material:1.9.0"
implementation 'com.karumi:dexter:5.0.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'

View file

@ -73,18 +73,20 @@ import fr.free.nrw.commons.description.DescriptionEditHelper;
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
import fr.free.nrw.commons.explore.depictions.WikidataItemDetailsActivity;
import fr.free.nrw.commons.kvstore.JsonKvStore;
import fr.free.nrw.commons.language.AppLanguageLookUpTable;
import fr.free.nrw.commons.location.LocationServiceManager;
import fr.free.nrw.commons.profile.ProfileActivity;
import fr.free.nrw.commons.review.ReviewHelper;
import fr.free.nrw.commons.settings.Prefs;
import fr.free.nrw.commons.ui.widget.HtmlTextView;
import fr.free.nrw.commons.upload.UploadMediaDetail;
import fr.free.nrw.commons.upload.categories.UploadCategoriesFragment;
import fr.free.nrw.commons.upload.depicts.DepictsFragment;
import fr.free.nrw.commons.upload.UploadMediaDetail;
import fr.free.nrw.commons.utils.DateUtil;
import fr.free.nrw.commons.utils.DialogUtil;
import fr.free.nrw.commons.utils.PermissionUtils;
import fr.free.nrw.commons.utils.ViewUtil;
import fr.free.nrw.commons.utils.ViewUtilWrapper;
import fr.free.nrw.commons.wikidata.mwapi.MwQueryPage;
import io.reactivex.Observable;
import io.reactivex.ObservableSource;
import io.reactivex.Single;
@ -105,9 +107,6 @@ import java.util.regex.Pattern;
import javax.inject.Inject;
import javax.inject.Named;
import org.apache.commons.lang3.StringUtils;
import fr.free.nrw.commons.wikidata.mwapi.MwQueryPage;
import fr.free.nrw.commons.language.AppLanguageLookUpTable;
import fr.free.nrw.commons.utils.DateUtil;
import timber.log.Timber;
public class MediaDetailFragment extends CommonsDaggerSupportFragment implements
@ -487,12 +486,18 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment implements
}
private void onDeletionPageExists(Boolean deletionPageExists) {
if (deletionPageExists){
if(applicationKvStore.getBoolean(String.format(NOMINATING_FOR_DELETION_MEDIA, media.getImageUrl()), false)) {
applicationKvStore.remove(String.format(NOMINATING_FOR_DELETION_MEDIA, media.getImageUrl()));
if (AccountUtil.getUserName(getContext()) == null && !AccountUtil.getUserName(getContext()).equals(media.getAuthor())) {
binding.nominateDeletion.setVisibility(GONE);
binding.nominatedDeletionBanner.setVisibility(GONE);
} else if (deletionPageExists) {
if (applicationKvStore.getBoolean(
String.format(NOMINATING_FOR_DELETION_MEDIA, media.getImageUrl()), false)) {
applicationKvStore.remove(
String.format(NOMINATING_FOR_DELETION_MEDIA, media.getImageUrl()));
binding.progressBarDeletion.setVisibility(GONE);
}
binding.nominateDeletion.setVisibility(GONE);
binding.nominatedDeletionBanner.setVisibility(VISIBLE);
} else if (!isCategoryImage) {
binding.nominateDeletion.setVisibility(VISIBLE);
@ -1174,7 +1179,7 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment implements
//Reviewer correct me if i have misunderstood something over here
//But how does this if (delete.getVisibility() == View.VISIBLE) {
// enableDeleteButton(true); makes sense ?
else {
else if (AccountUtil.getUserName(getContext()) != null) {
final EditText input = new EditText(getActivity());
input.requestFocus();
AlertDialog d = DialogUtil.showAlertDialog(getActivity(),

View file

@ -15,7 +15,7 @@ import fr.free.nrw.commons.theme.BaseActivity;
public class SettingsActivity extends BaseActivity {
private ActivitySettingsBinding binding;
private AppCompatDelegate settingsDelegate;
// private AppCompatDelegate settingsDelegate;
/**
* to be called when the activity starts
* @param savedInstanceState the previously saved state
@ -39,10 +39,10 @@ public class SettingsActivity extends BaseActivity {
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
if (settingsDelegate == null) {
settingsDelegate = AppCompatDelegate.create(this, null);
}
settingsDelegate.onPostCreate(savedInstanceState);
// if (settingsDelegate == null) {
// settingsDelegate = AppCompatDelegate.create(this, null);
// }
// settingsDelegate.onPostCreate(savedInstanceState);
}
@Override

View file

@ -1,5 +1,6 @@
package fr.free.nrw.commons.upload
import fr.free.nrw.commons.upload.depicts.Claims
import fr.free.nrw.commons.wikidata.WikidataConstants
import fr.free.nrw.commons.wikidata.mwapi.MwPostResponse
import fr.free.nrw.commons.wikidata.mwapi.MwQueryResponse
@ -34,7 +35,7 @@ interface WikiBaseInterface {
</MwPostResponse> */
@Headers("Cache-Control: no-cache")
@FormUrlEncoded
@POST(WikidataConstants.MW_API_PREFIX + "action=wbeditentity&site=commonswiki&clear=1")
@POST(WikidataConstants.MW_API_PREFIX + "action=wbeditentity&site=commonswiki")
fun postEditEntityByFilename(
@Field("title") filename: String,
@Field("token") editToken: String,
@ -59,4 +60,19 @@ interface WikiBaseInterface {
@Field("language") language: String?,
@Field("value") captionValue: String?
): Observable<MwPostResponse>
@GET(WikidataConstants.MW_API_PREFIX + "action=wbgetclaims")
fun getClaimsByProperty(
@Query("entity") entityId: String,
@Query("property") property: String
) : Observable<Claims>
@Headers("Cache-Control: no-cache")
@FormUrlEncoded
@POST(WikidataConstants.MW_API_PREFIX + "action=wbeditentity")
fun postDeleteClaims(
@Field("token") editToken: String,
@Field("id") entityId: String,
@Field("data") data: String
): Observable<MwPostResponse>
}

View file

@ -0,0 +1,9 @@
package fr.free.nrw.commons.upload.depicts
import com.google.gson.annotations.SerializedName
import fr.free.nrw.commons.wikidata.model.Statement_partial
data class Claims(
@SerializedName(value = "claims")
val claims: Map<String, List<Statement_partial>> = emptyMap()
)

View file

@ -69,7 +69,7 @@ class DepictEditHelper @Inject constructor (notificationHelper: NotificationHelp
*/
private fun addDepiction(media: Media, depictions: List<String>): Observable<Boolean> {
Timber.d("thread is adding depiction %s", Thread.currentThread().name)
return wikidataEditService.updateDepictsProperty(media.filename, depictions)
return wikidataEditService.updateDepictsProperty(media.pageId, depictions)
}
/**

View file

@ -1,112 +1,99 @@
package fr.free.nrw.commons.upload.depicts
import androidx.room.*
import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import fr.free.nrw.commons.upload.structure.depictions.DepictedItem
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import java.util.*
import java.util.Date
/**
* Dao class for DepictsRoomDataBase
*/
@Dao
abstract class DepictsDao {
/** The maximum number of depicts allowed in the database. */
private val maxItemsAllowed = 10
/**
* insert Depicts in DepictsRoomDataBase
*/
@Insert(onConflict = OnConflictStrategy.REPLACE)
abstract suspend fun insert(depictedItem: Depicts)
/**
* get all Depicts from roomdatabase
*/
@Query("Select * From depicts_table order by lastUsed DESC")
abstract suspend fun getAllDepict(): List<Depicts>
abstract suspend fun getAllDepicts(): List<Depicts>
/**
* get all Depicts which need to delete from roomdatabase
*/
@Query("Select * From depicts_table order by lastUsed DESC LIMIT :n OFFSET 10")
abstract suspend fun getItemToDelete(n: Int): List<Depicts>
abstract suspend fun getDepictsForDeletion(n: Int): List<Depicts>
/**
* Delete Depicts from roomdatabase
*/
@Delete
abstract suspend fun delete(depicts: Depicts)
lateinit var allDepict: List<Depicts>
lateinit var listOfDelete: List<Depicts>
/**
* get all depicts from DepictsRoomDatabase
* Gets all Depicts objects from the database, ordered by lastUsed in descending order.
*
* @return A list of Depicts objects.
*/
fun depictsList(): List<Depicts> {
runBlocking {
launch(Dispatchers.IO) {
allDepict = getAllDepict()
}
}
return allDepict
fun depictsList(): Deferred<List<Depicts>> = CoroutineScope(Dispatchers.IO).async {
getAllDepicts()
}
/**
* insert Depicts in DepictsRoomDataBase
* Inserts a Depicts object into the database.
*
* @param depictedItem The Depicts object to insert.
*/
fun insertDepict(depictes: Depicts) {
runBlocking {
launch(Dispatchers.IO) {
insert(depictes)
}
}
private fun insertDepict(depictedItem: Depicts) = CoroutineScope(Dispatchers.IO).launch {
insert(depictedItem)
}
/**
* get all Depicts item which need to delete
* Gets a list of Depicts objects that need to be deleted from the database.
*
* @param n The number of depicts to delete.
* @return A list of Depicts objects to delete.
*/
fun getItemTodelete(number: Int): List<Depicts> {
runBlocking {
launch(Dispatchers.IO) {
listOfDelete = getItemToDelete(number)
}
}
return listOfDelete
private suspend fun depictsForDeletion(n: Int): Deferred<List<Depicts>> = CoroutineScope(Dispatchers.IO).async {
getDepictsForDeletion(n)
}
/**
* delete Depicts in DepictsRoomDataBase
* Deletes a Depicts object from the database.
*
* @param depicts The Depicts object to delete.
*/
fun deleteDepicts(depictes: Depicts) {
runBlocking {
launch(Dispatchers.IO) {
delete(depictes)
}
}
private suspend fun deleteDepicts(depicts: Depicts) = CoroutineScope(Dispatchers.IO).launch {
delete(depicts)
}
/**
* save Depicts in DepictsRoomDataBase
* Saves a list of DepictedItems in the DepictsRoomDataBase.
*/
fun savingDepictsInRoomDataBase(listDepictedItem: List<DepictedItem>) {
var numberofItemInRoomDataBase: Int
val maxNumberOfItemSaveInRoom = 10
CoroutineScope(Dispatchers.IO).launch {
for (depictsItem in listDepictedItem) {
depictsItem.isSelected = false
insertDepict(Depicts(depictsItem, Date()))
}
for (depictsItem in listDepictedItem) {
depictsItem.isSelected = false
insertDepict(Depicts(depictsItem, Date()))
// Deletes old Depicts objects from the database if
// the number of depicts exceeds the maximum allowed.
deleteOldDepictions(depictsList().await().size)
}
}
numberofItemInRoomDataBase = depictsList().size
// delete the depictItem from depictsroomdataBase when number of element in depictsroomdataBase is greater than 10
if (numberofItemInRoomDataBase > maxNumberOfItemSaveInRoom) {
private suspend fun deleteOldDepictions(depictsListSize: Int) {
if(depictsListSize > maxItemsAllowed) {
val depictsForDeletion = depictsForDeletion(depictsListSize).await()
val listOfDepictsToDelete: List<Depicts> =
getItemTodelete(numberofItemInRoomDataBase)
for (i in listOfDepictsToDelete) {
deleteDepicts(i)
for(depicts in depictsForDeletion) {
deleteDepicts(depicts)
}
}
}
}

View file

@ -16,9 +16,9 @@ import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.processors.PublishProcessor
import io.reactivex.schedulers.Schedulers
import kotlinx.coroutines.runBlocking
import timber.log.Timber
import java.lang.reflect.Proxy
import java.util.*
import javax.inject.Inject
import javax.inject.Named
import javax.inject.Singleton
@ -85,7 +85,7 @@ class DepictsPresenter @Inject constructor(
var recentDepictedItemList: MutableList<DepictedItem> = ArrayList();
//show recentDepictedItemList when queryString is empty
if (querystring.isEmpty()) {
recentDepictedItemList = getRecentDepictedItems();
recentDepictedItemList = getRecentDepictedItems().toMutableList()
}
if (media == null) {
@ -223,9 +223,8 @@ class DepictsPresenter @Inject constructor(
if (error is InvalidLoginTokenException) {
view.navigateToLoginScreen();
} else {
Timber.e(
"Failed to update depictions"
)
view.dismissProgressDialog()
Timber.e("Failed to update depictions")
}
})
)
@ -266,14 +265,9 @@ class DepictsPresenter @Inject constructor(
/**
* Get the depicts from DepictsRoomdataBase
*/
fun getRecentDepictedItems(): MutableList<DepictedItem> {
val depictedItemList: MutableList<DepictedItem> = ArrayList()
val depictsList = depictsDao.depictsList()
for (i in depictsList.indices) {
val depictedItem = depictsList[i].item
depictedItemList.add(depictedItem)
}
return depictedItemList
private fun getRecentDepictedItems(): List<DepictedItem> = runBlocking {
val depictsList = depictsDao.depictsList().await()
return@runBlocking depictsList.map { it.item }
}
}

View file

@ -8,7 +8,6 @@ import fr.free.nrw.commons.upload.WikiBaseInterface
import fr.free.nrw.commons.wikidata.mwapi.MwPostResponse
import fr.free.nrw.commons.wikidata.mwapi.MwQueryResponse
import io.reactivex.Observable
import timber.log.Timber
import javax.inject.Inject
import javax.inject.Named
import javax.inject.Singleton
@ -42,12 +41,29 @@ class WikiBaseClient @Inject constructor(
}
}
fun getClaimIdsByProperty(fileEntityId: String, property: String ): Observable<List<String>> {
return wikiBaseInterface.getClaimsByProperty(fileEntityId, property).map { claimsResponse ->
claimsResponse.claims[property]?.mapNotNull { claim -> claim.id } ?: emptyList()
}
}
fun postDeleteClaims(entityId: String, data: String?): Observable<Boolean> {
return csrfToken().switchMap { editToken ->
wikiBaseInterface.postDeleteClaims(editToken, entityId, data!!)
.map { response: MwPostResponse -> response.successVal == 1 }
}
}
fun getFileEntityId(uploadResult: UploadResult): Observable<Long> {
return wikiBaseInterface.getFileEntityId(uploadResult.createCanonicalFileName())
.map { response: MwQueryResponse -> response.query()!!.pages()!![0].pageId().toLong() }
}
fun addLabelstoWikidata(fileEntityId: Long, languageCode: String?, captionValue: String?): Observable<MwPostResponse> {
fun addLabelsToWikidata(
fileEntityId: Long,
languageCode: String?,
captionValue: String?
): Observable<MwPostResponse> {
return csrfToken().switchMap { editToken ->
wikiBaseInterface.addLabelstoWikidata(
PAGE_ID_PREFIX + fileEntityId,

View file

@ -8,7 +8,6 @@ import android.content.Context;
import androidx.annotation.Nullable;
import com.google.gson.Gson;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.auth.csrf.InvalidLoginTokenException;
import fr.free.nrw.commons.contributions.Contribution;
import fr.free.nrw.commons.kvstore.JsonKvStore;
import fr.free.nrw.commons.upload.UploadResult;
@ -19,9 +18,11 @@ import fr.free.nrw.commons.utils.ViewUtil;
import fr.free.nrw.commons.wikidata.model.DataValue;
import fr.free.nrw.commons.wikidata.model.DataValue.ValueString;
import fr.free.nrw.commons.wikidata.model.EditClaim;
import fr.free.nrw.commons.wikidata.model.RemoveClaim;
import fr.free.nrw.commons.wikidata.model.Snak_partial;
import fr.free.nrw.commons.wikidata.model.Statement_partial;
import fr.free.nrw.commons.wikidata.model.WikiBaseMonolingualTextValue;
import fr.free.nrw.commons.wikidata.mwapi.MwPostResponse;
import io.reactivex.Observable;
import io.reactivex.schedulers.Schedulers;
import java.util.ArrayList;
@ -34,7 +35,6 @@ import java.util.UUID;
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
import fr.free.nrw.commons.wikidata.mwapi.MwPostResponse;
import timber.log.Timber;
/**
@ -72,9 +72,10 @@ public class WikidataEditService {
* to the wikibase API to set tag against the entity.
*/
@SuppressLint("CheckResult")
private Observable<Boolean> addDepictsProperty(final String fileEntityId,
final List<String> depictedItems) {
private Observable<Boolean> addDepictsProperty(
final String fileEntityId,
final List<String> depictedItems
) {
final EditClaim data = editClaim(
ConfigUtils.isBetaFlavour() ? Collections.singletonList("Q10")
// Wikipedia:Sandbox (Q10)
@ -100,45 +101,54 @@ public class WikidataEditService {
* Takes depicts ID as a parameter and create a uploadable data with the Id
* and send the data for POST operation
*
* @param filename name of the file
* @param depictedItems ID of the selected depict item
* @param fileEntityId ID of the file
* @param depictedItems IDs of the selected depict item
* @return Observable<Boolean>
*/
@SuppressLint("CheckResult")
public Observable<Boolean> updateDepictsProperty(final String filename,
final List<String> depictedItems) {
public Observable<Boolean> updateDepictsProperty(
final String fileEntityId,
final List<String> depictedItems
) {
final String entityId = PAGE_ID_PREFIX + fileEntityId;
final List<String> claimIds = getDepictionsClaimIds(entityId);
final EditClaim data = editClaim(
final RemoveClaim data = removeClaim( /* Please consider removeClaim scenario for BetaDebug */
ConfigUtils.isBetaFlavour() ? Collections.singletonList("Q10")
// Wikipedia:Sandbox (Q10)
: depictedItems
: claimIds
);
return wikiBaseClient.postEditEntityByFilename(filename,
gson.toJson(data))
.doOnNext(success -> {
if (success) {
Timber.d("DEPICTS property was set successfully for %s", filename);
} else {
Timber.d("Unable to set DEPICTS property for %s", filename);
}
})
return wikiBaseClient.postDeleteClaims(entityId, gson.toJson(data))
.doOnError(throwable -> {
if (throwable instanceof InvalidLoginTokenException) {
Observable.error(throwable);
Timber.e(throwable, "Error occurred while removing existing claims for DEPICTS property");
ViewUtil.showLongToast(context, context.getString(R.string.wikidata_edit_failure));
}).switchMap(success-> {
if(success) {
Timber.d("DEPICTS property was deleted successfully");
return addDepictsProperty(fileEntityId, depictedItems);
} else {
Timber.e(throwable, "Error occurred while setting DEPICTS property");
ViewUtil.showLongToast(context, throwable.toString());
Timber.d("Unable to delete DEPICTS property");
return Observable.empty();
}
});
}
})
.subscribeOn(Schedulers.io());
@SuppressLint("CheckResult")
private List<String> getDepictionsClaimIds(final String entityId) {
return wikiBaseClient.getClaimIdsByProperty(entityId, WikidataProperties.DEPICTS.getPropertyName())
.subscribeOn(Schedulers.io())
.blockingFirst();
}
private EditClaim editClaim(final List<String> entityIds) {
return EditClaim.from(entityIds, WikidataProperties.DEPICTS.getPropertyName());
}
private RemoveClaim removeClaim(final List<String> claimIds) {
return RemoveClaim.from(claimIds);
}
/**
* Show a success toast when the edit is made successfully
*/
@ -156,11 +166,10 @@ public class WikidataEditService {
* @param fileEntityId
* @return
*/
@SuppressLint("CheckResult")
private Observable<Boolean> addCaption(final long fileEntityId, final String languageCode,
final String captionValue) {
return wikiBaseClient.addLabelstoWikidata(fileEntityId, languageCode, captionValue)
return wikiBaseClient.addLabelsToWikidata(fileEntityId, languageCode, captionValue)
.doOnNext(mwPostResponse -> onAddCaptionResponse(fileEntityId, mwPostResponse))
.doOnError(throwable -> {
Timber.e(throwable, "Error occurred while setting Captions");
@ -220,8 +229,10 @@ public class WikidataEditService {
}
}
public Observable addDepictionsAndCaptions(final UploadResult uploadResult,
final Contribution contribution) {
public Observable<Boolean> addDepictionsAndCaptions(
final UploadResult uploadResult,
final Contribution contribution
) {
return wikiBaseClient.getFileEntityId(uploadResult)
.doOnError(throwable -> {
Timber

View file

@ -11,19 +11,19 @@ data class EditClaim(val claims: List<Statement_partial>) {
entityIds.forEach {
list.add(
Statement_partial(
Snak_partial(
"value",
propertyName,
DataValue.EntityId(
mainSnak = Snak_partial(
snakType = "value",
property = propertyName,
dataValue = DataValue.EntityId(
WikiBaseEntityValue(
"item",
it,
it.removePrefix("Q").toLong()
entityType = "item",
id = it,
numericId = it.removePrefix("Q").toLong()
)
)
),
"statement",
"preferred"
type = "statement",
rank = "preferred"
)
)
}

View file

@ -0,0 +1,20 @@
package fr.free.nrw.commons.wikidata.model
data class RemoveClaim(val claims: List<ClaimRemoveRequest>) {
companion object {
@JvmStatic
fun from(claimIds: List<String>): RemoveClaim {
val claimsToRemove = mutableListOf<ClaimRemoveRequest>()
claimIds.forEach {
claimsToRemove.add(
ClaimRemoveRequest(id = it, remove = "")
)
}
return RemoveClaim(claimsToRemove)
}
}
}
data class ClaimRemoveRequest(val id: String, val remove: String)

View file

@ -5,15 +5,15 @@ import com.google.gson.annotations.SerializedName
/*"mainsnak": {
"snaktype": "value",
"property": "P17",
"datatype": "wikibase-item",
"datavalue": {
"value": {
"entity-type": "item",
"id": "Q30",
"numeric-id": 30
},
"entity-type": "item",
"numeric-id": 30,
"id": "Q30"
},
"type": "wikibase-entityid"
}
},
"datatype": "wikibase-item",
}*/
data class Snak_partial(
@SerializedName("snaktype") val snakType: String,

View file

@ -3,9 +3,9 @@ package fr.free.nrw.commons.wikidata.model
import com.google.gson.annotations.SerializedName
/*{
"id": "q60$5083E43C-228B-4E3E-B82A-4CB20A22A3FB",
"mainsnak": {},
"type": "statement",
"id": "q60$5083E43C-228B-4E3E-B82A-4CB20A22A3FB",
"rank": "normal",
"qualifiers": {
"P580": [],

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Authors:
* AntonyFragakis
* Astralnet
* Domdomegg
* Evropi
@ -24,51 +25,51 @@
* Vtalos
-->
<resources>
<string name="commons_facebook">Σελίδα των Κοινών στο Facebook</string>
<string name="commons_github">Κώδικας πηγής των Κοινών στο GitHub</string>
<string name="commons_facebook">Σελίδα Commons στο Facebook</string>
<string name="commons_github">Πηγαίος κώδικας των Commons στο GitHub</string>
<string name="commons_logo">Λογότυπο Commons</string>
<string name="commons_website">Ιστοσελίδα των Κοινών</string>
<string name="commons_website">Ιστοσελίδα Commons</string>
<string name="exit_location_picker">Έξοδος από το εργαλείο επιλογής τοποθεσίας</string>
<string name="submit">Υποβολή</string>
<string name="add_another_description">Επιλέξτε άλλη περιγραφή</string>
<string name="add_another_description">Προσθέστε άλλη περιγραφή</string>
<string name="add_new_contribution">Προσθέστε νέα συνεισφορά</string>
<string name="add_contribution_from_camera">Προσθέστε συνεισφορά από την κάμερα</string>
<string name="add_contribution_from_photos">Προσθέστε συνεισφορά από τις Φωτογραφίες</string>
<string name="add_contribution_from_contributions_gallery">Προσθέστε συνεισφορά από προηγούμενη συλλογή συνεισφορών</string>
<string name="add_contribution_from_contributions_gallery">Προσθήκη συνεισφοράς από προηγούμενη συλλογή συνεισφορών</string>
<string name="show_captions">Λεζάντες</string>
<string name="row_item_language_description">Περιγραφή Γλώσσας</string>
<string name="row_item_language_description">Περιγραφή γλώσσας</string>
<string name="row_item_caption">Λεζάντα</string>
<string name="show_captions_description">Περιγραφή</string>
<string name="nearby_row_image">Εικόνα</string>
<string name="nearby_all">Όλα</string>
<string name="nearby_filter_toggle">Ενεργοποιήστε</string>
<string name="nearby_filter_toggle">Εναλλαγή προς τα επάνω</string>
<string name="nearby_filter_search">Προβολή αναζήτησης</string>
<string name="nearby_filter_state">Κατάσταση τοποθεσίας</string>
<string name="appwidget_img">Φωτογραφία της Ημέρας</string>
<string name="appwidget_img">Φωτογραφία της ημέρας</string>
<plurals name="uploads_pending_notification_indicator">
<item quantity="one">1 αρχείο επιφορτώνεται</item>
<item quantity="other">%1$d αρχεία επιφορτώνονται</item>
<item quantity="one">%1$d μεταφόρτωση αρχείου</item>
<item quantity="other"> %1$d μεταφόρτωση αρχείων</item>
</plurals>
<plurals name="contributions_subtitle">
<item quantity="one">(%1$d)</item>
<item quantity="other">(%1$d)</item>
</plurals>
<string name="starting_uploads">Έναρξη Μεταφορτώσεων</string>
<string name="starting_uploads">Έναρξη μεταφορτώσεων</string>
<plurals name="starting_multiple_uploads">
<item quantity="one">Επεξεργασία %d μεταφόρτωσης</item>
<item quantity="other">Επεξεργασία %d μεταφορτώσεων</item>
</plurals>
<plurals name="multiple_uploads_title">
<item quantity="one">%d μεταφορτώνεται</item>
<item quantity="other">%d μεταφορτώνονται</item>
<item quantity="one">%d μεταφόρτωση</item>
<item quantity="other"> %d μεταφορτώσεις</item>
</plurals>
<plurals name="share_license_summary">
<item quantity="one">Αυτή η εικόνα θα αδειοδοτηθεί υπό την %1$s</item>
<item quantity="other">Αυτές οι εικόνες θα αδειοδοτηθούν υπό την %1$s</item>
</plurals>
<plurals name="upload_count_title">
<item quantity="one">%1$d Ανέβασμα στον υπολογιστή</item>
<item quantity="other">%1$d Ανεβάσματα στον υπολογιστή</item>
<item quantity="one">%1$d Μεταφόρτωση</item>
<item quantity="other"> %1$d Μεταφορτώσεις</item>
</plurals>
<plurals name="receiving_shared_content">
<item quantity="one">Λήψη κοινόχρηστου περιεχομένου. Η επεξεργασία της εικόνας μπορεί να πάρει κάποιο χρόνο ανάλογα με το μέγεθος της εικόνας και τη συσκευή σας</item>
@ -78,142 +79,142 @@
<string name="preference_category_appearance">Εμφάνιση</string>
<string name="preference_category_general">Γενικά</string>
<string name="preference_category_feedback">Ανατροφοδότηση</string>
<string name="preference_category_privacy">Ιδιωτικότητα</string>
<string name="preference_category_privacy">Απόρρητο</string>
<string name="app_name">Commons</string>
<string name="bullet"></string>
<string name="menu_settings">Ρυθμίσεις</string>
<string name="intent_share_upload_label">Ανέβασμα στα Κοινά</string>
<string name="upload_in_progress">Ανέβασμα σε εξέλιξη...</string>
<string name="intent_share_upload_label">Μεταφόρτωση στα Commons</string>
<string name="upload_in_progress">Μεταφόρτωση σε εξέλιξη</string>
<string name="username">Όνομα χρήστη</string>
<string name="password">Κωδικός πρόσβασης</string>
<string name="login_credential">Συνδεθείτε στο λογαριασμό σας στο Commons Beta</string>
<string name="login_credential">Συνδεθείτε στον λογαριασμό σας στο Commons Beta</string>
<string name="login">Σύνδεση</string>
<string name="forgot_password">Ξεχάσατε τον κωδικό σας;</string>
<string name="forgot_password">Ξεχάσατε τον κωδικό πρόσβασης σας;</string>
<string name="signup">Εγγραφή</string>
<string name="logging_in_title">Γίνεται σύνδεση</string>
<string name="logging_in_message">Παρακαλούμε περιμένετε…</string>
<string name="logging_in_title">Γίνεται σύνδεση...</string>
<string name="logging_in_message">Παρακαλούμε αναμείνετε…</string>
<string name="updating_caption_title">Ενημέρωση λεζάντων και περιγραφών</string>
<string name="updating_caption_message">Παρακαλούμε περιμένετε…</string>
<string name="updating_caption_message">Παρακαλούμε αναμείνετε…</string>
<string name="login_success">Επιτυχής σύνδεση!</string>
<string name="login_failed">Η είσοδος απέτυχε!</string>
<string name="upload_failed">Το αρχείο δεν βρέθηκε. Παρακαλώ δοκιμάστε ένα άλλο αρχείο.</string>
<string name="retry_limit_reached">Συμπληρώθηκε το μέγιστο όριο επανάληψης! Ακυρώστε τη μεταφόρτωση και προσπαθήστε ξανά</string>
<string name="unrestricted_battery_mode">Απενεργοποίηση βελτιστοποίησης μπαταρίας;</string>
<string name="suggest_unrestricted_mode">Η μεταφόρτωση περισσότερων από 3 εικόνων λειτουργεί πιο αξιόπιστα όταν η βελτιστοποίηση μπαταρίας είναι απενεργοποιημένη. Απενεργοποιήστε τη βελτιστοποίηση μπαταρίας για την εφαρμογή Commons από τις ρυθμίσεις για μια ομαλή εμπειρία μεταφόρτωσης. \n\nΠιθανά βήματα για να απενεργοποιήσετε τη βελτιστοποίηση μπαταρίας:\n\nΒήμα 1: Πατήστε στο κουμπί \"Ρυθμίσεις\" παρακάτω.\n\nΒήμα 2: Εναλλαγή από \"Μη βελτιστοποιημένη\" σε \"Σε όλες τις εφαρμογές\".\n\nΒήμα 3: Αναζήτηση για \"Commons\" ή \"fr.free.nrw.commons\".\n\nΒήμα 4: Πατήστε το και επιλέξτε \"Να μην γίνει βελτιστοποίηση\".\n\nΒήμα 5: Πατήστε \'Τέλος\'.</string>
<string name="authentication_failed">Απέτυχε ο έλεγχος ταυτότητας, παρακαλώ συνδεθείτε ξανά.</string>
<string name="uploading_started">Η αποστολή ξεκίνησε!</string>
<string name="upload_failed">Το αρχείο δε βρέθηκε. Παρακαλούμε δοκιμάστε άλλο αρχείο.</string>
<string name="retry_limit_reached">Συμπληρώθηκε το μέγιστο όριο επανάληψης! Παρακαλούμε ακυρώστε τη μεταφόρτωση και προσπαθήστε ξανά</string>
<string name="unrestricted_battery_mode">Απενεργοποίηση της βελτιστοποίησης μπαταρίας;</string>
<string name="suggest_unrestricted_mode">Η μεταφόρτωση περισσότερων από 3 εικόνων λειτουργεί πιο αξιόπιστα όταν η βελτιστοποίηση μπαταρίας είναι απενεργοποιημένη. Παρακαλούμε απενεργοποιήστε τη βελτιστοποίηση μπαταρίας για την εφαρμογή Commons από τις ρυθμίσεις για μια ομαλή εμπειρία μεταφόρτωσης. \n\nΠιθανά βήματα για να απενεργοποιήσετε τη βελτιστοποίηση μπαταρίας:\n\nΒήμα 1: Πατήστε στο κουμπί «Ρυθμίσεις» παρακάτω.\n\nΒήμα 2: Εναλλάξτε από «Μη βελτιστοποιημένη» σε «Σε όλες τις εφαρμογές».\n\nΒήμα 3: Αναζητήστε το «Commons» ή «fr.free.nrw.commons».\n\nΒήμα 4: Πατήστε το και επιλέξτε «Να μη γίνει βελτιστοποίηση».\n\nΒήμα 5: Πατήστε «Τέλος».</string>
<string name="authentication_failed">Η ταυτοποίηση απέτυχε. Παρακαλούμε, συνδεθείτε ξανά.</string>
<string name="uploading_started">Η μεταφόρτωση ξεκίνησε!</string>
<string name="uploading_queued">Η μεταφόρτωση βρίσκεται σε ουρά (ενεργοποιημένη λειτουργία περιορισμένης σύνδεσης)</string>
<string name="upload_completed_notification_title">%1$s επιφορτώθηκε!</string>
<string name="upload_completed_notification_text">Πατήστε για να προβάλλετε την αποστολή</string>
<string name="upload_completed_notification_title">%1$s μεταφορτώθηκε!</string>
<string name="upload_completed_notification_text">Πατήστε για να δείτε τη μεταφόρτωσή σας</string>
<string name="upload_progress_notification_title_start">Μεταφόρτωση αρχείου: %s</string>
<string name="upload_progress_notification_title_in_progress">%1$s επιφορτώνεται</string>
<string name="upload_progress_notification_title_finishing">Ολοκλήρωση επιφόρτωσης %1$s</string>
<string name="upload_failed_notification_title">Απέτυχε η μεταφόρτωση του %1$s</string>
<string name="upload_progress_notification_title_in_progress">%1$s μεταφορτώθηκε!</string>
<string name="upload_progress_notification_title_finishing">Ολοκληρώνεται η μεταφόρτωση %1$s</string>
<string name="upload_failed_notification_title">Η μεταφόρτωση του %1$s απέτυχε</string>
<string name="upload_paused_notification_title">Η μεταφόρτωση %1$s τέθηκε σε παύση</string>
<string name="upload_failed_notification_subtitle">Πατήστε για να δείτε</string>
<string name="upload_failed_notification_subtitle">Πατήστε για προβολή</string>
<string name="upload_paused_notification_subtitle">Πατήστε για προβολή</string>
<string name="title_activity_contributions">Οι Πρόσφατες Μεταφορτώσεις μου</string>
<string name="contribution_state_queued">Στην ουρά</string>
<string name="contribution_state_failed">Απέτυχε</string>
<string name="contribution_state_in_progress">%1$d%% ολοκληρώθηκε</string>
<string name="contribution_state_starting">Επιφορτώνει…</string>
<string name="contribution_state_starting">Πραγματοποιείται μεταφόρτωση</string>
<string name="menu_from_gallery">Από τη Συλλογή</string>
<string name="menu_from_camera">Τραβήξτε φωτογραφία</string>
<string name="menu_nearby">Κοντά</string>
<string name="provider_contributions">Οι επιφορτώσεις μου</string>
<string name="provider_contributions">Οι μεταφορτώσεις μου</string>
<string name="menu_share">Κοινοποίηση</string>
<string name="menu_view_file_page">Προβολή σελίδας αρχείου</string>
<string name="share_title_hint">Λεζάντα (Απαιτείται)</string>
<string name="add_caption_toast">Παρακαλούμε προσθέστε περιγραφή για αυτό το αρχείο</string>
<string name="add_caption_toast">Παρακαλούμε προσθέστε λεζάντα σε αυτό το αρχείο</string>
<string name="share_description_hint">Περιγραφή</string>
<string name="share_caption_hint">Λεζάντα</string>
<string name="login_failed_network">Δεν είναι δυνατή η σύνδεση - αποτυχία του δικτύου</string>
<string name="login_failed_throttled">Πάρα πολλές ανεπιτυχείς προσπάθειες. Παρακαλώ δοκιμάστε ξανά σε λίγα λεπτά.</string>
<string name="login_failed_blocked">Συγνώμη, αυτός ο χρήστης έχει αποκλειστεί από τα Commons</string>
<string name="login_failed_2fa_needed">Πρέπει να δώσετε τον κωδικό ελέγχου ταυτότητας δύο παραγόντων.</string>
<string name="login_failed_generic">Η είσοδος απέτυχε</string>
<string name="share_upload_button">Ανέβασμα</string>
<string name="login_failed_network">Δεν είναι δυνατή η σύνδεση - αποτυχία δικτύου</string>
<string name="login_failed_throttled">Πάρα πολλές ανεπιτυχείς προσπάθειες. Παρακαλούμε, δοκιμάστε ξανά σε λίγα λεπτά.</string>
<string name="login_failed_blocked">Λυπούμαστε, αυτός ο χρήστης έχει αποκλειστεί στα Commons</string>
<string name="login_failed_2fa_needed">Πρέπει να παράσχετε τον κωδικό ελέγχου ταυτότητας δύο παραγόντων.</string>
<string name="login_failed_generic">Η είσοδος απέτυχε!</string>
<string name="share_upload_button">Μεταφόρτωση</string>
<string name="multiple_share_base_title">Ονομάστε το σύνολο</string>
<string name="provider_modifications">Τροποποιήσεις</string>
<string name="menu_upload_single">Ανέβασμα</string>
<string name="menu_upload_single">Μεταφόρτωση</string>
<string name="categories_search_text_hint">Αναζήτηση κατηγοριών</string>
<string name="depicts_search_text_hint">Αναζητήστε αντικείμενα που απεικονίζουν τα μέσα σας (βουνό, Ταζ Μαχάλ κ.λπ.)</string>
<string name="depicts_search_text_hint">Αναζητήστε αντικείμενα που απεικονίζονται στα πολυμέσα σας (βουνό, Ταζ Μαχάλ κ.λπ.)</string>
<string name="menu_save_categories">Αποθήκευση</string>
<string name="refresh_button">Ανανέωση</string>
<string name="display_list_button">Κατάλογος</string>
<string name="contributions_subtitle_zero">(Καμία μεταφόρτωση ακόμα)</string>
<string name="categories_not_found">Δεν βρέθηκαν κατηγορίες που ταιριάζουν %1$s</string>
<string name="depictions_not_found">Δεν βρέθηκαν στοιχεία Wikidata που να ταιριάζουν στο %1$s</string>
<string name="no_child_classes">Το %1$s δεν έχει κλάσεις παιδιά</string>
<string name="no_parent_classes">%1$s δεν έχει κλάσεις γονείς</string>
<string name="categories_skip_explanation">Προσθέστε κατηγορίες για να κάνετε τις εικόνες σας πιο ανιχνεύσιμες στα Wikimedia Commons.\n\nΑρχίστε να γράφετε για να προσθέσετε κατηγορίες.\nΠατήστε αυτό το μήνυμα (ή πατήστε επιστροφή) για να παραλείψετε αυτό το βήμα.</string>
<string name="categories_not_found">Δε βρέθηκαν κατηγορίες που ταιριάζουν με %1$s</string>
<string name="depictions_not_found">Δε βρέθηκαν αντικείμενα Wikidata που να ταιριάζουν στο %1$s</string>
<string name="no_child_classes">Το %1$s δεν έχει θυγατρικές κλάσεις</string>
<string name="no_parent_classes">Το %1$s δεν έχει γονικές κλάσεις</string>
<string name="categories_skip_explanation">Προσθέστε κατηγορίες για να κάνετε τις εικόνες σας πιο ανιχνεύσιμες στο Wikimedia Commons.\nΞεκινήστε να πληκτρολογείτε για να προσθέσετε κατηγορίες.</string>
<string name="categories_activity_title">Κατηγορίες</string>
<string name="title_activity_settings">Ρυθμίσεις</string>
<string name="title_activity_signup">Εγγραφή</string>
<string name="title_activity_featured_images">Προβεβλημμένες εικόνες</string>
<string name="title_activity_custom_selector">Προσαρμοσμένος Επιλογέας</string>
<string name="title_activity_category_details">Κατηγορία</string>
<string name="title_activity_review">Αναθεώρηση από Ομότιμους</string>
<string name="title_activity_review">Αξιολόγηση από ομοτίμους</string>
<string name="menu_about">Σχετικά</string>
<string name="about_license">Λογισμικό ανοικτού κωδικού που κυκλοφορεί υπό την &lt;a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\"&gt;Άδεια Apache v2&lt;/a&gt;. Το Wikimedia Commons και το λογότυπο είναι εμπορικά σήματα του Ιδρύματος Wikimedia και χρησιμοποιούνται με άδεια από το Ίδρυμα Wikimedia. Δεν συμμετέχουμε στην δημιουργία, ανάπτυξη ή συντήρηση του Ιδρύματος Wikimedia.</string>
<string name="about_improve">Δημιουργήστε ένα νέο &lt;a href=\"%1$s\"&gt;GitHub θέμα&lt;/a&gt; για αναφορές σφαλμάτων και προτάσεις.</string>
<string name="about_privacy_policy">Πολιτική ιδιωτικότητας</string>
<string name="about_license">Η εφαρμογή Wikimedia Commons είναι μια ανοιχτού κώδικα εφαρμογή που δημιουργήθηκε και συντηρείται από χορηγούς και εθελοντές της κοινότητας του Ιδρύματος Wikimedia. Το Ίδρυμα Wikimedia δεν εμπλέκεται στη δημιουργία, ανάπτυξη ή συντήρηση της εφαρμογής.</string>
<string name="about_improve">Δημιουργήστε ένα νέο &lt;a href=\"%1$s\"&gt;θέμα GitHub&lt;/a&gt; για αναφορές σφαλμάτων και προτάσεις.</string>
<string name="about_privacy_policy">Πολιτική απορρήτου</string>
<string name="about_credits">&lt;u&gt;Συντελεστές&lt;/u&gt;</string>
<string name="title_activity_about">Σχετικά</string>
<string name="menu_feedback">Αποστολή σχολίων (μέσω Email)</string>
<string name="menu_feedback">Αποστολή σχολίων (μέσω e-mail)</string>
<string name="no_email_client">Δεν υπάρχει εγκατεστημένη εφαρμογή ηλεκτρονικού ταχυδρομείου</string>
<string name="provider_categories">Κατηγορίες που χρησιμοποιήθηκαν πρόσφατα</string>
<string name="waiting_first_sync">Αναμονή για τον πρώτο συγχρονισμό…</string>
<string name="no_uploads_yet">Ακόμα δεν έχετε ανεβάσει φωτογραφίες.</string>
<string name="menu_retry_upload">Ξαναπροσπαθήστε</string>
<string name="no_uploads_yet">Δεν έχετε ανεβάσει φωτογραφίες ακόμη.</string>
<string name="menu_retry_upload">Προσπαθήστε πάλι</string>
<string name="menu_cancel_upload">Ακύρωση</string>
<string name="media_upload_policy">Αποστέλλοντας αυτήν την εικόνα, δηλώνω πως αυτή η εργασία είναι δική μου, και δεν περιέχει υλικό άλλου συγγραφέα, και εκτός αυτού πρόσκειται στο , thathref=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\"&gt;Κοινές πολιτικές της Wikipedia&lt;/a&gt;.</string>
<string name="media_upload_policy">Υποβάλλοντας αυτή τη φωτογραφία, δηλώνω ότι πρόκειται για δικό μου έργο, ότι δεν περιέχει υλικό που προστατεύεται από πνευματικά δικαιώματα ή selfies, και ότι κατά τα λοιπά συμμορφώνεται με τις &lt;a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\"&gt;πολιτικές των Wikimedia Commons&lt;/a&gt;.</string>
<string name="menu_download">Λήψη</string>
<string name="preference_license">Προεπιλεγμένη άδεια</string>
<string name="use_previous">Χρήση προηγούμενου τίτλου και περιγραφής</string>
<string name="preference_theme">Θέμα</string>
<string name="license_name_cc_by_sa_four"> Attribution-ShareAlike 4.0</string>
<string name="license_name_cc_by_four"> Attribution 4.0</string>
<string name="license_name_cc_by_sa"> Attribution-ShareAlike 3.0</string>
<string name="license_name_cc_by">Attribution 3.0</string>
<string name="license_name_cc_by_sa_four">Αναφορά-Παρόμοια Διανομή 4.0</string>
<string name="license_name_cc_by_four">Αναφορά 4.0</string>
<string name="license_name_cc_by_sa">Αναφορά-Παρόμοια Διανομή 4.0 3.0</string>
<string name="license_name_cc_by">Αναφορά 3.0</string>
<string name="license_name_cc0">CC0</string>
<string name="license_name_cc_by_sa_3_0">CC BY-SA 3.0</string>
<string name="license_name_cc_by_3_0">CC BY 3.0</string>
<string name="license_name_cc_by_sa_4_0">CC BY-SA 4.0</string>
<string name="license_name_cc_by_4_0">CC BY 4.0</string>
<string name="tutorial_1_text">Το Wikimedia Commons φιλοξενεί τις περισσότερες από τις εικόνες που χρησιμοποιούνται στη Wikipedia.</string>
<string name="tutorial_1_subtext">Οι εικόνες σας βοηθούν να μορφωθούν άνθρωποι σε όλο τον κόσμο!</string>
<string name="tutorial_2_text">Παρακαλούμε ανεβάστε εικόνες που έχουν ληφθεί ή δημιουργηθεί εξ ολοκλήρου από τον εαυτό σας:</string>
<string name="tutorial_1_text">Τα Wikimedia Commons φιλοξενούν τις περισσότερες από τις εικόνες που χρησιμοποιούνται στη Βικιπαίδεια.</string>
<string name="tutorial_1_subtext">Οι εικόνες σας βοηθούν στην εκπαίδευση των ανθρώπων σε όλο τον κόσμο!</string>
<string name="tutorial_2_text">Παρακαλούμε μεταφορτώστε φωτογραφίες που έχουν ληφθεί ή δημιουργηθεί εξ ολοκλήρου από εσάς:</string>
<string name="tutorial_2_subtext_1">Φυσικά αντικείμενα (λουλούδια, ζώα, βουνά)</string>
<string name="tutorial_2_subtext_2">Χρήσιμα αντικείμενα (ποδήλατα, σταθμοί τρένων)</string>
<string name="tutorial_2_subtext_3">Διάσημοι άνθρωποι (ο δήμαρχος, αθλητές Ολυμπιακών αγώνων που συναντήσατε)</string>
<string name="tutorial_3_text">Παρακαλούμε ΜΗΝ ανεβάσετε:</string>
<string name="tutorial_2_subtext_3">Διασημότητες (ο δήμαρχος σας, αθλητές Ολυμπιακών Αγώνων που συναντήσατε)</string>
<string name="tutorial_3_text">Παρακαλούμε ΜΗΝ μεταφορτώνετε:</string>
<string name="tutorial_3_subtext_1">Σέλφι ή φωτογραφίες των φίλων σας</string>
<string name="tutorial_3_subtext_2">Φωτογραφίες που κατεβάσατε από το διαδίκτυο</string>
<string name="tutorial_3_subtext_3">Στιγμιότυπα ιδιόκτητων εφαρμογών</string>
<string name="tutorial_4_text">Παράδειγμα ανεβάσματος:</string>
<string name="tutorial_4_subtext_1">Τίτλος: Όπερα του Σίδνεϋ</string>
<string name="tutorial_4_subtext_2">Περιγραφή: Η Όπερα του Σίδνεϋ όπως φαίνεται κατά μήκος του κόλπου</string>
<string name="tutorial_4_subtext_3">Κατηγορία: η Όπερα του Σίδνεϋ από τα δυτικά, απομακρυσμένες προβολές της Όπερας του Σίδνεϋ</string>
<string name="welcome_wikipedia_text">Συνεισφέρετε τις εικόνες σας. Βοηθείστε τα λήμματα της Wikipedia να έρθουν στη ζωή!</string>
<string name="welcome_wikipedia_subtext">Οι εικόνες στη Wikipedia προέρχονται από το Wikimedia Commons.</string>
<string name="welcome_copyright_text">Οι εικόνες σας βοηθούν να εκπαιδευτούν άνθρωποι σε όλο τον κόσμο.</string>
<string name="welcome_copyright_subtext">Αποφύγετε προστατευμένο υλικό που βρήκατε από το Internet, καθώς και εικόνες, αφίσες, εξώφυλλα βιβλίων, κλπ.</string>
<string name="welcome_final_text">Τι λες, μπορείς;</string>
<string name="tutorial_3_subtext_2">Φωτογραφίες που κατεβάσατε από το Διαδίκτυο</string>
<string name="tutorial_3_subtext_3">Στιγμιότυπα οθόνης ιδιόκτητων εφαρμογών</string>
<string name="tutorial_4_text">Παράδειγμα μεταφόρτωσης:</string>
<string name="tutorial_4_subtext_1">Τίτλος: Όπερα του Σίδνεϊ</string>
<string name="tutorial_4_subtext_2">Περιγραφή: Όπερα του Σίδνεϊ όπως φαίνεται κατά μήκος του κόλπου</string>
<string name="tutorial_4_subtext_3">Κατηγορίες: Sydney Opera House from the west, Sydney Opera House remote views</string>
<string name="welcome_wikipedia_text">Συνεισφέρετε τις εικόνες σας. Βοηθήστε τα λήμματα της Βικιπαίδειας να ζωντανέψουν!</string>
<string name="welcome_wikipedia_subtext">Οι εικόνες στη Βικιπαίδεια προέρχονται από τα Wikimedia Commons.</string>
<string name="welcome_copyright_text">Οι εικόνες σας βοηθούν στην εκπαίδευση ανθρώπων σε όλο τον κόσμο!</string>
<string name="welcome_copyright_subtext">Αποφύγετε υλικό που προστατεύεται από πνευματικά δικαιώματα και βρήκατε από το Διαδίκτυο, καθώς και εικόνες αφισών, εξώφυλλων βιβλίων κ.λπ..</string>
<string name="welcome_final_text">Νομίζεις ότι το έχεις;</string>
<string name="welcome_final_button_text">Ναι!</string>
<string name="welcome_help_button_text">Περισσότερες Πληροφορίες</string>
<string name="welcome_help_button_text">Περισσότερες πληροφορίες</string>
<string name="detail_panel_cats_label">Κατηγορίες</string>
<string name="detail_panel_cats_loading">Φόρτωση</string>
<string name="detail_panel_cats_loading">Φόρτωση σε εξέλιξη...</string>
<string name="detail_panel_cats_none">Καμία επιλεγμένη</string>
<string name="detail_caption_empty">Καμία λεζάντα</string>
<string name="detail_description_empty">Καμία περιγραφή</string>
<string name="detail_caption_empty">Χωρίς λεζάντα</string>
<string name="detail_description_empty">Χωρίς περιγραφή</string>
<string name="detail_discussion_empty">Καμία συζήτηση</string>
<string name="detail_license_empty">Άγνωστη άδεια</string>
<string name="menu_refresh">Ανανέωση</string>
<string name="storage_permission_title">Αιτείται Άδεια Αποθήκευσης</string>
<string name="read_storage_permission_rationale">Απαιτούμενη άδεια: Ανάγνωση εξωτερικής αποθήκευσης. Η εφαρμογή δεν μπορεί να έχει πρόσβαση στην συλλογή σας χωρίς αυτή.</string>
<string name="write_storage_permission_rationale">Απαιτούμενη άδεια: Εγγραφή σε εξωτερική αποθήκευση. Το πρόγραμμα δεν θα έχει πρόσβαση στην κάμερα/συλλογή σας χωρίς αυτήν.</string>
<string name="location_permission_title">Αιτείται Άδεια Τοποθεσίας</string>
<string name="storage_permission_title">Αίτηση για άδεια αποθήκευσης</string>
<string name="read_storage_permission_rationale">Απαιτούμενη άδεια: Ανάγνωση εξωτερικής αποθήκευσης. Η εφαρμογή δεν μπορεί να έχει πρόσβαση στη συλλογή σας χωρίς αυτή.</string>
<string name="write_storage_permission_rationale">Απαιτούμενη άδεια: Εγγραφή σε εξωτερική αποθήκευση. Η εφαρμογή δε θα έχει πρόσβαση στην κάμερα/συλλογή σας χωρίς αυτήν.</string>
<string name="location_permission_title">Αίτηση για άδεια τοποθεσίας</string>
<string name="in_app_camera_location_permission_title">Καταγραφή τοποθεσίας για λήψεις εντός εφαρμογής</string>
<string name="in_app_camera_location_switch_pref_summary">Ενεργοποιήστε το για να καταγράψετε την τοποθεσία με λήψεις εντός εφαρμογής σε περίπτωση που η κάμερα της συσκευής δεν την καταγράψει</string>
<string name="ok">Εντάξει</string>
@ -233,24 +234,24 @@
<string name="media_detail_coordinates">Συντεταγμένες</string>
<string name="media_detail_coordinates_empty">Δεν δόθηκε τίποτα</string>
<string name="become_a_tester_title">Γίνετε Δοκιμαστής Beta</string>
<string name="become_a_tester_description">Συμμετέχετε στο κανάλι beta μας στο Google Play και αποκτήστε πρώιμη πρόσβαση σε νέες λειτουργίες και διορθώσεις σφαλμάτων</string>
<string name="become_a_tester_description">Συμμετέχετε στο κανάλι beta στο Google Play και αποκτήστε πρώιμη πρόσβαση σε νέες λειτουργίες και διορθώσεις σφαλμάτων</string>
<string name="_2fa_code">Κωδικός 2FA</string>
<string name="logout_verification">Θέλετε σίγουρα να αποσυνδεθείτε;</string>
<string name="mediaimage_failed">Η Εικόνα των Μέσων Απέτυχε (δεν μπορεί να φορτωθεί)</string>
<string name="no_subcategory_found">Δεν βρέθηκαν υποκατηγορίες</string>
<string name="no_parentcategory_found">Δεν βρέθηκαν γονικές κατηγορίες</string>
<string name="mediaimage_failed">Η εικόνα πολυμέσων απέτυχε</string>
<string name="no_subcategory_found">Δε βρέθηκαν υποκατηγορίες</string>
<string name="no_parentcategory_found">Δε βρέθηκαν γονικές κατηγορίες</string>
<string name="welcome_image_mount_zao">Όρος Ζάο</string>
<string name="welcome_image_llamas">Llamas</string>
<string name="welcome_image_rainbow_bridge">Γέφυρα Ουρανίου Τόξου</string>
<string name="welcome_image_llamas">Λάμα</string>
<string name="welcome_image_rainbow_bridge">Γέφυρα Ρέινμποου</string>
<string name="welcome_image_tulip">Τουλίπα</string>
<string name="welcome_image_welcome_wikipedia">Καλωσήρθατε στη Βικιπαίδεια</string>
<string name="welcome_image_welcome_copyright">Καλωσορίστε το Δικαίωμα Αντιγραφής</string>
<string name="welcome_image_sydney_opera_house">Κτίρια Όπερας Sidney</string>
<string name="cancel">Ακυρώστε</string>
<string name="navigation_drawer_open">Ανοίξτε</string>
<string name="navigation_drawer_close">Κλείστε</string>
<string name="navigation_item_home">Αρχική Σελίδα</string>
<string name="navigation_item_upload">Ανέβασμα αρχείου</string>
<string name="welcome_image_welcome_copyright">Καλώς ορίσατε στα Πνευματικά δικαιώματα</string>
<string name="welcome_image_sydney_opera_house">Όπερα του Σίδνεϊ</string>
<string name="cancel">Ακύρωση</string>
<string name="navigation_drawer_open">Άνοιγμα</string>
<string name="navigation_drawer_close">Κλείσιμο</string>
<string name="navigation_item_home">Αρχική σελίδα</string>
<string name="navigation_item_upload">Μεταφόρτωση αρχείου</string>
<string name="navigation_item_nearby">Κοντά σας</string>
<string name="navigation_item_about">Σχετικά</string>
<string name="navigation_item_settings">Ρυθμίσεις</string>
@ -258,135 +259,135 @@
<string name="navigation_item_feedback_github">Ανατροφοδότηση μέσω Github</string>
<string name="navigation_item_logout">Αποσύνδεση</string>
<string name="navigation_item_info">Σεμινάριο</string>
<string name="navigation_item_notification">Ενημερώσεις</string>
<string name="navigation_item_review">Επιθεώρηση</string>
<string name="no_description_found">δεν βρέθηκε περιγραφή</string>
<string name="nearby_info_menu_commons_article">Σελίδα αρχείου Commons</string>
<string name="navigation_item_notification">Ειδοποιήσεις</string>
<string name="navigation_item_review">Έλεγχος</string>
<string name="no_description_found">δε βρέθηκε περιγραφή</string>
<string name="nearby_info_menu_commons_article">Σελίδα αρχείου στα Commons</string>
<string name="nearby_info_menu_wikidata_article">Αντικείμενο Wikidata</string>
<string name="nearby_info_menu_wikipedia_article">Λήμμα Βικιπαίδειας</string>
<string name="description_info">Παρακαλώ περιγράψετε τα μέσα όσο το δυνατόν περισσότερο : Πού λήφθηκε; Τι δείχνει; Ποιο είναι το περιεχόμενο του; Παρακαλώ περιγράψετε τα αντικείμενα ή τα πρόσωπα. Αποκαλύψετε πληροφορίες που δεν είναι εύκολο να μαντέψει κανείς, για παράδειγμα την ώρα εντός της ημέρας αν πρόκειται για τοπίο. Αν τα μέσα δείξουν κάτι ασύνηθες, παρακαλώ εξηγήστε τι το καθιστούν μη συνηθισμένα.</string>
<string name="caption_info">Γράψτε μια σύντομη περιγραφή της εικόνας. Η πρώτη λεζάντα θα χρησιμοποιηθεί ως τίτλος για την εικόνα. Όριο 255 χαρακτήρες.</string>
<string name="description_info">Παρακαλούμε, περιγράψετε τα πολυμέσα όσο το δυνατόν περισσότερο: Πού λήφθηκε; Τι απεικονίζει; Ποιο είναι το περιεχόμενο του; Παρακαλούμε, περιγράψετε τα αντικείμενα ή τα πρόσωπα. Δώστε πληροφορίες που δεν είναι εύκολο να μαντέψει κανείς, για παράδειγμα την ώρα εντός της ημέρας αν πρόκειται για τοπίο. Αν τα πολυμέσα δείχνουν κάτι ασυνήθιστο, παρακαλούμε εξηγήστε τι το χαρακτηρίζει ως τέτοιο.</string>
<string name="caption_info">Παρακαλούμε να γράψετε μια σύντομη περιγραφή της εικόνας. Η πρώτη λεζάντα θα χρησιμοποιηθεί ως τίτλος για την εικόνα. Περιοριστείτε σε 255 χαρακτήρες.</string>
<string name="upload_problem_exist">Πιθανά προβλήματα με αυτήν την εικόνα:</string>
<string name="upload_problem_image_dark">Η εικόνα είναι πολύ σκοτεινή.</string>
<string name="upload_problem_image_blurry">Η εικόνα είναι θολή.</string>
<string name="upload_problem_image_duplicate">Η εικόνα βρίσκεται ήδη στα Commons.</string>
<string name="upload_problem_image_duplicate">Η εικόνα είναι ήδη στα Commons.</string>
<string name="upload_problem_different_geolocation">Η εικόνα λήφθηκε σε διαφορετική τοποθεσία.</string>
<string name="upload_problem_fbmd">Ανεβάστε μόνο φωτογραφίες που έχετε τραβήξει μόνοι σας. Μην ανεβάζετε φωτογραφίες που έχετε βρει σε λογαριασμούς άλλων ατόμων στο Facebook.</string>
<string name="upload_problem_do_you_continue">Θέλετε ακόμη να ανεβάσετε αυτή την εικόνα;</string>
<string name="upload_connection_error_alert_title">Σφάλμα Σύνδεσης</string>
<string name="upload_problem_fbmd">Παρακαλούμε ανεβάστε μόνο φωτογραφίες που έχετε τραβήξει μόνοι σας. Μην ανεβάζετε φωτογραφίες που έχετε βρει σε λογαριασμούς άλλων ατόμων στο Facebook.</string>
<string name="upload_problem_do_you_continue">Θέλετε ακόμα να ανεβάσετε αυτήν την φωτογραφία;</string>
<string name="upload_connection_error_alert_title">Σφάλμα σύνδεσης</string>
<string name="upload_connection_error_alert_detail">Η διαδικασία μεταφόρτωσης απαιτεί ενεργή πρόσβαση στο Διαδίκτυο. Ελέγξτε τη σύνδεσή σας στο δίκτυο.</string>
<string name="upload_problem_image">Βρέθηκαν προβλήματα στην εικόνα</string>
<string name="internet_downloaded">Ανεβάστε μόνο φωτογραφίες που έχετε τραβήξει μόνοι σας. Μην ανεβάζετε φωτογραφίες που έχετε κατεβάσει από το Διαδίκτυο.</string>
<string name="internet_downloaded">Παρακαλούμε ανεβάστε μόνο φωτογραφίες που έχετε τραβήξει μόνοι σας. Μην ανεβάζετε φωτογραφίες που έχετε κατεβάσει από το Διαδίκτυο.</string>
<string name="use_external_storage">Αποθηκεύστε φωτογραφίες εντός εφαρμογής</string>
<string name="use_external_storage_summary">Αποθηκεύστε φωτογραφίες που τραβήξατε με την κάμερα εντός εφαρμογής στο χώρο αποθήκευσης της συσκευής σας</string>
<string name="login_to_your_account">Συνδεθείτε στο λογαριασμό σας.</string>
<string name="login_to_your_account">Συνδεθείτε στον λογαριασμό σας.</string>
<string name="send_log_file">Αποστολή αρχείου καταγραφής</string>
<string name="send_log_file_description">Στείλτε το αρχείο καταγραφής στους προγραμματιστές μέσω email για να βοηθήσετε τη διόρθωση σφαλμάτων της εφαρμογής. Σημείωση: οι καταγραφές ενδέχεται να περιλαμβάνουν αναγνωριστικές πληροφορίες</string>
<string name="no_web_browser">Δεν βρέθηκε φυλλομετρητής για το άνοιγμα της διευθύνσεως URL</string>
<string name="null_url">Σφάλμα! Η διεύθυνση URL δεν βρέθηκε</string>
<string name="send_log_file_description">Στείλτε το αρχείο καταγραφής στους προγραμματιστές μέσω email για να βοηθήσετε τη διόρθωση σφαλμάτων της εφαρμογής. Σημείωση: οι καταγραφές ενδέχεται να περιλαμβάνουν πληροφορίες ταυτοποίησης</string>
<string name="no_web_browser">Δε βρέθηκε πρόγραμμα περιήγησης ιστού για το άνοιγμα της διεύθυνσης URL</string>
<string name="null_url">Σφάλμα! Η διεύθυνση URL δε βρέθηκε</string>
<string name="nominate_deletion">Προτείνετε για διαγραφή</string>
<string name="nominated_for_deletion">Αυτή εικόνα έχει προταθεί για διαγραφή.</string>
<string name="nominated_for_deletion">Αυτή η εικόνα έχει προταθεί για διαγραφή.</string>
<string name="nominated_see_more">Δείτε την ιστοσελίδα για λεπτομέρειες</string>
<string name="skip_login">Παράβλεψη</string>
<string name="navigation_item_login">Είσοδος</string>
<string name="skip_login_title">Θέλετε πραγματικά να παραβλέψετε τη σύνδεση;</string>
<string name="skip_login_message" fuzzy="true">Θα χρειάζεται να συνδεθείτε για να ανεβάζετε εικόνες στο μέλλον.</string>
<string name="login_alert_message">Παρακαλούμε συνδεθείτε για να χρησιμοποιήσετε αυτό το χαρακτηριστικό</string>
<string name="skip_login_message">Θα χρειαστεί να συνδεθείτε για να μεταφορτώσετε φωτογραφίες στο μέλλον.</string>
<string name="login_alert_message">Παρακαλούμε να συνδεθείτε για να χρησιμοποιήσετε αυτή τη λειτουργία</string>
<string name="copy_wikicode">Αντιγράψτε το wikitext στο πρόχειρο</string>
<string name="wikicode_copied">Το wikitext αντιγράφηκε στο πρόχειρο</string>
<string name="nearby_location_not_available">Ο τόπος δεν είναι διαθέσιμος.</string>
<string name="nearby_location_not_available">Η λειτουργία «Κοντά σας» ενδέχεται να μη δουλεύει σωστά, η Τοποθεσία δεν είναι διαθέσιμη.</string>
<string name="upload_location_access_denied">Δεν επιτρέπεται η πρόσβαση στην τοποθεσία. Ρυθμίστε την τοποθεσία σας με χειροκίνητο τρόπο για να χρησιμοποιήσετε αυτήν τη δυνατότητα.</string>
<string name="location_permission_rationale_nearby">Απαιτείται άδεια για την εμφάνιση λίστας κοντινών σημείων</string>
<string name="location_permission_rationale_explore">Απαιτείται άδεια για την εμφάνιση λίστας κοντινών εικόνων</string>
<string name="nearby_directions">Κατευθύνσεις</string>
<string name="nearby_wikidata">Δεδομένα wiki</string>
<string name="location_permission_rationale_nearby">Απαιτείται άδεια για την εμφάνιση καταλόγου κοντινών σημείων</string>
<string name="location_permission_rationale_explore">Απαιτείται άδεια για την εμφάνιση καταλόγου κοντινών εικόνων</string>
<string name="nearby_directions">Οδηγίες</string>
<string name="nearby_wikidata">Wikidata</string>
<string name="nearby_wikipedia">Βικιπαίδεια</string>
<string name="nearby_commons">Κοινά</string>
<string name="nearby_commons">Commons</string>
<string name="about_rate_us">Βαθμολογήστε μας</string>
<string name="about_faq">Συχνές ερωτήσεις</string>
<string name="user_guide">Οδηγός χρήστη</string>
<string name="welcome_skip_button">Παράβλεψη εισαγωγής</string>
<string name="welcome_skip_button">Παράλειψη εκμάθησης</string>
<string name="no_internet">Το διαδίκτυο δεν είναι διαθέσιμο</string>
<string name="error_notifications">Σφάλμα κατά την συγκέντρωση ειδοποιήσεων</string>
<string name="error_review">Σφάλμα κατά την ανάκτηση της εικόνας για έλεγχο. Πατήστε το refresh για να προσπαθήσετε ξανά.</string>
<string name="no_notifications">Δεν βρέθηκαν ειδοποιήσεις</string>
<string name="error_notifications">Σφάλμα κατά την ανάκτηση ειδοποιήσεων</string>
<string name="error_review">Σφάλμα κατά την ανάκτηση της εικόνας για έλεγχο. Ανανεώστε για να προσπαθήσετε ξανά.</string>
<string name="no_notifications">Δε βρέθηκαν ειδοποιήσεις</string>
<string name="about_translate">Μετάφραση</string>
<string name="about_translate_title">Γλώσσες</string>
<string name="about_translate_message">Επιλέξτε την γλώσσα που θα θέλατε να υποβάλετε μεταφράσεις για αυτή</string>
<string name="about_translate_message">Επιλέξτε τη γλώσσα για την οποία θέλετε να υποβάλετε μεταφράσεις</string>
<string name="about_translate_proceed">Συνέχεια</string>
<string name="about_translate_cancel">Ακύρωση</string>
<string name="retry">Ξαναπροσπαθήστε</string>
<string name="showcase_view_whole_nearby_activity">Αυτά είναι τα μέρη κοντά σας που χρειάζονται φωτογραφίες για να εικονογραφηθούν τα λήμματά τους στη Βικιπαίδεια.\n\nΚάνοντας κλικ στην \"ΑΝΑΖΗΤΗΣΗ ΣΕ ΑΥΤΉ ΤΗΝ ΠΕΡΙΟΧΗ\" κλειδώνει ο χάρτης και ξεκινά μια κοντινή αναζήτηση γύρω από αυτή την τοποθεσία.</string>
<string name="showcase_view_needs_photo">Αυτή η τοποθεσία χρειάζεται φωτογραφία.</string>
<string name="showcase_view_has_photo">Αυτή η τοποθεσία έχει ήδη φωτογραφία.</string>
<string name="showcase_view_no_longer_exists">Η τοποθεσία δεν υπάρχει πλέον.</string>
<string name="no_images_found">Δεν βρέθηκαν εικόνες!</string>
<string name="error_loading_images">Συνέβη σφάλμα κατά το ανέβασμα των εικόνων.</string>
<string name="image_uploaded_by">Ανέβηκε από: %1$s</string>
<string name="retry">Επανάληψη</string>
<string name="showcase_view_whole_nearby_activity">Αυτά είναι τα μέρη κοντά σας που χρειάζονται φωτογραφίες για να εικονογραφηθούν τα λήμματά τους στη Βικιπαίδεια.\n\nΚάνοντας κλικ στην «ΑΝΑΖΗΤΗΣΗ ΣΕ ΑΥΤΗ ΤΗΝ ΠΕΡΙΟΧΗ» κλειδώνει ο χάρτης και ξεκινά μια κοντινή αναζήτηση γύρω από αυτή την τοποθεσία.</string>
<string name="showcase_view_needs_photo">Αυτό το μέρος χρειάζεται μια φωτογραφία.</string>
<string name="showcase_view_has_photo">Αυτό το μέρος έχει ήδη μια φωτογραφία.</string>
<string name="showcase_view_no_longer_exists">Αυτό το μέρος δεν υπάρχει πλέον.</string>
<string name="no_images_found">Δε βρέθηκαν εικόνες!</string>
<string name="error_loading_images">Παρουσιάστηκε σφάλμα κατά τη φόρτωση των εικόνων.</string>
<string name="image_uploaded_by">Μεταφορτώθηκε από: %1$s</string>
<string name="block_notification_title">Αποκλεισμένος</string>
<string name="block_notification">Είστε αποκλεισμένοι από την επεξεργασία των Κοινών</string>
<string name="app_widget_heading">Φωτογραφία της Ημέρας</string>
<string name="block_notification">Έχετε αποκλειστεί από την επεξεργασία στα Commons</string>
<string name="app_widget_heading">Φωτογραφία της ημέρας</string>
<string name="menu_search_button">Αναζήτηση</string>
<string name="search_commons">Αναζήτηση στα κοινά</string>
<string name="search_commons">Αναζήτηση στα Commons</string>
<string name="title_activity_search">Αναζήτηση</string>
<string name="search_recent_header">Πρόσφατες αναζητήσεις:</string>
<string name="provider_searches">Πρόσφατα αναζητημένα ερωτήματα</string>
<string name="provider_searches">Ερωτήματα που αναζητήθηκαν πρόσφατα</string>
<string name="provider_recent_languages">Πρόσφατα ερωτήματα γλώσσας</string>
<string name="error_loading_categories">Συνέβη σφάλμα κατά τη φόρτωση κατηγοριών.</string>
<string name="error_loading_categories">Παρουσιάστηκε σφάλμα κατά τη φόρτωση κατηγοριών.</string>
<string name="error_loading_depictions">Παρουσιάστηκε σφάλμα κατά τη φόρτωση των απεικονίσεων.</string>
<string name="search_tab_title_media">Μέσα</string>
<string name="search_tab_title_media">Πολυμέσα</string>
<string name="search_tab_title_categories">Κατηγορίες</string>
<string name="search_tab_title_depictions">Αντικείμενα</string>
<string name="explore_tab_title_featured">Χαρακτηριστικά</string>
<string name="explore_tab_title_mobile">Μεταφορτώθηκε μέσω κινητού</string>
<string name="explore_tab_title_map">Χάρτης</string>
<string name="successful_wikidata_edit">Η εικόνα προστέθηκε επιτυχώς στο %1$s στο Wikidata!</string>
<string name="wikidata_edit_failure">Αποτυχία ενημέρωσης της αντιστοιχούσας οντότητας του Wikidata!</string>
<string name="menu_set_wallpaper">Ρύθμιση ως ταπετσαρία</string>
<string name="successful_wikidata_edit">Η εικόνα προστέθηκε επιτυχώς στο %1$s στα Wikidata!</string>
<string name="wikidata_edit_failure">Αποτυχία ενημέρωσης της αντιστοιχούσας οντότητας των Wikidata!</string>
<string name="menu_set_wallpaper">Ορισμός ως ταπετσαρία</string>
<string name="wallpaper_set_successfully">Η ταπετσαρία ρυθμίστηκε επιτυχώς!</string>
<string name="quiz">Κουίζ</string>
<string name="quiz_question_string">Αυτή η φωτογραφία είναι εντάξει για ανέβασμα;</string>
<string name="quiz_question_string">Είναι εντάξει αυτή η εικόνα για μεταφόρτωση;</string>
<string name="question">Ερώτηση</string>
<string name="result">Αποτέλεσμα</string>
<string name="quiz_back_button">Εάν συνεχίζετε να ανεβάζετε εικόνες που απαιτούν διαγραφή, ο λογαριασμός σας πιθανώς θα φραγεί. Είστε σίγουρος ότι θέλετε να τελειώστε το κουίζ;</string>
<string name="quiz_alert_message">Πάνω από το %1$s των εικόνων που ανεβάσατε έχουν διαγραφεί. Εάν συνεχίσετε να ανεβάζετε εικόνες που απαιτούν διαγραφή, ο λογαριασμός σας πιθανώς θα φραγεί. \n\nΘα θέλατε να ξαναδείτε τον οδηγό νέων χρηστών ξανά και να κάνετε ένα κουίζ για να σας βοηθήσει να μάθετε ποιοι τύποι εικόνων πρέπει ή δεν πρέπει να ανεβάζετε;</string>
<string name="selfie_answer">Οι σέλφι δεν έχουν πολύ εγκυκλοπαιδική αξία. Παρακαλώ μην ανεβάζετε φωτογραφία του εαυτού σας εκτός εάν έχετε ένα λήμμα στη Βικιπαίδεια για εσάς.</string>
<string name="taj_mahal_answer">Οι φωτογραφίες μνημείων και εξωτερικού σκηνικού είναι εντάξει για ανέβασμα στις περισσότερες χώρες. Παρακαλώ σημειώστε ότι οι προσωρινές εγκαταστάσεις τέχνες καλύπτονται συχνά από πνευματικά δικαιώματα και δεν είναι εντάξει για ανέβασμα.</string>
<string name="screenshot_answer">Τα στιγμιότυπα ιστοσελίδων θεωρούνται παράγωγα έργα και υποκείμενα σε οποιαδήποτε πνευματικά δικαιώματα στην ίδια την ιστοσελίδα. Αυτές μπορούν να χρησιμοποιηθούν μετά από άδεια από τον συγγραφέα. Χωρίς τέτοια άδεια, οποιαδήποτε τέχνη που δημιουργείτε βασισμένη στο έργο τους θεωρείται νομικά ως μη αδειοδοτημένο έργο κατεχόμενο από τον αρχικό συγγραφέα.</string>
<string name="blurry_image_answer">Ένας από τους στόχους των Κοινών είναι να συγκεντρώσει ποιοτικές εικόνες. Γι\'αυτό, οι θολές εικόνες δεν θα πρέπει να ανεβάζονται. Πάντα προσπαθήστε να τραβάτε ωραίες φωτογραφίες με καλό φωτισμό.</string>
<string name="construction_event_answer">Οι φωτογραφίες που εμφανίζουν τεχνολογία ή πολιτισμό είναι πολύ ευσπρόδεκτες στα Κοινά.</string>
<string name="quiz_back_button">Εάν συνεχίσετε να ανεβάζετε εικόνες που απαιτούν διαγραφή, ο λογαριασμός σας πιθανότατα θα αποκλειστεί. Είστε βέβαιοι ότι θέλετε να τερματίσετε το κουίζ;</string>
<string name="quiz_alert_message">Περισσότερες από %1$s από τις εικόνες που ανεβάσατε έχουν διαγραφεί. Εάν συνεχίσετε να ανεβάζετε εικόνες που απαιτούν διαγραφή, ο λογαριασμός σας πιθανότατα θα αποκλειστεί.\n\nΘα θέλατε να δείτε ξανά το σεμινάριο και μετά να κάνετε ένα κουίζ για να σας βοηθήσει να μάθετε τι είδους εικόνες πρέπει ή όχι να ανεβάσετε;</string>
<string name="selfie_answer">Οι σέλφι δεν έχουν μεγάλη εγκυκλοπαιδική αξία. Παρακαλούμε μην ανεβάζετε φωτογραφία του εαυτού σας εκτός εάν έχετε ένα λήμμα στη Βικιπαίδεια για εσάς.</string>
<string name="taj_mahal_answer">Οι φωτογραφίες μνημείων και εξωτερικών τοπίων είναι εντάξει για μεταφόρτωση στις περισσότερες χώρες. Λάβετε υπόψη ότι οι προσωρινές εξωτερικές εγκαταστάσεις τέχνης συχνά προστατεύονται από πνευματικά δικαιώματα και δεν επιτρέπεται η μεταφόρτωση.</string>
<string name="screenshot_answer">Τα στιγμιότυπα οθόνης των ιστότοπων θεωρούνται παράγωγα έργα και υπόκεινται σε τυχόν πνευματικά δικαιώματα στον ίδιο τον ιστότοπο. Αυτά μπορούν να χρησιμοποιηθούν μετά από άδεια του δημιουργού. Χωρίς αυτή την άδεια, κάθε έργο τέχνης που δημιουργείτε με βάση το έργο τους θεωρείται νομικά ως αντίγραφο χωρίς άδεια που ανήκει στον αρχικό δημιουργό.</string>
<string name="blurry_image_answer">Ένας από τους στόχους των Commons είναι να συγκεντρώσει ποιοτικές εικόνες. Γι\' αυτό, οι θολές εικόνες δε θα πρέπει να μεταφορτώνονται. Πάντα προσπαθήστε να τραβάτε περιποιημένες φωτογραφίες με καλό φωτισμό.</string>
<string name="construction_event_answer">Οι φωτογραφίες που εμφανίζουν τεχνολογία ή πολιτισμό είναι πολύ ευσπρόδεκτες στα Commons.</string>
<string name="congratulatory_message_quiz">Είχατε το %1$s των απαντήσεων σωστό. Συγχαρητήρια!</string>
<string name="warning_for_no_answer">Επιλέξτε μια από τις δύο επιλογές για να απαντήσετε στην ερώτηση</string>
<string name="user_not_logged_in">Η περίοδος σύνδεσης έληξε, παρακαλούμε συνδεθείτε ξανά.</string>
<string name="user_not_logged_in">Η περίοδος σύνδεσης έληξε. Παρακαλούμε συνδεθείτε ξανά.</string>
<string name="quiz_result_share_message">Μοιραστείτε το κουίζ με τους φίλους σας!</string>
<string name="continue_message">Συνέχεια</string>
<string name="correct">Σωστή απάντηση</string>
<string name="wrong">Λάθος απάντηση</string>
<string name="quiz_screenshot_question">Αυτό το στιγμιότυπο είναι εντάξει για ανέβασμα;</string>
<string name="wrong">Λανθασμένη απάντηση</string>
<string name="quiz_screenshot_question">Είναι εντάξει αυτό το στιγμιότυπο οθόνης για μεταφόρτωση;</string>
<string name="share_app_title">Κοινοποίηση εφαρμογής</string>
<string name="rotate">Γυρίστε</string>
<string name="rotate">Περιστροφή</string>
<string name="error_fetching_nearby_places">Σφάλμα κατά την εύρεση κοντινών μερών.</string>
<string name="no_pictures_in_this_area">Δεν υπάρχουν φωτογραφίες σε αυτήν την περιοχή</string>
<string name="no_nearby_places_around">Δεν υπάρχουν μέρη κοντά</string>
<string name="no_nearby_places_around">Δεν υπάρχουν μέρη κοντά σας</string>
<string name="error_fetching_nearby_monuments">Σφάλμα κατά την εύρεση κοντινών μνημείων.</string>
<string name="no_recent_searches">Καμία πρόσφατη αναζήτηση</string>
<string name="delete_recent_searches_dialog">Είστε σίγουρος ότι θέλετε να καθαρίσετε το ιστορικό αναζήτησης;</string>
<string name="cancel_upload_dialog">Είστε σίγουροι ότι θέλετε να ακυρώσετε αυτό το ανέβασμα;</string>
<string name="cancel_upload_dialog">Θέλετε σίγουρα να ακυρώσετε τη μεταφόρτωση;</string>
<string name="delete_search_dialog">Θέλετε να διαγράψετε αυτήν την αναζήτηση;</string>
<string name="search_history_deleted">Το ιστορικό αναζήτησης διεγράφη</string>
<string name="nominate_delete">Ορίστε για Αφαίρεση</string>
<string name="nominate_delete">Πρόταση για διαγραφή</string>
<string name="delete">Διαγραφή</string>
<string name="Achievements">Κατορθώματα</string>
<string name="Achievements">Επιτεύγματα</string>
<string name="Profile">Προφίλ</string>
<string name="statistics">Στατιστικά</string>
<string name="statistics_thanks">Ευχαριστίες που έχουν ληφθεί</string>
<string name="statistics_thanks">Ευχαριστίες που έχετε λάβει</string>
<string name="statistics_featured">Προβεβλημμένες εικόνες</string>
<string name="statistics_wikidata_edits">Εικόνες μέσω \"Κοντινά μέρη\"</string>
<string name="statistics_wikidata_edits">Εικόνες μέσω «Κοντινά μέρη»</string>
<string name="level">Επίπεδο</string>
<string name="images_uploaded">Εικόνες που ανέβηκαν</string>
<string name="images_uploaded">Εικόνες που μεταφορτώθηκαν</string>
<string name="image_reverts">Εικόνες που δεν ανεστράφησαν</string>
<string name="images_used_by_wiki">Εικόνες που χρησιμοποιήθηκαν</string>
<string name="achievements_share_message">Μοιραστείτε τα κατορθώματά σας με τους φίλους σας!</string>
<string name="achievements_share_message">Μοιραστείτε τα επιτεύγματά σας με τους φίλους σας!</string>
<string name="achievements_info_message">Το επίπεδό σας αυξάνεται όσο πληρείτε αυτές στις απαιτήσεις. Τα αντικείμενα στο τμήμα \"Στατιστικά\" δεν μετρούν στο επίπεδό σας.</string>
<string name="achievements_revert_limit_message">ελάχιστο που απαιτείται:</string>
<string name="images_uploaded_explanation">Ο αριθμός εικόνων που ανεβάσατε στα Κοινά, μέσω οποιουδήποτε λογισμικού ανεβάσματος</string>
@ -708,7 +709,7 @@
<string name="read_phone_state_permission_message">Οι κοντινοί χάρτες πρέπει να διαβάζουν PHONE STATE για να λειτουργούν σωστά</string>
<string name="contributions_of_user">Συνεισφορές χρήστη: %s</string>
<string name="achievements_of_user">Επιτεύγματα χρήστη: %s</string>
<string name="menu_view_user_page" fuzzy="true">Προβολή σελίδας χρήστη</string>
<string name="menu_view_user_page">Προβολή σελίδας χρήστη</string>
<string name="edit_depictions">Επεξεργασία απεικονίσεων</string>
<string name="edit_categories">Επεξεργασία κατηγοριών</string>
<string name="advanced_options">Σύνθετες Επιλογές</string>
@ -788,4 +789,13 @@
</plurals>
<string name="multiple_files_depiction">Να θυμάστε ότι όλες οι εικόνες σε μια πολλαπλή μεταφόρτωση έχουν τις ίδιες κατηγορίες και απεικονίσεις. Εάν οι εικόνες δεν μοιράζονται απεικονίσεις και κατηγορίες, πραγματοποιήστε πολλές ξεχωριστές μεταφορτώσεις.</string>
<string name="multiple_files_depiction_header">Σημείωση για τις πολλαπλές μεταφορτώσεις</string>
<string name="nearby_wikitalk">Αναφορά προβλήματος σχετικά με αυτό το αντικείμενο των Wikidata</string>
<string name="please_enter_some_comments">Παρακαλώ εισάγετε κάποια σχόλια</string>
<string name="talk">Συζήτηση</string>
<string name="write_something_about_the_item">Γράψτε κάτι για το αντικείμενο \'%1$s\'. Θα είναι δημόσια ορατό.</string>
<string name="does_not_exist_anymore_no_picture_can_ever_be_taken_of_it">Το \'%1$s\' δεν υφίσταται πλέον, καμία φωτογραφία δεν μπορεί να εξαχθεί.</string>
<string name="is_at_a_different_place_please_specify_the_correct_place_below_if_possible_tell_us_the_correct_latitude_longitude">Το \'%1$s\' βρίσκεται σε διαφορετική θέση. Παρακαλούμε προσδιορίστε τη σωστή θέση παρακαλώ, και αν είναι εφικτό, γράψτε το σωστό γεωγραφικό πλάτος και μήκος.</string>
<string name="other_problem_or_information_please_explain_below">Άλλο πρόβλημα ή πληροφορίες (παρακαλούμε εξηγήστε παρακάτω).</string>
<string name="feedback_destination_note">Τα σχόλιά σας δημοσιεύονται στην ακόλουθη σελίδα wiki: &lt;a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\"&gt;Commons:Εφαρμογή για κινητά/Σχόλια&lt;/a&gt;</string>
<string name="could_not_load_place_data">Δεν ήταν δυνατή η φόρτωση δεδομένων της θέσης</string>
</resources>

View file

@ -116,6 +116,7 @@
<string name="upload_failed">Nie znaleziono pliku. Spróbuj znaleźć inny.</string>
<string name="retry_limit_reached">Osiągnięto maksymalny limit ponownych prób! Anuluj przesyłanie i spróbuj ponownie</string>
<string name="unrestricted_battery_mode">Wyłączyć optymalizację baterii?</string>
<string name="suggest_unrestricted_mode">Przesyłanie więcej niż 3 obrazów działa bardziej niezawodnie, gdy optymalizacja baterii jest wyłączona. Wyłącz optymalizację baterii dla aplikacji Commons w ustawieniach, aby zapewnić płynne przesyłanie. \n\nMożliwe kroki, aby wyłączyć optymalizację baterii:\n\nKrok 1: Stuknij przycisk „Ustawienia” poniżej.\n\nKrok 2: Przełącz z „Niezoptymalizowane” na „Wszystkie aplikacje”.\n\nKrok 3: Wyszukaj „Commons” lub „fr.free.nrw.commons”.\n\nKrok 4: Stuknij i wybierz „Nie optymalizuj”.\n\nKrok 5: Naciśnij „Gotowe”.</string>
<string name="authentication_failed">Uwierzytelnianie nie powiodło się, zaloguj się ponownie, proszę.</string>
<string name="uploading_started">Wysyłanie rozpoczęte!</string>
<string name="uploading_queued">Prześlij w kolejce (włączony tryb ograniczonego połączenia)</string>
@ -306,7 +307,7 @@
<string name="skip_login">Pomiń</string>
<string name="navigation_item_login">Zaloguj się</string>
<string name="skip_login_title">Czy na pewno chcesz pominąć logowanie?</string>
<string name="skip_login_message" fuzzy="true">Musisz się zalogować, aby przesłać zdjęcia w przyszłości</string>
<string name="skip_login_message">Aby w przyszłości przesyłać zdjęcia, będziesz musiał się zalogować.</string>
<string name="login_alert_message">Zaloguj się, aby skorzystać z tej funkcji</string>
<string name="copy_wikicode">Skopiuj wikitext do schowka</string>
<string name="wikicode_copied">Wikitext został skopiowany do schowka</string>
@ -462,6 +463,7 @@
<string name="ends_on">Kończy się na:</string>
<string name="display_campaigns">Wyświetl kampanie</string>
<string name="display_campaigns_explanation">Zobacz trwające kampanie</string>
<string name="in_app_camera_location_access_explanation">Zezwól aplikacji na pobieranie lokalizacji, jeśli kamera jej nie rejestruje. Niektóre kamery urządzeń nie rejestrują lokalizacji. W takich przypadkach pozwolenie aplikacji na pobieranie i dołączanie do niej lokalizacji sprawia, że Twój wkład jest bardziej użyteczny. Możesz to zmienić w dowolnym momencie w Ustawieniach</string>
<string name="option_allow">Zezwól</string>
<string name="option_dismiss">Odrzuć</string>
<string name="location_loss_warning" fuzzy="true">Upewnij się, że ten nowy selektor Androida nie usuwa lokalizacji ze zdjęć.</string>
@ -770,6 +772,7 @@
<string name="unable_to_share_upload_item">Nie można udostępnić tego elementu</string>
<string name="edit_image">Edytuj obraz</string>
<string name="edit_location">Edytuj lokalizację</string>
<string name="location_updated">Lokalizacja zaktualizowana!</string>
<string name="send_thanks_to_author">Dziękuję autorowi</string>
<string name="error_sending_thanks">Błąd wysyłania podziękowań do autora.</string>
<string name="file_saved_successfully">Pomyślnie zapisano</string>

View file

@ -77,7 +77,7 @@ class WikiBaseClientUnitTest {
"M123", "test", "en", "caption"
)).thenReturn(Observable.just(mwPostResponse))
val result = wikiBaseClient.addLabelstoWikidata(123L, "en", "caption").blockingFirst()
val result = wikiBaseClient.addLabelsToWikidata(123L, "en", "caption").blockingFirst()
assertSame(mwPostResponse, result)
}

View file

@ -8,6 +8,7 @@ import com.nhaarman.mockitokotlin2.whenever
import fr.free.nrw.commons.kvstore.JsonKvStore
import fr.free.nrw.commons.upload.UploadResult
import fr.free.nrw.commons.upload.WikidataPlace
import fr.free.nrw.commons.wikidata.model.RemoveClaim
import io.reactivex.Observable
import org.junit.Before
import org.junit.Test
@ -18,7 +19,6 @@ import org.mockito.Mock
import org.mockito.Mockito
import org.mockito.Mockito.verifyNoInteractions
import org.mockito.MockitoAnnotations
import fr.free.nrw.commons.wikidata.model.EditClaim
class WikidataEditServiceTest {
@Mock
@ -53,9 +53,16 @@ class WikidataEditServiceTest {
@Test
fun testUpdateDepictsProperty() {
whenever(wikibaseClient.postEditEntityByFilename("Test.jpg",
gson.toJson(Mockito.mock(EditClaim::class.java)))).thenReturn(Observable.just(true))
wikidataEditService.updateDepictsProperty("Test.jpg", listOf())
val fileEntityId = "12345"
whenever(wikibaseClient.getClaimIdsByProperty("M" + fileEntityId,
WikidataProperties.DEPICTS.propertyName))
.thenReturn(Observable.just(emptyList()))
whenever(wikibaseClient.postDeleteClaims("M" + fileEntityId,
gson.toJson(Mockito.mock(RemoveClaim::class.java)))
).thenReturn(Observable.just(true))
wikidataEditService.updateDepictsProperty(fileEntityId, listOf())
}
@Test