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\"