Merge remote-tracking branch 'refs/remotes/commons-app/master'
|
|
@ -50,11 +50,6 @@ public class CommonsApplication extends DaggerApplication {
|
|||
@Inject @Named("application_preferences") SharedPreferences applicationPrefs;
|
||||
@Inject @Named("prefs") SharedPreferences otherPrefs;
|
||||
|
||||
public static final Object[] EVENT_UPLOAD_ATTEMPT = {"MobileAppUploadAttempts", 5334329L};
|
||||
public static final Object[] EVENT_LOGIN_ATTEMPT = {"MobileAppLoginAttempts", 5257721L};
|
||||
public static final Object[] EVENT_SHARE_ATTEMPT = {"MobileAppShareAttempts", 5346170L};
|
||||
public static final Object[] EVENT_CATEGORIZATION_ATTEMPT = {"MobileAppCategorizationAttempts", 5359208L};
|
||||
|
||||
public static final String DEFAULT_EDIT_SUMMARY = "Uploaded using Android Commons app";
|
||||
|
||||
public static final String FEEDBACK_EMAIL = "commons-app-android@googlegroups.com";
|
||||
|
|
|
|||
|
|
@ -8,6 +8,16 @@ public class License {
|
|||
private String url;
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* Constructs a new instance of License.
|
||||
*
|
||||
* @param key license key
|
||||
* @param template license template
|
||||
* @param url license URL
|
||||
* @param name licence name
|
||||
*
|
||||
* @throws RuntimeException if License.key or Licence.template is null
|
||||
*/
|
||||
public License(String key, String template, String url, String name) {
|
||||
if (key == null) {
|
||||
throw new RuntimeException("License.key must not be null");
|
||||
|
|
@ -21,10 +31,18 @@ public class License {
|
|||
this.name = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the license key.
|
||||
* @return license key as a String.
|
||||
*/
|
||||
public String getKey() {
|
||||
return key;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the license template.
|
||||
* @return license template as a String.
|
||||
*/
|
||||
public String getTemplate() {
|
||||
return template;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -128,89 +128,177 @@ public class Media implements Parcelable {
|
|||
return imageUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the name of the file.
|
||||
* @return file name as a string
|
||||
*/
|
||||
public String getFilename() {
|
||||
return filename;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the name of the file.
|
||||
* @param filename the new name of the file
|
||||
*/
|
||||
public void setFilename(String filename) {
|
||||
this.filename = filename;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the file description.
|
||||
* @return file description as a string
|
||||
*/
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the file description.
|
||||
* @param description the new description of the file
|
||||
*/
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the datalength of the file.
|
||||
* @return file datalength as a long
|
||||
*/
|
||||
public long getDataLength() {
|
||||
return dataLength;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the datalength of the file.
|
||||
* @param dataLength as a long
|
||||
*/
|
||||
public void setDataLength(long dataLength) {
|
||||
this.dataLength = dataLength;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the creation date of the file.
|
||||
* @return creation date as a Date
|
||||
*/
|
||||
public Date getDateCreated() {
|
||||
return dateCreated;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the creation date of the file.
|
||||
* @param date creation date as a Date
|
||||
*/
|
||||
public void setDateCreated(Date date) {
|
||||
this.dateCreated = date;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the upload date of the file.
|
||||
* Can be null.
|
||||
* @return upload date as a Date
|
||||
*/
|
||||
public @Nullable
|
||||
Date getDateUploaded() {
|
||||
return dateUploaded;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the name of the creator of the file.
|
||||
* @return creator name as a String
|
||||
*/
|
||||
public String getCreator() {
|
||||
return creator;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the creator name of the file.
|
||||
* @param creator creator name as a string
|
||||
*/
|
||||
public void setCreator(String creator) {
|
||||
this.creator = creator;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the width of the media.
|
||||
* @return file width as an int
|
||||
*/
|
||||
public int getWidth() {
|
||||
return width;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the width of the media.
|
||||
* @param width file width as an int
|
||||
*/
|
||||
public void setWidth(int width) {
|
||||
this.width = width;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the height of the media.
|
||||
* @return file height as an int
|
||||
*/
|
||||
public int getHeight() {
|
||||
return height;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the height of the media.
|
||||
* @param height file height as an int
|
||||
*/
|
||||
public void setHeight(int height) {
|
||||
this.height = height;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the license name of the file.
|
||||
* @return license as a String
|
||||
*/
|
||||
public String getLicense() {
|
||||
return license;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the license name of the file.
|
||||
* @param license license name as a String
|
||||
*/
|
||||
public void setLicense(String license) {
|
||||
this.license = license;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the coordinates of where the file was created.
|
||||
* @return file coordinates as a LatLng
|
||||
*/
|
||||
public @Nullable
|
||||
LatLng getCoordinates() {
|
||||
return coordinates;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the coordinates of where the file was created.
|
||||
* @param coordinates file coordinates as a LatLng
|
||||
*/
|
||||
public void setCoordinates(@Nullable LatLng coordinates) {
|
||||
this.coordinates = coordinates;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the categories the file falls under.
|
||||
* @return file categories as an ArrayList of Strings
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public ArrayList<String> getCategories() {
|
||||
return (ArrayList<String>) categories.clone(); // feels dirty
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the categories the file falls under.
|
||||
* </p>
|
||||
* Does not append: i.e. will clear the current categories
|
||||
* and then add the specified ones.
|
||||
* @param categories file categories as a list of Strings
|
||||
*/
|
||||
public void setCategories(List<String> categories) {
|
||||
this.categories.clear();
|
||||
this.categories.addAll(categories);
|
||||
|
|
|
|||
|
|
@ -84,6 +84,12 @@ public class PageTitle {
|
|||
return titleKey;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the canonicalized title for displaying (such as "File:My example.jpg").
|
||||
* </p>
|
||||
* Essentially equivalent to getPrefixedText
|
||||
* @return canonical title as a String
|
||||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
return getPrefixedText();
|
||||
|
|
|
|||
|
|
@ -51,6 +51,12 @@ public class Utils {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Capitalizes the first character of a string.
|
||||
*
|
||||
* @param string
|
||||
* @return string with capitalized first character
|
||||
*/
|
||||
public static String capitalize(String string) {
|
||||
return string.substring(0, 1).toUpperCase(Locale.getDefault()) + string.substring(1);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,9 +8,7 @@ import android.os.Bundle;
|
|||
|
||||
import java.io.IOException;
|
||||
|
||||
import fr.free.nrw.commons.CommonsApplication;
|
||||
import fr.free.nrw.commons.R;
|
||||
import fr.free.nrw.commons.mwapi.EventLog;
|
||||
import fr.free.nrw.commons.mwapi.MediaWikiApi;
|
||||
import timber.log.Timber;
|
||||
|
||||
|
|
@ -27,7 +25,6 @@ class LoginTask extends AsyncTask<String, String, String> {
|
|||
private String twoFactorCode = "";
|
||||
private AccountUtil accountUtil;
|
||||
private MediaWikiApi mwApi;
|
||||
private SharedPreferences prefs;
|
||||
|
||||
public LoginTask(LoginActivity loginActivity, String username, String password,
|
||||
String twoFactorCode, AccountUtil accountUtil,
|
||||
|
|
@ -38,7 +35,6 @@ class LoginTask extends AsyncTask<String, String, String> {
|
|||
this.twoFactorCode = twoFactorCode;
|
||||
this.accountUtil = accountUtil;
|
||||
this.mwApi = mwApi;
|
||||
this.prefs = prefs;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -71,11 +67,6 @@ class LoginTask extends AsyncTask<String, String, String> {
|
|||
super.onPostExecute(result);
|
||||
Timber.d("Login done!");
|
||||
|
||||
EventLog.schema(CommonsApplication.EVENT_LOGIN_ATTEMPT, mwApi, prefs)
|
||||
.param("username", username)
|
||||
.param("result", result)
|
||||
.log();
|
||||
|
||||
if (result.equals("PASS")) {
|
||||
handlePassResult();
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -29,20 +29,17 @@ import javax.inject.Inject;
|
|||
import javax.inject.Named;
|
||||
|
||||
import dagger.android.support.DaggerFragment;
|
||||
import fr.free.nrw.commons.CommonsApplication;
|
||||
import fr.free.nrw.commons.Media;
|
||||
import fr.free.nrw.commons.R;
|
||||
import fr.free.nrw.commons.auth.SessionManager;
|
||||
import fr.free.nrw.commons.contributions.Contribution;
|
||||
import fr.free.nrw.commons.contributions.ContributionsActivity;
|
||||
import fr.free.nrw.commons.mwapi.EventLog;
|
||||
import fr.free.nrw.commons.mwapi.MediaWikiApi;
|
||||
|
||||
import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
|
||||
import static android.content.Context.DOWNLOAD_SERVICE;
|
||||
import static android.content.Intent.ACTION_VIEW;
|
||||
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
|
||||
import static fr.free.nrw.commons.CommonsApplication.EVENT_SHARE_ATTEMPT;
|
||||
|
||||
public class MediaDetailPagerFragment extends DaggerFragment implements ViewPager.OnPageChangeListener {
|
||||
|
||||
|
|
@ -110,12 +107,7 @@ public class MediaDetailPagerFragment extends DaggerFragment implements ViewPage
|
|||
Media m = provider.getMediaAtPosition(pager.getCurrentItem());
|
||||
switch (item.getItemId()) {
|
||||
case R.id.menu_share_current_image:
|
||||
// Share - this is just logs it, intent set in onCreateOptionsMenu, around line 252
|
||||
CommonsApplication app = (CommonsApplication) getActivity().getApplication();
|
||||
EventLog.schema(EVENT_SHARE_ATTEMPT, mwApi, prefs)
|
||||
.param("username", sessionManager.getCurrentAccount().name)
|
||||
.param("filename", m.getFilename())
|
||||
.log();
|
||||
// Share - intent set in onCreateOptionsMenu, around line 252
|
||||
return true;
|
||||
case R.id.menu_browser_current_image:
|
||||
// View in browser
|
||||
|
|
|
|||
|
|
@ -29,7 +29,6 @@ import javax.inject.Inject;
|
|||
import javax.inject.Named;
|
||||
|
||||
import butterknife.ButterKnife;
|
||||
import fr.free.nrw.commons.CommonsApplication;
|
||||
import fr.free.nrw.commons.Media;
|
||||
import fr.free.nrw.commons.R;
|
||||
import fr.free.nrw.commons.auth.AuthenticatedActivity;
|
||||
|
|
@ -42,7 +41,6 @@ import fr.free.nrw.commons.modifications.CategoryModifier;
|
|||
import fr.free.nrw.commons.modifications.ModificationsContentProvider;
|
||||
import fr.free.nrw.commons.modifications.ModifierSequence;
|
||||
import fr.free.nrw.commons.modifications.TemplateRemoveModifier;
|
||||
import fr.free.nrw.commons.mwapi.EventLog;
|
||||
import fr.free.nrw.commons.mwapi.MediaWikiApi;
|
||||
import timber.log.Timber;
|
||||
|
||||
|
|
@ -181,13 +179,6 @@ public class MultipleShareActivity extends AuthenticatedActivity
|
|||
// FIXME: Make sure that the content provider is up
|
||||
// This is the wrong place for it, but bleh - better than not having it turned on by default for people who don't go throughl ogin
|
||||
ContentResolver.setSyncAutomatically(sessionManager.getCurrentAccount(), ModificationsContentProvider.AUTHORITY, true); // Enable sync by default!
|
||||
EventLog.schema(CommonsApplication.EVENT_CATEGORIZATION_ATTEMPT, mwApi, prefs)
|
||||
.param("username", sessionManager.getCurrentAccount().name)
|
||||
.param("categories-count", categories.size())
|
||||
.param("files-count", photosList.size())
|
||||
.param("source", Contribution.SOURCE_EXTERNAL)
|
||||
.param("result", "queued")
|
||||
.log();
|
||||
finish();
|
||||
}
|
||||
|
||||
|
|
@ -286,27 +277,6 @@ public class MultipleShareActivity extends AuthenticatedActivity
|
|||
finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
super.onBackPressed();
|
||||
if (categorizationFragment != null && categorizationFragment.isVisible()) {
|
||||
EventLog.schema(CommonsApplication.EVENT_CATEGORIZATION_ATTEMPT, mwApi, prefs)
|
||||
.param("username", sessionManager.getCurrentAccount().name)
|
||||
.param("categories-count", categorizationFragment.getCurrentSelectedCount())
|
||||
.param("files-count", photosList.size())
|
||||
.param("source", Contribution.SOURCE_EXTERNAL)
|
||||
.param("result", "cancelled")
|
||||
.log();
|
||||
} else {
|
||||
EventLog.schema(CommonsApplication.EVENT_UPLOAD_ATTEMPT, mwApi, prefs)
|
||||
.param("username", sessionManager.getCurrentAccount().name)
|
||||
.param("source", getIntent().getStringExtra(UploadService.EXTRA_SOURCE))
|
||||
.param("multiple", true)
|
||||
.param("result", "cancelled")
|
||||
.log();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackStackChanged() {
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(mediaDetails != null && mediaDetails.isVisible()) ;
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ import android.os.Build;
|
|||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import android.os.ParcelFileDescriptor;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.annotation.RequiresApi;
|
||||
|
|
@ -176,13 +175,6 @@ public class ShareActivity
|
|||
// This is the wrong place for it, but bleh - better than not having it turned on by default for people who don't go throughl ogin
|
||||
ContentResolver.setSyncAutomatically(sessionManager.getCurrentAccount(), ModificationsContentProvider.AUTHORITY, true); // Enable sync by default!
|
||||
|
||||
EventLog.schema(CommonsApplication.EVENT_CATEGORIZATION_ATTEMPT, mwApi, prefs)
|
||||
.param("username", sessionManager.getCurrentAccount().name)
|
||||
.param("categories-count", categories.size())
|
||||
.param("files-count", 1)
|
||||
.param("source", contribution.getSource())
|
||||
.param("result", "queued")
|
||||
.log();
|
||||
finish();
|
||||
}
|
||||
|
||||
|
|
@ -194,27 +186,6 @@ public class ShareActivity
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
super.onBackPressed();
|
||||
if (categorizationFragment != null && categorizationFragment.isVisible()) {
|
||||
EventLog.schema(CommonsApplication.EVENT_CATEGORIZATION_ATTEMPT, mwApi, prefs)
|
||||
.param("username", sessionManager.getCurrentAccount().name)
|
||||
.param("categories-count", categorizationFragment.getCurrentSelectedCount())
|
||||
.param("files-count", 1)
|
||||
.param("source", contribution.getSource())
|
||||
.param("result", "cancelled")
|
||||
.log();
|
||||
} else {
|
||||
EventLog.schema(CommonsApplication.EVENT_UPLOAD_ATTEMPT, mwApi, prefs)
|
||||
.param("username", sessionManager.getCurrentAccount().name)
|
||||
.param("source", getIntent().getStringExtra(UploadService.EXTRA_SOURCE))
|
||||
.param("multiple", true)
|
||||
.param("result", "cancelled")
|
||||
.log();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onAuthCookieAcquired(String authCookie) {
|
||||
mwApi.setAuthCookie(authCookie);
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@ import java.util.regex.Pattern;
|
|||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
import fr.free.nrw.commons.CommonsApplication;
|
||||
import fr.free.nrw.commons.HandlerService;
|
||||
import fr.free.nrw.commons.R;
|
||||
import fr.free.nrw.commons.Utils;
|
||||
|
|
@ -35,7 +34,6 @@ import fr.free.nrw.commons.contributions.Contribution;
|
|||
import fr.free.nrw.commons.contributions.ContributionsActivity;
|
||||
import fr.free.nrw.commons.contributions.ContributionsContentProvider;
|
||||
import fr.free.nrw.commons.modifications.ModificationsContentProvider;
|
||||
import fr.free.nrw.commons.mwapi.EventLog;
|
||||
import fr.free.nrw.commons.mwapi.MediaWikiApi;
|
||||
import fr.free.nrw.commons.mwapi.UploadResult;
|
||||
import timber.log.Timber;
|
||||
|
|
@ -258,27 +256,12 @@ public class UploadService extends HandlerService<Contribution> {
|
|||
String resultStatus = uploadResult.getResultStatus();
|
||||
if (!resultStatus.equals("Success")) {
|
||||
showFailedNotification(contribution);
|
||||
EventLog.schema(CommonsApplication.EVENT_UPLOAD_ATTEMPT, mwApi, prefs)
|
||||
.param("username", sessionManager.getCurrentAccount().name)
|
||||
.param("source", contribution.getSource())
|
||||
.param("multiple", contribution.getMultiple())
|
||||
.param("result", uploadResult.getErrorCode())
|
||||
.param("filename", contribution.getFilename())
|
||||
.log();
|
||||
} else {
|
||||
contribution.setFilename(uploadResult.getCanonicalFilename());
|
||||
contribution.setImageUrl(uploadResult.getImageUrl());
|
||||
contribution.setState(Contribution.STATE_COMPLETED);
|
||||
contribution.setDateUploaded(uploadResult.getDateUploaded());
|
||||
contribution.save();
|
||||
|
||||
EventLog.schema(CommonsApplication.EVENT_UPLOAD_ATTEMPT, mwApi, prefs)
|
||||
.param("username", sessionManager.getCurrentAccount().name)
|
||||
.param("source", contribution.getSource()) //FIXME
|
||||
.param("filename", contribution.getFilename())
|
||||
.param("multiple", contribution.getMultiple())
|
||||
.param("result", "success")
|
||||
.log();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Timber.d("I have a network fuckup");
|
||||
|
|
|
|||
|
|
@ -203,4 +203,5 @@
|
|||
<string name="login_to_your_account">Log ind på din konto</string>
|
||||
<string name="nearby_location_has_not_changed">Sted er ikke ændret.</string>
|
||||
<string name="nearby_location_not_available">Sted ikke tilgængeligt.</string>
|
||||
<string name="location_permission_rationale_nearby">Tilladelse kræves for at vise en liste over steder i nærheden</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -203,4 +203,5 @@
|
|||
<string name="login_to_your_account">Comezar sesión na súa conta</string>
|
||||
<string name="nearby_location_has_not_changed">A localización non cambiou.</string>
|
||||
<string name="nearby_location_not_available">A localización non está dispoñible.</string>
|
||||
<string name="location_permission_rationale_nearby">Precísase permiso para amosar unha lista de lugares preto de aquí</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name" fuzzy="true">विकिमीडिया कमन्स</string>
|
||||
<string name="app_name">कमन्स</string>
|
||||
<string name="menu_settings">सेटिङ्गहरू</string>
|
||||
<string name="username">प्रयोगकर्ता नाम</string>
|
||||
<string name="password">पासवर्ड</string>
|
||||
|
|
@ -43,7 +43,7 @@
|
|||
<string name="categories_search_text_hint">खोज श्रेणीहरू</string>
|
||||
<string name="menu_save_categories">संग्रह गर्ने</string>
|
||||
<string name="categories_not_found">मिल्दो वर्ग %1$s फेला परेन</string>
|
||||
<string name="categories_skip_explanation">विकिमीडिया कमन्समा आफ्नो तस्वीरहरू थप भेट्टाउने बनाउन वर्नहरू थप्नुहोस।\n\nवर्गहरू थप्नको लागि टाइप गर्न सुरु गर्नुहोस्।\nयो चरण छोड्न यो सन्देशमा ट्याप गर्नुहोस् (वा पछाडि जाने थिच्नुहोस्)।</string>
|
||||
<string name="categories_skip_explanation">विकिमिडिया कमन्समा आफ्नो तस्वीरहरू थप भेट्टाउने बनाउन श्रेणीहरू थप्नुहोस।\n\nश्रेणीहरू थप्नको लागि टाइप गर्न सुरु गर्नुहोस्।\nयो चरण छोड्न यो सन्देशमा ट्याप गर्नुहोस् (वा पछाडि जानेमा थिच्नुहोस्)।</string>
|
||||
<string name="categories_activity_title">श्रेणीहरू</string>
|
||||
<string name="title_activity_settings">सेटिङ्गहरू</string>
|
||||
<string name="menu_about">बारेमा</string>
|
||||
|
|
@ -76,8 +76,8 @@
|
|||
<string name="license_name_cc_by_sa_3_0_ro">CC BY-SA ३.० (रोमानिया)</string>
|
||||
<string name="license_name_cc_by_3_0">CC BY-SA ३.०</string>
|
||||
<string name="license_name_cc_zero">CC शुन्य</string>
|
||||
<string name="welcome_wikipedia_text">आफ्नो तस्वीरहरूको योगदान दिनुहोस्। विकिपीडिया लेखलाई जीवनमा आउन मद्दत गर्नुहोस्!</string>
|
||||
<string name="welcome_wikipedia_subtext">विकिपीडियाका तस्वीरहरू विकिमीडिया कमन्सबाट आउँछन्।</string>
|
||||
<string name="welcome_wikipedia_text">आफ्नो तस्वीरहरूको योगदान दिनुहोस्। विकिपिडियाका लेखलाई जीवनन्तता पाउन मद्दत गर्नुहोस्!</string>
|
||||
<string name="welcome_wikipedia_subtext">विकिपिडियाका तस्विरहरू विकिमिडिया कमन्सबाट आउँछन्।</string>
|
||||
<string name="welcome_copyright_text">तपाईंको तस्वीरहरूले संसारभरिका मानिसहरूलाई शिक्षित बनाउन मद्दत गर्छन्।</string>
|
||||
<string name="welcome_copyright_subtext">तपाईंले इन्टरनेटमा भेट्टाउनुभएका कपिराइट भएका सामग्रीहरू साथै पोस्टरहरू, पुस्तक आवरणहरू, आदिका तस्वीरहरू रोक्नुहोस्।</string>
|
||||
<string name="welcome_final_text">के तपाईंले कुरा बुझ्नु भए जस्तो लाग्छ ?</string>
|
||||
|
|
|
|||
|
|
@ -116,12 +116,12 @@
|
|||
<string name="license_name_cc_zero">CC Zero</string>
|
||||
<string name="tutorial_1_text">Wikimedia Commons armazena a maioria das imagens que são usadas na Wikipédia.</string>
|
||||
<string name="tutorial_1_subtext">As suas imagens ajudam a educar pessoas em todo o mundo!</string>
|
||||
<string name="tutorial_2_text">Por favor, carregue apenas as imagens tiradas ou criadas por ti:</string>
|
||||
<string name="tutorial_2_text">Por favor, carregue apenas imagens tiradas ou criadas exclusivamente por si:</string>
|
||||
<string name="tutorial_2_subtext">- Objetos naturais (flores, animais, montanhas)\n- Objetos úteis (bicicletas, estações de comboio)\n- Pessoas famosas (o seu presidente da câmara, atletas olímpicos que conheça)</string>
|
||||
<string name="tutorial_3_text">Por favor, NÃO carregue:</string>
|
||||
<string name="tutorial_3_subtext">- Autorretratos ou imagens dos seus amigos\n- Imagens descarregadas da internet\n- Capturas de ecrã de aplicações com direitos de autor</string>
|
||||
<string name="tutorial_3_subtext">- Autorretratos ou imagens dos seus amigos\n- Imagens descarregadas da Internet\n- Capturas de ecrã de aplicações com direitos de autor</string>
|
||||
<string name="tutorial_4_text">Exemplo de carregamento:</string>
|
||||
<string name="tutorial_4_subtext">- Título: Ópera de Sydney\n- Descrição: A Ópera de Sydney vista em toda a baía\n- Categorias: Sydney Opera House, Sydney Opera House from the west, Sydney Opera House remote views</string>
|
||||
<string name="tutorial_4_subtext">- Título: Ópera de Sydney\n- Descrição: A Ópera de Sydney vista do outro lado da baía\n- Categorias: Ópera de Sydney, Ópera de Sydney vista de ocidente, Vistas à distância da Ópera de Sydney</string>
|
||||
<string name="welcome_wikipedia_text">Contribua com as suas imagens. Ajude os artigos da Wikipédia a ganhar vida!</string>
|
||||
<string name="welcome_wikipedia_subtext">As imagens na Wikipédia provêm do Wikimedia Commons.</string>
|
||||
<string name="welcome_copyright_text">As suas imagens ajudam a educar as pessoas em todo o mundo.</string>
|
||||
|
|
@ -134,32 +134,32 @@
|
|||
<string name="detail_description_empty">Sem descrição</string>
|
||||
<string name="detail_license_empty">Licença desconhecida</string>
|
||||
<string name="menu_refresh">Actualizar</string>
|
||||
<string name="read_storage_permission_rationale">Permissão necessária: Ler a armazenagem externa. A aplicação não pode funcionar sem isso.</string>
|
||||
<string name="write_storage_permission_rationale">Permissão necessária: Escrever na armazenagem externa. A aplicação não pode funcionar sem isso.</string>
|
||||
<string name="location_permission_rationale">Permissão opcional: Obter a localização atual para sugerir categorias</string>
|
||||
<string name="read_storage_permission_rationale">Permissão necessária: Ler a armazenagem externa. A aplicação não pode funcionar sem isto.</string>
|
||||
<string name="write_storage_permission_rationale">Permissão necessária: Escrever na armazenagem externa. A aplicação não pode funcionar sem isto.</string>
|
||||
<string name="location_permission_rationale">Permissão opcional: Obter a localização atual para sugestões de categoria</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="title_activity_nearby">Locais Próximos</string>
|
||||
<string name="no_nearby">Não foram encontrados locais próximos.</string>
|
||||
<string name="warning">Aviso</string>
|
||||
<string name="file_exists">Este ficheiro já existe no Commons. Tem certeza de que deseja continuar?</string>
|
||||
<string name="file_exists">Este ficheiro já existe no Commons. Tem a certeza de que deseja continuar?</string>
|
||||
<string name="yes">Sim</string>
|
||||
<string name="no">Não</string>
|
||||
<string name="media_detail_title">Título</string>
|
||||
<string name="media_detail_media_title">Título do ficheiro multimédia</string>
|
||||
<string name="media_detail_description">Descrição</string>
|
||||
<string name="media_detail_description_explanation">Aqui vai a descrição do ficheiro multimédia. Potencialmente, pode ser demasiado longo, e precisará ser agrupado em várias linhas. Esperamos que seja agradável.</string>
|
||||
<string name="media_detail_description_explanation">A descrição do ficheiro multimédia é colocada aqui. Ela pode ser bastante longa e precisar de ser dividida em várias linhas. No entanto, esperamos que tenha bom aspeto.</string>
|
||||
<string name="media_detail_uploaded_date">Data de carregamento</string>
|
||||
<string name="media_detail_license">Licença</string>
|
||||
<string name="media_detail_coordinates">Coordenadas</string>
|
||||
<string name="media_detail_coordinates_empty">Não fornecido</string>
|
||||
<string name="become_a_tester_title">Torne-se um Testador Beta</string>
|
||||
<string name="become_a_tester_description">Entre no nosso canal beta na Google Play e obtenha acesso rápido a novas funcionalidades e correções de erros</string>
|
||||
<string name="become_a_tester_description">Opte pelo nosso canal beta no Google Play e obtenha acesso antecipado a novas funcionalidades e a correções de erros</string>
|
||||
<string name="use_wikidata">Utilizar o Wikidata</string>
|
||||
<string name="use_wikidata_summary">(Aviso: desabilitar isso pode causar um grande consumo de dados móveis)</string>
|
||||
<string name="use_wikidata_summary">(Aviso: desativar isto pode causar um grande consumo de dados móveis)</string>
|
||||
<string name="_2fa_code">Código de autenticação de dois fatores</string>
|
||||
<string name="number_of_uploads">Meu limite de carregamentos recentes</string>
|
||||
<string name="number_of_uploads">O meu limite de carregamentos recentes</string>
|
||||
<string name="maximum_limit">Limite máximo</string>
|
||||
<string name="maximum_limit_alert">Não é possível visualizar mais de 500.</string>
|
||||
<string name="maximum_limit_alert">Não é possível apresentar mais de 500</string>
|
||||
<string name="set_limit">Definir o limite de carregamentos recentes</string>
|
||||
<string name="login_failed_2fa_not_supported">Atualmente, a autenticação de dois fatores não é suportada.</string>
|
||||
<string name="logout_verification">Deseja realmente sair?</string>
|
||||
|
|
@ -188,19 +188,20 @@
|
|||
<string name="navigation_item_feedback">Comentários</string>
|
||||
<string name="navigation_item_logout">Sair</string>
|
||||
<string name="navigation_item_info">Tutorial</string>
|
||||
<string name="nearby_needs_permissions">Os sítios próximos não podem ser visualizados sem permissões de localização</string>
|
||||
<string name="no_description_found">descrição não encontrada</string>
|
||||
<string name="nearby_needs_permissions">Os sítios aqui perto não podem ser apresentados sem permissões de localização</string>
|
||||
<string name="no_description_found">não foi encontrada nenhuma descrição</string>
|
||||
<string name="nearby_info_menu_commons_article">Página do ficheiro no Commons</string>
|
||||
<string name="nearby_info_menu_wikidata_article">Item do Wikidata</string>
|
||||
<string name="error_while_cache">Erro durante a cache de imagens</string>
|
||||
<string name="error_while_cache">Erro ao colocar imagens na cache</string>
|
||||
<string name="title_info">Um título descritivo exclusivo para o ficheiro, que servirá como um nome de ficheiro. Pode utilizar uma linguagem simples com espaços. Não inclua a extensão do ficheiro</string>
|
||||
<string name="description_info">Por favor, descreva o ficheiro da melhor forma possível: Onde foi tirado? O que isso mostra? Qual é o contexto? Por favor, descreva os objetos ou as pessoas. Indique as informações que não podem ser facilmente adivinhadas, por exemplo, a hora do dia, se for uma paisagem. Se o ficheiro mostrar algo incomum, explique o que torna incomum.</string>
|
||||
<string name="give_permission">Permitir</string>
|
||||
<string name="use_external_storage">Utilizar a armazenagem externa</string>
|
||||
<string name="use_external_storage_summary">Gravar as fotografias tiradas com a câmara na aplicação do seu dispositivo</string>
|
||||
<string name="send_log_file">Carregar ficheiro de registo</string>
|
||||
<string name="send_log_file_description">Carregar ficheiro de registo para programadores por correio eletrónico</string>
|
||||
<string name="use_external_storage_summary">Gravar as fotografias tiradas com a câmara da aplicação no seu dispositivo</string>
|
||||
<string name="send_log_file">Enviar ficheiro de registo</string>
|
||||
<string name="send_log_file_description">Enviar o ficheiro de registo aos programadores por correio eletrónico</string>
|
||||
<string name="login_to_your_account">Inicie sessão na sua conta</string>
|
||||
<string name="nearby_location_has_not_changed">A localização não foi alterada.</string>
|
||||
<string name="nearby_location_not_available">A localização não está disponível.</string>
|
||||
<string name="location_permission_rationale_nearby">É necessária a permissão para mostrar uma lista dos sítios aqui perto</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@
|
|||
<string name="categories_search_text_hint">Пошук категорій</string>
|
||||
<string name="menu_save_categories">Зберегти</string>
|
||||
<string name="refresh_button">Оновити</string>
|
||||
<string name="gps_disabled">GPS вимкнено на Вашому пристрої. Чи хотіли б Ви його увімкнути?</string>
|
||||
<string name="gps_disabled">GPS вимкнено на Вашому пристрої. Бажаєте увімкнути його?</string>
|
||||
<string name="enable_gps">Увімкнути GPS</string>
|
||||
<string name="contributions_subtitle_zero">Ще нема завантажень</string>
|
||||
<plurals name="contributions_subtitle">
|
||||
|
|
@ -209,4 +209,5 @@
|
|||
<string name="send_log_file">Надіслати лог-файл</string>
|
||||
<string name="send_log_file_description">Надіслати лог-файл розробникам електронною поштою</string>
|
||||
<string name="login_to_your_account">Увійдіть у свій обліковий запис</string>
|
||||
<string name="nearby_location_has_not_changed">Розташування не змінено</string>
|
||||
</resources>
|
||||
|
|
|
|||
BIN
design/screenshots/Hebrew iw-IL/car-categories.png
Executable file
|
After Width: | Height: | Size: 38 KiB |
BIN
design/screenshots/Hebrew iw-IL/car-description.png
Executable file
|
After Width: | Height: | Size: 37 KiB |
BIN
design/screenshots/Hebrew iw-IL/car-details.png
Executable file
|
After Width: | Height: | Size: 326 KiB |
BIN
design/screenshots/Hebrew iw-IL/drawer.png
Executable file
|
After Width: | Height: | Size: 146 KiB |
BIN
design/screenshots/Hebrew iw-IL/gallery.png
Executable file
|
After Width: | Height: | Size: 486 KiB |
BIN
design/screenshots/Hebrew iw-IL/library-categories.png
Executable file
|
After Width: | Height: | Size: 11 KiB |
BIN
design/screenshots/Hebrew iw-IL/library-description.png
Executable file
|
After Width: | Height: | Size: 39 KiB |
BIN
design/screenshots/Hebrew iw-IL/library-details.png
Executable file
|
After Width: | Height: | Size: 427 KiB |
BIN
design/screenshots/Hebrew iw-IL/nearby-list.png
Executable file
|
After Width: | Height: | Size: 24 KiB |
BIN
design/screenshots/Hebrew iw-IL/nearby-map.png
Executable file
|
After Width: | Height: | Size: 101 KiB |
BIN
design/screenshots/Hebrew iw-IL/restaurant-categories.png
Executable file
|
After Width: | Height: | Size: 34 KiB |
BIN
design/screenshots/Hebrew iw-IL/restaurant-description.png
Executable file
|
After Width: | Height: | Size: 41 KiB |
BIN
design/screenshots/Hebrew iw-IL/restaurant-details.png
Executable file
|
After Width: | Height: | Size: 413 KiB |
BIN
design/screenshots/Indonesian id-ID/car-categories.png
Executable file
|
After Width: | Height: | Size: 390 KiB |
BIN
design/screenshots/Indonesian id-ID/car-description.png
Executable file
|
After Width: | Height: | Size: 398 KiB |
BIN
design/screenshots/Indonesian id-ID/car-details.png
Executable file
|
After Width: | Height: | Size: 295 KiB |
BIN
design/screenshots/Indonesian id-ID/drawer.png
Executable file
|
After Width: | Height: | Size: 198 KiB |
BIN
design/screenshots/Indonesian id-ID/gallery.png
Executable file
|
After Width: | Height: | Size: 763 KiB |
BIN
design/screenshots/Indonesian id-ID/nearby-list.png
Executable file
|
After Width: | Height: | Size: 69 KiB |
BIN
design/screenshots/Indonesian id-ID/nearby-map.png
Executable file
|
After Width: | Height: | Size: 205 KiB |
BIN
design/screenshots/Indonesian id-ID/restaurant-categories.png
Executable file
|
After Width: | Height: | Size: 477 KiB |
BIN
design/screenshots/Indonesian id-ID/restaurant-description.png
Executable file
|
After Width: | Height: | Size: 512 KiB |
BIN
design/screenshots/Indonesian id-ID/restaurant-details.png
Executable file
|
After Width: | Height: | Size: 401 KiB |
BIN
design/screenshots/Indonesian id-ID/school-categories.png
Executable file
|
After Width: | Height: | Size: 550 KiB |
BIN
design/screenshots/Indonesian id-ID/school-description.png
Executable file
|
After Width: | Height: | Size: 570 KiB |
BIN
design/screenshots/Indonesian id-ID/school-details.png
Executable file
|
After Width: | Height: | Size: 486 KiB |