mirror of
				https://github.com/commons-app/apps-android-commons.git
				synced 2025-10-31 14:53:59 +01:00 
			
		
		
		
	Merge branch 'main' into upgrade
This commit is contained in:
		
						commit
						d9494abf24
					
				
					 18 changed files with 395 additions and 317 deletions
				
			
		|  | @ -47,7 +47,7 @@ dependencies { | ||||||
| 
 | 
 | ||||||
|     implementation 'com.jakewharton.timber:timber:4.7.1' |     implementation 'com.jakewharton.timber:timber:4.7.1' | ||||||
|     implementation 'com.github.deano2390:MaterialShowcaseView:1.2.0' |     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 'com.karumi:dexter:5.0.0' | ||||||
|     implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' |     implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -73,18 +73,20 @@ import fr.free.nrw.commons.description.DescriptionEditHelper; | ||||||
| import fr.free.nrw.commons.di.CommonsDaggerSupportFragment; | import fr.free.nrw.commons.di.CommonsDaggerSupportFragment; | ||||||
| import fr.free.nrw.commons.explore.depictions.WikidataItemDetailsActivity; | import fr.free.nrw.commons.explore.depictions.WikidataItemDetailsActivity; | ||||||
| import fr.free.nrw.commons.kvstore.JsonKvStore; | 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.location.LocationServiceManager; | ||||||
| import fr.free.nrw.commons.profile.ProfileActivity; | import fr.free.nrw.commons.profile.ProfileActivity; | ||||||
| import fr.free.nrw.commons.review.ReviewHelper; | import fr.free.nrw.commons.review.ReviewHelper; | ||||||
| import fr.free.nrw.commons.settings.Prefs; | 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.categories.UploadCategoriesFragment; | ||||||
| import fr.free.nrw.commons.upload.depicts.DepictsFragment; | 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.DialogUtil; | ||||||
| import fr.free.nrw.commons.utils.PermissionUtils; | import fr.free.nrw.commons.utils.PermissionUtils; | ||||||
| import fr.free.nrw.commons.utils.ViewUtil; | import fr.free.nrw.commons.utils.ViewUtil; | ||||||
| import fr.free.nrw.commons.utils.ViewUtilWrapper; | import fr.free.nrw.commons.utils.ViewUtilWrapper; | ||||||
|  | import fr.free.nrw.commons.wikidata.mwapi.MwQueryPage; | ||||||
| import io.reactivex.Observable; | import io.reactivex.Observable; | ||||||
| import io.reactivex.ObservableSource; | import io.reactivex.ObservableSource; | ||||||
| import io.reactivex.Single; | import io.reactivex.Single; | ||||||
|  | @ -105,9 +107,6 @@ import java.util.regex.Pattern; | ||||||
| import javax.inject.Inject; | import javax.inject.Inject; | ||||||
| import javax.inject.Named; | import javax.inject.Named; | ||||||
| import org.apache.commons.lang3.StringUtils; | 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; | import timber.log.Timber; | ||||||
| 
 | 
 | ||||||
| public class MediaDetailFragment extends CommonsDaggerSupportFragment implements | public class MediaDetailFragment extends CommonsDaggerSupportFragment implements | ||||||
|  | @ -487,12 +486,18 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment implements | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private void onDeletionPageExists(Boolean deletionPageExists) { |     private void onDeletionPageExists(Boolean deletionPageExists) { | ||||||
|         if (deletionPageExists){ |         if (AccountUtil.getUserName(getContext()) == null && !AccountUtil.getUserName(getContext()).equals(media.getAuthor())) { | ||||||
|             if(applicationKvStore.getBoolean(String.format(NOMINATING_FOR_DELETION_MEDIA, media.getImageUrl()), false)) { |             binding.nominateDeletion.setVisibility(GONE); | ||||||
|                 applicationKvStore.remove(String.format(NOMINATING_FOR_DELETION_MEDIA, media.getImageUrl())); |             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.progressBarDeletion.setVisibility(GONE); | ||||||
|             } |             } | ||||||
|             binding.nominateDeletion.setVisibility(GONE); |             binding.nominateDeletion.setVisibility(GONE); | ||||||
|  | 
 | ||||||
|             binding.nominatedDeletionBanner.setVisibility(VISIBLE); |             binding.nominatedDeletionBanner.setVisibility(VISIBLE); | ||||||
|         } else if (!isCategoryImage) { |         } else if (!isCategoryImage) { | ||||||
|             binding.nominateDeletion.setVisibility(VISIBLE); |             binding.nominateDeletion.setVisibility(VISIBLE); | ||||||
|  | @ -1174,7 +1179,7 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment implements | ||||||
|             //Reviewer correct me if i have misunderstood something over here |             //Reviewer correct me if i have misunderstood something over here | ||||||
|             //But how does this  if (delete.getVisibility() == View.VISIBLE) { |             //But how does this  if (delete.getVisibility() == View.VISIBLE) { | ||||||
|             //            enableDeleteButton(true);   makes sense ? |             //            enableDeleteButton(true);   makes sense ? | ||||||
|             else { |             else if (AccountUtil.getUserName(getContext()) != null) { | ||||||
|                 final EditText input = new EditText(getActivity()); |                 final EditText input = new EditText(getActivity()); | ||||||
|                 input.requestFocus(); |                 input.requestFocus(); | ||||||
|                 AlertDialog d = DialogUtil.showAlertDialog(getActivity(), |                 AlertDialog d = DialogUtil.showAlertDialog(getActivity(), | ||||||
|  |  | ||||||
|  | @ -15,7 +15,7 @@ import fr.free.nrw.commons.theme.BaseActivity; | ||||||
| public class SettingsActivity extends BaseActivity { | public class SettingsActivity extends BaseActivity { | ||||||
| 
 | 
 | ||||||
|     private ActivitySettingsBinding binding; |     private ActivitySettingsBinding binding; | ||||||
|     private AppCompatDelegate settingsDelegate; | //    private AppCompatDelegate settingsDelegate; | ||||||
|     /** |     /** | ||||||
|      * to be called when the activity starts |      * to be called when the activity starts | ||||||
|      * @param savedInstanceState the previously saved state |      * @param savedInstanceState the previously saved state | ||||||
|  | @ -39,10 +39,10 @@ public class SettingsActivity extends BaseActivity { | ||||||
|     @Override |     @Override | ||||||
|     protected void onPostCreate(Bundle savedInstanceState) { |     protected void onPostCreate(Bundle savedInstanceState) { | ||||||
|         super.onPostCreate(savedInstanceState); |         super.onPostCreate(savedInstanceState); | ||||||
|         if (settingsDelegate == null) { | //        if (settingsDelegate == null) { | ||||||
|             settingsDelegate = AppCompatDelegate.create(this, null); | //            settingsDelegate = AppCompatDelegate.create(this, null); | ||||||
|         } | //        } | ||||||
|         settingsDelegate.onPostCreate(savedInstanceState); | //        settingsDelegate.onPostCreate(savedInstanceState); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|  |  | ||||||
|  | @ -1,5 +1,6 @@ | ||||||
| package fr.free.nrw.commons.upload | 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.WikidataConstants | ||||||
| import fr.free.nrw.commons.wikidata.mwapi.MwPostResponse | import fr.free.nrw.commons.wikidata.mwapi.MwPostResponse | ||||||
| import fr.free.nrw.commons.wikidata.mwapi.MwQueryResponse | import fr.free.nrw.commons.wikidata.mwapi.MwQueryResponse | ||||||
|  | @ -34,7 +35,7 @@ interface WikiBaseInterface { | ||||||
|     </MwPostResponse> */ |     </MwPostResponse> */ | ||||||
|     @Headers("Cache-Control: no-cache") |     @Headers("Cache-Control: no-cache") | ||||||
|     @FormUrlEncoded |     @FormUrlEncoded | ||||||
|     @POST(WikidataConstants.MW_API_PREFIX + "action=wbeditentity&site=commonswiki&clear=1") |     @POST(WikidataConstants.MW_API_PREFIX + "action=wbeditentity&site=commonswiki") | ||||||
|     fun postEditEntityByFilename( |     fun postEditEntityByFilename( | ||||||
|         @Field("title") filename: String, |         @Field("title") filename: String, | ||||||
|         @Field("token") editToken: String, |         @Field("token") editToken: String, | ||||||
|  | @ -59,4 +60,19 @@ interface WikiBaseInterface { | ||||||
|         @Field("language") language: String?, |         @Field("language") language: String?, | ||||||
|         @Field("value") captionValue: String? |         @Field("value") captionValue: String? | ||||||
|     ): Observable<MwPostResponse> |     ): 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> | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -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() | ||||||
|  | ) | ||||||
|  | @ -69,7 +69,7 @@ class DepictEditHelper @Inject constructor (notificationHelper: NotificationHelp | ||||||
|      */ |      */ | ||||||
|      private fun addDepiction(media: Media, depictions: List<String>): Observable<Boolean> { |      private fun addDepiction(media: Media, depictions: List<String>): Observable<Boolean> { | ||||||
|         Timber.d("thread is adding depiction %s", Thread.currentThread().name) |         Timber.d("thread is adding depiction %s", Thread.currentThread().name) | ||||||
|         return wikidataEditService.updateDepictsProperty(media.filename, depictions) |         return wikidataEditService.updateDepictsProperty(media.pageId, depictions) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|  |  | ||||||
|  | @ -1,112 +1,99 @@ | ||||||
| package fr.free.nrw.commons.upload.depicts | 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 fr.free.nrw.commons.upload.structure.depictions.DepictedItem | ||||||
|  | import kotlinx.coroutines.CoroutineScope | ||||||
|  | import kotlinx.coroutines.Deferred | ||||||
| import kotlinx.coroutines.Dispatchers | import kotlinx.coroutines.Dispatchers | ||||||
|  | import kotlinx.coroutines.async | ||||||
| import kotlinx.coroutines.launch | import kotlinx.coroutines.launch | ||||||
| import kotlinx.coroutines.runBlocking | import java.util.Date | ||||||
| import java.util.* |  | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  *  Dao class for DepictsRoomDataBase |  *  Dao class for DepictsRoomDataBase | ||||||
|  */ |  */ | ||||||
| @Dao | @Dao | ||||||
| abstract class DepictsDao { | abstract class DepictsDao { | ||||||
| 
 |     /** The maximum number of depicts allowed in the database. */ | ||||||
|     /** |     private val maxItemsAllowed = 10 | ||||||
|      *  insert Depicts in DepictsRoomDataBase |      | ||||||
|      */ |  | ||||||
|     @Insert(onConflict = OnConflictStrategy.REPLACE) |     @Insert(onConflict = OnConflictStrategy.REPLACE) | ||||||
|     abstract suspend fun insert(depictedItem: Depicts) |     abstract suspend fun insert(depictedItem: Depicts) | ||||||
| 
 |      | ||||||
|     /** |  | ||||||
|      * get all Depicts from roomdatabase |  | ||||||
|      */ |  | ||||||
|     @Query("Select * From depicts_table order by lastUsed DESC") |     @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") |     @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 |     @Delete | ||||||
|     abstract suspend fun delete(depicts: Depicts) |     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> { |     fun depictsList(): Deferred<List<Depicts>> = CoroutineScope(Dispatchers.IO).async { | ||||||
|         runBlocking { |         getAllDepicts() | ||||||
|             launch(Dispatchers.IO) { |  | ||||||
|                 allDepict = getAllDepict() |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         return allDepict |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      *  insert Depicts  in DepictsRoomDataBase |      * Inserts a Depicts object into the database. | ||||||
|  |      * | ||||||
|  |      * @param depictedItem The Depicts object to insert. | ||||||
|      */ |      */ | ||||||
|     fun insertDepict(depictes: Depicts) { |     private fun insertDepict(depictedItem: Depicts) = CoroutineScope(Dispatchers.IO).launch {  | ||||||
|         runBlocking { |         insert(depictedItem) | ||||||
|             launch(Dispatchers.IO) { |  | ||||||
|                 insert(depictes) |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      *  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> { |     private suspend fun depictsForDeletion(n: Int): Deferred<List<Depicts>> = CoroutineScope(Dispatchers.IO).async { | ||||||
|         runBlocking { |         getDepictsForDeletion(n) | ||||||
|             launch(Dispatchers.IO) { |  | ||||||
|                 listOfDelete = getItemToDelete(number) |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         return listOfDelete |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      *  delete Depicts  in DepictsRoomDataBase |      * Deletes a Depicts object from the database. | ||||||
|  |      * | ||||||
|  |      * @param depicts The Depicts object to delete. | ||||||
|      */ |      */ | ||||||
|     fun deleteDepicts(depictes: Depicts) { |     private suspend fun deleteDepicts(depicts: Depicts) = CoroutineScope(Dispatchers.IO).launch { | ||||||
|         runBlocking { |         delete(depicts) | ||||||
|             launch(Dispatchers.IO) { |  | ||||||
|                 delete(depictes) |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      *  save Depicts in DepictsRoomDataBase |      * Saves a list of DepictedItems in the DepictsRoomDataBase. | ||||||
|      */ |      */ | ||||||
|     fun savingDepictsInRoomDataBase(listDepictedItem: List<DepictedItem>) { |     fun savingDepictsInRoomDataBase(listDepictedItem: List<DepictedItem>) { | ||||||
|         var numberofItemInRoomDataBase: Int |         CoroutineScope(Dispatchers.IO).launch { | ||||||
|         val maxNumberOfItemSaveInRoom = 10 |             for (depictsItem in listDepictedItem) { | ||||||
|  |                 depictsItem.isSelected = false | ||||||
|  |                 insertDepict(Depicts(depictsItem, Date())) | ||||||
|  |             } | ||||||
| 
 | 
 | ||||||
|         for (depictsItem in listDepictedItem) { |             // Deletes old Depicts objects from the database if | ||||||
|             depictsItem.isSelected = false |             // the number of depicts exceeds the maximum allowed. | ||||||
|             insertDepict(Depicts(depictsItem, Date())) |             deleteOldDepictions(depictsList().await().size) | ||||||
|         } |         } | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|         numberofItemInRoomDataBase = depictsList().size |     private suspend fun deleteOldDepictions(depictsListSize: Int) { | ||||||
|         // delete the depictItem from depictsroomdataBase when number of element in depictsroomdataBase is greater than 10 |         if(depictsListSize > maxItemsAllowed) { | ||||||
|         if (numberofItemInRoomDataBase > maxNumberOfItemSaveInRoom) { |             val depictsForDeletion = depictsForDeletion(depictsListSize).await() | ||||||
| 
 | 
 | ||||||
|             val listOfDepictsToDelete: List<Depicts> = |             for(depicts in depictsForDeletion) { | ||||||
|                 getItemTodelete(numberofItemInRoomDataBase) |                 deleteDepicts(depicts) | ||||||
|             for (i in listOfDepictsToDelete) { |  | ||||||
|                 deleteDepicts(i) |  | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -16,9 +16,9 @@ import io.reactivex.android.schedulers.AndroidSchedulers | ||||||
| import io.reactivex.disposables.CompositeDisposable | import io.reactivex.disposables.CompositeDisposable | ||||||
| import io.reactivex.processors.PublishProcessor | import io.reactivex.processors.PublishProcessor | ||||||
| import io.reactivex.schedulers.Schedulers | import io.reactivex.schedulers.Schedulers | ||||||
|  | import kotlinx.coroutines.runBlocking | ||||||
| import timber.log.Timber | import timber.log.Timber | ||||||
| import java.lang.reflect.Proxy | import java.lang.reflect.Proxy | ||||||
| import java.util.* |  | ||||||
| import javax.inject.Inject | import javax.inject.Inject | ||||||
| import javax.inject.Named | import javax.inject.Named | ||||||
| import javax.inject.Singleton | import javax.inject.Singleton | ||||||
|  | @ -85,7 +85,7 @@ class DepictsPresenter @Inject constructor( | ||||||
|         var recentDepictedItemList: MutableList<DepictedItem> = ArrayList(); |         var recentDepictedItemList: MutableList<DepictedItem> = ArrayList(); | ||||||
|         //show recentDepictedItemList when queryString is empty |         //show recentDepictedItemList when queryString is empty | ||||||
|         if (querystring.isEmpty()) { |         if (querystring.isEmpty()) { | ||||||
|             recentDepictedItemList = getRecentDepictedItems(); |             recentDepictedItemList = getRecentDepictedItems().toMutableList() | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if (media == null) { |         if (media == null) { | ||||||
|  | @ -223,9 +223,8 @@ class DepictsPresenter @Inject constructor( | ||||||
|                             if (error is InvalidLoginTokenException) { |                             if (error is InvalidLoginTokenException) { | ||||||
|                                 view.navigateToLoginScreen(); |                                 view.navigateToLoginScreen(); | ||||||
|                             } else { |                             } else { | ||||||
|                                 Timber.e( |                                 view.dismissProgressDialog() | ||||||
|                                     "Failed to update depictions" |                                 Timber.e("Failed to update depictions") | ||||||
|                                 ) |  | ||||||
|                             } |                             } | ||||||
|                         }) |                         }) | ||||||
|                 ) |                 ) | ||||||
|  | @ -266,14 +265,9 @@ class DepictsPresenter @Inject constructor( | ||||||
|     /** |     /** | ||||||
|      * Get the depicts from DepictsRoomdataBase |      * Get the depicts from DepictsRoomdataBase | ||||||
|      */ |      */ | ||||||
|     fun getRecentDepictedItems(): MutableList<DepictedItem> { |     private fun getRecentDepictedItems(): List<DepictedItem> = runBlocking { | ||||||
|         val depictedItemList: MutableList<DepictedItem> = ArrayList() |         val depictsList = depictsDao.depictsList().await() | ||||||
|         val depictsList = depictsDao.depictsList() |         return@runBlocking depictsList.map { it.item } | ||||||
|         for (i in depictsList.indices) { |  | ||||||
|             val depictedItem = depictsList[i].item |  | ||||||
|             depictedItemList.add(depictedItem) |  | ||||||
|         } |  | ||||||
|         return depictedItemList |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -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.MwPostResponse | ||||||
| import fr.free.nrw.commons.wikidata.mwapi.MwQueryResponse | import fr.free.nrw.commons.wikidata.mwapi.MwQueryResponse | ||||||
| import io.reactivex.Observable | import io.reactivex.Observable | ||||||
| import timber.log.Timber |  | ||||||
| import javax.inject.Inject | import javax.inject.Inject | ||||||
| import javax.inject.Named | import javax.inject.Named | ||||||
| import javax.inject.Singleton | 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> { |     fun getFileEntityId(uploadResult: UploadResult): Observable<Long> { | ||||||
|         return wikiBaseInterface.getFileEntityId(uploadResult.createCanonicalFileName()) |         return wikiBaseInterface.getFileEntityId(uploadResult.createCanonicalFileName()) | ||||||
|             .map { response: MwQueryResponse -> response.query()!!.pages()!![0].pageId().toLong() } |             .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 -> |         return csrfToken().switchMap { editToken -> | ||||||
|             wikiBaseInterface.addLabelstoWikidata( |             wikiBaseInterface.addLabelstoWikidata( | ||||||
|                 PAGE_ID_PREFIX + fileEntityId, |                 PAGE_ID_PREFIX + fileEntityId, | ||||||
|  |  | ||||||
|  | @ -8,7 +8,6 @@ import android.content.Context; | ||||||
| import androidx.annotation.Nullable; | import androidx.annotation.Nullable; | ||||||
| import com.google.gson.Gson; | import com.google.gson.Gson; | ||||||
| import fr.free.nrw.commons.R; | 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.contributions.Contribution; | ||||||
| import fr.free.nrw.commons.kvstore.JsonKvStore; | import fr.free.nrw.commons.kvstore.JsonKvStore; | ||||||
| import fr.free.nrw.commons.upload.UploadResult; | 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; | ||||||
| import fr.free.nrw.commons.wikidata.model.DataValue.ValueString; | import fr.free.nrw.commons.wikidata.model.DataValue.ValueString; | ||||||
| import fr.free.nrw.commons.wikidata.model.EditClaim; | 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.Snak_partial; | ||||||
| import fr.free.nrw.commons.wikidata.model.Statement_partial; | import fr.free.nrw.commons.wikidata.model.Statement_partial; | ||||||
| import fr.free.nrw.commons.wikidata.model.WikiBaseMonolingualTextValue; | import fr.free.nrw.commons.wikidata.model.WikiBaseMonolingualTextValue; | ||||||
|  | import fr.free.nrw.commons.wikidata.mwapi.MwPostResponse; | ||||||
| import io.reactivex.Observable; | import io.reactivex.Observable; | ||||||
| import io.reactivex.schedulers.Schedulers; | import io.reactivex.schedulers.Schedulers; | ||||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||||
|  | @ -34,7 +35,6 @@ import java.util.UUID; | ||||||
| import javax.inject.Inject; | import javax.inject.Inject; | ||||||
| import javax.inject.Named; | import javax.inject.Named; | ||||||
| import javax.inject.Singleton; | import javax.inject.Singleton; | ||||||
| import fr.free.nrw.commons.wikidata.mwapi.MwPostResponse; |  | ||||||
| import timber.log.Timber; | import timber.log.Timber; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  | @ -72,9 +72,10 @@ public class WikidataEditService { | ||||||
|      * to the wikibase API to set tag against the entity. |      * to the wikibase API to set tag against the entity. | ||||||
|      */ |      */ | ||||||
|     @SuppressLint("CheckResult") |     @SuppressLint("CheckResult") | ||||||
|     private Observable<Boolean> addDepictsProperty(final String fileEntityId, |     private Observable<Boolean> addDepictsProperty( | ||||||
|         final List<String> depictedItems) { |         final String fileEntityId, | ||||||
| 
 |         final List<String> depictedItems | ||||||
|  |     ) { | ||||||
|         final EditClaim data = editClaim( |         final EditClaim data = editClaim( | ||||||
|             ConfigUtils.isBetaFlavour() ? Collections.singletonList("Q10") |             ConfigUtils.isBetaFlavour() ? Collections.singletonList("Q10") | ||||||
|                 // Wikipedia:Sandbox (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 |      * Takes depicts ID as a parameter and create a uploadable data with the Id | ||||||
|      * and send the data for POST operation |      * and send the data for POST operation | ||||||
|      * |      * | ||||||
|      * @param filename name of the file |      * @param fileEntityId ID of the file | ||||||
|      * @param depictedItems ID of the selected depict item |      * @param depictedItems IDs of the selected depict item | ||||||
|      * @return Observable<Boolean> |      * @return Observable<Boolean> | ||||||
|      */ |      */ | ||||||
|     @SuppressLint("CheckResult") |     @SuppressLint("CheckResult") | ||||||
|     public Observable<Boolean> updateDepictsProperty(final String filename, |     public Observable<Boolean> updateDepictsProperty( | ||||||
|         final List<String> depictedItems) { |         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") |             ConfigUtils.isBetaFlavour() ? Collections.singletonList("Q10") | ||||||
|                 // Wikipedia:Sandbox (Q10) |                 // Wikipedia:Sandbox (Q10) | ||||||
|                 : depictedItems |                 : claimIds | ||||||
|         ); |         ); | ||||||
| 
 | 
 | ||||||
|         return wikiBaseClient.postEditEntityByFilename(filename, |         return wikiBaseClient.postDeleteClaims(entityId, gson.toJson(data)) | ||||||
|             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); |  | ||||||
|                 } |  | ||||||
|             }) |  | ||||||
|             .doOnError(throwable -> { |             .doOnError(throwable -> { | ||||||
|                 if (throwable instanceof InvalidLoginTokenException) { |                 Timber.e(throwable, "Error occurred while removing existing claims for DEPICTS property"); | ||||||
|                      Observable.error(throwable); |                 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 { |                 } else { | ||||||
|                     Timber.e(throwable, "Error occurred while setting DEPICTS property"); |                     Timber.d("Unable to delete DEPICTS property"); | ||||||
|                     ViewUtil.showLongToast(context, throwable.toString()); |                     return Observable.empty(); | ||||||
|                 } |                 } | ||||||
|  |             }); | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|             }) |     @SuppressLint("CheckResult") | ||||||
|             .subscribeOn(Schedulers.io()); |     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) { |     private EditClaim editClaim(final List<String> entityIds) { | ||||||
|         return EditClaim.from(entityIds, WikidataProperties.DEPICTS.getPropertyName()); |         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 |      * Show a success toast when the edit is made successfully | ||||||
|      */ |      */ | ||||||
|  | @ -156,11 +166,10 @@ public class WikidataEditService { | ||||||
|      * @param fileEntityId |      * @param fileEntityId | ||||||
|      * @return |      * @return | ||||||
|      */ |      */ | ||||||
| 
 |  | ||||||
|     @SuppressLint("CheckResult") |     @SuppressLint("CheckResult") | ||||||
|     private Observable<Boolean> addCaption(final long fileEntityId, final String languageCode, |     private Observable<Boolean> addCaption(final long fileEntityId, final String languageCode, | ||||||
|         final String captionValue) { |         final String captionValue) { | ||||||
|         return wikiBaseClient.addLabelstoWikidata(fileEntityId, languageCode, captionValue) |         return wikiBaseClient.addLabelsToWikidata(fileEntityId, languageCode, captionValue) | ||||||
|             .doOnNext(mwPostResponse -> onAddCaptionResponse(fileEntityId, mwPostResponse)) |             .doOnNext(mwPostResponse -> onAddCaptionResponse(fileEntityId, mwPostResponse)) | ||||||
|             .doOnError(throwable -> { |             .doOnError(throwable -> { | ||||||
|                 Timber.e(throwable, "Error occurred while setting Captions"); |                 Timber.e(throwable, "Error occurred while setting Captions"); | ||||||
|  | @ -220,8 +229,10 @@ public class WikidataEditService { | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public Observable addDepictionsAndCaptions(final UploadResult uploadResult, |     public Observable<Boolean> addDepictionsAndCaptions( | ||||||
|         final Contribution contribution) { |         final UploadResult uploadResult, | ||||||
|  |         final Contribution contribution | ||||||
|  |     ) { | ||||||
|         return wikiBaseClient.getFileEntityId(uploadResult) |         return wikiBaseClient.getFileEntityId(uploadResult) | ||||||
|             .doOnError(throwable -> { |             .doOnError(throwable -> { | ||||||
|                 Timber |                 Timber | ||||||
|  |  | ||||||
|  | @ -11,19 +11,19 @@ data class EditClaim(val claims: List<Statement_partial>) { | ||||||
|             entityIds.forEach { |             entityIds.forEach { | ||||||
|                 list.add( |                 list.add( | ||||||
|                     Statement_partial( |                     Statement_partial( | ||||||
|                         Snak_partial( |                         mainSnak = Snak_partial( | ||||||
|                             "value", |                             snakType = "value", | ||||||
|                             propertyName, |                             property = propertyName, | ||||||
|                             DataValue.EntityId( |                             dataValue = DataValue.EntityId( | ||||||
|                                 WikiBaseEntityValue( |                                 WikiBaseEntityValue( | ||||||
|                                     "item", |                                     entityType = "item", | ||||||
|                                     it, |                                     id = it, | ||||||
|                                     it.removePrefix("Q").toLong() |                                     numericId = it.removePrefix("Q").toLong() | ||||||
|                                 ) |                                 ) | ||||||
|                             ) |                             ) | ||||||
|                         ), |                         ), | ||||||
|                         "statement", |                         type = "statement", | ||||||
|                         "preferred" |                         rank = "preferred" | ||||||
|                     ) |                     ) | ||||||
|                 ) |                 ) | ||||||
|             } |             } | ||||||
|  |  | ||||||
|  | @ -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) | ||||||
|  | @ -5,15 +5,15 @@ import com.google.gson.annotations.SerializedName | ||||||
| /*"mainsnak": { | /*"mainsnak": { | ||||||
|     "snaktype": "value", |     "snaktype": "value", | ||||||
|     "property": "P17", |     "property": "P17", | ||||||
|     "datatype": "wikibase-item", |  | ||||||
|     "datavalue": { |     "datavalue": { | ||||||
|         "value": { |         "value": { | ||||||
|         "entity-type": "item", |             "entity-type": "item", | ||||||
|         "id": "Q30", |             "numeric-id": 30, | ||||||
|         "numeric-id": 30 |             "id": "Q30" | ||||||
|     }, |         }, | ||||||
|         "type": "wikibase-entityid" |         "type": "wikibase-entityid" | ||||||
|     } |     }, | ||||||
|  |     "datatype": "wikibase-item", | ||||||
| }*/ | }*/ | ||||||
| data class Snak_partial( | data class Snak_partial( | ||||||
|     @SerializedName("snaktype") val snakType: String, |     @SerializedName("snaktype") val snakType: String, | ||||||
|  |  | ||||||
|  | @ -3,9 +3,9 @@ package fr.free.nrw.commons.wikidata.model | ||||||
| import com.google.gson.annotations.SerializedName | import com.google.gson.annotations.SerializedName | ||||||
| 
 | 
 | ||||||
| /*{ | /*{ | ||||||
|     "id": "q60$5083E43C-228B-4E3E-B82A-4CB20A22A3FB", |  | ||||||
|     "mainsnak": {}, |     "mainsnak": {}, | ||||||
|     "type": "statement", |     "type": "statement", | ||||||
|  |     "id": "q60$5083E43C-228B-4E3E-B82A-4CB20A22A3FB", | ||||||
|     "rank": "normal", |     "rank": "normal", | ||||||
|     "qualifiers": { |     "qualifiers": { | ||||||
|     "P580": [], |     "P580": [], | ||||||
|  |  | ||||||
|  | @ -1,5 +1,6 @@ | ||||||
| <?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> | ||||||
| <!-- Authors: | <!-- Authors: | ||||||
|  | * AntonyFragakis | ||||||
| * Astralnet | * Astralnet | ||||||
| * Domdomegg | * Domdomegg | ||||||
| * Evropi | * Evropi | ||||||
|  | @ -24,51 +25,51 @@ | ||||||
| * Vtalos | * Vtalos | ||||||
| --> | --> | ||||||
| <resources> | <resources> | ||||||
|   <string name="commons_facebook">Σελίδα των Κοινών στο Facebook</string> |   <string name="commons_facebook">Σελίδα Commons στο Facebook</string> | ||||||
|   <string name="commons_github">Κώδικας πηγής των Κοινών στο GitHub</string> |   <string name="commons_github">Πηγαίος κώδικας των Commons στο GitHub</string> | ||||||
|   <string name="commons_logo">Λογότυπο Commons</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="exit_location_picker">Έξοδος από το εργαλείο επιλογής τοποθεσίας</string> | ||||||
|   <string name="submit">Υποβολή</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_new_contribution">Προσθέστε νέα συνεισφορά</string> | ||||||
|   <string name="add_contribution_from_camera">Προσθέστε συνεισφορά από την κάμερα</string> |   <string name="add_contribution_from_camera">Προσθέστε συνεισφορά από την κάμερα</string> | ||||||
|   <string name="add_contribution_from_photos">Προσθέστε συνεισφορά από τις Φωτογραφίες</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="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="row_item_caption">Λεζάντα</string> | ||||||
|   <string name="show_captions_description">Περιγραφή</string> |   <string name="show_captions_description">Περιγραφή</string> | ||||||
|   <string name="nearby_row_image">Εικόνα</string> |   <string name="nearby_row_image">Εικόνα</string> | ||||||
|   <string name="nearby_all">Όλα</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_search">Προβολή αναζήτησης</string> | ||||||
|   <string name="nearby_filter_state">Κατάσταση τοποθεσίας</string> |   <string name="nearby_filter_state">Κατάσταση τοποθεσίας</string> | ||||||
|   <string name="appwidget_img">Φωτογραφία της Ημέρας</string> |   <string name="appwidget_img">Φωτογραφία της ημέρας</string> | ||||||
|   <plurals name="uploads_pending_notification_indicator"> |   <plurals name="uploads_pending_notification_indicator"> | ||||||
|     <item quantity="one">1 αρχείο επιφορτώνεται</item> |     <item quantity="one">%1$d μεταφόρτωση αρχείου</item> | ||||||
|     <item quantity="other">%1$d αρχεία επιφορτώνονται</item> |     <item quantity="other"> %1$d μεταφόρτωση αρχείων</item> | ||||||
|   </plurals> |   </plurals> | ||||||
|   <plurals name="contributions_subtitle"> |   <plurals name="contributions_subtitle"> | ||||||
|     <item quantity="one">(%1$d)</item> |     <item quantity="one">(%1$d)</item> | ||||||
|     <item quantity="other">(%1$d)</item> |     <item quantity="other">(%1$d)</item> | ||||||
|   </plurals> |   </plurals> | ||||||
|   <string name="starting_uploads">Έναρξη Μεταφορτώσεων</string> |   <string name="starting_uploads">Έναρξη μεταφορτώσεων</string> | ||||||
|   <plurals name="starting_multiple_uploads"> |   <plurals name="starting_multiple_uploads"> | ||||||
|     <item quantity="one">Επεξεργασία %d μεταφόρτωσης</item> |     <item quantity="one">Επεξεργασία %d μεταφόρτωσης</item> | ||||||
|     <item quantity="other">Επεξεργασία %d μεταφορτώσεων</item> |     <item quantity="other">Επεξεργασία %d μεταφορτώσεων</item> | ||||||
|   </plurals> |   </plurals> | ||||||
|   <plurals name="multiple_uploads_title"> |   <plurals name="multiple_uploads_title"> | ||||||
|     <item quantity="one">%d μεταφορτώνεται</item> |     <item quantity="one">%d μεταφόρτωση</item> | ||||||
|     <item quantity="other">%d μεταφορτώνονται</item> |     <item quantity="other"> %d μεταφορτώσεις</item> | ||||||
|   </plurals> |   </plurals> | ||||||
|   <plurals name="share_license_summary"> |   <plurals name="share_license_summary"> | ||||||
|     <item quantity="one">Αυτή η εικόνα θα αδειοδοτηθεί υπό την %1$s</item> |     <item quantity="one">Αυτή η εικόνα θα αδειοδοτηθεί υπό την %1$s</item> | ||||||
|     <item quantity="other">Αυτές οι εικόνες θα αδειοδοτηθούν υπό την %1$s</item> |     <item quantity="other">Αυτές οι εικόνες θα αδειοδοτηθούν υπό την %1$s</item> | ||||||
|   </plurals> |   </plurals> | ||||||
|   <plurals name="upload_count_title"> |   <plurals name="upload_count_title"> | ||||||
|     <item quantity="one">%1$d Ανέβασμα στον υπολογιστή</item> |     <item quantity="one">%1$d Μεταφόρτωση</item> | ||||||
|     <item quantity="other">%1$d Ανεβάσματα στον υπολογιστή</item> |     <item quantity="other"> %1$d Μεταφορτώσεις</item> | ||||||
|   </plurals> |   </plurals> | ||||||
|   <plurals name="receiving_shared_content"> |   <plurals name="receiving_shared_content"> | ||||||
|     <item quantity="one">Λήψη κοινόχρηστου περιεχομένου. Η επεξεργασία της εικόνας μπορεί να πάρει κάποιο χρόνο ανάλογα με το μέγεθος της εικόνας και τη συσκευή σας</item> |     <item quantity="one">Λήψη κοινόχρηστου περιεχομένου. Η επεξεργασία της εικόνας μπορεί να πάρει κάποιο χρόνο ανάλογα με το μέγεθος της εικόνας και τη συσκευή σας</item> | ||||||
|  | @ -78,142 +79,142 @@ | ||||||
|   <string name="preference_category_appearance">Εμφάνιση</string> |   <string name="preference_category_appearance">Εμφάνιση</string> | ||||||
|   <string name="preference_category_general">Γενικά</string> |   <string name="preference_category_general">Γενικά</string> | ||||||
|   <string name="preference_category_feedback">Ανατροφοδότηση</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="app_name">Commons</string> | ||||||
|   <string name="bullet">•</string> |   <string name="bullet">•</string> | ||||||
|   <string name="menu_settings">Ρυθμίσεις</string> |   <string name="menu_settings">Ρυθμίσεις</string> | ||||||
|   <string name="intent_share_upload_label">Ανέβασμα στα Κοινά</string> |   <string name="intent_share_upload_label">Μεταφόρτωση στα Commons</string> | ||||||
|   <string name="upload_in_progress">Ανέβασμα σε εξέλιξη...</string> |   <string name="upload_in_progress">Μεταφόρτωση σε εξέλιξη</string> | ||||||
|   <string name="username">Όνομα χρήστη</string> |   <string name="username">Όνομα χρήστη</string> | ||||||
|   <string name="password">Κωδικός πρόσβασης</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="login">Σύνδεση</string> | ||||||
|   <string name="forgot_password">Ξεχάσατε τον κωδικό σας;</string> |   <string name="forgot_password">Ξεχάσατε τον κωδικό πρόσβασης σας;</string> | ||||||
|   <string name="signup">Εγγραφή</string> |   <string name="signup">Εγγραφή</string> | ||||||
|   <string name="logging_in_title">Γίνεται σύνδεση…</string> |   <string name="logging_in_title">Γίνεται σύνδεση...</string> | ||||||
|   <string name="logging_in_message">Παρακαλούμε περιμένετε…</string> |   <string name="logging_in_message">Παρακαλούμε αναμείνετε…</string> | ||||||
|   <string name="updating_caption_title">Ενημέρωση λεζάντων και περιγραφών</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_success">Επιτυχής σύνδεση!</string> | ||||||
|   <string name="login_failed">Η είσοδος απέτυχε!</string> |   <string name="login_failed">Η είσοδος απέτυχε!</string> | ||||||
|   <string name="upload_failed">Το αρχείο δεν βρέθηκε. Παρακαλώ δοκιμάστε ένα άλλο αρχείο.</string> |   <string name="upload_failed">Το αρχείο δε βρέθηκε. Παρακαλούμε δοκιμάστε άλλο αρχείο.</string> | ||||||
|   <string name="retry_limit_reached">Συμπληρώθηκε το μέγιστο όριο επανάληψης! Ακυρώστε τη μεταφόρτωση και προσπαθήστε ξανά</string> |   <string name="retry_limit_reached">Συμπληρώθηκε το μέγιστο όριο επανάληψης! Παρακαλούμε ακυρώστε τη μεταφόρτωση και προσπαθήστε ξανά</string> | ||||||
|   <string name="unrestricted_battery_mode">Απενεργοποίηση βελτιστοποίησης μπαταρίας;</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="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="authentication_failed">Η ταυτοποίηση απέτυχε. Παρακαλούμε, συνδεθείτε ξανά.</string> | ||||||
|   <string name="uploading_started">Η αποστολή ξεκίνησε!</string> |   <string name="uploading_started">Η μεταφόρτωση ξεκίνησε!</string> | ||||||
|   <string name="uploading_queued">Η μεταφόρτωση βρίσκεται σε ουρά (ενεργοποιημένη λειτουργία περιορισμένης σύνδεσης)</string> |   <string name="uploading_queued">Η μεταφόρτωση βρίσκεται σε ουρά (ενεργοποιημένη λειτουργία περιορισμένης σύνδεσης)</string> | ||||||
|   <string name="upload_completed_notification_title">%1$s επιφορτώθηκε!</string> |   <string name="upload_completed_notification_title">%1$s μεταφορτώθηκε!</string> | ||||||
|   <string name="upload_completed_notification_text">Πατήστε για να προβάλλετε την αποστολή</string> |   <string name="upload_completed_notification_text">Πατήστε για να δείτε τη μεταφόρτωσή σας</string> | ||||||
|   <string name="upload_progress_notification_title_start">Μεταφόρτωση αρχείου: %s</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_in_progress">%1$s μεταφορτώθηκε!</string> | ||||||
|   <string name="upload_progress_notification_title_finishing">Ολοκλήρωση επιφόρτωσης %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_failed_notification_title">Η μεταφόρτωση του %1$s απέτυχε</string> | ||||||
|   <string name="upload_paused_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="upload_paused_notification_subtitle">Πατήστε για προβολή</string> | ||||||
|   <string name="title_activity_contributions">Οι Πρόσφατες Μεταφορτώσεις μου</string> |   <string name="title_activity_contributions">Οι Πρόσφατες Μεταφορτώσεις μου</string> | ||||||
|   <string name="contribution_state_queued">Στην ουρά</string> |   <string name="contribution_state_queued">Στην ουρά</string> | ||||||
|   <string name="contribution_state_failed">Απέτυχε</string> |   <string name="contribution_state_failed">Απέτυχε</string> | ||||||
|   <string name="contribution_state_in_progress">%1$d%% ολοκληρώθηκε</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_gallery">Από τη Συλλογή</string> | ||||||
|   <string name="menu_from_camera">Τραβήξτε φωτογραφία</string> |   <string name="menu_from_camera">Τραβήξτε φωτογραφία</string> | ||||||
|   <string name="menu_nearby">Κοντά</string> |   <string name="menu_nearby">Κοντά</string> | ||||||
|   <string name="provider_contributions">Οι επιφορτώσεις μου</string> |   <string name="provider_contributions">Οι μεταφορτώσεις μου</string> | ||||||
|   <string name="menu_share">Κοινοποίηση</string> |   <string name="menu_share">Κοινοποίηση</string> | ||||||
|   <string name="menu_view_file_page">Προβολή σελίδας αρχείου</string> |   <string name="menu_view_file_page">Προβολή σελίδας αρχείου</string> | ||||||
|   <string name="share_title_hint">Λεζάντα (Απαιτείται)</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_description_hint">Περιγραφή</string> | ||||||
|   <string name="share_caption_hint">Λεζάντα</string> |   <string name="share_caption_hint">Λεζάντα</string> | ||||||
|   <string name="login_failed_network">Δεν είναι δυνατή η σύνδεση - αποτυχία του δικτύου</string> |   <string name="login_failed_network">Δεν είναι δυνατή η σύνδεση - αποτυχία δικτύου</string> | ||||||
|   <string name="login_failed_throttled">Πάρα πολλές ανεπιτυχείς προσπάθειες. Παρακαλώ δοκιμάστε ξανά σε λίγα λεπτά.</string> |   <string name="login_failed_throttled">Πάρα πολλές ανεπιτυχείς προσπάθειες. Παρακαλούμε, δοκιμάστε ξανά σε λίγα λεπτά.</string> | ||||||
|   <string name="login_failed_blocked">Συγνώμη, αυτός ο χρήστης έχει αποκλειστεί από τα Commons</string> |   <string name="login_failed_blocked">Λυπούμαστε, αυτός ο χρήστης έχει αποκλειστεί στα Commons</string> | ||||||
|   <string name="login_failed_2fa_needed">Πρέπει να δώσετε τον κωδικό ελέγχου ταυτότητας δύο παραγόντων.</string> |   <string name="login_failed_2fa_needed">Πρέπει να παράσχετε τον κωδικό ελέγχου ταυτότητας δύο παραγόντων.</string> | ||||||
|   <string name="login_failed_generic">Η είσοδος απέτυχε</string> |   <string name="login_failed_generic">Η είσοδος απέτυχε!</string> | ||||||
|   <string name="share_upload_button">Ανέβασμα</string> |   <string name="share_upload_button">Μεταφόρτωση</string> | ||||||
|   <string name="multiple_share_base_title">Ονομάστε το σύνολο</string> |   <string name="multiple_share_base_title">Ονομάστε το σύνολο</string> | ||||||
|   <string name="provider_modifications">Τροποποιήσεις</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="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="menu_save_categories">Αποθήκευση</string> | ||||||
|   <string name="refresh_button">Ανανέωση</string> |   <string name="refresh_button">Ανανέωση</string> | ||||||
|   <string name="display_list_button">Κατάλογος</string> |   <string name="display_list_button">Κατάλογος</string> | ||||||
|   <string name="contributions_subtitle_zero">(Καμία μεταφόρτωση ακόμα)</string> |   <string name="contributions_subtitle_zero">(Καμία μεταφόρτωση ακόμα)</string> | ||||||
|   <string name="categories_not_found">Δεν βρέθηκαν κατηγορίες που ταιριάζουν %1$s</string> |   <string name="categories_not_found">Δε βρέθηκαν κατηγορίες που ταιριάζουν με %1$s</string> | ||||||
|   <string name="depictions_not_found">Δεν βρέθηκαν στοιχεία Wikidata που να ταιριάζουν στο %1$s</string> |   <string name="depictions_not_found">Δε βρέθηκαν αντικείμενα Wikidata που να ταιριάζουν στο %1$s</string> | ||||||
|   <string name="no_child_classes">Το %1$s δεν έχει κλάσεις παιδιά</string> |   <string name="no_child_classes">Το %1$s δεν έχει θυγατρικές κλάσεις</string> | ||||||
|   <string name="no_parent_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_skip_explanation">Προσθέστε κατηγορίες για να κάνετε τις εικόνες σας πιο ανιχνεύσιμες στο Wikimedia Commons.\nΞεκινήστε να πληκτρολογείτε για να προσθέσετε κατηγορίες.</string> | ||||||
|   <string name="categories_activity_title">Κατηγορίες</string> |   <string name="categories_activity_title">Κατηγορίες</string> | ||||||
|   <string name="title_activity_settings">Ρυθμίσεις</string> |   <string name="title_activity_settings">Ρυθμίσεις</string> | ||||||
|   <string name="title_activity_signup">Εγγραφή</string> |   <string name="title_activity_signup">Εγγραφή</string> | ||||||
|   <string name="title_activity_featured_images">Προβεβλημμένες εικόνες</string> |   <string name="title_activity_featured_images">Προβεβλημμένες εικόνες</string> | ||||||
|   <string name="title_activity_custom_selector">Προσαρμοσμένος Επιλογέας</string> |   <string name="title_activity_custom_selector">Προσαρμοσμένος Επιλογέας</string> | ||||||
|   <string name="title_activity_category_details">Κατηγορία</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="menu_about">Σχετικά</string> | ||||||
|   <string name="about_license">Λογισμικό ανοικτού κωδικού που κυκλοφορεί υπό την <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Άδεια Apache v2</a>. Το Wikimedia Commons και το λογότυπο είναι εμπορικά σήματα του Ιδρύματος Wikimedia και χρησιμοποιούνται με άδεια από το Ίδρυμα Wikimedia. Δεν συμμετέχουμε  στην δημιουργία, ανάπτυξη ή συντήρηση  του Ιδρύματος  Wikimedia.</string> |   <string name="about_license">Η εφαρμογή Wikimedia Commons είναι μια ανοιχτού κώδικα εφαρμογή που δημιουργήθηκε και συντηρείται από χορηγούς και εθελοντές της κοινότητας του Ιδρύματος Wikimedia. Το Ίδρυμα Wikimedia δεν εμπλέκεται στη δημιουργία, ανάπτυξη ή συντήρηση της εφαρμογής.</string> | ||||||
|   <string name="about_improve">Δημιουργήστε ένα νέο <a href=\"%1$s\">GitHub θέμα</a> για αναφορές σφαλμάτων και προτάσεις.</string> |   <string name="about_improve">Δημιουργήστε ένα νέο <a href=\"%1$s\">θέμα GitHub</a> για αναφορές σφαλμάτων και προτάσεις.</string> | ||||||
|   <string name="about_privacy_policy">Πολιτική ιδιωτικότητας</string> |   <string name="about_privacy_policy">Πολιτική απορρήτου</string> | ||||||
|   <string name="about_credits"><u>Συντελεστές</u></string> |   <string name="about_credits"><u>Συντελεστές</u></string> | ||||||
|   <string name="title_activity_about">Σχετικά</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="no_email_client">Δεν υπάρχει εγκατεστημένη εφαρμογή ηλεκτρονικού ταχυδρομείου</string> | ||||||
|   <string name="provider_categories">Κατηγορίες που χρησιμοποιήθηκαν πρόσφατα</string> |   <string name="provider_categories">Κατηγορίες που χρησιμοποιήθηκαν πρόσφατα</string> | ||||||
|   <string name="waiting_first_sync">Αναμονή για τον πρώτο συγχρονισμό…</string> |   <string name="waiting_first_sync">Αναμονή για τον πρώτο συγχρονισμό…</string> | ||||||
|   <string name="no_uploads_yet">Ακόμα δεν έχετε ανεβάσει φωτογραφίες.</string> |   <string name="no_uploads_yet">Δεν έχετε ανεβάσει φωτογραφίες ακόμη.</string> | ||||||
|   <string name="menu_retry_upload">Ξαναπροσπαθήστε</string> |   <string name="menu_retry_upload">Προσπαθήστε πάλι</string> | ||||||
|   <string name="menu_cancel_upload">Ακύρωση</string> |   <string name="menu_cancel_upload">Ακύρωση</string> | ||||||
|   <string name="media_upload_policy">Αποστέλλοντας αυτήν την εικόνα, δηλώνω πως αυτή η εργασία είναι δική μου, και δεν περιέχει υλικό άλλου συγγραφέα, και εκτός αυτού πρόσκειται στο , thathref=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">Κοινές πολιτικές της Wikipedia</a>.</string> |   <string name="media_upload_policy">Υποβάλλοντας αυτή τη φωτογραφία, δηλώνω ότι πρόκειται για δικό μου έργο, ότι δεν περιέχει υλικό που προστατεύεται από πνευματικά δικαιώματα ή selfies, και ότι κατά τα λοιπά συμμορφώνεται με τις <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">πολιτικές των Wikimedia Commons</a>.</string> | ||||||
|   <string name="menu_download">Λήψη</string> |   <string name="menu_download">Λήψη</string> | ||||||
|   <string name="preference_license">Προεπιλεγμένη άδεια</string> |   <string name="preference_license">Προεπιλεγμένη άδεια</string> | ||||||
|   <string name="use_previous">Χρήση προηγούμενου τίτλου και περιγραφής</string> |   <string name="use_previous">Χρήση προηγούμενου τίτλου και περιγραφής</string> | ||||||
|   <string name="preference_theme">Θέμα</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_sa_four">Αναφορά-Παρόμοια Διανομή 4.0</string> | ||||||
|   <string name="license_name_cc_by_four"> Attribution 4.0</string> |   <string name="license_name_cc_by_four">Αναφορά 4.0</string> | ||||||
|   <string name="license_name_cc_by_sa"> Attribution-ShareAlike 3.0</string> |   <string name="license_name_cc_by_sa">Αναφορά-Παρόμοια Διανομή 4.0 3.0</string> | ||||||
|   <string name="license_name_cc_by">Attribution 3.0</string> |   <string name="license_name_cc_by">Αναφορά 3.0</string> | ||||||
|   <string name="license_name_cc0">CC0</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_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_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_sa_4_0">CC BY-SA 4.0</string> | ||||||
|   <string name="license_name_cc_by_4_0">CC BY 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_text">Τα Wikimedia Commons φιλοξενούν τις περισσότερες από τις εικόνες που χρησιμοποιούνται στη Βικιπαίδεια.</string> | ||||||
|   <string name="tutorial_1_subtext">Οι εικόνες σας βοηθούν να μορφωθούν άνθρωποι σε όλο τον κόσμο!</string> |   <string name="tutorial_1_subtext">Οι εικόνες σας βοηθούν στην εκπαίδευση των ανθρώπων σε όλο τον κόσμο!</string> | ||||||
|   <string name="tutorial_2_text">Παρακαλούμε ανεβάστε εικόνες που έχουν ληφθεί ή δημιουργηθεί εξ ολοκλήρου από τον εαυτό σας:</string> |   <string name="tutorial_2_text">Παρακαλούμε μεταφορτώστε φωτογραφίες που έχουν ληφθεί ή δημιουργηθεί εξ ολοκλήρου από εσάς:</string> | ||||||
|   <string name="tutorial_2_subtext_1">Φυσικά αντικείμενα (λουλούδια, ζώα, βουνά)</string> |   <string name="tutorial_2_subtext_1">Φυσικά αντικείμενα (λουλούδια, ζώα, βουνά)</string> | ||||||
|   <string name="tutorial_2_subtext_2">Χρήσιμα αντικείμενα (ποδήλατα, σταθμοί τρένων)</string> |   <string name="tutorial_2_subtext_2">Χρήσιμα αντικείμενα (ποδήλατα, σταθμοί τρένων)</string> | ||||||
|   <string name="tutorial_2_subtext_3">Διάσημοι άνθρωποι (ο δήμαρχος, αθλητές Ολυμπιακών αγώνων που συναντήσατε)</string> |   <string name="tutorial_2_subtext_3">Διασημότητες (ο δήμαρχος σας, αθλητές Ολυμπιακών Αγώνων που συναντήσατε)</string> | ||||||
|   <string name="tutorial_3_text">Παρακαλούμε ΜΗΝ ανεβάσετε:</string> |   <string name="tutorial_3_text">Παρακαλούμε ΜΗΝ μεταφορτώνετε:</string> | ||||||
|   <string name="tutorial_3_subtext_1">Σέλφι ή φωτογραφίες των φίλων σας</string> |   <string name="tutorial_3_subtext_1">Σέλφι ή φωτογραφίες των φίλων σας</string> | ||||||
|   <string name="tutorial_3_subtext_2">Φωτογραφίες που κατεβάσατε από το διαδίκτυο</string> |   <string name="tutorial_3_subtext_2">Φωτογραφίες που κατεβάσατε από το Διαδίκτυο</string> | ||||||
|   <string name="tutorial_3_subtext_3">Στιγμιότυπα ιδιόκτητων εφαρμογών</string> |   <string name="tutorial_3_subtext_3">Στιγμιότυπα οθόνης ιδιόκτητων εφαρμογών</string> | ||||||
|   <string name="tutorial_4_text">Παράδειγμα ανεβάσματος:</string> |   <string name="tutorial_4_text">Παράδειγμα μεταφόρτωσης:</string> | ||||||
|   <string name="tutorial_4_subtext_1">Τίτλος: Όπερα του Σίδνεϋ</string> |   <string name="tutorial_4_subtext_1">Τίτλος: Όπερα του Σίδνεϊ</string> | ||||||
|   <string name="tutorial_4_subtext_2">Περιγραφή: Η Όπερα του Σίδνεϋ όπως φαίνεται κατά μήκος του κόλπου</string> |   <string name="tutorial_4_subtext_2">Περιγραφή: Όπερα του Σίδνεϊ όπως φαίνεται κατά μήκος του κόλπου</string> | ||||||
|   <string name="tutorial_4_subtext_3">Κατηγορία: η Όπερα του Σίδνεϋ από τα δυτικά, απομακρυσμένες προβολές της Όπερας του Σίδνεϋ</string> |   <string name="tutorial_4_subtext_3">Κατηγορίες: Sydney Opera House from the west, Sydney Opera House remote views</string> | ||||||
|   <string name="welcome_wikipedia_text">Συνεισφέρετε τις εικόνες σας. Βοηθείστε τα λήμματα της Wikipedia να έρθουν στη ζωή!</string> |   <string name="welcome_wikipedia_text">Συνεισφέρετε τις εικόνες σας. Βοηθήστε τα λήμματα της Βικιπαίδειας να ζωντανέψουν!</string> | ||||||
|   <string name="welcome_wikipedia_subtext">Οι εικόνες στη Wikipedia προέρχονται από το Wikimedia Commons.</string> |   <string name="welcome_wikipedia_subtext">Οι εικόνες στη Βικιπαίδεια προέρχονται από τα Wikimedia Commons.</string> | ||||||
|   <string name="welcome_copyright_text">Οι εικόνες σας βοηθούν να εκπαιδευτούν άνθρωποι σε όλο τον κόσμο.</string> |   <string name="welcome_copyright_text">Οι εικόνες σας βοηθούν στην εκπαίδευση ανθρώπων σε όλο τον κόσμο!</string> | ||||||
|   <string name="welcome_copyright_subtext">Αποφύγετε προστατευμένο υλικό  που βρήκατε από το Internet, καθώς και εικόνες, αφίσες, εξώφυλλα βιβλίων, κλπ.</string> |   <string name="welcome_copyright_subtext">Αποφύγετε υλικό που προστατεύεται από πνευματικά δικαιώματα και βρήκατε από το Διαδίκτυο, καθώς και εικόνες αφισών, εξώφυλλων βιβλίων κ.λπ..</string> | ||||||
|   <string name="welcome_final_text">Τι λες, μπορείς;</string> |   <string name="welcome_final_text">Νομίζεις ότι το έχεις;</string> | ||||||
|   <string name="welcome_final_button_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_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_panel_cats_none">Καμία επιλεγμένη</string> | ||||||
|   <string name="detail_caption_empty">Καμία λεζάντα</string> |   <string name="detail_caption_empty">Χωρίς λεζάντα</string> | ||||||
|   <string name="detail_description_empty">Καμία περιγραφή</string> |   <string name="detail_description_empty">Χωρίς περιγραφή</string> | ||||||
|   <string name="detail_discussion_empty">Καμία συζήτηση</string> |   <string name="detail_discussion_empty">Καμία συζήτηση</string> | ||||||
|   <string name="detail_license_empty">Άγνωστη άδεια</string> |   <string name="detail_license_empty">Άγνωστη άδεια</string> | ||||||
|   <string name="menu_refresh">Ανανέωση</string> |   <string name="menu_refresh">Ανανέωση</string> | ||||||
|   <string name="storage_permission_title">Αιτείται Άδεια Αποθήκευσης</string> |   <string name="storage_permission_title">Αίτηση για άδεια αποθήκευσης</string> | ||||||
|   <string name="read_storage_permission_rationale">Απαιτούμενη άδεια: Ανάγνωση εξωτερικής αποθήκευσης. Η εφαρμογή δεν μπορεί να έχει πρόσβαση στην συλλογή σας χωρίς αυτή.</string> |   <string name="read_storage_permission_rationale">Απαιτούμενη άδεια: Ανάγνωση εξωτερικής αποθήκευσης. Η εφαρμογή δεν μπορεί να έχει πρόσβαση στη συλλογή σας χωρίς αυτή.</string> | ||||||
|   <string name="write_storage_permission_rationale">Απαιτούμενη άδεια: Εγγραφή σε εξωτερική αποθήκευση. Το πρόγραμμα δεν θα έχει πρόσβαση στην κάμερα/συλλογή σας χωρίς αυτήν.</string> |   <string name="write_storage_permission_rationale">Απαιτούμενη άδεια: Εγγραφή σε εξωτερική αποθήκευση. Η εφαρμογή δε θα έχει πρόσβαση στην κάμερα/συλλογή σας χωρίς αυτήν.</string> | ||||||
|   <string name="location_permission_title">Αιτείται Άδεια Τοποθεσίας</string> |   <string name="location_permission_title">Αίτηση για άδεια τοποθεσίας</string> | ||||||
|   <string name="in_app_camera_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="in_app_camera_location_switch_pref_summary">Ενεργοποιήστε το για να καταγράψετε την τοποθεσία με λήψεις εντός εφαρμογής σε περίπτωση που η κάμερα της συσκευής δεν την καταγράψει</string> | ||||||
|   <string name="ok">Εντάξει</string> |   <string name="ok">Εντάξει</string> | ||||||
|  | @ -233,24 +234,24 @@ | ||||||
|   <string name="media_detail_coordinates">Συντεταγμένες</string> |   <string name="media_detail_coordinates">Συντεταγμένες</string> | ||||||
|   <string name="media_detail_coordinates_empty">Δεν δόθηκε τίποτα</string> |   <string name="media_detail_coordinates_empty">Δεν δόθηκε τίποτα</string> | ||||||
|   <string name="become_a_tester_title">Γίνετε Δοκιμαστής Beta</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="_2fa_code">Κωδικός 2FA</string> | ||||||
|   <string name="logout_verification">Θέλετε σίγουρα να αποσυνδεθείτε;</string> |   <string name="logout_verification">Θέλετε σίγουρα να αποσυνδεθείτε;</string> | ||||||
|   <string name="mediaimage_failed">Η Εικόνα των Μέσων Απέτυχε (δεν μπορεί να φορτωθεί)</string> |   <string name="mediaimage_failed">Η εικόνα πολυμέσων απέτυχε</string> | ||||||
|   <string name="no_subcategory_found">Δεν βρέθηκαν υποκατηγορίες</string> |   <string name="no_subcategory_found">Δε βρέθηκαν υποκατηγορίες</string> | ||||||
|   <string name="no_parentcategory_found">Δεν βρέθηκαν γονικές κατηγορίες</string> |   <string name="no_parentcategory_found">Δε βρέθηκαν γονικές κατηγορίες</string> | ||||||
|   <string name="welcome_image_mount_zao">Όρος Ζάο</string> |   <string name="welcome_image_mount_zao">Όρος Ζάο</string> | ||||||
|   <string name="welcome_image_llamas">Llamas</string> |   <string name="welcome_image_llamas">Λάμα</string> | ||||||
|   <string name="welcome_image_rainbow_bridge">Γέφυρα Ουρανίου Τόξου</string> |   <string name="welcome_image_rainbow_bridge">Γέφυρα Ρέινμποου</string> | ||||||
|   <string name="welcome_image_tulip">Τουλίπα</string> |   <string name="welcome_image_tulip">Τουλίπα</string> | ||||||
|   <string name="welcome_image_welcome_wikipedia">Καλωσήρθατε στη Βικιπαίδεια</string> |   <string name="welcome_image_welcome_wikipedia">Καλωσήρθατε στη Βικιπαίδεια</string> | ||||||
|   <string name="welcome_image_welcome_copyright">Καλωσορίστε το Δικαίωμα Αντιγραφής</string> |   <string name="welcome_image_welcome_copyright">Καλώς ορίσατε στα Πνευματικά δικαιώματα</string> | ||||||
|   <string name="welcome_image_sydney_opera_house">Κτίρια Όπερας Sidney</string> |   <string name="welcome_image_sydney_opera_house">Όπερα του Σίδνεϊ</string> | ||||||
|   <string name="cancel">Ακυρώστε</string> |   <string name="cancel">Ακύρωση</string> | ||||||
|   <string name="navigation_drawer_open">Ανοίξτε</string> |   <string name="navigation_drawer_open">Άνοιγμα</string> | ||||||
|   <string name="navigation_drawer_close">Κλείστε</string> |   <string name="navigation_drawer_close">Κλείσιμο</string> | ||||||
|   <string name="navigation_item_home">Αρχική Σελίδα</string> |   <string name="navigation_item_home">Αρχική σελίδα</string> | ||||||
|   <string name="navigation_item_upload">Ανέβασμα αρχείου</string> |   <string name="navigation_item_upload">Μεταφόρτωση αρχείου</string> | ||||||
|   <string name="navigation_item_nearby">Κοντά σας</string> |   <string name="navigation_item_nearby">Κοντά σας</string> | ||||||
|   <string name="navigation_item_about">Σχετικά</string> |   <string name="navigation_item_about">Σχετικά</string> | ||||||
|   <string name="navigation_item_settings">Ρυθμίσεις</string> |   <string name="navigation_item_settings">Ρυθμίσεις</string> | ||||||
|  | @ -258,135 +259,135 @@ | ||||||
|   <string name="navigation_item_feedback_github">Ανατροφοδότηση μέσω Github</string> |   <string name="navigation_item_feedback_github">Ανατροφοδότηση μέσω Github</string> | ||||||
|   <string name="navigation_item_logout">Αποσύνδεση</string> |   <string name="navigation_item_logout">Αποσύνδεση</string> | ||||||
|   <string name="navigation_item_info">Σεμινάριο</string> |   <string name="navigation_item_info">Σεμινάριο</string> | ||||||
|   <string name="navigation_item_notification">Ενημερώσεις</string> |   <string name="navigation_item_notification">Ειδοποιήσεις</string> | ||||||
|   <string name="navigation_item_review">Επιθεώρηση</string> |   <string name="navigation_item_review">Έλεγχος</string> | ||||||
|   <string name="no_description_found">δεν βρέθηκε περιγραφή</string> |   <string name="no_description_found">δε βρέθηκε περιγραφή</string> | ||||||
|   <string name="nearby_info_menu_commons_article">Σελίδα αρχείου Commons</string> |   <string name="nearby_info_menu_commons_article">Σελίδα αρχείου στα Commons</string> | ||||||
|   <string name="nearby_info_menu_wikidata_article">Αντικείμενο Wikidata</string> |   <string name="nearby_info_menu_wikidata_article">Αντικείμενο Wikidata</string> | ||||||
|   <string name="nearby_info_menu_wikipedia_article">Λήμμα Βικιπαίδειας</string> |   <string name="nearby_info_menu_wikipedia_article">Λήμμα Βικιπαίδειας</string> | ||||||
|   <string name="description_info">Παρακαλώ περιγράψετε τα μέσα όσο το δυνατόν περισσότερο : Πού λήφθηκε; Τι δείχνει; Ποιο είναι το περιεχόμενο του; Παρακαλώ περιγράψετε τα αντικείμενα ή τα πρόσωπα. Αποκαλύψετε πληροφορίες που δεν είναι εύκολο να μαντέψει κανείς, για παράδειγμα την ώρα εντός της ημέρας αν πρόκειται για τοπίο. Αν τα μέσα δείξουν κάτι ασύνηθες, παρακαλώ εξηγήστε τι το καθιστούν μη συνηθισμένα.</string> |   <string name="description_info">Παρακαλούμε, περιγράψετε τα πολυμέσα όσο το δυνατόν περισσότερο: Πού λήφθηκε; Τι απεικονίζει; Ποιο είναι το περιεχόμενο του; Παρακαλούμε, περιγράψετε τα αντικείμενα ή τα πρόσωπα. Δώστε πληροφορίες που δεν είναι εύκολο να μαντέψει κανείς, για παράδειγμα την ώρα εντός της ημέρας αν πρόκειται για τοπίο. Αν τα πολυμέσα δείχνουν κάτι ασυνήθιστο, παρακαλούμε εξηγήστε τι το χαρακτηρίζει ως τέτοιο.</string> | ||||||
|   <string name="caption_info">Γράψτε μια σύντομη περιγραφή της εικόνας. Η πρώτη λεζάντα θα χρησιμοποιηθεί ως τίτλος για την εικόνα. Όριο 255 χαρακτήρες.</string> |   <string name="caption_info">Παρακαλούμε να γράψετε μια σύντομη περιγραφή της εικόνας. Η πρώτη λεζάντα θα χρησιμοποιηθεί ως τίτλος για την εικόνα. Περιοριστείτε σε 255 χαρακτήρες.</string> | ||||||
|   <string name="upload_problem_exist">Πιθανά προβλήματα με αυτήν την εικόνα:</string> |   <string name="upload_problem_exist">Πιθανά προβλήματα με αυτήν την εικόνα:</string> | ||||||
|   <string name="upload_problem_image_dark">Η εικόνα είναι πολύ σκοτεινή.</string> |   <string name="upload_problem_image_dark">Η εικόνα είναι πολύ σκοτεινή.</string> | ||||||
|   <string name="upload_problem_image_blurry">Η εικόνα είναι θολή.</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_different_geolocation">Η εικόνα λήφθηκε σε διαφορετική τοποθεσία.</string> | ||||||
|   <string name="upload_problem_fbmd">Ανεβάστε μόνο φωτογραφίες που έχετε τραβήξει μόνοι σας. Μην ανεβάζετε φωτογραφίες που έχετε βρει σε λογαριασμούς άλλων ατόμων στο Facebook.</string> |   <string name="upload_problem_fbmd">Παρακαλούμε ανεβάστε μόνο φωτογραφίες που έχετε τραβήξει μόνοι σας. Μην ανεβάζετε φωτογραφίες που έχετε βρει σε λογαριασμούς άλλων ατόμων στο Facebook.</string> | ||||||
|   <string name="upload_problem_do_you_continue">Θέλετε ακόμη να ανεβάσετε αυτή την εικόνα;</string> |   <string name="upload_problem_do_you_continue">Θέλετε ακόμα να ανεβάσετε αυτήν την φωτογραφία;</string> | ||||||
|   <string name="upload_connection_error_alert_title">Σφάλμα Σύνδεσης</string> |   <string name="upload_connection_error_alert_title">Σφάλμα σύνδεσης</string> | ||||||
|   <string name="upload_connection_error_alert_detail">Η διαδικασία μεταφόρτωσης απαιτεί ενεργή πρόσβαση στο Διαδίκτυο. Ελέγξτε τη σύνδεσή σας στο δίκτυο.</string> |   <string name="upload_connection_error_alert_detail">Η διαδικασία μεταφόρτωσης απαιτεί ενεργή πρόσβαση στο Διαδίκτυο. Ελέγξτε τη σύνδεσή σας στο δίκτυο.</string> | ||||||
|   <string name="upload_problem_image">Βρέθηκαν προβλήματα στην εικόνα</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">Αποθηκεύστε φωτογραφίες εντός εφαρμογής</string> | ||||||
|   <string name="use_external_storage_summary">Αποθηκεύστε φωτογραφίες που τραβήξατε με την κάμερα εντός εφαρμογής στο χώρο αποθήκευσης της συσκευής σας</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">Αποστολή αρχείου καταγραφής</string> | ||||||
|   <string name="send_log_file_description">Στείλτε το αρχείο καταγραφής στους προγραμματιστές μέσω email για να βοηθήσετε τη διόρθωση σφαλμάτων της εφαρμογής. Σημείωση: οι καταγραφές ενδέχεται να περιλαμβάνουν αναγνωριστικές πληροφορίες</string> |   <string name="send_log_file_description">Στείλτε το αρχείο καταγραφής στους προγραμματιστές μέσω email για να βοηθήσετε τη διόρθωση σφαλμάτων της εφαρμογής. Σημείωση: οι καταγραφές ενδέχεται να περιλαμβάνουν πληροφορίες ταυτοποίησης</string> | ||||||
|   <string name="no_web_browser">Δεν βρέθηκε φυλλομετρητής για το άνοιγμα της διευθύνσεως URL</string> |   <string name="no_web_browser">Δε βρέθηκε πρόγραμμα περιήγησης ιστού για το άνοιγμα της διεύθυνσης URL</string> | ||||||
|   <string name="null_url">Σφάλμα! Η διεύθυνση URL δεν βρέθηκε</string> |   <string name="null_url">Σφάλμα! Η διεύθυνση URL δε βρέθηκε</string> | ||||||
|   <string name="nominate_deletion">Προτείνετε για διαγραφή</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="nominated_see_more">Δείτε την ιστοσελίδα για λεπτομέρειες</string> | ||||||
|   <string name="skip_login">Παράβλεψη</string> |   <string name="skip_login">Παράβλεψη</string> | ||||||
|   <string name="navigation_item_login">Είσοδος</string> |   <string name="navigation_item_login">Είσοδος</string> | ||||||
|   <string name="skip_login_title">Θέλετε πραγματικά να παραβλέψετε τη σύνδεση;</string> |   <string name="skip_login_title">Θέλετε πραγματικά να παραβλέψετε τη σύνδεση;</string> | ||||||
|   <string name="skip_login_message" fuzzy="true">Θα χρειάζεται να συνδεθείτε για να ανεβάζετε εικόνες στο μέλλον.</string> |   <string name="skip_login_message">Θα χρειαστεί να συνδεθείτε για να μεταφορτώσετε φωτογραφίες στο μέλλον.</string> | ||||||
|   <string name="login_alert_message">Παρακαλούμε συνδεθείτε για να χρησιμοποιήσετε αυτό το χαρακτηριστικό</string> |   <string name="login_alert_message">Παρακαλούμε να συνδεθείτε για να χρησιμοποιήσετε αυτή τη λειτουργία</string> | ||||||
|   <string name="copy_wikicode">Αντιγράψτε το wikitext στο πρόχειρο</string> |   <string name="copy_wikicode">Αντιγράψτε το wikitext στο πρόχειρο</string> | ||||||
|   <string name="wikicode_copied">Το 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="upload_location_access_denied">Δεν επιτρέπεται η πρόσβαση στην τοποθεσία. Ρυθμίστε την τοποθεσία σας με χειροκίνητο τρόπο για να χρησιμοποιήσετε αυτήν τη δυνατότητα.</string> | ||||||
|   <string name="location_permission_rationale_nearby">Απαιτείται άδεια για την εμφάνιση λίστας κοντινών σημείων</string> |   <string name="location_permission_rationale_nearby">Απαιτείται άδεια για την εμφάνιση καταλόγου κοντινών σημείων</string> | ||||||
|   <string name="location_permission_rationale_explore">Απαιτείται άδεια για την εμφάνιση λίστας κοντινών εικόνων</string> |   <string name="location_permission_rationale_explore">Απαιτείται άδεια για την εμφάνιση καταλόγου κοντινών εικόνων</string> | ||||||
|   <string name="nearby_directions">Κατευθύνσεις</string> |   <string name="nearby_directions">Οδηγίες</string> | ||||||
|   <string name="nearby_wikidata">Δεδομένα wiki</string> |   <string name="nearby_wikidata">Wikidata</string> | ||||||
|   <string name="nearby_wikipedia">Βικιπαίδεια</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_rate_us">Βαθμολογήστε μας</string> | ||||||
|   <string name="about_faq">Συχνές ερωτήσεις</string> |   <string name="about_faq">Συχνές ερωτήσεις</string> | ||||||
|   <string name="user_guide">Οδηγός χρήστη</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="no_internet">Το διαδίκτυο δεν είναι διαθέσιμο</string> | ||||||
|   <string name="error_notifications">Σφάλμα κατά την συγκέντρωση ειδοποιήσεων</string> |   <string name="error_notifications">Σφάλμα κατά την ανάκτηση ειδοποιήσεων</string> | ||||||
|   <string name="error_review">Σφάλμα κατά την ανάκτηση της εικόνας για έλεγχο. Πατήστε το refresh για να προσπαθήσετε ξανά.</string> |   <string name="error_review">Σφάλμα κατά την ανάκτηση της εικόνας για έλεγχο. Ανανεώστε για να προσπαθήσετε ξανά.</string> | ||||||
|   <string name="no_notifications">Δεν βρέθηκαν ειδοποιήσεις</string> |   <string name="no_notifications">Δε βρέθηκαν ειδοποιήσεις</string> | ||||||
|   <string name="about_translate">Μετάφραση</string> |   <string name="about_translate">Μετάφραση</string> | ||||||
|   <string name="about_translate_title">Γλώσσες</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_proceed">Συνέχεια</string> | ||||||
|   <string name="about_translate_cancel">Ακύρωση</string> |   <string name="about_translate_cancel">Ακύρωση</string> | ||||||
|   <string name="retry">Ξαναπροσπαθήστε</string> |   <string name="retry">Επανάληψη</string> | ||||||
|   <string name="showcase_view_whole_nearby_activity">Αυτά είναι τα μέρη κοντά σας που χρειάζονται φωτογραφίες για να εικονογραφηθούν τα λήμματά τους στη Βικιπαίδεια.\n\nΚάνοντας κλικ στην \"ΑΝΑΖΗΤΗΣΗ ΣΕ ΑΥΤΉ ΤΗΝ ΠΕΡΙΟΧΗ\" κλειδώνει ο χάρτης και ξεκινά μια κοντινή αναζήτηση γύρω από αυτή την τοποθεσία.</string> |   <string name="showcase_view_whole_nearby_activity">Αυτά είναι τα μέρη κοντά σας που χρειάζονται φωτογραφίες για να εικονογραφηθούν τα λήμματά τους στη Βικιπαίδεια.\n\nΚάνοντας κλικ στην «ΑΝΑΖΗΤΗΣΗ ΣΕ ΑΥΤΗ ΤΗΝ ΠΕΡΙΟΧΗ» κλειδώνει ο χάρτης και ξεκινά μια κοντινή αναζήτηση γύρω από αυτή την τοποθεσία.</string> | ||||||
|   <string name="showcase_view_needs_photo">Αυτή η τοποθεσία χρειάζεται φωτογραφία.</string> |   <string name="showcase_view_needs_photo">Αυτό το μέρος χρειάζεται μια φωτογραφία.</string> | ||||||
|   <string name="showcase_view_has_photo">Αυτή η τοποθεσία έχει ήδη φωτογραφία.</string> |   <string name="showcase_view_has_photo">Αυτό το μέρος έχει ήδη μια φωτογραφία.</string> | ||||||
|   <string name="showcase_view_no_longer_exists">Η τοποθεσία δεν υπάρχει πλέον.</string> |   <string name="showcase_view_no_longer_exists">Αυτό το μέρος δεν υπάρχει πλέον.</string> | ||||||
|   <string name="no_images_found">Δεν βρέθηκαν εικόνες!</string> |   <string name="no_images_found">Δε βρέθηκαν εικόνες!</string> | ||||||
|   <string name="error_loading_images">Συνέβη σφάλμα κατά το ανέβασμα των εικόνων.</string> |   <string name="error_loading_images">Παρουσιάστηκε σφάλμα κατά τη φόρτωση των εικόνων.</string> | ||||||
|   <string name="image_uploaded_by">Ανέβηκε από: %1$s</string> |   <string name="image_uploaded_by">Μεταφορτώθηκε από: %1$s</string> | ||||||
|   <string name="block_notification_title">Αποκλεισμένος</string> |   <string name="block_notification_title">Αποκλεισμένος</string> | ||||||
|   <string name="block_notification">Είστε αποκλεισμένοι από την επεξεργασία των Κοινών</string> |   <string name="block_notification">Έχετε αποκλειστεί από την επεξεργασία στα Commons</string> | ||||||
|   <string name="app_widget_heading">Φωτογραφία της Ημέρας</string> |   <string name="app_widget_heading">Φωτογραφία της ημέρας</string> | ||||||
|   <string name="menu_search_button">Αναζήτηση</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="title_activity_search">Αναζήτηση</string> | ||||||
|   <string name="search_recent_header">Πρόσφατες αναζητήσεις:</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="provider_recent_languages">Πρόσφατα ερωτήματα γλώσσας</string> | ||||||
|   <string name="error_loading_categories">Συνέβη σφάλμα κατά τη φόρτωση κατηγοριών.</string> |   <string name="error_loading_categories">Παρουσιάστηκε σφάλμα κατά τη φόρτωση κατηγοριών.</string> | ||||||
|   <string name="error_loading_depictions">Παρουσιάστηκε σφάλμα κατά τη φόρτωση των απεικονίσεων.</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_categories">Κατηγορίες</string> | ||||||
|   <string name="search_tab_title_depictions">Αντικείμενα</string> |   <string name="search_tab_title_depictions">Αντικείμενα</string> | ||||||
|   <string name="explore_tab_title_featured">Χαρακτηριστικά</string> |   <string name="explore_tab_title_featured">Χαρακτηριστικά</string> | ||||||
|   <string name="explore_tab_title_mobile">Μεταφορτώθηκε μέσω κινητού</string> |   <string name="explore_tab_title_mobile">Μεταφορτώθηκε μέσω κινητού</string> | ||||||
|   <string name="explore_tab_title_map">Χάρτης</string> |   <string name="explore_tab_title_map">Χάρτης</string> | ||||||
|   <string name="successful_wikidata_edit">Η εικόνα προστέθηκε επιτυχώς στο %1$s στο Wikidata!</string> |   <string name="successful_wikidata_edit">Η εικόνα προστέθηκε επιτυχώς στο %1$s στα Wikidata!</string> | ||||||
|   <string name="wikidata_edit_failure">Αποτυχία ενημέρωσης της αντιστοιχούσας οντότητας του Wikidata!</string> |   <string name="wikidata_edit_failure">Αποτυχία ενημέρωσης της αντιστοιχούσας οντότητας των Wikidata!</string> | ||||||
|   <string name="menu_set_wallpaper">Ρύθμιση ως ταπετσαρία</string> |   <string name="menu_set_wallpaper">Ορισμός ως ταπετσαρία</string> | ||||||
|   <string name="wallpaper_set_successfully">Η ταπετσαρία ρυθμίστηκε επιτυχώς!</string> |   <string name="wallpaper_set_successfully">Η ταπετσαρία ρυθμίστηκε επιτυχώς!</string> | ||||||
|   <string name="quiz">Κουίζ</string> |   <string name="quiz">Κουίζ</string> | ||||||
|   <string name="quiz_question_string">Αυτή η φωτογραφία είναι εντάξει για ανέβασμα;</string> |   <string name="quiz_question_string">Είναι εντάξει αυτή η εικόνα για μεταφόρτωση;</string> | ||||||
|   <string name="question">Ερώτηση</string> |   <string name="question">Ερώτηση</string> | ||||||
|   <string name="result">Αποτέλεσμα</string> |   <string name="result">Αποτέλεσμα</string> | ||||||
|   <string name="quiz_back_button">Εάν συνεχίζετε να ανεβάζετε εικόνες που απαιτούν διαγραφή, ο λογαριασμός σας πιθανώς θα φραγεί. Είστε σίγουρος ότι θέλετε να τελειώστε το κουίζ;</string> |   <string name="quiz_back_button">Εάν συνεχίσετε να ανεβάζετε εικόνες που απαιτούν διαγραφή, ο λογαριασμός σας πιθανότατα θα αποκλειστεί. Είστε βέβαιοι ότι θέλετε να τερματίσετε το κουίζ;</string> | ||||||
|   <string name="quiz_alert_message">Πάνω από το %1$s των εικόνων που ανεβάσατε έχουν διαγραφεί. Εάν συνεχίσετε να ανεβάζετε εικόνες που απαιτούν διαγραφή, ο λογαριασμός σας πιθανώς θα φραγεί. \n\nΘα θέλατε να ξαναδείτε τον οδηγό νέων χρηστών ξανά και να κάνετε ένα κουίζ για να σας βοηθήσει να μάθετε ποιοι τύποι εικόνων πρέπει ή δεν πρέπει να ανεβάζετε;</string> |   <string name="quiz_alert_message">Περισσότερες από %1$s από τις εικόνες που ανεβάσατε έχουν διαγραφεί. Εάν συνεχίσετε να ανεβάζετε εικόνες που απαιτούν διαγραφή, ο λογαριασμός σας πιθανότατα θα αποκλειστεί.\n\nΘα θέλατε να δείτε ξανά το σεμινάριο και μετά να κάνετε ένα κουίζ για να σας βοηθήσει να μάθετε τι είδους εικόνες πρέπει ή όχι να ανεβάσετε;</string> | ||||||
|   <string name="selfie_answer">Οι σέλφι δεν έχουν πολύ εγκυκλοπαιδική αξία. Παρακαλώ μην ανεβάζετε φωτογραφία του εαυτού σας εκτός εάν έχετε ένα λήμμα στη Βικιπαίδεια για εσάς.</string> |   <string name="selfie_answer">Οι σέλφι δεν έχουν μεγάλη εγκυκλοπαιδική αξία. Παρακαλούμε μην ανεβάζετε φωτογραφία του εαυτού σας εκτός εάν έχετε ένα λήμμα στη Βικιπαίδεια για εσάς.</string> | ||||||
|   <string name="taj_mahal_answer">Οι φωτογραφίες μνημείων και εξωτερικού σκηνικού είναι εντάξει για ανέβασμα στις περισσότερες χώρες. Παρακαλώ σημειώστε ότι οι προσωρινές εγκαταστάσεις τέχνες καλύπτονται συχνά από πνευματικά δικαιώματα και δεν είναι εντάξει για ανέβασμα.</string> |   <string name="taj_mahal_answer">Οι φωτογραφίες μνημείων και εξωτερικών τοπίων είναι εντάξει για μεταφόρτωση στις περισσότερες χώρες. Λάβετε υπόψη ότι οι προσωρινές εξωτερικές εγκαταστάσεις τέχνης συχνά προστατεύονται από πνευματικά δικαιώματα και δεν επιτρέπεται η μεταφόρτωση.</string> | ||||||
|   <string name="screenshot_answer">Τα στιγμιότυπα ιστοσελίδων θεωρούνται παράγωγα έργα και υποκείμενα σε οποιαδήποτε πνευματικά δικαιώματα στην ίδια την ιστοσελίδα. Αυτές μπορούν να χρησιμοποιηθούν μετά από άδεια από τον συγγραφέα. Χωρίς τέτοια άδεια, οποιαδήποτε τέχνη που δημιουργείτε βασισμένη στο έργο τους θεωρείται νομικά ως μη αδειοδοτημένο έργο κατεχόμενο από τον αρχικό συγγραφέα.</string> |   <string name="screenshot_answer">Τα στιγμιότυπα οθόνης των ιστότοπων θεωρούνται παράγωγα έργα και υπόκεινται σε τυχόν πνευματικά δικαιώματα στον ίδιο τον ιστότοπο. Αυτά μπορούν να χρησιμοποιηθούν μετά από άδεια του δημιουργού. Χωρίς αυτή την άδεια, κάθε έργο τέχνης που δημιουργείτε με βάση το έργο τους θεωρείται νομικά ως αντίγραφο χωρίς άδεια που ανήκει στον αρχικό δημιουργό.</string> | ||||||
|   <string name="blurry_image_answer">Ένας από τους στόχους των Κοινών είναι να συγκεντρώσει ποιοτικές εικόνες. Γι\'αυτό, οι θολές εικόνες δεν θα πρέπει να ανεβάζονται. Πάντα προσπαθήστε να τραβάτε ωραίες φωτογραφίες με καλό φωτισμό.</string> |   <string name="blurry_image_answer">Ένας από τους στόχους των Commons είναι να συγκεντρώσει ποιοτικές εικόνες. Γι\' αυτό, οι θολές εικόνες δε θα πρέπει να μεταφορτώνονται. Πάντα προσπαθήστε να τραβάτε περιποιημένες φωτογραφίες με καλό φωτισμό.</string> | ||||||
|   <string name="construction_event_answer">Οι φωτογραφίες που εμφανίζουν τεχνολογία ή πολιτισμό είναι πολύ ευσπρόδεκτες στα Κοινά.</string> |   <string name="construction_event_answer">Οι φωτογραφίες που εμφανίζουν τεχνολογία ή πολιτισμό είναι πολύ ευσπρόδεκτες στα Commons.</string> | ||||||
|   <string name="congratulatory_message_quiz">Είχατε το %1$s των απαντήσεων σωστό. Συγχαρητήρια!</string> |   <string name="congratulatory_message_quiz">Είχατε το %1$s των απαντήσεων σωστό. Συγχαρητήρια!</string> | ||||||
|   <string name="warning_for_no_answer">Επιλέξτε μια από τις δύο επιλογές για να απαντήσετε στην ερώτηση</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="quiz_result_share_message">Μοιραστείτε το κουίζ με τους φίλους σας!</string> | ||||||
|   <string name="continue_message">Συνέχεια</string> |   <string name="continue_message">Συνέχεια</string> | ||||||
|   <string name="correct">Σωστή απάντηση</string> |   <string name="correct">Σωστή απάντηση</string> | ||||||
|   <string name="wrong">Λάθος απάντηση</string> |   <string name="wrong">Λανθασμένη απάντηση</string> | ||||||
|   <string name="quiz_screenshot_question">Αυτό το στιγμιότυπο είναι εντάξει για ανέβασμα;</string> |   <string name="quiz_screenshot_question">Είναι εντάξει αυτό το στιγμιότυπο οθόνης για μεταφόρτωση;</string> | ||||||
|   <string name="share_app_title">Κοινοποίηση εφαρμογής</string> |   <string name="share_app_title">Κοινοποίηση εφαρμογής</string> | ||||||
|   <string name="rotate">Γυρίστε</string> |   <string name="rotate">Περιστροφή</string> | ||||||
|   <string name="error_fetching_nearby_places">Σφάλμα κατά την εύρεση κοντινών μερών.</string> |   <string name="error_fetching_nearby_places">Σφάλμα κατά την εύρεση κοντινών μερών.</string> | ||||||
|   <string name="no_pictures_in_this_area">Δεν υπάρχουν φωτογραφίες σε αυτήν την περιοχή</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="error_fetching_nearby_monuments">Σφάλμα κατά την εύρεση κοντινών μνημείων.</string> | ||||||
|   <string name="no_recent_searches">Καμία πρόσφατη αναζήτηση</string> |   <string name="no_recent_searches">Καμία πρόσφατη αναζήτηση</string> | ||||||
|   <string name="delete_recent_searches_dialog">Είστε σίγουρος ότι θέλετε να καθαρίσετε το ιστορικό αναζήτησης;</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="delete_search_dialog">Θέλετε να διαγράψετε αυτήν την αναζήτηση;</string> | ||||||
|   <string name="search_history_deleted">Το ιστορικό αναζήτησης διεγράφη</string> |   <string name="search_history_deleted">Το ιστορικό αναζήτησης διεγράφη</string> | ||||||
|   <string name="nominate_delete">Ορίστε για Αφαίρεση</string> |   <string name="nominate_delete">Πρόταση για διαγραφή</string> | ||||||
|   <string name="delete">Διαγραφή</string> |   <string name="delete">Διαγραφή</string> | ||||||
|   <string name="Achievements">Κατορθώματα</string> |   <string name="Achievements">Επιτεύγματα</string> | ||||||
|   <string name="Profile">Προφίλ</string> |   <string name="Profile">Προφίλ</string> | ||||||
|   <string name="statistics">Στατιστικά</string> |   <string name="statistics">Στατιστικά</string> | ||||||
|   <string name="statistics_thanks">Ευχαριστίες που έχουν ληφθεί</string> |   <string name="statistics_thanks">Ευχαριστίες που έχετε λάβει</string> | ||||||
|   <string name="statistics_featured">Προβεβλημμένες εικόνες</string> |   <string name="statistics_featured">Προβεβλημμένες εικόνες</string> | ||||||
|   <string name="statistics_wikidata_edits">Εικόνες μέσω \"Κοντινά μέρη\"</string> |   <string name="statistics_wikidata_edits">Εικόνες μέσω «Κοντινά μέρη»</string> | ||||||
|   <string name="level">Επίπεδο</string> |   <string name="level">Επίπεδο</string> | ||||||
|   <string name="images_uploaded">Εικόνες που ανέβηκαν</string> |   <string name="images_uploaded">Εικόνες που μεταφορτώθηκαν</string> | ||||||
|   <string name="image_reverts">Εικόνες που δεν ανεστράφησαν</string> |   <string name="image_reverts">Εικόνες που δεν ανεστράφησαν</string> | ||||||
|   <string name="images_used_by_wiki">Εικόνες που χρησιμοποιήθηκαν</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_info_message">Το επίπεδό σας αυξάνεται όσο πληρείτε αυτές στις απαιτήσεις. Τα αντικείμενα στο τμήμα \"Στατιστικά\" δεν μετρούν στο επίπεδό σας.</string> | ||||||
|   <string name="achievements_revert_limit_message">ελάχιστο που απαιτείται:</string> |   <string name="achievements_revert_limit_message">ελάχιστο που απαιτείται:</string> | ||||||
|   <string name="images_uploaded_explanation">Ο αριθμός εικόνων που ανεβάσατε στα Κοινά, μέσω οποιουδήποτε λογισμικού ανεβάσματος</string> |   <string name="images_uploaded_explanation">Ο αριθμός εικόνων που ανεβάσατε στα Κοινά, μέσω οποιουδήποτε λογισμικού ανεβάσματος</string> | ||||||
|  | @ -708,7 +709,7 @@ | ||||||
|   <string name="read_phone_state_permission_message">Οι κοντινοί χάρτες πρέπει να διαβάζουν PHONE STATE για να λειτουργούν σωστά</string> |   <string name="read_phone_state_permission_message">Οι κοντινοί χάρτες πρέπει να διαβάζουν PHONE STATE για να λειτουργούν σωστά</string> | ||||||
|   <string name="contributions_of_user">Συνεισφορές χρήστη: %s</string> |   <string name="contributions_of_user">Συνεισφορές χρήστη: %s</string> | ||||||
|   <string name="achievements_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_depictions">Επεξεργασία απεικονίσεων</string> | ||||||
|   <string name="edit_categories">Επεξεργασία κατηγοριών</string> |   <string name="edit_categories">Επεξεργασία κατηγοριών</string> | ||||||
|   <string name="advanced_options">Σύνθετες Επιλογές</string> |   <string name="advanced_options">Σύνθετες Επιλογές</string> | ||||||
|  | @ -788,4 +789,13 @@ | ||||||
|   </plurals> |   </plurals> | ||||||
|   <string name="multiple_files_depiction">Να θυμάστε ότι όλες οι εικόνες σε μια πολλαπλή μεταφόρτωση έχουν τις ίδιες κατηγορίες και απεικονίσεις. Εάν οι εικόνες δεν μοιράζονται απεικονίσεις και κατηγορίες, πραγματοποιήστε πολλές ξεχωριστές μεταφορτώσεις.</string> |   <string name="multiple_files_depiction">Να θυμάστε ότι όλες οι εικόνες σε μια πολλαπλή μεταφόρτωση έχουν τις ίδιες κατηγορίες και απεικονίσεις. Εάν οι εικόνες δεν μοιράζονται απεικονίσεις και κατηγορίες, πραγματοποιήστε πολλές ξεχωριστές μεταφορτώσεις.</string> | ||||||
|   <string name="multiple_files_depiction_header">Σημείωση για τις πολλαπλές μεταφορτώσεις</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: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Εφαρμογή για κινητά/Σχόλια</a></string> | ||||||
|  |   <string name="could_not_load_place_data">Δεν ήταν δυνατή η φόρτωση δεδομένων της θέσης</string> | ||||||
| </resources> | </resources> | ||||||
|  |  | ||||||
|  | @ -116,6 +116,7 @@ | ||||||
|   <string name="upload_failed">Nie znaleziono pliku. Spróbuj znaleźć inny.</string> |   <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="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="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="authentication_failed">Uwierzytelnianie nie powiodło się, zaloguj się ponownie, proszę.</string> | ||||||
|   <string name="uploading_started">Wysyłanie rozpoczęte!</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> |   <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="skip_login">Pomiń</string> | ||||||
|   <string name="navigation_item_login">Zaloguj się</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_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="login_alert_message">Zaloguj się, aby skorzystać z tej funkcji</string> | ||||||
|   <string name="copy_wikicode">Skopiuj wikitext do schowka</string> |   <string name="copy_wikicode">Skopiuj wikitext do schowka</string> | ||||||
|   <string name="wikicode_copied">Wikitext został skopiowany 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="ends_on">Kończy się na:</string> | ||||||
|   <string name="display_campaigns">Wyświetl kampanie</string> |   <string name="display_campaigns">Wyświetl kampanie</string> | ||||||
|   <string name="display_campaigns_explanation">Zobacz trwające 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_allow">Zezwól</string> | ||||||
|   <string name="option_dismiss">Odrzuć</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> |   <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="unable_to_share_upload_item">Nie można udostępnić tego elementu</string> | ||||||
|   <string name="edit_image">Edytuj obraz</string> |   <string name="edit_image">Edytuj obraz</string> | ||||||
|   <string name="edit_location">Edytuj lokalizację</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="send_thanks_to_author">Dziękuję autorowi</string> | ||||||
|   <string name="error_sending_thanks">Błąd wysyłania podziękowań do autora.</string> |   <string name="error_sending_thanks">Błąd wysyłania podziękowań do autora.</string> | ||||||
|   <string name="file_saved_successfully">Pomyślnie zapisano</string> |   <string name="file_saved_successfully">Pomyślnie zapisano</string> | ||||||
|  |  | ||||||
|  | @ -77,7 +77,7 @@ class WikiBaseClientUnitTest { | ||||||
|             "M123", "test", "en", "caption" |             "M123", "test", "en", "caption" | ||||||
|         )).thenReturn(Observable.just(mwPostResponse)) |         )).thenReturn(Observable.just(mwPostResponse)) | ||||||
| 
 | 
 | ||||||
|         val result = wikiBaseClient.addLabelstoWikidata(123L, "en", "caption").blockingFirst() |         val result = wikiBaseClient.addLabelsToWikidata(123L, "en", "caption").blockingFirst() | ||||||
| 
 | 
 | ||||||
|         assertSame(mwPostResponse, result) |         assertSame(mwPostResponse, result) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -8,6 +8,7 @@ import com.nhaarman.mockitokotlin2.whenever | ||||||
| import fr.free.nrw.commons.kvstore.JsonKvStore | import fr.free.nrw.commons.kvstore.JsonKvStore | ||||||
| import fr.free.nrw.commons.upload.UploadResult | import fr.free.nrw.commons.upload.UploadResult | ||||||
| import fr.free.nrw.commons.upload.WikidataPlace | import fr.free.nrw.commons.upload.WikidataPlace | ||||||
|  | import fr.free.nrw.commons.wikidata.model.RemoveClaim | ||||||
| import io.reactivex.Observable | import io.reactivex.Observable | ||||||
| import org.junit.Before | import org.junit.Before | ||||||
| import org.junit.Test | import org.junit.Test | ||||||
|  | @ -18,7 +19,6 @@ import org.mockito.Mock | ||||||
| import org.mockito.Mockito | import org.mockito.Mockito | ||||||
| import org.mockito.Mockito.verifyNoInteractions | import org.mockito.Mockito.verifyNoInteractions | ||||||
| import org.mockito.MockitoAnnotations | import org.mockito.MockitoAnnotations | ||||||
| import fr.free.nrw.commons.wikidata.model.EditClaim |  | ||||||
| 
 | 
 | ||||||
| class WikidataEditServiceTest { | class WikidataEditServiceTest { | ||||||
|     @Mock |     @Mock | ||||||
|  | @ -53,9 +53,16 @@ class WikidataEditServiceTest { | ||||||
| 
 | 
 | ||||||
|     @Test |     @Test | ||||||
|     fun testUpdateDepictsProperty() { |     fun testUpdateDepictsProperty() { | ||||||
|         whenever(wikibaseClient.postEditEntityByFilename("Test.jpg", |         val fileEntityId = "12345" | ||||||
|             gson.toJson(Mockito.mock(EditClaim::class.java)))).thenReturn(Observable.just(true)) | 
 | ||||||
|         wikidataEditService.updateDepictsProperty("Test.jpg", listOf()) |         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 |     @Test | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Rohit Verma
						Rohit Verma