diff --git a/.env b/.env new file mode 100644 index 0000000..bb08e18 --- /dev/null +++ b/.env @@ -0,0 +1,65 @@ +basicAuthCredentials=wqnmqqsjyvwv:nqrYJP@1737XrXlBl +accountSIDTwillo=QFx0qy456juj3839xuy2194q629q1fj0y7XrXlBl +visionApi=3pALsqSSYTvzp69Q5FMIgbzjG6Z1zktJXrXlBl +serverPHP=https://api.sefer.live/sefer +serverPHPContabo=https://globalsefer.online/sefer +ocpApimSubscriptionKey=0f5dacccdbce4131b1a5f952996302e3 +smsPasswordEgypt="J)Vh=qb/@MXrXlBl" +keyOfApp=nqryjp@1737wqnmqqsjyzjujljksvceiXrXlBl +emailService=seferservice@sefer.live +anthropicAIkeySeferNew=zg-qbc-qvo39-n4VdMQ5nuJeIYhMN4PDYr7qox3-t2i1Lh7aNTDfYF-Gf8whUJZCs47EeelKn8_UcmUMmiSLaf0UJg0DvUlQrDt-76CRrkQQXrXlBl + + +a=q +b=x +c=f +d=y +e=j +f=u +g=k +h=w +i=o +j=e +k=g +l=r +m=n +n=b +o=i +p=v +q=a +r=l +s=z +t=c +u=h +v=p +w=t +x=d +y=s +z=m + +A=Q +B=X +C=F +D=Y +E=J +F=U +G=K +H=W +I=O +J=E +K=G +L=R +M=N +N=B +O=I +P=V +Q=A +R=L +S=Z +T=C +U=H +V=P +W=T +X=D +Y=S +Z=M \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..29a3a50 --- /dev/null +++ b/.gitignore @@ -0,0 +1,43 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/.metadata b/.metadata new file mode 100644 index 0000000..6eb54a1 --- /dev/null +++ b/.metadata @@ -0,0 +1,45 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: "761747bfc538b5af34aa0d3fac380f1bc331ec49" + channel: "stable" + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + base_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + - platform: android + create_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + base_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + - platform: ios + create_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + base_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + - platform: linux + create_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + base_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + - platform: macos + create_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + base_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + - platform: web + create_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + base_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + - platform: windows + create_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + base_revision: 761747bfc538b5af34aa0d3fac380f1bc331ec49 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/analysis_options.yaml b/analysis_options.yaml new file mode 100644 index 0000000..0d29021 --- /dev/null +++ b/analysis_options.yaml @@ -0,0 +1,28 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/android/.gitignore b/android/.gitignore new file mode 100644 index 0000000..6f56801 --- /dev/null +++ b/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties +**/*.keystore +**/*.jks diff --git a/android/app/build.gradle b/android/app/build.gradle new file mode 100644 index 0000000..1f11725 --- /dev/null +++ b/android/app/build.gradle @@ -0,0 +1,61 @@ +plugins { + id "com.android.application" + // START: FlutterFire Configuration + id 'com.google.gms.google-services' + // END: FlutterFire Configuration + id "kotlin-android" + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id "dev.flutter.flutter-gradle-plugin" +} + +def localProperties = new Properties() +def localPropertiesFile = rootProject.file("local.properties") +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader("UTF-8") { reader -> + localProperties.load(reader) + } +} + +def flutterVersionCode = localProperties.getProperty("flutter.versionCode") +if (flutterVersionCode == null) { + flutterVersionCode = "1" +} + +def flutterVersionName = localProperties.getProperty("flutter.versionName") +if (flutterVersionName == null) { + flutterVersionName = "1.0" +} + +android { + namespace = "com.example.service" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId = "com.example.service" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. + minSdk = 23 + targetSdk = flutter.targetSdkVersion + versionCode = 7 + versionName = '1.07' + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig = signingConfigs.debug + } + } +} + +flutter { + source = "../.." +} diff --git a/android/app/google-services.json b/android/app/google-services.json new file mode 100644 index 0000000..9d4a877 --- /dev/null +++ b/android/app/google-services.json @@ -0,0 +1,194 @@ +{ + "project_info": { + "project_number": "594687661098", + "project_id": "ride-b1bd8", + "storage_bucket": "ride-b1bd8.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:594687661098:android:8ec72f5f8b0b0ab8595f53", + "android_client_info": { + "package_name": "com.example.sefer_admin1" + } + }, + "oauth_client": [ + { + "client_id": "594687661098-2u640akrb3k7sak5t0nqki6f4v6hq1bq.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCyfwRXTwSTLOFQSQgN5p7QZgGJVZnEKq0" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "594687661098-2hfb9gumub3j60vb7mqtq794k8spihuh.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "594687661098-8e26699cris2k3nj5msj1osi59it9kpf.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "com.mobileapp.store.ride" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:594687661098:android:f81fcce13962121a595f53", + "android_client_info": { + "package_name": "com.example.service" + } + }, + "oauth_client": [ + { + "client_id": "594687661098-4se67ebhbsolafg2n3cg6aplq5mplfgu.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.example.service", + "certificate_hash": "765bbb7c5d30bc58a7ba44372db614d6bbe6e34d" + } + }, + { + "client_id": "594687661098-2u640akrb3k7sak5t0nqki6f4v6hq1bq.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCyfwRXTwSTLOFQSQgN5p7QZgGJVZnEKq0" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "594687661098-2hfb9gumub3j60vb7mqtq794k8spihuh.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "594687661098-8e26699cris2k3nj5msj1osi59it9kpf.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "com.mobileapp.store.ride" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:594687661098:android:683982cbf71fa423595f53", + "android_client_info": { + "package_name": "com.mobileapp.store.ride" + } + }, + "oauth_client": [ + { + "client_id": "594687661098-2dhoogl7be9phobfbu8bbg1sj567iv88.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.mobileapp.store.ride", + "certificate_hash": "9bf3876c66e490f30cd7982fa972d8e52e0edbb6" + } + }, + { + "client_id": "594687661098-4f8qbb4r223su1pphor33l3oe0ie2v46.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.mobileapp.store.ride", + "certificate_hash": "765bbb7c5d30bc58a7ba44372db614d6bbe6e34d" + } + }, + { + "client_id": "594687661098-2u640akrb3k7sak5t0nqki6f4v6hq1bq.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCyfwRXTwSTLOFQSQgN5p7QZgGJVZnEKq0" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "594687661098-2hfb9gumub3j60vb7mqtq794k8spihuh.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "594687661098-8e26699cris2k3nj5msj1osi59it9kpf.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "com.mobileapp.store.ride" + } + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:594687661098:android:46557bd4f534b5bb595f53", + "android_client_info": { + "package_name": "com.sefer_driver" + } + }, + "oauth_client": [ + { + "client_id": "594687661098-7mj1ngkp5aodosos3gsr4252qfemuvan.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.sefer_driver", + "certificate_hash": "765bbb7c5d30bc58a7ba44372db614d6bbe6e34d" + } + }, + { + "client_id": "594687661098-op7a9cpgm9dilgh8nl48bu6aor55f7qj.apps.googleusercontent.com", + "client_type": 1, + "android_info": { + "package_name": "com.sefer_driver", + "certificate_hash": "6f83a0b80b7e1b30b3dd42811cbc2c60ee931a3b" + } + }, + { + "client_id": "594687661098-2u640akrb3k7sak5t0nqki6f4v6hq1bq.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyCyfwRXTwSTLOFQSQgN5p7QZgGJVZnEKq0" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "594687661098-2hfb9gumub3j60vb7mqtq794k8spihuh.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "594687661098-8e26699cris2k3nj5msj1osi59it9kpf.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "com.mobileapp.store.ride" + } + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..f2af316 --- /dev/null +++ b/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/app/src/main/kotlin/com/example/service/MainActivity.kt b/android/app/src/main/kotlin/com/example/service/MainActivity.kt new file mode 100644 index 0000000..7daaa19 --- /dev/null +++ b/android/app/src/main/kotlin/com/example/service/MainActivity.kt @@ -0,0 +1,5 @@ +package com.example.service + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() diff --git a/android/app/src/main/res/drawable-v21/launch_background.xml b/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..f74085f --- /dev/null +++ b/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/android/app/src/main/res/drawable/app_icon.png b/android/app/src/main/res/drawable/app_icon.png new file mode 100644 index 0000000..650dee9 Binary files /dev/null and b/android/app/src/main/res/drawable/app_icon.png differ diff --git a/android/app/src/main/res/drawable/launch_background.xml b/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..304732f --- /dev/null +++ b/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000..db77bb4 Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-hdpi/launcher_icon.png b/android/app/src/main/res/mipmap-hdpi/launcher_icon.png new file mode 100644 index 0000000..85d20b4 Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/launcher_icon.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000..17987b7 Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/launcher_icon.png b/android/app/src/main/res/mipmap-mdpi/launcher_icon.png new file mode 100644 index 0000000..01d4d25 Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/launcher_icon.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000..09d4391 Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png b/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png new file mode 100644 index 0000000..3d8f752 Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000..d5f1c8d Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png b/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png new file mode 100644 index 0000000..44fd889 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000..4d6372e Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png b/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png new file mode 100644 index 0000000..0842ea5 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png differ diff --git a/android/app/src/main/res/values-night/styles.xml b/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..06952be --- /dev/null +++ b/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..cb1ef88 --- /dev/null +++ b/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/android/build.gradle b/android/build.gradle new file mode 100644 index 0000000..d2ffbff --- /dev/null +++ b/android/build.gradle @@ -0,0 +1,18 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = "../build" +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean", Delete) { + delete rootProject.buildDir +} diff --git a/android/gradle.properties b/android/gradle.properties new file mode 100644 index 0000000..3b5b324 --- /dev/null +++ b/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx4G -XX:+HeapDumpOnOutOfMemoryError +android.useAndroidX=true +android.enableJetifier=true diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..e1ca574 --- /dev/null +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip diff --git a/android/settings.gradle b/android/settings.gradle new file mode 100644 index 0000000..7fb86d7 --- /dev/null +++ b/android/settings.gradle @@ -0,0 +1,28 @@ +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + }() + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id "dev.flutter.flutter-plugin-loader" version "1.0.0" + id "com.android.application" version "7.3.0" apply false + // START: FlutterFire Configuration + id "com.google.gms.google-services" version "4.3.15" apply false + // END: FlutterFire Configuration + id "org.jetbrains.kotlin.android" version "1.7.10" apply false +} + +include ":app" diff --git a/assets/fonts/digit.ttf b/assets/fonts/digit.ttf new file mode 100644 index 0000000..5dbe6f9 Binary files /dev/null and b/assets/fonts/digit.ttf differ diff --git a/assets/fonts/josefin.ttf b/assets/fonts/josefin.ttf new file mode 100644 index 0000000..505477e Binary files /dev/null and b/assets/fonts/josefin.ttf differ diff --git a/assets/fonts/mohanad.ttf b/assets/fonts/mohanad.ttf new file mode 100644 index 0000000..854341c Binary files /dev/null and b/assets/fonts/mohanad.ttf differ diff --git a/assets/images/1.png b/assets/images/1.png new file mode 100644 index 0000000..290e187 Binary files /dev/null and b/assets/images/1.png differ diff --git a/assets/images/2.png b/assets/images/2.png new file mode 100644 index 0000000..7c4d8d3 Binary files /dev/null and b/assets/images/2.png differ diff --git a/assets/images/3.png b/assets/images/3.png new file mode 100644 index 0000000..81c974f Binary files /dev/null and b/assets/images/3.png differ diff --git a/assets/images/4.png b/assets/images/4.png new file mode 100644 index 0000000..72c8a89 Binary files /dev/null and b/assets/images/4.png differ diff --git a/assets/images/5.png b/assets/images/5.png new file mode 100644 index 0000000..aa6a06f Binary files /dev/null and b/assets/images/5.png differ diff --git a/assets/images/6.png b/assets/images/6.png new file mode 100644 index 0000000..23df2c0 Binary files /dev/null and b/assets/images/6.png differ diff --git a/assets/images/logo.gif b/assets/images/logo.gif new file mode 100644 index 0000000..02c031e Binary files /dev/null and b/assets/images/logo.gif differ diff --git a/assets/images/logo.png b/assets/images/logo.png new file mode 100644 index 0000000..650dee9 Binary files /dev/null and b/assets/images/logo.png differ diff --git a/assets/images/notepad.png b/assets/images/notepad.png new file mode 100644 index 0000000..9536a4d Binary files /dev/null and b/assets/images/notepad.png differ diff --git a/assets/images/on1.png b/assets/images/on1.png new file mode 100644 index 0000000..c9881c6 Binary files /dev/null and b/assets/images/on1.png differ diff --git a/assets/images/on2.png b/assets/images/on2.png new file mode 100644 index 0000000..3b6d28c Binary files /dev/null and b/assets/images/on2.png differ diff --git a/assets/images/on3.png b/assets/images/on3.png new file mode 100644 index 0000000..88af4ae Binary files /dev/null and b/assets/images/on3.png differ diff --git a/assets/images/whats.png b/assets/images/whats.png new file mode 100644 index 0000000..2a559d8 Binary files /dev/null and b/assets/images/whats.png differ diff --git a/assets/notify.mp3 b/assets/notify.mp3 new file mode 100644 index 0000000..d10bc28 Binary files /dev/null and b/assets/notify.mp3 differ diff --git a/firebase.json b/firebase.json new file mode 100644 index 0000000..45265da --- /dev/null +++ b/firebase.json @@ -0,0 +1 @@ +{"flutter":{"platforms":{"android":{"default":{"projectId":"ride-b1bd8","appId":"1:594687661098:android:f81fcce13962121a595f53","fileOutput":"android/app/google-services.json"}},"dart":{"lib/firebase_options.dart":{"projectId":"ride-b1bd8","configurations":{"android":"1:594687661098:android:f81fcce13962121a595f53"}}}}}} \ No newline at end of file diff --git a/ios/.gitignore b/ios/.gitignore new file mode 100644 index 0000000..7a7f987 --- /dev/null +++ b/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 0000000..7c56964 --- /dev/null +++ b/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 12.0 + + diff --git a/ios/Flutter/Debug.xcconfig b/ios/Flutter/Debug.xcconfig new file mode 100644 index 0000000..ec97fc6 --- /dev/null +++ b/ios/Flutter/Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "Generated.xcconfig" diff --git a/ios/Flutter/Release.xcconfig b/ios/Flutter/Release.xcconfig new file mode 100644 index 0000000..c4855bf --- /dev/null +++ b/ios/Flutter/Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "Generated.xcconfig" diff --git a/ios/Podfile b/ios/Podfile new file mode 100644 index 0000000..04c36cf --- /dev/null +++ b/ios/Podfile @@ -0,0 +1,44 @@ +# Uncomment this line to define a global platform for your project +platform :ios, '14.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end diff --git a/ios/Podfile.lock b/ios/Podfile.lock new file mode 100644 index 0000000..a05fa66 --- /dev/null +++ b/ios/Podfile.lock @@ -0,0 +1,218 @@ +PODS: + - AppAuth (1.7.5): + - AppAuth/Core (= 1.7.5) + - AppAuth/ExternalUserAgent (= 1.7.5) + - AppAuth/Core (1.7.5) + - AppAuth/ExternalUserAgent (1.7.5): + - AppAuth/Core + - device_info_plus (0.0.1): + - Flutter + - Firebase/Auth (10.27.0): + - Firebase/CoreOnly + - FirebaseAuth (~> 10.27.0) + - Firebase/CoreOnly (10.27.0): + - FirebaseCore (= 10.27.0) + - Firebase/Messaging (10.27.0): + - Firebase/CoreOnly + - FirebaseMessaging (~> 10.27.0) + - firebase_auth (5.1.1): + - Firebase/Auth (= 10.27.0) + - firebase_core + - Flutter + - firebase_core (3.1.1): + - Firebase/CoreOnly (= 10.27.0) + - Flutter + - firebase_messaging (15.0.2): + - Firebase/Messaging (= 10.27.0) + - firebase_core + - Flutter + - FirebaseAppCheckInterop (10.27.0) + - FirebaseAuth (10.27.0): + - FirebaseAppCheckInterop (~> 10.17) + - FirebaseCore (~> 10.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.8) + - GoogleUtilities/Environment (~> 7.8) + - GTMSessionFetcher/Core (< 4.0, >= 2.1) + - RecaptchaInterop (~> 100.0) + - FirebaseCore (10.27.0): + - FirebaseCoreInternal (~> 10.0) + - GoogleUtilities/Environment (~> 7.12) + - GoogleUtilities/Logger (~> 7.12) + - FirebaseCoreInternal (10.27.0): + - "GoogleUtilities/NSData+zlib (~> 7.8)" + - FirebaseInstallations (10.27.0): + - FirebaseCore (~> 10.0) + - GoogleUtilities/Environment (~> 7.8) + - GoogleUtilities/UserDefaults (~> 7.8) + - PromisesObjC (~> 2.1) + - FirebaseMessaging (10.27.0): + - FirebaseCore (~> 10.0) + - FirebaseInstallations (~> 10.0) + - GoogleDataTransport (~> 9.3) + - GoogleUtilities/AppDelegateSwizzler (~> 7.8) + - GoogleUtilities/Environment (~> 7.8) + - GoogleUtilities/Reachability (~> 7.8) + - GoogleUtilities/UserDefaults (~> 7.8) + - nanopb (< 2.30911.0, >= 2.30908.0) + - Flutter (1.0.0) + - flutter_secure_storage (6.0.0): + - Flutter + - google_sign_in_ios (0.0.1): + - AppAuth (>= 1.7.4) + - Flutter + - FlutterMacOS + - GoogleSignIn (~> 7.1) + - GTMSessionFetcher (>= 3.4.0) + - GoogleDataTransport (9.4.1): + - GoogleUtilities/Environment (~> 7.7) + - nanopb (< 2.30911.0, >= 2.30908.0) + - PromisesObjC (< 3.0, >= 1.2) + - GoogleSignIn (7.1.0): + - AppAuth (< 2.0, >= 1.7.3) + - GTMAppAuth (< 5.0, >= 4.1.1) + - GTMSessionFetcher/Core (~> 3.3) + - GoogleUtilities/AppDelegateSwizzler (7.13.3): + - GoogleUtilities/Environment + - GoogleUtilities/Logger + - GoogleUtilities/Network + - GoogleUtilities/Privacy + - GoogleUtilities/Environment (7.13.3): + - GoogleUtilities/Privacy + - PromisesObjC (< 3.0, >= 1.2) + - GoogleUtilities/Logger (7.13.3): + - GoogleUtilities/Environment + - GoogleUtilities/Privacy + - GoogleUtilities/Network (7.13.3): + - GoogleUtilities/Logger + - "GoogleUtilities/NSData+zlib" + - GoogleUtilities/Privacy + - GoogleUtilities/Reachability + - "GoogleUtilities/NSData+zlib (7.13.3)": + - GoogleUtilities/Privacy + - GoogleUtilities/Privacy (7.13.3) + - GoogleUtilities/Reachability (7.13.3): + - GoogleUtilities/Logger + - GoogleUtilities/Privacy + - GoogleUtilities/UserDefaults (7.13.3): + - GoogleUtilities/Logger + - GoogleUtilities/Privacy + - GTMAppAuth (4.1.1): + - AppAuth/Core (~> 1.7) + - GTMSessionFetcher/Core (< 4.0, >= 3.3) + - GTMSessionFetcher (3.4.1): + - GTMSessionFetcher/Full (= 3.4.1) + - GTMSessionFetcher/Core (3.4.1) + - GTMSessionFetcher/Full (3.4.1): + - GTMSessionFetcher/Core + - nanopb (2.30910.0): + - nanopb/decode (= 2.30910.0) + - nanopb/encode (= 2.30910.0) + - nanopb/decode (2.30910.0) + - nanopb/encode (2.30910.0) + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - PromisesObjC (2.4.0) + - RecaptchaInterop (100.0.0) + - share (0.0.1): + - Flutter + - sqflite (0.0.3): + - Flutter + - FlutterMacOS + - url_launcher_ios (0.0.1): + - Flutter + - vibration (1.7.5): + - Flutter + +DEPENDENCIES: + - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`) + - firebase_auth (from `.symlinks/plugins/firebase_auth/ios`) + - firebase_core (from `.symlinks/plugins/firebase_core/ios`) + - firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`) + - Flutter (from `Flutter`) + - flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`) + - google_sign_in_ios (from `.symlinks/plugins/google_sign_in_ios/darwin`) + - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) + - share (from `.symlinks/plugins/share/ios`) + - sqflite (from `.symlinks/plugins/sqflite/darwin`) + - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) + - vibration (from `.symlinks/plugins/vibration/ios`) + +SPEC REPOS: + trunk: + - AppAuth + - Firebase + - FirebaseAppCheckInterop + - FirebaseAuth + - FirebaseCore + - FirebaseCoreInternal + - FirebaseInstallations + - FirebaseMessaging + - GoogleDataTransport + - GoogleSignIn + - GoogleUtilities + - GTMAppAuth + - GTMSessionFetcher + - nanopb + - PromisesObjC + - RecaptchaInterop + +EXTERNAL SOURCES: + device_info_plus: + :path: ".symlinks/plugins/device_info_plus/ios" + firebase_auth: + :path: ".symlinks/plugins/firebase_auth/ios" + firebase_core: + :path: ".symlinks/plugins/firebase_core/ios" + firebase_messaging: + :path: ".symlinks/plugins/firebase_messaging/ios" + Flutter: + :path: Flutter + flutter_secure_storage: + :path: ".symlinks/plugins/flutter_secure_storage/ios" + google_sign_in_ios: + :path: ".symlinks/plugins/google_sign_in_ios/darwin" + path_provider_foundation: + :path: ".symlinks/plugins/path_provider_foundation/darwin" + share: + :path: ".symlinks/plugins/share/ios" + sqflite: + :path: ".symlinks/plugins/sqflite/darwin" + url_launcher_ios: + :path: ".symlinks/plugins/url_launcher_ios/ios" + vibration: + :path: ".symlinks/plugins/vibration/ios" + +SPEC CHECKSUMS: + AppAuth: 501c04eda8a8d11f179dbe8637b7a91bb7e5d2fa + device_info_plus: 97af1d7e84681a90d0693e63169a5d50e0839a0d + Firebase: 26b040b20866a55f55eb3611b9fcf3ae64816b86 + firebase_auth: cc4ea3f47dda7afc4c64f59540aa570aca60814d + firebase_core: f8d0424c45e0f1e596811085fc12c638d628457c + firebase_messaging: 8b29edaf5adfd3b52b5bfa5af8128c44164670c6 + FirebaseAppCheckInterop: 0dd062c9926a76332ca5711dbed6f1a9ac540b54 + FirebaseAuth: 77a012b7e08042bf44d0db835ca2e86e6ca7bbd3 + FirebaseCore: a2b95ae4ce7c83ceecfbbbe3b6f1cddc7415a808 + FirebaseCoreInternal: 4b297a2d56063dbea2c1d0d04222d44a8d058862 + FirebaseInstallations: 766dabca09fd94aef922538aaf144cc4a6fb6869 + FirebaseMessaging: 585984d0a1df120617eb10b44cad8968b859815e + Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 + flutter_secure_storage: d33dac7ae2ea08509be337e775f6b59f1ff45f12 + google_sign_in_ios: 07375bfbf2620bc93a602c0e27160d6afc6ead38 + GoogleDataTransport: 6c09b596d841063d76d4288cc2d2f42cc36e1e2a + GoogleSignIn: d4281ab6cf21542b1cfaff85c191f230b399d2db + GoogleUtilities: ea963c370a38a8069cc5f7ba4ca849a60b6d7d15 + GTMAppAuth: f69bd07d68cd3b766125f7e072c45d7340dea0de + GTMSessionFetcher: 8000756fc1c19d2e5697b90311f7832d2e33f6cd + nanopb: 438bc412db1928dac798aa6fd75726007be04262 + path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 + PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 + RecaptchaInterop: 7d1a4a01a6b2cb1610a47ef3f85f0c411434cb21 + share: 0b2c3e82132f5888bccca3351c504d0003b3b410 + sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec + url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe + vibration: 7d883d141656a1c1a6d8d238616b2042a51a1241 + +PODFILE CHECKSUM: 1959d098c91d8a792531a723c4a9d7e9f6a01e38 + +COCOAPODS: 1.15.2 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..d97d7fa --- /dev/null +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,749 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 51048C681131CD94CAAB242A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 25A9DACBA982768243A52BEB /* Pods_Runner.framework */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + FE483C0BB80A3D5ADEAFE946 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 80E6C9CD60C2B9C1BB89B285 /* Pods_RunnerTests.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 25A9DACBA982768243A52BEB /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 26B8E79AD3A4929743391D10 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 385BD96B7501A8D685D7E3BC /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 3B75F912CE561168513C16DB /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 80E6C9CD60C2B9C1BB89B285 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8ED99976D90689BACE52971F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + C5389F9242CF2325133872E8 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + FBF862A0F3BFF57EAA951A07 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 59E0D40912174AA215850321 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + FE483C0BB80A3D5ADEAFE946 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 51048C681131CD94CAAB242A /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 74C47B204F5795E0EC482DE9 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 25A9DACBA982768243A52BEB /* Pods_Runner.framework */, + 80E6C9CD60C2B9C1BB89B285 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + AAB4AA15815AE74A1C7F9805 /* Pods */, + 74C47B204F5795E0EC482DE9 /* Frameworks */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; + AAB4AA15815AE74A1C7F9805 /* Pods */ = { + isa = PBXGroup; + children = ( + FBF862A0F3BFF57EAA951A07 /* Pods-Runner.debug.xcconfig */, + 26B8E79AD3A4929743391D10 /* Pods-Runner.release.xcconfig */, + C5389F9242CF2325133872E8 /* Pods-Runner.profile.xcconfig */, + 385BD96B7501A8D685D7E3BC /* Pods-RunnerTests.debug.xcconfig */, + 3B75F912CE561168513C16DB /* Pods-RunnerTests.release.xcconfig */, + 8ED99976D90689BACE52971F /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 677475BC1CC3C79E48FD484E /* [CP] Check Pods Manifest.lock */, + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + 59E0D40912174AA215850321 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 165E685FF44E5AFED5FAAF5F /* [CP] Check Pods Manifest.lock */, + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + E49369B6C6D663DEAC2E5670 /* [CP] Embed Pods Frameworks */, + B44DDCFC793BEAEBDF573D06 /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 165E685FF44E5AFED5FAAF5F /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 677475BC1CC3C79E48FD484E /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + B44DDCFC793BEAEBDF573D06 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + E49369B6C6D663DEAC2E5670 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 63CVT8G5P8; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.service; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 385BD96B7501A8D685D7E3BC /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.service.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3B75F912CE561168513C16DB /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.service.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8ED99976D90689BACE52971F /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.service.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 63CVT8G5P8; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.service; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = 63CVT8G5P8; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.service; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..8e3ca5d --- /dev/null +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..21a3cc1 --- /dev/null +++ b/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift new file mode 100644 index 0000000..9074fee --- /dev/null +++ b/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Flutter +import UIKit + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..d36b1fa --- /dev/null +++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 0000000..8c7005a Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 0000000..cf53e33 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 0000000..bfc6100 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 0000000..905a3f2 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 0000000..257bd42 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 0000000..2e53c08 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 0000000..ed359b9 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 0000000..bfc6100 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 0000000..95fc5dc Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 0000000..13348ef Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png new file mode 100644 index 0000000..c618942 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png new file mode 100644 index 0000000..105a621 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png new file mode 100644 index 0000000..67706f8 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png new file mode 100644 index 0000000..d377db2 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 0000000..13348ef Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 0000000..b5c6659 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png new file mode 100644 index 0000000..85d20b4 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png new file mode 100644 index 0000000..44fd889 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 0000000..920ee72 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 0000000..34ca4af Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 0000000..2af56a7 Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 0000000..0bedcf2 --- /dev/null +++ b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 0000000..9da19ea Binary files /dev/null and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 0000000..9da19ea Binary files /dev/null and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 0000000..9da19ea Binary files /dev/null and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 0000000..89c2725 --- /dev/null +++ b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/ios/Runner/Base.lproj/LaunchScreen.storyboard b/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 0000000..f2e259c --- /dev/null +++ b/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner/Base.lproj/Main.storyboard b/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 0000000..f3c2851 --- /dev/null +++ b/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist new file mode 100644 index 0000000..9dae76e --- /dev/null +++ b/ios/Runner/Info.plist @@ -0,0 +1,49 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Service + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + service + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + + diff --git a/ios/Runner/Runner-Bridging-Header.h b/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 0000000..308a2a5 --- /dev/null +++ b/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/ios/RunnerTests/RunnerTests.swift b/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000..86a7c3b --- /dev/null +++ b/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/lib/constant/api_key.dart b/lib/constant/api_key.dart new file mode 100644 index 0000000..99cdd27 --- /dev/null +++ b/lib/constant/api_key.dart @@ -0,0 +1,19 @@ +import 'package:secure_string_operations/secure_string_operations.dart'; + +import '../env/env.dart'; +import 'char_map.dart'; + +class AK { + static final String basicAuthCredentials = + X.r(X.r(X.r(Env.basicAuthCredentials, cn), cC), cs); + static final String visionApi = X.r(X.r(X.r(Env.visionApi, cn), cC), cs); + static final String smsPasswordEgypt = + X.r(X.r(X.r(Env.smsPasswordEgypt, cn), cC), cs); + static final String ocpApimSubscriptionKey = Env.ocpApimSubscriptionKey; + static final String anthropicAIkeySeferNew = + X.r(X.r(X.r(Env.anthropicAIkeySeferNew, cn), cC), cs); + static final String emailService = (Env.emailService); + +/////////// + static final String keyOfApp = X.r(X.r(X.r(Env.keyOfApp, cn), cC), cs); +} diff --git a/lib/constant/box_name.dart b/lib/constant/box_name.dart new file mode 100644 index 0000000..bf87d51 --- /dev/null +++ b/lib/constant/box_name.dart @@ -0,0 +1,78 @@ +class BoxName { + static const String driverID = "driverID"; + static const String countryCode = "countryCode"; + static const String googlaMapApp = "googlaMapApp"; + + static const String tokenParent = "tokenParent"; + static const String lang = "lang"; + static const String gender = "gender"; + static const String carType = "carType"; + static const String carPlate = "carPlate"; + static const String isVerified = '0'; + static const String statusDriverLocation = "statusDriverLocation"; + static const String password = "password"; + static const String arrivalTime = "arrivalTime"; + static const String passwordDriver = "passwordDriver"; + static const String agreeTerms = "agreeTerms"; + static const String addWork = 'addWork'; + static const String addHome = 'addHome'; + static const String tipPercentage = 'tipPercentage'; + static const String accountIdStripeConnect = "accountIdStripeConnect"; + static const String faceDetectTimes = "faceDetectTimes"; + static const String sosPhonePassenger = "sosPhonePassenger"; + static const String sosPhoneDriver = "sosPhoneDriver"; + static const String passengerID = "pasengerID"; + static const String phone = "phone"; + static const String phoneDriver = "phoneDriver"; + static const String dobDriver = "dobDriver"; + static const String sexDriver = "sexDriver"; + static const String lastNameDriver = "lastNameDriver"; + static const String name = "name"; + static const String locationPermission = "locationPermission"; + static const String nameDriver = "nameDriver"; + static const String driverPhotoUrl = "driverPhotoUrl"; + static const String passengerPhotoUrl = "passengerPhotoUrl"; + static const String email = "email"; + static const String emailDriver = "emailDriver"; + static const String tokens = "tokens"; + static const String tokenFCM = "tokenFCM"; + static const String tokenDriver = "tokenDriver"; + static const String cardNumber = "cardNumber"; + static const String cardNumberDriver = "cardNumberDriver"; + static const String cardHolderName = "cardHolderName"; + static const String cardHolderNameDriver = "cardHolderNameDriver"; + static const String expiryDate = "expiryDate"; + static const String expiryDateDriver = "expiryDateDriver"; + static const String cvvCode = "cvvCode"; + static const String cvvCodeDriver = "cvvCodeDriver"; + static const String passengerWalletDetails = "passengerWalletDetails"; + static const String passengerWalletTotal = "passengerWalletTotal"; + static const String passengerWalletFound = "passengerWalletFound"; + static const String periods = 'periods'; + static const String onBoarding = 'onBoarding'; + static const String stripePublishableKey = 'stripe_publishableKe'; + static const String apiKeyRun = 'apiKeyRun'; + static const String serverAPI = 'serverAPI'; + static const String secretKey = 'secretKey'; + static const String basicAuthCredentials = 'basicAuthCredentials'; + static const String mapAPIKEY = 'mapAPIKEY'; + static const String twilloRecoveryCode = 'twilloRecoveryCode'; + static const String accountSIDTwillo = 'accountSIDTwillo'; + static const String authTokenTwillo = 'authTokenTwillo'; + static const String chatGPTkey = 'chatGPTkey'; + static const String chatGPTkeySefer = 'chatGPTkeySefer'; + static const String transactionCloude = 'transactionCloude'; + static const String visionApi = 'visionApi'; + static const String vin = "vin"; + static const String isvibrate = "isvibrate"; + static const String make = "make"; + static const String model = "model"; + static const String year = "year"; + static const String expirationDate = "expirationDate"; + static const String color = "color"; + static const String owner = "owner"; + static const String registrationDate = "registrationDate"; + static const String recentLocations = 'recentLocations'; + static const String tripData = 'tripData'; + static const String parentTripSelected = 'parentTripSelected'; +} diff --git a/lib/constant/char_map.dart b/lib/constant/char_map.dart new file mode 100644 index 0000000..d6a6ee7 --- /dev/null +++ b/lib/constant/char_map.dart @@ -0,0 +1,68 @@ +Map cn = { + "0": "3", + "1": "7", + "2": "1", + "3": "9", + "4": "0", + "5": "5", + "6": "2", + "7": "6", + "8": "4", + "9": "8" +}; +Map cs = { + "a": "q", + "b": "x", + "c": "f", + "d": "y", + "e": "j", + "f": "u", + "g": "k", + "h": "w", + "i": "o", + "j": "e", + "k": "g", + "l": "r", + "m": "n", + "n": "b", + "o": "i", + "p": "v", + "q": "a", + "r": "l", + "s": "z", + "t": "c", + "u": "h", + "v": "p", + "w": "t", + "x": "d", + "y": "s", + "z": "m" +}; +Map cC = { + "A": "Q", + "B": "X", + "C": "F", + "D": "Y", + "E": "J", + "F": "U", + "G": "K", + "H": "W", + "I": "O", + "J": "E", + "K": "G", + "L": "R", + "M": "N", + "N": "B", + "O": "I", + "P": "V", + "Q": "A", + "R": "L", + "S": "Z", + "T": "C", + "U": "H", + "V": "P", + "W": "T", + "X": "D", + "Y": "S", + "Z": "M" +}; diff --git a/lib/constant/colors.dart b/lib/constant/colors.dart new file mode 100644 index 0000000..aca88ed --- /dev/null +++ b/lib/constant/colors.dart @@ -0,0 +1,20 @@ +import 'package:flutter/material.dart'; + +class AppColor { + static const Color primaryColor = Color(0xFF1DA1F2); + static const Color writeColor = Color(0xff222359); + + static const Color bronze = Color(0xFFCD7F32); + static const Color goldenBronze = Color(0xFFB87333); // Golden bronze color + static const Color gold = Color(0xFFD4AF37); + static const Color secondaryColor = Colors.white; + static const Color accentColor = Colors.grey; + static const Color twitterColor = Color(0xFF1DA1F2); // Twitter blue + static const Color greyColor = Colors.grey; + static const Color redColor = Color(0xFFEA4335); // Google Red + static const Color greenColor = Color(0xFF34A853); // Google Green + static const Color blueColor = Color(0xFF1DA1F2); // Google Blue + static const Color yellowColor = Color(0xFFFBBC05); // Google Yellow + static Color deepPurpleAccent = + const Color.fromARGB(255, 123, 76, 254).withOpacity(0.3); +} diff --git a/lib/constant/credential.dart b/lib/constant/credential.dart new file mode 100644 index 0000000..af396f3 --- /dev/null +++ b/lib/constant/credential.dart @@ -0,0 +1,141 @@ +import 'dart:convert'; +import 'package:crypto/crypto.dart'; + +import '../main.dart'; +import 'box_name.dart'; + +class AC { + gAK() async { + if (box.read(BoxName.apiKeyRun).toString() != 'run') { + // var res = await CRUD().get(link: AppLink.getApiKey, payload: {}); + // var decod = jsonDecode(res); + // print(decod); + // Map jsonData = {}; + // for (var i = 0; i < decod['message'].length; i++) { + // String h = decod['message'][i]['hashed_key'].toString(); + // String retrievedString = r(r(r(h, cn), cC), cs); + + // await storage.write( + // key: decod['message'][i]['name'].toString(), + // value: retrievedString.toString(), + // ); + // // + // String name = decod['message'][i]['name'].toString(); + // String value = decod['message'][i]['hashed_key'].toString(); + + // jsonData[name] = value; + // } + // String jsonString = json.encode(jsonData); + // print(jsonString); + // box.write(BoxName.apiKeyRun, 'run'); + } + } + + String q(String b, String c) { + final d = utf8.encode(c); + final e = utf8.encode(b); + + final f = Hmac(sha256, d); + final g = f.convert(e); + + final h = g.bytes; + final i = base64Url.encode(h); + return i; + } + + String j(String k, String l) { + final m = utf8.encode(l); + final n = base64Url.decode(k); + + final o = Hmac(sha256, m); + final p = o.convert(n); + + final q = utf8.decode(p.bytes); + return q; + } + + String a(String b, String c) { + int d = b.length; + int e = d ~/ 4; + + List f = []; + for (int g = 0; g < d; g += e) { + int h = g + e; + if (h > d) { + h = d; + } + String i = b.substring(g, h); + f.add(i); + } + + print(f); + Map j = {}; + j['birinci'] = f[4]; + j['ikinci'] = f[2]; + j['üçüncü'] = c + f[1]; + j['dördüncü'] = f[0]; + j['beş'] = f[3]; + + String k = ''; + j.forEach((l, m) { + k += m; + }); + + return k; + } + + Map n(String o, String c) { + String p = o.replaceAll(c, ''); + + Map q = {}; + q['birinci'] = p[p.length - 5] + p[p.length - 3]; + q['ikinci'] = p[p.length - 1] + p[p.length - 15]; + q['üçüncü'] = p[p.length - 9] + p[p.length - 12]; + q['dördüncü'] = p[p.length - 11] + p[p.length - 6]; + q['beş'] = p[p.length - 2] + p[p.length - 8]; + + return q; + } + + String c(String a, Map b) { + StringBuffer c = StringBuffer(); + c.write(a); + + String d = "Bl"; + c.write(b[d] ?? d); + + StringBuffer e = StringBuffer(); + String f = c.toString(); + + for (int g = 0; g < f.length; g++) { + String h = f[g]; + e.write(b[h] ?? h); + } + + return e.toString(); + } + + String r(String a, Map b) { + StringBuffer c = StringBuffer(); + String d = "Bl"; + int e = d.length; + + for (int f = 0; f < a.length; f++) { + String g = a[f]; + String h = b.keys.firstWhere( + (i) => b[i] == g, + orElse: () => g, + ); + + c.write(h); + } + + String j = c.toString(); + + if (j.endsWith(d)) { + j = j.substring(0, j.length - e); + } + + return j; + } +} diff --git a/lib/constant/info.dart b/lib/constant/info.dart new file mode 100644 index 0000000..5a41e7b --- /dev/null +++ b/lib/constant/info.dart @@ -0,0 +1,4470 @@ +class AppInformation { + static const String companyName = 'Mobile-App'; + static const String appName = 'SEFER'; + static const String phoneNumber = '962798583052'; + static const String linkedInProfile = + 'https://www.linkedin.com/in/hamza-ayed/'; + static const String website = 'https://mobile-app.store'; + static const String email = 'hamzaayed@mobile-app.store'; + static const String complaintPrompt = + 'for this data for complaint from driver or passenger i collect all data i want you analyze this complaint and show what is reason and what is solution .this data collected from many table to find solution if payment in visa not complete and if ride status is finished it will be paymnet in payment table if ride status is not finished there is no need to pay and payment table is null for this ride and if paymentFromPaymentTable not null and visa type not cash the payment sucssessed . if ratingpassenger is low or passengr rating drivers low grade then dont mine of this passenger ,look at driver too like passengerratingdriver with rating or ratingtopassenger .in json add status of complaint and message to passenger and message to driver and message to call center write in arabic in json output with key in english .for output please just json i want'; + + static const String privacyPolicy = ''' + + + + + + + + + + + + +
+
+
+
+
+
+

Terms and Conditions

+

1 TERMS OF USE

+

By downloading, browsing, accessing or using the Mobile Application; “Sefer”, Users agree to be bound by these Terms and Conditions of Use. We reserve the right to amend these terms and conditions at any time. If the User disagrees with any of these Terms and Conditions of Use, the User must immediately discontinue their access to the Mobile Application and their use of the services offered on the Mobile Application. Continued use of the Mobile Application will constitute acceptance of these Terms and Conditions of Use, as may be amended from time to time.

+

2.1. DEFINITIONS

+

In these Terms and Conditions of Use, the following capitalized terms shall have the following meanings, except where the context otherwise requires:

+

“Mobile Application” or “Sefer” refers to the smartphone software through which the company mediates services between Users and Service Providers.

+

"Account" means an account created by a User or a Service Provider on the Mobile Application as part of Registration.

+

“Service Providers” refers to the individuals or companies registered within the Company to provide products or services approved and mediated by the Company/Mobile Application and that are requested/purchased by “Users”. “Service Provider” means any one of them.

+

"Users" means users of the Mobile Application, including you and "User" means any one of them. “Users” also includes Service Providers using the Mobile Application version dedicated to the use of Service Providers.

+

"Privacy Policy" means the privacy policy set out in Clause 14 of these Terms and Conditions of Use.

+

"Redeem" means to redeem a company’s products or services on these Terms and Conditions of Use and

+

"Redemption" means the act of redeeming such products or services.

+

"Register" means to create an Account on the Mobile Application and "Registration" means the act of creating such an Account.

+

"Services" means all the services provided by Service Providers via the Mobile Application and mediated by the Company to Users, and "Service" means any one of them.

+

2.2. WHAT IS THE MOBILE APPLICATION, “Sefer”?

+

The “Sefer” Mobile Application consists in a specialize service with the purpose to schedule/match the Service Provider with the User, however without creating any employee relationship with the Service Provider, meaning that the Mobile Application should be considered only as a service mediator with the purpose of scheduling/matching between Users and Service Providers for the latter to fulfill the service requested by Users. Through the system, the Company allows, totally free of charge, the Users to sign up and request the desired available services from Service Providers in a more efficient way than the conventional existing methods. The Service Providers, by their means, can register on the Mobile Application dedicated for Service Providers through the methods indicated by the Company, pending an evaluation from the Company and the necessary documentation when signing up in accordance with guidelines set by the Transportation General Authority (TGA) to provide services through the Mobile Application. The Service Provider will pay a profit margin fee determined by the Company -in knowledge of the Service Provider- per completed service. Users can pay their ride fare using Apple Pay as an additional payment method in Saudi Arabia on iPhones

+

+

3. GENERAL ISSUES ABOUT THE MOBILE APPLICATION AND THE SERVICES

+

3.1 Applicability of terms and conditions: The use of any Services and/or the Mobile Application and the making of any Redemptions are subject to these Terms and Conditions of Use.

+

3.2 Location: The Mobile Application, the Services and any Redemptions are intended solely for use by Users who access the Mobile Application where it operates and provides its services regionally. We make no representation that the Services (or any goods or services) are available or otherwise suitable for use outside of the regions indicated by the Company. Notwithstanding the above, if the User accesses the Mobile Application, use the Services or make any Redemptions from locations outside the regions indicated by the Service Provider, the User does so on their own initiative and are responsible for the consequences and for compliance with all applicable laws.

+

3.3 Scope: The Mobile Application, the Services and any Redemptions are for Users’ non-commercial, personal use only and must not be used for business purposes unless an official written permission is granted by the Company.

+

3.4 Prevention on use: We reserve the right to prevent the User using the Mobile Application and the Service (or any part of them) and to prevent the User from making any Redemptions.

+

3.5 Equipment and Networks: The provision of the Services and the Mobile Application does not include the provision of a mobile telephone or handheld device or other necessary equipment to access the Mobile Application or the Services or make any Redemptions. To use the Mobile Application or Services or to make Redemptions, the User will require Internet connectivity and appropriate telecommunication links. The User acknowledges that the terms of agreement with their respective mobile network provider will continue to apply when using the Mobile Application. As a result, the User may be charged by the Mobile Provider for access to network connection services for the duration of the connection while accessing the Mobile Application or any such third party charges as may arise. The User accepts responsibility for any such charges that arise.

+

3.6 Permission to use Mobile Application: If the User is not the bill payer for the mobile telephone or handheld device being used to access the Mobile Application, the User will be assumed to have received permission from the bill payer for using the Mobile Application.

+

3.7 License to Use Material: By submitting any text or images (including photographs) via the Application, the User represents that they are the owner of the Material, or have proper authorization from the owner of the Material to use, reproduce and distribute it. The User hereby grants us a worldwide, royalty-free, non-exclusive license to use the Material to promote any products or services.

+

4. REDEMPTIONS

+

4.1 Need for registration: a) Users must Register to make a Redemption from the Mobile Application. b) The Service Provider agrees that by registering they will be scrutinized to be accepted by the Company who may refuse or cancel the Service Provider account at any time, whether by complaints or by internal policy.

+

4.2 Application of these Terms and Conditions of Use: By making any Redemption, the User acknowledges that the Redemption is subject to these Terms and Conditions of Use.

+

4.3 Redemption: Any attempted Redemption not consistent with these Terms and Conditions of Use may be disallowed or rendered void at our or the relevant Service Provider’s discretion.

+

4.4 Responsibility for Redemptions of perishable products of services: Each Service Provider shall be responsible to ensure that any of its products or services for Redemption that are perishable has not expired.

+

4.5 Restrictions: (a) Reproduction, sale, resale or trading of any products or services or Redeemed products is prohibited. (b) If any product or service is Redeemed for less than its face value, there is no entitlement to a credit, cash or Sample equal to the difference between the face value and the amount Redeemed. (c) Redemption of products or services is subject to availability of the relevant Service Providers’ stocks.

+

4.6 Company Not Liable: For the avoidance of doubt, the Company shall not be liable for any losses or damages suffered by Users resulting from a failure by the relevant Service Provider to fulfil any Redemptions in accordance with Clause 4.4 or for a failure by us to deliver any products or services to Users due to the unavailability of such products or services pursuant to Clause 4.5(c). Users accept that the Mobile Application acts solely as a scheduling/matching service between its Users and Service Providers, and that it is not responsible for any issues that arise, including but not limited to accidents, delays, car discomfort, and unavailability of products or services.

+

4.7 Lost/stolen services: Neither we nor any Service Provider shall be responsible for lost or stolen Samples or products that have been Redeemed.

+

+

5. LOCATION ALERTS AND NOTIFICATIONS

+

5.1 The USer agrees to receive pre-programmed notifications (“Location Alerts”) on the Mobile Application from Service Providers if the User has turned on locational services on their mobile telephone or other handheld devices (as the case may be).

+

+

6. USERS’ OBLIGATIONS

+

6.1 Service Provider terms: Users agree to (and shall) abide by the terms and conditions of the relevant Service Provider for which their Redemption relates to, as may be amended from time to time.

+

6.2 Accurate information: The User warrants that all information provided on Registration and contained as part of their Account is true, complete and accurate and that the User will promptly inform us of any changes to such information by updating the information in their Account.

+

6.3 Content on the Mobile Application and Service: It is the User’s responsibility to ensure that any products, services or information available through the Mobile Application or the Services meet their specific requirements before making any Redemption.

+

6.4 Prohibitions in relation to usage of Services or Mobile Application: Without limitation, the User undertakes not to use or permit anyone else to use the Services or Mobile Application:-

+

6.4.1 to send or receive any material which is not civil or tasteful

+

6.4.2 to send or receive any material which is threatening, grossly offensive, of an indecent, obscene or menacing character, blasphemous or defamatory of any person, in contempt of court or in breach of confidence, copyright, rights of personality, publicity or privacy or any other third party rights;

+

6.4.3 to send or receive any material for which the User has not obtained all necessary licenses and/or approvals (from us or third parties); or which constitutes or encourages conduct that would be considered a criminal offence, give rise to civil liability, or otherwise be contrary to the law of or infringe the rights of any third party in any country in the world;

+

6.4.4 to send or receive any material which is technically harmful (including computer viruses, logic bombs, Trojan horses, worms, harmful components, corrupted data or other malicious software or harmful data);

+

6.4.5 to cause annoyance, inconvenience or needless anxiety;

+

6.4.6 to intercept or attempt to intercept any communications transmitted by way of a telecommunications system;

+

6.4.7 for a purpose other than which we have designed them or intended them to be used;

+

6.4.8 for any fraudulent purpose;

+

6.4.9 other than in conformance with accepted Internet practices and practices of any connected networks;

+

6.4.10 in any way which is calculated to incite hatred against any ethnic, religious or any other minority or is otherwise calculated to adversely affect any individual, group or entity; or

+

6.4.11 in such a way as to, or commit any act that would or does, impose an unreasonable or disproportionately large load on our infrastructure.

+

6.5 Prohibitions in relation to usage of Services, Mobile Application: Without limitation, the User further undertakes not to or permit anyone else to:-

+

6.5.1 resell any products or services;

+

6.5.2 furnish false data including false names, addresses and contact details and fraudulently use credit/debit card numbers;

+

6.5.3 attempt to circumvent our security or network including to access data not intended for the User, log into a server or account the User is not expressly authorized to access, or probe the security of other networks (such as running a port scan);

+

6.5.4 execute any form of network monitoring which will intercept data not intended for the User;

+

6.5.5 enter into fraudulent interactions or transactions with us or a Service Provider (including interacting or transacting purportedly on behalf of a third party where the User has no authority to bind that third party or the User is pretending to be a third party);

+

6.5.6 extract data from or hack into the Mobile Application;

+

6.5.7 use the Services or Mobile Application in breach of these Terms and Conditions of Use;

+

6.5.8 engage in any unlawful activity in connection with the use of the Mobile Application or the Services; or

+

6.5.9 engage in any conduct which, in our exclusive reasonable opinion, restricts or inhibits any other customer from properly using or enjoying the Mobile Application or Services.

+

+

7. RULES ABOUT USE OF THE SERVICE AND THE MOBILE APPLICATION

+

7.1 We will use reasonable endeavors to correct any errors or omissions as soon as practicable after being notified of them. However, we do not guarantee that the Services or the Mobile Application will be free of faults, and we do not accept liability for any such faults, errors or omissions. In the event of any such error, fault or omission, Users should report it by contacting us at JORDAN: 962798583052 .

+

7.2 We do not warrant that Users’ use of the Services or the Mobile Application will be uninterrupted and we do not warrant that any information (or messages) transmitted via the Services or the Mobile Application will be transmitted accurately, reliably, in a timely manner or at all. Notwithstanding that we will try to allow uninterrupted access to the Services and the Mobile Application, access to the Services and the Mobile Application may be suspended, restricted or terminated at any time.

+

7.3 We do not give any warranty that the Services and the Mobile Application are free from viruses or anything else which may have a harmful effect on any technology.

+

7.4 We reserve the right to change, modify, substitute, suspend or remove without notice any information or Services on the Mobile Application from time to time. Users’ access to the Mobile Application and/or the Services may also be occasionally restricted to allow for repairs, maintenance or the introduction of new facilities or services. We will attempt to restore such access as soon as we reasonably can. For the avoidance of doubt, we reserve the right to withdraw any information or Services from the Mobile Application at any time.

+

7.5 We reserve the right to block access to and/or to edit or remove any material which in our reasonable opinion may give rise to a breach of these Terms and Conditions of Use.

+

7.6 The acceptance and denial of the service request may occur at first by the Service Provider, who can accept or deny the service when receiving a notification for a request. The User may cancel the contract for any reason which may or may not apply cancellation fees for which the conditions and amount is determined and communicated by the Company. Both recognize that “Sefer” is not liable for any delays, cancellations, failure to cancel the contract and miscommunication between the User and the Service Provider, nor for any delay or failure in the delivery of services from the Service Provider.

+

+

8. SUSPENSION AND TERMINATION

+

8.1 If the User uses (or others, with the User’s permission use) the Mobile Application, any Services in contravention of these Terms and Conditions of Use, we may suspend their use of the Services and/or Mobile Application.

+

8.2 If we suspend the Services or Mobile Application, we may refuse to restore the Services or Mobile Application for the User’s use until we receive an assurance from them, in a form we deem acceptable, that there will be no further breach of the provisions of these Terms and Conditions of Use.

+

8.3 The Company shall fully co-operate with any law enforcement authorities or court order requesting or directing the Company to disclose the identity or locate anyone in breach of these Terms and Conditions of Use.

+

8.4 Without limitation to anything else in this Clause 8, we shall be entitled immediately or at any time (in whole or in part) to: (a) suspend the Services and/or Mobile Application; (b) suspend Users’ use of the Services and/or Mobile Application; and/or (c) suspend the use of the Services and/or Mobile Application for persons we believe to be connected (in whatever manner) to the concerned User, if:

+

8.4.1 the User commits any breach of these Terms and Conditions of Use;

+

8.4.2 we suspect, on reasonable grounds, that the User has, might or will commit a breach of these Terms and Conditions of Use; or

+

8.4.3 we suspect, on reasonable grounds, that the User may have committed or will be committing any fraud against us or any person.

+

8.5 Our rights under this Clause 8 shall not prejudice any other right or remedy we may have in respect of any breach or any rights, obligations or liabilities accrued prior to termination.

+

+

9. DISCLAIMER AND EXCLUSION OF LIABILITY

+

9.1 The Mobile Application, the Services, the information on the Mobile Application and use of all related facilities are provided on an "as is, as available" basis without any warranties whether express or implied.

+

9.2 The credit balance shall remain valid for the specific period. The credit in the wallet will be expired after 6 months of inactivity.

+

9.3 To the fullest extent permitted by applicable law, we disclaim all representations and warranties relating to the Mobile Application and its contents, including in relation to any inaccuracies or omissions in the Mobile Application, warranties of merchantability, quality, fitness for a particular purpose, accuracy, availability, non-infringement or implied warranties from course of dealing or usage of trade.

+

9.4 We do not warrant that the Mobile Application will always be accessible, uninterrupted, timely, secure, error free or free from computer virus or other invasive or damaging code or that the Mobile Application will not be affected by any acts of nature or other force majeure events, including inability to obtain or shortage of necessary materials, equipment facilities, power or telecommunications, lack of telecommunications equipment or facilities and failure of information technology or telecommunications equipment or facilities.

+

9.5 While we may use reasonable efforts to include accurate and up-to-date information on the Mobile Application, we make no warranties or representations as to its accuracy, timeliness or completeness.

+

9.6 We shall not be liable for any acts or omissions of any third parties howsoever caused, and for any direct, indirect, incidental, special, consequential or punitive damages, howsoever caused, resulting from or in connection with the Mobile Application and the services offered in the mobile application, Users’ access to, use of or inability to use the mobile application or the services offered in the mobile application, reliance on or downloading from the mobile application and/or services, or any delays, inaccuracies in the information or in its transmission including but not limited to damages for loss of business or profits, use, data or other intangible, even if we have been advised of the possibility of such damages.

+

9.7 We shall not be liable in contract, tort (including negligence or breach of statutory duty) or otherwise howsoever and whatever the cause thereof, for any indirect, consequential, collateral, special or incidental loss or damage suffered or incurred by the User in connection with the Mobile Application and these Terms and Conditions of Use. For the purposes of these Terms and Conditions of Use, indirect or consequential loss or damage includes, without limitation, loss of revenue, profits, anticipated savings or business, loss of data or goodwill, loss of use or value of any equipment including software, claims of third parties, and all associated and incidental costs and expenses.

+

9.8 The above exclusions and limitations apply only to the extent permitted by law. None of the User’s statutory rights as a consumer that cannot be excluded or limited are affected.

+

9.9 Notwithstanding our efforts to ensure that our system is secure, the User acknowledges that all electronic data transfers are potentially susceptible to interception by others. We cannot, and do not, warrant that data transfers pursuant to the Mobile Application, or electronic mail transmitted to and from us, will not be monitored or read by others.

+

+

10. INDEMNITY

+

The User agrees to indemnify and keep us indemnified against any claim, action, suit or proceeding brought or threatened to be brought against us which is caused by or arising out of (a) the User’s use of the Services, (b) any other party’s use of the Services using the User’s user ID, verification PIN and/or any identifier number allocated by the Company, and/or (c) the User’s breach of any of these Terms and Conditions of Use, and to pay us damages, costs and interest in connection with such claim, action, suit or proceeding.

+

+

11. INTELLECTUAL PROPERTY RIGHTS

+

11.1 All editorial content, information, photographs, illustrations, artwork and other graphic materials, and names, logos and trade marks on the Mobile Application are protected by copyright laws and/or other laws and/or international treaties, and belong to us and/or our suppliers, as the case may be. These works, logos, graphics, sounds or images may not be copied, reproduced, retransmitted, distributed, disseminated, sold, published, broadcasted or circulated whether in whole or in part, unless expressly permitted by us and/or our suppliers, as the case may be.

+

11.2 Nothing contained on the Mobile Application should be construed as granting by implication, estoppel, or otherwise, any license or right to use any trademark displayed on the Mobile Application without our written permission. Misuse of any trademarks or any other content displayed on the Mobile Application is prohibited.

+

11.3 We will not hesitate to take legal action against any unauthorized usage of our trade marks, name or symbols to preserve and protect its rights in the matter. All rights not expressly granted herein are reserved. Other product and company names mentioned herein may also be the trademarks of their respective owners.

+

+

12. AMENDMENTS

+

12.1 We may periodically make changes to the contents of the Mobile Application, including to the descriptions and prices of goods and services advertised, at any time and without notice. We assume no liability or responsibility for any errors or omissions in the content of the Mobile Application.

+

12.2 We reserve the right to amend these Terms and Conditions of Use from time to time without notice. The revised Terms and Conditions of Use will be posted on the Mobile Application and shall take effect from the date of such posting. The User is advised to review these terms and conditions periodically as they are binding upon the User.

+

+

13. APPLICABLE LAW AND JURISDICTION

+

13.1 These Terms and Conditions of Use shall be governed by and construed in accordance with the applicable Federal laws of Kingdom of Saudi Arabia.

+

13.2 The Mobile Application can be accessed from all countries around the world where the local technology permits. As each of these places have differing laws, by accessing the Mobile Application both the User and we agree that the laws of the country where accessed, without regard to the conflicts of laws principles thereof, will apply to all matters relating to the use of the Mobile Application.

+

13.3 the User accepts and agrees that both the User and we shall submit to the exclusive jurisdiction of the courts of the country where accessed in respect of any dispute arising out of and/or in connection with these Terms and Conditions of Use.

+

+

14. PRIVACY POLICY

+

14.1 Access to the Mobile Application and use of the Services offered on the Mobile Application by the Company and/or its group of companies & partners is subject to this Privacy Policy. By accessing the Mobile Application and by continuing to use the Services offered, Users are deemed to have accepted this Privacy Policy, and in particular, they are deemed to have consented to our use and disclosure of their personal information in the manner prescribed in this Privacy Policy and for the purposes set out in Clauses 3.7 and/or 4.1.1 We reserve the right to amend this Privacy Policy from time to time. If the User disagrees with any part of this Privacy Policy, the User must immediately discontinue their access to the Mobile Application and their use of the Services.

+

14.2 As part of the normal operation of our Services, we collect, use and, in some cases, disclose information about the User to third parties. Accordingly, we have developed this Privacy Policy in order for Users to understand how we collect, use, communicate and disclose and make use of their personal information when they use the Services on the Mobile Application:-

+

(a) Before or at the time of collecting personal information, we will identify the purposes for which information is being collected.

+

(b) We will collect and use of personal information solely with the objective of fulfilling those purposes specified by us and for other compatible purposes, unless we obtain the consent of the individual concerned or as required by law.

+

(c) We will only retain personal information as long as necessary for the fulfillment of those purposes.

+

(d) We will collect personal information by lawful and fair means and, where appropriate, with the knowledge or consent of the individual concerned.

+

(e) Personal information should be relevant to the purposes for which it is to be used, and, to the extent necessary for those purposes, should be accurate, complete, and up-to-date.

+

(f) We will protect personal information by reasonable security safeguards against loss or theft, as well as unauthorized access, disclosure, copying, use or modification.

+

(g) The Company further reserves the right to use all legal means possible and to identify the Users, as well as to request, at any time, additional data and documents it considers appropriate in order to verify personal data informed by the user.

+

We are committed to conducting our business in accordance with these principles in order to ensure that the confidentiality of personal information is protected and maintained.

+

14.3 Social logins policy
Our Services offers you the ability to register and login using Facebook. Where you choose to do this, we will receive certain profile information about you from your social media provider. The profile Information may include your name and social token.
We will use the information we receive only to associate your social token with your Sefer account or for the purposes that are described in this privacy policy.

14.4 Account and data deletion
Based on the applicable laws of your country, you may have the right to request the deletion of your personal data in some circumstances. If you want to delete your account or personal data in the application, please contact us via e-mail: support@mobile-app.store. We will respond to your request within 30 days.

+

15. In-Ride Policy

+

15.1 Smoking Policy:

+

No smoking or other use of tobacco products (including, but not limited to, cigarettes, pipes, cigars, snuff, or chewing tobacco) is permitted during rides. No cigarette butts or other traces of smell, litter, or tobacco use should be present in the vehicle. image

+

15.2 COVID-19 Policy: Face masks must be always worn during rides.

+
+
+
+
+
+
+ + + + + +
+
+ + + + +
+

+ All rights reserved. Fast Global Technology Holding Limited. © 2022 +

+
+
+ +
+ + + + +
+ + + + + + +
+ +'''; +} diff --git a/lib/constant/links.dart b/lib/constant/links.dart new file mode 100644 index 0000000..18da907 --- /dev/null +++ b/lib/constant/links.dart @@ -0,0 +1,55 @@ +import '../env/env.dart'; + +class AppLink { + static final String server = Env.serverPHP; + static String googleMapsLink = 'https://maps.googleapis.com/maps/api/'; + static String llama = 'https://api.llama-api.com/chat/completions'; + static String getTokens = "$server/ride/firebase/get.php"; + + static String gemini = + 'https://generativelanguage.googleapis.com/v1beta3/models/text-bison-001:generateText'; + static String uploadEgypt = "$server/uploadEgypt.php"; + static String auth = '$server/auth'; + static String login = "$serviceApp/login.php"; + static String signUp = "$auth/signup.php"; + static String sendVerifyEmail = "$auth/sendVerifyEmail.php"; + static String passengerRemovedAccountEmail = + "$auth/passengerRemovedAccountEmail.php"; + static String verifyEmail = "$auth/verifyEmail.php"; + static String getPromptDriverDocumentsEgypt = + "$server/auth/captin/getPromptDriverDocumentsEgypt.php"; + +//===================Auth Captin============ + static String authCaptin = '$server/auth/captin'; + static String loginCaptin = "$authCaptin/login.php"; + static String signUpCaptin = "$authCaptin/register.php"; + static String sendVerifyEmailCaptin = "$authCaptin/sendVerifyEmail.php"; + static String verifyEmailCaptin = "$authCaptin/verifyEmail.php"; + static String removeUser = "$authCaptin/removeAccount.php"; + static String deletecaptainAccounr = "$authCaptin/deletecaptainAccounr.php"; + static String updateAccountBank = "$authCaptin/updateAccountBank.php"; + static String getAccount = "$authCaptin/getAccount.php"; + static String test = "$server/test.php"; + static String serviceApp = "$server/serviceApp"; + static String getPassengersByPhone = + "$server/serviceApp/getPassengersByPhone.php"; + static String getDriverByPhone = "$serviceApp/getDriverByPhone.php"; + static String getNewDriverRegister = "$serviceApp/getNewDriverRegister.php"; + static String addWelcomeDriverNote = "$serviceApp/addWelcomeDriverNote.php"; + static String getDriverNotCompleteRegistration = + "$serviceApp/getDriverNotCompleteRegistration.php"; + static String getPassengersNotCompleteRegistration = + "$serviceApp/getPassengersNotCompleteRegistration.php"; + static String addNotesDriver = "$serviceApp/addNotesDriver.php"; + static String getCarPlateNotEdit = "$serviceApp/getCarPlateNotEdit.php"; + static String addNotesPassenger = "$serviceApp/addNotesPassenger.php"; + static String editCarPlate = "$serviceApp/editCarPlate.php"; + static String getComplaintAllData = "$serviceApp/getComplaintAllData.php"; + static String getComplaintAllDataForDriver = + "$serviceApp/getComplaintAllDataForDriver.php"; + static String addCriminalDocuments = "$authCaptin/addCriminalDocuments.php"; + static String ride = '$server/ride'; + static String addRegisrationCar = "$ride/RegisrationCar/add.php"; + static String getRegisrationCar = "$ride/RegisrationCar/get.php"; + static String updateRegisrationCar = "$ride/RegisrationCar/update.php"; +} diff --git a/lib/constant/style.dart b/lib/constant/style.dart new file mode 100644 index 0000000..78c3e3d --- /dev/null +++ b/lib/constant/style.dart @@ -0,0 +1,61 @@ +import 'package:flutter/material.dart'; + +import '../main.dart'; +import 'box_name.dart'; +import 'colors.dart'; + +class AppStyle { + static TextStyle headTitle = const TextStyle( + fontWeight: FontWeight.bold, + fontSize: 40, + color: AppColor.accentColor, + ); + static TextStyle headTitle2 = const TextStyle( + fontWeight: FontWeight.bold, + fontSize: 26, + color: AppColor.writeColor, + ); + static TextStyle title = TextStyle( + fontWeight: FontWeight.bold, + fontSize: box.read(BoxName.lang) == 'ar' ? 14 : 16, + color: AppColor.writeColor, + ); + static TextStyle subtitle = const TextStyle( + fontWeight: FontWeight.bold, + fontSize: 13, + color: AppColor.writeColor, + ); + static TextStyle number = const TextStyle( + fontWeight: FontWeight.bold, + fontSize: 14, + color: AppColor.writeColor, + fontFamily: 'digit'); + + static BoxDecoration boxDecoration = const BoxDecoration( + boxShadow: [ + BoxShadow( + color: AppColor.accentColor, blurRadius: 5, offset: Offset(2, 4)), + BoxShadow( + color: AppColor.accentColor, blurRadius: 5, offset: Offset(-2, -2)) + ], + color: AppColor.secondaryColor, + borderRadius: BorderRadius.all( + Radius.elliptical(15, 30), + )); + static BoxDecoration boxDecoration1 = const BoxDecoration( + boxShadow: [ + BoxShadow( + color: Color.fromARGB(255, 237, 230, 230), + blurRadius: 5, + offset: Offset(2, 4)), + BoxShadow( + color: Color.fromARGB(255, 242, 237, 237), + blurRadius: 5, + offset: Offset(-2, -2)) + ], + color: AppColor.secondaryColor, + borderRadius: BorderRadius.all( + Radius.elliptical(15, 30), + ), + ); +} diff --git a/lib/constant/table_names.dart b/lib/constant/table_names.dart new file mode 100644 index 0000000..47cd831 --- /dev/null +++ b/lib/constant/table_names.dart @@ -0,0 +1,9 @@ +class TableName { + static const String placesFavorite = "placesFavorite"; + static const String recentLocations = "recentLocations"; + static const String carLocations = "carLocations"; + static const String driverOrdersRefuse = "driverOrdersRefuse"; + static const String rideLocation = "rideLocation"; + static const String faceDetectTimes = "faceDetectTimes"; + static const String captainNotification = "captainNotification"; +} diff --git a/lib/controller/firebase.dart b/lib/controller/firebase.dart new file mode 100644 index 0000000..48afce8 --- /dev/null +++ b/lib/controller/firebase.dart @@ -0,0 +1,117 @@ +import 'dart:convert'; +import 'dart:io'; +import 'package:firebase_messaging/firebase_messaging.dart'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:http/http.dart' as http; + +import '../../constant/api_key.dart'; +import '../../constant/box_name.dart'; +import '../../constant/colors.dart'; +import '../../constant/links.dart'; +import '../../constant/style.dart'; +import '../../main.dart'; + +class FirebaseMessagesController extends GetxController { + final fcmToken = FirebaseMessaging.instance; + + List tokens = []; + List dataTokens = []; + late String driverID; + late String driverToken; + NotificationSettings? notificationSettings; + + Future getNotificationSettings() async { + // Get the current notification settings + NotificationSettings? notificationSettings = + await FirebaseMessaging.instance.getNotificationSettings(); + 'Notification authorization status: ${notificationSettings.authorizationStatus}'; + + // Call the update function if needed + update(); + } + + Future requestFirebaseMessagingPermission() async { + FirebaseMessaging messaging = FirebaseMessaging.instance; + + // Check if the platform is Android + if (Platform.isAndroid) { + // Request permission for Android + await messaging.requestPermission(); + } else if (Platform.isIOS) { + // Request permission for iOS + NotificationSettings settings = await messaging.requestPermission( + alert: true, + announcement: true, + badge: true, + carPlay: true, + criticalAlert: true, + provisional: false, + sound: true, + ); + messaging.setForegroundNotificationPresentationOptions( + alert: true, badge: true, sound: true); + } + } + + Future getTokens() async { + String? basicAuthCredentials = + await storage.read(key: BoxName.basicAuthCredentials); + var res = await http.post( + Uri.parse(AppLink.getTokens), + headers: { + 'Authorization': + 'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials))}', + }, + body: {}, + ); + var jsonResponse = jsonDecode(res.body); + if (jsonResponse['status'] == 'success') { + dataTokens = jsonResponse['data']; + for (var i = 0; i < dataTokens.length; i++) { + tokens.add(jsonResponse['data'][i]['token']); + } + box.write(BoxName.tokens, tokens); + } else { + Get.defaultDialog(title: "Warning", middleText: "Server Error"); + } + } + + Future getToken() async { + fcmToken.getToken().then((token) { + box.write(BoxName.tokenFCM, token); + }); + + FirebaseMessaging.onMessage.listen((RemoteMessage message) { + // If the app is in the background or terminated, show a system tray message + RemoteNotification? notification = message.notification; + AndroidNotification? android = notification?.android; + // if (notification != null && android != null) { + if (message.data.isNotEmpty && message.notification != null) { + fireBaseTitles(message); + } + }); + FirebaseMessaging.onBackgroundMessage((RemoteMessage message) async { + // Handle background message + if (message.data.isNotEmpty && message.notification != null) { + fireBaseTitles(message); + } + }); + + FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) { + if (message.data.isNotEmpty && message.notification != null) { + fireBaseTitles(message); + } + }); + } + + void fireBaseTitles(RemoteMessage message) { + if (message.notification!.title! == 'Order'.tr) { + } else if (message.notification!.title! == 'Apply Ride'.tr) { + var passengerList = message.data['passengerList']; + + var myList = jsonDecode(passengerList) as List; + driverID = myList[0].toString(); + } + } +} diff --git a/lib/controller/functions/crud.dart b/lib/controller/functions/crud.dart new file mode 100644 index 0000000..bea330c --- /dev/null +++ b/lib/controller/functions/crud.dart @@ -0,0 +1,216 @@ +import 'dart:convert'; + +import 'package:http/http.dart' as http; + +import '../../constant/api_key.dart'; +import '../../constant/box_name.dart'; +import '../../constant/links.dart'; +import '../../main.dart'; +import '../../print.dart'; + +class CRUD { + Future get({ + required String link, + Map? payload, + }) async { + var url = Uri.parse( + link, + ); + var response = await http.post( + url, + body: payload, + headers: { + "Content-Type": "application/x-www-form-urlencoded", + 'Authorization': + 'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials.toString()))}', + }, + ); + Log.print('response: ${response.body}'); + Log.print('response: ${response.request}'); + Log.print('payload: $payload'); + // if (response.statusCode == 200) { + var jsonData = jsonDecode(response.body); + if (jsonData['status'] == 'success') { + return response.body; + } + + return jsonData['status']; + } + + // } + Future arabicTextExtractByVisionAndAI({ + required String imagePath, + required String driverID, + }) async { + var headers = { + 'Content-Type': 'application/json', + 'Ocp-Apim-Subscription-Key': AK.ocpApimSubscriptionKey + }; + + String imagePathFull = + '${AppLink.server}/card_image/$imagePath-$driverID.jpg'; + Log.print('imagePathFull: $imagePathFull'); + var request = http.Request( + 'POST', + Uri.parse( + 'https://eastus.api.cognitive.microsoft.com/computervision/imageanalysis:analyze?features=caption,read&model-version=latest&language=en&api-version=2024-02-01')); + request.body = json.encode({"url": imagePathFull}); + Log.print('request.body: ${request.body}'); + request.headers.addAll(headers); + Log.print('request.headers: ${request.headers}'); + + http.StreamedResponse response = await request.send(); + Log.print('response: ${response}'); + + if (response.statusCode == 200) { + return await response.stream.bytesToString(); + } else {} + } + + Future getAgoraToken({ + required String channelName, + required String uid, + }) async { + var uid = box.read(BoxName.phone) ?? box.read(BoxName.phoneDriver); + var res = await http.get(Uri.parse( + // 'https://repulsive-pig-rugby-shirt.cyclic.app/token?channelName=$channelName'), + 'https://orca-app-b2i85.ondigitalocean.app/token?channelName=$channelName'), + // headers: {'Authorization': 'Bearer ${AK.agoraAppCertificate}'}); + headers: {'Authorization': 'Bearer '}); + + if (res.statusCode == 200) { + var response = jsonDecode(res.body); + return response['token']; + } else {} + } + + Future getLlama({ + required String link, + required String payload, + required String prompt, + }) async { + var url = Uri.parse( + link, + ); + var headers = { + 'Content-Type': 'application/json', + 'Authorization': + 'Bearer LL-X5lJ0Px9CzKK0HTuVZ3u2u4v3tGWkImLTG7okGRk4t25zrsLqJ0qNoUzZ2x4ciPy' + // 'Authorization': 'Bearer ${Env.llamaKey}' + }; + var data = json.encode({ + "model": "Llama-3-70b-Inst-FW", + // "model": "llama-13b-chat", + "messages": [ + { + "role": "user", + "content": + "Extract the desired information from the following passage as json decoded like $prompt just in this:\n\n$payload" + } + ], + "temperature": 0.9 + }); + var response = await http.post( + url, + body: data, + headers: headers, + ); + + if (response.statusCode == 200) { + return response.body; + } + return response.statusCode; + } + + Future post({ + required String link, + Map? payload, + }) async { + // String? basicAuthCredentials = + // await storage.read(key: BoxName.basicAuthCredentials); + var url = Uri.parse( + link, + ); + var response = await http.post( + url, + body: payload, + headers: { + "Content-Type": "application/x-www-form-urlencoded", + 'Authorization': + 'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials))}', + }, + ); + print(response.request); + print(response.body); + // print(response.statusCode); + var jsonData = jsonDecode(response.body); + if (response.statusCode == 200) { + if (jsonData['status'] == 'success') { + return response.body; + } else { + String errorMessage = jsonData['message']; + // Get.snackbar('Error'.tr, errorMessage.tr, + // backgroundColor: AppColor.redColor); + return (jsonData['status']); + } + } else { + return response.statusCode; + } + } + + sendEmail( + String link, + Map? payload, + ) async { + var headers = { + "Content-Type": "application/x-www-form-urlencoded", + 'Authorization': + 'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials))}', + }; + var request = http.Request('POST', Uri.parse(link)); + request.bodyFields = payload!; + request.headers.addAll(headers); + + http.StreamedResponse response = await request.send(); + if (response.statusCode == 200) { + } else {} + } + + Future update({ + required String endpoint, + required Map data, + required String id, + }) async { + // String? basicAuthCredentials = + // await storage.read(key: BoxName.basicAuthCredentials); + var url = Uri.parse('$endpoint/$id'); + var response = await http.put( + url, + body: json.encode(data), + headers: { + 'Authorization': + 'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials))}', + }, + ); + return json.decode(response.body); + } + + Future delete({ + required String endpoint, + required String id, + }) async { + // String? basicAuthCredentials = + // await storage.read(key: BoxName.basicAuthCredentials); + var url = Uri.parse('$endpoint/$id'); + var response = await http.delete( + url, + headers: { + 'Authorization': + 'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials))}', + }, + ); + return json.decode(response.body); + } + + extractTextFromLines(json) {} +} diff --git a/lib/controller/functions/image.dart b/lib/controller/functions/image.dart new file mode 100644 index 0000000..589bf0d --- /dev/null +++ b/lib/controller/functions/image.dart @@ -0,0 +1,335 @@ +import 'dart:convert'; +import 'dart:io'; +import 'package:get/get.dart'; +import 'package:http/http.dart' as http; +import 'package:image_cropper/image_cropper.dart'; +import 'package:image_picker/image_picker.dart'; +import 'package:path/path.dart'; +import 'package:image/image.dart' as img; + +import 'package:flutter_image_compress/flutter_image_compress.dart'; +import 'package:path_provider/path_provider.dart' as path_provider; + +import '../../constant/api_key.dart'; +import '../../constant/box_name.dart'; +import '../../constant/colors.dart'; +import '../../main.dart'; + +class ImageController extends GetxController { + File? myImage; + bool isloading = false; + CroppedFile? croppedFile; + final picker = ImagePicker(); + var image; + + Future detectAndCropDocument(File imageFile) async { + img.Image? image = img.decodeImage(await imageFile.readAsBytes()); + if (image == null) throw Exception('Unable to decode image'); + + int left = image.width, top = image.height, right = 0, bottom = 0; + + // Threshold for considering a pixel as part of the document (adjust as needed) + const int threshold = 240; + + for (int y = 0; y < image.height; y++) { + for (int x = 0; x < image.width; x++) { + final pixel = image.getPixel(x, y); + final luminance = img.getLuminance(pixel); + + if (luminance < threshold) { + left = x < left ? x : left; + top = y < top ? y : top; + right = x > right ? x : right; + bottom = y > bottom ? y : bottom; + } + } + } + + // Add a small padding + left = (left - 5).clamp(0, image.width); + top = (top - 5).clamp(0, image.height); + right = (right + 5).clamp(0, image.width); + bottom = (bottom + 5).clamp(0, image.height); + + return img.copyCrop(image, + x: left, y: top, width: right - left, height: bottom - top); + } + + Future rotateImageIfNeeded(File imageFile) async { + img.Image croppedDoc = await detectAndCropDocument(imageFile); + + // Check if the document is in portrait orientation + bool isPortrait = croppedDoc.height > croppedDoc.width; + + img.Image processedImage; + if (isPortrait) { + // Rotate the image by 90 degrees clockwise + processedImage = img.copyRotate(croppedDoc, angle: 90); + } else { + processedImage = croppedDoc; + } + + // Get temporary directory + final tempDir = await path_provider.getTemporaryDirectory(); + final tempPath = tempDir.path; + + // Create the processed image file + File processedFile = File('$tempPath/processed_image.jpg'); + await processedFile.writeAsBytes(img.encodeJpg(processedImage)); + + return processedFile; + } + + Future rotateImage(File imageFile) async { + // Read the image file + img.Image? image = img.decodeImage(await imageFile.readAsBytes()); + + if (image == null) return imageFile; + + // Rotate the image by 90 degrees clockwise + img.Image rotatedImage = img.copyRotate(image, angle: 90); + + // Get temporary directory + final tempDir = await path_provider.getTemporaryDirectory(); + final tempPath = tempDir.path; + + // Create the rotated image file + File rotatedFile = File('$tempPath/rotated_image.jpg'); + await rotatedFile.writeAsBytes(img.encodeJpg(rotatedImage)); + + return rotatedFile; + } + + choosImage(String link, String driverId, String imageType) async { + final pickedImage = await picker.pickImage( + source: ImageSource.gallery, + ); + + if (pickedImage == null) return; + + image = File(pickedImage.path); + + croppedFile = await ImageCropper().cropImage( + sourcePath: image!.path, + uiSettings: [ + AndroidUiSettings( + toolbarTitle: 'Cropper'.tr, + toolbarColor: AppColor.blueColor, + toolbarWidgetColor: AppColor.yellowColor, + initAspectRatio: CropAspectRatioPreset.original, + lockAspectRatio: false), + IOSUiSettings( + title: 'Cropper'.tr, + ), + ], + ); + + if (croppedFile == null) return; + + myImage = File(croppedFile!.path); + isloading = true; + update(); + + // Rotate the compressed image + // File rotatedImage = await rotateImage(compressedImage); + File processedImage = await rotateImageIfNeeded(File(croppedFile!.path)); + File compressedImage = await compressImage(processedImage); + print('link =$link'); + try { + await uploadImage( + compressedImage, + {'driverID': driverId, 'imageType': imageType}, + link, + ); + } catch (e) { + Get.snackbar('Image Upload Failed'.tr, e.toString(), + backgroundColor: AppColor.redColor); + } finally { + isloading = false; + update(); + } + } + + choosFace(String link, String imageType) async { + final pickedImage = await picker.pickImage( + source: ImageSource.camera, + preferredCameraDevice: CameraDevice.front, + ); + if (pickedImage != null) { + image = File(pickedImage.path); + isloading = true; + update(); +// Compress the image + File compressedImage = await compressImage(File(pickedImage.path)); + + // Save the picked image directly + // File savedImage = File(pickedImage.path); + print('link =$link'); + try { + await uploadImage( + compressedImage, + { + 'driverID': + box.read(BoxName.driverID) ?? box.read(BoxName.passengerID), + 'imageType': imageType + }, + link, + ); + } catch (e) { + Get.snackbar('Image Upload Failed'.tr, e.toString(), + backgroundColor: AppColor.redColor); + } finally { + isloading = false; + update(); + } + } + } + + uploadImage(File file, Map data, String link) async { + var request = http.MultipartRequest( + 'POST', + Uri.parse(link), //'https://ride.mobile-app.store/uploadImage1.php' + ); + + var length = await file.length(); + var stream = http.ByteStream(file.openRead()); + var multipartFile = http.MultipartFile( + 'image', + stream, + length, + filename: basename(file.path), + ); + request.headers.addAll({ + 'Cache-Control': 'no-cache, no-store, must-revalidate', + 'Pragma': 'no-cache', + 'Expires': '0', + 'Authorization': + 'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials.toString()))}', + }); + // Set the file name to the driverID + request.files.add( + http.MultipartFile( + 'image', + stream, + length, + filename: '${box.read(BoxName.driverID)}.jpg', + ), + ); + data.forEach((key, value) { + request.fields[key] = value; + }); + var myrequest = await request.send(); + var res = await http.Response.fromStream(myrequest); + if (res.statusCode == 200) { + return jsonDecode(res.body); + } else { + throw Exception( + 'Failed to upload image: ${res.statusCode} - ${res.body}'); + } + } + + choosImagePicture(String link, String imageType) async { + final pickedImage = await picker.pickImage( + source: ImageSource.gallery, + // preferredCameraDevice: CameraDevice.rear, + // maxHeight: Get.height * .3, + // maxWidth: Get.width * .9, + // imageQuality: 100, + ); + image = File(pickedImage!.path); + + croppedFile = await ImageCropper().cropImage( + sourcePath: image!.path, + uiSettings: [ + AndroidUiSettings( + toolbarTitle: 'Cropper'.tr, + toolbarColor: AppColor.blueColor, + toolbarWidgetColor: AppColor.yellowColor, + initAspectRatio: CropAspectRatioPreset.original, + lockAspectRatio: false), + IOSUiSettings( + title: 'Cropper'.tr, + ), + ], + ); + myImage = File(pickedImage.path); + isloading = true; + update(); +// Save the cropped image + // File savedCroppedImage = File(croppedFile!.path); + File compressedImage = await compressImage(File(croppedFile!.path)); + print('link =$link'); + try { + await uploadImage( + compressedImage, + { + 'driverID': + box.read(BoxName.driverID) ?? box.read(BoxName.passengerID), + 'imageType': imageType + }, + link, + ); + } catch (e) { + Get.snackbar('Image Upload Failed'.tr, e.toString(), + backgroundColor: AppColor.redColor); + } finally { + isloading = false; + update(); + } + } + + uploadImagePicture(File file, Map data, String link) async { + var request = http.MultipartRequest( + 'POST', + Uri.parse(link), //'https://ride.mobile-app.store/uploadImage1.php' + ); + + var length = await file.length(); + var stream = http.ByteStream(file.openRead()); + var multipartFile = http.MultipartFile( + 'image', + stream, + length, + filename: basename(file.path), + ); + request.headers.addAll({ + 'Authorization': + 'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials.toString()))}', + }); + // Set the file name to the driverID + request.files.add( + http.MultipartFile( + 'image', + stream, + length, + filename: '${box.read(BoxName.driverID)}.jpg', + ), + ); + data.forEach((key, value) { + request.fields[key] = value; + }); + var myrequest = await request.send(); + var res = await http.Response.fromStream(myrequest); + if (res.statusCode == 200) { + return jsonDecode(res.body); + } else { + throw Exception( + 'Failed to upload image: ${res.statusCode} - ${res.body}'); + } + } +} + +Future compressImage(File file) async { + final dir = await path_provider.getTemporaryDirectory(); + final targetPath = "${dir.absolute.path}/temp.jpg"; + + var result = await FlutterImageCompress.compressAndGetFile( + file.absolute.path, + targetPath, + quality: 70, + minWidth: 1024, + minHeight: 1024, + ); + + return File(result!.path); +} diff --git a/lib/controller/local/local_controller.dart b/lib/controller/local/local_controller.dart new file mode 100644 index 0000000..7fabf4f --- /dev/null +++ b/lib/controller/local/local_controller.dart @@ -0,0 +1,156 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +import '../../constant/box_name.dart'; +import '../../main.dart'; +import '../themes/themes.dart'; + +class LocaleController extends GetxController { + Locale? language; + String countryCode = ''; + void restartApp() { + runApp(MyApp()); + } + + ThemeData appTheme = themeEnglish; + + changeLang(String langcode) { + Locale locale; + switch (langcode) { + case "ar": + locale = const Locale("ar"); + appTheme = themeArabic; + box.write(BoxName.lang, 'ar'); + break; + case "en": + locale = const Locale("en"); + appTheme = themeEnglish; + box.write(BoxName.lang, 'en'); + break; + case "tr": + locale = const Locale("tr"); + appTheme = themeEnglish; + box.write(BoxName.lang, 'tr'); + break; + case "fr": + locale = const Locale("fr"); + appTheme = themeEnglish; + box.write(BoxName.lang, 'fr'); + break; + case "it": + locale = const Locale("it"); + appTheme = themeEnglish; + box.write(BoxName.lang, 'it'); + break; + case "de": + locale = const Locale("de"); + appTheme = themeEnglish; + box.write(BoxName.lang, 'de'); + break; + case "el": + locale = const Locale("el"); + appTheme = themeEnglish; + box.write(BoxName.lang, 'el'); + break; + case "es": + locale = const Locale("es"); + appTheme = themeEnglish; + box.write(BoxName.lang, 'es'); + break; + case "fa": + locale = const Locale("fa"); + appTheme = themeEnglish; + box.write(BoxName.lang, 'fa'); + break; + case "zh": + locale = const Locale("zh"); + appTheme = themeEnglish; + box.write(BoxName.lang, 'zh'); + break; + case "ru": + locale = const Locale("ru"); + appTheme = themeEnglish; + box.write(BoxName.lang, 'ru'); + break; + case "hi": + locale = const Locale("hi"); + appTheme = themeEnglish; + box.write(BoxName.lang, 'hi'); + break; + default: + locale = Locale(Get.deviceLocale!.languageCode); + box.write(BoxName.lang, Get.deviceLocale!.languageCode); + appTheme = themeEnglish; + break; + } + + box.write(BoxName.lang, langcode); + // box.write(BoxName.lang, langcode); + Get.changeTheme(appTheme); + Get.updateLocale(locale); + restartApp(); + update(); + } + + @override + void onInit() { + String storedLang = box.read(BoxName.lang) ?? ""; + switch (storedLang) { + case "ar": + language = const Locale("ar"); + appTheme = themeArabic; + break; + case "en": + language = const Locale("en"); + appTheme = themeEnglish; + break; + case "tr": + language = const Locale("tr"); + appTheme = themeEnglish; + break; + case "fr": + language = const Locale("fr"); + appTheme = themeEnglish; + break; + case "it": + language = const Locale("it"); + appTheme = themeEnglish; + break; + case "de": + language = const Locale("de"); + appTheme = themeEnglish; + break; + case "el": + language = const Locale("el"); + appTheme = themeEnglish; + break; + case "es": + language = const Locale("es"); + appTheme = themeEnglish; + break; + case "fa": + language = const Locale("fa"); + appTheme = themeArabic; + break; + case "zh": + language = const Locale("zh"); + appTheme = themeEnglish; + break; + case "ru": + language = const Locale("ru"); + appTheme = themeEnglish; + break; + case "hi": + language = const Locale("hi"); + appTheme = themeEnglish; + break; + default: + language = Locale(Get.deviceLocale!.languageCode); + // language = Locale(Get.deviceLocale!.languageCode); + appTheme = themeEnglish; + break; + } + + super.onInit(); + } +} diff --git a/lib/controller/local/translations.dart b/lib/controller/local/translations.dart new file mode 100644 index 0000000..efe796a --- /dev/null +++ b/lib/controller/local/translations.dart @@ -0,0 +1,9160 @@ +import 'package:get/get.dart'; + +class MyTranslation extends Translations { + @override + Map> get keys => { + "ar": { + "red": "أحمر", + "green": "أخضر", + "blue": "أزرق", + "black": "أسود", + "white": "أبيض", + "yellow": "أصفر", + "purple": "أرجواني", + "orange": "برتقالي", + "pink": "وردي", + "brown": "بني", + "gray": "رمادي", "Eggplant": "باذنجان", + "Dark Red": "نبيتي", + "Sky Blue": "ازرق سماوي", + "Mocha": "موكا", + "cyan": "سماوي", + "magenta": "أرجواني داكن", + "lime": "ليموني", + "indigo": "نيلي", + "violet": "بنفسجي", + "gold": "ذهبي", + "silver": "فضي", + "teal": "تركوازي", + "navy": "كحلي", + "Capture an Image of Your Criminal Record": + "التقط صورة لسجلك الجنائي", + "IssueDate": "تاريخ الإصدار", + "Capture an Image of Your ID Document Back": + "التقاط صورة للجهة الخلفية من وثيقة الهوية الخاصة بك", + "Capture an Image of Your car license front": + "التقط صورة لرخصة سيارتك من الأمام", + "Capture an Image of Your ID Document Back": + "التقاط صورة للجهة الخلفية من وثيقة الهوية الخاصة بك", + "Capture an Image of Your ID Document front": + "التقاط صورة لوثيقة هويتك من الأمام", + "Capture an Image of Your car license back": + "التقاط صورة لرخصة سيارتك مرة أخرى", + "Capture an Image of Your Driver’s License": + "التقط صورة لرخصة القيادة الخاصة بك", + "Capture an Image of Your Driver License": "التقط صورة لرخصة قيادتك", + "Not found any image": "لم يتم العثور على أي صورة", + "Documents check": "التحقق من الوثائق", + "ID Documents Front": "الوثيقه الشخصية - الأمامية", + "Vehicle Details Front": "تفاصيل المركبة - الأمامية", + "Vehicle Details Back": "تفاصيل المركبة - الخلفية", + "Criminal Record": "السجل الجنائي", + "ID Documents Back": "الوثيقه الشخصية - الخلفية", + "Driver's License": "رخصة القيادة", + "Your driver’s license and/or car tax has expired. Please renew them before proceeding.": + "لقد انتهت صلاحية رخصة القيادة و/أو ضريبة السيارة الخاصة بك. يرجى تجديدها قبل المتابعة.", + "Your driver’s license has expired. Please renew it before proceeding.": + "لقد انتهت صلاحية رخصة القيادة الخاصة بك. يرجى تجديدها قبل المتابعة.", + "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": + "الرقم الوطني على رخصة القيادة الخاصة بك لا يتطابق مع الرقم الموجود على مستند الهوية. يرجى التحقق وتقديم المستندات الصحيحة.", + "Welcome Drivers": "أهلاً بالسواق", + "License Categories": + "فئات الرخصة ", // Replace with actual translation + "Notes:": "ملاحظات:", // Replace with actual translation + "Enter notes here...": + "أدخل الملاحظات هنا...", // Replace with actual translation + "Call Driver": "اتصل بالسائق", // Replace with actual translation + "Success": "نجاح", // Replace with actual translation + "Changes saved successfully": + "تم حفظ التغييرات بنجاح", // Replace with actual translation + "Save Changes": "حفظ التغييرات", + "Passengers Cant Register": "الركاب لا يستطيعون التسجيل", + "Enter notes after call": "أدخل الملاحظات بعد المكالمة", + "Notes": "ملاحظات", + "Save Notes": "حفظ الملاحظات", + "Created At": "أنشئ في", + "Phone Number": "رقم الهاتف", + "Drivers Cant Register": "السائقون لا يستطيعون التسجيل", + "Plate Number": "رقم اللوحة", + "Make": "الشركة المصنعة", + "Model": "طراز", + "Year": "سنة الصنع", + "Color": "اللون", + "Fuel Type": "نوع الوقود", + "Displacement": "سعة المحرك", + "Registration Date": "تاريخ التسجيل", + "Expiration Date": "تاريخ انتهاء الصلاحية", + "License Information": "معلومات الرخصة", + "License Type": "نوع الرخصة", + "Card ID": "رقم بطاقة الهوية", + "Issue Date": "تاريخ الإصدار", + "Expiry Date": "تاريخ انتهاء الصلاحية", + "Categories": "التصنيفات", + "Bank Information": "معلومات البنك", + "Account Number": "رقم الحساب", + "Bank Code": "رمز البنك", + 'Driver Statistics': "إحصاءات السائق", + "Name (English)": "الاسم (باللغة الإنجليزية)", + "Name": "الاسم", + "Phone": "رقم الهاتف", + "Gender": "الجنس", + "Birthdate": "تاريخ الميلاد", + "National Number": "الرقم الوطني", + "Religion": "الدين", + "Multiplier": "مضاعف", + "Occupation": "المهنة", + "Education": "المؤهل العلمي", + "Total Rides": "إجمالي الرحلات", + "Average Rating": "التقييم المتوسط", + "Total Payments": "إجمالي المدفوعات", + "Wallet Balance": "رصيد المحفظة", + "Complaints": "الشكاوى", + "Scam Reports": "تقارير الاحتيال", + "Passengers Rated": "تقييمات الركاب", + "Avg Passenger Rating": "متوسط تقييم الركاب", + "Vehicle Information": "معلومات المركبة", + "VIN": "رقم التعريف الخاص بالمركبة (VIN)", + "insert Driver phone": "أدخل رقم هاتف السائق", + "Driver details by phone": "تفاصيل السائق حسب رقم الهاتف", + "insert passenger phone": "أدخل رقم هاتف الراكب", + 'passenger details by phone': "تفاصيل الراكب حسب رقم الهاتف", + 'Sefer Service': "خدمة سفر", + "Personal Information": "معلومات شخصية", + "Email": "البريد الإلكتروني", + "Employment": "عمل", + "Marital Status": "الحالة الاجتماعية", + "Latest Ride": "أحدث رحلة", + "Ride ID": "معرف الرحلة", + "Date": "تاريخ", + "Start Time": "وقت البدء", + "End Time": "وقت الانتهاء", + "Price": "السعر", + "Status": "حالة", + 'Driver Information': "معلومات عن السائق", + "Payment Method": "طريقة الدفع", + "Car Type": "نوع السيارة", + "Distance": "مسافة", + "Additional comments": "تعليقات إضافية.", + "Edit car plate": "تعديل لوحة السيارة", + "View complaint": "عرض الشكوى", + "I don't have a suitable vehicle": "ليس لدي مركبة مناسبة", + "I'll register when the app is fully launched": + "سأسجل عندما يتم إطلاق التطبيق بالكامل", + "I need more help understanding the app": + "أحتاج إلى المزيد من المساعدة لفهم التطبيق", + "My documents have expired": "وثائقي منتهية الصلاحية", + "I'm not ready yet": "لست جاهزًا بعد", + "Wallet Information": "معلومات المحفظة", + "Wallet Balance": "رصيد المحفظة", + "Last Payment Amount": "مبلغ آخر دفعة", + "Last Payment Method": "آخر طريقة دفع", + }, + "tr": { + "Sign In by Apple": "Apple'dan Giriş Yapın", + "Sign In by Google": "Google'dan Giriş Yapın", + "How do I request a ride?": "Nasıl yolculuk talebinde bulunabilirim?", + "Step-by-step instructions on how to request a ride through the Sefer app.": + "Sefer uygulaması aracılığıyla nasıl yolculuk talebinde bulunacağınıza ilişkin adım adım talimatlar.", + "What types of vehicles are available?": "Ne tür araçlar mevcut?", + "Sefer offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": + "Sefer, ekonomiden konfora, lüksten ihtiyaçlarınıza uygun araç seçenekleri sunuyor. Bütçenize ve yolcu sayınıza en uygun seçeneği seçin.", + "How can I pay for my ride?": + "Yolculuğumun ücretini nasıl ödeyebilirim?", + "Sefer offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": + "Sefer, size kolaylık sağlamak için birden fazla ödeme yöntemi sunar. Yolculuk onayı sırasında nakit ödeme veya kredi/banka kartıyla ödeme arasında seçim yapın.", + "Can I cancel my ride?": "Yolculuğumu iptal edebilir miyim?", + "Yes, you can cancel your ride under certain conditions (e.g., before driver is assigned). See the Sefer cancellation policy for details.": + "Evet, belirli koşullar altında (örn. sürücü atanmadan önce) sürüşünüzü iptal edebilirsiniz. Ayrıntılar için Sefer iptal politikasına bakın.", + "Driver Registration & Requirements": "Sürücü Kaydı ve Gereksinimler", + "How can I register as a driver?": + "Sürücü olarak nasıl kayıt olabilirim?", + "What are the requirements to become a driver?": + "Sürücü olmanın şartları nelerdir?", + "Visit our website or contact Sefer support for information on driver registration and requirements.": + "Sürücü kaydı ve gereklilikler hakkında bilgi için web sitemizi ziyaret edin veya Sefer destek ile iletişime geçin.", + "How do I communicate with the other party (passenger/driver)?": + "Karşı tarafla (yolcu/sürücü) nasıl iletişim kurabilirim?", + "Sefer provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": + "Sefer, sürüşünüz sırasında sürücünüz veya yolcunuzla iletişim kurmanıza olanak tanıyan uygulama içi sohbet işlevi sağlar.", + "What safety measures does Sefer offer?": + "Sefer hangi güvenlik önlemlerini sunuyor?", + "Sefer prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": + "Sefer güvenliğinizi ön planda tutar. Sürücü doğrulama, uygulama içi yolculuk takibi ve acil durum iletişim seçenekleri gibi özellikler sunuyoruz.", + "Frequently Questions": "Sıkça Sorulan Sorular", + "User does not exist.": "Kullanıcı yok.", + "We need your phone number to contact you and to help you.": + "Sizinle iletişim kurabilmemiz ve size yardımcı olabilmemiz için telefon numaranıza ihtiyacımız var.", + "You will recieve code in sms message": + "Kodu sms mesajıyla alacaksınız", + "Please enter": "Girin lütfen", + "We need your phone number to contact you and to help you receive orders.": + "Sizinle iletişime geçebilmemiz ve sipariş almanıza yardımcı olabilmemiz için telefon numaranıza ihtiyacımız var.", + "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": + "Sabıka kaydınızdaki tam ad, ehliyetinizdeki adla eşleşmiyor. Lütfen doğru belgeleri doğrulayın ve sağlayın.", + "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": + "Ehliyetinizdeki ulusal numara ile kimlik belgenizdeki numara eşleşmiyor. Lütfen doğru belgeleri doğrulayın ve sağlayın.", + "Capture an Image of Your Criminal Record": + "Sabıka Kayıtlarınızın Görüntüsünü Yakalayın", + "IssueDate": "Düzenleme tarihi", + "Capture an Image of Your car license front": + "Araç lisansınızın ön yüzünün bir görüntüsünü yakalayın", + "Capture an Image of Your ID Document front": + "Kimlik Belgenizin ön yüzünün bir görüntüsünü yakalayın", + "NationalID": "Ulusal Kimliği", + "FullName": "Ad Soyad", + "InspectionResult": "Muayene sonucu", + "Criminal Record": "Sabıka kaydı", + "The email or phone number is already registered.": + "E-posta veya telefon numarası zaten kayıtlı.", + "To become a ride-sharing driver on the Sefer app, you need to upload your driver\"s license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Sefer app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": + "Sefer uygulamasına araç paylaşımlı bir sürücü olmak için ehliyetinizi, kimlik belgenizi ve araç tescil belgenizi yüklemeniz gerekir. Yapay zeka sistemimiz, yalnızca 2-3 dakika içinde anında inceleyip orijinalliğini doğrulayacaktır. Onaylanırsanız Sefer uygulamasında şoför olarak çalışmaya başlayabilirsiniz. Sahte belge göndermenin ciddi bir suç olduğunu ve derhal işten çıkarılmaya ve yasal sonuçlara yol açabileceğini lütfen unutmayın.", + "Documents check": "Belge kontrolü", + "Driver's License": "Ehliyet", + "License Type": "Lisans türü", + "National Number": "Milli Numara", + "Name (Arabic)": "İsim (Arapça)", + "Name (English)": "İsim (İngilizce)", + "Address": "Adres", + "Issue Date": "Düzenleme tarihi", + "Expiry Date": "Son kullanma tarihi", + "License Categories": "Lisans Kategorileri", + "driver_license": "Ehliyet", + "Capture an Image of Your Driver License": + "Sürücü Belgenizin Bir Görüntüsünü Yakalayın", + "ID Documents Back": "Kimlik Belgeleri Geri", + "National ID": "Ulusal Kimliği", + "Occupation": "Meslek", + "Gender": "Cinsiyet", + "Religion": "Din", + "Marital Status": "Medeni hal", + "Full Name (Marital)": "Tam Ad (Medeni)", + "Expiration Date": "Son kullanma tarihi", + "Capture an Image of Your ID Document Back": + "Kimlik Belgenizin Bir Görüntüsünü Yakalayın", + "ID Documents Front": "Kimlik Belgeleri Ön Taraf", + "First Name": "İlk adı", + "CardID": "Kart kimliği", + "Full Name": "Ad Soyad", + "Vehicle Details Front": "Araç Detayları Ön", + "Plate Number": "Plaka numarası", + "Owner Name": "Sahip Adı", + "Vehicle Details Back": "Araç Detayları Geri", + "Make": "Yapmak", + "Model": "Modeli", + "Year": "Yıl", + "Chassis": "Şasi", + "Color": "Renk", + "Displacement": "Yer değiştirme", + "Fuel": "Yakıt", + "Tax Expiry Date": "Vergi Sona Erme Tarihi", + "Inspection Date": "Teftiş tarihi", + "Capture an Image of Your car license back": + "Araç ruhsatınızın bir görüntüsünü geri çekin", + "Capture an Image of Your Driver’s License": + "Ehliyetinizin Görüntüsünü Yakalayın", + "Sign in with Google for easier email and name entry": + "Daha kolay e-posta ve ad girişi için Google ile oturum açın", + "You will choose allow all the time to be ready receive orders": + "Sipariş almaya her zaman hazır olmaya izin vermeyi seçeceksiniz", + "Welcome to Sefer!": "Sefer'e hoş geldiniz!", + "Get to your destination quickly and easily.": + "Hedefinize hızlı ve kolay bir şekilde ulaşın.", + "Enjoy a safe and comfortable ride.": + "Güvenli ve konforlu bir sürüşün keyfini çıkarın.", + "Choose Language": "Dil seçiniz", + "Login": "Giriş yapmak", + "Pay with Wallet": "Cüzdan ile öde", + "Invalid MPIN": "Geçersiz MPIN", + "Invalid OTP": "Geçersiz OTP", + "Enter your email address": "E-posta adresinizi giriniz", + "Please enter Your Email.": "Lütfen E-postanızı girin.", + "Enter your phone number": "Telefon numaranızı girin", + "Please enter your phone number.": "Lütfen telefon numaranızı girin.", + "Please enter Your Password.": "Şifrenizi giriniz Lütfen.", + "Submit": "Göndermek", + "if you dont have account": "hesabınız yoksa", + "Register": "Kayıt olmak", + "Accept Ride's Terms & Review Privacy Notice": + "Ride Şartlarını Kabul Edin ve Gizlilik Bildirimini İnceleyin", + "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": + "Aşağıda 'Kabul Ediyorum'u seçerek Kullanım Koşullarını inceleyip kabul ediyorum ve Gizlilik Bildirimini onaylıyorum. En az 18 yaşındayım.", + "I Agree": "Kabul ediyorum", + "First name": "İlk adı", + "Enter your first name": "İlk adınızı girin", + "Please enter your first name.": "Lütfen isminizi giriniz.", + "Last name": "Soy isim", + "Enter your last name": "Soyadınızı giriniz", + "Please enter your last name.": "Lütfen soyadınızı giriniz.", + "City": "Şehir", + "Please enter your City.": "Lütfen Şehrinizi giriniz.", + "Male": "Erkek", + "Female": "Dişi", + "Verify Email": "E-mail'i doğrula", + "We sent 5 digit to your Email provided": + "Sağladığınız E-postanıza 5 haneli mesaj gönderdik", + "5 digit": "5 haneli", + "Send Verification Code": "Doğrulama kodu Gönder", + "Your Ride Duration is": "Yolculuk Süreniz:", + "You will be thier in": "Sen orada olacaksın", + "You trip distance is": "Seyahat mesafeniz", + "Fee is": "Ücret:", + "From :": "İtibaren :", + "To :": "İle :", + "Add Promo": "Promosyon Ekle", + "Confirm Selection": "Seçimi Onayla", + "distance is": "mesafe", + "duration is": "süre", + "I don't need a ride anymore": "Artık arabaya ihtiyacım yok", + "I was just trying the application": "Sadece uygulamayı deniyordum", + "No driver accepted my request": + "Hiçbir sürücü isteğimi kabul etmedi", + "I added the wrong pick-up/drop-off location": + "Yanlış teslim alma/bırakma konumunu ekledim", + "I don't have a reason": "bir nedenim yok", + "Other": "Diğer", + "Can we know why you want to cancel Ride ?": + "Ride'ı neden iptal etmek istediğinizi öğrenebilir miyiz?", + "Cancel Ride": "Sürüşü İptal Et", + "Add Payment Method": "Ödeme yöntemi ekle", + "Your Wallet balance is": "Cüzdan bakiyeniz", + "Ride Wallet": "Ride Cüzdanı", + "Payment Method": "Ödeme yöntemi", + "Type here Place": "Buraya yazın Yer", + "Are You sure to ride to": "Arabayla gideceğinden emin misin?", + "Confirm": "Onaylamak", + "Back": "Geri", + "You are Delete": "Sen Sil", + "Deleted": "silindi", + "You Dont Have Any places yet !": "Henüz Yeriniz Yok!", + "Favorite Places": "Favori yerler", + "From : Current Location": "Nereden : Mevcut Konum", + "Where to": "Nereye", + "Notifications": "Bildirimler", + "Profile": "Profil", + "Home": "Ev", + "My Cared": "Benim Bakımım", + "Add Card": "Kart ekle", + "Add Credit Card": "Kredi Kartı Ekle", + "Please enter the cardholder name": + "Lütfen kart sahibinin adını girin", + "Please enter the expiry date": "Lütfen son kullanma tarihini girin", + "Please enter the CVV code": "Lütfen CVV kodunu girin", + "Go To Favorite Places": "Favori Yerlere Git", + "Go to this Target": "Bu Hedefe git", + "My Profile": "Benim profilim", + "Sign Out": "Oturumu Kapat", + "Home Page": "Ana Sayfa", + "Are you want to go to this site": "Bu siteye gitmek ister misin", + "MyLocation": "Benim konumum", + "my location": "benim konumum", + "Target": "Hedef", + "Update": "Güncelleme", + "You Should choose rate figure": "Oran rakamını seçmelisiniz", + "Login Captin": "Giriş Kaptan", + "Register Captin": "Captin'i kaydedin", + "Send Verfication Code": "Doğrulama Kodunu Gönder", + "KM": "KM", + "End Ride": "Sürüşü Sonlandır", + "Minute": "Dakika", + "Go to passenger Location now": "Şimdi yolcu konumuna gidin", + "Duration of the Ride is": "Sürüş Süresi:", + "Distance of the Ride is": "Sürüş Mesafesi:", + "Name of the Passenger is": "Yolcunun Adı:", + "Hello this is Captain": "Merhaba ben Kaptan", + "Start the Ride": "Yolculuğu Başlat", + "Please Wait If passenger want To Cancel!": + "Yolcu İptal Etmek İstiyorsa Lütfen Bekleyiniz!", + "Total Duration:": "Toplam Süre:", + "Active Duration:": "Aktif Süre:", + "Waiting for Captin ...": "Kaptan'ı bekliyorum...", + "Age is": "Yaş", + "Rating is": "Derecelendirme:", + "to arrive you.": "sana varmak için.", + "Order History": "Sipariş Geçmişi", + "My Wallet": "Cüzdanım", + "Tariff": "Tarife", + "Settings": "Ayarlar", + "Feed Back": "Geri bildirim", + "Promos": "Promosyonlar", + "Please enter a valid 16-digit card number": + "Lütfen 16 haneli geçerli bir kart numarası girin", + "Add Phone": "Telefon Ekle", + "Please enter a phone number": "Lütfen bir telefon numarası girin", + "You dont Add Emergency Phone Yet!": + "Henüz Acil Durum Telefonunu Eklemediniz!", + "You will arrive to your destination after": + "Hedefinize sonra varacaksınız", + "You can cancel Ride now": "Sürüşü şimdi iptal edebilirsiniz", + "You Can cancel Ride After Captain did not come in the time": + "Kaptan zamanında gelmediğinde Sürüşü iptal edebilirsiniz", + "If you in Car Now. Press Start The Ride": + "Şimdi Arabadaysanız. Yolculuğu Başlat'a basın", + "You Dont Have Any amount in": "Herhangi Bir Tutarınız Yok", + "Wallet!": "Cüzdan!", + "You Have": "Var", + "Save Credit Card": "Kredi Kartını Kaydet", + "Show Promos": "Promosyonları Göster", + "10 and get 4% discount": "10 ve %4 indirim kazanın", + "20 and get 6% discount": "20 ve %6 indirim kazanın", + "40 and get 8% discount": "40 ve %8 indirim kazanın", + "100 and get 11% discount": "100 ve %11 indirim kazanın", + "Pay with Your PayPal": "PayPal'ınızla ödeme yapın", + "You will choose one of above !": + "Yukarıdakilerden birini seçeceksiniz!", + "Cancel": "İptal etmek", + "Delete My Account": "Hesabımı sil", + "Edit Profile": "Profili Düzenle", + "Name": "İsim", + "Update Gender": "Cinsiyeti Güncelle", + "Education": "Eğitim", + "Update Education": "Eğitimi Güncelle", + "Employment Type": "İstihdam Tipi", + "SOS Phone": "Acil Durum Telefonu", + "High School Diploma": "Lise diploması", + "Associate Degree": "Ön lisans", + "Bachelor's Degree": "Lisans", + "Master's Degree": "Yüksek lisans", + "Doctoral Degree": "Doktora derecesi", + "Promos For today": "Bugün için Promosyonlar", + "Copy this Promo to use it in your Ride!": + "Ride'ınızda kullanmak için bu Promosyonu kopyalayın!", + "To change some Settings": "Bazı Ayarları değiştirmek için", + "To change Language the App": "Uygulamanın Dilini değiştirmek için", + "Order Request Page": "Sipariş Talep Sayfası", + "Rouats of Trip": "Gezi Rotaları", + "Passenger Name is": "Yolcu Adı:", + "Total From Passenger is": "Yolcu Toplamı (şimdiki değeri)", + "Duration To Passenger is": "Yolcuya Kalma Süresi:", + "Distance To Passenger is": "Yolcuya Uzaklık (şimdiki değeri)", + "Total For You is": "Sizin İçin Toplam:", + "Distance is": "Mesafe:", + "KM": "KM", + "Duration of Trip is": "Seyahat Süresi:", + "Minutes": "dakika", + "Apply Order": "Siparişi Uygula", + "Refuse Order": "Siparişi Reddet", + "Rate Captain": "Oran Kaptanı", + "Enter your Note": "Notunuzu girin", + "Type something...": "Birşeyler yaz...", + "Submit rating": "Derecelendirmeyi gönder", + "Rate Passenger": "Ücretli Yolcu", + "Ride Summary": "Sürüş Özeti", + "welcome_message": "karşılama mesajı", + "app_description": "uygulama_açıklaması", + "get_to_destination": "get_to_destination", + "get_a_ride": "get_a_ride", + "safe_and_comfortable": "güvenli_ve_rahat", + "committed_to_safety": "commit_to_safety", + "Driver Applied the Ride for You": + "Sürücü Sürüşü Sizin Yerinize Uyguladı", + "Show latest promo": "En son promosyonu göster", + "Cancel Trip": "Seyahati İptal Et", + "Passenger Cancel Trip": "Yolcu Seyahat İptali", + "Please stay on the picked point.": "Lütfen seçilen noktada kalın.", + "Trip is Begin": "Yolculuk Başlıyor", + "Hi ,I will go now": "merhaba ben şimdi gideceğim", + "Passenger come to you": "Yolcu sana gelsin", + "Hi ,I Arrive your site": "Merhaba sitenize geldim", + "Driver Finish Trip": "Sürücü Bitirme Yolculuğu", + "you will pay to Driver": "Sürücüye ödeme yapacaksınız", + "Driver Cancel Your Trip": "Sürücü Yolculuğunuzu İptal Edin", + "you will pay to Driver you will be pay the cost of driver time look to your SEFER Wallet": + "Sürücüye ödeme yapacaksınız Sürücü süresinin maliyetini siz ödeyeceksiniz SEFER Cüzdanınıza bakın", + "I will go now": "şimdi gideceğim", + "You Have Tips": "İpuçlarınız Var", + "tips": "ipuçları", + "Total is": "Toplam:", + "الْمَجْمُوع هُوَ": "الْمَجْمُوع هُوَ", + "No,I want": "Hayır, istiyorum", + "Your fee is": "Ücretiniz", + "Do you want to pay Tips for this Driver": + "Bu Sürücü için İpuçları ödemek ister misiniz?", + "Tip is": "İpucu:", + "Tip is": "İpucu:", + "Camera Access Denied.": "Kamera erişimi reddedildi.", + "Open Settings": "Ayarları aç", + "GPS Required Allow !.": "GPS Gerekli İzin Ver!.", + "Your Account is Deleted": "Hesabınız Silindi", + "Are you sure to delete your account?": + "Hesabınızı sildiğinizden emin misiniz?", + "Your data will be erased after 2 weeks": + "Verileriniz 2 hafta sonra silinecek", + "And you will can't return to use app after 1 month": + "Ve 1 ay sonra uygulamayı kullanmaya geri dönemezsiniz", + "وَلَن تَسْتَطِيع اسْتِخْدَام التَّطْبِيق مَرَّة أُخْرَى بَعْد شَهْر": + "وَلَن تَسْتَطِيع اسْتِخْدَام التَّطْبِيق مَرَّة أُخْرَى بَعْد شَهْر", + "Enter Your First Name": "İlk adınızı girin", + "Are you Sure to LogOut?": "Oturumu Kapatacağınızdan Emin misiniz?", + "Email Wrong": "E-posta Yanlış", + "Email you inserted is Wrong.": "Eklediğiniz e-posta Yanlış.", + "You have finished all times": "Tüm zamanları bitirdin", + "if you want help you can email us here": + "yardım istiyorsanız bize buradan e-posta gönderebilirsiniz", + "Thanks": "Teşekkürler", + "Email Us": "Bize e-posta gönderin", + "I cant register in your app in face detection": + "Yüz algılamada uygulamanıza kayıt olamıyorum", + "Hi": "MERHABA", + "No face detected": "Yüz algılanmadı", + "Image detecting result is": "Görüntü algılama sonucu:", + "from 3 times Take Attention": "3 kereden itibaren Dikkat Edin", + "Be sure for take accurate images please": + "Doğru fotoğraflar çektiğinizden emin olun lütfen", + "You have": "Var", + "لَدَيْك": "لَدَيْك", + "image verified": "resim doğrulandı", + "Next": "Sonraki", + "There is no help Question here": "Burada yardım sorusu yok", + "Call End": "Çağrı Sonlandırma", + "You dont have Points": "Puanınız yok", + "You Are Stopped For this Day !": "Bu Günlük Durduruldunuz!", + "You must be charge your Account": + "Hesabınızdan ücret alınması gerekir", + "You Refused 3 Rides this Day that is the reason": + "Bu Gün 3 Sürüşü Reddettiniz, nedeni bu", + "See you Tomorrow!": "Yarın görüşürüz!", + "لِقَائِنَا غَدًا!": "لِقَائِنَا غَدًا!", + "Recharge my Account": "Hesabımı Yeniden Yükle", + "Ok , See you Tomorrow": "Tamam yarın görüşürüz", + "You are Stopped": "Durduruldun", + "Connected": "Bağlı", + "Not Connected": "Bağlı değil", + "Your are far from passenger location": + "Yolcu konumundan uzaktasınız", + "go to your passenger location before": "önce yolcu konumunuza gidin", + "Passenger cancel trip": "Yolcu seyahati iptal etti", + "يُلْغِي الرَّاكِب الرِّحْلَة": "يُلْغِي الرَّاكِب الرِّحْلَة", + "You will get cost of your work for this trip": + "Bu yolculukta yaptığınız işin maliyetini alacaksınız", + "in your wallet": "cüzdanında", + "you gain": "kazandın", + "Order Cancelled": "Sipariş iptal edildi", + "Order Cancelled by Passenger": + "Sipariş Yolcu Tarafından İptal Edildi", + "Success": "Başarı", + "Feedback data saved successfully": + "Geri bildirim verileri başarıyla kaydedildi", + "No Promo for today .": "Bugün için Promosyon Yok.", + "Select your destination": "Hedefinizi seçin", + "Search for your Start point": "Başlangıç ​​noktanızı arayın", + "Search for waypoint": "Yol noktası ara", + "Current Location": "Mevcut konum", + "Add Location 1": "Konum Ekle 1", + "You must Verify email !.": "E-postayı doğrulamanız gerekir!", + "Cropper": "Ekin", + "Saved Sucssefully": "Başarıyla Kaydedildi", + "Select Date": "Tarih seç", + "Birth Date": "Doğum günü", + "Ok": "Tamam", + "the 500 points equal 30 JOD": "500 puan 30 JOD'a eşittir", + "the 500 points equal 30 JOD for you": + "500 puan sizin için 30 JOD'a eşittir", + "So go and gain your money": "Öyleyse git ve paranı kazan", + "فَاسْتَحِقَّ فُلُوسَك وَاكْسِب النِّقَاط": + "فَاسْتَحِقَّ فُلُوسَك وَاكْسِب النِّقَاط", + "token updated": "belirteç güncellendi", + "Add Location 2": "Konum Ekle 2", + "Add Location 3": "Konum Ekle 3", + "Add Location 4": "Konum Ekle 4", + "Waiting for your location": "Konumunuzu bekliyorum", + "Search for your destination": "Hedefinizi arayın", + "Hi! This is": "MERHABA! Bu", + "I am using": "Ben kullanıyorum", + "to ride with": "birlikte binmek", + "as the driver.": "sürücü olarak.", + "is driving a": "bir araba sürüyor", + "with license plate": "plakalı", + "I am currently located at": "şu anda bulunduğum yer:", + "Please go to Car now": "Lütfen şimdi Arabaya gidin", + "If you need to reach me, please contact the driver directly at": + "Bana ulaşmanız gerekiyorsa lütfen doğrudan sürücüyle iletişime geçin:", + "No Car or Driver Found in your area.": + "Bölgenizde Araç veya Sürücü Bulunamadı.", + "Please Try anther time": "Lütfen başka zaman deneyin", + "There no Driver Aplly your order sorry for that": + "Siparişinizi Uygulayacak Sürücü Yok Bunun için özür dileriz", + "Trip Cancelled": "Seyahat İptal Edildi", + "The Driver Will be in your location soon .": + "Sürücü yakında bulunduğunuz yerde olacak.", + "The distance less than 500 meter.": "Mesafe 500 metreden az.", + "Promo End !": "Promosyon Sonu!", + "There is no notification yet": "Henüz bir bildirim yok", + "Use Touch ID or Face ID to confirm payment": + "Ödemeyi onaylamak için Touch ID veya Face ID'yi kullanın", + "Contact us for any questions on your order.": + "Siparişinizle ilgili sorularınız için bizimle iletişime geçin.", + "Pyament Cancelled .": "Ödeme İptal Edildi.", + "type here": "buraya yaz", + "Scan Driver License": "Tarama Sürücüsü Lisansı", + "Please put your licence in these border": + "Lütfen ehliyetinizi bu sınıra koyun", + "Camera not initialized yet": "Kamera henüz başlatılmadı", + "Take Image": "Resim Çek", + "AI Page": "Yapay Zeka Sayfası", + "Take Picture Of ID Card": "Kimlik Kartının Fotoğrafını Çekin", + "Take Picture Of Driver License Card": + "Ehliyet Kartının Fotoğrafını Çekin", + "We are process picture please wait": + "Resim işliyoruz lütfen bekleyin", + "There is no data yet.": "Henüz veri yok.", + "Name :": "İsim :", + "Drivers License Class:": "Sürücü Belge Sınıfı:", + "Document Number:": "Belge Numarası:", + "Address:": "Adres:", + "Height:": "Yükseklik:", + "Expiry Date:": "Son kullanma tarihi:", + "Date of Birth:": "Doğum tarihi:", + "You can\"t continue with us .": "Bizimle devam edemezsin.", + "You should renew Driver license": + "Sürücü ehliyetini yenilemelisiniz", + "Detect Your Face": "Yüzünüzü Algılayın", + "Go to next step": "Sonraki adıma git", + "scan Car License.": "Araba Lisansını tarayın.", + "aاسْتِخْرَاج رُخْصَة السَّيَّارَة.": + "aاسْتِخْرَاج رُخْصَة السَّيَّارَة.", + "Name in arabic": "Arapça isim", + "Drivers License Class": "Ehliyet Sınıfı", + "Date of Birth": "Doğum tarihi", + "Age": "Yaş", + "Lets check Car license": "Araba ruhsatını kontrol edelim", + "Car Kind": "Araba Türü", + "Car Plate": "Araç plakası", + "Lets check License Back Face": "Lisansın Arka Yüzünü kontrol edelim", + "Car License Card": "Araç Ruhsat Kartı", + "No image selected yet": "Henüz resim seçilmedi", + "Made :": "Yapılmış :", + "model :": "modeli:", + "VIN :": "VIN:", + "year :": "yıl :", + "ُExpire Date": "son kullanma tarihi", + "Login Driver": "Oturum Açma Sürücüsü", + "Password must br at least 6 character.": + "Şifre en az 6 karakterden oluşmalıdır.", + "if you don\"t have account": "hesabınız yoksa", + "Here recorded trips audio": "Burada kaydedilen gezilerin sesi", + "Register as Driver": "Sürücü olarak kaydolun", + "Privacy Notice": "Gizlilik Bildirimi", + "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the": + "Aşağıda 'Kabul Ediyorum'u seçerek Kullanım Koşullarını inceledim, kabul ediyorum ve şunları onaylıyorum:", + ". I am at least 18 years of age.": ". En az 18 yaşındayım.", + "Log Out Page": "Oturumu Kapat Sayfası", + "Log Off": "Oturumu Kapat", + "Register Driver": "Sürücüyü Kaydet", + "Verify Email For Driver": "Sürücü E-Postasını Doğrulayın", + "Admin DashBoard": "Yönetici Kontrol Paneli", + "Your name": "Adınız", + "your ride is applied": "yolculuğunuz uygulandı", + "Your password": "Şifreniz", + "H and": "El", + "LE": "LE", + "JOD": "JOD", + "m": "M", + "We search nearst Driver to you": "Size en yakın sürücüyü arıyoruz", + "please wait till driver accept your order": + "lütfen sürücü siparişinizi kabul edene kadar bekleyin", + "No accepted orders? Try raising your trip fee to attract riders.": + "Kabul edilen emir yok mu? Yolcuların ilgisini çekmek için yolculuk ücretinizi artırmayı deneyin.", + "You should select one": "Birini seçmelisin", + "The driver accept your order for": + "Sürücü siparişinizi kabul ediyor", + "Increase Fee": "Ücreti Artır", + "No, thanks": "Hayır, teşekkürler", + "The driver on your way": "Sürücü yolda", + "Total price from": "Toplam fiyat", + "Order Details Speed": "Sipariş Detayları Hız", + "Order Applied": "Sipariş Uygulandı", + "accepted your order": "siparişini kabul ettim", + "We regret to inform you that another driver has accepted this order.": + "Başka bir sürücünün bu siparişi kabul ettiğini üzülerek bildiririz.", + "Selected file:": "Seçilen dosya:", + "Your trip cost is": "Seyahat maliyetiniz", + "this will delete all files from your device": + "bu, cihazınızdaki tüm dosyaları silecektir", + "you have a negative balance of": "negatif bakiyeniz var", + "in your": "senin içinde", + "Exclusive offers and discounts always with the Sefer app": + "Sefer uygulamasıyla her zaman özel kampanyalar ve indirimler", + "Please go to Car Driver": "Lütfen Araba Sürücüsü'ne gidin", + "wallet due to a previous trip.": + "önceki bir yolculuktan dolayı cüzdan.", + "Submit Question": "Soru Gönder", + "Please enter your Question.": "Lütfen Sorunuzu girin.", + "Help Details": "Yardım Ayrıntıları", + "No trip yet found": "Henüz gezi bulunamadı", + "No Response yet.": "Henüz yanıt yok.", + "You Earn today is": "Bugün Kazanacaksınız", + "You Have in": "Sen varsın", + "Total points is": "Toplam puan:", + "Total Connection Duration:": "Toplam Bağlantı Süresi:", + "H and": "El", + "Passenger name :": "Yolcu adı :", + "Cost Of Trip IS": "Seyahat Maliyeti IS", + "Arrival time": "Varış zamanı", + "arrival time to reach your point": + "varış noktanıza ulaşmak için varış zamanı", + "For Speed and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": + "Hızlı ve Teslimat seferlerinde fiyat dinamik olarak hesaplanır. Konfor gezileri için fiyat, zamana ve mesafeye bağlıdır", + "Hello this is Driver": "Merhaba ben Sürücü", + "Is the Passenger in your Car ?": "Yolcu Arabanızda mı?", + "Please wait for the passenger to enter the car before starting the trip.": + "Lütfen yolculuğa başlamadan önce yolcunun araca binmesini bekleyin.", + "No ,still Waiting.": "Hayır, hala bekliyorum.", + "I arrive you": "sana varıyorum", + "I Arrive your site": "Sitenize Geliyorum", + "You are not in near to passenger location": + "Yolcu konumuna yakın değilsiniz", + "please go to picker location exactly": + "lütfen tam olarak seçici konuma gidin", + "You Can Cancel Trip And get Cost of Trip From": + "Seyahati İptal Edebilir ve Seyahat Ücretini Şu Adresten Alabilirsiniz:", + "Are you sure to cancel?": "İptal edeceğinizden emin misiniz?", + "Yes": "Evet", + "Insert Emergincy Number": "Acil Durum Numarasını Girin", + "Best choice for comfort car and flexible route and stops point": + "Konforlu araç ve esnek rota ve durak noktaları için en iyi seçim", + "Insert": "Sokmak", + "This is for delivery or a motorcycle.": + "Bu teslimat veya motosiklet içindir.", + "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": + "Bu yolculuk, sabit bir ücret karşılığında doğrudan başlangıç ​​noktanızdan varış noktanıza gider. Sürücü planlanan rotayı takip etmelidir", + "You can decline a request without any cost": + "Bir isteği hiçbir ücret ödemeden reddedebilirsiniz", + "Perfect for adventure seekers who want to experience something new and exciting": + "Yeni ve heyecan verici bir şey deneyimlemek isteyen macera arayanlar için mükemmel", + "My current location is:": "Şu anki konumum:", + "and I have a trip on": "ve bir gezim var", + "App with Passenger": "Yolculu Uygulama", + "مع الراكب": "مع الراكب", + "You will be pay the cost to driver or we will get it from you on next trip": + "Masrafı şoföre ödeyeceksiniz veya bir sonraki yolculukta sizden alacağız", + "Trip has Steps": "Seyahatin Adımları Var", + "Distance from Passenger to destination is": + "Yolcu ile varış noktasına olan mesafe:", + "price is": "fiyatı", + "This ride type does not allow changes to the destination or additional stops": + "Bu yolculuk türü, varış noktasında veya ek duraklarda değişiklik yapılmasına izin vermez", + "This price may be changed": "Bu fiyat değişebilir", + "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": + "SIM kart yok, sorun yok! Sürücünüzü doğrudan uygulamamız aracılığıyla arayın. Gizliliğinizi sağlamak için ileri teknoloji kullanıyoruz.", + "This ride type allows changes, but the price may increase": + "Bu yolculuk türü değişikliklere izin verir ancak fiyat artabilir", + "message From passenger": "Yolcudan mesaj", + "Select one message": "Bir mesaj seçin", + "My location is correct. You can search for me using the navigation app": + "Konumum doğru. Navigasyon uygulamasını kullanarak beni arayabilirsiniz", + "I'm waiting for you": "Seni bekliyorum", + "Hello, I'm at the agreed-upon location": + "Merhaba anlaştığımız yerdeyim", + "We noticed the speed is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": + "Hızın 100 km/saati aştığını fark ettik. Güvenliğiniz için lütfen yavaşlayınız. Kendinizi güvende hissetmiyorsanız seyahat bilgilerinizi bir kişiyle paylaşabilir veya kırmızı SOS butonunu kullanarak polisi arayabilirsiniz.", + "Warning: Speeding detected!": "Uyarı: Hızlanma algılandı!", + "Please help! Contact me as soon as possible.": + "Lütfen yardım et! En kısa sürede benimle iletişime geçin.", + "Share Trip Details": "Seyahat Detaylarını Paylaşın", + "Car Plate is": "Araba Plakası (şimdiki değeri)", + "the 300 points equal 300 L.E for you": + "300 puan sizin için 300 L.E'ye eşittir", + "So go and gain your money": "Öyleyse git ve paranı kazan", + "the 300 points equal 300 L.E": "300 puan 300 L.E'ye eşittir", + "The payment was not approved. Please try again.": + "Ödeme onaylanmadı. Lütfen tekrar deneyin.", + "Payment Failed": "Ödeme başarısız", + "Error": "Hata", + "An error occurred during the payment process.": + "Ödeme işlemi sırasında bir hata oluştu.", + "The payment was approved.": "Ödeme onaylandı.", + "Payment Successful": "Ödeme başarılı", + "No ride found yet": "Henüz araç bulunamadı", + "Accept Order": "Siparişi Kabul Et", + "reject your order.": "siparişinizi reddedin.", + "Bottom Bar Example": "Alt Çubuk Örneği", + "Driver phone": "Sürücü telefonu", + "Statistics": "İstatistik", + "Origin": "Menşei", + "Destination": "Varış noktası", + "Driver Name": "Sürücü adı", + "Driver Car Plate": "Sürücü Araç Plakası", + "Available for rides": "Sürüşler için kullanılabilir", + "Scan Id": "Tarama Kimliği", + "Camera not initilaized yet": "Kamera henüz başlatılmadı", + "Scan ID MklGoogle": "Tarama Kimliği MklGoogle", + "Language": "Dil", + "Jordan": "Ürdün", + "USA": "Amerika Birleşik Devletleri", + "Egypt": "Mısır", + "Turkey": "Türkiye", + "Saudi Arabia": "Suudi Arabistan", + "Qatar": "Katar", + "Bahrain": "Bahreyn", + "Kuwait": "Kuveyt", + "But you have a negative salary of": "Ama negatif maaşınız var", + "Promo Code": "Promosyon kodu", + "Your trip distance is": "Seyahat mesafeniz", + "Enter promo code": "Promosyon kodunu girin", + "You have promo!": "Promosyonunuz var!", + "Cost Duration": "Maliyet Süresi", + "Duration is": "Süre:", + "Leave": "Ayrılmak", + "Join": "Katılmak", + "You Should be select reason.": "Sebep seçmelisiniz.", + "\$": "\$", + "Waiting for Driver ...": "Sürücüyü Bekliyoruz...", + "Latest Recent Trip": "En Son Son Seyahat", + "from your list": "listenizden", + "Do you want to change Work location": + "İş yerini değiştirmek istiyor musunuz", + "Do you want to change Home location": + "Ev konumunu değiştirmek istiyor musunuz?", + "We Are Sorry That we dont have cars in your Location!": + "Bulunduğunuz yerde arabamız olmadığı için üzgünüz!", + "Choose from Map": "Haritadan Seç", + "Pick your ride location on the map - Tap to confirm": + "Sürüş konumunuzu haritadan seçin - Onaylamak için dokunun", + "To Work": "Çalışmak", + "Are you want to go this site": "Bu siteye gitmek ister misin", + "Closest & Cheapest": "En Yakın & En Ucuz", + "Work Saved": "Çalışma Kaydedildi", + "Sefer is the ride-hailing app that is safe, reliable, and accessible.": + "Sefer güvenli, güvenilir ve erişilebilir bir araç çağırma uygulamasıdır.", + "With Sefer, you can get a ride to your destination in minutes.": + "Sefer ile dakikalar içerisinde gideceğiniz yere araçla ulaşabilirsiniz.", + "Sefer is committed to safety, and all of our captains are carefully screened and background checked.": + "Sefer güvenliğe önem vermektedir ve tüm kaptanlarımız dikkatle incelenmekte ve özgeçmişleri kontrol edilmektedir.", + "To Home": "Eve", + "Home Saved": "Ana Sayfa Kaydedildi", + "Destination selected": "Hedef seçildi", + "Now select start pick": "Şimdi başlangıç ​​seçimini seçin", + "Pick from map": "Haritadan seç", + "Click here point": "Buraya tıklayın", + "No Car in your site. Sorry!": "Sitenizde Araba Yok. Üzgünüm!", + "Nearest Car for you about": "Size En Yakın Araç Hakkında", + "N/A": "Yok", + "From :": "İtibaren :", + "Get Details of Trip": "Seyahat Detaylarını Alın", + "If you want add stop click here": + "Durak eklemek istiyorsanız buraya tıklayın", + "Driver": "Sürücü", + "Where you want go": "Nereye gitmek istiyorsun", + "My Card": "Benim kartım", + "Start Record": "Kaydı Başlat", + "Wallet": "Cüzdan", + "History of Trip": "Gezinin Tarihi", + "Helping Center": "Yardım Merkezi", + "Record saved": "Kayıt kaydedildi", + "Trips recorded": "Geziler kaydedildi", + "Select Your Country": "Ülkeni seç", + "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": + "Bulunduğunuz yere ilişkin en doğru bilgileri aldığınızdan emin olmak için lütfen aşağıdan ülkenizi seçin. Bu, uygulama deneyiminin ve içeriğinin ülkenize göre uyarlanmasına yardımcı olacaktır.", + "Are you sure to delete recorded files": + "Kayıtlı dosyaları sildiğinizden emin misiniz?", + "Select recorded trip": "Kaydedilen geziyi seçin", + "Card Number": "Kart numarası", + "Hi, Where to": "Merhaba, Nereye", + "Pick your destination from Map": "Hedefinizi Haritadan seçin", + "Add Stops": "Durak Ekle", + "Get Direction": "Yol Tarifi Al", + "Add Location": "Konum ekle", + "Switch Rider": "Sürücüyü Değiştir", + "You will arrive to your destination after timer end.": + "Zamanlayıcı bittikten sonra varış noktanıza varacaksınız.", + "You can cancel trip": "Geziyi iptal edebilirsiniz", + "The driver waitting you in picked location .": + "Sürücü seçilen yerde sizi bekliyor.", + "Pay with Your": "Ödeme", + "Pay with Credit Card": "Kredi kartıyla öde", + "Payment History": "ödeme geçmişi", + "Show Promos to Charge": "Ücretlendirilecek Promosyonları Göster", + "Point": "Nokta", + "Driver Wallet": "Sürücü Cüzdanı", + "Total Points is": "Toplam Puan (şimdiki değeri)", + "Total Budget from trips is": "Gezilerden elde edilen Toplam Bütçe:", + "Total Amount:": "Toplam tutar:", + "Total Budget from trips by": "Seyahatlerden Toplam Bütçe:", + "Credit card is": "Kredi kartı", + "بطاقة الائتمان هي": "بطاقة الائتمان هي", + "This amount for all trip I get from Passengers": + "Yolculardan aldığım tüm yolculuklar için bu miktar", + "Pay from my budget": "Bütçemden öde", + "This amount for all trip I get from Passengers and Collected For me in": + "Yolculardan aldığım ve benim için toplanan tüm seyahatler için bu miktar", + "You can buy points from your budget": + "Bütçenizden puan satın alabilirsiniz", + "insert amount": "miktar girin", + "You can buy Points to let you online": + "Çevrimiçi olmanızı sağlayacak Puanlar satın alabilirsiniz", + "by this list below": "aşağıdaki listeye göre", + "من خلال القائمة أدناه": "Bir gün sonra", + "Create Wallet to receive your money": + "Paranızı almak için Cüzdan oluşturun", + "Enter your feedback here": "Geri bildiriminizi buraya girin", + "Please enter your feedback.": "Lütfen geri bildiriminizi girin.", + "Feedback": "Geri bildirim", + "Submit": "Göndermek", + "Click here to Show it in Map": + "Haritada Göstermek İçin Buraya Tıklayın", + "Canceled": "İptal edildi", + "Type your Email": "E-postanızı yazın", + "No I want": "Hayır istiyorum", + "Email is": "E-posta:", + "Phone Number is": "Telefon Numarası:", + "Date of Birth is": "Doğum Tarihi (şimdiki değeri)", + "Sex is": "Seks", + "Car Details": "Araç Detayları", + "VIN is": "VIN:", + "Color is": "Renk", + "Make is": "Şunu yap:", + "Model is": "Model:", + "Year is": "Yıl:", + "Expiration Date": "Son kullanma tarihi", + "Edit Your data": "Verilerinizi Düzenleyin", + "write vin for your car": "araban için vin yaz", + "VIN": "Şasi", + "write Color for your car": "Arabanız için Renk yazın", + "write Make for your car": "Araban için yap yaz", + "write Model for your car": "Arabanızın modelini yazın", + "write Year for your car": "arabanızın yılını yazın", + "write Expiration Date for your car": + "Arabanızın Son Kullanma Tarihini yazın", + "Tariffs": "Tarifeler", + "Minimum fare": "Asgari ücret", + "Maximum fare": "Maksimum ücret", + "Flag-down fee": "Bayrak indirme ücreti", + "Including Tax": "Vergi dahil", + "BookingFee": "Rezervasyon ücreti", + "Morning": "Sabah", + "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": + "07:30 – 10:30 arası (Perşembe, Cuma, Cumartesi, Pazartesi)", + "Evening": "Akşam", + "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": + "12:00 – 15:00 arası (Perşembe, Cuma, Cumartesi, Pazartesi)", + "Night": "Gece", + "You have in account": "Hesabınız var", + "Select Country": "Ülke Seçiniz", + "Ride Today :": "Bugün Sürüş:", + "After this period": "Bu dönemden sonra", + "You can\"t cancel!": "İptal edemezsin!", + "لا تستطيع الغاء الرحله": "لا تستطيع الغاء الرحله", + "from 23:59 till 05:30": "23:59'dan 05:30'a kadar", + "Rate Driver": "Puan Sürücüsü", + "Total Cost is": "Toplam Maliyet (şimdiki değeri)", + "Write note": "Not yaz", + "Time to arrive": "Gelme zamanı", + "Ride Summaries": "Sürüş Özetleri", + "Total Cost": "Toplam tutar", + "Average of Hours of": "Ortalama Saat", + "is ON for this month": "bu ay için AÇIK", + "Days": "Günler", + "Total Hours on month": "Aylık Toplam Saat", + "Counts of Hours on days": "Günlerdeki Saat Sayımı", + "OrderId": "Sipariş Kimliği", + "created time": "yaratılan zaman", + "Speed Over": "Hız Aşımı", + "I will slow down": "yavaşlayacağım", + "Map Passenger": "Harita Yolcusu", + "Be Slowly": "Yavaş ol", + "If you want to make Google Map App run directly when you apply order": + "Siparişi uyguladığınızda Google Harita Uygulamasının doğrudan çalışmasını istiyorsanız", + "You can change the language of the app": + "Uygulamanın dilini değiştirebilirsiniz", + "Your Budget less than needed": "Bütçeniz ihtiyaç duyulandan az", + "You can change the Country to get all features": + "Tüm özellikleri almak için Ülkeyi değiştirebilirsiniz", + "Change Country": "Ülke değiştir" + }, + "fr": { + "Sign In by Apple": "Connectez-vous par Apple", + "Sign In by Google": "Connectez-vous par Google", + "How do I request a ride?": "Comment puis-je demander un trajet ?", + "Step-by-step instructions on how to request a ride through the Sefer app.": + "Instructions étape par étape sur la façon de demander un trajet via l'application Sefer.", + "What types of vehicles are available?": + "Quels types de véhicules sont disponibles ?", + "Sefer offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": + "Sefer propose une variété d'options de véhicules pour répondre à vos besoins, notamment l'économie, le confort et le luxe. Choisissez l'option qui correspond le mieux à votre budget et à votre nombre de passagers.", + "How can I pay for my ride?": "Comment puis-je payer mon trajet ?", + "Sefer offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": + "Sefer propose plusieurs méthodes de paiement pour votre commodité. Choisissez entre un paiement en espèces ou un paiement par carte de crédit/débit lors de la confirmation du trajet.", + "Can I cancel my ride?": "Puis-je annuler mon trajet ?", + "Yes, you can cancel your ride under certain conditions (e.g., before driver is assigned). See the Sefer cancellation policy for details.": + "Oui, vous pouvez annuler votre course sous certaines conditions (par exemple, avant l'attribution du chauffeur). Consultez les conditions d’annulation du Sefer pour plus de détails.", + "Driver Registration & Requirements": + "Inscription et exigences du conducteur", + "How can I register as a driver?": + "Comment puis-je m'inscrire en tant que conducteur ?", + "What are the requirements to become a driver?": + "Quelles sont les conditions pour devenir conducteur ?", + "Visit our website or contact Sefer support for information on driver registration and requirements.": + "Visitez notre site Web ou contactez l'assistance Sefer pour plus d'informations sur l'enregistrement des conducteurs et les exigences.", + "How do I communicate with the other party (passenger/driver)?": + "Comment puis-je communiquer avec l'autre partie (passager/conducteur) ?", + "Sefer provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": + "Sefer fournit une fonctionnalité de chat dans l'application pour vous permettre de communiquer avec votre conducteur ou passager pendant votre trajet.", + "What safety measures does Sefer offer?": + "Quelles mesures de sécurité Sefer propose-t-il ?", + "Sefer prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": + "Sefer donne la priorité à votre sécurité. Nous proposons des fonctionnalités telles que la vérification du conducteur, le suivi des déplacements dans l'application et des options de contact d'urgence.", + "Frequently Questions": "Foire aux questions", + "User does not exist.": "L'utilisateur n'existe pas.", + "We need your phone number to contact you and to help you.": + "Nous avons besoin de votre numéro de téléphone pour vous contacter et vous aider.", + "You will recieve code in sms message": + "Vous recevrez le code par SMS", + "Please enter": "Entrez s'il vous plait", + "We need your phone number to contact you and to help you receive orders.": + "Nous avons besoin de votre numéro de téléphone pour vous contacter et vous aider à recevoir les commandes.", + "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": + "Le nom complet figurant sur votre casier judiciaire ne correspond pas à celui figurant sur votre permis de conduire. Veuillez vérifier et fournir les documents corrects.", + "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": + "Le numéro national figurant sur votre permis de conduire ne correspond pas à celui figurant sur votre pièce d’identité. Veuillez vérifier et fournir les documents corrects.", + "Capture an Image of Your Criminal Record": + "Capturez une image de votre casier judiciaire", + "IssueDate": "Date d'émission", + "Capture an Image of Your car license front": + "Capturez une image du recto de votre permis de conduire", + "Capture an Image of Your ID Document front": + "Capturez une image du recto de votre document d'identité", + "NationalID": "Carte d'identité", + "FullName": "Nom et prénom", + "InspectionResult": "Résultat de l'inspection", + "Criminal Record": "Dossier criminel", + "The email or phone number is already registered.": + "L'e-mail ou le numéro de téléphone est déjà enregistré.", + "To become a ride-sharing driver on the Sefer app, you need to upload your driver\"s license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Sefer app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": + "Pour devenir conducteur de covoiturage sur l'application Sefer, vous devez télécharger votre permis de conduire, votre pièce d'identité et votre document d'immatriculation. Notre système d'IA examinera et vérifiera instantanément leur authenticité en seulement 2-3 minutes. Si vos documents sont approuvés, vous pouvez commencer à travailler en tant que chauffeur sur l'application Sefer. Veuillez noter que la soumission de documents frauduleux est une infraction grave et peut entraîner un licenciement immédiat et des conséquences juridiques.", + "Documents check": "Vérification des documents", + "Driver's License": "Le permis de conduire", + "License Type": "Type de licence", + "National Number": "Numéro national", + "Name (Arabic)": "Nom (arabe)", + "Name (English)": "Nom (anglais)", + "Address": "Adresse", + "Issue Date": "Date d'émission", + "Expiry Date": "Date d'expiration", + "License Categories": "Catégories de licences", + "driver_license": "permis de conduire", + "Capture an Image of Your Driver License": + "Capturez une image de votre permis de conduire", + "ID Documents Back": "Documents d'identité Retour", + "National ID": "carte d'identité", + "Occupation": "Profession", + "Gender": "Genre", + "Religion": "Religion", + "Marital Status": "État civil", + "Full Name (Marital)": "Nom complet (matrimonial)", + "Expiration Date": "Date d'expiration", + "Capture an Image of Your ID Document Back": + "Capturez une image de votre document d'identité", + "ID Documents Front": "Documents d'identité recto", + "First Name": "Prénom", + "CardID": "ID de carte", + "Full Name": "Nom et prénom", + "Vehicle Details Front": "Détails du véhicule Avant", + "Plate Number": "Numéro de la plaque", + "Owner Name": "Le nom du propriétaire", + "Vehicle Details Back": "Détails du véhicule Retour", + "Make": "Faire", + "Model": "Modèle", + "Year": "Année", + "Chassis": "Châssis", + "Color": "Couleur", + "Displacement": "Déplacement", + "Fuel": "Carburant", + "Tax Expiry Date": "Date d'expiration de la taxe", + "Inspection Date": "Date d'inspection", + "Capture an Image of Your car license back": + "Capturez une image de votre permis de voiture", + "Capture an Image of Your Driver’s License": + "Capturez une image de votre permis de conduire", + "Sign in with Google for easier email and name entry": + "Connectez-vous avec Google pour faciliter la saisie de votre adresse e-mail et de votre nom", + "You will choose allow all the time to be ready receive orders": + "Vous choisirez de permettre à tout moment d'être prêt à recevoir les commandes", + "Welcome to Sefer!": "Bienvenue chez Sefer !", + "Get to your destination quickly and easily.": + "Arrivez à destination rapidement et facilement.", + "Enjoy a safe and comfortable ride.": + "Profitez d'une conduite sûre et confortable.", + "Choose Language": "Choisissez la langue", + "Login": "Se connecter", + "Pay with Wallet": "Payer avec Wallet", + "Invalid MPIN": "MPIN invalide", + "Invalid OTP": "OTP invalide", + "Enter your email address": "Entrez votre adresse email", + "Please enter Your Email.": "Veuillez entrer votre e-mail.", + "Enter your phone number": "Entrez votre numéro de téléphone", + "Please enter your phone number.": + "Veuillez entrer votre numéro de téléphone.", + "Please enter Your Password.": + "S'il vous plait entrez votre mot de passe.", + "Submit": "Soumettre", + "if you dont have account": "si vous n'avez pas de compte", + "Register": "Registre", + "Accept Ride's Terms & Review Privacy Notice": + "Acceptez les conditions de Ride et consultez l'avis de confidentialité", + "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": + "En sélectionnant « J'accepte » ci-dessous, j'ai lu et accepté les conditions d'utilisation et je reconnais l'avis de confidentialité. J'ai au moins 18 ans.", + "I Agree": "Je suis d'accord", + "First name": "Prénom", + "Enter your first name": "Entrez votre prénom", + "Please enter your first name.": + "Entrez votre prénom s'il vous plait.", + "Last name": "Nom de famille", + "Enter your last name": "Entrez votre nom de famille", + "Please enter your last name.": + "Veuillez entrer votre nom de famille.", + "City": "Ville", + "Please enter your City.": "Veuillez entrer votre ville.", + "Male": "Mâle", + "Female": "Femelle", + "Verify Email": "Vérifier les courriels", + "We sent 5 digit to your Email provided": + "Nous avons envoyé 5 chiffres à votre e-mail fourni", + "5 digit": "5 chiffres", + "Send Verification Code": "Envoyer le code de vérification", + "Your Ride Duration is": "La durée de votre trajet est", + "You will be thier in": "Vous serez là dans", + "You trip distance is": "La distance de votre trajet est", + "Fee is": "Les frais sont", + "From :": "Depuis :", + "To :": "À :", + "Add Promo": "Ajouter une promotion", + "Confirm Selection": "Confirmer la sélection", + "distance is": "la distance est", + "duration is": "la durée est", + "I don't need a ride anymore": "Je n'ai plus besoin d'un tour", + "I was just trying the application": + "j'étais justement en train d'essayer l'application", + "No driver accepted my request": + "Aucun chauffeur n'a accepté ma demande", + "I added the wrong pick-up/drop-off location": + "J'ai ajouté le mauvais lieu de prise en charge/dépôt", + "I don't have a reason": "je n'ai pas de raison", + "Other": "Autre", + "Can we know why you want to cancel Ride ?": + "Pouvons-nous savoir pourquoi vous souhaitez annuler Ride ?", + "Cancel Ride": "Annuler le trajet", + "Add Payment Method": "Ajouter un mode de paiement", + "Your Wallet balance is": "Le solde de votre portefeuille est de", + "Ride Wallet": "Portefeuille de voyage", + "Payment Method": "Mode de paiement", + "Type here Place": "Tapez ici Lieu", + "Are You sure to ride to": "Êtes-vous sûr d'aller à", + "Confirm": "Confirmer", + "Back": "Dos", + "You are Delete": "Vous êtes Supprimer", + "Deleted": "Supprimé", + "You Dont Have Any places yet !": "Vous n'avez pas encore de lieux !", + "Favorite Places": "Lieux préférés", + "From : Current Location": "De : Emplacement actuel", + "Where to": "Où aller", + "Notifications": "Notifications", + "Profile": "Profil", + "Home": "Maison", + "My Cared": "Mes soins", + "Add Card": "Ajouter une carte", + "Add Credit Card": "Ajouter une carte de crédit", + "Please enter the cardholder name": + "Veuillez saisir le nom du titulaire de la carte", + "Please enter the expiry date": + "Veuillez saisir la date d'expiration", + "Please enter the CVV code": "Veuillez saisir le code CVV", + "Go To Favorite Places": "Aller aux endroits favoris", + "Go to this Target": "Accédez à cette cible", + "My Profile": "Mon profil", + "Sign Out": "Se déconnecter", + "Home Page": "Page d'accueil", + "Are you want to go to this site": "Voulez-vous aller sur ce site", + "MyLocation": "Ma position", + "my location": "ma position", + "Target": "Cible", + "Update": "Mise à jour", + "You Should choose rate figure": + "Vous devriez choisir le chiffre du taux", + "Login Captin": "Capitaine de connexion", + "Register Captin": "Inscrire le capitaine", + "Send Verfication Code": "Envoyer le code de vérification", + "KM": "KM", + "End Ride": "Fin du trajet", + "Minute": "Minute", + "Go to passenger Location now": + "Accédez à l'emplacement des passagers maintenant", + "Duration of the Ride is": "La durée du trajet est", + "Distance of the Ride is": "La distance du trajet est", + "Name of the Passenger is": "Le nom du passager est", + "Hello this is Captain": "Bonjour, c'est le capitaine", + "Start the Ride": "Commencez le voyage", + "Please Wait If passenger want To Cancel!": + "Veuillez patienter si le passager souhaite annuler !", + "Total Duration:": "Durée totale:", + "Active Duration:": "Durée active :", + "Waiting for Captin ...": "En attendant Captin...", + "Age is": "L'âge est", + "Rating is": "La note est", + "to arrive you.": "pour vous arriver.", + "Order History": "Historique des commandes", + "My Wallet": "Mon portefeuille", + "Tariff": "Tarif", + "Settings": "Paramètres", + "Feed Back": "Retour", + "Promos": "Promotions", + "Please enter a valid 16-digit card number": + "Veuillez saisir un numéro de carte valide à 16 chiffres", + "Add Phone": "Ajouter un téléphone", + "Please enter a phone number": + "Veuillez entrer un numéro de téléphone", + "You dont Add Emergency Phone Yet!": + "Vous n'avez pas encore ajouté de téléphone d'urgence !", + "You will arrive to your destination after": + "Vous arriverez à destination après", + "You can cancel Ride now": "Vous pouvez annuler Ride maintenant", + "You Can cancel Ride After Captain did not come in the time": + "Vous pouvez annuler le trajet après que le capitaine ne soit pas venu à temps", + "If you in Car Now. Press Start The Ride": + "Si vous êtes en voiture maintenant. Appuyez sur Démarrer le trajet", + "You Dont Have Any amount in": "Vous n'avez aucun montant en", + "Wallet!": "Portefeuille!", + "You Have": "Tu as", + "Save Credit Card": "Enregistrer la carte de crédit", + "Show Promos": "Afficher les promotions", + "10 and get 4% discount": "10 et obtenez 4% de réduction", + "20 and get 6% discount": "20 et obtenez 6% de réduction", + "40 and get 8% discount": "40 et obtenez 8% de réduction", + "100 and get 11% discount": "100 et obtenez 11% de réduction", + "Pay with Your PayPal": "Payez avec votre PayPal", + "You will choose one of above !": + "Vous en choisirez un parmi ceux ci-dessus !", + "Cancel": "Annuler", + "Delete My Account": "Supprimer mon compte", + "Edit Profile": "Editer le profil", + "Name": "Nom", + "Update Gender": "Mettre à jour le sexe", + "Education": "Éducation", + "Update Education": "Mettre à jour l'éducation", + "Employment Type": "Type d'emploi", + "SOS Phone": "Téléphone SOS", + "High School Diploma": "Baccalauréat", + "Associate Degree": "Diplôme d'associé", + "Bachelor's Degree": "Licence", + "Master's Degree": "Une maîtrise", + "Doctoral Degree": "Doctorat", + "Promos For today": "Promotions pour aujourd'hui", + "Copy this Promo to use it in your Ride!": + "Copiez cette promotion pour l'utiliser dans votre trajet !", + "To change some Settings": "Pour modifier certains paramètres", + "To change Language the App": + "Pour changer la langue de l'application", + "Order Request Page": "Page de demande de commande", + "Rouats of Trip": "Rouats de voyage", + "Passenger Name is": "Le nom du passager est", + "Total From Passenger is": "Le total du passager est", + "Duration To Passenger is": "La durée pour le passager est", + "Distance To Passenger is": "La distance jusqu'au passager est", + "Total For You is": "Le total pour vous est", + "Distance is": "La distance est", + "KM": "KM", + "Duration of Trip is": "La durée du voyage est", + "Minutes": "Minutes", + "Apply Order": "Appliquer la commande", + "Refuse Order": "Refuser la commande", + "Rate Captain": "Évaluez le capitaine", + "Enter your Note": "Entrez votre note", + "Type something...": "Tapez quelque chose...", + "Submit rating": "Soumettre une note", + "Rate Passenger": "Tarif Passager", + "Ride Summary": "Résumé du trajet", + "welcome_message": "message de bienvenue", + "app_description": "description_de l'application", + "get_to_destination": "get_to_destination", + "get_a_ride": "faire un tour", + "safe_and_comfortable": "sûr_et_confortable", + "committed_to_safety": "engagé_à_la_sécurité", + "Driver Applied the Ride for You": + "Le conducteur a appliqué le trajet pour vous", + "Show latest promo": "Afficher la dernière promotion", + "Cancel Trip": "Annuler le voyage", + "Passenger Cancel Trip": "Voyage annulé par un passager", + "Please stay on the picked point.": + "Merci de rester sur le point choisi.", + "Trip is Begin": "Le voyage commence", + "Hi ,I will go now": "Salut, je vais y aller maintenant", + "Passenger come to you": "Le passager vient à vous", + "Hi ,I Arrive your site": "Bonjour, j'arrive sur votre site", + "Driver Finish Trip": "Chauffeur Terminer le voyage", + "you will pay to Driver": "vous paierez au chauffeur", + "Driver Cancel Your Trip": "Le chauffeur annule votre voyage", + "you will pay to Driver you will be pay the cost of driver time look to your SEFER Wallet": + "vous paierez au chauffeur, vous paierez le coût du temps de chauffeur, consultez votre portefeuille SEFER", + "I will go now": "Je vais y aller maintenant", + "You Have Tips": "Vous avez des conseils", + "tips": "conseils", + "Total is": "Le total est", + "الْمَجْمُوع هُوَ": "الْمَجْمُوع هُوَ", + "No,I want": "Non je veux", + "Your fee is": "Vos frais sont", + "Do you want to pay Tips for this Driver": + "Voulez-vous payer des pourboires pour ce conducteur", + "Tip is": "Le conseil est", + "Tip is": "Le conseil est", + "Camera Access Denied.": "Accès à la caméra refusé.", + "Open Settings": "Ouvrir les paramètres", + "GPS Required Allow !.": "GPS requis Autoriser !.", + "Your Account is Deleted": "Votre compte est supprimé", + "Are you sure to delete your account?": + "Êtes-vous sûr de supprimer votre compte ?", + "Your data will be erased after 2 weeks": + "Vos données seront effacées après 2 semaines", + "And you will can't return to use app after 1 month": + "Et vous ne pourrez plus utiliser l'application après 1 mois.", + "وَلَن تَسْتَطِيع اسْتِخْدَام التَّطْبِيق مَرَّة أُخْرَى بَعْد شَهْر": + "وَلَن تَسْتَطِيع اسْتِخْدَام التَّطْبِيق مَرَّة أُخْرَى بَعْد شَهْر", + "Enter Your First Name": "Entrez votre prénom", + "Are you Sure to LogOut?": "Êtes-vous sûr de vous déconnecter ?", + "Email Wrong": "E-mail erroné", + "Email you inserted is Wrong.": + "L'e-mail que vous avez inséré est faux.", + "You have finished all times": "Tu as fini tous les temps", + "if you want help you can email us here": + "si vous voulez de l'aide, vous pouvez nous envoyer un email ici", + "Thanks": "Merci", + "Email Us": "Envoyez-nous un email", + "I cant register in your app in face detection": + "Je ne peux pas m'inscrire dans votre application en détection de visage", + "Hi": "Salut", + "No face detected": "Aucun visage détecté", + "Image detecting result is": + "Le résultat de la détection d'image est", + "from 3 times Take Attention": "à partir de 3 fois Attention", + "Be sure for take accurate images please": + "Assurez-vous de prendre des images précises s'il vous plaît", + "You have": "Tu as", + "لَدَيْك": "لَدَيْك", + "image verified": "image vérifiée", + "Next": "Suivant", + "There is no help Question here": "Il n'y a pas d'aide. Question ici", + "Call End": "Fin d'appel", + "You dont have Points": "Vous n'avez pas de points", + "You Are Stopped For this Day !": "Vous êtes arrêtés pour ce jour !", + "You must be charge your Account": "Vous devez débiter votre compte", + "You Refused 3 Rides this Day that is the reason": + "Vous avez refusé 3 courses ce jour-là, c'est la raison", + "See you Tomorrow!": "À demain!", + "لِقَائِنَا غَدًا!": "لِقَائِنَا غَدًا!", + "Recharge my Account": "Recharger mon compte", + "Ok , See you Tomorrow": "OK à demain", + "You are Stopped": "Vous êtes arrêté", + "Connected": "Connecté", + "Not Connected": "Pas connecté", + "Your are far from passenger location": + "Vous êtes loin de l'emplacement des passagers", + "go to your passenger location before": + "rendez-vous à votre emplacement passager avant", + "Passenger cancel trip": "Le passager annule son voyage", + "يُلْغِي الرَّاكِب الرِّحْلَة": "يُلْغِي الرَّاكِب الرِّحْلَة", + "You will get cost of your work for this trip": + "Vous recevrez le coût de votre travail pour ce voyage", + "in your wallet": "dans ton portefeuille", + "you gain": "Tu gagnes", + "Order Cancelled": "Commande annulée", + "Order Cancelled by Passenger": "Commande annulée par le passager", + "Success": "Succès", + "Feedback data saved successfully": + "Données de commentaires enregistrées avec succès", + "No Promo for today .": "Pas de promotion pour aujourd'hui.", + "Select your destination": "Sélectionnez votre destination", + "Search for your Start point": "Recherchez votre point de départ", + "Search for waypoint": "Rechercher un waypoint", + "Current Location": "Localisation actuelle", + "Add Location 1": "Ajouter l'emplacement 1", + "You must Verify email !.": "Vous devez vérifier l'e-mail !.", + "Cropper": "Recadrage", + "Saved Sucssefully": "Enregistré avec succès", + "Select Date": "Sélectionner une date", + "Birth Date": "Date de naissance", + "Ok": "D'accord", + "the 500 points equal 30 JOD": "les 500 points équivalent à 30 JOD", + "the 500 points equal 30 JOD for you": + "les 500 points équivalent à 30 JOD pour vous", + "So go and gain your money": "Alors va gagner ton argent", + "فَاسْتَحِقَّ فُلُوسَك وَاكْسِب النِّقَاط": + "فَاسْتَحِقَّ فُلُوسَك وَاكْسِب النِّقَاط", + "token updated": "jeton mis à jour", + "Add Location 2": "Ajouter un emplacement 2", + "Add Location 3": "Ajouter un emplacement 3", + "Add Location 4": "Ajouter un emplacement 4", + "Waiting for your location": "En attente de votre position", + "Search for your destination": "Recherchez votre destination", + "Hi! This is": "Salut! C'est", + "I am using": "j'utilise", + "to ride with": "rouler avec", + "as the driver.": "en tant que conducteur.", + "is driving a": "conduit un", + "with license plate": "avec plaque d'immatriculation", + "I am currently located at": "Je me trouve actuellement à", + "Please go to Car now": + "S'il vous plaît, allez à la voiture maintenant", + "If you need to reach me, please contact the driver directly at": + "Si vous avez besoin de me joindre, veuillez contacter directement le chauffeur au", + "No Car or Driver Found in your area.": + "Aucune voiture ni chauffeur trouvé dans votre région.", + "Please Try anther time": "S'il vous plaît, essayez une autre fois", + "There no Driver Aplly your order sorry for that": + "Il n'y a pas de chauffeur. Appliquez votre commande, désolé pour cela.", + "Trip Cancelled": "Voyage annulé", + "The Driver Will be in your location soon .": + "Le chauffeur sera bientôt chez vous.", + "The distance less than 500 meter.": + "La distance inférieure à 500 mètres.", + "Promo End !": "Fin de la promotion !", + "There is no notification yet": "Il n'y a pas encore de notification", + "Use Touch ID or Face ID to confirm payment": + "Utilisez Touch ID ou Face ID pour confirmer le paiement", + "Contact us for any questions on your order.": + "Contactez-nous pour toute question sur votre commande.", + "Pyament Cancelled .": "Paiement annulé.", + "type here": "écrivez ici", + "Scan Driver License": "Scanner le permis de conduire", + "Please put your licence in these border": + "Veuillez mettre votre permis dans ces bordures", + "Camera not initialized yet": "Caméra pas encore initialisée", + "Take Image": "Prendre une image", + "AI Page": "Page IA", + "Take Picture Of ID Card": "Prendre une photo de la carte d'identité", + "Take Picture Of Driver License Card": + "Prendre une photo de la carte de permis de conduire", + "We are process picture please wait": + "Nous sommes en train de traiter l'image, veuillez patienter", + "There is no data yet.": "Il n'y a pas encore de données.", + "Name :": "Nom :", + "Drivers License Class:": "Classe de permis de conduire :", + "Document Number:": "Numéro de document:", + "Address:": "Adresse:", + "Height:": "Hauteur:", + "Expiry Date:": "Date d'expiration:", + "Date of Birth:": "Date de naissance:", + "You can\"t continue with us .": + "Vous ne pouvez pas continuer avec nous.", + "You should renew Driver license": + "Vous devez renouveler votre permis de conduire", + "Detect Your Face": "Détectez votre visage", + "Go to next step": "Passer à l'étape suivante", + "scan Car License.": "scanner le permis de voiture.", + "aاسْتِخْرَاج رُخْصَة السَّيَّارَة.": + "aاسْتِخْرَاج رُخْصَة السَّيَّارَة.", + "Name in arabic": "Nom en arabe", + "Drivers License Class": "Classe de permis de conduire", + "Date of Birth": "Date de naissance", + "Age": "Âge", + "Lets check Car license": "Vérifions le permis de conduire", + "Car Kind": "Type de voiture", + "Car Plate": "Plaque d'immatriculation", + "Lets check License Back Face": + "Vérifions la face arrière de la licence", + "Car License Card": "Carte d'immatriculation de voiture", + "No image selected yet": "Aucune image sélectionnée pour le moment", + "Made :": "Fait :", + "model :": "modèle :", + "VIN :": "NIV :", + "year :": "année :", + "ُExpire Date": "date d'expiration", + "Login Driver": "Pilote de connexion", + "Password must br at least 6 character.": + "Le mot de passe doit contenir au moins 6 caractères.", + "if you don\"t have account": "si vous n'avez pas de compte", + "Here recorded trips audio": "Ici les voyages enregistrés audio", + "Register as Driver": "S'inscrire en tant que conducteur", + "Privacy Notice": "Avis de confidentialité", + "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the": + "En sélectionnant « J'accepte » ci-dessous, j'ai lu et accepté les conditions d'utilisation et je reconnais les", + ". I am at least 18 years of age.": ". J'ai au moins 18 ans.", + "Log Out Page": "Page de déconnexion", + "Log Off": "Se déconnecter", + "Register Driver": "Enregistrer le conducteur", + "Verify Email For Driver": "Vérifier l'e-mail du pilote", + "Admin DashBoard": "Tableau de bord d'administration", + "Your name": "Votre nom", + "your ride is applied": "votre course est appliquée", + "Your password": "Votre mot de passe", + "H and": "Main", + "LE": "LE", + "JOD": "JOD", + "m": "m", + "We search nearst Driver to you": + "Nous recherchons le chauffeur le plus proche de chez vous", + "please wait till driver accept your order": + "veuillez attendre que le chauffeur accepte votre commande", + "No accepted orders? Try raising your trip fee to attract riders.": + "Aucune commande acceptée ? Essayez d'augmenter vos frais de déplacement pour attirer les passagers.", + "You should select one": "Vous devriez en sélectionner un", + "The driver accept your order for": + "Le chauffeur accepte votre commande pour", + "Increase Fee": "Augmenter les frais", + "No, thanks": "Non merci", + "The driver on your way": "Le chauffeur sur votre chemin", + "Total price from": "Prix ​​total à partir de", + "Order Details Speed": "Détails de la commande Vitesse", + "Order Applied": "Commande appliquée", + "accepted your order": "accepté votre commande", + "We regret to inform you that another driver has accepted this order.": + "Nous avons le regret de vous informer qu'un autre chauffeur a accepté cette commande.", + "Selected file:": "Fichier sélectionné :", + "Your trip cost is": "Le coût de votre voyage est", + "this will delete all files from your device": + "cela supprimera tous les fichiers de votre appareil", + "you have a negative balance of": "vous avez un solde négatif de", + "in your": "dans ton", + "Exclusive offers and discounts always with the Sefer app": + "Offres et réductions exclusives toujours avec l'application Sefer", + "Please go to Car Driver": "Veuillez vous rendre sur Car Driver", + "wallet due to a previous trip.": + "portefeuille en raison d'un voyage précédent.", + "Submit Question": "Soumettre une question", + "Please enter your Question.": "Veuillez entrer votre question.", + "Help Details": "Détails de l'aide", + "No trip yet found": "Aucun voyage encore trouvé", + "No Response yet.": "Pas encore de réponse.", + "You Earn today is": "Vous gagnez aujourd'hui, c'est", + "You Have in": "Vous avez dans", + "Total points is": "Le total des points est", + "Total Connection Duration:": "Durée totale de connexion :", + "H and": "Main", + "Passenger name :": "Nom du passager :", + "Cost Of Trip IS": "Le coût du voyage est", + "Arrival time": "Heure d'arrivée", + "arrival time to reach your point": + "heure d'arrivée pour atteindre votre point", + "For Speed and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": + "Pour les courses Speed ​​et Delivery, le prix est calculé dynamiquement. Pour les trajets Confort, le prix est fonction du temps et de la distance", + "Hello this is Driver": "Bonjour, c'est Driver", + "Is the Passenger in your Car ?": + "Le passager est-il dans votre voiture ?", + "Please wait for the passenger to enter the car before starting the trip.": + "Veuillez attendre que le passager monte dans la voiture avant de commencer le voyage.", + "No ,still Waiting.": "Non, j'attends toujours.", + "I arrive you": "je t'arrive", + "I Arrive your site": "J'arrive sur votre site", + "You are not in near to passenger location": + "Vous n'êtes pas à proximité de l'emplacement des passagers", + "please go to picker location exactly": + "veuillez vous rendre exactement à l'emplacement du sélecteur", + "You Can Cancel Trip And get Cost of Trip From": + "Vous pouvez annuler le voyage et obtenir le coût du voyage à partir de", + "Are you sure to cancel?": "Etes-vous sûr d'annuler ?", + "Yes": "Oui", + "Insert Emergincy Number": "Insérer un numéro d'urgence", + "Best choice for comfort car and flexible route and stops point": + "Meilleur choix pour une voiture de confort et un itinéraire et un point d'arrêt flexibles", + "Insert": "Insérer", + "This is for delivery or a motorcycle.": + "C'est pour une livraison ou une moto.", + "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": + "Ce voyage va directement de votre point de départ à votre destination pour un prix fixe. Le chauffeur doit suivre l'itinéraire prévu", + "You can decline a request without any cost": + "Vous pouvez refuser une demande sans aucun frais", + "Perfect for adventure seekers who want to experience something new and exciting": + "Parfait pour les amateurs d'aventure qui veulent vivre quelque chose de nouveau et d'excitant", + "My current location is:": "Ma position actuelle est :", + "and I have a trip on": "et j'ai un voyage", + "App with Passenger": "Application avec passager", + "مع الراكب": "مع الراكب", + "You will be pay the cost to driver or we will get it from you on next trip": + "Vous paierez le coût au chauffeur ou nous le récupérerons lors du prochain voyage.", + "Trip has Steps": "Le voyage comporte des étapes", + "Distance from Passenger to destination is": + "La distance entre le passager et la destination est", + "price is": "le prix est", + "This ride type does not allow changes to the destination or additional stops": + "Ce type de trajet ne permet pas de modifications de destination ni d'arrêts supplémentaires", + "This price may be changed": "Ce prix peut être modifié", + "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": + "Pas de carte SIM, pas de problème ! Appelez votre chauffeur directement via notre application. Nous utilisons une technologie avancée pour garantir votre confidentialité.", + "This ride type allows changes, but the price may increase": + "Ce type de trajet autorise des modifications, mais le prix peut augmenter", + "message From passenger": "message du passager", + "Select one message": "Sélectionnez un message", + "My location is correct. You can search for me using the navigation app": + "Ma position est correcte. Vous pouvez me rechercher à l'aide de l'application de navigation", + "I'm waiting for you": "Je vous attends", + "Hello, I'm at the agreed-upon location": + "Bonjour, je suis à l'endroit convenu", + "We noticed the speed is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": + "Nous avons remarqué que la vitesse dépasse les 100 km/h. Veuillez ralentir pour votre sécurité. Si vous ne vous sentez pas en sécurité, vous pouvez partager les détails de votre voyage avec un contact ou appeler la police à l'aide du bouton rouge SOS.", + "Warning: Speeding detected!": + "Attention : excès de vitesse détecté !", + "Please help! Contact me as soon as possible.": + "S'il vous plaît, aidez-moi ! Contactez-moi au plus vite.", + "Share Trip Details": "Partager les détails du voyage", + "Car Plate is": "La plaque d'immatriculation est", + "the 300 points equal 300 L.E for you": + "les 300 points équivalent à 300 L.E pour vous", + "So go and gain your money": "Alors va gagner ton argent", + "the 300 points equal 300 L.E": "les 300 points équivalent à 300 L.E", + "The payment was not approved. Please try again.": + "Le paiement n'a pas été approuvé. Veuillez réessayer.", + "Payment Failed": "Paiement échoué", + "Error": "Erreur", + "An error occurred during the payment process.": + "Une erreur s'est produite lors du processus de paiement.", + "The payment was approved.": "Le paiement a été approuvé.", + "Payment Successful": "Paiement réussi", + "No ride found yet": "Aucun trajet trouvé pour l'instant", + "Accept Order": "Accepter la commande", + "reject your order.": "rejetez votre commande.", + "Bottom Bar Example": "Exemple de barre inférieure", + "Driver phone": "Téléphone du conducteur", + "Statistics": "Statistiques", + "Origin": "Origine", + "Destination": "Destination", + "Driver Name": "Nom du conducteur", + "Driver Car Plate": "Plaque de voiture du conducteur", + "Available for rides": "Disponible pour les balades", + "Scan Id": "Scanner l'identifiant", + "Camera not initilaized yet": "Caméra pas encore initialisée", + "Scan ID MklGoogle": "Scan ID MklGoogle", + "Language": "Langue", + "Jordan": "Jordan", + "USA": "Etats-Unis", + "Egypt": "Egypte", + "Turkey": "Turquie", + "Saudi Arabia": "Arabie Saoudite", + "Qatar": "Qatar", + "Bahrain": "Bahreïn", + "Kuwait": "Koweit", + "But you have a negative salary of": + "Mais vous avez un salaire négatif de", + "Promo Code": "Code promo", + "Your trip distance is": "La distance de votre trajet est", + "Enter promo code": "Saisir le code promotionnel", + "You have promo!": "Vous avez une promo !", + "Cost Duration": "Durée du coût", + "Duration is": "La durée est", + "Leave": "Partir", + "Join": "Rejoindre", + "You Should be select reason.": + "Vous devriez sélectionner la raison.", + "\$": "\$", + "Waiting for Driver ...": "En attente du chauffeur...", + "Latest Recent Trip": "Dernier voyage récent", + "from your list": "de votre liste", + "Do you want to change Work location": + "Voulez-vous changer de lieu de travail", + "Do you want to change Home location": + "Voulez-vous changer l'emplacement de votre domicile", + "We Are Sorry That we dont have cars in your Location!": + "Nous sommes désolés de ne pas avoir de voitures dans votre région !", + "Choose from Map": "Choisissez parmi la carte", + "Pick your ride location on the map - Tap to confirm": + "Choisissez l'emplacement de votre trajet sur la carte - Appuyez pour confirmer", + "To Work": "Travailler", + "Are you want to go this site": "Voulez-vous aller sur ce site", + "Closest & Cheapest": "Le plus proche et le moins cher", + "Work Saved": "Travail enregistré", + "Sefer is the ride-hailing app that is safe, reliable, and accessible.": + "Sefer est l'application de covoiturage sûre, fiable et accessible.", + "With Sefer, you can get a ride to your destination in minutes.": + "Avec Sefer, vous pouvez vous rendre à votre destination en quelques minutes.", + "Sefer is committed to safety, and all of our captains are carefully screened and background checked.": + "Sefer s'engage en faveur de la sécurité et tous nos capitaines sont soigneusement sélectionnés et leurs antécédents vérifiés.", + "To Home": "À la maison", + "Home Saved": "Accueil enregistré", + "Destination selected": "Destination sélectionnée", + "Now select start pick": "Sélectionnez maintenant le choix de départ", + "Pick from map": "Choisir sur la carte", + "Click here point": "Cliquez ici pour pointer", + "No Car in your site. Sorry!": + "Pas de voiture sur votre site. Désolé!", + "Nearest Car for you about": "Voiture la plus proche pour vous", + "N/A": "N / A", + "From :": "Depuis :", + "Get Details of Trip": "Obtenez les détails du voyage", + "If you want add stop click here": + "Si vous souhaitez ajouter un arrêt, cliquez ici", + "Driver": "Conducteur", + "Where you want go": "Où veux-tu aller", + "My Card": "Ma carte", + "Start Record": "Démarrer l'enregistrement", + "Wallet": "Portefeuille", + "History of Trip": "Histoire du voyage", + "Helping Center": "Centre d'aide", + "Record saved": "Enregistrement enregistré", + "Trips recorded": "Déplacements enregistrés", + "Select Your Country": "Sélectionnez votre pays", + "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": + "Pour vous assurer de recevoir les informations les plus précises concernant votre emplacement, veuillez sélectionner votre pays ci-dessous. Cela aidera à adapter l’expérience et le contenu de l’application à votre pays.", + "Are you sure to delete recorded files": + "Êtes-vous sûr de supprimer les fichiers enregistrés", + "Select recorded trip": "Sélectionnez un voyage enregistré", + "Card Number": "Numéro de carte", + "Hi, Where to": "Salut, où aller", + "Pick your destination from Map": + "Choisissez votre destination sur la carte", + "Add Stops": "Ajouter des arrêts", + "Get Direction": "Obtenir une direction", + "Add Location": "Ajouter un emplacement", + "Switch Rider": "Changer de cavalier", + "You will arrive to your destination after timer end.": + "Vous arriverez à votre destination après la fin du chronomètre.", + "You can cancel trip": "Vous pouvez annuler le voyage", + "The driver waitting you in picked location .": + "Le chauffeur vous attend à l'endroit choisi.", + "Pay with Your": "Payez avec votre", + "Pay with Credit Card": "Payez avec une carte de crédit", + "Payment History": "historique de paiement", + "Show Promos to Charge": "Afficher les promotions à facturer", + "Point": "Indiquer", + "Driver Wallet": "Portefeuille du conducteur", + "Total Points is": "Le total des points est", + "Total Budget from trips is": "Le budget total des voyages est de", + "Total Amount:": "Montant total:", + "Total Budget from trips by": "Budget total des voyages par", + "Credit card is": "La carte de crédit est", + "بطاقة الائتمان هي": "بطاقة الائتمان هي", + "This amount for all trip I get from Passengers": + "Ce montant pour tous les voyages que je reçois des passagers", + "Pay from my budget": "Payer avec mon budget", + "This amount for all trip I get from Passengers and Collected For me in": + "Ce montant pour tous les voyages que je reçois des passagers et collectés pour moi en", + "You can buy points from your budget": + "Vous pouvez acheter des points avec votre budget", + "insert amount": "insérer le montant", + "You can buy Points to let you online": + "Vous pouvez acheter des points pour vous permettre en ligne", + "by this list below": "par cette liste ci-dessous", + "من خلال القائمة أدناه": "من خلال القائمة أدناه", + "Create Wallet to receive your money": + "Créez un portefeuille pour recevoir votre argent", + "Enter your feedback here": "Entrez vos commentaires ici", + "Please enter your feedback.": "Veuillez saisir vos commentaires.", + "Feedback": "Retour", + "Submit": "Soumettre", + "Click here to Show it in Map": + "Cliquez ici pour l'afficher sur la carte", + "Canceled": "Annulé", + "Type your Email": "Tapez votre e-mail", + "No I want": "Non je veux", + "Email is": "L'e-mail est", + "Phone Number is": "Le numéro de téléphone est", + "Date of Birth is": "La date de naissance est", + "Sex is": "Le sexe est", + "Car Details": "Détails de la voiture", + "VIN is": "Le NIV est", + "Color is": "La couleur est", + "Make is": "Faire est", + "Model is": "Le modèle est", + "Year is": "L'année est", + "Expiration Date": "Date d'expiration", + "Edit Your data": "Modifier vos données", + "write vin for your car": "écris le vin pour ta voiture", + "VIN": "NIV", + "write Color for your car": "écrivez la couleur de votre voiture", + "write Make for your car": "écrire Fais pour ta voiture", + "write Model for your car": "écrivez le modèle de votre voiture", + "write Year for your car": "écrivez l'année pour votre voiture", + "write Expiration Date for your car": + "écrivez la date d'expiration de votre voiture", + "Tariffs": "Tarifs", + "Minimum fare": "Tarif minimum", + "Maximum fare": "Tarif maximum", + "Flag-down fee": "Frais de signalement", + "Including Tax": "Taxes comprises", + "BookingFee": "Frais de réservation", + "Morning": "Matin", + "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": + "de 07h30 à 10h30 (jeudi, vendredi, samedi, lundi)", + "Evening": "Soirée", + "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": + "de 12h00 à 15h00 (jeudi, vendredi, samedi, lundi)", + "Night": "Nuit", + "You have in account": "Vous avez en compte", + "Select Country": "Choisissez le pays", + "Ride Today :": "Roulez aujourd'hui :", + "After this period": "Après cette période", + "You can\"t cancel!": "Vous ne pouvez pas annuler !", + "لا تستطيع الغاء الرحله": "لا تستطيع الغاء الرحله", + "from 23:59 till 05:30": "de 23h59 à 05h30", + "Rate Driver": "Pilote de taux", + "Total Cost is": "Le coût total est", + "Write note": "Écrire une note", + "Time to arrive": "Il est temps d'arriver", + "Ride Summaries": "Résumés des trajets", + "Total Cost": "Coût total", + "Average of Hours of": "Moyenne des heures de", + "is ON for this month": "est activé pour ce mois", + "Days": "Jours", + "Total Hours on month": "Nombre total d'heures par mois", + "Counts of Hours on days": "Nombre d'heures par jour", + "OrderId": "Numéro de commande", + "created time": "temps créé", + "Speed Over": "Vitesse supérieure", + "I will slow down": "je vais ralentir", + "Map Passenger": "Carte Passager", + "Be Slowly": "Soyez lentement", + "If you want to make Google Map App run directly when you apply order": + "Si vous souhaitez que Google Map App s'exécute directement lorsque vous passez la commande", + "You can change the language of the app": + "Vous pouvez changer la langue de l'application", + "Your Budget less than needed": + "Votre budget inférieur à ce dont vous avez besoin", + "You can change the Country to get all features": + "Vous pouvez changer le pays pour obtenir toutes les fonctionnalités", + "Change Country": "Changer de pays" + }, + "de": { + "Sign In by Apple": "Anmelden von Apple", + "Sign In by Google": "Mit Google anmelden", + "How do I request a ride?": "Wie beantrage ich eine Fahrt?", + "Step-by-step instructions on how to request a ride through the Sefer app.": + "Schritt-für-Schritt-Anleitung zum Anfordern einer Fahrt über die Sefer-App.", + "What types of vehicles are available?": + "Welche Fahrzeugtypen stehen zur Verfügung?", + "Sefer offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": + "Sefer bietet eine Vielzahl von Fahrzeugoptionen, die Ihren Bedürfnissen entsprechen, darunter Wirtschaftlichkeit, Komfort und Luxus. Wählen Sie die Option, die am besten zu Ihrem Budget und Ihrer Passagierzahl passt.", + "How can I pay for my ride?": "Wie kann ich meine Fahrt bezahlen?", + "Sefer offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": + "Sefer bietet für Ihren Komfort mehrere Zahlungsmethoden an. Wählen Sie bei der Fahrtbestätigung zwischen Barzahlung oder Kredit-/Debitkartenzahlung.", + "Can I cancel my ride?": "Kann ich meine Fahrt stornieren?", + "Yes, you can cancel your ride under certain conditions (e.g., before driver is assigned). See the Sefer cancellation policy for details.": + "Ja, Sie können Ihre Fahrt unter bestimmten Bedingungen stornieren (z. B. bevor der Fahrer zugewiesen wird). Einzelheiten finden Sie in den Stornierungsbedingungen von Sefer.", + "Driver Registration & Requirements": + "Fahrerregistrierung und Anforderungen", + "How can I register as a driver?": + "Wie kann ich mich als Fahrer registrieren?", + "What are the requirements to become a driver?": + "Was sind die Voraussetzungen, um Fahrer zu werden?", + "Visit our website or contact Sefer support for information on driver registration and requirements.": + "Besuchen Sie unsere Website oder wenden Sie sich an den Sefer-Support, um Informationen zur Fahrerregistrierung und den Anforderungen zu erhalten.", + "How do I communicate with the other party (passenger/driver)?": + "Wie kommuniziere ich mit der Gegenpartei (Beifahrer/Fahrer)?", + "Sefer provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": + "Sefer bietet In-App-Chat-Funktionen, damit Sie während der Fahrt mit Ihrem Fahrer oder Beifahrer kommunizieren können.", + "What safety measures does Sefer offer?": + "Welche Sicherheitsmaßnahmen bietet Sefer?", + "Sefer prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": + "Sefer legt Wert auf Ihre Sicherheit. Wir bieten Funktionen wie Fahrerverifizierung, In-App-Reiseverfolgung und Notfallkontaktoptionen.", + "Frequently Questions": "Häufige Fragen", + "User does not exist.": "Benutzer existiert nicht.", + "We need your phone number to contact you and to help you.": + "Wir benötigen Ihre Telefonnummer, um Sie zu kontaktieren und Ihnen weiterzuhelfen.", + "You will recieve code in sms message": + "Sie erhalten den Code per SMS", + "Please enter": "Bitte eingeben", + "We need your phone number to contact you and to help you receive orders.": + "Wir benötigen Ihre Telefonnummer, um Sie zu kontaktieren und Ihnen bei der Entgegennahme von Bestellungen behilflich zu sein.", + "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": + "Der vollständige Name in Ihrem Strafregister stimmt nicht mit dem in Ihrem Führerschein überein. Bitte überprüfen Sie die korrekten Dokumente und stellen Sie diese bereit.", + "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": + "Die nationale Nummer auf Ihrem Führerschein stimmt nicht mit der auf Ihrem Ausweisdokument überein. Bitte überprüfen Sie die korrekten Dokumente und stellen Sie diese bereit.", + "Capture an Image of Your Criminal Record": + "Machen Sie ein Bild Ihres Strafregisters", + "IssueDate": "Ausgabedatum", + "Capture an Image of Your car license front": + "Machen Sie ein Bild von der Vorderseite Ihres Autokennzeichens", + "Capture an Image of Your ID Document front": + "Machen Sie ein Bild von der Vorderseite Ihres Ausweisdokuments", + "NationalID": "Personalausweis", + "FullName": "Vollständiger Name", + "InspectionResult": "Inspektionsergebnis", + "Criminal Record": "Vorstrafenregister", + "The email or phone number is already registered.": + "Die E-Mail-Adresse oder Telefonnummer ist bereits registriert.", + "To become a ride-sharing driver on the Sefer app, you need to upload your driver\"s license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Sefer app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": + "Um Mitfahrgelegenheitsfahrer in der Sefer-App zu werden, müssen Sie Ihren Führerschein, Ihr Ausweisdokument und Ihren Fahrzeugschein hochladen. Unser KI-System prüft und verifiziert deren Echtheit in nur 2-3 Minuten. Wenn Ihre Dokumente vorliegen Wenn Ihre Dokumente genehmigt sind, können Sie über die Sefer-App als Fahrer arbeiten. Bitte beachten Sie, dass die Einreichung betrügerischer Dokumente eine schwere Straftat darstellt und zu einer sofortigen Kündigung und rechtlichen Konsequenzen führen kann.", + "Documents check": "Dokumentenprüfung", + "Driver's License": "Führerschein", + "License Type": "Lizenz-Typ", + "National Number": "Nationale Nummer", + "Name (Arabic)": "Name (Arabisch)", + "Name (English)": "Name (Englisch)", + "Address": "Adresse", + "Issue Date": "Ausgabedatum", + "Expiry Date": "Verfallsdatum", + "License Categories": "Lizenzkategorien", + "driver_license": "Führerschein", + "Capture an Image of Your Driver License": + "Erfassen Sie ein Bild Ihres Führerscheins", + "ID Documents Back": "Ausweisdokumente zurück", + "National ID": "Personalausweis", + "Occupation": "Beruf", + "Gender": "Geschlecht", + "Religion": "Religion", + "Marital Status": "Familienstand", + "Full Name (Marital)": "Vollständiger Name (ehelich)", + "Expiration Date": "Verfallsdatum", + "Capture an Image of Your ID Document Back": + "Nehmen Sie ein Bild Ihres Ausweisdokuments auf", + "ID Documents Front": "Ausweisdokumente vorne", + "First Name": "Vorname", + "CardID": "Ausweiskarte", + "Full Name": "Vollständiger Name", + "Vehicle Details Front": "Fahrzeugdetails vorne", + "Plate Number": "Kennzeichen", + "Owner Name": "Besitzername", + "Vehicle Details Back": "Fahrzeugdetails zurück", + "Make": "Machen", + "Model": "Modell", + "Year": "Jahr", + "Chassis": "Chassis", + "Color": "Farbe", + "Displacement": "Verschiebung", + "Fuel": "Kraftstoff", + "Tax Expiry Date": "Ablaufdatum der Steuer", + "Inspection Date": "Inspektionsdatum", + "Capture an Image of Your car license back": + "Nehmen Sie ein Bild Ihres Autoführerscheins auf", + "Capture an Image of Your Driver’s License": + "Machen Sie ein Bild Ihres Führerscheins", + "Sign in with Google for easier email and name entry": + "Melden Sie sich bei Google an, um die E-Mail- und Namenseingabe zu vereinfachen", + "You will choose allow all the time to be ready receive orders": + "Sie können sich dafür entscheiden, immer bereit zu sein, Bestellungen entgegenzunehmen", + "Welcome to Sefer!": "Willkommen in Sefer!", + "Get to your destination quickly and easily.": + "Kommen Sie schnell und einfach an Ihr Ziel.", + "Enjoy a safe and comfortable ride.": + "Genießen Sie eine sichere und komfortable Fahrt.", + "Choose Language": "Sprache wählen", + "Login": "Anmeldung", + "Pay with Wallet": "Bezahlen Sie mit Wallet", + "Invalid MPIN": "Ungültige MPIN", + "Invalid OTP": "Ungültiges OTP", + "Enter your email address": "Geben sie ihre E-Mailadresse ein", + "Please enter Your Email.": + "Bitte geben Sie ihre E-Mail-Adresse ein.", + "Enter your phone number": "Gib deine Telefonnummer ein", + "Please enter your phone number.": + "Bitte geben sie ihre Telefonnummer ein.", + "Please enter Your Password.": "Bitte geben Sie Ihr Passwort ein.", + "Submit": "Einreichen", + "if you dont have account": "wenn Sie kein Konto haben", + "Register": "Registrieren", + "Accept Ride's Terms & Review Privacy Notice": + "Akzeptieren Sie die Geschäftsbedingungen von Ride und lesen Sie die Datenschutzerklärung", + "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": + "Indem ich unten „Ich stimme zu“ auswähle, habe ich die Nutzungsbedingungen gelesen, stimme ihnen zu und erkenne die Datenschutzerklärung an. Ich bin mindestens 18 Jahre alt.", + "I Agree": "Ich stimme zu", + "First name": "Vorname", + "Enter your first name": "Geben Sie Ihren Vornamen ein", + "Please enter your first name.": + "Bitte geben Sie Ihren Vornamen ein.", + "Last name": "Familienname, Nachname", + "Enter your last name": "Geben Sie Ihren Nachnamen ein", + "Please enter your last name.": + "Bitte geben Sie ihren Nachnamen ein.", + "City": "Stadt", + "Please enter your City.": "Bitte geben Sie Ihre Stadt ein.", + "Male": "Männlich", + "Female": "Weiblich", + "Verify Email": "E-Mail bestätigen", + "We sent 5 digit to your Email provided": + "Wir haben eine 5-stellige E-Mail an die von Ihnen angegebene E-Mail-Adresse gesendet", + "5 digit": "5-stellig", + "Send Verification Code": "Bestätigungscode senden", + "Your Ride Duration is": "Ihre Fahrtdauer beträgt", + "You will be thier in": "Du wirst da sein", + "You trip distance is": "Ihre Reisedistanz beträgt", + "Fee is": "Gebühr ist", + "From :": "Aus :", + "To :": "Zu :", + "Add Promo": "Promo hinzufügen", + "Confirm Selection": "Auswahl bestätigen", + "distance is": "Entfernung ist", + "duration is": "Dauer ist", + "I don't need a ride anymore": + "Ich brauche keine Mitfahrgelegenheit mehr", + "I was just trying the application": + "Ich habe gerade die Anwendung ausprobiert", + "No driver accepted my request": + "Kein Fahrer hat meine Anfrage angenommen", + "I added the wrong pick-up/drop-off location": + "Ich habe den falschen Abhol-/Abgabeort hinzugefügt", + "I don't have a reason": "Ich habe keinen Grund", + "Other": "Andere", + "Can we know why you want to cancel Ride ?": + "Können wir erfahren, warum Sie Ride absagen möchten?", + "Cancel Ride": "Fahrt abbrechen", + "Add Payment Method": "Zahlungsmethode hinzufügen", + "Your Wallet balance is": "Ihr Wallet-Guthaben beträgt", + "Ride Wallet": "Ride Wallet", + "Payment Method": "Bezahlverfahren", + "Type here Place": "Geben Sie hier Ort ein", + "Are You sure to ride to": + "Sind Sie sicher, dass Sie dorthin fahren?", + "Confirm": "Bestätigen", + "Back": "Zurück", + "You are Delete": "Sie sind gelöscht", + "Deleted": "Gelöscht", + "You Dont Have Any places yet !": "Sie haben noch keine Plätze!", + "Favorite Places": "Lieblingsplätze", + "From : Current Location": "Von: Aktueller Standort", + "Where to": "Wohin", + "Notifications": "Benachrichtigungen", + "Profile": "Profil", + "Home": "Heim", + "My Cared": "Meine Fürsorge", + "Add Card": "Karte hinzufügen", + "Add Credit Card": "Kreditkarte hinzufügen", + "Please enter the cardholder name": + "Bitte geben Sie den Namen des Karteninhabers ein", + "Please enter the expiry date": "Bitte geben Sie das Ablaufdatum ein", + "Please enter the CVV code": "Bitte geben Sie den CVV-Code ein", + "Go To Favorite Places": "Gehen Sie zu Lieblingsorten", + "Go to this Target": "Gehen Sie zu diesem Ziel", + "My Profile": "Mein Profil", + "Sign Out": "Abmelden", + "Home Page": "Startseite", + "Are you want to go to this site": + "Möchten Sie diese Seite besuchen?", + "MyLocation": "Mein Standort", + "my location": "mein Standort", + "Target": "Ziel", + "Update": "Aktualisieren", + "You Should choose rate figure": "Sie sollten den Tarifwert wählen", + "Login Captin": "Melden Sie sich an, Kapitän", + "Register Captin": "Registrieren Sie Kapitän", + "Send Verfication Code": "Bestätigungscode senden", + "KM": "KM", + "End Ride": "Fahrt beenden", + "Minute": "Minute", + "Go to passenger Location now": + "Gehen Sie jetzt zur Passagierposition", + "Duration of the Ride is": "Die Dauer der Fahrt beträgt", + "Distance of the Ride is": "Die Entfernung der Fahrt beträgt", + "Name of the Passenger is": "Name des Passagiers ist", + "Hello this is Captain": "Hallo, hier ist Captain", + "Start the Ride": "Starten Sie die Fahrt", + "Please Wait If passenger want To Cancel!": + "Bitte warten Sie, wenn der Passagier stornieren möchte!", + "Total Duration:": "Gesamtdauer:", + "Active Duration:": "Aktive Dauer:", + "Waiting for Captin ...": "Warten auf Kapitän ...", + "Age is": "Alter ist", + "Rating is": "Bewertung ist", + "to arrive you.": "um bei dir anzukommen.", + "Order History": "Bestellverlauf", + "My Wallet": "Mein Geldbeutel", + "Tariff": "Tarif", + "Settings": "Einstellungen", + "Feed Back": "Rückmeldung", + "Promos": "Promos", + "Please enter a valid 16-digit card number": + "Bitte geben Sie eine gültige 16-stellige Kartennummer ein", + "Add Phone": "Telefon hinzufügen", + "Please enter a phone number": + "Bitte geben Sie eine Telefonnummer ein", + "You dont Add Emergency Phone Yet!": + "Sie haben noch kein Notruftelefon hinzugefügt!", + "You will arrive to your destination after": + "Danach erreichen Sie Ihr Ziel", + "You can cancel Ride now": "Sie können die Fahrt jetzt stornieren", + "You Can cancel Ride After Captain did not come in the time": + "Sie können die Fahrt abbrechen, nachdem der Kapitän nicht rechtzeitig erschienen ist", + "If you in Car Now. Press Start The Ride": + "Wenn Sie jetzt im Auto sind. Drücken Sie „Fahrt starten“.", + "You Dont Have Any amount in": "Sie haben keinen Betrag drin", + "Wallet!": "Geldbörse!", + "You Have": "Du hast", + "Save Credit Card": "Kreditkarte sparen", + "Show Promos": "Promos anzeigen", + "10 and get 4% discount": "10 und erhalten Sie 4 % Rabatt", + "20 and get 6% discount": "20 und erhalten Sie 6 % Rabatt", + "40 and get 8% discount": "40 und erhalten Sie 8 % Rabatt", + "100 and get 11% discount": "100 und erhalten Sie 11 % Rabatt", + "Pay with Your PayPal": "Bezahlen Sie mit Ihrem PayPal", + "You will choose one of above !": + "Sie werden eines der oben genannten auswählen!", + "Cancel": "Stornieren", + "Delete My Account": "Mein Konto löschen", + "Edit Profile": "Profil bearbeiten", + "Name": "Name", + "Update Gender": "Geschlecht aktualisieren", + "Education": "Ausbildung", + "Update Education": "Bildung aktualisieren", + "Employment Type": "Beschäftigungsverhältnis", + "SOS Phone": "SOS-Telefon", + "High School Diploma": "High-School-Diplom", + "Associate Degree": "Associate Degree", + "Bachelor's Degree": "Bachelor-Abschluss", + "Master's Degree": "Master-Abschluss", + "Doctoral Degree": "Doktorgrad", + "Promos For today": "Promos für heute", + "Copy this Promo to use it in your Ride!": + "Kopieren Sie diese Promo, um sie in Ihrer Fahrt zu verwenden!", + "To change some Settings": "Um einige Einstellungen zu ändern", + "To change Language the App": "Um die Sprache der App zu ändern", + "Order Request Page": "Bestellanforderungsseite", + "Rouats of Trip": "Routen der Reise", + "Passenger Name is": "Passagiername ist", + "Total From Passenger is": "Gesamt vom Passagier ist", + "Duration To Passenger is": "Die Dauer bis zum Passagier beträgt", + "Distance To Passenger is": "Die Entfernung zum Passagier beträgt", + "Total For You is": "Total für Sie ist", + "Distance is": "Entfernung ist", + "KM": "KM", + "Duration of Trip is": "Die Dauer der Reise beträgt", + "Minutes": "Protokoll", + "Apply Order": "Auftrag anwenden", + "Refuse Order": "Anordnung ablehnen", + "Rate Captain": "Rate Kapitän", + "Enter your Note": "Geben Sie Ihre Notiz ein", + "Type something...": "Schreibe etwas...", + "Submit rating": "Bewertung abgeben", + "Rate Passenger": "Bewerten Sie Passagier", + "Ride Summary": "Zusammenfassung der Fahrt", + "welcome_message": "Willkommensnachricht", + "app_description": "app_description", + "get_to_destination": "get_to_destination", + "get_a_ride": "eine Mitfahrgelegenheit bekommen", + "safe_and_comfortable": "sicher_und_komfortabel", + "committed_to_safety": "commited_to_safety", + "Driver Applied the Ride for You": + "Der Fahrer hat die Fahrt für Sie übernommen", + "Show latest promo": "Neueste Promo anzeigen", + "Cancel Trip": "Reise stornieren", + "Passenger Cancel Trip": "Passagier storniert Reise", + "Please stay on the picked point.": + "Bitte bleiben Sie auf dem gewählten Punkt.", + "Trip is Begin": "Die Reise beginnt", + "Hi ,I will go now": "Hallo, ich werde jetzt gehen", + "Passenger come to you": "Passagier kommt zu Ihnen", + "Hi ,I Arrive your site": + "Hallo, ich bin auf Ihrer Website angekommen", + "Driver Finish Trip": "Fahrer beendet Fahrt", + "you will pay to Driver": "Sie zahlen an den Fahrer", + "Driver Cancel Your Trip": "Fahrer stornieren Ihre Reise", + "you will pay to Driver you will be pay the cost of driver time look to your SEFER Wallet": + "Sie zahlen an den Fahrer. Sie werden die Kosten für die Fahrerzeit bezahlen. Schauen Sie auf Ihr SEFER-Wallet", + "I will go now": "ich werde jetzt gehen", + "You Have Tips": "Sie haben Tipps", + "tips": "Tipps", + "Total is": "Insgesamt ist", + "الْمَجْمُوع هُوَ": "الْمَجْمُوع هُوَ", + "No,I want": "Nein, ich möchte", + "Your fee is": "Ihr Honorar beträgt", + "Do you want to pay Tips for this Driver": + "Möchten Sie für diesen Fahrer Trinkgeld zahlen?", + "Tip is": "Tipp ist", + "Tip is": "Tipp ist", + "Camera Access Denied.": "Kamerazugriff verweigert.", + "Open Settings": "Einstellungen öffnen", + "GPS Required Allow !.": "GPS erforderlich Erlauben!.", + "Your Account is Deleted": "Ihr Konto wurde gelöscht", + "Are you sure to delete your account?": + "Möchten Sie Ihr Konto wirklich löschen?", + "Your data will be erased after 2 weeks": + "Ihre Daten werden nach 2 Wochen gelöscht", + "And you will can't return to use app after 1 month": + "Und Sie können die App nach einem Monat nicht mehr verwenden", + "وَلَن تَسْتَطِيع اسْتِخْدَام التَّطْبِيق مَرَّة أُخْرَى بَعْد شَهْر": + "وَلَن تَسْتَطِيع اسْتِخْدَام التَّطْبِيق مَرَّة أُخْرَى بَعْد شَهْر", + "Enter Your First Name": "Geben Sie Ihren Vornamen ein", + "Are you Sure to LogOut?": + "Sind Sie sicher, dass Sie sich abmelden möchten?", + "Email Wrong": "E-Mail falsch", + "Email you inserted is Wrong.": + "Die von Ihnen eingegebene E-Mail ist falsch.", + "You have finished all times": "Du hast alle Zeiten abgeschlossen", + "if you want help you can email us here": + "Wenn Sie Hilfe benötigen, können Sie uns hier eine E-Mail senden", + "Thanks": "Danke", + "Email Us": "Schreiben Sie uns eine E-Mail", + "I cant register in your app in face detection": + "Ich kann mich bei der Gesichtserkennung nicht in Ihrer App registrieren", + "Hi": "Hallo", + "No face detected": "Kein Gesicht erkannt", + "Image detecting result is": "Das Ergebnis der Bilderkennung ist", + "from 3 times Take Attention": "ab 3 mal Achtung", + "Be sure for take accurate images please": + "Bitte achten Sie darauf, dass Sie genaue Bilder machen", + "You have": "Du hast", + "لَدَيْك": "لَدَيْك", + "image verified": "Bild verifiziert", + "Next": "Nächste", + "There is no help Question here": "Hier gibt es keine Hilfefrage", + "Call End": "Anruf beenden", + "You dont have Points": "Sie haben keine Punkte", + "You Are Stopped For this Day !": + "Sie sind für diesen Tag angehalten!", + "You must be charge your Account": "Sie müssen Ihr Konto belasten", + "You Refused 3 Rides this Day that is the reason": + "Sie haben an diesem Tag drei Fahrten abgelehnt, das ist der Grund", + "See you Tomorrow!": "Bis morgen!", + "لِقَائِنَا غَدًا!": "Alles klar!", + "Recharge my Account": "Laden Sie mein Konto auf", + "Ok , See you Tomorrow": "OK, wir sehen uns morgen", + "You are Stopped": "Sie sind gestoppt", + "Connected": "In Verbindung gebracht", + "Not Connected": "Nicht verbunden", + "Your are far from passenger location": + "Sie sind weit vom Passagierstandort entfernt", + "go to your passenger location before": + "Gehen Sie vorher zu Ihrem Passagierstandort", + "Passenger cancel trip": "Passagier storniert Reise", + "يُلْغِي الرَّاكِب الرِّحْلَة": "يُلْغِي الرَّاكِب الرِّحْلَة", + "You will get cost of your work for this trip": + "Sie erhalten die Kosten für Ihre Arbeit für diese Reise", + "in your wallet": "in deinem Portemonnaie", + "you gain": "du gewinnst", + "Order Cancelled": "Bestellung storniert", + "Order Cancelled by Passenger": "Bestellung vom Passagier storniert", + "Success": "Erfolg", + "Feedback data saved successfully": + "Feedbackdaten erfolgreich gespeichert", + "No Promo for today .": "Für heute gibt es keine Aktion.", + "Select your destination": "Wählen Sie Ihr Ziel aus", + "Search for your Start point": "Suchen Sie nach Ihrem Startpunkt", + "Search for waypoint": "Wegpunkt suchen", + "Current Location": "Aktueller Standort", + "Add Location 1": "Standort 1 hinzufügen", + "You must Verify email !.": + "Sie müssen Ihre E-Mail-Adresse bestätigen!", + "Cropper": "Cropper", + "Saved Sucssefully": "Erfolgreich gespeichert", + "Select Date": "Datum auswählen", + "Birth Date": "Geburtsdatum", + "Ok": "OK", + "the 500 points equal 30 JOD": "die 500 Punkte entsprechen 30 JOD", + "the 500 points equal 30 JOD for you": + "die 500 Punkte entsprechen für Sie 30 JOD", + "So go and gain your money": "Also geh und verdiene dein Geld", + "فَاسْتَحِقَّ فُلُوسَك وَاكْسِب النِّقَاط": + "فَاسْتَحِقَّ فُلُوسَك وَاكْسِب النِّقَاط", + "token updated": "Token aktualisiert", + "Add Location 2": "Standort 2 hinzufügen", + "Add Location 3": "Standort hinzufügen 3", + "Add Location 4": "Standort hinzufügen 4", + "Waiting for your location": "Warten auf Ihren Standort", + "Search for your destination": "Suchen Sie nach Ihrem Ziel", + "Hi! This is": "Hallo! Das ist", + "I am using": "ich benutze", + "to ride with": "mitfahren", + "as the driver.": "als Fahrer.", + "is driving a": "fährt ein", + "with license plate": "mit Nummernschild", + "I am currently located at": "Ich befinde mich derzeit in", + "Please go to Car now": "Bitte gehen Sie jetzt zu Auto", + "If you need to reach me, please contact the driver directly at": + "Wenn Sie mich erreichen möchten, wenden Sie sich bitte direkt an den Fahrer unter", + "No Car or Driver Found in your area.": + "In Ihrer Nähe wurde kein Auto oder Fahrer gefunden.", + "Please Try anther time": "Bitte versuchen Sie es ein anderes Mal", + "There no Driver Aplly your order sorry for that": + "Es gibt keinen Fahrer, der Ihre Bestellung aufgibt, tut mir leid", + "Trip Cancelled": "Reise abgesagt", + "The Driver Will be in your location soon .": + "Der Fahrer wird bald an Ihrem Standort sein.", + "The distance less than 500 meter.": + "Die Entfernung beträgt weniger als 500 Meter.", + "Promo End !": "Aktionsende!", + "There is no notification yet": "Es gibt noch keine Benachrichtigung", + "Use Touch ID or Face ID to confirm payment": + "Verwenden Sie Touch ID oder Face ID, um die Zahlung zu bestätigen", + "Contact us for any questions on your order.": + "Kontaktieren Sie uns bei Fragen zu Ihrer Bestellung.", + "Pyament Cancelled .": "Zahlung storniert.", + "type here": "Geben Sie hier ein", + "Scan Driver License": "Führerschein scannen", + "Please put your licence in these border": + "Bitte tragen Sie Ihren Führerschein in diesen Rahmen ein", + "Camera not initialized yet": "Kamera noch nicht initialisiert", + "Take Image": "Bild machen", + "AI Page": "AI-Seite", + "Take Picture Of ID Card": "Machen Sie ein Foto vom Personalausweis", + "Take Picture Of Driver License Card": + "Machen Sie ein Foto der Führerscheinkarte", + "We are process picture please wait": + "Wir sind Prozessbild, bitte warten", + "There is no data yet.": "Es liegen noch keine Daten vor.", + "Name :": "Name :", + "Drivers License Class:": "Führerscheinklasse:", + "Document Number:": "Dokumentnummer:", + "Address:": "Adresse:", + "Height:": "Höhe:", + "Expiry Date:": "Verfallsdatum:", + "Date of Birth:": "Geburtsdatum:", + "You can\"t continue with us .": + "Sie können mit uns nicht weitermachen.", + "You should renew Driver license": + "Sie sollten den Führerschein erneuern", + "Detect Your Face": "Erkennen Sie Ihr Gesicht", + "Go to next step": "Gehen Sie zum nächsten Schritt", + "scan Car License.": "Autolizenz scannen.", + "aاسْتِخْرَاج رُخْصَة السَّيَّارَة.": + "aاسْتِخْرَاج رُخْصَة السَّيَّارَة.", + "Name in arabic": "Name auf Arabisch", + "Drivers License Class": "Führerscheinklasse", + "Date of Birth": "Geburtsdatum", + "Age": "Alter", + "Lets check Car license": "Lass uns den Autoschein überprüfen", + "Car Kind": "Auto Art", + "Car Plate": "Nummernschild", + "Lets check License Back Face": + "Schauen wir uns die Rückseite der Lizenz an", + "Car License Card": "Autolizenzkarte", + "No image selected yet": "Noch kein Bild ausgewählt", + "Made :": "Gemacht :", + "model :": "Modell :", + "VIN :": "Fahrgestellnummer:", + "year :": "Jahr :", + "ُExpire Date": "Ablaufdatum", + "Login Driver": "Login-Treiber", + "Password must br at least 6 character.": + "Das Passwort muss mindestens 6 Zeichen lang sein.", + "if you don\"t have account": "wenn Sie kein Konto haben", + "Here recorded trips audio": "Hier aufgezeichnete Reisen mit Audio", + "Register as Driver": "Registrieren Sie sich als Fahrer", + "Privacy Notice": "Datenschutzerklärung", + "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the": + "Indem ich unten „Ich stimme zu“ auswähle, habe ich die Nutzungsbedingungen gelesen, stimme ihnen zu und erkenne sie an", + ". I am at least 18 years of age.": + ". Ich bin mindestens 18 Jahre alt.", + "Log Out Page": "Abmeldeseite", + "Log Off": "Abmelden", + "Register Driver": "Registrieren Sie den Fahrer", + "Verify Email For Driver": + "Überprüfen Sie die E-Mail-Adresse des Fahrers", + "Admin DashBoard": "Admin-DashBoard", + "Your name": "Ihr Name", + "your ride is applied": "Ihre Fahrt wird angewendet", + "Your password": "Ihr Passwort", + "H and": "Hand", + "LE": "LE", + "JOD": "JOD", + "m": "M", + "We search nearst Driver to you": + "Wir suchen den Fahrer in Ihrer Nähe", + "please wait till driver accept your order": + "Bitte warten Sie, bis der Fahrer Ihre Bestellung akzeptiert", + "No accepted orders? Try raising your trip fee to attract riders.": + "Keine angenommenen Bestellungen? Versuchen Sie, Ihre Reisegebühr zu erhöhen, um Fahrgäste anzulocken.", + "You should select one": "Sie sollten eines auswählen", + "The driver accept your order for": + "Der Fahrer nimmt Ihre Bestellung entgegen", + "Increase Fee": "Gebühr erhöhen", + "No, thanks": "Nein danke", + "The driver on your way": "Der Fahrer auf Ihrem Weg", + "Total price from": "Gesamtpreis ab", + "Order Details Speed": "Bestelldetails Geschwindigkeit", + "Order Applied": "Auftrag angewendet", + "accepted your order": "habe Ihre Bestellung angenommen", + "We regret to inform you that another driver has accepted this order.": + "Wir bedauern, Ihnen mitteilen zu müssen, dass ein anderer Fahrer diesen Auftrag angenommen hat.", + "Selected file:": "Ausgewählte Datei:", + "Your trip cost is": "Ihre Reisekosten betragen", + "this will delete all files from your device": + "Dadurch werden alle Dateien von Ihrem Gerät gelöscht", + "you have a negative balance of": + "Sie haben einen negativen Saldo von", + "in your": "in deinem", + "Exclusive offers and discounts always with the Sefer app": + "Exklusive Angebote und Rabatte immer mit der Sefer-App", + "Please go to Car Driver": "Bitte gehen Sie zu Autofahrer", + "wallet due to a previous trip.": + "Geldbeutel aufgrund einer früheren Reise.", + "Submit Question": "Frage einreichen", + "Please enter your Question.": "Bitte geben Sie Ihre Frage ein.", + "Help Details": "Hilfedetails", + "No trip yet found": "Noch keine Reise gefunden", + "No Response yet.": "Noch keine Antwort.", + "You Earn today is": "Sie verdienen heute", + "You Have in": "Du hast drin", + "Total points is": "Die Gesamtpunktzahl beträgt", + "Total Connection Duration:": "Gesamtverbindungsdauer:", + "H and": "Hand", + "Passenger name :": "Passagier-Name :", + "Cost Of Trip IS": "Die Reisekosten betragen IST", + "Arrival time": "Ankunftszeit", + "arrival time to reach your point": + "Ankunftszeit, um Ihren Punkt zu erreichen", + "For Speed and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": + "Für Speed- und Delivery-Fahrten wird der Preis dynamisch berechnet. Bei Komfortfahrten richtet sich der Preis nach Zeit und Entfernung", + "Hello this is Driver": "Hallo, hier ist Driver", + "Is the Passenger in your Car ?": + "Befindet sich der Beifahrer in Ihrem Auto?", + "Please wait for the passenger to enter the car before starting the trip.": + "Bitte warten Sie, bis der Passagier das Auto betritt, bevor Sie die Fahrt beginnen.", + "No ,still Waiting.": "Nein, ich warte immer noch.", + "I arrive you": "Ich komme zu dir", + "I Arrive your site": "Ich komme auf Ihre Website", + "You are not in near to passenger location": + "Sie befinden sich nicht in der Nähe des Passagierstandorts", + "please go to picker location exactly": + "Bitte gehen Sie genau zum Picker-Standort", + "You Can Cancel Trip And get Cost of Trip From": + "Sie können die Reise stornieren und die Reisekosten erhalten", + "Are you sure to cancel?": "Möchten Sie wirklich stornieren?", + "Yes": "Ja", + "Insert Emergincy Number": "Geben Sie die Notrufnummer ein", + "Best choice for comfort car and flexible route and stops point": + "Beste Wahl für ein komfortables Auto und eine flexible Route und Haltestellen", + "Insert": "Einfügen", + "This is for delivery or a motorcycle.": + "Dies ist für die Lieferung oder ein Motorrad.", + "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": + "Diese Reise führt zum Festpreis direkt von Ihrem Startpunkt zu Ihrem Ziel. Der Fahrer muss der geplanten Route folgen", + "You can decline a request without any cost": + "Sie können eine Anfrage kostenlos ablehnen", + "Perfect for adventure seekers who want to experience something new and exciting": + "Perfekt für Abenteuerlustige, die etwas Neues und Aufregendes erleben möchten", + "My current location is:": "Mein aktueller Standort ist:", + "and I have a trip on": "und ich habe eine Reise vor mir", + "App with Passenger": "App mit Passagier", + "مع الراكب": "مع الراكب", + "You will be pay the cost to driver or we will get it from you on next trip": + "Sie zahlen die Kosten dem Fahrer oder wir übernehmen sie bei der nächsten Fahrt für Sie", + "Trip has Steps": "Die Reise hat Schritte", + "Distance from Passenger to destination is": + "Die Entfernung vom Passagier zum Ziel beträgt", + "price is": "der Preis ist", + "This ride type does not allow changes to the destination or additional stops": + "Bei diesem Fahrttyp sind keine Änderungen des Ziels oder zusätzliche Stopps möglich", + "This price may be changed": "Dieser Preis kann geändert werden", + "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": + "Keine SIM-Karte, kein Problem! Rufen Sie Ihren Fahrer direkt über unsere App an. Wir verwenden fortschrittliche Technologie, um Ihre Privatsphäre zu gewährleisten.", + "This ride type allows changes, but the price may increase": + "Bei diesem Fahrtyp sind Änderungen möglich, der Preis kann jedoch steigen", + "message From passenger": "Nachricht vom Passagier", + "Select one message": "Wählen Sie eine Nachricht aus", + "My location is correct. You can search for me using the navigation app": + "Mein Standort ist korrekt. Sie können mit der Navigations-App nach mir suchen", + "I'm waiting for you": "Ich warte auf dich", + "Hello, I'm at the agreed-upon location": + "Hallo, ich bin am vereinbarten Ort", + "We noticed the speed is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": + "Wir haben festgestellt, dass die Geschwindigkeit 100 km/h überschreitet. Bitte fahren Sie zu Ihrer Sicherheit langsamer. Wenn Sie sich unsicher fühlen, können Sie Ihre Reisedaten einem Kontakt mitteilen oder über die rote SOS-Taste die Polizei rufen.", + "Warning: Speeding detected!": + "Warnung: Geschwindigkeitsüberschreitung erkannt!", + "Please help! Contact me as soon as possible.": + "Bitte helfen Sie! Kontaktieren Sie mich so schnell wie möglich.", + "Share Trip Details": "Reisedetails teilen", + "Car Plate is": "Autokennzeichen ist", + "the 300 points equal 300 L.E for you": + "Die 300 Punkte entsprechen für Sie 300 L.E", + "So go and gain your money": "Also geh und verdiene dein Geld", + "the 300 points equal 300 L.E": "die 300 Punkte entsprechen 300 L.E", + "The payment was not approved. Please try again.": + "Die Zahlung wurde nicht genehmigt. Bitte versuche es erneut.", + "Payment Failed": "Bezahlung fehlgeschlagen", + "Error": "Fehler", + "An error occurred during the payment process.": + "Beim Bezahlvorgang ist ein Fehler aufgetreten.", + "The payment was approved.": "Die Zahlung wurde genehmigt.", + "Payment Successful": "Bezahlung erfolgreich", + "No ride found yet": "Noch keine Fahrt gefunden", + "Accept Order": "Bestellung annehmen", + "reject your order.": "Lehnen Sie Ihre Bestellung ab.", + "Bottom Bar Example": "Beispiel für die untere Leiste", + "Driver phone": "Fahrertelefon", + "Statistics": "Statistiken", + "Origin": "Herkunft", + "Destination": "Ziel", + "Driver Name": "Fahrername", + "Driver Car Plate": "Fahrer-Autokennzeichen", + "Available for rides": "Für Fahrten verfügbar", + "Scan Id": "Scan-ID", + "Camera not initilaized yet": "Kamera noch nicht initialisiert", + "Scan ID MklGoogle": "Scan-ID MklGoogle", + "Language": "Sprache", + "Jordan": "Jordanien", + "USA": "USA", + "Egypt": "Ägypten", + "Turkey": "Truthahn", + "Saudi Arabia": "Saudi-Arabien", + "Qatar": "Katar", + "Bahrain": "Bahrain", + "Kuwait": "Kuwait", + "But you have a negative salary of": + "Aber Sie haben ein negatives Gehalt von", + "Promo Code": "Aktionscode", + "Your trip distance is": "Ihre Reisedistanz beträgt", + "Enter promo code": "Geben Sie den Aktionscode ein", + "You have promo!": "Sie haben Promo!", + "Cost Duration": "Kostendauer", + "Duration is": "Dauer ist", + "Leave": "Verlassen", + "Join": "Verbinden", + "You Should be select reason.": "Sie sollten den Grund auswählen.", + "\$": "\$", + "Waiting for Driver ...": "Warten auf den Fahrer ...", + "Latest Recent Trip": "Letzte letzte Reise", + "from your list": "aus Ihrer Liste", + "Do you want to change Work location": + "Möchten Sie den Arbeitsort ändern?", + "Do you want to change Home location": + "Möchten Sie den Heimatort ändern?", + "We Are Sorry That we dont have cars in your Location!": + "Es tut uns leid, dass wir an Ihrem Standort keine Autos haben!", + "Choose from Map": "Wählen Sie aus der Karte", + "Pick your ride location on the map - Tap to confirm": + "Wählen Sie den Standort Ihrer Fahrt auf der Karte aus – Tippen Sie zur Bestätigung", + "To Work": "Arbeiten", + "Are you want to go this site": "Möchten Sie diese Seite besuchen?", + "Closest & Cheapest": "Am nächsten und am günstigsten", + "Work Saved": "Arbeit gespart", + "Sefer is the ride-hailing app that is safe, reliable, and accessible.": + "Sefer ist die sichere, zuverlässige und zugängliche Ride-Hailing-App.", + "With Sefer, you can get a ride to your destination in minutes.": + "Mit Sefer können Sie in wenigen Minuten an Ihr Ziel fahren.", + "Sefer is committed to safety, and all of our captains are carefully screened and background checked.": + "Sefer legt großen Wert auf Sicherheit und alle unsere Kapitäne werden sorgfältig überprüft und überprüft.", + "To Home": "Nach Hause", + "Home Saved": "Zuhause gerettet", + "Destination selected": "Ziel ausgewählt", + "Now select start pick": "Wählen Sie nun Startauswahl", + "Pick from map": "Wählen Sie aus der Karte", + "Click here point": "Klicken Sie hier", + "No Car in your site. Sorry!": + "Kein Auto auf Ihrer Website. Entschuldigung!", + "Nearest Car for you about": "Das nächstgelegene Auto für Sie", + "N/A": "N / A", + "From :": "Aus :", + "Get Details of Trip": "Erhalten Sie Details zur Reise", + "If you want add stop click here": + "Wenn Sie Stopp hinzufügen möchten, klicken Sie hier", + "Driver": "Treiber", + "Where you want go": "Wo möchtest du gehen", + "My Card": "Meine Karte", + "Start Record": "Aufnahme starten", + "Wallet": "Geldbörse", + "History of Trip": "Geschichte der Reise", + "Helping Center": "Hilfezentrum", + "Record saved": "Datensatz gespeichert", + "Trips recorded": "Fahrten aufgezeichnet", + "Select Your Country": "Wähle dein Land", + "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": + "Um sicherzustellen, dass Sie die genauesten Informationen für Ihren Standort erhalten, wählen Sie bitte unten Ihr Land aus. Dadurch können Sie das App-Erlebnis und den Inhalt an Ihr Land anpassen.", + "Are you sure to delete recorded files": + "Sind Sie sicher, dass Sie die aufgezeichneten Dateien löschen?", + "Select recorded trip": "Aufgezeichnete Fahrt auswählen", + "Card Number": "Kartennummer", + "Hi, Where to": "Hallo, wohin", + "Pick your destination from Map": + "Wählen Sie Ihr Ziel auf der Karte aus", + "Add Stops": "Stopps hinzufügen", + "Get Direction": "Holen Sie sich die Richtung", + "Add Location": "Ort hinzufügen", + "Switch Rider": "Fahrer wechseln", + "You will arrive to your destination after timer end.": + "Nach Ablauf des Timers erreichen Sie Ihr Ziel.", + "You can cancel trip": "Sie können die Reise stornieren", + "The driver waitting you in picked location .": + "Der Fahrer erwartet Sie am ausgewählten Ort.", + "Pay with Your": "Bezahlen Sie mit Ihrem", + "Pay with Credit Card": "Mit Kreditkarte bezahlen", + "Payment History": "Zahlungshistorie", + "Show Promos to Charge": "Werbeaktionen zum Aufladen anzeigen", + "Point": "Punkt", + "Driver Wallet": "Fahrer-Geldbörse", + "Total Points is": "Die Gesamtpunktzahl beträgt", + "Total Budget from trips is": "Das Gesamtbudget aus Reisen beträgt", + "Total Amount:": "Gesamtmenge:", + "Total Budget from trips by": "Gesamtbudget aus Reisen von", + "Credit card is": "Kreditkarte ist", + "بطاقة الائتمان هي": "بطاقة الائتمان هي", + "This amount for all trip I get from Passengers": + "Diesen Betrag erhalte ich für alle Fahrten von Passagieren", + "Pay from my budget": "Bezahle aus meinem Budget", + "This amount for all trip I get from Passengers and Collected For me in": + "Diesen Betrag erhalte ich für alle Fahrten von den Passagieren und werde für mich eingezogen", + "You can buy points from your budget": + "Sie können Punkte aus Ihrem Budget kaufen", + "insert amount": "Betrag eingeben", + "You can buy Points to let you online": + "Sie können Punkte kaufen, um sie online zu nutzen", + "by this list below": "durch diese Liste unten", + "من خلال القائمة أدناه": "Das ist nicht der Fall", + "Create Wallet to receive your money": + "Erstellen Sie eine Wallet, um Ihr Geld zu erhalten", + "Enter your feedback here": "Geben Sie hier Ihr Feedback ein", + "Please enter your feedback.": "Bitte geben Sie Ihr Feedback ein.", + "Feedback": "Rückmeldung", + "Submit": "Einreichen", + "Click here to Show it in Map": + "Klicken Sie hier, um es in der Karte anzuzeigen", + "Canceled": "Abgesagt", + "Type your Email": "Geben Sie Ihre E-Mail-Adresse ein", + "No I want": "Nein, ich möchte", + "Email is": "E-Mail ist", + "Phone Number is": "Telefonnummer ist", + "Date of Birth is": "Geburtsdatum ist", + "Sex is": "Sex ist", + "Car Details": "Fahrzeugdetails", + "VIN is": "VIN ist", + "Color is": "Die Farbe ist", + "Make is": "Machen ist", + "Model is": "Modell ist", + "Year is": "Jahr ist", + "Expiration Date": "Verfallsdatum", + "Edit Your data": "Bearbeiten Sie Ihre Daten", + "write vin for your car": "Schreiben Sie Vin für Ihr Auto", + "VIN": "Fahrgestellnummer", + "write Color for your car": "Schreiben Sie Farbe für Ihr Auto", + "write Make for your car": "Schreiben Sie Make für Ihr Auto", + "write Model for your car": "Schreiben Sie Modell für Ihr Auto", + "write Year for your car": "Schreiben Sie das Jahr für Ihr Auto", + "write Expiration Date for your car": + "Schreiben Sie das Ablaufdatum für Ihr Auto", + "Tariffs": "Tarife", + "Minimum fare": "Mindesttarif", + "Maximum fare": "Höchsttarif", + "Flag-down fee": "Flag-Down-Gebühr", + "Including Tax": "Inkl. Steuern", + "BookingFee": "Buchungsgebühr", + "Morning": "Morgen", + "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": + "von 07:30 bis 10:30 Uhr (Donnerstag, Freitag, Samstag, Montag)", + "Evening": "Abend", + "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": + "von 12:00 bis 15:00 Uhr (Donnerstag, Freitag, Samstag, Montag)", + "Night": "Nacht", + "You have in account": "Sie haben ein Konto", + "Select Country": "Land auswählen", + "Ride Today :": "Fahren Sie heute:", + "After this period": "Nach dieser Zeit", + "You can\"t cancel!": "Sie können nicht kündigen!", + "لا تستطيع الغاء الرحله": "Es ist nicht möglich, dies zu tun", + "from 23:59 till 05:30": "von 23:59 bis 05:30 Uhr", + "Rate Driver": "Tariftreiber", + "Total Cost is": "Die Gesamtkosten betragen", + "Write note": "Notiz schreiben", + "Time to arrive": "Zeit anzukommen", + "Ride Summaries": "Fahrtzusammenfassungen", + "Total Cost": "Gesamtkosten", + "Average of Hours of": "Durchschnitt der Stunden von", + "is ON for this month": "ist für diesen Monat eingeschaltet", + "Days": "Tage", + "Total Hours on month": "Gesamtstunden pro Monat", + "Counts of Hours on days": "Anzahl der Stunden an Tagen", + "OrderId": "Auftragsnummer", + "created time": "geschaffene Zeit", + "Speed Over": "Geschwindigkeit vorbei", + "I will slow down": "Ich werde langsamer werden", + "Map Passenger": "Karte Passagier", + "Be Slowly": "Seien Sie langsam", + "If you want to make Google Map App run directly when you apply order": + "Wenn Sie möchten, dass die Google Map App direkt ausgeführt wird, wenn Sie eine Bestellung aufgeben", + "You can change the language of the app": + "Sie können die Sprache der App ändern", + "Your Budget less than needed": "Ihr Budget ist geringer als nötig", + "You can change the Country to get all features": + "Sie können das Land ändern, um alle Funktionen zu nutzen", + "Change Country": "Land ändern" + }, + "es": { + "Sign In by Apple": "Iniciar sesión por Apple", + "Sign In by Google": "Iniciar sesión por Google", + "How do I request a ride?": "¿Cómo solicito un viaje?", + "Step-by-step instructions on how to request a ride through the Sefer app.": + "Instrucciones paso a paso sobre cómo solicitar un viaje a través de la aplicación Sefer.", + "What types of vehicles are available?": + "¿Qué tipos de vehículos hay disponibles?", + "Sefer offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": + "Sefer ofrece una variedad de opciones de vehículos que se adaptan a sus necesidades, incluidos económicos, cómodos y de lujo. Elige la opción que mejor se ajuste a tu presupuesto y número de pasajeros.", + "How can I pay for my ride?": "¿Cómo puedo pagar mi viaje?", + "Sefer offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": + "Sefer ofrece múltiples métodos de pago para su comodidad. Elija entre pago en efectivo o pago con tarjeta de crédito/débito durante la confirmación del viaje.", + "Can I cancel my ride?": "¿Puedo cancelar mi viaje?", + "Yes, you can cancel your ride under certain conditions (e.g., before driver is assigned). See the Sefer cancellation policy for details.": + "Sí, puedes cancelar tu viaje bajo ciertas condiciones (por ejemplo, antes de que se asigne el conductor). Consulta la política de cancelación de Sefer para más detalles.", + "Driver Registration & Requirements": + "Registro y requisitos del conductor", + "How can I register as a driver?": + "¿Cómo puedo registrarme como conductor?", + "What are the requirements to become a driver?": + "¿Cuáles son los requisitos para ser conductor?", + "Visit our website or contact Sefer support for information on driver registration and requirements.": + "Visite nuestro sitio web o comuníquese con el soporte de Sefer para obtener información sobre el registro y los requisitos del conductor.", + "How do I communicate with the other party (passenger/driver)?": + "¿Cómo me comunico con la otra parte (pasajero/conductor)?", + "Sefer provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": + "Sefer proporciona una función de chat en la aplicación para permitirle comunicarse con su conductor o pasajero durante su viaje.", + "What safety measures does Sefer offer?": + "¿Qué medidas de seguridad ofrece Sefer?", + "Sefer prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": + "Sefer prioriza tu seguridad. Ofrecemos funciones como verificación del conductor, seguimiento de viajes en la aplicación y opciones de contacto de emergencia.", + "Frequently Questions": "Preguntas frecuentes", + "User does not exist.": "El usuario no existe.", + "We need your phone number to contact you and to help you.": + "Necesitamos tu número de teléfono para comunicarnos contigo y ayudarte.", + "You will recieve code in sms message": + "Recibirás el código en un mensaje SMS.", + "Please enter": "Por favor escribe", + "We need your phone number to contact you and to help you receive orders.": + "Necesitamos su número de teléfono para comunicarnos con usted y ayudarlo a recibir pedidos.", + "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": + "El nombre completo que figura en sus antecedentes penales no coincide con el que figura en su licencia de conducir. Por favor verifique y proporcione los documentos correctos.", + "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": + "El número nacional de su licencia de conducir no coincide con el de su documento de identidad. Por favor verifique y proporcione los documentos correctos.", + "Capture an Image of Your Criminal Record": + "Capture una imagen de sus antecedentes penales", + "IssueDate": "Fecha de asunto", + "Capture an Image of Your car license front": + "Capture una imagen del frente de la licencia de su automóvil", + "Capture an Image of Your ID Document front": + "Capture una imagen del frente de su documento de identidad", + "NationalID": "Identificación nacional", + "FullName": "Nombre completo", + "InspectionResult": "Resultado de inspeccion", + "Criminal Record": "Antecedentes penales", + "The email or phone number is already registered.": + "El correo electrónico o número de teléfono ya está registrado.", + "To become a ride-sharing driver on the Sefer app, you need to upload your driver\"s license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Sefer app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": + "Para convertirse en conductor de viajes compartidos en la aplicación Sefer, debe cargar su licencia de conducir, documento de identificación y documento de registro del automóvil. Nuestro sistema de inteligencia artificial revisará y verificará instantáneamente su autenticidad en solo 2 o 3 minutos. Si sus documentos están aprobados, puede comenzar a trabajar como conductor en la aplicación Sefer. Tenga en cuenta que enviar documentos fraudulentos es un delito grave y puede resultar en el despido inmediato y consecuencias legales.", + "Documents check": "Verificación de documentos", + "Driver's License": "Licencia de conducir", + "License Type": "Tipo de licencia", + "National Number": "Número nacional", + "Name (Arabic)": "Nombre (árabe)", + "Name (English)": "Nombre (inglés)", + "Address": "DIRECCIÓN", + "Issue Date": "Fecha de asunto", + "Expiry Date": "Fecha de caducidad", + "License Categories": "Categorías de licencia", + "driver_license": "licencia de conducir", + "Capture an Image of Your Driver License": + "Capture una imagen de su licencia de conducir", + "ID Documents Back": "Documentos de Identidad Volver", + "National ID": "Identificación nacional", + "Occupation": "Ocupación", + "Gender": "Género", + "Religion": "Religión", + "Marital Status": "Estado civil", + "Full Name (Marital)": "Nombre completo (matrimonial)", + "Expiration Date": "Fecha de caducidad", + "Capture an Image of Your ID Document Back": + "Capture una imagen de su documento de identidad", + "ID Documents Front": "Frente de documentos de identidad", + "First Name": "Nombre de pila", + "CardID": "Tarjeta de identificacion", + "Full Name": "Nombre completo", + "Vehicle Details Front": "Detalles del vehículo Frente", + "Plate Number": "Número de placa", + "Owner Name": "Nombre del dueño", + "Vehicle Details Back": "Detalles del vehículo Atrás", + "Make": "Hacer", + "Model": "Modelo", + "Year": "Año", + "Chassis": "Chasis", + "Color": "Color", + "Displacement": "Desplazamiento", + "Fuel": "Combustible", + "Tax Expiry Date": "Fecha de vencimiento del impuesto", + "Inspection Date": "Fecha de inspección", + "Capture an Image of Your car license back": + "Capture una imagen de la licencia de su automóvil", + "Capture an Image of Your Driver’s License": + "Capture una imagen de su licencia de conducir", + "Sign in with Google for easier email and name entry": + "Inicie sesión con Google para ingresar nombres y correos electrónicos más fácilmente", + "You will choose allow all the time to be ready receive orders": + "Elegirás permitir todo el tiempo para estar listo para recibir pedidos.", + "Welcome to Sefer!": "¡Bienvenidos a Séfer!", + "Get to your destination quickly and easily.": + "Llega a tu destino de forma rápida y sencilla.", + "Enjoy a safe and comfortable ride.": + "Disfruta de un viaje seguro y cómodo.", + "Choose Language": "Elige lengua", + "Login": "Acceso", + "Pay with Wallet": "Pagar con billetera", + "Invalid MPIN": "MPIN no válido", + "Invalid OTP": "OTP no válida", + "Enter your email address": + "Introduce tu dirección de correo electrónico", + "Please enter Your Email.": + "Por favor introduzca su correo electrónico.", + "Enter your phone number": "Ingrese su número telefónico", + "Please enter your phone number.": + "Por favor, introduzca su número de teléfono.", + "Please enter Your Password.": "Por favor, introduzca su contraseña.", + "Submit": "Entregar", + "if you dont have account": "si no tienes cuenta", + "Register": "Registro", + "Accept Ride's Terms & Review Privacy Notice": + "Acepte los términos de Ride y revise el aviso de privacidad", + "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": + "Al seleccionar \"Acepto\" a continuación, he revisado y acepto los Términos de uso y reconozco el Aviso de privacidad. Tengo al menos 18 años.", + "I Agree": "Estoy de acuerdo", + "First name": "Nombre de pila", + "Enter your first name": "Ponga su primer nombre", + "Please enter your first name.": + "Por favor, introduzca su nombre de pila.", + "Last name": "Apellido", + "Enter your last name": "Introduce tu apellido", + "Please enter your last name.": "Por favor ingrese su apellido.", + "City": "Ciudad", + "Please enter your City.": "Por favor ingresa tu ciudad.", + "Male": "Masculino", + "Female": "Femenino", + "Verify Email": "Verificar correo electrónico", + "We sent 5 digit to your Email provided": + "Enviamos 5 dígitos a su correo electrónico proporcionado", + "5 digit": "5 dígitos", + "Send Verification Code": "Envíe el código de verificación", + "Your Ride Duration is": "La duración de su viaje es", + "You will be thier in": "Estarás ahí en", + "You trip distance is": "La distancia de tu viaje es", + "Fee is": "La tarifa es", + "From :": "De :", + "To :": "A :", + "Add Promo": "Agregar promoción", + "Confirm Selection": "Confirmar selección", + "distance is": "la distancia es", + "duration is": "la duración es", + "I don't need a ride anymore": "Ya no necesito que me lleven", + "I was just trying the application": "Estaba probando la aplicación.", + "No driver accepted my request": + "Ningún conductor aceptó mi solicitud.", + "I added the wrong pick-up/drop-off location": + "Agregué el lugar de recogida/devolución incorrecto", + "I don't have a reason": "no tengo una razon", + "Other": "Otro", + "Can we know why you want to cancel Ride ?": + "¿Podemos saber por qué desea cancelar Ride?", + "Cancel Ride": "Cancelar viaje", + "Add Payment Method": "Añadir método de pago", + "Your Wallet balance is": "Tu saldo de Wallet es", + "Ride Wallet": "Cartera de paseo", + "Payment Method": "Método de pago", + "Type here Place": "Escriba aquí Lugar", + "Are You sure to ride to": "¿Estás seguro de viajar hasta", + "Confirm": "Confirmar", + "Back": "Atrás", + "You are Delete": "eres eliminar", + "Deleted": "Eliminado", + "You Dont Have Any places yet !": "¡Aún no tienes lugares!", + "Favorite Places": "Lugares favoritos", + "From : Current Location": "Desde: Ubicación actual", + "Where to": "A donde", + "Notifications": "Notificaciones", + "Profile": "Perfil", + "Home": "Hogar", + "My Cared": "mi cuidado", + "Add Card": "Agregar tarjeta", + "Add Credit Card": "Agregar tarjeta de crédito", + "Please enter the cardholder name": + "Por favor ingrese el nombre del titular de la tarjeta", + "Please enter the expiry date": + "Por favor ingrese la fecha de vencimiento", + "Please enter the CVV code": "Por favor introduce el código CVV", + "Go To Favorite Places": "Ir a lugares favoritos", + "Go to this Target": "Ir a este objetivo", + "My Profile": "Mi perfil", + "Sign Out": "Desconectar", + "Home Page": "Página de inicio", + "Are you want to go to this site": "¿Quieres ir a este sitio?", + "MyLocation": "Mi ubicacion", + "my location": "mi ubicacion", + "Target": "Objetivo", + "Update": "Actualizar", + "You Should choose rate figure": "Deberías elegir la cifra de tarifa", + "Login Captin": "Iniciar sesión Capitán", + "Register Captin": "Registrar capitán", + "Send Verfication Code": "Enviar código de verificación", + "KM": "km", + "End Ride": "Fin del viaje", + "Minute": "Minuto", + "Go to passenger Location now": + "Ir a la ubicación del pasajero ahora", + "Duration of the Ride is": "La duración del viaje es", + "Distance of the Ride is": "La distancia del viaje es", + "Name of the Passenger is": "El nombre del pasajero es", + "Hello this is Captain": "Hola este es el capitán", + "Start the Ride": "Comience el viaje", + "Please Wait If passenger want To Cancel!": + "¡Espere si el pasajero desea cancelar!", + "Total Duration:": "Duración total:", + "Active Duration:": "Duración activa:", + "Waiting for Captin ...": "Esperando al Capitán...", + "Age is": "La edad es", + "Rating is": "La calificación es", + "to arrive you.": "para llegarte.", + "Order History": "Historial de pedidos", + "My Wallet": "Mi billetera", + "Tariff": "Arancel", + "Settings": "Ajustes", + "Feed Back": "Comentario", + "Promos": "Promociones", + "Please enter a valid 16-digit card number": + "Por favor ingrese un número de tarjeta válido de 16 dígitos", + "Add Phone": "Añadir teléfono", + "Please enter a phone number": + "Por favor, introduzca un número de teléfono", + "You dont Add Emergency Phone Yet!": + "¡Aún no agregas un teléfono de emergencia!", + "You will arrive to your destination after": + "Llegarás a tu destino después", + "You can cancel Ride now": "Puedes cancelar el viaje ahora", + "You Can cancel Ride After Captain did not come in the time": + "Puedes cancelar el viaje después de que el capitán no llegue a tiempo.", + "If you in Car Now. Press Start The Ride": + "Si estás en Car Now. Presione Iniciar el viaje", + "You Dont Have Any amount in": "No tienes ninguna cantidad en", + "Wallet!": "¡Billetera!", + "You Have": "Tienes", + "Save Credit Card": "Guardar tarjeta de crédito", + "Show Promos": "Mostrar promociones", + "10 and get 4% discount": "10 y consigue un 4% de descuento", + "20 and get 6% discount": "20 y consigue un 6% de descuento", + "40 and get 8% discount": "40 y consigue un 8% de descuento", + "100 and get 11% discount": "100 y obtén 11% de descuento", + "Pay with Your PayPal": "Paga con tu PayPal", + "You will choose one of above !": "¡Elegirás uno de los anteriores!", + "Cancel": "Cancelar", + "Delete My Account": "Borrar mi cuenta", + "Edit Profile": "Editar perfil", + "Name": "Nombre", + "Update Gender": "Actualizar género", + "Education": "Educación", + "Update Education": "Actualizar la educación", + "Employment Type": "Tipo de empleo", + "SOS Phone": "Teléfono SOS", + "High School Diploma": "Diploma de escuela secundaria", + "Associate Degree": "Grado asociado", + "Bachelor's Degree": "Licenciatura", + "Master's Degree": "Maestría", + "Doctoral Degree": "Doctorado", + "Promos For today": "Promociones para hoy", + "Copy this Promo to use it in your Ride!": + "¡Copia esta promoción para usarla en tu viaje!", + "To change some Settings": "Para cambiar algunas configuraciones", + "To change Language the App": + "Para cambiar el idioma de la aplicación", + "Order Request Page": "Página de solicitud de pedido", + "Rouats of Trip": "Rutas de viaje", + "Passenger Name is": "El nombre del pasajero es", + "Total From Passenger is": "El total del pasajero es", + "Duration To Passenger is": "La duración hasta el pasajero es", + "Distance To Passenger is": "La distancia al pasajero es", + "Total For You is": "Total para ti es", + "Distance is": "La distancia es", + "KM": "km", + "Duration of Trip is": "La duración del viaje es", + "Minutes": "Minutos", + "Apply Order": "Aplicar orden", + "Refuse Order": "Rechazar orden", + "Rate Captain": "Calificar Capitán", + "Enter your Note": "Ingrese su nota", + "Type something...": "Escribe algo...", + "Submit rating": "Enviar calificación", + "Rate Passenger": "Tarifa Pasajero", + "Ride Summary": "Resumen del viaje", + "welcome_message": "mensaje de bienvenida", + "app_description": "descripción_aplicación", + "get_to_destination": "llegar_al_destino", + "get_a_ride": "un aventón", + "safe_and_comfortable": "seguro_y_cómodo", + "committed_to_safety": "comprometido_con_la_seguridad", + "Driver Applied the Ride for You": + "El conductor solicitó el viaje por usted", + "Show latest promo": "Mostrar la última promoción", + "Cancel Trip": "Cancelar viaje", + "Passenger Cancel Trip": "Pasajero cancelar viaje", + "Please stay on the picked point.": + "Por favor permanezca en el punto elegido.", + "Trip is Begin": "El viaje ha comenzado", + "Hi ,I will go now": "hola voy a ir ahora", + "Passenger come to you": "Pasajero ven a ti", + "Hi ,I Arrive your site": "Hola, llego a tu sitio.", + "Driver Finish Trip": "Conductor finaliza el viaje", + "you will pay to Driver": "le pagarás al conductor", + "Driver Cancel Your Trip": "Conductor cancela su viaje", + "you will pay to Driver you will be pay the cost of driver time look to your SEFER Wallet": + "Pagarás al conductor Pagarás el coste del tiempo del conductor mira tu Cartera SEFER", + "I will go now": "iré ahora", + "You Have Tips": "Tienes consejos", + "tips": "consejos", + "Total is": "El total es", + "الْمَجْمُوع هُوَ": "الْمَجْمُوع هُوَ", + "No,I want": "No yo quiero", + "Your fee is": "Tu tarifa es", + "Do you want to pay Tips for this Driver": + "¿Quieres pagar propinas por este conductor?", + "Tip is": "El consejo es", + "Tip is": "El consejo es", + "Camera Access Denied.": "Acceso a la cámara denegado.", + "Open Settings": "Configuración abierta", + "GPS Required Allow !.": "GPS requerido ¡Permitir!.", + "Your Account is Deleted": "Su cuenta está eliminada", + "Are you sure to delete your account?": + "¿Estás seguro de eliminar tu cuenta?", + "Your data will be erased after 2 weeks": + "Tus datos se borrarán después de 2 semanas.", + "And you will can't return to use app after 1 month": + "Y no podrás volver a usar la aplicación después de 1 mes.", + "وَلَن تَسْتَطِيع اسْتِخْدَام التَّطْبِيق مَرَّة أُخْرَى بَعْد شَهْر": + "وَلَن تَسْتَطِيع اسْتِخْدَام التَّطْبِيق مَرَّة أُخْرَى بَعْد شَهْر", + "Enter Your First Name": "Ponga su primer nombre", + "Are you Sure to LogOut?": "¿Está seguro de cerrar sesión?", + "Email Wrong": "Correo electrónico incorrecto", + "Email you inserted is Wrong.": + "El correo electrónico que insertó es incorrecto.", + "You have finished all times": "Has terminado todos los tiempos", + "if you want help you can email us here": + "si quieres ayuda puedes enviarnos un correo electrónico aquí", + "Thanks": "Gracias", + "Email Us": "Envíanos un correo electrónico", + "I cant register in your app in face detection": + "No puedo registrarme en tu aplicación en detección de rostros", + "Hi": "Hola", + "No face detected": "No se detectó ninguna cara", + "Image detecting result is": + "El resultado de la detección de imágenes es", + "from 3 times Take Attention": "desde 3 veces Toma Atención", + "Be sure for take accurate images please": + "Asegúrese de tomar imágenes precisas, por favor.", + "You have": "Tienes", + "لَدَيْك": "لَدَيْك", + "image verified": "imagen verificada", + "Next": "Próximo", + "There is no help Question here": "No hay ayuda Pregunta aquí", + "Call End": "Fin de llamada", + "You dont have Points": "No tienes puntos", + "You Are Stopped For this Day !": "¡Estás detenido por este día!", + "You must be charge your Account": "Debes cargar tu cuenta", + "You Refused 3 Rides this Day that is the reason": + "Rechazaste 3 viajes este día, esa es la razón", + "See you Tomorrow!": "¡Nos vemos mañana!", + "لِقَائِنَا غَدًا!": "¡لِقَائِنَا غَدًا!", + "Recharge my Account": "Recargar mi cuenta", + "Ok , See you Tomorrow": "OK, te veo mañana", + "You are Stopped": "estas detenido", + "Connected": "Conectado", + "Not Connected": "No conectado", + "Your are far from passenger location": + "Estás lejos de la ubicación del pasajero.", + "go to your passenger location before": + "dirígete a tu ubicación de pasajero antes", + "Passenger cancel trip": "Pasajero cancela viaje", + "يُلْغِي الرَّاكِب الرِّحْلَة": "يُلْغِي الرَّاكِب الرِّحْلَة", + "You will get cost of your work for this trip": + "Recibirás el costo de tu trabajo para este viaje.", + "in your wallet": "en tu billetera", + "you gain": "tu ganas", + "Order Cancelled": "Orden cancelada", + "Order Cancelled by Passenger": "Pedido cancelado por pasajero", + "Success": "Éxito", + "Feedback data saved successfully": + "Los datos de los comentarios se guardaron correctamente", + "No Promo for today .": "No hay promoción por hoy.", + "Select your destination": "Selecciona tu destino", + "Search for your Start point": "Busca tu punto de partida", + "Search for waypoint": "Buscar punto de referencia", + "Current Location": "Ubicación actual", + "Add Location 1": "Agregar ubicación 1", + "You must Verify email !.": + "¡Debes verificar el correo electrónico!.", + "Cropper": "Cultivador", + "Saved Sucssefully": "Guardado con éxito", + "Select Date": "Seleccione fecha", + "Birth Date": "Fecha de nacimiento", + "Ok": "De acuerdo", + "the 500 points equal 30 JOD": "los 500 puntos equivalen a 30 JOD", + "the 500 points equal 30 JOD for you": + "Los 500 puntos equivalen a 30 JOD para ti.", + "So go and gain your money": "Así que ve y gana tu dinero.", + "فَاسْتَحِقَّ فُلُوسَك وَاكْسِب النِّقَاط": + "فَاسْتَحِقَّ فُلُوسَك وَاكْسِب النِّقَاط", + "token updated": "token actualizado", + "Add Location 2": "Agregar ubicación 2", + "Add Location 3": "Agregar ubicación 3", + "Add Location 4": "Agregar ubicación 4", + "Waiting for your location": "Esperando tu ubicación", + "Search for your destination": "Busca tu destino", + "Hi! This is": "¡Hola! Esto es", + "I am using": "estoy usando", + "to ride with": "montar con", + "as the driver.": "como conductor.", + "is driving a": "está conduciendo un", + "with license plate": "con matrícula", + "I am currently located at": "Actualmente estoy ubicado en", + "Please go to Car now": "Por favor ve al coche ahora", + "If you need to reach me, please contact the driver directly at": + "Si necesita comunicarse conmigo, comuníquese directamente con el conductor al", + "No Car or Driver Found in your area.": + "No se encontró ningún automóvil ni conductor en su área.", + "Please Try anther time": "Por favor intenta otra vez", + "There no Driver Aplly your order sorry for that": + "No hay ningún controlador que aplique su pedido. Lo siento.", + "Trip Cancelled": "Viaje cancelado", + "The Driver Will be in your location soon .": + "El conductor estará en su ubicación pronto.", + "The distance less than 500 meter.": + "La distancia es inferior a 500 metros.", + "Promo End !": "¡Fin de la promoción!", + "There is no notification yet": "Aún no hay notificación", + "Use Touch ID or Face ID to confirm payment": + "Utilice Touch ID o Face ID para confirmar el pago", + "Contact us for any questions on your order.": + "Contáctenos para cualquier pregunta sobre su pedido.", + "Pyament Cancelled .": "Pago cancelado.", + "type here": "escriba aquí", + "Scan Driver License": "Escanear licencia de conducir", + "Please put your licence in these border": + "Por favor coloque su licencia en estos bordes.", + "Camera not initialized yet": "La cámara aún no se ha inicializado", + "Take Image": "Tomar imagen", + "AI Page": "Página de IA", + "Take Picture Of ID Card": + "Tome una fotografía de la tarjeta de identificación", + "Take Picture Of Driver License Card": + "Tome una fotografía de la tarjeta de licencia de conducir", + "We are process picture please wait": + "Somos imagen de proceso por favor espere", + "There is no data yet.": "Aún no hay datos.", + "Name :": "Nombre :", + "Drivers License Class:": "Clase de licencia de conducir:", + "Document Number:": "Número del Documento:", + "Address:": "DIRECCIÓN:", + "Height:": "Altura:", + "Expiry Date:": "Fecha de caducidad:", + "Date of Birth:": "Fecha de nacimiento:", + "You can\"t continue with us .": "No puedes continuar con nosotros.", + "You should renew Driver license": + "Deberías renovar la licencia de conducir.", + "Detect Your Face": "Detecta tu cara", + "Go to next step": "Ir al siguiente paso", + "scan Car License.": "escanear licencia de automóvil.", + "aاسْتِخْرَاج رُخْصَة السَّيَّارَة.": + "aاسْتِخْرَاج رُخْصَة السَّيَّارَة.", + "Name in arabic": "Nombre en árabe", + "Drivers License Class": "Clase de licencia de conducir", + "Date of Birth": "Fecha de nacimiento", + "Age": "Edad", + "Lets check Car license": "Comprobemos la licencia del coche.", + "Car Kind": "Tipo de coche", + "Car Plate": "Matrícula del coche", + "Lets check License Back Face": + "Comprobemos la cara posterior de la licencia", + "Car License Card": "Tarjeta de licencia de coche", + "No image selected yet": "Ninguna imagen seleccionada todavía", + "Made :": "Hecho :", + "model :": "modelo :", + "VIN :": "Número de bastidor:", + "year :": "año :", + "ُExpire Date": "fecha de caducidad", + "Login Driver": "Iniciar sesión Conductor", + "Password must br at least 6 character.": + "La contraseña debe tener al menos 6 caracteres.", + "if you don\"t have account": "si no tienes cuenta", + "Here recorded trips audio": "Aquí se graban los viajes en audio.", + "Register as Driver": "Regístrate como conductor", + "Privacy Notice": "Aviso de Privacidad", + "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the": + "Al seleccionar \"Acepto\" a continuación, he revisado y acepto los Términos de uso y reconozco la", + ". I am at least 18 years of age.": ". Tengo al menos 18 años.", + "Log Out Page": "Página de cierre de sesión", + "Log Off": "Desconectarse", + "Register Driver": "Registrar Conductor", + "Verify Email For Driver": + "Verificar correo electrónico para el conductor", + "Admin DashBoard": "Panel de administración", + "Your name": "Su nombre", + "your ride is applied": "tu viaje está aplicado", + "Your password": "Tu contraseña", + "H and": "Mano", + "LE": "LE", + "JOD": "JOD", + "m": "metro", + "We search nearst Driver to you": + "Buscamos el conductor más cercano a usted.", + "please wait till driver accept your order": + "Espere hasta que el conductor acepte su pedido.", + "No accepted orders? Try raising your trip fee to attract riders.": + "¿No se aceptan pedidos? Intente aumentar la tarifa de su viaje para atraer pasajeros.", + "You should select one": "Deberías seleccionar uno", + "The driver accept your order for": + "El conductor acepta su pedido por", + "Increase Fee": "Aumentar la tarifa", + "No, thanks": "No, gracias", + "The driver on your way": "El conductor en camino", + "Total price from": "Precio total desde", + "Order Details Speed": "Detalles del pedido Velocidad", + "Order Applied": "Orden aplicada", + "accepted your order": "aceptó su pedido", + "We regret to inform you that another driver has accepted this order.": + "Lamentamos informarle que otro conductor ha aceptado este pedido.", + "Selected file:": "Archivo seleccionado:", + "Your trip cost is": "El costo de su viaje es", + "this will delete all files from your device": + "esto eliminará todos los archivos de su dispositivo", + "you have a negative balance of": "tienes un saldo negativo de", + "in your": "en tus", + "Exclusive offers and discounts always with the Sefer app": + "Ofertas y descuentos exclusivos siempre con la app Sefer", + "Please go to Car Driver": "Por favor vaya a Conductor de automóvil", + "wallet due to a previous trip.": + "billetera debido a un viaje anterior.", + "Submit Question": "Enviar pregunta", + "Please enter your Question.": "Por favor ingrese su pregunta.", + "Help Details": "Detalles de ayuda", + "No trip yet found": "Aún no se ha encontrado ningún viaje", + "No Response yet.": "Ninguna respuesta todavia.", + "You Earn today is": "Lo que ganas hoy es", + "You Have in": "Tienes en", + "Total points is": "Los puntos totales son", + "Total Connection Duration:": "Duración total de la conexión:", + "H and": "Mano", + "Passenger name :": "Nombre del pasajero :", + "Cost Of Trip IS": "El costo del viaje es", + "Arrival time": "Hora de llegada", + "arrival time to reach your point": + "Hora de llegada para llegar a tu punto.", + "For Speed and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": + "Para viajes de Velocidad y Entrega, el precio se calcula dinámicamente. Para viajes Comfort, el precio se basa en tiempo y distancia.", + "Hello this is Driver": "Hola, este es el conductor.", + "Is the Passenger in your Car ?": + "¿Está el pasajero en su automóvil?", + "Please wait for the passenger to enter the car before starting the trip.": + "Espere a que el pasajero entre al automóvil antes de iniciar el viaje.", + "No ,still Waiting.": "No, todavía esperando.", + "I arrive you": "te llego", + "I Arrive your site": "Llego a tu sitio", + "You are not in near to passenger location": + "No estás cerca de la ubicación del pasajero.", + "please go to picker location exactly": + "por favor vaya exactamente a la ubicación del selector", + "You Can Cancel Trip And get Cost of Trip From": + "Puede cancelar el viaje y obtener el costo del viaje desde", + "Are you sure to cancel?": "¿Estás seguro de cancelar?", + "Yes": "Sí", + "Insert Emergincy Number": "Insertar número de emergencia", + "Best choice for comfort car and flexible route and stops point": + "La mejor opción para un vehículo cómodo y una ruta y un punto de parada flexibles", + "Insert": "Insertar", + "This is for delivery or a motorcycle.": + "Esto es para entrega o una motocicleta.", + "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": + "Este viaje va directamente desde su punto de partida a su destino por un precio fijo. El conductor debe seguir la ruta planificada.", + "You can decline a request without any cost": + "Puedes rechazar una solicitud sin ningún coste", + "Perfect for adventure seekers who want to experience something new and exciting": + "Perfecto para buscadores de aventuras que quieren experimentar algo nuevo y emocionante.", + "My current location is:": "Mi ubicación actual es:", + "and I have a trip on": "y tengo un viaje en", + "App with Passenger": "Aplicación con Pasajero", + "مع الراكب": "مع الراكب", + "You will be pay the cost to driver or we will get it from you on next trip": + "Pagará el costo al conductor o se lo entregaremos en el próximo viaje.", + "Trip has Steps": "El viaje tiene pasos", + "Distance from Passenger to destination is": + "La distancia desde el pasajero hasta el destino es", + "price is": "el precio es", + "This ride type does not allow changes to the destination or additional stops": + "Este tipo de viaje no permite cambios de destino ni paradas adicionales.", + "This price may be changed": "Este precio puede cambiar", + "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": + "¡Sin tarjeta SIM, no hay problema! Llame a su conductor directamente a través de nuestra aplicación. Utilizamos tecnología avanzada para garantizar su privacidad.", + "This ride type allows changes, but the price may increase": + "Este tipo de viaje permite cambios, pero el precio puede aumentar.", + "message From passenger": "mensaje del pasajero", + "Select one message": "Seleccione un mensaje", + "My location is correct. You can search for me using the navigation app": + "Mi ubicación es correcta. Puedes buscarme usando la aplicación de navegación.", + "I'm waiting for you": "te estoy esperando", + "Hello, I'm at the agreed-upon location": + "Hola estoy en el lugar acordado.", + "We noticed the speed is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": + "Notamos que la velocidad supera los 100 km/h. Por favor, reduzca la velocidad por su seguridad. Si no te sientes seguro, puedes compartir los detalles de tu viaje con un contacto o llamar a la policía usando el botón rojo SOS.", + "Warning: Speeding detected!": + "Advertencia: ¡Se ha detectado exceso de velocidad!", + "Please help! Contact me as soon as possible.": + "¡Por favor ayuda! Contáctame lo antes posible.", + "Share Trip Details": "Compartir detalles del viaje", + "Car Plate is": "La placa del coche es", + "the 300 points equal 300 L.E for you": + "Los 300 puntos equivalen a 300 L.E para ti.", + "So go and gain your money": "Así que ve y gana tu dinero.", + "the 300 points equal 300 L.E": "los 300 puntos equivalen a 300 L.E.", + "The payment was not approved. Please try again.": + "El pago no fue aprobado. Inténtalo de nuevo.", + "Payment Failed": "Pago fallido", + "Error": "Error", + "An error occurred during the payment process.": + "Se produjo un error durante el proceso de pago.", + "The payment was approved.": "El pago fue aprobado.", + "Payment Successful": "Pago exitoso", + "No ride found yet": "Aún no se ha encontrado ningún viaje", + "Accept Order": "Aceptar pedido", + "reject your order.": "rechazar su pedido.", + "Bottom Bar Example": "Ejemplo de barra inferior", + "Driver phone": "Teléfono del conductor", + "Statistics": "Estadísticas", + "Origin": "Origen", + "Destination": "Destino", + "Driver Name": "Nombre del conductor", + "Driver Car Plate": "Placa de coche del conductor", + "Available for rides": "Disponible para paseos", + "Scan Id": "Identificación de escaneo", + "Camera not initilaized yet": "Cámara aún no inicializada", + "Scan ID MklGoogle": "Escanear ID MklGoogle", + "Language": "Idioma", + "Jordan": "Jordán", + "USA": "EE.UU", + "Egypt": "Egipto", + "Turkey": "Pavo", + "Saudi Arabia": "Arabia Saudita", + "Qatar": "Katar", + "Bahrain": "Bahréin", + "Kuwait": "Kuwait", + "But you have a negative salary of": + "Pero tienes un salario negativo de", + "Promo Code": "Código promocional", + "Your trip distance is": "La distancia de tu viaje es", + "Enter promo code": "Introduce el código de promoción", + "You have promo!": "¡Tienes promoción!", + "Cost Duration": "Duración del costo", + "Duration is": "La duración es", + "Leave": "Dejar", + "Join": "Unirse", + "You Should be select reason.": "Deberías seleccionar el motivo.", + "\$": "\$", + "Waiting for Driver ...": "Esperando al conductor...", + "Latest Recent Trip": "Último viaje reciente", + "from your list": "de tu lista", + "Do you want to change Work location": + "¿Quieres cambiar la ubicación de trabajo?", + "Do you want to change Home location": + "¿Quieres cambiar la ubicación de casa?", + "We Are Sorry That we dont have cars in your Location!": + "¡Lamentamos no tener automóviles en su ubicación!", + "Choose from Map": "Elige del mapa", + "Pick your ride location on the map - Tap to confirm": + "Elija la ubicación de su viaje en el mapa: toque para confirmar", + "To Work": "Trabajar", + "Are you want to go this site": "¿Quieres ir a este sitio?", + "Closest & Cheapest": "Más cercano y más barato", + "Work Saved": "Trabajo guardado", + "Sefer is the ride-hailing app that is safe, reliable, and accessible.": + "Sefer es la aplicación de transporte segura, confiable y accesible.", + "With Sefer, you can get a ride to your destination in minutes.": + "Con Sefer, puedes conseguir transporte a tu destino en minutos.", + "Sefer is committed to safety, and all of our captains are carefully screened and background checked.": + "Sefer está comprometido con la seguridad y todos nuestros capitanes son cuidadosamente seleccionados y verificados sus antecedentes.", + "To Home": "A casa", + "Home Saved": "Inicio guardado", + "Destination selected": "Destino seleccionado", + "Now select start pick": "Ahora seleccione iniciar selección", + "Pick from map": "Elegir del mapa", + "Click here point": "Haga clic aquí punto", + "No Car in your site. Sorry!": + "No hay coches en su sitio. ¡Lo siento!", + "Nearest Car for you about": "Coche más cercano para ti", + "N/A": "N / A", + "From :": "De :", + "Get Details of Trip": "Obtener detalles del viaje", + "If you want add stop click here": + "Si quieres añadir stop haz clic aquí", + "Driver": "Conductor", + "Where you want go": "Donde tu quieres ir", + "My Card": "Mi tarjeta", + "Start Record": "Iniciar registro", + "Wallet": "Billetera", + "History of Trip": "Historia del viaje", + "Helping Center": "Centro de ayuda", + "Record saved": "Registro guardado", + "Trips recorded": "Viajes registrados", + "Select Your Country": "Selecciona tu pais", + "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": + "Para asegurarse de recibir la información más precisa para su ubicación, seleccione su país a continuación. Esto ayudará a adaptar la experiencia y el contenido de la aplicación a su país.", + "Are you sure to delete recorded files": + "¿Está seguro de eliminar los archivos grabados?", + "Select recorded trip": "Seleccionar viaje grabado", + "Card Number": "Número de tarjeta", + "Hi, Where to": "Hola, donde", + "Pick your destination from Map": "Elige tu destino en el mapa", + "Add Stops": "Agregar paradas", + "Get Direction": "Obtener dirección", + "Add Location": "Agregar Direccion", + "Switch Rider": "Cambiar de jinete", + "You will arrive to your destination after timer end.": + "Llegará a su destino después de que finalice el cronómetro.", + "You can cancel trip": "Puedes cancelar el viaje.", + "The driver waitting you in picked location .": + "El conductor lo espera en el lugar elegido.", + "Pay with Your": "Paga con tu", + "Pay with Credit Card": "Paga con tarjeta de crédito", + "Payment History": "historial de pagos", + "Show Promos to Charge": "Mostrar promociones para cobrar", + "Point": "Punto", + "Driver Wallet": "Cartera del conductor", + "Total Points is": "El total de puntos es", + "Total Budget from trips is": "El presupuesto total de los viajes es", + "Total Amount:": "Cantidad total:", + "Total Budget from trips by": "Presupuesto total de viajes de", + "Credit card is": "La tarjeta de crédito es", + "بطاقة الائتمان هي": "بطاقة الائتمان هي", + "This amount for all trip I get from Passengers": + "Esta cantidad para todos los viajes la recibo de los Pasajeros", + "Pay from my budget": "Pagar de mi presupuesto", + "This amount for all trip I get from Passengers and Collected For me in": + "Esta cantidad para todos los viajes la recibo de los Pasajeros y la Cobro para mí en", + "You can buy points from your budget": + "Puedes comprar puntos desde tu presupuesto.", + "insert amount": "insertar cantidad", + "You can buy Points to let you online": + "Puedes comprar Puntos para permitirte en línea", + "by this list below": "por esta lista a continuación", + "من خلال القائمة أدناه": "من خلال القائمة أدناه", + "Create Wallet to receive your money": + "Crea Wallet para recibir tu dinero", + "Enter your feedback here": "Ingrese sus comentarios aquí", + "Please enter your feedback.": "Por favor ingrese sus comentarios.", + "Feedback": "Comentario", + "Submit": "Entregar", + "Click here to Show it in Map": + "Haga clic aquí para mostrarlo en el mapa", + "Canceled": "Cancelado", + "Type your Email": "Escribe tu correo electrónico", + "No I want": "No yo quiero", + "Email is": "El correo electrónico es", + "Phone Number is": "El número de teléfono es", + "Date of Birth is": "La fecha de nacimiento es", + "Sex is": "El sexo es", + "Car Details": "Detalles del auto", + "VIN is": "El número de bastidor es", + "Color is": "Color es", + "Make is": "hacer es", + "Model is": "El modelo es", + "Year is": "El año es", + "Expiration Date": "Fecha de caducidad", + "Edit Your data": "Edita tus datos", + "write vin for your car": "escribe vin para tu auto", + "VIN": "Número de bastidor", + "write Color for your car": "escribe Color para tu auto", + "write Make for your car": "escribe Marca para tu auto", + "write Model for your car": "escribe Modelo para tu auto", + "write Year for your car": "Escribe el año de tu coche.", + "write Expiration Date for your car": + "Escribe la fecha de caducidad de tu coche.", + "Tariffs": "Tarifas", + "Minimum fare": "Tarifa mínima", + "Maximum fare": "Tarifa máxima", + "Flag-down fee": "Tarifa por bajar la bandera", + "Including Tax": "Incluyendo impuesto", + "BookingFee": "Tarifa de reserva", + "Morning": "Mañana", + "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": + "de 07:30 a 10:30 (jueves, viernes, sábado, lunes)", + "Evening": "Noche", + "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": + "de 12:00 a 15:00 (jueves, viernes, sábado, lunes)", + "Night": "Noche", + "You have in account": "tienes en cuenta", + "Select Country": "Seleccionar país", + "Ride Today :": "Viaja hoy:", + "After this period": "Después de este período", + "You can\"t cancel!": "¡No puedes cancelar!", + "لا تستطيع الغاء الرحله": "لا تستطيع الغاء الرحله", + "from 23:59 till 05:30": "de 23:59 a 05:30", + "Rate Driver": "Calificar al conductor", + "Total Cost is": "El costo total es", + "Write note": "Toma nota", + "Time to arrive": "hora de llegar", + "Ride Summaries": "Resúmenes de viajes", + "Total Cost": "Coste total", + "Average of Hours of": "Promedio de Horas de", + "is ON for this month": "está activado para este mes", + "Days": "Días", + "Total Hours on month": "Horas totales en el mes", + "Counts of Hours on days": "Conteos de horas en días", + "OrderId": "Solicitar ID", + "created time": "tiempo creado", + "Speed Over": "Velocidad sobre", + "I will slow down": "voy a reducir la velocidad", + "Map Passenger": "Mapa Pasajero", + "Be Slowly": "ser despacio", + "If you want to make Google Map App run directly when you apply order": + "Si desea que la aplicación Google Map se ejecute directamente cuando aplica el pedido", + "You can change the language of the app": + "Puedes cambiar el idioma de la aplicación.", + "Your Budget less than needed": "Tu Presupuesto menor al necesario", + "You can change the Country to get all features": + "Puede cambiar el país para obtener todas las funciones.", + "Change Country": "Cambiar pais" + }, + "fa": { + "Sign In by Apple": "با اپل وارد شوید", + "Sign In by Google": "با گوگل وارد شوید", + "How do I request a ride?": "چگونه درخواست سفر کنم؟", + "Step-by-step instructions on how to request a ride through the Sefer app.": + "دستورالعمل های گام به گام نحوه درخواست سفر از طریق برنامه Sefer.", + "What types of vehicles are available?": + "چه نوع وسایل نقلیه ای موجود است؟", + "Sefer offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": + "Sefer انواع مختلفی از گزینه های خودرو را مطابق با نیازهای شما ارائه می دهد، از جمله اقتصادی، راحتی و لوکس. گزینه ای را انتخاب کنید که با بودجه و تعداد مسافران شما مطابقت دارد.", + "How can I pay for my ride?": + "چگونه می توانم هزینه سواری خود را پرداخت کنم؟", + "Sefer offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": + "Sefer چندین روش پرداخت را برای راحتی شما ارائه می دهد. در حین تأیید سواری، بین پرداخت نقدی یا پرداخت کارت اعتباری/دبیت انتخاب کنید.", + "Can I cancel my ride?": "آیا می توانم سواری خود را لغو کنم؟", + "Yes, you can cancel your ride under certain conditions (e.g., before driver is assigned). See the Sefer cancellation policy for details.": + "بله، می توانید تحت شرایط خاصی (به عنوان مثال، قبل از تعیین راننده) سواری خود را لغو کنید. برای جزئیات بیشتر به سیاست لغو Sefer مراجعه کنید.", + "Driver Registration & Requirements": "ثبت نام راننده و الزامات", + "How can I register as a driver?": + "چگونه می توانم به عنوان راننده ثبت نام کنم؟", + "What are the requirements to become a driver?": + "برای راننده شدن چه شرایطی لازم است؟", + "Visit our website or contact Sefer support for information on driver registration and requirements.": + "برای کسب اطلاعات در مورد ثبت نام راننده و الزامات، از وب سایت ما دیدن کنید یا با پشتیبانی Sefer تماس بگیرید.", + "How do I communicate with the other party (passenger/driver)?": + "چگونه با طرف مقابل (مسافر/راننده) ارتباط برقرار کنم؟", + "Sefer provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": + "Sefer عملکرد چت درون برنامه ای را ارائه می دهد تا به شما امکان می دهد در طول سواری با راننده یا مسافر خود ارتباط برقرار کنید.", + "What safety measures does Sefer offer?": + "Sefer چه اقدامات ایمنی ارائه می دهد؟", + "Sefer prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": + "Sefer امنیت شما را در اولویت قرار می دهد. ما ویژگی‌هایی مانند تأیید راننده، ردیابی سفر درون برنامه‌ای و گزینه‌های تماس اضطراری را ارائه می‌کنیم.", + "Frequently Questions": "سوالات متداول", + "User does not exist.": "کاربر وجود ندارد.", + "We need your phone number to contact you and to help you.": + "برای تماس با شما و کمک به شما به شماره تلفن شما نیاز داریم.", + "You will recieve code in sms message": + "کد را در پیامک دریافت خواهید کرد", + "Please enter": "لطفا وارد شوید", + "We need your phone number to contact you and to help you receive orders.": + "برای تماس با شما و کمک به دریافت سفارشات به شماره تلفن شما نیاز داریم.", + "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": + "نام کامل در سوابق کیفری شما با نام گواهینامه رانندگی شما مطابقت ندارد. لطفا بررسی کنید و مدارک صحیح را ارائه دهید.", + "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": + "شماره ملی گواهینامه رانندگی شما با شماره مندرج در مدرک شناسایی شما مطابقت ندارد. لطفا بررسی کنید و مدارک صحیح را ارائه دهید.", + "Capture an Image of Your Criminal Record": + "تصویری از سابقه کیفری خود بگیرید", + "IssueDate": "تاریخ صدور", + "Capture an Image of Your car license front": + "تصویری از جلوی گواهینامه خودروی خود بگیرید", + "Capture an Image of Your ID Document front": + "تصویری از جلوی سند شناسایی خود بگیرید", + "NationalID": "کد ملی", + "FullName": "نام و نام خانوادگی", + "InspectionResult": "نتیجه بازرسی", + "Criminal Record": "سابقه کیفری", + "The email or phone number is already registered.": + "ایمیل یا شماره تلفن قبلا ثبت شده است.", + "To become a ride-sharing driver on the Sefer app, you need to upload your driver\"s license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Sefer app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": + "برای تبدیل شدن به یک راننده اشتراکی سواری در برنامه Sefer، باید گواهینامه رانندگی، مدرک شناسایی و سند ثبت نام خودرو خود را آپلود کنید. سیستم هوش مصنوعی ما فوراً صحت آنها را فقط در 2 تا 3 دقیقه بررسی و تأیید می کند. اگر اسناد شما شما می توانید به عنوان راننده در اپلیکیشن Sefer شروع به کار کنید.", + "Documents check": "بررسی اسناد", + "Driver's License": "گواهینامه رانندگی", + "License Type": "نوع مجوز", + "National Number": "شماره ملی", + "Name (Arabic)": "نام (عربی)", + "Name (English)": "نام (انگلیسی)", + "Address": "نشانی", + "Issue Date": "تاریخ صدور", + "Expiry Date": "تاریخ انقضا", + "License Categories": "دسته بندی مجوزها", + "driver_license": "گواهینامه رانندگی", + "Capture an Image of Your Driver License": + "از گواهینامه رانندگی خود عکس بگیرید", + "ID Documents Back": "بازگشت اسناد شناسایی", + "National ID": "کد ملی", + "Occupation": "اشتغال", + "Gender": "جنسیت", + "Religion": "دین", + "Marital Status": "وضعیت تأهل", + "Full Name (Marital)": "نام کامل (تأهل)", + "Expiration Date": "تاریخ انقضا", + "Capture an Image of Your ID Document Back": + "از سند شناسایی خود عکس بگیرید", + "ID Documents Front": "جلوی اسناد شناسایی", + "First Name": "نام کوچک", + "CardID": "شناسه کارت", + "Full Name": "نام و نام خانوادگی", + "Vehicle Details Front": "جزئیات خودرو جلو", + "Plate Number": "شماره پلاک", + "Owner Name": "نام مالک", + "Vehicle Details Back": "جزئیات خودرو برگشت", + "Make": "بسازید", + "Model": "مدل", + "Year": "سال", + "Chassis": "شاسی بلند", + "Color": "رنگ", + "Displacement": "جابه جایی", + "Fuel": "سوخت", + "Tax Expiry Date": "تاریخ انقضای مالیات", + "Inspection Date": "تاریخ بازرسی", + "Capture an Image of Your car license back": + "از گواهینامه خودروی خود عکس بگیرید", + "Capture an Image of Your Driver’s License": + "از گواهینامه رانندگی خود عکس بگیرید", + "Sign in with Google for easier email and name entry": + "برای ورود آسان تر ایمیل و نام، با Google وارد شوید", + "You will choose allow all the time to be ready receive orders": + "شما اجازه می‌دهید همیشه آماده باشد دریافت سفارش‌ها را انتخاب می‌کنید", + "Welcome to Sefer!": "به سیفر خوش آمدید", + "Get to your destination quickly and easily.": + "سریع و راحت به مقصد برسید.", + "Enjoy a safe and comfortable ride.": + "از یک سواری ایمن و راحت لذت ببرید.", + "Choose Language": "زبان را انتخاب کنید", + "Login": "وارد شدن", + "Pay with Wallet": "با کیف پول پرداخت کنید", + "Invalid MPIN": "MPIN نامعتبر است", + "Invalid OTP": "OTP نامعتبر است", + "Enter your email address": "آدرس ایمیل خود را وارد کنید", + "Please enter Your Email.": "لطفا آدرس اییمیل خود را وارد نمایید.", + "Enter your phone number": "شماره تلفن خود را وارد کنید", + "Please enter your phone number.": + "لطفا شماره تلفن خود را وارد کنید.", + "Please enter Your Password.": "لطفا رمز عبور خود را وارد کنید.", + "Submit": "ارسال", + "if you dont have account": "اگر اکانت ندارید", + "Register": "ثبت نام", + "Accept Ride's Terms & Review Privacy Notice": + "شرایط راید را بپذیرید و اعلامیه حریم خصوصی را مرور کنید", + "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": + "با انتخاب «موافقم» در زیر، شرایط استفاده را بررسی کرده و با آن موافقم و اعلامیه حریم خصوصی را تأیید می‌کنم. من حداقل 18 سال سن دارم.", + "I Agree": "موافقم", + "First name": "نام کوچک", + "Enter your first name": "نام خود را وارد نمایید", + "Please enter your first name.": "لطفا نام خود را وارد کنید.", + "Last name": "نام خانوادگی", + "Enter your last name": "نام خانوادگی خود را وارد کنید", + "Please enter your last name.": "لطفا نام خانوادگی خود را وارد کنید.", + "City": "شهر", + "Please enter your City.": "لطفا شهر خود را وارد کنید", + "Male": "نر", + "Female": "زن", + "Verify Email": "تأیید ایمیل", + "We sent 5 digit to your Email provided": + "ما 5 رقمی را به ایمیل شما ارسال کردیم", + "5 digit": "5 رقمی", + "Send Verification Code": "ارسال کد تایید", + "Your Ride Duration is": "مدت زمان سواری شما است", + "You will be thier in": "شما در آن حضور خواهید داشت", + "You trip distance is": "شما مسافت سفر است", + "Fee is": "هزینه است", + "From :": "از جانب :", + "To :": "به :", + "Add Promo": "تبلیغاتی را اضافه کنید", + "Confirm Selection": "تایید انتخاب", + "distance is": "فاصله است", + "duration is": "مدت است", + "I don't need a ride anymore": "من دیگر نیازی به سواری ندارم", + "I was just trying the application": + "من فقط برنامه را امتحان می کردم", + "No driver accepted my request": + "هیچ راننده ای درخواست من را قبول نکرد", + "I added the wrong pick-up/drop-off location": + "من مکان تحویل / تحویل اشتباه را اضافه کردم", + "I don't have a reason": "دلیلی ندارم", + "Other": "دیگر", + "Can we know why you want to cancel Ride ?": + "آیا می‌توانیم بدانیم چرا می‌خواهید راید را لغو کنید؟", + "Cancel Ride": "لغو سواری", + "Add Payment Method": "افزودن روش پرداخت", + "Your Wallet balance is": "موجودی کیف پول شما است", + "Ride Wallet": "سوار کیف پول", + "Payment Method": "روش پرداخت", + "Type here Place": "اینجا را تایپ کنید مکان", + "Are You sure to ride to": "آیا مطمئن هستید که به", + "Confirm": "تایید", + "Back": "بازگشت", + "You are Delete": "شما Delete هستید", + "Deleted": "حذف شده", + "You Dont Have Any places yet !": "شما هنوز جایی ندارید!", + "Favorite Places": "مکان های مورد علاقه", + "From : Current Location": "از: مکان فعلی", + "Where to": "به کجا", + "Notifications": "اطلاعیه", + "Profile": "مشخصات", + "Home": "صفحه اصلی", + "My Cared": "مراقبت من", + "Add Card": "اضافه کردن کارت", + "Add Credit Card": "اضافه کردن کارت اعتباری", + "Please enter the cardholder name": + "لطفا نام دارنده کارت را وارد کنید", + "Please enter the expiry date": "لطفا تاریخ انقضا را وارد کنید", + "Please enter the CVV code": "لطفا کد CVV را وارد کنید", + "Go To Favorite Places": "به مکان های مورد علاقه بروید", + "Go to this Target": "به این هدف بروید", + "My Profile": "پروفایل من", + "Sign Out": "خروج از سیستم", + "Home Page": "صفحه نخست", + "Are you want to go to this site": "آیا می خواهید به این سایت بروید", + "MyLocation": "محل من", + "my location": "محل من", + "Target": "هدف", + "Update": "به روز رسانی", + "You Should choose rate figure": "شما باید رقم نرخ را انتخاب کنید", + "Login Captin": "ورود Captin", + "Register Captin": "ثبت نام Captin", + "Send Verfication Code": "ارسال کد تایید", + "KM": "KM", + "End Ride": "پایان سواری", + "Minute": "دقیقه", + "Go to passenger Location now": "اکنون به مکان مسافر بروید", + "Duration of the Ride is": "مدت زمان سواری است", + "Distance of the Ride is": "فاصله سواری است", + "Name of the Passenger is": "نام مسافر است", + "Hello this is Captain": "سلام این کاپیتان است", + "Start the Ride": "سواری را شروع کنید", + "Please Wait If passenger want To Cancel!": + "لطفا صبر کنید اگر مسافر می خواهد لغو کند!", + "Total Duration:": "کل مدت زمان:", + "Active Duration:": "مدت زمان فعال:", + "Waiting for Captin ...": "در انتظار کاپیتین...", + "Age is": "سن است", + "Rating is": "رتبه بندی است", + "to arrive you.": "برای رسیدن به تو", + "Order History": "تاریخچه سفارش ها", + "My Wallet": "کیف پول من", + "Tariff": "تعرفه", + "Settings": "تنظیمات", + "Feed Back": "بازخورد", + "Promos": "تبلیغات", + "Please enter a valid 16-digit card number": + "لطفاً یک شماره کارت 16 رقمی معتبر وارد کنید", + "Add Phone": "اضافه کردن تلفن", + "Please enter a phone number": "لطفا یک شماره تلفن وارد کنید", + "You dont Add Emergency Phone Yet!": + "شما هنوز تلفن اضطراری را اضافه نکرده اید!", + "You will arrive to your destination after": + "پس از آن به مقصد خود خواهید رسید", + "You can cancel Ride now": "اکنون می‌توانید Ride را لغو کنید", + "You Can cancel Ride After Captain did not come in the time": + "بعد از اینکه کاپیتان به موقع نیامد، می توانید Ride را لغو کنید", + "If you in Car Now. Press Start The Ride": + "اگر اکنون در ماشین هستید. Start The Ride را فشار دهید", + "You Dont Have Any amount in": "شما هیچ مبلغی ندارید", + "Wallet!": "کیف پول!", + "You Have": "شما دارید", + "Save Credit Card": "ذخیره کارت اعتباری", + "Show Promos": "نمایش تبلیغات", + "10 and get 4% discount": "10 و 4 درصد تخفیف بگیرید", + "20 and get 6% discount": "20 و 6 درصد تخفیف بگیرید", + "40 and get 8% discount": "40 و 8 درصد تخفیف بگیرید", + "100 and get 11% discount": "100 و 11 درصد تخفیف بگیرید", + "Pay with Your PayPal": "با پی پال خود پرداخت کنید", + "You will choose one of above !": + "شما یکی از بالا را انتخاب خواهید کرد!", + "Cancel": "لغو کنید", + "Delete My Account": "Delete My Account", + "Edit Profile": "ویرایش نمایه", + "Name": "نام", + "Update Gender": "جنسیت را به روز کنید", + "Education": "تحصیلات", + "Update Education": "آموزش را به روز کنید", + "Employment Type": "نوع اشتغال", + "SOS Phone": "تلفن SOS", + "High School Diploma": "دیپلم دبیرستان", + "Associate Degree": "فوق دیپلم", + "Bachelor's Degree": "مدرک کارشناسی", + "Master's Degree": "مدرک کارشناسی ارشد", + "Doctoral Degree": "مدرک دکترا", + "Promos For today": "تبلیغات برای امروز", + "Copy this Promo to use it in your Ride!": + "این تبلیغات را کپی کنید تا از آن در سواری خود استفاده کنید!", + "To change some Settings": "برای تغییر برخی تنظیمات", + "To change Language the App": "برای تغییر زبان برنامه", + "Order Request Page": "صفحه درخواست سفارش", + "Rouats of Trip": "مسیرهای سفر", + "Passenger Name is": "نام مسافر است", + "Total From Passenger is": "مجموع از مسافر است", + "Duration To Passenger is": "مدت زمان تا مسافر است", + "Distance To Passenger is": "فاصله تا مسافر است", + "Total For You is": "Total For You است", + "Distance is": "فاصله است", + "KM": "KM", + "Duration of Trip is": "مدت سفر است", + "Minutes": "دقایق", + "Apply Order": "درخواست سفارش", + "Refuse Order": "امتناع دستور", + "Rate Captain": "به کاپیتان امتیاز دهید", + "Enter your Note": "یادداشت خود را وارد کنید", + "Type something...": "چیزی تایپ کن...", + "Submit rating": "رتبه بندی را ارسال کنید", + "Rate Passenger": "به مسافر امتیاز دهید", + "Ride Summary": "خلاصه سواری", + "welcome_message": "پیام خوش آمد", + "app_description": "app_description", + "get_to_destination": "رسیدن_به_مقصد", + "get_a_ride": "get_a_ride", + "safe_and_comfortable": "امن_و_راحت", + "committed_to_safety": "تعهد_به_ایمنی", + "Driver Applied the Ride for You": + "راننده سواری را برای شما اعمال کرد", + "Show latest promo": "نمایش آخرین تبلیغات", + "Cancel Trip": "لغو سفر", + "Passenger Cancel Trip": "لغو سفر مسافر", + "Please stay on the picked point.": "لطفا در نقطه انتخاب شده بمانید", + "Trip is Begin": "سفر آغاز شده است", + "Hi ,I will go now": "سلام من الان میرم", + "Passenger come to you": "مسافر به سمت شما می آید", + "Hi ,I Arrive your site": "سلام من به سایت شما رسیدم", + "Driver Finish Trip": "پایان سفر راننده", + "you will pay to Driver": "شما به راننده پرداخت خواهید کرد", + "Driver Cancel Your Trip": "راننده سفر شما را لغو کند", + "you will pay to Driver you will be pay the cost of driver time look to your SEFER Wallet": + "شما به راننده پرداخت خواهید کرد، هزینه نگاه کردن به راننده را به کیف پول SEFER خود پرداخت خواهید کرد", + "I will go now": "من الان میروم", + "You Have Tips": "نکاتی دارید", + "tips": "نکات", + "Total is": "مجموع است", + "الْمَجْمُوع هُوَ": "الْمَجْمُوع هُوَ", + "No,I want": "نه من می خواهم", + "Your fee is": "هزینه شما است", + "Do you want to pay Tips for this Driver": + "آیا می خواهید برای این درایور نکاتی بپردازید؟", + "Tip is": "نکته است", + "Tip is": "نکته است", + "Camera Access Denied.": "دسترسی به دوربین ممنوع شد.", + "Open Settings": "تنظیمات را باز کنید", + "GPS Required Allow !.": "GPS مورد نیاز مجاز است!.", + "Your Account is Deleted": "اکانت شما حذف شده است", + "Are you sure to delete your account?": + "آیا مطمئن هستید که اکانت خود را حذف می کنید؟", + "Your data will be erased after 2 weeks": + "اطلاعات شما پس از 2 هفته پاک می شود", + "And you will can't return to use app after 1 month": + "و بعد از 1 ماه نمی توانید به استفاده از برنامه برگردید", + "وَلَن تَسْتَطِيع اسْتِخْدَام التَّطْبِيق مَرَّة أُخْرَى بَعْد شَهْر": + "وَلَن تَسْتَطِیع اسْتِخْدَام التَّطْبِیق مَرَّة أُخْرَی بَعْد شَهْر.", + "Enter Your First Name": "نام خود را وارد نمایید", + "Are you Sure to LogOut?": + "آیا مطمئن هستید که از سیستم خارج می شوید؟", + "Email Wrong": "ایمیل اشتباه است", + "Email you inserted is Wrong.": "ایمیلی که وارد کردید اشتباه است.", + "You have finished all times": "شما همه زمان ها را تمام کرده اید", + "if you want help you can email us here": + "اگر کمک می خواهید می توانید به ما ایمیل بزنید", + "Thanks": "با تشکر", + "Email Us": "به ما ایمیل بزنید", + "I cant register in your app in face detection": + "من نمی توانم در برنامه شما در تشخیص چهره ثبت نام کنم", + "Hi": "سلام", + "No face detected": "چهره ای شناسایی نشد", + "Image detecting result is": "نتیجه تشخیص تصویر است", + "from 3 times Take Attention": "از 3 بار توجه کنید", + "Be sure for take accurate images please": + "حتما عکس های دقیق بگیرید لطفا", + "You have": "شما دارید", + "لَدَيْك": "لَدَیْک", + "image verified": "تصویر تایید شد", + "Next": "بعد", + "There is no help Question here": "در اینجا هیچ سوال کمکی وجود ندارد", + "Call End": "پایان تماس", + "You dont have Points": "شما امتیاز ندارید", + "You Are Stopped For this Day !": "شما برای این روز متوقف شده اید!", + "You must be charge your Account": "شما باید حساب خود را شارژ کنید", + "You Refused 3 Rides this Day that is the reason": + "شما این روز 3 سواری را رد کردید که دلیل آن است", + "See you Tomorrow!": "فردا می بینمت!", + "لِقَائِنَا غَدًا!": "لِقَائِنَا غَداًا!", + "Recharge my Account": "شارژ مجدد حساب من", + "Ok , See you Tomorrow": "باشه فردا میبینمت", + "You are Stopped": "شما متوقف شده اید", + "Connected": "متصل", + "Not Connected": "متصل نیست", + "Your are far from passenger location": "شما از محل مسافر دور هستید", + "go to your passenger location before": + "قبل از رفتن به محل مسافر خود بروید", + "Passenger cancel trip": "لغو سفر مسافر", + "يُلْغِي الرَّاكِب الرِّحْلَة": "يُلْغِي الرَّاكِب الرِّحْلَة", + "You will get cost of your work for this trip": + "هزینه کار خود را برای این سفر دریافت خواهید کرد", + "in your wallet": "در کیف پول شما", + "you gain": "به دست می آورید", + "Order Cancelled": "سفارش لغو شد", + "Order Cancelled by Passenger": "سفارش توسط مسافر لغو شد", + "Success": "موفقیت", + "Feedback data saved successfully": + "داده های بازخورد با موفقیت ذخیره شد", + "No Promo for today .": "تبلیغاتی برای امروز وجود ندارد.", + "Select your destination": "مقصد خود را انتخاب کنید", + "Search for your Start point": "نقطه شروع خود را جستجو کنید", + "Search for waypoint": "جستجوی نقطه راه", + "Current Location": "موقعیت فعلی", + "Add Location 1": "اضافه کردن مکان 1", + "You must Verify email !.": "شما باید ایمیل را تأیید کنید!", + "Cropper": "کراپر", + "Saved Sucssefully": "با موفقیت ذخیره شد", + "Select Date": "تاریخ را انتخاب کنید", + "Birth Date": "تاریخ تولد", + "Ok": "خوب", + "the 500 points equal 30 JOD": "500 امتیاز معادل 30 JOD است", + "the 500 points equal 30 JOD for you": + "500 امتیاز برای شما معادل 30 JOD است", + "So go and gain your money": "پس برو و پولت را بدست بیاور", + "فَاسْتَحِقَّ فُلُوسَك وَاكْسِب النِّقَاط": + "فَاسْتَحِقَّ فُلُوسَک وَاكْسِب النِّقَاط", + "token updated": "توکن به روز شد", + "Add Location 2": "اضافه کردن مکان 2", + "Add Location 3": "اضافه کردن مکان 3", + "Add Location 4": "اضافه کردن مکان 4", + "Waiting for your location": "منتظر مکان شما هستیم", + "Search for your destination": "مقصد خود را جستجو کنید", + "Hi! This is": "سلام! این هست", + "I am using": "من با استفاده از", + "to ride with": "برای سوار شدن با", + "as the driver.": "به عنوان راننده", + "is driving a": "در حال رانندگی است", + "with license plate": "با پلاک", + "I am currently located at": "من در حال حاضر در", + "Please go to Car now": "لطفا همین الان به ماشین بروید", + "If you need to reach me, please contact the driver directly at": + "اگر نیاز به تماس با من دارید، لطفاً مستقیماً با راننده تماس بگیرید", + "No Car or Driver Found in your area.": + "هیچ خودرو یا راننده ای در منطقه شما یافت نشد.", + "Please Try anther time": "لطفا زمان دیگری را امتحان کنید", + "There no Driver Aplly your order sorry for that": + "هیچ Driver Aply سفارش شما وجود ندارد برای آن متأسفیم", + "Trip Cancelled": "سفر لغو شد", + "The Driver Will be in your location soon .": + "راننده به زودی در محل شما خواهد بود.", + "The distance less than 500 meter.": "فاصله کمتر از 500 متر", + "Promo End !": "پایان تبلیغاتی!", + "There is no notification yet": "هنوز اطلاع رسانی نشده است", + "Use Touch ID or Face ID to confirm payment": + "برای تأیید پرداخت از Touch ID یا Face ID استفاده کنید", + "Contact us for any questions on your order.": + "برای هرگونه سوال در مورد سفارش خود با ما تماس بگیرید.", + "Pyament Cancelled .": "Pyament لغو شد.", + "type here": "اینجا تایپ کنید", + "Scan Driver License": "اسکن گواهینامه رانندگی", + "Please put your licence in these border": + "لطفا مجوز خود را در این مرزها قرار دهید", + "Camera not initialized yet": "دوربین هنوز راه اندازی نشده است", + "Take Image": "عکس بگیرید", + "AI Page": "صفحه هوش مصنوعی", + "Take Picture Of ID Card": "از کارت شناسایی عکس بگیرید", + "Take Picture Of Driver License Card": + "از کارت گواهینامه رانندگی عکس بگیرید", + "We are process picture please wait": + "ما در حال انجام تصویر هستیم لطفا صبر کنید", + "There is no data yet.": "هنوز هیچ داده ای وجود ندارد.", + "Name :": "نام :", + "Drivers License Class:": "کلاس گواهینامه رانندگی:", + "Document Number:": "شماره سند:", + "Address:": "نشانی:", + "Height:": "قد:", + "Expiry Date:": "تاریخ انقضا:", + "Date of Birth:": "تاریخ تولد:", + "You can\"t continue with us .": "شما نمی توانید با ما ادامه دهید.", + "You should renew Driver license": + "باید گواهینامه رانندگی را تمدید کنید", + "Detect Your Face": "چهره خود را تشخیص دهید", + "Go to next step": "به مرحله بعدی بروید", + "scan Car License.": "اسکن گواهینامه خودرو", + "aاسْتِخْرَاج رُخْصَة السَّيَّارَة.": + "اسْتِخْرَاج رُخْصَة السَّیَّارَة.", + "Name in arabic": "نام به عربی", + "Drivers License Class": "کلاس گواهینامه رانندگی", + "Date of Birth": "تاریخ تولد", + "Age": "سن", + "Lets check Car license": "بیایید گواهینامه ماشین را بررسی کنیم", + "Car Kind": "نوع ماشین", + "Car Plate": "پلاک اتومبیل", + "Lets check License Back Face": + "اجازه می دهد تا مجوز پشت صورت را بررسی کنیم", + "Car License Card": "کارت گواهینامه خودرو", + "No image selected yet": "هنوز تصویری انتخاب نشده است", + "Made :": "ساخته شده:", + "model :": "مدل :", + "VIN :": "VIN:", + "year :": "سال:", + "ُExpire Date": "تاریخ انقضا", + "Login Driver": "درایور ورود", + "Password must br at least 6 character.": + "رمز عبور باید حداقل 6 کاراکتر داشته باشد.", + "if you don\"t have account": "اگر حساب ندارید", + "Here recorded trips audio": "در اینجا سفرهای صوتی ضبط شده است", + "Register as Driver": "ثبت نام به عنوان راننده", + "Privacy Notice": "اطلاعیه حفظ حریم خصوصی", + "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the": + "با انتخاب «موافقم» در زیر، شرایط استفاده را بررسی کرده و با آن موافقم و تأیید می کنم", + ". I am at least 18 years of age.": ". من حداقل 18 سال سن دارم.", + "Log Out Page": "صفحه خروج", + "Log Off": "خروج", + "Register Driver": "ثبت راننده", + "Verify Email For Driver": "تایید ایمیل برای درایور", + "Admin DashBoard": "داشبورد مدیریت", + "Your name": "اسم شما", + "your ride is applied": "سواری شما اعمال می شود", + "Your password": "رمز عبور شما", + "H and": "H و", + "LE": "LE", + "JOD": "JOD", + "m": "متر", + "We search nearst Driver to you": + "ما نزدیکترین راننده به شما را جستجو می کنیم", + "please wait till driver accept your order": + "لطفا صبر کنید تا راننده سفارش شما را بپذیرد", + "No accepted orders? Try raising your trip fee to attract riders.": + "سفارش پذیرفته نشده است؟ سعی کنید هزینه سفر خود را برای جذب سوارکاران افزایش دهید.", + "You should select one": "شما باید یکی را انتخاب کنید", + "The driver accept your order for": "راننده سفارش شما را می پذیرد", + "Increase Fee": "افزایش کارمزد", + "No, thanks": "نه ممنون", + "The driver on your way": "راننده در راه است", + "Total price from": "قیمت کل از", + "Order Details Speed": "جزئیات سفارش سرعت", + "Order Applied": "سفارش اعمال شد", + "accepted your order": "سفارش شما را پذیرفت", + "We regret to inform you that another driver has accepted this order.": + "با کمال تاسف به اطلاع می رسانیم که راننده دیگری این سفارش را پذیرفته است.", + "Selected file:": "فایل انتخابی:", + "Your trip cost is": "هزینه سفر شما است", + "this will delete all files from your device": + "با این کار تمام فایل ها از دستگاه شما حذف می شود", + "you have a negative balance of": "تراز منفی دارید", + "in your": "در شما", + "Exclusive offers and discounts always with the Sefer app": + "پیشنهادات و تخفیف های انحصاری همیشه با اپلیکیشن Sefer", + "Please go to Car Driver": "لطفا به راننده ماشین مراجعه کنید", + "wallet due to a previous trip.": "کیف پول به دلیل سفر قبلی", + "Submit Question": "ارسال سوال", + "Please enter your Question.": "لطفا سوال خود را وارد کنید", + "Help Details": "جزئیات راهنما", + "No trip yet found": "هنوز سفری پیدا نشده است", + "No Response yet.": "هنوز پاسخی داده نشده است.", + "You Earn today is": "کسب درآمد امروز است", + "You Have in": "شما وارد شده اید", + "Total points is": "مجموع امتیاز است", + "Total Connection Duration:": "کل مدت زمان اتصال:", + "H and": "H و", + "Passenger name :": "نام مسافر :", + "Cost Of Trip IS": "هزینه سفر IS است", + "Arrival time": "زمان رسیدن", + "arrival time to reach your point": + "زمان رسیدن برای رسیدن به نقطه خود", + "For Speed and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": + "برای سفرهای سرعت و تحویل، قیمت به صورت پویا محاسبه می شود. برای سفرهای Comfort، قیمت بر اساس زمان و مسافت است", + "Hello this is Driver": "سلام این راننده است", + "Is the Passenger in your Car ?": "آیا مسافر در ماشین شماست؟", + "Please wait for the passenger to enter the car before starting the trip.": + "لطفا قبل از شروع سفر صبر کنید تا مسافر وارد ماشین شود.", + "No ,still Waiting.": "نه، هنوز منتظرم", + "I arrive you": "من به تو می رسم", + "I Arrive your site": "من به سایت شما می رسم", + "You are not in near to passenger location": + "شما در نزدیکی محل مسافر نیستید", + "please go to picker location exactly": + "لطفاً دقیقاً به محل انتخابگر بروید", + "You Can Cancel Trip And get Cost of Trip From": + "می توانید سفر را لغو کنید و هزینه سفر را از آن دریافت کنید", + "Are you sure to cancel?": "آیا مطمئن هستید که لغو می کنید؟", + "Yes": "آره", + "Insert Emergincy Number": "درج شماره اضطراری", + "Best choice for comfort car and flexible route and stops point": + "بهترین انتخاب برای ماشین راحت و مسیر انعطاف پذیر و نقطه توقف", + "Insert": "درج کنید", + "This is for delivery or a motorcycle.": + "این برای تحویل یا موتور سیکلت است.", + "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": + "این سفر مستقیماً از نقطه شروع شما به مقصد شما با قیمت ثابت می رود. راننده باید مسیر برنامه ریزی شده را دنبال کند", + "You can decline a request without any cost": + "شما می توانید بدون هیچ هزینه ای درخواست را رد کنید", + "Perfect for adventure seekers who want to experience something new and exciting": + "ایده آل برای جویندگان ماجراجویی که می خواهند چیزی جدید و هیجان انگیز را تجربه کنند", + "My current location is:": "مکان فعلی من این است:", + "and I have a trip on": "و من یک سفر دارم", + "App with Passenger": "برنامه با مسافر", + "مع الراكب": "مع الراکب", + "You will be pay the cost to driver or we will get it from you on next trip": + "هزینه آن را به راننده می پردازید یا در سفر بعدی آن را از شما دریافت می کنیم", + "Trip has Steps": "سفر دارای مراحل است", + "Distance from Passenger to destination is": + "فاصله مسافر تا مقصد است", + "price is": "قیمت است", + "This ride type does not allow changes to the destination or additional stops": + "این نوع سواری اجازه تغییر در مقصد یا توقف های اضافی را نمی دهد", + "This price may be changed": "این قیمت ممکن است تغییر کند", + "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": + "سیم کارت نداره مشکلی نیست! مستقیماً از طریق برنامه ما با راننده خود تماس بگیرید. ما از فناوری پیشرفته برای اطمینان از حریم خصوصی شما استفاده می کنیم.", + "This ride type allows changes, but the price may increase": + "این نوع سواری امکان تغییرات را دارد، اما ممکن است قیمت افزایش یابد", + "message From passenger": "پیام از مسافر", + "Select one message": "یک پیام را انتخاب کنید", + "My location is correct. You can search for me using the navigation app": + "موقعیت مکانی من درست است می توانید با استفاده از برنامه ناوبری من را جستجو کنید", + "I'm waiting for you": "من منتظر شما هستم", + "Hello, I'm at the agreed-upon location": + "سلام، من در محل مورد توافق هستم", + "We noticed the speed is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": + "ما متوجه شدیم که سرعت بیش از 100 کیلومتر در ساعت است. لطفا برای ایمنی خود سرعت خود را کم کنید. اگر احساس ناامنی می کنید، می توانید جزئیات سفر خود را با یک مخاطب به اشتراک بگذارید یا با استفاده از دکمه قرمز SOS با پلیس تماس بگیرید.", + "Warning: Speeding detected!": "هشدار: سرعت تشخیص داده شد!", + "Please help! Contact me as soon as possible.": + "لطفا کمک کنید! در اسرع وقت با من تماس بگیرید.", + "Share Trip Details": "جزئیات سفر را به اشتراک بگذارید", + "Car Plate is": "پلاک خودرو است", + "the 300 points equal 300 L.E for you": + "300 امتیاز برای شما معادل 300 L.E است", + "So go and gain your money": "پس برو و پولت را بدست بیاور", + "the 300 points equal 300 L.E": "300 امتیاز معادل 300 L.E", + "The payment was not approved. Please try again.": + "پرداخت مورد تایید قرار نگرفت. لطفا دوباره تلاش کنید.", + "Payment Failed": "پرداخت ناموفق", + "Error": "خطا", + "An error occurred during the payment process.": + "خطایی در فرآیند پرداخت رخ داد.", + "The payment was approved.": "پرداخت مورد تایید قرار گرفت.", + "Payment Successful": "پرداخت با موفقیت انجام شد", + "No ride found yet": "هنوز سواری پیدا نشده است", + "Accept Order": "قبول سفارش", + "reject your order.": "سفارش شما را رد کند", + "Bottom Bar Example": "نمونه نوار پایین", + "Driver phone": "تلفن راننده", + "Statistics": "آمار", + "Origin": "اصل و نسب", + "Destination": "مقصد", + "Driver Name": "نام راننده", + "Driver Car Plate": "پلاک ماشین راننده", + "Available for rides": "برای سواری در دسترس است", + "Scan Id": "شناسه اسکن", + "Camera not initilaized yet": "دوربین هنوز راه اندازی نشده است", + "Scan ID MklGoogle": "اسکن شناسه MklGoogle", + "Language": "زبان", + "Jordan": "اردن", + "USA": "ایالات متحده آمریکا", + "Egypt": "مصر", + "Turkey": "بوقلمون", + "Saudi Arabia": "عربستان سعودی", + "Qatar": "قطر", + "Bahrain": "بحرین", + "Kuwait": "کویت", + "But you have a negative salary of": "اما شما حقوق منفی دارید", + "Promo Code": "کد تبلیغاتی", + "Your trip distance is": "مسافت سفر شما است", + "Enter promo code": "کد تبلیغاتی را وارد کنید", + "You have promo!": "شما تبلیغاتی دارید!", + "Cost Duration": "مدت زمان هزینه", + "Duration is": "مدت زمان است", + "Leave": "ترک کردن", + "Join": "پیوستن", + "You Should be select reason.": "شما باید دلیل را انتخاب کنید.", + "\$": "\$", + "Waiting for Driver ...": "در انتظار راننده ...", + "Latest Recent Trip": "آخرین سفر اخیر", + "from your list": "از لیست شما", + "Do you want to change Work location": + "آیا می خواهید محل کار را تغییر دهید؟", + "Do you want to change Home location": + "آیا می خواهید مکان خانه را تغییر دهید؟", + "We Are Sorry That we dont have cars in your Location!": + "ما متاسفیم که در مکان شما ماشین نداریم!", + "Choose from Map": "از نقشه انتخاب کنید", + "Pick your ride location on the map - Tap to confirm": + "مکان سواری خود را روی نقشه انتخاب کنید - برای تأیید ضربه بزنید", + "To Work": "برای کار", + "Are you want to go this site": "آیا می خواهید به این سایت بروید", + "Closest & Cheapest": "نزدیکترین و ارزانترین", + "Work Saved": "کار ذخیره شد", + "Sefer is the ride-hailing app that is safe, reliable, and accessible.": + "Sefer یک برنامه سواری است که ایمن، قابل اعتماد و در دسترس است.", + "With Sefer, you can get a ride to your destination in minutes.": + "با Sefer می توانید در عرض چند دقیقه سواری به مقصد برسید.", + "Sefer is committed to safety, and all of our captains are carefully screened and background checked.": + "Sefer به ایمنی متعهد است و همه کاپیتان های ما به دقت بررسی می شوند و پس زمینه بررسی می شوند.", + "To Home": "به خانه", + "Home Saved": "صفحه اصلی ذخیره شد", + "Destination selected": "مقصد انتخاب شد", + "Now select start pick": "حالا start pick را انتخاب کنید", + "Pick from map": "از روی نقشه انتخاب کنید", + "Click here point": "اینجا را کلیک کنید نقطه", + "No Car in your site. Sorry!": + "هیچ ماشینی در سایت شما وجود ندارد. متاسف!", + "Nearest Car for you about": "نزدیکترین ماشین برای شما در مورد", + "N/A": "N/A", + "From :": "از جانب :", + "Get Details of Trip": "جزئیات سفر را دریافت کنید", + "If you want add stop click here": + "اگر می خواهید توقف اضافه کنید اینجا را کلیک کنید", + "Driver": "راننده", + "Where you want go": "جایی که میخواهی برو", + "My Card": "کارت من", + "Start Record": "ضبط را شروع کنید", + "Wallet": "کیف پول", + "History of Trip": "تاریخچه سفر", + "Helping Center": "مرکز کمک", + "Record saved": "رکورد ذخیره شد", + "Trips recorded": "سفرها ثبت شد", + "Select Your Country": "کشورت را انتخاب کن", + "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": + "برای اطمینان از دریافت دقیق ترین اطلاعات برای موقعیت مکانی خود، لطفاً کشور خود را در زیر انتخاب کنید. این به شما کمک می کند تا تجربه و محتوای برنامه را متناسب با کشور خود تنظیم کنید.", + "Are you sure to delete recorded files": + "آیا مطمئن هستید که فایل های ضبط شده را حذف می کنید؟", + "Select recorded trip": "سفر ضبط شده را انتخاب کنید", + "Card Number": "شماره کارت", + "Hi, Where to": "سلام کجا", + "Pick your destination from Map": "مقصد خود را از نقشه انتخاب کنید", + "Add Stops": "توقف اضافه کنید", + "Get Direction": "دریافت جهت", + "Add Location": "اضافه کردن مکان", + "Switch Rider": "سوئیچ سوار", + "You will arrive to your destination after timer end.": + "پس از پایان تایمر به مقصد خود خواهید رسید.", + "You can cancel trip": "می توانید سفر را لغو کنید", + "The driver waitting you in picked location .": + "راننده در محل انتخاب شده منتظر شماست.", + "Pay with Your": "با شما پرداخت کنید", + "Pay with Credit Card": "با کارت اعتباری پرداخت کنید", + "Payment History": "تاریخچه پرداخت", + "Show Promos to Charge": "نمایش تبلیغات برای شارژ", + "Point": "نقطه", + "Driver Wallet": "کیف پول راننده", + "Total Points is": "مجموع امتیاز است", + "Total Budget from trips is": "مجموع بودجه از سفرها است", + "Total Amount:": "کل مبلغ:", + "Total Budget from trips by": "کل بودجه از سفرهای انجام شده توسط", + "Credit card is": "کارت اعتباری است", + "بطاقة الائتمان هي": "بطاقة الائتمان هی", + "This amount for all trip I get from Passengers": + "این مبلغ را برای تمام سفرها از مسافران دریافت می کنم", + "Pay from my budget": "از بودجه من پرداخت کنید", + "This amount for all trip I get from Passengers and Collected For me in": + "این مبلغ برای تمام سفرهایی که از مسافران دریافت می کنم و برای من در آن جمع آوری می شود", + "You can buy points from your budget": + "شما می توانید از بودجه خود امتیاز بخرید", + "insert amount": "درج مقدار", + "You can buy Points to let you online": + "می توانید امتیازهایی را بخرید تا به شما اجازه آنلاین بدهند", + "by this list below": "توسط این لیست زیر", + "من خلال القائمة أدناه": "من خلال القائمة أدناه", + "Create Wallet to receive your money": + "برای دریافت پول خود کیف پول ایجاد کنید", + "Enter your feedback here": "بازخورد خود را اینجا وارد کنید", + "Please enter your feedback.": "لطفا بازخورد خود را وارد کنید.", + "Feedback": "بازخورد", + "Submit": "ارسال", + "Click here to Show it in Map": + "برای نمایش آن در نقشه اینجا را کلیک کنید", + "Canceled": "لغو شد", + "Type your Email": "ایمیل خود را تایپ کنید", + "No I want": "نه من می خواهم", + "Email is": "ایمیل است", + "Phone Number is": "شماره تلفن است", + "Date of Birth is": "تاریخ تولد است", + "Sex is": "جنسیت است", + "Car Details": "جزئیات خودرو", + "VIN is": "VIN است", + "Color is": "رنگ است", + "Make is": "ساخت است", + "Model is": "مدل است", + "Year is": "سال است", + "Expiration Date": "تاریخ انقضا", + "Edit Your data": "داده های خود را ویرایش کنید", + "write vin for your car": "برای ماشینت vin بنویس", + "VIN": "VIN", + "write Color for your car": "برای ماشین خود رنگ بنویسید", + "write Make for your car": "بنویسید برای ماشین خود بسازید", + "write Model for your car": "مدل ماشین خود را بنویسید", + "write Year for your car": "سال را برای ماشین خود بنویسید", + "write Expiration Date for your car": + "تاریخ انقضای ماشین خود را بنویسید", + "Tariffs": "تعرفه ها", + "Minimum fare": "حداقل کرایه", + "Maximum fare": "حداکثر کرایه", + "Flag-down fee": "هزینه کاهش پرچم", + "Including Tax": "از جمله مالیات", + "BookingFee": "هزینه رزرو", + "Morning": "صبح", + "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": + "از ساعت 07:30 تا 10:30 (پنجشنبه، جمعه، شنبه، دوشنبه)", + "Evening": "عصر", + "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": + "از ساعت 12:00 الی 15:00 (پنجشنبه، جمعه، شنبه، دوشنبه)", + "Night": "شب", + "You have in account": "شما در حساب دارید", + "Select Country": "کشور را انتخاب کنید", + "Ride Today :": "امروز سوار شوید:", + "After this period": "بعد از این مدت", + "You can\"t cancel!": "شما نمی توانید لغو کنید!", + "لا تستطيع الغاء الرحله": "لا تستطيع الغاء الرحله", + "from 23:59 till 05:30": "از ساعت 23:59 تا 05:30", + "Rate Driver": "درایور را رتبه بندی کنید", + "Total Cost is": "هزینه کل است", + "Write note": "یادداشت بنویس", + "Time to arrive": "زمان رسیدن", + "Ride Summaries": "خلاصه های سواری", + "Total Cost": "هزینه کل", + "Average of Hours of": "میانگین ساعات", + "is ON for this month": "برای این ماه روشن است", + "Days": "روزها", + "Total Hours on month": "مجموع ساعت ها در ماه", + "Counts of Hours on days": "شمارش ساعت در روز", + "OrderId": "شماره سفارش", + "created time": "زمان ایجاد کرد", + "Speed Over": "سرعت بیش از", + "I will slow down": "من سرعتم را کاهش خواهم داد", + "Map Passenger": "مسافر نقشه", + "Be Slowly": "آهسته باش", + "If you want to make Google Map App run directly when you apply order": + "اگر می خواهید برنامه Google Map را مستقیماً هنگام اعمال سفارش اجرا کنید", + "You can change the language of the app": + "می توانید زبان برنامه را تغییر دهید", + "Your Budget less than needed": "بودجه شما کمتر از نیاز است", + "You can change the Country to get all features": + "می‌توانید کشور را برای دریافت همه ویژگی‌ها تغییر دهید", + "Change Country": "تغییر کشور" + }, + "el": { + "Sign In by Apple": "Είσοδος από την Apple", + "Sign In by Google": "Είσοδος μέσω Google", + "How do I request a ride?": "Πώς μπορώ να ζητήσω μια βόλτα;", + "Step-by-step instructions on how to request a ride through the Sefer app.": + "Οδηγίες βήμα προς βήμα για το πώς να ζητήσετε μια βόλτα μέσω της εφαρμογής Sefer.", + "What types of vehicles are available?": + "Τι είδη οχημάτων είναι διαθέσιμα;", + "Sefer offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": + "Η Sefer προσφέρει μια ποικιλία επιλογών οχημάτων που ταιριάζουν στις ανάγκες σας, όπως οικονομία, άνεση και πολυτέλεια. Επιλέξτε την επιλογή που ταιριάζει καλύτερα στον προϋπολογισμό και τον αριθμό των επιβατών σας.", + "How can I pay for my ride?": + "Πώς μπορώ να πληρώσω για τη διαδρομή μου;", + "Sefer offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": + "Η Sefer προσφέρει πολλαπλούς τρόπους πληρωμής για την εξυπηρέτησή σας. Επιλέξτε μεταξύ πληρωμής με μετρητά ή πληρωμής με πιστωτική/χρεωστική κάρτα κατά την επιβεβαίωση της διαδρομής.", + "Can I cancel my ride?": "Μπορώ να ακυρώσω τη διαδρομή μου;", + "Yes, you can cancel your ride under certain conditions (e.g., before driver is assigned). See the Sefer cancellation policy for details.": + "Ναι, μπορείτε να ακυρώσετε τη βόλτα σας υπό ορισμένες προϋποθέσεις (π.χ. πριν ανατεθεί ο οδηγός). Δείτε την πολιτική ακύρωσης Sefer για λεπτομέρειες.", + "Driver Registration & Requirements": "Εγγραφή και απαιτήσεις οδηγού", + "How can I register as a driver?": "Πώς μπορώ να εγγραφώ ως οδηγός;", + "What are the requirements to become a driver?": + "Ποιες είναι οι προϋποθέσεις για να γίνεις οδηγός;", + "Visit our website or contact Sefer support for information on driver registration and requirements.": + "Επισκεφτείτε τον ιστότοπό μας ή επικοινωνήστε με την υποστήριξη της Sefer για πληροφορίες σχετικά με την εγγραφή οδηγού και τις απαιτήσεις.", + "How do I communicate with the other party (passenger/driver)?": + "Πώς επικοινωνώ με το άλλο μέρος (επιβάτη/οδηγό);", + "Sefer provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": + "Το Sefer παρέχει λειτουργία συνομιλίας εντός εφαρμογής για να σας επιτρέπει να επικοινωνείτε με τον οδηγό ή τον συνεπιβάτη σας κατά τη διάρκεια της διαδρομής σας.", + "What safety measures does Sefer offer?": + "Ποια μέτρα ασφαλείας προσφέρει η Sefer;", + "Sefer prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": + "Η Sefer δίνει προτεραιότητα στην ασφάλειά σας. Προσφέρουμε λειτουργίες όπως επαλήθευση οδηγού, παρακολούθηση ταξιδιού εντός εφαρμογής και επιλογές επικοινωνίας έκτακτης ανάγκης.", + "Frequently Questions": "Συχνές Ερωτήσεις", + "User does not exist.": "Ο χρήστης δεν υπάρχει.", + "We need your phone number to contact you and to help you.": + "Χρειαζόμαστε τον αριθμό τηλεφώνου σας για να επικοινωνήσουμε μαζί σας και να σας βοηθήσουμε.", + "You will recieve code in sms message": + "Θα λάβετε κωδικό σε μήνυμα sms", + "Please enter": "Παρακαλώ περάστε", + "We need your phone number to contact you and to help you receive orders.": + "Χρειαζόμαστε τον αριθμό τηλεφώνου σας για να επικοινωνήσουμε μαζί σας και να σας βοηθήσουμε να λαμβάνετε παραγγελίες.", + "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": + "Το πλήρες όνομα στο ποινικό σας μητρώο δεν ταιριάζει με αυτό της άδειας οδήγησης. Επαληθεύστε και παρέχετε τα σωστά έγγραφα.", + "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": + "Ο εθνικός αριθμός στην άδεια οδήγησής σας δεν ταιριάζει με αυτόν στο έγγραφο ταυτότητάς σας. Επαληθεύστε και παρέχετε τα σωστά έγγραφα.", + "Capture an Image of Your Criminal Record": + "Αποτυπώστε μια εικόνα του ποινικού σας μητρώου", + "IssueDate": "Ημερομηνία έκδοσης", + "Capture an Image of Your car license front": + "Τραβήξτε μια εικόνα της πρόσοψης της άδειας του αυτοκινήτου σας", + "Capture an Image of Your ID Document front": + "Τραβήξτε μια εικόνα του εγγράφου ταυτότητάς σας μπροστά", + "NationalID": "Εθνική ταυτότητα", + "FullName": "Πλήρες όνομα", + "InspectionResult": "Αποτέλεσμα Επιθεώρησης", + "Criminal Record": "Ποινικό μητρώο", + "The email or phone number is already registered.": + "Το email ή ο αριθμός τηλεφώνου είναι ήδη καταχωρημένος.", + "To become a ride-sharing driver on the Sefer app, you need to upload your driver\"s license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Sefer app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": + "Για να γίνετε οδηγός κοινής χρήσης διαδρομής στην εφαρμογή Sefer, πρέπει να ανεβάσετε την άδεια οδήγησης, το έγγραφο ταυτότητας και το έγγραφο εγγραφής αυτοκινήτου. Το σύστημά μας AI θα ελέγξει και θα επαληθεύσει άμεσα την αυθεντικότητά τους σε μόλις 2-3 λεπτά. Εάν τα έγγραφά σας έχουν εγκριθεί, μπορείτε να ξεκινήσετε να εργάζεστε ως οδηγός στην εφαρμογή Sefer Λάβετε υπόψη ότι η υποβολή πλαστών εγγράφων είναι σοβαρή παράβαση και μπορεί να οδηγήσει σε άμεση διακοπή και νομικές συνέπειες.", + "Documents check": "Έλεγχος εγγράφων", + "Driver's License": "Αδεια οδήγησης", + "License Type": "Τύπος άδειας", + "National Number": "Εθνικός Αριθμός", + "Name (Arabic)": "Όνομα (Αραβικά)", + "Name (English)": "Όνομα (Αγγλικά)", + "Address": "Διεύθυνση", + "Issue Date": "Ημερομηνία έκδοσης", + "Expiry Date": "Ημερομηνία λήξης", + "License Categories": "Κατηγορίες αδειών", + "driver_license": "άδεια οδήγησης", + "Capture an Image of Your Driver License": + "Τραβήξτε μια εικόνα της άδειας οδήγησης", + "ID Documents Back": "Έγγραφα ταυτότητας Πίσω", + "National ID": "Εθνική ταυτότητα", + "Occupation": "Κατοχή", + "Gender": "Γένος", + "Religion": "Θρησκεία", + "Marital Status": "Οικογενειακή κατάσταση", + "Full Name (Marital)": "Πλήρες Όνομα (Συζυγική)", + "Expiration Date": "Ημερομηνία λήξης", + "Capture an Image of Your ID Document Back": + "Τραβήξτε μια εικόνα του εγγράφου ταυτότητάς σας πίσω", + "ID Documents Front": "Έγγραφα ταυτότητας εμπρός", + "First Name": "Ονομα", + "CardID": "Κάρτα ID", + "Full Name": "Πλήρες όνομα", + "Vehicle Details Front": "Λεπτομέρειες οχήματος εμπρός", + "Plate Number": "Αριθμός πινακίδας", + "Owner Name": "Ονομα ιδιοκτήτη", + "Vehicle Details Back": "Στοιχεία οχήματος Επιστροφή", + "Make": "Φτιαχνω, κανω", + "Model": "Μοντέλο", + "Year": "Ετος", + "Chassis": "Σασί", + "Color": "Χρώμα", + "Displacement": "Μετατόπιση", + "Fuel": "Καύσιμα", + "Tax Expiry Date": "Ημερομηνία λήξης φόρου", + "Inspection Date": "Ημερομηνία ελέγχου", + "Capture an Image of Your car license back": + "Τραβήξτε μια εικόνα της άδειας του αυτοκινήτου σας πίσω", + "Capture an Image of Your Driver’s License": + "Τραβήξτε μια εικόνα της άδειας οδήγησης", + "Sign in with Google for easier email and name entry": + "Συνδεθείτε με το Google για ευκολότερη εισαγωγή email και ονόματος", + "You will choose allow all the time to be ready receive orders": + "Θα επιλέξετε να επιτρέπεται όλη η ώρα να είναι έτοιμη να λαμβάνετε παραγγελίες", + "Welcome to Sefer!": "Καλώς ήρθατε στον Σεφέρ!", + "Get to your destination quickly and easily.": + "Φτάστε στον προορισμό σας γρήγορα και εύκολα.", + "Enjoy a safe and comfortable ride.": + "Απολαύστε μια ασφαλή και άνετη βόλτα.", + "Choose Language": "Διάλεξε γλώσσα", + "Login": "Σύνδεση", + "Pay with Wallet": "Πληρώστε με το Πορτοφόλι", + "Invalid MPIN": "Μη έγκυρο MPIN", + "Invalid OTP": "Μη έγκυρο OTP", + "Enter your email address": + "Εισάγετε τη διευθύνση του ηλεκτρονικού ταχυδρομείου σας", + "Please enter Your Email.": "Εισαγάγετε το Email σας.", + "Enter your phone number": + "Πληκτρολόγησε τον αριθμό του τηλεφώνου σου", + "Please enter your phone number.": + "Εισαγάγετε τον αριθμό τηλεφώνου σας.", + "Please enter Your Password.": "Παρακαλώ εισάγετε τον κωδικό σας.", + "Submit": "υποβάλλουν", + "if you dont have account": "αν δεν έχετε λογαριασμό", + "Register": "Κανω ΕΓΓΡΑΦΗ", + "Accept Ride's Terms & Review Privacy Notice": + "Αποδεχτείτε τους Όρους της Ride και τη σημείωση απορρήτου", + "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": + "Επιλέγοντας «Συμφωνώ» παρακάτω, έχω διαβάσει και συμφωνώ με τους Όρους Χρήσης και αναγνωρίζω τη Σημείωση Απορρήτου. Είμαι τουλάχιστον 18 ετών.", + "I Agree": "Συμφωνώ", + "First name": "Ονομα", + "Enter your first name": "Εισάγετε το όνομα σας", + "Please enter your first name.": "Παρακαλώ εισάγετε το ονομα σας.", + "Last name": "Επίθετο", + "Enter your last name": "Εισαγάγετε το επώνυμό σας", + "Please enter your last name.": "Παρακαλώ εισάγετε το επώνυμό σας.", + "City": "Πόλη", + "Please enter your City.": "Παρακαλώ εισάγετε την πόλη σας.", + "Male": "Αρσενικός", + "Female": "Θηλυκός", + "Verify Email": "Επαλήθευση email", + "We sent 5 digit to your Email provided": + "Στείλαμε 5 ψηφία στο email που σας παρείχατε", + "5 digit": "5ψήφιο", + "Send Verification Code": "Αποστολή Κωδικού Επαλήθευσης", + "Your Ride Duration is": "Η διάρκεια της διαδρομής σας είναι", + "You will be thier in": "Θα είσαι εκεί μέσα", + "You trip distance is": "Η απόσταση ταξιδιού σας είναι", + "Fee is": "Η αμοιβή είναι", + "From :": "Από :", + "To :": "Προς την :", + "Add Promo": "Προσθήκη προσφοράς", + "Confirm Selection": "Επιβεβαίωση επιλογής", + "distance is": "απόσταση είναι", + "duration is": "διάρκεια είναι", + "I don't need a ride anymore": "Δεν χρειάζομαι πια βόλτα", + "I was just trying the application": "Μόλις δοκίμαζα την εφαρμογή", + "No driver accepted my request": + "Κανένας οδηγός δεν δέχτηκε το αίτημά μου", + "I added the wrong pick-up/drop-off location": + "Πρόσθεσα λάθος τοποθεσία παραλαβής/αποβίβασης", + "I don't have a reason": "Δεν έχω λόγο", + "Other": "Αλλα", + "Can we know why you want to cancel Ride ?": + "Μπορούμε να ξέρουμε γιατί θέλετε να ακυρώσετε το Ride;", + "Cancel Ride": "Ακύρωση διαδρομής", + "Add Payment Method": "Προσθήκη Τρόπου Πληρωμής", + "Your Wallet balance is": "Το υπόλοιπο του Πορτοφολιού σας είναι", + "Ride Wallet": "Πορτοφόλι ποδηλασίας", + "Payment Method": "Μέθοδος πληρωμής", + "Type here Place": "Πληκτρολογήστε εδώ Τόπος", + "Are You sure to ride to": "Είστε σίγουροι ότι θα οδηγήσετε", + "Confirm": "Επιβεβαιώνω", + "Back": "Πίσω", + "You are Delete": "Είστε το Delete", + "Deleted": "Διαγράφηκε", + "You Dont Have Any places yet !": "Δεν έχετε θέσεις ακόμα!", + "Favorite Places": "Αγαπημένα μέρη", + "From : Current Location": "Από: Τρέχουσα τοποθεσία", + "Where to": "Πού", + "Notifications": "Ειδοποιήσεις", + "Profile": "Προφίλ", + "Home": "Σπίτι", + "My Cared": "Μου νοιαζόταν", + "Add Card": "Προσθήκη κάρτας", + "Add Credit Card": "Προσθήκη πιστωτικής κάρτας", + "Please enter the cardholder name": + "Εισαγάγετε το όνομα του κατόχου της κάρτας", + "Please enter the expiry date": "Εισαγάγετε την ημερομηνία λήξης", + "Please enter the CVV code": "Εισαγάγετε τον κωδικό CVV", + "Go To Favorite Places": "Μεταβείτε στα αγαπημένα μέρη", + "Go to this Target": "Μεταβείτε σε αυτόν τον στόχο", + "My Profile": "Το ΠΡΟΦΙΛ μου", + "Sign Out": "Αποσύνδεση", + "Home Page": "Αρχική Σελίδα", + "Are you want to go to this site": + "Θέλετε να μεταβείτε σε αυτόν τον ιστότοπο", + "MyLocation": "Η τοποθεσία μου", + "my location": "Η τοποθεσία μου", + "Target": "Στόχος", + "Update": "Εκσυγχρονίζω", + "You Should choose rate figure": + "Θα πρέπει να επιλέξετε το ποσοστό ποσοστού", + "Login Captin": "Είσοδος Captin", + "Register Captin": "Εγγραφή Captin", + "Send Verfication Code": "Αποστολή κωδικού επαλήθευσης", + "KM": "KM", + "End Ride": "Τέλος Βόλτας", + "Minute": "Λεπτό", + "Go to passenger Location now": + "Μεταβείτε στην τοποθεσία επιβατών τώρα", + "Duration of the Ride is": "Η διάρκεια της διαδρομής είναι", + "Distance of the Ride is": "Η απόσταση της διαδρομής είναι", + "Name of the Passenger is": "Το όνομα του επιβάτη είναι", + "Hello this is Captain": "Γεια, αυτός είναι ο καπετάνιος", + "Start the Ride": "Ξεκινήστε τη Βόλτα", + "Please Wait If passenger want To Cancel!": + "Περιμένετε εάν ο επιβάτης θέλει να ακυρώσει!", + "Total Duration:": "Συνολική διάρκεια:", + "Active Duration:": "Ενεργή Διάρκεια:", + "Waiting for Captin ...": "Περιμένοντας τον Captin...", + "Age is": "Η ηλικία είναι", + "Rating is": "Η βαθμολογία είναι", + "to arrive you.": "για να σε φτάσω.", + "Order History": "Ιστορικό παραγγελιών", + "My Wallet": "Το πορτοφόλι μου", + "Tariff": "Δασμολόγιο", + "Settings": "Ρυθμίσεις", + "Feed Back": "Ανατροφοδότηση", + "Promos": "Προσφορές", + "Please enter a valid 16-digit card number": + "Εισαγάγετε έναν έγκυρο 16ψήφιο αριθμό κάρτας", + "Add Phone": "Προσθήκη τηλεφώνου", + "Please enter a phone number": "Εισαγάγετε έναν αριθμό τηλεφώνου", + "You dont Add Emergency Phone Yet!": + "Δεν προσθέτετε ακόμα τηλέφωνο έκτακτης ανάγκης!", + "You will arrive to your destination after": + "Θα φτάσετε στον προορισμό σας μετά", + "You can cancel Ride now": "Μπορείτε να ακυρώσετε το Ride τώρα", + "You Can cancel Ride After Captain did not come in the time": + "Μπορείτε να ακυρώσετε το Ride Αφού ο Captain δεν ήρθε στην ώρα του", + "If you in Car Now. Press Start The Ride": + "Εάν βρίσκεστε στο αυτοκίνητο τώρα. Πατήστε Start The Ride", + "You Dont Have Any amount in": "Δεν έχετε κανένα ποσό μέσα", + "Wallet!": "Πορτοφόλι!", + "You Have": "Εχεις", + "Save Credit Card": "Αποθήκευση πιστωτικής κάρτας", + "Show Promos": "Εμφάνιση προσφορών", + "10 and get 4% discount": "10 και κερδίστε έκπτωση 4%.", + "20 and get 6% discount": "20 και κερδίστε έκπτωση 6%.", + "40 and get 8% discount": "40 και κερδίστε έκπτωση 8%.", + "100 and get 11% discount": "100 και κερδίστε έκπτωση 11%.", + "Pay with Your PayPal": "Πληρώστε με το PayPal σας", + "You will choose one of above !": "Θα διαλέξεις ένα από τα παραπάνω!", + "Cancel": "Ματαίωση", + "Delete My Account": "Διάγραψε τον λογαριασμό μου", + "Edit Profile": "Επεξεργασία προφίλ", + "Name": "Ονομα", + "Update Gender": "Ενημέρωση φύλου", + "Education": "Εκπαίδευση", + "Update Education": "Ενημέρωση Εκπαίδευσης", + "Employment Type": "Είδος Απασχόλησης", + "SOS Phone": "Τηλέφωνο SOS", + "High School Diploma": "Απολυτήριο λυκείου", + "Associate Degree": "Πτυχίο Αναπληρωτή", + "Bachelor's Degree": "Πτυχίο", + "Master's Degree": "Πτυχίο μάστερ", + "Doctoral Degree": "Διδακτορικό Δίπλωμα", + "Promos For today": "Προσφορές για σήμερα", + "Copy this Promo to use it in your Ride!": + "Αντιγράψτε αυτό το Promo για να το χρησιμοποιήσετε στο Ride σας!", + "To change some Settings": "Για να αλλάξετε κάποιες Ρυθμίσεις", + "To change Language the App": + "Για να αλλάξετε τη γλώσσα της εφαρμογής", + "Order Request Page": "Σελίδα αιτήματος παραγγελίας", + "Rouats of Trip": "Διαδρομές ταξιδιού", + "Passenger Name is": "Το όνομα επιβάτη είναι", + "Total From Passenger is": "Total From Passenger είναι", + "Duration To Passenger is": "Διάρκεια Προς Επιβάτη είναι", + "Distance To Passenger is": "Η απόσταση από τον επιβάτη είναι", + "Total For You is": "Το Total For You είναι", + "Distance is": "Η απόσταση είναι", + "KM": "KM", + "Duration of Trip is": "Η διάρκεια του ταξιδιού είναι", + "Minutes": "Λεπτά", + "Apply Order": "Εφαρμογή παραγγελίας", + "Refuse Order": "Διαταγή άρνησης", + "Rate Captain": "Βαθμολογήστε τον καπετάνιο", + "Enter your Note": "Εισαγάγετε τη Σημείωση σας", + "Type something...": "Πληκτρολόγησε κάτι...", + "Submit rating": "Υποβολή βαθμολογίας", + "Rate Passenger": "Βαθμολογήστε τον επιβάτη", + "Ride Summary": "Περίληψη διαδρομής", + "welcome_message": "Welcome_message", + "app_description": "app_description", + "get_to_destination": "get_to_destination", + "get_a_ride": "πάνε μια βόλτα", + "safe_and_comfortable": "safe_and_comfortable", + "committed_to_safety": "δεσμευμένος_στην_ασφάλεια", + "Driver Applied the Ride for You": + "Ο οδηγός εφάρμοσε το Ride for You", + "Show latest promo": "Εμφάνιση της τελευταίας προσφοράς", + "Cancel Trip": "Ακύρωση ταξιδιού", + "Passenger Cancel Trip": "Ακύρωση ταξιδιού επιβάτη", + "Please stay on the picked point.": + "Παρακαλώ μείνετε στο επιλεγμένο σημείο.", + "Trip is Begin": "Το ταξίδι αρχίζει", + "Hi ,I will go now": "Γεια, θα πάω τώρα", + "Passenger come to you": "Ο επιβάτης έρχεται σε σας", + "Hi ,I Arrive your site": "Γεια, Έφτασα στον ιστότοπό σας", + "Driver Finish Trip": "Ολοκλήρωση ταξιδιού οδηγού", + "you will pay to Driver": "θα πληρώσετε στον Driver", + "Driver Cancel Your Trip": "Οδηγός ακυρώστε το ταξίδι σας", + "you will pay to Driver you will be pay the cost of driver time look to your SEFER Wallet": + "θα πληρώσετε στον Οδηγό θα πληρώσετε το κόστος του χρόνου εμφάνισης του οδηγού στο SEFER Wallet σας", + "I will go now": "θα πάω τώρα", + "You Have Tips": "Έχετε Συμβουλές", + "tips": "συμβουλές", + "Total is": "Σύνολο είναι", + "الْمَجْمُوع هُوَ": "الْمَجْمُوع هُوَ", + "No,I want": "ΟΧΙ θελω", + "Your fee is": "Η αμοιβή σας είναι", + "Do you want to pay Tips for this Driver": + "Θέλετε να πληρώσετε Συμβουλές για αυτό το πρόγραμμα οδήγησης", + "Tip is": "Συμβουλή είναι", + "Tip is": "Συμβουλή είναι", + "Camera Access Denied.": "Δεν επιτρέπεται η πρόσβαση στην κάμερα.", + "Open Settings": "Ανοίξτε τις Ρυθμίσεις", + "GPS Required Allow !.": "Απαιτείται GPS Να επιτρέπεται !.", + "Your Account is Deleted": "Ο λογαριασμός σας έχει διαγραφεί", + "Are you sure to delete your account?": + "Είστε βέβαιοι ότι θα διαγράψετε τον λογαριασμό σας;", + "Your data will be erased after 2 weeks": + "Τα δεδομένα σας θα διαγραφούν μετά από 2 εβδομάδες", + "And you will can't return to use app after 1 month": + "Και δεν θα μπορείτε να επιστρέψετε στη χρήση της εφαρμογής μετά από 1 μήνα", + "وَلَن تَسْتَطِيع اسْتِخْدَام التَّطْبِيق مَرَّة أُخْرَى بَعْد شَهْر": + "وَلَن تَسْتَطِيع اسْتِخْدَام التَّطْبِيق مَرَّة أُخْرَى بَعْد شَهْر", + "Enter Your First Name": "Εισάγετε το όνομα σας", + "Are you Sure to LogOut?": "Είστε σίγουροι ότι θα αποσυνδεθείτε;", + "Email Wrong": "Λάθος email", + "Email you inserted is Wrong.": + "Το email που εισαγάγατε είναι λάθος.", + "You have finished all times": "Έχετε τελειώσει όλες τις φορές", + "if you want help you can email us here": + "αν θέλετε βοήθεια μπορείτε να μας στείλετε email εδώ", + "Thanks": "Ευχαριστώ", + "Email Us": "Στείλτε μας email", + "I cant register in your app in face detection": + "Δεν μπορώ να εγγραφώ στην εφαρμογή σας στην ανίχνευση προσώπου", + "Hi": "γεια", + "No face detected": "Δεν εντοπίστηκε πρόσωπο", + "Image detecting result is": "Το αποτέλεσμα ανίχνευσης εικόνας είναι", + "from 3 times Take Attention": "από 3 φορές Προσοχή", + "Be sure for take accurate images please": + "Βεβαιωθείτε ότι έχετε τραβήξει ακριβείς εικόνες", + "You have": "Εχεις", + "لَدَيْك": "لَدَيْك", + "image verified": "εικόνα επαληθεύτηκε", + "Next": "Επόμενο", + "There is no help Question here": "Δεν υπάρχει ερώτηση βοήθειας εδώ", + "Call End": "Τερματισμός κλήσης", + "You dont have Points": "Δεν έχετε πόντους", + "You Are Stopped For this Day !": + "Είστε σταματημένοι για αυτήν την ημέρα!", + "You must be charge your Account": + "Πρέπει να χρεώσετε τον Λογαριασμό σας", + "You Refused 3 Rides this Day that is the reason": + "Αυτός είναι ο λόγος που αρνηθήκατε 3 βόλτες αυτή τη μέρα", + "See you Tomorrow!": "Τα λέμε αύριο!", + "لِقَائِنَا غَدًا!": "لِقَائِنَا غَدًا!", + "Recharge my Account": "Επαναφόρτιση του λογαριασμού μου", + "Ok , See you Tomorrow": "Εντάξει τα λέμε αύριο", + "You are Stopped": "Είστε Σταματημένοι", + "Connected": "Συνδεδεμένος", + "Not Connected": "Μη συνδεδεμένο", + "Your are far from passenger location": + "Βρίσκεστε μακριά από την τοποθεσία του επιβάτη", + "go to your passenger location before": + "μεταβείτε στην τοποθεσία του επιβάτη σας πριν", + "Passenger cancel trip": "Ακύρωση ταξιδιού επιβάτη", + "يُلْغِي الرَّاكِب الرِّحْلَة": "يُلْغِي الرَّاكِب الرِّحْلَة", + "You will get cost of your work for this trip": + "Θα λάβετε το κόστος της εργασίας σας για αυτό το ταξίδι", + "in your wallet": "στο πορτοφόλι σου", + "you gain": "κερδίζεις", + "Order Cancelled": "Η παραγγελία ακυρώθηκε", + "Order Cancelled by Passenger": "Η παραγγελία ακυρώθηκε από επιβάτη", + "Success": "Επιτυχία", + "Feedback data saved successfully": + "Τα δεδομένα σχολίων αποθηκεύτηκαν με επιτυχία", + "No Promo for today .": "Δεν υπάρχει προσφορά για σήμερα.", + "Select your destination": "Επιλέξτε τον προορισμό σας", + "Search for your Start point": "Αναζητήστε το σημείο εκκίνησης", + "Search for waypoint": "Αναζήτηση για σημείο αναφοράς", + "Current Location": "Τωρινή τοποθεσία", + "Add Location 1": "Προσθήκη τοποθεσίας 1", + "You must Verify email !.": "Πρέπει να επαληθεύσετε το email !.", + "Cropper": "Θεριστής", + "Saved Sucssefully": "Αποθηκεύτηκε με επιτυχία", + "Select Date": "Επιλέξτε Ημερομηνία", + "Birth Date": "Ημερομηνία γέννησης", + "Ok": "Εντάξει", + "the 500 points equal 30 JOD": "οι 500 βαθμοί ισούνται με 30 JOD", + "the 500 points equal 30 JOD for you": + "οι 500 βαθμοί ισούνται με 30 JOD για εσάς", + "So go and gain your money": + "Πηγαίνετε λοιπόν και κερδίστε τα χρήματά σας", + "فَاسْتَحِقَّ فُلُوسَك وَاكْسِب النِّقَاط": + "فَاسْتَحِقَّ فُلُوسَك وَاكْسِب النِّقَاط", + "token updated": "το διακριτικό ενημερώθηκε", + "Add Location 2": "Προσθήκη τοποθεσίας 2", + "Add Location 3": "Προσθήκη τοποθεσίας 3", + "Add Location 4": "Προσθήκη τοποθεσίας 4", + "Waiting for your location": "Αναμονή για την τοποθεσία σας", + "Search for your destination": "Αναζητήστε τον προορισμό σας", + "Hi! This is": "Γεια! Αυτό είναι", + "I am using": "χρησιμοποιώ", + "to ride with": "να καβαλήσει με", + "as the driver.": "ως οδηγός.", + "is driving a": "οδηγεί α", + "with license plate": "με πινακίδα κυκλοφορίας", + "I am currently located at": "Αυτή τη στιγμή βρίσκομαι στο", + "Please go to Car now": "Παρακαλώ πηγαίνετε στο αυτοκίνητο τώρα", + "If you need to reach me, please contact the driver directly at": + "Εάν θέλετε να επικοινωνήσετε μαζί μου, επικοινωνήστε απευθείας με τον οδηγό στο", + "No Car or Driver Found in your area.": + "Δεν βρέθηκε αυτοκίνητο ή οδηγός στην περιοχή σας.", + "Please Try anther time": "Δοκιμάστε άλλη φορά", + "There no Driver Aplly your order sorry for that": + "Δεν υπάρχει Driver Apply την παραγγελία σας, συγγνώμη για αυτό", + "Trip Cancelled": "Το ταξίδι ακυρώθηκε", + "The Driver Will be in your location soon .": + "Ο οδηγός θα βρίσκεται σύντομα στην τοποθεσία σας.", + "The distance less than 500 meter.": + "Η απόσταση μικρότερη από 500 μέτρα.", + "Promo End !": "Τέλος προσφοράς!", + "There is no notification yet": "Δεν υπάρχει ακόμη ειδοποίηση", + "Use Touch ID or Face ID to confirm payment": + "Χρησιμοποιήστε το Touch ID ή το Face ID για να επιβεβαιώσετε την πληρωμή", + "Contact us for any questions on your order.": + "Επικοινωνήστε μαζί μας για οποιαδήποτε απορία σχετικά με την παραγγελία σας.", + "Pyament Cancelled .": "Η πληρωμή ακυρώθηκε.", + "type here": "πληκτρολογίστε εδώ", + "Scan Driver License": "Άδεια οδήγησης σάρωσης", + "Please put your licence in these border": + "Βάλτε την άδειά σας σε αυτά τα σύνορα", + "Camera not initialized yet": "Η κάμερα δεν έχει αρχικοποιηθεί ακόμα", + "Take Image": "Λήψη εικόνας", + "AI Page": "Σελίδα AI", + "Take Picture Of ID Card": "Βγάλε φωτογραφία της ταυτότητας", + "Take Picture Of Driver License Card": + "Τραβήξτε φωτογραφία της κάρτας άδειας οδήγησης", + "We are process picture please wait": + "Είμαστε εικόνα διαδικασίας, περιμένετε", + "There is no data yet.": "Δεν υπάρχουν ακόμη στοιχεία.", + "Name :": "Ονομα :", + "Drivers License Class:": "Κατηγορία άδειας οδήγησης:", + "Document Number:": "Αριθμός Εγγράφου:", + "Address:": "Διεύθυνση:", + "Height:": "Υψος:", + "Expiry Date:": "Ημερομηνία λήξης:", + "Date of Birth:": "Ημερομηνια γεννησης:", + "You can\"t continue with us .": + "Δεν μπορείτε να συνεχίσετε μαζί μας.", + "You should renew Driver license": + "Θα πρέπει να ανανεώσετε την άδεια οδήγησης", + "Detect Your Face": "Εντοπίστε το πρόσωπό σας", + "Go to next step": "Μεταβείτε στο επόμενο βήμα", + "scan Car License.": "σάρωση άδειας αυτοκινήτου.", + "aاسْتِخْرَاج رُخْصَة السَّيَّارَة.": + "aاسْتِخْرَاج رُخْصَة السَّيَّارَة.", + "Name in arabic": "Όνομα στα αραβικά", + "Drivers License Class": "Κατηγορία άδειας οδήγησης", + "Date of Birth": "Ημερομηνια γεννησης", + "Age": "Ηλικία", + "Lets check Car license": "Ας ελέγξουμε την άδεια αυτοκινήτου", + "Car Kind": "Είδος αυτοκινήτου", + "Car Plate": "Πινακίδα αυτοκινήτου", + "Lets check License Back Face": "Ας ελέγξουμε την Άδεια Πίσω Πρόσωπο", + "Car License Card": "Κάρτα άδειας αυτοκινήτου", + "No image selected yet": "Δεν έχει επιλεγεί ακόμη εικόνα", + "Made :": "Εκανε :", + "model :": "μοντέλο:", + "VIN :": "VIN:", + "year :": "έτος:", + "ُExpire Date": "ημερομηνία λήξης", + "Login Driver": "Πρόγραμμα οδήγησης σύνδεσης", + "Password must br at least 6 character.": + "Ο κωδικός πρόσβασης πρέπει να αποτελείται από τουλάχιστον 6 χαρακτήρες.", + "if you don\"t have account": "αν δεν έχετε λογαριασμό", + "Here recorded trips audio": "Εδώ καταγράφονται τα ταξίδια ήχος", + "Register as Driver": "Εγγραφείτε ως οδηγός", + "Privacy Notice": "Σημείωση απορρήτου", + "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the": + "Επιλέγοντας «Συμφωνώ» παρακάτω, έχω διαβάσει και συμφωνώ με τους Όρους Χρήσης και αναγνωρίζω την", + ". I am at least 18 years of age.": ". Είμαι τουλάχιστον 18 ετών.", + "Log Out Page": "Σελίδα αποσύνδεσης", + "Log Off": "Αποσύνδεση", + "Register Driver": "Εγγραφή προγράμματος οδήγησης", + "Verify Email For Driver": "Επαλήθευση email για πρόγραμμα οδήγησης", + "Admin DashBoard": "Πίνακας ελέγχου διαχειριστή", + "Your name": "Το όνομα σου", + "your ride is applied": "εφαρμόζεται η βόλτα σας", + "Your password": "Ο κωδικός σας", + "H and": "Χέρι", + "LE": "LE", + "JOD": "JOD", + "m": "Μ", + "We search nearst Driver to you": + "Αναζητούμε το πλησιέστερο πρόγραμμα οδήγησης σε εσάς", + "please wait till driver accept your order": + "παρακαλώ περιμένετε έως ότου ο οδηγός αποδεχτεί την παραγγελία σας", + "No accepted orders? Try raising your trip fee to attract riders.": + "Δεν γίνονται δεκτές παραγγελίες; Προσπαθήστε να αυξήσετε τα τέλη ταξιδιού σας για να προσελκύσετε αναβάτες.", + "You should select one": "Θα πρέπει να επιλέξετε ένα", + "The driver accept your order for": + "Ο οδηγός δέχεται την παραγγελία σας για", + "Increase Fee": "Αύξηση Τέλους", + "No, thanks": "Οχι ευχαριστώ", + "The driver on your way": "Ο οδηγός στο δρόμο σας", + "Total price from": "Συνολική τιμή από", + "Order Details Speed": "Στοιχεία παραγγελίας Ταχύτητα", + "Order Applied": "Η παραγγελία εφαρμόστηκε", + "accepted your order": "αποδέχτηκε την παραγγελία σας", + "We regret to inform you that another driver has accepted this order.": + "Με λύπη σας ενημερώνουμε ότι άλλος οδηγός έχει αποδεχτεί αυτήν την παραγγελία.", + "Selected file:": "Επιλεγμένο αρχείο:", + "Your trip cost is": "Το κόστος του ταξιδιού σας είναι", + "this will delete all files from your device": + "Αυτό θα διαγράψει όλα τα αρχεία από τη συσκευή σας", + "you have a negative balance of": "έχετε αρνητικό ισοζύγιο", + "in your": "στο δικό σου", + "Exclusive offers and discounts always with the Sefer app": + "Αποκλειστικές προσφορές και εκπτώσεις πάντα με την εφαρμογή Sefer", + "Please go to Car Driver": + "Παρακαλώ πηγαίνετε στον οδηγό αυτοκινήτου", + "wallet due to a previous trip.": + "πορτοφόλι λόγω προηγούμενου ταξιδιού.", + "Submit Question": "Υποβολή Ερώτησης", + "Please enter your Question.": "Παρακαλώ εισάγετε την ερώτησή σας.", + "Help Details": "Λεπτομέρειες βοήθειας", + "No trip yet found": "Δεν βρέθηκε ακόμη ταξίδι", + "No Response yet.": "Καμία απάντηση ακόμα.", + "You Earn today is": "Κερδίζετε σήμερα είναι", + "You Have in": "Έχετε μέσα", + "Total points is": "Σύνολο πόντων είναι", + "Total Connection Duration:": "Συνολική διάρκεια σύνδεσης:", + "H and": "Χέρι", + "Passenger name :": "Όνομα επιβάτη:", + "Cost Of Trip IS": "Κόστος Ταξιδίου ΕΙΝΑΙ", + "Arrival time": "Ωρα άφιξης", + "arrival time to reach your point": + "ώρα άφιξης για να φτάσετε στο σημείο σας", + "For Speed and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": + "Για ταξίδια Ταχύτητας και Παράδοσης, η τιμή υπολογίζεται δυναμικά. Για Comfort ταξίδια, η τιμή βασίζεται σε χρόνο και απόσταση", + "Hello this is Driver": "Γεια σας, αυτός είναι ο οδηγός", + "Is the Passenger in your Car ?": + "Είναι ο επιβάτης στο αυτοκίνητό σας;", + "Please wait for the passenger to enter the car before starting the trip.": + "Περιμένετε να μπει ο επιβάτης στο αυτοκίνητο πριν ξεκινήσετε το ταξίδι.", + "No ,still Waiting.": "Όχι, ακόμα σε αναμονή.", + "I arrive you": "σε φτάνω", + "I Arrive your site": "Φτάνω στον ιστότοπό σας", + "You are not in near to passenger location": + "Δεν βρίσκεστε κοντά στην τοποθεσία του επιβάτη", + "please go to picker location exactly": + "μεταβείτε ακριβώς στην τοποθεσία επιλογέα", + "You Can Cancel Trip And get Cost of Trip From": + "Μπορείτε να ακυρώσετε το ταξίδι και να λάβετε το κόστος του ταξιδιού από", + "Are you sure to cancel?": "Είστε σίγουροι ότι θα ακυρώσετε;", + "Yes": "Ναί", + "Insert Emergincy Number": "Εισαγάγετε τον αριθμό έκτακτης ανάγκης", + "Best choice for comfort car and flexible route and stops point": + "Η καλύτερη επιλογή για αυτοκίνητο άνεσης και ευέλικτη διαδρομή και σημείο στάσεων", + "Insert": "Εισάγετε", + "This is for delivery or a motorcycle.": + "Αυτό είναι για παράδοση ή μοτοσυκλέτα.", + "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": + "Αυτό το ταξίδι πηγαίνει απευθείας από το σημείο εκκίνησης στον προορισμό σας για μια σταθερή τιμή. Ο οδηγός πρέπει να ακολουθήσει την προγραμματισμένη διαδρομή", + "You can decline a request without any cost": + "Μπορείτε να απορρίψετε ένα αίτημα χωρίς κανένα κόστος", + "Perfect for adventure seekers who want to experience something new and exciting": + "Ιδανικό για όσους αναζητούν την περιπέτεια που θέλουν να ζήσουν κάτι νέο και συναρπαστικό", + "My current location is:": "Η τρέχουσα τοποθεσία μου είναι:", + "and I have a trip on": "και έχω ένα ταξίδι", + "App with Passenger": "Εφαρμογή με επιβάτη", + "مع الراكب": "مع الراكب", + "You will be pay the cost to driver or we will get it from you on next trip": + "Θα πληρώσετε το κόστος στον οδηγό ή θα το λάβουμε από εσάς στο επόμενο ταξίδι", + "Trip has Steps": "Το ταξίδι έχει Βήματα", + "Distance from Passenger to destination is": + "Η απόσταση από τον επιβάτη στον προορισμό είναι", + "price is": "τιμή είναι", + "This ride type does not allow changes to the destination or additional stops": + "Αυτός ο τύπος διαδρομής δεν επιτρέπει αλλαγές στον προορισμό ή πρόσθετες στάσεις", + "This price may be changed": "Αυτή η τιμή μπορεί να αλλάξει", + "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": + "Χωρίς κάρτα SIM, κανένα πρόβλημα! Καλέστε τον οδηγό σας απευθείας μέσω της εφαρμογής μας. Χρησιμοποιούμε προηγμένη τεχνολογία για να διασφαλίσουμε το απόρρητό σας.", + "This ride type allows changes, but the price may increase": + "Αυτός ο τύπος διαδρομής επιτρέπει αλλαγές, αλλά η τιμή μπορεί να αυξηθεί", + "message From passenger": "μήνυμα από επιβάτη", + "Select one message": "Επιλέξτε ένα μήνυμα", + "My location is correct. You can search for me using the navigation app": + "Η τοποθεσία μου είναι σωστή. Μπορείτε να με αναζητήσετε χρησιμοποιώντας την εφαρμογή πλοήγησης", + "I'm waiting for you": "σε περιμένω", + "Hello, I'm at the agreed-upon location": + "Γεια σας, βρίσκομαι στην συμφωνημένη τοποθεσία", + "We noticed the speed is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": + "Παρατηρήσαμε ότι η ταχύτητα ξεπερνά τα 100 km/h. Παρακαλώ επιβραδύνετε για την ασφάλειά σας. Εάν αισθάνεστε ανασφαλείς, μπορείτε να μοιραστείτε τα στοιχεία του ταξιδιού σας με μια επαφή ή να καλέσετε την αστυνομία χρησιμοποιώντας το κόκκινο κουμπί SOS.", + "Warning: Speeding detected!": "Προειδοποίηση: Εντοπίστηκε ταχύτητα!", + "Please help! Contact me as soon as possible.": + "Παρακαλώ βοηθήστε! Επικοινωνήστε μαζί μου το συντομότερο δυνατό.", + "Share Trip Details": "Κοινή χρήση λεπτομερειών ταξιδιού", + "Car Plate is": "Πινακίδα αυτοκινήτου είναι", + "the 300 points equal 300 L.E for you": + "οι 300 βαθμοί ισοδυναμούν με 300 L.E για εσάς", + "So go and gain your money": + "Πηγαίνετε λοιπόν και κερδίστε τα χρήματά σας", + "the 300 points equal 300 L.E": "τα 300 μόρια ισούνται με 300 Λ.Ε", + "The payment was not approved. Please try again.": + "Η πληρωμή δεν εγκρίθηκε. ΠΑΡΑΚΑΛΩ προσπαθησε ξανα.", + "Payment Failed": "Η πληρωμή απέτυχε", + "Error": "Λάθος", + "An error occurred during the payment process.": + "Παρουσιάστηκε σφάλμα κατά τη διαδικασία πληρωμής.", + "The payment was approved.": "Η πληρωμή εγκρίθηκε.", + "Payment Successful": "Επιτυχής Πληρωμή", + "No ride found yet": "Δεν βρέθηκε ακόμη διαδρομή", + "Accept Order": "Αποδοχή παραγγελίας", + "reject your order.": "απορρίψτε την παραγγελία σας.", + "Bottom Bar Example": "Παράδειγμα κάτω γραμμής", + "Driver phone": "Τηλέφωνο προγράμματος οδήγησης", + "Statistics": "Στατιστική", + "Origin": "Προέλευση", + "Destination": "Προορισμός", + "Driver Name": "Όνομα οδηγού", + "Driver Car Plate": "Πινακίδα αυτοκινήτου οδηγού", + "Available for rides": "Διαθέσιμο για βόλτες", + "Scan Id": "Αναγνωριστικό σάρωσης", + "Camera not initilaized yet": "Η κάμερα δεν έχει ενεργοποιηθεί ακόμα", + "Scan ID MklGoogle": "Σάρωση αναγνωριστικού MklGoogle", + "Language": "Γλώσσα", + "Jordan": "Ιορδανία", + "USA": "ΗΠΑ", + "Egypt": "Αίγυπτος", + "Turkey": "Τουρκία", + "Saudi Arabia": "Σαουδική Αραβία", + "Qatar": "Κατάρ", + "Bahrain": "Μπαχρέιν", + "Kuwait": "Κουβέιτ", + "But you have a negative salary of": "Αλλά έχετε αρνητικό μισθό", + "Promo Code": "Κωδικός προσφοράς", + "Your trip distance is": "Η απόσταση του ταξιδιού σας είναι", + "Enter promo code": "Εισαγάγετε τον κωδικό προσφοράς", + "You have promo!": "Έχετε promo!", + "Cost Duration": "Διάρκεια κόστους", + "Duration is": "Διάρκεια είναι", + "Leave": "Αδεια", + "Join": "Συμμετοχή", + "You Should be select reason.": "Θα πρέπει να επιλέξετε τον λόγο.", + "\$": "\$", + "Waiting for Driver ...": "Αναμονή για τον οδηγό...", + "Latest Recent Trip": "Τελευταίο πρόσφατο ταξίδι", + "from your list": "από τη λίστα σας", + "Do you want to change Work location": + "Θέλετε να αλλάξετε την τοποθεσία εργασίας", + "Do you want to change Home location": + "Θέλετε να αλλάξετε την τοποθεσία του σπιτιού", + "We Are Sorry That we dont have cars in your Location!": + "Λυπούμαστε που δεν έχουμε αυτοκίνητα στην τοποθεσία σας!", + "Choose from Map": "Επιλέξτε από τον χάρτη", + "Pick your ride location on the map - Tap to confirm": + "Επιλέξτε την τοποθεσία της διαδρομής σας στο χάρτη - Πατήστε για επιβεβαίωση", + "To Work": "Για να δουλέψω", + "Are you want to go this site": + "Θέλετε να πάτε σε αυτόν τον ιστότοπο", + "Closest & Cheapest": "Πλησιέστερο & φθηνότερο", + "Work Saved": "Η εργασία αποθηκεύτηκε", + "Sefer is the ride-hailing app that is safe, reliable, and accessible.": + "Το Sefer είναι η εφαρμογή μεταφοράς που είναι ασφαλής, αξιόπιστη και προσβάσιμη.", + "With Sefer, you can get a ride to your destination in minutes.": + "Με το Sefer, μπορείτε να φτάσετε στον προορισμό σας μέσα σε λίγα λεπτά.", + "Sefer is committed to safety, and all of our captains are carefully screened and background checked.": + "Ο Sefer έχει δεσμευτεί για την ασφάλεια και όλοι οι καπετάνιοι μας ελέγχονται προσεκτικά και ελέγχονται το ιστορικό.", + "To Home": "Στο σπίτι", + "Home Saved": "Αρχική σελίδα αποθηκεύτηκε", + "Destination selected": "Επιλέχθηκε ο προορισμός", + "Now select start pick": "Τώρα επιλέξτε έναρξη επιλογής", + "Pick from map": "Επιλογή από τον χάρτη", + "Click here point": "Κάντε κλικ εδώ στο σημείο", + "No Car in your site. Sorry!": + "Δεν υπάρχει αυτοκίνητο στον ιστότοπό σας. Συγνώμη!", + "Nearest Car for you about": "Πλησιέστερο αυτοκίνητο για εσάς", + "N/A": "N/A", + "From :": "Από :", + "Get Details of Trip": "Λάβετε λεπτομέρειες για το ταξίδι", + "If you want add stop click here": + "Αν θέλετε να προσθέσετε στάση κάντε κλικ εδώ", + "Driver": "Οδηγός", + "Where you want go": "Εκεί που θέλεις να πας", + "My Card": "Η κάρτα μου", + "Start Record": "Έναρξη εγγραφής", + "Wallet": "Πορτοφόλι", + "History of Trip": "Ιστορία του ταξιδιού", + "Helping Center": "Κέντρο Βοήθειας", + "Record saved": "Η εγγραφή αποθηκεύτηκε", + "Trips recorded": "Ταξίδια καταγράφηκαν", + "Select Your Country": "Επιλέξτε τη χώρα σας", + "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": + "Για να διασφαλίσετε ότι λαμβάνετε τις πιο ακριβείς πληροφορίες για την τοποθεσία σας, επιλέξτε τη χώρα σας παρακάτω. Αυτό θα σας βοηθήσει να προσαρμόσετε την εμπειρία και το περιεχόμενο της εφαρμογής στη χώρα σας.", + "Are you sure to delete recorded files": + "Είστε βέβαιοι ότι θα διαγράψετε εγγεγραμμένα αρχεία", + "Select recorded trip": "Επιλέξτε ηχογραφημένο ταξίδι", + "Card Number": "Αριθμός κάρτας", + "Hi, Where to": "Γεια, πού να", + "Pick your destination from Map": + "Επιλέξτε τον προορισμό σας από τον Χάρτη", + "Add Stops": "Προσθήκη στάσεων", + "Get Direction": "Λήψη κατεύθυνσης", + "Add Location": "Προσθήκη τοποθεσίας", + "Switch Rider": "Switch Rider", + "You will arrive to your destination after timer end.": + "Θα φτάσετε στον προορισμό σας μετά το τέλος του χρονοδιακόπτη.", + "You can cancel trip": "Μπορείτε να ακυρώσετε το ταξίδι", + "The driver waitting you in picked location .": + "Ο οδηγός σας περιμένει στην επιλεγμένη τοποθεσία.", + "Pay with Your": "Πληρώστε με το δικό σας", + "Pay with Credit Card": "Πληρώστε με πιστωτική κάρτα", + "Payment History": "Ιστορικό πληρωμών", + "Show Promos to Charge": "Εμφάνιση προσφορών προς χρέωση", + "Point": "Σημείο", + "Driver Wallet": "Πορτοφόλι προγράμματος οδήγησης", + "Total Points is": "Συνολικοί Πόντοι είναι", + "Total Budget from trips is": + "Ο συνολικός προϋπολογισμός από τα ταξίδια είναι", + "Total Amount:": "Συνολικό ποσό:", + "Total Budget from trips by": + "Συνολικός προϋπολογισμός από ταξίδια έως", + "Credit card is": "Η πιστωτική κάρτα είναι", + "بطاقة الائتمان هي": "بطاقة الائتمان هي", + "This amount for all trip I get from Passengers": + "Αυτό το ποσό για όλα τα ταξίδια παίρνω από τους επιβάτες", + "Pay from my budget": "Πληρώνω από τον προϋπολογισμό μου", + "This amount for all trip I get from Passengers and Collected For me in": + "Αυτό το ποσό για όλα τα ταξίδια παίρνω από τους επιβάτες και συλλέγεται για μένα", + "You can buy points from your budget": + "Μπορείτε να αγοράσετε πόντους από τον προϋπολογισμό σας", + "insert amount": "εισαγάγετε ποσό", + "You can buy Points to let you online": + "Μπορείτε να αγοράσετε πόντους για να σας επιτρέψουν στο διαδίκτυο", + "by this list below": "από αυτή τη λίστα παρακάτω", + "من خلال القائمة أدناه": "من خلال القائمة أدناه", + "Create Wallet to receive your money": + "Δημιουργήστε Πορτοφόλι για να λάβετε τα χρήματά σας", + "Enter your feedback here": "Εισαγάγετε τα σχόλιά σας εδώ", + "Please enter your feedback.": "Εισαγάγετε τα σχόλιά σας.", + "Feedback": "Ανατροφοδότηση", + "Submit": "υποβάλλουν", + "Click here to Show it in Map": + "Κάντε κλικ εδώ για να το εμφανίσετε στον χάρτη", + "Canceled": "Ακυρώθηκε", + "Type your Email": "Πληκτρολογήστε το email σας", + "No I want": "ΟΧΙ θελω", + "Email is": "Το email είναι", + "Phone Number is": "Ο αριθμός τηλεφώνου είναι", + "Date of Birth is": "Ημερομηνία γέννησης είναι", + "Sex is": "Το σεξ είναι", + "Car Details": "Στοιχεία αυτοκινήτου", + "VIN is": "VIN είναι", + "Color is": "Το χρώμα είναι", + "Make is": "Κάνετε είναι", + "Model is": "Μοντέλο είναι", + "Year is": "Έτος είναι", + "Expiration Date": "Ημερομηνία λήξης", + "Edit Your data": "Επεξεργαστείτε τα δεδομένα σας", + "write vin for your car": "γράψε vin για το αυτοκίνητό σου", + "VIN": "VIN", + "write Color for your car": "γράψτε Χρώμα για το αυτοκίνητό σας", + "write Make for your car": "γράψτε Φτιάξτε για το αυτοκίνητό σας", + "write Model for your car": "γράψτε Μοντέλο για το αυτοκίνητό σας", + "write Year for your car": "γράψτε το έτος για το αυτοκίνητό σας", + "write Expiration Date for your car": + "γράψτε Ημερομηνία Λήξης για το αυτοκίνητό σας", + "Tariffs": "τιμολόγια", + "Minimum fare": "Ελάχιστος ναύλος", + "Maximum fare": "Μέγιστος ναύλος", + "Flag-down fee": "Χρέωση σημαίας", + "Including Tax": "Συμπεριλαμβανομένου του φόρου", + "BookingFee": "Τέλος κράτησης", + "Morning": "Πρωί", + "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": + "από τις 07:30 έως τις 10:30 (Πέμπτη, Παρασκευή, Σάββατο, Δευτέρα)", + "Evening": "Απόγευμα", + "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": + "από τις 12:00 έως τις 15:00 (Πέμπτη, Παρασκευή, Σάββατο, Δευτέρα)", + "Night": "Νύχτα", + "You have in account": "Έχετε υπόψη σας", + "Select Country": "Επιλέξτε Χώρα", + "Ride Today :": "Βόλτα σήμερα:", + "After this period": "Μετά από αυτό το διάστημα", + "You can\"t cancel!": "Δεν μπορείτε να ακυρώσετε!", + "لا تستطيع الغاء الرحله": "لا تستطيع الغاء الرحله", + "from 23:59 till 05:30": "από τις 23:59 έως τις 05:30", + "Rate Driver": "Rate Driver", + "Total Cost is": "Το συνολικό κόστος είναι", + "Write note": "Γράψε σημείωση", + "Time to arrive": "Ώρα να φτάσετε", + "Ride Summaries": "Περιλήψεις διαδρομής", + "Total Cost": "Συνολικό κόστος", + "Average of Hours of": "Μέσος όρος ωρών του", + "is ON for this month": "είναι ΕΝΕΡΓΟ για αυτόν τον μήνα", + "Days": "Ημέρες", + "Total Hours on month": "Σύνολο ωρών ανά μήνα", + "Counts of Hours on days": "Μετρήσεις ωρών σε ημέρες", + "OrderId": "Αριθμός Παραγγελίας", + "created time": "δημιούργησε χρόνο", + "Speed Over": "Speed ​​Over", + "I will slow down": "θα επιβραδύνω", + "Map Passenger": "Επιβάτης χάρτη", + "Be Slowly": "Να είσαι αργά", + "If you want to make Google Map App run directly when you apply order": + "Εάν θέλετε να κάνετε την εφαρμογή Google Map να εκτελείται απευθείας κατά την υποβολή της παραγγελίας", + "You can change the language of the app": + "Μπορείτε να αλλάξετε τη γλώσσα της εφαρμογής", + "Your Budget less than needed": + "Ο προϋπολογισμός σας είναι μικρότερος από όσο χρειάζεται", + "You can change the Country to get all features": + "Μπορείτε να αλλάξετε τη χώρα για να λάβετε όλες τις λειτουργίες", + "Change Country": "Αλλαξε χώρα" + }, + "ur": { + "Sign In by Apple": "ایپل کے ذریعے سائن ان کریں۔", + "Sign In by Google": "گوگل کے ذریعے سائن ان کریں۔", + "How do I request a ride?": "میں سواری کی درخواست کیسے کروں؟", + "Step-by-step instructions on how to request a ride through the Sefer app.": + "سیفر ایپ کے ذریعے سواری کی درخواست کرنے کے طریقہ سے متعلق مرحلہ وار ہدایات۔", + "What types of vehicles are available?": + "کس قسم کی گاڑیاں دستیاب ہیں؟", + "Sefer offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": + "سیفر آپ کی ضروریات کو پورا کرنے کے لیے گاڑیوں کے متعدد اختیارات پیش کرتا ہے، بشمول معیشت، سکون اور عیش و آرام۔ وہ اختیار منتخب کریں جو آپ کے بجٹ اور مسافروں کی تعداد کے مطابق ہو۔", + "How can I pay for my ride?": + "میں اپنی سواری کی ادائیگی کیسے کر سکتا ہوں؟", + "Sefer offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": + "سیفر آپ کی سہولت کے لیے ادائیگی کے متعدد طریقے پیش کرتا ہے۔ سواری کی تصدیق کے دوران نقد ادائیگی یا کریڈٹ/ڈیبٹ کارڈ کی ادائیگی کے درمیان انتخاب کریں۔", + "Can I cancel my ride?": "کیا میں اپنی سواری منسوخ کر سکتا ہوں؟", + "Yes, you can cancel your ride under certain conditions (e.g., before driver is assigned). See the Sefer cancellation policy for details.": + "ہاں، آپ اپنی سواری کو کچھ شرائط کے تحت منسوخ کر سکتے ہیں (جیسے، ڈرائیور کو تفویض کرنے سے پہلے)۔ تفصیلات کے لیے سیفر کینسلیشن پالیسی دیکھیں۔", + "Driver Registration & Requirements": "ڈرائیور کی رجسٹریشن اور تقاضے", + "How can I register as a driver?": + "میں ڈرائیور کے طور پر کیسے رجسٹر ہو سکتا ہوں؟", + "What are the requirements to become a driver?": + "ڈرائیور بننے کے لیے کیا تقاضے ہیں؟", + "Visit our website or contact Sefer support for information on driver registration and requirements.": + "ہماری ویب سائٹ ملاحظہ کریں یا ڈرائیور کی رجسٹریشن اور ضروریات کے بارے میں معلومات کے لیے سیفر سپورٹ سے رابطہ کریں۔", + "How do I communicate with the other party (passenger/driver)?": + "میں دوسری پارٹی (مسافر/ڈرائیور) کے ساتھ کیسے بات چیت کروں؟", + "Sefer provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": + "سیفر آپ کو اپنی سواری کے دوران اپنے ڈرائیور یا مسافر سے بات چیت کرنے کی اجازت دینے کے لیے ایپ میں چیٹ کی فعالیت فراہم کرتا ہے۔", + "What safety measures does Sefer offer?": + "سیفر کیا حفاظتی اقدامات پیش کرتا ہے؟", + "Sefer prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": + "سیفر آپ کی حفاظت کو ترجیح دیتا ہے۔ ہم ڈرائیور کی تصدیق، درون ایپ ٹرپ ٹریکنگ، اور ہنگامی رابطہ کے اختیارات جیسی خصوصیات پیش کرتے ہیں۔", + "Frequently Questions": "اکثر سوالات", + "User does not exist.": "صارف موجود نہیں.", + "We need your phone number to contact you and to help you.": + "ہمیں آپ سے رابطہ کرنے اور آپ کی مدد کرنے کے لیے آپ کے فون نمبر کی ضرورت ہے۔", + "You will recieve code in sms message": + "آپ کو ایس ایم ایس پیغام میں کوڈ موصول ہوگا۔", + "Please enter": "درج کریں", + "We need your phone number to contact you and to help you receive orders.": + "ہمیں آپ سے رابطہ کرنے اور آرڈرز وصول کرنے میں مدد کے لیے آپ کے فون نمبر کی ضرورت ہے۔", + "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": + "آپ کے مجرمانہ ریکارڈ پر موجود پورا نام آپ کے ڈرائیور کے لائسنس پر موجود نام سے مماثل نہیں ہے۔ براہ کرم تصدیق کریں اور درست دستاویزات فراہم کریں۔", + "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": + "آپ کے ڈرائیور کے لائسنس پر موجود قومی نمبر آپ کی شناختی دستاویز پر موجود قومی نمبر سے مماثل نہیں ہے۔ براہ کرم تصدیق کریں اور درست دستاویزات فراہم کریں۔", + "Capture an Image of Your Criminal Record": + "اپنے مجرمانہ ریکارڈ کی تصویر حاصل کریں۔", + "IssueDate": "تاریخ اجراء", + "Capture an Image of Your car license front": + "اپنے کار لائسنس کے سامنے کی تصویر کھینچیں۔", + "Capture an Image of Your ID Document front": + "اپنی شناختی دستاویز کے سامنے کی تصویر کھینچیں۔", + "NationalID": "قومی شناختی", + "FullName": "پورا نام", + "InspectionResult": "معائنہ کا نتیجہ", + "Criminal Record": "مجرمانہ ریکارڈ", + "The email or phone number is already registered.": + "ای میل یا فون نمبر پہلے ہی رجسٹرڈ ہے۔", + "To become a ride-sharing driver on the Sefer app, you need to upload your driver\"s license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Sefer app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": + "سیفر ایپ پر رائیڈ شیئرنگ ڈرائیور بننے کے لیے، آپ کو اپنے ڈرائیور کا لائسنس، شناختی دستاویز، اور کار کی رجسٹریشن کی دستاویز اپ لوڈ کرنے کی ضرورت ہے۔ ہمارا AI سسٹم فوری طور پر صرف 2-3 منٹ میں ان کی صداقت کا جائزہ لے کر تصدیق کرے گا۔ اگر آپ کی دستاویزات منظور شدہ ہیں، آپ سیفر ایپ پر بطور ڈرائیور کام کرنا شروع کر سکتے ہیں، براہ کرم نوٹ کریں، جعلی دستاویزات جمع کروانا ایک سنگین جرم ہے اور اس کے نتیجے میں فوری طور پر برطرفی اور قانونی نتائج برآمد ہو سکتے ہیں۔", + "Documents check": "دستاویزات کی جانچ پڑتال", + "Driver's License": "ڈرائیور کا لائسنس", + "License Type": "لائسنس کی قسم", + "National Number": "قومی نمبر", + "Name (Arabic)": "نام (عربی)", + "Name (English)": "نام (انگریزی)", + "Address": "پتہ", + "Issue Date": "تاریخ اجراء", + "Expiry Date": "خاتمے کی تاریخ", + "License Categories": "لائسنس کے زمرے", + "driver_license": "ڈرائیور لائسنس", + "Capture an Image of Your Driver License": + "اپنے ڈرائیور لائسنس کی تصویر کھینچیں۔", + "ID Documents Back": "شناختی دستاویزات واپس", + "National ID": "قومی شناختی", + "Occupation": "پیشہ", + "Gender": "صنف", + "Religion": "مذہب", + "Marital Status": "ازدواجی حیثیت", + "Full Name (Marital)": "پورا نام (ازدواجی)", + "Expiration Date": "میعاد ختم ہونے کی تاریخ", + "Capture an Image of Your ID Document Back": + "اپنی شناختی دستاویز کی تصویر واپس لیں۔", + "ID Documents Front": "شناختی دستاویزات سامنے", + "First Name": "پہلا نام", + "CardID": "کارڈ آئی ڈی", + "Full Name": "پورا نام", + "Vehicle Details Front": "گاڑی کی تفصیلات سامنے", + "Plate Number": "پلیٹ نمبر", + "Owner Name": "مالک کا نام", + "Vehicle Details Back": "گاڑی کی تفصیلات واپس", + "Make": "بنائیں", + "Model": "ماڈل", + "Year": "سال", + "Chassis": "چیسس", + "Color": "رنگ", + "Displacement": "نقل مکانی", + "Fuel": "ایندھن", + "Tax Expiry Date": "ٹیکس ختم ہونے کی تاریخ", + "Inspection Date": "معائنہ کی تاریخ", + "Capture an Image of Your car license back": + "اپنے کار لائسنس کی تصویر واپس کیپچر کریں۔", + "Capture an Image of Your Driver’s License": + "اپنے ڈرائیور کے لائسنس کی تصویر کھینچیں۔", + "Sign in with Google for easier email and name entry": + "آسان ای میل اور نام کے اندراج کے لیے گوگل کے ساتھ سائن ان کریں۔", + "You will choose allow all the time to be ready receive orders": + "آپ آرڈر وصول کرنے کے لیے ہر وقت تیار رہنے کا انتخاب کریں گے۔", + "Welcome to Sefer!": "Sefer میں خوش آمدید!", + "Get to your destination quickly and easily.": + "جلدی اور آسانی سے اپنی منزل تک پہنچیں۔", + "Enjoy a safe and comfortable ride.": + "ایک محفوظ اور آرام دہ سواری کا لطف اٹھائیں۔", + "Choose Language": "زبان کا انتخاب کریں۔", + "Login": "لاگ ان کریں", + "Pay with Wallet": "Wallet کے ساتھ ادائیگی کریں۔", + "Invalid MPIN": "غلط MPIN", + "Invalid OTP": "غلط OTP", + "Enter your email address": "اپنا ای میل کا پتا لکھو", + "Please enter Your Email.": "براہ کرم اپنا ای میل درج کریں۔", + "Enter your phone number": "اپنا فون نمبر درج کریں۔", + "Please enter your phone number.": "براہ کرم اپنا فون نمبر درج کریں۔", + "Please enter Your Password.": + "برائے مہربانی اپنا پاس ورڈ داخل کریں.", + "Submit": "جمع کرائیں", + "if you dont have account": "اگر آپ کے پاس اکاؤنٹ نہیں ہے۔", + "Register": "رجسٹر کریں۔", + "Accept Ride's Terms & Review Privacy Notice": + "سواری کی شرائط قبول کریں اور پرائیویسی نوٹس کا جائزہ لیں۔", + "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": + "ذیل میں 'میں اتفاق کرتا ہوں' کو منتخب کرکے، میں نے استعمال کی شرائط کا جائزہ لیا اور اس سے اتفاق کیا اور رازداری کے نوٹس کو تسلیم کیا۔ میری عمر کم از کم 18 سال ہے۔", + "I Agree": "میں راضی ہوں", + "First name": "پہلا نام", + "Enter your first name": "اپنا پہلا نام درج کریں۔", + "Please enter your first name.": "براہ کرم اپنا پہلا نام درج کریں۔", + "Last name": "آخری نام", + "Enter your last name": "اپنا آخری نام درج کریں۔", + "Please enter your last name.": "براہ کرم اپنا آخری نام درج کریں۔", + "City": "شہر", + "Please enter your City.": "براہ کرم اپنا شہر درج کریں۔", + "Male": "مرد", + "Female": "عورت", + "Verify Email": "ای میل کی تصدیق کریں۔", + "We sent 5 digit to your Email provided": + "ہم نے آپ کے فراہم کردہ ای میل پر 5 ہندسے بھیجے ہیں۔", + "5 digit": "5 ہندسہ", + "Send Verification Code": "تصدیقی کوڈ بھیجیں۔", + "Your Ride Duration is": "آپ کی سواری کا دورانیہ ہے۔", + "You will be thier in": "آپ اس میں شامل ہوں گے۔", + "You trip distance is": "آپ کے سفر کا فاصلہ ہے۔", + "Fee is": "فیس ہے۔", + "From :": "منجانب:", + "To :": "کو:", + "Add Promo": "پرومو شامل کریں۔", + "Confirm Selection": "انتخاب کی تصدیق کریں۔", + "distance is": "فاصلہ ہے", + "duration is": "مدت ہے", + "I don't need a ride anymore": "مجھے اب سواری کی ضرورت نہیں ہے۔", + "I was just trying the application": + "میں صرف درخواست کی کوشش کر رہا تھا", + "No driver accepted my request": + "کسی ڈرائیور نے میری درخواست قبول نہیں کی۔", + "I added the wrong pick-up/drop-off location": + "میں نے غلط پک اپ/ڈراپ آف مقام شامل کیا۔", + "I don't have a reason": "میرے پاس کوئی وجہ نہیں ہے۔", + "Other": "دیگر", + "Can we know why you want to cancel Ride ?": + "کیا ہم جان سکتے ہیں کہ آپ سواری کیوں منسوخ کرنا چاہتے ہیں؟", + "Cancel Ride": "سواری منسوخ کریں۔", + "Add Payment Method": "ادائیگی کا طریقہ شامل کریں۔", + "Your Wallet balance is": "آپ کا والیٹ بیلنس ہے۔", + "Ride Wallet": "والیٹ کی سواری کریں۔", + "Payment Method": "ادائیگی کا طریقہ", + "Type here Place": "یہاں جگہ ٹائپ کریں۔", + "Are You sure to ride to": "کیا آپ کو یقینی طور پر سوار ہونا ہے۔", + "Confirm": "تصدیق کریں۔", + "Back": "پیچھے", + "You are Delete": "آپ ڈیلیٹ ہیں۔", + "Deleted": "حذف کر دیا گیا۔", + "You Dont Have Any places yet !": + "آپ کے پاس ابھی تک کوئی جگہ نہیں ہے!", + "Favorite Places": "پسندیدہ مقامات", + "From : Current Location": "منجانب: موجودہ مقام", + "Where to": "کہاں سے", + "Notifications": "اطلاعات", + "Profile": "پروفائل", + "Home": "گھر", + "My Cared": "میری دیکھ بھال", + "Add Card": "کارڈ شامل کریں۔", + "Add Credit Card": "کریڈٹ کارڈ شامل کریں۔", + "Please enter the cardholder name": + "براہ کرم کارڈ ہولڈر کا نام درج کریں۔", + "Please enter the expiry date": + "براہ کرم میعاد ختم ہونے کی تاریخ درج کریں۔", + "Please enter the CVV code": "براہ کرم CVV کوڈ درج کریں۔", + "Go To Favorite Places": "پسندیدہ مقامات پر جائیں۔", + "Go to this Target": "اس ٹارگٹ پر جائیں۔", + "My Profile": "میری پروفائل", + "Sign Out": "باہر جائیں", + "Home Page": "ہوم پیج", + "Are you want to go to this site": + "کیا آپ اس سائٹ پر جانا چاہتے ہیں؟", + "MyLocation": "میرا مقام", + "my location": "میرا مقام", + "Target": "ہدف", + "Update": "اپ ڈیٹ", + "You Should choose rate figure": + "آپ کو شرح کے اعداد و شمار کا انتخاب کرنا چاہئے۔", + "Login Captin": "کیپٹن لاگ ان کریں۔", + "Register Captin": "کیپٹن کو رجسٹر کریں۔", + "Send Verfication Code": "تصدیقی کوڈ بھیجیں۔", + "KM": "KM", + "End Ride": "سواری ختم کریں۔", + "Minute": "منٹ", + "Go to passenger Location now": "ابھی مسافر کے مقام پر جائیں۔", + "Duration of the Ride is": "سواری کا دورانیہ ہے۔", + "Distance of the Ride is": "سواری کا فاصلہ ہے۔", + "Name of the Passenger is": "مسافر کا نام ہے۔", + "Hello this is Captain": "ہیلو یہ کیپٹن ہے۔", + "Start the Ride": "سواری شروع کریں۔", + "Please Wait If passenger want To Cancel!": + "اگر مسافر منسوخ کرنا چاہتے ہیں تو براہ کرم انتظار کریں!", + "Total Duration:": "کل دورانیہ:", + "Active Duration:": "فعال دورانیہ:", + "Waiting for Captin ...": "کپتان کا انتظار ہے...", + "Age is": "عمر ہے۔", + "Rating is": "درجہ بندی ہے۔", + "to arrive you.": "آپ تک پہنچنے کے لیے", + "Order History": "آرڈر کی تاریخ", + "My Wallet": "میرا بٹوہ", + "Tariff": "ٹیرف", + "Settings": "ترتیبات", + "Feed Back": "فیڈ بیک", + "Promos": "پروموز", + "Please enter a valid 16-digit card number": + "براہ کرم ایک درست 16 ہندسوں والا کارڈ نمبر درج کریں۔", + "Add Phone": "فون شامل کریں۔", + "Please enter a phone number": "براہ کرم ایک فون نمبر درج کریں۔", + "You dont Add Emergency Phone Yet!": + "آپ نے ابھی تک ایمرجنسی فون شامل نہیں کیا!", + "You will arrive to your destination after": + "اس کے بعد آپ اپنی منزل پر پہنچ جائیں گے۔", + "You can cancel Ride now": "آپ ابھی سواری منسوخ کر سکتے ہیں۔", + "You Can cancel Ride After Captain did not come in the time": + "کپتان کے وقت پر نہ آنے کے بعد آپ سواری منسوخ کر سکتے ہیں۔", + "If you in Car Now. Press Start The Ride": + "اگر آپ ابھی کار میں ہیں۔ سٹارٹ دی رائڈ کو دبائیں۔", + "You Dont Have Any amount in": "آپ کے پاس کوئی رقم نہیں ہے۔", + "Wallet!": "پرس!", + "You Have": "آپ کے پاس ہے", + "Save Credit Card": "کریڈٹ کارڈ محفوظ کریں۔", + "Show Promos": "پروموز دکھائیں۔", + "10 and get 4% discount": "10 اور 4% ڈسکاؤنٹ حاصل کریں۔", + "20 and get 6% discount": "20 اور 6% ڈسکاؤنٹ حاصل کریں۔", + "40 and get 8% discount": "40 اور 8% ڈسکاؤنٹ حاصل کریں۔", + "100 and get 11% discount": "100 اور 11% ڈسکاؤنٹ حاصل کریں۔", + "Pay with Your PayPal": "اپنے پے پال سے ادائیگی کریں۔", + "You will choose one of above !": + "آپ اوپر میں سے ایک کا انتخاب کریں گے!", + "Cancel": "منسوخ کریں۔", + "Delete My Account": "میرا اکاؤنٹ حذف کریں۔", + "Edit Profile": "پروفائل میں ترمیم کریں", + "Name": "نام", + "Update Gender": "جنس کو اپ ڈیٹ کریں۔", + "Education": "تعلیم", + "Update Education": "تعلیم کو اپ ڈیٹ کریں۔", + "Employment Type": "ملازمت کی قسم", + "SOS Phone": "SOS فون", + "High School Diploma": "ہائی اسکول ڈپلومہ", + "Associate Degree": "ایسوسی ایٹ ڈگری", + "Bachelor's Degree": "بیچلر ڈگری", + "Master's Degree": "ماسٹر ڈگری", + "Doctoral Degree": "ڈاکٹریٹ کی ڈگری", + "Promos For today": "آج کے لیے پروموز", + "Copy this Promo to use it in your Ride!": + "اس پرومو کو اپنی سواری میں استعمال کرنے کے لیے اسے کاپی کریں!", + "To change some Settings": "کچھ ترتیبات کو تبدیل کرنے کے لیے", + "To change Language the App": "ایپ کی زبان کو تبدیل کرنے کے لیے", + "Order Request Page": "آرڈر کی درخواست کا صفحہ", + "Rouats of Trip": "سفر کے راستے", + "Passenger Name is": "مسافر کا نام ہے۔", + "Total From Passenger is": "مسافر سے ٹوٹل ہے۔", + "Duration To Passenger is": "مسافر کا دورانیہ ہے۔", + "Distance To Passenger is": "مسافر سے فاصلہ ہے۔", + "Total For You is": "آپ کے لیے ٹوٹل ہے۔", + "Distance is": "فاصلہ ہے۔", + "KM": "KM", + "Duration of Trip is": "سفر کا دورانیہ ہے۔", + "Minutes": "منٹس", + "Apply Order": "آرڈر اپلائی کریں۔", + "Refuse Order": "حکم سے انکار", + "Rate Captain": "کیپٹن کو ریٹ کریں۔", + "Enter your Note": "اپنا نوٹ درج کریں۔", + "Type something...": "کچھ ٹائپ کریں...", + "Submit rating": "درجہ بندی جمع کروائیں۔", + "Rate Passenger": "مسافر کو ریٹ کریں۔", + "Ride Summary": "سواری کا خلاصہ", + "welcome_message": "خوش آمدید_پیغام", + "app_description": "app_description", + "get_to_destination": "منزل_تک_جائیں", + "get_a_ride": "ایک_سوار حاصل کریں۔", + "safe_and_comfortable": "محفوظ_اور_آرام دہ", + "committed_to_safety": "حفاظت_کے_لئے عزم", + "Driver Applied the Ride for You": + "ڈرائیور نے آپ کے لیے سواری کا اطلاق کیا۔", + "Show latest promo": "تازہ ترین پرومو دکھائیں۔", + "Cancel Trip": "دورہ منسوخ کریں۔", + "Passenger Cancel Trip": "مسافر سفر منسوخ کر دیں۔", + "Please stay on the picked point.": + "براہ کرم منتخب کردہ نقطہ پر رہیں۔", + "Trip is Begin": "سفر شروع ہے۔", + "Hi ,I will go now": "ہیلو، میں اب جاؤں گا۔", + "Passenger come to you": "مسافر تیرے پاس آئے", + "Hi ,I Arrive your site": "ہیلو، میں آپ کی سائٹ پر پہنچ گیا ہوں۔", + "Driver Finish Trip": "ڈرائیور کا سفر ختم", + "you will pay to Driver": "آپ ڈرائیور کو ادائیگی کریں گے۔", + "Driver Cancel Your Trip": "ڈرائیور آپ کا سفر منسوخ کر دیں۔", + "you will pay to Driver you will be pay the cost of driver time look to your SEFER Wallet": + "آپ ڈرائیور کو ادائیگی کریں گے آپ کو ڈرائیور کے وقت کی قیمت آپ کے SEFER والیٹ کو ادا کی جائے گی۔", + "I will go now": "میں اب چلوں گا", + "You Have Tips": "آپ کے پاس تجاویز ہیں۔", + "tips": "تجاویز", + "Total is": "کل ہے۔", + "الْمَجْمُوع هُوَ": "الْمَجْمُوع هُوَ", + "No,I want": "نہیں، میں چاہتا ہوں۔", + "Your fee is": "آپ کی فیس ہے۔", + "Do you want to pay Tips for this Driver": + "کیا آپ اس ڈرائیور کے لیے ٹپس ادا کرنا چاہتے ہیں؟", + "Tip is": "ٹپ ہے۔", + "Tip is": "ٹپ ہے۔", + "Camera Access Denied.": "کیمرے تک رسائی سے انکار کر دیا گیا۔", + "Open Settings": "ترتیبات کھولیں۔", + "GPS Required Allow !.": "GPS کی اجازت کی ضرورت ہے!", + "Your Account is Deleted": "آپ کا اکاؤنٹ حذف ہو گیا ہے۔", + "Are you sure to delete your account?": + "کیا آپ واقعی اپنا اکاؤنٹ حذف کرنا چاہتے ہیں؟", + "Your data will be erased after 2 weeks": + "آپ کا ڈیٹا 2 ہفتوں کے بعد مٹا دیا جائے گا۔", + "And you will can't return to use app after 1 month": + "اور آپ 1 ماہ کے بعد ایپ استعمال کرنے پر واپس نہیں آسکیں گے۔", + "وَلَن تَسْتَطِيع اسْتِخْدَام التَّطْبِيق مَرَّة أُخْرَى بَعْد شَهْر": + "وَلَن تَسْتَطِيع اسْتِخْدَام التَّطْبِيق مَرَّة أُخْرَى بَعْد شَهْر", + "Enter Your First Name": "اپنا پہلا نام درج کریں۔", + "Are you Sure to LogOut?": "کیا آپ کو لاگ آؤٹ کرنے کا یقین ہے؟", + "Email Wrong": "ای میل غلط", + "Email you inserted is Wrong.": + "آپ نے جو ای میل داخل کی ہے وہ غلط ہے۔", + "You have finished all times": "آپ نے ہر وقت ختم کر دیا ہے۔", + "if you want help you can email us here": + "اگر آپ مدد چاہتے ہیں تو آپ ہمیں یہاں ای میل کر سکتے ہیں۔", + "Thanks": "شکریہ", + "Email Us": "ہمیں ای میل کریں", + "I cant register in your app in face detection": + "میں چہرے کا پتہ لگانے میں آپ کی ایپ میں اندراج نہیں کر سکتا", + "Hi": "ہائے", + "No face detected": "کسی چہرے کا پتہ نہیں چلا", + "Image detecting result is": "تصویر کا پتہ لگانے کا نتیجہ ہے۔", + "from 3 times Take Attention": "3 بار توجہ دیں۔", + "Be sure for take accurate images please": + "براہ کرم درست تصاویر لینے کا یقین رکھیں", + "You have": "آپ کے پاس ہے", + "لَدَيْك": "لَدَيْك", + "image verified": "تصویر کی تصدیق", + "Next": "اگلے", + "There is no help Question here": "یہاں کوئی مدد کا سوال نہیں ہے۔", + "Call End": "کال اینڈ", + "You dont have Points": "آپ کے پاس پوائنٹس نہیں ہیں۔", + "You Are Stopped For this Day !": + "آپ کو اس دن کے لیے روک دیا گیا ہے!", + "You must be charge your Account": + "آپ کو اپنے اکاؤنٹ سے چارج کرنا ہوگا۔", + "You Refused 3 Rides this Day that is the reason": + "آپ نے اس دن 3 سواریوں سے انکار کیا یہی وجہ ہے۔", + "See you Tomorrow!": "کل ملیں گے!", + "لِقَائِنَا غَدًا!": "لِقَائِنَا غَدًا!", + "Recharge my Account": "میرا اکاؤنٹ ری چارج کریں۔", + "Ok , See you Tomorrow": "ٹھیک ہے کل ملیں گے", + "You are Stopped": "آپ کو روک دیا گیا ہے۔", + "Connected": "جڑا ہوا", + "Not Connected": "منسلک نہیں", + "Your are far from passenger location": + "آپ مسافروں کے مقام سے بہت دور ہیں۔", + "go to your passenger location before": + "پہلے اپنے مسافر کے مقام پر جائیں۔", + "Passenger cancel trip": "مسافر نے سفر منسوخ کر دیا۔", + "يُلْغِي الرَّاكِب الرِّحْلَة": "يُلْغِي الرَّاكِب الرِّحْلَة", + "You will get cost of your work for this trip": + "اس سفر کے لیے آپ کو اپنے کام کی قیمت ملے گی۔", + "in your wallet": "آپ کے بٹوے میں", + "you gain": "تم حاصل کرو", + "Order Cancelled": "آرڈر منسوخ کر دیا گیا۔", + "Order Cancelled by Passenger": + "مسافر کے ذریعے آرڈر منسوخ کر دیا گیا۔", + "Success": "کامیابی", + "Feedback data saved successfully": + "تاثرات کا ڈیٹا کامیابی سے محفوظ ہو گیا۔", + "No Promo for today .": "آج کے لیے کوئی پرومو نہیں ہے۔", + "Select your destination": "اپنی منزل کا انتخاب کریں۔", + "Search for your Start point": "اپنے نقطہ آغاز کی تلاش کریں۔", + "Search for waypoint": "راستہ تلاش کریں۔", + "Current Location": "موجودہ مقام", + "Add Location 1": "مقام 1 شامل کریں۔", + "You must Verify email !.": "آپ کو ای میل کی تصدیق کرنی ہوگی!", + "Cropper": "فصل کاٹنے والا", + "Saved Sucssefully": "کامیابی سے محفوظ کیا گیا۔", + "Select Date": "تاریخ منتخب کریں۔", + "Birth Date": "تاریخ پیدائش", + "Ok": "ٹھیک ہے", + "the 500 points equal 30 JOD": "500 پوائنٹس 30 JOD کے برابر ہیں۔", + "the 500 points equal 30 JOD for you": + "500 پوائنٹس آپ کے لیے 30 JOD کے برابر ہیں۔", + "So go and gain your money": "تو جاؤ اور اپنا پیسہ کماؤ", + "فَاسْتَحِقَّ فُلُوسَك وَاكْسِب النِّقَاط": + "فَاسْتَحِقَّ فُلُوسَك وَاكْسِب النِّقَاط", + "token updated": "ٹوکن اپ ڈیٹ", + "Add Location 2": "مقام 2 شامل کریں۔", + "Add Location 3": "مقام 3 شامل کریں۔", + "Add Location 4": "مقام 4 شامل کریں۔", + "Waiting for your location": "آپ کے مقام کا انتظار ہے۔", + "Search for your destination": "اپنی منزل تلاش کریں۔", + "Hi! This is": "ہائے! یہ وہ جگہ ہے", + "I am using": "میں استعمال کر رہا ہوں", + "to ride with": "کے ساتھ سواری کرنا", + "as the driver.": "ڈرائیور کے طور پر.", + "is driving a": "گاڑی چلا رہا ہے", + "with license plate": "لائسنس پلیٹ کے ساتھ", + "I am currently located at": "میں اس وقت واقع ہوں۔", + "Please go to Car now": "براہ کرم ابھی کار پر جائیں۔", + "If you need to reach me, please contact the driver directly at": + "اگر آپ کو مجھ تک پہنچنے کی ضرورت ہے تو براہ کرم ڈرائیور سے براہ راست رابطہ کریں۔", + "No Car or Driver Found in your area.": + "آپ کے علاقے میں کوئی کار یا ڈرائیور نہیں ملا۔", + "Please Try anther time": "براہ کرم دوسرے وقت کی کوشش کریں۔", + "There no Driver Aplly your order sorry for that": + "اس کے لیے کوئی ڈرائیور آپ کے آرڈر کو لاگو نہیں کرتا", + "Trip Cancelled": "دورہ منسوخ ہو گیا۔", + "The Driver Will be in your location soon .": + "ڈرائیور جلد ہی آپ کے مقام پر آجائے گا۔", + "The distance less than 500 meter.": "فاصلہ 500 میٹر سے کم ہے۔", + "Promo End !": "پرومو ختم!", + "There is no notification yet": "ابھی تک کوئی اطلاع نہیں ہے۔", + "Use Touch ID or Face ID to confirm payment": + "ادائیگی کی تصدیق کے لیے ٹچ آئی ڈی یا فیس آئی ڈی استعمال کریں۔", + "Contact us for any questions on your order.": + "اپنے آرڈر پر کسی بھی سوال کے لیے ہم سے رابطہ کریں۔", + "Pyament Cancelled .": "پیمنٹ منسوخ کر دیا گیا۔", + "type here": "یہاں ٹائپ کریں", + "Scan Driver License": "اسکین ڈرائیور لائسنس", + "Please put your licence in these border": + "براہ کرم اپنا لائسنس ان بارڈر میں لگائیں۔", + "Camera not initialized yet": "کیمرہ ابھی شروع نہیں ہوا ہے۔", + "Take Image": "تصویر لیں۔", + "AI Page": "AI صفحہ", + "Take Picture Of ID Card": "شناختی کارڈ کی تصویر لیں۔", + "Take Picture Of Driver License Card": + "ڈرائیور لائسنس کارڈ کی تصویر لیں۔", + "We are process picture please wait": + "ہم پروسیسنگ تصویر ہیں براہ کرم انتظار کریں۔", + "There is no data yet.": "ابھی تک کوئی ڈیٹا نہیں ہے۔", + "Name :": "نام:", + "Drivers License Class:": "ڈرائیور لائسنس کی کلاس:", + "Document Number:": "دستاویز نمبر:", + "Address:": "پتہ:", + "Height:": "اونچائی:", + "Expiry Date:": "خاتمے کی تاریخ:", + "Date of Birth:": "پیدائش کی تاریخ:", + "You can\"t continue with us .": "آپ ہمارے ساتھ جاری نہیں رکھ سکتے۔", + "You should renew Driver license": + "آپ کو ڈرائیور لائسنس کی تجدید کرنی چاہیے۔", + "Detect Your Face": "اپنے چہرے کا پتہ لگائیں۔", + "Go to next step": "اگلے مرحلے پر جائیں۔", + "scan Car License.": "کار لائسنس اسکین کریں۔", + "aاسْتِخْرَاج رُخْصَة السَّيَّارَة.": + "ااسْتِخْرَاج رُخْصَة السَّيَّارَة.", + "Name in arabic": "عربی میں نام", + "Drivers License Class": "ڈرائیور لائسنس کلاس", + "Date of Birth": "پیدائش کی تاریخ", + "Age": "عمر", + "Lets check Car license": "آئیے کار لائسنس چیک کریں۔", + "Car Kind": "کار کی قسم", + "Car Plate": "کار پلیٹ", + "Lets check License Back Face": "آئیے لائسنس بیک فیس چیک کریں۔", + "Car License Card": "کار لائسنس کارڈ", + "No image selected yet": "ابھی تک کوئی تصویر منتخب نہیں کی گئی۔", + "Made :": "بنایا:", + "model :": "ماڈل:", + "VIN :": "VIN:", + "year :": "سال:", + "ُExpire Date": "ختم ہونے کی تاریخ", + "Login Driver": "لاگ ان ڈرائیور", + "Password must br at least 6 character.": + "پاس ورڈ کم از کم 6 حروف کا ہونا چاہیے۔", + "if you don\"t have account": "اگر آپ کے پاس اکاؤنٹ نہیں ہے۔", + "Here recorded trips audio": "یہاں ریکارڈ شدہ ٹرپس آڈیو", + "Register as Driver": "بطور ڈرائیور رجسٹر کریں۔", + "Privacy Notice": "رازداری کا نوٹس", + "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the": + "ذیل میں 'میں متفق ہوں' کو منتخب کرکے، میں نے استعمال کی شرائط کا جائزہ لیا اور ان سے اتفاق کیا اور تسلیم کیا", + ". I am at least 18 years of age.": ". میری عمر کم از کم 18 سال ہے۔", + "Log Out Page": "لاگ آؤٹ صفحہ", + "Log Off": "لاگ آف کریں", + "Register Driver": "ڈرائیور رجسٹر کریں۔", + "Verify Email For Driver": "ڈرائیور کے لیے ای میل کی تصدیق کریں۔", + "Admin DashBoard": "ایڈمن ڈیش بورڈ", + "Your name": "تمھارا نام", + "your ride is applied": "آپ کی سواری کا اطلاق ہوتا ہے۔", + "Your password": "آپ کا پاس ورڈ", + "H and": "ایچ اور", + "LE": "ایل ای", + "JOD": "JOD", + "m": "m", + "We search nearst Driver to you": + "ہم آپ کے قریب ترین ڈرائیور تلاش کرتے ہیں۔", + "please wait till driver accept your order": + "ڈرائیور آپ کا آرڈر قبول کرنے تک انتظار کریں۔", + "No accepted orders? Try raising your trip fee to attract riders.": + "کوئی منظور شدہ احکامات؟ سواروں کو راغب کرنے کے لیے اپنی ٹرپ فیس میں اضافہ کرنے کی کوشش کریں۔", + "You should select one": "آپ کو ایک کا انتخاب کرنا چاہئے۔", + "The driver accept your order for": + "ڈرائیور آپ کا آرڈر قبول کرتا ہے۔", + "Increase Fee": "فیس میں اضافہ", + "No, thanks": "نہیں شکریہ", + "The driver on your way": "ڈرائیور آپ کے راستے میں ہے۔", + "Total price from": "سے کل قیمت", + "Order Details Speed": "آرڈر کی تفصیلات کی رفتار", + "Order Applied": "آرڈر لاگو", + "accepted your order": "آپ کا حکم قبول کیا", + "We regret to inform you that another driver has accepted this order.": + "ہمیں آپ کو یہ بتاتے ہوئے افسوس ہے کہ ایک اور ڈرائیور نے اس آرڈر کو قبول کر لیا ہے۔", + "Selected file:": "منتخب فائل:", + "Your trip cost is": "آپ کے سفر کی قیمت ہے۔", + "this will delete all files from your device": + "یہ آپ کے آلے سے تمام فائلوں کو حذف کر دے گا۔", + "you have a negative balance of": "آپ کے پاس منفی توازن ہے۔", + "in your": "آپ میں", + "Exclusive offers and discounts always with the Sefer app": + "سیفر ایپ کے ساتھ ہمیشہ خصوصی آفرز اور چھوٹ", + "Please go to Car Driver": "براہ کرم کار ڈرائیور کے پاس جائیں۔", + "wallet due to a previous trip.": "پچھلے سفر کی وجہ سے پرس۔", + "Submit Question": "سوال جمع کروائیں۔", + "Please enter your Question.": "براہ کرم اپنا سوال درج کریں۔", + "Help Details": "مدد کی تفصیلات", + "No trip yet found": "ابھی تک کوئی سفر نہیں ملا", + "No Response yet.": "ابھی تک کوئی جواب نہیں۔", + "You Earn today is": "آپ آج کماتے ہیں۔", + "You Have in": "آپ کے پاس ہے", + "Total points is": "کل پوائنٹس ہیں۔", + "Total Connection Duration:": "کنکشن کی کل مدت:", + "H and": "ایچ اور", + "Passenger name :": "مسافر کا نام:", + "Cost Of Trip IS": "سفر کی لاگت IS", + "Arrival time": "آمد کے وقت", + "arrival time to reach your point": + "آپ کے نقطہ تک پہنچنے کے لئے آمد کا وقت", + "For Speed and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": + "سپیڈ اور ڈیلیوری ٹرپس کے لیے، قیمت کا حساب متحرک طور پر کیا جاتا ہے۔ آرام دہ دوروں کے لیے، قیمت وقت اور فاصلے پر مبنی ہے۔", + "Hello this is Driver": "ہیلو یہ ڈرائیور ہے۔", + "Is the Passenger in your Car ?": "کیا مسافر آپ کی گاڑی میں ہے؟", + "Please wait for the passenger to enter the car before starting the trip.": + "براہ کرم سفر شروع کرنے سے پہلے مسافر کے گاڑی میں داخل ہونے کا انتظار کریں۔", + "No ,still Waiting.": "نہیں، ابھی تک انتظار ہے۔", + "I arrive you": "میں آپ کے پاس پہنچتا ہوں۔", + "I Arrive your site": "میں آپ کی سائٹ پر پہنچ گیا ہوں۔", + "You are not in near to passenger location": + "آپ مسافر کے مقام کے قریب نہیں ہیں۔", + "please go to picker location exactly": + "براہ کرم بالکل چننے والے مقام پر جائیں۔", + "You Can Cancel Trip And get Cost of Trip From": + "آپ ٹرپ منسوخ کر سکتے ہیں اور اس سے سفر کی لاگت حاصل کر سکتے ہیں۔", + "Are you sure to cancel?": "کیا آپ کو یقینی طور پر منسوخ کرنا ہے؟", + "Yes": "جی ہاں", + "Insert Emergincy Number": "ایمرجنسی نمبر داخل کریں۔", + "Best choice for comfort car and flexible route and stops point": + "آرام دہ کار اور لچکدار روٹ اور اسٹاپ پوائنٹ کے لیے بہترین انتخاب", + "Insert": "داخل کریں", + "This is for delivery or a motorcycle.": + "یہ ڈیلیوری یا موٹرسائیکل کے لیے ہے۔", + "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": + "یہ سفر ایک مقررہ قیمت پر آپ کے نقطہ آغاز سے براہ راست آپ کی منزل تک جاتا ہے۔ ڈرائیور کو منصوبہ بند راستے پر چلنا چاہیے۔", + "You can decline a request without any cost": + "آپ بغیر کسی قیمت کے درخواست مسترد کر سکتے ہیں۔", + "Perfect for adventure seekers who want to experience something new and exciting": + "ایڈونچر کے متلاشیوں کے لیے بہترین ہے جو کچھ نیا اور دلچسپ تجربہ کرنا چاہتے ہیں۔", + "My current location is:": "میرا موجودہ مقام ہے:", + "and I have a trip on": "اور میرا ایک سفر ہے۔", + "App with Passenger": "مسافر کے ساتھ ایپ", + "مع الراكب": "مع الراكب", + "You will be pay the cost to driver or we will get it from you on next trip": + "آپ ڈرائیور کو قیمت ادا کریں گے یا ہم اگلے سفر پر آپ سے وصول کریں گے۔", + "Trip has Steps": "سفر کے مراحل ہوتے ہیں۔", + "Distance from Passenger to destination is": + "مسافر سے منزل تک کا فاصلہ ہے۔", + "price is": "قیمت ہے", + "This ride type does not allow changes to the destination or additional stops": + "سواری کی یہ قسم منزل میں تبدیلی یا اضافی اسٹاپس کی اجازت نہیں دیتی ہے۔", + "This price may be changed": "یہ قیمت تبدیل ہو سکتی ہے۔", + "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": + "کوئی سم کارڈ نہیں، کوئی مسئلہ نہیں! ہماری ایپ کے ذریعے اپنے ڈرائیور کو براہ راست کال کریں۔ ہم آپ کی رازداری کو یقینی بنانے کے لیے جدید ٹیکنالوجی کا استعمال کرتے ہیں۔", + "This ride type allows changes, but the price may increase": + "سواری کی یہ قسم تبدیلیوں کی اجازت دیتی ہے، لیکن قیمت بڑھ سکتی ہے۔", + "message From passenger": "مسافر کا پیغام", + "Select one message": "ایک پیغام منتخب کریں۔", + "My location is correct. You can search for me using the navigation app": + "میرا مقام درست ہے۔ آپ نیویگیشن ایپ کا استعمال کر کے مجھے تلاش کر سکتے ہیں۔", + "I'm waiting for you": "میں آپ کا انتظار کر رہا ہوں", + "Hello, I'm at the agreed-upon location": + "ہیلو، میں متفقہ مقام پر ہوں۔", + "We noticed the speed is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": + "ہم نے دیکھا کہ رفتار 100 کلومیٹر فی گھنٹہ سے زیادہ ہے۔ براہ کرم اپنی حفاظت کے لیے آہستہ کریں۔ اگر آپ غیر محفوظ محسوس کرتے ہیں، تو آپ اپنے سفر کی تفصیلات کسی رابطہ کے ساتھ شیئر کر سکتے ہیں یا سرخ SOS بٹن کا استعمال کر کے پولیس کو کال کر سکتے ہیں۔", + "Warning: Speeding detected!": "انتباہ: رفتار کا پتہ چلا!", + "Please help! Contact me as soon as possible.": + "مدد کریں! جتنی جلدی ہو سکے مجھ سے رابطہ کریں۔", + "Share Trip Details": "سفر کی تفصیلات شیئر کریں۔", + "Car Plate is": "کار پلیٹ ہے۔", + "the 300 points equal 300 L.E for you": + "300 پوائنٹس آپ کے لیے 300 L.E کے برابر ہیں۔", + "So go and gain your money": "تو جاؤ اور اپنا پیسہ کماؤ", + "the 300 points equal 300 L.E": "300 پوائنٹس 300 L.E کے برابر ہیں۔", + "The payment was not approved. Please try again.": + "ادائیگی منظور نہیں ہوئی۔ دوبارہ کوشش کریں.", + "Payment Failed": "ادائیگی ناکام ہو گئی۔", + "Error": "خرابی", + "An error occurred during the payment process.": + "ادائیگی کے عمل کے دوران ایک خرابی پیش آگئی۔", + "The payment was approved.": "ادائیگی کی منظوری دی گئی۔", + "Payment Successful": "ادائیگی کامیاب", + "No ride found yet": "ابھی تک کوئی سواری نہیں ملی", + "Accept Order": "آرڈر قبول کریں۔", + "reject your order.": "آپ کے حکم کو مسترد کریں.", + "Bottom Bar Example": "نیچے بار کی مثال", + "Driver phone": "ڈرائیور کا فون", + "Statistics": "شماریات", + "Origin": "اصل", + "Destination": "منزل", + "Driver Name": "ڈرائیور کا نام", + "Driver Car Plate": "ڈرائیور کار پلیٹ", + "Available for rides": "سواریوں کے لیے دستیاب ہے۔", + "Scan Id": "اسکین آئی ڈی", + "Camera not initilaized yet": "کیمرہ ابھی شروع نہیں ہوا۔", + "Scan ID MklGoogle": "اسکین ID MklGoogle", + "Language": "زبان", + "Jordan": "اردن", + "USA": "امریکا", + "Egypt": "مصر", + "Turkey": "ترکی", + "Saudi Arabia": "سعودی عرب", + "Qatar": "قطر", + "Bahrain": "بحرین", + "Kuwait": "کویت", + "But you have a negative salary of": "لیکن آپ کی تنخواہ منفی ہے۔", + "Promo Code": "پرومو کوڈ", + "Your trip distance is": "آپ کے سفر کا فاصلہ ہے۔", + "Enter promo code": "پرومو کوڈ درج کریں۔", + "You have promo!": "آپ کے پاس پرومو ہے!", + "Cost Duration": "لاگت کا دورانیہ", + "Duration is": "دورانیہ ہے۔", + "Leave": "چھوڑو", + "Join": "شمولیت", + "You Should be select reason.": "آپ کو وجہ منتخب کرنی چاہئے۔", + "\$": "\$", + "Waiting for Driver ...": "ڈرائیور کا انتظار...", + "Latest Recent Trip": "تازہ ترین حالیہ دورہ", + "from your list": "آپ کی فہرست سے", + "Do you want to change Work location": + "کیا آپ کام کا مقام تبدیل کرنا چاہتے ہیں؟", + "Do you want to change Home location": + "کیا آپ گھر کا مقام تبدیل کرنا چاہتے ہیں؟", + "We Are Sorry That we dont have cars in your Location!": + "ہمیں افسوس ہے کہ ہمارے پاس آپ کے مقام پر کاریں نہیں ہیں!", + "Choose from Map": "نقشہ سے انتخاب کریں۔", + "Pick your ride location on the map - Tap to confirm": + "نقشے پر اپنی سواری کا مقام منتخب کریں - تصدیق کرنے کے لیے تھپتھپائیں۔", + "To Work": "کام کرنا", + "Are you want to go this site": "کیا آپ اس سائٹ پر جانا چاہتے ہیں؟", + "Closest & Cheapest": "قریب ترین اور سستا ترین", + "Work Saved": "کام محفوظ ہو گیا۔", + "Sefer is the ride-hailing app that is safe, reliable, and accessible.": + "سیفر رائیڈ ہیلنگ ایپ ہے جو محفوظ، قابل اعتماد اور قابل رسائی ہے۔", + "With Sefer, you can get a ride to your destination in minutes.": + "Sefer کے ساتھ، آپ منٹوں میں اپنی منزل تک سواری حاصل کر سکتے ہیں۔", + "Sefer is committed to safety, and all of our captains are carefully screened and background checked.": + "سیفر حفاظت کے لیے پرعزم ہے، اور ہمارے تمام کپتانوں کی احتیاط سے اسکریننگ اور پس منظر کی جانچ پڑتال کی جاتی ہے۔", + "To Home": "گھر تک", + "Home Saved": "گھر محفوظ ہو گیا۔", + "Destination selected": "منزل منتخب کر لی گئی۔", + "Now select start pick": "اب اسٹارٹ پک کو منتخب کریں۔", + "Pick from map": "نقشے سے چنیں۔", + "Click here point": "یہاں پوائنٹ پر کلک کریں۔", + "No Car in your site. Sorry!": + "آپ کی سائٹ پر کوئی کار نہیں ہے۔ معذرت!", + "Nearest Car for you about": "آپ کے لیے قریب ترین کار", + "N/A": "N / A", + "From :": "منجانب:", + "Get Details of Trip": "سفر کی تفصیلات حاصل کریں۔", + "If you want add stop click here": + "اگر آپ اسٹاپ شامل کرنا چاہتے ہیں تو یہاں کلک کریں۔", + "Driver": "ڈرائیور", + "Where you want go": "جہاں آپ جانا چاہتے ہیں۔", + "My Card": "میرا کارڈ", + "Start Record": "ریکارڈ شروع کریں۔", + "Wallet": "پرس", + "History of Trip": "سفر کی تاریخ", + "Helping Center": "امدادی مرکز", + "Record saved": "ریکارڈ محفوظ ہو گیا۔", + "Trips recorded": "دوروں کو ریکارڈ کیا گیا۔", + "Select Your Country": "اپنے ملک کا انتخاب کریں", + "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": + "اس بات کو یقینی بنانے کے لیے کہ آپ اپنے مقام کی درست ترین معلومات حاصل کریں، براہ کرم نیچے اپنا ملک منتخب کریں۔ اس سے ایپ کے تجربے اور مواد کو آپ کے ملک کے مطابق بنانے میں مدد ملے گی۔", + "Are you sure to delete recorded files": + "کیا آپ یقینی طور پر ریکارڈ شدہ فائلوں کو حذف کرنا چاہتے ہیں؟", + "Select recorded trip": "ریکارڈ شدہ سفر کو منتخب کریں۔", + "Card Number": "کارڈ نمبر", + "Hi, Where to": "ہیلو، کہاں؟", + "Pick your destination from Map": "نقشہ سے اپنی منزل کا انتخاب کریں۔", + "Add Stops": "اسٹاپس شامل کریں۔", + "Get Direction": "سمت حاصل کریں۔", + "Add Location": "مقام شامل کریں", + "Switch Rider": "سوئچ رائڈر", + "You will arrive to your destination after timer end.": + "ٹائمر ختم ہونے کے بعد آپ اپنی منزل پر پہنچ جائیں گے۔", + "You can cancel trip": "آپ سفر منسوخ کر سکتے ہیں۔", + "The driver waitting you in picked location .": + "ڈرائیور منتخب جگہ پر آپ کا انتظار کر رہا ہے۔", + "Pay with Your": "اپنے ساتھ ادائیگی کریں۔", + "Pay with Credit Card": "کریڈٹ کارڈ سے ادائیگی کریں۔", + "Payment History": "ادائیگی کی تاریخ", + "Show Promos to Charge": "چارج کرنے کے لیے پروموز دکھائیں۔", + "Point": "نقطہ", + "Driver Wallet": "ڈرائیور والیٹ", + "Total Points is": "کل پوائنٹس ہیں۔", + "Total Budget from trips is": "دوروں سے کل بجٹ ہے۔", + "Total Amount:": "کل رقم:", + "Total Budget from trips by": "بذریعہ دوروں سے کل بجٹ", + "Credit card is": "کریڈٹ کارڈ ہے۔", + "بطاقة الائتمان هي": "بطاقة الاطمان هي", + "This amount for all trip I get from Passengers": + "یہ رقم تمام ٹرپ کے لیے مجھے مسافروں سے ملتی ہے۔", + "Pay from my budget": "میرے بجٹ سے ادائیگی کریں۔", + "This amount for all trip I get from Passengers and Collected For me in": + "تمام ٹرپ کے لیے یہ رقم مجھے مسافروں سے ملتی ہے اور میرے لیے جمع کی جاتی ہے۔", + "You can buy points from your budget": + "آپ اپنے بجٹ سے پوائنٹس خرید سکتے ہیں۔", + "insert amount": "رقم ڈالیں", + "You can buy Points to let you online": + "آپ آن لائن ہونے کے لیے پوائنٹس خرید سکتے ہیں۔", + "by this list below": "ذیل میں اس فہرست کی طرف سے", + "من خلال القائمة أدناه": "من خلال القائمة أدنا", + "Create Wallet to receive your money": + "اپنی رقم وصول کرنے کے لیے والٹ بنائیں", + "Enter your feedback here": "اپنی رائے یہاں درج کریں۔", + "Please enter your feedback.": "براہ کرم اپنی رائے درج کریں۔", + "Feedback": "تاثرات", + "Submit": "جمع کرائیں", + "Click here to Show it in Map": + "اسے نقشے میں دکھانے کے لیے یہاں کلک کریں۔", + "Canceled": "منسوخ", + "Type your Email": "اپنا ای میل ٹائپ کریں۔", + "No I want": "نہیں میں چاہتا ہوں۔", + "Email is": "ای میل ہے۔", + "Phone Number is": "فون نمبر ہے۔", + "Date of Birth is": "تاریخ پیدائش ہے۔", + "Sex is": "جنس ہے۔", + "Car Details": "کار کی تفصیلات", + "VIN is": "VIN ہے۔", + "Color is": "رنگ ہے۔", + "Make is": "بنانا ہے", + "Model is": "ماڈل ہے۔", + "Year is": "سال ہے۔", + "Expiration Date": "میعاد ختم ہونے کی تاریخ", + "Edit Your data": "اپنے ڈیٹا میں ترمیم کریں۔", + "write vin for your car": "اپنی گاڑی کے لیے vin لکھیں۔", + "VIN": "VIN", + "write Color for your car": "اپنی گاڑی کا رنگ لکھیں۔", + "write Make for your car": "اپنی کار کے لیے بنائیں لکھیں۔", + "write Model for your car": "اپنی گاڑی کا ماڈل لکھیں۔", + "write Year for your car": "اپنی گاڑی کے لیے سال لکھیں۔", + "write Expiration Date for your car": + "اپنی کار کی میعاد ختم ہونے کی تاریخ لکھیں۔", + "Tariffs": "ٹیرف", + "Minimum fare": "کم از کم کرایہ", + "Maximum fare": "زیادہ سے زیادہ کرایہ", + "Flag-down fee": "فلیگ ڈاؤن فیس", + "Including Tax": "ٹیکس سمیت", + "BookingFee": "بکنگ فیس", + "Morning": "صبح", + "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": + "07:30 سے ​​10:30 تک (جمعرات، جمعہ، ہفتہ، پیر)", + "Evening": "شام", + "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": + "12:00 سے 15:00 تک (جمعرات، جمعہ، ہفتہ، پیر)", + "Night": "رات", + "You have in account": "آپ کے پاس اکاؤنٹ ہے۔", + "Select Country": "ملک کا انتخاب کیجئے", + "Ride Today :": "آج ہی سواری کریں:", + "After this period": "اس مدت کے بعد", + "You can\"t cancel!": "آپ منسوخ نہیں کر سکتے!", + "لا تستطيع الغاء الرحله": "لا استطيع الغاء الرحله", + "from 23:59 till 05:30": "23:59 سے 05:30 تک", + "Rate Driver": "ڈرائیور کو ریٹ کریں۔", + "Total Cost is": "کل لاگت ہے۔", + "Write note": "نوٹ لکھیں۔", + "Time to arrive": "پہنچنے کا وقت", + "Ride Summaries": "سواری کے خلاصے", + "Total Cost": "کل لاگت", + "Average of Hours of": "کے گھنٹوں کی اوسط", + "is ON for this month": "اس مہینے کے لیے آن ہے۔", + "Days": "دن", + "Total Hours on month": "مہینے پر کل گھنٹے", + "Counts of Hours on days": "دنوں میں گھنٹوں کی گنتی", + "OrderId": "آرڈر کی شناخت", + "created time": "وقت پیدا کیا", + "Speed Over": "سپیڈ اوور", + "I will slow down": "میں سست ہو جاؤں گا۔", + "Map Passenger": "نقشہ مسافر", + "Be Slowly": "آہستہ ہو جاؤ", + "If you want to make Google Map App run directly when you apply order": + "اگر آپ آرڈر اپلائی کرتے وقت گوگل میپ ایپ کو براہ راست چلانا چاہتے ہیں۔", + "You can change the language of the app": + "آپ ایپ کی زبان تبدیل کر سکتے ہیں۔", + "Your Budget less than needed": "آپ کا بجٹ ضرورت سے کم ہے۔", + "You can change the Country to get all features": + "تمام خصوصیات حاصل کرنے کے لیے آپ ملک کو تبدیل کر سکتے ہیں۔", + "Change Country": "ملک تبدیل کیجئے" + }, + "hi": { + "Sign In by Apple": "Apple द्वारा साइन इन करें", + "Sign In by Google": "Google द्वारा साइन इन करें", + "How do I request a ride?": "मैं सवारी का अनुरोध कैसे करूँ?", + "Step-by-step instructions on how to request a ride through the Sefer app.": + "सेफ़र ऐप के माध्यम से सवारी का अनुरोध कैसे करें, इस पर चरण-दर-चरण निर्देश।", + "What types of vehicles are available?": + "किस प्रकार के वाहन उपलब्ध हैं?", + "Sefer offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": + "सेफ़र आपकी आवश्यकताओं के अनुरूप विभिन्न प्रकार के वाहन विकल्प प्रदान करता है, जिनमें किफायती, आराम और विलासिता शामिल हैं। वह विकल्प चुनें जो आपके बजट और यात्री संख्या के लिए सबसे उपयुक्त हो।", + "How can I pay for my ride?": + "मैं अपनी सवारी के लिए भुगतान कैसे कर सकता हूँ?", + "Sefer offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": + "सेफ़र आपकी सुविधा के लिए कई भुगतान विधियाँ प्रदान करता है। सवारी की पुष्टि के दौरान नकद भुगतान या क्रेडिट/डेबिट कार्ड भुगतान के बीच चयन करें।", + "Can I cancel my ride?": "क्या मैं अपनी यात्रा रद्द कर सकता हूँ?", + "Yes, you can cancel your ride under certain conditions (e.g., before driver is assigned). See the Sefer cancellation policy for details.": + "हां, आप कुछ शर्तों के तहत अपनी सवारी रद्द कर सकते हैं (उदाहरण के लिए, ड्राइवर नियुक्त होने से पहले)। विवरण के लिए सेफ़र रद्दीकरण नीति देखें।", + "Driver Registration & Requirements": "ड्राइवर पंजीकरण और आवश्यकताएँ", + "How can I register as a driver?": + "मैं ड्राइवर के रूप में कैसे पंजीकरण कर सकता हूँ?", + "What are the requirements to become a driver?": + "ड्राइवर बनने के लिए क्या आवश्यकताएँ हैं?", + "Visit our website or contact Sefer support for information on driver registration and requirements.": + "ड्राइवर पंजीकरण और आवश्यकताओं के बारे में जानकारी के लिए हमारी वेबसाइट पर जाएँ या सेफ़र समर्थन से संपर्क करें।", + "How do I communicate with the other party (passenger/driver)?": + "मैं दूसरे पक्ष (यात्री/चालक) से कैसे संवाद करूँ?", + "Sefer provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": + "सेफ़र आपको अपनी यात्रा के दौरान अपने ड्राइवर या यात्री के साथ संवाद करने की अनुमति देने के लिए इन-ऐप चैट कार्यक्षमता प्रदान करता है।", + "What safety measures does Sefer offer?": + "सेफ़र कौन से सुरक्षा उपाय पेश करता है?", + "Sefer prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": + "सेफ़र आपकी सुरक्षा को प्राथमिकता देता है। हम ड्राइवर सत्यापन, इन-ऐप ट्रिप ट्रैकिंग और आपातकालीन संपर्क विकल्प जैसी सुविधाएं प्रदान करते हैं।", + "Frequently Questions": "बारंबार प्रश्न", + "User does not exist.": "उपभोगकर्ता मौजूद नहीं।", + "We need your phone number to contact you and to help you.": + "आपसे संपर्क करने और आपकी सहायता करने के लिए हमें आपके फ़ोन नंबर की आवश्यकता है।", + "You will recieve code in sms message": + "आपको एसएमएस संदेश में कोड प्राप्त होगा", + "Please enter": "कृपया दर्ज करें", + "We need your phone number to contact you and to help you receive orders.": + "आपसे संपर्क करने और ऑर्डर प्राप्त करने में सहायता के लिए हमें आपके फ़ोन नंबर की आवश्यकता है।", + "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": + "आपके आपराधिक रिकॉर्ड पर पूरा नाम आपके ड्राइवर के लाइसेंस से मेल नहीं खाता है। कृपया सत्यापित करें और सही दस्तावेज़ प्रदान करें।", + "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": + "आपके ड्राइवर के लाइसेंस पर मौजूद राष्ट्रीय नंबर आपके आईडी दस्तावेज़ पर मौजूद नंबर से मेल नहीं खाता है। कृपया सत्यापित करें और सही दस्तावेज़ प्रदान करें।", + "Capture an Image of Your Criminal Record": + "अपने आपराधिक रिकॉर्ड की एक छवि कैप्चर करें", + "IssueDate": "जारी करने की तिथि", + "Capture an Image of Your car license front": + "अपने कार लाइसेंस के सामने की छवि कैप्चर करें", + "Capture an Image of Your ID Document front": + "अपने आईडी दस्तावेज़ के सामने एक छवि कैप्चर करें", + "NationalID": "राष्ट्रीय पहचान पत्र", + "FullName": "पूरा नाम", + "InspectionResult": "जाँच के नतीजे", + "Criminal Record": "आपराधिक रिकॉर्ड", + "The email or phone number is already registered.": + "ईमेल या फ़ोन नंबर पहले से पंजीकृत है.", + "To become a ride-sharing driver on the Sefer app, you need to upload your driver\"s license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Sefer app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": + "सेफ़र ऐप पर राइड-शेयरिंग ड्राइवर बनने के लिए, आपको अपने ड्राइवर का लाइसेंस, आईडी दस्तावेज़ और कार पंजीकरण दस्तावेज़ अपलोड करना होगा। हमारा एआई सिस्टम केवल 2-3 मिनट में तुरंत उनकी प्रामाणिकता की समीक्षा और सत्यापन करेगा। यदि आपके दस्तावेज़ स्वीकृत हैं, तो आप सेफ़र ऐप पर ड्राइवर के रूप में काम करना शुरू कर सकते हैं, कृपया ध्यान दें, धोखाधड़ी वाले दस्तावेज़ जमा करना एक गंभीर अपराध है और इसके परिणामस्वरूप तत्काल समाप्ति और कानूनी परिणाम हो सकते हैं।", + "Documents check": "दस्तावेज़ जांचें", + "Driver's License": "ड्राइवर का लाइसेंस", + "License Type": "लाइसेंस के प्रकार", + "National Number": "नेशनल संख्या", + "Name (Arabic)": "नाम (अरबी)", + "Name (English)": "नाम (अंग्रेजी)", + "Address": "पता", + "Issue Date": "जारी करने की तिथि", + "Expiry Date": "समाप्ति तिथि", + "License Categories": "लाइसेंस श्रेणियाँ", + "driver_license": "चालक लाइसेंस", + "Capture an Image of Your Driver License": + "अपने ड्राइवर लाइसेंस की एक छवि कैप्चर करें", + "ID Documents Back": "आईडी दस्तावेज़ वापस", + "National ID": "राष्ट्रीय पहचान पत्र", + "Occupation": "पेशा", + "Gender": "लिंग", + "Religion": "धर्म", + "Marital Status": "वैवाहिक स्थिति", + "Full Name (Marital)": "पूरा नाम (वैवाहिक)", + "Expiration Date": "समाप्ति तिथि", + "Capture an Image of Your ID Document Back": + "अपने आईडी दस्तावेज़ की एक छवि वापस कैप्चर करें", + "ID Documents Front": "आईडी दस्तावेज़ सामने", + "First Name": "पहला नाम", + "CardID": "कार्ड आईडी", + "Full Name": "पूरा नाम", + "Vehicle Details Front": "वाहन विवरण सामने", + "Plate Number": "थाली संख्या", + "Owner Name": "मालिक का नाम", + "Vehicle Details Back": "वाहन विवरण वापस", + "Make": "बनाना", + "Model": "नमूना", + "Year": "वर्ष", + "Chassis": "हवाई जहाज़ के पहिये", + "Color": "रंग", + "Displacement": "विस्थापन", + "Fuel": "ईंधन", + "Tax Expiry Date": "कर समाप्ति तिथि", + "Inspection Date": "निरीक्षण की दिनांक", + "Capture an Image of Your car license back": + "अपने कार लाइसेंस की एक छवि वापस कैप्चर करें", + "Capture an Image of Your Driver’s License": + "अपने ड्राइवर के लाइसेंस की एक छवि कैप्चर करें", + "Sign in with Google for easier email and name entry": + "आसान ईमेल और नाम प्रविष्टि के लिए Google से साइन इन करें", + "You will choose allow all the time to be ready receive orders": + "आप ऑर्डर प्राप्त करने के लिए हर समय तैयार रहने की अनुमति देना चुनेंगे", + "Welcome to Sefer!": "सेफ़र में आपका स्वागत है!", + "Get to your destination quickly and easily.": + "जल्दी और आसानी से अपने गंतव्य तक पहुंचें।", + "Enjoy a safe and comfortable ride.": + "सुरक्षित और आरामदायक सवारी का आनंद लें।", + "Choose Language": "भाषा चुनें", + "Login": "लॉग इन करें", + "Pay with Wallet": "वॉलेट से भुगतान करें", + "Invalid MPIN": "अमान्य एमपिन", + "Invalid OTP": "अमान्य ओटीपी", + "Enter your email address": "अपना ईमेल पता दर्ज करें", + "Please enter Your Email.": "अपना ईमेल दर्ज करें।", + "Enter your phone number": "अपना फोन नंबर डालें", + "Please enter your phone number.": "कृपया अपना फोन नंबर दर्ज करें।", + "Please enter Your Password.": "अपना पासवर्ड दर्ज करें।", + "Submit": "जमा करना", + "if you dont have account": "यदि आपके पास खाता नहीं है", + "Register": "पंजीकरण करवाना", + "Accept Ride's Terms & Review Privacy Notice": + "सवारी की शर्तें स्वीकार करें और गोपनीयता सूचना की समीक्षा करें", + "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": + "नीचे 'मैं सहमत हूं' का चयन करके, मैंने उपयोग की शर्तों की समीक्षा की है और उनसे सहमत हूं और गोपनीयता सूचना को स्वीकार करता हूं। मैं कम से कम 18 साल का हूँ।", + "I Agree": "मैं सहमत हूं", + "First name": "पहला नाम", + "Enter your first name": "अपना पहला नाम दर्ज करें", + "Please enter your first name.": "कृपया अपना पहला नाम दें।", + "Last name": "उपनाम", + "Enter your last name": "अपना अंतिम नाम दर्ज करें", + "Please enter your last name.": "कृपया अपना अंतिम नाम दर्ज करें।", + "City": "शहर", + "Please enter your City.": "कृपया अपना शहर दर्ज करें.", + "Male": "पुरुष", + "Female": "महिला", + "Verify Email": "ईमेल सत्यापित करें", + "We sent 5 digit to your Email provided": + "हमने आपके ईमेल पर 5 अंक भेजे हैं", + "5 digit": "5 अंक", + "Send Verification Code": "सत्यापन कोड भेजें", + "Your Ride Duration is": "आपकी सवारी अवधि है", + "You will be thier in": "आप वहां होंगे", + "You trip distance is": "आपकी यात्रा की दूरी है", + "Fee is": "शुल्क है", + "From :": "से :", + "To :": "को :", + "Add Promo": "प्रोमो जोड़ें", + "Confirm Selection": "चयन की पुष्टि करें", + "distance is": "दूरी है", + "duration is": "अवधि है", + "I don't need a ride anymore": "मुझे अब किसी सवारी की जरूरत नहीं है", + "I was just trying the application": "मैं बस एप्लिकेशन आज़मा रहा था", + "No driver accepted my request": + "किसी ड्राइवर ने मेरा अनुरोध स्वीकार नहीं किया", + "I added the wrong pick-up/drop-off location": + "मैंने गलत पिक-अप/ड्रॉप-ऑफ स्थान जोड़ा है", + "I don't have a reason": "मेरे पास कोई कारण नहीं है", + "Other": "अन्य", + "Can we know why you want to cancel Ride ?": + "क्या हम जान सकते हैं कि आप सवारी क्यों रद्द करना चाहते हैं?", + "Cancel Ride": "सवारी रद्द करें", + "Add Payment Method": "भुगतान विधि जोड़ें", + "Your Wallet balance is": "आपका वॉलेट बैलेंस है", + "Ride Wallet": "सवारी बटुआ", + "Payment Method": "भुगतान विधि", + "Type here Place": "यहां टाइप करें Place", + "Are You sure to ride to": "क्या आप निश्चित रूप से यात्रा करेंगे?", + "Confirm": "पुष्टि करना", + "Back": "पीछे", + "You are Delete": "आप हटाएं हैं", + "Deleted": "हटाए गए", + "You Dont Have Any places yet !": + "आपके पास अभी तक कोई स्थान नहीं है!", + "Favorite Places": "पसंदीदा स्थान", + "From : Current Location": "प्रेषक : वर्तमान स्थान", + "Where to": "कहाँ जाना है", + "Notifications": "सूचनाएं", + "Profile": "प्रोफ़ाइल", + "Home": "घर", + "My Cared": "मेरी परवाह", + "Add Card": "कार्ड जोड़ें", + "Add Credit Card": "क्रेडिट कार्ड जोड़ें", + "Please enter the cardholder name": + "कृपया कार्डधारक का नाम दर्ज करें", + "Please enter the expiry date": "कृपया समाप्ति तिथि दर्ज करें", + "Please enter the CVV code": "कृपया सीवीवी कोड दर्ज करें", + "Go To Favorite Places": "पसंदीदा स्थानों पर जाएँ", + "Go to this Target": "इस लक्ष्य पर जाएँ", + "My Profile": "मेरी प्रोफाइल", + "Sign Out": "साइन आउट", + "Home Page": "होम पेज", + "Are you want to go to this site": + "क्या आप इस साइट पर जाना चाहते हैं", + "MyLocation": "मेरा स्थान", + "my location": "मेरा स्थान", + "Target": "लक्ष्य", + "Update": "अद्यतन", + "You Should choose rate figure": "आपको दर आंकड़ा चुनना चाहिए", + "Login Captin": "कैप्टन लॉगिन करें", + "Register Captin": "कैप्टन रजिस्टर करें", + "Send Verfication Code": "सत्यापन कोड भेजें", + "KM": "किमी", + "End Ride": "सवारी समाप्त करें", + "Minute": "मिनट", + "Go to passenger Location now": "अब यात्री स्थान पर जाएं", + "Duration of the Ride is": "सवारी की अवधि है", + "Distance of the Ride is": "सवारी की दूरी है", + "Name of the Passenger is": "यात्री का नाम है", + "Hello this is Captain": "नमस्ते, मैं कैप्टन हूं", + "Start the Ride": "सवारी शुरू करें", + "Please Wait If passenger want To Cancel!": + "यदि यात्री रद्द करना चाहता है तो कृपया प्रतीक्षा करें!", + "Total Duration:": "कुल अवधि:", + "Active Duration:": "सक्रिय अवधि:", + "Waiting for Captin ...": "कैप्टन का इंतजार...", + "Age is": "उम्र है", + "Rating is": "रेटिंग है", + "to arrive you.": "आप तक पहुँचने के लिए.", + "Order History": "आदेश इतिहास", + "My Wallet": "मेरा बटुआ", + "Tariff": "टैरिफ़", + "Settings": "समायोजन", + "Feed Back": "प्रतिक्रिया", + "Promos": "प्रोमो", + "Please enter a valid 16-digit card number": + "कृपया वैध 16-अंकीय कार्ड नंबर दर्ज करें", + "Add Phone": "फ़ोन जोड़ें", + "Please enter a phone number": "कृपया एक फ़ोन नंबर दर्ज करें", + "You dont Add Emergency Phone Yet!": + "आपने अभी तक आपातकालीन फ़ोन नहीं जोड़ा है!", + "You will arrive to your destination after": + "इसके बाद आप अपने गंतव्य पर पहुंचेंगे", + "You can cancel Ride now": "अब आप राइड रद्द कर सकते हैं", + "You Can cancel Ride After Captain did not come in the time": + "कैप्टन के समय पर नहीं आने पर आप राइड कैंसिल कर सकते हैं", + "If you in Car Now. Press Start The Ride": + "यदि आप अभी कार में हैं। सवारी प्रारंभ करें दबाएँ", + "You Dont Have Any amount in": "आपके पास कोई राशि नहीं है", + "Wallet!": "बटुआ!", + "You Have": "आपके पास", + "Save Credit Card": "क्रेडिट कार्ड सहेजें", + "Show Promos": "प्रोमो दिखाएँ", + "10 and get 4% discount": "10 और पाएं 4% छूट", + "20 and get 6% discount": "20 और पाएं 6% छूट", + "40 and get 8% discount": "40 और पाएं 8% की छूट", + "100 and get 11% discount": "100 और पाएं 11% छूट", + "Pay with Your PayPal": "अपने PayPal से भुगतान करें", + "You will choose one of above !": + "आप उपरोक्त में से किसी एक को चुनेंगे!", + "Cancel": "रद्द करना", + "Delete My Account": "मेरा एकाउंट हटा दो", + "Edit Profile": "प्रोफ़ाइल संपादित करें", + "Name": "नाम", + "Update Gender": "लिंग अद्यतन करें", + "Education": "शिक्षा", + "Update Education": "शिक्षा को अद्यतन करें", + "Employment Type": "रोजगार के प्रकार", + "SOS Phone": "एसओएस फ़ोन", + "High School Diploma": "हाई स्कूल डिप्लोमा", + "Associate Degree": "एसोसिएट डिग्री", + "Bachelor's Degree": "स्नातक की डिग्री", + "Master's Degree": "स्नातकोत्तर उपाधि", + "Doctoral Degree": "डॉक्टर की डिग्री", + "Promos For today": "आज के लिए प्रोमो", + "Copy this Promo to use it in your Ride!": + "अपनी यात्रा में उपयोग करने के लिए इस प्रोमो को कॉपी करें!", + "To change some Settings": "कुछ सेटिंग्स बदलने के लिए", + "To change Language the App": "ऐप में भाषा बदलने के लिए", + "Order Request Page": "आदेश अनुरोध पृष्ठ", + "Rouats of Trip": "यात्रा के मार्ग", + "Passenger Name is": "यात्री का नाम है", + "Total From Passenger is": "यात्री से कुल है", + "Duration To Passenger is": "यात्री को अवधि है", + "Distance To Passenger is": "यात्री से दूरी है", + "Total For You is": "आपके लिए कुल है", + "Distance is": "दूरी है", + "KM": "किमी", + "Duration of Trip is": "यात्रा की अवधि है", + "Minutes": "मिनट", + "Apply Order": "आदेश लागू करें", + "Refuse Order": "आदेश अस्वीकार करें", + "Rate Captain": "कैप्टन को रेट करें", + "Enter your Note": "अपना नोट दर्ज करें", + "Type something...": "कुछ लिखें...", + "Submit rating": "रेटिंग सबमिट करें", + "Rate Passenger": "यात्री दर", + "Ride Summary": "सवारी सारांश", + "welcome_message": "स्वागत_संदेश", + "app_description": "ऐप_विवरण", + "get_to_destination": "गंतव्य तक पहुंचें", + "get_a_ride": "गाड़ी चलाकर देखें", + "safe_and_comfortable": "सुरक्षित_और_आरामदायक", + "committed_to_safety": "सुरक्षा के लिए प्रतिबद्ध", + "Driver Applied the Ride for You": + "ड्राइवर ने आपके लिए सवारी लागू की", + "Show latest promo": "नवीनतम प्रोमो दिखाएँ", + "Cancel Trip": "यात्रा रद्द करें", + "Passenger Cancel Trip": "यात्री ने यात्रा रद्द कर दी", + "Please stay on the picked point.": + "कृपया चुने गए बिंदु पर बने रहें।", + "Trip is Begin": "यात्रा आरंभ है", + "Hi ,I will go now": "नमस्ते, मैं अब जाऊँगा", + "Passenger come to you": "यात्री तुम्हारे पास आओ", + "Hi ,I Arrive your site": "नमस्ते, मैं आपकी साइट पर पहुंचा हूं", + "Driver Finish Trip": "ड्राइवर यात्रा समाप्त करें", + "you will pay to Driver": "आप ड्राइवर को भुगतान करेंगे", + "Driver Cancel Your Trip": "ड्राइवर अपनी यात्रा रद्द करें", + "you will pay to Driver you will be pay the cost of driver time look to your SEFER Wallet": + "आप ड्राइवर को भुगतान करेंगे, आपको ड्राइवर के समय की लागत का भुगतान किया जाएगा, अपने SEFER वॉलेट को देखें", + "I will go now": "अब मै जाऊँगी", + "You Have Tips": "आपके पास युक्तियाँ हैं", + "tips": "सुझावों", + "Total is": "कुल है", + "الْمَجْمُوع هُوَ": "الْمَجْمُوع هُوَ", + "No,I want": "नहीं, मैं चाहता हूं", + "Your fee is": "आपकी फीस है", + "Do you want to pay Tips for this Driver": + "क्या आप इस ड्राइवर के लिए टिप्स का भुगतान करना चाहते हैं?", + "Tip is": "टिप है", + "Tip is": "टिप है", + "Camera Access Denied.": "कैमरा एक्सेस अस्वीकृत.", + "Open Settings": "खुली सेटिंग", + "GPS Required Allow !.": "जीपीएस आवश्यक अनुमति दें!", + "Your Account is Deleted": "आपका खाता हटा दिया गया है", + "Are you sure to delete your account?": + "क्या आप निश्चित रूप से अपना खाता हटाना चाहते हैं?", + "Your data will be erased after 2 weeks": + "2 सप्ताह के बाद आपका डेटा मिटा दिया जाएगा", + "And you will can't return to use app after 1 month": + "और आप 1 महीने के बाद ऐप का उपयोग वापस नहीं कर पाएंगे", + "وَلَن تَسْتَطِيع اسْتِخْدَام التَّطْبِيق مَرَّة أُخْرَى بَعْد شَهْر": + "और देखें هْر", + "Enter Your First Name": "अपना पहला नाम दर्ज करें", + "Are you Sure to LogOut?": + "क्या आप निश्चित रूप से लॉगआउट करना चाहते हैं?", + "Email Wrong": "ईमेल ग़लत", + "Email you inserted is Wrong.": "आपके द्वारा डाला गया ईमेल गलत है.", + "You have finished all times": "आपने सभी समय समाप्त कर दिए हैं", + "if you want help you can email us here": + "यदि आप सहायता चाहते हैं तो आप हमें यहां ईमेल कर सकते हैं", + "Thanks": "धन्यवाद", + "Email Us": "हमें ईमेल करें", + "I cant register in your app in face detection": + "मैं चेहरे की पहचान में आपके ऐप में पंजीकरण नहीं कर सकता", + "Hi": "नमस्ते", + "No face detected": "कोई चेहरा नहीं मिला", + "Image detecting result is": "छवि का पता लगाने का परिणाम है", + "from 3 times Take Attention": "3 बार से ध्यान दें", + "Be sure for take accurate images please": + "कृपया सटीक चित्र लेना सुनिश्चित करें", + "You have": "आपके पास", + "لَدَيْك": "لَدَيْك", + "image verified": "छवि सत्यापित", + "Next": "अगला", + "There is no help Question here": "यहां कोई सहायता प्रश्न नहीं है", + "Call End": "कॉल समाप्त", + "You dont have Points": "आपके पास अंक नहीं हैं", + "You Are Stopped For this Day !": "आपको इस दिन के लिए रोका गया है!", + "You must be charge your Account": "आपको अपना खाता चार्ज करना होगा", + "You Refused 3 Rides this Day that is the reason": + "आपने इस दिन 3 सवारी से इनकार कर दिया, यही कारण है", + "See you Tomorrow!": "कल मिलते हैं!", + "لِقَائِنَا غَدًا!": "لِقَائِنَا غَدًا!", + "Recharge my Account": "मेरा खाता रिचार्ज करें", + "Ok , See you Tomorrow": "ठीक है, कल मिलते हैं", + "You are Stopped": "आपको रोका गया है", + "Connected": "जुड़े हुए", + "Not Connected": "जुड़े नहीं हैं", + "Your are far from passenger location": "आप यात्री स्थान से दूर हैं", + "go to your passenger location before": + "पहले अपने यात्री स्थान पर जाएँ", + "Passenger cancel trip": "यात्री ने यात्रा रद्द कर दी", + "يُلْغِي الرَّاكِب الرِّحْلَة": "يُلْغِي الرَّاكِب الرِّحْلَة", + "You will get cost of your work for this trip": + "इस यात्रा के लिए आपको अपने काम की लागत मिलेगी", + "in your wallet": "आपके बटुए में", + "you gain": "आपको लाभ", + "Order Cancelled": "आदेश रद्द किया गया", + "Order Cancelled by Passenger": + "यात्री द्वारा ऑर्डर रद्द कर दिया गया", + "Success": "सफलता", + "Feedback data saved successfully": + "फ़ीडबैक डेटा सफलतापूर्वक सहेजा गया", + "No Promo for today .": "आज के लिए कोई प्रोमो नहीं.", + "Select your destination": "अपना गंतव्य चुनें", + "Search for your Start point": "अपना प्रारंभ बिंदु खोजें", + "Search for waypoint": "मार्गबिंदु खोजें", + "Current Location": "वर्तमान स्थान", + "Add Location 1": "स्थान 1 जोड़ें", + "You must Verify email !.": "आपको ईमेल सत्यापित करना होगा!", + "Cropper": "कबूतर", + "Saved Sucssefully": "सफलतापूर्वक बचाया गया", + "Select Date": "तारीख़ चुनें", + "Birth Date": "जन्म तिथि", + "Ok": "ठीक है", + "the 500 points equal 30 JOD": "500 अंक 30 JOD के बराबर हैं", + "the 500 points equal 30 JOD for you": + "आपके लिए 500 अंक 30 जेओडी के बराबर हैं", + "So go and gain your money": "तो जाओ और अपना पैसा हासिल करो", + "فَاسْتَحِقَّ فُلُوسَك وَاكْسِب النِّقَاط": + "فَاسْتَحِقَّ فُلُوسَك وَاكْسِب النِّقَاط", + "token updated": "टोकन अद्यतन किया गया", + "Add Location 2": "स्थान 2 जोड़ें", + "Add Location 3": "स्थान 3 जोड़ें", + "Add Location 4": "स्थान 4 जोड़ें", + "Waiting for your location": "आपके स्थान की प्रतीक्षा है", + "Search for your destination": "अपनी मंजिल खोजें", + "Hi! This is": "नमस्ते! यह है", + "I am using": "मैं उपयोग कर रहा हूँ", + "to ride with": "साथ घूमने के लिए", + "as the driver.": "ड्राइवर के रूप में.", + "is driving a": "एक चला रहा है", + "with license plate": "लाइसेंस प्लेट के साथ", + "I am currently located at": "मैं वर्तमान में स्थित हूँ", + "Please go to Car now": "कृपया अब कार पर जाएँ", + "If you need to reach me, please contact the driver directly at": + "यदि आपको मुझ तक पहुंचने की आवश्यकता है, तो कृपया सीधे ड्राइवर से संपर्क करें", + "No Car or Driver Found in your area.": + "आपके क्षेत्र में कोई कार या ड्राइवर नहीं मिला.", + "Please Try anther time": "कृपया अगली बार प्रयास करें", + "There no Driver Aplly your order sorry for that": + "वहां कोई ड्राइवर आपके ऑर्डर को लागू नहीं कर रहा है, इसके लिए क्षमा करें", + "Trip Cancelled": "यात्रा रद्द", + "The Driver Will be in your location soon .": + "ड्राइवर जल्द ही आपके स्थान पर होगा।", + "The distance less than 500 meter.": "500 मीटर से कम दूरी.", + "Promo End !": "प्रोमो समाप्त!", + "There is no notification yet": "अभी तक कोई अधिसूचना नहीं है", + "Use Touch ID or Face ID to confirm payment": + "भुगतान की पुष्टि के लिए टच आईडी या फेस आईडी का उपयोग करें", + "Contact us for any questions on your order.": + "अपने ऑर्डर पर किसी भी प्रश्न के लिए हमसे संपर्क करें।", + "Pyament Cancelled .": "भुगतान रद्द।", + "type here": "यहाँ टाइप करें", + "Scan Driver License": "ड्राइवर लाइसेंस स्कैन करें", + "Please put your licence in these border": + "कृपया अपना लाइसेंस इन सीमा में रखें", + "Camera not initialized yet": "कैमरा अभी प्रारंभ नहीं हुआ है", + "Take Image": "छवि ले लो", + "AI Page": "एआई पेज", + "Take Picture Of ID Card": "आईडी कार्ड की तस्वीर लें", + "Take Picture Of Driver License Card": + "ड्राइवर लाइसेंस कार्ड की तस्वीर लें", + "We are process picture please wait": + "हम प्रक्रिया चित्र हैं कृपया प्रतीक्षा करें", + "There is no data yet.": "अभी तक कोई डेटा नहीं है.", + "Name :": "नाम :", + "Drivers License Class:": "चालक लाइसेंस वर्ग:", + "Document Number:": "दस्तावेज़ संख्या:", + "Address:": "पता:", + "Height:": "ऊंचाई:", + "Expiry Date:": "समाप्ति तिथि:", + "Date of Birth:": "जन्म की तारीख:", + "You can\"t continue with us .": "आप हमारे साथ जारी नहीं रह सकते.", + "You should renew Driver license": + "आपको ड्राइवर लाइसेंस का नवीनीकरण कराना चाहिए", + "Detect Your Face": "अपना चेहरा पहचानें", + "Go to next step": "अगले चरण पर जाएँ", + "scan Car License.": "कार लाइसेंस स्कैन करें.", + "aاسْتِخْرَاج رُخْصَة السَّيَّارَة.": + "aاسْتِخْرَاج رُخْصَة السَّيَّارَة.", + "Name in arabic": "अरबी में नाम", + "Drivers License Class": "चालक लाइसेंस वर्ग", + "Date of Birth": "जन्म की तारीख", + "Age": "आयु", + "Lets check Car license": "आइए कार लाइसेंस की जांच करें", + "Car Kind": "कार प्रकार", + "Car Plate": "कार की प्लेट", + "Lets check License Back Face": "आइए लाइसेंस बैक फेस की जाँच करें", + "Car License Card": "कार लाइसेंस कार्ड", + "No image selected yet": "अभी तक कोई छवि चयनित नहीं है", + "Made :": "बनाया :", + "model :": "नमूना :", + "VIN :": "विन :", + "year :": "वर्ष :", + "ُExpire Date": "समाप्त होने की तिथि", + "Login Driver": "ड्राइवर लॉगिन करें", + "Password must br at least 6 character.": + "पासवर्ड कम से कम 6 अक्षर का होना चाहिए।", + "if you don\"t have account": "यदि आपके पास खाता नहीं है", + "Here recorded trips audio": + "यहां यात्राओं का ऑडियो रिकॉर्ड किया गया है", + "Register as Driver": "ड्राइवर के रूप में पंजीकरण करें", + "Privacy Notice": "गोपनीयता सूचना", + "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the": + "नीचे 'मैं सहमत हूं' का चयन करके, मैंने उपयोग की शर्तों की समीक्षा कर ली है और उनसे सहमत हूं और स्वीकार करता हूं", + ". I am at least 18 years of age.": ". मैं कम से कम 18 साल का हूँ।", + "Log Out Page": "लॉग आउट पेज", + "Log Off": "लॉग ऑफ़", + "Register Driver": "ड्राइवर पंजीकृत करें", + "Verify Email For Driver": "ड्राइवर के लिए ईमेल सत्यापित करें", + "Admin DashBoard": "व्यवस्थापक डैशबोर्ड", + "Your name": "आपका नाम", + "your ride is applied": "आपकी सवारी लागू है", + "Your password": "आपका पासवर्ड", + "H and": "हाथ", + "LE": "ले", + "JOD": "जोड", + "m": "एम", + "We search nearst Driver to you": + "हम आपके निकटतम ड्राइवर की खोज करते हैं", + "please wait till driver accept your order": + "कृपया तब तक प्रतीक्षा करें जब तक ड्राइवर आपका आदेश स्वीकार न कर ले", + "No accepted orders? Try raising your trip fee to attract riders.": + "कोई स्वीकृत आदेश नहीं? सवारियों को आकर्षित करने के लिए अपनी यात्रा शुल्क बढ़ाने का प्रयास करें।", + "You should select one": "आपको एक का चयन करना चाहिए", + "The driver accept your order for": + "ड्राइवर आपका आदेश स्वीकार करता है", + "Increase Fee": "शुल्क बढ़ाएँ", + "No, thanks": "जी नहीं, धन्यवाद", + "The driver on your way": "ड्राइवर आपके रास्ते में है", + "Total price from": "से कुल कीमत", + "Order Details Speed": "ऑर्डर विवरण गति", + "Order Applied": "आदेश लागू", + "accepted your order": "आपका आदेश स्वीकार कर लिया", + "We regret to inform you that another driver has accepted this order.": + "हमें आपको यह बताते हुए खेद हो रहा है कि एक अन्य ड्राइवर ने यह आदेश स्वीकार कर लिया है।", + "Selected file:": "चयनित फ़ाइल:", + "Your trip cost is": "आपकी यात्रा की लागत है", + "this will delete all files from your device": + "यह आपके डिवाइस से सभी फ़ाइलें हटा देगा", + "you have a negative balance of": "आपके पास ऋणात्मक संतुलन है", + "in your": "आपके में", + "Exclusive offers and discounts always with the Sefer app": + "सेफ़र ऐप के साथ हमेशा विशेष ऑफ़र और छूट", + "Please go to Car Driver": "कृपया कार चालक के पास जाएँ", + "wallet due to a previous trip.": "पिछली यात्रा के कारण बटुआ।", + "Submit Question": "प्रश्न सबमिट करें", + "Please enter your Question.": "कृपया अपना प्रश्न दर्ज करें.", + "Help Details": "सहायता विवरण", + "No trip yet found": "अभी तक कोई यात्रा नहीं मिली", + "No Response yet.": "कोई उत्तर नहीं अब तक।", + "You Earn today is": "आप आज ही कमा सकते हैं", + "You Have in": "आपके पास है", + "Total points is": "कुल अंक है", + "Total Connection Duration:": "कुल कनेक्शन अवधि:", + "H and": "हाथ", + "Passenger name :": "यात्री का नाम :", + "Cost Of Trip IS": "यात्रा की लागत है", + "Arrival time": "आगमन का समय", + "arrival time to reach your point": + "अपनी बात तक पहुंचने के लिए आगमन का समय", + "For Speed and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": + "स्पीड और डिलीवरी ट्रिप के लिए, कीमत की गणना गतिशील रूप से की जाती है। आरामदायक यात्राओं के लिए, कीमत समय और दूरी पर आधारित होती है", + "Hello this is Driver": "नमस्ते, मैं ड्राइवर हूं", + "Is the Passenger in your Car ?": "क्या यात्री आपकी कार में है?", + "Please wait for the passenger to enter the car before starting the trip.": + "कृपया यात्रा शुरू करने से पहले यात्री के कार में प्रवेश करने की प्रतीक्षा करें।", + "No ,still Waiting.": "नहीं, अभी भी इंतज़ार है.", + "I arrive you": "मैं तुम्हारे पास पहुँचता हूँ", + "I Arrive your site": "मैं आपकी साइट पर पहुंचा हूं", + "You are not in near to passenger location": + "आप यात्री स्थान के निकट नहीं हैं", + "please go to picker location exactly": + "कृपया बिल्कुल पिकर स्थान पर जाएं", + "You Can Cancel Trip And get Cost of Trip From": + "आप यात्रा रद्द कर सकते हैं और यात्रा का खर्च प्राप्त कर सकते हैं", + "Are you sure to cancel?": + "क्या आप निश्चित रूप से रद्द करना चाहते हैं?", + "Yes": "हाँ", + "Insert Emergincy Number": "आपातकालीन नंबर डालें", + "Best choice for comfort car and flexible route and stops point": + "आरामदायक कार और लचीले मार्ग और स्टॉप पॉइंट के लिए सर्वोत्तम विकल्प", + "Insert": "डालना", + "This is for delivery or a motorcycle.": + "यह डिलीवरी या मोटरसाइकिल के लिए है।", + "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": + "यह यात्रा एक निश्चित कीमत पर आपके शुरुआती बिंदु से सीधे आपके गंतव्य तक जाती है। चालक को नियोजित मार्ग का पालन करना होगा", + "You can decline a request without any cost": + "आप बिना किसी लागत के किसी अनुरोध को अस्वीकार कर सकते हैं", + "Perfect for adventure seekers who want to experience something new and exciting": + "साहसिक चाहने वालों के लिए बिल्कुल सही जो कुछ नया और रोमांचक अनुभव करना चाहते हैं", + "My current location is:": "मेरा वर्तमान स्थान है:", + "and I have a trip on": "और मेरी एक यात्रा है", + "App with Passenger": "यात्री के साथ ऐप", + "مع الراكب": "और भी बहुत कुछ", + "You will be pay the cost to driver or we will get it from you on next trip": + "आपको ड्राइवर को लागत का भुगतान करना होगा या अगली यात्रा पर हम इसे आपसे प्राप्त करेंगे", + "Trip has Steps": "यात्रा के चरण हैं", + "Distance from Passenger to destination is": + "यात्री से गंतव्य तक की दूरी है", + "price is": "कीमत है", + "This ride type does not allow changes to the destination or additional stops": + "यह सवारी प्रकार गंतव्य में परिवर्तन या अतिरिक्त स्टॉप की अनुमति नहीं देता है", + "This price may be changed": "इस कीमत में बदलाव किया जा सकता है", + "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": + "कोई सिम कार्ड नहीं, कोई समस्या नहीं! हमारे ऐप के माध्यम से सीधे अपने ड्राइवर को कॉल करें। हम आपकी गोपनीयता सुनिश्चित करने के लिए उन्नत तकनीक का उपयोग करते हैं।", + "This ride type allows changes, but the price may increase": + "यह सवारी प्रकार परिवर्तन की अनुमति देता है, लेकिन कीमत बढ़ सकती है", + "message From passenger": "यात्री की ओर से संदेश", + "Select one message": "एक संदेश चुनें", + "My location is correct. You can search for me using the navigation app": + "मेरा स्थान सही है. आप नेविगेशन ऐप का उपयोग करके मुझे खोज सकते हैं", + "I'm waiting for you": "मैं आपका इंतज़ार कर रहा हूं", + "Hello, I'm at the agreed-upon location": + "नमस्ते, मैं सहमत स्थान पर हूं", + "We noticed the speed is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": + "हमने देखा कि गति 100 किमी/घंटा से अधिक है। कृपया अपनी सुरक्षा के लिए गति धीमी करें। यदि आप असुरक्षित महसूस करते हैं, तो आप अपनी यात्रा का विवरण किसी संपर्क के साथ साझा कर सकते हैं या लाल एसओएस बटन का उपयोग करके पुलिस को कॉल कर सकते हैं।", + "Warning: Speeding detected!": "चेतावनी: तेज़ गति का पता चला!", + "Please help! Contact me as soon as possible.": + "कृपया मदद करे! यथाशीघ्र मुझसे संपर्क करें.", + "Share Trip Details": "यात्रा विवरण साझा करें", + "Car Plate is": "कार प्लेट है", + "the 300 points equal 300 L.E for you": + "आपके लिए 300 अंक 300 एल.ई. के बराबर हैं", + "So go and gain your money": "तो जाओ और अपना पैसा हासिल करो", + "the 300 points equal 300 L.E": "300 अंक 300 एल.ई. के बराबर हैं", + "The payment was not approved. Please try again.": + "भुगतान स्वीकृत नहीं हुआ. कृपया पुन: प्रयास करें।", + "Payment Failed": "भुगतान विफल रही", + "Error": "गलती", + "An error occurred during the payment process.": + "भुगतान प्रक्रिया के दौरान एक त्रुटि उत्पन्न हुई.", + "The payment was approved.": "भुगतान स्वीकृत किया गया।", + "Payment Successful": "भुगतान सफल", + "No ride found yet": "अभी तक कोई सवारी नहीं मिली", + "Accept Order": "आदेश स्वीकार करें", + "reject your order.": "अपना आदेश अस्वीकार करें.", + "Bottom Bar Example": "निचला बार उदाहरण", + "Driver phone": "ड्राइवर का फ़ोन", + "Statistics": "आंकड़े", + "Origin": "मूल", + "Destination": "गंतव्य", + "Driver Name": "चालक का नाम", + "Driver Car Plate": "ड्राइवर कार प्लेट", + "Available for rides": "सवारी के लिए उपलब्ध है", + "Scan Id": "स्कैन आईडी", + "Camera not initilaized yet": "कैमरा अभी प्रारंभ नहीं हुआ है", + "Scan ID MklGoogle": "स्कैन आईडी MklGoogle", + "Language": "भाषा", + "Jordan": "जॉर्डन", + "USA": "यूएसए", + "Egypt": "मिस्र", + "Turkey": "टर्की", + "Saudi Arabia": "सऊदी अरब", + "Qatar": "कतर", + "Bahrain": "बहरीन", + "Kuwait": "कुवैट", + "But you have a negative salary of": "लेकिन आपका वेतन नकारात्मक है", + "Promo Code": "प्रचार कोड", + "Your trip distance is": "आपकी यात्रा की दूरी है", + "Enter promo code": "प्रचार कि नियमावली दर्ज करो", + "You have promo!": "आपके पास प्रोमो है!", + "Cost Duration": "लागत अवधि", + "Duration is": "अवधि है", + "Leave": "छुट्टी", + "Join": "जोड़ना", + "You Should be select reason.": "आपको कारण का चयन करना चाहिए.", + "\$": "\$", + "Waiting for Driver ...": "ड्राइवर का इंतज़ार है...", + "Latest Recent Trip": "नवीनतम हालिया यात्रा", + "from your list": "आपकी सूची से", + "Do you want to change Work location": + "क्या आप कार्यस्थल बदलना चाहते हैं?", + "Do you want to change Home location": + "क्या आप घर का स्थान बदलना चाहते हैं?", + "We Are Sorry That we dont have cars in your Location!": + "हमें खेद है कि आपके स्थान पर हमारे पास कारें नहीं हैं!", + "Choose from Map": "मानचित्र से चुनें", + "Pick your ride location on the map - Tap to confirm": + "मानचित्र पर अपनी सवारी का स्थान चुनें - पुष्टि करने के लिए टैप करें", + "To Work": "काम करने के लिए", + "Are you want to go this site": "क्या आप इस साइट पर जाना चाहते हैं", + "Closest & Cheapest": "निकटतम एवं सबसे सस्ता", + "Work Saved": "कार्य सहेजा गया", + "Sefer is the ride-hailing app that is safe, reliable, and accessible.": + "सेफ़र एक राइड-हेलिंग ऐप है जो सुरक्षित, विश्वसनीय और सुलभ है।", + "With Sefer, you can get a ride to your destination in minutes.": + "सेफ़र के साथ, आप मिनटों में अपने गंतव्य तक यात्रा प्राप्त कर सकते हैं।", + "Sefer is committed to safety, and all of our captains are carefully screened and background checked.": + "सेफ़र सुरक्षा के लिए प्रतिबद्ध है, और हमारे सभी कप्तानों की सावधानीपूर्वक जांच की जाती है और पृष्ठभूमि की जांच की जाती है।", + "To Home": "घर के लिए", + "Home Saved": "होम सहेजा गया", + "Destination selected": "गंतव्य चयनित", + "Now select start pick": "अब स्टार्ट पिक चुनें", + "Pick from map": "मानचित्र से चुनें", + "Click here point": "यहां क्लिक करें बिंदु", + "No Car in your site. Sorry!": + "आपकी साइट पर कोई कार नहीं. क्षमा मांगना!", + "Nearest Car for you about": "आपके लिए निकटतम कार के बारे में", + "N/A": "एन/ए", + "From :": "से :", + "Get Details of Trip": "यात्रा का विवरण प्राप्त करें", + "If you want add stop click here": + "यदि आप स्टॉप जोड़ना चाहते हैं तो यहां क्लिक करें", + "Driver": "चालक", + "Where you want go": "आप कहाँ जाना चाहते हैं", + "My Card": "मेरे कार्ड", + "Start Record": "रिकॉर्ड प्रारंभ करें", + "Wallet": "बटुआ", + "History of Trip": "यात्रा का इतिहास", + "Helping Center": "सहायता केंद्र", + "Record saved": "रिकॉर्ड सहेजा गया", + "Trips recorded": "यात्राएँ रिकार्ड की गईं", + "Select Your Country": "अपने देश का चयन करॊ", + "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": + "यह सुनिश्चित करने के लिए कि आपको अपने स्थान के लिए सबसे सटीक जानकारी प्राप्त हो, कृपया नीचे अपना देश चुनें। इससे ऐप अनुभव और सामग्री को आपके देश के अनुरूप बनाने में मदद मिलेगी।", + "Are you sure to delete recorded files": + "क्या आप निश्चित रूप से रिकॉर्ड की गई फ़ाइलों को हटाना चाहते हैं?", + "Select recorded trip": "रिकॉर्ड की गई यात्रा का चयन करें", + "Card Number": "कार्ड संख्या", + "Hi, Where to": "नमस्ते, कहां जाएं", + "Pick your destination from Map": "मानचित्र से अपना गंतव्य चुनें", + "Add Stops": "स्टॉप जोड़ें", + "Get Direction": "दिशा प्राप्त करें", + "Add Location": "स्थान जोड़ना", + "Switch Rider": "राइडर स्विच करें", + "You will arrive to your destination after timer end.": + "टाइमर समाप्त होने के बाद आप अपने गंतव्य पर पहुंच जाएंगे।", + "You can cancel trip": "आप यात्रा रद्द कर सकते हैं", + "The driver waitting you in picked location .": + "ड्राइवर चयनित स्थान पर आपका इंतजार कर रहा है।", + "Pay with Your": "अपने साथ भुगतान करें", + "Pay with Credit Card": "क्रेडिट कार्ड से भुगतान करें", + "Payment History": "भुगतान इतिहास", + "Show Promos to Charge": "चार्ज करने के लिए प्रोमो दिखाएं", + "Point": "बिंदु", + "Driver Wallet": "ड्राइवर वॉलेट", + "Total Points is": "कुल अंक है", + "Total Budget from trips is": "यात्राओं का कुल बजट है", + "Total Amount:": "कुल राशि:", + "Total Budget from trips by": "यात्राओं का कुल बजट", + "Credit card is": "क्रेडिट कार्ड है", + "بطاقة الائتمان هي": "بطاقة الائتمان هي", + "This amount for all trip I get from Passengers": + "यह राशि मुझे सभी यात्राओं के लिए यात्रियों से मिलती है", + "Pay from my budget": "मेरे बजट से भुगतान करें", + "This amount for all trip I get from Passengers and Collected For me in": + "यह राशि मुझे सभी यात्राओं के लिए यात्रियों से मिलती है और मेरे लिए एकत्रित की जाती है", + "You can buy points from your budget": + "आप अपने बजट से पॉइंट खरीद सकते हैं", + "insert amount": "राशि डालें", + "You can buy Points to let you online": + "आप ऑनलाइन देने के लिए पॉइंट्स खरीद सकते हैं", + "by this list below": "नीचे दी गई इस सूची के द्वारा", + "من خلال القائمة أدناه": "من خلال القائمة أدناه", + "Create Wallet to receive your money": + "अपना पैसा प्राप्त करने के लिए वॉलेट बनाएं", + "Enter your feedback here": "अपनी प्रतिक्रिया यहां दर्ज करें", + "Please enter your feedback.": "कृपया अपनी प्रतिक्रिया दर्ज करें.", + "Feedback": "प्रतिक्रिया", + "Submit": "जमा करना", + "Click here to Show it in Map": + "इसे मानचित्र में दिखाने के लिए यहां क्लिक करें", + "Canceled": "रद्द", + "Type your Email": "अपना ईमेल टाइप करें", + "No I want": "नहीं, मैं चाहता हूं", + "Email is": "ईमेल है", + "Phone Number is": "फ़ोन नंबर है", + "Date of Birth is": "जन्मतिथि है", + "Sex is": "सेक्स है", + "Car Details": "कार विवरण", + "VIN is": "VIN है", + "Color is": "रंग है", + "Make is": "बनाओ है", + "Model is": "मॉडल है", + "Year is": "वर्ष है", + "Expiration Date": "समाप्ति तिथि", + "Edit Your data": "अपना डेटा संपादित करें", + "write vin for your car": "अपनी कार के लिए विन लिखें", + "VIN": "विन", + "write Color for your car": "अपनी कार के लिए रंग लिखें", + "write Make for your car": "अपनी कार के लिए बनाएं लिखें", + "write Model for your car": "अपनी कार के लिए मॉडल लिखें", + "write Year for your car": "अपनी कार के लिए वर्ष लिखें", + "write Expiration Date for your car": + "अपनी कार की समाप्ति तिथि लिखें", + "Tariffs": "टैरिफ", + "Minimum fare": "न्यूनतम किराया", + "Maximum fare": "अधिकतम किराया", + "Flag-down fee": "फ़्लैग-डाउन शुल्क", + "Including Tax": "कर सहित", + "BookingFee": "बुकिंग शुल्क", + "Morning": "सुबह", + "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": + "07:30 से 10:30 तक (गुरुवार, शुक्रवार, शनिवार, सोमवार)", + "Evening": "शाम", + "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": + "12:00 से 15:00 तक (गुरुवार, शुक्रवार, शनिवार, सोमवार)", + "Night": "रात", + "You have in account": "आपके खाते में है", + "Select Country": "देश चुनें", + "Ride Today :": "आज सवारी करें:", + "After this period": "इस अवधि के बाद", + "You can\"t cancel!": "आप रद्द नहीं कर सकते!", + "لا تستطيع الغاء الرحله": "لا تستطيع الغاء الرحله", + "from 23:59 till 05:30": "23:59 से 05:30 तक", + "Rate Driver": "ड्राइवर को रेट करें", + "Total Cost is": "कुल लागत है", + "Write note": "नोट लिखो", + "Time to arrive": "आने का समय हो गया", + "Ride Summaries": "सवारी सारांश", + "Total Cost": "कुल लागत", + "Average of Hours of": "घंटों का औसत", + "is ON for this month": "इस महीने के लिए चालू है", + "Days": "दिन", + "Total Hours on month": "महीने पर कुल घंटे", + "Counts of Hours on days": "दिनों पर घंटों की गिनती", + "OrderId": "आदेश कामतत्व", + "created time": "समय बनाया", + "Speed Over": "स्पीड ओवर", + "I will slow down": "मैं धीमा कर दूंगा", + "Map Passenger": "मानचित्र यात्री", + "Be Slowly": "धीरे-धीरे रहो", + "If you want to make Google Map App run directly when you apply order": + "यदि आप ऑर्डर लागू करते समय Google मैप ऐप को सीधे चलाना चाहते हैं", + "You can change the language of the app": + "आप ऐप की भाषा बदल सकते हैं", + "Your Budget less than needed": "आपका बजट ज़रूरत से कम है", + "You can change the Country to get all features": + "आप सभी सुविधाएँ प्राप्त करने के लिए देश बदल सकते हैं", + "Change Country": "देश बदलें" + }, + "ru": { + "Sign In by Apple": "Войти через Apple", + "Sign In by Google": "Войти через Google", + "How do I request a ride?": "Как заказать поездку?", + "Step-by-step instructions on how to request a ride through the Sefer app.": + "Пошаговые инструкции о том, как заказать поездку через приложение Sefer.", + "What types of vehicles are available?": + "Какие типы транспортных средств доступны?", + "Sefer offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": + "Sefer предлагает различные варианты автомобилей в соответствии с вашими потребностями, включая экономичные, комфортные и роскошные. Выберите вариант, который лучше всего соответствует вашему бюджету и количеству пассажиров.", + "How can I pay for my ride?": "Как я могу оплатить поездку?", + "Sefer offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": + "Sefer предлагает несколько способов оплаты для вашего удобства. Выберите между оплатой наличными или оплатой кредитной/дебетовой картой во время подтверждения поездки.", + "Can I cancel my ride?": "Могу ли я отменить поездку?", + "Yes, you can cancel your ride under certain conditions (e.g., before driver is assigned). See the Sefer cancellation policy for details.": + "Да, вы можете отменить поездку при определенных условиях (например, до того, как будет назначен водитель). Подробную информацию см. в правилах отмены бронирования Sefer.", + "Driver Registration & Requirements": + "Регистрация водителя и требования", + "How can I register as a driver?": + "Как я могу зарегистрироваться в качестве водителя?", + "What are the requirements to become a driver?": + "Каковы требования, чтобы стать водителем?", + "Visit our website or contact Sefer support for information on driver registration and requirements.": + "Посетите наш веб-сайт или свяжитесь со службой поддержки Sefer для получения информации о регистрации драйверов и требованиях.", + "How do I communicate with the other party (passenger/driver)?": + "Как мне связаться с другой стороной (пассажиром/водителем)?", + "Sefer provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": + "Sefer предоставляет функцию чата в приложении, позволяющую вам общаться с водителем или пассажиром во время поездки.", + "What safety measures does Sefer offer?": + "Какие меры безопасности предлагает Sefer?", + "Sefer prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": + "Компания Sefer уделяет приоритетное внимание вашей безопасности. Мы предлагаем такие функции, как проверка водителя, отслеживание поездок в приложении и варианты экстренной связи.", + "Frequently Questions": "Частые вопросы", + "User does not exist.": "Пользователь не существует.", + "We need your phone number to contact you and to help you.": + "Нам нужен ваш номер телефона, чтобы связаться с вами и помочь вам.", + "You will recieve code in sms message": + "Вы получите код в смс-сообщении", + "Please enter": "Пожалуйста входите", + "We need your phone number to contact you and to help you receive orders.": + "Нам нужен ваш номер телефона, чтобы связаться с вами и помочь вам получать заказы.", + "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": + "Полное имя в вашей судимости не совпадает с именем в ваших водительских правах. Пожалуйста, проверьте и предоставьте правильные документы.", + "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": + "Национальный номер в ваших водительских правах не совпадает с номером в вашем документе, удостоверяющем личность. Пожалуйста, проверьте и предоставьте правильные документы.", + "Capture an Image of Your Criminal Record": + "Сделайте снимок вашего судимости", + "IssueDate": "Дата выпуска", + "Capture an Image of Your car license front": + "Сделайте снимок передней части вашего автомобильного удостоверения", + "Capture an Image of Your ID Document front": + "Сделайте снимок лицевой стороны вашего документа, удостоверяющего личность", + "NationalID": "Национальный идентификатор", + "FullName": "Полное имя", + "InspectionResult": "Результат проверки", + "Criminal Record": "Судимость", + "The email or phone number is already registered.": + "Адрес электронной почты или номер телефона уже зарегистрированы.", + "To become a ride-sharing driver on the Sefer app, you need to upload your driver\"s license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Sefer app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": + "Чтобы стать водителем совместного использования поездок в приложении Sefer, вам необходимо загрузить свои водительские права, документ, удостоверяющий личность, и документ о регистрации автомобиля. Наша система искусственного интеллекта мгновенно проверит и проверит их подлинность всего за 2-3 минуты. Если ваши документы одобрены, вы можете начать работать водителем в приложении Sefer. Обратите внимание, что подача поддельных документов является серьезным правонарушением и может повлечь за собой немедленное увольнение и юридические последствия.", + "Documents check": "Проверка документов", + "Driver's License": "Водительское удостоверение", + "License Type": "Тип лицензии", + "National Number": "Национальный номер", + "Name (Arabic)": "Имя (арабское)", + "Name (English)": "Имя (английское)", + "Address": "Адрес", + "Issue Date": "Дата выпуска", + "Expiry Date": "Дата истечения срока действия", + "License Categories": "Категории лицензий", + "driver_license": "водительские права", + "Capture an Image of Your Driver License": + "Сделайте снимок своих водительских прав", + "ID Documents Back": "Документы, удостоверяющие личность Назад", + "National ID": "Национальный идентификатор", + "Occupation": "Занятие", + "Gender": "Пол", + "Religion": "Религия", + "Marital Status": "Семейное положение", + "Full Name (Marital)": "Полное имя (супружеское)", + "Expiration Date": "Дата окончания срока", + "Capture an Image of Your ID Document Back": + "Сделайте снимок вашего документа, удостоверяющего личность. Назад", + "ID Documents Front": "Документы, удостоверяющие личность", + "First Name": "Имя", + "CardID": "ID карты", + "Full Name": "Полное имя", + "Vehicle Details Front": "Детали автомобиля спереди", + "Plate Number": "Номерной знак", + "Owner Name": "Имя владельца", + "Vehicle Details Back": "Сведения об автомобиле Назад", + "Make": "Делать", + "Model": "Модель", + "Year": "Год", + "Chassis": "Шасси", + "Color": "Цвет", + "Displacement": "Смещение", + "Fuel": "Топливо", + "Tax Expiry Date": "Дата окончания налогового периода", + "Inspection Date": "Дата проверки", + "Capture an Image of Your car license back": + "Сделайте снимок обратно с вашими автомобильными правами", + "Capture an Image of Your Driver’s License": + "Сделайте снимок своих водительских прав", + "Sign in with Google for easier email and name entry": + "Войдите в систему с помощью Google, чтобы упростить ввод электронной почты и имени.", + "You will choose allow all the time to be ready receive orders": + "Вы выберете «Разрешить все время быть готовым получать заказы».", + "Welcome to Sefer!": "Добро пожаловать в Сефер!", + "Get to your destination quickly and easily.": + "Доберитесь до места назначения быстро и легко.", + "Enjoy a safe and comfortable ride.": + "Наслаждайтесь безопасной и комфортной поездкой.", + "Choose Language": "Выберите язык", + "Login": "Авторизоваться", + "Pay with Wallet": "Оплатить с помощью кошелька", + "Invalid MPIN": "Неверный MPIN", + "Invalid OTP": "Неверный OTP", + "Enter your email address": "Введите ваш адрес электронной почты", + "Please enter Your Email.": + "Пожалуйста, введите свой адрес электронной почты.", + "Enter your phone number": "Введите свой номер телефона", + "Please enter your phone number.": + "Пожалуйста введите ваш номер телефона.", + "Please enter Your Password.": "Пожалуйста введите ваш пароль.", + "Submit": "Представлять на рассмотрение", + "if you dont have account": "если у тебя нет аккаунта", + "Register": "регистр", + "Accept Ride's Terms & Review Privacy Notice": + "Примите Условия Ride и ознакомьтесь с Уведомлением о конфиденциальности", + "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": + "Выбрав «Я согласен» ниже, я ознакомился и согласен с Условиями использования, а также принимаю Уведомление о конфиденциальности. Мне как минимум 18 лет.", + "I Agree": "Я согласен", + "First name": "Имя", + "Enter your first name": "Введите свое имя", + "Please enter your first name.": "Пожалуйста, введите ваше имя.", + "Last name": "Фамилия", + "Enter your last name": "Введите свою фамилию", + "Please enter your last name.": "Пожалуйста, введите свою фамилию.", + "City": "Город", + "Please enter your City.": "Пожалуйста, укажите свой город.", + "Male": "Мужской", + "Female": "Женский", + "Verify Email": "Подтвердить Email", + "We sent 5 digit to your Email provided": + "Мы отправили 5-значный номер на указанный вами адрес электронной почты.", + "5 digit": "5 цифр", + "Send Verification Code": "Отправить код подтверждения", + "Your Ride Duration is": "Продолжительность вашей поездки составляет", + "You will be thier in": "ты будешь там", + "You trip distance is": "Расстояние вашей поездки составляет", + "Fee is": "Плата составляет", + "From :": "От :", + "To :": "К :", + "Add Promo": "Добавить промо", + "Confirm Selection": "Подтвердить выбор", + "distance is": "расстояние", + "duration is": "продолжительность", + "I don't need a ride anymore": "мне больше не нужна поездка", + "I was just trying the application": "Я просто пробовал приложение", + "No driver accepted my request": + "Ни один водитель не принял мой запрос", + "I added the wrong pick-up/drop-off location": + "Я добавил неправильное место получения/высадки.", + "I don't have a reason": "у меня нет причины", + "Other": "Другой", + "Can we know why you want to cancel Ride ?": + "Можем ли мы узнать, почему вы хотите отменить Ride?", + "Cancel Ride": "Отменить поездку", + "Add Payment Method": "Добавить способ оплаты", + "Your Wallet balance is": "Баланс вашего Кошелька", + "Ride Wallet": "Кошелек для поездок", + "Payment Method": "Способ оплаты", + "Type here Place": "Введите здесь Место", + "Are You sure to ride to": "Вы уверены, что поедете в", + "Confirm": "Подтверждать", + "Back": "Назад", + "You are Delete": "Вы удалены", + "Deleted": "Удалено", + "You Dont Have Any places yet !": "У вас пока нет мест!", + "Favorite Places": "Любимые места", + "From : Current Location": "Откуда: Текущее местоположение", + "Where to": "Куда", + "Notifications": "Уведомления", + "Profile": "Профиль", + "Home": "Дом", + "My Cared": "Мой заботливый", + "Add Card": "Добавить карту", + "Add Credit Card": "Добавить кредитную карту", + "Please enter the cardholder name": + "Пожалуйста, введите имя владельца карты", + "Please enter the expiry date": + "Пожалуйста, введите дату истечения срока действия", + "Please enter the CVV code": "Пожалуйста, введите CVV-код", + "Go To Favorite Places": "Перейти к любимым местам", + "Go to this Target": "Перейти к этой цели", + "My Profile": "Мой профайл", + "Sign Out": "Выход", + "Home Page": "Домашняя страница", + "Are you want to go to this site": "Вы хотите перейти на этот сайт?", + "MyLocation": "Мое местонахождение", + "my location": "мое местонахождение", + "Target": "Цель", + "Update": "Обновлять", + "You Should choose rate figure": "Вам следует выбрать цифру тарифа", + "Login Captin": "Войти Капитан", + "Register Captin": "Регистрация капитана", + "Send Verfication Code": "Отправить код подтверждения", + "KM": "км", + "End Ride": "Конец поездки", + "Minute": "минута", + "Go to passenger Location now": + "Перейти к местонахождению пассажира сейчас", + "Duration of the Ride is": "Продолжительность поездки составляет", + "Distance of the Ride is": "Расстояние поездки составляет", + "Name of the Passenger is": "Имя Пассажира", + "Hello this is Captain": "Привет, это капитан", + "Start the Ride": "Начать поездку", + "Please Wait If passenger want To Cancel!": + "Пожалуйста, подождите, если пассажир хочет отменить бронирование!", + "Total Duration:": "Общая продолжительность:", + "Active Duration:": "Активная продолжительность:", + "Waiting for Captin ...": "Жду капитана...", + "Age is": "Возраст", + "Rating is": "Рейтинг", + "to arrive you.": "приехать к тебе.", + "Order History": "История заказов", + "My Wallet": "Мой бумажник", + "Tariff": "Тариф", + "Settings": "Настройки", + "Feed Back": "Обратная связь", + "Promos": "Промоакции", + "Please enter a valid 16-digit card number": + "Пожалуйста, введите действительный 16-значный номер карты.", + "Add Phone": "Добавить телефон", + "Please enter a phone number": "Пожалуйста, введите номер телефона", + "You dont Add Emergency Phone Yet!": + "Вы еще не добавили экстренный телефон!", + "You will arrive to your destination after": + "Вы прибудете в пункт назначения после", + "You can cancel Ride now": "Вы можете отменить поездку сейчас", + "You Can cancel Ride After Captain did not come in the time": + "Вы можете отменить поездку, если капитан не пришел вовремя.", + "If you in Car Now. Press Start The Ride": + "Если вы сейчас в машине. Нажмите «Начать поездку»", + "You Dont Have Any amount in": "У вас нет суммы на счету", + "Wallet!": "Кошелек!", + "You Have": "У вас есть", + "Save Credit Card": "Сохранить кредитную карту", + "Show Promos": "Показать промо", + "10 and get 4% discount": "10 и получи скидку 4%", + "20 and get 6% discount": "20 и получи скидку 6%", + "40 and get 8% discount": "40 и получи скидку 8%", + "100 and get 11% discount": "100 и получи скидку 11%.", + "Pay with Your PayPal": "Оплатите с помощью PayPal", + "You will choose one of above !": + "Вы выберете один из вышеперечисленных!", + "Cancel": "Отмена", + "Delete My Account": "Удалите мой аккаунт", + "Edit Profile": "Редактировать профиль", + "Name": "Имя", + "Update Gender": "Обновить пол", + "Education": "Образование", + "Update Education": "Обновить образование", + "Employment Type": "вид занятости", + "SOS Phone": "Телефон экстренной помощи", + "High School Diploma": "Диплом средней школы", + "Associate Degree": "Степень специалиста", + "Bachelor's Degree": "Степень бакалавра", + "Master's Degree": "Степень магистра", + "Doctoral Degree": "Докторская степень", + "Promos For today": "Акции на сегодня", + "Copy this Promo to use it in your Ride!": + "Скопируйте это промо, чтобы использовать его в своей поездке!", + "To change some Settings": "Чтобы изменить некоторые настройки", + "To change Language the App": "Чтобы изменить язык приложения", + "Order Request Page": "Страница запроса заказа", + "Rouats of Trip": "Маршруты путешествия", + "Passenger Name is": "Имя пассажира", + "Total From Passenger is": "Всего от пассажира", + "Duration To Passenger is": + "Продолжительность для пассажира составляет", + "Distance To Passenger is": "Расстояние до пассажира", + "Total For You is": "Всего для вас", + "Distance is": "Расстояние", + "KM": "км", + "Duration of Trip is": "Продолжительность поездки", + "Minutes": "Минуты", + "Apply Order": "Применить заказ", + "Refuse Order": "Отказаться от заказа", + "Rate Captain": "Оценить Капитана", + "Enter your Note": "Введите вашу заметку", + "Type something...": "Введите что-либо...", + "Submit rating": "Отправить оценку", + "Rate Passenger": "Оценить пассажира", + "Ride Summary": "Обзор поездки", + "welcome_message": "приветственное сообщение", + "app_description": "app_description", + "get_to_destination": "get_to_destination", + "get_a_ride": "get_a_ride", + "safe_and_comfortable": "безопасно_и_комфортно", + "committed_to_safety": "привержен_безопасности", + "Driver Applied the Ride for You": + "Водитель организовал поездку за вас", + "Show latest promo": "Показать последнее промо", + "Cancel Trip": "Отменить поездку", + "Passenger Cancel Trip": "Пассажир отменил поездку", + "Please stay on the picked point.": + "Пожалуйста, оставайтесь на выбранной точке.", + "Trip is Begin": "Поездка начинается", + "Hi ,I will go now": "Привет, я пойду сейчас", + "Passenger come to you": "Пассажир пришел к вам", + "Hi ,I Arrive your site": "Привет, я прибыл на ваш сайт", + "Driver Finish Trip": "Водитель завершает поездку", + "you will pay to Driver": "ты заплатишь водителю", + "Driver Cancel Your Trip": "Водитель отменил поездку", + "you will pay to Driver you will be pay the cost of driver time look to your SEFER Wallet": + "вы заплатите водителю вы оплатите стоимость времени водителя посмотрите в своем кошельке SEFER", + "I will go now": "я пойду сейчас", + "You Have Tips": "У вас есть советы", + "tips": "советы", + "Total is": "Всего", + "الْمَجْمُوع هُوَ": "الْمَجْمُوع هُوَ", + "No,I want": "Нет, я хочу", + "Your fee is": "Ваша плата", + "Do you want to pay Tips for this Driver": + "Хотите ли вы платить чаевые этому водителю?", + "Tip is": "Совет", + "Tip is": "Совет", + "Camera Access Denied.": "Доступ к камере запрещен.", + "Open Settings": "Открыть настройки", + "GPS Required Allow !.": "Требуется GPS Разрешить!.", + "Your Account is Deleted": "Ваша учетная запись удалена", + "Are you sure to delete your account?": + "Вы уверены, что хотите удалить свой аккаунт?", + "Your data will be erased after 2 weeks": + "Ваши данные будут удалены через 2 недели.", + "And you will can't return to use app after 1 month": + "И вы не сможете вернуться к использованию приложения через 1 месяц.", + "وَلَن تَسْتَطِيع اسْتِخْدَام التَّطْبِيق مَرَّة أُخْرَى بَعْد شَهْر": + "Фициро -л. Метр تَسْتробного", + "Enter Your First Name": "Введите свое имя", + "Are you Sure to LogOut?": "Вы уверены, что хотите выйти?", + "Email Wrong": "Неправильный адрес электронной почты", + "Email you inserted is Wrong.": + "Введенный вами адрес электронной почты неправильный.", + "You have finished all times": "Вы закончили все времена", + "if you want help you can email us here": + "если вам нужна помощь, вы можете написать нам здесь", + "Thanks": "Спасибо", + "Email Us": "Свяжитесь с нами по электронной почте", + "I cant register in your app in face detection": + "Я не могу зарегистрироваться в вашем приложении для распознавания лиц", + "Hi": "Привет", + "No face detected": "Лицо не обнаружено", + "Image detecting result is": "Результат обнаружения изображения:", + "from 3 times Take Attention": "от 3 раз Обратите внимание", + "Be sure for take accurate images please": + "Обязательно делайте точные изображения, пожалуйста", + "You have": "У вас есть", + "لَدَيْك": "لَدَيْك", + "image verified": "изображение проверено", + "Next": "Следующий", + "There is no help Question here": "Здесь нет помощи. Вопрос", + "Call End": "Завершение вызова", + "You dont have Points": "У вас нет баллов", + "You Are Stopped For this Day !": "Вы остановлены на этот день!", + "You must be charge your Account": + "Вы должны списать средства с вашего счета", + "You Refused 3 Rides this Day that is the reason": + "Вы отказались от 3 поездок в этот день, вот и причина", + "See you Tomorrow!": "Увидимся завтра!", + "لِقَائِنَا غَدًا!": "لِقَائِنَا غَدًا!", + "Recharge my Account": "Пополните мой счет", + "Ok , See you Tomorrow": "ОК, увидимся завтра", + "You are Stopped": "Вы остановлены", + "Connected": "Связанный", + "Not Connected": "Не подключен", + "Your are far from passenger location": + "Вы находитесь далеко от пассажирского места.", + "go to your passenger location before": + "заранее подойдите к своему пассажирскому месту", + "Passenger cancel trip": "Пассажир отменил поездку", + "يُلْغِي الرَّاكِب الرِّحْلَة": "يُلْغِي الرَّاكِب الرِّحْلَة", + "You will get cost of your work for this trip": + "Вы получите стоимость своей работы за эту поездку", + "in your wallet": "в твоем кошельке", + "you gain": "Вы получаете", + "Order Cancelled": "Заказ отменен", + "Order Cancelled by Passenger": "Заказ отменен пассажиром", + "Success": "Успех", + "Feedback data saved successfully": + "Данные отзыва успешно сохранены.", + "No Promo for today .": "Никакой акции на сегодня.", + "Select your destination": "Выберите пункт назначения", + "Search for your Start point": "Найдите свою начальную точку", + "Search for waypoint": "Поиск путевой точки", + "Current Location": "Текущее местоположение", + "Add Location 1": "Добавить местоположение 1", + "You must Verify email !.": + "Вы должны подтвердить электронную почту!.", + "Cropper": "Кроппер", + "Saved Sucssefully": "Сохранено успешно", + "Select Date": "Выберите дату", + "Birth Date": "Дата рождения", + "Ok": "Хорошо", + "the 500 points equal 30 JOD": + "500 баллов равны 30 иорданским динарам", + "the 500 points equal 30 JOD for you": + "500 баллов равны для вас 30 иорданским динарам", + "So go and gain your money": "Так что иди и заработай свои деньги", + "فَاسْتَحِقَّ فُلُوسَك وَاكْسِب النِّقَاط": + "فَاسْتَحِقَّ فُلُوسَك وَاكْسِب النِّقَاط", + "token updated": "токен обновлен", + "Add Location 2": "Добавить местоположение 2", + "Add Location 3": "Добавить местоположение 3", + "Add Location 4": "Добавить местоположение 4", + "Waiting for your location": "Ожидание вашего местоположения", + "Search for your destination": "Найдите пункт назначения", + "Hi! This is": "Привет! Это", + "I am using": "Я использую", + "to ride with": "кататься с", + "as the driver.": "как водитель.", + "is driving a": "водит", + "with license plate": "с номерным знаком", + "I am currently located at": "В настоящее время я нахожусь по адресу", + "Please go to Car now": + "Пожалуйста, перейдите в раздел «Машина» сейчас", + "If you need to reach me, please contact the driver directly at": + "Если вам нужно связаться со мной, пожалуйста, свяжитесь с водителем напрямую по адресу:", + "No Car or Driver Found in your area.": + "В вашем районе не найдено ни автомобиля, ни водителя.", + "Please Try anther time": "Пожалуйста, попробуйте в другой раз", + "There no Driver Aplly your order sorry for that": + "Драйвера нет. Примените ваш заказ, извините за это.", + "Trip Cancelled": "Поездка отменена", + "The Driver Will be in your location soon .": + "Водитель скоро будет у вас.", + "The distance less than 500 meter.": "Расстояние менее 500 метров.", + "Promo End !": "Промо окончание!", + "There is no notification yet": "Уведомления пока нет", + "Use Touch ID or Face ID to confirm payment": + "Используйте Touch ID или Face ID для подтверждения оплаты.", + "Contact us for any questions on your order.": + "Свяжитесь с нами по любым вопросам по вашему заказу.", + "Pyament Cancelled .": "Пьямент отменен.", + "type here": "напечатайте здесь", + "Scan Driver License": "Сканировать водительские права", + "Please put your licence in these border": + "Пожалуйста, поместите свои права в эту рамку.", + "Camera not initialized yet": "Камера еще не инициализирована", + "Take Image": "Сделать снимок", + "AI Page": "Страница ИИ", + "Take Picture Of ID Card": "Сфотографировать удостоверение личности", + "Take Picture Of Driver License Card": + "Сфотографировать карту водительских прав", + "We are process picture please wait": + "Мы обрабатываем изображение, пожалуйста, подождите", + "There is no data yet.": "Данных пока нет.", + "Name :": "Имя :", + "Drivers License Class:": "Класс водительских прав:", + "Document Number:": "Номер документа:", + "Address:": "Адрес:", + "Height:": "Высота:", + "Expiry Date:": "Дата истечения срока действия:", + "Date of Birth:": "Дата рождения:", + "You can\"t continue with us .": "Вы не можете продолжать с нами.", + "You should renew Driver license": + "Вам следует продлить водительские права", + "Detect Your Face": "Обнаружьте свое лицо", + "Go to next step": "Перейти к следующему шагу", + "scan Car License.": "сканировать автомобильные права.", + "aاسْتِخْرَاج رُخْصَة السَّيَّارَة.": + "aاسْتِخْرَاج رُخْصَة السَّيَّارَة.", + "Name in arabic": "Имя на арабском", + "Drivers License Class": "Класс водительских прав", + "Date of Birth": "Дата рождения", + "Age": "Возраст", + "Lets check Car license": "Давайте проверим лицензию на автомобиль", + "Car Kind": "Вид автомобиля", + "Car Plate": "Автомобильная табличка", + "Lets check License Back Face": + "Давайте проверим обратную сторону лицензии", + "Car License Card": "Лицензионная карта автомобиля", + "No image selected yet": "Изображение еще не выбрано", + "Made :": "Сделал :", + "model :": "модель:", + "VIN :": "ВИН :", + "year :": "год :", + "ُExpire Date": "Дата истечения срока годности", + "Login Driver": "Войти в драйвер", + "Password must br at least 6 character.": + "Пароль должен содержать не менее 6 символов.", + "if you don\"t have account": "если у тебя нет аккаунта", + "Here recorded trips audio": "Здесь записаны аудиозаписи поездок", + "Register as Driver": "Зарегистрироваться как водитель", + "Privacy Notice": "Уведомление о конфиденциальности", + "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the": + "Выбрав «Я согласен» ниже, я ознакомился и согласен с Условиями использования, а также подтверждаю", + ". I am at least 18 years of age.": ". Мне как минимум 18 лет.", + "Log Out Page": "Страница выхода из системы", + "Log Off": "Выйти", + "Register Driver": "Зарегистрировать драйвер", + "Verify Email For Driver": + "Подтвердите адрес электронной почты водителя", + "Admin DashBoard": "Панель администратора", + "Your name": "Ваше имя", + "your ride is applied": "ваша поездка применена", + "Your password": "Ваш пароль", + "H and": "Рука", + "LE": "ЛЕ", + "JOD": "Йод", + "m": "м", + "We search nearst Driver to you": "Мы ищем ближайшего к вам водителя", + "please wait till driver accept your order": + "пожалуйста, подождите, пока водитель не примет ваш заказ", + "No accepted orders? Try raising your trip fee to attract riders.": + "Нет принятых заказов? Попробуйте повысить плату за поездку, чтобы привлечь пассажиров.", + "You should select one": "Вам следует выбрать один", + "The driver accept your order for": "Водитель принимает ваш заказ на", + "Increase Fee": "Увеличение комиссии", + "No, thanks": "Нет, спасибо", + "The driver on your way": "Водитель на вашем пути", + "Total price from": "Общая стоимость от", + "Order Details Speed": "Детали заказа Скорость", + "Order Applied": "Заказ принят", + "accepted your order": "принял ваш заказ", + "We regret to inform you that another driver has accepted this order.": + "С сожалением сообщаем, что этот заказ принял другой водитель.", + "Selected file:": "Выбранный файл:", + "Your trip cost is": "Стоимость вашей поездки составляет", + "this will delete all files from your device": + "это удалит все файлы с вашего устройства", + "you have a negative balance of": "у вас отрицательный баланс", + "in your": "в вашей", + "Exclusive offers and discounts always with the Sefer app": + "Эксклюзивные предложения и скидки всегда с приложением Sefer", + "Please go to Car Driver": + "Пожалуйста, перейдите в раздел «Водитель автомобиля»", + "wallet due to a previous trip.": "кошелек из-за предыдущей поездки.", + "Submit Question": "Отправить вопрос", + "Please enter your Question.": "Пожалуйста, введите свой вопрос.", + "Help Details": "Подробности помощи", + "No trip yet found": "Поездка пока не найдена", + "No Response yet.": "Пока нет ответа.", + "You Earn today is": "Вы зарабатываете сегодня", + "You Have in": "У вас есть", + "Total points is": "Общее количество баллов составляет", + "Total Connection Duration:": "Общая продолжительность подключения:", + "H and": "Рука", + "Passenger name :": "Имя пассажира :", + "Cost Of Trip IS": "Стоимость поездки", + "Arrival time": "Время прибытия", + "arrival time to reach your point": + "время прибытия, чтобы добраться до вашей точки", + "For Speed and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": + "Для поездок «Скорость» и «Доставка» цена рассчитывается динамически. Для поездок Комфорт цена зависит от времени и расстояния.", + "Hello this is Driver": "Привет, это Драйвер", + "Is the Passenger in your Car ?": "Пассажир в вашей машине?", + "Please wait for the passenger to enter the car before starting the trip.": + "Перед началом поездки подождите, пока пассажир сядет в машину.", + "No ,still Waiting.": "Нет, все еще жду.", + "I arrive you": "я приеду к тебе", + "I Arrive your site": "Я прихожу на ваш сайт", + "You are not in near to passenger location": + "Вы находитесь не рядом с пассажирским местом.", + "please go to picker location exactly": + "пожалуйста, перейдите точно к месту сбора", + "You Can Cancel Trip And get Cost of Trip From": + "Вы можете отменить поездку и получить стоимость поездки от", + "Are you sure to cancel?": "Вы уверены, что отмените?", + "Yes": "Да", + "Insert Emergincy Number": "Вставьте номер службы экстренной помощи", + "Best choice for comfort car and flexible route and stops point": + "Лучший выбор для комфортного автомобиля, гибкого маршрута и остановок.", + "Insert": "Вставлять", + "This is for delivery or a motorcycle.": + "Это на доставку или мотоцикл.", + "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": + "Эта поездка идет прямо от отправной точки до пункта назначения по фиксированной цене. Водитель должен следовать запланированному маршруту", + "You can decline a request without any cost": + "Вы можете отклонить запрос без каких-либо затрат", + "Perfect for adventure seekers who want to experience something new and exciting": + "Идеально подходит для искателей приключений, желающих испытать что-то новое и захватывающее.", + "My current location is:": "Мое текущее местоположение:", + "and I have a trip on": "и у меня поездка", + "App with Passenger": "Приложение с пассажиром", + "مع الراكب": "مع الراكب", + "You will be pay the cost to driver or we will get it from you on next trip": + "Вы оплатите стоимость водителю, или мы получим ее от вас во время следующей поездки.", + "Trip has Steps": "Поездка состоит из шагов", + "Distance from Passenger to destination is": + "Расстояние от пассажира до пункта назначения составляет", + "price is": "цена", + "This ride type does not allow changes to the destination or additional stops": + "Этот тип поездки не допускает изменения пункта назначения или дополнительных остановок.", + "This price may be changed": "Эта цена может быть изменена", + "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": + "Нет SIM-карты – нет проблем! Позвоните своему водителю прямо через наше приложение. Мы используем передовые технологии для обеспечения вашей конфиденциальности.", + "This ride type allows changes, but the price may increase": + "В этом типе поездки возможны изменения, но цена может увеличиться.", + "message From passenger": "сообщение от пассажира", + "Select one message": "Выберите одно сообщение", + "My location is correct. You can search for me using the navigation app": + "Моё местоположение правильное. Вы можете найти меня с помощью навигационного приложения.", + "I'm waiting for you": "Я жду тебя", + "Hello, I'm at the agreed-upon location": + "Здравствуйте, я в оговоренном месте.", + "We noticed the speed is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": + "Мы заметили, что скорость превышает 100 км/ч. Пожалуйста, снизьте скорость для вашей безопасности. Если вы чувствуете себя небезопасно, вы можете поделиться информацией о своей поездке с контактным лицом или позвонить в полицию, нажав красную кнопку SOS.", + "Warning: Speeding detected!": + "Внимание: обнаружено превышение скорости!", + "Please help! Contact me as soon as possible.": + "Пожалуйста помоги! Свяжитесь со мной как можно скорее.", + "Share Trip Details": "Поделитесь подробностями поездки", + "Car Plate is": "Автомобильная табличка", + "the 300 points equal 300 L.E for you": + "для вас 300 баллов равны 300 LE", + "So go and gain your money": "Так что иди и заработай свои деньги", + "the 300 points equal 300 L.E": "300 очков равны 300 LE", + "The payment was not approved. Please try again.": + "Платеж не был одобрен. Пожалуйста, попробуйте еще раз.", + "Payment Failed": "Платеж не прошел", + "Error": "Ошибка", + "An error occurred during the payment process.": + "В процессе оплаты произошла ошибка.", + "The payment was approved.": "Платеж был одобрен.", + "Payment Successful": "Платеж успешен", + "No ride found yet": "Поездка пока не найдена", + "Accept Order": "Принять заказ", + "reject your order.": "отклонить ваш заказ.", + "Bottom Bar Example": "Пример нижней панели", + "Driver phone": "Телефон водителя", + "Statistics": "Статистика", + "Origin": "Источник", + "Destination": "Место назначения", + "Driver Name": "Имя драйвера", + "Driver Car Plate": "Автомобильная табличка водителя", + "Available for rides": "Доступно для поездок", + "Scan Id": "Идентификатор сканирования", + "Camera not initilaized yet": "Камера еще не инициализирована", + "Scan ID MklGoogle": "Сканировать идентификатор MklGoogle", + "Language": "Язык", + "Jordan": "Иордания", + "USA": "США", + "Egypt": "Египет", + "Turkey": "Турция", + "Saudi Arabia": "Саудовская Аравия", + "Qatar": "Катар", + "Bahrain": "Бахрейн", + "Kuwait": "Кувейт", + "But you have a negative salary of": + "Но у вас отрицательная зарплата", + "Promo Code": "Промо-код", + "Your trip distance is": "Расстояние вашей поездки составляет", + "Enter promo code": "Введите промо-код", + "You have promo!": "У вас есть промо!", + "Cost Duration": "Стоимость Продолжительность", + "Duration is": "Продолжительность", + "Leave": "Оставлять", + "Join": "Присоединиться", + "You Should be select reason.": "Вам следует выбрать причину.", + "\$": "\$", + "Waiting for Driver ...": "Ждем водителя...", + "Latest Recent Trip": "Последняя недавняя поездка", + "from your list": "из твоего списка", + "Do you want to change Work location": + "Хотите изменить место работы?", + "Do you want to change Home location": + "Хотите изменить местоположение «Дом»?", + "We Are Sorry That we dont have cars in your Location!": + "Сожалеем, что в вашем регионе нет автомобилей!", + "Choose from Map": "Выбрать на карте", + "Pick your ride location on the map - Tap to confirm": + "Выберите место поездки на карте — нажмите для подтверждения.", + "To Work": "Работать", + "Are you want to go this site": "Вы хотите перейти на этот сайт?", + "Closest & Cheapest": "Ближайший и самый дешевый", + "Work Saved": "Работа сохранена", + "Sefer is the ride-hailing app that is safe, reliable, and accessible.": + "Sefer — это безопасное, надежное и доступное приложение для заказа такси.", + "With Sefer, you can get a ride to your destination in minutes.": + "С Sefer вы можете добраться до места назначения за считанные минуты.", + "Sefer is committed to safety, and all of our captains are carefully screened and background checked.": + "«Сефер» заботится о безопасности, и все наши капитаны тщательно проверяются и проверяются биографические данные.", + "To Home": "Домой", + "Home Saved": "Дом сохранен", + "Destination selected": "Место назначения выбрано", + "Now select start pick": "Теперь выберите начало выбора", + "Pick from map": "Выбрать с карты", + "Click here point": "Нажмите здесь точку", + "No Car in your site. Sorry!": + "На вашем сайте нет автомобилей. Извини!", + "Nearest Car for you about": "Ближайший автомобиль для вас", + "N/A": "Н/Д", + "From :": "От :", + "Get Details of Trip": "Получить подробную информацию о поездке", + "If you want add stop click here": + "Если вы хотите добавить остановку, нажмите здесь", + "Driver": "Водитель", + "Where you want go": "Куда ты хочешь пойти", + "My Card": "Моя карта", + "Start Record": "Начать запись", + "Wallet": "Кошелек", + "History of Trip": "История поездки", + "Helping Center": "Центр помощи", + "Record saved": "Запись сохранена", + "Trips recorded": "Записано поездок", + "Select Your Country": "Выберите вашу страну", + "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": + "Чтобы получить наиболее точную информацию о вашем местоположении, выберите свою страну ниже. Это поможет адаптировать работу приложения и его контент к особенностям вашей страны.", + "Are you sure to delete recorded files": + "Вы уверены, что хотите удалить записанные файлы?", + "Select recorded trip": "Выберите записанную поездку", + "Card Number": "Номер карты", + "Hi, Where to": "Привет, куда", + "Pick your destination from Map": + "Выберите пункт назначения на карте", + "Add Stops": "Добавить остановки", + "Get Direction": "Получить направление", + "Add Location": "Добавить местоположение", + "Switch Rider": "Сменить гонщика", + "You will arrive to your destination after timer end.": + "Вы прибудете в пункт назначения после окончания таймера.", + "You can cancel trip": "Вы можете отменить поездку", + "The driver waitting you in picked location .": + "Водитель ждет вас в выбранном месте.", + "Pay with Your": "Платите с помощью", + "Pay with Credit Card": "Оплатить кредитной картой", + "Payment History": "История платежей", + "Show Promos to Charge": + "Показать промо-акции за дополнительную плату", + "Point": "Точка", + "Driver Wallet": "Кошелек водителя", + "Total Points is": "Общее количество очков составляет", + "Total Budget from trips is": "Общий бюджет от поездок составляет", + "Total Amount:": "Общая сумма:", + "Total Budget from trips by": "Общий бюджет от поездок по", + "Credit card is": "Кредитная карта", + "بطاقة الائتمان هي": "بطاقة الائتمان هي", + "This amount for all trip I get from Passengers": + "Эту сумму за всю поездку я получаю от пассажиров", + "Pay from my budget": "Оплата из моего бюджета", + "This amount for all trip I get from Passengers and Collected For me in": + "Эту сумму за всю поездку я получаю от пассажиров и собираю для меня в", + "You can buy points from your budget": + "Вы можете купить баллы из своего бюджета", + "insert amount": "вставить сумму", + "You can buy Points to let you online": + "Вы можете купить баллы, чтобы позволить вам онлайн", + "by this list below": "по этому списку ниже", + "من خلال القائمة أدناه": "В خلال القائمة أدناه", + "Create Wallet to receive your money": + "Создайте кошелек для получения денег", + "Enter your feedback here": "Введите свой отзыв здесь", + "Please enter your feedback.": "Пожалуйста, оставьте свой отзыв.", + "Feedback": "Обратная связь", + "Submit": "Представлять на рассмотрение", + "Click here to Show it in Map": + "Нажмите здесь, чтобы показать это на карте", + "Canceled": "Отменено", + "Type your Email": "Введите свой адрес электронной почты", + "No I want": "Нет, я хочу", + "Email is": "Электронная почта", + "Phone Number is": "Номер телефона", + "Date of Birth is": "Дата рождения", + "Sex is": "Секс это", + "Car Details": "Детали автомобиля", + "VIN is": "VIN-это", + "Color is": "Цвет", + "Make is": "Сделать это", + "Model is": "Модель", + "Year is": "Год", + "Expiration Date": "Дата окончания срока", + "Edit Your data": "Редактировать свои данные", + "write vin for your car": "напиши вин своей машины", + "VIN": "ВИН", + "write Color for your car": "напишите цвет для вашего автомобиля", + "write Make for your car": "напишите Сделай для своей машины", + "write Model for your car": "напишите модель вашего автомобиля", + "write Year for your car": "напиши год своей машины", + "write Expiration Date for your car": + "напишите срок годности вашего автомобиля", + "Tariffs": "Тарифы", + "Minimum fare": "Минимальный тариф", + "Maximum fare": "Максимальный тариф", + "Flag-down fee": "Плата за отметку", + "Including Tax": "В том числе налог", + "BookingFee": "Плата за бронирование", + "Morning": "Утро", + "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": + "с 07:30 до 10:30 (четверг, пятница, суббота, понедельник)", + "Evening": "Вечер", + "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": + "с 12:00 до 15:00 (четверг, пятница, суббота, понедельник)", + "Night": "Ночь", + "You have in account": "У вас есть на счету", + "Select Country": "Выберите страну", + "Ride Today :": "Поездка сегодня:", + "After this period": "После этого периода", + "You can\"t cancel!": "Вы не можете отменить!", + "لا تستطيع الغاء الرحله": "لا تستطيع الغاء الرحله", + "from 23:59 till 05:30": "с 23:59 до 05:30", + "Rate Driver": "Оценить драйвер", + "Total Cost is": "Общая стоимость", + "Write note": "Написать заметку", + "Time to arrive": "Время прибыть", + "Ride Summaries": "Обзоры поездок", + "Total Cost": "Общая стоимость", + "Average of Hours of": "Среднее количество часов", + "is ON for this month": "включено в этом месяце", + "Days": "Дни", + "Total Hours on month": "Всего часов в месяц", + "Counts of Hours on days": "Счет часов в днях", + "OrderId": "Номер заказа", + "created time": "созданное время", + "Speed Over": "Скорость превышена", + "I will slow down": "Я буду замедляться", + "Map Passenger": "Карта Пассажир", + "Be Slowly": "Будь медленно", + "If you want to make Google Map App run directly when you apply order": + "Если вы хотите, чтобы приложение Google Map запускалось непосредственно при подаче заказа", + "You can change the language of the app": + "Вы можете изменить язык приложения", + "Your Budget less than needed": "Ваш бюджет меньше необходимого", + "You can change the Country to get all features": + "Вы можете изменить страну, чтобы получить все функции.", + "Change Country": "Выбрать страну" + }, + "it": { + "Sign In by Apple": "Accedi tramite Apple", + "Sign In by Google": "Accedi tramite Google", + "How do I request a ride?": "Come posso richiedere una corsa?", + "Step-by-step instructions on how to request a ride through the Sefer app.": + "Istruzioni passo passo su come richiedere una corsa tramite l'app Sefer.", + "What types of vehicles are available?": + "Quali tipi di veicoli sono disponibili?", + "Sefer offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": + "Sefer offre una varietà di opzioni di veicoli per soddisfare le tue esigenze, tra cui economia, comfort e lusso. Scegli l'opzione che meglio si adatta al tuo budget e al numero di passeggeri.", + "How can I pay for my ride?": "Come posso pagare la mia corsa?", + "Sefer offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": + "Sefer offre molteplici metodi di pagamento per la tua comodità. Scegli tra pagamento in contanti o pagamento con carta di credito/debito al momento della conferma della corsa.", + "Can I cancel my ride?": "Posso annullare la mia corsa?", + "Yes, you can cancel your ride under certain conditions (e.g., before driver is assigned). See the Sefer cancellation policy for details.": + "Sì, puoi annullare la corsa a determinate condizioni (ad esempio, prima che venga assegnato il conducente). Consulta la politica di cancellazione di Sefer per i dettagli.", + "Driver Registration & Requirements": + "Registrazione e requisiti del conducente", + "How can I register as a driver?": + "Come posso registrarmi come autista?", + "What are the requirements to become a driver?": + "Quali sono i requisiti per diventare autista?", + "Visit our website or contact Sefer support for information on driver registration and requirements.": + "Visita il nostro sito Web o contatta il supporto Sefer per informazioni sulla registrazione e sui requisiti del conducente.", + "How do I communicate with the other party (passenger/driver)?": + "Come posso comunicare con l'altra parte (passeggero/autista)?", + "Sefer provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": + "Sefer fornisce funzionalità di chat in-app per consentirti di comunicare con il tuo autista o passeggero durante il viaggio.", + "What safety measures does Sefer offer?": + "Quali misure di sicurezza offre Sefer?", + "Sefer prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": + "Sefer mette al primo posto la tua sicurezza. Offriamo funzionalità come la verifica del conducente, il monitoraggio del viaggio in-app e le opzioni di contatto di emergenza.", + "Frequently Questions": "Domande frequenti", + "User does not exist.": "L'utente non esiste.", + "We need your phone number to contact you and to help you.": + "Abbiamo bisogno del tuo numero di telefono per contattarti e aiutarti.", + "You will recieve code in sms message": + "Riceverai il codice nel messaggio SMS", + "Please enter": "Prego entra", + "We need your phone number to contact you and to help you receive orders.": + "Abbiamo bisogno del tuo numero di telefono per contattarti e per aiutarti a ricevere gli ordini.", + "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": + "Il nome completo sulla tua fedina penale non corrisponde a quello sulla tua patente di guida. Si prega di verificare e fornire i documenti corretti.", + "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": + "Il numero nazionale sulla tua patente di guida non corrisponde a quello sul tuo documento d'identità. Si prega di verificare e fornire i documenti corretti.", + "Capture an Image of Your Criminal Record": + "Cattura un'immagine della tua fedina penale", + "IssueDate": "Data di emissione", + "Capture an Image of Your car license front": + "Cattura un'immagine della parte anteriore della patente della tua auto", + "Capture an Image of Your ID Document front": + "Cattura un'immagine della parte anteriore del tuo documento d'identità", + "NationalID": "ID nazionale", + "FullName": "Nome e cognome", + "InspectionResult": "Risultato dell'ispezione", + "Criminal Record": "Fedina penale", + "The email or phone number is already registered.": + "L'e-mail o il numero di telefono sono già registrati.", + "To become a ride-sharing driver on the Sefer app, you need to upload your driver\"s license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Sefer app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": + "Per diventare un autista di ride-sharing sull'app Sefer, devi caricare la patente di guida, il documento d'identità e il documento di registrazione dell'auto. Il nostro sistema AI esaminerà e verificherà immediatamente la loro autenticità in soli 2-3 minuti. Se i tuoi documenti sono approvati, puoi iniziare a lavorare come autista sull'app Sefer. Tieni presente che l'invio di documenti falsi è un reato grave e può comportare il licenziamento immediato e conseguenze legali.", + "Documents check": "Controllo documenti", + "Driver's License": "Patente di guida", + "License Type": "Tipo di licenza", + "National Number": "Numero nazionale", + "Name (Arabic)": "Nome (arabo)", + "Name (English)": "Nome (inglese)", + "Address": "Indirizzo", + "Issue Date": "Data di emissione", + "Expiry Date": "Data di scadenza", + "License Categories": "Categorie di licenza", + "driver_license": "patente di guida", + "Capture an Image of Your Driver License": + "Cattura un'immagine della tua patente di guida", + "ID Documents Back": "Documenti d'identità indietro", + "National ID": "Carta d'identità nazionale", + "Occupation": "Occupazione", + "Gender": "Genere", + "Religion": "Religione", + "Marital Status": "Stato civile", + "Full Name (Marital)": "Nome completo (coniugale)", + "Expiration Date": "Data di scadenza", + "Capture an Image of Your ID Document Back": + "Cattura un'immagine del tuo documento d'identità sul retro", + "ID Documents Front": "Documenti d'identità anteriori", + "First Name": "Nome di battesimo", + "CardID": "ID carta", + "Full Name": "Nome e cognome", + "Vehicle Details Front": "Dettagli del veicolo Parte anteriore", + "Plate Number": "Targa", + "Owner Name": "Nome del proprietario", + "Vehicle Details Back": "Dettagli del veicolo Indietro", + "Make": "Fare", + "Model": "Modello", + "Year": "Anno", + "Chassis": "Telaio", + "Color": "Colore", + "Displacement": "Dislocamento", + "Fuel": "Carburante", + "Tax Expiry Date": "Data di scadenza fiscale", + "Inspection Date": "Data dell'ispezione", + "Capture an Image of Your car license back": + "Cattura un'immagine della tua patente di guida", + "Capture an Image of Your Driver’s License": + "Cattura un'immagine della tua patente di guida", + "Sign in with Google for easier email and name entry": + "Accedi con Google per semplificare l'immissione di email e nome", + "You will choose allow all the time to be ready receive orders": + "Sceglierai di consentire tutto il tempo per essere pronto a ricevere gli ordini", + "Welcome to Sefer!": "Benvenuti a Sefer!", + "Get to your destination quickly and easily.": + "Raggiungi la tua destinazione in modo facile e veloce.", + "Enjoy a safe and comfortable ride.": + "Goditi un viaggio sicuro e confortevole.", + "Choose Language": "Scegli la lingua", + "Login": "Login", + "Pay with Wallet": "Paga con Portafoglio", + "Invalid MPIN": "PIN non valido", + "Invalid OTP": "OTP non valida", + "Enter your email address": "Inserisci il tuo indirizzo email", + "Please enter Your Email.": "Inserisci la tua email.", + "Enter your phone number": "Inserisci il tuo numero di telefono", + "Please enter your phone number.": + "Per favore immetti il ​​tuo numero di telefono.", + "Please enter Your Password.": + "Per favore inserisci LA TUA password.", + "Submit": "Invia", + "if you dont have account": "se non hai un account", + "Register": "Registrati", + "Accept Ride's Terms & Review Privacy Notice": + "Accetta i termini di Ride e consulta l'Informativa sulla privacy", + "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": + "Selezionando \"Accetto\" di seguito, ho letto e accetto i Termini di utilizzo e riconosco l'Informativa sulla privacy. Ho almeno 18 anni.", + "I Agree": "Sono d'accordo", + "First name": "Nome di battesimo", + "Enter your first name": "Inserisci il tuo nome di battesimo", + "Please enter your first name.": + "Per favore immettere il proprio Nome.", + "Last name": "Cognome", + "Enter your last name": "Inserire il cognome", + "Please enter your last name.": + "Per favore inserisci il tuo cognome.", + "City": "Città", + "Please enter your City.": "Inserisci la tua città.", + "Male": "Maschio", + "Female": "Femmina", + "Verify Email": "Verifica Email", + "We sent 5 digit to your Email provided": + "Abbiamo inviato 5 cifre all'e-mail fornita", + "5 digit": "5 cifre", + "Send Verification Code": "Invia codice di verifica", + "Your Ride Duration is": "La durata del tuo viaggio è", + "You will be thier in": "Sarai lì dentro", + "You trip distance is": "La distanza del tuo viaggio è", + "Fee is": "La tariffa è", + "From :": "Da :", + "To :": "A :", + "Add Promo": "Aggiungi promozione", + "Confirm Selection": "Conferma la selezione", + "distance is": "la distanza è", + "duration is": "la durata è", + "I don't need a ride anymore": "Non ho più bisogno di un passaggio", + "I was just trying the application": + "Stavo solo provando l'applicazione", + "No driver accepted my request": + "Nessun autista ha accettato la mia richiesta", + "I added the wrong pick-up/drop-off location": + "Ho aggiunto il luogo di ritiro/consegna sbagliato", + "I don't have a reason": "Non ho una ragione", + "Other": "Altro", + "Can we know why you want to cancel Ride ?": + "Possiamo sapere perché vuoi annullare Ride?", + "Cancel Ride": "Annulla corsa", + "Add Payment Method": "Aggiungi metodo di pagamento", + "Your Wallet balance is": "Il saldo del tuo Portafoglio è", + "Ride Wallet": "Portafoglio da corsa", + "Payment Method": "Metodo di pagamento", + "Type here Place": "Digita qui Luogo", + "Are You sure to ride to": "Sei sicuro di venire?", + "Confirm": "Confermare", + "Back": "Indietro", + "You are Delete": "Sei Elimina", + "Deleted": "Eliminato", + "You Dont Have Any places yet !": "Non hai ancora nessun posto!", + "Favorite Places": "Luoghi preferiti", + "From : Current Location": "Da: posizione attuale", + "Where to": "Dove", + "Notifications": "Notifiche", + "Profile": "Profilo", + "Home": "Casa", + "My Cared": "La mia cura", + "Add Card": "Aggiungi carta", + "Add Credit Card": "Aggiungi carta di credito", + "Please enter the cardholder name": + "Inserisci il nome del titolare della carta", + "Please enter the expiry date": "Inserisci la data di scadenza", + "Please enter the CVV code": "Inserisci il codice CVV", + "Go To Favorite Places": "Vai ai luoghi preferiti", + "Go to this Target": "Vai a questo obiettivo", + "My Profile": "Il mio profilo", + "Sign Out": "Disconnessione", + "Home Page": "Pagina iniziale", + "Are you want to go to this site": "Vuoi andare su questo sito?", + "MyLocation": "La mia posizione", + "my location": "la mia posizione", + "Target": "Bersaglio", + "Update": "Aggiornamento", + "You Should choose rate figure": + "Dovresti scegliere la cifra della tariffa", + "Login Captin": "Accedi Capitano", + "Register Captin": "Registrati Capitano", + "Send Verfication Code": "Invia codice di verifica", + "KM": "KM", + "End Ride": "Fine giro", + "Minute": "Minuto", + "Go to passenger Location now": + "Vai subito alla posizione del passeggero", + "Duration of the Ride is": "La durata del giro è", + "Distance of the Ride is": "La distanza della corsa è", + "Name of the Passenger is": "Il nome del passeggero è", + "Hello this is Captain": "Salve, sono il Capitano", + "Start the Ride": "Inizia il giro", + "Please Wait If passenger want To Cancel!": + "Si prega di attendere se il passeggero desidera annullare!", + "Total Duration:": "Durata totale:", + "Active Duration:": "Durata attiva:", + "Waiting for Captin ...": "Aspettando Capitan...", + "Age is": "L'età è", + "Rating is": "La valutazione è", + "to arrive you.": "per arrivare a te.", + "Order History": "Cronologia ordini", + "My Wallet": "Il mio portafoglio", + "Tariff": "Tariffa", + "Settings": "Impostazioni", + "Feed Back": "Feedback", + "Promos": "Promozioni", + "Please enter a valid 16-digit card number": + "Inserisci un numero di carta valido di 16 cifre", + "Add Phone": "Aggiungi telefono", + "Please enter a phone number": "Inserisci un numero di telefono", + "You dont Add Emergency Phone Yet!": + "Non hai ancora aggiunto il telefono di emergenza!", + "You will arrive to your destination after": + "Arriverai a destinazione dopo", + "You can cancel Ride now": "Puoi annullare la corsa adesso", + "You Can cancel Ride After Captain did not come in the time": + "Puoi annullare il giro dopo che il Capitano non è arrivato in tempo", + "If you in Car Now. Press Start The Ride": + "Se sei in Car Now. Premi Inizia la corsa", + "You Dont Have Any amount in": "Non hai alcun importo", + "Wallet!": "Portafoglio!", + "You Have": "Hai", + "Save Credit Card": "Salva carta di credito", + "Show Promos": "Mostra promozioni", + "10 and get 4% discount": "10 e ottieni uno sconto del 4%.", + "20 and get 6% discount": "20 e ottieni il 6% di sconto", + "40 and get 8% discount": "40 e ottieni uno sconto dell'8%.", + "100 and get 11% discount": "100 e ottieni uno sconto dell'11%.", + "Pay with Your PayPal": "Paga con il tuo PayPal", + "You will choose one of above !": "Sceglierai uno dei precedenti!", + "Cancel": "Annulla", + "Delete My Account": "Cancella il mio account", + "Edit Profile": "Modifica Profilo", + "Name": "Nome", + "Update Gender": "Aggiorna sesso", + "Education": "Formazione scolastica", + "Update Education": "Aggiorna l'istruzione", + "Employment Type": "Tipo di impiego", + "SOS Phone": "Telefono SOS", + "High School Diploma": "Diploma di scuola superiore", + "Associate Degree": "Grado associato", + "Bachelor's Degree": "Laurea", + "Master's Degree": "Master", + "Doctoral Degree": "Dottorato", + "Promos For today": "Promozioni per oggi", + "Copy this Promo to use it in your Ride!": + "Copia questa Promo per usarla nella tua Ride!", + "To change some Settings": "Per modificare alcune Impostazioni", + "To change Language the App": "Per cambiare la lingua dell'App", + "Order Request Page": "Pagina di richiesta ordine", + "Rouats of Trip": "Itinerari di viaggio", + "Passenger Name is": "Il nome del passeggero è", + "Total From Passenger is": "Totale dal passeggero è", + "Duration To Passenger is": "La durata per il passeggero è", + "Distance To Passenger is": "La distanza dal passeggero è", + "Total For You is": "Totale per te lo è", + "Distance is": "La distanza è", + "KM": "KM", + "Duration of Trip is": "La durata del viaggio è", + "Minutes": "Minuti", + "Apply Order": "Applicare l'ordine", + "Refuse Order": "Ordine di rifiuto", + "Rate Captain": "Valuta Capitano", + "Enter your Note": "Inserisci la tua nota", + "Type something...": "Scrivi qualcosa...", + "Submit rating": "Invia valutazione", + "Rate Passenger": "Valuta il passeggero", + "Ride Summary": "Riepilogo del giro", + "welcome_message": "messaggio di benvenuto", + "app_description": "descrizione_app", + "get_to_destination": "raggiungi_destinazione", + "get_a_ride": "fatti_un_giro", + "safe_and_comfortable": "sicuro_e_confortevole", + "committed_to_safety": "impegnato_per_la_sicurezza", + "Driver Applied the Ride for You": + "L'autista ha applicato la corsa per te", + "Show latest promo": "Mostra l'ultima promozione", + "Cancel Trip": "Annulla viaggio", + "Passenger Cancel Trip": "Viaggio annullato dal passeggero", + "Please stay on the picked point.": + "Per favore, rimani nel punto scelto.", + "Trip is Begin": "Il viaggio è iniziato", + "Hi ,I will go now": "Ciao, adesso vado", + "Passenger come to you": "Passeggero vieni da te", + "Hi ,I Arrive your site": "Ciao, arrivo al tuo sito", + "Driver Finish Trip": "Viaggio finale del conducente", + "you will pay to Driver": "pagherai all'autista", + "Driver Cancel Your Trip": "L'autista annulla il tuo viaggio", + "you will pay to Driver you will be pay the cost of driver time look to your SEFER Wallet": + "pagherai all'autista ti verrà pagato il costo del tempo dell'autista guarda sul tuo portafoglio SEFER", + "I will go now": "Io andrò ora", + "You Have Tips": "Hai dei suggerimenti", + "tips": "suggerimenti", + "Total is": "Il totale è", + "الْمَجْمُوع هُوَ": "الْمَجْمُوع هُوَ", + "No,I want": "No io voglio", + "Your fee is": "La tua tariffa è", + "Do you want to pay Tips for this Driver": + "Vuoi pagare mance per questo driver", + "Tip is": "Il suggerimento è", + "Tip is": "Il suggerimento è", + "Camera Access Denied.": "Accesso alla telecamera negato.", + "Open Settings": "Apri Impostazioni", + "GPS Required Allow !.": "GPS richiesto Consenti!.", + "Your Account is Deleted": "Il tuo account è stato eliminato", + "Are you sure to delete your account?": + "Sei sicuro di voler eliminare il tuo account?", + "Your data will be erased after 2 weeks": + "I tuoi dati verranno cancellati dopo 2 settimane", + "And you will can't return to use app after 1 month": + "E non potrai tornare a utilizzare l'app dopo 1 mese", + "وَلَن تَسْتَطِيع اسْتِخْدَام التَّطْبِيق مَرَّة أُخْرَى بَعْد شَهْر": + "وَلَن تَسْتَطِيع اسْتِخْدَام التَّطْبِيق مَرَّة أُخْرَى بَعْد شَهْر", + "Enter Your First Name": "Inserisci il tuo nome di battesimo", + "Are you Sure to LogOut?": "Sei sicuro di uscire?", + "Email Wrong": "E-mail sbagliata", + "Email you inserted is Wrong.": + "L'email che hai inserito è sbagliata.", + "You have finished all times": "Hai finito tutti i tempi", + "if you want help you can email us here": + "se vuoi aiuto puoi scriverci un'e-mail qui", + "Thanks": "Grazie", + "Email Us": "Mandaci una email", + "I cant register in your app in face detection": + "Non riesco a registrarmi nella tua app per il rilevamento dei volti", + "Hi": "CIAO", + "No face detected": "Nessun volto rilevato", + "Image detecting result is": + "Il risultato del rilevamento dell'immagine è", + "from 3 times Take Attention": "da 3 volte Attenzione", + "Be sure for take accurate images please": + "Assicurati di scattare immagini accurate, per favore", + "You have": "Hai", + "لَدَيْك": "لَدَيْك", + "image verified": "immagine verificata", + "Next": "Prossimo", + "There is no help Question here": + "Non c'è nessuna domanda di aiuto qui", + "Call End": "Fine chiamata", + "You dont have Points": "Non hai punti", + "You Are Stopped For this Day !": "Sei fermo per questo giorno!", + "You must be charge your Account": + "È necessario effettuare l'addebito sul tuo account", + "You Refused 3 Rides this Day that is the reason": + "Hai rifiutato 3 corse questo giorno, questo è il motivo", + "See you Tomorrow!": "Ci vediamo domani!", + "لِقَائِنَا غَدًا!": "لِقَائِنَا غَدًا!", + "Recharge my Account": "Ricarica il mio conto", + "Ok , See you Tomorrow": "Ok ci vediamo domani", + "You are Stopped": "Sei fermato", + "Connected": "Collegato", + "Not Connected": "Non collegata", + "Your are far from passenger location": + "Sei lontano dalla posizione del passeggero", + "go to your passenger location before": + "vai prima alla posizione del tuo passeggero", + "Passenger cancel trip": "Viaggio annullato dal passeggero", + "يُلْغِي الرَّاكِب الرِّحْلَة": "يُلْغِي الرَّاكِب الرِّحْلَة", + "You will get cost of your work for this trip": + "Riceverai il costo del tuo lavoro per questo viaggio", + "in your wallet": "nel tuo portafoglio", + "you gain": "guadagni", + "Order Cancelled": "Ordine cancellato", + "Order Cancelled by Passenger": "Ordine annullato dal passeggero", + "Success": "Successo", + "Feedback data saved successfully": + "Dati di feedback salvati correttamente", + "No Promo for today .": "Nessuna promozione per oggi.", + "Select your destination": "Seleziona la tua destinazione", + "Search for your Start point": "Cerca il tuo punto di partenza", + "Search for waypoint": "Cerca il punto di passaggio", + "Current Location": "Posizione attuale", + "Add Location 1": "Aggiungi posizione 1", + "You must Verify email !.": "È necessario verificare l'e-mail!.", + "Cropper": "Taglierina", + "Saved Sucssefully": "Salvato con successo", + "Select Date": "Seleziona Data", + "Birth Date": "Data di nascita", + "Ok": "OK", + "the 500 points equal 30 JOD": "i 500 punti equivalgono a 30 JOD", + "the 500 points equal 30 JOD for you": + "i 500 punti equivalgono a 30 JOD per te", + "So go and gain your money": "Quindi vai e guadagna i tuoi soldi", + "فَاسْتَحِقَّ فُلُوسَك وَاكْسِب النِّقَاط": + "فَاسْتَحِقَّ فُلُوسَك وَاكْسِب النِّقَاط", + "token updated": "token aggiornato", + "Add Location 2": "Aggiungi posizione 2", + "Add Location 3": "Aggiungi posizione 3", + "Add Location 4": "Aggiungi posizione 4", + "Waiting for your location": "In attesa della tua posizione", + "Search for your destination": "Cerca la tua destinazione", + "Hi! This is": "CIAO! Questo è", + "I am using": "sto usando", + "to ride with": "con cui viaggiare", + "as the driver.": "come autista.", + "is driving a": "sta guidando a", + "with license plate": "con targa", + "I am currently located at": "Attualmente mi trovo a", + "Please go to Car now": "Per favore, vai in macchina adesso", + "If you need to reach me, please contact the driver directly at": + "Se hai bisogno di contattarmi, contatta direttamente l'autista all'indirizzo", + "No Car or Driver Found in your area.": + "Nessuna auto o autista trovato nella tua zona.", + "Please Try anther time": "Per favore riprova un'altra volta", + "There no Driver Aplly your order sorry for that": + "Non c'è nessun driver che applichi al tuo ordine, mi spiace", + "Trip Cancelled": "Viaggio annullato", + "The Driver Will be in your location soon .": + "L'autista sarà presto nella tua posizione.", + "The distance less than 500 meter.": + "La distanza è inferiore a 500 metri.", + "Promo End !": "Fine della promozione!", + "There is no notification yet": "Non c'è ancora alcuna notifica", + "Use Touch ID or Face ID to confirm payment": + "Utilizza Touch ID o Face ID per confermare il pagamento", + "Contact us for any questions on your order.": + "Contattaci per qualsiasi domanda sul tuo ordine.", + "Pyament Cancelled .": "Pagamento annullato.", + "type here": "digitare qui", + "Scan Driver License": "Scansiona la patente di guida", + "Please put your licence in these border": + "Per favore, metti la tua licenza in questi confini", + "Camera not initialized yet": + "La fotocamera non è ancora inizializzata", + "Take Image": "Scatta immagine", + "AI Page": "Pagina dell'AI", + "Take Picture Of ID Card": "Scatta una foto della carta d'identità", + "Take Picture Of Driver License Card": + "Scatta una foto della carta della patente di guida", + "We are process picture please wait": + "Stiamo elaborando l'immagine, attendere", + "There is no data yet.": "Non ci sono ancora dati.", + "Name :": "Nome :", + "Drivers License Class:": "Classe della patente di guida:", + "Document Number:": "Numero del documento:", + "Address:": "Indirizzo:", + "Height:": "Altezza:", + "Expiry Date:": "Data di scadenza:", + "Date of Birth:": "Data di nascita:", + "You can\"t continue with us .": "Non puoi continuare con noi.", + "You should renew Driver license": + "Dovresti rinnovare la patente di guida", + "Detect Your Face": "Rileva il tuo viso", + "Go to next step": "Vai al passaggio successivo", + "scan Car License.": "scansiona la patente dell'auto.", + "aاسْتِخْرَاج رُخْصَة السَّيَّارَة.": + "aاسْتِخْرَاج رُخْصَة السَّيَّارَة.", + "Name in arabic": "Nome in arabo", + "Drivers License Class": "Classe di patente di guida", + "Date of Birth": "Data di nascita", + "Age": "Età", + "Lets check Car license": "Controlliamo la patente dell'auto", + "Car Kind": "Tipo di macchina", + "Car Plate": "Targa dell'auto", + "Lets check License Back Face": + "Controlliamo il lato posteriore della licenza", + "Car License Card": "Carta della patente di guida", + "No image selected yet": "Nessuna immagine ancora selezionata", + "Made :": "Fatto :", + "model :": "modello :", + "VIN :": "VIN:", + "year :": "anno :", + "ُExpire Date": "data di scadenza", + "Login Driver": "Accedi Autista", + "Password must br at least 6 character.": + "La password deve contenere almeno 6 caratteri.", + "if you don\"t have account": "se non hai un account", + "Here recorded trips audio": "Qui sono registrati i viaggi audio", + "Register as Driver": "Registrati come conducente", + "Privacy Notice": "Informativa sulla Privacy", + "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the": + "Selezionando \"Accetto\" di seguito, ho letto e accetto i Termini di utilizzo e riconosco i", + ". I am at least 18 years of age.": ". Ho almeno 18 anni.", + "Log Out Page": "Pagina di disconnessione", + "Log Off": "Disconnettersi", + "Register Driver": "Registra conducente", + "Verify Email For Driver": "Verifica l'e-mail per il conducente", + "Admin DashBoard": "Dashboard di amministrazione", + "Your name": "Il tuo nome", + "your ride is applied": "la tua corsa viene applicata", + "Your password": "La tua password", + "H and": "Mano", + "LE": "LE", + "JOD": "JOD", + "m": "M", + "We search nearst Driver to you": + "Cerchiamo l'autista più vicino a te", + "please wait till driver accept your order": + "attendi che l'autista accetti il ​​tuo ordine", + "No accepted orders? Try raising your trip fee to attract riders.": + "Nessun ordine accettato? Prova ad aumentare la tariffa del viaggio per attirare i passeggeri.", + "You should select one": "Dovresti selezionarne uno", + "The driver accept your order for": "L'autista accetta il tuo ordine", + "Increase Fee": "Aumenta la tariffa", + "No, thanks": "No grazie", + "The driver on your way": "L'autista sulla tua strada", + "Total price from": "Prezzo totale da", + "Order Details Speed": "Dettagli dell'ordine Velocità", + "Order Applied": "Ordine applicato", + "accepted your order": "accettato il tuo ordine", + "We regret to inform you that another driver has accepted this order.": + "Siamo spiacenti di informarti che un altro conducente ha accettato questo ordine.", + "Selected file:": "File selezionato:", + "Your trip cost is": "Il costo del viaggio è", + "this will delete all files from your device": + "questo eliminerà tutti i file dal tuo dispositivo", + "you have a negative balance of": "hai un saldo negativo di", + "in your": "nel tuo", + "Exclusive offers and discounts always with the Sefer app": + "Offerte e sconti esclusivi sempre con l'app Sefer", + "Please go to Car Driver": "Per favore vai a Car Driver", + "wallet due to a previous trip.": + "portafoglio a causa di un viaggio precedente.", + "Submit Question": "Invia domanda", + "Please enter your Question.": "Inserisci la tua domanda.", + "Help Details": "Dettagli della guida", + "No trip yet found": "Nessun viaggio ancora trovato", + "No Response yet.": "Ancora nessuna risposta.", + "You Earn today is": "Guadagni oggi lo è", + "You Have in": "Hai dentro", + "Total points is": "I punti totali sono", + "Total Connection Duration:": "Durata totale della connessione:", + "H and": "Mano", + "Passenger name :": "Nome del passeggero :", + "Cost Of Trip IS": "Il costo del viaggio è", + "Arrival time": "Orario di arrivo", + "arrival time to reach your point": + "orario di arrivo per raggiungere il tuo punto", + "For Speed and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": + "Per i viaggi Speed ​​e Delivery il prezzo viene calcolato dinamicamente. Per i viaggi Comfort il prezzo dipende dal tempo e dalla distanza", + "Hello this is Driver": "Ciao, sono Driver", + "Is the Passenger in your Car ?": "Il passeggero è nella tua auto?", + "Please wait for the passenger to enter the car before starting the trip.": + "Si prega di attendere che il passeggero salga in macchina prima di iniziare il viaggio.", + "No ,still Waiting.": "No, sto ancora aspettando.", + "I arrive you": "Ti arrivo", + "I Arrive your site": "Arrivo al tuo sito", + "You are not in near to passenger location": + "Non sei vicino alla posizione del passeggero", + "please go to picker location exactly": + "per favore vai esattamente alla posizione del selettore", + "You Can Cancel Trip And get Cost of Trip From": + "Puoi annullare il viaggio e ottenere il costo del viaggio da", + "Are you sure to cancel?": "Sei sicuro di voler annullare?", + "Yes": "SÌ", + "Insert Emergincy Number": "Inserisci il numero di emergenza", + "Best choice for comfort car and flexible route and stops point": + "La scelta migliore per un'auto confortevole e un percorso flessibile e punti di sosta", + "Insert": "Inserire", + "This is for delivery or a motorcycle.": + "Questo è per la consegna o una moto.", + "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": + "Questo viaggio va direttamente dal tuo punto di partenza alla tua destinazione a un prezzo fisso. L'autista deve seguire il percorso previsto", + "You can decline a request without any cost": + "Puoi rifiutare una richiesta senza alcun costo", + "Perfect for adventure seekers who want to experience something new and exciting": + "Perfetto per chi cerca l'avventura e vuole sperimentare qualcosa di nuovo ed emozionante", + "My current location is:": "La mia posizione attuale è:", + "and I have a trip on": "e ho un viaggio", + "App with Passenger": "App con Passeggero", + "مع الراكب": "مع الراكب", + "You will be pay the cost to driver or we will get it from you on next trip": + "Pagherai il costo all'autista o lo riceveremo da te nel prossimo viaggio", + "Trip has Steps": "Il viaggio prevede passaggi", + "Distance from Passenger to destination is": + "La distanza dal passeggero alla destinazione è", + "price is": "il prezzo è", + "This ride type does not allow changes to the destination or additional stops": + "Questo tipo di corsa non consente modifiche alla destinazione o fermate aggiuntive", + "This price may be changed": "Questo prezzo può essere modificato", + "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": + "Nessuna carta SIM, nessun problema! Chiama il tuo autista direttamente tramite la nostra app. Utilizziamo tecnologie avanzate per garantire la tua privacy.", + "This ride type allows changes, but the price may increase": + "Questo tipo di corsa consente modifiche, ma il prezzo potrebbe aumentare", + "message From passenger": "messaggio dal passeggero", + "Select one message": "Seleziona un messaggio", + "My location is correct. You can search for me using the navigation app": + "La mia posizione è corretta. Puoi cercarmi utilizzando l'app di navigazione", + "I'm waiting for you": "Sto aspettando per voi", + "Hello, I'm at the agreed-upon location": + "Salve, mi trovo nel luogo concordato", + "We noticed the speed is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": + "Abbiamo notato che la velocità supera i 100 km/h. Per favore rallenta per la tua sicurezza. Se non ti senti sicuro, puoi condividere i dettagli del tuo viaggio con un contatto o chiamare la polizia utilizzando il pulsante rosso SOS.", + "Warning: Speeding detected!": + "Attenzione: rilevato eccesso di velocità!", + "Please help! Contact me as soon as possible.": + "Per favore aiuto! Contattami il prima possibile.", + "Share Trip Details": "Condividi i dettagli del viaggio", + "Car Plate is": "La targa dell'auto è", + "the 300 points equal 300 L.E for you": + "i 300 punti equivalgono a 300 L.E per te", + "So go and gain your money": "Quindi vai e guadagna i tuoi soldi", + "the 300 points equal 300 L.E": "i 300 punti equivalgono a 300 L.E", + "The payment was not approved. Please try again.": + "Il pagamento non è stato approvato. Per favore riprova.", + "Payment Failed": "Pagamento fallito", + "Error": "Errore", + "An error occurred during the payment process.": + "Si è verificato un errore durante il processo di pagamento.", + "The payment was approved.": "Il pagamento è stato approvato.", + "Payment Successful": "Pagamento riuscito", + "No ride found yet": "Nessuna corsa trovata ancora", + "Accept Order": "Accetta l'ordine", + "reject your order.": "rifiutare il tuo ordine.", + "Bottom Bar Example": "Esempio della barra inferiore", + "Driver phone": "Telefono dell'autista", + "Statistics": "Statistiche", + "Origin": "Origine", + "Destination": "Destinazione", + "Driver Name": "Nome del conducente", + "Driver Car Plate": "Targa automobilistica del conducente", + "Available for rides": "Disponibile per corse", + "Scan Id": "Scansione ID", + "Camera not initilaized yet": + "La fotocamera non è ancora stata inizializzata", + "Scan ID MklGoogle": "Scansione ID MklGoogle", + "Language": "Lingua", + "Jordan": "Giordania", + "USA": "Stati Uniti d'America", + "Egypt": "Egitto", + "Turkey": "Tacchino", + "Saudi Arabia": "Arabia Saudita", + "Qatar": "Qatar", + "Bahrain": "Bahrein", + "Kuwait": "Kuwait", + "But you have a negative salary of": + "Ma hai uno stipendio negativo di", + "Promo Code": "Codice promozionale", + "Your trip distance is": "La distanza del tuo viaggio è", + "Enter promo code": "Inserisci il codice promozionale", + "You have promo!": "Hai una promozione!", + "Cost Duration": "Durata del costo", + "Duration is": "La durata è", + "Leave": "Partire", + "Join": "Giuntura", + "You Should be select reason.": "Dovresti selezionare il motivo.", + "\$": "\$", + "Waiting for Driver ...": "In attesa dell'autista...", + "Latest Recent Trip": "Ultimo viaggio recente", + "from your list": "dalla tua lista", + "Do you want to change Work location": "Vuoi cambiare sede di lavoro", + "Do you want to change Home location": + "Vuoi cambiare la posizione Casa", + "We Are Sorry That we dont have cars in your Location!": + "Siamo spiacenti di non avere auto nella tua posizione!", + "Choose from Map": "Scegli dalla mappa", + "Pick your ride location on the map - Tap to confirm": + "Scegli la posizione della corsa sulla mappa: tocca per confermare", + "To Work": "Lavorare", + "Are you want to go this site": "Vuoi andare su questo sito?", + "Closest & Cheapest": "Il più vicino e il più economico", + "Work Saved": "Lavoro salvato", + "Sefer is the ride-hailing app that is safe, reliable, and accessible.": + "Sefer è l'app di ride-hailing sicura, affidabile e accessibile.", + "With Sefer, you can get a ride to your destination in minutes.": + "Con Sefer puoi arrivare a destinazione in pochi minuti.", + "Sefer is committed to safety, and all of our captains are carefully screened and background checked.": + "Sefer è impegnata nella sicurezza e tutti i nostri capitani vengono attentamente selezionati e controllati i precedenti.", + "To Home": "A casa", + "Home Saved": "Casa salvata", + "Destination selected": "Destinazione selezionata", + "Now select start pick": "Ora seleziona la scelta iniziale", + "Pick from map": "Scegli dalla mappa", + "Click here point": "Clicca qui punto", + "No Car in your site. Sorry!": + "Nessuna macchina nel tuo sito. Scusa!", + "Nearest Car for you about": "L'auto più vicina per te", + "N/A": "N / A", + "From :": "Da :", + "Get Details of Trip": "Ottieni i dettagli del viaggio", + "If you want add stop click here": + "Se vuoi aggiungere una fermata clicca qui", + "Driver": "Autista", + "Where you want go": "Dove vuoi andare", + "My Card": "La mia carta", + "Start Record": "Avvia registrazione", + "Wallet": "Portafoglio", + "History of Trip": "Storia del viaggio", + "Helping Center": "Centro di aiuto", + "Record saved": "Registrazione salvata", + "Trips recorded": "Viaggi registrati", + "Select Your Country": "Seleziona il tuo paese", + "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": + "Per assicurarti di ricevere le informazioni più accurate per la tua posizione, seleziona il tuo Paese di seguito. Ciò ti aiuterà ad adattare l'esperienza e i contenuti dell'app al tuo Paese.", + "Are you sure to delete recorded files": + "Sei sicuro di eliminare i file registrati?", + "Select recorded trip": "Seleziona il viaggio registrato", + "Card Number": "Numero di carta", + "Hi, Where to": "Ciao, dove andare?", + "Pick your destination from Map": + "Scegli la tua destinazione dalla mappa", + "Add Stops": "Aggiungi fermate", + "Get Direction": "Prendere direzione", + "Add Location": "Aggiungi luogo", + "Switch Rider": "Cambia pilota", + "You will arrive to your destination after timer end.": + "Arriverai a destinazione allo scadere del timer.", + "You can cancel trip": "Puoi annullare il viaggio", + "The driver waitting you in picked location .": + "L'autista ti aspetta nella posizione scelta.", + "Pay with Your": "Paga con il tuo", + "Pay with Credit Card": "Pagare con la carta di credito", + "Payment History": "Storico dei pagamenti", + "Show Promos to Charge": "Mostra promozioni da caricare", + "Point": "Punto", + "Driver Wallet": "Portafoglio autista", + "Total Points is": "I punti totali sono", + "Total Budget from trips is": "Il budget totale dei viaggi è", + "Total Amount:": "Importo totale:", + "Total Budget from trips by": "Budget totale dai viaggi di", + "Credit card is": "La carta di credito lo è", + "بطاقة الائتمان هي": "بطاقة الائتمان هي", + "This amount for all trip I get from Passengers": + "Questo importo per tutto il viaggio che ricevo dai passeggeri", + "Pay from my budget": "Paga dal mio budget", + "This amount for all trip I get from Passengers and Collected For me in": + "Questo importo per tutto il viaggio che ricevo dai passeggeri e riscosso per me in", + "You can buy points from your budget": + "Puoi acquistare punti dal tuo budget", + "insert amount": "inserire importo", + "You can buy Points to let you online": + "Puoi acquistare punti per consentirti di essere online", + "by this list below": "da questo elenco qui sotto", + "من خلال القائمة أدناه": "من خلال القائمة أدناه", + "Create Wallet to receive your money": + "Crea Wallet per ricevere i tuoi soldi", + "Enter your feedback here": "Inserisci qui il tuo feedback", + "Please enter your feedback.": "Inserisci il tuo feedback.", + "Feedback": "Feedback", + "Submit": "Invia", + "Click here to Show it in Map": + "Clicca qui per mostrarlo sulla mappa", + "Canceled": "Annullato", + "Type your Email": "Digita la tua e-mail", + "No I want": "No io voglio", + "Email is": "L'e-mail è", + "Phone Number is": "Il numero di telefono è", + "Date of Birth is": "La data di nascita è", + "Sex is": "Il sesso lo è", + "Car Details": "Dettagli dell'auto", + "VIN is": "Il VIN lo è", + "Color is": "Il colore è", + "Make is": "Fare è", + "Model is": "Il modello è", + "Year is": "L'anno è", + "Expiration Date": "Data di scadenza", + "Edit Your data": "Modifica i tuoi dati", + "write vin for your car": "scrivi vin per la tua macchina", + "VIN": "VIN", + "write Color for your car": "scrivi Colore per la tua auto", + "write Make for your car": "scrivi Crea per la tua auto", + "write Model for your car": "scrivi il modello della tua auto", + "write Year for your car": "scrivi Anno per la tua auto", + "write Expiration Date for your car": + "scrivi la data di scadenza della tua auto", + "Tariffs": "Tariffe", + "Minimum fare": "Tariffa minima", + "Maximum fare": "Tariffa massima", + "Flag-down fee": "Tariffa di segnalazione", + "Including Tax": "Tasse incluse", + "BookingFee": "Tassa di prenotazione", + "Morning": "Mattina", + "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": + "dalle 07:30 alle 10:30 (giovedì, venerdì, sabato, lunedì)", + "Evening": "Sera", + "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": + "dalle 12:00 alle 15:00 (giovedì, venerdì, sabato, lunedì)", + "Night": "Notte", + "You have in account": "Hai in conto", + "Select Country": "Seleziona il paese", + "Ride Today :": "Pedala oggi:", + "After this period": "Dopo questo periodo", + "You can\"t cancel!": "Non puoi annullare!", + "لا تستطيع الغاء الرحله": "Non preoccuparti", + "from 23:59 till 05:30": "dalle 23:59 alle 05:30", + "Rate Driver": "Valuta il conducente", + "Total Cost is": "Il costo totale è", + "Write note": "Scrivi nota", + "Time to arrive": "È ora di arrivare", + "Ride Summaries": "Riepiloghi della corsa", + "Total Cost": "Costo totale", + "Average of Hours of": "Media delle ore di", + "is ON for this month": "è ATTIVO per questo mese", + "Days": "Giorni", + "Total Hours on month": "Ore totali nel mese", + "Counts of Hours on days": "Conteggi delle ore nei giorni", + "OrderId": "ID ordine", + "created time": "tempo creato", + "Speed Over": "Velocità finita", + "I will slow down": "Rallenterò", + "Map Passenger": "Mappa Passeggero", + "Be Slowly": "Sii lentamente", + "If you want to make Google Map App run directly when you apply order": + "Se desideri che l'app Google Map venga eseguita direttamente quando effettui l'ordine", + "You can change the language of the app": + "Puoi cambiare la lingua dell'app", + "Your Budget less than needed": + "Il tuo budget è inferiore al necessario", + "You can change the Country to get all features": + "Puoi cambiare il Paese per ottenere tutte le funzionalità", + "Change Country": "Cambia Paese" + }, + "zh": { + "Sign In by Apple": "通过 Apple 登录", + "Sign In by Google": "通过谷歌登录", + "How do I request a ride?": "我如何叫车?", + "Step-by-step instructions on how to request a ride through the Sefer app.": + "有关如何通过 Sefer 应用叫车的分步说明。", + "What types of vehicles are available?": "有哪些类型的车辆可供选择?", + "Sefer offers a variety of vehicle options to suit your needs, including economy, comfort, and luxury. Choose the option that best fits your budget and passenger count.": + "Sefer 提供多种车辆选择以满足您的需求,包括经济型、舒适型和豪华型。选择最适合您的预算和乘客数量的选项。", + "How can I pay for my ride?": "我如何支付乘车费用?", + "Sefer offers multiple payment methods for your convenience. Choose between cash payment or credit/debit card payment during ride confirmation.": + "Sefer 提供多种付款方式,方便您使用。在行程确认时选择现金付款或信用卡/借记卡付款。", + "Can I cancel my ride?": "我可以取消行程吗?", + "Yes, you can cancel your ride under certain conditions (e.g., before driver is assigned). See the Sefer cancellation policy for details.": + "是的,您可以在某些情况下取消行程(例如,在分配司机之前)。详情请参阅 Sefer 取消政策。", + "Driver Registration & Requirements": "司机注册和要求", + "How can I register as a driver?": "我如何注册成为司机?", + "What are the requirements to become a driver?": "成为一名司机需要什么条件?", + "Visit our website or contact Sefer support for information on driver registration and requirements.": + "请访问我们的网站或联系 Sefer 支持人员,了解有关驱动程序注册和要求的信息。", + "How do I communicate with the other party (passenger/driver)?": + "如何与对方(乘客/司机)沟通?", + "Sefer provides in-app chat functionality to allow you to communicate with your driver or passenger during your ride.": + "Sefer 提供应用内聊天功能,让您在乘车期间与司机或乘客进行交流。", + "What safety measures does Sefer offer?": "Sefer 提供哪些安全措施?", + "Sefer prioritizes your safety. We offer features like driver verification, in-app trip tracking, and emergency contact options.": + "Sefer 将您的安全放在首位。我们提供驾驶员验证、应用内行程跟踪和紧急联系选项等功能。", + "Frequently Questions": "常见问题", + "User does not exist.": "用户不存在。", + "We need your phone number to contact you and to help you.": + "我们需要您的电话号码来与您联系并为您提供帮助。", + "You will recieve code in sms message": "您将在短信中收到代码", + "Please enter": "请输入", + "We need your phone number to contact you and to help you receive orders.": + "我们需要您的电话号码来与您联系并帮助您接收订单。", + "The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.": + "您犯罪记录上的全名与您驾驶执照上的全名不符。请核实并提供正确的文件。", + "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.": + "您的驾驶执照上的国家号码与您的身份证件上的号码不匹配。请核实并提供正确的文件。", + "Capture an Image of Your Criminal Record": "拍摄您的犯罪记录图像", + "IssueDate": "签发日期", + "Capture an Image of Your car license front": "拍摄您的汽车牌照正面的图像", + "Capture an Image of Your ID Document front": "拍摄您的身份证件正面的图像", + "NationalID": "国民身份证", + "FullName": "全名", + "InspectionResult": "检查结果", + "Criminal Record": "犯罪记录", + "The email or phone number is already registered.": "该电子邮件或电话号码已被注册。", + "To become a ride-sharing driver on the Sefer app, you need to upload your driver\"s license, ID document, and car registration document. Our AI system will instantly review and verify their authenticity in just 2-3 minutes. If your documents are approved, you can start working as a driver on the Sefer app. Please note, submitting fraudulent documents is a serious offense and may result in immediate termination and legal consequences.": + "要成为Sefer应用程序上的拼车司机,您需要上传驾驶执照、身份证件和汽车登记文件。我们的人工智能系统将在短短2-3分钟内立即审核并验证它们的真实性。如果您的文件获得批准后,您可以开始在 Sefer 应用程序上担任司机。请注意,提交欺诈性文件属于严重犯罪行为,可能会导致立即终止合同并承担法律后果。", + "Documents check": "文件检查", + "Driver's License": "驾照", + "License Type": "许可证类型", + "National Number": "国家号码", + "Name (Arabic)": "姓名(阿拉伯语)", + "Name (English)": "姓名(英文)", + "Address": "地址", + "Issue Date": "签发日期", + "Expiry Date": "到期日", + "License Categories": "许可证类别", + "driver_license": "驾驶执照", + "Capture an Image of Your Driver License": "拍摄您的驾驶执照的图像", + "ID Documents Back": "身份证件 返回", + "National ID": "国民身份证", + "Occupation": "职业", + "Gender": "性别", + "Religion": "宗教", + "Marital Status": "婚姻状况", + "Full Name (Marital)": "全名(婚姻)", + "Expiration Date": "截止日期", + "Capture an Image of Your ID Document Back": "拍摄您的身份证件图像", + "ID Documents Front": "身份证件正面", + "First Name": "名", + "CardID": "卡号", + "Full Name": "全名", + "Vehicle Details Front": "车辆详细信息 正面", + "Plate Number": "车牌号码", + "Owner Name": "业主姓名", + "Vehicle Details Back": "车辆详情 返回", + "Make": "制作", + "Model": "模型", + "Year": "年", + "Chassis": "机壳", + "Color": "颜色", + "Displacement": "移位", + "Fuel": "燃料", + "Tax Expiry Date": "纳税到期日", + "Inspection Date": "检验日期", + "Capture an Image of Your car license back": "拍回您的汽车驾照图像", + "Capture an Image of Your Driver’s License": "拍摄您的驾驶执照的图像", + "Sign in with Google for easier email and name entry": + "使用 Google 登录以更轻松地输入电子邮件和姓名", + "You will choose allow all the time to be ready receive orders": + "您将选择允许所有时间准备好接收订单", + "Welcome to Sefer!": "欢迎来到塞弗!", + "Get to your destination quickly and easily.": "快速、轻松地到达目的地。", + "Enjoy a safe and comfortable ride.": "享受安全舒适的乘车体验。", + "Choose Language": "选择语言", + "Login": "登录", + "Pay with Wallet": "使用钱包支付", + "Invalid MPIN": "MPIN 无效", + "Invalid OTP": "无效一次性密码", + "Enter your email address": "输入你的电子邮箱地址", + "Please enter Your Email.": "请输入您的电子邮件。", + "Enter your phone number": "输入你的电话号码", + "Please enter your phone number.": "请输入您的电话号码。", + "Please enter Your Password.": "请输入您的密码。", + "Submit": "提交", + "if you dont have account": "如果您没有帐户", + "Register": "登记", + "Accept Ride's Terms & Review Privacy Notice": "接受乘车条款并查看隐私声明", + "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.": + "选择下面的“我同意”,即表示我已查看并同意使用条款并承认隐私声明。我已年满 18 岁。", + "I Agree": "我同意", + "First name": "名", + "Enter your first name": "输入您的名字", + "Please enter your first name.": "请输入您的名字。", + "Last name": "姓", + "Enter your last name": "输入您的姓氏", + "Please enter your last name.": "请输入您的姓氏。", + "City": "城市", + "Please enter your City.": "请输入您的城市。", + "Male": "男性", + "Female": "女性", + "Verify Email": "验证邮件", + "We sent 5 digit to your Email provided": "我们向您提供的电子邮件发送了 5 位数字", + "5 digit": "5位数字", + "Send Verification Code": "发送验证码", + "Your Ride Duration is": "您的骑行时间是", + "You will be thier in": "你将会在", + "You trip distance is": "您的行程距离是", + "Fee is": "费用为", + "From :": "从 :", + "To :": "到 :", + "Add Promo": "添加促销", + "Confirm Selection": "确认选择", + "distance is": "距离是", + "duration is": "持续时间是", + "I don't need a ride anymore": "我不再需要搭车了", + "I was just trying the application": "我只是在尝试该应用程序", + "No driver accepted my request": "没有司机接受我的请求", + "I added the wrong pick-up/drop-off location": "我添加了错误的接送地点", + "I don't have a reason": "我没有理由", + "Other": "其他", + "Can we know why you want to cancel Ride ?": "我们可以知道您为什么要取消行程吗?", + "Cancel Ride": "取消乘车", + "Add Payment Method": "添加付款方式", + "Your Wallet balance is": "您的钱包余额是", + "Ride Wallet": "骑行钱包", + "Payment Method": "付款方式", + "Type here Place": "在此输入地点", + "Are You sure to ride to": "您确定要乘车前往", + "Confirm": "确认", + "Back": "后退", + "You are Delete": "你正在删除", + "Deleted": "已删除", + "You Dont Have Any places yet !": "您还没有任何位置!", + "Favorite Places": "最喜欢的地方", + "From : Current Location": "来自 : 当前位置", + "Where to": "去哪儿", + "Notifications": "通知", + "Profile": "轮廓", + "Home": "家", + "My Cared": "我的关心", + "Add Card": "添加卡", + "Add Credit Card": "添加信用卡", + "Please enter the cardholder name": "请输入持卡人姓名", + "Please enter the expiry date": "请输入有效期", + "Please enter the CVV code": "请输入CVV码", + "Go To Favorite Places": "去最喜欢的地方", + "Go to this Target": "前往该目标", + "My Profile": "我的简历", + "Sign Out": "登出", + "Home Page": "主页", + "Are you want to go to this site": "你想访问这个网站吗", + "MyLocation": "我的位置", + "my location": "我的位置", + "Target": "目标", + "Update": "更新", + "You Should choose rate figure": "您应该选择费率数字", + "Login Captin": "登录队长", + "Register Captin": "注册队长", + "Send Verfication Code": "发送验证码", + "KM": "知识管理", + "End Ride": "结束骑行", + "Minute": "分钟", + "Go to passenger Location now": "立即前往乘客位置", + "Duration of the Ride is": "骑行持续时间为", + "Distance of the Ride is": "骑行距离为", + "Name of the Passenger is": "乘客姓名是", + "Hello this is Captain": "你好,这是队长", + "Start the Ride": "开始骑行", + "Please Wait If passenger want To Cancel!": "如果旅客想取消,请稍候!", + "Total Duration:": "总持续时间:", + "Active Duration:": "活跃时间:", + "Waiting for Captin ...": "等待队长...", + "Age is": "年龄是", + "Rating is": "评级为", + "to arrive you.": "到达你身边。", + "Order History": "订单历史", + "My Wallet": "我的钱包", + "Tariff": "关税", + "Settings": "设置", + "Feed Back": "反馈", + "Promos": "促销", + "Please enter a valid 16-digit card number": "请输入有效的 16 位卡号", + "Add Phone": "添加电话", + "Please enter a phone number": "请输入电话号码", + "You dont Add Emergency Phone Yet!": "您还没有添加紧急电话!", + "You will arrive to your destination after": "您将在之后到达目的地", + "You can cancel Ride now": "您现在可以取消行程", + "You Can cancel Ride After Captain did not come in the time": + "队长未按时到达后您可以取消乘车", + "If you in Car Now. Press Start The Ride": "如果你现在在车里。按开始骑行", + "You Dont Have Any amount in": "您没有任何金额", + "Wallet!": "钱包!", + "You Have": "你有", + "Save Credit Card": "保存信用卡", + "Show Promos": "显示促销", + "10 and get 4% discount": "满 10 即可享受 4% 折扣", + "20 and get 6% discount": "满 20 即可享受 6% 折扣", + "40 and get 8% discount": "满 40 即可享受 8% 折扣", + "100 and get 11% discount": "满 100 即可享受 11% 折扣", + "Pay with Your PayPal": "使用 PayPal 付款", + "You will choose one of above !": "您将选择以上之一!", + "Cancel": "取消", + "Delete My Account": "删除我的账户", + "Edit Profile": "编辑个人资料", + "Name": "姓名", + "Update Gender": "更新性别", + "Education": "教育", + "Update Education": "更新教育", + "Employment Type": "雇佣类型", + "SOS Phone": "求救电话", + "High School Diploma": "高中毕业文凭", + "Associate Degree": "副学士学位", + "Bachelor's Degree": "学士学位", + "Master's Degree": "硕士", + "Doctoral Degree": "博士学位", + "Promos For today": "今天的促销", + "Copy this Promo to use it in your Ride!": "复制此促销信息以在您的骑行中使用!", + "To change some Settings": "更改某些设置", + "To change Language the App": "更改应用程序语言", + "Order Request Page": "订单请求页面", + "Rouats of Trip": "旅行路线", + "Passenger Name is": "乘客姓名是", + "Total From Passenger is": "来自乘客的总计是", + "Duration To Passenger is": "到达乘客的时间是", + "Distance To Passenger is": "到乘客的距离是", + "Total For You is": "为您提供的总计是", + "Distance is": "距离是", + "KM": "知识管理", + "Duration of Trip is": "行程持续时间为", + "Minutes": "分钟", + "Apply Order": "申请订单", + "Refuse Order": "拒绝订单", + "Rate Captain": "评分队长", + "Enter your Note": "输入您的备注", + "Type something...": "输入一些东西...", + "Submit rating": "提交评分", + "Rate Passenger": "票价乘客", + "Ride Summary": "骑行总结", + "welcome_message": "欢迎消息", + "app_description": "应用程序描述", + "get_to_destination": "到达目的地", + "get_a_ride": "搭个便车", + "safe_and_comfortable": "安全舒适", + "committed_to_safety": "致力于安全", + "Driver Applied the Ride for You": "司机为您申请行程", + "Show latest promo": "显示最新促销", + "Cancel Trip": "取消行程", + "Passenger Cancel Trip": "乘客取消行程", + "Please stay on the picked point.": "请留在选定的点上。", + "Trip is Begin": "旅行开始了", + "Hi ,I will go now": "嗨,我现在就去", + "Passenger come to you": "乘客来找你", + "Hi ,I Arrive your site": "你好,我到达你的网站", + "Driver Finish Trip": "司机完成行程", + "you will pay to Driver": "您将支付给司机", + "Driver Cancel Your Trip": "司机取消您的行程", + "you will pay to Driver you will be pay the cost of driver time look to your SEFER Wallet": + "您将向司机付款 您将支付司机时间费用 请查看您的 SEFER 钱包", + "I will go now": "我要走了", + "You Have Tips": "你有秘诀", + "tips": "尖端", + "Total is": "总计为", + "الْمَجْمُوع هُوَ": "🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟", + "No,I want": "不,我想", + "Your fee is": "您的费用是", + "Do you want to pay Tips for this Driver": "您想为此司机支付小费吗", + "Tip is": "提示是", + "Tip is": "提示是", + "Camera Access Denied.": "相机访问被拒绝。", + "Open Settings": "打开设置", + "GPS Required Allow !.": "需要 GPS 允许!。", + "Your Account is Deleted": "您的帐户已删除", + "Are you sure to delete your account?": "您确定要删除您的帐户吗?", + "Your data will be erased after 2 weeks": "您的数据将在 2 周后被删除", + "And you will can't return to use app after 1 month": + "1 个月后您将无法返回使用应用程序", + "وَلَن تَسْتَطِيع اسْتِخْدَام التَّطْبِيق مَرَّة أُخْرَى بَعْد شَهْر": + "驶", + "Enter Your First Name": "输入您的名字", + "Are you Sure to LogOut?": "您确定要退出吗?", + "Email Wrong": "电子邮件错误", + "Email you inserted is Wrong.": "您输入的电子邮件有误。", + "You have finished all times": "你已经完成了所有时间", + "if you want help you can email us here": "如果您需要帮助,您可以在这里给我们发电子邮件", + "Thanks": "谢谢", + "Email Us": "给我们发电子邮件", + "I cant register in your app in face detection": "我无法在您的应用程序中注册人脸检测", + "Hi": "你好", + "No face detected": "未检测到人脸", + "Image detecting result is": "图像检测结果为", + "from 3 times Take Attention": "3次起 注意", + "Be sure for take accurate images please": "请务必拍摄准确的图像", + "You have": "你有", + "لَدَيْك": "😄😄😄😄😄", + "image verified": "图像已验证", + "Next": "下一个", + "There is no help Question here": "这里没有帮助问题", + "Call End": "通话结束", + "You dont have Points": "您没有积分", + "You Are Stopped For this Day !": "今天你就被阻止了!", + "You must be charge your Account": "您必须向您的帐户收费", + "You Refused 3 Rides this Day that is the reason": + "您今天拒绝了 3 次乘车,这就是原因", + "See you Tomorrow!": "明天见!", + "لِقَائِنَا غَدًا!": "吖吖吖吖!", + "Recharge my Account": "为我的帐户充值", + "Ok , See you Tomorrow": "好的明天见", + "You are Stopped": "你被阻止了", + "Connected": "连接的", + "Not Connected": "未连接", + "Your are far from passenger location": "您距离乘客位置较远", + "go to your passenger location before": "前往您的乘客位置之前", + "Passenger cancel trip": "乘客取消行程", + "يُلْغِي الرَّاكِب الرِّحْلَة": "🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟", + "You will get cost of your work for this trip": "您将获得本次旅行的工作费用", + "in your wallet": "在你的钱包里", + "you gain": "你获得", + "Order Cancelled": "订单已取消", + "Order Cancelled by Passenger": "乘客取消订单", + "Success": "成功", + "Feedback data saved successfully": "反馈数据保存成功", + "No Promo for today .": "今天没有促销。", + "Select your destination": "选择您的目的地", + "Search for your Start point": "搜索您的起点", + "Search for waypoint": "搜索航点", + "Current Location": "当前位置", + "Add Location 1": "添加位置 1", + "You must Verify email !.": "您必须验证电子邮件!", + "Cropper": "农作物", + "Saved Sucssefully": "保存成功", + "Select Date": "选择日期", + "Birth Date": "出生日期", + "Ok": "好的", + "the 500 points equal 30 JOD": "500 点等于 30 JOD", + "the 500 points equal 30 JOD for you": "500 积分等于 30 JOD 给您", + "So go and gain your money": "所以去赚你的钱吧", + "فَاسْتَحِقَّ فُلُوسَك وَاكْسِب النِّقَاط": + "❗️❗️❗️❗️❗️❗️❗️❗️❗️❗️❗️❗️❗️❗️❗️❗️❗️❗️❗️❗️❗️❗️❗️❗️❗️❗️❗️❗️❗️❗️❗️", + "token updated": "令牌已更新", + "Add Location 2": "添加位置 2", + "Add Location 3": "添加位置 3", + "Add Location 4": "添加位置 4", + "Waiting for your location": "等待你的位置", + "Search for your destination": "搜索您的目的地", + "Hi! This is": "你好!这是", + "I am using": "我在用", + "to ride with": "一起骑", + "as the driver.": "作为司机。", + "is driving a": "正在驾驶", + "with license plate": "有车牌的", + "I am currently located at": "我目前位于", + "Please go to Car now": "请立即前往汽车", + "If you need to reach me, please contact the driver directly at": + "如果您需要联系我,请直接联系司机", + "No Car or Driver Found in your area.": "在您所在的地区找不到汽车或司机。", + "Please Try anther time": "请稍后尝试", + "There no Driver Aplly your order sorry for that": + "没有司机申请您的订单,对此深表歉意", + "Trip Cancelled": "行程取消", + "The Driver Will be in your location soon .": "司机很快就会到达您所在的位置。", + "The distance less than 500 meter.": "距离小于500米。", + "Promo End !": "促销结束!", + "There is no notification yet": "目前还没有通知", + "Use Touch ID or Face ID to confirm payment": + "使用 Touch ID 或 Face ID 确认付款", + "Contact us for any questions on your order.": "如果您对订单有任何疑问,请联系我们。", + "Pyament Cancelled .": "皮亚门特已取消。", + "type here": "在此输入", + "Scan Driver License": "扫描驾驶执照", + "Please put your licence in these border": "请将您的驾照放在这些边框内", + "Camera not initialized yet": "相机尚未初始化", + "Take Image": "拍摄图像", + "AI Page": "人工智能页面", + "Take Picture Of ID Card": "拍摄身份证照片", + "Take Picture Of Driver License Card": "拍摄驾驶执照卡的照片", + "We are process picture please wait": "我们正在处理图片请稍候", + "There is no data yet.": "还没有数据。", + "Name :": "姓名 :", + "Drivers License Class:": "驾驶执照类别:", + "Document Number:": "文件号码:", + "Address:": "地址:", + "Height:": "高度:", + "Expiry Date:": "到期日:", + "Date of Birth:": "出生日期:", + "You can\"t continue with us .": "你不能继续和我们在一起。", + "You should renew Driver license": "您应该更新驾驶执照", + "Detect Your Face": "检测你的脸", + "Go to next step": "进入下一步", + "scan Car License.": "扫描汽车驾照。", + "aاسْتِخْرَاج رُخْصَة السَّيَّارَة.": "是的。", + "Name in arabic": "阿拉伯语名称", + "Drivers License Class": "驾驶执照等级", + "Date of Birth": "出生日期", + "Age": "年龄", + "Lets check Car license": "让我们检查一下汽车牌照", + "Car Kind": "汽车种类", + "Car Plate": "车牌", + "Lets check License Back Face": "让我们检查许可证背面", + "Car License Card": "汽车牌照", + "No image selected yet": "尚未选择图像", + "Made :": "制成 :", + "model :": "模型 :", + "VIN :": "车辆识别号码:", + "year :": "年 :", + "ُExpire Date": "到期日期", + "Login Driver": "登录驱动程序", + "Password must br at least 6 character.": "密码必须至少包含 6 个字符。", + "if you don\"t have account": "如果您没有帐户", + "Here recorded trips audio": "这里记录了旅行音频", + "Register as Driver": "注册成为司机", + "Privacy Notice": "隐私声明", + "By selecting 'I Agree' below, I have reviewed and agree to the Terms of Use and acknowledge the": + "通过选择下面的“我同意”,我已阅读并同意使用条款并承认", + ". I am at least 18 years of age.": "。我已年满 18 岁。", + "Log Out Page": "注销页面", + "Log Off": "注销", + "Register Driver": "注册驱动程序", + "Verify Email For Driver": "验证司机的电子邮件", + "Admin DashBoard": "管理仪表板", + "Your name": "你的名字", + "your ride is applied": "您的行程已被应用", + "Your password": "你的密码", + "H and": "手", + "LE": "LE", + "JOD": "乔德", + "m": "米", + "We search nearst Driver to you": "我们搜索离您最近的司机", + "please wait till driver accept your order": "请等待司机接受您的订单", + "No accepted orders? Try raising your trip fee to attract riders.": + "没有接受订单?尝试提高行程费用以吸引乘客。", + "You should select one": "你应该选择一个", + "The driver accept your order for": "司机接受您的订单", + "Increase Fee": "增加费用", + "No, thanks": "不,谢谢", + "The driver on your way": "司机正在路上", + "Total price from": "总价从", + "Order Details Speed": "订单详情 速度", + "Order Applied": "已应用订单", + "accepted your order": "已接受您的订单", + "We regret to inform you that another driver has accepted this order.": + "我们很遗憾地通知您,另一位司机已接受此订单。", + "Selected file:": "选定的文件:", + "Your trip cost is": "您的旅行费用是", + "this will delete all files from your device": "这将从您的设备中删除所有文件", + "you have a negative balance of": "您的余额为负数", + "in your": "在你的", + "Exclusive offers and discounts always with the Sefer app": + "Sefer 应用程序始终提供独家优惠和折扣", + "Please go to Car Driver": "请前往汽车司机", + "wallet due to a previous trip.": "由于之前的旅行,钱包被掏空了。", + "Submit Question": "提交问题", + "Please enter your Question.": "请输入您的问题。", + "Help Details": "帮助详情", + "No trip yet found": "尚未找到行程", + "No Response yet.": "尚未回复。", + "You Earn today is": "您今天的收入是", + "You Have in": "你已经在", + "Total points is": "总分是", + "Total Connection Duration:": "总连接持续时间:", + "H and": "手", + "Passenger name :": "乘客姓名:", + "Cost Of Trip IS": "旅行费用是", + "Arrival time": "到达时间", + "arrival time to reach your point": "到达目的地的到达时间", + "For Speed and Delivery trips, the price is calculated dynamically. For Comfort trips, the price is based on time and distance": + "对于速度和送货行程,价格是动态计算的。对于舒适旅行,价格根据时间和距离而定", + "Hello this is Driver": "你好,这是司机", + "Is the Passenger in your Car ?": "乘客在你的车里吗?", + "Please wait for the passenger to enter the car before starting the trip.": + "请等待乘客上车后再开始行程。", + "No ,still Waiting.": "不,还在等待。", + "I arrive you": "我到达你", + "I Arrive your site": "我到达你的网站", + "You are not in near to passenger location": "您不在乘客位置附近", + "please go to picker location exactly": "请准确前往选取器位置", + "You Can Cancel Trip And get Cost of Trip From": "您可以取消行程并获取行程费用:", + "Are you sure to cancel?": "您确定要取消吗?", + "Yes": "是的", + "Insert Emergincy Number": "插入紧急号码", + "Best choice for comfort car and flexible route and stops point": + "舒适用车、灵活路线和停靠点的最佳选择", + "Insert": "插入", + "This is for delivery or a motorcycle.": "这是用于送货或摩托车。", + "This trip goes directly from your starting point to your destination for a fixed price. The driver must follow the planned route": + "此行程以固定价格直接从您的出发地前往目的地。司机必须按照计划的路线行驶", + "You can decline a request without any cost": "您可以拒绝请求,无需支付任何费用", + "Perfect for adventure seekers who want to experience something new and exciting": + "非常适合想要体验新鲜刺激的冒险爱好者", + "My current location is:": "我当前的位置是:", + "and I have a trip on": "我有一次旅行", + "App with Passenger": "乘客应用程序", + "مع الراكب": "请注意", + "You will be pay the cost to driver or we will get it from you on next trip": + "您将向司机支付费用,或者我们将在下次行程时向您收取费用", + "Trip has Steps": "旅行有台阶", + "Distance from Passenger to destination is": "乘客到目的地的距离为", + "price is": "价格是", + "This ride type does not allow changes to the destination or additional stops": + "此行程类型不允许更改目的地或增加停靠站", + "This price may be changed": "此价格可能会更改", + "No SIM card, no problem! Call your driver directly through our app. We use advanced technology to ensure your privacy.": + "没有SIM卡,没问题!通过我们的应用程序直接致电您的司机。我们使用先进的技术来确保您的隐私。", + "This ride type allows changes, but the price may increase": + "此行程类型允许更改,但价格可能会上涨", + "message From passenger": "乘客留言", + "Select one message": "选择一条消息", + "My location is correct. You can search for me using the navigation app": + "我的位置是正确的。您可以使用导航应用程序搜索我", + "I'm waiting for you": "我在等你", + "Hello, I'm at the agreed-upon location": "你好,我已经到了约定的地点", + "We noticed the speed is exceeding 100 km/h. Please slow down for your safety. If you feel unsafe, you can share your trip details with a contact or call the police using the red SOS button.": + "我们注意到速度超过了 100 公里/小时。为了您的安全,请减速慢行。如果您感觉不安全,可以与联系人分享您的行程详细信息或使用红色 SOS 按钮报警。", + "Warning: Speeding detected!": "警告:检测到超速!", + "Please help! Contact me as soon as possible.": "请帮忙!尽快联系我。", + "Share Trip Details": "分享行程详情", + "Car Plate is": "车牌是", + "the 300 points equal 300 L.E for you": "300 点等于 300 L.E", + "So go and gain your money": "所以去赚你的钱吧", + "the 300 points equal 300 L.E": "300 点等于 300 L.E", + "The payment was not approved. Please try again.": "付款未获批准。请再试一次。", + "Payment Failed": "支付失败", + "Error": "错误", + "An error occurred during the payment process.": "付款过程中发生错误。", + "The payment was approved.": "付款已获批准。", + "Payment Successful": "支付成功", + "No ride found yet": "尚未找到乘车路线", + "Accept Order": "接受订单", + "reject your order.": "拒绝您的订单。", + "Bottom Bar Example": "底栏示例", + "Driver phone": "司机电话", + "Statistics": "统计数据", + "Origin": "起源", + "Destination": "目的地", + "Driver Name": "司机姓名", + "Driver Car Plate": "司机车牌", + "Available for rides": "可乘坐", + "Scan Id": "扫描 ID", + "Camera not initilaized yet": "相机尚未初始化", + "Scan ID MklGoogle": "扫描 ID MklGoogle", + "Language": "语言", + "Jordan": "约旦", + "USA": "美国", + "Egypt": "埃及", + "Turkey": "火鸡", + "Saudi Arabia": "沙特阿拉伯", + "Qatar": "卡塔尔", + "Bahrain": "巴林", + "Kuwait": "科威特", + "But you have a negative salary of": "但你的工资为负数", + "Promo Code": "促销代码", + "Your trip distance is": "您的行程距离是", + "Enter promo code": "输入促销代码", + "You have promo!": "你有促销!", + "Cost Duration": "费用持续时间", + "Duration is": "持续时间是", + "Leave": "离开", + "Join": "加入", + "You Should be select reason.": "你应该选择理由。", + "\$": "\$", + "Waiting for Driver ...": "等待司机...", + "Latest Recent Trip": "最近最近的旅行", + "from your list": "从你的清单中", + "Do you want to change Work location": "您想更改工作地点吗", + "Do you want to change Home location": "您想更改家庭位置吗", + "We Are Sorry That we dont have cars in your Location!": + "很抱歉,您所在的位置没有汽车!", + "Choose from Map": "从地图中选择", + "Pick your ride location on the map - Tap to confirm": + "在地图上选择您的乘车地点 - 点击确认", + "To Work": "上班", + "Are you want to go this site": "你想去这个网站吗", + "Closest & Cheapest": "最近且最便宜", + "Work Saved": "工作已保存", + "Sefer is the ride-hailing app that is safe, reliable, and accessible.": + "Sefer 是一款安全、可靠且易于使用的叫车应用程序。", + "With Sefer, you can get a ride to your destination in minutes.": + "通过 Sefer,您可以在几分钟内乘车到达目的地。", + "Sefer is committed to safety, and all of our captains are carefully screened and background checked.": + "Sefer 致力于安全,我们所有的船长都经过仔细的筛选和背景调查。", + "To Home": "回家", + "Home Saved": "已保存首页", + "Destination selected": "已选择目的地", + "Now select start pick": "现在选择开始选择", + "Pick from map": "从地图上选择", + "Click here point": "点击这里点", + "No Car in your site. Sorry!": "您的网站上没有汽车。对不起!", + "Nearest Car for you about": "距离您最近的汽车", + "N/A": "不适用", + "From :": "从 :", + "Get Details of Trip": "获取行程详情", + "If you want add stop click here": "如果您想添加停靠站,请单击此处", + "Driver": "司机", + "Where you want go": "你想去的地方", + "My Card": "我的卡", + "Start Record": "开始记录", + "Wallet": "钱包", + "History of Trip": "旅行历史", + "Helping Center": "帮助中心", + "Record saved": "记录已保存", + "Trips recorded": "记录的行程", + "Select Your Country": "选择您的国家/地区", + "To ensure you receive the most accurate information for your location, please select your country below. This will help tailor the app experience and content to your country.": + "为确保您收到最准确的所在位置信息,请在下面选择您所在的国家/地区。这将有助于根据您所在的国家/地区定制应用程序体验和内容。", + "Are you sure to delete recorded files": "您确定要删除录音文件吗", + "Select recorded trip": "选择记录的行程", + "Card Number": "卡号", + "Hi, Where to": "你好,去哪里", + "Pick your destination from Map": "从地图中选择您的目的地", + "Add Stops": "添加停靠点", + "Get Direction": "得到指引", + "Add Location": "添加位置", + "Switch Rider": "开关骑手", + "You will arrive to your destination after timer end.": + "计时器结束后您将到达目的地。", + "You can cancel trip": "您可以取消行程", + "The driver waitting you in picked location .": "司机在指定地点等候您。", + "Pay with Your": "用您的支付", + "Pay with Credit Card": "使用信用卡支付", + "Payment History": "支付历史", + "Show Promos to Charge": "显示促销活动以收费", + "Point": "观点", + "Driver Wallet": "司机钱包", + "Total Points is": "总积分为", + "Total Budget from trips is": "旅行总预算为", + "Total Amount:": "总金额:", + "Total Budget from trips by": "行程总预算", + "Credit card is": "信用卡是", + "بطاقة الائتمان هي": "巴巴巴", + "This amount for all trip I get from Passengers": "我从乘客那里得到的所有行程的金额", + "Pay from my budget": "从我的预算中支付", + "This amount for all trip I get from Passengers and Collected For me in": + "这笔金额是我从乘客处获得并为我收取的所有行程的金额", + "You can buy points from your budget": "您可以从预算中购买积分", + "insert amount": "插入量", + "You can buy Points to let you online": "您可以购买积分让您上网", + "by this list below": "通过下面的列表", + "من خلال القائمة أدناه": "🇨🇳 🇨🇳", + "Create Wallet to receive your money": "创建钱包来接收您的钱", + "Enter your feedback here": "在此输入您的反馈", + "Please enter your feedback.": "请输入您的反馈。", + "Feedback": "反馈", + "Submit": "提交", + "Click here to Show it in Map": "单击此处在地图中显示它", + "Canceled": "取消", + "Type your Email": "输入您的电子邮件", + "No I want": "不,我想", + "Email is": "电子邮件是", + "Phone Number is": "电话号码是", + "Date of Birth is": "出生日期是", + "Sex is": "性别是", + "Car Details": "汽车详情", + "VIN is": "车辆识别号是", + "Color is": "颜色是", + "Make is": "品牌是", + "Model is": "型号是", + "Year is": "年份是", + "Expiration Date": "截止日期", + "Edit Your data": "编辑您的数据", + "write vin for your car": "为您的汽车写入 vin", + "VIN": "车架号", + "write Color for your car": "为你的车写颜色", + "write Make for your car": "为你的汽车写下“Make for your car”", + "write Model for your car": "为您的汽车编写型号", + "write Year for your car": "写下你的车的年份", + "write Expiration Date for your car": "写下您的汽车的到期日期", + "Tariffs": "关税", + "Minimum fare": "最低票价", + "Maximum fare": "最高票价", + "Flag-down fee": "降旗费", + "Including Tax": "含税", + "BookingFee": "预订费", + "Morning": "早晨", + "from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)": + "07:30 至 10:30(周四、周五、周六、周一)", + "Evening": "晚上", + "from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)": + "12:00 至 15:00(周四、周五、周六、周一)", + "Night": "夜晚", + "You have in account": "您账户中有", + "Select Country": "选择国家", + "Ride Today :": "今天骑行:", + "After this period": "这段时间之后", + "You can\"t cancel!": "您无法取消!", + "لا تستطيع الغاء الرحله": + "??????????????????????????????????????????????????????????????????????????????", + "from 23:59 till 05:30": "23:59 至 05:30", + "Rate Driver": "费率驱动因素", + "Total Cost is": "总成本为", + "Write note": "写笔记", + "Time to arrive": "到达时间", + "Ride Summaries": "骑行总结", + "Total Cost": "总成本", + "Average of Hours of": "平均小时数", + "is ON for this month": "本月已开启", + "Days": "天", + "Total Hours on month": "当月总小时数", + "Counts of Hours on days": "每天的小时数", + "OrderId": "订单号", + "created time": "创建时间", + "Speed Over": "超速", + "I will slow down": "我会放慢脚步", + "Map Passenger": "地图乘客", + "Be Slowly": "慢慢来", + "If you want to make Google Map App run directly when you apply order": + "如果您想让Google Map App在申请订单时直接运行", + "You can change the language of the app": "您可以更改应用程序的语言", + "Your Budget less than needed": "您的预算低于所需", + "You can change the Country to get all features": "您可以更改国家/地区以获得所有功能", + "Change Country": "改变国家" + } + }; +} diff --git a/lib/controller/login_controller.dart b/lib/controller/login_controller.dart new file mode 100644 index 0000000..5644a73 --- /dev/null +++ b/lib/controller/login_controller.dart @@ -0,0 +1,38 @@ +import 'dart:convert'; + +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:service/constant/api_key.dart'; +import 'package:service/constant/box_name.dart'; +import 'package:service/constant/links.dart'; +import 'package:service/controller/functions/crud.dart'; +import 'package:service/main.dart'; + +import '../views/home/main.dart'; + +class LoginController extends GetxController { + var email = TextEditingController(); + var password = TextEditingController(); + final formKey = GlobalKey(); + + void login() async { + if (box.read(BoxName.email) == AK.emailService) { + Get.off(Main()); + } else { + if (formKey.currentState!.validate()) { + var res = await CRUD().get(link: AppLink.login, payload: { + "email": email.text, + "password": password.text, + }); + if (res != 'failure') { + var d = jsonDecode(res); + if (d['message'] == "Login successful") { + box.write(BoxName.email, email.text); + + Get.off(() => Main()); + } + } + } + } + } +} diff --git a/lib/controller/mainController/main_controller.dart b/lib/controller/mainController/main_controller.dart new file mode 100644 index 0000000..5c109c3 --- /dev/null +++ b/lib/controller/mainController/main_controller.dart @@ -0,0 +1,268 @@ +import 'dart:convert'; +import 'dart:io'; + +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:service/constant/colors.dart'; +import 'package:service/constant/links.dart'; +import 'package:service/controller/functions/crud.dart'; +import 'package:service/controller/mainController/pages/driver_page.dart'; +import 'package:service/views/widgets/my_dialog.dart'; +import 'package:url_launcher/url_launcher.dart'; + +import '../../print.dart'; +import 'pages/passengers_page.dart'; + +class MainController extends GetxController { + final formKey = GlobalKey(); + bool isLoading = false; + final passengerPhoneController = TextEditingController(); + final driverPhoneController = TextEditingController(); + final notesController = TextEditingController(); + final carplateController = TextEditingController(); + Map passengerData = {}; + Map driverData = {}; + List filteredDrivers = []; + + searchPassengerByPhone() async { + if (formKey.currentState!.validate()) { + await getPassengersByPhone(); + Get.back(); + Get.to(() => PassengersPage()); + } + } + + void searchDrivers(String query) { + if (query.isEmpty) { + filteredDrivers = driverNotCompleteRegistration; + update(); + } else { + filteredDrivers = driverNotCompleteRegistration + .where((driver) => driver['phone_number'] + .toString() + .toLowerCase() + .contains(query.toLowerCase())) + .toList(); + update(); + } + } + + Future makePhoneCall(String phoneNumber) async { + final Uri launchUri = Uri( + scheme: 'tel', + path: phoneNumber, + ); + await launchUrl(launchUri); + } + + void launchCommunication( + String method, String contactInfo, String message) async { + String url; + + if (Platform.isIOS) { + switch (method) { + case 'phone': + url = 'tel:$contactInfo'; + break; + case 'sms': + url = 'sms:$contactInfo?body=${Uri.encodeComponent(message)}'; + break; + case 'whatsapp': + url = + 'https://api.whatsapp.com/send?phone=$contactInfo&text=${Uri.encodeComponent(message)}'; + break; + case 'email': + url = + 'mailto:$contactInfo?subject=Subject&body=${Uri.encodeComponent(message)}'; + break; + default: + return; + } + } else if (Platform.isAndroid) { + switch (method) { + case 'phone': + url = 'tel:$contactInfo'; + break; + case 'sms': + url = 'sms:$contactInfo?body=${Uri.encodeComponent(message)}'; + break; + case 'whatsapp': + // Check if WhatsApp is installed + final bool whatsappInstalled = + await canLaunchUrl(Uri.parse('whatsapp://')); + if (whatsappInstalled) { + url = + 'whatsapp://send?phone=$contactInfo&text=${Uri.encodeComponent(message)}'; + } else { + // Provide an alternative action, such as opening the WhatsApp Web API + url = + 'https://api.whatsapp.com/send?phone=$contactInfo&text=${Uri.encodeComponent(message)}'; + } + break; + case 'email': + url = + 'mailto:$contactInfo?subject=Subject&body=${Uri.encodeComponent(message)}'; + break; + default: + return; + } + } else { + return; + } + + if (await canLaunchUrl(Uri.parse(url))) { + await launchUrl(Uri.parse(url)); + } else {} + } + + List driverNotCompleteRegistration = []; + getDriverNotCompleteRegistration() async { + var res = await CRUD() + .get(link: AppLink.getDriverNotCompleteRegistration, payload: {}); + if (res != 'failure') { + var d = jsonDecode(res)['message']; + driverNotCompleteRegistration = d; + filteredDrivers = driverNotCompleteRegistration; + update(); + } else { + Get.snackbar(res, ''); + } + } + + List newDriverRegister = []; + getNewDriverRegister() async { + var res = await CRUD().get(link: AppLink.getNewDriverRegister, payload: {}); + if (res != 'failure') { + var d = jsonDecode(res)['message']; + newDriverRegister = d; + update(); + } else { + Get.snackbar(res, ''); + } + } + + addWelcomeCall(String driveId) async { + var res = await CRUD().post(link: AppLink.addWelcomeDriverNote, payload: { + "driverId": driveId, + "notes": notesController.text, + }); + if (res != 'failue') { + Get.snackbar('Success'.tr, '', backgroundColor: AppColor.greenColor); + } + } + + String selectedStatus = "I'm not ready yet".tr; + List passengerNotCompleteRegistration = []; + getPassengerNotCompleteRegistration() async { + var res = await CRUD() + .get(link: AppLink.getPassengersNotCompleteRegistration, payload: {}); + if (res != 'failure') { + var d = jsonDecode(res)['message']; + passengerNotCompleteRegistration = d; + update(); + } else { + Get.snackbar(res, ''); + } + } + + void setSelectedStatus(String status) { + selectedStatus = status; + update(); + } + + final List statusOptions = [ + "I'm not ready yet".tr, + "I don't have a suitable vehicle".tr, + "I'll register when the app is fully launched".tr, + "I need more help understanding the app".tr, + "My documents have expired".tr, + ]; + + List carPlateNotEdit = []; + + getCarPlateNotEdit() async { + var res = await CRUD().get(link: AppLink.getCarPlateNotEdit, payload: {}); + if (res != 'failure') { + var d = jsonDecode(res)['message']; + carPlateNotEdit = d; + update(); + } else { + MyDialog().getDialog('No Car found yet'.tr, 'thanks'.tr, const SizedBox(), + () { + Get.back(); + }); + } + } + + editCarPlateNotEdit(String driverId, carPlate) async { + var res = await CRUD().post(link: AppLink.editCarPlate, payload: { + "driverId": driverId, + "carPlate": carPlate, + }); + if (res != 'failure') { + Get.snackbar(res, '', backgroundColor: AppColor.greenColor); + carplateController.clear(); + await getCarPlateNotEdit(); + update(); + } else { + Get.snackbar(res, '', backgroundColor: AppColor.redColor); + } + } + + saveNoteForDriverNotCompleteRegistration(String phone, editor, note) async { + var res = await CRUD().post( + link: AppLink.addNotesDriver, + payload: {"phone": phone, "editor": editor, "note": note}); + if (res != 'failure') { + Get.snackbar(res, '', backgroundColor: AppColor.greenColor); + notesController.clear(); + } else { + Get.snackbar(res, '', backgroundColor: AppColor.redColor); + } + } + + saveNoteForPassengerNotCompleteRegistration( + String phone, editor, note) async { + var res = await CRUD().post( + link: AppLink.addNotesPassenger, + payload: {"phone": phone, "editor": editor, "note": note}); + if (res != 'failure') { + Get.snackbar(res, '', backgroundColor: AppColor.greenColor); + notesController.clear(); + } else { + Get.snackbar(res, '', backgroundColor: AppColor.redColor); + } + } + + searchDriverByPhone() async { + if (formKey.currentState!.validate()) { + await getDriverByPhone(); + Get.back(); + Get.to(() => DriverPage()); + } + } + + getPassengersByPhone() async { + var res = await CRUD().get( + link: AppLink.getPassengersByPhone, + payload: {"phone": '+2${passengerPhoneController.text}'}); + + if (res != 'failure') { + var d = jsonDecode(res); + passengerData = d; + update(); + } + } + + getDriverByPhone() async { + var res = await CRUD().get( + link: AppLink.getDriverByPhone, + payload: {"phone": '+2${driverPhoneController.text}'}); + + if (res != 'failure') { + var d = jsonDecode(res); + driverData = d; + update(); + } + } +} diff --git a/lib/controller/mainController/pages/complaint.dart b/lib/controller/mainController/pages/complaint.dart new file mode 100644 index 0000000..c50f375 --- /dev/null +++ b/lib/controller/mainController/pages/complaint.dart @@ -0,0 +1,12 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:service/views/widgets/my_scafold.dart'; + +class Complaint extends StatelessWidget { + const Complaint({super.key}); + + @override + Widget build(BuildContext context) { + return MyScaffold(title: "View complaint".tr, isleading: true, body: []); + } +} diff --git a/lib/controller/mainController/pages/driver_page.dart b/lib/controller/mainController/pages/driver_page.dart new file mode 100644 index 0000000..55acdbc --- /dev/null +++ b/lib/controller/mainController/pages/driver_page.dart @@ -0,0 +1,127 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:service/views/widgets/my_scafold.dart'; + +import '../main_controller.dart'; + +class DriverPage extends StatelessWidget { + DriverPage({super.key}); + MainController mainController = MainController(); + @override + Widget build(BuildContext context) { + return Scaffold( + body: GetBuilder(builder: (mainController) { + Map data = mainController.driverData['message'][0]; + return CupertinoPageScaffold( + navigationBar: CupertinoNavigationBar( + middle: Text('${data['first_name']} ${data['last_name']}'), + ), + child: SafeArea( + child: CupertinoScrollbar( + child: ListView( + children: [ + _buildDriverInfoSection( + mainController.driverData['message'][0]), + _buildStatisticsSection( + mainController.driverData['message'][0]), + _buildCarInfoSection(mainController.driverData['message'][0]), + _buildLicenseInfoSection( + mainController.driverData['message'][0]), + _buildBankInfoSection( + mainController.driverData['message'][0]), + // buildCarInfo(mainController.driverData['message'][0]), + ], + ), + ), + ), + ); + }), + ); + } + + Widget _buildDriverInfoSection(Map data) { + return CupertinoListSection.insetGrouped( + header: Text('Driver Information'.tr), + children: [ + _buildInfoRow('Name'.tr, data['name_arabic']), + _buildInfoRow('Name (English)'.tr, data['name_english']), + _buildInfoRow('Phone'.tr, data['phone']), + _buildInfoRow('Email'.tr, data['email']), + _buildInfoRow('Gender'.tr, data['gender']), + _buildInfoRow('Birthdate'.tr, data['birthdate']), + _buildInfoRow('National Number'.tr, data['national_number']), + _buildInfoRow('Religion'.tr, data['religion']), + _buildInfoRow('Occupation'.tr, data['occupation']), + _buildInfoRow('Education'.tr, data['education']), + ], + ); + } + + Widget _buildStatisticsSection(Map data) { + return CupertinoListSection.insetGrouped( + header: Text('Driver Statistics'.tr), + children: [ + _buildInfoRow('Total Rides'.tr, data['countRide'].toString()), + _buildInfoRow('Average Rating'.tr, data['rating'].toString()), + _buildInfoRow('Total Payments'.tr, '\$${data['totalPayment']}'), + _buildInfoRow('Wallet Balance'.tr, '\$${data['totalDriverWallet']}'), + _buildInfoRow('Complaints'.tr, data['countComplaint'].toString()), + _buildInfoRow('Scam Reports'.tr, data['countScam'].toString()), + _buildInfoRow( + 'Passengers Rated'.tr, data['DRatingPassengersCount'].toString()), + _buildInfoRow( + 'Avg Passenger Rating'.tr, data['avgDRatingPassenger'].toString()), + ], + ); + } + + Widget _buildCarInfoSection(Map data) { + return CupertinoListSection.insetGrouped( + header: Text('Vehicle Information'.tr), + children: [ + _buildInfoRow('VIN'.tr, data['vin']), + _buildInfoRow('Plate Number'.tr, data['car_plate']), + _buildInfoRow('Make'.tr, data['make']), + _buildInfoRow('Model'.tr, data['model']), + _buildInfoRow('Year'.tr, data['year']), + _buildInfoRow('Color'.tr, data['color']), + _buildInfoRow('Fuel Type'.tr, data['fuel']), + _buildInfoRow('Displacement'.tr, data['displacement']), + _buildInfoRow('Registration Date'.tr, data['registration_date']), + _buildInfoRow('Expiration Date'.tr, data['expiration_date']), + ], + ); + } + + Widget _buildLicenseInfoSection(Map data) { + return CupertinoListSection.insetGrouped( + header: Text('License Information'.tr), + children: [ + _buildInfoRow('License Type'.tr, data['license_type']), + _buildInfoRow('Card ID'.tr, data['card_id']), + _buildInfoRow('Issue Date'.tr, data['issue_date']), + _buildInfoRow('Expiry Date'.tr, data['expiry_date']), + _buildInfoRow('Categories'.tr, data['license_categories']), + ], + ); + } + + Widget _buildBankInfoSection(Map data) { + return CupertinoListSection.insetGrouped( + header: Text('Bank Information'.tr), + children: [ + _buildInfoRow('Account Number'.tr, data['accountBank']), + _buildInfoRow('Bank Code'.tr, data['bankCode']), + ], + ); + } + + Widget _buildInfoRow(String label, String value) { + return CupertinoListTile( + title: Text(label), + trailing: Text(value, + style: const TextStyle(color: CupertinoColors.systemGrey)), + ); + } +} diff --git a/lib/controller/mainController/pages/drivers_cant_register.dart b/lib/controller/mainController/pages/drivers_cant_register.dart new file mode 100644 index 0000000..aacb28d --- /dev/null +++ b/lib/controller/mainController/pages/drivers_cant_register.dart @@ -0,0 +1,218 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:service/constant/colors.dart'; +import 'package:service/controller/mainController/main_controller.dart'; +import 'package:service/views/widgets/my_scafold.dart'; + +import 'registration_captain_page.dart'; + +class DriversCantRegister extends StatelessWidget { + DriversCantRegister({super.key}); + + @override + Widget build(BuildContext context) { + Get.put(MainController()); + return MyScaffold( + title: 'Drivers Cant Register'.tr, + isleading: true, + body: [ + GetBuilder(builder: (mainController) { + return Column( + children: [ + Padding( + padding: const EdgeInsets.all(8.0), + child: CupertinoSearchTextField( + keyboardType: TextInputType.phone, + onChanged: (value) => mainController.searchDrivers(value), + placeholder: 'Search by phone number'.tr, + ), + ), + Expanded( + child: ListView.builder( + itemCount: mainController.filteredDrivers.length, + itemBuilder: (context, index) { + final driver = mainController.filteredDrivers[index]; + return Padding( + padding: const EdgeInsets.all(8.0), + child: Container( + color: driver['note'] == null + ? AppColor.greenColor + : AppColor.greyColor, + child: CupertinoFormSection( + header: Text( + 'Driver ID: ${driver['driverId']}', + ), + children: [ + InkWell( + onTap: () => mainController + .makePhoneCall(driver['phone_number']), + child: Container( + height: 40, + color: driver['note'] != null + ? AppColor.greenColor + : AppColor.greyColor, + child: Row( + mainAxisAlignment: + MainAxisAlignment.spaceAround, + children: [ + Text(driver['phone_number']), + IconButton( + onPressed: () { + String message = "مرحباً،\n\n" + "نلاحظ أنك لم تكمل عملية التسجيل في خدمة سفر درايفر. نود تذكيرك بأن إكمال التسجيل يتيح لك فرصة الانضمام إلى فريق سفر والاستفادة من خدماتنا المتنوعة.\n\n" + "إذا كنت بحاجة إلى أي مساعدة أو لديك أي استفسارات، لا تتردد في الاتصال بنا. نحن هنا لمساعدتك.\n\n" + "للاتصال بنا، يرجى الاتصال على الرقم التالي: +20 101 880 5430\n\n" + "مع تحيات فريق سفر."; + + mainController.launchCommunication( + 'whatsapp', + '${driver['phone_number']}', + message); + }, + icon: const Icon( + Icons.send_time_extension_sharp, + color: AppColor.secondaryColor, + ), + ), + IconButton( + onPressed: () { + Get.to(() => RegisterCaptain(), + arguments: { + "phone_number": + driver['phone_number'] + .toString(), + 'driverId': driver['driverId'] + .toString(), + 'email': + driver['email'].toString(), + }); + }, + icon: const Icon( + Icons.save, + color: AppColor.gold, + ), + ), + ], + ) + // CupertinoFormRow( + // prefix: Text('Phone Number'.tr), + // child: CupertinoTextFormFieldRow( + // initialValue: driver['phone_number'], + // readOnly: true, + // placeholder: 'Phone Number'.tr, + // ), + // ), + ), + ), + CupertinoFormRow( + prefix: Text('Created At'.tr), + child: CupertinoTextFormFieldRow( + initialValue: driver['created_at'], + readOnly: true, + placeholder: 'Created At', + ), + ), + CupertinoFormRow( + prefix: Text('Status'.tr), + child: GestureDetector( + onTap: () { + showCupertinoModalPopup( + context: Get.context!, + builder: (BuildContext context) => + Container( + height: 216, + padding: const EdgeInsets.only(top: 6.0), + margin: EdgeInsets.only( + bottom: MediaQuery.of(context) + .viewInsets + .bottom, + ), + color: CupertinoColors.systemBackground + .resolveFrom(context), + child: SafeArea( + top: false, + child: CupertinoPicker( + magnification: 1.22, + squeeze: 1.2, + useMagnifier: true, + itemExtent: 32.0, + scrollController: + FixedExtentScrollController( + initialItem: mainController + .selectedStatus + .indexOf(mainController + .selectedStatus), + ), + onSelectedItemChanged: + (int selectedItem) { + mainController.setSelectedStatus( + mainController + .statusOptions[selectedItem] + .tr); + }, + children: List.generate( + mainController.statusOptions + .length, (int index) { + return Center( + child: Text(mainController + .statusOptions[index].tr), + ); + }), + ), + ), + ), + ); + }, + child: CupertinoFormRow( + child: Text( + mainController.selectedStatus.tr, + style: TextStyle( + color: CupertinoColors.label + .resolveFrom(Get.context!)), + ), + ), + ), + ), + CupertinoFormRow( + prefix: Text('Notes'.tr), + child: CupertinoTextFormFieldRow( + cursorColor: AppColor.blueColor, + controller: mainController.notesController, + placeholder: + driver['note'] ?? "Additional comments".tr, + ), + ), + CupertinoButton( + child: Text('Save Notes'.tr), + onPressed: () { + // Save the notes for the driver + String notes = + mainController.notesController.text == '' + ? mainController.selectedStatus + .toString() + : mainController.notesController.text; + + mainController + .saveNoteForDriverNotCompleteRegistration( + driver['phone_number'], + 'girls name', + notes); + print( + 'Notes for driver ${driver['id']}: $notes'); + }, + ), + ], + ), + ), + ); + }, + ), + ), + ], + ); + }), + ], + ); + } +} diff --git a/lib/controller/mainController/pages/edit_car_plate.dart b/lib/controller/mainController/pages/edit_car_plate.dart new file mode 100644 index 0000000..3e50af1 --- /dev/null +++ b/lib/controller/mainController/pages/edit_car_plate.dart @@ -0,0 +1,83 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:service/constant/colors.dart'; +import 'package:service/constant/style.dart'; +import 'package:service/views/widgets/my_scafold.dart'; +import 'package:service/views/widgets/my_textField.dart'; + +import '../main_controller.dart'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +class EditCarPlate extends StatelessWidget { + const EditCarPlate({super.key}); + + @override + Widget build(BuildContext context) { + Get.put(MainController()); + + return GetBuilder(builder: (mainController) { + return MyScaffold( + title: 'Edit car plate'.tr, + isleading: true, + body: [ + Expanded( + child: ListView.builder( + padding: const EdgeInsets.all(16.0), + itemCount: mainController + .carPlateNotEdit.length, // 10 fields + 1 save button + itemBuilder: (context, index) { + var carData = mainController.carPlateNotEdit[index]; + return Padding( + padding: const EdgeInsets.all(8.0), + child: Container( + decoration: AppStyle.boxDecoration1, + child: Column( + children: [ + Image.network( + 'https://api.sefer.live/sefer/card_image/car_front-${carData['driverID']}.jpg', + height: 200, + width: double.maxFinite, + fit: BoxFit.fill, + ), + const SizedBox( + height: 9, + ), + Form( + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + IconButton( + onPressed: () async { + await mainController.editCarPlateNotEdit( + carData['driverID'].toString(), + mainController.carplateController.text, + ); + }, + icon: const Icon( + Icons.upload_outlined, + color: AppColor.blueColor, + ), + ), + SizedBox( + width: Get.width * .6, + child: MyTextForm( + controller: + mainController.carplateController, + label: 'car plate'.tr, + hint: 'car plate'.tr, + type: TextInputType.name, + ), + ), + ], + )) + ], + )), + ); + }), + ), + ], + ); + }); + } +} diff --git a/lib/controller/mainController/pages/passengers_cant_regster.dart b/lib/controller/mainController/pages/passengers_cant_regster.dart new file mode 100644 index 0000000..1b042ec --- /dev/null +++ b/lib/controller/mainController/pages/passengers_cant_regster.dart @@ -0,0 +1,77 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:service/controller/mainController/main_controller.dart'; +import 'package:service/views/widgets/my_scafold.dart'; + +class PassengersCantRegister extends StatelessWidget { + PassengersCantRegister({super.key}); + + @override + Widget build(BuildContext context) { + Get.put(MainController()); + return MyScaffold( + title: 'Passengers Cant Register'.tr, + isleading: true, + body: [ + GetBuilder(builder: (mainController) { + return ListView.builder( + itemCount: mainController.passengerNotCompleteRegistration.length, + itemBuilder: (context, index) { + final passenger = + mainController.passengerNotCompleteRegistration[index]; + return Padding( + padding: const EdgeInsets.all(8.0), + child: CupertinoFormSection( + header: Text('Passenger ID: ${passenger['id']}'), + children: [ + InkWell( + onTap: () => mainController + .makePhoneCall(passenger['phone_number']), + child: CupertinoFormRow( + prefix: Text('Phone Number'.tr), + child: CupertinoTextFormFieldRow( + initialValue: passenger['phone_number'], + readOnly: true, + placeholder: 'Phone Number'.tr, + ), + ), + ), + CupertinoFormRow( + prefix: Text('Created At'.tr), + child: CupertinoTextFormFieldRow( + initialValue: passenger['created_at'], + readOnly: true, + placeholder: 'Created At', + ), + ), + CupertinoFormRow( + prefix: Text('Notes'.tr), + child: CupertinoTextFormFieldRow( + controller: mainController.notesController, + placeholder: + passenger['note'] ?? 'Enter notes after call'.tr, + ), + ), + CupertinoButton( + child: Text('Save Notes'.tr), + onPressed: () { + // Save the notes for the Passenger + String notes = mainController.notesController.text; + + mainController + .saveNoteForPassengerNotCompleteRegistration( + passenger['phone_number'], 'girls name', notes); + print('Notes for Passenger ${passenger['id']}: $notes'); + }, + ), + ], + ), + ); + }, + ); + }), + ], + ); + } +} diff --git a/lib/controller/mainController/pages/passengers_page.dart b/lib/controller/mainController/pages/passengers_page.dart new file mode 100644 index 0000000..036db8c --- /dev/null +++ b/lib/controller/mainController/pages/passengers_page.dart @@ -0,0 +1,133 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:service/controller/mainController/main_controller.dart'; +import 'package:service/views/widgets/my_scafold.dart'; + +class PassengersPage extends StatelessWidget { + PassengersPage({super.key}); + final MainController mainController = MainController(); + + @override + Widget build(BuildContext context) { + return GetBuilder(builder: (mainController) { + Map data = mainController.passengerData['message'][0]; + return MyScaffold( + title: (data['first_name']?.toString() ?? '') + + ' ' + + (data['last_name']?.toString() ?? ''), + isleading: true, + body: [ + ListView( + children: [ + _buildPersonalInfoCard(data), + _buildLatestRideCard(data), + _buildWalletInfoCard(data), + ], + ), + ], + ); + }); + } + + Widget _buildPersonalInfoCard(Map data) { + return Card( + margin: const EdgeInsets.all(16), + child: Padding( + padding: const EdgeInsets.all(16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text('Personal Information'.tr, + style: + const TextStyle(fontSize: 18, fontWeight: FontWeight.bold)), + const SizedBox(height: 16), + _buildInfoRow('Phone'.tr, data['phone']?.toString() ?? 'N/A'), + _buildInfoRow('Email'.tr, data['email']?.toString() ?? 'N/A'), + _buildInfoRow('Gender'.tr, data['gender']?.toString() ?? 'N/A'), + _buildInfoRow( + 'Birthdate'.tr, data['birthdate']?.toString() ?? 'N/A'), + _buildInfoRow( + 'Education'.tr, data['education']?.toString() ?? 'N/A'), + _buildInfoRow( + 'Employment'.tr, data['employmentType']?.toString() ?? 'N/A'), + _buildInfoRow('Marital Status'.tr, + data['maritalStatus']?.toString() ?? 'N/A'), + ], + ), + ), + ); + } + + Widget _buildLatestRideCard(Map data) { + return Card( + margin: const EdgeInsets.all(16), + child: Padding( + padding: const EdgeInsets.all(16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text('Latest Ride'.tr, + style: + const TextStyle(fontSize: 18, fontWeight: FontWeight.bold)), + const SizedBox(height: 16), + _buildInfoRow('Ride ID'.tr, data['ride_id']?.toString() ?? 'N/A'), + _buildInfoRow('Date'.tr, data['ride_date']?.toString() ?? 'N/A'), + _buildInfoRow( + 'Start Time'.tr, data['ride_time']?.toString() ?? 'N/A'), + _buildInfoRow( + 'End Time'.tr, data['ride_endtime']?.toString() ?? 'N/A'), + _buildInfoRow( + 'Price'.tr, '\$${data['price']?.toString() ?? 'N/A'}'), + _buildInfoRow( + 'Status'.tr, data['ride_status']?.toString() ?? 'N/A'), + _buildInfoRow('Payment Method'.tr, + data['ride_payment_method']?.toString() ?? 'N/A'), + _buildInfoRow('Car Type'.tr, data['car_type']?.toString() ?? 'N/A'), + _buildInfoRow( + 'Distance'.tr, + data['distance'] != null + ? '${data['distance'].toStringAsFixed(2)} km' + : 'N/A'), + ], + ), + ), + ); + } + + Widget _buildWalletInfoCard(Map data) { + return Card( + margin: const EdgeInsets.all(16), + child: Padding( + padding: const EdgeInsets.all(16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text('Wallet Information'.tr, + style: + const TextStyle(fontSize: 18, fontWeight: FontWeight.bold)), + const SizedBox(height: 16), + _buildInfoRow('Wallet Balance'.tr, + '\$${data['passenger_wallet_balance']?.toString() ?? 'N/A'}'), + _buildInfoRow('Last Payment Amount'.tr, + '\$${data['passenger_payment_amount']?.toString() ?? 'N/A'}'), + _buildInfoRow('Last Payment Method'.tr, + data['passenger_payment_method']?.toString() ?? 'N/A'), + ], + ), + ), + ); + } + + Widget _buildInfoRow(String label, String value) { + return Padding( + padding: const EdgeInsets.symmetric(vertical: 4), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text(label, style: const TextStyle(fontWeight: FontWeight.bold)), + Text(value), + ], + ), + ); + } +} diff --git a/lib/controller/mainController/pages/registration_captain_page.dart b/lib/controller/mainController/pages/registration_captain_page.dart new file mode 100644 index 0000000..16452ca --- /dev/null +++ b/lib/controller/mainController/pages/registration_captain_page.dart @@ -0,0 +1,2096 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:service/views/widgets/my_scafold.dart'; +import '../../../../constant/colors.dart'; +import '../../../../constant/links.dart'; +import '../../../../constant/style.dart'; +import '../../../views/widgets/elevated_btn.dart'; +import '../../../views/widgets/mycircular.dart'; +import '../registration_captain_controller.dart'; + +class RegisterCaptain extends StatelessWidget { + RegisterCaptain({super.key}); + + @override + Widget build(BuildContext context) { + final controller = Get.put(RegisterCaptainController()); + // String text = ''; + controller.driveInit(); + // final inspectionDate = + // controller.responseIdCardDriverEgyptBack['inspection_date'].toString(); + // final year = int.parse(inspectionDate.split('-')[0]); + // final inspectionDateTime = DateTime(year, 12, 31); + + return MyScaffold( + title: 'Documents check'.tr, + action: GetBuilder(builder: (controller) { + return IconButton( + onPressed: () { + controller.isLoading = false; + controller.update(); + }, + icon: const Icon(Icons.refresh), + ); + }), + body: [ + GetBuilder(builder: (controller) { + return controller.isLoading + ? const MyCircularProgressIndicator() + : Padding( + padding: const EdgeInsets.all(8.0), + child: Column( + children: [ + TextButton( + onPressed: () { + Get.to(MyScaffold( + title: 'title', + isleading: true, + body: [ + Column( + children: [ + SizedBox( + height: Get.height * .8, + child: Form( + child: ListView( + children: [ + TextFormField( + initialValue: + controller.responseIdEgyptDriverLicense != + null + ? controller + .responseIdEgyptDriverLicense[ + 'firstName'] + ?.toString() + : controller + .firstName.value, + decoration: + const InputDecoration( + labelText: + 'First Name'), + onChanged: (value) => controller + .firstName.value = value, + ), + TextFormField( + initialValue: + controller.responseIdEgyptDriverLicense != + null + ? controller + .responseIdEgyptDriverLicense[ + 'lastName'] + ?.toString() + : controller + .lastName.value, + decoration: + const InputDecoration( + labelText: 'Last Name'), + onChanged: (value) => controller + .lastName.value = value, + ), + TextFormField( + initialValue: + controller.responseIdEgyptBack != + null + ? controller + .responseIdEgyptBack[ + 'gender'] + ?.toString() + : controller + .gender.value, + decoration: + const InputDecoration( + labelText: 'Gender'), + onChanged: (value) => controller + .gender.value = value, + ), + TextFormField( + initialValue: + controller.responseIdEgyptDriverLicense != + null + ? controller + .responseIdEgyptDriverLicense[ + 'license_type'] + ?.toString() + : controller + .licenseType.value, + decoration: + const InputDecoration( + labelText: + 'License Type'), + onChanged: (value) => controller + .licenseType.value = value, + ), + TextFormField( + initialValue: + controller.responseIdEgyptDriverLicense != + null + ? controller + .responseIdEgyptDriverLicense[ + 'national_number'] + ?.toString() + : controller + .nationalNumber + .value, + decoration: + const InputDecoration( + labelText: + 'National Number'), + onChanged: (value) => controller + .nationalNumber + .value = value, + ), + TextFormField( + initialValue: + controller.responseIdEgyptDriverLicense != + null + ? controller + .responseIdEgyptDriverLicense[ + 'name_arabic'] + ?.toString() + : controller + .nameArabic.value, + decoration: + const InputDecoration( + labelText: + 'Name in Arabic'), + onChanged: (value) => controller + .nameArabic.value = value, + ), + TextFormField( + initialValue: + controller.responseIdEgyptDriverLicense != + null + ? controller + .responseIdEgyptDriverLicense[ + 'name_english'] + ?.toString() + : controller + .nameEnglish.value, + decoration: + const InputDecoration( + labelText: + 'Name in English'), + onChanged: (value) => controller + .nameEnglish.value = value, + ), + TextFormField( + initialValue: + controller.responseIdEgyptDriverLicense != + null + ? controller + .responseIdEgyptDriverLicense[ + 'issue_date'] + ?.toString() + : controller + .issueDate.value, + decoration: + const InputDecoration( + labelText: + 'Issue Date'), + onChanged: (value) => controller + .issueDate.value = value, + ), + TextFormField( + initialValue: + controller.responseIdEgyptDriverLicense != + null + ? controller + .responseIdEgyptDriverLicense[ + 'expiry_date'] + ?.toString() + : controller + .expirationDate + .value, + decoration: + const InputDecoration( + labelText: + 'Expiry Date'), + onChanged: (value) => controller + .expiryDate.value = value, + ), + TextFormField( + initialValue: controller + .responseIdEgyptFront != + null + ? controller.responseIdEgyptDriverLicense[ + 'license_categories'] + is List + ? controller + .responseIdEgyptDriverLicense[ + 'license_categories'] + .join(', ') + : controller + .responseIdEgyptDriverLicense[ + 'license_categories'] + ?.toString() ?? + 'Not specified' + : controller + .licenseCategories + .value, + decoration: const InputDecoration( + labelText: + 'License Categories'), + onChanged: (value) => controller + .licenseCategories + .value = value, + ), + TextFormField( + initialValue: + controller.responseIdEgyptFront != + null + ? controller + .responseIdEgyptFront[ + 'address'] + ?.toString() + : controller.fuel.value, + decoration: + const InputDecoration( + labelText: 'Address'), + onChanged: (value) => controller + .address.value = value, + ), + TextFormField( + initialValue: + controller.responseIdEgyptFront != + null + ? controller + .responseIdEgyptFront[ + 'card_id'] + ?.toString() + : controller + .cardId.value, + decoration: + const InputDecoration( + labelText: 'Card ID'), + onChanged: (value) => controller + .cardId.value = value, + ), + TextFormField( + initialValue: + controller.responseIdEgyptBack != + null + ? controller + .responseIdEgyptBack[ + 'occupation'] + ?.toString() + : controller + .education.value, + decoration: + const InputDecoration( + labelText: + 'Occupation'), + onChanged: (value) => controller + .occupation.value = value, + ), + TextFormField( + initialValue: + controller.responseIdEgyptBack != + null + ? controller + .responseIdEgyptBack[ + 'occupation'] + ?.toString() + : controller + .occupation.value, + decoration: + const InputDecoration( + labelText: 'Education'), + onChanged: (value) => controller + .education.value = value, + ), + TextFormField( + initialValue: + controller.responseIdEgyptBack != + null + ? controller + .responseIdEgyptBack[ + 'issue_date'] + ?.toString() + : controller + .issueDate.value, + decoration: const InputDecoration( + labelText: + 'License Issue Date'), + onChanged: (value) => controller + .licenseIssueDate + .value = value, + ), + TextFormField( + initialValue: + controller.responseIdEgyptBack != + null + ? controller + .responseIdEgyptBack[ + 'religion'] + ?.toString() + : controller + .religion.value, + decoration: + const InputDecoration( + labelText: 'Religion'), + onChanged: (value) => controller + .religion.value = value, + ), + TextFormField( + initialValue: + controller.responseIdEgyptBack != + null + ? controller + .responseIdEgyptBack[ + 'maritalStatus'] + ?.toString() + : controller + .maritalStatus + .value, + decoration: + const InputDecoration( + labelText: + 'Marital Status'), + onChanged: (value) => controller + .maritalStatus + .value = value, + ), + TextFormField( + initialValue: + controller.responseIdEgyptDriverLicense != + null + ? controller + .responseIdEgyptDriverLicense[ + 'address'] + ?.toString() + : controller + .address.value, + decoration: + const InputDecoration( + labelText: 'Site'), + onChanged: (value) => controller + .site.value = value, + ), + TextFormField( + initialValue: + controller.responseIdEgyptDriverLicense != + null + ? controller + .responseIdEgyptDriverLicense[ + 'employmentType'] + ?.toString() + : controller + .employmentType + .value, + decoration: + const InputDecoration( + labelText: + 'Employment Type'), + onChanged: (value) => controller + .employmentType + .value = value, + ), + const Divider( + thickness: 5, + height: 5, + ), + Text('Car Details'.tr), + const Divider( + thickness: 5, + height: 5, + ), + TextFormField( + initialValue: controller + .vin.value.isEmpty + ? controller + .responseIdCardDriverEgyptBack[ + 'chassis'] + ?.toString() ?? + '' + : controller.vin.value, + decoration: + const InputDecoration( + labelText: 'VIN'), + onChanged: (value) => controller + .vin.value = value, + ), + TextFormField( + initialValue: controller + .vin.value.isEmpty + ? controller + .responseIdCardDriverEgyptBack[ + 'car_plate'] + ?.toString() ?? + '' + : controller.vin.value, + decoration: + const InputDecoration( + labelText: 'car_plate'), + onChanged: (value) => controller + .vin.value = value, + ), + TextFormField( + initialValue: controller + .make.value.isEmpty + ? controller + .responseIdCardDriverEgyptBack[ + 'make'] + ?.toString() ?? + '' + : controller.make.value, + decoration: + const InputDecoration( + labelText: 'Make'), + onChanged: (value) => controller + .make.value = value, + ), + TextFormField( + initialValue: controller + .model.value.isEmpty + ? controller + .responseIdCardDriverEgyptBack[ + 'model'] + ?.toString() ?? + '' + : controller.model.value, + decoration: + const InputDecoration( + labelText: 'Model'), + onChanged: (value) => controller + .model.value = value, + ), + TextFormField( + initialValue: controller + .year.value.isEmpty + ? controller + .responseIdCardDriverEgyptBack[ + 'year'] + ?.toString() ?? + '' + : controller.year.value, + decoration: + const InputDecoration( + labelText: 'Year'), + onChanged: (value) => controller + .year.value = value, + ), + TextFormField( + initialValue: controller + .displacement + .value + .isEmpty + ? controller + .responseIdCardDriverEgyptBack[ + 'engine'] + ?.toString() ?? + '' + : controller + .displacement.value, + decoration: + const InputDecoration( + labelText: + 'Displacement'), + onChanged: (value) => controller + .displacement.value = value, + ), + TextFormField( + initialValue: controller + .fuel.value.isEmpty + ? controller + .responseIdCardDriverEgyptBack[ + 'fuel'] + ?.toString() ?? + '' + : controller.fuel.value, + decoration: + const InputDecoration( + labelText: 'Fuel'), + onChanged: (value) => controller + .fuel.value = value, + ), + DropdownButtonFormField( + decoration: InputDecoration( + labelText: 'Color' + .tr, // Localized label + ), + value: controller + .color.value.isEmpty + ? null + : controller.color.value, + items: [ + {'red'.tr: '#FF0000'}, + {'green'.tr: '#008000'}, + {'blue'.tr: '#0000FF'}, + {'black'.tr: '#000000'}, + {'white'.tr: '#FFFFFF'}, + {'yellow'.tr: '#FFFF00'}, + {'purple'.tr: '#800080'}, + {'orange'.tr: '#FFA500'}, + {'pink'.tr: '#FFC0CB'}, + {'brown'.tr: '#A52A2A'}, + {'gray'.tr: '#808080'}, + {'cyan'.tr: '#00FFFF'}, + {'magenta'.tr: '#FF00FF'}, + {'lime'.tr: '#00FF00'}, + {'indigo'.tr: '#4B0082'}, + {'violet'.tr: '#EE82EE'}, + {'gold'.tr: '#FFD700'}, + {'silver'.tr: '#C0C0C0'}, + {'teal'.tr: '#008080'}, + {'navy'.tr: '#000080'}, + ].map((colorMap) { + String colorName = + colorMap.keys.first; + String colorValue = + colorMap.values.first; + return DropdownMenuItem< + String>( + value: colorValue, + child: Text(colorName), + ); + }).toList(), + onChanged: (value) { + controller.color.value = + value ?? ''; + controller.colorHex.value = + value ?? ''; + }, + ), + TextFormField( + initialValue: controller + .owner.value.isNotEmpty + ? controller + .responseIdCardDriverEgyptFront[ + 'owner'] + ?.toString() + : controller.owner.value, + decoration: + const InputDecoration( + labelText: 'Owner'), + onChanged: (value) => controller + .owner.value = value, + ), + TextFormField( + initialValue: controller + .owner.value.isNotEmpty + ? controller + .responseIdCardDriverEgyptFront[ + 'expiration_date'] + ?.toString() + : controller.owner.value, + decoration: + const InputDecoration( + labelText: + 'expiration_date'), + onChanged: (value) => controller + .owner.value = value, + ), + TextFormField( + initialValue: controller + .addressCar.isNotEmpty + ? controller + .responseIdCardDriverEgyptFront[ + 'address'] + ?.toString() + : controller + .addressCar.value, + decoration: + const InputDecoration( + labelText: 'Address'), + onChanged: (value) => controller + .addressCar.value = value, + ), + // TextFormField( + // initialValue: inspectionDateTime + // .toString(), + // decoration: + // const InputDecoration( + // labelText: + // 'Registration Date'), + // onChanged: (value) => controller + // .registrationDate + // .value = value, + // ), + const SizedBox(height: 20), + ], + ), + ), + ), + MyElevatedButton( + title: 'Upload'.tr, + onPressed: () async { + await controller + .addDriverEgyptHanding(); + await controller + .addRegistrationCarEgyptHandling(); + await controller + .getDriverNotCompleteRegistration(); + Get.back(); + }, + kolor: AppColor.greenColor, + ), + ], + ), + ])); + // Get.defaultDialog( + // barrierDismissible: false, + // title: 'Insert all fields'.tr, + // content: SizedBox( + // height: 400, + // width: 300, + // child: Form( + // child: ListView( + // children: [ + // TextFormField( + // initialValue: + // controller.responseIdEgyptDriverLicense != + // null + // ? controller + // .responseIdEgyptDriverLicense[ + // 'firstName'] + // ?.toString() + // : controller.firstName.value, + // decoration: const InputDecoration( + // labelText: 'First Name'), + // onChanged: (value) => controller + // .firstName.value = value, + // ), + // TextFormField( + // initialValue: + // controller.responseIdEgyptDriverLicense != + // null + // ? controller + // .responseIdEgyptDriverLicense[ + // 'lastName'] + // ?.toString() + // : controller.lastName.value, + // decoration: const InputDecoration( + // labelText: 'Last Name'), + // onChanged: (value) => + // controller.lastName.value = value, + // ), + // TextFormField( + // initialValue: controller + // .responseIdEgyptBack != + // null + // ? controller + // .responseIdEgyptBack['gender'] + // ?.toString() + // : controller.gender.value, + // decoration: const InputDecoration( + // labelText: 'Gender'), + // onChanged: (value) => + // controller.gender.value = value, + // ), + // TextFormField( + // initialValue: + // controller.responseIdEgyptDriverLicense != + // null + // ? controller + // .responseIdEgyptDriverLicense[ + // 'license_type'] + // ?.toString() + // : controller + // .licenseType.value, + // decoration: const InputDecoration( + // labelText: 'License Type'), + // onChanged: (value) => controller + // .licenseType.value = value, + // ), + // TextFormField( + // initialValue: + // controller.responseIdEgyptDriverLicense != + // null + // ? controller + // .responseIdEgyptDriverLicense[ + // 'national_number'] + // ?.toString() + // : controller + // .nationalNumber.value, + // decoration: const InputDecoration( + // labelText: 'National Number'), + // onChanged: (value) => controller + // .nationalNumber.value = value, + // ), + // TextFormField( + // initialValue: + // controller.responseIdEgyptDriverLicense != + // null + // ? controller + // .responseIdEgyptDriverLicense[ + // 'name_arabic'] + // ?.toString() + // : controller.nameArabic.value, + // decoration: const InputDecoration( + // labelText: 'Name in Arabic'), + // onChanged: (value) => controller + // .nameArabic.value = value, + // ), + // TextFormField( + // initialValue: + // controller.responseIdEgyptDriverLicense != + // null + // ? controller + // .responseIdEgyptDriverLicense[ + // 'name_english'] + // ?.toString() + // : controller + // .nameEnglish.value, + // decoration: const InputDecoration( + // labelText: 'Name in English'), + // onChanged: (value) => controller + // .nameEnglish.value = value, + // ), + // TextFormField( + // initialValue: + // controller.responseIdEgyptDriverLicense != + // null + // ? controller + // .responseIdEgyptDriverLicense[ + // 'issue_date'] + // ?.toString() + // : controller.issueDate.value, + // decoration: const InputDecoration( + // labelText: 'Issue Date'), + // onChanged: (value) => controller + // .issueDate.value = value, + // ), + // TextFormField( + // initialValue: + // controller.responseIdEgyptDriverLicense != + // null + // ? controller + // .responseIdEgyptDriverLicense[ + // 'expiry_date'] + // ?.toString() + // : controller + // .expirationDate.value, + // decoration: const InputDecoration( + // labelText: 'Expiry Date'), + // onChanged: (value) => controller + // .expiryDate.value = value, + // ), + // TextFormField( + // initialValue: controller + // .responseIdEgyptFront != + // null + // ? controller.responseIdEgyptDriverLicense[ + // 'license_categories'] + // is List + // ? controller + // .responseIdEgyptDriverLicense[ + // 'license_categories'] + // .join(', ') + // : controller + // .responseIdEgyptDriverLicense[ + // 'license_categories'] + // ?.toString() ?? + // 'Not specified' + // : controller + // .licenseCategories.value, + // decoration: const InputDecoration( + // labelText: 'License Categories'), + // onChanged: (value) => controller + // .licenseCategories.value = value, + // ), + // TextFormField( + // initialValue: controller + // .responseIdEgyptFront != + // null + // ? controller.responseIdEgyptFront[ + // 'address'] + // ?.toString() + // : controller.fuel.value, + // decoration: const InputDecoration( + // labelText: 'Address'), + // onChanged: (value) => + // controller.address.value = value, + // ), + // TextFormField( + // initialValue: controller + // .responseIdEgyptFront != + // null + // ? controller.responseIdEgyptFront[ + // 'card_id'] + // ?.toString() + // : controller.cardId.value, + // decoration: const InputDecoration( + // labelText: 'Card ID'), + // onChanged: (value) => + // controller.cardId.value = value, + // ), + // TextFormField( + // initialValue: controller + // .responseIdEgyptBack != + // null + // ? controller.responseIdEgyptBack[ + // 'occupation'] + // ?.toString() + // : controller.education.value, + // decoration: const InputDecoration( + // labelText: 'Occupation'), + // onChanged: (value) => controller + // .occupation.value = value, + // ), + // TextFormField( + // initialValue: controller + // .responseIdEgyptBack != + // null + // ? controller.responseIdEgyptBack[ + // 'occupation'] + // ?.toString() + // : controller.occupation.value, + // decoration: const InputDecoration( + // labelText: 'Education'), + // onChanged: (value) => controller + // .education.value = value, + // ), + // TextFormField( + // initialValue: controller + // .responseIdEgyptBack != + // null + // ? controller.responseIdEgyptBack[ + // 'issue_date'] + // ?.toString() + // : controller.issueDate.value, + // decoration: const InputDecoration( + // labelText: 'License Issue Date'), + // onChanged: (value) => controller + // .licenseIssueDate.value = value, + // ), + // TextFormField( + // initialValue: controller + // .responseIdEgyptBack != + // null + // ? controller.responseIdEgyptBack[ + // 'religion'] + // ?.toString() + // : controller.religion.value, + // decoration: const InputDecoration( + // labelText: 'Religion'), + // onChanged: (value) => + // controller.religion.value = value, + // ), + // TextFormField( + // initialValue: controller + // .responseIdEgyptBack != + // null + // ? controller.responseIdEgyptBack[ + // 'maritalStatus'] + // ?.toString() + // : controller.maritalStatus.value, + // decoration: const InputDecoration( + // labelText: 'Marital Status'), + // onChanged: (value) => controller + // .maritalStatus.value = value, + // ), + // TextFormField( + // initialValue: + // controller.responseIdEgyptDriverLicense != + // null + // ? controller + // .responseIdEgyptDriverLicense[ + // 'address'] + // ?.toString() + // : controller.address.value, + // decoration: const InputDecoration( + // labelText: 'Site'), + // onChanged: (value) => + // controller.site.value = value, + // ), + // TextFormField( + // initialValue: + // controller.responseIdEgyptDriverLicense != + // null + // ? controller + // .responseIdEgyptDriverLicense[ + // 'employmentType'] + // ?.toString() + // : controller + // .employmentType.value, + // decoration: const InputDecoration( + // labelText: 'Employment Type'), + // onChanged: (value) => controller + // .employmentType.value = value, + // ), + // const Divider( + // thickness: 5, + // height: 5, + // ), + // Text('Car Details'.tr), + // const Divider( + // thickness: 5, + // height: 5, + // ), + // TextFormField( + // initialValue: + // controller.responseIdCardDriverEgyptBack != + // null + // ? controller + // .responseIdCardDriverEgyptBack[ + // 'chassis'] + // ?.toString() + // : controller.vin.value, + // decoration: const InputDecoration( + // labelText: 'VIN'), + // onChanged: (value) => + // controller.vin.value = value, + // ), + // TextFormField( + // initialValue: + // controller.responseIdCardDriverEgyptBack != + // null + // ? controller + // .responseIdCardDriverEgyptBack[ + // 'make'] + // ?.toString() + // : controller.make.value, + // decoration: const InputDecoration( + // labelText: 'Make'), + // onChanged: (value) => + // controller.make.value = value, + // ), + // TextFormField( + // initialValue: + // controller.responseIdCardDriverEgyptBack != + // null + // ? controller + // .responseIdCardDriverEgyptBack[ + // 'model'] + // ?.toString() + // : controller.model.value, + // decoration: const InputDecoration( + // labelText: 'Model'), + // onChanged: (value) => + // controller.model.value = value, + // ), + // TextFormField( + // initialValue: + // controller.responseIdCardDriverEgyptBack != + // null + // ? controller + // .responseIdCardDriverEgyptBack[ + // 'year'] + // ?.toString() + // : controller.year.value, + // decoration: const InputDecoration( + // labelText: 'Year'), + // onChanged: (value) => + // controller.year.value = value, + // ), + // TextFormField( + // initialValue: + // controller.responseIdCardDriverEgyptBack != + // null + // ? controller + // .responseIdCardDriverEgyptBack[ + // 'engine'] + // ?.toString() + // : controller + // .displacement.value, + // decoration: const InputDecoration( + // labelText: 'Displacement'), + // onChanged: (value) => controller + // .displacement.value = value, + // ), + // TextFormField( + // initialValue: + // controller.responseIdCardDriverEgyptBack != + // null + // ? controller + // .responseIdCardDriverEgyptBack[ + // 'fuel'] + // ?.toString() + // : controller.fuel.value, + // decoration: const InputDecoration( + // labelText: 'Fuel'), + // onChanged: (value) => + // controller.fuel.value = value, + // ), + // DropdownButtonFormField( + // decoration: InputDecoration( + // labelText: + // 'Color'.tr, // Localized label + // ), + // value: controller.color.value.isEmpty + // ? null + // : controller.color.value, + // items: [ + // {'red'.tr: '#FF0000'}, + // {'green'.tr: '#008000'}, + // {'blue'.tr: '#0000FF'}, + // {'black'.tr: '#000000'}, + // {'white'.tr: '#FFFFFF'}, + // {'yellow'.tr: '#FFFF00'}, + // {'purple'.tr: '#800080'}, + // {'orange'.tr: '#FFA500'}, + // {'pink'.tr: '#FFC0CB'}, + // {'brown'.tr: '#A52A2A'}, + // {'gray'.tr: '#808080'}, + // {'cyan'.tr: '#00FFFF'}, + // {'magenta'.tr: '#FF00FF'}, + // {'lime'.tr: '#00FF00'}, + // {'indigo'.tr: '#4B0082'}, + // {'violet'.tr: '#EE82EE'}, + // {'gold'.tr: '#FFD700'}, + // {'silver'.tr: '#C0C0C0'}, + // {'teal'.tr: '#008080'}, + // {'navy'.tr: '#000080'}, + // ].map((colorMap) { + // String colorName = + // colorMap.keys.first; + // String colorValue = + // colorMap.values.first; + // return DropdownMenuItem( + // value: colorValue, + // child: Text(colorName), + // ); + // }).toList(), + // onChanged: (value) { + // controller.color.value = + // value ?? ''; + // controller.colorHex.value = + // value ?? ''; + // }, + // ), + // TextFormField( + // initialValue: + // controller.responseIdCardDriverEgyptFront != + // null + // ? controller + // .responseIdCardDriverEgyptFront[ + // 'owner'] + // ?.toString() + // : controller.owner.value, + // decoration: const InputDecoration( + // labelText: 'Owner'), + // onChanged: (value) => + // controller.owner.value = value, + // ), + // TextFormField( + // initialValue: + // controller.responseIdCardDriverEgyptFront != + // null + // ? controller + // .responseIdCardDriverEgyptFront[ + // 'address'] + // ?.toString() + // : controller.addressCar.value, + // decoration: const InputDecoration( + // labelText: 'Address'), + // onChanged: (value) => controller + // .addressCar.value = value, + // ), + // TextFormField( + // initialValue: + // inspectionDateTime.toString(), + // decoration: const InputDecoration( + // labelText: 'Registration Date'), + // onChanged: (value) => controller + // .registrationDate.value = value, + // ), + // const SizedBox(height: 20), + // ], + // ), + // ), + // ), + // confirm: MyElevatedButton( + // title: 'Upload'.tr, + // onPressed: () async { + // await controller.addDriverEgyptHanding(); + // await controller + // .addRegistrationCarEgyptHandling(); + // await controller + // .getDriverNotCompleteRegistration(); + // Get.back(); + // }, + // kolor: AppColor.greenColor, + // ), + // cancel: MyElevatedButton( + // kolor: AppColor.redColor, + // title: 'Cancel'.tr, + // onPressed: () { + // Get.back(); + // })); + }, + child: Text( + "hand inserting".tr, + ), + ), + (controller.responseIdCardDriverEgyptBack.isNotEmpty && + controller.responseIdCardDriverEgyptFront + .isNotEmpty && + controller.responseIdEgyptFront.isNotEmpty && + controller.responseIdEgyptBack.isNotEmpty && + controller + .responseIdEgyptDriverLicense.isNotEmpty + // && + // controller + // .responseCriminalRecordEgypt.isNotEmpty + ) + ? MyElevatedButton( + title: 'Next'.tr, + onPressed: () { + controller.addDriverAndCarEgypt(); + }) + : const SizedBox(), + SizedBox( + height: + (controller.responseIdCardDriverEgyptBack + .isNotEmpty && + controller.responseIdCardDriverEgyptFront + .isNotEmpty && + controller + .responseIdEgyptFront.isNotEmpty && + controller + .responseIdEgyptBack.isNotEmpty && + controller.responseIdEgyptDriverLicense + .isNotEmpty + // && + // controller.responseCriminalRecordEgypt + // .isNotEmpty + ) + ? Get.height * .7 + : Get.height * .85, + child: ListView( + children: [ + egyptDriverLicense(), + egyptCarLicenceFront(), + egyptCarLicenceBack(), + egyptDriverIDFront(), + egyptDriverIDBack(), + // egyptCriminalRecord(), + ], + ), + ), + ], + ), + ); + }), + ], + isleading: true); + } + + GetBuilder egyptDriverLicense() { + return GetBuilder( + builder: (ai) { + if (ai.responseIdEgyptDriverLicense.isNotEmpty) { + final expiryDate = ai.responseIdEgyptDriverLicense['expiry_date']; + + // Check if the expiry date is before today + final today = DateTime.now(); + + // Try parsing the expiry date. If it fails, set it to null. + final expiryDateTime = DateTime.tryParse(expiryDate); + final isExpired = + expiryDateTime != null && expiryDateTime.isBefore(today); + + return Card( + elevation: 4.0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16.0), + ), + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text('Driver\'s License'.tr, style: AppStyle.headTitle2), + IconButton( + onPressed: () async { + await ai.allMethodForAI(""" +Write a JSON object from the following information extracted from the provided Arabic text: + +{ + "license_type": "", + "national_number": "", + "name_arabic": "", + "name_english": "", + "firstName": "", + "lastName": "", + "address": "", + "issue_date": "", // Format: YYYY-MM-DD using Latin numerals (0-9) + "expiry_date": "", // Format: YYYY-MM-DD using Latin numerals (0-9) + "employmentType": "", + "license_categories": [] +} + +Important notes: +1. Ensure all dates are in the format YYYY-MM-DD using Latin (Western) numerals (0-9), not Arabic numerals. +2. The 'license_categories' should be an array, even if there's only one category. +3. Fill in all fields based on the information provided in the Arabic text. +4. If any information is missing, leave the field as an empty string or empty array as appropriate. +""", 'driver_license', ai.driverId); //egypt + }, + icon: const Icon(Icons.refresh), + ), + ], + ), + const SizedBox(height: 8.0), + const Divider(color: AppColor.accentColor), + const SizedBox(height: 8.0), + Text( + '${'License Type'.tr}: ${ai.responseIdEgyptDriverLicense['license_type']}', + style: AppStyle.title, + ), + const SizedBox(height: 8.0), + Text( + '${'National Number'.tr}: ${ai.responseIdEgyptDriverLicense['national_number']}', + style: AppStyle.title.copyWith( + color: ai.responseIdEgyptDriverLicense[ + 'national_number'] == + ai.responseIdEgyptBack['nationalID'] + ? AppColor.greenColor + : AppColor.redColor), + ), + const SizedBox(height: 8.0), + Text( + '${'Name (Arabic)'.tr}: ${ai.responseIdEgyptDriverLicense['name_arabic']}', + ), + const SizedBox(height: 8.0), + Text( + '${'Name (English)'.tr}: ${ai.responseIdEgyptDriverLicense['name_english']}', + ), + const SizedBox(height: 8.0), + Text( + '${'Address'.tr}: ${ai.responseIdEgyptDriverLicense['address']}', + ), + const SizedBox(height: 8.0), + Text( + '${'Issue Date'.tr}: ${ai.responseIdEgyptDriverLicense['issue_date']}', + ), + const SizedBox(height: 8.0), + Text( + '${'Expiry Date'.tr}: ${ai.responseIdEgyptDriverLicense['expiry_date']}', + style: AppStyle.title.copyWith( + color: + !isExpired ? AppColor.greenColor : AppColor.redColor, + ), + ), + const SizedBox(height: 8.0), + Text( + '${'License Categories'.tr}: ${ai.responseIdEgyptDriverLicense['license_categories']}', + ), + ], + ), + ), + ); + } + return Card( + child: InkWell( + onTap: () async { + await ai.allMethodForAI(""" +Write a JSON object from the following information extracted from the provided Arabic text: + +{ + "license_type": "", + "national_number": "", + "name_arabic": "", + "name_english": "", + "firstName": "", + "lastName": "", + "address": "", + "issue_date": "", // Format: YYYY-MM-DD using Latin numerals (0-9) + "expiry_date": "", // Format: YYYY-MM-DD using Latin numerals (0-9) + "employmentType": "", + "license_categories": [] +} + +Important notes: +1. Ensure all dates are in the format YYYY-MM-DD using Latin (Western) numerals (0-9), not Arabic numerals. +2. The 'license_categories' should be an array, even if there's only one category. +3. Fill in all fields based on the information provided in the Arabic text. +4. If any information is missing, leave the field as an empty string or empty array as appropriate. +""", 'driver_license', ai.driverId); //egypt + }, + child: Column( + children: [ + Image.network( + '${AppLink.server}/card_image/driver_license-${ai.driverId}.jpg', + height: Get.height * .25, + width: double.maxFinite, + fit: BoxFit.fitHeight, + errorBuilder: (BuildContext context, Object exception, + StackTrace? stackTrace) { + return Text("Not found any image".tr); + }, + ), + Text( + 'Capture an Image of Your Driver License'.tr, + style: AppStyle.title, + ), + ], + ), + ), + ); + }, + ); + } + + GetBuilder egyptDriverIDBack() { + return GetBuilder( + builder: (ai) { + if (ai.responseIdEgyptBack.isNotEmpty) { + final taxExpiryDate = ai.responseIdEgyptBack['expirationDate']; + + // Check if the tax expiry date is before today + final today = DateTime.now(); + + // Try parsing the tax expiry date. If it fails, set it to null. + final taxExpiryDateTime = DateTime.tryParse(taxExpiryDate); + final isExpired = + taxExpiryDateTime != null && taxExpiryDateTime.isBefore(today); + + return Card( + elevation: 4.0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16.0), + ), + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text('ID Documents Back'.tr, style: AppStyle.headTitle2), + IconButton( + onPressed: () async { + await ai.allMethodForAI(""" + Given the following Arabic text values: + + +Please create a JSON object with the following fields: + + +nationalID: Use exactly 14 digits, converting from Arabic numerals to Latin numerals (0-9). +issueDate: Format as YYYY-MM-DD using Latin numerals, setting the date to the last day of the provided month. +occupation: Translate and format consistently (e.g., all lowercase). +gender: Use the values "Male" or "Female" without translation. +country: Set to "جمهورية مصر العربية". +religion: Translate and format consistently (e.g., all lowercase). +maritalStatus: Translate and format consistently (e.g., all lowercase). +fullNameMarital: If maritalStatus is "أعزب", set this to "none". Otherwise, leave it as "none". +expirationDate: Format as YYYY-MM-DD using Latin numerals. +Important notes: + + +Ensure all date fields use Latin (Western) numerals (0-9) instead of Arabic numerals. +For the nationalID, use exactly 14 digits from the provided Arabic numeral string, converting to Latin numerals. +For issueDate, use the last day of the month since only year and month are provided. +Include the country field as "جمهورية مصر العربية". +Format all string values consistently (e.g., all lowercase or proper case) + """, 'id_back', ai.driverId); //egypt + }, + icon: const Icon(Icons.refresh), + ), + ], + ), + const SizedBox(height: 8.0), + const Divider(color: AppColor.accentColor), + const SizedBox(height: 8.0), + // Assuming these keys exist in ai.responseIdEgyptFront + Text( + '${'National ID'.tr}: ${ai.responseIdEgyptBack['nationalID']}', + style: AppStyle.title.copyWith( + color: ai.responseIdEgyptDriverLicense[ + 'national_number'] == + ai.responseIdEgyptBack['nationalID'] + ? AppColor.greenColor + : AppColor.redColor), + ), + + const SizedBox(height: 8.0), + Text( + '${'Occupation'.tr}: ${ai.responseIdEgyptBack['occupation']}', // Assuming 'occupation' exists + ), + const SizedBox(height: 8.0), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + '${'Issue Date'.tr}: ${ai.responseIdEgyptBack['issueDate']}', // Assuming 'issueDate' exists + ), + Text( + '${'Gender'.tr}: ${ai.responseIdEgyptBack['gender']}', // Assuming 'gender' exists + ), + ], + ), + const SizedBox(height: 8.0), + // Row( + // mainAxisAlignment: MainAxisAlignment.spaceBetween, + // children: [ + // Text( + // '${'Religion'.tr}: ${ai.responseIdEgyptBack['religion']}', // Assuming 'religion' exists + // ), + // Text( + // '${'Marital Status'.tr}: ${ai.responseIdEgyptBack['maritalStatus']}', // Assuming 'maritalStatus' exists + // ), + // ], + // ), + // const SizedBox(height: 8.0), + // Text( + // '${'Full Name (Marital)'.tr}: ${ai.responseIdEgyptBack['fullNameMaritial']}', // Assuming 'fullNameMaritial' exists + // ), + // const SizedBox(height: 8.0), + Text( + '${'Expiration Date'.tr}: ${ai.responseIdEgyptBack['expirationDate']}', // Assuming 'expirationDate' exists + style: AppStyle.title.copyWith( + color: !isExpired + ? AppColor.greenColor + : AppColor.redColor), + ), + ], + ), + ), + ); + } + return Card( + child: InkWell( + onTap: () async { + await ai.allMethodForAI(''' + Given the following Arabic text values: + + +Please create a JSON object with the following fields: + + +nationalID: Use exactly 14 digits, converting from Arabic numerals to Latin numerals (0-9). +issueDate: Format as YYYY-MM-DD using Latin numerals, setting the date to the last day of the provided month. +occupation: Translate and format consistently (e.g., all lowercase). +gender: Use the values "Male" or "Female" without translation. +country: Set to "جمهورية مصر العربية". +religion: Translate and format consistently (e.g., all lowercase). +maritalStatus: Translate and format consistently (e.g., all lowercase). +fullNameMarital: If maritalStatus is "أعزب", set this to "none". Otherwise, leave it as "none". +expirationDate: Format as YYYY-MM-DD using Latin numerals. +Important notes: + + +Ensure all date fields use Latin (Western) numerals (0-9) instead of Arabic numerals. +For the nationalID, use exactly 14 digits from the provided Arabic numeral string, converting to Latin numerals. +For issueDate, use the last day of the month since only year and month are provided. +Include the country field as "جمهورية مصر العربية". +Format all string values consistently (e.g., all lowercase or proper case) + ''', 'id_back', ai.driverId); //egypt + }, + child: Column( + children: [ + Image.network( + '${AppLink.server}/card_image/id_back-${ai.driverId}.jpg', + height: Get.height * .25, + width: double.maxFinite, + fit: BoxFit.fitHeight, + errorBuilder: (BuildContext context, Object exception, + StackTrace? stackTrace) { + return Text("Not found any image".tr); + }, + ), + Text( + 'Capture an Image of Your ID Document Back'.tr, + style: AppStyle.title, + ), + ], + ), + ), + ); + }, + ); + } + + GetBuilder egyptDriverIDFront() { + return GetBuilder( + builder: (ai) { + if (ai.responseIdEgyptFront.isNotEmpty) { + return Card( + elevation: 4.0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16.0), + ), + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text('ID Documents Front'.tr, style: AppStyle.headTitle2), + IconButton( + onPressed: () async { + await ai.allMethodForAI(''' + Write a JSON object from the following information extracted from the provided Arabic text: + +{ + "first_name": "", // The word next to "بطاقة تحقيق الشخصية" (National Identification Card) + "full_name": "", // The full name on the next line after the first name + "address": "", // The complete address spanning the next two lines + "national_number": "", // The National ID number before the last line (convert Arabic numerals to Latin) + "card_id": "", // The card ID in English on the last line + "dob": "" // Year of birth only, in Latin numerals (YYYY format) +} + +Important notes: +1. For 'first_name', extract the word immediately following "بطاقة تحقيق الشخصية". +2. 'full_name' should be the complete name found on the line after the first name. +3. 'address' should combine information from two consecutive lines. +4. Convert the 'national_number' from Arabic numerals to Latin numerals (0-9). +5. 'card_id' should be extracted as-is from the last line (it's already in English). +6. For 'dob', include only the year of birth in YYYY format using Latin numerals. +7. If any information is missing, leave the field as an empty string. + ''', 'id_front', ai.driverId); //egypt + }, + icon: const Icon(Icons.refresh), + ), + ], + ), + const SizedBox(height: 8.0), + const Divider(color: AppColor.accentColor), + const SizedBox(height: 8.0), + // Removed Make, Model, etc. as they are not available + + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + '${'First Name'.tr}: ${ai.responseIdEgyptFront['first_name']}', + ), + Text( + '${'CardID'.tr}: ${ai.responseIdEgyptFront['card_id']}', + ), + ], + ), + const SizedBox(height: 8.0), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + '${'Full Name'.tr}: ${ai.responseIdEgyptFront['full_name']}', + ), + Text( + '${'DOB'.tr}: ${ai.responseIdEgyptFront['dob']}', + ), + ], + ), + const SizedBox(height: 8.0), + Text( + '${'Address'.tr}: ${ai.responseIdEgyptFront['address']}', + ), + const SizedBox(height: 8.0), + // Text( + // '${'National Number'.tr}: ${ai.responseIdEgyptFront['national_number']}', + // ), + // const SizedBox(height: 8.0), + + // Removed Inspection Date as it's not available + ], + ), + ), + ); + } + return Card( + child: InkWell( + onTap: () async { + await ai.allMethodForAI("""" + Write a JSON object from the following information extracted from the provided Arabic text: + +{ + "first_name": "", // The word next to "بطاقة تحقيق الشخصية" (National Identification Card) + "full_name": "", // The full name on the next line after the first name + "address": "", // The complete address spanning the next two lines + "national_number": "", // The National ID number before the last line (convert Arabic numerals to Latin) + "card_id": "", // The card ID in English on the last line + "dob": "" // Year of birth only, in Latin numerals (YYYY format) +} + +Important notes: +1. For 'first_name', extract the word immediately following "بطاقة تحقيق الشخصية". +2. 'full_name' should be the complete name found on the line after the first name. +3. 'address' should combine information from two consecutive lines. +4. Convert the 'national_number' from Arabic numerals to Latin numerals (0-9). +5. 'card_id' should be extracted as-is from the last line (it's already in English). +6. For 'dob', include only the year of birth in YYYY format using Latin numerals. +7. If any information is missing, leave the field as an empty string. + """, 'id_front', ai.driverId); //egypt + }, + child: Column( + children: [ + Image.network( + //api.sefer.live/sefer/card_image/id_front-110822466514385876961.jpg + '${AppLink.server}/card_image/id_front-${ai.driverId}.jpg', + height: Get.height * .25, + width: double.maxFinite, + fit: BoxFit.fitHeight, + errorBuilder: (BuildContext context, Object exception, + StackTrace? stackTrace) { + return Text("Not found any image".tr); + }, + ), + Text( + 'Capture an Image of Your ID Document front'.tr, + style: AppStyle.title, + ), + ], + ), + ), + ); + }, + ); + } + + GetBuilder egyptCarLicenceFront() { + return GetBuilder( + builder: (ai) { + if (ai.responseIdCardDriverEgyptFront.isNotEmpty) { + // No need to access ai.responseIdCardDriverEgyptBack anymore + final licenseExpiryDate = DateTime.parse( + ai.responseIdCardDriverEgyptFront['LicenseExpirationDate']); + + // Check if license has expired + final today = DateTime.now(); + final isLicenseExpired = licenseExpiryDate.isBefore(today); + + return Card( + elevation: 4.0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16.0), + ), + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Text('Vehicle Details Front'.tr, + style: AppStyle.headTitle2), + IconButton( + onPressed: () async { + ai.allMethodForAI(""" + Extract the following details from the provided car license data and format them into a JSON object: + + +License Expiration Date +Car Plate +Owner +Address + +Car License Data: + + +JSON Format: +{ +"LicenseExpirationDate": "YYYY-MM-DD", +"car_plate": "[Car plate number]",//the car plate is line next to line contain 'ادارة مرور' for bot numbers and letters in arabic with partition like| but you remove | +"owner": "[Owner's full name]", +"address": "[Address if available, otherwise 'Not provided']" +} + +Important notes: +1. For the LicenseExpirationDate, ensure the date is in YYYY-MM-DD format using Latin numerals (0-9). +2. Replace all occurrences of '|' (pipe character) with a space in all fields. +3. If any information is missing, leave the corresponding field as an empty string. +4. Ensure all text is properly formatted and spaces are used correctly. + +Please fill in the JSON object with the extracted information, following these guidelines. +""", 'car_front', ai.driverId); + }, + icon: const Icon(Icons.refresh), + ), + ], + ), + const SizedBox(height: 8.0), + const Divider(color: AppColor.accentColor), + const SizedBox(height: 8.0), + // Removed Make, Model, etc. as they are not available + + Text( + '${'Plate Number'.tr}: ${ai.responseIdCardDriverEgyptFront['car_plate']}', + ), + const SizedBox(height: 8.0), + Text( + '${'Owner Name'.tr}: ${ai.responseIdCardDriverEgyptFront['owner']}', + ), + const SizedBox(height: 8.0), + Text( + '${'Address'.tr}: ${ai.responseIdCardDriverEgyptFront['address']}', + ), + const SizedBox(height: 8.0), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + '${'License Expiry Date'.tr}: ${licenseExpiryDate.toString().substring(0, 10)}', + style: TextStyle( + color: isLicenseExpired ? Colors.red : Colors.green, + ), + ), + // Removed Fuel as it's not available + ], + ), + // Removed Inspection Date as it's not available + ], + ), + ), + ); + } + return Card( + child: InkWell( + onTap: () async { + ai.allMethodForAI(""" + Extract the following details from the provided car license data and format them into a JSON object: + + +License Expiration Date +Car Plate +Owner +Address + +Car License Data: + + +JSON Format: +{ +"LicenseExpirationDate": "YYYY-MM-DD", +"car_plate": "[Car plate number]",//the car plate is line next to line contain 'ادارة مرور' for bot numbers and letters in arabic with partition like| but you remove | +"owner": "[Owner's full name]", +"address": "[Address if available, otherwise 'Not provided']" +} + +Important notes: +1. For the LicenseExpirationDate, ensure the date is in YYYY-MM-DD format using Latin numerals (0-9). +2. Replace all occurrences of '|' (pipe character) with a space in all fields. +3. If any information is missing, leave the corresponding field as an empty string. +4. Ensure all text is properly formatted and spaces are used correctly. + +Please fill in the JSON object with the extracted information, following these guidelines. +""", 'car_front', ai.driverId); + }, + child: Column( + children: [ + Image.network( + '${AppLink.server}/card_image/car_front-${ai.driverId}.jpg', + height: Get.height * .25, + width: double.maxFinite, + fit: BoxFit.fitHeight, + errorBuilder: (BuildContext context, Object exception, + StackTrace? stackTrace) { + return Text("Not found any image".tr); + }, + ), + Text( + 'Capture an Image of Your car license front'.tr, + style: AppStyle.title, + ), + ], + ), + ), + ); + }, + ); + } + + GetBuilder egyptCarLicenceBack() { + return GetBuilder( + builder: (ai) { + if (ai.responseIdCardDriverEgyptBack.isNotEmpty) { + // Get the tax expiry date from the response + final taxExpiryDate = ai.responseIdCardDriverEgyptBack['tax_expiry']; + // final displacement = ai.responseIdCardDriverEgyptBack['displacement']; + // if (int.parse(displacement) < 1000) {} + // Get the inspection date from the response + final inspectionDate = + ai.responseIdCardDriverEgyptBack['inspection_date']; + final year = int.parse(inspectionDate.split('-')[0]); + +// Set inspectionDateTime to December 31st of the given year + final inspectionDateTime = DateTime(year, 12, 31); + String carBackLicenseExpired = + inspectionDateTime.toString().split(' ')[0]; +// Get the current date + final today = DateTime.now(); + +// Try parsing the tax expiry date. If it fails, set it to null. + final taxExpiryDateTime = DateTime.tryParse(taxExpiryDate ?? ''); + final isExpired = + taxExpiryDateTime != null && taxExpiryDateTime.isBefore(today); +// Check if the inspection date is before today + bool isInspectionExpired = inspectionDateTime.isBefore(today); + + return Card( + elevation: 4.0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16.0), + ), + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text('Vehicle Details Back'.tr, + style: AppStyle.headTitle2), + IconButton( + onPressed: () async { + ai.allMethodForAI(""" +Analyze the extracted car license information and create a JSON object with the following keys: + +{ + "make": "", + "year": "", + "chassis": "", + "model": "", + "engine": "", + "displacement": "", + "cylinders": "", + "fuel": "", + "color": "", + "color_hex": "", + "inspection_date": "", + "assuranceNumber": "", + "tax_expiry": "" +} + +Important notes: +1. For dates (inspection_date and tax_expiry), use the format YYYY-MM-DD with Latin numerals (0-9). +2. Convert the color name to its corresponding hex color code for the 'color_hex' field. +3. Ensure all numeric values (year, displacement, cylinders) are in Latin numerals. +4. If any information is missing, leave the corresponding field as an empty string. +5. Do not include any explanatory text in the JSON fields, only the extracted values. +displacement in the line contain (سم٣ ) +Please fill in the JSON object with the extracted information, following these guidelines. +""", 'car_back', ai.driverId); + }, + icon: const Icon(Icons.refresh), + ), + ], + ), + const SizedBox(height: 8.0), + const Divider(color: AppColor.accentColor), + const SizedBox(height: 8.0), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + '${'Make'.tr}: ${ai.responseIdCardDriverEgyptBack['make']}'), + Text( + '${'Model'.tr}: ${ai.responseIdCardDriverEgyptBack['model']}'), + ], + ), + const SizedBox(height: 8.0), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + '${'Year'.tr}: ${ai.responseIdCardDriverEgyptBack['year']}'), + Text( + '${'Chassis'.tr}: ${ai.responseIdCardDriverEgyptBack['chassis']}'), + ], + ), + const SizedBox(height: 8.0), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + '${'Color'.tr}: ${ai.responseIdCardDriverEgyptBack['color']}'), + Text( + '${'Displacement'.tr}: ${ai.responseIdCardDriverEgyptBack['displacement']} cc'), + ], + ), + const SizedBox(height: 8.0), + Text( + '${'Fuel'.tr}: ${ai.responseIdCardDriverEgyptBack['fuel']}'), + const SizedBox(height: 8.0), + if (taxExpiryDateTime != null) + Text( + '${'Tax Expiry Date'.tr}: $taxExpiryDate', + style: TextStyle( + color: isExpired ? Colors.red : Colors.green, + ), + ), + const SizedBox(height: 8.0), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + '${'Inspection Date'.tr}: $carBackLicenseExpired', + style: TextStyle( + color: + isInspectionExpired ? Colors.red : Colors.green, + ), + ), + ], + ), + ], + ), + ), + ); + } + return Card( + child: InkWell( + onTap: () async { + ai.allMethodForAI(""" +Analyze the extracted car license information and create a JSON object with the following keys: + +{ + "make": "", + "year": "", + "chassis": "", + "model": "", + "engine": "", + "displacement": "", + "cylinders": "", + "fuel": "", + "color": "", + "color_hex": "", + "inspection_date": "", + "assuranceNumber": "", + "tax_expiry": "" +} + +Important notes: +1. For dates (inspection_date and tax_expiry), use the format YYYY-MM-DD with Latin numerals (0-9). +2. Convert the color name to its corresponding hex color code for the 'color_hex' field. +3. Ensure all numeric values (year, displacement, cylinders) are in Latin numerals. +4. If any information is missing, leave the corresponding field as an empty string. +5. Do not include any explanatory text in the JSON fields, only the extracted values. + +Please fill in the JSON object with the extracted information, following these guidelines. +""", 'car_back', ai.driverId); + }, + child: Column( + children: [ + Image.network( + '${AppLink.server}/card_image/car_back-${ai.driverId}.jpg', + height: Get.height * .25, + width: double.maxFinite, + fit: BoxFit.fitHeight, + errorBuilder: (BuildContext context, Object exception, + StackTrace? stackTrace) { + return Text("Not found any image".tr); + }, + ), + Text( + 'Capture an Image of Your car license back'.tr, + style: AppStyle.title, + ), + ], + ), + ), + ); + }, + ); + } + + GetBuilder egyptCriminalRecord() { + return GetBuilder( + builder: (ai) { + if (ai.responseCriminalRecordEgypt.isNotEmpty) { + return Card( + elevation: 4.0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(16.0), + ), + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text('Criminal Record'.tr, style: AppStyle.headTitle2), + IconButton( + onPressed: () async { + await ai.allMethodForAI(""" +Write a JSON object from the following information extracted from the provided Arabic text: + +{ + "InspectionResult": "", + "NationalID": "", + "FullName": "", + "IssueDate": "" // Format: YYYY-MM-DD +} + +Important notes: +1. For the IssueDate, ensure the date is in YYYY-MM-DD format using Latin numerals (0-9). +2. Add appropriate spaces in all text fields to ensure readability. +3. If any information is missing, leave the corresponding field as an empty string. +4. Ensure all text is properly formatted and spaces are used correctly. +5. Convert any Arabic numerals to Latin numerals (0-9) where applicable. + +Please fill in the JSON object with the extracted information, following these guidelines. +""", 'criminalRecord', ai.driverId); + }, + icon: const Icon(Icons.refresh), + ), + ], + ), + const SizedBox(height: 8.0), + const Divider(color: AppColor.accentColor), + const SizedBox(height: 8.0), + Text( + '${'InspectionResult'.tr}: ${ai.responseCriminalRecordEgypt['InspectionResult']}'), + const SizedBox(height: 8.0), + Text( + '${'FullName'.tr}: ${ai.responseCriminalRecordEgypt['FullName']}', + style: AppStyle.title.copyWith( + color: ai.responseCriminalRecordEgypt['FullName'] == + ai.responseIdEgyptDriverLicense['name_arabic'] + ? AppColor.greenColor + : AppColor.redColor), + ), + const SizedBox(height: 8.0), + Text( + '${'NationalID'.tr}: ${ai.responseCriminalRecordEgypt['NationalID']}'), + const SizedBox(height: 8.0), + Text( + '${'IssueDate'.tr}: ${ai.responseCriminalRecordEgypt['IssueDate']}'), + ], + ), + ), + ); + } + return Card( + child: InkWell( + onTap: () async { + await ai.allMethodForAI(""" +Write a JSON object from the following information extracted from the provided Arabic text: + +{ + "InspectionResult": "", + "NationalID": "", + "FullName": "", + "IssueDate": "" // Format: YYYY-MM-DD +} + +Important notes: +1. For the IssueDate, ensure the date is in YYYY-MM-DD format using Latin numerals (0-9). +2. Add appropriate spaces in all text fields to ensure readability. +3. If any information is missing, leave the corresponding field as an empty string. +4. Ensure all text is properly formatted and spaces are used correctly. +5. Convert any Arabic numerals to Latin numerals (0-9) where applicable. + +Please fill in the JSON object with the extracted information, following these guidelines. +""", 'criminalRecord', ai.driverId); + }, + child: Column( + children: [ + Image.network( + '${AppLink.server}/card_image/6.png', + height: Get.height * .25, + width: double.maxFinite, + fit: BoxFit.fitHeight, + ), + Text( + 'Capture an Image of Your Criminal Record'.tr, + style: AppStyle.title, + ), + ], + ), + ), + ); + }, + ); + } +} diff --git a/lib/controller/mainController/pages/welcome_call.dart b/lib/controller/mainController/pages/welcome_call.dart new file mode 100644 index 0000000..8de624d --- /dev/null +++ b/lib/controller/mainController/pages/welcome_call.dart @@ -0,0 +1,165 @@ +import 'package:flutter/cupertino.dart'; +import 'package:get/get.dart'; +import 'package:service/constant/colors.dart'; +import 'package:service/constant/style.dart'; +import 'package:service/views/widgets/elevated_btn.dart'; +import 'package:service/views/widgets/my_scafold.dart'; + +import '../main_controller.dart'; + +class WelcomeCall extends StatelessWidget { + const WelcomeCall({super.key}); + + @override + Widget build(BuildContext context) { + Get.put(MainController()); + return MyScaffold( + title: 'Welcome Drivers'.tr, + isleading: true, + body: [ + GetBuilder(builder: (mainController) { + return Expanded( + child: CupertinoScrollbar( + child: ListView.builder( + itemCount: mainController.newDriverRegister.length, + itemBuilder: (context, index) { + final driver = mainController.newDriverRegister[index]; + return DriverCard(driver: driver); + }, + ), + ), + ); + }), + ], + ); + } +} + +class DriverCard extends StatelessWidget { + final Map driver; + + const DriverCard({super.key, required this.driver}); + + @override + Widget build(BuildContext context) { + return CupertinoCard( + margin: const EdgeInsets.all(16.0), + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + decoration: AppStyle.boxDecoration1.copyWith( + color: driver['isCall'].toString() == '1' + ? AppColor.greenColor + : AppColor.accentColor), + child: Padding( + padding: + const EdgeInsets.symmetric(horizontal: 10, vertical: 2), + child: Text( + 'Driver Information'.tr, + style: CupertinoTheme.of(context).textTheme.navTitleTextStyle, + ), + ), + ), + const SizedBox(height: 16), + InfoText('Name'.tr, driver['name_arabic'].toString()), + InfoText('Phone'.tr, driver['phone'].toString()), + InfoText('Email'.tr, driver['email'].toString()), + InfoText('License Type'.tr, driver['license_type'].toString()), + InfoText( + 'License Categories'.tr, driver['license_categories'] ?? ''), + InfoText( + 'National Number'.tr, driver['national_number'].toString()), + InfoText('Occupation'.tr, driver['occupation'].toString()), + const SizedBox(height: 16), + Text( + 'Notes:'.tr, + style: CupertinoTheme.of(context).textTheme.navTitleTextStyle, + ), + const SizedBox(height: 8), + CupertinoTextField( + controller: Get.find().notesController, + placeholder: driver['notes'] ?? 'Enter notes here...'.tr, + maxLines: 3, + padding: const EdgeInsets.all(12.0), + decoration: BoxDecoration( + border: Border.all(color: CupertinoColors.systemGrey), + borderRadius: BorderRadius.circular(8.0), + ), + ), + const SizedBox(height: 16), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + SizedBox( + width: Get.width * .4, + child: MyElevatedButton( + title: 'Call Driver'.tr, + onPressed: () { + Get.find() + .makePhoneCall(driver['phone'].toString()); + })), + CupertinoButton( + onPressed: () async { + await Get.find().addWelcomeCall( + driver['id'].toString(), + ); + }, + child: Text('Save Changes'.tr), + ), + ], + ), + ], + ), + ), + ); + } +} + +class InfoText extends StatelessWidget { + final String label; + final String value; + + const InfoText(this.label, this.value, {super.key}); + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.only(bottom: 4.0), + child: Text( + '$label: $value', + style: CupertinoTheme.of(context).textTheme.textStyle, + ), + ); + } +} + +class CupertinoCard extends StatelessWidget { + final Widget child; + final EdgeInsetsGeometry margin; + + const CupertinoCard( + {super.key, required this.child, this.margin = EdgeInsets.zero}); + + @override + Widget build(BuildContext context) { + return Container( + margin: margin, + decoration: BoxDecoration( + color: CupertinoColors.systemBackground, + borderRadius: BorderRadius.circular(12.0), + boxShadow: [ + BoxShadow( + color: CupertinoColors.systemGrey.withOpacity(0.2), + spreadRadius: 1, + blurRadius: 5, + offset: const Offset(0, 3), + ), + ], + ), + child: child, + ); + } +} diff --git a/lib/controller/mainController/registration_captain_controller.dart b/lib/controller/mainController/registration_captain_controller.dart new file mode 100644 index 0000000..5e5247b --- /dev/null +++ b/lib/controller/mainController/registration_captain_controller.dart @@ -0,0 +1,993 @@ +import 'dart:convert'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:http/http.dart' as http; +import 'package:service/views/widgets/elevated_btn.dart'; + +import '../../constant/api_key.dart'; +import '../../constant/box_name.dart'; +import '../../constant/colors.dart'; +import '../../constant/info.dart'; +import '../../constant/links.dart'; +import '../../constant/style.dart'; +import '../../main.dart'; +import '../../print.dart'; +import '../functions/crud.dart'; +import '../functions/image.dart'; + +enum DocumentType { + carLicenseFront, + carLicenseBack, + idCardFront, + idCardBack, + driverLicense, + unknown, +} + +class RegisterCaptainController extends GetxController { + bool isDriverSaved = false; + bool isCarSaved = false; + Map? arguments; + String? driverId; + String? email; + String? phone; + + @override + void onInit() { + super.onInit(); + arguments = Get.arguments; + + getPrompt(); + + initArguments(); + } + + void driveInit() { + arguments = Get.arguments; + initArguments(); + } + + void initArguments() { + if (arguments != null) { + driverId = arguments!['driverId']; + email = arguments!['email']; + phone = arguments!['phone_number']; + } else { + print('Arguments are null'); + } + } + + Map responseMap = {}; + Map responseCarLicenseMapJordan = {}; + Map responseBackCarLicenseMap = {}; + Map responseIdCardMap = {}; + Map responseIdCardDriverEgyptBack = {}; + Map responseForComplaint = {}; + Map responseIdCardDriverEgyptFront = {}; + Map responseIdEgyptFront = {}; + Map responseCriminalRecordEgypt = {}; + Map responseIdEgyptBack = {}; + Map responseIdEgyptDriverLicense = {}; + String? responseIdCardDriverEgypt1; + bool isloading = false; + var image; + DateTime now = DateTime.now(); + + bool isLoading = false; + String getExpectedDocument(String imagePath) { + switch (imagePath) { + case 'car_front': + return 'car_license_front'.tr; + case 'car_back': + return 'car_license_back'.tr; + case 'id_back': + return 'id_card_back'.tr; + case 'id_front': + return 'id_card_front'.tr; + case 'driver_license': + return 'driver_license'.tr; + default: + return 'unknown_document'.tr; + } + } + + DocumentType getExpectedType(String imagePath) { + switch (imagePath) { + case 'car_front': + return DocumentType.carLicenseFront; + case 'car_back': + return DocumentType.carLicenseBack; + case 'id_back': + return DocumentType.idCardBack; + case 'id_front': + return DocumentType.idCardFront; + case 'driver_license': + return DocumentType.driverLicense; + default: + return DocumentType.unknown; + } + } + + String getDetectedDocument(DocumentType type) { + switch (type) { + case DocumentType.carLicenseFront: + return 'car_license_front'.tr; + case DocumentType.carLicenseBack: + return 'car_license_back'.tr; + case DocumentType.idCardFront: + return 'id_card_front'.tr; + case DocumentType.idCardBack: + return 'id_card_back'.tr; + case DocumentType.driverLicense: + return 'driver_license'.tr; + default: + return 'unknown_document'.tr; + } + } + + DocumentType checkDocumentType(String text) { + // Convert text to lowercase and remove all spaces and new lines + text = text.toLowerCase().replaceAll(RegExp(r'\s+'), ''); + + // Keywords for each document type + final Map> keywords = { + DocumentType.carLicenseBack: ['شاسيه', 'موتور', 'سم٣'], + DocumentType.carLicenseFront: ['رخصةتسيير'], + DocumentType.idCardFront: [ + 'بطاقةتحقيقالشخصية', + 'بطاقة تحقيق الشخصية', + 'تحقيق' + ], + DocumentType.idCardBack: ['البطاقةساريةحتى'], + DocumentType.driverLicense: ['قيادةخاصة', 'خاصه', 'قيادة'], + }; + + // Check each document type + for (var entry in keywords.entries) { + if (entry.value.any((keyword) => text.contains(keyword))) { + return entry.key; + } + } + + // If no match is found + return DocumentType.unknown; + } + + List prompts = []; + getPrompt() async { + var res = await CRUD() + .get(link: AppLink.getPromptDriverDocumentsEgypt, payload: {}); + if (res != 'failure') { + var d = jsonDecode(res)['message']; + prompts = d; + } else {} + } + + Future allMethodForAI(String prompt, imagePath, driverID) async { + isLoading = true; + update(); + await ImageController() + .choosImage(AppLink.uploadEgypt, driverID, imagePath); + + var extractedString = await CRUD().arabicTextExtractByVisionAndAI( + imagePath: imagePath, driverID: driverID); + var json = jsonDecode(extractedString); + var textValues = extractTextFromLines(json); + Log.print('textValues: ${textValues}'); + // await Get.put(AI()).geminiAiExtraction(prompt, textValues, imagePath); + + DocumentType detectedType = checkDocumentType(textValues); + String expectedDocument = getExpectedDocument(imagePath); + String detectedDocument = getDetectedDocument(detectedType); + + bool isCorrectDocument = (detectedType == getExpectedType(imagePath)); + if (!isCorrectDocument) { + Get.defaultDialog( + title: 'incorrect_document_title'.tr, + middleText: + '${'expected'.tr}: $expectedDocument\n${'detected'.tr}: $detectedDocument', + confirm: MyElevatedButton( + title: 'OK'.tr, + onPressed: () { + Get.back(); + })); + } else { + // Process the correct document + await anthropicAI(textValues, prompt, imagePath); + } + isLoading = false; + update(); + } + + String extractTextFromLines(Map jsonData) { + final readResult = jsonData['readResult']; + final blocks = readResult['blocks']; + + final StringBuffer buffer = StringBuffer(); + + for (final block in blocks) { + final lines = block['lines']; + for (final line in lines) { + final text = line['text']; + buffer.write(text); + buffer.write('\n'); + } + } + + return buffer.toString().trim(); + } + + List driverNotCompleteRegistration = []; + getDriverNotCompleteRegistration() async { + var res = await CRUD() + .get(link: AppLink.getDriverNotCompleteRegistration, payload: {}); + if (res != 'failure') { + var d = jsonDecode(res)['message']; + driverNotCompleteRegistration = d; + update(); + } else { + Get.snackbar(res, ''); + } + } + + final today = DateTime.now(); + + Future addDriverAndCarEgypt() async { + final expiryDate = responseIdEgyptDriverLicense['expiry_date']; + final expiryDateTime = DateTime.tryParse(expiryDate); + Log.print('expiryDateTime: ${expiryDateTime}'); + final isExpired = expiryDateTime != null && expiryDateTime.isBefore(today); + + final taxExpiryDate = responseIdCardDriverEgyptBack['tax_expiry']; + Log.print('taxExpiryDate: ${taxExpiryDate}'); + + // Get the inspection date from the response + final inspectionDate = responseIdCardDriverEgyptBack['inspection_date']; + final year = int.parse(inspectionDate.split('-')[0]); + // Try parsing the tax expiry date. If it fails, set it to null. + final taxExpiryDateTime = DateTime.tryParse(taxExpiryDate ?? ''); + Log.print('taxExpiryDateTime: ${taxExpiryDateTime}'); + final isExpiredCar = + taxExpiryDateTime != null && taxExpiryDateTime.isBefore(today); + + // Check if the inspection date is before today + final inspectionDateTime = DateTime(year, 12, 31); + final isInspectionExpired = inspectionDateTime.isBefore(today); + + if (isExpiredCar || isInspectionExpired) { + Get.defaultDialog( + title: 'Expired Driver’s License'.tr, + content: Column( + mainAxisSize: MainAxisSize.min, + children: [ + const Icon(Icons.warning, size: 48, color: Colors.red), + const SizedBox(height: 16), + Text( + "Your driver’s license and/or car tax has expired. Please renew them before proceeding." + .tr, + textAlign: TextAlign.center, + style: AppStyle.title, + ), + const SizedBox(height: 16), + IconButton( + onPressed: () async { + // await Get.find().speakText( + // 'Your driver’s license and/or car tax has expired. Please renew them before proceeding.' + // .tr, + // ); + }, + icon: const Icon(Icons.volume_up), + ), + ], + ), + actions: [ + TextButton( + onPressed: () { + Get.back(); + }, + child: const Text('OK'), + ), + ], + ); + } else if (isExpired) { + Get.defaultDialog( + title: 'Expired Driver’s License'.tr, + content: Column( + mainAxisSize: MainAxisSize.min, + children: [ + const Icon(Icons.warning, size: 48, color: Colors.red), + const SizedBox(height: 16), + Text( + "Your driver’s license has expired. Please renew it before proceeding." + .tr, + textAlign: TextAlign.center, + style: AppStyle.title, + ), + const SizedBox(height: 16), + IconButton( + onPressed: () async { + // await Get.find().speakText( + // 'Your driver’s license has expired. Please renew it before proceeding.' + // .tr, + // ); + }, + icon: const Icon(Icons.volume_up), + ), + ], + ), + actions: [ + TextButton( + onPressed: () { + Get.back(); + }, + child: const Text('OK'), + ), + ], + ); + } else if (responseIdEgyptDriverLicense['national_number'] + .toString() + .substring(0, 12) != + responseIdEgyptBack['nationalID'].toString().substring(0, 12)) { + Get.defaultDialog( + barrierDismissible: false, + title: 'ID Mismatch', + content: Column( + mainAxisSize: MainAxisSize.min, + children: [ + const Icon(Icons.warning, size: 48, color: Colors.red), + const SizedBox(height: 16), + Text( + "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents." + .tr, + textAlign: TextAlign.center, + style: AppStyle.title, + ), + const SizedBox(height: 16), + IconButton( + onPressed: () async { + // await Get.find().speakText( + // 'The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.', + // ); + }, + icon: const Icon(Icons.volume_up), + ), + ], + ), + actions: [ + TextButton( + onPressed: () { + Get.back(); + }, + child: const Text('OK'), + ), + ], + ); + } + // else if (responseCriminalRecordEgypt['FullName'] != + // responseIdEgyptDriverLicense['name_arabic']) { + // Get.defaultDialog( + // barrierDismissible: false, + // title: 'Criminal Record Mismatch', + // content: Column( + // mainAxisSize: MainAxisSize.min, + // children: [ + // const Icon(Icons.warning, size: 48, color: Colors.red), + // const SizedBox(height: 16), + // Text( + // 'The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.' + // .tr, + // textAlign: TextAlign.center, + // style: AppStyle.title, + // ), + // const SizedBox(height: 16), + // IconButton( + // onPressed: () async { + // await Get.find().speakText( + // 'The full name on your criminal record does not match the one on your driver’s license. Please verify and provide the correct documents.' + // .tr, + // ); + // }, + // icon: const Icon(Icons.volume_up), + // ), + // ], + // ), + // actions: [ + // TextButton( + // onPressed: () { + // Get.back(); + // }, + // child: const Text('OK'), + // ), + // ], + // ); + // } + else { + await addDriverEgypt(); + await addRegistrationCarEgypt(); + + if (isCarSaved && isDriverSaved) { + Get.snackbar('added', '', + backgroundColor: + AppColor.greenColor); // Get.offAll(() => HomeCaptain()); + // Get.offAll(() => HomeCaptain()); + } + } + } + + String extractDOB(String nationalNumber) { + if (nationalNumber.length != 14) { + throw ArgumentError('National number must be 14 digits long.'); + } + + // Extract the first digit to determine the century + String firstDigit = nationalNumber[0]; + + // Extract year, month, and day parts + String yearPart = nationalNumber.substring(1, 3); + String monthPart = nationalNumber.substring(3, 5); + String dayPart = nationalNumber.substring(5, 7); + + // Determine the year based on the first digit + int yearPrefix; + if (firstDigit == '2') { + yearPrefix = 1900; + } else if (firstDigit == '3') { + yearPrefix = 2000; + } else { + throw ArgumentError('Invalid first digit in national number.'); + } + + // Construct the full year + int year = yearPrefix + int.parse(yearPart); + + // Format the date as YYYY-MM-DD + String dob = + '$year-${monthPart.padLeft(2, '0')}-${dayPart.padLeft(2, '0')}'; + + return dob; + } + + Future addDriverEgypt() async { + isLoading = true; + update(); + + var payload = { + 'first_name': responseIdEgyptDriverLicense['firstName']?.toString() ?? + 'Not specified', + 'last_name': responseIdEgyptDriverLicense['lastName']?.toString() ?? + 'Not specified', + 'email': email?.toString() ?? 'Not specified', + 'phone': phone?.toString() ?? 'Not specified', + 'id': driverId?.toString() ?? 'Not specified', + 'password': '123456', + 'gender': responseIdEgyptBack['gender']?.toString() ?? 'Not specified', + 'license_type': + responseIdEgyptDriverLicense['license_type']?.toString() ?? + 'Not specified', + 'national_number': + responseIdEgyptBack['nationalID']?.toString() ?? 'Not specified', + 'name_arabic': responseIdEgyptDriverLicense['name_arabic']?.toString() ?? + 'Not specified', + 'name_english': + responseIdEgyptDriverLicense['name_english']?.toString() ?? + 'Not specified', + 'issue_date': responseIdEgyptDriverLicense['issue_date']?.toString() ?? + 'Not specified', + 'expiry_date': responseIdEgyptDriverLicense['expiry_date']?.toString() ?? + 'Not specified', + 'license_categories': responseIdEgyptDriverLicense['license_categories'] + is List + ? responseIdEgyptDriverLicense['license_categories'].join(', ') + : responseIdEgyptDriverLicense['license_categories']?.toString() ?? + 'Not specified', + 'address': responseIdEgyptFront['address']?.toString() ?? 'Not specified', + 'card_id': responseIdEgyptFront['card_id']?.toString() ?? 'Not specified', + 'occupation': + responseIdEgyptBack['occupation']?.toString() ?? 'Not specified', + 'education': + responseIdEgyptBack['occupation']?.toString() ?? 'Not specified', + 'licenseIssueDate': + responseIdEgyptDriverLicense['issue_date']?.toString() ?? + 'Not specified', + 'religion': + responseIdEgyptBack['religion']?.toString() ?? 'Not specified', + 'status': 'yet', + 'birthdate': extractDOB( + responseIdEgyptDriverLicense['national_number'].toString()), + 'maritalStatus': + responseIdEgyptBack['maritalStatus']?.toString() ?? 'Not specified', + 'site': responseIdEgyptDriverLicense['address']?.toString() ?? + 'Not specified', + 'employmentType': + responseIdEgyptDriverLicense['employmentType']?.toString() ?? + 'Not specified', + }; + var res = await CRUD().post(link: AppLink.signUpCaptin, payload: payload); + var status1 = jsonDecode(res); + isLoading = false; + update(); + // Handle response + if (status1['status'] == 'success') { + isDriverSaved = true; + Get.snackbar('Success', 'Driver data saved successfully', + backgroundColor: AppColor.greenColor); + } else { + Get.snackbar('Error', 'Failed to save driver data', + backgroundColor: Colors.red); + } + } + + Future addDriverEgyptHanding() async { + isLoading = true; + update(); + + var payload = { + 'first_name': firstName.value.isNotEmpty + ? firstName.value + : responseIdEgyptDriverLicense['firstName'], + 'last_name': lastName.value.isNotEmpty + ? lastName.value + : responseIdEgyptDriverLicense['lastName'], + 'email': email?.toString() ?? 'Not specified', + 'phone': phone?.toString() ?? 'Not specified', + 'id': driverId?.toString() ?? 'Not specified', + 'password': '123456', + 'gender': gender.value.isNotEmpty + ? gender.value + : responseIdEgyptBack['gender'], + 'license_type': licenseType.value.isNotEmpty + ? licenseType.value + : responseIdEgyptDriverLicense['license_type'], + 'national_number': nationalNumber.value.isNotEmpty + ? nationalNumber.value + : responseIdEgyptBack['nationalID'], + 'name_arabic': nameArabic.value.isNotEmpty + ? nameArabic.value + : responseIdEgyptDriverLicense['name_arabic'], + 'name_english': nameEnglish.value.isNotEmpty + ? nameEnglish.value + : responseIdEgyptDriverLicense['name_english'], + 'issue_date': issueDate.value.isNotEmpty + ? issueDate.value + : responseIdEgyptDriverLicense['issue_date'], + 'expiry_date': expiryDate.value.isNotEmpty + ? expiryDate.value + : responseIdEgyptDriverLicense['expiry_date'], + 'license_categories': licenseCategories.value.isNotEmpty + ? licenseCategories.value + : responseIdEgyptDriverLicense['license_categories'] is List + ? responseIdEgyptDriverLicense['license_categories'].join(', ') + : responseIdEgyptDriverLicense['license_categories'], + 'address': address.value.isNotEmpty + ? address.value + : responseIdEgyptFront['address'], + 'card_id': cardId.value.isNotEmpty + ? cardId.value + : responseIdEgyptFront['card_id'], + 'occupation': occupation.value.isNotEmpty + ? occupation.value + : responseIdEgyptBack['occupation'], + 'education': education.value.isNotEmpty + ? education.value + : responseIdEgyptDriverLicense['issue_date'], + 'licenseIssueDate': licenseIssueDate.value.isNotEmpty + ? licenseIssueDate.value + : responseIdEgyptBack['religion'], + 'religion': religion.value.isNotEmpty ? religion.value : 'Not specified', + 'status': status.value.isNotEmpty ? status.value : 'yet', + 'birthdate': birthdate.value.isNotEmpty + ? birthdate.value + : extractDOB( + responseIdEgyptDriverLicense['national_number'].toString()), + 'maritalStatus': maritalStatus.value.isNotEmpty + ? maritalStatus.value + : responseIdEgyptBack['maritalStatus'], + 'site': site.value.isNotEmpty + ? site.value + : responseIdEgyptDriverLicense['address'], + 'employmentType': employmentType.value.isNotEmpty + ? employmentType.value + : responseIdEgyptDriverLicense['employmentType'], + }; + + var res = await CRUD().post(link: AppLink.signUpCaptin, payload: payload); + var status1 = jsonDecode(res); + isLoading = false; + update(); + + // Handle response + if (status1['status'] == 'success') { + isDriverSaved = true; + Get.snackbar('Success', 'Driver data saved successfully', + backgroundColor: AppColor.greenColor); + } else { + Get.snackbar('Error', 'Failed to save driver data', + backgroundColor: Colors.red); + } + } + + addCriminalDeocuments() async { + var res = await CRUD().post(link: AppLink.addCriminalDocuments, payload: { + "driverId": box.read(BoxName.driverID), + "IssueDate": responseCriminalRecordEgypt['IssueDate'], + "InspectionResult": responseCriminalRecordEgypt['InspectionResult'], + }); + if (res != 'failure') { + Get.snackbar('uploaded sucssefuly'.tr, ''); + } + } + + var firstName = ''.obs; + var lastName = ''.obs; + var id = ''.obs; + var password = '123456'.obs; + var gender = ''.obs; + var licenseType = ''.obs; + var nationalNumber = ''.obs; + var nameArabic = ''.obs; + var nameEnglish = ''.obs; + var issueDate = ''.obs; + var expiryDate = ''.obs; + var licenseCategories = ''.obs; + var address = ''.obs; + var cardId = ''.obs; + var occupation = ''.obs; + var education = ''.obs; + var licenseIssueDate = ''.obs; + var religion = ''.obs; + var status = 'yet'.obs; + var birthdate = ''.obs; + var maritalStatus = ''.obs; + var site = ''.obs; + var employmentType = ''.obs; + var vin = ''.obs; + var carPlate = ''.obs; + var make = ''.obs; + var model = ''.obs; + var year = ''.obs; + var expirationDate = ''.obs; + var color = ''.obs; + var owner = ''.obs; + var colorHex = ''.obs; + var addressCar = ''.obs; + var displacement = ''.obs; + var fuel = ''.obs; + var registrationDate = ''.obs; + + Future addRegistrationCarEgypt() async { + try { + final inspectionDate = + responseIdCardDriverEgyptBack['inspection_date'].toString(); + final year = int.parse(inspectionDate.split('-')[0]); + final inspectionDateTime = DateTime(year, 12, 31); + isLoading = true; + update(); + var res = await CRUD().post(link: AppLink.addRegisrationCar, payload: { + 'driverID': driverId, + 'vin': responseIdCardDriverEgyptBack['chassis'].toString(), + 'car_plate': responseIdCardDriverEgyptFront['car_plate'].toString(), + 'make': responseIdCardDriverEgyptBack['make'].toString(), + 'model': responseIdCardDriverEgyptBack['model'], + 'year': responseIdCardDriverEgyptBack['year'].toString(), + 'expiration_date': + responseIdCardDriverEgyptFront['LicenseExpirationDate'].toString(), + 'color': responseIdCardDriverEgyptBack['color'], + 'owner': responseIdCardDriverEgyptFront['owner'], + 'color_hex': responseIdCardDriverEgyptBack['color_hex'].toString(), + 'address': responseIdCardDriverEgyptFront['address'].toString(), + 'displacement': responseIdCardDriverEgyptBack['engine'].toString(), + 'fuel': responseIdCardDriverEgyptBack['fuel'].toString(), + 'registration_date': '$inspectionDateTime', + }); + isLoading = false; + update(); + var status = jsonDecode(res); + if (status['status'] == 'success') { + isCarSaved = true; + Get.snackbar('Success', 'message', + backgroundColor: AppColor.greenColor); + } + } catch (e) {} + } + + Future addRegistrationCarEgyptHandling() async { + try { + final inspectionDate = + responseIdCardDriverEgyptBack['inspection_date']?.toString() ?? ''; + final year = inspectionDate.isNotEmpty + ? int.parse(inspectionDate.split('-')[0]) + : DateTime.now().year; + final inspectionDateTime = DateTime(year, 12, 31); + Log.print('inspectionDateTime: $inspectionDateTime'); + + isLoading = true; + update(); + + var payload = { + 'driverID': driverId, + 'vin': vin.value.isNotEmpty + ? vin.value + : responseIdCardDriverEgyptBack['chassis']?.toString() ?? '', + 'car_plate': carPlate.value.isNotEmpty + ? carPlate.value + : responseIdCardDriverEgyptFront['car_plate']?.toString() ?? '', + 'make': make.value.isNotEmpty + ? make.value + : responseIdCardDriverEgyptBack['make']?.toString() ?? '', + 'model': model.value.isNotEmpty + ? model.value + : responseIdCardDriverEgyptBack['model']?.toString() ?? '', + 'year': year.toString(), + 'expiration_date': expirationDate.value.isNotEmpty + ? expirationDate.value + : responseIdCardDriverEgyptFront['LicenseExpirationDate'] + ?.toString() ?? + '', + 'color': color.value.isNotEmpty + ? color.value + : responseIdCardDriverEgyptFront['color']?.toString() ?? '', + 'owner': owner.value.isNotEmpty + ? owner.value + : responseIdCardDriverEgyptFront['owner']?.toString() ?? '', + 'color_hex': getColorHex(color.value), + 'address': addressCar.value.isNotEmpty + ? addressCar.value + : responseIdCardDriverEgyptFront['address']?.toString() ?? '', + 'displacement': displacement.value.isNotEmpty + ? displacement.value + : responseIdCardDriverEgyptBack['engine']?.toString() ?? '', + 'fuel': fuel.value.isNotEmpty + ? fuel.value + : responseIdCardDriverEgyptBack['fuel']?.toString() ?? '', + 'registration_date': inspectionDateTime.toIso8601String(), + }; + + Log.print('Payload: $payload'); + + var res = + await CRUD().post(link: AppLink.addRegisrationCar, payload: payload); + + isLoading = false; + update(); + + var status = jsonDecode(res); + Log.print('res: $res'); + Log.print('status: $status'); + + if (status['status'] == 'success') { + isCarSaved = true; + Get.snackbar('Success', 'Registration successful', + backgroundColor: AppColor.greenColor); + Get.back(); + } else { + Log.print('Error: Unexpected status: ${status['status']}'); + Get.snackbar('Error', 'Registration failed', + backgroundColor: Colors.red); + } + } catch (e) { + Log.print('Error: $e'); + Get.snackbar('Error', 'An error occurred during registration', + backgroundColor: Colors.red); + } + } + + String getColorHex(String colorName) { + Map colorMap = { + 'red'.tr: '#FF0000', + 'green'.tr: '#008000', + 'blue'.tr: '#0000FF', + 'black'.tr: '#000000', + 'white'.tr: '#FFFFFF', + 'yellow'.tr: '#FFFF00', + 'purple'.tr: '#800080', + 'orange'.tr: '#FFA500', + 'pink'.tr: '#FFC0CB', + 'brown'.tr: '#A52A2A', + 'gray'.tr: '#808080', + 'cyan'.tr: '#00FFFF', + 'magenta'.tr: '#FF00FF', + 'lime'.tr: '#00FF00', + 'indigo'.tr: '#4B0082', + 'violet'.tr: '#EE82EE', + 'gold'.tr: '#FFD700', + 'silver'.tr: '#C0C0C0', + 'teal'.tr: '#008080', + 'navy'.tr: '#000080', + 'Eggplant'.tr: '#800000', // Eggplant + 'Dark Red'.tr: '#8B0000', // Dark Red (Maroon) + 'Sky Blue'.tr: '#87CEEB', // Sky Blue + 'Mocha'.tr: '#C3B091', // Mocha + }; + + return colorMap[colorName.toLowerCase()] ?? + '#000000'; // Default to black if color name is not found + } + + Future getComplaintDataToAI() async { + var res = await CRUD().get( + link: AppLink.getComplaintAllDataForDriver, + payload: {'driver_id': driverId.toString()}, + ); + if (res != 'failure') { + var d = jsonDecode(res)['message']; + return d; + } else { + return [ + {'data': 'no data'} + ]; + } + } + + Future anthropicAIForComplaint() async { + var dataComplaint = await getComplaintDataToAI(); + var messagesData = [ + { + "role": "user", + "content": [ + { + "type": "text", + "text": "$dataComplaint ${AppInformation.complaintPrompt} " + } + ] + } + ]; + var requestBody = jsonEncode({ + "model": "claude-3-haiku-20240307", + "max_tokens": 1024, + "temperature": 0, + "system": "Json output only without any additional ", + "messages": messagesData, + }); + final response = await http.post( + Uri.parse('https://api.anthropic.com/v1/messages'), + headers: { + 'x-api-key': AK.anthropicAIkeySeferNew, + 'anthropic-version': '2023-06-01', + 'content-type': 'application/json' + }, + body: requestBody, + ); + if (response.statusCode == 200) { + var responseData = jsonDecode(utf8.decode(response.bodyBytes)); + // Process the responseData as needed + + responseForComplaint = jsonDecode(responseData['content'][0]['text']); + } + } + + Future anthropicAI( + String payload, String prompt, String idType) async { + var messagesData = [ + { + "role": "user", + "content": [ + {"type": "text", "text": "$payload $prompt"} + ] + } + ]; + + var requestBody = jsonEncode({ + "model": "claude-3-haiku-20240307", + "max_tokens": 1024, + "temperature": 0, + "system": "Json output only without any additional ", + "messages": messagesData, + }); + + final response = await http.post( + Uri.parse('https://api.anthropic.com/v1/messages'), + headers: { + 'x-api-key': AK.anthropicAIkeySeferNew, + 'anthropic-version': '2023-06-01', + 'content-type': 'application/json' + }, + body: requestBody, + ); + + if (response.statusCode == 200) { + var responseData = jsonDecode(utf8.decode(response.bodyBytes)); + // Process the responseData as needed + if (idType == 'car_back') { + responseIdCardDriverEgyptBack = + jsonDecode(responseData['content'][0]['text']); + } else if (idType == 'car_front') { + responseIdCardDriverEgyptFront = + jsonDecode(responseData['content'][0]['text']); + } else if (idType == 'id_front') { + responseIdEgyptFront = jsonDecode(responseData['content'][0]['text']); + } else if (idType == 'id_back') { + responseIdEgyptBack = jsonDecode(responseData['content'][0]['text']); + } else if (idType == 'driver_license') { + responseIdEgyptDriverLicense = + jsonDecode(responseData['content'][0]['text']); + } else if (idType == 'criminalRecord') { + responseCriminalRecordEgypt = + jsonDecode(responseData['content'][0]['text']); + } + + update(); + return responseData.toString(); + } + return responseIdCardDriverEgyptBack.toString(); + } + + Future geminiAiExtraction(String prompt, payload, String idType) async { + var requestBody = jsonEncode({ + "contents": [ + { + "parts": [ + {"text": "$payload $prompt"} + ] + } + ], + "generationConfig": { + "temperature": 1, + "topK": 64, + "topP": 0.95, + "maxOutputTokens": 8192, + "stopSequences": [] + }, + "safetySettings": [ + { + "category": "HARM_CATEGORY_HARASSMENT", + "threshold": "BLOCK_MEDIUM_AND_ABOVE" + }, + { + "category": "HARM_CATEGORY_HATE_SPEECH", + "threshold": "BLOCK_MEDIUM_AND_ABOVE" + }, + { + "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", + "threshold": "BLOCK_MEDIUM_AND_ABOVE" + }, + { + "category": "HARM_CATEGORY_DANGEROUS_CONTENT", + "threshold": "BLOCK_MEDIUM_AND_ABOVE" + } + ] + }); + + final response = await http.post( + Uri.parse(''), + // 'https://generativelanguage.googleapis.com/v1beta/models/gemini-pro-vision:generateContent?key=${AK.geminiApi}'), + // 'https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-pro-latest:generateContent?key=${AK.geminiApi}'), + // 'https://generativelanguage.googleapis.com/v1beta/models/gemini-1.0-pro:generateContent?key=${AK.geminiApi}'), + headers: {'Content-Type': 'application/json'}, + body: requestBody, + ); + + if (response.statusCode == 200) { + var responseData = jsonDecode(response.body); + // Process the responseData as needed + + var result = responseData['candidates'][0]['content']['parts'][0]['text']; + RegExp regex = RegExp(r"```json([^`]*)```"); + String? jsonString = + regex.firstMatch(responseData.toString())?.group(1)?.trim(); + + if (jsonString != null) { + // Convert the JSON object to a String + jsonString = jsonEncode(json.decode(jsonString)); + + if (idType == 'car_back') { + responseIdCardDriverEgyptBack = jsonDecode(jsonString); + } else if (idType == 'car_front') { + responseIdCardDriverEgyptFront = jsonDecode(jsonString); + } else if (idType == 'id_front') { + responseIdEgyptFront = jsonDecode(jsonString); + } else if (idType == 'id_back') { + responseIdEgyptBack = jsonDecode(jsonString); + } else if (idType == 'driver_license') { + responseIdEgyptDriverLicense = jsonDecode(jsonString); + } + + update(); + } else { + Get.snackbar('Error', "JSON string not found", + backgroundColor: AppColor.redColor); + } + + // Rest of your code... + } else {} + } +} diff --git a/lib/controller/themes/themes.dart b/lib/controller/themes/themes.dart new file mode 100644 index 0000000..c583699 --- /dev/null +++ b/lib/controller/themes/themes.dart @@ -0,0 +1,59 @@ +import 'package:flutter/material.dart'; + +import '../../constant/colors.dart'; +import '../../constant/style.dart'; + +ThemeData themeEnglish = ThemeData( + fontFamily: "PlayfairDisplay", + textTheme: TextTheme( + displaySmall: AppStyle.title, + displayLarge: AppStyle.title, + displayMedium: AppStyle.title, + bodyLarge: AppStyle.title, + bodyMedium: AppStyle.title), + primarySwatch: Colors.blue, + dialogTheme: DialogTheme( + backgroundColor: AppColor.secondaryColor, + contentTextStyle: AppStyle.title, + titleTextStyle: AppStyle.title, + ), + appBarTheme: AppBarTheme( + elevation: 0, + color: AppColor.secondaryColor, + centerTitle: true, + iconTheme: const IconThemeData( + color: AppColor.primaryColor, + ), + toolbarTextStyle: TextTheme( + titleSmall: AppStyle.subtitle, + headlineSmall: AppStyle.title, + titleLarge: AppStyle.headTitle2) + .bodyMedium, + titleTextStyle: TextTheme( + titleSmall: AppStyle.subtitle, + headlineSmall: AppStyle.title, + titleLarge: AppStyle.headTitle2) + .titleLarge, + ), +); + +ThemeData themeArabic = ThemeData( + fontFamily: "Cairo", + textTheme: const TextTheme( + displayLarge: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 22, + color: AppColor.primaryColor), + displayMedium: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 26, + color: AppColor.primaryColor), + bodyLarge: TextStyle( + height: 2, + color: AppColor.accentColor, + fontWeight: FontWeight.bold, + fontSize: 14), + bodyMedium: + TextStyle(height: 2, color: AppColor.accentColor, fontSize: 14)), + primarySwatch: Colors.blue, +); diff --git a/lib/env/env.dart b/lib/env/env.dart new file mode 100644 index 0000000..f1922f6 --- /dev/null +++ b/lib/env/env.dart @@ -0,0 +1,185 @@ +import 'package:envied/envied.dart'; + +part 'env.g.dart'; + +@Envied() +abstract class Env { + @EnviedField(varName: 'basicAuthCredentials', obfuscate: true) + static final String basicAuthCredentials = _Env.basicAuthCredentials; + + @EnviedField(varName: 'visionApi', obfuscate: true) + static final String visionApi = _Env.visionApi; + + @EnviedField(varName: 'smsPasswordEgypt', obfuscate: true) + static final String smsPasswordEgypt = _Env.smsPasswordEgypt; + + @EnviedField(varName: 'ocpApimSubscriptionKey', obfuscate: true) + static final String ocpApimSubscriptionKey = _Env.ocpApimSubscriptionKey; + + @EnviedField(varName: 'serverPHP', obfuscate: true) + static final String serverPHP = _Env.serverPHP; + + @EnviedField(varName: 'anthropicAIkeySeferNew', obfuscate: true) + static final String anthropicAIkeySeferNew = _Env.anthropicAIkeySeferNew; + + @EnviedField(varName: 'A', obfuscate: true) + static final String A = _Env.A; + + @EnviedField(varName: 'B', obfuscate: true) + static final String B = _Env.B; + + @EnviedField(varName: 'C', obfuscate: true) + static final String C = _Env.C; + + @EnviedField(varName: 'D', obfuscate: true) + static final String D = _Env.D; + + @EnviedField(varName: 'E', obfuscate: true) + static final String E = _Env.E; + + @EnviedField(varName: 'F', obfuscate: true) + static final String F = _Env.F; + + @EnviedField(varName: 'G', obfuscate: true) + static final String G = _Env.G; + + @EnviedField(varName: 'H', obfuscate: true) + static final String H = _Env.H; + + @EnviedField(varName: 'I', obfuscate: true) + static final String I = _Env.I; + + @EnviedField(varName: 'J', obfuscate: true) + static final String J = _Env.J; + + @EnviedField(varName: 'K', obfuscate: true) + static final String K = _Env.K; + + @EnviedField(varName: 'L', obfuscate: true) + static final String L = _Env.L; + + @EnviedField(varName: 'M', obfuscate: true) + static final String M = _Env.M; + + @EnviedField(varName: 'N', obfuscate: true) + static final String N = _Env.N; + + @EnviedField(varName: 'O', obfuscate: true) + static final String O = _Env.O; + + @EnviedField(varName: 'P', obfuscate: true) + static final String P = _Env.P; + + @EnviedField(varName: 'Q', obfuscate: true) + static final String Q = _Env.Q; + + @EnviedField(varName: 'R', obfuscate: true) + static final String R = _Env.R; + + @EnviedField(varName: 'S', obfuscate: true) + static final String S = _Env.S; + + @EnviedField(varName: 'T', obfuscate: true) + static final String T = _Env.T; + + @EnviedField(varName: 'U', obfuscate: true) + static final String U = _Env.U; + + @EnviedField(varName: 'V', obfuscate: true) + static final String V = _Env.V; + + @EnviedField(varName: 'W', obfuscate: true) + static final String W = _Env.W; + + @EnviedField(varName: 'X', obfuscate: true) + static final String X = _Env.X; + + @EnviedField(varName: 'Y', obfuscate: true) + static final String Y = _Env.Y; + + @EnviedField(varName: 'Z', obfuscate: true) + static final String Z = _Env.Z; + @EnviedField(varName: 'a', obfuscate: true) + static final String a = _Env.a; + + @EnviedField(varName: 'b', obfuscate: true) + static final String b = _Env.b; + + @EnviedField(varName: 'c', obfuscate: true) + static final String c = _Env.c; + + @EnviedField(varName: 'd', obfuscate: true) + static final String d = _Env.d; + + @EnviedField(varName: 'e', obfuscate: true) + static final String e = _Env.e; + + @EnviedField(varName: 'f', obfuscate: true) + static final String f = _Env.f; + + @EnviedField(varName: 'g', obfuscate: true) + static final String g = _Env.g; + + @EnviedField(varName: 'h', obfuscate: true) + static final String h = _Env.h; + + @EnviedField(varName: 'i', obfuscate: true) + static final String i = _Env.i; + + @EnviedField(varName: 'j', obfuscate: true) + static final String j = _Env.j; + + @EnviedField(varName: 'k', obfuscate: true) + static final String k = _Env.k; + + @EnviedField(varName: 'l', obfuscate: true) + static final String l = _Env.l; + + @EnviedField(varName: 'm', obfuscate: true) + static final String m = _Env.m; + + @EnviedField(varName: 'n', obfuscate: true) + static final String n = _Env.n; + + @EnviedField(varName: 'o', obfuscate: true) + static final String o = _Env.o; + + @EnviedField(varName: 'p', obfuscate: true) + static final String p = _Env.p; + + @EnviedField(varName: 'q', obfuscate: true) + static final String q = _Env.q; + + @EnviedField(varName: 'r', obfuscate: true) + static final String r = _Env.r; + + @EnviedField(varName: 's', obfuscate: true) + static final String s = _Env.s; + + @EnviedField(varName: 't', obfuscate: true) + static final String t = _Env.t; + + @EnviedField(varName: 'u', obfuscate: true) + static final String u = _Env.u; + + @EnviedField(varName: 'v', obfuscate: true) + static final String v = _Env.v; + + @EnviedField(varName: 'w', obfuscate: true) + static final String w = _Env.w; + + @EnviedField(varName: 'x', obfuscate: true) + static final String x = _Env.x; + + @EnviedField(varName: 'y', obfuscate: true) + static final String y = _Env.y; + + @EnviedField(varName: 'z', obfuscate: true) + static final String z = _Env.z; + + @EnviedField(varName: 'emailService', obfuscate: true) + static final String emailService = _Env.emailService; + + @EnviedField(varName: 'keyOfApp', obfuscate: true) + static final String keyOfApp = _Env.keyOfApp; +} diff --git a/lib/env/env.g.dart b/lib/env/env.g.dart new file mode 100644 index 0000000..3c4ca5c --- /dev/null +++ b/lib/env/env.g.dart @@ -0,0 +1,1276 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'env.dart'; + +// ************************************************************************** +// EnviedGenerator +// ************************************************************************** + +// coverage:ignore-file +// ignore_for_file: type=lint +final class _Env { + static const List _enviedkeybasicAuthCredentials = [ + 4271332490, + 741285038, + 3890551357, + 2969468822, + 3298912777, + 285971608, + 734512416, + 3966720953, + 3669772569, + 4029650785, + 2365909470, + 3252048899, + 665085524, + 882337256, + 1775379256, + 782629773, + 1653524737, + 1581541550, + 2131008669, + 1480927037, + 2381996087, + 209491040, + 3781262706, + 2865596003, + 1189563889, + 3635375786, + 2370642200, + 1527164422, + 3462851634, + 453178882, + ]; + + static const List _envieddatabasicAuthCredentials = [ + 4271332605, + 741285087, + 3890551379, + 2969468923, + 3298912888, + 285971689, + 734512467, + 3966720979, + 3669772640, + 4029650711, + 2365909417, + 3252049013, + 665085550, + 882337158, + 1775379273, + 782629887, + 1653524824, + 1581541604, + 2131008717, + 1480927101, + 2381996038, + 209491031, + 3781262657, + 2865595988, + 1189563817, + 3635375832, + 2370642240, + 1527164522, + 3462851696, + 453178990, + ]; + + static final String basicAuthCredentials = String.fromCharCodes( + List.generate( + _envieddatabasicAuthCredentials.length, + (int i) => i, + growable: false, + ).map((int i) => + _envieddatabasicAuthCredentials[i] ^ + _enviedkeybasicAuthCredentials[i])); + + static const List _enviedkeyvisionApi = [ + 2195418489, + 1438376812, + 3205076404, + 2052134025, + 405486497, + 2457944955, + 3288645880, + 4284106946, + 3492464021, + 2029567873, + 2216743504, + 4134329042, + 490044520, + 664536439, + 2469587509, + 4006796325, + 3356872204, + 2845233252, + 2514268427, + 1806105889, + 2777769828, + 3866348895, + 2287948427, + 3559167301, + 1485512721, + 1406023785, + 3337847444, + 3883305539, + 1056144763, + 2881637106, + 3587627574, + 1998051979, + 983706298, + 1797213595, + 3131855867, + 666688344, + 149645933, + 3773683369, + ]; + + static const List _envieddatavisionApi = [ + 2195418442, + 1438376732, + 3205076469, + 2052134085, + 405486546, + 2457944842, + 3288645803, + 4284106897, + 3492464076, + 2029567957, + 2216743462, + 4134329000, + 490044440, + 664536385, + 2469587468, + 4006796404, + 3356872249, + 2845233186, + 2514268486, + 1806105960, + 2777769731, + 3866348861, + 2287948529, + 3559167279, + 1485512790, + 1406023775, + 3337847502, + 3883305586, + 1056144641, + 2881637017, + 3587627586, + 1998052033, + 983706338, + 1797213673, + 3131855779, + 666688308, + 149645871, + 3773683397, + ]; + + static final String visionApi = String.fromCharCodes(List.generate( + _envieddatavisionApi.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatavisionApi[i] ^ _enviedkeyvisionApi[i])); + + static const List _enviedkeysmsPasswordEgypt = [ + 2247798146, + 2163977542, + 29050108, + 1880417915, + 1497579982, + 3337593391, + 1680910399, + 3789186271, + 2550779950, + 2794956908, + 923602056, + 3927690241, + 162095915, + 3689776503, + 72608618, + 127437252, + ]; + + static const List _envieddatasmsPasswordEgypt = [ + 2247798216, + 2163977583, + 29050026, + 1880417811, + 1497580019, + 3337593438, + 1680910429, + 3789186288, + 2550780014, + 2794956833, + 923602128, + 3927690355, + 162095987, + 3689776411, + 72608552, + 127437224, + ]; + + static final String smsPasswordEgypt = String.fromCharCodes( + List.generate( + _envieddatasmsPasswordEgypt.length, + (int i) => i, + growable: false, + ).map((int i) => + _envieddatasmsPasswordEgypt[i] ^ _enviedkeysmsPasswordEgypt[i])); + + static const List _enviedkeyocpApimSubscriptionKey = [ + 160401101, + 467780958, + 941458277, + 2062952547, + 834902546, + 1939352146, + 130767826, + 3537236756, + 4097656136, + 2941876117, + 2667002599, + 2565141654, + 812262258, + 788543938, + 1982631524, + 1205909072, + 2134319838, + 3007453817, + 1946150072, + 963843122, + 2759454558, + 425256588, + 1264872793, + 1971284826, + 689324380, + 2298006332, + 1376986613, + 1640910083, + 2844639101, + 1644650037, + 1835692850, + 2872069392, + ]; + + static const List _envieddataocpApimSubscriptionKey = [ + 160401149, + 467780920, + 941458256, + 2062952455, + 834902643, + 1939352113, + 130767793, + 3537236855, + 4097656108, + 2941876215, + 2667002500, + 2565141747, + 812262214, + 788543987, + 1982631511, + 1205909089, + 2134319804, + 3007453768, + 1946150105, + 963843079, + 2759454520, + 425256629, + 1264872812, + 1971284840, + 689324389, + 2298006277, + 1376986563, + 1640910128, + 2844639053, + 1644649991, + 1835692887, + 2872069411, + ]; + + static final String ocpApimSubscriptionKey = String.fromCharCodes( + List.generate( + _envieddataocpApimSubscriptionKey.length, + (int i) => i, + growable: false, + ).map((int i) => + _envieddataocpApimSubscriptionKey[i] ^ + _enviedkeyocpApimSubscriptionKey[i])); + + static const List _enviedkeyserverPHP = [ + 3339055252, + 1947180857, + 122716488, + 2641116858, + 1502729916, + 604625745, + 3666906835, + 1765598889, + 979829229, + 162149189, + 1218274121, + 1479277938, + 2258459999, + 1864840930, + 2718131683, + 1370915420, + 1921531757, + 4204494046, + 394217454, + 749171991, + 1403838915, + 3084842735, + 1702460263, + 2381658546, + 2713574400, + 3306975509, + 3451414090, + 1614776215, + ]; + + static const List _envieddataserverPHP = [ + 3339055356, + 1947180877, + 122716476, + 2641116874, + 1502729935, + 604625771, + 3666906876, + 1765598854, + 979829132, + 162149173, + 1218274080, + 1479277916, + 2258459948, + 1864840839, + 2718131589, + 1370915385, + 1921531679, + 4204494064, + 394217346, + 749172094, + 1403838901, + 3084842634, + 1702460232, + 2381658561, + 2713574501, + 3306975603, + 3451414063, + 1614776293, + ]; + + static final String serverPHP = String.fromCharCodes(List.generate( + _envieddataserverPHP.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataserverPHP[i] ^ _enviedkeyserverPHP[i])); + + static const List _enviedkeyanthropicAIkeySeferNew = [ + 2611045148, + 335904894, + 631235918, + 3093245005, + 1611020031, + 1673133536, + 3227501371, + 3182450493, + 1191896880, + 2980551565, + 2940153520, + 2543400596, + 1260759781, + 2888239686, + 2459278622, + 1885772041, + 3292697462, + 3943802616, + 3743215262, + 1166282399, + 677963534, + 1889399300, + 2317986828, + 844883764, + 2006558403, + 3471706808, + 1406396403, + 4212693549, + 3470505618, + 1662836814, + 3107737028, + 714492230, + 450840923, + 258707320, + 1765257202, + 2353804053, + 348871133, + 3884878411, + 2098167478, + 3352252201, + 2919962250, + 2707095372, + 3333151500, + 1602567700, + 474624510, + 1138090226, + 370915373, + 2059519836, + 3887048375, + 3154656834, + 165843811, + 2888067078, + 1226231041, + 3250369623, + 2588594584, + 1951636401, + 1963034280, + 1950210541, + 663666461, + 3489093475, + 1378097227, + 3272037870, + 3918731095, + 3610020500, + 570652256, + 4056716478, + 1576546559, + 97734187, + 771505336, + 3883123376, + 3479639395, + 3767805689, + 3582492146, + 3095177960, + 1853565518, + 2341951288, + 3438421981, + 1041733896, + 2276459457, + 232938143, + 1867483501, + 2301556629, + 2362646200, + 3255691225, + 446925541, + 3189649080, + 2481264299, + 194267208, + 3032808315, + 2987335625, + 228008653, + 508628288, + 1876807280, + 408533642, + 3057417854, + 1713617172, + 3610082797, + 188064665, + 3025957411, + 3442342821, + 597663524, + 2985655156, + 3952925594, + 2836480569, + 1251317244, + 1966349982, + 3132122965, + 2391408049, + 2746282420, + 1468910323, + 3153895347, + 3043301972, + 3647350752, + 168504020, + ]; + + static const List _envieddataanthropicAIkeySeferNew = [ + 2611045222, + 335904793, + 631235939, + 3093244988, + 1611019933, + 1673133443, + 3227501334, + 3182450508, + 1191896902, + 2980551650, + 2940153475, + 2543400621, + 1260759752, + 2888239656, + 2459278634, + 1885772127, + 3292697362, + 3943802549, + 3743215311, + 1166282410, + 677963616, + 1889399409, + 2317986886, + 844883793, + 2006558346, + 3471706849, + 1406396315, + 4212693600, + 3470505692, + 1662836858, + 3107736980, + 714492162, + 450840834, + 258707210, + 1765257157, + 2353804132, + 348871090, + 3884878387, + 2098167429, + 3352252164, + 2919962366, + 2707095422, + 3333151589, + 1602567717, + 474624434, + 1138090138, + 370915354, + 2059519805, + 3887048441, + 3154656790, + 165843751, + 2888067168, + 1226231128, + 3250369553, + 2588594613, + 1951636470, + 1963034318, + 1950210517, + 663666538, + 3489093387, + 1378097182, + 3272037796, + 3918731021, + 3610020567, + 570652179, + 4056716426, + 1576546504, + 97734254, + 771505373, + 3883123413, + 3479639311, + 3767805618, + 3582492060, + 3095177936, + 1853565457, + 2341951341, + 3438421950, + 1041733989, + 2276459412, + 232938194, + 1867483392, + 2301556732, + 2362646251, + 3255691157, + 446925444, + 3189649118, + 2481264283, + 194267165, + 3032808241, + 2987335598, + 228008701, + 508628228, + 1876807174, + 408533727, + 3057417746, + 1713617221, + 3610082719, + 188064733, + 3025957463, + 3442342792, + 597663507, + 2985655106, + 3952925657, + 2836480619, + 1251317134, + 1966350069, + 3132122884, + 2391408096, + 2746282476, + 1468910209, + 3153895403, + 3043301944, + 3647350690, + 168503992, + ]; + + static final String anthropicAIkeySeferNew = String.fromCharCodes( + List.generate( + _envieddataanthropicAIkeySeferNew.length, + (int i) => i, + growable: false, + ).map((int i) => + _envieddataanthropicAIkeySeferNew[i] ^ + _enviedkeyanthropicAIkeySeferNew[i])); + + static const List _enviedkeyA = [554468137]; + + static const List _envieddataA = [554468216]; + + static final String A = String.fromCharCodes(List.generate( + _envieddataA.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataA[i] ^ _enviedkeyA[i])); + + static const List _enviedkeyB = [3764276200]; + + static const List _envieddataB = [3764276144]; + + static final String B = String.fromCharCodes(List.generate( + _envieddataB.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataB[i] ^ _enviedkeyB[i])); + + static const List _enviedkeyC = [3984768381]; + + static const List _envieddataC = [3984768315]; + + static final String C = String.fromCharCodes(List.generate( + _envieddataC.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataC[i] ^ _enviedkeyC[i])); + + static const List _enviedkeyD = [879813472]; + + static const List _envieddataD = [879813433]; + + static final String D = String.fromCharCodes(List.generate( + _envieddataD.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataD[i] ^ _enviedkeyD[i])); + + static const List _enviedkeyE = [3674144091]; + + static const List _envieddataE = [3674144017]; + + static final String E = String.fromCharCodes(List.generate( + _envieddataE.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataE[i] ^ _enviedkeyE[i])); + + static const List _enviedkeyF = [3833220904]; + + static const List _envieddataF = [3833220989]; + + static final String F = String.fromCharCodes(List.generate( + _envieddataF.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataF[i] ^ _enviedkeyF[i])); + + static const List _enviedkeyG = [994528426]; + + static const List _envieddataG = [994528481]; + + static final String G = String.fromCharCodes(List.generate( + _envieddataG.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataG[i] ^ _enviedkeyG[i])); + + static const List _enviedkeyH = [1698644610]; + + static const List _envieddataH = [1698644693]; + + static final String H = String.fromCharCodes(List.generate( + _envieddataH.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataH[i] ^ _enviedkeyH[i])); + + static const List _enviedkeyI = [3495943914]; + + static const List _envieddataI = [3495943845]; + + static final String I = String.fromCharCodes(List.generate( + _envieddataI.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataI[i] ^ _enviedkeyI[i])); + + static const List _enviedkeyJ = [128717529]; + + static const List _envieddataJ = [128717468]; + + static final String J = String.fromCharCodes(List.generate( + _envieddataJ.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataJ[i] ^ _enviedkeyJ[i])); + + static const List _enviedkeyK = [2336248456]; + + static const List _envieddataK = [2336248527]; + + static final String K = String.fromCharCodes(List.generate( + _envieddataK.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataK[i] ^ _enviedkeyK[i])); + + static const List _enviedkeyL = [3279279913]; + + static const List _envieddataL = [3279279995]; + + static final String L = String.fromCharCodes(List.generate( + _envieddataL.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataL[i] ^ _enviedkeyL[i])); + + static const List _enviedkeyM = [3873082713]; + + static const List _envieddataM = [3873082647]; + + static final String M = String.fromCharCodes(List.generate( + _envieddataM.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataM[i] ^ _enviedkeyM[i])); + + static const List _enviedkeyN = [732159427]; + + static const List _envieddataN = [732159361]; + + static final String N = String.fromCharCodes(List.generate( + _envieddataN.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataN[i] ^ _enviedkeyN[i])); + + static const List _enviedkeyO = [81094435]; + + static const List _envieddataO = [81094506]; + + static final String O = String.fromCharCodes(List.generate( + _envieddataO.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataO[i] ^ _enviedkeyO[i])); + + static const List _enviedkeyP = [4050563990]; + + static const List _envieddataP = [4050564032]; + + static final String P = String.fromCharCodes(List.generate( + _envieddataP.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataP[i] ^ _enviedkeyP[i])); + + static const List _enviedkeyQ = [3149519534]; + + static const List _envieddataQ = [3149519599]; + + static final String Q = String.fromCharCodes(List.generate( + _envieddataQ.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataQ[i] ^ _enviedkeyQ[i])); + + static const List _enviedkeyR = [894101604]; + + static const List _envieddataR = [894101544]; + + static final String R = String.fromCharCodes(List.generate( + _envieddataR.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataR[i] ^ _enviedkeyR[i])); + + static const List _enviedkeyS = [2126030903]; + + static const List _envieddataS = [2126030957]; + + static final String S = String.fromCharCodes(List.generate( + _envieddataS.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataS[i] ^ _enviedkeyS[i])); + + static const List _enviedkeyT = [3226089034]; + + static const List _envieddataT = [3226088969]; + + static final String T = String.fromCharCodes(List.generate( + _envieddataT.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataT[i] ^ _enviedkeyT[i])); + + static const List _enviedkeyU = [3539988209]; + + static const List _envieddataU = [3539988153]; + + static final String U = String.fromCharCodes(List.generate( + _envieddataU.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataU[i] ^ _enviedkeyU[i])); + + static const List _enviedkeyV = [3367719973]; + + static const List _envieddataV = [3367720053]; + + static final String V = String.fromCharCodes(List.generate( + _envieddataV.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataV[i] ^ _enviedkeyV[i])); + + static const List _enviedkeyW = [2753593982]; + + static const List _envieddataW = [2753593898]; + + static final String W = String.fromCharCodes(List.generate( + _envieddataW.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataW[i] ^ _enviedkeyW[i])); + + static const List _enviedkeyX = [926765366]; + + static const List _envieddataX = [926765426]; + + static final String X = String.fromCharCodes(List.generate( + _envieddataX.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataX[i] ^ _enviedkeyX[i])); + + static const List _enviedkeyY = [2011767360]; + + static const List _envieddataY = [2011767315]; + + static final String Y = String.fromCharCodes(List.generate( + _envieddataY.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataY[i] ^ _enviedkeyY[i])); + + static const List _enviedkeyZ = [4238677823]; + + static const List _envieddataZ = [4238677874]; + + static final String Z = String.fromCharCodes(List.generate( + _envieddataZ.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataZ[i] ^ _enviedkeyZ[i])); + + static const List _enviedkeya = [3204845275]; + + static const List _envieddataa = [3204845226]; + + static final String a = String.fromCharCodes(List.generate( + _envieddataa.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataa[i] ^ _enviedkeya[i])); + + static const List _enviedkeyb = [4211609872]; + + static const List _envieddatab = [4211609960]; + + static final String b = String.fromCharCodes(List.generate( + _envieddatab.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatab[i] ^ _enviedkeyb[i])); + + static const List _enviedkeyc = [258792921]; + + static const List _envieddatac = [258792895]; + + static final String c = String.fromCharCodes(List.generate( + _envieddatac.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatac[i] ^ _enviedkeyc[i])); + + static const List _enviedkeyd = [589940007]; + + static const List _envieddatad = [589940062]; + + static final String d = String.fromCharCodes(List.generate( + _envieddatad.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatad[i] ^ _enviedkeyd[i])); + + static const List _enviedkeye = [540089316]; + + static const List _envieddatae = [540089230]; + + static final String e = String.fromCharCodes(List.generate( + _envieddatae.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatae[i] ^ _enviedkeye[i])); + + static const List _enviedkeyf = [4031419054]; + + static const List _envieddataf = [4031419099]; + + static final String f = String.fromCharCodes(List.generate( + _envieddataf.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataf[i] ^ _enviedkeyf[i])); + + static const List _enviedkeyg = [3340256835]; + + static const List _envieddatag = [3340256808]; + + static final String g = String.fromCharCodes(List.generate( + _envieddatag.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatag[i] ^ _enviedkeyg[i])); + + static const List _enviedkeyh = [2728610744]; + + static const List _envieddatah = [2728610767]; + + static final String h = String.fromCharCodes(List.generate( + _envieddatah.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatah[i] ^ _enviedkeyh[i])); + + static const List _enviedkeyi = [4172270125]; + + static const List _envieddatai = [4172270146]; + + static final String i = String.fromCharCodes(List.generate( + _envieddatai.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatai[i] ^ _enviedkeyi[i])); + + static const List _enviedkeyj = [3690710003]; + + static const List _envieddataj = [3690709910]; + + static final String j = String.fromCharCodes(List.generate( + _envieddataj.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataj[i] ^ _enviedkeyj[i])); + + static const List _enviedkeyk = [2535250567]; + + static const List _envieddatak = [2535250656]; + + static final String k = String.fromCharCodes(List.generate( + _envieddatak.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatak[i] ^ _enviedkeyk[i])); + + static const List _enviedkeyl = [3347313798]; + + static const List _envieddatal = [3347313908]; + + static final String l = String.fromCharCodes(List.generate( + _envieddatal.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatal[i] ^ _enviedkeyl[i])); + + static const List _enviedkeym = [3368792862]; + + static const List _envieddatam = [3368792944]; + + static final String m = String.fromCharCodes(List.generate( + _envieddatam.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatam[i] ^ _enviedkeym[i])); + + static const List _enviedkeyn = [3166135307]; + + static const List _envieddatan = [3166135401]; + + static final String n = String.fromCharCodes(List.generate( + _envieddatan.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatan[i] ^ _enviedkeyn[i])); + + static const List _enviedkeyo = [3597819058]; + + static const List _envieddatao = [3597819099]; + + static final String o = String.fromCharCodes(List.generate( + _envieddatao.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatao[i] ^ _enviedkeyo[i])); + + static const List _enviedkeyp = [3858205651]; + + static const List _envieddatap = [3858205605]; + + static final String p = String.fromCharCodes(List.generate( + _envieddatap.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatap[i] ^ _enviedkeyp[i])); + + static const List _enviedkeyq = [4073585502]; + + static const List _envieddataq = [4073585471]; + + static final String q = String.fromCharCodes(List.generate( + _envieddataq.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataq[i] ^ _enviedkeyq[i])); + + static const List _enviedkeyr = [4012302099]; + + static const List _envieddatar = [4012302207]; + + static final String r = String.fromCharCodes(List.generate( + _envieddatar.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatar[i] ^ _enviedkeyr[i])); + + static const List _enviedkeys = [198252528]; + + static const List _envieddatas = [198252426]; + + static final String s = String.fromCharCodes(List.generate( + _envieddatas.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatas[i] ^ _enviedkeys[i])); + + static const List _enviedkeyt = [2213303340]; + + static const List _envieddatat = [2213303375]; + + static final String t = String.fromCharCodes(List.generate( + _envieddatat.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatat[i] ^ _enviedkeyt[i])); + + static const List _enviedkeyu = [2852794589]; + + static const List _envieddatau = [2852794549]; + + static final String u = String.fromCharCodes(List.generate( + _envieddatau.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatau[i] ^ _enviedkeyu[i])); + + static const List _enviedkeyv = [2431817007]; + + static const List _envieddatav = [2431817055]; + + static final String v = String.fromCharCodes(List.generate( + _envieddatav.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatav[i] ^ _enviedkeyv[i])); + + static const List _enviedkeyw = [692019672]; + + static const List _envieddataw = [692019628]; + + static final String w = String.fromCharCodes(List.generate( + _envieddataw.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataw[i] ^ _enviedkeyw[i])); + + static const List _enviedkeyx = [779136924]; + + static const List _envieddatax = [779137016]; + + static final String x = String.fromCharCodes(List.generate( + _envieddatax.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatax[i] ^ _enviedkeyx[i])); + + static const List _enviedkeyy = [2518439340]; + + static const List _envieddatay = [2518439391]; + + static final String y = String.fromCharCodes(List.generate( + _envieddatay.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatay[i] ^ _enviedkeyy[i])); + + static const List _enviedkeyz = [4252401697]; + + static const List _envieddataz = [4252401740]; + + static final String z = String.fromCharCodes(List.generate( + _envieddataz.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataz[i] ^ _enviedkeyz[i])); + + static const List _enviedkeyemailService = [ + 1529971233, + 1420186468, + 2887272317, + 2364415619, + 903982909, + 2095400158, + 3131075177, + 3960902706, + 4184566706, + 3431239715, + 3019411814, + 2602766349, + 1503415822, + 1060896018, + 4221862395, + 323713252, + 321526989, + 130496032, + 3325251537, + 1008283748, + 3349200177, + 237758508, + 606766199, + ]; + + static const List _envieddataemailService = [ + 1529971282, + 1420186369, + 2887272219, + 2364415718, + 903982927, + 2095400109, + 3131075084, + 3960902720, + 4184566724, + 3431239754, + 3019411717, + 2602766440, + 1503415886, + 1060896097, + 4221862302, + 323713154, + 321526952, + 130496082, + 3325251583, + 1008283656, + 3349200216, + 237758554, + 606766098, + ]; + + static final String emailService = String.fromCharCodes(List.generate( + _envieddataemailService.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddataemailService[i] ^ _enviedkeyemailService[i])); + + static const List _enviedkeykeyOfApp = [ + 2517718456, + 1478997662, + 1370326345, + 229190262, + 3300137116, + 3093795113, + 2657867974, + 414697464, + 1366230055, + 1451508210, + 831588037, + 31269301, + 2980233781, + 265557381, + 2643073289, + 778337923, + 1630542430, + 563909024, + 3631293484, + 2977145149, + 3484183047, + 835707670, + 2187273134, + 627312908, + 693214677, + 2937675817, + 2326880562, + 98573970, + 4254568929, + 3449624572, + 2472562767, + 4209919531, + 374291633, + 4142777811, + 1255412088, + 2849985911, + 4178684572, + 854316047, + ]; + + static const List _envieddatakeyOfApp = [ + 2517718486, + 1478997743, + 1370326331, + 229190159, + 3300137206, + 3093795161, + 2657867910, + 414697417, + 1366230032, + 1451508161, + 831588082, + 31269314, + 2980233796, + 265557483, + 2643073380, + 778338034, + 1630542383, + 563909075, + 3631293510, + 2977145156, + 3484183165, + 835707772, + 2187273179, + 627312998, + 693214649, + 2937675843, + 2326880601, + 98574049, + 4254568855, + 3449624479, + 2472562730, + 4209919554, + 374291689, + 4142777761, + 1255412000, + 2849985819, + 4178684638, + 854316131, + ]; + + static final String keyOfApp = String.fromCharCodes(List.generate( + _envieddatakeyOfApp.length, + (int i) => i, + growable: false, + ).map((int i) => _envieddatakeyOfApp[i] ^ _enviedkeykeyOfApp[i])); +} diff --git a/lib/firebase_options.dart b/lib/firebase_options.dart new file mode 100644 index 0000000..18aca43 --- /dev/null +++ b/lib/firebase_options.dart @@ -0,0 +1,62 @@ +// File generated by FlutterFire CLI. +// ignore_for_file: type=lint +import 'package:firebase_core/firebase_core.dart' show FirebaseOptions; +import 'package:flutter/foundation.dart' + show defaultTargetPlatform, kIsWeb, TargetPlatform; + +/// Default [FirebaseOptions] for use with your Firebase apps. +/// +/// Example: +/// ```dart +/// import 'firebase_options.dart'; +/// // ... +/// await Firebase.initializeApp( +/// options: DefaultFirebaseOptions.currentPlatform, +/// ); +/// ``` +class DefaultFirebaseOptions { + static FirebaseOptions get currentPlatform { + if (kIsWeb) { + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for web - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + } + switch (defaultTargetPlatform) { + case TargetPlatform.android: + return android; + case TargetPlatform.iOS: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for ios - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + case TargetPlatform.macOS: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for macos - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + case TargetPlatform.windows: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for windows - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + case TargetPlatform.linux: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for linux - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + default: + throw UnsupportedError( + 'DefaultFirebaseOptions are not supported for this platform.', + ); + } + } + + static const FirebaseOptions android = FirebaseOptions( + apiKey: 'AIzaSyCyfwRXTwSTLOFQSQgN5p7QZgGJVZnEKq0', + appId: '1:594687661098:android:f81fcce13962121a595f53', + messagingSenderId: '594687661098', + projectId: 'ride-b1bd8', + storageBucket: 'ride-b1bd8.appspot.com', + ); +} diff --git a/lib/login_page.dart b/lib/login_page.dart new file mode 100644 index 0000000..8a88589 --- /dev/null +++ b/lib/login_page.dart @@ -0,0 +1,50 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:service/views/widgets/my_textField.dart'; +import 'controller/login_controller.dart'; + +class LoginPage extends StatelessWidget { + final LoginController controller = Get.put(LoginController()); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: const CupertinoNavigationBar( + middle: Text('Login'), + ), + body: SafeArea( + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Form( + key: controller.formKey, + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + const SizedBox(height: 20), + MyTextForm( + controller: controller.email, + label: 'email', + hint: 'email', + type: TextInputType.emailAddress), + const SizedBox(height: 20), + MyTextForm( + controller: controller.password, + label: 'Password', + hint: 'Password', + type: TextInputType.name), + const SizedBox(height: 40), + CupertinoButton.filled( + child: const Text('Login'), + onPressed: () { + controller.login(); + }, + ), + ], + ), + ), + ), + ), + ); + } +} diff --git a/lib/main.dart b/lib/main.dart new file mode 100644 index 0000000..937794b --- /dev/null +++ b/lib/main.dart @@ -0,0 +1,60 @@ +import 'dart:io'; + +import 'package:firebase_core/firebase_core.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:flutter_secure_storage/flutter_secure_storage.dart'; +import 'package:get/get.dart'; +import 'package:get_storage/get_storage.dart'; + +import 'controller/firebase.dart'; +import 'controller/local/local_controller.dart'; +import 'controller/local/translations.dart'; +import 'firebase_options.dart'; +import 'login_page.dart'; +import 'views/home/main.dart'; + +final box = GetStorage(); +const storage = FlutterSecureStorage(); + +void main() async { + WidgetsFlutterBinding.ensureInitialized(); + if (Platform.isAndroid || Platform.isIOS) { + await Firebase.initializeApp( + options: DefaultFirebaseOptions.currentPlatform, + ); + await FirebaseMessagesController().requestFirebaseMessagingPermission(); + + // FirebaseMessaging.onBackgroundMessage(backgroundMessageHandler); + + List initializationTasks = [ + FirebaseMessagesController().getNotificationSettings(), + FirebaseMessagesController().getToken(), + ]; + // cameras = await availableCameras(); + await Future.wait(initializationTasks); + SystemChrome.setPreferredOrientations([ + DeviceOrientation.portraitUp, + DeviceOrientation.portraitDown, + ]); + } + runApp(MyApp()); +} + +class MyApp extends StatelessWidget { + MyApp({super.key}); + LocaleController localController = Get.put(LocaleController()); + + @override + Widget build(BuildContext context) { + return GetMaterialApp( + title: 'Sefer Service'.tr, + debugShowCheckedModeBanner: false, + translations: MyTranslation(), + locale: localController.language, + theme: localController.appTheme, + key: UniqueKey(), + home: LoginPage(), + ); + } +} diff --git a/lib/print.dart b/lib/print.dart new file mode 100644 index 0000000..ccc2fb5 --- /dev/null +++ b/lib/print.dart @@ -0,0 +1,13 @@ +import 'dart:developer' as developer; + +class Log { + Log._(); + + static void print(String value, {StackTrace? stackTrace}) { + developer.log(value, name: 'LOG', stackTrace: stackTrace); + } + + static Object? inspect(Object? object) { + return developer.inspect(object); + } +} diff --git a/lib/views/home/main.dart b/lib/views/home/main.dart new file mode 100644 index 0000000..43df14b --- /dev/null +++ b/lib/views/home/main.dart @@ -0,0 +1,204 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:service/controller/mainController/main_controller.dart'; +import 'package:service/controller/mainController/pages/complaint.dart'; +import 'package:service/controller/mainController/pages/edit_car_plate.dart'; +import 'package:service/controller/mainController/pages/passengers_cant_regster.dart'; +import 'package:service/views/widgets/my_dialog.dart'; +import 'package:service/views/widgets/my_textField.dart'; + +import '../../constant/style.dart'; +import '../../controller/mainController/pages/drivers_cant_register.dart'; +import '../../controller/mainController/pages/welcome_call.dart'; +import '../widgets/my_scafold.dart'; + +class Main extends StatelessWidget { + Main({super.key}); + MainController mainController = Get.put(MainController()); + @override + Widget build(BuildContext context) { + return MyScaffold(title: 'Sefer Service'.tr, isleading: false, body: [ + ListView( + children: [ + InkWell( + onTap: () { + MyDialog().getDialog( + 'insert passenger phone'.tr, + 'midTitle', + Column( + children: [ + Form( + key: mainController.formKey, + child: MyTextForm( + controller: mainController.passengerPhoneController, + label: 'insert passenger phone'.tr, + hint: 'insert passenger phone'.tr, + type: TextInputType.phone, + )), + ], + ), + () { + mainController.searchPassengerByPhone(); + }, + ); + }, + child: Container( + decoration: AppStyle.boxDecoration, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + 'passenger details by phone'.tr, + style: AppStyle.title, + textAlign: TextAlign.center, + ), + ), + ), + ), + const SizedBox( + height: 20, + ), + InkWell( + onTap: () { + MyDialog().getDialog( + 'insert Driver phone'.tr, + 'midTitle', + Column( + children: [ + Form( + key: mainController.formKey, + child: MyTextForm( + controller: mainController.driverPhoneController, + label: 'insert Driver phone'.tr, + hint: 'insert Driver phone'.tr, + type: TextInputType.phone, + )), + ], + ), + () { + mainController.searchDriverByPhone(); + }, + ); + }, + child: Container( + decoration: AppStyle.boxDecoration, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + 'Driver details by phone'.tr, + style: AppStyle.title, + textAlign: TextAlign.center, + ), + ), + ), + ), + const SizedBox( + height: 20, + ), + InkWell( + onTap: () async { + await mainController.getDriverNotCompleteRegistration(); + Get.to(() => DriversCantRegister()); + }, + child: Container( + decoration: AppStyle.boxDecoration, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + 'Drivers Cant Register'.tr, + style: AppStyle.title, + textAlign: TextAlign.center, + ), + ), + ), + ), + const SizedBox( + height: 20, + ), + InkWell( + onTap: () async { + await mainController.getPassengerNotCompleteRegistration(); + Get.to(() => PassengersCantRegister()); + }, + child: Container( + decoration: AppStyle.boxDecoration, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + 'Passengers Cant Register'.tr, + style: AppStyle.title, + textAlign: TextAlign.center, + ), + ), + ), + ), + const SizedBox( + height: 20, + ), + InkWell( + onTap: () async { + await mainController.getCarPlateNotEdit(); + if (mainController.carPlateNotEdit.isNotEmpty) { + Get.to(() => EditCarPlate()); + } + }, + child: Container( + decoration: AppStyle.boxDecoration, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + 'Edit car plate'.tr, + style: AppStyle.title, + textAlign: TextAlign.center, + ), + ), + ), + ), + const SizedBox( + height: 20, + ), + InkWell( + onTap: () async { + // await mainController.getCarPlateNotEdit(); + // if (mainController.carPlateNotEdit.isNotEmpty) { + Get.to(() => Complaint()); + // } + }, + child: Container( + decoration: AppStyle.boxDecoration, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + "View complaint".tr, + style: AppStyle.title, + textAlign: TextAlign.center, + ), + ), + ), + ), + const SizedBox( + height: 20, + ), + InkWell( + onTap: () async { + await mainController.getNewDriverRegister(); + // if (mainController.carPlateNotEdit.isNotEmpty) { + Get.to(() => const WelcomeCall()); + // } + }, + child: Container( + decoration: AppStyle.boxDecoration, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Text( + "Welcome call".tr, + style: AppStyle.title, + textAlign: TextAlign.center, + ), + ), + ), + ), + ], + ) + ]); + } +} diff --git a/lib/views/widgets/circle_container.dart b/lib/views/widgets/circle_container.dart new file mode 100644 index 0000000..9702b34 --- /dev/null +++ b/lib/views/widgets/circle_container.dart @@ -0,0 +1,63 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +import '../../constant/colors.dart'; + +class MyCircleContainer extends StatelessWidget { + final Widget child; + final Color backgroundColor; + final Color borderColor; + + MyCircleContainer({ + Key? key, + required this.child, + this.backgroundColor = AppColor.secondaryColor, + this.borderColor = AppColor.accentColor, + }) : super(key: key); + + final controller = Get.put(CircleController()); + + @override + Widget build(BuildContext context) { + return GetBuilder( + builder: ((controller) => GestureDetector( + onTap: () { + controller.changeColor(); + }, + child: AnimatedContainer( + onEnd: () { + controller.onEnd(); + }, + duration: const Duration(milliseconds: 300), + width: controller.size, + height: controller.size, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: controller.backgroundColor, + border: Border.all( + color: borderColor, + width: 1, + ), + ), + child: Center(child: child), + ), + ))); + } +} + +class CircleController extends GetxController { + Color backgroundColor = AppColor.secondaryColor; + double size = 40; + void changeColor() { + backgroundColor = backgroundColor == AppColor.secondaryColor + ? AppColor.accentColor + : AppColor.secondaryColor; + size = 60; + update(); + } + + void onEnd() { + size = 40; + update(); + } +} diff --git a/lib/views/widgets/elevated_btn.dart b/lib/views/widgets/elevated_btn.dart new file mode 100644 index 0000000..3aa28f8 --- /dev/null +++ b/lib/views/widgets/elevated_btn.dart @@ -0,0 +1,53 @@ +import 'dart:io'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:vibration/vibration.dart'; + +import '../../constant/box_name.dart'; +import '../../constant/colors.dart'; +import '../../constant/style.dart'; +import '../../main.dart'; + +class MyElevatedButton extends StatelessWidget { + final String title; + final VoidCallback onPressed; + final Color kolor; + final int vibrateDuration; + + const MyElevatedButton({ + Key? key, + required this.title, + required this.onPressed, + this.kolor = AppColor.primaryColor, + this.vibrateDuration = 100, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + bool vibrate = box.read(BoxName.isvibrate) ?? true; + + return ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: kolor, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12.0), + ), + ), + onPressed: () async { + if (vibrate == true) { + if (Platform.isIOS) { + HapticFeedback.selectionClick(); + } else if (Platform.isAndroid) { + await Vibration.vibrate(duration: vibrateDuration); + } else {} + } + onPressed(); + }, + child: Text( + title, + textAlign: TextAlign.center, + style: AppStyle.title.copyWith(color: AppColor.secondaryColor), + ), + ); + } +} diff --git a/lib/views/widgets/icon_widget_menu.dart b/lib/views/widgets/icon_widget_menu.dart new file mode 100644 index 0000000..9a0189f --- /dev/null +++ b/lib/views/widgets/icon_widget_menu.dart @@ -0,0 +1,66 @@ +import 'package:flutter/material.dart'; + +import '../../constant/colors.dart'; +import '../../constant/style.dart'; + +class IconWidgetMenu extends StatelessWidget { + const IconWidgetMenu({ + Key? key, + required this.onpressed, + required this.icon, + required this.title, + }) : super(key: key); + + final VoidCallback onpressed; + final IconData icon; + final String title; + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: onpressed, + child: Padding( + padding: const EdgeInsets.only(top: 1), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Container( + width: 50, + decoration: const BoxDecoration( + color: AppColor.secondaryColor, + shape: BoxShape.circle, + // boxShadow: [ + // BoxShadow( + // color: AppColor.secondaryColor, + // offset: Offset(-2, -2), + // blurRadius: 0, + // spreadRadius: 0, + // blurStyle: BlurStyle.outer, + // ), + // BoxShadow( + // color: AppColor.accentColor, + // offset: Offset(3, 3), + // blurRadius: 0, + // spreadRadius: 0, + // blurStyle: BlurStyle.outer, + // ), + // ], + ), + child: Center( + child: Icon( + icon, + size: 30, + color: AppColor.primaryColor, + ), + ), + ), + Text( + title, + style: AppStyle.subtitle.copyWith(color: AppColor.secondaryColor), + ) + ], + ), + ), + ); + } +} diff --git a/lib/views/widgets/my_dialog.dart b/lib/views/widgets/my_dialog.dart new file mode 100644 index 0000000..4a4b3d6 --- /dev/null +++ b/lib/views/widgets/my_dialog.dart @@ -0,0 +1,40 @@ +import 'dart:ui'; + +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +import '../../constant/colors.dart'; +import '../../constant/style.dart'; +import 'elevated_btn.dart'; + +class MyDialog extends GetxController { + void getDialog( + String title, String? midTitle, Widget widget, VoidCallback onPressed) { + // final textToSpeechController = Get.put(TextToSpeechController()); + Get.defaultDialog( + title: title, + titleStyle: AppStyle.title, + middleTextStyle: AppStyle.title, + content: Column( + children: [ + // IconButton( + // onPressed: () async { + // // await textToSpeechController.speakText(title ?? midTitle!); + // }, + // icon: const Icon(Icons.headphones)), + widget + ], + ), + confirm: MyElevatedButton( + title: 'Ok'.tr, + onPressed: onPressed, + kolor: AppColor.greenColor, + ), + cancel: MyElevatedButton( + title: 'Cancel', + kolor: AppColor.redColor, + onPressed: () { + Get.back(); + })); + } +} diff --git a/lib/views/widgets/my_scafold.dart b/lib/views/widgets/my_scafold.dart new file mode 100644 index 0000000..bdee504 --- /dev/null +++ b/lib/views/widgets/my_scafold.dart @@ -0,0 +1,50 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +import '../../constant/colors.dart'; +import '../../constant/style.dart'; + +class MyScaffold extends StatelessWidget { + const MyScaffold({ + super.key, + required this.title, + this.action = const Icon( + Icons.clear, + color: AppColor.secondaryColor, + ), + required this.isleading, + required this.body, + }); + + final String title; + final List body; + final Widget action; + final bool isleading; + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: AppColor.secondaryColor, + appBar: AppBar( + backgroundColor: AppColor.secondaryColor, + elevation: 0, + leading: isleading + ? IconButton( + onPressed: () { + Get.back(); + }, + icon: const Icon( + Icons.arrow_back_ios_new, + color: AppColor.primaryColor, + ), + ) + : const SizedBox(), + actions: [action], + title: Text( + title, + style: AppStyle.title.copyWith(fontSize: 30), + ), + ), + body: SafeArea(child: Stack(children: body))); + } +} diff --git a/lib/views/widgets/my_textField.dart b/lib/views/widgets/my_textField.dart new file mode 100644 index 0000000..dd23c81 --- /dev/null +++ b/lib/views/widgets/my_textField.dart @@ -0,0 +1,74 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; + +import '../../constant/box_name.dart'; +import '../../constant/colors.dart'; +import '../../constant/style.dart'; +import '../../main.dart'; + +class MyTextForm extends StatelessWidget { + const MyTextForm({ + super.key, + required this.controller, + required this.label, + required this.hint, + required this.type, + }); + final TextEditingController controller; + final String label, hint; + final TextInputType type; + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.only(bottom: 10), + child: SizedBox( + width: Get.width * .8, + child: TextFormField( + keyboardType: type, + cursorColor: AppColor.accentColor, + controller: controller, + decoration: InputDecoration( + focusedBorder: OutlineInputBorder( + borderSide: const BorderSide( + color: AppColor.primaryColor, + width: 2.0, + ), + borderRadius: BorderRadius.circular(10), + ), + focusColor: AppColor.accentColor, + fillColor: AppColor.accentColor, + border: const OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(12))), + labelText: label.tr, + hintText: hint.tr, + hintStyle: AppStyle.title, + labelStyle: AppStyle.title, + ), + validator: (value) { + if (value!.isEmpty) { + return '${'Please enter'.tr} $label.'.tr; + } + + if (type == TextInputType.emailAddress) { + if (!value.contains('@')) { + return 'Please enter a valid email.'.tr; + } + } else if (type == TextInputType.phone) { + if (box.read(BoxName.countryCode) == 'Egypt') { + if (value.length != 11) { + return 'Please enter a valid phone number.'.tr; + } + } else if (value.length != 11) { + //for this you will return to 10 but now for service egypt + return 'Please enter a valid phone number.'.tr; + } + } + + return null; + }, + ), + ), + ); + } +} diff --git a/lib/views/widgets/mycircular.dart b/lib/views/widgets/mycircular.dart new file mode 100644 index 0000000..366d81a --- /dev/null +++ b/lib/views/widgets/mycircular.dart @@ -0,0 +1,37 @@ +import 'package:flutter/material.dart'; + +class MyCircularProgressIndicator extends StatelessWidget { + final Color backgroundColor; + + const MyCircularProgressIndicator({ + super.key, + this.backgroundColor = Colors.transparent, + }); + + @override + Widget build(BuildContext context) { + return Center( + child: Container( + width: 110, + height: 110, + decoration: BoxDecoration( + color: backgroundColor, + shape: BoxShape.circle, + ), + child: Stack( + children: [ + const Center(child: CircularProgressIndicator()), + Column( + children: [ + Align( + alignment: Alignment.center, + child: Image.asset('assets/images/logo.png'), + ), + ], + ), + ], + ), + ), + ); + } +} diff --git a/linux/.gitignore b/linux/.gitignore new file mode 100644 index 0000000..d3896c9 --- /dev/null +++ b/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/linux/CMakeLists.txt b/linux/CMakeLists.txt new file mode 100644 index 0000000..1d1c627 --- /dev/null +++ b/linux/CMakeLists.txt @@ -0,0 +1,145 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.10) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "service") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.service") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/linux/flutter/CMakeLists.txt b/linux/flutter/CMakeLists.txt new file mode 100644 index 0000000..d5bd016 --- /dev/null +++ b/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000..3ccd551 --- /dev/null +++ b/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,23 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + +#include +#include +#include + +void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) file_selector_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin"); + file_selector_plugin_register_with_registrar(file_selector_linux_registrar); + g_autoptr(FlPluginRegistrar) flutter_secure_storage_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "FlutterSecureStorageLinuxPlugin"); + flutter_secure_storage_linux_plugin_register_with_registrar(flutter_secure_storage_linux_registrar); + g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); + url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); +} diff --git a/linux/flutter/generated_plugin_registrant.h b/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000..e0f0a47 --- /dev/null +++ b/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake new file mode 100644 index 0000000..9ce94c4 --- /dev/null +++ b/linux/flutter/generated_plugins.cmake @@ -0,0 +1,26 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + file_selector_linux + flutter_secure_storage_linux + url_launcher_linux +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/linux/main.cc b/linux/main.cc new file mode 100644 index 0000000..e7c5c54 --- /dev/null +++ b/linux/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/linux/my_application.cc b/linux/my_application.cc new file mode 100644 index 0000000..66607aa --- /dev/null +++ b/linux/my_application.cc @@ -0,0 +1,124 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "service"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "service"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GApplication::startup. +static void my_application_startup(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application startup. + + G_APPLICATION_CLASS(my_application_parent_class)->startup(application); +} + +// Implements GApplication::shutdown. +static void my_application_shutdown(GApplication* application) { + //MyApplication* self = MY_APPLICATION(object); + + // Perform any actions required at application shutdown. + + G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application); +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_APPLICATION_CLASS(klass)->startup = my_application_startup; + G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/linux/my_application.h b/linux/my_application.h new file mode 100644 index 0000000..72271d5 --- /dev/null +++ b/linux/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/macos/.gitignore b/macos/.gitignore new file mode 100644 index 0000000..746adbb --- /dev/null +++ b/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/macos/Flutter/Flutter-Debug.xcconfig b/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 0000000..4b81f9b --- /dev/null +++ b/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/macos/Flutter/Flutter-Release.xcconfig b/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 0000000..5caa9d1 --- /dev/null +++ b/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 0000000..bdab6ec --- /dev/null +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,32 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + +import device_info_plus +import file_selector_macos +import firebase_auth +import firebase_core +import firebase_messaging +import flutter_image_compress_macos +import flutter_secure_storage_macos +import google_sign_in_ios +import path_provider_foundation +import sqflite +import url_launcher_macos + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) + FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) + FLTFirebaseAuthPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseAuthPlugin")) + FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) + FLTFirebaseMessagingPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseMessagingPlugin")) + FlutterImageCompressMacosPlugin.register(with: registry.registrar(forPlugin: "FlutterImageCompressMacosPlugin")) + FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin")) + FLTGoogleSignInPlugin.register(with: registry.registrar(forPlugin: "FLTGoogleSignInPlugin")) + PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) + SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) + UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) +} diff --git a/macos/Podfile b/macos/Podfile new file mode 100644 index 0000000..b52666a --- /dev/null +++ b/macos/Podfile @@ -0,0 +1,43 @@ +platform :osx, '10.15' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/macos/Podfile.lock b/macos/Podfile.lock new file mode 100644 index 0000000..a045515 --- /dev/null +++ b/macos/Podfile.lock @@ -0,0 +1,217 @@ +PODS: + - AppAuth (1.7.5): + - AppAuth/Core (= 1.7.5) + - AppAuth/ExternalUserAgent (= 1.7.5) + - AppAuth/Core (1.7.5) + - AppAuth/ExternalUserAgent (1.7.5): + - AppAuth/Core + - device_info_plus (0.0.1): + - FlutterMacOS + - file_selector_macos (0.0.1): + - FlutterMacOS + - Firebase/Auth (10.28.1): + - Firebase/CoreOnly + - FirebaseAuth (~> 10.28.0) + - Firebase/CoreOnly (10.28.1): + - FirebaseCore (= 10.28.1) + - Firebase/Messaging (10.28.1): + - Firebase/CoreOnly + - FirebaseMessaging (~> 10.28.0) + - firebase_auth (5.1.2): + - Firebase/Auth (~> 10.28.0) + - Firebase/CoreOnly (~> 10.28.0) + - firebase_core + - FlutterMacOS + - firebase_core (3.2.0): + - Firebase/CoreOnly (~> 10.28.0) + - FlutterMacOS + - firebase_messaging (15.0.3): + - Firebase/CoreOnly (~> 10.28.0) + - Firebase/Messaging (~> 10.28.0) + - firebase_core + - FlutterMacOS + - FirebaseAppCheckInterop (10.29.0) + - FirebaseAuth (10.28.0): + - FirebaseAppCheckInterop (~> 10.17) + - FirebaseCore (~> 10.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.8) + - GoogleUtilities/Environment (~> 7.8) + - GTMSessionFetcher/Core (< 4.0, >= 2.1) + - RecaptchaInterop (~> 100.0) + - FirebaseCore (10.28.1): + - FirebaseCoreInternal (~> 10.0) + - GoogleUtilities/Environment (~> 7.12) + - GoogleUtilities/Logger (~> 7.12) + - FirebaseCoreInternal (10.29.0): + - "GoogleUtilities/NSData+zlib (~> 7.8)" + - FirebaseInstallations (10.29.0): + - FirebaseCore (~> 10.0) + - GoogleUtilities/Environment (~> 7.8) + - GoogleUtilities/UserDefaults (~> 7.8) + - PromisesObjC (~> 2.1) + - FirebaseMessaging (10.28.0): + - FirebaseCore (~> 10.0) + - FirebaseInstallations (~> 10.0) + - GoogleDataTransport (~> 9.3) + - GoogleUtilities/AppDelegateSwizzler (~> 7.8) + - GoogleUtilities/Environment (~> 7.8) + - GoogleUtilities/Reachability (~> 7.8) + - GoogleUtilities/UserDefaults (~> 7.8) + - nanopb (< 2.30911.0, >= 2.30908.0) + - flutter_image_compress_macos (1.0.0): + - FlutterMacOS + - flutter_secure_storage_macos (6.1.1): + - FlutterMacOS + - FlutterMacOS (1.0.0) + - google_sign_in_ios (0.0.1): + - AppAuth (>= 1.7.4) + - Flutter + - FlutterMacOS + - GoogleSignIn (~> 7.1) + - GTMSessionFetcher (>= 3.4.0) + - GoogleDataTransport (9.4.1): + - GoogleUtilities/Environment (~> 7.7) + - nanopb (< 2.30911.0, >= 2.30908.0) + - PromisesObjC (< 3.0, >= 1.2) + - GoogleSignIn (7.1.0): + - AppAuth (< 2.0, >= 1.7.3) + - GTMAppAuth (< 5.0, >= 4.1.1) + - GTMSessionFetcher/Core (~> 3.3) + - GoogleUtilities/AppDelegateSwizzler (7.13.3): + - GoogleUtilities/Environment + - GoogleUtilities/Logger + - GoogleUtilities/Network + - GoogleUtilities/Privacy + - GoogleUtilities/Environment (7.13.3): + - GoogleUtilities/Privacy + - PromisesObjC (< 3.0, >= 1.2) + - GoogleUtilities/Logger (7.13.3): + - GoogleUtilities/Environment + - GoogleUtilities/Privacy + - GoogleUtilities/Network (7.13.3): + - GoogleUtilities/Logger + - "GoogleUtilities/NSData+zlib" + - GoogleUtilities/Privacy + - GoogleUtilities/Reachability + - "GoogleUtilities/NSData+zlib (7.13.3)": + - GoogleUtilities/Privacy + - GoogleUtilities/Privacy (7.13.3) + - GoogleUtilities/Reachability (7.13.3): + - GoogleUtilities/Logger + - GoogleUtilities/Privacy + - GoogleUtilities/UserDefaults (7.13.3): + - GoogleUtilities/Logger + - GoogleUtilities/Privacy + - GTMAppAuth (4.1.1): + - AppAuth/Core (~> 1.7) + - GTMSessionFetcher/Core (< 4.0, >= 3.3) + - GTMSessionFetcher (3.5.0): + - GTMSessionFetcher/Full (= 3.5.0) + - GTMSessionFetcher/Core (3.5.0) + - GTMSessionFetcher/Full (3.5.0): + - GTMSessionFetcher/Core + - nanopb (2.30910.0): + - nanopb/decode (= 2.30910.0) + - nanopb/encode (= 2.30910.0) + - nanopb/decode (2.30910.0) + - nanopb/encode (2.30910.0) + - path_provider_foundation (0.0.1): + - Flutter + - FlutterMacOS + - PromisesObjC (2.4.0) + - sqflite (0.0.3): + - Flutter + - FlutterMacOS + - url_launcher_macos (0.0.1): + - FlutterMacOS + +DEPENDENCIES: + - device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`) + - file_selector_macos (from `Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos`) + - firebase_auth (from `Flutter/ephemeral/.symlinks/plugins/firebase_auth/macos`) + - firebase_core (from `Flutter/ephemeral/.symlinks/plugins/firebase_core/macos`) + - firebase_messaging (from `Flutter/ephemeral/.symlinks/plugins/firebase_messaging/macos`) + - flutter_image_compress_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_image_compress_macos/macos`) + - flutter_secure_storage_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos`) + - FlutterMacOS (from `Flutter/ephemeral`) + - google_sign_in_ios (from `Flutter/ephemeral/.symlinks/plugins/google_sign_in_ios/darwin`) + - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) + - sqflite (from `Flutter/ephemeral/.symlinks/plugins/sqflite/darwin`) + - url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`) + +SPEC REPOS: + trunk: + - AppAuth + - Firebase + - FirebaseAppCheckInterop + - FirebaseAuth + - FirebaseCore + - FirebaseCoreInternal + - FirebaseInstallations + - FirebaseMessaging + - GoogleDataTransport + - GoogleSignIn + - GoogleUtilities + - GTMAppAuth + - GTMSessionFetcher + - nanopb + - PromisesObjC + +EXTERNAL SOURCES: + device_info_plus: + :path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos + file_selector_macos: + :path: Flutter/ephemeral/.symlinks/plugins/file_selector_macos/macos + firebase_auth: + :path: Flutter/ephemeral/.symlinks/plugins/firebase_auth/macos + firebase_core: + :path: Flutter/ephemeral/.symlinks/plugins/firebase_core/macos + firebase_messaging: + :path: Flutter/ephemeral/.symlinks/plugins/firebase_messaging/macos + flutter_image_compress_macos: + :path: Flutter/ephemeral/.symlinks/plugins/flutter_image_compress_macos/macos + flutter_secure_storage_macos: + :path: Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos + FlutterMacOS: + :path: Flutter/ephemeral + google_sign_in_ios: + :path: Flutter/ephemeral/.symlinks/plugins/google_sign_in_ios/darwin + path_provider_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin + sqflite: + :path: Flutter/ephemeral/.symlinks/plugins/sqflite/darwin + url_launcher_macos: + :path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos + +SPEC CHECKSUMS: + AppAuth: 501c04eda8a8d11f179dbe8637b7a91bb7e5d2fa + device_info_plus: ce1b7762849d3ec103d0e0517299f2db7ad60720 + file_selector_macos: 54fdab7caa3ac3fc43c9fac4d7d8d231277f8cf2 + Firebase: 49e62242b3ae422a002ab647a7e62a332a8c3ec1 + firebase_auth: d213b76584243b0a5edf492444f6de6b89d16833 + firebase_core: d8af40a9c8a9ce3112a94692aac83675627c0486 + firebase_messaging: 7871cfa8af1e863324e46ae9e90343c452626c02 + FirebaseAppCheckInterop: 6a1757cfd4067d8e00fccd14fcc1b8fd78cfac07 + FirebaseAuth: 3d872fbbfc4223edeb72769e488f325fa8b0a4a9 + FirebaseCore: dfc33f0dffba05f76181da9cc0151171ebb3bd10 + FirebaseCoreInternal: df84dd300b561c27d5571684f389bf60b0a5c934 + FirebaseInstallations: 913cf60d0400ebd5d6b63a28b290372ab44590dd + FirebaseMessaging: 087a7c7cadef7b9239f005bc4db823894844f323 + flutter_image_compress_macos: c26c3c13ea0f28ae6dea4e139b3292e7729f99f1 + flutter_secure_storage_macos: 59459653abe1adb92abbc8ea747d79f8d19866c9 + FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 + google_sign_in_ios: 07375bfbf2620bc93a602c0e27160d6afc6ead38 + GoogleDataTransport: 6c09b596d841063d76d4288cc2d2f42cc36e1e2a + GoogleSignIn: d4281ab6cf21542b1cfaff85c191f230b399d2db + GoogleUtilities: ea963c370a38a8069cc5f7ba4ca849a60b6d7d15 + GTMAppAuth: f69bd07d68cd3b766125f7e072c45d7340dea0de + GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6 + nanopb: 438bc412db1928dac798aa6fd75726007be04262 + path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 + PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 + sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec + url_launcher_macos: 5f437abeda8c85500ceb03f5c1938a8c5a705399 + +PODFILE CHECKSUM: 9ebaf0ce3d369aaa26a9ea0e159195ed94724cf3 + +COCOAPODS: 1.15.2 diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..2b85c3c --- /dev/null +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,827 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 3D1E4D0A6BC53423D8B550CD /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8A9B5896A31761FC290B505 /* Pods_RunnerTests.framework */; }; + 6F778F1BD28578046D834A65 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A0503D11E397A09601971935 /* Pods_Runner.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* service.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = service.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 35CAC6DEC7963589D9B9026C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 36976F8EEEA49D8451A8CE84 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 6E328C1A2EEA37E08651BF61 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 873D5C4E49C85CC4CE96A95F /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + 997CB46CA91F8362C16A3E02 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + A0503D11E397A09601971935 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D8A9B5896A31761FC290B505 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F60A1DD2409AB01136981914 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 3D1E4D0A6BC53423D8B550CD /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 6F778F1BD28578046D834A65 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + 5E6B837E1F45F9B858E14559 /* Pods */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* service.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + 5E6B837E1F45F9B858E14559 /* Pods */ = { + isa = PBXGroup; + children = ( + 873D5C4E49C85CC4CE96A95F /* Pods-Runner.debug.xcconfig */, + 35CAC6DEC7963589D9B9026C /* Pods-Runner.release.xcconfig */, + 36976F8EEEA49D8451A8CE84 /* Pods-Runner.profile.xcconfig */, + 997CB46CA91F8362C16A3E02 /* Pods-RunnerTests.debug.xcconfig */, + 6E328C1A2EEA37E08651BF61 /* Pods-RunnerTests.release.xcconfig */, + F60A1DD2409AB01136981914 /* Pods-RunnerTests.profile.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + A0503D11E397A09601971935 /* Pods_Runner.framework */, + D8A9B5896A31761FC290B505 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + ED1FE7202449810769C061A4 /* [CP] Check Pods Manifest.lock */, + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 5B25ABB1FBCB44A00B6138E7 /* [CP] Check Pods Manifest.lock */, + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + 466068DAEB458C641367E68E /* [CP] Embed Pods Frameworks */, + 237C2FC93812C7D0556C825D /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* service.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 237C2FC93812C7D0556C825D /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; + 466068DAEB458C641367E68E /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 5B25ABB1FBCB44A00B6138E7 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + ED1FE7202449810769C061A4 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 997CB46CA91F8362C16A3E02 /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.service.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/service.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/service"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6E328C1A2EEA37E08651BF61 /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.service.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/service.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/service"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F60A1DD2409AB01136981914 /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.service.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/service.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/service"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = "sefer service"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.15; + MARKETING_VERSION = 1; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = "sefer service"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.15; + MARKETING_VERSION = 1; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = "sefer service"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.15; + MARKETING_VERSION = 1; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..9e0d925 --- /dev/null +++ b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/macos/Runner.xcworkspace/contents.xcworkspacedata b/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..21a3cc1 --- /dev/null +++ b/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/macos/Runner/AppDelegate.swift b/macos/Runner/AppDelegate.swift new file mode 100644 index 0000000..d53ef64 --- /dev/null +++ b/macos/Runner/AppDelegate.swift @@ -0,0 +1,9 @@ +import Cocoa +import FlutterMacOS + +@NSApplicationMain +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } +} diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..96d3fee --- /dev/null +++ b/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "info": { + "version": 1, + "author": "xcode" + }, + "images": [ + { + "size": "16x16", + "idiom": "mac", + "filename": "app_icon_16.png", + "scale": "1x" + }, + { + "size": "16x16", + "idiom": "mac", + "filename": "app_icon_32.png", + "scale": "2x" + }, + { + "size": "32x32", + "idiom": "mac", + "filename": "app_icon_32.png", + "scale": "1x" + }, + { + "size": "32x32", + "idiom": "mac", + "filename": "app_icon_64.png", + "scale": "2x" + }, + { + "size": "128x128", + "idiom": "mac", + "filename": "app_icon_128.png", + "scale": "1x" + }, + { + "size": "128x128", + "idiom": "mac", + "filename": "app_icon_256.png", + "scale": "2x" + }, + { + "size": "256x256", + "idiom": "mac", + "filename": "app_icon_256.png", + "scale": "1x" + }, + { + "size": "256x256", + "idiom": "mac", + "filename": "app_icon_512.png", + "scale": "2x" + }, + { + "size": "512x512", + "idiom": "mac", + "filename": "app_icon_512.png", + "scale": "1x" + }, + { + "size": "512x512", + "idiom": "mac", + "filename": "app_icon_1024.png", + "scale": "2x" + } + ] +} \ No newline at end of file diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000..8c7005a Binary files /dev/null and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000..c4bbff2 Binary files /dev/null and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000..56f5fc2 Binary files /dev/null and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png new file mode 100644 index 0000000..ac9351f Binary files /dev/null and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png new file mode 100644 index 0000000..4d5807b Binary files /dev/null and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png new file mode 100644 index 0000000..0ef3786 Binary files /dev/null and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png differ diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000..bb8182c Binary files /dev/null and b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png differ diff --git a/macos/Runner/Base.lproj/MainMenu.xib b/macos/Runner/Base.lproj/MainMenu.xib new file mode 100644 index 0000000..80e867a --- /dev/null +++ b/macos/Runner/Base.lproj/MainMenu.xib @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/macos/Runner/Configs/AppInfo.xcconfig b/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 0000000..5e18b20 --- /dev/null +++ b/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = service + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.service + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. diff --git a/macos/Runner/Configs/Debug.xcconfig b/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 0000000..36b0fd9 --- /dev/null +++ b/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/macos/Runner/Configs/Release.xcconfig b/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 0000000..dff4f49 --- /dev/null +++ b/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/macos/Runner/Configs/Warnings.xcconfig b/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 0000000..42bcbf4 --- /dev/null +++ b/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/macos/Runner/DebugProfile.entitlements b/macos/Runner/DebugProfile.entitlements new file mode 100644 index 0000000..0bfcd59 --- /dev/null +++ b/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,14 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + com.apple.security.network.client + + + \ No newline at end of file diff --git a/macos/Runner/Info.plist b/macos/Runner/Info.plist new file mode 100644 index 0000000..93c86ef --- /dev/null +++ b/macos/Runner/Info.plist @@ -0,0 +1,75 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + LSRequiresIPhoneOS + + NSCameraUsageDescription + This app requires access to your camera in order to scan QR codes and capture images + for uploading and access to connect to a call. + NSFaceIDUsageDescription + Use Face ID to securely authenticate payment accounts. + NSLocationAlwaysAndWhenInUseUsageDescription + This app needs access to your location to provide you with the best ride experience. + Your location data will be used to find the nearest available cars and connect you with + the closest captain for efficient and convenient rides. + NSLocationAlwaysUsageDescription + This app needs access to location. + NSLocationWhenInUseUsageDescription + This app needs access to your location to provide you with the best ride experience. + Your location data will be used to find the nearest available cars and connect you with + the closest captain for efficient and convenient rides. + NSMicrophoneUsageDescription + This app requires access to your microphone to record audio, allowing you to add + voice recordings to your photos and videos and access to connect to a call. + NSPhotoLibraryUsageDescription + Explanation of why your app needs access to the photo library. + UIApplicationSupportsIndirectInputEvents + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + + \ No newline at end of file diff --git a/macos/Runner/MainFlutterWindow.swift b/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 0000000..3cc05eb --- /dev/null +++ b/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/macos/Runner/Release.entitlements b/macos/Runner/Release.entitlements new file mode 100644 index 0000000..852fa1a --- /dev/null +++ b/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/macos/RunnerTests/RunnerTests.swift b/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000..61f3bd1 --- /dev/null +++ b/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/pubspec.lock b/pubspec.lock new file mode 100644 index 0000000..08c9dba --- /dev/null +++ b/pubspec.lock @@ -0,0 +1,1265 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" + url: "https://pub.dev" + source: hosted + version: "67.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: b46f62516902afb04befa4b30eb6a12ac1f58ca8cb25fb9d632407259555dd3d + url: "https://pub.dev" + source: hosted + version: "1.3.39" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" + url: "https://pub.dev" + source: hosted + version: "6.4.1" + archive: + dependency: transitive + description: + name: archive + sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d + url: "https://pub.dev" + source: hosted + version: "3.6.1" + args: + dependency: transitive + description: + name: args + sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" + url: "https://pub.dev" + source: hosted + version: "2.5.0" + async: + dependency: transitive + description: + name: async + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" + source: hosted + version: "2.11.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + build: + dependency: transitive + description: + name: build + sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" + url: "https://pub.dev" + source: hosted + version: "2.4.1" + build_config: + dependency: transitive + description: + name: build_config + sha256: bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1 + url: "https://pub.dev" + source: hosted + version: "1.1.1" + build_daemon: + dependency: transitive + description: + name: build_daemon + sha256: "79b2aef6ac2ed00046867ed354c88778c9c0f029df8a20fe10b5436826721ef9" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + build_resolvers: + dependency: transitive + description: + name: build_resolvers + sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a" + url: "https://pub.dev" + source: hosted + version: "2.4.2" + build_runner: + dependency: "direct dev" + description: + name: build_runner + sha256: "644dc98a0f179b872f612d3eb627924b578897c629788e858157fa5e704ca0c7" + url: "https://pub.dev" + source: hosted + version: "2.4.11" + build_runner_core: + dependency: transitive + description: + name: build_runner_core + sha256: e3c79f69a64bdfcd8a776a3c28db4eb6e3fb5356d013ae5eb2e52007706d5dbe + url: "https://pub.dev" + source: hosted + version: "7.3.1" + built_collection: + dependency: transitive + description: + name: built_collection + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" + source: hosted + version: "5.1.1" + built_value: + dependency: transitive + description: + name: built_value + sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb + url: "https://pub.dev" + source: hosted + version: "8.9.2" + characters: + dependency: transitive + description: + name: characters + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + url: "https://pub.dev" + source: hosted + version: "2.0.3" + cli_util: + dependency: transitive + description: + name: cli_util + sha256: c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19 + url: "https://pub.dev" + source: hosted + version: "0.4.1" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + code_builder: + dependency: transitive + description: + name: code_builder + sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 + url: "https://pub.dev" + source: hosted + version: "4.10.0" + collection: + dependency: transitive + description: + name: collection + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + url: "https://pub.dev" + source: hosted + version: "1.18.0" + convert: + dependency: transitive + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" + cross_file: + dependency: transitive + description: + name: cross_file + sha256: "55d7b444feb71301ef6b8838dbc1ae02e63dd48c8773f3810ff53bb1e2945b32" + url: "https://pub.dev" + source: hosted + version: "0.3.4+1" + crypto: + dependency: "direct main" + description: + name: crypto + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + url: "https://pub.dev" + source: hosted + version: "3.0.3" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 + url: "https://pub.dev" + source: hosted + version: "1.0.8" + dart_style: + dependency: transitive + description: + name: dart_style + sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" + url: "https://pub.dev" + source: hosted + version: "2.3.6" + device_info_plus: + dependency: transitive + description: + name: device_info_plus + sha256: eead12d1a1ed83d8283ab4c2f3fca23ac4082f29f25f29dff0f758f57d06ec91 + url: "https://pub.dev" + source: hosted + version: "10.1.0" + device_info_plus_platform_interface: + dependency: transitive + description: + name: device_info_plus_platform_interface + sha256: d3b01d5868b50ae571cd1dc6e502fc94d956b665756180f7b16ead09e836fd64 + url: "https://pub.dev" + source: hosted + version: "7.0.0" + envied: + dependency: "direct main" + description: + name: envied + sha256: bbff9c76120e4dc5e2e36a46690cf0a26feb65e7765633f4e8d916bcd173a450 + url: "https://pub.dev" + source: hosted + version: "0.5.4+1" + envied_generator: + dependency: "direct dev" + description: + name: envied_generator + sha256: "517b70de08d13dcd40e97b4e5347e216a0b1c75c99e704f3c85c0474a392d14a" + url: "https://pub.dev" + source: hosted + version: "0.5.4+1" + equatable: + dependency: transitive + description: + name: equatable + sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2 + url: "https://pub.dev" + source: hosted + version: "2.0.5" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + ffi: + dependency: transitive + description: + name: ffi + sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + file: + dependency: transitive + description: + name: file + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "045d372bf19b02aeb69cacf8b4009555fb5f6f0b7ad8016e5f46dd1387ddd492" + url: "https://pub.dev" + source: hosted + version: "0.9.2+1" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: f42eacb83b318e183b1ae24eead1373ab1334084404c8c16e0354f9a3e55d385 + url: "https://pub.dev" + source: hosted + version: "0.9.4" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b + url: "https://pub.dev" + source: hosted + version: "2.6.2" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: d3547240c20cabf205c7c7f01a50ecdbc413755814d6677f3cb366f04abcead0 + url: "https://pub.dev" + source: hosted + version: "0.9.3+1" + firebase_auth: + dependency: "direct main" + description: + name: firebase_auth + sha256: a41b56878fa6aef3ea52962329b47eee333672d4b0ecc406e071b9fc729f242c + url: "https://pub.dev" + source: hosted + version: "5.1.2" + firebase_auth_platform_interface: + dependency: transitive + description: + name: firebase_auth_platform_interface + sha256: d1c68097588f3b75ef79a22102ff96c311735c254353bccf6824d19f1a7e86b9 + url: "https://pub.dev" + source: hosted + version: "7.4.2" + firebase_auth_web: + dependency: transitive + description: + name: firebase_auth_web + sha256: e66ec0ae5697ee39ccd4865d6887cb0df220dd4ea0b21404910c68ca4c1a731a + url: "https://pub.dev" + source: hosted + version: "5.12.4" + firebase_core: + dependency: "direct main" + description: + name: firebase_core + sha256: "5159984ce9b70727473eb388394650677c02c925aaa6c9439905e1f30966a4d5" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: "1003a5a03a61fc9a22ef49f37cbcb9e46c86313a7b2e7029b9390cf8c6fc32cb" + url: "https://pub.dev" + source: hosted + version: "5.1.0" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "23509cb3cddfb3c910c143279ac3f07f06d3120f7d835e4a5d4b42558e978712" + url: "https://pub.dev" + source: hosted + version: "2.17.3" + firebase_messaging: + dependency: "direct main" + description: + name: firebase_messaging + sha256: "156c4292aa63a6a7d508c68ded984cb38730d2823c3265e573cb1e94983e2025" + url: "https://pub.dev" + source: hosted + version: "15.0.3" + firebase_messaging_platform_interface: + dependency: transitive + description: + name: firebase_messaging_platform_interface + sha256: "10408c5ca242b7fc632dd5eab4caf8fdf18ebe88db6052980fa71a18d88bd200" + url: "https://pub.dev" + source: hosted + version: "4.5.41" + firebase_messaging_web: + dependency: transitive + description: + name: firebase_messaging_web + sha256: c7a756e3750679407948de665735e69a368cb902940466e5d68a00ea7aba1aaa + url: "https://pub.dev" + source: hosted + version: "3.8.11" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_image_compress: + dependency: "direct main" + description: + name: flutter_image_compress + sha256: "45a3071868092a61b11044c70422b04d39d4d9f2ef536f3c5b11fb65a1e7dd90" + url: "https://pub.dev" + source: hosted + version: "2.3.0" + flutter_image_compress_common: + dependency: transitive + description: + name: flutter_image_compress_common + sha256: "7f79bc6c8a363063620b4e372fa86bc691e1cb28e58048cd38e030692fbd99ee" + url: "https://pub.dev" + source: hosted + version: "1.0.5" + flutter_image_compress_macos: + dependency: transitive + description: + name: flutter_image_compress_macos + sha256: "26df6385512e92b3789dc76b613b54b55c457a7f1532e59078b04bf189782d47" + url: "https://pub.dev" + source: hosted + version: "1.0.2" + flutter_image_compress_ohos: + dependency: transitive + description: + name: flutter_image_compress_ohos + sha256: e76b92bbc830ee08f5b05962fc78a532011fcd2041f620b5400a593e96da3f51 + url: "https://pub.dev" + source: hosted + version: "0.0.3" + flutter_image_compress_platform_interface: + dependency: transitive + description: + name: flutter_image_compress_platform_interface + sha256: "579cb3947fd4309103afe6442a01ca01e1e6f93dc53bb4cbd090e8ce34a41889" + url: "https://pub.dev" + source: hosted + version: "1.0.5" + flutter_image_compress_web: + dependency: transitive + description: + name: flutter_image_compress_web + sha256: f02fe352b17f82b72f481de45add240db062a2585850bea1667e82cc4cd6c311 + url: "https://pub.dev" + source: hosted + version: "0.1.4+1" + flutter_launcher_icons: + dependency: "direct main" + description: + name: flutter_launcher_icons + sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea" + url: "https://pub.dev" + source: hosted + version: "0.13.1" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" + url: "https://pub.dev" + source: hosted + version: "4.0.0" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + sha256: c6b0b4c05c458e1c01ad9bcc14041dd7b1f6783d487be4386f793f47a8a4d03e + url: "https://pub.dev" + source: hosted + version: "2.0.20" + flutter_secure_storage: + dependency: "direct main" + description: + name: flutter_secure_storage + sha256: "165164745e6afb5c0e3e3fcc72a012fb9e58496fb26ffb92cf22e16a821e85d0" + url: "https://pub.dev" + source: hosted + version: "9.2.2" + flutter_secure_storage_linux: + dependency: transitive + description: + name: flutter_secure_storage_linux + sha256: "4d91bfc23047422cbcd73ac684bc169859ee766482517c22172c86596bf1464b" + url: "https://pub.dev" + source: hosted + version: "1.2.1" + flutter_secure_storage_macos: + dependency: transitive + description: + name: flutter_secure_storage_macos + sha256: "1693ab11121a5f925bbea0be725abfcfbbcf36c1e29e571f84a0c0f436147a81" + url: "https://pub.dev" + source: hosted + version: "3.1.2" + flutter_secure_storage_platform_interface: + dependency: transitive + description: + name: flutter_secure_storage_platform_interface + sha256: cf91ad32ce5adef6fba4d736a542baca9daf3beac4db2d04be350b87f69ac4a8 + url: "https://pub.dev" + source: hosted + version: "1.1.2" + flutter_secure_storage_web: + dependency: transitive + description: + name: flutter_secure_storage_web + sha256: f4ebff989b4f07b2656fb16b47852c0aab9fed9b4ec1c70103368337bc1886a9 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + flutter_secure_storage_windows: + dependency: transitive + description: + name: flutter_secure_storage_windows + sha256: b20b07cb5ed4ed74fc567b78a72936203f587eba460af1df11281c9326cd3709 + url: "https://pub.dev" + source: hosted + version: "3.1.2" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 + url: "https://pub.dev" + source: hosted + version: "4.0.0" + get: + dependency: "direct main" + description: + name: get + sha256: e4e7335ede17452b391ed3b2ede016545706c01a02292a6c97619705e7d2a85e + url: "https://pub.dev" + source: hosted + version: "4.6.6" + get_storage: + dependency: "direct main" + description: + name: get_storage + sha256: "39db1fffe779d0c22b3a744376e86febe4ade43bf65e06eab5af707dc84185a2" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + glob: + dependency: transitive + description: + name: glob + sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + google_identity_services_web: + dependency: transitive + description: + name: google_identity_services_web + sha256: "9482364c9f8b7bd36902572ebc3a7c2b5c8ee57a9c93e6eb5099c1a9ec5265d8" + url: "https://pub.dev" + source: hosted + version: "0.3.1+1" + google_sign_in: + dependency: "direct main" + description: + name: google_sign_in + sha256: "0b8787cb9c1a68ad398e8010e8c8766bfa33556d2ab97c439fb4137756d7308f" + url: "https://pub.dev" + source: hosted + version: "6.2.1" + google_sign_in_android: + dependency: transitive + description: + name: google_sign_in_android + sha256: d30fb34b659679ea74397e9748b4ab5d720720d57dcc79538f1b3c4a68654cb3 + url: "https://pub.dev" + source: hosted + version: "6.1.27" + google_sign_in_ios: + dependency: transitive + description: + name: google_sign_in_ios + sha256: a058c9880be456f21e2e8571c1126eaacd570bdc5b6c6d9d15aea4bdf22ca9fe + url: "https://pub.dev" + source: hosted + version: "5.7.6" + google_sign_in_platform_interface: + dependency: transitive + description: + name: google_sign_in_platform_interface + sha256: "1f6e5787d7a120cc0359ddf315c92309069171306242e181c09472d1b00a2971" + url: "https://pub.dev" + source: hosted + version: "2.4.5" + google_sign_in_web: + dependency: transitive + description: + name: google_sign_in_web + sha256: d606264c7a1a526a3aa79d938b85a601d8589731a478bd4a3dcbdeb14a572228 + url: "https://pub.dev" + source: hosted + version: "0.12.4+1" + graphs: + dependency: transitive + description: + name: graphs + sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + http: + dependency: "direct main" + description: + name: http + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 + url: "https://pub.dev" + source: hosted + version: "1.2.2" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + url: "https://pub.dev" + source: hosted + version: "3.2.1" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + image: + dependency: "direct main" + description: + name: image + sha256: "2237616a36c0d69aef7549ab439b833fb7f9fb9fc861af2cc9ac3eedddd69ca8" + url: "https://pub.dev" + source: hosted + version: "4.2.0" + image_cropper: + dependency: "direct main" + description: + name: image_cropper + sha256: d31be025c744ac1bf52d1f49cfdd92fd421e7e45ddadaaac0b39901f67c2a7e3 + url: "https://pub.dev" + source: hosted + version: "7.1.0" + image_cropper_for_web: + dependency: transitive + description: + name: image_cropper_for_web + sha256: "6386e64908ce5d5df404e01c750a99b633dfcea88da69b3efcd3b3811d639760" + url: "https://pub.dev" + source: hosted + version: "5.1.0" + image_cropper_platform_interface: + dependency: transitive + description: + name: image_cropper_platform_interface + sha256: "39c6539571bda7ce666e0a2f450246a5d42187406eef8f486a3d64f1d9381637" + url: "https://pub.dev" + source: hosted + version: "6.1.0" + image_picker: + dependency: "direct main" + description: + name: image_picker + sha256: "021834d9c0c3de46bf0fe40341fa07168407f694d9b2bb18d532dc1261867f7a" + url: "https://pub.dev" + source: hosted + version: "1.1.2" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: cea2bd5b9fcff039a4901d3b13c67fe747f940be9ba76bde1bcd218d168eeb7f + url: "https://pub.dev" + source: hosted + version: "0.8.12+6" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: "5d6eb13048cd47b60dbf1a5495424dea226c5faf3950e20bf8120a58efb5b5f3" + url: "https://pub.dev" + source: hosted + version: "3.0.4" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: "6703696ad49f5c3c8356d576d7ace84d1faf459afb07accbb0fae780753ff447" + url: "https://pub.dev" + source: hosted + version: "0.8.12" + image_picker_linux: + dependency: transitive + description: + name: image_picker_linux + sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_macos: + dependency: transitive + description: + name: image_picker_macos + sha256: "3f5ad1e8112a9a6111c46d0b57a7be2286a9a07fc6e1976fdf5be2bd31d4ff62" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: "9ec26d410ff46f483c5519c29c02ef0e02e13a543f882b152d4bfd2f06802f80" + url: "https://pub.dev" + source: hosted + version: "2.10.0" + image_picker_windows: + dependency: transitive + description: + name: image_picker_windows + sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" + url: "https://pub.dev" + source: hosted + version: "0.2.1+1" + intl: + dependency: "direct main" + description: + name: intl + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf + url: "https://pub.dev" + source: hosted + version: "0.19.0" + io: + dependency: transitive + description: + name: io + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + url: "https://pub.dev" + source: hosted + version: "1.0.4" + js: + dependency: transitive + description: + name: js + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 + url: "https://pub.dev" + source: hosted + version: "0.6.7" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" + url: "https://pub.dev" + source: hosted + version: "4.9.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + url: "https://pub.dev" + source: hosted + version: "10.0.4" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + url: "https://pub.dev" + source: hosted + version: "3.0.3" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + url: "https://pub.dev" + source: hosted + version: "3.0.1" + lints: + dependency: transitive + description: + name: lints + sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" + url: "https://pub.dev" + source: hosted + version: "4.0.0" + logging: + dependency: transitive + description: + name: logging + sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + url: "https://pub.dev" + source: hosted + version: "0.12.16+1" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + url: "https://pub.dev" + source: hosted + version: "0.8.0" + meta: + dependency: transitive + description: + name: meta + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + url: "https://pub.dev" + source: hosted + version: "1.12.0" + mime: + dependency: transitive + description: + name: mime + sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2" + url: "https://pub.dev" + source: hosted + version: "1.0.5" + package_config: + dependency: transitive + description: + name: package_config + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + path: + dependency: "direct main" + description: + name: path + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + url: "https://pub.dev" + source: hosted + version: "1.9.0" + path_provider: + dependency: transitive + description: + name: path_provider + sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161 + url: "https://pub.dev" + source: hosted + version: "2.1.3" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: "30c5aa827a6ae95ce2853cdc5fe3971daaac00f6f081c419c013f7f57bff2f5e" + url: "https://pub.dev" + source: hosted + version: "2.2.7" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: f234384a3fdd67f989b4d54a5d73ca2a6c422fa55ae694381ae0f4375cd1ea16 + url: "https://pub.dev" + source: hosted + version: "2.4.0" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 + url: "https://pub.dev" + source: hosted + version: "2.3.0" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 + url: "https://pub.dev" + source: hosted + version: "6.0.2" + platform: + dependency: transitive + description: + name: platform + sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65" + url: "https://pub.dev" + source: hosted + version: "3.1.5" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.dev" + source: hosted + version: "2.1.8" + pool: + dependency: transitive + description: + name: pool + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" + source: hosted + version: "1.5.1" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + pubspec_parse: + dependency: transitive + description: + name: pubspec_parse + sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8 + url: "https://pub.dev" + source: hosted + version: "1.3.0" + recase: + dependency: transitive + description: + name: recase + sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 + url: "https://pub.dev" + source: hosted + version: "4.1.0" + secure_string_operations: + dependency: "direct main" + description: + path: secure_string_operations + relative: true + source: path + version: "1.0.0" + share: + dependency: "direct main" + description: + name: share + sha256: "97e6403f564ed1051a01534c2fc919cb6e40ea55e60a18ec23cee6e0ce19f4be" + url: "https://pub.dev" + source: hosted + version: "2.0.4" + shelf: + dependency: transitive + description: + name: shelf + sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 + url: "https://pub.dev" + source: hosted + version: "1.4.1" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + sha256: "073c147238594ecd0d193f3456a5fe91c4b0abbcc68bf5cd95b36c4e194ac611" + url: "https://pub.dev" + source: hosted + version: "2.0.0" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_gen: + dependency: transitive + description: + name: source_gen + sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" + url: "https://pub.dev" + source: hosted + version: "1.5.0" + source_span: + dependency: transitive + description: + name: source_span + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" + source: hosted + version: "1.10.0" + sqflite: + dependency: "direct main" + description: + name: sqflite + sha256: a43e5a27235518c03ca238e7b4732cf35eabe863a369ceba6cbefa537a66f16d + url: "https://pub.dev" + source: hosted + version: "2.3.3+1" + sqflite_common: + dependency: transitive + description: + name: sqflite_common + sha256: "3da423ce7baf868be70e2c0976c28a1bb2f73644268b7ffa7d2e08eab71f16a4" + url: "https://pub.dev" + source: hosted + version: "2.5.4" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + url: "https://pub.dev" + source: hosted + version: "1.11.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + url: "https://pub.dev" + source: hosted + version: "2.1.2" + stream_transform: + dependency: transitive + description: + name: stream_transform + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + synchronized: + dependency: transitive + description: + name: synchronized + sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558" + url: "https://pub.dev" + source: hosted + version: "3.1.0+1" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + url: "https://pub.dev" + source: hosted + version: "0.7.0" + timing: + dependency: transitive + description: + name: timing + sha256: "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32" + url: "https://pub.dev" + source: hosted + version: "1.0.1" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + url: "https://pub.dev" + source: hosted + version: "1.3.2" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" + url: "https://pub.dev" + source: hosted + version: "6.3.0" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "95d8027db36a0e52caf55680f91e33ea6aa12a3ce608c90b06f4e429a21067ac" + url: "https://pub.dev" + source: hosted + version: "6.3.5" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: e43b677296fadce447e987a2f519dcf5f6d1e527dc35d01ffab4fff5b8a7063e + url: "https://pub.dev" + source: hosted + version: "6.3.1" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 + url: "https://pub.dev" + source: hosted + version: "3.1.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "8d9e750d8c9338601e709cd0885f95825086bd8b642547f26bda435aade95d8a" + url: "https://pub.dev" + source: hosted + version: "2.3.1" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7 + url: "https://pub.dev" + source: hosted + version: "3.1.1" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + vibration: + dependency: "direct main" + description: + name: vibration + sha256: "06588a845a4ebc73ab7ff7da555c2b3dbcd9676164b5856a38bf0b2287f1045d" + url: "https://pub.dev" + source: hosted + version: "1.9.0" + vibration_platform_interface: + dependency: transitive + description: + name: vibration_platform_interface + sha256: "735a5fef0f284de0ad9449a5ed7d36ba017c6f59b5b20ac64418af4a6bd35ee7" + url: "https://pub.dev" + source: hosted + version: "0.0.1" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + url: "https://pub.dev" + source: hosted + version: "14.2.1" + watcher: + dependency: transitive + description: + name: watcher + sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" + web: + dependency: transitive + description: + name: web + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + url: "https://pub.dev" + source: hosted + version: "0.5.1" + web_socket: + dependency: transitive + description: + name: web_socket + sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83" + url: "https://pub.dev" + source: hosted + version: "0.1.6" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f" + url: "https://pub.dev" + source: hosted + version: "3.0.1" + win32: + dependency: transitive + description: + name: win32 + sha256: a79dbe579cb51ecd6d30b17e0cae4e0ea15e2c0e66f69ad4198f22a6789e94f4 + url: "https://pub.dev" + source: hosted + version: "5.5.1" + win32_registry: + dependency: transitive + description: + name: win32_registry + sha256: "10589e0d7f4e053f2c61023a31c9ce01146656a70b7b7f0828c0b46d7da2a9bb" + url: "https://pub.dev" + source: hosted + version: "1.1.3" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d + url: "https://pub.dev" + source: hosted + version: "1.0.4" + xml: + dependency: transitive + description: + name: xml + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + url: "https://pub.dev" + source: hosted + version: "6.5.0" + yaml: + dependency: transitive + description: + name: yaml + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + url: "https://pub.dev" + source: hosted + version: "3.1.2" +sdks: + dart: ">=3.4.3 <4.0.0" + flutter: ">=3.22.0" diff --git a/pubspec.yaml b/pubspec.yaml new file mode 100644 index 0000000..aa028b8 --- /dev/null +++ b/pubspec.yaml @@ -0,0 +1,129 @@ +name: service +description: "A new Flutter project." +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: "none" # Remove this line if you wish to publish to pub.dev + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +# In Windows, build-name is used as the major, minor, and patch parts +# of the product and file versions while build-number is used as the build suffix. +version: 1.0.0+1 + +environment: + sdk: ">=3.4.3 <4.0.0" + +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. +dependencies: + flutter: + sdk: flutter + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.6 + secure_string_operations: + path: ./secure_string_operations + firebase_messaging: ^15.0.2 + firebase_core: ^3.1.1 + path: ^1.9.0 + sqflite: ^2.3.3+1 + intl: ^0.19.0 + http: ^1.2.1 + get: ^4.6.6 + get_storage: ^2.1.1 + url_launcher: ^6.3.0 + flutter_launcher_icons: ^0.13.1 + envied: ^0.5.4+1 + share: ^2.0.4 + google_sign_in: ^6.2.1 + firebase_auth: ^5.1.1 + vibration: ^1.9.0 + flutter_secure_storage: ^9.2.2 + crypto: ^3.0.3 + flutter_image_compress: ^2.3.0 + image: ^4.1.3 #to be remove + image_cropper: ^7.1.0 + image_picker: ^1.0.4 + +dev_dependencies: + flutter_test: + sdk: flutter + + # The "flutter_lints" package below contains a set of recommended lints to + # encourage good coding practices. The lint set provided by the package is + # activated in the `analysis_options.yaml` file located at the root of your + # package. See that file for information about deactivating specific lint + # rules and activating additional ones. + flutter_lints: ^4.0.0 + build_runner: ^2.4.11 + envied_generator: ^0.5.4+1 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter packages. +flutter: + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true +flutter_launcher_icons: + android: "launcher_icon" + ios: true + image_path: "assets/images/logo.png" + min_sdk_android: 21 + web: + generate: true + image_path: "assets/images/logo.png" + background_color: "#hexcode" + theme_color: "#hexcode" + windows: + generate: true + image_path: "assets/images/logo.png" + icon_size: 48 + macos: + generate: true + image_path: "assets/images/logo.png" + + # To add assets to your application, add an assets section, like this: + assets: + - assets/ + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/assets-and-images/#from-packages + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/custom-fonts/#from-packages diff --git a/secure_string_operations/lib/secure_string_operations.dart b/secure_string_operations/lib/secure_string_operations.dart new file mode 100644 index 0000000..d428ac3 --- /dev/null +++ b/secure_string_operations/lib/secure_string_operations.dart @@ -0,0 +1,47 @@ +// File: lib/secure_string_operations.dart + +library secure_string_operations; + +class X { + static String c(String a, Map b) { + StringBuffer c = StringBuffer(); + c.write(a); + + String d = "Bl"; + c.write(b[d] ?? d); + + StringBuffer e = StringBuffer(); + String f = c.toString(); + + for (int g = 0; g < f.length; g++) { + String h = f[g]; + e.write(b[h] ?? h); + } + + return e.toString(); + } + + static String r(String a, Map b) { + StringBuffer c = StringBuffer(); + String d = "Bl"; + int e = d.length; + + for (int f = 0; f < a.length; f++) { + String g = a[f]; + String h = b.keys.firstWhere( + (i) => b[i] == g, + orElse: () => g, + ); + + c.write(h); + } + + String j = c.toString(); + + if (j.endsWith(d)) { + j = j.substring(0, j.length - e); + } + + return j; + } +} diff --git a/secure_string_operations/pubspec.lock b/secure_string_operations/pubspec.lock new file mode 100644 index 0000000..fce7ef1 --- /dev/null +++ b/secure_string_operations/pubspec.lock @@ -0,0 +1,5 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: {} +sdks: + dart: ">=2.12.0 <4.0.0" diff --git a/secure_string_operations/pubspec.yaml b/secure_string_operations/pubspec.yaml new file mode 100644 index 0000000..b910400 --- /dev/null +++ b/secure_string_operations/pubspec.yaml @@ -0,0 +1,6 @@ +name: secure_string_operations +description: A package for secure string operations +version: 1.0.0 + +environment: + sdk: ">=2.12.0 <3.0.0" diff --git a/test/widget_test.dart b/test/widget_test.dart new file mode 100644 index 0000000..c484007 --- /dev/null +++ b/test/widget_test.dart @@ -0,0 +1,30 @@ +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility in the flutter_test package. For example, you can send tap and scroll +// gestures. You can also use WidgetTester to find child widgets in the widget +// tree, read text, and verify that the values of widget properties are correct. + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'package:service/main.dart'; + +void main() { + testWidgets('Counter increments smoke test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(MyApp()); + + // Verify that our counter starts at 0. + expect(find.text('0'), findsOneWidget); + expect(find.text('1'), findsNothing); + + // Tap the '+' icon and trigger a frame. + await tester.tap(find.byIcon(Icons.add)); + await tester.pump(); + + // Verify that our counter has incremented. + expect(find.text('0'), findsNothing); + expect(find.text('1'), findsOneWidget); + }); +} diff --git a/web/favicon.png b/web/favicon.png new file mode 100644 index 0000000..56f5fc2 Binary files /dev/null and b/web/favicon.png differ diff --git a/web/icons/Icon-192.png b/web/icons/Icon-192.png new file mode 100644 index 0000000..0842ea5 Binary files /dev/null and b/web/icons/Icon-192.png differ diff --git a/web/icons/Icon-512.png b/web/icons/Icon-512.png new file mode 100644 index 0000000..0ef3786 Binary files /dev/null and b/web/icons/Icon-512.png differ diff --git a/web/icons/Icon-maskable-192.png b/web/icons/Icon-maskable-192.png new file mode 100644 index 0000000..0842ea5 Binary files /dev/null and b/web/icons/Icon-maskable-192.png differ diff --git a/web/icons/Icon-maskable-512.png b/web/icons/Icon-maskable-512.png new file mode 100644 index 0000000..0ef3786 Binary files /dev/null and b/web/icons/Icon-maskable-512.png differ diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..b40de2a --- /dev/null +++ b/web/index.html @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + service + + + + + + diff --git a/web/manifest.json b/web/manifest.json new file mode 100644 index 0000000..dc98146 --- /dev/null +++ b/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "service", + "short_name": "service", + "start_url": ".", + "display": "standalone", + "background_color": "#hexcode", + "theme_color": "#hexcode", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} \ No newline at end of file diff --git a/windows/.gitignore b/windows/.gitignore new file mode 100644 index 0000000..d492d0d --- /dev/null +++ b/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/windows/CMakeLists.txt b/windows/CMakeLists.txt new file mode 100644 index 0000000..7fbaa6c --- /dev/null +++ b/windows/CMakeLists.txt @@ -0,0 +1,108 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(service LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "service") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(VERSION 3.14...3.25) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Copy the native assets provided by the build.dart from all packages. +set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/") +install(DIRECTORY "${NATIVE_ASSETS_DIR}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/windows/flutter/CMakeLists.txt b/windows/flutter/CMakeLists.txt new file mode 100644 index 0000000..903f489 --- /dev/null +++ b/windows/flutter/CMakeLists.txt @@ -0,0 +1,109 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# Set fallback configurations for older versions of the flutter tool. +if (NOT DEFINED FLUTTER_TARGET_PLATFORM) + set(FLUTTER_TARGET_PLATFORM "windows-x64") +endif() + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + ${FLUTTER_TARGET_PLATFORM} $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 0000000..7c1b861 --- /dev/null +++ b/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,26 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + +#include +#include +#include +#include +#include + +void RegisterPlugins(flutter::PluginRegistry* registry) { + FileSelectorWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("FileSelectorWindows")); + FirebaseAuthPluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("FirebaseAuthPluginCApi")); + FirebaseCorePluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("FirebaseCorePluginCApi")); + FlutterSecureStorageWindowsPluginRegisterWithRegistrar( + registry->GetRegistrarForPlugin("FlutterSecureStorageWindowsPlugin")); + UrlLauncherWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("UrlLauncherWindows")); +} diff --git a/windows/flutter/generated_plugin_registrant.h b/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 0000000..dc139d8 --- /dev/null +++ b/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake new file mode 100644 index 0000000..c81ec6f --- /dev/null +++ b/windows/flutter/generated_plugins.cmake @@ -0,0 +1,28 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + file_selector_windows + firebase_auth + firebase_core + flutter_secure_storage_windows + url_launcher_windows +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/windows/runner/CMakeLists.txt b/windows/runner/CMakeLists.txt new file mode 100644 index 0000000..394917c --- /dev/null +++ b/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/windows/runner/Runner.rc b/windows/runner/Runner.rc new file mode 100644 index 0000000..987c251 --- /dev/null +++ b/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "service" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "service" "\0" + VALUE "LegalCopyright", "Copyright (C) 2024 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "service.exe" "\0" + VALUE "ProductName", "service" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/windows/runner/flutter_window.cpp b/windows/runner/flutter_window.cpp new file mode 100644 index 0000000..955ee30 --- /dev/null +++ b/windows/runner/flutter_window.cpp @@ -0,0 +1,71 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/windows/runner/flutter_window.h b/windows/runner/flutter_window.h new file mode 100644 index 0000000..6da0652 --- /dev/null +++ b/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/windows/runner/main.cpp b/windows/runner/main.cpp new file mode 100644 index 0000000..4dfa02c --- /dev/null +++ b/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"service", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/windows/runner/resource.h b/windows/runner/resource.h new file mode 100644 index 0000000..66a65d1 --- /dev/null +++ b/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/windows/runner/resources/app_icon.ico b/windows/runner/resources/app_icon.ico new file mode 100644 index 0000000..16c8684 Binary files /dev/null and b/windows/runner/resources/app_icon.ico differ diff --git a/windows/runner/runner.exe.manifest b/windows/runner/runner.exe.manifest new file mode 100644 index 0000000..a42ea76 --- /dev/null +++ b/windows/runner/runner.exe.manifest @@ -0,0 +1,20 @@ + + + + + PerMonitorV2 + + + + + + + + + + + + + + + diff --git a/windows/runner/utils.cpp b/windows/runner/utils.cpp new file mode 100644 index 0000000..3a0b465 --- /dev/null +++ b/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + unsigned int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length == 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/windows/runner/utils.h b/windows/runner/utils.h new file mode 100644 index 0000000..3879d54 --- /dev/null +++ b/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/windows/runner/win32_window.cpp b/windows/runner/win32_window.cpp new file mode 100644 index 0000000..60608d0 --- /dev/null +++ b/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/windows/runner/win32_window.h b/windows/runner/win32_window.h new file mode 100644 index 0000000..e901dde --- /dev/null +++ b/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_