Skip to content

Conversation

@pm-dimagi
Copy link
Contributor

@pm-dimagi pm-dimagi commented Mar 31, 2025

Beta Release with swahailli translation

cross-request: dimagi/commcare-core#1465

Technical Summary

Feature Flag

Safety Assurance

Safety story

Automated test coverage

QA Plan

Labels and Review

  • Do we need to enhance the manual QA test coverage ? If yes, the "QA Note" label is set correctly
  • Does the PR introduce any major changes worth communicating ? If yes, the "Release Note" label is set and a "Release Note" is specified in PR description.
  • Risk label is set correctly
  • The set of people pinged as reviewers is appropriate for the level of risk of the change

Jignesh-dimagi and others added 22 commits March 11, 2025 19:10
… is >= Tiramisu.

Removed auto SMS code retrieval from deactivation OTP page (user must type it manually).
Register broadcast receivers with proper security
…rences to Context objects.

Updating tab height at bottom of page when changing tabs (to fix a vertical squishing bug).
…status is farther than remote.

Handles a special case when transitioning to learning.
Additional logging for failed HQ token auth in ConnectID-managed apps.
Fix sync buttons in learn and delivery progress pages
Fixed a bad translation (across languages) involving malformed escape XML.
@pm-dimagi
Copy link
Contributor Author

@damagatchi retest this please

@coderabbitai
Copy link

coderabbitai bot commented Mar 31, 2025

📝 Walkthrough

Walkthrough

This pull request implements a series of updates across UI layouts, string resources, and authentication/error handling logic. The XML layout files for connection delivery details and sign-up screens have been restructured to use ConstraintLayout instead of legacy layouts. String resources in multiple languages have been corrected to properly represent HTML entities for the XML manifest error messages. In the Java code, changes include enhanced error logging for authentication failures in activities and services by checking for failed ConnectID authentication. In addition, several fragments now use a menu system with MenuProvider to handle sync actions, and the biometric authentication methods have been refactored to consolidate PIN and biometric verification. A new helper method in the ConnectManager centralizes checking for failed ConnectID auth.

Sequence Diagram(s)

sequenceDiagram
    participant LA as LoginActivity
    participant CM as ConnectManager
    participant L as Logger
    LA->>LA: handlePullTaskResult(AUTH_FAILED)
    LA->>CM: checkForFailedConnectIdAuth(username)
    alt ConnectID Auth Failed
        CM-->>LA: true
        LA->>L: Logger.exception("Token auth error for ConnectID managed app")
    else
        CM-->>LA: false
        LA->>LA: Show bad credentials error
    end
Loading
sequenceDiagram
    participant U as User
    participant F as Connect Fragment
    participant MP as MenuProvider
    U->>F: Open menu and select "Sync"
    F->>MP: onMenuItemSelected(MenuItem Sync)
    MP->>F: Trigger refreshData()
Loading
sequenceDiagram
    participant A as Activity
    participant BH as BiometricsHelper
    participant U as User
    A->>BH: authenticateFingerprint(...)
    BH->>BH: authenticatePinOrBiometric(...)
    BH->>U: Display biometric/PIN prompt
    U-->>BH: Provide credentials
    BH->>A: Return authentication result
Loading

Possibly related PRs

  • Solved smaller screens UI issues #2980: Involves a similar transition in fragment_connect_delivery_details.xml from legacy layouts to ConstraintLayout with updated layout parameters.
  • Delivery Progress UI fix #2989: Updates the ConnectDeliveryProgressFragment layout and refresh logic using menu providers, closely aligning with the current fragment menu refactoring.
  • -rounded button issue resolved #2932: Focuses on UI component updates, including the replacement of RoundedButton with MaterialButton, which reflects similar changes in the layout modifications of this PR.
✨ Finishing Touches
  • 📝 Generate Docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai plan to trigger planning for file edits and PR creation.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

🧹 Nitpick comments (9)
app/res/values-ti/strings.xml (1)

211-211: Correct HTML Entity for Root Element Error in Tigrinya Resource.
The root_element_error string now correctly uses the proper HTML entity &lt;manifest\&gt; instead of an incorrect encoding. This change will ensure that the error message displays the intended XML tag correctly in the UI.

app/src/org/commcare/fragments/connectId/ConnectIdPhoneVerificationFragmnet.java (1)

1-1: File name contains a typo.

The file name "ConnectIdPhoneVerificationFragmnet.java" has a typo - "Fragmnet" should be "Fragment".

Consider renaming the file to correct the spelling:

-ConnectIdPhoneVerificationFragmnet.java
+ConnectIdPhoneVerificationFragment.java

This would require updating all references to this class throughout the codebase.

app/res/layout/fragment_connect_delivery_details.xml (1)

158-190: Good migration to ConstraintLayout, but mixing deprecated attributes

The refactoring from LinearLayout to ConstraintLayout improves layout flexibility and performance. However, the implementation mixes constraint-based positioning with the deprecated android:layout_marginRight attribute.

Consider using android:layout_marginEnd instead of android:layout_marginRight to align with RTL support best practices:

-                            android:layout_marginRight="2dp"
+                            android:layout_marginEnd="2dp"
app/src/org/commcare/utils/BiometricsHelper.java (1)

86-99: Well-implemented consolidated authentication method

The new authenticatePinOrBiometric method effectively handles both authentication methods in a single place, following the DRY principle.

Consider adding a log message or exception handling for the case when neither PIN nor fingerprint is configured, to improve debugging capabilities.

app/res/layout/fragment_signup.xml (4)

27-33: Remove unnecessary orientation attribute from ScrollView

The ScrollView element has an "orientation" attribute which doesn't apply to ScrollViews (only to LinearLayouts). ScrollView only supports vertical scrolling by default.

<ScrollView
    android:id="@+id/firstLayout"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    app:layout_constraintTop_toBottomOf="@+id/llTopBar"
    app:layout_constraintBottom_toTopOf="@+id/ll_recover"
-   android:orientation="vertical">
+   >

153-162: Add textColor attribute to countryCode field for better accessibility

The country code field has textColorHint set but lacks a textColor attribute, which could create contrast issues for accessibility. Adding the textColor attribute would improve readability.

<EditText
    android:id="@+id/countryCode"
    android:layout_width="64dp"
    android:layout_height="55dp"
    android:background="@null"
    android:gravity="center"
    android:hint="@string/connect_phone_country_code_default"
    android:inputType="number"
    android:text="@string/connect_phone_country_code_default"
+   android:textColor="@color/connect_dark_blue_color"
    android:textColorHint="@color/connect_grey" />

208-217: Add contentDescription for consent checkbox to improve accessibility

The consent checkbox should have a contentDescription attribute to make it accessible to screen readers.

<CheckBox
    android:id="@+id/connect_consent_check"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="16dp"
    android:layout_marginBottom="16dp"
    android:buttonTint="@color/connect_blue_color"
    android:padding="1dp"
    android:textColor="@color/connect_subtext"
+   android:contentDescription="@string/connect_consent_message_1"
    android:textSize="13sp" />

229-240: Add contentDescription for the continue button

The continue button would benefit from a contentDescription that clearly describes its action, improving accessibility for screen readers.

<com.google.android.material.button.MaterialButton
    android:id="@+id/continue_button"
    style="@style/CustomButtonStyle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="end"
    android:layout_marginTop="16dp"
    android:layout_marginEnd="16dp"
    android:gravity="start|center"
    android:text="@string/review"
    android:drawableRight="@drawable/connect_right_arrow"
+   android:contentDescription="@string/review"
    />
app/src/org/commcare/fragments/connect/ConnectDeliveryProgressFragment.java (1)

375-383: Consider using an interface for refreshable fragments

The current implementation uses instanceof checks, which creates tight coupling with specific fragment implementations. Consider defining an interface for refreshable fragments to make this more flexible and maintainable.

// Suggested new interface
+interface RefreshableFragment {
+    void updateView();
+}

// Then modify your fragments to implement this interface
+public class ConnectDeliveryProgressDeliveryFragment extends Fragment implements RefreshableFragment {
+    // Existing code...
+}

// And simplify your refresh method
public void refresh() {
-    for (Fragment fragment : fragmentList) {
-        if (fragment instanceof ConnectDeliveryProgressDeliveryFragment) {
-            ((ConnectDeliveryProgressDeliveryFragment) fragment).updateView();
-        } else if (fragment instanceof ConnectResultsSummaryListFragment) {
-            ((ConnectResultsSummaryListFragment) fragment).updateView();
-        }
-    }
+    for (Fragment fragment : fragmentList) {
+        if (fragment instanceof RefreshableFragment) {
+            ((RefreshableFragment) fragment).updateView();
+        }
+    }
}
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between cdc7b40 and fbd756c.

📒 Files selected for processing (23)
  • app/res/layout/fragment_connect_delivery_details.xml (2 hunks)
  • app/res/layout/fragment_signup.xml (2 hunks)
  • app/res/values-es/strings.xml (1 hunks)
  • app/res/values-fr/strings.xml (1 hunks)
  • app/res/values-lt/strings.xml (1 hunks)
  • app/res/values-no/strings.xml (1 hunks)
  • app/res/values-pt/strings.xml (1 hunks)
  • app/res/values-sw/strings.xml (1 hunks)
  • app/res/values-ti/strings.xml (1 hunks)
  • app/src/org/commcare/activities/LoginActivity.java (1 hunks)
  • app/src/org/commcare/activities/SyncCapableCommCareActivity.java (2 hunks)
  • app/src/org/commcare/activities/connect/ConnectActivity.java (1 hunks)
  • app/src/org/commcare/connect/ConnectDatabaseHelper.java (1 hunks)
  • app/src/org/commcare/connect/ConnectManager.java (2 hunks)
  • app/src/org/commcare/fragments/connect/ConnectDeliveryProgressFragment.java (6 hunks)
  • app/src/org/commcare/fragments/connect/ConnectJobsListsFragment.java (2 hunks)
  • app/src/org/commcare/fragments/connect/ConnectLearningProgressFragment.java (3 hunks)
  • app/src/org/commcare/fragments/connectId/ConnectIdBiometricConfigFragment.java (1 hunks)
  • app/src/org/commcare/fragments/connectId/ConnectIdPhoneVerificationFragmnet.java (1 hunks)
  • app/src/org/commcare/fragments/connectId/ConnectIdUserDeactivateOTPVerificationFragment.java (0 hunks)
  • app/src/org/commcare/network/CommcareRequestGenerator.java (1 hunks)
  • app/src/org/commcare/services/CommCareFirebaseMessagingService.java (3 hunks)
  • app/src/org/commcare/utils/BiometricsHelper.java (2 hunks)
💤 Files with no reviewable changes (1)
  • app/src/org/commcare/fragments/connectId/ConnectIdUserDeactivateOTPVerificationFragment.java
🧰 Additional context used
🧠 Learnings (1)
app/src/org/commcare/fragments/connectId/ConnectIdBiometricConfigFragment.java (2)
Learnt from: pm-dimagi
PR: dimagi/commcare-android#2949
File: app/src/org/commcare/fragments/connectId/ConnectIdBiometricConfigFragment.java:95-131
Timestamp: 2025-03-31T08:25:14.284Z
Learning: Biometric authentication security improvements were considered but skipped in PR #2949 as per user's request. The implementation remained with basic biometric authentication without additional security layers.
Learnt from: pm-dimagi
PR: dimagi/commcare-android#2949
File: app/src/org/commcare/fragments/connectId/ConnectIdBiometricConfigFragment.java:235-236
Timestamp: 2025-03-31T08:25:14.284Z
Learning: The empty performPasswordUnlock method in ConnectIdBiometricConfigFragment is intentionally left empty and should not be flagged in reviews.
🧬 Code Definitions (5)
app/src/org/commcare/activities/SyncCapableCommCareActivity.java (1)
app/src/org/commcare/connect/ConnectManager.java (1)
  • ConnectManager (81-1059)
app/src/org/commcare/network/CommcareRequestGenerator.java (1)
app/src/org/commcare/connect/ConnectManager.java (1)
  • ConnectManager (81-1059)
app/src/org/commcare/activities/LoginActivity.java (1)
app/src/org/commcare/connect/ConnectManager.java (1)
  • ConnectManager (81-1059)
app/src/org/commcare/fragments/connectId/ConnectIdBiometricConfigFragment.java (1)
app/src/org/commcare/utils/BiometricsHelper.java (1)
  • BiometricsHelper (25-164)
app/src/org/commcare/connect/ConnectManager.java (2)
app/src/org/commcare/utils/BiometricsHelper.java (1)
  • BiometricsHelper (25-164)
app/src/org/commcare/connect/ConnectDatabaseHelper.java (1)
  • ConnectDatabaseHelper (56-1024)
🔇 Additional comments (28)
app/res/values-es/strings.xml (1)

151-151: Fix HTML Entity Representation in Spanish Resource.
The root_element_error string has been updated from an incorrect HTML entity to the proper format &lt;manifest\&gt;, ensuring the error message now accurately shows the expected XML root element for Spanish-speaking users.

app/res/values-no/strings.xml (1)

152-152: Update Root Element Error Formatting in Norwegian Resource.
The root_element_error string now correctly displays <manifest> using &lt;manifest\&gt; instead of a mis-encoded value. This adjustment ensures consistency with the changes made in other language files and guarantees proper rendering in the application.

app/res/values-fr/strings.xml (1)

151-151: Corrected HTML entity encoding for proper display of XML tags

The change properly fixes the double encoding issue where &amp;lt; (which would render as &lt;) is replaced with the correct HTML entity &lt; for the less-than symbol. This ensures that error messages about manifest files will display correctly to French-speaking users.

app/res/values-lt/strings.xml (1)

152-152: Corrected HTML entity encoding in Lithuanian string resource

Similar to the French translation, this change fixes the double encoding issue with HTML entities by replacing &amp;lt; with the correct &lt; representation for the less-than symbol in the error message.

app/src/org/commcare/activities/SyncCapableCommCareActivity.java (2)

33-33: Added import for Logger class

Added import for the Logger class that will be used for enhanced error reporting of authentication failures.


109-112: Enhanced error logging for ConnectID authentication failures

Added specific error handling for ConnectID authentication failures during sync operations. This will help with debugging and monitoring of authentication issues by explicitly logging when token authentication fails for a ConnectID managed app.

The implementation properly leverages the checkForFailedConnectIdAuth helper method from ConnectManager to detect ConnectID authentication failures.

app/res/values-pt/strings.xml (1)

223-223: Fixed XML tag encoding in Portuguese error message

This change properly escapes the greater-than symbol (>) in the XML string resource by using \&gt; instead of a plain >. This ensures the error message correctly displays the XML tag notation <manifest> rather than interpreting it as actual XML markup.

app/src/org/commcare/services/CommCareFirebaseMessagingService.java (3)

18-18: LGTM - Adding utility import for string validation.

This import allows using the Strings.isEmptyOrWhitespace method for validating notification content.


221-224: Good enhancement to log empty push notifications.

Adding validation to check for empty or whitespace-only notifications improves error detection and troubleshooting. This change helps identify situations where FCM delivers notifications without meaningful content.


236-236: LGTM - Improved code formatting.

This formatting change improves code consistency and readability.

app/src/org/commcare/connect/ConnectDatabaseHelper.java (1)

345-348: Good enhancement to prevent status regression.

This change ensures that job statuses don't move backward when synchronizing with the server. By preserving the higher status value, you avoid potential state inconsistencies when the app has transitioned a job to a more advanced state than the server knows about.

app/src/org/commcare/fragments/connectId/ConnectIdPhoneVerificationFragmnet.java (1)

244-244: Security improvement for Android 13+ broadcast receiver registration.

Updating the version check from Oreo to Tiramisu ensures proper broadcast receiver security on newer Android versions. For Android 13+, the receiver is registered with the RECEIVER_NOT_EXPORTED flag to comply with the platform's security requirements.

app/src/org/commcare/activities/LoginActivity.java (1)

881-884: Improved error logging for ConnectID authentication failures.

This enhancement adds specific logging when authentication fails for a ConnectID managed application. The additional context helps identify and troubleshoot token-related authentication issues by distinguishing between regular login failures and those related to ConnectID management.

app/src/org/commcare/fragments/connectId/ConnectIdBiometricConfigFragment.java (1)

237-239: Method call updated to use simplified interface.

The change simplifies the fingerprint authentication call by removing the allowOtherOptions parameter, aligning with the refactored implementation in BiometricsHelper. This is part of a larger consolidation of PIN and biometric authentication logic into the authenticatePinOrBiometric method.

The new implementation maintains the same functionality while streamlining the authentication process.

app/src/org/commcare/activities/connect/ConnectActivity.java (1)

184-184: Menu handling refactored to use MenuProviders in fragments.

This comment replaces code that previously called getCurrentFragment().onOptionsItemSelected(item), indicating a shift from centralized menu handling in the activity to distributed handling in individual fragments via MenuProvider. This architectural change improves modularity and aligns with modern Android development practices.

The getCurrentFragment() method has also been removed as it's no longer needed with this new approach.

app/src/org/commcare/fragments/connect/ConnectLearningProgressFragment.java (3)

5-7: Added imports for menu handling.

These imports support the new menu handling mechanism being implemented in this fragment.


29-35: Updated imports to support MenuProvider implementation.

These additional imports support the MenuProvider pattern for handling menu actions at the fragment level.


84-101: Implemented MenuProvider for decentralized menu handling.

The fragment now directly handles its own menu actions through a MenuProvider implementation. When the sync action is selected, it calls refreshData() to update the fragment's data.

This change is part of a larger architectural improvement that shifts menu handling responsibility from the activity to individual fragments, making the code more modular and maintainable.

app/src/org/commcare/connect/ConnectManager.java (2)

249-249: Updated authenticateFingerprint call to match new method signature.

The method call has been simplified by removing the allowOtherOptions parameter, matching the refactored method signature in BiometricsHelper. This is part of a consolidation effort to streamline biometric authentication.


568-581: Added helper method to check for failed ConnectID authentication.

This new method centralizes the logic for checking if a worker's ConnectID authentication has failed. It:

  1. Verifies if ConnectID is configured
  2. Retrieves the application record for the current user
  3. Checks if the worker is linked
  4. Includes proper exception handling to log errors

This addition enhances error handling capabilities for authentication failures across the application, particularly in login activities and network request generation.

app/src/org/commcare/fragments/connect/ConnectJobsListsFragment.java (1)

105-121: Good modernization of menu handling using MenuProvider

The implementation now uses the recommended approach for fragment menu handling with MenuHost and MenuProvider. This properly associates menu interactions with the fragment's lifecycle and follows current Android best practices.

app/src/org/commcare/network/CommcareRequestGenerator.java (1)

186-189: Good refactoring of ConnectID auth failure checks

Moving the ConnectID authentication failure check to a centralized method in ConnectManager improves code organization and maintainability.

app/src/org/commcare/utils/BiometricsHelper.java (2)

53-53: Good simplification of fingerprint authentication method

Refactoring to use the consolidated authentication method streamlines the code and reduces duplication.


82-84: Good consolidation of PIN authentication

Redirecting to the common authentication method reduces code duplication and simplifies maintenance.

app/res/layout/fragment_signup.xml (2)

3-7: Good improvement using ConstraintLayout instead of FrameLayout

The switch to ConstraintLayout offers better positioning control and responsiveness compared to the previous FrameLayout implementation.


11-24: Good use of layout reuse with include tag

The implementation of a common app bar through the include tag promotes code reuse and consistency across the application.

app/src/org/commcare/fragments/connect/ConnectDeliveryProgressFragment.java (2)

172-188: Great implementation of MenuProvider for menu handling

Using MenuProvider and attaching it to the fragment's view lifecycle is the modern and recommended approach for handling menus in fragments. This ensures proper lifecycle management and separation of concerns.


356-373: Good refactoring of ViewStateAdapter to use a list

Changing from static fragment references to a list-based approach makes the code more maintainable and flexible. It will be easier to add or modify fragment types in the future.

Comment on lines +223 to +231
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == R.id.action_sync) {
refreshData();
return true;
}

return false;
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Remove redundant onOptionsItemSelected method

This method is redundant since you're already handling menu selections through the MenuProvider implementation above. Having both can lead to confusion or duplicated behavior. The MenuProvider approach is preferred in modern Android development.

-@Override
-public boolean onOptionsItemSelected(MenuItem item) {
-    if(item.getItemId() == R.id.action_sync) {
-        refreshData();
-        return true;
-    }
-
-    return false;
-}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == R.id.action_sync) {
refreshData();
return true;
}
return false;
}

<string name="capture_image">Piga Picha</string>
<string name="capture_video">Rekodi Video</string>
<string name="change_language">Badilisha Lugha</string>
<string name="clearanswer_confirm">Ondoa jibu kwa \%s\"?"</string>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix quote escaping in multiple string resources

There are several strings with improper quote escaping that could cause XML parsing issues. The pattern \"?" appears to be incorrect - it should be either \"?\" (if the question mark is part of the text) or just \"? (if the question mark is followed by the end of the string).

-<string name="clearanswer_confirm">Ondoa jibu kwa \%s\"?"</string>
+<string name="clearanswer_confirm">Ondoa jibu kwa \%s\"?</string>

-<string name="download_failed_with_error">Fomu \%1$s\" haikufaulu. %2$s."</string>
+<string name="download_failed_with_error">Fomu \%1$s\" haikufaulu. %2$s.</string>

-<string name="enter_data_description">Uko mwanzoni mwa \%s\". Telezesha kidole skrini kama inavyoonyeshwa hapa chini ili kuanza."</string>
+<string name="enter_data_description">Uko mwanzoni mwa \%s\". Telezesha kidole skrini kama inavyoonyeshwa hapa chini ili kuanza.</string>

Also applies to: 119-119, 126-126

<string name="migration_possible_failure">CommCare haikuweza kuhamisha data yako yote wakati wa kusasisha programu. Tafadhali anzisha upya CommCare ili kujaribu kurekebisha hili. Ujumbe huu ukiendelea, huenda ukahitaji \'Kufuta data\' kwa CommCare katika menyu ya Mipangilio ya kifaa chako.</string>
<string name="migration_failure_title">Hitilafu ya Uhamiaji</string>
<string name="multiple_apps_limit_message">Umefikia kikomo chako cha programu zilizosakinishwa; unaweza tu kuwa na hadi programu %s zilizosakinishwa mara moja.\n\nIkiwa ungependa kusakinisha programu mpya, unaweza kusanidua programu iliyopo kwanza, ambayo inaweza kufanywa kutoka kwa kidhibiti programu.</string>
<string name="back_to_manager">Rudi kwa Kidhibiti Programu""</string>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix improperly escaped quote in string resource

There's an issue with the closing quotes in this string resource. The double quotes at the end appear to be a mistake or improperly formatted.

-<string name="back_to_manager">Rudi kwa Kidhibiti Programu""</string>
+<string name="back_to_manager">Rudi kwa Kidhibiti Programu</string>
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<string name="back_to_manager">Rudi kwa Kidhibiti Programu""</string>
<string name="back_to_manager">Rudi kwa Kidhibiti Programu</string>

Comment on lines +14 to 605
<string name="your_comment">Maoni yako</string>
<string name="support_email_address_default">commcarehq-support@dimagi.com</string>
<string name="manager_activity_name">Meneja wa Programu</string>
<string name="install_app">Sakinisha Programu</string>
<string name="uninstall_app">Sanidua</string>
<string name="archive_app">Hifadhi</string>
<string name="unarchive_app">Ondoa kwenye kumbukumbu</string>
<string name="update_app">Sasisha</string>
<string name="update_canceled">Sasisho lako limesitishwa</string>
<string name="update_pinned_notification">Sasisha kupakua</string>
<string name="verify_resources">Thibitisha Multimedia</string>
<string name="skip_button_text">Ruka Kwa Sasa</string>
<string name="retry_button_text">Jaribu tena</string>
<string name="skipped_verification_warning">Hukuthibitisha rasilimali za media titika kwa programu ambayo ilikuwa\n kusakinishwa! Programu hii haitaonekana kwa watumiaji kwenye skrini ya kuingia hadi midia anuwai itakapothibitishwa.</string>
<string name="skipped_verification_warning_2">Hukuthibitisha rasilimali za media titika kwa programu hii! Programu\n haitaonekana kwa watumiaji kwenye skrini ya kuingia hadi medianuwai itakapothibitishwa.</string>
<string name="manager_instructions">Chagua programu ili kuona chaguo zake za usimamizi, au usakinishe programu mpya.</string>
<string name="pre_multiple_apps_warning">Onyo: Programu uliyosakinisha imetoka kwa muundo wa kizamani.\n Kwa utendakazi kamili wa viti vingi vya programu, tafadhali tengeneza muundo mpya wa programu yako.</string>
<string name="uninstall_reboot_warning">CommCare itasanidua programu yako na kisha iwashe upya ili kuhifadhi mabadiliko.</string>
<string name="logout_warning">Ili kukamilisha kitendo hiki, CommCare lazima iondoke kwenye programu ambayo kwa sasa umeingia. Je, ungependa kuendelea?</string>
<string name="logging_out">Kuondoa programu yako</string>
<string name="uninstalling">Inaondoa programu yako</string>
<string name="media_not_verified">Vyombo vya Habari Havijathibitishwa</string>
<string name="media_verified">Vyombo vya Habari vimethibitishwa!</string>
<string name="no_installation">Hakuna programu iliyosakinishwa!</string>
<string name="migration_definite_failure">CommCare haikuweza kuhamisha data ya programu yako kwa ajili ya kuboresha. Ili kusuluhisha suala hili, tafadhali sanidua CommCare kutoka kwa kifaa chako kisha ukizindua upya.</string>
<string name="migration_possible_failure">CommCare haikuweza kuhamisha data yako yote wakati wa kusasisha programu. Tafadhali anzisha upya CommCare ili kujaribu kurekebisha hili. Ujumbe huu ukiendelea, huenda ukahitaji \'Kufuta data\' kwa CommCare katika menyu ya Mipangilio ya kifaa chako.</string>
<string name="migration_failure_title">Hitilafu ya Uhamiaji</string>
<string name="multiple_apps_limit_message">Umefikia kikomo chako cha programu zilizosakinishwa; unaweza tu kuwa na hadi programu %s zilizosakinishwa mara moja.\n\nIkiwa ungependa kusakinisha programu mpya, unaweza kusanidua programu iliyopo kwanza, ambayo inaweza kufanywa kutoka kwa kidhibiti programu.</string>
<string name="back_to_manager">Rudi kwa Kidhibiti Programu""</string>
<string name="go_to_manager">Nenda kwa Kidhibiti Programu</string>
<string name="claim_privilege_button_text">DAI MApendeleo</string>
<string name="privilege_enabled_text">Haki zifuatazo zimewashwa kwenye kifaa chako:\n\n %s</string>
<string name="privilege_not_enabled_text">Haki maalum hazijawezeshwa kwenye kifaa chako.</string>
<string name="privilege_claim_failed">Haikuweza kudai marupurupu</string>
<string name="privilege_claim_bad_version">Sikutambua msimbo wa kuwezesha upendeleo. Tafadhali sasisha CommCare</string>
<string name="privilege_instructions">Ikiwa una akaunti ya mtumiaji mkuu kwenye HQ, unaweza kuwezesha haki fulani kwenye kifaa chako kwa kwenda kwenye kichupo cha \'Washa Haki kwenye Simu ya Mkononi\' cha ukurasa wako wa \'Mipangilio ya Akaunti Yangu\', na kisha kuchanganua msimbopau unaoonekana hapo.</string>
<string name="see_available_apps">Angalia Programu Zinazopatikana</string>
<string name="install_from_list_prompt">Ingia kama mtumiaji wa simu au wavuti ili kuona orodha ya programu unazoweza kusakinisha</string>
<string name="legacy_failure">CommCare haiauni uboreshaji kutoka kwa toleo la awali la CommCare ulilokuwa ukitumia. Ili kutatua suala hili, tafadhali sanidua CommCare kutoka kwa kifaa chako kisha uisakinishe upya.</string>
<string name="legacy_failure_title">Uboreshaji wa CommCare Usiooana</string>
<string name="app_version_string">toleo.id.nde</string>
<string name="notificationtitle">Umeingia kwenye Commcare</string>
<string name="expirenotification">Muda wa Kuingia kwa CommCare Umekwisha</string>
<string name="submission_notification_title">Kuwasilisha Data</string>
<string name="submission_logs_title">Kuwasilisha Kumbukumbu za CommCare</string>
<string name="remote_form_payload_url">#VALUE!</string>
<string name="url_prompt">Chagua URL</string>
<string name="about_dialog">%. \n* Ishara ya "Penseli" kwa Creologica \n* ishara ya "Daftari" na Carlo \n* ishara ya "Antena" kwa Dima \n* ishara ya "Alama ya Ramani" na P.J. Onori \n* Orodha" ya Landan Lloyd \n* skrini iliyovunjwa na Sam Martin kutoka kwa Nomino Project \n\n\n\n"</string>
<string name="notification_message_title">Arifa ya CommCare</string>
<string name="hello_world">Tafadhali weka masuala yako hapa chini</string>
<string name="menu_settings">Mipangilio</string>
<string name="permission_content_provider_label">Soma Secure CommCare Data</string>
<string name="permission_content_provider_description">Inaruhusu programu hii kusoma data kutoka kwa CommCare wakati mtumiaji ameingia</string>
<string name="permission_external_action_label">Ruhusu Vitendo vya CommCare</string>
<string name="permission_external_action_description">Inaruhusu programu hii kuanzisha shughuli kama vile kuingia, kuondoka na kusawazisha katika CommCare</string>
<string name="permission_commcare_logout_label">Ruhusu Kuondoka kwa Auto CommCare</string>
<string name="permission_commcare_logout_description">Inaruhusu programu hii kumtoa mtumiaji kutoka kwa Programu ya CommmCare</string>
<string name="title_activity_report_problem">RipotiProblemActivity</string>
<string name="title_activity_comm_care_verification">Shughuli ya CommCareVerification</string>
<string name="panes">moja</string>
<string name="restore_session_prompt">Rejesha kipindi kilichohifadhiwa unapoingia</string>
<string name="managed_configuration_username">Jina la mtumiaji la Mfanyakazi wa Simu</string>
<string name="managed_configuration_password">Nenosiri la Mfanyakazi wa Simu</string>
<string name="managed_configuration_profile_url">Kiungo cha Programu ya CommCare</string>
<string name="managed_configuration_username_description">Jina la mtumiaji la mfanyakazi wa simu ya CommCare ili kuingia na kurejesha kwenye kifaa</string>
<string name="managed_configuration_password_description">Nenosiri la mtumiaji wa simu</string>
<string name="managed_configuration_profile_url_description">URL ya Maombi yako ya CommCare kutoka ukurasa wa kuchapisha wa CommCareHQ</string>
<string name="about_cc">Kuhusu CommCare</string>
<string name="accept_location">Rekodi Mahali</string>
<string name="accuracy">Usahihi</string>
<string name="activity_not_found">Hakuna shughuli iliyopatikana kushughulikia: %s</string>
<string name="advance">sambaza kwa\inayofuata\nmoja</string>
<string name="altitude">Mwinuko</string>
<string name="attachment_oversized">Onyo: faili kubwa iliyoambatishwa ya ukubwa %s mb. Hii inaweza kusababisha matatizo katika kuwasilisha kwa seva kulingana na hali ya mtandao wako.</string>
<string name="attachment_above_size_limit">Kiambatisho cha media ni kikubwa mno (%1$s mb). Ukubwa wa juu unaoruhusiwa ni mb %2$s.</string>
<string name="audio_file_error">Hakuna faili ya sauti iliyobainishwa.</string>
<string name="audio_file_invalid">Faili: %s si faili sahihi ya sauti.</string>
<string name="backup">rudi kwa\niliyotangulia\nkwa haraka</string>
<string name="proceed">ENDELEA</string>
<string name="cancel">GHAIRI</string>
<string name="cancel_loading_form">Ghairi</string>
<string name="cancel_location">Ghairi</string>
<string name="cancel_saving_form">Ghairi</string>
<string name="cannot_edit_completed_form">Fomu hii haiwezi kuhaririwa mara tu ikiwa imetiwa alama kuwa imekamilika.</string>
<string name="capture_audio">Rekodi Sauti</string>
<string name="capture_image">Piga Picha</string>
<string name="capture_video">Rekodi Video</string>
<string name="change_language">Badilisha Lugha</string>
<string name="clearanswer_confirm">Ondoa jibu kwa \%s\"?"</string>
<string name="clear_answer">Ondoa jibu</string>
<string name="clear_answer_ask">Ungependa Kuondoa Jibu Hili?</string>
<string name="clear_answer_no">GHAIRI</string>
<string name="completed_data">Kamilisha (%s)</string>
<string name="data">Fomu Zilizohifadhiwa</string>
<string name="delete_confirm">Ungependa kufuta fomu %s?</string>
<string name="delete_file">Futa Uliochaguliwa</string>
<string name="delete_no">Usifute</string>
<string name="delete_yes">Futa Fomu</string>
<string name="discard_answer">ONDOA MAJIBU</string>
<string name="discard_image">Ondoa Picha</string>
<string name="download">Pata Kuchaguliwa</string>
<string name="download_forms_result">Pakua Matokeo</string>
<string name="downloading_data">Inaunganisha kwa Seva</string>
<string name="download_all_successful">Fomu zote zimepakuliwa.</string>
<string name="download_complete">Kamilisha Fomu</string>
<string name="download_failed_with_error">Fomu \%1$s\" haikufaulu. %2$s."</string>
<string name="do_not_change">Ghairi</string>
<string name="do_not_exit">KAA NA FOMU</string>
<string name="do_not_save">ONDOKA BILA KUHIFADHI</string>
<string name="enter">kuanza</string>
<string name="enter_data">Jaza Fomu tupu</string>
<string name="enter_data_button">Jaza Fomu tupu</string>
<string name="enter_data_description">Uko mwanzoni mwa \%s\". Telezesha kidole skrini kama inavyoonyeshwa hapa chini ili kuanza."</string>
<string name="enter_data_message">Ili kusogeza, telezesha kidole chako mlalo kwenye skrini kana kwamba unageuza kurasa kwenye kitabu. Bonyeza kitufe cha Menyu kwa chaguo zaidi.</string>
<string name="error_downloading">Hitilafu katika Kupata Fomu</string>
<string name="error_occured">Hitilafu Imetokea</string>
<string name="fetching_file">Kupata %1$s.\n\nFomu %2$s ya %3$s fomu.</string>
<string name="file_deleted_error">Samahani, %1$s kati ya %2$s fomu zilizochaguliwa zimeshindwa kufuta!</string>
<string name="file_deleted_ok">Fomu %s zimefutwa!</string>
<string name="file_invalid">Faili: %s ni batili.</string>
<string name="file_missing">Faili: %s haipo.</string>
<string name="finished_disk_scan">Imemaliza kuchanganua. Fomu zote zimepakiwa.</string>
<string name="form">Fomu</string>
<string name="forms">Fomu tupu</string>
<string name="form_renamed">%1$s ilibadilishwa jina %2$s.</string>
<string name="getting_location">Inapakia Mahali</string>
<string name="get_forms">Pata Fomu tupu</string>
<string name="get_location">Rekodi Mahali</string>
<string name="provider_disabled_error">Samahani, watoa huduma za Mahali wamezimwa!</string>
<string name="invalid_answer_error">Samahani, jibu hili si sahihi!</string>
<string name="jump_to_beginning">Nenda Kuanza</string>
<string name="jump_to_end">Nenda Mwisho</string>
<string name="jump_to_previous">Nenda Juu</string>
<string name="latitude">Latitudo</string>
<string name="leaving_repeat">Ongeza Kikundi</string>
<string name="leaving_repeat_ask">Na Kundi Moja Zaidi?</string>
<string name="list_failed_with_error">Uorodheshaji wa fomu haukufaulu. %s.</string>
<string name="loading_form">Inapakia Fomu</string>
<string name="load_remote_form_error">Hitilafu katika Kupata Orodha ya Fomu</string>
<string name="location_provider_accuracy">Usahihi wa eneo: %1$s m.</string>
<string name="location_provider">Kwa kutumia mtoa huduma %1$s. Tafadhali subiri kwa usahihi zaidi.</string>
<string name="location_accuracy">Mahali pamepatikana. Usahihi ni %1$s m</string>
<string name="longitude">Longitude</string>
<string name="manage_files">Delete Saved Form</string>
<string name="no">No</string>
<string name="noselect_error">Sorry, you have not selected any forms!</string>
<string name="no_capture">Nothing recorded yet.</string>
<string name="no_connection">No network connection available</string>
<string name="no_items_display">Nothing available to display.</string>
<string name="no_items_display_forms">Nothing available to display.\n\nTry getting and filling out a blank form.</string>
<string name="no_items_display_instances">Nothing available to display.\n\nTry finalizing saved forms before sending.</string>
<string name="no_items_error">Nothing available to %s!</string>
<string name="no_sd_error">Sorry, your memory card is not working!</string>
<string name="ok">OK</string>
<string name="one_capture">Multimedia recorded.</string>
<string name="parse_error">Sorry, unable to parse form.</string>
<string name="parse_legacy_formlist_failed">The server has not provided an available-forms document compatible with Aggregate 0.9.x. : %s</string>
<string name="parse_openrosa_formlist_failed">The server has not provided an available-forms document compatible with the OpenRosa version 1.0 standard: %s</string>
<string name="play_audio">Play Sound</string>
<string name="play_video">Play Video</string>
<string name="please_wait">Please wait a few moments.</string>
<string name="please_wait_long">Please wait. This could take a few minutes.</string>
<string name="quit_application">Exit %s</string>
<string name="quit_entry">Save Form and Exit</string>
<string name="refresh">Refresh</string>
<string name="replace_audio">Replace Sound</string>
<string name="replace_barcode">Replace Barcode</string>
<string name="replace_image">Replace Picture</string>
<string name="replace_location">Replace Location</string>
<string name="replace_video">Replace Video</string>
<string name="required_answer_error">Sorry, this response is required!</string>
<string name="review">Continue</string>
<string name="review_data">Edit Saved Form</string>
<string name="review_data_button">Edit Saved Form</string>
<string name="saved_data">Incomplete (%s)</string>
<string name="save_all_answers">Save Form</string>
<string name="save_data_message">Please save form to keep your responses.</string>
<string name="save_enter_data_description">You are at the end of \"%s\".</string>
<string name="saving_form">Saving Form</string>
<string name="send">send</string>
<string name="sending_items">Sending %1$s of %2$s form(s)</string>
<string name="send_data">Send Finalized Form</string>
<string name="send_data_button">Send Finalized Form</string>
<string name="send_selected_data">Send Selected</string>
<string name="server_auth_credentials">Please enter username and password for server:\n%s</string>
<string name="server_requires_auth">Server Requires Authentication</string>
<string name="manage_files">Futa Fomu Iliyohifadhiwa</string>
<string name="no">Hapana</string>
<string name="noselect_error">Samahani, hujachagua fomu zozote!</string>
<string name="no_capture">Bado hakuna kilichorekodiwa.</string>
<string name="no_connection">Hakuna muunganisho wa mtandao unaopatikana</string>
<string name="no_items_display">Hakuna kitu kinachopatikana cha kuonyesha.</string>
<string name="no_items_display_forms">Hakuna kitu kinachopatikana cha kuonyesha.\n\nJaribu kupata na kujaza fomu iliyo wazi.</string>
<string name="no_items_display_instances">Hakuna kitu kinachopatikana cha kuonyesha.\n\nJaribu kukamilisha fomu zilizohifadhiwa kabla ya kutuma.</string>
<string name="no_items_error">Hakuna kitu kinachopatikana kwa %s!</string>
<string name="no_sd_error">Samahani, kadi yako ya kumbukumbu haifanyi kazi!</string>
<string name="ok">Sawa</string>
<string name="one_capture">Multimedia imerekodiwa.</string>
<string name="parse_error">Samahani, haiwezi kuchanganua fomu.</string>
<string name="parse_legacy_formlist_failed">Seva haijatoa hati ya aina zinazopatikana inayooana na Jumla 0.9.x. :%s</string>
<string name="parse_openrosa_formlist_failed">Seva haijatoa hati ya aina zinazopatikana inayooana na toleo la 1.0 la OpenRosa: %s</string>
<string name="play_audio">Cheza Sauti</string>
<string name="play_video">Cheza Video</string>
<string name="please_wait">Tafadhali subiri kidogo.</string>
<string name="please_wait_long">Tafadhali subiri. Hii inaweza kuchukua dakika chache.</string>
<string name="quit_application">Ondoka %s</string>
<string name="quit_entry">Hifadhi Fomu na Uondoke</string>
<string name="quit_form_title">Ungependa Kufunga Fomu?</string>
<string name="refresh">Onyesha upya</string>
<string name="replace_audio">Badilisha Sauti</string>
<string name="replace_barcode">Badilisha Msimbo Pau</string>
<string name="replace_image">Badilisha Picha</string>
<string name="replace_location">Badilisha Mahali</string>
<string name="replace_video">Badilisha Video</string>
<string name="required_answer_error">Samahani, jibu hili linahitajika!</string>
<string name="review">Endelea</string>
<string name="review_data">Badilisha Fomu Iliyohifadhiwa</string>
<string name="review_data_button">Badilisha Fomu Iliyohifadhiwa</string>
<string name="saved_data">Haijakamilika (%s)</string>
<string name="save_all_answers">Hifadhi Fomu</string>
<string name="save_data_message">Tafadhali hifadhi fomu ili uhifadhi majibu yako.</string>
<string name="save_enter_data_description">Uko mwisho wa \%s\"."</string>
<string name="saving_form">Kuhifadhi Fomu</string>
<string name="send">tuma</string>
<string name="sending_items">Inatuma %1$s kati ya %2$s fomu</string>
<string name="send_data">Tuma Fomu Iliyokamilishwa</string>
<string name="send_data_button">Tuma Fomu Iliyokamilishwa</string>
<string name="send_selected_data">Tuma Iliyochaguliwa</string>
<string name="server_auth_credentials">Tafadhali weka jina la mtumiaji na nenosiri la seva:\n%s</string>
<string name="server_requires_auth">Seva Inahitaji Uthibitishaji</string>
<string name="server_url">URL</string>
<string name="server_preferences">Server</string>
<string name="toggle_selected">Toggle All</string>
<string name="trigger">OK. Please continue.</string>
<string name="uploading_data">Sending Form</string>
<string name="upload_all_successful">%s form(s) sent successfully.</string>
<string name="upload_some_failed">Sorry, %s form(s) failed to send!</string>
<string name="url_error">Sorry, invalid URL!</string>
<string name="username">Username</string>
<string name="view_hierarchy">Go To Prompt</string>
<string name="form_entry_settings">Change Settings</string>
<string name="first_run">Do first run on restart</string>
<string name="client">Client</string>
<string name="use_odk_default">Use Default Image</string>
<string name="show_location">Show Location</string>
<string name="keep_changes">Save Changes</string>
<string name="go_to_location">Go to Location</string>
<string name="font_size">Text Font Size</string>
<string name="change_font_size">Text Font Size</string>
<string name="form_scan_starting">Scanning for forms...</string>
<string name="form_scan_finished">Form scanning completed</string>
<string name="access_error">"Error while accessing %s: "</string>
<string name="manifest_server_error">Manifest reply does not report an OpenRosa version -- bad server?</string>
<string name="root_element_error">Root element is not &amp;lt;manifest\&gt; -- was %s</string>
<string name="root_namespace_error">Root element Namespace is incorrect: %s</string>
<string name="manifest_tag_error">Manifest entry %s is missing one or more tags: filename, hash, or downloadUrl</string>
<string name="form_download_progress">%1$s. Getting media files: %2$s of %3$s</string>
<string name="file_fetch_failed">Error: %2$s (%3$s) at %1$s</string>
<string name="fetching_manifest">"%s. Getting manifest "</string>
<string name="success">Success</string>
<string name="no_forms_uploaded">Sorry, no form was uploaded.</string>
<string name="upload_results">Upload Results</string>
<string name="xform_parse_error">XForm parse error. %1$s is missing element %2$s</string>
<string name="choose_sound">Choose Sound</string>
<string name="choose_video">Choose Video</string>
<string name="choose_image">Choose Image</string>
<string name="selected">"Selected: "</string>
<string name="select_answer">Select Answer</string>
<string name="save_form_as">Name this form:</string>
<string name="save_as_error">Saved name must not be blank!</string>
<string name="form_name">Form Name:</string>
<string name="edit_prompt">Edit Prompt</string>
<string name="exit">Exit</string>
<string name="no_gps_title">Location Data Disabled</string>
<string name="no_gps_message">The location providers on this device are currently disabled. Do you want to change those settings?</string>
<string name="change_settings">Change Settings</string>
<string name="server_preferences">Seva</string>
<string name="toggle_selected">Geuza Zote</string>
<string name="trigger">SAWA. Tafadhali endelea.</string>
<string name="uploading_data">Kutuma Fomu</string>
<string name="upload_all_successful">Fomu %s zimetumwa kwa mafanikio.</string>
<string name="upload_some_failed">Samahani, fomu %s hazijatumwa!</string>
<string name="url_error">Samahani, URL batili!</string>
<string name="username">Jina la mtumiaji</string>
<string name="view_hierarchy">Nenda kwa Prompt</string>
<string name="form_entry_settings">Badilisha Mipangilio</string>
<string name="first_run">Fanya kukimbia kwanza kwenye kuanzisha upya</string>
<string name="client">Mteja</string>
<string name="use_odk_default">Tumia Picha Chaguomsingi</string>
<string name="show_location">Onyesha Mahali</string>
<string name="keep_changes">HIFADHI USIKAMILIKA</string>
<string name="go_to_location">Nenda kwa Mahali</string>
<string name="font_size">Ukubwa wa herufi ya maandishi</string>
<string name="change_font_size">Ukubwa wa herufi ya maandishi</string>
<string name="form_scan_starting">Inachanganua fomu...</string>
<string name="form_scan_finished">Uchanganuzi wa fomu umekamilika</string>
<string name="access_error">Hitilafu wakati wa kufikia %s:</string>
<string name="manifest_server_error">Jibu la maelezo haliripoti toleo la OpenRosa -- seva mbaya?</string>
<string name="root_element_error">Kipengele cha mizizi si &lt;manifest\&gt; -- kilikuwa %s</string>
<string name="root_namespace_error">Kipengele cha mizizi Nafasi ya jina si sahihi: %s</string>
<string name="manifest_tag_error">Ingizo la Manifest %s linakosa lebo moja au zaidi: jina la faili, hashi, au pakuaUrl</string>
<string name="form_download_progress">%1$s. Inapata faili za midia: %2$s ya %3$s</string>
<string name="file_fetch_failed">Hitilafu: %2$s (%3$s) katika %1$s</string>
<string name="fetching_manifest">%s. Kupata faili ya maelezo</string>
<string name="success">Mafanikio</string>
<string name="no_forms_uploaded">Samahani, hakuna fomu iliyopakiwa.</string>
<string name="upload_results">Pakia Matokeo</string>
<string name="xform_parse_error">Hitilafu ya uchanganuzi wa XForm. %1$s inakosa kipengele %2$s</string>
<string name="choose_sound">Chagua Sauti</string>
<string name="choose_video">Chagua Video</string>
<string name="choose_image">Chagua Picha</string>
<string name="selected">Imechaguliwa:</string>
<string name="select_answer">Chagua Jibu</string>
<string name="save_form_as">Ipe fomu hii jina:</string>
<string name="save_as_error">Jina lililohifadhiwa lazima liwe tupu!</string>
<string name="form_name">Jina la Fomu:</string>
<string name="edit_prompt">Hariri haraka</string>
<string name="exit">Utgång</string>
<string name="no_gps_title">Data ya Mahali Imezimwa</string>
<string name="no_gps_message">Watoa huduma wa eneo kwenye kifaa hiki wamezimwa kwa sasa. Je, ungependa kubadilisha mipangilio hiyo?</string>
<string name="change_settings">Badilisha Mipangilio</string>
<string name="finding_location">Inatafuta Mahali...</string>
<string name="found_location">Mahali Pamepatikana!</string>
<string name="preference_help_mode_tray">Onyesha Mstari Mzuri wa Usaidizi</string>
<string name="reset_image">Weka upya</string>
<string name="save_and_close">Hifadhi na Funga</string>
<string name="sign_button">Kusanya Sahihi</string>
<string name="markup_image">Picha ya Alama</string>
<string name="draw_image">Mchoro wa Picha</string>
<string name="share">Shiriki</string>
<string name="title_data_change_logs_activity">Kumbukumbu za Mabadiliko ya Data</string>
<string name="commcare_logs">Kumbukumbu za Mabadiliko ya Data ya CommCare</string>
<string name="clear_user_data_delete_form">Futa Fomu</string>
<string name="target_mismatch_lts_required">Programu Inahitaji CommCare LTS</string>
<string name="target_mismatch_lts_required_install">Sakinisha CommCare LTS</string>
<string name="target_mismatch_lts_open">Fungua CommCare LTS</string>
<string name="target_mismatch_lts_required_info">Fuata kiungo kilicho hapa chini ili kusakinisha CommCare LTS kutoka Play Store, kisha ujaribu kusakinisha programu yako tena.</string>
<string name="target_mismatch_lts_available_info">Programu hii inahitaji CommCare LTS. Bofya kitufe kilicho hapa chini ili kufungua CommCare LTS, kisha ujaribu kusakinisha programu yako tena.</string>
<string name="target_mismatch_commcare_required">Programu Inahitaji CommCare (Isiyo ya LTS)</string>
<string name="target_mismatch_commcare_required_install">Sakinisha CommCare</string>
<string name="target_mismatch_commcare_open">Fungua CommCare</string>
<string name="target_mismatch_commcare_required_info">Fuata kiungo kilicho hapa chini ili kusakinisha CommCare(Non LTS) kutoka Play Store, kisha ujaribu kusakinisha programu yako tena.</string>
<string name="target_mismatch_commcare_available_info">Programu hii inahitaji CommCare (Non LTS). Bofya kitufe kilicho hapa chini ili kufungua CommCare, kisha ujaribu kusakinisha programu yako tena.</string>
<string name="incorrect_time_dialog_title">Muda Usio Sahihi</string>
<string name="incorrect_time_dialog_message">Muda wa kifaa chako umewekwa vibaya. Tafadhali bofya kitufe cha Wakati Sahihi hapa chini ili kubadilisha mipangilio yako ya saa.</string>
<string name="incorrect_time_dialog_correct_time">Wakati Sahihi</string>
<string name="incorrect_time_dialog_cancel">Ghairi</string>
<string name="recovery_mode_title">Njia ya Urejeshaji ya CommCare</string>
<string name="recovery_mode_detail">CommCare imeingiza hali ya urejeshi kwa sababu ya tatizo na programu yako. Tunajaribu kurejesha programu yako. Tafadhali subiri...</string>
<string name="recovery_resource_progress">Imerejesha %1$s kati ya rasilimali %2$s</string>
<string name="recovery_error_poor_connection">Urejeshaji haukufaulu kwa sababu ya mtandao mbaya. Tafadhali hakikisha kuwa una muunganisho thabiti wa intaneti na ujaribu tena</string>
<string name="recovery_error_unknown">Urejeshaji haukufaulu kwa sababu isiyojulikana. Tafadhali jaribu tena au usakinishe upya programu yako kwa kwenda kwa Kidhibiti Programu</string>
<string name="recovery_success">Urejeshaji wa programu umefaulu. Tafadhali bonyeza nyuma ili kuendelea na kazi yako</string>
<string name="recovery_forms_send_progress">Inawasilisha fomu kwa seva...</string>
<string name="recovery_forms_send_session_expired">Muda wa kuingia umeisha wakati wa kutuma</string>
<string name="recovery_forms_send_successful">Imetuma. Fomu zote %s ziliwasilishwa</string>
<string name="recovery_forms_send_failure">Kulikuwa na makosa katika kuwasilisha fomu.</string>
<string name="recovery_forms_send_parital_success">Kulikuwa na makosa katika kuwasilisha fomu. %s pekee ndizo zilizowasilishwa. Tafadhali jaribu tena baadaye</string>
<string name="recovery_forms_send_network_error">Uwasilishaji wa fomu haukufaulu kwa sababu ya mtandao duni</string>
<string name="recovery_forms_send_error">Hitilafu wakati wa kutuma fomu</string>
<string name="recovery_forms_state_unavailable">Fomu hazipatikani. Hakikisha hifadhi ya simu yako inapatikana</string>
<string name="recovery_network_unavailable">Hakuna muunganisho wa mtandao. Tafadhali angalia intaneti yako na ujaribu tena.</string>
<string name="recovery_network_outdated">Programu imepitwa na wakati na haiwezi tena kuwasiliana na seva. Tafadhali sasisha programu kwenye Google Play Store.</string>
<string name="recovery_app_manager">Nenda kwa Kidhibiti Programu</string>
<string name="recovery_retry">Jaribu Urejeshaji tena</string>
<string name="notification_channel_errors_title">Makosa</string>
<string name="notification_channel_errors_description">Arifa za ujumbe wa hitilafu wakati kitu kinapovunjika husema juu ya kusakinisha programu ya CommCare au wakati wa kusawazisha fomu na seva.</string>
<string name="notification_channel_user_session_title">Kipindi cha Mtumiaji</string>
<string name="notification_channel_user_session_description">Arifa iliyo na maelezo kuhusu kipindi cha sasa cha mtumiaji kama vile kipindi cha sasa kimeratibiwa kuisha</string>
<string name="notification_channel_server_communication_title">Mawasiliano ya Seva</string>
<string name="notification_channel_server_communication_description">Arifa za hali ya mawasiliano yoyote ya chinichini ya seva yanayofanyika kwa sasa kama vile masasisho ya Programu ya CommCare, uwasilishaji wa kumbukumbu n.k.</string>
<string name="notification_channel_push_notfications_title">Arifa za Kipaumbele kutoka kwa Seva</string>
<string name="notification_channel_push_notfications_description">Arifa zinazotumwa kutoka kwa seva moja kwa moja ili kumjulisha mtumiaji kazi za kipaumbele</string>
<string name="recovery_measure_reinstall_method">Chagua Mbinu ya Kusakinisha upya</string>
<string name="recovery_measure_reinstall_detail">Programu yako inahitaji kusakinishwa upya kwa sababu ya tatizo, tafadhali chagua mbinu ya kusakinisha upya.</string>
<string name="recovery_measure_reinstall_online_method">Sakinisha upya mtandaoni</string>
<string name="recovery_measure_reinstall_offline_method">Sakinisha tena kwa kutumia CCZ</string>
<string name="recovery_measure_detail">Taratibu za urejeshaji zimeanzishwa kwa Programu yako ya CommCare kwa sababu ya tatizo nayo. Tafadhali subiri...</string>
<string name="recovery_measure_faiure">Hitilafu ilitokea wakati CommCare ilipojaribu kutekeleza hatua ya uokoaji. Tutajaribu tena baadaye. Tatizo likiendelea tafadhali wasiliana na dawati la usaidizi</string>
<string name="recovery_measure_retry">Jaribu Urejeshaji tena</string>
<string name="recovery_measure_app_reinstall_progress">Inasakinisha tena %1$s kati ya rasilimali %2$s</string>
<string name="recovery_measure_app_update_progress">Inasasisha %1$s kati ya rasilimali %2$s</string>
<string name="recovery_measure_known_error">Hitilafu ilitokea wakati wa kurejesha. Maelezo ya hitilafu - \n %1$s</string>
<string name="recovery_measure_ccz_scan_in_progress">Inachanganua simu yako kwa faili za ccz</string>
<string name="recovery_measure_ccz_found_scan_in_progress">Tulipata faili ya CCZ ya programu kwenye simu yako. Bado tunachanganua kifaa chako ili kuona kama kuna faili mpya ya CCZ iliyopo. Unaweza kusubiri ili uchanganuzi ukamilike au ubofye sakinisha upya hapa chini ili usakinishe upya programu mara moja</string>
<string name="recovery_measure_reinstall">Sakinisha upya</string>
<string name="recovery_measure_no_ccz_found">Hakuna faili ya CCZ iliyopatikana kwa programu yako. Unaweza kupata faili ya CCZ wewe mwenyewe kwa kubofya kitufe cha \"Chagua CCZ\" hapa chini. Iwapo huwezi kupata faili ya CCZ kwenye simu yako, tafadhali wasiliana na dawati lako la usaidizi.</string>
<string name="recovery_measure_select_ccz">Chagua CCZ</string>
<string name="recovery_measure_select_ccz_no_file_browser">Unahitaji kidhibiti faili ili kufikia faili kwenye kifaa hiki. Hujasakinisha kidhibiti faili, tafadhali nenda kwenye Duka la Google Play na upakue kidhibiti faili, kisha urudi kwenye skrini hii.</string>
<string name="recovery_measure_invalid_ccz_path">Imeshindwa kuchakata faili ya CCZ uliyochagua. Tafadhali jaribu tena</string>
<string name="recovery_measure_ccz_scan_failed">Hitilafu ilitokea wakati wa kupakua faili ya CCZ kwenye simu yako. Tafadhali jaribu tena au tafuta faili ya CCZ wewe mwenyewe kwa kubofya kitufe cha \Chagua CCZ\" hapa chini."</string>
<string name="recovery_measure_unzip_error">Hitilafu imetokea wakati wa kusakinisha programu kutoka kwa faili ya CCZ. Tafadhali jaribu tena au tafuta faili ya CCZ wewe mwenyewe kwa kubofya kitufe cha \Chagua CCZ\" hapa chini."</string>
<string name="recovery_measure_update_cancelled">Usasishaji umeghairiwa</string>
<string name="recovery_measure_offline_install_cancelled">Usakinishaji wa nje ya mtandao umeghairiwa</string>
<string name="recovery_measure_unzip_progress">Inachakata Faili ya CCZ.. %1$s</string>
<string name="reinstall_prompt_title">Inahitajika kusakinisha tena %1$s</string>
<string name="install_error_file_not_found">Hakuna faili iliyopatikana ya rasilimali %1$s</string>
<string name="update_blocked_on_sync_message">Usawazishaji unahitajika ili kusakinisha sasisho hili. Inaanzisha usawazishaji kiotomatiki...</string>
<string name="media_download_failed">Hitilafu ilitokea wakati wa kupakua maudhui yaliyoombwa. Tafadhali jaribu tena</string>
<string name="media_download_in_progress">Upakuaji unaendelea, Tafadhali subiri...</string>
<string name="media_download_started">Upakuaji umeanza</string>
<string name="media_download_completed">Upakuaji umekamilika</string>
<string name="video_download_prompt">Faili ya video haipo kwa swali hili, bofya kitufe cha kupakua hapo juu ili kupakua</string>
<string name="image_download_prompt">Faili ya picha haipo kwa swali hili, Bofya kitufe cha kupakua hapo juu ili kupakua</string>
<string name="audio_download_prompt">Faili ya sauti haipo kwa swali hili, bofya kitufe cha kupakua hapo juu ili kupakua</string>
<string name="media_not_found_error">Midia haipatikani kwenye programu</string>
<string name="area_format">%1s sq m</string>
<string name="parse_coordinates_failure">Haikuweza kuchanganua viwianishi vya ingizo</string>
<string name="location_provider_disabled">Washa eneo lako ili kupokea masasisho ya eneo</string>
<string name="wait_for_location_fix">CommCare bado inajaribu kupata eneo lako. Tafadhali subiri au ubofye Ghairi ili kughairi.</string>
<string name="invalid_case_property_length">Ses %1 si sahihi, thamani lazima iwe na vibambo 255 au chini ya hapo</string>
<string name="invalid_case_graph_error">Fomu hii inatanguliza uhusiano wa kesi batili</string>
<string name="root_detected_title">Kifaa chenye mizizi kimegunduliwa</string>
<string name="root_detected_message">Huruhusiwi kuendesha CommCare kwenye kifaa chenye mizizi. Tafadhali tumia kifaa kisicho na mizizi</string>
<string name="session_endpoint_unavailable">Hakuna ncha iliyo na kitambulisho %1$s. Miisho halali ni %2$s</string>
<string name="session_endpoint_invalid_arguments">Hoja zisizo sahihi zimetolewa kwa sehemu ya mwisho %1$s. Hoja zinazotolewa: %2$s. Hoja zinazotarajiwa: %3$s.</string>
<string name="selected_location">Eneo Lililochaguliwa</string>
<string name="confirm_location">Thibitisha eneo</string>
<string name="playback_start_time">00:00</string>
<string name="dependency_missing_dialog_title">Pata Programu Inayohitajika</string>
<string name="dependency_missing_dialog_title_plural">Pata Programu Zinazohitajika</string>
<string name="dependency_missing_dialog_message">CommCare inahitaji programu %s kusakinishwa kwenye kifaa chako kabla uweze kuendelea</string>
<string name="dependency_missing_dialog_message_plural">CommCare inahitaji programu zilizo hapa chini kusakinishwa kwenye kifaa chako kabla ya kuendelea-</string>
<string name="dependency_missing_dialog_go_to_store">Sakinisha kutoka Hifadhi</string>
<string name="dependency_missing_dialog_playstore_not_found">Hakuna Duka la Google Play lililopatikana kwenye kifaa chako</string>
<string name="fcm_notification">Taarifa ya FCM</string>
<string name="fcm_default_notification_channel">arifa-chaneli-kusukuma-arifa</string>
<string name="app_select_message">Chagua programu:</string>
<string name="connect_id_enabled">ConnectID Imewashwa</string>
<string name="login_password_by_connect">Kupitia ConnectID (au bonyeza hapa)</string>
<string name="login_welcome_connect_signed_in">Karibu %s!</string>
<string name="login_connect_secondary_phone_message">Tafadhali thibitisha simu yako ya pili kwa %s ili kuendelea kutumia ConnectID.</string>
<string name="choice_or">____________ AU _____________</string>
<string name="busy_message">Bado tunashughulika kuchakata ombi lako la awali. Tafadhali jaribu tena baada ya muda fulani.</string>
<string name="connect_button_logged_in">Nenda kwenye menyu ya Unganisha</string>
<string name="connect_db_corrupt">Tatizo limetokea kwenye hifadhidata, tafadhali rudisha akaunti yako.</string>
<string name="connect_registration_title">Usajili wa ConnectID</string>
<string name="connect_signup">Jisajili</string>
<string name="connect_recover">Pata nafuu</string>
<string name="connect_registration_have_account">Je, tayari una\nConnectID?</string>
<string name="connect_recover_no_account">Je, huna\nConnectID?</string>
<string name="connect_consent_message_1">Nimesoma na kukubaliana na Sera ya Faragha ya Dimagi, Sheria na Masharti, Makubaliano ya Biashara na Sera ya Matumizi Yanayokubalika.</string>
<string name="connect_phone_page_title">Nambari ya Simu</string>
<string name="connect_phone_title_primary">Simu ya Msingi</string>
<string name="connect_phone_message_primary">Tafadhali weka nambari yako msingi ya simu</string>
<string name="connect_phone_title_alternate">Simu Mbadala</string>
<string name="connect_phone_message_alternate">Weka nambari ya simu ya rafiki au familia ambayo inaweza kukupa SMS ya OTP ukisahau Msimbo wako.</string>
<string name="connect_phone_button">Sawa</string>
<string name="connect_phone_checking">Inaangalia...</string>
<string name="connect_phone_country_code_default">+1</string>
<string name="connect_phone_number_hint">0000000000</string>
<string name="connect_phone_available">Nambari ya simu inapatikana!</string>
<string name="connect_phone_unavailable">Nambari ya simu tayari inatumika</string>
<string name="connect_phone_invalid">Weka nambari sahihi ya simu</string>
<string name="connect_phone_not_alt">Haiwezi kutumia mbadala wako. nambari</string>
<string name="connect_phone_not_primary">Alt. nambari lazima iwe tofauti na msingi</string>
<string name="connect_phone_not_found">Nambari ya simu haijapatikana</string>
<string name="connect_phone_change_error">Hitilafu katika kubadilisha nambari ya simu</string>
<string name="connect_password_button">Sawa</string>
<string name="connect_pin_title_set">Chagua PIN</string>
<string name="connect_pin_title_confirm">Thibitisha PIN</string>
<string name="connect_pin">Weka PIN</string>
<string name="connect_pin_repeat">Thibitisha PIN</string>
<string name="connect_pin_length">Msimbo lazima uwe na tarakimu %d</string>
<string name="connect_pin_mismatch">PIN lazima zilingane</string>
<string name="connect_password_verify_title">Weka Nenosiri Lako</string>
<string name="connect_password_verify_message">Tafadhali weka nenosiri lako la kurejesha akaunti ili kuendelea.</string>
<string name="connect_password_verify">Weka Nenosiri</string>
<string name="connect_password_verify_forgot">Je, huna au umesahau nenosiri lako?</string>
<string name="connect_password_verify_button">Wasilisha</string>
<string name="connect_password_fail_title">Nenosiri Si sahihi</string>
<string name="connect_password_fail_message">Umeingiza nenosiri lisilo sahihi, tafadhali jaribu tena.</string>
<string name="connect_password_recovery_message">Umeingiza nenosiri lisilo sahihi mara nyingi sana, utahitaji kurejesha akaunti yako.</string>
<string name="connect_password_fail_button">Sawa</string>
<string name="connect_pin_fail_title">Msimbo usio sahihi</string>
<string name="connect_pin_fail_message">Umeweka Msimbo usio sahihi, tafadhali jaribu tena.</string>
<string name="connect_pin_recovery_message">Umeweka Nambari isiyo sahihi mara nyingi sana, utahitaji kurejesha akaunti yako.\n Kwenye skrini inayofuata, tutatuma nambari ya kuthibitisha kupitia SMS kwa nambari mbadala ya simu inayohusishwa na akaunti yako.</string>
<string name="connect_pin_confirm_message">Umeweka Msimbo usio sahihi mara nyingi sana, itabidi usanidi msimbo tena.\n Kwenye skrini inayofuata, tutakuelekeza kwenye ukurasa wa msimbo wa kusanidi.</string>
<string name="connect_pin_verify_forgot">Je, huna au umesahau Nambari yako?</string>
<string name="connect_recovery_title">Urejeshaji wa ConnectID</string>
<string name="connect_recovery_alt_title">Simu Mbadala</string>
<string name="connect_recovery_alt_message">Kwenye skrini inayofuata, tutatuma nambari ya kuthibitisha kupitia SMS kwa nambari mbadala ya simu inayohusishwa na akaunti yako.</string>
<string name="connect_recovery_alt_button">Endelea</string>
<string name="connect_recovery_alt_change_button">Badilisha nambari</string>
<string name="connect_recovery_success_title">Akaunti Imerejeshwa</string>
<string name="connect_recovery_success_message">Umefanikiwa kurejesha akaunti yako na sasa unaweza kuendelea kutumia ConnectID yako.</string>
<string name="connect_recovery_success_button">Sawa</string>
<string name="connect_recovery_failure">Hitilafu katika kukamilisha urejeshaji, tafadhali jaribu tena baadaye</string>
<string name="connect_unlock_title">Fungua ConnectID</string>
<string name="connect_unlock_message">Tafadhali fungua ili kuendelea</string>
<string name="connect_unlock_button_pin">Fungua kwa PIN</string>
<string name="connect_unlock_button_password">Fungua kwa Nenosiri</string>
<string name="connect_unlock_trouble_message">Je, una tatizo la kufungua?</string>
<string name="connect_unlock_fingerprint_title">Fungua kupitia alama ya vidole</string>
<string name="connect_unlock_fingerprint_message">Tumia alama ya vidole ili kuendelea</string>
<string name="connect_unlock_other_options">Chaguzi zingine</string>
<string name="connect_biometric_enroll_fail_title">Suala la Biometriska</string>
<string name="connect_biometric_enroll_fail_message">Utahitaji kusanidi bayometriki hii mwenyewe katika mipangilio ya Android.</string>
<string name="connect_biometric_enroll_fail_button">Nenda kwa Mipangilio</string>
<string name="connect_register_name">Jina</string>
<string name="connect_register_success_title">Akaunti Imeundwa</string>
<string name="connect_register_success_message">Akaunti yako ya ConnectID imeundwa kwa ufanisi na sasa iko tayari kwako kuitumia!</string>
<string name="connect_register_success_button">Sawa</string>
<string name="connect_verify_title">Fungua Chaguzi</string>
<string name="connect_verify_message">Tafadhali sanidi mbinu iliyo hapa chini ili kufungua kifaa chako na akaunti ya ConnectID</string>
<string name="connect_verify_use_fingerprint_long">Tumia Alama ya Kidole Kuunganisha</string>
<string name="connect_verify_fingerprint_configured">Alama yako ya kidole tayari imesanidiwa na itatumika kufungua ConnectID.</string>
<string name="connect_verify_configure_fingerprint">Sanidi Alama ya Kidole</string>
<string name="connect_verify_use_pin_long">Tumia PIN Kuunganisha</string>
<string name="connect_verify_pin_configured">PIN yako tayari imesanidiwa na itatumika kufungua ConnectID.</string>
<string name="connect_verify_configure_pin">Sanidi PIN</string>
<string name="connect_verify_agree">Kubali na Uendelee</string>
<string name="connect_verify_phone_title">Nambari ya Uthibitishaji</string>
<string name="connect_verify_phone_label">Tulijaribu kukutumia SMS inayoishia na %s.</string>
<string name="connect_verify_phone_label_secondary">Tulijaribu kukutumia SMS kwenye nambari yako ya pili ya simu.</string>
<string name="connect_verify_phone_resend">Hukupokea nambari yako ya kuthibitisha? Tuma tena</string>
<string name="connect_verify_phone_resend_wait">Hukupokea nambari yako ya kuthibitisha? Tuma tena baada ya %d s</string>
<string name="connect_verify_phone_change">Badilisha nambari ya simu</string>
<string name="connect_verify_phone_verify">Thibitisha msimbo</string>
<string name="connect_messaging_channel_consent_title">Idhini ya kituo</string>
<string name="connect_messaging_channel_consent_description">Je, unakubali kufungua mazungumzo ya ujumbe kwenye kituo hiki?</string>
<string name="connect_messaging_channel_consent_accept">Kubali</string>
<string name="connect_messaging_channel_consent_decline">Kataa</string>
<string name="connect_last_update">Imesasishwa: %s</string>
<string name="connect_title">Unganisha</string>
<string name="connect_no_jobs">Hujaalikwa kwa fursa zozote zinazotumika. Tafadhali rudi baadaye.</string>
<string name="connect_job_intro_title">Fursa</string>
<string name="connect_job_none_available">Hakuna fursa zinazopatikana kwa sasa</string>
<string name="connect_job_you_will_learn">Kamilisha moduli zifuatazo za kujifunza na upate cheti</string>
<string name="connect_job_no_learning_required">Hakuna kujifunza kunahitajika</string>
<string name="connect_job_go_to_learn_app">Nenda kwa Jifunze Programu</string>
<string name="connect_job_learn_summary">Sehemu %d, saa %d</string>
<string name="connect_learn_progress_title">Jifunze Maendeleo</string>
<string name="connect_learn_complete_title">Mafunzo Yamekamilika!</string>
<string name="connect_learn_need_assessment_title">Mafunzo Yanasubiri</string>
<string name="connect_learn_failed_title">Mafunzo Yameshindwa</string>
<string name="connect_learn_complete_by">Kamilisha Mradi kabla ya %s</string>
<string name="connect_learn_title">Maendeleo ya Kujifunza</string>
<string name="connect_learn_status">Umemaliza masomo %d kati ya %d.\nMaliza kujifunza ili ujishindie cheti chako.</string>
<string name="connect_learn_not_started">Hujamaliza masomo yoyote.\nAnza kujifunza ili kupata cheti chako.</string>
<string name="connect_learn_finished">Umepata cheti cha kazi hii na unastahiki kudai kazi hiyo na kuanza kutoa huduma.\nAlama yako: %d\nAlama za kupita: %d</string>
<string name="your_score">Alama: %d</string>
<string name="connect_learn_need_assessment">Kamilisha tathmini ili kumaliza mafunzo.</string>
<string name="connect_learn_failed">Samahani, hukupata alama za kufaulu kwenye tathmini yako. Tafadhali jaribu tena.\nAlama yako: %d\nAlama ya kupita: %d</string>
<string name="connect_learn_complete">Kamilisha</string>
<string name="connect_learn_certificate">Cheti</string>
<string name="connect_learn_completed">Ilikamilika mnamo: %s</string>
<string name="connect_learn_warning_ended">Kazi imeisha. Hutapata maendeleo yoyote kwa kazi ya ziada.</string>
<string name="connect_learn_review">Kagua Mafunzo</string>
<string name="connect_learn_view_details">Tazama Maelezo ya Kazi</string>
<string name="connect_learn_go_to_assessment">Nenda kwa Tathmini</string>
<string name="connect_learn_try_again">Jaribu Tena</string>
<string name="connect_learn_start">Anza Kujifunza</string>
<string name="connect_learn_continue">Endelea Kujifunza</string>
<string name="connect_delivery_earn_multi">Lipa kwa kila ziara:</string>
<string name="connect_delivery_go">Nenda kwa Programu</string>
<string name="connect_progress_delivery">Uwasilishaji</string>
<string name="connect_progress_title">Maendeleo ya Utoaji</string>
<string name="connect_progress_status">Umekamilisha ziara %d kati ya %d.</string>
<string name="connect_progress_begin_date">Mradi Unaanza %s\nKamilisha Uwasilishaji kabla ya %s</string>
<string name="connect_progress_complete_by">Kamilisha Uwasilishaji kabla ya %s</string>
<string name="connect_progress_ended">Kazi iliisha %s</string>
<string name="connect_progress_review">Kagua Mafunzo</string>
<string name="connect_progress_launch">Zindua Programu</string>
<string name="connect_progress_warning_ended">Kazi imeisha. Hutapata maendeleo yoyote kwa kazi ya ziada.</string>
<string name="connect_progress_warning_not_started">Kazi bado haijaanza. Hutapata maendeleo yoyote kwa kazi.</string>
<string name="connect_progress_warning_max_reached_single">Umekamilisha idadi ya juu zaidi ya kutembelea. Hutapata maendeleo yoyote kwa kazi ya ziada.</string>
<string name="connect_progress_warning_daily_max_reached_single">Umefikia idadi ya juu zaidi ya kutembelewa kwa leo. Hutapata maendeleo yoyote kwa kazi ya ziada.</string>
<string name="connect_progress_warning_max_reached_multi">Umefikia idadi ya juu zaidi ya kutembelewa kwa %s.</string>
<string name="connect_progress_warning_daily_max_reached_multi">Umefikia kikomo chako cha kila siku kwa %s.</string>
<string name="connect_downloading_learn">Inapakua Programu ya Jifunze</string>
<string name="connect_downloading_delivery">Inapakua Programu ya Uwasilishaji</string>
<string name="connect_results_summary_earned">Imelipwa</string>
<string name="connect_results_summary_transferred">Imehamishwa</string>
<string name="connect_results_payment_confirm">Thibitisha</string>
<string name="connect_results_payment_confirm_undo">Tendua uthibitisho</string>
<string name="connect_results_payment_confirmed">Imethibitishwa</string>
<string name="connect_results_payment_not_confirmed">Haijathibitishwa</string>
<string name="connect_payment_confirm_text">Umelipwa!\n%s %s imelipwa %s.\nJe, umepokea malipo?</string>
<string name="connect_payment_confirm_yes">Ndiyo!</string>
<string name="connect_payment_confirm_no">Uliza baadaye</string>
<string name="connect_payment_confirm_failed">Imeshindwa kutuma uthibitisho, tutauliza tena baadaye.</string>
<string name="login_button_connectid">Ingia kwa ConnectID</string>
<string name="login_link_connectid_title">Unganisha kwa ConnectID?</string>
<string name="login_link_connectid_message">Je, ungependa kuunganisha kuingia huku kwa akaunti yako ya ConnectID? Hutahitaji kuandika nenosiri lako katika siku zijazo.</string>
<string name="login_unlink_connectid_title">Je, ungependa kutenganisha ConnectID?</string>
<string name="login_unlink_connectid_message">Naona umeingia na nenosiri lako ingawa ConnectID ilisanidiwa kwa ajili ya kuingia kiotomatiki. Je, ungependa kutenganisha kuingia huku kutoka kwa ConnectID?</string>
<string name="login_link_connectid_yes">Ndiyo</string>
<string name="login_link_connectid_no">Hapana</string>
<string name="login_menu_connect_sign_in">Jisajili kwa ConnectID</string>
<string name="login_menu_connect_forget">Sahau mtumiaji wa ConnectID</string>
<string name="connect_app_install_unknown_error">Usakinishaji wa programu haukufaulu kwa sababu ya hitilafu isiyojulikana</string>
<string name="connect_app_installed">Programu imesakinishwa</string>
<string name="app_with_id_not_found">Programu ya CommCare Inayohitajika haijasakinishwa kwenye kifaa</string>
<string name="audio_recording_notification">Arifa ya Kurekodi Sauti</string>
<string name="user_suspended">Mtumiaji Amesimamishwa. Tafadhali wasiliana na msimamizi.</string>
<string name="connect_job_list_api_failure">Hitilafu ilitokea wakati wa kuunganisha kwenye seva.</string>
<string name="connect_payment_acknowledge_notification_yes">Ndiyo</string>
<string name="connect_payment_acknowledge_notification_no">Hapana</string>
<string name="enter_otp">Weka Msimbo wa SMS</string>
<string name="change">Badilika</string>
<string name="create_a_new_recovery_code">Unda Nambari mpya ya Urejeshaji</string>
<string name="confirm_code">Thibitisha Msimbo</string>
<string name="code">Kanuni</string>
<string name="choose_a_6_digit_recovery_code">Chagua Msimbo wa Urejeshaji wa Dijiti 6</string>
<string name="download_app">Pakua</string>
<string name="progress">Maendeleo</string>
<string name="sync">Sawazisha</string>
<string name="connect_job_info_title">Maelezo ya Fursa</string>
<string name="connect_job_info_delivery_detail">Maelezo ya Uwasilishaji</string>
<string name="connect_job_info_review_delivery">Kagua maelezo ya utoaji</string>
<string name="connect_job_info_visit">%d upeo wa Ziara</string>
<string name="connect_job_info_days">Siku %d kukamilika</string>
<string name="connect_job_info_max_visit">Upeo wa juu wa kutembelewa kwa siku %d</string>
<string name="connect_job_info_visit_charge">Pata hadi %s kwa kutembelewa</string>
<string name="connect_job_info_start_visit">Anza Kutembelea</string>
<string name="connect_job_info_download_delivery">Pakua Uwasilishaji</string>
<string name="connect_job_info_download">Pakua</string>
<string name="connect_progress">Maendeleo</string>
<string name="connect_payment">Malipo</string>
<string name="connect_delivery_progress_description">Hujamaliza masomo yoyote. Anza kujifunza kupata cheti chako.</string>
<string name="connect_click_to_sync_progress">Bofya ili kusawazisha maendeleo</string>
<string name="connect_payment_received">Imepokelewa</string>
<string name="connect_payment_transferred">Imehamishwa</string>
<string name="connect_payment_confirm_transferred">Thibitisha Malipo Yaliyohamishwa</string>
<string name="connect_payment_revoke_transferred">Batilisha Uthibitishaji wa Malipo</string>
<string name="connect_payment_dialog_no">Hapana</string>
<string name="connect_payment_dialog_yes">Ndiyo</string>
<string name="connect_payment_revert">Rudisha</string>
<string name="connect_deactivate_account">Zima Akaunti</string>
<string name="connect_deactivate_account_message">Unakaribia kuzima akaunti hii kabisa...</string>
<string name="connect_deactivate_account_delete">Futa Akaunti</string>
<string name="connect_deactivate_account_go_back">Rudi Nyuma</string>
<string name="connect_deactivate_account_deactivated">Akaunti imezimwa, sasa unaweza kusajili akaunti mpya kwa nambari yako msingi ya simu</string>
<string name="connect_deactivate_account_creation">Sawa</string>
<string name="connect_deactivate_dialog_title">Je, una uhakika?</string>
<string name="connect_deactivate_dialog_description">Je, ungependa kuzima akaunti yako kabisa?</string>
<string name="connect_new_opportunity">Fursa Mpya</string>
<string name="connect_learn">Jifunze</string>
<string name="connect_delivery">Uwasilishaji</string>
<string name="connect_expired">Muda wake umeisha</string>
<string name="connect_job_tile_daily_limit_description">Kikomo cha Kila siku kimefikiwa. Hakuna Malipo ya kuwasilisha fomu</string>
<string name="connect_job_tile_daily_limit">Zaidi ya Kikomo</string>
<string name="connect_recovery_decision_new">Chagua hatua hapa chini</string>
<string name="connect_recovery_button_new">Unda Akaunti Mpya ya ConnectID</string>
<string name="connect_recovery_button_recover">Rejesha Akaunti Iliyopo</string>
<string name="connect_recovery_decision_phone">Tafadhali weka nambari msingi ya simu uliyoweka na akaunti yako</string>
<string name="connect_recovery_button_phone">Endelea</string>
<string name="connect_recovery_button_extended">Chaguo Zaidi</string>
<string name="connect_verify_phone_label_deactivate">Ili kuzima akaunti yako, tafadhali weka msimbo uliotumwa kwa SMS kwa nambari yako msingi ya simu.</string>
<string name="connect_verify_phone_error">Hitilafu katika kuthibitisha nambari ya SMS</string>
<string name="connect_verify_phone_resend_code">Tuma tena Msimbo</string>
<string name="connect_messaging_title">Kutuma ujumbe</string>
<string name="connect_messaging_channel_list_title">Vituo</string>
<string name="connect_messaging_channel_list_unconsented">Kituo ambacho hakijaidhinishwa</string>
<string name="connect_messaging_channel_preview_you">Wewe</string>
<string name="connect_messaging_channel_preview_them">Wao</string>
<string name="connect_messaging_message_notification_title">Ujumbe Mpya</string>
<string name="connect_messaging_message_notification_message">Umepokea ujumbe mpya kutoka kwa %s, bonyeza hapa kutazama.</string>
<string name="connect_messaging_channel_notification_title">Kituo Kipya</string>
<string name="connect_messaging_channel_notification_message">Kituo kipya cha ujumbe kinapatikana kutoka kwa %s, bonyeza hapa ili kutazama</string>
<string name="connect_job_learn_details">Jifunze Maelezo</string>
<string name="connect_progress_ready_for_transition_to_delivery">Umefaulu tathmini na uko tayari kuwasilisha. Tazama hali ya kazi ili kuendelea.</string>
<string name="connect_downloading_status">%d%% Imekamilika</string>
<string name="connect_results_summary_all">Wote</string>
<string name="connect_results_summary_pending">Inasubiri</string>
<string name="connect_results_summary_rejected">Imekataliwa</string>
<string name="connect_results_summary_approved">Imeidhinishwa</string>
<string name="connect_results_summary_remaining">Iliyosalia</string>
<string name="connect_results_summary_remaining_days">%d ndani ya siku %d</string>
<string name="back">Nyuma</string>
<string name="recover">Pata nafuu</string>
<string name="connect_job_info_per_visit">kwa ziara</string>
<string name="connect_job_info_delivery_hours">Saa za Uwasilishaji</string>
<string name="connect_job_info_view_more">Tazama Zaidi</string>
<string name="connect_visit_type_title">%s Ziara</string>
<string name="connect_job_tile_daily_visits">Ziara za Kila Siku</string>
<string name="connect_appbar_title_app_lock">Kufuli ya Programu</string>
<string name="connect_appbar_title_password_verification">Uthibitishaji wa Nenosiri</string>
</resources>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Verify all string resources for proper XML escaping

While adding Swahili translations is valuable, I've identified several XML escaping issues in the strings. It's recommended to perform a thorough review of all strings to ensure:

  1. Proper escaping of quotes (\")
  2. Correct XML attribute closing
  3. Valid string formatting placeholders
  4. Proper handling of escape sequences

Consider using automated tools to validate the XML structure of the strings.xml file.


🏁 Script executed:

#!/bin/bash
# Check for potential XML escaping issues in the strings.xml file

echo "Checking for potentially problematic escape sequences in strings.xml"
grep -n '\\[^ntr\"%]' app/res/values-sw/strings.xml
echo "Checking for quotes that might not be properly escaped"
grep -n '"[^<]' app/res/values-sw/strings.xml
echo "Checking for potentially malformed string format patterns"
grep -n '%[^s0-9d]' app/res/values-sw/strings.xml

Length of output: 58462


Fix XML Escaping Issues in Swahili Translations

Several XML formatting problems were detected that need to be resolved before merging. In particular:

Invalid Escape Sequences:
 – Several strings (e.g., line 85 “advance”: sambaza kwa\inayofuata\nmoja) include invalid escape sequences (like \i) that must be fixed.
 – Unnecessary use of backslashes before single quotes (e.g., in “migration_possible_failure” and “privilege_instructions”) should be removed unless absolutely needed.

Incorrect XML Entity Escaping:
 – The “root_element_error” string shows &lt;manifest\&gt; where the extraneous backslash before &gt; should be removed.
 – In the CCZ error messages (lines 316 and 317), the phrases \Chagua CCZ\" need to be corrected to properly quote the text (e.g., use "Chagua CCZ" without backslashes).

Misplaced or Extra Quotes:
 – The “back_to_manager” string contains an extra ending quote that should be removed.

String Formatting Patterns:
 – Verify that all formatting specifiers (e.g., those in “about_dialog”) are correctly defined and that no superfluous symbols are present.

It’s recommended to run an XML validator or use automated tools to scan all string resources in this file once the above fixes are implemented.

<string name="submission_logs_title">Kuwasilisha Kumbukumbu za CommCare</string>
<string name="remote_form_payload_url">#VALUE!</string>
<string name="url_prompt">Chagua URL</string>
<string name="about_dialog">%. \n* Ishara ya "Penseli" kwa Creologica \n* ishara ya "Daftari" na Carlo \n* ishara ya "Antena" kwa Dima \n* ishara ya "Alama ya Ramani" na P.J. Onori \n* Orodha" ya Landan Lloyd \n* skrini iliyovunjwa na Sam Martin kutoka kwa Nomino Project \n\n\n\n"</string>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix quote escaping in about_dialog string

There are improperly escaped quotes in this string that could cause XML parsing issues:

  1. The quote after "Orodha" should be escaped
  2. The ending quote appears to be part of the value rather than correctly closing the XML attribute
-<string name="about_dialog">%. \n* Ishara ya "Penseli" kwa Creologica \n* ishara ya "Daftari" na Carlo \n* ishara ya "Antena" kwa Dima \n* ishara ya "Alama ya Ramani" na P.J. Onori \n* Orodha" ya Landan Lloyd \n* skrini iliyovunjwa na Sam Martin kutoka kwa Nomino Project \n\n\n\n"</string>
+<string name="about_dialog">%. \n* Ishara ya \"Penseli\" kwa Creologica \n* ishara ya \"Daftari\" na Carlo \n* ishara ya \"Antena\" kwa Dima \n* ishara ya \"Alama ya Ramani\" na P.J. Onori \n* Orodha\" ya Landan Lloyd \n* skrini iliyovunjwa na Sam Martin kutoka kwa Nomino Project \n\n\n\n</string>
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<string name="about_dialog">%. \n* Ishara ya "Penseli" kwa Creologica \n* ishara ya "Daftari" na Carlo \n* ishara ya "Antena" kwa Dima \n* ishara ya "Alama ya Ramani" na P.J. Onori \n* Orodha" ya Landan Lloyd \n* skrini iliyovunjwa na Sam Martin kutoka kwa Nomino Project \n\n\n\n"</string>
<string name="about_dialog">%. \n* Ishara ya \"Penseli\" kwa Creologica \n* ishara ya \"Daftari\" na Carlo \n* ishara ya \"Antena\" kwa Dima \n* ishara ya \"Alama ya Ramani\" na P.J. Onori \n* Orodha\" ya Landan Lloyd \n* skrini iliyovunjwa na Sam Martin kutoka kwa Nomino Project \n\n\n\n</string>

Comment on lines +317 to +318
<string name="recovery_measure_unzip_error">Hitilafu imetokea wakati wa kusakinisha programu kutoka kwa faili ya CCZ. Tafadhali jaribu tena au tafuta faili ya CCZ wewe mwenyewe kwa kubofya kitufe cha \Chagua CCZ\" hapa chini."</string>
<string name="recovery_measure_update_cancelled">Usasishaji umeghairiwa</string>
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix invalid escape sequence in string resources

There are invalid escape sequences in these strings. The backslash before "Chagua CCZ" is not properly escaped, which could cause display or parsing issues.

-<string name="recovery_measure_ccz_scan_failed">Hitilafu ilitokea wakati wa kupakua faili ya CCZ kwenye simu yako. Tafadhali jaribu tena au tafuta faili ya CCZ wewe mwenyewe kwa kubofya kitufe cha \Chagua CCZ\" hapa chini."</string>
+<string name="recovery_measure_ccz_scan_failed">Hitilafu ilitokea wakati wa kupakua faili ya CCZ kwenye simu yako. Tafadhali jaribu tena au tafuta faili ya CCZ wewe mwenyewe kwa kubofya kitufe cha \"Chagua CCZ\" hapa chini.</string>

-<string name="recovery_measure_unzip_error">Hitilafu imetokea wakati wa kusakinisha programu kutoka kwa faili ya CCZ. Tafadhali jaribu tena au tafuta faili ya CCZ wewe mwenyewe kwa kubofya kitufe cha \Chagua CCZ\" hapa chini."</string>
+<string name="recovery_measure_unzip_error">Hitilafu imetokea wakati wa kusakinisha programu kutoka kwa faili ya CCZ. Tafadhali jaribu tena au tafuta faili ya CCZ wewe mwenyewe kwa kubofya kitufe cha \"Chagua CCZ\" hapa chini.</string>

Committable suggestion skipped: line range outside the PR's diff.

@shubham1g5
Copy link
Contributor

Closing this as this should no longer be needed.

@shubham1g5 shubham1g5 closed this Apr 4, 2025
@shubham1g5 shubham1g5 deleted the pm_beta branch April 4, 2025 06:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants