diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 7aab3fb4e331226065e513841448ffbc68f8a2b6..5b75aebd94871c4b9fd4b57f986af43e1fafc09e 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,18 +1,44 @@ <!-- Thank you for supporting us with your Pull Request! 🙌 â¤ï¸ Before submitting, please take the time to check the points below and provide some descriptive information. + +Remove the checklist after fulfilling all the relevant points, and before creating the PR, thank you. --> -## Checklist +### Checklist + +__Thank you for this this PR! Please consider the following:__ + +* To the _Community_ :heart:: + * Please link to an issue ticket where your code change has been greenlit, otherwise it's unlikely it can be merged. + * Use a descriptive title: {task_name} (closes #{issue_number}), e.g.: `Use logger (closes # 41)`. + * If this PR comes from a fork, please [Allow edits from maintainers](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/allowing-changes-to-a-pull-request-branch-created-from-a-fork) + * The PR can not contain changes in localization files, e.g. `values-[LANGUAGE-CODE]/strings/*` and `/` or `assets/*` (see [#332](https://github.com/corona-warn-app/cwa-app-android/issues/332) for further information). +* To the _Maintainers_ :coffee:: + * Title structure: `Jira ticket name (EXPOSUREAPP-XXXX)`. + * Set labels: `maintainers`, `sprintX`. + * Update Jira status: `In Review`. + * Fulfill internal `Acceptance Criteria`. + * If mentioned in the Jira ticket link all corresponding GitHub issues in the sidebar. +* To _everyone_ :world_map:: + * Describe your changes in detail, if you changed the UI, screenshots or GIFs would be awesome! + * Short step by step instructions help the reviewer test your changes, e.g. how to navigate to a new UI element you added. + * The PR _won't be reviewed_ if CircleCi is failing or if there are merge conflicts. If Circle CI is still failing mark the PR as a draft and write a little comment on your status. + * Provide at least a few unit and/or instrumentation tests. + * Use a meaning full branch name. Use either `fix` or `feature` as prefix for your branch, e.g. `fix/prevent-npe-on-device-rotation-issue_123` + * Test your changes thoroughly. Only open PRs which you think is ready to be merged. If you explicitly need feedback mark the PR as `DRAFT` on Github. + * Don't introduce unrelated code reformatting (e.g., on-save hooks in your IDE) + * Remove this checklist before creating your pull request. -* [ ] Test your changes as thoroughly as possible before you commit them. Preferably, automate your test by unit/integration tests. -* [ ] If this PR comes from a fork, please [Allow edits from maintainers](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/allowing-changes-to-a-pull-request-branch-created-from-a-fork) -* [ ] Set a speaking title. Format: {task_name} (closes #{issue_number}). For example: Use logger (closes # 41) -* [ ] [Link your Pull Request to an issue](https://help.github.com/en/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue) - Pull Requests that are not linked to an issue with you as an assignee will be closed, except for minor fixes for typos or grammar mistakes in *documentation or code comments*. -* [ ] Create Work In Progress [WIP] pull requests only if you need clarification or an explicit review before you can continue your work item. -* [ ] Make sure that your PR is not introducing _unnecessary_ reformatting (e.g., introduced by on-save hooks in your IDE) -* [ ] Make sure that your PR does not contain changes in text files, therefore the PR must not contain changes in values/strings/* and / or assets/* (see issue #332 for further information) -* [ ] Make sure that your PR does not contain compiled sources (already set by the default .gitignore) and / or binary files +### Description -## Description -<!-- Please be brief in describing which issue is solved by your PR or which enhancement it brings --> +<!-- +Please be brief in describing which issue is solved by your PR or which enhancement it brings. Link related issues! +--> + +### Steps to reproduce +<!-- +How can your changes be tested? +1. First step +2. Second step + --> diff --git a/CODEOWNERS b/CODEOWNERS index 32e4e4c272321c258ca23796e68cee4d04f18706..8111becb3ac79ded1372847d6f8367bbe784c836 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -6,3 +6,6 @@ # These are the default owners for the whole content of this repository. The default owners are automatically added as reviewers when you open a pull request, unless different owners are specified in the file. * @corona-warn-app/cwa-app-android-maintainers + +# Code Onwer of all german texts +/Corona-Warn-App/src/main/res/values-de/ @janetback diff --git a/Corona-Warn-App/config/detekt.yml b/Corona-Warn-App/config/detekt.yml index 1a5fd4a6d97d1f13e143788f0f59c9d3b2bdc5cc..2555aa687375ea096032184e62adfedd4ce03604 100644 --- a/Corona-Warn-App/config/detekt.yml +++ b/Corona-Warn-App/config/detekt.yml @@ -572,7 +572,7 @@ style: excludedFunctions: 'equals' excludeLabeled: false excludeReturnFromLambda: true - excludeGuardClauses: false + excludeGuardClauses: true SafeCast: active: true SerialVersionUIDInSerializableClass: diff --git a/Corona-Warn-App/src/deviceForTesters/java/de.rki.coronawarnapp/RiskLevelAndKeyRetrievalBenchmark.kt b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/RiskLevelAndKeyRetrievalBenchmark.kt similarity index 100% rename from Corona-Warn-App/src/deviceForTesters/java/de.rki.coronawarnapp/RiskLevelAndKeyRetrievalBenchmark.kt rename to Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/RiskLevelAndKeyRetrievalBenchmark.kt diff --git a/Corona-Warn-App/src/deviceForTesters/java/de.rki.coronawarnapp/TestForAPIFragment.kt b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/TestForAPIFragment.kt similarity index 99% rename from Corona-Warn-App/src/deviceForTesters/java/de.rki.coronawarnapp/TestForAPIFragment.kt rename to Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/TestForAPIFragment.kt index 1e457e5ad9ffc2540e8174ae4f76c16c102251d3..ae0e2409c30d6620ca870e1c804549f3c6addb9d 100644 --- a/Corona-Warn-App/src/deviceForTesters/java/de.rki.coronawarnapp/TestForAPIFragment.kt +++ b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/TestForAPIFragment.kt @@ -1,4 +1,4 @@ -package de.rki.coronawarnapp +package de.rki.coronawarnapp.test import android.content.Context import android.content.Intent @@ -32,6 +32,8 @@ import com.google.zxing.BarcodeFormat import com.google.zxing.integration.android.IntentIntegrator import com.google.zxing.integration.android.IntentResult import com.google.zxing.qrcode.QRCodeWriter +import de.rki.coronawarnapp.R +import de.rki.coronawarnapp.RiskLevelAndKeyRetrievalBenchmark import de.rki.coronawarnapp.databinding.FragmentTestForAPIBinding import de.rki.coronawarnapp.diagnosiskeys.server.LocationCode import de.rki.coronawarnapp.exception.ExceptionCategory diff --git a/Corona-Warn-App/src/deviceForTesters/java/de.rki.coronawarnapp/TestRiskLevelCalculation.kt b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/TestRiskLevelCalculationFragment.kt similarity index 98% rename from Corona-Warn-App/src/deviceForTesters/java/de.rki.coronawarnapp/TestRiskLevelCalculation.kt rename to Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/TestRiskLevelCalculationFragment.kt index 945ddca4e51056974f6f2100f37dc309eb9129e9..f375c7b4707a9036a921d275d37c1a0feec9368c 100644 --- a/Corona-Warn-App/src/deviceForTesters/java/de.rki.coronawarnapp/TestRiskLevelCalculation.kt +++ b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/TestRiskLevelCalculationFragment.kt @@ -1,4 +1,4 @@ -package de.rki.coronawarnapp +package de.rki.coronawarnapp.test import android.content.Intent import android.os.Bundle @@ -15,6 +15,7 @@ import com.google.android.gms.nearby.Nearby import com.google.android.gms.nearby.exposurenotification.ExposureInformation import com.google.zxing.integration.android.IntentIntegrator import com.google.zxing.integration.android.IntentResult +import de.rki.coronawarnapp.CoronaWarnApplication import de.rki.coronawarnapp.databinding.FragmentTestRiskLevelCalculationBinding import de.rki.coronawarnapp.exception.ExceptionCategory import de.rki.coronawarnapp.exception.TransactionException @@ -50,9 +51,9 @@ import kotlin.coroutines.resumeWithException import kotlin.coroutines.suspendCoroutine @Suppress("MagicNumber", "LongMethod") -class TestRiskLevelCalculation : Fragment() { +class TestRiskLevelCalculationFragment : Fragment() { companion object { - val TAG: String? = TestRiskLevelCalculation::class.simpleName + val TAG: String? = TestRiskLevelCalculationFragment::class.simpleName } private val tracingViewModel: TracingViewModel by activityViewModels() diff --git a/Corona-Warn-App/src/deviceForTesters/java/de.rki.coronawarnapp/ui/main/MainFragment.kt b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/ui/main/MainFragment.kt similarity index 98% rename from Corona-Warn-App/src/deviceForTesters/java/de.rki.coronawarnapp/ui/main/MainFragment.kt rename to Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/ui/main/MainFragment.kt index e5a2150a53f111813134527a4488ed47ab2d9b80..7565b87826f75fa39bcfb224fdeeb84b26a705c5 100644 --- a/Corona-Warn-App/src/deviceForTesters/java/de.rki.coronawarnapp/ui/main/MainFragment.kt +++ b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/ui/main/MainFragment.kt @@ -154,6 +154,8 @@ class MainFragment : Fragment() { private fun showPopup(view: View) { val popup = PopupMenu(requireContext(), view) popup.inflate(R.menu.menu_main) + // TODO we shouldn't have to duplicate the whole fragment to add these items + // In the future we'd like a DI'ed class that changes the navigation for this MainFragment? popup.setOnMenuItemClickListener { return@setOnMenuItemClickListener when (it.itemId) { R.id.menu_help -> { diff --git a/Corona-Warn-App/src/deviceForTesters/res/navigation/nav_graph.xml b/Corona-Warn-App/src/deviceForTesters/res/navigation/nav_graph.xml index ab141166063708ffd82c9de17d5ba4de7532c1f2..29c72aa41190ca9bb3b03a6318f1e155d74c97f9 100644 --- a/Corona-Warn-App/src/deviceForTesters/res/navigation/nav_graph.xml +++ b/Corona-Warn-App/src/deviceForTesters/res/navigation/nav_graph.xml @@ -174,7 +174,7 @@ <!-- Submission --> <fragment android:id="@+id/testForAPIFragment" - android:name="de.rki.coronawarnapp.TestForAPIFragment" + android:name="de.rki.coronawarnapp.test.TestForAPIFragment" android:label="@layout/fragment_test_for_a_p_i" tools:layout="@layout/fragment_test_for_a_p_i" /> @@ -315,7 +315,7 @@ </fragment> <fragment android:id="@+id/testRiskLevelCalculation" - android:name="de.rki.coronawarnapp.TestRiskLevelCalculation" + android:name="de.rki.coronawarnapp.test.TestRiskLevelCalculationFragment" android:label="fragment_test_risk_level_calculation" tools:layout="@layout/fragment_test_risk_level_calculation" /> </navigation> diff --git a/Corona-Warn-App/src/main/assets/terms_de.html b/Corona-Warn-App/src/main/assets/terms_de.html index 2f78ac0d620e2273b6e8662a8fce2e9bd3315826..8c0051547e248925cff81e64c3554d3e19fbe902 100644 --- a/Corona-Warn-App/src/main/assets/terms_de.html +++ b/Corona-Warn-App/src/main/assets/terms_de.html @@ -204,7 +204,7 @@ <p> Nähe zur infizierten Person, basierend auf der gemessenen Dämpfung des BluetoothSignals (<em>signal attenuation</em>) sowie ggf. - Übertragungsrisiken (<em>transmission risk</em> berücksichtigt. Auf dieser + Übertragungsrisiken (<em>transmission risk</em>) berücksichtigt. Auf dieser Basis wird Ihnen in der App entweder ein "niedriges Risiko" oder ein "erhöhtes Risiko" angezeigt. Es handelt sich hierbei um einen rein indikativen Wert auf der Grundlage der erfassten Daten. @@ -811,4 +811,4 @@ </p> <p> * * * -</p> \ No newline at end of file +</p> diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/config/HTTPVariables.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/config/HTTPVariables.kt index 4939bf675565a6365f9eee6316b1506dbd356a3f..72a3dad134fc7e3dba2eac9e60e1abf9db97dcf0 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/config/HTTPVariables.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/config/HTTPVariables.kt @@ -5,7 +5,7 @@ object HTTPVariables { * The maximal runtime of a transaction * In milliseconds */ - private const val HTTP_CONNECTION_TIMEOUT = 10000L + private const val HTTP_CONNECTION_TIMEOUT = 20000L /** * Getter function for [HTTP_CONNECTION_TIMEOUT] @@ -19,7 +19,7 @@ object HTTPVariables { * The maximal runtime of a transaction * In milliseconds */ - private const val HTTP_READ_TIMEOUT = 10000L + private const val HTTP_READ_TIMEOUT = 20000L /** * Getter function for [HTTP_READ_TIMEOUT] @@ -33,7 +33,7 @@ object HTTPVariables { * The maximal runtime of a transaction * In milliseconds */ - private const val HTTP_WRITE_TIMEOUT = 10000L + private const val HTTP_WRITE_TIMEOUT = 20000L /** * Getter function for [HTTP_WRITE_TIMEOUT] diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/InternalExposureNotificationClient.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/InternalExposureNotificationClient.kt index 09116212874bca048077fac935e2368b015ce8d9..020dd1d4065eaa2df04500b4a2c7561a38ba4f2c 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/InternalExposureNotificationClient.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/InternalExposureNotificationClient.kt @@ -92,6 +92,15 @@ object InternalExposureNotificationClient { } } + suspend fun getVersion(): Long = suspendCoroutine { cont -> + exposureNotificationClient.version + .addOnSuccessListener { + cont.resume(it) + }.addOnFailureListener { + cont.resumeWithException(it) + } + } + /** * Takes an ExposureConfiguration object. Inserts a list of files that contain key * information into the on-device database. Provide the keys of confirmed cases retrieved diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/TimeVariables.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/TimeVariables.kt index 1857d1273d104960dc38bbc1b253818e580ea4ab..a12d781a1efe959434411f4d94d8a3ee3c4b0af5 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/TimeVariables.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/TimeVariables.kt @@ -34,7 +34,7 @@ object TimeVariables { * The maximal runtime of a transaction * In milliseconds */ - private const val TRANSACTION_TIMEOUT = 60000L + private const val TRANSACTION_TIMEOUT = 180000L /** * Getter function for [TRANSACTION_TIMEOUT] diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/service/submission/QRScanResult.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/service/submission/QRScanResult.kt new file mode 100644 index 0000000000000000000000000000000000000000..783ec13a29ac5895765b53c0de7e47b19843807b --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/service/submission/QRScanResult.kt @@ -0,0 +1,32 @@ +package de.rki.coronawarnapp.service.submission + +import java.util.regex.Pattern + +data class QRScanResult(val rawResult: String) { + + val isValid: Boolean + get() = guid != null + val guid: String? by lazy { extractGUID(rawResult) } + + private fun extractGUID(rawResult: String): String? { + if (rawResult.length > MAX_QR_CODE_LENGTH) return null + if (rawResult.count { it == GUID_SEPARATOR } != 1) return null + if (!QR_CODE_REGEX.toRegex().matches(rawResult)) return null + + val potentialGUID = rawResult.substringAfterLast(GUID_SEPARATOR, "") + if (potentialGUID.isBlank() || potentialGUID.length > MAX_GUID_LENGTH) return null + + return potentialGUID + } + + companion object { + // regex pattern for scanned QR code URL + val QR_CODE_REGEX: Pattern = Pattern.compile( + "^((^https:\\/{2}localhost)(\\/\\?)[A-Fa-f0-9]{6}" + + "[-][A-Fa-f0-9]{8}[-][A-Fa-f0-9]{4}[-][A-Fa-f0-9]{4}[-][A-Fa-f0-9]{4}[-][A-Fa-f0-9]{12})\$" + ) + const val GUID_SEPARATOR = '?' + const val MAX_QR_CODE_LENGTH = 150 + const val MAX_GUID_LENGTH = 80 + } +} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/service/submission/SubmissionConstants.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/service/submission/SubmissionConstants.kt index 4ab4045084e1622f85f212ac4909f25a604ae984..43de684e2e6535aa2253b3198c82022b8af88991 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/service/submission/SubmissionConstants.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/service/submission/SubmissionConstants.kt @@ -14,10 +14,6 @@ object SubmissionConstants { val TEST_RESULT_URL = "$VERSIONED_VERIFICATION_CDN_URL/$TEST_RESULT" val TAN_REQUEST_URL = "$VERSIONED_VERIFICATION_CDN_URL/$TAN" - const val MAX_QR_CODE_LENGTH = 150 - const val MAX_GUID_LENGTH = 80 - const val GUID_SEPARATOR = '?' - const val SERVER_ERROR_CODE_400 = 400 const val EMPTY_HEADER = "" diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/service/submission/SubmissionService.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/service/submission/SubmissionService.kt index defce20ed3566931a323c6756791038c801482da..e33668fa5ddabfdda14f8a7564555a5fff992786 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/service/submission/SubmissionService.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/service/submission/SubmissionService.kt @@ -65,19 +65,10 @@ object SubmissionService { } fun containsValidGUID(scanResult: String): Boolean { - if (scanResult.length > SubmissionConstants.MAX_QR_CODE_LENGTH || - scanResult.count { it == SubmissionConstants.GUID_SEPARATOR } != 1 - ) - return false - - val potentialGUID = extractGUID(scanResult) - - return !(potentialGUID.isEmpty() || potentialGUID.length > SubmissionConstants.MAX_GUID_LENGTH) + val scanResult = QRScanResult(scanResult) + return scanResult.isValid } - fun extractGUID(scanResult: String): String = - scanResult.substringAfterLast(SubmissionConstants.GUID_SEPARATOR, "") - fun storeTestGUID(guid: String) = LocalData.testGUID(guid) fun deleteTestGUID() { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt index 889ab566942df188a9780255f3301afafc45daa3..48bc37e409fea1553cc046a816338afa94529ee2 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt @@ -6,6 +6,7 @@ import de.rki.coronawarnapp.CoronaWarnApplication import de.rki.coronawarnapp.R import de.rki.coronawarnapp.risk.RiskLevel import de.rki.coronawarnapp.util.security.SecurityHelper.globalEncryptedSharedPreferencesInstance +import org.joda.time.Instant import java.util.Date /** @@ -18,6 +19,11 @@ object LocalData { private val TAG: String? = LocalData::class.simpleName + private const val PREFERENCE_NEXT_TIME_RATE_LIMITING_UNLOCKS = + "preference_next_time_rate_limiting_unlocks" + private const val PREFERENCE_GOOGLE_API_PROVIDE_DIAGNOSIS_KEYS_CALL_COUNT = + "preference_google_api_provide_diagnosis_keys_call_count" + /**************************************************** * ONBOARDING DATA ****************************************************/ @@ -390,6 +396,40 @@ object LocalData { } } + var nextTimeRateLimitingUnlocks: Instant + get() { + return Instant.ofEpochMilli( + getSharedPreferenceInstance().getLong( + PREFERENCE_NEXT_TIME_RATE_LIMITING_UNLOCKS, + 0L + ) + ) + } + set(value) { + getSharedPreferenceInstance().edit(true) { + putLong( + PREFERENCE_NEXT_TIME_RATE_LIMITING_UNLOCKS, + value.millis + ) + } + } + + var googleAPIProvideDiagnosisKeysCallCount: Int + get() { + return getSharedPreferenceInstance().getInt( + PREFERENCE_GOOGLE_API_PROVIDE_DIAGNOSIS_KEYS_CALL_COUNT, + 0 + ) + } + set(value) { + getSharedPreferenceInstance().edit(true) { + putInt( + PREFERENCE_GOOGLE_API_PROVIDE_DIAGNOSIS_KEYS_CALL_COUNT, + value + ) + } + } + /** * Gets the last time of successful risk level calculation as long * from the EncryptedSharedPrefs diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/RetrieveDiagnosisInjectionHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/RetrieveDiagnosisInjectionHelper.kt index ee6c36d9f96b314781cfc8224b5f1e5f20a1519a..69598eedc3bdd08e445d4f317330285a3d009b84 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/RetrieveDiagnosisInjectionHelper.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/RetrieveDiagnosisInjectionHelper.kt @@ -1,10 +1,12 @@ package de.rki.coronawarnapp.transaction +import de.rki.coronawarnapp.util.GoogleAPIVersion import javax.inject.Inject import javax.inject.Singleton // TODO Remove once we have refactored the transaction and it's no longer a singleton @Singleton data class RetrieveDiagnosisInjectionHelper @Inject constructor( - val transactionScope: TransactionCoroutineScope + val transactionScope: TransactionCoroutineScope, + val googleAPIVersion: GoogleAPIVersion ) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/RetrieveDiagnosisKeysTransaction.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/RetrieveDiagnosisKeysTransaction.kt index 06bd08ecd9a97be2c689304f5c28cf92db7abc49..77e4492eda4d5205a02d4a92649258dd843d6fd0 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/RetrieveDiagnosisKeysTransaction.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/RetrieveDiagnosisKeysTransaction.kt @@ -30,17 +30,23 @@ import de.rki.coronawarnapp.transaction.RetrieveDiagnosisKeysTransaction.Retriev import de.rki.coronawarnapp.transaction.RetrieveDiagnosisKeysTransaction.RetrieveDiagnosisKeysTransactionState.CLOSE import de.rki.coronawarnapp.transaction.RetrieveDiagnosisKeysTransaction.RetrieveDiagnosisKeysTransactionState.FETCH_DATE_UPDATE import de.rki.coronawarnapp.transaction.RetrieveDiagnosisKeysTransaction.RetrieveDiagnosisKeysTransactionState.FILES_FROM_WEB_REQUESTS +import de.rki.coronawarnapp.transaction.RetrieveDiagnosisKeysTransaction.RetrieveDiagnosisKeysTransactionState.QUOTA_CALCULATION import de.rki.coronawarnapp.transaction.RetrieveDiagnosisKeysTransaction.RetrieveDiagnosisKeysTransactionState.RETRIEVE_RISK_SCORE_PARAMS import de.rki.coronawarnapp.transaction.RetrieveDiagnosisKeysTransaction.RetrieveDiagnosisKeysTransactionState.SETUP import de.rki.coronawarnapp.transaction.RetrieveDiagnosisKeysTransaction.RetrieveDiagnosisKeysTransactionState.TOKEN import de.rki.coronawarnapp.transaction.RetrieveDiagnosisKeysTransaction.rollback import de.rki.coronawarnapp.transaction.RetrieveDiagnosisKeysTransaction.start import de.rki.coronawarnapp.util.CWADebug +import de.rki.coronawarnapp.util.GoogleAPIVersion +import de.rki.coronawarnapp.util.GoogleQuotaCalculator +import de.rki.coronawarnapp.util.QuotaCalculator import de.rki.coronawarnapp.util.di.AppInjector import de.rki.coronawarnapp.worker.BackgroundWorkHelper import org.joda.time.DateTime import org.joda.time.DateTimeZone +import org.joda.time.Duration import org.joda.time.Instant +import org.joda.time.chrono.GJChronology import timber.log.Timber import java.io.File import java.util.Date @@ -91,6 +97,9 @@ object RetrieveDiagnosisKeysTransaction : Transaction() { /** Initial Setup of the Transaction and Transaction ID Generation and Date Lock */ SETUP, + /** calculates the Quota so that the rate limiting is caught gracefully*/ + QUOTA_CALCULATION, + /** Initialisation of the identifying token used during the entire transaction */ TOKEN, @@ -119,6 +128,8 @@ object RetrieveDiagnosisKeysTransaction : Transaction() { /** atomic reference for the rollback value for created files during the transaction */ private val exportFilesForRollback = AtomicReference<List<File>>() + private val progressTowardsQuotaForRollback = AtomicReference<Int>() + private val transactionScope: TransactionCoroutineScope by lazy { AppInjector.component.transRetrieveKeysInjection.transactionScope } @@ -135,12 +146,27 @@ object RetrieveDiagnosisKeysTransaction : Transaction() { var onKeyFilesDownloadStarted: (() -> Unit)? = null var onKeyFilesDownloadFinished: ((keyCount: Int, fileSize: Long) -> Unit)? = null + private const val QUOTA_RESET_PERIOD_IN_HOURS = 24 + + private val quotaCalculator: QuotaCalculator<Int> = GoogleQuotaCalculator( + incrementByAmount = 14, + quotaLimit = 20, + quotaResetPeriod = Duration.standardHours(QUOTA_RESET_PERIOD_IN_HOURS.toLong()), + quotaTimeZone = DateTimeZone.UTC, + quotaChronology = GJChronology.getInstanceUTC() + ) + + private val googleAPIVersion: GoogleAPIVersion by lazy { + AppInjector.component.transRetrieveKeysInjection.googleAPIVersion + } + suspend fun startWithConstraints() { val currentDate = DateTime(Instant.now(), DateTimeZone.UTC) val lastFetch = DateTime( LocalData.lastTimeDiagnosisKeysFromServerFetch(), DateTimeZone.UTC ) + if (LocalData.lastTimeDiagnosisKeysFromServerFetch() == null || currentDate.withTimeAtStartOfDay() != lastFetch.withTimeAtStartOfDay() ) { @@ -175,6 +201,18 @@ object RetrieveDiagnosisKeysTransaction : Transaction() { ****************************************************/ val currentDate = executeSetup() + /**************************************************** + * CALCULATE QUOTA FOR PROVIDE DIAGNOSIS KEYS + ****************************************************/ + val hasExceededQuota = executeQuotaCalculation() + + // When we are above the Quote, cancel the execution entirely + if (hasExceededQuota) { + Timber.tag(TAG).w("above quota, skipping RetrieveDiagnosisKeys") + executeClose() + return@lockAndExecute + } + /**************************************************** * RETRIEVE TOKEN ****************************************************/ @@ -247,8 +285,9 @@ object RetrieveDiagnosisKeysTransaction : Transaction() { if (TOKEN.isInStateStack()) { rollbackToken() } - if (FILES_FROM_WEB_REQUESTS.isInStateStack()) { - rollbackFilesFromWebRequests() + // we reset the quota only if the submission has not happened yet + if (QUOTA_CALCULATION.isInStateStack() && !API_SUBMISSION.isInStateStack()) { + rollbackProgressTowardsQuota() } } catch (e: Exception) { // We handle every exception through a RollbackException to make sure that a single EntryPoint @@ -267,9 +306,9 @@ object RetrieveDiagnosisKeysTransaction : Transaction() { LocalData.googleApiToken(googleAPITokenForRollback.get()) } - private suspend fun rollbackFilesFromWebRequests() { - Timber.tag(TAG).v("rollback $FILES_FROM_WEB_REQUESTS") - keyCacheRepository.clear() + private fun rollbackProgressTowardsQuota() { + Timber.tag(TAG).v("rollback $QUOTA_CALCULATION") + quotaCalculator.resetProgressTowardsQuota(progressTowardsQuotaForRollback.get()) } /** @@ -282,6 +321,16 @@ object RetrieveDiagnosisKeysTransaction : Transaction() { currentDate } + /** + * Executes the QUOTA_CALCULATION Transaction State + */ + private suspend fun executeQuotaCalculation() = executeState( + QUOTA_CALCULATION + ) { + progressTowardsQuotaForRollback.set(quotaCalculator.getProgressTowardsQuota()) + quotaCalculator.calculateQuota() + } + /** * Executes the TOKEN Transaction State */ @@ -322,11 +371,21 @@ object RetrieveDiagnosisKeysTransaction : Transaction() { exportFiles: Collection<File>, exposureConfiguration: ExposureConfiguration? ) = executeState(API_SUBMISSION) { - InternalExposureNotificationClient.asyncProvideDiagnosisKeys( - exportFiles, - exposureConfiguration, - token - ) + if (googleAPIVersion.isAbove(GoogleAPIVersion.V16)) { + InternalExposureNotificationClient.asyncProvideDiagnosisKeys( + exportFiles, + exposureConfiguration, + token + ) + } else { + exportFiles.forEach { batch -> + InternalExposureNotificationClient.asyncProvideDiagnosisKeys( + listOf(batch), + exposureConfiguration, + token + ) + } + } Timber.tag(TAG).d("Diagnosis Keys provided successfully, Token: $token") } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/base/ActivityExtensions.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/base/ActivityExtensions.kt new file mode 100644 index 0000000000000000000000000000000000000000..83d7f1b7115b4a15cb921dc12c899e85b908e25b --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/base/ActivityExtensions.kt @@ -0,0 +1,20 @@ +package de.rki.coronawarnapp.ui.base + +import android.app.Activity +import android.content.Intent +import de.rki.coronawarnapp.exception.ExceptionCategory +import de.rki.coronawarnapp.exception.ExternalActionException +import de.rki.coronawarnapp.exception.reporting.report + +fun Activity.startActivitySafely( + intent: Intent, + handler: (Exception) -> Unit = { + ExternalActionException(it).report(ExceptionCategory.UI) + } +) { + try { + startActivity(intent) + } catch (exception: Exception) { + handler.invoke(exception) + } +} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt index bfd78ff91cf4667394687a62dc4df61cb5bdd338..c4bbd54c91d8ae652a0d448a631a385145261591 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt @@ -15,6 +15,7 @@ import de.rki.coronawarnapp.R import de.rki.coronawarnapp.http.playbook.BackgroundNoise import de.rki.coronawarnapp.nearby.InternalExposureNotificationClient import de.rki.coronawarnapp.storage.LocalData +import de.rki.coronawarnapp.ui.base.startActivitySafely import de.rki.coronawarnapp.ui.viewmodel.SettingsViewModel import de.rki.coronawarnapp.util.BackgroundPrioritization import de.rki.coronawarnapp.util.ConnectivityHelper @@ -130,7 +131,7 @@ class MainActivity : AppCompatActivity() { R.string.onboarding_energy_optimized_dialog_button_negative, false, { // go to battery optimization - powerManagement.disableBatteryOptimizations() + startActivitySafely(powerManagement.disableBatteryOptimizationsIntent) }, { // keep battery optimization enabled showManualCheckingRequiredDialog() diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/riskdetails/DefaultRiskDetailPresenter.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/riskdetails/DefaultRiskDetailPresenter.kt new file mode 100644 index 0000000000000000000000000000000000000000..e577f7ce8c482c98a8a0a8a0ddf83365b19f67ec --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/riskdetails/DefaultRiskDetailPresenter.kt @@ -0,0 +1,12 @@ +package de.rki.coronawarnapp.ui.riskdetails + +import de.rki.coronawarnapp.risk.RiskLevelConstants + +class DefaultRiskDetailPresenter : RiskDetailPresenter { + + override fun isAdditionalInfoVisible(riskLevel: Int, matchedKeyCount: Int) = + riskLevel == RiskLevelConstants.LOW_LEVEL_RISK && matchedKeyCount > 0 + + override fun isInformationBodyNoticeVisible(riskLevel: Int, matchedKeyCount: Int) = + !(riskLevel == RiskLevelConstants.LOW_LEVEL_RISK && matchedKeyCount > 0) +} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/riskdetails/RiskDetailPresenter.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/riskdetails/RiskDetailPresenter.kt new file mode 100644 index 0000000000000000000000000000000000000000..0186d75f017b6cf851828c4852817d09a39025cc --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/riskdetails/RiskDetailPresenter.kt @@ -0,0 +1,8 @@ +package de.rki.coronawarnapp.ui.riskdetails + +interface RiskDetailPresenter { + + fun isAdditionalInfoVisible(riskLevel: Int, matchedKeyCount: Int): Boolean + + fun isInformationBodyNoticeVisible(riskLevel: Int, matchedKeyCount: Int): Boolean +} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsBackgroundPriorityFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsBackgroundPriorityFragment.kt index 3b3223f2839fd0a943750de601af4655bda18f02..aa8218a169d1c324033939f8148106c7f0821aff 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsBackgroundPriorityFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsBackgroundPriorityFragment.kt @@ -8,6 +8,7 @@ import android.view.accessibility.AccessibilityEvent import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import de.rki.coronawarnapp.databinding.FragmentSettingsBackgroundPriorityBinding +import de.rki.coronawarnapp.ui.base.startActivitySafely import de.rki.coronawarnapp.ui.main.MainActivity import de.rki.coronawarnapp.ui.viewmodel.SettingsViewModel import de.rki.coronawarnapp.ui.viewmodel.TracingViewModel @@ -66,8 +67,9 @@ class SettingsBackgroundPriorityFragment : Fragment() { val isPriorityEnabled = settingsViewModel.isBackgroundPriorityEnabled.value == true if (!isPriorityEnabled) { - val activity = requireActivity() as MainActivity - activity.powerManagement.disableBatteryOptimizations() + (requireActivity() as MainActivity).apply { + startActivitySafely(powerManagement.disableBatteryOptimizationsIntent) + } } } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/viewmodel/SubmissionViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/viewmodel/SubmissionViewModel.kt index 2fced7642eda4289f66510d0df15fe43d6ed74e0..c5f670cb06796888458824bdbeb98cc15d6bee50 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/viewmodel/SubmissionViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/viewmodel/SubmissionViewModel.kt @@ -9,6 +9,7 @@ import de.rki.coronawarnapp.exception.ExceptionCategory import de.rki.coronawarnapp.exception.TransactionException import de.rki.coronawarnapp.exception.http.CwaWebException import de.rki.coronawarnapp.exception.reporting.report +import de.rki.coronawarnapp.service.submission.QRScanResult import de.rki.coronawarnapp.service.submission.SubmissionService import de.rki.coronawarnapp.storage.LocalData import de.rki.coronawarnapp.storage.SubmissionRepository @@ -98,10 +99,10 @@ class SubmissionViewModel : ViewModel() { _uiStateError ) - fun validateAndStoreTestGUID(scanResult: String) { - if (SubmissionService.containsValidGUID(scanResult)) { - val guid = SubmissionService.extractGUID(scanResult) - SubmissionService.storeTestGUID(guid) + fun validateAndStoreTestGUID(rawResult: String) { + val scanResult = QRScanResult(rawResult) + if (scanResult.isValid) { + SubmissionService.storeTestGUID(scanResult.guid!!) _scanStatus.value = Event(ScanStatus.SUCCESS) } else { _scanStatus.value = Event(ScanStatus.INVALID) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/viewmodel/TracingViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/viewmodel/TracingViewModel.kt index 8d3b8e0c5e1dcff34f1b7553c6ea07e94be3fe11..2d94bf11de0709c02724cfa33f0960eddeece327 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/viewmodel/TracingViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/viewmodel/TracingViewModel.kt @@ -1,12 +1,15 @@ package de.rki.coronawarnapp.ui.viewmodel +import android.view.View import androidx.lifecycle.LiveData +import androidx.lifecycle.MediatorLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import de.rki.coronawarnapp.CoronaWarnApplication import de.rki.coronawarnapp.exception.ExceptionCategory.INTERNAL import de.rki.coronawarnapp.exception.TransactionException import de.rki.coronawarnapp.exception.reporting.report +import de.rki.coronawarnapp.risk.RiskLevelConstants import de.rki.coronawarnapp.storage.ExposureSummaryRepository import de.rki.coronawarnapp.storage.LocalData import de.rki.coronawarnapp.storage.RiskLevelRepository @@ -14,6 +17,7 @@ import de.rki.coronawarnapp.storage.TracingRepository import de.rki.coronawarnapp.timer.TimerHelper import de.rki.coronawarnapp.transaction.RetrieveDiagnosisKeysTransaction import de.rki.coronawarnapp.transaction.RiskLevelTransaction +import de.rki.coronawarnapp.ui.riskdetails.DefaultRiskDetailPresenter import de.rki.coronawarnapp.util.ConnectivityHelper import kotlinx.coroutines.launch import org.joda.time.DateTime @@ -37,6 +41,8 @@ class TracingViewModel : ViewModel() { val TAG: String? = TracingViewModel::class.simpleName } + private val riskDetailPresenter = DefaultRiskDetailPresenter() + // Values from RiskLevelRepository val riskLevel: LiveData<Int> = RiskLevelRepository.riskLevelScore val riskLevelScoreLastSuccessfulCalculated = @@ -53,6 +59,52 @@ class TracingViewModel : ViewModel() { val activeTracingDaysInRetentionPeriod = TracingRepository.activeTracingDaysInRetentionPeriod var isRefreshing: LiveData<Boolean> = TracingRepository.isRefreshing + val additionalInformationVisibility = MediatorLiveData<Int>() + val informationBodyNoticeVisibility = MediatorLiveData<Int>() + + init { + additionalInformationVisibility.addSource(riskLevel) { + additionalInformationVisibility.value = + if (riskDetailPresenter.isAdditionalInfoVisible(it, matchedKeyCount.value ?: -1)) + View.VISIBLE + else + View.GONE + } + additionalInformationVisibility.addSource(matchedKeyCount) { + additionalInformationVisibility.value = + if (riskDetailPresenter.isAdditionalInfoVisible( + riskLevel.value ?: RiskLevelConstants.UNKNOWN_RISK_INITIAL, + it ?: 0 + ) + ) + View.VISIBLE + else + View.GONE + } + informationBodyNoticeVisibility.addSource(riskLevel) { + informationBodyNoticeVisibility.value = + if (riskDetailPresenter.isInformationBodyNoticeVisible( + it, + matchedKeyCount.value ?: -1 + ) + ) + View.VISIBLE + else + View.GONE + } + informationBodyNoticeVisibility.addSource(matchedKeyCount) { + informationBodyNoticeVisibility.value = + if (riskDetailPresenter.isInformationBodyNoticeVisible( + riskLevel.value ?: RiskLevelConstants.UNKNOWN_RISK_INITIAL, + it ?: 0 + ) + ) + View.VISIBLE + else + View.GONE + } + } + /** * Launches the RetrieveDiagnosisKeysTransaction and RiskLevelTransaction in the viewModel scope * diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ExternalActionHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ExternalActionHelper.kt index 5a2e9b6c046ba37283f8469c43a9aa1130a1c568..e200dadb0909c7054ad0986a34cbbea311043a5a 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ExternalActionHelper.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ExternalActionHelper.kt @@ -155,17 +155,4 @@ object ExternalActionHelper { ) } } - - fun toBatterySaverSettings(context: Context) { - try { - val intent = Intent(Settings.ACTION_BATTERY_SAVER_SETTINGS) - context.startActivity(intent) - } catch (exception: Exception) { - // catch generic exception on settings navigation - // most likely due to device / rom specific intent issue - ExternalActionException(exception).report( - ExceptionCategory.UI - ) - } - } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/GoogleAPIVersion.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/GoogleAPIVersion.kt new file mode 100644 index 0000000000000000000000000000000000000000..9b1998f66c493dd8abb62ad9e711dda791a93f8b --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/GoogleAPIVersion.kt @@ -0,0 +1,38 @@ +package de.rki.coronawarnapp.util + +import com.google.android.gms.common.api.ApiException +import com.google.android.gms.common.api.CommonStatusCodes +import dagger.Reusable +import de.rki.coronawarnapp.nearby.InternalExposureNotificationClient +import javax.inject.Inject +import kotlin.math.abs + +@Reusable +class GoogleAPIVersion @Inject constructor() { + /** + * Indicates if the client runs above a certain version + * + * @return isAboveVersion, if connected to an old unsupported version, return false + */ + suspend fun isAbove(compareVersion: Long): Boolean { + if (!compareVersion.isCorrectVersionLength) { + throw IllegalArgumentException("given version has incorrect length") + } + return try { + val currentVersion = InternalExposureNotificationClient.getVersion() + currentVersion >= compareVersion + } catch (apiException: ApiException) { + if (apiException.statusCode == CommonStatusCodes.API_NOT_CONNECTED) false + else throw apiException + } + } + + // check if a raw long has the correct length to be considered an API version + private val Long.isCorrectVersionLength + get(): Boolean = abs(this).toString().length == GOOGLE_API_VERSION_FIELD_LENGTH + + companion object { + private const val GOOGLE_API_VERSION_FIELD_LENGTH = 8 + const val V16 = 16000000L + } +} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/GoogleQuotaCalculator.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/GoogleQuotaCalculator.kt new file mode 100644 index 0000000000000000000000000000000000000000..e7aace190ed9a6217487d3f76b6356c07c6aa267 --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/GoogleQuotaCalculator.kt @@ -0,0 +1,62 @@ +package de.rki.coronawarnapp.util + +import de.rki.coronawarnapp.storage.LocalData +import org.joda.time.Chronology +import org.joda.time.DateTime +import org.joda.time.DateTimeZone +import org.joda.time.Duration +import org.joda.time.Instant + +/** + * This Calculator class takes multiple parameters to check if the Google API + * can be called or the Rate Limit has been reached. The Quota is expected to reset at + * the start of the day in the given timeZone and Chronology + * + * @property incrementByAmount The amount of Quota Calls to increment per Call + * @property quotaLimit The maximum amount of Quota Calls allowed before Rate Limiting + * @property quotaResetPeriod The Period after which the Quota Resets + * @property quotaTimeZone The Timezone to work in + * @property quotaChronology The Chronology to work in + */ +class GoogleQuotaCalculator( + val incrementByAmount: Int, + val quotaLimit: Int, + val quotaResetPeriod: Duration, + val quotaTimeZone: DateTimeZone, + val quotaChronology: Chronology +) : QuotaCalculator<Int> { + override var hasExceededQuota: Boolean = false + + override fun calculateQuota(): Boolean { + if (Instant.now().isAfter(LocalData.nextTimeRateLimitingUnlocks)) { + LocalData.nextTimeRateLimitingUnlocks = DateTime + .now(quotaTimeZone) + .withChronology(quotaChronology) + .plus(quotaResetPeriod) + .withTimeAtStartOfDay() + .toInstant() + LocalData.googleAPIProvideDiagnosisKeysCallCount = 0 + } + + if (LocalData.googleAPIProvideDiagnosisKeysCallCount <= quotaLimit) { + LocalData.googleAPIProvideDiagnosisKeysCallCount += incrementByAmount + } + + hasExceededQuota = LocalData.googleAPIProvideDiagnosisKeysCallCount > quotaLimit + + return hasExceededQuota + } + + override fun resetProgressTowardsQuota(newProgress: Int) { + if (newProgress > quotaLimit) { + throw IllegalArgumentException("cannot reset progress to a value higher than the quota limit") + } + if (newProgress % incrementByAmount != 0) { + throw IllegalArgumentException("supplied progress is no multiple of $incrementByAmount") + } + LocalData.googleAPIProvideDiagnosisKeysCallCount = newProgress + hasExceededQuota = false + } + + override fun getProgressTowardsQuota(): Int = LocalData.googleAPIProvideDiagnosisKeysCallCount +} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/QuotaCalculator.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/QuotaCalculator.kt new file mode 100644 index 0000000000000000000000000000000000000000..682f4a6002b06ef548e04da1c68012372f3c6743 --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/QuotaCalculator.kt @@ -0,0 +1,29 @@ +package de.rki.coronawarnapp.util + +/** + * Class to check if a Quota has been reached based on the calculation done inside + * the Calculator + * + */ +interface QuotaCalculator<T> { + val hasExceededQuota: Boolean + + /** + * This function is called to recalculate an old quota score + */ + fun calculateQuota(): Boolean + + /** + * Reset the quota progress + * + * @param newProgress new progress towards the quota + */ + fun resetProgressTowardsQuota(newProgress: T) + + /** + * Retrieve the current progress towards the quota + * + * @return current progress count + */ + fun getProgressTowardsQuota(): T +} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/device/DefaultPowerManagement.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/device/DefaultPowerManagement.kt index 140b1e0e9d6804cc15a261441c8bad652ee980e3..12475b33358693e19786dc76b8099e245c7d8f64 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/device/DefaultPowerManagement.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/device/DefaultPowerManagement.kt @@ -5,9 +5,6 @@ import android.content.Intent import android.net.Uri import android.os.PowerManager import android.provider.Settings -import de.rki.coronawarnapp.exception.ExceptionCategory -import de.rki.coronawarnapp.exception.ExternalActionException -import de.rki.coronawarnapp.exception.reporting.report import javax.inject.Inject class DefaultPowerManagement @Inject constructor( @@ -24,20 +21,9 @@ class DefaultPowerManagement @Inject constructor( override val toBatteryOptimizationSettingsIntent = Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS) - override fun disableBatteryOptimizations() { - try { - context.startActivity( - Intent( - Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, - Uri.parse("package:${context.packageName}") - ) - ) - } catch (exception: Exception) { - // catch generic exception on settings navigation - // most likely due to device / rom specific intent issue - ExternalActionException(exception).report( - ExceptionCategory.UI - ) - } - } + override val disableBatteryOptimizationsIntent = + Intent( + Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, + Uri.parse("package:${context.packageName}") + ) } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/device/PowerManagement.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/device/PowerManagement.kt index 1e92d27413aadefc031a42d06b47f8724db8cda4..d0cd90a3025c22ef83240852e9352e39d6e6194e 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/device/PowerManagement.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/device/PowerManagement.kt @@ -11,5 +11,5 @@ interface PowerManagement { val toBatteryOptimizationSettingsIntent: Intent - fun disableBatteryOptimizations() + val disableBatteryOptimizationsIntent: Intent } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterRiskHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterRiskHelper.kt index 85c5cf343bba5c52e9f879ffc870dfe9f12c08e5..2942c09bfbadaa8fa99e019895309cc7fb472e5a 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterRiskHelper.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterRiskHelper.kt @@ -329,46 +329,19 @@ fun formatNextUpdate( } } -/** - * Formats the risk card content description of time when diagnosis keys will be updated - * from server again when applicable but appends the word button at the end for screen reader accessibility reasons - * - * @param riskLevelScore - * @param isBackgroundJobEnabled - * @return - */ -fun formatNextUpdateContentDescription( - riskLevelScore: Int?, - isBackgroundJobEnabled: Boolean? -): String { - val appContext = CoronaWarnApplication.getAppContext() - return if (isBackgroundJobEnabled != true) { - "" - } else { - return when (riskLevelScore) { - RiskLevelConstants.UNKNOWN_RISK_INITIAL, - RiskLevelConstants.LOW_LEVEL_RISK, - RiskLevelConstants.INCREASED_RISK -> appContext.getString( - R.string.risk_card_body_next_update - ) + " " + appContext.getString( - R.string.accessibility_button - ) - else -> "" - } - } -} - /** * Formats the risk details text display for each risk level * * @param riskLevelScore * @param daysSinceLastExposure + * @param matchedKeysCount * @return */ -fun formatRiskDetailsRiskLevelBody(riskLevelScore: Int?, daysSinceLastExposure: Int?): String { +fun formatRiskDetailsRiskLevelBody(riskLevelScore: Int?, daysSinceLastExposure: Int?, matchedKeysCount: Int?): String { val appContext = CoronaWarnApplication.getAppContext() val resources = appContext.resources val days = daysSinceLastExposure ?: 0 + val count = matchedKeysCount ?: 0 return when (riskLevelScore) { RiskLevelConstants.INCREASED_RISK -> resources.getQuantityString( @@ -379,7 +352,11 @@ fun formatRiskDetailsRiskLevelBody(riskLevelScore: Int?, daysSinceLastExposure: RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS -> appContext.getString(R.string.risk_details_information_body_outdated_risk) RiskLevelConstants.LOW_LEVEL_RISK -> - appContext.getString(R.string.risk_details_information_body_low_risk) + appContext.getString( + if (count > 0) + R.string.risk_details_information_body_low_risk_with_encounter + else + R.string.risk_details_information_body_low_risk) RiskLevelConstants.UNKNOWN_RISK_INITIAL -> appContext.getString(R.string.risk_details_information_body_unknown_risk) else -> "" diff --git a/Corona-Warn-App/src/main/res/layout/fragment_risk_details.xml b/Corona-Warn-App/src/main/res/layout/fragment_risk_details.xml index 3496a3d73128b51baedae9ee97e67feb919cc959..e538e5b2b0e0729ca98020fab9f012dcb365cf56 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_risk_details.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_risk_details.xml @@ -117,6 +117,18 @@ app:showDetails="@{true}" app:tracingViewModel="@{tracingViewModel}" /> + <include + android:id="@+id/risk_details_additional_information" + layout="@layout/include_risk_details_low_risk_encounter" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:focusable="false" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/risk_details_risk_card" + app:settingsViewModel="@{settingsViewModel}" + app:tracingViewModel="@{tracingViewModel}" /> + <TextView android:id="@+id/risk_details_behavior_headline" style="@style/headline5" @@ -129,7 +141,7 @@ app:layout_constraintEnd_toStartOf="@+id/guideline_end" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="@+id/guideline_start" - app:layout_constraintTop_toBottomOf="@+id/risk_details_risk_card" /> + app:layout_constraintTop_toBottomOf="@+id/risk_details_additional_information" /> <TextView android:id="@+id/risk_details_behavior_subtitle" @@ -232,8 +244,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" - android:text="@{FormatterRiskHelper.formatRiskDetailsRiskLevelBody(tracingViewModel.riskLevel, tracingViewModel.daysSinceLastExposure)}" - android:visibility="@{FormatterHelper.formatVisibilityText(FormatterRiskHelper.formatRiskDetailsRiskLevelBody(tracingViewModel.riskLevel, tracingViewModel.daysSinceLastExposure))}" + android:text="@{FormatterRiskHelper.formatRiskDetailsRiskLevelBody(tracingViewModel.riskLevel, tracingViewModel.daysSinceLastExposure, tracingViewModel.matchedKeyCount)}" + android:visibility="@{FormatterHelper.formatVisibilityText(FormatterRiskHelper.formatRiskDetailsRiskLevelBody(tracingViewModel.riskLevel, tracingViewModel.daysSinceLastExposure, tracingViewModel.matchedKeyCount))}" android:focusable="true" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -246,6 +258,7 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" android:text="@{FormatterRiskHelper.formatRiskDetailsRiskLevelBodyNotice(tracingViewModel.riskLevel)}" + android:visibility="@{tracingViewModel.informationBodyNoticeVisibility}" android:focusable="true" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/Corona-Warn-App/src/main/res/layout/include_risk_card.xml b/Corona-Warn-App/src/main/res/layout/include_risk_card.xml index 48b1e91d6db96e6eca06ea1431e5e71c6af70792..9c50cbc7028d3ad1b509b4c0f603f4fdc9864e5f 100644 --- a/Corona-Warn-App/src/main/res/layout/include_risk_card.xml +++ b/Corona-Warn-App/src/main/res/layout/include_risk_card.xml @@ -227,7 +227,6 @@ android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_small" - android:contentDescription="@{FormatterRiskHelper.formatNextUpdateContentDescription(tracingViewModel.riskLevel, settingsViewModel.isBackgroundJobEnabled())}" android:text="@{FormatterRiskHelper.formatNextUpdate(tracingViewModel.riskLevel, settingsViewModel.isBackgroundJobEnabled())}" android:textColor="@{FormatterRiskHelper.formatStableTextColor(tracingViewModel.riskLevel)}" app:layout_constraintEnd_toEndOf="parent" diff --git a/Corona-Warn-App/src/main/res/layout/include_risk_details_low_risk_encounter.xml b/Corona-Warn-App/src/main/res/layout/include_risk_details_low_risk_encounter.xml new file mode 100644 index 0000000000000000000000000000000000000000..ad8aedeb39d702f6c31199a1dbd5693f8b463f40 --- /dev/null +++ b/Corona-Warn-App/src/main/res/layout/include_risk_details_low_risk_encounter.xml @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="utf-8"?> +<layout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto"> + + <data> + + <variable + name="tracingViewModel" + type="de.rki.coronawarnapp.ui.viewmodel.TracingViewModel" /> + + <variable + name="settingsViewModel" + type="de.rki.coronawarnapp.ui.viewmodel.SettingsViewModel" /> + </data> + + <androidx.constraintlayout.widget.ConstraintLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="@{tracingViewModel.additionalInformationVisibility}"> + + <TextView + android:id="@+id/risk_details_additional_information_headline" + style="@style/headline5" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginTop="28dp" + android:accessibilityHeading="true" + android:focusable="true" + android:text="@string/risk_details_additional_info_title" + android:layout_marginHorizontal="@dimen/spacing_normal" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent"/> + + <TextView + android:id="@+id/risk_details_additional_information_subtitle" + style="@style/body2" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacing_tiny" + android:focusable="true" + android:text="@string/risk_details_additional_info_subtitle" + android:layout_marginHorizontal="@dimen/spacing_normal" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toBottomOf="@+id/risk_details_additional_information_headline" /> + + <TextView + android:id="@+id/risk_details_additional_information_body" + style="@style/body1" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacing_normal" + android:text="@string/risk_details_additional_info_text" + android:focusable="true" + android:layout_marginHorizontal="@dimen/spacing_normal" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/risk_details_additional_information_subtitle" /> + + </androidx.constraintlayout.widget.ConstraintLayout> +</layout> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/navigation/nav_graph.xml b/Corona-Warn-App/src/main/res/navigation/nav_graph.xml index 9ea4a32384297b94438da73382a5d6b0dd40464e..61b00b60017520df908020800160fe9c24967683 100644 --- a/Corona-Warn-App/src/main/res/navigation/nav_graph.xml +++ b/Corona-Warn-App/src/main/res/navigation/nav_graph.xml @@ -38,9 +38,6 @@ <action android:id="@+id/action_mainFragment_to_mainOverviewFragment" app:destination="@id/mainOverviewFragment" /> - <action - android:id="@+id/action_mainFragment_to_testRiskLevelCalculation" - app:destination="@id/testRiskLevelCalculation" /> </fragment> <fragment @@ -168,7 +165,6 @@ android:label="InformationTechnicalFragment" tools:layout="@layout/fragment_information_technical" /> - <!-- Submission --> <fragment android:id="@+id/riskDetailsFragment" android:name="de.rki.coronawarnapp.ui.riskdetails.RiskDetailsFragment" @@ -178,7 +174,7 @@ android:id="@+id/action_riskDetailsFragment_to_settingsTracingFragment" app:destination="@id/settingsTracingFragment" /> </fragment> - + <!-- Submission --> <fragment android:id="@+id/submissionDispatcherFragment" android:name="de.rki.coronawarnapp.ui.submission.fragment.SubmissionDispatcherFragment" @@ -304,9 +300,4 @@ android:id="@+id/action_submissionContactFragment_to_submissionTanFragment" app:destination="@id/submissionTanFragment" /> </fragment> - <fragment - android:id="@+id/testRiskLevelCalculation" - android:name="de.rki.coronawarnapp.TestRiskLevelCalculation" - android:label="fragment_test_risk_level_calculation" - tools:layout="@layout/fragment_test_risk_level_calculation" /> </navigation> diff --git a/Corona-Warn-App/src/main/res/values-ar/strings.xml b/Corona-Warn-App/src/main/res/values-ar/strings.xml deleted file mode 100644 index a939f0eb612667db9bdfab8000e5a7493ce7abae..0000000000000000000000000000000000000000 --- a/Corona-Warn-App/src/main/res/values-ar/strings.xml +++ /dev/null @@ -1,1146 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?><resources xmlns:tools="http://schemas.android.com/tools" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" tools:ignore="MissingTranslation"> - - <!-- #################################### - Preference Keys - ###################################### - TODO: Check what is needed --> - - <!-- NOTR --> - <string name="preference_name"><xliff:g id="preference">"shared_preferences_cwa"</xliff:g></string> - <!-- NOTR --> - <string name="preference_onboarding_completed"><xliff:g id="preference">"preference_onboarding_completed"</xliff:g></string> - <!-- NOTR --> - <string name="preference_onboarding_completed_timestamp"><xliff:g id="preference">"preference_onboarding_completed_timestamp"</xliff:g></string> - <!-- NOTR --> - <string name="preference_background_check_done"><xliff:g id="preference">"preference_background_check_done"</xliff:g></string> - <!-- NOTR --> - <string name="preference_reset_app"><xliff:g id="preference">"preference_reset_app"</xliff:g></string> - <!-- NOTR --> - <string name="preference_only_wifi"><xliff:g id="preference">"preference_only_wifi"</xliff:g></string> - <!-- NOTR --> - <string name="preference_tracing"><xliff:g id="preference">"preference_tracing"</xliff:g></string> - <!-- NOTR --> - <string name="preference_timestamp_diagnosis_keys_fetch"><xliff:g id="preference">"preference_timestamp_diagnosis_keys_fetch"</xliff:g></string> - <!-- NOTR --> - <string name="preference_timestamp_manual_diagnosis_keys_retrieval"><xliff:g id="preference">"preference_timestamp_manual_diagnosis_keys_retrieval"</xliff:g></string> - <!-- NOTR --> - <string name="preference_string_google_api_token"><xliff:g id="preference">"preference_m_string_google_api_token"</xliff:g></string> - <!-- NOTR --> - <string name="preference_notifications_enabled"><xliff:g id="preference">"preference_notifications_enabled"</xliff:g></string> - <!-- NOTR --> - <string name="preference_notifications_risk_enabled"><xliff:g id="preference">"preference_notifications_risk_enabled"</xliff:g></string> - <!-- NOTR --> - <string name="preference_notifications_test_enabled"><xliff:g id="preference">"preference_notifications_test_enabled"</xliff:g></string> - <!-- NOTR --> - <string name="preference_background_job_allowed"><xliff:g id="preference">"preference_background_job_enabled"</xliff:g></string> - <!-- NOTR --> - <string name="preference_mobile_data_allowed"><xliff:g id="preference">"preference_mobile_data_enabled"</xliff:g></string> - <!-- NOTR --> - <string name="preference_registration_token"><xliff:g id="preference">"preference_registration_token"</xliff:g></string> - <!-- NOTR --> - <string name="preference_device_pairing_successful_time"><xliff:g id="preference">"preference_device_pairing_successful_time"</xliff:g></string> - <!-- NOTR --> - <string name="preference_initial_tracing_activation_time"><xliff:g id="preference">"preference_initial_tracing_activation_time"</xliff:g></string> - <!-- NOTR --> - <string name="preference_initial_result_received_time"><xliff:g id="preference">"preference_initial_result_received_time"</xliff:g></string> - <!-- NOTR --> - <string name="preference_risk_level_score"><xliff:g id="preference">"preference_risk_level_score"</xliff:g></string> - <!-- NOTR --> - <string name="preference_risk_level_score_successful"><xliff:g id="preference">"preference_risk_level_score_successful"</xliff:g></string> - <!-- NOTR --> - <string name="preference_timestamp_risk_level_calculation"><xliff:g id="preference">"preference_timestamp_risk_level_calculation"</xliff:g></string> - <!-- NOTR --> - <string name="preference_test_guid"><xliff:g id="preference">"preference_test_guid"</xliff:g></string> - <!-- NOTR --> - <string name="preference_is_allowed_to_submit_diagnosis_keys"><xliff:g id="preference">"preference_is_allowed_to_submit_diagnosis_keys"</xliff:g></string> - <!-- NOTR --> - <string name="preference_auth_code"><xliff:g id="preference">"preference_auth_code"</xliff:g></string> - <!-- NOTR --> - <string name="preference_database_password"><xliff:g id="preference">"preference_database_password"</xliff:g></string> - <!-- NOTR --> - <string name="preference_total_non_active_tracing"><xliff:g id="preference">"preference_total_non_active_tracing"</xliff:g></string> - <!-- NOTR --> - <string name="preference_last_non_active_tracing_timestamp"><xliff:g id="preference">"preference_last_non_active_tracing_timestamp"</xliff:g></string> - <!-- NOTR --> - <string name="preference_number_successful_submissions"><xliff:g id="preference">"preference_number_successful_submissions"</xliff:g></string> - <!-- NOTR --> - <string name="preference_teletan"><xliff:g id="preference">"preference_teletan"</xliff:g></string> - <!-- NOTR --> - <string name="preference_last_three_hours_from_server"><xliff:g id="preference">"preference_last_three_hours_from_server"</xliff:g></string> - <!-- NOTR --> - <string name="preference_polling_test_result_started"><xliff:g id="preference">"preference_polling_test_result_started"</xliff:g></string> - <!-- NOTR --> - <string name="preference_test_result_notification"><xliff:g id="preference">"preference_test_result_notification"</xliff:g></string> - <!-- NOTR --> - <string name="preference_risk_days_explanation_shown"><xliff:g id="preference">"preference_risk_days_explanation_shown"</xliff:g></string> - - <!-- #################################### - Generics - ###################################### --> - - <!-- XACT: back description for screen readers --> - <string name="accessibility_back">"الخلÙ"</string> - <!-- XACT: next description for screen readers --> - <string name="accessibility_next">"التالي"</string> - <!-- XACT: menu description for screen readers --> - <string name="accessibility_menu">"القائمة"</string> - <!-- XACT: menu description for screen readers --> - <string name="accessibility_close">"إغلاق"</string> - <!-- XACT: menu description for screen readers --> - <string name="accessibility_logo">"تطبيق Corona-Warn-App"</string> - <!-- XACT: button description for screen readers to be appended at the end of content without focusable subcontent that are explored by touch --> - <string name="accessibility_button">"زر"</string> - - <!-- #################################### - Menu - ###################################### --> - - <!-- XMIT: application overview --> - <string name="menu_help">"نظرة عامة"</string> - <!-- XMIT: application information --> - <string name="menu_information">"معلومات التطبيق"</string> - <!-- XMIT: application settings --> - <string name="menu_settings">"الإعدادات"</string> - - <!-- #################################### - Notification - ###################################### --> - <!-- NOTR --> - <string name="notification_channel_id"><xliff:g id="notification_channel_id">"de.rki.coronawarnapp.notification.exposureNotificationChannelId"</xliff:g></string> - <!-- NOTR --> - <string name="notification_id"><xliff:g id="notification_id">"1"</xliff:g></string> - <!-- XTXT: Notification channel name for os settings --> - <string name="notification_name">"تطبيق Corona-Warn-App"</string> - <!-- XTXT: Notification channel description for os settings --> - <string name="notification_description">"إشعارات من تطبيق Corona-Warn-App"</string> - <!-- XHED: Notification title --> - <string name="notification_headline">"تطبيق Corona-Warn-App"</string> - <!-- XTXT: Notification body --> - <string name="notification_body">"لديك رسائل جديدة من تطبيق Corona-Warn-App."</string> - - <!-- #################################### - App Auto Update - ###################################### --> - - <!-- XHED: App Auto Update dialog title --> - <string name="update_dialog_title">"Ø§Ù„ØªØØ¯ÙŠØ« Ù…ØªÙˆÙØ±"</string> - <!-- XTXT: App Auto Update dialog message --> - <string name="update_dialog_message">"يرجى Ù…Ù„Ø§ØØ¸Ø© أنه بإمكانك Ùقط استخدام تطبيق Corona-Warn-App مجددًا بمجرد تثبيت آخر ØªØØ¯ÙŠØ«."</string> - <!-- XBUT: App Auto Update button --> - <string name="update_dialog_button">"ØªØØ¯ÙŠØ«"</string> - - <!-- #################################### - Risk Card - ###################################### --> - - <!-- XTXT: risk card - no contact yet --> - <string name="risk_card_body_contact">"لا توجد مخالطة ØØªÙ‰ الآن"</string> - <!-- XTXT: risk card - number of contacts for one or more --> - <plurals name="risk_card_body_contact_value"> - <item quantity="one">"%1$s مخالطة بخطر Ù…Ù†Ø®ÙØ¶"</item> - <item quantity="other">"%1$s من المخالطات بخطر Ù…Ù†Ø®ÙØ¶"</item> - <item quantity="zero">"لا توجد مخالطة ØØªÙ‰ الآن"</item> - <item quantity="two">"%1$s مخالطة بخطر Ù…Ù†Ø®ÙØ¶"</item> - <item quantity="few">"%1$s من المخالطات بخطر Ù…Ù†Ø®ÙØ¶"</item> - <item quantity="many">"%1$s من المخالطات بخطر Ù…Ù†Ø®ÙØ¶"</item> - </plurals> - <!-- XTXT: risk card - number of contacts for one or more --> - <plurals name="risk_card_body_contact_value_high_risk"> - <item quantity="one">"%1$s مخالطة"</item> - <item quantity="other">"%1$s من المخالطات"</item> - <item quantity="zero">"لا توجد مخالطة ØØªÙ‰ الآن"</item> - <item quantity="two">"%1$s من المخالطات"</item> - <item quantity="few">"%1$s من المخالطات"</item> - <item quantity="many">"%1$s من المخالطات"</item> - </plurals> - <!-- XTXT: risk card - tracing active for x out of 14 days --> - <string name="risk_card_body_saved_days">"تسجيل المخالطة كان نشطًا لمدة %1$s من الأربعة عشر يومًا الماضية."</string> - <!-- XTXT: risk card- tracing active for 14 out of 14 days --> - <string name="risk_card_body_saved_days_full">"تسجيل المخالطة نشط دائمًا"</string> - <!-- XTXT; risk card - no update done yet --> - <string name="risk_card_body_not_yet_fetched">"لم يتم ÙØØµ Ø§Ù„ØªØ¬Ù…Ù‘ÙØ¹Ø§Øª ØØªÙ‰ الآن."</string> - <!-- XTXT: risk card - last successful update --> - <string name="risk_card_body_time_fetched">"تم Ø§Ù„ØªØØ¯ÙŠØ«: %1$s"</string> - <!-- XTXT: risk card - next update --> - <string name="risk_card_body_next_update">"يتم Ø§Ù„ØªØØ¯ÙŠØ« يوميًا"</string> - <!-- XTXT: risk card - hint to open the app daily --> - <string name="risk_card_body_open_daily">"Ù…Ù„Ø§ØØ¸Ø©: ÙŠÙØ±Ø¬Ù‰ ÙØªØ التطبيق يوميًا Ù„ØªØØ¯ÙŠØ« مستوى الخطر لديك."</string> - <!-- XBUT: risk card - update risk --> - <string name="risk_card_button_update">"ØªØØ¯ÙŠØ«"</string> - <!-- XBUT: risk card - update risk with time display --> - <string name="risk_card_button_cooldown">"ØªØØ¯ÙŠØ« ÙÙŠ %1$s"</string> - <!-- XBUT: risk card - activate tracing --> - <string name="risk_card_button_enable_tracing">"تنشيط تسجيل المخالطة"</string> - <!-- XTXT: risk card - tracing is off, user should activate to get an updated risk level --> - <string name="risk_card_body_tracing_off">"قم بتنشيط تسجيل المخالطة لتقييم مستوى الخطر اليوم."</string> - <!-- XHED: risk card - low risk headline --> - <string name="risk_card_low_risk_headline">"خطر Ù…Ù†Ø®ÙØ¶"</string> - <!-- XHED: risk card - increased risk headline --> - <string name="risk_card_increased_risk_headline">"خطر Ù…Ø±ØªÙØ¹"</string> - <!-- XTXT: risk card - increased risk days since last contact --> - <plurals name="risk_card_increased_risk_body_contact_last"> - <item quantity="one">"%1$s يوم منذ آخر ØªØ¬Ù…Ù‘ÙØ¹"</item> - <item quantity="other">"%1$s من الأيام منذ آخر ØªØ¬Ù…Ù‘ÙØ¹"</item> - <item quantity="zero">"%1$s من الأيام منذ آخر ØªØ¬Ù…Ù‘ÙØ¹"</item> - <item quantity="two">"%1$s من الأيام منذ آخر ØªØ¬Ù…Ù‘ÙØ¹"</item> - <item quantity="few">"%1$s من الأيام منذ آخر ØªØ¬Ù…Ù‘ÙØ¹"</item> - <item quantity="many">"%1$s من الأيام منذ آخر ØªØ¬Ù…Ù‘ÙØ¹"</item> - </plurals> - <!-- XHED: risk card - unknown risk headline --> - <string name="risk_card_unknown_risk_headline">"خطر غير معروÙ"</string> - <!-- XTXT: risk card - tracing isn't active long enough, so a new risk level can't be calculated --> - <string name="risk_card_unknown_risk_body">"تعذر علينا تقدير خطر العدوى نظرًا لعدم قيامك بتنشيط تسجيل المخالطة Ù„ÙØªØ±Ø© طويلة بما Ùيه Ø§Ù„ÙƒÙØ§ÙŠØ©."</string> - <!-- XHED: risk card - tracing stopped headline, due to no possible calculation --> - <string name="risk_card_no_calculation_possible_headline">"تسجيل المخالطة توقÙ"</string> - <!-- XTXT: risk card - last successfully calculated risk level --> - <string name="risk_card_no_calculation_possible_body_saved_risk">"آخر تسجيل مخالطة:"<xliff:g id="line_break">"\n"</xliff:g>"%1$s"</string> - <!-- XHED: risk card - outdated risk headline, calculation isn't possible --> - <string name="risk_card_outdated_risk_headline">"تسجيل المخالطة غير ممكن"</string> - <!-- XTXT: risk card - outdated risk, calculation couldn't be updated in the last 24 hours --> - <string name="risk_card_outdated_risk_body">"تعذر ØªØØ¯ÙŠØ« تسجيل المخالطة لأكثر من 24 ساعة."</string> - <!-- XTXT: risk card - outdated risk manual, calculation couldn't be updated in the last 48 hours --> - <string name="risk_card_outdated_manual_risk_body">"لم يتم ØªØØ¯ÙŠØ« مستوى الخطر لمدة تزيد عن 48 ساعة. يرجى ØªØØ¯ÙŠØ« مستوى الخطر."</string> - <!-- XHED: risk card - loading headline, update is ongoing --> - <string name="risk_card_loading_headline">"Ø§Ù„ÙØØµ قيد التشغيل..."</string> - <!-- XTXT: risk card - loading, data is downloaded and will be checked, this can take several minutes --> - <string name="risk_card_loading_body">"يتم تنزيل البيانات Ø§Ù„ØØ§Ù„ية ÙˆÙØØµÙ‡Ø§.\nقد يستغرق هذا عدة دقائق."</string> - - <!-- #################################### - Main - ###################################### --> - - <!-- XHED: main, FAQ --> - <string name="main_about_headline">"الأسئلة المتكررة"</string> - <!-- XTXT: main, explains faq on card --> - <string name="main_about_body">"يمكنك أن تجد هنا إجابات الأسئلة المتكررة ØÙˆÙ„ تطبيق Corona-Warn-App. سيتم توجيهك إلى موقع إلكتروني خارجي."</string> - <!-- XTXT: FAQ link, should be translated --> - <string name="main_about_link">"https://www.bundesregierung.de/corona-warn-app-faq-englisch"</string> - <!-- XACT: Opens external webpage --> - <string name="hint_external_webpage">"يمكنك أن تجد هنا إجابات الأسئلة المتكررة ØÙˆÙ„ تطبيق Corona-Warn-App. سيتم توجيهك إلى موقع إلكتروني خارجي."</string> - - <!-- #################################### - Main - Share - ###################################### --> - - <!-- XHED: Share app link page title --> - <string name="main_share_title">"مشاركة تطبيق Corona-Warn-App"</string> - <!-- XHED: Share app link page subtitle --> - <string name="main_share_headline">"Ù„Ù†ÙƒØ§ÙØ Ùيروس كورونا معًا"</string> - <!-- YTXT: Share app link page body --> - <string name="main_share_body">"كلما زاد عدد مستخدمي التطبيق، Ø£ØµØ¨Ø Ø¨Ø¥Ù…ÙƒØ§Ù†Ù†Ø§ كسر سلسلة العدوى بشكل أسرع. الرجاء دعوة أسرتك وأصدقائك إلى تنزيل هذا التطبيق."</string> - <!-- XBUT: Share app link page button --> - <string name="main_share_button">"إرسال رابط التنزيل"</string> - <!-- YMSG: Message when sharing is executed --> - <string name="main_share_message">"Ù…ÙƒØ§ÙØØ© Ùيروس كورونا معًا "<xliff:g id="line_break">"\n"</xliff:g>"أنا مستعد لذلك، ماذا عنك؟"<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="link_play_store">"https://www.corona-warn-app.de"</xliff:g>"\n"<xliff:g id="line_break">"\n"</xliff:g></string> - <!-- XACT: main (share) - illustraction description, explanation image --> - <string name="main_share_illustration_description">"رجل يشارك تطبيق Corona-Warn-App مع أربعة أشخاص آخرين."</string> - - <!-- #################################### - Main - Overview - ###################################### --> - - <!-- XHED: App overview page title --> - <string name="main_overview_title">"نظرة عامة"</string> - <!-- XACT: main overview page title --> - <string name="main_overview_accessibility_title">"نظرة عامة"</string> - <!-- XHED: App overview subtitle for tracing explanation--> - <string name="main_overview_subtitle_tracing">"تسجيل المخالطة"</string> - <!-- YTXT: App overview body text about tracing --> - <string name="main_overview_body_tracing">"تسجيل المخالطة Ø£ØØ¯ الميزات الجوهرية الثلاث ÙÙŠ التطبيق. عند تنشيطه، يتم تسجيل Ø§Ù„ØªØ¬Ù…Ù‘ÙØ¹Ø§Øª مع أجهزة الأشخاص الآخرين، ولا يتعين عليك اتخاذ أي إجراء آخر."</string> - <!-- XHED: App overview subtitle for risk explanation --> - <string name="main_overview_subtitle_risk">"خطر العدوى"</string> - <!-- YTXT: App overview body text about risk levels --> - <string name="main_overview_body_risk">"إذا تعاملت خلال آخر 14 يومًا مع شخص مصاب بمرض كوÙيد-19ØŒ ÙØ³ÙŠÙÙ‚Ø¯Ù‘ÙØ± التطبيق خطر العدوى لك؛ وذلك من خلال قياس مدة المخالطة ومدى اقترابك من المصاب."</string> - <!-- XHED: App overview subtitle for risk level list --> - <string name="main_overview_subtitle_risk_levels">"قد يظهر لك مستوى الخطر التالي:"</string> - <!-- XTXT: App overview increased risk level --> - <string name="main_overview_subtitle_increased_risk">"خطر Ù…Ø±ØªÙØ¹"</string> - <!-- XTXT: App overview low risk level --> - <string name="main_overview_subtitle_low_risk">"خطر Ù…Ù†Ø®ÙØ¶"</string> - <!-- XTXT: App overview unknown risk level --> - <string name="main_overview_subtitle_unknown_risk">"خطر غير معروÙ"</string> - <!-- XHED: App overview subtitle for test procedure explanation --> - <string name="main_overview_headline_test">"إشعار مستخدمين أخرين"</string> - <!-- YTXT: App overview body text about rest procedure --> - <string name="main_overview_body_test">"من الميزات الجوهرية الأخرى تسجيل اختبارك واسترجاع النتيجة. إذا تم تشخيصك على أنك مصاب بمرض كوÙيد-19ØŒ يمكنك إشعار الآخرين وكسر سلسلة العدوى."</string> - <!-- XHED: App overview headline for glossary --> - <string name="main_overview_headline_glossary">"ØªØ¹Ø±ÙŠÙ Ø§Ù„Ù…ØµØ·Ù„ØØ§Øª:"</string> - <!-- XHED: App overview subtitle for glossary key storage --> - <string name="main_overview_subtitle_glossary_tracing">"سجل المخالطة"</string> - <!-- YTXT: App overview body for glossary key storage --> - <string name="main_overview_body_glossary_tracing">"قائمة Ø¨Ù…Ø¹Ø±ÙØ§Øª عشوائية مؤقتة مستلَمة ØªÙØÙَظ مؤقتًا ÙÙŠ ذاكرة تخزين التشغيل. تÙقرأ هذه القائمة عند التØÙ‚Ù‚ من المخالطات، ÙˆØªÙØØ°ÙŽÙ Ø¬Ù…ÙŠØ¹ Ø§Ù„Ù…Ø¹Ø±ÙØ§Øª العشوائية تلقائيًا بعد 14 يومًا."</string> - <!-- XHED: App overview subtitle for glossary risk calculation --> - <string name="main_overview_subtitle_glossary_calculation">"التØÙ‚Ù‚ من المخالطة"</string> - <!-- YTXT: App overview body for glossary risk calculation --> - <string name="main_overview_body_glossary_calculation">"يتم استرجاع بيانات سجل المخالطة ومزامنتها مع ØØ§Ù„ات عدوى المستخدمين الآخرين المبلغ عنها. يتم إجراء التØÙ‚Ù‚ من المخالطة تلقائيًا كل ساعتين تقريبًا."</string> - <!-- XHED: App overview subtitle for glossary contact --> - <string name="main_overview_subtitle_glossary_contact">"المخالطات"</string> - <!-- YTXT: App overview body for glossary contact --> - <string name="main_overview_body_glossary_contact">"Ø§Ù„ØªØ¬Ù…Ù‘ÙØ¹Ø§Øª لمدة طويلة ومن Ù…Ø³Ø§ÙØ© قريبة جدًا مع أشخاص مصابين بمرض كوÙيد-19."</string> - <!-- XHED: App overview subtitle for glossary notifications --> - <string name="main_overview_subtitle_glossary_notification">"إشعار المخالطة"</string> - <!-- YTXT: App overview body for glossary notifications --> - <string name="main_overview_body_glossary_notification">"عرض المخالطات ÙÙŠ تطبيق Corona-Warn-App."</string> - <!-- XHED: App overview subtitle for glossary keys --> - <string name="main_overview_subtitle_glossary_keys">"Ø§Ù„Ù…Ø¹Ø±ÙØ§Øª العشوائية"</string> - <!-- YTXT: App overview body for glossary keys --> - <string name="main_overview_body_glossary_keys">"Ø§Ù„Ù…Ø¹Ø±ÙØ§Øª العشوائية هي مجموعات مكونة من Ø£ØØ±Ù وأرقام Ù…Ùنشأة بشكل عشوائي. يتم تبادل هذه Ø§Ù„Ù…Ø¹Ø±ÙØ§Øª بين الأجهزة الموجودة بالقرب. ولا يمكن تعيين Ø§Ù„Ù…Ø¹Ø±ÙØ§Øª العشوائية إلى شخص معين كما يتم ØØ°Ùها تلقائيًا بعد 14 يومًا. يمكن للأشخاص الذين تم تشخيصهم كمصابين بمرض كوÙيد-19 أن يختاروا مشاركة Ù…Ø¹Ø±ÙØ§ØªÙ‡Ù… العشوائية ÙÙŠ آخر 14 يومًا مع مستخدمي التطبيق الآخرين."</string> - <!-- XACT: main (overview) - illustraction description, explanation image --> - <string name="main_overview_illustration_description">"هات٠ذكي يعرض Ù…ØØªÙˆÙ‰ متنوعًا، مرقمًا من 1 إلى 3."</string> - <!-- XACT: App main page title --> - <string name="main_title">"Ø§Ù„ØµÙØØ© الرئيسية لتطبيق Corona-Warn-App"</string> - - <!-- #################################### - Risk Details - ###################################### --> - - <!-- XHED: risk details - page title, in toolbar --> - <string name="risk_details_title">"مستوى الخطر"</string> - <!-- XHED: risk details - headline, how a user should act --> - <string name="risk_details_headline_behavior">"التعليمات"</string> - <!-- XHED: risk details - multiline headline, bold, how to act correct --> - <string name="risk_details_subtitle_behavior">"أمور يجب عليك الالتزام بها"</string> - <!-- XMSG: risk details - go/stay home, something like a bullet point --> - <string name="risk_details_behavior_body_stay_home">"ÙŠÙØ±Ø¬Ù‰ التوجه إلى منزلك والمكوث به إن أمكن ذلك."</string> - <!-- XMSG: risk details - get in touch with the corresponding people, something like a bullet point --> - <string name="risk_details_behavior_body_contact_doctor">"إذا كانت لديك Ø§Ø³ØªÙØ³Ø§Ø±Ø§Øª بشأن الأعراض أو ØªÙˆÙØ± الاختبار أو العزل الذاتي، ÙØ§Ù„رجاء الاتصال بجهة ÙˆØ§ØØ¯Ø© مما يلي:"</string> - <!-- XMSG: risk details - wash your hands, something like a bullet point --> - <string name="risk_details_behavior_body_wash_hands">"اغسل يديك بانتظام بالصابون لمدة 20 ثانية."</string> - <!-- XMSG: risk details - wear a face mask, something like a bullet point --> - <string name="risk_details_behavior_body_wear_mask">"ارتد٠قناع الوجه عند Ø§Ù„ØªØ¬Ù…Ù‘ÙØ¹ مع أشخاص آخرين."</string> - <!-- XMSG: risk details - stay 1,5 away, something like a bullet point --> - <string name="risk_details_behavior_body_stay_away">"ØØ§Ùظ على الابتعاد عن الآخرين Ø¨Ù…Ø³Ø§ÙØ© لا تقل عن 1.5 متر."</string> - <!-- XMSG: risk details - cough/sneeze, something like a bullet point --> - <string name="risk_details_behavior_body_cough_sneeze">"قم بالعطس أو السعال ÙÙŠ مرÙقك أو ÙÙŠ منديل."</string> - <!-- XMSG: risk details - contact your doctor, bullet point --> - <string name="risk_details_behavior_increased_body_1">"طبيبك الممارس العام"</string> - <!-- XMSG: risk details - panel doctor on-call service, bullet point --> - <string name="risk_details_behavior_increased_body_2">"خدمة الطوارئ الطبية العامة على الهات٠رقم 116117"</string> - <!-- XMSG: risk details - public health department, bullet point --> - <string name="risk_details_behavior_increased_body_3">"دائرة Ø§Ù„ØµØØ© العامة"</string> - <!-- XHED: risk details - infection risk headline, below behaviors --> - <string name="risk_details_headline_infection_risk">"خطر العدوى"</string> - <!-- XHED: risk details - infection period logged headling, below behaviors --> - <string name="risk_details_headline_period_logged">"تم تسجيل Ø§Ù„ÙØªØ±Ø©"</string> - <!-- XHED: risk details - infection period logged headling, below behaviors --> - <string name="risk_details_subtitle_period_logged">"هذه Ø§Ù„ÙØªØ±Ø© مضمَّنة ÙÙŠ Ø§Ù„Ø§ØØªØ³Ø§Ø¨."</string> - <!-- XHED: risk details - infection period logged information body, below behaviors --> - <string name="risk_details_information_body_period_logged">"يمكن تقدير خطر العدوى بالنسبة إليك Ùقط Ù„Ù„ÙØªØ±Ø§Øª التي كان خلالها تسجيل المخالطة نشطًا. وبالتالي يجب أن تظل ميزة التسجيل نشطة دائمًا."</string> - <!-- XHED: risk details - infection period logged information body, below behaviors --> - <string name="risk_details_information_body_period_logged_assessment">"يشمل تسجيل المخالطة الأربعة عشر يومًا الماضية. وأثناء هذه Ø§Ù„ÙØªØ±Ø© يمكن أن تكون ميزة التسجيل على جهازك نشطة لمدة %1$s من الأيام. يقوم التطبيق تلقائيًا Ø¨ØØ°Ù السجلات الأقدم، مثل تلك التي لم تعد ذات صلة بمنع العدوى."</string> - <!-- XHED: risk details - how your risk level was calculated, below behaviors --> - <string name="risk_details_subtitle_infection_risk_past">"هذه هي الطريقة التي كان يتم بها تقدير الخطر الواقع عليك"</string> - <!-- XHED: risk details - how your risk level will be calculated, below behaviors --> - <string name="risk_details_subtitle_infection_risk">"هذه هي الطريقة التي يتم بها تقدير الخطر الواقع عليك"</string> - <!-- XMSG: risk details - risk couldn't be calculated tracing wasn't enabled long enough, below behaviors --> - <string name="risk_details_information_body_unknown_risk">"تعذر علينا تقدير خطر العدوى نظرًا لعدم قيامك بتنشيط تسجيل المخالطة Ù„ÙØªØ±Ø© طويلة بما Ùيه Ø§Ù„ÙƒÙØ§ÙŠØ©."</string> - <!-- XMSG: risk details - risk calculation wasn't possible for 24h, below behaviors --> - <string name="risk_details_information_body_outdated_risk">"تعذر ØªØØ¯ÙŠØ« تسجيل المخالطة لأكثر من 24 ساعة."</string> - <!-- YTXT: risk details - low risk explanation text --> - <string name="risk_details_information_body_low_risk">"لديك خطر Ù…Ù†Ø®ÙØ¶ للعدوى لأنه لم يتم تسجيل مخالطتك بأشخاص تم تشخيصهم لاØÙ‚ًا كمصابين بمرض كوÙيد-19ØŒ أو لأن تجمعاتك كانت Ù„ÙØªØ±Ø© زمنية قصيرة وعن Ø¨ÙØ¹Ø¯."</string> - <!-- YTXT: risk details - increased risk explanation text with variable for day(s) since last contact --> - <plurals name="risk_details_information_body_increased_risk"> - <item quantity="one">"خطر العدوى لديك Ù…Ø±ØªÙØ¹ لأنك خالطت مؤخرًا شخصًا ÙˆØ§ØØ¯Ù‹Ø§ على الأقل Ù…ÙØµØ§Ø¨ بمرض كوÙيد-19 منذ %1$s من الأيام Ù„ÙØªØ±Ø© زمنية أطول وعن قرب."</item> - <item quantity="other">"خطر العدوى لديك Ù…Ø±ØªÙØ¹ لأنك خالطت مؤخرًا شخصًا ÙˆØ§ØØ¯Ù‹Ø§ على الأقل Ù…ÙØµØ§Ø¨ بمرض كوÙيد-19 منذ %1$s من الأيام Ù„ÙØªØ±Ø© زمنية أطول وعن قرب."</item> - <item quantity="zero">"خطر العدوى لديك Ù…Ø±ØªÙØ¹ لأنك خالطت مؤخرًا شخصًا ÙˆØ§ØØ¯Ù‹Ø§ على الأقل Ù…ÙØµØ§Ø¨ بمرض كوÙيد-19 منذ %1$s من الأيام Ù„ÙØªØ±Ø© زمنية أطول وعن قرب."</item> - <item quantity="two">"خطر العدوى لديك Ù…Ø±ØªÙØ¹ لأنك خالطت مؤخرًا شخصًا ÙˆØ§ØØ¯Ù‹Ø§ على الأقل Ù…ÙØµØ§Ø¨ بمرض كوÙيد-19 منذ %1$s من الأيام Ù„ÙØªØ±Ø© زمنية أطول وعن قرب."</item> - <item quantity="few">"خطر العدوى لديك Ù…Ø±ØªÙØ¹ لأنك خالطت مؤخرًا شخصًا ÙˆØ§ØØ¯Ù‹Ø§ على الأقل Ù…ÙØµØ§Ø¨ بمرض كوÙيد-19 منذ %1$s من الأيام Ù„ÙØªØ±Ø© زمنية أطول وعن قرب."</item> - <item quantity="many">"خطر العدوى لديك Ù…Ø±ØªÙØ¹ لأنك خالطت مؤخرًا شخصًا ÙˆØ§ØØ¯Ù‹Ø§ على الأقل Ù…ÙØµØ§Ø¨ بمرض كوÙيد-19 منذ %1$s من الأيام Ù„ÙØªØ±Ø© زمنية أطول وعن قرب."</item> - </plurals> - <!-- YTXT: risk details - risk calculation explanation --> - <string name="risk_details_information_body_notice">"يتم تقدير خطر العدوى من بيانات تسجيل المخالطة (المدة ومدى الاقتراب) Ù…ØÙ„يًا على جهازك. ولا يمكن الاطلاع على خطر العدوى من جانب أي شخص آخر أو تمريره إليه."</string> - <!-- YTXT: risk details - risk calculation explanation for low risk --> - <string name="risk_details_information_body_notice_low">"لذلك، تم تصني٠خطر العدوى ÙƒÙ…Ù†Ø®ÙØ¶. يتم تقدير خطر العدوى من بيانات تسجيل المخالطة (المدة ومدى الاقتراب) Ù…ØÙ„يًا على جهازك. ولا يمكن الاطلاع على خطر العدوى من جانب أي شخص آخر أو تمريره إليه."</string> - <!-- YTXT: risk details - risk calculation explanation for increased risk --> - <string name="risk_details_information_body_notice_increased">"وبالتالي، تم تصني٠خطر العدوى ÙƒÙ…Ø±ØªÙØ¹. يتم تقدير خطر العدوى من بيانات تسجيل المخالطة (المدة ومدى الاقتراب) Ù…ØÙ„يًا على جهازك. ولا يمكن الاطلاع على خطر العدوى من جانب أي شخص آخر أو تمريره إليه. عند العودة إلى المنزل، يرجى تجنب التعامل عن قرب مع Ø£ÙØ±Ø§Ø¯ أسرتك أو عائلتك."</string> - <!-- NOTR --> - <string name="risk_details_button_update">@string/risk_card_button_update</string> - <!-- NOTR --> - <string name="risk_details_button_enable_tracing">@string/risk_card_button_enable_tracing</string> - <!-- XACT: risk details page title --> - <string name="risk_details_accessibility_title">"مستوى الخطر"</string> - - <!-- XHED: one time risk explanation dialog title --> - <string name="risk_details_explanation_dialog_title">"معلومات ØÙˆÙ„ ÙˆØ¸ÙŠÙØ© تسجيل المخالطة"</string> - <!-- YTXT: one time risk explanation dialog - pointing to the faq page for more information--> - <string name="risk_details_explanation_dialog_faq_body">"لمزيد من المعلومات، راجع ØµÙØØ© الأسئلة المتكررة."</string> - - <!-- #################################### - Onboarding - ###################################### --> - - <!-- XBUT: onboarding - forward and deny --> - <string name="onboarding_button_disable">"عدم التنشيط"</string> - <!-- XBUT: onboarding - forward and allow --> - <string name="onboarding_button_enable">"تنشيط"</string> - <!-- XBUT: onboarding - back and cancel --> - <string name="onboarding_button_cancel">"إلغاء"</string> - <!-- XBUT: onboarding - next --> - <string name="onboarding_button_next">"التالي"</string> - <!-- XBUT: onboarding - start --> - <string name="onboarding_button_start">"لنبدأ"</string> - <!-- XTXT: onboarding - back description for screen reader --> - <string name="onboarding_button_back_description">"الخلÙ"</string> - <!-- XACT: Onboarding (together) page title --> - <string name="onboarding_onboarding_accessibility_title">"ØµÙØØ© البدء 1 من 5: Ù…ÙƒØ§ÙØØ© Ùيروس كورونا معًا"</string> - <!-- XHED: onboarding(together) - fight corona --> - <string name="onboarding_headline">"Ù„Ù†ÙƒØ§ÙØ Ùيروس كورونا معًا"</string> - <!-- XHED: onboarding(together) - two/three line headline under an illustration --> - <string name="onboarding_subtitle">"مزيد من الØÙ…اية لك ولنا جميعًا. يمكننا كسر سلاسل العدوى أسرع بكثير من خلال استخدام تطبيق Corona-Warn-App."</string> - <!-- YTXT: onboarding(together) - inform about the app --> - <string name="onboarding_body">"قم بتØÙˆÙŠÙ„ جهازك إلى نظام Ù„Ù„ØªØØ°ÙŠØ± من Ùيروس كورونا. ألق٠نظرة عامة على مستوى الخطر الواقع عليك وتعر٠على ما إذا كنت قد تواصلت عن قرب مع أي شخص مصاب بمرض كوÙيد-19 خلال آخر 14 يومًا."</string> - <!-- YTXT: onboarding(together) - explain application --> - <string name="onboarding_body_emphasized">"يسجل التطبيق تجمعات Ø§Ù„Ø£ÙØ±Ø§Ø¯ بتبادل Ù…Ø¹Ø±ÙØ§Øª عشوائية Ù…Ø´ÙØ±Ø© بين أجهزتهم، ولا يتم الوصول إلى أي معلومات شخصية أيًا كانت."</string> - <!-- XACT: onboarding(together) - illustraction description, header image --> - <string name="onboarding_illustration_description">"مجموعة أشخاص يستخدمون هواتÙهم الذكية ØÙˆÙ„ المدينة."</string> - <!-- XACT: Onboarding (privacy) page title --> - <string name="onboarding_privacy_accessibility_title">"ØµÙØØ© البدء 2 من 5: خصوصية البيانات. يوجد نص طويل. للمتابعة ÙÙŠ أي وقت لاØÙ‚ØŒ استخدم الزر الموجود أعلى الشاشة."</string> - <!-- XHED: onboarding(privacy) - title --> - <string name="onboarding_privacy_headline">"خصوصية البيانات"</string> - - <!-- XACT: onboarding(privacy) - illustraction description, header image --> - <string name="onboarding_privacy_illustration_description">"سيدة تستخدم تطبيق Corona-Warn-App على هاتÙها الذكي. ترمز أيقونة القÙÙ„ الموجودة بخلÙية الشاشة إلى بيانات Ù…Ø´ÙØ±Ø©."</string> - <!-- XACT: Onboarding (tracing) page title --> - <string name="onboarding_tracing_accessibility_title">"ØµÙØØ© البدء 3 من 5: كيÙية تمكين تسجيل المخالطة"</string> - <!-- XHED: onboarding(tracing) - how to enable tracing --> - <string name="onboarding_tracing_headline">"كيÙية تمكين تسجيل المخالطة"</string> - <!-- XHED: onboarding(tracing) - two/three line headline under an illustration --> - <string name="onboarding_tracing_subtitle">"Ù„ØªØØ¯ÙŠØ¯ ما إذا كنت معرضًا لخطر العدوى، يجب عليك تنشيط ميزة تسجيل المخالطة."</string> - <!-- YTXT: onboarding(tracing) - explain tracing --> - <string name="onboarding_tracing_body">"يعمل تسجيل المخالطة من خلال تلقي جهازك، عبر BluetoothØŒ Ø§Ù„Ù…Ø¹Ø±ÙØ§Øª العشوائية Ø§Ù„Ù…Ø´ÙØ±Ø© لمستخدمين آخرين وتمرير معرÙÙƒ العشوائي إلى أجهزتهم. ويمكن إلغاء تنشيط هذه الميزة ÙÙŠ أي وقت."</string> - <!-- YTXT: onboarding(tracing) - explain tracing --> - <string name="onboarding_tracing_body_emphasized">"لا تقوم Ø§Ù„Ù…Ø¹Ø±ÙØ§Øª العشوائية بإرسال أي معلومات إلى الأشخاص الآخرين إلا معلومات التاريخ والمدة ومدى الاقتراب (باستخدام قوة الإشارة). ولا يتم أبدًا تسجيل البيانات الشخصية مثل الاسم والعنوان والموقع. كما لا يمكن ØªØØ¯ÙŠØ¯ هوية Ø§Ù„Ø£ÙØ±Ø§Ø¯."</string> - <!-- YTXT: onboarding(tracing) - easy language explain tracing link--> - <string name="onboarding_tracing_easy_language_explanation"><a href="https://www.bundesregierung.de/breg-de/themen/corona-warn-app/corona-warn-app-leichte-sprache-gebaerdensprache">"معلومات التطبيق بلغة مبسطة ولغة الإشارة"</a></string> - <!-- NOTR: onboarding(tracing) - easy language explain tracing link URL--> - <string name="onboarding_tracing_easy_language_explanation_url">"https://www.bundesregierung.de/breg-de/themen/corona-warn-app/corona-warn-app-leichte-sprache-gebaerdensprache"</string> - <!-- XHED: onboarding(tracing) - headline for consent information --> - <string name="onboarding_tracing_headline_consent">"إقرار المواÙقة"</string> - <!-- YTXT: onboarding(tracing) - body for consent information --> - <string name="onboarding_tracing_body_consent">"Ù„Ù…Ø¹Ø±ÙØ© ما إذا كنت قد خالطت شخصًا مصابًا بالعدوى، وما إذا كان هناك خطر عدوى بالنسبة لك، يتعين عليك تنشيط خاصية تسجيل المخالطة الموجودة ÙÙŠ التطبيق. بالنقر على زر: \"تمكين\"ØŒ أنت تواÙÙ‚ على تمكين خاصية تسجيل المخالطة بالتطبيق، ومعالجة البيانات ÙÙŠ هذا السياق."<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"لكي يمكنك استخدام خاصية تسجيل المخالطة، يتعين عليك أيضًا تنشيط خاصية تسجيل المخالطات Ø§Ù„Ù…ØªØ§ØØ© من جوجل على هاتÙÙƒ الذكي \"إشعارات التعرض Ù„Ùيروس كورونا المستجد (كوÙيد-19) \"ØŒ ÙˆÙ…Ù†Ø Ø§Ø°Ù† لتطبيق Corona-Warn-App لاستخامها."<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"عند تنشيط خاصية تسجيل المخالطات يتولى هاتÙÙƒ الذكي إنشاء وإرسال أرقام تعري٠عشوائية عبر Bluetooth Ø¨ØµÙØ© مستمرة، والتي يمكن استقبالها ÙÙŠ Ù…ØÙŠØ·Ùƒ من هوات٠أبل وأندرويد الذكية الأخرى، التي تكون Ùيها خاصية تسجيل المخالطات منشطة بالمثل. والعكس صØÙŠØØŒ ØÙŠØ« يستقبل هاتÙÙƒ الذكي Ø§Ù„Ù…Ø¹Ø±ÙØ§Øª العشوائية للهوات٠الذكية الأخرى. يتم تسجيل أرقام تعريÙÙƒ العشوائية ÙˆØ§Ù„Ù…Ø¹Ø±ÙØ§Øª العشوائية المستقبلة من الهوات٠الذكية الأخرى ÙÙŠ سجل المخالطة بخاصية تسجيل المخالطات، وتخزن هناك لمدة 14 يومًا."<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"للتعر٠على خطر العدوى بالنسبة لك، يستدعي التطبيق عدة مرات يوميًا -أو عند الرغبة- قائمةً Ø¨Ø§Ù„Ù…Ø¹Ø±ÙØ§Øª العشوائية Ù„ÙƒØ§ÙØ© المستخدمين الذين سجلوا إصابتهم بÙيروس كورونا ÙÙŠ التطبيق. يتم مقارنة هذه القائمة بعد ذلك مع Ø§Ù„Ù…Ø¹Ø±ÙØ§Øª العشوائية المخزنة ÙÙŠ سجل المخالطة بخاصية تسجيل المخالطات. وعندما يتأكد التطبيق من أنك ربما خالطت مستخدمًا مصابًا بالعدوى، يخطرك التطبيق بأنك خالطت شخصًا مصابًا، وأنه من Ø§Ù„Ù…ØØªÙ…Ù„ تعرضك لخطر العدوى. ÙÙŠ هذه Ø§Ù„ØØ§Ù„Ø© ÙŠØØµÙ„ التطبيق أيضًا على إذن بالوصول إلى بيانات إضاÙية مخزنة ÙÙŠ سجل المخالطة بخاصية تسجيل المخالطات لهاتÙÙƒ الذكي (التاريخ، والمدة، وقوة إشارة Bluetooth عند المخالطة)."<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"ÙŠÙØ³ØªØ¯Ù„ على Ø§Ù„Ø¨ÙØ¹Ø¯ المكاني من قوة إشارة Bluetooth (كلما كانت الإشارة أقوى، كانت Ø§Ù„Ù…Ø³Ø§ÙØ© أقل). ثم يقيّم التطبيق هذه البيانات، من أجل تقييم Ø§ØØªÙ…الية اصابتك بÙيروس كورونا ØŒ وتقديم التوصيات لك بشأن ما يجب القيام به بعد ذلك. يتم إجراء هذا التقييم ØØµØ±ÙŠÙ‹Ø§ على هاتÙÙƒ الذكي. لا ÙŠØ¹Ø±Ù Ø£ØØ¯ÙŒ سواك (بما ÙÙŠ ذلك معهد روبرت كوخ أيضًا) ما إذا كنت قد خالطت شخصًا مصابًا، وما إذا كان الأمر ينطوي على خطر إصابتك."<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"لإلغاء مواÙقتك على خاصية تسجيل المخالطة، يمكنك إلغاء تنشيط الخاصية عبر الشريط الانزلاقي داخل التطبيق أو ØØ°Ù التطبيق. وإذا كنت ترغب ÙÙŠ استخدام خاصية تسجيل المخالطة مجددًا، Ùيمكنك إعادة تنشيط الشريط الانزلاقي أو تثبيت التطبيق من جديد. عند إلغاء خاصية تسجيل المخالطة، لن ÙŠÙØØµ التطبيق ما إذا كنت قد خالطت مستخدمًا مصابًا أم لا. أيضًا لكي توق٠إرسال Ø§Ù„Ù…Ø¹Ø±ÙØ§Øª العشوائية واستقبالها، يتعين عليك الغاء تنشيط تسجل مخالطة المصابين بمرض كوÙيد -19 ÙÙŠ إعدادات هاتÙÙƒ الذكي. يرجى الانتباه إلى أن رموز التعري٠العشوائية للهات٠الذكي والهوات٠الذكية الأخرى، والمخزنة ÙÙŠ سجل المخالطة لن يتم ØØ°Ùها من التطبيق. لا يمكنك ØØ°Ù البيانات المخزنة ÙÙŠ سجل المخالطة ØØ°Ùًا نهائيًا إلا من خلال إعدادات هاتÙÙƒ الذكي."<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"تجد تعليمات التطبيق الخاصة بØÙ…اية البيانات (بما ÙÙŠ ذلك المعلومات ØÙˆÙ„ معالجة البيانات لتسجيل المخالطة) ØªØØª بند القائمة \"معلومات خصوصية البيانات\"."</string> - <!-- XBUT: onboarding(tracing) - button enable tracing --> - <string name="onboarding_tracing_button_next">"تنشيط تسجيل المخالطة"</string> - <!-- XTXT: onboarding(tracing) - dialog about tracing permission declined --> - <string name="onboarding_tracing_dialog_headline">"تÙويض"</string> - <!-- YMSI: onboarding(tracing) - dialog about tracing --> - <string name="onboarding_tracing_dialog_body">"هذا يعني أن تطبيق Corona-Warn-App لا يمكنه إرسال أو تلقي إشعارات ØÙˆÙ„ مستوى خطر مرض كوÙيد-19. يمكنك إلغاء تنشيط هذه الميزة ÙÙŠ أي وقت."</string> - <!-- XBUT: onboarding(tracing) - positive button (right) --> - <string name="onboarding_tracing_dialog_button_positive">"عدم التنشيط"</string> - <!-- XBUT: onboarding(tracing) - negative button (right) --> - <string name="onboarding_tracing_dialog_button_negative">"الخلÙ"</string> - <!-- XACT: onboarding(tracing) - dialog about background jobs header text --> - <string name="onboarding_background_fetch_dialog_headline">"ØªØØ¯ÙŠØ«Ø§Øª ÙÙŠ الخلÙية Ù…Ùلغى تنشيطها"</string> - <!-- YMSI: onboarding(tracing) - dialog about background jobs --> - <string name="onboarding_background_fetch_dialog_body">"قمت بإلغاء تنشيط ØªØØ¯ÙŠØ«Ø§Øª ÙÙŠ الخلÙية لتطبيق Corona-Warn-App. الرجاء تنشيط ØªØØ¯ÙŠØ«Ø§Øª ÙÙŠ الخلÙية لاستخدام تسجيل المخالطة التلقائي. إذا لم تقم بتنشيط ØªØØ¯ÙŠØ«Ø§Øª ÙÙŠ الخلÙية، Ùيمكنك Ùقط بدء تسجيل المخالطة يدويًا ÙÙŠ التطبيق. يمكنك تنشيط ØªØØ¯ÙŠØ«Ø§Øª ÙÙŠ الخلÙية للتطبيق ÙÙŠ إعدادات الجهاز لديك."</string> - <!-- XBUT: onboarding(tracing) - dialog about background jobs, open device settings --> - <string name="onboarding_background_fetch_dialog_button_positive">"ÙØªØ إعدادات الجهاز"</string> - <!-- XBUT: onboarding(tracing) - dialog about background jobs, continue in app --> - <string name="onboarding_background_fetch_dialog_button_negative">"بدء تسجيل المخالطة يدويًا"</string> - <!-- XACT: onboarding(tracing) - dialog about energy optimized header text --> - <string name="onboarding_energy_optimized_dialog_headline">"Ø§Ù„Ø³Ù…Ø§Ø Ø¨Ù†Ø´Ø§Ø· له Ø£ÙØ¶Ù„ية ÙÙŠ الخلÙية"</string> - <!-- YMSI: onboarding(tracing) - dialog about energy optimized --> - <string name="onboarding_energy_optimized_dialog_body">"قم بتمكين النشاط الذي له Ø£ÙØ¶Ù„ية ÙÙŠ الخلÙية Ù„Ù„Ø³Ù…Ø§Ø Ù„Ù„ØªØ·Ø¨ÙŠÙ‚ Ø¨ØªØØ¯ÙŠØ¯ مستوى الخطر الواقع عليك ÙÙŠ الخلÙية ÙÙŠ أي وقت (Ù…Ø³ØªØØ³ÙŽÙ†). يؤدي ذلك إلى تعطيل زيادة عمر البطارية لتطبيق Corona-Warn-App Ùقط، ولا نتوقع أن يؤدي إلى Ø§Ù†Ø®ÙØ§Ø¶ ملØÙˆØ¸ ÙÙŠ عمر بطارية جهازك.\nإذا لم ØªØ³Ù…Ø Ø¨Ù‡Ø°Ø§ الإعداد، Ùمن Ø§Ù„Ù…Ø³ØªØØ³Ù† لك ÙØªØ التطبيق يدويًا مرة ÙˆØ§ØØ¯Ø© يوميًا على الأقل."</string> - <!-- XBUT: onboarding(tracing) - dialog about energy optimized, open device settings --> - <string name="onboarding_energy_optimized_dialog_button_positive">"السماØ"</string> - <!-- XBUT: onboarding(tracing) - dialog about energy optimized, continue in app --> - <string name="onboarding_energy_optimized_dialog_button_negative">"عدم السماØ"</string> - <!-- XACT: onboarding(tracing) - dialog about manual checking header text --> - <string name="onboarding_manual_required_dialog_headline">"النشاط الذي له Ø£ÙØ¶Ù„ية ÙÙŠ الخلÙية معطَّل"</string> - <!-- YMSI: onboarding(tracing) - dialog about manual checking --> - <string name="onboarding_manual_required_dialog_body">"يرجى العلم أنه مع تعطيل النشاط الذي له Ø£ÙØ¶Ù„ية ÙÙŠ الخلÙية، سيتعين عليك ÙØªØ التطبيق مرة ÙˆØ§ØØ¯Ø© يوميًا Ù„ØªØØ¯ÙŠØ« مستوى الخطر. \n\nيمكنك تعطيل النشاط الذي له Ø£ÙØ¶Ù„ية ÙÙŠ الخلÙية من إعداداتك ÙÙŠ أي وقت."</string> - <!-- XBUT: onboarding(tracing) - dialog about manual checking button --> - <string name="onboarding_manual_required_dialog_button">"مواÙÙ‚"</string> - <!-- XACT: onboarding(tracing) - illustraction description, header image --> - <string name="onboarding_tracing_illustration_description">"قام ثلاثة أشخاص بتنشيط تسجيل المخالطة على أجهزتهم؛ مما سيعمل على تسجيل ØªØ¬Ù…Ù‘ÙØ¹Ø§ØªÙ‡Ù… مع بعضهم بعضًا."</string> - <!-- XHED: onboarding(tracing) - location explanation for bluetooth headline --> - <string name="onboarding_tracing_location_headline">"Ø§Ù„Ø³Ù…Ø§Ø Ø¨Ø§Ù„ÙˆØµÙˆÙ„ إلى الموقع"</string> - <!-- XTXT: onboarding(tracing) - location explanation for bluetooth body text --> - <string name="onboarding_tracing_location_body">"لا يمكن الوصول إلى موقعك. يتطلب جوجل Ùˆ/أو أندرويد الوصول إلى موقع جهازك لاستخدام Bluetooth."</string> - <!-- XBUT: onboarding(tracing) - button enable tracing --> - <string name="onboarding_tracing_location_button">"ÙØªØ إعدادات الجهاز"</string> - <!-- XACT: Onboarding (test) page title --> - <string name="onboarding_test_accessibility_title">"ØµÙØØ© البدء 4 من 5: إذا كنت مصابًا بمرض كوÙيد-19..."</string> - <!-- XHED: onboarding(test) - about positive tests --> - <string name="onboarding_test_headline">"إذا كنت مصابًا بمرض كوÙيد-19..."</string> - <!-- XHED: onboarding(test) - two/three line headline under an illustration --> - <string name="onboarding_test_subtitle">"...ÙŠÙØ±Ø¬Ù‰ الإبلاغ عن هذا ÙÙŠ تطبيق Corona-Warn-App. مشاركة نتائج اختبارك أمر اختياري وآمن. ÙŠÙØ±Ø¬Ù‰ القيام بهذا من أجل ØµØØ© الجميع."</string> - <!-- YTXT: onboarding(test) - explain test --> - <string name="onboarding_test_body">"يتم تشÙير إشعارك ومعالجته بصورة آمنة على خادم آمن. الآن، سيتلقى الأشخاص الذين قام جهازك بتجميع Ù…Ø¹Ø±ÙØ§ØªÙ‡Ù… العشوائية Ø§Ù„Ù…Ø´ÙØ±Ø© ØªØØ°ÙŠØ±Ù‹Ø§ مصØÙˆØ¨Ù‹Ø§ بمعلومات ØÙˆÙ„ ما يجب عليهم ÙØ¹Ù„Ù‡ على الÙور."</string> - <!-- XACT: onboarding(test) - illustraction description, header image --> - <string name="onboarding_test_illustration_description">"يتم إرسال تشخيص اختبار إيجابي Ù…Ø´ÙØ±Ù‹Ø§ إلى النظام؛ مما سينتج عنه ØªØØ°ÙŠØ± المستخدمين الآخرين."</string> - <!-- XACT: Onboarding (datashare) page title --> - <string name="onboarding_notifications_accessibility_title">"ØµÙØØ© البدء 5 من 5: تلقي Ø§Ù„ØªØØ°ÙŠØ±Ø§Øª ÙˆØªØØ¯ÙŠØ¯ الأخطار"</string> - <!-- XHED: onboarding(datashare) - about positive tests --> - <string name="onboarding_notifications_headline">"تلقي Ø§Ù„ØªØØ°ÙŠØ±Ø§Øª ÙˆØªØØ¯ÙŠØ¯ الأخطار"</string> - <!-- XHED: onboarding(datashare) - two/three line headline under an illustration --> - <string name="onboarding_notifications_subtitle">"يمكن للتطبيق إشعارك تلقائيًا بمستوى الخطر الواقع عليك ÙˆØªØØ°ÙŠØ±Ùƒ من ØØ§Ù„ات العدوى الجديدة من الأشخاص الذين خالطتهم. Ø§Ø³Ù…Ø Ù„Ù„ØªØ·Ø¨ÙŠÙ‚ الآن بإشعارك."</string> - <!-- YTXT: onboarding(datashare) - explain test --> - <string name="onboarding_notifications_body">"ويمكنك بعد ذلك عزل Ù†ÙØ³Ùƒ ذاتيًا Ù„ØÙ…اية الآخرين ÙˆÙ…Ø¹Ø±ÙØ© مكان إجراء الاختبار."</string> - <!-- XACT: onboarding(notifications) - illustraction description, header image --> - <string name="onboarding_notifications_illustration_description">"سيدة تتلقى إشعارًا من تطبيق Corona-Warn-App."</string> - - <!-- #################################### - Onboarding sixteen include - ###################################### --> - - <!-- XACT: onboarding(sixteen) title --> - <string name="sixteen_title_text">"ØØ¯ العمر: 16 سنة ÙØ£ÙƒØ«Ø±"</string> - - <!-- XACT: onboarding(sixteen) title --> - <string name="sixteen_description_text">"هذا التطبيق موجه إلى الأشخاص المقيمين ÙÙŠ ألمانيا وإلى هؤلاء الذين لا تقل أعمارهم عن 16 سنة."</string> - - - <!-- #################################### - Settings - ###################################### --> - - <!-- XHED: settings - settings overview page title --> - <string name="settings_title">"الإعدادات"</string> - <!-- XTXT: settings - on, like a label next to a setting --> - <string name="settings_on">"تشغيل"</string> - <!-- XTXT: settings - off, like a label next to a setting --> - <string name="settings_off">"إيقا٠تشغيل"</string> - <!-- XHED: settings(tracing) - page title --> - <string name="settings_tracing_title">"تسجيل المخالطة"</string> - <!-- XHED: settings(tracing) - headline bellow illustration --> - <string name="settings_tracing_headline">"هذه هي طريقة عمل تسجيل المخالطة"</string> - <!-- XTXT: settings(tracing) - explain text in settings overview under headline --> - <string name="settings_tracing_body_description">"Ø§Ù„Ø³Ù…Ø§Ø Ø¨Ø¥Ù†Ø´Ø§Ø¡ Ù…Ø¹Ø±ÙØ§Øª عشوائية لمرض كوÙيد-19 ومشاركتها."</string> - <!-- XTXT: settings(tracing) - shows status under header in home, active --> - <string name="settings_tracing_body_active">"تسجيل المخالطة نشط"</string> - <!-- XTXT: settings(tracing) - shows status under header in home, inactive --> - <string name="settings_tracing_body_inactive">"تسجيل المخالطة توقÙ"</string> - <!-- XTXT: settings(tracing) - shows status under header in home, inactive location --> - <string name="settings_tracing_body_inactive_location">"خدمات الموقع تم إلغاء تنشيطها"</string> - <!-- YTXT: settings(tracing) - explains tracings --> - <string name="settings_tracing_body_text">"يتعين عليك تنشيط ميزة تسجيل المخالطة Ù„ØªØØ¯ÙŠØ¯ ما إذا كنت معرضًا لخطر العدوى أم لا، ويعمل ØªØØ¯ÙŠØ¯ خطر العدوى من خلال تلقي جهازك، عبر BluetoothØŒ Ø§Ù„Ù…Ø¹Ø±ÙØ§Øª العشوائية Ø§Ù„Ù…Ø´ÙØ±Ø© لمستخدمين آخرين وتمرير معرÙÙƒ العشوائي إلى أجهزتهم. ويمكنك تعطيل هذه الميزة ÙÙŠ أي وقت."<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"لا تمرر Ø§Ù„Ù…Ø¹Ø±ÙØ§Øª العشوائية Ø§Ù„Ù…Ø´ÙØ±Ø© إلا معلومات ØÙˆÙ„ التاريخ والمدة ومدى الاقتراب من الأشخاص الآخرين (يتم التقدير باستخدام قوة الإشارة). ولا يتم أبدًا تسجيل البيانات الشخصية، مثل الاسم والعنوان والموقع، كما لا يمكن ØªØØ¯ÙŠØ¯ هوية Ø§Ù„Ø£ÙØ±Ø§Ø¯."</string> - <!-- XTXT: settings(tracing) - status next to switch under title --> - <string name="settings_tracing_status_active">"نشط"</string> - <!-- XTXT: settings(tracing) - status next to switch under title --> - <string name="settings_tracing_status_inactive">"موقوÙ"</string> - <!-- XTXT: settings(tracing) - status next to switch under title --> - <string name="settings_tracing_status_restricted">"مقيَّد"</string> - <!-- XTXT: settings(tracing) - shows status under header in home, no internet --> - <string name="settings_tracing_body_connection_inactive">"لا يوجد اتصال بالإنترنت"</string> - <!-- XTXT: settings(tracing) - shows status under header in home, no bluetooth --> - <string name="settings_tracing_body_bluetooth_inactive">"تم إيقا٠تشغيل Bluetooth"</string> - <!--XHED : settings(tracing) - headline on card about the current status and what to do --> - <string name="settings_tracing_status_bluetooth_headline">"تشغيل Bluetooth"</string> - <!-- XTXT: settings(tracing) - explains user what to do on card if bluetooth is disabled --> - <string name="settings_tracing_status_bluetooth_body">"يجب تشغيل Bluetooth لتسجيل المخالطة من أجل تسجيل Ø§Ù„ØªØ¬Ù…Ù‘ÙØ¹Ø§Øª. يرجى تشغيل Bluetooth من إعدادات جهازك."</string> - <!-- XBUT: settings(tracing) - go to operating system settings button on card --> - <string name="settings_tracing_status_bluetooth_button">"ÙØªØ إعدادات الجهاز"</string> - <!--XHED : settings(tracing) - headline on card about the current status and what to do --> - <string name="settings_tracing_status_location_headline">"Ø§Ù„Ø³Ù…Ø§Ø Ø¨Ø§Ù„ÙˆØµÙˆÙ„ إلى الموقع"</string> - <!-- XTXT: settings(tracing) - explains user what to do on card if location is disabled --> - <string name="settings_tracing_status_location_body">"لا يمكن الوصول إلى موقعك. يتطلب جوجل Ùˆ/أو أندرويد الوصول إلى موقع جهازك لاستخدام Bluetooth."</string> - <!-- XBUT: settings(tracing) - go to operating system settings button on card - location --> - <string name="settings_tracing_status_location_button">"ÙØªØ إعدادات الجهاز"</string> - <!--XHED : settings(tracing) - headline on card about the current status and what to do --> - <string name="settings_tracing_status_connection_headline">"ÙØªØ الاتصال بالإنترنت"</string> - <!-- XTXT: settings(tracing) - explains user what to do on card if connection is disabled --> - <string name="settings_tracing_status_connection_body">"يتطلب تسجيل المخالطة اتصالًا بالإنترنت لتقدير المخالطات. ÙŠÙØ±Ø¬Ù‰ تشغيل WIFI أو بيانات الهات٠من إعدادات جهازك."</string> - <!-- XBUT: settings(tracing) - go to operating system settings button on card --> - <string name="settings_tracing_status_connection_button">"ÙØªØ إعدادات الجهاز"</string> - <!-- XTXT: settings(tracing) - explains the circle progress indicator to the right with the current value --> - <plurals name="settings_tracing_status_body_active"> - <item quantity="one">"تسجيل المخالطة نشط لمدة يوم ÙˆØ§ØØ¯.\nلا يمكن أن يكون التØÙ‚Ù‚ من المخالطة موثوقًا به إلا إذا كان تسجيل المخالطة نشطًا دائمًا."</item> - <item quantity="other">"تسجيل المخالطة نشط لمدة %1$s من الأيام.\nلا يمكن أن يكون التØÙ‚Ù‚ من المخالطة موثوقًا به إلا إذا كان تسجيل المخالطة نشطًا دائمًا."</item> - <item quantity="zero">"تسجيل المخالطة نشط لمدة %1$s من الأيام.\nلا يمكن أن يكون التØÙ‚Ù‚ من المخالطة موثوقًا به إلا إذا كان تسجيل المخالطة نشطًا دائمًا."</item> - <item quantity="two">"تسجيل المخالطة نشط لمدة %1$s من الأيام.\nلا يمكن أن يكون التØÙ‚Ù‚ من المخالطة موثوقًا به إلا إذا كان تسجيل المخالطة نشطًا دائمًا."</item> - <item quantity="few">"تسجيل المخالطة نشط لمدة %1$s من الأيام.\nلا يمكن أن يكون التØÙ‚Ù‚ من المخالطة موثوقًا به إلا إذا كان تسجيل المخالطة نشطًا دائمًا."</item> - <item quantity="many">"تسجيل المخالطة نشط لمدة %1$s من الأيام.\nلا يمكن أن يكون التØÙ‚Ù‚ من المخالطة موثوقًا به إلا إذا كان تسجيل المخالطة نشطًا دائمًا."</item> - </plurals> - <!-- XACT: settings(tracing) - describes illustration --> - <string name="settings_tracing_illustration_description_active">"قام ثلاثة أشخاص بتنشيط تسجيل المخالطة على أجهزتهم؛ مما سيعمل على تسجيل ØªØ¬Ù…Ù‘ÙØ¹Ø§ØªÙ‡Ù… مع بعضهم بعضًا."</string> - <!-- XACT: settings(tracing) - describes illustration --> - <string name="settings_tracing_illustration_description_inactive">"ألغى شخص تنشيط تسجيل المخالطة على هاتÙÙ‡ الذكي؛ وبالتالي، لم يتم تسجيل ØªØ¬Ù…Ù‘ÙØ¹ مع شخصين آخرين."</string> - <!-- XACT: settings(tracing) - describes illustration --> - <string name="settings_tracing_bluetooth_illustration_description_inactive">"أوق٠شخص تشغيل Bluetooth على هاتÙÙ‡ الذكي؛ وبالتالي، لم يتم تسجيل ØªØ¬Ù…Ù‘ÙØ¹ مع شخصين آخرين."</string> - <!-- XACT: settings(tracing) - describes illustration --> - <string name="settings_tracing_location_illustration_description_inactive"/> - <!-- XACT: settings(tracing) - describes illustration --> - <string name="settings_tracing_connection_illustration_description_inactive">"قطع شخص الاتصال بالإنترنت على هاتÙÙ‡ الذكي؛ وبالتالي، لم يتم تسجيل ØªØ¬Ù…Ù‘ÙØ¹ مع شخصين آخرين."</string> - - <!-- XHED: settings(notification) - notification page title --> - <string name="settings_notifications_title">"الإشعارات"</string> - <!-- XHED: settings(notification) - multiline headline below illustration, active --> - <string name="settings_notifications_headline_active">"هل تريد تنشيط إشعارات مستوى خطر مرض كوÙيد-19ØŸ"</string> - <!-- XHED: settings(notification) - multiline headline below illustration, inactive --> - <string name="settings_notifications_headline_inactive">"تم إلغاء تنشيط الإشعارات"</string> - <!-- XTXT: settings(notification) - text in row on settings overview --> - <string name="settings_notifications_body_description">"Ø§Ù„Ø³Ù…Ø§Ø Ø¨Ø§Ù„Ø¥Ø´Ø¹Ø§Ø±Ø§Øª التلقائية لمستوى خطر مرض كوÙيد-19"</string> - <!-- YTXT: settings(notification) - description text when it notifications are enabled --> - <string name="settings_notifications_body_active">"ØØ¯Ø¯ المناطق التي تريد استمرار تلقي الإشعارات عنها."</string> - <!-- XTXT: settings(notification) - explains what the user has to do to activate settings --> - <string name="settings_notifications_body_inactive">"لتنشيط الإشعارات، يجب Ø§Ù„Ø³Ù…Ø§Ø Ø¨Ø¥Ø´Ø¹Ø§Ø±Ø§Øª تطبيق Corona-Warn-App من إعدادات جهازك."</string> - <!-- XHED: settings(notification) - card headline --> - <string name="settings_notifications_headline_card">"تنشيط الإشعارات"</string> - <!-- XHED: settings - notification headline on settings overview --> - <string name="settings_notifications_subtitle_notification">"الإشعارات"</string> - <!-- XTXT: settings(notification) - next to a switch --> - <string name="settings_notifications_subtitle_update_risk">"تم تغيير خطر العدوى"</string> - <!-- XTXT: settings(notification) - next to a switch --> - <string name="settings_notifications_subtitle_update_test">"ØØ§Ù„Ø© اختبار مرض كوÙيد-19"</string> - <!-- XBUT: settings(notification) - go to operating settings --> - <string name="settings_notifications_button_open_settings">"ÙØªØ إعدادات الجهاز"</string> - <!-- XACT: main (overview) - illustraction description, explanation image, displays notificatin status, active --> - <string name="settings_notifications_illustration_description_active">"سيدة تتلقى إشعارًا من تطبيق Corona-Warn-App."</string> - <!-- XACT: main (overview) - illustraction description, explanation image, displays notificatin status, inactive --> - <string name="settings_notifications_illustration_description_inactive">"سيدة ألغت تنشيط إشعارات تطبيق Corona-Warn-App."</string> - <!-- XBUT: settings - go to reset application --> - <string name="settings_reset_title">"إعادة تعيين التطبيق"</string> - <!-- XTXT: settings(reset) - explains the user what do expect when he navigates to reset --> - <string name="settings_reset_body_description">"ØØ°Ù كل البيانات ÙÙŠ التطبيق."</string> - <!-- XHED: settings(reset) - multiline headline below illustration --> - <string name="settings_reset_headline">"هل تريد بالتأكيد إعادة تعيين التطبيق؟"</string> - <!-- XTXT: settings(reset) - explains the consequences --> - <string name="settings_reset_body">"لن يتم إشعارك بعد الآن بالمخالطات ولن يكون بمقدورك ØªØØ°ÙŠØ± المستخدمين الآخرين."</string> - <!-- XHED: settings(reset) - on card, explains user to go to the operating system settings --> - <string name="settings_reset_headline_keys">"ØØ°Ù سجل "<xliff:g id="line_break">"\n"</xliff:g>"المخالطة"</string> - <!-- XTXT: settings(reset) - on card --> - <string name="settings_reset_body_keys">"يجب ØØ°Ù سجل المخالطة بشكل Ù…Ù†ÙØµÙ„ من إعدادات جهازك."</string> - <!-- XBUT: settings(reset) - triggers reset --> - <string name="settings_reset_button_positive">"إعادة تعيين التطبيق"</string> - <!-- XBUT: settings(reset) - cancel reset and navigates the suer back to the settings --> - <string name="settings_reset_button_negative">"إلغاء"</string> - <!-- XACT: main (overview) - illustraction description, explanation image --> - <string name="settings_reset_illustration_description">"هات٠ذكي يعرض رمزًا يشير إلى إعادة تعيين التطبيق."</string> - <!-- XHED: settings(reset) - dialog headline --> - <string name="settings_reset_dialog_headline">"إعادة تعيين التطبيق"</string> - <!-- XTXT: settings(reset) - dialog content --> - <string name="settings_reset_dialog_body">"لن يتم إشعارك بعد الآن بالمخالطات ولن يكون بمقدورك ØªØØ°ÙŠØ± المستخدمين الآخرين. لا يمكن التراجع عن هذا الإجراء."</string> - <!-- XBUT: settings(reset) - dialog cancel --> - <string name="settings_reset_dialog_button_cancel">"إلغاء"</string> - <!-- XBUT: settings(reset) - dialog confirm --> - <string name="settings_reset_dialog_button_confirm">"إعادة تعيين"</string> - <!-- XHED: settings(background priority) - notification page title --> - <string name="settings_background_priority_title">"نشاط له Ø£ÙØ¶Ù„ية ÙÙŠ الخلÙية"</string> - <!-- XTXT: settings(background priority) - text in row on settings overview --> - <string name="settings_background_priority_body_description">"Ø§Ù„Ø³Ù…Ø§Ø Ø¨ØªØØ¯ÙŠØ«Ø§Øª مستوى الخطر تلقائيًا"</string> - <!-- XHED: settings(background priority) - multiline headline below illustration --> - <string name="settings_background_priority_headline">"ØªØØ¯ÙŠØ« ØØ§Ù„Ø© المخاطرة تلقائيًا"</string> - <!-- YTXT: settings(background priority) - description text --> - <string name="settings_background_priority_body">"إذا قمت بتنشيط النشاط ÙÙŠ الخلÙية الذي له Ø£ÙØ¶Ù„ية، ÙØ³ÙŠØªÙ…كن التطبيق من ØªØØ¯ÙŠØ¯ ØØ§Ù„Ø© المخاطرة لديك ÙÙŠ أي وقت. وهذا سيعطل ØªØØ³ÙŠÙ† عمر البطارية لتطبيق Corona-Warn-App Ùقط."</string> - <!-- XACT: settings(background priority) - illustraction description --> - <string name="settings_background_priority_illustration_description"/> - <!-- XTXT: settings(background priority) - explains user what to do on card if background priority is enabled --> - <string name="settings_background_priority_card_body">"لتعطيل نشاط له Ø£ÙØ¶Ù„ية ÙÙŠ الخلÙية، الرجاء إلغاء تنشيطه ÙÙŠ إعدادات الجهاز."</string> - <!-- XBUT: settings(background priority) - go to operating system settings button on card --> - <string name="settings_background_priority_card_button">"ÙØªØ إعدادات الجهاز"</string> - <!-- XHED : settings(background priority) - headline on card about the current status and what to do --> - <string name="settings_background_priority_card_headline">"تعطيل نشاط له Ø£ÙØ¶Ù„ية ÙÙŠ الخلÙية"</string> - - <!-- #################################### - App Information - ###################################### --> - - <!-- XHED: Page title for menu information page --> - <string name="information_title">"معلومات التطبيق"</string> - <!-- XTXT: Version information text --> - <string name="information_version">"الإصدار:%1s"</string> - <!-- XHED: Page title for about information page, also menu item / button text --> - <string name="information_about_title">"نبذة عن التطبيق"</string> - <!-- XHED: Subtitle for about information page --> - <string name="information_about_headline">"Ù„Ù†ÙƒØ§ÙØ Ùيروس كورونا معًا"</string> - <!-- YTXT: Body text for about information page --> - <string name="information_about_body_emphasized">"معهد روبرت كوخ (RKI) هو الهيئة الصØÙŠØ© Ø§Ù„Ø§ØªØØ§Ø¯ÙŠØ© العامة ÙÙŠ ألمانيا. ينشر المعهد تطبيق Corona-Warn-App بالنيابة عن الØÙƒÙˆÙ…Ø© Ø§Ù„Ø§ØªØØ§Ø¯ÙŠØ©ØŒ والتطبيق مصمم كامتداد رقمي لإجراءات Ø§Ù„ØµØØ© العامة المنÙَّذة Ø¨Ø§Ù„ÙØ¹Ù„: التباعد الاجتماعي ÙˆØ§Ù„Ù†Ø¸Ø§ÙØ© الشخصية واستخدام أقنعة الوجه."</string> - <!-- YTXT: Body text for about information page --> - <string name="information_about_body">"يمكن لأي شخص يستخدم التطبيق تتبع سلسلة العدوى وكسرها. ÙŠØÙظ التطبيق Ø§Ù„ØªØ¬Ù…Ù‘ÙØ¹Ø§Øª مع الأشخاص الآخرين Ù…ØÙ„يًا على جهازك. ويتم إشعارك عند ØªØ¬Ù…Ù‘ÙØ¹Ùƒ مع أشخاص تم تشخيصهم مؤخرًا على أنهم مصابون بمرض كوÙيد-19ØŒ علمًا أن هويتك وخصوصيتك Ù…ØÙ…يتان دائمًا."</string> - <!-- XACT: describes illustration --> - <string name="information_about_illustration_description">"مجموعة أشخاص يستخدمون هواتÙهم الذكية ØÙˆÙ„ المدينة."</string> - <!-- XHED: Page title for privacy information page, also menu item / button text --> - <string name="information_privacy_title">"خصوصية البيانات"</string> - <!-- XACT: describes illustration --> - <string name="information_privacy_illustration_description">"سيدة تستخدم تطبيق Corona-Warn-App على هاتÙها الذكي. ترمز أيقونة القÙÙ„ الموجودة بخلÙية الشاشة إلى بيانات Ù…Ø´ÙØ±Ø©."</string> - <!-- XTXT: Path to the full blown privacy html, to translate it exchange "_de" to "_en" and provide the corresponding html file --> - <string name="information_privacy_html_path">"privacy_en.html"</string> - <!-- XHED: Page title for terms of use information page, also menu item / button text --> - <string name="information_terms_title">"شروط الاستخدام"</string> - <!-- XHED: Page headline for terms of use information page --> - <string name="information_terms_headline">"Ø§Ù„Ù…ØØªÙˆÙ‰"</string> - <!-- XACT: describes illustration --> - <string name="information_terms_illustration_description">"هات٠ذكي تظهر على شاشته نصوص بخط كبير وبجوارها علامة ØµØ ØªØ±Ù…Ø² إلى قبول شروط الاستخدام."</string> - <!-- XTXT: Path to the full blown terms html, to translate it exchange "_de" to "_en" and provide the corresponding html file --> - <string name="information_terms_html_path">"terms_en.html"</string> - <!-- XHED: Page title for technical contact and hotline information page, also menu item / button text --> - <string name="information_contact_title">"الخط الساخن الÙني"</string> - <!-- XHED: Subtitle for technical contact and hotline information page --> - <string name="information_contact_headline">"كي٠يمكننا مساعدتك؟"</string> - <!-- YTXT: Body text for technical contact and hotline information page --> - <string name="information_contact_body">"Ù„Ù„Ø§Ø³ØªÙØ³Ø§Ø±Ø§Øª الÙنية ØÙˆÙ„ تطبيق Corona-Warn-AppØŒ الرجاء الاتصال بالخط الساخن."</string> - <!-- XHED: Subtitle for technical contact and hotline information page --> - <string name="information_contact_subtitle_phone">"الخط الساخن الÙني:"</string> - <!-- XLNK: Button / hyperlink to phone call for technical contact and hotline information page --> - <string name="information_contact_button_phone">"‎+49 800 7540001"</string> - <!-- XBUT: CAUTION - ONLY UPDATE THE NUMBER IF NEEDED, ONLY NUMBERS AND NO SPECIAL CHARACTERS EXCEPT "+" and "space" ALLOWED IN THIS FIELD; --> - <string name="information_contact_phone_call_number">"‎+49 800 7540001"</string> - <!-- XTXT: Body text for technical contact and hotline information page --> - <string name="information_contact_body_phone">"خدمة العملاء هنا لمساعدتك."</string> - <!-- YTXT: Body text for technical contact and hotline information page --> - <string name="information_contact_body_open">"اللغات: الألمانية والإنجليزية والتركية\nساعات العمل:"<xliff:g id="line_break">"\n"</xliff:g>"الاثنين إلى السبت: من الساعة 7 صباØÙ‹Ø§ ØØªÙ‰ 10 مساءً"<xliff:g id="line_break">"\n(Ùيما عد العطلات الرسمية)"</xliff:g><xliff:g id="line_break">"\nالاتصال مجاني."</xliff:g></string> - <!-- YTXT: Body text for technical contact and hotline information page --> - <string name="information_contact_body_other">"إذا كان لديك أي Ø§Ø³ØªÙØ³Ø§Ø±Ø§Øª متعلقة Ø¨ØµØØªÙƒØŒ ÙÙŠÙØ±Ø¬Ù‰ التواصل مع طبيبك الممارس العام أو الخط الساخن لخدمة الطوارئ الطبية، هات٠‎116 117."</string> - <!-- XACT: describes illustration --> - <string name="information_contact_illustration_description">"رجل يرتدي سماعة رأس أثناء إجراء اتصال."</string> - <!-- XLNK: Menu item / hyper link / button text for navigation to FAQ website --> - <string name="information_help_title">"الأسئلة المتكررة"</string> - <!-- XACT: accessibility hint --> - <string name="information_help_title_accessibility">"الأسئلة المتكررة. سيتم إعادة توجيهك إلى موقع ويب خارجي."</string> - <!-- XHED: Page title for technical information page, also menu item / button text --> - <string name="information_technical_title">"الإخطارات القانونية"</string> - <!-- XACT: describes illustration --> - <string name="information_technical_illustration_description">"هات٠ذكي تظهر على شاشته نصوص بخط كبير وبجوارها ميزان يرمز إلى الإشعارات القانونية."</string> - <!-- XTXT: Path to the full blown legal html, to translate it exchange "_de" to "_en" and provide the corresponding html file --> - <string name="information_technical_html_path">"technical_en.html"</string> - <!-- XHED: Page title for legal information page, also menu item / button text --> - <string name="information_legal_title">"بيان النشر"</string> - <!-- XHED: Headline for legal information page, publisher section --> - <string name="information_legal_headline_publisher">"تم النشر بواسطة"</string> - <!-- YTXT: subtitle for legal information page, publisher section --> - <string name="information_legal_subtitle_publisher">"(مسؤول بموجب المادة 5ØŒ الÙقرة 1 من قانون الإعلام عن Ø¨ÙØ¹Ø¯ \"TMG\"ØŒ المادة 55ØŒ الÙقرة 1 من عقد البث الإذاعي \"RStV\"ØŒ قانون ØÙ…اية البيانات \"DS-GVO\"ØŒ القانون Ø§Ù„Ø§ØªØØ§Ø¯ÙŠ Ù„ØÙ…اية البيانات \"BDSG\")"</string> - <!-- YTXT: body for legal information page, publisher section --> - <string name="information_legal_body_publisher">"معهد روبرت كوخ"<xliff:g id="line_break">"\n"</xliff:g>"Ù†ÙˆØ±Ø¯ÙˆÙØ± 20"<xliff:g id="line_break">"\n"</xliff:g>"13353 برلين"<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"ممثلًا بواسطة رئيسه"</string> - <!-- XHED: Headline for legal information page, contact section --> - <string name="information_legal_headline_contact">"الاتصال"</string> - <!-- YTXT: subtitle for legal information page, contact section --> - <string name="information_legal_subtitle_contact">"البريد الإلكتروني: CoronaWarnApp@rki.de"</string> - <!-- YTXT: subtitle for legal information page, open contact form : Only has to be translated in URL for English FOrm--> - <string name="information_legal_subtitle_contact_label">"نموذج الاتصال"</string> - <!-- YTXT: subtitle for legal information page url : Only has to be translated in URL for English FOrm--> - <string name="information_legal_subtitle_contact_url">"https://www.rki.de/SharedDocs/Kontaktformulare/en/Kontaktformulare/weitere/Corona-Warn-App/Corona-Warn-App_Integrator.html"</string> - <!-- NOTR: subtitle for legal information page, open contact form for languages other than English and German --> - <string name="information_legal_subtitle_contact_form_non_en_de">"Contact Form in "<a href="https://www.rki.de/SharedDocs/Kontaktformulare/en/Kontaktformulare/weitere/Corona-Warn-App/Corona-Warn-App_Integrator.html">"English"</a>" or "<a href="https://www.rki.de/SharedDocs/Kontaktformulare/weitere/Corona-Warn-App/Corona-Warn-App_Integrator.html">"German"</a></string> - <!-- XHED: Headline for legal information page, tax section --> - <string name="information_legal_headline_taxid">"رقم تعري٠ضريبة القيمة Ø§Ù„Ù…Ø¶Ø§ÙØ©"</string> - <!-- YTXT: subtitle for legal information page, tax section --> - <string name="information_legal_subtitle_taxid">"DE 165 893 430"</string> - <!-- XACT: describes illustration --> - <string name="information_legal_illustration_description">"هات٠ذكي تظهر على شاشته نصوص بخط كبير وبجوارها رمز لقسم يمثل بيان النشر."</string> - - - <!-- #################################### - Submission - ###################################### --> - - <!-- XHED: Dialog title for generic web request error --> - <string name="submission_error_dialog_web_generic_error_title">"خطأ"</string> - <!-- XMSG: Dialog body for generic web request network error with status code --> - <string name="submission_error_dialog_web_generic_network_error_body">"تعذر إنشاء اتصال (%1$d). يرجى Ø§Ù„Ù…ØØ§ÙˆÙ„Ø© لاØÙ‚ًا."</string> - <!-- XMSG: Dialog body for generic web request error without status code --> - <string name="submission_error_dialog_web_generic_error_body">"تعذر إنشاء اتصال. يرجى Ø§Ù„Ù…ØØ§ÙˆÙ„Ø© لاØÙ‚ًا."</string> - <!-- XBUT: Positive button for generic web request error --> - <string name="submission_error_dialog_web_generic_error_button_positive">"الخلÙ"</string> - - <!-- XHED: Dialog title for already paired test error --> - <string name="submission_error_dialog_web_test_paired_title">"رمز الاستجابة السريعة (QR) غير صالØ"</string> - <!-- XMSG: Dialog body for already paired test error --> - <string name="submission_error_dialog_web_test_paired_body">"رمز الاستجابة السريعة (QR) غير ØµØ§Ù„Ø Ø£Ùˆ تم تسجيله Ø¨Ø§Ù„ÙØ¹Ù„ على هات٠ذكي آخر. ستتلقى نتيجة الاختبار من مركز الاختبار أو المختبر بغض النظر عن صلاØÙŠØ© رمز الاستجابة السريعة (QR). إذا تمت إصابتك بمرض كوÙيد-19ØŒ ÙØ³ÙŠØªÙ… إعلامك من قبل دائرة Ø§Ù„ØµØØ© العامة."</string> - <!-- XBUT: Positive button for already paired test error --> - <string name="submission_error_dialog_web_test_paired_button_positive">"الخلÙ"</string> - - <!-- XHED: Dialog title for could not create submission tan --> - <string name="submission_error_dialog_web_paring_invalid_title">"خطأ"</string> - <!-- XMSG: Dialog body for could not create submission tan --> - <string name="submission_error_dialog_web_paring_invalid_body">"تعذر إنشاء رقم المعاملة (TAN) للتقديم. ÙŠÙØ±Ø¬Ù‰ الاتصال بالخط الساخن الÙني عبر معلومات التطبيق -> الخط الساخن الÙني."</string> - <!-- XBUT: Positive button for could not create submission tan --> - <string name="submission_error_dialog_web_paring_invalid_button_positive">"الخلÙ"</string> - - <!-- XHED: Dialog title for submission tan invalid --> - <string name="submission_error_dialog_web_tan_invalid_title">"خطأ"</string> - <!-- XMSG: Dialog body for submission tan invalid --> - <string name="submission_error_dialog_web_tan_invalid_body">"رقم المعاملة (TAN) المÙنشأ غير ØµØ§Ù„Ø Ù„Ù„ØªÙ‚Ø¯ÙŠÙ…. الرجاء الاتصال بالخط الساخن الÙني عبر معلومات التطبيق ↠الخط الساخن الÙني."</string> - <!-- XBUT: Positive button for submission tan invalid --> - <string name="submission_error_dialog_web_tan_invalid_button_positive">"الخلÙ"</string> - - <!-- XHED: Dialog title for submission tan redeemed --> - <string name="submission_error_dialog_web_tan_redeemed_title">"الاختبار به أخطاء"</string> - <!-- XMSG: Dialog body for submission tan redeemed --> - <string name="submission_error_dialog_web_tan_redeemed_body">"هناك مشكلة ÙÙŠ تقييم اختبارك، ØÙŠØ« انتهت صلاØÙŠØ© رمز الاستجابة السريعة (QR)."</string> - <!-- XBUT: Positive button for submission tan redeemed --> - <string name="submission_error_dialog_web_tan_redeemed_button_positive">"مواÙÙ‚"</string> - - <!-- Permission Rationale Dialog --> - <!-- XHED: Dialog headline QR Scan permission rationale --> - <string name="submission_qr_code_scan_permission_rationale_dialog_headline">"تÙويض الكاميرا مطلوب"</string> - <!-- YTXT: Dialog Body text for QR Scan permission rationale --> - <string name="submission_qr_code_scan_permission_rationale_dialog_body">"Ø§Ù„Ø³Ù…Ø§Ø Ù„Ù„ØªØ·Ø¨ÙŠÙ‚ باستخدام الكاميرا Ù„Ù…Ø³Ø Ø±Ù…Ø² الاستجابة السريعة (QR)."</string> - <!-- XBUT: Dialog(QR Scan permission rationale) - positive button (right) --> - <string name="submission_qr_code_scan_permission_rationale_dialog_button_positive">"سماØ"</string> - <!-- XBUT: Dialog(QR Scan permission rationale) - negative button (left) --> - <string name="submission_qr_code_scan_permission_rationale_dialog_button_negative">"عدم السماØ"</string> - - <!-- Permission Denied Dialog --> - <!-- XHED: Dialog headline QR Scan permission denied --> - <string name="submission_qr_code_scan_permission_denied_dialog_headline">"الوصول إلى الكاميرا لازم"</string> - <!-- YTXT: Dialog Body text for QR Scan permission denied --> - <string name="submission_qr_code_scan_permission_denied_dialog_body">"ÙŠÙØ±Ø¬Ù‰ ÙØªØ إعدادات النظام ÙˆØ§Ù„Ø³Ù…Ø§Ø Ù„Ù„ØªØ·Ø¨ÙŠÙ‚ باستخدام الكاميرا Ù„Ù…Ø³Ø Ø±Ù…Ø² الاستجابة السريعة (QR)."</string> - <!-- XBUT: Dialog(QR Scan permission denied) - button --> - <string name="submission_qr_code_scan_permission_denied_dialog_button">"مواÙÙ‚"</string> - - <!-- QR Code Scan Invalid Dialog --> - <!-- XHED: Dialog headline for invalid QR code --> - <string name="submission_qr_code_scan_invalid_dialog_headline">"رمز الاستجابة السريعة (QR) غير صالØ"</string> - <!-- YTXT: Dialog Body text for invalid QR code --> - <string name="submission_qr_code_scan_invalid_dialog_body">"رمز الاستجابة السريعة (QR) غير ØµØ§Ù„Ø Ø£Ùˆ تم تسجيله Ø¨Ø§Ù„ÙØ¹Ù„ على هات٠ذكي آخر. ستتلقى نتيجة الاختبار من مركز الاختبار أو المختبر بغض النظر عن صلاØÙŠØ© رمز الاستجابة السريعة (QR). إذا تمت إصابتك بمرض كوÙيد-19ØŒ ÙØ³ÙŠØªÙ… إعلام دائرة Ø§Ù„ØµØØ© العامة من خلال القناة المنصوص عليها قانونيًا وسيتم الاتصال بك."</string> - <!-- XBUT: Dialog(Invalid QR code) - positive button (right) --> - <string name="submission_qr_code_scan_invalid_dialog_button_positive">"ÙŠÙØ±Ø¬Ù‰ Ø§Ù„Ù…ØØ§ÙˆÙ„Ø© مرة أخرى."</string> - <!-- XBUT: Dialog(Invalid QR code) - negative button (left) --> - <string name="submission_qr_code_scan_invalid_dialog_button_negative">"إلغاء"</string> - - <!-- QR Code Scan Screen --> - <string name="submission_qr_code_scan_title">"ضع رمز الاستجابة السريعة (QR) داخل الإطار."</string> - <!-- YTXT: instruction text for QR code scanning --> - <string name="submission_qr_code_scan_body">"ضع رمز الاستجابة السريعة (QR) داخل الإطار."</string> - - <!-- Submission Test Result --> - <!-- XHED: Page headline for test result --> - <string name="submission_test_result_headline">"نتيجة الاختبار"</string> - <!-- XHED: Page subheadline for test result --> - <string name="submission_test_result_subtitle">"كي٠يعمل ذلك:"</string> - <!-- XHED: Page headline for results next steps --> - <string name="submission_test_result_steps_added_heading">"تمت Ø¥Ø¶Ø§ÙØ© الاختبار بنجاØ"</string> - <!-- YTXT: Body text for for results next steps --> - <string name="submission_test_result_steps_added_body">"تم تخزين اختبارك ÙÙŠ تطبيق Corona-Warn-App."</string> - <!-- XHED: Page headline for pending test result next steps --> - <string name="submission_test_result_pending_steps_waiting_heading">"نتيجة الاختبار غير Ù…ØªÙˆÙØ±Ø© ØØªÙ‰ الآن"</string> - <!-- YTXT: Body text for next steps section of waiting test result page --> - <string name="submission_test_result_pending_steps_waiting_body">"نتيجة اختبارك غير Ù…ØªÙˆÙØ±Ø© ØØªÙ‰ الآن."</string> - <!-- XBUT: test result pending : refresh button --> - <string name="submission_test_result_pending_refresh_button">"ØªØØ¯ÙŠØ«"</string> - <!-- XBUT: test result pending : remove the test button --> - <string name="submission_test_result_pending_remove_test_button">"ØØ°Ù الاختبار"</string> - <!-- XHED: Page headline for negative test result next steps --> - <string name="submission_test_result_negative_steps_negative_heading">"نتيجة اختبارك"</string> - <!-- YTXT: Body text for next steps section of test negative result --> - <string name="submission_test_result_negative_steps_negative_body">"لا تشير نتيجة المعمل لإصابتك بÙيروس كورونا المستجد\n\nÙŠÙØ±Ø¬Ù‰ ØØ°Ù الاختبار من تطبيق Corona-Warn-App ØØªÙ‰ تتمكن من ØÙظ رمز نتيجة اختبار جديد هنا عند Ø§Ù„ØØ§Ø¬Ø©."</string> - <!-- XBUT: negative test result : remove the test button --> - <string name="submission_test_result_negative_remove_test_button">"ØØ°Ù الاختبار"</string> - <!-- XHED: Page headline for positive test result screen --> - <string name="submission_test_result_positive_steps_positive_heading">"نتيجة اختبارك"</string> - <!-- YTXT: Body text for next steps section of test positive result--> - <string name="submission_test_result_positive_steps_positive_body">"تم التØÙ‚Ù‚ من إيجابية نتيجة اختبارك."</string> - <!-- XHED: Page headline for other warnings screen --> - <string name="submission_test_result_positive_steps_warning_others_heading">"ØªØØ°ÙŠØ± الآخرين"</string> - <!-- YTXT: Body text for for other warnings screen--> - <string name="submission_test_result_positive_steps_warning_others_body">"شارÙÙƒ Ù…Ø¹Ø±ÙØ§ØªÙƒ العشوائية لآخر 14 يومًا Ù„ØÙ…اية الآخرين وكسر سلسلة العدوى."</string> - <!-- XBUT: positive test result : continue button --> - <string name="submission_test_result_positive_continue_button">"التالي"</string> - <!-- XHED: Page headline for invalid test result screen --> - <string name="submission_test_result_invalid_steps_invalid_heading">"نتيجة اختبارك"</string> - <!-- YTXT: Body text for next steps section of invalid test result--> - <string name="submission_test_result_invalid_steps_invalid_body">"ØØ¯Ø«Øª مشكلة أثناء تقييم اختبارك. ÙŠÙØ±Ø¬Ù‰ التواصل مع مركز الاختبار أو المعمل Ù„Ù…Ø¹Ø±ÙØ© كيÙية المتابعة.\n\nÙŠÙØ±Ø¬Ù‰ ØØ°Ù الاختبار من تطبيق Corona-Warn-AppØ› ØØªÙ‰ تتمكن من ØÙظ رمز اختبار جديد Ùيه، عند Ø§Ù„ØØ§Ø¬Ø©."</string> - <!-- XBUT: invalid test result : remove the test button --> - <string name="submission_test_result_invalid_remove_test_button">"ØØ°Ù الاختبار"</string> - <!-- XHED: Dialog title for tracing required dailog --> - <string name="submission_test_result_dialog_tracing_required_title">"تسجيل المخالطة مطلوب"</string> - <!-- YTXT: Dialog text for tracing required dialog--> - <string name="submission_test_result_dialog_tracing_required_message">"ÙŠÙØ±Ø¬Ù‰ تنشيط تسجيل المخالطة Ù„ØªØØ°ÙŠØ± أشخاص آخرين."</string> - <!-- XBUT: tracing required : OK button --> - <string name="submission_test_result_dialog_tracing_required_button">"مواÙÙ‚"</string> - <!-- XHED: Dialog title for test removal --> - <string name="submission_test_result_dialog_remove_test_title">"يمكن Ù…Ø³Ø Ø§Ù„Ø§Ø®ØªØ¨Ø§Ø± ضوئيًا مرة ÙˆØ§ØØ¯Ø© Ùقط."</string> - <!-- YTXT: Dialog text for test removal --> - <string name="submission_test_result_dialog_remove_test_message">"إذا قمت بإزالة الاختبار، Ùلن تتمكن من استرجاع نتيجة الاختبار الخاصة بك. ستتلقى نتيجة الاختبار من مركز الاختبار أو المختبر بغض النظر عن صلاØÙŠØ© رمز الاستجابة السريعة (QR). إذا تمت إصابتك بمرض كوÙيد-19ØŒ ÙØ³ÙŠØªÙ… إعلام دائرة Ø§Ù„ØµØØ© العامة من خلال القناة المنصوص عليها قانونيًا وسيتم الاتصال بك."</string> - <!-- XBUT: Positive button for test removal --> - <string name="submission_test_result_dialog_remove_test_button_positive">"إزالة"</string> - <!-- XBUT: Negative button for test removal --> - <string name="submission_test_result_dialog_remove_test_button_negative">"إلغاء"</string> - <!-- XHED: Title for test result card positive --> - <string name="submission_test_result_card_positive_title">"Ùيروس كورونا المستجد إيجابي"</string> - <!-- YTXT: Body text for test result card positive --> - <string name="submission_test_result_card_positive_body">"تم تشخيصك على أنك مصاب بÙيروس كورونا المستجد."</string> - - <!-- Submission Tan --> - <!-- XHED: Page title for TAN submission pge --> - <string name="submission_tan_title">"إدخال رقم المعاملة (TAN)"</string> - <!-- YTXT: Body text for the tan submission page --> - <string name="submission_tan_body">"الرجاء إدخال رقم المعاملة (TAN) المكون من 10 أرقام والمقدم إليك."</string> - <!-- XBUT: Submit TAN button --> - <string name="submission_tan_button_text">"التالي"</string> - <!-- XACT: Submission Tan page title --> - <string name="submission_tan_accessibility_title">"إدخال رقم المعاملة (TAN)"</string> - <!-- YTXT: Error text for the tan submission page --> - <string name="submission_tan_error">"رقم المعاملة (TAN) غير صالØ. يرجى التØÙ‚Ù‚ من إدخالك."</string> - <!-- YTXT: Error text for the tan submission page (wrong characters) --> - <string name="submission_tan_character_error">"الإدخال غير صالØ. ÙŠÙØ±Ø¬Ù‰ التØÙ‚Ù‚ من إدخالك."</string> - - <!-- Submission Intro --> - <!-- XHED: Page title for menu at the start of the submission process --> - <string name="submission_intro_title">"هل خضعت للاختبار؟"</string> - <!-- XHED: Page headline for menu the at start of the submission process --> - <string name="submission_intro_headline">"هذه هي طريقة عمل تطبيق Corona-Warn-App"</string> - <!-- YTXT: submission introduction text --> - <string name="submission_intro_text">"ØØªÙ‰ يعمل التطبيق جيدًا، نعتمد على دعم الأشخاص المصابين بمرض كوÙيد-19 لنا.\n\nبما أنه لا يتم تبادل إلا Ø§Ù„Ù…Ø¹Ø±ÙØ§Øª العشوائية Ø§Ù„Ù…Ø´ÙØ±Ø©ØŒ ستظل هويتك غير Ù…Ø¹Ø±ÙˆÙØ©. يمكنك الآن المتابعة كما يلي:"</string> - <!-- XBUT: Submission introduction next button--> - <string name="submission_intro_button_next">"التالي"</string> - <!-- XACT: Submission intro - illustration description, explanation image --> - <string name="submission_intro_illustration_description">"يتم إرسال تشخيص اختبار إيجابي Ù…Ø´ÙØ±Ù‹Ø§ إلى النظام؛ مما سينتج عنه ØªØØ°ÙŠØ± المستخدمين الآخرين."</string> - <!-- YTXT: submission introduction bullet points --> - <string-array name="submission_intro_bullet_points"> - <item>"إذا كنت مصابًا بمرض كوÙيد-19ØŒ يمكنك إشعار الآخرين."</item> - <item>"إذا تم منØÙƒ رقم المعاملة (TAN) لتشخيص إيجابي، يمكنك استخدامه لتسجيل الاختبار."</item> - <item>"إذا لم يكن لديك رقم المعاملة (TAN)ØŒ يمكنك طلبه بالهاتÙ."</item> - </string-array> - <!-- XACT: Submission Intro page title --> - <string name="submission_intro_accessibility_title">"هل خضعت للاختبار؟ هذه هي طريقة عمل تطبيق Corona-Warn-App"</string> - - <!-- Dispatcher --> - <!-- XHED: Page headline for dispatcher menu --> - <string name="submission_dispatcher_headline">"ØªØØ¯ÙŠØ¯"</string> - <!-- XHED: Page subheadline for dispatcher menu --> - <string name="submission_dispatcher_subheadline">"ما المعلومات التي لديك؟"</string> - <!-- YTXT: Dispatcher text for QR code option --> - <string name="submission_dispatcher_card_qr">"مستند برمز الاستجابة السريعة (QR)"</string> - <!-- YTXT: Body text for QR code dispatcher option --> - <string name="submission_dispatcher_qr_card_text">"سجّÙÙ„ اختبارك من خلال Ù…Ø³Ø Ø±Ù…Ø² الاستجابة السريعة (QR) لمستند اختبارك."</string> - <!-- XHED: Dialog headline for dispatcher QR prviacy dialog --> - <string name="submission_dispatcher_qr_privacy_dialog_headline">"إقرار المواÙقة"</string> - <!-- YTXT: Dialog Body text for dispatcher QR privacy dialog --> - <string name="submission_dispatcher_qr_privacy_dialog_body">"بالنقر على \"قبول\"ØŒ ÙØ¥Ù†Ùƒ تواÙÙ‚ على Ø§Ù„Ø³Ù…Ø§Ø Ù„Ù„ØªØ·Ø¨ÙŠÙ‚ بالاستعلام عن ØØ§Ù„Ø© ÙØØµ Ùيروس كورونا خاصتك، وعرض Ø§Ù„ØØ§Ù„Ø© ÙÙŠ التطبيق. ØªØªØ§Ø Ù„Ùƒ هذه الخاصية عندما تتلقى رمز استجابة سريعة (QR) وتواÙÙ‚ على Ø§Ù„Ø³Ù…Ø§Ø Ø¨Ø¥Ø±Ø³Ø§Ù„ نتيجة الاختبار إلى نظام Ø§Ù„Ø³ÙŠØ±ÙØ± الخاص بالتطبيق. بمجرد أن يودع معمل Ø§Ù„ÙØÙˆØµØ§Øª نتيجة اختبارك على Ø§Ù„Ø³ÙŠØ±ÙØ±ØŒ يمكنك الاطلاع على النتيجة ÙÙŠ التطبيق. وإذا كنت قد نشطت خاصية الإشعارات، ÙØ³ØªØªÙ„قى إشعارًا أيضًا خارج التطبيق بظهور نتيجة الاختبار. نتيجة الاختبار Ù†ÙØ³Ù‡Ø§ لا تظهر إلا ÙÙŠ التطبيق لأسباب متعلقة بØÙ…اية البيانات. يمكنك إلغاء هذه المواÙقة ÙÙŠ أي وقت عن طريق ØØ°Ù تسجيل الاختبار ÙÙŠ التطبيق. عند إلغاء المواÙقة، تظل مشروعية المعالجة ØØªÙ‰ تاريخ الإلغاء قائمةً. تجد المزيد من المعلومات ØªØØª بند القائمة \"معلومات خصوصية البيانات\"."</string> - <!-- XBUT: submission(dispatcher QR Dialog) - positive button (right) --> - <string name="submission_dispatcher_qr_privacy_dialog_button_positive">"قبول"</string> - <!-- XBUT: submission(dispatcher QR Dialog) - negative button (left) --> - <string name="submission_dispatcher_qr_privacy_dialog_button_negative">"عدم القبول"</string> - <!-- YTXT: Dispatcher text for TAN code option --> - <string name="submission_dispatcher_card_tan_code">"رقم المعاملة (TAN)"</string> - <!-- YTXT: Body text for TAN code dispatcher option --> - <string name="submission_dispatcher_tan_code_card_text">"سجّÙÙ„ اختبارك بإدخال رقم المعاملة (TAN) يدويًا."</string> - <!-- YTXT: Dispatcher text for TELE-TAN option --> - <string name="submission_dispatcher_card_tan_tele">"طلب رقم المعاملة (TAN)"</string> - <!-- YTXT: Body text for TELE_TAN dispatcher option --> - <string name="submission_dispatcher_tan_tele_card_text">"ÙŠÙØ±Ø¬Ù‰ الاتصال بنا إذا كنت مصابًا بمرض كوÙيد-19."</string> - <!-- XACT: Dispatcher Tan page title --> - <string name="submission_dispatcher_accessibility_title">"ما المعلومات التي لديك؟"</string> - - <!-- Submission Positive Other Warning --> - <!-- XHED: Page title for the positive result additional warning page--> - <string name="submission_positive_other_warning_title">"ØªØØ°ÙŠØ± الآخرين"</string> - <!-- XHED: Page headline for the positive result additional warning page--> - <string name="submission_positive_other_warning_headline">"ÙŠÙØ±Ø¬Ù‰ مساعدتنا جميعًا!"</string> - <!-- YTXT: Body text for the positive result additional warning page--> - <string name="submission_positive_other_warning_body">"يمكنك لاØÙ‚ًا التأكد من مشاركة تطبيق Corona-Warn-App Ù„Ù…Ø¹Ø±ÙØ§ØªÙƒ العشوائية ÙÙŠ آخر 14 يومًا مع الآخرين. ومن خلال القيام بذلك، يمكنك ØªØØ°ÙŠØ± الأشخاص الآخرين والمساعدة على كسر سلسلة العدوى.\n\nستظل هويتك مجهولة ØÙŠØ« يتم إرسال Ø§Ù„Ù…Ø¹Ø±ÙØ§Øª العشوائية غير الشخصية Ùقط."</string> - <!-- XHED: Title for the privacy card--> - <string name="submission_positive_other_warning_privacy_title">"خصوصية البيانات"</string> - <!-- YTXT: Body text for the privacy card--> - <string name="submission_positive_other_warning_privacy_body">"بالنقر على \"قبول\"ØŒ ÙØ¥Ù†Ùƒ تواÙÙ‚ على أن يرسل التطبيق نتيجة اختبارك الإيجابية مع أرقام تعريÙÙƒ العشوائية لآخر 14 يومًا إلى نظام Ø³ÙŠØ±ÙØ± التطبيق، ØØªÙ‰ يتسنى إخطار غيرك من مستخدمي التطبيق المنشطين لخاصية تسجيل المخالطة أوتوماتيكيًا Ø¨Ø§ØØªÙ…الية تعرضهم لخطر العدوى. لا تتضمن Ø§Ù„Ù…Ø¹Ø±ÙØ§Øª العشوائية المتداولة أية بيانات ØªØ³Ù…Ø Ø¨Ø«ØºØ±Ø§Øª يمكن التعر٠من خلالها على هويتك أو شخصك.\n\nنشر نتيجة اختبارك عبر التطبيق خطوة اختيارية. إذا لم تنشر نتيجة اختبارك، لن تترتب عليك أية أضرار؛ لأنه لا يمكن Ù„Ø£ØØ¯ سواك Ù…Ø¹Ø±ÙØ© أو مراقبة ما إذا كنت تستخدم التطبيق، وكي٠تستخدمه، وما إذا كنت نشرت إصابتك بالعدوى أم لا.\n\nيمكنك إلغاء مواÙقتك ÙÙŠ أي وقت عن طريق ØØ°Ù التطبيق. عند إلغاء المواÙقة، تظل مشروعية المعالجة بدايةً من المواÙقة ØØªÙ‰ تاريخ الإلغاء قائمةً. تجد المزيد من المعلومات ØªØØª بند القائمة \"معلومات خصوصية البيانات\"."</string> - <!-- XBUT: other warning continue button --> - <string name="submission_positive_other_warning_button">"التالي"</string> - <!-- XACT: other warning - illustration description, explanation image --> - <string name="submission_positive_other_illustration_description">"جهاز يرسل تشخيص اختبار إيجابي Ù…Ø´ÙØ±Ù‹Ø§ إلى النظام."</string> - - - <!-- Submission Done --> - <!-- XHED: Page title for completed submission page --> - <string name="submission_done_title">"شكرًا لك"</string> - <!-- YTXT: Body text for completed submission page --> - <string name="submission_done_body">"لقد قدمت مساهمة قيمة. Ø¨ÙØ¶Ù„ دعمك، ستيم ØªØØ°ÙŠØ± أشخاص آخرين ويمكنهم التصر٠بالشكل الصØÙŠØ."</string> - <!-- XHED: Page subtitle for completed submission page --> - <string name="submission_done_subtitle">"ÙŠÙØ±Ø¬Ù‰ Ù…Ù„Ø§ØØ¸Ø© ما يلي:"</string> - <!-- YTXT: text after submission: contagious --> - <string name="submission_done_contagious">"أنت معدÙ."</string> - <!-- YTXT: text after submission: isolate --> - <string name="submission_done_isolate">"ÙŠÙØ±Ø¬Ù‰ عزل Ù†ÙØ³Ùƒ عن الآخرين."</string> - <!-- XHED: Title for further info --> - <string name="submission_done_further_info_title">"معلومات أخرى:"</string> - <!-- YTXT: submission done further info bullet points --> - <string-array name="submission_done_further_info_bullet_points"> - <item>"ÙØªØ±Ø© Ø§Ù„ØØ¬Ø± الصØÙŠ Ø¹Ø§Ø¯Ø© ما تكون 14 يومًا. الرجاء Ù…Ù„Ø§ØØ¸Ø© أعراضك ومراقبة مدى تطورها."</item> - <item>"ستطالبك دائرة Ø§Ù„ØµØØ© العامة بإنشاء قائمة بالأشخاص الذين تواصلت معهم. يجب أن يتضمن ذلك كل الأشخاص الذين تواصلت معهم عن قرب (أقل من مترين، Ù…ØØ§Ø¯Ø«Ø© وجهًا لوجه) لمدة تزيد عن 15 دقيقة ÙÙŠ اليومين السابقين لتطور الأعراض."</item> - <item>"الرجاء التÙكير Ø¨ØµÙØ© خاصة ÙÙŠ الأشخاص الذين لن يتم إشعارهم مباشرة من خلال التطبيق نظرًا لعدم امتلاكهم هات٠ذكي أو عدم قيامهم بتثبيت التطبيق."</item> - <item>"قد تظل معديًا ØØªÙ‰ إن لم تعد تشعر بأي أعراض وكنت تشعر بأنك Ø¨ØØ§Ù„Ø© جيدة."</item> - </string-array> - <!-- XBUT: submission finished button --> - <string name="submission_done_button_done">"تم"</string> - <!-- XACT: submission finished - illustration description, explanation image --> - <string name="submission_done_illustration_description">"جميع الأشخاص ÙÙŠ المجموعة سعداء لمشاركة شخص ما نتيجة اختباره."</string> - - <!-- Submission Contact --> - <!-- XHED: Page title for contact page in submission flow --> - <string name="submission_contact_title">"طلب رقم المعاملة (TAN)"</string> - <!-- XHED: Page headline for contact page in submission flow --> - <string name="submission_contact_headline">"كي٠يعمل ذلك:"</string> - <!-- YTXT: Body text for contact page in submission flow--> - <string name="submission_contact_body">"ÙŠÙØ±Ø¬Ù‰ Ø§Ù„Ø§ØØªÙاظ بنتيجة اختبارك (إن ÙˆÙØ¬Ø¯Øª) وجهز رقم هاتÙÙƒ لطلب رقم المعاملة (TAN).\n\nÙŠÙØ¯Ø¹Ù… الخط الساخن خدمات Tess Relay للأشخاص الذين ÙŠÙØ¹Ø§Ù†ÙˆÙ† من ضع٠السمع.(الترجمة بين اللغة الألمانية المكتوبة ولغة الإشارة) للاتصال بالخط الساخن للهاتÙ. يمكنك تنزيل البرنامج من Google Play."</string> - <!-- XBUT: submission contact call button --> - <string name="submission_contact_button_call">"اتصال"</string> - <!-- XBUT: submission contact enter tan button --> - <string name="submission_contact_button_enter">"إدخال رقم المعاملة (TAN)"</string> - <!-- YTXT: Body text for step 1 of contact page --> - <string name="submission_contact_step_1_body">"اتصل بالخط الساخن واطلب رقم المعاملة (TAN):"</string> - <!-- XLNK: Button / hyperlink to phone call for TAN contact page --> - <string name="submission_contact_number_display">"‎+49 800 7540002"</string> - <!-- XLNK: Technical number which is called when the user clicks on the display number --> - <string name="submission_contact_number_dial">"‎+49 800 7540002"</string> - <!-- YTXT: Body text for step 2 of contact page--> - <string name="submission_contact_step_2_body">"سجّÙÙ„ الاختبار بإدخال رقم المعاملة (TAN) ÙÙŠ التطبيق."</string> - <!-- YTXT: Body text for operating hours in contact page--> - <string name="submission_contact_operating_hours_body">"اللغات\nالألمانية والإنجليزية والتركية\n\nساعات العمل:\nالاثنين إلى Ø§Ù„Ø£ØØ¯: 24 ساعة\n\nالاتصال مجاني."</string> - - <!-- XACT: Submission contact page title --> - <string name="submission_contact_accessibility_title">"اتصل بالخط الساخن واطلب رقم المعاملة (TAN)"</string> - <!-- XACT: Content Description for submission contact step 1, number has to sync with the display number --> - <string name="submission_contact_step_1_content">"ÙÙŠ الخطوة الأولى، اتصل بالخط الساخن واطلب رقم المعاملة (TAN). يمكنك الاتصال بالخط الساخن على ‎+49 800 7540002. مواعيد العمل من الاثنين إلى الجمعة من الثامنة صباØÙ‹Ø§ إلى 10 مساءً ويومي السبت ÙˆØ§Ù„Ø£ØØ¯ من العاشرة صباØÙ‹Ø§ إلى العاشرة مساءً. الاتصال مجاني."</string> - <!-- XACT: Content Description for submission contact step 2 --> - <string name="submission_contact_step_2_content">"ÙÙŠ الخطوة التالية، قم بتسجيل اختبارك باستخدام رقم المعاملة (TAN) ÙÙŠ التطبيق."</string> - - <!-- Submission Status Card --> - <!-- XHED: Page title for the various submission status: fetching --> - <string name="submission_status_card_title_fetching">"جار استرجاع البيانات..."</string> - <!-- XHED: Page title for the various submission status: unregistered --> - <string name="submission_status_card_title_unregistered">"هل خضعت للاختبار؟"</string> - <!-- XHED: Page title for the various submission status: pending --> - <string name="submission_status_card_title_pending">"النتيجة غير Ù…ØªÙˆÙØ±Ø© ØØªÙ‰ الآن"</string> - <!-- XHED: Page title for the various submission status: available --> - <string name="submission_status_card_title_available">"نتيجتك Ù…ØªÙˆÙØ±Ø©"</string> - <!-- XHED: Page title for the various submission status: positive --> - <string name="submission_status_card_title_positive">"تشخيص إيجابي"</string> - <!-- XHED: Subtitle for the submission status card: invalid --> - <string name="submission_status_card_subtitle_invalid">"الاختبار غير صالØ"</string> - <!-- XHED: Subtitle for the submission status card: negative --> - <string name="submission_status_card_subtitle_negative">"تشخيص سلبي"</string> - <!-- YTXT: Body text for submission status: fetching --> - <string name="submission_status_card_body_fetching">"جار ØªØØ¯ÙŠØ« نتيجتك"</string> - <!-- YTXT: Body text for submission status: unregistered --> - <string name="submission_status_card_body_unregistered">"Ø³Ø§Ø¹ÙØ¯ على كسر سلسلة العدوى من خلال إشعار الآخرين."</string> - <!-- YTXT: Body text for submission status: pending --> - <string name="submission_status_card_body_pending">"لم يتم إجراء تقييم اختبارك ØØªÙ‰ الآن."</string> - <!-- YTXT: Body text for submission status: invalid --> - <string name="submission_status_card_body_invalid">"تعذر تقييم اختبارك."</string> - <!-- YTXT: Body text for submission status: positive --> - <string name="submission_status_card_body_positive">"تم تشخيصك على أنك إيجابي بخصوص بÙيروس كورونا المستجد."</string> - <!-- YTXT: Body text for submission status: negative --> - <string name="submission_status_card_body_negative">"تم تشخيصك على أنك سلبي بخصوص بÙيروس كورونا المستجد."</string> - <!-- XBUT: submission status card unregistered button --> - <string name="submission_status_card_button_unregistered">"Ù…Ø¹Ø±ÙØ© المزيد والمساعدة"</string> - <!-- XBUT: submission status card show results button --> - <string name="submission_status_card_button_show_results">"عرض الاختبار"</string> - <!-- XHED: submission status card positive result subtitle --> - <string name="submission_status_card_positive_result_subtitle">"ÙŠÙØ±Ø¬Ù‰ Ù…Ù„Ø§ØØ¸Ø© ما يلي:"</string> - <!-- YTXT: text for contagious card --> - <string name="submission_status_card_positive_result_contagious">"أنت معدÙ. اعزل Ù†ÙØ³Ùƒ عن الأشخاص الآخرين."</string> - <!-- YTXT: text for contact card --> - <string name="submission_status_card_positive_result_contact">"ستتواصل معك دائرة Ø§Ù„ØµØØ© العامة خلال الأيام القليلة القادمة بالهات٠أو بخطاب."</string> - <!-- YTXT: text for share result card--> - <string name="submission_status_card_positive_result_share">"شارÙÙƒ Ù…Ø¹Ø±ÙØ§ØªÙƒ العشوائية ØØªÙ‰ يمكن ØªØØ°ÙŠØ± الآخرين."</string> - - <!-- Test Result Card --> - <string name="test_result_card_headline">"تشخيصك:"</string> - <!-- YTXT: virus name text --> - <string name="test_result_card_virus_name_text">"Ùيروس كورونا المستجد"</string> - <!-- YTXT: registered at text --> - <string name="test_result_card_registered_at_text">"تاريخ التسجيل %s"</string> - <!-- YTXT: negative status text --> - <string name="test_result_card_status_negative">"سلبي"</string> - <!-- YTXT: positive status text --> - <string name="test_result_card_status_positive">"إيجابي"</string> - <!-- YTXT: invalid status text --> - <string name="test_result_card_status_invalid">"التقييم غير ممكن"</string> - <!-- YTXT: pending status text --> - <string name="test_result_card_status_pending">"النتيجة غير Ù…ØªÙˆÙØ±Ø© ØØªÙ‰ الآن"</string> - <!-- XHED: Title for further info of test result negative --> - <string name="test_result_card_negative_further_info_title">"معلومات أخرى:"</string> - <!-- YTXT: Content for further info of test result negative --> - <string-array name="test_result_card_negative_further_info_bullet_points"> - <item>"هل لا تزال تشعر بتوعك؟ إذا كنت تشعر بتوعك شديد Ùˆ/أو ØªÙØ§Ù‚مت أعراضك، ÙØ§Ù„رجاء الاتصال بطبيبك الممارس العام."</item> - <item>"ابقَ ÙÙŠ المنزل ØØªÙ‰ تشعر بأنك Ø¨ØµØØ© جيدة مرة أخرى. إذا Ø£ÙØµØ¨Øª بÙيروس كورونا (Ùيروس كورونا المستجد) مع ضعÙÙƒ نتيجة عدوى أخرى، Ùقد يؤدي ذلك إلى مرض خطير."</item> - <item>"لا تذهب إلى عملك إذا كنت مريضًا لتضمن عدم تعريض الآخرين للخطر. إذا ازدادت الأعراض سوءًا، قد ØªØØªØ§Ø¬ للخضوع لاختبار Ùيروس كورونا المستجد مرة أخرى."</item> - </string-array> - - <!-- #################################### - Button Tooltips for Accessibility - ###################################### --> - <!-- XACT: back button--> - <string name="button_back">"عودة إلى Ø§Ù„ØµÙØØ© السابقة"</string> - <!-- XACT: proceed button--> - <string name="button_proceed">"زر المتابعة"</string> - <!-- XACT: share button--> - <string name="button_share">"مشاركة"</string> - <!-- XACT: menu button--> - <string name="button_menu">"القائمة"</string> - <!-- XACT: Accessibility needs a suffix to strings, to reduce the amount of manual translations this string is appended to accessibility button strings, e.g. "Zurück Taste", "Taste" is the default used by android in german --> - <string name="suffix_button">"زر"</string> - <!-- XACT: Accessibility needs a suffix to strings, to reduce the amount of manual translations this string is appended to accessibility content description strings for images, e.g. "Eine Gruppe von... Bild" --> - <string name="suffix_image">"الصورة"</string> - - <!-- #################################### - Business Error Messages - ###################################### --> - <!-- XTXT: error dialog - detailed text if device is offline --> - <string name="errors_no_network">"أنت غير متصل بالإنترنت."</string> - <!-- XTXT: error dialog - detailed text if device has not enough device space --> - <string name="errors_not_enough_device_storage">"ليس لديك ذاكرة ÙØ§Ø±ØºØ© كاÙية."</string> - <!-- XTXT: error dialog - detailed text if there is error with Google API --> - <string name="errors_communication_with_api">"ØØ¯Ø« خطأ خلال الاتصال بواجهة Google"</string> - <!-- XTXT: error dialog - detailed text if there is an error during external navigation / external action --> - <string name="errors_external_action">"لا يمكنك القيام بهذا الإجراء. ÙŠÙØ±Ø¬Ù‰ الاتصال بالخط الساخن."</string> - <!-- XTXT: error dialog - phone still needs Google Play Services or Google Mobile Services update --> - <string name="errors_google_update_needed">"تم تثبيت تطبيق Corona-Warn-App بشكل صØÙŠØØ› لكن خدمة \"إشعارات المخالطة لمرض كوÙيد-19\" غير Ù…ØªÙˆÙØ±Ø© على نظام تشغيل هاتÙÙƒ الذكي؛ وهذا يعني أنه لا يمكنك استخدام التطبيق. لمزيد من المعلومات، يرجى الاطلاع على ØµÙØØ© الأسئلة المتكررة لدينا على: https://www.coronawarn.app/en/faq/"</string> - <!-- XTXT: error dialog - either Google API Error (10) or reached request limit per day --> - <string name="errors_google_api_error">"يعمل تطبيق Corona-Warn-App بشكل صØÙŠØØ› لكن لا يمكن ØªØØ¯ÙŠØ« مستوى الخطر Ø§Ù„ØØ§Ù„ÙŠ. يظل تسجيل المخالطة نشطًا، ويعمل بشكل صØÙŠØ. لمزيد من المعلومات، يرجى الاطلاع على ØµÙØØ© الأسئلة المتكررة لدينا على: https://www.coronawarn.app/en/faq/"</string> - - <!-- #################################### - Generic Error Messages - ###################################### --> - <!-- XHED: error dialog - headline --> - <string name="errors_generic_headline">"ØØ¯Ø« خطأ ما."</string> - <!-- XTXT: error dialog - short text for error reason --> - <string name="errors_generic_details_headline">"السبب"</string> - <!-- XBUT: error dialog - button close --> - <string name="errors_generic_button_positive">"مواÙÙ‚"</string> - <!-- XBUT: error dialog - button show details --> - <string name="errors_generic_button_negative">"Ø§Ù„ØªÙØ§ØµÙŠÙ„"</string> - <!-- XTXT: error dialog - text when no error description is available --> - <string name="errors_generic_text_unknown_error_cause">"ØØ¯Ø« خطأ غير معروÙ."</string> - - <!-- #################################### - Just for Development - ###################################### --> - <!-- NOTR --> - <string name="lorem_ipsum">"Lorem Ipsum"</string> - <!-- NOTR --> - <string name="menu_test_api">"Test API"</string> - <!-- NOTR --> - <string name="menu_test_risk_level">"Test Risk Level"</string> - <!-- NOTR --> - <string name="menu_test_notification">"Test Notification"</string> - <!-- NOTR --> - <string name="test_api_button_api_launch">"Android API Test(Manual Test)"</string> - <!-- NOTR --> - <string name="test_api_button_start">"Start (Broadcast/Receive Bluetooth)"</string> - <!-- NOTR --> - <string name="test_api_button_get_exposure_keys">"Get Exposure keys (my keys history from api)"</string> - <!-- NOTR --> - <string name="test_api_button_share_my_keys">"Share my keys via Email"</string> - <!-- NOTR --> - <string name="test_api_button_enter_other_keys">"Submit Exposure Key"</string> - <!-- NOTR --> - <string name="test_api_button_show_qr_code">"Show QR Code"</string> - <!-- NOTR --> - <string name="test_api_button_submit_keys">"Submit keys to Server"</string> - <!-- NOTR --> - <string name="test_api_button_scan_qr_code">"Scan Exposure Key"</string> - <!-- NOTR --> - <string name="test_api_switch_last_three_hours_from_server">"Last 3 Hours Mode"</string> - <!-- NOTR --> - <string name="test_api_button_check_exposure">"Check Exposure Summary"</string> - <!-- NOTR --> - <string name="test_api_exposure_summary_headline">"Exposure summary"</string> - <!-- NOTR --> - <string name="test_api_body_daysSinceLastExposure">"Days since last exposure: %1$s"</string> - <!-- NOTR --> - <string name="test_api_body_attenuation">"Attenuation Durations in Minutes: %1$s"</string> - <!-- NOTR --> - <string name="test_api_body_summation_risk">"Summation Risk Score: %1$s"</string> - <!-- NOTR --> - <string name="test_api_body_matchedKeyCount">"Matched key count: %1$s"</string> - <!-- NOTR --> - <string name="test_api_body_maximumRiskScore">"Maximum risk score %1$s"</string> - <!-- NOTR --> - <string name="test_api_body_my_keys">"My keys (count: %1$d)"</string> - <!-- NOTR --> - <string name="test_api_body_other_keys">"Other key"</string> - <!-- NOTR --> - <string name="test_api_calculate_risk_level">"Calculate Risk Level"</string> - -</resources> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/values-bg/strings.xml b/Corona-Warn-App/src/main/res/values-bg/strings.xml index 0460832c41184ea092a74d4201ab33a9d6c8d123..a1f3ce9a16f8b45652729d3a8118a22d402669b6 100644 --- a/Corona-Warn-App/src/main/res/values-bg/strings.xml +++ b/Corona-Warn-App/src/main/res/values-bg/strings.xml @@ -135,11 +135,13 @@ <!-- XTXT: risk card - no contact yet --> <string name="risk_card_body_contact">"До момента нÑма излагане на риÑк"</string> + <!-- XTXT: risk card - no exposures with low risk --> + <string name="risk_card_body_contact_low_risk">"До момента нÑма излагане на ниÑък риÑк"</string> <!-- XTXT: risk card - number of contacts for one or more --> <plurals name="risk_card_body_contact_value"> <item quantity="one">"%1$s излагане на ниÑък риÑк"</item> <item quantity="other">"%1$s Ð¸Ð·Ð»Ð°Ð³Ð°Ð½Ð¸Ñ Ð½Ð° ниÑък риÑк"</item> - <item quantity="zero">"До момента нÑма излагане на риÑк"</item> + <item quantity="zero">"До момента нÑма излагане на ниÑък риÑк"</item> <item quantity="two">"%1$s Ð¸Ð·Ð»Ð°Ð³Ð°Ð½Ð¸Ñ Ð½Ð° ниÑък риÑк"</item> <item quantity="few">"%1$s Ð¸Ð·Ð»Ð°Ð³Ð°Ð½Ð¸Ñ Ð½Ð° ниÑък риÑк"</item> <item quantity="many">"%1$s Ð¸Ð·Ð»Ð°Ð³Ð°Ð½Ð¸Ñ Ð½Ð° ниÑък риÑк"</item> @@ -296,6 +298,12 @@ <!-- XHED: risk details - page title, in toolbar --> <string name="risk_details_title">"ВашиÑÑ‚ ÑÑ‚Ð°Ñ‚ÑƒÑ Ð½Ð° риÑк"</string> + <!-- XHED: risk details - headline for additional info in case of encounter with low risk --> + <string name="risk_details_additional_info_title">"Ð˜Ð·Ð»Ð°Ð³Ð°Ð½Ð¸Ñ Ð½Ð° ниÑък риÑк"</string> + <!-- XHED: risk details - subtitle for additional info in case of encounter with low risk --> + <string name="risk_details_additional_info_subtitle">"Защо риÑкът Ви от заразÑване е ниÑък"</string> + <!-- XHED: risk details - text for additional info in case of encounter with low risk --> + <string name="risk_details_additional_info_text">"Били Ñте в контакт Ñ Ð»Ð¸Ñ†Ðµ, което на по-къÑен етап е диагноÑтицирано Ñ COVID-19. Ðо отчитайки региÑтрираните от Ð²Ð°Ñ Ð´Ð°Ð½Ð½Ð¸ за излагането, риÑкът ви от заразÑване Ñе Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ ÐºÐ°Ñ‚Ð¾ ниÑък. Той е такъв, когато контактът е бил за кратко или е оÑъщеÑтвен от разÑтоÑние.\nÐе трÑбва да Ñе притеÑнÑвате и не е нужно да предприемате определени дейÑтвиÑ. Препоръчваме Ви да Ñпазвате широкоразпроÑтранените правила за Ñоциално диÑтанциране и поддържане на хигиена."</string> <!-- XHED: risk details - headline, how a user should act --> <string name="risk_details_headline_behavior">"ÐаÑоки"</string> <!-- XHED: risk details - multiline headline, bold, how to act correct --> @@ -338,6 +346,8 @@ <string name="risk_details_information_body_outdated_risk">"РегиÑтърът на излаганиÑта на риÑк не е обновÑван повече от 24 чаÑа."</string> <!-- YTXT: risk details - low risk explanation text --> <string name="risk_details_information_body_low_risk">"Вашето ниво на риÑк от заразÑване е ниÑко, защото нÑмате региÑтрирани контакти Ñ Ð»Ð¸Ñ†Ð°, които впоÑледÑтвие Ñа били диагноÑтицирани Ñ COVID-19, или ако Ñте имали такива, те Ñа били краткотрайни и от по-голÑмо разÑтоÑние."</string> + <!-- YTXT: risk details - low risk explanation text with encounter with low risk --> + <string name="risk_details_information_body_low_risk_with_encounter">"РиÑкът от заразÑване Ñе изчиÑлÑва локално на уÑтройÑтвото Ви въз оÑнова на региÑтрираните данни за излагане. ИзчиÑлението включва Ñъщо така разÑтоÑнието от и продължителноÑтта на вÑички контакти Ñ Ð»Ð¸Ñ†Ð°, диагноÑтицирани Ñ COVID-19., както и възможноÑтта им да заразÑÑ‚ околните. Ðикой оÑвен Ð’Ð°Ñ Ð½Ðµ може да види или да получи данни за Вашето ниво на риÑк."</string> <!-- YTXT: risk details - increased risk explanation text with variable for day(s) since last contact --> <plurals name="risk_details_information_body_increased_risk"> <item quantity="one">"Изложени Ñте на повишен риÑк от заразÑване, защото преди %1$s дни Ñте имали продължителен и близък контакт Ñ Ð¿Ð¾Ð½Ðµ едно лице, диагноÑтицирано Ñ COVID-19."</item> diff --git a/Corona-Warn-App/src/main/res/values-de/strings.xml b/Corona-Warn-App/src/main/res/values-de/strings.xml index 5fee6099c4c4faa63ef40cdd2ce88630cf8c9145..0c3e1cdeee3678bc044bcc8857a104ffb9cd79c2 100644 --- a/Corona-Warn-App/src/main/res/values-de/strings.xml +++ b/Corona-Warn-App/src/main/res/values-de/strings.xml @@ -303,8 +303,7 @@ <!-- XHED: risk details - subtitle for additional info in case of encounter with low risk --> <string name="risk_details_additional_info_subtitle">"Deshalb ist Ihr Infektionsrisiko niedrig"</string> <!-- XHED: risk details - text for additional info in case of encounter with low risk --> - <string name="risk_details_additional_info_text">"Sie hatten eine Begegnung mit einer nachweislich Corona-positiv getesteten Person. Ihr Infektionsrisiko wird unter Berücksichtigung aller in der Corona-Warn-App vorliegenden Daten dennoch als niedrig eingestuft. -Es besteht kein besonderer Handlungsbedarf. Es wird empfohlen, sich an die allgemein geltenden Abstands- und Hygieneregeln zu halten."</string> + <string name="risk_details_additional_info_text">"Sie hatten eine Begegnung mit einer später Corona-positiv getesteten Person. Ihr Infektionsrisiko wird auf Grundlage der Daten der Risiko-Ermittlung dennoch als niedrig eingestuft. Ein niedriges Risiko besteht insbesondere dann, wenn sich Ihre Begegnung auf einen kurzen Zeitraum oder einen größeren Abstand beschränkt hat. Sie müssen sich keine Sorgen machen und es besteht kein besonderer Handlungsbedarf. Es wird empfohlen, sich an die allgemein geltenden Abstands- und Hygieneregeln zu halten."</string> <!-- XHED: risk details - headline, how a user should act --> <string name="risk_details_headline_behavior">"Verhalten"</string> <!-- XHED: risk details - multiline headline, bold, how to act correct --> @@ -498,7 +497,7 @@ Es besteht kein besonderer Handlungsbedarf. Es wird empfohlen, sich an die allge <string name="sixteen_title_text">"App-Nutzung ab 16 Jahren"</string> <!-- XACT: onboarding(sixteen) title --> - <string name="sixteen_description_text">"Die App richtet sich an Personen, die sich in Deutschland aufhalten und mindestens 16 Jahre alt sind."</string> + <string name="sixteen_description_text">"Die App-Nutzung ist ab 16 Jahren gestattet und richtet sich an Personen, die sich in Deutschland aufhalten."</string> <!-- #################################### @@ -723,7 +722,7 @@ Es besteht kein besonderer Handlungsbedarf. Es wird empfohlen, sich an die allge <!-- NOTR: subtitle for legal information page, open contact form for languages other than English and German --> <string name="information_legal_subtitle_contact_form_non_en_de">Contact Form in <a href="https://www.rki.de/SharedDocs/Kontaktformulare/en/Kontaktformulare/weitere/Corona-Warn-App/Corona-Warn-App_Integrator.html">English</a> or <a href="https://www.rki.de/SharedDocs/Kontaktformulare/weitere/Corona-Warn-App/Corona-Warn-App_Integrator.html">German</a></string> <!-- XHED: Headline for legal information page, tax section --> - <string name="information_legal_headline_taxid">"Umsatzsteueridentifikationsnummer"</string> + <string name="information_legal_headline_taxid">"Umsatzsteuer-\nIdentifikationsnummer"</string> <!-- YTXT: subtitle for legal information page, tax section --> <string name="information_legal_subtitle_taxid">"DE 165 893 430"</string> <!-- XACT: describes illustration --> diff --git a/Corona-Warn-App/src/main/res/values-en/strings.xml b/Corona-Warn-App/src/main/res/values-en/strings.xml index 1fcfba0128a2f78a22aa66388b7eb1a5d17d8756..c146b8aa881f4e272cb2224c908b57f9d6929c83 100644 --- a/Corona-Warn-App/src/main/res/values-en/strings.xml +++ b/Corona-Warn-App/src/main/res/values-en/strings.xml @@ -135,11 +135,13 @@ <!-- XTXT: risk card - no contact yet --> <string name="risk_card_body_contact">"No exposure up to now"</string> + <!-- XTXT: risk card - no exposures with low risk --> + <string name="risk_card_body_contact_low_risk">"No exposure with low risk so far"</string> <!-- XTXT: risk card - number of contacts for one or more --> <plurals name="risk_card_body_contact_value"> <item quantity="one">"%1$s exposure with low risk"</item> <item quantity="other">"%1$s exposures with low risk"</item> - <item quantity="zero">"No exposure up to now"</item> + <item quantity="zero">"No exposure with low risk so far"</item> <item quantity="two">"%1$s exposures with low risk"</item> <item quantity="few">"%1$s exposures with low risk"</item> <item quantity="many">"%1$s exposures with low risk"</item> @@ -296,6 +298,12 @@ <!-- XHED: risk details - page title, in toolbar --> <string name="risk_details_title">"Your Risk Status"</string> + <!-- XHED: risk details - headline for additional info in case of encounter with low risk --> + <string name="risk_details_additional_info_title">"Exposures with low risk"</string> + <!-- XHED: risk details - subtitle for additional info in case of encounter with low risk --> + <string name="risk_details_additional_info_subtitle">"Why your risk of infection is low"</string> + <!-- XHED: risk details - text for additional info in case of encounter with low risk --> + <string name="risk_details_additional_info_text">"You encountered a person who was later diagnosed with COVID-19. Nevertheless, based on your exposure logging data, your risk of infection is low. The risk is low if your encounter was brief or occurred at a distance. You do not need to worry and there is no specific need for action. We recommend that you adhere to the prevailing rules regarding distancing and hygiene."</string> <!-- XHED: risk details - headline, how a user should act --> <string name="risk_details_headline_behavior">"Guidelines"</string> <!-- XHED: risk details - multiline headline, bold, how to act correct --> @@ -338,6 +346,8 @@ <string name="risk_details_information_body_outdated_risk">"Your exposure logging could not be updated for more than 24 hours."</string> <!-- YTXT: risk details - low risk explanation text --> <string name="risk_details_information_body_low_risk">"You have a low risk of infection because no exposure to people later diagnosed with COVID-19 was logged, or because your encounters were only for a short time and at a greater distance."</string> + <!-- YTXT: risk details - low risk explanation text with encounter with low risk --> + <string name="risk_details_information_body_low_risk_with_encounter">"The risk of infection is calculated locally on your device, using exposure logging data. The calculation also takes into account distance and duration of any exposure to persons diagnosed with COVID-19, as well as their potential infectiousness. Your risk of infection cannot be seen by or passed on to anyone else."</string> <!-- YTXT: risk details - increased risk explanation text with variable for day(s) since last contact --> <plurals name="risk_details_information_body_increased_risk"> <item quantity="one">"You have an increased risk of infection because you were last exposed %1$s days ago over a longer period of time and at close proximity to at least one person diagnosed with COVID-19."</item> diff --git a/Corona-Warn-App/src/main/res/values-pl/strings.xml b/Corona-Warn-App/src/main/res/values-pl/strings.xml index 7e6f4ac33af0e9ee1409c2749c5563b8bfe8a732..b3e9f2891ffb33bb326dadbf7fe88cbf299aafb9 100644 --- a/Corona-Warn-App/src/main/res/values-pl/strings.xml +++ b/Corona-Warn-App/src/main/res/values-pl/strings.xml @@ -135,11 +135,13 @@ <!-- XTXT: risk card - no contact yet --> <string name="risk_card_body_contact">"Brak narażenia do tej pory"</string> + <!-- XTXT: risk card - no exposures with low risk --> + <string name="risk_card_body_contact_low_risk">"Brak narażenia z niskim ryzykiem do tej pory"</string> <!-- XTXT: risk card - number of contacts for one or more --> <plurals name="risk_card_body_contact_value"> <item quantity="one">"%1$s narażenie z niskim ryzykiem"</item> <item quantity="other">"%1$s narażenia z niskim ryzykiem"</item> - <item quantity="zero">"Brak narażenia do tej pory"</item> + <item quantity="zero">"Brak narażenia z niskim ryzykiem do tej pory"</item> <item quantity="two">"%1$s narażenia z niskim ryzykiem"</item> <item quantity="few">"%1$s narażenia z niskim ryzykiem"</item> <item quantity="many">"%1$s narażeÅ„ z niskim ryzykiem"</item> @@ -296,6 +298,12 @@ <!-- XHED: risk details - page title, in toolbar --> <string name="risk_details_title">"Twój status ryzyka"</string> + <!-- XHED: risk details - headline for additional info in case of encounter with low risk --> + <string name="risk_details_additional_info_title">"Narażenia z niskim ryzykiem"</string> + <!-- XHED: risk details - subtitle for additional info in case of encounter with low risk --> + <string name="risk_details_additional_info_subtitle">"Dlaczego Twoje ryzyko zarażenia jest niskie"</string> + <!-- XHED: risk details - text for additional info in case of encounter with low risk --> + <string name="risk_details_additional_info_text">"ByÅ‚eÅ›(-aÅ›) narażony(-a) na kontakt z osobÄ…, u której zdiagnozowano COVID-19. Jednak na podstawie Twoich danych rejestracji narażenia Twoje ryzyko zarażenia jest niskie. Ryzyko jest niskie, jeÅ›li Twój kontakt trwaÅ‚ krótko lub zachowany zostaÅ‚ dystans. Nie musisz siÄ™ martwić i podejmować żadnych dziaÅ‚aÅ„. Zalecamy przestrzeganie obowiÄ…zujÄ…cych reguÅ‚ dotyczÄ…cych dystansu i higieny."</string> <!-- XHED: risk details - headline, how a user should act --> <string name="risk_details_headline_behavior">"Wytyczne"</string> <!-- XHED: risk details - multiline headline, bold, how to act correct --> @@ -338,6 +346,8 @@ <string name="risk_details_information_body_outdated_risk">"Rejestrowanie narażenia nie mogÅ‚o zostać zaktualizowane przez okres dÅ‚uższy niż 24 godziny."</string> <!-- YTXT: risk details - low risk explanation text --> <string name="risk_details_information_body_low_risk">"Masz niskie ryzyko zakażenia, ponieważ nie zarejestrowano narażenia na kontakt z osobami, u których później zdiagnozowano COVID-19, lub ponieważ Twoje kontakty trwaÅ‚y krótko przy zachowaniu odpowiednio dużej odlegÅ‚oÅ›ci."</string> + <!-- YTXT: risk details - low risk explanation text with encounter with low risk --> + <string name="risk_details_information_body_low_risk_with_encounter">"Ryzyko zarażenia jest obliczane lokalnie na Twoim urzÄ…dzeniu na podstawie danych rejestrowania narażenia. Ta kalkulacja uwzglÄ™dnia również dystans i czas trwania narażenia na kontakt z osobami, u których zdiagnozowano COVID-19, a także potencjalnÄ… podatność na zarażenie. Twoje ryzyko zarażenia nie jest widoczne dla nikogo ani nikomu przekazywane."</string> <!-- YTXT: risk details - increased risk explanation text with variable for day(s) since last contact --> <plurals name="risk_details_information_body_increased_risk"> <item quantity="one">"Masz podwyższone ryzyko zakażenia, ponieważ %1$s dni temu byÅ‚eÅ›(-aÅ›) narażony(-a) na dÅ‚uższy, bliski kontakt z co najmniej jednÄ… osobÄ…, u której zdiagnozowano COVID-19."</item> diff --git a/Corona-Warn-App/src/main/res/values-ro/strings.xml b/Corona-Warn-App/src/main/res/values-ro/strings.xml index 505816ecd7aeef3697c99336b591e430a1f68865..37fcbdc96308cee1b171109d92c1725113f59d13 100644 --- a/Corona-Warn-App/src/main/res/values-ro/strings.xml +++ b/Corona-Warn-App/src/main/res/values-ro/strings.xml @@ -135,11 +135,13 @@ <!-- XTXT: risk card - no contact yet --> <string name="risk_card_body_contact">"Nicio expunere până acum"</string> + <!-- XTXT: risk card - no exposures with low risk --> + <string name="risk_card_body_contact_low_risk">"Nicio expunere cu risc redus până acum"</string> <!-- XTXT: risk card - number of contacts for one or more --> <plurals name="risk_card_body_contact_value"> <item quantity="one">"%1$s expunere cu risc redus"</item> <item quantity="other">"%1$s de expuneri cu risc redus"</item> - <item quantity="zero">"Nicio expunere până acum"</item> + <item quantity="zero">"Nicio expunere cu risc redus până acum"</item> <item quantity="two">"%1$s expuneri cu risc redus"</item> <item quantity="few">"%1$s expuneri cu risc redus"</item> <item quantity="many">"%1$s expuneri cu risc redus"</item> @@ -296,6 +298,12 @@ <!-- XHED: risk details - page title, in toolbar --> <string name="risk_details_title">"Starea riscului dvs."</string> + <!-- XHED: risk details - headline for additional info in case of encounter with low risk --> + <string name="risk_details_additional_info_title">"Expuneri cu risc redus"</string> + <!-- XHED: risk details - subtitle for additional info in case of encounter with low risk --> + <string name="risk_details_additional_info_subtitle">"Riscul dvs. de infectare este redus"</string> + <!-- XHED: risk details - text for additional info in case of encounter with low risk --> + <string name="risk_details_additional_info_text">"AÈ›i avut o întâlnire cu o persoană diagnosticată cu COVID-19. TotuÈ™i, pe baza datelor de înregistrare în jurnal a expunerilor, riscul dvs. de infectare este redus. Riscul este redus dacă întâlnirea dvs. a fost de scurtă durată sau s-a păstrat o anumită distanță. Nu este cazul să vă îngrijoraÈ›i È™i nu este nevoie de nicio acÈ›iune specială din partea dvs. Vă recomandăm să respectaÈ›i regulile generale privind distanÈ›area È™i igiena."</string> <!-- XHED: risk details - headline, how a user should act --> <string name="risk_details_headline_behavior">"InstrucÈ›iuni"</string> <!-- XHED: risk details - multiline headline, bold, how to act correct --> @@ -338,6 +346,8 @@ <string name="risk_details_information_body_outdated_risk">"ÃŽnregistrarea în jurnal a expunerilor dvs. nu a putut fi actualizată timp de peste 24 de ore."</string> <!-- YTXT: risk details - low risk explanation text --> <string name="risk_details_information_body_low_risk">"AveÈ›i un risc redus de infectare deoarece nu a fost înregistrată nicio expunere la persoane diagnosticate ulterior cu COVID-19 sau întâlnirile au fost limitate la o perioadă scurtă È™i la o distanță mai mare."</string> + <!-- YTXT: risk details - low risk explanation text with encounter with low risk --> + <string name="risk_details_information_body_low_risk_with_encounter">"Riscul de infectare este calculat local pe dispozitivul dvs., utilizând datele de înregistrare în jurnal a expunerilor. Calculul poate È›ine cont È™i de distanÈ›a È™i durata expunerii la persoane diagnosticate cu COVID-19, precum È™i de potenÈ›iala contagiozitate a acestora. Riscul dvs. de infectare nu poate fi observat sau transmis mai departe niciunei alte persoane."</string> <!-- YTXT: risk details - increased risk explanation text with variable for day(s) since last contact --> <plurals name="risk_details_information_body_increased_risk"> <item quantity="one">"AveÈ›i un risc crescut de infectare deoarece aÈ›i fost expus ultima dată acum %1$s zi pe o perioadă mai lungă de timp È™i în strânsă proximitate cu cel puÈ›in o persoană diagnosticată cu COVID-19."</item> diff --git a/Corona-Warn-App/src/main/res/values-ru/strings.xml b/Corona-Warn-App/src/main/res/values-ru/strings.xml deleted file mode 100644 index 3b9f00b5183efa82e208a893cf911c86f5e8cf7d..0000000000000000000000000000000000000000 --- a/Corona-Warn-App/src/main/res/values-ru/strings.xml +++ /dev/null @@ -1,1146 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?><resources xmlns:tools="http://schemas.android.com/tools" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" tools:ignore="MissingTranslation"> - - <!-- #################################### - Preference Keys - ###################################### - TODO: Check what is needed --> - - <!-- NOTR --> - <string name="preference_name"><xliff:g id="preference">"shared_preferences_cwa"</xliff:g></string> - <!-- NOTR --> - <string name="preference_onboarding_completed"><xliff:g id="preference">"preference_onboarding_completed"</xliff:g></string> - <!-- NOTR --> - <string name="preference_onboarding_completed_timestamp"><xliff:g id="preference">"preference_onboarding_completed_timestamp"</xliff:g></string> - <!-- NOTR --> - <string name="preference_background_check_done"><xliff:g id="preference">"preference_background_check_done"</xliff:g></string> - <!-- NOTR --> - <string name="preference_reset_app"><xliff:g id="preference">"preference_reset_app"</xliff:g></string> - <!-- NOTR --> - <string name="preference_only_wifi"><xliff:g id="preference">"preference_only_wifi"</xliff:g></string> - <!-- NOTR --> - <string name="preference_tracing"><xliff:g id="preference">"preference_tracing"</xliff:g></string> - <!-- NOTR --> - <string name="preference_timestamp_diagnosis_keys_fetch"><xliff:g id="preference">"preference_timestamp_diagnosis_keys_fetch"</xliff:g></string> - <!-- NOTR --> - <string name="preference_timestamp_manual_diagnosis_keys_retrieval"><xliff:g id="preference">"preference_timestamp_manual_diagnosis_keys_retrieval"</xliff:g></string> - <!-- NOTR --> - <string name="preference_string_google_api_token"><xliff:g id="preference">"preference_m_string_google_api_token"</xliff:g></string> - <!-- NOTR --> - <string name="preference_notifications_enabled"><xliff:g id="preference">"preference_notifications_enabled"</xliff:g></string> - <!-- NOTR --> - <string name="preference_notifications_risk_enabled"><xliff:g id="preference">"preference_notifications_risk_enabled"</xliff:g></string> - <!-- NOTR --> - <string name="preference_notifications_test_enabled"><xliff:g id="preference">"preference_notifications_test_enabled"</xliff:g></string> - <!-- NOTR --> - <string name="preference_background_job_allowed"><xliff:g id="preference">"preference_background_job_enabled"</xliff:g></string> - <!-- NOTR --> - <string name="preference_mobile_data_allowed"><xliff:g id="preference">"preference_mobile_data_enabled"</xliff:g></string> - <!-- NOTR --> - <string name="preference_registration_token"><xliff:g id="preference">"preference_registration_token"</xliff:g></string> - <!-- NOTR --> - <string name="preference_device_pairing_successful_time"><xliff:g id="preference">"preference_device_pairing_successful_time"</xliff:g></string> - <!-- NOTR --> - <string name="preference_initial_tracing_activation_time"><xliff:g id="preference">"preference_initial_tracing_activation_time"</xliff:g></string> - <!-- NOTR --> - <string name="preference_initial_result_received_time"><xliff:g id="preference">"preference_initial_result_received_time"</xliff:g></string> - <!-- NOTR --> - <string name="preference_risk_level_score"><xliff:g id="preference">"preference_risk_level_score"</xliff:g></string> - <!-- NOTR --> - <string name="preference_risk_level_score_successful"><xliff:g id="preference">"preference_risk_level_score_successful"</xliff:g></string> - <!-- NOTR --> - <string name="preference_timestamp_risk_level_calculation"><xliff:g id="preference">"preference_timestamp_risk_level_calculation"</xliff:g></string> - <!-- NOTR --> - <string name="preference_test_guid"><xliff:g id="preference">"preference_test_guid"</xliff:g></string> - <!-- NOTR --> - <string name="preference_is_allowed_to_submit_diagnosis_keys"><xliff:g id="preference">"preference_is_allowed_to_submit_diagnosis_keys"</xliff:g></string> - <!-- NOTR --> - <string name="preference_auth_code"><xliff:g id="preference">"preference_auth_code"</xliff:g></string> - <!-- NOTR --> - <string name="preference_database_password"><xliff:g id="preference">"preference_database_password"</xliff:g></string> - <!-- NOTR --> - <string name="preference_total_non_active_tracing"><xliff:g id="preference">"preference_total_non_active_tracing"</xliff:g></string> - <!-- NOTR --> - <string name="preference_last_non_active_tracing_timestamp"><xliff:g id="preference">"preference_last_non_active_tracing_timestamp"</xliff:g></string> - <!-- NOTR --> - <string name="preference_number_successful_submissions"><xliff:g id="preference">"preference_number_successful_submissions"</xliff:g></string> - <!-- NOTR --> - <string name="preference_teletan"><xliff:g id="preference">"preference_teletan"</xliff:g></string> - <!-- NOTR --> - <string name="preference_last_three_hours_from_server"><xliff:g id="preference">"preference_last_three_hours_from_server"</xliff:g></string> - <!-- NOTR --> - <string name="preference_polling_test_result_started"><xliff:g id="preference">"preference_polling_test_result_started"</xliff:g></string> - <!-- NOTR --> - <string name="preference_test_result_notification"><xliff:g id="preference">"preference_test_result_notification"</xliff:g></string> - <!-- NOTR --> - <string name="preference_risk_days_explanation_shown"><xliff:g id="preference">"preference_risk_days_explanation_shown"</xliff:g></string> - - <!-- #################################### - Generics - ###################################### --> - - <!-- XACT: back description for screen readers --> - <string name="accessibility_back">"Ðазад"</string> - <!-- XACT: next description for screen readers --> - <string name="accessibility_next">"Дальше"</string> - <!-- XACT: menu description for screen readers --> - <string name="accessibility_menu">"Меню"</string> - <!-- XACT: menu description for screen readers --> - <string name="accessibility_close">"Закрыть"</string> - <!-- XACT: menu description for screen readers --> - <string name="accessibility_logo">"Приложение Corona-Warn-App"</string> - <!-- XACT: button description for screen readers to be appended at the end of content without focusable subcontent that are explored by touch --> - <string name="accessibility_button">"Кнопка"</string> - - <!-- #################################### - Menu - ###################################### --> - - <!-- XMIT: application overview --> - <string name="menu_help">"Обзор"</string> - <!-- XMIT: application information --> - <string name="menu_information">"Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ приложении"</string> - <!-- XMIT: application settings --> - <string name="menu_settings">"ÐаÑтройки"</string> - - <!-- #################################### - Notification - ###################################### --> - <!-- NOTR --> - <string name="notification_channel_id"><xliff:g id="notification_channel_id">"de.rki.coronawarnapp.notification.exposureNotificationChannelId"</xliff:g></string> - <!-- NOTR --> - <string name="notification_id"><xliff:g id="notification_id">"1"</xliff:g></string> - <!-- XTXT: Notification channel name for os settings --> - <string name="notification_name">"Приложение Corona-Warn-App"</string> - <!-- XTXT: Notification channel description for os settings --> - <string name="notification_description">"Ð£Ð²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ‚ Corona-Warn-App"</string> - <!-- XHED: Notification title --> - <string name="notification_headline">"Приложение Corona-Warn-App"</string> - <!-- XTXT: Notification body --> - <string name="notification_body">"ЕÑть новые ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ñ‚ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Corona-Warn-App."</string> - - <!-- #################################### - App Auto Update - ###################################### --> - - <!-- XHED: App Auto Update dialog title --> - <string name="update_dialog_title">"ДоÑтупно обновление"</string> - <!-- XTXT: App Auto Update dialog message --> - <string name="update_dialog_message">"Ð”Ð»Ñ Ð´Ð°Ð»ÑŒÐ½ÐµÐ¹ÑˆÐµÐ³Ð¾ иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Corona-Warn-App уÑтановите поÑледнее обновление."</string> - <!-- XBUT: App Auto Update button --> - <string name="update_dialog_button">"Обновить"</string> - - <!-- #################################### - Risk Card - ###################################### --> - - <!-- XTXT: risk card - no contact yet --> - <string name="risk_card_body_contact">"Пока нет контактов"</string> - <!-- XTXT: risk card - number of contacts for one or more --> - <plurals name="risk_card_body_contact_value"> - <item quantity="one">"%1$s контакт"</item> - <item quantity="other">"%1$s контакта"</item> - <item quantity="zero">"Пока нет контактов"</item> - <item quantity="two">"%1$s контакта"</item> - <item quantity="few">"%1$s контакта"</item> - <item quantity="many">"%1$s контактов"</item> - </plurals> - <!-- XTXT: risk card - number of contacts for one or more --> - <plurals name="risk_card_body_contact_value_high_risk"> - <item quantity="one">"%1$s контакт"</item> - <item quantity="other">"%1$s контакта"</item> - <item quantity="zero">"Пока нет контактов"</item> - <item quantity="two">"%1$s контакта"</item> - <item quantity="few">"%1$s контакта"</item> - <item quantity="many">"%1$s контактов"</item> - </plurals> - <!-- XTXT: risk card - tracing active for x out of 14 days --> - <string name="risk_card_body_saved_days">"Определение риÑка активно %1$s из 14 прошедших дней."</string> - <!-- XTXT: risk card- tracing active for 14 out of 14 days --> - <string name="risk_card_body_saved_days_full">"Определение риÑка поÑтоÑнно активно."</string> - <!-- XTXT; risk card - no update done yet --> - <string name="risk_card_body_not_yet_fetched">"Контакты еще не проверены."</string> - <!-- XTXT: risk card - last successful update --> - <string name="risk_card_body_time_fetched">"Обновлено: %1$s"</string> - <!-- XTXT: risk card - next update --> - <string name="risk_card_body_next_update">"ОбновлÑетÑÑ ÐµÐ¶ÐµÐ´Ð½ÐµÐ²Ð½Ð¾"</string> - <!-- XTXT: risk card - hint to open the app daily --> - <string name="risk_card_body_open_daily">"Примечание: ежедневно открывайте приложение Ð´Ð»Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñвоего ÑтатуÑа риÑка."</string> - <!-- XBUT: risk card - update risk --> - <string name="risk_card_button_update">"Обновить"</string> - <!-- XBUT: risk card - update risk with time display --> - <string name="risk_card_button_cooldown">"Обновление через %1$s"</string> - <!-- XBUT: risk card - activate tracing --> - <string name="risk_card_button_enable_tracing">"Ðктивировать определение риÑка"</string> - <!-- XTXT: risk card - tracing is off, user should activate to get an updated risk level --> - <string name="risk_card_body_tracing_off">"Ðктивируйте определение риÑка, чтобы оценить Ñвой ÑÑ‚Ð°Ñ‚ÑƒÑ Ñ€Ð¸Ñка ÑегоднÑ."</string> - <!-- XHED: risk card - low risk headline --> - <string name="risk_card_low_risk_headline">"Ðизкий риÑк"</string> - <!-- XHED: risk card - increased risk headline --> - <string name="risk_card_increased_risk_headline">"Повышенный риÑк"</string> - <!-- XTXT: risk card - increased risk days since last contact --> - <plurals name="risk_card_increased_risk_body_contact_last"> - <item quantity="one">"%1$s день Ñ Ð¿Ð¾Ñледнего контакта"</item> - <item quantity="other">"%1$s Ð´Ð½Ñ Ñ Ð¿Ð¾Ñледнего контакта"</item> - <item quantity="zero">"%1$s дней Ñ Ð¿Ð¾Ñледнего контакта"</item> - <item quantity="two">"%1$s Ð´Ð½Ñ Ñ Ð¿Ð¾Ñледнего контакта"</item> - <item quantity="few">"%1$s Ð´Ð½Ñ Ñ Ð¿Ð¾Ñледнего контакта"</item> - <item quantity="many">"%1$s дней Ñ Ð¿Ð¾Ñледнего контакта"</item> - </plurals> - <!-- XHED: risk card - unknown risk headline --> - <string name="risk_card_unknown_risk_headline">"ÐеизвеÑтный риÑк"</string> - <!-- XTXT: risk card - tracing isn't active long enough, so a new risk level can't be calculated --> - <string name="risk_card_unknown_risk_body">"С момента активации Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€Ð¸Ñка не прошло доÑтаточно времени, чтобы раÑÑчитать Ваш риÑк заражениÑ."</string> - <!-- XHED: risk card - tracing stopped headline, due to no possible calculation --> - <string name="risk_card_no_calculation_possible_headline">"Определение риÑка оÑтановлено"</string> - <!-- XTXT: risk card - last successfully calculated risk level --> - <string name="risk_card_no_calculation_possible_body_saved_risk">"ПоÑледнее определение риÑка:"<xliff:g id="line_break">"\n"</xliff:g>"%1$s"</string> - <!-- XHED: risk card - outdated risk headline, calculation isn't possible --> - <string name="risk_card_outdated_risk_headline">"Определение риÑка невозможно"</string> - <!-- XTXT: risk card - outdated risk, calculation couldn't be updated in the last 24 hours --> - <string name="risk_card_outdated_risk_body">"Ðе удаетÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ определение риÑка более 24 чаÑов."</string> - <!-- XTXT: risk card - outdated risk manual, calculation couldn't be updated in the last 48 hours --> - <string name="risk_card_outdated_manual_risk_body">"Ваш ÑÑ‚Ð°Ñ‚ÑƒÑ Ñ€Ð¸Ñка не обновлÑлÑÑ Ð±Ð¾Ð»ÐµÐµ 48 чаÑов: обновите Ñвой ÑÑ‚Ð°Ñ‚ÑƒÑ Ñ€Ð¸Ñка."</string> - <!-- XHED: risk card - loading headline, update is ongoing --> - <string name="risk_card_loading_headline">"Проверка выполнÑетÑÑ..."</string> - <!-- XTXT: risk card - loading, data is downloaded and will be checked, this can take several minutes --> - <string name="risk_card_loading_body">"Текущие данные выгружаютÑÑ Ð¸ проверÑÑŽÑ‚ÑÑ. Ðто может занÑть неÑколько минут."</string> - - <!-- #################################### - Main - ###################################### --> - - <!-- XHED: main, FAQ --> - <string name="main_about_headline">"ЧаÑто задаваемые вопроÑÑ‹"</string> - <!-- XTXT: main, explains faq on card --> - <string name="main_about_body">"ЗдеÑÑŒ Ð’Ñ‹ найдете ответы на чаÑто задаваемые вопроÑÑ‹ о приложении Corona-Warn-App. Ð’Ñ‹ будете переадреÑованы на внешний веб-Ñайт."</string> - <!-- XTXT: FAQ link, should be translated --> - <string name="main_about_link">"https://www.bundesregierung.de/corona-warn-app-faq-englisch"</string> - <!-- XACT: Opens external webpage --> - <string name="hint_external_webpage">"ЗдеÑÑŒ Ð’Ñ‹ найдете ответы на чаÑто задаваемые вопроÑÑ‹ о приложении Corona-Warn-App. Ð’Ñ‹ будете переадреÑованы на внешний веб-Ñайт."</string> - - <!-- #################################### - Main - Share - ###################################### --> - - <!-- XHED: Share app link page title --> - <string name="main_share_title">"ПоделитьÑÑ Corona-Warn-App"</string> - <!-- XHED: Share app link page subtitle --> - <string name="main_share_headline">"Давайте победим ÐºÐ¾Ñ€Ð¾Ð½Ð°Ð²Ð¸Ñ€ÑƒÑ Ð²Ð¼ÐµÑте"</string> - <!-- YTXT: Share app link page body --> - <string name="main_share_body">"Чем больше пользователей приложениÑ, тем быÑтрее мы Ñможем оÑтановить передачу инфекции. Предложите Ñвоим родным и друзьÑм выгрузить приложение."</string> - <!-- XBUT: Share app link page button --> - <string name="main_share_button">"Отправить ÑÑылку Ð´Ð»Ñ Ð²Ñ‹Ð³Ñ€ÑƒÐ·ÐºÐ¸"</string> - <!-- YMSG: Message when sharing is executed --> - <string name="main_share_message">"Победим ÐºÐ¾Ñ€Ð¾Ð½Ð°Ð²Ð¸Ñ€ÑƒÑ Ð²Ð¼ÐµÑте"<xliff:g id="line_break">"\n"</xliff:g>"Я учаÑтвую, а ты?"<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="link_play_store">"https://www.corona-warn-app.de"</xliff:g>"\n"<xliff:g id="line_break">"\n"</xliff:g></string> - <!-- XACT: main (share) - illustraction description, explanation image --> - <string name="main_share_illustration_description">"Человек делитÑÑ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸ÐµÐ¼ Corona-Warn-App Ñ Ñ‡ÐµÑ‚Ñ‹Ñ€ÑŒÐ¼Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ людьми."</string> - - <!-- #################################### - Main - Overview - ###################################### --> - - <!-- XHED: App overview page title --> - <string name="main_overview_title">"Обзор"</string> - <!-- XACT: main overview page title --> - <string name="main_overview_accessibility_title">"Обзор"</string> - <!-- XHED: App overview subtitle for tracing explanation--> - <string name="main_overview_subtitle_tracing">"Определение риÑка"</string> - <!-- YTXT: App overview body text about tracing --> - <string name="main_overview_body_tracing">"Определение риÑка - одна из трех оÑновных функций приложениÑ. Когда она активирована, региÑтрируютÑÑ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ñ‹ Ñ ÑƒÑтройÑтвами других людей. Вам не нужно ничего делать."</string> - <!-- XHED: App overview subtitle for risk explanation --> - <string name="main_overview_subtitle_risk">"РиÑк заражениÑ"</string> - <!-- YTXT: App overview body text about risk levels --> - <string name="main_overview_body_risk">"ЕÑли Ð’Ñ‹ в течение поÑледних 14 дней контактировали Ñ Ð»Ð¸Ñ†Ð¾Ð¼ Ñ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼ теÑтом на COVID-19, приложение раÑÑчитает Ваш риÑк заражениÑ. Ð”Ð»Ñ Ñтого оцениваютÑÑ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñть и близоÑть контакта."</string> - <!-- XHED: App overview subtitle for risk level list --> - <string name="main_overview_subtitle_risk_levels">"Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ñ€Ð¸Ñка может иметь Ñледующие значениÑ:"</string> - <!-- XTXT: App overview increased risk level --> - <string name="main_overview_subtitle_increased_risk">"Повышенный риÑк"</string> - <!-- XTXT: App overview low risk level --> - <string name="main_overview_subtitle_low_risk">"Ðизкий риÑк"</string> - <!-- XTXT: App overview unknown risk level --> - <string name="main_overview_subtitle_unknown_risk">"ÐеизвеÑтный риÑк"</string> - <!-- XHED: App overview subtitle for test procedure explanation --> - <string name="main_overview_headline_test">"Уведомление других пользователей"</string> - <!-- YTXT: App overview body text about rest procedure --> - <string name="main_overview_body_test">"Еще одна из оÑновных функций - региÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð’Ð°ÑˆÐµÐ³Ð¾ теÑта и получение результата. ЕÑли у Ð’Ð°Ñ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ текÑÑ‚ на COVID-19, Ð’Ñ‹ можете уведомить других людей и оÑтановить передачу инфекции."</string> - <!-- XHED: App overview headline for glossary --> - <string name="main_overview_headline_glossary">"ТерминологиÑ:"</string> - <!-- XHED: App overview subtitle for glossary key storage --> - <string name="main_overview_subtitle_glossary_tracing">"Журнал контактов"</string> - <!-- YTXT: App overview body for glossary key storage --> - <string name="main_overview_body_glossary_tracing">"СпиÑок полученных и Ñлучайных идентификаторов, временно Ñохраненных в хранилище операционной ÑиÑтемы. Ðтот ÑпиÑок ÑчитываетÑÑ Ð¿Ñ€Ð¸ проверке контактов. Ð’Ñе Ñлучайные идентификаторы автоматичеÑки удалÑÑŽÑ‚ÑÑ Ñ‡ÐµÑ€ÐµÐ· 14 дней."</string> - <!-- XHED: App overview subtitle for glossary risk calculation --> - <string name="main_overview_subtitle_glossary_calculation">"Проверка контактов"</string> - <!-- YTXT: App overview body for glossary risk calculation --> - <string name="main_overview_body_glossary_calculation">"Данные журнала контактов вызываютÑÑ Ð¸ ÑинхронизируютÑÑ Ñ Ð·Ð°Ñ€ÐµÐ³Ð¸Ñтрированными заражениÑми других пользователей. Проверка контактов выполнÑетÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑки Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð²Ð°Ð»Ð¾Ð¼ около двух чаÑов."</string> - <!-- XHED: App overview subtitle for glossary contact --> - <string name="main_overview_subtitle_glossary_contact">"Контакты"</string> - <!-- YTXT: App overview body for glossary contact --> - <string name="main_overview_body_glossary_contact">"Продолжительные и близкие контакты Ñ Ð»Ð¸Ñ†Ð¾Ð¼, у которого диагноÑтирован COVID-19."</string> - <!-- XHED: App overview subtitle for glossary notifications --> - <string name="main_overview_subtitle_glossary_notification">"Уведомление о контакте"</string> - <!-- YTXT: App overview body for glossary notifications --> - <string name="main_overview_body_glossary_notification">"Отображение уведомлений в приложении Corona-Warn-App."</string> - <!-- XHED: App overview subtitle for glossary keys --> - <string name="main_overview_subtitle_glossary_keys">"Случайные идентификаторы"</string> - <!-- YTXT: App overview body for glossary keys --> - <string name="main_overview_body_glossary_keys">"Случайные идентификаторы предÑтавлÑÑŽÑ‚ Ñобой комбинации цифр и букв, генерируемые произвольно. Они передаютÑÑ Ð¼ÐµÐ¶Ð´Ñƒ уÑтройÑтвами в непоÑредÑтвенной близоÑти. По Ñлучайным идентификаторам Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ñледить конкретных лиц. Они автоматичеÑки удалÑÑŽÑ‚ÑÑ Ñ‡ÐµÑ€ÐµÐ· 14 дней. Лица Ñ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼ теÑтом на COVID-19 могут по желанию поделитьÑÑ Ñвоими Ñлучайными идентификаторами за Ñрок до 14 дней Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ пользователÑми приложениÑ."</string> - <!-- XACT: main (overview) - illustraction description, explanation image --> - <string name="main_overview_illustration_description">"Ðа Ñмартфоне отображаетÑÑ Ñ€Ð°Ð·Ð½Ð¾Ðµ Ñодержимое, пронумерованное от 1 до 3."</string> - <!-- XACT: App main page title --> - <string name="main_title">"Ð“Ð»Ð°Ð²Ð½Ð°Ñ Ñтраница Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Corona-Warn-App"</string> - - <!-- #################################### - Risk Details - ###################################### --> - - <!-- XHED: risk details - page title, in toolbar --> - <string name="risk_details_title">"Ваш ÑÑ‚Ð°Ñ‚ÑƒÑ Ñ€Ð¸Ñка"</string> - <!-- XHED: risk details - headline, how a user should act --> - <string name="risk_details_headline_behavior">"ИнÑтрукции"</string> - <!-- XHED: risk details - multiline headline, bold, how to act correct --> - <string name="risk_details_subtitle_behavior">"Вот что Вам нужно Ñделать"</string> - <!-- XMSG: risk details - go/stay home, something like a bullet point --> - <string name="risk_details_behavior_body_stay_home">"По возможноÑти возвращайтеÑÑŒ домой и оÑтавайтеÑÑŒ дома."</string> - <!-- XMSG: risk details - get in touch with the corresponding people, something like a bullet point --> - <string name="risk_details_behavior_body_contact_doctor">"Контакты Ð´Ð»Ñ Ð²Ð¾Ð¿Ñ€Ð¾Ñов о Ñимптомах, доÑтупноÑти теÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ ÑамоизолÑции:"</string> - <!-- XMSG: risk details - wash your hands, something like a bullet point --> - <string name="risk_details_behavior_body_wash_hands">"РегулÑрно мойте руки Ñ Ð¼Ñ‹Ð»Ð¾Ð¼ не менее 20 Ñекунд."</string> - <!-- XMSG: risk details - wear a face mask, something like a bullet point --> - <string name="risk_details_behavior_body_wear_mask">"ÐоÑите защитную маÑку при контактах Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ людьми."</string> - <!-- XMSG: risk details - stay 1,5 away, something like a bullet point --> - <string name="risk_details_behavior_body_stay_away">"Соблюдайте раÑÑтоÑние не менее 1,5 м от других людей."</string> - <!-- XMSG: risk details - cough/sneeze, something like a bullet point --> - <string name="risk_details_behavior_body_cough_sneeze">"Во Ð²Ñ€ÐµÐ¼Ñ Ñ‡Ð¸Ñ…Ð°Ð½Ð¸Ñ Ð¸ ÐºÐ°ÑˆÐ»Ñ Ð¿Ñ€Ð¸ÐºÑ€Ñ‹Ð²Ð°Ð¹Ñ‚Ðµ рот Ñгибом Ð»Ð¾ÐºÑ‚Ñ Ð¸Ð»Ð¸ Ñалфеткой."</string> - <!-- XMSG: risk details - contact your doctor, bullet point --> - <string name="risk_details_behavior_increased_body_1">"Ваш врач общей практики"</string> - <!-- XMSG: risk details - panel doctor on-call service, bullet point --> - <string name="risk_details_behavior_increased_body_2">"Ð¡ÐºÐ¾Ñ€Ð°Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒ (тел. 116117)"</string> - <!-- XMSG: risk details - public health department, bullet point --> - <string name="risk_details_behavior_increased_body_3">"МеÑтный орган здравоохранениÑ"</string> - <!-- XHED: risk details - infection risk headline, below behaviors --> - <string name="risk_details_headline_infection_risk">"РиÑк заражениÑ"</string> - <!-- XHED: risk details - infection period logged headling, below behaviors --> - <string name="risk_details_headline_period_logged">"Период Ð½Ð°Ñ…Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð² ÑиÑтеме"</string> - <!-- XHED: risk details - infection period logged headling, below behaviors --> - <string name="risk_details_subtitle_period_logged">"Ðтот период включен в раÑчет."</string> - <!-- XHED: risk details - infection period logged information body, below behaviors --> - <string name="risk_details_information_body_period_logged">"Ваш риÑк Ð·Ð°Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ раÑÑчитать только Ð´Ð»Ñ Ð¿ÐµÑ€Ð¸Ð¾Ð´Ð¾Ð² активного Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€Ð¸Ñка, поÑтому Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° быть поÑтоÑнно активной."</string> - <!-- XHED: risk details - infection period logged information body, below behaviors --> - <string name="risk_details_information_body_period_logged_assessment">"Определение риÑка охватывает поÑледние 14 дней. Ð’ течение Ñтого времени Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½Ð° Вашем уÑтройÑтве была активна %1$s дн. Приложение автоматичеÑки удалÑет Ñтарые журналы, как только они терÑÑŽÑ‚ значение Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´Ð¾Ñ‚Ð²Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð·Ð°Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ."</string> - <!-- XHED: risk details - how your risk level was calculated, below behaviors --> - <string name="risk_details_subtitle_infection_risk_past">"Вот как был раÑÑчитан Ваш риÑк"</string> - <!-- XHED: risk details - how your risk level will be calculated, below behaviors --> - <string name="risk_details_subtitle_infection_risk">"Вот как раÑÑчитываетÑÑ Ð’Ð°Ñˆ риÑк"</string> - <!-- XMSG: risk details - risk couldn't be calculated tracing wasn't enabled long enough, below behaviors --> - <string name="risk_details_information_body_unknown_risk">"С момента активации Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€Ð¸Ñка не прошло доÑтаточно времени, чтобы раÑÑчитать Ваш риÑк заражениÑ."</string> - <!-- XMSG: risk details - risk calculation wasn't possible for 24h, below behaviors --> - <string name="risk_details_information_body_outdated_risk">"Ðе удаетÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ определение риÑка более 24 чаÑов."</string> - <!-- YTXT: risk details - low risk explanation text --> - <string name="risk_details_information_body_low_risk">"У Ð’Ð°Ñ Ð½Ð¸Ð·ÐºÐ¸Ð¹ риÑк заражениÑ, поÑкольку не зарегиÑтрировано контактов Ñ Ð»Ð¸Ñ†Ð°Ð¼Ð¸ Ñ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼ теÑтом на COVID-19 или контакты были кратковременными и на большом раÑÑтоÑнии."</string> - <!-- YTXT: risk details - increased risk explanation text with variable for day(s) since last contact --> - <plurals name="risk_details_information_body_increased_risk"> - <item quantity="one">"У Ð’Ð°Ñ Ð¿Ð¾Ð²Ñ‹ÑˆÐµÐ½Ð½Ñ‹Ð¹ риÑк заражениÑ, поÑкольку %1$s день назад у Ð’Ð°Ñ Ð±Ñ‹Ð» продолжительный близкий контакт минимум Ñ Ð¾Ð´Ð½Ð¸Ð¼ лицом Ñ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼ теÑтом на COVID-19."</item> - <item quantity="other">"У Ð’Ð°Ñ Ð¿Ð¾Ð²Ñ‹ÑˆÐµÐ½Ð½Ñ‹Ð¹ риÑк заражениÑ, поÑкольку %1$s Ð´Ð½Ñ Ð½Ð°Ð·Ð°Ð´ у Ð’Ð°Ñ Ð±Ñ‹Ð» продолжительный близкий контакт минимум Ñ Ð¾Ð´Ð½Ð¸Ð¼ лицом Ñ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼ теÑтом на COVID-19."</item> - <item quantity="zero">"У Ð’Ð°Ñ Ð¿Ð¾Ð²Ñ‹ÑˆÐµÐ½Ð½Ñ‹Ð¹ риÑк заражениÑ, поÑкольку %1$s дней назад у Ð’Ð°Ñ Ð±Ñ‹Ð» продолжительный близкий контакт минимум Ñ Ð¾Ð´Ð½Ð¸Ð¼ лицом Ñ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼ теÑтом на COVID-19."</item> - <item quantity="two">"У Ð’Ð°Ñ Ð¿Ð¾Ð²Ñ‹ÑˆÐµÐ½Ð½Ñ‹Ð¹ риÑк заражениÑ, поÑкольку %1$s Ð´Ð½Ñ Ð½Ð°Ð·Ð°Ð´ у Ð’Ð°Ñ Ð±Ñ‹Ð» продолжительный близкий контакт минимум Ñ Ð¾Ð´Ð½Ð¸Ð¼ лицом Ñ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼ теÑтом на COVID-19."</item> - <item quantity="few">"У Ð’Ð°Ñ Ð¿Ð¾Ð²Ñ‹ÑˆÐµÐ½Ð½Ñ‹Ð¹ риÑк заражениÑ, поÑкольку %1$s Ð´Ð½Ñ Ð½Ð°Ð·Ð°Ð´ у Ð’Ð°Ñ Ð±Ñ‹Ð» продолжительный близкий контакт минимум Ñ Ð¾Ð´Ð½Ð¸Ð¼ лицом Ñ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼ теÑтом на COVID-19."</item> - <item quantity="many">"У Ð’Ð°Ñ Ð¿Ð¾Ð²Ñ‹ÑˆÐµÐ½Ð½Ñ‹Ð¹ риÑк заражениÑ, поÑкольку %1$s дней назад у Ð’Ð°Ñ Ð±Ñ‹Ð» продолжительный близкий контакт минимум Ñ Ð¾Ð´Ð½Ð¸Ð¼ лицом Ñ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼ теÑтом на COVID-19."</item> - </plurals> - <!-- YTXT: risk details - risk calculation explanation --> - <string name="risk_details_information_body_notice">"РиÑк Ð·Ð°Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñ€Ð°ÑÑчитываетÑÑ Ð½Ð° Вашем уÑтройÑтве по локальным данным Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€Ð¸Ñка (продолжительноÑти и близоÑти). Данные риÑка Ð·Ð°Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ показываютÑÑ Ð¸ не передаютÑÑ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ лицам."</string> - <!-- YTXT: risk details - risk calculation explanation for low risk --> - <string name="risk_details_information_body_notice_low">"ПоÑтому Ваш риÑк Ð·Ð°Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð±Ñ‹Ð» оценен как низкий. РиÑк Ð·Ð°Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñ€Ð°ÑÑчитываетÑÑ Ð½Ð° Вашем уÑтройÑтве по локальным данным Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€Ð¸Ñка (продолжительноÑти и близоÑти). Данные риÑка Ð·Ð°Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ показываютÑÑ Ð¸ не передаютÑÑ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ лицам."</string> - <!-- YTXT: risk details - risk calculation explanation for increased risk --> - <string name="risk_details_information_body_notice_increased">"ПоÑтому Ваш риÑк Ð·Ð°Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð±Ñ‹Ð» оценен как повышенный. РиÑк Ð·Ð°Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñ€Ð°ÑÑчитываетÑÑ Ð¿Ð¾ локальным данным Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€Ð¸Ñка (продолжительноÑти и близоÑти) на Вашем уÑтройÑтве. Данные риÑка Ð·Ð°Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ показываютÑÑ Ð¸ не передаютÑÑ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ лицам. По возвращении домой избегайте близкого контакта Ñ Ñ‡Ð»ÐµÐ½Ð°Ð¼Ð¸ вашей Ñемьи."</string> - <!-- NOTR --> - <string name="risk_details_button_update">@string/risk_card_button_update</string> - <!-- NOTR --> - <string name="risk_details_button_enable_tracing">@string/risk_card_button_enable_tracing</string> - <!-- XACT: risk details page title --> - <string name="risk_details_accessibility_title">"Ваш ÑÑ‚Ð°Ñ‚ÑƒÑ Ñ€Ð¸Ñка"</string> - - <!-- XHED: one time risk explanation dialog title --> - <string name="risk_details_explanation_dialog_title">"Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ функции Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€Ð¸Ñка"</string> - <!-- YTXT: one time risk explanation dialog - pointing to the faq page for more information--> - <string name="risk_details_explanation_dialog_faq_body">"Подробнее Ñм. на Ñтранице чаÑто задаваемых вопроÑов."</string> - - <!-- #################################### - Onboarding - ###################################### --> - - <!-- XBUT: onboarding - forward and deny --> - <string name="onboarding_button_disable">"Ðе активировать"</string> - <!-- XBUT: onboarding - forward and allow --> - <string name="onboarding_button_enable">"Ðктивировать"</string> - <!-- XBUT: onboarding - back and cancel --> - <string name="onboarding_button_cancel">"Отменить"</string> - <!-- XBUT: onboarding - next --> - <string name="onboarding_button_next">"Дальше"</string> - <!-- XBUT: onboarding - start --> - <string name="onboarding_button_start">"Давайте начнем"</string> - <!-- XTXT: onboarding - back description for screen reader --> - <string name="onboarding_button_back_description">"Ðазад"</string> - <!-- XACT: Onboarding (together) page title --> - <string name="onboarding_onboarding_accessibility_title">"Страница адаптации 1 из 5. Победим ÐºÐ¾Ñ€Ð¾Ð½Ð°Ð²Ð¸Ñ€ÑƒÑ Ð²Ð¼ÐµÑте"</string> - <!-- XHED: onboarding(together) - fight corona --> - <string name="onboarding_headline">"Давайте победим ÐºÐ¾Ñ€Ð¾Ð½Ð°Ð²Ð¸Ñ€ÑƒÑ Ð²Ð¼ÐµÑте"</string> - <!-- XHED: onboarding(together) - two/three line headline under an illustration --> - <string name="onboarding_subtitle">"Более Ð½Ð°Ð´ÐµÐ¶Ð½Ð°Ñ Ð·Ð°Ñ‰Ð¸Ñ‚Ð° Ð´Ð»Ñ Ð’Ð°Ñ Ð¸ Ð´Ð»Ñ Ð²Ñех наÑ. Приложение Corona-Warn-App поможет быÑтрее оÑтановить передачу инфекции."</string> - <!-- YTXT: onboarding(together) - inform about the app --> - <string name="onboarding_body">"Сделайте из Вашего уÑтройÑтва ÑиÑтему Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¾ коронавируÑе. ПроÑматривайте Ваш ÑÑ‚Ð°Ñ‚ÑƒÑ Ñ€Ð¸Ñка и определÑйте, были ли у Ð’Ð°Ñ Ð±Ð»Ð¸Ð·ÐºÐ¸Ðµ контакты Ñ Ð»Ð¸Ñ†Ð°Ð¼Ð¸ Ñ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼ теÑтом на COVID-19 за поÑледние 14 дней."</string> - <!-- YTXT: onboarding(together) - explain application --> - <string name="onboarding_body_emphasized">"Контакты людей региÑтрируютÑÑ Ð² приложении путем обмена зашифрованными Ñлучайными идентификаторами между уÑтройÑтвами без доÑтупа к каким-либо перÑональным данным."</string> - <!-- XACT: onboarding(together) - illustraction description, header image --> - <string name="onboarding_illustration_description">"Группа людей иÑпользует Ñвои Ñмартфоны в городе."</string> - <!-- XACT: Onboarding (privacy) page title --> - <string name="onboarding_privacy_accessibility_title">"Страница адаптации 2 из 5. КонфиденциальноÑть данных. Далее идет подробный текÑÑ‚. Ð”Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ð½Ð°Ð¶Ð¼Ð¸Ñ‚Ðµ кнопку внизу Ñкрана."</string> - <!-- XHED: onboarding(privacy) - title --> - <string name="onboarding_privacy_headline">"КонфиденциальноÑть данных"</string> - - <!-- XACT: onboarding(privacy) - illustraction description, header image --> - <string name="onboarding_privacy_illustration_description">"Ðа Ñмартфоне одной женщины уÑтановлено приложение Corona-Warn-App. Значок замка на фоне щита указывает на шифрование данных."</string> - <!-- XACT: Onboarding (tracing) page title --> - <string name="onboarding_tracing_accessibility_title">"Страница адаптации 3 из 5. ÐÐºÑ‚Ð¸Ð²Ð°Ñ†Ð¸Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€Ð¸Ñка"</string> - <!-- XHED: onboarding(tracing) - how to enable tracing --> - <string name="onboarding_tracing_headline">"Как активировать определение риÑка"</string> - <!-- XHED: onboarding(tracing) - two/three line headline under an illustration --> - <string name="onboarding_tracing_subtitle">"Чтобы узнать, еÑть ли у Ð’Ð°Ñ Ñ€Ð¸Ñк заражениÑ, нужно активировать функцию Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€Ð¸Ñка."</string> - <!-- YTXT: onboarding(tracing) - explain tracing --> - <string name="onboarding_tracing_body">"Ð”Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€Ð¸Ñка Ваше уÑтройÑтво получает по Bluetooth зашифрованные Ñлучайные идентификаторы других пользователей и передает Ваш Ñлучайный идентификатор на их уÑтройÑтва. Ðту функцию можно деактивировать в любое времÑ."</string> - <!-- YTXT: onboarding(tracing) - explain tracing --> - <string name="onboarding_tracing_body_emphasized">"Зашифрованные Ñлучайные идентификаторы передают другим людÑм только информацию о дате, продолжительноÑти и близоÑти (по Ñиле Ñигнала) контакта. ПерÑональные данные, такие как имÑ, Ð°Ð´Ñ€ÐµÑ Ð¸Ð»Ð¸ меÑтоположение, никогда не региÑтрируютÑÑ. Ð˜Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð»Ð¸Ñ†Ð° невозможна."</string> - <!-- YTXT: onboarding(tracing) - easy language explain tracing link--> - <string name="onboarding_tracing_easy_language_explanation"><a href="https://www.bundesregierung.de/breg-de/themen/corona-warn-app/corona-warn-app-leichte-sprache-gebaerdensprache">"Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ приложении проÑтым Ñзыком и на Ñзыке жеÑтов"</a></string> - <!-- NOTR: onboarding(tracing) - easy language explain tracing link URL--> - <string name="onboarding_tracing_easy_language_explanation_url">"https://www.bundesregierung.de/breg-de/themen/corona-warn-app/corona-warn-app-leichte-sprache-gebaerdensprache"</string> - <!-- XHED: onboarding(tracing) - headline for consent information --> - <string name="onboarding_tracing_headline_consent">"ЗаÑвление о ÑоглаÑии"</string> - <!-- YTXT: onboarding(tracing) - body for consent information --> - <string name="onboarding_tracing_body_consent">"Чтобы узнать, был ли у Ð’Ð°Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚ Ñ Ð¸Ð½Ñ„Ð¸Ñ†Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼ лицом и еÑть ли риÑк заражениÑ, Вам необходимо активировать в Приложении функцию \"Определение риÑка\". Ð’Ñ‹ даете Ñвое ÑоглаÑие на активацию Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€Ð¸Ñка и ÑоответÑтвующую обработку данных, нажав \"Ðктивировать определение риÑка\"."<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"Ð”Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€Ð¸Ñка Вам также необходимо активировать на Ñвоем Ñмартфоне разработанную компанией Google функцию запиÑи контактов „COVID-19: отÑлеживание контактов“ и разрешить допуÑк к мобильному приложению Corona-Warn-App."<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"При активации функции запиÑи контактов Ваш Ñмартфон автоматичеÑки генерирует и поÑылает через Bluetooth Ñлучайные коды, которые могут быть получены другими Ñмартфонами Apple и Android вблизи от ВаÑ, в которых также активирована Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñи контактов. Ð’ Ñвою очередь, Ваш Ñмартфон получает Ñлучайные коды других Ñмартфонов. Ваши ÑобÑтвенные и полученные Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ… Ñмартфонов Ñлучайные коды хранÑÑ‚ÑÑ Ð² течение 14 дней в журнале контактов функции «COVID-19: отÑлеживание контактов»."<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"Ð”Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð’Ð°ÑˆÐµÐ³Ð¾ риÑка Ð·Ð°Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÐŸÑ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ загружает в течение днÑ, неоднократно или по запроÑу, ÑпиÑок Ñлучайных кодов вÑех пользователей, которые Ñообщили через Приложение о Ñвоем подтвержденном диагнозе. Затем данный ÑпиÑок ÑравниваетÑÑ Ñо ÑпиÑком Ñлучайных кодов, Ñохраненных в журнале контактов функции запиÑи контактов. ЕÑли при Ñтом Приложение зафикÑирует возможный контакт Ñ Ð¸Ð½Ñ„Ð¸Ñ†Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼ пользователем, Приложение уведомит Ð’Ð°Ñ Ð¾ контакте Ñ Ð¸Ð½Ñ„Ð¸Ñ†Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼ лицом и о риÑке заражениÑ. Ð’ Ñтом Ñлучае Приложение получит доÑтуп к оÑтальным данным, Ñохраненным в журнале контактов функции «COVID-19: отÑлеживание контактов» Вашего Ñмартфона (дата, длительноÑть контакта и Ñила Ñигнала Bluetooth)."<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"Сила Ñигнала Bluetooth помогает определить раÑÑтоÑние (чем Ñильнее Ñигнал, тем меньше раÑÑтоÑние). Приложение обрабатывает Ñти данные Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы оценить Ð´Ð»Ñ Ð’Ð°Ñ Ñ€Ð¸Ñк Ð·Ð°Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ ÐºÐ¾Ñ€Ð¾Ð½Ð°Ð²Ð¸Ñ€ÑƒÑом и предоÑтавить Вам рекомендации Ð´Ð»Ñ Ð´Ð°Ð»ÑŒÐ½ÐµÐ¹ÑˆÐ¸Ñ… дейÑтвий. Ð”Ð°Ð½Ð½Ð°Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ° данных оÑущеÑтвлÑетÑÑ Ð¸Ñключительно локально на Вашем Ñмартфоне. Ðикто (в том чиÑле ИРК), кроме ВаÑ, не узнает о том, находилиÑÑŒ ли Ð’Ñ‹ в контакте Ñ Ð¸Ð½Ñ„Ð¸Ñ†Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼ лицом и каким был результат оценки риÑка заражениÑ."<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"Чтобы отозвать Ñвое ÑоглаÑие на определение риÑка, Ð’Ñ‹ можете деактивировать Ñту функцию в Приложении, нажав на ползунок, или удалить Приложение. ЕÑли Ð’Ñ‹ хотите Ñнова иÑпользовать определение Ñтепени риÑка, активируйте заново ползунок или Ñнова уÑтановите Приложение. При отключении функции Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€Ð¸Ñка Приложение больше не проверÑет, был ли у Ð’Ð°Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚ Ñ Ð¸Ð½Ñ„Ð¸Ñ†Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼ пользователем. Чтобы оÑтановить отправку и получение Ñлучайных кодов, Вам необходимо отключить в наÑтройках Вашего Ñмартфона функцию «COVID-19: отÑлеживание контактов». Обратите внимание, что Ваши и Ñторонние Ñлучайные коды, Ñохраненные в журнале контактов функции «COVID-19: отÑлеживание контактов» не удалÑÑŽÑ‚ÑÑ Ð² Приложении. Сохраненные данные в журнале контактов функции «COVID-19: отÑлеживание контактов» Ð’Ñ‹ можете удалить на долгоÑрочный период только в наÑтройках Ñмартфона."<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"Политика конфиденциальноÑти ÐŸÑ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (в том чиÑле Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± обработке данных Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñтепени риÑка) доÑтупна в пункте меню Â«Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ конфиденциальноÑти данных»."</string> - <!-- XBUT: onboarding(tracing) - button enable tracing --> - <string name="onboarding_tracing_button_next">"Ðктивировать определение риÑка"</string> - <!-- XTXT: onboarding(tracing) - dialog about tracing permission declined --> - <string name="onboarding_tracing_dialog_headline">"ÐвторизациÑ"</string> - <!-- YMSI: onboarding(tracing) - dialog about tracing --> - <string name="onboarding_tracing_dialog_body">"Ðто означает, что приложение Corona-Warn-App не может отправлÑть и получать ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾ Вашем ÑтатуÑе риÑка Ð·Ð°Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ COVID-19. Ð’Ñ‹ можете деактивировать Ñту функцию в любое времÑ."</string> - <!-- XBUT: onboarding(tracing) - positive button (right) --> - <string name="onboarding_tracing_dialog_button_positive">"Ðе активировать"</string> - <!-- XBUT: onboarding(tracing) - negative button (right) --> - <string name="onboarding_tracing_dialog_button_negative">"Ðазад"</string> - <!-- XACT: onboarding(tracing) - dialog about background jobs header text --> - <string name="onboarding_background_fetch_dialog_headline">"Обновление в фоновом режиме отключено"</string> - <!-- YMSI: onboarding(tracing) - dialog about background jobs --> - <string name="onboarding_background_fetch_dialog_body">"Ð’Ñ‹ отключили обновление Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Corona-Warn-App в фоновом режиме. Включите обновление в фоновом режиме Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑкого Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€Ð¸Ñка. При отключенном обновлении в фоновом режиме определение риÑка можно запуÑтить только вручную. Ðктивировать обновление в фоновом режиме можно в наÑтройках Ñвоего уÑтройÑтва."</string> - <!-- XBUT: onboarding(tracing) - dialog about background jobs, open device settings --> - <string name="onboarding_background_fetch_dialog_button_positive">"Открыть наÑтройки уÑтройÑтва"</string> - <!-- XBUT: onboarding(tracing) - dialog about background jobs, continue in app --> - <string name="onboarding_background_fetch_dialog_button_negative">"ЗапуÑтить определение риÑка вручную"</string> - <!-- XACT: onboarding(tracing) - dialog about energy optimized header text --> - <string name="onboarding_energy_optimized_dialog_headline">"Разрешить приоритетную фоновую активноÑть"</string> - <!-- YMSI: onboarding(tracing) - dialog about energy optimized --> - <string name="onboarding_energy_optimized_dialog_body">"Включите приоритетную фоновую активноÑть, чтобы разрешить приложению влюбое Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñть Ваш ÑÑ‚Ð°Ñ‚ÑƒÑ Ñ€Ð¸Ñка в фоновом режиме (рекомендуетÑÑ). Ð¢Ð°ÐºÐ°Ñ Ð½Ð°Ñтройка отключает оптимизацию раÑхода зарÑда аккумулÑтора только Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Corona-Warn-App. Мы не предполагаем, что Ñто может ÑущеÑтвенно Ñнизить раÑход Вашего аккумулÑтора.\n\nПри отказе от данной наÑтройки рекомендуем Вам открывать приложении вручную Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ раз в 24 чаÑа."</string> - <!-- XBUT: onboarding(tracing) - dialog about energy optimized, open device settings --> - <string name="onboarding_energy_optimized_dialog_button_positive">"Разрешить"</string> - <!-- XBUT: onboarding(tracing) - dialog about energy optimized, continue in app --> - <string name="onboarding_energy_optimized_dialog_button_negative">"Ðе разрешать"</string> - <!-- XACT: onboarding(tracing) - dialog about manual checking header text --> - <string name="onboarding_manual_required_dialog_headline">"ÐŸÑ€Ð¸Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ð½Ð°Ñ Ñ„Ð¾Ð½Ð¾Ð²Ð°Ñ Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾Ñть отключена"</string> - <!-- YMSI: onboarding(tracing) - dialog about manual checking --> - <string name="onboarding_manual_required_dialog_body">"Обратите внимание, что при отключении приоритетной фоновой активноÑти Вам нужно раз в 24 чаÑа открывать приложение вручную, чтобы определить Ñвой ÑÑ‚Ð°Ñ‚ÑƒÑ Ñ€Ð¸Ñка.\n\nÐ’Ñ‹ в любое Ð²Ñ€ÐµÐ¼Ñ Ð¼Ð¾Ð¶ÐµÑ‚Ðµ включить приоритетную фоновую активноÑть в наÑтройках."</string> - <!-- XBUT: onboarding(tracing) - dialog about manual checking button --> - <string name="onboarding_manual_required_dialog_button">"ОК"</string> - <!-- XACT: onboarding(tracing) - illustraction description, header image --> - <string name="onboarding_tracing_illustration_description">"Три человека активировали определение риÑка на Ñвоих уÑтройÑтвах, то еÑть их контакты друг Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¼ будут региÑтрироватьÑÑ."</string> - <!-- XHED: onboarding(tracing) - location explanation for bluetooth headline --> - <string name="onboarding_tracing_location_headline">"Разрешить доÑтуп к меÑтоположению"</string> - <!-- XTXT: onboarding(tracing) - location explanation for bluetooth body text --> - <string name="onboarding_tracing_location_body">"ДоÑтуп к Вашему меÑтоположению невозможен. Чтобы иÑпользовать Bluetooth, Google и/или Android требуетÑÑ Ð´Ð¾Ñтуп к меÑтоположению Вашего уÑтройÑтва."</string> - <!-- XBUT: onboarding(tracing) - button enable tracing --> - <string name="onboarding_tracing_location_button">"Открыть наÑтройки уÑтройÑтва"</string> - <!-- XACT: Onboarding (test) page title --> - <string name="onboarding_test_accessibility_title">"Страница адаптации 4 из 5. ЕÑли у Ð’Ð°Ñ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ теÑÑ‚ на COVID-19..."</string> - <!-- XHED: onboarding(test) - about positive tests --> - <string name="onboarding_test_headline">"ЕÑли у Ð’Ð°Ñ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ теÑÑ‚ на COVID-19..."</string> - <!-- XHED: onboarding(test) - two/three line headline under an illustration --> - <string name="onboarding_test_subtitle">"…Укажите Ñто в приложении Corona-Warn-App. ПредоÑтавление результата Вашего теÑта ÑвлÑетÑÑ Ð´Ð¾Ð±Ñ€Ð¾Ð²Ð¾Ð»ÑŒÐ½Ñ‹Ð¼ и безопаÑным. ПроÑим Ð’Ð°Ñ Ð¾Ð± Ñтом ради Ð·Ð´Ð¾Ñ€Ð¾Ð²ÑŒÑ Ð´Ñ€ÑƒÐ³Ð¸Ñ… людей."</string> - <!-- YTXT: onboarding(test) - explain test --> - <string name="onboarding_test_body">"Ваше уведомление шифруетÑÑ Ð´Ð»Ñ Ð·Ð°Ñ‰Ð¸Ñ‚Ñ‹ и обрабатываетÑÑ Ð½Ð° безопаÑном Ñервере. ЛюдÑм, от которых Ваше уÑтройÑтво получило зашифрованные Ñлучайные идентификаторы, отправлÑетÑÑ Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ðµ вмеÑте Ñ Ñ€ÐµÐºÐ¾Ð¼ÐµÐ½Ð´ÑƒÐµÐ¼Ñ‹Ð¼Ð¸ дейÑтвиÑми."</string> - <!-- XACT: onboarding(test) - illustraction description, header image --> - <string name="onboarding_test_illustration_description">"Ð—Ð°ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ положительном теÑте передаетÑÑ Ð² ÑиÑтему, и другим пользователÑм отправлÑÑŽÑ‚ÑÑ Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ."</string> - <!-- XACT: Onboarding (datashare) page title --> - <string name="onboarding_notifications_accessibility_title">"Страница адаптации 5 из 5. Получение предупреждений и определение риÑка"</string> - <!-- XHED: onboarding(datashare) - about positive tests --> - <string name="onboarding_notifications_headline">"Получение предупреждений и определение риÑка"</string> - <!-- XHED: onboarding(datashare) - two/three line headline under an illustration --> - <string name="onboarding_notifications_subtitle">"Приложение может автоматичеÑки уведомлÑть о Вашем ÑтатуÑе риÑка и предупреждать о новых инфицированных людÑÑ… Ñреди Ваших контактов. Разрешите приложению уведомлÑть ВаÑ."</string> - <!-- YTXT: onboarding(datashare) - explain test --> - <string name="onboarding_notifications_body">"Тогда Ð’Ñ‹ Ñможете ÑамоизолироватьÑÑ Ð´Ð»Ñ Ð·Ð°Ñ‰Ð¸Ñ‚Ñ‹ окружающих и узнать, где Ñдать теÑÑ‚."</string> - <!-- XACT: onboarding(notifications) - illustraction description, header image --> - <string name="onboarding_notifications_illustration_description">"Женщина получает уведомление от Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Corona-Warn-App."</string> - - <!-- #################################### - Onboarding sixteen include - ###################################### --> - - <!-- XACT: onboarding(sixteen) title --> - <string name="sixteen_title_text">"ВозраÑтной ценз: 16 лет и Ñтарше"</string> - - <!-- XACT: onboarding(sixteen) title --> - <string name="sixteen_description_text">"Данное приложение предназначено Ð´Ð»Ñ Ð»ÑŽÐ´ÐµÐ¹, проживающих в Германии и доÑтигших возраÑта 16 лет и более."</string> - - - <!-- #################################### - Settings - ###################################### --> - - <!-- XHED: settings - settings overview page title --> - <string name="settings_title">"ÐаÑтройки"</string> - <!-- XTXT: settings - on, like a label next to a setting --> - <string name="settings_on">"Вкл."</string> - <!-- XTXT: settings - off, like a label next to a setting --> - <string name="settings_off">"Выкл."</string> - <!-- XHED: settings(tracing) - page title --> - <string name="settings_tracing_title">"Определение риÑка"</string> - <!-- XHED: settings(tracing) - headline bellow illustration --> - <string name="settings_tracing_headline">"Вот как работает определение риÑка"</string> - <!-- XTXT: settings(tracing) - explain text in settings overview under headline --> - <string name="settings_tracing_body_description">"Разрешите генерацию и предоÑтавление Ñлучайных идентификаторов COVID-19."</string> - <!-- XTXT: settings(tracing) - shows status under header in home, active --> - <string name="settings_tracing_body_active">"Определение риÑка активно"</string> - <!-- XTXT: settings(tracing) - shows status under header in home, inactive --> - <string name="settings_tracing_body_inactive">"Определение риÑка оÑтановлено"</string> - <!-- XTXT: settings(tracing) - shows status under header in home, inactive location --> - <string name="settings_tracing_body_inactive_location">"СервиÑÑ‹ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¼ÐµÑÑ‚Ð¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ñ‹"</string> - <!-- YTXT: settings(tracing) - explains tracings --> - <string name="settings_tracing_body_text">"Чтобы определить наличие риÑка Ð·Ð°Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡Ð¸Ñ‚Ðµ функцию Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€Ð¸Ñка. Ð”Ð»Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ риÑка Ваше уÑтройÑтво должно получать по Bluetooth зашифрованные Ñлучайные идентификаторы других пользователей и передавать Ваш Ñлучайный идентификатор на их уÑтройÑтва. Ðту функцию можно в любое Ð²Ñ€ÐµÐ¼Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒ."<xliff:g id="line_break"/>"\n"<xliff:g id="line_break"/>"\nЗашифрованные Ñлучайные идентификаторы передают другим людÑм только информацию о дате, продолжительноÑти и близоÑти (раÑÑчитанной по Ñиле Ñигнала) контакта. ПерÑональные данные, например имÑ, Ð°Ð´Ñ€ÐµÑ Ð¸Ð»Ð¸ меÑтоположение, никогда не региÑтрируютÑÑ. ПерÑÐ¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð°."</string> - <!-- XTXT: settings(tracing) - status next to switch under title --> - <string name="settings_tracing_status_active">"Ðктивно"</string> - <!-- XTXT: settings(tracing) - status next to switch under title --> - <string name="settings_tracing_status_inactive">"ОÑтановлено"</string> - <!-- XTXT: settings(tracing) - status next to switch under title --> - <string name="settings_tracing_status_restricted">"Ограничено"</string> - <!-- XTXT: settings(tracing) - shows status under header in home, no internet --> - <string name="settings_tracing_body_connection_inactive">"Ðет ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ Ð˜Ð½Ñ‚ÐµÑ€Ð½ÐµÑ‚Ð¾Ð¼"</string> - <!-- XTXT: settings(tracing) - shows status under header in home, no bluetooth --> - <string name="settings_tracing_body_bluetooth_inactive">"Bluetooth выключен"</string> - <!--XHED : settings(tracing) - headline on card about the current status and what to do --> - <string name="settings_tracing_status_bluetooth_headline">"Включить Bluetooth"</string> - <!-- XTXT: settings(tracing) - explains user what to do on card if bluetooth is disabled --> - <string name="settings_tracing_status_bluetooth_body">"Bluetooth нужно включить Ð´Ð»Ñ Ñ€ÐµÐ³Ð¸Ñтрации контактов функцией Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€Ð¸Ñка. Включите Bluetooth в наÑтройках вашего уÑтройÑтва."</string> - <!-- XBUT: settings(tracing) - go to operating system settings button on card --> - <string name="settings_tracing_status_bluetooth_button">"Открыть наÑтройки уÑтройÑтва"</string> - <!--XHED : settings(tracing) - headline on card about the current status and what to do --> - <string name="settings_tracing_status_location_headline">"Разрешить доÑтуп к меÑтоположению"</string> - <!-- XTXT: settings(tracing) - explains user what to do on card if location is disabled --> - <string name="settings_tracing_status_location_body">"ДоÑтуп к Вашему меÑтоположению невозможен. Чтобы иÑпользовать Bluetooth, Google и/или Android требуетÑÑ Ð´Ð¾Ñтуп к меÑтоположению Вашего уÑтройÑтва."</string> - <!-- XBUT: settings(tracing) - go to operating system settings button on card - location --> - <string name="settings_tracing_status_location_button">"Открыть наÑтройки уÑтройÑтва"</string> - <!--XHED : settings(tracing) - headline on card about the current status and what to do --> - <string name="settings_tracing_status_connection_headline">"УÑтановить Ñоединение Ñ Ð˜Ð½Ñ‚ÐµÑ€Ð½ÐµÑ‚Ð¾Ð¼"</string> - <!-- XTXT: settings(tracing) - explains user what to do on card if connection is disabled --> - <string name="settings_tracing_status_connection_body">"Ð”Ð»Ñ Ñ€Ð°Ñчета контактов функцией Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€Ð¸Ñка требуетÑÑ Ñоединение Ñ Ð˜Ð½Ñ‚ÐµÑ€Ð½ÐµÑ‚Ð¾Ð¼. Включите Wi-Fi или мобильные данные в наÑтройках уÑтройÑтва."</string> - <!-- XBUT: settings(tracing) - go to operating system settings button on card --> - <string name="settings_tracing_status_connection_button">"Открыть наÑтройки уÑтройÑтва"</string> - <!-- XTXT: settings(tracing) - explains the circle progress indicator to the right with the current value --> - <plurals name="settings_tracing_status_body_active"> - <item quantity="one">"Определение риÑка активно в течение %1$s днÑ.\nÐ”Ð»Ñ Ð½Ð°Ð´ÐµÐ¶Ð½Ð¾Ð¹ проверки контактов Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€Ð¸Ñка должна быть активна вÑегда."</item> - <item quantity="other">"Определение риÑка активно в течение %1$s днÑ.\nÐ”Ð»Ñ Ð½Ð°Ð´ÐµÐ¶Ð½Ð¾Ð¹ проверки контактов Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€Ð¸Ñка должна быть активна вÑегда."</item> - <item quantity="zero">"Определение риÑка активно в течение %1$s дней.\nÐ”Ð»Ñ Ð½Ð°Ð´ÐµÐ¶Ð½Ð¾Ð¹ проверки контактов Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€Ð¸Ñка должна быть активна вÑегда."</item> - <item quantity="two">"Определение риÑка активно в течение %1$s дней.\nÐ”Ð»Ñ Ð½Ð°Ð´ÐµÐ¶Ð½Ð¾Ð¹ проверки контактов Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€Ð¸Ñка должна быть активна вÑегда."</item> - <item quantity="few">"Определение риÑка активно в течение %1$s дней.\nÐ”Ð»Ñ Ð½Ð°Ð´ÐµÐ¶Ð½Ð¾Ð¹ проверки контактов Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€Ð¸Ñка должна быть активна вÑегда."</item> - <item quantity="many">"Определение риÑка активно в течение %1$s дней.\nÐ”Ð»Ñ Ð½Ð°Ð´ÐµÐ¶Ð½Ð¾Ð¹ проверки контактов Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€Ð¸Ñка должна быть активна вÑегда."</item> - </plurals> - <!-- XACT: settings(tracing) - describes illustration --> - <string name="settings_tracing_illustration_description_active">"Три человека активировали определение риÑка на Ñвоих уÑтройÑтвах, то еÑть их контакты друг Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¼ будут региÑтрироватьÑÑ."</string> - <!-- XACT: settings(tracing) - describes illustration --> - <string name="settings_tracing_illustration_description_inactive">"Человек деактивировал определение риÑка на Ñвоем Ñмартфоне, то еÑть его контакты Ñ Ð´Ð²ÑƒÐ¼Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ людьми не будут региÑтрироватьÑÑ."</string> - <!-- XACT: settings(tracing) - describes illustration --> - <string name="settings_tracing_bluetooth_illustration_description_inactive">"Человек выключил Bluetooth на Ñвоем Ñмартфоне, то еÑть его контакты Ñ Ð´Ð²ÑƒÐ¼Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ людьми не будут региÑтрироватьÑÑ."</string> - <!-- XACT: settings(tracing) - describes illustration --> - <string name="settings_tracing_location_illustration_description_inactive"/> - <!-- XACT: settings(tracing) - describes illustration --> - <string name="settings_tracing_connection_illustration_description_inactive">"Человек отключил Ñоединение Ñ Ð˜Ð½Ñ‚ÐµÑ€Ð½ÐµÑ‚Ð¾Ð¼Â Ð½Ð° Ñвоем Ñмартфоне, то еÑть его контакты Ñ Ð´Ð²ÑƒÐ¼Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ людьми не будут региÑтрироватьÑÑ."</string> - - <!-- XHED: settings(notification) - notification page title --> - <string name="settings_notifications_title">"УведомлениÑ"</string> - <!-- XHED: settings(notification) - multiline headline below illustration, active --> - <string name="settings_notifications_headline_active">"Ðктивировать ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾ Вашем ÑтатуÑе риÑка Ð·Ð°Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ COVID-19?"</string> - <!-- XHED: settings(notification) - multiline headline below illustration, inactive --> - <string name="settings_notifications_headline_inactive">"Ð£Ð²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð´ÐµÐ°ÐºÑ‚Ð¸Ð²Ð¸Ñ€Ð¾Ð²Ð°Ð½Ñ‹"</string> - <!-- XTXT: settings(notification) - text in row on settings overview --> - <string name="settings_notifications_body_description">"Разрешить автоматичеÑкие ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾ ÑтатуÑе риÑка Ð·Ð°Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ COVID-19"</string> - <!-- YTXT: settings(notification) - description text when it notifications are enabled --> - <string name="settings_notifications_body_active">"Укажите уведомлениÑ, которые Ð’Ñ‹ хотите получать."</string> - <!-- XTXT: settings(notification) - explains what the user has to do to activate settings --> - <string name="settings_notifications_body_inactive">"Чтобы активировать уведомлениÑ, нужно разрешить ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ‚ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Corona-Warn-App в наÑтройках Вашего уÑтройÑтва."</string> - <!-- XHED: settings(notification) - card headline --> - <string name="settings_notifications_headline_card">"Ðктивировать уведомлениÑ"</string> - <!-- XHED: settings - notification headline on settings overview --> - <string name="settings_notifications_subtitle_notification">"УведомлениÑ"</string> - <!-- XTXT: settings(notification) - next to a switch --> - <string name="settings_notifications_subtitle_update_risk">"Ваш риÑк Ð·Ð°Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»ÑÑ"</string> - <!-- XTXT: settings(notification) - next to a switch --> - <string name="settings_notifications_subtitle_update_test">"Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð’Ð°ÑˆÐµÐ³Ð¾ теÑта на COVID-19"</string> - <!-- XBUT: settings(notification) - go to operating settings --> - <string name="settings_notifications_button_open_settings">"Открыть наÑтройки уÑтройÑтва"</string> - <!-- XACT: main (overview) - illustraction description, explanation image, displays notificatin status, active --> - <string name="settings_notifications_illustration_description_active">"Женщина получает уведомление от Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Corona-Warn-App."</string> - <!-- XACT: main (overview) - illustraction description, explanation image, displays notificatin status, inactive --> - <string name="settings_notifications_illustration_description_inactive">"Женщина деактивировала ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ‚ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Corona-Warn-App."</string> - <!-- XBUT: settings - go to reset application --> - <string name="settings_reset_title">"СброÑить приложение"</string> - <!-- XTXT: settings(reset) - explains the user what do expect when he navigates to reset --> - <string name="settings_reset_body_description">"Удалить вÑе Ваши данные в приложении."</string> - <!-- XHED: settings(reset) - multiline headline below illustration --> - <string name="settings_reset_headline">"ДейÑтвительно ÑброÑить приложение?"</string> - <!-- XTXT: settings(reset) - explains the consequences --> - <string name="settings_reset_body">"Ð’Ñ‹ больше не будете получать ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾ контактах и не Ñможете предупреждать других пользователей."</string> - <!-- XHED: settings(reset) - on card, explains user to go to the operating system settings --> - <string name="settings_reset_headline_keys">"Удалить журнал "<xliff:g id="line_break">"\n"</xliff:g>"контактов"</string> - <!-- XTXT: settings(reset) - on card --> - <string name="settings_reset_body_keys">"Журнал контактов удалÑетÑÑ Ð¾Ñ‚Ð´ÐµÐ»ÑŒÐ½Ð¾ в наÑтройках Вашего уÑтройÑтва."</string> - <!-- XBUT: settings(reset) - triggers reset --> - <string name="settings_reset_button_positive">"СброÑить приложение"</string> - <!-- XBUT: settings(reset) - cancel reset and navigates the suer back to the settings --> - <string name="settings_reset_button_negative">"Отменить"</string> - <!-- XACT: main (overview) - illustraction description, explanation image --> - <string name="settings_reset_illustration_description">"Рука держит Ñмартфон, на котором отображаетÑÑ Ð·Ð½Ð°Ñ‡Ð¾Ðº выполнÑемого ÑброÑа приложениÑ."</string> - <!-- XHED: settings(reset) - dialog headline --> - <string name="settings_reset_dialog_headline">"СброÑить приложение"</string> - <!-- XTXT: settings(reset) - dialog content --> - <string name="settings_reset_dialog_body">"Ð’Ñ‹ больше не будете получать ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾ контактах и не Ñможете предупреждать других пользователей. Ðто дейÑтвие Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ð¸Ñ‚ÑŒ."</string> - <!-- XBUT: settings(reset) - dialog cancel --> - <string name="settings_reset_dialog_button_cancel">"Отменить"</string> - <!-- XBUT: settings(reset) - dialog confirm --> - <string name="settings_reset_dialog_button_confirm">"СброÑ"</string> - <!-- XHED: settings(background priority) - notification page title --> - <string name="settings_background_priority_title">"ÐŸÑ€Ð¸Ð¾Ñ€Ð¸Ñ‚ÐµÑ‚Ð½Ð°Ñ Ñ„Ð¾Ð½Ð¾Ð²Ð°Ñ Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾Ñть"</string> - <!-- XTXT: settings(background priority) - text in row on settings overview --> - <string name="settings_background_priority_body_description">"Разрешить автоматичеÑкие Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑтатуÑа риÑка"</string> - <!-- XHED: settings(background priority) - multiline headline below illustration --> - <string name="settings_background_priority_headline">"Обновить ÑÑ‚Ð°Ñ‚ÑƒÑ Ñ€Ð¸Ñка автоматичеÑки"</string> - <!-- YTXT: settings(background priority) - description text --> - <string name="settings_background_priority_body">"При активации приоритетной фоновой активноÑти приложение Ñможет определÑть Ваш ÑÑ‚Ð°Ñ‚ÑƒÑ Ñ€Ð¸Ñка в любое времÑ. Такой режим отключает оптимизацию раÑхода аккумулÑтора только Ð´Ð»Ñ Corona-Warn-App."</string> - <!-- XACT: settings(background priority) - illustraction description --> - <string name="settings_background_priority_illustration_description"/> - <!-- XTXT: settings(background priority) - explains user what to do on card if background priority is enabled --> - <string name="settings_background_priority_card_body">"Чтобы отключить приоритетную фоновую активноÑть, деактивируйте ее в нÑтройках уÑтройÑтва."</string> - <!-- XBUT: settings(background priority) - go to operating system settings button on card --> - <string name="settings_background_priority_card_button">"Открыть наÑтройки уÑтройÑтва"</string> - <!-- XHED : settings(background priority) - headline on card about the current status and what to do --> - <string name="settings_background_priority_card_headline">"Отключить приоритетную фоновую активноÑть"</string> - - <!-- #################################### - App Information - ###################################### --> - - <!-- XHED: Page title for menu information page --> - <string name="information_title">"Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ приложении"</string> - <!-- XTXT: Version information text --> - <string name="information_version">"ВерÑиÑ: %1s"</string> - <!-- XHED: Page title for about information page, also menu item / button text --> - <string name="information_about_title">"О приложении"</string> - <!-- XHED: Subtitle for about information page --> - <string name="information_about_headline">"Давайте победим ÐºÐ¾Ñ€Ð¾Ð½Ð°Ð²Ð¸Ñ€ÑƒÑ Ð²Ð¼ÐµÑте"</string> - <!-- YTXT: Body text for about information page --> - <string name="information_about_body_emphasized">"ИнÑтитут Роберта Коха (РКИ) — Ñто центральный федеральный инÑтитут Германии в облаÑти здравоохранениÑ. По поручению федерального правительÑтва РКИ выпуÑтил приложение Corona-Warn-App. Приложение задумано как цифровое дополнение к уже принÑтым Ñанитарным мерам: Ñоциальной диÑтанции, гигиене и ношению защитных маÑок."</string> - <!-- YTXT: Body text for about information page --> - <string name="information_about_body">"Каждый пользователь Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÐµÑ‚ отÑлеживать и оÑтанавливать передачу инфекции. Приложение региÑтрирует контакты Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ людьми локально на вашем уÑтройÑтве. Ð’Ñ‹ получаете ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾ контактах Ñ Ð»ÑŽÐ´ÑŒÐ¼Ð¸, которые впоÑледÑтвии получили положительный результат теÑта на COVID-19. Ваши перÑональные данные и конфиденциальноÑть надежно защищены."</string> - <!-- XACT: describes illustration --> - <string name="information_about_illustration_description">"Группа людей иÑпользует Ñвои Ñмартфоны в городе."</string> - <!-- XHED: Page title for privacy information page, also menu item / button text --> - <string name="information_privacy_title">"КонфиденциальноÑть данных"</string> - <!-- XACT: describes illustration --> - <string name="information_privacy_illustration_description">"Ðа Ñмартфоне одной женщины уÑтановлено приложение Corona-Warn-App. Значок замка на фоне щита указывает на шифрование данных."</string> - <!-- XTXT: Path to the full blown privacy html, to translate it exchange "_de" to "_en" and provide the corresponding html file --> - <string name="information_privacy_html_path">"privacy_ru.html"</string> - <!-- XHED: Page title for terms of use information page, also menu item / button text --> - <string name="information_terms_title">"УÑÐ»Ð¾Ð²Ð¸Ñ Ð¸ÑпользованиÑ"</string> - <!-- XHED: Page headline for terms of use information page --> - <string name="information_terms_headline">"Содержимое"</string> - <!-- XACT: describes illustration --> - <string name="information_terms_illustration_description">"Рука держит Ñмартфон Ñ Ð´Ð»Ð¸Ð½Ð½Ñ‹Ð¼ текÑтом на Ñкране. Ð Ñдом Ñ Ñ‚ÐµÐºÑтом отображаетÑÑ Ð³Ð°Ð»Ð¾Ñ‡ÐºÐ°, ÑÐ¸Ð¼Ð²Ð¾Ð»Ð¸Ð·Ð¸Ñ€ÑƒÑŽÑ‰Ð°Ñ Ð¿Ñ€Ð¸Ð½ÑÑ‚Ð¸Ñ ÑƒÑловий иÑпользованиÑ."</string> - <!-- XTXT: Path to the full blown terms html, to translate it exchange "_de" to "_en" and provide the corresponding html file --> - <string name="information_terms_html_path">"terms_ru.html"</string> - <!-- XHED: Page title for technical contact and hotline information page, also menu item / button text --> - <string name="information_contact_title">"ГорÑÑ‡Ð°Ñ Ð»Ð¸Ð½Ð¸Ñ Ð¿Ð¾ техничеÑким вопроÑам"</string> - <!-- XHED: Subtitle for technical contact and hotline information page --> - <string name="information_contact_headline">"Чем мы можем Вам помочь?"</string> - <!-- YTXT: Body text for technical contact and hotline information page --> - <string name="information_contact_body">"По техничеÑким вопроÑам о приложении Corona-Warn-App обращайтеÑÑŒ на нашу горÑчую линию."</string> - <!-- XHED: Subtitle for technical contact and hotline information page --> - <string name="information_contact_subtitle_phone">"ГорÑÑ‡Ð°Ñ Ð»Ð¸Ð½Ð¸Ñ Ð¿Ð¾ техничеÑким вопроÑам:"</string> - <!-- XLNK: Button / hyperlink to phone call for technical contact and hotline information page --> - <string name="information_contact_button_phone">"+49 800 7540001"</string> - <!-- XBUT: CAUTION - ONLY UPDATE THE NUMBER IF NEEDED, ONLY NUMBERS AND NO SPECIAL CHARACTERS EXCEPT "+" and "space" ALLOWED IN THIS FIELD; --> - <string name="information_contact_phone_call_number">"+49 800 7540001"</string> - <!-- XTXT: Body text for technical contact and hotline information page --> - <string name="information_contact_body_phone">"Ðаша Ñлужба поддержки вÑегда готова помочь."</string> - <!-- YTXT: Body text for technical contact and hotline information page --> - <string name="information_contact_body_open">"Языки: немецкий, английÑкий, турецкий\nЧаÑÑ‹ работы:"<xliff:g id="line_break">"\n"</xliff:g>"пн-Ñб, 7:00-22:00"<xliff:g id="line_break">"\n(кроме гоÑударÑтвенных праздников)"</xliff:g><xliff:g id="line_break">"\nÐ’Ñе звонки беÑплатны."</xliff:g></string> - <!-- YTXT: Body text for technical contact and hotline information page --> - <string name="information_contact_body_other">"По вÑем медицинÑким вопроÑам обращайтеÑÑŒ к вашему врачу общей практики или в Ñкорую помощь по телефону: 116 117."</string> - <!-- XACT: describes illustration --> - <string name="information_contact_illustration_description">"Человек Ñовершает телефонный звонок Ñ Ð¸Ñпользованием гарнитуры."</string> - <!-- XLNK: Menu item / hyper link / button text for navigation to FAQ website --> - <string name="information_help_title">"ЧаÑто задаваемые вопроÑÑ‹"</string> - <!-- XACT: accessibility hint --> - <string name="information_help_title_accessibility">"ЧаÑто задаваемые вопроÑÑ‹. Ð’Ñ‹ будете переадреÑованы на внешний веб-Ñайт."</string> - <!-- XHED: Page title for technical information page, also menu item / button text --> - <string name="information_technical_title">"Правовые уведомлениÑ"</string> - <!-- XACT: describes illustration --> - <string name="information_technical_illustration_description">"Рука держит Ñмартфон Ñ Ð´Ð»Ð¸Ð½Ð½Ñ‹Ð¼ текÑтом на Ñкране. Ð Ñдом Ñ Ñ‚ÐµÐºÑтом отображаетÑÑ Ð·Ð½Ð°Ñ‡Ð¾Ðº веÑов, предÑтавлÑющий правовые уведомлениÑ."</string> - <!-- XTXT: Path to the full blown legal html, to translate it exchange "_de" to "_en" and provide the corresponding html file --> - <string name="information_technical_html_path">"technical_ru.html"</string> - <!-- XHED: Page title for legal information page, also menu item / button text --> - <string name="information_legal_title">"ÐŸÑ€Ð°Ð²Ð¾Ð²Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ"</string> - <!-- XHED: Headline for legal information page, publisher section --> - <string name="information_legal_headline_publisher">"Опубликовано"</string> - <!-- YTXT: subtitle for legal information page, publisher section --> - <string name="information_legal_subtitle_publisher">"(ответÑтвенноÑть ÑоглаÑно § 5 п. 1 TMG, § 55 п. 1 RStV, DS-GVO, BDSG)"</string> - <!-- YTXT: body for legal information page, publisher section --> - <string name="information_legal_body_publisher">"ИнÑтитут Роберта Коха"<xliff:g id="line_break">"\n"</xliff:g>"Nordufer 20"<xliff:g id="line_break">"\n"</xliff:g>"13353 Berlin (ГерманиÑ)"<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"в лице его президента"</string> - <!-- XHED: Headline for legal information page, contact section --> - <string name="information_legal_headline_contact">"Контакты"</string> - <!-- YTXT: subtitle for legal information page, contact section --> - <string name="information_legal_subtitle_contact">"E-mail: CoronaWarnApp@rki.de"</string> - <!-- YTXT: subtitle for legal information page, open contact form : Only has to be translated in URL for English FOrm--> - <string name="information_legal_subtitle_contact_label">"Форма контакта"</string> - <!-- YTXT: subtitle for legal information page url : Only has to be translated in URL for English FOrm--> - <string name="information_legal_subtitle_contact_url">"https://www.rki.de/SharedDocs/Kontaktformulare/en/Kontaktformulare/weitere/Corona-Warn-App/Corona-Warn-App_Integrator.html"</string> - <!-- NOTR: subtitle for legal information page, open contact form for languages other than English and German --> - <string name="information_legal_subtitle_contact_form_non_en_de">"Contact Form in "<a href="https://www.rki.de/SharedDocs/Kontaktformulare/en/Kontaktformulare/weitere/Corona-Warn-App/Corona-Warn-App_Integrator.html">"English"</a>" or "<a href="https://www.rki.de/SharedDocs/Kontaktformulare/weitere/Corona-Warn-App/Corona-Warn-App_Integrator.html">"German"</a></string> - <!-- XHED: Headline for legal information page, tax section --> - <string name="information_legal_headline_taxid">"ИÐÐ"</string> - <!-- YTXT: subtitle for legal information page, tax section --> - <string name="information_legal_subtitle_taxid">"DE 165 893 430"</string> - <!-- XACT: describes illustration --> - <string name="information_legal_illustration_description">"Рука держит Ñмартфон Ñ Ð´Ð»Ð¸Ð½Ð½Ñ‹Ð¼ текÑтом на Ñкране. Ð Ñдом Ñ Ñ‚ÐµÐºÑтом отображаетÑÑ Ð·Ð½Ð°Ñ‡Ð¾Ðº параграфа, предÑтавлÑющий правовую информацию."</string> - - - <!-- #################################### - Submission - ###################################### --> - - <!-- XHED: Dialog title for generic web request error --> - <string name="submission_error_dialog_web_generic_error_title">"Ошибка"</string> - <!-- XMSG: Dialog body for generic web request network error with status code --> - <string name="submission_error_dialog_web_generic_network_error_body">"Ðе удалоÑÑŒ уÑтановить Ñоединение (%1$d). Повторите попытку."</string> - <!-- XMSG: Dialog body for generic web request error without status code --> - <string name="submission_error_dialog_web_generic_error_body">"Ðе удалоÑÑŒ уÑтановить Ñоединение. Повторите попытку."</string> - <!-- XBUT: Positive button for generic web request error --> - <string name="submission_error_dialog_web_generic_error_button_positive">"Ðазад"</string> - - <!-- XHED: Dialog title for already paired test error --> - <string name="submission_error_dialog_web_test_paired_title">"ÐедейÑтвительный QR-код."</string> - <!-- XMSG: Dialog body for already paired test error --> - <string name="submission_error_dialog_web_test_paired_body">"QR-код недейÑтвительный или уже зарегиÑтрирован на другом Ñмартфоне. Повторите попытку. Ð’Ñ‹ получите результат теÑта из центра теÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ выполнившей теÑÑ‚ лаборатории вне завиÑимоÑти от дейÑтвительноÑти QR-кода. ЕÑли у Ð²Ð°Ñ Ð´Ð¸Ð°Ð³Ð½Ð¾Ñтирован COVID-19, вы получите уведомление от ÑоответÑтвующего органа здравоохранениÑ."</string> - <!-- XBUT: Positive button for already paired test error --> - <string name="submission_error_dialog_web_test_paired_button_positive">"Ðазад"</string> - - <!-- XHED: Dialog title for could not create submission tan --> - <string name="submission_error_dialog_web_paring_invalid_title">"Ошибка"</string> - <!-- XMSG: Dialog body for could not create submission tan --> - <string name="submission_error_dialog_web_paring_invalid_body">"Ðе удалоÑÑŒ Ñгенерировать TAN Ð´Ð»Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸. ОбратитеÑÑŒ на горÑчую линию по техничеÑким вопроÑам по пути: Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ приложении -> ГорÑÑ‡Ð°Ñ Ð»Ð¸Ð½Ð¸Ñ Ð¿Ð¾ техничеÑким вопроÑам."</string> - <!-- XBUT: Positive button for could not create submission tan --> - <string name="submission_error_dialog_web_paring_invalid_button_positive">"Ðазад"</string> - - <!-- XHED: Dialog title for submission tan invalid --> - <string name="submission_error_dialog_web_tan_invalid_title">"Ошибка"</string> - <!-- XMSG: Dialog body for submission tan invalid --> - <string name="submission_error_dialog_web_tan_invalid_body">"Сгенерированный TAN не дейÑтвителен Ð´Ð»Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸. ОбратитеÑÑŒ на горÑчую линию по техничеÑким вопроÑам, выбрав: Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ приложении → ГорÑÑ‡Ð°Ñ Ð»Ð¸Ð½Ð¸Ñ Ð¿Ð¾ техничеÑким вопроÑам."</string> - <!-- XBUT: Positive button for submission tan invalid --> - <string name="submission_error_dialog_web_tan_invalid_button_positive">"Ðазад"</string> - - <!-- XHED: Dialog title for submission tan redeemed --> - <string name="submission_error_dialog_web_tan_redeemed_title">"Ð’ теÑте еÑть ошибки"</string> - <!-- XMSG: Dialog body for submission tan redeemed --> - <string name="submission_error_dialog_web_tan_redeemed_body">"Обнаружена проблема при анализе вашего теÑта. Ваш QR-код уже проÑрочен."</string> - <!-- XBUT: Positive button for submission tan redeemed --> - <string name="submission_error_dialog_web_tan_redeemed_button_positive">"ОК"</string> - - <!-- Permission Rationale Dialog --> - <!-- XHED: Dialog headline QR Scan permission rationale --> - <string name="submission_qr_code_scan_permission_rationale_dialog_headline">"ТребуетÑÑ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ðµ на доÑтуп к камере"</string> - <!-- YTXT: Dialog Body text for QR Scan permission rationale --> - <string name="submission_qr_code_scan_permission_rationale_dialog_body">"Разрешить приложению иÑпользовать камеру Ð´Ð»Ñ ÑÐºÐ°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ QR-кода."</string> - <!-- XBUT: Dialog(QR Scan permission rationale) - positive button (right) --> - <string name="submission_qr_code_scan_permission_rationale_dialog_button_positive">"Разрешить"</string> - <!-- XBUT: Dialog(QR Scan permission rationale) - negative button (left) --> - <string name="submission_qr_code_scan_permission_rationale_dialog_button_negative">"Ðе разрешать"</string> - - <!-- Permission Denied Dialog --> - <!-- XHED: Dialog headline QR Scan permission denied --> - <string name="submission_qr_code_scan_permission_denied_dialog_headline">"ТребуетÑÑ Ð´Ð¾Ñтуп к камере"</string> - <!-- YTXT: Dialog Body text for QR Scan permission denied --> - <string name="submission_qr_code_scan_permission_denied_dialog_body">"Откройте ÑиÑтемные наÑтройки и разрешите приложению иÑпользовать камеру Ð´Ð»Ñ ÑÐºÐ°Ð½Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ QR-кода."</string> - <!-- XBUT: Dialog(QR Scan permission denied) - button --> - <string name="submission_qr_code_scan_permission_denied_dialog_button">"ОК"</string> - - <!-- QR Code Scan Invalid Dialog --> - <!-- XHED: Dialog headline for invalid QR code --> - <string name="submission_qr_code_scan_invalid_dialog_headline">"ÐедейÑтвительный QR-код."</string> - <!-- YTXT: Dialog Body text for invalid QR code --> - <string name="submission_qr_code_scan_invalid_dialog_body">"QR-код недейÑтвительный или уже зарегиÑтрирован на другом Ñмартфоне. Повторите попытку. Ð’Ñ‹ получите результат теÑта из центра теÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ выполнившей теÑÑ‚ лаборатории вне завиÑимоÑти от дейÑтвительноÑти QR-кода. ЕÑли у Ð²Ð°Ñ Ð´Ð¸Ð°Ð³Ð½Ð¾Ñтирован COVID-19, ÑоответÑтвующий орган Ð·Ð´Ñ€Ð°Ð²Ð¾Ð¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ уведомление по безопаÑному каналу и ÑвÑжетÑÑ Ñ Ð²Ð°Ð¼Ð¸."</string> - <!-- XBUT: Dialog(Invalid QR code) - positive button (right) --> - <string name="submission_qr_code_scan_invalid_dialog_button_positive">"Повторите попытку."</string> - <!-- XBUT: Dialog(Invalid QR code) - negative button (left) --> - <string name="submission_qr_code_scan_invalid_dialog_button_negative">"Отменить"</string> - - <!-- QR Code Scan Screen --> - <string name="submission_qr_code_scan_title">"Ðаведите рамку на QR-код."</string> - <!-- YTXT: instruction text for QR code scanning --> - <string name="submission_qr_code_scan_body">"Ðаведите рамку на QR-код."</string> - - <!-- Submission Test Result --> - <!-- XHED: Page headline for test result --> - <string name="submission_test_result_headline">"Результат теÑта"</string> - <!-- XHED: Page subheadline for test result --> - <string name="submission_test_result_subtitle">"Как Ñто работает:"</string> - <!-- XHED: Page headline for results next steps --> - <string name="submission_test_result_steps_added_heading">"ТеÑÑ‚ уÑпешно добавлен."</string> - <!-- YTXT: Body text for for results next steps --> - <string name="submission_test_result_steps_added_body">"Ваш теÑÑ‚ Ñохранен в приложении Corona-Warn-App."</string> - <!-- XHED: Page headline for pending test result next steps --> - <string name="submission_test_result_pending_steps_waiting_heading">"Результат теÑта еще не доÑтупен"</string> - <!-- YTXT: Body text for next steps section of waiting test result page --> - <string name="submission_test_result_pending_steps_waiting_body">"Ваш результат теÑта еще не доÑтупен."</string> - <!-- XBUT: test result pending : refresh button --> - <string name="submission_test_result_pending_refresh_button">"Обновить"</string> - <!-- XBUT: test result pending : remove the test button --> - <string name="submission_test_result_pending_remove_test_button">"Удалить теÑÑ‚"</string> - <!-- XHED: Page headline for negative test result next steps --> - <string name="submission_test_result_negative_steps_negative_heading">"Ваш результат теÑта"</string> - <!-- YTXT: Body text for next steps section of test negative result --> - <string name="submission_test_result_negative_steps_negative_body">"Лабораторное иÑÑледование не показало Ð¸Ð½Ñ„Ð¸Ñ†Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ñ€Ð¾Ð½Ð°Ð²Ð¸Ñ€ÑƒÑом SARS-CoV-2.\n\nУдалите теÑÑ‚ из Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Corona-Warn-App, чтобы здеÑÑŒ можно было Ñохранить новый код теÑта."</string> - <!-- XBUT: negative test result : remove the test button --> - <string name="submission_test_result_negative_remove_test_button">"Удалить теÑÑ‚"</string> - <!-- XHED: Page headline for positive test result screen --> - <string name="submission_test_result_positive_steps_positive_heading">"Ваш результат теÑта"</string> - <!-- YTXT: Body text for next steps section of test positive result--> - <string name="submission_test_result_positive_steps_positive_body">"Ваш результат теÑта положительный."</string> - <!-- XHED: Page headline for other warnings screen --> - <string name="submission_test_result_positive_steps_warning_others_heading">"Предупреждение других людей"</string> - <!-- YTXT: Body text for for other warnings screen--> - <string name="submission_test_result_positive_steps_warning_others_body">"ПредоÑтавьте ваши Ñлучайные идентификаторы за поÑледние 14 дней, чтобы защитить других людей и оÑтановить передачу инфекции."</string> - <!-- XBUT: positive test result : continue button --> - <string name="submission_test_result_positive_continue_button">"Дальше"</string> - <!-- XHED: Page headline for invalid test result screen --> - <string name="submission_test_result_invalid_steps_invalid_heading">"Ваш результат теÑта"</string> - <!-- YTXT: Body text for next steps section of invalid test result--> - <string name="submission_test_result_invalid_steps_invalid_body">"При анализе вашего теÑта возникла проблема. ОбратитеÑÑŒ в центр теÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ выполнÑвшую теÑÑ‚ лабораторию за дальнейшими рекомендациÑми.\n\nУдалите теÑÑ‚ из Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Corona-Warn-App, чтобы здеÑÑŒ можно было Ñохранить новый код теÑта."</string> - <!-- XBUT: invalid test result : remove the test button --> - <string name="submission_test_result_invalid_remove_test_button">"Удалить теÑÑ‚"</string> - <!-- XHED: Dialog title for tracing required dailog --> - <string name="submission_test_result_dialog_tracing_required_title">"ТребуетÑÑ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ðµ риÑка"</string> - <!-- YTXT: Dialog text for tracing required dialog--> - <string name="submission_test_result_dialog_tracing_required_message">"Ðктивируйте определение риÑка, чтобы предупредить других людей"</string> - <!-- XBUT: tracing required : OK button --> - <string name="submission_test_result_dialog_tracing_required_button">"ОК"</string> - <!-- XHED: Dialog title for test removal --> - <string name="submission_test_result_dialog_remove_test_title">"ТеÑÑ‚ можно отÑканировать только один раз."</string> - <!-- YTXT: Dialog text for test removal --> - <string name="submission_test_result_dialog_remove_test_message">"ЕÑли вы удалите теÑÑ‚, то не Ñможете вызвать результат теÑтированиÑ. Ð’Ñ‹ получите результат теÑта из центра теÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ выполнившей теÑÑ‚ лаборатории вне завиÑимоÑти от дейÑтвительноÑти QR-кода. ЕÑли у Ð²Ð°Ñ Ð´Ð¸Ð°Ð³Ð½Ð¾Ñтирован COVID-19, ÑоответÑтвующий орган Ð·Ð´Ñ€Ð°Ð²Ð¾Ð¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ уведомление по безопаÑному каналу и ÑвÑжетÑÑ Ñ Ð²Ð°Ð¼Ð¸."</string> - <!-- XBUT: Positive button for test removal --> - <string name="submission_test_result_dialog_remove_test_button_positive">"Удалить"</string> - <!-- XBUT: Negative button for test removal --> - <string name="submission_test_result_dialog_remove_test_button_negative">"Отменить"</string> - <!-- XHED: Title for test result card positive --> - <string name="submission_test_result_card_positive_title">"Положительный теÑÑ‚ на SARS-CoV-2"</string> - <!-- YTXT: Body text for test result card positive --> - <string name="submission_test_result_card_positive_body">"Ваш теÑÑ‚ на Ð²Ð¸Ñ€ÑƒÑ SARS-CoV-2 положительный."</string> - - <!-- Submission Tan --> - <!-- XHED: Page title for TAN submission pge --> - <string name="submission_tan_title">"Ввод TAN"</string> - <!-- YTXT: Body text for the tan submission page --> - <string name="submission_tan_body">"Введите полученный 10-значный TAN."</string> - <!-- XBUT: Submit TAN button --> - <string name="submission_tan_button_text">"Дальше"</string> - <!-- XACT: Submission Tan page title --> - <string name="submission_tan_accessibility_title">"Ввод TAN"</string> - <!-- YTXT: Error text for the tan submission page --> - <string name="submission_tan_error">"Ðеверный TAN, проверьте введенные данные."</string> - <!-- YTXT: Error text for the tan submission page (wrong characters) --> - <string name="submission_tan_character_error">"Ðеверно, проверьте введенные данные."</string> - - <!-- Submission Intro --> - <!-- XHED: Page title for menu at the start of the submission process --> - <string name="submission_intro_title">"Ð’Ñ‹ Ñдали теÑÑ‚?"</string> - <!-- XHED: Page headline for menu the at start of the submission process --> - <string name="submission_intro_headline">"Вот как работает приложение Corona-Warn-App"</string> - <!-- YTXT: submission introduction text --> - <string name="submission_intro_text">"Чтобы приложение работало, нам нужна поддержка людей Ñ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼ теÑтом на COVID-19.\n\nПоÑкольку передаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ зашифрованные Ñлучайные идентификаторы, анонимноÑть будет Ñохранена. Ð’Ñ‹ можете выполнить Ñледующие дейÑтвиÑ:"</string> - <!-- XBUT: Submission introduction next button--> - <string name="submission_intro_button_next">"Дальше"</string> - <!-- XACT: Submission intro - illustration description, explanation image --> - <string name="submission_intro_illustration_description">"Ð—Ð°ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ положительном теÑте передаетÑÑ Ð² ÑиÑтему, и другим пользователÑм отправлÑÑŽÑ‚ÑÑ Ð¿Ñ€ÐµÐ´ÑƒÐ¿Ñ€ÐµÐ¶Ð´ÐµÐ½Ð¸Ñ."</string> - <!-- YTXT: submission introduction bullet points --> - <string-array name="submission_intro_bullet_points"> - <item>"ЕÑли у Ð’Ð°Ñ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ теÑÑ‚ на COVID-19, Ð’Ñ‹ можете уведомить других людей."</item> - <item>"ЕÑли Ð’Ñ‹ получили TAN Ð´Ð»Ñ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ теÑта, можете зарегиÑтрировать Ñвой теÑÑ‚ по нему."</item> - <item>"ЕÑли у Ð’Ð°Ñ Ð½ÐµÑ‚ TAN, Ð’Ñ‹ можете запроÑить его по телефону."</item> - </string-array> - <!-- XACT: Submission Intro page title --> - <string name="submission_intro_accessibility_title">"Ð’Ñ‹ Ñдали теÑÑ‚? Вот как работает приложение Corona-Warn-App"</string> - - <!-- Dispatcher --> - <!-- XHED: Page headline for dispatcher menu --> - <string name="submission_dispatcher_headline">"Выбор"</string> - <!-- XHED: Page subheadline for dispatcher menu --> - <string name="submission_dispatcher_subheadline">"ÐšÐ°ÐºÐ°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ ÐµÑть у ВаÑ?"</string> - <!-- YTXT: Dispatcher text for QR code option --> - <string name="submission_dispatcher_card_qr">"Документ Ñ QR-кодом"</string> - <!-- YTXT: Body text for QR code dispatcher option --> - <string name="submission_dispatcher_qr_card_text">"ОтÑканируйте QR-код из документа, чтобы зарегиÑтрировать Ваш теÑÑ‚."</string> - <!-- XHED: Dialog headline for dispatcher QR prviacy dialog --> - <string name="submission_dispatcher_qr_privacy_dialog_headline">"ЗаÑвление о ÑоглаÑии"</string> - <!-- YTXT: Dialog Body text for dispatcher QR privacy dialog --> - <string name="submission_dispatcher_qr_privacy_dialog_body">"Ðажав на «Принимаю», Ð’Ñ‹ ÑоглашаетеÑÑŒ Ñ Ñ‚ÐµÐ¼, что Приложение вправе узнавать о ÑтатуÑе Вашего теÑта на ÐºÐ¾Ñ€Ð¾Ð½Ð°Ð²Ð¸Ñ€ÑƒÑ Ð¸ выÑвечивать его в Приложении. Ðта Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ Ð´Ð¾Ñтупна, еÑли Ð’Ñ‹ получили QR-код и дали Ñвое ÑоглаÑие на передачу результатов теÑта в Ñерверную ÑиÑтему ПриложениÑ. ПоÑле того как теÑÑ‚Ð¸Ñ€ÑƒÑŽÑ‰Ð°Ñ Ð»Ð°Ð±Ð¾Ñ€Ð°Ñ‚Ð¾Ñ€Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑтит результаты теÑта на Ñервере, Ð’Ñ‹ Ñможете увидеть их в Приложении. ЕÑли Ð’Ñ‹ активировали уведомлениÑ, Ð’Ð°Ñ Ð¿Ñ€Ð¾Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð¸Ñ€ÑƒÑŽÑ‚ о получении результатов теÑта и вне ПриложениÑ. Сам же результат теÑта, тем не менее, будет показан только в Приложении, в целÑÑ… обеÑÐ¿ÐµÑ‡ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð´ÐµÐ½Ñ†Ð¸Ð°Ð»ÑŒÐ½Ð¾Ñти. Ð’Ñ‹ можете в любое Ð²Ñ€ÐµÐ¼Ñ Ð¾Ñ‚Ð¾Ð·Ð²Ð°Ñ‚ÑŒ данное ÑоглаÑие, удалив в Приложении региÑтрирование теÑта. Отзыв ÑоглаÑÐ¸Ñ Ð½Ðµ затрагивает правомерноÑть обработки, оÑущеÑтвлÑвшейÑÑ Ð´Ð¾ него. Дальнейшую информацию Ñм. в пункте меню Â«Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ конфиденциальноÑти данных»."</string> - <!-- XBUT: submission(dispatcher QR Dialog) - positive button (right) --> - <string name="submission_dispatcher_qr_privacy_dialog_button_positive">"Принимаю"</string> - <!-- XBUT: submission(dispatcher QR Dialog) - negative button (left) --> - <string name="submission_dispatcher_qr_privacy_dialog_button_negative">"Ðе принимаю"</string> - <!-- YTXT: Dispatcher text for TAN code option --> - <string name="submission_dispatcher_card_tan_code">"TAN"</string> - <!-- YTXT: Body text for TAN code dispatcher option --> - <string name="submission_dispatcher_tan_code_card_text">"Чтобы зарегиÑтрировать Ваш теÑÑ‚, введите TAN вручную."</string> - <!-- YTXT: Dispatcher text for TELE-TAN option --> - <string name="submission_dispatcher_card_tan_tele">"ЗапроÑить TAN"</string> - <!-- YTXT: Body text for TELE_TAN dispatcher option --> - <string name="submission_dispatcher_tan_tele_card_text">"Позвоните нам, еÑли у Ð’Ð°Ñ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¹ теÑÑ‚ на COVID-19."</string> - <!-- XACT: Dispatcher Tan page title --> - <string name="submission_dispatcher_accessibility_title">"ÐšÐ°ÐºÐ°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ ÐµÑть у ВаÑ?"</string> - - <!-- Submission Positive Other Warning --> - <!-- XHED: Page title for the positive result additional warning page--> - <string name="submission_positive_other_warning_title">"Предупреждение других людей"</string> - <!-- XHED: Page headline for the positive result additional warning page--> - <string name="submission_positive_other_warning_headline">"Помогите вÑем нам!"</string> - <!-- YTXT: Body text for the positive result additional warning page--> - <string name="submission_positive_other_warning_body">"Далее Ð’Ñ‹ можете разрешить приложению Corona-Warn-App предоÑтавление ваших Ñлучайных идентификаторов за поÑледние 14 дней другим людÑм. Так Ð’Ñ‹ предупредите их и поможете оÑтановить передачу инфекции.\n\nПоÑкольку передаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ обезличенные Ñлучайные идентификаторы, Ваша анонимноÑть ÑохранÑетÑÑ."</string> - <!-- XHED: Title for the privacy card--> - <string name="submission_positive_other_warning_privacy_title">"КонфиденциальноÑть данных"</string> - <!-- YTXT: Body text for the privacy card--> - <string name="submission_positive_other_warning_privacy_body">"Ðажав на «Принимаю», Ð’Ñ‹ выражаете Ñвое ÑоглаÑие на передачу Приложением положительного результата Вашего теÑта вмеÑте Ñ Ð’Ð°ÑˆÐ¸Ð¼Ð¸ Ñлучайными кодами за поÑледние 14 дней в Ñерверную ÑиÑтему ПриложениÑ, чтобы другие пользователи ÐŸÑ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ Ð°ÐºÑ‚Ð¸Ð²Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð¾Ð¹ функцией Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€Ð¸Ñка были автоматичеÑки проинформированы о том, что они могли быть подвержены риÑку заражениÑ. Передаваемые Ñлучайные коды не Ñодержат никакой информации, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð±Ñ‹ раÑкрыла Вашу личноÑть.\n\nПередача Вашего результата теÑта через Приложение ÑвлÑетÑÑ Ð´Ð¾Ð±Ñ€Ð¾Ð²Ð¾Ð»ÑŒÐ½Ð¾Ð¹. ЕÑли Ð’Ñ‹ не передадите результат Ñвоего теÑта, никакого Ð½Ð°ÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð½Ðµ поÑледует. Ввиду того, что невозможно проÑледить и проконтролировать, пользуетеÑÑŒ ли Ð’Ñ‹ Приложением и как Ð’Ñ‹ Ñто делаете, никто, кроме ВаÑ, не будет знать, передали ли Ð’Ñ‹ информацию об инфицировании.\n\nÐ’Ñ‹ можете в любое Ð²Ñ€ÐµÐ¼Ñ Ð¾Ñ‚Ð¾Ð·Ð²Ð°Ñ‚ÑŒ Ñвое ÑоглаÑие, удалив Приложение. Отзыв ÑоглаÑÐ¸Ñ Ð½Ðµ затрагивает правомерноÑть обработки, оÑущеÑтвлÑвшейÑÑ Ð´Ð¾ момента отзыва. Дальнейшую информацию Ñм. в пункте меню Â«Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ конфиденциальноÑти данных»."</string> - <!-- XBUT: other warning continue button --> - <string name="submission_positive_other_warning_button">"Дальше"</string> - <!-- XACT: other warning - illustration description, explanation image --> - <string name="submission_positive_other_illustration_description">"УÑтройÑтво передает зашифрованную информацию о положительном теÑте в ÑиÑтему."</string> - - - <!-- Submission Done --> - <!-- XHED: Page title for completed submission page --> - <string name="submission_done_title">"СпаÑибо!"</string> - <!-- YTXT: Body text for completed submission page --> - <string name="submission_done_body">"Ваш вклад очень ценен. Благодарим за поддержку. Теперь другие люди получат предупреждение и Ñмогут принÑть необходимые меры."</string> - <!-- XHED: Page subtitle for completed submission page --> - <string name="submission_done_subtitle">"Внимание!"</string> - <!-- YTXT: text after submission: contagious --> - <string name="submission_done_contagious">"Ð’Ñ‹ заразны."</string> - <!-- YTXT: text after submission: isolate --> - <string name="submission_done_isolate">"ИзолируйтеÑÑŒ от других людей."</string> - <!-- XHED: Title for further info --> - <string name="submission_done_further_info_title">"Ð”Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ:"</string> - <!-- YTXT: submission done further info bullet points --> - <string-array name="submission_done_further_info_bullet_points"> - <item>"Карантин обычно длитÑÑ 14 дней. Ðаблюдайте за Ñимптомами и их развитием."</item> - <item>"Ваш меÑтный орган Ð·Ð´Ñ€Ð°Ð²Ð¾Ð¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð¿Ñ€Ð¾Ñит Ð’Ð°Ñ ÑоÑтавить ÑпиÑок людей, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ Ð’Ñ‹ контактировали. Вам нужно указать вÑех людей, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ у Ð’Ð°Ñ Ð±Ñ‹Ð»Ð¸ близкие контакты (личное общение на раÑÑтоÑнии менее 2 м) дольше 15 мин в поÑледние два Ð´Ð½Ñ Ð´Ð¾ поÑÐ²Ð»ÐµÐ½Ð¸Ñ Ñƒ Ð’Ð°Ñ Ñимптомов."</item> - <item>"ОÑобенно важно вÑпомнить людей, которые не будут уведомлены приложением, так как у них нет уÑтановленного Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ даже Ñмартфона."</item> - <item>"Даже еÑли у Ð’Ð°Ñ Ð±Ð¾Ð»ÑŒÑˆÐµ нет Ñимптомов и Ð’Ñ‹ чувÑтвуете ÑÐµÐ±Ñ Ñ…Ð¾Ñ€Ð¾ÑˆÐ¾, Ð’Ñ‹ еще можете быть заразны."</item> - </string-array> - <!-- XBUT: submission finished button --> - <string name="submission_done_button_done">"Готово"</string> - <!-- XACT: submission finished - illustration description, explanation image --> - <string name="submission_done_illustration_description">"Группа людей радуетÑÑ, потому что кто-то поделилÑÑ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ð¾Ð¼ теÑта."</string> - - <!-- Submission Contact --> - <!-- XHED: Page title for contact page in submission flow --> - <string name="submission_contact_title">"ЗапроÑить TAN"</string> - <!-- XHED: Page headline for contact page in submission flow --> - <string name="submission_contact_headline">"Как Ñто работает:"</string> - <!-- YTXT: Body text for contact page in submission flow--> - <string name="submission_contact_body">"Ð”Ð»Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñа TAN проÑим Ð’Ð°Ñ Ð¿Ð¾Ð´Ð³Ð¾Ñ‚Ð¾Ð²Ð¸Ñ‚ÑŒ результат теÑта (еÑли еÑть) и Ваш номер телефона.\n\nЧтобы обратитьÑÑ Ð½Ð° горÑчую линию по телефону, ÑлабоÑлышащие могут иÑпользовать уÑлуги Tess Relay (перевод Ñ Ð½ÐµÐ¼ÐµÑ†ÐºÐ¾Ð³Ð¾ пиÑьменного Ñзыка на Ñзык жеÑтов и обратно). ПО можно выгрузить Ñ Google Play."</string> - <!-- XBUT: submission contact call button --> - <string name="submission_contact_button_call">"Позвонить"</string> - <!-- XBUT: submission contact enter tan button --> - <string name="submission_contact_button_enter">"ВвеÑти TAN"</string> - <!-- YTXT: Body text for step 1 of contact page --> - <string name="submission_contact_step_1_body">"Позвоните на горÑчую линию и запроÑите TAN:"</string> - <!-- XLNK: Button / hyperlink to phone call for TAN contact page --> - <string name="submission_contact_number_display">"+49 800 7540002"</string> - <!-- XLNK: Technical number which is called when the user clicks on the display number --> - <string name="submission_contact_number_dial">"+49 800 7540002"</string> - <!-- YTXT: Body text for step 2 of contact page--> - <string name="submission_contact_step_2_body">"Чтобы зарегиÑтрировать теÑÑ‚, введите TAN в приложении."</string> - <!-- YTXT: Body text for operating hours in contact page--> - <string name="submission_contact_operating_hours_body">"Языки: \nнемецкий, английÑкий, турецкий\n\nЧаÑÑ‹ работы:\nпн-вÑ, круглоÑуточно\n\nÐ’Ñе звонки беÑплатны."</string> - - <!-- XACT: Submission contact page title --> - <string name="submission_contact_accessibility_title">"Позвонить на горÑчую линию и запроÑить TAN"</string> - <!-- XACT: Content Description for submission contact step 1, number has to sync with the display number --> - <string name="submission_contact_step_1_content">"Первый шаг - Ñто звонок на горÑчую линию Ð´Ð»Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñа TAN. Телефон горÑчей линии: +49 800 7540002. Она работает Ñ 8:00 до 22:00 Ñ Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»ÑŒÐ½Ð¸ÐºÐ° по пÑтницу и Ñ 10:00 до 22:00 в Ñубботу и воÑкреÑенье. Ð’Ñе звонки беÑплатны."</string> - <!-- XACT: Content Description for submission contact step 2 --> - <string name="submission_contact_step_2_content">"Второй шаг - региÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð’Ð°ÑˆÐµÐ³Ð¾ теÑта в приложении по полученному TAN."</string> - - <!-- Submission Status Card --> - <!-- XHED: Page title for the various submission status: fetching --> - <string name="submission_status_card_title_fetching">"Данные вызываютÑÑ..."</string> - <!-- XHED: Page title for the various submission status: unregistered --> - <string name="submission_status_card_title_unregistered">"Ð’Ñ‹ Ñдали теÑÑ‚?"</string> - <!-- XHED: Page title for the various submission status: pending --> - <string name="submission_status_card_title_pending">"Ваш результат еще не доÑтупен"</string> - <!-- XHED: Page title for the various submission status: available --> - <string name="submission_status_card_title_available">"Ваш результат доÑтупен"</string> - <!-- XHED: Page title for the various submission status: positive --> - <string name="submission_status_card_title_positive">"Положительный теÑÑ‚"</string> - <!-- XHED: Subtitle for the submission status card: invalid --> - <string name="submission_status_card_subtitle_invalid">"ÐедейÑтвительный теÑÑ‚"</string> - <!-- XHED: Subtitle for the submission status card: negative --> - <string name="submission_status_card_subtitle_negative">"Отрицательный теÑÑ‚"</string> - <!-- YTXT: Body text for submission status: fetching --> - <string name="submission_status_card_body_fetching">"Ваш результат обновлÑетÑÑ"</string> - <!-- YTXT: Body text for submission status: unregistered --> - <string name="submission_status_card_body_unregistered">"Уведомьте других людей, чтобы оÑтановить передачу инфекции."</string> - <!-- YTXT: Body text for submission status: pending --> - <string name="submission_status_card_body_pending">"Ðнализ вашего теÑта еще не завершен."</string> - <!-- YTXT: Body text for submission status: invalid --> - <string name="submission_status_card_body_invalid">"Ðе удалоÑÑŒ проанализировать ваш теÑÑ‚."</string> - <!-- YTXT: Body text for submission status: positive --> - <string name="submission_status_card_body_positive">"Ваш теÑÑ‚ на SARS-CoV-2 положительный."</string> - <!-- YTXT: Body text for submission status: negative --> - <string name="submission_status_card_body_negative">"Ваш теÑÑ‚ на SARS-CoV-2 отрицательный."</string> - <!-- XBUT: submission status card unregistered button --> - <string name="submission_status_card_button_unregistered">"Узнать больше и помочь"</string> - <!-- XBUT: submission status card show results button --> - <string name="submission_status_card_button_show_results">"ПроÑмотреть теÑÑ‚"</string> - <!-- XHED: submission status card positive result subtitle --> - <string name="submission_status_card_positive_result_subtitle">"Внимание!"</string> - <!-- YTXT: text for contagious card --> - <string name="submission_status_card_positive_result_contagious">"Ð’Ñ‹ заразны. ИзолируйтеÑÑŒ от других людей."</string> - <!-- YTXT: text for contact card --> - <string name="submission_status_card_positive_result_contact">"Ваш меÑтный орган Ð·Ð´Ñ€Ð°Ð²Ð¾Ð¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ ÑвÑжетÑÑ Ñ Ð’Ð°Ð¼Ð¸ в ближайшие дни по телефону или почте."</string> - <!-- YTXT: text for share result card--> - <string name="submission_status_card_positive_result_share">"ПоделитеÑÑŒ Вашими Ñлучайными идентификаторами, чтобы предупредить других людей."</string> - - <!-- Test Result Card --> - <string name="test_result_card_headline">"Ваш диагноз:"</string> - <!-- YTXT: virus name text --> - <string name="test_result_card_virus_name_text">"SARS-CoV-2"</string> - <!-- YTXT: registered at text --> - <string name="test_result_card_registered_at_text">"ЗарегиÑтрировано %s"</string> - <!-- YTXT: negative status text --> - <string name="test_result_card_status_negative">"Отрицательный"</string> - <!-- YTXT: positive status text --> - <string name="test_result_card_status_positive">"Положительный"</string> - <!-- YTXT: invalid status text --> - <string name="test_result_card_status_invalid">"Ðнализ невозможен"</string> - <!-- YTXT: pending status text --> - <string name="test_result_card_status_pending">"Ваш результат пока не доÑтупен"</string> - <!-- XHED: Title for further info of test result negative --> - <string name="test_result_card_negative_further_info_title">"Ð”Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ:"</string> - <!-- YTXT: Content for further info of test result negative --> - <string-array name="test_result_card_negative_further_info_bullet_points"> - <item>"Ð’Ñе еще плохо ÑÐµÐ±Ñ Ñ‡ÑƒÐ²Ñтвуете? ЕÑли Вам плохо и/или Ñимптомы ухудшилиÑÑŒ, обратитеÑÑŒ к Вашему врачу общей практики."</item> - <item>"ОÑтавайтеÑÑŒ дома до выздоровлениÑ. Заражение коронавируÑом (SARS-CoV-2) в оÑлабленном ÑоÑтоÑнии из-за другой инфекции может привеÑти к Ñерьезным оÑложнениÑм."</item> - <item>"Ðе ходите на работу, еÑли Ð’Ñ‹ плохо ÑÐµÐ±Ñ Ñ‡ÑƒÐ²Ñтвуете, чтобы не Ñтавить под угрозу здоровье других людей. ЕÑли Ñимптомы ухудшилиÑÑŒ, Ñдайте теÑÑ‚ на SARS-CoV-2."</item> - </string-array> - - <!-- #################################### - Button Tooltips for Accessibility - ###################################### --> - <!-- XACT: back button--> - <string name="button_back">"Ðа предыдущую Ñтраницу"</string> - <!-- XACT: proceed button--> - <string name="button_proceed">"Кнопка \"Продолжить\""</string> - <!-- XACT: share button--> - <string name="button_share">"ПоделитьÑÑ"</string> - <!-- XACT: menu button--> - <string name="button_menu">"Меню"</string> - <!-- XACT: Accessibility needs a suffix to strings, to reduce the amount of manual translations this string is appended to accessibility button strings, e.g. "Zurück Taste", "Taste" is the default used by android in german --> - <string name="suffix_button">"Кнопка"</string> - <!-- XACT: Accessibility needs a suffix to strings, to reduce the amount of manual translations this string is appended to accessibility content description strings for images, e.g. "Eine Gruppe von... Bild" --> - <string name="suffix_image">"Изображение"</string> - - <!-- #################################### - Business Error Messages - ###################################### --> - <!-- XTXT: error dialog - detailed text if device is offline --> - <string name="errors_no_network">"Ðет ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ Ð˜Ð½Ñ‚ÐµÑ€Ð½ÐµÑ‚Ð¾Ð¼."</string> - <!-- XTXT: error dialog - detailed text if device has not enough device space --> - <string name="errors_not_enough_device_storage">"ÐедоÑтаточно Ñвободного меÑта в памÑти."</string> - <!-- XTXT: error dialog - detailed text if there is error with Google API --> - <string name="errors_communication_with_api">"Ошибка ÑвÑзи Ñ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñом Google"</string> - <!-- XTXT: error dialog - detailed text if there is an error during external navigation / external action --> - <string name="errors_external_action">"Ðевозможно выполнить Ñто дейÑтвие. ОбратитеÑÑŒ на горÑчую линию."</string> - <!-- XTXT: error dialog - phone still needs Google Play Services or Google Mobile Services update --> - <string name="errors_google_update_needed">"Приложение Corona-Warn-App правильно уÑтановлено, но ÑÐµÑ€Ð²Ð¸Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾ контактах Ñ Ð»Ð¸Ñ†Ð°Ð¼Ð¸, инфицированными COVID-19 недоÑтупен в операционной ÑиÑтеме Вашего Ñмартфона. Ðто означает, что Ð’Ñ‹ не можете иÑпользовать Corona-Warn-App. Подробнее Ñм. на Ñтранице чаÑто задаваемых вопроÑов: https://www.coronawarn.app/en/faq/"</string> - <!-- XTXT: error dialog - either Google API Error (10) or reached request limit per day --> - <string name="errors_google_api_error">"Приложение Corona-Warn-App выполнÑетÑÑ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾, но мы не можем обновить Ваш текущий ÑÑ‚Ð°Ñ‚ÑƒÑ Ñ€Ð¸Ñка. Определение риÑка оÑтаетÑÑ Ð°ÐºÑ‚Ð¸Ð²Ð½Ñ‹Ð¼ и выполнÑетÑÑ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾. Подробнее Ñм. на Ñтранице чаÑто задаваемых вопроÑов: https://www.coronawarn.app/en/faq/"</string> - - <!-- #################################### - Generic Error Messages - ###################################### --> - <!-- XHED: error dialog - headline --> - <string name="errors_generic_headline">"Что-то пошло не так."</string> - <!-- XTXT: error dialog - short text for error reason --> - <string name="errors_generic_details_headline">"Причина"</string> - <!-- XBUT: error dialog - button close --> - <string name="errors_generic_button_positive">"ОК"</string> - <!-- XBUT: error dialog - button show details --> - <string name="errors_generic_button_negative">"СведениÑ"</string> - <!-- XTXT: error dialog - text when no error description is available --> - <string name="errors_generic_text_unknown_error_cause">"ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°."</string> - - <!-- #################################### - Just for Development - ###################################### --> - <!-- NOTR --> - <string name="lorem_ipsum">"Lorem Ipsum"</string> - <!-- NOTR --> - <string name="menu_test_api">"Test API"</string> - <!-- NOTR --> - <string name="menu_test_risk_level">"Test Risk Level"</string> - <!-- NOTR --> - <string name="menu_test_notification">"Test Notification"</string> - <!-- NOTR --> - <string name="test_api_button_api_launch">"Android API Test(Manual Test)"</string> - <!-- NOTR --> - <string name="test_api_button_start">"Start (Broadcast/Receive Bluetooth)"</string> - <!-- NOTR --> - <string name="test_api_button_get_exposure_keys">"Get Exposure keys (my keys history from api)"</string> - <!-- NOTR --> - <string name="test_api_button_share_my_keys">"Share my keys via Email"</string> - <!-- NOTR --> - <string name="test_api_button_enter_other_keys">"Submit Exposure Key"</string> - <!-- NOTR --> - <string name="test_api_button_show_qr_code">"Show QR Code"</string> - <!-- NOTR --> - <string name="test_api_button_submit_keys">"Submit keys to Server"</string> - <!-- NOTR --> - <string name="test_api_button_scan_qr_code">"Scan Exposure Key"</string> - <!-- NOTR --> - <string name="test_api_switch_last_three_hours_from_server">"Last 3 Hours Mode"</string> - <!-- NOTR --> - <string name="test_api_button_check_exposure">"Check Exposure Summary"</string> - <!-- NOTR --> - <string name="test_api_exposure_summary_headline">"Exposure summary"</string> - <!-- NOTR --> - <string name="test_api_body_daysSinceLastExposure">"Days since last exposure: %1$s"</string> - <!-- NOTR --> - <string name="test_api_body_attenuation">"Attenuation Durations in Minutes: %1$s"</string> - <!-- NOTR --> - <string name="test_api_body_summation_risk">"Summation Risk Score: %1$s"</string> - <!-- NOTR --> - <string name="test_api_body_matchedKeyCount">"Matched key count: %1$s"</string> - <!-- NOTR --> - <string name="test_api_body_maximumRiskScore">"Maximum risk score %1$s"</string> - <!-- NOTR --> - <string name="test_api_body_my_keys">"My keys (count: %1$d)"</string> - <!-- NOTR --> - <string name="test_api_body_other_keys">"Other key"</string> - <!-- NOTR --> - <string name="test_api_calculate_risk_level">"Calculate Risk Level"</string> - -</resources> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/values-tr/strings.xml b/Corona-Warn-App/src/main/res/values-tr/strings.xml index b855455b43f64983a044b91c19cc05415aa14192..bd2d1c01f20e46fb45137978b73cd393bb0ec25e 100644 --- a/Corona-Warn-App/src/main/res/values-tr/strings.xml +++ b/Corona-Warn-App/src/main/res/values-tr/strings.xml @@ -135,11 +135,13 @@ <!-- XTXT: risk card - no contact yet --> <string name="risk_card_body_contact">"Åžu ana dek hiçbir maruz kalma yok"</string> + <!-- XTXT: risk card - no exposures with low risk --> + <string name="risk_card_body_contact_low_risk">"Åžu ana dek hiçbir düşük riskli maruz kalma yok"</string> <!-- XTXT: risk card - number of contacts for one or more --> <plurals name="risk_card_body_contact_value"> <item quantity="one">"%1$s kez düşük riskli maruz kalma"</item> <item quantity="other">"%1$s kez düşük riskli maruz kalma"</item> - <item quantity="zero">"Åžu ana dek hiçbir maruz kalma yok"</item> + <item quantity="zero">"Åžu ana dek hiçbir düşük riskli maruz kalma yok"</item> <item quantity="two">"%1$s kez düşük riskli maruz kalma"</item> <item quantity="few">"%1$s kez düşük riskli maruz kalma"</item> <item quantity="many">"%1$s kez düşük riskli maruz kalma"</item> @@ -296,6 +298,12 @@ <!-- XHED: risk details - page title, in toolbar --> <string name="risk_details_title">"Risk Durumunuz"</string> + <!-- XHED: risk details - headline for additional info in case of encounter with low risk --> + <string name="risk_details_additional_info_title">"Düşük riskli maruz kalmalar"</string> + <!-- XHED: risk details - subtitle for additional info in case of encounter with low risk --> + <string name="risk_details_additional_info_subtitle">"Enfeksiyon riskiniz neden düşük?"</string> + <!-- XHED: risk details - text for additional info in case of encounter with low risk --> + <string name="risk_details_additional_info_text">"Daha sonra COVID-19 tanısı konmuÅŸ bir kiÅŸiyle karşılaÅŸtınız. Ancak maruz kalma günlüğü verilerine göre enfeksiyon riskiniz düşük. Kısa süreyle ya da uzak mesafeyle karşılaÅŸmanız durumunda risk düşük olur. EndiÅŸelenmeniz gerekmez ve eylem gerçekleÅŸtirmeniz özel bir ihtiyaç bulunmuyor. Mesafe ve hijyen konusunda belirlenen kurallara riayet etmenizi öneririz."</string> <!-- XHED: risk details - headline, how a user should act --> <string name="risk_details_headline_behavior">"Talimatlar"</string> <!-- XHED: risk details - multiline headline, bold, how to act correct --> @@ -338,6 +346,8 @@ <string name="risk_details_information_body_outdated_risk">"Maruz kalma günlüğünüz 24 saatten uzun süre için güncellenemedi."</string> <!-- YTXT: risk details - low risk explanation text --> <string name="risk_details_information_body_low_risk">"Daha sonra COVID-19 tanısı konan kiÅŸilere maruz kaldığınıza dair bir günlük kaydı oluÅŸturulmadığı veya bu kiÅŸilerle yalnızca kısa süreyle ve uzak mesafeden karşılaÅŸtığınız için enfeksiyon riskiniz düşüktür."</string> + <!-- YTXT: risk details - low risk explanation text with encounter with low risk --> + <string name="risk_details_information_body_low_risk_with_encounter">"Enfeksiyon riskiniz, maruz kalma günlüğünün verileri kullanılarak yerel olarak cihazınızda hesaplanır. Hesaplamada COVID-19 tanısı konan kiÅŸilere maruz kalma mesafesi ve süresinin yanında potansiyel enfeksiyon bulaÅŸtırma durumu da göz önünde bulundurulur. Enfeksiyon riskiniz bir baÅŸkası tarafından görüntülenemez ya da bir baÅŸkasına aktarılamaz."</string> <!-- YTXT: risk details - increased risk explanation text with variable for day(s) since last contact --> <plurals name="risk_details_information_body_increased_risk"> <item quantity="one">"En son %1$s gün önce, COVID-19 tanısı konan en az bir kiÅŸiyle daha uzun süreyle ve yakın mesafeden maruz kalma yaÅŸadığınız için enfeksiyon riskiniz daha yüksektir."</item> diff --git a/Corona-Warn-App/src/main/res/values/strings.xml b/Corona-Warn-App/src/main/res/values/strings.xml index f6fbadaa6c5b79695100afacc12ff056817846e6..bbd25903b5a0341f6c5f372d9c9ba0624881675d 100644 --- a/Corona-Warn-App/src/main/res/values/strings.xml +++ b/Corona-Warn-App/src/main/res/values/strings.xml @@ -138,12 +138,12 @@ <!-- XTXT: risk card - no contact yet --> <string name="risk_card_body_contact">"No exposure up to now"</string> <!-- XTXT: risk card - no exposures with low risk --> - <string name="risk_card_body_contact_low_risk" /> + <string name="risk_card_body_contact_low_risk">"No exposure with low risk so far"</string> <!-- XTXT: risk card - number of contacts for one or more --> <plurals name="risk_card_body_contact_value"> <item quantity="one">"%1$s exposure with low risk"</item> <item quantity="other">"%1$s exposures with low risk"</item> - <item quantity="zero">"No exposure up to now"</item> + <item quantity="zero">"No exposure with low risk so far"</item> <item quantity="two">"%1$s exposures with low risk"</item> <item quantity="few">"%1$s exposures with low risk"</item> <item quantity="many">"%1$s exposures with low risk"</item> @@ -301,11 +301,11 @@ <!-- XHED: risk details - page title, in toolbar --> <string name="risk_details_title">"Your Risk Status"</string> <!-- XHED: risk details - headline for additional info in case of encounter with low risk --> - <string name="risk_details_additional_info_title" /> + <string name="risk_details_additional_info_title">"Exposures with low risk"</string> <!-- XHED: risk details - subtitle for additional info in case of encounter with low risk --> - <string name="risk_details_additional_info_subtitle" /> + <string name="risk_details_additional_info_subtitle">"Why your risk of infection is low"</string> <!-- XHED: risk details - text for additional info in case of encounter with low risk --> - <string name="risk_details_additional_info_text" /> + <string name="risk_details_additional_info_text">"You encountered a person who was later diagnosed with COVID-19. Nevertheless, based on your exposure logging data, your risk of infection is low. The risk is low if your encounter was brief or occurred at a distance. You do not need to worry and there is no specific need for action. We recommend that you adhere to the prevailing rules regarding distancing and hygiene."</string> <!-- XHED: risk details - headline, how a user should act --> <string name="risk_details_headline_behavior">"Guidelines"</string> <!-- XHED: risk details - multiline headline, bold, how to act correct --> @@ -349,10 +349,10 @@ <!-- YTXT: risk details - low risk explanation text --> <string name="risk_details_information_body_low_risk">"You have a low risk of infection because no exposure to people later diagnosed with COVID-19 was logged, or because your encounters were only for a short time and at a greater distance."</string> <!-- YTXT: risk details - low risk explanation text with encounter with low risk --> - <string name="risk_details_information_body_low_risk_with_encounter" /> + <string name="risk_details_information_body_low_risk_with_encounter">"The risk of infection is calculated locally on your device, using exposure logging data. The calculation also takes into account distance and duration of any exposure to persons diagnosed with COVID-19, as well as their potential infectiousness. Your risk of infection cannot be seen by or passed on to anyone else."</string> <!-- YTXT: risk details - increased risk explanation text with variable for day(s) since last contact --> <plurals name="risk_details_information_body_increased_risk"> - <item quantity="one">"You have an increased risk of infection because you were last exposed %1$s day ago over a longer period of time and at close proximity to at least one person diagnosed with COVID-19."</item> + <item quantity="one">"You have an increased risk of infection because you were last exposed %1$s days ago over a longer period of time and at close proximity to at least one person diagnosed with COVID-19."</item> <item quantity="other">"You have an increased risk of infection because you were last exposed %1$s days ago over a longer period of time and at close proximity to at least one person diagnosed with COVID-19."</item> <item quantity="zero">"You have an increased risk of infection because you were last exposed %1$s days ago over a longer period of time and at close proximity to at least one person diagnosed with COVID-19."</item> <item quantity="two">"You have an increased risk of infection because you were last exposed %1$s days ago over a longer period of time and at close proximity to at least one person diagnosed with COVID-19."</item> @@ -429,7 +429,7 @@ <!-- XHED: onboarding(tracing) - headline for consent information --> <string name="onboarding_tracing_headline_consent">"Declaration of Consent"</string> <!-- YTXT: onboarding(tracing) - body for consent information --> - <string name="onboarding_tracing_body_consent">"To find out whether you have been in contact with an infected person and whether there is a risk that you yourself have been infected, you need to enable the App’s exposure logging feature. By tapping on the “Enable†button, you agree to the enabling of the App’s exposure logging feature and the associated data processing."<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"In order to use the App’s exposure logging feature, you will have to enable the COVID-19 Exposure Logging functionality provided by Google on your smartphone and grant the Corona-Warn-App permission to use this."<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"When exposure logging is enabled, your smartphone continuously generates and transmits random IDs via Bluetooth, which other Android or Apple smartphones in your vicinity can receive if exposure logging is also enabled on them. Your smartphone, in turn, receives the random IDs of the other smartphones. Your own random IDs and those received from other smartphones are recorded in the exposure log and stored there for 14 days."<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"To identify your risk of infection, the App loads a list – several times a day or on request – of the random IDs of all users who have told the App that they have been infected with the coronavirus. This list is then compared with the random IDs stored in the exposure log. If the App detects that you may have been in contact with an infected user, it will inform you of this and tell you that there is a risk that you are also infected. In this case, the App is also given access to other data stored in your smartphone’s exposure log (date, duration and Bluetooth signal strength of the contact)."<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"The Bluetooth signal strength is used to derive the physical distance (the stronger the signal, the smaller the distance). The App then analyses this information in order to assess your likelihood of having been infected with the coronavirus and to give you recommendations for what to do next. This analysis is only performed locally on your smartphone. Apart from you, nobody (not even the RKI) will know whether you have been in contact with an infected person and what risk has been identified for you."<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"To withdraw your consent to the exposure logging feature, you can disable the feature using the toggle switch in the App or delete the App. If you decide to use the exposure logging feature again, you can toggle the feature back on or reinstall the App. If you disable the exposure logging feature, the App will no longer check whether you have been in contact with an infected user. If you also wish to stop your device sending and receiving random IDs, you will need to disable COVID-19 Exposure Logging in your smartphone settings. Please note that your own random IDs and those received from other smartphones which are stored in the exposure log will not be deleted in the App. You can only permanently delete the data stored in the exposure log in your smartphone settings."<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"The App’s privacy notice (including an explanation of the data processing carried out for the exposure logging feature) can be found in the menu under “Data Privacy Informationâ€."</string> + <string name="onboarding_tracing_body_consent">"To find out whether you have been in contact with an infected person and whether there is a risk that you yourself have been infected, you need to enable the App’s exposure logging feature. By tapping the “Enable†button, you agree to the enabling of the App’s exposure logging feature and the associated data processing."<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"In order to use the App’s exposure logging feature, you will have to enable the COVID-19 Exposure Logging functionality provided by Google on your smartphone and grant the Corona-Warn-App permission to use this."<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"When exposure logging is enabled, your smartphone continuously generates and transmits random IDs via Bluetooth, which other Android or Apple smartphones in your vicinity can receive if exposure logging is also enabled on them. Your smartphone, in turn, receives the random IDs of the other smartphones. Your own random IDs and those received from other smartphones are recorded in the exposure log and stored there for 14 days."<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"To identify your risk of infection, the App loads a list – several times a day or on request – of the random IDs of all users who have told the App that they have been infected with the coronavirus. This list is then compared with the random IDs stored in the exposure log. If the App detects that you may have been in contact with an infected user, it will inform you of this and tell you that there is a risk that you are also infected. In this case, the App is also given access to other data stored in your smartphone’s exposure log (date, duration and Bluetooth signal strength of the contact)."<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"The Bluetooth signal strength is used to derive the physical distance (the stronger the signal, the smaller the distance). The App then analyzes this information in order to assess your likelihood of having been infected with the coronavirus and to give you recommendations for what to do next. This analysis is only performed locally on your smartphone. Apart from you, nobody (not even the RKI) will know whether you have been in contact with an infected person and what risk has been identified for you."<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"To withdraw your consent to the exposure logging feature, you can disable the feature using the toggle switch in the App or delete the App. If you decide to use the exposure logging feature again, you can toggle the feature back on or reinstall the App. If you disable the exposure logging feature, the App will no longer check whether you have been in contact with an infected user. If you also wish to stop your device sending and receiving random IDs, you will need to disable COVID-19 Exposure Logging in your smartphone settings. Please note that your own random IDs and those received from other smartphones which are stored in the exposure log will not be deleted in the App. You can only permanently delete the data stored in the exposure log in your smartphone settings."<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"The App’s privacy notice (including an explanation of the data processing carried out for the exposure logging feature) can be found in the menu under “Data Privacy Informationâ€."</string> <!-- XBUT: onboarding(tracing) - button enable tracing --> <string name="onboarding_tracing_button_next">"Activate Exposure Logging"</string> <!-- XTXT: onboarding(tracing) - dialog about tracing permission declined --> @@ -492,14 +492,15 @@ <string name="onboarding_notifications_illustration_description">"A woman receives a notification from her Corona-Warn-App."</string> <!-- #################################### - Onboarding sixteen include - ###################################### --> + Onboarding sixteen include + ###################################### --> <!-- XACT: onboarding(sixteen) title --> - <string name="sixteen_title_text">""</string> + <string name="sixteen_title_text">"Age Limit: 16 and Up"</string> <!-- XACT: onboarding(sixteen) title --> - <string name="sixteen_description_text">""</string> + <string name="sixteen_description_text">"This app is intended for people who reside in Germany and who are at least 16 years of age."</string> + <!-- #################################### Settings @@ -630,9 +631,9 @@ <!-- XTXT: settings(background priority) - text in row on settings overview --> <string name="settings_background_priority_body_description">"Allow automatic risk status updates"</string> <!-- XHED: settings(background priority) - multiline headline below illustration --> - <string name="settings_background_priority_headline">"Run Corona-Warn-App in Background"</string> + <string name="settings_background_priority_headline">"Update Risk Status Automatically"</string> <!-- YTXT: settings(background priority) - description text --> - <string name="settings_background_priority_body">"Corona-Warn-App runs in the background permanently if you activate prioritized background activity. This enables the app to determine your risk status any time."</string> + <string name="settings_background_priority_body">"If you activate prioritized background activity, the App can determine your risk status at any time. This disables battery life optimization for the Corona-Warn-App only."</string> <!-- XACT: settings(background priority) - illustraction description --> <string name="settings_background_priority_illustration_description" /> <!-- XTXT: settings(background priority) - explains user what to do on card if background priority is enabled --> @@ -716,10 +717,10 @@ <string name="information_legal_headline_contact">"Contact"</string> <!-- YTXT: subtitle for legal information page, contact section --> <string name="information_legal_subtitle_contact">"E-mail: CoronaWarnApp@rki.de"</string> - <!-- YTXT: subtitle for legal information page --> - <string name="information_legal_subtitle_contact_label">"Kontaktformular"</string> - <!-- YTXT: subtitle for legal information page url --> - <string name="information_legal_subtitle_contact_url">"https://www.rki.de/SharedDocs/Kontaktformulare/weitere/Corona-Warn-App/Corona-Warn-App_Integrator.html"</string> + <!-- YTXT: subtitle for legal information page, open contact form : Only has to be translated in URL for English FOrm--> + <string name="information_legal_subtitle_contact_label">"Contact Form"</string> + <!-- YTXT: subtitle for legal information page url : Only has to be translated in URL for English FOrm--> + <string name="information_legal_subtitle_contact_url">"https://www.rki.de/SharedDocs/Kontaktformulare/en/Kontaktformulare/weitere/Corona-Warn-App/Corona-Warn-App_Integrator.html"</string> <!-- NOTR: subtitle for legal information page, open contact form for languages other than English and German --> <string name="information_legal_subtitle_contact_form_non_en_de">"Contact Form in "<a href="https://www.rki.de/SharedDocs/Kontaktformulare/en/Kontaktformulare/weitere/Corona-Warn-App/Corona-Warn-App_Integrator.html">"English"</a>" or "<a href="https://www.rki.de/SharedDocs/Kontaktformulare/weitere/Corona-Warn-App/Corona-Warn-App_Integrator.html">"German"</a></string> <!-- XHED: Headline for legal information page, tax section --> @@ -744,9 +745,9 @@ <string name="submission_error_dialog_web_generic_error_button_positive">"Back"</string> <!-- XHED: Dialog title for already paired test error --> - <string name="submission_error_dialog_web_test_paired_title">"Error"</string> + <string name="submission_error_dialog_web_test_paired_title">"QR code is invalid"</string> <!-- XMSG: Dialog body for already paired test error --> - <string name="submission_error_dialog_web_test_paired_body">"The QR code/TAN is invalid or has been used already. Please try again or contact the technical hotline via App Information -> Technical Hotline."</string> + <string name="submission_error_dialog_web_test_paired_body">"The QR code is invalid or has been registered on another smartphone already. You will receive your test result from the test center or laboratory regardless of the validity of the QR code. If you are diagnosed with COVID-19, you will be notified by the public health authority."</string> <!-- XBUT: Positive button for already paired test error --> <string name="submission_error_dialog_web_test_paired_button_positive">"Back"</string> @@ -793,7 +794,7 @@ <!-- XHED: Dialog headline for invalid QR code --> <string name="submission_qr_code_scan_invalid_dialog_headline">"QR code is invalid"</string> <!-- YTXT: Dialog Body text for invalid QR code --> - <string name="submission_qr_code_scan_invalid_dialog_body">"The QR code is invalid or has been registered on another smartphone already. You will receive your test result from the test center or laboratory regardless of the validity of the QR code. If you are diagnosed with COVID-19, you will be notified by the public health authority."</string> + <string name="submission_qr_code_scan_invalid_dialog_body">"The QR code is invalid or has been registered on another smartphone already. You will receive your test result from the test center or laboratory regardless of the validity of the QR code. If you are diagnosed with COVID-19, the public health authority will be notified through the legally prescribed channel and will contact you."</string> <!-- XBUT: Dialog(Invalid QR code) - positive button (right) --> <string name="submission_qr_code_scan_invalid_dialog_button_positive">"Please try again."</string> <!-- XBUT: Dialog(Invalid QR code) - negative button (left) --> @@ -852,7 +853,7 @@ <!-- XHED: Dialog title for test removal --> <string name="submission_test_result_dialog_remove_test_title">"The test can only be scanned once."</string> <!-- YTXT: Dialog text for test removal --> - <string name="submission_test_result_dialog_remove_test_message">"If you delete the test, you can no longer retrieve your test result. You receive your test result from the test center or laboratory, independently of the app. If you are diagnosed with COVID-19, you will be notified by the public health authority."</string> + <string name="submission_test_result_dialog_remove_test_message">"If you remove the test, you can no longer retrieve your test result. You will receive your test result from the test center or laboratory regardless of the validity of the QR code. If you are diagnosed with COVID-19, the public health authority will be notified through the legally prescribed channel and will contact you."</string> <!-- XBUT: Positive button for test removal --> <string name="submission_test_result_dialog_remove_test_button_positive">"Remove"</string> <!-- XBUT: Negative button for test removal --> diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/http/config/HTTPVariablesTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/http/config/HTTPVariablesTest.kt index f0f051a514c7734bf4ee3d63f037a399a961ad3e..c3ce75478f90366a98587ac61a2e25caf3fc5b0d 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/http/config/HTTPVariablesTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/http/config/HTTPVariablesTest.kt @@ -7,16 +7,16 @@ class HTTPVariablesTest { @Test fun getHTTPConnectionTimeout() { - Assert.assertEquals(HTTPVariables.getHTTPConnectionTimeout(), 10000L) + Assert.assertEquals(HTTPVariables.getHTTPConnectionTimeout(), 20000L) } @Test fun getHTTPReadTimeout() { - Assert.assertEquals(HTTPVariables.getHTTPReadTimeout(), 10000L) + Assert.assertEquals(HTTPVariables.getHTTPReadTimeout(), 20000L) } @Test fun getHTTPWriteTimeout() { - Assert.assertEquals(HTTPVariables.getHTTPWriteTimeout(), 10000L) + Assert.assertEquals(HTTPVariables.getHTTPWriteTimeout(), 20000L) } } diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/risk/TimeVariablesTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/risk/TimeVariablesTest.kt index 0f769204da01f76de88fa25affca553ee5221a6c..457522af97157a43abd232cdb09475e375cec5fd 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/risk/TimeVariablesTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/risk/TimeVariablesTest.kt @@ -14,7 +14,7 @@ class TimeVariablesTest { @Test fun getTransactionTimeout() { - Assert.assertEquals(TimeVariables.getTransactionTimeout(), 60000L) + Assert.assertEquals(TimeVariables.getTransactionTimeout(), 180000L) } @Test diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/ScanResultTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/ScanResultTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..2f7e78179372d2c27c2d55694274a65f0a44486b --- /dev/null +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/ScanResultTest.kt @@ -0,0 +1,54 @@ +package de.rki.coronawarnapp.service.submission + +import io.kotest.matchers.shouldBe +import io.mockk.MockKAnnotations +import io.mockk.every +import io.mockk.impl.annotations.MockK +import io.mockk.mockkObject +import org.junit.Before +import org.junit.Test + +class ScanResultTest { + private val guid = "123456-12345678-1234-4DA7-B166-B86D85475064" + + @MockK + private lateinit var scanResult: QRScanResult + + @Before + fun setUp() { + MockKAnnotations.init(this) + mockkObject(scanResult) + every { scanResult.isValid } returns false + } + + @Test + fun containsValidGUID() { + //valid test + scanResult = QRScanResult("https://localhost/?$guid") + scanResult.isValid shouldBe true + + // more invalid tests checks + scanResult = QRScanResult("http://localhost/?$guid") + scanResult.isValid shouldBe false + scanResult = QRScanResult("https://localhost/?") + scanResult.isValid shouldBe false + scanResult = QRScanResult("htps://wrongformat.com") + scanResult.isValid shouldBe false + scanResult = + QRScanResult("https://localhost/%20?3D6D08-3567F3F2-4DCF-43A3-8737-4CD1F87D6FDA") + scanResult.isValid shouldBe false + scanResult = + QRScanResult("https://some-host.com/?3D6D08-3567F3F2-4DCF-43A3-8737-4CD1F87D6FDA") + scanResult.isValid shouldBe false + scanResult = QRScanResult("https://localhost/?3567F3F2-4DCF-43A3-8737-4CD1F87D6FDA") + scanResult.isValid shouldBe false + scanResult = QRScanResult("https://localhost/?4CD1F87D6FDA") + scanResult.isValid shouldBe false + } + + @Test + fun extractGUID() { + QRScanResult("https://localhost/?$guid").guid shouldBe guid + } +} + diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/SubmissionConstantsTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/SubmissionConstantsTest.kt index 98efa5fec86386ae2035ec6699f6a62b743e42b0..b65d00b6985fe7c66fadaf97c33cb4ee90915817 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/SubmissionConstantsTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/SubmissionConstantsTest.kt @@ -11,13 +11,16 @@ class SubmissionConstantsTest { Assert.assertEquals(KeyType.GUID.name, "GUID") Assert.assertEquals(KeyType.TELETAN.name, "TELETAN") - Assert.assertEquals(SubmissionConstants.REGISTRATION_TOKEN_URL, "version/v1/registrationToken") + Assert.assertEquals( + SubmissionConstants.REGISTRATION_TOKEN_URL, + "version/v1/registrationToken" + ) Assert.assertEquals(SubmissionConstants.TEST_RESULT_URL, "version/v1/testresult") Assert.assertEquals(SubmissionConstants.TAN_REQUEST_URL, "version/v1/tan") - Assert.assertEquals(SubmissionConstants.MAX_QR_CODE_LENGTH, 150) - Assert.assertEquals(SubmissionConstants.MAX_GUID_LENGTH, 80) - Assert.assertEquals(SubmissionConstants.GUID_SEPARATOR, '?') + Assert.assertEquals(QRScanResult.MAX_QR_CODE_LENGTH, 150) + Assert.assertEquals(QRScanResult.MAX_GUID_LENGTH, 80) + Assert.assertEquals(QRScanResult.GUID_SEPARATOR, '?') Assert.assertEquals(SubmissionConstants.SERVER_ERROR_CODE_400, 400) diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/SubmissionServiceTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/SubmissionServiceTest.kt index fef63707083f8e07ed413d47824cb7032a7b8835..f1d222553e27a11b1f4dfbab4cbb86add4466170 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/SubmissionServiceTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/service/submission/SubmissionServiceTest.kt @@ -163,26 +163,4 @@ class SubmissionServiceTest { } } - @Test - fun containsValidGUID() { - // valid - assertThat( - SubmissionService.containsValidGUID("https://bs-sd.de/covid-19/?$guid"), - equalTo(true) - ) - - // invalid - assertThat( - SubmissionService.containsValidGUID("https://no-guid-here"), - equalTo(false) - ) - } - - @Test - fun extractGUID() { - assertThat( - SubmissionService.extractGUID("https://bs-sd.de/covid-19/?$guid"), - equalTo(guid) - ) - } } diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/transaction/RetrieveDiagnosisKeysTransactionTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/transaction/RetrieveDiagnosisKeysTransactionTest.kt index c13d4f6f2c310932bd30fa5649968346d0a643ab..3a7e3e3d4dd2a19ec1b7c52d58454998eba2cd90 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/transaction/RetrieveDiagnosisKeysTransactionTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/transaction/RetrieveDiagnosisKeysTransactionTest.kt @@ -4,6 +4,7 @@ import com.google.android.gms.nearby.exposurenotification.ExposureConfiguration import de.rki.coronawarnapp.nearby.InternalExposureNotificationClient import de.rki.coronawarnapp.service.applicationconfiguration.ApplicationConfigurationService import de.rki.coronawarnapp.storage.LocalData +import de.rki.coronawarnapp.util.GoogleAPIVersion import de.rki.coronawarnapp.util.di.AppInjector import de.rki.coronawarnapp.util.di.ApplicationComponent import io.kotest.matchers.shouldBe @@ -16,6 +17,7 @@ import io.mockk.mockk import io.mockk.mockkObject import io.mockk.unmockkAll import kotlinx.coroutines.runBlocking +import org.joda.time.Instant import org.joda.time.LocalDate import org.junit.After import org.junit.Before @@ -35,7 +37,8 @@ class RetrieveDiagnosisKeysTransactionTest { mockkObject(AppInjector) val appComponent = mockk<ApplicationComponent>().apply { every { transRetrieveKeysInjection } returns RetrieveDiagnosisInjectionHelper( - TransactionCoroutineScope() + TransactionCoroutineScope(), + GoogleAPIVersion() ) } every { AppInjector.component } returns appComponent @@ -53,11 +56,18 @@ class RetrieveDiagnosisKeysTransactionTest { any() ) } returns mockk() + coEvery { + InternalExposureNotificationClient.getVersion() + } returns 17000000L coEvery { ApplicationConfigurationService.asyncRetrieveExposureConfiguration() } returns mockk() every { LocalData.googleApiToken(any()) } just Runs every { LocalData.lastTimeDiagnosisKeysFromServerFetch() } returns Date() every { LocalData.lastTimeDiagnosisKeysFromServerFetch(any()) } just Runs every { LocalData.googleApiToken() } returns UUID.randomUUID().toString() + every { LocalData.googleAPIProvideDiagnosisKeysCallCount = any() } just Runs + every { LocalData.googleAPIProvideDiagnosisKeysCallCount } returns 0 + every { LocalData.nextTimeRateLimitingUnlocks = any() } just Runs + every { LocalData.nextTimeRateLimitingUnlocks } returns Instant.now() } @Test @@ -74,6 +84,7 @@ class RetrieveDiagnosisKeysTransactionTest { coVerifyOrder { RetrieveDiagnosisKeysTransaction["executeSetup"]() + RetrieveDiagnosisKeysTransaction["executeQuotaCalculation"]() RetrieveDiagnosisKeysTransaction["executeRetrieveRiskScoreParams"]() RetrieveDiagnosisKeysTransaction["executeFetchKeyFilesFromServer"]( requestedCountries @@ -99,6 +110,7 @@ class RetrieveDiagnosisKeysTransactionTest { coVerifyOrder { RetrieveDiagnosisKeysTransaction["executeSetup"]() + RetrieveDiagnosisKeysTransaction["executeQuotaCalculation"]() RetrieveDiagnosisKeysTransaction["executeRetrieveRiskScoreParams"]() RetrieveDiagnosisKeysTransaction["executeFetchKeyFilesFromServer"]( requestedCountries diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/riskdetails/DefaultRiskDetailPresenterTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/riskdetails/DefaultRiskDetailPresenterTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..445d0dce52b540e79e2032d31c46cb95515c6dee --- /dev/null +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/riskdetails/DefaultRiskDetailPresenterTest.kt @@ -0,0 +1,34 @@ +package de.rki.coronawarnapp.ui.riskdetails + +import de.rki.coronawarnapp.risk.RiskLevelConstants +import org.junit.Assert +import org.junit.Test + +class DefaultRiskDetailPresenterTest { + + @Test + fun test_isAdditionalInfoVisible() { + DefaultRiskDetailPresenter().apply { + Assert.assertFalse(isAdditionalInfoVisible(RiskLevelConstants.LOW_LEVEL_RISK, 0)) + Assert.assertTrue(isAdditionalInfoVisible(RiskLevelConstants.LOW_LEVEL_RISK, 1)) + Assert.assertFalse(isAdditionalInfoVisible(RiskLevelConstants.UNKNOWN_RISK_INITIAL, 0)) + Assert.assertFalse(isAdditionalInfoVisible(RiskLevelConstants.INCREASED_RISK, 0)) + Assert.assertFalse(isAdditionalInfoVisible(RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS, 0)) + Assert.assertFalse(isAdditionalInfoVisible(RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF, 0)) + Assert.assertFalse(isAdditionalInfoVisible(RiskLevelConstants.UNDETERMINED, 0)) + } + } + + @Test + fun test_isInformationBodyNoticeVisible() { + DefaultRiskDetailPresenter().apply { + Assert.assertTrue(isInformationBodyNoticeVisible(RiskLevelConstants.LOW_LEVEL_RISK, 0)) + Assert.assertFalse(isInformationBodyNoticeVisible(RiskLevelConstants.LOW_LEVEL_RISK, 1)) + Assert.assertTrue(isInformationBodyNoticeVisible(RiskLevelConstants.UNKNOWN_RISK_INITIAL, 0)) + Assert.assertTrue(isInformationBodyNoticeVisible(RiskLevelConstants.INCREASED_RISK, 0)) + Assert.assertTrue(isInformationBodyNoticeVisible(RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS, 0)) + Assert.assertTrue(isInformationBodyNoticeVisible(RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF, 0)) + Assert.assertTrue(isInformationBodyNoticeVisible(RiskLevelConstants.UNDETERMINED, 0)) + } + } +} diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/viewmodel/SubmissionViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/viewmodel/SubmissionViewModelTest.kt index a7fa73cbf1963e41a9b698b328dd807e4bda4d97..5a93e5ac213f30f811bfc8e57e5b8ece230c71ae 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/viewmodel/SubmissionViewModelTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/viewmodel/SubmissionViewModelTest.kt @@ -51,7 +51,7 @@ class SubmissionViewModelTest { // valid guid val guid = "123456-12345678-1234-4DA7-B166-B86D85475064" - viewModel.validateAndStoreTestGUID("https://bs-sd.de/covid-19/?$guid") + viewModel.validateAndStoreTestGUID("https://localhost/?$guid") viewModel.scanStatus.value?.getContent().let { Assert.assertEquals(ScanStatus.SUCCESS, it) } // invalid guid diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/GoogleAPIVersionTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/GoogleAPIVersionTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..7667cb60400afae27e682d58f46a28007c610242 --- /dev/null +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/GoogleAPIVersionTest.kt @@ -0,0 +1,76 @@ +package de.rki.coronawarnapp.util + +import com.google.android.gms.common.api.ApiException +import com.google.android.gms.common.api.CommonStatusCodes.API_NOT_CONNECTED +import com.google.android.gms.common.api.Status +import de.rki.coronawarnapp.nearby.InternalExposureNotificationClient +import io.kotest.matchers.shouldBe +import io.mockk.Called +import io.mockk.coEvery +import io.mockk.coVerify +import io.mockk.mockkObject +import io.mockk.unmockkObject +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.runBlockingTest +import org.junit.jupiter.api.AfterEach +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.assertThrows + +@ExperimentalCoroutinesApi +internal class GoogleAPIVersionTest { + + private lateinit var classUnderTest: GoogleAPIVersion + + @BeforeEach + fun setUp() { + mockkObject(InternalExposureNotificationClient) + classUnderTest = GoogleAPIVersion() + } + + @AfterEach + fun tearDown() { + unmockkObject(InternalExposureNotificationClient) + } + + @Test + fun `isAbove API v16 is true for v17`() { + coEvery { InternalExposureNotificationClient.getVersion() } returns 17000000L + + runBlockingTest { + classUnderTest.isAbove(GoogleAPIVersion.V16) shouldBe true + } + + } + + @Test + fun `isAbove API v16 is false for v15`() { + coEvery { InternalExposureNotificationClient.getVersion() } returns 15000000L + + runBlockingTest { + classUnderTest.isAbove(GoogleAPIVersion.V16) shouldBe false + } + } + + @Test + fun `isAbove API v16 throws IllegalArgument for invalid version`() { + assertThrows<IllegalArgumentException> { + runBlockingTest { + classUnderTest.isAbove(1L) + } + coVerify { + InternalExposureNotificationClient.getVersion() wasNot Called + } + } + } + + @Test + fun `isAbove API v16 false when APIException for too low version`() { + coEvery { InternalExposureNotificationClient.getVersion() } throws + ApiException(Status(API_NOT_CONNECTED)) + + runBlockingTest { + classUnderTest.isAbove(GoogleAPIVersion.V16) shouldBe false + } + } +} diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/GoogleQuotaCalculatorTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/GoogleQuotaCalculatorTest.kt new file mode 100644 index 0000000000000000000000000000000000000000..995ed675179badf7985d26df0104a4593f192d00 --- /dev/null +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/GoogleQuotaCalculatorTest.kt @@ -0,0 +1,293 @@ +package de.rki.coronawarnapp.util + +import de.rki.coronawarnapp.storage.LocalData +import io.mockk.every +import io.mockk.mockkObject +import io.mockk.unmockkObject +import org.joda.time.DateTime +import org.joda.time.DateTimeUtils +import org.joda.time.DateTimeZone +import org.joda.time.Duration +import org.joda.time.Instant +import org.joda.time.chrono.GJChronology +import org.junit.jupiter.api.AfterEach +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.assertThrows +import testhelpers.BaseTest +import timber.log.Timber +import java.util.concurrent.atomic.AtomicInteger +import java.util.concurrent.atomic.AtomicLong + +internal class GoogleQuotaCalculatorTest : BaseTest() { + + private val timeInTest = DateTimeUtils.currentTimeMillis() + + private lateinit var classUnderTest: GoogleQuotaCalculator + private val nextTimeRateLimitingUnlocksInTesting = AtomicLong() + private val googleAPIProvideDiagnosisKeysCallCount = AtomicInteger() + + private val defaultIncrementByAmountInTest = 14 + private val defaultQuotaLimitInTest = 20 + + @BeforeEach + fun setUpClassUnderTest() { + classUnderTest = GoogleQuotaCalculator( + incrementByAmount = defaultIncrementByAmountInTest, + quotaLimit = defaultQuotaLimitInTest, + quotaResetPeriod = Duration.standardHours(24), + quotaTimeZone = DateTimeZone.UTC, + quotaChronology = GJChronology.getInstanceUTC() + ) + DateTimeUtils.setCurrentMillisFixed(timeInTest) + + // Since LocalData is simple to mock + mockkObject(LocalData) + every { LocalData.nextTimeRateLimitingUnlocks = any() } answers { + nextTimeRateLimitingUnlocksInTesting.set((this.arg(0) as Instant).millis) + } + every { LocalData.nextTimeRateLimitingUnlocks } answers { + Instant.ofEpochMilli(nextTimeRateLimitingUnlocksInTesting.get()) + } + every { LocalData.googleAPIProvideDiagnosisKeysCallCount = any() } answers { + googleAPIProvideDiagnosisKeysCallCount.set(this.arg(0)) + } + every { LocalData.googleAPIProvideDiagnosisKeysCallCount } answers { + googleAPIProvideDiagnosisKeysCallCount.get() + } + } + + @Test + fun `isAboveQuota false if called initially`() { + assertEquals(classUnderTest.hasExceededQuota, false) + } + + @Test + fun `isAboveQuota true if called above quota limit when calling with amount bigger than one`() { + for (callNumber in 1..5) { + classUnderTest.calculateQuota() + val aboveQuota = classUnderTest.hasExceededQuota + Timber.v("call number $callNumber above quota: $aboveQuota") + if (callNumber > 1) { + assertEquals(true, aboveQuota) + } else { + assertEquals(false, aboveQuota) + } + } + } + + @Test + fun `getProgressTowardsQuota increases with calls to isAboveQuota but is stopped once increased above the quota`() { + var latestCallNumberWithoutLimiting = 1 + for (callNumber in 1..5) { + classUnderTest.calculateQuota() + val aboveQuota = classUnderTest.hasExceededQuota + Timber.v("call number $callNumber above quota: $aboveQuota") + val expectedIncrement = callNumber * defaultIncrementByAmountInTest + if (expectedIncrement >= defaultQuotaLimitInTest) { + assertEquals( + (latestCallNumberWithoutLimiting + 1) * defaultIncrementByAmountInTest, + classUnderTest.getProgressTowardsQuota() + ) + } else { + assertEquals( + callNumber * defaultIncrementByAmountInTest, + classUnderTest.getProgressTowardsQuota() + ) + latestCallNumberWithoutLimiting = callNumber + } + } + } + + @Test + fun `getProgressTowardsQuota is reset and the quota is not recalculated but isAboveQuota should still be false`() { + var latestCallNumberWithoutLimiting = 1 + for (callNumber in 1..5) { + classUnderTest.calculateQuota() + val aboveQuota = classUnderTest.hasExceededQuota + Timber.v("call number $callNumber above quota: $aboveQuota") + val expectedIncrement = callNumber * defaultIncrementByAmountInTest + if (expectedIncrement >= defaultQuotaLimitInTest) { + assertEquals( + (latestCallNumberWithoutLimiting + 1) * defaultIncrementByAmountInTest, + classUnderTest.getProgressTowardsQuota() + ) + } else { + assertEquals( + callNumber * defaultIncrementByAmountInTest, + classUnderTest.getProgressTowardsQuota() + ) + latestCallNumberWithoutLimiting = callNumber + } + } + + classUnderTest.resetProgressTowardsQuota(0) + assertEquals(false, classUnderTest.hasExceededQuota) + } + + @Test + fun `getProgressTowardsQuota is reset but the reset value is no multiple of incrementByAmount`() { + var latestCallNumberWithoutLimiting = 1 + for (callNumber in 1..5) { + classUnderTest.calculateQuota() + val aboveQuota = classUnderTest.hasExceededQuota + Timber.v("call number $callNumber above quota: $aboveQuota") + val expectedIncrement = callNumber * defaultIncrementByAmountInTest + if (expectedIncrement >= defaultQuotaLimitInTest) { + assertEquals( + (latestCallNumberWithoutLimiting + 1) * defaultIncrementByAmountInTest, + classUnderTest.getProgressTowardsQuota() + ) + } else { + assertEquals( + callNumber * defaultIncrementByAmountInTest, + classUnderTest.getProgressTowardsQuota() + ) + latestCallNumberWithoutLimiting = callNumber + } + } + + assertThrows<IllegalArgumentException> { + classUnderTest.resetProgressTowardsQuota(defaultIncrementByAmountInTest + 1) + } + } + + @Test + fun `getProgressTowardsQuota is reset and the quota is not recalculated and the progress should update`() { + var latestCallNumberWithoutLimiting = 1 + for (callNumber in 1..5) { + classUnderTest.calculateQuota() + val aboveQuota = classUnderTest.hasExceededQuota + Timber.v("call number $callNumber above quota: $aboveQuota") + val expectedIncrement = callNumber * defaultIncrementByAmountInTest + if (expectedIncrement >= defaultQuotaLimitInTest) { + assertEquals( + (latestCallNumberWithoutLimiting + 1) * defaultIncrementByAmountInTest, + classUnderTest.getProgressTowardsQuota() + ) + } else { + assertEquals( + callNumber * defaultIncrementByAmountInTest, + classUnderTest.getProgressTowardsQuota() + ) + latestCallNumberWithoutLimiting = callNumber + } + } + + val newProgressAfterReset = 14 + classUnderTest.resetProgressTowardsQuota(newProgressAfterReset) + assertEquals(false, classUnderTest.hasExceededQuota) + assertEquals(newProgressAfterReset, classUnderTest.getProgressTowardsQuota()) + } + + @Test + fun `getProgressTowardsQuota is reset and the quota is not recalculated and the progress throws an error because of too high newProgress`() { + var latestCallNumberWithoutLimiting = 1 + var progressBeforeReset: Int? = null + for (callNumber in 1..5) { + classUnderTest.calculateQuota() + val aboveQuota = classUnderTest.hasExceededQuota + Timber.v("call number $callNumber above quota: $aboveQuota") + val expectedIncrement = callNumber * defaultIncrementByAmountInTest + if (expectedIncrement >= defaultQuotaLimitInTest) { + progressBeforeReset = + (latestCallNumberWithoutLimiting + 1) * defaultIncrementByAmountInTest + assertEquals( + (latestCallNumberWithoutLimiting + 1) * defaultIncrementByAmountInTest, + classUnderTest.getProgressTowardsQuota() + ) + } else { + assertEquals( + callNumber * defaultIncrementByAmountInTest, + classUnderTest.getProgressTowardsQuota() + ) + latestCallNumberWithoutLimiting = callNumber + } + } + + val newProgressAfterReset = defaultQuotaLimitInTest + 1 + assertThrows<IllegalArgumentException> { + classUnderTest.resetProgressTowardsQuota(newProgressAfterReset) + } + assertEquals(true, classUnderTest.hasExceededQuota) + assertEquals( + (progressBeforeReset + ?: throw IllegalStateException("progressBeforeReset was not set during test")), + classUnderTest.getProgressTowardsQuota() + ) + } + + @Test + fun `isAboveQuota true if called above quota limit when calling with amount one`() { + classUnderTest = GoogleQuotaCalculator( + incrementByAmount = 1, + quotaLimit = 3, + quotaResetPeriod = Duration.standardHours(24), + quotaTimeZone = DateTimeZone.UTC, + quotaChronology = GJChronology.getInstanceUTC() + ) + for (callNumber in 1..15) { + classUnderTest.calculateQuota() + val aboveQuota = classUnderTest.hasExceededQuota + Timber.v("call number $callNumber above quota: $aboveQuota") + if (callNumber > 3) { + assertEquals(true, aboveQuota) + } else { + assertEquals(false, aboveQuota) + } + } + } + + @Test + fun `isAboveQuota false if called above quota limit but next day resets quota`() { + for (callNumber in 1..5) { + classUnderTest.calculateQuota() + val aboveQuota = classUnderTest.hasExceededQuota + Timber.v("call number $callNumber above quota: $aboveQuota") + if (callNumber > 1) { + assertEquals(true, aboveQuota) + } else { + assertEquals(false, aboveQuota) + } + } + + // Day Change + val timeInTestAdvancedByADay = timeInTest + Duration.standardDays(1).millis + DateTimeUtils.setCurrentMillisFixed(timeInTestAdvancedByADay) + classUnderTest.calculateQuota() + val aboveQuotaAfterDayAdvance = classUnderTest.hasExceededQuota + Timber.v("above quota after day advance: $aboveQuotaAfterDayAdvance") + + assertEquals(false, aboveQuotaAfterDayAdvance) + } + + @Test + fun `test if isAfter is affected by Timezone to make sure we do not run into Shifting Errors`() { + val testTimeUTC = DateTime( + timeInTest, + DateTimeZone.UTC + ).withChronology(GJChronology.getInstanceUTC()) + val testTimeGMT = DateTime( + timeInTest, + DateTimeZone.forID("Etc/GMT+2") + ).withChronology(GJChronology.getInstanceUTC()) + + assertEquals(testTimeGMT, testTimeUTC) + assertEquals(testTimeGMT.millis, testTimeUTC.millis) + + val testTimeUTCAfterGMT = testTimeUTC.plusMinutes(1) + + assertEquals(true, testTimeUTCAfterGMT.isAfter(testTimeGMT)) + + val testTimeGMTAfterUTC = testTimeGMT.plusMinutes(1) + + assertEquals(true, testTimeGMTAfterUTC.isAfter(testTimeUTC)) + } + + @AfterEach + fun cleanup() { + DateTimeUtils.setCurrentMillisSystem() + unmockkObject(LocalData) + } +} diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/formatter/FormatterRiskHelperTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/formatter/FormatterRiskHelperTest.kt index 0c5ec3a069ec1b2bf0a334bf339de5a4a2439368..2eea80e2d9b6964bdc5b772732a4e36702805630 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/formatter/FormatterRiskHelperTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/formatter/FormatterRiskHelperTest.kt @@ -93,17 +93,19 @@ class FormatterRiskHelperTest { ) } -// private fun formatRiskContactBase(iRiskLevelScore: Int?, iMatchedKeysCount: Int?, sValue: String) { -// every { context.getString(R.string.risk_card_body_contact) } returns R.string.risk_card_body_contact.toString() -// -// val result = formatRiskContact(riskLevelScore = iRiskLevelScore, matchedKeysCount = iMatchedKeysCount) -// assertThat( -// result, `is`(sValue) -// ) -// } + private fun formatRiskContactBase(iRiskLevelScore: Int?, iMatchedKeysCount: Int?, sValue: String) { + every { context.getString(R.string.risk_card_body_contact) } returns R.string.risk_card_body_contact.toString() + every { context.getString(R.string.risk_card_body_contact_low_risk) } returns R.string.risk_card_body_contact_low_risk.toString() + + val result = formatRiskContact(riskLevelScore = iRiskLevelScore, matchedKeysCount = iMatchedKeysCount) + assertThat( + result, `is`(sValue) + ) + } private fun formatRiskContactLastBase(iRiskLevelScore: Int?, iDaysSinceLastExposure: Int?, sValue: String) { every { context.getString(R.string.risk_card_body_contact) } returns R.string.risk_card_body_contact.toString() + every { context.getString(R.string.risk_card_body_contact_low_risk) } returns R.string.risk_card_body_contact_low_risk.toString() val result = formatRiskContactLast(riskLevelScore = iRiskLevelScore, daysSinceLastExposure = iDaysSinceLastExposure) @@ -171,27 +173,10 @@ class FormatterRiskHelperTest { ) } - private fun formatNextUpdateContentDescriptionBase( - iRiskLevelScore: Int?, - bIsBackgroundJobEnabled: Boolean?, - sValue: String - ) { - every { context.getString(R.string.risk_card_body_next_update) } returns R.string.risk_card_body_next_update.toString() - every { context.getString(R.string.accessibility_button) } returns R.string.accessibility_button.toString() - - val result = - formatNextUpdateContentDescription( - riskLevelScore = iRiskLevelScore, - isBackgroundJobEnabled = bIsBackgroundJobEnabled - ) - assertThat( - result, `is`(sValue) - ) - } - private fun formatRiskDetailsRiskLevelBodyBase( iRiskLevelScore: Int?, iDaysSinceLastExposure: Int?, + iMatchedKeysCount: Int?, sValue: String ) { every { context.getString(R.string.risk_details_information_body_outdated_risk) } returns R.string.risk_details_information_body_outdated_risk.toString() @@ -200,7 +185,8 @@ class FormatterRiskHelperTest { val result = formatRiskDetailsRiskLevelBody( riskLevelScore = iRiskLevelScore, - daysSinceLastExposure = iDaysSinceLastExposure + daysSinceLastExposure = iDaysSinceLastExposure, + matchedKeysCount = iMatchedKeysCount ) assertThat( result, `is`(sValue) @@ -577,70 +563,70 @@ class FormatterRiskHelperTest { @Test fun formatRiskContact() { -// formatRiskContactBase(iRiskLevelScore = null, iMatchedKeysCount = null, sValue = "") -// formatRiskContactBase(iRiskLevelScore = null, iMatchedKeysCount = 0, sValue = "") -// -// formatRiskContactBase( -// iRiskLevelScore = RiskLevelConstants.INCREASED_RISK, -// iMatchedKeysCount = 0, -// sValue = context.getString(R.string.risk_card_body_contact) -// ) -// formatRiskContactBase( -// iRiskLevelScore = RiskLevelConstants.INCREASED_RISK, -// iMatchedKeysCount = 2, -// sValue = context.resources.getQuantityString( -// R.plurals.risk_card_body_contact_value, -// 2, -// 2 -// ) -// ) -// -// formatRiskContactBase( -// iRiskLevelScore = RiskLevelConstants.LOW_LEVEL_RISK, -// iMatchedKeysCount = 0, -// sValue = context.getString(R.string.risk_card_body_contact) -// ) -// formatRiskContactBase( -// iRiskLevelScore = RiskLevelConstants.LOW_LEVEL_RISK, -// iMatchedKeysCount = 2, -// sValue = context.resources.getQuantityString( -// R.plurals.risk_card_body_contact_value, -// 2, -// 2 -// ) -// ) -// -// formatRiskContactBase( -// iRiskLevelScore = RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS, -// iMatchedKeysCount = 0, -// sValue = "" -// ) -// formatRiskContactBase( -// iRiskLevelScore = RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF, -// iMatchedKeysCount = 0, -// sValue = "" -// ) -// formatRiskContactBase( -// iRiskLevelScore = RiskLevelConstants.UNKNOWN_RISK_INITIAL, -// iMatchedKeysCount = 0, -// sValue = "" -// ) -// -// formatRiskContactBase( -// iRiskLevelScore = RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS, -// iMatchedKeysCount = 2, -// sValue = "" -// ) -// formatRiskContactBase( -// iRiskLevelScore = RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF, -// iMatchedKeysCount = 2, -// sValue = "" -// ) -// formatRiskContactBase( -// iRiskLevelScore = RiskLevelConstants.UNKNOWN_RISK_INITIAL, -// iMatchedKeysCount = 2, -// sValue = "" -// ) + formatRiskContactBase(iRiskLevelScore = null, iMatchedKeysCount = null, sValue = "") + formatRiskContactBase(iRiskLevelScore = null, iMatchedKeysCount = 0, sValue = "") + + formatRiskContactBase( + iRiskLevelScore = RiskLevelConstants.INCREASED_RISK, + iMatchedKeysCount = 0, + sValue = context.getString(R.string.risk_card_body_contact) + ) + formatRiskContactBase( + iRiskLevelScore = RiskLevelConstants.INCREASED_RISK, + iMatchedKeysCount = 2, + sValue = context.resources.getQuantityString( + R.plurals.risk_card_body_contact_value, + 2, + 2 + ) + ) + + formatRiskContactBase( + iRiskLevelScore = RiskLevelConstants.LOW_LEVEL_RISK, + iMatchedKeysCount = 0, + sValue = context.getString(R.string.risk_card_body_contact_low_risk) + ) + formatRiskContactBase( + iRiskLevelScore = RiskLevelConstants.LOW_LEVEL_RISK, + iMatchedKeysCount = 2, + sValue = context.resources.getQuantityString( + R.plurals.risk_card_body_contact_value, + 2, + 2 + ) + ) + + formatRiskContactBase( + iRiskLevelScore = RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS, + iMatchedKeysCount = 0, + sValue = "" + ) + formatRiskContactBase( + iRiskLevelScore = RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF, + iMatchedKeysCount = 0, + sValue = "" + ) + formatRiskContactBase( + iRiskLevelScore = RiskLevelConstants.UNKNOWN_RISK_INITIAL, + iMatchedKeysCount = 0, + sValue = "" + ) + + formatRiskContactBase( + iRiskLevelScore = RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS, + iMatchedKeysCount = 2, + sValue = "" + ) + formatRiskContactBase( + iRiskLevelScore = RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF, + iMatchedKeysCount = 2, + sValue = "" + ) + formatRiskContactBase( + iRiskLevelScore = RiskLevelConstants.UNKNOWN_RISK_INITIAL, + iMatchedKeysCount = 2, + sValue = "" + ) } @Test @@ -976,89 +962,18 @@ class FormatterRiskHelperTest { ) } - @Test - fun formatNextUpdateContentDescription() { - formatNextUpdateContentDescriptionBase( - iRiskLevelScore = null, - bIsBackgroundJobEnabled = null, - sValue = "" - ) - formatNextUpdateContentDescriptionBase( - iRiskLevelScore = RiskLevelConstants.INCREASED_RISK, - bIsBackgroundJobEnabled = null, - sValue = "" - ) - formatNextUpdateContentDescriptionBase( - iRiskLevelScore = RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS, - bIsBackgroundJobEnabled = null, - sValue = "" - ) - formatNextUpdateContentDescriptionBase( - iRiskLevelScore = RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF, - bIsBackgroundJobEnabled = null, - sValue = "" - ) - formatNextUpdateContentDescriptionBase( - iRiskLevelScore = RiskLevelConstants.LOW_LEVEL_RISK, - bIsBackgroundJobEnabled = null, - sValue = "" - ) - formatNextUpdateContentDescriptionBase( - iRiskLevelScore = RiskLevelConstants.UNKNOWN_RISK_INITIAL, - bIsBackgroundJobEnabled = null, - sValue = "" - ) - - formatNextUpdateContentDescriptionBase( - iRiskLevelScore = null, - bIsBackgroundJobEnabled = true, - sValue = "" - ) - formatNextUpdateContentDescriptionBase( - iRiskLevelScore = RiskLevelConstants.INCREASED_RISK, - bIsBackgroundJobEnabled = true, - sValue = context.getString( - R.string.risk_card_body_next_update - ) + " " + context.getString( - R.string.accessibility_button - ) - ) - formatNextUpdateContentDescriptionBase( - iRiskLevelScore = RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS, - bIsBackgroundJobEnabled = true, - sValue = "" - ) - - formatNextUpdateContentDescriptionBase( - iRiskLevelScore = RiskLevelConstants.LOW_LEVEL_RISK, - bIsBackgroundJobEnabled = true, - sValue = context.getString( - R.string.risk_card_body_next_update - ) + " " + context.getString( - R.string.accessibility_button - ) - ) - formatNextUpdateContentDescriptionBase( - iRiskLevelScore = RiskLevelConstants.UNKNOWN_RISK_INITIAL, - bIsBackgroundJobEnabled = true, - sValue = context.getString( - R.string.risk_card_body_next_update - ) + " " + context.getString( - R.string.accessibility_button - ) - ) - } - @Test fun formatRiskDetailsRiskLevelBody() { formatRiskDetailsRiskLevelBodyBase( iRiskLevelScore = null, iDaysSinceLastExposure = 0, + iMatchedKeysCount = 0, sValue = "" ) formatRiskDetailsRiskLevelBodyBase( iRiskLevelScore = RiskLevelConstants.INCREASED_RISK, iDaysSinceLastExposure = 1, + iMatchedKeysCount = 0, sValue = resources.getQuantityString( R.plurals.risk_details_information_body_increased_risk, 1, @@ -1068,28 +983,34 @@ class FormatterRiskHelperTest { formatRiskDetailsRiskLevelBodyBase( iRiskLevelScore = RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS, iDaysSinceLastExposure = 1, + iMatchedKeysCount = 0, sValue = context.getString(R.string.risk_details_information_body_outdated_risk) ) formatRiskDetailsRiskLevelBodyBase( iRiskLevelScore = RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF, iDaysSinceLastExposure = 1, + iMatchedKeysCount = 0, sValue = "" ) formatRiskDetailsRiskLevelBodyBase( iRiskLevelScore = RiskLevelConstants.LOW_LEVEL_RISK, iDaysSinceLastExposure = 1, + iMatchedKeysCount = 0, sValue = context.getString(R.string.risk_details_information_body_low_risk) ) formatRiskDetailsRiskLevelBodyBase( iRiskLevelScore = RiskLevelConstants.UNKNOWN_RISK_INITIAL, iDaysSinceLastExposure = 1, + iMatchedKeysCount = 0, sValue = context.getString(R.string.risk_details_information_body_unknown_risk) ) - formatRiskDetailsRiskLevelBodyBase(iRiskLevelScore = null, iDaysSinceLastExposure = null, sValue = "") + formatRiskDetailsRiskLevelBodyBase(iRiskLevelScore = null, iDaysSinceLastExposure = null, + iMatchedKeysCount = 0, sValue = "") formatRiskDetailsRiskLevelBodyBase( iRiskLevelScore = RiskLevelConstants.INCREASED_RISK, iDaysSinceLastExposure = null, + iMatchedKeysCount = 0, sValue = resources.getQuantityString( R.plurals.risk_details_information_body_increased_risk, 0, @@ -1099,21 +1020,25 @@ class FormatterRiskHelperTest { formatRiskDetailsRiskLevelBodyBase( iRiskLevelScore = RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS, iDaysSinceLastExposure = null, + iMatchedKeysCount = 0, sValue = context.getString(R.string.risk_details_information_body_outdated_risk) ) formatRiskDetailsRiskLevelBodyBase( iRiskLevelScore = RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF, iDaysSinceLastExposure = null, + iMatchedKeysCount = 0, sValue = "" ) formatRiskDetailsRiskLevelBodyBase( iRiskLevelScore = RiskLevelConstants.LOW_LEVEL_RISK, iDaysSinceLastExposure = null, + iMatchedKeysCount = 0, sValue = context.getString(R.string.risk_details_information_body_low_risk) ) formatRiskDetailsRiskLevelBodyBase( iRiskLevelScore = RiskLevelConstants.UNKNOWN_RISK_INITIAL, iDaysSinceLastExposure = null, + iMatchedKeysCount = 0, sValue = context.getString(R.string.risk_details_information_body_unknown_risk) ) }