mirror of
https://github.com/tomfong/simple-qr.git
synced 2025-06-28 20:19:59 +00:00
commit
6812279341
28 changed files with 764 additions and 280 deletions
|
@ -68,6 +68,7 @@ By using the app, you can
|
|||
* German Deutsch (de)
|
||||
* French Français (fr)
|
||||
* Italian Italiano (it)
|
||||
* Russian Русский (ru)
|
||||
|
||||
You are welcomed to help translate the app into more languages (refer to this <a href="#how-to-help-translate">section</a>)
|
||||
|
||||
|
@ -115,12 +116,13 @@ Thank you the following contributors who have made the app better!
|
|||
|:-:|:-:|:-:|
|
||||
| mondstern | [mondlicht-und-sterne](https://github.com/mondlicht-und-sterne) | German language translation |
|
||||
| Valentino Bocchetti | [luftmensch-luftmensch](https://github.com/luftmensch-luftmensch) | Italian language translation |
|
||||
| Smooth-E | [Smooth-E](https://github.com/Smooth-E) | Russian language translation |
|
||||
|
||||
## Framework
|
||||
|
||||
```sh
|
||||
Ionic CLI : 6.20.4
|
||||
Ionic Framework : @ionic/angular 6.3.7
|
||||
Ionic Framework : @ionic/angular 6.3.9
|
||||
@angular-devkit/build-angular : 14.2.10
|
||||
@angular-devkit/schematics : 14.2.10
|
||||
@angular/cli : 14.2.10
|
||||
|
|
|
@ -6,8 +6,8 @@ android {
|
|||
applicationId "com.tomfong.simpleqr"
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
versionCode 3020000
|
||||
versionName "3.2.0"
|
||||
versionCode 3030000
|
||||
versionName "3.3.0"
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
aaptOptions {
|
||||
// Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
|
||||
|
|
6
android/app/src/main/res/values-ru/colors.xml
Normal file
6
android/app/src/main/res/values-ru/colors.xml
Normal file
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<color tools:ignore="UnusedResources" name="colorPrimary">#00a5aa</color>
|
||||
<color tools:ignore="UnusedResources" name="colorPrimaryDark">#00a5aa</color>
|
||||
<color tools:ignore="UnusedResources" name="colorAccent">#00a5aa</color>
|
||||
</resources>
|
7
android/app/src/main/res/values-ru/strings.xml
Normal file
7
android/app/src/main/res/values-ru/strings.xml
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<resources>
|
||||
<string name="app_name">Simple QR</string>
|
||||
<string name="title_activity_main">Simple QR</string>
|
||||
<string name="package_name">com.tomfong.simpleqr</string>
|
||||
<string name="custom_url_scheme">com.tomfong.simpleqr</string>
|
||||
</resources>
|
22
android/app/src/main/res/values-ru/styles.xml
Normal file
22
android/app/src/main/res/values-ru/styles.xml
Normal file
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<!-- Base application theme. -->
|
||||
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
|
||||
<!-- Customize your theme here. -->
|
||||
<item name="colorPrimary">@color/colorPrimary</item>
|
||||
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
||||
<item name="colorAccent">@color/colorAccent</item>
|
||||
</style>
|
||||
|
||||
<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.DayNight.NoActionBar">
|
||||
<item name="windowActionBar">false</item>
|
||||
<item name="windowNoTitle">true</item>
|
||||
<item name="android:background">@null</item>
|
||||
</style>
|
||||
|
||||
<style name="AppTheme.NoActionBarLaunch" parent="Theme.SplashScreen">
|
||||
<item name="android:background">@drawable/splash_background</item>
|
||||
<item name="android:windowBackground">@drawable/splash_background</item>
|
||||
</style>
|
||||
</resources>
|
3
fastlane/metadata/android/en-US/changelogs/3030000.txt
Normal file
3
fastlane/metadata/android/en-US/changelogs/3030000.txt
Normal file
|
@ -0,0 +1,3 @@
|
|||
* Support Russian language
|
||||
* Allow user to manually save a record if auto logging is off
|
||||
* Minor update on UI
|
|
@ -1,6 +1,6 @@
|
|||
<i>Simple QR</i> is an open-source app to scan, create and store QR codes with a simple UI and experience. No backend service connected. No data collected. No ads.
|
||||
|
||||
English, French, German, Itanlian, Traditional Chinese and Simplified Chinese are supported.
|
||||
English, French, German, Itanlian, Russian, Traditional Chinese and Simplified Chinese are supported.
|
||||
|
||||
By using the app, you can:
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
1B75189429375EAB00800D38 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
2FAD9762203C412B000D30F8 /* config.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = config.xml; sourceTree = "<group>"; };
|
||||
50379B222058CBB4000EE86E /* capacitor.config.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = capacitor.config.json; sourceTree = "<group>"; };
|
||||
504EC3041FED79650016851F /* App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
|
@ -160,6 +161,7 @@
|
|||
de,
|
||||
fr,
|
||||
it,
|
||||
ru,
|
||||
);
|
||||
mainGroup = 504EC2FB1FED79650016851F;
|
||||
productRefGroup = 504EC3051FED79650016851F /* Products */;
|
||||
|
@ -268,6 +270,7 @@
|
|||
D26FE7F9283D1E6C002A61AE /* fr */,
|
||||
D26FE7FA283D1E76002A61AE /* de */,
|
||||
D29D2E2A2847C31D00566DFF /* it */,
|
||||
1B75189429375EAB00800D38 /* ru */,
|
||||
);
|
||||
name = InfoPlist.strings;
|
||||
sourceTree = "<group>";
|
||||
|
@ -396,7 +399,7 @@
|
|||
INFOPLIST_FILE = App/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
MARKETING_VERSION = 3.2.0;
|
||||
MARKETING_VERSION = 3.3.0;
|
||||
OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\"";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.tomfong.simpleqr;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
|
@ -419,7 +422,7 @@
|
|||
INFOPLIST_FILE = App/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
MARKETING_VERSION = 3.2.0;
|
||||
MARKETING_VERSION = 3.3.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.tomfong.simpleqr;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "Simple QR";
|
||||
|
|
6
ios/App/App/ru.lproj/InfoPlist.strings
Normal file
6
ios/App/App/ru.lproj/InfoPlist.strings
Normal file
|
@ -0,0 +1,6 @@
|
|||
"CFBundleDisplayName" = "Simple QR";
|
||||
"CFBundleName" = "Simple QR";
|
||||
"NSCameraUsageDescription" = "Simple QR использует камеру для сканирования QR-кода и штрих-кодов";
|
||||
"NSContactsUsageDescription" = "Simple QR использует Контакты для добавления контакта";
|
||||
"NSPhotoLibraryAddUsageDescription" = "Simple QR использует библиотеку фотографий для сохранения изображения QR-кода";
|
||||
"NSPhotoLibraryUsageDescription" = "Simple QR использует библиотеку фотографий для импорта изображений и сканирования QR-кода.";
|
322
package-lock.json
generated
322
package-lock.json
generated
|
@ -1,24 +1,24 @@
|
|||
{
|
||||
"name": "simple-qr",
|
||||
"version": "3.2.0",
|
||||
"version": "3.3.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "simple-qr",
|
||||
"version": "3.2.0",
|
||||
"version": "3.3.0",
|
||||
"dependencies": {
|
||||
"@angular/animations": "^14.2.3",
|
||||
"@angular/cdk": "^14.2.2",
|
||||
"@angular/common": "^14.2.3",
|
||||
"@angular/core": "^14.2.3",
|
||||
"@angular/forms": "^14.2.11",
|
||||
"@angular/localize": "^14.2.11",
|
||||
"@angular/forms": "^14.2.12",
|
||||
"@angular/localize": "^14.2.12",
|
||||
"@angular/material": "^14.2.2",
|
||||
"@angular/material-moment-adapter": "^14.2.7",
|
||||
"@angular/platform-browser": "^14.2.3",
|
||||
"@angular/platform-browser-dynamic": "^14.2.11",
|
||||
"@angular/router": "^14.2.11",
|
||||
"@angular/platform-browser-dynamic": "^14.2.12",
|
||||
"@angular/router": "^14.2.12",
|
||||
"@awesome-cordova-plugins/aes-256": "^6.2.0",
|
||||
"@awesome-cordova-plugins/chooser": "^6.2.0",
|
||||
"@awesome-cordova-plugins/core": "^6.2.0",
|
||||
|
@ -26,7 +26,7 @@
|
|||
"@awesome-cordova-plugins/sms": "^6.2.0",
|
||||
"@awesome-cordova-plugins/social-sharing": "^6.2.0",
|
||||
"@awesome-cordova-plugins/theme-detection": "^6.2.0",
|
||||
"@capacitor-community/barcode-scanner": "^3.0.0",
|
||||
"@capacitor-community/barcode-scanner": "^3.0.1",
|
||||
"@capacitor-community/contacts": "^2.0.0-0",
|
||||
"@capacitor-community/screen-brightness": "^4.0.0",
|
||||
"@capacitor/android": "^4.5.0",
|
||||
|
@ -43,7 +43,7 @@
|
|||
"@capacitor/splash-screen": "^4.1.2",
|
||||
"@capacitor/status-bar": "^4.1.0",
|
||||
"@capacitor/toast": "^4.1.0",
|
||||
"@ionic/angular": "^6.3.7",
|
||||
"@ionic/angular": "^6.3.9",
|
||||
"@ionic/storage": "^3.0.6",
|
||||
"@ionic/storage-angular": "^3.0.6",
|
||||
"@ng-bootstrap/ng-bootstrap": "^13.1.1",
|
||||
|
@ -75,7 +75,7 @@
|
|||
"@angular/cli": "^14.2.10",
|
||||
"@angular/compiler": "^14.2.3",
|
||||
"@angular/compiler-cli": "^14.2.3",
|
||||
"@angular/language-service": "^14.2.11",
|
||||
"@angular/language-service": "^14.2.12",
|
||||
"@capacitor/cli": "^4.5.0",
|
||||
"@ionic/angular-toolkit": "^6.1.0",
|
||||
"@ionic/cli": "6.20.1",
|
||||
|
@ -306,9 +306,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@angular/animations": {
|
||||
"version": "14.2.11",
|
||||
"resolved": "https://registry.npmjs.org/@angular/animations/-/animations-14.2.11.tgz",
|
||||
"integrity": "sha512-HOw8xecbKfs7A5Ezjf+BfXKvvwU7X8I0US5Ey6bOuLvpA3QVOGSLw9BeutY5Q2mPWiRgnNNQW+FOd8Pe9gEkpQ==",
|
||||
"version": "14.2.12",
|
||||
"resolved": "https://registry.npmjs.org/@angular/animations/-/animations-14.2.12.tgz",
|
||||
"integrity": "sha512-gwdnFZkvVUr+enUNfhfCGRGGqNHn1+vTA81apLfHYhJxgjiLUtETc4KTOrQevtDm022pEd+LSrvr8r+7ag+jkw==",
|
||||
"dependencies": {
|
||||
"tslib": "^2.3.0"
|
||||
},
|
||||
|
@ -316,7 +316,7 @@
|
|||
"node": "^14.15.0 || >=16.10.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@angular/core": "14.2.11"
|
||||
"@angular/core": "14.2.12"
|
||||
}
|
||||
},
|
||||
"node_modules/@angular/cdk": {
|
||||
|
@ -372,9 +372,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@angular/common": {
|
||||
"version": "14.2.11",
|
||||
"resolved": "https://registry.npmjs.org/@angular/common/-/common-14.2.11.tgz",
|
||||
"integrity": "sha512-a5w7lz4SoUzCwSDnuUPnfbEYPA8ufFiXz44mOv48P4uIb78q3rZ/R/EyWD1O3yJPof0o8aPNKpKZzuRDv3Q8ow==",
|
||||
"version": "14.2.12",
|
||||
"resolved": "https://registry.npmjs.org/@angular/common/-/common-14.2.12.tgz",
|
||||
"integrity": "sha512-oZunh9wfInFWhNO1P8uoEs/o4u8kerKMhw8GruywKm1TV7gHDP2Fi5WHGjFqq3XYptgBTPCTSEfyLX6Cwq1PUw==",
|
||||
"dependencies": {
|
||||
"tslib": "^2.3.0"
|
||||
},
|
||||
|
@ -382,14 +382,14 @@
|
|||
"node": "^14.15.0 || >=16.10.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@angular/core": "14.2.11",
|
||||
"@angular/core": "14.2.12",
|
||||
"rxjs": "^6.5.3 || ^7.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@angular/compiler": {
|
||||
"version": "14.2.11",
|
||||
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-14.2.11.tgz",
|
||||
"integrity": "sha512-QD4tq37qqPxxNK4o0Pd7dJm06evwEPChV67S/ecX3S6UkSDp8lVoWKiVx9htp/5s4iydKZU4eGu9oTOMOLVdOw==",
|
||||
"version": "14.2.12",
|
||||
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-14.2.12.tgz",
|
||||
"integrity": "sha512-u2MH9+NRwbbFDRNiPWPexed9CnCq9+pGHLuyACSP2uR6Ik68cE6cayeZbIeoEV5vWpda/XsLmJgPJysw7dAZLQ==",
|
||||
"dependencies": {
|
||||
"tslib": "^2.3.0"
|
||||
},
|
||||
|
@ -397,7 +397,7 @@
|
|||
"node": "^14.15.0 || >=16.10.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@angular/core": "14.2.11"
|
||||
"@angular/core": "14.2.12"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@angular/core": {
|
||||
|
@ -406,9 +406,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@angular/compiler-cli": {
|
||||
"version": "14.2.11",
|
||||
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.2.11.tgz",
|
||||
"integrity": "sha512-ipIEgueW8bhxVSq6qlgndBLVRCJoTvk1he/TI3w34m2EnZY1ctgGGCm1VbB3XARh+irVesPVMIAxRtjYds7XOw==",
|
||||
"version": "14.2.12",
|
||||
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.2.12.tgz",
|
||||
"integrity": "sha512-9Gkb9KFkaQPz8XaS8ZwwTioRZ4ywykdAWyceICEi78/Y9ConYrTX2SbFogzI2dPUZU8a04tMlbqTSmHjVbJftQ==",
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.17.2",
|
||||
"chokidar": "^3.0.0",
|
||||
|
@ -430,14 +430,14 @@
|
|||
"node": "^14.15.0 || >=16.10.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@angular/compiler": "14.2.11",
|
||||
"@angular/compiler": "14.2.12",
|
||||
"typescript": ">=4.6.2 <4.9"
|
||||
}
|
||||
},
|
||||
"node_modules/@angular/core": {
|
||||
"version": "14.2.11",
|
||||
"resolved": "https://registry.npmjs.org/@angular/core/-/core-14.2.11.tgz",
|
||||
"integrity": "sha512-4uEIA6ESMLt2f/ivKuVBpME0IbuFHWmpweN4dwJt83DfJBiBfpqdrFYZHz/Kbkh9cGCiP7L4/eKPRWTlAHehhw==",
|
||||
"version": "14.2.12",
|
||||
"resolved": "https://registry.npmjs.org/@angular/core/-/core-14.2.12.tgz",
|
||||
"integrity": "sha512-sGQxU5u4uawwvJa6jOTmGoisJiQ5HIN/RoBw99CmoqZIVyUSg9IRJJC1KVdH8gbpWBNLkElZv21lwJTL/msWyg==",
|
||||
"dependencies": {
|
||||
"tslib": "^2.3.0"
|
||||
},
|
||||
|
@ -450,9 +450,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@angular/forms": {
|
||||
"version": "14.2.11",
|
||||
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-14.2.11.tgz",
|
||||
"integrity": "sha512-sItoA3/I8j/pf3zhv8sR37M5dAYUJpezv8rw2fTT2Y+nZJFUpkFWqX2N4qpMlPY0MP9OX++8K8/d2j0Lfi3wJQ==",
|
||||
"version": "14.2.12",
|
||||
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-14.2.12.tgz",
|
||||
"integrity": "sha512-7abYlGIT2JnAtutQUlH3fQS6QEpbfftgvsVcZJCyvX0rXL3u2w2vUQkDHJH4YJJp3AHFVCH4/l7R4VcaPnrwvA==",
|
||||
"dependencies": {
|
||||
"tslib": "^2.3.0"
|
||||
},
|
||||
|
@ -460,25 +460,25 @@
|
|||
"node": "^14.15.0 || >=16.10.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@angular/common": "14.2.11",
|
||||
"@angular/core": "14.2.11",
|
||||
"@angular/platform-browser": "14.2.11",
|
||||
"@angular/common": "14.2.12",
|
||||
"@angular/core": "14.2.12",
|
||||
"@angular/platform-browser": "14.2.12",
|
||||
"rxjs": "^6.5.3 || ^7.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@angular/language-service": {
|
||||
"version": "14.2.11",
|
||||
"resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-14.2.11.tgz",
|
||||
"integrity": "sha512-YOQ7zVnRkZaIlAwA+u+x+wUGlvvKQDR+CGkIF19L/C0Zo6b8vFmfcNqWig6Wq8sRwS+5fULcPoOAESaUwq3urw==",
|
||||
"version": "14.2.12",
|
||||
"resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-14.2.12.tgz",
|
||||
"integrity": "sha512-YmW6simyEVmpDmbYVUhZ2IxSP6pmsWrV120rB9Y21/BeM39WIXA4NCNirVWlAd/KAKY9O7Sbn1nXI6rSDfhopQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": "^14.15.0 || >=16.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@angular/localize": {
|
||||
"version": "14.2.11",
|
||||
"resolved": "https://registry.npmjs.org/@angular/localize/-/localize-14.2.11.tgz",
|
||||
"integrity": "sha512-vrYv2f6BR1dKebZB+c0O4Arx7iGF1MqN4gHB+V5KHS7UPIc3YnoQn9LaFDRWWazjrXCvq1uf1Cb8qzzu19+lZQ==",
|
||||
"version": "14.2.12",
|
||||
"resolved": "https://registry.npmjs.org/@angular/localize/-/localize-14.2.12.tgz",
|
||||
"integrity": "sha512-6TTnuvubvYL1LDIJhDfd7ygxTaj0ShTILCDXT4URBhZKQbQ3HAorDqsc6SXqZVGCHdqF0hGTaeN/7zVvgP9kzA==",
|
||||
"dependencies": {
|
||||
"@babel/core": "7.18.9",
|
||||
"glob": "8.0.3",
|
||||
|
@ -493,8 +493,8 @@
|
|||
"node": "^14.15.0 || >=16.10.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@angular/compiler": "14.2.11",
|
||||
"@angular/compiler-cli": "14.2.11"
|
||||
"@angular/compiler": "14.2.12",
|
||||
"@angular/compiler-cli": "14.2.12"
|
||||
}
|
||||
},
|
||||
"node_modules/@angular/localize/node_modules/@babel/core": {
|
||||
|
@ -565,9 +565,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@angular/platform-browser": {
|
||||
"version": "14.2.11",
|
||||
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.2.11.tgz",
|
||||
"integrity": "sha512-lGi9pF0Kf/GGrVKcfxxfStM2eMSluDTmbcYuVAX28iBn5XEdfsonrkfy2cnxUMnQ7nioMAZBNGOJHbQPKz4jwg==",
|
||||
"version": "14.2.12",
|
||||
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.2.12.tgz",
|
||||
"integrity": "sha512-vOarWym8ucl1gjYWCzdwyBha+MTvL381mvTTUu8aUx6nVhHFjv4bvpjlZnZgojecqUPyxOwmPLLHvCZPJVHZYg==",
|
||||
"dependencies": {
|
||||
"tslib": "^2.3.0"
|
||||
},
|
||||
|
@ -575,9 +575,9 @@
|
|||
"node": "^14.15.0 || >=16.10.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@angular/animations": "14.2.11",
|
||||
"@angular/common": "14.2.11",
|
||||
"@angular/core": "14.2.11"
|
||||
"@angular/animations": "14.2.12",
|
||||
"@angular/common": "14.2.12",
|
||||
"@angular/core": "14.2.12"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@angular/animations": {
|
||||
|
@ -586,9 +586,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@angular/platform-browser-dynamic": {
|
||||
"version": "14.2.11",
|
||||
"resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.2.11.tgz",
|
||||
"integrity": "sha512-kjcZda+gcAiYd0I3mjLSr6xR/HkUCnmIMyqaFGoHnIDXI2c6wLDxi49pivrJFvUYJPfYAJ6GjlYTM6L9B3XSEQ==",
|
||||
"version": "14.2.12",
|
||||
"resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.2.12.tgz",
|
||||
"integrity": "sha512-oZhNJeaBmgw8+KBSYpKz2RYqEDyETC+HJXH8dwIFcP6BqqwL2NE70FdSR7EnOa5c41MEtTmMCGhrJSFR60x5/w==",
|
||||
"dependencies": {
|
||||
"tslib": "^2.3.0"
|
||||
},
|
||||
|
@ -596,16 +596,16 @@
|
|||
"node": "^14.15.0 || >=16.10.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@angular/common": "14.2.11",
|
||||
"@angular/compiler": "14.2.11",
|
||||
"@angular/core": "14.2.11",
|
||||
"@angular/platform-browser": "14.2.11"
|
||||
"@angular/common": "14.2.12",
|
||||
"@angular/compiler": "14.2.12",
|
||||
"@angular/core": "14.2.12",
|
||||
"@angular/platform-browser": "14.2.12"
|
||||
}
|
||||
},
|
||||
"node_modules/@angular/router": {
|
||||
"version": "14.2.11",
|
||||
"resolved": "https://registry.npmjs.org/@angular/router/-/router-14.2.11.tgz",
|
||||
"integrity": "sha512-AbnyKXabar2WsG3fL24O1xdwkcRhRKI7u2vc9D8bcp2ks5GOJNxfbtG2Z6PSO18vtDszQxwELRe2cOEe+0TmPQ==",
|
||||
"version": "14.2.12",
|
||||
"resolved": "https://registry.npmjs.org/@angular/router/-/router-14.2.12.tgz",
|
||||
"integrity": "sha512-r5tVus5RJDNc4U2v0jMtjPiAS1xDsVsJ70lS313DgZmBDHIVZP1cWIehdxwgNlGwQQtAA36eG7toBwqUU3gb/A==",
|
||||
"dependencies": {
|
||||
"tslib": "^2.3.0"
|
||||
},
|
||||
|
@ -613,9 +613,9 @@
|
|||
"node": "^14.15.0 || >=16.10.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@angular/common": "14.2.11",
|
||||
"@angular/core": "14.2.11",
|
||||
"@angular/platform-browser": "14.2.11",
|
||||
"@angular/common": "14.2.12",
|
||||
"@angular/core": "14.2.12",
|
||||
"@angular/platform-browser": "14.2.12",
|
||||
"rxjs": "^6.5.3 || ^7.4.0"
|
||||
}
|
||||
},
|
||||
|
@ -720,9 +720,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@babel/compat-data": {
|
||||
"version": "7.20.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz",
|
||||
"integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==",
|
||||
"version": "7.20.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.5.tgz",
|
||||
"integrity": "sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==",
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
|
@ -841,9 +841,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@babel/helper-create-class-features-plugin": {
|
||||
"version": "7.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz",
|
||||
"integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==",
|
||||
"version": "7.20.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.5.tgz",
|
||||
"integrity": "sha512-3RCdA/EmEaikrhayahwToF0fpweU/8o2p8vhc1c/1kftHOdTKuC65kik/TLc+qfbS8JKw4qqJbne4ovICDhmww==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/helper-annotate-as-pure": "^7.18.6",
|
||||
|
@ -862,13 +862,13 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@babel/helper-create-regexp-features-plugin": {
|
||||
"version": "7.19.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz",
|
||||
"integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==",
|
||||
"version": "7.20.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz",
|
||||
"integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/helper-annotate-as-pure": "^7.18.6",
|
||||
"regexpu-core": "^5.1.0"
|
||||
"regexpu-core": "^5.2.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
|
@ -1101,28 +1101,28 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@babel/helper-wrap-function": {
|
||||
"version": "7.19.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz",
|
||||
"integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==",
|
||||
"version": "7.20.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz",
|
||||
"integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/helper-function-name": "^7.19.0",
|
||||
"@babel/template": "^7.18.10",
|
||||
"@babel/traverse": "^7.19.0",
|
||||
"@babel/types": "^7.19.0"
|
||||
"@babel/traverse": "^7.20.5",
|
||||
"@babel/types": "^7.20.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helpers": {
|
||||
"version": "7.20.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz",
|
||||
"integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==",
|
||||
"version": "7.20.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz",
|
||||
"integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==",
|
||||
"dependencies": {
|
||||
"@babel/template": "^7.18.10",
|
||||
"@babel/traverse": "^7.20.1",
|
||||
"@babel/types": "^7.20.0"
|
||||
"@babel/traverse": "^7.20.5",
|
||||
"@babel/types": "^7.20.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
|
@ -1142,9 +1142,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@babel/parser": {
|
||||
"version": "7.20.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz",
|
||||
"integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==",
|
||||
"version": "7.20.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz",
|
||||
"integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==",
|
||||
"bin": {
|
||||
"parser": "bin/babel-parser.js"
|
||||
},
|
||||
|
@ -1400,14 +1400,14 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-proposal-private-property-in-object": {
|
||||
"version": "7.18.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz",
|
||||
"integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==",
|
||||
"version": "7.20.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz",
|
||||
"integrity": "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/helper-annotate-as-pure": "^7.18.6",
|
||||
"@babel/helper-create-class-features-plugin": "^7.18.6",
|
||||
"@babel/helper-plugin-utils": "^7.18.6",
|
||||
"@babel/helper-create-class-features-plugin": "^7.20.5",
|
||||
"@babel/helper-plugin-utils": "^7.20.2",
|
||||
"@babel/plugin-syntax-private-property-in-object": "^7.14.5"
|
||||
},
|
||||
"engines": {
|
||||
|
@ -1673,9 +1673,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-block-scoping": {
|
||||
"version": "7.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz",
|
||||
"integrity": "sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==",
|
||||
"version": "7.20.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.5.tgz",
|
||||
"integrity": "sha512-WvpEIW9Cbj9ApF3yJCjIEEf1EiNJLtXagOrL5LNWEZOo3jv8pmPoYTSNJQvqej8OavVlgOoOPw6/htGZro6IkA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/helper-plugin-utils": "^7.20.2"
|
||||
|
@ -1917,13 +1917,13 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
|
||||
"version": "7.19.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz",
|
||||
"integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==",
|
||||
"version": "7.20.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz",
|
||||
"integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/helper-create-regexp-features-plugin": "^7.19.0",
|
||||
"@babel/helper-plugin-utils": "^7.19.0"
|
||||
"@babel/helper-create-regexp-features-plugin": "^7.20.5",
|
||||
"@babel/helper-plugin-utils": "^7.20.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
|
@ -1964,9 +1964,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-parameters": {
|
||||
"version": "7.20.3",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz",
|
||||
"integrity": "sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==",
|
||||
"version": "7.20.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.5.tgz",
|
||||
"integrity": "sha512-h7plkOmcndIUWXZFLgpbrh2+fXAi47zcUX7IrOQuZdLD0I0KvjJ6cvo3BEcAOsDOcZhVKGJqv07mkSqK0y2isQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/helper-plugin-utils": "^7.20.2"
|
||||
|
@ -1994,13 +1994,13 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@babel/plugin-transform-regenerator": {
|
||||
"version": "7.18.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz",
|
||||
"integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==",
|
||||
"version": "7.20.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz",
|
||||
"integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@babel/helper-plugin-utils": "^7.18.6",
|
||||
"regenerator-transform": "^0.15.0"
|
||||
"@babel/helper-plugin-utils": "^7.20.2",
|
||||
"regenerator-transform": "^0.15.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
|
@ -2300,18 +2300,18 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@babel/traverse": {
|
||||
"version": "7.20.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz",
|
||||
"integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==",
|
||||
"version": "7.20.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz",
|
||||
"integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==",
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "^7.18.6",
|
||||
"@babel/generator": "^7.20.1",
|
||||
"@babel/generator": "^7.20.5",
|
||||
"@babel/helper-environment-visitor": "^7.18.9",
|
||||
"@babel/helper-function-name": "^7.19.0",
|
||||
"@babel/helper-hoist-variables": "^7.18.6",
|
||||
"@babel/helper-split-export-declaration": "^7.18.6",
|
||||
"@babel/parser": "^7.20.1",
|
||||
"@babel/types": "^7.20.0",
|
||||
"@babel/parser": "^7.20.5",
|
||||
"@babel/types": "^7.20.5",
|
||||
"debug": "^4.1.0",
|
||||
"globals": "^11.1.0"
|
||||
},
|
||||
|
@ -2320,11 +2320,11 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@babel/traverse/node_modules/@babel/generator": {
|
||||
"version": "7.20.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz",
|
||||
"integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==",
|
||||
"version": "7.20.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz",
|
||||
"integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==",
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.20.2",
|
||||
"@babel/types": "^7.20.5",
|
||||
"@jridgewell/gen-mapping": "^0.3.2",
|
||||
"jsesc": "^2.5.1"
|
||||
},
|
||||
|
@ -2346,9 +2346,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@babel/types": {
|
||||
"version": "7.20.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz",
|
||||
"integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==",
|
||||
"version": "7.20.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz",
|
||||
"integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==",
|
||||
"dependencies": {
|
||||
"@babel/helper-string-parser": "^7.19.4",
|
||||
"@babel/helper-validator-identifier": "^7.19.1",
|
||||
|
@ -2359,11 +2359,11 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@capacitor-community/barcode-scanner": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@capacitor-community/barcode-scanner/-/barcode-scanner-3.0.0.tgz",
|
||||
"integrity": "sha512-Jzr4phHyDS+C2ZE+eoVsuq15oFvFLVtAJmmegIjwVBcb3CxgRdkt/kdVurXgVKMQ6mJ6StYI7hALeMu2vkyC6A==",
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@capacitor-community/barcode-scanner/-/barcode-scanner-3.0.1.tgz",
|
||||
"integrity": "sha512-3R6LXQ3kikuc71Pvffkul9pLvHK8v85VcvBw6E0rjAWgWJbCLf0ssBmycrqMa8/aMZjdw1XNn3nJTXijkfCifQ==",
|
||||
"peerDependencies": {
|
||||
"@capacitor/core": "^4.0.0"
|
||||
"@capacitor/core": "^4.5.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@capacitor-community/contacts": {
|
||||
|
@ -2848,11 +2848,11 @@
|
|||
"dev": true
|
||||
},
|
||||
"node_modules/@ionic/angular": {
|
||||
"version": "6.3.7",
|
||||
"resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-6.3.7.tgz",
|
||||
"integrity": "sha512-a6EAhK5+elNNvnnSFKdNxdcNKd+epEpR1csQaiixisrWpWirxTNteqNLn9HAe+13iR8esI3mGgyOzVKr011ILw==",
|
||||
"version": "6.3.9",
|
||||
"resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-6.3.9.tgz",
|
||||
"integrity": "sha512-j/nuHCulDygDeU4WwdKY1l+kwQGKRBN9afwdbCO79lztKenlPwiqyYwds2lZuvhMmF+S5oqXrN5gt26mVUBdCA==",
|
||||
"dependencies": {
|
||||
"@ionic/core": "^6.3.6",
|
||||
"@ionic/core": "6.3.9",
|
||||
"ionicons": "^6.0.4",
|
||||
"jsonc-parser": "^3.0.0",
|
||||
"tslib": "^2.0.0"
|
||||
|
@ -3323,9 +3323,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/@ionic/core": {
|
||||
"version": "6.3.7",
|
||||
"resolved": "https://registry.npmjs.org/@ionic/core/-/core-6.3.7.tgz",
|
||||
"integrity": "sha512-HWntdPsc4lVHHwz7kY2BSQteafwXsPxc8y5wAdfeA8woRLGse+1Vq00CDUihf7tTUflM1CdmVgGtyYlDAnO2fA==",
|
||||
"version": "6.3.9",
|
||||
"resolved": "https://registry.npmjs.org/@ionic/core/-/core-6.3.9.tgz",
|
||||
"integrity": "sha512-0JlCGIgLASoxZ6XXEkhCMQzdedvzqI7lsD6zBYPkUyMFOMTff7fZdQg1r9v9IQVHW+UCuyM4xc0MT4YOD4/S3A==",
|
||||
"dependencies": {
|
||||
"@stencil/core": "^2.18.0",
|
||||
"ionicons": "^6.0.4",
|
||||
|
@ -4467,9 +4467,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/anymatch": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
|
||||
"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
|
||||
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
|
||||
"dependencies": {
|
||||
"normalize-path": "^3.0.0",
|
||||
"picomatch": "^2.0.4"
|
||||
|
@ -5018,9 +5018,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/caniuse-lite": {
|
||||
"version": "1.0.30001431",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz",
|
||||
"integrity": "sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==",
|
||||
"version": "1.0.30001435",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001435.tgz",
|
||||
"integrity": "sha512-kdCkUTjR+v4YAJelyiDTqiu82BDr4W4CP5sgTA0ZBmqn30XfS2ZghPLMowik9TPhS+psWJiUNxsqLyurDbmutA==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
|
@ -5831,9 +5831,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/cssdb": {
|
||||
"version": "7.1.0",
|
||||
"resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.1.0.tgz",
|
||||
"integrity": "sha512-Sd99PrFgx28ez4GHu8yoQIufc/70h9oYowDf4EjeIKi8mac9whxRjhM3IaMr6EllP6KKKWtJrMfN6C7T9tIWvQ==",
|
||||
"version": "7.2.0",
|
||||
"resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.2.0.tgz",
|
||||
"integrity": "sha512-JYlIsE7eKHSi0UNuCyo96YuIDFqvhGgHw4Ck6lsN+DP0Tp8M64UTDT2trGbkMDqnCoEjks7CkS0XcjU0rkvBdg==",
|
||||
"dev": true,
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
|
@ -6284,9 +6284,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/enhanced-resolve": {
|
||||
"version": "5.10.0",
|
||||
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz",
|
||||
"integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==",
|
||||
"version": "5.12.0",
|
||||
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz",
|
||||
"integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"graceful-fs": "^4.2.4",
|
||||
|
@ -7866,9 +7866,9 @@
|
|||
]
|
||||
},
|
||||
"node_modules/ignore": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
|
||||
"integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz",
|
||||
"integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">= 4"
|
||||
|
@ -9371,9 +9371,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/log4js": {
|
||||
"version": "6.7.0",
|
||||
"resolved": "https://registry.npmjs.org/log4js/-/log4js-6.7.0.tgz",
|
||||
"integrity": "sha512-KA0W9ffgNBLDj6fZCq/lRbgR6ABAodRIDHrZnS48vOtfKa4PzWImb0Md1lmGCdO3n3sbCm/n1/WmrNlZ8kCI3Q==",
|
||||
"version": "6.7.1",
|
||||
"resolved": "https://registry.npmjs.org/log4js/-/log4js-6.7.1.tgz",
|
||||
"integrity": "sha512-lzbd0Eq1HRdWM2abSD7mk6YIVY0AogGJzb/z+lqzRk+8+XJP+M6L1MS5FUSc3jjGru4dbKjEMJmqlsoYYpuivQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"date-format": "^4.0.14",
|
||||
|
@ -9651,9 +9651,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/minipass": {
|
||||
"version": "3.3.4",
|
||||
"resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz",
|
||||
"integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==",
|
||||
"version": "3.3.6",
|
||||
"resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
|
||||
"integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"yallist": "^4.0.0"
|
||||
|
@ -11029,9 +11029,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/postcss-custom-properties": {
|
||||
"version": "12.1.10",
|
||||
"resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.10.tgz",
|
||||
"integrity": "sha512-U3BHdgrYhCrwTVcByFHs9EOBoqcKq4Lf3kXwbTi4hhq0qWhl/pDWq2THbv/ICX/Fl9KqeHBb8OVrTf2OaYF07A==",
|
||||
"version": "12.1.11",
|
||||
"resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz",
|
||||
"integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"postcss-value-parser": "^4.2.0"
|
||||
|
@ -12868,17 +12868,17 @@
|
|||
}
|
||||
},
|
||||
"node_modules/socket.io": {
|
||||
"version": "4.5.3",
|
||||
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.3.tgz",
|
||||
"integrity": "sha512-zdpnnKU+H6mOp7nYRXH4GNv1ux6HL6+lHL8g7Ds7Lj8CkdK1jJK/dlwsKDculbyOHifcJ0Pr/yeXnZQ5GeFrcg==",
|
||||
"version": "4.5.4",
|
||||
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.4.tgz",
|
||||
"integrity": "sha512-m3GC94iK9MfIEeIBfbhJs5BqFibMtkRk8ZpKwG2QwxV0m/eEhPIV4ara6XCF1LWNAus7z58RodiZlAH71U3EhQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"accepts": "~1.3.4",
|
||||
"base64id": "~2.0.0",
|
||||
"debug": "~4.3.2",
|
||||
"engine.io": "~6.2.0",
|
||||
"engine.io": "~6.2.1",
|
||||
"socket.io-adapter": "~2.4.0",
|
||||
"socket.io-parser": "~4.2.0"
|
||||
"socket.io-parser": "~4.2.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
|
@ -13973,9 +13973,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/vm2": {
|
||||
"version": "3.9.11",
|
||||
"resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.11.tgz",
|
||||
"integrity": "sha512-PFG8iJRSjvvBdisowQ7iVF580DXb1uCIiGaXgm7tynMR1uTBlv7UJlB1zdv5KJ+Tmq1f0Upnj3fayoEOPpCBKg==",
|
||||
"version": "3.9.12",
|
||||
"resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.12.tgz",
|
||||
"integrity": "sha512-OMmRsKh1gmdosFzuqmj6O43hqIStqXA24YbwjtUTO0TkOBP8yLNHLplbr4odnAzEcMnm9lt2r3R8kTivn8urMg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"acorn": "^8.7.0",
|
||||
|
|
17
package.json
17
package.json
|
@ -1,8 +1,7 @@
|
|||
{
|
||||
"name": "simple-qr",
|
||||
"version": "3.2.0",
|
||||
"version": "3.3.0",
|
||||
"author": "Tom Fong",
|
||||
"homepage": "https://tomfong.github.io",
|
||||
"scripts": {
|
||||
"ng": "ng",
|
||||
"build:an": "ionic cap build android --prod --no-open",
|
||||
|
@ -21,13 +20,13 @@
|
|||
"@angular/cdk": "^14.2.2",
|
||||
"@angular/common": "^14.2.3",
|
||||
"@angular/core": "^14.2.3",
|
||||
"@angular/forms": "^14.2.11",
|
||||
"@angular/localize": "^14.2.11",
|
||||
"@angular/forms": "^14.2.12",
|
||||
"@angular/localize": "^14.2.12",
|
||||
"@angular/material": "^14.2.2",
|
||||
"@angular/material-moment-adapter": "^14.2.7",
|
||||
"@angular/platform-browser": "^14.2.3",
|
||||
"@angular/platform-browser-dynamic": "^14.2.11",
|
||||
"@angular/router": "^14.2.11",
|
||||
"@angular/platform-browser-dynamic": "^14.2.12",
|
||||
"@angular/router": "^14.2.12",
|
||||
"@awesome-cordova-plugins/aes-256": "^6.2.0",
|
||||
"@awesome-cordova-plugins/chooser": "^6.2.0",
|
||||
"@awesome-cordova-plugins/core": "^6.2.0",
|
||||
|
@ -35,7 +34,7 @@
|
|||
"@awesome-cordova-plugins/sms": "^6.2.0",
|
||||
"@awesome-cordova-plugins/social-sharing": "^6.2.0",
|
||||
"@awesome-cordova-plugins/theme-detection": "^6.2.0",
|
||||
"@capacitor-community/barcode-scanner": "^3.0.0",
|
||||
"@capacitor-community/barcode-scanner": "^3.0.1",
|
||||
"@capacitor-community/contacts": "^2.0.0-0",
|
||||
"@capacitor-community/screen-brightness": "^4.0.0",
|
||||
"@capacitor/android": "^4.5.0",
|
||||
|
@ -52,7 +51,7 @@
|
|||
"@capacitor/splash-screen": "^4.1.2",
|
||||
"@capacitor/status-bar": "^4.1.0",
|
||||
"@capacitor/toast": "^4.1.0",
|
||||
"@ionic/angular": "^6.3.7",
|
||||
"@ionic/angular": "^6.3.9",
|
||||
"@ionic/storage": "^3.0.6",
|
||||
"@ionic/storage-angular": "^3.0.6",
|
||||
"@ng-bootstrap/ng-bootstrap": "^13.1.1",
|
||||
|
@ -84,7 +83,7 @@
|
|||
"@angular/cli": "^14.2.10",
|
||||
"@angular/compiler": "^14.2.3",
|
||||
"@angular/compiler-cli": "^14.2.3",
|
||||
"@angular/language-service": "^14.2.11",
|
||||
"@angular/language-service": "^14.2.12",
|
||||
"@capacitor/cli": "^4.5.0",
|
||||
"@ionic/angular-toolkit": "^6.1.0",
|
||||
"@ionic/cli": "6.20.1",
|
||||
|
|
|
@ -3,7 +3,7 @@ import { ActivatedRoute, Router } from '@angular/router';
|
|||
import { AlertController, IonItemSliding, LoadingController, ModalController, PopoverController, ToastController } from '@ionic/angular';
|
||||
import { EnvService } from 'src/app/services/env.service';
|
||||
import { format, Locale } from 'date-fns';
|
||||
import { de, enUS, fr, it, zhCN, zhHK } from 'date-fns/locale';
|
||||
import { de, enUS, fr, it, ru, zhCN, zhHK } from 'date-fns/locale';
|
||||
import { ScanRecord } from 'src/app/models/scan-record';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import { Bookmark } from 'src/app/models/bookmark';
|
||||
|
@ -138,6 +138,9 @@ export class HistoryPage {
|
|||
case "it":
|
||||
locale = it;
|
||||
break;
|
||||
case "ru":
|
||||
locale = ru;
|
||||
break;
|
||||
case "zh-CN":
|
||||
locale = zhCN;
|
||||
break;
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import { Component } from '@angular/core';
|
||||
import { Router } from '@angular/router';
|
||||
import { Preferences } from '@capacitor/preferences';
|
||||
import { AlertController, IonRouterOutlet, Platform } from '@ionic/angular';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import { EnvService } from 'src/app/services/env.service';
|
||||
|
@ -50,26 +51,45 @@ export class LandingPage {
|
|||
}
|
||||
|
||||
async confirmExitApp(): Promise<void> {
|
||||
const alert = await this.alertController.create({
|
||||
header: this.translate.instant('EXIT_APP'),
|
||||
message: this.translate.instant('MSG.EXIT_APP'),
|
||||
cssClass: ['alert-bg'],
|
||||
buttons: [
|
||||
{
|
||||
text: this.translate.instant('EXIT'),
|
||||
handler: () => {
|
||||
navigator['app'].exitApp();
|
||||
if (this.env.showExitAppAlert == "on") {
|
||||
const alert = await this.alertController.create({
|
||||
header: this.translate.instant('EXIT_APP'),
|
||||
message: this.translate.instant('MSG.EXIT_APP'),
|
||||
inputs: [
|
||||
{
|
||||
type: "checkbox",
|
||||
label: this.translate.instant("MSG.TUTORIAL_NOT_SHOW_AGAIN"),
|
||||
checked: false,
|
||||
handler: async (result) => {
|
||||
if (result.checked) {
|
||||
this.env.showExitAppAlert = "off";
|
||||
} else {
|
||||
this.env.showExitAppAlert = "on";
|
||||
}
|
||||
await Preferences.set({ key: this.env.KEY_SHOW_EXIT_APP_ALERT, value: this.env.showExitAppAlert });
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
text: this.translate.instant('RATE_THE_APP'),
|
||||
handler: () => {
|
||||
this.openGooglePlay();
|
||||
],
|
||||
cssClass: ['alert-bg', 'alert-input-no-border'],
|
||||
buttons: [
|
||||
{
|
||||
text: this.translate.instant('EXIT'),
|
||||
handler: () => {
|
||||
navigator['app'].exitApp();
|
||||
}
|
||||
},
|
||||
{
|
||||
text: this.translate.instant('RATE_THE_APP'),
|
||||
handler: () => {
|
||||
this.openGooglePlay();
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
});
|
||||
await alert.present();
|
||||
]
|
||||
});
|
||||
await alert.present();
|
||||
} else {
|
||||
navigator['app'].exitApp();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -106,19 +106,22 @@
|
|||
[ngStyle]="env.colorTheme === 'dark'? {'background-color': '#222428'} : (env.colorTheme === 'black'? {'background-color': '#000000'} : {'background-color': '#F0F0F0'})">
|
||||
|
||||
<ng-container *ngIf="env.resultPageButtons === 'icon-only'">
|
||||
<ion-row *ngIf="contentType === 'freeText' && env.showOpenFoodFactsButton === 'on' && isValidEan" class="d-flex justify-content-center">
|
||||
<ion-row *ngIf="contentType === 'freeText' && env.showOpenFoodFactsButton === 'on' && isValidEan"
|
||||
class="d-flex justify-content-center">
|
||||
<ion-button (click)="tapHaptic(); searchOpenFoodFacts()" [color]="'primary'" fill="clear">
|
||||
<ion-icon name="fast-food"></ion-icon>
|
||||
</ion-button>
|
||||
</ion-row>
|
||||
|
||||
<ion-row *ngIf="contentType === 'url' && env.showBrowseButton === 'on' && isHttp" class="d-flex justify-content-center">
|
||||
<ion-row *ngIf="contentType === 'url' && env.showBrowseButton === 'on' && isHttp"
|
||||
class="d-flex justify-content-center">
|
||||
<ion-button (click)="tapHaptic(); browseWebsite()" [color]="'primary'" fill="clear">
|
||||
<ion-icon name="globe"></ion-icon>
|
||||
</ion-button>
|
||||
</ion-row>
|
||||
|
||||
<ion-row *ngIf="contentType === 'url' && env.showOpenUrlButton === 'on' && !isHttp" class="d-flex justify-content-center">
|
||||
<ion-row *ngIf="contentType === 'url' && env.showOpenUrlButton === 'on' && !isHttp"
|
||||
class="d-flex justify-content-center">
|
||||
<ion-button (click)="tapHaptic(); openLink()" [color]="'primary'" fill="clear">
|
||||
<ion-icon name="open"></ion-icon>
|
||||
</ion-button>
|
||||
|
@ -170,52 +173,68 @@
|
|||
</ion-button>
|
||||
</ion-row>
|
||||
|
||||
<ion-row class="ion-padding-horizontal justify-content-around">
|
||||
<ion-button *ngIf="env.showSearchButton === 'on'" (click)="tapHaptic(); webSearch()"
|
||||
[color]="env.colorTheme === 'light'? 'dark' : 'light'" fill="clear"
|
||||
[disabled]="!qrCodeContent || (qrCodeContent && qrCodeContent.trim().length <= 0)">
|
||||
<ion-icon *ngIf="env.searchEngine === 'google'" slot="icon-only" name="logo-google">
|
||||
</ion-icon>
|
||||
<ion-icon *ngIf="env.searchEngine === 'bing'" slot="icon-only" src="assets/icon/microsoft-bing.svg">
|
||||
</ion-icon>
|
||||
<ion-icon *ngIf="env.searchEngine === 'yahoo'" slot="icon-only" src="assets/icon/yahoo.svg">
|
||||
</ion-icon>
|
||||
<ion-icon *ngIf="env.searchEngine === 'duckduckgo'" slot="icon-only" src="assets/icon/duck-duck-go.svg">
|
||||
</ion-icon>
|
||||
<ion-icon *ngIf="env.searchEngine === 'yandex'" slot="icon-only" src="assets/icon/yandex.svg">
|
||||
</ion-icon>
|
||||
<ion-icon *ngIf="env.searchEngine === 'ecosia'" slot="icon-only" src="assets/icon/ecosia.svg">
|
||||
</ion-icon>
|
||||
</ion-button>
|
||||
<ion-button *ngIf="env.showCopyButton === 'on'" (click)="tapHaptic(); copyText()"
|
||||
[color]="env.colorTheme === 'light'? 'dark' : 'light'" fill="clear"
|
||||
[disabled]="!qrCodeContent || (qrCodeContent && qrCodeContent.trim().length <= 0)">
|
||||
<ion-icon slot="icon-only" name="copy"></ion-icon>
|
||||
</ion-button>
|
||||
<ion-button *ngIf="env.showBase64Button === 'on'" (click)="tapHaptic(); base64()"
|
||||
[color]="env.colorTheme === 'light'? 'dark' : 'light'" fill="clear"
|
||||
[disabled]="!qrCodeContent || (qrCodeContent && qrCodeContent.trim().length <= 0)">
|
||||
<ion-icon slot="icon-only" name="code-working"></ion-icon>
|
||||
</ion-button>
|
||||
<ion-button *ngIf="env.showEnlargeButton === 'on'" (click)="tapHaptic(); enlarge()"
|
||||
[color]="env.colorTheme === 'light'? 'dark' : 'light'" fill="clear"
|
||||
[disabled]="!qrCodeContent || (qrCodeContent && qrCodeContent.trim().length <= 0)">
|
||||
<ion-icon slot="icon-only" name="qr-code-sharp"></ion-icon>
|
||||
</ion-button>
|
||||
<ion-button *ngIf="env.showBookmarkButton === 'on'" (click)="tapHaptic(); handleBookmark()"
|
||||
[color]="!bookmarked? (env.colorTheme === 'light'? 'dark' : 'light') : 'warning'" fill="clear"
|
||||
[disabled]="!qrCodeContent || (qrCodeContent && qrCodeContent.trim().length <= 0)">
|
||||
<ion-icon slot="icon-only" name="bookmark"></ion-icon>
|
||||
</ion-button>
|
||||
<ion-row class="ion-padding-horizontal">
|
||||
<div class="d-flex justify-content-between detailed-action-button-container">
|
||||
<ion-button
|
||||
*ngIf="!resultSaved && this.env.scanRecordLogging == 'off' && this.qrCodeContent != null && this.qrCodeContent != '' "
|
||||
(click)="tapHaptic(); saveRecord()" [color]="env.colorTheme === 'light'? 'dark' : 'light'" fill="clear">
|
||||
<ion-icon slot="icon-only" src="assets/icon/history.svg"></ion-icon>
|
||||
</ion-button>
|
||||
<ion-button *ngIf="env.showSearchButton === 'on'" (click)="tapHaptic(); webSearch()"
|
||||
[color]="env.colorTheme === 'light'? 'dark' : 'light'" fill="clear"
|
||||
[disabled]="!qrCodeContent || (qrCodeContent && qrCodeContent.trim().length <= 0)">
|
||||
<ion-icon *ngIf="env.searchEngine === 'google'" slot="icon-only" name="logo-google">
|
||||
</ion-icon>
|
||||
<ion-icon *ngIf="env.searchEngine === 'bing'" slot="icon-only" src="assets/icon/microsoft-bing.svg">
|
||||
</ion-icon>
|
||||
<ion-icon *ngIf="env.searchEngine === 'yahoo'" slot="icon-only" src="assets/icon/yahoo.svg">
|
||||
</ion-icon>
|
||||
<ion-icon *ngIf="env.searchEngine === 'duckduckgo'" slot="icon-only" src="assets/icon/duck-duck-go.svg">
|
||||
</ion-icon>
|
||||
<ion-icon *ngIf="env.searchEngine === 'yandex'" slot="icon-only" src="assets/icon/yandex.svg">
|
||||
</ion-icon>
|
||||
<ion-icon *ngIf="env.searchEngine === 'ecosia'" slot="icon-only" src="assets/icon/ecosia.svg">
|
||||
</ion-icon>
|
||||
</ion-button>
|
||||
<ion-button *ngIf="env.showCopyButton === 'on'" (click)="tapHaptic(); copyText()"
|
||||
[color]="env.colorTheme === 'light'? 'dark' : 'light'" fill="clear"
|
||||
[disabled]="!qrCodeContent || (qrCodeContent && qrCodeContent.trim().length <= 0)">
|
||||
<ion-icon slot="icon-only" name="copy"></ion-icon>
|
||||
</ion-button>
|
||||
<ion-button *ngIf="env.showBase64Button === 'on'" (click)="tapHaptic(); base64()"
|
||||
[color]="env.colorTheme === 'light'? 'dark' : 'light'" fill="clear"
|
||||
[disabled]="!qrCodeContent || (qrCodeContent && qrCodeContent.trim().length <= 0)">
|
||||
<ion-icon slot="icon-only" name="code-working"></ion-icon>
|
||||
</ion-button>
|
||||
<ion-button *ngIf="env.showEnlargeButton === 'on'" (click)="tapHaptic(); enlarge()"
|
||||
[color]="env.colorTheme === 'light'? 'dark' : 'light'" fill="clear"
|
||||
[disabled]="!qrCodeContent || (qrCodeContent && qrCodeContent.trim().length <= 0)">
|
||||
<ion-icon slot="icon-only" name="qr-code-sharp"></ion-icon>
|
||||
</ion-button>
|
||||
<ion-button *ngIf="env.showBookmarkButton === 'on'" (click)="tapHaptic(); handleBookmark()"
|
||||
[color]="!bookmarked? (env.colorTheme === 'light'? 'dark' : 'light') : 'warning'" fill="clear"
|
||||
[disabled]="!qrCodeContent || (qrCodeContent && qrCodeContent.trim().length <= 0)">
|
||||
<ion-icon slot="icon-only" name="bookmark"></ion-icon>
|
||||
</ion-button>
|
||||
</div>
|
||||
|
||||
</ion-row>
|
||||
</ng-container>
|
||||
|
||||
<ng-container *ngIf="env.resultPageButtons === 'detailed'">
|
||||
<ion-row class="ion-padding-horizontal py-2">
|
||||
<div class="d-flex justify-content-between detailed-action-button-container">
|
||||
<ion-button class="pr-1" *ngIf="contentType === 'freeText' && env.showOpenFoodFactsButton === 'on' && isValidEan"
|
||||
(click)="tapHaptic(); searchOpenFoodFacts()" [color]="env.colorTheme === 'light'? 'dark' : 'light'" fill="outline"
|
||||
<ion-button class="pr-1"
|
||||
*ngIf="!resultSaved && this.env.scanRecordLogging == 'off' && this.qrCodeContent != null && this.qrCodeContent != '' "
|
||||
(click)="tapHaptic(); saveRecord()" [color]="env.colorTheme === 'light'? 'dark' : 'light'" fill="outline"
|
||||
shape="round" [@inAnimation]>
|
||||
<ion-icon class="pr-2" src="assets/icon/history.svg"></ion-icon>
|
||||
<ion-label>{{ 'SAVE' | translate }}</ion-label>
|
||||
</ion-button>
|
||||
<ion-button class="pr-1"
|
||||
*ngIf="contentType === 'freeText' && env.showOpenFoodFactsButton === 'on' && isValidEan"
|
||||
(click)="tapHaptic(); searchOpenFoodFacts()" [color]="env.colorTheme === 'light'? 'dark' : 'light'"
|
||||
fill="outline" shape="round" [@inAnimation]>
|
||||
<ion-icon class="pr-2" name="fast-food"></ion-icon>
|
||||
<ion-label>Facts</ion-label>
|
||||
</ion-button>
|
||||
|
|
|
@ -54,6 +54,8 @@ export class ResultPage {
|
|||
|
||||
showQrFirst: boolean = false;
|
||||
|
||||
resultSaved: boolean = false;
|
||||
|
||||
@ViewChildren(MatFormField) formFields: QueryList<MatFormField>;
|
||||
|
||||
constructor(
|
||||
|
@ -104,6 +106,14 @@ export class ResultPage {
|
|||
this.reset();
|
||||
}
|
||||
|
||||
async saveRecord() {
|
||||
if (this.qrCodeContent != null && this.qrCodeContent != "") {
|
||||
await this.env.saveScanRecord(this.qrCodeContent);
|
||||
}
|
||||
this.resultSaved = true;
|
||||
this.presentToast(this.translate.instant("SAVED"), "short", "bottom");
|
||||
}
|
||||
|
||||
reset() {
|
||||
this.contentType = "freeText";
|
||||
delete this.qrCodeContent;
|
||||
|
@ -125,6 +135,7 @@ export class ResultPage {
|
|||
this.base64DecodedText = "";
|
||||
this.bookmarked = false;
|
||||
this.showQrFirst = false;
|
||||
this.resultSaved = false;
|
||||
delete this.env.recordSource;
|
||||
delete this.env.detailedRecordSource;
|
||||
delete this.env.viewResultFrom;
|
||||
|
|
|
@ -19,8 +19,7 @@
|
|||
</ion-text>
|
||||
</p>
|
||||
</ion-label>
|
||||
<ion-radio class="ion-margin-end" slot="end" [value]="'default'"
|
||||
[color]="'primary'">
|
||||
<ion-radio class="ion-margin-end" slot="end" [value]="'default'" [color]="'primary'">
|
||||
</ion-radio>
|
||||
</ion-item>
|
||||
<ion-item class="ion-no-padding ripple-parent" detail="false" lines="none">
|
||||
|
@ -31,8 +30,7 @@
|
|||
</ion-text>
|
||||
</p>
|
||||
</ion-label>
|
||||
<ion-radio class="ion-margin-end" slot="end" [value]="'de'"
|
||||
[color]="'primary'">
|
||||
<ion-radio class="ion-margin-end" slot="end" [value]="'de'" [color]="'primary'">
|
||||
</ion-radio>
|
||||
</ion-item>
|
||||
<ion-item class="ion-no-padding ripple-parent" detail="false" lines="none">
|
||||
|
@ -43,8 +41,7 @@
|
|||
</ion-text>
|
||||
</p>
|
||||
</ion-label>
|
||||
<ion-radio class="ion-margin-end" slot="end" [value]="'en'"
|
||||
[color]="'primary'">
|
||||
<ion-radio class="ion-margin-end" slot="end" [value]="'en'" [color]="'primary'">
|
||||
</ion-radio>
|
||||
</ion-item>
|
||||
<ion-item class="ion-no-padding ripple-parent" detail="false" lines="none">
|
||||
|
@ -55,8 +52,7 @@
|
|||
</ion-text>
|
||||
</p>
|
||||
</ion-label>
|
||||
<ion-radio class="ion-margin-end" slot="end" [value]="'fr'"
|
||||
[color]="'primary'">
|
||||
<ion-radio class="ion-margin-end" slot="end" [value]="'fr'" [color]="'primary'">
|
||||
</ion-radio>
|
||||
</ion-item>
|
||||
<ion-item class="ion-no-padding ripple-parent" detail="false" lines="none">
|
||||
|
@ -67,8 +63,18 @@
|
|||
</ion-text>
|
||||
</p>
|
||||
</ion-label>
|
||||
<ion-radio class="ion-margin-end" slot="end" [value]="'it'"
|
||||
[color]="'primary'">
|
||||
<ion-radio class="ion-margin-end" slot="end" [value]="'it'" [color]="'primary'">
|
||||
</ion-radio>
|
||||
</ion-item>
|
||||
<ion-item class="ion-no-padding ripple-parent" detail="false" lines="none">
|
||||
<ion-label class="ion-padding-start">
|
||||
<p class="ion-padding pre-line">
|
||||
<ion-text [color]="env.colorTheme === 'light'? 'dark' : 'light'" style="font-size: large;">
|
||||
Русский (ru)
|
||||
</ion-text>
|
||||
</p>
|
||||
</ion-label>
|
||||
<ion-radio class="ion-margin-end" slot="end" [value]="'ru'" [color]="'primary'">
|
||||
</ion-radio>
|
||||
</ion-item>
|
||||
<ion-item class="ion-no-padding ripple-parent" detail="false" lines="none">
|
||||
|
@ -79,8 +85,7 @@
|
|||
</ion-text>
|
||||
</p>
|
||||
</ion-label>
|
||||
<ion-radio class="ion-margin-end" slot="end" [value]="'zh-HK'"
|
||||
[color]="'primary'">
|
||||
<ion-radio class="ion-margin-end" slot="end" [value]="'zh-HK'" [color]="'primary'">
|
||||
</ion-radio>
|
||||
</ion-item>
|
||||
<ion-item class="ion-no-padding ripple-parent" detail="false" lines="none">
|
||||
|
@ -91,8 +96,7 @@
|
|||
</ion-text>
|
||||
</p>
|
||||
</ion-label>
|
||||
<ion-radio class="ion-margin-end" slot="end" [value]="'zh-CN'"
|
||||
[color]="'primary'">
|
||||
<ion-radio class="ion-margin-end" slot="end" [value]="'zh-CN'" [color]="'primary'">
|
||||
</ion-radio>
|
||||
</ion-item>
|
||||
</ion-radio-group>
|
||||
|
|
|
@ -13,7 +13,7 @@ import { Bookmark } from 'src/app/models/bookmark';
|
|||
import { SocialSharing } from '@awesome-cordova-plugins/social-sharing/ngx';
|
||||
import { Haptics, ImpactStyle } from '@capacitor/haptics';
|
||||
import { Preferences } from '@capacitor/preferences';
|
||||
import { de, enUS, fr, it, zhCN, zhHK } from 'date-fns/locale';
|
||||
import { de, enUS, fr, it, ru, zhCN, zhHK } from 'date-fns/locale';
|
||||
|
||||
@Component({
|
||||
selector: 'app-setting-record',
|
||||
|
@ -316,6 +316,9 @@ export class SettingRecordPage {
|
|||
case "it":
|
||||
rawCsvData = "ID,Contenuto,Creato a,Fonte,Tipo di codice a barre,Aggiunto ai preferiti?,Etichetta\r\n";
|
||||
break;
|
||||
case "ru":
|
||||
rawCsvData = "ID,Содержание,Создано в,Источник,Тип штрих-кода,В закладках?,Ярлык\r\n";
|
||||
break;
|
||||
case "zh-CN":
|
||||
rawCsvData = "ID,内容,建立于,来源,条码类型,已书签?,标签\r\n";
|
||||
break;
|
||||
|
@ -471,6 +474,9 @@ export class SettingRecordPage {
|
|||
case "it":
|
||||
locale = it;
|
||||
break;
|
||||
case "ru":
|
||||
locale = ru;
|
||||
break;
|
||||
case "zh-CN":
|
||||
locale = zhCN;
|
||||
break;
|
||||
|
@ -501,6 +507,9 @@ export class SettingRecordPage {
|
|||
case "it":
|
||||
locale = it;
|
||||
break;
|
||||
case "ru":
|
||||
locale = ru;
|
||||
break;
|
||||
case "zh-CN":
|
||||
locale = zhCN;
|
||||
break;
|
||||
|
|
|
@ -134,7 +134,29 @@
|
|||
</ion-label>
|
||||
</ion-item>
|
||||
<ion-item *ngIf="isAndroid" class="ion-no-padding ripple-parent" detail="false" lines="none"
|
||||
(click)="confirmExitApp()">
|
||||
(click)="rateAndroidApp()">
|
||||
<ion-icon class="ion-margin-start ion-padding-horizontal" color="primary" name="logo-google-playstore"></ion-icon>
|
||||
<ion-label>
|
||||
<p class="ion-padding pre-line">
|
||||
<ion-text [color]="env.colorTheme === 'light'? 'dark' : 'light'" style="font-size: large;">
|
||||
{{ 'RATE_THE_APP' | translate }}
|
||||
</ion-text>
|
||||
</p>
|
||||
</ion-label>
|
||||
</ion-item>
|
||||
<ion-item *ngIf="isIos" class="ion-no-padding ripple-parent" detail="false" lines="none"
|
||||
(click)="rateIosApp()">
|
||||
<ion-icon class="ion-margin-start ion-padding-horizontal" color="primary" name="logo-apple-appstore"></ion-icon>
|
||||
<ion-label>
|
||||
<p class="ion-padding pre-line">
|
||||
<ion-text [color]="env.colorTheme === 'light'? 'dark' : 'light'" style="font-size: large;">
|
||||
{{ 'RATE_THE_APP' | translate }}
|
||||
</ion-text>
|
||||
</p>
|
||||
</ion-label>
|
||||
</ion-item>
|
||||
<ion-item *ngIf="isAndroid" class="ion-no-padding ripple-parent" detail="false" lines="none"
|
||||
(click)="exitApp()">
|
||||
<ion-icon class="ion-margin-start ion-padding-horizontal" color="danger" name="exit"></ion-icon>
|
||||
<ion-label>
|
||||
<p class="ion-padding pre-line">
|
||||
|
|
|
@ -28,10 +28,22 @@ export class SettingPage {
|
|||
await SplashScreen.hide()
|
||||
}
|
||||
|
||||
get isIos(): boolean {
|
||||
return this.platform.is('ios');
|
||||
}
|
||||
|
||||
get isAndroid(): boolean {
|
||||
return this.platform.is('android');
|
||||
}
|
||||
|
||||
rateAndroidApp() {
|
||||
window.open(this.env.GOOGLE_PLAY_URL, '_system');
|
||||
}
|
||||
|
||||
rateIosApp() {
|
||||
window.open(this.env.APP_STORE_URL, '_system');
|
||||
}
|
||||
|
||||
setLanguage() {
|
||||
this.router.navigate(['setting-language']);
|
||||
}
|
||||
|
@ -127,27 +139,8 @@ export class SettingPage {
|
|||
alert.present();
|
||||
}
|
||||
|
||||
async confirmExitApp(): Promise<void> {
|
||||
const alert = await this.alertController.create({
|
||||
header: this.translate.instant('EXIT_APP'),
|
||||
message: this.translate.instant('MSG.EXIT_APP'),
|
||||
cssClass: ['alert-bg'],
|
||||
buttons: [
|
||||
{
|
||||
text: this.translate.instant('EXIT'),
|
||||
handler: () => {
|
||||
navigator['app'].exitApp();
|
||||
}
|
||||
},
|
||||
{
|
||||
text: this.translate.instant('RATE_THE_APP'),
|
||||
handler: () => {
|
||||
this.openGooglePlay();
|
||||
}
|
||||
}
|
||||
]
|
||||
});
|
||||
await alert.present();
|
||||
exitApp() {
|
||||
navigator['app'].exitApp();
|
||||
}
|
||||
|
||||
openGooglePlay(): void {
|
||||
|
|
|
@ -15,7 +15,7 @@ import { v4 as uuidv4 } from 'uuid';
|
|||
import { Preferences } from '@capacitor/preferences';
|
||||
import { Observable } from 'rxjs';
|
||||
|
||||
export declare type LanguageType = 'de' | 'en' | 'fr' | 'it' | 'zh-CN' | 'zh-HK';
|
||||
export declare type LanguageType = 'de' | 'en' | 'fr' | 'it' | 'ru' | 'zh-CN' | 'zh-HK';
|
||||
export declare type TabPageType = "/tabs/scan" | "/tabs/generate" | "/tabs/import-image" | "/tabs/history" | "/tabs/setting";
|
||||
export declare type HistoryPageSegmentType = 'history' | 'bookmarks';
|
||||
export declare type OnOffType = "on" | "off";
|
||||
|
@ -31,7 +31,7 @@ export declare type ResultPageButtonsType = 'detailed' | 'icon-only';
|
|||
})
|
||||
export class EnvService {
|
||||
|
||||
public appVersionNumber: string = '3.2.0';
|
||||
public appVersionNumber: string = '3.3.0';
|
||||
|
||||
public startPage: TabPageType = "/tabs/scan";
|
||||
public historyPageStartSegment: HistoryPageSegmentType = 'history';
|
||||
|
@ -75,6 +75,7 @@ export class EnvService {
|
|||
public showSendMessageButton: OnOffType = 'on';
|
||||
public showSendEmailButton: OnOffType = 'on';
|
||||
public showOpenFoodFactsButton: OnOffType = 'on';
|
||||
public showExitAppAlert: OnOffType = "on";
|
||||
public debugMode: OnOffType = 'off';
|
||||
public autoExitAppMin: 1 | 3 | 5 | -1 = -1;
|
||||
|
||||
|
@ -86,6 +87,7 @@ export class EnvService {
|
|||
public readonly KEY_LANGUAGE = "language";
|
||||
public readonly KEY_COLOR = "color";
|
||||
public readonly KEY_DEBUG_MODE = "debug-mode-on";
|
||||
public readonly KEY_SHOW_EXIT_APP_ALERT = "showExitAppAlert";
|
||||
public readonly KEY_ORIENTATION = "orientation";
|
||||
public readonly KEY_SCAN_RECORD_LOGGING = "scan-record-logging";
|
||||
public readonly KEY_RECORDS_LIMIT = "recordsLimit";
|
||||
|
@ -121,10 +123,10 @@ export class EnvService {
|
|||
public readonly KEY_SHOW_OPEN_FOOD_FACTS_BUTTON = "showOpenFoodFactsButton";
|
||||
public readonly KEY_AUTO_EXIT_MIN = "autoExitAppMin";
|
||||
|
||||
public readonly KEY_ANDROID_NOT_SHOW_UPDATE_NOTES = "not-show-update-notes-v30200";
|
||||
public readonly KEY_IOS_NOT_SHOW_UPDATE_NOTES = "not-show-update-notes-v30200";
|
||||
public readonly KEY_ANDROID_PREV_NOT_SHOW_UPDATE_NOTES = "not-show-update-notes-v30100";
|
||||
public readonly KEY_IOS_PREV_NOT_SHOW_UPDATE_NOTES = "not-show-update-notes-v30100";
|
||||
public readonly KEY_ANDROID_NOT_SHOW_UPDATE_NOTES = "not-show-update-notes-v30300";
|
||||
public readonly KEY_IOS_NOT_SHOW_UPDATE_NOTES = "not-show-update-notes-v30300";
|
||||
public readonly KEY_ANDROID_PREV_NOT_SHOW_UPDATE_NOTES = "not-show-update-notes-v30200";
|
||||
public readonly KEY_IOS_PREV_NOT_SHOW_UPDATE_NOTES = "not-show-update-notes-v30200";
|
||||
|
||||
public readonly APP_FOLDER_NAME: string = 'SimpleQR';
|
||||
|
||||
|
@ -852,6 +854,15 @@ export class EnvService {
|
|||
await this.toggleColorTheme();
|
||||
}
|
||||
);
|
||||
await Preferences.get({ key: this.KEY_SHOW_EXIT_APP_ALERT }).then(
|
||||
async result => {
|
||||
if (result.value != null) {
|
||||
this.showExitAppAlert = result.value as OnOffType;
|
||||
} else {
|
||||
this.showExitAppAlert = 'on';
|
||||
}
|
||||
}
|
||||
);
|
||||
await Preferences.get({ key: this.KEY_DEBUG_MODE }).then(
|
||||
async result => {
|
||||
if (result.value != null) {
|
||||
|
@ -1216,6 +1227,7 @@ export class EnvService {
|
|||
this.showOpenFoodFactsButton = 'on';
|
||||
this.scanRecords = [];
|
||||
this.bookmarks = [];
|
||||
this.showExitAppAlert = 'on';
|
||||
this.debugMode = 'off';
|
||||
this.autoExitAppMin = -1;
|
||||
}
|
||||
|
@ -1349,6 +1361,9 @@ export class EnvService {
|
|||
this.showOpenFoodFactsButton = 'on';
|
||||
await Preferences.set({ key: this.KEY_SHOW_OPEN_FOOD_FACTS_BUTTON, value: this.showOpenFoodFactsButton });
|
||||
|
||||
this.showExitAppAlert = 'on';
|
||||
await Preferences.set({ key: this.KEY_SHOW_EXIT_APP_ALERT, value: this.showExitAppAlert });
|
||||
|
||||
this.debugMode = 'off';
|
||||
await Preferences.set({ key: this.KEY_DEBUG_MODE, value: this.debugMode });
|
||||
|
||||
|
@ -1600,6 +1615,9 @@ export class EnvService {
|
|||
case "it":
|
||||
language = "it"
|
||||
break;
|
||||
case "ru":
|
||||
language = "ru"
|
||||
break;
|
||||
case "zh":
|
||||
if (browserCultureLang == 'zh-CN' || browserCultureLang == 'zh-SG') {
|
||||
language = 'zh-CN';
|
||||
|
|
|
@ -165,6 +165,8 @@
|
|||
"RESET_DEFAULT": "Standard zurücksetzen",
|
||||
"RESTORE": "Wiederherstellen",
|
||||
"RESULT": "Ergebnis",
|
||||
"SAVE": "Speichern",
|
||||
"SAVED": "Gespeichert",
|
||||
"SCAN": "Scannen",
|
||||
"SCANNED": "Gescannt",
|
||||
"SCANNING_FEEDBACK_ONLY": "Nur Feedback scannen",
|
||||
|
|
|
@ -165,6 +165,8 @@
|
|||
"RESET_DEFAULT": "Reset Default",
|
||||
"RESTORE": "Restore",
|
||||
"RESULT": "Result",
|
||||
"SAVE": "Save",
|
||||
"SAVED": "Saved",
|
||||
"SCAN": "Scan",
|
||||
"SCANNED": "Scanned",
|
||||
"SCANNING_FEEDBACK_ONLY": "Scanning Feedback Only",
|
||||
|
|
|
@ -165,6 +165,8 @@
|
|||
"RESET_DEFAULT": "Réinitialiser par défaut",
|
||||
"RESTORE": "Restaurer",
|
||||
"RESULT": "Résultat",
|
||||
"SAVE": "Enregistrer",
|
||||
"SAVED": "Enregistrée",
|
||||
"SCAN": "Scanner",
|
||||
"SCANNED": "Scanné",
|
||||
"SCANNING_FEEDBACK_ONLY": "Vibrer lors de la numérisation uniquement",
|
||||
|
|
|
@ -165,6 +165,8 @@
|
|||
"RESET_DEFAULT": "Ripristina predefinito",
|
||||
"RESTORE": "Ripristina",
|
||||
"RESULT": "Risultato",
|
||||
"SAVE": "Salva",
|
||||
"SAVED": "Salvato",
|
||||
"SCAN": "Scannerizza",
|
||||
"SCANNED": "Scannerizzato",
|
||||
"SCANNING_FEEDBACK_ONLY": "Scansione esclusivamente del feedback",
|
||||
|
|
316
src/assets/i18n/ru.json
Normal file
316
src/assets/i18n/ru.json
Normal file
|
@ -0,0 +1,316 @@
|
|||
{
|
||||
"100_RECORDS": "100 записей",
|
||||
"30_RECORDS": "30 записей",
|
||||
"49_DIGIT": "49-значный",
|
||||
"50_RECORDS": "50 записей",
|
||||
"ABOUT": "О приложении",
|
||||
"ABOUT_SIMPLE_QR": "О Simple QR",
|
||||
"ADD": "Добавить",
|
||||
"ADD_BCC": "Добавить BCC",
|
||||
"ADD_CC": "Добавить CC",
|
||||
"ADD_CONTACT": "Добавить контакт",
|
||||
"ADD_RECIPIENT": "Добавить получателя",
|
||||
"APP": "Приложение",
|
||||
"APPEARANCE_AND_EFFECTS": "Внешний вид и эффекты",
|
||||
"APP_INITIAL_PAGE": "Стартовая страница",
|
||||
"APP_VERSION": "Версия приложения",
|
||||
"AT": "в",
|
||||
"AT_LEAST_1_MINUTE_LATER": "Как минимум через минуту",
|
||||
"AT_LEAST_3_MINUTES_LATER": "Как минимум через 3 минуты",
|
||||
"AT_LEAST_5_MINUTES_LATER": "Как минимум через 5 минут",
|
||||
"AUTO_KILL_BACKGROUND": "Фоновая активность",
|
||||
"AUTO_LOGGING": "Автоматическое добавление в историю",
|
||||
"AUTO_MAX_BRIGHTNESS": "Максимальная яркость",
|
||||
"AUTO_QR_CODE_POPUP": "Показывать QR-Код",
|
||||
"BACKGROUND_COLOR": "Цвет фона",
|
||||
"BACKING_UP": "Сохранение резервной копии",
|
||||
"BACKUP": "Резервное копирование",
|
||||
"BASE64": "Base64",
|
||||
"BASE64_DECODED": "Декодировано из Base64",
|
||||
"BASE64_ENCODED": "Закодировано в Base64",
|
||||
"BCC": "BCC",
|
||||
"BLACK": "Черная",
|
||||
"BOOKMARK": "Закладки",
|
||||
"BOOKMARKED": "Добавлено в закладки",
|
||||
"BOOKMARKED_TEXTS": "Сохраненные тексты",
|
||||
"BOOKMARKS": "Закладки",
|
||||
"BROWSE": "Просмотреть",
|
||||
"BROWSER": "Браузер",
|
||||
"BROWSE_WEBSITE": "Посетить веб-сайт",
|
||||
"CALL": "Позвонить",
|
||||
"CANCEL": "Отмена",
|
||||
"CC": "CC",
|
||||
"CITY": "Город",
|
||||
"CLEAR": "Очистить",
|
||||
"CLOSE": "Закрыть",
|
||||
"COLOR": "Цвет",
|
||||
"COLOR_THEME": "Тема",
|
||||
"COMING_SOON": "Скоро...",
|
||||
"CONTACT_METHOD": "Метод связи",
|
||||
"CONTACT_NAME": "Имя контакта",
|
||||
"CONTENT": "Содержание",
|
||||
"CONTENT_TYPE": "Тип содержания",
|
||||
"COPIED": "Скопировано",
|
||||
"COPY": "Скопировать",
|
||||
"COPY_SECRET_AND_SAVE_BACKUP": "Скопировать ключ и сохранить резервную копию",
|
||||
"COPY_TEXT": "Скопировать текст",
|
||||
"COUNTRY": "Страна",
|
||||
"CREATE": "Создать",
|
||||
"CREATED": "Создано",
|
||||
"CREATE_QR_CODE": "Создать QR-Код",
|
||||
"DARK": "Тёмная",
|
||||
"DATE_OF_BIRTH": "Дата рождения",
|
||||
"DEBUG_MODE": "Режим отладки",
|
||||
"DECODING": "Декодирование",
|
||||
"DECRYPTING": "Расшифровка",
|
||||
"DETAILED": "Подробнее",
|
||||
"DONE": "Готово",
|
||||
"DUCK_DUCK_GO": "DuckDuckGo",
|
||||
"ECOSIA": "Ecosia",
|
||||
"EDIT": "Редактировать",
|
||||
"EMAIL_ADDRESS": "Адрес электронной почты",
|
||||
"EMAIL_BODY": "Содержание электронного письма",
|
||||
"EMAIL_NTT_DOCOMO": "Электронное письмо (NTT Docomo)",
|
||||
"EMAIL_RECIPIENT": "Получатель",
|
||||
"EMAIL_SUBJECT": "Тема",
|
||||
"EMAIL_TO": "Отправить по электронной почте",
|
||||
"EMAIL_W3C_STANDARD": "Электронное письмо (стандарт W3C)",
|
||||
"ENCRYPTING": "Шифрование",
|
||||
"ERROR_CORRECTION_LEVEL": "Уровень коррекции ошибок",
|
||||
"EXIT": "Выйти",
|
||||
"EXIT_APP": "Выйти из приложения",
|
||||
"EXPORT": "Экспорт",
|
||||
"EXPORTING": "Экспортирование",
|
||||
"EXPORT_TO_CSV": "Экспортировать в CSV",
|
||||
"FAX_NUMBER": "Номер Fax",
|
||||
"FEMALE": "Женский",
|
||||
"FIRST_NAME": "Имя",
|
||||
"FOLLOW_SYSTEM_SETTINGS": "Как в системе",
|
||||
"FREE_TEXT": "Текст",
|
||||
"FULL_RESET": "Полный сброс",
|
||||
"FUNCTIONS": "Функции",
|
||||
"GENDER": "Пол",
|
||||
"GOOGLE_SEARCH": "Google Search",
|
||||
"HAPTIC_FEEDBACK_ONLY": "Только тактильный отклик",
|
||||
"HIDDEN_NETWORK_?": "Скрытая сеть?",
|
||||
"HOME_ADDRESS": "Домашний адрес",
|
||||
"HOME_PHONE_NUMBER": "Номер домашнего телефона",
|
||||
"ICON_ONLY": "Только иконка",
|
||||
"IMPORT": "Импорт",
|
||||
"IMPORT_FROM_CSV": "Импортировать из CSV",
|
||||
"IMPORT_IMAGE": "Импорт изображения",
|
||||
"INITIAL_SEGMENT": "Стартовая страница",
|
||||
"JOB_TITLE": "Должность",
|
||||
"LANGUAGE": "Язык",
|
||||
"LAST_NAME": "Фамилия",
|
||||
"LEVEL_H": "Уровень H",
|
||||
"LEVEL_L": "Уровень L",
|
||||
"LEVEL_M": "Уровень M",
|
||||
"LEVEL_Q": "Уровень Q",
|
||||
"LIGHT": "Светлая",
|
||||
"LOADING_DATA": "Загрузка информации",
|
||||
"LOCK_LANDSCAPE": "Альбомная",
|
||||
"LOCK_PORTRAIT": "Портретная",
|
||||
"LOG": "История",
|
||||
"LOG_BACKUP_AND_RESTORE": "История и восстановление",
|
||||
"MALE": "Мужской",
|
||||
"MANAGE_RECORDS": "Управление записями",
|
||||
"MARGIN": "Отступ",
|
||||
"MESSAGE": "Сообщение",
|
||||
"MESSAGE_CONTENT": "Содержание сообщения",
|
||||
"MICROSOFT_BING": "Microsoft Bing",
|
||||
"MOBILE_PHONE_NUMBER": "Номер мобильного телефона",
|
||||
"MORE": "Подробнее",
|
||||
"NAME": "Имя",
|
||||
"NO": "Нет",
|
||||
"NONE": "None",
|
||||
"NOT_AVAILABLE": "Нет доступа",
|
||||
"NOT_PROVIDED": "Не предоставлено",
|
||||
"NOT_TO_DISCLOSE": "Не указан",
|
||||
"NO_LIMIT": "Нет ограничений",
|
||||
"NUMBER_OF_RECORDS": "Количество записей",
|
||||
"OK": "ОК",
|
||||
"ONLY_DELETE_DATA": "Только удалить информацию",
|
||||
"ONLY_RESET_SETTING": "Только сбросить настройки",
|
||||
"OPEN": "Открыть",
|
||||
"OPEN_URL": "Открыть URL",
|
||||
"OPEN_WITH_...": "Открыть с помощью...",
|
||||
"OPTIMIZING_DATA_...": "Оптимизация информации...",
|
||||
"ORGANIZATION": "Организация",
|
||||
"ORIGINAL": "Оригинал",
|
||||
"OTHERS": "Другое",
|
||||
"PASSWORD": "Пароль",
|
||||
"PATCH_NOTES": "Нововведения",
|
||||
"PERMISSION_REQUIRED": "Необходимо разрешение",
|
||||
"PERSONAL": "Персональные данные",
|
||||
"PHONE_NO": "Номер телефона",
|
||||
"PHONE_NUMBER": "Номер телефона",
|
||||
"PLEASE_WAIT": "Пожалуйста, подождите",
|
||||
"POSTAL_CODE": "Почтовый индекс",
|
||||
"PREPARING": "Подготовка",
|
||||
"PREVIEW": "Предпросмотр",
|
||||
"PRIVACY_POLICY": "Политика конфиденциальности",
|
||||
"QR_CODE": "QR-Код",
|
||||
"QR_CODE_AND_DECODED_RESULT": "QR-Код и результат",
|
||||
"QR_CODE_CONTENT": "Содержание QR-Кода",
|
||||
"QR_CODE_STYLE": "Стиль QR-Кода",
|
||||
"RATE_THE_APP": "Оценить приложение",
|
||||
"RECORDS_LIMIT": "Ограничение количества записей",
|
||||
"REMOVE_ALL": "Удалить все",
|
||||
"REMOVE_BCC": "Убрать BCC",
|
||||
"REMOVE_CC": "Убрать CC",
|
||||
"REMOVE_RECIPIENT": "Убрать получателя",
|
||||
"REPORT_ISSUE": "Сообщить о проблеме",
|
||||
"RESET_APP": "Сброс приложения",
|
||||
"RESET_DEFAULT": "Настройки по умолчанию",
|
||||
"RESTORE": "Восстановление",
|
||||
"RESULT": "Результат",
|
||||
"SAVE": "Сохранять",
|
||||
"SAVED": "Сохранено",
|
||||
"SCAN": "Сканировать",
|
||||
"SCANNED": "Просканировано",
|
||||
"SCANNING_FEEDBACK_ONLY": "Только отклик сканирования",
|
||||
"SCAN_BY_CAMERA": "Сканирование с помощью камеры",
|
||||
"SCREEN_ORIENTATION": "Ориентация экрана",
|
||||
"SEARCH": "Поиск",
|
||||
"SEARCH_ENGINE": "Поисковая система",
|
||||
"SECRET": "Ключ",
|
||||
"SEND": "Отправить",
|
||||
"SEND_EMAIL": "Отправить электронное письмо",
|
||||
"SEND_MESSAGE": "Отправить сообщение",
|
||||
"SETTING": "Настройки",
|
||||
"SETTINGS": "Настройки",
|
||||
"SHARE": "Поделиться",
|
||||
"SHARING": "Отправка",
|
||||
"SHOW": "Показать",
|
||||
"SHOW_NUMBER_OR_RECORDS": "Показывать количество записей",
|
||||
"SHOW_QR_CODE": "Показать QR-Код",
|
||||
"SIMPLE_QR": "Simple QR",
|
||||
"STATE": "Округ",
|
||||
"STREET": "Улица",
|
||||
"SUCCESS": "Успешно",
|
||||
"SUPPORTED_BARCODE_TYPE": "Поддерживаемые операции",
|
||||
"SUPPORTED_TYPE": "Поддерживаемые операции",
|
||||
"SYSTEM_DEFAULT": "Как в системе",
|
||||
"TASK": "Задача",
|
||||
"TASK_BUTTON_LAYOUT": "Кнопки действия",
|
||||
"TURN_OFF": "Выключить",
|
||||
"TURN_ON": "Включить",
|
||||
"TURNED_OFF": "Выключено",
|
||||
"TURNED_ON": "Включено",
|
||||
"TUTORIAL": "Обучение",
|
||||
"UNDO": "Отменить",
|
||||
"UNKNOWN": "Неизвестно",
|
||||
"UPDATE_SUCCESSFULLY": "Успешно обновлено",
|
||||
"URL": "URL",
|
||||
"VCARD_CONTACT": "Контакт vCard",
|
||||
"VERSION_VERSION": "Версия {version}",
|
||||
"VIBRATION": "Вибрация",
|
||||
"VIEWED": "Просмотрено",
|
||||
"VIEW_BOOKMARK": "Просмотр закладки",
|
||||
"VIEW_GITHUB": "Посетить GitHub",
|
||||
"VIEW_LOG": "Просмотр истории",
|
||||
"VIEW_STORE_AND_SOURCE_CODE": "Посетить магазин и репозиторий с исходным кодом ",
|
||||
"VIEW_INSTRUCTIONS": "Посмотреть обучение",
|
||||
"WEBSITE": "Веб-сайт",
|
||||
"WIFI": "WiFi",
|
||||
"WIFI_ENCRYPTION": "Шифрование WiFi",
|
||||
"WIFI_SSID": "WiFi SSID",
|
||||
"WORK": "Место работы",
|
||||
"WORK_PHONE_NUMBER": "Номер рабочего телефона",
|
||||
"YAHOO_SEARCH": "Yahoo! Search",
|
||||
"YANDEX": "Yandex",
|
||||
"YES": "Да",
|
||||
"MSG": {
|
||||
"ALREADY_BOOKMARKED": "Ошибка! Уже добавлено в закладки ранее",
|
||||
"AUTO_KILL_BACKGROUND_EXPLAIN": "<p>Чтобы использовать меньше системных ресурсов и батареи, выставьте количество времени, спустя которое приложение будет автоматически остановлено, если оно работает в фоне.</p><br><p>Если вы выберете опцию <b>Как в системе</b>, фоновая активность приложения будет полностью контролироваться системой, приложение не будет приостанавливать свою работу самостоятельно.</p><br><p>Заметьте, что в некоторых ситуациях система может останавливать приложение заблаговременно.</p>",
|
||||
"AUTO_LOGGING_EXPLAIN": "Содержание каждого QR-Кода и Бар-Кода автоматически сохраняется после сканирования. Вы можете повторно обращаться к этим записям в разделе Истории.",
|
||||
"AUTO_MAX_BRIGHTNESS_EXPLAIN": "Автоматически увеличивать яркость экрана до максимального значения во время просмотра QR-Кода.",
|
||||
"AUTO_SHOW_QR_EXPLAIN": "Автоматически показывать QR-Код на странице результата после этих действий.",
|
||||
"BACKUP_EXPLAIN": "Вы можете создать локальную резервную копию всех записей истории и закладок. Вам будет выдан набор ключей после резервного копирования. Сохраняйте эти ключи, иначе вы не сможете восстановить созданную резервную копию. Заметьте, что Simple QR не поддерживает резервное копирование между разными платформами.",
|
||||
"BACKUP_FAILED": "Не удалось создать резервную копию",
|
||||
"BACKUP_FAILED_2": "Не удалось создать резервную копию. Пожалуйста, убедитесь, что приложению выдано разрешение на взаимодействие с файлами.",
|
||||
"BACKUP_SUCCESSFULLY": "<p>Резервное копирование успешно завершено. Пожалуйста, сохраните файл резервной копии и следующий ключ</p><p>{secret}</p>",
|
||||
"BARCODE_TYPE": "Сканирование<ul><li>QR-Код</li><li>Бар-Код</li><li>Код Aztec</li><li>Data Matrix</li><li>PDF417</li></ul>Импорт изображения<ul><li>QR-Код</li></ul>Создание<ul><li>QR-Код</li></ul>",
|
||||
"BOOKMARKED": "Успешно добавлено в закладки",
|
||||
"BUTTON_DISPLAY_EXPLAIN": "Показать или скрыть кнопки действий.",
|
||||
"BUTTON_STYLE_EXPLAIN": "Выберите стиль кнопок действий.",
|
||||
"CAMERA_PERMISSION": "Чтобы приложение могло осуществлять сканирование, предоставьте доступ к Камере.",
|
||||
"CONTACT_PERMISSION": "Для сохранения контакта, необходимо предоставить доступ к Контактам.",
|
||||
"COPIED_SECRET": "Ключ скопирован",
|
||||
"COPY_TEXT": "Какую часть контента вы бы хотели скопировать?",
|
||||
"CREATE_QRCODE_MAX_LENGTH": "Максимум 1817 символов",
|
||||
"CREATE_QRCODE_MAX_LENGTH_EXPLAIN": "Длина содержания сгенерированного QR-Кода не должна превышать 1817 символов.",
|
||||
"DEBUG_MODE_ON": "Режим Отладки успешно активирован",
|
||||
"DELETE_OVERFLOWED_RECORDS": "После того, как вы покинете эту страницу, лишние записи будут безвозвратно удалены.",
|
||||
"EMAIL_MAX_LENGTH": "Максимум 254 символа",
|
||||
"EMAIL_SUBJECT_MAX_LENGTH": "Максимум 78 символов",
|
||||
"ERROR_CORRECTION_LEVEL_EXPLAIN": "<p>В структуру QR-Кодов заложена способность восстановления информации, даже если Код поврежден.</p><p>Существует 4 уровня такой защиты:</p><p>Уровень L восстанавливает 7% байт информации.</p><p>Уровень M восстанавливает 15% байт информации.</p><p>Уровень Q восстанавливает 25% байт информации.</p><p>Уровень H восстанавливает 30% байт информации.</p><br><p>Заметьте, что увеличение уровня защиты может увеличить вероятность восстановления информации, но также увеличивает размер QR-Кода. Поэтому, при обычных условиях рекомендуем использовать уровень M.</p>",
|
||||
"EXIT_APP": "<p>Уверены, что хотите покинуть приложение?</p><p>Если вам нравится Simple QR, пожалуйста, оцените его в магазине приложений.</p>",
|
||||
"EXPORT_TO_CSV_EXPLAIN": "Вы можете экспортировать все записи истории и закладки в CSV файл.",
|
||||
"FAILED_SAVING_CONTACT": "Не удалось сохранить контакт",
|
||||
"FAIL_PREPARE_SMS": "Не удалось отправить сообщение",
|
||||
"IMPORT_FAILED": "Не удалось импортировать",
|
||||
"IMPORT_FROM_CSV_EXPLAIN": "Вы можете импортировать записи истории и закладки из CSV файла в формате, заданном Simple QR. Если вы желаете переместить информацию между Android и iOS, воспользуйтесь этой функцией.",
|
||||
"INPUT_TAG": "Пожалуйста, дайте закладке имя",
|
||||
"INVALID_BK_FILE": "Это несовместимый файл резервной копии.",
|
||||
"INVALID_CSV_FILE": "Это несовместимый CSV файл.",
|
||||
"NOT_BASE64_DE": "Невозможно декодировать информацию из Base64",
|
||||
"NOT_BASE64_EN": "Невозможно закодировать информацию в Base64",
|
||||
"NOT_BASE64_EN_DE": "Невозможно закодировать или декодировать информацию Base64",
|
||||
"NO_QR_CODE": "Не удалось распознать QR-Код",
|
||||
"ONLY_VCARD_3_0": "Поддерживается только формат vCard 3.0",
|
||||
"PLEASE_INPUT_VALID_SECRET": "Пожалуйста, введите правильный ключ",
|
||||
"PORTRAIT_ONLY": "Портретная",
|
||||
"PREPARE_SMS": "Подготовка сообщения",
|
||||
"PREVIOUS_RECORDS": "Записи предыдущих действий: сканирования, создания или просмотра",
|
||||
"QR_CODE_VALUE_NOT_EMPTY": "Содержание QR-Кода не может быть пустым",
|
||||
"READ_IMAGE_PERMISSION": "Необходимо предоставить разрешение взаимодействовать с файлами, чтобы просканировать изображение.",
|
||||
"RECORDS_LIMIT_EXPLAIN": "Укажите максимальное количество записей истории. Старые записи будут автоматически удалены при достижении указанного лимита.",
|
||||
"REMOVE_ALL_BOOKMARKS": "Уверены, что хотите <b>безвозвратно</b> удалить все закладки?",
|
||||
"REMOVE_ALL_RECORD": "Уверены, что хотите <b>безвозвратно</b> удалить все записи истории?",
|
||||
"RESET_APP": "Уверены, что хотите вернуться к настройкам по умолчанию и удалить все данные приложения? <b>Это действие необратимо.</b>",
|
||||
"RESET_DEFAULT": "Уверены, что хотите вернуться к настройкам по умолчанию?",
|
||||
"RESTORE_EXPLAIN": "Вы можете восстановить закладки и записи истории из резервной копии. Полученные данные будут совмещены с текущими данными приложения. Файл резервной копии должен иметь тип TFSQBK.",
|
||||
"RESTORE_EXPLAIN_IOS": "Вы можете восстановить закладки и записи истории из резервной копии. Полученные данные будут совмещены с текущими данными приложения. Файл резервной копии должен иметь тип ISQBK.",
|
||||
"RESTORE_FAILED": "Не удалось восстановить",
|
||||
"RESTORE_SECRET": "Пожалуйста, введите ключ для восстановления данных",
|
||||
"RESTORE_SUCCESSFUL": "Восстановление успешно завершено",
|
||||
"RESTORE_WRONG_SECRET": "Неверный ключ",
|
||||
"SAVED_CONTACT": "Контакт сохранен",
|
||||
"SAVING_CONTACT": "Идет сохранение контакта",
|
||||
"SCAN_QR_FROM_IMAGE": "Simple QR использует модуль \"cozmo/jsQR\", чтобы сканировать QR-Код из изображение. Чтобы успешно осуществить сканирование",
|
||||
"SCAN_QR_FROM_IMAGE_R1": "Дайте приложению разрешение на доступ к Памяти устройства или Фото на нем.",
|
||||
"SCAN_QR_FROM_IMAGE_R2": "Убедитесь, что фон изображения не прозрачный. Не рекомендовано использовать изображение, полученные не при помощи камеры.",
|
||||
"SCAN_QR_FROM_IMAGE_R3": "Отмените редактирование фото, если вы хотите просканировать изображение целиком (по ситуации).",
|
||||
"SEARCH": "Что конкретно вы хотите найти?",
|
||||
"SEARCH_ENGINE_EXPLAIN": "Выберите поисковую систему для осуществления поиска после получения результата.",
|
||||
"SHARE_QR": "Скорее сканируй!\n\nОтправлено при помощи Simple QR",
|
||||
"SMS_MAX_LENGTH": "Максимум 160 символов",
|
||||
"SSID_MAX_LENGTH": "Максимум 32 символа",
|
||||
"START_PAGE_EXPLAIN": "Выберете стартовую страницу приложения.",
|
||||
"START_PAGE_HEADER_EXPLAIN": "Показывать заголовок Simple QR на стартовой странице.",
|
||||
"TAG_MAX_LENGTH": "Максимум 30 символов",
|
||||
"TAG_MAX_LENGTH_EXPLAIN": "Длина имени не должна превышать 30 символов..",
|
||||
"TUTORIAL_NOT_SHOW_AGAIN": "Не показывать снова",
|
||||
"TUTORIAL_SWIPE_LEFT": "Смахните влево, чтобы удалить соответствующую запись.",
|
||||
"TUTORIAL_SWIPE_RIGHT": "Смахните вправо, чтобы добавить текст соответствующей записи в закладки / редактировать имя соответствующей закладки.",
|
||||
"UNDO_DELETE": "Вы можете отменить удаление",
|
||||
"VIBRATION_EXPLAIN": "Использовать вибрацию или тактильный отклик. Заметьте, что не все устройства поддерживают эту функцию."
|
||||
},
|
||||
"BARCODE_TYPE": {
|
||||
"1D": "Бар-Код ",
|
||||
"AZTEC": "Код Aztec ",
|
||||
"DATA_MATRIX": "Data Matrix ",
|
||||
"EAN": "European Article Number ",
|
||||
"MAXICODE": "MaxiCode ",
|
||||
"PDF_417": "PDF417 ",
|
||||
"QR_CODE": "QR-Код ",
|
||||
"RSS": "GS1 DataBar ",
|
||||
"UPC": "Universal Product Code "
|
||||
},
|
||||
"UPDATE": {
|
||||
"UPDATE_NOTES_ANDROID": "<p>В этом релизе вас ждет несколько обновлений и новых функций. Посетите GitHub проекта, чтобы узнать детали.</p>",
|
||||
"UPDATE_NOTES_IOS": "<p>В этом релизе вас ждет несколько обновлений и новых функций. Посетите GitHub проекта, чтобы узнать детали.</p>"
|
||||
}
|
||||
}
|
|
@ -165,6 +165,8 @@
|
|||
"RESET_DEFAULT": "还原预设值",
|
||||
"RESTORE": "还原",
|
||||
"RESULT": "结果",
|
||||
"SAVE": "储存",
|
||||
"SAVED": "已储存",
|
||||
"SCAN": "扫描",
|
||||
"SCANNED": "扫描",
|
||||
"SCANNING_FEEDBACK_ONLY": "仅扫描反馈",
|
||||
|
|
|
@ -165,6 +165,8 @@
|
|||
"RESET_DEFAULT": "還原預設值",
|
||||
"RESTORE": "還原",
|
||||
"RESULT": "結果",
|
||||
"SAVE": "儲存",
|
||||
"SAVED": "已儲存",
|
||||
"SCAN": "掃描",
|
||||
"SCANNED": "掃描",
|
||||
"SCANNING_FEEDBACK_ONLY": "僅掃描反饋",
|
||||
|
|
|
@ -109,6 +109,15 @@ ion-tab-button:not(.tab-selected)::part(native):hover {
|
|||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.alert-input-no-border .alert-checkbox-group {
|
||||
border: 0px !important;
|
||||
}
|
||||
|
||||
.alert-input-no-border .alert-checkbox-label {
|
||||
overflow: auto !important;
|
||||
white-space: pre-line !important;
|
||||
}
|
||||
|
||||
.alert-can-copy {
|
||||
user-select: text !important;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue