From ca4b99a1cc2b7401081d8e2fe948021e0078c168 Mon Sep 17 00:00:00 2001 From: Paul Hawke Date: Sat, 26 Aug 2017 15:42:44 -0500 Subject: [PATCH 1/4] Product flavors to allow switching between the production and the beta-cluster Wikimedia servers. --- app/build.gradle | 23 ++++++++++++++++++ .../res/drawable-hdpi/ic_launcher.png | Bin 0 -> 4358 bytes .../res/drawable-mdpi/ic_launcher.png | Bin 0 -> 3019 bytes .../res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 5649 bytes .../free/nrw/commons/CommonsApplication.java | 8 +----- .../java/fr/free/nrw/commons/PageTitle.java | 4 +-- .../main/java/fr/free/nrw/commons/Utils.java | 11 +++++---- .../fr/free/nrw/commons/mwapi/LogBuilder.java | 4 +-- 8 files changed, 34 insertions(+), 16 deletions(-) create mode 100644 app/src/betaDebug/res/drawable-hdpi/ic_launcher.png create mode 100644 app/src/betaDebug/res/drawable-mdpi/ic_launcher.png create mode 100644 app/src/betaDebug/res/drawable-xhdpi/ic_launcher.png diff --git a/app/build.gradle b/app/build.gradle index 51d6f56b0..4358c4699 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -77,6 +77,29 @@ android { } } + productFlavors { + prod { + buildConfigField "String", "WIKIMEDIA_API_HOST", "\"https://commons.wikimedia.org/w/api.php\"" + buildConfigField "String", "WIKIMEDIA_FORGE_API_HOST", "\"https://tools.wmflabs.org/\"" + buildConfigField "String", "IMAGE_URL_BASE", "\"https://upload.wikimedia.org/wikipedia/commons\"" + buildConfigField "String", "HOME_URL", "\"https://commons.wikimedia.org/wiki/\"" + buildConfigField "String", "MOBILE_HOME_URL", "\"https://commons.m.wikimedia.org/wiki/\"" + buildConfigField "String", "EVENTLOG_URL", "\"https://www.wikimedia.org/beacon/event\"" + buildConfigField "String", "EVENTLOG_WIKI", "\"commonswiki\"" + } + + beta { + // What values do we need to hit the BETA versions of the site / api ? + buildConfigField "String", "WIKIMEDIA_API_HOST", "\"https://commons.wikimedia.beta.wmflabs.org/w/api.php\"" + buildConfigField "String", "WIKIMEDIA_FORGE_API_HOST", "\"https://tools.wmflabs.org/\"" + buildConfigField "String", "IMAGE_URL_BASE", "\"https://upload.beta.wmflabs.org/wikipedia/commons\"" + buildConfigField "String", "HOME_URL", "\"https://commons.wikimedia.beta.wmflabs.org/wiki/\"" + buildConfigField "String", "MOBILE_HOME_URL", "\"https://commons.m.wikimedia.beta.wmflabs.org/wiki/\"" + buildConfigField "String", "EVENTLOG_URL", "\"https://commons.wikimedia.beta.wmflabs.org/beacon/event\"" + buildConfigField "String", "EVENTLOG_WIKI", "\"commonswiki\"" + } + } + lintOptions { disable 'MissingTranslation' disable 'ExtraTranslation' diff --git a/app/src/betaDebug/res/drawable-hdpi/ic_launcher.png b/app/src/betaDebug/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..46c0a42022eac5465a5e405a44af210c567ad32a GIT binary patch literal 4358 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 literal 0 HcmV?d00001 diff --git a/app/src/betaDebug/res/drawable-mdpi/ic_launcher.png b/app/src/betaDebug/res/drawable-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..2e549967676e6081ad621be139ee59b540acbc4e GIT binary patch literal 3019 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 N002ovPDHLkV1jl@)<*yU literal 0 HcmV?d00001 diff --git a/app/src/betaDebug/res/drawable-xhdpi/ic_launcher.png b/app/src/betaDebug/res/drawable-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..0f0c702ed6bd8624ad553789ae921622a24d9cbc GIT binary patch literal 5649 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 literal 0 HcmV?d00001 diff --git a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java index b7b75fae5..f4ce71dc3 100644 --- a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java +++ b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java @@ -47,12 +47,6 @@ import timber.log.Timber; public class CommonsApplication extends Application { private Account currentAccount = null; // Unlike a savings account... - public static final String API_URL = "https://commons.wikimedia.org/w/api.php"; - public static final String IMAGE_URL_BASE = "https://upload.wikimedia.org/wikipedia/commons"; - public static final String HOME_URL = "https://commons.wikimedia.org/wiki/"; - public static final String MOBILE_HOME_URL = "https://commons.m.wikimedia.org/wiki/"; - public static final String EVENTLOG_URL = "https://www.wikimedia.org/beacon/event"; - public static final String EVENTLOG_WIKI = "commonswiki"; public static final Object[] EVENT_UPLOAD_ATTEMPT = {"MobileAppUploadAttempts", 5334329L}; public static final Object[] EVENT_LOGIN_ATTEMPT = {"MobileAppLoginAttempts", 5257721L}; @@ -88,7 +82,7 @@ public class CommonsApplication extends Application { public MediaWikiApi getMWApi() { if (api == null) { - api = new ApacheHttpClientMediaWikiApi(API_URL); + api = new ApacheHttpClientMediaWikiApi(BuildConfig.WIKIMEDIA_API_HOST); } return api; } diff --git a/app/src/main/java/fr/free/nrw/commons/PageTitle.java b/app/src/main/java/fr/free/nrw/commons/PageTitle.java index eb8a61284..6229e7ef9 100644 --- a/app/src/main/java/fr/free/nrw/commons/PageTitle.java +++ b/app/src/main/java/fr/free/nrw/commons/PageTitle.java @@ -58,7 +58,7 @@ public class PageTitle { */ @NonNull public Uri getCanonicalUri() { - String uriStr = CommonsApplication.HOME_URL + Uri.encode(getPrefixedText(), ":/"); + String uriStr = BuildConfig.HOME_URL + Uri.encode(getPrefixedText(), ":/"); return Uri.parse(uriStr); } @@ -71,7 +71,7 @@ public class PageTitle { */ @NonNull public Uri getMobileUri() { - String uriStr = CommonsApplication.MOBILE_HOME_URL + Uri.encode(getPrefixedText(), ":/"); + String uriStr = BuildConfig.MOBILE_HOME_URL + Uri.encode(getPrefixedText(), ":/"); return Uri.parse(uriStr); } diff --git a/app/src/main/java/fr/free/nrw/commons/Utils.java b/app/src/main/java/fr/free/nrw/commons/Utils.java index 7e75f8718..ebebd4891 100644 --- a/app/src/main/java/fr/free/nrw/commons/Utils.java +++ b/app/src/main/java/fr/free/nrw/commons/Utils.java @@ -40,7 +40,6 @@ import javax.xml.transform.stream.StreamResult; import fr.free.nrw.commons.settings.Prefs; import timber.log.Timber; - public class Utils { // Get SHA1 of file from input stream @@ -80,10 +79,12 @@ public class Utils { } } - /** Fix Html.fromHtml is deprecated problem + /** + * Fix Html.fromHtml is deprecated problem + * * @param source provided Html string * @return returned Spanned of appropriate method according to version check - * */ + */ public static Spanned fromHtml(String source) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { return Html.fromHtml(source, Html.FROM_HTML_MODE_LEGACY); @@ -127,7 +128,7 @@ public class Utils { public static String makeThumbBaseUrl(String filename) { String name = new PageTitle(filename).getPrefixedText(); String sha = new String(Hex.encodeHex(DigestUtils.md5(name))); - return String.format("%s/%s/%s/%s", CommonsApplication.IMAGE_URL_BASE, sha.substring(0, 1), sha.substring(0, 2), urlEncode(name)); + return String.format("%s/%s/%s/%s", BuildConfig.IMAGE_URL_BASE, sha.substring(0, 1), sha.substring(0, 2), urlEncode(name)); } public static String getStringFromDOM(Node dom) { @@ -277,6 +278,6 @@ public class Utils { } public static boolean isDarkTheme(Context context) { - return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("theme",false); + return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("theme", false); } } diff --git a/app/src/main/java/fr/free/nrw/commons/mwapi/LogBuilder.java b/app/src/main/java/fr/free/nrw/commons/mwapi/LogBuilder.java index b512f9647..eabbbf82e 100644 --- a/app/src/main/java/fr/free/nrw/commons/mwapi/LogBuilder.java +++ b/app/src/main/java/fr/free/nrw/commons/mwapi/LogBuilder.java @@ -41,12 +41,12 @@ public class LogBuilder { try { fullData.put("schema", schema); fullData.put("revision", rev); - fullData.put("wiki", CommonsApplication.EVENTLOG_WIKI); + fullData.put("wiki", BuildConfig.EVENTLOG_WIKI); data.put("device", EventLog.DEVICE); data.put("platform", "Android/" + Build.VERSION.RELEASE); data.put("appversion", "Android/" + BuildConfig.VERSION_NAME); fullData.put("event", data); - return new URL(CommonsApplication.EVENTLOG_URL + "?" + Utils.urlEncode(fullData.toString()) + ";"); + return new URL(BuildConfig.EVENTLOG_URL + "?" + Utils.urlEncode(fullData.toString()) + ";"); } catch (MalformedURLException | JSONException e) { throw new RuntimeException(e); } From 58013ef10c012f97b6e4d340901e7e26aca4ffcd Mon Sep 17 00:00:00 2001 From: Paul Hawke Date: Sat, 26 Aug 2017 18:00:02 -0500 Subject: [PATCH 2/4] Moved the test to use robolectric and updated it to be flavor aware. --- .../fr/free/nrw/commons/PageTitleTest.java | 43 +++++++++++-------- 1 file changed, 26 insertions(+), 17 deletions(-) rename app/src/{androidTest => test}/java/fr/free/nrw/commons/PageTitleTest.java (54%) diff --git a/app/src/androidTest/java/fr/free/nrw/commons/PageTitleTest.java b/app/src/test/java/fr/free/nrw/commons/PageTitleTest.java similarity index 54% rename from app/src/androidTest/java/fr/free/nrw/commons/PageTitleTest.java rename to app/src/test/java/fr/free/nrw/commons/PageTitleTest.java index 5c83ef691..cd10c2828 100644 --- a/app/src/androidTest/java/fr/free/nrw/commons/PageTitleTest.java +++ b/app/src/test/java/fr/free/nrw/commons/PageTitleTest.java @@ -1,61 +1,70 @@ package fr.free.nrw.commons; -import android.support.test.runner.AndroidJUnit4; - import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.annotation.Config; import java.net.URLEncoder; import static org.hamcrest.CoreMatchers.is; -// TODO: use Robolectric and make it runnable without a connected device -@RunWith(AndroidJUnit4.class) +@RunWith(RobolectricTestRunner.class) +@Config(constants = BuildConfig.class, sdk = 21) public class PageTitleTest { - @Test public void displayTextShouldNotBeUnderscored() { + @Test + public void displayTextShouldNotBeUnderscored() { Assert.assertThat(new PageTitle("Ex_1 ").getDisplayText(), is("Ex 1")); } - @Test public void moreThanTwoColons() { + @Test + public void moreThanTwoColons() { Assert.assertThat(new PageTitle("File:sample:a.jpg").getPrefixedText(), is("File:Sample:a.jpg")); } - @Test public void getTextShouldReturnWithoutNamespace() { + @Test + public void getTextShouldReturnWithoutNamespace() { Assert.assertThat(new PageTitle("File:sample.jpg").getText(), is("Sample.jpg")); } - @Test public void capitalizeNameAfterNamespace() { + @Test + public void capitalizeNameAfterNamespace() { Assert.assertThat(new PageTitle("File:sample.jpg").getPrefixedText(), is("File:Sample.jpg")); } - @Test public void prefixedTextShouldBeUnderscored() { + @Test + public void prefixedTextShouldBeUnderscored() { Assert.assertThat(new PageTitle("Ex 1 ").getPrefixedText(), is("Ex_1")); } - @Test public void getMobileUriForTest() { + @Test + public void getMobileUriForTest() { Assert.assertThat(new PageTitle("Test").getMobileUri().toString(), - is("https://commons.m.wikimedia.org/wiki/Test")); + is(BuildConfig.MOBILE_HOME_URL + "Test")); } - @Test public void spaceBecomesUnderscoreInUri() { + @Test + public void spaceBecomesUnderscoreInUri() { Assert.assertThat(new PageTitle("File:Ex 1.jpg").getCanonicalUri().toString(), - is("https://commons.wikimedia.org/wiki/File:Ex_1.jpg")); + is(BuildConfig.HOME_URL + "File:Ex_1.jpg")); } - @Test public void leaveSubpageNamesUncapitalizedInUri() { + @Test + public void leaveSubpageNamesUncapitalizedInUri() { Assert.assertThat(new PageTitle("User:Ex/subpage").getCanonicalUri().toString(), - is("https://commons.wikimedia.org/wiki/User:Ex/subpage")); + is(BuildConfig.HOME_URL + "User:Ex/subpage")); } - @Test public void unicodeUri() throws Throwable { + @Test + public void unicodeUri() throws Throwable { Assert.assertThat(new PageTitle("User:例").getCanonicalUri().toString(), - is("https://commons.wikimedia.org/wiki/User:" + URLEncoder.encode("例", "utf-8"))); + is(BuildConfig.HOME_URL + "User:" + URLEncoder.encode("例", "utf-8"))); } } From 1f1a2822e8387821042b2ae0da34c0579e08e91a Mon Sep 17 00:00:00 2001 From: Paul Hawke Date: Sat, 26 Aug 2017 21:05:41 -0500 Subject: [PATCH 3/4] Moved 2 other tests over to use robolectric. --- .../java/fr/free/nrw/commons/MediaTest.java | 23 -------- .../nrw/commons/NearbyControllerTest.java | 57 ------------------- .../java/fr/free/nrw/commons/MediaTest.java | 25 ++++++++ .../nrw/commons/NearbyControllerTest.java | 44 ++++++++++++++ .../fr/free/nrw/commons/PageTitleTest.java | 20 +++---- 5 files changed, 79 insertions(+), 90 deletions(-) delete mode 100644 app/src/androidTest/java/fr/free/nrw/commons/MediaTest.java delete mode 100644 app/src/androidTest/java/fr/free/nrw/commons/NearbyControllerTest.java create mode 100644 app/src/test/java/fr/free/nrw/commons/MediaTest.java create mode 100644 app/src/test/java/fr/free/nrw/commons/NearbyControllerTest.java diff --git a/app/src/androidTest/java/fr/free/nrw/commons/MediaTest.java b/app/src/androidTest/java/fr/free/nrw/commons/MediaTest.java deleted file mode 100644 index ecb465293..000000000 --- a/app/src/androidTest/java/fr/free/nrw/commons/MediaTest.java +++ /dev/null @@ -1,23 +0,0 @@ -package fr.free.nrw.commons; - -import android.support.test.runner.AndroidJUnit4; - -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.hamcrest.CoreMatchers.is; - -// TODO: use Robolectric and make it runnable without a connected device -@RunWith(AndroidJUnit4.class) -public class MediaTest { - @Test public void displayTitleShouldStripExtension() { - Media m = new Media("File:Example.jpg"); - Assert.assertThat(m.getDisplayTitle(), is("Example")); - } - - @Test public void displayTitleShouldUseSpaceForUnderscore() { - Media m = new Media("File:Example 1_2.jpg"); - Assert.assertThat(m.getDisplayTitle(), is("Example 1 2")); - } -} diff --git a/app/src/androidTest/java/fr/free/nrw/commons/NearbyControllerTest.java b/app/src/androidTest/java/fr/free/nrw/commons/NearbyControllerTest.java deleted file mode 100644 index aa32d2637..000000000 --- a/app/src/androidTest/java/fr/free/nrw/commons/NearbyControllerTest.java +++ /dev/null @@ -1,57 +0,0 @@ -package fr.free.nrw.commons; - -import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4; - -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; - -import java.util.ArrayList; -import java.util.List; - -import fr.free.nrw.commons.location.LatLng; -import fr.free.nrw.commons.nearby.NearbyBaseMarker; -import fr.free.nrw.commons.nearby.NearbyController; -import fr.free.nrw.commons.nearby.Place; - -import static org.hamcrest.CoreMatchers.is; - -@RunWith(AndroidJUnit4.class) -public class NearbyControllerTest { - private Context instrumentationContext; - - @Before - public void setup() { - instrumentationContext = InstrumentationRegistry.getTargetContext(); - } - - @Test public void testNullAttractions() { - LatLng location = new LatLng(0, 0, 0); - - List options = - NearbyController.loadAttractionsFromLocationToBaseMarkerOptions( - location, - null, - instrumentationContext - ); - - Assert.assertThat(options.size(), is(0)); - } - - @Test public void testEmptyList() { - LatLng location = new LatLng(0, 0, 0); - List emptyList = new ArrayList<>(); - - List options = - NearbyController.loadAttractionsFromLocationToBaseMarkerOptions( - location, - emptyList, - instrumentationContext - ); - - Assert.assertThat(options.size(), is(0)); - } -} diff --git a/app/src/test/java/fr/free/nrw/commons/MediaTest.java b/app/src/test/java/fr/free/nrw/commons/MediaTest.java new file mode 100644 index 000000000..21cfc2c34 --- /dev/null +++ b/app/src/test/java/fr/free/nrw/commons/MediaTest.java @@ -0,0 +1,25 @@ +package fr.free.nrw.commons; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.annotation.Config; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +@RunWith(RobolectricTestRunner.class) +@Config(constants = BuildConfig.class, sdk = 21) +public class MediaTest { + @Test + public void displayTitleShouldStripExtension() { + Media m = new Media("File:Example.jpg"); + assertThat(m.getDisplayTitle(), is("Example")); + } + + @Test + public void displayTitleShouldUseSpaceForUnderscore() { + Media m = new Media("File:Example 1_2.jpg"); + assertThat(m.getDisplayTitle(), is("Example 1 2")); + } +} diff --git a/app/src/test/java/fr/free/nrw/commons/NearbyControllerTest.java b/app/src/test/java/fr/free/nrw/commons/NearbyControllerTest.java new file mode 100644 index 000000000..6ae2063da --- /dev/null +++ b/app/src/test/java/fr/free/nrw/commons/NearbyControllerTest.java @@ -0,0 +1,44 @@ +package fr.free.nrw.commons; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; + +import java.util.ArrayList; +import java.util.List; + +import fr.free.nrw.commons.location.LatLng; +import fr.free.nrw.commons.nearby.NearbyBaseMarker; +import fr.free.nrw.commons.nearby.Place; + +import static fr.free.nrw.commons.nearby.NearbyController.loadAttractionsFromLocationToBaseMarkerOptions; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +@RunWith(RobolectricTestRunner.class) +@Config(constants = BuildConfig.class, sdk = 21) +public class NearbyControllerTest { + + @Test + public void testNullAttractions() { + LatLng location = new LatLng(0, 0, 0); + + List options = loadAttractionsFromLocationToBaseMarkerOptions( + location, null, RuntimeEnvironment.application); + + assertThat(options.size(), is(0)); + } + + @Test + public void testEmptyList() { + LatLng location = new LatLng(0, 0, 0); + List emptyList = new ArrayList<>(); + + List options = loadAttractionsFromLocationToBaseMarkerOptions( + location, emptyList, RuntimeEnvironment.application); + + assertThat(options.size(), is(0)); + } +} diff --git a/app/src/test/java/fr/free/nrw/commons/PageTitleTest.java b/app/src/test/java/fr/free/nrw/commons/PageTitleTest.java index cd10c2828..455b3fbd0 100644 --- a/app/src/test/java/fr/free/nrw/commons/PageTitleTest.java +++ b/app/src/test/java/fr/free/nrw/commons/PageTitleTest.java @@ -1,6 +1,5 @@ package fr.free.nrw.commons; -import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; @@ -9,62 +8,63 @@ import org.robolectric.annotation.Config; import java.net.URLEncoder; import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; @RunWith(RobolectricTestRunner.class) @Config(constants = BuildConfig.class, sdk = 21) public class PageTitleTest { @Test public void displayTextShouldNotBeUnderscored() { - Assert.assertThat(new PageTitle("Ex_1 ").getDisplayText(), + assertThat(new PageTitle("Ex_1 ").getDisplayText(), is("Ex 1")); } @Test public void moreThanTwoColons() { - Assert.assertThat(new PageTitle("File:sample:a.jpg").getPrefixedText(), + assertThat(new PageTitle("File:sample:a.jpg").getPrefixedText(), is("File:Sample:a.jpg")); } @Test public void getTextShouldReturnWithoutNamespace() { - Assert.assertThat(new PageTitle("File:sample.jpg").getText(), + assertThat(new PageTitle("File:sample.jpg").getText(), is("Sample.jpg")); } @Test public void capitalizeNameAfterNamespace() { - Assert.assertThat(new PageTitle("File:sample.jpg").getPrefixedText(), + assertThat(new PageTitle("File:sample.jpg").getPrefixedText(), is("File:Sample.jpg")); } @Test public void prefixedTextShouldBeUnderscored() { - Assert.assertThat(new PageTitle("Ex 1 ").getPrefixedText(), + assertThat(new PageTitle("Ex 1 ").getPrefixedText(), is("Ex_1")); } @Test public void getMobileUriForTest() { - Assert.assertThat(new PageTitle("Test").getMobileUri().toString(), + assertThat(new PageTitle("Test").getMobileUri().toString(), is(BuildConfig.MOBILE_HOME_URL + "Test")); } @Test public void spaceBecomesUnderscoreInUri() { - Assert.assertThat(new PageTitle("File:Ex 1.jpg").getCanonicalUri().toString(), + assertThat(new PageTitle("File:Ex 1.jpg").getCanonicalUri().toString(), is(BuildConfig.HOME_URL + "File:Ex_1.jpg")); } @Test public void leaveSubpageNamesUncapitalizedInUri() { - Assert.assertThat(new PageTitle("User:Ex/subpage").getCanonicalUri().toString(), + assertThat(new PageTitle("User:Ex/subpage").getCanonicalUri().toString(), is(BuildConfig.HOME_URL + "User:Ex/subpage")); } @Test public void unicodeUri() throws Throwable { - Assert.assertThat(new PageTitle("User:例").getCanonicalUri().toString(), + assertThat(new PageTitle("User:例").getCanonicalUri().toString(), is(BuildConfig.HOME_URL + "User:" + URLEncoder.encode("例", "utf-8"))); } } From c8b0d2cee4b511caf7564e0d538f0bd26f10a4af Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Mon, 11 Sep 2017 07:14:33 +0200 Subject: [PATCH 4/4] Localisation updates from https://translatewiki.net. --- app/src/main/res/values-fa/strings.xml | 87 ++++++++++++++++++++++---- app/src/main/res/values-sd/strings.xml | 2 +- 2 files changed, 76 insertions(+), 13 deletions(-) diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 3c1ec8baf..0254a2721 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -20,11 +20,11 @@ اتمام بارگذاری %1$s %1$s بارگذاری نشد برای دیدن انگشت بزنید - - یک پرونده در حال بارگذاری + + %d پرونده در حال بارگذاری %d پرونده در حال بارگذاری - بارگذاری‌های من + بارگذاری‌های اخیر من در صف ناموفق بود %1$d٪ کامل شد @@ -42,6 +42,7 @@ ناتوانی در ورود - لطفاً گذرواژه‌یتان را بررسی کنید تلاش ناموفق بیش از حد. لطفاً چند دقیقهٔ دیگر دوباره تلاش کنید پوزش، کاربر در ویکی‌انبار بسته شده‌است + باید تأیید دومرحله‌ای را فعال کنید. ورود ناموفق بود بارگذاری نام این مجموعه @@ -49,17 +50,21 @@ بارگذاری جستجوی رده‌ها ذخیره - - هنوز بارگذاری نشده است - یک بارگذاری شد + تازه کردن + مکان‌یاب در دستگاه شما خاموش است. آیا دوست دارید فعال شود؟ + فعال کردن مکان‌یاب + هنوز هیچ بارگذاری + + \@string/contributions_subtitle_zero + بارگذاری شد %d بارگذاری شد - - شروع بارگذاری پرونده - شروع بارگذاری %d پرونده + + شروع %d بارگذاری پرونده + شروع بارگذاری %d پرونده - - ۱ بارگذاری + + %d بارگذاری %d بارگذاری رده‌ای منطبق با %1$s یافت نشد @@ -68,9 +73,10 @@ تنظیمات ثبت نام درباره - نرم‌افزار متن‌باز آزاد تحت <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">مجوز آپاچی نسخهٔ ۲</a>\n\nویکی‌انبار و نشانش یک نشان تجاری‌ست و با اجازهٔ بنیاد ویکی‌مدیا استفاده می‌شود. ما زیرمجموعه یا شعبهٔ بنیاد نیستیم. + نرم‌افزار متن‌باز آزاد تحت <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">مجوز آپاچی نسخهٔ ۲</a>\n\n%1$s و نشانش یک نشان تجاری‌ست و با اجازهٔ بنیاد ویکی‌مدیا استفاده می‌شود. ما زیرمجموعه یا شعبهٔ بنیاد نیستیم. <a href=\"https://github.com/commons-app/apps-android-commons\">Source</a> and <a href=\"https://commons-app.github.io/\">وب‌سایت</a> در گیت‌هاب. ایجاد یک <a href=\"https://github.com/commons-app/apps-android-commons/issues\">درخواست در گیت‌هاب</a> برای گزارش باگ و یا پیشنهاد یک خصوصیت جدید. <a href=\"https://wikimediafoundation.org/wiki/Privacy_policy\">سیاست حفظ حریم خصوصی</a> + <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">مجوز</a> درباره ارسال بازخورد (از طریق ایمیل) نرم‌افزار ایمیل نصب نیست @@ -80,11 +86,16 @@ تلاش مجدد لغو این نگاره تحت مجوز %1$s است + با بارگذاری این تصویر، تأیید می‌کنم که این اثر کار خودم است و از محتوای دارای حق تکثیر یا سلفی برای ایجاد آن استفاده نکرده‌ام و شرایط ذکر شده در By submitting this picture, I declare that this is my own work, that it does not contain copyrighted material or selfies, and otherwise adheres to <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">سیاست‌های ویکی‌انبار</a> را رعایت می‌کند. دریافت مجوز از عنوان/توضیحات پیشین استفاده کنید دریافت خودکار موقعیت کنونی درحال دریافت موقعیت برای پیشنهاد رده در صورتی که برچسب جغرافیایی وجود نداشته باشد. + حالت شبانه + استفاده از حالت تیره + CC Attribution-ShareAlike 4.0 + Attribution 4.0 CC Attribution-ShareAlike 3.0 CC Attribution 3.0 CC0 @@ -127,8 +138,60 @@ اجازه‌های اختیاری: دریافت موقعیت برای پیشنهاد رده تأیید مکان‌‌های اطراف + مکانی در نزدیکی یافت نشد هشدار پرونده در ویکی‌انبار موجود است. آیا مطمئنید که می‌خواهید ادامه دهید؟ بله خیر + عنوان + عنوان رسانه + توضیح + توضیحات رسانه اینجا می‌روند. امکان دارد طولانی باشد و نیاز به چند خط شدن داشته باشد. امیدواریم خوب دیده شود. + تاریخ بارگذاری + مجوز + مختصات‌ها + ارائه نشده است + آزمایشگر نسخهٔ آزمایشی شوید + به گروه آزمایشی ما در گوگل‌پلی بپیوندید و از خصوصیات جدید و خطاهای رفع‌شده زودتر از دیگران برخوردار شوید. + استفاده از ویکی‌داده + (هشدار: غیرفعال کردن این ممکن است حجم زیادی از اینترنت تلفن همراه را مصرف کند) + کد 2FA + محدودیت بارگذاری اخیر من + حداکثر محدودیت + عدم توانایی در نمایش بیش از ۵۰۰ مورد + تنظیم محدودیت بارگذاری‌های اخیر + تأیید دومرحله‌ای الان پشتیبانی نمی‌شود. + آیا واقعاً قصد خروج از سامانه را دارید؟ + نشان ویکی‌انبار + تصویر پس‌زمینه + خطای تصویر رسانه + تصویری یافت نشد + بارگذاری تصویر + کوه زائو + لاما + رینبو بریج + لاله + سلفی نه + تصویر اختصاصی + به ویکی‌پدیا خوش‌آمدید + حق‌تکثیر خوش‌آمدگویی + خانه اپرای سیدنی + لغو + باز کردن + بستن + خانه + بارگذاری + در نزدیکی + درباره + تنظیمات + بازخورد + خروج + آموزش + مکان‌های اطراف بدون اجازه دادن به مکان‌یاب مقدور نیست + توضیحی یافت نشد + صفحهٔ دروند در ویکی‌انبار + آیتم ویکی‌داده + خطا در زمان دریافت تصاویر + عنوانی توصیفی و یکتا برای پرونده که به عنوان نام پرونده در نظر گرفته خواهد شد. ترجیحاً به زبان ساده باشد، می‌توانید فاصله هم به کار ببرید. پسوند پرونده را ننویسید. + لطفاً تصویر را تا حد توان شرح دهید. کجا گرفته شده‌است؟ شامل چه چیزی می‌شود؟ لطفاً اشیا یا افراد را شرح دهید. اطلاعاتی که به راحتی قابل مشاهده هستند را صرفه‌نظر کنید. اگر چیزی در تصویر غیر طبیعی به نظر می‌رسد آن را شرح دهید. diff --git a/app/src/main/res/values-sd/strings.xml b/app/src/main/res/values-sd/strings.xml index 00bc35c68..36a914281 100644 --- a/app/src/main/res/values-sd/strings.xml +++ b/app/src/main/res/values-sd/strings.xml @@ -41,7 +41,7 @@ ناقابلِ داخل ٿيڻ - براءِ مھرباني پنھنجو يُوزرنانءُ چڪاسيو ناقابل داخل ٿيڻ - براءِ مھرباني پنھنجو ڳجھولفظ چڪاسيو ھيڪانديون ناڪام ڪوششون. براءِ مھرباني ڪجھ منٽن کانپوءِ ٻيھر ڪوشش ڪريو. - افسوس، ھي يوزر العام تي بندشيل آھي + افسوس، ھي واھپ العام تي بندشيل آھي داخل ٿيڻ ناڪام چاڙھيو ھن سيٽ کي نالو ڏيو