diff --git a/L10N_FIX_PLAN.md b/L10N_FIX_PLAN.md new file mode 100644 index 00000000..bed91ede --- /dev/null +++ b/L10N_FIX_PLAN.md @@ -0,0 +1,195 @@ +# L10n Remediation Plan + +> **Source of truth:** `l10n-review/REPORT.md` (cross-agent verification report, 2026-05-02). +> Every action below traces back to a finding there. If reality and report disagree, run the verification commands in this doc and trust the filesystem. + +## How to resume from a fresh session + +1. `cd` into repo root, read this file, read `l10n-review/REPORT.md`. +2. Find the lowest unchecked `[ ]` row in the active phase below — that's the resume point. +3. Run the **Verification command** for that phase first to confirm reality matches what's checked. If a `[x]` row turns out to be undone, uncheck it and redo. +4. Phases must complete in order: P0 → P1 → P2 → P3. P0 blocks shipping. P1 is small fixes worth landing before review. P2/P3 are deferred (recorded for later). + +## Branch strategy + +- Working branch: `translate-strings` (existing, not yet PR'd as of 2026-05-03). +- One commit per phase (P0, P1) keeps the diff readable. P0 ships independently if needed. + +--- + +## P0 — Critical: missing keys cause English fallback at runtime + +### P0a: 6 legacy biometric error strings missing from sample-shared in ~40 locales + +**Root cause:** `biometric_error_lockout`, `_hardware_unavailable`, `_not_enrolled`, `_timeout`, `_no_space`, `_unknown` were added to `cmp-sample-shared/src/commonMain/composeResources/values/strings.xml` after the bulk-translation pass on most locales. + +**18 locales that DO have them** (verified 2026-05-02 via grep): `am, ar, bn, fil, gu, kn, lt, mk, mr, pa, si, sl, sq, sr, sw, ta, te, ur`. + +**Verification command:** +```bash +grep -L "biometric_error_lockout" cmp-sample-shared/src/commonMain/composeResources/values-*/strings.xml | wc -l +# 0 = done. Anything else = locales still missing. +``` + +**Action:** Add the 6 keys with locale-appropriate translations to every file returned by: +```bash +grep -L "biometric_error_lockout" cmp-sample-shared/src/commonMain/composeResources/values-*/strings.xml +``` + +Translation seed: copy the English source from `values/strings.xml`, machine-translate per locale matching Google Pay convention, then visually spot-check via `cmp-sample-android` install on at least 3 sampled locales (de, hi, ar) before considering P0a complete. + +- [x] P0a executed (script run, all 6 × 40 locales added — translations sourced from `l10n-review/batch_*.json` `suggested_fix` payloads, except he/iw which were translated manually) +- [x] P0a verification grep returns 0 (all 58 locales now have all 6 keys) + +### P0b: Filipino has 3 untranslated English strings + +Per `l10n-review/REPORT.md:501-503`: +- `login_screen_title` = "Login Screen" (English) → "Screen ng Pag-login" +- `home_screen_title` = "Home Screen" (English) → "Home Screen" (Filipino keeps loanword) or "Pangunahing Screen" +- `biometric_setup_title` = "Biometric Setup" (English) → "Pag-setup ng Biometrics" + +File: `cmp-sample-shared/src/commonMain/composeResources/values-fil/strings.xml`. + +**Verification command:** +```bash +grep -E "(Login Screen|Home Screen|Biometric Setup)<" cmp-sample-shared/src/commonMain/composeResources/values-fil/strings.xml +# Empty result = done. +``` + +- [x] P0b: 3 fil strings translated (Screen ng Pag-login / Pangunahing Screen / Pag-setup ng Biometric) + +### P0 Final verification + +```bash +./gradlew :cmp-sample-android:assembleDebug :cmp-sample-shared:compileDebugKotlinAndroid +# Build green = no XML parse errors introduced. +``` + +- [x] Build green (verified `:cmp-sample-android:assembleDebug` + `:cmp-sample-shared:compileDebugKotlinAndroid` + `:compileKotlinDesktop`) +- [x] Single P0 commit landed on `translate-strings` (commit `e3ee15e`) + +--- + +## P1 — High-value targeted fixes, locale-by-locale + +### P1a: `af` cd_* labels use wrong verb "Stawe" + +Per `l10n-review/REPORT.md:529`. File: `cmp-sample-shared/src/commonMain/composeResources/values-af/strings.xml`. + +Replace `Stawe met X` → `Verifieer met X` for the 4 keys: `cd_fingerprint_icon`, `cd_face_scan_icon`, `cd_iris_scan_icon`, `cd_device_credential_icon`. + +Verification: `grep -c "Stawe" cmp-sample-shared/src/commonMain/composeResources/values-af/strings.xml` → 0. + +- [x] P1a executed (4 cd_* keys; `Stawe met` → `Verifieer met`) + +### P1b: `ko` passcode terminology split (암호 vs 비밀번호) + +Per `l10n-review/REPORT.md:130, 138`. Standardize on `비밀번호` (Google Pay KR convention) across: +- `mifos-authenticator-passcode/src/commonMain/composeResources/values-ko/strings.xml` +- `cmp-sample-shared/src/commonMain/composeResources/values-ko/strings.xml` + +Replace every `암호` → `비밀번호`. Watch for compounds (e.g., `암호화` = "encryption" — DO NOT replace that one if it appears). + +Verification: +```bash +grep -n "암호" mifos-authenticator-passcode/src/commonMain/composeResources/values-ko/strings.xml cmp-sample-shared/src/commonMain/composeResources/values-ko/strings.xml +# Empty result, or only 암호화/암호화된 contexts = done. +``` + +- [x] P1b executed (7 occurrences across both ko files; `암호` → `비밀번호`. Verified no `암호화` false positives.) + +### P1c: `ca` "Desbloca" → "Desbloqueja" + +Per `l10n-review/REPORT.md:654`. File: `cmp-sample-shared/src/commonMain/composeResources/values-ca/strings.xml`. + +Affected keys: `biometric_prompt_title`, `biometric_prompt_subtitle`, `unlock_with_biometrics`. + +Also per `REPORT.md:655-657`: `Configureu` → `Configura`, `Torneu-ho` → `Torna-ho` in 3 strings. + +Verification: `grep -E "Desbloca[^q]|Configureu|Torneu-ho" cmp-sample-shared/src/commonMain/composeResources/values-ca/strings.xml` → empty. + +- [x] P1c executed (3× `Desbloca` → `Desbloqueja`, 1× `Configureu` → `Configura`, 2× `Torneu-ho` → `Torna-ho`) + +### P1d: `hi` ASCII period `.` → danda `।` in 3 new error strings + +Per `l10n-review/REPORT.md:250`. File: `cmp-sample-shared/src/commonMain/composeResources/values-hi/strings.xml`. + +Affected keys: `biometric_error_invalid_registration_data`, `biometric_error_invalid_arguments_auth`, `biometric_error_invalid_arguments_registration`. + +Replace each `.` (after Hindi text) with `।`. + +Verification: +```bash +grep -E "biometric_error_invalid.*\." cmp-sample-shared/src/commonMain/composeResources/values-hi/strings.xml +# Should return 0 lines (no ASCII periods in those 3 strings). +``` + +- [x] P1d executed (3 strings rewritten; ASCII `.` → danda `।` ×6) + +### P1 Final verification + +- [x] Build green: `:cmp-sample-android:assembleDebug` + `:cmp-sample-shared:compileDebugKotlinAndroid` + `:mifos-authenticator-passcode:compileDebugKotlinAndroid` all green +- [x] Manual on-device check of af, ko, ca, hi (2026-05-03): all 4 login screens render in correct script/language; ko deep-nav confirms `비밀번호 만들기` (create_passcode) and `비밀번호 표시 전환` (cd_toggle_passcode_visibility) — fix is live, no `암호` form visible. UI dumps + screenshots saved to `/tmp/p1_verify/` +- [x] P1 commit landed (`07fc468` on `translate-strings`) + +--- + +## P2 — Register violations: done (formal applied across all 16 locales) + +**Decision (2026-05-03):** Override the original "deferred" status and the `REPORT.md` case-by-case recommendation (which suggested informal for ~14 of these locales per Google Pay convention). Per user instruction, applied **formal register everywhere** — Sie/Ön/вы/ви/вие/Ви/Vi/Ju/Dvs/Jūs/Вие/εσείς/siz — across all 16 locales. + +**Approach:** 16 parallel `general-purpose` subagents, one per locale, each producing JSON `{key, old, new}` diffs limited to register markers (pronouns, verb endings, possessives, polite-imperative forms). 228 string substitutions applied via Python script. lt was already 100% formal (0 changes). Build green across android-debug + sample-shared compile + passcode-lib compile + desktop targets. + +**Affected locales** (16): `de, hu, ru, uk, bg, be, sr, hr, sl, sq, ro, lt, lv, mk, el, tr`. + +Per-locale specifics in `l10n-review/REPORT.md`: +- `de`: 556 (sample uses `du`, banking standard is `Sie`) +- `hu`: 671-679 (uses formal `Ön`, Google Pay HU uses informal `te`) +- `ru`: 765-776 +- `uk`: 783-796 +- `bg`: 805-816 +- `be`: 892-895 +- `sr`: 824-836 +- `hr`: 843-853 +- `sl`: 860-868 +- `sq`: 875-885 +- `ro`: 912-915 +- `lt`: 939-947 +- `lv`: 954-960 +- `mk`: 969-974 +- `el`: 983-994 +- `tr`: 1003-1012 + +- [x] P2 executed in-line (no GH issues — formal register applied directly) +- [x] All 16 locales have formal register; build green; native-speaker review still recommended for low-resource locales (be, mk, sq, sl, lv, lt, sr, hr) before final ship + +--- + +## P3 — Stylistic / verbosity / terminology drift: deferred indefinitely + +**Decision (2026-05-02):** Skip until P0+P1 are merged and feedback comes in. Many of these are individually-defensible style choices that don't move user-visible quality the way P0/P1 fixes do. + +Examples (non-exhaustive, see `REPORT.md` for full list): +- `cd_toggle_passcode_visibility` verbosity in mr (317), gu (258), bn (296), nb (721) +- "ઉપકરણ"/"ડિવાઇસ" inconsistency in gu (271) +- "ਬਾਇਓਮੈਟ੍ਰਿਕ"/"ਬਾਇਓਮੀਟ੍ਰਿਕ" spelling inconsistency in pa (287) +- ja `try_again` "再試行" preferred over "もう一度試す" (111) +- ar accessibility labels carry definite article (164) +- Many cd_* labels in various locales are nominal phrases instead of imperatives + +- [ ] Optional: open one umbrella GH issue `l10n/style-cleanup` linking to this section. No commits required. + +--- + +## Status log + +| Date | Phase | Action | +|------|-------|--------| +| 2026-05-02 | Plan created | This file written | +| 2026-05-03 | P0a complete | 240 strings added across 40 locales | +| 2026-05-03 | P0b complete | fil 3 strings translated | +| 2026-05-03 | P0 verified | Build green, all 6 × 58 = 348 keys present | +| 2026-05-03 | P0 committed | `e3ee15e` on branch `translate-strings`. P0 fully done. | +| 2026-05-03 | P1a-P1d complete | af / ko / ca / hi quality fixes applied; all 4 verification greps pass; build green. | +| 2026-05-03 | P2 complete | 228 formal-register substitutions across 16 locales × 2 modules. lt unchanged (already formal). Build green. | + diff --git a/LOCALIZATION.md b/LOCALIZATION.md new file mode 100644 index 00000000..97882435 --- /dev/null +++ b/LOCALIZATION.md @@ -0,0 +1,161 @@ +# Localization + +This document describes how `mifos-passcode-cmp` handles user-facing text and how a consuming application controls the language shown at runtime. + +## Bundled locales + +Both `mifos-authenticator-passcode` and `cmp-sample-shared` ship Compose Multiplatform Resource bundles for **57 locale variants plus default English**. The base set matches [`openMF/kmp-project-template`](https://github.com/openMF/kmp-project-template); 18 additional locales were added to align with Google Pay's supported-language list and Mifos's MENA, South Asia, and Sub-Saharan Africa microfinance markets. Default text is English (`values/`). + +| Code (Compose dir) | Language | +| --- | --- | +| `values-af` | Afrikaans | +| `values-am` | Amharic | +| `values-ar` | Arabic (RTL) | +| `values-be` | Belarusian | +| `values-bg` | Bulgarian | +| `values-bn` | Bengali | +| `values-ca` | Catalan | +| `values-cs` | Czech | +| `values-da` | Danish | +| `values-de` | German | +| `values-el` | Greek | +| `values-en-rGB` | English (United Kingdom) | +| `values-es` | Spanish | +| `values-et` | Estonian | +| `values-fa` | Persian (RTL) | +| `values-fi` | Finnish | +| `values-fil` | Filipino | +| `values-fr` | French | +| `values-gu` | Gujarati | +| `values-he` | Hebrew (modern code, paired with `values-iw`) | +| `values-hi` | Hindi | +| `values-hr` | Croatian | +| `values-hu` | Hungarian | +| `values-in` | Indonesian (legacy code; modern is `id`) | +| `values-it` | Italian | +| `values-iw` | Hebrew (legacy code, paired with `values-he` for Android <13) | +| `values-ja` | Japanese | +| `values-kn` | Kannada | +| `values-ko` | Korean | +| `values-lt` | Lithuanian | +| `values-lv` | Latvian | +| `values-mk` | Macedonian | +| `values-ml` | Malayalam | +| `values-mr` | Marathi | +| `values-nb` | Norwegian Bokmål | +| `values-nl` | Dutch | +| `values-pa` | Punjabi (Gurmukhi) | +| `values-pl` | Polish | +| `values-pt-rBR` | Portuguese (Brazil) | +| `values-pt-rPT` | Portuguese (Portugal) | +| `values-ro` | Romanian | +| `values-ru` | Russian | +| `values-si` | Sinhala | +| `values-sk` | Slovak | +| `values-sl` | Slovenian | +| `values-sq` | Albanian | +| `values-sr` | Serbian (Cyrillic) | +| `values-sv` | Swedish | +| `values-sw` | Swahili | +| `values-ta` | Tamil | +| `values-te` | Telugu | +| `values-th` | Thai | +| `values-tr` | Turkish | +| `values-uk` | Ukrainian | +| `values-ur` | Urdu (RTL) | +| `values-vi` | Vietnamese | +| `values-zh-rCN` | Chinese (Simplified) | +| `values-zh-rTW` | Chinese (Traditional) | + +## Translation status + +> **Machine-translated first drafts.** All locale files are generated by an LLM with audit-driven corrections. They are good enough for review and integration work but **have not been native-speaker reviewed**. Treat translations as drafts pending native review before shipping to production. +> +> Specifically flagged for native review: **Thai (`th`)**, **Persian (`fa`)**, **Malayalam (`ml`)**, **Sinhala (`si`)**, **Amharic (`am`)** — auditor declined to certify these. All other locales should be reviewed by a fluent speaker before shipping to that market, particularly the smaller European languages (`af`, `be`, `et`, `lv`, `ca`, `lt`, `sl`, `mk`, `sq`). +> +> **Known sentence-fragment issue:** `biometric_error_lockout` reads as a noun phrase ("Too many failed attempts.") in many Indic languages where the source English would read more naturally as a sentence. This is acceptable as a label but native review may want to recast it as a full sentence per language. +> +> Style decisions follow Google Pay / Wallet conventions: informal `du` in German, `tu` imperative in Romanian, Latin "OK" in Cyrillic locales, `합쇼체` (-습니다) for Korean transactional flows. + +## How locale selection works + +Compose Multiplatform Resources reads the **OS-level locale** at runtime and resolves `stringResource(Res.string.…)` calls against the most specific matching `values-XX/` directory, falling back to the default `values/`. This works automatically across all targets (Android, iOS, Desktop, Web) without any per-platform setup. + +The library does **not** ship its own language picker or persistence — that is the consumer's responsibility. Switching language at runtime requires the consumer to update the OS-reported locale. + +## Per-app locale switching (Android) + +The recommended consumer recipe matches `kmp-project-template`. Persist the chosen locale in your app preferences, then on startup and on user change: + +```kotlin +import androidx.appcompat.app.AppCompatDelegate +import androidx.core.os.LocaleListCompat + +fun applyAppLocale(localeTag: String?) { + val desiredLocales = if (localeTag != null) { + LocaleListCompat.forLanguageTags(localeTag) + } else { + // System default + LocaleListCompat.getEmptyLocaleList() + } + val currentLocales = AppCompatDelegate.getApplicationLocales() + if (currentLocales != desiredLocales) { + AppCompatDelegate.setApplicationLocales(desiredLocales) + } +} +``` + +After this call, all Compose Resources lookups in the library and your app code resolve to the requested locale automatically. No further wiring is needed in the library itself. + +For a complete reference integration including a language picker UI and persistence layer, see: + +- `cmp-navigation/src/commonMain/kotlin/cmp/navigation/AppViewModel.kt` — the `observeLanguage` / `UpdateAppLocale` plumbing +- `cmp-android/src/main/kotlin/cmp/android/app/AndroidApp.kt:restoreSavedLanguage()` — the per-app-locale call site +- `core/model/src/commonMain/kotlin/org/mifos/core/model/LanguageConfig.kt` — the supported-locales enum +- `feature/settings/src/commonMain/kotlin/org/mifos/feature/settings/LanguageDialog.kt` — the picker UI + +in [openMF/kmp-project-template](https://github.com/openMF/kmp-project-template). + +## Per-app locale switching (iOS / Desktop / Web) + +Compose Multiplatform Resources picks up the OS locale on these platforms automatically, but **per-app overrides are not yet wired up by either this library or `kmp-project-template`**: + +- **iOS**: Override requires manipulating `NSBundle.preferredLocalizations` or shipping `LSPreferredLocales` in the consumer app's `Info.plist`. Not yet provided. +- **Desktop (JVM)**: `java.util.Locale.setDefault(Locale.forLanguageTag(tag))` plus a Compose recomposition trigger works in practice. Not yet abstracted. +- **Web (wasmJs / js)**: `navigator.language` is read-only; per-app switching requires a `CompositionLocal`-based override or URL-param scheme. Not yet provided. + +Consumers needing cross-platform locale switching should treat this as an open task and contribute back. + +## Biometric prompt strings + +The biometrics module's `PlatformAuthenticator.authenticate(...)` and `PlatformAuthenticator.registerUser(...)` accept `title`, `subtitle`, `description`, and `negativeButtonText` parameters that are passed through to the platform's biometric prompt UI. **The library does not bundle translations for these strings** — the consumer is expected to pass already-localized strings sourced from its own resources (e.g. via `stringResource(Res.string.your_biometric_prompt_title)`). + +This applies on Android (`BiometricPrompt.PromptInfo`) and iOS (`LAContext.localizedReason` — `title` only; subtitle/description/negativeButtonText are silently ignored). Desktop and Web ignore all four. + +The system-rendered chrome inside the prompt (cancel / "Use PIN" / "Touch sensor" / recoverable error toasts) is rendered by the OS using the **device locale**, not the app locale — this is unavoidable on both Android and iOS. + +## Biometric error mapping + +Authentication and registration errors come back as `BiometricError` sealed cases (`Lockout`, `LockoutPermanent`, `HardwareUnavailable`, `NotEnrolled`, `Timeout`, `NoSpace`, `Unknown`). The consumer maps these to localized strings from its own resources — the library deliberately does not surface platform error prose because those strings are device-locale, not app-locale. + +See `cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/platformAuthentication/BiometricKey.kt` for the `rememberBiometricErrorMessages()` pattern used by the sample app. + +## Adding a new locale + +1. Copy `mifos-authenticator-passcode/src/commonMain/composeResources/values/strings.xml` to `values-XX/strings.xml`. +2. Translate every `` value while preserving the `name="…"` keys verbatim. +3. Repeat for `cmp-sample-shared/src/commonMain/composeResources/values/strings.xml` (the sample app keys). +4. Build to verify Compose Resources picks up the new locale: `./gradlew :mifos-authenticator-passcode:assemble :cmp-sample-shared:assemble`. +5. Submit for native-speaker review. + +## Adding a new string + +1. Add the `` to `values/strings.xml` in the relevant module first (the English source of truth). +2. Add the same key with a placeholder or auto-translated value to all `values-XX/strings.xml` in that module — Compose Resources falls back to the default file for any missing key, but mismatched key sets across locales are a code smell. +3. Reference it via `stringResource(Res.string.your_key)` from a `@Composable` context. + +## Notes for library consumers + +- Strings used by `PasscodeScreen` and friends ship inside the library's resources. Consumers do **not** override them via constructor parameters; the standard Compose Resources locale-resolution mechanism above is the only override path. +- This is a deliberate design choice matching the `kmp-project-template` ecosystem convention. If your app needs to override library strings (rare), contribute the strings upstream rather than monkey-patching. +- Strings rendered as part of the biometric prompt UI come from your app's resources, not the library's. See above. diff --git a/README.md b/README.md index c65c808e..82b6b3b3 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,8 @@ Mifos-Passcode-CMP is a secure and flexible App Lock library built using Kotlin Designed with modularity and security in mind, this library is a foundational part of the Mifos mobile ecosystem and is suitable for any Kotlin Multiplatform project where secure access control is required. +See [LOCALIZATION.md](LOCALIZATION.md) for bundled locales and how to switch language at runtime. + ![Kotlin](https://img.shields.io/badge/Kotlin-7f52ff?style=flat-square&logo=kotlin&logoColor=white) ![Kotlin Multiplatform](https://img.shields.io/badge/Kotlin%20Multiplatform-4c8d3f?style=flat-square&logo=kotlin&logoColor=white) diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-af/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-af/strings.xml new file mode 100644 index 00000000..9808039d --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-af/strings.xml @@ -0,0 +1,77 @@ + + + + Mifos Passcode-voorbeeld + + OK + + Aanmeldskerm + Stel toepassingslot op + + Tuisskerm + Teken uit + Verander kode + Aktiveer biometrika + Deaktiveer biometrika + + Biometrika-opstelling + Beveilig jou toepassing + Gebruik biometrika (vingerafdruk of gesig) vir vinniger en veiliger toegang. + Stel biometrika op + Slaan vir nou oor + + Biometrika is nie op hierdie toestel opgestel nie. Aktiveer vingerafdruk- of gesigsherkenning in jou toestelinstellings en probeer weer. + Biometrika nie op hierdie toestel beskikbaar nie + + Gebruik biometrika + Stel verifikasie-opsie op + Verifieer met Windows Hello + Nie-ondersteunde platform + + Ontsluit toepassing + Ontsluit met PIN, wagwoord, patroon, gesig of vingerafdruk + Registreer jou biometrika + Ontsluit met biometrika + + Boodskap + Verifieer met vingerafdruk + Verifieer met gesigsherkenning + Verifieer met irisskandering + Verifieer met toestel-PIN + Gestoorde biometriese data is ongeldig. Stel biometrie weer op. + Verifikasie het misluk weens ongeldige invoer. Probeer weer. + Registrasie het misluk weens ongeldige invoer. Probeer weer. + + Te veel mislukte pogings. Probeer later weer of ontsluit met jou toestel se PIN. + Biometriese hardeware is tans nie beskikbaar nie. Probeer later weer. + Geen biometrika is geregistreer nie. Stel een op in jou toestelinstellings en probeer weer. + Verifikasie het uitgetel. Probeer weer. + Nie genoeg berging om die bewerking te voltooi nie. + Verifikasie het misluk. Probeer weer. + + + Bevestig ou kode + Bevestig kode + Skep kode + Gebruik jou biometrika of toestelkredensiale om die toepassing vinniger te ontgrendel. + Aktiveer biometriese verifikasie? + Voer jou kode in + Kode vergeet? + Nee + Kodes stem nie ooreen nie. + Slaan oor + Probeer weer + Ja + 4 syfers + 6 syfers + Wissel wagwoordsigbaarheid + Vee uit + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-am/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-am/strings.xml new file mode 100644 index 00000000..a2d429e5 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-am/strings.xml @@ -0,0 +1,76 @@ + + + + የMifos Passcode ናሙና + + እሺ + + የመግቢያ ማያ + የመተግበሪያ ቁልፍ ያቀናብሩ + + መነሻ ማያ + ይውጡ + የይለፍ ኮድ ይቀይሩ + ባዮሜትሪክ ያንቁ + ባዮሜትሪክ ያሰናክሉ + + የባዮሜትሪክ ማቀናበሪያ + መተግበሪያዎን ይጠብቁ + ለፈጣን እና የበለጠ ደህንነት ያለው መዳረሻ ባዮሜትሪክን (የጣት አሻራ ወይም ፊት) ይጠቀሙ። + ባዮሜትሪክ ያቀናብሩ + አሁን ዝለል + + በዚህ መሣሪያ ላይ ባዮሜትሪክ አልተቀናበረም። እባክዎ በመሣሪያ ቅንጅቶች ውስጥ የጣት አሻራ ወይም የፊት መክፈቻን ያንቁ፣ ከዚያ እንደገና ይሞክሩ። + ባዮሜትሪክ በዚህ መሣሪያ ላይ አይገኝም + ብዙ ያልተሳኩ ሙከራዎች። በኋላ ይሞክሩ ወይም በመሣሪያዎ PIN ይክፈቱ። + የባዮሜትሪክ ሃርድዌር አሁን አይገኝም። በኋላ ይሞክሩ። + ምንም ባዮሜትሪክ አልተመዘገበም። በመሣሪያዎ ቅንጅቶች ውስጥ አንዱን ያቀናብሩ እና እንደገና ይሞክሩ። + የማረጋገጫ ጊዜ አልቋል። እንደገና ይሞክሩ። + ሥራውን ለማጠናቀቅ በቂ ማከማቻ የለም። + ማረጋገጫ አልተሳካም። እንደገና ይሞክሩ። + + ባዮሜትሪክ ይጠቀሙ + የማረጋገጫ አማራጭ ያቀናብሩ + Windows Hello በመጠቀም ያረጋግጡ + የማይደገፍ መድረክ + + መተግበሪያ ይክፈቱ + በ PIN፣ የይለፍ ቃል፣ ስርዓተ-ጥለት፣ ፊት ወይም የጣት አሻራ ይክፈቱ + ባዮሜትሪክዎን ይመዝግቡ + በባዮሜትሪክ ይክፈቱ + + መልዕክት + በጣት አሻራ ያረጋግጡ + በመልክ መለያ ያረጋግጡ + በዓይን ቅላት ያረጋግጡ + በመሣሪያ ፒን ያረጋግጡ + የተቀመጠ ባዮሜትሪክ ውሂብ ልክ ያልሆነ ነው። እባክዎ ባዮሜትሪክን እንደገና ያቀናብሩ። + በልክ ያልሆነ ግቤት ምክንያት ማረጋገጫ አልተሳካም። እንደገና ይሞክሩ። + በልክ ያልሆነ ግቤት ምክንያት ምዝገባ አልተሳካም። እንደገና ይሞክሩ። + + + አሮጌ የይለፍ ኮድ ያረጋግጡ + የይለፍ ኮድ ያረጋግጡ + የይለፍ ኮድ ይፍጠሩ + መተግበሪያውን በፍጥነት ለመክፈት የእርስዎን ባዮሜትሪክ ወይም የመሣሪያ ምስክርነቶች ይጠቀሙ። + የባዮሜትሪክ ማረጋገጫን ያንቁ? + የእርስዎን የይለፍ ኮድ ያስገቡ + የይለፍ ኮድ ረሱት? + አይ + የይለፍ ኮዶቹ አይዛመዱም። + ዝለል + እንደገና ይሞክሩ + አዎ + 4 ቁጥር + 6 ቁጥር + የይለፍ ኮድ ታይነትን ቀይር + ሰርዝ + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-ar/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-ar/strings.xml new file mode 100644 index 00000000..03b3bf05 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-ar/strings.xml @@ -0,0 +1,94 @@ + + + + نموذج Mifos Passcode + + + موافق + + + شاشة تسجيل الدخول + إعداد قفل التطبيق + + + الشاشة الرئيسية + تسجيل الخروج + تغيير رمز المرور + تمكين القياسات الحيوية + تعطيل القياسات الحيوية + + + إعداد القياسات الحيوية + أمّن تطبيقك + استخدم القياسات الحيوية (بصمة الإصبع أو الوجه) للوصول الأسرع والأكثر أمانًا. + إعداد القياسات الحيوية + تخطي للآن + + + لم يتم إعداد القياسات الحيوية على هذا الجهاز. يرجى تمكين بصمة الإصبع أو فتح القفل بالوجه في إعدادات الجهاز، ثم المحاولة مرة أخرى. + القياسات الحيوية غير متوفرة على هذا الجهاز + عدد كبير جدًا من المحاولات الفاشلة. حاول لاحقًا أو افتح القفل برمز PIN الخاص بجهازك. + أجهزة القياسات الحيوية غير متوفرة حاليًا. حاول لاحقًا. + لم يتم تسجيل أي قياس حيوي. قم بإعداده في إعدادات الجهاز ثم حاول مرة أخرى. + انتهت مهلة المصادقة. حاول مرة أخرى. + لا توجد مساحة تخزين كافية لإكمال العملية. + فشلت المصادقة. حاول مرة أخرى. + + + استخدام القياسات الحيوية + إعداد خيار المصادقة + المصادقة باستخدام Windows Hello + النظام الأساسي غير مدعوم + + + فتح قفل التطبيق + افتح بواسطة PIN أو كلمة المرور أو النمط أو الوجه أو بصمة الإصبع + تسجيل القياسات الحيوية + فتح القفل باستخدام القياسات الحيوية + + + رسالة + المصادقة ببصمة الإصبع + المصادقة بالتعرف على الوجه + المصادقة بمسح القزحية + المصادقة برمز الجهاز + بيانات القياسات الحيوية المحفوظة غير صالحة. يرجى إعداد القياسات الحيوية مرة أخرى. + فشلت المصادقة بسبب إدخال غير صالح. حاول مرة أخرى. + فشل التسجيل بسبب إدخال غير صالح. حاول مرة أخرى. + + + تأكيد رمز المرور القديم + تأكيد رمز المرور + إنشاء رمز المرور + استخدم القياسات الحيوية أو بيانات اعتماد الجهاز لفتح التطبيق بسرعة أكبر. + تمكين المصادقة بالقياسات الحيوية؟ + أدخل رمز المرور + نسيت رمز المرور؟ + لا + رموز المرور غير متطابقة. + تخطي + حاول مرة أخرى + نعم + ٠ + ١ + ٢ + ٣ + ٤ + ٥ + ٦ + ٧ + ٨ + ٩ + ٤ أرقام + ٦ أرقام + تبديل إظهار رمز المرور + حذف + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-be/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-be/strings.xml new file mode 100644 index 00000000..49ed3b23 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-be/strings.xml @@ -0,0 +1,77 @@ + + + + Прыклад Mifos Passcode + + OK + + Экран уваходу + Наладзіць блакіроўку праграмы + + Галоўны экран + Выйсці + Змяніць код + Уключыць біяметрыю + Адключыць біяметрыю + + Налада біяметрыі + Абараніце сваю праграму + Выкарыстоўвайце біяметрыю (адбітак пальца або твар) для хутчэйшага і больш бяспечнага доступу. + Наладзіць біяметрыю + Пакуль прапусціць + + Біяметрыя не наладжана на гэтай прыладзе. Уключыце адбітак пальца або распазнаванне твару ў наладах прылады і паспрабуйце зноў. + Біяметрыя недаступная на гэтай прыладзе + + Выкарыстоўваць біяметрыю + Наладзіць параметр аўтэнтыфікацыі + Аўтэнтыфікавацца праз Windows Hello + Непадтрымоўваная платформа + + Разблакаваць праграму + Разблакуйце з дапамогай PIN-кода, пароля, графічнага ключа, твару ці адбітка пальца + Зарэгістраваць біяметрыю + Разблакаваць біяметрыяй + + Паведамленне + Аўтэнтыфікацыя адбіткам пальца + Аўтэнтыфікацыя па твары + Аўтэнтыфікацыя па радужцы + Аўтэнтыфікацыя PIN-кодам прылады + Захаваныя біяметрычныя дадзеныя несапраўдныя. Наладзьце біяметрыю зноў. + Не атрымалася аўтэнтыфікацыя з-за несапраўдных дадзеных. Паўтарыце спробу. + Не атрымалася рэгістрацыя з-за несапраўдных дадзеных. Паўтарыце спробу. + + Занадта шмат няўдалых спроб. Паспрабуйце пазней або разблакуйце з дапамогай PIN-кода прылады. + Біяметрычнае абсталяванне зараз недаступнае. Паспрабуйце пазней. + Ніводны біяметрычны метад не зарэгістраваны. Наладзьце ў параметрах прылады і паспрабуйце зноў. + Час аўтэнтыфікацыі скончыўся. Паўтарыце спробу. + Недастаткова памяці для завяршэння аперацыі. + Аўтэнтыфікацыя не ўдалася. Паспрабуйце яшчэ раз. + + + Пацвердзіце стары код + Пацвердзіце код + Стварыць код + Выкарыстоўвайце біяметрыю або ўліковыя даныя прылады, каб хутчэй разблакаваць праграму. + Уключыць біяметрычную аўтэнтыфікацыю? + Увядзіце код + Забылі код? + Не + Коды не супадаюць. + Прапусціць + Паспрабаваць яшчэ раз + Так + 4 лічбы + 6 лічбаў + Пераключыць бачнасць пароля + Выдаліць + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-bg/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-bg/strings.xml new file mode 100644 index 00000000..92f25d96 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-bg/strings.xml @@ -0,0 +1,77 @@ + + + + Пример Mifos Passcode + + OK + + Екран за вход + Настройте заключване на приложението + + Начален екран + Изход + Сменете кода + Включете биометрия + Изключете биометрия + + Настройка на биометрия + Защитете приложението си + Използвайте биометрия (пръстов отпечатък или лице) за по-бърз и сигурен достъп. + Настройте биометрия + Пропуснете засега + + Биометрията не е настроена на това устройство. Активирайте пръстов отпечатък или разпознаване на лице в настройките на устройството и опитайте отново. + Биометрията не е налична на това устройство + + Използвайте биометрия + Настройте опция за удостоверяване + Удостоверете с Windows Hello + Неподдържана платформа + + Отключете приложението + Отключете с PIN, парола, шарка, лице или пръстов отпечатък + Регистрирайте биометрия + Отключете с биометрия + + Съобщение + Удостоверяване с пръстов отпечатък + Удостоверяване с лицево разпознаване + Удостоверяване със сканиране на ириса + Удостоверяване с PIN на устройството + Запазените биометрични данни са невалидни. Настройте биометрията отново. + Удостоверяването е неуспешно поради невалидни данни. Опитайте отново. + Регистрацията е неуспешна поради невалидни данни. Опитайте отново. + + Твърде много неуспешни опити. Опитайте по-късно или отключете с PIN-а на устройството. + Биометричният хардуер в момента не е наличен. Опитайте по-късно. + Няма регистрирана биометрия. Настройте я в настройките на устройството и опитайте отново. + Времето за удостоверяване изтече. Опитайте отново. + Няма достатъчно памет за завършване на операцията. + Удостоверяването е неуспешно. Опитайте отново. + + + Потвърдете стария код + Потвърдете кода + Създайте код + Използвайте биометрията или удостоверенията на устройството, за да отключвате приложението по-бързо. + Да се включи ли биометрично удостоверяване? + Въведете кода + Забравихте кода? + Не + Кодовете не съвпадат. + Пропуснете + Опитайте отново + Да + 4 цифри + 6 цифри + Превключете видимостта на кода + Изтрийте + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-bn/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-bn/strings.xml new file mode 100644 index 00000000..239f2c16 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-bn/strings.xml @@ -0,0 +1,86 @@ + + + + Mifos Passcode নমুনা + + ঠিক আছে + + লগইন স্ক্রিন + অ্যাপ লক সেট আপ করুন + + হোম স্ক্রিন + লগ আউট + পাসকোড পরিবর্তন + বায়োমেট্রিক সক্ষম করুন + বায়োমেট্রিক অক্ষম করুন + + বায়োমেট্রিক সেটআপ + আপনার অ্যাপ সুরক্ষিত করুন + দ্রুত এবং আরও নিরাপদ অ্যাক্সেসের জন্য বায়োমেট্রিক (আঙুলের ছাপ বা মুখ) ব্যবহার করুন। + বায়োমেট্রিক সেট আপ করুন + এখন এড়িয়ে যান + + এই ডিভাইসে বায়োমেট্রিক সেট আপ করা নেই। অনুগ্রহ করে ডিভাইস সেটিংসে আঙুলের ছাপ বা ফেস আনলক সক্ষম করুন, তারপর আবার চেষ্টা করুন। + এই ডিভাইসে বায়োমেট্রিক উপলব্ধ নেই + অনেকবার ব্যর্থ চেষ্টা। পরে আবার চেষ্টা করুন বা আপনার ডিভাইস PIN দিয়ে আনলক করুন। + বায়োমেট্রিক হার্ডওয়্যার বর্তমানে উপলব্ধ নেই। পরে আবার চেষ্টা করুন। + কোন বায়োমেট্রিক নথিভুক্ত করা হয়নি। আপনার ডিভাইস সেটিংসে একটি সেট আপ করুন এবং আবার চেষ্টা করুন। + প্রমাণীকরণের সময় শেষ। আবার চেষ্টা করুন। + অপারেশন সম্পূর্ণ করার জন্য পর্যাপ্ত স্টোরেজ নেই। + প্রমাণীকরণ ব্যর্থ হয়েছে। আবার চেষ্টা করুন। + + বায়োমেট্রিক ব্যবহার করুন + প্রমাণীকরণ বিকল্প সেট আপ করুন + Windows Hello দিয়ে প্রমাণীকরণ করুন + অসমর্থিত প্ল্যাটফর্ম + + অ্যাপ আনলক করুন + PIN, পাসওয়ার্ড, প্যাটার্ন, মুখ বা আঙুলের ছাপ দিয়ে আনলক করুন + আপনার বায়োমেট্রিক নিবন্ধন করুন + বায়োমেট্রিক দিয়ে আনলক করুন + + বার্তা + ফিঙ্গারপ্রিন্ট দিয়ে যাচাই করুন + ফেস রিকগনিশন দিয়ে যাচাই করুন + আইরিস স্ক্যান দিয়ে যাচাই করুন + ডিভাইস PIN দিয়ে যাচাই করুন + সংরক্ষিত বায়োমেট্রিক ডেটা অবৈধ। অনুগ্রহ করে আবার বায়োমেট্রিক্স সেট আপ করুন। + অবৈধ ইনপুটের কারণে যাচাইকরণ ব্যর্থ হয়েছে। আবার চেষ্টা করুন। + অবৈধ ইনপুটের কারণে নিবন্ধন ব্যর্থ হয়েছে। আবার চেষ্টা করুন। + + + পুরানো পাসকোড নিশ্চিত করুন + পাসকোড নিশ্চিত করুন + পাসকোড তৈরি করুন + অ্যাপ আরও দ্রুত আনলক করতে আপনার বায়োমেট্রিক বা ডিভাইস ক্রেডেনশিয়াল ব্যবহার করুন। + বায়োমেট্রিক প্রমাণীকরণ সক্ষম করবেন? + আপনার পাসকোড লিখুন + পাসকোড ভুলে গেছেন? + না + পাসকোডগুলি মিলছে না। + এড়িয়ে যান + আবার চেষ্টা করুন + হ্যাঁ + + + + + + + + + + + ৪ অঙ্ক + ৬ অঙ্ক + পাসকোড দৃশ্যমানতা টগল করুন + মুছুন + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-ca/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-ca/strings.xml new file mode 100644 index 00000000..89eba1db --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-ca/strings.xml @@ -0,0 +1,77 @@ + + + + Exemple de Mifos Passcode + + D\'acord + + Pantalla d\'inici de sessió + Configura el bloqueig de l\'app + + Pantalla d\'inici + Tanca la sessió + Canvia el codi + Activa la biometria + Desactiva la biometria + + Configuració biomètrica + Protegeix la teva app + Utilitza la biometria (empremta o cara) per a un accés més ràpid i segur. + Configura la biometria + Omet per ara + + La biometria no està configurada en aquest dispositiu. Activa l\'empremta digital o el reconeixement facial a la configuració del dispositiu i torna-ho a provar. + Biometria no disponible en aquest dispositiu + + Utilitza la biometria + Configura l\'opció d\'autenticació + Autentica\'t amb Windows Hello + Plataforma no compatible + + Desbloqueja l\'app + Desbloqueja amb el PIN, contrasenya, patró, cara o empremta + Registra la teva biometria + Desbloqueja amb biometria + + Missatge + Autentica amb empremta dactilar + Autentica amb reconeixement facial + Autentica amb escaneig d’iris + Autentica amb el PIN del dispositiu + Les dades biomètriques desades no són vàlides. Configura la biometria de nou. + Ha fallat l’autenticació per dades no vàlides. Torna-ho a provar. + Ha fallat el registre per dades no vàlides. Torna-ho a provar. + + Massa intents fallits. Torna-ho a provar més tard o desbloqueja amb el PIN del dispositiu. + El maquinari biomètric no està disponible ara mateix. Torna-ho a provar més tard. + No hi ha cap dada biomètrica registrada. Configura'n una a la configuració del dispositiu i torna-ho a provar. + L'autenticació ha expirat. Torna-ho a provar. + No hi ha prou emmagatzematge per completar l'operació. + L'autenticació ha fallat. Torna-ho a provar. + + + Confirma el codi antic + Confirma el codi + Crea un codi + Utilitza la biometria o les credencials del dispositiu per desbloquejar l\'aplicació més ràpidament. + Activar l\'autenticació biomètrica? + Introdueix el codi + Has oblidat el codi? + No + Els codis no coincideixen. + Omet + Torna-ho a provar + + 4 dígits + 6 dígits + Commuta la visibilitat del codi + Suprimeix + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-cs/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-cs/strings.xml new file mode 100644 index 00000000..4c67b640 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-cs/strings.xml @@ -0,0 +1,77 @@ + + + + Ukázka Mifos Passcode + + OK + + Přihlašovací obrazovka + Nastavit zámek aplikace + + Domovská obrazovka + Odhlásit se + Změnit kód + Povolit biometrii + Zakázat biometrii + + Nastavení biometrie + Zabezpečte svou aplikaci + Pro rychlejší a bezpečnější přístup používejte biometrii (otisk prstu nebo obličej). + Nastavit biometrii + Prozatím přeskočit + + Biometrie není v tomto zařízení nastavena. Povolte otisk prstu nebo rozpoznávání obličeje v nastavení zařízení a zkuste to znovu. + Biometrie není v tomto zařízení k dispozici + + Použít biometrii + Nastavit možnost ověření + Ověřit pomocí Windows Hello + Nepodporovaná platforma + + Odemknout aplikaci + Odemkněte pomocí PIN, hesla, gesta, obličeje nebo otisku prstu + Zaregistrovat biometrii + Odemknout biometrií + + Zpráva + Ověřit otiskem prstu + Ověřit obličejem + Ověřit duhovkou + Ověřit PINem zařízení + Uložená biometrická data jsou neplatná. Nastavte biometrii znovu. + Ověření selhalo kvůli neplatnému vstupu. Zkuste to znovu. + Registrace selhala kvůli neplatnému vstupu. Zkuste to znovu. + + Příliš mnoho neúspěšných pokusů. Zkuste to znovu nebo odemkněte pomocí PIN kódu zařízení. + Biometrický hardware je momentálně nedostupný. Zkuste to znovu. + Nejsou registrovány žádné biometrické údaje. Nastavte je v nastavení zařízení a zkuste znovu. + Ověření vypršelo. Zkuste to znovu. + Nedostatek úložného prostoru pro dokončení operace. + Ověření selhalo. Zkuste to znovu. + + + Potvrďte starý kód + Potvrďte kód + Vytvořit kód + K rychlejšímu odemčení aplikace použijte biometrii nebo přihlašovací údaje zařízení. + Povolit biometrické ověření? + Zadejte kód + Zapomněli jste kód? + Ne + Kódy se neshodují. + Přeskočit + Zkusit znovu + Ano + 4 číslice + 6 číslic + Přepnout zobrazení kódu + Smazat + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-da/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-da/strings.xml new file mode 100644 index 00000000..232e5d7c --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-da/strings.xml @@ -0,0 +1,77 @@ + + + + Mifos Passcode-eksempel + + OK + + Log ind-skærm + Konfigurer app-lås + + Startskærm + Log ud + Skift adgangskode + Aktivér biometri + Deaktivér biometri + + Biometri-opsætning + Beskyt din app + Brug biometri (fingeraftryk eller ansigt) for hurtigere og mere sikker adgang. + Konfigurer biometri + Spring over for nu + + Biometri er ikke konfigureret på denne enhed. Aktivér fingeraftryk eller ansigtsgenkendelse i enhedens indstillinger, og prøv igen. + Biometri er ikke tilgængelig på denne enhed + + Brug biometri + Konfigurer godkendelsesindstilling + Godkend med Windows Hello + Platform understøttes ikke + + Lås app op + Lås op med PIN-kode, adgangskode, mønster, ansigt eller fingeraftryk + Registrer din biometri + Lås op med biometri + + Meddelelse + Bekræft med fingeraftryk + Bekræft med ansigtsgenkendelse + Bekræft med irisscanning + Bekræft med enhedens PIN + Gemte biometriske data er ugyldige. Konfigurer biometri igen. + Godkendelse mislykkedes på grund af ugyldigt input. Prøv igen. + Registrering mislykkedes på grund af ugyldigt input. Prøv igen. + + For mange mislykkede forsøg. Prøv igen senere, eller lås op med din enheds PIN-kode. + Biometrisk hardware er i øjeblikket utilgængelig. Prøv igen senere. + Ingen biometri er registreret. Konfigurer det i enhedens indstillinger og prøv igen. + Godkendelse udløb. Prøv igen. + Ikke nok lagerplads til at fuldføre handlingen. + Godkendelse mislykkedes. Prøv igen. + + + Bekræft gammel adgangskode + Bekræft adgangskode + Opret adgangskode + Brug din biometri eller enhedsoplysninger til at låse appen hurtigere op. + Aktivér biometrisk godkendelse? + Indtast din adgangskode + Glemt adgangskoden? + Nej + Adgangskoderne stemmer ikke overens. + Spring over + Prøv igen + Ja + 4 cifre + 6 cifre + Skift adgangskodevisning + Slet + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-de/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-de/strings.xml new file mode 100644 index 00000000..3f635c1f --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-de/strings.xml @@ -0,0 +1,77 @@ + + + + Mifos Passcode-Beispiel + + OK + + Anmeldebildschirm + App-Sperre einrichten + + Startbildschirm + Abmelden + Code ändern + Biometrie aktivieren + Biometrie deaktivieren + + Biometrie-Einrichtung + Sichern Sie Ihre App + Verwenden Sie Biometrie (Fingerabdruck oder Gesicht) für schnelleren und sichereren Zugang. + Biometrie einrichten + Vorerst überspringen + + Biometrie ist auf diesem Gerät nicht eingerichtet. Bitte aktivieren Sie Fingerabdruck oder Gesichtserkennung in den Geräteeinstellungen und versuchen Sie es erneut. + Biometrie auf diesem Gerät nicht verfügbar + + Biometrie verwenden + Authentifizierungsoption einrichten + Mit Windows Hello authentifizieren + Plattform nicht unterstützt + + App entsperren + Mit PIN, Passwort, Muster, Gesicht oder Fingerabdruck entsperren + Biometrie registrieren + Mit Biometrie entsperren + + Nachricht + Mit Fingerabdruck authentifizieren + Mit Gesichtserkennung authentifizieren + Mit Iris-Scan authentifizieren + Mit Geräte-PIN authentifizieren + Gespeicherte biometrische Daten sind ungültig. Bitte richten Sie die Biometrie erneut ein. + Authentifizierung aufgrund ungültiger Eingabe fehlgeschlagen. Versuchen Sie es erneut. + Registrierung aufgrund ungültiger Eingabe fehlgeschlagen. Versuchen Sie es erneut. + + Zu viele fehlgeschlagene Versuche. Versuchen Sie es später erneut oder entsperren Sie das Gerät mit Ihrer PIN. + Die biometrische Hardware ist derzeit nicht verfügbar. Versuchen Sie es später erneut. + Keine Biometrie eingerichtet. Richten Sie diese in den Geräteeinstellungen ein und versuchen Sie es erneut. + Authentifizierung abgelaufen. Versuchen Sie es erneut. + Nicht genügend Speicherplatz, um den Vorgang abzuschließen. + Authentifizierung fehlgeschlagen. Versuchen Sie es erneut. + + + Alten Code bestätigen + Code bestätigen + Code erstellen + Verwenden Sie Ihre biometrischen Daten oder die Anmeldedaten des Geräts, um die App schneller zu entsperren. + Biometrische Authentifizierung aktivieren? + Code eingeben + Code vergessen? + Nein + Codes stimmen nicht überein. + Überspringen + Erneut versuchen + Ja + 4 Ziffern + 6 Ziffern + Code-Anzeige umschalten + Löschen + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-el/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-el/strings.xml new file mode 100644 index 00000000..1dbfd7ae --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-el/strings.xml @@ -0,0 +1,77 @@ + + + + Δείγμα Mifos Passcode + + OK + + Οθόνη σύνδεσης + Ρύθμιση κλειδώματος εφαρμογής + + Αρχική οθόνη + Αποσύνδεση + Αλλαγή κωδικού + Ενεργοποίηση βιομετρίας + Απενεργοποίηση βιομετρίας + + Ρύθμιση βιομετρίας + Ασφαλίστε την εφαρμογή σας + Χρησιμοποιήστε τη βιομετρία (δακτυλικό αποτύπωμα ή πρόσωπο) για πιο γρήγορη και ασφαλή πρόσβαση. + Ρύθμιση βιομετρίας + Παράλειψη προς το παρόν + + Η βιομετρία δεν έχει ρυθμιστεί σε αυτή τη συσκευή. Ενεργοποιήστε το δακτυλικό αποτύπωμα ή την αναγνώριση προσώπου στις ρυθμίσεις της συσκευής και δοκιμάστε ξανά. + Η βιομετρία δεν είναι διαθέσιμη σε αυτή τη συσκευή + + Χρήση βιομετρίας + Ρύθμιση επιλογής επαλήθευσης + Επαλήθευση με Windows Hello + Μη υποστηριζόμενη πλατφόρμα + + Ξεκλείδωμα εφαρμογής + Ξεκλειδώστε με PIN, κωδικό, μοτίβο, πρόσωπο ή δακτυλικό αποτύπωμα + Εγγραφή βιομετρίας + Ξεκλείδωμα με βιομετρία + + Μήνυμα + Έλεγχος ταυτότητας με δακτυλικό αποτύπωμα + Έλεγχος ταυτότητας με αναγνώριση προσώπου + Έλεγχος ταυτότητας με σάρωση ίριδας + Έλεγχος ταυτότητας με PIN συσκευής + Τα αποθηκευμένα βιομετρικά δεδομένα δεν είναι έγκυρα. Ρυθμίστε ξανά τα βιομετρικά. + Ο έλεγχος ταυτότητας απέτυχε λόγω μη έγκυρης εισόδου. Δοκιμάστε ξανά. + Η εγγραφή απέτυχε λόγω μη έγκυρης εισόδου. Δοκιμάστε ξανά. + + Πολλές αποτυχημένες προσπάθειες. Δοκιμάστε ξανά αργότερα ή ξεκλειδώστε με το PIN της συσκευής σας. + Το βιομετρικό υλικό δεν είναι διαθέσιμο αυτή τη στιγμή. Δοκιμάστε ξανά αργότερα. + Δεν έχει εγγραφεί βιομετρικό. Ρυθμίστε το στις ρυθμίσεις της συσκευής σας και δοκιμάστε ξανά. + Η επαλήθευση έληξε. Δοκιμάστε ξανά. + Δεν υπάρχει αρκετός χώρος αποθήκευσης για να ολοκληρωθεί η λειτουργία. + Η επαλήθευση απέτυχε. Δοκιμάστε ξανά. + + + Επιβεβαίωση παλιού κωδικού + Επιβεβαίωση κωδικού + Δημιουργία κωδικού + Χρησιμοποιήστε τη βιομετρία ή τα διαπιστευτήρια της συσκευής για πιο γρήγορο ξεκλείδωμα της εφαρμογής. + Ενεργοποίηση βιομετρικής επαλήθευσης; + Εισαγάγετε τον κωδικό σας + Ξεχάσατε τον κωδικό; + Όχι + Οι κωδικοί δεν ταιριάζουν. + Παράλειψη + Δοκιμή ξανά + Ναι + 4 ψηφία + 6 ψηφία + Εναλλαγή εμφάνισης κωδικού + Διαγραφή + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-en-rGB/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-en-rGB/strings.xml new file mode 100644 index 00000000..a625b4c6 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-en-rGB/strings.xml @@ -0,0 +1,77 @@ + + + + Mifos Passcode Sample + + OK + + Login Screen + Set Up App Lock + + Home Screen + Log Out + Change Passcode + Enable Biometrics + Disable Biometrics + + Biometric Setup + Secure Your App + Use biometrics (fingerprint or face) for faster and more secure access. + Set Up Biometrics + Skip for Now + + Biometrics are not set up on this device. Please enable fingerprint or face unlock in your device settings, then try again. + Biometrics not available on this device + + Use Biometrics + Set up authentication option + Authenticate using Windows Hello + Unsupported platform + + Unlock App + Unlock using your PIN, password, pattern, face or fingerprint + Register your biometric + Unlock with Biometrics + + Message + Authenticate with fingerprint + Authenticate with face recognition + Authenticate with iris scan + Authenticate with device PIN + Saved biometric data is invalid. Please set up biometrics again. + Authentication failed due to invalid input. Try again. + Registration failed due to invalid input. Try again. + + Too many failed attempts. Try again later or unlock with your device PIN. + Biometric hardware is currently unavailable. Try again later. + No biometric is enrolled. Set one up in your device settings and try again. + Authentication timed out. Try again. + Not enough storage to complete the operation. + Authentication failed. Try again. + + + Confirm old passcode + Confirm Passcode + Create Passcode + Use your biometrics or device credentials to unlock the app faster. + Enable biometric authentication? + Enter your passcode + Forgotten your passcode? + No + Passcodes do not match. + Skip + Try again + Yes + 4 digits + 6 digits + Toggle passcode visibility + Delete + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-es/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-es/strings.xml new file mode 100644 index 00000000..0c4c5ead --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-es/strings.xml @@ -0,0 +1,77 @@ + + + + Ejemplo de Mifos Passcode + + Aceptar + + Pantalla de inicio de sesión + Configurar bloqueo de app + + Pantalla de inicio + Cerrar sesión + Cambiar código + Activar biometría + Desactivar biometría + + Configuración biométrica + Asegura tu app + Usa biometría (huella o cara) para un acceso más rápido y seguro. + Configurar biometría + Omitir por ahora + + La biometría no está configurada en este dispositivo. Activa la huella digital o el reconocimiento facial en los ajustes del dispositivo y vuelve a intentarlo. + Biometría no disponible en este dispositivo + + Usar biometría + Configurar opción de autenticación + Autenticar con Windows Hello + Plataforma no compatible + + Desbloquear app + Desbloquea con tu PIN, contraseña, patrón, cara o huella + Registra tu biometría + Desbloquear con biometría + + Mensaje + Autenticar con huella dactilar + Autenticar con reconocimiento facial + Autenticar con escaneo de iris + Autenticar con el PIN del dispositivo + Los datos biométricos guardados no son válidos. Vuelve a configurar la biometría. + La autenticación falló debido a una entrada no válida. Inténtalo de nuevo. + El registro falló debido a una entrada no válida. Inténtalo de nuevo. + + Demasiados intentos fallidos. Inténtalo más tarde o desbloquea con el PIN de tu dispositivo. + El hardware biométrico no está disponible en este momento. Inténtalo más tarde. + No hay datos biométricos registrados. Configúralos en los ajustes del dispositivo e inténtalo de nuevo. + La autenticación ha caducado. Inténtalo de nuevo. + No hay suficiente almacenamiento para completar la operación. + Error de autenticación. Inténtalo de nuevo. + + + Confirmar código antiguo + Confirmar código + Crear código + Usa tu biometría o las credenciales del dispositivo para desbloquear la app más rápido. + ¿Activar autenticación biométrica? + Introduce tu código + ¿Olvidaste tu código? + No + Los códigos no coinciden. + Omitir + Inténtalo de nuevo + + 4 dígitos + 6 dígitos + Mostrar u ocultar el código + Borrar + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-et/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-et/strings.xml new file mode 100644 index 00000000..f7a7bc30 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-et/strings.xml @@ -0,0 +1,77 @@ + + + + Mifos Passcode\'i näide + + OK + + Sisselogimise ekraan + Seadista rakenduse lukk + + Avakuva + Logi välja + Muuda koodi + Luba biomeetria + Keela biomeetria + + Biomeetria seadistamine + Kaitse oma rakendust + Kasuta biomeetriat (sõrmejälg või nägu) kiiremaks ja turvalisemaks juurdepääsuks. + Seadista biomeetria + Jäta praegu vahele + + Biomeetria ei ole selles seadmes seadistatud. Luba seadme seadetes sõrmejälg või näotuvastus ja proovi uuesti. + Biomeetria ei ole selles seadmes saadaval + + Kasuta biomeetriat + Seadista autentimisvalik + Autentimine Windows Hello kaudu + Toetamata platvorm + + Ava rakendus + Ava PIN-koodi, parooli, mustri, näo või sõrmejäljega + Registreeri biomeetria + Ava biomeetriaga + + Sõnum + Autendi sõrmejäljega + Autendi näotuvastusega + Autendi iirise skaneerimisega + Autendi seadme PIN-iga + Salvestatud biomeetrilised andmed pole kehtivad. Seadista biomeetria uuesti. + Autentimine ebaõnnestus vigase sisendi tõttu. Proovi uuesti. + Registreerimine ebaõnnestus vigase sisendi tõttu. Proovi uuesti. + + Liiga palju ebaõnnestunud katseid. Proovi hiljem uuesti või ava seadme PIN-koodiga. + Biomeetriline riistvara pole praegu saadaval. Proovi hiljem uuesti. + Ühtegi biomeetriat pole registreeritud. Seadista see seadme seadetes ja proovi uuesti. + Autentimise aeg sai läbi. Proovi uuesti. + Toimingu lõpuleviimiseks pole piisavalt salvestusruumi. + Autentimine ebaõnnestus. Proovi uuesti. + + + Kinnita vana kood + Kinnita kood + Loo kood + Kasuta biomeetriat või seadme mandaate rakenduse kiiremaks avamiseks. + Kas lubada biomeetriline autentimine? + Sisesta kood + Unustasid koodi? + Ei + Koodid ei ühti. + Jäta vahele + Proovi uuesti + Jah + 4 numbrit + 6 numbrit + Lülita pääsukoodi nähtavus sisse/välja + Kustuta + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-fa/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-fa/strings.xml new file mode 100644 index 00000000..d03c647b --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-fa/strings.xml @@ -0,0 +1,87 @@ + + + + نمونه Mifos Passcode + + تأیید + + صفحه ورود + تنظیم قفل برنامه + + صفحه اصلی + خروج + تغییر رمز + فعال‌سازی بیومتریک + غیرفعال‌سازی بیومتریک + + راه‌اندازی بیومتریک + از برنامه خود محافظت کنید + برای دسترسی سریع‌تر و امن‌تر از بیومتریک (اثر انگشت یا چهره) استفاده کنید. + راه‌اندازی بیومتریک + فعلاً رد شود + + بیومتریک در این دستگاه راه‌اندازی نشده است. لطفاً اثر انگشت یا تشخیص چهره را در تنظیمات دستگاه فعال کنید و دوباره تلاش کنید. + بیومتریک در این دستگاه در دسترس نیست + + استفاده از بیومتریک + تنظیم گزینه احراز هویت + احراز هویت با Windows Hello + پلتفرم پشتیبانی‌نشده + + باز کردن قفل برنامه + با PIN، رمز عبور، الگو، چهره یا اثر انگشت قفل را باز کنید + ثبت بیومتریک + باز کردن قفل با بیومتریک + + پیام + احراز هویت با اثر انگشت + احراز هویت با تشخیص چهره + احراز هویت با اسکن عنبیه + احراز هویت با پین دستگاه + داده‌های زیست‌سنجی ذخیره‌شده نامعتبر است. لطفاً دوباره تنظیم کنید. + احراز هویت به‌دلیل ورودی نامعتبر ناموفق بود. دوباره امتحان کنید. + ثبت‌نام به‌دلیل ورودی نامعتبر ناموفق بود. دوباره امتحان کنید. + + خطاهای بیومتریک بیش از حد مجاز. بعداً دوباره تلاش کنید یا با پین دستگاه قفل را باز کنید. + سخت‌افزار بیومتریک در حال حاضر در دسترس نیست. بعداً دوباره تلاش کنید. + هیچ بیومتریکی ثبت نشده است. یکی را در تنظیمات دستگاه راه‌اندازی کنید و دوباره تلاش کنید. + مهلت احراز هویت به پایان رسید. دوباره تلاش کنید. + فضای ذخیره‌سازی کافی برای تکمیل عملیات وجود ندارد. + احراز هویت ناموفق بود. دوباره تلاش کنید. + + + تأیید رمز قدیمی + تأیید رمز + ایجاد رمز + از بیومتریک یا اعتبارنامه‌های دستگاه برای باز کردن سریع‌تر برنامه استفاده کنید. + احراز هویت بیومتریک فعال شود؟ + رمز خود را وارد کنید + رمز را فراموش کرده‌اید؟ + خیر + رمزها مطابقت ندارند. + رد کردن + تلاش مجدد + بله + ۰ + ۱ + ۲ + ۳ + ۴ + ۵ + ۶ + ۷ + ۸ + ۹ + ۴ رقمی + ۶ رقمی + تغییر نمایش رمز + حذف + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-fi/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-fi/strings.xml new file mode 100644 index 00000000..1499e6d2 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-fi/strings.xml @@ -0,0 +1,77 @@ + + + + Mifos Passcode -esimerkki + + OK + + Kirjautumisnäyttö + Määritä sovelluslukko + + Aloitusnäyttö + Kirjaudu ulos + Vaihda tunnusluku + Ota biometria käyttöön + Poista biometria käytöstä + + Biometrian määritys + Suojaa sovelluksesi + Käytä biometriaa (sormenjälki tai kasvot) nopeampaan ja turvallisempaan käyttöön. + Määritä biometria + Ohita toistaiseksi + + Biometriaa ei ole määritetty tällä laitteella. Ota sormenjälki- tai kasvotunnistus käyttöön laitteen asetuksissa ja yritä uudelleen. + Biometria ei ole käytettävissä tällä laitteella + + Käytä biometriaa + Määritä todennusasetus + Todenna Windows Hellolla + Alustaa ei tueta + + Avaa sovellus + Avaa lukitus PIN-koodilla, salasanalla, kuviolla, kasvoilla tai sormenjäljellä + Rekisteröi biometria + Avaa biometrialla + + Viesti + Todenna sormenjäljellä + Todenna kasvojentunnistuksella + Todenna iiriksen skannauksella + Todenna laitteen PIN-koodilla + Tallennetut biometriset tiedot eivät kelpaa. Määritä biometria uudelleen. + Todennus epäonnistui virheellisen syötteen vuoksi. Yritä uudelleen. + Rekisteröinti epäonnistui virheellisen syötteen vuoksi. Yritä uudelleen. + + Liian monta epäonnistunutta yritystä. Yritä myöhemmin uudelleen tai avaa lukitus laitteen PIN-koodilla. + Biometrinen laitteisto ei ole tällä hetkellä käytettävissä. Yritä uudelleen myöhemmin. + Biometristä tunnistusta ei ole rekisteröity. Rekisteröi se laitteen asetuksissa ja yritä uudelleen. + Todennus aikakatkaistiin. Yritä uudelleen. + Tallennustilaa ei ole riittävästi toiminnon suorittamiseen. + Todennus epäonnistui. Yritä uudelleen. + + + Vahvista vanha tunnusluku + Vahvista tunnusluku + Luo tunnusluku + Käytä biometriaa tai laitteen tunnistetietoja avataksesi sovelluksen lukituksen nopeammin. + Otetaanko biometrinen tunnistus käyttöön? + Anna tunnusluku + Unohditko tunnusluvun? + Ei + Tunnusluvut eivät täsmää. + Ohita + Yritä uudelleen + Kyllä + 4 numeroa + 6 numeroa + Vaihda tunnusluvun näkyvyyttä + Poista + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-fil/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-fil/strings.xml new file mode 100644 index 00000000..07e87a3e --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-fil/strings.xml @@ -0,0 +1,76 @@ + + + + Mifos Passcode Halimbawa + + OK + + Screen ng Pag-login + I-setup ang App Lock + + Pangunahing Screen + Mag-log out + Baguhin ang passcode + I-enable ang Biometric + I-disable ang Biometric + + Pag-setup ng Biometric + I-secure ang Iyong App + Gamitin ang biometric (fingerprint o mukha) para sa mas mabilis at mas secure na access. + I-setup ang Biometric + Laktawan muna + + Hindi naka-setup ang biometric sa device na ito. Mangyaring i-enable ang fingerprint o face unlock sa device settings, pagkatapos ay subukang muli. + Hindi available ang biometric sa device na ito + Masyadong maraming hindi matagumpay na pagsubok. Subukan mamaya o i-unlock gamit ang PIN ng iyong device. + Kasalukuyang hindi available ang biometric hardware. Subukan mamaya. + Walang naka-enroll na biometric. Mag-set up ng isa sa device settings at subukang muli. + Nag-time out ang authentication. Subukang muli. + Walang sapat na storage para makumpleto ang operasyon. + Nabigo ang authentication. Subukang muli. + + Gamitin ang Biometric + I-setup ang opsyon ng authentication + Mag-authenticate gamit ang Windows Hello + Hindi sinusuportahang platform + + I-unlock ang App + I-unlock gamit ang PIN, password, pattern, mukha o fingerprint + Irehistro ang iyong biometric + I-unlock gamit ang Biometric + + Mensahe + Mag-authenticate gamit ang fingerprint + Mag-authenticate gamit ang face recognition + Mag-authenticate gamit ang iris scan + Mag-authenticate gamit ang device PIN + Hindi wasto ang naka-save na biometric data. Mangyaring i-set up muli ang biometrics. + Nabigo ang pagpapatotoo dahil sa hindi wastong input. Subukan muli. + Nabigo ang pagpaparehistro dahil sa hindi wastong input. Subukan muli. + + + Kumpirmahin ang lumang passcode + Kumpirmahin ang passcode + Gumawa ng passcode + Gamitin ang iyong biometric o mga kredensyal ng device para mas mabilis na ma-unlock ang app. + I-enable ang biometric authentication? + Ilagay ang iyong passcode + Nakalimutan ang passcode? + Hindi + Hindi tugma ang mga passcode. + Laktawan + Subukang muli + Oo + 4 na digit + 6 na digit + I-toggle ang visibility ng passcode + Burahin + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-fr/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-fr/strings.xml new file mode 100644 index 00000000..c8057865 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-fr/strings.xml @@ -0,0 +1,77 @@ + + + + Exemple Mifos Passcode + + OK + + Écran de connexion + Configurer le verrouillage + + Écran d\'accueil + Se déconnecter + Changer le code + Activer la biométrie + Désactiver la biométrie + + Configuration biométrique + Sécurisez votre application + Utilisez la biométrie (empreinte ou visage) pour un accès plus rapide et sécurisé. + Configurer la biométrie + Ignorer pour l\'instant + + La biométrie n\'est pas configurée sur cet appareil. Veuillez activer l\'empreinte ou la reconnaissance faciale dans les paramètres de l\'appareil, puis réessayez. + Biométrie non disponible sur cet appareil + + Utiliser la biométrie + Configurer l\'option d\'authentification + S\'authentifier avec Windows Hello + Plateforme non prise en charge + + Déverrouiller l\'application + Déverrouillez avec votre code PIN, mot de passe, schéma, visage ou empreinte + Enregistrer votre biométrie + Déverrouiller avec la biométrie + + Message + S’authentifier avec l’empreinte digitale + S’authentifier avec la reconnaissance faciale + S’authentifier avec le scan de l’iris + S’authentifier avec le code de l’appareil + Les données biométriques enregistrées sont invalides. Reconfigurez la biométrie. + Échec de l’authentification en raison d’une entrée non valide. Réessayez. + Échec de l’enregistrement en raison d’une entrée non valide. Réessayez. + + Trop de tentatives échouées. Réessayez plus tard ou déverrouillez avec le code PIN de votre appareil. + Le matériel biométrique est actuellement indisponible. Réessayez plus tard. + Aucune donnée biométrique enregistrée. Configurez-en une dans les paramètres de votre appareil et réessayez. + L\'authentification a expiré. Réessayez. + Espace de stockage insuffisant pour terminer l\'opération. + Échec de l\'authentification. Réessayez. + + + Confirmer l\'ancien code + Confirmer le code + Créer un code + Utilisez votre biométrie ou les identifiants de votre appareil pour déverrouiller l\'application plus rapidement. + Activer l\'authentification biométrique ? + Saisissez votre code + Code oublié ? + Non + Les codes ne correspondent pas. + Ignorer + Réessayer + Oui + 4 chiffres + 6 chiffres + Afficher ou masquer le code + Supprimer + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-gu/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-gu/strings.xml new file mode 100644 index 00000000..51601418 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-gu/strings.xml @@ -0,0 +1,86 @@ + + + + Mifos Passcode નમૂનો + + બરાબર + + લૉગિન સ્ક્રીન + એપ લૉક સેટઅપ કરો + + હોમ સ્ક્રીન + લૉગ આઉટ + પાસકોડ બદલો + બાયોમેટ્રિક ચાલુ કરો + બાયોમેટ્રિક બંધ કરો + + બાયોમેટ્રિક સેટઅપ + તમારી એપ સુરક્ષિત કરો + ઝડપી અને વધુ સુરક્ષિત ઍક્સેસ માટે બાયોમેટ્રિક (ફિંગરપ્રિન્ટ અથવા ચહેરો) નો ઉપયોગ કરો. + બાયોમેટ્રિક સેટઅપ કરો + હમણાં છોડો + + આ ડિવાઇસ પર બાયોમેટ્રિક સેટઅપ થયેલ નથી. કૃપા કરીને ડિવાઇસ સેટિંગ્સમાં ફિંગરપ્રિન્ટ અથવા ચહેરો અનલૉક ચાલુ કરો, પછી ફરી પ્રયાસ કરો. + આ ડિવાઇસ પર બાયોમેટ્રિક ઉપલબ્ધ નથી + ઘણા નિષ્ફળ પ્રયાસો. પછી પ્રયાસ કરો અથવા તમારા ડિવાઇસ PIN થી અનલૉક કરો. + બાયોમેટ્રિક હાર્ડવેર હાલમાં ઉપલબ્ધ નથી. પછી પ્રયાસ કરો. + કોઈ બાયોમેટ્રિક નોંધાયેલ નથી. તમારા ડિવાઇસ સેટિંગ્સમાં એક સેટઅપ કરો અને ફરી પ્રયાસ કરો. + પ્રમાણીકરણ સમય સમાપ્ત થયો. ફરી પ્રયાસ કરો. + કાર્ય પૂર્ણ કરવા માટે પૂરતી જગ્યા નથી. + પ્રમાણીકરણ નિષ્ફળ થયું. ફરી પ્રયાસ કરો. + + બાયોમેટ્રિકનો ઉપયોગ કરો + પ્રમાણીકરણ વિકલ્પ સેટઅપ કરો + Windows Hello દ્વારા પ્રમાણીકરણ કરો + અસમર્થિત પ્લેટફોર્મ + + એપ અનલૉક કરો + PIN, પાસવર્ડ, પેટર્ન, ચહેરો અથવા ફિંગરપ્રિન્ટ વડે અનલૉક કરો + તમારું બાયોમેટ્રિક નોંધણી કરો + બાયોમેટ્રિક વડે અનલૉક કરો + + સંદેશ + ફિંગરપ્રિન્ટથી પ્રમાણિત કરો + ચહેરાની ઓળખથી પ્રમાણિત કરો + આઈરિસ સ્કેનથી પ્રમાણિત કરો + ઉપકરણના PINથી પ્રમાણિત કરો + સાચવેલ બાયોમેટ્રિક ડેટા અમાન્ય છે. કૃપા કરીને બાયોમેટ્રિક્સ ફરીથી સેટ કરો. + અમાન્ય ઇનપુટના કારણે પ્રમાણીકરણ નિષ્ફળ થયું. ફરી પ્રયાસ કરો. + અમાન્ય ઇનપુટના કારણે નોંધણી નિષ્ફળ થઈ. ફરી પ્રયાસ કરો. + + + જૂના પાસકોડની ખાતરી કરો + પાસકોડની ખાતરી કરો + પાસકોડ બનાવો + એપને વધુ ઝડપથી અનલૉક કરવા માટે તમારા બાયોમેટ્રિક અથવા ડિવાઇસ ઓળખપત્રોનો ઉપયોગ કરો. + બાયોમેટ્રિક પ્રમાણીકરણ ચાલુ કરવું છે? + તમારો પાસકોડ દાખલ કરો + પાસકોડ ભૂલી ગયા? + ના + પાસકોડ મેળ ખાતા નથી. + છોડો + ફરી પ્રયાસ કરો + હા + + + + + + + + + + + ૪ અંક + ૬ અંક + પાસકોડ દૃશ્યતા ટૉગલ કરો + કાઢી નાખો + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-he/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-he/strings.xml new file mode 100644 index 00000000..c7d5d006 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-he/strings.xml @@ -0,0 +1,77 @@ + + + + דוגמה של Mifos Passcode + + אישור + + מסך כניסה + הגדר נעילת אפליקציה + + מסך הבית + התנתק + שנה קוד + הפעל ביומטריה + השבת ביומטריה + + הגדרת ביומטריה + אבטח את האפליקציה שלך + השתמש בביומטריה (טביעת אצבע או פנים) לגישה מהירה ומאובטחת יותר. + הגדר ביומטריה + דלג בינתיים + + הביומטריה לא הוגדרה במכשיר זה. הפעל זיהוי טביעת אצבע או זיהוי פנים בהגדרות המכשיר ונסה שוב. + הביומטריה אינה זמינה במכשיר זה + + השתמש בביומטריה + הגדר אפשרות אימות + אמת באמצעות Windows Hello + פלטפורמה לא נתמכת + + פתיחת האפליקציה + פתח באמצעות PIN, סיסמה, תבנית, פנים או טביעת אצבע + רישום ביומטריה + פתח באמצעות ביומטריה + + הודעה + אימות באמצעות טביעת אצבע + אימות באמצעות זיהוי פנים + אימות באמצעות סריקת קשתית + אימות באמצעות קוד המכשיר + הנתונים הביומטריים השמורים אינם תקפים. הגדר את הביומטריה מחדש. + האימות נכשל בשל קלט לא חוקי. נסה שוב. + הרישום נכשל בשל קלט לא חוקי. נסה שוב. + + יותר מדי ניסיונות שנכשלו. נסה שוב מאוחר יותר או פתח עם קוד המכשיר. + חומרת הזיהוי הביומטרי אינה זמינה כרגע. נסה שוב מאוחר יותר. + לא רשום זיהוי ביומטרי. הגדר אחד בהגדרות המכשיר ונסה שוב. + פג הזמן הקצוב לאימות. נסה שוב. + אין מספיק אחסון להשלמת הפעולה. + האימות נכשל. נסה שוב. + + + אישור קוד ישן + אישור קוד + יצירת קוד + השתמש בביומטריה או באישורי המכשיר כדי לפתוח את האפליקציה מהר יותר. + לאפשר אימות ביומטרי? + הזן את הקוד שלך + שכחת את הקוד? + לא + הקודים אינם תואמים. + דלג + נסה שוב + כן + 4 ספרות + 6 ספרות + הצג או הסתר את הקוד + מחק + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-hi/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-hi/strings.xml new file mode 100644 index 00000000..2f4399c5 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-hi/strings.xml @@ -0,0 +1,87 @@ + + + + Mifos Passcode नमूना + + ठीक है + + लॉगिन स्क्रीन + ऐप लॉक सेट अप करें + + होम स्क्रीन + लॉग आउट + पासकोड बदलें + बायोमेट्रिक सक्षम करें + बायोमेट्रिक अक्षम करें + + बायोमेट्रिक सेटअप + अपना ऐप सुरक्षित करें + तेज़ और अधिक सुरक्षित पहुँच के लिए बायोमेट्रिक (फ़िंगरप्रिंट या चेहरा) का उपयोग करें। + बायोमेट्रिक सेटअप करें + अभी के लिए छोड़ें + + इस डिवाइस पर बायोमेट्रिक सेटअप नहीं है। कृपया डिवाइस सेटिंग्स में फ़िंगरप्रिंट या फ़ेस अनलॉक सक्षम करें, फिर पुनः प्रयास करें। + इस डिवाइस पर बायोमेट्रिक उपलब्ध नहीं है + + बायोमेट्रिक का उपयोग करें + प्रमाणीकरण विकल्प सेटअप करें + Windows Hello से प्रमाणित करें + असमर्थित प्लेटफ़ॉर्म + + ऐप अनलॉक करें + PIN, पासवर्ड, पैटर्न, चेहरा या फ़िंगरप्रिंट से अनलॉक करें + अपना बायोमेट्रिक पंजीकृत करें + बायोमेट्रिक से अनलॉक करें + + संदेश + फ़िंगरप्रिंट से प्रमाणित करें + फ़ेस रिकग्निशन से प्रमाणित करें + आइरिस स्कैन से प्रमाणित करें + डिवाइस PIN से प्रमाणित करें + सहेजा गया बायोमेट्रिक डेटा अमान्य है। कृपया बायोमेट्रिक्स फिर से सेट करें। + अमान्य इनपुट के कारण प्रमाणीकरण विफल रहा। फिर से प्रयास करें। + अमान्य इनपुट के कारण पंजीकरण विफल रहा। फिर से प्रयास करें। + + बहुत अधिक विफल प्रयास। कृपया बाद में पुनः प्रयास करें या अपने डिवाइस PIN से अनलॉक करें। + बायोमेट्रिक हार्डवेयर अभी उपलब्ध नहीं है। कृपया बाद में पुनः प्रयास करें। + कोई बायोमेट्रिक पंजीकृत नहीं है। कृपया अपने डिवाइस सेटिंग्स में एक सेट करें और पुनः प्रयास करें। + प्रमाणीकरण का समय समाप्त हो गया। पुनः प्रयास करें। + ऑपरेशन पूर्ण करने के लिए पर्याप्त संग्रहण नहीं है। + प्रमाणीकरण विफल हुआ। पुनः प्रयास करें। + + + पुराने पासकोड की पुष्टि करें + पासकोड की पुष्टि करें + पासकोड बनाएं + ऐप को तेज़ी से अनलॉक करने के लिए अपने बायोमेट्रिक या डिवाइस क्रेडेंशियल का उपयोग करें। + बायोमेट्रिक प्रमाणीकरण सक्षम करें? + अपना पासकोड दर्ज करें + पासकोड भूल गए? + नहीं + पासकोड मेल नहीं खाते। + छोड़ें + पुनः प्रयास करें + हाँ + + + + + + + + + + + ४ अंक + ६ अंक + पासकोड दिखाएं या छिपाएं + हटाएं + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-hr/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-hr/strings.xml new file mode 100644 index 00000000..2375efe8 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-hr/strings.xml @@ -0,0 +1,77 @@ + + + + Primjer Mifos Passcode + + U redu + + Zaslon prijave + Postavite zaključavanje aplikacije + + Početni zaslon + Odjava + Promijenite kod + Omogućite biometriju + Onemogućite biometriju + + Postavljanje biometrije + Zaštitite Vašu aplikaciju + Koristite biometriju (otisak prsta ili lice) za brži i sigurniji pristup. + Postavite biometriju + Preskočite zasad + + Biometrija nije postavljena na ovom uređaju. Omogućite otisak prsta ili prepoznavanje lica u postavkama uređaja i pokušajte ponovno. + Biometrija nije dostupna na ovom uređaju + + Koristite biometriju + Postavite opciju autentifikacije + Autentificirajte se Windows Hellom + Nepodržana platforma + + Otključajte aplikaciju + Otključajte PIN-om, lozinkom, uzorkom, licem ili otiskom prsta + Registrirajte biometriju + Otključajte biometrijom + + Poruka + Autentificirajte otiskom prsta + Autentificirajte prepoznavanjem lica + Autentificirajte skeniranjem šarenice + Autentificirajte PIN-om uređaja + Spremljeni biometrijski podaci nisu valjani. Ponovno postavite biometriju. + Autentifikacija nije uspjela zbog nevažećeg unosa. Pokušajte ponovno. + Registracija nije uspjela zbog nevažećeg unosa. Pokušajte ponovno. + + Previše neuspjelih pokušaja. Pokušajte ponovno kasnije ili otključajte PIN-om uređaja. + Biometrijski hardver trenutno nije dostupan. Pokušajte ponovno kasnije. + Nema registriranih biometrijskih podataka. Postavite ih u postavkama uređaja i pokušajte ponovno. + Autentifikacija je istekla. Pokušajte ponovno. + Nema dovoljno prostora za dovršetak operacije. + Autentifikacija nije uspjela. Pokušajte ponovno. + + + Potvrdite stari kod + Potvrdite kod + Stvorite kod + Koristite biometriju ili vjerodajnice uređaja za brže otključavanje aplikacije. + Omogućiti biometrijsku autentifikaciju? + Unesite kod + Zaboravili ste kod? + Ne + Kodovi se ne podudaraju. + Preskoči + Pokušajte ponovno + Da + 4 znamenke + 6 znamenki + Uključite/isključite prikaz koda + Izbrišite + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-hu/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-hu/strings.xml new file mode 100644 index 00000000..bc81e418 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-hu/strings.xml @@ -0,0 +1,77 @@ + + + + Mifos Passcode példa + + OK + + Bejelentkezési képernyő + Alkalmazászár beállítása + + Kezdőképernyő + Kijelentkezés + Kód módosítása + Biometria engedélyezése + Biometria letiltása + + Biometria beállítása + Védje alkalmazását + Használjon biometriát (ujjlenyomat vagy arc) a gyorsabb és biztonságosabb hozzáférésért. + Biometria beállítása + Most kihagyás + + Ezen az eszközön nincs biometria beállítva. Engedélyezze az ujjlenyomatot vagy az arcfelismerést az eszköz beállításaiban, majd próbálja újra. + A biometria nem érhető el ezen az eszközön + + Biometria használata + Hitelesítési beállítás konfigurálása + Hitelesítés Windows Hello segítségével + Nem támogatott platform + + Alkalmazás feloldása + Feloldás PIN-kóddal, jelszóval, mintával, arccal vagy ujjlenyomattal + Biometria regisztrálása + Feloldás biometriával + + Üzenet + Hitelesítés ujjlenyomattal + Hitelesítés arcfelismeréssel + Hitelesítés íriszszkenneléssel + Hitelesítés a készülék PIN-kódjával + A mentett biometrikus adatok érvénytelenek. Állítsa be újra a biometriát. + A hitelesítés sikertelen volt érvénytelen bemenet miatt. Próbálja újra. + A regisztráció sikertelen volt érvénytelen bemenet miatt. Próbálja újra. + + Túl sok sikertelen kísérlet. Próbálja újra később, vagy oldja fel az eszköz PIN-kódjával. + A biometrikus hardver jelenleg nem érhető el. Próbálja újra később. + Nincs regisztrált biometrikus adat. Állítsa be az eszköz beállításaiban, majd próbálja újra. + A hitelesítés lejárt. Próbálja újra. + Nincs elég tárhely a művelet elvégzéséhez. + A hitelesítés sikertelen volt. Próbálja újra. + + + Régi kód megerősítése + Kód megerősítése + Kód létrehozása + Használja a biometriát vagy az eszköz hitelesítő adatait az alkalmazás gyorsabb feloldásához. + Biometrikus hitelesítés engedélyezése? + Adja meg a kódot + Elfelejtette a kódot? + Nem + A kódok nem egyeznek. + Kihagyás + Próbálja újra + Igen + 4 számjegy + 6 számjegy + Kód láthatóságának váltása + Törlés + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-in/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-in/strings.xml new file mode 100644 index 00000000..d41f1b23 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-in/strings.xml @@ -0,0 +1,77 @@ + + + + Contoh Mifos Passcode + + OK + + Layar login + Atur kunci aplikasi + + Layar utama + Keluar + Ubah kode + Aktifkan biometrik + Nonaktifkan biometrik + + Pengaturan biometrik + Amankan aplikasi Anda + Gunakan biometrik (sidik jari atau wajah) untuk akses yang lebih cepat dan lebih aman. + Atur biometrik + Lewati untuk sekarang + + Biometrik belum diatur di perangkat ini. Aktifkan sidik jari atau pengenalan wajah di pengaturan perangkat, lalu coba lagi. + Biometrik tidak tersedia di perangkat ini + + Gunakan biometrik + Atur opsi autentikasi + Autentikasi dengan Windows Hello + Platform tidak didukung + + Buka kunci aplikasi + Buka kunci dengan PIN, kata sandi, pola, wajah, atau sidik jari + Daftarkan biometrik Anda + Buka dengan biometrik + + Pesan + Autentikasi dengan sidik jari + Autentikasi dengan pengenalan wajah + Autentikasi dengan pemindaian iris + Autentikasi dengan PIN perangkat + Data biometrik tersimpan tidak valid. Silakan siapkan biometrik lagi. + Autentikasi gagal karena input tidak valid. Coba lagi. + Pendaftaran gagal karena input tidak valid. Coba lagi. + + Terlalu banyak percobaan yang gagal. Coba lagi nanti atau buka kunci dengan PIN perangkat Anda. + Perangkat keras biometrik saat ini tidak tersedia. Coba lagi nanti. + Tidak ada biometrik yang terdaftar. Atur di pengaturan perangkat dan coba lagi. + Autentikasi habis waktu. Coba lagi. + Penyimpanan tidak cukup untuk menyelesaikan operasi. + Autentikasi gagal. Coba lagi. + + + Konfirmasi kode lama + Konfirmasi kode + Buat kode + Gunakan biometrik atau kredensial perangkat untuk membuka kunci aplikasi lebih cepat. + Aktifkan autentikasi biometrik? + Masukkan kode Anda + Lupa kode? + Tidak + Kode tidak cocok. + Lewati + Coba lagi + Ya + 4 digit + 6 digit + Alihkan visibilitas kode sandi + Hapus + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-it/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-it/strings.xml new file mode 100644 index 00000000..66f88054 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-it/strings.xml @@ -0,0 +1,77 @@ + + + + Esempio Mifos Passcode + + OK + + Schermata di accesso + Configura blocco app + + Schermata principale + Disconnetti + Cambia codice + Attiva biometria + Disattiva biometria + + Configurazione biometria + Proteggi la tua app + Usa la biometria (impronta o volto) per un accesso più rapido e sicuro. + Configura biometria + Salta per ora + + La biometria non è configurata su questo dispositivo. Attiva l\'impronta digitale o il riconoscimento facciale nelle impostazioni del dispositivo e riprova. + Biometria non disponibile su questo dispositivo + + Usa biometria + Configura opzione di autenticazione + Autenticati con Windows Hello + Piattaforma non supportata + + Sblocca l\'app + Sblocca con PIN, password, sequenza, volto o impronta + Registra la tua biometria + Sblocca con biometria + + Messaggio + Autenticati con l’impronta digitale + Autenticati con il riconoscimento facciale + Autenticati con la scansione dell’iride + Autenticati con il PIN del dispositivo + I dati biometrici salvati non sono validi. Configura nuovamente la biometria. + Autenticazione non riuscita a causa di input non valido. Riprova. + Registrazione non riuscita a causa di input non valido. Riprova. + + Troppi tentativi falliti. Riprova più tardi o sblocca con il PIN del dispositivo. + L\'hardware biometrico non è al momento disponibile. Riprova più tardi. + Nessuna biometria registrata. Configurane una nelle impostazioni del dispositivo e riprova. + Autenticazione scaduta. Riprova. + Spazio di archiviazione insufficiente per completare l\'operazione. + Autenticazione non riuscita. Riprova. + + + Conferma il vecchio codice + Conferma codice + Crea codice + Usa la biometria o le credenziali del dispositivo per sbloccare l\'app più velocemente. + Attivare l\'autenticazione biometrica? + Inserisci il codice + Codice dimenticato? + No + I codici non corrispondono. + Salta + Riprova + + 4 cifre + 6 cifre + Mostra o nascondi il codice + Elimina + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-iw/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-iw/strings.xml new file mode 100644 index 00000000..c7d5d006 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-iw/strings.xml @@ -0,0 +1,77 @@ + + + + דוגמה של Mifos Passcode + + אישור + + מסך כניסה + הגדר נעילת אפליקציה + + מסך הבית + התנתק + שנה קוד + הפעל ביומטריה + השבת ביומטריה + + הגדרת ביומטריה + אבטח את האפליקציה שלך + השתמש בביומטריה (טביעת אצבע או פנים) לגישה מהירה ומאובטחת יותר. + הגדר ביומטריה + דלג בינתיים + + הביומטריה לא הוגדרה במכשיר זה. הפעל זיהוי טביעת אצבע או זיהוי פנים בהגדרות המכשיר ונסה שוב. + הביומטריה אינה זמינה במכשיר זה + + השתמש בביומטריה + הגדר אפשרות אימות + אמת באמצעות Windows Hello + פלטפורמה לא נתמכת + + פתיחת האפליקציה + פתח באמצעות PIN, סיסמה, תבנית, פנים או טביעת אצבע + רישום ביומטריה + פתח באמצעות ביומטריה + + הודעה + אימות באמצעות טביעת אצבע + אימות באמצעות זיהוי פנים + אימות באמצעות סריקת קשתית + אימות באמצעות קוד המכשיר + הנתונים הביומטריים השמורים אינם תקפים. הגדר את הביומטריה מחדש. + האימות נכשל בשל קלט לא חוקי. נסה שוב. + הרישום נכשל בשל קלט לא חוקי. נסה שוב. + + יותר מדי ניסיונות שנכשלו. נסה שוב מאוחר יותר או פתח עם קוד המכשיר. + חומרת הזיהוי הביומטרי אינה זמינה כרגע. נסה שוב מאוחר יותר. + לא רשום זיהוי ביומטרי. הגדר אחד בהגדרות המכשיר ונסה שוב. + פג הזמן הקצוב לאימות. נסה שוב. + אין מספיק אחסון להשלמת הפעולה. + האימות נכשל. נסה שוב. + + + אישור קוד ישן + אישור קוד + יצירת קוד + השתמש בביומטריה או באישורי המכשיר כדי לפתוח את האפליקציה מהר יותר. + לאפשר אימות ביומטרי? + הזן את הקוד שלך + שכחת את הקוד? + לא + הקודים אינם תואמים. + דלג + נסה שוב + כן + 4 ספרות + 6 ספרות + הצג או הסתר את הקוד + מחק + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-ja/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-ja/strings.xml new file mode 100644 index 00000000..a8ac0ae0 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-ja/strings.xml @@ -0,0 +1,77 @@ + + + + Mifos Passcode サンプル + + OK + + ログイン画面 + アプリロックを設定 + + ホーム画面 + ログアウト + パスコードを変更 + 生体認証を有効にする + 生体認証を無効にする + + 生体認証の設定 + アプリを保護 + 生体認証(指紋または顔)を使って、より速く安全にアクセスできます。 + 生体認証を設定 + 今はスキップ + + このデバイスには生体認証が設定されていません。デバイス設定で指紋または顔認証を有効にしてから、もう一度お試しください。 + このデバイスでは生体認証を利用できません + + 生体認証を使用 + 認証オプションを設定 + Windows Hello で認証 + サポートされていないプラットフォーム + + アプリのロック解除 + PIN、パスワード、パターン、顔、または指紋でロック解除 + 生体認証を登録 + 生体認証でロック解除 + + メッセージ + 指紋で認証 + 顔認証で認証 + 虹彩スキャンで認証 + デバイスのPINで認証 + 保存された生体認証データが無効です。生体認証を再設定してください。 + 入力が無効なため認証に失敗しました。もう一度お試しください。 + 入力が無効なため登録に失敗しました。もう一度お試しください。 + + 認証の失敗回数が上限を超えました。しばらく待ってから再試行するか、デバイスのPINで解除してください。 + 生体認証ハードウェアは現在ご利用いただけません。しばらくしてからもう一度お試しください。 + 生体認証が登録されていません。デバイス設定で登録してから、もう一度お試しください。 + 認証がタイムアウトしました。もう一度お試しください。 + ストレージの空き容量が不足しているため、操作を完了できません。 + 認証に失敗しました。もう一度お試しください。 + + + 古いパスコードを確認 + パスコードを確認 + パスコードを作成 + 生体認証またはデバイス認証情報を使ってアプリをすばやくロック解除できます。 + 生体認証を有効にしますか? + パスコードを入力 + パスコードをお忘れですか? + いいえ + パスコードが一致しません。 + スキップ + もう一度試す + はい + 4桁 + 6桁 + パスコードの表示を切り替え + 削除 + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-kn/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-kn/strings.xml new file mode 100644 index 00000000..3c270b6d --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-kn/strings.xml @@ -0,0 +1,86 @@ + + + + Mifos Passcode ಮಾದರಿ + + ಸರಿ + + ಲಾಗಿನ್ ಸ್ಕ್ರೀನ್ + ಆ್ಯಪ್ ಲಾಕ್ ಸೆಟಪ್ ಮಾಡಿ + + ಹೋಮ್ ಸ್ಕ್ರೀನ್ + ಲಾಗ್ ಔಟ್ + ಪಾಸ್‌ಕೋಡ್ ಬದಲಾಯಿಸಿ + ಬಯೋಮೆಟ್ರಿಕ್ ಸಕ್ರಿಯಗೊಳಿಸಿ + ಬಯೋಮೆಟ್ರಿಕ್ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ + + ಬಯೋಮೆಟ್ರಿಕ್ ಸೆಟಪ್ + ನಿಮ್ಮ ಆ್ಯಪ್ ಸುರಕ್ಷಿತಗೊಳಿಸಿ + ವೇಗವಾದ ಮತ್ತು ಹೆಚ್ಚು ಸುರಕ್ಷಿತ ಪ್ರವೇಶಕ್ಕಾಗಿ ಬಯೋಮೆಟ್ರಿಕ್ (ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಅಥವಾ ಮುಖ) ಬಳಸಿ. + ಬಯೋಮೆಟ್ರಿಕ್ ಸೆಟಪ್ ಮಾಡಿ + ಸದ್ಯಕ್ಕೆ ಬಿಟ್ಟುಬಿಡಿ + + ಈ ಸಾಧನದಲ್ಲಿ ಬಯೋಮೆಟ್ರಿಕ್ ಸೆಟಪ್ ಆಗಿಲ್ಲ. ದಯವಿಟ್ಟು ಸಾಧನ ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಅಥವಾ ಮುಖ ಅನ್‌ಲಾಕ್ ಸಕ್ರಿಯಗೊಳಿಸಿ, ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ. + ಈ ಸಾಧನದಲ್ಲಿ ಬಯೋಮೆಟ್ರಿಕ್ ಲಭ್ಯವಿಲ್ಲ + ಬಹಳಷ್ಟು ವಿಫಲ ಪ್ರಯತ್ನಗಳು. ನಂತರ ಪ್ರಯತ್ನಿಸಿ ಅಥವಾ ನಿಮ್ಮ ಸಾಧನ PIN ನೊಂದಿಗೆ ಅನ್‌ಲಾಕ್ ಮಾಡಿ. + ಬಯೋಮೆಟ್ರಿಕ್ ಹಾರ್ಡ್‌ವೇರ್ ಪ್ರಸ್ತುತ ಲಭ್ಯವಿಲ್ಲ. ನಂತರ ಪ್ರಯತ್ನಿಸಿ. + ಯಾವುದೇ ಬಯೋಮೆಟ್ರಿಕ್ ನೋಂದಾಯಿಸಲಾಗಿಲ್ಲ. ನಿಮ್ಮ ಸಾಧನ ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಒಂದನ್ನು ಸೆಟಪ್ ಮಾಡಿ ಮತ್ತು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ. + ದೃಢೀಕರಣ ಸಮಯ ಮುಗಿದಿದೆ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ. + ಕಾರ್ಯವನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಸಾಕಷ್ಟು ಸಂಗ್ರಹಣೆ ಇಲ್ಲ. + ದೃಢೀಕರಣ ವಿಫಲವಾಯಿತು. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ. + + ಬಯೋಮೆಟ್ರಿಕ್ ಬಳಸಿ + ದೃಢೀಕರಣ ಆಯ್ಕೆಯನ್ನು ಸೆಟಪ್ ಮಾಡಿ + Windows Hello ಬಳಸಿ ದೃಢೀಕರಿಸಿ + ಬೆಂಬಲವಿಲ್ಲದ ಪ್ಲಾಟ್‌ಫಾರ್ಮ್ + + ಆ್ಯಪ್ ಅನ್‌ಲಾಕ್ ಮಾಡಿ + PIN, ಪಾಸ್‌ವರ್ಡ್, ಪ್ಯಾಟರ್ನ್, ಮುಖ ಅಥವಾ ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಮೂಲಕ ಅನ್‌ಲಾಕ್ ಮಾಡಿ + ನಿಮ್ಮ ಬಯೋಮೆಟ್ರಿಕ್ ನೋಂದಾಯಿಸಿ + ಬಯೋಮೆಟ್ರಿಕ್ ಮೂಲಕ ಅನ್‌ಲಾಕ್ ಮಾಡಿ + + ಸಂದೇಶ + ಬೆರಳಚ್ಚಿನಿಂದ ದೃಢೀಕರಿಸಿ + ಮುಖ ಗುರುತಿನಿಂದ ದೃಢೀಕರಿಸಿ + ಐರಿಸ್ ಸ್ಕ್ಯಾನಿಂದ ದೃಢೀಕರಿಸಿ + ಸಾಧನ PIN ನಿಂದ ದೃಢೀಕರಿಸಿ + ಉಳಿಸಿದ ಬಯೋಮೆಟ್ರಿಕ್ ಡೇಟಾ ಅಮಾನ್ಯವಾಗಿದೆ. ದಯವಿಟ್ಟು ಬಯೋಮೆಟ್ರಿಕ್ಸ್ ಅನ್ನು ಮತ್ತೆ ಹೊಂದಿಸಿ. + ಅಮಾನ್ಯ ಇನ್‌ಪುಟ್‌ನ ಕಾರಣ ದೃಢೀಕರಣ ವಿಫಲವಾಗಿದೆ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ. + ಅಮಾನ್ಯ ಇನ್‌ಪುಟ್‌ನ ಕಾರಣ ನೋಂದಣಿ ವಿಫಲವಾಗಿದೆ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ. + + + ಹಳೆಯ ಪಾಸ್‌ಕೋಡ್ ಖಚಿತಪಡಿಸಿ + ಪಾಸ್‌ಕೋಡ್ ಖಚಿತಪಡಿಸಿ + ಪಾಸ್‌ಕೋಡ್ ರಚಿಸಿ + ಆ್ಯಪ್ ಅನ್ನು ವೇಗವಾಗಿ ಅನ್‌ಲಾಕ್ ಮಾಡಲು ನಿಮ್ಮ ಬಯೋಮೆಟ್ರಿಕ್ ಅಥವಾ ಸಾಧನದ ರುಜುವಾತುಗಳನ್ನು ಬಳಸಿ. + ಬಯೋಮೆಟ್ರಿಕ್ ದೃಢೀಕರಣವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಬೇಕೆ? + ನಿಮ್ಮ ಪಾಸ್‌ಕೋಡ್ ನಮೂದಿಸಿ + ಪಾಸ್‌ಕೋಡ್ ಮರೆತಿರುವಿರಾ? + ಇಲ್ಲ + ಪಾಸ್‌ಕೋಡ್‌ಗಳು ಹೊಂದಿಕೆಯಾಗುತ್ತಿಲ್ಲ. + ಬಿಟ್ಟುಬಿಡಿ + ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ + ಹೌದು + + + + + + + + + + + ೪ ಅಂಕಿ + ೬ ಅಂಕಿ + ಪಾಸ್‌ಕೋಡ್ ಗೋಚರತೆ ಬದಲಾಯಿಸಿ + ಅಳಿಸಿ + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-ko/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-ko/strings.xml new file mode 100644 index 00000000..7952fc3e --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-ko/strings.xml @@ -0,0 +1,77 @@ + + + + Mifos Passcode 샘플 + + 확인 + + 로그인 화면 + 앱 잠금 설정 + + 홈 화면 + 로그아웃 + 비밀번호 변경 + 생체 인식 사용 + 생체 인식 사용 안 함 + + 생체 인식 설정 + 앱 보안 강화 + 생체 인식(지문 또는 얼굴)을 사용해 더 빠르고 안전하게 접근하세요. + 생체 인식 설정 + 지금은 건너뛰기 + + 이 기기에 생체 인식이 설정되지 않았습니다. 기기 설정에서 지문 또는 얼굴 인식을 활성화한 후 다시 시도하세요. + 이 기기에서는 생체 인식을 사용할 수 없습니다 + + 생체 인식 사용 + 인증 옵션 설정 + Windows Hello로 인증 + 지원되지 않는 플랫폼 + + 앱 잠금 해제 + PIN, 비밀번호, 패턴, 얼굴 또는 지문으로 잠금 해제 + 생체 인식 등록 + 생체 인식으로 잠금 해제 + + 메시지 + 지문으로 인증 + 얼굴 인식으로 인증 + 홍채 스캔으로 인증 + 기기 PIN으로 인증 + 저장된 생체 인식 데이터가 잘못되었습니다. 생체 인식을 다시 설정해 주세요. + 잘못된 입력으로 인증에 실패했습니다. 다시 시도해 주세요. + 잘못된 입력으로 등록에 실패했습니다. 다시 시도해 주세요. + + 인증 실패 횟수가 초과되었습니다. 잠시 후 다시 시도하거나 기기 PIN으로 잠금을 해제하세요. + 생체 인식 하드웨어를 현재 사용할 수 없습니다. 잠시 후 다시 시도하세요. + 등록된 생체 인식 정보가 없습니다. 기기 설정에서 등록한 후 다시 시도하세요. + 인증 시간이 초과되었습니다. 다시 시도하세요. + 저장 공간이 부족하여 작업을 완료할 수 없습니다. + 인증에 실패했습니다. 다시 시도하세요. + + + 이전 비밀번호 확인 + 비밀번호 확인 + 비밀번호 만들기 + 생체 인식 또는 기기 자격 증명을 사용하여 앱을 더 빠르게 잠금 해제하세요. + 생체 인증을 사용하시겠습니까? + 비밀번호 입력 + 비밀번호를 잊으셨나요? + 아니요 + 비밀번호가 일치하지 않습니다. + 건너뛰기 + 다시 시도 + + 4자리 + 6자리 + 비밀번호 표시 전환 + 삭제 + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-lt/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-lt/strings.xml new file mode 100644 index 00000000..ac5ab11e --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-lt/strings.xml @@ -0,0 +1,76 @@ + + + + Mifos Passcode pavyzdys + + Gerai + + Prisijungimo ekranas + Nustatyti programos užraktą + + Pagrindinis ekranas + Atsijungti + Keisti kodą + Įjungti biometriją + Išjungti biometriją + + Biometrijos nustatymas + Apsaugokite savo programą + Naudokite biometriją (piršto atspaudą arba veidą) greitesnei ir saugesnei prieigai. + Nustatyti biometriją + Praleisti dabar + + Biometrija šiame įrenginyje nenustatyta. Įjunkite piršto atspaudą arba veido atpažinimą įrenginio nustatymuose ir bandykite dar kartą. + Biometrija šiame įrenginyje nepasiekiama + Per daug nesėkmingų bandymų. Bandykite vėliau arba atrakinkite įrenginio PIN kodu. + Biometrijos aparatūra šiuo metu nepasiekiama. Bandykite vėliau. + Nėra užregistruotos biometrijos. Nustatykite ją įrenginio nustatymuose ir bandykite dar kartą. + Autentifikavimo laikas baigėsi. Bandykite dar kartą. + Nepakanka saugyklos operacijai užbaigti. + Autentifikavimas nepavyko. Bandykite dar kartą. + + Naudoti biometriją + Nustatyti autentifikavimo parinktį + Autentifikuoti naudojant Windows Hello + Nepalaikoma platforma + + Atrakinti programą + Atrakinkite naudodami PIN kodą, slaptažodį, raštą, veidą ar piršto atspaudą + Registruoti biometriją + Atrakinti biometrija + + Pranešimas + Autentifikuoti pirštų atspaudais + Autentifikuoti veido atpažinimu + Autentifikuoti rainelės skenavimu + Autentifikuoti įrenginio PIN kodu + Įrašyti biometriniai duomenys negalioja. Iš naujo nustatykite biometriją. + Autentifikavimas nepavyko dėl neteisingos įvesties. Bandykite dar kartą. + Registracija nepavyko dėl neteisingos įvesties. Bandykite dar kartą. + + + Patvirtinkite seną kodą + Patvirtinkite kodą + Sukurti kodą + Naudokite biometriją arba įrenginio kredencialus, kad greičiau atrakintumėte programą. + Įjungti biometrinę autentifikaciją? + Įveskite kodą + Pamiršote kodą? + Ne + Kodai nesutampa. + Praleisti + Bandyti dar kartą + Taip + 4 skaitmenys + 6 skaitmenys + Perjungti slaptažodžio matomumą + Ištrinti + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-lv/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-lv/strings.xml new file mode 100644 index 00000000..5cde8968 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-lv/strings.xml @@ -0,0 +1,77 @@ + + + + Mifos Passcode paraugs + + Labi + + Pieteikšanās ekrāns + Iestatīt lietotnes bloķēšanu + + Sākuma ekrāns + Izrakstīties + Mainīt kodu + Iespējot biometriju + Atspējot biometriju + + Biometrijas iestatīšana + Aizsargājiet savu lietotni + Izmantojiet biometriju (pirksta nospiedumu vai seju) ātrākai un drošākai piekļuvei. + Iestatīt biometriju + Pagaidām izlaist + + Biometrija šajā ierīcē nav iestatīta. Iespējojiet pirksta nospiedumu vai sejas atpazīšanu ierīces iestatījumos un mēģiniet vēlreiz. + Biometrija šajā ierīcē nav pieejama + + Izmantot biometriju + Iestatīt autentifikācijas opciju + Autentificēties ar Windows Hello + Neatbalstīta platforma + + Atbloķēt lietotni + Atbloķējiet ar PIN, paroli, rakstu, seju vai pirksta nospiedumu + Reģistrējiet biometriju + Atbloķēt ar biometriju + + Ziņojums + Autentificēties ar pirkstu nospiedumu + Autentificēties ar sejas atpazīšanu + Autentificēties ar varavīksnenes skenēšanu + Autentificēties ar ierīces PIN + Saglabātie biometriskie dati nav derīgi. Lūdzu, iestatiet biometriju vēlreiz. + Autentifikācija neizdevās nederīgas ievades dēļ. Mēģiniet vēlreiz. + Reģistrācija neizdevās nederīgas ievades dēļ. Mēģiniet vēlreiz. + + Pārāk daudz neveiksmīgu mēģinājumu. Mēģiniet vēlāk vai atbloķējiet ar ierīces PIN. + Biometriskā aparatūra šobrīd nav pieejama. Mēģiniet vēlāk. + Nav reģistrēts neviens biometrisks dati. Iestatiet ierīces iestatījumos un mēģiniet vēlreiz. + Autentifikācijas laiks beidzās. Mēģiniet vēlreiz. + Nepietiek krātuves, lai pabeigtu darbību. + Autentifikācija neizdevās. Mēģiniet vēlreiz. + + + Apstipriniet veco kodu + Apstipriniet kodu + Izveidot kodu + Izmantojiet biometriju vai ierīces akreditācijas datus, lai ātrāk atbloķētu lietotni. + Iespējot biometrisko autentifikāciju? + Ievadiet kodu + Aizmirsāt kodu? + + Kodi nesakrīt. + Izlaist + Mēģināt vēlreiz + + 4 cipari + 6 cipari + Pārslēgt piekļuves koda redzamību + Dzēst + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-mk/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-mk/strings.xml new file mode 100644 index 00000000..a6d6843f --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-mk/strings.xml @@ -0,0 +1,76 @@ + + + + Пример Mifos Passcode + + Во ред + + Екран за најава + Подесете заклучување на апликацијата + + Почетен екран + Одјавете се + Променете го кодот + Овозможете биометрија + Оневозможете биометрија + + Поставување на биометрија + Заштитете ја Вашата апликација + Користете биометрија (отпечаток од прст или лице) за побрз и побезбеден пристап. + Подесете биометрија + Прескокнете засега + + Биометријата не е поставена на овој уред. Овозможете отпечаток од прст или препознавање на лице во поставките на уредот и обидете се повторно. + Биометријата не е достапна на овој уред + Премногу неуспешни обиди. Обидете се подоцна или отклучете со PIN кодот на уредот. + Биометрискиот хардвер моментално не е достапен. Обидете се подоцна. + Не е регистрирана биометрија. Поставете една во поставките на уредот и обидете се повторно. + Времето за автентикација истече. Обидете се повторно. + Нема доволно простор за завршување на операцијата. + Автентикацијата не успеа. Обидете се повторно. + + Користете биометрија + Подесете опција за автентикација + Автентикација со Windows Hello + Неподдржана платформа + + Отклучете ја апликацијата + Отклучете со PIN, лозинка, шема, лице или отпечаток од прст + Регистрирајте биометрија + Отклучете со биометрија + + Порака + Автентицирајте со отпечаток од прст + Автентицирајте со препознавање лице + Автентицирајте со скенирање на ирис + Автентицирајте со PIN на уредот + Зачуваните биометриски податоци не се валидни. Поставете ја биометријата повторно. + Автентификацијата не успеа поради неважечки внес. Обидете се повторно. + Регистрацијата не успеа поради неважечки внес. Обидете се повторно. + + + Потврдете го стариот код + Потврдете го кодот + Креирајте код + Користете биометрија или акредитиви на уредот за побрзо отклучување на апликацијата. + Овозможи биометриска автентикација? + Внесете го кодот + Го заборавивте кодот? + Не + Кодовите не се совпаѓаат. + Прескокни + Обидете се повторно + Да + 4 цифри + 6 цифри + Префрлете видливост на кодот + Избришете + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-ml/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-ml/strings.xml new file mode 100644 index 00000000..ccfede0c --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-ml/strings.xml @@ -0,0 +1,87 @@ + + + + Mifos Passcode സാമ്പിൾ + + ശരി + + ലോഗിൻ സ്ക്രീൻ + ആപ്പ് ലോക്ക് സജ്ജീകരിക്കുക + + ഹോം സ്ക്രീൻ + ലോഗ് ഔട്ട് + പാസ്സ്‌കോഡ് മാറ്റുക + ബയോമെട്രിക്സ് പ്രവർത്തനക്ഷമമാക്കുക + ബയോമെട്രിക്സ് അപ്രാപ്തമാക്കുക + + ബയോമെട്രിക് സജ്ജീകരണം + നിങ്ങളുടെ ആപ്പ് സുരക്ഷിതമാക്കുക + വേഗത്തിലുള്ള ഒപ്പം കൂടുതൽ സുരക്ഷിതമായ ആക്സസിന് ബയോമെട്രിക് (വിരലടയാളം അല്ലെങ്കിൽ മുഖം) ഉപയോഗിക്കുക. + ബയോമെട്രിക് സജ്ജീകരിക്കുക + ഇപ്പോൾ ഒഴിവാക്കുക + + ഈ ഉപകരണത്തിൽ ബയോമെട്രിക് സജ്ജീകരിച്ചിട്ടില്ല. ദയവായി ഉപകരണ ക്രമീകരണങ്ങളിൽ വിരലടയാളം അല്ലെങ്കിൽ മുഖം അൺലോക്ക് പ്രവർത്തനക്ഷമമാക്കി വീണ്ടും ശ്രമിക്കുക. + ഈ ഉപകരണത്തിൽ ബയോമെട്രിക് ലഭ്യമല്ല + + ബയോമെട്രിക് ഉപയോഗിക്കുക + പ്രാമാണീകരണ ഓപ്ഷൻ സജ്ജീകരിക്കുക + Windows Hello ഉപയോഗിച്ച് പ്രാമാണീകരിക്കുക + പിന്തുണയ്ക്കാത്ത പ്ലാറ്റ്ഫോം + + ആപ്പ് അൺലോക്ക് ചെയ്യുക + PIN, പാസ്‌വേഡ്, പാറ്റേൺ, മുഖം അല്ലെങ്കിൽ വിരലടയാളം ഉപയോഗിച്ച് അൺലോക്ക് ചെയ്യുക + നിങ്ങളുടെ ബയോമെട്രിക് രജിസ്റ്റർ ചെയ്യുക + ബയോമെട്രിക് ഉപയോഗിച്ച് അൺലോക്ക് ചെയ്യുക + + സന്ദേശം + ഫിംഗർപ്രിന്റ് ഉപയോഗിച്ച് പ്രാമാണീകരിക്കുക + മുഖം തിരിച്ചറിയൽ ഉപയോഗിച്ച് പ്രാമാണീകരിക്കുക + ഐറിസ് സ്കാൻ ഉപയോഗിച്ച് പ്രാമാണീകരിക്കുക + ഉപകരണ PIN ഉപയോഗിച്ച് പ്രാമാണീകരിക്കുക + സംരക്ഷിച്ച ബയോമെട്രിക് ഡാറ്റ അസാധുവാണ്. ദയവായി ബയോമെട്രിക്സ് വീണ്ടും സജ്ജമാക്കുക. + അസാധു ഇൻപുട്ട് കാരണം പ്രാമാണീകരണം പരാജയപ്പെട്ടു. വീണ്ടും ശ്രമിക്കുക. + അസാധു ഇൻപുട്ട് കാരണം രജിസ്ട്രേഷൻ പരാജയപ്പെട്ടു. വീണ്ടും ശ്രമിക്കുക. + + വളരെ അധികം പരാജയ ശ്രമങ്ങൾ. പിന്നീട് ശ്രമിക്കുക അല്ലെങ്കിൽ ഉപകരണ PIN ഉപയോഗിച്ച് അൺലോക്ക് ചെയ്യുക. + ബയോമെട്രിക് ഹാർഡ്‌വെയർ നിലവിൽ ലഭ്യമല്ല. പിന്നീട് ശ്രമിക്കുക. + ഒരു ബയോമെട്രിക്കും എൻറോൾ ചെയ്തിട്ടില്ല. ഉപകരണ ക്രമീകരണങ്ങളിൽ ഒന്ന് സജ്ജീകരിച്ച് വീണ്ടും ശ്രമിക്കുക. + പ്രാമാണീകരണ സമയം കഴിഞ്ഞു. വീണ്ടും ശ്രമിക്കുക. + പ്രക്രിയ പൂർത്തിയാക്കാൻ ആവശ്യമായ സംഭരണം ഇല്ല. + പ്രാമാണീകരണം പരാജയപ്പെട്ടു. വീണ്ടും ശ്രമിക്കുക. + + + പഴയ പാസ്സ്‌കോഡ് സ്ഥിരീകരിക്കുക + പാസ്സ്‌കോഡ് സ്ഥിരീകരിക്കുക + പാസ്സ്‌കോഡ് സൃഷ്ടിക്കുക + ആപ്പ് വേഗത്തിൽ അൺലോക്ക് ചെയ്യാൻ നിങ്ങളുടെ ബയോമെട്രിക് അല്ലെങ്കിൽ ഉപകരണ ക്രെഡൻഷ്യലുകൾ ഉപയോഗിക്കുക. + ബയോമെട്രിക് പ്രാമാണീകരണം പ്രവർത്തനക്ഷമമാക്കണോ? + നിങ്ങളുടെ പാസ്സ്‌കോഡ് നൽകുക + പാസ്സ്‌കോഡ് മറന്നോ? + ഇല്ല + പാസ്സ്‌കോഡുകൾ പൊരുത്തപ്പെടുന്നില്ല. + ഒഴിവാക്കുക + വീണ്ടും ശ്രമിക്കുക + അതെ + + + + + + + + + + + ൪ അക്ക + ൬ അക്ക + പാസ്‌കോഡ് ദൃശ്യത മാറ്റുക + ഇല്ലാതാക്കുക + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-mr/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-mr/strings.xml new file mode 100644 index 00000000..17d350d6 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-mr/strings.xml @@ -0,0 +1,86 @@ + + + + Mifos Passcode नमुना + + ठीक आहे + + लॉगिन स्क्रीन + अॅप लॉक सेट करा + + होम स्क्रीन + लॉग आउट + पासकोड बदला + बायोमेट्रिक सक्षम करा + बायोमेट्रिक अक्षम करा + + बायोमेट्रिक सेटअप + आपले अॅप सुरक्षित करा + जलद आणि अधिक सुरक्षित प्रवेशासाठी बायोमेट्रिक (बोटाचा ठसा किंवा चेहरा) वापरा. + बायोमेट्रिक सेट करा + सध्या वगळा + + या डिव्हाइसवर बायोमेट्रिक सेट केलेले नाही. कृपया डिव्हाइस सेटिंग्जमध्ये बोटाचा ठसा किंवा चेहरा अनलॉक सक्षम करा, मग पुन्हा प्रयत्न करा. + या डिव्हाइसवर बायोमेट्रिक उपलब्ध नाही + बरेच अयशस्वी प्रयत्न. नंतर पुन्हा प्रयत्न करा किंवा आपल्या डिव्हाइस PIN ने अनलॉक करा. + बायोमेट्रिक हार्डवेअर सध्या उपलब्ध नाही. नंतर पुन्हा प्रयत्न करा. + कोणतेही बायोमेट्रिक नोंदणीकृत नाही. आपल्या डिव्हाइस सेटिंग्जमध्ये एक सेट करा आणि पुन्हा प्रयत्न करा. + प्रमाणीकरणाची वेळ संपली. पुन्हा प्रयत्न करा. + ऑपरेशन पूर्ण करण्यासाठी पुरेशी जागा नाही. + प्रमाणीकरण अयशस्वी झाले. पुन्हा प्रयत्न करा. + + बायोमेट्रिक वापरा + प्रमाणीकरण पर्याय सेट करा + Windows Hello सह प्रमाणीकरण करा + असमर्थित प्लॅटफॉर्म + + अॅप अनलॉक करा + PIN, पासवर्ड, पॅटर्न, चेहरा किंवा बोटाचा ठसा वापरून अनलॉक करा + आपले बायोमेट्रिक नोंदवा + बायोमेट्रिकने अनलॉक करा + + संदेश + फिंगरप्रिंटने प्रमाणित करा + चेहरा ओळखीने प्रमाणित करा + आयरिस स्कॅनने प्रमाणित करा + डिव्हाइस PIN ने प्रमाणित करा + जतन केलेला बायोमेट्रिक डेटा अवैध आहे. कृपया बायोमेट्रिक्स पुन्हा सेट करा. + अवैध इनपुटमुळे प्रमाणीकरण अयशस्वी झाले. पुन्हा प्रयत्न करा. + अवैध इनपुटमुळे नोंदणी अयशस्वी झाली. पुन्हा प्रयत्न करा. + + + जुन्या पासकोडची पुष्टी करा + पासकोडची पुष्टी करा + पासकोड तयार करा + अॅप अधिक जलद अनलॉक करण्यासाठी आपले बायोमेट्रिक किंवा डिव्हाइस क्रेडेन्शियल वापरा. + बायोमेट्रिक प्रमाणीकरण सक्षम करायचे? + आपला पासकोड टाका + पासकोड विसरलात? + नाही + पासकोड जुळत नाहीत. + वगळा + पुन्हा प्रयत्न करा + होय + + + + + + + + + + + ४ अंक + ६ अंक + पासकोड दृश्यमानता बदला + हटवा + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-nb/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-nb/strings.xml new file mode 100644 index 00000000..0f297b7b --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-nb/strings.xml @@ -0,0 +1,77 @@ + + + + Mifos Passcode-eksempel + + OK + + Innloggingsskjerm + Konfigurer app-lås + + Hjemskjerm + Logg ut + Endre kode + Aktiver biometri + Deaktiver biometri + + Biometrioppsett + Sikre appen din + Bruk biometri (fingeravtrykk eller ansikt) for raskere og sikrere tilgang. + Konfigurer biometri + Hopp over for nå + + Biometri er ikke konfigurert på denne enheten. Aktiver fingeravtrykk eller ansiktsgjenkjenning i enhetsinnstillingene og prøv igjen. + Biometri er ikke tilgjengelig på denne enheten + + Bruk biometri + Konfigurer autentiseringsalternativ + Autentiser med Windows Hello + Plattformen støttes ikke + + Lås opp appen + Lås opp med PIN-kode, passord, mønster, ansikt eller fingeravtrykk + Registrer biometri + Lås opp med biometri + + Melding + Bekreft med fingeravtrykk + Bekreft med ansiktsgjenkjenning + Bekreft med irisskanning + Bekreft med enhetens PIN + Lagrede biometriske data er ugyldige. Sett opp biometri på nytt. + Autentisering mislyktes på grunn av ugyldig inndata. Prøv igjen. + Registrering mislyktes på grunn av ugyldig inndata. Prøv igjen. + + For mange mislykkede forsøk. Prøv igjen senere, eller lås opp med enhetens PIN-kode. + Biometrisk maskinvare er for øyeblikket utilgjengelig. Prøv igjen senere. + Ingen biometri er registrert. Sett det opp i enhetsinnstillingene og prøv igjen. + Autentisering gikk ut på tid. Prøv igjen. + Ikke nok lagringsplass til å fullføre operasjonen. + Autentisering mislyktes. Prøv igjen. + + + Bekreft gammel kode + Bekreft kode + Opprett kode + Bruk biometri eller enhetslegitimasjon for å låse opp appen raskere. + Aktivere biometrisk autentisering? + Skriv inn koden + Glemt koden? + Nei + Kodene samsvarer ikke. + Hopp over + Prøv igjen + Ja + 4 sifre + 6 sifre + Veksle passkodesynlighet + Slett + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-nl/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-nl/strings.xml new file mode 100644 index 00000000..5bdcb744 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-nl/strings.xml @@ -0,0 +1,77 @@ + + + + Mifos Passcode-voorbeeld + + OK + + Aanmeldscherm + App-vergrendeling instellen + + Startscherm + Afmelden + Pincode wijzigen + Biometrie inschakelen + Biometrie uitschakelen + + Biometrische instelling + Beveilig je app + Gebruik biometrie (vingerafdruk of gezicht) voor snellere en veiligere toegang. + Biometrie instellen + Voorlopig overslaan + + Biometrie is niet ingesteld op dit apparaat. Schakel vingerafdruk- of gezichtsherkenning in via de apparaatinstellingen en probeer het opnieuw. + Biometrie niet beschikbaar op dit apparaat + + Biometrie gebruiken + Authenticatieoptie instellen + Verifiëren met Windows Hello + Niet-ondersteund platform + + App ontgrendelen + Ontgrendel met je pincode, wachtwoord, patroon, gezicht of vingerafdruk + Biometrie registreren + Ontgrendelen met biometrie + + Bericht + Verifiëren met vingerafdruk + Verifiëren met gezichtsherkenning + Verifiëren met irisscan + Verifiëren met apparaat-PIN + Opgeslagen biometrische gegevens zijn ongeldig. Stel biometrie opnieuw in. + Verificatie mislukt door ongeldige invoer. Probeer het opnieuw. + Registratie mislukt door ongeldige invoer. Probeer het opnieuw. + + Te veel mislukte pogingen. Probeer het later opnieuw of ontgrendel met je apparaatpincode. + Biometrische hardware is momenteel niet beschikbaar. Probeer het later opnieuw. + Er is geen biometrie ingesteld. Stel dit in via de apparaatinstellingen en probeer opnieuw. + Verificatie is verlopen. Probeer opnieuw. + Onvoldoende opslagruimte om de bewerking te voltooien. + Verificatie mislukt. Probeer opnieuw. + + + Bevestig oude pincode + Pincode bevestigen + Pincode aanmaken + Gebruik je biometrie of apparaatreferenties om de app sneller te ontgrendelen. + Biometrische verificatie inschakelen? + Voer je pincode in + Pincode vergeten? + Nee + Pincodes komen niet overeen. + Overslaan + Opnieuw proberen + Ja + 4 cijfers + 6 cijfers + Toon of verberg de toegangscode + Verwijderen + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-pa/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-pa/strings.xml new file mode 100644 index 00000000..d843acb3 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-pa/strings.xml @@ -0,0 +1,86 @@ + + + + Mifos Passcode ਨਮੂਨਾ + + ਠੀਕ ਹੈ + + ਲਾਗਇਨ ਸਕ੍ਰੀਨ + ਐਪ ਲਾਕ ਸੈਟਅੱਪ ਕਰੋ + + ਹੋਮ ਸਕ੍ਰੀਨ + ਲਾਗ ਆਉਟ + ਪਾਸਕੋਡ ਬਦਲੋ + ਬਾਇਓਮੀਟ੍ਰਿਕ ਯੋਗ ਕਰੋ + ਬਾਇਓਮੀਟ੍ਰਿਕ ਅਯੋਗ ਕਰੋ + + ਬਾਇਓਮੀਟ੍ਰਿਕ ਸੈਟਅੱਪ + ਆਪਣੀ ਐਪ ਨੂੰ ਸੁਰੱਖਿਅਤ ਕਰੋ + ਤੇਜ਼ ਅਤੇ ਵਧੇਰੇ ਸੁਰੱਖਿਅਤ ਪਹੁੰਚ ਲਈ ਬਾਇਓਮੀਟ੍ਰਿਕ (ਫਿੰਗਰਪ੍ਰਿੰਟ ਜਾਂ ਚਿਹਰਾ) ਦੀ ਵਰਤੋਂ ਕਰੋ। + ਬਾਇਓਮੀਟ੍ਰਿਕ ਸੈਟਅੱਪ ਕਰੋ + ਫਿਲਹਾਲ ਛੱਡੋ + + ਇਸ ਡਿਵਾਈਸ ਉੱਤੇ ਬਾਇਓਮੀਟ੍ਰਿਕ ਸੈਟਅੱਪ ਨਹੀਂ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਡਿਵਾਈਸ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਫਿੰਗਰਪ੍ਰਿੰਟ ਜਾਂ ਚਿਹਰਾ ਅਨਲਾਕ ਯੋਗ ਕਰੋ, ਫਿਰ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ। + ਇਸ ਡਿਵਾਈਸ ਉੱਤੇ ਬਾਇਓਮੀਟ੍ਰਿਕ ਉਪਲਬਧ ਨਹੀਂ ਹੈ + ਬਹੁਤ ਸਾਰੀਆਂ ਅਸਫਲ ਕੋਸ਼ਿਸ਼ਾਂ। ਬਾਅਦ ਵਿੱਚ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜਾਂ ਆਪਣੇ ਡਿਵਾਈਸ PIN ਨਾਲ ਅਨਲਾਕ ਕਰੋ। + ਬਾਇਓਮੀਟ੍ਰਿਕ ਹਾਰਡਵੇਅਰ ਇਸ ਵੇਲੇ ਉਪਲਬਧ ਨਹੀਂ ਹੈ। ਬਾਅਦ ਵਿੱਚ ਕੋਸ਼ਿਸ਼ ਕਰੋ। + ਕੋਈ ਬਾਇਓਮੀਟ੍ਰਿਕ ਦਰਜ ਨਹੀਂ ਹੈ। ਆਪਣੇ ਡਿਵਾਈਸ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਇੱਕ ਸੈਟਅੱਪ ਕਰੋ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ। + ਪ੍ਰਮਾਣਿਕਤਾ ਦਾ ਸਮਾਂ ਖਤਮ ਹੋ ਗਿਆ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ। + ਕਾਰਜ ਨੂੰ ਪੂਰਾ ਕਰਨ ਲਈ ਲੋੜੀਂਦੀ ਸਟੋਰੇਜ ਨਹੀਂ ਹੈ। + ਪ੍ਰਮਾਣਿਕਤਾ ਅਸਫਲ ਹੋ ਗਈ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ। + + ਬਾਇਓਮੀਟ੍ਰਿਕ ਦੀ ਵਰਤੋਂ ਕਰੋ + ਪ੍ਰਮਾਣਿਕਤਾ ਵਿਕਲਪ ਸੈਟਅੱਪ ਕਰੋ + Windows Hello ਨਾਲ ਪ੍ਰਮਾਣਿਤ ਕਰੋ + ਅਸਮਰਥਿਤ ਪਲੇਟਫਾਰਮ + + ਐਪ ਅਨਲਾਕ ਕਰੋ + PIN, ਪਾਸਵਰਡ, ਪੈਟਰਨ, ਚਿਹਰਾ ਜਾਂ ਫਿੰਗਰਪ੍ਰਿੰਟ ਨਾਲ ਅਨਲਾਕ ਕਰੋ + ਆਪਣਾ ਬਾਇਓਮੀਟ੍ਰਿਕ ਦਰਜ ਕਰੋ + ਬਾਇਓਮੀਟ੍ਰਿਕ ਨਾਲ ਅਨਲਾਕ ਕਰੋ + + ਸੁਨੇਹਾ + ਫਿੰਗਰਪ੍ਰਿੰਟ ਨਾਲ ਪ੍ਰਮਾਣਿਤ ਕਰੋ + ਚਿਹਰਾ ਪਛਾਣ ਨਾਲ ਪ੍ਰਮਾਣਿਤ ਕਰੋ + ਆਇਰਿਸ ਸਕੈਨ ਨਾਲ ਪ੍ਰਮਾਣਿਤ ਕਰੋ + ਡਿਵਾਈਸ PIN ਨਾਲ ਪ੍ਰਮਾਣਿਤ ਕਰੋ + ਸੰਭਾਲਿਆ ਬਾਇਓਮੈਟ੍ਰਿਕ ਡਾਟਾ ਅਯੋਗ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਬਾਇਓਮੈਟ੍ਰਿਕਸ ਨੂੰ ਦੁਬਾਰਾ ਸੈੱਟ ਕਰੋ। + ਅਯੋਗ ਇਨਪੁੱਟ ਕਰਕੇ ਪ੍ਰਮਾਣਿਕਤਾ ਅਸਫ਼ਲ ਰਹੀ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ। + ਅਯੋਗ ਇਨਪੁੱਟ ਕਰਕੇ ਰਜਿਸਟ੍ਰੇਸ਼ਨ ਅਸਫ਼ਲ ਰਹੀ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ। + + + ਪੁਰਾਣੇ ਪਾਸਕੋਡ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ + ਪਾਸਕੋਡ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ + ਪਾਸਕੋਡ ਬਣਾਓ + ਐਪ ਨੂੰ ਤੇਜ਼ੀ ਨਾਲ ਅਨਲਾਕ ਕਰਨ ਲਈ ਆਪਣੇ ਬਾਇਓਮੀਟ੍ਰਿਕ ਜਾਂ ਡਿਵਾਈਸ ਪ੍ਰਮਾਣ-ਪੱਤਰਾਂ ਦੀ ਵਰਤੋਂ ਕਰੋ। + ਬਾਇਓਮੀਟ੍ਰਿਕ ਪ੍ਰਮਾਣਿਕਤਾ ਯੋਗ ਕਰਨੀ ਹੈ? + ਆਪਣਾ ਪਾਸਕੋਡ ਦਾਖਲ ਕਰੋ + ਪਾਸਕੋਡ ਭੁੱਲ ਗਏ? + ਨਹੀਂ + ਪਾਸਕੋਡ ਮੇਲ ਨਹੀਂ ਖਾਂਦੇ। + ਛੱਡੋ + ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ + ਹਾਂ + + + + + + + + + + + ੪ ਅੰਕ + ੬ ਅੰਕ + ਪਾਸਕੋਡ ਦਿੱਖ ਬਦਲੋ + ਮਿਟਾਓ + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-pl/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-pl/strings.xml new file mode 100644 index 00000000..bcd45619 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-pl/strings.xml @@ -0,0 +1,77 @@ + + + + Przykład Mifos Passcode + + OK + + Ekran logowania + Skonfiguruj blokadę aplikacji + + Ekran główny + Wyloguj się + Zmień kod + Włącz biometrię + Wyłącz biometrię + + Konfiguracja biometrii + Zabezpiecz swoją aplikację + Używaj biometrii (odcisku palca lub twarzy), aby uzyskać szybszy i bezpieczniejszy dostęp. + Skonfiguruj biometrię + Pomiń na razie + + Biometria nie jest skonfigurowana na tym urządzeniu. Włącz odcisk palca lub rozpoznawanie twarzy w ustawieniach urządzenia i spróbuj ponownie. + Biometria niedostępna na tym urządzeniu + + Użyj biometrii + Skonfiguruj opcję uwierzytelniania + Uwierzytelnij za pomocą Windows Hello + Nieobsługiwana platforma + + Odblokuj aplikację + Odblokuj za pomocą kodu PIN, hasła, wzoru, twarzy lub odcisku palca + Zarejestruj swoją biometrię + Odblokuj biometrią + + Wiadomość + Uwierzytelnij odciskiem palca + Uwierzytelnij rozpoznawaniem twarzy + Uwierzytelnij skanem tęczówki + Uwierzytelnij PIN-em urządzenia + Zapisane dane biometryczne są nieprawidłowe. Skonfiguruj biometrię ponownie. + Uwierzytelnianie nie powiodło się z powodu nieprawidłowych danych. Spróbuj ponownie. + Rejestracja nie powiodła się z powodu nieprawidłowych danych. Spróbuj ponownie. + + Zbyt wiele nieudanych prób. Spróbuj ponownie później lub odblokuj kodem PIN urządzenia. + Sprzęt biometryczny jest chwilowo niedostępny. Spróbuj ponownie później. + Nie zarejestrowano żadnej biometrii. Skonfiguruj ją w ustawieniach urządzenia i spróbuj ponownie. + Uwierzytelnianie wygasło. Spróbuj ponownie. + Za mało miejsca, aby ukończyć operację. + Uwierzytelnianie nie powiodło się. Spróbuj ponownie. + + + Potwierdź stary kod + Potwierdź kod + Utwórz kod + Użyj danych biometrycznych lub poświadczeń urządzenia, aby szybciej odblokować aplikację. + Włączyć uwierzytelnianie biometryczne? + Wprowadź kod + Nie pamiętasz kodu? + Nie + Kody nie pasują do siebie. + Pomiń + Spróbuj ponownie + Tak + 4 cyfry + 6 cyfr + Przełącz widoczność kodu + Usuń + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-pt-rBR/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-pt-rBR/strings.xml new file mode 100644 index 00000000..cc624f03 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-pt-rBR/strings.xml @@ -0,0 +1,77 @@ + + + + Exemplo do Mifos Passcode + + OK + + Tela de login + Configurar bloqueio do app + + Tela inicial + Sair + Alterar código + Ativar biometria + Desativar biometria + + Configuração biométrica + Proteja seu app + Use biometria (digital ou rosto) para um acesso mais rápido e seguro. + Configurar biometria + Pular por enquanto + + A biometria não está configurada neste dispositivo. Ative a impressão digital ou o reconhecimento facial nas configurações do dispositivo e tente novamente. + Biometria não disponível neste dispositivo + + Usar biometria + Configurar opção de autenticação + Autenticar com o Windows Hello + Plataforma não suportada + + Desbloquear app + Desbloqueie com PIN, senha, padrão, rosto ou digital + Registrar sua biometria + Desbloquear com biometria + + Mensagem + Autenticar com impressão digital + Autenticar com reconhecimento facial + Autenticar com leitura de íris + Autenticar com o PIN do dispositivo + Os dados biométricos salvos são inválidos. Configure a biometria novamente. + Autenticação falhou devido a entrada inválida. Tente novamente. + Registro falhou devido a entrada inválida. Tente novamente. + + Muitas tentativas incorretas. Tente novamente mais tarde ou desbloqueie com o PIN do dispositivo. + O hardware biométrico está indisponível no momento. Tente novamente mais tarde. + Nenhuma biometria cadastrada. Configure uma nas configurações do dispositivo e tente novamente. + A autenticação expirou. Tente novamente. + Armazenamento insuficiente para concluir a operação. + A autenticação falhou. Tente novamente. + + + Confirme o código antigo + Confirmar código + Criar código + Use sua biometria ou credenciais do dispositivo para desbloquear o app mais rápido. + Ativar autenticação biométrica? + Digite seu código + Esqueceu o código? + Não + Os códigos não coincidem. + Pular + Tentar novamente + Sim + 4 dígitos + 6 dígitos + Mostrar ou ocultar o código + Excluir + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-pt-rPT/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-pt-rPT/strings.xml new file mode 100644 index 00000000..c62cdad6 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-pt-rPT/strings.xml @@ -0,0 +1,77 @@ + + + + Exemplo do Mifos Passcode + + OK + + Ecrã de início de sessão + Configurar bloqueio da aplicação + + Ecrã inicial + Terminar sessão + Alterar código + Ativar biometria + Desativar biometria + + Configuração biométrica + Proteja a sua aplicação + Utilize a biometria (impressão digital ou rosto) para um acesso mais rápido e seguro. + Configurar biometria + Ignorar por agora + + A biometria não está configurada neste dispositivo. Por favor, ative a impressão digital ou o reconhecimento facial nas definições do dispositivo e tente novamente. + Biometria não disponível neste dispositivo + + Utilizar biometria + Configurar opção de autenticação + Autenticar com o Windows Hello + Plataforma não suportada + + Desbloquear aplicação + Desbloqueie com PIN, palavra-passe, padrão, rosto ou impressão digital + Registar a sua biometria + Desbloquear com biometria + + Mensagem + Autenticar com impressão digital + Autenticar com reconhecimento facial + Autenticar com leitura de íris + Autenticar com o PIN do dispositivo + Os dados biométricos guardados são inválidos. Configure a biometria novamente. + A autenticação falhou devido a entrada inválida. Tente novamente. + O registo falhou devido a entrada inválida. Tente novamente. + + Demasiadas tentativas incorretas. Tente novamente mais tarde ou desbloqueie com o PIN do dispositivo. + O hardware biométrico está atualmente indisponível. Tente novamente mais tarde. + Nenhuma biometria está registada. Configure uma nas definições do dispositivo e tente novamente. + A autenticação expirou. Tente novamente. + Armazenamento insuficiente para concluir a operação. + A autenticação falhou. Tente novamente. + + + Confirmar código antigo + Confirmar código + Criar código + Utilize a sua biometria ou as credenciais do dispositivo para desbloquear a aplicação mais rapidamente. + Ativar autenticação biométrica? + Introduza o seu código + Esqueceu-se do código? + Não + Os códigos não correspondem. + Ignorar + Tentar novamente + Sim + 4 dígitos + 6 dígitos + Mostrar ou ocultar o código + Eliminar + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-ro/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-ro/strings.xml new file mode 100644 index 00000000..245e2938 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-ro/strings.xml @@ -0,0 +1,77 @@ + + + + Exemplu Mifos Passcode + + OK + + Ecran de conectare + Configurați blocarea aplicației + + Ecran principal + Deconectare + Schimbați codul + Activați biometria + Dezactivați biometria + + Configurare biometrie + Protejați-vă aplicația + Folosiți biometria (amprentă sau față) pentru un acces mai rapid și mai sigur. + Configurați biometria + Omite deocamdată + + Biometria nu este configurată pe acest dispozitiv. Activați amprenta sau recunoașterea facială în setările dispozitivului și încercați din nou. + Biometria nu este disponibilă pe acest dispozitiv + + Folosiți biometria + Configurați opțiunea de autentificare + Autentificați-vă cu Windows Hello + Platformă neacceptată + + Deblocați aplicația + Deblocați cu PIN, parolă, model, față sau amprentă + Înregistrați-vă biometria + Deblocați cu biometrie + + Mesaj + Autentificați-vă cu amprenta + Autentificați-vă cu recunoașterea facială + Autentificați-vă cu scanarea irisului + Autentificați-vă cu PIN-ul dispozitivului + Datele biometrice salvate sunt invalide. Configurați din nou biometria. + Autentificarea a eșuat din cauza datelor introduse invalide. Încercați din nou. + Înregistrarea a eșuat din cauza datelor introduse invalide. Încercați din nou. + + Prea multe încercări eșuate. Încercați din nou mai târziu sau deblocați cu PIN-ul dispozitivului. + Hardware-ul biometric nu este disponibil momentan. Încercați din nou mai târziu. + Nicio biometrie nu este înregistrată. Configurați una în setările dispozitivului și încercați din nou. + Autentificarea a expirat. Încercați din nou. + Spațiu de stocare insuficient pentru a finaliza operațiunea. + Autentificarea a eșuat. Încercați din nou. + + + Confirmați codul vechi + Confirmați codul + Creați cod + Folosiți datele biometrice sau acreditările dispozitivului pentru a debloca aplicația mai rapid. + Activați autentificarea biometrică? + Introduceți codul + Ați uitat codul? + Nu + Codurile nu se potrivesc. + Omite + Încercați din nou + Da + 4 cifre + 6 cifre + Comutați vizibilitatea codului + Șterge + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-ru/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-ru/strings.xml new file mode 100644 index 00000000..860624d6 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-ru/strings.xml @@ -0,0 +1,77 @@ + + + + Пример Mifos Passcode + + OK + + Экран входа + Настроить блокировку приложения + + Главный экран + Выйти + Изменить код + Включить биометрию + Отключить биометрию + + Настройка биометрии + Защитите ваше приложение + Используйте биометрию (отпечаток пальца или лицо) для более быстрого и безопасного доступа. + Настроить биометрию + Пока пропустить + + Биометрия не настроена на этом устройстве. Включите распознавание отпечатка пальца или лица в настройках устройства и попробуйте снова. + Биометрия недоступна на этом устройстве + + Использовать биометрию + Настроить параметры аутентификации + Войти через Windows Hello + Неподдерживаемая платформа + + Разблокировать приложение + Разблокируйте с помощью PIN-кода, пароля, графического ключа, лица или отпечатка пальца + Зарегистрировать биометрию + Разблокировать биометрией + + Сообщение + Аутентификация по отпечатку пальца + Аутентификация по лицу + Аутентификация по радужке + Аутентификация по PIN-коду устройства + Сохранённые биометрические данные недействительны. Настройте биометрию заново. + Аутентификация не удалась из-за неверного ввода. Повторите попытку. + Регистрация не удалась из-за неверного ввода. Повторите попытку. + + Слишком много неудачных попыток. Попробуйте позже или разблокируйте с помощью PIN-кода устройства. + Биометрическое оборудование сейчас недоступно. Попробуйте позже. + Биометрия не зарегистрирована. Настройте её в параметрах устройства и попробуйте снова. + Время аутентификации истекло. Повторите попытку. + Недостаточно памяти для выполнения операции. + Аутентификация не удалась. Повторите попытку. + + + Подтвердите старый код + Подтвердите код + Создать код + Используйте биометрию или учётные данные устройства, чтобы быстрее разблокировать приложение. + Включить биометрическую аутентификацию? + Введите код + Забыли код? + Нет + Коды не совпадают. + Пропустить + Повторить + Да + 4 цифры + 6 цифр + Показать или скрыть код + Удалить + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-si/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-si/strings.xml new file mode 100644 index 00000000..b20ae6bd --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-si/strings.xml @@ -0,0 +1,76 @@ + + + + Mifos Passcode සාම්පලය + + හරි + + පිවිසුම් තිරය + යෙදුම් අගුල සකසන්න + + මුල් තිරය + පිටවන්න + මුරකේතය වෙනස් කරන්න + ජෛවමිතික සක්‍රීය කරන්න + ජෛවමිතික අක්‍රීය කරන්න + + ජෛවමිතික සැකසුම + ඔබේ යෙදුම ආරක්ෂා කරන්න + වේගවත් සහ වඩාත් ආරක්ෂිත ප්‍රවේශය සඳහා ජෛවමිතික (ඇඟිලි සලකුණ හෝ මුහුණ) භාවිත කරන්න. + ජෛවමිතික සකසන්න + දැනට මඟ හරින්න + + මෙම උපාංගයේ ජෛවමිතික සකසා නැත. කරුණාකර උපාංග සැකසුම්වල ඇඟිලි සලකුණ හෝ මුහුණු අගුළු හැරීම සක්‍රීය කර, නැවත උත්සාහ කරන්න. + මෙම උපාංගයේ ජෛවමිතික නොමැත + අසාර්ථක උත්සාහයන් වැඩි ගණනක්. පසුව උත්සාහ කරන්න හෝ ඔබේ උපාංග PIN සමඟ අගුළු හරින්න. + ජෛවමිතික දෘඩාංගය දැනට නොමැත. පසුව උත්සාහ කරන්න. + ජෛවමිතිකයක් ලියාපදිංචි කර නැත. ඔබේ උපාංග සැකසුම්වල එකක් සකසා නැවත උත්සාහ කරන්න. + සත්‍යාපන කාලය ඉකුත් විය. නැවත උත්සාහ කරන්න. + මෙහෙයුම සම්පූර්ණ කිරීමට ප්‍රමාණවත් ආචයනයක් නොමැත. + සත්‍යාපනය අසාර්ථකයි. නැවත උත්සාහ කරන්න. + + ජෛවමිතික භාවිත කරන්න + සත්‍යාපන විකල්පය සකසන්න + Windows Hello භාවිත කර සත්‍යාපනය කරන්න + සහාය නොදක්වන වේදිකාව + + යෙදුම අගුළු හරින්න + PIN, මුරපදය, රටාව, මුහුණ හෝ ඇඟිලි සලකුණෙන් අගුළු හරින්න + ඔබේ ජෛවමිතික ලියාපදිංචි කරන්න + ජෛවමිතිකයෙන් අගුළු හරින්න + + පණිවිඩය + ඇඟිලි සලකුණෙන් සත්‍යාපනය කරන්න + මුහුණු හඳුනාගැනීමෙන් සත්‍යාපනය කරන්න + අයිරිස් ස්කෑනයෙන් සත්‍යාපනය කරන්න + උපාංග PIN මගින් සත්‍යාපනය කරන්න + සුරකින ලද ජෛවමිතික දත්ත අවලංගුයි. කරුණාකර ජෛවමිතිකය නැවත සකසන්න. + අවලංගු ආදානය නිසා සත්‍යාපනය අසාර්ථකයි. නැවත උත්සාහ කරන්න. + අවලංගු ආදානය නිසා ලියාපදිංචිය අසාර්ථකයි. නැවත උත්සාහ කරන්න. + + + පැරණි මුරකේතය තහවුරු කරන්න + මුරකේතය තහවුරු කරන්න + මුරකේතය සාදන්න + යෙදුම වඩාත් වේගයෙන් අගුළු හරින්න ඔබේ ජෛවමිතික හෝ උපාංග අක්තපත්‍ර භාවිත කරන්න. + ජෛවමිතික සත්‍යාපනය සක්‍රීය කරන්නද? + ඔබගේ මුරකේතය ඇතුළත් කරන්න + මුරකේතය අමතකද? + නැත + මුරකේත නොගැලපේ. + මඟ හරින්න + නැවත උත්සාහ කරන්න + ඔව් + 4 අංක + 6 අංක + මුරපදය දෘශ්‍යතාව ටොගල් කරන්න + මකන්න + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-sk/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-sk/strings.xml new file mode 100644 index 00000000..a674db1f --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-sk/strings.xml @@ -0,0 +1,77 @@ + + + + Ukážka Mifos Passcode + + OK + + Prihlasovacia obrazovka + Nastaviť zámok aplikácie + + Domovská obrazovka + Odhlásiť sa + Zmeniť kód + Povoliť biometriu + Zakázať biometriu + + Nastavenie biometrie + Zabezpečte svoju aplikáciu + Pre rýchlejší a bezpečnejší prístup používajte biometriu (odtlačok prsta alebo tvár). + Nastaviť biometriu + Zatiaľ preskočiť + + Biometria nie je v tomto zariadení nastavená. Povoľte odtlačok prsta alebo rozpoznávanie tváre v nastaveniach zariadenia a skúste to znova. + Biometria nie je v tomto zariadení k dispozícii + + Použiť biometriu + Nastaviť možnosť overenia + Overiť pomocou Windows Hello + Nepodporovaná platforma + + Odomknúť aplikáciu + Odomknite pomocou PIN, hesla, vzoru, tváre alebo odtlačku prsta + Zaregistrovať biometriu + Odomknúť biometriou + + Správa + Overiť odtlačkom prsta + Overiť rozpoznaním tváre + Overiť skenovaním dúhovky + Overiť PIN-om zariadenia + Uložené biometrické údaje nie sú platné. Nastavte biometriu znova. + Overenie zlyhalo pre neplatný vstup. Skúste znova. + Registrácia zlyhala pre neplatný vstup. Skúste znova. + + Príliš veľa neúspešných pokusov. Skúste to neskôr alebo odomknite pomocou PIN kódu zariadenia. + Biometrický hardvér je momentálne nedostupný. Skúste to neskôr. + Nie sú zaregistrované žiadne biometrické údaje. Nastavte ich v nastaveniach zariadenia a skúste znova. + Overenie vypršalo. Skúste to znova. + Nedostatok úložného priestoru na dokončenie operácie. + Overenie zlyhalo. Skúste to znova. + + + Potvrďte starý kód + Potvrdiť kód + Vytvoriť kód + Na rýchlejšie odomknutie aplikácie použite biometriu alebo prihlasovacie údaje zariadenia. + Povoliť biometrické overenie? + Zadajte kód + Zabudli ste kód? + Nie + Kódy sa nezhodujú. + Preskočiť + Skúsiť znova + Áno + 4 číslice + 6 číslic + Prepnúť zobrazenie kódu + Odstrániť + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-sl/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-sl/strings.xml new file mode 100644 index 00000000..6e7eba20 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-sl/strings.xml @@ -0,0 +1,76 @@ + + + + Primer Mifos Passcode + + V redu + + Zaslon za prijavo + Nastavite zaklepanje aplikacije + + Začetni zaslon + Odjava + Spremenite kodo + Omogočite biometrijo + Onemogočite biometrijo + + Nastavitev biometrije + Zaščitite svojo aplikacijo + Uporabite biometrijo (prstni odtis ali obraz) za hitrejši in varnejši dostop. + Nastavite biometrijo + Trenutno preskočite + + Biometrija na tej napravi ni nastavljena. Omogočite prstni odtis ali prepoznavanje obraza v nastavitvah naprave in poskusite znova. + Biometrija na tej napravi ni na voljo + Preveč neuspelih poskusov. Poskusite pozneje ali odklenite z PIN kodo naprave. + Biometrična strojna oprema trenutno ni na voljo. Poskusite pozneje. + Nobena biometrija ni vpisana. Nastavite jo v nastavitvah naprave in poskusite znova. + Avtentikacija je potekla. Poskusite znova. + Ni dovolj prostora za dokončanje operacije. + Avtentikacija ni uspela. Poskusite znova. + + Uporabite biometrijo + Nastavite možnost avtentikacije + Avtentikacija s storitvijo Windows Hello + Nepodprta platforma + + Odklenite aplikacijo + Odklenite s PIN kodo, geslom, vzorcem, obrazom ali prstnim odtisom + Registrirajte biometrijo + Odklenite z biometrijo + + Sporočilo + Preverjanje pristnosti s prstnim odtisom + Preverjanje pristnosti s prepoznavo obraza + Preverjanje pristnosti z optičnim branjem šarenice + Preverjanje pristnosti s PIN-om naprave + Shranjeni biometrični podatki niso veljavni. Ponovno nastavite biometrijo. + Preverjanje pristnosti ni uspelo zaradi neveljavnega vnosa. Poskusite znova. + Registracija ni uspela zaradi neveljavnega vnosa. Poskusite znova. + + + Potrdite staro kodo + Potrdite kodo + Ustvarite kodo + Uporabite biometrijo ali poverilnice naprave za hitrejše odklepanje aplikacije. + Omogočiti biometrično avtentikacijo? + Vnesite kodo + Ste pozabili kodo? + Ne + Kodi se ne ujemata. + Preskočite + Poskusite znova + Da + 4 števke + 6 števk + Preklopite vidnost kode + Izbrišite + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-sq/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-sq/strings.xml new file mode 100644 index 00000000..2fca0dc5 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-sq/strings.xml @@ -0,0 +1,76 @@ + + + + Shembull i Mifos Passcode + + Në rregull + + Ekrani i hyrjes + Konfiguroni bllokimin e aplikacionit + + Ekrani kryesor + Dilni + Ndryshoni kodin + Aktivizoni biometrinë + Çaktivizoni biometrinë + + Konfigurimi i biometrisë + Sigurojeni aplikacionin tuaj + Përdorni biometrinë (gjurmën e gishtit ose fytyrën) për qasje më të shpejtë dhe më të sigurt. + Konfiguroni biometrinë + Anashkaloni për tani + + Biometria nuk është konfiguruar në këtë pajisje. Aktivizoni gjurmën e gishtit ose njohjen e fytyrës në cilësimet e pajisjes dhe provoni përsëri. + Biometria nuk është e disponueshme në këtë pajisje + Shumë përpjekje të dështuara. Provoni më vonë ose zhbllokoni me PIN-in e pajisjes. + Hardueri biometrik nuk është aktualisht i disponueshëm. Provoni më vonë. + Nuk ka biometri të regjistruar. Konfiguroni në cilësimet e pajisjes dhe provoni përsëri. + Vërtetimi skadoi. Provoni përsëri. + Nuk ka hapësirë të mjaftueshme për të përfunduar operacionin. + Vërtetimi dështoi. Provoni përsëri. + + Përdorni biometrinë + Konfiguroni opsionin e vërtetimit + Vërtetoni me Windows Hello + Platformë e pambështetur + + Zhbllokoni aplikacionin + Zhbllokoni me PIN, fjalëkalim, model, fytyrë ose gjurmë gishti + Regjistroni biometrinë + Zhbllokoni me biometri + + Mesazh + Vërtetoni me gjurmë gishti + Vërtetoni me njohje fytyre + Vërtetoni me skanim irisi + Vërtetoni me PIN-in e pajisjes + Të dhënat biometrike të ruajtura janë të pavlefshme. Ju lutemi rikonfiguroni biometrinë. + Vërtetimi dështoi për shkak të hyrjes së pavlefshme. Provoni përsëri. + Regjistrimi dështoi për shkak të hyrjes së pavlefshme. Provoni përsëri. + + + Konfirmoni kodin e vjetër + Konfirmoni kodin + Krijoni kod + Përdorni biometrinë ose kredencialet e pajisjes për të zhbllokuar aplikacionin më shpejt. + Të aktivizohet vërtetimi biometrik? + Vendosni kodin + Harruat kodin? + Jo + Kodet nuk përputhen. + Anashkaloni + Provoni përsëri + Po + 4 shifra + 6 shifra + Ndryshoni dukshmërinë e kodit + Fshini + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-sr/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-sr/strings.xml new file mode 100644 index 00000000..62527749 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-sr/strings.xml @@ -0,0 +1,76 @@ + + + + Mifos Passcode пример + + У реду + + Екран за пријаву + Подесите закључавање апликације + + Почетни екран + Одјавите се + Промените код + Омогућите биометрију + Онемогућите биометрију + + Подешавање биометрије + Заштитите своју апликацију + Користите биометрију (отисак прста или лице) за бржи и сигурнији приступ. + Подесите биометрију + Прескочите за сада + + Биометрија није подешена на овом уређају. Омогућите отисак прста или препознавање лица у поставкама уређаја и покушајте поново. + Биометрија није доступна на овом уређају + Превише неуспелих покушаја. Покушајте касније или откључајте PIN-ом уређаја. + Биометријски хардвер тренутно није доступан. Покушајте касније. + Биометрија није регистрована. Подесите је у поставкама уређаја и покушајте поново. + Време аутентификације је истекло. Покушајте поново. + Нема довољно простора за завршетак операције. + Аутентификација није успела. Покушајте поново. + + Користите биометрију + Подесите опцију аутентификације + Аутентификујте помоћу Windows Hello + Неподржана платформа + + Откључајте апликацију + Откључајте PIN-ом, лозинком, шаблоном, лицем или отиском прста + Региструјте биометрију + Откључајте биометријом + + Порука + Аутентификација отиском прста + Аутентификација препознавањем лица + Аутентификација скенирањем дужице + Аутентификација PIN-ом уређаја + Сачувани биометријски подаци нису важећи. Поново поставите биометрију. + Аутентификација није успела због неважећег уноса. Покушајте поново. + Регистрација није успела због неважећег уноса. Покушајте поново. + + + Потврдите стари код + Потврдите код + Креирајте код + Користите биометрију или акредитиве уређаја за брже откључавање апликације. + Омогућити биометријску аутентификацију? + Унесите код + Заборавили сте код? + Не + Кодови се не подударају. + Прескочите + Покушајте поново + Да + 4 цифре + 6 цифара + Промените видљивост кода + Обришите + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-sv/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-sv/strings.xml new file mode 100644 index 00000000..579461fe --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-sv/strings.xml @@ -0,0 +1,77 @@ + + + + Mifos Passcode-exempel + + OK + + Inloggningsskärm + Konfigurera applås + + Startskärm + Logga ut + Ändra kod + Aktivera biometri + Inaktivera biometri + + Biometriinställning + Säkra din app + Använd biometri (fingeravtryck eller ansikte) för snabbare och säkrare åtkomst. + Konfigurera biometri + Hoppa över för nu + + Biometri är inte inställd på den här enheten. Aktivera fingeravtryck eller ansiktsigenkänning i enhetens inställningar och försök igen. + Biometri är inte tillgänglig på den här enheten + + Använd biometri + Konfigurera autentiseringsalternativ + Autentisera med Windows Hello + Plattform stöds inte + + Lås upp appen + Lås upp med PIN-kod, lösenord, mönster, ansikte eller fingeravtryck + Registrera din biometri + Lås upp med biometri + + Meddelande + Autentisera med fingeravtryck + Autentisera med ansiktsigenkänning + Autentisera med irisskanning + Autentisera med enhetens PIN + Sparade biometriska data är ogiltiga. Konfigurera biometrin igen. + Autentisering misslyckades på grund av ogiltig indata. Försök igen. + Registrering misslyckades på grund av ogiltig indata. Försök igen. + + För många misslyckade försök. Försök igen senare eller lås upp med enhetens PIN. + Biometrisk maskinvara är för tillfället otillgänglig. Försök igen senare. + Ingen biometri är registrerad. Ställ in det i enhetens inställningar och försök igen. + Autentiseringen tog för lång tid. Försök igen. + Inte tillräckligt med lagringsutrymme för att slutföra åtgärden. + Autentisering misslyckades. Försök igen. + + + Bekräfta gammal kod + Bekräfta kod + Skapa kod + Använd din biometri eller enhetsuppgifter för att låsa upp appen snabbare. + Aktivera biometrisk autentisering? + Ange din kod + Glömt koden? + Nej + Koderna matchar inte. + Hoppa över + Försök igen + Ja + 4 siffror + 6 siffror + Växla synlighet för kod + Ta bort + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-sw/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-sw/strings.xml new file mode 100644 index 00000000..52cd3dac --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-sw/strings.xml @@ -0,0 +1,76 @@ + + + + Mfano wa Mifos Passcode + + Sawa + + Skrini ya Kuingia + Sanidi Kufuli ya Programu + + Skrini ya Nyumbani + Toka + Badilisha msimbo + Wezesha Bayometriki + Zima Bayometriki + + Usanidi wa Bayometriki + Linda Programu yako + Tumia bayometriki (alama ya kidole au uso) kwa ufikiaji wa haraka na salama zaidi. + Sanidi Bayometriki + Ruka kwa sasa + + Bayometriki haijasanidiwa kwenye kifaa hiki. Tafadhali wezesha alama ya kidole au kufungua kwa uso katika mipangilio ya kifaa, kisha jaribu tena. + Bayometriki haipatikani kwenye kifaa hiki + Majaribio mengi yameshindwa. Jaribu baadaye au fungua kwa PIN ya kifaa chako. + Vifaa vya bayometriki havipatikani kwa sasa. Jaribu baadaye. + Hakuna bayometriki iliyosajiliwa. Sanidi moja katika mipangilio ya kifaa chako na ujaribu tena. + Muda wa uthibitishaji umekwisha. Jaribu tena. + Hakuna nafasi ya kutosha kukamilisha kazi. + Uthibitishaji umeshindwa. Jaribu tena. + + Tumia Bayometriki + Sanidi chaguo la uthibitishaji + Thibitisha kwa Windows Hello + Jukwaa halisaidiki + + Fungua Programu + Fungua kwa PIN, nenosiri, mchoro, uso au alama ya kidole + Sajili bayometriki yako + Fungua kwa Bayometriki + + Ujumbe + Thibitisha kwa alama ya kidole + Thibitisha kwa utambuzi wa uso + Thibitisha kwa skana ya iris + Thibitisha kwa PIN ya kifaa + Data ya kibayometriki iliyohifadhiwa si halali. Tafadhali sanidi tena kibayometriki. + Uthibitishaji umeshindwa kwa sababu ya ingizo batili. Jaribu tena. + Usajili umeshindwa kwa sababu ya ingizo batili. Jaribu tena. + + + Thibitisha msimbo wa zamani + Thibitisha msimbo + Unda msimbo + Tumia bayometriki yako au vitambulisho vya kifaa kufungua programu kwa haraka zaidi. + Wezesha uthibitishaji wa bayometriki? + Weka msimbo wako + Umesahau msimbo? + Hapana + Misimbo hailingani. + Ruka + Jaribu tena + Ndiyo + Tarakimu 4 + Tarakimu 6 + Geuza muonekano wa nenosiri + Futa + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-ta/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-ta/strings.xml new file mode 100644 index 00000000..3f7542ea --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-ta/strings.xml @@ -0,0 +1,86 @@ + + + + Mifos Passcode மாதிரி + + சரி + + உள்நுழைவு திரை + பயன்பாட்டு பூட்டை அமைக்கவும் + + முகப்புத் திரை + வெளியேறு + கடவுக்குறியீட்டை மாற்று + பயோமெட்ரிக்கை இயக்கு + பயோமெட்ரிக்கை முடக்கு + + பயோமெட்ரிக் அமைப்பு + உங்கள் பயன்பாட்டைப் பாதுகாக்கவும் + விரைவான மற்றும் பாதுகாப்பான அணுகலுக்காக பயோமெட்ரிக்கைப் (கைரேகை அல்லது முகம்) பயன்படுத்தவும். + பயோமெட்ரிக்கை அமை + இப்போதைக்கு தவிர்க்கவும் + + இந்த சாதனத்தில் பயோமெட்ரிக் அமைக்கப்படவில்லை. உங்கள் சாதன அமைப்புகளில் கைரேகை அல்லது முக அங்கீகாரத்தை இயக்கி மீண்டும் முயற்சிக்கவும். + இந்த சாதனத்தில் பயோமெட்ரிக் கிடைக்கவில்லை + பல தோல்வியுற்ற முயற்சிகள். பின்னர் முயற்சிக்கவும் அல்லது உங்கள் சாதன PIN உடன் திறக்கவும். + பயோமெட்ரிக் வன்பொருள் தற்போது கிடைக்கவில்லை. பின்னர் முயற்சிக்கவும். + பயோமெட்ரிக் எதுவும் பதிவு செய்யப்படவில்லை. சாதன அமைப்புகளில் ஒன்றை அமைத்து மீண்டும் முயற்சிக்கவும். + அங்கீகார நேரம் முடிந்தது. மீண்டும் முயற்சிக்கவும். + செயல்பாட்டை முடிக்க போதுமான சேமிப்பகம் இல்லை. + அங்கீகாரம் தோல்வியடைந்தது. மீண்டும் முயற்சிக்கவும். + + பயோமெட்ரிக்கைப் பயன்படுத்தவும் + அங்கீகார விருப்பத்தை அமைக்கவும் + Windows Hello மூலம் அங்கீகரிக்கவும் + ஆதரிக்கப்படாத தளம் + + பயன்பாட்டைத் திற + PIN, கடவுச்சொல், பேட்டர்ன், முகம் அல்லது கைரேகை மூலம் திற + உங்கள் பயோமெட்ரிக்கைப் பதிவு செய்யவும் + பயோமெட்ரிக் மூலம் திற + + செய்தி + கைரேகையால் அங்கீகரிக்கவும் + முக அடையாளத்தால் அங்கீகரிக்கவும் + ஐரிஸ் ஸ்கேனால் அங்கீகரிக்கவும் + சாதன PIN ஆல் அங்கீகரிக்கவும் + சேமிக்கப்பட்ட பயோமெட்ரிக் தரவு செல்லாது. பயோமெட்ரிக்ஸை மீண்டும் அமைக்கவும். + தவறான உள்ளீட்டால் அங்கீகாரம் தோல்வியடைந்தது. மீண்டும் முயற்சிக்கவும். + தவறான உள்ளீட்டால் பதிவு தோல்வியடைந்தது. மீண்டும் முயற்சிக்கவும். + + + பழைய கடவுக்குறியீட்டை உறுதிப்படுத்தவும் + கடவுக்குறியீட்டை உறுதிப்படுத்தவும் + கடவுக்குறியீட்டை உருவாக்கவும் + பயன்பாட்டை விரைவாக திறக்க உங்கள் பயோமெட்ரிக் அல்லது சாதன அங்கீகாரத்தைப் பயன்படுத்தவும். + பயோமெட்ரிக் அங்கீகாரத்தை இயக்கவா? + உங்கள் கடவுக்குறியீட்டை உள்ளிடவும் + கடவுக்குறியீடு மறந்துவிட்டதா? + இல்லை + கடவுக்குறியீடுகள் பொருந்தவில்லை. + தவிர்க்கவும் + மீண்டும் முயற்சிக்கவும் + ஆம் + + + + + + + + + + + ௪ இலக்கங்கள் + ௬ இலக்கங்கள் + கடவுக்குறியீடு காட்சியை மாற்று + நீக்கு + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-te/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-te/strings.xml new file mode 100644 index 00000000..6a1856de --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-te/strings.xml @@ -0,0 +1,86 @@ + + + + Mifos Passcode నమూనా + + సరే + + లాగిన్ స్క్రీన్ + యాప్ లాక్‌ని సెటప్ చేయండి + + హోమ్ స్క్రీన్ + లాగ్ అవుట్ + పాస్‌కోడ్‌ని మార్చండి + బయోమెట్రిక్‌ని ప్రారంభించండి + బయోమెట్రిక్‌ని నిలిపివేయండి + + బయోమెట్రిక్ సెటప్ + మీ యాప్‌ని భద్రపరచండి + వేగవంతమైన మరియు మరింత సురక్షితమైన ప్రాప్యత కోసం బయోమెట్రిక్ (వేలిముద్ర లేదా ముఖం) ఉపయోగించండి. + బయోమెట్రిక్‌ని సెటప్ చేయండి + ప్రస్తుతం దాటవేయండి + + ఈ పరికరంలో బయోమెట్రిక్ సెటప్ చేయబడలేదు. దయచేసి పరికర సెట్టింగ్‌లలో వేలిముద్ర లేదా ముఖ అన్‌లాక్‌ని ప్రారంభించి, ఆపై మళ్లీ ప్రయత్నించండి. + ఈ పరికరంలో బయోమెట్రిక్ అందుబాటులో లేదు + చాలా విఫల ప్రయత్నాలు. తర్వాత ప్రయత్నించండి లేదా మీ పరికర PIN తో అన్‌లాక్ చేయండి. + బయోమెట్రిక్ హార్డ్‌వేర్ ప్రస్తుతం అందుబాటులో లేదు. తర్వాత ప్రయత్నించండి. + బయోమెట్రిక్ నమోదు చేయబడలేదు. మీ పరికర సెట్టింగ్‌లలో దాన్ని సెటప్ చేసి మళ్లీ ప్రయత్నించండి. + ప్రామాణీకరణ గడువు ముగిసింది. మళ్లీ ప్రయత్నించండి. + ఆపరేషన్‌ని పూర్తి చేయడానికి తగినంత నిల్వ లేదు. + ప్రామాణీకరణ విఫలమైంది. మళ్లీ ప్రయత్నించండి. + + బయోమెట్రిక్‌ని ఉపయోగించండి + ప్రామాణీకరణ ఎంపికను సెటప్ చేయండి + Windows Hello ద్వారా ప్రామాణీకరించండి + మద్దతు లేని ప్లాట్‌ఫారమ్ + + యాప్‌ని అన్‌లాక్ చేయండి + PIN, పాస్‌వర్డ్, ప్యాటర్న్, ముఖం లేదా వేలిముద్రతో అన్‌లాక్ చేయండి + మీ బయోమెట్రిక్‌ని నమోదు చేయండి + బయోమెట్రిక్‌తో అన్‌లాక్ చేయండి + + సందేశం + వేలిముద్రతో ప్రామాణీకరించండి + ముఖ గుర్తింపుతో ప్రామాణీకరించండి + ఐరిస్ స్కాన్‌తో ప్రామాణీకరించండి + పరికర PINతో ప్రామాణీకరించండి + సేవ్ చేసిన బయోమెట్రిక్ డేటా చెల్లదు. దయచేసి బయోమెట్రిక్‌లను మళ్లీ సెటప్ చేయండి. + చెల్లని ఇన్‌పుట్ కారణంగా ప్రామాణీకరణ విఫలమైంది. మళ్లీ ప్రయత్నించండి. + చెల్లని ఇన్‌పుట్ కారణంగా నమోదు విఫలమైంది. మళ్లీ ప్రయత్నించండి. + + + పాత పాస్‌కోడ్‌ని నిర్ధారించండి + పాస్‌కోడ్‌ని నిర్ధారించండి + పాస్‌కోడ్‌ని సృష్టించండి + యాప్‌ని వేగంగా అన్‌లాక్ చేయడానికి మీ బయోమెట్రిక్ లేదా పరికర ఆధారాలను ఉపయోగించండి. + బయోమెట్రిక్ ప్రామాణీకరణను ప్రారంభించాలా? + మీ పాస్‌కోడ్‌ని నమోదు చేయండి + పాస్‌కోడ్ మర్చిపోయారా? + లేదు + పాస్‌కోడ్‌లు సరిపోలలేదు. + దాటవేయి + మళ్లీ ప్రయత్నించండి + అవును + + + + + + + + + + + ౪ అంకెలు + ౬ అంకెలు + పాస్‌కోడ్ కనిపించడాన్ని మార్చండి + తొలగించండి + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-th/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-th/strings.xml new file mode 100644 index 00000000..7eef524b --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-th/strings.xml @@ -0,0 +1,87 @@ + + + + ตัวอย่าง Mifos Passcode + + ตกลง + + หน้าจอเข้าสู่ระบบ + ตั้งค่าการล็อกแอป + + หน้าจอหลัก + ออกจากระบบ + เปลี่ยนรหัส + เปิดใช้ไบโอเมตริก + ปิดใช้ไบโอเมตริก + + ตั้งค่าไบโอเมตริก + ปกป้องแอปของคุณ + ใช้ไบโอเมตริก (ลายนิ้วมือหรือใบหน้า) เพื่อการเข้าถึงที่รวดเร็วและปลอดภัยยิ่งขึ้น + ตั้งค่าไบโอเมตริก + ข้ามไปก่อน + + ยังไม่ได้ตั้งค่าไบโอเมตริกบนอุปกรณ์นี้ โปรดเปิดใช้ลายนิ้วมือหรือการปลดล็อกด้วยใบหน้าในการตั้งค่าอุปกรณ์ แล้วลองอีกครั้ง + ไม่สามารถใช้ไบโอเมตริกบนอุปกรณ์นี้ได้ + + ใช้ไบโอเมตริก + ตั้งค่าตัวเลือกการยืนยันตัวตน + ยืนยันตัวตนด้วย Windows Hello + แพลตฟอร์มที่ไม่รองรับ + + ปลดล็อกแอป + ปลดล็อกด้วย PIN รหัสผ่าน รูปแบบ ใบหน้า หรือลายนิ้วมือ + ลงทะเบียนไบโอเมตริก + ปลดล็อกด้วยไบโอเมตริก + + ข้อความ + ตรวจสอบสิทธิ์ด้วยลายนิ้วมือ + ตรวจสอบสิทธิ์ด้วยการจดจำใบหน้า + ตรวจสอบสิทธิ์ด้วยการสแกนม่านตา + ตรวจสอบสิทธิ์ด้วย PIN ของอุปกรณ์ + ข้อมูลไบโอเมตริกที่บันทึกไว้ไม่ถูกต้อง โปรดตั้งค่าไบโอเมตริกใหม่ + การยืนยันตัวตนล้มเหลวเนื่องจากข้อมูลไม่ถูกต้อง โปรดลองอีกครั้ง + การลงทะเบียนล้มเหลวเนื่องจากข้อมูลไม่ถูกต้อง โปรดลองอีกครั้ง + + ลองผิดพลาดหลายครั้งเกินไป ลองอีกครั้งในภายหลัง หรือปลดล็อกด้วย PIN ของอุปกรณ์ + ฮาร์ดแวร์ไบโอเมตริกไม่พร้อมใช้งานในขณะนี้ ลองอีกครั้งในภายหลัง + ยังไม่มีการลงทะเบียนไบโอเมตริก ตั้งค่าในการตั้งค่าอุปกรณ์แล้วลองอีกครั้ง + การยืนยันตัวตนหมดเวลา ลองอีกครั้ง + พื้นที่จัดเก็บไม่เพียงพอสำหรับดำเนินการ + การยืนยันตัวตนล้มเหลว ลองอีกครั้ง + + + ยืนยันรหัสเดิม + ยืนยันรหัส + สร้างรหัส + ใช้ไบโอเมตริกหรือข้อมูลรับรองอุปกรณ์เพื่อปลดล็อกแอปได้รวดเร็วขึ้น + เปิดใช้การยืนยันตัวตนด้วยไบโอเมตริก? + ป้อนรหัสของคุณ + ลืมรหัส? + ไม่ + รหัสไม่ตรงกัน + ข้าม + ลองอีกครั้ง + ใช่ + + + + + + + + + + + ๔ หลัก + ๖ หลัก + สลับการแสดงรหัส + ลบ + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-tr/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-tr/strings.xml new file mode 100644 index 00000000..504c029c --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-tr/strings.xml @@ -0,0 +1,77 @@ + + + + Mifos Passcode Örneği + + Tamam + + Giriş ekranı + Uygulama kilidini ayarlayın + + Ana ekran + Çıkış yapın + Kodu değiştirin + Biyometriyi etkinleştirin + Biyometriyi devre dışı bırakın + + Biyometri Kurulumu + Uygulamanızı güvene alın + Daha hızlı ve daha güvenli erişim için biyometri (parmak izi veya yüz) kullanın. + Biyometriyi kurun + Şimdilik atlayın + + Bu cihazda biyometri ayarlanmamış. Cihaz ayarlarından parmak izi veya yüz tanımayı etkinleştirin ve tekrar deneyin. + Bu cihazda biyometri mevcut değil + + Biyometri kullanın + Kimlik doğrulama seçeneğini ayarlayın + Windows Hello ile kimlik doğrulayın + Desteklenmeyen platform + + Uygulamanın kilidini açın + PIN, şifre, desen, yüz veya parmak izi ile kilidi açın + Biyometrinizi kaydedin + Biyometri ile kilidi açın + + Mesaj + Parmak iziyle kimlik doğrulayın + Yüz tanımayla kimlik doğrulayın + İris taramasıyla kimlik doğrulayın + Cihaz PIN’iyle kimlik doğrulayın + Kaydedilen biyometrik veri geçersiz. Lütfen biyometriği yeniden kurun. + Geçersiz giriş nedeniyle kimlik doğrulama başarısız oldu. Tekrar deneyin. + Geçersiz giriş nedeniyle kayıt başarısız oldu. Tekrar deneyin. + + Çok fazla başarısız deneme. Daha sonra tekrar deneyin veya cihaz PIN'inizle kilidini açın. + Biyometrik donanım şu anda kullanılamıyor. Daha sonra tekrar deneyin. + Kayıtlı biyometrik yok. Cihaz ayarlarından bir tane ekleyin ve tekrar deneyin. + Kimlik doğrulama zaman aşımına uğradı. Tekrar deneyin. + İşlemi tamamlamak için yeterli depolama alanı yok. + Kimlik doğrulama başarısız oldu. Tekrar deneyin. + + + Eski kodu doğrulayın + Kodu doğrulayın + Kod oluşturun + Uygulamanın kilidini daha hızlı açmak için biyometrinizi veya cihaz kimlik bilgilerinizi kullanın. + Biyometrik kimlik doğrulama etkinleştirilsin mi? + Kodu girin + Kodu mu unuttunuz? + Hayır + Kodlar eşleşmiyor. + Atlayın + Tekrar deneyin + Evet + 4 hane + 6 hane + Kod görünürlüğünü değiştirin + Silin + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-uk/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-uk/strings.xml new file mode 100644 index 00000000..a42a609e --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-uk/strings.xml @@ -0,0 +1,77 @@ + + + + Зразок Mifos Passcode + + OK + + Екран входу + Налаштувати блокування додатка + + Головний екран + Вийти + Змінити код + Увімкнути біометрію + Вимкнути біометрію + + Налаштування біометрії + Захистіть свій додаток + Використовуйте біометрію (відбиток пальця або обличчя) для швидшого й безпечнішого доступу. + Налаштувати біометрію + Поки що пропустити + + Біометрія не налаштована на цьому пристрої. Увімкніть відбиток пальця або розпізнавання обличчя в налаштуваннях пристрою та спробуйте ще раз. + Біометрія недоступна на цьому пристрої + + Використовувати біометрію + Налаштувати параметр автентифікації + Аутентифікуватися через Windows Hello + Непідтримувана платформа + + Розблокувати додаток + Розблокуйте за допомогою PIN-коду, пароля, графічного ключа, обличчя або відбитка пальця + Зареєструвати біометрію + Розблокувати біометрією + + Повідомлення + Автентифікація за відбитком пальця + Автентифікація за обличчям + Автентифікація за райдужкою + Автентифікація PIN-кодом пристрою + Збережені біометричні дані недійсні. Налаштуйте біометрію ще раз. + Автентифікація не вдалася через недійсні дані. Спробуйте ще раз. + Реєстрація не вдалася через недійсні дані. Спробуйте ще раз. + + Забагато невдалих спроб. Спробуйте пізніше або розблокуйте за допомогою PIN-коду пристрою. + Біометричне обладнання зараз недоступне. Спробуйте пізніше. + Жодного біометричного методу не зареєстровано. Налаштуйте у параметрах пристрою та спробуйте знову. + Час автентифікації вичерпано. Спробуйте ще раз. + Недостатньо пам'яті для виконання операції. + Автентифікація не вдалася. Спробуйте ще раз. + + + Підтвердіть старий код + Підтвердити код + Створити код + Використовуйте біометрію або облікові дані пристрою, щоб швидше розблокувати додаток. + Увімкнути біометричну автентифікацію? + Введіть код + Забули код? + Ні + Коди не збігаються. + Пропустити + Спробувати ще раз + Так + 4 цифри + 6 цифр + Показати або сховати код + Видалити + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-ur/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-ur/strings.xml new file mode 100644 index 00000000..0bc9bdf8 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-ur/strings.xml @@ -0,0 +1,86 @@ + + + + Mifos Passcode نمونہ + + ٹھیک ہے + + لاگ ان اسکرین + ایپ لاک سیٹ کریں + + ہوم اسکرین + لاگ آؤٹ + پاس کوڈ تبدیل کریں + بایومیٹرک فعال کریں + بایومیٹرک غیر فعال کریں + + بایومیٹرک سیٹ اپ + اپنی ایپ کو محفوظ بنائیں + تیز اور زیادہ محفوظ رسائی کے لیے بایومیٹرک (انگلیوں کے نشان یا چہرہ) استعمال کریں۔ + بایومیٹرک سیٹ کریں + ابھی چھوڑیں + + اس آلے پر بایومیٹرک سیٹ نہیں ہے۔ براہ کرم آلے کی ترتیبات میں انگلیوں کے نشان یا چہرہ ان لاک فعال کریں، پھر دوبارہ کوشش کریں۔ + اس آلے پر بایومیٹرک دستیاب نہیں ہے + بہت زیادہ ناکام کوششیں۔ بعد میں کوشش کریں یا اپنے آلے کے PIN سے ان لاک کریں۔ + بایومیٹرک ہارڈ ویئر فی الحال دستیاب نہیں ہے۔ بعد میں کوشش کریں۔ + کوئی بایومیٹرک رجسٹرڈ نہیں ہے۔ اپنے آلے کی ترتیبات میں ایک سیٹ کریں اور دوبارہ کوشش کریں۔ + تصدیق کا وقت ختم ہو گیا۔ دوبارہ کوشش کریں۔ + عمل مکمل کرنے کے لیے کافی ذخیرہ نہیں ہے۔ + تصدیق ناکام ہو گئی۔ دوبارہ کوشش کریں۔ + + بایومیٹرک استعمال کریں + تصدیق کا اختیار سیٹ کریں + Windows Hello کے ذریعے تصدیق کریں + غیر معاون پلیٹ فارم + + ایپ ان لاک کریں + PIN، پاس ورڈ، پیٹرن، چہرہ یا انگلیوں کے نشان سے ان لاک کریں + اپنا بایومیٹرک رجسٹر کریں + بایومیٹرک سے ان لاک کریں + + پیغام + فنگر پرنٹ سے تصدیق کریں + چہرے کی شناخت سے تصدیق کریں + آئیرس اسکین سے تصدیق کریں + ڈیوائس پن سے تصدیق کریں + محفوظ بایومیٹرک ڈیٹا غلط ہے۔ براہ کرم بایومیٹرکس کو دوبارہ ترتیب دیں۔ + غلط ان پٹ کی وجہ سے توثیق ناکام ہو گئی۔ دوبارہ کوشش کریں۔ + غلط ان پٹ کی وجہ سے رجسٹریشن ناکام ہو گئی۔ دوبارہ کوشش کریں۔ + + + پرانے پاس کوڈ کی تصدیق کریں + پاس کوڈ کی تصدیق کریں + پاس کوڈ بنائیں + ایپ کو تیزی سے ان لاک کرنے کے لیے اپنا بایومیٹرک یا آلے کی اسناد استعمال کریں۔ + بایومیٹرک تصدیق فعال کریں؟ + اپنا پاس کوڈ درج کریں + پاس کوڈ بھول گئے؟ + نہیں + پاس کوڈ مماثل نہیں ہیں۔ + چھوڑیں + دوبارہ کوشش کریں + جی ہاں + ۰ + ۱ + ۲ + ۳ + ۴ + ۵ + ۶ + ۷ + ۸ + ۹ + ۴ ہندسے + ۶ ہندسے + پاس کوڈ کی مرئیت تبدیل کریں + حذف کریں + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-vi/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-vi/strings.xml new file mode 100644 index 00000000..5758bc4a --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-vi/strings.xml @@ -0,0 +1,77 @@ + + + + Mẫu Mifos Passcode + + OK + + Màn hình đăng nhập + Thiết lập khóa ứng dụng + + Màn hình chính + Đăng xuất + Thay đổi mã + Bật sinh trắc học + Tắt sinh trắc học + + Thiết lập sinh trắc học + Bảo mật ứng dụng của bạn + Sử dụng sinh trắc học (vân tay hoặc khuôn mặt) để truy cập nhanh hơn và an toàn hơn. + Thiết lập sinh trắc học + Bỏ qua bây giờ + + Sinh trắc học chưa được thiết lập trên thiết bị này. Vui lòng bật vân tay hoặc nhận diện khuôn mặt trong cài đặt thiết bị, sau đó thử lại. + Sinh trắc học không khả dụng trên thiết bị này + + Sử dụng sinh trắc học + Thiết lập tùy chọn xác thực + Xác thực bằng Windows Hello + Nền tảng không được hỗ trợ + + Mở khóa ứng dụng + Mở khóa bằng PIN, mật khẩu, hình mẫu, khuôn mặt hoặc vân tay + Đăng ký sinh trắc học + Mở khóa bằng sinh trắc học + + Thông báo + Xác thực bằng vân tay + Xác thực bằng nhận diện khuôn mặt + Xác thực bằng quét mống mắt + Xác thực bằng mã PIN thiết bị + Dữ liệu sinh trắc học đã lưu không hợp lệ. Vui lòng thiết lập lại sinh trắc học. + Xác thực thất bại do dữ liệu nhập không hợp lệ. Thử lại. + Đăng ký thất bại do dữ liệu nhập không hợp lệ. Thử lại. + + Quá nhiều lần thử thất bại. Hãy thử lại sau hoặc mở khóa bằng mã PIN của thiết bị. + Phần cứng sinh trắc học hiện không khả dụng. Hãy thử lại sau. + Chưa có sinh trắc học nào được đăng ký. Hãy thiết lập trong cài đặt thiết bị và thử lại. + Xác thực đã hết thời gian chờ. Thử lại. + Không đủ bộ nhớ để hoàn tất thao tác. + Xác thực thất bại. Thử lại. + + + Xác nhận mã cũ + Xác nhận mã + Tạo mã + Sử dụng sinh trắc học hoặc thông tin xác thực thiết bị để mở khóa ứng dụng nhanh hơn. + Bật xác thực sinh trắc học? + Nhập mã của bạn + Quên mã? + Không + Các mã không khớp. + Bỏ qua + Thử lại + + 4 chữ số + 6 chữ số + Bật/tắt hiển thị mã + Xoá + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-zh-rCN/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-zh-rCN/strings.xml new file mode 100644 index 00000000..c63ec814 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-zh-rCN/strings.xml @@ -0,0 +1,77 @@ + + + + Mifos Passcode 示例 + + 确定 + + 登录界面 + 设置应用锁 + + 主界面 + 退出登录 + 更改密码 + 启用生物识别 + 禁用生物识别 + + 生物识别设置 + 保护您的应用 + 使用生物识别(指纹或人脸)实现更快、更安全的访问。 + 设置生物识别 + 暂时跳过 + + 此设备上未设置生物识别。请在设备设置中启用指纹或人脸解锁,然后重试。 + 此设备不支持生物识别 + + 使用生物识别 + 设置身份验证选项 + 使用 Windows Hello 进行身份验证 + 不支持的平台 + + 解锁应用 + 使用 PIN、密码、图案、人脸或指纹解锁 + 注册您的生物识别 + 通过生物识别解锁 + + 消息 + 使用指纹进行身份验证 + 使用面部识别进行身份验证 + 使用虹膜扫描进行身份验证 + 使用设备 PIN 进行身份验证 + 已保存的生物识别数据无效。请重新设置生物识别。 + 由于输入无效,身份验证失败。请重试。 + 由于输入无效,注册失败。请重试。 + + 失败次数过多,请稍后再试,或使用设备 PIN 解锁。 + 生物识别硬件当前不可用,请稍后再试。 + 未录入任何生物识别信息。请在设备设置中完成录入,然后重试。 + 验证已超时,请重试。 + 存储空间不足,无法完成操作。 + 验证失败,请重试。 + + + 确认旧密码 + 确认密码 + 创建密码 + 使用您的生物识别或设备凭据更快地解锁应用。 + 启用生物识别认证? + 输入您的密码 + 忘记密码? + + 密码不匹配。 + 跳过 + 重试 + + 4位 + 6位 + 切换密码可见性 + 删除 + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values-zh-rTW/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values-zh-rTW/strings.xml new file mode 100644 index 00000000..79d77075 --- /dev/null +++ b/cmp-sample-shared/src/commonMain/composeResources/values-zh-rTW/strings.xml @@ -0,0 +1,77 @@ + + + + Mifos Passcode 範例 + + 確定 + + 登入畫面 + 設定應用程式鎖 + + 主畫面 + 登出 + 變更密碼 + 啟用生物辨識 + 停用生物辨識 + + 生物辨識設定 + 保護您的應用程式 + 使用生物辨識(指紋或臉部)以更快速、更安全地存取。 + 設定生物辨識 + 暫時略過 + + 此裝置尚未設定生物辨識。請在裝置設定中啟用指紋或臉部解鎖,然後再試一次。 + 此裝置不支援生物辨識 + + 使用生物辨識 + 設定驗證選項 + 使用 Windows Hello 進行驗證 + 不支援的平台 + + 解鎖應用程式 + 使用 PIN、密碼、圖形、臉部或指紋解鎖 + 註冊您的生物辨識 + 使用生物辨識解鎖 + + 訊息 + 使用指紋驗證 + 使用臉部辨識驗證 + 使用虹膜掃描驗證 + 使用裝置 PIN 驗證 + 儲存的生物辨識資料無效。請重新設定生物辨識。 + 由於輸入無效,驗證失敗。請再試一次。 + 由於輸入無效,註冊失敗。請再試一次。 + + 失敗次數過多,請稍後再試,或使用裝置 PIN 解鎖。 + 生物辨識硬體目前無法使用,請稍後再試。 + 尚未登錄任何生物辨識資料。請在裝置設定中完成設定,然後再試一次。 + 驗證逾時,請再試一次。 + 儲存空間不足,無法完成操作。 + 驗證失敗,請再試一次。 + + + 確認舊密碼 + 確認密碼 + 建立密碼 + 使用您的生物辨識或裝置認證,更快速地解鎖應用程式。 + 啟用生物辨識驗證? + 輸入您的密碼 + 忘記密碼? + + 密碼不相符。 + 略過 + 重試 + + 4位 + 6位 + 切換密碼顯示 + 刪除 + diff --git a/cmp-sample-shared/src/commonMain/composeResources/values/strings.xml b/cmp-sample-shared/src/commonMain/composeResources/values/strings.xml index 84a8c57e..0395cc9a 100644 --- a/cmp-sample-shared/src/commonMain/composeResources/values/strings.xml +++ b/cmp-sample-shared/src/commonMain/composeResources/values/strings.xml @@ -9,37 +9,88 @@ See https://github.com/openMF/mifos-passcode-cmp/blob/development/LICENSE --> - App Name - Are your sure your want to exit. - Authentication failed. - Authentication not available - Authentication not set - Biometric registration successful - Cancel - Confirm Passcode - Create Passcode - Delete Passcode - drag_guide - drag_passcode - drag_your_pattern - enable_biometric_dialog_description - enable_biometric_dialog_title - Enter your passcode - Exit - Forgot Passcode? - Forgot Passcode? Login Manually - has_drag_passcode - Has Passcode - No - Ok - Passcode - Passcode do not match. - Pref Name - Skip - Try again - Use FaceId - Use Fingerprint - Yes - Unlock App - Unlock using your PIN, Password, Pattern, Face or Fingerprint + Mifos Passcode Sample + + + OK + + + Login Screen + Setup App Lock + + + Home Screen + Log Out + Change Passcode + Enable Biometrics + Disable Biometrics + + + Biometric Setup + Secure Your App + Use biometrics (fingerprint or face) for faster and more secure access. + Setup Biometrics + Skip for Now + + + Biometrics are not set up on this device. Please enable fingerprint or face unlock in your device settings, then try again. + Biometrics not available on this device + Too many failed attempts. Try again later or unlock with your device PIN. + Biometric hardware is currently unavailable. Try again later. + No biometric is enrolled. Set one up in your device settings and try again. + Authentication timed out. Try again. + Not enough storage to complete the operation. + Saved biometric data is invalid. Please set up biometrics again. + Authentication failed due to invalid input. Try again. + Registration failed due to invalid input. Try again. + Authentication failed. Try again. + + + Use Biometrics + Set up Authentication Option + Authenticate using Windows Hello + Unsupported platform + + + Authenticate with fingerprint + Authenticate with face recognition + Authenticate with iris scan + Authenticate with device PIN + + + Unlock App + Unlock using your PIN, Password, Pattern, Face or Fingerprint + Register your biometric + Unlock with Biometrics + + + Message + + + Confirm old passcode + Confirm Passcode + Create Passcode + Use your biometric or device credentials to unlock the app faster. + Enable biometric authentication? + Enter your passcode + Forgot Passcode? + No + Passcodes do not match. + Skip + Try again + Yes + 4 digits + 6 digits + Toggle passcode visibility + Delete + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 diff --git a/cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/platformAuthentication/BiometricKey.kt b/cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/platformAuthentication/BiometricKey.kt index f0ed0899..027c1ea6 100644 --- a/cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/platformAuthentication/BiometricKey.kt +++ b/cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/platformAuthentication/BiometricKey.kt @@ -20,8 +20,23 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import kotlinx.coroutines.launch +import mifos_authenticator.cmp_sample_shared.generated.resources.Res +import mifos_authenticator.cmp_sample_shared.generated.resources.biometric_error_hardware_unavailable +import mifos_authenticator.cmp_sample_shared.generated.resources.biometric_error_invalid_arguments_auth +import mifos_authenticator.cmp_sample_shared.generated.resources.biometric_error_invalid_arguments_registration +import mifos_authenticator.cmp_sample_shared.generated.resources.biometric_error_invalid_registration_data +import mifos_authenticator.cmp_sample_shared.generated.resources.biometric_error_lockout +import mifos_authenticator.cmp_sample_shared.generated.resources.biometric_error_no_space +import mifos_authenticator.cmp_sample_shared.generated.resources.biometric_error_not_enrolled +import mifos_authenticator.cmp_sample_shared.generated.resources.biometric_error_timeout +import mifos_authenticator.cmp_sample_shared.generated.resources.biometric_error_unknown +import mifos_authenticator.cmp_sample_shared.generated.resources.biometric_prompt_subtitle +import mifos_authenticator.cmp_sample_shared.generated.resources.biometric_prompt_title +import org.jetbrains.compose.resources.stringResource import org.mifos.authenticator.biometrics.platformAuthenticationProvider +import org.mifos.authenticator.biometrics.platformAuthenticator.AuthStage import org.mifos.authenticator.biometrics.platformAuthenticator.AuthenticationResult +import org.mifos.authenticator.biometrics.platformAuthenticator.BiometricError import org.mifos.authenticator.biometrics.platformAuthenticator.PlatformAuthOptions import org.mifos.authenticator.biometrics.platformAuthenticator.PlatformAuthenticatorStatus import org.mifos.authenticator.biometrics.platformAvailableAuthenticationOption @@ -30,7 +45,10 @@ import org.mifos.authenticator.passcode.components.PasscodeKey @Composable fun BiometricKey( modifier: Modifier, - appName: String = "Unlock with Biometrics", + title: String = stringResource(Res.string.biometric_prompt_title), + subtitle: String = stringResource(Res.string.biometric_prompt_subtitle), + description: String = "", + negativeButtonText: String = "", onSuccess: () -> Unit, onUserNotRegistered: () -> Unit, onAuthenticationError: (String) -> Unit, @@ -41,6 +59,8 @@ fun BiometricKey( val authenticatorStatus by platformAuthenticationProvider.authenticatorStatus.collectAsState() val scope = rememberCoroutineScope() + val errorMessages = rememberBiometricErrorMessages() + val isBiometricAvailable = authenticatorStatus.contains(PlatformAuthenticatorStatus.BIOMETRICS_SET) || authenticatorStatus.contains(PlatformAuthenticatorStatus.DEVICE_CREDENTIAL_SET) @@ -56,9 +76,15 @@ fun BiometricKey( keyIcon = icon, onClick = { scope.launch { - when (val result = platformAuthenticationProvider.onAuthenticatorClick(appName)) { + val result = platformAuthenticationProvider.onAuthenticatorClick( + title = title, + subtitle = subtitle, + description = description, + negativeButtonText = negativeButtonText, + ) + when (result) { is AuthenticationResult.Success -> onSuccess() - is AuthenticationResult.Error -> onAuthenticationError(result.message) + is AuthenticationResult.Error -> onAuthenticationError(errorMessages.localize(result.error)) is AuthenticationResult.UserNotRegistered -> onUserNotRegistered() AuthenticationResult.UserCancelled -> { } } @@ -67,3 +93,46 @@ fun BiometricKey( ) } } + +/** + * Pre-resolved localized strings for each [BiometricError] case, bundled so callers can + * map errors to strings outside a `@Composable` context (e.g. inside `scope.launch`). + */ +internal class BiometricErrorMessages( + val lockout: String, + val hardwareUnavailable: String, + val notEnrolled: String, + val timeout: String, + val noSpace: String, + val invalidRegistrationData: String, + val invalidArgumentsAuth: String, + val invalidArgumentsRegistration: String, + val unknown: String, +) { + fun localize(error: BiometricError): String = when (error) { + BiometricError.Lockout, BiometricError.LockoutPermanent -> lockout + BiometricError.HardwareUnavailable -> hardwareUnavailable + BiometricError.NotEnrolled -> notEnrolled + BiometricError.Timeout -> timeout + BiometricError.NoSpace -> noSpace + BiometricError.InvalidRegistrationData -> invalidRegistrationData + is BiometricError.InvalidArguments -> when (error.stage) { + AuthStage.Authentication -> invalidArgumentsAuth + AuthStage.Registration -> invalidArgumentsRegistration + } + is BiometricError.Unknown -> unknown + } +} + +@Composable +internal fun rememberBiometricErrorMessages(): BiometricErrorMessages = BiometricErrorMessages( + lockout = stringResource(Res.string.biometric_error_lockout), + hardwareUnavailable = stringResource(Res.string.biometric_error_hardware_unavailable), + notEnrolled = stringResource(Res.string.biometric_error_not_enrolled), + timeout = stringResource(Res.string.biometric_error_timeout), + noSpace = stringResource(Res.string.biometric_error_no_space), + invalidRegistrationData = stringResource(Res.string.biometric_error_invalid_registration_data), + invalidArgumentsAuth = stringResource(Res.string.biometric_error_invalid_arguments_auth), + invalidArgumentsRegistration = stringResource(Res.string.biometric_error_invalid_arguments_registration), + unknown = stringResource(Res.string.biometric_error_unknown), +) diff --git a/cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/platformAuthentication/BiometricSetupScreen.kt b/cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/platformAuthentication/BiometricSetupScreen.kt index cc95957e..4263b1af 100644 --- a/cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/platformAuthentication/BiometricSetupScreen.kt +++ b/cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/platformAuthentication/BiometricSetupScreen.kt @@ -35,6 +35,16 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import cmp.sample.shared.theme.blueTint import kotlinx.coroutines.launch +import mifos_authenticator.cmp_sample_shared.generated.resources.Res +import mifos_authenticator.cmp_sample_shared.generated.resources.biometric_prompt_register_title +import mifos_authenticator.cmp_sample_shared.generated.resources.biometric_setup_confirm +import mifos_authenticator.cmp_sample_shared.generated.resources.biometric_setup_description +import mifos_authenticator.cmp_sample_shared.generated.resources.biometric_setup_headline +import mifos_authenticator.cmp_sample_shared.generated.resources.biometric_setup_skip +import mifos_authenticator.cmp_sample_shared.generated.resources.biometric_setup_title +import mifos_authenticator.cmp_sample_shared.generated.resources.biometrics_not_available_message +import mifos_authenticator.cmp_sample_shared.generated.resources.biometrics_not_set_up_message +import org.jetbrains.compose.resources.stringResource import org.mifos.authenticator.biometrics.platformAuthenticationProvider import org.mifos.authenticator.biometrics.platformAuthenticator.RegistrationResult import org.mifos.authenticator.passcode.components.MifosIcon @@ -49,10 +59,15 @@ fun BiometricSetupScreen( val platformAuthenticationProvider = platformAuthenticationProvider.current val scope = rememberCoroutineScope() + val biometricsNotSetUpMessage = stringResource(Res.string.biometrics_not_set_up_message) + val biometricsNotAvailableMessage = stringResource(Res.string.biometrics_not_available_message) + val biometricPromptRegisterTitle = stringResource(Res.string.biometric_prompt_register_title) + val biometricErrorMessages = rememberBiometricErrorMessages() + Scaffold( topBar = { TopAppBar( - title = { Text("Biometric Setup") }, + title = { Text(stringResource(Res.string.biometric_setup_title)) }, ) }, ) { paddingValues -> @@ -70,7 +85,7 @@ fun BiometricSetupScreen( Spacer(Modifier.height(40.dp)) Text( - text = "Secure Your App", + text = stringResource(Res.string.biometric_setup_headline), fontSize = 24.sp, fontWeight = FontWeight.Bold, color = Color.Black, @@ -79,7 +94,7 @@ fun BiometricSetupScreen( Spacer(Modifier.height(16.dp)) Text( - text = "Use biometrics (fingerprint or face) for faster and more secure access.", + text = stringResource(Res.string.biometric_setup_description), fontSize = 16.sp, color = Color.Gray, modifier = Modifier.padding(horizontal = 16.dp), @@ -92,22 +107,23 @@ fun BiometricSetupScreen( onClick = { scope.launch { val result = platformAuthenticationProvider.registerUser( - "mifosUser", - "mifos@mifos.org", - "Mifos User", + userName = "mifosUser", + emailId = "mifos@mifos.org", + displayName = "Mifos User", + title = biometricPromptRegisterTitle, ) when (result) { is RegistrationResult.Success -> { onBiometricsRegistrationSuccess() } RegistrationResult.PlatformAuthenticatorNotSet -> { - onError("Biometrics are not set up on this device. Please enable fingerprint or face unlock in your device settings, then try again.") + onError(biometricsNotSetUpMessage) } RegistrationResult.PlatformAuthenticatorNotAvailable -> { - onError("Biometrics not available on this device") + onError(biometricsNotAvailableMessage) } is RegistrationResult.Error -> { - onError(result.message) + onError(biometricErrorMessages.localize(result.error)) } RegistrationResult.UserCancelled -> { /* User dismissed prompt, do nothing */ } } @@ -117,7 +133,7 @@ fun BiometricSetupScreen( shape = RoundedCornerShape(50.dp), colors = ButtonDefaults.buttonColors(containerColor = blueTint), ) { - Text("Setup Biometrics", color = Color.White) + Text(stringResource(Res.string.biometric_setup_confirm), color = Color.White) } Spacer(Modifier.height(16.dp)) @@ -126,7 +142,7 @@ fun BiometricSetupScreen( onClick = onSkipBiometricSetup, modifier = Modifier.fillMaxWidth(), ) { - Text("Skip for Now", color = blueTint) + Text(stringResource(Res.string.biometric_setup_skip), color = blueTint) } } } diff --git a/cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/platformAuthentication/PasscodeScreenWithBiometrics.kt b/cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/platformAuthentication/PasscodeScreenWithBiometrics.kt index d427793b..4adac973 100644 --- a/cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/platformAuthentication/PasscodeScreenWithBiometrics.kt +++ b/cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/platformAuthentication/PasscodeScreenWithBiometrics.kt @@ -12,9 +12,41 @@ package cmp.sample.shared.platformAuthentication import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import mifos_authenticator.cmp_sample_shared.generated.resources.Res +import mifos_authenticator.cmp_sample_shared.generated.resources.biometric_prompt_subtitle +import mifos_authenticator.cmp_sample_shared.generated.resources.biometric_prompt_title +import mifos_authenticator.cmp_sample_shared.generated.resources.mifos_passcode_cd_delete_passcode_key +import mifos_authenticator.cmp_sample_shared.generated.resources.mifos_passcode_cd_toggle_passcode_visibility +import mifos_authenticator.cmp_sample_shared.generated.resources.mifos_passcode_confirm_old_passcode +import mifos_authenticator.cmp_sample_shared.generated.resources.mifos_passcode_confirm_passcode +import mifos_authenticator.cmp_sample_shared.generated.resources.mifos_passcode_create_passcode +import mifos_authenticator.cmp_sample_shared.generated.resources.mifos_passcode_digit_0 +import mifos_authenticator.cmp_sample_shared.generated.resources.mifos_passcode_digit_1 +import mifos_authenticator.cmp_sample_shared.generated.resources.mifos_passcode_digit_2 +import mifos_authenticator.cmp_sample_shared.generated.resources.mifos_passcode_digit_3 +import mifos_authenticator.cmp_sample_shared.generated.resources.mifos_passcode_digit_4 +import mifos_authenticator.cmp_sample_shared.generated.resources.mifos_passcode_digit_5 +import mifos_authenticator.cmp_sample_shared.generated.resources.mifos_passcode_digit_6 +import mifos_authenticator.cmp_sample_shared.generated.resources.mifos_passcode_digit_7 +import mifos_authenticator.cmp_sample_shared.generated.resources.mifos_passcode_digit_8 +import mifos_authenticator.cmp_sample_shared.generated.resources.mifos_passcode_digit_9 +import mifos_authenticator.cmp_sample_shared.generated.resources.mifos_passcode_enable_external_auth_dialog_description +import mifos_authenticator.cmp_sample_shared.generated.resources.mifos_passcode_enable_external_auth_dialog_title +import mifos_authenticator.cmp_sample_shared.generated.resources.mifos_passcode_enter_your_passcode +import mifos_authenticator.cmp_sample_shared.generated.resources.mifos_passcode_forgot_passcode +import mifos_authenticator.cmp_sample_shared.generated.resources.mifos_passcode_no +import mifos_authenticator.cmp_sample_shared.generated.resources.mifos_passcode_passcode_do_not_match +import mifos_authenticator.cmp_sample_shared.generated.resources.mifos_passcode_passcode_length_4_digits +import mifos_authenticator.cmp_sample_shared.generated.resources.mifos_passcode_passcode_length_6_digits +import mifos_authenticator.cmp_sample_shared.generated.resources.mifos_passcode_skip +import mifos_authenticator.cmp_sample_shared.generated.resources.mifos_passcode_try_again +import mifos_authenticator.cmp_sample_shared.generated.resources.mifos_passcode_yes +import org.jetbrains.compose.resources.stringResource import org.mifos.authenticator.biometrics.platformAuthenticationProvider import org.mifos.authenticator.passcode.PasscodeManager import org.mifos.authenticator.passcode.PasscodeResult +import org.mifos.authenticator.passcode.PasscodeStrings import org.mifos.authenticator.passcode.screen.PasscodeScreen /** @@ -42,8 +74,12 @@ fun PasscodeScreenWithBiometrics( onPasscodeResult: (PasscodeResult) -> Unit, onBiometricSuccess: () -> Unit, onBiometricError: (String) -> Unit = {}, - appName: String = "Unlock with Biometrics", + biometricPromptTitle: String = stringResource(Res.string.biometric_prompt_title), + biometricPromptSubtitle: String = stringResource(Res.string.biometric_prompt_subtitle), + biometricPromptDescription: String = "", + biometricPromptNegativeButtonText: String = "", hideBiometricButton: Boolean = false, + passcodeStrings: PasscodeStrings = rememberPasscodeStringsFromResources(), ) { val authProvider = platformAuthenticationProvider.current val isRegistered by authProvider.isRegistered.collectAsState() @@ -55,11 +91,81 @@ fun PasscodeScreenWithBiometrics( externalAuthButton = { modifier -> BiometricKey( modifier = modifier, - appName = appName, + title = biometricPromptTitle, + subtitle = biometricPromptSubtitle, + description = biometricPromptDescription, + negativeButtonText = biometricPromptNegativeButtonText, onSuccess = onBiometricSuccess, onUserNotRegistered = { /* no-op; isRegistered flips via provider */ }, onAuthenticationError = onBiometricError, ) }, + strings = passcodeStrings, ) } + +/** + * Resolves a [PasscodeStrings] instance from this sample app's own `composeResources`, + * using keys prefixed `mifos_passcode_*` (populated from the published `l10n-templates/` + * once the library stops bundling its own translations). + * + * Memoized via [remember] keyed on the underlying string values so the data class is + * reconstructed only when an underlying resource changes (e.g. locale switch). + */ +@Composable +private fun rememberPasscodeStringsFromResources(): PasscodeStrings { + val createPasscode = stringResource(Res.string.mifos_passcode_create_passcode) + val confirmPasscode = stringResource(Res.string.mifos_passcode_confirm_passcode) + val confirmOldPasscode = stringResource(Res.string.mifos_passcode_confirm_old_passcode) + val enterPasscode = stringResource(Res.string.mifos_passcode_enter_your_passcode) + val passcodeDoNotMatch = stringResource(Res.string.mifos_passcode_passcode_do_not_match) + val tryAgain = stringResource(Res.string.mifos_passcode_try_again) + val skip = stringResource(Res.string.mifos_passcode_skip) + val forgotPasscode = stringResource(Res.string.mifos_passcode_forgot_passcode) + val enableExternalAuthDialogTitle = stringResource(Res.string.mifos_passcode_enable_external_auth_dialog_title) + val enableExternalAuthDialogDescription = stringResource(Res.string.mifos_passcode_enable_external_auth_dialog_description) + val yes = stringResource(Res.string.mifos_passcode_yes) + val no = stringResource(Res.string.mifos_passcode_no) + val cdTogglePasscodeVisibility = stringResource(Res.string.mifos_passcode_cd_toggle_passcode_visibility) + val cdDeletePasscodeKey = stringResource(Res.string.mifos_passcode_cd_delete_passcode_key) + val passcodeLength4Digits = stringResource(Res.string.mifos_passcode_passcode_length_4_digits) + val passcodeLength6Digits = stringResource(Res.string.mifos_passcode_passcode_length_6_digits) + val digit0 = stringResource(Res.string.mifos_passcode_digit_0) + val digit1 = stringResource(Res.string.mifos_passcode_digit_1) + val digit2 = stringResource(Res.string.mifos_passcode_digit_2) + val digit3 = stringResource(Res.string.mifos_passcode_digit_3) + val digit4 = stringResource(Res.string.mifos_passcode_digit_4) + val digit5 = stringResource(Res.string.mifos_passcode_digit_5) + val digit6 = stringResource(Res.string.mifos_passcode_digit_6) + val digit7 = stringResource(Res.string.mifos_passcode_digit_7) + val digit8 = stringResource(Res.string.mifos_passcode_digit_8) + val digit9 = stringResource(Res.string.mifos_passcode_digit_9) + return remember( + createPasscode, confirmPasscode, confirmOldPasscode, enterPasscode, + passcodeDoNotMatch, tryAgain, skip, forgotPasscode, + enableExternalAuthDialogTitle, enableExternalAuthDialogDescription, + yes, no, cdTogglePasscodeVisibility, cdDeletePasscodeKey, + passcodeLength4Digits, passcodeLength6Digits, + digit0, digit1, digit2, digit3, digit4, digit5, digit6, digit7, digit8, digit9, + ) { + PasscodeStrings( + createPasscode = createPasscode, + confirmPasscode = confirmPasscode, + confirmOldPasscode = confirmOldPasscode, + enterPasscode = enterPasscode, + passcodeDoNotMatch = passcodeDoNotMatch, + tryAgain = tryAgain, + skip = skip, + forgotPasscode = forgotPasscode, + enableExternalAuthDialogTitle = enableExternalAuthDialogTitle, + enableExternalAuthDialogDescription = enableExternalAuthDialogDescription, + yes = yes, + no = no, + cdTogglePasscodeVisibility = cdTogglePasscodeVisibility, + cdDeletePasscodeKey = cdDeletePasscodeKey, + passcodeLength4Digits = passcodeLength4Digits, + passcodeLength6Digits = passcodeLength6Digits, + digits = listOf(digit0, digit1, digit2, digit3, digit4, digit5, digit6, digit7, digit8, digit9), + ) + } +} diff --git a/cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/platformAuthentication/components/SystemAuthenticatorButton.kt b/cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/platformAuthentication/components/SystemAuthenticatorButton.kt index ae7fa66a..1bde6b1a 100644 --- a/cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/platformAuthentication/components/SystemAuthenticatorButton.kt +++ b/cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/platformAuthentication/components/SystemAuthenticatorButton.kt @@ -29,11 +29,20 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import cmp.sample.shared.theme.blueTint import mifos_authenticator.cmp_sample_shared.generated.resources.Res +import mifos_authenticator.cmp_sample_shared.generated.resources.authenticate_using_windows_hello +import mifos_authenticator.cmp_sample_shared.generated.resources.cd_device_credential_icon +import mifos_authenticator.cmp_sample_shared.generated.resources.cd_face_scan_icon +import mifos_authenticator.cmp_sample_shared.generated.resources.cd_fingerprint_icon +import mifos_authenticator.cmp_sample_shared.generated.resources.cd_iris_scan_icon import mifos_authenticator.cmp_sample_shared.generated.resources.eye_scanner import mifos_authenticator.cmp_sample_shared.generated.resources.face_scan import mifos_authenticator.cmp_sample_shared.generated.resources.fingerprint import mifos_authenticator.cmp_sample_shared.generated.resources.keypad +import mifos_authenticator.cmp_sample_shared.generated.resources.setup_authentication_option +import mifos_authenticator.cmp_sample_shared.generated.resources.unsupported_platform +import mifos_authenticator.cmp_sample_shared.generated.resources.use_biometrics import org.jetbrains.compose.resources.painterResource +import org.jetbrains.compose.resources.stringResource import org.mifos.authenticator.biometrics.Platform import org.mifos.authenticator.biometrics.getPlatform import org.mifos.authenticator.biometrics.platformAuthenticator.PlatformAuthOptions @@ -63,33 +72,33 @@ fun SystemAuthenticatorButton( ) { AuthenticateButton( onClick = onClick, - text = "Use Biometrics", + text = stringResource(Res.string.use_biometrics), ) } else if (platformAuthOptions.contains(PlatformAuthOptions.Fingerprint)) { Image( painter = painterResource(Res.drawable.fingerprint), - contentDescription = "Fingerprint icon", + contentDescription = stringResource(Res.string.cd_fingerprint_icon), modifier = Modifier.size(50.dp) .clickable { onClick() }, ) } else if (platformAuthOptions.contains(PlatformAuthOptions.FaceId)) { Image( painter = painterResource(Res.drawable.face_scan), - contentDescription = "Fingerprint icon", + contentDescription = stringResource(Res.string.cd_face_scan_icon), modifier = Modifier.size(50.dp) .clickable { onClick() }, ) } else if (platformAuthOptions.contains(PlatformAuthOptions.Iris)) { Image( painter = painterResource(Res.drawable.eye_scanner), - contentDescription = "Fingerprint icon", + contentDescription = stringResource(Res.string.cd_iris_scan_icon), modifier = Modifier.size(50.dp) .clickable { onClick() }, ) } else if (platformAuthOptions.contains(PlatformAuthOptions.UserCredential)) { Image( painter = painterResource(Res.drawable.keypad), - contentDescription = "Fingerprint icon", + contentDescription = stringResource(Res.string.cd_device_credential_icon), modifier = Modifier.size(50.dp) .clickable { onClick() }, ) @@ -97,31 +106,31 @@ fun SystemAuthenticatorButton( } else if (authenticatorStatus.contains(PlatformAuthenticatorStatus.DEVICE_CREDENTIAL_SET)) { Image( painter = painterResource(Res.drawable.keypad), - contentDescription = "Fingerprint icon", + contentDescription = stringResource(Res.string.cd_device_credential_icon), modifier = Modifier.size(50.dp) .clickable { onClick() }, ) } else { - Text("Set up Authentication Option") + Text(stringResource(Res.string.setup_authentication_option)) } } Platform.IOS -> { if (authenticatorStatus.contains(PlatformAuthenticatorStatus.BIOMETRICS_SET)) { Image( painter = painterResource(Res.drawable.face_scan), - contentDescription = "Fingerprint icon", + contentDescription = stringResource(Res.string.cd_face_scan_icon), modifier = Modifier.size(40.dp) .clickable { onClick() }, ) } else if (authenticatorStatus.contains(PlatformAuthenticatorStatus.DEVICE_CREDENTIAL_SET)) { Image( painter = painterResource(Res.drawable.keypad), - contentDescription = "Fingerprint icon", + contentDescription = stringResource(Res.string.cd_device_credential_icon), modifier = Modifier.size(40.dp) .clickable { onClick() }, ) } else { - Text("Set up Authentication Option") + Text(stringResource(Res.string.setup_authentication_option)) } } Platform.JVM -> { @@ -131,17 +140,17 @@ fun SystemAuthenticatorButton( ) { AuthenticateButton( onClick = onClick, - text = "Authenticate using Windows Hello", + text = stringResource(Res.string.authenticate_using_windows_hello), ) } else { - Text("Unsupported platform") + Text(stringResource(Res.string.unsupported_platform)) } } Platform.JS -> { - Text("Unsupported platform") + Text(stringResource(Res.string.unsupported_platform)) } Platform.WASMJS -> { - Text("Unsupported platform") + Text(stringResource(Res.string.unsupported_platform)) } } } diff --git a/cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/screens/HomeScreen.kt b/cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/screens/HomeScreen.kt index 588b0c35..4db4a1ef 100644 --- a/cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/screens/HomeScreen.kt +++ b/cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/screens/HomeScreen.kt @@ -14,6 +14,7 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding import androidx.compose.material3.Button import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -23,9 +24,21 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import cmp.sample.shared.platformAuthentication.rememberBiometricErrorMessages import kotlinx.coroutines.launch +import mifos_authenticator.cmp_sample_shared.generated.resources.Res +import mifos_authenticator.cmp_sample_shared.generated.resources.biometric_prompt_register_title +import mifos_authenticator.cmp_sample_shared.generated.resources.biometrics_not_available_message +import mifos_authenticator.cmp_sample_shared.generated.resources.biometrics_not_set_up_message +import mifos_authenticator.cmp_sample_shared.generated.resources.change_passcode +import mifos_authenticator.cmp_sample_shared.generated.resources.disable_biometrics +import mifos_authenticator.cmp_sample_shared.generated.resources.enable_biometrics +import mifos_authenticator.cmp_sample_shared.generated.resources.home_screen_title +import mifos_authenticator.cmp_sample_shared.generated.resources.log_out +import org.jetbrains.compose.resources.stringResource import org.koin.compose.koinInject import org.mifos.authenticator.biometrics.platformAuthenticationProvider import org.mifos.authenticator.biometrics.platformAuthenticator.RegistrationResult @@ -44,15 +57,22 @@ fun HomeScreen( val isRegistered by platformAuthenticationProvider.isRegistered.collectAsState() val scope = rememberCoroutineScope() + val biometricsNotSetUpMessage = stringResource(Res.string.biometrics_not_set_up_message) + val biometricsNotAvailableMessage = stringResource(Res.string.biometrics_not_available_message) + val biometricPromptRegisterTitle = stringResource(Res.string.biometric_prompt_register_title) + val biometricErrorMessages = rememberBiometricErrorMessages() + Column( - modifier = Modifier.fillMaxSize(), + modifier = Modifier.fillMaxSize().padding(horizontal = 24.dp), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally, ) { Text( - "Home Screen", + stringResource(Res.string.home_screen_title), fontSize = 48.sp, + lineHeight = 56.sp, fontWeight = FontWeight.ExtraBold, + textAlign = TextAlign.Center, ) Spacer(modifier = Modifier.height(100.dp)) @@ -65,7 +85,7 @@ fun HomeScreen( } }, ) { - Text("Log Out") + Text(stringResource(Res.string.log_out)) } if (usingPasscode) { @@ -77,7 +97,7 @@ fun HomeScreen( navigateToPasscodeScreen() }, ) { - Text("Change Passcode") + Text(stringResource(Res.string.change_passcode)) } Spacer(modifier = Modifier.height(20.dp)) @@ -89,23 +109,21 @@ fun HomeScreen( } else { scope.launch { val result = platformAuthenticationProvider.registerUser( - "mifosUser", - "mifos@mifos.org", - "Mifos User", + userName = "mifosUser", + emailId = "mifos@mifos.org", + displayName = "Mifos User", + title = biometricPromptRegisterTitle, ) when (result) { is RegistrationResult.Success -> { } RegistrationResult.PlatformAuthenticatorNotSet -> { - onBiometricsEnableError( - "Biometrics are not set up on this device. " + - "Please enable fingerprint or face unlock in your device settings, then try again.", - ) + onBiometricsEnableError(biometricsNotSetUpMessage) } RegistrationResult.PlatformAuthenticatorNotAvailable -> { - onBiometricsEnableError("Biometrics not available on this device") + onBiometricsEnableError(biometricsNotAvailableMessage) } is RegistrationResult.Error -> { - onBiometricsEnableError(result.message) + onBiometricsEnableError(biometricErrorMessages.localize(result.error)) } RegistrationResult.UserCancelled -> { } } @@ -114,7 +132,9 @@ fun HomeScreen( }, ) { Text( - if (isRegistered) "Disable Biometrics" else "Enable Biometrics", + stringResource( + if (isRegistered) Res.string.disable_biometrics else Res.string.enable_biometrics, + ), ) } } diff --git a/cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/screens/LoginScreen.kt b/cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/screens/LoginScreen.kt index 07f59bb4..ac944b86 100644 --- a/cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/screens/LoginScreen.kt +++ b/cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/screens/LoginScreen.kt @@ -14,32 +14,40 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding import androidx.compose.material3.Button import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import mifos_authenticator.cmp_sample_shared.generated.resources.Res +import mifos_authenticator.cmp_sample_shared.generated.resources.login_screen_title +import mifos_authenticator.cmp_sample_shared.generated.resources.setup_app_lock +import org.jetbrains.compose.resources.stringResource @Composable fun LoginScreen( onSetupAppLock: () -> Unit, ) { Column( - modifier = Modifier.fillMaxSize(), + modifier = Modifier.fillMaxSize().padding(horizontal = 24.dp), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally, ) { Text( - "Login Screen", + stringResource(Res.string.login_screen_title), fontSize = 48.sp, + lineHeight = 56.sp, fontWeight = FontWeight.ExtraBold, + textAlign = TextAlign.Center, ) Spacer(modifier = Modifier.height(100.dp)) Button(onClick = onSetupAppLock) { - Text("Setup App Lock") + Text(stringResource(Res.string.setup_app_lock)) } } } diff --git a/cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/ui/components/MessageDialog.kt b/cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/ui/components/MessageDialog.kt index 12185556..2ccf8bff 100644 --- a/cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/ui/components/MessageDialog.kt +++ b/cmp-sample-shared/src/commonMain/kotlin/cmp/sample/shared/ui/components/MessageDialog.kt @@ -13,6 +13,10 @@ import androidx.compose.material3.AlertDialog import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable +import mifos_authenticator.cmp_sample_shared.generated.resources.Res +import mifos_authenticator.cmp_sample_shared.generated.resources.message_dialog_title +import mifos_authenticator.cmp_sample_shared.generated.resources.ok +import org.jetbrains.compose.resources.stringResource enum class DialogBoxType { None, @@ -27,11 +31,11 @@ fun MessageDialogBox( ) { AlertDialog( onDismissRequest = onDismissRequest, - title = { Text(text = "Message") }, + title = { Text(text = stringResource(Res.string.message_dialog_title)) }, text = { Text(text = dialogMessage) }, confirmButton = { TextButton(onClick = onDismissRequest) { - Text("OK") + Text(stringResource(Res.string.ok)) } }, ) diff --git a/l10n-templates/passcode/README.md b/l10n-templates/passcode/README.md new file mode 100644 index 00000000..bf9ab369 --- /dev/null +++ b/l10n-templates/passcode/README.md @@ -0,0 +1,98 @@ +# Passcode L10n Templates + +Canonical translations for the strings consumed by `mifos-authenticator-passcode`. + +These files are **not** bundled in the published library artifact. The library no longer +ships its own translations; consumer apps construct a `PasscodeStrings` instance from +their own resources and pass it to `PasscodeScreen(...)`. + +## How to use + +### Option A — copy the templates manually + +For each locale your app supports, copy the matching file from this tree into your +app's `composeResources/values-XX/strings.xml`: + +``` +l10n-templates/passcode/values/strings.xml → /.../composeResources/values/strings.xml +l10n-templates/passcode/values-de/strings.xml → /.../composeResources/values-de/strings.xml +l10n-templates/passcode/values-ja/strings.xml → /.../composeResources/values-ja/strings.xml +… +``` + +If a `values-XX/strings.xml` already exists in your module, **append** the `` +elements from the template inside the existing `` element rather than +overwriting the file. + +Then construct `PasscodeStrings` in your composable code: + +```kotlin +@Composable +fun rememberPasscodeStrings(): PasscodeStrings = PasscodeStrings( + createPasscode = stringResource(Res.string.mifos_passcode_create_passcode), + confirmPasscode = stringResource(Res.string.mifos_passcode_confirm_passcode), + // … 14 more ASCII string fields … + digits = listOf( + stringResource(Res.string.mifos_passcode_digit_0), + stringResource(Res.string.mifos_passcode_digit_1), + // … digit_2 through digit_9 … + ), +) +``` + +See `cmp-sample-shared/.../platformAuthentication/PasscodeScreenWithBiometrics.kt` in +this repo for a working reference implementation. + +### Option B — use the Gradle plugin (planned, not yet shipped) + +A future Gradle plugin (`org.mifos.authenticator.l10n`) will fetch these templates over +HTTPS from a versioned tag of this repo and append them to your module's existing +`strings.xml` automatically. Track progress in `L10N_FIX_PLAN.md` (Phase 4). + +## Naming convention + +Every key uses the prefix `mifos_passcode_` so they cannot collide with your app's +existing string keys. Example mapping from the lib's internal API field name to the +resource key: + +| `PasscodeStrings` field | Resource key | +|-------------------------------------|-----------------------------------------------| +| `createPasscode` | `mifos_passcode_create_passcode` | +| `confirmPasscode` | `mifos_passcode_confirm_passcode` | +| `confirmOldPasscode` | `mifos_passcode_confirm_old_passcode` | +| `enterPasscode` | `mifos_passcode_enter_your_passcode` | +| `passcodeDoNotMatch` | `mifos_passcode_passcode_do_not_match` | +| `tryAgain` | `mifos_passcode_try_again` | +| `skip` | `mifos_passcode_skip` | +| `forgotPasscode` | `mifos_passcode_forgot_passcode` | +| `enableExternalAuthDialogTitle` | `mifos_passcode_enable_external_auth_dialog_title` | +| `enableExternalAuthDialogDescription` | `mifos_passcode_enable_external_auth_dialog_description` | +| `yes` | `mifos_passcode_yes` | +| `no` | `mifos_passcode_no` | +| `cdTogglePasscodeVisibility` | `mifos_passcode_cd_toggle_passcode_visibility` | +| `cdDeletePasscodeKey` | `mifos_passcode_cd_delete_passcode_key` | +| `passcodeLength4Digits` | `mifos_passcode_passcode_length_4_digits` | +| `passcodeLength6Digits` | `mifos_passcode_passcode_length_6_digits` | +| `digits[0]`..`digits[9]` | `mifos_passcode_digit_0`..`mifos_passcode_digit_9` | + +## Locales currently bundled + +58 locale variants plus the base English `values/strings.xml`: + +`af`, `am`, `ar`, `be`, `bg`, `bn`, `ca`, `cs`, `da`, `de`, `el`, `en-rGB`, `es`, `et`, +`fa`, `fi`, `fil`, `fr`, `gu`, `he`, `hi`, `hr`, `hu`, `in`, `it`, `iw`, `ja`, `kn`, +`ko`, `lt`, `lv`, `mk`, `ml`, `mr`, `nb`, `nl`, `pa`, `pl`, `pt-rBR`, `pt-rPT`, `ro`, +`ru`, `si`, `sk`, `sl`, `sq`, `sr`, `sv`, `sw`, `ta`, `te`, `th`, `tr`, `uk`, `ur`, +`vi`, `zh-rCN`, `zh-rTW`. + +Native numeral systems (Devanagari, Eastern Arabic-Indic, Bengali, Tamil, Telugu, etc.) +override the `mifos_passcode_digit_0..9` keys so the on-screen keypad shows +locale-appropriate glyphs. See the per-locale strings.xml files for examples. + +## Translation quality + +These translations originated from a multi-pass machine-translation effort against +Google Pay localization conventions. The breadth-first nature of that pass means the +**low-resource locales (be, mk, sq, sl, lv, lt, sr, hr) should have a native-speaker +review pass** before final ship. The major locales (en, de, fr, es, it, ja, ko, zh-rCN, +zh-rTW, ru, pt-rBR, hi, ar) are cross-agent verified and rated high-quality. diff --git a/l10n-templates/passcode/values-af/strings.xml b/l10n-templates/passcode/values-af/strings.xml new file mode 100644 index 00000000..66d36482 --- /dev/null +++ b/l10n-templates/passcode/values-af/strings.xml @@ -0,0 +1,29 @@ + + + + Bevestig ou kode + Bevestig kode + Skep kode + Gebruik jou biometrika of toestelkredensiale om die toepassing vinniger te ontgrendel. + Aktiveer biometriese verifikasie? + Voer jou kode in + Kode vergeet? + Nee + Kodes stem nie ooreen nie. + Slaan oor + Probeer weer + Ja + + 4 syfers + 6 syfers + Wissel wagwoordsigbaarheid + Vee uit + diff --git a/l10n-templates/passcode/values-am/strings.xml b/l10n-templates/passcode/values-am/strings.xml new file mode 100644 index 00000000..ba36fd18 --- /dev/null +++ b/l10n-templates/passcode/values-am/strings.xml @@ -0,0 +1,29 @@ + + + + አሮጌ የይለፍ ኮድ ያረጋግጡ + የይለፍ ኮድ ያረጋግጡ + የይለፍ ኮድ ይፍጠሩ + መተግበሪያውን በፍጥነት ለመክፈት የእርስዎን ባዮሜትሪክ ወይም የመሣሪያ ምስክርነቶች ይጠቀሙ። + የባዮሜትሪክ ማረጋገጫን ያንቁ? + የእርስዎን የይለፍ ኮድ ያስገቡ + የይለፍ ኮድ ረሱት? + አይ + የይለፍ ኮዶቹ አይዛመዱም። + ዝለል + እንደገና ይሞክሩ + አዎ + + 4 ቁጥር + 6 ቁጥር + የይለፍ ኮድ ታይነትን ቀይር + ሰርዝ + diff --git a/l10n-templates/passcode/values-ar/strings.xml b/l10n-templates/passcode/values-ar/strings.xml new file mode 100644 index 00000000..c164f78a --- /dev/null +++ b/l10n-templates/passcode/values-ar/strings.xml @@ -0,0 +1,40 @@ + + + + تأكيد رمز المرور القديم + تأكيد رمز المرور + إنشاء رمز المرور + استخدم القياسات الحيوية أو بيانات اعتماد الجهاز لفتح التطبيق بسرعة أكبر. + تمكين المصادقة بالقياسات الحيوية؟ + أدخل رمز المرور + نسيت رمز المرور؟ + لا + رموز المرور غير متطابقة. + تخطي + حاول مرة أخرى + نعم + + ٠ + ١ + ٢ + ٣ + ٤ + ٥ + ٦ + ٧ + ٨ + ٩ + + ٤ أرقام + ٦ أرقام + تبديل إظهار رمز المرور + حذف + diff --git a/l10n-templates/passcode/values-be/strings.xml b/l10n-templates/passcode/values-be/strings.xml new file mode 100644 index 00000000..710ee70e --- /dev/null +++ b/l10n-templates/passcode/values-be/strings.xml @@ -0,0 +1,29 @@ + + + + Пацвердзіце стары код + Пацвердзіце код + Стварыць код + Выкарыстоўвайце біяметрыю або ўліковыя даныя прылады, каб хутчэй разблакаваць праграму. + Уключыць біяметрычную аўтэнтыфікацыю? + Увядзіце код + Забылі код? + Не + Коды не супадаюць. + Прапусціць + Паспрабаваць яшчэ раз + Так + + 4 лічбы + 6 лічбаў + Пераключыць бачнасць пароля + Выдаліць + diff --git a/l10n-templates/passcode/values-bg/strings.xml b/l10n-templates/passcode/values-bg/strings.xml new file mode 100644 index 00000000..59c82596 --- /dev/null +++ b/l10n-templates/passcode/values-bg/strings.xml @@ -0,0 +1,29 @@ + + + + Потвърдете стария код + Потвърдете кода + Създайте код + Използвайте биометрията или удостоверенията на устройството, за да отключвате приложението по-бързо. + Да се включи ли биометрично удостоверяване? + Въведете кода + Забравихте кода? + Не + Кодовете не съвпадат. + Пропуснете + Опитайте отново + Да + + 4 цифри + 6 цифри + Превключете видимостта на кода + Изтрийте + diff --git a/l10n-templates/passcode/values-bn/strings.xml b/l10n-templates/passcode/values-bn/strings.xml new file mode 100644 index 00000000..7a6cfc63 --- /dev/null +++ b/l10n-templates/passcode/values-bn/strings.xml @@ -0,0 +1,40 @@ + + + + পুরানো পাসকোড নিশ্চিত করুন + পাসকোড নিশ্চিত করুন + পাসকোড তৈরি করুন + অ্যাপ আরও দ্রুত আনলক করতে আপনার বায়োমেট্রিক বা ডিভাইস ক্রেডেনশিয়াল ব্যবহার করুন। + বায়োমেট্রিক প্রমাণীকরণ সক্ষম করবেন? + আপনার পাসকোড লিখুন + পাসকোড ভুলে গেছেন? + না + পাসকোডগুলি মিলছে না। + এড়িয়ে যান + আবার চেষ্টা করুন + হ্যাঁ + + + + + + + + + + + + + ৪ অঙ্ক + ৬ অঙ্ক + পাসকোড দৃশ্যমানতা টগল করুন + মুছুন + diff --git a/l10n-templates/passcode/values-ca/strings.xml b/l10n-templates/passcode/values-ca/strings.xml new file mode 100644 index 00000000..cb79441f --- /dev/null +++ b/l10n-templates/passcode/values-ca/strings.xml @@ -0,0 +1,29 @@ + + + + Confirma el codi antic + Confirma el codi + Crea un codi + Utilitza la biometria o les credencials del dispositiu per desbloquejar l\'aplicació més ràpidament. + Activar l\'autenticació biomètrica? + Introdueix el codi + Has oblidat el codi? + No + Els codis no coincideixen. + Omet + Torna-ho a provar + + + 4 dígits + 6 dígits + Commuta la visibilitat del codi + Suprimeix + diff --git a/l10n-templates/passcode/values-cs/strings.xml b/l10n-templates/passcode/values-cs/strings.xml new file mode 100644 index 00000000..116f5eb9 --- /dev/null +++ b/l10n-templates/passcode/values-cs/strings.xml @@ -0,0 +1,29 @@ + + + + Potvrďte starý kód + Potvrďte kód + Vytvořit kód + K rychlejšímu odemčení aplikace použijte biometrii nebo přihlašovací údaje zařízení. + Povolit biometrické ověření? + Zadejte kód + Zapomněli jste kód? + Ne + Kódy se neshodují. + Přeskočit + Zkusit znovu + Ano + + 4 číslice + 6 číslic + Přepnout zobrazení kódu + Smazat + diff --git a/l10n-templates/passcode/values-da/strings.xml b/l10n-templates/passcode/values-da/strings.xml new file mode 100644 index 00000000..bb497279 --- /dev/null +++ b/l10n-templates/passcode/values-da/strings.xml @@ -0,0 +1,29 @@ + + + + Bekræft gammel adgangskode + Bekræft adgangskode + Opret adgangskode + Brug din biometri eller enhedsoplysninger til at låse appen hurtigere op. + Aktivér biometrisk godkendelse? + Indtast din adgangskode + Glemt adgangskoden? + Nej + Adgangskoderne stemmer ikke overens. + Spring over + Prøv igen + Ja + + 4 cifre + 6 cifre + Skift adgangskodevisning + Slet + diff --git a/l10n-templates/passcode/values-de/strings.xml b/l10n-templates/passcode/values-de/strings.xml new file mode 100644 index 00000000..dc12a031 --- /dev/null +++ b/l10n-templates/passcode/values-de/strings.xml @@ -0,0 +1,29 @@ + + + + Alten Code bestätigen + Code bestätigen + Code erstellen + Verwenden Sie Ihre biometrischen Daten oder die Anmeldedaten des Geräts, um die App schneller zu entsperren. + Biometrische Authentifizierung aktivieren? + Code eingeben + Code vergessen? + Nein + Codes stimmen nicht überein. + Überspringen + Erneut versuchen + Ja + + 4 Ziffern + 6 Ziffern + Code-Anzeige umschalten + Löschen + diff --git a/l10n-templates/passcode/values-el/strings.xml b/l10n-templates/passcode/values-el/strings.xml new file mode 100644 index 00000000..17be4e34 --- /dev/null +++ b/l10n-templates/passcode/values-el/strings.xml @@ -0,0 +1,29 @@ + + + + Επιβεβαίωση παλιού κωδικού + Επιβεβαίωση κωδικού + Δημιουργία κωδικού + Χρησιμοποιήστε τη βιομετρία ή τα διαπιστευτήρια της συσκευής για πιο γρήγορο ξεκλείδωμα της εφαρμογής. + Ενεργοποίηση βιομετρικής επαλήθευσης; + Εισαγάγετε τον κωδικό σας + Ξεχάσατε τον κωδικό; + Όχι + Οι κωδικοί δεν ταιριάζουν. + Παράλειψη + Δοκιμή ξανά + Ναι + + 4 ψηφία + 6 ψηφία + Εναλλαγή εμφάνισης κωδικού + Διαγραφή + diff --git a/l10n-templates/passcode/values-en-rGB/strings.xml b/l10n-templates/passcode/values-en-rGB/strings.xml new file mode 100644 index 00000000..4d786222 --- /dev/null +++ b/l10n-templates/passcode/values-en-rGB/strings.xml @@ -0,0 +1,29 @@ + + + + Confirm old passcode + Confirm Passcode + Create Passcode + Use your biometrics or device credentials to unlock the app faster. + Enable biometric authentication? + Enter your passcode + Forgotten your passcode? + No + Passcodes do not match. + Skip + Try again + Yes + + 4 digits + 6 digits + Toggle passcode visibility + Delete + diff --git a/l10n-templates/passcode/values-es/strings.xml b/l10n-templates/passcode/values-es/strings.xml new file mode 100644 index 00000000..b518ed5d --- /dev/null +++ b/l10n-templates/passcode/values-es/strings.xml @@ -0,0 +1,29 @@ + + + + Confirmar código antiguo + Confirmar código + Crear código + Usa tu biometría o las credenciales del dispositivo para desbloquear la app más rápido. + ¿Activar autenticación biométrica? + Introduce tu código + ¿Olvidaste tu código? + No + Los códigos no coinciden. + Omitir + Inténtalo de nuevo + + + 4 dígitos + 6 dígitos + Mostrar u ocultar el código + Borrar + diff --git a/l10n-templates/passcode/values-et/strings.xml b/l10n-templates/passcode/values-et/strings.xml new file mode 100644 index 00000000..879930b7 --- /dev/null +++ b/l10n-templates/passcode/values-et/strings.xml @@ -0,0 +1,29 @@ + + + + Kinnita vana kood + Kinnita kood + Loo kood + Kasuta biomeetriat või seadme mandaate rakenduse kiiremaks avamiseks. + Kas lubada biomeetriline autentimine? + Sisesta kood + Unustasid koodi? + Ei + Koodid ei ühti. + Jäta vahele + Proovi uuesti + Jah + + 4 numbrit + 6 numbrit + Lülita pääsukoodi nähtavus sisse/välja + Kustuta + diff --git a/l10n-templates/passcode/values-fa/strings.xml b/l10n-templates/passcode/values-fa/strings.xml new file mode 100644 index 00000000..70cc3f84 --- /dev/null +++ b/l10n-templates/passcode/values-fa/strings.xml @@ -0,0 +1,40 @@ + + + + تأیید رمز قدیمی + تأیید رمز + ایجاد رمز + از بیومتریک یا اعتبارنامه‌های دستگاه برای باز کردن سریع‌تر برنامه استفاده کنید. + احراز هویت بیومتریک فعال شود؟ + رمز خود را وارد کنید + رمز را فراموش کرده‌اید؟ + خیر + رمزها مطابقت ندارند. + رد کردن + تلاش مجدد + بله + + ۰ + ۱ + ۲ + ۳ + ۴ + ۵ + ۶ + ۷ + ۸ + ۹ + + ۴ رقمی + ۶ رقمی + تغییر نمایش رمز + حذف + diff --git a/l10n-templates/passcode/values-fi/strings.xml b/l10n-templates/passcode/values-fi/strings.xml new file mode 100644 index 00000000..beff269f --- /dev/null +++ b/l10n-templates/passcode/values-fi/strings.xml @@ -0,0 +1,29 @@ + + + + Vahvista vanha tunnusluku + Vahvista tunnusluku + Luo tunnusluku + Käytä biometriaa tai laitteen tunnistetietoja avataksesi sovelluksen lukituksen nopeammin. + Otetaanko biometrinen tunnistus käyttöön? + Anna tunnusluku + Unohditko tunnusluvun? + Ei + Tunnusluvut eivät täsmää. + Ohita + Yritä uudelleen + Kyllä + + 4 numeroa + 6 numeroa + Vaihda tunnusluvun näkyvyyttä + Poista + diff --git a/l10n-templates/passcode/values-fil/strings.xml b/l10n-templates/passcode/values-fil/strings.xml new file mode 100644 index 00000000..f33be168 --- /dev/null +++ b/l10n-templates/passcode/values-fil/strings.xml @@ -0,0 +1,29 @@ + + + + Kumpirmahin ang lumang passcode + Kumpirmahin ang passcode + Gumawa ng passcode + Gamitin ang iyong biometric o mga kredensyal ng device para mas mabilis na ma-unlock ang app. + I-enable ang biometric authentication? + Ilagay ang iyong passcode + Nakalimutan ang passcode? + Hindi + Hindi tugma ang mga passcode. + Laktawan + Subukang muli + Oo + + 4 na digit + 6 na digit + I-toggle ang visibility ng passcode + Burahin + diff --git a/l10n-templates/passcode/values-fr/strings.xml b/l10n-templates/passcode/values-fr/strings.xml new file mode 100644 index 00000000..91ac2738 --- /dev/null +++ b/l10n-templates/passcode/values-fr/strings.xml @@ -0,0 +1,29 @@ + + + + Confirmer l\'ancien code + Confirmer le code + Créer un code + Utilisez votre biométrie ou les identifiants de votre appareil pour déverrouiller l\'application plus rapidement. + Activer l\'authentification biométrique ? + Saisissez votre code + Code oublié ? + Non + Les codes ne correspondent pas. + Ignorer + Réessayer + Oui + + 4 chiffres + 6 chiffres + Afficher ou masquer le code + Supprimer + diff --git a/l10n-templates/passcode/values-gu/strings.xml b/l10n-templates/passcode/values-gu/strings.xml new file mode 100644 index 00000000..90fdacef --- /dev/null +++ b/l10n-templates/passcode/values-gu/strings.xml @@ -0,0 +1,40 @@ + + + + જૂના પાસકોડની ખાતરી કરો + પાસકોડની ખાતરી કરો + પાસકોડ બનાવો + એપને વધુ ઝડપથી અનલૉક કરવા માટે તમારા બાયોમેટ્રિક અથવા ડિવાઇસ ઓળખપત્રોનો ઉપયોગ કરો. + બાયોમેટ્રિક પ્રમાણીકરણ ચાલુ કરવું છે? + તમારો પાસકોડ દાખલ કરો + પાસકોડ ભૂલી ગયા? + ના + પાસકોડ મેળ ખાતા નથી. + છોડો + ફરી પ્રયાસ કરો + હા + + + + + + + + + + + + + ૪ અંક + ૬ અંક + પાસકોડ દૃશ્યતા ટૉગલ કરો + કાઢી નાખો + diff --git a/l10n-templates/passcode/values-he/strings.xml b/l10n-templates/passcode/values-he/strings.xml new file mode 100644 index 00000000..c323c7b6 --- /dev/null +++ b/l10n-templates/passcode/values-he/strings.xml @@ -0,0 +1,29 @@ + + + + אישור קוד ישן + אישור קוד + יצירת קוד + השתמש בביומטריה או באישורי המכשיר כדי לפתוח את האפליקציה מהר יותר. + לאפשר אימות ביומטרי? + הזן את הקוד שלך + שכחת את הקוד? + לא + הקודים אינם תואמים. + דלג + נסה שוב + כן + + 4 ספרות + 6 ספרות + הצג או הסתר את הקוד + מחק + diff --git a/l10n-templates/passcode/values-hi/strings.xml b/l10n-templates/passcode/values-hi/strings.xml new file mode 100644 index 00000000..e8beaacc --- /dev/null +++ b/l10n-templates/passcode/values-hi/strings.xml @@ -0,0 +1,40 @@ + + + + पुराने पासकोड की पुष्टि करें + पासकोड की पुष्टि करें + पासकोड बनाएं + ऐप को तेज़ी से अनलॉक करने के लिए अपने बायोमेट्रिक या डिवाइस क्रेडेंशियल का उपयोग करें। + बायोमेट्रिक प्रमाणीकरण सक्षम करें? + अपना पासकोड दर्ज करें + पासकोड भूल गए? + नहीं + पासकोड मेल नहीं खाते। + छोड़ें + पुनः प्रयास करें + हाँ + + + + + + + + + + + + + ४ अंक + ६ अंक + पासकोड दिखाएं या छिपाएं + हटाएं + diff --git a/l10n-templates/passcode/values-hr/strings.xml b/l10n-templates/passcode/values-hr/strings.xml new file mode 100644 index 00000000..359bf5c8 --- /dev/null +++ b/l10n-templates/passcode/values-hr/strings.xml @@ -0,0 +1,29 @@ + + + + Potvrdite stari kod + Potvrdite kod + Stvorite kod + Koristite biometriju ili vjerodajnice uređaja za brže otključavanje aplikacije. + Omogućiti biometrijsku autentifikaciju? + Unesite kod + Zaboravili ste kod? + Ne + Kodovi se ne podudaraju. + Preskoči + Pokušajte ponovno + Da + + 4 znamenke + 6 znamenki + Uključite/isključite prikaz koda + Izbrišite + diff --git a/l10n-templates/passcode/values-hu/strings.xml b/l10n-templates/passcode/values-hu/strings.xml new file mode 100644 index 00000000..8ef06b8a --- /dev/null +++ b/l10n-templates/passcode/values-hu/strings.xml @@ -0,0 +1,29 @@ + + + + Régi kód megerősítése + Kód megerősítése + Kód létrehozása + Használja a biometriát vagy az eszköz hitelesítő adatait az alkalmazás gyorsabb feloldásához. + Biometrikus hitelesítés engedélyezése? + Adja meg a kódot + Elfelejtette a kódot? + Nem + A kódok nem egyeznek. + Kihagyás + Próbálja újra + Igen + + 4 számjegy + 6 számjegy + Kód láthatóságának váltása + Törlés + diff --git a/l10n-templates/passcode/values-in/strings.xml b/l10n-templates/passcode/values-in/strings.xml new file mode 100644 index 00000000..20a64d3a --- /dev/null +++ b/l10n-templates/passcode/values-in/strings.xml @@ -0,0 +1,29 @@ + + + + Konfirmasi kode lama + Konfirmasi kode + Buat kode + Gunakan biometrik atau kredensial perangkat untuk membuka kunci aplikasi lebih cepat. + Aktifkan autentikasi biometrik? + Masukkan kode Anda + Lupa kode? + Tidak + Kode tidak cocok. + Lewati + Coba lagi + Ya + + 4 digit + 6 digit + Alihkan visibilitas kode sandi + Hapus + diff --git a/l10n-templates/passcode/values-it/strings.xml b/l10n-templates/passcode/values-it/strings.xml new file mode 100644 index 00000000..645bd7d6 --- /dev/null +++ b/l10n-templates/passcode/values-it/strings.xml @@ -0,0 +1,29 @@ + + + + Conferma il vecchio codice + Conferma codice + Crea codice + Usa la biometria o le credenziali del dispositivo per sbloccare l\'app più velocemente. + Attivare l\'autenticazione biometrica? + Inserisci il codice + Codice dimenticato? + No + I codici non corrispondono. + Salta + Riprova + + + 4 cifre + 6 cifre + Mostra o nascondi il codice + Elimina + diff --git a/l10n-templates/passcode/values-iw/strings.xml b/l10n-templates/passcode/values-iw/strings.xml new file mode 100644 index 00000000..c323c7b6 --- /dev/null +++ b/l10n-templates/passcode/values-iw/strings.xml @@ -0,0 +1,29 @@ + + + + אישור קוד ישן + אישור קוד + יצירת קוד + השתמש בביומטריה או באישורי המכשיר כדי לפתוח את האפליקציה מהר יותר. + לאפשר אימות ביומטרי? + הזן את הקוד שלך + שכחת את הקוד? + לא + הקודים אינם תואמים. + דלג + נסה שוב + כן + + 4 ספרות + 6 ספרות + הצג או הסתר את הקוד + מחק + diff --git a/l10n-templates/passcode/values-ja/strings.xml b/l10n-templates/passcode/values-ja/strings.xml new file mode 100644 index 00000000..5cf2ad21 --- /dev/null +++ b/l10n-templates/passcode/values-ja/strings.xml @@ -0,0 +1,29 @@ + + + + 古いパスコードを確認 + パスコードを確認 + パスコードを作成 + 生体認証またはデバイス認証情報を使ってアプリをすばやくロック解除できます。 + 生体認証を有効にしますか? + パスコードを入力 + パスコードをお忘れですか? + いいえ + パスコードが一致しません。 + スキップ + もう一度試す + はい + + 4桁 + 6桁 + パスコードの表示を切り替え + 削除 + diff --git a/l10n-templates/passcode/values-kn/strings.xml b/l10n-templates/passcode/values-kn/strings.xml new file mode 100644 index 00000000..9ebe2616 --- /dev/null +++ b/l10n-templates/passcode/values-kn/strings.xml @@ -0,0 +1,40 @@ + + + + ಹಳೆಯ ಪಾಸ್‌ಕೋಡ್ ಖಚಿತಪಡಿಸಿ + ಪಾಸ್‌ಕೋಡ್ ಖಚಿತಪಡಿಸಿ + ಪಾಸ್‌ಕೋಡ್ ರಚಿಸಿ + ಆ್ಯಪ್ ಅನ್ನು ವೇಗವಾಗಿ ಅನ್‌ಲಾಕ್ ಮಾಡಲು ನಿಮ್ಮ ಬಯೋಮೆಟ್ರಿಕ್ ಅಥವಾ ಸಾಧನದ ರುಜುವಾತುಗಳನ್ನು ಬಳಸಿ. + ಬಯೋಮೆಟ್ರಿಕ್ ದೃಢೀಕರಣವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಬೇಕೆ? + ನಿಮ್ಮ ಪಾಸ್‌ಕೋಡ್ ನಮೂದಿಸಿ + ಪಾಸ್‌ಕೋಡ್ ಮರೆತಿರುವಿರಾ? + ಇಲ್ಲ + ಪಾಸ್‌ಕೋಡ್‌ಗಳು ಹೊಂದಿಕೆಯಾಗುತ್ತಿಲ್ಲ. + ಬಿಟ್ಟುಬಿಡಿ + ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ + ಹೌದು + + + + + + + + + + + + + ೪ ಅಂಕಿ + ೬ ಅಂಕಿ + ಪಾಸ್‌ಕೋಡ್ ಗೋಚರತೆ ಬದಲಾಯಿಸಿ + ಅಳಿಸಿ + diff --git a/l10n-templates/passcode/values-ko/strings.xml b/l10n-templates/passcode/values-ko/strings.xml new file mode 100644 index 00000000..97b4915a --- /dev/null +++ b/l10n-templates/passcode/values-ko/strings.xml @@ -0,0 +1,29 @@ + + + + 이전 비밀번호 확인 + 비밀번호 확인 + 비밀번호 만들기 + 생체 인식 또는 기기 자격 증명을 사용하여 앱을 더 빠르게 잠금 해제하세요. + 생체 인증을 사용하시겠습니까? + 비밀번호 입력 + 비밀번호를 잊으셨나요? + 아니요 + 비밀번호가 일치하지 않습니다. + 건너뛰기 + 다시 시도 + + + 4자리 + 6자리 + 비밀번호 표시 전환 + 삭제 + diff --git a/l10n-templates/passcode/values-lt/strings.xml b/l10n-templates/passcode/values-lt/strings.xml new file mode 100644 index 00000000..b17403a2 --- /dev/null +++ b/l10n-templates/passcode/values-lt/strings.xml @@ -0,0 +1,29 @@ + + + + Patvirtinkite seną kodą + Patvirtinkite kodą + Sukurti kodą + Naudokite biometriją arba įrenginio kredencialus, kad greičiau atrakintumėte programą. + Įjungti biometrinę autentifikaciją? + Įveskite kodą + Pamiršote kodą? + Ne + Kodai nesutampa. + Praleisti + Bandyti dar kartą + Taip + + 4 skaitmenys + 6 skaitmenys + Perjungti slaptažodžio matomumą + Ištrinti + diff --git a/l10n-templates/passcode/values-lv/strings.xml b/l10n-templates/passcode/values-lv/strings.xml new file mode 100644 index 00000000..4784e9b1 --- /dev/null +++ b/l10n-templates/passcode/values-lv/strings.xml @@ -0,0 +1,29 @@ + + + + Apstipriniet veco kodu + Apstipriniet kodu + Izveidot kodu + Izmantojiet biometriju vai ierīces akreditācijas datus, lai ātrāk atbloķētu lietotni. + Iespējot biometrisko autentifikāciju? + Ievadiet kodu + Aizmirsāt kodu? + + Kodi nesakrīt. + Izlaist + Mēģināt vēlreiz + + + 4 cipari + 6 cipari + Pārslēgt piekļuves koda redzamību + Dzēst + diff --git a/l10n-templates/passcode/values-mk/strings.xml b/l10n-templates/passcode/values-mk/strings.xml new file mode 100644 index 00000000..c9969ca7 --- /dev/null +++ b/l10n-templates/passcode/values-mk/strings.xml @@ -0,0 +1,29 @@ + + + + Потврдете го стариот код + Потврдете го кодот + Креирајте код + Користете биометрија или акредитиви на уредот за побрзо отклучување на апликацијата. + Овозможи биометриска автентикација? + Внесете го кодот + Го заборавивте кодот? + Не + Кодовите не се совпаѓаат. + Прескокни + Обидете се повторно + Да + + 4 цифри + 6 цифри + Префрлете видливост на кодот + Избришете + diff --git a/l10n-templates/passcode/values-ml/strings.xml b/l10n-templates/passcode/values-ml/strings.xml new file mode 100644 index 00000000..bc94e7eb --- /dev/null +++ b/l10n-templates/passcode/values-ml/strings.xml @@ -0,0 +1,40 @@ + + + + പഴയ പാസ്സ്‌കോഡ് സ്ഥിരീകരിക്കുക + പാസ്സ്‌കോഡ് സ്ഥിരീകരിക്കുക + പാസ്സ്‌കോഡ് സൃഷ്ടിക്കുക + ആപ്പ് വേഗത്തിൽ അൺലോക്ക് ചെയ്യാൻ നിങ്ങളുടെ ബയോമെട്രിക് അല്ലെങ്കിൽ ഉപകരണ ക്രെഡൻഷ്യലുകൾ ഉപയോഗിക്കുക. + ബയോമെട്രിക് പ്രാമാണീകരണം പ്രവർത്തനക്ഷമമാക്കണോ? + നിങ്ങളുടെ പാസ്സ്‌കോഡ് നൽകുക + പാസ്സ്‌കോഡ് മറന്നോ? + ഇല്ല + പാസ്സ്‌കോഡുകൾ പൊരുത്തപ്പെടുന്നില്ല. + ഒഴിവാക്കുക + വീണ്ടും ശ്രമിക്കുക + അതെ + + + + + + + + + + + + + ൪ അക്ക + ൬ അക്ക + പാസ്‌കോഡ് ദൃശ്യത മാറ്റുക + ഇല്ലാതാക്കുക + diff --git a/l10n-templates/passcode/values-mr/strings.xml b/l10n-templates/passcode/values-mr/strings.xml new file mode 100644 index 00000000..8565d6b5 --- /dev/null +++ b/l10n-templates/passcode/values-mr/strings.xml @@ -0,0 +1,40 @@ + + + + जुन्या पासकोडची पुष्टी करा + पासकोडची पुष्टी करा + पासकोड तयार करा + अॅप अधिक जलद अनलॉक करण्यासाठी आपले बायोमेट्रिक किंवा डिव्हाइस क्रेडेन्शियल वापरा. + बायोमेट्रिक प्रमाणीकरण सक्षम करायचे? + आपला पासकोड टाका + पासकोड विसरलात? + नाही + पासकोड जुळत नाहीत. + वगळा + पुन्हा प्रयत्न करा + होय + + + + + + + + + + + + + ४ अंक + ६ अंक + पासकोड दृश्यमानता बदला + हटवा + diff --git a/l10n-templates/passcode/values-nb/strings.xml b/l10n-templates/passcode/values-nb/strings.xml new file mode 100644 index 00000000..73f777a8 --- /dev/null +++ b/l10n-templates/passcode/values-nb/strings.xml @@ -0,0 +1,29 @@ + + + + Bekreft gammel kode + Bekreft kode + Opprett kode + Bruk biometri eller enhetslegitimasjon for å låse opp appen raskere. + Aktivere biometrisk autentisering? + Skriv inn koden + Glemt koden? + Nei + Kodene samsvarer ikke. + Hopp over + Prøv igjen + Ja + + 4 sifre + 6 sifre + Veksle passkodesynlighet + Slett + diff --git a/l10n-templates/passcode/values-nl/strings.xml b/l10n-templates/passcode/values-nl/strings.xml new file mode 100644 index 00000000..beb3fa21 --- /dev/null +++ b/l10n-templates/passcode/values-nl/strings.xml @@ -0,0 +1,29 @@ + + + + Bevestig oude pincode + Pincode bevestigen + Pincode aanmaken + Gebruik je biometrie of apparaatreferenties om de app sneller te ontgrendelen. + Biometrische verificatie inschakelen? + Voer je pincode in + Pincode vergeten? + Nee + Pincodes komen niet overeen. + Overslaan + Opnieuw proberen + Ja + + 4 cijfers + 6 cijfers + Toon of verberg de toegangscode + Verwijderen + diff --git a/l10n-templates/passcode/values-pa/strings.xml b/l10n-templates/passcode/values-pa/strings.xml new file mode 100644 index 00000000..85cede87 --- /dev/null +++ b/l10n-templates/passcode/values-pa/strings.xml @@ -0,0 +1,40 @@ + + + + ਪੁਰਾਣੇ ਪਾਸਕੋਡ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ + ਪਾਸਕੋਡ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ + ਪਾਸਕੋਡ ਬਣਾਓ + ਐਪ ਨੂੰ ਤੇਜ਼ੀ ਨਾਲ ਅਨਲਾਕ ਕਰਨ ਲਈ ਆਪਣੇ ਬਾਇਓਮੀਟ੍ਰਿਕ ਜਾਂ ਡਿਵਾਈਸ ਪ੍ਰਮਾਣ-ਪੱਤਰਾਂ ਦੀ ਵਰਤੋਂ ਕਰੋ। + ਬਾਇਓਮੀਟ੍ਰਿਕ ਪ੍ਰਮਾਣਿਕਤਾ ਯੋਗ ਕਰਨੀ ਹੈ? + ਆਪਣਾ ਪਾਸਕੋਡ ਦਾਖਲ ਕਰੋ + ਪਾਸਕੋਡ ਭੁੱਲ ਗਏ? + ਨਹੀਂ + ਪਾਸਕੋਡ ਮੇਲ ਨਹੀਂ ਖਾਂਦੇ। + ਛੱਡੋ + ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ + ਹਾਂ + + + + + + + + + + + + + ੪ ਅੰਕ + ੬ ਅੰਕ + ਪਾਸਕੋਡ ਦਿੱਖ ਬਦਲੋ + ਮਿਟਾਓ + diff --git a/l10n-templates/passcode/values-pl/strings.xml b/l10n-templates/passcode/values-pl/strings.xml new file mode 100644 index 00000000..949345e8 --- /dev/null +++ b/l10n-templates/passcode/values-pl/strings.xml @@ -0,0 +1,29 @@ + + + + Potwierdź stary kod + Potwierdź kod + Utwórz kod + Użyj danych biometrycznych lub poświadczeń urządzenia, aby szybciej odblokować aplikację. + Włączyć uwierzytelnianie biometryczne? + Wprowadź kod + Nie pamiętasz kodu? + Nie + Kody nie pasują do siebie. + Pomiń + Spróbuj ponownie + Tak + + 4 cyfry + 6 cyfr + Przełącz widoczność kodu + Usuń + diff --git a/l10n-templates/passcode/values-pt-rBR/strings.xml b/l10n-templates/passcode/values-pt-rBR/strings.xml new file mode 100644 index 00000000..a8dd4814 --- /dev/null +++ b/l10n-templates/passcode/values-pt-rBR/strings.xml @@ -0,0 +1,29 @@ + + + + Confirme o código antigo + Confirmar código + Criar código + Use sua biometria ou credenciais do dispositivo para desbloquear o app mais rápido. + Ativar autenticação biométrica? + Digite seu código + Esqueceu o código? + Não + Os códigos não coincidem. + Pular + Tentar novamente + Sim + + 4 dígitos + 6 dígitos + Mostrar ou ocultar o código + Excluir + diff --git a/l10n-templates/passcode/values-pt-rPT/strings.xml b/l10n-templates/passcode/values-pt-rPT/strings.xml new file mode 100644 index 00000000..30db4587 --- /dev/null +++ b/l10n-templates/passcode/values-pt-rPT/strings.xml @@ -0,0 +1,29 @@ + + + + Confirmar código antigo + Confirmar código + Criar código + Utilize a sua biometria ou as credenciais do dispositivo para desbloquear a aplicação mais rapidamente. + Ativar autenticação biométrica? + Introduza o seu código + Esqueceu-se do código? + Não + Os códigos não correspondem. + Ignorar + Tentar novamente + Sim + + 4 dígitos + 6 dígitos + Mostrar ou ocultar o código + Eliminar + diff --git a/l10n-templates/passcode/values-ro/strings.xml b/l10n-templates/passcode/values-ro/strings.xml new file mode 100644 index 00000000..248eca42 --- /dev/null +++ b/l10n-templates/passcode/values-ro/strings.xml @@ -0,0 +1,29 @@ + + + + Confirmați codul vechi + Confirmați codul + Creați cod + Folosiți datele biometrice sau acreditările dispozitivului pentru a debloca aplicația mai rapid. + Activați autentificarea biometrică? + Introduceți codul + Ați uitat codul? + Nu + Codurile nu se potrivesc. + Omite + Încercați din nou + Da + + 4 cifre + 6 cifre + Comutați vizibilitatea codului + Șterge + diff --git a/l10n-templates/passcode/values-ru/strings.xml b/l10n-templates/passcode/values-ru/strings.xml new file mode 100644 index 00000000..3e0bfb8e --- /dev/null +++ b/l10n-templates/passcode/values-ru/strings.xml @@ -0,0 +1,29 @@ + + + + Подтвердите старый код + Подтвердите код + Создать код + Используйте биометрию или учётные данные устройства, чтобы быстрее разблокировать приложение. + Включить биометрическую аутентификацию? + Введите код + Забыли код? + Нет + Коды не совпадают. + Пропустить + Повторить + Да + + 4 цифры + 6 цифр + Показать или скрыть код + Удалить + diff --git a/l10n-templates/passcode/values-si/strings.xml b/l10n-templates/passcode/values-si/strings.xml new file mode 100644 index 00000000..98f1e79f --- /dev/null +++ b/l10n-templates/passcode/values-si/strings.xml @@ -0,0 +1,29 @@ + + + + පැරණි මුරකේතය තහවුරු කරන්න + මුරකේතය තහවුරු කරන්න + මුරකේතය සාදන්න + යෙදුම වඩාත් වේගයෙන් අගුළු හරින්න ඔබේ ජෛවමිතික හෝ උපාංග අක්තපත්‍ර භාවිත කරන්න. + ජෛවමිතික සත්‍යාපනය සක්‍රීය කරන්නද? + ඔබගේ මුරකේතය ඇතුළත් කරන්න + මුරකේතය අමතකද? + නැත + මුරකේත නොගැලපේ. + මඟ හරින්න + නැවත උත්සාහ කරන්න + ඔව් + + 4 අංක + 6 අංක + මුරපදය දෘශ්‍යතාව ටොගල් කරන්න + මකන්න + diff --git a/l10n-templates/passcode/values-sk/strings.xml b/l10n-templates/passcode/values-sk/strings.xml new file mode 100644 index 00000000..6b9eedb4 --- /dev/null +++ b/l10n-templates/passcode/values-sk/strings.xml @@ -0,0 +1,29 @@ + + + + Potvrďte starý kód + Potvrdiť kód + Vytvoriť kód + Na rýchlejšie odomknutie aplikácie použite biometriu alebo prihlasovacie údaje zariadenia. + Povoliť biometrické overenie? + Zadajte kód + Zabudli ste kód? + Nie + Kódy sa nezhodujú. + Preskočiť + Skúsiť znova + Áno + + 4 číslice + 6 číslic + Prepnúť zobrazenie kódu + Odstrániť + diff --git a/l10n-templates/passcode/values-sl/strings.xml b/l10n-templates/passcode/values-sl/strings.xml new file mode 100644 index 00000000..a1fd920e --- /dev/null +++ b/l10n-templates/passcode/values-sl/strings.xml @@ -0,0 +1,29 @@ + + + + Potrdite staro kodo + Potrdite kodo + Ustvarite kodo + Uporabite biometrijo ali poverilnice naprave za hitrejše odklepanje aplikacije. + Omogočiti biometrično avtentikacijo? + Vnesite kodo + Ste pozabili kodo? + Ne + Kodi se ne ujemata. + Preskočite + Poskusite znova + Da + + 4 števke + 6 števk + Preklopite vidnost kode + Izbrišite + diff --git a/l10n-templates/passcode/values-sq/strings.xml b/l10n-templates/passcode/values-sq/strings.xml new file mode 100644 index 00000000..fa4589cd --- /dev/null +++ b/l10n-templates/passcode/values-sq/strings.xml @@ -0,0 +1,29 @@ + + + + Konfirmoni kodin e vjetër + Konfirmoni kodin + Krijoni kod + Përdorni biometrinë ose kredencialet e pajisjes për të zhbllokuar aplikacionin më shpejt. + Të aktivizohet vërtetimi biometrik? + Vendosni kodin + Harruat kodin? + Jo + Kodet nuk përputhen. + Anashkaloni + Provoni përsëri + Po + + 4 shifra + 6 shifra + Ndryshoni dukshmërinë e kodit + Fshini + diff --git a/l10n-templates/passcode/values-sr/strings.xml b/l10n-templates/passcode/values-sr/strings.xml new file mode 100644 index 00000000..ab090a8c --- /dev/null +++ b/l10n-templates/passcode/values-sr/strings.xml @@ -0,0 +1,29 @@ + + + + Потврдите стари код + Потврдите код + Креирајте код + Користите биометрију или акредитиве уређаја за брже откључавање апликације. + Омогућити биометријску аутентификацију? + Унесите код + Заборавили сте код? + Не + Кодови се не подударају. + Прескочите + Покушајте поново + Да + + 4 цифре + 6 цифара + Промените видљивост кода + Обришите + diff --git a/l10n-templates/passcode/values-sv/strings.xml b/l10n-templates/passcode/values-sv/strings.xml new file mode 100644 index 00000000..88237e1e --- /dev/null +++ b/l10n-templates/passcode/values-sv/strings.xml @@ -0,0 +1,29 @@ + + + + Bekräfta gammal kod + Bekräfta kod + Skapa kod + Använd din biometri eller enhetsuppgifter för att låsa upp appen snabbare. + Aktivera biometrisk autentisering? + Ange din kod + Glömt koden? + Nej + Koderna matchar inte. + Hoppa över + Försök igen + Ja + + 4 siffror + 6 siffror + Växla synlighet för kod + Ta bort + diff --git a/l10n-templates/passcode/values-sw/strings.xml b/l10n-templates/passcode/values-sw/strings.xml new file mode 100644 index 00000000..72eab645 --- /dev/null +++ b/l10n-templates/passcode/values-sw/strings.xml @@ -0,0 +1,29 @@ + + + + Thibitisha msimbo wa zamani + Thibitisha msimbo + Unda msimbo + Tumia bayometriki yako au vitambulisho vya kifaa kufungua programu kwa haraka zaidi. + Wezesha uthibitishaji wa bayometriki? + Weka msimbo wako + Umesahau msimbo? + Hapana + Misimbo hailingani. + Ruka + Jaribu tena + Ndiyo + + Tarakimu 4 + Tarakimu 6 + Geuza muonekano wa nenosiri + Futa + diff --git a/l10n-templates/passcode/values-ta/strings.xml b/l10n-templates/passcode/values-ta/strings.xml new file mode 100644 index 00000000..0ad8a56b --- /dev/null +++ b/l10n-templates/passcode/values-ta/strings.xml @@ -0,0 +1,40 @@ + + + + பழைய கடவுக்குறியீட்டை உறுதிப்படுத்தவும் + கடவுக்குறியீட்டை உறுதிப்படுத்தவும் + கடவுக்குறியீட்டை உருவாக்கவும் + பயன்பாட்டை விரைவாக திறக்க உங்கள் பயோமெட்ரிக் அல்லது சாதன அங்கீகாரத்தைப் பயன்படுத்தவும். + பயோமெட்ரிக் அங்கீகாரத்தை இயக்கவா? + உங்கள் கடவுக்குறியீட்டை உள்ளிடவும் + கடவுக்குறியீடு மறந்துவிட்டதா? + இல்லை + கடவுக்குறியீடுகள் பொருந்தவில்லை. + தவிர்க்கவும் + மீண்டும் முயற்சிக்கவும் + ஆம் + + + + + + + + + + + + + ௪ இலக்கங்கள் + ௬ இலக்கங்கள் + கடவுக்குறியீடு காட்சியை மாற்று + நீக்கு + diff --git a/l10n-templates/passcode/values-te/strings.xml b/l10n-templates/passcode/values-te/strings.xml new file mode 100644 index 00000000..fbb05453 --- /dev/null +++ b/l10n-templates/passcode/values-te/strings.xml @@ -0,0 +1,40 @@ + + + + పాత పాస్‌కోడ్‌ని నిర్ధారించండి + పాస్‌కోడ్‌ని నిర్ధారించండి + పాస్‌కోడ్‌ని సృష్టించండి + యాప్‌ని వేగంగా అన్‌లాక్ చేయడానికి మీ బయోమెట్రిక్ లేదా పరికర ఆధారాలను ఉపయోగించండి. + బయోమెట్రిక్ ప్రామాణీకరణను ప్రారంభించాలా? + మీ పాస్‌కోడ్‌ని నమోదు చేయండి + పాస్‌కోడ్ మర్చిపోయారా? + లేదు + పాస్‌కోడ్‌లు సరిపోలలేదు. + దాటవేయి + మళ్లీ ప్రయత్నించండి + అవును + + + + + + + + + + + + + ౪ అంకెలు + ౬ అంకెలు + పాస్‌కోడ్ కనిపించడాన్ని మార్చండి + తొలగించండి + diff --git a/l10n-templates/passcode/values-th/strings.xml b/l10n-templates/passcode/values-th/strings.xml new file mode 100644 index 00000000..7fcca9f2 --- /dev/null +++ b/l10n-templates/passcode/values-th/strings.xml @@ -0,0 +1,40 @@ + + + + ยืนยันรหัสเดิม + ยืนยันรหัส + สร้างรหัส + ใช้ไบโอเมตริกหรือข้อมูลรับรองอุปกรณ์เพื่อปลดล็อกแอปได้รวดเร็วขึ้น + เปิดใช้การยืนยันตัวตนด้วยไบโอเมตริก? + ป้อนรหัสของคุณ + ลืมรหัส? + ไม่ + รหัสไม่ตรงกัน + ข้าม + ลองอีกครั้ง + ใช่ + + + + + + + + + + + + + ๔ หลัก + ๖ หลัก + สลับการแสดงรหัส + ลบ + diff --git a/l10n-templates/passcode/values-tr/strings.xml b/l10n-templates/passcode/values-tr/strings.xml new file mode 100644 index 00000000..653fc3bb --- /dev/null +++ b/l10n-templates/passcode/values-tr/strings.xml @@ -0,0 +1,29 @@ + + + + Eski kodu doğrulayın + Kodu doğrulayın + Kod oluşturun + Uygulamanın kilidini daha hızlı açmak için biyometrinizi veya cihaz kimlik bilgilerinizi kullanın. + Biyometrik kimlik doğrulama etkinleştirilsin mi? + Kodu girin + Kodu mu unuttunuz? + Hayır + Kodlar eşleşmiyor. + Atlayın + Tekrar deneyin + Evet + + 4 hane + 6 hane + Kod görünürlüğünü değiştirin + Silin + diff --git a/l10n-templates/passcode/values-uk/strings.xml b/l10n-templates/passcode/values-uk/strings.xml new file mode 100644 index 00000000..9f37b826 --- /dev/null +++ b/l10n-templates/passcode/values-uk/strings.xml @@ -0,0 +1,29 @@ + + + + Підтвердіть старий код + Підтвердити код + Створити код + Використовуйте біометрію або облікові дані пристрою, щоб швидше розблокувати додаток. + Увімкнути біометричну автентифікацію? + Введіть код + Забули код? + Ні + Коди не збігаються. + Пропустити + Спробувати ще раз + Так + + 4 цифри + 6 цифр + Показати або сховати код + Видалити + diff --git a/l10n-templates/passcode/values-ur/strings.xml b/l10n-templates/passcode/values-ur/strings.xml new file mode 100644 index 00000000..5ea131ce --- /dev/null +++ b/l10n-templates/passcode/values-ur/strings.xml @@ -0,0 +1,42 @@ + + + + پرانے پاس کوڈ کی تصدیق کریں + پاس کوڈ کی تصدیق کریں + پاس کوڈ بنائیں + ایپ کو تیزی سے ان لاک کرنے کے لیے اپنا بایومیٹرک یا آلے کی اسناد استعمال کریں۔ + بایومیٹرک تصدیق فعال کریں؟ + اپنا پاس کوڈ درج کریں + پاس کوڈ بھول گئے؟ + نہیں + پاس کوڈ مماثل نہیں ہیں۔ + چھوڑیں + دوبارہ کوشش کریں + جی ہاں + + + ۰ + ۱ + ۲ + ۳ + ۴ + ۵ + ۶ + ۷ + ۸ + ۹ + + ۴ ہندسے + ۶ ہندسے + پاس کوڈ کی مرئیت تبدیل کریں + حذف کریں + diff --git a/l10n-templates/passcode/values-vi/strings.xml b/l10n-templates/passcode/values-vi/strings.xml new file mode 100644 index 00000000..274cfd88 --- /dev/null +++ b/l10n-templates/passcode/values-vi/strings.xml @@ -0,0 +1,29 @@ + + + + Xác nhận mã cũ + Xác nhận mã + Tạo mã + Sử dụng sinh trắc học hoặc thông tin xác thực thiết bị để mở khóa ứng dụng nhanh hơn. + Bật xác thực sinh trắc học? + Nhập mã của bạn + Quên mã? + Không + Các mã không khớp. + Bỏ qua + Thử lại + + + 4 chữ số + 6 chữ số + Bật/tắt hiển thị mã + Xoá + diff --git a/l10n-templates/passcode/values-zh-rCN/strings.xml b/l10n-templates/passcode/values-zh-rCN/strings.xml new file mode 100644 index 00000000..84c13814 --- /dev/null +++ b/l10n-templates/passcode/values-zh-rCN/strings.xml @@ -0,0 +1,29 @@ + + + + 确认旧密码 + 确认密码 + 创建密码 + 使用您的生物识别或设备凭据更快地解锁应用。 + 启用生物识别认证? + 输入您的密码 + 忘记密码? + + 密码不匹配。 + 跳过 + 重试 + + + 4位 + 6位 + 切换密码可见性 + 删除 + diff --git a/l10n-templates/passcode/values-zh-rTW/strings.xml b/l10n-templates/passcode/values-zh-rTW/strings.xml new file mode 100644 index 00000000..9da5871b --- /dev/null +++ b/l10n-templates/passcode/values-zh-rTW/strings.xml @@ -0,0 +1,29 @@ + + + + 確認舊密碼 + 確認密碼 + 建立密碼 + 使用您的生物辨識或裝置認證,更快速地解鎖應用程式。 + 啟用生物辨識驗證? + 輸入您的密碼 + 忘記密碼? + + 密碼不相符。 + 略過 + 重試 + + + 4位 + 6位 + 切換密碼顯示 + 刪除 + diff --git a/l10n-templates/passcode/values/strings.xml b/l10n-templates/passcode/values/strings.xml new file mode 100644 index 00000000..228cd186 --- /dev/null +++ b/l10n-templates/passcode/values/strings.xml @@ -0,0 +1,48 @@ + + + + Confirm old passcode + Confirm Passcode + Create Passcode + Use your biometric or device credentials to unlock the app faster. + Enable biometric authentication? + Enter your passcode + Forgot Passcode? + No + Passcodes do not match. + Skip + Try again + Yes + + + 4 digits + 6 digits + + + Toggle passcode visibility + Delete + + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + diff --git a/mifos-authenticator-biometrics/src/androidMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/PlatformAuthenticator.kt b/mifos-authenticator-biometrics/src/androidMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/PlatformAuthenticator.kt index 66d4454d..6634272a 100644 --- a/mifos-authenticator-biometrics/src/androidMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/PlatformAuthenticator.kt +++ b/mifos-authenticator-biometrics/src/androidMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/PlatformAuthenticator.kt @@ -105,19 +105,29 @@ actual class PlatformAuthenticator private actual constructor() { actual suspend fun authenticate( title: String, + subtitle: String, + description: String, + negativeButtonText: String, savedRegistrationOutput: String?, ): AuthenticationResult = suspendCancellableCoroutine { continuation -> + val allowedAuthenticators = if (apiLevel > Build.VERSION_CODES.Q) { + BIOMETRIC_STRONG or DEVICE_CREDENTIAL + } else { + BIOMETRIC_WEAK or DEVICE_CREDENTIAL + } + val promptInfo = BiometricPrompt.PromptInfo.Builder() .setTitle(title) - .setSubtitle("Unlock using your PIN, Password, Pattern, Face or Fingerprint") - .setAllowedAuthenticators( - if (apiLevel > Build.VERSION_CODES.Q) { - BIOMETRIC_STRONG or DEVICE_CREDENTIAL - } else { - BIOMETRIC_WEAK or DEVICE_CREDENTIAL - }, - ) + .apply { + if (subtitle.isNotEmpty()) setSubtitle(subtitle) + if (description.isNotEmpty()) setDescription(description) + // setNegativeButtonText is mutually exclusive with DEVICE_CREDENTIAL. + // Since DEVICE_CREDENTIAL is always allowed above, the negative button is + // system-supplied ("Use PIN" / "Use Pattern") and any consumer-set text would + // throw at build(). We deliberately ignore [negativeButtonText] on Android. + } + .setAllowedAuthenticators(allowedAuthenticators) .build() applicationContext?.let { fragmentActivity -> @@ -132,12 +142,11 @@ actual class PlatformAuthenticator private actual constructor() { BiometricPrompt.ERROR_CANCELED, BiometricPrompt.ERROR_USER_CANCELED, BiometricPrompt.ERROR_NEGATIVE_BUTTON, - -> { - AuthenticationResult.UserCancelled - } - else -> { - AuthenticationResult.Error("$errorCode: $errString") - } + -> AuthenticationResult.UserCancelled + + else -> AuthenticationResult.Error( + mapAndroidBiometricError(errorCode, errString.toString()), + ) }, ) } @@ -167,24 +176,38 @@ actual class PlatformAuthenticator private actual constructor() { userName: String, emailId: String, displayName: String, + title: String, + subtitle: String, + description: String, + negativeButtonText: String, ): RegistrationResult { val result = authenticate( - "Register yourself", - "", + title = title, + subtitle = subtitle, + description = description, + negativeButtonText = negativeButtonText, + savedRegistrationOutput = "", ) return when (result) { - is AuthenticationResult.Error -> { - RegistrationResult.Error(result.message) - } - is AuthenticationResult.Success -> { - RegistrationResult.Success("") - } - is AuthenticationResult.UserNotRegistered -> { - RegistrationResult.PlatformAuthenticatorNotSet - } - is AuthenticationResult.UserCancelled -> { - RegistrationResult.UserCancelled - } + is AuthenticationResult.Error -> RegistrationResult.Error(result.error) + is AuthenticationResult.Success -> RegistrationResult.Success("") + is AuthenticationResult.UserNotRegistered -> RegistrationResult.PlatformAuthenticatorNotSet + is AuthenticationResult.UserCancelled -> RegistrationResult.UserCancelled } } } + +private fun mapAndroidBiometricError(errorCode: Int, message: String?): BiometricError = when (errorCode) { + BiometricPrompt.ERROR_LOCKOUT -> BiometricError.Lockout + BiometricPrompt.ERROR_LOCKOUT_PERMANENT -> BiometricError.LockoutPermanent + BiometricPrompt.ERROR_HW_UNAVAILABLE, + BiometricPrompt.ERROR_HW_NOT_PRESENT, + BiometricPrompt.ERROR_SECURITY_UPDATE_REQUIRED, + -> BiometricError.HardwareUnavailable + BiometricPrompt.ERROR_NO_BIOMETRICS, + BiometricPrompt.ERROR_NO_DEVICE_CREDENTIAL, + -> BiometricError.NotEnrolled + BiometricPrompt.ERROR_TIMEOUT -> BiometricError.Timeout + BiometricPrompt.ERROR_NO_SPACE -> BiometricError.NoSpace + else -> BiometricError.Unknown(code = errorCode, platformMessage = message) +} diff --git a/mifos-authenticator-biometrics/src/commonMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/AuthenticationResult.kt b/mifos-authenticator-biometrics/src/commonMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/AuthenticationResult.kt index 983122fd..0f5243ef 100644 --- a/mifos-authenticator-biometrics/src/commonMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/AuthenticationResult.kt +++ b/mifos-authenticator-biometrics/src/commonMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/AuthenticationResult.kt @@ -24,9 +24,13 @@ sealed interface AuthenticationResult { /** * Indicates that an error occurred during authentication. * - * @property message A descriptive message explaining the error. + * The consumer should map [error] to a user-facing string from its own localized + * resources; the library no longer surfaces platform prose directly because it is + * always in the device locale rather than the app locale. + * + * @property error The categorized error reason. */ - data class Error(val message: String) : AuthenticationResult + data class Error(val error: BiometricError) : AuthenticationResult /** * Indicates that user cancelled the authentication request. diff --git a/mifos-authenticator-biometrics/src/commonMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/BiometricError.kt b/mifos-authenticator-biometrics/src/commonMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/BiometricError.kt new file mode 100644 index 00000000..015b4ebd --- /dev/null +++ b/mifos-authenticator-biometrics/src/commonMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/BiometricError.kt @@ -0,0 +1,68 @@ +/* + * Copyright 2026 Mifos Initiative + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * See https://github.com/openMF/mifos-passcode-cmp/blob/development/LICENSE + */ +package org.mifos.authenticator.biometrics.platformAuthenticator + +/** + * Categorical, locale-independent representation of a biometric authentication or + * registration failure. + * + * Consumers should map each case to a user-facing string from their own localized + * resources rather than display platform messages directly. The platform's prose + * ([Unknown.platformMessage]) is preserved only as a debugging hint and is in the + * device locale, not the app locale. + */ +sealed interface BiometricError { + + /** Too many failed attempts; biometric temporarily disabled by the platform. */ + data object Lockout : BiometricError + + /** Lockout that requires another auth factor to clear (Android `ERROR_LOCKOUT_PERMANENT`). */ + data object LockoutPermanent : BiometricError + + /** Sensor present but currently unavailable (driver fault, security update needed, etc.). */ + data object HardwareUnavailable : BiometricError + + /** No biometric is enrolled on the device. */ + data object NotEnrolled : BiometricError + + /** Authentication did not complete within the platform's time limit. */ + data object Timeout : BiometricError + + /** Insufficient storage to complete the operation (Android `ERROR_NO_SPACE`). */ + data object NoSpace : BiometricError + + /** + * The stored registration payload supplied to authenticate() could not be parsed. + * Currently only emitted by the desktop (Windows Hello) actual; the consumer typically + * re-runs registration to recover. + */ + data object InvalidRegistrationData : BiometricError + + /** + * Native platform reported invalid arguments while performing [stage]. Currently only + * emitted by the desktop (Windows Hello) actual. + */ + data class InvalidArguments(val stage: AuthStage) : BiometricError + + /** + * Any platform error not covered by the categorized cases. + * + * @property code Platform-specific error code where available + * (Android `BiometricPrompt.ERROR_*`, iOS `LAError`). + * @property platformMessage Platform-supplied message in the device locale, for logs only. + */ + data class Unknown( + val code: Int? = null, + val platformMessage: String? = null, + ) : BiometricError +} + +/** Which platform-authenticator phase a [BiometricError] originated from. */ +enum class AuthStage { Authentication, Registration } diff --git a/mifos-authenticator-biometrics/src/commonMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/PlatformAuthenticationProvider.kt b/mifos-authenticator-biometrics/src/commonMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/PlatformAuthenticationProvider.kt index b77e214f..30aac037 100644 --- a/mifos-authenticator-biometrics/src/commonMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/PlatformAuthenticationProvider.kt +++ b/mifos-authenticator-biometrics/src/commonMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/PlatformAuthenticationProvider.kt @@ -58,11 +58,20 @@ class PlatformAuthenticationProvider( /** * Initiates the user registration process and persists the resulting registration blob * via the configured [BiometricStorageAdapter] on success. + * + * Prompt strings ([title], [subtitle], [description], [negativeButtonText]) are + * forwarded to the platform's prompt UI on platforms that consume them. The library + * does not bundle translations for prompt text; the consumer should pass already-localized + * strings sourced from its own resources. */ suspend fun registerUser( userName: String = "", emailId: String = "", displayName: String = "", + title: String = "", + subtitle: String = "", + description: String = "", + negativeButtonText: String = "", ): RegistrationResult { mutex.withLock { updateAuthenticatorStatus() @@ -76,14 +85,22 @@ class PlatformAuthenticationProvider( } return try { - val result = authenticator.registerUser(userName, emailId, displayName) + val result = authenticator.registerUser( + userName = userName, + emailId = emailId, + displayName = displayName, + title = title, + subtitle = subtitle, + description = description, + negativeButtonText = negativeButtonText, + ) if (result is RegistrationResult.Success) { biometricStorageAdapter.saveRegistrationData(result.message) _isRegistered.value = true } result } catch (e: Exception) { - RegistrationResult.Error("Registration failed: ${e.message ?: "Unknown error"}") + RegistrationResult.Error(BiometricError.Unknown(platformMessage = e.message)) } } } @@ -92,11 +109,17 @@ class PlatformAuthenticationProvider( * Authenticates the user via the platform authenticator, loading any previously saved * registration data internally. * + * Prompt strings ([title], [subtitle], [description], [negativeButtonText]) follow + * the same locale convention as [registerUser] — consumer-supplied, already localized. + * * If the platform reports [AuthenticationResult.UserNotRegistered], the stored blob is * invalid and is deleted automatically; [isRegistered] becomes `false`. */ suspend fun onAuthenticatorClick( - appName: String = "", + title: String = "", + subtitle: String = "", + description: String = "", + negativeButtonText: String = "", ): AuthenticationResult { mutex.withLock { updateAuthenticatorStatus() @@ -113,14 +136,20 @@ class PlatformAuthenticationProvider( } return try { - val result = authenticator.authenticate(appName, savedRegistrationData) + val result = authenticator.authenticate( + title = title, + subtitle = subtitle, + description = description, + negativeButtonText = negativeButtonText, + savedRegistrationOutput = savedRegistrationData, + ) if (result is AuthenticationResult.UserNotRegistered) { biometricStorageAdapter.deleteRegistrationData() _isRegistered.value = false } result } catch (e: Exception) { - AuthenticationResult.Error("Authentication failed: ${e.message ?: "Unknown error"}") + AuthenticationResult.Error(BiometricError.Unknown(platformMessage = e.message)) } } } diff --git a/mifos-authenticator-biometrics/src/commonMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/PlatformAuthenticator.kt b/mifos-authenticator-biometrics/src/commonMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/PlatformAuthenticator.kt index 8754b911..a7b8e997 100644 --- a/mifos-authenticator-biometrics/src/commonMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/PlatformAuthenticator.kt +++ b/mifos-authenticator-biometrics/src/commonMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/PlatformAuthenticator.kt @@ -76,6 +76,10 @@ expect class PlatformAuthenticator private constructor() { userName: String = "", emailId: String = "", displayName: String = "", + title: String = "", + subtitle: String = "", + description: String = "", + negativeButtonText: String = "", ): RegistrationResult /** @@ -84,7 +88,17 @@ expect class PlatformAuthenticator private constructor() { * This function is typically called when the user needs to verify their identity to access the app * or a specific feature. * + * Prompt strings ([title], [subtitle], [description], [negativeButtonText]) are passed + * through to the platform's prompt UI on platforms that support them (currently Android + * for all four; iOS only honours [title] as `localizedReason`; desktop and web ignore + * them). The consumer is expected to provide already-localized strings — the library + * does not bundle translations for biometric prompt text. + * * @param title A title to be displayed in the authentication dialog (required on Android). + * @param subtitle A subtitle. Android only. + * @param description A description shown below the subtitle. Android only. + * @param negativeButtonText Text for the negative button. Android only, and only used when + * `DEVICE_CREDENTIAL` is not in the allowed authenticator set. * @param savedRegistrationOutput The registration data obtained from the `registerUser()` call. * This is required for authentication on platforms like **Windows** and should be securely stored * and provided here. It can be `null` on other platforms. @@ -93,6 +107,9 @@ expect class PlatformAuthenticator private constructor() { */ suspend fun authenticate( title: String = "", + subtitle: String = "", + description: String = "", + negativeButtonText: String = "", savedRegistrationOutput: String?, ): AuthenticationResult } diff --git a/mifos-authenticator-biometrics/src/commonMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/RegistrationResult.kt b/mifos-authenticator-biometrics/src/commonMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/RegistrationResult.kt index 12e1b3ae..90b55783 100644 --- a/mifos-authenticator-biometrics/src/commonMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/RegistrationResult.kt +++ b/mifos-authenticator-biometrics/src/commonMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/RegistrationResult.kt @@ -27,9 +27,13 @@ sealed interface RegistrationResult { /** * Indicates that an error occurred during registration. * - * @property message A descriptive message explaining the error. + * The consumer should map [error] to a user-facing string from its own localized + * resources; the library no longer surfaces platform prose directly because it is + * always in the device locale rather than the app locale. + * + * @property error The categorized error reason. */ - data class Error(val message: String) : RegistrationResult + data class Error(val error: BiometricError) : RegistrationResult data object UserCancelled : RegistrationResult diff --git a/mifos-authenticator-biometrics/src/desktopMain/kotlin/org/mifos/authenticator/biometrics/mockServer/Requests.kt b/mifos-authenticator-biometrics/src/desktopMain/kotlin/org/mifos/authenticator/biometrics/mockServer/Requests.kt index c0dba85f..e1a3ed97 100644 --- a/mifos-authenticator-biometrics/src/desktopMain/kotlin/org/mifos/authenticator/biometrics/mockServer/Requests.kt +++ b/mifos-authenticator-biometrics/src/desktopMain/kotlin/org/mifos/authenticator/biometrics/mockServer/Requests.kt @@ -26,7 +26,7 @@ enum class WindowsAuthenticationResponse { sealed class RetrievedDataFromAuthenticator { class Success(val bytes: ByteArray) : RetrievedDataFromAuthenticator() - class Error(val message: String) : RetrievedDataFromAuthenticator() + data object Error : RetrievedDataFromAuthenticator() } fun mapAuthenticationResponseENUM(authenticationResponse: Long): WindowsAuthenticationResponse { @@ -200,31 +200,23 @@ open class RegistrationDataPOST : Structure { fun getAttestationObjectBytes(): RetrievedDataFromAuthenticator { val bytes = attestationObjectBytes - return if (bytes != null) { - if (attestationObjectLength <= 0) { - RetrievedDataFromAuthenticator.Error("Received invalid credentialId. Registration failed") - } else { - RetrievedDataFromAuthenticator.Success( - bytes.getByteArray(0, attestationObjectLength), - ) - } + return if (bytes != null && attestationObjectLength > 0) { + RetrievedDataFromAuthenticator.Success( + bytes.getByteArray(0, attestationObjectLength), + ) } else { - RetrievedDataFromAuthenticator.Error("Received invalid credentialId. Registration failed") + RetrievedDataFromAuthenticator.Error } } fun getCredentialIDBytes(): RetrievedDataFromAuthenticator { val bytes = credentialIdBytes - return if (bytes != null) { - if (credentialIdLength <= 0) { - RetrievedDataFromAuthenticator.Error("Received invalid credentialId. Registration failed") - } else { - RetrievedDataFromAuthenticator.Success( - bytes.getByteArray(0, credentialIdLength), - ) - } + return if (bytes != null && credentialIdLength > 0) { + RetrievedDataFromAuthenticator.Success( + bytes.getByteArray(0, credentialIdLength), + ) } else { - RetrievedDataFromAuthenticator.Error("Receved invalid credentialId. Registration failed") + RetrievedDataFromAuthenticator.Error } } diff --git a/mifos-authenticator-biometrics/src/desktopMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/PlatformAuthenticator.kt b/mifos-authenticator-biometrics/src/desktopMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/PlatformAuthenticator.kt index 1d7a60dd..207e41e9 100644 --- a/mifos-authenticator-biometrics/src/desktopMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/PlatformAuthenticator.kt +++ b/mifos-authenticator-biometrics/src/desktopMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/PlatformAuthenticator.kt @@ -50,7 +50,13 @@ actual class PlatformAuthenticator private actual constructor() { userName: String, emailId: String, displayName: String, + title: String, + subtitle: String, + description: String, + negativeButtonText: String, ): RegistrationResult { + // Windows Hello does not consume title/subtitle/description/negativeButtonText — + // the system prompt UI is OS-localized; consumer strings are ignored here. if (isWindowsTenOrHigh) { val windowsAuthResponse = windowsHelloAuthenticator.invokeUserRegistration( userName, @@ -62,7 +68,7 @@ actual class PlatformAuthenticator private actual constructor() { is WindowsAuthenticatorResponse.Registration.UserCancelled -> return RegistrationResult.UserCancelled is WindowsAuthenticatorResponse.Registration.Error -> - return RegistrationResult.Error("Error while registering user") + return RegistrationResult.Error(BiometricError.Unknown()) is WindowsAuthenticatorResponse.Registration.Success -> { val response = windowsAuthResponse.response.windowsAuthenticationResponse return if (response == WindowsAuthenticationResponse.SUCCESS) { @@ -80,11 +86,17 @@ actual class PlatformAuthenticator private actual constructor() { return RegistrationResult.PlatformAuthenticatorNotAvailable } - actual suspend fun authenticate(title: String, savedRegistrationOutput: String?): AuthenticationResult { + actual suspend fun authenticate( + title: String, + subtitle: String, + description: String, + negativeButtonText: String, + savedRegistrationOutput: String?, + ): AuthenticationResult { if (isWindowsTenOrHigh) { val windowsRegistrationResponse: WindowsRegistrationResponse = savedRegistrationOutput?.let { decodeWindowsAuthenticatorFromJson(savedRegistrationOutput) - } ?: return AuthenticationResult.Error("Invalid registration data") + } ?: return AuthenticationResult.Error(BiometricError.InvalidRegistrationData) val windowsAuthResponse: WindowsAuthenticatorResponse.Verification = windowsHelloAuthenticator.invokeUserVerification( @@ -95,7 +107,7 @@ actual class PlatformAuthenticator private actual constructor() { is WindowsAuthenticatorResponse.Verification.UserCancelled -> return AuthenticationResult.UserCancelled is WindowsAuthenticatorResponse.Verification.Error -> - return AuthenticationResult.Error("Error while verifying user") + return AuthenticationResult.Error(BiometricError.Unknown()) is WindowsAuthenticatorResponse.Verification.Success -> return returnAuthenticatorResult(windowsAuthResponse.response) } @@ -108,48 +120,40 @@ actual class PlatformAuthenticator private actual constructor() { fun returnAuthenticatorResult(windowsAuthenticatorResponse: WindowsAuthenticationResponse): AuthenticationResult { return when (windowsAuthenticatorResponse) { WindowsAuthenticationResponse.SUCCESS -> AuthenticationResult.Success - WindowsAuthenticationResponse.UNSUCCESSFUL -> AuthenticationResult.Error(windowsAuthenticatorResponse.name) - WindowsAuthenticationResponse.MEMORY_ALLOCATION_ERROR -> AuthenticationResult.Error( - windowsAuthenticatorResponse.name, + WindowsAuthenticationResponse.UNSUCCESSFUL, + WindowsAuthenticationResponse.MEMORY_ALLOCATION_ERROR, + WindowsAuthenticationResponse.E_FAILURE, + WindowsAuthenticationResponse.ABORTED, + WindowsAuthenticationResponse.UNKNOWN_ERROR, + -> AuthenticationResult.Error( + BiometricError.Unknown(platformMessage = windowsAuthenticatorResponse.name), ) - WindowsAuthenticationResponse.E_FAILURE -> AuthenticationResult.Error(windowsAuthenticatorResponse.name) - WindowsAuthenticationResponse.ABORTED -> AuthenticationResult.Error(windowsAuthenticatorResponse.name) // Already handled via Verification.UserCancelled upstream; required for exhaustive when. WindowsAuthenticationResponse.USER_CANCELED -> AuthenticationResult.UserCancelled WindowsAuthenticationResponse.REGISTER_AGAIN -> AuthenticationResult.UserNotRegistered - WindowsAuthenticationResponse.UNKNOWN_ERROR -> AuthenticationResult.Error(windowsAuthenticatorResponse.name) WindowsAuthenticationResponse.INVALID_PARAMETER -> AuthenticationResult.Error( - "${windowsAuthenticatorResponse.name}: Invalid arguments used for authentication", + BiometricError.InvalidArguments(AuthStage.Authentication), ) } } fun returnRegistrationResult(windowsRegistrationResponse: WindowsRegistrationResponse): RegistrationResult { - return when (windowsRegistrationResponse.windowsAuthenticationResponse) { + val response = windowsRegistrationResponse.windowsAuthenticationResponse + return when (response) { WindowsAuthenticationResponse.SUCCESS -> RegistrationResult.Success( encodeWindowsAuthenticatorToJsonString(windowsRegistrationResponse), ) - WindowsAuthenticationResponse.UNSUCCESSFUL -> RegistrationResult.Error( - windowsRegistrationResponse.windowsAuthenticationResponse.name, - ) - WindowsAuthenticationResponse.MEMORY_ALLOCATION_ERROR -> RegistrationResult.Error( - windowsRegistrationResponse.windowsAuthenticationResponse.name, - ) - WindowsAuthenticationResponse.E_FAILURE -> RegistrationResult.Error( - windowsRegistrationResponse.windowsAuthenticationResponse.name, - ) - WindowsAuthenticationResponse.ABORTED -> RegistrationResult.Error( - windowsRegistrationResponse.windowsAuthenticationResponse.name, - ) + WindowsAuthenticationResponse.UNSUCCESSFUL, + WindowsAuthenticationResponse.MEMORY_ALLOCATION_ERROR, + WindowsAuthenticationResponse.E_FAILURE, + WindowsAuthenticationResponse.ABORTED, + WindowsAuthenticationResponse.UNKNOWN_ERROR, + -> RegistrationResult.Error(BiometricError.Unknown(platformMessage = response.name)) // Already handled via Registration.UserCancelled upstream; required for exhaustive when. WindowsAuthenticationResponse.USER_CANCELED -> RegistrationResult.UserCancelled WindowsAuthenticationResponse.REGISTER_AGAIN -> RegistrationResult.PlatformAuthenticatorNotSet - WindowsAuthenticationResponse.UNKNOWN_ERROR -> RegistrationResult.Error( - windowsRegistrationResponse.windowsAuthenticationResponse.name, - ) WindowsAuthenticationResponse.INVALID_PARAMETER -> RegistrationResult.Error( - "${windowsRegistrationResponse.windowsAuthenticationResponse.name}: " + - "Invalid arguments used for registration.", + BiometricError.InvalidArguments(AuthStage.Registration), ) } } diff --git a/mifos-authenticator-biometrics/src/desktopMain/kotlin/org/mifos/authenticator/biometrics/windows/WindowsHelloAuthenticator.kt b/mifos-authenticator-biometrics/src/desktopMain/kotlin/org/mifos/authenticator/biometrics/windows/WindowsHelloAuthenticator.kt index 9bd1e764..80d7e544 100644 --- a/mifos-authenticator-biometrics/src/desktopMain/kotlin/org/mifos/authenticator/biometrics/windows/WindowsHelloAuthenticator.kt +++ b/mifos-authenticator-biometrics/src/desktopMain/kotlin/org/mifos/authenticator/biometrics/windows/WindowsHelloAuthenticator.kt @@ -9,7 +9,6 @@ */ package org.mifos.authenticator.biometrics.windows -import co.touchlab.kermit.Logger import com.sun.jna.Memory import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext @@ -58,7 +57,7 @@ data class WindowsRegistrationResponse( sealed class WindowsAuthenticatorResponse { sealed class Registration { class Success(val response: WindowsRegistrationResponse) : Registration() - data class Error(val message: String) : Registration() + data object Error : Registration() // Handled early in invokeUserRegistration() before attestation bytes are checked, // because a cancelled registration returns null bytes from native code which would @@ -119,14 +118,10 @@ class WindowsHelloAuthenticator( val attestationObject = registrationDataPOST.getAttestationObjectBytes() val credentialIdBytes = registrationDataPOST.getCredentialIDBytes() - if (attestationObject is RetrievedDataFromAuthenticator.Error) { - WindowsAuthenticatorResponse.Registration.Error( - attestationObject.message, - ) - } else if (credentialIdBytes is RetrievedDataFromAuthenticator.Error) { - WindowsAuthenticatorResponse.Registration.Error( - credentialIdBytes.message, - ) + if (attestationObject is RetrievedDataFromAuthenticator.Error || + credentialIdBytes is RetrievedDataFromAuthenticator.Error + ) { + WindowsAuthenticatorResponse.Registration.Error } else { val windowsRegistrationResponse = WindowsRegistrationResponse( (attestationObject as RetrievedDataFromAuthenticator.Success).bytes, @@ -138,8 +133,7 @@ class WindowsHelloAuthenticator( WindowsAuthenticatorResponse.Registration.Success(windowsRegistrationResponse) } } catch (e: Exception) { - Logger.e(e) { "Windows Hello registration/verification failed" } - WindowsAuthenticatorResponse.Registration.Error(e.localizedMessage) + WindowsAuthenticatorResponse.Registration.Error } finally { registrationDataPOST?.let { windowsHelloAuthenticator.FreeRegistrationDataPOSTContents( diff --git a/mifos-authenticator-biometrics/src/iosMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/PlatformAuthenticator.kt b/mifos-authenticator-biometrics/src/iosMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/PlatformAuthenticator.kt index bd9a94ab..00d8fe5d 100644 --- a/mifos-authenticator-biometrics/src/iosMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/PlatformAuthenticator.kt +++ b/mifos-authenticator-biometrics/src/iosMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/PlatformAuthenticator.kt @@ -94,10 +94,14 @@ actual class PlatformAuthenticator private actual constructor() { userName: String, emailId: String, displayName: String, + title: String, + subtitle: String, + description: String, + negativeButtonText: String, ): RegistrationResult { - return when (val result = authenticate("Register yourself", null)) { + return when (val result = authenticate(title, subtitle, description, negativeButtonText, null)) { is AuthenticationResult.Success -> Success("") - is AuthenticationResult.Error -> Error(result.message) + is AuthenticationResult.Error -> Error(result.error) is AuthenticationResult.UserNotRegistered -> RegistrationResult.PlatformAuthenticatorNotSet AuthenticationResult.UserCancelled -> UserCancelled } @@ -105,9 +109,14 @@ actual class PlatformAuthenticator private actual constructor() { actual suspend fun authenticate( title: String, + subtitle: String, + description: String, + negativeButtonText: String, savedRegistrationOutput: String?, ): AuthenticationResult = suspendCancellableCoroutine { continuation -> + // iOS LAContext only honours one prompt string (`localizedReason`); subtitle, + // description and negativeButtonText are silently ignored. val context = LAContext() context.evaluatePolicy( LAPolicyDeviceOwnerAuthenticationWithBiometrics, @@ -119,8 +128,14 @@ actual class PlatformAuthenticator private actual constructor() { if (error?.code == LAErrorUserCancel) { continuation.resume(AuthenticationResult.UserCancelled) } else { - val message = error?.localizedDescription ?: "Authentication failed." - continuation.resume(AuthenticationResult.Error(message)) + continuation.resume( + AuthenticationResult.Error( + BiometricError.Unknown( + code = error?.code?.toInt(), + platformMessage = error?.localizedDescription, + ), + ), + ) } } } diff --git a/mifos-authenticator-biometrics/src/jsMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/PlatformAuthenticator.kt b/mifos-authenticator-biometrics/src/jsMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/PlatformAuthenticator.kt index ff5ab4c1..c8f655bf 100644 --- a/mifos-authenticator-biometrics/src/jsMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/PlatformAuthenticator.kt +++ b/mifos-authenticator-biometrics/src/jsMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/PlatformAuthenticator.kt @@ -22,11 +22,21 @@ actual class PlatformAuthenticator private actual constructor() { userName: String, emailId: String, displayName: String, + title: String, + subtitle: String, + description: String, + negativeButtonText: String, ): RegistrationResult { return RegistrationResult.PlatformAuthenticatorNotAvailable } - actual suspend fun authenticate(title: String, savedRegistrationOutput: String?): AuthenticationResult { + actual suspend fun authenticate( + title: String, + subtitle: String, + description: String, + negativeButtonText: String, + savedRegistrationOutput: String?, + ): AuthenticationResult { return AuthenticationResult.UserNotRegistered } } diff --git a/mifos-authenticator-biometrics/src/wasmJsMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/PlatformAuthenticator.kt b/mifos-authenticator-biometrics/src/wasmJsMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/PlatformAuthenticator.kt index ff5ab4c1..c8f655bf 100644 --- a/mifos-authenticator-biometrics/src/wasmJsMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/PlatformAuthenticator.kt +++ b/mifos-authenticator-biometrics/src/wasmJsMain/kotlin/org/mifos/authenticator/biometrics/platformAuthenticator/PlatformAuthenticator.kt @@ -22,11 +22,21 @@ actual class PlatformAuthenticator private actual constructor() { userName: String, emailId: String, displayName: String, + title: String, + subtitle: String, + description: String, + negativeButtonText: String, ): RegistrationResult { return RegistrationResult.PlatformAuthenticatorNotAvailable } - actual suspend fun authenticate(title: String, savedRegistrationOutput: String?): AuthenticationResult { + actual suspend fun authenticate( + title: String, + subtitle: String, + description: String, + negativeButtonText: String, + savedRegistrationOutput: String?, + ): AuthenticationResult { return AuthenticationResult.UserNotRegistered } } diff --git a/mifos-authenticator-passcode/src/commonMain/composeResources/values/strings.xml b/mifos-authenticator-passcode/src/commonMain/composeResources/values/strings.xml deleted file mode 100644 index 2aabf9d0..00000000 --- a/mifos-authenticator-passcode/src/commonMain/composeResources/values/strings.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - App Name - Are your sure your want to exit. - Authentication failed. - Authentication not available - Authentication not set - Biometric registration successful - Cancel - Confirm Passcode - Confirm old passcode - Create Passcode - Delete Passcode - drag_guide - drag_passcode - drag_your_pattern - enable_external_auth_dialog_description - enable_external_auth_dialog_title - Enter your passcode - Exit - Forgot Passcode? - Forgot Passcode? Login Manually - has_drag_passcode - Has Passcode - No - Ok - Passcode - Passcode do not match. - Pref Name - Skip - Try again - Use FaceId - Use Fingerprint - Yes - Unlock App - Unlock using your PIN, Password, Pattern, Face or Fingerprint - diff --git a/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/PasscodeStrings.kt b/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/PasscodeStrings.kt new file mode 100644 index 00000000..0e03b9a6 --- /dev/null +++ b/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/PasscodeStrings.kt @@ -0,0 +1,56 @@ +/* + * Copyright 2026 Mifos Initiative + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + * + * See https://github.com/openMF/mifos-passcode-cmp/blob/development/LICENSE + */ +package org.mifos.authenticator.passcode + +/** + * Consumer-supplied UI labels for the passcode library. + * + * Pass an instance to [org.mifos.authenticator.passcode.screen.PasscodeScreen] (and the + * lower-level public composables) so the library doesn't bundle translations of its + * own. Construct it from your app's own resources — typically with `stringResource` + * calls inside a `@Composable` context — then pass it down. + * + * The canonical key set + locale variants live at `l10n-templates/passcode/` in this + * repo; copy them into your module's `composeResources/values-XX/strings.xml` (keys are + * prefixed `mifos_passcode_*` to namespace away from your own keys), then build a + * `PasscodeStrings` from them. See `cmp-sample-shared`'s + * `PasscodeScreenWithBiometrics.kt#rememberPasscodeStringsFromResources()` for a + * working reference implementation. + * + * @property digits Glyphs for the keypad's 0..9 buttons, indexed by ASCII digit value. + * Override only if your locale uses a non-Latin numeral system (e.g. Devanagari ०–९, + * Eastern Arabic-Indic ٠–٩, Tamil ௦–௯). Storage and click-callback semantics continue + * to use ASCII digits regardless of which glyph is shown. + */ +data class PasscodeStrings( + val createPasscode: String, + val confirmPasscode: String, + val confirmOldPasscode: String, + val enterPasscode: String, + val passcodeDoNotMatch: String, + val tryAgain: String, + val skip: String, + val forgotPasscode: String, + val enableExternalAuthDialogTitle: String, + val enableExternalAuthDialogDescription: String, + val yes: String, + val no: String, + val cdTogglePasscodeVisibility: String, + val cdDeletePasscodeKey: String, + val passcodeLength4Digits: String, + val passcodeLength6Digits: String, + val digits: List, +) { + init { + require(digits.size == 10) { + "PasscodeStrings.digits must have exactly 10 entries (one per ASCII digit 0..9), got ${digits.size}" + } + } +} diff --git a/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/components/PasscodeButton.kt b/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/components/PasscodeButton.kt index f16d75ca..fa0e5bad 100644 --- a/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/components/PasscodeButton.kt +++ b/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/components/PasscodeButton.kt @@ -19,38 +19,15 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.dp -import mifos_authenticator.mifos_authenticator_passcode.generated.resources.Res -import mifos_authenticator.mifos_authenticator_passcode.generated.resources.forgot_passcode -import mifos_authenticator.mifos_authenticator_passcode.generated.resources.skip -import org.jetbrains.compose.resources.stringResource +import org.mifos.authenticator.passcode.PasscodeStrings import org.mifos.authenticator.passcode.theme.forgotButtonStyle -import org.mifos.authenticator.passcode.theme.skipButtonStyle - -@Composable -fun PasscodeSkipButton( - modifier: Modifier = Modifier, - onSkipButton: () -> Unit, - textStyle: TextStyle = skipButtonStyle(), -) { - Row( - modifier = modifier - .fillMaxWidth() - .padding(end = 16.dp), - horizontalArrangement = Arrangement.End, - ) { - TextButton( - onClick = { onSkipButton.invoke() }, - ) { - Text(text = stringResource(Res.string.skip), style = textStyle) - } - } -} @Composable fun PasscodeForgotButton( onForgotButton: () -> Unit, modifier: Modifier = Modifier, textStyle: TextStyle = forgotButtonStyle(), + strings: PasscodeStrings, ) { Row( modifier = modifier @@ -62,7 +39,7 @@ fun PasscodeForgotButton( onClick = { onForgotButton.invoke() }, ) { Text( - text = stringResource(Res.string.forgot_passcode), + text = strings.forgotPasscode, style = textStyle, ) } diff --git a/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/components/PasscodeHeader.kt b/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/components/PasscodeHeader.kt index 943006db..d319ec69 100644 --- a/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/components/PasscodeHeader.kt +++ b/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/components/PasscodeHeader.kt @@ -29,19 +29,15 @@ import androidx.compose.ui.geometry.Offset import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import mifos_authenticator.mifos_authenticator_passcode.generated.resources.Res -import mifos_authenticator.mifos_authenticator_passcode.generated.resources.confirm_old_passcode -import mifos_authenticator.mifos_authenticator_passcode.generated.resources.confirm_passcode -import mifos_authenticator.mifos_authenticator_passcode.generated.resources.create_passcode -import mifos_authenticator.mifos_authenticator_passcode.generated.resources.enter_your_passcode -import org.jetbrains.compose.resources.stringResource import org.mifos.authenticator.passcode.PasscodeStep +import org.mifos.authenticator.passcode.PasscodeStrings @Composable fun PasscodeHeader( modifier: Modifier = Modifier, passcodeStep: PasscodeStep, textStyle: TextStyle = TextStyle(fontSize = 20.sp), + strings: PasscodeStrings, ) { val transitionState = remember { MutableTransitionState(passcodeStep) } transitionState.targetState = passcodeStep @@ -99,7 +95,7 @@ fun PasscodeHeader( .offset(x = xTransitionHeader1.x.dp) .alpha(alpha = alphaHeader1) .scale(scale = scaleHeader1), - text = stringResource(resource = Res.string.create_passcode), + text = strings.createPasscode, style = textStyle, ) } @@ -109,13 +105,13 @@ fun PasscodeHeader( .offset(x = xTransitionHeader2.x.dp) .alpha(alpha = alphaHeader2) .scale(scale = scaleHeader2), - text = stringResource(resource = Res.string.confirm_passcode), + text = strings.confirmPasscode, style = textStyle, ) } PasscodeStep.Enter -> { Text( - text = stringResource(resource = Res.string.enter_your_passcode), + text = strings.enterPasscode, style = textStyle, ) } @@ -125,7 +121,7 @@ fun PasscodeHeader( .offset(x = xTransitionHeader3.x.dp) .alpha(alpha = alphaHeader3) .scale(scale = scaleHeader3), - text = stringResource(resource = Res.string.confirm_old_passcode), + text = strings.confirmOldPasscode, style = textStyle, ) } diff --git a/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/components/PasscodeKeys.kt b/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/components/PasscodeKeys.kt index 0bc1563a..8e5060c0 100644 --- a/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/components/PasscodeKeys.kt +++ b/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/components/PasscodeKeys.kt @@ -45,6 +45,7 @@ import androidx.compose.ui.semantics.Role import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp +import org.mifos.authenticator.passcode.PasscodeStrings import org.mifos.authenticator.passcode.theme.blueTint import org.mifos.authenticator.passcode.theme.passcodeKeyButtonStyle @@ -64,11 +65,14 @@ fun PasscodeKeys( keyContainerColor: Color = Color.White, keySize: Dp = 60.dp, externalAuthButton: @Composable ((Modifier) -> Unit)? = null, + strings: PasscodeStrings, ) { val onEnterKeyClick = { keyTitle: String -> enterKey(keyTitle) } + val displayDigits = strings.digits + val keys = rememberSaveable(shouldJumbleKeys) { val baseKeys = listOf("1", "2", "3", "4", "5", "6", "7", "8", "9", "0") if (shouldJumbleKeys) baseKeys.shuffled() else baseKeys @@ -89,6 +93,7 @@ fun PasscodeKeys( PasscodeKey( modifier = keyModifier, keyTitle = keyTitle, + keyDisplay = displayDigits[keyTitle.toInt()], onClick = onEnterKeyClick, keyTextStyle = keyTextStyle, keyColor = keyColor, @@ -105,7 +110,7 @@ fun PasscodeKeys( PasscodeKey( modifier = keyModifier, keyIcon = if (passcodeVisible) Icons.Filled.Visibility else Icons.Filled.VisibilityOff, - keyIconContentDescription = "Toggle passcode visibility", + keyIconContentDescription = strings.cdTogglePasscodeVisibility, onClick = { togglePasscodeVisibility.invoke() }, @@ -119,6 +124,7 @@ fun PasscodeKeys( PasscodeKey( modifier = keyModifier, keyTitle = keys[9], + keyDisplay = displayDigits[keys[9].toInt()], onClick = onEnterKeyClick, keyTextStyle = keyTextStyle, keyColor = keyColor, @@ -130,7 +136,7 @@ fun PasscodeKeys( PasscodeKey( modifier = keyModifier, keyIcon = Icons.Filled.Backspace, - keyIconContentDescription = "Delete Passcode Key Button", + keyIconContentDescription = strings.cdDeletePasscodeKey, onClick = { deleteKey() }, @@ -156,11 +162,23 @@ fun PasscodeKeys( } } +/** + * A single key on the passcode keypad. + * + * @param keyTitle The storage value emitted to [onClick]. For digit keys this is the + * ASCII character `"0"`–`"9"` regardless of the user's locale, so [PasscodeManager] + * stores a locale-independent passcode. + * @param keyDisplay The glyph rendered in the [Text]. Defaults to [keyTitle] for + * back-compat. Pass a localized digit (e.g. Arabic-Indic `٠` for [keyTitle] = `"0"`) + * when rendering for a locale with a non-Latin numeral system; the click callback + * continues to receive [keyTitle]. + */ @Composable fun PasscodeKey( modifier: Modifier = Modifier, enabled: Boolean = true, keyTitle: String = "", + keyDisplay: String = keyTitle, keyIcon: ImageVector? = null, keyIconContentDescription: String = "", onClick: ((String) -> Unit)? = null, @@ -195,7 +213,7 @@ fun PasscodeKey( ) { if (keyIcon == null) { Text( - text = keyTitle, + text = keyDisplay, style = keyTextStyle.copy(color = keyColor), ) } else { diff --git a/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/components/PasscodeLengthSwitch.kt b/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/components/PasscodeLengthSwitch.kt index e4b73af4..5fb28cfd 100644 --- a/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/components/PasscodeLengthSwitch.kt +++ b/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/components/PasscodeLengthSwitch.kt @@ -20,12 +20,15 @@ import androidx.compose.animation.togetherWith import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.IntrinsicSize import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults @@ -43,6 +46,7 @@ import androidx.compose.ui.graphics.Shape import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp +import org.mifos.authenticator.passcode.PasscodeStrings import org.mifos.authenticator.passcode.theme.blueTint import org.mifos.authenticator.passcode.theme.changePasscodeLengthStyle import org.mifos.authenticator.passcode.utility.PasscodeLength @@ -57,72 +61,82 @@ fun PasscodeLengthSwitch( // Text color on the sliding tab disabledTextColor: Color = Color.White, textStyle: TextStyle = changePasscodeLengthStyle(), - width: Dp = 150.dp, + minWidth: Dp = 150.dp, height: Dp = 35.dp, shape: Shape = RoundedCornerShape(40.dp), onSelectFourDigit: () -> Unit = {}, onSelectSixDigit: () -> Unit = {}, + strings: PasscodeStrings, ) { var selectedPasscodeLength by remember { mutableStateOf(passcodeLength) } + val fourDigitsLabel = strings.passcodeLength4Digits + val sixDigitsLabel = strings.passcodeLength6Digits + + // Sizes to max(minWidth, intrinsic width of widest label-button pair) so + // long-label locales (e.g. ta "4 இலக்கங்கள்") don't clip while short-label + // locales preserve the compact 150.dp baseline. Row.intrinsicMaxWidth = + // sum of children's intrinsics, and Box.IntrinsicSize.Max takes the max + // across children — so the Box ends up as wide as Row demands, which is + // what we want. Box( modifier = modifier .height(height) - .width(width) + .widthIn(min = minWidth) + .width(IntrinsicSize.Max) .clip(shape) .background(enabledSwitchColor), ) { - Button( - { - selectedPasscodeLength = PasscodeLength.FOUR_DIGIT - onSelectFourDigit() - }, - modifier = Modifier - .fillMaxWidth(.5f) - .fillMaxHeight() - .clip(shape) - .align(Alignment.CenterStart), - colors = ButtonDefaults.buttonColors( - containerColor = Color.Transparent, - contentColor = enabledTextColor, - disabledContentColor = Color.Transparent, - disabledContainerColor = Color.Transparent, - ), - enabled = selectedPasscodeLength == PasscodeLength.SIX_DIGIT, - contentPadding = PaddingValues(0.dp), - ) { - Text("4 digits", style = textStyle.copy(color = enabledTextColor)) - } + Row(modifier = Modifier.fillMaxSize()) { + Button( + { + selectedPasscodeLength = PasscodeLength.FOUR_DIGIT + onSelectFourDigit() + }, + modifier = Modifier + .weight(1f) + .fillMaxHeight() + .clip(shape), + colors = ButtonDefaults.buttonColors( + containerColor = Color.Transparent, + contentColor = enabledTextColor, + disabledContentColor = Color.Transparent, + disabledContainerColor = Color.Transparent, + ), + enabled = selectedPasscodeLength == PasscodeLength.SIX_DIGIT, + contentPadding = PaddingValues(horizontal = 16.dp, vertical = 0.dp), + ) { + Text(fourDigitsLabel, style = textStyle.copy(color = enabledTextColor)) + } - Button( - { - selectedPasscodeLength = PasscodeLength.SIX_DIGIT - onSelectSixDigit() - }, - modifier = Modifier - .fillMaxWidth(.5f) - .fillMaxHeight() - .clip(shape) - .align(Alignment.CenterEnd), - colors = ButtonDefaults.buttonColors( - containerColor = Color.Transparent, - contentColor = enabledTextColor, - disabledContentColor = Color.Transparent, - disabledContainerColor = Color.Transparent, - ), - contentPadding = PaddingValues(0.dp), - enabled = selectedPasscodeLength == PasscodeLength.FOUR_DIGIT, - ) { - Text("6 digits", style = textStyle.copy(color = enabledTextColor)) + Button( + { + selectedPasscodeLength = PasscodeLength.SIX_DIGIT + onSelectSixDigit() + }, + modifier = Modifier + .weight(1f) + .fillMaxHeight() + .clip(shape), + colors = ButtonDefaults.buttonColors( + containerColor = Color.Transparent, + contentColor = enabledTextColor, + disabledContentColor = Color.Transparent, + disabledContainerColor = Color.Transparent, + ), + contentPadding = PaddingValues(horizontal = 16.dp, vertical = 0.dp), + enabled = selectedPasscodeLength == PasscodeLength.FOUR_DIGIT, + ) { + Text(sixDigitsLabel, style = textStyle.copy(color = enabledTextColor)) + } } AnimatedContent( targetState = selectedPasscodeLength, modifier = Modifier - .fillMaxHeight() - .fillMaxWidth() + .fillMaxSize() .background(Color.Transparent) .clip(shape), transitionSpec = { @@ -147,9 +161,9 @@ fun PasscodeLengthSwitch( SlidingTab( label = if (currentPasscodeLength == PasscodeLength.SIX_DIGIT) { - "6 digits" + sixDigitsLabel } else { - "4 digits" + fourDigitsLabel }, alignment = if (currentPasscodeLength == PasscodeLength.SIX_DIGIT) { diff --git a/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/components/PasscodeMismatchedDialog.kt b/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/components/PasscodeMismatchedDialog.kt index 37667b52..2b821661 100644 --- a/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/components/PasscodeMismatchedDialog.kt +++ b/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/components/PasscodeMismatchedDialog.kt @@ -17,10 +17,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Shape import androidx.compose.ui.text.TextStyle -import mifos_authenticator.mifos_authenticator_passcode.generated.resources.Res -import mifos_authenticator.mifos_authenticator_passcode.generated.resources.passcode_do_not_match -import mifos_authenticator.mifos_authenticator_passcode.generated.resources.try_again -import org.jetbrains.compose.resources.stringResource +import org.mifos.authenticator.passcode.PasscodeStrings @Composable fun PasscodeMismatchedDialog( @@ -32,6 +29,7 @@ fun PasscodeMismatchedDialog( shape: Shape = MaterialTheme.shapes.large, titleTextStyle: TextStyle = TextStyle.Default, buttonTextStyle: TextStyle = TextStyle.Default, + strings: PasscodeStrings, ) { if (visible) { AlertDialog( @@ -39,7 +37,7 @@ fun PasscodeMismatchedDialog( containerColor = containerColor, title = { Text( - text = stringResource(Res.string.passcode_do_not_match), + text = strings.passcodeDoNotMatch, color = titleColor, style = titleTextStyle, ) @@ -47,7 +45,7 @@ fun PasscodeMismatchedDialog( confirmButton = { TextButton(onClick = onDismiss) { Text( - text = stringResource(Res.string.try_again), + text = strings.tryAgain, color = buttonTextColor, style = buttonTextStyle, ) diff --git a/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/components/SystemAuthConfirmDialog.kt b/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/components/SystemAuthConfirmDialog.kt index c7adab5f..de8d2140 100644 --- a/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/components/SystemAuthConfirmDialog.kt +++ b/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/components/SystemAuthConfirmDialog.kt @@ -33,12 +33,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties -import mifos_authenticator.mifos_authenticator_passcode.generated.resources.Res -import mifos_authenticator.mifos_authenticator_passcode.generated.resources.enable_external_auth_dialog_description -import mifos_authenticator.mifos_authenticator_passcode.generated.resources.enable_external_auth_dialog_title -import mifos_authenticator.mifos_authenticator_passcode.generated.resources.no -import mifos_authenticator.mifos_authenticator_passcode.generated.resources.yes -import org.jetbrains.compose.resources.stringResource +import org.mifos.authenticator.passcode.PasscodeStrings import org.mifos.authenticator.passcode.theme.blueTint @OptIn(ExperimentalMaterial3Api::class) @@ -53,6 +48,7 @@ fun SystemAuthSetupConfirmDialog( buttonColor: Color = blueTint, buttonTextColor: Color = White, buttonShape: Shape = ButtonDefaults.shape, + strings: PasscodeStrings, ) { val dialogProperties = DialogProperties() @@ -70,7 +66,7 @@ fun SystemAuthSetupConfirmDialog( Spacer(modifier = Modifier.height(20.dp)) Text( - text = stringResource(resource = Res.string.enable_external_auth_dialog_title), + text = strings.enableExternalAuthDialogTitle, modifier = Modifier .padding(8.dp), style = titleTextStyle, @@ -79,7 +75,7 @@ fun SystemAuthSetupConfirmDialog( Spacer(modifier = Modifier.height(4.dp)) Text( - text = stringResource(resource = Res.string.enable_external_auth_dialog_description), + text = strings.enableExternalAuthDialogDescription, modifier = Modifier .padding(8.dp), style = descriptionTextStyle, @@ -97,7 +93,7 @@ fun SystemAuthSetupConfirmDialog( modifier = Modifier .padding(end = 8.dp) .weight(1f), - text = stringResource(resource = Res.string.no), + text = strings.no, containerColor = buttonColor, contentColor = buttonTextColor, shape = buttonShape, @@ -108,7 +104,7 @@ fun SystemAuthSetupConfirmDialog( modifier = Modifier .padding(start = 8.dp) .weight(1f), - text = stringResource(resource = Res.string.yes), + text = strings.yes, containerColor = buttonColor, contentColor = buttonTextColor, shape = buttonShape, diff --git a/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/screen/PasscodeScreen.kt b/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/screen/PasscodeScreen.kt index 04288c17..2fa917b4 100644 --- a/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/screen/PasscodeScreen.kt +++ b/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/screen/PasscodeScreen.kt @@ -48,6 +48,7 @@ import org.jetbrains.compose.resources.painterResource import org.mifos.authenticator.passcode.PasscodeManager import org.mifos.authenticator.passcode.PasscodeResult import org.mifos.authenticator.passcode.PasscodeStep +import org.mifos.authenticator.passcode.PasscodeStrings import org.mifos.authenticator.passcode.components.MifosIcon import org.mifos.authenticator.passcode.components.PasscodeForgotButton import org.mifos.authenticator.passcode.components.PasscodeHeader @@ -100,6 +101,7 @@ fun PasscodeScreen( dialogConfig: PasscodeDialogConfig = PasscodeDialogConfig(), isExternalAuthEnabled: Boolean = false, externalAuthButton: @Composable ((Modifier) -> Unit)? = null, + strings: PasscodeStrings, ) { val effectiveLogoConfig = logoConfig.copy( logoPainter = logoConfig.logoPainter ?: painterResource(resource = Res.drawable.mifos_logo), @@ -112,7 +114,6 @@ fun PasscodeScreen( keyElevation = keyConfig.keyElevation ?: CardDefaults.elevatedCardElevation(defaultElevation = 2.dp), ) val effectiveButtonConfig = buttonConfig.copy( -// skipButtonTextStyle = buttonConfig.skipButtonTextStyle ?: skipButtonStyle(), forgotButtonTextStyle = buttonConfig.forgotButtonTextStyle ?: forgotButtonStyle(), ) val effectiveSwitchConfig = switchConfig.copy( @@ -121,6 +122,8 @@ fun PasscodeScreen( val state by passcodeManager.state.collectAsStateWithLifecycle() + val displayDigits = strings.digits + val xShake = remember { Animatable(initialValue = 0.0F) } var passcodeRejectedDialogVisible by remember { mutableStateOf(false) } @@ -177,6 +180,7 @@ fun PasscodeScreen( PasscodeHeader( passcodeStep = state.passcodeStep, textStyle = appearanceConfig.headerTextStyle, + strings = strings, ) Spacer(Modifier.height(10.dp)) @@ -186,11 +190,13 @@ fun PasscodeScreen( passcodeLength = state.passcodeLength.length, currentPasscode = state.currentPasscodeInput, passcodeVisible = state.passcodeVisible, + displayDigits = displayDigits, passcodeRejectedDialogVisible = passcodeRejectedDialogVisible, onDismissDialog = { passcodeRejectedDialogVisible = false }, xShake = xShake, dotConfig = dotConfig, dialogConfig = effectiveDialogConfig, + strings = strings, ) Spacer(Modifier.height(15.dp)) @@ -210,6 +216,7 @@ fun PasscodeScreen( onSelectSixDigit = { passcodeManager.updatePasscodeLength(PasscodeLength.SIX_DIGIT) }, + strings = strings, ) } } @@ -242,6 +249,7 @@ fun PasscodeScreen( keyContainerColor = effectiveKeyConfig.keyContainerColor, keySize = effectiveKeyConfig.keySize, externalAuthButton = if (state.passcodeStep == PasscodeStep.Enter && isExternalAuthEnabled) externalAuthButton else null, + strings = strings, ) Spacer(modifier = Modifier.height(8.dp)) @@ -251,6 +259,7 @@ fun PasscodeScreen( passcodeManager.forgetPasscode() }, textStyle = effectiveButtonConfig.forgotButtonTextStyle!!, + strings = strings, ) } @@ -266,7 +275,8 @@ fun PasscodeScreen( * @param passcodeLength The total length of the passcode. * @param filledDots The number of currently filled dots. * @param passcodeVisible A boolean indicating if the passcode characters should be visible or masked as dots. - * @param currentPasscode The current passcode string entered by the user. + * @param currentPasscode The current passcode string entered by the user (always ASCII digits). + * @param displayDigits Locale-resolved glyphs for digits 0-9, indexed by ASCII digit value. * @param passcodeRejectedDialogVisible a boolean indicating if the "Passcode Mismatched" dialog should be visible. * @param onDismissDialog Lambda to be invoked when the "Passcode Mismatched" dialog is dismissed. * @param xShake An [Animatable] for the horizontal shake animation when an incorrect passcode is entered. @@ -280,11 +290,13 @@ private fun PasscodeView( filledDots: Int, passcodeVisible: Boolean, currentPasscode: String, + displayDigits: List, passcodeRejectedDialogVisible: Boolean, onDismissDialog: () -> Unit, xShake: Animatable, dotConfig: PasscodeDotConfig, dialogConfig: PasscodeDialogConfig, + strings: PasscodeStrings, modifier: Modifier = Modifier, ) { PasscodeMismatchedDialog( @@ -296,6 +308,7 @@ private fun PasscodeView( titleColor = dialogConfig.dialogTitleColor, buttonTextColor = dialogConfig.dialogButtonTextColor, shape = dialogConfig.dialogShape!!, + strings = strings, ) Row( @@ -313,8 +326,10 @@ private fun PasscodeView( ) { repeat(passcodeLength) { dotIndex -> if (passcodeVisible && dotIndex < currentPasscode.length) { + val ch = currentPasscode[dotIndex] + val glyph = if (ch in '0'..'9') displayDigits[ch - '0'] else ch.toString() Text( - text = currentPasscode[dotIndex].toString(), + text = glyph, style = dotConfig.visiblePasscodeTextStyle, ) } else { diff --git a/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/screen/PasscodeScreenConfig.kt b/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/screen/PasscodeScreenConfig.kt index 26f71f40..5f232254 100644 --- a/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/screen/PasscodeScreenConfig.kt +++ b/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/screen/PasscodeScreenConfig.kt @@ -81,14 +81,11 @@ data class PasscodeKeyConfig( ) /** - * Configuration for the "Skip" and "Forgot Passcode" buttons on the `PasscodeScreen` keypad. + * Configuration for the "Forgot Passcode" button on the `PasscodeScreen` keypad. * - * @property skipButtonTextStyle The [TextStyle] for the "Skip" button. If `null`, a default style will be used. * @property forgotButtonTextStyle The [TextStyle] for the "Forgot Passcode" button. If `null`, a default style will be used. */ data class PasscodeButtonConfig( -// val isSkipButtonVisible: Boolean = false, - val skipButtonTextStyle: TextStyle? = null, val forgotButtonTextStyle: TextStyle? = null, ) diff --git a/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/theme/Type.kt b/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/theme/Type.kt index d5525bc4..61cddf3e 100644 --- a/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/theme/Type.kt +++ b/mifos-authenticator-passcode/src/commonMain/kotlin/org/mifos/authenticator/passcode/theme/Type.kt @@ -44,13 +44,6 @@ internal fun passcodeKeyButtonStyle() = TextStyle( fontSize = 24.sp, ) -@Composable -internal fun skipButtonStyle() = TextStyle( - color = blueTint, - fontSize = 20.sp, - fontFamily = LatoFonts(), -) - @Composable internal fun forgotButtonStyle() = TextStyle( color = blueTint,