diff --git a/.github/workflows/android-ci-comment.yml b/.github/workflows/android-ci-comment.yml
deleted file mode 100644
index b200c9a70..000000000
--- a/.github/workflows/android-ci-comment.yml
+++ /dev/null
@@ -1,96 +0,0 @@
-name: Android CI Comment
-
-on:
- workflow_run:
- workflows: ["Android CI"]
- types: [completed]
- branches: [main]
-
-permissions:
- issues: write
-
-jobs:
- comment:
- name: Comment on PR with APK links
- runs-on: ubuntu-latest
- if: github.event.workflow_run.conclusion == 'success'
- steps:
- - name: Checkout base branch
- uses: actions/checkout@v3
- with:
- ref: ${{ github.event.workflow_run.head_branch }}
- - name: Download Run ID Artifact
- uses: actions/download-artifact@v4
- with:
- name: run-id
- run-id: ${{ github.event.workflow_run.id }}
-
- - name: Read Run ID
- id: read-run-id
- run: echo "RUN_ID=$(cat run_id.txt)" >> $GITHUB_ENV
-
- - name: Comment on PR with APK download links
- env:
- GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/github-script@v6
- with:
- script: |
- try {
- const token = process.env.GH_TOKEN;
- if (!token) {
- throw new Error('GITHUB_TOKEN is not set.');
- }
-
- const runId = "${{ env.RUN_ID }}";
- if (!runId) {
- throw new Error('Run ID not found.');
- }
-
- // Get the PR number from the workflow_run event
- const prNumber = ${{ github.event.workflow_run.pull_requests[0].number }};
- if (!prNumber) {
- console.log('No PR number found in workflow_run event.');
- return;
- }
-
- const { data: { artifacts } } = await github.rest.actions.listWorkflowRunArtifacts({
- owner: context.repo.owner,
- repo: context.repo.repo,
- run_id: runId
- });
-
- if (!artifacts || artifacts.length === 0) {
- console.log('No artifacts found for this workflow run.');
- return;
- }
-
- const betaArtifact = artifacts.find(artifact => artifact.name === "betaDebugAPK");
- const prodArtifact = artifacts.find(artifact => artifact.name === "prodDebugAPK");
-
- if (!betaArtifact || !prodArtifact) {
- console.log('Could not find both Beta and Prod APK artifacts.');
- console.log('Available artifacts:', artifacts.map(a => a.name).join(', '));
- return;
- }
-
- const betaDownloadUrl = `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/suites/${runId}/artifacts/${betaArtifact.id}`;
- const prodDownloadUrl = `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/suites/${runId}/artifacts/${prodArtifact.id}`;
-
- const commentBody = `
- ๐ฑ **APK for pull request is ready to see the changes** ๐ฑ
- - [Download Beta APK](${betaDownloadUrl})
- - [Download Prod APK](${prodDownloadUrl})
- `;
-
- await github.rest.issues.createComment({
- issue_number: prNumber,
- owner: context.repo.owner,
- repo: context.repo.repo,
- body: commentBody
- });
-
- console.log('Successfully posted comment with APK download links');
- } catch (error) {
- console.error('Error in PR comment creation:', error);
- core.setFailed(`Workflow failed: ${error.message}`);
- }
diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml
index 8a744bc0a..bc8b03c9e 100644
--- a/.github/workflows/android.yml
+++ b/.github/workflows/android.yml
@@ -1,10 +1,6 @@
name: Android CI
-on: [push, pull_request, workflow_dispatch]
-
-permissions:
- contents: read
- actions: read
+on: [push, pull_request, workflow_dispatch]
concurrency:
group: build-${{ github.event.pull_request.number || github.ref }}
@@ -16,17 +12,17 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout code
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
- name: Set up JDK
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '17'
- name: Cache packages
id: cache-packages
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: |
~/.gradle/caches
@@ -41,7 +37,7 @@ jobs:
- name: AVD cache
if: github.event_name != 'pull_request'
- uses: actions/cache@v3
+ uses: actions/cache@v4
id: avd-cache
with:
path: |
@@ -106,14 +102,13 @@ jobs:
with:
name: prodDebugAPK
path: app/build/outputs/apk/prod/debug/app-*.apk
-
- - name: Store Workflow Run ID
- if: github.event_name == 'pull_request'
- run: echo "${{ github.run_id }}" > run_id.txt
- - name: Upload Run ID as Artifact
- if: github.event_name == 'pull_request'
+ - name: Create and PR number artifact
+ run: |
+ echo "{\"pr_number\": ${{ github.event.pull_request.number || 'null' }}}" > pr_number.json
+
+ - name: Upload PR number artifact
uses: actions/upload-artifact@v4
with:
- name: run-id
- path: run_id.txt
+ name: pr_number
+ path: ./pr_number.json
diff --git a/.github/workflows/build-beta.yml b/.github/workflows/build-beta.yml
index 933d08e3e..8e1a26e15 100644
--- a/.github/workflows/build-beta.yml
+++ b/.github/workflows/build-beta.yml
@@ -8,9 +8,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: set up JDK 17
- uses: actions/setup-java@v3
+ uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
diff --git a/.github/workflows/comment_artifacts_on_PR.yml b/.github/workflows/comment_artifacts_on_PR.yml
new file mode 100644
index 000000000..ee4ae7c46
--- /dev/null
+++ b/.github/workflows/comment_artifacts_on_PR.yml
@@ -0,0 +1,96 @@
+name: Comment Artifacts on PR
+
+on:
+ workflow_run:
+ workflows: [ "Android CI" ]
+ types: [ completed ]
+
+permissions:
+ pull-requests: write
+ contents: read
+
+concurrency:
+ group: comment-${{ github.event.workflow_run.id }}
+ cancel-in-progress: true
+
+jobs:
+ comment:
+ runs-on: ubuntu-latest
+ if: ${{ github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event == 'pull_request' }}
+ steps:
+ - name: Download and process artifacts
+ uses: actions/github-script@v7
+ with:
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ script: |
+ const fs = require('fs');
+ const runId = context.payload.workflow_run.id;
+
+ const allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ run_id: runId,
+ });
+
+ const prNumberArtifact = allArtifacts.data.artifacts.find(artifact => artifact.name === "pr_number");
+ if (!prNumberArtifact) {
+ console.log("pr_number artifact not found.");
+ return;
+ }
+
+ const download = await github.rest.actions.downloadArtifact({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ artifact_id: prNumberArtifact.id,
+ archive_format: 'zip',
+ });
+
+ fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/pr_number.zip`, Buffer.from(download.data));
+ const { execSync } = require('child_process');
+ execSync('unzip -q pr_number.zip -d ./pr_number/');
+ fs.unlinkSync('pr_number.zip');
+
+ const prData = JSON.parse(fs.readFileSync('./pr_number/pr_number.json', 'utf8'));
+ const prNumber = prData.pr_number;
+
+ if (!prNumber || prNumber === 'null') {
+ console.log("No valid PR number found in pr_number.json. Skipping.");
+ return;
+ }
+
+ const artifactsToLink = allArtifacts.data.artifacts.filter(artifact => artifact.name !== "pr_number");
+ if (artifactsToLink.length === 0) {
+ console.log("No artifacts to link found.");
+ return;
+ }
+
+ const comments = await github.rest.issues.listComments({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ issue_number: Number(prNumber),
+ });
+
+ const oldComments = comments.data.filter(comment =>
+ comment.body.startsWith("โ
Generated APK variants!")
+ );
+ for (const comment of oldComments) {
+ await github.rest.issues.deleteComment({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ comment_id: comment.id,
+ });
+ console.log(`Deleted old comment ID: ${comment.id}`);
+ };
+
+ const commentBody = `โ
Generated APK variants!\n` +
+ artifactsToLink.map(artifact => {
+ const artifactUrl = `https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${runId}/artifacts/${artifact.id}`;
+ return `- ๐ค [Download ${artifact.name}](${artifactUrl})`;
+ }).join('\n');
+
+ await github.rest.issues.createComment({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ issue_number: Number(prNumber),
+ body: commentBody
+ });
diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.kt b/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.kt
index 500231642..25baf3a92 100644
--- a/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.kt
+++ b/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.kt
@@ -223,7 +223,7 @@ class NearbyParentFragment : CommonsDaggerSupportFragment(),
private var view: View? = null
private var scope: LifecycleCoroutineScope? = null
private var presenter: NearbyParentFragmentPresenter? = null
- private var isDarkTheme = false
+ private var _isDarkTheme = false
private var isFABsExpanded = false
private var selectedPlace: Place? = null
private var clickedMarker: Marker? = null
@@ -461,7 +461,7 @@ class NearbyParentFragment : CommonsDaggerSupportFragment(),
}
}
}
- isDarkTheme = systemThemeUtils?.isDeviceInNightMode() == true
+ _isDarkTheme = systemThemeUtils?.isDeviceInNightMode() == true
if (Utils.isMonumentsEnabled(Date())) {
binding?.rlContainerWlmMonthMessage?.visibility = View.VISIBLE
} else {
@@ -631,7 +631,7 @@ class NearbyParentFragment : CommonsDaggerSupportFragment(),
* another refactor
*/
private fun initThemePreferences() {
- if (isDarkTheme) {
+ if (_isDarkTheme) {
binding!!.bottomSheetNearby.rvNearbyList.setBackgroundColor(
requireContext().resources.getColor(fr.free.nrw.commons.R.color.contributionListDarkBackground)
)
@@ -915,7 +915,7 @@ class NearbyParentFragment : CommonsDaggerSupportFragment(),
}
override fun isDarkTheme(): Boolean {
- return isDarkTheme
+ return _isDarkTheme
}
})
binding!!.nearbyFilterList.root
diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml
index 91f9652c4..7f742a319 100644
--- a/app/src/main/res/values-hi/strings.xml
+++ b/app/src/main/res/values-hi/strings.xml
@@ -136,8 +136,8 @@
เคชเคฐเคฟเคเคฏ
เคตเคฟเคเคฟเคฎเฅเคกเคฟเคฏเคพ เคเฅเคฎเคจเฅเคธ เคเคชเฅเคช เคเค เคฎเฅเคเฅเคค เคธเฅเคฐเฅเคค เคเคชเฅเคช เคนเฅ เคเฅ เคเคฟ เคตเคฟเคเคฟเคฎเฅเคกเคฟเคฏเคพ เคธเคฎเฅเคฆเคพเคฏ เคเฅ เค
เคจเฅเคฆเคพเคจเคชเฅเคฐเคพเคชเฅเคคเคเคฐเฅเคคเคพเคเค เคต เคธเฅเคตเคฏเคเคธเฅเคตเคเฅเค เคฆเฅเคตเคพเคฐเคพ เคจเคฟเคฐเฅเคฎเคฟเคค เคเคตเค เคชเฅเคฐเคฌเคเคงเคฟเคค เคนเฅเฅค เคตเคฟเคเคฟเคฎเฅเคกเคฟเคฏเคพ เคซเฅเคเคฃเฅเคกเฅเคถเคจ เคเคธ เคเคชเฅเคช เคเฅ เคจเคฟเคฐเฅเคฎเคพเคฃ, เคตเคฟเคเคพเคธ เคต เคชเฅเคฐเคฌเคเคงเคจ เคฎเฅเค เคเคฟเคธเฅ เคชเฅเคฐเคเคพเคฐ เคธเฅ เคญเฅ เคธเคเคฒเคเฅเคจ เคจเคนเฅเค เคนเฅเฅค
เคคเฅเคฐเฅเคเคฟ เคเฅ เคธเฅเคเคจเคพ เคเคฐ เคธเฅเคเคพเคตเฅเค เคเฅ เคฒเคฟเค <a href=\"%1$s\"> GitHub เคธเคฎเคธเฅเคฏเคพ </a> เคฌเคจเคพเคเค
- <u>เคเฅเคชเคจเฅเคฏเคคเคพ เคจเฅเคคเคฟ</u>
- <u>เคถเฅเคฐเฅเคฏ</u>
+ เคเฅเคชเคจเฅเคฏเคคเคพ เคจเฅเคคเคฟ
+ เคถเฅเคฐเฅเคฏ
เคชเคฐเคฟเคเคฏ
เคชเฅเคฐเคคเคฟเคเฅเคฐเคฟเคฏเคพ เคฆเฅเค (เคเคฎเฅเคฒ เคฆเฅเคตเคพเคฐเคพ)
เคเฅเค เคเคฎเฅเคฒ เคธเคพเคงเคจ เคธเฅเคฅเคพเคชเคฟเคค เคจเคนเฅเค
@@ -150,7 +150,7 @@
เคกเคพเคเคจเคฒเฅเคก
เคกเคฟเคซเฅเคฒเฅเค เคฒเคพเคเคธเฅเคจเฅเคธ
เคชเคฟเคเคฒเฅ เคถเฅเคฐเฅเคทเค/เคตเคฟเคตเคฐเคฃ เคเคพ เคเคชเคฏเฅเค เคเคฐเฅเค
- เคฐเคพเคคเฅเคฐเคฟ เคฎเฅเคก
+ เคฅเฅเคฎ
เคเคเฅเคฐเฅเคฌเฅเคฏเฅเคถเคจ-เคถเฅเคฏเคฐเค
เคฒเคพเคเค 4.0
เคเคเฅเคฐเคฟเคฌเฅเคฏเฅเคถเคจ 4.0
เคเคเฅเคฐเฅเคฌเฅเคฏเฅเคถเคจ-เคถเฅเคฏเคฐเค
เคฒเคพเคเค 3.0
@@ -263,12 +263,12 @@
เคตเคฟเคเฅเคชเฅเคกเคฟเคฏเคพ
เคเฅเคฎเคจเฅเคธ
<u>เคนเคฎเฅเค เคฐเฅเค เคเคฐเฅเค</u>
- <u>เค
เคเฅเคธเคฐ เคชเฅเคเฅ เคเคพเคจเฅ เคตเคพเคฒเฅ เคชเฅเคฐเคถเฅเคจ</u>
+ เค
เคเฅเคธเคฐ เคชเฅเคเฅ เคเคพเคจเฅ เคตเคพเคฒเฅ เคชเฅเคฐเคถเฅเคจ
เคชเฅเคฐเคถเคฟเคเฅเคทเคฃ เคเฅเคกเคผเฅเค
เคเคเคเคฐเคจเฅเค เคเคชเคฒเคฌเฅเคง เคจเคนเฅเค
เคธเฅเคเคจเคพเคเค เคฒเคพเคจเฅ เคฎเฅเค เคคเฅเคฐเฅเคเคฟ
เคเฅเค เคธเฅเคเคจเคพเคเค เคจเคนเฅเค เคฎเคฟเคฒเฅเค
- <u>เค
เคจเฅเคตเคพเคฆ</u>
+ เค
เคจเฅเคตเคพเคฆ
เคญเคพเคทเคพเคเค
เคเคเฅ เคฌเคขเคผเฅเค
เคฐเคฆเฅเคฆ เคเคฐเฅเค
@@ -284,7 +284,7 @@
เคนเคพเคฒ เคเฅ เคเฅเคเฅเค
เคนเคพเคฒ เคฎเฅเค เคเฅเคเฅ เคเคฏเฅ เคชเฅเคฐเคถเฅเคจ
เคถเฅเคฐเฅเคฃเฅ เคฒเฅเคก เคเคฐเคคเฅ เคธเคฎเคฏ เคคเฅเคฐเฅเคเคฟ เคเคคเฅเคชเคจเฅเคจ เคนเฅเคเฅค
- เคฎเฅเคกเคฟเคฏเคพ
+ เคฎเฅเคกเคฟเคฏเคพ
เคถเฅเคฐเฅเคฃเคฟเคฏเคพเค
เคจเคฟเคฐเฅเคตเคพเคเคฟเคค
เคจเคเฅเคถเคพ
@@ -315,7 +315,7 @@
เคธเคพเคเคเฅเคฏเคฟเคเฅ
เคงเคจเฅเคฏเคตเคพเคฆ เคชเฅเคฐเคพเคชเฅเคค เคเคฟเคฏเคพ
เคจเคฟเคฐเฅเคตเคพเคเคฟเคค เคเคฟเคคเฅเคฐ
- เคธเฅเคคเคฐ
+ เคธเฅเคคเคฐ %d
เคเคฟเคคเฅเคฐ เค
เคชเคฒเฅเคก เคนเฅเค
เคเคฟเคคเฅเคฐเฅเค เคเฅ เคตเคพเคชเคธ เคจเคนเฅเค เคเคฟเคฏเคพ เคเคฏเคพ
เคเคชเคฏเฅเค เคนเฅเค เคเคฟเคคเฅเคฐ
diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml
index 79f266d8b..e977e56d5 100644
--- a/app/src/main/res/values-in/strings.xml
+++ b/app/src/main/res/values-in/strings.xml
@@ -4,6 +4,7 @@
* Akmaie Ajam
* Arifin.wijaya
* Birusian
+* Boesenbergia
* DARMAS BUDI SANTOSO
* Daud I.F. Argana
* Fafau06
@@ -295,7 +296,7 @@
Galat penyampaian pemberitahuan
Galat mengambil gambar untuk ditinjau. Tekan segarkan untuk coba lagi.
Pemberitahuan tidak ditemukan
- Terjemahkan
+ Pertalaghi
Bahasa
Pilih bahasa untuk terjemahan yang ingin Anda kirimkan
Lanjutkan
diff --git a/app/src/main/res/values-pa/strings.xml b/app/src/main/res/values-pa/strings.xml
index 11f917c3f..a017d11e0 100644
--- a/app/src/main/res/values-pa/strings.xml
+++ b/app/src/main/res/values-pa/strings.xml
@@ -10,8 +10,14 @@
-->
เจเจพเจฎเจจเจเจผ เจฎเจพเจฐเจเจพ
+ เจนเจตเจพเจฒเฉ เจเจฐเฉ
เจเฉฑเจ เจนเฉเจฐ เจตเฉเจฐเจตเจพ เจธเจผเจพเจฎเจฒ เจเจฐเฉ
เจจเจตเจพเจ เจฏเฉเจเจฆเจพเจจ เจธเจผเจพเจฎเจฒ เจเจฐเฉ
+ เจเฉเจฎเจฐเฉ เจฐเจพเจนเฉเจ เจฏเฉเจเจฆเจพเจจ เจธเจผเจพเจฎเจฒ เจเจฐเฉ
+ เจคเจธเจตเฉเจฐเจพเจ เจฐเจพเจนเฉเจ เจฏเฉเจเจฆเจพเจจ เจธเจผเจพเจฎเจฒ เจเจฐเฉ
+ เจธเฉเจฐเจเฉ
+ เจญเจพเจธเจผเจพ เจฆเจพ เจตเฉเจฐเจตเจพ
+ เจธเฉเจฐเจเฉ
เจตเฉเจฐเจตเจพ
เจคเจธเจตเฉเจฐ
เจธเจพเจฐเฉ
@@ -37,14 +43,19 @@
เจชเฉเจเฉเจฒ เจเจฐเฉ
เจฆเจฟเฉฑเจ
เจเจฎ
+ เจธเฉเจเจพเจ
+ เจชเจฐเจฆเฉเจฆเจพเจฐเฉ
เจตเจฟเจเฉเจฎเฉเจกเฉเจ เจเจพเจฎเจจเจเจผ
เจชเจธเฉฐเจฆเจพเจ
+ เจเฉเฉเจนเจพเจเจฃเจพ เจเจพเจฐเฉ เจ
เจตเจฐเจคเฉเจเจเจพเจฐ เจจเจพเจ
เจฒเฉฐเจ-เจธเจผเจฌเจฆ
เจฆเจพเจเจผเจฒ เจนเฉเจตเฉ
เจชเจพเจฐเจธเจผเจฌเจฆ เจญเฉเฉฑเจฒ เจเจ?
+ เจเจพเจคเจพ เจฌเจฃเจพเจ
เจฆเจพเจเจผเจฒเจพ เจนเฉ เจฐเจฟเจนเจพ เจนเฉ
เจเจกเฉเจเฉ เจเฉโฆ
+ เจธเฉเจฐเจเฉเจเจ เจ
เจคเฉ เจตเฉเจฐเจตเฉ เจจเจตเจฟเจเจ เจเจพ เจฐเจนเฉ เจนเจจ
เจเจฟเจฐเจชเจพ เจเจฐเจเฉ เจเจกเฉเจเฉ...
เจฆเจพเจเจผเจฒ เจนเฉเจฃเจพ เจธเจซเจผเจฒ!
เจฆเจพเจเจผเจฒ เจนเฉเจฃเจพ เจ
เจธเจซเจผเจฒ!
@@ -53,11 +64,13 @@
เจ
เฉฑเจชเจฒเฉเจก เจธเจผเฉเจฐเฉ เจนเฉเจเจ!
%1$s เจ
เฉฑเจชเจฒเฉเจก เจนเฉ เจเจ!
เจเจชเจฃเจพ เจ
เฉฑเจชเจฒเฉเจก เจตเฉเจเจฃ เจฒเจ เจฅเจชเฉเฉเฉ
- %1$s เจ
เฉฑเจชเจฒเฉเจก เจธเจผเฉเจฐเฉ เจเฉเจคเฉ เจเจพ เจฐเจนเฉ เจนเจจ
+ เจซเจพเจเจฒ เจเฉเฉเจนเจพเจ เจเจพ เจฐเจนเฉ เจ: %s
%1$s เจ
เฉฑเจชเจฒเฉเจก เจเฉเจคเฉ เจเจพ เจฐเจนเฉ เจนเจจ
%1$s เจฆเจพ เจ
เฉฑเจชเจฒเฉเจก เจเจผเจคเจฎ เจนเฉ เจฐเจฟเจนเจพ เจนเฉ
- %1$s เจฆเจพ เจ
เฉฑเจชเจฒเฉเจก เจซเฉเจฒเฉเจน เจนเฉเจเจ
+ %1$s เจจเฉเฉฐ เจเฉเฉเจนเจพเจเจฃ เจตเจฟเฉฑเจ เจจเจพเจเจพเจฎ
+ %1$s เจเฉเฉเจนเจพเจเจฃเจพ เจฐเฉเจเจฟเจ เจเจฟเจ
เจตเฉเจเจฃ เจฒเจ เจฅเจชเฉเฉเฉ
+ เจตเฉเจเจฃ เจฒเจ เจฅเจชเฉเฉเฉ
เจฎเฉเจฐเฉ เจ
เฉฑเจชเจฒเฉเจก
เจเจคเจพเจฐ เจตเจฟเจ
เจซเฉเจฒเฉเจน เจนเฉเจเจ
@@ -68,12 +81,17 @@
เจจเฉเฉเฉ-เจคเฉเฉเฉ
เจฎเฉเจฐเฉ เจ
เฉฑเจชเจฒเฉเจก
เจเฉเฉ เจฆเฉ เจจเจเจฒ เจเจฐเฉ
+ เจเฉเฉ เจจเฉเฉฐ เจเฉเฉฐเจขเฉ-เจคเจเจคเฉ เจเฉฑเจคเฉ เจจเจเจฒ เจเฉเจคเจพ เจเจฟเจ เจ
เจธเจพเจเจเจพ เจเจฐเฉ
+ เจซเจพเจเจฒ เจธเจซเจผเจพ เจตเฉเจเฉ
เจธเฉเจฐเจเฉ (เจฒเฉเฉเฉเจเจฆเฉ)
+ เจเจฟเจฐเจชเจพ เจเจฐเจเฉ เจเจธ เจซเจพเจเจฒ เจฒเจ เจเฉฑเจ เจธเฉเจฐเจเฉ เจฆเจฟเจ
เจตเฉเจฐเจตเจพ
+ เจธเฉเจฐเจเฉ
เจฆเจพเจเจผเจฒ เจนเฉเจฃ เจตเจฟเฉฑเจ เจ
เจธเจฎเจฐเฉฑเจฅ - เจจเฉเฉฑเจเจตเจฐเจ เจซเฉเจฒเฉเจน เจนเฉเจเจ เจนเฉ
เจฌเจนเฉเจค เจธเจพเจฐเฉเจเจ เจ
เจธเจซเจผเจฒ เจเฉเจธเจผเจฟเจธเจผเจพเจเฅค เจฅเฉเฉเฉเจนเฉ เจฆเฉเจฐ เจฌเจพเจ
เจฆ เจเฉเจธเจผเจฟเจธเจผ เจเจฐเฉ เจเฉเฅค
เจ
เจซเจผเจธเฉเจธ, เจเจน เจตเจฐเจคเฉเจเจเจพเจฐ เจจเฉเฉฐ เจเจพเจฎเจจเจเจผ เจคเฉ เจฐเฉเจ เจฒเจพเจ เจเจ เจนเฉเฅค
+ เจคเฉเจนเจพเจจเฉเฉฐ เจเจชเจฃเจพ เจฆเฉ-เจเจพเจฐเจ เจชเฉเจฐเจฎเจพเจฃเฉเจเจฐเจจ เจเฉเจก เจฆเฉเจฃเจพ เจชเจตเฉเจเจพเฅค
เจฆเจพเจเจผเจฒ เจนเฉเจฃเจพ เจ
เจธเจซเจผเจฒ!
เจเฉเฉเจนเจพเจ
เจเจธ เจธเฉเฉฑเจ เจจเฉเฉฐ เจจเจพเจ เจฆเจฟเจ
@@ -85,10 +103,12 @@
เจธเฉเจเฉ
เจซเจผเจฟเจฒเจนเจพเจฒ เจเฉเจ เจ
เฉฑเจชเจฒเฉเจก เจจเจนเฉเจ
%1$s เจจเจพเจฒเจผ เจฎเฉเจฒ เจเจพเจเจฆเฉ เจเฉเจ เจธเจผเฉเจฐเฉเจฃเฉ เจจเจนเฉเจ เจฒเฉฑเจญเฉ
+ %1$s เจจเจพเจฒ เจฎเฉเจฒ เจเจพเจเจฆเฉเจเจ เจเฉเจ เจตเจฟเจเฉเจกเจพเจเจพ เจเฉเจเจผเจพเจ เจจเจนเฉเจ เจฒเฉฑเจญเจฟเจเจเฅค
เจเจชเจฃเฉเจเจ เจคเจธเจตเฉเจฐเจพเจ เจจเฉเฉฐ เจตเจฟเจเฉเจฎเฉเจกเฉเจ เจเจพเจฎเจจเจเจผ เจตเจฟเจ เจเจผเจฟเจเจฆเจพ เจฒเฉฑเจญเจฃเจฏเฉเจ เจฌเจฃเจพเจเจฃ เจฒเจ เจธเจผเฉเจฐเฉเจฃเฉเจเจ เจเฉเฉเฉเฅค\n\nเจธเจผเฉเจฐเฉเจฃเฉเจเจ เจเฉเฉเจจ เจฒเจ เจเจพเจเจช เจเจฐเจจ เจ
เจฐเฉฐเจญ เจเจฐเฉเฅค\nเจเจธ เจเจพเจฐเจ เจจเฉเฉฐ เจ
เจฃเจกเจฟเฉฑเจ เจพ เจเจฐเจจ เจฒเจ เจเจน เจธเฉเจจเฉเจนเจพ เจฅเจชเฉเฉเฉ (เจเจพเจ เจตเจพเจชเจธเฉ เจฌเจเจจ เจฆเจฌเจพเจ)เฅค
เจธเจผเฉเจฐเฉเจฃเฉเจเจ
เจชเจธเฉฐเจฆเจพเจ
เจเจพเจคเจพ เจฌเจฃเจพเจ
+ เจตเจฟเจธเจผเฉเจธเจผ เจคเจธเจตเฉเจฐ
เจธเจผเฉเจฐเฉเจฃเฉ
เจเจธ เจฌเจพเจฐเฉ
เจ
เจเจผเจพเจฆ เจธเจฐเฉเจค เจธเจพเจซเจผเจเจตเฉเจ
เจฐ เจจเฉเฉฐ <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Apache License v2</a> เจ
เจงเฉเจจ เจเจพเจฐเฉ เจเฉเจคเจพ เจเจฟเจ เจนเฉ
@@ -105,9 +125,9 @@
เจฐเฉฑเจฆ เจเจฐเฉ
เจเจน เจคเจธเจตเฉเจฐ เจ
เฉฑเจชเจฒเฉเจก เจเจฐเจจ เจจเจพเจฒ เจนเฉ เจฎเฉเจ เจฆเจพเจ
เจตเจพ เจเจฐเจฆเจพ เจนเจพเจ/เจเจฐเจฆเฉ เจนเจพเจ เจเจฟ เจเจน เจฎเฉเจฐเจพ เจเจชเจฃเจพ เจเจพเจฐเจ เจนเฉ, เจเจฟ เจเจธ เจคเจนเจฟเจค เจเฉเจ เจเจพเจชเฉเจฐเจพเจเจ เจเจฒเฉฐเจเจฃเจพ เจจเจนเฉเจ เจเฉเจคเฉ เจเจ เจ
เจคเฉ <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">เจตเจฟเจเฉเจฎเฉเจกเฉเจ เจเจพเจฎเจจเจเจผ เจจเฉเจคเฉเจเจ</a> เจฎเฉเจคเจพเจฌเจฟเจ เจเจน เจ เฉเจ เจนเฉเฅค
เจกเจพเจเจจเจฒเฉเจก
- เจฒเจธเฉฐเจธ
- เจชเจนเจฟเจฒเจพเจ เจตเจพเจฒเจพ เจธเจฟเจฐเจฒเฉเจ/เจเจพเจฃเจเจพเจฐเฉ เจตเจฐเจคเฉ
- เจฐเจพเจค เจฆเจพ เจ
เฉฐเจฆเจพเจเจผ
+ เจฎเฉเจฒ เจฒเจธเฉฐเจธ
+ เจชเจฟเจเจฒเฉ เจธเจฟเจฐเจฒเฉเจ เจ
เจคเฉ เจตเฉเจฐเจตเฉ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเฉ
+ เจตเจฟเจธเจผเจพ-เจตเจธเจคเฉ
Attribution-ShareAlike 4.0
Attribution 4.0
CC Attribution-ShareAlike 3.0
@@ -120,8 +140,14 @@
เจตเจฟเจเฉเจฎเฉเจกเฉเจ เจเจพเจฎเจจเจเจผ เจเจผเจฟเจเจฆเจพเจคเจฐ เจเจน เจคเจธเจตเฉเจฐเจพเจ เจฆเจพ เจญเฉฐเจกเจพเจฐ เจนเฉ เจเฉ เจตเจฟเจเฉเจชเฉเจกเฉเจ \'เจคเฉ เจตเจฐเจคเฉเจเจ เจเจพเจเจฆเฉเจเจ เจนเจจเฅค
เจคเฉเจนเจพเจกเฉเจเจ เจคเจธเจตเฉเจฐเจพเจ เจตเจฟเจธเจผเจต เจฆเฉ เจฌเจพเจเฉ เจฒเฉเจเจพเจ เจจเฉเฉฐ เจธเจฟเฉฑเจเจฟเจ
เจค เจเจฐเจจ เจฒเจ เจธเจนเจพเจ เจนเจจ!
เจเจฟเจฐเจชเจพ เจเจฐเจเฉ เจเจน เจคเจธเจตเฉเจฐเจพเจ เจจเฉเฉฐ เจเฉเฉเจนเจพเจ เจเฉ เจคเฉเจนเจพเจกเฉ เจตเฉฑเจฒเฉเจ เจฒเจเจเจ เจเจเจเจ เจนเจจ เจเจพเจ เจฌเจฃเจพเจเจเจ เจเจเจเจ เจนเจจ:
+ เจเฉเจฆเจฐเจคเฉ เจตเจธเจคเฉเจเจ (เจซเฉเฉฑเจฒ, เจเจพเจจเจตเจฐ, เจชเจนเจพเฉ)
+ เจฒเจพเจนเฉเจตเฉฐเจฆ เจตเจธเจคเฉเจเจ (เจธเฉเจเจฒ, เจฐเฉเจฒ เจ
เฉฑเจกเจพ)
+ เจฎเจธเจผเจนเฉเจฐ เจฒเฉเจ (เจคเฉเจนเจพเจกเฉ mayor, เจเจฒเฉฐเจชเจฟเจ เจเจฟเจกเจพเจฐเฉ เจเจฟเจจเฉเจนเจพเจ เจจเฉเฉฐ เจคเฉเจธเฉเจ เจฎเจฟเจฒเฉ เจธเฉ)
เจเจฟเจฐเจชเจพ เจเจฐเจเฉ เจ
เจชเจฒเฉเจก เจจเจพ เจเจฐเฉ:
+ เจคเฉเจนเจพเจกเฉ เจฆเฉเจธเจคเจพเจ เจฆเฉเจเจ เจธเฉเจฒเจซเจผเฉเจเจ เจเจพเจ เจคเจธเจตเฉเจฐเจพเจ
เจเจฆเจพเจนเจฐเจฃ เจตเจเฉเจ เจเจน เจ
เจชเจฒเฉเจก:
+ เจธเจฟเจฐเจฒเฉเจ: เจธเจฟเจกเจจเฉ เจเจชเฉเจฐเจพ เจนเจพเจเจธ
+ เจตเฉเจฐเจตเจพ: เจธเจฟเจกเจจเฉ เจเจชเฉเจฐเจพ เจนเจพเจเจธ เจเจฟเจตเฉเจ เจเจพเฉเฉ เจฆเฉ เจชเจพเจฐ เจคเฉเจ เจฆเจฟเจเจฆเจพ เจ
เจเจชเจฃเฉเจเจ เจคเจธเจตเฉเจฐเจพเจ เจฆเจพ เจฏเฉเจเจฆเจพเจจ เจชเจพเจเฅค เจตเจฟเจเฉเจชเฉเจกเฉเจ เจฒเฉเจเจพเจ เจจเฉเฉฐ เจธเฉเจฐเจเฉเจค เจเจฐ เจฆเจฟเจ!
เจตเจฟเจเฉเจชเฉเจกเฉเจ เจเจคเจฒเฉเจเจ เจคเจธเจตเฉเจฐเจพเจ เจตเจฟเจเฉเจฎเฉเจกเฉเจ เจเจพเจฎเจจเจเจผ เจคเฉเจ เจเจเจเจฆเฉเจเจ เจนเจจ
เจคเฉเจนเจพเจกเฉเจเจ เจคเจธเจตเฉเจฐเจพเจ เจฆเฉเจจเฉเจเจ เจญเจฐ เจฆเฉ เจฒเฉเจเจพเจ เจจเฉเฉฐ เจชเฉเฉเจนเจจ เจตเจฟเจ เจฎเจฆเจฆ เจเจฐเจฆเฉเจเจ เจนเจจเฅค
@@ -132,6 +158,7 @@
เจธเจผเฉเจฐเฉเจฃเฉเจเจ
เจฒเฉฑเจฆ เจฐเจฟเจนเจพ เจนเฉ...
เจเฉเจ เจตเฉ เจจเจนเฉเจ เจเฉเจฃเจฟเจ
+ เจเฉเจ เจธเฉเจฐเจเฉ เจจเจนเฉเจ
เจเฉเจ เจตเฉเจฐเจตเจพ เจจเจนเฉเจ
เจเฉเจ เจเฉฑเจฒเจฌเจพเจค เจจเจนเฉเจ
เจ
เจฃเจเจพเจฃ เจฒเจธเฉฐเจธ
@@ -139,8 +166,10 @@
เจเจเจฟเจ เจเจพเจนเฉเจฆเฉ เจนเฉ: เจฌเจพเจนเจฐเฉ เจธเจเฉเจฐเฉเจ เจฌเจพเจฐเฉเฅค เจเจธ เจคเฉเจ เจฌเจฟเจจเจพเจ เจเจช เจเจพเจฐเจ เจจเจนเฉเจ เจเจฐ เจธเจเฉเจเฉเฅค
เจ เฉเจ เจนเฉ
เจเจผเจฌเจฐเจฆเจพเจฐ
+ เจเฉเฉเจนเจพเจ
เจนเจพเจ
เจจเจนเฉเจ
+ เจธเฉเจฐเจเฉ
เจธเจฟเจฐเจฒเฉเจ
เจตเฉเจฐเจตเจพ
เจเฉฑเจฒเจฌเจพเจค
diff --git a/app/src/main/res/values-qq/strings.xml b/app/src/main/res/values-qq/strings.xml
index 9417f90ec..71eea66e4 100644
--- a/app/src/main/res/values-qq/strings.xml
+++ b/app/src/main/res/values-qq/strings.xml
@@ -3,6 +3,7 @@
* A100Star
* Ajeje Brazorf
* Amire80
+* Annick green
* Cabal
* Googology
* LeGuyanaisPure
@@ -27,6 +28,7 @@
{{Identical|Submit}}
{{identical|All}}
+ Reba ishakiro
Status text about number of uploads left.\n* %1$d represents number of uploads left, including current one
See the current issue [https://phabricator.wikimedia.org/T267142 T267142] tracked in Phabricator about the <code><nowiki>|zero=</nowiki></code> option currently not supported on Translatewiki.net with the custom <code><nowiki>{{PLURAL}}</nowiki></code> rules used by this project for Android, using a non-MediaWiki syntax.
{{Identical|Upload}}
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index 371744b44..2fde6f007 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -821,4 +821,6 @@
Bildtext
Bildtext kopierades till urklipp
Grattis! Alla bilder i detta album har antingen laddats upp eller markerats fรถr att inte laddas upp.
+ Visa i \"Utforska\"
+ Visa i \"I nรคrheten\"