Merge branch 'develop' of https://github.com/mosip/inji into ui-revamp

This commit is contained in:
Sri Kanth Kola
2023-06-19 23:46:49 +05:30
196 changed files with 6865 additions and 7473 deletions

5
.env
View File

@@ -1,10 +1,11 @@
# after making changes to the env file, ensure to start the bundler (or the project) with a --reset-cache
# eg . npm build android:newlogic --reset-cache
MIMOTO_HOST=https://api.qa-1201-b2.mosip.net
MIMOTO_HOST=https://api.qatriple.mosip.net
#MIMOTO_HOST=http://mock.mimoto.newlogic.dev
GOOGLE_NEARBY_MESSAGES_API_KEY=
#Application Theme can be ( orange | purple )
APPLICATION_THEME=orange
USE_BLE_SHARE=true
#environment can be changed if it is toggled
CREDENTIAL_REGISTRY_EDIT=true

View File

@@ -1,4 +1,7 @@
name: ID PASS - MOSIP Resident Application
name: PR - android build verification
env:
backendServiceDefaultUrl: https://api.sandbox.mosip.net
on:
push:
@@ -10,6 +13,13 @@ on:
- 0.9
tags:
- '*'
pull_request:
types: [ opened, synchronize ]
branches:
- develop
- 'release-**'
tags:
- '*'
jobs:
build-android:
@@ -19,8 +29,7 @@ jobs:
- uses: actions/setup-node@v3
with:
node-version: '16.x'
# Cache stuff for faster build
- name: Cache local npm repository
uses: actions/cache@v3.0.11
with:
@@ -34,7 +43,7 @@ jobs:
path: |
~/.gradle/caches
~/.gradle/wrapper
- name: Install npm dependencies
run: |
npm ci
@@ -43,33 +52,63 @@ jobs:
run: |
echo "${{ secrets.ENV_FILE }}" > .env.local > android/local.properties
- name: Setup branch and env
- name: Setup branch and env
run: |
# Strip git ref prefix from version
echo "BRANCH_NAME=$(echo ${{ github.ref }} | sed -e 's,.*/\(.*\),\1,')" >> $GITHUB_ENV
echo "GPG_TTY=$(tty)" >> $GITHUB_ENV
- name: Setup branch and GPG public key
- name: Setup branch and GPG public key
run: |
# Strip git ref prefix from version
echo ${{ env.BRANCH_NAME }}
echo ${{ env.GPG_TTY }}
sudo apt-get --yes install gnupg2
gpg2 --import ./.github/keys/mosipgpgkey_pub.gpg
gpg2 --quiet --batch --passphrase=${{secrets.gpg_secret}} --allow-secret-key-import --import ./.github/keys/mosipgpgkey_sec.gpg
gpg2 --quiet --batch --passphrase=${{secrets.gpg_secret}} --allow-secret-key-import --import ./.github/keys/mosipgpgkey_sec.gpg
- name: Build App Newlogic Release
- name: Setup Firebase
run: |
cd android
if [ ! -z "$FIREBASE_SECRET" ] && [ -f app/google-services.json.gpg ];then rm -f app/google-services.json;gpg2 --quiet --batch --passphrase=$FIREBASE_SECRET --pinentry-mode loopback --decrypt --output app/google-services.json app/mosip-google-services.json.gpg;fi
./gradlew :app:assembleNewlogicRelease
env:
FIREBASE_SECRET: ${{ secrets.GPG_SECRET }}
- name: Generate keystore
run: |
keytool \
-genkey -v \
-storetype PKCS12 \
-keyalg RSA \
-keysize 2048 \
-validity 10000 \
-storepass $DEBUG_KEYSTORE_PASSWORD \
-keypass $DEBUG_KEYSTORE_PASSWORD \
-alias androiddebugkey \
-keystore android/app/debug.keystore \
-dname "CN=io.mosip.residentapp,OU=,O=,L=,S=,C=US"
env:
DEBUG_KEYSTORE_PASSWORD: '${{secrets.INJI_ANDROID_DEBUG_STOREPASS}}'
- name: Upload Artifact
uses: actions/upload-artifact@v3.1.1
- name: Export variables for keystore
run: |
cd android/app
export DEBUG_KEYSTORE_ALIAS=androiddebugkey
export DEBUG_KEYSTORE_PASSWORD=$DEBUG_KEYSTORE_PASSWORD
env:
DEBUG_KEYSTORE_PASSWORD: '${{secrets.INJI_ANDROID_DEBUG_STOREPASS}}'
- name: Bump version code
uses: chkfung/android-version-actions@v1.2.1
with:
name: output
path: android/app/build/outputs/apk/newlogic/release/
retention-days: 1
gradlePath: android/app/build.gradle
versionCode: ${{github.run_number}}
- name: Run Build using Fastlane
run: |
cd android/scripts
./run-fastlane.sh
env:
DEBUG_KEYSTORE_ALIAS: androiddebugkey
DEBUG_KEYSTORE_PASSWORD: '${{secrets.INJI_ANDROID_DEBUG_STOREPASS}}'

View File

@@ -1,7 +1,7 @@
name: ID PASS - MOSIP Resident Application Custom build
name: Android Custom Build
env:
backendServiceDefaultUrl: https://api.qa-121.mosip.net
backendServiceDefaultUrl: https://api.sandbox.mosip.net
on:
workflow_dispatch:
@@ -9,7 +9,7 @@ on:
backendServiceUrl:
description: 'Backend service URL'
required: true
default: 'https://api.qa-121.mosip.net'
default: 'https://api.sandbox.mosip.net'
type: string
theme:
description: 'Application Theme'
@@ -19,6 +19,14 @@ on:
options:
- orange
- purple
registry_edit:
description: 'Edit Registry'
required: true
default: 'true'
type: choice
options:
- false
- true
jobs:
build-android:
@@ -28,8 +36,7 @@ jobs:
- uses: actions/setup-node@v3
with:
node-version: '16.x'
# Cache stuff for faster build
- name: Cache local npm repository
uses: actions/cache@v3.0.11
with:
@@ -46,21 +53,80 @@ jobs:
- name: Install npm dependencies
run: |
npm install
npm ci
- name: Create .env.local file
run: |
echo "${{ secrets.ENV_FILE }}" > .env.local > android/local.properties
- name: Build App Newlogic Release
- name: Setup branch and env
run: |
# Strip git ref prefix from version
echo "BRANCH_NAME=$(echo ${{ github.ref }} | sed -e 's,.*/\(.*\),\1,')" >> $GITHUB_ENV
echo "GPG_TTY=$(tty)" >> $GITHUB_ENV
- name: Setup branch and GPG public key
run: |
# Strip git ref prefix from version
echo ${{ env.BRANCH_NAME }}
echo ${{ env.GPG_TTY }}
sudo apt-get --yes install gnupg2
gpg2 --import ./.github/keys/mosipgpgkey_pub.gpg
gpg2 --quiet --batch --passphrase=${{secrets.gpg_secret}} --allow-secret-key-import --import ./.github/keys/mosipgpgkey_sec.gpg
- name: Setup Firebase
run: |
cd android
if [ ! -z "$FIREBASE_SECRET" ] && [ -f app/google-services.json.gpg ];then rm -f app/google-services.json;gpg2 --quiet --batch --passphrase=$FIREBASE_SECRET --pinentry-mode loopback --decrypt --output app/google-services.json app/mosip-google-services.json.gpg;fi
./gradlew :app:assembleNewlogicRelease
env:
FIREBASE_SECRET: ${{ secrets.GPG_SECRET }}
- name: Generate keystore
run: |
keytool \
-genkey -v \
-storetype PKCS12 \
-keyalg RSA \
-keysize 2048 \
-validity 10000 \
-storepass $DEBUG_KEYSTORE_PASSWORD \
-keypass $DEBUG_KEYSTORE_PASSWORD \
-alias androiddebugkey \
-keystore android/app/debug.keystore \
-dname "CN=io.mosip.residentapp,OU=,O=,L=,S=,C=US"
env:
DEBUG_KEYSTORE_PASSWORD: '${{secrets.INJI_ANDROID_DEBUG_STOREPASS}}'
- name: Export variables for keystore
run: |
cd android/app
export DEBUG_KEYSTORE_ALIAS=androiddebugkey
export DEBUG_KEYSTORE_PASSWORD=$DEBUG_KEYSTORE_PASSWORD
env:
DEBUG_KEYSTORE_PASSWORD: '${{secrets.INJI_ANDROID_DEBUG_STOREPASS}}'
- name: Bump version code
uses: chkfung/android-version-actions@v1.2.1
with:
gradlePath: android/app/build.gradle
versionCode: ${{github.run_number}}
- name: Run Build
run: |
cd android/scripts
./run-fastlane.sh
env:
MIMOTO_HOST: ${{ github.event.inputs.backendServiceUrl }}
FIREBASE_SECRET: ${{ secrets.FIREBASE_SECRET }}
- name: Upload Artifact
APPLICATION_THEME: ${{ github.event.inputs.theme }}
DEBUG_KEYSTORE_ALIAS: androiddebugkey
DEBUG_KEYSTORE_PASSWORD: '${{secrets.INJI_ANDROID_DEBUG_STOREPASS}}'
CREDENTIAL_REGISTRY_EDIT: ${{ github.event.inputs.registry_edit }}
- name: Upload Artifact to Actions
uses: actions/upload-artifact@v3.1.1
with:
name: apk-output
path: android/app/build/outputs/apk/newlogic/release/
retention-days: 5
name: Inji
path: android/app/build/outputs/apk/newlogic/debug/
retention-days: 10

59
.github/workflows/ios-build-verify.yml vendored Normal file
View File

@@ -0,0 +1,59 @@
name: PR - IOS build verification
on:
push:
branches:
- main
- develop
- demobranch
- qa-develop
- 0.9
tags:
- '*'
pull_request:
types: [ opened, synchronize ]
branches:
- develop
- 'release-**'
tags:
- '*'
jobs:
build_ios:
name: Building the IPA
runs-on: macos-13
steps:
- uses: actions/checkout@v3.1.0
- uses: actions/setup-node@v3
with:
node-version: '16.x'
- name: Install npm dependencies
run: |
npm install
- name: Install Pod
run: |
cd ios
pod install
- name: Building the IPA
run: |
cd ios
fastlane build_verify
env:
APP_STORE_CONNECT_TEAM_ID: '${{ secrets.APP_STORE_CONNECT_TEAM_ID }}'
DEVELOPER_APP_ID: '${{ secrets.IOS_INJI_DEVELOPER_APP_ID }}'
INJI_IOS_DEVELOPER_APP_IDENTIFIER: '${{ secrets.INJI_IOS_DEVELOPER_APP_IDENTIFIER }}'
INJI_IOS_DEVELOPER_PORTAL_TEAM_ID: '${{ secrets.INJI_IOS_DEVELOPER_PORTAL_TEAM_ID }}'
INJI_IOS_FASTLANE_APPLE_ID: '${{ secrets.INJI_IOS_FASTLANE_APPLE_ID }}'
INJI_IOS_FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD: '${{ secrets.INJI_IOS_FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD }}'
GIT_AUTHORIZATION: '${{ secrets.GIT_AUTHORIZATION }}'
INJI_IOS_PROVISIONING_PROFILE_SPECIFIER: '${{ secrets.INJI_IOS_PROVISIONING_PROFILE_SPECIFIER }}'
INJI_IOS_TEMP_KEYCHAIN_PASSWORD: '${{ secrets.INJI_IOS_TEMP_KEYCHAIN_PASSWORD }}'
INJI_IOS_TEMP_KEYCHAIN_USER: '${{ secrets.INJI_IOS_TEMP_KEYCHAIN_USER }}'
APPLE_KEY_ID: '${{ secrets.APPLE_KEY_ID }}'
APPLE_ISSUER_ID: '${{ secrets.APPLE_ISSUER_ID }}'
APPLE_KEY_CONTENT: '${{ secrets.APPLE_KEY_CONTENT }}'
MATCH_PASSWORD: '${{ secrets.INJI_IOS_MATCH_PASSWORD }}'

88
.github/workflows/ios-build.yml vendored Normal file
View File

@@ -0,0 +1,88 @@
name: Inji iOS build
on:
workflow_dispatch:
inputs:
backendServiceUrl:
description: 'Backend service URL'
required: true
default: 'https://api.sandbox.mosip.net'
type: string
theme:
description: 'Application Theme'
required: true
default: 'orange'
type: choice
options:
- orange
- purple
registry_edit:
description: 'Edit Registry'
required: true
default: 'true'
type: choice
options:
- false
- true
internal-testers:
description: 'Internal Testers Group'
required: true
default: 'QA-Triple'
type: choice
options:
- Dev-testing
- MEC
- QA
- MOSIP-Collab
- MOSIP-Dev-testing
buildDescription:
description: 'What to test'
required: true
default: 'QA-Triple environment build'
type: string
jobs:
build_ios:
name: Deploying to Testflight
runs-on: macos-13
steps:
- uses: actions/checkout@v3.1.0
- uses: actions/setup-node@v3
with:
node-version: '16.x'
- name: Install npm dependencies
run: |
npm install
- name: Install Pod
run: |
cd ios
pod install
- name: Deploy iOS Beta to TestFlight
run: |
cd ios
fastlane beta
env:
APP_STORE_CONNECT_TEAM_ID: '${{ secrets.APP_STORE_CONNECT_TEAM_ID }}'
DEVELOPER_APP_ID: '${{ secrets.IOS_INJI_DEVELOPER_APP_ID }}'
INJI_IOS_DEVELOPER_APP_IDENTIFIER: '${{ secrets.INJI_IOS_DEVELOPER_APP_IDENTIFIER }}'
INJI_IOS_DEVELOPER_PORTAL_TEAM_ID: '${{ secrets.INJI_IOS_DEVELOPER_PORTAL_TEAM_ID }}'
INJI_IOS_FASTLANE_APPLE_ID: '${{ secrets.INJI_IOS_FASTLANE_APPLE_ID }}'
INJI_IOS_FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD: '${{ secrets.INJI_IOS_FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD }}'
GIT_AUTHORIZATION: '${{ secrets.GIT_AUTHORIZATION }}'
INJI_IOS_PROVISIONING_PROFILE_SPECIFIER: '${{ secrets.INJI_IOS_PROVISIONING_PROFILE_SPECIFIER }}'
INJI_IOS_TEMP_KEYCHAIN_PASSWORD: '${{ secrets.INJI_IOS_TEMP_KEYCHAIN_PASSWORD }}'
INJI_IOS_TEMP_KEYCHAIN_USER: '${{ secrets.INJI_IOS_TEMP_KEYCHAIN_USER }}'
APPLE_KEY_ID: '${{ secrets.APPLE_KEY_ID }}'
APPLE_ISSUER_ID: '${{ secrets.APPLE_ISSUER_ID }}'
APPLE_KEY_CONTENT: '${{ secrets.APPLE_KEY_CONTENT }}'
SLACK_URL: '${{ secrets.SLACK_WEBHOOK_DEVOPS }}'
MATCH_PASSWORD: '${{ secrets.INJI_IOS_MATCH_PASSWORD }}'
APPLICATION_THEME: ${{ github.event.inputs.theme }}
CREDENTIAL_REGISTRY_EDIT: ${{ github.event.inputs.registry_edit }}
MIMOTO_HOST: ${{ github.event.inputs.backendServiceUrl }}
TESTFLIGHT_INTERNAL_TESTERS_GROUP: ${{ github.event.inputs.internal-testers }}
TESTFLIGHT_BETA_APP_DESCRIPTION: ${{ github.event.inputs.buildDescription }}

2
.gitignore vendored
View File

@@ -60,8 +60,6 @@ yarn-error.log
# BUCK
buck-out/
\.buckd/
*.keystore
!debug.keystore
# Bundle artifacts
*.jsbundle

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>MOSIP Resident App</name>
<name>Inji</name>
<comment>Project android created by Buildship.</comment>
<projects>
</projects>

6
android/Gemfile Normal file
View File

@@ -0,0 +1,6 @@
source "https://rubygems.org"
gem "fastlane"
plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
eval_gemfile(plugins_path) if File.exist?(plugins_path)

220
android/Gemfile.lock Normal file
View File

@@ -0,0 +1,220 @@
GEM
remote: https://rubygems.org/
specs:
CFPropertyList (3.0.6)
rexml
addressable (2.8.4)
public_suffix (>= 2.0.2, < 6.0)
artifactory (3.0.15)
atomos (0.1.3)
aws-eventstream (1.2.0)
aws-partitions (1.765.0)
aws-sdk-core (3.172.0)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.651.0)
aws-sigv4 (~> 1.5)
jmespath (~> 1, >= 1.6.1)
aws-sdk-kms (1.64.0)
aws-sdk-core (~> 3, >= 3.165.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.122.0)
aws-sdk-core (~> 3, >= 3.165.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.4)
aws-sigv4 (1.5.2)
aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4)
claide (1.1.0)
colored (1.2)
colored2 (3.1.2)
commander (4.6.0)
highline (~> 2.0.0)
declarative (0.0.20)
digest-crc (0.6.4)
rake (>= 12.0.0, < 14.0.0)
domain_name (0.5.20190701)
unf (>= 0.0.5, < 1.0.0)
dotenv (2.8.1)
emoji_regex (3.2.3)
excon (0.99.0)
faraday (1.10.3)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
faraday-excon (~> 1.1)
faraday-httpclient (~> 1.0)
faraday-multipart (~> 1.0)
faraday-net_http (~> 1.0)
faraday-net_http_persistent (~> 1.0)
faraday-patron (~> 1.0)
faraday-rack (~> 1.0)
faraday-retry (~> 1.0)
ruby2_keywords (>= 0.0.4)
faraday-cookie_jar (0.0.7)
faraday (>= 0.8.0)
http-cookie (~> 1.0.0)
faraday-em_http (1.0.0)
faraday-em_synchrony (1.0.0)
faraday-excon (1.1.0)
faraday-httpclient (1.0.1)
faraday-multipart (1.0.4)
multipart-post (~> 2)
faraday-net_http (1.0.1)
faraday-net_http_persistent (1.2.0)
faraday-patron (1.0.0)
faraday-rack (1.0.0)
faraday-retry (1.0.3)
faraday_middleware (1.2.0)
faraday (~> 1.0)
fastimage (2.2.6)
fastlane (2.212.2)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0)
aws-sdk-s3 (~> 1.0)
babosa (>= 1.0.3, < 2.0.0)
bundler (>= 1.12.0, < 3.0.0)
colored
commander (~> 4.6)
dotenv (>= 2.1.1, < 3.0.0)
emoji_regex (>= 0.1, < 4.0)
excon (>= 0.71.0, < 1.0.0)
faraday (~> 1.0)
faraday-cookie_jar (~> 0.0.6)
faraday_middleware (~> 1.0)
fastimage (>= 2.1.0, < 3.0.0)
gh_inspector (>= 1.1.2, < 2.0.0)
google-apis-androidpublisher_v3 (~> 0.3)
google-apis-playcustomapp_v1 (~> 0.1)
google-cloud-storage (~> 1.31)
highline (~> 2.0)
json (< 3.0.0)
jwt (>= 2.1.0, < 3)
mini_magick (>= 4.9.4, < 5.0.0)
multipart-post (~> 2.0.0)
naturally (~> 2.2)
optparse (~> 0.1.1)
plist (>= 3.1.0, < 4.0.0)
rubyzip (>= 2.0.0, < 3.0.0)
security (= 0.1.3)
simctl (~> 1.6.3)
terminal-notifier (>= 2.0.0, < 3.0.0)
terminal-table (>= 1.4.5, < 2.0.0)
tty-screen (>= 0.6.3, < 1.0.0)
tty-spinner (>= 0.8.0, < 1.0.0)
word_wrap (~> 1.0.0)
xcodeproj (>= 1.13.0, < 2.0.0)
xcpretty (~> 0.3.0)
xcpretty-travis-formatter (>= 0.0.3)
fastlane-plugin-increment_version_code (0.4.3)
fastlane-plugin-increment_version_name (0.0.10)
gh_inspector (1.1.3)
google-apis-androidpublisher_v3 (0.42.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-core (0.11.0)
addressable (~> 2.5, >= 2.5.1)
googleauth (>= 0.16.2, < 2.a)
httpclient (>= 2.8.1, < 3.a)
mini_mime (~> 1.0)
representable (~> 3.0)
retriable (>= 2.0, < 4.a)
rexml
webrick
google-apis-iamcredentials_v1 (0.17.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-playcustomapp_v1 (0.13.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-storage_v1 (0.19.0)
google-apis-core (>= 0.9.0, < 2.a)
google-cloud-core (1.6.0)
google-cloud-env (~> 1.0)
google-cloud-errors (~> 1.0)
google-cloud-env (1.6.0)
faraday (>= 0.17.3, < 3.0)
google-cloud-errors (1.3.1)
google-cloud-storage (1.44.0)
addressable (~> 2.8)
digest-crc (~> 0.4)
google-apis-iamcredentials_v1 (~> 0.1)
google-apis-storage_v1 (~> 0.19.0)
google-cloud-core (~> 1.6)
googleauth (>= 0.16.2, < 2.a)
mini_mime (~> 1.0)
googleauth (1.5.2)
faraday (>= 0.17.3, < 3.a)
jwt (>= 1.4, < 3.0)
memoist (~> 0.16)
multi_json (~> 1.11)
os (>= 0.9, < 2.0)
signet (>= 0.16, < 2.a)
highline (2.0.3)
http-cookie (1.0.5)
domain_name (~> 0.5)
httpclient (2.8.3)
jmespath (1.6.2)
json (2.6.3)
jwt (2.7.0)
memoist (0.16.2)
mini_magick (4.12.0)
mini_mime (1.1.2)
multi_json (1.15.0)
multipart-post (2.0.0)
nanaimo (0.3.0)
naturally (2.2.1)
optparse (0.1.1)
os (1.1.4)
plist (3.7.0)
public_suffix (5.0.1)
rake (13.0.6)
representable (3.2.0)
declarative (< 0.1.0)
trailblazer-option (>= 0.1.1, < 0.2.0)
uber (< 0.2.0)
retriable (3.1.2)
rexml (3.2.5)
rouge (2.0.7)
ruby2_keywords (0.0.5)
rubyzip (2.3.2)
security (0.1.3)
signet (0.17.0)
addressable (~> 2.8)
faraday (>= 0.17.5, < 3.a)
jwt (>= 1.5, < 3.0)
multi_json (~> 1.10)
simctl (1.6.10)
CFPropertyList
naturally
terminal-notifier (2.0.0)
terminal-table (1.8.0)
unicode-display_width (~> 1.1, >= 1.1.1)
trailblazer-option (0.1.2)
tty-cursor (0.7.1)
tty-screen (0.8.1)
tty-spinner (0.9.3)
tty-cursor (~> 0.7)
uber (0.1.0)
unf (0.1.4)
unf_ext
unf_ext (0.0.8.2)
unicode-display_width (1.8.0)
webrick (1.8.1)
word_wrap (1.0.0)
xcodeproj (1.22.0)
CFPropertyList (>= 2.3.3, < 4.0)
atomos (~> 0.1.3)
claide (>= 1.0.2, < 2.0)
colored2 (~> 3.1)
nanaimo (~> 0.3.0)
rexml (~> 3.2.4)
xcpretty (0.3.0)
rouge (~> 2.0.7)
xcpretty-travis-formatter (1.0.1)
xcpretty (~> 0.2, >= 0.0.7)
PLATFORMS
arm64-darwin-21
DEPENDENCIES
fastlane
BUNDLED WITH
2.4.10

View File

@@ -1,4 +1,4 @@
plugins {
plugins {
id 'com.gladed.androidgitversion' version '0.4.14'
}
@@ -133,6 +133,7 @@ def enableHermes = project.ext.react.get("enableHermes", false);
androidGitVersion {
baseCode 1
format '% tag %%commit_%%branch%'
}
android {
@@ -154,11 +155,8 @@ android {
applicationId 'io.mosip.residentapp'
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
// Update versionName and/or versionCode via git tag <XX.xx.xx>
// More info here:
// https://github.com/gladed/gradle-android-git-version#3-use-a-git-tag-to-specify-your-version-number-see-semantic-versioning
versionName androidGitVersion.name()
versionCode androidGitVersion.code()
versionCode 1
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
@@ -178,9 +176,9 @@ android {
}
signingConfigs {
release {
def keystore = System.getenv("RELEASE_KEYSTORE") ?: "debug.keystore"
def keystoreAlias = System.getenv("RELEASE_KEYSTORE_ALIAS") ?: "androiddebugkey"
def keystorePass = System.getenv("RELEASE_KEYSTORE_PASSWORD") ?: "android"
def keystore = file('release.keystore')
def keystoreAlias = System.getenv("RELEASE_KEYSTORE_ALIAS")
def keystorePass = System.getenv("RELEASE_KEYSTORE_PASSWORD")
storeFile file("$keystore")
storePassword "$keystorePass"
keyAlias "$keystoreAlias"
@@ -189,9 +187,9 @@ android {
v1SigningEnabled false
}
debug {
def keystore = System.getenv("DEBUG_KEYSTORE") ?: "debug.keystore"
def keystoreAlias = System.getenv("DEBUG_KEYSTORE_ALIAS") ?: "androiddebugkey"
def keystorePass = System.getenv("DEBUG_KEYSTORE_PASSWORD") ?: "android"
def keystore = file('debug.keystore')
def keystoreAlias = System.getenv("DEBUG_KEYSTORE_ALIAS")
def keystorePass = System.getenv("DEBUG_KEYSTORE_PASSWORD")
storeFile file("$keystore")
storePassword "$keystorePass"
keyAlias "$keystoreAlias"
@@ -321,4 +319,4 @@ try {
}
} catch(Exception e) {
logger.warn("google-services.json not found, google-services plugin not applied. Push Notifications won't work")
}
}

Binary file not shown.

View File

@@ -2,6 +2,15 @@
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"
android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:maxSdkVersion="28" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="30"/>
<!-- from Android 12, Location permission isn't required as we aren't using it to determine location -->
<application tools:targetApi="28" tools:ignore="GoogleAppIndexingWarning" android:usesCleartextTraffic="true" />
</manifest>

View File

@@ -1,10 +1,15 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="io.mosip.residentapp">
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:maxSdkVersion="28" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="30"/>
<!-- from Android 12, Location permission isn't required as we aren't using it to determine location -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"
android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
@@ -31,7 +36,8 @@
<meta-data android:name="expo.modules.updates.EXPO_UPDATES_LAUNCH_WAIT_MS" android:value="0" />
<meta-data android:name="expo.modules.updates.EXPO_UPDATE_URL" android:value="https://exp.host/@nlpaolo/mosip-resident-app" />
<meta-data android:name="com.google.android.nearby.messages.API_KEY" android:value="${GOOGLE_NEARBY_MESSAGES_API_KEY}" />
<activity android:name=".MainActivity" android:label="@string/app_name" android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode" android:launchMode="singleTask" android:windowSoftInputMode="adjustPan" android:theme="@style/Theme.App.SplashScreen" android:screenOrientation="portrait">
<activity android:name=".MainActivity" android:exported="true" android:label="@string/app_name" android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode" android:launchMode="singleTask" android:windowSoftInputMode="adjustPan" android:theme="@style/Theme.App.SplashScreen" android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
@@ -45,4 +51,4 @@
</activity>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>
</manifest>
</manifest>

View File

@@ -29,9 +29,7 @@ public class MainActivity extends ReactActivity {
Manifest.permission.BLUETOOTH_ADMIN,
Manifest.permission.ACCESS_WIFI_STATE,
Manifest.permission.CHANGE_WIFI_STATE,
Manifest.permission.CHANGE_WIFI_MULTICAST_STATE,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.CHANGE_WIFI_MULTICAST_STATE
};
private static final int REQUEST_CODE_REQUIRED_PERMISSIONS = 1;

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<resources>
<string name="app_name">MOSIP Resident App</string>
<string name="app_name">Inji</string>
<string name="app_name_mosip">MOSIP Resident App - Mosip/Inji</string>
<string name="app_name_newlogic">MOSIP Resident App - Newlogic</string>
<string name="app_name_ph">MOSIP Resident App - PH</string>

View File

@@ -4,8 +4,8 @@ buildscript {
ext {
buildToolsVersion = "29.0.3"
minSdkVersion = 23
compileSdkVersion = 30
targetSdkVersion = 30
compileSdkVersion = 31
targetSdkVersion = 31
}
repositories {
google()

2
android/fastlane/Appfile Normal file
View File

@@ -0,0 +1,2 @@
json_key_file("")
package_name("io.mosip.residentapp")

View File

@@ -0,0 +1,8 @@
default_platform(:android)
desc "Verify Build for Android"
lane :android_build do
gradle(
task: "assembleNewlogicDebug",
)
end

View File

@@ -0,0 +1,37 @@
## fastlane documentation
# Installation
Make sure you have the latest version of the Xcode command line tools installed:
```sh
xcode-select --install
```
For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane)
# Available Actions
### test_android_build
```sh
[bundle exec] fastlane test_android_build
```
Verify Build for Android
### build_android
```sh
[bundle exec] fastlane build_android
```
Build Android and increase version code
---
This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run.
More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools).
The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools).

View File

@@ -0,0 +1,7 @@
cd ..
yes | sudo gem install bundler
yes | sudo fastlane install_plugins
bundle exec fastlane android_build

View File

@@ -1,4 +1,4 @@
rootProject.name = 'MOSIP Resident App'
rootProject.name = 'Inji'
apply from: new File(["node", "--print", "require.resolve('expo/package.json')"].execute(null, rootDir).text.trim(), "../scripts/autolinking.gradle");
useExpoModules()

View File

@@ -1,6 +1,6 @@
export default {
name: 'MOSIP Resident App',
slug: 'mosip-resident-app',
name: 'Inji',
slug: 'inji',
version: '1.0.0',
orientation: 'portrait',
icon: './assets/icon.png',

View File

@@ -2,7 +2,7 @@ import React from 'react';
import { formatDistanceToNow } from 'date-fns';
import { useTranslation } from 'react-i18next';
import * as DateFnsLocale from '../lib/date-fns/locale';
import * as DateFnsLocale from 'date-fns/locale';
import { ActivityLog } from '../machines/activityLog';
import { TextItem } from './ui/TextItem';
@@ -27,6 +27,6 @@ function getActionLabel(activity: ActivityLog, language: string) {
locale: DateFnsLocale[language],
}),
]
.filter((label) => label.trim() !== '')
.filter((label) => label?.trim() !== '')
.join(' · ');
}

View File

@@ -7,7 +7,11 @@ export const DeviceInfoList: React.FC<DeviceInfoProps> = (props) => {
return (
<React.Fragment>
<Text>{props.deviceInfo.deviceName}</Text>
<TextItem
divider
label={props.of === 'receiver' ? t('requestedBy') : t('sentBy')}
text={t(props.deviceInfo.deviceName)}
/>
</React.Fragment>
);
};

View File

@@ -1,4 +1,4 @@
import React, { useState } from 'react';
import React, { useEffect, useState } from 'react';
import { Dimensions, I18nManager } from 'react-native';
import { Icon, ListItem, Overlay, Input } from 'react-native-elements';
import { Text, Column, Row, Button } from './ui';
@@ -9,6 +9,13 @@ export const EditableListItem: React.FC<EditableListItemProps> = (props) => {
const { t } = useTranslation('common');
const [isEditing, setIsEditing] = useState(false);
const [newValue, setNewValue] = useState(props.value);
const [overlayOpened, setOverlayOpened] = useState(true);
useEffect(() => {
if (props.credentialRegistryResponse === 'success') {
closePopup();
}
}, [props.credentialRegistryResponse]);
return (
<ListItem bottomDivider topDivider onPress={() => setIsEditing(true)}>
@@ -25,6 +32,7 @@ export const EditableListItem: React.FC<EditableListItemProps> = (props) => {
{props.label}
</Text>
</ListItem.Title>
<Text color={Theme.Colors.profileValue}>{props.value}</Text>
</ListItem.Content>
<Icon
name="chevron-right"
@@ -46,6 +54,14 @@ export const EditableListItem: React.FC<EditableListItemProps> = (props) => {
textAlign: I18nManager.isRTL ? 'right' : 'left',
}}
/>
{props.credentialRegistryResponse === 'error' && (
<Text style={Theme.Styles.warningText}>
please try again after sometime...
</Text>
)}
{props.credentialRegistryResponse === 'success' &&
overlayOpened &&
closePopup()}
<Row>
<Button fill type="clear" title={t('cancel')} onPress={dismiss} />
<Button fill title={t('save')} onPress={edit} />
@@ -57,12 +73,20 @@ export const EditableListItem: React.FC<EditableListItemProps> = (props) => {
function edit() {
props.onEdit(newValue);
setIsEditing(false);
if (props.credentialRegistryResponse === undefined) {
setIsEditing(false);
}
}
function dismiss() {
setNewValue(props.value);
setIsEditing(false);
props.credentialRegistryResponse = '';
}
function closePopup() {
setIsEditing(false);
setOverlayOpened(false);
}
};
@@ -73,4 +97,5 @@ interface EditableListItemProps {
IconType?: string;
onEdit: (newValue: string) => void;
display?: 'none' | 'flex';
credentialRegistryResponse: string;
}

View File

@@ -65,6 +65,31 @@ export const MessageOverlay: React.FC<MessageOverlayProps> = (props) => {
);
};
export const ErrorMessageOverlay: React.FC<ErrorMessageOverlayProps> = ({
isVisible,
error,
onDismiss,
translationPath,
}) => {
const { t } = useTranslation(translationPath);
return (
<MessageOverlay
isVisible={isVisible}
title={t(error + '.title')}
message={t(error + '.message')}
onBackdropPress={onDismiss}
/>
);
};
export interface ErrorMessageOverlayProps {
isVisible: boolean;
error?: string;
onDismiss?: () => void;
translationPath: string;
}
const Progress: React.FC<Pick<MessageOverlayProps, 'progress'>> = (props) => {
return typeof props.progress === 'boolean' ? (
props.progress && (

View File

@@ -1,6 +1,6 @@
import { formatDistanceToNow } from 'date-fns';
import React from 'react';
import * as DateFnsLocale from '../lib/date-fns/locale';
import * as DateFnsLocale from 'date-fns/locale';
import { useTranslation } from 'react-i18next';
import { Image, ImageBackground, View } from 'react-native';
import { Icon } from 'react-native-elements';
@@ -11,6 +11,7 @@ import { TextItem } from './ui/TextItem';
import { VcItemTags } from './VcItemTags';
import VerifiedIcon from './VerifiedIcon';
import { getLocalizedField } from '../i18n';
import { CREDENTIAL_REGISTRY_EDIT } from 'react-native-dotenv';
import { QrCodeOverlay } from './QrCodeOverlay';
export const VcDetails: React.FC<VcDetailsProps> = (props) => {

View File

@@ -1,7 +1,6 @@
import React, { useContext, useRef, useState } from 'react';
import { useInterpret, useSelector } from '@xstate/react';
import { Pressable, Image, ImageBackground, Dimensions } from 'react-native';
import { CheckBox, Icon } from 'react-native-elements';
import { Pressable } from 'react-native';
import { ActorRefFrom } from 'xstate';
import {
createVcItemMachine,
@@ -11,106 +10,18 @@ import {
selectContext,
selectTag,
selectEmptyWalletBindingId,
selectKebabPopUp,
selectStoreError,
selectIsSavingFailedInIdle,
VcItemEvents,
} from '../machines/vcItem';
import { Column, Row, Text } from './ui';
import { ErrorMessageOverlay } from '../components/MessageOverlay';
import { Theme } from './ui/styleUtils';
import { GlobalContext } from '../shared/GlobalContext';
import { useTranslation } from 'react-i18next';
import { VcItemTags } from './VcItemTags';
import { KebabPopUp } from './KebabPopUp';
import VerifiedIcon from './VerifiedIcon';
import { getLocalizedField } from '../i18n';
const getDetails = (arg1, arg2, verifiableCredential) => {
if (arg1 === 'Status') {
return (
<Column>
<Text
weight="bold"
size="smaller"
color={
!verifiableCredential
? Theme.Colors.LoadingDetailsLabel
: Theme.Colors.DetailsLabel
}>
{arg1}
</Text>
<Row>
<Text
numLines={1}
color={Theme.Colors.Details}
weight="bold"
size="smaller"
style={
!verifiableCredential
? Theme.Styles.loadingTitle
: Theme.Styles.subtitle
}>
{!verifiableCredential ? '' : arg2}
</Text>
{!verifiableCredential ? null : <VerifiedIcon />}
</Row>
</Column>
);
} else {
return (
<Column>
<Text
color={
!verifiableCredential
? Theme.Colors.LoadingDetailsLabel
: Theme.Colors.DetailsLabel
}
size="smaller"
weight={'bold'}
style={Theme.Styles.vcItemLabelHeader}>
{arg1}
</Text>
<Text
numLines={4}
color={Theme.Colors.Details}
weight="bold"
size="smaller"
style={
!verifiableCredential
? Theme.Styles.loadingTitle
: Theme.Styles.subtitle
}>
{!verifiableCredential ? '' : arg2}
</Text>
</Column>
);
}
};
const WalletVerified: React.FC = () => {
return (
<Icon
name="verified-user"
color={Theme.Colors.VerifiedIcon}
size={28}
containerStyle={{ marginStart: 4, bottom: 1 }}
/>
);
};
const WalletUnverified: React.FC = () => {
return (
<Icon
name="shield-alert"
color={Theme.Colors.Icon}
size={28}
type="material-community"
containerStyle={{ marginStart: 4, bottom: 1 }}
/>
);
};
import { VcItemContent } from './VcItemContent';
import { VcItemActivationStatus } from './VcItemActivationStatus';
export const VcItem: React.FC<VcItemProps> = (props) => {
const { appService } = useContext(GlobalContext);
const { t } = useTranslation('VcDetails');
const machine = useRef(
createVcItemMachine(
appService.getSnapshot().context.serviceRefs,
@@ -122,165 +33,62 @@ export const VcItem: React.FC<VcItemProps> = (props) => {
const context = useSelector(service, selectContext);
const verifiableCredential = useSelector(service, selectVerifiableCredential);
const emptyWalletBindingId = useSelector(service, selectEmptyWalletBindingId);
const isKebabPopUp = useSelector(service, selectKebabPopUp);
const KEBAB_POPUP = () => service.send(VcItemEvents.KEBAB_POPUP());
const storeError = useSelector(service, selectStoreError);
const isSavingFailedInIdle = useSelector(service, selectIsSavingFailedInIdle);
const DISMISS = () => service.send(VcItemEvents.DISMISS());
//Assigning the UIN and VID from the VC details to display the idtype label
const uin = verifiableCredential?.credentialSubject.UIN;
const vid = verifiableCredential?.credentialSubject.VID;
let storeErrorTranslationPath = 'errors.savingFailed';
//ENOSPC - no space left on a device / drive
const isDiskFullError = storeError?.message?.match('ENOSPC') != null;
if (isDiskFullError) {
storeErrorTranslationPath = 'errors.diskFullError';
}
const generatedOn = useSelector(service, selectGeneratedOn);
const fullName = !verifiableCredential
? ''
: getLocalizedField(verifiableCredential.credentialSubject.fullName);
const isvalid = !verifiableCredential ? '' : t('valid');
const selectableOrCheck = props.selectable ? (
<CheckBox
checked={props.selected}
checkedIcon={<Icon name="radio-button-checked" />}
uncheckedIcon={<Icon name="radio-button-unchecked" />}
onPress={() => props.onPress(service)}
/>
) : null;
const tag = useSelector(service, selectTag);
return (
<Pressable
onPress={() => props.onPress(service)}
disabled={!verifiableCredential}
style={
props.selected
? Theme.Styles.selectedVc
: Theme.Styles.closeCardBgContainer
}>
<ImageBackground
source={!verifiableCredential ? null : Theme.CloseCard}
resizeMode="stretch"
borderRadius={4}
<React.Fragment>
<Pressable
onPress={() => props.onPress(service)}
disabled={!verifiableCredential}
style={
!verifiableCredential
? Theme.Styles.vertloadingContainer
: Theme.Styles.backgroundImageContainer
props.selected
? Theme.Styles.selectedBindedVc
: Theme.Styles.closeCardBgContainer
}>
<Column>
<Row align="space-between">
<Row>
<ImageBackground
source={
!verifiableCredential
? Theme.ProfileIcon
: { uri: context.credential.biometrics.face }
}
style={Theme.Styles.closeCardImage}>
{props.iconName && (
<Icon
name={props.iconName}
type={props.iconType}
color={Theme.Colors.Icon}
style={{ marginLeft: -80 }}
/>
)}
</ImageBackground>
<Column margin="0 0 0 10">
{getDetails(t('fullName'), fullName, verifiableCredential)}
<VcItemContent
context={context}
verifiableCredential={verifiableCredential}
generatedOn={generatedOn}
tag={tag}
selectable={props.selectable}
selected={props.selected}
iconName={props.iconName && props.iconName}
iconType={props.iconType && props.iconType}
onPress={() => props.onPress(service)}
service={service}
/>
<Column margin="10 0 0 0">
<Text
color={
!verifiableCredential
? Theme.Colors.LoadingDetailsLabel
: Theme.Colors.DetailsLabel
}
weight="semibold"
size="smaller"
align="left">
{t('idType')}
</Text>
<Text
weight="regular"
color={Theme.Colors.Details}
size="smaller"
style={
!verifiableCredential
? Theme.Styles.loadingTitle
: Theme.Styles.subtitle
}>
{t('nationalCard')}
</Text>
</Column>
</Column>
</Row>
<Column>{verifiableCredential ? selectableOrCheck : null}</Column>
</Row>
<Row
align="space-between"
margin="5 0 0 0"
style={
!verifiableCredential ? Theme.Styles.loadingContainer : null
}>
<Column>
{uin ? getDetails(t('uin'), uin, verifiableCredential) : null}
{vid ? getDetails(t('vid'), vid, verifiableCredential) : null}
{!verifiableCredential
? getDetails(t('id'), uin || vid, verifiableCredential)
: null}
{getDetails(t('generatedOn'), generatedOn, verifiableCredential)}
</Column>
<Column>
{verifiableCredential
? getDetails(t('status'), isvalid, verifiableCredential)
: null}
</Column>
<Column style={{ display: verifiableCredential ? 'flex' : 'none' }}>
<Image
source={Theme.MosipLogo}
style={Theme.Styles.logo}
resizeMethod="auto"
/>
</Column>
</Row>
</Column>
<VcItemTags tag={tag} />
</ImageBackground>
<Row
width={Dimensions.get('screen').width * 0.8}
align="space-between"
crossAlign="center">
<Row crossAlign="center" style={{ flex: 1 }}>
{verifiableCredential &&
(emptyWalletBindingId ? <WalletUnverified /> : <WalletVerified />)}
<Text
color={Theme.Colors.Details}
weight="semibold"
size="small"
margin="10 33 10 10"
style={
!verifiableCredential
? Theme.Styles.loadingTitle
: Theme.Styles.subtitle
}
children={
emptyWalletBindingId
? t('offlineAuthDisabledHeader')
: t('profileAuthenticated')
}></Text>
</Row>
{verifiableCredential && (
<Pressable onPress={KEBAB_POPUP}>
<KebabPopUp
{props.activeTab !== 'receivedVcsTab' &&
props.activeTab != 'sharingVcScreen' && (
<VcItemActivationStatus
verifiableCredential={verifiableCredential}
emptyWalletBindingId={emptyWalletBindingId}
onPress={() => props.onPress(service)}
showOnlyBindedVc={props.showOnlyBindedVc}
vcKey={props.vcKey}
iconName="dots-three-horizontal"
iconType="entypo"
isVisible={isKebabPopUp}
onDismiss={DISMISS}
service={service}
/>
</Pressable>
)}
</Row>
</Pressable>
)}
</Pressable>
<ErrorMessageOverlay
isVisible={isSavingFailedInIdle}
error={storeErrorTranslationPath}
onDismiss={DISMISS}
translationPath={'VcDetails'}
/>
</React.Fragment>
);
};
@@ -292,6 +100,7 @@ interface VcItemProps {
showOnlyBindedVc?: boolean;
onPress?: (vcRef?: ActorRefFrom<typeof vcItemMachine>) => void;
onShow?: (vcRef?: ActorRefFrom<typeof vcItemMachine>) => void;
activeTab?: string;
iconName?: string;
iconType?: string;
}

View File

@@ -0,0 +1,186 @@
import React from 'react';
import { useTranslation } from 'react-i18next';
import { Dimensions, Pressable } from 'react-native';
import { Icon } from 'react-native-elements';
import { ActorRefFrom } from 'xstate';
import {
VcItemEvents,
selectKebabPopUp,
vcItemMachine,
} from '../machines/vcItem';
import { VerifiableCredential } from '../types/vc';
import { Row, Text } from './ui';
import { Theme } from './ui/styleUtils';
import { KebabPopUp } from './KebabPopUp';
import { useSelector } from '@xstate/react';
const WalletUnverifiedIcon: React.FC = () => {
return (
<Icon
name="shield-alert"
color={Theme.Colors.Icon}
size={28}
type="material-community"
containerStyle={{ marginStart: 4, bottom: 1 }}
/>
);
};
const WalletVerifiedIcon: React.FC = () => {
return (
<Icon
name="verified-user"
color={Theme.Colors.VerifiedIcon}
size={28}
containerStyle={{ marginStart: 4, bottom: 1 }}
/>
);
};
const WalletUnverifiedActivationDetails: React.FC<
WalletUnVerifiedDetailsProps
> = (props) => {
const { t } = useTranslation('VcDetails');
return (
<Row
width={Dimensions.get('screen').width * 0.8}
align="space-between"
crossAlign="center">
<Row
crossAlign="center"
style={{
flex: 1,
}}>
{props.verifiableCredential && <WalletUnverifiedIcon />}
<Text
color={Theme.Colors.Details}
weight="semibold"
size="small"
margin="10 33 10 10"
style={
!props.verifiableCredential
? Theme.Styles.loadingTitle
: Theme.Styles.statusLabel
}
children={t('offlineAuthDisabledHeader')}></Text>
</Row>
{props.verifiableCredential && (
<Pressable onPress={() => props.onPress()}>
<KebabPopUp
vcKey={props.vcKey}
iconName="dots-three-horizontal"
iconType="entypo"
isVisible={props.showPopUp}
onDismiss={() => props.onDismiss()}
service={props.service}
/>
</Pressable>
)}
</Row>
);
};
const WalletVerifiedActivationDetails: React.FC<WalletVerifiedDetailsProps> = (
props
) => {
const { t } = useTranslation('VcDetails');
return (
<Row
width={Dimensions.get('screen').width * 0.8}
align="space-between"
crossAlign="center">
<Row
crossAlign="center"
style={{
flex: 1,
}}>
<WalletVerifiedIcon />
<Text
color={Theme.Colors.statusLabel}
weight="semibold"
size="smaller"
margin="10 10 10 10"
style={
!props.verifiableCredential
? Theme.Styles.loadingTitle
: Theme.Styles.subtitle
}
children={t('profileAuthenticated')}></Text>
</Row>
{props.verifiableCredential && (
<Pressable onPress={() => props.onPress()}>
<KebabPopUp
vcKey={props.vcKey}
iconName="dots-three-horizontal"
iconType="entypo"
isVisible={props.showPopUp}
onDismiss={() => props.onDismiss()}
service={props.service}
/>
</Pressable>
)}
</Row>
);
};
export const VcItemActivationStatus: React.FC<VcItemActivationStatusProps> = (
props
) => {
const isKebabPopUp = useSelector(props.service, selectKebabPopUp);
const KEBAB_POPUP = () => props.service.send(VcItemEvents.KEBAB_POPUP());
const DISMISS = () => props.service.send(VcItemEvents.DISMISS());
return (
<Row>
{props.emptyWalletBindingId ? (
<WalletUnverifiedActivationDetails
verifiableCredential={props.verifiableCredential}
onPress={KEBAB_POPUP}
onDismiss={DISMISS}
showPopUp={isKebabPopUp}
service={props.service}
vcKey={props.vcKey}
/>
) : (
<WalletVerifiedActivationDetails
verifiableCredential={props.verifiableCredential}
showOnlyBindedVc={props.showOnlyBindedVc}
onPress={KEBAB_POPUP}
onDismiss={DISMISS}
showPopUp={isKebabPopUp}
service={props.service}
vcKey={props.vcKey}
/>
)}
</Row>
);
};
interface VcItemActivationStatusProps {
showOnlyBindedVc: boolean;
onPress: () => void;
verifiableCredential: VerifiableCredential;
emptyWalletBindingId: boolean;
service: any;
vcKey: string;
}
interface WalletVerifiedDetailsProps {
showOnlyBindedVc: boolean;
onPress: () => void;
onDismiss: () => void;
verifiableCredential: VerifiableCredential;
showPopUp: boolean;
service: any;
vcKey: string;
}
interface WalletUnVerifiedDetailsProps {
onPress: () => void;
onDismiss: () => void;
verifiableCredential: VerifiableCredential;
showPopUp: boolean;
service: any;
vcKey: string;
}

View File

@@ -0,0 +1,208 @@
import React from 'react';
import { useTranslation } from 'react-i18next';
import { Image, ImageBackground } from 'react-native';
import { getLocalizedField } from '../i18n';
import { VerifiableCredential } from '../types/vc';
import { RotatingIcon } from './RotatingIcon';
import { VcItemTags } from './VcItemTags';
import VerifiedIcon from './VerifiedIcon';
import { Column, Row, Text } from './ui';
import { Theme } from './ui/styleUtils';
import { CheckBox, Icon } from 'react-native-elements';
import { ActorRefFrom } from 'xstate';
import { vcItemMachine } from '../machines/vcItem';
const getDetails = (arg1, arg2, verifiableCredential) => {
if (arg1 === 'Status') {
return (
<Column>
<Text
weight="bold"
size="smaller"
color={
!verifiableCredential
? Theme.Colors.LoadingDetailsLabel
: Theme.Colors.DetailsLabel
}>
{arg1}
</Text>
<Row>
<Text
numLines={1}
color={Theme.Colors.Details}
weight="bold"
size="smaller"
style={
!verifiableCredential
? Theme.Styles.loadingTitle
: Theme.Styles.subtitle
}>
{!verifiableCredential ? '' : arg2}
</Text>
{!verifiableCredential ? null : <VerifiedIcon />}
</Row>
</Column>
);
} else {
return (
<Column>
<Text
color={
!verifiableCredential
? Theme.Colors.LoadingDetailsLabel
: Theme.Colors.DetailsLabel
}
size="smaller"
weight={'bold'}
style={Theme.Styles.vcItemLabelHeader}>
{arg1}
</Text>
<Text
numLines={4}
color={Theme.Colors.Details}
weight="bold"
size="smaller"
style={
!verifiableCredential
? Theme.Styles.loadingTitle
: Theme.Styles.subtitle
}>
{!verifiableCredential ? '' : arg2}
</Text>
</Column>
);
}
};
export const VcItemContent: React.FC<VcItemContentProps> = (props) => {
//Assigning the UIN and VID from the VC details to display the idtype label
const uin = props.verifiableCredential?.credentialSubject.UIN;
const vid = props.verifiableCredential?.credentialSubject.VID;
const fullName = !props.verifiableCredential
? ''
: getLocalizedField(props.verifiableCredential.credentialSubject.fullName);
const { t } = useTranslation('VcDetails');
const isvalid = !props.verifiableCredential ? '' : t('valid');
const selectableOrCheck = props.selectable ? (
<CheckBox
checked={props.selected}
checkedIcon={<Icon name="radio-button-checked" />}
uncheckedIcon={<Icon name="radio-button-unchecked" />}
onPress={() => props.onPress()}
/>
) : null;
return (
<ImageBackground
source={!props.verifiableCredential ? null : Theme.CloseCard}
resizeMode="stretch"
borderRadius={4}
style={
!props.verifiableCredential
? Theme.Styles.vertloadingContainer
: Theme.Styles.backgroundImageContainer
}>
<Column>
<Row align="space-between">
<Row>
<ImageBackground
source={
!props.verifiableCredential
? Theme.ProfileIcon
: { uri: props.context.credential.biometrics.face }
}
style={Theme.Styles.closeCardImage}>
{props.iconName && (
<Icon
name={props.iconName}
type={props.iconType}
color={Theme.Colors.Icon}
style={{ marginLeft: -80 }}
/>
)}
</ImageBackground>
<Column margin="0 0 0 10">
{getDetails(t('fullName'), fullName, props.verifiableCredential)}
<Column margin="10 0 0 0">
<Text
color={
!props.verifiableCredential
? Theme.Colors.LoadingDetailsLabel
: Theme.Colors.DetailsLabel
}
weight="semibold"
size="smaller"
align="left">
{t('idType')}
</Text>
<Text
weight="regular"
color={Theme.Colors.Details}
size="smaller"
style={
!props.verifiableCredential
? Theme.Styles.loadingTitle
: Theme.Styles.subtitle
}>
{t('nationalCard')}
</Text>
</Column>
</Column>
</Row>
<Column>
{props.verifiableCredential ? selectableOrCheck : null}
</Column>
</Row>
<Row
align="space-between"
margin="5 0 0 0"
style={
!props.verifiableCredential ? Theme.Styles.loadingContainer : null
}>
<Column>
{uin ? getDetails(t('uin'), uin, props.verifiableCredential) : null}
{vid ? getDetails(t('vid'), vid, props.verifiableCredential) : null}
{!props.verifiableCredential
? getDetails(t('id'), uin || vid, props.verifiableCredential)
: null}
{getDetails(
t('generatedOn'),
props.generatedOn,
props.verifiableCredential
)}
</Column>
<Column>
{props.verifiableCredential
? getDetails(t('status'), isvalid, props.verifiableCredential)
: null}
</Column>
<Column
style={{ display: props.verifiableCredential ? 'flex' : 'none' }}>
<Image
source={Theme.MosipLogo}
style={Theme.Styles.logo}
resizeMethod="auto"
/>
</Column>
</Row>
</Column>
<VcItemTags tag={props.tag} />
</ImageBackground>
);
};
interface VcItemContentProps {
context: any;
verifiableCredential: VerifiableCredential;
generatedOn: string;
tag: string;
selectable: boolean;
selected: boolean;
iconName?: string;
iconType?: string;
service: any;
onPress?: () => void;
}

View File

@@ -25,7 +25,6 @@ const Colors = {
dorColor: '#CBCBCB',
plainText: '#FFD6A7',
walletbindingLabel: '#000000',
walletbindingContent: '#666666',
LightOrange: '#FDF1E6',
GradientColors: ['#F59B4B', '#E86E04'],
DisabledColors: ['#C7C7C7', '#C7C7C7'],
@@ -98,6 +97,8 @@ export const DefaultTheme = {
walletbindingLabel: Colors.Black,
walletbindingContent: Colors.Gray40,
resendCodeTimer: Colors.resendCodeTimer,
statusLabel: Colors.Black,
Cursor: Colors.Orange,
},
Styles: StyleSheet.create({
title: {
@@ -192,6 +193,12 @@ export const DefaultTheme = {
shadowRadius: 3,
elevation: 4,
},
selectedBindedVc: {
borderRadius: 15,
margin: 5,
borderWidth: 3,
borderColor: Colors.Green,
},
selectedVc: {
borderRadius: 10,
margin: 5,
@@ -288,6 +295,13 @@ export const DefaultTheme = {
flex: 1,
padding: 10,
},
profileIconBg: {
padding: 8,
width: 40,
height: 40,
borderRadius: 6,
backgroundColor: Colors.LightOrange,
},
IconContainer: {
padding: 6,
width: 36,
@@ -410,6 +424,10 @@ export const DefaultTheme = {
paddingLeft: 130,
elevation: 2,
},
warningText: {
color: Colors.Red,
fontSize: 18,
},
}),
PinInputStyle: StyleSheet.create({
input: {

View File

@@ -19,6 +19,12 @@ const Colors = {
Transparent: 'transparent',
Warning: '#f0ad4e',
GrayText: '#6F6F6F',
LightOrange: '#FDF1E6',
ShadeOfGrey: '#6F6F6F',
Gray44: '#707070',
Zambezi: '#5F5F5F',
resendCodeTimer: '#555555',
Gray40: '#666666',
};
export type ElevationLevel = 0 | 1 | 2 | 3 | 4 | 5;
@@ -69,6 +75,12 @@ export const PurpleTheme = {
WarningIcon: Colors.Warning,
GrayText: Colors.GrayText,
gradientBtn: ['#F59B4B', '#E86E04'],
Cursor: Colors.Purple,
getVidColor: Colors.Zambezi,
resendCodeTimer: Colors.resendCodeTimer,
RetrieveIdLabel: Colors.ShadeOfGrey,
walletbindingContent: Colors.Gray40,
ProfileIconBg: Colors.Purple2,
},
Styles: StyleSheet.create({
title: {
@@ -90,6 +102,15 @@ export const PurpleTheme = {
statusLabel: {
color: Colors.Black,
},
IconContainer: {
padding: 6,
width: 36,
marginRight: 4,
marginLeft: 10,
height: 36,
borderRadius: 10,
backgroundColor: Colors.LightOrange,
},
verifiedIconContainer: {
marginLeft: 5,
},
@@ -111,6 +132,31 @@ export const PurpleTheme = {
backgroundColor: Colors.Grey6,
borderRadius: 4,
},
bottomTabIconStyle: {
padding: 4,
width: 36,
height: 36,
borderRadius: 6,
backgroundColor: Colors.LightOrange,
},
popUp: {
alignItems: 'center',
justifyContent: 'space-between',
backgroundColor: Colors.Green,
height: 39,
position: 'relative',
paddingHorizontal: 12,
},
homeScreenContainer: {
alignItems: 'center',
justifyContent: 'center',
borderRadius: 10,
backgroundColor: '#fff',
shadowColor: '#000',
shadowOpacity: 0.4,
elevation: 5,
padding: 10,
},
vertloadingContainer: {
flex: 1,
backgroundColor: Colors.Grey6,
@@ -205,6 +251,13 @@ export const PurpleTheme = {
flex: 1,
padding: 10,
},
profileIconBg: {
padding: 8,
width: 40,
height: 40,
borderRadius: 6,
backgroundColor: Colors.LightOrange,
},
closeCardImage: {
width: 105,
height: 135,
@@ -224,6 +277,13 @@ export const PurpleTheme = {
width: 300,
overflow: 'hidden',
},
settingsIconBg: {
padding: 6,
width: 36,
marginRight: 4,
height: 36,
backgroundColor: Colors.Transparent,
},
scanner: {
height: 400,
width: '100%',
@@ -261,10 +321,9 @@ export const PurpleTheme = {
borderBottomWidth: 1,
marginTop: 10,
},
hrLine: {
borderBottomColor: 'black',
borderBottomWidth: 1,
marginTop: 10,
warningText: {
color: Colors.Red,
fontSize: 18,
},
}),
PinInputStyle: StyleSheet.create({
@@ -283,28 +342,61 @@ export const PurpleTheme = {
},
}),
TextStyles: StyleSheet.create({
base: {
header: {
color: Colors.Black,
fontFamily: 'Inter_700Bold',
fontSize: 18,
lineHeight: 22,
paddingTop: 4,
},
retrieveIdLabel: {
color: Colors.ShadeOfGrey,
fontFamily: 'Inter_600SemiBold',
lineHeight: 18,
},
helpDetailes: {
margin: 5,
color: Colors.Gray44,
fontFamily: 'Inter_600SemiBold',
},
aboutDetailes: {
color: Colors.Black,
fontSize: 18,
lineHeight: 28,
margin: 7,
lineHeight: 18,
},
error: {
color: Colors.Red,
fontFamily: 'Inter_600SemiBold',
fontSize: 12,
},
base: {
color: Colors.Black,
fontSize: 16,
lineHeight: 18,
},
regular: {
fontFamily: 'Inter_400Regular',
fontSize: 14,
},
semibold: {
fontFamily: 'Inter_600SemiBold',
fontSize: 15,
},
bold: {
fontFamily: 'Inter_700Bold',
},
small: {
fontSize: 14,
fontSize: 13,
lineHeight: 21,
},
smaller: {
fontSize: 12,
fontSize: 11,
lineHeight: 18,
},
large: {
fontSize: 18,
},
}),
VcItemStyles: StyleSheet.create({
title: {
@@ -378,9 +470,6 @@ export const PurpleTheme = {
gradient: {
borderRadius: 10,
},
gradient: {
borderRadius: 10,
},
}),
OIDCAuthStyles: StyleSheet.create({
viewContainer: {
@@ -467,6 +556,21 @@ export const PurpleTheme = {
height: Dimensions.get('screen').height,
},
}),
KebabPopUpStyles: StyleSheet.create({
kebabPopUp: {
marginHorizontal: 4,
},
kebabHeaderStyle: {
backgroundColor: Colors.White,
borderTopLeftRadius: 24,
borderTopRightRadius: 24,
justifyContent: 'space-between',
fontFamily: 'Inter_700Bold',
paddingRight: 15,
paddingLeft: 130,
paddingTop: 18,
},
}),
MessageOverlayStyles: StyleSheet.create({
overlay: {
elevation: 5,
@@ -668,6 +772,7 @@ export const PurpleTheme = {
WarningLogo: require('../../../assets/warningLogo.png'),
OtpLogo: require('../../../purpleAssets/otp-mobile-logo.png'),
SuccessLogo: require('../../../assets/success-logo.png'),
DigitalIdentityLogo: require('../../../assets/digital-identity-icon.png'),
elevation(level: ElevationLevel): ViewStyle {
// https://ethercreative.github.io/react-native-shadow-generator/

3
ios/Gemfile Normal file
View File

@@ -0,0 +1,3 @@
source "https://rubygems.org"
gem "fastlane"

218
ios/Gemfile.lock Normal file
View File

@@ -0,0 +1,218 @@
GEM
remote: https://rubygems.org/
specs:
CFPropertyList (3.0.6)
rexml
addressable (2.8.4)
public_suffix (>= 2.0.2, < 6.0)
artifactory (3.0.15)
atomos (0.1.3)
aws-eventstream (1.2.0)
aws-partitions (1.765.0)
aws-sdk-core (3.172.0)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.651.0)
aws-sigv4 (~> 1.5)
jmespath (~> 1, >= 1.6.1)
aws-sdk-kms (1.64.0)
aws-sdk-core (~> 3, >= 3.165.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.122.0)
aws-sdk-core (~> 3, >= 3.165.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.4)
aws-sigv4 (1.5.2)
aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4)
claide (1.1.0)
colored (1.2)
colored2 (3.1.2)
commander (4.6.0)
highline (~> 2.0.0)
declarative (0.0.20)
digest-crc (0.6.4)
rake (>= 12.0.0, < 14.0.0)
domain_name (0.5.20190701)
unf (>= 0.0.5, < 1.0.0)
dotenv (2.8.1)
emoji_regex (3.2.3)
excon (0.99.0)
faraday (1.10.3)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
faraday-excon (~> 1.1)
faraday-httpclient (~> 1.0)
faraday-multipart (~> 1.0)
faraday-net_http (~> 1.0)
faraday-net_http_persistent (~> 1.0)
faraday-patron (~> 1.0)
faraday-rack (~> 1.0)
faraday-retry (~> 1.0)
ruby2_keywords (>= 0.0.4)
faraday-cookie_jar (0.0.7)
faraday (>= 0.8.0)
http-cookie (~> 1.0.0)
faraday-em_http (1.0.0)
faraday-em_synchrony (1.0.0)
faraday-excon (1.1.0)
faraday-httpclient (1.0.1)
faraday-multipart (1.0.4)
multipart-post (~> 2)
faraday-net_http (1.0.1)
faraday-net_http_persistent (1.2.0)
faraday-patron (1.0.0)
faraday-rack (1.0.0)
faraday-retry (1.0.3)
faraday_middleware (1.2.0)
faraday (~> 1.0)
fastimage (2.2.6)
fastlane (2.212.2)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0)
aws-sdk-s3 (~> 1.0)
babosa (>= 1.0.3, < 2.0.0)
bundler (>= 1.12.0, < 3.0.0)
colored
commander (~> 4.6)
dotenv (>= 2.1.1, < 3.0.0)
emoji_regex (>= 0.1, < 4.0)
excon (>= 0.71.0, < 1.0.0)
faraday (~> 1.0)
faraday-cookie_jar (~> 0.0.6)
faraday_middleware (~> 1.0)
fastimage (>= 2.1.0, < 3.0.0)
gh_inspector (>= 1.1.2, < 2.0.0)
google-apis-androidpublisher_v3 (~> 0.3)
google-apis-playcustomapp_v1 (~> 0.1)
google-cloud-storage (~> 1.31)
highline (~> 2.0)
json (< 3.0.0)
jwt (>= 2.1.0, < 3)
mini_magick (>= 4.9.4, < 5.0.0)
multipart-post (~> 2.0.0)
naturally (~> 2.2)
optparse (~> 0.1.1)
plist (>= 3.1.0, < 4.0.0)
rubyzip (>= 2.0.0, < 3.0.0)
security (= 0.1.3)
simctl (~> 1.6.3)
terminal-notifier (>= 2.0.0, < 3.0.0)
terminal-table (>= 1.4.5, < 2.0.0)
tty-screen (>= 0.6.3, < 1.0.0)
tty-spinner (>= 0.8.0, < 1.0.0)
word_wrap (~> 1.0.0)
xcodeproj (>= 1.13.0, < 2.0.0)
xcpretty (~> 0.3.0)
xcpretty-travis-formatter (>= 0.0.3)
gh_inspector (1.1.3)
google-apis-androidpublisher_v3 (0.42.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-core (0.11.0)
addressable (~> 2.5, >= 2.5.1)
googleauth (>= 0.16.2, < 2.a)
httpclient (>= 2.8.1, < 3.a)
mini_mime (~> 1.0)
representable (~> 3.0)
retriable (>= 2.0, < 4.a)
rexml
webrick
google-apis-iamcredentials_v1 (0.17.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-playcustomapp_v1 (0.13.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-storage_v1 (0.19.0)
google-apis-core (>= 0.9.0, < 2.a)
google-cloud-core (1.6.0)
google-cloud-env (~> 1.0)
google-cloud-errors (~> 1.0)
google-cloud-env (1.6.0)
faraday (>= 0.17.3, < 3.0)
google-cloud-errors (1.3.1)
google-cloud-storage (1.44.0)
addressable (~> 2.8)
digest-crc (~> 0.4)
google-apis-iamcredentials_v1 (~> 0.1)
google-apis-storage_v1 (~> 0.19.0)
google-cloud-core (~> 1.6)
googleauth (>= 0.16.2, < 2.a)
mini_mime (~> 1.0)
googleauth (1.5.2)
faraday (>= 0.17.3, < 3.a)
jwt (>= 1.4, < 3.0)
memoist (~> 0.16)
multi_json (~> 1.11)
os (>= 0.9, < 2.0)
signet (>= 0.16, < 2.a)
highline (2.0.3)
http-cookie (1.0.5)
domain_name (~> 0.5)
httpclient (2.8.3)
jmespath (1.6.2)
json (2.6.3)
jwt (2.7.0)
memoist (0.16.2)
mini_magick (4.12.0)
mini_mime (1.1.2)
multi_json (1.15.0)
multipart-post (2.0.0)
nanaimo (0.3.0)
naturally (2.2.1)
optparse (0.1.1)
os (1.1.4)
plist (3.7.0)
public_suffix (5.0.1)
rake (13.0.6)
representable (3.2.0)
declarative (< 0.1.0)
trailblazer-option (>= 0.1.1, < 0.2.0)
uber (< 0.2.0)
retriable (3.1.2)
rexml (3.2.5)
rouge (2.0.7)
ruby2_keywords (0.0.5)
rubyzip (2.3.2)
security (0.1.3)
signet (0.17.0)
addressable (~> 2.8)
faraday (>= 0.17.5, < 3.a)
jwt (>= 1.5, < 3.0)
multi_json (~> 1.10)
simctl (1.6.10)
CFPropertyList
naturally
terminal-notifier (2.0.0)
terminal-table (1.8.0)
unicode-display_width (~> 1.1, >= 1.1.1)
trailblazer-option (0.1.2)
tty-cursor (0.7.1)
tty-screen (0.8.1)
tty-spinner (0.9.3)
tty-cursor (~> 0.7)
uber (0.1.0)
unf (0.1.4)
unf_ext
unf_ext (0.0.8.2)
unicode-display_width (1.8.0)
webrick (1.8.1)
word_wrap (1.0.0)
xcodeproj (1.22.0)
CFPropertyList (>= 2.3.3, < 4.0)
atomos (~> 0.1.3)
claide (>= 1.0.2, < 2.0)
colored2 (~> 3.1)
nanaimo (~> 0.3.0)
rexml (~> 3.2.4)
xcpretty (0.3.0)
rouge (~> 2.0.7)
xcpretty-travis-formatter (1.0.1)
xcpretty (~> 0.2, >= 0.0.7)
PLATFORMS
arm64-darwin-22
DEPENDENCIES
fastlane
BUNDLED WITH
2.4.12

View File

@@ -12,28 +12,28 @@
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; };
510157BBABB44471B56F17BD /* noop-file.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AB20D6FD6E0431BB5A6B1BF /* noop-file.swift */; };
6EC198FEB3D4CE20C451C9C8 /* libPods-MOSIPResidentApp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F7F3091673D4A20E778B48BF /* libPods-MOSIPResidentApp.a */; };
6EC198FEB3D4CE20C451C9C8 /* libPods-Inji.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F7F3091673D4A20E778B48BF /* libPods-Inji.a */; };
B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; };
BB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = "<group>"; };
13B07F961A680F5B00A75B9A /* MOSIPResidentApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MOSIPResidentApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = MOSIPResidentApp/AppDelegate.h; sourceTree = "<group>"; };
13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = MOSIPResidentApp/AppDelegate.m; sourceTree = "<group>"; };
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = MOSIPResidentApp/Images.xcassets; sourceTree = "<group>"; };
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = MOSIPResidentApp/Info.plist; sourceTree = "<group>"; };
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = MOSIPResidentApp/main.m; sourceTree = "<group>"; };
3AB20D6FD6E0431BB5A6B1BF /* noop-file.swift */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.swift; name = "noop-file.swift"; path = "MOSIPResidentApp/noop-file.swift"; sourceTree = "<group>"; };
AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = MOSIPResidentApp/SplashScreen.storyboard; sourceTree = "<group>"; };
13B07F961A680F5B00A75B9A /* Inji.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Inji.app; sourceTree = BUILT_PRODUCTS_DIR; };
13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = Inji/AppDelegate.h; sourceTree = "<group>"; };
13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = Inji/AppDelegate.m; sourceTree = "<group>"; };
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Inji/Images.xcassets; sourceTree = "<group>"; };
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Inji/Info.plist; sourceTree = "<group>"; };
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Inji/main.m; sourceTree = "<group>"; };
3AB20D6FD6E0431BB5A6B1BF /* noop-file.swift */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.swift; name = "noop-file.swift"; path = "Inji/noop-file.swift"; sourceTree = "<group>"; };
AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = Inji/SplashScreen.storyboard; sourceTree = "<group>"; };
BB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = "<group>"; };
EBEDDC56BF724D17A326B9EC /* MOSIPResidentApp-Bridging-Header.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "MOSIPResidentApp-Bridging-Header.h"; path = "MOSIPResidentApp/MOSIPResidentApp-Bridging-Header.h"; sourceTree = "<group>"; };
EBEDDC56BF724D17A326B9EC /* Inji-Bridging-Header.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "Inji-Bridging-Header.h"; path = "Inji/Inji-Bridging-Header.h"; sourceTree = "<group>"; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
F4401A7A527915991104FE89 /* Pods-MOSIPResidentApp.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MOSIPResidentApp.release.xcconfig"; path = "Target Support Files/Pods-MOSIPResidentApp/Pods-MOSIPResidentApp.release.xcconfig"; sourceTree = "<group>"; };
F7F3091673D4A20E778B48BF /* libPods-MOSIPResidentApp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MOSIPResidentApp.a"; sourceTree = BUILT_PRODUCTS_DIR; };
F842436D5AA4BFDC9B080787 /* Pods-MOSIPResidentApp.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MOSIPResidentApp.debug.xcconfig"; path = "Target Support Files/Pods-MOSIPResidentApp/Pods-MOSIPResidentApp.debug.xcconfig"; sourceTree = "<group>"; };
FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-MOSIPResidentApp/ExpoModulesProvider.swift"; sourceTree = "<group>"; };
F4401A7A527915991104FE89 /* Pods-Inji.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Inji.release.xcconfig"; path = "Target Support Files/Pods-Inji/Pods-Inji.release.xcconfig"; sourceTree = "<group>"; };
F7F3091673D4A20E778B48BF /* libPods-Inji.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Inji.a"; sourceTree = BUILT_PRODUCTS_DIR; };
F842436D5AA4BFDC9B080787 /* Pods-Inji.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Inji.debug.xcconfig"; path = "Target Support Files/Pods-Inji/Pods-Inji.debug.xcconfig"; sourceTree = "<group>"; };
FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-Inji/ExpoModulesProvider.swift"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -41,14 +41,14 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
6EC198FEB3D4CE20C451C9C8 /* libPods-MOSIPResidentApp.a in Frameworks */,
6EC198FEB3D4CE20C451C9C8 /* libPods-Inji.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
13B07FAE1A68108700A75B9A /* MOSIPResidentApp */ = {
13B07FAE1A68108700A75B9A /* Inji */ = {
isa = PBXGroup;
children = (
BB2F792B24A3F905000567C9 /* Supporting */,
@@ -60,16 +60,16 @@
13B07FB71A68108700A75B9A /* main.m */,
AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */,
3AB20D6FD6E0431BB5A6B1BF /* noop-file.swift */,
EBEDDC56BF724D17A326B9EC /* MOSIPResidentApp-Bridging-Header.h */,
EBEDDC56BF724D17A326B9EC /* Inji-Bridging-Header.h */,
);
name = MOSIPResidentApp;
name = Inji;
sourceTree = "<group>";
};
2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
isa = PBXGroup;
children = (
ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
F7F3091673D4A20E778B48BF /* libPods-MOSIPResidentApp.a */,
F7F3091673D4A20E778B48BF /* libPods-Inji.a */,
);
name = Frameworks;
sourceTree = "<group>";
@@ -84,7 +84,7 @@
83CBB9F61A601CBA00E9B192 = {
isa = PBXGroup;
children = (
13B07FAE1A68108700A75B9A /* MOSIPResidentApp */,
13B07FAE1A68108700A75B9A /* Inji */,
832341AE1AAA6A7D00B99B32 /* Libraries */,
83CBBA001A601CBA00E9B192 /* Products */,
2D16E6871FA4F8E400B85C8A /* Frameworks */,
@@ -99,17 +99,17 @@
83CBBA001A601CBA00E9B192 /* Products */ = {
isa = PBXGroup;
children = (
13B07F961A680F5B00A75B9A /* MOSIPResidentApp.app */,
13B07F961A680F5B00A75B9A /* Inji.app */,
);
name = Products;
sourceTree = "<group>";
};
92DBD88DE9BF7D494EA9DA96 /* MOSIPResidentApp */ = {
92DBD88DE9BF7D494EA9DA96 /* Inji */ = {
isa = PBXGroup;
children = (
FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */,
);
name = MOSIPResidentApp;
name = Inji;
sourceTree = "<group>";
};
BB2F792B24A3F905000567C9 /* Supporting */ = {
@@ -118,14 +118,14 @@
BB2F792C24A3F905000567C9 /* Expo.plist */,
);
name = Supporting;
path = MOSIPResidentApp/Supporting;
path = Inji/Supporting;
sourceTree = "<group>";
};
D65327D7A22EEC0BE12398D9 /* Pods */ = {
isa = PBXGroup;
children = (
F842436D5AA4BFDC9B080787 /* Pods-MOSIPResidentApp.debug.xcconfig */,
F4401A7A527915991104FE89 /* Pods-MOSIPResidentApp.release.xcconfig */,
F842436D5AA4BFDC9B080787 /* Pods-Inji.debug.xcconfig */,
F4401A7A527915991104FE89 /* Pods-Inji.release.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
@@ -133,7 +133,7 @@
D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = {
isa = PBXGroup;
children = (
92DBD88DE9BF7D494EA9DA96 /* MOSIPResidentApp */,
92DBD88DE9BF7D494EA9DA96 /* Inji */,
);
name = ExpoModulesProviders;
sourceTree = "<group>";
@@ -141,9 +141,9 @@
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
13B07F861A680F5B00A75B9A /* MOSIPResidentApp */ = {
13B07F861A680F5B00A75B9A /* Inji */ = {
isa = PBXNativeTarget;
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "MOSIPResidentApp" */;
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Inji" */;
buildPhases = (
5C9927E01935CFEBE538B2C3 /* [CP] Check Pods Manifest.lock */,
FD10A7F022414F080027D42C /* Start Packager */,
@@ -157,9 +157,9 @@
);
dependencies = (
);
name = MOSIPResidentApp;
productName = MOSIPResidentApp;
productReference = 13B07F961A680F5B00A75B9A /* MOSIPResidentApp.app */;
name = Inji;
productName = Inji;
productReference = 13B07F961A680F5B00A75B9A /* Inji.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
@@ -171,11 +171,13 @@
LastUpgradeCheck = 1340;
TargetAttributes = {
13B07F861A680F5B00A75B9A = {
DevelopmentTeam = F7JDUR6578;
LastSwiftMigration = 1250;
ProvisioningStyle = Automatic;
};
};
};
buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "MOSIPResidentApp" */;
buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Inji" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = en;
hasScannedForEncodings = 0;
@@ -188,7 +190,7 @@
projectDirPath = "";
projectRoot = "";
targets = (
13B07F861A680F5B00A75B9A /* MOSIPResidentApp */,
13B07F861A680F5B00A75B9A /* Inji */,
);
};
/* End PBXProject section */
@@ -236,7 +238,7 @@
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-MOSIPResidentApp-checkManifestLockResult.txt",
"$(DERIVED_FILE_DIR)/Pods-Inji-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
@@ -255,7 +257,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-MOSIPResidentApp/Pods-MOSIPResidentApp-resources.sh\"\n";
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Inji/Pods-Inji-resources.sh\"\n";
showEnvVarsInLog = 0;
};
FD10A7F022414F080027D42C /* Start Packager */ = {
@@ -296,30 +298,34 @@
/* Begin XCBuildConfiguration section */
13B07F941A680F5B00A75B9A /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = F842436D5AA4BFDC9B080787 /* Pods-MOSIPResidentApp.debug.xcconfig */;
baseConfigurationReference = F842436D5AA4BFDC9B080787 /* Pods-Inji.debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = MOSIPResidentApp/MOSIPResidentApp.entitlements;
CODE_SIGN_ENTITLEMENTS = Inji/Inji.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 8;
DEVELOPMENT_TEAM = "";
DEVELOPMENT_TEAM = F7JDUR6578;
ENABLE_BITCODE = NO;
GCC_PREPROCESSOR_DEFINITIONS = (
"$(inherited)",
"FB_SONARKIT_ENABLED=1",
);
INFOPLIST_FILE = MOSIPResidentApp/Info.plist;
INFOPLIST_FILE = Inji/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = Inji;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MARKETING_VERSION = 0.4.1;
MARKETING_VERSION = 0.9.1;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
"-lc++",
);
PRODUCT_BUNDLE_IDENTIFIER = com.newlogic.inji;
PRODUCT_NAME = MOSIPResidentApp;
SWIFT_OBJC_BRIDGING_HEADER = "MOSIPResidentApp/MOSIPResidentApp-Bridging-Header.h";
PRODUCT_BUNDLE_IDENTIFIER = io.mosip.inji.mobileid;
PRODUCT_NAME = Inji;
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "Inji/Inji-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
@@ -329,25 +335,32 @@
};
13B07F951A680F5B00A75B9A /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = F4401A7A527915991104FE89 /* Pods-MOSIPResidentApp.release.xcconfig */;
baseConfigurationReference = F4401A7A527915991104FE89 /* Pods-Inji.release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = MOSIPResidentApp/MOSIPResidentApp.entitlements;
CODE_SIGN_ENTITLEMENTS = Inji/Inji.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 8;
DEVELOPMENT_TEAM = "";
INFOPLIST_FILE = MOSIPResidentApp/Info.plist;
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = LD7H4CQ5P9;
INFOPLIST_FILE = Inji/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = Inji;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
MARKETING_VERSION = 0.4.1;
MARKETING_VERSION = 0.9.1;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
"-lc++",
);
PRODUCT_BUNDLE_IDENTIFIER = com.newlogic.inji;
PRODUCT_NAME = MOSIPResidentApp;
SWIFT_OBJC_BRIDGING_HEADER = "MOSIPResidentApp/MOSIPResidentApp-Bridging-Header.h";
PRODUCT_BUNDLE_IDENTIFIER = io.mosip.inji.mobileid;
PRODUCT_NAME = Inji;
PROVISIONING_PROFILE_SPECIFIER = "";
"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match AppStore io.mosip.inji.mobileid";
SWIFT_OBJC_BRIDGING_HEADER = "Inji/Inji-Bridging-Header.h";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
@@ -383,7 +396,7 @@
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_ENTITLEMENTS = MOSIPResidentApp/MOSIPResidentApp.entitlements;
CODE_SIGN_ENTITLEMENTS = Inji/Inji.entitlements;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
@@ -442,7 +455,7 @@
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_ENTITLEMENTS = MOSIPResidentApp/MOSIPResidentApp.entitlements;
CODE_SIGN_ENTITLEMENTS = Inji/Inji.entitlements;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = YES;
ENABLE_NS_ASSERTIONS = NO;
@@ -469,7 +482,7 @@
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "MOSIPResidentApp" */ = {
13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Inji" */ = {
isa = XCConfigurationList;
buildConfigurations = (
13B07F941A680F5B00A75B9A /* Debug */,
@@ -478,7 +491,7 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "MOSIPResidentApp" */ = {
83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Inji" */ = {
isa = XCConfigurationList;
buildConfigurations = (
83CBBA201A601CBA00E9B192 /* Debug */,

View File

@@ -15,9 +15,9 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "MOSIPResidentApp.app"
BlueprintName = "MOSIPResidentApp"
ReferencedContainer = "container:MOSIPResidentApp.xcodeproj">
BuildableName = "Inji.app"
BlueprintName = "Inji"
ReferencedContainer = "container:Inji.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
@@ -33,9 +33,9 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "00E356ED1AD99517003FC87E"
BuildableName = "MOSIPResidentAppTests.xctest"
BlueprintName = "MOSIPResidentAppTests"
ReferencedContainer = "container:MOSIPResidentApp.xcodeproj">
BuildableName = "InjiTests.xctest"
BlueprintName = "InjiTests"
ReferencedContainer = "container:Inji.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
@@ -55,9 +55,9 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "MOSIPResidentApp.app"
BlueprintName = "MOSIPResidentApp"
ReferencedContainer = "container:MOSIPResidentApp.xcodeproj">
BuildableName = "Inji.app"
BlueprintName = "Inji"
ReferencedContainer = "container:Inji.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<EnvironmentVariables>
@@ -79,9 +79,9 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
BuildableName = "MOSIPResidentApp.app"
BlueprintName = "MOSIPResidentApp"
ReferencedContainer = "container:MOSIPResidentApp.xcodeproj">
BuildableName = "Inji.app"
BlueprintName = "Inji"
ReferencedContainer = "container:Inji.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>

View File

@@ -2,7 +2,7 @@
<Workspace
version = "1.0">
<FileRef
location = "group:MOSIPResidentApp.xcodeproj">
location = "group:Inji.xcodeproj">
</FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">

View File

Before

Width:  |  Height:  |  Size: 218 KiB

After

Width:  |  Height:  |  Size: 218 KiB

View File

Before

Width:  |  Height:  |  Size: 196 KiB

After

Width:  |  Height:  |  Size: 196 KiB

View File

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

View File

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

Before

Width:  |  Height:  |  Size: 9.0 KiB

After

Width:  |  Height:  |  Size: 9.0 KiB

View File

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View File

Before

Width:  |  Height:  |  Size: 68 B

After

Width:  |  Height:  |  Size: 68 B

View File

@@ -5,7 +5,7 @@
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleDisplayName</key>
<string>MOSIP Resident App</string>
<string>Inji</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
@@ -30,7 +30,9 @@
</dict>
</array>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<string>5</string>
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSAppTransportSecurity</key>
@@ -46,6 +48,10 @@
</dict>
</dict>
</dict>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Allow $(PRODUCT_NAME) to access your location</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Allow $(PRODUCT_NAME) to access your location</string>
<key>NSBluetoothAlwaysUsageDescription</key>
<string>Bluetooth is used to allow sharing VCs with another device</string>
<key>NSBluetoothPeripheralUsageDescription</key>

View File

@@ -9,7 +9,7 @@ platform :ios, '13.0'
require 'json'
podfile_properties = JSON.parse(File.read('./Podfile.properties.json')) rescue {}
target 'MOSIPResidentApp' do
target 'Inji' do
use_expo_modules!
post_integrate do |installer|
begin

View File

@@ -280,10 +280,6 @@ PODS:
- React-Core
- react-native-netinfo (7.1.3):
- React-Core
- react-native-openid4vp-ble (0.3.11):
- CrcSwift (~> 0.0.3)
- GzipSwift
- React-Core
- react-native-restart (0.0.24):
- React-Core
- react-native-rsa-native (2.0.5):
@@ -292,6 +288,10 @@ PODS:
- React-Core
- react-native-secure-key-store (2.0.10):
- React-Core
- react-native-tuvali (0.4.1):
- CrcSwift (~> 0.0.3)
- GzipSwift
- React-Core
- React-perflogger (0.64.4)
- React-RCTActionSheet (0.64.4):
- React-Core/RCTActionSheetHeaders (= 0.64.4)
@@ -433,11 +433,11 @@ DEPENDENCIES:
- React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
- react-native-mmkv-storage (from `../node_modules/react-native-mmkv-storage`)
- "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)"
- react-native-openid4vp-ble (from `../node_modules/react-native-openid4vp-ble`)
- react-native-restart (from `../node_modules/react-native-restart`)
- react-native-rsa-native (from `../node_modules/react-native-rsa-native`)
- react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
- react-native-secure-key-store (from `../node_modules/react-native-secure-key-store`)
- react-native-tuvali (from `../node_modules/react-native-tuvali`)
- React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`)
- React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
- React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`)
@@ -561,8 +561,6 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native-mmkv-storage"
react-native-netinfo:
:path: "../node_modules/@react-native-community/netinfo"
react-native-openid4vp-ble:
:path: "../node_modules/react-native-openid4vp-ble"
react-native-restart:
:path: "../node_modules/react-native-restart"
react-native-rsa-native:
@@ -571,6 +569,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native-safe-area-context"
react-native-secure-key-store:
:path: "../node_modules/react-native-secure-key-store"
react-native-tuvali:
:path: "../node_modules/react-native-tuvali"
React-perflogger:
:path: "../node_modules/react-native/ReactCommon/reactperflogger"
React-RCTActionSheet:
@@ -674,11 +674,11 @@ SPEC CHECKSUMS:
React-jsinspector: d4f6973dd474357dbaaf6f52f31ffc713bf3e766
react-native-mmkv-storage: 8ba3c0216a6df283ece11205b442a3e435aec4e5
react-native-netinfo: 42c0965fca99069b92e3f7360ab2d425985e5104
react-native-openid4vp-ble: 98e3371b181b695a44f446f55d7c25c63fe0aa5f
react-native-restart: 45c8dca02491980f2958595333cbccd6877cb57e
react-native-rsa-native: 12132eb627797529fdb1f0d22fd0f8f9678df64a
react-native-safe-area-context: 584dc04881deb49474363f3be89e4ca0e854c057
react-native-secure-key-store: 910e6df6bc33cb790aba6ee24bc7818df1fe5898
react-native-tuvali: b30d1a0249ee02245e2be574c104956b132e592a
React-perflogger: 5a890ca0911669421b7611661e9b58f91c805f5c
React-RCTActionSheet: bd180e0879f8424a73650c5c28fbef4f3b5b27fb
React-RCTAnimation: 1004d2b4be1f2cedfdc4cb2326adc95b989e6c6b
@@ -706,6 +706,6 @@ SPEC CHECKSUMS:
Yoga: d1fc3575b8b68891ff5ef3c276daa855e841eb32
ZXingObjC: fdbb269f25dd2032da343e06f10224d62f537bdb
PODFILE CHECKSUM: 5b97bf5aba623284ca8545706889f881c9b64811
PODFILE CHECKSUM: c9f0fe8dbf7e1bc17ab0a1e74d2edd0a76cd4b7f
COCOAPODS: 1.11.3

5
ios/fastlane/Appfile Normal file
View File

@@ -0,0 +1,5 @@
app_identifier(ENV["INJI_IOS_DEVELOPER_APP_IDENTIFIER"]) # The bundle identifier of your app
apple_id(ENV["IOS_FASTLANE_APPLE_ID"]) # Your Apple Developer Portal username
itc_team_id(ENV["APP_STORE_CONNECT_TEAM_ID"]) # App Store Connect Team ID
team_id(ENV["INJI_IOS_DEVELOPER_PORTAL_TEAM_ID"]) # Developer Portal Team ID

160
ios/fastlane/Fastfile Normal file
View File

@@ -0,0 +1,160 @@
xcode_select '/Applications/Xcode_14.2.app'
default_platform(:ios)
APP_STORE_CONNECT_TEAM_ID = ENV["APP_STORE_CONNECT_TEAM_ID"]
APPLE_ISSUER_ID = ENV["APPLE_ISSUER_ID"]
APPLE_KEY_CONTENT = ENV["APPLE_KEY_CONTENT"]
APPLE_KEY_ID = ENV["APPLE_KEY_ID"]
DEVELOPER_APP_IDENTIFIER = ENV["INJI_IOS_DEVELOPER_APP_IDENTIFIER"]
TEAM_ID = ENV["INJI_IOS_DEVELOPER_PORTAL_TEAM_ID"]
FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD = ENV["INJI_IOS_FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD"]
FASTLANE_USER= ENV["IOS_FASTLANE_APPLE_ID"]
PROVISIONING_PROFILE_SPECIFIER = ENV["INJI_IOS_PROVISIONING_PROFILE_SPECIFIER"]
TEMP_KEYCHAIN_USER = ENV["INJI_IOS_TEMP_KEYCHAIN_USER"]
TEMP_KEYCHAIN_PASSWORD = ENV["INJI_IOS_TEMP_KEYCHAIN_PASSWORD"]
GIT_AUTHORIZATION = ENV["GIT_AUTHORIZATION"]
SLACK_URL = ENV["SLACK_URL"]
MATCH_PASSWORD = ENV["MATCH_PASSWORD"]
FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT = "120"
TESTFLIGHT_INTERNAL_TESTERS_GROUP = ENV["TESTFLIGHT_INTERNAL_TESTERS_GROUP"]
TESTFLIGHT_BETA_APP_DESCRIPTION = ENV["TESTFLIGHT_BETA_APP_DESCRIPTION"]
DEVELOPER_APP_ID = ENV["DEVELOPER_APP_ID"]
def delete_temp_keychain(name)
delete_keychain(
name: name
) if File.exist? File.expand_path("~/Library/Keychains/#{name}-db")
end
def create_temp_keychain(name, password)
create_keychain(
name: name,
password: password,
unlock: false,
timeout: 3600
)
end
def ensure_temp_keychain(name, password)
delete_temp_keychain(name)
create_temp_keychain(name, password)
end
platform :ios do
lane :beta do
keychain_name = TEMP_KEYCHAIN_USER
keychain_password = TEMP_KEYCHAIN_PASSWORD
ensure_temp_keychain(keychain_name, keychain_password)
api_key = app_store_connect_api_key(
key_id: "#{APPLE_KEY_ID}",
issuer_id: "#{APPLE_ISSUER_ID}",
key_content: "#{APPLE_KEY_CONTENT}",
duration: 1200,
in_house: false,
is_key_content_base64: true
)
version = get_version_number(xcodeproj: "Inji.xcodeproj")
previous_build_number = latest_testflight_build_number(
app_identifier: "#{DEVELOPER_APP_IDENTIFIER}",
api_key: api_key,
version: version
)
current_build_number = previous_build_number + 1
increment_build_number(
xcodeproj: "Inji.xcodeproj",
build_number: current_build_number
)
match(
type: 'appstore',
app_identifier: "#{DEVELOPER_APP_IDENTIFIER}",
git_basic_authorization: Base64.strict_encode64("#{GIT_AUTHORIZATION}"),
readonly: false,
keychain_name: keychain_name,
keychain_password: keychain_password,
api_key: api_key
)
profile_mapping = Actions.lane_context[SharedValues::MATCH_PROVISIONING_PROFILE_MAPPING]
gym(
configuration: "Release",
workspace: "Inji.xcworkspace",
scheme: "Inji",
export_method: "app-store",
export_options: {
provisioningProfiles: {
"#{DEVELOPER_APP_ID}" => "#{PROVISIONING_PROFILE_SPECIFIER}"
}
}
)
pilot(
app_identifier: "#{DEVELOPER_APP_IDENTIFIER}",
api_key: api_key,
ipa: "./Inji.ipa",
changelog: "#{TESTFLIGHT_BETA_APP_DESCRIPTION}",
localized_build_info: {
"default": {
whats_new: "#{TESTFLIGHT_BETA_APP_DESCRIPTION}",
}
},
skip_waiting_for_build_processing: false,
distribute_external: true,
submit_beta_review: false,
groups: ["#{TESTFLIGHT_INTERNAL_TESTERS_GROUP}"],
)
delete_temp_keychain(keychain_name)
slack(
message: "Inji - #{version} (#{current_build_number}) is uploaded to testflight.",
success: true,
slack_url: "#{SLACK_URL}",
default_payloads: [:git_branch, :last_git_commit]
)
end
lane :build_verify do
keychain_name = TEMP_KEYCHAIN_USER
keychain_password = TEMP_KEYCHAIN_PASSWORD
ensure_temp_keychain(keychain_name, keychain_password)
api_key = app_store_connect_api_key(
key_id: "#{APPLE_KEY_ID}",
issuer_id: "#{APPLE_ISSUER_ID}",
key_content: "#{APPLE_KEY_CONTENT}",
duration: 1200,
in_house: false,
is_key_content_base64: true
)
match(
type: 'appstore',
app_identifier: "#{DEVELOPER_APP_IDENTIFIER}",
git_basic_authorization: Base64.strict_encode64("#{GIT_AUTHORIZATION}"),
readonly: false,
keychain_name: keychain_name,
keychain_password: keychain_password,
api_key: api_key
)
gym(
configuration: "Release",
workspace: "MOSIPResidentApp.xcworkspace",
scheme: "MOSIPResidentApp",
export_method: "app-store",
)
delete_temp_keychain(keychain_name)
end
end

5
ios/fastlane/Matchfile Normal file
View File

@@ -0,0 +1,5 @@
git_url("https://github.com/mosip/inji-ios-priv")
storage_mode("git")
type("appstore") # The default type, can be: appstore, adhoc, enterprise or development

View File

@@ -1,23 +0,0 @@
import type { FormatLongFn, FormatLongWidth } from '../../types';
export interface BuildFormatLongFnArgs<
DefaultMatchWidth extends FormatLongWidth
> {
formats: Partial<{ [format in FormatLongWidth]: string }> & {
[format in DefaultMatchWidth]: string;
};
defaultWidth: DefaultMatchWidth;
}
export default function buildFormatLongFn<
DefaultMatchWidth extends FormatLongWidth
>(args: BuildFormatLongFnArgs<DefaultMatchWidth>): FormatLongFn {
return (options = {}) => {
// TODO: Remove String()
const width = options.width
? (String(options.width) as FormatLongWidth)
: args.defaultWidth;
const format = args.formats[width] || args.formats[args.defaultWidth];
return format;
};
}

View File

@@ -1,120 +0,0 @@
import type { Era, Quarter, Month, Day } from '../../../types';
import type {
LocaleDayPeriod,
LocalePatternWidth,
LocaleUnit,
LocalizeFn,
LocalizeUnitIndex,
} from '../../types';
type LocalizeEraValues = readonly [string, string];
type LocalizeQuarterValues = readonly [string, string, string, string];
type LocalizeDayValues = readonly [
string,
string,
string,
string,
string,
string,
string
];
type LocalizeMonthValues = readonly [
string,
string,
string,
string,
string,
string,
string,
string,
string,
string,
string,
string
];
export type LocalizeUnitValuesIndex<Values extends LocalizeUnitValues<any>> =
Values extends Record<LocaleDayPeriod, string>
? string
: Values extends LocalizeEraValues
? Era
: Values extends LocalizeQuarterValues
? Quarter
: Values extends LocalizeDayValues
? Day
: Values extends LocalizeMonthValues
? Month
: never;
export type LocalizeUnitValues<Unit extends LocaleUnit> =
Unit extends LocaleDayPeriod
? Record<LocaleDayPeriod, string>
: Unit extends Era
? LocalizeEraValues
: Unit extends Quarter
? LocalizeQuarterValues
: Unit extends Day
? LocalizeDayValues
: Unit extends Month
? LocalizeMonthValues
: never;
export type LocalizePeriodValuesMap<Unit extends LocaleUnit> = {
[pattern in LocalePatternWidth]?: LocalizeUnitValues<Unit>;
};
export type BuildLocalizeFnArgCallback<Result extends LocaleUnit | number> = (
value: Result
) => LocalizeUnitIndex<Result>;
export type BuildLocalizeFnArgs<
Result extends LocaleUnit,
ArgCallback extends BuildLocalizeFnArgCallback<Result> | undefined
> = {
values: LocalizePeriodValuesMap<Result>;
defaultWidth: LocalePatternWidth;
formattingValues?: LocalizePeriodValuesMap<Result>;
defaultFormattingWidth?: LocalePatternWidth;
} & (ArgCallback extends undefined
? { argumentCallback?: undefined }
: { argumentCallback: BuildLocalizeFnArgCallback<Result> });
export default function buildLocalizeFn<
Result extends LocaleUnit,
ArgCallback extends BuildLocalizeFnArgCallback<Result> | undefined
>(
args: BuildLocalizeFnArgs<Result, ArgCallback>
): LocalizeFn<Result, ArgCallback> {
return (dirtyIndex, dirtyOptions) => {
const options = dirtyOptions || {};
const context = options.context ? String(options.context) : 'standalone';
let valuesArray: LocalizeUnitValues<Result>;
if (context === 'formatting' && args.formattingValues) {
const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;
const width = (
options.width ? String(options.width) : defaultWidth
) as LocalePatternWidth;
valuesArray = (args.formattingValues[width] ||
args.formattingValues[defaultWidth]) as LocalizeUnitValues<Result>;
} else {
const defaultWidth = args.defaultWidth;
const width = (
options.width ? String(options.width) : args.defaultWidth
) as LocalePatternWidth;
valuesArray = (args.values[width] ||
args.values[defaultWidth]) as LocalizeUnitValues<Result>;
}
const index = (
args.argumentCallback
? args.argumentCallback(dirtyIndex as Result)
: (dirtyIndex as LocalizeUnitIndex<Result> as unknown)
) as LocalizeUnitValuesIndex<typeof valuesArray>;
// @ts-ignore: For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!
return valuesArray[index];
};
}

View File

@@ -1,72 +0,0 @@
import type {
BuildMatchFnArgs,
LocaleDayPeriod,
LocaleUnit,
LocalePatternWidth,
MatchFn,
} from '../../types';
export default function buildMatchFn<
Result extends LocaleUnit,
DefaultMatchWidth extends LocalePatternWidth,
DefaultParseWidth extends LocalePatternWidth
>(
args: BuildMatchFnArgs<Result, DefaultMatchWidth, DefaultParseWidth>
): MatchFn<Result> {
return (string, options = {}) => {
const width = options.width;
const matchPattern =
(width && args.matchPatterns[width]) ||
args.matchPatterns[args.defaultMatchWidth];
const matchResult = string.match(matchPattern);
if (!matchResult) {
return null;
}
const matchedString = matchResult[0];
const parsePatterns =
(width && args.parsePatterns[width]) ||
args.parsePatterns[args.defaultParseWidth];
const key = (
Array.isArray(parsePatterns)
? findIndex(parsePatterns, (pattern) => pattern.test(matchedString))
: findKey(parsePatterns, (pattern: any) => pattern.test(matchedString))
) as Result extends LocaleDayPeriod ? string : number;
let value: Result;
value = (args.valueCallback ? args.valueCallback(key) : key) as Result;
value = options.valueCallback ? options.valueCallback(value) : value;
const rest = string.slice(matchedString.length);
return { value, rest };
};
}
function findKey<Value, Obj extends { [key in string | number]: Value }>(
object: Obj,
predicate: (value: Value) => boolean
): keyof Obj | undefined {
for (const key in object) {
if (object.hasOwnProperty(key) && predicate(object[key])) {
return key;
}
}
return undefined;
}
function findIndex<Item>(
array: Item[],
predicate: (item: Item) => boolean
): number | undefined {
for (let key = 0; key < array.length; key++) {
if (predicate(array[key])) {
return key;
}
}
return undefined;
}

View File

@@ -1,28 +0,0 @@
import type { MatchFn, MatchValueCallback } from '../../types';
export interface BuildMatchPatternFnArgs<Result> {
matchPattern: RegExp;
parsePattern: RegExp;
valueCallback?: MatchValueCallback<string, Result>;
}
export default function buildMatchPatternFn<Result>(
args: BuildMatchPatternFnArgs<Result>
): MatchFn<Result> {
return (string, options = {}) => {
const matchResult = string.match(args.matchPattern);
if (!matchResult) return null;
const matchedString = matchResult[0];
const parseResult = string.match(args.parsePattern);
if (!parseResult) return null;
let value = (
args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0]
) as Result;
value = options.valueCallback ? options.valueCallback(value) : value;
const rest = string.slice(matchedString.length);
return { value, rest };
};
}

View File

@@ -1,112 +0,0 @@
import type { FormatDistanceFn, FormatDistanceLocale } from '../../../types';
type FormatDistanceTokenValue =
| string
| {
one: string;
other: string;
};
const formatDistanceLocale: FormatDistanceLocale<FormatDistanceTokenValue> = {
lessThanXSeconds: {
one: 'wala pang isang segundo',
other: 'wala pang {{count}} na segundo',
},
xSeconds: {
one: 'isang segundo',
other: '{{count}} segundo',
},
halfAMinute: 'kalahating minuto',
lessThanXMinutes: {
one: 'wala pang isang minuto',
other: 'wala pang {{count}} na minuto',
},
xMinutes: {
one: 'isang minuto',
other: '{{count}} minuto',
},
aboutXHours: {
one: 'mga isang oras',
other: 'mga {{count}} na oras',
},
xHours: {
one: 'isang oras',
other: '{{count}} na oras',
},
xDays: {
one: 'isang araw',
other: '{{count}} na araw',
},
aboutXWeeks: {
one: 'mga isang linggo',
other: 'mga {{count}} na linggo',
},
xWeeks: {
one: 'isang linggo',
other: '{{count}} na linggo',
},
aboutXMonths: {
one: 'mga isang buwan',
other: 'mga {{count}} na buwan',
},
xMonths: {
one: 'isang buwan',
other: '{{count}} na buwan',
},
aboutXYears: {
one: 'mga isang taon',
other: 'mga {{count}} na taon',
},
xYears: {
one: 'isang taon',
other: '{{count}} na taon',
},
overXYears: {
one: 'mahigit isang taon',
other: 'mahigit {{count}} na taon',
},
almostXYears: {
one: 'halos isang taon',
other: 'halos {{count}} na taon',
},
};
const formatDistance: FormatDistanceFn = (token, count, options) => {
let result;
const tokenValue = formatDistanceLocale[token];
if (typeof tokenValue === 'string') {
result = tokenValue;
} else if (count === 1) {
result = tokenValue.one;
} else {
result = tokenValue.other.replace('{{count}}', count.toString());
}
if (options?.addSuffix) {
if (options.comparison && options.comparison > 0) {
return 'sa ' + result;
} else {
return result + ' nakaraan';
}
}
return result;
};
export default formatDistance;

View File

@@ -1,42 +0,0 @@
import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index';
import type { FormatLong } from '../../../types';
const dateFormats = {
full: 'EEEE, MMMM do, y',
long: 'MMMM do, y',
medium: 'MMM d, y',
short: 'MM/dd/yyyy',
};
const timeFormats = {
full: 'h:mm:ss a zzzz',
long: 'h:mm:ss a z',
medium: 'h:mm:ss a',
short: 'h:mm a',
};
const dateTimeFormats = {
full: "{{date}} 'at' {{time}}",
long: "{{date}} 'at' {{time}}",
medium: '{{date}}, {{time}}',
short: '{{date}}, {{time}}',
};
const formatLong: FormatLong = {
date: buildFormatLongFn({
formats: dateFormats,
defaultWidth: 'full',
}),
time: buildFormatLongFn({
formats: timeFormats,
defaultWidth: 'full',
}),
dateTime: buildFormatLongFn({
formats: dateTimeFormats,
defaultWidth: 'full',
}),
};
export default formatLong;

View File

@@ -1,15 +0,0 @@
import type { FormatRelativeFn } from '../../../types';
const formatRelativeLocale = {
lastWeek: "'last' eeee 'at' p",
yesterday: "'yesterday at' p",
today: "'today at' p",
tomorrow: "'tomorrow at' p",
nextWeek: "eeee 'at' p",
other: 'P',
};
const formatRelative: FormatRelativeFn = (token, _date, _baseDate, _options) =>
formatRelativeLocale[token];
export default formatRelative;

View File

@@ -1,199 +0,0 @@
import type { Quarter } from '../../../../types';
import type { Localize, LocalizeFn } from '../../../types';
import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index';
const eraValues = {
narrow: ['B', 'A'] as const,
abbreviated: ['BC', 'AD'] as const,
wide: ['Before Christ', 'Anno Domini'] as const,
};
const quarterValues = {
narrow: ['1', '2', '3', '4'] as const,
abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'] as const,
wide: [
'Unang sangkapat',
'Ikalawang sangkapat',
'Ikatlong sangkapat',
'Ikaapat sangkapat',
] as const,
};
// Note: in English, the names of days of the week and months are capitalized.
// If you are making a new locale based on this one, check if the same is true for the language you're working on.
// Generally, formatted dates should look like they are in the middle of a sentence,
// e.g. in Spanish language the weekdays and months should be in the lowercase.
const monthValues = {
narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'] as const,
abbreviated: [
'Enero',
'Peb',
'Marso',
'Abr',
'Mayo',
'Hun',
'Hul',
'Agosto',
'Set',
'Okt',
'Nob',
'Dis',
] as const,
wide: [
'Enero',
'Pebrero',
'Marso',
'Abril',
'Mayo',
'Hunyo',
'Hulyo',
'Agosto',
'Setyembre',
'Oktubre',
'Nobyembre',
'Disyembre',
] as const,
};
const dayValues = {
narrow: ['L', 'L', 'M', 'M', 'H', 'B', 'S'] as const,
short: ['Li', 'Lu', 'Ma', 'Mi', 'Hu', 'Bi', 'Sa'] as const,
abbreviated: ['Lin', 'Lun', 'Mar', 'Miy', 'Huw', 'Biy', 'Sab'] as const,
wide: [
'Linggo',
'Lunes',
'Martes',
'Miyerkules',
'Huwebes',
'Biyernes',
'Sabado',
] as const,
};
const dayPeriodValues = {
narrow: {
am: 'a',
pm: 'p',
midnight: 'mi',
noon: 'n',
morning: 'umaga',
afternoon: 'hapon',
evening: 'gabi',
night: 'gabi',
},
abbreviated: {
am: 'AM',
pm: 'PM',
midnight: 'hatinggabi',
noon: 'tanghali',
morning: 'umaga',
afternoon: 'hapon',
evening: 'gabi',
night: 'gabi',
},
wide: {
am: 'a.m.',
pm: 'p.m.',
midnight: 'hatinggabi',
noon: 'tanghali',
morning: 'umaga',
afternoon: 'hapon',
evening: 'gabi',
night: 'gabi',
},
};
const formattingDayPeriodValues = {
narrow: {
am: 'a',
pm: 'p',
midnight: 'mi',
noon: 'n',
morning: 'sa umaga',
afternoon: 'sa hapon',
evening: 'sa gabi',
night: 'sa gabi',
},
abbreviated: {
am: 'AM',
pm: 'PM',
midnight: 'midnight',
noon: 'noon',
morning: 'sa umaga',
afternoon: 'sa hapon',
evening: 'sa gabi',
night: 'sa gabi',
},
wide: {
am: 'a.m.',
pm: 'p.m.',
midnight: 'midnight',
noon: 'noon',
morning: 'sa umaga',
afternoon: 'sa hapon',
evening: 'sa gabi',
night: 'sa gabi',
},
};
const ordinalNumber: LocalizeFn<number, undefined> = (
dirtyNumber,
_options
) => {
const number = Number(dirtyNumber);
// If ordinal numbers depend on context, for example,
// if they are different for different grammatical genders,
// use `options.unit`.
//
// `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',
// 'day', 'hour', 'minute', 'second'.
// const rem100 = number % 100
// if (rem100 > 20 || rem100 < 10) {
// switch (rem100 % 10) {
// case 1:
// return number + 'st'
// case 2:
// return number + 'nd'
// case 3:
// return number + 'rd'
// }
// }
return 'ika-' + number;
};
const localize: Localize = {
ordinalNumber,
era: buildLocalizeFn({
values: eraValues,
defaultWidth: 'wide',
}),
quarter: buildLocalizeFn({
values: quarterValues,
defaultWidth: 'wide',
argumentCallback: (quarter) => (quarter - 1) as Quarter,
}),
month: buildLocalizeFn({
values: monthValues,
defaultWidth: 'wide',
}),
day: buildLocalizeFn({
values: dayValues,
defaultWidth: 'wide',
}),
dayPeriod: buildLocalizeFn({
values: dayPeriodValues,
defaultWidth: 'wide',
formattingValues: formattingDayPeriodValues,
defaultFormattingWidth: 'wide',
}),
};
export default localize;

View File

@@ -1,135 +0,0 @@
import type { Quarter } from '../../../../types';
import type { Match } from '../../../types';
import buildMatchFn from '../../../_lib/buildMatchFn/index';
import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index';
const matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i;
const parseOrdinalNumberPattern = /\d+/i;
const matchEraPatterns = {
narrow: /^(b|a)/i,
abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,
wide: /^(before christ|before common era|anno domini|common era)/i,
};
const parseEraPatterns = {
any: [/^b/i, /^(a|c)/i] as const,
};
const matchQuarterPatterns = {
narrow: /^[1234]/i,
abbreviated: /^q[1234]/i,
wide: /^[1234](th|st|nd|rd)? quarter/i,
};
const parseQuarterPatterns = {
any: [/1/i, /2/i, /3/i, /4/i] as const,
};
const matchMonthPatterns = {
narrow: /^[jfmasond]/i,
abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,
wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i,
};
const parseMonthPatterns = {
narrow: [
/^j/i,
/^f/i,
/^m/i,
/^a/i,
/^m/i,
/^j/i,
/^j/i,
/^a/i,
/^s/i,
/^o/i,
/^n/i,
/^d/i,
] as const,
any: [
/^ja/i,
/^f/i,
/^mar/i,
/^ap/i,
/^may/i,
/^jun/i,
/^jul/i,
/^au/i,
/^s/i,
/^o/i,
/^n/i,
/^d/i,
] as const,
};
const matchDayPatterns = {
narrow: /^[smtwf]/i,
short: /^(su|mo|tu|we|th|fr|sa)/i,
abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,
wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i,
};
const parseDayPatterns = {
narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i] as const,
any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i] as const,
};
const matchDayPeriodPatterns = {
narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,
any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i,
};
const parseDayPeriodPatterns = {
any: {
am: /^a/i,
pm: /^p/i,
midnight: /^mi/i,
noon: /^no/i,
morning: /morning/i,
afternoon: /afternoon/i,
evening: /evening/i,
night: /night/i,
},
};
const match: Match = {
ordinalNumber: buildMatchPatternFn({
matchPattern: matchOrdinalNumberPattern,
parsePattern: parseOrdinalNumberPattern,
valueCallback: (value) => parseInt(value, 10),
}),
era: buildMatchFn({
matchPatterns: matchEraPatterns,
defaultMatchWidth: 'wide',
parsePatterns: parseEraPatterns,
defaultParseWidth: 'any',
}),
quarter: buildMatchFn({
matchPatterns: matchQuarterPatterns,
defaultMatchWidth: 'wide',
parsePatterns: parseQuarterPatterns,
defaultParseWidth: 'any',
valueCallback: (index) => (index + 1) as Quarter,
}),
month: buildMatchFn({
matchPatterns: matchMonthPatterns,
defaultMatchWidth: 'wide',
parsePatterns: parseMonthPatterns,
defaultParseWidth: 'any',
}),
day: buildMatchFn({
matchPatterns: matchDayPatterns,
defaultMatchWidth: 'wide',
parsePatterns: parseDayPatterns,
defaultParseWidth: 'any',
}),
dayPeriod: buildMatchFn({
matchPatterns: matchDayPeriodPatterns,
defaultMatchWidth: 'any',
parsePatterns: parseDayPeriodPatterns,
defaultParseWidth: 'any',
}),
};
export default match;

View File

@@ -1,4 +0,0 @@
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
import { fil } from 'date-fns/locale';
export default fil;

View File

@@ -1,35 +0,0 @@
// @flow
// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it.
export type Locale = {
code?: string,
formatDistance?: (...args: Array<any>) => any,
formatRelative?: (...args: Array<any>) => any,
localize?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
formatLong?: {
date: (...args: Array<any>) => any,
time: (...args: Array<any>) => any,
dateTime: (...args: Array<any>) => any,
},
match?: {
ordinalNumber: (...args: Array<any>) => any,
era: (...args: Array<any>) => any,
quarter: (...args: Array<any>) => any,
month: (...args: Array<any>) => any,
day: (...args: Array<any>) => any,
dayPeriod: (...args: Array<any>) => any,
},
options?: {
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6,
firstWeekContainsDate?: 1 | 2 | 3 | 4 | 5 | 6 | 7,
},
}
declare module.exports: Locale

View File

@@ -1,29 +0,0 @@
import formatDistance from './_lib/formatDistance/index';
import formatLong from './_lib/formatLong/index';
import formatRelative from './_lib/formatRelative/index';
import localize from './_lib/localize/index';
import match from './_lib/match/index';
import type { Locale } from '../types';
/**
* @type {Locale}
* @category Locales
* @summary Filipino locale (Philippines)
* @language Filipino
* @iso-639-2 fil
* @author Paolo Miguel de Leon [@pmigueld]{@link https://github.com/pmigueld}
*/
const locale: Locale = {
code: 'fil',
formatDistance: formatDistance,
formatLong: formatLong,
formatRelative: formatRelative,
localize: localize,
match: match,
options: {
weekStartsOn: 0 /* Sunday */,
firstWeekContainsDate: 1,
},
};
export default locale;

View File

@@ -1,330 +0,0 @@
# English (en-US) locale
## `format` and `parse`
| Title | Token string | Date | `format` result | `parse` result |
| ------------------------------- | ------------ | ------------------------ | ------------------------------------------------------- | ------------------------ |
| Calendar year | yo | 1987-02-11T12:13:14.015Z | 1987th | 1987-01-01T00:00:00.000Z |
| | | 0005-01-01T12:13:14.015Z | 5th | 0005-01-01T00:00:00.000Z |
| Local week-numbering year | Yo | 1987-02-11T12:13:14.015Z | 1987th | 1986-12-28T00:00:00.000Z |
| | | 0005-01-01T12:13:14.015Z | 5th | 0004-12-26T00:00:00.000Z |
| Quarter (formatting) | Qo | 2019-01-01T12:13:14.015Z | 1st | 2019-01-01T00:00:00.000Z |
| | | 2019-04-01T12:13:14.015Z | 2nd | 2019-04-01T00:00:00.000Z |
| | QQQ | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
| | QQQQ | 2019-01-01T12:13:14.015Z | 1st quarter | 2019-01-01T00:00:00.000Z |
| | | 2019-04-01T12:13:14.015Z | 2nd quarter | 2019-04-01T00:00:00.000Z |
| | QQQQQ | 2019-01-01T12:13:14.015Z | 1 | 2019-01-01T00:00:00.000Z |
| | | 2019-04-01T12:13:14.015Z | 2 | 2019-04-01T00:00:00.000Z |
| Quarter (stand-alone) | qo | 2019-01-01T12:13:14.015Z | 1st | 2019-01-01T00:00:00.000Z |
| | | 2019-04-01T12:13:14.015Z | 2nd | 2019-04-01T00:00:00.000Z |
| | qqq | 2019-01-01T12:13:14.015Z | Q1 | 2019-01-01T00:00:00.000Z |
| | | 2019-04-01T12:13:14.015Z | Q2 | 2019-04-01T00:00:00.000Z |
| | qqqq | 2019-01-01T12:13:14.015Z | 1st quarter | 2019-01-01T00:00:00.000Z |
| | | 2019-04-01T12:13:14.015Z | 2nd quarter | 2019-04-01T00:00:00.000Z |
| Month (formatting) | Mo | 2019-02-11T12:13:14.015Z | 2nd | 2019-02-01T00:00:00.000Z |
| | | 2019-07-10T12:13:14.015Z | 7th | 2019-07-01T00:00:00.000Z |
| | MMM | 2019-02-11T12:13:14.015Z | Feb | 2019-02-01T00:00:00.000Z |
| | | 2019-07-10T12:13:14.015Z | Jul | 2019-07-01T00:00:00.000Z |
| | MMMM | 2019-02-11T12:13:14.015Z | February | 2019-02-01T00:00:00.000Z |
| | | 2019-07-10T12:13:14.015Z | July | 2019-07-01T00:00:00.000Z |
| | MMMMM | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
| Month (stand-alone) | Lo | 2019-02-11T12:13:14.015Z | 2nd | 2019-02-01T00:00:00.000Z |
| | | 2019-07-10T12:13:14.015Z | 7th | 2019-07-01T00:00:00.000Z |
| | LLL | 2019-02-11T12:13:14.015Z | Feb | 2019-02-01T00:00:00.000Z |
| | | 2019-07-10T12:13:14.015Z | Jul | 2019-07-01T00:00:00.000Z |
| | LLLL | 2019-02-11T12:13:14.015Z | February | 2019-02-01T00:00:00.000Z |
| | | 2019-07-10T12:13:14.015Z | July | 2019-07-01T00:00:00.000Z |
| | LLLLL | 2019-02-11T12:13:14.015Z | F | 2019-02-01T00:00:00.000Z |
| | | 2019-07-10T12:13:14.015Z | J | 2019-01-01T00:00:00.000Z |
| Local week of year | wo | 2019-01-01T12:13:14.015Z | 1st | 2018-12-30T00:00:00.000Z |
| | | 2019-12-01T12:13:14.015Z | 49th | 2019-12-01T00:00:00.000Z |
| ISO week of year | Io | 2019-01-01T12:13:14.015Z | 1st | 2018-12-31T00:00:00.000Z |
| | | 2019-12-01T12:13:14.015Z | 48th | 2019-11-25T00:00:00.000Z |
| Day of month | do | 2019-02-11T12:13:14.015Z | 11th | 2019-02-11T00:00:00.000Z |
| | | 2019-02-28T12:13:14.015Z | 28th | 2019-02-28T00:00:00.000Z |
| Day of year | Do | 2019-02-11T12:13:14.015Z | 42nd | 2019-02-11T00:00:00.000Z |
| | | 2019-12-31T12:13:14.015Z | 365th | 2019-12-31T00:00:00.000Z |
| Day of week (formatting) | E | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
| | EE | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
| | EEE | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
| | EEEE | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
| | EEEEE | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
| | EEEEEE | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
| ISO day of week (formatting) | io | 2019-02-11T12:13:14.015Z | 1st | 2019-02-11T00:00:00.000Z |
| | | 2019-02-15T12:13:14.015Z | 5th | 2019-02-15T00:00:00.000Z |
| | iii | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
| | iiii | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
| | iiiii | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
| | iiiiii | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
| Local day of week (formatting) | eo | 2019-02-11T12:13:14.015Z | 2nd | 2019-02-11T00:00:00.000Z |
| | | 2019-02-15T12:13:14.015Z | 6th | 2019-02-15T00:00:00.000Z |
| | eee | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
| | eeee | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
| | eeeee | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
| | eeeeee | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
| Local day of week (stand-alone) | co | 2019-02-11T12:13:14.015Z | 2nd | 2019-02-11T00:00:00.000Z |
| | | 2019-02-15T12:13:14.015Z | 6th | 2019-02-15T00:00:00.000Z |
| | ccc | 2019-02-11T12:13:14.015Z | Mon | 2019-02-11T00:00:00.000Z |
| | | 2019-02-15T12:13:14.015Z | Fri | 2019-02-15T00:00:00.000Z |
| | cccc | 2019-02-11T12:13:14.015Z | Monday | 2019-02-11T00:00:00.000Z |
| | | 2019-02-15T12:13:14.015Z | Friday | 2019-02-15T00:00:00.000Z |
| | ccccc | 2019-02-11T12:13:14.015Z | M | 2019-02-11T00:00:00.000Z |
| | | 2019-02-15T12:13:14.015Z | F | 2019-02-15T00:00:00.000Z |
| | cccccc | 2019-02-11T12:13:14.015Z | Mo | 2019-02-11T00:00:00.000Z |
| | | 2019-02-15T12:13:14.015Z | Fr | 2019-02-15T00:00:00.000Z |
| AM, PM | a | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
| | aa | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
| | aaa | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
| | aaaa | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
| | aaaaa | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
| AM, PM, noon, midnight | b | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
| | bb | 2019-02-11T11:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
| | | 2019-02-11T14:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
| | | 2019-02-11T19:13:14.015Z | PM | 2019-02-11T12:00:00.000Z |
| | | 2019-02-11T02:13:14.015Z | AM | 2019-02-11T00:00:00.000Z |
| | bbb | 2019-02-11T11:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
| | | 2019-02-11T14:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
| | | 2019-02-11T19:13:14.015Z | pm | 2019-02-11T12:00:00.000Z |
| | | 2019-02-11T02:13:14.015Z | am | 2019-02-11T00:00:00.000Z |
| | bbbb | 2019-02-11T11:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
| | | 2019-02-11T14:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
| | | 2019-02-11T19:13:14.015Z | p.m. | 2019-02-11T12:00:00.000Z |
| | | 2019-02-11T02:13:14.015Z | a.m. | 2019-02-11T00:00:00.000Z |
| | bbbbb | 2019-02-11T11:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
| | | 2019-02-11T14:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
| | | 2019-02-11T19:13:14.015Z | p | 2019-02-11T12:00:00.000Z |
| | | 2019-02-11T02:13:14.015Z | a | 2019-02-11T00:00:00.000Z |
| Flexible day period | B | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
| | BB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
| | BBB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
| | BBBB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
| | | 2019-02-11T02:13:14.015Z | at night | 2019-02-11T00:00:00.000Z |
| | BBBBB | 2019-02-11T11:13:14.015Z | in the morning | 2019-02-11T04:00:00.000Z |
| | | 2019-02-11T14:13:14.015Z | in the afternoon | 2019-02-11T12:00:00.000Z |
| | | 2019-02-11T19:13:14.015Z | in the evening | 2019-02-11T17:00:00.000Z |
| | | 2019-02-11T02:13:14.015Z | at night | Invalid Date |
| Hour [1-12] | ho | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
| | | 2019-02-11T23:13:14.015Z | 11th | 2019-02-11T23:00:00.000Z |
| Hour [0-23] | Ho | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
| | | 2019-02-11T23:13:14.015Z | 23rd | 2019-02-11T23:00:00.000Z |
| Hour [0-11] | Ko | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
| | | 2019-02-11T23:13:14.015Z | 11th | 2019-02-11T23:00:00.000Z |
| Hour [1-24] | ko | 2019-02-11T11:13:14.015Z | 11th | 2019-02-11T11:00:00.000Z |
| | | 2019-02-11T23:13:14.015Z | 23rd | 2019-02-11T23:00:00.000Z |
| Minute | mo | 2019-01-01T12:01:14.015Z | 1st | 2019-01-01T12:01:00.000Z |
| | | 2019-04-01T12:55:14.015Z | 55th | 2019-04-01T12:55:00.000Z |
| Second | so | 2019-01-01T12:13:01.015Z | 1st | 2019-01-01T12:13:01.000Z |
| | | 2019-04-01T12:13:55.015Z | 55th | 2019-04-01T12:13:55.000Z |
| Long localized date | P | 1987-02-11T12:13:14.015Z | 02/11/1987 | 1987-02-11T00:00:00.000Z |
| | | 1453-05-29T23:59:59.999Z | 05/29/1453 | 1453-05-29T00:00:00.000Z |
| | PP | 1987-02-11T12:13:14.015Z | Feb 11, 1987 | 1987-02-11T00:00:00.000Z |
| | | 1453-05-29T23:59:59.999Z | May 29, 1453 | 1453-05-29T00:00:00.000Z |
| | PPP | 1987-02-11T12:13:14.015Z | February 11th, 1987 | 1987-02-11T00:00:00.000Z |
| | | 1453-05-29T23:59:59.999Z | May 29th, 1453 | 1453-05-29T00:00:00.000Z |
| | PPPP | 1987-02-11T12:13:14.015Z | Wednesday, February 11th, 1987 | 1987-02-11T00:00:00.000Z |
| | | 1453-05-29T23:59:59.999Z | Sunday, May 29th, 1453 | 1453-05-29T00:00:00.000Z |
| Long localized time | p | 1987-02-11T12:13:14.015Z | 12:13 PM | 1987-02-11T12:13:00.000Z |
| | | 1453-05-29T23:59:59.999Z | 11:59 PM | 1453-05-29T23:59:00.000Z |
| | pp | 1987-02-11T12:13:14.015Z | 12:13:14 PM | 1987-02-11T12:13:14.000Z |
| | | 1453-05-29T23:59:59.999Z | 11:59:59 PM | 1453-05-29T23:59:59.000Z |
| | ppp | 1987-02-11T12:13:14.015Z | 12:13:14 PM GMT+0 | Errored |
| | | 1453-05-29T23:59:59.999Z | 11:59:59 PM GMT+0 | Errored |
| | pppp | 1987-02-11T12:13:14.015Z | 12:13:14 PM GMT+00:00 | Errored |
| | | 1453-05-29T23:59:59.999Z | 11:59:59 PM GMT+00:00 | Errored |
| Combination of date and time | Pp | 1987-02-11T12:13:14.015Z | 02/11/1987, 12:13 PM | 1987-02-11T12:13:00.000Z |
| | | 1453-05-29T23:59:59.999Z | 05/29/1453, 11:59 PM | 1453-05-29T23:59:00.000Z |
| | PPpp | 1987-02-11T12:13:14.015Z | Feb 11, 1987, 12:13:14 PM | 1987-02-11T12:13:14.000Z |
| | | 1453-05-29T23:59:59.999Z | May 29, 1453, 11:59:59 PM | 1453-05-29T23:59:59.000Z |
| | PPPppp | 1987-02-11T12:13:14.015Z | February 11th, 1987 at 12:13:14 PM GMT+0 | Errored |
| | | 1453-05-29T23:59:59.999Z | May 29th, 1453 at 11:59:59 PM GMT+0 | Errored |
| | PPPPpppp | 1987-02-11T12:13:14.015Z | Wednesday, February 11th, 1987 at 12:13:14 PM GMT+00:00 | Errored |
| | | 1453-05-29T23:59:59.999Z | Sunday, May 29th, 1453 at 11:59:59 PM GMT+00:00 | Errored |
## `formatDistance`
If now is January 1st, 2000, 00:00.
| Date | Result | `includeSeconds: true` | `addSuffix: true` |
| ------------------------ | ------------------ | ---------------------- | ---------------------- |
| 2006-01-01T00:00:00.000Z | about 6 years | about 6 years | in about 6 years |
| 2005-01-01T00:00:00.000Z | about 5 years | about 5 years | in about 5 years |
| 2004-01-01T00:00:00.000Z | about 4 years | about 4 years | in about 4 years |
| 2003-01-01T00:00:00.000Z | about 3 years | about 3 years | in about 3 years |
| 2002-01-01T00:00:00.000Z | about 2 years | about 2 years | in about 2 years |
| 2001-06-01T00:00:00.000Z | over 1 year | over 1 year | in over 1 year |
| 2001-02-01T00:00:00.000Z | about 1 year | about 1 year | in about 1 year |
| 2001-01-01T00:00:00.000Z | about 1 year | about 1 year | in about 1 year |
| 2000-06-01T00:00:00.000Z | 5 months | 5 months | in 5 months |
| 2000-03-01T00:00:00.000Z | 2 months | 2 months | in 2 months |
| 2000-02-01T00:00:00.000Z | about 1 month | about 1 month | in about 1 month |
| 2000-01-15T00:00:00.000Z | 14 days | 14 days | in 14 days |
| 2000-01-02T00:00:00.000Z | 1 day | 1 day | in 1 day |
| 2000-01-01T06:00:00.000Z | about 6 hours | about 6 hours | in about 6 hours |
| 2000-01-01T01:00:00.000Z | about 1 hour | about 1 hour | in about 1 hour |
| 2000-01-01T00:45:00.000Z | about 1 hour | about 1 hour | in about 1 hour |
| 2000-01-01T00:30:00.000Z | 30 minutes | 30 minutes | in 30 minutes |
| 2000-01-01T00:15:00.000Z | 15 minutes | 15 minutes | in 15 minutes |
| 2000-01-01T00:01:00.000Z | 1 minute | 1 minute | in 1 minute |
| 2000-01-01T00:00:25.000Z | less than a minute | half a minute | in less than a minute |
| 2000-01-01T00:00:15.000Z | less than a minute | less than 20 seconds | in less than a minute |
| 2000-01-01T00:00:05.000Z | less than a minute | less than 10 seconds | in less than a minute |
| 2000-01-01T00:00:00.000Z | less than a minute | less than 5 seconds | less than a minute ago |
| 1999-12-31T23:59:55.000Z | less than a minute | less than 10 seconds | less than a minute ago |
| 1999-12-31T23:59:45.000Z | less than a minute | less than 20 seconds | less than a minute ago |
| 1999-12-31T23:59:35.000Z | less than a minute | half a minute | less than a minute ago |
| 1999-12-31T23:59:00.000Z | 1 minute | 1 minute | 1 minute ago |
| 1999-12-31T23:45:00.000Z | 15 minutes | 15 minutes | 15 minutes ago |
| 1999-12-31T23:30:00.000Z | 30 minutes | 30 minutes | 30 minutes ago |
| 1999-12-31T23:15:00.000Z | about 1 hour | about 1 hour | about 1 hour ago |
| 1999-12-31T23:00:00.000Z | about 1 hour | about 1 hour | about 1 hour ago |
| 1999-12-31T18:00:00.000Z | about 6 hours | about 6 hours | about 6 hours ago |
| 1999-12-30T00:00:00.000Z | 2 days | 2 days | 2 days ago |
| 1999-12-15T00:00:00.000Z | 17 days | 17 days | 17 days ago |
| 1999-12-01T00:00:00.000Z | about 1 month | about 1 month | about 1 month ago |
| 1999-11-01T00:00:00.000Z | 2 months | 2 months | 2 months ago |
| 1999-06-01T00:00:00.000Z | 7 months | 7 months | 7 months ago |
| 1999-01-01T00:00:00.000Z | about 1 year | about 1 year | about 1 year ago |
| 1998-12-01T00:00:00.000Z | about 1 year | about 1 year | about 1 year ago |
| 1998-06-01T00:00:00.000Z | over 1 year | over 1 year | over 1 year ago |
| 1998-01-01T00:00:00.000Z | about 2 years | about 2 years | about 2 years ago |
| 1997-01-01T00:00:00.000Z | about 3 years | about 3 years | about 3 years ago |
| 1996-01-01T00:00:00.000Z | about 4 years | about 4 years | about 4 years ago |
| 1995-01-01T00:00:00.000Z | about 5 years | about 5 years | about 5 years ago |
| 1994-01-01T00:00:00.000Z | about 6 years | about 6 years | about 6 years ago |
## `formatDistanceStrict`
If now is January 1st, 2000, 00:00.
| Date | Result | `addSuffix: true` | With forced unit (i.e. `hour`) |
| ------------------------ | ---------- | ----------------- | ------------------------------ |
| 2006-01-01T00:00:00.000Z | 6 years | in 6 years | 52608 hours |
| 2005-01-01T00:00:00.000Z | 5 years | in 5 years | 43848 hours |
| 2004-01-01T00:00:00.000Z | 4 years | in 4 years | 35064 hours |
| 2003-01-01T00:00:00.000Z | 3 years | in 3 years | 26304 hours |
| 2002-01-01T00:00:00.000Z | 2 years | in 2 years | 17544 hours |
| 2001-06-01T00:00:00.000Z | 1 year | in 1 year | 12408 hours |
| 2001-02-01T00:00:00.000Z | 1 year | in 1 year | 9528 hours |
| 2001-01-01T00:00:00.000Z | 1 year | in 1 year | 8784 hours |
| 2000-06-01T00:00:00.000Z | 5 months | in 5 months | 3648 hours |
| 2000-03-01T00:00:00.000Z | 2 months | in 2 months | 1440 hours |
| 2000-02-01T00:00:00.000Z | 1 month | in 1 month | 744 hours |
| 2000-01-15T00:00:00.000Z | 14 days | in 14 days | 336 hours |
| 2000-01-02T00:00:00.000Z | 1 day | in 1 day | 24 hours |
| 2000-01-01T06:00:00.000Z | 6 hours | in 6 hours | 6 hours |
| 2000-01-01T01:00:00.000Z | 1 hour | in 1 hour | 1 hour |
| 2000-01-01T00:45:00.000Z | 45 minutes | in 45 minutes | 1 hour |
| 2000-01-01T00:30:00.000Z | 30 minutes | in 30 minutes | 1 hour |
| 2000-01-01T00:15:00.000Z | 15 minutes | in 15 minutes | 0 hours |
| 2000-01-01T00:01:00.000Z | 1 minute | in 1 minute | 0 hours |
| 2000-01-01T00:00:25.000Z | 25 seconds | in 25 seconds | 0 hours |
| 2000-01-01T00:00:15.000Z | 15 seconds | in 15 seconds | 0 hours |
| 2000-01-01T00:00:05.000Z | 5 seconds | in 5 seconds | 0 hours |
| 2000-01-01T00:00:00.000Z | 0 seconds | 0 seconds ago | 0 hours |
| 1999-12-31T23:59:55.000Z | 5 seconds | 5 seconds ago | 0 hours |
| 1999-12-31T23:59:45.000Z | 15 seconds | 15 seconds ago | 0 hours |
| 1999-12-31T23:59:35.000Z | 25 seconds | 25 seconds ago | 0 hours |
| 1999-12-31T23:59:00.000Z | 1 minute | 1 minute ago | 0 hours |
| 1999-12-31T23:45:00.000Z | 15 minutes | 15 minutes ago | 0 hours |
| 1999-12-31T23:30:00.000Z | 30 minutes | 30 minutes ago | 1 hour |
| 1999-12-31T23:15:00.000Z | 45 minutes | 45 minutes ago | 1 hour |
| 1999-12-31T23:00:00.000Z | 1 hour | 1 hour ago | 1 hour |
| 1999-12-31T18:00:00.000Z | 6 hours | 6 hours ago | 6 hours |
| 1999-12-30T00:00:00.000Z | 2 days | 2 days ago | 48 hours |
| 1999-12-15T00:00:00.000Z | 17 days | 17 days ago | 408 hours |
| 1999-12-01T00:00:00.000Z | 1 month | 1 month ago | 744 hours |
| 1999-11-01T00:00:00.000Z | 2 months | 2 months ago | 1464 hours |
| 1999-06-01T00:00:00.000Z | 7 months | 7 months ago | 5136 hours |
| 1999-01-01T00:00:00.000Z | 1 year | 1 year ago | 8760 hours |
| 1998-12-01T00:00:00.000Z | 1 year | 1 year ago | 9504 hours |
| 1998-06-01T00:00:00.000Z | 2 years | 2 years ago | 13896 hours |
| 1998-01-01T00:00:00.000Z | 2 years | 2 years ago | 17520 hours |
| 1997-01-01T00:00:00.000Z | 3 years | 3 years ago | 26280 hours |
| 1996-01-01T00:00:00.000Z | 4 years | 4 years ago | 35064 hours |
| 1995-01-01T00:00:00.000Z | 5 years | 5 years ago | 43824 hours |
| 1994-01-01T00:00:00.000Z | 6 years | 6 years ago | 52584 hours |
## `formatRelative`
If now is January 1st, 2000, 00:00.
| Date | Result |
| ------------------------ | ----------------------- |
| 2000-01-10T00:00:00.000Z | 01/10/2000 |
| 2000-01-05T00:00:00.000Z | Wednesday at 12:00 AM |
| 2000-01-02T00:00:00.000Z | tomorrow at 12:00 AM |
| 2000-01-01T00:00:00.000Z | today at 12:00 AM |
| 1999-12-31T00:00:00.000Z | yesterday at 12:00 AM |
| 1999-12-27T00:00:00.000Z | last Monday at 12:00 AM |
| 1999-12-21T00:00:00.000Z | 12/21/1999 |
## `formatDuration`
| Duration | Result |
| ------------- | --------- |
| {"years":0} | 0 years |
| {"years":1} | 1 year |
| {"years":2} | 2 years |
| {"months":0} | 0 months |
| {"months":1} | 1 month |
| {"months":2} | 2 months |
| {"weeks":0} | 0 weeks |
| {"weeks":1} | 1 week |
| {"weeks":2} | 2 weeks |
| {"days":0} | 0 days |
| {"days":1} | 1 day |
| {"days":2} | 2 days |
| {"hours":0} | 0 hours |
| {"hours":1} | 1 hour |
| {"hours":2} | 2 hours |
| {"minutes":0} | 0 minutes |
| {"minutes":1} | 1 minute |
| {"minutes":2} | 2 minutes |
| {"seconds":0} | 0 seconds |
| {"seconds":1} | 1 second |
| {"seconds":2} | 2 seconds |

View File

@@ -1 +0,0 @@
export { default as fil } from './fil';

View File

@@ -1,273 +0,0 @@
/* eslint-disable no-unused-vars */
import type {
Day,
Era,
FirstWeekContainsDate,
Month,
Quarter,
Unit,
} from '../types';
import type {
BuildLocalizeFnArgCallback,
LocalizeUnitValues,
LocalizeUnitValuesIndex,
} from './_lib/buildLocalizeFn';
export interface Locale {
code: string;
formatDistance: FormatDistanceFn;
formatRelative: FormatRelativeFn;
localize: Localize;
formatLong: FormatLong;
match: Match;
options?: LocaleOptions;
}
export interface LocaleOptions {
weekStartsOn?: Day;
firstWeekContainsDate?: FirstWeekContainsDate;
}
export type FormatDistanceToken =
| 'lessThanXSeconds'
| 'xSeconds'
| 'halfAMinute'
| 'lessThanXMinutes'
| 'xMinutes'
| 'aboutXHours'
| 'xHours'
| 'xDays'
| 'aboutXWeeks'
| 'xWeeks'
| 'aboutXMonths'
| 'xMonths'
| 'aboutXYears'
| 'xYears'
| 'overXYears'
| 'almostXYears';
export type FormatDistanceLocale<Value> = {
[token in FormatDistanceToken]: Value;
};
export interface FormatDistanceFnOptions {
addSuffix?: boolean;
comparison?: -1 | 0 | 1;
}
export type FormatDistanceTokenFn = (
count: number,
options?: FormatDistanceOptions
) => string;
export interface FormatDistanceOptions {
addSuffix?: boolean;
comparison?: -1 | 0 | 1;
}
export type FormatDistanceFn = (
token: FormatDistanceToken,
count: number,
options?: FormatDistanceOptions
) => string;
export type FormatRelativeTokenFn = (
date: Date | number,
baseDate: Date | number,
options?: { weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 }
) => string;
export type FormatRelativeToken =
| 'lastWeek'
| 'yesterday'
| 'today'
| 'tomorrow'
| 'nextWeek'
| 'other';
export interface FormatRelativeFnOptions {
weekStartsOn?: Day;
locale?: Locale;
}
export type FormatRelativeFn = (
token: FormatRelativeToken,
date: Date,
baseDate: Date,
options?: FormatRelativeFnOptions
) => string;
// TODO: You're real champion if you're actually get back to it. Proud of you!
// Try to get rid of this and (especially) ArgCallback types because the only
// case when it's helpful is when using quarter. Maybe.
export type LocalizeUnitIndex<Unit extends LocaleUnit | number> =
Unit extends LocaleUnit
? LocalizeUnitValuesIndex<LocalizeUnitValues<Unit>>
: number;
export type LocalizeFn<
Result extends LocaleUnit | number,
ArgCallback extends BuildLocalizeFnArgCallback<Result> | undefined = undefined
> = (
value: ArgCallback extends undefined
? Result
: Result extends Quarter
? Quarter
: LocalizeUnitIndex<Result>,
options?: {
width?: LocalePatternWidth;
context?: 'formatting' | 'standalone';
unit?: Unit;
}
) => string;
export interface Localize {
ordinalNumber: LocalizeFn<
number,
BuildLocalizeFnArgCallback<number> | undefined
>;
era: LocalizeFn<Era, undefined>;
quarter: LocalizeFn<Quarter, BuildLocalizeFnArgCallback<Quarter>>;
month: LocalizeFn<Month, undefined>;
day: LocalizeFn<Day, undefined>;
dayPeriod: LocalizeFn<LocaleDayPeriod, undefined>;
}
export interface BuildMatchFnArgs<
Result extends LocaleUnit,
DefaultMatchWidth extends LocalePatternWidth,
DefaultParseWidth extends LocalePatternWidth
> {
matchPatterns: MatchPatterns<DefaultMatchWidth>;
defaultMatchWidth: DefaultMatchWidth;
parsePatterns: ParsePatterns<Result, DefaultParseWidth>;
defaultParseWidth: DefaultParseWidth;
valueCallback?: MatchValueCallback<
Result extends LocaleDayPeriod ? string : number,
Result
>;
}
export type MatchPatterns<DefaultWidth extends LocalePatternWidth> = {
[pattern in LocalePatternWidth]?: RegExp;
} & { [key in DefaultWidth]: RegExp };
export type ParsePatterns<
Result extends LocaleUnit,
DefaultWidth extends LocalePatternWidth
> = {
[pattern in LocalePatternWidth]?: ParsePattern<Result>;
} & { [key in DefaultWidth]: ParsePattern<Result> };
export type ParsePattern<Result extends LocaleUnit> =
Result extends LocaleDayPeriod
? Record<LocaleDayPeriod, RegExp>
: Result extends Quarter
? readonly [RegExp, RegExp, RegExp, RegExp]
: Result extends Era
? readonly [RegExp, RegExp]
: Result extends Day
? readonly [RegExp, RegExp, RegExp, RegExp, RegExp, RegExp, RegExp]
: Result extends Month
? readonly [
RegExp,
RegExp,
RegExp,
RegExp,
RegExp,
RegExp,
RegExp,
RegExp,
RegExp,
RegExp,
RegExp,
RegExp
]
: never;
export type BuildMatchFn<
Result extends LocaleUnit,
DefaultMatchWidth extends LocalePatternWidth,
DefaultParseWidth extends LocalePatternWidth
> = (
args: BuildMatchFnArgs<Result, DefaultMatchWidth, DefaultParseWidth>
) => MatchFn<Result>;
export type MatchFn<Result> = (
str: string,
options?: {
width?: LocalePatternWidth;
valueCallback?: MatchValueCallback<string | Result, Result>;
}
) => { value: Result; rest: string } | null;
export type MatchValueCallback<Arg, Result> = (value: Arg) => Result;
export interface Match {
ordinalNumber: MatchFn<number>;
era: MatchFn<Era>;
quarter: MatchFn<Quarter>;
month: MatchFn<Month>;
day: MatchFn<Day>;
dayPeriod: MatchFn<LocaleDayPeriod>;
}
export type LocaleOrdinalUnit =
| 'second'
| 'minute'
| 'hour'
| 'day'
| 'week'
| 'month'
| 'quarter'
| 'year'
| 'date'
| 'dayOfYear';
export type LocalePatternWidth =
| 'narrow'
| 'short'
| 'abbreviated'
| 'wide'
| 'any';
export type LocaleDayPeriod =
| 'am'
| 'pm'
| 'midnight'
| 'noon'
| 'morning'
| 'afternoon'
| 'evening'
| 'night';
export type LocaleOptionUnit =
| 'year'
| 'quarter'
| 'month'
| 'week'
| 'date'
| 'dayOfYear'
| 'day'
| 'hour'
| 'minute'
| 'second';
export type FormatLongWidth = 'full' | 'long' | 'medium' | 'short' | 'any';
export type DateTimeFormat = { [format in FormatLongWidth]: string };
export type LocaleUnit = Era | Quarter | Month | Day | LocaleDayPeriod;
export interface FormatLong {
date: FormatLongFn;
time: FormatLongFn;
dateTime: FormatLongFn;
}
export interface FormatLongFnOptions {
width?: FormatLongWidth;
}
export type FormatLongFn = (options: FormatLongFnOptions) => string;

View File

@@ -1,21 +0,0 @@
import SmartshareReactNative from '@idpass/smartshare-react-native';
import OpenIdBle from 'react-native-openid4vp-ble';
import { OpenIDBLEShare } from 'react-native-openid4vp-ble/lib/typescript/types/bleshare';
import { IdpassSmartshare as IdpassSmartshareType } from '@idpass/smartshare-react-native/lib/typescript/IdpassSmartshare';
import { USE_BLE_SHARE } from 'react-native-dotenv';
const { IdpassSmartshare } = SmartshareReactNative;
const { Openid4vpBle } = OpenIdBle;
type ShareProtocol = OpenIDBLEShare | IdpassSmartshareType;
let ShareLib: ShareProtocol;
export const isBLEEnabled = USE_BLE_SHARE === 'true';
export const isGoogleNearbyEnabled = !isBLEEnabled;
if (isBLEEnabled) {
ShareLib = Openid4vpBle;
} else {
ShareLib = IdpassSmartshare;
}
export default ShareLib;

View File

@@ -11,13 +11,17 @@
"VC_RECEIVED_BUT_PRESENCE_VERIFICATION_FAILED": "الواردة. فشل التحقق من التواجد",
"PRESENCE_VERIFIED_AND_VC_SHARED": "التحقق منها ومشاركتها",
"PRESENCE_VERIFICATION_FAILED": "فشل التحقق",
"QRLOGIN_SUCCESFULL": "QRL تم تسجيل الدخول بنجاح"
"QRLOGIN_SUCCESFULL": "QRL تم تسجيل الدخول بنجاح",
"WALLET_BINDING_SUCCESSFULL": "تفعيل ناجحة",
"WALLET_BINDING_FAILURE": "فشل التفعيل"
},
"DeviceInfoList": {
"requestedBy": "مطلوب بواسطة",
"sentBy": "مرسل بواسطة",
"deviceRefNumber": "الرقم المرجعي للجهاز",
"name": "اسم"
"name": "اسم",
"Verifier": "المدقق",
"Wallet": "محفظة"
},
"FaceScanner": {},
"OIDcAuth": {
@@ -59,7 +63,40 @@
"yes_confirm": "نعم ، أنا أؤكد",
"no": "رقم",
"Alert": "انذار",
"ok": "تمام"
"ok": "تمام",
"credentialRegistry": "سجل الاعتماد",
"errors": {
"savingFailed": {
"title": "فشل حفظ بطاقة",
"message": "حدث خطأ أثناء حفظ البطاقة في المتجر."
},
"diskFullError": {
"title": "فشل حفظ بطاقة",
"message": "لا يمكن استلام المزيد من بطاقةالبطاقات أو حفظه لأن بيانات التطبيق ممتلئة."
},
}
},
"HomeScreenKebabPopUp": {
"title": "المزيد من الخيارات",
"unPinCard": "Unpin البطاقة",
"pinCard": "البطاقة الشخصية",
"offlineAuthenticationDisabled!": "تم تعطيل المصادقة دون اتصال!",
"offlineAuthDisabledMessage": "انقر هنا لتمكين بيانات الاعتماد هذه لاستخدامها في المصادقة دون اتصال.",
"viewActivityLog": "عرض سجل النشاط",
"removeFromWallet": "إزالة من المحفظة",
"revokeId": "إبطال الهوية",
"revokeMessage": "إبطال المعرف الظاهري لملف التعريف هذا",
"ActivityLog": "عرض سجل النشاط"
},
"WalletBinding": {
"inProgress": "في تَقَدم",
"profileAuthenticated": "تمت مصادقة الملف الشخصي!"
},
"BindingVcWarningOverlay": {
"alert": "يرجى تأكيد",
"BindingWarning": "إذا قمت بتمكين التحقق من بيانات الاعتماد هذه في محفظة أخرى ، فسيتم تجاوزها. هل تريد المتابعة؟",
"yesConfirm": "نعم ، أؤكد",
"no": "لا"
},
"HomeScreenKebabPopUp": {
"title": "المزيد من الخيارات",
@@ -122,6 +159,11 @@
"version": "الإصدار: 0.4.1.1",
"tuvaliVersion": "نسخة توفالي: v0.3.9-b16c5ea"
},
"HomeScreen": {
"myVcsTab": "محذوف\n{{vcLabel}}",
"receivedVcsTab": "مستلم\n{{vcLabel}}",
"historyTab": "تاريخ"
},
"HelpScreen": {
"header": "يساعد",
"whatisIdDetails?": "ما هي تفاصيل الهوية؟",
@@ -163,13 +205,14 @@
"applicationProcessing": "غير جاهز AID",
"noMessageAvailable": "حاول بعد فترة",
"networkRequestFailed": "فشل طلب الشبكة",
"invalidAid": "AID الذي تم إدخاله غير متوفر. يرجى التحقق من AID الخاص بك قبل الدخول",
"timeout": "نفذ الوقت"
}
}
},
"DownloadingVcModal": {
"header": "تنزيل ملف{{vcLabel}}",
"bodyText": "قد يستغرق هذا بعض الوقت ، وسنخبرك عندما يتم تنزيل {{vcLabel}} وإتاحته",
"header": "تنزيل بطاقتك",
"bodyText": "قد يستغرق هذا بعض الوقت ، وسنخبرك عندما يتم تنزيل بطاقة وإتاحته",
"backButton": "العودة إلى المنزل"
},
"GetIdInputModal": {
@@ -181,10 +224,8 @@
"getUIN": "احصل على UIN / VID"
},
"IdInputModal": {
"title": "استرجع هويتك",
"guideLabel": "حدد نوع المعرف وأدخل UIN أو VID المقدم من MOSIP للمعرف الذي ترغب في استرداده",
"generateVc": "إنشاء {{vcLabel}}",
"downloadID": "معرف التنزيل",
"header": "أدخل UIN / VID لتنزيل بطاقتك",
"generateVc": "يولد لي بطاقة",
"enterId": "أدخل {{idType}}",
"noUIN/VID": "ليس لديك UIN / VID؟ ",
"getItHere": "احصل عليها الآن",
@@ -197,25 +238,37 @@
"resendCode": "أعد إرسال الرمز"
},
"MyVcsTab": {
"addVcButton": "بطاقة إضافة",
"generateVc": "البطاقاتإنشاء",
"generateVcDescription": "اضغط على \"إضافة بطاقة \" أدناه لتنزيل بطاقتك",
"downloadID": "تحميل البطاقة",
"bringYourDigitalID": "أحضر هويتك الرقمية",
"generateVcDescription": "لتنزيل {{vcLabel}} انقر على تنزيل {{vcLabel}} أدناه",
"downloadingYourId": "تنزيل بطاقتك ، قد يستغرق هذا ما يصل إلى 5 دقائق"
"downloadingYourId": "تنزيل بطاقتك ، قد يستغرق هذا ما يصل إلى 5 دقائق",
"errors": {
"savingFailed": {
"title": "فشل حفظ بطاقة",
"message": "حدث خطأ أثناء حفظ البطاقة في المتجر."
},
"diskFullError": {
"title": "فشل حفظ بطاقة",
"message": "لا يمكن استلام المزيد من بطاقةالبطاقات أو حفظه لأن بيانات التطبيق ممتلئة."
}
}
},
"OnboardingOverlay": {
"stepOneTitle": شاركة آمنة!",
"stepOneText": "شارك واستقبل {{vcLabel}} switfly باستخدام كاميرا هاتفك لمسح رموز QR",
"stepTwoTitle": "المحفظة الرقمية الموثوقة",
"stepTwoText": "احتفظ ببيانات اعتمادك الرقمية معك في جميع الأوقات",
"stepThreeTitle": "الوصول السريع",
"stepThreeText": "بمجرد إنشائه ، يتم تخزين {{vcLabel}} بأمان على هاتفك المحمول.",
"stepThreeButton": "البدء",
"stepOneTitle": رحبًا!",
"stepOneText": "احتفظ ببيانات الاعتماد الرقمية معك في جميع الأوقات. للبدء ، أضف البطاقات إلى ملفك الشخصي.",
"stepTwoTitle": "إدارة البطاقة",
"stepTwoText": "بمجرد إنشائه ، يتم تخزين البطاقاتبأمان على هاتفك المحمول ويمكن إعادة تسميته أو مشاركته في أي وقت.",
"stepThreeTitle": "مشاركة سهلة",
"stepThreeText": "مشاركة واستلام البطاقات switflyباستخدام كاميرا هاتفك لمسح رموز QR.",
"stepThreeButton": "ابدأ وأضف البطاقة",
"skip": "يتخطى",
"next": "التالي"
},
"ReceivedVcsTab": {
"noReceivedVcsTitle": "لا يوجد {{vcLabel}} متاح حتى الآن",
"noReceivedVcsText": "اضغط على الطلب أدناه لتلقي{{vcLabel}}"
"noReceivedVcsTitle": "لا يوجد البطاقات متاح حتى الآن",
"noReceivedVcsText": "اضغط على الطلب أدناه لاستلام البطاقة"
},
"ViewVcModal": {
"title": "تفاصيل الهوية",
@@ -230,8 +283,8 @@
"editTag": "إعادة تسمية",
"redirecting": "إعادة توجيه...",
"success": {
"unlocked": "تم إلغاء قفل {{vcLabel}} بنجاح",
"locked": "تم قفل {{vcLabel}} بنجاح",
"unlocked": "تم إلغاء قفل بطاقة بنجاح",
"locked": "تم قفل بطاقة بنجاح",
"revoked": "تم إبطال VID {{vid}}. ستتم إزالة أي بيانات اعتماد تحتوي على نفس الشيء تلقائيًا من المحفظة"
}
},
@@ -250,8 +303,23 @@
"AppMetaData": {
"header": "حول إنجي",
"version": "الإصدار",
"useBle": "مدعوم من BLE",
"useGoogleNearby": "مدعوم من GoogleNearby"
"useBle": "Powered by BLE"
},
"ProfileScreen": {
"name": "اسم",
"vcLabel": "تسمية VC",
"language": "اللغة",
"credentialRegistry": "سجل الاعتماد",
"bioUnlock": "افتح مع القياسات الحيوية",
"authFactorUnlock": "إلغاء تأمين عامل المصادقة",
"AppMetaData": "حول إنجي",
"logout": "تسجيل خروج",
"revokeLabel": "إبطال VID",
"revokeHeader": "إبطال VID",
"revokingVids": "({{count}}) أنت على وشك إلغاء معرّفات VID.",
"revokingVidsAfter": "هذا يعني أنك لن تكون قادرًا على استخدام أو عرض أي من المعرفات المرتبطة بمعرف (معرفات) VID هؤلاء. \nهل انت متأكد انك تريد المتابعة?",
"empty": "فارغة",
"revokeSuccessful": "تم إبطال VID بنجاح"
},
"QrScreen": {
"title": "QR تسجيل الدخول",
@@ -260,7 +328,7 @@
"checkDomain": "تحقق أيضًا من وجود رمز قفل على شريط العناوين.",
"domainHead": "https://",
"selectId": "حدد المعرف",
"noBindedVc": "لا يوجد {{vcLabel}} مرتبط متاح للتحقق",
"noBindedVc": "لا يوجد البطاقات مرتبط متاح للتحقق",
"back": "عُد",
"confirm": "يتأكد",
"verify": "تحقق",
@@ -279,36 +347,46 @@
"required": "مطلوب"
},
"ReceiveVcScreen": {
"header": "تفاصيل {{vcLabel}}",
"save": "احفظ {{vcLabel}}",
"verifyAndSave": "تحقق وحفظ",
"reject": "يرفض",
"header": "تفاصيل بطاقة ",
"save": "احفظ البطاقة",
"acceptRequest": "قبول الطلب واختيار البطاقة",
"acceptRequestAndVerify": "قبول الطلب والتحقق",
"reject": "رفض",
"discard": "ينبذ",
"goToReceivedVCTab": "عرض تم استلامه {{vcLabel}}",
"goToReceivedVCTab": "عرض البطاقات المستلمة",
"saving": "إنقاذ",
"errors": {
"savingFailed": {
"title": "فشل حفظ {{vcLabel}}",
"message": "شئ ما ذهب خطأ بينما إنقاذ {{vcLabel}} ل ال محل."
"title": "فشل حفظ بطاقة",
"message": "حدث خطأ أثناء حفظ البطاقة في المتجر."
},
"diskFullError": {
"title": "فشل حفظ {{vcLabel}}",
"message": "لا يمكن استلام المزيد من {{vcLabelPlural}} أو حفظه لأن بيانات التطبيق ممتلئة."
"title": "فشل حفظ بطاقة",
"message": "لا يمكن استلام المزيد من بطاقةالبطاقات أو حفظه لأن بيانات التطبيق ممتلئة."
}
}
},
"RequestScreen": {
"bluetoothDenied": "الرجاء تمكين Bluetooth لتتمكن من طلب{{vcLabel}}",
"showQrCode": "اعرض رمز الاستجابة السريعة هذا لطلب المقيم {{vcLabel}}",
"incomingVc": "الوارد {{vcLabel}}",
"bluetoothDenied": "يرجى تمكين البلوتوث لتتمكن من طلب البطاقة",
"bluetoothStateAndroid": "يرجى تشغيل البلوتوث من الإعدادات السريعة لدعم المشاركة المحلية",
"bluetoothStateIos": "يرجى تشغيل البلوتوث من مركز التحكم لدعم المشاركة المحلية",
"showQrCode": "اعرض رمز الاستجابة السريعة هذا لطلب المقيم بطاقة ",
"incomingVc": "بطاقة واردة",
"request": "طلب",
"errors": {
"nearbyDevicesPermissionDenied": {
"message": "مطلوب إذن الأجهزة المجاورة لتتمكن من طلب البطاقة",
"button": "السماح إذن"
}
},
"status": {
"accepted": {
"title": "نجاح!",
"message": "تم استلام {{vcLabel}}بنجاح من {{sender}}"
"message": "تم استلام بطاقة بنجاح من محفظة"
},
"rejected": {
"title": " إشعار",
"message": "لقد رفضت {{sender}} {{vcLabel}}"
"message": "تم تجاهل بطاقة المحفظة بواسطتك"
},
"disconnected": {
"title": "ير متصل",
@@ -320,15 +398,15 @@
"timeoutHint": "يستغرق تبادل معلومات الجهاز وقتًا طويلاً..."
},
"connected": {
"message": "متصل بالجهاز. في انتظار {{vcLabel}}...",
"message": "متصل بالجهاز. في انتظار بطاقة ...",
"timeoutHint": "لم ترد بيانات حتى الآن. هل جهاز الإرسال لا يزال متصلاً؟"
},
"offline": {
"message": "يرجى الاتصال بالإنترنت لتمكين وضع المشاركة عبر الإنترنت"
},
"bleError": {
"title": "فشل التحويل!",
"message": "حدث خطأ أثناء نقل {{vcLabel}}. حاول مرة اخرى."
"title": "فشل التحويل",
"message": "حدث خطأ أثناء نقل بطاقة. حاول مرة اخرى."
}
},
"online": "متصل",
@@ -337,18 +415,24 @@
},
"ScanScreen": {
"header": "مسح رمز الاستجابة السريعة",
"noShareableVcs": "لا تتوفر {{vcLabel}} قابلة للمشاركة.",
"sharingVc": "مشاركة {{vcLabel}}",
"BluetoothStateIos": "تم إيقاف تشغيل البلوتوث ، يرجى تشغيله من مركز التحكم",
"bluetoothStateAndroid": "تم إيقاف تشغيل البلوتوث ، يرجى تشغيله من قائمة الإعدادات السريعة",
"noShareableVcs": "لا تتوفر بطاقات قابلة للمشاركة.",
"bluetoothStateAndroid": "يرجى تشغيل البلوتوث من الإعدادات السريعة لدعم المشاركة المحلية",
"bluetoothStateIos": "يرجى تشغيل البلوتوث من مركز التحكم لدعم المشاركة المحلية",
"enableBluetoothMessage": "يرجى تمكين أذونات البلوتوث لدعم المشاركة المحلية",
"enableBluetoothButtonText": "السماح لأذونات البلوتوث",
"sharingVc": "مشاركة بطاقة ",
"errors": {
"locationDisabled": {
"message": "يجب تمكين خدمات الموقع لوظيفة المسح",
"message": "يجب تمكين خدمات الموقع لمشاركة البطاقة",
"button": "تمكين خدمات الموقع"
},
"locationDenied": {
"message": "إذن الموقع مطلوب لوظيفة المسح",
"message": "مطلوب إذن الموقع لمشاركة البطاقة",
"button": "الموقع"
},
"nearbyDevicesPermissionDenied": {
"message": "مطلوب إذن \"الأجهزة المجاورة\" لتتمكن من مشاركة البطاقة",
"button": "السماح إذن"
}
},
"status": {
@@ -358,40 +442,40 @@
"connectingTimeout": "يستغرق إنشاء الاتصال بعض الوقت. هل الجهاز الآخر مفتوح للاتصالات؟",
"exchangingDeviceInfo": "تبادل معلومات الجهاز ...",
"exchangingDeviceInfoTimeout": "يستغرق الأمر بعض الوقت لتبادل معلومات الجهاز. قد تضطر إلى إعادة الاتصال.",
"invalid": "رمز الاستجابة السريعة غير صالح",
"invalid": "غير صالح",
"offline": "يرجى الاتصال بالإنترنت لمسح رموز QR ضوئيًا باستخدام وضع المشاركة عبر الإنترنت",
"sent": "تم إرسال {{vcLabel}} ...",
"sentHint": "في انتظار أن يحفظ المستلم {{vcLabel}} أو يتجاهلها",
"sent": "تم إرسال البطاقة ...",
"sentHint": "في انتظار أن يحفظ المستلم بطاقة أو يتجاهلها",
"sharing": {
"title": "مشاركة...",
"hint": "الرجاء الانتظار حتى يقبل الجهاز المتلقي المشاركة أو يرفضها.",
"timeoutHint": "تستغرق مشاركتها وقتًا أطول من المتوقع. قد تكون هناك مشكلة في الاتصال."
},
"accepted": {
"title": "تم مشاركة المعرف بنجاح",
"message": "تمت مشاركة {{vcLabel}} بنجاح مع {{receiver}}",
"gotohome": "اذهب الى المنزل"
"title": "نجاح!",
"message": "تمت مشاركة بطاقة بنجاح مع المدقق"
},
"rejected": {
"title": "يلاحظ",
"message": "تم تجاهل {{vcLabel}} بواسطة {{receiver}}"
"message": "تم تجاهل بطاقة بواسطة المدقق"
},
"bleError": {
"title": "فشل التحويل!",
"message": "حدث خطأ أثناء نقل {{vcLabel}}. حاول مرة اخرى."
"title": "فشل التحويل",
"message": "حدث خطأ أثناء نقل بطاقة . حاول مرة اخرى.",
"hint": "خطأ: {{code}}"
}
}
},
"SelectVcOverlay": {
"header": "يشارك {{vcLabel}}",
"chooseVc": "اختر {{vcLabel}} الذي ترغب في المشاركة معه",
"header": "يشارك بطاقة ",
"chooseVc": "اختر بطاقة الذي ترغب في المشاركة معه",
"share": "شارك",
"verifyAndShare": "التحقق من الهوية والمشاركة"
},
"SendVcScreen": {
"reasonForSharing": "سبب المشاركة (اختياري)",
"acceptRequest": "يشارك",
"acceptRequestAndVerify": "شارك مع Selfie",
"acceptRequestAndVerify": "شارك مع سيلفي",
"reject": "رفض",
"consentToPhotoVerification": "أوافق على التقاط صورتي للمصادقة",
"pleaseSelectAnId": "الرجاء تحديد معرف",
@@ -403,11 +487,11 @@
},
"accepted": {
"title": "النجاح!",
"message": "تمت مشاركة {{vcLabel}} بنجاح مع {{receiver}}"
"message": "تمت مشاركة بطاقة بنجاح مع {{receiver}}"
},
"rejected": {
"title": "تنويه",
"message": "تم رفض {{vcLabel}} من قِبل {{receiver}}"
"message": "تم رفض بطاقة من قِبل {{receiver}}"
}
}
},
@@ -425,18 +509,18 @@
},
"SendVcModal": {
"reasonForSharing": "سبب المشاركة (optional)",
"acceptRequest": "قبول الطلب واختيار {{vcLabel}}",
"acceptRequest": "اقبل الطلب واختر البطاقة",
"reject": "رفض",
"statusSharing": {
"title": "مشاركة ..."
},
"statusAccepted": {
"title": "نجاح!",
"message": "تمت مشاركة {{vcLabel}} بنجاح مع{{receiver}}"
"message": "تمت مشاركة بطاقة بنجاح مع{{receiver}}"
},
"statusRejected": {
"title": " إشعار",
"message": "تم رفض {{vcLabel}}من قِبل {{receiver}}"
"message": "تم رفض بطاقتك من قِبل {{receiver}}"
}
},
"WelcomeScreen": {
@@ -455,6 +539,9 @@
"missingPermission": "يستخدم هذا التطبيق الكاميرا لمسح رمز الاستجابة السريعة لجهاز آخر."
},
"allowAccess": "اسمح بالوصول إلى الكاميرا"
},
"errors": {
"genericError": "هناك خطأ ما. من فضلك حاول مرة أخرى بعد بعض من الوقت!"
}
}
}
}

View File

@@ -19,7 +19,9 @@
"requestedBy": "Requested by",
"sentBy": "Sent by",
"deviceRefNumber": "Device reference number",
"name": "Name"
"name": "Name",
"Verifier": "Verifier",
"Wallet": "Wallet"
},
"FaceScanner": {},
"OIDcAuth": {
@@ -74,15 +76,28 @@
"profileAuthenticated": "Profile is authenticated!"
},
"BindingVcWarningOverlay": {
"alert": "Please Confirm",
"BindingWarning": "If you have enabled verification for this credential on another wallet, it will get overridden. Do you want to proceed?",
"yesConfirm": "Yes, I confirm",
"no" : "No"
"alert": "Active device found",
"BindingWarning": "You have already activated online login for this credential on another device. You will no longer be able to use that device for login if you activate it again on this device. Do you want to proceed?",
"yes_confirm": "Yes, I Confirm",
"no": "No",
"Alert": "Alert",
"ok": "Okay",
"credentialRegistry": "Credential Registry",
"errors": {
"savingFailed": {
"title": "Failed to save the Card",
"message": "Something went wrong while saving Card to the store."
},
"diskFullError": {
"title": "Failed to save the Card",
"message": "No more Cards can be received or saved as App Data is full."
}
}
},
"RemoveVcWarningOverlay":{
"alert": "Please Confirm",
"BindingWarning": "Do you want to remove this card",
"yesConfirm": "Yes, I confirm",
"RemoveWarning": "Do you want to remove this card",
"confirm": "Yes, I confirm",
"no" : "No"
},
"AuthScreen": {
@@ -144,13 +159,33 @@
"invalidUin": "UIN invalid",
"invalidVid": "VID invalid",
"missingUin": "UIN not available in database",
"missingVid": "VID not available in database"
"missingVid": "VID not available in database",
"noMessageAvailable": "Try after sometime",
"whileGeneratingOtpErrorIsOccured": "while generating otp error is occurred",
"networkRequestFailed": "Network request failed"
}
}
},
"GetVcModal": {
"errors": {
"input": {
"empty": "The input cannot be empty",
"invalidFormat": "The input format is incorrect"
},
"backend": {
"invalidOtp": "OTP is invalid",
"expiredOtp": "OTP has expired",
"applicationProcessing": "AID is not ready",
"noMessageAvailable": "Try after sometime",
"networkRequestFailed": "Network request failed",
"invalidAid": "AID entered is not available. Please check your AID before entering",
"timeOut": "Timeout"
}
}
},
"DownloadingVcModal": {
"header": "Downloading your {{vcLabel}}",
"bodyText": "This may take some time, we will notify you when your {{vcLabel}} has been downloaded and is available",
"header": "Downloading your Card",
"bodyText": "This may take some time, we will notify you when your Card has been downloaded and is available",
"backButton": "Back home"
},
"GetIdInputModal": {
@@ -164,10 +199,9 @@
"IdInputModal": {
"title": "Retrieve your ID",
"guideLabel": "Select ID type and enter the MOSIP provided UIN or VID of the ID you wish to retrieve",
"generateVc": "Generate {{vcLabel}}",
"downloadID": "Download Card",
"enterId": "Enter {{idType}}",
"noUIN/VID": "Don't have UIN/VID? ",
"generateVc": "Download ID",
"enterId": "Enter your {{idType}}",
"noUIN/VID": "Don't have your UIN/VID?",
"getItHere": "Get it now",
"requestingOTP": "Requesting OTP..."
},
@@ -178,27 +212,36 @@
"resendCode": "Resend Code"
},
"MyVcsTab": {
"downloadID": "Download Card",
"generateVc": "Generate your Cards",
"addVcButton": "Download ID",
"bringYourDigitalID": "Bring Your Digital ID",
"generateVcDescription": "To download your {{vcLabel}} tap Download {{vcLabel}} below",
"downloadingYourId": "Downloading your card, this can take upto 5 minutes"
"downloadingYourId": "Downloading your card, this can take upto 5 minutes",
"errors": {
"savingFailed": {
"title": "Failed to save the Card",
"message": "Something went wrong while saving Card to the store."
},
"diskFullError": {
"title": "Failed to save the Card",
"message": "No more Cards can be received or saved as App Data is full."
}
}
},
"OnboardingOverlay": {
"stepOneTitle":"Protect Privacy",
"stepOneText":"Lorem Ipsum is simply a standard text of the printing and typesetting industry",
"stepTwoTitle": "Secure Sharing",
"stepTwoText": "Share and receive ID switfly using your phone camera to scan QR codes",
"stepThreeTitle": "Trusted Digital Wallet",
"stepThreeText": "Keep your digital credential with you at all times",
"stepFourTitle": "Quick Access",
"stepFourText": "Once generated, ID's are safely stored on your mobile.",
"stepFourButton": "Get Started",
"stepOneTitle": "Welcome!",
"stepOneText": "Keep your digital credential with you at all times. To get started, add Cards to your profile.",
"stepTwoTitle": "Card management",
"stepTwoText": "Once generated, Cards are safely stored on your mobile and can be renamed or shared at any time.",
"stepThreeTitle": "Easy sharing",
"stepThreeText": "Share and receive Cards switfly using your phone camera to scan QR codes.",
"stepThreeButton": "Get started and add Card",
"skip": "Skip",
"next": "Next"
},
"ReceivedVcsTab": {
"noReceivedVcsTitle": "No {{vcLabel}} available yet",
"noReceivedVcsText": "Tap on Request below to receive {{vcLabel}}"
"noReceivedVcsTitle": "No Cards available yet",
"noReceivedVcsText": "Tap on Request below to receive Card"
},
"ViewVcModal": {
"title": "ID Details",
@@ -213,8 +256,8 @@
"editTag": "Rename",
"redirecting": "Redirecting...",
"success": {
"unlocked": "{{vcLabel}} successfully unlocked",
"locked": "{{vcLabel}} successfully locked",
"unlocked": "Card successfully unlocked",
"locked": "Card successfully locked",
"revoked": "VID {{vid}} has been revoked. Any credential containing the same will be removed automatically from the wallet"
}
},
@@ -236,6 +279,21 @@
"useBle": "Powered by BLE",
"useGoogleNearby": "Powered by GoogleNearby"
},
"ProfileScreen": {
"name": "Name",
"vcLabel": "VC Label",
"language": "Language",
"bioUnlock": "Unlock with biometrics",
"authFactorUnlock": "Unlock auth factor",
"AppMetaData": "About Inji",
"logout": "Logout",
"revokeLabel": "Revoke VID",
"revokeHeader": "REVOKE VID",
"revokingVids": "You are about to revoke ({{count}}) VIDs.",
"revokingVidsAfter": "This means you will no longer be able to use or view any of the IDs linked to those VID(s). \nAre you sure you want to proceed?",
"empty": "Empty",
"revokeSuccessful": "VID successfully revoked"
},
"QrScreen": {
"title": "QR Login",
"alignQr": "Align the QR code within the frame to scan",
@@ -243,7 +301,7 @@
"checkDomain": "Also, check that there is a lock icon on the address bar.",
"domainHead": "https://",
"selectId": "Select ID",
"noBindedVc": "No Binded {{vcLabel}} Available to Verify",
"noBindedVc": "No Binded Cards Available to Verify",
"back": "Go Back",
"confirm": "Confirm",
"verify": "Verify",
@@ -262,36 +320,45 @@
"required": "Required"
},
"ReceiveVcScreen": {
"header": "{{vcLabel}} details",
"save": "Save {{vcLabel}}",
"header": "Card details",
"save": "Save Card",
"verifyAndSave": "Verify and save",
"reject": "Reject",
"discard": "Discard",
"goToReceivedVCTab": "View Received {{vcLabel}}",
"goToReceivedVCTab": "View Received Cards",
"saving": "Saving",
"errors": {
"savingFailed": {
"title": "Failed to save {{vcLabelSingular}}",
"message": "Something went wrong while saving {{vcLabelSingular}} to the store."
"title": "Failed to save the Card",
"message": "Something went wrong while saving Card to the store."
},
"diskFullError": {
"title": "Failed to save {{vcLabelPlural}}",
"message": "No more {{vcLabelPlural}} can be received or saved as App Data is full."
"title": "Failed to save the Card",
"message": "No more Cards can be received or saved as App Data is full."
}
}
},
"RequestScreen": {
"bluetoothDenied": "Please enable Bluetooth to be able to request {{vcLabel}}",
"showQrCode": "Display this QR code to request resident {{vcLabel}}",
"incomingVc": "Incoming {{vcLabel}}",
"bluetoothDenied": "Please enable Bluetooth to be able to request Card",
"bluetoothStateAndroid": "Please turn on bluetooth from quick settings to support local sharing",
"bluetoothStateIos": "Please turn on bluetooth from control center to support local sharing",
"showQrCode": "Display this QR code to request resident Card",
"incomingVc": "Incoming Card",
"request": "Request",
"errors": {
"nearbyDevicesPermissionDenied": {
"message": "Nearby Devices permission is required to be able to request Card",
"button": "Allow Permission"
}
},
"status": {
"accepted": {
"title": "Success!",
"message": "{{vcLabel}} has been successfully received from {{sender}}"
"message": "Card has been successfully received from Wallet"
},
"rejected": {
"title": "Notice",
"message": "You discarded {{sender}}'s {{vcLabel}}"
"message": "You discarded Wallet's Card"
},
"disconnected": {
"title": "Disconnected",
@@ -303,15 +370,16 @@
"timeoutHint": "It's taking too long to exchange device info..."
},
"connected": {
"message": "Connected to the device. Waiting for {{vcLabel}}...",
"message": "Connected to the device. Waiting for Card...",
"timeoutHint": "No data received yet. Is sending device still connected?"
},
"offline": {
"message": "Please connect to the internet to enable Online sharing mode"
},
"bleError": {
"title": "Failed to transfer!",
"message": "Something went wrong while transferring {{vcLabel}}. Please try again."
"title": "Failed to transfer",
"message": "Something went wrong while transferring Card. Please try again.",
"hint": "Error: {{code}}"
}
},
"online": "Online",
@@ -320,18 +388,24 @@
},
"ScanScreen": {
"header": "Scan QR Code",
"noShareableVcs": "No shareable {{vcLabel}} are available.",
"sharingVc": "Sharing {{vcLabel}}",
"BluetoothStateIos": "Bluetooth is turned OFF, please turn it ON from control center",
"BluetoothStateAndroid": "Bluetooth is turned OFF, please turn it ON from Quick settings menu",
"noShareableVcs": "No shareable Cards are available.",
"sharingVc": "Sharing Card",
"bluetoothStateAndroid": "Please turn on bluetooth from quick settings to support local sharing",
"bluetoothStateIos": "Please turn on bluetooth from control center to support local sharing",
"enableBluetoothMessage": "Please enable bluetooth permissions to support local sharing",
"enableBluetoothButtonText": "Allow Bluetooth Permissions",
"errors": {
"locationDisabled": {
"message": "Location services must be enabled for the scanning functionality",
"message": "Location services must be enabled to share card",
"button": "Enable location services"
},
"locationDenied": {
"message": "Location permission is required for the scanning functionality",
"message": "Location permission is required to share card",
"button": "Allow access to location"
},
"nearbyDevicesPermissionDenied": {
"message": "Nearby Devices permission is required to be able to share card",
"button": "Allow Permission"
}
},
"status": {
@@ -343,31 +417,31 @@
"exchangingDeviceInfoTimeout": "It's taking a while to exchange device info. You may have to reconnect.",
"invalid": "Invalid QR Code",
"offline": "Please connect to the internet to scan QR codes using Online sharing mode",
"sent": "{{ vcLabel }} has been sent...",
"sentHint": "Waiting for receiver to save or discard your {{ vcLabel }}",
"sent": "Card has been sent...",
"sentHint": "Waiting for receiver to save or discard your Card",
"sharing": {
"title": "Sharing...",
"hint": "Please wait for the receiving device to accept or reject the share.",
"timeoutHint": "It's taking longer than expected to share. There could be a problem with the connection."
},
"accepted": {
"title": "ID shared successfully",
"message": "Your {{vcLabel}} has been successfully shared with {{receiver}}",
"gotohome": "Go to home"
"title": "Success!",
"message": "Your Card has been successfully shared with Verifier"
},
"rejected": {
"title": "Notice",
"message": "Your {{vcLabel}} was discarded by {{receiver}}"
"message": "Your Card was discarded by Verifier"
},
"bleError": {
"title": "Failed to transfer!",
"message": "Something went wrong while transferring {{vcLabel}}. Please try again."
"title": "Failed to transfer",
"message": "Something went wrong while transferring Card. Please try again.",
"hint": "Error: {{code}}"
}
}
},
"SelectVcOverlay": {
"header": "Share {{vcLabel}}",
"chooseVc": "Choose the {{vcLabel}} you'd like to share with",
"header": "Share Card",
"chooseVc": "Choose the Card you'd like to share with",
"share": "Share",
"verifyAndShare": "Verify Identity & Share"
},

View File

@@ -19,7 +19,9 @@
"requestedBy": "Hiniling ni",
"sentBy": "Ipinadala ni",
"deviceRefNumber": "Reference number ng device",
"name": "Pangalan"
"name": "Pangalan",
"Verifier": "Verifier",
"Wallet": "Wallet"
},
"PasscodeVerify": {
"passcodeMismatchError": "Hindi tumugma ang passcode."
@@ -55,29 +57,26 @@
"enableVerification": "I-activate",
"profileAuthenticated": "Na-activate para sa online na pag-login",
"offlineAuthDisabledHeader": "Nakabinbin ang pag-activate para sa online na pag-login",
"offlineAuthDisabledMessage": "Mangyaring i-click ang pindutan sa ibaba upang i-activate ang kredensyal na ito upang magamit para sa online na pag-login."
},
"HomeScreenKebabPopUp": {
"title": "Higit pang mga Opsyon",
"unPinCard": "I-unpin ang Card",
"pinCard": "Pin Card",
"offlineAuthenticationDisabled!": "Na-disable ang offline na pagpapatotoo!",
"offlineAuthDisabledMessage": "Mag-click dito upang paganahin ang kredensyal na ito na magamit para sa offline na pagpapatotoo.",
"viewActivityLog": "Tingnan ang log ng aktibidad",
"removeFromWallet": "Alisin sa wallet",
"revokeId": "Bawiin ang ID",
"revokeMessage": "Bawiin ang virtual ID para sa profile na ito",
"ActivityLog": "Tingnan ang Log ng Aktibidad"
},
"WalletBinding": {
"inProgress": "Isinasagawa",
"profileAuthenticated": "Na-authenticate ang profile!"
},
"BindingVcWarningOverlay": {
"alert": "Pakikumpirma",
"BindingWarning": "Kung na-enable mo ang pag-verify para sa kredensyal na ito sa isa pang wallet, ma-o-override ito. Gusto mo bang magpatuloy?",
"yesConfirm": "Oo, kinukumpirma ko",
"no": "Hindi"
"offlineAuthDisabledMessage": "Mangyaring i-click ang pindutan sa ibaba upang i-activate ang kredensyal na ito upang magamit para sa online na pag-login.",
"vid": "VID",
"verificationEnabledSuccess": "Na-activate para sa online na pag-login",
"goback": "BUMALIK KA",
"BindingWarning": "Kung pinagana mo ang pag-verify para sa kredensyal na ito sa isa pang wallet, ma-override ito. Gusto mo bang magpatuloy?",
"yes_confirm": "Oo, Kinukumpirma ko",
"no": "Hindi",
"Alert": "Alerto",
"ok": "Sige",
"credentialRegistry": "Registry ng Mga Kredensyal",
"errors": {
"savingFailed": {
"title": "Nabigong i-save ang Card",
"message": "Nagkaproblema habang nagse-save ng Card sa tindahan."
},
"diskFullError": {
"title": "Nabigong i-save ang Card",
"message": "Wala nang mga Mga kard na matatanggap o mai-save dahil puno na ang Data ng App."
}
}
},
"AuthScreen": {
"header": "Gusto mo bang gumamit ng biometrics upang i-unlock ang aplikasyon?",
@@ -101,6 +100,11 @@
"received": "natanggap",
"deleted": "tinanggal"
},
"HomeScreen": {
"myVcsTab": "Aking\n{{vcLabel}}",
"receivedVcsTab": "Nakuhang\n{{vcLabel}}",
"historyTab": "Pangyayari"
},
"SettingScreen": {
"header": "Mga setting",
"bioUnlock": "I-unlock gamit ang Biometrics",
@@ -159,13 +163,14 @@
"applicationProcessing": "Hindi pa handa ang AID",
"noMessageAvailable": "Subukan pagkatapos ng ilang oras",
"networkRequestFailed": "Nabigo ang kahilingan sa network",
"invalidAid": "Hindi available ang ipinasok na AID.Pakisuri ang iyong AID bago pumasok",
"timeout": "timeout"
}
}
},
"DownloadingVcModal": {
"header": "Kinukuha ang iyong {{vcLabel}}",
"bodyText": "Maaaring tumagal ito ng ilang oras, ipapaalam namin sayo kung pwede na kunin ang iyong {{vcLabel}}",
"header": "Kinukuha ang iyong Card",
"bodyText": "Maaaring tumagal ito ng ilang oras, ipapaalam namin sayo kung pwede na kunin ang iyong Card",
"backButton": "Bumalik"
},
"GetIdInputModal": {
@@ -177,14 +182,12 @@
"getUIN": "Kumuha ng UIN/VID"
},
"IdInputModal": {
"title": "Kunin ang iyong ID",
"guideLabel": "Piliin ang uri ng ID at ilagay ang MOSIP na ibinigay na UIN o VID ng ID na nais mong makuha",
"generateVc": "Bumuo ng {{vcLabel}}",
"downloadID": "I-download ang ID",
"enterId": "Ipasok ang {{idType}}",
"noUIN/VID": "Walang UIN/VID? ",
"header": "Ilagay ang iyong UIN/VID para i-download ang iyong Card",
"generateVc": "Bumuo ng Aking Card",
"enterId": "Ilagay ang iyong {{idType}}",
"noUIN/VID": "Wala ka bang UIN/VID? Kuhanin dito",
"requestingOTP": "Humihiling ng OTP...",
"getItHere": "Kunin mo na",
"requestingOTP": "Humihiling ng OTP..."
},
"OtpVerificationModal": {
"title": "Pag-verify ng OTP",
@@ -193,25 +196,34 @@
"resendCode": "Ipadala muli ang Code"
},
"MyVcsTab": {
"downloadID": "I-download ang Card",
"bringYourDigitalID": "Dalhin ang Iyong Digital ID",
"generateVcDescription": "Upang i-download ang iyong {{vcLabel}} i-tap ang I-download {{vcLabel}} sa ibaba",
"downloadingYourId": "Ang pagda-download ng iyong card, maaari itong tumagal nang hanggang 5 minuto"
"addVcButton": "Magdagdag ng Card",
"generateVc": "Gumawa ng iyong Mga kard",
"generateVcDescription": "Pindutin ang \"Magdagdag ng Card\" sa ibaba upang makuha ang iyong Card",
"errors": {
"savingFailed": {
"title": "Nabigong i-save ang Card",
"message": "Nagkaproblema habang nagse-save ng Card sa tindahan."
},
"diskFullError": {
"title": "Nabigong i-save ang Card",
"message": "Wala nang mga Mga kard na matatanggap o mai-save dahil puno na ang Data ng App."
}
}
},
"OnboardingOverlay": {
"stepOneTitle": "Ligtas na Pagbabahagi!",
"stepOneText": "Ibahagi at tumanggap ng {{vcLabel}} nang mabilis gamit ang camera ng iyong telepono upang mag-scan ng mga QR code",
"stepTwoTitle": "Pinagkakatiwalaang Digital Wallet",
"stepTwoText": "Panatilihin ang iyong digital na kredensyal sa iyo sa lahat ng oras",
"stepThreeTitle": "Mabilis na pagpasok",
"stepThreeText": "Kapag nabuo na, ang {{vcLabel}} ay ligtas na iniimbak sa iyong mobile.",
"stepThreeButton": "Magsimula",
"stepOneTitle": "Mabuhay!",
"stepOneText": "Panatilihing pribado ang iyong digital na kredensyal sa lahat ng pagkakataon. Upang makapagsimula, magdagdag ng Mga kard sa iyong profile.",
"stepTwoTitle": "Pamamahala ng Card",
"stepTwoText": "Kapag nalikha na ang Mga kard, ito ay ligtas na nakatago sa iyong mobile at maaaring palitan ang pangalan o ibahagi anumang oras.",
"stepThreeTitle": "Madaling pagbabahagi",
"stepThreeText": "Ibahagi at tumanggap ng Mga kard nang mabilis gamit ang camera ng iyong mobile upang mag-scan ng mga QR code.",
"stepThreeButton": "Magsimula at magdagdag ng Card",
"skip": "Laktawan",
"next": "Susunod"
},
"ReceivedVcsTab": {
"noReceivedVcsTitle": "Wala pang {{vcLabel}}",
"noReceivedVcsText": "Pindutin ang Humiling sa ibaba para makatanggap ng {{vcLabel}}"
"noReceivedVcsTitle": "Wala pang Mga kard",
"noReceivedVcsText": "Pindutin ang Humiling sa ibaba para makatanggap ng Card"
},
"ViewVcModal": {
"title": "Mga Detalye ng ID",
@@ -226,9 +238,9 @@
"editTag": "Palitan ang pangalan",
"redirecting": "Nire-redirect...",
"success": {
"unlocked": "Matagumpay na na-unlock ang {{vcLabel}}.",
"locked": "Matagumpay na na-lock ang {{vcLabel}}.",
"revoked": "Ang VID {{vid}} ay binawi. Awtomatikong aalisin sa wallet ang anumang kredensyal na naglalaman ng pareho"
"unlocked": "Ang Card ay matagumpay na na-unlock",
"locked": "Ang Card ay matagumpay na na-lock",
"revoked": "Ang VID {{vid}} ay nakansela. Ang lahat ng mga detalye na naglalaman ng pareho ay awtomatikong aalisin wallet."
}
},
"MainLayout": {
@@ -246,8 +258,23 @@
"AppMetaData": {
"header": "Tungkol kay Inji",
"version": "Bersyon",
"useBle": "Pinapatakbo ng BLE",
"useGoogleNearby": "Pinapagana ng GoogleNearby"
"useBle": "Powered by BLE"
},
"ProfileScreen": {
"name": "Pangalan",
"vcLabel": "Panawag sa VC",
"language": "Wika",
"credentialRegistry": "Registry ng Mga Kredensyal",
"bioUnlock": "I-unlock gamit ang biometrics",
"authFactorUnlock": "Pagbukas ng auth factor",
"AppMetaData": "Tungkol kay Inji",
"logout": "Mag-logout",
"revokeLabel": "Kanselahin ang VID",
"revokeHeader": "KANSELAHIN ANG VID",
"revokingVids": "Kakanselahin mo na ang ({{count}}) na mga VID.",
"revokingVidsAfter": "Nangangahulugan ito na hindi mo na maa-access o matitingnan ang anumang mga ID na naka-link sa mga VID na ito. Sigurado ka bang gusto mong magpatuloy?",
"empty": "Walang laman",
"revokeSuccessful": "Matagumpay na nakansela ang VID"
},
"QrScreen": {
"title": "QR Login",
@@ -256,7 +283,7 @@
"checkDomain": "Gayundin, tingnan kung mayroong icon ng lock sa address bar.",
"domainHead": "https://",
"selectId": "Pumili ng ID",
"noBindedVc": "Available sa Verifyct ID ang SeleNo Binded {{vcLabel}}",
"noBindedVc": "Available sa Verifyct ID ang SeleNo Binded Mga kard",
"back": "Bumalik ka",
"confirm": "Kumpirmahin",
"verify": "I-verify",
@@ -275,36 +302,45 @@
"required": "Kailangan"
},
"ReceiveVcScreen": {
"header": "{{vcLabel}} mga detalye",
"save": "I-save ang {{vcLabel}}",
"verifyAndSave": "I-verify at i-save",
"header": "Mga detalye ng Card",
"save": "I-save ang Card",
"acceptRequest": "Tanggapin ang kahilingan at tumanggap ng Card",
"reject": "Tanggihan",
"discard": "Itapon",
"goToReceivedVCTab": "Natanggap na View {{vcLabel}}",
"goToReceivedVCTab": "Tingnan ang mga Natanggap na Mga kard",
"saving": "Nagtitipid",
"errors": {
"savingFailed": {
"title": "Failed to save {{vcLabelSingular}}",
"message": "Nagkaproblema habang sine-save ang {{vcLabelSingular}} sa tindahan."
"title": "Nabigong i-save ang Card",
"message": "Nagkaproblema habang nagse-save ng Card sa tindahan."
},
"diskFullError": {
"title": "Nabigong i-save ang {{vcLabelPlural}}",
"message": "Wala nang {{vcLabelPlural}} ang matatanggap o mai-save dahil puno na ang Data ng App."
"title": "Nabigong i-save ang Card",
"message": "Wala nang mga Mga kard na matatanggap o mai-save dahil puno na ang Data ng App."
}
}
},
"RequestScreen": {
"bluetoothDenied": "Mangyaring paganahin ang Bluetooth upang makahiling ng {{vcLabel}}",
"showQrCode": "Ipakita ang QR code na ito para humiling ng resident {{vcLabel}}",
"incomingVc": "Padating na {{vcLabel}}",
"bluetoothDenied": "Mangyaring paganahin ang Bluetooth upang makahiling ng Card",
"bluetoothStateAndroid": "Mangyaring i-on ang bluetooth mula sa mga mabilisang setting upang suportahan ang lokal na pagbabahagi",
"bluetoothStateIos": "Mangyaring i-on ang bluetooth mula sa control center upang suportahan ang lokal na pagbabahagi",
"showQrCode": "Ipakita ang QR code na ito para humiling ng resident Card",
"incomingVc": "Padating na Card",
"request": "Hilingin",
"errors": {
"nearbyDevicesPermissionDenied": {
"message": "Kinakailangan ang pahintulot ng Mga Kalapit na Device para makahiling ng Card",
"button": "Pahintulutan"
}
},
"status": {
"accepted": {
"title": "Tagumpay!",
"message": "Tagumpay na nakuha ang {{vcLabel}} mula kay {{sender}}"
"message": "Tagumpay na nakuha ang Card mula kay Wallet"
},
"rejected": {
"title": "Paunawa",
"message": "Iwinaksi ang {{vcLabel}} ni {{sender}}"
"message": "Iwinaksi ang Card ni Wallet"
},
"disconnected": {
"title": "Nadiskonekta",
@@ -316,15 +352,16 @@
"timeoutHint": "Masyadong matagal ang pagpapalitan ng impormasyon ng device..."
},
"connected": {
"message": "Nakakonektang device. Naghihintay para sa {{vcLabel}}...",
"message": "Nakakonektang device. Naghihintay para sa Card...",
"timeoutHint": "Wala pang natanggap na VC. Nakakonekta pa rin ba ang pagpapadala ng device?"
},
"offline": {
"message": "Mangyaring kumonekta sa internet upang paganahin ang Online sharing mode"
},
"bleError": {
"title": "Nabigong ilipat!",
"message": "Nagkaproblema habang inililipat ang {{vcLabel}}. Pakisubukang muli."
"title": "Nabigong ilipat",
"message": "Nagkaproblema habang inililipat ang Card. Pakisubukang muli.",
"hint": "Pagkakamali: {{code}}"
}
},
"online": "Online",
@@ -333,18 +370,24 @@
},
"ScanScreen": {
"header": "I-scan ang QR Code",
"noShareableVcs": "Walang magagamit na maibabahaging {{vcLabel}}..",
"sharingVc": "Pagbabahagi ng {{vcLabel}}",
"BluetoothStateIos": "Naka-OFF ang Bluetooth, paki-ON ito mula sa control center",
"bluetoothStateAndroid": "Naka-OFF ang Bluetooth, paki-ON ito mula sa control center",
"noShareableVcs": "Walang magagamit na maibabahaging Mga kard.",
"bluetoothStateAndroid": "Mangyaring i-on ang bluetooth mula sa mga mabilisang setting upang suportahan ang lokal na pagbabahagi",
"bluetoothStateIos": "Mangyaring i-on ang bluetooth mula sa control center upang suportahan ang lokal na pagbabahagi",
"enableBluetoothMessage": "Mangyaring paganahin ang mga pahintulot ng bluetooth upang suportahan ang lokal na pagbabahagi",
"enableBluetoothButtonText": "Payagan ang Mga Pahintulot sa Bluetooth",
"sharingVc": "Pagbabahagi ng Card",
"errors": {
"locationDisabled": {
"message": "Dapat na nakabukas ang Location services ng iyong mobile para maaaring makapag-scan",
"message": "Dapat na pinagana ang mga serbisyo ng lokasyon upang makapagbahagi ng card",
"button": "Buksan ang location services"
},
"locationDenied": {
"message": "Kinakailangan ang pahintulot sa lokasyon ng iyong mobile para maaaring makapag-scan",
"message": "Kailangan ng pahintulot sa lokasyon para makapagbahagi ng card",
"button": "Payagan ng pahintulot sa lokasyon"
},
"nearbyDevicesPermissionDenied": {
"message": "Kinakailangan ang pahintulot ng Mga Kalapit na Device upang makapagbahagi ng card",
"button": "Pahintulutan"
}
},
"status": {
@@ -353,34 +396,34 @@
"sharingInProgress": "Isinasagawa ang pagbabahagi",
"connectingTimeout": "Ito ay tumatagal ng ilang sandali upang maitaguyod ang koneksyon. Bukas ba ang ibang device para sa mga koneksyon?",
"exchangingDeviceInfo": "Nagpapalitan ng impormasyon ng device...",
"exchangingDeviceInfoTimeout": "Medyo nagtatagal ang palitan ng impormasyon ng device. Maaaring kailanganin mong kumonekta muli.",
"invalid": "Di-wastong QR Code",
"offline": "Mangyaring kumonekta sa internet upang i-scan ang mga QR code gamit ang Online sharing mode",
"sent": "Naipadala na ang {{ vcLabel }}...",
"sentHint": "Naghihintay para sa receiver na i-save o itapon ang iyong {{ vcLabel }}",
"exchangingDeviceInfoTimeout": "Medyo nagtatagal ang paglabas ng impormasyon ng device. Bukas ba ang ibang device para sa mga koneksyon?",
"invalid": "Di-wasto ang QR Code",
"offline": "Mangyaring kumonekta sa internet upang makapag-scan ng QR codes na gumagamit ng Online sharing mode",
"sent": "Naibahagi na ang Card...",
"sentHint": "Iniintay ang nakatanggap na itabi o iwaksi ang iyong Card",
"sharing": {
"title": "Pagbabahagi...",
"hint": "Pakihintay na tanggapin o tanggihan ng tumatanggap na device ang pagbabahagi.",
"timeoutHint": "Mas tumatagal kaysa sa inaasahan ang pagbabahagi. Maaaring may problema sa koneksyon."
},
"accepted": {
"title": "Matagumpay na naibahagi ang ID",
"message": "Ang iyong {{vcLabel}} ay matagumpay na naibahagi sa {{receiver}}",
"gotohome": "Pumunta sa bahay"
"title": "Tagumpay!",
"message": "Ang iyong Card ay matagumpay na naibahagi sa Verifier"
},
"rejected": {
"title": "Pansinin",
"message": "Ang iyong {{vcLabel}} ay itinapon ng {{receiver}}"
"message": "Ang iyong Card ay itinapon ng Verifier"
},
"bleError": {
"title": "Nabigong ilipat!",
"message": "Nagkaproblema habang inililipat ang {{vcLabel}}. Pakisubukang muli."
"title": "Nabigong ilipat",
"message": "Nagkaproblema habang inililipat ang Card. Pakisubukang muli.",
"hint": "Pagkakamali: {{code}}"
}
}
},
"SelectVcOverlay": {
"header": "Ibahagi ang {{vcLabel}}",
"chooseVc": "Piliin ang {{vcLabel}} na gusto mong ibahagi",
"header": "Ibahagi ang Card",
"chooseVc": "Piliin ang Card na gusto mong ibahagi",
"share": "Ibahagi",
"verifyAndShare": "I-verify ang Pagkakakilanlan at Ibahagi"
},
@@ -398,11 +441,11 @@
},
"accepted": {
"title": "Tagumpay!",
"message": "Ang iyong {{vcLabel}} ay matagumpay na naibahagi kay {{receiver}}"
"message": "Ang iyong Card ay matagumpay na naibahagi kay {{receiver}}"
},
"rejected": {
"title": "Pansinin",
"message": "Ang iyong {{vcLabel}} ay tinanggihan ng {{receiver}}"
"message": "Ang iyong Card ay tinanggihan ng {{receiver}}"
}
}
},
@@ -440,4 +483,4 @@
"allowAccess": "Payagan ang access sa camera"
}
}
}
}

View File

@@ -15,463 +15,447 @@
"WALLET_BINDING_SUCCESSFULL": "सक्रियण सफल",
"WALLET_BINDING_FAILURE": "सक्रियकरण असफल"
},
"DeviceInfoList": {
"requestedBy": "द्वारा अनुरोध किया गया",
"sentBy": "द्वारा भेजा गया",
"deviceRefNumber": "डिवाइस संदर्भ संख्या",
"name": "नाम"
},
"PasscodeVerify": {
"passcodeMismatchError": "पासकोड का मिलान नहीं हुआ।"
},
"FaceScanner": {},
"OIDcAuth": {
"title": "OIDC प्रमाणीकरण",
"text": "OIDC प्रदाता UI के साथ प्रतिस्थापित करने के लिए",
"verify": "सत्यापित करना"
},
"QrScanner": {
"missingPermissionText": "यह ऐप दूसरे डिवाइस के क्यूआर कोड को स्कैन करने के लिए कैमरे का इस्तेमाल करता है।",
"allowCameraButton": "कैमरे तक पहुंच की अनुमति दें"
},
"VcDetails": {
"generatedOn": "पर उत्पन्न हुआ",
"status": "दर्जा",
"valid": "वैध",
"photo": "फ़ोटो",
"fullName": "पूरा नाम",
"gender": "लिंग",
"dateOfBirth": "जन्म की तारीख",
"phoneNumber": "फ़ोन नंबर",
"email": "ईमेल",
"address": "पता",
"reasonForSharing": "साझा करने का कारण",
"idType": "पहचान का प्रकार",
"id": "पहचान",
"qrCodeHeader": "क्यू आर संहिता",
"nationalCard": "राष्ट्रीय कार्ड",
"uin": "UIN",
"vid": "VID",
"enableVerification": "सक्रिय",
"profileAuthenticated": "ऑनलाइन लॉगिन के लिए सक्रिय",
"offlineAuthDisabledHeader": "ऑनलाइन लॉगिन के लिए सक्रियता लंबित है",
"offlineAuthDisabledMessage": "ऑनलाइन लॉगिन के लिए उपयोग किए जाने वाले इस क्रेडेंशियल को सक्रिय करने के लिए कृपया नीचे दिए गए बटन पर क्लिक करें।",
"verificationEnabledSuccess": "ऑनलाइन लॉगिन के लिए सक्रिय",
"goback": "वापस जाओ",
"BindingWarning": "यदि आपने किसी अन्य वॉलेट पर इस क्रेडेंशियल के सत्यापन को सक्षम किया है, तो यह ओवरराइड हो जाएगा। क्या आपकी आगे बढ़ने की इच्छा है?",
"yes_confirm": "हां, मैं पुष्टि करता हूं",
"no": "नहीं",
"Alert": "चेतावनी",
"ok": "ठीक"
},
"HomeScreenKebabPopUp": {
"title": "अधिक विकल्प",
"unPinCard": "अनपिन कार्ड",
"pinCard": "पिन कार्ड",
"offlineAuthenticationDisabled!": "ऑफ़लाइन प्रमाणीकरण अक्षम!",
"offlineAuthDisabledMessage": "इस क्रेडेंशियल को ऑफ़लाइन प्रमाणीकरण के लिए उपयोग करने के लिए यहां क्लिक करें।",
"viewActivityLog": "गतिविधि लॉग देखें",
"removeFromWallet": "बटुए से निकालें",
"revokeId": "आईडी निरस्त करें",
"revokeMessage": "इस प्रोफ़ाइल के लिए वर्चुअल आईडी निरस्त करें",
"ActivityLog": "गतिविधि लॉग देखें"
},
"WalletBinding": {
"inProgress": "चालू",
"profileAuthenticated": "प्रोफ़ाइल प्रमाणित है!"
},
"BindingVcWarningOverlay": {
"alert": "कृपया पुष्टि करें",
"BindingWarning": "यदि आपने किसी अन्य वॉलेट पर इस क्रेडेंशियल के सत्यापन को सक्षम किया है, तो यह ओवरराइड हो जाएगा। क्या आपकी आगे बढ़ने की इच्छा है?",
"yesConfirm": "हां, मैं पुष्टि करता हूं",
"no": "नहीं"
},
"AuthScreen": {
"header": "क्या आप एप्लिकेशन को अनलॉक करने के लिए बायोमेट्रिक्स का उपयोग करना चाहेंगे?",
"Description": "Would you like to use biometrics to unlock the application?",
"useBiometrics": "बायोमेट्रिक्स का उपयोग करें",
"usePasscode": "मैं एक पासकोड का उपयोग करना चाहूँगा",
"errors": {
"unavailable": "डिवाइस बायोमेट्रिक्स का समर्थन नहीं करता",
"unenrolled": "बायोमेट्रिक्स का उपयोग करने के लिए, कृपया अपने फ़िंगरप्रिंट को अपनी डिवाइस सेटिंग में दर्ज करें",
"failed": "बायोमेट्रिक्स से प्रमाणित करने में विफल",
"generic": "बायोमेट्रिक्स प्रमाणीकरण में त्रुटि प्रतीत होती है"
}
},
"BiometricScreen": {
"unlock": "फिंगरप्रिंट से अनलॉक करें"
},
"HistoryScreen": {
"noHistory": "अभी तक कोई इतिहास नहीं है",
"downloaded": "डाउनलोड",
"shared": "साझा",
"received": "प्राप्त",
"deleted": "हटाए गए"
},
"SettingScreen": {
"header": "समायोजन",
"bioUnlock": "बायोमेट्रिक्स से अनलॉक करें",
"language": "भाषा",
"aboutInji": "इंजी के बारे में",
"injiTourGuide": "इंजी टूर गाइड",
"logout": "लॉग आउट"
},
"AboutInji": {
"aboutInji": "इंजी के बारे में",
"header": "इंजी के बारे में",
"aboutDetailes": "इंजी एक मोबाइल ऐप है जिसे क्रेडेंशियल स्टोर करने के लिए डिजिटल वॉलेट के रूप में इस्तेमाल किया जा सकता है। यह किसी भी स्थान और समय पर ऑफ़लाइन और ऑनलाइन दोनों तरीकों से पहचान के सत्यापन की अनुमति देता है।",
"forMoreDetailes": "अधिक जानकारी के लिए",
"clickHere": "यहाँ क्लिक करें",
"version": "संस्करण: 0.4.1",
"tuvaliVersion": "तुवाली-संस्करण: v0.3.9-b16c5ea"
},
"HelpScreen": {
"header": "मदद",
"whatisIdDetails?": "आईडी विवरण क्या हैं?",
"howToTurnOnOfflineAuthentication?": "ऑफलाइन प्रमाणीकरण कैसे चालू करें?",
"whatIsRevokeId?": "रिवोक आईडी क्या है?",
"howToViewActivityLog?": "गतिविधि लॉग कैसे देखें?",
"detailes": "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since."
},
"HomeScreen": {
"myVcsTab": "मेरा\n{{vcLabel}}",
"receivedVcsTab": "प्राप्त\n{{vcLabel}}",
"historyTab": "इतिहास"
},
"AddVcModal": {
"header": "अपना कार्ड पुनः प्राप्त करें",
"requestingCredential": "क्रेडेंशियल का अनुरोध कर रहा है...",
"errors": {
"input": {
"empty": "इनपुट खाली नहीं हो सकता",
"invalidFormat": "इनपुट फॉर्मेट गलत है"
},
"backend": {
"invalidOtp": "OTP अमान्य है",
"expiredOtp": "ओटीपी समाप्त हो गया है",
"invalidUin": "UIN अमान्य",
"invalidVid": "VID अमान्य",
"missingUin": "UIN यूआईएन डेटाबेस में उपलब्ध नहीं है",
"missingVid": "VID वीआईडी ​​डेटाबेस में उपलब्ध नहीं है",
"noMessageAvailable": "कुछ देर बाद कोशिश करें",
"whileGeneratingOtpErrorIsOccured": "ओटीपी जनरेट करते समय एरर आ गया",
"networkRequestFailed": "नेटवर्क अनुरोध विफल रहा"
}
}
},
"GetVcModal": {
"errors": {
"input": {
"empty": "इनपुट खाली नहीं हो सकता",
"invalidFormat": "इनपुट फॉर्मेट गलत"
},
"backend": {
"invalidOtp": "ओटीपी अमान्य है",
"expiredOtp": "ओटीपी समाप्त हो गया है",
"applicationProcessing": "AID तैयार नहीं है",
"noMessageAvailable": "कुछ देर बाद कोशिश करें",
"networkRequestFailed": "नेटवर्क अनुरोध विफल रहा",
"timeOut": "समय समाप्त"
}
}
},
"DownloadingVcModal": {
"header": "अपना{{vcLabel}}डाउनलोड कर रहा है",
"bodyText": "इसमें कुछ समय लग सकता है, हम आपको सूचित करेंगे जब आपका {{vcLabel}} डाउनलोड हो जाएगा और उपलब्ध होगा",
"backButton": "बैक होम"
},
"GetIdInputModal": {
"header": "अपना UIN/VID पुनः प्राप्त करें",
"applicationIdLabel": "कृपया अपना आवेदन आईडी दर्ज करें",
"applicationId": "एप्लिकेशन आईडी दर्ज करें",
"requestingOTP": "ओटीपी का अनुरोध...",
"qstnMarkToolTip": "आवेदन आईडी नामांकन के बाद प्राप्त पावती में उपलब्ध है।",
"getUIN": "यूआईएन/वीआईडी ​​प्राप्त करें"
},
"IdInputModal": {
"title": "अपनी आईडी पुनर्प्राप्त करें",
"guideLabel": "आईडी प्रकार का चयन करें और एमओएसआईपी प्रदान की गई यूआईएन या उस आईडी का वीआईडी ​​दर्ज करें जिसे आप पुनर्प्राप्त करना चाहते हैं",
"generateVc": "{{vcLabel}} जनरेट करें",
"downloadID": "डाउनलोड आईडी",
"enterId": "{{idType}} दर्ज करें",
"noUIN/VID": "यूआईएन/वीआईडी ​​नहीं है? ",
"getItHere": "अब समझे",
"requestingOTP": "ओटीपी का अनुरोध..."
},
"OtpVerificationModal": {
"title": "ओटीपी सत्यापन",
"otpSentMessage": "हमने आपके पंजीकृत मोबाइल नंबर पर 6 अंकों का कोड भेज दिया है!",
"resendTheCode": "आप कोड को फिर से भेज सकते हैं ",
"resendCode": "पुन: कोड भेजे"
},
"MyVcsTab": {
"downloadID": "डाउनलोड कार्ड",
"bringYourDigitalID": "अपनी डिजिटल आईडी लाओ",
"generateVcDescription": "अपना {{vcLabel}} डाउनलोड करने के लिए नीचे डाउनलोड {{vcLabel}} टैप करें",
"downloadingYourId": "आपका कार्ड डाउनलोड करने में, इसमें 5 मिनट तक लग सकते हैं"
},
"OnboardingOverlay": {
"stepOneTitle": "सुरक्षित साझाकरण!",
"stepOneText": "QR कोड स्कैन करने के लिए अपने फ़ोन कैमरे का उपयोग करके {{vcLabel}} Switfly को साझा करें और प्राप्त करें",
"stepTwoTitle": "विश्वसनीय डिजिटल वॉलेट",
"stepTwoText": "अपनी डिजिटल साख हमेशा अपने पास रखें",
"stepThreeTitle": "त्वरित ऐक्सेस",
"stepThreeText": "एक बार जेनरेट होने के बाद, {{vcLabel}} आपके मोबाइल में सुरक्षित रूप से स्टोर हो जाते हैं।",
"stepThreeButton": "शुरू हो जाओ",
"skip": "छोडना",
"next": "अगला"
},
"ReceivedVcsTab": {
"noReceivedVcsTitle": "नहीं {{vcLabel}} अभी तक उपलब्ध नहीं है",
"noReceivedVcsText": "प्राप्त करने के लिए नीचे दिए गए अनुरोध पर टैप करें {{vcLabel}}"
},
"ViewVcModal": {
"title": "आईडी विवरण",
"cancel": "रद्द करना",
"lock": "ताला",
"unlock": "अनलॉक",
"rename": "नाम बदलें",
"delete": "मिटाना",
"revoke": "रद्द करना",
"revoking": "आपके वॉलेट में VID {{vid}} के साथ एक क्रेडेंशियल है। इसे रद्द करने से यह अपने आप बटुए से हट जाएगा। क्या आप सुनिश्चित रूप से आगे बढ़ना चाहते हैं?",
"requestingOtp": "ओटीपी का अनुरोध...",
"editTag": "नाम बदलें",
"redirecting": "पुन: निर्देशित...",
"success": {
"unlocked": "{{vcLabel}} सफलतापूर्वक अनलॉक किया गया",
"locked": "{{vcLabel}} सफलतापूर्वक अनलॉक किया गया",
"revoked": "VID {{vid}} निरस्त कर दिया गया है। इसमें शामिल कोई भी क्रेडेंशियल वॉलेट से स्वचालित रूप से हटा दिया जाएगा"
}
},
"MainLayout": {
"home": "होम",
"scan": "स्कैन",
"request": "अनुरोध",
"settings": "सेटिंग्स"
},
"PasscodeScreen": {
"header": "पास कोड सेट करो",
"description": "Lorem Ipsum is simply dummy text of the printing and typesetting industry",
"confirmPasscode": "पासकोड की पुष्टि करें",
"enterPasscode": "अपना पासकोड प्रविष्ट करें"
},
"AppMetaData": {
"header": "इंजी के बारे में",
"version": "संस्करण",
"useBle": "BLE द्वारा संचालित",
"useGoogleNearby": "GoogleNearby द्वारा संचालित"
},
"QrScreen": {
"title": "क्यूआर लॉगिन",
"alignQr": "स्कैन करने के लिए फ्रेम के भीतर क्यूआर कोड को संरेखित करें",
"confirmation": "पुष्टीकरण",
"checkDomain": "यह भी जांचें कि एड्रेस बार पर लॉक आइकन है।",
"domainHead": "https://",
"selectId": "आईडी चुनें",
"noBindedVc": "सत्यापित करने के लिए कोई आबद्ध {{vcLabel}} उपलब्ध नहीं है",
"back": "वापस जाओ",
"confirm": "पुष्टि करें",
"verify": "सत्यापित करना",
"faceAuth": "चेहरा प्रमाणीकरण",
"consent": "अनुमति",
"loading": "लोड हो रहा है...",
"domainWarning": "कृपया उस वेबसाइट के डोमेन की पुष्टि करें जिसे आप नीचे दिए गए क्यूआर कोड से स्कैन कर रहे हैं",
"access": " तक पहुंच का अनुरोध कर रहा है",
"status": "दर्जा",
"successMessage": "आपने सफलतापूर्वक लॉग इन कर लिया है ",
"okay": "ठीक",
"allow": "अनुमति देना",
"cancel": "रद्द करना",
"essentialClaims": "आवश्यक दावे",
"voluntaryClaims": "स्वैच्छिक दावे",
"required": "आवश्यक"
},
"ReceiveVcScreen": {
"header": "{{vcLabel}} विवरण",
"save": "{{vcLabel}} सहेजें",
"verifyAndSave": "सत्यापित करें और सहेजें",
"reject": "अस्वीकार करना",
"discard": "खारिज करना",
"goToReceivedVCTab": "प्राप्त {{vcLabel}} देखें",
"errors": {
"savingFailed": {
"title": "{{vcLabelSingular}} को सहेजने में विफल",
"message": "{{vcLabelSingular}} को स्टोर में सहेजते समय कुछ गड़बड़ी हुई।"
},
"diskFullError": {
"title": "{{vcLabelPlural}} सहेजने में विफल",
"message": "अब और {{vcLabelPlural}} प्राप्त या सहेजा नहीं जा सकता क्योंकि ऐप डेटा भरा हुआ है।"
}
}
},
"RequestScreen": {
"bluetoothDenied": "कृपया ब्लूटूथ को सक्षम करें ताकि वह {{vcLabel}} का अनुरोध कर सके",
"showQrCode": "निवासी {{vcLabel}} का अनुरोध करने के लिए यह क्यूआर कोड प्रदर्शित करें",
"incomingVc": "इनकमिंग {{vcLabel}}",
"request": "प्रार्थना",
"status": {
"accepted": {
"title": "सफलता!",
"message": "{{vcLabel}} {{sender}} से सफलतापूर्वक प्राप्त हो गया है"
},
"rejected": {
"title": "सूचना",
"message": "आपने {{sender}} के {{vcLabel}} को अस्वीकार कर दिया है"
},
"disconnected": {
"title": "डिस्कनेक्ट किया गया",
"message": "कनेक्शन बाधित हो गया था। कृपया पुन: प्रयास करें।"
},
"waitingConnection": "कनेक्शन की प्रतीक्षा कर रहा है...",
"exchangingDeviceInfo": {
"message": "डिवाइस की जानकारी का आदान-प्रदान करना...",
"timeoutHint": "डिवाइस की जानकारी का आदान-प्रदान करने में बहुत अधिक समय लग रहा है..."
},
"connected": {
"message": "डिवाइस से कनेक्ट किया गया। {{vcLabel}} के लिए प्रतीक्षारत...",
"timeoutHint": "अभी तक कोई डेटा प्राप्त नहीं हुआ है. भेजने वाला उपकरण अभी भी जुड़ा हुआ है?"
},
"offline": {
"message": "ऑनलाइन साझाकरण मोड सक्षम करने के लिए कृपया इंटरनेट से कनेक्ट करें"
},
"bleError": {
"title": "स्थानांतरित करने में विफल!",
"message": "{{vcLabel}} को स्थानांतरित करते समय कुछ गलत हो गया। कृपया पुन: प्रयास करें।"
}
"DeviceInfoList": {
"requestedBy": "द्वारा अनुरोध किया गया",
"sentBy": "द्वारा भेजा गया",
"deviceRefNumber": "डिवाइस संदर्भ संख्या",
"name": "नाम",
"Verifier": "सत्यापनकर्ता",
"Wallet": "वॉलेट"
},
"online": "ऑनलाइन",
"offline": "ऑफलाइन",
"gotoSettings": "सेटिंग्स में जाओ"
},
"ScanScreen": {
"header": "स्कैन क्यू आर कोड",
"noShareableVcs": "कोई साझा करने योग्य {{vcLabel}} उपलब्ध नहीं है।",
"sharingVc": "{{vcLabel}} साझा करना",
"BluetoothStateIos": "ब्लूटूथ बंद है, कृपया इसे नियंत्रण केंद्र से चालू करें",
"bluetoothStateAndroid": "ब्लूटूथ बंद है, कृपया इसे त्वरित सेटिंग मेनू से चालू करें",
"errors": {
"locationDisabled": {
"message": "स्थान सेवाओं को स्कैनिंग कार्यक्षमता के लिए सक्षम किया जाना चाहिए",
"button": "स्थान सेवाएं सक्षम करें"
},
"locationDenied": {
"message": "स्कैनिंग कार्यक्षमता के लिए स्थान अनुमति आवश्यक है",
"button": "स्थान तक पहुंच की अनुमति दें"
}
"PasscodeVerify": {
"passcodeMismatchError": "पासकोड का मिलान नहीं हुआ।"
},
"status": {
"inProgress": "चालू",
"establishingConnection": "संपर्क स्थापित करना",
"sharingInProgress": "साझाकरण प्रति पर है",
"connectingTimeout": "कनेक्शन स्थापित करने में कुछ समय लग रहा है। क्या अन्य डिवाइस कनेक्शन के लिए खुला है?",
"exchangingDeviceInfo": "डिवाइस की जानकारी का आदान-प्रदान करना...",
"exchangingDeviceInfoTimeout": "डिवाइस की जानकारी का आदान-प्रदान करने में कुछ समय लग रहा है। आपको फिर से कनेक्ट करना पड़ सकता है।",
"invalid": "अमान्य क्यूआर कोड",
"offline": "ऑनलाइन साझाकरण मोड का उपयोग करके क्यूआर कोड स्कैन करने के लिए कृपया इंटरनेट से कनेक्ट करें",
"sent": "{{vcLabel}} भेज दिया गया है...",
"sentHint": "आपके {{vcLabel }} को सहेजने या छोड़ने के लिए रिसीवर की प्रतीक्षा की जा रही है",
"sharing": {
"title": "शेयरिंग...",
"hint": "शेयर को स्वीकार या अस्वीकार करने के लिए कृपया प्राप्त करने वाले डिवाइस की प्रतीक्षा करें।",
"timeoutHint": "साझा करने में अपेक्षा से अधिक समय लग रहा है। कनेक्शन में कोई समस्या हो सकती है।"
},
"accepted": {
"title": "आईडी सफलतापूर्वक साझा किया गया",
"message": "आपका {{vcLabel}} सफलतापूर्वक {{रिसीवर}} के साथ साझा किया गया",
"gotohome": "घर जाओ"
},
"rejected": {
"title": "सूचना",
"message": "आपका {{vcLabel}} {{रिसीवर}} द्वारा खारिज कर दिया गया था"
},
"bleError": {
"title": "स्थानांतरित करने में विफल!",
"message": "{{vcLabel}} को स्थानांतरित करते समय कुछ गलत हो गया। कृपया पुन: प्रयास करें।"
}
}
},
"SelectVcOverlay": {
"header": "शेयर {{vcLabel}}",
"chooseVc": "वह {{vcLabel}} चुनें जिसके साथ आप साझा करना चाहते हैं",
"share": "बाँट",
"verifyAndShare": "पहचान सत्यापित करें और साझा करें"
},
"SendVcScreen": {
"reasonForSharing": "साझा करने का कारण (वैकल्पिक)",
"acceptRequest": "शेयर करना",
"acceptRequestAndVerify": "सेल्फी के साथ शेयर करें",
"consentToPhotoVerification": "Nagbibigay ako ng pahintulot na kunin ang aking larawan para sa pagpapatunay",
"pleaseSelectAnId": "Please select an ID",
"reject": "अस्वीकार",
"status": {
"sharing": {
"title": "बंटवारे...",
"hint": "शेयर को स्वीकार या अस्वीकार करने के लिए कृपया प्राप्त करने वाले डिवाइस की प्रतीक्षा करें.",
"timeoutHint": "साझा करने में अपेक्षा से अधिक समय लग रहा है. कनेक्शन में कोई समस्या हो सकती है."
},
"accepted": {
"title": "सफलता!",
"message": "आपका {{vcLabel}} को {{रिसीवर}} के साथ सफलतापूर्वक साझा कर दिया गया है"
},
"rejected": {
"title": "सूचना",
"message": "आपके {{vcLabel}} को {{receiver}} ने अस्वीकार कर दिया था"
}
}
},
"VerifyIdentityOverlay": {
"status": {
"verifyingIdentity": "पहचान सत्यापित की जा रही है..."
"FaceScanner": {},
"OIDcAuth": {
"title": "OIDC प्रमाणीकरण",
"text": "OIDC प्रदाता UI के साथ प्रतिस्थापित करने के लिए",
"verify": "सत्यापित करना"
},
"errors": {
"invalidIdentity": {
"title": "पहचान सत्यापित करने में असमर्थ",
"message": "चेहरा नहीं पहचाना। कृपया पुन: प्रयास करें।",
"messageNoRetry": "चेहरा नहीं पहचाना।"
}
}
},
"SendVcModal": {
"reasonForSharing": "साझा करने का कारण (optional)",
"acceptRequest": "अनुरोध स्वीकार करें और चुनें {{vcLabel}}",
"reject": "अस्वीकार करे",
"statusSharing": {
"title": "साझा किया जा रहा है..."
"QrScanner": {
"missingPermissionText": "यह ऐप दूसरे डिवाइस के क्यूआर कोड को स्कैन करने के लिए कैमरे का इस्तेमाल करता है।",
"allowCameraButton": "कैमरे तक पहुंच की अनुमति दें"
},
"statusAccepted": {
"title": "सफलता!",
"message": "आपका {{vcLabel}} के साथ सफलतापूर्वक साझा कर दिया गया है {{receiver}}"
},
"statusRejected": {
"title": "सूचना",
"message": "आपका {{vcLabel}} ने अस्वीकार कर दिया था {{receiver}}"
}
},
"WelcomeScreen": {
"title": "ओपन सोर्स आइडेंटिटी सॉल्यूशन",
"getStarted": "आरंभ करें",
"unlockApp": "एप्लिकेशन अनलॉक करें"
},
"SetupLanguage": {
"header": "भाषा चुनें",
"description": "Lorem Ipsum is simply dummy text of the printing and typesetting industry",
"save": "वरीयता सहेजें"
},
"common": {
"cancel": "रद्द करें",
"save": "सहेजें",
"dismiss": "नकार देना",
"editLabel": "संपादित करें {{label}}",
"tryAgain": "पुनः प्रयास करें",
"camera": {
"VcDetails": {
"generatedOn": "पर उत्पन्न हुआ",
"status": "दर्जा",
"valid": "वैध",
"photo": "फ़ोटो",
"fullName": "पूरा ना",
"gender": "लिंग",
"dateOfBirth": "जन्म की तारीख",
"phoneNumber": "फ़ोन नंबर",
"email": "ईमेल",
"address": "पता",
"reasonForSharing": "साझा करने का कारण",
"idType": "पहचान का प्रकार",
"id": "पहचान",
"nationalCard": "राष्ट्रीय कार्ड",
"uin": "UIN",
"enableVerification": "सक्रिय",
"profileAuthenticated": "ऑनलाइन लॉगिन के लिए सक्रिय",
"offlineAuthDisabledHeader": "ऑनलाइन लॉगिन के लिए सक्रियता लंबित है",
"offlineAuthDisabledMessage": "ऑनलाइन लॉगिन के लिए उपयोग किए जाने वाले इस क्रेडेंशियल को सक्रिय करने के लिए कृपया नीचे दिए गए बटन पर क्लिक करें।",
"vid": "VID",
"verificationEnabledSuccess": "ऑनलाइन लॉगिन के लिए सक्रिय",
"goback": "वापस जाओ",
"BindingWarning": "यदि आपने किसी अन्य वॉलेट पर इस क्रेडेंशियल के सत्यापन को सक्षम किया है, तो यह ओवरराइड हो जाएगा। क्या आपकी आगे बढ़ने की इच्छा है?",
"yes_confirm": "हां, मैं पुष्टि करता हूं",
"no": "नहीं",
"Alert": "चेतावनी",
"ok": "ठीक",
"credentialRegistry": "साख रजिस्ट्री",
"errors": {
"missingPermission": "यह ऐप दूसरे डिवाइस के क्यूआर कोड को स्कैन करने के लिए कैमरे का इस्तेमाल करता है."
},
"allowAccess": "कैमरे तक पहुंच की अनुमति दें"
"savingFailed": {
"title": "कार्ड सहेजने में विफल",
"message1": "कार्ड को स्टोर में सेव करते समय कोई गड़बड़ी हुई.",
"message": "स्टोर में कार्ड सहेजते समय कोई गड़बड़ी हुई।"
},
"diskFullError": {
"title": "कार्ड सहेजने में विफल",
"message": "ऐप डेटा पूर्ण होने के कारण कोई और कार्ड्स प्राप्त या सहेजा नहीं जा सकता है।"
}
}
},
"errors": {
"genericError": "कुछ गलत हो गया। कृपया कुछ समय बाद पुन: प्रयास करें!"
"AuthScreen": {
"header": "क्या आप एप्लिकेशन को अनलॉक करने के लिए बायोमेट्रिक्स का उपयोग करना चाहेंगे?",
"useBiometrics": "बायोमेट्रिक्स का उपयोग करें",
"usePasscode": "मैं एक पासकोड का उपयोग करना चाहूँगा",
"errors": {
"unavailable": "डिवाइस बायोमेट्रिक्स का समर्थन नहीं करता",
"unenrolled": "बायोमेट्रिक्स का उपयोग करने के लिए, कृपया अपने फ़िंगरप्रिंट को अपनी डिवाइस सेटिंग में दर्ज करें",
"failed": "बायोमेट्रिक्स से प्रमाणित करने में विफल",
"generic": "बायोमेट्रिक्स प्रमाणीकरण में त्रुटि प्रतीत होती है"
}
},
"BiometricScreen": {
"unlock": "फिंगरप्रिंट से अनलॉक करें"
},
"HistoryTab": {
"noHistory": "अभी तक कोई इतिहास उपलब्ध नहीं है",
"downloaded": "डाउनलोड किया गया",
"shared": "साझा",
"received": "प्राप्त",
"deleted": "डिलीट"
},
"HomeScreen": {
"myVcsTab": "मेरा\nकार्ड्स",
"receivedVcsTab": "प्राप्त\nकार्ड्स",
"historyTab": "इतिहास"
},
"AddVcModal": {
"requestingCredential": "क्रेडेंशियल का अनुरोध कर रहा है...",
"errors": {
"input": {
"empty": "इनपुट खाली नहीं हो सकता",
"invalidFormat": "इनपुट फॉर्मेट गलत है"
},
"backend": {
"invalidOtp": "OTP अमान्य है",
"expiredOtp": "ओटीपी समाप्त हो गया है",
"invalidUin": "UIN अमान्य",
"invalidVid": "VID अमान्य",
"missingUin": "UIN यूआईएन डेटाबेस में उपलब्ध नहीं है",
"missingVid": "VID वीआईडी ​​डेटाबेस में उपलब्ध नहीं है",
"noMessageAvailable": "कुछ देर बाद कोशिश करें",
"whileGeneratingOtpErrorIsOccured": "ओटीपी जनरेट करते समय एरर आ गया",
"networkRequestFailed": "नेटवर्क अनुरोध विफल रहा"
}
}
},
"GetVcModal": {
"errors": {
"input": {
"empty": "इनपुट खाली नहीं हो सकता",
"invalidFormat": "इनपुट फॉर्मेट गलत"
},
"backend":{
"invalidOtp": "ओटीपी अमान्य है",
"expiredOtp": "ओटीपी समाप्त हो गया है",
"applicationProcessing": "AID तैयार नहीं है",
"noMessageAvailable": "कुछ देर बाद कोशिश करें",
"networkRequestFailed": "नेटवर्क अनुरोध विफल रहा",
"invalidAid": "दर्ज सहायता उपलब्ध नहीं है। प्रवेश करने से पहले कृपया अपने सहायता की जाँच करें",
"timeOut": "समय समाप्त"
}
}
},
"DownloadingVcModal": {
"header": "अपना कार्ड डाउनलोड कर रहा है",
"bodyText": "इसमें कुछ समय लग सकता है, हम आपको सूचित करेंगे जब आपका कार्ड डाउनलोड हो जाएगा और उपलब्ध होगा",
"backButton": "बैक होम"
},
"GetIdInputModal": {
"header": "अपना यूआईएन प्राप्त करने के लिए अपनी एप्लिकेशन ID दर्ज करें",
"getUIN": "UIN/VID ​​प्राप्त करें",
"applicationId": "आवेदन ID",
"requestingOTP": "OTP का अनुरोध...",
"qstnMarkToolTip": "आवेदन ID नामांकन के बाद प्राप्त पावती में उपलब्ध है।"
},
"IdInputModal": {
"header": "अपना कार्ड डाउनलोड करने के लिए अपना UIN/VID ​​दर्ज करें",
"generateVc": "मेरा कार्ड जनरेट करें",
"enterId": "अपना {{idType}} दर्ज करें",
"noUIN/VID": "आपका UIN/VID ​​नहीं है? इसे यहां लाओ",
"requestingOTP": "OTP का अनुरोध..."
},
"OtpVerificationModal": {
"enterOtp": "हमारे द्वारा भेजा गया 6 अंकों का सत्यापन कोड दर्ज करें",
"header": "ओटीपी सत्यापन"
},
"MyVcsTab": {
"addVcButton": "कार्ड जोड़ें",
"generateVc": "अपना कार्ड्स जेनरेट करें",
"generateVcDescription": "अपना कार्ड डाउनलोड करने के लिए नीचे \"कार्ड जोड़ें\" पर टैप करें",
"errors": {
"savingFailed": {
"title": "कार्ड सहेजने में विफल",
"message1": "कार्ड को स्टोर में सेव करते समय कोई गड़बड़ी हुई.",
"message": "स्टोर में कार्ड सहेजते समय कोई गड़बड़ी हुई।"
},
"diskFullError": {
"title": "कार्ड सहेजने में विफल",
"message": "ऐप डेटा पूर्ण होने के कारण कोई और कार्ड्स प्राप्त या सहेजा नहीं जा सकता है।"
}
}
},
"OnboardingOverlay": {
"stepOneTitle": "स्वागत है!",
"stepOneText": "अपना डिजिटल क्रेडेंशियल हमेशा अपने पास रखें। आरंभ करने के लिए, अपनी प्रोफ़ाइल में कार्ड्स जोड़ें।",
"stepTwoTitle": "कार्ड प्रबंधन",
"stepTwoText": "एक बार जनरेट हो जाने पर, कार्ड्स आपके मोबाइल पर सुरक्षित रूप से संगृहीत हो जाते हैं और उनका नाम बदला जा सकता है या किसी भी समय साझा किया जा सकता है।",
"stepThreeTitle": "आसान साझा करना",
"stepThreeText": "QR कोड स्कैन करने के लिए अपने फ़ोन कैमरे का उपयोग करके कार्ड्स switfly साझा करें और प्राप्त करें।",
"stepThreeButton": "आरंभ करें और कार्ड जोड़ें"
},
"ReceivedVcsTab": {
"noReceivedVcsTitle": "नहीं कार्ड्स अभी तक उपलब्ध नहीं है",
"noReceivedVcsText": "प्राप्त करने के लिए नीचे दिए गए अनुरोध पर टैप करें कार्ड"
},
"ViewVcModal": {
"cancel": "रद्द करना",
"lock": "लॉक",
"unlock": "अनलॉक",
"rename": "नाम बदले",
"delete": "हटाएं",
"revoke": "निरस्त",
"revoking": "आपके वॉलेट में VID {{vid}} के साथ एक क्रेडेंशियल है. ಇದನ್ನು ಹಿಂತೆಗೆದುಕೊಳ್ಳುವುದರಿಂದ ಅದನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ವ್ಯಾಲೆಟ್‌ನಿಂದ ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ. क्या आप सुनिश्चित रूप से आगे बढ़ना चाहते हैं?",
"requestingOtp": "OTP का अनुरोध...",
"editTag": "टैग संपादित करें",
"redirecting": "पुन: निर्देशित...",
"inProgress": "लोड हो रहा है...",
"success": {
"unlocked": "कार्ड सफलतापूर्वक अनलॉक किया गया",
"locked": "कार्ड सफलतापूर्वक लॉक हो गया",
"revoked": "VID {{vid}} निरस्त कर दिया गया है. इसमें शामिल कोई भी क्रेडेंशियल वॉलेट से स्वचालित रूप से हटा दिया जाएगा"
}
},
"MainLayout": {
"home": "घर",
"scan": "स्कैन",
"request": "अनुरोध",
"settings": "सेटिंग्स"
},
"PasscodeScreen": {
"header": "अपना आवेदन सुरक्षित करने के लिए पासकोड सेट करें",
"confirmPasscode": "अपना पासकोड कन्फर्म करें",
"enterPasscode": "अपना पासकोड दर्ज करे"
},
"AppMetaData":{
"header": "इंजी के बारे में",
"version": "संस्करण",
"useBle": "Powered by BLE"
},
"ProfileScreen": {
"name": "नाम",
"vcLabel": "वीसी लेबल",
"language": "भाषा",
"credentialRegistry": "साख रजिस्ट्री",
"bioUnlock": "बायोमेट्रिक्स से अनलॉक करें",
"authFactorUnlock": "अनलॉक ऑथ फैक्टर",
"AppMetaData": "इंजी के बारे में",
"logout": "लॉग आउट",
"revokeLabel": "VID रद्द करना",
"revokeHeader": "VID रद्द करना",
"revokingVids": "आप ({{count}}) VID's को निरस्त करने वाले हैं .",
"revokingVidsAfter": "इसका अर्थ है कि अब आप उनसे लिंक की गई किसी भी आईडी का उपयोग या देखने में सक्षम नहीं होंगे VID(s). \nक्या आप सुनिश्चित रूप से आगे बढ़ना चाहते हैं?",
"empty": "खाली",
"revokeSuccessful": "VID को सफलतापूर्वक निरस्त कर दिया गया"
},
"QrScreen": {
"title": "क्यूआर लॉगिन",
"alignQr": "स्कैन करने के लिए फ्रेम के भीतर क्यूआर कोड को संरेखित करें",
"confirmation": "पुष्टीकरण",
"checkDomain": "यह भी जांचें कि एड्रेस बार पर लॉक आइकन है।",
"domainHead": "https://",
"selectId": "आईडी चुनें",
"noBindedVc": "सत्यापित करने के लिए कोई आबद्ध कार्ड्स उपलब्ध नहीं है",
"back": "वापस जाओ",
"confirm": "पुष्टि करें",
"verify": "सत्यापित करना",
"faceAuth": "चेहरा प्रमाणीकरण",
"consent": "अनुमति",
"loading": "लोड हो रहा है...",
"domainWarning": "कृपया उस वेबसाइट के डोमेन की पुष्टि करें जिसे आप नीचे दिए गए क्यूआर कोड से स्कैन कर रहे हैं",
"access": " तक पहुंच का अनुरोध कर रहा है",
"status": "दर्जा",
"successMessage":"आपने सफलतापूर्वक लॉग इन कर लिया है ",
"okay": "ठीक"
},
"ReceiveVcScreen": {
"header": "कार्ड विवरण",
"save": "सेव कार्ड",
"acceptRequest": "अनुरोध स्वीकार करें और कार्ड प्राप्त करें",
"acceptRequestAndVerify": "अनुरोध स्वीकार करें और सत्यापित करें",
"reject": "अस्वीकार",
"discard": "खारिज करना",
"goToReceivedVCTab": "प्राप्त कार्ड्स देखें",
"saving": "सहेजा जा रहा है",
"errors": {
"savingFailed": {
"title": "कार्ड सहेजने में विफल",
"message": "कार्ड को स्टोर में सेव करते समय कोई गड़बड़ी हुई."
},
"diskFullError": {
"title": "कार्ड सहेजने में विफल",
"message": "ऐप डेटा पूर्ण होने के कारण कोई और कार्ड्स प्राप्त या सहेजा नहीं जा सकता है।"
}
}
},
"RequestScreen": {
"bluetoothDenied": "कृपया ब्लूटूथ को सक्षम करें ताकि वह कार्ड का अनुरोध कर सके",
"bluetoothStateAndroid": "स्थानीय साझाकरण का समर्थन करने के लिए कृपया त्वरित सेटिंग से ब्लूटूथ चालू करें",
"bluetoothStateIos": " स्थानीय साझाकरण का समर्थन करने के लिए कृपया नियंत्रण केंद्र से ब्लूटूथ चालू करें",
"showQrCode": "निवासी कार्ड का अनुरोध करने के लिए यह क्यूआर कोड प्रदर्शित करें",
"incomingVc": "इनकमिंग कार्ड",
"request": "प्रार्थना",
"errors": {
"nearbyDevicesPermissionDenied": {
"message": "कार्ड का अनुरोध करने में सक्षम होने के लिए आस-पास के उपकरणों की अनुमति आवश्यक है",
"button": "अनुमति दें"
}
},
"status": {
"accepted": {
"title": "सफलता!",
"message": "कार्ड वॉलेट से सफलतापूर्वक प्राप्त हो गया है"
},
"rejected": {
"title": "सूचना",
"message": "आपने वॉलेट के कार्ड को अस्वीकार कर दिया है"
},
"disconnected": {
"title": "डिस्कनेक्ट किया गया",
"message": "कनेक्शन बाधित हो गया था। कृपया पुन: प्रयास करें।"
},
"waitingConnection": "कनेक्शन की प्रतीक्षा कर रहा है...",
"exchangingDeviceInfo": {
"message": "डिवाइस की जानकारी का आदान-प्रदान करना...",
"timeoutHint": "डिवाइस की जानकारी का आदान-प्रदान करने में बहुत अधिक समय लग रहा है..."
},
"connected": {
"message": "डिवाइस से कनेक्ट किया गया। कार्ड के लिए प्रतीक्षारत...",
"timeoutHint": "अभी तक कोई डेटा प्राप्त नहीं हुआ है. भेजने वाला उपकरण अभी भी जुड़ा हुआ है?"
},
"offline": {
"message": "ऑनलाइन साझाकरण मोड सक्षम करने के लिए कृपया इंटरनेट से कनेक्ट करें"
},
"bleError": {
"title": "स्थानांतरित करने में विफल",
"message": "कार्ड को स्थानांतरित करते समय कुछ गलत हो गया। कृपया पुन: प्रयास करें।",
"hint": "गलती: {{code}}"
}
},
"online": "ऑनलाइन",
"offline": "ऑफलाइन",
"gotoSettings": "सेटिंग्स में जाओ"
},
"ScanScreen": {
"header": "क्यूआर कोड स्कैन करे",
"noShareableVcs": "कोई साझा करने योग्य कार्ड्स उपलब्ध नहीं है।",
"bluetoothStateAndroid": "स्थानीय साझाकरण का समर्थन करने के लिए कृपया त्वरित सेटिंग से ब्लूटूथ चालू करें",
"bluetoothStateIos": " स्थानीय साझाकरण का समर्थन करने के लिए कृपया नियंत्रण केंद्र से ब्लूटूथ चालू करें",
"enableBluetoothMessage": "स्थानीय साझाकरण का समर्थन करने के लिए कृपया ब्लूटूथ अनुमतियां सक्षम करें",
"enableBluetoothButtonText": "ब्लूटूथ अनुमतियों की अनुमति दें",
"sharingVc": "शेयरिंग कार्ड",
"errors": {
"locationDisabled": {
"message": "कार्ड साझा करने के लिए स्थान सेवाओं को सक्षम किया जाना चाहिए",
"button": "स्थान सेवाएं सक्षम करें"
},
"locationDenied": {
"message": "कार्ड साझा करने के लिए स्थान की अनुमति आवश्यक है",
"button": "स्थान तक पहुंच की अनुमति दें"
},
"nearbyDevicesPermissionDenied": {
"message": "कार्ड साझा करने में सक्षम होने के लिए आस-पास के उपकरणों की अनुमति आवश्यक है",
"button": "अनुमति दें"
}
},
"status": {
"connecting": "कनेक्टिंग...",
"connectingTimeout": "कनेक्शन स्थापित करने में कुछ समय लग रहा है. क्या अन्य डिवाइस कनेक्शन के लिए खुला है?",
"exchangingDeviceInfo": "डिवाइस की जानकारी का आदान-प्रदान...",
"exchangingDeviceInfoTimeout": "It's taking a while to exchange device info. You may have to reconnect.",
"invalid": "अमान्य क्यूआर कोड",
"offline": "ऑनलाइन साझाकरण मोड का उपयोग करके क्यूआर कोड स्कैन करने के लिए कृपया इंटरनेट से कनेक्ट करें",
"sent": "कार्ड भेज दिया गया है...",
"sentHint": "आपके कार्ड को सहेजने या छोड़ने के लिए रिसीवर की प्रतीक्षा की जा रही है",
"sharing": {
"title": "साझा कर रहा है...",
"hint": "शेयर को स्वीकार या अस्वीकार करने के लिए कृपया प्राप्त करने वाले डिवाइस की प्रतीक्षा करें।",
"timeoutHint": "साझा करने में अपेक्षा से अधिक समय लग रहा है। कनेक्शन में कोई समस्या हो सकती है।"
},
"accepted": {
"title": "सफलता!",
"message": "आपका कार्ड सफलतापूर्वक सत्यापनकर्ता के साथ साझा किया गया"
},
"rejected": {
"title": "सूचना",
"message": "आपका कार्ड सत्यापनकर्ता द्वारा खारिज कर दिया गया था"
},
"bleError": {
"title": "स्थानांतरित करने में विफल",
"message": "कार्ड को स्थानांतरित करते समय कुछ गलत हो गया। कृपया पुन: प्रयास करें।",
"hint": "गलती: {{code}}"
}
}
},
"SelectVcOverlay": {
"header": "शेयर कार्ड",
"chooseVc": "वह कार्ड चुनें जिसके साथ आप साझा करना चाहते हैं",
"share": "बाँट",
"verifyAndShare": "पहचान सत्यापित करें और साझा करें"
},
"SendVcScreen": {
"reasonForSharing": "साझा करने का कारण (वैकल्पिक)",
"acceptRequest": "शेयर करना",
"acceptRequestAndVerify": "सेल्फी के साथ शेयर करें",
"reject": "अस्वीकार",
"status": {
"sharing": {
"title": "बंटवारे...",
"hint": "शेयर को स्वीकार या अस्वीकार करने के लिए कृपया प्राप्त करने वाले डिवाइस की प्रतीक्षा करें.",
"timeoutHint": "साझा करने में अपेक्षा से अधिक समय लग रहा है. कनेक्शन में कोई समस्या हो सकती है."
},
"accepted": {
"title": "सफलता!",
"message": "आपका कार्ड को {{receiver}} के साथ सफलतापूर्वक साझा कर दिया गया है"
},
"rejected": {
"title": "सूचना",
"message": "आपके कार्ड को {{receiver}} ने अस्वीकार कर दिया था"
}
},
"consentToPhotoVerification": "मैं प्रमाणीकरण के लिए अपनी फोटो लेने की सहमति देता हूं"
},
"VerifyIdentityOverlay": {
"status": {
"verifyingIdentity": "पहचान सत्यापित की जा रही है..."
},
"errors": {
"invalidIdentity": {
"title": "पहचान सत्यापित करने में असमर्थ",
"message": "चेहरा नहीं पहचाना। कृपया पुन: प्रयास करें।",
"messageNoRetry": "चेहरा नहीं पहचाना।"
}
}
},
"SendVcModal": {
"reasonForSharing": "साझा करने का कारण (optional)",
"acceptRequest": "अनुरोध स्वीकार करें और चुनें कार्ड",
"reject": "अस्वीकार करे",
"statusSharing": {
"title": "साझा किया जा रहा है..."
},
"statusAccepted": {
"title": "सफलता!",
"message": "आपका कार्ड के साथ सफलतापूर्वक साझा कर दिया गया है {{receiver}}"
},
"statusRejected": {
"title": "सूचना",
"message": "आपका कार्ड ने अस्वीकार कर दिया था {{receiver}}"
}
},
"WelcomeScreen": {
"title": "ओपन सोर्स आइडेंटिटी सॉल्यूशन",
"getStarted": "आरंभ करें",
"unlockApp": "एप्लिकेशन अनलॉक करें"
},
"common": {
"cancel": "रद्द करें",
"save": "सहेजें",
"dismiss": "नकार देना",
"editLabel": "संपादित करें {{label}}",
"tryAgain": "पुनः प्रयास करें",
"camera": {
"errors": {
"missingPermission": "यह ऐप दूसरे डिवाइस के क्यूआर कोड को स्कैन करने के लिए कैमरे का इस्तेमाल करता है."
},
"allowAccess": "कैमरे तक पहुंच की अनुमति दें"
},
"errors": {
"genericError": "कुछ गलत हो गया। कृपया कुछ समय बाद पुन: प्रयास करें!"
}
}
}
}

Some files were not shown because too many files have changed in this diff Show More